Compare commits

...

28 Commits

Author SHA1 Message Date
84947cfb80 1.4.4
Some checks failed
Default (tags) / security (push) Failing after 1s
Default (tags) / test (push) Failing after 1s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2025-02-25 18:33:51 +00:00
1a9ac9091d fix(dependencies): Update dependencies to latest versions 2025-02-25 18:33:51 +00:00
88b93b8b83 1.4.3
Some checks failed
Default (tags) / security (push) Failing after 2s
Default (tags) / test (push) Failing after 1s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2025-01-14 17:42:19 +01:00
77279a9135 fix(aidocs_classes): Improve readme generation instructions to ensure correct markdown formatting. 2025-01-14 17:42:19 +01:00
7426addbdd 1.4.2 2024-10-28 21:45:28 +01:00
58d060d729 fix(cli): Ensure async completion for aidoc readme and description generation 2024-10-28 21:45:28 +01:00
370cbfe6f3 1.4.1 2024-10-28 21:20:51 +01:00
2adb4e8cb0 fix(readme): Correct async call to getModuleSubDirs in readme generation. 2024-10-28 21:20:50 +01:00
e8608b1cae 1.4.0 2024-10-28 21:16:00 +01:00
33fa7fa337 feat(aidocs): Added support for building readmes for sub-modules in aidocs 2024-10-28 21:15:59 +01:00
2946bcaf49 1.3.12 2024-06-24 00:01:37 +02:00
d962e17c18 fix(aidocs): Fix changelog generation by handling leading newlines 2024-06-24 00:01:36 +02:00
a22c400355 1.3.11 2024-06-23 23:59:44 +02:00
08b7305ef0 fix(core): Fixed new changelog formatting issue to retain consistent spacing. 2024-06-23 23:59:43 +02:00
d7b462fda9 1.3.10 2024-06-23 23:58:32 +02:00
01e6c15626 fix(aidocs_classes): Fix changelog format to remove extra newline 2024-06-23 23:58:31 +02:00
94a066247f 1.3.9 2024-06-23 23:50:51 +02:00
7de157ccb3 fix(aidoc): Fix changelog generation by properly stripping markdown code fences 2024-06-23 23:50:51 +02:00
d783965b25 1.3.8 2024-06-23 23:29:37 +02:00
07f1413d5e fix(changelog): Fix changelog generation by properly stripping markdown code fences 2024-06-23 23:29:36 +02:00
d7bf45f6b5 1.3.7 2024-06-23 23:24:09 +02:00
3eb64bcb5d fix(aidoc): Update to include package-lock.json in uncommitted changes check 2024-06-23 23:24:09 +02:00
e24a027fdd 1.3.6 2024-06-23 23:20:02 +02:00
3f451cfcb1 fix(commit): Fixed issue with retrieving uncommitted diffs in git repository 2024-06-23 23:20:01 +02:00
e355c51c8d 1.3.5 2024-06-23 23:05:47 +02:00
b0fcaba2c3 fix(aidocs_classes): Refactor and enhance changelog formatting 2024-06-23 23:05:47 +02:00
4ea205e11b 1.3.4 2024-06-23 22:48:06 +02:00
f819e7b521 fix(aidocs_classes): Fix changelog formatting issue in commit class 2024-06-23 22:48:05 +02:00
9 changed files with 5450 additions and 2123 deletions

View File

