kyro-ai 3.2.2 → 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 (110) hide show
  1. package/.claude-plugin/plugin.json +4 -2
  2. package/README.md +14 -1
  3. package/WORKFLOW.yaml +1 -1
  4. package/agents/orchestrator.md +3 -3
  5. package/commands/status.md +2 -2
  6. package/dist/cli/app.d.ts.map +1 -1
  7. package/dist/cli/app.js +9 -0
  8. package/dist/cli/app.js.map +1 -1
  9. package/dist/cli/artifacts/json.d.ts +8 -0
  10. package/dist/cli/artifacts/json.d.ts.map +1 -0
  11. package/dist/cli/artifacts/json.js +18 -0
  12. package/dist/cli/artifacts/json.js.map +1 -0
  13. package/dist/cli/artifacts/paths.d.ts +9 -0
  14. package/dist/cli/artifacts/paths.d.ts.map +1 -0
  15. package/dist/cli/artifacts/paths.js +36 -0
  16. package/dist/cli/artifacts/paths.js.map +1 -0
  17. package/dist/cli/artifacts/schema.d.ts +102 -0
  18. package/dist/cli/artifacts/schema.d.ts.map +1 -0
  19. package/dist/cli/artifacts/schema.js +157 -0
  20. package/dist/cli/artifacts/schema.js.map +1 -0
  21. package/dist/cli/commands/artifact-doctor.d.ts +8 -0
  22. package/dist/cli/commands/artifact-doctor.d.ts.map +1 -0
  23. package/dist/cli/commands/artifact-doctor.js +246 -0
  24. package/dist/cli/commands/artifact-doctor.js.map +1 -0
  25. package/dist/cli/commands/doctor.d.ts +1 -1
  26. package/dist/cli/commands/doctor.d.ts.map +1 -1
  27. package/dist/cli/commands/doctor.js +5 -2
  28. package/dist/cli/commands/doctor.js.map +1 -1
  29. package/dist/cli/commands/repair.d.ts +4 -0
  30. package/dist/cli/commands/repair.d.ts.map +1 -0
  31. package/dist/cli/commands/repair.js +271 -0
  32. package/dist/cli/commands/repair.js.map +1 -0
  33. package/dist/cli/commands/scope.d.ts +2 -0
  34. package/dist/cli/commands/scope.d.ts.map +1 -0
  35. package/dist/cli/commands/scope.js +113 -0
  36. package/dist/cli/commands/scope.js.map +1 -0
  37. package/dist/cli/commands/token-audit.d.ts.map +1 -1
  38. package/dist/cli/commands/token-audit.js +124 -2
  39. package/dist/cli/commands/token-audit.js.map +1 -1
  40. package/dist/cli/commands/tui.js +3 -3
  41. package/dist/cli/commands/tui.js.map +1 -1
  42. package/dist/cli/help.d.ts.map +1 -1
  43. package/dist/cli/help.js +35 -2
  44. package/dist/cli/help.js.map +1 -1
  45. package/dist/cli/options.d.ts.map +1 -1
  46. package/dist/cli/options.js +17 -0
  47. package/dist/cli/options.js.map +1 -1
  48. package/dist/cli/types.d.ts +2 -0
  49. package/dist/cli/types.d.ts.map +1 -1
  50. package/docs/cli.md +35 -2
  51. package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/kyro.json +11 -0
  52. package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/scopes/demo/DEBT.summary.json +12 -0
  53. package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/scopes/demo/RE-ENTRY-PROMPTS.md +1 -0
  54. package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/scopes/demo/ROADMAP.md +4 -0
  55. package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/scopes/demo/ROADMAP.summary.json +15 -0
  56. package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/scopes/demo/index.json +15 -0
  57. package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.md +8 -0
  58. package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.summary.json +16 -0
  59. package/fixtures/artifact-integrity/active-sprint-missing/.agents/kyro/scopes/demo/state.json +11 -0
  60. package/fixtures/artifact-integrity/invalid-state/.agents/kyro/kyro.json +11 -0
  61. package/fixtures/artifact-integrity/invalid-state/.agents/kyro/scopes/demo/DEBT.summary.json +12 -0
  62. package/fixtures/artifact-integrity/invalid-state/.agents/kyro/scopes/demo/RE-ENTRY-PROMPTS.md +1 -0
  63. package/fixtures/artifact-integrity/invalid-state/.agents/kyro/scopes/demo/ROADMAP.md +4 -0
  64. package/fixtures/artifact-integrity/invalid-state/.agents/kyro/scopes/demo/ROADMAP.summary.json +15 -0
  65. package/fixtures/artifact-integrity/invalid-state/.agents/kyro/scopes/demo/index.json +15 -0
  66. package/fixtures/artifact-integrity/invalid-state/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.md +8 -0
  67. package/fixtures/artifact-integrity/invalid-state/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.summary.json +16 -0
  68. package/fixtures/artifact-integrity/invalid-state/.agents/kyro/scopes/demo/state.json +10 -0
  69. package/fixtures/artifact-integrity/missing-summary/.agents/kyro/kyro.json +11 -0
  70. package/fixtures/artifact-integrity/missing-summary/.agents/kyro/scopes/demo/RE-ENTRY-PROMPTS.md +1 -0
  71. package/fixtures/artifact-integrity/missing-summary/.agents/kyro/scopes/demo/ROADMAP.md +4 -0
  72. package/fixtures/artifact-integrity/missing-summary/.agents/kyro/scopes/demo/index.json +15 -0
  73. package/fixtures/artifact-integrity/missing-summary/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.md +8 -0
  74. package/fixtures/artifact-integrity/missing-summary/.agents/kyro/scopes/demo/state.json +11 -0
  75. package/fixtures/artifact-integrity/stale-summary/.agents/kyro/kyro.json +11 -0
  76. package/fixtures/artifact-integrity/stale-summary/.agents/kyro/scopes/demo/DEBT.summary.json +12 -0
  77. package/fixtures/artifact-integrity/stale-summary/.agents/kyro/scopes/demo/RE-ENTRY-PROMPTS.md +1 -0
  78. package/fixtures/artifact-integrity/stale-summary/.agents/kyro/scopes/demo/ROADMAP.md +4 -0
  79. package/fixtures/artifact-integrity/stale-summary/.agents/kyro/scopes/demo/ROADMAP.summary.json +15 -0
  80. package/fixtures/artifact-integrity/stale-summary/.agents/kyro/scopes/demo/index.json +15 -0
  81. package/fixtures/artifact-integrity/stale-summary/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.md +8 -0
  82. package/fixtures/artifact-integrity/stale-summary/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.summary.json +16 -0
  83. package/fixtures/artifact-integrity/stale-summary/.agents/kyro/scopes/demo/state.json +11 -0
  84. package/fixtures/artifact-integrity/valid/.agents/kyro/kyro.json +11 -0
  85. package/fixtures/artifact-integrity/valid/.agents/kyro/scopes/demo/DEBT.summary.json +12 -0
  86. package/fixtures/artifact-integrity/valid/.agents/kyro/scopes/demo/RE-ENTRY-PROMPTS.md +1 -0
  87. package/fixtures/artifact-integrity/valid/.agents/kyro/scopes/demo/ROADMAP.md +4 -0
  88. package/fixtures/artifact-integrity/valid/.agents/kyro/scopes/demo/ROADMAP.summary.json +15 -0
  89. package/fixtures/artifact-integrity/valid/.agents/kyro/scopes/demo/index.json +15 -0
  90. package/fixtures/artifact-integrity/valid/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.md +8 -0
  91. package/fixtures/artifact-integrity/valid/.agents/kyro/scopes/demo/phases/SPRINT-001-demo.summary.json +16 -0
  92. package/fixtures/artifact-integrity/valid/.agents/kyro/scopes/demo/state.json +11 -0
  93. package/package.json +6 -2
  94. package/scripts/check-artifact-fixtures.mjs +56 -0
  95. package/skills/sprint-forge/SKILL.md +2 -2
  96. package/skills/sprint-forge/assets/README.md +15 -4
  97. package/skills/sprint-forge/assets/fixtures/subcommands-and-reports.sizingDecision.json +17 -0
  98. package/skills/sprint-forge/assets/helpers/analysis/audit.md +18 -0
  99. package/skills/sprint-forge/assets/helpers/analysis/bugfix.md +19 -0
  100. package/skills/sprint-forge/assets/helpers/analysis/feature.md +28 -0
  101. package/skills/sprint-forge/assets/helpers/analysis/new-project.md +18 -0
  102. package/skills/sprint-forge/assets/helpers/analysis/refactor.md +18 -0
  103. package/skills/sprint-forge/assets/helpers/analysis/tech-debt.md +18 -0
  104. package/skills/sprint-forge/assets/modes/INIT.md +33 -64
  105. package/skills/sprint-forge/assets/templates/PROJECT-README.md +16 -60
  106. package/skills/sprint-forge/assets/templates/REENTRY-PROMPTS.md +18 -87
  107. package/skills/sprint-forge/assets/templates/ROADMAP.md +16 -65
  108. package/skills/sprint-forge/assets/templates/ROADMAP.summary.json +9 -0
  109. package/skills/sprint-forge/assets/templates/index.json +9 -0
  110. package/skills/sprint-forge/assets/helpers/analysis-guide.md +0 -207
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kyro-ai",
3
- "version": "3.2.2",
3
+ "version": "3.3.0",
4
4
  "description": "Claude Code adapter for Kyro, a portable sprint workflow kit for AI coding agents",
