@manehorizons/cadence-core 1.6.1 → 1.8.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 (103) hide show
  1. package/dist/cli/commands/build.d.ts.map +1 -1
  2. package/dist/cli/commands/build.js +10 -77
  3. package/dist/cli/commands/build.js.map +1 -1
  4. package/dist/cli/commands/doctor.d.ts +3 -0
  5. package/dist/cli/commands/doctor.d.ts.map +1 -0
  6. package/dist/cli/commands/doctor.js +44 -0
  7. package/dist/cli/commands/doctor.js.map +1 -0
  8. package/dist/cli/commands/draft-new.d.ts.map +1 -1
  9. package/dist/cli/commands/draft-new.js +11 -97
  10. package/dist/cli/commands/draft-new.js.map +1 -1
  11. package/dist/cli/commands/draft.d.ts.map +1 -1
  12. package/dist/cli/commands/draft.js +15 -104
  13. package/dist/cli/commands/draft.js.map +1 -1
  14. package/dist/cli/commands/mcp.d.ts +3 -0
  15. package/dist/cli/commands/mcp.d.ts.map +1 -0
  16. package/dist/cli/commands/mcp.js +35 -0
  17. package/dist/cli/commands/mcp.js.map +1 -0
  18. package/dist/cli/commands/progress.d.ts.map +1 -1
  19. package/dist/cli/commands/progress.js +5 -13
  20. package/dist/cli/commands/progress.js.map +1 -1
  21. package/dist/cli/commands/recommend.d.ts.map +1 -1
  22. package/dist/cli/commands/recommend.js +5 -15
  23. package/dist/cli/commands/recommend.js.map +1 -1
  24. package/dist/cli/commands/recommendation.d.ts.map +1 -1
  25. package/dist/cli/commands/recommendation.js +52 -1
  26. package/dist/cli/commands/recommendation.js.map +1 -1
  27. package/dist/cli/commands/settle.d.ts.map +1 -1
  28. package/dist/cli/commands/settle.js +5 -442
  29. package/dist/cli/commands/settle.js.map +1 -1
  30. package/dist/cli/commands/spec.d.ts.map +1 -1
  31. package/dist/cli/commands/spec.js +19 -197
  32. package/dist/cli/commands/spec.js.map +1 -1
  33. package/dist/cli/commands/status.d.ts.map +1 -1
  34. package/dist/cli/commands/status.js +5 -14
  35. package/dist/cli/commands/status.js.map +1 -1
  36. package/dist/cli/register.d.ts.map +1 -1
  37. package/dist/cli/register.js +4 -0
  38. package/dist/cli/register.js.map +1 -1
  39. package/dist/doctor/model.d.ts +27 -0
  40. package/dist/doctor/model.d.ts.map +1 -0
  41. package/dist/doctor/model.js +10 -0
  42. package/dist/doctor/model.js.map +1 -0
  43. package/dist/doctor/run.d.ts +3 -0
  44. package/dist/doctor/run.d.ts.map +1 -0
  45. package/dist/doctor/run.js +141 -0
  46. package/dist/doctor/run.js.map +1 -0
  47. package/dist/intelligence/store/recommendations.d.ts +7 -1
  48. package/dist/intelligence/store/recommendations.d.ts.map +1 -1
  49. package/dist/intelligence/store/recommendations.js +53 -0
  50. package/dist/intelligence/store/recommendations.js.map +1 -1
  51. package/dist/mcp/server.d.ts +12 -0
  52. package/dist/mcp/server.d.ts.map +1 -0
  53. package/dist/mcp/server.js +42 -0
  54. package/dist/mcp/server.js.map +1 -0
  55. package/dist/mcp/tools.d.ts +20 -0
  56. package/dist/mcp/tools.d.ts.map +1 -0
  57. package/dist/mcp/tools.js +189 -0
  58. package/dist/mcp/tools.js.map +1 -0
  59. package/dist/services/build-task.d.ts +12 -0
  60. package/dist/services/build-task.d.ts.map +1 -0
  61. package/dist/services/build-task.js +78 -0
  62. package/dist/services/build-task.js.map +1 -0
  63. package/dist/services/draft-approve.d.ts +14 -0
  64. package/dist/services/draft-approve.d.ts.map +1 -0
  65. package/dist/services/draft-approve.js +74 -0
  66. package/dist/services/draft-approve.js.map +1 -0
  67. package/dist/services/draft-check.d.ts +10 -0
  68. package/dist/services/draft-check.d.ts.map +1 -0
  69. package/dist/services/draft-check.js +47 -0
  70. package/dist/services/draft-check.js.map +1 -0
  71. package/dist/services/draft-new.d.ts +14 -0
  72. package/dist/services/draft-new.d.ts.map +1 -0
  73. package/dist/services/draft-new.js +98 -0
  74. package/dist/services/draft-new.js.map +1 -0
  75. package/dist/services/io.d.ts +39 -0
  76. package/dist/services/io.d.ts.map +1 -0
  77. package/dist/services/io.js +36 -0
  78. package/dist/services/io.js.map +1 -0
  79. package/dist/services/progress.d.ts +7 -0
  80. package/dist/services/progress.d.ts.map +1 -0
  81. package/dist/services/progress.js +21 -0
  82. package/dist/services/progress.js.map +1 -0
  83. package/dist/services/recommend.d.ts +9 -0
  84. package/dist/services/recommend.d.ts.map +1 -0
  85. package/dist/services/recommend.js +23 -0
  86. package/dist/services/recommend.js.map +1 -0
  87. package/dist/services/settle.d.ts +24 -0
  88. package/dist/services/settle.d.ts.map +1 -0
  89. package/dist/services/settle.js +366 -0
  90. package/dist/services/settle.js.map +1 -0
  91. package/dist/services/spec-approve.d.ts +11 -0
  92. package/dist/services/spec-approve.d.ts.map +1 -0
  93. package/dist/services/spec-approve.js +133 -0
  94. package/dist/services/spec-approve.js.map +1 -0
  95. package/dist/services/spec-new.d.ts +9 -0
  96. package/dist/services/spec-new.d.ts.map +1 -0
  97. package/dist/services/spec-new.js +62 -0
  98. package/dist/services/spec-new.js.map +1 -0
  99. package/dist/services/status.d.ts +9 -0
  100. package/dist/services/status.d.ts.map +1 -0
  101. package/dist/services/status.js +22 -0
  102. package/dist/services/status.js.map +1 -0
  103. package/package.json +3 -2
