infinity-harness 2.8.9 → 2.8.11

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 (192) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/extensions/infinity-harness/index.js +3614 -0
  3. package/dist/extensions/infinity-harness/index.js.map +1 -0
  4. package/dist/src/approval.js +154 -0
  5. package/dist/src/approval.js.map +1 -0
  6. package/dist/src/core/brief.js +309 -0
  7. package/dist/src/core/brief.js.map +1 -0
  8. package/dist/src/core/config.js +539 -0
  9. package/dist/src/core/config.js.map +1 -0
  10. package/dist/src/core/exec.js +106 -0
  11. package/dist/src/core/exec.js.map +1 -0
  12. package/dist/src/core/featureList.js +365 -0
  13. package/dist/src/core/featureList.js.map +1 -0
  14. package/dist/src/core/fsx.js +123 -0
  15. package/dist/src/core/fsx.js.map +1 -0
  16. package/dist/src/core/gates.js +490 -0
  17. package/dist/src/core/gates.js.map +1 -0
  18. package/dist/src/core/init.js +480 -0
  19. package/dist/src/core/init.js.map +1 -0
  20. package/dist/src/core/lock.js +183 -0
  21. package/dist/src/core/lock.js.map +1 -0
  22. package/dist/src/core/modelRouter.js +185 -0
  23. package/dist/src/core/modelRouter.js.map +1 -0
  24. package/dist/src/core/paths.js +129 -0
  25. package/dist/src/core/paths.js.map +1 -0
  26. package/dist/src/core/phases.js +254 -0
  27. package/dist/src/core/phases.js.map +1 -0
  28. package/dist/src/core/plan.js +15 -0
  29. package/dist/src/core/plan.js.map +1 -0
  30. package/dist/src/core/runState.js +126 -0
  31. package/dist/src/core/runState.js.map +1 -0
  32. package/dist/src/core/settings.js +877 -0
  33. package/dist/src/core/settings.js.map +1 -0
  34. package/dist/src/core/skills.js +319 -0
  35. package/dist/src/core/skills.js.map +1 -0
  36. package/dist/src/core/skillsAudit.js +194 -0
  37. package/dist/src/core/skillsAudit.js.map +1 -0
  38. package/dist/src/core/types.js +77 -0
  39. package/dist/src/core/types.js.map +1 -0
  40. package/dist/src/daemon/budget.js +85 -0
  41. package/dist/src/daemon/budget.js.map +1 -0
  42. package/dist/src/daemon/guard.js +122 -0
  43. package/dist/src/daemon/guard.js.map +1 -0
  44. package/dist/src/daemon/index.js +461 -0
  45. package/dist/src/daemon/index.js.map +1 -0
  46. package/dist/src/daemon/isolation.js +84 -0
  47. package/dist/src/daemon/isolation.js.map +1 -0
  48. package/dist/src/daemon/preflight.js +131 -0
  49. package/dist/src/daemon/preflight.js.map +1 -0
  50. package/dist/src/daemon/server.js +174 -0
  51. package/dist/src/daemon/server.js.map +1 -0
  52. package/dist/src/daemon/supervisorState.js +42 -0
  53. package/dist/src/daemon/supervisorState.js.map +1 -0
  54. package/dist/src/daemon/worker.js +239 -0
  55. package/dist/src/daemon/worker.js.map +1 -0
  56. package/dist/src/daemon/worktree.js +102 -0
  57. package/dist/src/daemon/worktree.js.map +1 -0
  58. package/dist/src/escalate.js +312 -0
  59. package/dist/src/escalate.js.map +1 -0
  60. package/dist/src/exec/piWorker.js +630 -0
  61. package/dist/src/exec/piWorker.js.map +1 -0
  62. package/dist/src/goal.js +317 -0
  63. package/dist/src/goal.js.map +1 -0
  64. package/dist/src/goalLoop.js +374 -0
  65. package/dist/src/goalLoop.js.map +1 -0
  66. package/dist/src/goalSpec.js +397 -0
  67. package/dist/src/goalSpec.js.map +1 -0
  68. package/dist/src/goalState.js +255 -0
  69. package/dist/src/goalState.js.map +1 -0
  70. package/dist/src/handoff.js +205 -0
  71. package/dist/src/handoff.js.map +1 -0
  72. package/dist/src/intake.js +203 -0
  73. package/dist/src/intake.js.map +1 -0
  74. package/dist/src/loop.js +592 -0
  75. package/dist/src/loop.js.map +1 -0
  76. package/dist/src/modelRouter.js +216 -0
  77. package/dist/src/modelRouter.js.map +1 -0
  78. package/dist/src/remote.js +246 -0
  79. package/dist/src/remote.js.map +1 -0
  80. package/dist/src/replan.js +262 -0
  81. package/dist/src/replan.js.map +1 -0
  82. package/dist/src/review.js +54 -0
  83. package/dist/src/review.js.map +1 -0
  84. package/dist/src/rework.js +241 -0
  85. package/dist/src/rework.js.map +1 -0
  86. package/dist/src/runState.js +4 -0
  87. package/dist/src/runState.js.map +1 -0
  88. package/dist/src/scheduler.js +270 -0
  89. package/dist/src/scheduler.js.map +1 -0
  90. package/dist/src/supervisor.js +787 -0
  91. package/dist/src/supervisor.js.map +1 -0
  92. package/dist/src/taskList.js +430 -0
  93. package/dist/src/taskList.js.map +1 -0
  94. package/dist/src/ui/config.js +268 -0
  95. package/dist/src/ui/config.js.map +1 -0
  96. package/dist/src/ui/dashboard.js +1288 -0
  97. package/dist/src/ui/dashboard.js.map +1 -0
  98. package/dist/src/ui/display.js +229 -0
  99. package/dist/src/ui/display.js.map +1 -0
  100. package/dist/src/ui/planTree.js +219 -0
  101. package/dist/src/ui/planTree.js.map +1 -0
  102. package/dist/src/ui/theme.js +298 -0
  103. package/dist/src/ui/theme.js.map +1 -0
  104. package/dist/src/ui/viewState.js +65 -0
  105. package/dist/src/ui/viewState.js.map +1 -0
  106. package/dist/src/ui/widget.js +721 -0
  107. package/dist/src/ui/widget.js.map +1 -0
  108. package/dist/src/ui/wizard.js +540 -0
  109. package/dist/src/ui/wizard.js.map +1 -0
  110. package/dist/src/unstuck.js +210 -0
  111. package/dist/src/unstuck.js.map +1 -0
  112. package/dist/src/worker.js +267 -0
  113. package/dist/src/worker.js.map +1 -0
  114. package/dist/src/workflow.js +250 -0
  115. package/dist/src/workflow.js.map +1 -0
  116. package/dist/tests/approval.test.js +144 -0
  117. package/dist/tests/approval.test.js.map +1 -0
  118. package/dist/tests/brief.test.js +271 -0
  119. package/dist/tests/brief.test.js.map +1 -0
  120. package/dist/tests/config.test.js +320 -0
  121. package/dist/tests/config.test.js.map +1 -0
  122. package/dist/tests/dashboard.test.js +277 -0
  123. package/dist/tests/dashboard.test.js.map +1 -0
  124. package/dist/tests/display.test.js +229 -0
  125. package/dist/tests/display.test.js.map +1 -0
  126. package/dist/tests/escalate.test.js +272 -0
  127. package/dist/tests/escalate.test.js.map +1 -0
  128. package/dist/tests/featureList.test.js +429 -0
  129. package/dist/tests/featureList.test.js.map +1 -0
  130. package/dist/tests/gates.test.js +333 -0
  131. package/dist/tests/gates.test.js.map +1 -0
  132. package/dist/tests/goal.test.js +229 -0
  133. package/dist/tests/goal.test.js.map +1 -0
  134. package/dist/tests/goalLoop.test.js +170 -0
  135. package/dist/tests/goalLoop.test.js.map +1 -0
  136. package/dist/tests/goalSpec.test.js +146 -0
  137. package/dist/tests/goalSpec.test.js.map +1 -0
  138. package/dist/tests/goalState.test.js +202 -0
  139. package/dist/tests/goalState.test.js.map +1 -0
  140. package/dist/tests/handoff.test.js +127 -0
  141. package/dist/tests/handoff.test.js.map +1 -0
  142. package/dist/tests/init.test.js +264 -0
  143. package/dist/tests/init.test.js.map +1 -0
  144. package/dist/tests/intake.test.js +288 -0
  145. package/dist/tests/intake.test.js.map +1 -0
  146. package/dist/tests/loop.test.js +453 -0
  147. package/dist/tests/loop.test.js.map +1 -0
  148. package/dist/tests/modelRouter.test.js +131 -0
  149. package/dist/tests/modelRouter.test.js.map +1 -0
  150. package/dist/tests/phases.test.js +244 -0
  151. package/dist/tests/phases.test.js.map +1 -0
  152. package/dist/tests/planTree.test.js +190 -0
  153. package/dist/tests/planTree.test.js.map +1 -0
  154. package/dist/tests/remote.test.js +380 -0
  155. package/dist/tests/remote.test.js.map +1 -0
  156. package/dist/tests/replan.test.js +113 -0
  157. package/dist/tests/replan.test.js.map +1 -0
  158. package/dist/tests/review.test.js +77 -0
  159. package/dist/tests/review.test.js.map +1 -0
  160. package/dist/tests/rework.test.js +109 -0
  161. package/dist/tests/rework.test.js.map +1 -0
  162. package/dist/tests/routing-live.test.js +121 -0
  163. package/dist/tests/routing-live.test.js.map +1 -0
  164. package/dist/tests/runState.test.js +73 -0
  165. package/dist/tests/runState.test.js.map +1 -0
  166. package/dist/tests/settings.test.js +311 -0
  167. package/dist/tests/settings.test.js.map +1 -0
  168. package/dist/tests/skills.test.js +387 -0
  169. package/dist/tests/skills.test.js.map +1 -0
  170. package/dist/tests/supervisor.test.js +437 -0
  171. package/dist/tests/supervisor.test.js.map +1 -0
  172. package/dist/tests/surface.test.js +203 -0
  173. package/dist/tests/surface.test.js.map +1 -0
  174. package/dist/tests/taskList.test.js +376 -0
  175. package/dist/tests/taskList.test.js.map +1 -0
  176. package/dist/tests/theme.test.js +149 -0
  177. package/dist/tests/theme.test.js.map +1 -0
  178. package/dist/tests/unstuck.test.js +268 -0
  179. package/dist/tests/unstuck.test.js.map +1 -0
  180. package/dist/tests/widget.test.js +424 -0
  181. package/dist/tests/widget.test.js.map +1 -0
  182. package/dist/tests/worker.test.js +306 -0
  183. package/dist/tests/worker.test.js.map +1 -0
  184. package/dist/tests/workflow.test.js +187 -0
  185. package/dist/tests/workflow.test.js.map +1 -0
  186. package/extensions/infinity-harness/index.ts +39 -12
  187. package/package.json +5 -2
  188. package/src/core/modelRouter.ts +23 -1
  189. package/src/daemon/index.ts +3 -3
  190. package/src/daemon/worker.ts +28 -5
  191. package/src/ui/config.ts +25 -1
  192. package/src/ui/wizard.ts +10 -5
