Compare commits

..

No commits in common. "master" and "v1.3.3" have entirely different histories.

9 changed files with 2097 additions and 5424 deletions

View File

@ -1,109 +1,47 @@
# Changelog # 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) ## 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 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.
## 2024-06-23 - 1.3.1 - fix(aidocs_classes)
## 23.06.2024 - 1.3.2 - fix(aidocs_classes)
Fix typo in INextCommitObject interface and update date format in changelog generation. 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.
## 2024-06-23 - 1.3.0 - fix(aidocs_classes) ## 2023-xx-xx - 1.3.1 - aidocs_classes
Fix typo in INextCommitObject interface Fix typo in INextCommitObject interface
- Corrected a minor typo in the INextCommitObject interface for consistency.
## 2024-06-23 - 1.2.4 - feat(core) ## 2023-xx-xx - 1.3.0 - core
Added smarttime dependency and improved changelog generation Added smarttime dependency and improved changelog generation
- Introduced smarttime dependency to the core module.
- Enhanced changelog generation to be more efficient.
## 2024-06-23 - 1.2.3 - fix(logging) ## 2023-xx-xx - 1.2.4 - logging
Refactor logger initialization to use commitinfo data Refactor logger initialization to use commitinfo data
- Logger initialization now utilizes commitinfo data for better context and accuracy.
## 2024-06-23 - 1.2.2 - fix(aidocs) ## 2023-xx-xx - 1.2.3 - aidocs
Fix bug in AiDoc class causing undefined token handling Fix bug in AiDoc class causing undefined token handling
- Resolved an issue in the AiDoc class where undefined tokens were not being handled correctly.
## 2024-06-23 - 1.2.0 - fix(core) ## 2023-xx-xx - 1.2.1 - core
Fixed usage of plugins in project context and readme generation 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.
## 2024-06-23 - 1.1.42 - feat(aidocs_classes) ## 2023-xx-xx - 1.2.0 - aidocs_classes
Enhance changelog generation by supporting complete generation in the absence of previous changelog files 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.
## 2024-06-23 - 1.1.41 - fix(aidocs_classes) ## 2023-xx-xx - 1.1.42 - aidoc_classes
Improve commit message generation by handling empty diffs and updating changelog instructions 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", "name": "@git.zone/tsdoc",
"version": "1.4.4", "version": "1.3.3",
"private": false, "private": false,
"description": "An advanced TypeScript documentation tool using AI to generate and enhance documentation for TypeScript projects.", "description": "An advanced TypeScript documentation tool using AI to generate and enhance documentation for TypeScript projects.",
"type": "module", "type": "module",
@ -23,14 +23,13 @@
"@git.zone/tsrun": "^1.2.46", "@git.zone/tsrun": "^1.2.46",
"@git.zone/tstest": "^1.0.90", "@git.zone/tstest": "^1.0.90",
"@push.rocks/tapbundle": "^5.0.23", "@push.rocks/tapbundle": "^5.0.23",
"@types/node": "^22.8.1" "@types/node": "^20.14.8"
}, },
"dependencies": { "dependencies": {
"@git.zone/tspublish": "^1.5.5",
"@push.rocks/early": "^4.0.3", "@push.rocks/early": "^4.0.3",
"@push.rocks/npmextra": "^5.0.23", "@push.rocks/npmextra": "^5.0.23",
"@push.rocks/qenv": "^6.0.5", "@push.rocks/qenv": "^6.0.5",
"@push.rocks/smartai": "^0.4.2", "@push.rocks/smartai": "^0.0.17",
"@push.rocks/smartcli": "^4.0.11", "@push.rocks/smartcli": "^4.0.11",
"@push.rocks/smartdelay": "^3.0.5", "@push.rocks/smartdelay": "^3.0.5",
"@push.rocks/smartfile": "^11.0.20", "@push.rocks/smartfile": "^11.0.20",
@ -41,7 +40,7 @@
"@push.rocks/smartpath": "^5.0.18", "@push.rocks/smartpath": "^5.0.18",
"@push.rocks/smartshell": "^3.0.5", "@push.rocks/smartshell": "^3.0.5",
"@push.rocks/smarttime": "^4.0.6", "@push.rocks/smarttime": "^4.0.6",
"typedoc": "^0.27.9", "typedoc": "^0.26.1",
"typescript": "^5.5.2" "typescript": "^5.5.2"
}, },
"files": [ "files": [

7296
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

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

View File

@ -1,8 +1,6 @@
import type { AiDoc } from '../classes.aidoc.js'; import type { AiDoc } from '../classes.aidoc.js';
import * as plugins from '../plugins.js'; import * as plugins from '../plugins.js';
import * as paths from '../paths.js';
import { ProjectContext } from './projectcontext.js'; import { ProjectContext } from './projectcontext.js';
import { logger } from '../logging.js';
export class Readme { export class Readme {
// INSTANCE // INSTANCE
@ -23,7 +21,7 @@ export class Readme {
// lets first check legal before introducung any cost // lets first check legal before introducung any cost
const npmExtraJson = JSON.parse( const npmExtraJson = JSON.parse(
(await projectContext.gatherFiles()).smartfilesNpmextraJSON.contents.toString() (await projectContext.gatherFiles()).smartfilesNpmextraJSON.contents.toString(),
); );
const legalInfo = npmExtraJson?.tsdoc?.legal; const legalInfo = npmExtraJson?.tsdoc?.legal;
if (!legalInfo) { if (!legalInfo) {
@ -81,64 +79,6 @@ The Readme should follow the following template:
readme.contents = Buffer.from(finalReadmeString); readme.contents = Buffer.from(finalReadmeString);
await readme.write(); 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; return result.message;
} }
} }

View File

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

View File

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