redlinegate 0.0.1 → 0.0.2

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 (58) hide show
  1. package/README.md +22 -6
  2. package/dist/bin/redline.js +101 -11
  3. package/dist/bin/redline.js.map +1 -1
  4. package/dist/commands/init.js +94 -23
  5. package/dist/commands/init.js.map +1 -1
  6. package/dist/commands/remove.js +3 -1
  7. package/dist/commands/remove.js.map +1 -1
  8. package/dist/commands/verify.js +82 -2
  9. package/dist/commands/verify.js.map +1 -1
  10. package/dist/config/redline-json.js +45 -1
  11. package/dist/config/redline-json.js.map +1 -1
  12. package/dist/detect/existing.js +151 -0
  13. package/dist/detect/existing.js.map +1 -0
  14. package/dist/exempt/parse.js +8 -1
  15. package/dist/exempt/parse.js.map +1 -1
  16. package/dist/platforms/azure/install.js +8 -4
  17. package/dist/platforms/azure/install.js.map +1 -1
  18. package/dist/platforms/azure/verify.js +6 -0
  19. package/dist/platforms/azure/verify.js.map +1 -1
  20. package/dist/platforms/github/install.js +88 -10
  21. package/dist/platforms/github/install.js.map +1 -1
  22. package/dist/platforms/github/preflight.js +63 -0
  23. package/dist/platforms/github/preflight.js.map +1 -0
  24. package/dist/platforms/github/verify.js +62 -5
  25. package/dist/platforms/github/verify.js.map +1 -1
  26. package/dist/platforms/types.js +4 -0
  27. package/dist/platforms/types.js.map +1 -1
  28. package/dist/policy/diff.js +26 -9
  29. package/dist/policy/diff.js.map +1 -1
  30. package/dist/render/contexts.js +39 -0
  31. package/dist/render/contexts.js.map +1 -0
  32. package/dist/render/profile.js +44 -10
  33. package/dist/render/profile.js.map +1 -1
  34. package/dist/render/standards.js +2 -0
  35. package/dist/render/standards.js.map +1 -1
  36. package/dist/render/vendors.js +5 -1
  37. package/dist/render/vendors.js.map +1 -1
  38. package/dist/ui/facts.js +82 -0
  39. package/dist/ui/facts.js.map +1 -0
  40. package/dist/ui/prompt.js +201 -0
  41. package/dist/ui/prompt.js.map +1 -0
  42. package/dist/ui/tty.js +243 -0
  43. package/dist/ui/tty.js.map +1 -0
  44. package/dist/ui/wizard.js +179 -0
  45. package/dist/ui/wizard.js.map +1 -0
  46. package/package.json +10 -1
  47. package/platforms/azure/gate-template-github.yml +152 -0
  48. package/platforms/azure/gate-template.yml +59 -6
  49. package/scripts/check-pins.mjs +84 -1
  50. package/standards/contexts/speckit.md +22 -0
  51. package/standards/contexts/tmf.md +25 -0
  52. package/standards/manifest.json +1 -1
  53. package/templates/redline.yml +5 -9
  54. package/workflows/dashboard.yml +1 -1
  55. package/workflows/redline-collect.yml +1 -1
  56. package/workflows/redline-gate.yml +10 -3
  57. package/workflows/seed-canary.yml +2 -2
  58. package/workflows/weekly-digest.yml +1 -1
@@ -22,7 +22,11 @@ export const LOCAL_HEADING = '# Repository-local rules';
22
22
  export function localSection(local) {
23
23
  return `---\n\n${LOCAL_HEADING}\n\n${PRECEDENCE}\n\n${local}`;
24
24
  }
25
- const withLocal = (ctx, body) => ctx.local === null ? body : `${body}\n\n${localSection(ctx.local)}`;
25
+ const withContexts = (ctx, body) => ctx.contexts.length === 0 ? body : `${body}\n\n---\n\n${ctx.contexts.join('\n\n---\n\n')}`;
26
+ const withLocal = (ctx, body) => {
27
+ const withOrgContext = withContexts(ctx, body);
28
+ return ctx.local === null ? withOrgContext : `${withOrgContext}\n\n${localSection(ctx.local)}`;
29
+ };
26
30
  // A REDLINE marker line and an unclosed code fence are the two shapes in a
27
31
  // human's markdown that reach markers.ts as structure rather than as prose: the
28
32
  // first makes a second marker pair, which wrapBlock refuses, and the second
