@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,141 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { readFile, readdir } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ import { checkNodeMajor } from '../cli/node-guard.js';
5
+ import { loadConfig } from '../config/loader.js';
6
+ import { pass, fail, rollup, } from './model.js';
7
+ function checkNode(env) {
8
+ const r = checkNodeMajor(env.nodeVersion);
9
+ return r.ok
10
+ ? pass('node', `Node ${env.nodeVersion} satisfies the >=20 floor.`)
11
+ : fail('node', 'error', r.message, 'Upgrade Node to >=20 and retry.');
12
+ }
13
+ async function checkInitialized(root) {
14
+ if (!existsSync(join(root, '.cadence'))) {
15
+ return fail('initialized', 'error', 'No .cadence/ directory found here.', 'Run `cadence init` to initialize CADENCE in this project.');
16
+ }
17
+ try {
18
+ await loadConfig(root);
19
+ return pass('initialized', '.cadence/ present and config.json is valid.');
20
+ }
21
+ catch (err) {
22
+ return fail('initialized', 'error', `config.json is invalid: ${err instanceof Error ? err.message : String(err)}`, 'Fix or regenerate .cadence/config.json (see docs/reference/config.md).');
23
+ }
24
+ }
25
+ async function checkState(root) {
26
+ // Only meaningful once initialized; the `initialized` check owns the
27
+ // not-initialized error, so skip cleanly here to avoid double-reporting.
28
+ if (!existsSync(join(root, '.cadence'))) {
29
+ return pass('state', 'Not applicable — project is not initialized.');
30
+ }
31
+ const stateJson = join(root, '.cadence', 'state.json');
32
+ if (!existsSync(stateJson)) {
33
+ return fail('state', 'error', 'state.json is missing.', 'Run any cadence command (e.g. `cadence progress`) to regenerate state, or `cadence init`.');
34
+ }
35
+ try {
36
+ JSON.parse(await readFile(stateJson, 'utf8'));
37
+ }
38
+ catch (err) {
39
+ return fail('state', 'error', `state.json is not valid JSON: ${err instanceof Error ? err.message : String(err)}`, 'Restore .cadence/state.json from version control, or re-init.');
40
+ }
41
+ if (!existsSync(join(root, '.cadence', 'STATE.md'))) {
42
+ return fail('state', 'warning', 'STATE.md (the derived human view) is missing.', 'Run any cadence command to regenerate STATE.md.');
43
+ }
44
+ return pass('state', 'state.json parses and STATE.md is present.');
45
+ }
46
+ // A run-line is non-portable if it contains an absolute path token: a POSIX
47
+ // root (`/abs/...`) or a Windows drive (`C:\...`). The portable managed form is
48
+ // `!cadence <sub>`, which has neither.
49
+ const ABS_PATH_TOKEN = /(?:^|\s)(?:[A-Za-z]:[\\/]|\/)/;
50
+ /** The first `!`-prefixed run-line in a managed command file, minus the `!`. */
51
+ function runLineOf(content) {
52
+ for (const line of content.split('\n')) {
53
+ if (line.startsWith('!'))
54
+ return line.slice(1).trim();
55
+ }
56
+ return null;
57
+ }
58
+ async function checkHostCommands(root) {
59
+ const dir = join(root, '.claude', 'commands');
60
+ if (!existsSync(dir)) {
61
+ return pass('host-commands', 'Not applicable — no .claude/commands/ here.');
62
+ }
63
+ const files = (await readdir(dir)).filter((f) => f.startsWith('cadence-') && f.endsWith('.md'));
64
+ const offenders = [];
65
+ let checked = 0;
66
+ for (const f of files) {
67
+ const content = await readFile(join(dir, f), 'utf8');
68
+ if (!content.includes('<!-- managed-by: cadence -->'))
69
+ continue; // user-owned
70
+ checked++;
71
+ const run = runLineOf(content);
72
+ if (run !== null && ABS_PATH_TOKEN.test(run))
73
+ offenders.push(f);
74
+ }
75
+ if (offenders.length > 0) {
76
+ return fail('host-commands', 'warning', `Machine-absolute run-line in ${offenders.join(', ')} — not portable across clones/machines.`, 'Regenerate with `cadence-host-claude-code install` (without --local) to write the portable `cadence` form.');
77
+ }
78
+ return pass('host-commands', `All ${checked} managed slash command(s) use portable run-lines.`);
79
+ }
80
+ /** Local `core.hooksPath` value from a `.git/config` body, or null if unset. */
81
+ function gitHooksPath(configText) {
82
+ const m = configText.match(/^\s*hooksPath\s*=\s*(.+?)\s*$/m);
83
+ if (!m || m[1] === undefined)
84
+ return null;
85
+ return m[1];
86
+ }
87
+ async function checkGitHooks(root) {
88
+ if (!existsSync(join(root, '.git'))) {
89
+ return pass('git-hooks', 'Not applicable — not a git repository.');
90
+ }
91
+ const cfgPath = join(root, '.git', 'config');
92
+ const cfg = existsSync(cfgPath) ? await readFile(cfgPath, 'utf8') : '';
93
+ const hp = gitHooksPath(cfg);
94
+ if (hp === '.githooks') {
95
+ return pass('git-hooks', 'core.hooksPath points at .githooks (the pre-push gate is wired).');
96
+ }
97
+ return fail('git-hooks', 'warning', hp === null
98
+ ? 'core.hooksPath is unset — the .githooks pre-push gate will not run.'
99
+ : `core.hooksPath is "${hp}", not ".githooks" — the pre-push gate may not run.`, 'Run `git config core.hooksPath .githooks` to enable the pre-push gate.');
100
+ }
101
+ /** Deep-scan a parsed settings object for any `_managedBy: "cadence"` entry. */
102
+ function hasManagedCadence(value) {
103
+ if (Array.isArray(value))
104
+ return value.some(hasManagedCadence);
105
+ if (value !== null && typeof value === 'object') {
106
+ const o = value;
107
+ if (o['_managedBy'] === 'cadence')
108
+ return true;
109
+ return Object.values(o).some(hasManagedCadence);
110
+ }
111
+ return false;
112
+ }
113
+ async function checkHostHooks(root) {
114
+ const settings = join(root, '.claude', 'settings.json');
115
+ if (!existsSync(settings)) {
116
+ return pass('host-hooks', 'Not applicable — no .claude/settings.json here.');
117
+ }
118
+ let parsed;
119
+ try {
120
+ parsed = JSON.parse(await readFile(settings, 'utf8'));
121
+ }
122
+ catch (err) {
123
+ return fail('host-hooks', 'warning', `.claude/settings.json is not valid JSON: ${err instanceof Error ? err.message : String(err)}`, 'Fix or regenerate it with `cadence-host-claude-code install`.');
124
+ }
125
+ if (hasManagedCadence(parsed)) {
126
+ return pass('host-hooks', 'CADENCE-managed hook entries are present in settings.json.');
127
+ }
128
+ return fail('host-hooks', 'warning', 'No CADENCE-managed (_managedBy: "cadence") hook entries found in settings.json.', 'Run `cadence-host-claude-code install` to (re)write the lifecycle hooks.');
129
+ }
130
+ export async function runDoctor(root, env) {
131
+ const checks = [
132
+ checkNode(env),
133
+ await checkInitialized(root),
134
+ await checkState(root),
135
+ await checkGitHooks(root),
136
+ await checkHostHooks(root),
137
+ await checkHostCommands(root),
138
+ ];
139
+ return rollup(checks);
140
+ }
141
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/doctor/run.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type AssumptionLedger, type IntelligenceDecisionLedger, type Recommendation, type RecommendationLedger, type RecommendationPriority, type RecommendationReadiness } from '@manehorizons/cadence-types';
1
+ import { type AssumptionLedger, type IntelligenceDecisionLedger, type Recommendation, type RecommendationLedger, type RecommendationPriority, type RecommendationReadiness, type RecommendationStatus } from '@manehorizons/cadence-types';
2
2
  export type AddRecommendationInput = {
3
3
  title: string;
4
4
  summary: string;
@@ -19,5 +19,11 @@ export type RecommendationTransitionResult = {
19
19
  error: string;
20
20
  };
21
21
  export declare function applyRecommendationTransition(ledger: RecommendationLedger, id: string, action: RecommendationTransitionAction, toPhase: string, now: Date): RecommendationTransitionResult;
22
+ export interface RecommendationPromotionChanges {
23
+ status?: RecommendationStatus;
24
+ readiness?: RecommendationReadiness;
25
+ }
26
+ export declare function applyRecommendationPromotion(ledger: RecommendationLedger, id: string, changes: RecommendationPromotionChanges, now: Date): RecommendationTransitionResult;
22
27
  export declare function runRecommendationTransition(root: string, id: string, action: RecommendationTransitionAction, toPhase: string): Promise<RecommendationTransitionResult>;
28
+ export declare function runRecommendationPromotion(root: string, id: string, changes: RecommendationPromotionChanges): Promise<RecommendationTransitionResult>;
23
29
  //# sourceMappingURL=recommendations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"recommendations.d.ts","sourceRoot":"","sources":["../../../src/intelligence/store/recommendations.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,gBAAgB,EAErB,KAAK,0BAA0B,EAC/B,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC7B,MAAM,6BAA6B,CAAC;AAQrC,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,sBAAsB,CAAC;IACjC,SAAS,EAAE,uBAAuB,CAAC;IACnC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,cAAc,CAAC,CAwCzB;AAED,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,oBAAoB,EAC/B,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,0BAA0B,GACpC,oBAAoB,CAatB;AAKD,MAAM,MAAM,8BAA8B,GAAG,SAAS,CAAC;AAEvD,MAAM,MAAM,8BAA8B,GACtC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,oBAAoB,CAAA;CAAE,GAC1C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAgBjC,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,oBAAoB,EAC5B,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,8BAA8B,EACtC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,IAAI,GACR,8BAA8B,CAoBhC;AAcD,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,8BAA8B,EACtC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,8BAA8B,CAAC,CAczC"}
1
+ {"version":3,"file":"recommendations.d.ts","sourceRoot":"","sources":["../../../src/intelligence/store/recommendations.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,gBAAgB,EAErB,KAAK,0BAA0B,EAC/B,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EAC1B,MAAM,6BAA6B,CAAC;AAQrC,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,sBAAsB,CAAC;IACjC,SAAS,EAAE,uBAAuB,CAAC;IACnC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,cAAc,CAAC,CAwCzB;AAED,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,oBAAoB,EAC/B,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,0BAA0B,GACpC,oBAAoB,CAatB;AAKD,MAAM,MAAM,8BAA8B,GAAG,SAAS,CAAC;AAEvD,MAAM,MAAM,8BAA8B,GACtC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,oBAAoB,CAAA;CAAE,GAC1C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAgBjC,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,oBAAoB,EAC5B,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,8BAA8B,EACtC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,IAAI,GACR,8BAA8B,CAoBhC;AAMD,MAAM,WAAW,8BAA8B;IAC7C,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,SAAS,CAAC,EAAE,uBAAuB,CAAC;CACrC;AASD,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,oBAAoB,EAC5B,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,8BAA8B,EACvC,GAAG,EAAE,IAAI,GACR,8BAA8B,CAuChC;AAcD,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,8BAA8B,EACtC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,8BAA8B,CAAC,CAczC;AAED,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,8BAA8B,CAAC,CAOzC"}
@@ -84,6 +84,50 @@ export function applyRecommendationTransition(ledger, id, action, toPhase, now)
84
84
  };
85
85
  return { ok: true, ledger: ledgerOut };
86
86
  }
