@git.zone/tsdoc 1.11.3 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/aidocs_classes/commit.js +31 -3
- package/dist_ts/cli.js +0 -0
- package/package.json +13 -12
- package/readme.hints.md +10 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/aidocs_classes/commit.ts +35 -2
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@git.zone/tsdoc',
|
|
6
|
-
version: '1.
|
|
6
|
+
version: '1.12.0',
|
|
7
7
|
description: 'A comprehensive TypeScript documentation tool that leverages AI to generate and enhance project documentation, including dynamic README creation, API docs via TypeDoc, and smart commit message generation.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxpQkFBaUI7SUFDdkIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLDhNQUE4TTtDQUM1TixDQUFBIn0=
|
|
@@ -3,6 +3,23 @@ import { AiDoc } from '../classes.aidoc.js';
|
|
|
3
3
|
import { ProjectContext } from './projectcontext.js';
|
|
4
4
|
import { DiffProcessor } from '../classes.diffprocessor.js';
|
|
5
5
|
import { logger } from '../logging.js';
|
|
6
|
+
// Token budget configuration for OpenAI API limits
|
|
7
|
+
const TOKEN_BUDGET = {
|
|
8
|
+
OPENAI_CONTEXT_LIMIT: 272000, // OpenAI's configured limit
|
|
9
|
+
SAFETY_MARGIN: 10000, // Buffer to avoid hitting exact limit
|
|
10
|
+
SMARTAGENT_OVERHEAD: 180000, // System msgs, tools, history, formatting
|
|
11
|
+
TASK_PROMPT_OVERHEAD: 2000, // Task prompt template size
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Calculate max tokens available for diff content based on total budget
|
|
15
|
+
*/
|
|
16
|
+
function calculateMaxDiffTokens() {
|
|
17
|
+
const available = TOKEN_BUDGET.OPENAI_CONTEXT_LIMIT
|
|
18
|
+
- TOKEN_BUDGET.SAFETY_MARGIN
|
|
19
|
+
- TOKEN_BUDGET.SMARTAGENT_OVERHEAD
|
|
20
|
+
- TOKEN_BUDGET.TASK_PROMPT_OVERHEAD;
|
|
21
|
+
return Math.max(available, 30000);
|
|
22
|
+
}
|
|
6
23
|
export class Commit {
|
|
7
24
|
constructor(aiDocsRef, projectDirArg) {
|
|
8
25
|
this.aiDocsRef = aiDocsRef;
|
|
@@ -63,9 +80,12 @@ export class Commit {
|
|
|
63
80
|
console.log(` Total characters: ${totalChars.toLocaleString()}`);
|
|
64
81
|
console.log(` Estimated tokens: ${estimatedTokens.toLocaleString()}`);
|
|
65
82
|
console.log(` Exclusion patterns: ${excludePatterns.length}`);
|
|
83
|
+
// Calculate available tokens for diff based on total budget
|
|
84
|
+
const maxDiffTokens = calculateMaxDiffTokens();
|
|
85
|
+
console.log(`📊 Token budget: ${maxDiffTokens.toLocaleString()} tokens for diff (limit: ${TOKEN_BUDGET.OPENAI_CONTEXT_LIMIT.toLocaleString()}, overhead: ${(TOKEN_BUDGET.SMARTAGENT_OVERHEAD + TOKEN_BUDGET.TASK_PROMPT_OVERHEAD).toLocaleString()})`);
|
|
66
86
|
// Use DiffProcessor to intelligently handle large diffs
|
|
67
87
|
const diffProcessor = new DiffProcessor({
|
|
68
|
-
maxDiffTokens
|
|
88
|
+
maxDiffTokens, // Dynamic based on total budget
|
|
69
89
|
smallFileLines: 300, // Most source files are under 300 lines
|
|
70
90
|
mediumFileLines: 800, // Only very large files get head/tail treatment
|
|
71
91
|
sampleHeadLines: 75, // When sampling, show more context
|
|
@@ -81,6 +101,14 @@ export class Commit {
|
|
|
81
101
|
if (estimatedTokens > 50000) {
|
|
82
102
|
console.log(`✅ DiffProcessor reduced token usage: ${estimatedTokens.toLocaleString()} → ${processedDiff.totalTokens.toLocaleString()}`);
|
|
83
103
|
}
|
|
104
|
+
// Validate total tokens won't exceed limit
|
|
105
|
+
const totalEstimatedTokens = processedDiff.totalTokens
|
|
106
|
+
+ TOKEN_BUDGET.SMARTAGENT_OVERHEAD
|
|
107
|
+
+ TOKEN_BUDGET.TASK_PROMPT_OVERHEAD;
|
|
108
|
+
if (totalEstimatedTokens > TOKEN_BUDGET.OPENAI_CONTEXT_LIMIT - TOKEN_BUDGET.SAFETY_MARGIN) {
|
|
109
|
+
console.log(`⚠️ Warning: Estimated tokens (${totalEstimatedTokens.toLocaleString()}) approaching limit`);
|
|
110
|
+
console.log(` Consider splitting into smaller commits`);
|
|
111
|
+
}
|
|
84
112
|
}
|
|
85
113
|
else {
|
|
86
114
|
processedDiffString = 'No changes.';
|
|
@@ -147,7 +175,7 @@ Here is the structure of the JSON you must return:
|
|
|
147
175
|
{
|
|
148
176
|
"recommendedNextVersionLevel": "fix" | "feat" | "BREAKING CHANGE",
|
|
149
177
|
"recommendedNextVersionScope": "string",
|
|
150
|
-
"recommendedNextVersionMessage": "string",
|
|
178
|
+
"recommendedNextVersionMessage": "string (ONLY the description body WITHOUT the type(scope): prefix - e.g. 'bump dependency to ^1.2.6' NOT 'fix(deps): bump dependency to ^1.2.6')",
|
|
151
179
|
"recommendedNextVersionDetails": ["string"],
|
|
152
180
|
"recommendedNextVersion": "x.x.x"
|
|
153
181
|
}
|
|
@@ -248,4 +276,4 @@ ${JSON.stringify(commitMessages, null, 2)}
|
|
|
248
276
|
return resultObject;
|
|
249
277
|
}
|
|
250
278
|
}
|
|
251
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
279
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvYWlkb2NzX2NsYXNzZXMvY29tbWl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkMsbURBQW1EO0FBQ25ELE1BQU0sWUFBWSxHQUFHO0lBQ25CLG9CQUFvQixFQUFFLE1BQU0sRUFBSSw0QkFBNEI7SUFDNUQsYUFBYSxFQUFFLEtBQUssRUFBYSxzQ0FBc0M7SUFDdkUsbUJBQW1CLEVBQUUsTUFBTSxFQUFNLDBDQUEwQztJQUMzRSxvQkFBb0IsRUFBRSxJQUFJLEVBQU8sNEJBQTRCO0NBQ3JELENBQUM7QUFFWDs7R0FFRztBQUNILFNBQVMsc0JBQXNCO0lBQzdCLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxvQkFBb0I7VUFDL0MsWUFBWSxDQUFDLGFBQWE7VUFDMUIsWUFBWSxDQUFDLG1CQUFtQjtVQUNoQyxZQUFZLENBQUMsb0JBQW9CLENBQUM7SUFDdEMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBV0QsTUFBTSxPQUFPLE1BQU07SUFJakIsWUFBWSxTQUFnQixFQUFFLGFBQXFCO1FBQ2pELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDO0lBQ2xDLENBQUM7SUFFTSxLQUFLLENBQUMscUJBQXFCO1FBQ2hDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxPQUFPLENB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
|
package/dist_ts/cli.js
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@git.zone/tsdoc",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.12.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "A comprehensive TypeScript documentation tool that leverages AI to generate and enhance project documentation, including dynamic README creation, API docs via TypeDoc, and smart commit message generation.",
|
|
6
6
|
"type": "module",
|
|
@@ -12,14 +12,20 @@
|
|
|
12
12
|
"bin": {
|
|
13
13
|
"tsdoc": "cli.js"
|
|
14
14
|
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"test": "(tstest test/ --verbose --logfile --timeout 600) && npm run testCli",
|
|
17
|
+
"testCli": "(node ./cli.ts.js) && (node ./cli.ts.js aidocs)",
|
|
18
|
+
"build": "(tsbuild --web --allowimplicitany)",
|
|
19
|
+
"buildDocs": "tsdoc"
|
|
20
|
+
},
|
|
15
21
|
"devDependencies": {
|
|
16
22
|
"@git.zone/tsbuild": "^4.0.2",
|
|
17
23
|
"@git.zone/tsrun": "^2.0.1",
|
|
18
|
-
"@git.zone/tstest": "^3.1.
|
|
19
|
-
"@types/node": "^25.0.
|
|
24
|
+
"@git.zone/tstest": "^3.1.4",
|
|
25
|
+
"@types/node": "^25.0.3"
|
|
20
26
|
},
|
|
21
27
|
"dependencies": {
|
|
22
|
-
"@git.zone/tspublish": "^1.
|
|
28
|
+
"@git.zone/tspublish": "^1.11.0",
|
|
23
29
|
"@push.rocks/early": "^4.0.4",
|
|
24
30
|
"@push.rocks/npmextra": "^5.3.3",
|
|
25
31
|
"@push.rocks/qenv": "^6.1.3",
|
|
@@ -28,7 +34,7 @@
|
|
|
28
34
|
"@push.rocks/smartcli": "^4.0.19",
|
|
29
35
|
"@push.rocks/smartdelay": "^3.0.5",
|
|
30
36
|
"@push.rocks/smartfile": "^13.1.2",
|
|
31
|
-
"@push.rocks/smartfs": "^1.
|
|
37
|
+
"@push.rocks/smartfs": "^1.3.1",
|
|
32
38
|
"@push.rocks/smartgit": "^3.3.1",
|
|
33
39
|
"@push.rocks/smartinteract": "^2.0.16",
|
|
34
40
|
"@push.rocks/smartlog": "^3.1.10",
|
|
@@ -75,10 +81,5 @@
|
|
|
75
81
|
"url": "https://gitlab.com/gitzone/tsdoc/issues"
|
|
76
82
|
},
|
|
77
83
|
"homepage": "https://gitlab.com/gitzone/tsdoc#readme",
|
|
78
|
-
"
|
|
79
|
-
|
|
80
|
-
"testCli": "(node ./cli.ts.js) && (node ./cli.ts.js aidocs)",
|
|
81
|
-
"build": "(tsbuild --web --allowimplicitany)",
|
|
82
|
-
"buildDocs": "tsdoc"
|
|
83
|
-
}
|
|
84
|
-
}
|
|
84
|
+
"packageManager": "pnpm@10.14.0+sha512.ad27a79641b49c3e481a16a805baa71817a04bbe06a38d17e60e2eaee83f6a146c6a688125f5792e48dd5ba30e7da52a5cda4c3992b9ccf333f9ce223af84748"
|
|
85
|
+
}
|
package/readme.hints.md
CHANGED
|
@@ -2,4 +2,13 @@
|
|
|
2
2
|
* alternatively can be used through npx, if installed locally
|
|
3
3
|
* cli parameters are concluded from ./ts/cli.ts
|
|
4
4
|
* this module is not intended for API use.
|
|
5
|
-
* Read carefully through the TypeScript files. Don't make stuff up.
|
|
5
|
+
* Read carefully through the TypeScript files. Don't make stuff up.
|
|
6
|
+
|
|
7
|
+
## Token Budgeting (commit.ts)
|
|
8
|
+
* OpenAI has a 272,000 token context limit
|
|
9
|
+
* The smartagent infrastructure adds ~180,000 tokens of overhead (system messages, tool descriptions, conversation history)
|
|
10
|
+
* TOKEN_BUDGET constants in commit.ts control the available tokens for diff content
|
|
11
|
+
* Dynamic calculation: 272K - 10K (safety) - 180K (overhead) - 2K (prompt) = 80K tokens for diff
|
|
12
|
+
* If token limit errors occur, consider:
|
|
13
|
+
- Splitting large commits into smaller ones
|
|
14
|
+
- Adjusting SMARTAGENT_OVERHEAD if actual overhead is different
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@git.zone/tsdoc',
|
|
6
|
-
version: '1.
|
|
6
|
+
version: '1.12.0',
|
|
7
7
|
description: 'A comprehensive TypeScript documentation tool that leverages AI to generate and enhance project documentation, including dynamic README creation, API docs via TypeDoc, and smart commit message generation.'
|
|
8
8
|
}
|
|
@@ -4,6 +4,25 @@ import { ProjectContext } from './projectcontext.js';
|
|
|
4
4
|
import { DiffProcessor } from '../classes.diffprocessor.js';
|
|
5
5
|
import { logger } from '../logging.js';
|
|
6
6
|
|
|
7
|
+
// Token budget configuration for OpenAI API limits
|
|
8
|
+
const TOKEN_BUDGET = {
|
|
9
|
+
OPENAI_CONTEXT_LIMIT: 272000, // OpenAI's configured limit
|
|
10
|
+
SAFETY_MARGIN: 10000, // Buffer to avoid hitting exact limit
|
|
11
|
+
SMARTAGENT_OVERHEAD: 180000, // System msgs, tools, history, formatting
|
|
12
|
+
TASK_PROMPT_OVERHEAD: 2000, // Task prompt template size
|
|
13
|
+
} as const;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Calculate max tokens available for diff content based on total budget
|
|
17
|
+
*/
|
|
18
|
+
function calculateMaxDiffTokens(): number {
|
|
19
|
+
const available = TOKEN_BUDGET.OPENAI_CONTEXT_LIMIT
|
|
20
|
+
- TOKEN_BUDGET.SAFETY_MARGIN
|
|
21
|
+
- TOKEN_BUDGET.SMARTAGENT_OVERHEAD
|
|
22
|
+
- TOKEN_BUDGET.TASK_PROMPT_OVERHEAD;
|
|
23
|
+
return Math.max(available, 30000);
|
|
24
|
+
}
|
|
25
|
+
|
|
7
26
|
export interface INextCommitObject {
|
|
8
27
|
recommendedNextVersionLevel: 'fix' | 'feat' | 'BREAKING CHANGE'; // the recommended next version level of the project
|
|
9
28
|
recommendedNextVersionScope: string; // the recommended scope name of the next version, like "core" or "cli", or specific class names.
|
|
@@ -90,9 +109,13 @@ export class Commit {
|
|
|
90
109
|
console.log(` Estimated tokens: ${estimatedTokens.toLocaleString()}`);
|
|
91
110
|
console.log(` Exclusion patterns: ${excludePatterns.length}`);
|
|
92
111
|
|
|
112
|
+
// Calculate available tokens for diff based on total budget
|
|
113
|
+
const maxDiffTokens = calculateMaxDiffTokens();
|
|
114
|
+
console.log(`📊 Token budget: ${maxDiffTokens.toLocaleString()} tokens for diff (limit: ${TOKEN_BUDGET.OPENAI_CONTEXT_LIMIT.toLocaleString()}, overhead: ${(TOKEN_BUDGET.SMARTAGENT_OVERHEAD + TOKEN_BUDGET.TASK_PROMPT_OVERHEAD).toLocaleString()})`);
|
|
115
|
+
|
|
93
116
|
// Use DiffProcessor to intelligently handle large diffs
|
|
94
117
|
const diffProcessor = new DiffProcessor({
|
|
95
|
-
maxDiffTokens
|
|
118
|
+
maxDiffTokens, // Dynamic based on total budget
|
|
96
119
|
smallFileLines: 300, // Most source files are under 300 lines
|
|
97
120
|
mediumFileLines: 800, // Only very large files get head/tail treatment
|
|
98
121
|
sampleHeadLines: 75, // When sampling, show more context
|
|
@@ -111,6 +134,16 @@ export class Commit {
|
|
|
111
134
|
if (estimatedTokens > 50000) {
|
|
112
135
|
console.log(`✅ DiffProcessor reduced token usage: ${estimatedTokens.toLocaleString()} → ${processedDiff.totalTokens.toLocaleString()}`);
|
|
113
136
|
}
|
|
137
|
+
|
|
138
|
+
// Validate total tokens won't exceed limit
|
|
139
|
+
const totalEstimatedTokens = processedDiff.totalTokens
|
|
140
|
+
+ TOKEN_BUDGET.SMARTAGENT_OVERHEAD
|
|
141
|
+
+ TOKEN_BUDGET.TASK_PROMPT_OVERHEAD;
|
|
142
|
+
|
|
143
|
+
if (totalEstimatedTokens > TOKEN_BUDGET.OPENAI_CONTEXT_LIMIT - TOKEN_BUDGET.SAFETY_MARGIN) {
|
|
144
|
+
console.log(`⚠️ Warning: Estimated tokens (${totalEstimatedTokens.toLocaleString()}) approaching limit`);
|
|
145
|
+
console.log(` Consider splitting into smaller commits`);
|
|
146
|
+
}
|
|
114
147
|
} else {
|
|
115
148
|
processedDiffString = 'No changes.';
|
|
116
149
|
}
|
|
@@ -180,7 +213,7 @@ Here is the structure of the JSON you must return:
|
|
|
180
213
|
{
|
|
181
214
|
"recommendedNextVersionLevel": "fix" | "feat" | "BREAKING CHANGE",
|
|
182
215
|
"recommendedNextVersionScope": "string",
|
|
183
|
-
"recommendedNextVersionMessage": "string",
|
|
216
|
+
"recommendedNextVersionMessage": "string (ONLY the description body WITHOUT the type(scope): prefix - e.g. 'bump dependency to ^1.2.6' NOT 'fix(deps): bump dependency to ^1.2.6')",
|
|
184
217
|
"recommendedNextVersionDetails": ["string"],
|
|
185
218
|
"recommendedNextVersion": "x.x.x"
|
|
186
219
|
}
|