gnosys 5.9.2 → 5.9.3
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/cli.js +311 -147
- package/dist/cli.js.map +1 -1
- package/dist/lib/chat/index.d.ts.map +1 -1
- package/dist/lib/chat/index.js +5 -0
- package/dist/lib/chat/index.js.map +1 -1
- package/dist/lib/cleanup.d.ts +52 -0
- package/dist/lib/cleanup.d.ts.map +1 -0
- package/dist/lib/cleanup.js +168 -0
- package/dist/lib/cleanup.js.map +1 -0
- package/dist/lib/config.d.ts +7 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +7 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/paths.d.ts +8 -0
- package/dist/lib/paths.d.ts.map +1 -1
- package/dist/lib/paths.js +15 -0
- package/dist/lib/paths.js.map +1 -1
- package/dist/lib/remoteWizard.d.ts.map +1 -1
- package/dist/lib/remoteWizard.js +112 -52
- package/dist/lib/remoteWizard.js.map +1 -1
- package/dist/lib/setup/coldStart.d.ts +71 -0
- package/dist/lib/setup/coldStart.d.ts.map +1 -0
- package/dist/lib/setup/coldStart.js +122 -0
- package/dist/lib/setup/coldStart.js.map +1 -0
- package/dist/lib/setup/configSetRender.d.ts +26 -0
- package/dist/lib/setup/configSetRender.d.ts.map +1 -0
- package/dist/lib/setup/configSetRender.js +103 -0
- package/dist/lib/setup/configSetRender.js.map +1 -0
- package/dist/lib/setup/dreamRender.d.ts +44 -0
- package/dist/lib/setup/dreamRender.d.ts.map +1 -0
- package/dist/lib/setup/dreamRender.js +55 -0
- package/dist/lib/setup/dreamRender.js.map +1 -0
- package/dist/lib/setup/modelsRender.d.ts +25 -0
- package/dist/lib/setup/modelsRender.d.ts.map +1 -0
- package/dist/lib/setup/modelsRender.js +33 -0
- package/dist/lib/setup/modelsRender.js.map +1 -0
- package/dist/lib/setup/remoteRender.d.ts +43 -0
- package/dist/lib/setup/remoteRender.d.ts.map +1 -0
- package/dist/lib/setup/remoteRender.js +65 -0
- package/dist/lib/setup/remoteRender.js.map +1 -0
- package/dist/lib/setup/routingRender.d.ts +44 -0
- package/dist/lib/setup/routingRender.d.ts.map +1 -0
- package/dist/lib/setup/routingRender.js +97 -0
- package/dist/lib/setup/routingRender.js.map +1 -0
- package/dist/lib/setup/sections/ides.d.ts +8 -0
- package/dist/lib/setup/sections/ides.d.ts.map +1 -1
- package/dist/lib/setup/sections/ides.js +49 -27
- package/dist/lib/setup/sections/ides.js.map +1 -1
- package/dist/lib/setup/sections/preferences.d.ts +8 -0
- package/dist/lib/setup/sections/preferences.d.ts.map +1 -1
- package/dist/lib/setup/sections/preferences.js +40 -19
- package/dist/lib/setup/sections/preferences.js.map +1 -1
- package/dist/lib/setup/sections/routing.d.ts +0 -1
- package/dist/lib/setup/sections/routing.d.ts.map +1 -1
- package/dist/lib/setup/sections/routing.js +49 -29
- package/dist/lib/setup/sections/routing.js.map +1 -1
- package/dist/lib/setup/summary.d.ts +33 -19
- package/dist/lib/setup/summary.d.ts.map +1 -1
- package/dist/lib/setup/summary.js +135 -105
- package/dist/lib/setup/summary.js.map +1 -1
- package/dist/lib/setup/syncProjectsRender.d.ts +56 -0
- package/dist/lib/setup/syncProjectsRender.d.ts.map +1 -0
- package/dist/lib/setup/syncProjectsRender.js +168 -0
- package/dist/lib/setup/syncProjectsRender.js.map +1 -0
- package/dist/lib/setup/ui/diff.d.ts +19 -0
- package/dist/lib/setup/ui/diff.d.ts.map +1 -0
- package/dist/lib/setup/ui/diff.js +34 -0
- package/dist/lib/setup/ui/diff.js.map +1 -0
- package/dist/lib/setup/ui/footer.d.ts +11 -0
- package/dist/lib/setup/ui/footer.d.ts.map +1 -0
- package/dist/lib/setup/ui/footer.js +21 -0
- package/dist/lib/setup/ui/footer.js.map +1 -0
- package/dist/lib/setup/ui/header.d.ts +24 -0
- package/dist/lib/setup/ui/header.d.ts.map +1 -0
- package/dist/lib/setup/ui/header.js +49 -0
- package/dist/lib/setup/ui/header.js.map +1 -0
- package/dist/lib/setup/ui/index.d.ts +26 -0
- package/dist/lib/setup/ui/index.d.ts.map +1 -0
- package/dist/lib/setup/ui/index.js +18 -0
- package/dist/lib/setup/ui/index.js.map +1 -0
- package/dist/lib/setup/ui/menu.d.ts +27 -0
- package/dist/lib/setup/ui/menu.d.ts.map +1 -0
- package/dist/lib/setup/ui/menu.js +75 -0
- package/dist/lib/setup/ui/menu.js.map +1 -0
- package/dist/lib/setup/ui/panel.d.ts +23 -0
- package/dist/lib/setup/ui/panel.d.ts.map +1 -0
- package/dist/lib/setup/ui/panel.js +53 -0
- package/dist/lib/setup/ui/panel.js.map +1 -0
- package/dist/lib/setup/ui/prompt.d.ts +27 -0
- package/dist/lib/setup/ui/prompt.d.ts.map +1 -0
- package/dist/lib/setup/ui/prompt.js +38 -0
- package/dist/lib/setup/ui/prompt.js.map +1 -0
- package/dist/lib/setup/ui/safePrompt.d.ts +24 -0
- package/dist/lib/setup/ui/safePrompt.d.ts.map +1 -0
- package/dist/lib/setup/ui/safePrompt.js +71 -0
- package/dist/lib/setup/ui/safePrompt.js.map +1 -0
- package/dist/lib/setup/ui/spinner.d.ts +28 -0
- package/dist/lib/setup/ui/spinner.d.ts.map +1 -0
- package/dist/lib/setup/ui/spinner.js +87 -0
- package/dist/lib/setup/ui/spinner.js.map +1 -0
- package/dist/lib/setup/ui/status.d.ts +21 -0
- package/dist/lib/setup/ui/status.d.ts.map +1 -0
- package/dist/lib/setup/ui/status.js +49 -0
- package/dist/lib/setup/ui/status.js.map +1 -0
- package/dist/lib/setup/ui/title.d.ts +14 -0
- package/dist/lib/setup/ui/title.d.ts.map +1 -0
- package/dist/lib/setup/ui/title.js +24 -0
- package/dist/lib/setup/ui/title.js.map +1 -0
- package/dist/lib/setup/ui/tokens.d.ts +66 -0
- package/dist/lib/setup/ui/tokens.d.ts.map +1 -0
- package/dist/lib/setup/ui/tokens.js +87 -0
- package/dist/lib/setup/ui/tokens.js.map +1 -0
- package/dist/lib/setup.d.ts +7 -0
- package/dist/lib/setup.d.ts.map +1 -1
- package/dist/lib/setup.js +204 -230
- package/dist/lib/setup.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt atom — single helper that wraps every readline question call.
|
|
3
|
+
*
|
|
4
|
+
* Catches `AbortError` from readline's signal/SIGINT path, prints a clean
|
|
5
|
+
* cancellation message in `text-dim`, closes the readline, and exits with
|
|
6
|
+
* code 130 (standard SIGINT exit). This is the *only* place SIGINT cleanup
|
|
7
|
+
* should live — every other site routes through here.
|
|
8
|
+
*/
|
|
9
|
+
import type { Interface as ReadlineInterface } from "readline/promises";
|
|
10
|
+
export interface PromptOptions {
|
|
11
|
+
/** Right-aligned dim hint (`1–8 · pick q · quit`). */
|
|
12
|
+
hint?: string;
|
|
13
|
+
/** Lead-in text shown after the prompt glyph (`press enter to begin`). */
|
|
14
|
+
lead?: string;
|
|
15
|
+
/** What to print on cancel. Default: `cancelled · no changes written`. */
|
|
16
|
+
cancelMessage?: string;
|
|
17
|
+
/** Skip the actual `process.exit(130)`. Used by some integration tests. */
|
|
18
|
+
skipExitOnCancel?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Render the prompt line and await user input. On `AbortError`, prints the
|
|
22
|
+
* cancellation message and exits 130 (unless `skipExitOnCancel`).
|
|
23
|
+
*
|
|
24
|
+
* @returns The user's input, trimmed. Returns the empty string on Enter.
|
|
25
|
+
*/
|
|
26
|
+
export declare function Prompt(rl: ReadlineInterface, opts?: PromptOptions): Promise<string>;
|
|
27
|
+
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../../src/lib/setup/ui/prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,IAAI,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAKxE,MAAM,WAAW,aAAa;IAC5B,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAsB,MAAM,CAC1B,EAAE,EAAE,iBAAiB,EACrB,IAAI,GAAE,aAAkB,GACvB,OAAO,CAAC,MAAM,CAAC,CAqBjB"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt atom — single helper that wraps every readline question call.
|
|
3
|
+
*
|
|
4
|
+
* Catches `AbortError` from readline's signal/SIGINT path, prints a clean
|
|
5
|
+
* cancellation message in `text-dim`, closes the readline, and exits with
|
|
6
|
+
* code 130 (standard SIGINT exit). This is the *only* place SIGINT cleanup
|
|
7
|
+
* should live — every other site routes through here.
|
|
8
|
+
*/
|
|
9
|
+
import { c, color, glyph, width } from "./tokens.js";
|
|
10
|
+
import { stripAnsi } from "./header.js";
|
|
11
|
+
import { safeQuestion } from "./safePrompt.js";
|
|
12
|
+
/**
|
|
13
|
+
* Render the prompt line and await user input. On `AbortError`, prints the
|
|
14
|
+
* cancellation message and exits 130 (unless `skipExitOnCancel`).
|
|
15
|
+
*
|
|
16
|
+
* @returns The user's input, trimmed. Returns the empty string on Enter.
|
|
17
|
+
*/
|
|
18
|
+
export async function Prompt(rl, opts = {}) {
|
|
19
|
+
const W = width();
|
|
20
|
+
const indent = " ";
|
|
21
|
+
const glyphPart = color(c.accent, glyph.prompt);
|
|
22
|
+
const lead = opts.lead ? ` ${color(c.text, opts.lead)}` : "";
|
|
23
|
+
const head = `${indent}${glyphPart}${lead} `;
|
|
24
|
+
// If a hint is present, print it right-aligned ABOVE the prompt line.
|
|
25
|
+
// This matches the design's "hint on the line above the cursor".
|
|
26
|
+
if (opts.hint) {
|
|
27
|
+
const hint = color(c.textDim, opts.hint);
|
|
28
|
+
const hintBare = stripAnsi(hint);
|
|
29
|
+
const pad = " ".repeat(Math.max(1, W - 1 - hintBare.length));
|
|
30
|
+
process.stdout.write(`${pad}${hint}\n`);
|
|
31
|
+
}
|
|
32
|
+
const raw = await safeQuestion(rl, head, {
|
|
33
|
+
cancelMessage: opts.cancelMessage,
|
|
34
|
+
skipExitOnCancel: opts.skipExitOnCancel,
|
|
35
|
+
});
|
|
36
|
+
return raw.trim();
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../../src/lib/setup/ui/prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAa/C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,EAAqB,EACrB,OAAsB,EAAE;IAExB,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;IAClB,MAAM,MAAM,GAAG,GAAG,CAAC;IACnB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,MAAM,IAAI,GAAG,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,CAAC;IAE7C,sEAAsE;IACtE,iEAAiE;IACjE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE;QACvC,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;KACxC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* safeQuestion — a thin migration shim that gives every existing
|
|
3
|
+
* `rl.question(...)` call site clean Ctrl+C handling without forcing
|
|
4
|
+
* a rewrite to the full Prompt() atom.
|
|
5
|
+
*
|
|
6
|
+
* Behavior:
|
|
7
|
+
* - On normal input, returns the raw string (caller decides about trim).
|
|
8
|
+
* - On SIGINT (Ctrl+C), prints `cancelled · no changes written` in
|
|
9
|
+
* `text-dim`, closes the readline, exits 130.
|
|
10
|
+
*
|
|
11
|
+
* The SIGINT handler is installed lazily on the first call and remembered
|
|
12
|
+
* via a module-level flag so the same readline can be questioned many
|
|
13
|
+
* times without leaking listeners.
|
|
14
|
+
*
|
|
15
|
+
* v5.9.3 Phase B uses this everywhere the old helpers wrap `rl.question`.
|
|
16
|
+
* New screens compose Prompt() from `index.js` instead.
|
|
17
|
+
*/
|
|
18
|
+
import type { Interface as ReadlineInterface } from "readline/promises";
|
|
19
|
+
export interface SafeQuestionOptions {
|
|
20
|
+
cancelMessage?: string;
|
|
21
|
+
skipExitOnCancel?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare function safeQuestion(rl: ReadlineInterface, prompt: string, opts?: SafeQuestionOptions): Promise<string>;
|
|
24
|
+
//# sourceMappingURL=safePrompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safePrompt.d.ts","sourceRoot":"","sources":["../../../../src/lib/setup/ui/safePrompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,SAAS,IAAI,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGxE,MAAM,WAAW,mBAAmB;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAkCD,wBAAsB,YAAY,CAChC,EAAE,EAAE,iBAAiB,EACrB,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,MAAM,CAAC,CAyBjB"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* safeQuestion — a thin migration shim that gives every existing
|
|
3
|
+
* `rl.question(...)` call site clean Ctrl+C handling without forcing
|
|
4
|
+
* a rewrite to the full Prompt() atom.
|
|
5
|
+
*
|
|
6
|
+
* Behavior:
|
|
7
|
+
* - On normal input, returns the raw string (caller decides about trim).
|
|
8
|
+
* - On SIGINT (Ctrl+C), prints `cancelled · no changes written` in
|
|
9
|
+
* `text-dim`, closes the readline, exits 130.
|
|
10
|
+
*
|
|
11
|
+
* The SIGINT handler is installed lazily on the first call and remembered
|
|
12
|
+
* via a module-level flag so the same readline can be questioned many
|
|
13
|
+
* times without leaking listeners.
|
|
14
|
+
*
|
|
15
|
+
* v5.9.3 Phase B uses this everywhere the old helpers wrap `rl.question`.
|
|
16
|
+
* New screens compose Prompt() from `index.js` instead.
|
|
17
|
+
*/
|
|
18
|
+
import { c, color } from "./tokens.js";
|
|
19
|
+
/**
|
|
20
|
+
* Track which readline interfaces we've already wired SIGINT cleanup
|
|
21
|
+
* to. We use a WeakSet so a closed/GC'd interface drops out automatically.
|
|
22
|
+
*/
|
|
23
|
+
const sigintWired = new WeakSet();
|
|
24
|
+
function wireSigint(rl, cancelMessage, skipExit) {
|
|
25
|
+
if (sigintWired.has(rl))
|
|
26
|
+
return;
|
|
27
|
+
sigintWired.add(rl);
|
|
28
|
+
const handler = () => {
|
|
29
|
+
process.stdout.write(`\n ${color(c.textDim, cancelMessage)}\n`);
|
|
30
|
+
try {
|
|
31
|
+
rl.close();
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// already closed — fine
|
|
35
|
+
}
|
|
36
|
+
if (!skipExit) {
|
|
37
|
+
process.exit(130);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
// `rl.on('SIGINT', …)` fires when the user hits Ctrl+C with readline
|
|
41
|
+
// listening — Node's readline already emits SIGINT before bubbling to
|
|
42
|
+
// process. This is the load-bearing wire.
|
|
43
|
+
rl.on("SIGINT", handler);
|
|
44
|
+
}
|
|
45
|
+
export async function safeQuestion(rl, prompt, opts = {}) {
|
|
46
|
+
const message = opts.cancelMessage ?? "cancelled · no changes written";
|
|
47
|
+
wireSigint(rl, message, opts.skipExitOnCancel ?? false);
|
|
48
|
+
try {
|
|
49
|
+
return await rl.question(prompt);
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
// Defensive: still catch AbortError for callers that pass their own
|
|
53
|
+
// AbortSignal through (e.g. test harness).
|
|
54
|
+
const isAbort = err instanceof Error &&
|
|
55
|
+
(err.name === "AbortError" || /aborted|signal/i.test(err.message ?? ""));
|
|
56
|
+
if (!isAbort)
|
|
57
|
+
throw err;
|
|
58
|
+
process.stdout.write(`\n ${color(c.textDim, message)}\n`);
|
|
59
|
+
try {
|
|
60
|
+
rl.close();
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// Already closed — fine.
|
|
64
|
+
}
|
|
65
|
+
if (!opts.skipExitOnCancel) {
|
|
66
|
+
process.exit(130);
|
|
67
|
+
}
|
|
68
|
+
throw err;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=safePrompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safePrompt.js","sourceRoot":"","sources":["../../../../src/lib/setup/ui/safePrompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAOvC;;;GAGG;AACH,MAAM,WAAW,GAAG,IAAI,OAAO,EAAqB,CAAC;AAErD,SAAS,UAAU,CACjB,EAAqB,EACrB,aAAqB,EACrB,QAAiB;IAEjB,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QAAE,OAAO;IAChC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEpB,MAAM,OAAO,GAAG,GAAS,EAAE;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;QAChE,IAAI,CAAC;YACH,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;QACD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC;IAEF,qEAAqE;IACrE,sEAAsE;IACtE,0CAA0C;IAC1C,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,EAAqB,EACrB,MAAc,EACd,OAA4B,EAAE;IAE9B,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,IAAI,gCAAgC,CAAC;IACvE,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,gBAAgB,IAAI,KAAK,CAAC,CAAC;IAExD,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,oEAAoE;QACpE,2CAA2C;QAC3C,MAAM,OAAO,GACX,GAAG,YAAY,KAAK;YACpB,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3E,IAAI,CAAC,OAAO;YAAE,MAAM,GAAG,CAAC;QAExB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC;YACH,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;QAAC,MAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spinner atom — animated `◌ ◐ ◑ ◒ ◓` for any operation > 200 ms.
|
|
3
|
+
*
|
|
4
|
+
* Same line is rewritten in place via `\r` (carriage return). On `ok` /
|
|
5
|
+
* `fail` / `update`, the spinner stops cleanly and replaces the line with
|
|
6
|
+
* a final Status-style line. No newlines are emitted until resolution.
|
|
7
|
+
*/
|
|
8
|
+
export interface SpinnerHandle {
|
|
9
|
+
/** Replace the spinner with a `✓ text · meta` line and stop. */
|
|
10
|
+
ok(text: string, meta?: string): void;
|
|
11
|
+
/** Replace the spinner with a `✗ text · meta` line and stop. */
|
|
12
|
+
fail(text: string, meta?: string): void;
|
|
13
|
+
/** Update the in-progress label (spinner keeps animating). */
|
|
14
|
+
update(label: string): void;
|
|
15
|
+
/** Stop without printing a final line (for callers that handle output). */
|
|
16
|
+
stop(): void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Start an animated spinner. Returns a handle. The spinner immediately
|
|
20
|
+
* writes its first frame. Caller MUST eventually call one of `ok`/`fail`/
|
|
21
|
+
* `stop` to release the line.
|
|
22
|
+
*
|
|
23
|
+
* When stdout isn't a TTY (CI, test capture), the spinner falls back to a
|
|
24
|
+
* single static `◌ label` line and the `ok/fail` calls print final lines
|
|
25
|
+
* directly — no `\r` redraw.
|
|
26
|
+
*/
|
|
27
|
+
export declare function Spinner(label: string): SpinnerHandle;
|
|
28
|
+
//# sourceMappingURL=spinner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../../../src/lib/setup/ui/spinner.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,MAAM,WAAW,aAAa;IAC5B,gEAAgE;IAChE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,gEAAgE;IAChE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,8DAA8D;IAC9D,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,2EAA2E;IAC3E,IAAI,IAAI,IAAI,CAAC;CACd;AAKD;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAgEpD"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spinner atom — animated `◌ ◐ ◑ ◒ ◓` for any operation > 200 ms.
|
|
3
|
+
*
|
|
4
|
+
* Same line is rewritten in place via `\r` (carriage return). On `ok` /
|
|
5
|
+
* `fail` / `update`, the spinner stops cleanly and replaces the line with
|
|
6
|
+
* a final Status-style line. No newlines are emitted until resolution.
|
|
7
|
+
*/
|
|
8
|
+
import { c, color, glyph } from "./tokens.js";
|
|
9
|
+
import { Status } from "./status.js";
|
|
10
|
+
const FRAMES = [glyph.spin0, glyph.spin1, glyph.spin2, glyph.spin3, glyph.spin4];
|
|
11
|
+
const FRAME_MS = 125; // ~8 fps
|
|
12
|
+
/**
|
|
13
|
+
* Start an animated spinner. Returns a handle. The spinner immediately
|
|
14
|
+
* writes its first frame. Caller MUST eventually call one of `ok`/`fail`/
|
|
15
|
+
* `stop` to release the line.
|
|
16
|
+
*
|
|
17
|
+
* When stdout isn't a TTY (CI, test capture), the spinner falls back to a
|
|
18
|
+
* single static `◌ label` line and the `ok/fail` calls print final lines
|
|
19
|
+
* directly — no `\r` redraw.
|
|
20
|
+
*/
|
|
21
|
+
export function Spinner(label) {
|
|
22
|
+
let currentLabel = label;
|
|
23
|
+
const isTTY = process.stdout.isTTY;
|
|
24
|
+
let frame = 0;
|
|
25
|
+
let timer = null;
|
|
26
|
+
let stopped = false;
|
|
27
|
+
function draw() {
|
|
28
|
+
if (stopped)
|
|
29
|
+
return;
|
|
30
|
+
if (!isTTY) {
|
|
31
|
+
// Non-TTY: print one static line only, do NOT animate.
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const g = color(c.accent, FRAMES[frame % FRAMES.length]);
|
|
35
|
+
const txt = color(c.text, currentLabel);
|
|
36
|
+
process.stdout.write(`\r ${g} ${txt}`);
|
|
37
|
+
}
|
|
38
|
+
function clearLine() {
|
|
39
|
+
if (isTTY) {
|
|
40
|
+
// Move to start of line, clear to end.
|
|
41
|
+
process.stdout.write("\r\x1b[2K");
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function final(kind, text, meta) {
|
|
45
|
+
if (stopped)
|
|
46
|
+
return;
|
|
47
|
+
stopped = true;
|
|
48
|
+
if (timer)
|
|
49
|
+
clearInterval(timer);
|
|
50
|
+
clearLine();
|
|
51
|
+
process.stdout.write(`${Status(kind, text, meta)}\n`);
|
|
52
|
+
}
|
|
53
|
+
// First frame (or static line for non-TTY).
|
|
54
|
+
if (isTTY) {
|
|
55
|
+
draw();
|
|
56
|
+
timer = setInterval(() => {
|
|
57
|
+
frame = (frame + 1) % FRAMES.length;
|
|
58
|
+
draw();
|
|
59
|
+
}, FRAME_MS);
|
|
60
|
+
// Unref so the timer never blocks process exit on its own.
|
|
61
|
+
timer.unref?.();
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
process.stdout.write(`${Status("progress", currentLabel)}\n`);
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
ok(text, meta) {
|
|
68
|
+
final("ok", text, meta);
|
|
69
|
+
},
|
|
70
|
+
fail(text, meta) {
|
|
71
|
+
final("fail", text, meta);
|
|
72
|
+
},
|
|
73
|
+
update(nextLabel) {
|
|
74
|
+
currentLabel = nextLabel;
|
|
75
|
+
draw();
|
|
76
|
+
},
|
|
77
|
+
stop() {
|
|
78
|
+
if (stopped)
|
|
79
|
+
return;
|
|
80
|
+
stopped = true;
|
|
81
|
+
if (timer)
|
|
82
|
+
clearInterval(timer);
|
|
83
|
+
clearLine();
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../../../src/lib/setup/ui/spinner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Status atom — one-liner with leading glyph + optional right-aligned meta.
|
|
3
|
+
*
|
|
4
|
+
* Kinds:
|
|
5
|
+
* ok ✓ in ok color
|
|
6
|
+
* warn ⚠ in warn color
|
|
7
|
+
* fail ✗ in fail color
|
|
8
|
+
* progress ◌ in accent color (use Spinner for animated variants)
|
|
9
|
+
*/
|
|
10
|
+
export type StatusKind = "ok" | "warn" | "fail" | "progress";
|
|
11
|
+
/**
|
|
12
|
+
* Render a status line. Returns the formatted string (no trailing newline).
|
|
13
|
+
*
|
|
14
|
+
* @param kind ok | warn | fail | progress
|
|
15
|
+
* @param text Body, in `text`.
|
|
16
|
+
* @param meta Optional right-aligned, in `text-dim`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function Status(kind: StatusKind, text: string, meta?: string): string;
|
|
19
|
+
/** Convenience: print a single status line. */
|
|
20
|
+
export declare function printStatus(kind: StatusKind, text: string, meta?: string): void;
|
|
21
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../src/lib/setup/ui/status.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;AAgB7D;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAY5E;AAED,+CAA+C;AAC/C,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAE/E"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Status atom — one-liner with leading glyph + optional right-aligned meta.
|
|
3
|
+
*
|
|
4
|
+
* Kinds:
|
|
5
|
+
* ok ✓ in ok color
|
|
6
|
+
* warn ⚠ in warn color
|
|
7
|
+
* fail ✗ in fail color
|
|
8
|
+
* progress ◌ in accent color (use Spinner for animated variants)
|
|
9
|
+
*/
|
|
10
|
+
import { c, color, glyph, width } from "./tokens.js";
|
|
11
|
+
import { stripAnsi } from "./header.js";
|
|
12
|
+
const KIND_TO_GLYPH = {
|
|
13
|
+
ok: glyph.ok,
|
|
14
|
+
warn: glyph.warn,
|
|
15
|
+
fail: glyph.fail,
|
|
16
|
+
progress: glyph.spin0,
|
|
17
|
+
};
|
|
18
|
+
const KIND_TO_COLOR = {
|
|
19
|
+
ok: c.ok,
|
|
20
|
+
warn: c.warn,
|
|
21
|
+
fail: c.fail,
|
|
22
|
+
progress: c.accent,
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Render a status line. Returns the formatted string (no trailing newline).
|
|
26
|
+
*
|
|
27
|
+
* @param kind ok | warn | fail | progress
|
|
28
|
+
* @param text Body, in `text`.
|
|
29
|
+
* @param meta Optional right-aligned, in `text-dim`.
|
|
30
|
+
*/
|
|
31
|
+
export function Status(kind, text, meta) {
|
|
32
|
+
const W = width();
|
|
33
|
+
const indent = " ";
|
|
34
|
+
const g = color(KIND_TO_COLOR[kind], KIND_TO_GLYPH[kind]);
|
|
35
|
+
const body = color(c.text, text);
|
|
36
|
+
const left = `${indent}${g} ${body}`;
|
|
37
|
+
if (!meta)
|
|
38
|
+
return left;
|
|
39
|
+
const metaTxt = color(c.textDim, meta);
|
|
40
|
+
const leftBare = stripAnsi(left);
|
|
41
|
+
const metaBare = stripAnsi(metaTxt);
|
|
42
|
+
const pad = " ".repeat(Math.max(1, W - 1 - leftBare.length - metaBare.length));
|
|
43
|
+
return `${left}${pad}${metaTxt}`;
|
|
44
|
+
}
|
|
45
|
+
/** Convenience: print a single status line. */
|
|
46
|
+
export function printStatus(kind, text, meta) {
|
|
47
|
+
process.stdout.write(`${Status(kind, text, meta)}\n`);
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../../src/lib/setup/ui/status.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIxC,MAAM,aAAa,GAA+B;IAChD,EAAE,EAAE,KAAK,CAAC,EAAE;IACZ,IAAI,EAAE,KAAK,CAAC,IAAI;IAChB,IAAI,EAAE,KAAK,CAAC,IAAI;IAChB,QAAQ,EAAE,KAAK,CAAC,KAAK;CACtB,CAAC;AAEF,MAAM,aAAa,GAA+B;IAChD,EAAE,EAAE,CAAC,CAAC,EAAE;IACR,IAAI,EAAE,CAAC,CAAC,IAAI;IACZ,IAAI,EAAE,CAAC,CAAC,IAAI;IACZ,QAAQ,EAAE,CAAC,CAAC,MAAM;CACnB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CAAC,IAAgB,EAAE,IAAY,EAAE,IAAa;IAClE,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;IAClB,MAAM,MAAM,GAAG,GAAG,CAAC;IACnB,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IACrC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/E,OAAO,GAAG,IAAI,GAAG,GAAG,GAAG,OAAO,EAAE,CAAC;AACnC,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,WAAW,CAAC,IAAgB,EAAE,IAAY,EAAE,IAAa;IACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Title atom — screen-level heading + optional subtitle.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Render a title + optional subtitle. Caller follows with the standard
|
|
6
|
+
* blank line via normal flow.
|
|
7
|
+
*
|
|
8
|
+
* @param title Bold, `text-hi`.
|
|
9
|
+
* @param sub Optional, `text-mid`, rendered on the next line.
|
|
10
|
+
*/
|
|
11
|
+
export declare function Title(title: string, sub?: string): string;
|
|
12
|
+
/** Convenience: print title + trailing blank line to stdout. */
|
|
13
|
+
export declare function printTitle(title: string, sub?: string): void;
|
|
14
|
+
//# sourceMappingURL=title.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"title.d.ts","sourceRoot":"","sources":["../../../../src/lib/setup/ui/title.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED,gEAAgE;AAChE,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAE5D"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Title atom — screen-level heading + optional subtitle.
|
|
3
|
+
*/
|
|
4
|
+
import { c, color } from "./tokens.js";
|
|
5
|
+
/**
|
|
6
|
+
* Render a title + optional subtitle. Caller follows with the standard
|
|
7
|
+
* blank line via normal flow.
|
|
8
|
+
*
|
|
9
|
+
* @param title Bold, `text-hi`.
|
|
10
|
+
* @param sub Optional, `text-mid`, rendered on the next line.
|
|
11
|
+
*/
|
|
12
|
+
export function Title(title, sub) {
|
|
13
|
+
const indent = " ";
|
|
14
|
+
const line1 = `${indent}${color(c.textHi, title)}`;
|
|
15
|
+
if (!sub)
|
|
16
|
+
return line1;
|
|
17
|
+
const line2 = `${indent}${color(c.textMid, sub)}`;
|
|
18
|
+
return `${line1}\n${line2}`;
|
|
19
|
+
}
|
|
20
|
+
/** Convenience: print title + trailing blank line to stdout. */
|
|
21
|
+
export function printTitle(title, sub) {
|
|
22
|
+
process.stdout.write(`${Title(title, sub)}\n\n`);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=title.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"title.js","sourceRoot":"","sources":["../../../../src/lib/setup/ui/title.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,UAAU,KAAK,CAAC,KAAa,EAAE,GAAY;IAC/C,MAAM,MAAM,GAAG,GAAG,CAAC;IACnB,MAAM,KAAK,GAAG,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;IACnD,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,MAAM,KAAK,GAAG,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;IAClD,OAAO,GAAG,KAAK,KAAK,KAAK,EAAE,CAAC;AAC9B,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,GAAY;IACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Design tokens for the gnosys CLI redesign (v5.9.3).
|
|
3
|
+
*
|
|
4
|
+
* Two palettes — truecolor (24-bit) and 256-color fallback — both export
|
|
5
|
+
* the same names. Call sites use `c.accent`, `c.text`, etc. and never
|
|
6
|
+
* see raw ANSI bytes. Detection is via the `COLORTERM` env var.
|
|
7
|
+
*
|
|
8
|
+
* Tokens map 1:1 to the design handoff §1 table.
|
|
9
|
+
*/
|
|
10
|
+
/** Reset escape. Always pure. */
|
|
11
|
+
export declare const RESET = "\u001B[0m";
|
|
12
|
+
/** True if the terminal advertises 24-bit color. */
|
|
13
|
+
export declare const TRUECOLOR: boolean;
|
|
14
|
+
/** ANSI color token bundle. Same shape regardless of palette. */
|
|
15
|
+
export interface ColorTokens {
|
|
16
|
+
accent: string;
|
|
17
|
+
accentHi: string;
|
|
18
|
+
accentDim: string;
|
|
19
|
+
text: string;
|
|
20
|
+
textHi: string;
|
|
21
|
+
textMid: string;
|
|
22
|
+
textDim: string;
|
|
23
|
+
textGhost: string;
|
|
24
|
+
ok: string;
|
|
25
|
+
warn: string;
|
|
26
|
+
fail: string;
|
|
27
|
+
}
|
|
28
|
+
/** Active palette. Read at module init from `COLORTERM`. */
|
|
29
|
+
export declare const c: ColorTokens;
|
|
30
|
+
/** Wrap text in a color, automatically appending RESET. */
|
|
31
|
+
export declare function color(token: string, text: string): string;
|
|
32
|
+
/** Glyphs used across the redesign. */
|
|
33
|
+
export declare const glyph: {
|
|
34
|
+
readonly brand: "⬢";
|
|
35
|
+
readonly sep: "▸";
|
|
36
|
+
readonly prompt: "❯";
|
|
37
|
+
readonly selection: "▶";
|
|
38
|
+
readonly tag: "◂";
|
|
39
|
+
readonly ok: "✓";
|
|
40
|
+
readonly warn: "⚠";
|
|
41
|
+
readonly fail: "✗";
|
|
42
|
+
readonly spin0: "◌";
|
|
43
|
+
readonly spin1: "◐";
|
|
44
|
+
readonly spin2: "◑";
|
|
45
|
+
readonly spin3: "◒";
|
|
46
|
+
readonly spin4: "◓";
|
|
47
|
+
readonly dotFilled: "●";
|
|
48
|
+
readonly dotHollow: "○";
|
|
49
|
+
readonly arrow: "→";
|
|
50
|
+
readonly ruleLight: "─";
|
|
51
|
+
readonly ruleHeavy: "━";
|
|
52
|
+
readonly boxTL: "╭";
|
|
53
|
+
readonly boxTR: "╮";
|
|
54
|
+
readonly boxBL: "╰";
|
|
55
|
+
readonly boxBR: "╯";
|
|
56
|
+
readonly boxV: "│";
|
|
57
|
+
readonly boxH: "─";
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Width of the terminal, captured at module init. Targets 80 cols and
|
|
61
|
+
* tolerates wider. Never reflows on resize — same constraint as the design.
|
|
62
|
+
*/
|
|
63
|
+
export declare const COLS: number;
|
|
64
|
+
/** Effective render width: clamp to >= 80 unless explicitly narrower. */
|
|
65
|
+
export declare function width(): number;
|
|
66
|
+
//# sourceMappingURL=tokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../../../src/lib/setup/ui/tokens.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,iCAAiC;AACjC,eAAO,MAAM,KAAK,cAAY,CAAC;AAE/B,oDAAoD;AACpD,eAAO,MAAM,SAAS,SACsD,CAAC;AAE7E,iEAAiE;AACjE,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AA8BD,4DAA4D;AAC5D,eAAO,MAAM,CAAC,EAAE,WAA0C,CAAC;AAE3D,2DAA2D;AAC3D,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,uCAAuC;AACvC,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;CAyBR,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,IAAI,EAAE,MAIf,CAAC;AAEL,yEAAyE;AACzE,wBAAgB,KAAK,IAAI,MAAM,CAE9B"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Design tokens for the gnosys CLI redesign (v5.9.3).
|
|
3
|
+
*
|
|
4
|
+
* Two palettes — truecolor (24-bit) and 256-color fallback — both export
|
|
5
|
+
* the same names. Call sites use `c.accent`, `c.text`, etc. and never
|
|
6
|
+
* see raw ANSI bytes. Detection is via the `COLORTERM` env var.
|
|
7
|
+
*
|
|
8
|
+
* Tokens map 1:1 to the design handoff §1 table.
|
|
9
|
+
*/
|
|
10
|
+
/** Reset escape. Always pure. */
|
|
11
|
+
export const RESET = "\x1b[0m";
|
|
12
|
+
/** True if the terminal advertises 24-bit color. */
|
|
13
|
+
export const TRUECOLOR = process.env.COLORTERM === "truecolor" || process.env.COLORTERM === "24bit";
|
|
14
|
+
const truecolor = {
|
|
15
|
+
accent: "\x1b[38;2;192;76;76m",
|
|
16
|
+
accentHi: "\x1b[38;2;224;136;136m",
|
|
17
|
+
accentDim: "\x1b[38;2;122;46;46m",
|
|
18
|
+
text: "\x1b[38;2;214;210;218m",
|
|
19
|
+
textHi: "\x1b[1m\x1b[38;2;255;255;255m",
|
|
20
|
+
textMid: "\x1b[38;2;154;150;162m",
|
|
21
|
+
textDim: "\x1b[38;2;110;108;120m",
|
|
22
|
+
textGhost: "\x1b[38;2;60;58;68m",
|
|
23
|
+
ok: "\x1b[38;2;125;181;138m",
|
|
24
|
+
warn: "\x1b[38;2;201;168;106m",
|
|
25
|
+
fail: "\x1b[38;2;192;76;76m",
|
|
26
|
+
};
|
|
27
|
+
const c256 = {
|
|
28
|
+
accent: "\x1b[38;5;167m",
|
|
29
|
+
accentHi: "\x1b[38;5;174m",
|
|
30
|
+
accentDim: "\x1b[38;5;88m",
|
|
31
|
+
text: "\x1b[38;5;252m",
|
|
32
|
+
textHi: "\x1b[1m",
|
|
33
|
+
textMid: "\x1b[38;5;246m",
|
|
34
|
+
textDim: "\x1b[38;5;242m",
|
|
35
|
+
textGhost: "\x1b[38;5;238m",
|
|
36
|
+
ok: "\x1b[38;5;108m",
|
|
37
|
+
warn: "\x1b[38;5;179m",
|
|
38
|
+
fail: "\x1b[38;5;167m",
|
|
39
|
+
};
|
|
40
|
+
/** Active palette. Read at module init from `COLORTERM`. */
|
|
41
|
+
export const c = TRUECOLOR ? truecolor : c256;
|
|
42
|
+
/** Wrap text in a color, automatically appending RESET. */
|
|
43
|
+
export function color(token, text) {
|
|
44
|
+
return `${token}${text}${RESET}`;
|
|
45
|
+
}
|
|
46
|
+
/** Glyphs used across the redesign. */
|
|
47
|
+
export const glyph = {
|
|
48
|
+
brand: "⬢", // ⬢
|
|
49
|
+
sep: "▸", // ▸
|
|
50
|
+
prompt: "❯", // ❯
|
|
51
|
+
selection: "▶", // ▶
|
|
52
|
+
tag: "◂", // ◂
|
|
53
|
+
ok: "✓", // ✓
|
|
54
|
+
warn: "⚠", // ⚠
|
|
55
|
+
fail: "✗", // ✗
|
|
56
|
+
spin0: "◌", // ◌
|
|
57
|
+
spin1: "◐", // ◐
|
|
58
|
+
spin2: "◑", // ◑
|
|
59
|
+
spin3: "◒", // ◒
|
|
60
|
+
spin4: "◓", // ◓
|
|
61
|
+
dotFilled: "●", // ●
|
|
62
|
+
dotHollow: "○", // ○
|
|
63
|
+
arrow: "→", // →
|
|
64
|
+
ruleLight: "─", // ─
|
|
65
|
+
ruleHeavy: "━", // ━
|
|
66
|
+
boxTL: "╭", // ╭
|
|
67
|
+
boxTR: "╮", // ╮
|
|
68
|
+
boxBL: "╰", // ╰
|
|
69
|
+
boxBR: "╯", // ╯
|
|
70
|
+
boxV: "│", // │
|
|
71
|
+
boxH: "─", // ─
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Width of the terminal, captured at module init. Targets 80 cols and
|
|
75
|
+
* tolerates wider. Never reflows on resize — same constraint as the design.
|
|
76
|
+
*/
|
|
77
|
+
export const COLS = (() => {
|
|
78
|
+
const raw = process.stdout.columns;
|
|
79
|
+
if (typeof raw !== "number" || raw <= 0)
|
|
80
|
+
return 80;
|
|
81
|
+
return raw;
|
|
82
|
+
})();
|
|
83
|
+
/** Effective render width: clamp to >= 80 unless explicitly narrower. */
|
|
84
|
+
export function width() {
|
|
85
|
+
return Math.max(80, COLS);
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../../../src/lib/setup/ui/tokens.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/setup.d.ts
CHANGED
|
@@ -134,6 +134,13 @@ interface ChatSetupOpts {
|
|
|
134
134
|
/** v5.8.4: reuse the caller's readline (e.g. summary wizard) to avoid stdin races. */
|
|
135
135
|
rl?: ReadlineInterface;
|
|
136
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* v5.9.3 (deci-050): `gnosys setup chat` is deprecated. Chat config
|
|
139
|
+
* moves into the chat TUI's own settings panel in v6.0 (road-014). This
|
|
140
|
+
* stub renders a deprecation notice and exits. The function signature
|
|
141
|
+
* is preserved so existing callers (cli.ts subcommand registration)
|
|
142
|
+
* continue to compile.
|
|
143
|
+
*/
|
|
137
144
|
export declare function runChatSetup(opts?: ChatSetupOpts): Promise<void>;
|
|
138
145
|
/**
|
|
139
146
|
* Best-effort lookup of the API key for a provider. Used by the dream setup
|
package/dist/lib/setup.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/lib/setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAmB,SAAS,IAAI,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/lib/setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAmB,SAAS,IAAI,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAkDpF,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,qDAAqD;AACrD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,8EAA8E;IAC9E,aAAa,CAAC,EAAE;QACd,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,SAAS,CAAC,EAAE,WAAW,CAAC;QACxB,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,aAAa,CAAC,EAAE,WAAW,CAAC;QAC5B,KAAK,CAAC,EAAE,WAAW,CAAC;KACrB,CAAC;IACF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAID,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAkCtD,CAAC;AA0BF;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CA8J/E;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAM1E;AA+CD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAUjF;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoC9E;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAY1E;AAuED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA0FtE;AAoBD;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA6NhD;AA+OD,wBAAsB,QAAQ,CAAC,IAAI,EAAE;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,OAAO,CAAC,WAAW,CAAC,CAk7BvB;AAID,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwK9E;AAID,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+ElF;AAID,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sFAAsF;IACtF,EAAE,CAAC,EAAE,iBAAiB,CAAC;CACxB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CAAC,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkQ5E;AAcD,UAAU,aAAa;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sFAAsF;IACtF,EAAE,CAAC,EAAE,iBAAiB,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB1E;AAoBD;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAsB5E"}
|