kyro-ai 3.2.3 → 3.3.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/.claude-plugin/plugin.json +1 -1
- package/README.md +14 -1
- package/WORKFLOW.yaml +1 -1
- package/dist/cli/app.d.ts.map +1 -1
- package/dist/cli/app.js +9 -0
- package/dist/cli/app.js.map +1 -1
- package/dist/cli/artifacts/json.d.ts +8 -0
- package/dist/cli/artifacts/json.d.ts.map +1 -0
- package/dist/cli/artifacts/json.js +18 -0
- package/dist/cli/artifacts/json.js.map +1 -0
- package/dist/cli/artifacts/paths.d.ts +9 -0
- package/dist/cli/artifacts/paths.d.ts.map +1 -0
- package/dist/cli/artifacts/paths.js +36 -0
- package/dist/cli/artifacts/paths.js.map +1 -0
- package/dist/cli/artifacts/schema.d.ts +102 -0
- package/dist/cli/artifacts/schema.d.ts.map +1 -0
- package/dist/cli/artifacts/schema.js +157 -0
- package/dist/cli/artifacts/schema.js.map +1 -0
- package/dist/cli/commands/artifact-doctor.d.ts +8 -0
- package/dist/cli/commands/artifact-doctor.d.ts.map +1 -0
- package/dist/cli/commands/artifact-doctor.js +246 -0
- package/dist/cli/commands/artifact-doctor.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +5 -2
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/repair.d.ts +4 -0
- package/dist/cli/commands/repair.d.ts.map +1 -0
- package/dist/cli/commands/repair.js +271 -0
- package/dist/cli/commands/repair.js.map +1 -0
- package/dist/cli/commands/scope.d.ts +2 -0
- package/dist/cli/commands/scope.d.ts.map +1 -0
- package/dist/cli/commands/scope.js +113 -0
- package/dist/cli/commands/scope.js.map +1 -0
- package/dist/cli/commands/tui.js +3 -3
- package/dist/cli/commands/tui.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +35 -2
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/options.d.ts.map +1 -1
- package/dist/cli/options.js +17 -0
- package/dist/cli/options.js.map +1 -1
- package/dist/cli/types.d.ts +2 -0
- package/dist/cli/types.d.ts.map +1 -1
- package/docs/cli.md +28 -0
- package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/kyro.json +11 -0
- package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/scopes/demo/DEBT.summary.json +12 -0
- package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/scopes/demo/RE-ENTRY-PROMPTS.md +1 -0
- package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/scopes/demo/ROADMAP.md +4 -0
- package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/scopes/demo/ROADMAP.summary.json +15 -0
- package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/scopes/demo/index.json +15 -0
- package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.md +8 -0
- package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.summary.json +16 -0
- package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/scopes/demo/state.json +11 -0
- package/fixtures/artifact-integrity/invalid-state/.agents/kyro/kyro.json +11 -0
- package/fixtures/artifact-integrity/invalid-state/.agents/kyro/scopes/demo/DEBT.summary.json +12 -0
- package/fixtures/artifact-integrity/invalid-state/.agents/kyro/scopes/demo/RE-ENTRY-PROMPTS.md +1 -0
- package/fixtures/artifact-integrity/invalid-state/.agents/kyro/scopes/demo/ROADMAP.md +4 -0
- package/fixtures/artifact-integrity/invalid-state/.agents/kyro/scopes/demo/ROADMAP.summary.json +15 -0
- package/fixtures/artifact-integrity/invalid-state/.agents/kyro/scopes/demo/index.json +15 -0
- package/fixtures/artifact-integrity/invalid-state/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.md +8 -0
- package/fixtures/artifact-integrity/invalid-state/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.summary.json +16 -0
- package/fixtures/artifact-integrity/invalid-state/.agents/kyro/scopes/demo/state.json +10 -0
- package/fixtures/artifact-integrity/missing-summary/.agents/kyro/kyro.json +11 -0
- package/fixtures/artifact-integrity/missing-summary/.agents/kyro/scopes/demo/RE-ENTRY-PROMPTS.md +1 -0
- package/fixtures/artifact-integrity/missing-summary/.agents/kyro/scopes/demo/ROADMAP.md +4 -0
- package/fixtures/artifact-integrity/missing-summary/.agents/kyro/scopes/demo/index.json +15 -0
- package/fixtures/artifact-integrity/missing-summary/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.md +8 -0
- package/fixtures/artifact-integrity/missing-summary/.agents/kyro/scopes/demo/state.json +11 -0
- package/fixtures/artifact-integrity/stale-summary/.agents/kyro/kyro.json +11 -0
- package/fixtures/artifact-integrity/stale-summary/.agents/kyro/scopes/demo/DEBT.summary.json +12 -0
- package/fixtures/artifact-integrity/stale-summary/.agents/kyro/scopes/demo/RE-ENTRY-PROMPTS.md +1 -0
- package/fixtures/artifact-integrity/stale-summary/.agents/kyro/scopes/demo/ROADMAP.md +4 -0
- package/fixtures/artifact-integrity/stale-summary/.agents/kyro/scopes/demo/ROADMAP.summary.json +15 -0
- package/fixtures/artifact-integrity/stale-summary/.agents/kyro/scopes/demo/index.json +15 -0
- package/fixtures/artifact-integrity/stale-summary/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.md +8 -0
- package/fixtures/artifact-integrity/stale-summary/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.summary.json +16 -0
- package/fixtures/artifact-integrity/stale-summary/.agents/kyro/scopes/demo/state.json +11 -0
- package/fixtures/artifact-integrity/valid/.agents/kyro/kyro.json +11 -0
- package/fixtures/artifact-integrity/valid/.agents/kyro/scopes/demo/DEBT.summary.json +12 -0
- package/fixtures/artifact-integrity/valid/.agents/kyro/scopes/demo/RE-ENTRY-PROMPTS.md +1 -0
- package/fixtures/artifact-integrity/valid/.agents/kyro/scopes/demo/ROADMAP.md +4 -0
- package/fixtures/artifact-integrity/valid/.agents/kyro/scopes/demo/ROADMAP.summary.json +15 -0
- package/fixtures/artifact-integrity/valid/.agents/kyro/scopes/demo/index.json +15 -0
- package/fixtures/artifact-integrity/valid/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.md +8 -0
- package/fixtures/artifact-integrity/valid/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.summary.json +16 -0
- package/fixtures/artifact-integrity/valid/.agents/kyro/scopes/demo/state.json +11 -0
- package/package.json +6 -2
- package/scripts/check-artifact-fixtures.mjs +56 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"scope": "demo",
|
|
4
|
+
"open": 1,
|
|
5
|
+
"inProgress": 0,
|
|
6
|
+
"resolved": 0,
|
|
7
|
+
"deferred": 0,
|
|
8
|
+
"critical": 1,
|
|
9
|
+
"oldestOpenItem": "| D1 | Demo debt | open | critical |",
|
|
10
|
+
"sourceMarkdown": ".agents/kyro/scopes/demo/phases/SPRINT-001-demo.md",
|
|
11
|
+
"lastUpdated": "2026-06-14T00:00:00.000Z"
|
|
12
|
+
}
|
package/fixtures/artifact-integrity/stale-summary/.agents/kyro/scopes/demo/RE-ENTRY-PROMPTS.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Re-entry
|
package/fixtures/artifact-integrity/stale-summary/.agents/kyro/scopes/demo/ROADMAP.summary.json
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"scope": "demo",
|
|
4
|
+
"status": "planned",
|
|
5
|
+
"summary": "Demo roadmap",
|
|
6
|
+
"plannedSprintCount": 1,
|
|
7
|
+
"completedSprintCount": 0,
|
|
8
|
+
"adaptationCount": 0,
|
|
9
|
+
"nextRecommendedAction": "execute_task",
|
|
10
|
+
"openDecisions": [],
|
|
11
|
+
"relevantArtifactPaths": [
|
|
12
|
+
".agents/kyro/scopes/demo/ROADMAP.md"
|
|
13
|
+
],
|
|
14
|
+
"lastUpdated": "2026-06-14T00:00:00.000Z"
|
|
15
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"scope": "demo",
|
|
4
|
+
"roadmapSummary": "Demo roadmap",
|
|
5
|
+
"activeSprintSummary": ".agents/kyro/scopes/demo/phases/SPRINT-001-demo.summary.json",
|
|
6
|
+
"openDebtCount": 1,
|
|
7
|
+
"nextTask": "T1.2",
|
|
8
|
+
"relevantArtifactPaths": {
|
|
9
|
+
"roadmap": ".agents/kyro/scopes/demo/ROADMAP.md",
|
|
10
|
+
"roadmapSummary": ".agents/kyro/scopes/demo/ROADMAP.summary.json",
|
|
11
|
+
"sprints": ".agents/kyro/scopes/demo/phases",
|
|
12
|
+
"reentry": ".agents/kyro/scopes/demo/RE-ENTRY-PROMPTS.md"
|
|
13
|
+
},
|
|
14
|
+
"lastUpdated": "2026-06-14T00:00:00.000Z"
|
|
15
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"scope": "demo",
|
|
4
|
+
"sprint": "SPRINT-001-demo",
|
|
5
|
+
"status": "active",
|
|
6
|
+
"completedTasks": 1,
|
|
7
|
+
"blockedTasks": 0,
|
|
8
|
+
"carryOverTasks": 0,
|
|
9
|
+
"nextRecommendedAction": "execute_task",
|
|
10
|
+
"nextTask": "T1.2",
|
|
11
|
+
"openDecisions": [],
|
|
12
|
+
"filesTouched": [],
|
|
13
|
+
"debtDeltas": [],
|
|
14
|
+
"sourceMarkdown": ".agents/kyro/scopes/demo/phases/SPRINT-001-demo.md",
|
|
15
|
+
"lastUpdated": "2026-06-14T00:00:00.000Z"
|
|
16
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"scope": "demo",
|
|
4
|
+
"status": "active",
|
|
5
|
+
"activeSprint": "SPRINT-001-demo",
|
|
6
|
+
"currentPhase": "sprint",
|
|
7
|
+
"nextAction": "execute_task",
|
|
8
|
+
"roadmapPath": ".agents/kyro/scopes/demo/ROADMAP.md",
|
|
9
|
+
"sprintsPath": ".agents/kyro/scopes/demo/phases",
|
|
10
|
+
"lastUpdated": "2026-06-14T00:00:00.000Z"
|
|
11
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"scope": "demo",
|
|
4
|
+
"open": 1,
|
|
5
|
+
"inProgress": 0,
|
|
6
|
+
"resolved": 0,
|
|
7
|
+
"deferred": 0,
|
|
8
|
+
"critical": 1,
|
|
9
|
+
"oldestOpenItem": "| D1 | Demo debt | open | critical |",
|
|
10
|
+
"sourceMarkdown": ".agents/kyro/scopes/demo/phases/SPRINT-001-demo.md",
|
|
11
|
+
"lastUpdated": "2026-06-14T00:00:00.000Z"
|
|
12
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Re-entry
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"scope": "demo",
|
|
4
|
+
"status": "planned",
|
|
5
|
+
"summary": "Demo roadmap",
|
|
6
|
+
"plannedSprintCount": 1,
|
|
7
|
+
"completedSprintCount": 0,
|
|
8
|
+
"adaptationCount": 0,
|
|
9
|
+
"nextRecommendedAction": "execute_task",
|
|
10
|
+
"openDecisions": [],
|
|
11
|
+
"relevantArtifactPaths": [
|
|
12
|
+
".agents/kyro/scopes/demo/ROADMAP.md"
|
|
13
|
+
],
|
|
14
|
+
"lastUpdated": "2026-06-14T00:00:00.000Z"
|
|
15
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"scope": "demo",
|
|
4
|
+
"roadmapSummary": "Demo roadmap",
|
|
5
|
+
"activeSprintSummary": ".agents/kyro/scopes/demo/phases/SPRINT-001-demo.summary.json",
|
|
6
|
+
"openDebtCount": 1,
|
|
7
|
+
"nextTask": "T1.2",
|
|
8
|
+
"relevantArtifactPaths": {
|
|
9
|
+
"roadmap": ".agents/kyro/scopes/demo/ROADMAP.md",
|
|
10
|
+
"roadmapSummary": ".agents/kyro/scopes/demo/ROADMAP.summary.json",
|
|
11
|
+
"sprints": ".agents/kyro/scopes/demo/phases",
|
|
12
|
+
"reentry": ".agents/kyro/scopes/demo/RE-ENTRY-PROMPTS.md"
|
|
13
|
+
},
|
|
14
|
+
"lastUpdated": "2026-06-14T00:00:00.000Z"
|
|
15
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"scope": "demo",
|
|
4
|
+
"sprint": "SPRINT-001-demo",
|
|
5
|
+
"status": "active",
|
|
6
|
+
"completedTasks": 1,
|
|
7
|
+
"blockedTasks": 0,
|
|
8
|
+
"carryOverTasks": 0,
|
|
9
|
+
"nextRecommendedAction": "execute_task",
|
|
10
|
+
"nextTask": "T1.2",
|
|
11
|
+
"openDecisions": [],
|
|
12
|
+
"filesTouched": [],
|
|
13
|
+
"debtDeltas": [],
|
|
14
|
+
"sourceMarkdown": ".agents/kyro/scopes/demo/phases/SPRINT-001-demo.md",
|
|
15
|
+
"lastUpdated": "2026-06-14T00:00:00.000Z"
|
|
16
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"scope": "demo",
|
|
4
|
+
"status": "active",
|
|
5
|
+
"activeSprint": "SPRINT-001-demo",
|
|
6
|
+
"currentPhase": "sprint",
|
|
7
|
+
"nextAction": "execute_task",
|
|
8
|
+
"roadmapPath": ".agents/kyro/scopes/demo/ROADMAP.md",
|
|
9
|
+
"sprintsPath": ".agents/kyro/scopes/demo/phases",
|
|
10
|
+
"lastUpdated": "2026-06-14T00:00:00.000Z"
|
|
11
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kyro-ai",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.0",
|
|
4
4
|
"description": "Portable sprint workflow kit for AI coding agents, with markdown artifacts, adapter guides, and formal debt tracking",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -12,7 +12,10 @@
|
|
|
12
12
|
"check:versions": "node scripts/check-versions.mjs",
|
|
13
13
|
"check": "npm run typecheck && npm run check:versions && npm run check:links",
|
|
14
14
|
"prepublishOnly": "npm run build",
|
|
15
|
-
"build:chmod": "node scripts/make-cli-executable.mjs"
|
|
15
|
+
"build:chmod": "node scripts/make-cli-executable.mjs",
|
|
16
|
+
"check:tokens": "node dist/cli.js doctor --tokens",
|
|
17
|
+
"check:artifacts": "node dist/cli.js doctor --artifacts",
|
|
18
|
+
"check:artifact-fixtures": "node scripts/check-artifact-fixtures.mjs"
|
|
16
19
|
},
|
|
17
20
|
"keywords": [
|
|
18
21
|
"ai-agents",
|
|
@@ -61,6 +64,7 @@
|
|
|
61
64
|
"agents",
|
|
62
65
|
"skills",
|
|
63
66
|
"scripts",
|
|
67
|
+
"fixtures",
|
|
64
68
|
"docs",
|
|
65
69
|
"rules",
|
|
66
70
|
"contexts",
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { cpSync, mkdtempSync, rmSync, utimesSync } from 'node:fs';
|
|
2
|
+
import { tmpdir } from 'node:os';
|
|
3
|
+
import { join, resolve } from 'node:path';
|
|
4
|
+
import { spawnSync } from 'node:child_process';
|
|
5
|
+
|
|
6
|
+
const repo = resolve(new URL('..', import.meta.url).pathname);
|
|
7
|
+
const cli = join(repo, 'dist/cli.js');
|
|
8
|
+
const fixtures = join(repo, 'fixtures/artifact-integrity');
|
|
9
|
+
|
|
10
|
+
function run(cwd, args) {
|
|
11
|
+
return spawnSync(process.execPath, [cli, ...args], {
|
|
12
|
+
cwd,
|
|
13
|
+
env: { ...process.env, HOME: join(cwd, '.home') },
|
|
14
|
+
encoding: 'utf-8',
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function assert(condition, message) {
|
|
19
|
+
if (!condition) throw new Error(message);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function assertDoctor(name, expectedStatus, expectedText) {
|
|
23
|
+
const result = run(join(fixtures, name), ['doctor', '--artifacts', '--kyro-scope', 'demo']);
|
|
24
|
+
const output = `${result.stdout}\n${result.stderr}`;
|
|
25
|
+
assert(result.status === expectedStatus, `${name}: expected exit ${expectedStatus}, got ${result.status}\n${output}`);
|
|
26
|
+
assert(output.includes(expectedText), `${name}: expected output to include ${expectedText}\n${output}`);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
assertDoctor('valid', 0, '[PASS] artifact state.json');
|
|
30
|
+
assertDoctor('missing-summary', 0, '[WARN] artifact ROADMAP.summary.json');
|
|
31
|
+
assertDoctor('invalid-state', 1, '[FAIL] artifact state.json');
|
|
32
|
+
assertDoctor('active-sprint-missing', 1, 'activeSprint not found');
|
|
33
|
+
|
|
34
|
+
const staleDir = mkdtempSync(join(tmpdir(), 'kyro-stale-'));
|
|
35
|
+
cpSync(join(fixtures, 'stale-summary'), staleDir, { recursive: true });
|
|
36
|
+
const roadmap = join(staleDir, '.agents/kyro/scopes/demo/ROADMAP.md');
|
|
37
|
+
const future = new Date(Date.now() + 5000);
|
|
38
|
+
utimesSync(roadmap, future, future);
|
|
39
|
+
const stale = run(staleDir, ['doctor', '--artifacts', '--kyro-scope', 'demo']);
|
|
40
|
+
const staleOutput = `${stale.stdout}\n${stale.stderr}`;
|
|
41
|
+
assert(stale.status === 0, `stale-summary: expected exit 0\n${staleOutput}`);
|
|
42
|
+
assert(staleOutput.includes('older than ROADMAP.md'), `stale-summary: expected stale warning\n${staleOutput}`);
|
|
43
|
+
rmSync(staleDir, { recursive: true, force: true });
|
|
44
|
+
|
|
45
|
+
const repairDir = mkdtempSync(join(tmpdir(), 'kyro-repair-'));
|
|
46
|
+
cpSync(join(fixtures, 'missing-summary'), repairDir, { recursive: true });
|
|
47
|
+
const repair = run(repairDir, ['repair', '--kyro-scope', 'demo', '--yes']);
|
|
48
|
+
const repairOutput = `${repair.stdout}\n${repair.stderr}`;
|
|
49
|
+
assert(repair.status === 0, `repair: expected exit 0\n${repairOutput}`);
|
|
50
|
+
const repaired = run(repairDir, ['doctor', '--artifacts', '--kyro-scope', 'demo']);
|
|
51
|
+
const repairedOutput = `${repaired.stdout}\n${repaired.stderr}`;
|
|
52
|
+
assert(repaired.status === 0, `repaired doctor: expected exit 0\n${repairedOutput}`);
|
|
53
|
+
assert(!repairedOutput.includes('missing'), `repaired doctor: expected missing warnings to be gone\n${repairedOutput}`);
|
|
54
|
+
rmSync(repairDir, { recursive: true, force: true });
|
|
55
|
+
|
|
56
|
+
console.log('Artifact integrity fixtures passed');
|