5
5
  "author": {
6
6
  "name": "SynapSync",
@@ -36,5 +36,7 @@
36
36
  "agents": [
37
37
  "./agents/orchestrator.md"
38
38
  ],
39
- "commands": ["./commands/"]
39
+ "commands": [
40
+ "./commands/"
41
+ ]
40
42
  }
package/README.md CHANGED
@@ -166,7 +166,7 @@ Common usage:
166
166
 
167
167
  ```bash
168
168
  kyro install --agent opencode,codex --scope workspace --yes
169
- kyro doctor
169
+ kyro doctor --tokens --artifacts
170
170
  kyro sync --agent codex --dry-run
171
171
  kyro uninstall --dry-run
172
172
  ```
@@ -184,6 +184,19 @@ There is intentionally no `generic` adapter. Cross-agent instructions belong in
184
184
 
185
185
  ---
186
186
 
187
+
188
+ ## Artifact Integrity
189
+
190
+ Kyro treats the repo as the system of record. Validate and repair the knowledge contract with:
191
+
192
+ ```bash
193
+ kyro doctor --artifacts
194
+ kyro repair --kyro-scope <scope> --yes
195
+ kyro scope inspect <scope>
196
+ ```
197
+
198
+ `repair` only rebuilds JSON routing/summaries from existing Markdown evidence; it does not rewrite user-authored Markdown.
199
+
187
200
  ## Core Workflow
