Compare commits

..

40 Commits

Author SHA1 Message Date
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
d4903f32f0 1.3.3 2024-06-23 22:47:28 +02:00
34102a2544 fix(aidocs_classes): Fix minor bugs and update dependencies in aidocs_classes 2024-06-23 22:47:27 +02:00
5e2171dbfd 1.3.2 2024-06-23 19:55:40 +02:00
70d4af653a fix(aidocs_classes): Fix typo in INextCommitObject interface and update date format in changelog generation. 2024-06-23 19:55:39 +02:00
06f6fdef98 1.3.1 2024-06-23 19:47:44 +02:00
b6fb7bf029 fix(aidocs_classes): Fix typo in INextCommitObject interface 2024-06-23 19:47:43 +02:00
4c83725120 1.3.0 2024-06-23 18:38:35 +02:00
a060cd1a03 feat(core): Added smarttime dependency and improved changelog generation 2024-06-23 18:38:34 +02:00
e8372effc7 1.2.4 2024-06-23 17:37:20 +02:00
571249705e fix(logging): Refactor logger initialization to use commitinfo data 2024-06-23 17:37:19 +02:00
927cd961fd 1.2.3 2024-06-23 17:36:03 +02:00
63b4fcc232 fix(aidocs): Fix bug in AiDoc class causing undefined token handling 2024-06-23 17:36:02 +02:00
4188ed7f24 1.2.2 2024-06-23 16:46:59 +02:00
1feddc6e85 fix(aidocs): Fix bug in AiDoc class causing undefined token handling 2024-06-23 16:46:58 +02:00
499baebc18 1.2.1 2024-06-23 16:46:11 +02:00
01fc0d0c6e fix(core): Fixed usage of plugins in project context and readme generation 2024-06-23 16:46:10 +02:00
b6c9cea5d1 1.2.0 2024-06-23 16:45:21 +02:00
a949039192 feat(aidocs_classes): Enhance changelog generation by supporting complete generation in the absence of previous changelog files 2024-06-23 16:45:20 +02:00
11bde9d756 1.1.42 2024-06-23 16:43:24 +02:00
eac26521c6 fix(aidoc_classes): Improve commit message generation by handling empty diffs and updating changelog instructions 2024-06-23 16:43:23 +02:00
e1323569f5 1.1.41 2024-06-23 13:49:15 +02:00
41e4bd6689 fix(aidoc_classes): Improve commit message generation by handling empty diffs and updating changelog instructions 2024-06-23 13:49:14 +02:00
164a58ec59 1.1.40 2024-06-23 13:04:48 +02:00
e1c0f82fe8 fix(core): update 2024-06-23 13:04:47 +02:00
8a0046818b 1.1.39 2024-06-23 12:38:58 +02:00
97fa9db32f fix(core): update 2024-06-23 12:38:58 +02:00
d61de9b615 1.1.38 2024-06-23 12:27:27 +02:00
fba54035ea fix(core): update 2024-06-23 12:27:26 +02:00
9a3d8588a8 1.1.37 2024-06-23 12:20:07 +02:00
eb8f8fa70a fix(core): update 2024-06-23 12:20:06 +02:00
afe7b5e99e 1.1.36 2024-06-23 12:11:07 +02:00
e074562362 fix(core): update 2024-06-23 12:11:06 +02:00
240d6bb314 1.1.35 2024-06-23 12:03:26 +02:00
2d0839a1da fix(core): update 2024-06-23 12:03:25 +02:00
9f250ae2b3 1.1.34 2024-06-23 11:59:39 +02:00
1223bb8567 fix(core): update 2024-06-23 11:59:38 +02:00
9395cfc166 1.1.33 2024-06-22 21:21:53 +02:00
3b4c6bd97f fix(core): update 2024-06-22 21:21:52 +02:00
11 changed files with 194 additions and 54 deletions

54
changelog.md Normal file
View File