@@ -1 +1 @@
1
- {"version":3,"file":"vendors.js","sourceRoot":"","sources":["../../cli/render/vendors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vendors.js","sourceRoot":"","sources":["../../cli/render/vendors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import { existsSync, readdirSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { readConfig } from "../config/redline-json.js";
4
+ import { surveyRepo } from "../detect/existing.js";
5
+ import { proposeProfile } from "../detect/stack.js";
6
+ import { scanRepo } from "../detect/scan.js";
7
+ import { loadManifest } from "../render/manifest.js";
8
+ import { detectVendors } from "../commands/init.js";
9
+ // Everything the menu needs to preselect its answers, gathered from the
10
+ // checkout alone.
11
+ //
12
+ // No host call: the wizard's first question has to appear before a credential
13
+ // is resolved, because `Dry run` is one of its answers and a dry run is
14
+ // precisely the path that must work with no credential at all. Anything that
15
+ // genuinely needs the host — does the reusable gate workflow resolve? — is
16
+ // checked later, on the apply path, where a token exists.
17
+ // Where a repository's own pull request pipeline is likely to live. Matching
18
+ // one only sets the DEFAULT answer to "what runs your checks?", so a wrong
19
+ // guess costs one keystroke; missing a real pipeline is what put a GitHub
20
+ // Actions workflow into a repository gated by Azure Pipelines.
21
+ const PIPELINE_HINTS = [
22
+ 'cicd/pre-merge.yaml',
23
+ 'cicd/pre-merge.yml',
24
+ 'cicd/pr-validation.yaml',
25
+ 'azure-pipelines.yml',
26
+ 'azure-pipelines.yaml',
27
+ '.azuredevops/pre-merge.yml',
28
+ '.pipelines/pre-merge.yml',
29
+ ];
30
+ // A directory of pipeline definitions counts too, but only its pull-request
31
+ // shaped members: `cicd/release.yaml` is not a pull request gate and offering
32
+ // to add a review stage to it would be wrong.
33
+ const PIPELINE_DIRS = ['cicd', '.azuredevops', '.pipelines'];
34
+ const PR_SHAPED = /^(pre-?merge|pr-|pull-?request)/i;
35
+ export function findExistingPipeline(cwd) {
36
+ for (const rel of PIPELINE_HINTS) {
37
+ if (existsSync(join(cwd, rel)))
38
+ return rel;
39
+ }
40
+ for (const dir of PIPELINE_DIRS) {
41
+ const abs = join(cwd, dir);
42
+ if (!existsSync(abs))
43
+ continue;
44
+ let entries;
45
+ try {
46
+ entries = readdirSync(abs);
47
+ }
48
+ catch {
49
+ continue;
50
+ }
51
+ const match = entries.find((name) => /\.ya?ml$/i.test(name) && PR_SHAPED.test(name));
52
+ if (match !== undefined)
53
+ return `${dir}/${match}`;
54
+ }
55
+ return null;
56
+ }
57
+ export function gatherFacts(opts) {
58
+ const { cwd, root } = opts;
59
+ const manifest = loadManifest(root);
60
+ const proposal = proposeProfile(scanRepo(cwd));
61
+ const recorded = readConfig(cwd);
62
+ const orgVendors = Object.entries(manifest.vendors)
63
+ .filter(([, vendor]) => vendor.enabled)
64
+ .map(([id]) => id);
65
+ return {
66
+ manifest,
67
+ survey: surveyRepo(cwd),
68
+ detectedProfile: proposal.profile,
69
+ profileEvidence: proposal.evidence,
70
+ detectedVendors: detectVendors(cwd, orgVendors),
71
+ detectedHost: opts.detectedHost,
72
+ existingPipeline: findExistingPipeline(cwd),
73
+ recorded: recorded === null
74
+ ? null
75
+ : {
76
+ ...(recorded.profile !== undefined ? { profile: recorded.profile } : {}),
77
+ ...(recorded.vendors !== undefined ? { vendors: recorded.vendors } : {}),
78
+ ...(recorded.rung !== undefined ? { rung: recorded.rung } : {}),
79
+ },
80
+ };
81
+ }
82
+ //# sourceMappingURL=facts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facts.js","sourceRoot":"","sources":["../../cli/ui/facts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,201 @@
1
+ import { emitKeypressEvents } from 'node:readline';
2
+ import { answered, colorEnabled, firstEnabled, frame, glyphs, intro as introLine, note as noteLine, outro as outroLine, palette, readKey, reduceList, } from "./tty.js";
3
+ // The terminal side of the prompt kit: raw mode, the in-place redraw, and
4
+ // restoring the terminal whatever happens. Everything that decides what a
5
+ // prompt looks like or what a key means lives in tty.ts and is pure.
6
+ //
7
+ // The invariant this file exists to hold: the terminal is left exactly as it
8
+ // was found. Raw mode with a hidden cursor is not a state to leave behind on a
9
+ // crash — the operator's shell would keep echoing nothing until they blind-typed
10
+ // `reset`. Every exit path goes through `restore()`, including the process-level
11
+ // handlers, because a throw from deep inside `init()` unwinds past our `finally`
12
+ // only if we let it.
13
+ /**
14
+ * The operator stopped the run at a prompt.
15
+ *
16
+ * Not a RedlineError: cancelling is not a failure, and it must not print an
17
+ * `error` line or return a failure exit code that a wrapping script would read
18
+ * as "onboarding broke". 130 is the shell convention for SIGINT.
19
+ */
20
+ export class Cancelled extends Error {
21
+ exitCode = 130;
22
+ constructor() {
23
+ super('cancelled');
24
+ this.name = 'Cancelled';
25
+ }
26
+ }
27
+ /**
28
+ * True when a stepped, redrawing prompt can be shown.
29
+ *
30
+ * Both streams must be a TTY: output alone is not enough (there would be
31
+ * nothing to read keys from) and input alone is not enough (there would be
32
+ * nowhere to draw). CI is excluded even when it allocates a TTY, because a
33
+ * prompt in a pipeline is a hang with no operator to answer it — the failure
34
+ * this whole change exists to remove.
35
+ */
36
+ export function isInteractive(env = process.env, input = process.stdin, output = process.stdout) {
37
+ if (env.CI !== undefined && env.CI !== 'false' && env.CI !== '0')
38
+ return false;
39
+ if (env.REDLINE_NO_PROMPT !== undefined)
40
+ return false;
41
+ if (env.TERM === 'dumb')
42
+ return false;
43
+ return input.isTTY === true && output.isTTY === true;
44
+ }
45
+ const DEFAULT_WIDTH = 80;
46
+ export function createPrompter(opts = {}) {
47
+ const input = opts.input ?? process.stdin;
48
+ const output = opts.output ?? process.stdout;
49
+ const env = opts.env ?? process.env;
50
+ const c = palette(colorEnabled(env, output.isTTY === true));
51
+ const g = glyphs(env);
52
+ const write = (text) => {
53
+ output.write(text);
54
+ };
55
+ // Cursor visibility is toggled around a prompt rather than for the whole run:
56
+ // a hidden cursor left behind by a crash is invisible breakage in the
57
+ // operator's next command, not ours.
58
+ const hideCursor = () => write('\x1b[?25l');
59
+ const showCursor = () => write('\x1b[?25h');
60
+ let active = false;
61
+ let restoreHandlers = null;
62
+ const enterRaw = () => {
63
+ emitKeypressEvents(input);
64
+ if (input.isTTY)
65
+ input.setRawMode(true);
66
+ input.resume();
67
+ hideCursor();
68
+ active = true;
69
+ // A signal or an uncaught throw must not leave the terminal in raw mode.
70
+ // These are removed again in exitRaw so a long-lived process (the tests)
71
+ // does not accumulate one pair per prompt.
72
+ const onExit = () => {
73
+ if (active)
74
+ exitRaw();
75
+ };
76
+ process.once('exit', onExit);
77
+ process.once('SIGINT', onExit);
78
+ process.once('SIGTERM', onExit);
79
+ restoreHandlers = () => {
80
+ process.off('exit', onExit);
81
+ process.off('SIGINT', onExit);
82
+ process.off('SIGTERM', onExit);
83
+ };
84
+ };
85
+ const exitRaw = () => {
86
+ active = false;
87
+ showCursor();
88
+ if (input.isTTY)
89
+ input.setRawMode(false);
90
+ input.pause();
91
+ restoreHandlers?.();
92
+ restoreHandlers = null;
93
+ };
94
+ // Rewind exactly the number of lines last drawn, clearing each. Counting our
95
+ // own output rather than asking the terminal is what makes this correct
96
+ // without a cursor-position query — and is why frame() must never emit a
97
+ // line wider than `columns`.
98
+ const erase = (lines) => {
99
+ if (lines === 0)
100
+ return;
101
+ write('\x1b[0G');
102
+ for (let i = 0; i < lines; i += 1) {
103
+ write('\x1b[2K');
104
+ if (i < lines - 1)
105
+ write('\x1b[1A');
106
+ }
107
+ };
108
+ async function list(title, choices, multi, preselected, cursorAt) {
109
+ if (choices.length === 0)
110
+ return [];
111
+ let state = { cursor: cursorAt, selected: preselected };
112
+ const width = output.columns ?? DEFAULT_WIDTH;
113
+ const render = () => frame({ title, choices, state, multi, palette: c, glyphs: g, width });
114
+ enterRaw();
115
+ let drawn = render();
116
+ write(`${drawn}\n`);
117
+ try {
118
+ return await new Promise((resolve, reject) => {
119
+ const onData = (chunk) => {
120
+ const key = readKey(chunk.toString());
121
+ if (key === null)
122
+ return;
123
+ const result = reduceList(choices, state, key, multi);
124
+ if (result.kind === 'cancel') {
125
+ cleanup();
126
+ reject(new Cancelled());
127
+ return;
128
+ }
129
+ if (result.kind === 'submit') {
130
+ cleanup();
131
+ const picked = multi
132
+ ? [...state.selected].sort((a, b) => a - b).map((i) => choices[i].value)
133
+ : [choices[state.cursor].value];
134
+ resolve(picked);
135
+ return;
136
+ }
137
+ state = result.state;
138
+ // The redraw rewinds by the line count of what is on screen now,
139
+ // not of what is about to replace it: a prompt whose option list
140
+ // changed length between frames would otherwise leave orphaned rows.
141
+ erase(drawn.split('\n').length);
142
+ drawn = render();
143
+ write(`${drawn}\n`);
144
+ };
145
+ const cleanup = () => {
146
+ input.off('data', onData);
147
+ erase(drawn.split('\n').length);
148
+ exitRaw();
149
+ };
150
+ input.on('data', onData);
151
+ });
152
+ }
153
+ catch (error) {
154
+ // A throw from anywhere above still has to hand the terminal back.
155
+ if (active)
156
+ exitRaw();
157
+ throw error;
158
+ }
159
+ }
160
+ return {
161
+ intro(title) {
162
+ write(`${introLine(title, c, g)}\n`);
163
+ },
164
+ async select(title, choices, initial) {
165
+ const at = initial === undefined ? -1 : choices.findIndex((ch) => ch.value === initial);
166
+ const cursor = at >= 0 && choices[at].disabled === undefined ? at : firstEnabled(choices);
167
+ const [picked] = await list(title, choices, false, new Set(), cursor);
168
+ const label = choices.find((ch) => ch.value === picked)?.label ?? String(picked);
169
+ write(`${answered(title, label, c, g)}\n`);
170
+ return picked;
171
+ },
172
+ async multiselect(title, choices, initial = []) {
173
+ // A disabled row can never be toggled (movement skips it), so one that
174
+ // started selected could never be turned off — it would render checked
175
+ // and come back in the answer with no way for the operator to refuse it.
176
+ // A vendor the organisation has switched off is exactly that case, and
177
+ // it is recorded in .redline.json often enough to reach here.
178
+ const selected = new Set(choices.flatMap((ch, i) => ch.disabled === undefined && initial.includes(ch.value) ? [i] : []));
179
+ const picked = await list(title, choices, true, selected, firstEnabled(choices));
180
+ const labels = picked.map((value) => choices.find((ch) => ch.value === value)?.label ?? String(value));
181
+ write(`${answered(title, labels.length > 0 ? labels.join(', ') : 'none', c, g)}\n`);
182
+ return picked;
183
+ },
184
+ async confirm(title, initial = true) {
185
+ const choices = [
186
+ { value: true, label: 'Yes' },
187
+ { value: false, label: 'No' },
188
+ ];
189
+ const [picked] = await list(title, choices, false, new Set(), initial ? 0 : 1);
190
+ write(`${answered(title, picked === true ? 'Yes' : 'No', c, g)}\n`);
191
+ return picked;
192
+ },
193
+ note(message) {
194
+ write(`${noteLine(message, c, g)}\n`);
195
+ },
196
+ outro(message) {
197
+ write(`${outroLine(message, c, g)}\n`);
198
+ },
199
+ };
200
+ }
201
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../cli/ui/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,KAAK,EACL,MAAM,EACN,KAAK,IAAI,SAAS,EAClB,IAAI,IAAI,QAAQ,EAChB,KAAK,IAAI,SAAS,EAClB,OAAO,EACP,OAAO,EACP,UAAU,GAKX,MAAM,UAAU,CAAC;AAMlB,0EAA0E;AAC1E,0EAA0E;AAC1E,qEAAqE;AACrE,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAC/E,iFAAiF;AACjF,iFAAiF;AACjF,iFAAiF;AACjF,qBAAqB;AAErB;;;;;;GAMG;AACH,MAAM,OAAO,SAAU,SAAQ,KAAK;IACzB,QAAQ,GAAG,GAAG,CAAC;IACxB;QACE,KAAK,CAAC,WAAW,CAAC,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AAqBD;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAyB,OAAO,CAAC,GAAG,EACpC,QAA2B,OAAO,CAAC,KAAK,EACxC,SAA6B,OAAO,CAAC,MAAM;IAE3C,IAAI,GAAG,CAAC,EAAE,KAAK,SAAS,IAAI,GAAG,CAAC,EAAE,KAAK,OAAO,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IAC/E,IAAI,GAAG,CAAC,iBAAiB,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACtD,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;AACvD,CAAC;AAED,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB,MAAM,UAAU,cAAc,CAAC,OAAwB,EAAE;IACvD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IAEpC,MAAM,CAAC,GAAY,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC;IACrE,MAAM,CAAC,GAAW,MAAM,CAAC,GAAG,CAAC,CAAC;IAE9B,MAAM,KAAK,GAAG,CAAC,IAAY,EAAQ,EAAE;QACnC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,8EAA8E;IAC9E,sEAAsE;IACtE,qCAAqC;IACrC,MAAM,UAAU,GAAG,GAAS,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,GAAS,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAElD,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,eAAe,GAAwB,IAAI,CAAC;IAEhD,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,KAAK,CAAC,KAAK;YAAE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACxC,KAAK,CAAC,MAAM,EAAE,CAAC;QACf,UAAU,EAAE,CAAC;QACb,MAAM,GAAG,IAAI,CAAC;QAEd,yEAAyE;QACzE,yEAAyE;QACzE,2CAA2C;QAC3C,MAAM,MAAM,GAAG,GAAS,EAAE;YACxB,IAAI,MAAM;gBAAE,OAAO,EAAE,CAAC;QACxB,CAAC,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAChC,eAAe,GAAG,GAAG,EAAE;YACrB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAS,EAAE;QACzB,MAAM,GAAG,KAAK,CAAC;QACf,UAAU,EAAE,CAAC;QACb,IAAI,KAAK,CAAC,KAAK;YAAE,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACzC,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,eAAe,EAAE,EAAE,CAAC;QACpB,eAAe,GAAG,IAAI,CAAC;IACzB,CAAC,CAAC;IAEF,6EAA6E;IAC7E,wEAAwE;IACxE,yEAAyE;IACzE,6BAA6B;IAC7B,MAAM,KAAK,GAAG,CAAC,KAAa,EAAQ,EAAE;QACpC,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO;QACxB,KAAK,CAAC,SAAS,CAAC,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,KAAK,CAAC,SAAS,CAAC,CAAC;YACjB,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC;gBAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,UAAU,IAAI,CACjB,KAAa,EACb,OAA6B,EAC7B,KAAc,EACd,WAAgC,EAChC,QAAgB;QAEhB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEpC,IAAI,KAAK,GAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;QACnE,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,IAAI,aAAa,CAAC;QAC9C,MAAM,MAAM,GAAG,GAAW,EAAE,CAC1B,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAExE,QAAQ,EAAE,CAAC;QACX,IAAI,KAAK,GAAG,MAAM,EAAE,CAAC;QACrB,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;QAEpB,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAChD,MAAM,MAAM,GAAG,CAAC,KAAsB,EAAQ,EAAE;oBAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;oBACtC,IAAI,GAAG,KAAK,IAAI;wBAAE,OAAO;oBAEzB,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;oBACtD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAC7B,OAAO,EAAE,CAAC;wBACV,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC;wBACxB,OAAO;oBACT,CAAC;oBACD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAC7B,OAAO,EAAE,CAAC;wBACV,MAAM,MAAM,GAAG,KAAK;4BAClB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC;4BACzE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAE,CAAC,KAAK,CAAC,CAAC;wBACnC,OAAO,CAAC,MAAM,CAAC,CAAC;wBAChB,OAAO;oBACT,CAAC;oBACD,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;oBACrB,iEAAiE;oBACjE,iEAAiE;oBACjE,qEAAqE;oBACrE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;oBAChC,KAAK,GAAG,MAAM,EAAE,CAAC;oBACjB,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;gBACtB,CAAC,CAAC;gBAEF,MAAM,OAAO,GAAG,GAAS,EAAE;oBACzB,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBAC1B,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;oBAChC,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC;gBAEF,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,mEAAmE;YACnE,IAAI,MAAM;gBAAE,OAAO,EAAE,CAAC;YACtB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,CAAC,KAAK;YACT,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QAED,KAAK,CAAC,MAAM,CAAI,KAAa,EAAE,OAA6B,EAAE,OAAW;YACvE,MAAM,EAAE,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC;YACxF,MAAM,MAAM,GAAG,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,EAAE,CAAE,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC3F,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;YACtE,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,EAAE,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;YACjF,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3C,OAAO,MAAW,CAAC;QACrB,CAAC;QAED,KAAK,CAAC,WAAW,CACf,KAAa,EACb,OAA6B,EAC7B,UAAwB,EAAE;YAE1B,uEAAuE;YACvE,uEAAuE;YACvE,yEAAyE;YACzE,uEAAuE;YACvE,8DAA8D;YAC9D,MAAM,QAAQ,GAAG,IAAI,GAAG,CACtB,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CACxB,EAAE,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CACnE,CACF,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;YACjF,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CACvB,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAC5E,CAAC;YACF,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACpF,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;YACjC,MAAM,OAAO,GAAsB;gBACjC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;gBAC7B,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;aAC9B,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,CACzB,KAAK,EACL,OAAO,EACP,KAAK,EACL,IAAI,GAAG,EAAE,EACT,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAChB,CAAC;YACF,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACpE,OAAO,MAAiB,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,OAAO;YACV,KAAK,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;QAED,KAAK,CAAC,OAAO;YACX,KAAK,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;KACF,CAAC;AACJ,CAAC"}
package/dist/ui/tty.js ADDED
@@ -0,0 +1,243 @@
1
+ // A prompt kit, hand-rolled against node:readline.
2
+ //
3
+ // Redline ships with `"dependencies": {}` and runs via `npx` inside other
4
+ // organisations' CI. Every runtime dependency it takes is one those
5
+ // organisations inherit without choosing it, on a tool whose entire pitch is
6
+ // that oversight should be auditable. A prompt library is roughly two hundred
7
+ // lines of ANSI and a keypress reducer; that is a smaller thing to own than a
8
+ // supply-chain edge in every onboarded repository.
9
+ //
10
+ // The split below matters more than the drawing: rendering is a pure function
11
+ // from state to string and the key handling is a pure function from key to
12
+ // state. Neither touches a terminal, so both are tested directly and the
13
+ // untested surface shrinks to "write this string, read those bytes".
14
+ // NO_COLOR is the cross-tool convention (no-color.org) and is honoured whatever
15
+ // its value, including the empty string — the spec is presence, not truth.
16
+ // FORCE_COLOR wins over a non-TTY because that is how a caller says "I am
17
+ // capturing this for a human to read".
18
+ export function colorEnabled(env, isTty) {
19
+ if (env.NO_COLOR !== undefined)
20
+ return false;
21
+ // FORCE_COLOR is an override in both directions: `0` is the documented way to
22
+ // turn colour off, and falling through to `isTty` there would paint anyway.
23
+ if (env.FORCE_COLOR !== undefined)
24
+ return env.FORCE_COLOR !== '0';
25
+ if (env.TERM === 'dumb')
26
+ return false;
27
+ return isTty;
28
+ }
29
+ const ESC = '\x1b[';
30
+ const wrap = (open, close) => (text) => `${ESC}${open}m${text}${ESC}${close}m`;
31
+ const plain = (text) => text;
32
+ export function palette(on) {
33
+ if (!on) {
34
+ return {
35
+ red: plain,
36
+ green: plain,
37
+ yellow: plain,
38
+ cyan: plain,
39
+ dim: plain,
40
+ bold: plain,
41
+ inverse: plain,
42
+ };
43
+ }
44
+ return {
45
+ red: wrap('31', '39'),
46
+ green: wrap('32', '39'),
47
+ yellow: wrap('33', '39'),
48
+ cyan: wrap('36', '39'),
49
+ dim: wrap('2', '22'),
50
+ bold: wrap('1', '22'),
51
+ inverse: wrap('7', '27'),
52
+ };
53
+ }
54
+ const UNICODE = {
55
+ top: '┌',
56
+ bar: '│',
57
+ end: '└',
58
+ active: '◆',
59
+ done: '◇',
60
+ warn: '▲',
61
+ radioOn: '●',
62
+ radioOff: '○',
63
+ checkOn: '◼',
64
+ checkOff: '◻',
65
+ };
66
+ const ASCII = {
67
+ top: '*',
68
+ bar: '|',
69
+ end: '*',
70
+ active: '>',
71
+ done: '*',
72
+ warn: '!',
73
+ radioOn: '(o)',
74
+ radioOff: '( )',
75
+ checkOn: '[x]',
76
+ checkOff: '[ ]',
77
+ };
78
+ export function glyphs(env, platform = process.platform) {
79
+ // Windows Terminal and modern PowerShell set WT_SESSION; the legacy console
80
+ // host does not, and is where the mangling happens.
81
+ if (platform === 'win32' && env.WT_SESSION === undefined)
82
+ return ASCII;
83
+ const locale = env.LC_ALL ?? env.LC_CTYPE ?? env.LANG ?? '';
84
+ if (locale !== '' && !/UTF-?8/i.test(locale))
85
+ return ASCII;
86
+ return UNICODE;
87
+ }
88
+ export function readKey(chunk) {
89
+ switch (chunk) {
90
+ case '\x1b[A':
91
+ case '\x1b0A':
92
+ case 'k':
93
+ return 'up';
94
+ case '\x1b[B':
95
+ case '\x1b0B':
96
+ case 'j':
97
+ return 'down';
98
+ case '\x1b[C':
99
+ case 'l':
100
+ return 'right';
101
+ case '\x1b[D':
102
+ case 'h':
103
+ return 'left';
104
+ case '\x1b[H':
105
+ case '\x1b[1~':
106
+ return 'home';
107
+ case '\x1b[F':
108
+ case '\x1b[4~':
109
+ return 'end';
110
+ case ' ':
111
+ return 'space';
112
+ case '\r':
113
+ case '\n':
114
+ return 'enter';
115
+ // Ctrl-C, Ctrl-D and a bare Escape all mean "stop". Raw mode means Ctrl-C
116
+ // does NOT raise SIGINT — the byte arrives here instead, so a prompt that
117
+ // did not handle it would trap the operator in the menu.
118
+ case '\x03':
119
+ case '\x04':
120
+ case '\x1b':
121
+ return 'cancel';
122
+ default:
123
+ return null;
124
+ }
125
+ }
126
+ const enabledIndexes = (choices) => choices.flatMap((choice, index) => (choice.disabled === undefined ? [index] : []));
127
+ // Movement skips disabled rows and wraps. Wrapping is deliberate: with four
128
+ // options on screen, "down" from the last one meaning nothing is a worse
129
+ // surprise than returning to the top.
130
+ export function move(choices, cursor, delta) {
131
+ const usable = enabledIndexes(choices);
132
+ if (usable.length === 0)
133
+ return cursor;
134
+ const at = usable.indexOf(cursor);
135
+ if (at === -1)
136
+ return usable[0];
137
+ const next = (at + delta + usable.length) % usable.length;
138
+ return usable[next];
139
+ }
140
+ export function firstEnabled(choices) {
141
+ return enabledIndexes(choices)[0] ?? 0;
142
+ }
143
+ export function reduceList(choices, state, key, multi) {
144
+ const usable = enabledIndexes(choices);
145
+ switch (key) {
146
+ case 'up':
147
+ return { kind: 'state', state: { ...state, cursor: move(choices, state.cursor, -1) } };
148
+ case 'down':
149
+ return { kind: 'state', state: { ...state, cursor: move(choices, state.cursor, 1) } };
150
+ case 'home':
151
+ return { kind: 'state', state: { ...state, cursor: usable[0] ?? state.cursor } };
152
+ case 'end':
153
+ return { kind: 'state', state: { ...state, cursor: usable.at(-1) ?? state.cursor } };
154
+ case 'space': {
155
+ if (!multi)
156
+ return { kind: 'state', state };
157
+ const selected = new Set(state.selected);
158
+ if (selected.has(state.cursor))
159
+ selected.delete(state.cursor);
160
+ else
161
+ selected.add(state.cursor);
162
+ return { kind: 'state', state: { ...state, selected } };
163
+ }
164
+ case 'enter':
165
+ // A single-select submits whatever the cursor is on, so it can never
166
+ // return nothing. A multi-select can, and that is a legitimate answer —
167
+ // "render for no vendor" is a choice, not an empty form.
168
+ return { kind: 'submit' };
169
+ case 'cancel':
170
+ return { kind: 'cancel' };
171
+ default:
172
+ return { kind: 'state', state };
173
+ }
174
+ }
175
+ const MIN_HINT = 12;
176
+ function truncate(text, max) {
177
+ if (max <= 1)
178
+ return '';
179
+ return text.length <= max ? text : `${text.slice(0, max - 1)}…`;
180
+ }
181
+ /**
182
+ * One prompt, rendered. Pure: same inputs, same string, no terminal touched.
183
+ *
184
+ * The returned string never ends in a newline. The caller counts its lines to
185
+ * know how far to rewind on the next redraw, and a trailing newline would make
186
+ * that count disagree with what the terminal actually advanced.
187
+ */
188
+ export function frame(opts) {
189
+ const { palette: c, glyphs: g, state, choices, multi, width } = opts;
190
+ const bar = c.dim(g.bar);
191
+ const lines = [`${c.red(g.active)} ${truncate(c.bold(opts.title), width - 3)}`];
192
+ // Every column below is measured in screen cells, on the RAW text: a painted
193
+ // string carries escape sequences that have width on the wire and none on the
194
+ // terminal, and padding computed from them misaligns every row.
195
+ //
196
+ // The gutter is `bar + two spaces + mark + one space`, and the mark is three
197
+ // cells wide in the ASCII glyph set — measuring it rather than assuming one
198
+ // is what keeps a legacy Windows console inside its own width.
199
+ const markWidth = Math.max(g.radioOn.length, g.radioOff.length, g.checkOn.length, g.checkOff.length);
200
+ const prefixWidth = g.bar.length + 2 + markWidth + 1;
201
+ const HINT_GAP = 2;
202
+ // A label longer than the terminal is rare and entirely possible — a profile
203
+ // id is short, a vendor title is not. It gets truncated like anything else,
204
+ // because a row that wraps breaks the redraw's line arithmetic for the rest
205
+ // of the prompt, not just for itself.
206
+ const labelRoom = Math.max(1, width - prefixWidth);
207
+ const labelWidth = Math.min(labelRoom, Math.max(...choices.map((ch) => ch.label.length)));
208
+ for (const [index, choice] of choices.entries()) {
209
+ const active = index === state.cursor;
210
+ const on = multi ? state.selected.has(index) : active;
211
+ const glyph = multi ? (on ? g.checkOn : g.checkOff) : on ? g.radioOn : g.radioOff;
212
+ const mark = on ? c.green(glyph) : c.dim(glyph);
213
+ // Pad the mark itself so a mixed-width glyph set still aligns the labels.
214
+ const markPad = ' '.repeat(markWidth - glyph.length);
215
+ const raw = truncate(choice.label, labelWidth);
216
+ const disabled = choice.disabled !== undefined;
217
+ const label = disabled ? c.dim(raw) : active ? c.cyan(raw) : raw;
218
+ const pad = ' '.repeat(labelWidth - raw.length);
219
+ const note = choice.disabled ?? choice.hint;
220
+ const room = width - prefixWidth - labelWidth - HINT_GAP;
221
+ const tail = note !== undefined && room >= MIN_HINT ? ` ${c.dim(truncate(note, room))}` : '';
222
+ lines.push(`${bar} ${mark}${markPad} ${label}${pad}${tail}`);
223
+ }
224
+ const help = multi
225
+ ? 'space to toggle, enter to confirm'
226
+ : 'arrows to move, enter to confirm';
227
+ lines.push(c.dim(`${g.end} ${truncate(help, width - g.end.length - 2)}`));
228
+ return lines.join('\n');
229
+ }
230
+ /** The collapsed record of an answered prompt, kept above the next one. */
231
+ export function answered(title, answer, c, g) {
232
+ return `${c.green(g.done)} ${title} ${c.dim('·')} ${c.cyan(answer)}`;
233
+ }
234
+ export function intro(title, c, g) {
235
+ return `${c.red(g.top)} ${c.bold(title)}\n${c.dim(g.bar)}`;
236
+ }
237
+ export function outro(message, c, g) {
238
+ return `${c.dim(g.bar)}\n${c.red(g.end)} ${message}`;
239
+ }
240
+ export function note(message, c, g) {
241
+ return `${c.dim(g.bar)} ${c.yellow(g.warn)} ${message}`;
242
+ }
243
+ //# sourceMappingURL=tty.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tty.js","sourceRoot":"","sources":["../../cli/ui/tty.ts"],"names":[],"mappings":"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"}