@ -1,47 +1,109 @@
# Changelog
## 2025-02-25 - 1.4.4 - fix(dependencies)
Update dependencies to latest versions
- Updated '@push.rocks/smartai' from '^0.0.17' to '^0.4.2'
- Updated 'typedoc' from '^0.26.1' to '^0.27.9'
## 2025-01-14 - 1.4.3 - fix(aidocs_classes)
Improve readme generation instructions to ensure correct markdown formatting.
- Added guidance to avoid using backticks at the beginning and end of readme generation to prevent markdown issues.
- Clarified that the output is directly written to readme.md and backticks should only be used for code blocks.
## 2024-10-28 - 1.4.2 - fix(cli)
Ensure async completion for aidoc readme and description generation
- Added await statements for asynchronous methods buildReadme and buildDescription in the aidoc command.
## 2024-10-28 - 1.4.1 - fix(readme)
Correct async call to getModuleSubDirs in readme generation.
- Fixed an issue with asynchronous handling in readme generation for submodules.
- Ensured that getModuleSubDirs function is called with await to handle promises properly.
## 2024-10-28 - 1.4.0 - feat(aidocs)
Added support for building readmes for sub-modules in aidocs
- Updated the `Readme` class to handle monorepo projects by generating readmes for sub-modules.
- Integrated `tspublish` to identify sub-modules for readme generation.
## 2024-06-24 - 1.3.12 - fix(aidocs)
Fix changelog generation by handling leading newlines
- Fixed handling of leading newlines in the changelog to ensure proper formatting.
## 2024-06-23 - 1.3.11 - fix(core)
Fixed new changelog formatting issue to retain consistent spacing.
- Adjusted the new changelog generation to ensure consistent spacing for improved readability.
## 2024-06-23 - 1.3.10 - fix(aidocs_classes)
Fix changelog format to remove extra newline
- Updated `ts/aidocs_classes/commit.ts` to fix the changelog format.
## 2024-06-23 - 1.3.9 - fix(aidoc)
Fix changelog generation by properly stripping markdown code fences
- Corrected the changelog generation code to ensure markdown code fences are properly stripped.
## 2024-06-23 - 1.3.8 - fix(changelog)
Fix changelog generation by properly stripping markdown code fences
- Corrected the changelog generation code to ensure markdown code fences are properly stripped.
## 2024-06-23 - 1.3.7 - fix(aidoc)
Update to include package-lock.json in uncommitted changes check
- Modified the getUncommittedDiff method call in commit.ts to include package-lock.json along with pnpm-lock.yaml
## 2024-06-23 - 1.3.6 - fix(commit)
Fixed issue with retrieving uncommitted diffs in git repository
- Revised logic to correctly handle uncommitted changes by using an array for `getUncommittedDiff` method
- Ensured proper handling and representation of uncommitted changes in the output
## 2024-06-23 - 1.3.5 - fix(aidocs_classes)
Refactor and enhance changelog formatting
- Updated the `commit.ts` file to improve the changelog formatting and ensure consistency.
- Enhanced the changelog instructions to include summarizing messages for omitted commits.
- Removed unnecessary console logging in `projectcontext.ts`.
```markdown
## 2024-06-23 - 1.3.3 - fix(aidocs_classes)
Fix changelog formatting issue in commit class
## 2024-06-23 - 1.3.2 - fix(aidocs_classes)
Fix minor bugs and update dependencies in aidocs_classes
- Fixed typo in INextCommitObject interface within the aidocs_classes.
- Updated date format in changelog generation from European format to hyphened sortable format.
- Updated @push.rocks/smartgit dependency from version 3.0.4 to 3.1.0.
- Updated typedoc dependency from version 0.26.0 to 0.26.1.
- Improved commit message generation by adding handling for empty diffs and updating changelog instructions.
## 23.06.2024 - 1.3.2 - fix(aidocs_classes)
## 2024-06-23 - 1.3.1 - fix(aidocs_classes)
Fix typo in INextCommitObject interface and update date format in changelog generation.
- Corrected typo in INextCommitObject interface within the aidocs_classes directory.
- Updated date format in changelog generation from European format to hyphened sortable format.
## 2023-xx-xx - 1.3.1 - aidocs_classes
## 2024-06-23 - 1.3.0 - fix(aidocs_classes)
Fix typo in INextCommitObject interface
- Corrected a minor typo in the INextCommitObject interface for consistency.
## 2023-xx-xx - 1.3.0 - core
## 2024-06-23 - 1.2.4 - feat(core)
Added smarttime dependency and improved changelog generation
- Introduced smarttime dependency to the core module.
- Enhanced changelog generation to be more efficient.
## 2023-xx-xx - 1.2.4 - logging
## 2024-06-23 - 1.2.3 - fix(logging)
Refactor logger initialization to use commitinfo data
- Logger initialization now utilizes commitinfo data for better context and accuracy.
## 2023-xx-xx - 1.2.3 - aidocs
## 2024-06-23 - 1.2.2 - fix(aidocs)
Fix bug in AiDoc class causing undefined token handling
- Resolved an issue in the AiDoc class where undefined tokens were not being handled correctly.
## 2023-xx-xx - 1.2.1 - core
## 2024-06-23 - 1.2.0 - fix(core)
Fixed usage of plugins in project context and readme generation
- Improved the usage of plugins within the project context.
- Fixed issues related to README.md generation.
## 2023-xx-xx - 1.2.0 - aidocs_classes
## 2024-06-23 - 1.1.42 - feat(aidocs_classes)
Enhance changelog generation by supporting complete generation in the absence of previous changelog files
- Updated changelog generation to support complete generation even when previous changelog files are absent.
## 2023-xx-xx - 1.1.42 - aidoc_classes
## 2024-06-23 - 1.1.41 - fix(aidocs_classes)
Improve commit message generation by handling empty diffs and updating changelog instructions
- Enhanced commit message generation to handle empty diffs.
- Updated instructions for changelog generation for better clarity.
```