87
+ /** Statuses an operator may promote *from*. `converted`/`rejected` are terminal. */
88
+ const PROMOTABLE_FROM = new Set([
89
+ 'candidate',
90
+ 'accepted',
91
+ 'deferred',
92
+ ]);
93
+ export function applyRecommendationPromotion(ledger, id, changes, now) {
94
+ const target = ledger.recommendations.find((r) => r.id === id);
95
+ if (!target)
96
+ return { ok: false, error: `recommendation ${id} not found` };
97
+ if (changes.status === undefined && changes.readiness === undefined) {
98
+ return {
99
+ ok: false,
100
+ error: 'nothing to promote: provide --status and/or --readiness',
101
+ };
102
+ }
103
+ if (changes.status === 'converted') {
104
+ return {
105
+ ok: false,
106
+ error: 'cannot promote to converted — use `cadence recommendation convert` (it sets the phase link)',
107
+ };
108
+ }
109
+ if (!PROMOTABLE_FROM.has(target.status)) {
110
+ return {
111
+ ok: false,
112
+ error: `cannot promote recommendation in terminal status ${target.status}`,
113
+ };
114
+ }
115
+ const updatedAt = now.toISOString();
116
+ const ledgerOut = {
117
+ schemaVersion: 1,
118
+ recommendations: ledger.recommendations.map((r) => r.id === id
119
+ ? {
120
+ ...r,
121
+ ...(changes.status !== undefined ? { status: changes.status } : {}),
122
+ ...(changes.readiness !== undefined
123
+ ? { readiness: changes.readiness }
124
+ : {}),
125
+ updatedAt,
126
+ }
127
+ : r),
128
+ };
129
+ return { ok: true, ledger: ledgerOut };
130
+ }
87
131
  // Slice 34.1: existence check for `.cadence/phases/<phaseId>/` lives in the
