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.
- package/CHANGELOG.md +18 -0
- package/dist/extensions/infinity-harness/index.js +3614 -0
- package/dist/extensions/infinity-harness/index.js.map +1 -0
- package/dist/src/approval.js +154 -0
- package/dist/src/approval.js.map +1 -0
- package/dist/src/core/brief.js +309 -0
- package/dist/src/core/brief.js.map +1 -0
- package/dist/src/core/config.js +539 -0
- package/dist/src/core/config.js.map +1 -0
- package/dist/src/core/exec.js +106 -0
- package/dist/src/core/exec.js.map +1 -0
- package/dist/src/core/featureList.js +365 -0
- package/dist/src/core/featureList.js.map +1 -0
- package/dist/src/core/fsx.js +123 -0
- package/dist/src/core/fsx.js.map +1 -0
- package/dist/src/core/gates.js +490 -0
- package/dist/src/core/gates.js.map +1 -0
- package/dist/src/core/init.js +480 -0
- package/dist/src/core/init.js.map +1 -0
- package/dist/src/core/lock.js +183 -0
- package/dist/src/core/lock.js.map +1 -0
- package/dist/src/core/modelRouter.js +185 -0
- package/dist/src/core/modelRouter.js.map +1 -0
- package/dist/src/core/paths.js +129 -0
- package/dist/src/core/paths.js.map +1 -0
- package/dist/src/core/phases.js +254 -0
- package/dist/src/core/phases.js.map +1 -0
- package/dist/src/core/plan.js +15 -0
- package/dist/src/core/plan.js.map +1 -0
- package/dist/src/core/runState.js +126 -0
- package/dist/src/core/runState.js.map +1 -0
- package/dist/src/core/settings.js +877 -0
- package/dist/src/core/settings.js.map +1 -0
- package/dist/src/core/skills.js +319 -0
- package/dist/src/core/skills.js.map +1 -0
- package/dist/src/core/skillsAudit.js +194 -0
- package/dist/src/core/skillsAudit.js.map +1 -0
- package/dist/src/core/types.js +77 -0
- package/dist/src/core/types.js.map +1 -0
- package/dist/src/daemon/budget.js +85 -0
- package/dist/src/daemon/budget.js.map +1 -0
- package/dist/src/daemon/guard.js +122 -0
- package/dist/src/daemon/guard.js.map +1 -0
- package/dist/src/daemon/index.js +461 -0
- package/dist/src/daemon/index.js.map +1 -0
- package/dist/src/daemon/isolation.js +84 -0
- package/dist/src/daemon/isolation.js.map +1 -0
- package/dist/src/daemon/preflight.js +131 -0
- package/dist/src/daemon/preflight.js.map +1 -0
- package/dist/src/daemon/server.js +174 -0
- package/dist/src/daemon/server.js.map +1 -0
- package/dist/src/daemon/supervisorState.js +42 -0
- package/dist/src/daemon/supervisorState.js.map +1 -0
- package/dist/src/daemon/worker.js +239 -0
- package/dist/src/daemon/worker.js.map +1 -0
- package/dist/src/daemon/worktree.js +102 -0
- package/dist/src/daemon/worktree.js.map +1 -0
- package/dist/src/escalate.js +312 -0
- package/dist/src/escalate.js.map +1 -0
- package/dist/src/exec/piWorker.js +630 -0
- package/dist/src/exec/piWorker.js.map +1 -0
- package/dist/src/goal.js +317 -0
- package/dist/src/goal.js.map +1 -0
- package/dist/src/goalLoop.js +374 -0
- package/dist/src/goalLoop.js.map +1 -0
- package/dist/src/goalSpec.js +397 -0
- package/dist/src/goalSpec.js.map +1 -0
- package/dist/src/goalState.js +255 -0
- package/dist/src/goalState.js.map +1 -0
- package/dist/src/handoff.js +205 -0
- package/dist/src/handoff.js.map +1 -0
- package/dist/src/intake.js +203 -0
- package/dist/src/intake.js.map +1 -0
- package/dist/src/loop.js +592 -0
- package/dist/src/loop.js.map +1 -0
- package/dist/src/modelRouter.js +216 -0
- package/dist/src/modelRouter.js.map +1 -0
- package/dist/src/remote.js +246 -0
- package/dist/src/remote.js.map +1 -0
- package/dist/src/replan.js +262 -0
- package/dist/src/replan.js.map +1 -0
- package/dist/src/review.js +54 -0
- package/dist/src/review.js.map +1 -0
- package/dist/src/rework.js +241 -0
- package/dist/src/rework.js.map +1 -0
- package/dist/src/runState.js +4 -0
- package/dist/src/runState.js.map +1 -0
- package/dist/src/scheduler.js +270 -0
- package/dist/src/scheduler.js.map +1 -0
- package/dist/src/supervisor.js +787 -0
- package/dist/src/supervisor.js.map +1 -0
- package/dist/src/taskList.js +430 -0
- package/dist/src/taskList.js.map +1 -0
- package/dist/src/ui/config.js +268 -0
- package/dist/src/ui/config.js.map +1 -0
- package/dist/src/ui/dashboard.js +1288 -0
- package/dist/src/ui/dashboard.js.map +1 -0
- package/dist/src/ui/display.js +229 -0
- package/dist/src/ui/display.js.map +1 -0
- package/dist/src/ui/planTree.js +219 -0
- package/dist/src/ui/planTree.js.map +1 -0
- package/dist/src/ui/theme.js +298 -0
- package/dist/src/ui/theme.js.map +1 -0
- package/dist/src/ui/viewState.js +65 -0
- package/dist/src/ui/viewState.js.map +1 -0
- package/dist/src/ui/widget.js +721 -0
- package/dist/src/ui/widget.js.map +1 -0
- package/dist/src/ui/wizard.js +540 -0
- package/dist/src/ui/wizard.js.map +1 -0
- package/dist/src/unstuck.js +210 -0
- package/dist/src/unstuck.js.map +1 -0
- package/dist/src/worker.js +267 -0
- package/dist/src/worker.js.map +1 -0
- package/dist/src/workflow.js +250 -0
- package/dist/src/workflow.js.map +1 -0
- package/dist/tests/approval.test.js +144 -0
- package/dist/tests/approval.test.js.map +1 -0
- package/dist/tests/brief.test.js +271 -0
- package/dist/tests/brief.test.js.map +1 -0
- package/dist/tests/config.test.js +320 -0
- package/dist/tests/config.test.js.map +1 -0
- package/dist/tests/dashboard.test.js +277 -0
- package/dist/tests/dashboard.test.js.map +1 -0
- package/dist/tests/display.test.js +229 -0
- package/dist/tests/display.test.js.map +1 -0
- package/dist/tests/escalate.test.js +272 -0
- package/dist/tests/escalate.test.js.map +1 -0
- package/dist/tests/featureList.test.js +429 -0
- package/dist/tests/featureList.test.js.map +1 -0
- package/dist/tests/gates.test.js +333 -0
- package/dist/tests/gates.test.js.map +1 -0
- package/dist/tests/goal.test.js +229 -0
- package/dist/tests/goal.test.js.map +1 -0
- package/dist/tests/goalLoop.test.js +170 -0
- package/dist/tests/goalLoop.test.js.map +1 -0
- package/dist/tests/goalSpec.test.js +146 -0
- package/dist/tests/goalSpec.test.js.map +1 -0
- package/dist/tests/goalState.test.js +202 -0
- package/dist/tests/goalState.test.js.map +1 -0
- package/dist/tests/handoff.test.js +127 -0
- package/dist/tests/handoff.test.js.map +1 -0
- package/dist/tests/init.test.js +264 -0
- package/dist/tests/init.test.js.map +1 -0
- package/dist/tests/intake.test.js +288 -0
- package/dist/tests/intake.test.js.map +1 -0
- package/dist/tests/loop.test.js +453 -0
- package/dist/tests/loop.test.js.map +1 -0
- package/dist/tests/modelRouter.test.js +131 -0
- package/dist/tests/modelRouter.test.js.map +1 -0
- package/dist/tests/phases.test.js +244 -0
- package/dist/tests/phases.test.js.map +1 -0
- package/dist/tests/planTree.test.js +190 -0
- package/dist/tests/planTree.test.js.map +1 -0
- package/dist/tests/remote.test.js +380 -0
- package/dist/tests/remote.test.js.map +1 -0
- package/dist/tests/replan.test.js +113 -0
- package/dist/tests/replan.test.js.map +1 -0
- package/dist/tests/review.test.js +77 -0
- package/dist/tests/review.test.js.map +1 -0
- package/dist/tests/rework.test.js +109 -0
- package/dist/tests/rework.test.js.map +1 -0
- package/dist/tests/routing-live.test.js +121 -0
- package/dist/tests/routing-live.test.js.map +1 -0
- package/dist/tests/runState.test.js +73 -0
- package/dist/tests/runState.test.js.map +1 -0
- package/dist/tests/settings.test.js +311 -0
- package/dist/tests/settings.test.js.map +1 -0
- package/dist/tests/skills.test.js +387 -0
- package/dist/tests/skills.test.js.map +1 -0
- package/dist/tests/supervisor.test.js +437 -0
- package/dist/tests/supervisor.test.js.map +1 -0
- package/dist/tests/surface.test.js +203 -0
- package/dist/tests/surface.test.js.map +1 -0
- package/dist/tests/taskList.test.js +376 -0
- package/dist/tests/taskList.test.js.map +1 -0
- package/dist/tests/theme.test.js +149 -0
- package/dist/tests/theme.test.js.map +1 -0
- package/dist/tests/unstuck.test.js +268 -0
- package/dist/tests/unstuck.test.js.map +1 -0
- package/dist/tests/widget.test.js +424 -0
- package/dist/tests/widget.test.js.map +1 -0
- package/dist/tests/worker.test.js +306 -0
- package/dist/tests/worker.test.js.map +1 -0
- package/dist/tests/workflow.test.js +187 -0
- package/dist/tests/workflow.test.js.map +1 -0
- package/extensions/infinity-harness/index.ts +39 -12
- package/package.json +5 -2
- package/src/core/modelRouter.ts +23 -1
- package/src/daemon/index.ts +3 -3
- package/src/daemon/worker.ts +28 -5
- package/src/ui/config.ts +25 -1
- package/src/ui/wizard.ts +10 -5
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* infinity-harness — the start-up wizard.
|
|
3
|
+
*
|
|
4
|
+
* The bug this module exists to kill: choosing "autopilot" used to start the
|
|
5
|
+
* run *immediately*, with no idea and no scope, so the first thing the harness
|
|
6
|
+
* did was invent a project and start building it. Autopilot was being read as
|
|
7
|
+
* "you decide everything, including what I want", which is not a mode anybody
|
|
8
|
+
* asked for.
|
|
9
|
+
*
|
|
10
|
+
* The fix was to separate two questions that were tangled together:
|
|
11
|
+
*
|
|
12
|
+
* 1. What are we building? — always asked
|
|
13
|
+
* 2. Who signs off on what? — the workflow
|
|
14
|
+
*
|
|
15
|
+
* And the second of those turned out to be tangled too. "copilot" and
|
|
16
|
+
* "autopilot" are one switch, and one switch cannot say "let it define and
|
|
17
|
+
* plan on its own but show me the review". So the answer is a **workflow**: a
|
|
18
|
+
* mode per phase, with the two familiar words as two named points in that
|
|
19
|
+
* space rather than the only two points in it. `src/workflow.ts` owns what a
|
|
20
|
+
* workflow is and where saved ones live.
|
|
21
|
+
*
|
|
22
|
+
* Nothing here talks to pi. It takes answers and returns a plan of record, so
|
|
23
|
+
* the flow can be unit-tested without a terminal and driven from the adapter,
|
|
24
|
+
* from a test, or from a config file.
|
|
25
|
+
*/
|
|
26
|
+
import { DEFAULT_ENABLED_PHASES, PHASE_ORDER } from "./core/types.js";
|
|
27
|
+
import { BUILTIN_WORKFLOWS, describeModes, normalizeModes, normalizePhases, signedPhases as signedIn, } from "./workflow.js";
|
|
28
|
+
import { defaultDisplay, normalizeDisplay } from "./ui/display.js";
|
|
29
|
+
/** The wizard's questions, in the order they are asked. */
|
|
30
|
+
export const INTAKE_STEPS = ["workflow", "brief", "handoff", "display"];
|
|
31
|
+
export function builtInByName(name) {
|
|
32
|
+
return BUILTIN_WORKFLOWS.find((w) => w.id === name || w.name === name) ?? null;
|
|
33
|
+
}
|
|
34
|
+
/** Build an ad-hoc workflow from a phase list and a mode per phase. */
|
|
35
|
+
export function customWorkflow(phases, modes, name = "custom") {
|
|
36
|
+
const ordered = normalizePhases(phases);
|
|
37
|
+
const normalized = normalizeModes(modes, ordered);
|
|
38
|
+
return {
|
|
39
|
+
id: "custom",
|
|
40
|
+
name,
|
|
41
|
+
description: describeModes(ordered, normalized),
|
|
42
|
+
builtIn: false,
|
|
43
|
+
phases: ordered,
|
|
44
|
+
modes: normalized,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/** Turn the wizard's answers into everything `initHarness` needs. */
|
|
48
|
+
export function planIntake(answers) {
|
|
49
|
+
const workflow = answers.workflow;
|
|
50
|
+
const phases = normalizePhases(workflow.phases);
|
|
51
|
+
const phaseModes = normalizeModes(workflow.modes, phases);
|
|
52
|
+
const handoff = answers.handoff ?? "task";
|
|
53
|
+
const session = {
|
|
54
|
+
handoff,
|
|
55
|
+
contextThreshold: handoff === "off" ? 0 : 0.6,
|
|
56
|
+
carryNotes: true,
|
|
57
|
+
};
|
|
58
|
+
const parallelAt = answers.parallelAt ?? "task";
|
|
59
|
+
const engine = answers.engine ?? "background";
|
|
60
|
+
const maxWorkers = Math.max(1, Math.min(16, Number.isFinite(answers.maxWorkers) ? Math.floor(answers.maxWorkers) : 3));
|
|
61
|
+
const display = normalizeDisplay(answers.display ?? defaultDisplay());
|
|
62
|
+
const brief = answers.brief?.trim() ? answers.brief.trim() : null;
|
|
63
|
+
const signed = PHASE_ORDER.filter((p) => phaseModes[p] === "copilot");
|
|
64
|
+
const mode = signed.length > 0 ? "copilot" : "autopilot";
|
|
65
|
+
const warnings = [];
|
|
66
|
+
if (!brief) {
|
|
67
|
+
warnings.push("No goal was given, so the first thing the run does is ask you for one. " +
|
|
68
|
+
"It will not guess a project.");
|
|
69
|
+
}
|
|
70
|
+
if (signed.length === 0) {
|
|
71
|
+
warnings.push("Nothing is being approved by you. The model decides what to build and how, " +
|
|
72
|
+
"and you see it when it is done. This is the right setting for a run you " +
|
|
73
|
+
"want to walk away from — and the wrong one if the goal is vague.");
|
|
74
|
+
}
|
|
75
|
+
if (signed.length === phases.length) {
|
|
76
|
+
warnings.push("Every phase stops for you. Nothing moves while you are away, which is the " +
|
|
77
|
+
"point — just do not expect to start this and go to bed.");
|
|
78
|
+
}
|
|
79
|
+
if (handoff === "off") {
|
|
80
|
+
warnings.push("Session handoff is off, so the whole run shares one context window. " +
|
|
81
|
+
"Expect compaction on anything longer than a few tasks.");
|
|
82
|
+
}
|
|
83
|
+
const _researchDepth = (phases.includes("research") ? (answers.researchDepth ?? "deep") : undefined);
|
|
84
|
+
return {
|
|
85
|
+
mode,
|
|
86
|
+
workflow: { id: workflow.id, name: workflow.name },
|
|
87
|
+
researchDepth: _researchDepth,
|
|
88
|
+
brief,
|
|
89
|
+
phases,
|
|
90
|
+
phaseModes,
|
|
91
|
+
approvals: {
|
|
92
|
+
research: phaseModes.research === "copilot",
|
|
93
|
+
define: phaseModes.define === "copilot",
|
|
94
|
+
plan: phaseModes.plan === "copilot",
|
|
95
|
+
},
|
|
96
|
+
session,
|
|
97
|
+
execution: { engine, parallelAt, maxWorkers, isolation: "worktree" },
|
|
98
|
+
display,
|
|
99
|
+
router: answers.router,
|
|
100
|
+
summary: summarize(workflow, phases, phaseModes, session, display, brief, _researchDepth),
|
|
101
|
+
warnings,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
function summarize(workflow, phases, modes, session, display, brief, researchDepth) {
|
|
105
|
+
const signed = phases.filter((p) => modes[p] === "copilot");
|
|
106
|
+
const L = [];
|
|
107
|
+
L.push(`Workflow ${workflow.name}`);
|
|
108
|
+
L.push(`Pipeline ${phases.map((p) => (modes[p] === "copilot" ? `[${p}]` : p)).join(" → ")}`);
|
|
109
|
+
L.push(`You sign ${signed.length ? signed.map((s) => s.toUpperCase()).join(", ") : "nothing — the model decides and runs"}`);
|
|
110
|
+
L.push(`Sessions ${session.handoff === "off"
|
|
111
|
+
? "one session for the whole run"
|
|
112
|
+
: session.handoff === "task"
|
|
113
|
+
? "fresh session per task and per phase"
|
|
114
|
+
: "fresh session per phase"}`);
|
|
115
|
+
L.push(`Display ${display.preset}`);
|
|
116
|
+
if (researchDepth)
|
|
117
|
+
L.push(`Research ${researchDepth}`);
|
|
118
|
+
L.push(`Goal ${brief ?? "(none yet — you will be asked first thing)"}`);
|
|
119
|
+
return L.join("\n");
|
|
120
|
+
}
|
|
121
|
+
export const WORKFLOW_QUESTION = {
|
|
122
|
+
id: "workflow",
|
|
123
|
+
title: "How should this run — which phases, and which of them stop for you?",
|
|
124
|
+
};
|
|
125
|
+
export const BRIEF_QUESTION = {
|
|
126
|
+
id: "brief",
|
|
127
|
+
title: "What are you building? One or two sentences is enough.",
|
|
128
|
+
placeholder: "e.g. a CLI that reconciles Stripe payouts against our ledger",
|
|
129
|
+
};
|
|
130
|
+
export const HANDOFF_QUESTION = {
|
|
131
|
+
id: "handoff",
|
|
132
|
+
title: "When should the run start a fresh session?",
|
|
133
|
+
options: [
|
|
134
|
+
{
|
|
135
|
+
value: "goal",
|
|
136
|
+
label: "per goal — one session for the whole run",
|
|
137
|
+
help: "The old single-session run. Model per run (off/goal) — whole run shares its hardest model. For true per-task models use task/subtask.",
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
value: "phase",
|
|
141
|
+
label: "every phase",
|
|
142
|
+
help: "Model per phase — tasks & subtasks in a phase share the hardest model in that phase. Old default. Each phase starts clean from the brief.",
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
value: "sprint",
|
|
146
|
+
label: "every sprint",
|
|
147
|
+
help: "Model per sprint — tasks & subtasks in a sprint share the hardest model in that sprint. New session whenever the sprint changes (or phase).",
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
value: "feature",
|
|
151
|
+
label: "every feature",
|
|
152
|
+
help: "Model per feature — tasks & subtasks in a feature share the hardest model in that feature. New session on each feature boundary (and sprint/phase).",
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
value: "task",
|
|
156
|
+
label: "every task (recommended)",
|
|
157
|
+
help: "Model per task — subtasks share their parent task's model. Each task gets a clean session. Best isolation; one extra brief per task.",
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
value: "subtask",
|
|
161
|
+
label: "every subtask",
|
|
162
|
+
help: "Model per subtask — each subtask may use its own model (needs subtask difficulty). Finest grain. Most isolation, most churn.",
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
value: "off",
|
|
166
|
+
label: "never — alias for per goal",
|
|
167
|
+
help: "Model per run — same as per goal, one long session.",
|
|
168
|
+
},
|
|
169
|
+
],
|
|
170
|
+
};
|
|
171
|
+
export const DISPLAY_QUESTION = {
|
|
172
|
+
id: "display",
|
|
173
|
+
title: "How much of the plan do you want on screen?",
|
|
174
|
+
};
|
|
175
|
+
/** The two modes, as a question about one phase. */
|
|
176
|
+
export const PHASE_MODE_OPTIONS = [
|
|
177
|
+
{
|
|
178
|
+
value: "autopilot",
|
|
179
|
+
label: "autopilot — it passes the gate and moves on",
|
|
180
|
+
help: "The deterministic gate is the only referee for this phase.",
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
value: "copilot",
|
|
184
|
+
label: "copilot — it stops and waits for you",
|
|
185
|
+
help: "When the gate passes, the run parks and asks you to sign it off before advancing.",
|
|
186
|
+
},
|
|
187
|
+
];
|
|
188
|
+
/** What each phase is for, one line, shown while picking modes. */
|
|
189
|
+
export const PHASE_PURPOSE = {
|
|
190
|
+
init: "set the project up",
|
|
191
|
+
research: "find out what it actually has to be",
|
|
192
|
+
define: "write down what is being built, and the criteria",
|
|
193
|
+
plan: "break it into ordered, dependency-aware tasks",
|
|
194
|
+
build: "implement it, one task at a time",
|
|
195
|
+
verify: "prove it behaves; hunt what the tests miss",
|
|
196
|
+
simplify: "delete more than you add",
|
|
197
|
+
review: "judge it as if someone else wrote it",
|
|
198
|
+
ship: "tag, changelog, leave the tree clean",
|
|
199
|
+
};
|
|
200
|
+
/** Phases someone can put in a pipeline. INIT is not one of them. */
|
|
201
|
+
export const SELECTABLE_PHASES = PHASE_ORDER.filter((p) => p !== "init");
|
|
202
|
+
export { DEFAULT_ENABLED_PHASES, signedIn as signedPhases };
|
|
203
|
+
//# sourceMappingURL=intake.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intake.js","sourceRoot":"","sources":["../../src/intake.ts"],"names":[],"mappings":"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"}
|