@@ -0,0 +1,78 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { existsSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { TaskStatusZ } from '@manehorizons/cadence-types';
5
+ import { recordTaskOutcome, } from '../build/record.js';
6
+ import { LoopViolationError } from '../errors.js';
7
+ import { emitLoopViolation } from '../notify/loop-violation.js';
8
+ import { loadConfig } from '../config/loader.js';
9
+ import { effectiveGateSet } from '../gates/engine.js';
10
+ import { parseDraftMd } from '../parse/draft-parser.js';
11
+ import { SimpleStateBackend } from '../state/simple.js';
12
+ import { runPerTaskVerifyGate } from '../gates/per-task-verify.js';
13
+ import { buildBuildContext } from '../gates/build-context.js';
14
+ /**
15
+ * `cadence build task <id>` — record a task outcome (runs the per-task verifier
16
+ * gate on DONE). Faithful extraction of the former CLI action body.
17
+ */
18
+ export async function buildTaskService(repoRoot, args, io) {
19
+ const statusRaw = args.status ?? 'DONE';
20
+ const notes = args.notes ?? '';
21
+ try {
22
+ const statusParse = TaskStatusZ.safeParse(statusRaw);
23
+ if (!statusParse.success ||
24
+ statusParse.data === 'PENDING' ||
25
+ statusParse.data === 'IN_PROGRESS') {
26
+ io.err(`Invalid task status: ${statusRaw}. Allowed: DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED\n`);
27
+ return { exitCode: 2 };
28
+ }
29
+ const status = statusParse.data;
30
+ const backend = new SimpleStateBackend(repoRoot);
31
+ const state = await backend.readState();
32
+ let draft;
33
+ if (state.activePhase && state.activeDraft) {
34
+ const draftPath = join(repoRoot, '.cadence', 'phases', state.activePhase, `${state.activeDraft}-DRAFT.md`);
35
+ if (existsSync(draftPath)) {
36
+ draft = parseDraftMd(await readFile(draftPath, 'utf8'));
37
+ const validIds = draft.tasks.map((t) => t.id);
38
+ if (!validIds.includes(args.taskId)) {
39
+ io.err(`build task: unknown task id "${args.taskId}". ` +
40
+ `Valid ids in ${state.activeDraft}-DRAFT.md: ${validIds.join(', ') || '(none)'}. ` +
41
+ `Nothing recorded.\n`);
42
+ return { exitCode: 2 };
43
+ }
44
+ }
45
+ }
46
+ let perTaskRecord;
47
+ if (status === 'DONE' && draft) {
48
+ const cfg = await loadConfig(repoRoot).catch(() => null);
49
+ const ctx = buildBuildContext({
50
+ cwd: repoRoot,
51
+ state,
52
+ draft,
53
+ config: cfg,
54
+ gateSet: effectiveGateSet(state, cfg, draft),
55
+ taskId: args.taskId,
56
+ opts: args.allowPerTaskFailure !== undefined
57
+ ? { allowPerTaskFailure: args.allowPerTaskFailure }
58
+ : {},
59
+ });
60
+ const res = await runPerTaskVerifyGate(ctx);
61
+ if (res.outcome === 'refuse') {
62
+ return { exitCode: 1 };
63
+ }
64
+ perTaskRecord = res.summaryPatch?.perTaskRecord;
65
+ }
66
+ await recordTaskOutcome(repoRoot, args.taskId, status, notes, perTaskRecord);
67
+ io.out(`Recorded ${args.taskId}: ${status}\n`);
68
+ return { exitCode: 0, data: { taskId: args.taskId, status } };
69
+ }
70
+ catch (err) {
71
+ io.err(`build task failed: ${err instanceof Error ? err.message : String(err)}\n`);
72
+ if (err instanceof LoopViolationError) {
73
+ await emitLoopViolation(repoRoot, err, 'build.task');
74
+ }
75
+ return { exitCode: 1 };
76
+ }
77
+ }
78
+ //# sourceMappingURL=build-task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-task.js","sourceRoot":"","sources":["../../src/services/build-task.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { CommandIO, CommandResult } from './io.js';
2
+ /**
3
+ * `cadence draft approve <phase> <num>` — run the coherence → soft-cap →
4
+ * approve → plan-review gate ladder, then transition DRAFT→BUILD. Faithful
5
+ * extraction of the former CLI action body.
6
+ */
7
+ export declare function draftApproveService(repoRoot: string, args: {
8
+ phase: string;
9
+ num: string;
10
+ allowAutoComplex?: boolean;
11
+ approve?: boolean;
12
+ allowPlanReviewFailure?: boolean;
13
+ }, io: CommandIO): Promise<CommandResult>;
14
+ //# sourceMappingURL=draft-approve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft-approve.d.ts","sourceRoot":"","sources":["../../src/services/draft-approve.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExD;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE;IACJ,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC,EACD,EAAE,EAAE,SAAS,GACZ,OAAO,CAAC,aAAa,CAAC,CA2DxB"}
@@ -0,0 +1,74 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { existsSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { parseDraftMd } from '../parse/draft-parser.js';
5
+ import { SimpleStateBackend } from '../state/simple.js';
6
+ import { loadConfig } from '../config/loader.js';
7
+ import { effectiveGateSet } from '../gates/engine.js';
8
+ import { buildDraftContext } from '../gates/draft-context.js';
9
+ import { runCoherenceGate, emitCoherenceWarns } from '../gates/coherence.js';
10
+ import { runApproveGate } from '../gates/approve.js';
11
+ import { runPlanReviewGate } from '../gates/plan-review.js';
12
+ /**
13
+ * `cadence draft approve <phase> <num>` — run the coherence → soft-cap →
14
+ * approve → plan-review gate ladder, then transition DRAFT→BUILD. Faithful
15
+ * extraction of the former CLI action body.
16
+ */
17
+ export async function draftApproveService(repoRoot, args, io) {
18
+ try {
19
+ const id = `${args.phase.slice(0, 2)}-${args.num.padStart(2, '0')}`;
20
+ const path = join(repoRoot, '.cadence', 'phases', args.phase, `${id}-DRAFT.md`);
21
+ const draft = parseDraftMd(await readFile(path, 'utf8'));
22
+ const backend = new SimpleStateBackend(repoRoot);
23
+ const state = await backend.readState();
24
+ const projectMdPath = join(repoRoot, '.cadence', 'PROJECT.md');
25
+ const projectMd = existsSync(projectMdPath) ? await readFile(projectMdPath, 'utf8') : '';
26
+ const cfg = await loadConfig(repoRoot).catch(() => null);
27
+ const gateSet = effectiveGateSet(state, cfg, draft);
28
+ const ctx = buildDraftContext({
29
+ cwd: repoRoot, state, draft, config: cfg, gateSet, phase: args.phase, id, projectMd,
30
+ opts: {
31
+ ...(args.allowAutoComplex !== undefined ? { allowAutoComplex: args.allowAutoComplex } : {}),
32
+ ...(args.approve !== undefined ? { approve: args.approve } : {}),
33
+ ...(args.allowPlanReviewFailure !== undefined ? { allowPlanReviewFailure: args.allowPlanReviewFailure } : {}),
34
+ },
35
+ });
36
+ // Coherence blockers refuse before any state mutation (exit 2).
37
+ if ((await runCoherenceGate(ctx)).outcome === 'refuse') {
38
+ return { exitCode: 2 };
39
+ }
40
+ // DESIGN.md §4 M2 — soft cap on auto × complex (Phase 21.1).
41
+ if (gateSet.softCap && !args.allowAutoComplex) {
42
+ io.err('draft approve refused: auto × complex is soft-capped (DESIGN.md §4 M2). Pass --allow-auto-complex to override, or bump the draft\'s profile to standard/strict.\n');
43
+ return { exitCode: 1 };
44
+ }
45
+ if (gateSet.softCap && args.allowAutoComplex) {
46
+ io.err('draft approve: --allow-auto-complex set; proceeding past soft cap (auto × complex).\n');
47
+ }
48
+ // Manual approve gate (Phase 24.1) then plan-review gate (25.1 / 35.1).
49
+ if ((await runApproveGate(ctx)).outcome === 'refuse') {
50
+ return { exitCode: 1 };
51
+ }
52
+ if ((await runPlanReviewGate(ctx)).outcome === 'refuse') {
53
+ return { exitCode: 1 };
54
+ }
55
+ // Coherence-warn emission at approve time (before the BUILD transition).
56
+ await emitCoherenceWarns(ctx, 'coherence.approve');
57
+ state.activePhase = args.phase;
58
+ state.activeDraft = id;
59
+ state.loopPosition = 'BUILD';
60
+ state.tier = draft.tier;
61
+ state.draftReadAt = new Date().toISOString();
62
+ if (!state.openDrafts.some((d) => d.id === id)) {
63
+ state.openDrafts.push({ id, since: new Date().toISOString() });
64
+ }
65
+ await backend.commit(state);
66
+ io.out(`Approved ${id}; loopPosition=BUILD\n`);
67
+ return { exitCode: 0, data: { id, loopPosition: 'BUILD' } };
68
+ }
69
+ catch (err) {
70
+ io.err(`draft approve failed: ${err instanceof Error ? err.message : String(err)}\n`);
71
+ return { exitCode: 1 };
72
+ }
73
+ }
74
+ //# sourceMappingURL=draft-approve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft-approve.js","sourceRoot":"","sources":["../../src/services/draft-approve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { CommandIO, CommandResult } from './io.js';
2
+ /**
3
+ * `cadence draft check <path>` — coherence-check a DRAFT.md against state +
4
+ * PROJECT.md. `path` is resolved against `repoRoot` (absolute paths pass
5
+ * through). Exit 2 on a blocking issue, matching the CLI.
6
+ */
7
+ export declare function draftCheckService(repoRoot: string, args: {
8
+ path: string;
9
+ }, io: CommandIO): Promise<CommandResult>;
10
+ //# sourceMappingURL=draft-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft-check.d.ts","sourceRoot":"","sources":["../../src/services/draft-check.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExD;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EACtB,EAAE,EAAE,SAAS,GACZ,OAAO,CAAC,aAAa,CAAC,CA6BxB"}
@@ -0,0 +1,47 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { existsSync } from 'node:fs';
3
+ import { join, resolve } from 'node:path';
4
+ import { parseDraftMd } from '../parse/draft-parser.js';
5
+ import { coherenceCheck } from '../coherence/check.js';
6
+ import { SimpleStateBackend } from '../state/simple.js';
7
+ import { loadConfig } from '../config/loader.js';
8
+ import { effectiveGateSet } from '../gates/engine.js';
9
+ import { buildDraftContext } from '../gates/draft-context.js';
10
+ import { emitCoherenceWarns, printAllCoherenceIssues } from '../gates/coherence.js';
11
+ /**
12
+ * `cadence draft check <path>` — coherence-check a DRAFT.md against state +
13
+ * PROJECT.md. `path` is resolved against `repoRoot` (absolute paths pass
14
+ * through). Exit 2 on a blocking issue, matching the CLI.
15
+ */
16
+ export async function draftCheckService(repoRoot, args, io) {
17
+ try {
18
+ const path = resolve(repoRoot, args.path);
19
+ const draft = parseDraftMd(await readFile(path, 'utf8'));
20
+ const state = await new SimpleStateBackend(repoRoot).readState();
21
+ const projectMdPath = join(repoRoot, '.cadence', 'PROJECT.md');
22
+ const projectMd = existsSync(projectMdPath) ? await readFile(projectMdPath, 'utf8') : '';
23
+ const issues = coherenceCheck(draft, state, projectMd).issues;
24
+ if (issues.length === 0) {
25
+ io.out('coherence: OK\n');
26
+ return { exitCode: 0, data: { ok: true, issues: [] } };
27
+ }
28
+ const blocked = printAllCoherenceIssues(issues, { err: (s) => io.err(s) });
29
+ // Phase 23.2 — coherence-warn emission (gated on anomaly-notify). Block
30
+ // issues already printed loudly above; warns still emit even when blocked.
31
+ if (issues.some((i) => i.severity === 'warn')) {
32
+ const cfg = await loadConfig(repoRoot).catch(() => null);
33
+ const ctx = buildDraftContext({
34
+ cwd: repoRoot, state, draft, config: cfg,
35
+ gateSet: effectiveGateSet(state, cfg, draft),
36
+ phase: '', id: '', projectMd, opts: {},
37
+ });
38
+ await emitCoherenceWarns(ctx, 'coherence.check');
39
+ }
40
+ return { exitCode: blocked ? 2 : 0, data: { ok: !blocked, issues } };
41
+ }
42
+ catch (err) {
43
+ io.err(`draft check failed: ${err instanceof Error ? err.message : String(err)}\n`);
44
+ return { exitCode: 1 };
45
+ }
46
+ }
47
+ //# sourceMappingURL=draft-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft-check.js","sourceRoot":"","sources":["../../src/services/draft-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { CommandIO, CommandResult } from './io.js';
2
+ /**
3
+ * `cadence draft new <phase> <num>` — scaffold a DRAFT.md (IDLE→DRAFT) and,
4
+ * with `fromRec`, chain-convert the recommendation. Faithful extraction of the
5
+ * former CLI action body.
6
+ */
7
+ export declare function draftNewService(repoRoot: string, args: {
8
+ phase: string;
9
+ num: string;
10
+ title?: string;
11
+ tier?: string;
12
+ fromRec?: string;
13
+ }, io: CommandIO): Promise<CommandResult>;
14
+ //# sourceMappingURL=draft-new.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft-new.d.ts","sourceRoot":"","sources":["../../src/services/draft-new.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EACrF,EAAE,EAAE,SAAS,GACZ,OAAO,CAAC,aAAa,CAAC,CAqFxB"}
@@ -0,0 +1,98 @@
1
+ import { readFile, mkdir, writeFile } from 'node:fs/promises';
2
+ import { existsSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { parseSpecMd } from '../parse/spec-parser.js';
5
+ import { renderDraftBody, frontmatterStatus } from '../parse/draft-scaffold.js';
6
+ import { SimpleStateBackend } from '../state/simple.js';
7
+ import { readRecommendationLedger } from '../intelligence/store/io.js';
8
+ import { runRecommendationTransition } from '../intelligence/store/recommendations.js';
9
+ /**
10
+ * `cadence draft new <phase> <num>` — scaffold a DRAFT.md (IDLE→DRAFT) and,
11
+ * with `fromRec`, chain-convert the recommendation. Faithful extraction of the
12
+ * former CLI action body.
13
+ */
14
+ export async function draftNewService(repoRoot, args, io) {
15
+ const title = args.title ?? 'Untitled';
16
+ const tier = args.tier ?? 'standard';
17
+ try {
18
+ const backend = new SimpleStateBackend(repoRoot);
19
+ const state = await backend.readState();
20
+ if (state.loopPosition !== 'IDLE') {
21
+ const hint = state.loopPosition === 'SPEC'
22
+ ? `Approve or discard the active spec (${state.activeSpec ?? '?'}) first (cadence spec approve …).`
23
+ : `Settle or discard the active draft (${state.activeDraft ?? '?'}) first.`;
24
+ io.err(`draft new refused: loopPosition is ${state.loopPosition}, not IDLE. ${hint}\n`);
25
+ return { exitCode: 1 };
26
+ }
27
+ // Slice 34.3 — pre-flight the rec BEFORE any fs writes so we never
28
+ // scaffold a phase for a missing or unconvertible rec.
29
+ if (args.fromRec !== undefined) {
30
+ const recLedger = await readRecommendationLedger(repoRoot);
31
+ const rec = recLedger.recommendations.find((r) => r.id === args.fromRec);
32
+ if (!rec) {
33
+ io.err(`draft new refused: recommendation ${args.fromRec} not found\n`);
34
+ return { exitCode: 1 };
35
+ }
36
+ if (rec.status !== 'candidate' && rec.status !== 'accepted') {
37
+ io.err(`draft new refused: cannot convert recommendation in status ${rec.status}\n`);
38
+ return { exitCode: 1 };
39
+ }
40
+ }
41
+ const dir = join(repoRoot, '.cadence', 'phases', args.phase);
42
+ const padded = args.num.padStart(2, '0');
43
+ const id = `${args.phase.slice(0, 2)}-${padded}`;
44
+ const path = join(dir, `${id}-DRAFT.md`);
45
+ if (existsSync(path)) {
46
+ io.err(`DRAFT already exists: ${path}\n`);
47
+ return { exitCode: 2 };
48
+ }
49
+ await mkdir(dir, { recursive: true });
50
+ const specPath = join(dir, `${id}-SPEC.md`);
51
+ let body;
52
+ if (existsSync(specPath)) {
53
+ const rawSpec = await readFile(specPath, 'utf8');
54
+ if (frontmatterStatus(rawSpec) === 'APPROVED') {
55
+ try {
56
+ const spec = parseSpecMd(rawSpec);
57
+ body = renderDraftBody(args.phase, id, tier, title, spec);
58
+ io.out(`draft new: seeded objective + ${spec.acceptanceCriteria.length} AC(s) from approved SPEC ${id}\n`);
59
+ }
60
+ catch (err) {
61
+ io.err(`draft new: SPEC ${id} APPROVED but unparseable (${err instanceof Error ? err.message : String(err)}) — scaffolding empty\n`);
62
+ body = renderDraftBody(args.phase, id, tier, title);
63
+ }
64
+ }
65
+ else {
66
+ io.err(`draft new: SPEC ${id} present but not APPROVED — scaffolding empty\n`);
67
+ body = renderDraftBody(args.phase, id, tier, title);
68
+ }
69
+ }
70
+ else {
71
+ body = renderDraftBody(args.phase, id, tier, title);
72
+ }
73
+ await writeFile(path, body);
74
+ state.activePhase = args.phase;
75
+ state.activeDraft = id;
76
+ state.loopPosition = 'DRAFT';
77
+ if (!state.openDrafts.some((d) => d.id === id)) {
78
+ state.openDrafts.push({ id, since: new Date().toISOString() });
79
+ }
80
+ await backend.commit(state);
81
+ io.out(`Created ${path}\n`);
82
+ if (args.fromRec !== undefined) {
83
+ const convertRes = await runRecommendationTransition(repoRoot, args.fromRec, 'convert', args.phase);
84
+ if (!convertRes.ok) {
85
+ io.err(`draft new: scaffold succeeded but convert failed: ${convertRes.error}. ` +
86
+ `Run \`cadence recommendation convert ${args.fromRec} --to-phase ${args.phase}\` to retry.\n`);
87
+ return { exitCode: 1, data: { path, id, converted: false } };
88
+ }
89
+ io.out(`recommendation ${args.fromRec} → converted (to ${args.phase})\n`);
90
+ }
91
+ return { exitCode: 0, data: { path, id, converted: args.fromRec !== undefined } };
92
+ }
93
+ catch (err) {
94
+ io.err(`draft new failed: ${err instanceof Error ? err.message : String(err)}\n`);
95
+ return { exitCode: 1 };
96
+ }
97
+ }
98
+ //# sourceMappingURL=draft-new.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft-new.js","sourceRoot":"","sources":["../../src/services/draft-new.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Command-service I/O seam (phase 58).
3
+ *
4
+ * The curated CLI commands exposed over MCP (`progress`, `status`, `recommend`,
5
+ * `draft new/check/approve`, `build task`, `settle`, `spec new/approve`) have
6
+ * their logic factored into pure `*Service(repoRoot, args, io)` functions. The
7
+ * CLI action wires `io` to the real process streams and exit code; the MCP tool
8
+ * handler wires `io` to in-memory buffers and serializes the structured result.
9
+ *
10
+ * This keeps a single implementation behind both surfaces — the CLI remains the
11
+ * rendering layer (byte-identical output), and MCP gets structured `data` plus
12
+ * the captured human text. No service imports the MCP SDK, so the CLI hot path
13
+ * never loads it (AC-7).
14
+ */
15
+ /** A sink for a command's human-facing output, abstracted off `process`. */
16
+ export interface CommandIO {
17
+ /** stdout-equivalent write (caller includes any trailing newline). */
18
+ out(s: string): void;
19
+ /** stderr-equivalent write (caller includes any trailing newline). */
20
+ err(s: string): void;
21
+ }
22
+ /**
23
+ * Structured result of a command service.
24
+ * - `exitCode` mirrors the CLI exit code (0 ok, 1 refusal/error, 2 structural).
25
+ * - `data` is the machine-readable payload surfaced as MCP `structuredContent`.
26
+ */
27
+ export interface CommandResult {
28
+ exitCode: number;
29
+ data?: unknown;
30
+ }
31
+ /** `CommandIO` bound to the real process streams — used by the CLI actions. */
32
+ export declare function processIO(): CommandIO;
33
+ /** A `CommandIO` that captures into strings — used by the MCP tool handlers. */
34
+ export interface BufferIO extends CommandIO {
35
+ stdout(): string;
36
+ stderr(): string;
37
+ }
38
+ export declare function bufferIO(): BufferIO;
39
+ //# sourceMappingURL=io.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../../src/services/io.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,4EAA4E;AAC5E,MAAM,WAAW,SAAS;IACxB,sEAAsE;IACtE,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,sEAAsE;IACtE,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,+EAA+E;AAC/E,wBAAgB,SAAS,IAAI,SAAS,CAKrC;AAED,gFAAgF;AAChF,MAAM,WAAW,QAAS,SAAQ,SAAS;IACzC,MAAM,IAAI,MAAM,CAAC;IACjB,MAAM,IAAI,MAAM,CAAC;CAClB;AAED,wBAAgB,QAAQ,IAAI,QAAQ,CAanC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Command-service I/O seam (phase 58).
3
+ *
4
+ * The curated CLI commands exposed over MCP (`progress`, `status`, `recommend`,
5
+ * `draft new/check/approve`, `build task`, `settle`, `spec new/approve`) have
6
+ * their logic factored into pure `*Service(repoRoot, args, io)` functions. The
7
+ * CLI action wires `io` to the real process streams and exit code; the MCP tool
8
+ * handler wires `io` to in-memory buffers and serializes the structured result.
9
+ *
10
+ * This keeps a single implementation behind both surfaces — the CLI remains the
11
+ * rendering layer (byte-identical output), and MCP gets structured `data` plus
12
+ * the captured human text. No service imports the MCP SDK, so the CLI hot path
13
+ * never loads it (AC-7).
14
+ */
15
+ /** `CommandIO` bound to the real process streams — used by the CLI actions. */
16
+ export function processIO() {
17
+ return {
18
+ out: (s) => void process.stdout.write(s),
19
+ err: (s) => void process.stderr.write(s),
20
+ };
21
+ }
22
+ export function bufferIO() {
23
+ let out = '';
24
+ let err = '';
25
+ return {
26
+ out: (s) => {
27
+ out += s;
28
+ },
29
+ err: (s) => {
30
+ err += s;
31
+ },
32
+ stdout: () => out,
33
+ stderr: () => err,
34
+ };
35
+ }
36
+ //# sourceMappingURL=io.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"io.js","sourceRoot":"","sources":["../../src/services/io.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAoBH,+EAA+E;AAC/E,MAAM,UAAU,SAAS;IACvB,OAAO;QACL,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACxC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;KACzC,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,QAAQ;IACtB,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,OAAO;QACL,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;YACT,GAAG,IAAI,CAAC,CAAC;QACX,CAAC;QACD,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;YACT,GAAG,IAAI,CAAC,CAAC;QACX,CAAC;QACD,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG;QACjB,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG;KAClB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { CommandIO, CommandResult } from './io.js';
2
+ /**
3
+ * `cadence progress` — the single recommended next action (read-only).
4
+ * Returns `data: { command, reason }` for structured consumers.
5
+ */
6
+ export declare function progressService(repoRoot: string, io: CommandIO): Promise<CommandResult>;
7
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/services/progress.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExD;;;GAGG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,SAAS,GACZ,OAAO,CAAC,aAAa,CAAC,CAYxB"}
@@ -0,0 +1,21 @@
1
+ import { SimpleStateBackend } from '../state/simple.js';
2
+ import { nextAction } from '../progress.js';
3
+ /**
4
+ * `cadence progress` — the single recommended next action (read-only).
5
+ * Returns `data: { command, reason }` for structured consumers.
6
+ */
7
+ export async function progressService(repoRoot, io) {
8
+ try {
9
+ const backend = new SimpleStateBackend(repoRoot);
10
+ const state = await backend.readState();
11
+ const action = nextAction(state);
12
+ io.out(`Next: ${action.command}\n`);
13
+ io.out(`Reason: ${action.reason}\n`);
14
+ return { exitCode: 0, data: { command: action.command, reason: action.reason } };
15
+ }
16
+ catch (err) {
17
+ io.err(`progress failed: ${err instanceof Error ? err.message : String(err)}\n`);
18
+ return { exitCode: 1 };
19
+ }
20
+ }
21
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/services/progress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG5C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAAgB,EAChB,EAAa;IAEb,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACjC,EAAE,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;QACpC,EAAE,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;QACrC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;IACnF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,EAAE,CAAC,GAAG,CAAC,oBAAoB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjF,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACzB,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { CommandIO, CommandResult } from './io.js';
2
+ /**
3
+ * `cadence recommend` — ranked strategic recommendations (read-only).
4
+ * `json: true` mirrors `--json`. `data` is the recommend report either way.
5
+ */
6
+ export declare function recommendService(repoRoot: string, args: {
7
+ json?: boolean;
8
+ }, io: CommandIO): Promise<CommandResult>;
9
+ //# sourceMappingURL=recommend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommend.d.ts","sourceRoot":"","sources":["../../src/services/recommend.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExD;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,EACxB,EAAE,EAAE,SAAS,GACZ,OAAO,CAAC,aAAa,CAAC,CAaxB"}
@@ -0,0 +1,23 @@
1
+ import { runRecommend } from '../intelligence/recommend.js';
2
+ import { renderRecommendMd } from '../intelligence/render-recommend.js';
3
+ /**
4
+ * `cadence recommend` — ranked strategic recommendations (read-only).
5
+ * `json: true` mirrors `--json`. `data` is the recommend report either way.
6
+ */
7
+ export async function recommendService(repoRoot, args, io) {
8
+ try {
9
+ const report = await runRecommend(repoRoot);
10
+ if (args.json) {
11
+ io.out(JSON.stringify(report) + '\n');
12
+ }
13
+ else {
14
+ io.out(renderRecommendMd(report));
15
+ }
16
+ return { exitCode: 0, data: report };
17
+ }
18
+ catch (err) {
19
+ io.err(`recommend failed: ${err instanceof Error ? err.message : String(err)}\n`);
20
+ return { exitCode: 1 };
21
+ }
22
+ }
23
+ //# sourceMappingURL=recommend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommend.js","sourceRoot":"","sources":["../../src/services/recommend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAGxE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAgB,EAChB,IAAwB,EACxB,EAAa;IAEb,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACvC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,EAAE,CAAC,GAAG,CAAC,qBAAqB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClF,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACzB,CAAC;AACH,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { CommandIO, CommandResult } from './io.js';
2
+ export interface SettleArgs {
3
+ ac?: string[];
4
+ auto?: boolean;
5
+ force?: boolean;
6
+ allowMissingCoverage?: boolean;
7
+ deep?: boolean;
8
+ allowAutoComplex?: boolean;
9
+ allowStaleDraft?: boolean;
10
+ allowOpenTasks?: boolean;
11
+ allowFailingBuild?: boolean;
12
+ allowVerifierFailure?: boolean;
13
+ allowCodeReviewFailure?: boolean;
14
+ allowSecurityAuditFailure?: boolean;
15
+ allowSkillAuditMiss?: boolean;
16
+ interactive?: boolean;
17
+ }
18
+ /**
19
+ * `cadence settle run` — close the loop: run the settle gate stack, write
20
+ * SUMMARY.{json,md}, and return to IDLE. Faithful extraction of the former CLI
21
+ * action body (process streams + exit code routed through `io`/the result).
22
+ */
23
+ export declare function settleService(repoRoot: string, opts: SettleArgs, io: CommandIO): Promise<CommandResult>;
24
+ //# sourceMappingURL=settle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settle.d.ts","sourceRoot":"","sources":["../../src/services/settle.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAaD;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,UAAU,EAChB,EAAE,EAAE,SAAS,GACZ,OAAO,CAAC,aAAa,CAAC,CA2TxB"}