@@ -0,0 +1,539 @@
1
+ /**
2
+ * infinity-harness — harness/config.json load, save, and mutation helpers.
3
+ *
4
+ * The config is the pipeline's control state: which phase, which feature/task,
5
+ * how many retries are burnt, and what the gate history looks like. It is
6
+ * read on nearly every call, so it is deliberately cheap to load and always
7
+ * deep-merged over defaults — an older config missing new keys still works.
8
+ */
9
+ import { DEFAULT_ENABLED_PHASES, PHASE_ROLE } from "./types.js";
10
+ import { defaultDisplay, normalizeDisplay } from "../ui/display.js";
11
+ import { configPath, modelRouterPath } from "./paths.js";
12
+ import { readJson, writeJsonAtomic, backupOnce, fileExists } from "./fsx.js";
13
+ import { existsSync, readFileSync } from "node:fs";
14
+ export const DEFAULT_MAX_RETRIES = 10;
15
+ export const DEFAULT_FEATURE_RETRIES = 2;
16
+ export const DEFAULT_PHASE_RETRIES = 2;
17
+ export const COVERAGE_THRESHOLD_DEFAULT = 80;
18
+ export const PILOT_MODES = ["copilot", "autopilot", "full"];
19
+ export const DEFAULT_LIMITS = {
20
+ unitWallClockMs: 30 * 60 * 1000,
21
+ maxRecycles: 2,
22
+ maxReworkPerUnit: 2,
23
+ maxReplansPerPhase: 3,
24
+ tokenCap: null,
25
+ costCap: null,
26
+ };
27
+ function normalizeTiers(raw) {
28
+ if (!raw || typeof raw !== "object" || Array.isArray(raw))
29
+ return undefined;
30
+ const out = {};
31
+ for (const [k, v] of Object.entries(raw)) {
32
+ if (!["A", "B", "C", "D", "X"].includes(k))
33
+ continue;
34
+ if (!v || typeof v !== "object" || Array.isArray(v))
35
+ continue;
36
+ const vv = v;
37
+ if (typeof vv.provider !== "string" || typeof vv.id !== "string")
38
+ continue;
39
+ out[k] = { provider: String(vv.provider), id: String(vv.id), ...(typeof vv.thinkingLevel === "string" ? { thinkingLevel: vv.thinkingLevel } : {}) };
40
+ }
41
+ return out;
42
+ }
43
+ /** Cap on gateHistory length. Unbounded growth is a real problem on multi-day runs. */
44
+ export const GATE_HISTORY_LIMIT = 500;
45
+ export function defaultConfig() {
46
+ return {
47
+ version: "2.0",
48
+ stack: null,
49
+ mode: "copilot",
50
+ pilot: "autopilot",
51
+ tiers: {},
52
+ limits: { ...DEFAULT_LIMITS },
53
+ currentPhase: null,
54
+ currentRole: null,
55
+ currentFeature: null,
56
+ currentTask: null,
57
+ paused: false,
58
+ features: { remaining: 0, passing: 0, total: 0 },
59
+ gates: {
60
+ enabled: true,
61
+ checks: ["all"],
62
+ coverage: { enabled: false, threshold: COVERAGE_THRESHOLD_DEFAULT },
63
+ cleanState: { enabled: false, stalePatterns: [], startupCmd: null },
64
+ antiPlaceholder: { enabled: true, patterns: [] },
65
+ },
66
+ commands: { lint: null, test: null, coverage: null, build: null },
67
+ git: {
68
+ autoCommit: false,
69
+ autoTag: false,
70
+ branch: null,
71
+ clean: true,
72
+ hasUpstream: false,
73
+ lastCommitMessage: null,
74
+ },
75
+ phases: { enabled: [...DEFAULT_ENABLED_PHASES] },
76
+ roles: { strict: false },
77
+ researchDepth: "deep",
78
+ session: { handoff: "task", contextThreshold: 0.6, carryNotes: true },
79
+ execution: { engine: "background", parallelAt: "task", maxWorkers: 3, isolation: "worktree" },
80
+ approvals: { research: false, define: false, plan: false },
81
+ phaseModes: Object.fromEntries(DEFAULT_ENABLED_PHASES.map((p) => [p, "autopilot"])),
82
+ workflow: { id: "autopilot", name: "autopilot" },
83
+ display: defaultDisplay(),
84
+ intake: { completed: false, brief: null, at: null },
85
+ awaitingApproval: null,
86
+ loop: {
87
+ maxIterations: 2000,
88
+ maxWallClockMs: 24 * 60 * 60 * 1000,
89
+ noProgressLimit: 3,
90
+ },
91
+ retry: {
92
+ tasks: { enabled: true, maxRetries: null },
93
+ features: { enabled: false, maxRetries: DEFAULT_FEATURE_RETRIES },
94
+ phases: { enabled: false, maxRetries: DEFAULT_PHASE_RETRIES },
95
+ levels: {
96
+ goal: { enabled: false, maxRetries: 2 },
97
+ phase: { enabled: false, maxRetries: DEFAULT_PHASE_RETRIES },
98
+ sprint: { enabled: false, maxRetries: DEFAULT_FEATURE_RETRIES },
99
+ feature: { enabled: false, maxRetries: DEFAULT_FEATURE_RETRIES },
100
+ task: { enabled: true, maxRetries: null },
101
+ subtask: { enabled: false, maxRetries: 3 },
102
+ },
103
+ },
104
+ maxRetries: DEFAULT_MAX_RETRIES,
105
+ retryCount: 0,
106
+ taskRetryCount: 0,
107
+ featureRetryCount: 0,
108
+ phaseRetryCount: 0,
109
+ retryPerLevel: {},
110
+ pipelineIteration: 0,
111
+ gateHistory: [],
112
+ };
113
+ }
114
+ function isPlainObject(v) {
115
+ return typeof v === "object" && v !== null && !Array.isArray(v);
116
+ }
117
+ /** Deep-merge `partial` over `defaults`. Arrays are replaced, not merged. */
118
+ function deepMerge(defaults, partial) {
119
+ if (!isPlainObject(partial))
120
+ return defaults;
121
+ if (!isPlainObject(defaults))
122
+ return partial;
123
+ const out = { ...defaults };
124
+ for (const [k, v] of Object.entries(partial)) {
125
+ const d = defaults[k];
126
+ out[k] = isPlainObject(v) && isPlainObject(d) ? deepMerge(d, v) : v;
127
+ }
128
+ return out;
129
+ }
130
+ /**
131
+ * Bring an older config forward on read.
132
+ *
133
+ * 2.3 had a three-phase `approvals` switch; 2.4 has a mode for every phase.
134
+ * A project mid-run must not lose the approvals it was configured with just
135
+ * because the shape moved, and nobody should have to edit JSON to upgrade.
136
+ * The migration is read-only — it takes effect on the next save like any other
137
+ * change — so a downgrade still finds the old field where it left it.
138
+ */
139
+ function migrate(config, stored) {
140
+ const out = config;
141
+ const phases = Array.isArray(config.phases?.enabled) ? config.phases.enabled : [...DEFAULT_ENABLED_PHASES];
142
+ // pilot default for v2.x configs
143
+ if (!stored.pilot || typeof stored.pilot !== "string" || !PILOT_MODES.includes(stored.pilot)) {
144
+ // v2.x closest to autopilot
145
+ if (!("pilot" in stored))
146
+ out.pilot = "autopilot";
147
+ }
148
+ // limits defaults
149
+ if (!stored.limits || typeof stored.limits !== "object") {
150
+ out.limits = { ...DEFAULT_LIMITS };
151
+ }
152
+ else {
153
+ const lim = out.limits;
154
+ for (const k of Object.keys(DEFAULT_LIMITS))
155
+ if (!(k in lim))
156
+ lim[k] = DEFAULT_LIMITS[k];
157
+ }
158
+ // execution.isolation + maxWorkers default bump-down until worktrees
159
+ const exec = out.execution;
160
+ if (exec) {
161
+ if (!("isolation" in exec) || (exec.isolation !== "worktree" && exec.isolation !== "none"))
162
+ exec.isolation = "worktree";
163
+ // v3.0 sequential default: stored without execution.maxWorkers keeps default 1 (no migration needed).
164
+ // Null op — defaults already set via deepMerge; no explicit clamp.
165
+ // Clamp parallelAt finer than handoff
166
+ const order = ["off", "goal", "phase", "sprint", "feature", "task", "subtask"];
167
+ const handoff = config.session?.handoff ?? "task";
168
+ const parallelAt = typeof exec.parallelAt === "string" ? exec.parallelAt : "task";
169
+ const hIdx = order.indexOf(handoff);
170
+ const pIdx = order.indexOf(parallelAt);
171
+ if (pIdx !== -1 && hIdx !== -1 && pIdx > hIdx) {
172
+ // parallelAt finer than handoff — clamp and log via console (no throw)
173
+ exec.parallelAt = handoff;
174
+ try {
175
+ console.warn(`[config] parallelAt "${parallelAt}" finer than handoff "${handoff}" — clamped to "${handoff}".`);
176
+ }
177
+ catch { }
178
+ }
179
+ // isolation none forces maxWorkers 1
180
+ if (exec.isolation === "none" && typeof exec.maxWorkers === "number" && exec.maxWorkers > 1) {
181
+ exec.maxWorkers = 1;
182
+ }
183
+ }
184
+ // tiers: validate + migrate from model-router.json if empty
185
+ // C: single source — config.tiers is truth; legacy file migrates in.
186
+ // When config.tiers is {} and harness/model-router.json exists with
187
+ // byDifficulty/master/default, populate A=default, B=easy, C=moderate, D=difficult, X=master.
188
+ {
189
+ const t = normalizeTiers(out.tiers);
190
+ if (t !== undefined && Object.keys(t).length > 0) {
191
+ out.tiers = t;
192
+ }
193
+ else {
194
+ // targetDir not available in migrate(); migration happens in loadConfig where targetDir is known.
195
+ out.tiers = t ?? {};
196
+ }
197
+ }
198
+ // The signal is what the *file* had, not what the merge produced: defaults
199
+ // supply a `phaseModes` for every phase, so a merged config always looks
200
+ // migrated and the old approvals would be silently dropped.
201
+ const hadModes = typeof stored.phaseModes === "object" &&
202
+ stored.phaseModes !== null &&
203
+ Object.keys(stored.phaseModes).length > 0;
204
+ if (!hadModes) {
205
+ const approvals = (stored.approvals ?? {});
206
+ const next = {};
207
+ for (const p of phases)
208
+ next[p] = approvals[p] === true ? "copilot" : "autopilot";
209
+ out.phaseModes = next;
210
+ if (!stored.workflow) {
211
+ const signed = phases.filter((p) => next[p] === "copilot");
212
+ out.workflow =
213
+ signed.length === 0
214
+ ? { id: "autopilot", name: "autopilot" }
215
+ : { id: "copilot", name: "copilot" };
216
+ }
217
+ }
218
+ config.display = normalizeDisplay(config.display);
219
+ // Pilot preset -> phaseModes helper: full means all autopilot; stored phaseModes still authoritative after migration.
220
+ // We keep model-router.json migration delayed — requires targetDir. Do it in loadConfig wrapper.
221
+ return config;
222
+ }
223
+ export function applyPilotPreset(config, pilot) {
224
+ const all = [...DEFAULT_ENABLED_PHASES, "init", "research", "simplify"];
225
+ if (pilot === "full") {
226
+ for (const p of all)
227
+ config.phaseModes[p] = "autopilot";
228
+ }
229
+ else if (pilot === "autopilot") {
230
+ for (const p of all) {
231
+ if (["build", "verify", "simplify"].includes(p))
232
+ config.phaseModes[p] = "autopilot";
233
+ else if (["define", "plan", "ship"].includes(p))
234
+ config.phaseModes[p] = "copilot";
235
+ else if (p === "research")
236
+ config.phaseModes[p] = "autopilot";
237
+ }
238
+ }
239
+ else if (pilot === "copilot") {
240
+ for (const p of all)
241
+ config.phaseModes[p] = "copilot";
242
+ }
243
+ }
244
+ /**
245
+ * Load config, merged over defaults.
246
+ *
247
+ * A missing file yields defaults with `ok:false` (the project is not
248
+ * initialised). A corrupt file yields defaults with an error — never a throw,
249
+ * because every lifecycle hook calls this and a crash there kills the session.
250
+ */
251
+ export function loadConfig(targetDir) {
252
+ const path = configPath(targetDir);
253
+ if (!fileExists(path)) {
254
+ return { ok: false, config: defaultConfig(), error: "no harness/config.json", seeded: true };
255
+ }
256
+ try {
257
+ const raw = readJson(path);
258
+ if (raw === null) {
259
+ return { ok: false, config: defaultConfig(), error: "harness/config.json is empty", seeded: true };
260
+ }
261
+ let cfg = migrate(deepMerge(defaultConfig(), raw), raw);
262
+ // C: migrate legacy harness/model-router.json -> config.tiers when empty.
263
+ // In-memory only until next saveConfig; legacy file kept for one release.
264
+ try {
265
+ const tiersNow = cfg.tiers ?? {};
266
+ if (Object.keys(tiersNow).length === 0) {
267
+ const mrPath = modelRouterPath(targetDir);
268
+ if (existsSync(mrPath)) {
269
+ const rawMr = JSON.parse(readFileSync(mrPath, "utf-8"));
270
+ if (typeof rawMr?.enabled === "boolean" && rawMr.enabled) {
271
+ const byDiff = rawMr.byDifficulty ?? {};
272
+ const toTier = (ref) => {
273
+ if (!ref || !ref.trim())
274
+ return null;
275
+ const s = ref.trim();
276
+ const slash = s.indexOf("/");
277
+ if (slash <= 0 || slash === s.length - 1)
278
+ return null;
279
+ return { provider: s.slice(0, slash), id: s.slice(slash + 1) };
280
+ };
281
+ const next = {};
282
+ const thinkByDiff = rawMr.thinkingByDifficulty ?? {};
283
+ const tLvl = (k) => {
284
+ const v = thinkByDiff[k];
285
+ return typeof v === "string" && v.trim() ? v.trim() : undefined;
286
+ };
287
+ // A = default
288
+ const a = toTier(rawMr.default);
289
+ if (a)
290
+ next["A"] = { ...a, ...(tLvl("__default__") || rawMr.thinkingDefault ? { thinkingLevel: (rawMr.thinkingDefault || tLvl("__default__") || undefined) } : {}) };
291
+ // B/C/D from byDifficulty
292
+ const want = [["B", "easy"], ["C", "moderate"], ["D", "difficult"]];
293
+ for (const [tier, diff] of want) {
294
+ const m = toTier(byDiff[diff]);
295
+ if (m) {
296
+ const tl = tLvl(diff) || undefined;
297
+ next[tier] = tl ? { ...m, thinkingLevel: tl } : m;
298
+ }
299
+ }
300
+ // X = master
301
+ const x = toTier(rawMr.master);
302
+ if (x) {
303
+ const masterTl = rawMr.thinkingMaster;
304
+ next["X"] = masterTl ? { ...x, thinkingLevel: masterTl } : x;
305
+ }
306
+ // also fill A thinkingDefault correctly (override above if needed)
307
+ if (next["A"] && rawMr.thinkingDefault) {
308
+ next["A"].thinkingLevel = rawMr.thinkingDefault;
309
+ }
310
+ if (Object.keys(next).length > 0) {
311
+ cfg.tiers = next;
312
+ }
313
+ }
314
+ }
315
+ }
316
+ }
317
+ catch { }
318
+ return { ok: true, config: cfg, error: null, seeded: false };
319
+ }
320
+ catch (e) {
321
+ const msg = e instanceof Error ? e.message : String(e);
322
+ return { ok: false, config: defaultConfig(), error: msg, seeded: false };
323
+ }
324
+ }
325
+ export function saveConfig(targetDir, config) {
326
+ const path = configPath(targetDir);
327
+ try {
328
+ trimGateHistory(config);
329
+ backupOnce(path);
330
+ writeJsonAtomic(path, config);
331
+ return { ok: true, error: null };
332
+ }
333
+ catch (e) {
334
+ return { ok: false, error: e instanceof Error ? e.message : String(e) };
335
+ }
336
+ }
337
+ export function isHarnessProject(targetDir) {
338
+ return fileExists(configPath(targetDir));
339
+ }
340
+ // ── Gate history ────────────────────────────────────────────────────────────
341
+ export function trimGateHistory(config) {
342
+ if (!Array.isArray(config.gateHistory)) {
343
+ config.gateHistory = [];
344
+ return;
345
+ }
346
+ if (config.gateHistory.length > GATE_HISTORY_LIMIT) {
347
+ config.gateHistory = config.gateHistory.slice(-GATE_HISTORY_LIMIT);
348
+ }
349
+ }
350
+ export function recordGate(config, phase, result, scope) {
351
+ if (!Array.isArray(config.gateHistory))
352
+ config.gateHistory = [];
353
+ const entry = {
354
+ phase,
355
+ result,
356
+ timestamp: new Date().toISOString(),
357
+ ...(scope?.feature ? { feature: scope.feature } : {}),
358
+ ...(scope?.task ? { task: scope.task } : {}),
359
+ };
360
+ // Two callers record the same *pass*: `runChecks` when the gate is run, and
361
+ // `transitionPhase` when that verdict lets the pipeline leave the phase. The
362
+ // history read `research:pass → research:pass → define:pass → define:pass`,
363
+ // which reads as a phase that had to be attempted twice — the opposite of
364
+ // what happened. The same pass is not two passes.
365
+ //
366
+ // Repeated *failures* are never collapsed: five failures on one phase is
367
+ // exactly the fact a human comes back to read.
368
+ const last = config.gateHistory[config.gateHistory.length - 1];
369
+ const duplicatePass = result === "pass" &&
370
+ last !== undefined &&
371
+ last.phase === entry.phase &&
372
+ last.result === "pass" &&
373
+ (last.feature ?? null) === (entry.feature ?? null) &&
374
+ (last.task ?? null) === (entry.task ?? null);
375
+ if (duplicatePass)
376
+ return;
377
+ config.gateHistory.push(entry);
378
+ trimGateHistory(config);
379
+ }
380
+ const LEVEL_DEFAULTS = {
381
+ goal: 2,
382
+ phase: DEFAULT_PHASE_RETRIES,
383
+ sprint: DEFAULT_FEATURE_RETRIES,
384
+ feature: DEFAULT_FEATURE_RETRIES,
385
+ task: DEFAULT_MAX_RETRIES,
386
+ subtask: 3,
387
+ };
388
+ /** Resolve retry budgets, seeding task retries from the legacy `maxRetries`. */
389
+ export function getRetryConfig(config) {
390
+ const legacy = typeof config.maxRetries === "number" ? config.maxRetries : DEFAULT_MAX_RETRIES;
391
+ const r = (config.retry ?? defaultConfig().retry);
392
+ const levels = {};
393
+ for (const k of ["goal", "phase", "sprint", "feature", "task", "subtask"]) {
394
+ const bucket = r.levels ? r.levels[k] : undefined;
395
+ const defEnabled = k === "task";
396
+ const defMax = LEVEL_DEFAULTS[k] ?? DEFAULT_MAX_RETRIES;
397
+ const enabled = bucket ? (bucket.enabled ?? defEnabled) : defEnabled;
398
+ const rawMax = bucket ? (bucket.maxRetries ?? null) : null;
399
+ // Unset task level inherits legacy maxRetries
400
+ const max = rawMax === null ? (k === "task" ? legacy : defMax) : rawMax;
401
+ levels[k] = { enabled, max };
402
+ }
403
+ // Also keep legacy per-name budgets for compatibility
404
+ return {
405
+ tasks: { enabled: r.tasks?.enabled ?? true, max: r.tasks?.maxRetries ?? legacy },
406
+ features: { enabled: r.features?.enabled ?? false, max: r.features?.maxRetries ?? DEFAULT_FEATURE_RETRIES },
407
+ phases: { enabled: r.phases?.enabled ?? false, max: r.phases?.maxRetries ?? DEFAULT_PHASE_RETRIES },
408
+ levels,
409
+ };
410
+ }
411
+ /** Generic per-level retry counter helpers (zero on pass, escalate on exhaustion). */
412
+ export function getRetryLevel(config, level) {
413
+ const m = (config.retryPerLevel ?? {});
414
+ return typeof m[level] === "number" ? m[level] : 0;
415
+ }
416
+ export function resetRetryLevel(config, level) {
417
+ if (!config.retryPerLevel)
418
+ config.retryPerLevel = {};
419
+ config.retryPerLevel[level] = 0;
420
+ // keep legacy counters in step
421
+ if (level === "task")
422
+ config.taskRetryCount = 0;
423
+ if (level === "feature")
424
+ config.featureRetryCount = 0;
425
+ if (level === "phase") {
426
+ config.phaseRetryCount = 0;
427
+ config.retryCount = 0;
428
+ }
429
+ }
430
+ export function incrementRetryLevel(config, level) {
431
+ if (!config.retryPerLevel)
432
+ config.retryPerLevel = {};
433
+ const m = config.retryPerLevel;
434
+ m[level] = (m[level] ?? 0) + 1;
435
+ if (level === "task")
436
+ config.taskRetryCount = m[level];
437
+ if (level === "feature")
438
+ config.featureRetryCount = m[level];
439
+ if (level === "phase") {
440
+ config.phaseRetryCount = m[level];
441
+ config.retryCount = m[level];
442
+ }
443
+ return m[level];
444
+ }
445
+ /** Zero all strictly lower levels than `passedLevel` on a pass (e.g. task pass zeroes subtask). */
446
+ export function zeroLowerOnPass(config, passedLevel) {
447
+ const order = ["goal", "phase", "sprint", "feature", "task", "subtask"];
448
+ const idx = order.indexOf(passedLevel);
449
+ if (idx === -1)
450
+ return;
451
+ for (let i = idx + 1; i < order.length; i++) {
452
+ const lower = order[i];
453
+ if (getRetryLevel(config, lower) !== 0)
454
+ resetRetryLevel(config, lower);
455
+ }
456
+ }
457
+ export function resetTaskRetry(config) {
458
+ resetRetryLevel(config, "task");
459
+ }
460
+ export function incrementTaskRetry(config) {
461
+ return incrementRetryLevel(config, "task");
462
+ }
463
+ export function resetFeatureRetry(config) {
464
+ resetRetryLevel(config, "feature");
465
+ }
466
+ export function incrementFeatureRetry(config) {
467
+ return incrementRetryLevel(config, "feature");
468
+ }
469
+ export function resetPhaseRetry(config) {
470
+ resetRetryLevel(config, "phase");
471
+ }
472
+ export function incrementPhaseRetry(config) {
473
+ return incrementRetryLevel(config, "phase");
474
+ }
475
+ /** True when any *enabled* retry budget is exhausted — the signal to escalate. */
476
+ export function isRetryExhausted(config) {
477
+ const r = getRetryConfig(config);
478
+ // Prefer per-level levels when enabled, but retain legacy task/feature/phase order for compatibility.
479
+ for (const lvl of ["subtask", "task", "feature", "sprint", "phase", "goal"]) {
480
+ const b = r.levels[lvl];
481
+ if (!b)
482
+ continue;
483
+ const cnt = getRetryLevel(config, lvl);
484
+ if (b.enabled && cnt >= b.max)
485
+ return { exhausted: true, which: lvl };
486
+ }
487
+ if (r.tasks.enabled && (config.taskRetryCount ?? 0) >= r.tasks.max)
488
+ return { exhausted: true, which: "task" };
489
+ if (r.features.enabled && (config.featureRetryCount ?? 0) >= r.features.max)
490
+ return { exhausted: true, which: "feature" };
491
+ if (r.phases.enabled && (config.phaseRetryCount ?? 0) >= r.phases.max)
492
+ return { exhausted: true, which: "phase" };
493
+ return { exhausted: false, which: null };
494
+ }
495
+ // ── Dotted get/set (used by the `config` command surface) ────────────────────
496
+ export function getKey(config, key) {
497
+ let cur = config;
498
+ for (const part of key.split(".")) {
499
+ if (!isPlainObject(cur))
500
+ return undefined;
501
+ cur = cur[part];
502
+ }
503
+ return cur;
504
+ }
505
+ export function setKey(config, key, value) {
506
+ const parts = key.split(".");
507
+ let cur = config;
508
+ for (let i = 0; i < parts.length - 1; i++) {
509
+ const p = parts[i];
510
+ if (!isPlainObject(cur[p]))
511
+ cur[p] = {};
512
+ cur = cur[p];
513
+ }
514
+ cur[parts[parts.length - 1]] = value;
515
+ }
516
+ /** Required-field check. `currentPhase` is legitimately null before INIT. */
517
+ export function validateConfig(config) {
518
+ const required = ["version", "mode", "gates", "git", "phases", "maxRetries"];
519
+ const missing = [];
520
+ for (const f of required) {
521
+ const v = config[f];
522
+ if (v === undefined || v === null)
523
+ missing.push(f);
524
+ }
525
+ if (!("currentPhase" in config))
526
+ missing.push("currentPhase");
527
+ return missing;
528
+ }
529
+ /**
530
+ * The role that owns a phase.
531
+ *
532
+ * This used to be a second copy of `PHASE_ROLE` written out longhand, which
533
+ * meant adding a phase compiled fine and then silently reported the wrong
534
+ * role for it. There is one table.
535
+ */
536
+ export function currentRoleFor(phase) {
537
+ return phase ? (PHASE_ROLE[phase] ?? null) : null;
538
+ }
539
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/config.ts"],"names":[],"mappings":"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"}