188
201
 
189
202
  Kyro has three stable workflow intents:
package/WORKFLOW.yaml CHANGED
@@ -1,6 +1,6 @@
1
1
  name: kyro-ai
2
2
  type: workflow
3
- version: "3.2.2"
3
+ version: "3.3.0"
4
4
  description: >
5
5
  Portable sprint workflow kit for AI coding agents, with markdown artifacts,
6
6
  adapter guides, adaptive per-project learning, and formal validation gates.
@@ -98,15 +98,15 @@ The `skills` declaration in frontmatter is metadata only — it does NOT auto-in
98
98
 
99
99
  1. Read `skills/sprint-forge/SKILL.md` — sprint-forge orchestration logic, critical rules, mode detection, capabilities matrix
100
100
  2. Load mode-gated assets based on the current phase:
101
- - **INIT phase**: Read `skills/sprint-forge/assets/modes/INIT.md`, `skills/sprint-forge/assets/helpers/analysis-guide.md`, `skills/sprint-forge/assets/helpers/reentry-generator.md`
101
+ - **INIT phase**: Read `skills/sprint-forge/assets/modes/INIT.md`, then exactly one routed `skills/sprint-forge/assets/helpers/analysis/{workType}.md` helper
102
102
  - **SPRINT phase**: Read `skills/sprint-forge/assets/modes/SPRINT.md`, `skills/sprint-forge/assets/helpers/sprint-generator.md`, `skills/sprint-forge/assets/helpers/debt-tracker.md`, `skills/sprint-forge/assets/helpers/reentry-generator.md`
103
103
  - **STATUS phase**: Read `skills/sprint-forge/assets/modes/STATUS.md`, `skills/sprint-forge/assets/helpers/debt-tracker.md`
104
104
  3. Load templates **on-demand** as each workflow step references them (not upfront)
105
105
 
106
106
  **Helpers** (loaded on-demand per phase):
107
107
 
108
- 1. Read `skills/sprint-forge/assets/helpers/analyzer.md` — work type detection, analysis strategies, finding output format (INIT phase)
109
- 2. Read `skills/sprint-forge/assets/helpers/analysis-guide.md` — detailed exploration strategies (INIT phase)
108
+ 1. Read `skills/sprint-forge/assets/helpers/analyzer.md` — work type detection when INIT cannot classify the request cheaply
109
+ 2. Read one `skills/sprint-forge/assets/helpers/analysis/{workType}.md` helper work-type analysis and sizing signals (INIT phase)
110
110
  3. Read `skills/sprint-forge/assets/helpers/reviewer.md` — checklist tiers, validation commands, output format (SPRINT phase)
111
111
 
112
112
  **All skill paths are relative to the workflow root (the plugin installation directory).**
@@ -12,13 +12,13 @@ Report Kyro progress without loading all sprint Markdown by default.
12
12
  1. Read `.agents/kyro/kyro.json`.
13
13
  2. Resolve scope from `$ARGUMENTS`, `activeScope`, or `.agents/kyro/scopes/`.
14
14
  3. Read `.agents/kyro/scopes/{scope}/state.json` and `index.json` first.