88
132
  // I/O wrapper deliberately — keeps the pure helper disk-free (per Slice 34
89
133
  // Decision Log §10 + §11 architectural principle).
@@ -112,4 +156,13 @@ export async function runRecommendationTransition(root, id, action, toPhase) {
112
156
  await writeIntelligenceLedgers(root, res.ledger, evidenceLedger);
113
157
  return res;
114
158
  }
159
+ export async function runRecommendationPromotion(root, id, changes) {
160
+ const ledger = await readRecommendationLedger(root);
161
+ const res = applyRecommendationPromotion(ledger, id, changes, new Date());
162
+ if (!res.ok)
163
+ return res;
164
+ const evidenceLedger = await readEvidenceLedger(root);
165
+ await writeIntelligenceLedgers(root, res.ledger, evidenceLedger);
166
+ return res;
167
+ }
115
168
  //# sourceMappingURL=recommendations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"recommendations.js","sourceRoot":"","sources":["../../../src/intelligence/store/recommendations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recommendations.js","sourceRoot":"","sources":["../../../src/intelligence/store/recommendations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ /**
3
+ * Build the CADENCE MCP server (phase 58) — a third surface alongside the CLI
4
+ * and the Claude-Code hook adapter. Registers the curated tool set; each tool
5
+ * runs its shared service with a buffered `io` and serializes the captured text
6
+ * plus structured `data` into the tool result. Pure: the caller owns transport
7
+ * (`StdioServerTransport` in production, `InMemoryTransport` in tests).
8
+ */
9
+ export declare function buildCadenceMcpServer(repoRoot: string, version: string): McpServer;
10
+ /** The curated tool names this server advertises (handy for tests/AC-1). */
11
+ export declare const TOOL_NAMES: readonly string[];
12
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAiClF;AAED,4EAA4E;AAC5E,eAAO,MAAM,UAAU,EAAE,SAAS,MAAM,EAA6B,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { bufferIO } from '../services/io.js';
3
+ import { TOOLS } from './tools.js';
4
+ /**
5
+ * Build the CADENCE MCP server (phase 58) — a third surface alongside the CLI
6
+ * and the Claude-Code hook adapter. Registers the curated tool set; each tool
7
+ * runs its shared service with a buffered `io` and serializes the captured text
8
+ * plus structured `data` into the tool result. Pure: the caller owns transport
9
+ * (`StdioServerTransport` in production, `InMemoryTransport` in tests).
10
+ */
11
+ export function buildCadenceMcpServer(repoRoot, version) {
12
+ const server = new McpServer({ name: 'cadence', version });
13
+ for (const tool of TOOLS) {
14
+ server.registerTool(tool.name, { description: tool.description, inputSchema: tool.inputSchema }, async (args) => {
15
+ const io = bufferIO();
16
+ try {
17
+ const result = await tool.run(repoRoot, args ?? {}, io);
18
+ const text = (io.stdout() || io.stderr()).trimEnd();
19
+ const out = {
20
+ content: [
21
+ { type: 'text', text: text.length > 0 ? text : result.exitCode === 0 ? 'ok' : 'failed' },
22
+ ],
23
+ isError: result.exitCode !== 0,
24
+ };
25
+ if (result.data && typeof result.data === 'object' && !Array.isArray(result.data)) {
26
+ out.structuredContent = result.data;
27
+ }
28
+ return out;
29
+ }
30
+ catch (err) {
31
+ // A thrown error (vs a non-zero exitCode) becomes an error tool result,
32
+ // not a transport crash — the server keeps serving subsequent calls.
33
+ const msg = err instanceof Error ? err.message : String(err);
34
+ return { content: [{ type: 'text', text: `${tool.name} failed: ${msg}` }], isError: true };
35
+ }
36
+ });
37
+ }
38
+ return server;
39
+ }
40
+ /** The curated tool names this server advertises (handy for tests/AC-1). */
41
+ export const TOOL_NAMES = TOOLS.map((t) => t.name);
42
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAgB,EAAE,OAAe;IACrE,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;IAE3D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,YAAY,CACjB,IAAI,CAAC,IAAI,EACT,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,EAChE,KAAK,EAAE,IAA6B,EAA2B,EAAE;YAC/D,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;YACtB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBACxD,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;gBACpD,MAAM,GAAG,GAAmB;oBAC1B,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;qBACzF;oBACD,OAAO,EAAE,MAAM,CAAC,QAAQ,KAAK,CAAC;iBAC/B,CAAC;gBACF,IAAI,MAAM,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;oBAClF,GAAG,CAAC,iBAAiB,GAAG,MAAM,CAAC,IAA+B,CAAC;gBACjE,CAAC;gBACD,OAAO,GAAG,CAAC;YACb,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,wEAAwE;gBACxE,qEAAqE;gBACrE,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,YAAY,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC7F,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,4EAA4E;AAC5E,MAAM,CAAC,MAAM,UAAU,GAAsB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { z } from 'zod';
2
+ import type { CommandIO, CommandResult } from '../services/io.js';
3
+ /**
4
+ * One curated CADENCE command exposed as an MCP tool (phase 58). `run` calls the
5
+ * shared service with a buffered `io`; the server serializes the captured text +
6
+ * structured `data` into the tool result.
7
+ *
8
+ * Ambient edit-time gates (the `pre-tool-edit` boundary check) require host
9
+ * hooks and are NOT available over MCP — but command-boundary gates (coherence,
10
+ * the settle gate stack, spec-review) run exactly as they do from the CLI. The
11
+ * write-tool descriptions say so.
12
+ */
13
+ export interface ToolDef {
14
+ name: string;
15
+ description: string;
16
+ inputSchema: z.ZodRawShape;
17
+ run(repoRoot: string, args: Record<string, unknown>, io: CommandIO): Promise<CommandResult>;
18
+ }
19
+ export declare const TOOLS: ToolDef[];
20
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAYlE;;;;;;;;;GASG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,CAAC,CAAC,WAAW,CAAC;IAC3B,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CAC7F;AASD,eAAO,MAAM,KAAK,EAAE,OAAO,EAuM1B,CAAC"}
@@ -0,0 +1,189 @@
1
+ import { z } from 'zod';
2
+ import { progressService } from '../services/progress.js';
3
+ import { statusService } from '../services/status.js';
4
+ import { recommendService } from '../services/recommend.js';
5
+ import { draftNewService } from '../services/draft-new.js';
6
+ import { draftCheckService } from '../services/draft-check.js';
7
+ import { draftApproveService } from '../services/draft-approve.js';
8
+ import { buildTaskService } from '../services/build-task.js';
9
+ import { settleService } from '../services/settle.js';
10
+ import { specNewService } from '../services/spec-new.js';
11
+ import { specApproveService } from '../services/spec-approve.js';
12
+ const str = (v) => String(v);
13
+ const optStr = (v) => (typeof v === 'string' ? v : undefined);
14
+ const isTrue = (v) => v === true;
15
+ const TIER = z.enum(['quick-fix', 'standard', 'complex']);
16
+ const TASK_STATUS = z.enum(['DONE', 'DONE_WITH_CONCERNS', 'NEEDS_CONTEXT', 'BLOCKED']);
17
+ export const TOOLS = [
18
+ {
19
+ name: 'cadence_progress',
20
+ description: 'Show the single recommended next action for the CADENCE loop (read-only).',
21
+ inputSchema: {},
22
+ run: (repoRoot, _args, io) => progressService(repoRoot, io),
23
+ },
24
+ {
25
+ name: 'cadence_status',
26
+ description: 'Show full loop context: position, active phase/draft, tasks, AC results, next action (read-only).',
27
+ inputSchema: {
28
+ json: z.boolean().optional().describe('Return the raw status report instead of rendered text'),
29
+ },
30
+ run: (repoRoot, args, io) => statusService(repoRoot, isTrue(args.json) ? { json: true } : {}, io),
31
+ },
32
+ {
33
+ name: 'cadence_recommend',
34
+ description: 'Rank actionable strategic recommendations and advise the next move (read-only).',
35
+ inputSchema: {
36
+ json: z.boolean().optional().describe('Return the raw recommend report instead of rendered text'),
37
+ },
38
+ run: (repoRoot, args, io) => recommendService(repoRoot, isTrue(args.json) ? { json: true } : {}, io),
39
+ },
40
+ {
41
+ name: 'cadence_draft_new',
42
+ description: 'Scaffold a new DRAFT for a phase task and enter the DRAFT stage (requires loop IDLE). ' +
43
+ 'With fromRec, the recommendation is auto-converted to this phase.',
44
+ inputSchema: {
45
+ phase: z.string().describe('Phase slug, e.g. "58-mcp-server"'),
46
+ num: z.string().describe('Two-digit unit number within the phase, e.g. "01"'),
47
+ title: z.string().optional().describe('Draft title'),
48
+ tier: TIER.optional().describe('Work tier (default: standard)'),
49
+ fromRec: z.string().optional().describe('Recommendation id to convert into this phase'),
50
+ },
51
+ run: (repoRoot, args, io) => draftNewService(repoRoot, {
52
+ phase: str(args.phase),
53
+ num: str(args.num),
54
+ ...(optStr(args.title) !== undefined ? { title: optStr(args.title) } : {}),
55
+ ...(optStr(args.tier) !== undefined ? { tier: optStr(args.tier) } : {}),
56
+ ...(optStr(args.fromRec) !== undefined ? { fromRec: optStr(args.fromRec) } : {}),
57
+ }, io),
58
+ },
59
+ {
60
+ name: 'cadence_draft_check',
61
+ description: 'Run the structural coherence check on a phase DRAFT.md against state + PROJECT.md. ' +
62
+ 'Reports blocking issues exactly as the CLI does (command-boundary gate).',
63
+ inputSchema: {
64
+ phase: z.string().describe('Phase slug'),
65
+ num: z.string().describe('Two-digit unit number'),
66
+ },
67
+ run: (repoRoot, args, io) => {
68
+ const id = `${str(args.phase).slice(0, 2)}-${str(args.num).padStart(2, '0')}`;
69
+ const path = `.cadence/phases/${str(args.phase)}/${id}-DRAFT.md`;
70
+ return draftCheckService(repoRoot, { path }, io);
71
+ },
72
+ },
73
+ {
74
+ name: 'cadence_draft_approve',
75
+ description: 'Approve a DRAFT and enter BUILD. Runs the coherence → soft-cap → plan-review gate ladder ' +
76
+ '(the same command-boundary gates as the CLI). The interactive manual-approve prompt is ' +
77
+ 'bypassed over MCP — calling this tool IS the approval.',
78
+ inputSchema: {
79
+ phase: z.string().describe('Phase slug'),
80
+ num: z.string().describe('Two-digit unit number'),
81
+ allowAutoComplex: z
82
+ .boolean()
83
+ .optional()
84
+ .describe('Override the DESIGN.md §4 M2 soft cap on auto × complex drafts'),
85
+ allowPlanReviewFailure: z
86
+ .boolean()
87
+ .optional()
88
+ .describe('Proceed past a failing plan-review gate (findings still reported)'),
89
+ },
90
+ run: (repoRoot, args, io) => draftApproveService(repoRoot, {
91
+ phase: str(args.phase),
92
+ num: str(args.num),
93
+ approve: false, // no TTY over MCP; the tool call is the approval
94
+ ...(isTrue(args.allowAutoComplex) ? { allowAutoComplex: true } : {}),
95
+ ...(isTrue(args.allowPlanReviewFailure) ? { allowPlanReviewFailure: true } : {}),
96
+ }, io),
97
+ },
98
+ {
99
+ name: 'cadence_build_task',
100
+ description: 'Record the outcome of a BUILD task (runs the per-task verifier gate on DONE).',
101
+ inputSchema: {
102
+ taskId: z.string().describe('Task id from the active DRAFT, e.g. "T1"'),
103
+ status: TASK_STATUS.optional().describe('Outcome (default: DONE)'),
104
+ notes: z.string().optional().describe('Free-text notes recorded with the outcome'),
105
+ allowPerTaskFailure: z
106
+ .boolean()
107
+ .optional()
108
+ .describe('Record DONE even if the per-task verifier refuses'),
109
+ },
110
+ run: (repoRoot, args, io) => buildTaskService(repoRoot, {
111
+ taskId: str(args.taskId),
112
+ ...(optStr(args.status) !== undefined ? { status: optStr(args.status) } : {}),
113
+ ...(optStr(args.notes) !== undefined ? { notes: optStr(args.notes) } : {}),
114
+ ...(isTrue(args.allowPerTaskFailure) ? { allowPerTaskFailure: true } : {}),
115
+ }, io),
116
+ },
117
+ {
118
+ name: 'cadence_settle',
119
+ description: 'Close the loop: run the settle gate stack, write SUMMARY.{json,md}, and return to IDLE. ' +
120
+ 'Runs the full command-boundary gate stack (coverage, structural verifier, etc.). The ' +
121
+ 'interactive verdict walker is disabled over MCP; supply AC verdicts via "ac" or use "auto".',
122
+ inputSchema: {
123
+ ac: z
124
+ .array(z.string())
125
+ .optional()
126
+ .describe('AC verdicts, e.g. ["AC-1=pass", "AC-2=fail:reason"]'),
127
+ auto: z.boolean().optional().describe('Derive AC verdicts from task statuses'),
128
+ force: z.boolean().optional().describe('Settle even when --auto detects blocked/pending ACs'),
129
+ deep: z.boolean().optional().describe('Run the independent verifier agent against each AC'),
130
+ allowMissingCoverage: z.boolean().optional().describe('Skip the test-coverage gate'),
131
+ allowOpenTasks: z.boolean().optional().describe('Skip the structural-verifier gate'),
132
+ allowFailingBuild: z.boolean().optional().describe('Do not refuse on a failing test command'),
133
+ allowStaleDraft: z.boolean().optional().describe('Skip the DRAFT-read mtime gate'),
134
+ allowVerifierFailure: z.boolean().optional().describe('Do not refuse on verifier transport failure'),
135
+ allowCodeReviewFailure: z.boolean().optional().describe('Do not refuse on HIGH code-review findings'),
136
+ allowSecurityAuditFailure: z.boolean().optional().describe('Do not refuse on CRITICAL security findings'),
137
+ allowSkillAuditMiss: z.boolean().optional().describe('Do not refuse when required skills were not invoked'),
138
+ allowAutoComplex: z.boolean().optional().describe('Override the auto × complex soft cap'),
139
+ },
140
+ run: (repoRoot, args, io) => {
141
+ const flags = [
142
+ 'auto', 'force', 'deep', 'allowMissingCoverage', 'allowOpenTasks', 'allowFailingBuild',
143
+ 'allowStaleDraft', 'allowVerifierFailure', 'allowCodeReviewFailure',
144
+ 'allowSecurityAuditFailure', 'allowSkillAuditMiss', 'allowAutoComplex',
145
+ ];
146
+ const opts = { interactive: false };
147
+ if (Array.isArray(args.ac))
148
+ opts.ac = args.ac.map(String);
149
+ for (const f of flags)
150
+ if (isTrue(args[f]))
151
+ opts[f] = true;
152
+ return settleService(repoRoot, opts, io);
153
+ },
154
+ },
155
+ {
156
+ name: 'cadence_spec_new',
157
+ description: 'Scaffold a new SPEC for a phase task and enter the SPEC stage (requires loop IDLE).',
158
+ inputSchema: {
159
+ phase: z.string().describe('Phase slug'),
160
+ num: z.string().describe('Two-digit unit number'),
161
+ title: z.string().optional().describe('Spec title'),
162
+ fromRec: z.string().optional().describe('Recommendation id to convert into this phase'),
163
+ },
164
+ run: (repoRoot, args, io) => specNewService(repoRoot, {
165
+ phase: str(args.phase),
166
+ num: str(args.num),
167
+ ...(optStr(args.title) !== undefined ? { title: optStr(args.title) } : {}),
168
+ ...(optStr(args.fromRec) !== undefined ? { fromRec: optStr(args.fromRec) } : {}),
169
+ }, io),
170
+ },
171
+ {
172
+ name: 'cadence_spec_approve',
173
+ description: 'Run the convergent spec-review gate; on pass mark the SPEC APPROVED and leave the spec stage.',
174
+ inputSchema: {
175
+ phase: z.string().describe('Phase slug'),
176
+ num: z.string().describe('Two-digit unit number'),
177
+ allowSpecReviewFailure: z
178
+ .boolean()
179
+ .optional()
180
+ .describe('Proceed past a failing/unconverged spec-review'),
181
+ },
182
+ run: (repoRoot, args, io) => specApproveService(repoRoot, {
183
+ phase: str(args.phase),
184
+ num: str(args.num),
185
+ ...(isTrue(args.allowSpecReviewFailure) ? { allowSpecReviewFailure: true } : {}),
186
+ }, io),
187
+ },
188
+ ];
189
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAmBjE,MAAM,GAAG,GAAG,CAAC,CAAU,EAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC9C,MAAM,MAAM,GAAG,CAAC,CAAU,EAAsB,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAC3F,MAAM,MAAM,GAAG,CAAC,CAAU,EAAW,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;AAEnD,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;AAC1D,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,oBAAoB,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC;AAEvF,MAAM,CAAC,MAAM,KAAK,GAAc;IAC9B;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,2EAA2E;QACxF,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,CAAC;KAC5D;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,mGAAmG;QACrG,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;SAC/F;QACD,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;KAClG;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,iFAAiF;QAC9F,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;SAClG;QACD,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;KACrG;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,wFAAwF;YACxF,mEAAmE;QACrE,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;YAC9D,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;YAC7E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;YACpD,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;YAC/D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;SACxF;QACD,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAC1B,eAAe,CACb,QAAQ,EACR;YACE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;YACtB,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YAClB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClF,EACD,EAAE,CACH;KACJ;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EACT,qFAAqF;YACrF,0EAA0E;QAC5E,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YACxC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;SAClD;QACD,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;YAC1B,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;YAC9E,MAAM,IAAI,GAAG,mBAAmB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC;YACjE,OAAO,iBAAiB,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC;KACF;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EACT,2FAA2F;YAC3F,yFAAyF;YACzF,wDAAwD;QAC1D,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YACxC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YACjD,gBAAgB,EAAE,CAAC;iBAChB,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,gEAAgE,CAAC;YAC7E,sBAAsB,EAAE,CAAC;iBACtB,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,mEAAmE,CAAC;SACjF;QACD,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAC1B,mBAAmB,CACjB,QAAQ,EACR;YACE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;YACtB,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YAClB,OAAO,EAAE,KAAK,EAAE,iDAAiD;YACjE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjF,EACD,EAAE,CACH;KACJ;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,+EAA+E;QAC5F,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;YACvE,MAAM,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;YAClE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;YAClF,mBAAmB,EAAE,CAAC;iBACnB,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,mDAAmD,CAAC;SACjE;QACD,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAC1B,gBAAgB,CACd,QAAQ,EACR;YACE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;YACxB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9E,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3E,EACD,EAAE,CACH;KACJ;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,0FAA0F;YAC1F,uFAAuF;YACvF,6FAA6F;QAC/F,WAAW,EAAE;YACX,EAAE,EAAE,CAAC;iBACF,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;iBACjB,QAAQ,EAAE;iBACV,QAAQ,CAAC,qDAAqD,CAAC;YAClE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;YAC9E,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;YAC7F,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;YAC3F,oBAAoB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;YACpF,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YACpF,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YAC7F,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;YAClF,oBAAoB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;YACpG,sBAAsB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;YACrG,yBAAyB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;YACzG,mBAAmB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;YAC3G,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;SAC1F;QACD,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;YAC1B,MAAM,KAAK,GAA6B;gBACtC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,mBAAmB;gBACtF,iBAAiB,EAAE,sBAAsB,EAAE,wBAAwB;gBACnE,2BAA2B,EAAE,qBAAqB,EAAE,kBAAkB;aACvE,CAAC;YACF,MAAM,IAAI,GAA4B,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;YAC7D,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1D,KAAK,MAAM,CAAC,IAAI,KAAK;gBAAE,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YAC3D,OAAO,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3C,CAAC;KACF;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,qFAAqF;QAClG,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YACxC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YACjD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YACnD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;SACxF;QACD,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAC1B,cAAc,CACZ,QAAQ,EACR;YACE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;YACtB,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YAClB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClF,EACD,EAAE,CACH;KACJ;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EACT,+FAA+F;QACjG,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YACxC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YACjD,sBAAsB,EAAE,CAAC;iBACtB,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,gDAAgD,CAAC;SAC9D;QACD,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAC1B,kBAAkB,CAChB,QAAQ,EACR;YACE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;YACtB,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YAClB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjF,EACD,EAAE,CACH;KACJ;CACF,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { CommandIO, CommandResult } from './io.js';
2
+ /**
3
+ * `cadence build task <id>` — record a task outcome (runs the per-task verifier
4
+ * gate on DONE). Faithful extraction of the former CLI action body.
5
+ */
6
+ export declare function buildTaskService(repoRoot: string, args: {
7
+ taskId: string;
8
+ status?: string;
9
+ notes?: string;
10
+ allowPerTaskFailure?: boolean;
11
+ }, io: CommandIO): Promise<CommandResult>;
12
+ //# sourceMappingURL=build-task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-task.d.ts","sourceRoot":"","sources":["../../src/services/build-task.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExD;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAE,EACxF,EAAE,EAAE,SAAS,GACZ,OAAO,CAAC,aAAa,CAAC,CAsExB"}