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.
Files changed (89) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +14 -1
  3. package/WORKFLOW.yaml +1 -1
  4. package/dist/cli/app.d.ts.map +1 -1
  5. package/dist/cli/app.js +9 -0
  6. package/dist/cli/app.js.map +1 -1
  7. package/dist/cli/artifacts/json.d.ts +8 -0
  8. package/dist/cli/artifacts/json.d.ts.map +1 -0
  9. package/dist/cli/artifacts/json.js +18 -0
  10. package/dist/cli/artifacts/json.js.map +1 -0
  11. package/dist/cli/artifacts/paths.d.ts +9 -0
  12. package/dist/cli/artifacts/paths.d.ts.map +1 -0
  13. package/dist/cli/artifacts/paths.js +36 -0
  14. package/dist/cli/artifacts/paths.js.map +1 -0
  15. package/dist/cli/artifacts/schema.d.ts +102 -0
  16. package/dist/cli/artifacts/schema.d.ts.map +1 -0
  17. package/dist/cli/artifacts/schema.js +157 -0
  18. package/dist/cli/artifacts/schema.js.map +1 -0
  19. package/dist/cli/commands/artifact-doctor.d.ts +8 -0
  20. package/dist/cli/commands/artifact-doctor.d.ts.map +1 -0
  21. package/dist/cli/commands/artifact-doctor.js +246 -0
  22. package/dist/cli/commands/artifact-doctor.js.map +1 -0
  23. package/dist/cli/commands/doctor.d.ts +1 -1
  24. package/dist/cli/commands/doctor.d.ts.map +1 -1
  25. package/dist/cli/commands/doctor.js +5 -2
  26. package/dist/cli/commands/doctor.js.map +1 -1
  27. package/dist/cli/commands/repair.d.ts +4 -0
  28. package/dist/cli/commands/repair.d.ts.map +1 -0
  29. package/dist/cli/commands/repair.js +271 -0
  30. package/dist/cli/commands/repair.js.map +1 -0
  31. package/dist/cli/commands/scope.d.ts +2 -0
  32. package/dist/cli/commands/scope.d.ts.map +1 -0
  33. package/dist/cli/commands/scope.js +113 -0
  34. package/dist/cli/commands/scope.js.map +1 -0
  35. package/dist/cli/commands/tui.js +3 -3
  36. package/dist/cli/commands/tui.js.map +1 -1
  37. package/dist/cli/help.d.ts.map +1 -1
  38. package/dist/cli/help.js +35 -2
  39. package/dist/cli/help.js.map +1 -1
  40. package/dist/cli/options.d.ts.map +1 -1
  41. package/dist/cli/options.js +17 -0
  42. package/dist/cli/options.js.map +1 -1
  43. package/dist/cli/types.d.ts +2 -0
  44. package/dist/cli/types.d.ts.map +1 -1
  45. package/docs/cli.md +28 -0
  46. package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/kyro.json +11 -0
  47. package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/scopes/demo/DEBT.summary.json +12 -0
  48. package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/scopes/demo/RE-ENTRY-PROMPTS.md +1 -0
  49. package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/scopes/demo/ROADMAP.md +4 -0
  50. package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/scopes/demo/ROADMAP.summary.json +15 -0
  51. package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/scopes/demo/index.json +15 -0
  52. package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.md +8 -0
  53. package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.summary.json +16 -0
  54. package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/scopes/demo/state.json +11 -0
  55. package/fixtures/artifact-integrity/invalid-state/.agents/kyro/kyro.json +11 -0
  56. package/fixtures/artifact-integrity/invalid-state/.agents/kyro/scopes/demo/DEBT.summary.json +12 -0
  57. package/fixtures/artifact-integrity/invalid-state/.agents/kyro/scopes/demo/RE-ENTRY-PROMPTS.md +1 -0
  58. package/fixtures/artifact-integrity/invalid-state/.agents/kyro/scopes/demo/ROADMAP.md +4 -0
  59. package/fixtures/artifact-integrity/invalid-state/.agents/kyro/scopes/demo/ROADMAP.summary.json +15 -0
  60. package/fixtures/artifact-integrity/invalid-state/.agents/kyro/scopes/demo/index.json +15 -0
  61. package/fixtures/artifact-integrity/invalid-state/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.md +8 -0
  62. package/fixtures/artifact-integrity/invalid-state/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.summary.json +16 -0
  63. package/fixtures/artifact-integrity/invalid-state/.agents/kyro/scopes/demo/state.json +10 -0
  64. package/fixtures/artifact-integrity/missing-summary/.agents/kyro/kyro.json +11 -0
  65. package/fixtures/artifact-integrity/missing-summary/.agents/kyro/scopes/demo/RE-ENTRY-PROMPTS.md +1 -0
  66. package/fixtures/artifact-integrity/missing-summary/.agents/kyro/scopes/demo/ROADMAP.md +4 -0
  67. package/fixtures/artifact-integrity/missing-summary/.agents/kyro/scopes/demo/index.json +15 -0
  68. package/fixtures/artifact-integrity/missing-summary/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.md +8 -0
  69. package/fixtures/artifact-integrity/missing-summary/.agents/kyro/scopes/demo/state.json +11 -0
  70. package/fixtures/artifact-integrity/stale-summary/.agents/kyro/kyro.json +11 -0
  71. package/fixtures/artifact-integrity/stale-summary/.agents/kyro/scopes/demo/DEBT.summary.json +12 -0
  72. package/fixtures/artifact-integrity/stale-summary/.agents/kyro/scopes/demo/RE-ENTRY-PROMPTS.md +1 -0
  73. package/fixtures/artifact-integrity/stale-summary/.agents/kyro/scopes/demo/ROADMAP.md +4 -0
  74. package/fixtures/artifact-integrity/stale-summary/.agents/kyro/scopes/demo/ROADMAP.summary.json +15 -0
  75. package/fixtures/artifact-integrity/stale-summary/.agents/kyro/scopes/demo/index.json +15 -0
  76. package/fixtures/artifact-integrity/stale-summary/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.md +8 -0
  77. package/fixtures/artifact-integrity/stale-summary/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.summary.json +16 -0
  78. package/fixtures/artifact-integrity/stale-summary/.agents/kyro/scopes/demo/state.json +11 -0
  79. package/fixtures/artifact-integrity/valid/.agents/kyro/kyro.json +11 -0
  80. package/fixtures/artifact-integrity/valid/.agents/kyro/scopes/demo/DEBT.summary.json +12 -0
  81. package/fixtures/artifact-integrity/valid/.agents/kyro/scopes/demo/RE-ENTRY-PROMPTS.md +1 -0
  82. package/fixtures/artifact-integrity/valid/.agents/kyro/scopes/demo/ROADMAP.md +4 -0
  83. package/fixtures/artifact-integrity/valid/.agents/kyro/scopes/demo/ROADMAP.summary.json +15 -0
  84. package/fixtures/artifact-integrity/valid/.agents/kyro/scopes/demo/index.json +15 -0
  85. package/fixtures/artifact-integrity/valid/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.md +8 -0
  86. package/fixtures/artifact-integrity/valid/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.summary.json +16 -0
  87. package/fixtures/artifact-integrity/valid/.agents/kyro/scopes/demo/state.json +11 -0
  88. package/package.json +6 -2
  89. 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
+ }
@@ -0,0 +1,4 @@
1
+ # Demo roadmap
2
+
3
+ ## Sprint 1
4
+ - Focus: demo
@@ -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,8 @@
1
+ # Sprint 1 Demo
2
+
3
+ - [x] T1.1 Completed task
4
+ - [ ] T1.2 Pending task
5
+
6
+ ## Debt
7
+ | ID | Item | Status | Priority |
8
+ | D1 | Demo debt | open | critical |
@@ -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,11 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "artifactRoot": ".agents/kyro/scopes",
4
+ "scopes": [
5
+ "demo"
6
+ ],
7
+ "activeScope": "demo",
8
+ "runtimeVersion": "3.2.3",
9
+ "runtimePath": "~/.agents/kyro/current",
10
+ "installedAdapters": []
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,4 @@
1
+ # Demo roadmap
2
+
3
+ ## Sprint 1
4
+ - Focus: demo
@@ -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,8 @@
1
+ # Sprint 1 Demo
2
+
3
+ - [x] T1.1 Completed task
4
+ - [ ] T1.2 Pending task
5
+
6
+ ## Debt
7
+ | ID | Item | Status | Priority |
8
+ | D1 | Demo debt | open | critical |
@@ -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.2.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');