@vextlabs/theron-cli 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/dist/api.d.ts +8 -0
  2. package/dist/api.js +3 -0
  3. package/dist/api.js.map +1 -1
  4. package/dist/auth.js +51 -1
  5. package/dist/auth.js.map +1 -1
  6. package/dist/banner.js +3 -2
  7. package/dist/banner.js.map +1 -1
  8. package/dist/checkpoints.d.ts +32 -0
  9. package/dist/checkpoints.js +61 -0
  10. package/dist/checkpoints.js.map +1 -0
  11. package/dist/index.js +59 -4
  12. package/dist/index.js.map +1 -1
  13. package/dist/input.d.ts +61 -0
  14. package/dist/input.js +574 -0
  15. package/dist/input.js.map +1 -0
  16. package/dist/profiles/index.js +5 -0
  17. package/dist/profiles/index.js.map +1 -1
  18. package/dist/profiles/methodologies/operate_domains.d.ts +8 -0
  19. package/dist/profiles/methodologies/operate_domains.js +1239 -0
  20. package/dist/profiles/methodologies/operate_domains.js.map +1 -0
  21. package/dist/profiles/seeds.js +57 -36
  22. package/dist/profiles/seeds.js.map +1 -1
  23. package/dist/receipt.d.ts +17 -0
  24. package/dist/receipt.js +46 -0
  25. package/dist/receipt.js.map +1 -0
  26. package/dist/render.d.ts +4 -1
  27. package/dist/render.js +95 -28
  28. package/dist/render.js.map +1 -1
  29. package/dist/repl.d.ts +8 -1
  30. package/dist/repl.js +420 -62
  31. package/dist/repl.js.map +1 -1
  32. package/dist/sessions.d.ts +14 -0
  33. package/dist/sessions.js +100 -0
  34. package/dist/sessions.js.map +1 -1
  35. package/dist/ship.d.ts +2 -0
  36. package/dist/ship.js +62 -0
  37. package/dist/ship.js.map +1 -0
  38. package/dist/skills/catalog.d.ts +13 -0
  39. package/dist/skills/catalog.js +86 -0
  40. package/dist/skills/catalog.js.map +1 -0
  41. package/dist/tools/bash.js +81 -14
  42. package/dist/tools/bash.js.map +1 -1
  43. package/dist/tools/edit.js +21 -1
  44. package/dist/tools/edit.js.map +1 -1
  45. package/dist/tools/glob.js +4 -1
  46. package/dist/tools/glob.js.map +1 -1
  47. package/dist/tools/grep.d.ts +5 -0
  48. package/dist/tools/grep.js +101 -2
  49. package/dist/tools/grep.js.map +1 -1
  50. package/dist/tools/index.d.ts +22 -0
  51. package/dist/tools/index.js +177 -41
  52. package/dist/tools/index.js.map +1 -1
  53. package/dist/tools/ls.d.ts +3 -0
  54. package/dist/tools/ls.js +23 -12
  55. package/dist/tools/ls.js.map +1 -1
  56. package/dist/tools/multiedit.d.ts +12 -0
  57. package/dist/tools/multiedit.js +79 -0
  58. package/dist/tools/multiedit.js.map +1 -0
  59. package/dist/tools/stoa.d.ts +1 -1
  60. package/dist/tools/stoa.js +7 -3
  61. package/dist/tools/stoa.js.map +1 -1
  62. package/dist/tools/task.d.ts +9 -0
  63. package/dist/tools/task.js +166 -0
  64. package/dist/tools/task.js.map +1 -0
  65. package/dist/tools/todowrite.d.ts +12 -0
  66. package/dist/tools/todowrite.js +38 -0
  67. package/dist/tools/todowrite.js.map +1 -0
  68. package/dist/tools/webfetch.d.ts +6 -0
  69. package/dist/tools/webfetch.js +98 -0
  70. package/dist/tools/webfetch.js.map +1 -0
  71. package/dist/tools/websearch.d.ts +7 -0
  72. package/dist/tools/websearch.js +83 -0
  73. package/dist/tools/websearch.js.map +1 -0
  74. package/dist/tools/write.js +17 -1
  75. package/dist/tools/write.js.map +1 -1
  76. package/dist/verifiers/confidence_marked.d.ts +2 -0
  77. package/dist/verifiers/confidence_marked.js +49 -0
  78. package/dist/verifiers/confidence_marked.js.map +1 -0
  79. package/dist/verifiers/disclaimer_gate.d.ts +2 -0
  80. package/dist/verifiers/disclaimer_gate.js +57 -0
  81. package/dist/verifiers/disclaimer_gate.js.map +1 -0
  82. package/dist/verifiers/index.d.ts +5 -0
  83. package/dist/verifiers/index.js +20 -7
  84. package/dist/verifiers/index.js.map +1 -1
  85. package/dist/verifiers/lint.js +4 -3
  86. package/dist/verifiers/lint.js.map +1 -1
  87. package/dist/verifiers/promoted_kernels.d.ts +8 -0
  88. package/dist/verifiers/promoted_kernels.js +190 -0
  89. package/dist/verifiers/promoted_kernels.js.map +1 -0
  90. package/dist/verifiers/source_gate.js +2 -3
  91. package/dist/verifiers/source_gate.js.map +1 -1
  92. package/dist/verifiers/test_smoke.js +30 -0
  93. package/dist/verifiers/test_smoke.js.map +1 -1
  94. package/dist/verifiers/types.d.ts +3 -0
  95. package/package.json +4 -2
  96. package/skills/README.md +123 -0
  97. package/skills/ab-test.md +89 -0
  98. package/skills/api-design.md +175 -0
  99. package/skills/architecture-design.md +185 -0
  100. package/skills/business-case.md +77 -0
  101. package/skills/causal-inference.md +77 -0
  102. package/skills/clinical-guideline.md +98 -0
  103. package/skills/code-review.md +98 -0
  104. package/skills/cold-outreach.md +268 -0
  105. package/skills/competitive-teardown.md +223 -0
  106. package/skills/component-spec.md +121 -0
  107. package/skills/content-calendar.md +280 -0
  108. package/skills/contract-review.md +155 -0
  109. package/skills/data-analysis.md +187 -0
  110. package/skills/debug.md +91 -0
  111. package/skills/design-audit.md +121 -0
  112. package/skills/differential-diagnosis.md +79 -0
  113. package/skills/discovery-call.md +206 -0
  114. package/skills/edit-pass.md +80 -0
  115. package/skills/engineering-calc.md +101 -0
  116. package/skills/estimate.md +70 -0
  117. package/skills/experiment-design.md +105 -0
  118. package/skills/fact-check.md +82 -0
  119. package/skills/financial-model.md +104 -0
  120. package/skills/grant-proposal.md +93 -0
  121. package/skills/harmony-analysis.md +93 -0
  122. package/skills/hypothesis-generation.md +99 -0
  123. package/skills/incident-response.md +134 -0
  124. package/skills/interview-loop.md +62 -0
  125. package/skills/job-scorecard.md +92 -0
  126. package/skills/kb-article.md +174 -0
  127. package/skills/launch-plan.md +85 -0
  128. package/skills/lease-review.md +93 -0
  129. package/skills/lesson-plan.md +198 -0
  130. package/skills/literature-review.md +69 -0
  131. package/skills/market-entry.md +137 -0
  132. package/skills/market-sizing.md +159 -0
  133. package/skills/meta-analysis.md +140 -0
  134. package/skills/migrate.md +117 -0
  135. package/skills/optimize.md +88 -0
  136. package/skills/options-strategy.md +166 -0
  137. package/skills/peer-review.md +96 -0
  138. package/skills/pentest-plan.md +193 -0
  139. package/skills/pitch-review.md +132 -0
  140. package/skills/plan.md +88 -0
  141. package/skills/policy-brief.md +124 -0
  142. package/skills/positioning.md +192 -0
  143. package/skills/postmortem.md +168 -0
  144. package/skills/prd.md +105 -0
  145. package/skills/prioritize.md +162 -0
  146. package/skills/proof.md +91 -0
  147. package/skills/property-underwrite.md +159 -0
  148. package/skills/recipe-develop.md +109 -0
  149. package/skills/red-team.md +142 -0
  150. package/skills/refactor.md +58 -0
  151. package/skills/reflection-session.md +115 -0
  152. package/skills/regulatory-compliance.md +136 -0
  153. package/skills/reproduce.md +87 -0
  154. package/skills/runbook.md +344 -0
  155. package/skills/security-audit.md +154 -0
  156. package/skills/seo-brief.md +201 -0
  157. package/skills/sql-query.md +161 -0
  158. package/skills/story-craft.md +163 -0
  159. package/skills/tdd.md +59 -0
  160. package/skills/term-sheet.md +298 -0
  161. package/skills/theory-of-change.md +88 -0
  162. package/skills/threat-model.md +104 -0
  163. package/skills/ticket-triage.md +200 -0
  164. package/skills/tolerance-analysis.md +149 -0
  165. package/skills/training-program.md +151 -0
  166. package/skills/translate.md +64 -0
  167. package/skills/unit-economics.md +238 -0
  168. package/skills/valuation.md +112 -0
  169. package/skills/write-tests.md +77 -0
