@git.zone/tsdoc 1.11.2 → 1.11.4
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.
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@git.zone/tsdoc',
|
|
6
|
-
version: '1.11.
|
|
6
|
+
version: '1.11.4',
|
|
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=
|
|
@@ -86,7 +86,6 @@ export class Commit {
|
|
|
86
86
|
processedDiffString = 'No changes.';
|
|
87
87
|
}
|
|
88
88
|
// Use DualAgentOrchestrator for commit message generation
|
|
89
|
-
// Note: No filesystem tool needed - the diff already contains all change information
|
|
90
89
|
const commitOrchestrator = new plugins.smartagent.DualAgentOrchestrator({
|
|
91
90
|
smartAiInstance: this.aiDocsRef.smartAiInstance,
|
|
92
91
|
defaultProvider: 'openai',
|
|
@@ -95,41 +94,62 @@ export class Commit {
|
|
|
95
94
|
guardianPolicyPrompt: `
|
|
96
95
|
You validate commit messages for semantic versioning compliance.
|
|
97
96
|
|
|
98
|
-
APPROVE
|
|
97
|
+
APPROVE tool calls for:
|
|
98
|
+
- Reading package.json or source files to understand project context
|
|
99
|
+
- Using tree to see project structure
|
|
100
|
+
- Listing directory contents
|
|
101
|
+
|
|
102
|
+
REJECT tool calls for:
|
|
103
|
+
- Reading files outside the project directory
|
|
104
|
+
- Writing, deleting, or modifying any files
|
|
105
|
+
- Any destructive operations
|
|
106
|
+
|
|
107
|
+
APPROVE final output if:
|
|
99
108
|
- Version level (fix/feat/BREAKING CHANGE) matches the scope of changes in the diff
|
|
100
109
|
- Commit message is clear, professional, and follows conventional commit conventions
|
|
101
110
|
- No personal information, licensing details, or AI mentions (Claude/Codex) included
|
|
102
111
|
- JSON structure is valid with all required fields
|
|
103
112
|
- Scope accurately reflects the changed modules/files
|
|
104
113
|
|
|
105
|
-
REJECT
|
|
114
|
+
REJECT final output if:
|
|
106
115
|
- Version level doesn't match the scope of changes (e.g., "feat" for a typo fix should be "fix")
|
|
107
116
|
- Message is vague, unprofessional, or contains sensitive information
|
|
108
117
|
- JSON is malformed or missing required fields
|
|
109
118
|
`,
|
|
110
119
|
});
|
|
120
|
+
// Register scoped filesystem tool for agent exploration
|
|
121
|
+
commitOrchestrator.registerScopedFilesystemTool(this.projectDir, [
|
|
122
|
+
'.nogit/**',
|
|
123
|
+
'node_modules/**',
|
|
124
|
+
'.git/**',
|
|
125
|
+
'dist/**',
|
|
126
|
+
'dist_*/**',
|
|
127
|
+
]);
|
|
111
128
|
await commitOrchestrator.start();
|
|
112
129
|
const commitTaskPrompt = `
|
|
113
130
|
You create a commit message for a git commit.
|
|
114
131
|
Project directory: ${this.projectDir}
|
|
115
132
|
|
|
133
|
+
You have access to a filesystem tool to explore the project if needed:
|
|
134
|
+
- Use tree to see project structure
|
|
135
|
+
- Use read to read package.json or source files for context
|
|
136
|
+
|
|
116
137
|
Analyze the git diff below to understand what changed and generate a commit message.
|
|
117
138
|
|
|
118
139
|
You should not include any licensing information or personal information.
|
|
119
140
|
Never mention CLAUDE code, or codex.
|
|
120
141
|
|
|
121
|
-
|
|
142
|
+
Your final output (inside the task_complete tags) must be ONLY valid JSON - the raw JSON object, nothing else.
|
|
143
|
+
No explanations, no summaries, no markdown - just the JSON object that can be parsed with JSON.parse().
|
|
122
144
|
|
|
123
|
-
|
|
145
|
+
Here is the structure of the JSON you must return:
|
|
124
146
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
recommendedNextVersionDetails: string[]; // detailed bullet points for the changelog
|
|
132
|
-
recommendedNextVersion: string; // the recommended next version x.x.x
|
|
147
|
+
{
|
|
148
|
+
"recommendedNextVersionLevel": "fix" | "feat" | "BREAKING CHANGE",
|
|
149
|
+
"recommendedNextVersionScope": "string",
|
|
150
|
+
"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
|
+
"recommendedNextVersionDetails": ["string"],
|
|
152
|
+
"recommendedNextVersion": "x.x.x"
|
|
133
153
|
}
|
|
134
154
|
|
|
135
155
|
For recommendedNextVersionDetails, only add entries that have obvious value to the reader.
|
|
@@ -138,14 +158,24 @@ Here is the git diff showing what changed:
|
|
|
138
158
|
|
|
139
159
|
${processedDiffString}
|
|
140
160
|
|
|
141
|
-
|
|
161
|
+
Analyze these changes and output the JSON commit message object.
|
|
142
162
|
`;
|
|
143
163
|
const commitResult = await commitOrchestrator.run(commitTaskPrompt);
|
|
144
164
|
await commitOrchestrator.stop();
|
|
145
165
|
if (!commitResult.success) {
|
|
146
166
|
throw new Error(`Commit message generation failed: ${commitResult.status}`);
|
|
147
167
|
}
|
|
148
|
-
|
|
168
|
+
// Extract JSON from result - handle cases where AI adds text around it
|
|
169
|
+
let jsonString = commitResult.result
|
|
170
|
+
.replace(/```json\n?/gi, '')
|
|
171
|
+
.replace(/```\n?/gi, '');
|
|
172
|
+
// Try to find JSON object in the result
|
|
173
|
+
const jsonMatch = jsonString.match(/\{[\s\S]*\}/);
|
|
174
|
+
if (!jsonMatch) {
|
|
175
|
+
throw new Error(`Could not find JSON object in result: ${jsonString.substring(0, 100)}...`);
|
|
176
|
+
}
|
|
177
|
+
jsonString = jsonMatch[0];
|
|
178
|
+
const resultObject = JSON.parse(jsonString);
|
|
149
179
|
const previousChangelogPath = plugins.path.join(this.projectDir, 'changelog.md');
|
|
150
180
|
let previousChangelog;
|
|
151
181
|
if (await plugins.fsInstance.file(previousChangelogPath).exists()) {
|
|
@@ -218,4 +248,4 @@ ${JSON.stringify(commitMessages, null, 2)}
|
|
|
218
248
|
return resultObject;
|
|
219
249
|
}
|
|
220
250
|
}
|
|
221
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
251
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvYWlkb2NzX2NsYXNzZXMvY29tbWl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFXdkMsTUFBTSxPQUFPLE1BQU07SUFJakIsWUFBWSxTQUFnQixFQUFFLGFBQXFCO1FBQ2pELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDO0lBQ2xDLENBQUM7SUFFTSxLQUFLLENBQUMscUJBQXFCO1FBQ2hDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pELE1BQU0sZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUIsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FDL0QsZ0JBQWdCLEVBQ2hCLElBQUksQ0FBQyxVQUFVLENBQ2hCLENBQUM7UUFFRiwwQ0FBMEM7UUFDMUMsa0RBQWtEO1FBQ2xELE1BQU0sZUFBZSxHQUFHO1lBQ3RCLGFBQWE7WUFDYixnQkFBZ0I7WUFDaEIsbUJBQW1CO1lBQ25CLHFCQUFxQjtZQUNyQixXQUFXO1lBQ1gsV0FBVztZQUNYLFdBQVc7WUFFWCxrREFBa0Q7WUFDbEQsU0FBUztZQUNULFdBQVcsRUFBWSwwQkFBMEI7WUFDakQsVUFBVTtZQUNWLFVBQVU7WUFDVixRQUFRO1lBQ1IsZ0JBQWdCO1lBRWhCLHlCQUF5QjtZQUN6QixhQUFhO1lBQ2IsZUFBZTtZQUNmLGFBQWE7WUFDYixnQkFBZ0I7WUFDaEIsZUFBZTtZQUVmLHlCQUF5QjtZQUN6QixZQUFZO1lBQ1osWUFBWTtZQUNaLFlBQVk7WUFDWixVQUFVO1lBQ1YsVUFBVTtZQUNWLFVBQVU7WUFFVixrQkFBa0I7WUFDbEIsV0FBVztZQUNYLFVBQVU7WUFDVixXQUFXO1lBQ1gsZ0JBQWdCO1lBQ2hCLGFBQWE7WUFDYixnQkFBZ0I7U0FDakIsQ0FBQztRQUVGLDJFQUEyRTtRQUMzRSxNQUFNLGVBQWUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUUxRSxrREFBa0Q7UUFDbEQsSUFBSSxtQkFBMkIsQ0FBQztRQUVoQyxJQUFJLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDL0IsNkNBQTZDO1lBQzdDLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3ZELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRWxELE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUMzQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUMzRCxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixVQUFVLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDeEUsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFFaEUsd0RBQXdEO1lBQ3hELE1BQU0sYUFBYSxHQUFHLElBQUksYUFBYSxDQUFDO2dCQUN0QyxhQUFhLEVBQUUsTUFBTSxFQUFPLGdDQUFnQztnQkFDNUQsY0FBYyxFQUFFLEdBQUcsRUFBVSx3Q0FBd0M7Z0JBQ3JFLGVBQWUsRUFBRSxHQUFHLEVBQVMsZ0RBQWdEO2dCQUM3RSxlQUFlLEVBQUUsRUFBRSxFQUFVLG1DQUFtQztnQkFDaEUsZUFBZSxFQUFFLEVBQUUsRUFBVSxtQ0FBbUM7YUFDakUsQ0FBQyxDQUFDO1lBRUgsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNsRSxtQkFBbUIsR0FBRyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFcEUsT0FBTyxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1lBQzdDLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxRQUFRLENBQUMsQ0FBQztZQUN0RSxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixhQUFhLENBQUMsZUFBZSxDQUFDLE1BQU0sUUFBUSxDQUFDLENBQUM7WUFDNUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsYUFBYSxDQUFDLFlBQVksQ0FBQyxNQUFNLFFBQVEsQ0FBQyxDQUFDO1lBQzVFLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLGFBQWEsQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRTlFLElBQUksZUFBZSxHQUFHLEtBQUssRUFBRSxDQUFDO2dCQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLHdDQUF3QyxlQUFlLENBQUMsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDMUksQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sbUJBQW1CLEdBQUcsYUFBYSxDQUFDO1FBQ3RDLENBQUM7UUFFRCwwREFBMEQ7UUFDMUQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUM7WUFDdEUsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZTtZQUMvQyxlQUFlLEVBQUUsUUFBUTtZQUN6QixTQUFTLEVBQUUsVUFBVTtZQUNyQixVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQ25FLG9CQUFvQixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F3QjNCO1NBQ0ksQ0FBQyxDQUFDO1FBRUgsd0RBQXdEO1FBQ3hELGtCQUFrQixDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDL0QsV0FBVztZQUNYLGlCQUFpQjtZQUNqQixTQUFTO1lBQ1QsU0FBUztZQUNULFdBQVc7U0FDWixDQUFDLENBQUM7UUFFSCxNQUFNLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBRWpDLE1BQU0sZ0JBQWdCLEdBQUc7O3FCQUVSLElBQUksQ0FBQyxVQUFVOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBNEJsQyxtQkFBbUI7OztDQUdwQixDQUFDO1FBRUUsTUFBTSxZQUFZLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNwRSxNQUFNLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDO1FBRWhDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDOUUsQ0FBQztRQUVELHVFQUF1RTtRQUN2RSxJQUFJLFVBQVUsR0FBRyxZQUFZLENBQUMsTUFBTTthQUNqQyxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQzthQUMzQixPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTNCLHdDQUF3QztRQUN4QyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5RixDQUFDO1FBQ0QsVUFBVSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUxQixNQUFNLFlBQVksR0FBc0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUUvRCxNQUFNLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDakYsSUFBSSxpQkFBOEMsQ0FBQztRQUNuRCxJQUFJLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQ2xFLGlCQUFpQixHQUFHLE1BQU0sT0FBTyxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3pGLENBQUM7UUFFRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN2Qix5Q0FBeUM7WUFDekMsTUFBTSxjQUFjLEdBQUcsTUFBTSxPQUFPLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM1RCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXJELDhFQUE4RTtZQUM5RSxNQUFNLHFCQUFxQixHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQztnQkFDekUsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZTtnQkFDL0MsZUFBZSxFQUFFLFFBQVE7Z0JBQ3pCLFNBQVMsRUFBRSxhQUFhO2dCQUN4QixVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDO2dCQUNuRSxvQkFBb0IsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Q0FjN0I7YUFDTSxDQUFDLENBQUM7WUFFSCxNQUFNLHFCQUFxQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBRXBDLE1BQU0sbUJBQW1CLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWtCaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztDQUN4QyxDQUFDO1lBRUksTUFBTSxlQUFlLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUM3RSxNQUFNLHFCQUFxQixDQUFDLElBQUksRUFBRSxDQUFDO1lBRW5DLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzVFLENBQUM7WUFFRCxpQkFBaUIsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUNyRCxxQkFBcUIsRUFDckIsZUFBZSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQzFFLE1BQU0sQ0FDUCxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksWUFBWSxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEYsSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbEMsWUFBWSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxJQUFJLGFBQWEsR0FBRyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUN0RixJQUFJLFlBQVksR0FBRyxrQkFBa0IsTUFBTSxhQUFhOzs7dUJBR3JDLE9BQU8sWUFBWSxFQUFFLENBQUM7UUFDekMsWUFBWSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUM7UUFFdEMsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztDQUNGIn0=
|
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.11.
|
|
3
|
+
"version": "1.11.4",
|
|
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,6 +12,12 @@
|
|
|
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",
|
|
@@ -23,7 +29,7 @@
|
|
|
23
29
|
"@push.rocks/early": "^4.0.4",
|
|
24
30
|
"@push.rocks/npmextra": "^5.3.3",
|
|
25
31
|
"@push.rocks/qenv": "^6.1.3",
|
|
26
|
-
"@push.rocks/smartagent": "
|
|
32
|
+
"@push.rocks/smartagent": "1.2.5",
|
|
27
33
|
"@push.rocks/smartai": "^0.8.0",
|
|
28
34
|
"@push.rocks/smartcli": "^4.0.19",
|
|
29
35
|
"@push.rocks/smartdelay": "^3.0.5",
|
|
@@ -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/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.11.
|
|
6
|
+
version: '1.11.4',
|
|
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
|
}
|
|
@@ -116,7 +116,6 @@ export class Commit {
|
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
// Use DualAgentOrchestrator for commit message generation
|
|
119
|
-
// Note: No filesystem tool needed - the diff already contains all change information
|
|
120
119
|
const commitOrchestrator = new plugins.smartagent.DualAgentOrchestrator({
|
|
121
120
|
smartAiInstance: this.aiDocsRef.smartAiInstance,
|
|
122
121
|
defaultProvider: 'openai',
|
|
@@ -125,43 +124,65 @@ export class Commit {
|
|
|
125
124
|
guardianPolicyPrompt: `
|
|
126
125
|
You validate commit messages for semantic versioning compliance.
|
|
127
126
|
|
|
128
|
-
APPROVE
|
|
127
|
+
APPROVE tool calls for:
|
|
128
|
+
- Reading package.json or source files to understand project context
|
|
129
|
+
- Using tree to see project structure
|
|
130
|
+
- Listing directory contents
|
|
131
|
+
|
|
132
|
+
REJECT tool calls for:
|
|
133
|
+
- Reading files outside the project directory
|
|
134
|
+
- Writing, deleting, or modifying any files
|
|
135
|
+
- Any destructive operations
|
|
136
|
+
|
|
137
|
+
APPROVE final output if:
|
|
129
138
|
- Version level (fix/feat/BREAKING CHANGE) matches the scope of changes in the diff
|
|
130
139
|
- Commit message is clear, professional, and follows conventional commit conventions
|
|
131
140
|
- No personal information, licensing details, or AI mentions (Claude/Codex) included
|
|
132
141
|
- JSON structure is valid with all required fields
|
|
133
142
|
- Scope accurately reflects the changed modules/files
|
|
134
143
|
|
|
135
|
-
REJECT
|
|
144
|
+
REJECT final output if:
|
|
136
145
|
- Version level doesn't match the scope of changes (e.g., "feat" for a typo fix should be "fix")
|
|
137
146
|
- Message is vague, unprofessional, or contains sensitive information
|
|
138
147
|
- JSON is malformed or missing required fields
|
|
139
148
|
`,
|
|
140
149
|
});
|
|
141
150
|
|
|
151
|
+
// Register scoped filesystem tool for agent exploration
|
|
152
|
+
commitOrchestrator.registerScopedFilesystemTool(this.projectDir, [
|
|
153
|
+
'.nogit/**',
|
|
154
|
+
'node_modules/**',
|
|
155
|
+
'.git/**',
|
|
156
|
+
'dist/**',
|
|
157
|
+
'dist_*/**',
|
|
158
|
+
]);
|
|
159
|
+
|
|
142
160
|
await commitOrchestrator.start();
|
|
143
161
|
|
|
144
162
|
const commitTaskPrompt = `
|
|
145
163
|
You create a commit message for a git commit.
|
|
146
164
|
Project directory: ${this.projectDir}
|
|
147
165
|
|
|
166
|
+
You have access to a filesystem tool to explore the project if needed:
|
|
167
|
+
- Use tree to see project structure
|
|
168
|
+
- Use read to read package.json or source files for context
|
|
169
|
+
|
|
148
170
|
Analyze the git diff below to understand what changed and generate a commit message.
|
|
149
171
|
|
|
150
172
|
You should not include any licensing information or personal information.
|
|
151
173
|
Never mention CLAUDE code, or codex.
|
|
152
174
|
|
|
153
|
-
|
|
175
|
+
Your final output (inside the task_complete tags) must be ONLY valid JSON - the raw JSON object, nothing else.
|
|
176
|
+
No explanations, no summaries, no markdown - just the JSON object that can be parsed with JSON.parse().
|
|
154
177
|
|
|
155
|
-
|
|
178
|
+
Here is the structure of the JSON you must return:
|
|
156
179
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
recommendedNextVersionDetails: string[]; // detailed bullet points for the changelog
|
|
164
|
-
recommendedNextVersion: string; // the recommended next version x.x.x
|
|
180
|
+
{
|
|
181
|
+
"recommendedNextVersionLevel": "fix" | "feat" | "BREAKING CHANGE",
|
|
182
|
+
"recommendedNextVersionScope": "string",
|
|
183
|
+
"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
|
+
"recommendedNextVersionDetails": ["string"],
|
|
185
|
+
"recommendedNextVersion": "x.x.x"
|
|
165
186
|
}
|
|
166
187
|
|
|
167
188
|
For recommendedNextVersionDetails, only add entries that have obvious value to the reader.
|
|
@@ -170,7 +191,7 @@ Here is the git diff showing what changed:
|
|
|
170
191
|
|
|
171
192
|
${processedDiffString}
|
|
172
193
|
|
|
173
|
-
|
|
194
|
+
Analyze these changes and output the JSON commit message object.
|
|
174
195
|
`;
|
|
175
196
|
|
|
176
197
|
const commitResult = await commitOrchestrator.run(commitTaskPrompt);
|
|
@@ -180,9 +201,19 @@ Generate the commit message based on these changes.
|
|
|
180
201
|
throw new Error(`Commit message generation failed: ${commitResult.status}`);
|
|
181
202
|
}
|
|
182
203
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
204
|
+
// Extract JSON from result - handle cases where AI adds text around it
|
|
205
|
+
let jsonString = commitResult.result
|
|
206
|
+
.replace(/```json\n?/gi, '')
|
|
207
|
+
.replace(/```\n?/gi, '');
|
|
208
|
+
|
|
209
|
+
// Try to find JSON object in the result
|
|
210
|
+
const jsonMatch = jsonString.match(/\{[\s\S]*\}/);
|
|
211
|
+
if (!jsonMatch) {
|
|
212
|
+
throw new Error(`Could not find JSON object in result: ${jsonString.substring(0, 100)}...`);
|
|
213
|
+
}
|
|
214
|
+
jsonString = jsonMatch[0];
|
|
215
|
+
|
|
216
|
+
const resultObject: INextCommitObject = JSON.parse(jsonString);
|
|
186
217
|
|
|
187
218
|
const previousChangelogPath = plugins.path.join(this.projectDir, 'changelog.md');
|
|
188
219
|
let previousChangelog: plugins.smartfile.SmartFile;
|