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,270 @@
1
+ /**
2
+ * infinity-harness — parallel scheduler.
3
+ *
4
+ * Picks which tasks can run now, respecting deps and the chosen
5
+ * parallel granularity, then spawns isolated workers for them.
6
+ * The main session never edits files; it only polls worker logs.
7
+ */
8
+ import { loadFeatureList, tasksForPhase, flattenTasks } from "./core/featureList.js";
9
+ import { loadRouterConfig, resolveModel } from "./modelRouter.js";
10
+ import { spawnIsolatedWorker } from "./worker.js";
11
+ import { runIdFor } from "./runState.js";
12
+ import { loadConfig } from "./core/config.js";
13
+ import { loadRunState } from "./core/runState.js";
14
+ import { isCapExceeded } from "./daemon/budget.js";
15
+ /** Difficulty ranking — higher wins when collapsing a bucket to its hardest. */
16
+ const DIFFICULTY_RANK = { easy: 1, moderate: 2, difficult: 3 };
17
+ function hardestDifficulty(tasks) {
18
+ let best;
19
+ let bestRank = -1;
20
+ for (const t of tasks) {
21
+ const d = t.difficulty;
22
+ if (!d)
23
+ continue;
24
+ const r = DIFFICULTY_RANK[d] ?? -1;
25
+ if (r > bestRank) {
26
+ bestRank = r;
27
+ best = d;
28
+ }
29
+ }
30
+ return best;
31
+ }
32
+ function goalIdForTask(task, list) {
33
+ const feat = list.features.find((f) => f.id === task.featureId);
34
+ if (!feat)
35
+ return (list.goals?.[0]?.id ?? null);
36
+ if (feat.goalId)
37
+ return feat.goalId;
38
+ if (feat.sprintId) {
39
+ const spr = (list.sprints ?? []).find((s) => s.id === feat.sprintId);
40
+ if (spr?.goalId)
41
+ return spr.goalId;
42
+ }
43
+ return (list.goals?.[0]?.id ?? null);
44
+ }
45
+ /**
46
+ * Effective difficulty for a task given the session handoff granularity.
47
+ *
48
+ * Design choice (Option A): the handoff bucket is the model bucket.
49
+ * Everything finer than the handoff shares the hardest model in that bucket:
50
+ * - handoff phase → all tasks in that phase share one model (hardest in phase)
51
+ * - handoff feature → tasks in feature share hardest in feature
52
+ * - handoff task → subtasks share their parent task's model
53
+ */
54
+ export function effectiveDifficultyForTask(task, handoff, list) {
55
+ const own = task.difficulty;
56
+ if (handoff === "task" || handoff === "subtask" || handoff === "off") {
57
+ if (handoff === "off") {
58
+ const globalHardest = hardestDifficulty(flattenTasks(list));
59
+ return globalHardest ?? own;
60
+ }
61
+ return own;
62
+ }
63
+ const all = flattenTasks(list);
64
+ let bucket = [];
65
+ if (handoff === "phase") {
66
+ const phase = task.effectivePhase ?? "build";
67
+ bucket = all.filter((t) => t.effectivePhase === phase);
68
+ }
69
+ else if (handoff === "feature") {
70
+ bucket = all.filter((t) => t.featureId === task.featureId);
71
+ }
72
+ else if (handoff === "sprint") {
73
+ const feat = list.features.find((f) => f.id === task.featureId);
74
+ const sid = feat?.sprintId;
75
+ if (!sid)
76
+ return own;
77
+ bucket = all.filter((t) => {
78
+ const f = list.features.find((ff) => ff.id === t.featureId);
79
+ return f?.sprintId === sid;
80
+ });
81
+ }
82
+ else if (handoff === "goal") {
83
+ const gid = goalIdForTask(task, list);
84
+ if (!gid)
85
+ return own;
86
+ bucket = all.filter((t) => goalIdForTask(t, list) === gid);
87
+ }
88
+ else {
89
+ return own;
90
+ }
91
+ return hardestDifficulty(bucket) ?? own;
92
+ }
93
+ export function handoffModelNote(handoff) {
94
+ switch (handoff) {
95
+ case "off":
96
+ case "goal":
97
+ return "Model per run (off/goal) — the whole run shares its hardest model; finer per-task routing requires task/subtask handoff";
98
+ case "phase":
99
+ return "Model per phase — tasks & subtasks in a phase share the hardest model in that phase";
100
+ case "sprint":
101
+ return "Model per sprint — tasks & subtasks in a sprint share the hardest model in that sprint";
102
+ case "feature":
103
+ return "Model per feature — tasks & subtasks in a feature share the hardest model in that feature";
104
+ case "task":
105
+ return "Model per task — subtasks share their parent task's model";
106
+ case "subtask":
107
+ return "Model per subtask — each subtask may use its own model (needs subtask difficulty)";
108
+ default:
109
+ return "";
110
+ }
111
+ }
112
+ // ── pick helpers ────────────────────────────────────────────────────────────
113
+ function isBudgetFull(targetDir) {
114
+ try {
115
+ const rs = loadRunState(targetDir);
116
+ if (!rs?.budget)
117
+ return false;
118
+ return isCapExceeded(rs.budget).exceeded;
119
+ }
120
+ catch {
121
+ return false;
122
+ }
123
+ }
124
+ function hasSerializeTask(tasks) {
125
+ return tasks.some((t) => t.serialize === true && (t.status === "pending" || t.status === "in_progress" || t.status === "rework"));
126
+ }
127
+ function pickSerializeTask(tasks, byKey, exclude) {
128
+ const serializeTask = tasks.find((t) => t.serialize === true &&
129
+ t.status === "pending" &&
130
+ (t.dependsOn ?? []).every((d) => {
131
+ const dep = byKey.get(d);
132
+ return dep !== undefined && dep.status === "complete";
133
+ }) &&
134
+ !exclude?.has(t.compositeKey) &&
135
+ !exclude?.has(t.id));
136
+ return serializeTask ?? null;
137
+ }
138
+ function isSerializeBlocked(tasks) {
139
+ return tasks.some((t) => t.serialize === true && (t.status === "in_progress" || t.status === "rework"));
140
+ }
141
+ function eligibleTasks(tasks, byKey, exclude) {
142
+ return tasks.filter((t) => {
143
+ if (t.status !== "pending")
144
+ return false;
145
+ if (exclude?.has(t.compositeKey) || exclude?.has(t.id))
146
+ return false;
147
+ const deps = t.dependsOn ?? [];
148
+ return deps.every((d) => {
149
+ const dep = byKey.get(d);
150
+ return dep !== undefined && dep.status === "complete";
151
+ });
152
+ });
153
+ }
154
+ function groupKeyFor(task, level, list) {
155
+ if (level === "task" || level === "subtask")
156
+ return task.compositeKey;
157
+ if (level === "feature")
158
+ return task.featureId;
159
+ if (level === "sprint") {
160
+ const feat = list.features.find((f) => f.id === task.featureId);
161
+ return feat?.sprintId ?? task.featureId;
162
+ }
163
+ if (level === "phase")
164
+ return task.effectivePhase ?? "build";
165
+ return task.compositeKey;
166
+ }
167
+ function roundRobin(groups, max) {
168
+ const out = [];
169
+ const groupArrays = [...groups.values()];
170
+ let idx = 0;
171
+ while (out.length < max && groupArrays.some((g) => g.length > 0)) {
172
+ const g = groupArrays[idx % groupArrays.length];
173
+ if (g.length > 0)
174
+ out.push(g.shift());
175
+ idx++;
176
+ if (idx > max * groupArrays.length + 10)
177
+ break;
178
+ }
179
+ return out.slice(0, max);
180
+ }
181
+ export function pickRunnableTasks(opts) {
182
+ const { list } = loadFeatureList(opts.targetDir);
183
+ const phase = (opts.phase ?? null);
184
+ const all = phase ? tasksForPhase(list, phase) : flattenTasks(list);
185
+ const byKey = new Map();
186
+ for (const t of all) {
187
+ byKey.set(t.compositeKey, t);
188
+ byKey.set(t.id, t);
189
+ if (t.key)
190
+ byKey.set(t.key, t);
191
+ }
192
+ if (hasSerializeTask(all)) {
193
+ const serializeTask = pickSerializeTask(all, byKey, opts.exclude);
194
+ if (serializeTask)
195
+ return [serializeTask];
196
+ if (isSerializeBlocked(all))
197
+ return [];
198
+ }
199
+ if (isBudgetFull(opts.targetDir))
200
+ return [];
201
+ const eligible = eligibleTasks(all, byKey, opts.exclude);
202
+ const level = opts.parallelAt ?? "off";
203
+ if (level === "off" || level === "goal")
204
+ return eligible.slice(0, 1);
205
+ const groups = new Map();
206
+ for (const t of eligible) {
207
+ const k = groupKeyFor(t, level, list);
208
+ if (!groups.has(k))
209
+ groups.set(k, []);
210
+ groups.get(k).push(t);
211
+ }
212
+ const max = Math.max(1, Math.min(16, opts.maxWorkers ?? 3));
213
+ return roundRobin(groups, max);
214
+ }
215
+ export async function spawnWorkers(targetDir, tasks, opts = { promptFor: () => "" }) {
216
+ const runId = opts?.runId ?? runIdFor(targetDir, "sched");
217
+ let handoff = "task";
218
+ try {
219
+ handoff = loadConfig(targetDir).config.session?.handoff ?? "task";
220
+ }
221
+ catch { }
222
+ let allList = null;
223
+ try {
224
+ allList = loadFeatureList(targetDir).list;
225
+ }
226
+ catch {
227
+ allList = null;
228
+ }
229
+ const results = [];
230
+ for (const t of tasks) {
231
+ const prompt = opts.promptFor(t);
232
+ const router = loadRouterConfig(targetDir);
233
+ let modelHint;
234
+ if (router.enabled && allList) {
235
+ try {
236
+ const effDiff = effectiveDifficultyForTask(t, handoff, allList);
237
+ modelHint = resolveModel({ projectDir: targetDir, task: { difficulty: effDiff, id: t.id, key: t.compositeKey } });
238
+ }
239
+ catch { }
240
+ }
241
+ else if (router.enabled) {
242
+ try {
243
+ modelHint = resolveModel({ projectDir: targetDir, task: { difficulty: t.difficulty, id: t.id, key: t.compositeKey } });
244
+ }
245
+ catch { }
246
+ }
247
+ const res = await spawnIsolatedWorker({
248
+ projectDir: targetDir,
249
+ runId,
250
+ featureId: t.featureId,
251
+ taskId: t.id,
252
+ prompt,
253
+ command: opts.command,
254
+ model: modelHint,
255
+ });
256
+ results.push(res);
257
+ }
258
+ return results;
259
+ }
260
+ export function executionPolicyOf(config) {
261
+ const e = (config.execution ?? {});
262
+ const engine = e.engine === "main-session" ? "main-session" : "background";
263
+ const at = typeof e.parallelAt === "string" && ["off", "goal", "phase", "sprint", "feature", "task", "subtask"].includes(e.parallelAt)
264
+ ? e.parallelAt
265
+ : "task";
266
+ const raw = typeof e.maxWorkers === "number" ? e.maxWorkers : 3;
267
+ const maxWorkers = Math.max(1, Math.min(16, Math.floor(raw)));
268
+ return { engine, parallelAt: at, maxWorkers };
269
+ }
270
+ //# sourceMappingURL=scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/scheduler.ts"],"names":[],"mappings":"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"}