package/dist/input.js ADDED
@@ -0,0 +1,574 @@
1
+ // Multiline terminal input — a small, self-contained raw-mode line
2
+ // editor for the REPL prompt.
3
+ //
4
+ // Why this exists: the REPL used to read input with `readline.question`,
5
+ // which submits on Enter and offers no way to add a second line. Users
6
+ // asked for a proper multiline prompt (Claude Code / Codex style) and a
7
+ // text box that's actually visible. Node ships no TUI lib here (no Ink),
8
+ // so this is a focused raw-mode editor built on `readline.emitKeypress
9
+ // Events` — the idiomatic way to do key-level input in plain Node.
10
+ //
11
+ // Design:
12
+ // - `LineBuffer` is the PURE editing model (text + cursor). It has no
13
+ // terminal I/O, so the editing logic is unit-tested directly.
14
+ // - `promptMultiline` / `promptLine` wire raw stdin keypresses to the
15
+ // buffer and paint a bordered, brand-amber box that re-renders in
16
+ // place on every keystroke.
17
+ //
18
+ // Newline vs. submit (the core fix):
19
+ // - Enter (CR) → submit.
20
+ // - Shift+Tab → insert a newline (the key the user asked
21
+ // for; CSI Z, reliably distinguishable).
22
+ // - Alt/Option+Enter → insert a newline (where the terminal sends
23
+ // a distinct meta sequence).
24
+ // - "\" then Enter → insert a newline (works in EVERY terminal;
25
+ // the universal, discoverable fallback).
26
+ // - Ctrl+J → insert a newline.
27
+ // - Shift+Enter → insert a newline IF the terminal emits a
28
+ // distinct sequence for it (kitty / xterm
29
+ // modifyOtherKeys); many terminals can't, so
30
+ // Shift+Tab and "\"+Enter are the dependable
31
+ // paths and that's what the hint advertises.
32
+ // - Bracketed paste → pasted newlines insert literally instead of
33
+ // submitting, so multi-line paste just works.
34
+ import readline from "node:readline";
35
+ import process from "node:process";
36
+ import chalk from "chalk";
37
+ const AMBER = "#FFAE00";
38
+ // ── Pure editing model ────────────────────────────────────────────────
39
+ // Holds the text (with embedded "\n" for multiline) and a cursor as an
40
+ // absolute character index. All editing ops are index math — no I/O — so
41
+ // they're deterministic and testable.
42
+ export class LineBuffer {
43
+ text;
44
+ cursor;
45
+ constructor(text = "", cursor = text.length) {
46
+ this.text = text;
47
+ this.cursor = clamp(cursor, 0, text.length);
48
+ }
49
+ value() {
50
+ return this.text;
51
+ }
52
+ isEmpty() {
53
+ return this.text.length === 0;
54
+ }
55
+ /** Logical lines (split on "\n"). Always length >= 1. */
56
+ lines() {
57
+ return this.text.split("\n");
58
+ }
59
+ /** Map the absolute cursor to a (row, col) in logical-line space. */
60
+ rowCol() {
61
+ const before = this.text.slice(0, this.cursor);
62
+ const row = (before.match(/\n/g) || []).length;
63
+ const lastNl = before.lastIndexOf("\n");
64
+ const col = this.cursor - (lastNl + 1);
65
+ return { row, col };
66
+ }
67
+ insert(s) {
68
+ if (!s)
69
+ return;
70
+ this.text = this.text.slice(0, this.cursor) + s + this.text.slice(this.cursor);
71
+ this.cursor += s.length;
72
+ }
73
+ newline() {
74
+ this.insert("\n");
75
+ }
76
+ /** Delete the char before the cursor (Backspace). */
77
+ backspace() {
78
+ if (this.cursor === 0)
79
+ return;
80
+ this.text = this.text.slice(0, this.cursor - 1) + this.text.slice(this.cursor);
81
+ this.cursor -= 1;
82
+ }
83
+ /** Delete the char at the cursor (Delete / Ctrl+D forward). */
84
+ del() {
85
+ if (this.cursor >= this.text.length)
86
+ return;
87
+ this.text = this.text.slice(0, this.cursor) + this.text.slice(this.cursor + 1);
88
+ }
89
+ left() {
90
+ if (this.cursor > 0)
91
+ this.cursor -= 1;
92
+ }
93
+ right() {
94
+ if (this.cursor < this.text.length)
95
+ this.cursor += 1;
96
+ }
97
+ /** Move up one logical line, keeping the column where possible. */
98
+ up() {
99
+ const { row, col } = this.rowCol();
100
+ if (row === 0)
101
+ return;
102
+ const lines = this.lines();
103
+ const targetCol = Math.min(col, lines[row - 1].length);
104
+ this.cursor = lineStartIndex(lines, row - 1) + targetCol;
105
+ }
106
+ /** Move down one logical line, keeping the column where possible. */
107
+ down() {
108
+ const { row, col } = this.rowCol();
109
+ const lines = this.lines();
110
+ if (row >= lines.length - 1)
111
+ return;
112
+ const targetCol = Math.min(col, lines[row + 1].length);
113
+ this.cursor = lineStartIndex(lines, row + 1) + targetCol;
114
+ }
115
+ /** Cursor to start of the current logical line. */
116
+ home() {
117
+ const lastNl = this.text.slice(0, this.cursor).lastIndexOf("\n");
118
+ this.cursor = lastNl + 1;
119
+ }
120
+ /** Cursor to end of the current logical line. */
121
+ end() {
122
+ const nextNl = this.text.indexOf("\n", this.cursor);
123
+ this.cursor = nextNl === -1 ? this.text.length : nextNl;
124
+ }
125
+ /** Delete from the cursor to the end of the current logical line
126
+ * (Ctrl+K); if already at line end, swallow the newline. */
127
+ killToEnd() {
128
+ if (this.cursor >= this.text.length)
129
+ return;
130
+ if (this.text[this.cursor] === "\n") {
131
+ this.del();
132
+ return;
133
+ }
134
+ const nextNl = this.text.indexOf("\n", this.cursor);
135
+ const end = nextNl === -1 ? this.text.length : nextNl;
136
+ this.text = this.text.slice(0, this.cursor) + this.text.slice(end);
137
+ }
138
+ /** Delete the whole buffer (Ctrl+U). */
139
+ clear() {
140
+ this.text = "";
141
+ this.cursor = 0;
142
+ }
143
+ /** Delete the word before the cursor (Ctrl+W). */
144
+ deleteWordLeft() {
145
+ if (this.cursor === 0)
146
+ return;
147
+ let i = this.cursor;
148
+ while (i > 0 && /\s/.test(this.text[i - 1]))
149
+ i -= 1;
150
+ while (i > 0 && !/\s/.test(this.text[i - 1]))
151
+ i -= 1;
152
+ this.text = this.text.slice(0, i) + this.text.slice(this.cursor);
153
+ this.cursor = i;
154
+ }
155
+ }
156
+ function clamp(n, lo, hi) {
157
+ return Math.max(lo, Math.min(hi, n));
158
+ }
159
+ function lineStartIndex(lines, row) {
160
+ let idx = 0;
161
+ for (let r = 0; r < row; r++)
162
+ idx += lines[r].length + 1; // +1 for "\n"
163
+ return idx;
164
+ }
165
+ // ── Terminal width helpers ────────────────────────────────────────────
166
+ // eslint-disable-next-line no-control-regex
167
+ const ANSI_RE = /\x1b\[[0-9;]*m/g;
168
+ function stripAnsi(s) {
169
+ return s.replace(ANSI_RE, "");
170
+ }
171
+ /** Wrap the buffer's logical lines into display rows of width `inner`
172
+ * and locate the cursor in display space. */
173
+ function layout(buf, inner) {
174
+ const logical = buf.lines();
175
+ const { row: curRow, col: curCol } = buf.rowCol();
176
+ const rows = [];
177
+ let cursorRow = 0;
178
+ let cursorCol = 0;
179
+ for (let r = 0; r < logical.length; r++) {
180
+ const line = logical[r];
181
+ const chunks = wrap(line, inner);
182
+ for (let c = 0; c < chunks.length; c++) {
183
+ const startCol = c * inner;
184
+ rows.push({ text: chunks[c], startCol, logicalRow: r });
185
+ if (r === curRow && curCol >= startCol && curCol <= startCol + chunks[c].length) {
186
+ // Cursor lands on this chunk unless it sits exactly at a wrap
187
+ // boundary that continues onto the next chunk.
188
+ const atBoundary = curCol === startCol + inner && c < chunks.length - 1;
189
+ if (!atBoundary) {
190
+ cursorRow = rows.length - 1;
191
+ cursorCol = curCol - startCol;
192
+ }
193
+ }
194
+ }
195
+ }
196
+ return { rows, cursorRow, cursorCol };
197
+ }
198
+ function wrap(line, inner) {
199
+ if (line.length === 0)
200
+ return [""];
201
+ const out = [];
202
+ for (let i = 0; i < line.length; i += inner)
203
+ out.push(line.slice(i, i + inner));
204
+ return out;
205
+ }
206
+ // ── Bracketed paste + Shift+Enter sequences ───────────────────────────
207
+ const PASTE_START = "\x1b[200~";
208
+ const PASTE_END = "\x1b[201~";
209
+ // Sequences some terminals emit for Shift+Enter (kitty keyboard protocol
210
+ // and xterm's modifyOtherKeys). Where present, treat as a newline.
211
+ const SHIFT_ENTER_SEQS = new Set(["\x1b[13;2u", "\x1b[27;2;13~"]);
212
+ /** Read one (possibly multi-line) message from a TTY with a visible,
213
+ * bordered, brand-amber input box. Resolves with the submitted text, or
214
+ * null on EOF (Ctrl+D at an empty prompt). Ctrl+C clears a non-empty
215
+ * buffer, or exits (130) when already empty. */
216
+ export function promptMultiline(opts = {}) {
217
+ const stdin = process.stdin;
218
+ const stdout = process.stdout;
219
+ const useColor = !opts.noColor && !!stdout.isTTY && !process.env.NO_COLOR;
220
+ const label = opts.label ?? "theron";
221
+ const placeholder = opts.placeholder ?? "";
222
+ const hint = opts.hint ??
223
+ "Enter to send · Shift+Tab or \\+Enter for newline · Ctrl+C to clear";
224
+ const history = opts.history ?? [];
225
+ let historyIdx = history.length; // points one past the end (the live buffer)
226
+ let stash = ""; // live buffer saved when browsing history
227
+ const buf = new LineBuffer();
228
+ let pasteMode = false;
229
+ let lastCtrlC = false;
230
+ let prevCursorRow = 0; // where we left the terminal cursor (rows below box top)
231
+ let painted = false;
232
+ const amber = (s) => (useColor ? chalk.hex(AMBER)(s) : s);
233
+ const amberBold = (s) => (useColor ? chalk.bold.hex(AMBER)(s) : s);
234
+ const dim = (s) => (useColor ? chalk.dim(s) : s);
235
+ return new Promise((resolve) => {
236
+ readline.emitKeypressEvents(stdin);
237
+ const wasRaw = stdin.isRaw === true;
238
+ if (stdin.isTTY)
239
+ stdin.setRawMode(true);
240
+ stdin.resume();
241
+ stdout.write("\x1b[?2004h"); // enable bracketed paste
242
+ const cols = () => stdout.columns || 80;
243
+ const boxWidth = () => Math.max(20, Math.min(cols(), 120));
244
+ const innerWidth = () => boxWidth() - 4; // "│ " + " │"
245
+ function buildRows() {
246
+ const inner = innerWidth();
247
+ const width = boxWidth();
248
+ const lay = layout(buf, inner);
249
+ const top = "╭─ " + label + " " + "─".repeat(Math.max(0, width - label.length - 5)) + "╮";
250
+ const bottom = "╰" + "─".repeat(width - 2) + "╯";
251
+ const out = [];
252
+ out.push(amberBold(top));
253
+ const showPlaceholder = buf.isEmpty() && placeholder.length > 0;
254
+ lay.rows.forEach((row, i) => {
255
+ let content = row.text;
256
+ if (showPlaceholder && i === 0) {
257
+ const ph = placeholder.slice(0, inner);
258
+ out.push(amber("│") + " " + dim(ph) + " ".repeat(Math.max(0, inner - ph.length)) + " " + amber("│"));
259
+ return;
260
+ }
261
+ const padded = content + " ".repeat(Math.max(0, inner - content.length));
262
+ out.push(amber("│") + " " + padded + " " + amber("│"));
263
+ });
264
+ out.push(amberBold(bottom));
265
+ if (hint)
266
+ out.push(dim(hint));
267
+ // Cursor: box-top is row 0, first content row is row 1.
268
+ const cursorRow = 1 + lay.cursorRow;
269
+ const cursorCol = 2 + lay.cursorCol; // 1 ("│") + 1 (" ") prefix
270
+ return { rows: out, cursorRow, cursorCol };
271
+ }
272
+ function render() {
273
+ if (!stdout.isTTY)
274
+ return;
275
+ const { rows, cursorRow, cursorCol } = buildRows();
276
+ let seq = "\x1b[?25l"; // hide cursor while repainting
277
+ if (painted) {
278
+ // Return to the top-left of the previously painted box.
279
+ if (prevCursorRow > 0)
280
+ seq += `\x1b[${prevCursorRow}A`;
281
+ seq += "\r";
282
+ }
283
+ seq += "\x1b[0J"; // clear from here down
284
+ seq += rows.join("\r\n");
285
+ // Cursor is now at end of the last printed row. Move it to target.
286
+ const lastRow = rows.length - 1;
287
+ const up = lastRow - cursorRow;
288
+ if (up > 0)
289
+ seq += `\x1b[${up}A`;
290
+ seq += "\r";
291
+ if (cursorCol > 0)
292
+ seq += `\x1b[${cursorCol}C`;
293
+ seq += "\x1b[?25h"; // show cursor at the edit position
294
+ stdout.write(seq);
295
+ prevCursorRow = cursorRow;
296
+ painted = true;
297
+ }
298
+ function cleanup() {
299
+ stdin.removeListener("keypress", onKeypress);
300
+ stdout.removeListener("resize", onResize);
301
+ stdout.write("\x1b[?2004l"); // disable bracketed paste
302
+ if (stdin.isTTY && !wasRaw)
303
+ stdin.setRawMode(false);
304
+ stdin.pause();
305
+ }
306
+ /** Wipe the live box and re-print the submitted text as a clean,
307
+ * amber "> ..." block so scrollback stays tidy. */
308
+ function finishAndEcho(value) {
309
+ if (stdout.isTTY) {
310
+ let seq = "\x1b[?25l";
311
+ if (prevCursorRow > 0)
312
+ seq += `\x1b[${prevCursorRow}A`;
313
+ seq += "\r\x1b[0J\x1b[?25h";
314
+ stdout.write(seq);
315
+ }
316
+ const lines = value.split("\n");
317
+ const rendered = lines
318
+ .map((l, i) => (i === 0 ? amberBold("> ") + l : " " + l))
319
+ .join("\n");
320
+ stdout.write(rendered + "\n\n");
321
+ }
322
+ function onResize() {
323
+ render();
324
+ }
325
+ function submit() {
326
+ const value = buf.value();
327
+ cleanup();
328
+ finishAndEcho(value);
329
+ if (value.trim().length > 0)
330
+ history.push(value);
331
+ resolve(value);
332
+ }
333
+ function recallHistory(dir) {
334
+ if (history.length === 0)
335
+ return;
336
+ if (historyIdx === history.length) {
337
+ // Leaving the live buffer — stash it so Down can restore it.
338
+ if (dir === 1)
339
+ return; // already at the bottom
340
+ stash = buf.value();
341
+ }
342
+ const next = clamp(historyIdx + dir, 0, history.length);
343
+ historyIdx = next;
344
+ const text = next === history.length ? stash : history[next];
345
+ buf.text = text;
346
+ buf.cursor = text.length;
347
+ }
348
+ function onKeypress(str, key) {
349
+ const seq = key?.sequence ?? str ?? "";
350
+ // ── Bracketed paste ──────────────────────────────────────────
351
+ if (seq === PASTE_START) {
352
+ pasteMode = true;
353
+ return;
354
+ }
355
+ if (seq === PASTE_END) {
356
+ pasteMode = false;
357
+ render();
358
+ return;
359
+ }
360
+ if (pasteMode) {
361
+ // Insert pasted content literally; CR/LF become newlines.
362
+ const text = seq.replace(/\r\n?/g, "\n");
363
+ buf.insert(text);
364
+ return; // batch the repaint until paste end for speed
365
+ }
366
+ const name = key?.name;
367
+ // ── Newline vs. submit ───────────────────────────────────────
368
+ if (SHIFT_ENTER_SEQS.has(seq) || (name === "tab" && key.shift)) {
369
+ buf.newline();
370
+ lastCtrlC = false;
371
+ return render();
372
+ }
373
+ if (name === "return" || seq === "\r") {
374
+ if (key.meta) {
375
+ buf.newline();
376
+ lastCtrlC = false;
377
+ return render();
378
+ }
379
+ // "\"-continuation: a trailing backslash means "new line".
380
+ if (buf.cursor > 0 && buf.text[buf.cursor - 1] === "\\") {
381
+ buf.backspace();
382
+ buf.newline();
383
+ lastCtrlC = false;
384
+ return render();
385
+ }
386
+ return submit();
387
+ }
388
+ if (name === "enter" || seq === "\n") {
389
+ // Ctrl+J — explicit newline.
390
+ buf.newline();
391
+ lastCtrlC = false;
392
+ return render();
393
+ }
394
+ // ── Control keys ─────────────────────────────────────────────
395
+ if (key.ctrl) {
396
+ lastCtrlC = name === "c" ? lastCtrlC : false;
397
+ switch (name) {
398
+ case "c":
399
+ if (buf.isEmpty()) {
400
+ cleanup();
401
+ stdout.write("\n");
402
+ process.exit(130);
403
+ }
404
+ buf.clear();
405
+ lastCtrlC = true;
406
+ return render();
407
+ case "d":
408
+ if (buf.isEmpty()) {
409
+ cleanup();
410
+ stdout.write("\n");
411
+ return resolve(null);
412
+ }
413
+ buf.del();
414
+ return render();
415
+ case "a":
416
+ buf.home();
417
+ return render();
418
+ case "e":
419
+ buf.end();
420
+ return render();
421
+ case "b":
422
+ buf.left();
423
+ return render();
424
+ case "f":
425
+ buf.right();
426
+ return render();
427
+ case "k":
428
+ buf.killToEnd();
429
+ return render();
430
+ case "u":
431
+ buf.clear();
432
+ return render();
433
+ case "w":
434
+ buf.deleteWordLeft();
435
+ return render();
436
+ case "l":
437
+ stdout.write("\x1b[2J\x1b[H");
438
+ painted = false;
439
+ return render();
440
+ default:
441
+ return;
442
+ }
443
+ }
444
+ lastCtrlC = false;
445
+ // ── Navigation + editing ─────────────────────────────────────
446
+ switch (name) {
447
+ case "backspace":
448
+ buf.backspace();
449
+ return render();
450
+ case "delete":
451
+ buf.del();
452
+ return render();
453
+ case "left":
454
+ buf.left();
455
+ return render();
456
+ case "right":
457
+ buf.right();
458
+ return render();
459
+ case "home":
460
+ buf.home();
461
+ return render();
462
+ case "end":
463
+ buf.end();
464
+ return render();
465
+ case "up": {
466
+ const { row } = buf.rowCol();
467
+ if (row === 0)
468
+ recallHistory(-1);
469
+ else
470
+ buf.up();
471
+ return render();
472
+ }
473
+ case "down": {
474
+ const { row } = buf.rowCol();
475
+ if (row === buf.lines().length - 1)
476
+ recallHistory(1);
477
+ else
478
+ buf.down();
479
+ return render();
480
+ }
481
+ case "tab":
482
+ buf.insert(" ");
483
+ return render();
484
+ default:
485
+ break;
486
+ }
487
+ // ── Printable input ──────────────────────────────────────────
488
+ // Accept single printable chars (and multi-char runs that aren't
489
+ // escape sequences). Filter out stray control bytes.
490
+ if (seq && !seq.startsWith("\x1b") && !hasControlChar(seq)) {
491
+ buf.insert(seq);
492
+ return render();
493
+ }
494
+ }
495
+ stdin.on("keypress", onKeypress);
496
+ stdout.on("resize", onResize);
497
+ render();
498
+ });
499
+ }
500
+ // eslint-disable-next-line no-control-regex
501
+ const CONTROL_RE = /[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/;
502
+ function hasControlChar(s) {
503
+ return CONTROL_RE.test(s);
504
+ }
505
+ /** Single-line raw-mode reader for confirmations and pickers (y/N,
506
+ * a number). Keeps the TTY path consistent with promptMultiline (no
507
+ * competing readline.Interface) while staying intentionally minimal:
508
+ * one logical line, Enter submits, Backspace edits, Ctrl+C cancels. */
509
+ export function promptLine(question, opts = {}) {
510
+ const stdin = process.stdin;
511
+ const stdout = process.stdout;
512
+ if (!stdin.isTTY) {
513
+ // Non-TTY: read a single line from the data stream (canonical mode).
514
+ return new Promise((resolve) => {
515
+ stdout.write(question);
516
+ let bufStr = "";
517
+ const onData = (chunk) => {
518
+ bufStr += chunk.toString("utf8");
519
+ const nl = bufStr.indexOf("\n");
520
+ if (nl >= 0) {
521
+ stdin.off("data", onData);
522
+ resolve(bufStr.slice(0, nl));
523
+ }
524
+ };
525
+ stdin.on("data", onData);
526
+ });
527
+ }
528
+ return new Promise((resolve) => {
529
+ readline.emitKeypressEvents(stdin);
530
+ const wasRaw = stdin.isRaw === true;
531
+ stdin.setRawMode(true);
532
+ stdin.resume();
533
+ stdout.write(question);
534
+ let line = "";
535
+ function cleanup() {
536
+ stdin.removeListener("keypress", onKeypress);
537
+ if (!wasRaw)
538
+ stdin.setRawMode(false);
539
+ stdin.pause();
540
+ }
541
+ function onKeypress(str, key) {
542
+ const seq = key?.sequence ?? str ?? "";
543
+ const name = key?.name;
544
+ if (name === "return" || name === "enter" || seq === "\r" || seq === "\n") {
545
+ cleanup();
546
+ stdout.write("\n");
547
+ return resolve(line);
548
+ }
549
+ if (key.ctrl && name === "c") {
550
+ cleanup();
551
+ stdout.write("\n");
552
+ process.exit(130);
553
+ }
554
+ if (key.ctrl && name === "d") {
555
+ cleanup();
556
+ stdout.write("\n");
557
+ return resolve(line);
558
+ }
559
+ if (name === "backspace") {
560
+ if (line.length > 0) {
561
+ line = line.slice(0, -1);
562
+ stdout.write("\b \b");
563
+ }
564
+ return;
565
+ }
566
+ if (seq && !seq.startsWith("\x1b") && !hasControlChar(seq)) {
567
+ line += seq;
568
+ stdout.write(seq);
569
+ }
570
+ }
571
+ stdin.on("keypress", onKeypress);
572
+ });
573
+ }
574
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"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"}
@@ -43,6 +43,11 @@ export function overlayRemoteProfiles(remote) {
43
43
  ...(local ?? p),
44
44
  ...p,
45
45
  slug: p.slug.toLowerCase(),
46
+ // A remote profile that OMITS `verifiers` must not silently delete the
47
+ // local baseline's verifiers (that would disable the self-verification
48
+ // loop). Only let the remote override verifiers when it explicitly
49
+ // provides them.
50
+ verifiers: p.verifiers ?? local?.verifiers,
46
51
  };
47
52
  REGISTRY.set(merged.slug, merged);
48
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/profiles/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,EAAE;AACF,oEAAoE;AACpE,uEAAuE;AACvE,qEAAqE;AACrE,qDAAqD;AAGrD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEjE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;AAClD,KAAK,MAAM,CAAC,IAAI,aAAa;IAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAEvD,IAAI,cAAc,GAAG,KAAK,CAAC;AAE3B,4EAA4E;AAC5E,MAAM,UAAU,UAAU,CAAC,IAA+B;IACxD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,CAAC;AAClD,CAAC;AAED;+CAC+C;AAC/C,MAAM,UAAU,mBAAmB,CAAC,IAA+B;IACjE,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAE,CAAC;AACjE,CAAC;AAED;mBACmB;AACnB,MAAM,UAAU,YAAY;IAC1B,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AACvC,CAAC;AAED;;;;wDAIwD;AACxD,MAAM,UAAU,qBAAqB,CAAC,MAAuB;IAC3D,IAAI,cAAc;QAAE,OAAO;IAC3B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,EAAE,IAAI;YAAE,SAAS;QACvB,mEAAmE;QACnE,uDAAuD;QACvD,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACjD,MAAM,MAAM,GAAkB;YAC5B,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;YACf,GAAG,CAAC;YACJ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;SAC3B,CAAC;QACF,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IACD,cAAc,GAAG,IAAI,CAAC;AACxB,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,YAAY,CAAC,IAA+B;IAC1D,OAAO,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,SAAS,CAAC;AAC9C,CAAC;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/profiles/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,EAAE;AACF,oEAAoE;AACpE,uEAAuE;AACvE,qEAAqE;AACrE,qDAAqD;AAGrD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEjE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;AAClD,KAAK,MAAM,CAAC,IAAI,aAAa;IAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAEvD,IAAI,cAAc,GAAG,KAAK,CAAC;AAE3B,4EAA4E;AAC5E,MAAM,UAAU,UAAU,CAAC,IAA+B;IACxD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,CAAC;AAClD,CAAC;AAED;+CAC+C;AAC/C,MAAM,UAAU,mBAAmB,CAAC,IAA+B;IACjE,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAE,CAAC;AACjE,CAAC;AAED;mBACmB;AACnB,MAAM,UAAU,YAAY;IAC1B,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AACvC,CAAC;AAED;;;;wDAIwD;AACxD,MAAM,UAAU,qBAAqB,CAAC,MAAuB;IAC3D,IAAI,cAAc;QAAE,OAAO;IAC3B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,EAAE,IAAI;YAAE,SAAS;QACvB,mEAAmE;QACnE,uDAAuD;QACvD,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACjD,MAAM,MAAM,GAAkB;YAC5B,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;YACf,GAAG,CAAC;YACJ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;YAC1B,uEAAuE;YACvE,uEAAuE;YACvE,mEAAmE;YACnE,iBAAiB;YACjB,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,KAAK,EAAE,SAAS;SAC3C,CAAC;QACF,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IACD,cAAc,GAAG,IAAI,CAAC;AACxB,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,YAAY,CAAC,IAA+B;IAC1D,OAAO,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,SAAS,CAAC;AAC9C,CAAC;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface DomainOverride {
2
+ methodology: string;
3
+ invariant: string;
4
+ verifiers: string[];
5
+ hiveSpecs: string[];
6
+ starters: string[];
7
+ }
8
+ export declare const OPERATE_DOMAIN_OVERRIDES: Record<string, DomainOverride>;