15
- 4. Prefer `ROADMAP.summary.json`, `SPRINT-*.summary.json`, and `DEBT.summary.json` when present.
15
+ 4. Prefer `ROADMAP.summary.json`, `SPRINT-*.summary.json`, and `DEBT.summary.json` when present. Use `sizingDecision` from summaries to explain sprint count without opening roadmap Markdown.
16
16
 
17
17
  ## Route
18
18
 
19
19
  | Request | Load next |
20
20
  |---------|-----------|
21
- | `brief` or empty | Summaries only; open Markdown only for missing critical fields. |
21
+ | `brief` or empty | Summaries only; include sprint count rationale from `sizingDecision`; open Markdown only for missing critical fields. |
22
22
  | `full` | `skills/sprint-forge/assets/modes/STATUS.md`, then summaries, then Markdown fallbacks. |
23
23
  | `debt` | `skills/sprint-forge/assets/helpers/debt-tracker.md` plus debt summary/table. |
24
24
  | `debt-add`, `debt-resolve`, `debt-escalate` | `debt-tracker.md`, then update Markdown and summaries. |
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/cli/app.ts"],"names":[],"mappings":"AAOA,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAyC5C"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/cli/app.ts"],"names":[],"mappings":"AASA,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAiD5C"}
package/dist/cli/app.js CHANGED
@@ -4,6 +4,8 @@ exports.runCli = runCli;
4
4
  const doctor_1 = require("./commands/doctor");
5
5
  const install_1 = require("./commands/install");
6
6
  const tui_1 = require("./commands/tui");
7
+ const repair_1 = require("./commands/repair");
8
+ const scope_1 = require("./commands/scope");
7
9
  const uninstall_1 = require("./commands/uninstall");
8
10
  const help_1 = require("./help");
9
11
  const options_1 = require("./options");
@@ -21,6 +23,10 @@ async function runCli() {
21
23
  console.log((0, help_1.readPackageVersion)());
22
24
  return;
23
25
  }
26
+ if (command === 'scope') {
27
+ (0, scope_1.runScopeCommand)(args);
28
+ return;
29
+ }
24
30
  const options = (0, options_1.parseOptions)(args);