View File

@ -1,6 +1,6 @@
{
"name": "@git.zone/tsdoc",
"version": "1.3.3",
"version": "1.4.4",
"private": false,
"description": "An advanced TypeScript documentation tool using AI to generate and enhance documentation for TypeScript projects.",
"type": "module",
@ -23,13 +23,14 @@
"@git.zone/tsrun": "^1.2.46",
"@git.zone/tstest": "^1.0.90",
"@push.rocks/tapbundle": "^5.0.23",
"@types/node": "^20.14.8"
"@types/node": "^22.8.1"
},
"dependencies": {
"@git.zone/tspublish": "^1.5.5",
"@push.rocks/early": "^4.0.3",
"@push.rocks/npmextra": "^5.0.23",
"@push.rocks/qenv": "^6.0.5",
"@push.rocks/smartai": "^0.0.17",
"@push.rocks/smartai": "^0.4.2",
"@push.rocks/smartcli": "^4.0.11",
"@push.rocks/smartdelay": "^3.0.5",
"@push.rocks/smartfile": "^11.0.20",
@ -40,7 +41,7 @@
"@push.rocks/smartpath": "^5.0.18",
"@push.rocks/smartshell": "^3.0.5",
"@push.rocks/smarttime": "^4.0.6",
"typedoc": "^0.26.1",
"typedoc": "^0.27.9",
"typescript": "^5.5.2"
},
"files": [

7348
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@git.zone/tsdoc',
version: '1.3.3',
version: '1.4.4',
description: 'An advanced TypeScript documentation tool using AI to generate and enhance documentation for TypeScript projects.'
}

View File

