@vextlabs/theron-cli 0.2.1 → 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.
- package/dist/api.d.ts +8 -0
- package/dist/api.js +3 -0
- package/dist/api.js.map +1 -1
- package/dist/auth.js +51 -1
- package/dist/auth.js.map +1 -1
- package/dist/banner.js +3 -2
- package/dist/banner.js.map +1 -1
- package/dist/checkpoints.d.ts +32 -0
- package/dist/checkpoints.js +61 -0
- package/dist/checkpoints.js.map +1 -0
- package/dist/index.js +61 -5
- package/dist/index.js.map +1 -1
- package/dist/input.d.ts +61 -0
- package/dist/input.js +574 -0
- package/dist/input.js.map +1 -0
- package/dist/profiles/index.js +5 -0
- package/dist/profiles/index.js.map +1 -1
- package/dist/profiles/methodologies/build_domains.d.ts +6 -0
- package/dist/profiles/methodologies/build_domains.js +170 -0
- package/dist/profiles/methodologies/build_domains.js.map +1 -0
- package/dist/profiles/methodologies/operate_domains.d.ts +8 -0
- package/dist/profiles/methodologies/operate_domains.js +1239 -0
- package/dist/profiles/methodologies/operate_domains.js.map +1 -0
- package/dist/profiles/methodologies/regulated_domains.d.ts +6 -0
- package/dist/profiles/methodologies/regulated_domains.js +153 -0
- package/dist/profiles/methodologies/regulated_domains.js.map +1 -0
- package/dist/profiles/methodologies/research_domains.d.ts +8 -0
- package/dist/profiles/methodologies/research_domains.js +179 -0
- package/dist/profiles/methodologies/research_domains.js.map +1 -0
- package/dist/profiles/methodologies/strategy_domains.d.ts +15 -0
- package/dist/profiles/methodologies/strategy_domains.js +193 -0
- package/dist/profiles/methodologies/strategy_domains.js.map +1 -0
- package/dist/profiles/seeds.js +241 -95
- package/dist/profiles/seeds.js.map +1 -1
- package/dist/receipt.d.ts +17 -0
- package/dist/receipt.js +46 -0
- package/dist/receipt.js.map +1 -0
- package/dist/render.d.ts +4 -1
- package/dist/render.js +95 -28
- package/dist/render.js.map +1 -1
- package/dist/repl.d.ts +8 -1
- package/dist/repl.js +420 -62
- package/dist/repl.js.map +1 -1
- package/dist/sessions.d.ts +14 -0
- package/dist/sessions.js +100 -0
- package/dist/sessions.js.map +1 -1
- package/dist/ship.d.ts +2 -0
- package/dist/ship.js +62 -0
- package/dist/ship.js.map +1 -0
- package/dist/skills/catalog.d.ts +13 -0
- package/dist/skills/catalog.js +86 -0
- package/dist/skills/catalog.js.map +1 -0
- package/dist/tools/bash.js +81 -14
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/edit.js +21 -1
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/glob.js +4 -1
- package/dist/tools/glob.js.map +1 -1
- package/dist/tools/grep.d.ts +5 -0
- package/dist/tools/grep.js +101 -2
- package/dist/tools/grep.js.map +1 -1
- package/dist/tools/index.d.ts +22 -0
- package/dist/tools/index.js +177 -41
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/ls.d.ts +3 -0
- package/dist/tools/ls.js +23 -12
- package/dist/tools/ls.js.map +1 -1
- package/dist/tools/multiedit.d.ts +12 -0
- package/dist/tools/multiedit.js +79 -0
- package/dist/tools/multiedit.js.map +1 -0
- package/dist/tools/stoa.d.ts +1 -1
- package/dist/tools/stoa.js +7 -3
- package/dist/tools/stoa.js.map +1 -1
- package/dist/tools/task.d.ts +9 -0
- package/dist/tools/task.js +166 -0
- package/dist/tools/task.js.map +1 -0
- package/dist/tools/todowrite.d.ts +12 -0
- package/dist/tools/todowrite.js +38 -0
- package/dist/tools/todowrite.js.map +1 -0
- package/dist/tools/webfetch.d.ts +6 -0
- package/dist/tools/webfetch.js +98 -0
- package/dist/tools/webfetch.js.map +1 -0
- package/dist/tools/websearch.d.ts +7 -0
- package/dist/tools/websearch.js +83 -0
- package/dist/tools/websearch.js.map +1 -0
- package/dist/tools/write.js +17 -1
- package/dist/tools/write.js.map +1 -1
- package/dist/verifiers/calc_gate.d.ts +2 -0
- package/dist/verifiers/calc_gate.js +112 -0
- package/dist/verifiers/calc_gate.js.map +1 -0
- package/dist/verifiers/citation_gate.d.ts +2 -0
- package/dist/verifiers/citation_gate.js +130 -0
- package/dist/verifiers/citation_gate.js.map +1 -0
- package/dist/verifiers/confidence_marked.d.ts +2 -0
- package/dist/verifiers/confidence_marked.js +49 -0
- package/dist/verifiers/confidence_marked.js.map +1 -0
- package/dist/verifiers/disclaimer_gate.d.ts +2 -0
- package/dist/verifiers/disclaimer_gate.js +57 -0
- package/dist/verifiers/disclaimer_gate.js.map +1 -0
- package/dist/verifiers/evidence_gate.d.ts +2 -0
- package/dist/verifiers/evidence_gate.js +108 -0
- package/dist/verifiers/evidence_gate.js.map +1 -0
- package/dist/verifiers/index.d.ts +5 -0
- package/dist/verifiers/index.js +28 -7
- package/dist/verifiers/index.js.map +1 -1
- package/dist/verifiers/lint.js +4 -3
- package/dist/verifiers/lint.js.map +1 -1
- package/dist/verifiers/promoted_kernels.d.ts +8 -0
- package/dist/verifiers/promoted_kernels.js +190 -0
- package/dist/verifiers/promoted_kernels.js.map +1 -0
- package/dist/verifiers/source_gate.d.ts +2 -0
- package/dist/verifiers/source_gate.js +125 -0
- package/dist/verifiers/source_gate.js.map +1 -0
- package/dist/verifiers/test_smoke.js +30 -0
- package/dist/verifiers/test_smoke.js.map +1 -1
- package/dist/verifiers/types.d.ts +3 -0
- package/package.json +4 -2
- package/skills/README.md +123 -0
- package/skills/ab-test.md +89 -0
- package/skills/api-design.md +175 -0
- package/skills/architecture-design.md +185 -0
- package/skills/business-case.md +77 -0
- package/skills/causal-inference.md +77 -0
- package/skills/clinical-guideline.md +98 -0
- package/skills/code-review.md +98 -0
- package/skills/cold-outreach.md +268 -0
- package/skills/competitive-teardown.md +223 -0
- package/skills/component-spec.md +121 -0
- package/skills/content-calendar.md +280 -0
- package/skills/contract-review.md +155 -0
- package/skills/data-analysis.md +187 -0
- package/skills/debug.md +91 -0
- package/skills/design-audit.md +121 -0
- package/skills/differential-diagnosis.md +79 -0
- package/skills/discovery-call.md +206 -0
- package/skills/edit-pass.md +80 -0
- package/skills/engineering-calc.md +101 -0
- package/skills/estimate.md +70 -0
- package/skills/experiment-design.md +105 -0
- package/skills/fact-check.md +82 -0
- package/skills/financial-model.md +104 -0
- package/skills/grant-proposal.md +93 -0
- package/skills/harmony-analysis.md +93 -0
- package/skills/hypothesis-generation.md +99 -0
- package/skills/incident-response.md +134 -0
- package/skills/interview-loop.md +62 -0
- package/skills/job-scorecard.md +92 -0
- package/skills/kb-article.md +174 -0
- package/skills/launch-plan.md +85 -0
- package/skills/lease-review.md +93 -0
- package/skills/lesson-plan.md +198 -0
- package/skills/literature-review.md +69 -0
- package/skills/market-entry.md +137 -0
- package/skills/market-sizing.md +159 -0
- package/skills/meta-analysis.md +140 -0
- package/skills/migrate.md +117 -0
- package/skills/optimize.md +88 -0
- package/skills/options-strategy.md +166 -0
- package/skills/peer-review.md +96 -0
- package/skills/pentest-plan.md +193 -0
- package/skills/pitch-review.md +132 -0
- package/skills/plan.md +88 -0
- package/skills/policy-brief.md +124 -0
- package/skills/positioning.md +192 -0
- package/skills/postmortem.md +168 -0
- package/skills/prd.md +105 -0
- package/skills/prioritize.md +162 -0
- package/skills/proof.md +91 -0
- package/skills/property-underwrite.md +159 -0
- package/skills/recipe-develop.md +109 -0
- package/skills/red-team.md +142 -0
- package/skills/refactor.md +58 -0
- package/skills/reflection-session.md +115 -0
- package/skills/regulatory-compliance.md +136 -0
- package/skills/reproduce.md +87 -0
- package/skills/runbook.md +344 -0
- package/skills/security-audit.md +154 -0
- package/skills/seo-brief.md +201 -0
- package/skills/sql-query.md +161 -0
- package/skills/story-craft.md +163 -0
- package/skills/tdd.md +59 -0
- package/skills/term-sheet.md +298 -0
- package/skills/theory-of-change.md +88 -0
- package/skills/threat-model.md +104 -0
- package/skills/ticket-triage.md +200 -0
- package/skills/tolerance-analysis.md +149 -0
- package/skills/training-program.md +151 -0
- package/skills/translate.md +64 -0
- package/skills/unit-economics.md +238 -0
- package/skills/valuation.md +112 -0
- 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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"}
|
package/dist/profiles/index.js
CHANGED
|
@@ -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;
|
|
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,6 @@
|
|
|
1
|
+
export declare const CODE_INVARIANT = "Run the tests/build before claiming it works; show the diff AND the passing output \u2014 never assert green from memory.";
|
|
2
|
+
export declare const CODE_METHODOLOGY: string;
|
|
3
|
+
export declare const ENGINEERING_INVARIANT = "Prove the system with a real run \u2014 build it, exercise it, paste the green output and the rollback path; never sign off on a design you only reasoned about.";
|
|
4
|
+
export declare const ENGINEERING_METHODOLOGY: string;
|
|
5
|
+
export declare const DATA_INVARIANT = "Show the query/code AND verify the numbers against a real run \u2014 reconcile totals, state n and assumptions; never report a figure you didn't compute.";
|
|
6
|
+
export declare const DATA_METHODOLOGY: string;
|