aiag-cli 1.0.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/LICENSE +41 -0
- package/README.md +150 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +80 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/commit.d.ts +6 -0
- package/dist/commands/commit.d.ts.map +1 -0
- package/dist/commands/commit.js +90 -0
- package/dist/commands/commit.js.map +1 -0
- package/dist/commands/complete.d.ts +6 -0
- package/dist/commands/complete.d.ts.map +1 -0
- package/dist/commands/complete.js +73 -0
- package/dist/commands/complete.js.map +1 -0
- package/dist/commands/init.d.ts +7 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +164 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/next.d.ts +7 -0
- package/dist/commands/next.d.ts.map +1 -0
- package/dist/commands/next.js +77 -0
- package/dist/commands/next.js.map +1 -0
- package/dist/commands/session.d.ts +3 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +65 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/status.d.ts +7 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +78 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/test.d.ts +7 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +170 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +53 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/agentSelection.d.ts +28 -0
- package/dist/utils/agentSelection.d.ts.map +1 -0
- package/dist/utils/agentSelection.js +66 -0
- package/dist/utils/agentSelection.js.map +1 -0
- package/dist/utils/featureList.d.ts +109 -0
- package/dist/utils/featureList.d.ts.map +1 -0
- package/dist/utils/featureList.js +465 -0
- package/dist/utils/featureList.js.map +1 -0
- package/dist/utils/output.d.ts +71 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +115 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/progress.d.ts +31 -0
- package/dist/utils/progress.d.ts.map +1 -0
- package/dist/utils/progress.js +165 -0
- package/dist/utils/progress.js.map +1 -0
- package/dist/utils/prompts.d.ts +50 -0
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/utils/prompts.js +111 -0
- package/dist/utils/prompts.js.map +1 -0
- package/package.json +56 -0
- package/templates/coding.md +142 -0
- package/templates/initializer.md +125 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EACL,WAAW,EACX,MAAM,EACN,KAAK,EACL,UAAU,EACV,YAAY,EACZ,YAAY,GACb,MAAM,oBAAoB,CAAC;AAE5B,2BAA2B;AAC3B,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAOtC,MAAM,QAAQ,GAAG,OAAO,CAAC;AAEzB,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,UAAuB,EAAE;IAClD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE9B,+BAA+B;IAC/B,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC1C,YAAY,CAAC,gDAAgD,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACxD,OAAO;IACT,CAAC;IAED,WAAW,CAAC,0BAA0B,CAAC,CAAC;IAExC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IAEtD,IAAI,CAAC;QACH,qBAAqB;QACrB,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE7E,oCAAoC;QACpC,MAAM,mBAAmB,GAAG;YAC1B,OAAO,EAAE;gBACP,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC5B,OAAO,EAAE,OAAO;gBAChB,WAAW,EAAE,qBAAqB;gBAClC,aAAa,EAAE,CAAC;gBAChB,iBAAiB,EAAE,CAAC;aACrB;YACD,QAAQ,EAAE;gBACR;oBACE,EAAE,EAAE,UAAU;oBACd,QAAQ,EAAE,MAAM;oBAChB,QAAQ,EAAE,UAAU;oBACpB,WAAW,EAAE,8CAA8C;oBAC3D,kBAAkB,EAAE,CAAC,4BAA4B,EAAE,6BAA6B,CAAC;oBACjF,WAAW,EAAE,UAAU;oBACvB,MAAM,EAAE,KAAK;oBACb,YAAY,EAAE,IAAI;oBAClB,aAAa,EAAE,IAAI;oBACnB,KAAK,EAAE,EAAE;iBACV;aACF;SACF,CAAC;QAEF,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,mBAAmB,CAAC,EACjD,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC,CAC7C,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;QAE1D,qBAAqB;QACrB,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,gBAAgB,GAAG;;cAEf,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;;;;eAIrB,KAAK;oBACA,KAAK;;;;cAIX,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;CAqBrC,CAAC;QAEE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;QAEpD,iBAAiB;QACjB,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8B1B,CAAC;QAEE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,cAAc,CAAC,CAAC;QAC1E,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;QAEhD,4BAA4B;QAC5B,MAAM,sBAAsB,GAAG;;;;;;;kBAOjB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;;;;;CAKzC,CAAC;QAEE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,oBAAoB,CAAC,EAAE,sBAAsB,CAAC,CAAC;QAC7F,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;QAE3D,gEAAgE;QAChE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QAE7D,MAAM,mBAAmB,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;YAClF,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC;YACrE,CAAC,CAAC,iEAAiE,CAAC;QAEtE,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,CAAC,EAC3D,mBAAmB,CACpB,CAAC;QAEF,MAAM,cAAc,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YACxE,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC;YAChE,CAAC,CAAC,4DAA4D,CAAC;QAEjE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,cAAc,CAAC,CAAC;QACzF,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;QAEnD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,YAAY,CAAC,gCAAgC,CAAC,CAAC;QAE/C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,UAAU,CAAC,yBAAyB,KAAK,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../../src/commands/next.ts"],"names":[],"mappings":"AAWA,UAAU,WAAW;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0EnE"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { getNextFeature, getIncompleteFeatures } from '../utils/featureList.js';
|
|
2
|
+
import { printHeader, printSection, colors, icons, printError, getPriorityColor, } from '../utils/output.js';
|
|
3
|
+
export async function next(options = {}) {
|
|
4
|
+
const category = options.category;
|
|
5
|
+
const feature = getNextFeature(category);
|
|
6
|
+
if (!feature) {
|
|
7
|
+
if (category) {
|
|
8
|
+
printError(`No incomplete features in category "${category}".`);
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
console.log('');
|
|
12
|
+
console.log(colors.success('🎉 All features completed!'));
|
|
13
|
+
console.log('');
|
|
14
|
+
}
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
printHeader('Next Feature Recommendation');
|
|
18
|
+
// Feature details
|
|
19
|
+
console.log('');
|
|
20
|
+
console.log(`${colors.bold('ID:')} ${colors.info(feature.id)}`);
|
|
21
|
+
console.log(`${colors.bold('Category:')} ${feature.category}`);
|
|
22
|
+
console.log(`${colors.bold('Priority:')} ${getPriorityColor(feature.priority)(feature.priority)}`);
|
|
23
|
+
// Description
|
|
24
|
+
printSection('Description:');
|
|
25
|
+
console.log(` ${feature.description}`);
|
|
26
|
+
// Acceptance Criteria
|
|
27
|
+
if (feature.acceptanceCriteria.length > 0) {
|
|
28
|
+
printSection('Acceptance Criteria:');
|
|
29
|
+
for (const criteria of feature.acceptanceCriteria) {
|
|
30
|
+
console.log(` ${icons.checkbox.unchecked} ${criteria}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Test Command
|
|
34
|
+
if (feature.testCommand) {
|
|
35
|
+
printSection('Test Command:');
|
|
36
|
+
console.log(` ${colors.dim('$')} ${feature.testCommand}`);
|
|
37
|
+
}
|
|
38
|
+
// Notes
|
|
39
|
+
if (feature.notes) {
|
|
40
|
+
printSection('Notes:');
|
|
41
|
+
console.log(` ${feature.notes}`);
|
|
42
|
+
}
|
|
43
|
+
// Complexity estimate based on acceptance criteria count
|
|
44
|
+
const complexity = getComplexityEstimate(feature.acceptanceCriteria.length);
|
|
45
|
+
console.log('');
|
|
46
|
+
console.log(`${colors.dim('Estimated Complexity:')} ${complexity} ${colors.dim(`(${feature.acceptanceCriteria.length} criteria)`)}`);
|
|
47
|
+
// Show alternatives
|
|
48
|
+
const allIncomplete = getIncompleteFeatures();
|
|
49
|
+
if (allIncomplete.length > 1) {
|
|
50
|
+
printSection('Other Options:');
|
|
51
|
+
const alternatives = allIncomplete.slice(1, 4);
|
|
52
|
+
for (const alt of alternatives) {
|
|
53
|
+
console.log(` ${icons.bullet} ${alt.id} [${getPriorityColor(alt.priority)(alt.priority)}] ${alt.description.substring(0, 50)}${alt.description.length > 50 ? '...' : ''}`);
|
|
54
|
+
}
|
|
55
|
+
if (allIncomplete.length > 4) {
|
|
56
|
+
console.log(colors.dim(` ... and ${allIncomplete.length - 4} more`));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
console.log('');
|
|
60
|
+
console.log(colors.dim(`Ready to start? Run: aiag session start ${feature.id}`));
|
|
61
|
+
console.log('');
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Estimate complexity based on criteria count
|
|
65
|
+
*/
|
|
66
|
+
function getComplexityEstimate(criteriaCount) {
|
|
67
|
+
if (criteriaCount <= 2) {
|
|
68
|
+
return colors.success('Low');
|
|
69
|
+
}
|
|
70
|
+
else if (criteriaCount <= 4) {
|
|
71
|
+
return colors.warning('Medium');
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
return colors.error('High');
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=next.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next.js","sourceRoot":"","sources":["../../src/commands/next.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AAIA,wBAAsB,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCpE;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAwChD"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { updateLastUpdated } from '../utils/progress.js';
|
|
2
|
+
import { getProgress, getNextFeature } from '../utils/featureList.js';
|
|
3
|
+
import { printHeader, printSection, colors, icons, printInfo } from '../utils/output.js';
|
|
4
|
+
export async function sessionStart(featureId) {
|
|
5
|
+
printHeader('Session Start');
|
|
6
|
+
const progress = getProgress();
|
|
7
|
+
const nextFeature = featureId ? null : getNextFeature();
|
|
8
|
+
// Display current state
|
|
9
|
+
printSection('Current Progress');
|
|
10
|
+
console.log(` ${progress.completed}/${progress.total} features complete (${progress.percentage}%)`);
|
|
11
|
+
if (featureId) {
|
|
12
|
+
printSection('Target Feature');
|
|
13
|
+
console.log(` ${icons.arrow} ${featureId}`);
|
|
14
|
+
}
|
|
15
|
+
else if (nextFeature) {
|
|
16
|
+
printSection('Recommended Feature');
|
|
17
|
+
console.log(` ${icons.arrow} ${nextFeature.id}: ${nextFeature.description}`);
|
|
18
|
+
}
|
|
19
|
+
// Checklist
|
|
20
|
+
printSection('Session Start Checklist');
|
|
21
|
+
console.log(` ${icons.checkbox.checked} pwd - Confirm directory`);
|
|
22
|
+
console.log(` ${icons.checkbox.checked} Read progress.md`);
|
|
23
|
+
console.log(` ${icons.checkbox.checked} Read feature_list.json`);
|
|
24
|
+
console.log(` ${icons.checkbox.unchecked} git log --oneline -10`);
|
|
25
|
+
console.log(` ${icons.checkbox.unchecked} .aiag/init.sh`);
|
|
26
|
+
console.log(` ${icons.checkbox.unchecked} Identify next feature`);
|
|
27
|
+
console.log('');
|
|
28
|
+
printInfo('Session started. Remember: ONE feature at a time!');
|
|
29
|
+
console.log('');
|
|
30
|
+
}
|
|
31
|
+
export async function sessionEnd() {
|
|
32
|
+
printHeader('Session End');
|
|
33
|
+
const progress = getProgress();
|
|
34
|
+
// Get session summary
|
|
35
|
+
printSection('Session Summary');
|
|
36
|
+
console.log(` Progress: ${progress.completed}/${progress.total} features (${progress.percentage}%)`);
|
|
37
|
+
// Checklist
|
|
38
|
+
printSection('Session End Checklist');
|
|
39
|
+
console.log(` ${icons.checkbox.unchecked} Feature complete OR clean state`);
|
|
40
|
+
console.log(` ${icons.checkbox.unchecked} All tests passing`);
|
|
41
|
+
console.log(` ${icons.checkbox.unchecked} progress.md updated`);
|
|
42
|
+
console.log(` ${icons.checkbox.unchecked} feature_list.json updated`);
|
|
43
|
+
console.log(` ${icons.checkbox.unchecked} All changes committed`);
|
|
44
|
+
console.log(` ${icons.checkbox.unchecked} git status clean`);
|
|
45
|
+
// Update last updated
|
|
46
|
+
updateLastUpdated();
|
|
47
|
+
console.log('');
|
|
48
|
+
printInfo('Remember to update progress.md with your session summary!');
|
|
49
|
+
console.log('');
|
|
50
|
+
console.log(colors.dim('Template for progress.md:'));
|
|
51
|
+
console.log(colors.dim('---'));
|
|
52
|
+
console.log(colors.dim(`## Session: ${new Date().toISOString()}`));
|
|
53
|
+
console.log(colors.dim(''));
|
|
54
|
+
console.log(colors.dim('### Work Done'));
|
|
55
|
+
console.log(colors.dim('- [x] Completed task'));
|
|
56
|
+
console.log(colors.dim(''));
|
|
57
|
+
console.log(colors.dim('### Commits'));
|
|
58
|
+
console.log(colors.dim('- `hash` commit message'));
|
|
59
|
+
console.log(colors.dim(''));
|
|
60
|
+
console.log(colors.dim('### Next Session'));
|
|
61
|
+
console.log(colors.dim('- Continue with FEATURE-ID'));
|
|
62
|
+
console.log(colors.dim('---'));
|
|
63
|
+
console.log('');
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAgBA,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2EvE"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { readFeatureList, getProgress, getRecentlyCompleted, getNextFeature, } from '../utils/featureList.js';
|
|
2
|
+
import { printHeader, printSection, progressBar, colors, icons, printError, getPriorityColor, } from '../utils/output.js';
|
|
3
|
+
export async function status(options = {}) {
|
|
4
|
+
const data = readFeatureList();
|
|
5
|
+
if (!data) {
|
|
6
|
+
printError('No feature_list.json found. Run "aiag init" first.');
|
|
7
|
+
process.exit(1);
|
|
8
|
+
}
|
|
9
|
+
if (options.json) {
|
|
10
|
+
const progress = getProgress();
|
|
11
|
+
console.log(JSON.stringify({ project: data.project, progress }, null, 2));
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const progress = getProgress();
|
|
15
|
+
// Header
|
|
16
|
+
printHeader(`AIAG Project Status: ${data.project.name}`);
|
|
17
|
+
// Progress bar
|
|
18
|
+
console.log('');
|
|
19
|
+
console.log(`Progress: ${progressBar(progress.percentage)} ${progress.percentage}% (${progress.completed}/${progress.total})`);
|
|
20
|
+
// By category
|
|
21
|
+
printSection('By Category:');
|
|
22
|
+
const categories = Object.entries(progress.byCategory).sort(([, a], [, b]) => b.completed / b.total - a.completed / a.total);
|
|
23
|
+
for (const [category, stats] of categories) {
|
|
24
|
+
const catPercentage = Math.round((stats.completed / stats.total) * 100);
|
|
25
|
+
const bar = progressBar(catPercentage, 10);
|
|
26
|
+
console.log(` ${category.padEnd(8)} ${bar} ${catPercentage.toString().padStart(3)}% (${stats.completed}/${stats.total})`);
|
|
27
|
+
}
|
|
28
|
+
// Recently completed
|
|
29
|
+
const recentlyCompleted = getRecentlyCompleted(3);
|
|
30
|
+
if (recentlyCompleted.length > 0) {
|
|
31
|
+
printSection('Recently Completed:');
|
|
32
|
+
for (const feature of recentlyCompleted) {
|
|
33
|
+
const time = feature.lastTestedAt ? getRelativeTime(new Date(feature.lastTestedAt)) : '';
|
|
34
|
+
console.log(` ${icons.success} ${feature.id}: ${feature.description} ${colors.dim(`(${time})`)}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Next up
|
|
38
|
+
const nextFeature = getNextFeature();
|
|
39
|
+
if (nextFeature) {
|
|
40
|
+
printSection('Next Up:');
|
|
41
|
+
const priorityColor = getPriorityColor(nextFeature.priority);
|
|
42
|
+
console.log(` ${icons.arrow} ${colors.bold(nextFeature.id)}: ${nextFeature.description}`);
|
|
43
|
+
console.log(` ${colors.dim('Priority:')} ${priorityColor(nextFeature.priority)} ${colors.dim('Category:')} ${nextFeature.category}`);
|
|
44
|
+
}
|
|
45
|
+
// Verbose mode: show all incomplete features
|
|
46
|
+
if (options.verbose) {
|
|
47
|
+
printSection('Incomplete Features:');
|
|
48
|
+
const incomplete = data.features.filter((f) => !f.passes);
|
|
49
|
+
for (const feature of incomplete) {
|
|
50
|
+
const priorityColor = getPriorityColor(feature.priority);
|
|
51
|
+
console.log(` ${icons.checkbox.unchecked} ${feature.id} [${priorityColor(feature.priority)}] ${feature.description}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
console.log('');
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get relative time string
|
|
58
|
+
*/
|
|
59
|
+
function getRelativeTime(date) {
|
|
60
|
+
const now = new Date();
|
|
61
|
+
const diffMs = now.getTime() - date.getTime();
|
|
62
|
+
const diffMins = Math.floor(diffMs / 60000);
|
|
63
|
+
const diffHours = Math.floor(diffMs / 3600000);
|
|
64
|
+
const diffDays = Math.floor(diffMs / 86400000);
|
|
65
|
+
if (diffMins < 60) {
|
|
66
|
+
return `${diffMins} min ago`;
|
|
67
|
+
}
|
|
68
|
+
else if (diffHours < 24) {
|
|
69
|
+
return `${diffHours} hour${diffHours > 1 ? 's' : ''} ago`;
|
|
70
|
+
}
|
|
71
|
+
else if (diffDays < 7) {
|
|
72
|
+
return `${diffDays} day${diffDays > 1 ? 's' : ''} ago`;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
return date.toLocaleDateString();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAkBA,UAAU,WAAW;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoHvF"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { spawn } from 'child_process';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import { getFeatureById, readFeatureList } from '../utils/featureList.js';
|
|
5
|
+
import { printHeader, printSection, colors, icons, printError, printSuccess, printWarning, } from '../utils/output.js';
|
|
6
|
+
const AIAG_DIR = '.aiag';
|
|
7
|
+
const TEST_RESULTS_FILE = 'test_results.json';
|
|
8
|
+
export async function test(featureId, options = {}) {
|
|
9
|
+
const data = readFeatureList();
|
|
10
|
+
if (!data) {
|
|
11
|
+
printError('No feature_list.json found. Run "aiag init" first.');
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
let featuresToTest = data.features;
|
|
15
|
+
if (featureId) {
|
|
16
|
+
// Test specific feature
|
|
17
|
+
const feature = getFeatureById(featureId);
|
|
18
|
+
if (!feature) {
|
|
19
|
+
printError(`Feature "${featureId}" not found.`);
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
featuresToTest = [feature];
|
|
23
|
+
}
|
|
24
|
+
else if (options.failed) {
|
|
25
|
+
// Test only previously failed
|
|
26
|
+
const prevResults = loadTestResults();
|
|
27
|
+
if (prevResults) {
|
|
28
|
+
const failedIds = Object.entries(prevResults.byFeature)
|
|
29
|
+
.filter(([, result]) => result.status === 'failed')
|
|
30
|
+
.map(([id]) => id);
|
|
31
|
+
featuresToTest = data.features.filter((f) => failedIds.includes(f.id));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
else if (!options.all) {
|
|
35
|
+
// Default: test incomplete features
|
|
36
|
+
featuresToTest = data.features.filter((f) => !f.passes);
|
|
37
|
+
}
|
|
38
|
+
if (featuresToTest.length === 0) {
|
|
39
|
+
printWarning('No features to test.');
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
printHeader(`Testing ${featuresToTest.length} Feature(s)`);
|
|
43
|
+
const results = {
|
|
44
|
+
lastRun: new Date().toISOString(),
|
|
45
|
+
summary: { total: 0, passed: 0, failed: 0, skipped: 0 },
|
|
46
|
+
byFeature: {},
|
|
47
|
+
};
|
|
48
|
+
for (const feature of featuresToTest) {
|
|
49
|
+
console.log('');
|
|
50
|
+
console.log(`${colors.bold(feature.id)}: ${feature.description}`);
|
|
51
|
+
if (!feature.testCommand) {
|
|
52
|
+
console.log(` ${colors.warning('⊘')} No test command defined`);
|
|
53
|
+
results.summary.skipped++;
|
|
54
|
+
results.byFeature[feature.id] = {
|
|
55
|
+
featureId: feature.id,
|
|
56
|
+
status: 'skipped',
|
|
57
|
+
duration: 0,
|
|
58
|
+
lastRun: new Date().toISOString(),
|
|
59
|
+
};
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
console.log(` ${colors.dim('$')} ${feature.testCommand}`);
|
|
63
|
+
const startTime = Date.now();
|
|
64
|
+
const { success, error } = await runTest(feature.testCommand);
|
|
65
|
+
const duration = Date.now() - startTime;
|
|
66
|
+
results.summary.total++;
|
|
67
|
+
if (success) {
|
|
68
|
+
console.log(` ${icons.success} Passed ${colors.dim(`(${duration}ms)`)}`);
|
|
69
|
+
results.summary.passed++;
|
|
70
|
+
results.byFeature[feature.id] = {
|
|
71
|
+
featureId: feature.id,
|
|
72
|
+
status: 'passed',
|
|
73
|
+
duration,
|
|
74
|
+
lastRun: new Date().toISOString(),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
console.log(` ${icons.error} Failed ${colors.dim(`(${duration}ms)`)}`);
|
|
79
|
+
if (error) {
|
|
80
|
+
console.log(` ${colors.dim(error)}`);
|
|
81
|
+
}
|
|
82
|
+
results.summary.failed++;
|
|
83
|
+
results.byFeature[feature.id] = {
|
|
84
|
+
featureId: feature.id,
|
|
85
|
+
status: 'failed',
|
|
86
|
+
duration,
|
|
87
|
+
error,
|
|
88
|
+
lastRun: new Date().toISOString(),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Save results
|
|
93
|
+
saveTestResults(results);
|
|
94
|
+
// Summary
|
|
95
|
+
printSection('Summary');
|
|
96
|
+
console.log(` Total: ${results.summary.total} ` +
|
|
97
|
+
`${colors.success(`Passed: ${results.summary.passed}`)} ` +
|
|
98
|
+
`${colors.error(`Failed: ${results.summary.failed}`)} ` +
|
|
99
|
+
`${colors.dim(`Skipped: ${results.summary.skipped}`)}`);
|
|
100
|
+
if (results.summary.failed > 0) {
|
|
101
|
+
console.log('');
|
|
102
|
+
printError(`${results.summary.failed} test(s) failed`);
|
|
103
|
+
process.exit(1);
|
|
104
|
+
}
|
|
105
|
+
else if (results.summary.passed > 0) {
|
|
106
|
+
console.log('');
|
|
107
|
+
printSuccess('All tests passed!');
|
|
108
|
+
}
|
|
109
|
+
console.log('');
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Run a test command
|
|
113
|
+
*/
|
|
114
|
+
async function runTest(command) {
|
|
115
|
+
return new Promise((resolve) => {
|
|
116
|
+
const [cmd, ...args] = command.split(' ');
|
|
117
|
+
let stderr = '';
|
|
118
|
+
const proc = spawn(cmd, args, {
|
|
119
|
+
shell: true,
|
|
120
|
+
stdio: ['inherit', 'pipe', 'pipe'],
|
|
121
|
+
});
|
|
122
|
+
proc.stdout?.on('data', (data) => {
|
|
123
|
+
process.stdout.write(colors.dim(data.toString()));
|
|
124
|
+
});
|
|
125
|
+
proc.stderr?.on('data', (data) => {
|
|
126
|
+
stderr += data.toString();
|
|
127
|
+
});
|
|
128
|
+
proc.on('close', (code) => {
|
|
129
|
+
resolve({
|
|
130
|
+
success: code === 0,
|
|
131
|
+
error: stderr || undefined,
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
proc.on('error', (err) => {
|
|
135
|
+
resolve({
|
|
136
|
+
success: false,
|
|
137
|
+
error: err.message,
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Load previous test results
|
|
144
|
+
*/
|
|
145
|
+
function loadTestResults() {
|
|
146
|
+
const filePath = path.join(process.cwd(), AIAG_DIR, TEST_RESULTS_FILE);
|
|
147
|
+
if (!fs.existsSync(filePath)) {
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
try {
|
|
151
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
152
|
+
return JSON.parse(content);
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Save test results
|
|
160
|
+
*/
|
|
161
|
+
function saveTestResults(results) {
|
|
162
|
+
const filePath = path.join(process.cwd(), AIAG_DIR, TEST_RESULTS_FILE);
|
|
163
|
+
try {
|
|
164
|
+
fs.writeFileSync(filePath, JSON.stringify(results, null, 2));
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
console.error('Failed to save test results:', error);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from './types.js';
|
|
2
|
+
export * from './utils/featureList.js';
|
|
3
|
+
export * from './utils/progress.js';
|
|
4
|
+
export * from './utils/output.js';
|
|
5
|
+
export { init } from './commands/init.js';
|
|
6
|
+
export { status } from './commands/status.js';
|
|
7
|
+
export { next } from './commands/next.js';
|
|
8
|
+
export { test } from './commands/test.js';
|
|
9
|
+
export { complete } from './commands/complete.js';
|
|
10
|
+
export { commit } from './commands/commit.js';
|
|
11
|
+
export { sessionStart, sessionEnd } from './commands/session.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAElC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// AIAG CLI - Main exports
|
|
2
|
+
export * from './types.js';
|
|
3
|
+
export * from './utils/featureList.js';
|
|
4
|
+
export * from './utils/progress.js';
|
|
5
|
+
export * from './utils/output.js';
|
|
6
|
+
export { init } from './commands/init.js';
|
|
7
|
+
export { status } from './commands/status.js';
|
|
8
|
+
export { next } from './commands/next.js';
|
|
9
|
+
export { test } from './commands/test.js';
|
|
10
|
+
export { complete } from './commands/complete.js';
|
|
11
|
+
export { commit } from './commands/commit.js';
|
|
12
|
+
export { sessionStart, sessionEnd } from './commands/session.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAE1B,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAElC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export interface Project {
|
|
2
|
+
name: string;
|
|
3
|
+
version: string;
|
|
4
|
+
description: string;
|
|
5
|
+
totalFeatures: number;
|
|
6
|
+
completedFeatures: number;
|
|
7
|
+
}
|
|
8
|
+
export interface Feature {
|
|
9
|
+
id: string;
|
|
10
|
+
category: FeatureCategory;
|
|
11
|
+
priority: FeaturePriority;
|
|
12
|
+
description: string;
|
|
13
|
+
acceptanceCriteria: string[];
|
|
14
|
+
testCommand?: string;
|
|
15
|
+
passes: boolean;
|
|
16
|
+
lastTestedAt: string | null;
|
|
17
|
+
implementedBy: string | null;
|
|
18
|
+
notes?: string;
|
|
19
|
+
dependsOn?: string[];
|
|
20
|
+
}
|
|
21
|
+
export interface FeatureList {
|
|
22
|
+
project: Project;
|
|
23
|
+
features: Feature[];
|
|
24
|
+
}
|
|
25
|
+
export type FeatureCategory = 'core' | 'cli' | 'api' | 'ui' | 'auth' | 'data' | 'test' | 'docs' | 'devops' | 'claude' | 'agent' | 'feature';
|
|
26
|
+
export type FeaturePriority = 'critical' | 'high' | 'medium' | 'low';
|
|
27
|
+
export interface TestResult {
|
|
28
|
+
featureId: string;
|
|
29
|
+
status: 'passed' | 'failed' | 'skipped';
|
|
30
|
+
duration: number;
|
|
31
|
+
error?: string;
|
|
32
|
+
lastRun: string;
|
|
33
|
+
}
|
|
34
|
+
export interface TestResults {
|
|
35
|
+
lastRun: string;
|
|
36
|
+
summary: {
|
|
37
|
+
total: number;
|
|
38
|
+
passed: number;
|
|
39
|
+
failed: number;
|
|
40
|
+
skipped: number;
|
|
41
|
+
};
|
|
42
|
+
byFeature: Record<string, TestResult>;
|
|
43
|
+
}
|
|
44
|
+
export interface SessionLog {
|
|
45
|
+
timestamp: string;
|
|
46
|
+
context: string[];
|
|
47
|
+
workDone: string[];
|
|
48
|
+
commits: string[];
|
|
49
|
+
nextSession: string[];
|
|
50
|
+
notes: string[];
|
|
51
|
+
}
|
|
52
|
+
export declare const PRIORITY_ORDER: Record<FeaturePriority, number>;
|
|
53
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE,eAAe,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,MAAM,MAAM,eAAe,GACvB,MAAM,GACN,KAAK,GACL,KAAK,GACL,IAAI,GACJ,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,SAAS,CAAC;AAEd,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAErE,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAGD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAK1D,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,wBAAwB;AAyExB,6BAA6B;AAC7B,MAAM,CAAC,MAAM,cAAc,GAAoC;IAC7D,QAAQ,EAAE,CAAC;IACX,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;CACP,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type AgentType = 'initializer' | 'coding';
|
|
2
|
+
/**
|
|
3
|
+
* Determine which agent type should be active based on project state
|
|
4
|
+
*
|
|
5
|
+
* - Initializer Agent: When .aiag/ directory does NOT exist
|
|
6
|
+
* - Coding Agent: When .aiag/ directory exists
|
|
7
|
+
*/
|
|
8
|
+
export declare function getAgentType(cwd?: string): AgentType;
|
|
9
|
+
/**
|
|
10
|
+
* Check if AIAG project is initialized
|
|
11
|
+
*/
|
|
12
|
+
export declare function isAiagInitialized(cwd?: string): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Get agent description for display
|
|
15
|
+
*/
|
|
16
|
+
export declare function getAgentDescription(agentType: AgentType): string;
|
|
17
|
+
/**
|
|
18
|
+
* Get agent prompt template path
|
|
19
|
+
*/
|
|
20
|
+
export declare function getAgentTemplatePath(agentType: AgentType, cwd?: string): string | null;
|
|
21
|
+
/**
|
|
22
|
+
* Validate that the correct agent is being used based on project state
|
|
23
|
+
*/
|
|
24
|
+
export declare function validateAgentContext(expectedAgent: AgentType, cwd?: string): {
|
|
25
|
+
valid: boolean;
|
|
26
|
+
message: string;
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=agentSelection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentSelection.d.ts","sourceRoot":"","sources":["../../src/utils/agentSelection.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,QAAQ,CAAC;AAIjD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAsB,GAAG,SAAS,CAGnE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAGtE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAOhE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,SAAS,EACpB,GAAG,GAAE,MAAsB,GAC1B,MAAM,GAAG,IAAI,CAWf;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,SAAS,EACxB,GAAG,GAAE,MAAsB,GAC1B;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAsBrC"}
|