@ -27,7 +27,10 @@ export class Commit {
smartgitInstance,
this.projectDir
);
const diffString = await gitRepo.getUncommittedDiff();
const diffStringArray = await gitRepo.getUncommittedDiff([
'pnpm-lock.yaml',
'package-lock.json',
]);
const projectContext = new ProjectContext(this.projectDir);
let contextString = await projectContext.update();
contextString = `
@ -35,7 +38,7 @@ ${contextString}
Below is the diff of the uncommitted changes. If nothing is changed, there are no changes:
${diffString || 'No changes.'}
${diffStringArray[0] ? diffStringArray.join('\n\n') : 'No changes.'}
`;
let result = await this.aiDocsRef.openaiInstance.chat({
@ -59,6 +62,8 @@ interface {
recommendedNextVersion: string; // the recommended next version of the project, x.x.x
}
For the recommendedNextVersionDetails, please only add a detail entries to the array if it has an obvious value to the reader.
You are being given the files of the project. You should use them to create the commit message.
Also you are given a diff
@ -81,16 +86,18 @@ Also you are given a diff
if (!previousChangelog) {
// lets build the changelog based on that
const commitMessages = await gitRepo.getAllCommitMessages();
console.log(JSON.stringify(commitMessages, null, 2));
let result2 = await this.aiDocsRef.openaiInstance.chat({
messageHistory: [],
systemMessage: `
You are building a changelog.md file for the project.
Omit commits and versions that lack relevant changes.
Omit commits and versions that lack relevant changes, but make sure to mention them as a range with a summarizing message instead.
A changelog entry should look like this:
## yyyy-mm-dd - x.x.x - scope here
main descriptiom here
- detailed bullet points follow
You are given:
@ -106,17 +113,20 @@ ${JSON.stringify(commitMessages, null, 2)}
previousChangelog = await plugins.smartfile.SmartFile.fromString(
previousChangelogPath,
result2.message,
result2.message.replaceAll('```markdown', '').replaceAll('```', ''),
'utf8'
);
}
let oldChangelog = previousChangelog.contents.toString().replace('# Changelog\n\n', '');
if (oldChangelog.startsWith('\n')) {
oldChangelog = oldChangelog.replace('\n', '');
}
let newDateString = new plugins.smarttime.ExtendedDate().exportToHyphedSortableDate();
let newChangelog = `# Changelog\n\n${`## ${newDateString} - {{nextVersion}} - {{nextVersionScope}}
{{nextVersionMessage}}
{{nextVersionDetails}}
`}\n\n${oldChangelog}\n`;
{{nextVersionDetails}}`}\n\n${oldChangelog}`;
resultObject.changelog = newChangelog;
return resultObject;

View File

@ -47,7 +47,6 @@ export class ProjectContext {
}
public async convertFilesToContext(filesArg: plugins.smartfile.SmartFile[]) {
console.log(`Using the following files for the documentation:`);
filesArg.map((fileArg) => {
// console.log(` -> ${fileArg.relative}`);
});

View File

@ -1,6 +1,8 @@
import type { AiDoc } from '../classes.aidoc.js';
import * as plugins from '../plugins.js';
import * as paths from '../paths.js';
import { ProjectContext } from './projectcontext.js';
import { logger } from '../logging.js';
export class Readme {
// INSTANCE
@ -21,7 +23,7 @@ export class Readme {
// lets first check legal before introducung any cost
const npmExtraJson = JSON.parse(
(await projectContext.gatherFiles()).smartfilesNpmextraJSON.contents.toString(),
(await projectContext.gatherFiles()).smartfilesNpmextraJSON.contents.toString()
);
const legalInfo = npmExtraJson?.tsdoc?.legal;
if (!legalInfo) {
@ -79,6 +81,64 @@ The Readme should follow the following template:
readme.contents = Buffer.from(finalReadmeString);
await readme.write();
// lets care about monorepo aspects
const tsPublishInstance = new plugins.tspublish.TsPublish();
const subModules = await tsPublishInstance.getModuleSubDirs(paths.cwd);
logger.log('info', `Found ${Object.keys(subModules).length} sub modules`);
for (const subModule of Object.keys(subModules)) {
logger.log('info', `Building readme for ${subModule}`);
const subModuleContextString = await projectContext.update();
let result = await this.aiDocsRef.openaiInstance.chat({
systemMessage: `
You create markdown readmes for npm projects. You only output the markdown readme.
IMPORTANT: YOU ARE NOW CREATING THE README FOR THE FOLLOWING SUB MODULE: ${subModule} !!!!!!!!!!!
The Sub Module will be published with the following data:
${JSON.stringify(plugins.smartfile.fs.toStringSync(plugins.path.join(paths.cwd, subModule, 'tspublish.json')), null, 2)}
The Readme should follow the following template:
# Project Name
[
The name is the module name of package.json
The description is in the description field of package.json
]
## Install
[
Write a short text on how to install the project
]
## Usage
[
Give code examples here.
Construct sensible scenarios for the user.
Make sure to show a complete set of features of the module.
Don't omit use cases.
It does not matter how much time you need.
ALWAYS USE ESM SYNTAX AND TYPESCRIPT.
DON'T CHICKEN OUT. Write at least 4000 words. More if necessary.
If there is already a readme, take the Usage section as base. Remove outdated content, and expand and improve upon the valid parts.
Super important: Check for completenes.
Don't include any licensing information. This will be added in a later step.
Avoid "in conclusions".
Good to know:
* npmextra.json contains overall module information.
* readme.hints.md provides valuable hints about module ideas.
* Your output lands directly in the readme.md file.
* Don't use \`\`\` at the beginning or the end. It'll cause problems. Only use it for codeblocks. You are directly writing markdown. No need to introduce it weirdly.
]
`,
messageHistory: [],
userMessage: subModuleContextString,
});
const subModuleReadmeString = result.message + '\n' + legalInfo;
await plugins.smartfile.memory.toFs(subModuleReadmeString, plugins.path.join(paths.cwd, subModule, 'readme.md'));
logger.log('success', `Built readme for ${subModule}`);
}
return result.message;
}
}

View File

@ -28,14 +28,14 @@ export const run = async () => {
});
tsdocCli.addCommand('aidoc').subscribe(async (argvArg) => {
logger.log('info', `Generating new readme...`);
logger.log('info', `This may take some time...`);
const aidocInstance = new AiDoc();
await aidocInstance.start();
aidocInstance.buildReadme(paths.cwd);
logger.log('info', `Generating new readme...`);
logger.log('info', `This may take some time...`);
await aidocInstance.buildReadme(paths.cwd);
logger.log('info', `Generating new keywords...`);
logger.log('info', `This may take some time...`);
aidocInstance.buildDescription(paths.cwd);
await aidocInstance.buildDescription(paths.cwd);
});
tsdocCli.addCommand('test').subscribe((argvArg) => {

View File

@ -34,6 +34,11 @@ export {
smarttime,
};
// @git.zone scope
import * as tspublish from '@git.zone/tspublish';
export { tspublish };
// third party scope
import * as typedoc from 'typedoc';