25
31
  if (options.help) {
26
32
  (0, help_1.printCommandHelp)(command);
@@ -33,6 +39,9 @@ async function runCli() {
33
39
  case 'doctor':
34
40
  (0, doctor_1.doctor)(options);
35
41
  break;
42
+ case 'repair':
43
+ await (0, repair_1.repair)(options);
44
+ break;
36
45
  case 'sync':
37
46
  (0, install_1.sync)(options);
38
47
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/cli/app.ts"],"names":[],"mappings":";;AAOA,wBAyCC;AAhDD,8CAA2C;AAC3C,gDAAmD;AACnD,wCAAwC;AACxC,oDAAiD;AACjD,iCAAyE;AACzE,uCAAyC;AAElC,KAAK,UAAU,MAAM;IAC1B,MAAM,CAAC,OAAO,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEtD,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACxC,MAAM,IAAA,YAAM,GAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACnE,IAAA,gBAAS,GAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,IAAA,yBAAkB,GAAE,CAAC,CAAC;QAClC,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,sBAAY,EAAC,IAAI,CAAC,CAAC;IAEnC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,IAAA,uBAAgB,EAAC,OAAO,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,SAAS;YACZ,IAAA,iBAAO,EAAC,OAAO,CAAC,CAAC;YACjB,MAAM;QACR,KAAK,QAAQ;YACX,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC;YAChB,MAAM;QACR,KAAK,MAAM;YACT,IAAA,cAAI,EAAC,OAAO,CAAC,CAAC;YACd,MAAM;QACR,KAAK,WAAW;YACd,IAAA,qBAAS,EAAC,OAAO,CAAC,CAAC;YACnB,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,oBAAoB,CAAC,CAAC;IACrE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/cli/app.ts"],"names":[],"mappings":";;AASA,wBAiDC;AA1DD,8CAA2C;AAC3C,gDAAmD;AACnD,wCAAwC;AACxC,8CAA2C;AAC3C,4CAAmD;AACnD,oDAAiD;AACjD,iCAAyE;AACzE,uCAAyC;AAElC,KAAK,UAAU,MAAM;IAC1B,MAAM,CAAC,OAAO,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEtD,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACxC,MAAM,IAAA,YAAM,GAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACnE,IAAA,gBAAS,GAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,IAAA,yBAAkB,GAAE,CAAC,CAAC;QAClC,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,IAAA,uBAAe,EAAC,IAAI,CAAC,CAAC;QACtB,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,sBAAY,EAAC,IAAI,CAAC,CAAC;IAEnC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,IAAA,uBAAgB,EAAC,OAAO,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,SAAS;YACZ,IAAA,iBAAO,EAAC,OAAO,CAAC,CAAC;YACjB,MAAM;QACR,KAAK,QAAQ;YACX,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC;YAChB,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC;YACtB,MAAM;QACR,KAAK,MAAM;YACT,IAAA,cAAI,EAAC,OAAO,CAAC,CAAC;YACd,MAAM;QACR,KAAK,WAAW;YACd,IAAA,qBAAS,EAAC,OAAO,CAAC,CAAC;YACnB,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,oBAAoB,CAAC,CAAC;IACrE,CAAC;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface JsonReadResult {
2
+ path: string;
3
+ exists: boolean;
4
+ value: unknown | null;
5
+ error: string | null;
6
+ }
7
+ export declare function readJsonSafely(path: string): JsonReadResult;
8
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../../src/cli/artifacts/json.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAU3D"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readJsonSafely = readJsonSafely;
4
+ const node_fs_1 = require("node:fs");
5
+ const fs_1 = require("../fs");
6
+ function readJsonSafely(path) {
7
+ const absolutePath = (0, fs_1.resolveManagedPath)(path);
8
+ if (!(0, node_fs_1.existsSync)(absolutePath)) {
9
+ return { path, exists: false, value: null, error: null };
10
+ }
11
+ try {
12
+ return { path, exists: true, value: JSON.parse((0, node_fs_1.readFileSync)(absolutePath, 'utf-8')), error: null };
13
+ }
14
+ catch (error) {
15
+ return { path, exists: true, value: null, error: error instanceof Error ? error.message : String(error) };
16
+ }
17
+ }
18
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../../src/cli/artifacts/json.ts"],"names":[],"mappings":";;AAUA,wCAUC;AApBD,qCAAmD;AACnD,8BAA2C;AAS3C,SAAgB,cAAc,CAAC,IAAY;IACzC,MAAM,YAAY,GAAG,IAAA,uBAAkB,EAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAA,oBAAU,EAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,YAAY,EAAE,OAAO,CAAC,CAAY,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAChH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAC5G,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare function scopeRoot(scope: string): string;
2
+ export declare function scopeStatePath(scope: string): string;
3
+ export declare function scopeIndexPath(scope: string): string;
4
+ export declare function roadmapPath(scope: string): string;
5
+ export declare function roadmapSummaryPath(scope: string): string;
6
+ export declare function debtSummaryPath(scope: string): string;
7
+ export declare function phasesPath(scope: string): string;
8
+ export declare function projectStatePath(): string;
9
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../src/cli/artifacts/paths.ts"],"names":[],"mappings":"AAEA,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scopeRoot = scopeRoot;
4
+ exports.scopeStatePath = scopeStatePath;
5
+ exports.scopeIndexPath = scopeIndexPath;
6
+ exports.roadmapPath = roadmapPath;
7
+ exports.roadmapSummaryPath = roadmapSummaryPath;
8
+ exports.debtSummaryPath = debtSummaryPath;
9
+ exports.phasesPath = phasesPath;
10
+ exports.projectStatePath = projectStatePath;
11
+ const constants_1 = require("../constants");
12
+ function scopeRoot(scope) {
13
+ return `${constants_1.ARTIFACT_ROOT}/${scope}`;
14
+ }
15
+ function scopeStatePath(scope) {
16
+ return `${scopeRoot(scope)}/state.json`;
17
+ }
18
+ function scopeIndexPath(scope) {
19
+ return `${scopeRoot(scope)}/index.json`;
20
+ }
21
+ function roadmapPath(scope) {
22
+ return `${scopeRoot(scope)}/ROADMAP.md`;
23
+ }
24
+ function roadmapSummaryPath(scope) {
25
+ return `${scopeRoot(scope)}/ROADMAP.summary.json`;
26
+ }
27
+ function debtSummaryPath(scope) {
28
+ return `${scopeRoot(scope)}/DEBT.summary.json`;
29
+ }
30
+ function phasesPath(scope) {
31
+ return `${scopeRoot(scope)}/phases`;
32
+ }
33
+ function projectStatePath() {
34
+ return constants_1.KYRO_STATE_PATH;
35
+ }
36
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/cli/artifacts/paths.ts"],"names":[],"mappings":";;AAEA,8BAEC;AAED,wCAEC;AAED,wCAEC;AAED,kCAEC;AAED,gDAEC;AAED,0CAEC;AAED,gCAEC;AAED,4CAEC;AAhCD,4CAA8D;AAE9D,SAAgB,SAAS,CAAC,KAAa;IACrC,OAAO,GAAG,yBAAa,IAAI,KAAK,EAAE,CAAC;AACrC,CAAC;AAED,SAAgB,cAAc,CAAC,KAAa;IAC1C,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC;AAC1C,CAAC;AAED,SAAgB,cAAc,CAAC,KAAa;IAC1C,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC;AAC1C,CAAC;AAED,SAAgB,WAAW,CAAC,KAAa;IACvC,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC;AAC1C,CAAC;AAED,SAAgB,kBAAkB,CAAC,KAAa;IAC9C,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,uBAAuB,CAAC;AACpD,CAAC;AAED,SAAgB,eAAe,CAAC,KAAa;IAC3C,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,oBAAoB,CAAC;AACjD,CAAC;AAED,SAAgB,UAAU,CAAC,KAAa;IACtC,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;AACtC,CAAC;AAED,SAAgB,gBAAgB;IAC9B,OAAO,2BAAe,CAAC;AACzB,CAAC"}
@@ -0,0 +1,102 @@
1
+ import type { KyroProjectState } from '../types';
2
+ export declare const KYRO_SCOPE_STATUS: {
3
+ readonly PLANNING: "planning";
4
+ readonly ACTIVE: "active";
5
+ readonly COMPLETED: "completed";
6
+ readonly BLOCKED: "blocked";
7
+ };
8
+ export type KyroScopeStatus = (typeof KYRO_SCOPE_STATUS)[keyof typeof KYRO_SCOPE_STATUS];
9
+ export interface ValidationIssue {
10
+ path: string;
11
+ field: string;
12
+ message: string;
13
+ }
14
+ export interface KyroScopeState {
15
+ schemaVersion: 1;
16
+ scope: string;
17
+ status: string;
18
+ activeSprint: string | null;
19
+ currentPhase: string;
20
+ nextAction: string;
21
+ roadmapPath: string;
22
+ sprintsPath: string;
23
+ lastUpdated: string;
24
+ }
25
+ export interface SizingDecisionSummary {
26
+ recommendedSprintCount: number;
27
+ riskLevel: string;
28
+ rationale: string;
29
+ splitTriggers: string[];
30
+ whyNotFewer: string;
31
+ whyNotMore: string;
32
+ sprintProofs: string[];
33
+ }
34
+ export interface RelevantArtifactPaths {
35
+ roadmap: string;
36
+ roadmapSummary: string;
37
+ sprints: string;
38
+ reentry: string;
39
+ }
40
+ export interface KyroScopeIndex {
41
+ schemaVersion: 1;
42
+ scope: string;
43
+ roadmapSummary: string;
44
+ activeSprintSummary: string | null;
45
+ openDebtCount: number;
46
+ nextTask: string | null;
47
+ sizingDecision?: SizingDecisionSummary;
48
+ relevantArtifactPaths: RelevantArtifactPaths;
49
+ lastUpdated: string;
50
+ }
51
+ export interface RoadmapSummary {
52
+ schemaVersion: 1;
53
+ scope: string;
54
+ status: string;
55
+ summary: string;
56
+ plannedSprintCount: number;
57
+ completedSprintCount: number;
58
+ adaptationCount: number;
59
+ sizingDecision?: SizingDecisionSummary;
60
+ nextRecommendedAction: string;
61
+ openDecisions: string[];
62
+ relevantArtifactPaths: string[];
63
+ lastUpdated: string;
64
+ }
65
+ export interface SprintSummary {
66
+ schemaVersion: 1;
67
+ scope: string;
68
+ sprint: string;
69
+ status: string;
70
+ completedTasks: number;
71
+ blockedTasks: number;
72
+ carryOverTasks: number;
73
+ nextRecommendedAction: string;
74
+ nextTask: string | null;
75
+ openDecisions: string[];
76
+ filesTouched: string[];
77
+ debtDeltas: unknown[];
78
+ sourceMarkdown: string;
79
+ lastUpdated: string;
80
+ }
81
+ export interface DebtSummary {
82
+ schemaVersion: 1;
83
+ scope: string;
84
+ open: number;
85
+ inProgress: number;
86
+ resolved: number;
87
+ deferred: number;
88
+ critical: number;
89
+ oldestOpenItem: string | null;
90
+ sourceMarkdown: string | null;
91
+ lastUpdated: string;
92
+ }
93
+ export declare function validateProjectStateShape(value: unknown, path: string): ValidationIssue[];
94
+ export declare function validateScopeState(value: unknown, path: string): ValidationIssue[];
95
+ export declare function validateScopeIndex(value: unknown, path: string): ValidationIssue[];
96
+ export declare function validateRoadmapSummary(value: unknown, path: string): ValidationIssue[];
97
+ export declare function validateSprintSummary(value: unknown, path: string): ValidationIssue[];
98
+ export declare function validateDebtSummary(value: unknown, path: string): ValidationIssue[];
99
+ export declare function asProjectState(value: unknown): KyroProjectState | null;
100
+ export declare function asScopeState(value: unknown): KyroScopeState | null;
101
+ export declare function asScopeIndex(value: unknown): KyroScopeIndex | null;
102
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/cli/artifacts/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,eAAO,MAAM,iBAAiB;;;;;CAKpB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAC;AAEzF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,CAAC,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,CAAC,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,CAAC,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,CAAC,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,OAAO,EAAE,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,CAAC,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAWzF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAalF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAmBlF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAetF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAkBrF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAcnF;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAEtE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CAElE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CAElE"}
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KYRO_SCOPE_STATUS = void 0;
4
+ exports.validateProjectStateShape = validateProjectStateShape;
5
+ exports.validateScopeState = validateScopeState;
6
+ exports.validateScopeIndex = validateScopeIndex;
7
+ exports.validateRoadmapSummary = validateRoadmapSummary;
8
+ exports.validateSprintSummary = validateSprintSummary;
9
+ exports.validateDebtSummary = validateDebtSummary;
10
+ exports.asProjectState = asProjectState;
11
+ exports.asScopeState = asScopeState;
12
+ exports.asScopeIndex = asScopeIndex;
13
+ exports.KYRO_SCOPE_STATUS = {
14
+ PLANNING: 'planning',
15
+ ACTIVE: 'active',
16
+ COMPLETED: 'completed',
17
+ BLOCKED: 'blocked',
18
+ };
19
+ function validateProjectStateShape(value, path) {
20
+ const issues = [];
21
+ if (!isRecord(value))
22
+ return [{ path, field: '<root>', message: 'must be an object' }];
23
+ requireLiteral(value, 'schemaVersion', 1, path, issues);
24
+ requireString(value, 'artifactRoot', path, issues);
25
+ requireStringArray(value, 'scopes', path, issues);
26
+ requireNullableString(value, 'activeScope', path, issues);
27
+ requireString(value, 'runtimeVersion', path, issues);
28
+ requireString(value, 'runtimePath', path, issues);
29
+ if (!Array.isArray(value.installedAdapters))
30
+ issues.push({ path, field: 'installedAdapters', message: 'must be an array' });
31
+ return issues;
32
+ }
33
+ function validateScopeState(value, path) {
34
+ const issues = [];
35
+ if (!isRecord(value))
36
+ return [{ path, field: '<root>', message: 'must be an object' }];
37
+ requireLiteral(value, 'schemaVersion', 1, path, issues);
38
+ requireString(value, 'scope', path, issues);
39
+ requireString(value, 'status', path, issues);
40
+ requireNullableString(value, 'activeSprint', path, issues);
41
+ requireString(value, 'currentPhase', path, issues);
42
+ requireString(value, 'nextAction', path, issues);
43
+ requireString(value, 'roadmapPath', path, issues);
44
+ requireString(value, 'sprintsPath', path, issues);
45
+ requireString(value, 'lastUpdated', path, issues);
46
+ return issues;
47
+ }
48
+ function validateScopeIndex(value, path) {
49
+ const issues = [];
50
+ if (!isRecord(value))
51
+ return [{ path, field: '<root>', message: 'must be an object' }];
52
+ requireLiteral(value, 'schemaVersion', 1, path, issues);
53
+ requireString(value, 'scope', path, issues);
54
+ requireString(value, 'roadmapSummary', path, issues);
55
+ requireNullableString(value, 'activeSprintSummary', path, issues);
56
+ requireNumber(value, 'openDebtCount', path, issues);
57
+ requireNullableString(value, 'nextTask', path, issues);
58
+ if (!isRecord(value.relevantArtifactPaths)) {
59
+ issues.push({ path, field: 'relevantArtifactPaths', message: 'must be an object' });
60
+ }
61
+ else {
62
+ requireString(value.relevantArtifactPaths, 'roadmap', path, issues, 'relevantArtifactPaths.roadmap');
63
+ requireString(value.relevantArtifactPaths, 'roadmapSummary', path, issues, 'relevantArtifactPaths.roadmapSummary');
64
+ requireString(value.relevantArtifactPaths, 'sprints', path, issues, 'relevantArtifactPaths.sprints');
65
+ requireString(value.relevantArtifactPaths, 'reentry', path, issues, 'relevantArtifactPaths.reentry');
66
+ }
67
+ requireString(value, 'lastUpdated', path, issues);
68
+ return issues;
69
+ }
70
+ function validateRoadmapSummary(value, path) {
71
+ const issues = [];
72
+ if (!isRecord(value))
73
+ return [{ path, field: '<root>', message: 'must be an object' }];
74
+ requireLiteral(value, 'schemaVersion', 1, path, issues);
75
+ requireString(value, 'scope', path, issues);
76
+ requireString(value, 'status', path, issues);
77
+ requireString(value, 'summary', path, issues);
78
+ requireNumber(value, 'plannedSprintCount', path, issues);
79
+ requireNumber(value, 'completedSprintCount', path, issues);
80
+ requireNumber(value, 'adaptationCount', path, issues);
81
+ requireString(value, 'nextRecommendedAction', path, issues);
82
+ requireStringArray(value, 'openDecisions', path, issues);
83
+ requireStringArray(value, 'relevantArtifactPaths', path, issues);
84
+ requireString(value, 'lastUpdated', path, issues);
85
+ return issues;
86
+ }
87
+ function validateSprintSummary(value, path) {
88
+ const issues = [];
89
+ if (!isRecord(value))
90
+ return [{ path, field: '<root>', message: 'must be an object' }];
91
+ requireLiteral(value, 'schemaVersion', 1, path, issues);
92
+ requireString(value, 'scope', path, issues);
93
+ requireString(value, 'sprint', path, issues);
94
+ requireString(value, 'status', path, issues);
95
+ requireNumber(value, 'completedTasks', path, issues);
96
+ requireNumber(value, 'blockedTasks', path, issues);
97
+ requireNumber(value, 'carryOverTasks', path, issues);
98
+ requireString(value, 'nextRecommendedAction', path, issues);
99
+ requireNullableString(value, 'nextTask', path, issues);
100
+ requireStringArray(value, 'openDecisions', path, issues);
101
+ requireStringArray(value, 'filesTouched', path, issues);
102
+ if (!Array.isArray(value.debtDeltas))
103
+ issues.push({ path, field: 'debtDeltas', message: 'must be an array' });
104
+ requireString(value, 'sourceMarkdown', path, issues);
105
+ requireString(value, 'lastUpdated', path, issues);
106
+ return issues;
107
+ }
108
+ function validateDebtSummary(value, path) {
109
+ const issues = [];
110
+ if (!isRecord(value))
111
+ return [{ path, field: '<root>', message: 'must be an object' }];
112
+ requireLiteral(value, 'schemaVersion', 1, path, issues);
113
+ requireString(value, 'scope', path, issues);
114
+ requireNumber(value, 'open', path, issues);
115
+ requireNumber(value, 'inProgress', path, issues);
116
+ requireNumber(value, 'resolved', path, issues);
117
+ requireNumber(value, 'deferred', path, issues);
118
+ requireNumber(value, 'critical', path, issues);
119
+ requireNullableString(value, 'oldestOpenItem', path, issues);
120
+ requireNullableString(value, 'sourceMarkdown', path, issues);
121
+ requireString(value, 'lastUpdated', path, issues);
122
+ return issues;
123
+ }
124
+ function asProjectState(value) {
125
+ return validateProjectStateShape(value, '.agents/kyro/kyro.json').length === 0 ? value : null;
126
+ }
127
+ function asScopeState(value) {
128
+ return validateScopeState(value, 'state.json').length === 0 ? value : null;
129
+ }
130
+ function asScopeIndex(value) {
131
+ return validateScopeIndex(value, 'index.json').length === 0 ? value : null;
132
+ }
133
+ function requireLiteral(record, key, expected, path, issues) {
134
+ if (record[key] !== expected)
135
+ issues.push({ path, field: key, message: `must be ${String(expected)}` });
136
+ }
137
+ function requireString(record, key, path, issues, field = key) {
138
+ if (typeof record[key] !== 'string')
139
+ issues.push({ path, field, message: 'must be a string' });
140
+ }
141
+ function requireNullableString(record, key, path, issues) {
142
+ if (record[key] !== null && typeof record[key] !== 'string')
143
+ issues.push({ path, field: key, message: 'must be a string or null' });
144
+ }
145
+ function requireNumber(record, key, path, issues) {
146
+ if (typeof record[key] !== 'number' || Number.isNaN(record[key]))
147
+ issues.push({ path, field: key, message: 'must be a number' });
148
+ }
149
+ function requireStringArray(record, key, path, issues) {
150
+ if (!Array.isArray(record[key]) || !record[key].every((item) => typeof item === 'string')) {
151
+ issues.push({ path, field: key, message: 'must be an array of strings' });
152
+ }
153
+ }
154
+ function isRecord(value) {
155
+ return typeof value === 'object' && value !== null;
156
+ }
157
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/cli/artifacts/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { CheckResult } from '../types';
2
+ export interface ArtifactAuditOptions {
3
+ kyroScope: string | null;
4
+ }
5
+ export declare function runArtifactAuditChecks(options: ArtifactAuditOptions): CheckResult[];
6
+ export declare function inspectScope(scope: string): CheckResult[];
7
+ export declare function listScopeNames(): string[];
8
+ //# sourceMappingURL=artifact-doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact-doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/artifact-doctor.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAQD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,oBAAoB,GAAG,WAAW,EAAE,CA6BnF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAEzD;AAED,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAUzC"}