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,298 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* infinity-harness — terminal styling primitives.
|
|
3
|
+
*
|
|
4
|
+
* Two things every renderer here needs and neither the host nor Node gives us:
|
|
5
|
+
*
|
|
6
|
+
* 1. Width that matches what the terminal actually draws. An ANSI escape
|
|
7
|
+
* occupies zero columns and a CJK glyph occupies two, so every layout
|
|
8
|
+
* decision measures with `width()` rather than `String.length`.
|
|
9
|
+
* 2. Colour that degrades. A pipe, a CI log, and NO_COLOR all want plain
|
|
10
|
+
* text; a modern terminal wants truecolor. `createStyler` picks once.
|
|
11
|
+
*/
|
|
12
|
+
import stringWidth from "string-width";
|
|
13
|
+
const ESC = "\u001b";
|
|
14
|
+
const RESET = ESC + "[0m";
|
|
15
|
+
const ANSI_RE = /\u001b\[[0-9;]*m/g;
|
|
16
|
+
const OSC8_RE = /\u001b\]8;;[^\u0007]*\u0007/g;
|
|
17
|
+
export function stripAnsi(s) {
|
|
18
|
+
return s.replace(OSC8_RE, "").replace(ANSI_RE, "");
|
|
19
|
+
}
|
|
20
|
+
/** Display width in terminal columns, ignoring ANSI and honouring wide chars. */
|
|
21
|
+
export function width(s) {
|
|
22
|
+
const plain = stripAnsi(s);
|
|
23
|
+
let w = 0;
|
|
24
|
+
for (const ch of plain)
|
|
25
|
+
w += cellWidth(ch);
|
|
26
|
+
return w;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Truncate to `max` columns, appending an ellipsis when it does not fit.
|
|
30
|
+
*
|
|
31
|
+
* ANSI-aware: escape sequences are copied through without consuming columns,
|
|
32
|
+
* and a reset is appended when the cut lands inside a styled run. Truncating a
|
|
33
|
+
* styled string with a naive slice would either bleed colour into the rest of
|
|
34
|
+
* the line or strip it entirely.
|
|
35
|
+
*/
|
|
36
|
+
export function truncate(s, max, ellipsis = "…") {
|
|
37
|
+
if (max <= 0)
|
|
38
|
+
return "";
|
|
39
|
+
if (width(s) <= max)
|
|
40
|
+
return s;
|
|
41
|
+
const eW = width(ellipsis);
|
|
42
|
+
const budget = max - eW;
|
|
43
|
+
let out = "";
|
|
44
|
+
let w = 0;
|
|
45
|
+
let styled = false;
|
|
46
|
+
let i = 0;
|
|
47
|
+
while (i < s.length) {
|
|
48
|
+
if (s[i] === ESC) {
|
|
49
|
+
// OSC 8 hyperlink: ESC ] 8 ;; URL BEL — zero-width wrapper
|
|
50
|
+
if (s[i + 1] === "]") {
|
|
51
|
+
const bel = s.indexOf("\u0007", i);
|
|
52
|
+
if (bel === -1)
|
|
53
|
+
break;
|
|
54
|
+
out += s.slice(i, bel + 1);
|
|
55
|
+
i = bel + 1;
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
const end = s.indexOf("m", i);
|
|
59
|
+
if (end === -1)
|
|
60
|
+
break;
|
|
61
|
+
const seq = s.slice(i, end + 1);
|
|
62
|
+
out += seq;
|
|
63
|
+
styled = seq !== RESET;
|
|
64
|
+
i = end + 1;
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
const cp = String.fromCodePoint(s.codePointAt(i));
|
|
68
|
+
const cw = cellWidth(cp);
|
|
69
|
+
if (w + cw > budget)
|
|
70
|
+
break;
|
|
71
|
+
out += cp;
|
|
72
|
+
w += cw;
|
|
73
|
+
i += cp.length;
|
|
74
|
+
}
|
|
75
|
+
return out + (styled ? RESET : "") + ellipsis;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Column width of a single grapheme.
|
|
79
|
+
*
|
|
80
|
+
* `string-width` reports East Asian Ambiguous characters as 2 columns, but
|
|
81
|
+
* every terminal we target draws these particular symbols in 1. Trusting the
|
|
82
|
+
* library here shifts whole columns of the widget out of alignment, so the
|
|
83
|
+
* handful of glyphs the UI actually uses are pinned to 1.
|
|
84
|
+
*/
|
|
85
|
+
const AMBIGUOUS_SINGLE = new Set([
|
|
86
|
+
"\u26a0", // warning sign
|
|
87
|
+
"\u21b7", // clockwise top semicircle arrow
|
|
88
|
+
"\u25b8", // small right-pointing triangle
|
|
89
|
+
"\u2713", // check mark
|
|
90
|
+
"\u2261", // identical to
|
|
91
|
+
"\u2022", // bullet
|
|
92
|
+
"\u00b7", // middle dot
|
|
93
|
+
"\u2500", // box drawing light horizontal
|
|
94
|
+
]);
|
|
95
|
+
export function cellWidth(ch) {
|
|
96
|
+
if (AMBIGUOUS_SINGLE.has(ch))
|
|
97
|
+
return 1;
|
|
98
|
+
try {
|
|
99
|
+
return stringWidth(ch);
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return 1;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/** Pad on the right to exactly `n` columns (no-op if already wider). */
|
|
106
|
+
export function padEnd(s, n) {
|
|
107
|
+
const w = width(s);
|
|
108
|
+
return w >= n ? s : s + " ".repeat(n - w);
|
|
109
|
+
}
|
|
110
|
+
export function padStart(s, n) {
|
|
111
|
+
const w = width(s);
|
|
112
|
+
return w >= n ? s : " ".repeat(n - w) + s;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Wrap to `max` columns on word boundaries, hard-splitting words that cannot
|
|
116
|
+
* fit. Never truncates — plan text the human needs to read stays readable.
|
|
117
|
+
*/
|
|
118
|
+
export function wrap(text, max) {
|
|
119
|
+
if (max <= 0)
|
|
120
|
+
return [text];
|
|
121
|
+
if (text === "")
|
|
122
|
+
return [""];
|
|
123
|
+
if (width(text) <= max)
|
|
124
|
+
return [text];
|
|
125
|
+
const lines = [];
|
|
126
|
+
let cur = "";
|
|
127
|
+
for (const word of text.split(" ")) {
|
|
128
|
+
if (width(word) > max) {
|
|
129
|
+
if (cur) {
|
|
130
|
+
lines.push(cur);
|
|
131
|
+
cur = "";
|
|
132
|
+
}
|
|
133
|
+
let chunk = "";
|
|
134
|
+
for (const ch of word) {
|
|
135
|
+
if (width(chunk) + width(ch) > max) {
|
|
136
|
+
lines.push(chunk);
|
|
137
|
+
chunk = ch;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
chunk += ch;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
if (chunk)
|
|
144
|
+
cur = chunk;
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
if (!cur)
|
|
148
|
+
cur = word;
|
|
149
|
+
else if (width(cur) + 1 + width(word) <= max)
|
|
150
|
+
cur += " " + word;
|
|
151
|
+
else {
|
|
152
|
+
lines.push(cur);
|
|
153
|
+
cur = word;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (cur)
|
|
157
|
+
lines.push(cur);
|
|
158
|
+
return lines.length ? lines : [""];
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Palette. Chosen to stay legible on both light and dark terminals: every
|
|
162
|
+
* colour sits in the mid-luminance band rather than at either extreme, so
|
|
163
|
+
* nothing disappears into the background on one theme or the other.
|
|
164
|
+
*/
|
|
165
|
+
export const PALETTE = {
|
|
166
|
+
brand: "#7C5CFF",
|
|
167
|
+
accent: "#00B8D4",
|
|
168
|
+
success: "#2E9E5B",
|
|
169
|
+
active: "#D98A00",
|
|
170
|
+
pending: "#8A8F98",
|
|
171
|
+
blocked: "#D64545",
|
|
172
|
+
rework: "#B36BD4",
|
|
173
|
+
muted: "#6E7481",
|
|
174
|
+
text: "#C9CDD4",
|
|
175
|
+
rule: "#4A5058",
|
|
176
|
+
};
|
|
177
|
+
function hexToRgb(hex) {
|
|
178
|
+
const h = hex.replace("#", "");
|
|
179
|
+
return [
|
|
180
|
+
Number.parseInt(h.slice(0, 2), 16),
|
|
181
|
+
Number.parseInt(h.slice(2, 4), 16),
|
|
182
|
+
Number.parseInt(h.slice(4, 6), 16),
|
|
183
|
+
];
|
|
184
|
+
}
|
|
185
|
+
/** Nearest xterm-256 index for an RGB triple (6x6x6 cube + grey ramp). */
|
|
186
|
+
function rgbTo256(r, g, b) {
|
|
187
|
+
if (r === g && g === b) {
|
|
188
|
+
if (r < 8)
|
|
189
|
+
return 16;
|
|
190
|
+
if (r > 248)
|
|
191
|
+
return 231;
|
|
192
|
+
return Math.round(((r - 8) / 247) * 24) + 232;
|
|
193
|
+
}
|
|
194
|
+
const q = (v) => Math.round((v / 255) * 5);
|
|
195
|
+
return 16 + 36 * q(r) + 6 * q(g) + q(b);
|
|
196
|
+
}
|
|
197
|
+
export function detectColorMode(env = process.env) {
|
|
198
|
+
if (env.NO_COLOR !== undefined && env.NO_COLOR !== "")
|
|
199
|
+
return "none";
|
|
200
|
+
if (env.INFINITY_HARNESS_COLOR === "0" || env.INFINITY_HARNESS_COLOR === "none")
|
|
201
|
+
return "none";
|
|
202
|
+
if (env.INFINITY_HARNESS_COLOR === "truecolor")
|
|
203
|
+
return "truecolor";
|
|
204
|
+
if (env.INFINITY_HARNESS_COLOR === "256")
|
|
205
|
+
return "ansi256";
|
|
206
|
+
if (env.FORCE_COLOR === "0")
|
|
207
|
+
return "none";
|
|
208
|
+
const ct = env.COLORTERM ?? "";
|
|
209
|
+
if (ct.includes("truecolor") || ct.includes("24bit"))
|
|
210
|
+
return "truecolor";
|
|
211
|
+
const term = env.TERM ?? "";
|
|
212
|
+
if (term === "dumb")
|
|
213
|
+
return "none";
|
|
214
|
+
if (term.includes("256"))
|
|
215
|
+
return "ansi256";
|
|
216
|
+
if (env.FORCE_COLOR)
|
|
217
|
+
return "ansi256";
|
|
218
|
+
if (term)
|
|
219
|
+
return "ansi256";
|
|
220
|
+
return "none";
|
|
221
|
+
}
|
|
222
|
+
export function createStyler(mode = detectColorMode()) {
|
|
223
|
+
if (mode === "none") {
|
|
224
|
+
const id = (s) => s;
|
|
225
|
+
return { mode, fg: (_r, s) => s, bold: id, dim: id, hex: (_h, s) => s };
|
|
226
|
+
}
|
|
227
|
+
const sgr = (open, s) => ESC + "[" + open + "m" + s + ESC + "[0m";
|
|
228
|
+
const hex = (h, s) => {
|
|
229
|
+
const [r, g, b] = hexToRgb(h);
|
|
230
|
+
return mode === "truecolor"
|
|
231
|
+
? sgr("38;2;" + r + ";" + g + ";" + b, s)
|
|
232
|
+
: sgr("38;5;" + rgbTo256(r, g, b), s);
|
|
233
|
+
};
|
|
234
|
+
return {
|
|
235
|
+
mode,
|
|
236
|
+
hex,
|
|
237
|
+
fg: (role, s) => hex(PALETTE[role], s),
|
|
238
|
+
bold: (s) => sgr("1", s),
|
|
239
|
+
dim: (s) => sgr("2", s),
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
export const UNICODE_GLYPHS = {
|
|
243
|
+
pending: "○",
|
|
244
|
+
inProgress: "◐",
|
|
245
|
+
complete: "●",
|
|
246
|
+
blocked: "⚠",
|
|
247
|
+
rework: "↷",
|
|
248
|
+
subPending: "·",
|
|
249
|
+
subActive: "▸",
|
|
250
|
+
subDone: "✓",
|
|
251
|
+
barFull: "▰",
|
|
252
|
+
barEmpty: "▱",
|
|
253
|
+
arrow: "←",
|
|
254
|
+
more: "⋯",
|
|
255
|
+
branch: "▸",
|
|
256
|
+
goal: "◈",
|
|
257
|
+
sprint: "▤",
|
|
258
|
+
treeMid: "├─",
|
|
259
|
+
treeEnd: "└─",
|
|
260
|
+
treeBar: "│ ",
|
|
261
|
+
phaseDone: "●",
|
|
262
|
+
phaseCurrent: "◉",
|
|
263
|
+
phaseTodo: "○",
|
|
264
|
+
rail: "─",
|
|
265
|
+
};
|
|
266
|
+
export const ASCII_GLYPHS = {
|
|
267
|
+
pending: "o",
|
|
268
|
+
inProgress: "*",
|
|
269
|
+
complete: "x",
|
|
270
|
+
blocked: "!",
|
|
271
|
+
rework: "~",
|
|
272
|
+
subPending: ".",
|
|
273
|
+
subActive: ">",
|
|
274
|
+
subDone: "+",
|
|
275
|
+
barFull: "#",
|
|
276
|
+
barEmpty: "-",
|
|
277
|
+
arrow: "<-",
|
|
278
|
+
more: "...",
|
|
279
|
+
branch: ">",
|
|
280
|
+
goal: "#",
|
|
281
|
+
sprint: "=",
|
|
282
|
+
treeMid: "|-",
|
|
283
|
+
treeEnd: "`-",
|
|
284
|
+
treeBar: "| ",
|
|
285
|
+
phaseDone: "x",
|
|
286
|
+
phaseCurrent: "O",
|
|
287
|
+
phaseTodo: "o",
|
|
288
|
+
rail: "-",
|
|
289
|
+
};
|
|
290
|
+
export function detectGlyphs(env = process.env) {
|
|
291
|
+
if (env.INFINITY_HARNESS_ASCII === "1")
|
|
292
|
+
return ASCII_GLYPHS;
|
|
293
|
+
const enc = (env.LC_ALL ?? env.LC_CTYPE ?? env.LANG ?? "").toLowerCase();
|
|
294
|
+
if (enc && !enc.includes("utf"))
|
|
295
|
+
return ASCII_GLYPHS;
|
|
296
|
+
return UNICODE_GLYPHS;
|
|
297
|
+
}
|
|
298
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../src/ui/theme.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* infinity-harness — ui/viewState.ts
|
|
3
|
+
*
|
|
4
|
+
* View states — "not running" is a state, not an absence.
|
|
5
|
+
* Every Interface reads daemon.json BEFORE rendering, and derives a view state.
|
|
6
|
+
* Heartbeat 20s, stale after 90s — v2.7 shipped values, kept deliberately.
|
|
7
|
+
* Only the single place these numbers are defined.
|
|
8
|
+
*/
|
|
9
|
+
import { readJsonSafe } from "../core/fsx.js";
|
|
10
|
+
import { daemonPath, runStatePath, supervisorPath } from "../core/paths.js";
|
|
11
|
+
export const HEARTBEAT_MS = 20_000;
|
|
12
|
+
export const OWNER_STALE_MS = 90_000;
|
|
13
|
+
export function deriveViewState(targetDir) {
|
|
14
|
+
const run = readJsonSafe(runStatePath(targetDir), null);
|
|
15
|
+
const daemon = readJsonSafe(daemonPath(targetDir), null);
|
|
16
|
+
const supervisor = readJsonSafe(supervisorPath(targetDir), null);
|
|
17
|
+
if (!run || !run.runId) {
|
|
18
|
+
return { state: "never-armed", daemon: daemon, run: run, supervisor: supervisor, reason: "No run has been armed. Run the wizard." };
|
|
19
|
+
}
|
|
20
|
+
if (run && run.armed === false) {
|
|
21
|
+
const stopReason = typeof run.stopReason === "string" ? run.stopReason : null;
|
|
22
|
+
return { state: "stopped", daemon: daemon, run: run, supervisor: supervisor, reason: stopReason ?? "Run stopped." };
|
|
23
|
+
}
|
|
24
|
+
// Armed but no daemon file
|
|
25
|
+
if (!daemon) {
|
|
26
|
+
return { state: "not-running", daemon: null, run: run, supervisor: supervisor, reason: "Daemon not running — /infinity:run to start." };
|
|
27
|
+
}
|
|
28
|
+
const heartbeatAt = typeof daemon.heartbeatAt === "string" ? daemon.heartbeatAt : null;
|
|
29
|
+
const ageMs = heartbeatAt ? Date.now() - new Date(heartbeatAt).getTime() : Infinity;
|
|
30
|
+
if (Number.isFinite(ageMs) && ageMs > OWNER_STALE_MS) {
|
|
31
|
+
// Check pid liveness as tiebreaker: stale heartbeat but pid still alive => stale, else not-running.
|
|
32
|
+
const pid = typeof daemon.pid === "number" ? daemon.pid : undefined;
|
|
33
|
+
let pidAlive = false;
|
|
34
|
+
if (typeof pid === "number") {
|
|
35
|
+
try {
|
|
36
|
+
process.kill(pid, 0);
|
|
37
|
+
pidAlive = true;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
pidAlive = false;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (pidAlive) {
|
|
44
|
+
return { state: "stale", daemon: daemon, run: run, supervisor: supervisor, reason: `Daemon unresponsive since ${heartbeatAt ?? "?"}` };
|
|
45
|
+
}
|
|
46
|
+
return { state: "not-running", daemon: null, run: run, supervisor: supervisor, reason: "Daemon process is gone." };
|
|
47
|
+
}
|
|
48
|
+
// Check awaiting-approval (supervisor state)
|
|
49
|
+
const supState = typeof supervisor?.state === "string" ? String(supervisor.state) : null;
|
|
50
|
+
if (supState === "awaiting-approval") {
|
|
51
|
+
return { state: "awaiting-approval", daemon: daemon, run: run, supervisor: supervisor };
|
|
52
|
+
}
|
|
53
|
+
return { state: "running", daemon: daemon, run: run, supervisor: supervisor };
|
|
54
|
+
}
|
|
55
|
+
export function viewStateLabel(s) {
|
|
56
|
+
switch (s) {
|
|
57
|
+
case "running": return "running";
|
|
58
|
+
case "stale": return "stale";
|
|
59
|
+
case "not-running": return "not running";
|
|
60
|
+
case "never-armed": return "never armed";
|
|
61
|
+
case "awaiting-approval": return "awaiting approval";
|
|
62
|
+
case "stopped": return "stopped";
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=viewState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewState.js","sourceRoot":"","sources":["../../../src/ui/viewState.ts"],"names":[],"mappings":"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"}
|