@ -0,0 +1,54 @@
# Changelog
## 2024-06-23 - 1.3.4 - fix(aidocs_classes)
Fix changelog formatting issue in commit class
- Adjusted formatting in the template for the changelog in `commit.ts`.
- Ensured proper line spacing for readability and consistency.
## 2024-06-23 - 1.3.3 - 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)
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
Fix typo in INextCommitObject interface
- Corrected a minor typo in the INextCommitObject interface for consistency.
## 2023-xx-xx - 1.3.0 - 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
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
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
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
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
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,12 +1,13 @@
{
"name": "@git.zone/tsdoc",
"version": "1.1.32",
"version": "1.3.4",
"private": false,
"description": "An advanced TypeScript documentation tool using AI to generate and enhance documentation for TypeScript projects.",
"main": "dist_ts/index.js",
"typings": "dist_ts/index.d.ts",
"type": "module",
"author": "Lossless GmbH",
"exports": {
".": "./dist_ts/index.js"
},
"author": "Task Venture Capital GmbH",
"license": "MIT",
"bin": {
"tsdoc": "cli.js"
@ -32,13 +33,14 @@
"@push.rocks/smartcli": "^4.0.11",
"@push.rocks/smartdelay": "^3.0.5",
"@push.rocks/smartfile": "^11.0.20",
"@push.rocks/smartgit": "^3.0.4",
"@push.rocks/smartgit": "^3.1.0",
"@push.rocks/smartinteract": "^2.0.15",
"@push.rocks/smartlog": "^3.0.7",
"@push.rocks/smartlog-destination-local": "^9.0.2",
"@push.rocks/smartpath": "^5.0.18",
"@push.rocks/smartshell": "^3.0.5",
"typedoc": "^0.26.0",
"@push.rocks/smarttime": "^4.0.6",
"typedoc": "^0.26.1",
"typescript": "^5.5.2"
},
"files": [

32
pnpm-lock.yaml generated
View File

@ -30,8 +30,8 @@ importers:
specifier: ^11.0.20
version: 11.0.20
'@push.rocks/smartgit':
specifier: ^3.0.4
version: 3.0.4
specifier: ^3.1.0
version: 3.1.0
'@push.rocks/smartinteract':
specifier: ^2.0.15
version: 2.0.15
@ -47,9 +47,12 @@ importers:
'@push.rocks/smartshell':
specifier: ^3.0.5
version: 3.0.5
'@push.rocks/smarttime':
specifier: ^4.0.6
version: 4.0.6
typedoc:
specifier: ^0.26.0
version: 0.26.0(typescript@5.5.2)
specifier: ^0.26.1
version: 0.26.1(typescript@5.5.2)
typescript:
specifier: ^5.5.2
version: 5.5.2
@ -429,8 +432,8 @@ packages:
'@push.rocks/smartfile@11.0.20':
resolution: {integrity: sha512-gJERlNE2fNah9HLq6W3srcl1GZwlz2vFVZRmb50TQLabmWF4qyTlaMYAwY8ffgf8np4TsHAa4s+kL5F0zUfUUg==}
'@push.rocks/smartgit@3.0.4':
resolution: {integrity: sha512-6uYifD4rGjTp6KO8kdaVenXeef0uZOfQSTuLuG3+ubpMXwZNSp0iQWx+XgS5pQipzG0+3p4ddnQ7/R8gm7LWOg==}
'@push.rocks/smartgit@3.1.0':
resolution: {integrity: sha512-a3LbECFQSURkJc9t8CGJrzv7ZzfG1c83x424nb6jfj3jVJXCqjMvs1AkmpkUiro77J7yg4CavTu8vslAfrPIOw==}
'@push.rocks/smarthash@3.0.4':
resolution: {integrity: sha512-HJ/fSx41jm0CvSaqMLa6b2nuNK5rHAqAeAq3dAB7Sq9BCPm2M0J5ZVDTzEAH8pS91XYniUiwuE0jwPERNn9hmw==}
@ -1924,8 +1927,8 @@ packages:
resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==}
engines: {node: '>=16'}
isomorphic-git@1.25.10:
resolution: {integrity: sha512-IxGiaKBwAdcgBXwIcxJU6rHLk+NrzYaaPKXXQffcA0GW3IUrQXdUPDXDo+hkGVcYruuz/7JlGBiuaeTCgIgivQ==}
isomorphic-git@1.26.2:
resolution: {integrity: sha512-swKxfDm/GyaU5ojGwKtfs3EiHwlUf3iP1iIHPduaJHA5y1cIzMDFo3ogwdW6i00UmAjYQNKyF2BZgj/jz58/2A==}
engines: {node: '>=12'}
hasBin: true
@ -3015,8 +3018,8 @@ packages:
resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
engines: {node: '>= 0.6'}
typedoc@0.26.0:
resolution: {integrity: sha512-OcYevjHsMN8DfpaL0dSBGAEBhOxuBB5Au8QVs9oz9iB0kRStPZwXLFWqh9gwbMUxNjW3yQuIM5GrVVauMJ2Akw==}
typedoc@0.26.1:
resolution: {integrity: sha512-APsVXqh93jTlpkLuw6+/IORx7n5LN8hzJV8nvMIrYYaIva0VCq0CoDN7Z3hsRThEYVExI/qoFHnAAxrhG+Wd7Q==}
engines: {node: '>= 18'}
hasBin: true
peerDependencies:
@ -3864,7 +3867,7 @@ snapshots:
glob: 10.4.1
js-yaml: 4.1.0
'@push.rocks/smartgit@3.0.4':
'@push.rocks/smartgit@3.1.0':
dependencies:
'@push.rocks/smartenv': 5.0.12
'@push.rocks/smartfile': 11.0.20
@ -3872,10 +3875,11 @@ snapshots:
'@push.rocks/smartpromise': 4.0.3
'@push.rocks/smartshell': 3.0.5
'@push.rocks/smartstring': 4.0.15
'@push.rocks/smarttime': 4.0.6
'@types/diff': 5.2.1
'@types/minimatch': 5.1.2
diff: 5.2.0
isomorphic-git: 1.25.10
isomorphic-git: 1.26.2
'@push.rocks/smarthash@3.0.4':
dependencies:
@ -5798,7 +5802,7 @@ snapshots:
isexe@3.1.1: {}
isomorphic-git@1.25.10:
isomorphic-git@1.26.2:
dependencies:
async-lock: 1.4.1
clean-git-ref: 2.0.1
@ -7155,7 +7159,7 @@ snapshots:
media-typer: 0.3.0
mime-types: 2.1.35
typedoc@0.26.0(typescript@5.5.2):
typedoc@0.26.1(typescript@5.5.2):
dependencies:
lunr: 2.3.9
markdown-it: 14.1.0

View File

@ -15,12 +15,25 @@ tap.test('should create an AIdocs class', async () => {
tap.test('should start AIdocs', async () => {
await aidocs.start();
});
tap.skip.test('should start AIdocs', async () => {
await aidocs.buildReadme('./');
});
tap.test('should start AIdocs', async () => {
await aidocs.start();
tap.skip.test('should start AIdocs', async () => {
await aidocs.buildDescription('./');
});
tap.test('should build commit object', async () => {
const commitObject = await aidocs.buildNextCommitObject('./');
console.log(commitObject);
expect(commitObject).not.toBeUndefined();
expect(commitObject).toHaveProperty('recommendedNextVersion');
expect(commitObject).toHaveProperty('recommendedNextVersionLevel');
expect(commitObject).toHaveProperty('recommendedNextVersionScope');
expect(commitObject).toHaveProperty('recommendedNextVersionMessage');
})
tap.start();

View File

@ -1,8 +1,8 @@
/**
* autocreated commitinfo by @pushrocks/commitinfo
* autocreated commitinfo by @push.rocks/commitinfo
*/
export const commitinfo = {
name: '@git.zone/tsdoc',
version: '1.1.32',
version: '1.3.4',
description: 'An advanced TypeScript documentation tool using AI to generate and enhance documentation for TypeScript projects.'
}

View File

@ -2,6 +2,15 @@ import * as plugins from '../plugins.js';
import { AiDoc } from '../classes.aidoc.js';
import { ProjectContext } from './projectcontext.js';
export interface INextCommitObject {
recommendedNextVersionLevel: 'fix' | 'feat' | 'BREAKING CHANGE'; // the recommended next version level of the project
recommendedNextVersionScope: string; // the recommended scope name of the next version, like "core" or "cli", or specific class names.
recommendedNextVersionMessage: string; // the commit message. Don't put fix() feat() or BREAKING CHANGE in the message. Please just the message itself.
recommendedNextVersionDetails: string[]; // detailed bullet points for the changelog
recommendedNextVersion: string; // the recommended next version of the project, x.x.x
changelog?: string; // the changelog for the next version
}
export class Commit {
private aiDocsRef: AiDoc;
private projectDir: string;
@ -11,9 +20,23 @@ export class Commit {
this.projectDir = projectDirArg;
}
public async build() {
public async buildNextCommitObject(): Promise<INextCommitObject> {
const smartgitInstance = new plugins.smartgit.Smartgit();
await smartgitInstance.init();
const gitRepo = await plugins.smartgit.GitRepo.fromOpeningRepoDir(
smartgitInstance,
this.projectDir
);
const diffString = await gitRepo.getUncommittedDiff();
const projectContext = new ProjectContext(this.projectDir);
const contextString = await projectContext.update();
let contextString = await projectContext.update();
contextString = `
${contextString}
Below is the diff of the uncommitted changes. If nothing is changed, there are no changes:
${diffString || 'No changes.'}
`;
let result = await this.aiDocsRef.openaiInstance.chat({
systemMessage: `
@ -27,10 +50,13 @@ Important: Answer only in valid JSON.
Your answer should be parseable with JSON.parse() without modifying anything.
Here is the structure of the JSON you should return:
{
recommendedNextVersionLevel: 'patch' | 'minor' | 'major'; // the recommended next version level of the project
recommendedNextVersion: string; // the recommended next version of the project
message: string; // the commit message. use conventional commits format
interface {
recommendedNextVersionLevel: 'fix' | 'feat' | 'BREAKING CHANGE'; // the recommended next version level of the project
recommendedNextVersionScope: string; // the recommended scope name of the next version, like "core" or "cli", or specific class names.
recommendedNextVersionMessage: string; // the commit message. Don't put fix() feat() or BREAKING CHANGE in the message. Please just the message itself.
recommendedNextVersionDetails: string[]; // detailed bullet points for the changelog
recommendedNextVersion: string; // the recommended next version of the project, x.x.x
}
You are being given the files of the project. You should use them to create the commit message.
@ -41,15 +67,59 @@ Also you are given a diff
userMessage: contextString,
});
console.log(result.message);
const resultObject = JSON.parse(result.message.replace('```json', '').replace('```', ''));
// console.log(result.message);
const resultObject: INextCommitObject = JSON.parse(
result.message.replace('```json', '').replace('```', '')
);
const npmextraJson = (await projectContext.gatherFiles()).smartfilesNpmextraJSON;
const npmextraJsonContent = JSON.parse(npmextraJson.contents.toString());
const previousChangelogPath = plugins.path.join(this.projectDir, 'changelog.md');
let previousChangelog: plugins.smartfile.SmartFile;
if (await plugins.smartfile.fs.fileExists(previousChangelogPath)) {
previousChangelog = await plugins.smartfile.SmartFile.fromFilePath(previousChangelogPath);
}
npmextraJsonContent.gitzone.module.commit = resultObject.message;
if (!previousChangelog) {
// lets build the changelog based on that
const commitMessages = await gitRepo.getAllCommitMessages();
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.
npmextraJson.contents = Buffer.from(JSON.stringify(npmextraJsonContent, null, 2));
await npmextraJson.write();
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:
* the commit messages of the project
Only return the changelog file, so it can be written directly to changelog.md`,
userMessage: `
Here are the commit messages:
${JSON.stringify(commitMessages, null, 2)}
`,
});
previousChangelog = await plugins.smartfile.SmartFile.fromString(
previousChangelogPath,
result2.message,
'utf8'
);
}
let oldChangelog = previousChangelog.contents.toString().replace('# Changelog\n\n', '');
let newDateString = new plugins.smarttime.ExtendedDate().exportToHyphedSortableDate();
let newChangelog = `# Changelog\n\n${`## ${newDateString} - {{nextVersion}} - {{nextVersionScope}}
{{nextVersionMessage}}
{{nextVersionDetails}}
`}\n\n${oldChangelog}\n`;
resultObject.changelog = newChangelog;
return resultObject;
}
}

View File

@ -1,3 +1,4 @@
export * from './commit.js';
export * from './description.js';
export * from './projectcontext.js';
export * from './readme.js';

View File

@ -49,7 +49,7 @@ 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}`);
// console.log(` -> ${fileArg.relative}`);
});
return filesArg
.map((smartfile) => {

View File

@ -7,7 +7,7 @@ export class AiDoc {
public npmextraKV: plugins.npmextra.KeyValueStore;
public qenvInstance: plugins.qenv.Qenv;
public smartinteractInstance: plugins.smartinteract.SmartInteract;
public aidocInteract: plugins.smartinteract.SmartInteract;
public openaiInstance: plugins.smartai.OpenAiProvider;
argvArg: any;
@ -33,7 +33,7 @@ export class AiDoc {
public async start() {
// lets care about prerequisites
this.smartinteractInstance = new plugins.smartinteract.SmartInteract();
this.aidocInteract = new plugins.smartinteract.SmartInteract();
this.qenvInstance = new plugins.qenv.Qenv();
if (!(await this.qenvInstance.getEnvVarOnDemand('OPENAI_TOKEN'))) {
this.npmextraKV = new plugins.npmextra.KeyValueStore({
@ -51,9 +51,9 @@ export class AiDoc {
// lets try smartinteract
// wait for a second until OpenAI fixes punycode problem...
await plugins.smartdelay.delayFor(1000);
const answerObject = await this.smartinteractInstance.askQuestion({
const answerObject = await this.aidocInteract.askQuestion({
type: 'input',
message: `Please provide your OpenAI token`,
message: `Please provide your OpenAI token. This will be persisted in your home directory.`,
name: 'OPENAI_TOKEN',
default: '',
});
@ -85,7 +85,10 @@ export class AiDoc {
return await descriptionInstance.build();
}
public async buildNextCommit(projectDirArg: string) {}
public async buildNextCommitObject(projectDirArg: string) {
const commitInstance = new aiDocsClasses.Commit(this, projectDirArg);
return await commitInstance.buildNextCommitObject();
}
public async getProjectContext(projectDirArg: string) {
const projectContextInstance = new aiDocsClasses.ProjectContext(projectDirArg);

View File

@ -1,15 +1,6 @@
import { commitinfo } from './00_commitinfo_data.js';
import * as plugins from './plugins.js';
export const logger = new plugins.smartlog.Smartlog({
logContext: {
company: 'Some Company',
companyunit: 'Some CompanyUnit',
containerName: 'Some Containername',
environment: 'local',
runtime: 'node',
zone: 'gitzone',
},
minimumLogLevel: 'silly',
});
export const logger = plugins.smartlog.Smartlog.createForCommitinfo(commitinfo);
logger.addLogDestination(new plugins.smartlogDestinationLocal.DestinationLocal());

View File

@ -16,6 +16,7 @@ import * as smartlog from '@push.rocks/smartlog';
import * as smartlogDestinationLocal from '@push.rocks/smartlog-destination-local';
import * as smartpath from '@push.rocks/smartpath';
import * as smartshell from '@push.rocks/smartshell';
import * as smarttime from '@push.rocks/smarttime';
export {
npmextra,
@ -30,6 +31,7 @@ export {
smartlogDestinationLocal,
smartpath,
smartshell,
smarttime,
};
// third party scope