@noodleseed/one 0.7.0 → 0.10.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/banner.d.ts +11 -0
- package/dist/banner.d.ts.map +1 -0
- package/dist/banner.js +183 -0
- package/dist/banner.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +6 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/author-loop.d.ts.map +1 -1
- package/dist/commands/author-loop.js +78 -3
- package/dist/commands/author-loop.js.map +1 -1
- package/dist/commands/deploy-ops.d.ts +1 -30
- package/dist/commands/deploy-ops.d.ts.map +1 -1
- package/dist/commands/deploy-ops.js +79 -88
- package/dist/commands/deploy-ops.js.map +1 -1
- package/dist/commands/deploy-output.d.ts +31 -0
- package/dist/commands/deploy-output.d.ts.map +1 -0
- package/dist/commands/deploy-output.js +86 -0
- package/dist/commands/deploy-output.js.map +1 -0
- package/dist/commands/deploy-version-resolution.d.ts +20 -0
- package/dist/commands/deploy-version-resolution.d.ts.map +1 -0
- package/dist/commands/deploy-version-resolution.js +77 -0
- package/dist/commands/deploy-version-resolution.js.map +1 -0
- package/dist/commands/docs-mcp.d.ts +32 -0
- package/dist/commands/docs-mcp.d.ts.map +1 -0
- package/dist/commands/docs-mcp.js +66 -0
- package/dist/commands/docs-mcp.js.map +1 -0
- package/dist/commands/mcp-apps.d.ts.map +1 -1
- package/dist/commands/mcp-apps.js +38 -37
- package/dist/commands/mcp-apps.js.map +1 -1
- package/dist/commands/project-setup.d.ts +1 -1
- package/dist/commands/project-setup.d.ts.map +1 -1
- package/dist/commands/project-setup.js +36 -2
- package/dist/commands/project-setup.js.map +1 -1
- package/dist/commands/shared.d.ts +1 -0
- package/dist/commands/shared.d.ts.map +1 -1
- package/dist/commands/shared.js +10 -4
- package/dist/commands/shared.js.map +1 -1
- package/dist/deploy-version.d.ts +3 -0
- package/dist/deploy-version.d.ts.map +1 -0
- package/dist/deploy-version.js +28 -0
- package/dist/deploy-version.js.map +1 -0
- package/dist/deploy.d.ts +5 -1
- package/dist/deploy.d.ts.map +1 -1
- package/dist/deploy.js +27 -3
- package/dist/deploy.js.map +1 -1
- package/dist/dev.d.ts.map +1 -1
- package/dist/dev.js +9 -1
- package/dist/dev.js.map +1 -1
- package/dist/devtools-chat.d.ts +76 -0
- package/dist/devtools-chat.d.ts.map +1 -0
- package/dist/devtools-chat.js +114 -0
- package/dist/devtools-chat.js.map +1 -0
- package/dist/devtools-env.d.ts +16 -0
- package/dist/devtools-env.d.ts.map +1 -0
- package/dist/devtools-env.js +71 -0
- package/dist/devtools-env.js.map +1 -0
- package/dist/devtools-harness.d.ts +28 -0
- package/dist/devtools-harness.d.ts.map +1 -0
- package/dist/devtools-harness.js +387 -0
- package/dist/devtools-harness.js.map +1 -0
- package/dist/devtools-preview.d.ts +42 -0
- package/dist/devtools-preview.d.ts.map +1 -0
- package/dist/devtools-preview.js +394 -0
- package/dist/devtools-preview.js.map +1 -0
- package/dist/first-run-entry.d.ts +2 -0
- package/dist/first-run-entry.d.ts.map +1 -0
- package/dist/first-run-entry.js +36 -0
- package/dist/first-run-entry.js.map +1 -0
- package/dist/first-run.d.ts +26 -0
- package/dist/first-run.d.ts.map +1 -0
- package/dist/first-run.js +439 -0
- package/dist/first-run.js.map +1 -0
- package/dist/gradient.d.ts +46 -0
- package/dist/gradient.d.ts.map +1 -0
- package/dist/gradient.js +87 -0
- package/dist/gradient.js.map +1 -0
- package/dist/openapi-import.d.ts.map +1 -1
- package/dist/openapi-import.js +47 -8
- package/dist/openapi-import.js.map +1 -1
- package/dist/preview-session.d.ts +46 -0
- package/dist/preview-session.d.ts.map +1 -0
- package/dist/preview-session.js +132 -0
- package/dist/preview-session.js.map +1 -0
- package/dist/project.d.ts +2 -0
- package/dist/project.d.ts.map +1 -1
- package/dist/project.js +2 -0
- package/dist/project.js.map +1 -1
- package/dist/prompts.d.ts +61 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +209 -0
- package/dist/prompts.js.map +1 -0
- package/dist/react-widget-build.js +3 -1
- package/dist/react-widget-build.js.map +1 -1
- package/dist/status.d.ts +58 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +106 -0
- package/dist/status.js.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js +4 -0
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/node_modules/@noodle-borg/connector-defs/dist/compile-expr.d.ts +23 -0
- package/node_modules/@noodle-borg/connector-defs/dist/compile-expr.d.ts.map +1 -0
- package/node_modules/@noodle-borg/connector-defs/dist/compile-expr.js +41 -0
- package/node_modules/@noodle-borg/connector-defs/dist/compile-expr.js.map +1 -0
- package/node_modules/@noodle-borg/connector-defs/dist/compile.d.ts +2 -6
- package/node_modules/@noodle-borg/connector-defs/dist/compile.d.ts.map +1 -1
- package/node_modules/@noodle-borg/connector-defs/dist/compile.js +10 -32
- package/node_modules/@noodle-borg/connector-defs/dist/compile.js.map +1 -1
- package/node_modules/@noodle-borg/connector-defs/dist/schema.d.ts +16 -0
- package/node_modules/@noodle-borg/connector-defs/dist/schema.d.ts.map +1 -1
- package/node_modules/@noodle-borg/connector-defs/dist/schema.js +6 -0
- package/node_modules/@noodle-borg/connector-defs/dist/schema.js.map +1 -1
- package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts +7 -0
- package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts.map +1 -1
- package/node_modules/@noodle-borg/connector-http/dist/http-connector.js +14 -5
- package/node_modules/@noodle-borg/connector-http/dist/http-connector.js.map +1 -1
- package/node_modules/@noodle-borg/module/dist/contract.d.ts +12 -0
- package/node_modules/@noodle-borg/module/dist/contract.d.ts.map +1 -1
- package/node_modules/@noodle-borg/module/dist/contract.js +41 -0
- package/node_modules/@noodle-borg/module/dist/contract.js.map +1 -1
- package/node_modules/@noodle-borg/openapi-import/dist/index.d.ts +4 -0
- package/node_modules/@noodle-borg/openapi-import/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/openapi-import/dist/index.js +27 -1
- package/node_modules/@noodle-borg/openapi-import/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/openapi-import/dist/response-schema.d.ts +50 -0
- package/node_modules/@noodle-borg/openapi-import/dist/response-schema.d.ts.map +1 -0
- package/node_modules/@noodle-borg/openapi-import/dist/response-schema.js +227 -0
- package/node_modules/@noodle-borg/openapi-import/dist/response-schema.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.d.ts +20 -2
- package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.js +37 -2
- package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/deployment-versioning.d.ts +18 -0
- package/node_modules/@noodle-borg/service/dist/deployment-versioning.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/deployment-versioning.js +29 -0
- package/node_modules/@noodle-borg/service/dist/deployment-versioning.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/main.js +7 -0
- package/node_modules/@noodle-borg/service/dist/main.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/app.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/app.js +2 -1
- package/node_modules/@noodle-borg/service/dist/oauth/app.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/branding.d.ts +30 -0
- package/node_modules/@noodle-borg/service/dist/oauth/branding.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/branding.js +224 -0
- package/node_modules/@noodle-borg/service/dist/oauth/branding.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/consent.d.ts +0 -6
- package/node_modules/@noodle-borg/service/dist/oauth/consent.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/consent.js +23 -34
- package/node_modules/@noodle-borg/service/dist/oauth/consent.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/customer-bridge.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/customer-bridge.js +13 -28
- package/node_modules/@noodle-borg/service/dist/oauth/customer-bridge.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-helpers.d.ts +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-helpers.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-helpers.js +5 -3
- package/node_modules/@noodle-borg/service/dist/registry-helpers.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-targets.d.ts +1 -0
- package/node_modules/@noodle-borg/service/dist/registry-targets.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-targets.js +4 -0
- package/node_modules/@noodle-borg/service/dist/registry-targets.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-types.d.ts +59 -0
- package/node_modules/@noodle-borg/service/dist/registry-types.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/registry-types.js +2 -0
- package/node_modules/@noodle-borg/service/dist/registry-types.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/registry.d.ts +8 -65
- package/node_modules/@noodle-borg/service/dist/registry.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry.js +100 -82
- package/node_modules/@noodle-borg/service/dist/registry.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/access-mode.d.ts +4 -0
- package/node_modules/@noodle-borg/service/dist/routes/access-mode.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/access-mode.js +15 -0
- package/node_modules/@noodle-borg/service/dist/routes/access-mode.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.d.ts +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.js +34 -21
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/rollback.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/rollback.js +4 -6
- package/node_modules/@noodle-borg/service/dist/routes/rollback.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/serve.d.ts +6 -0
- package/node_modules/@noodle-borg/service/dist/serve.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/serve.js +72 -32
- package/node_modules/@noodle-borg/service/dist/serve.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/server-auth-bindings.d.ts +7 -0
- package/node_modules/@noodle-borg/service/dist/server-auth-bindings.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/server-auth-bindings.js +14 -0
- package/node_modules/@noodle-borg/service/dist/server-auth-bindings.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/service.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/service.js +32 -3
- package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js +13 -2
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts +3 -2
- package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres.js +41 -9
- package/node_modules/@noodle-borg/service/dist/store/postgres.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store.d.ts +9 -3
- package/node_modules/@noodle-borg/service/dist/store.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store.js +29 -27
- package/node_modules/@noodle-borg/service/dist/store.js.map +1 -1
- package/node_modules/@noodle-borg/transport-http/dist/handler.d.ts +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/handler.d.ts.map +1 -1
- package/node_modules/@noodle-borg/transport-http/dist/handler.js +37 -0
- package/node_modules/@noodle-borg/transport-http/dist/handler.js.map +1 -1
- package/node_modules/@noodle-borg/transport-http/dist/index.d.ts +1 -1
- package/node_modules/@noodle-borg/transport-http/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/transport-http/dist/index.js.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `noodle start` — the guided first-run wizard.
|
|
3
|
+
*
|
|
4
|
+
* Interactive on a TTY: a restrained, transparent flow that teaches the model,
|
|
5
|
+
* discloses what it does (files + the exact command each step runs), verifies the
|
|
6
|
+
* server actually responds before declaring success, then transitions into the
|
|
7
|
+
* first real job — it does not end at "setup complete".
|
|
8
|
+
*
|
|
9
|
+
* Non-interactive (`--json`, pipes, CI, or an agent): the same flow, flag-driven.
|
|
10
|
+
* Answers come from flags; a missing required answer fails with a machine-readable
|
|
11
|
+
* error naming the flag, never a hung prompt. Nothing animates; output is structured.
|
|
12
|
+
*
|
|
13
|
+
* The wizard orchestrates existing primitives (`browserLogin`, `initProject`,
|
|
14
|
+
* `deploy`, `dev`, the hosted smoke) and reuses the shipped splash + `status`
|
|
15
|
+
* module. It is idempotent and resumable: already-done steps are detected and skipped.
|
|
16
|
+
*/
|
|
17
|
+
import { basename, extname } from 'node:path';
|
|
18
|
+
import { setupAgents } from './agents.js';
|
|
19
|
+
import { printBanner } from './banner.js';
|
|
20
|
+
import { readConfig } from './config.js';
|
|
21
|
+
import { browserLogin, resolveControlPlaneToken, serviceJson } from './control-plane.js';
|
|
22
|
+
import { deploy } from './deploy.js';
|
|
23
|
+
import { dev } from './dev.js';
|
|
24
|
+
import { errorMessage, printRecovery } from './diagnostics.js';
|
|
25
|
+
import { detectColorMode, detectGlyphMode, paint as paintMode, } from './gradient.js';
|
|
26
|
+
import { initProject, readProjectDeployment, readResolvedProjectConfig, resolveLocalEntrypoint, } from './project.js';
|
|
27
|
+
import { AbortPromptError, confirm, isInteractive, MissingAnswerError, resolveAnswer, select, text, } from './prompts.js';
|
|
28
|
+
import { startSpinner } from './status.js';
|
|
29
|
+
const ORANGE = [249, 115, 22];
|
|
30
|
+
const AMBER = [245, 158, 11];
|
|
31
|
+
const GREEN = [34, 197, 94];
|
|
32
|
+
const INK = [230, 230, 230];
|
|
33
|
+
const DIM = [125, 125, 125];
|
|
34
|
+
const FAINT = [90, 90, 90];
|
|
35
|
+
export function parseFlags(rest) {
|
|
36
|
+
const f = { json: false, yes: false };
|
|
37
|
+
for (let i = 0; i < rest.length; i++) {
|
|
38
|
+
const a = rest[i];
|
|
39
|
+
if (a === '--json')
|
|
40
|
+
f.json = true;
|
|
41
|
+
else if (a === '--yes' || a === '-y')
|
|
42
|
+
f.yes = true;
|
|
43
|
+
else if (a === '--name')
|
|
44
|
+
f.name = rest[++i];
|
|
45
|
+
else if (a === '--template')
|
|
46
|
+
f.template = rest[++i];
|
|
47
|
+
else if (a === '--deploy')
|
|
48
|
+
f.where = 'deploy';
|
|
49
|
+
else if (a === '--local')
|
|
50
|
+
f.where = 'local';
|
|
51
|
+
else if (a === '--org')
|
|
52
|
+
f.org = rest[++i];
|
|
53
|
+
else if (a === '--app')
|
|
54
|
+
f.app = rest[++i];
|
|
55
|
+
else if (a === '--env')
|
|
56
|
+
f.env = rest[++i];
|
|
57
|
+
else if (a === '--access')
|
|
58
|
+
f.access = rest[++i];
|
|
59
|
+
else if (a === '--service')
|
|
60
|
+
f.serviceFlag = rest[++i];
|
|
61
|
+
else if (a === '--auth-token')
|
|
62
|
+
f.authFlag = rest[++i];
|
|
63
|
+
}
|
|
64
|
+
return f;
|
|
65
|
+
}
|
|
66
|
+
// --- styled output ---
|
|
67
|
+
// Terminal capabilities, resolved once per run in `runStart`.
|
|
68
|
+
let COLOR = 'none';
|
|
69
|
+
let GLYPH = 'unicode';
|
|
70
|
+
let JSON_MODE = false;
|
|
71
|
+
const paint = (rgb, s) => paintMode(rgb, s, COLOR);
|
|
72
|
+
/** Pick a glyph by terminal capability (Unicode vs ASCII fallback). */
|
|
73
|
+
const gg = (unicode, ascii) => (GLYPH === 'unicode' ? unicode : ascii);
|
|
74
|
+
const out = (s) => {
|
|
75
|
+
process.stdout.write(`${s}\n`);
|
|
76
|
+
};
|
|
77
|
+
/** The orientation header: teach the model + key hints. Interactive only. */
|
|
78
|
+
async function orientation() {
|
|
79
|
+
await printBanner();
|
|
80
|
+
out('');
|
|
81
|
+
out(`${paint(DIM, 'You author one ')}${paint(INK, 'server.ts')}${paint(DIM, '. Noodle compiles it and runs it for you:')}`);
|
|
82
|
+
out('');
|
|
83
|
+
const arrow = paint(FAINT, gg('──▶', '-->'));
|
|
84
|
+
out(` ${paint(ORANGE, 'server.ts')} ${arrow} ${paint(DIM, 'compile')} ${arrow} ${paint(DIM, 'manifest')} ${arrow} ${paint(DIM, 'runtime')} ${arrow} ${paint(DIM, 'MCP client')}`);
|
|
85
|
+
out(` ${paint(FAINT, 'you write noodle data we host Claude, Cursor…')}`);
|
|
86
|
+
out('');
|
|
87
|
+
out(`${paint(DIM, 'first-run setup · each step prints its flag ·')} ${paint(FAINT, gg('↑↓ move ⏎ select esc back', 'up/down move enter select esc back'))}`);
|
|
88
|
+
out(paint([36, 36, 36], gg('─', '-').repeat(70)));
|
|
89
|
+
}
|
|
90
|
+
/** A settled wizard step line: `✔ [n/N] label detail command`. Silent in --json mode. */
|
|
91
|
+
function stepLine(n, total, label, detail, command) {
|
|
92
|
+
if (JSON_MODE)
|
|
93
|
+
return;
|
|
94
|
+
const idx = paint(DIM, `[${n}/${total}]`);
|
|
95
|
+
const cmd = command ? paint(FAINT, command) : '';
|
|
96
|
+
out(`${paint(GREEN, gg('✔', '+'))} ${idx} ${paint(INK, label)} ${paint(DIM, detail)}${cmd ? ` ${cmd}` : ''}`);
|
|
97
|
+
}
|
|
98
|
+
function detectState(home, cwd) {
|
|
99
|
+
return (async () => {
|
|
100
|
+
const config = readConfig(home);
|
|
101
|
+
const entrypoint = resolveLocalEntrypoint(cwd);
|
|
102
|
+
const deployment = readProjectDeployment(cwd);
|
|
103
|
+
return {
|
|
104
|
+
loggedIn: config.identity !== undefined || config.authToken !== undefined,
|
|
105
|
+
...(config.identity?.email ? { email: config.identity.email } : {}),
|
|
106
|
+
...(entrypoint ? { entrypoint } : {}),
|
|
107
|
+
deployed: deployment !== undefined,
|
|
108
|
+
};
|
|
109
|
+
})();
|
|
110
|
+
}
|
|
111
|
+
// --- steps -----------------------------------------------------------------
|
|
112
|
+
/** Step: account. Returns { serviceUrl, token, email } or throws with a recovery already printed. */
|
|
113
|
+
async function stepAccount(flags, env, home, interactive, n, total) {
|
|
114
|
+
const existing = await resolveControlPlaneToken({
|
|
115
|
+
...(flags.serviceFlag ? { serviceFlag: flags.serviceFlag } : {}),
|
|
116
|
+
...(flags.authFlag ? { authFlag: flags.authFlag } : {}),
|
|
117
|
+
env,
|
|
118
|
+
home,
|
|
119
|
+
});
|
|
120
|
+
if (existing.token !== undefined) {
|
|
121
|
+
const email = readConfig(home).identity?.email;
|
|
122
|
+
stepLine(n, total, 'account', email ? `signed in as ${email}` : 'signed in', '');
|
|
123
|
+
return { serviceUrl: existing.serviceUrl, token: existing.token, ...(email ? { email } : {}) };
|
|
124
|
+
}
|
|
125
|
+
if (!interactive) {
|
|
126
|
+
// Headless: never open a browser. Local starts need no account; the deploy path
|
|
127
|
+
// enforces auth when it actually needs a token (so `start --json --local` works).
|
|
128
|
+
return { serviceUrl: existing.serviceUrl };
|
|
129
|
+
}
|
|
130
|
+
const wants = await confirm('Sign in to Noodle? (local dev needs no account)', { initial: true });
|
|
131
|
+
if (!wants)
|
|
132
|
+
return { serviceUrl: existing.serviceUrl };
|
|
133
|
+
const spinner = startSpinner('Signing you in… opening browser');
|
|
134
|
+
try {
|
|
135
|
+
const result = await browserLogin({ serviceUrl: existing.serviceUrl, home });
|
|
136
|
+
const refreshed = await resolveControlPlaneToken({
|
|
137
|
+
...(flags.serviceFlag ? { serviceFlag: flags.serviceFlag } : {}),
|
|
138
|
+
env,
|
|
139
|
+
home,
|
|
140
|
+
});
|
|
141
|
+
spinner.succeed(`account · signed in as ${result.email ?? 'you'}`);
|
|
142
|
+
return {
|
|
143
|
+
serviceUrl: result.serviceUrl,
|
|
144
|
+
...(refreshed.token ? { token: refreshed.token } : {}),
|
|
145
|
+
...(result.email ? { email: result.email } : {}),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
catch (err) {
|
|
149
|
+
spinner.fail('sign-in failed');
|
|
150
|
+
throw err;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/** Step: project. Scaffolds a new project or detects an existing one. Returns the entrypoint. */
|
|
154
|
+
async function stepProject(flags, interactive, state, n, total) {
|
|
155
|
+
if (state.entrypoint) {
|
|
156
|
+
stepLine(n, total, 'project', `found ${state.entrypoint} — using it`, '');
|
|
157
|
+
return { entrypoint: state.entrypoint, root: process.cwd() };
|
|
158
|
+
}
|
|
159
|
+
const name = interactive
|
|
160
|
+
? await text('Project name', {
|
|
161
|
+
initial: flags.name ?? 'my-server',
|
|
162
|
+
validate: (v) => (v.trim() ? undefined : 'required'),
|
|
163
|
+
})
|
|
164
|
+
: resolveAnswer({ name: flags.name }, 'name', '--name');
|
|
165
|
+
const templateOptions = [
|
|
166
|
+
{ value: 'hello', label: 'hello', hint: 'a minimal MCP server' },
|
|
167
|
+
{ value: 'http-api', label: 'http-api', hint: 'wrap an existing HTTP API' },
|
|
168
|
+
{ value: 'widget', label: 'widget', hint: 'a tool with a React widget' },
|
|
169
|
+
];
|
|
170
|
+
const template = interactive
|
|
171
|
+
? await select('Template', templateOptions, { initial: 0 })
|
|
172
|
+
: resolveAnswer({ template: flags.template }, 'template', '--template', 'hello');
|
|
173
|
+
const result = initProject({
|
|
174
|
+
dir: name,
|
|
175
|
+
template: template,
|
|
176
|
+
name,
|
|
177
|
+
agentTargets: ['codex', 'claude-code'],
|
|
178
|
+
});
|
|
179
|
+
setupAgents({
|
|
180
|
+
agents: ['codex', 'claude-code'],
|
|
181
|
+
project: result.dir,
|
|
182
|
+
write: true,
|
|
183
|
+
force: false,
|
|
184
|
+
json: false,
|
|
185
|
+
});
|
|
186
|
+
stepLine(n, total, 'scaffold', `${name} · template ${template}`, `noodle init ${name} --template ${template}`);
|
|
187
|
+
if (interactive) {
|
|
188
|
+
const created = result.files.filter((f) => f.action === 'created' || f.action === 'overwritten');
|
|
189
|
+
out(` ${paint(DIM, `${name}/`)}`);
|
|
190
|
+
for (const f of created.slice(0, 6))
|
|
191
|
+
out(` ${paint(FAINT, gg('├─', '|-'))} ${paint(INK, f.path)}`);
|
|
192
|
+
}
|
|
193
|
+
return {
|
|
194
|
+
entrypoint: resolveLocalEntrypoint(result.dir) ?? `${result.dir}/server.ts`,
|
|
195
|
+
root: result.dir,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* A failed step: for humans, print a recovery; under `--json` stay silent on stdout
|
|
200
|
+
* and carry the error so `runStart` can emit it in the structured payload instead.
|
|
201
|
+
*/
|
|
202
|
+
function failStep(cause, fix, next) {
|
|
203
|
+
if (!JSON_MODE)
|
|
204
|
+
printRecovery({ command: 'start', cause, fix, next });
|
|
205
|
+
return { ok: false, error: { message: cause, next } };
|
|
206
|
+
}
|
|
207
|
+
/** Step: run — deploy to the cloud (verified) or prove it locally. */
|
|
208
|
+
async function stepRun(flags, home, interactive, account, entrypoint, root, n, total) {
|
|
209
|
+
const whereOptions = [
|
|
210
|
+
{ value: 'deploy', label: 'Deploy to the cloud', hint: 'hosted, callable from any MCP client' },
|
|
211
|
+
{ value: 'local', label: 'Run locally', hint: 'noodle dev — hot reload, no account' },
|
|
212
|
+
];
|
|
213
|
+
const where = interactive
|
|
214
|
+
? await select('Where should this server run?', whereOptions, {
|
|
215
|
+
initial: account.token ? 0 : 1,
|
|
216
|
+
})
|
|
217
|
+
: resolveAnswer({ where: flags.where }, 'where', '--deploy | --local', account.token ? 'deploy' : 'local');
|
|
218
|
+
if (where === 'local')
|
|
219
|
+
return runLocal(entrypoint, interactive, n, total);
|
|
220
|
+
return runDeploy(flags, home, interactive, account, entrypoint, root, n, total);
|
|
221
|
+
}
|
|
222
|
+
async function runLocal(entrypoint, interactive, n, total) {
|
|
223
|
+
const spinner = interactive ? startSpinner('Booting a local server to verify…') : undefined;
|
|
224
|
+
const handle = await dev({
|
|
225
|
+
manifestPath: entrypoint,
|
|
226
|
+
watch: false,
|
|
227
|
+
interactive: false,
|
|
228
|
+
log: () => { },
|
|
229
|
+
});
|
|
230
|
+
try {
|
|
231
|
+
const reload = await handle.reload();
|
|
232
|
+
if (!reload.ok) {
|
|
233
|
+
spinner?.fail('local server failed to compile');
|
|
234
|
+
return failStep('the local server failed to compile.', 'Fix the reported errors and retry.', 'noodle validate');
|
|
235
|
+
}
|
|
236
|
+
const count = reload.toolNames?.length ?? 0;
|
|
237
|
+
spinner?.succeed(`verified — ${count} tool${count === 1 ? '' : 's'} respond locally`);
|
|
238
|
+
stepLine(n, total, 'run', `local · ${count} tools`, 'noodle dev');
|
|
239
|
+
return { ok: true, verified: true, url: handle.url };
|
|
240
|
+
}
|
|
241
|
+
finally {
|
|
242
|
+
await handle.close();
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
const ACCESS_MODES = [
|
|
246
|
+
'owner-only',
|
|
247
|
+
'org-members',
|
|
248
|
+
'authenticated',
|
|
249
|
+
'customers',
|
|
250
|
+
];
|
|
251
|
+
async function runDeploy(flags, home, interactive, account, entrypoint, root, n, total) {
|
|
252
|
+
// Deploying is the only step that needs an account; enforce it here, not in stepAccount.
|
|
253
|
+
const token = account.token;
|
|
254
|
+
if (token === undefined) {
|
|
255
|
+
return failStep('deploying needs an account.', 'Sign in first, or pass a token.', 'noodle login (or: noodle start --auth-token <token>)');
|
|
256
|
+
}
|
|
257
|
+
// Read the scaffolded/linked project's config from its own root, not the parent dir.
|
|
258
|
+
const defaults = readResolvedProjectConfig(root);
|
|
259
|
+
const config = readConfig(home);
|
|
260
|
+
const org = flags.org ?? defaults.org ?? config.defaultOrg;
|
|
261
|
+
// Resolve the app name once (deploy() would otherwise infer its own), so deploy + smoke agree.
|
|
262
|
+
const app = flags.app ?? defaults.app ?? basename(entrypoint, extname(entrypoint));
|
|
263
|
+
const environment = flags.env ?? defaults.env ?? config.defaultEnv ?? 'prod';
|
|
264
|
+
const access = flags.access ?? 'owner-only';
|
|
265
|
+
if (!ACCESS_MODES.includes(access)) {
|
|
266
|
+
return failStep(`invalid --access value "${access}".`, `Use one of: ${ACCESS_MODES.join(', ')}.`, 'noodle start --access owner-only');
|
|
267
|
+
}
|
|
268
|
+
if (org === undefined) {
|
|
269
|
+
return failStep('no deployment org resolved.', 'Pass an org or link the project.', 'noodle start --org <org> (or: noodle link)');
|
|
270
|
+
}
|
|
271
|
+
const targetLabel = `${org}/${app}/${environment}`;
|
|
272
|
+
// Consent before the outward, publishing action.
|
|
273
|
+
if (interactive && !flags.yes) {
|
|
274
|
+
const okToDeploy = await confirm(`Deploy to ${targetLabel} (access: ${access})?`, {
|
|
275
|
+
initial: true,
|
|
276
|
+
});
|
|
277
|
+
if (!okToDeploy) {
|
|
278
|
+
out(`${paint(AMBER, gg('⚠', '!'))} deploy skipped`);
|
|
279
|
+
return { ok: false };
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
const spinner = interactive ? startSpinner(`Deploying to ${targetLabel}…`) : undefined;
|
|
283
|
+
const outcome = await deploy({
|
|
284
|
+
manifestPath: entrypoint,
|
|
285
|
+
serviceUrl: account.serviceUrl,
|
|
286
|
+
authToken: token,
|
|
287
|
+
org,
|
|
288
|
+
app,
|
|
289
|
+
env: environment,
|
|
290
|
+
accessMode: access,
|
|
291
|
+
});
|
|
292
|
+
if (!outcome.ok) {
|
|
293
|
+
spinner?.fail(`deploy failed — ${outcome.message}`);
|
|
294
|
+
return failStep(outcome.message, outcome.stage !== undefined
|
|
295
|
+
? `Fix the ${outcome.stage} problem and retry.`
|
|
296
|
+
: 'Resolve the error and retry.', outcome.message.toLowerCase().includes('secret')
|
|
297
|
+
? 'noodle secrets set <NAME> then noodle start'
|
|
298
|
+
: 'noodle doctor');
|
|
299
|
+
}
|
|
300
|
+
spinner?.succeed(`deployed to ${targetLabel}`);
|
|
301
|
+
// Verify the server actually responds before calling it "live" — same app name as the deploy.
|
|
302
|
+
const verified = await verifyDeploy(account, org, app, environment, interactive);
|
|
303
|
+
stepLine(n, total, 'deploy', `${targetLabel} · ${access}`, `noodle deploy --org ${org} --access ${access}`);
|
|
304
|
+
return { ok: true, deploymentId: outcome.deploymentId, url: outcome.url, verified };
|
|
305
|
+
}
|
|
306
|
+
/** Real smoke: hit the hosted /smoke endpoint; only "verified" when the server responds. */
|
|
307
|
+
async function verifyDeploy(account, org, app, environment, interactive) {
|
|
308
|
+
const token = account.token;
|
|
309
|
+
if (token === undefined)
|
|
310
|
+
return false;
|
|
311
|
+
const spinner = interactive ? startSpinner('Verifying the server responds…') : undefined;
|
|
312
|
+
try {
|
|
313
|
+
const smoke = await serviceJson(`${account.serviceUrl}/v1/orgs/${org}/apps/${app}/envs/${environment}/smoke`, token, { method: 'POST' });
|
|
314
|
+
if (smoke.ok) {
|
|
315
|
+
spinner?.succeed('verified — server responds');
|
|
316
|
+
return true;
|
|
317
|
+
}
|
|
318
|
+
spinner?.warn('deployed, but the server is not responding yet');
|
|
319
|
+
if (!JSON_MODE)
|
|
320
|
+
printRecovery({
|
|
321
|
+
command: 'start',
|
|
322
|
+
cause: 'the deployed server did not pass its smoke checks.',
|
|
323
|
+
fix: 'Inspect logs and health, then retry.',
|
|
324
|
+
next: 'noodle logs --tail · noodle doctor',
|
|
325
|
+
});
|
|
326
|
+
return false;
|
|
327
|
+
}
|
|
328
|
+
catch {
|
|
329
|
+
spinner?.warn('could not verify the server yet');
|
|
330
|
+
return false;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
/** After success: transition into the first real job, not a dead-end. */
|
|
334
|
+
async function whatNow(result, interactive) {
|
|
335
|
+
out(paint([36, 36, 36], '─'.repeat(70)));
|
|
336
|
+
if (result.verified)
|
|
337
|
+
out(`${paint(GREEN, gg('✔', '+'))} ${paint(INK, 'live and verified')}`);
|
|
338
|
+
else
|
|
339
|
+
out(`${paint(AMBER, gg('⚠', '!'))} ${paint(INK, 'set up — verify when the server is ready')}`);
|
|
340
|
+
if (result.url)
|
|
341
|
+
out(` ${paint(DIM, 'endpoint')} ${paint(INK, result.url)}`);
|
|
342
|
+
out('');
|
|
343
|
+
if (!interactive) {
|
|
344
|
+
out(paint(DIM, 'next: noodle connect claude-code · noodle logs --tail · noodle dev'));
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
const nextOptions = [
|
|
348
|
+
{ value: 'connect', label: 'Connect Claude Code', hint: 'call your server from your editor' },
|
|
349
|
+
{ value: 'logs', label: 'Watch requests', hint: 'live tool-call log' },
|
|
350
|
+
{ value: 'dev', label: 'Iterate locally', hint: 'hot-reload dev loop' },
|
|
351
|
+
{ value: 'done', label: 'Done for now', hint: 'drop to shell' },
|
|
352
|
+
];
|
|
353
|
+
let choice;
|
|
354
|
+
try {
|
|
355
|
+
choice = await select('what now?', nextOptions, { initial: 0 });
|
|
356
|
+
}
|
|
357
|
+
catch {
|
|
358
|
+
return; // esc / abort → just drop to shell
|
|
359
|
+
}
|
|
360
|
+
const hint = {
|
|
361
|
+
connect: 'noodle connect claude-code',
|
|
362
|
+
logs: 'noodle logs --tail',
|
|
363
|
+
dev: 'noodle dev',
|
|
364
|
+
done: '',
|
|
365
|
+
};
|
|
366
|
+
const command = hint[choice];
|
|
367
|
+
if (command)
|
|
368
|
+
out(`${paint(FAINT, gg('↳', '->'))} ${paint(DIM, command)}`);
|
|
369
|
+
}
|
|
370
|
+
// --- orchestrator ----------------------------------------------------------
|
|
371
|
+
export async function runStart(rest, env = process.env, home) {
|
|
372
|
+
const flags = parseFlags(rest);
|
|
373
|
+
const interactive = !flags.json && isInteractive();
|
|
374
|
+
const cwd = process.cwd();
|
|
375
|
+
// Resolve terminal capabilities once (truecolor / 256 / none; Unicode / ASCII).
|
|
376
|
+
JSON_MODE = flags.json;
|
|
377
|
+
COLOR = flags.json ? 'none' : detectColorMode(process.stdout);
|
|
378
|
+
GLYPH = detectGlyphMode();
|
|
379
|
+
const total = 3;
|
|
380
|
+
try {
|
|
381
|
+
if (interactive)
|
|
382
|
+
await orientation();
|
|
383
|
+
const state = await detectState(home, cwd);
|
|
384
|
+
const account = await stepAccount(flags, env, home, interactive, 1, total);
|
|
385
|
+
const { entrypoint, root } = await stepProject(flags, interactive, state, 2, total);
|
|
386
|
+
const result = await stepRun(flags, home, interactive, account, entrypoint, root, 3, total);
|
|
387
|
+
if (flags.json) {
|
|
388
|
+
process.stdout.write(`${JSON.stringify({
|
|
389
|
+
ok: result.ok,
|
|
390
|
+
account: { email: account.email ?? null },
|
|
391
|
+
entrypoint,
|
|
392
|
+
...(result.deploymentId ? { deploymentId: result.deploymentId } : {}),
|
|
393
|
+
...(result.url ? { url: result.url } : {}),
|
|
394
|
+
verified: result.verified ?? false,
|
|
395
|
+
...(result.error ? { error: result.error } : {}),
|
|
396
|
+
})}\n`);
|
|
397
|
+
return result.ok ? 0 : 1;
|
|
398
|
+
}
|
|
399
|
+
if (!result.ok)
|
|
400
|
+
return 1;
|
|
401
|
+
await whatNow(result, interactive);
|
|
402
|
+
out('');
|
|
403
|
+
out(paint(DIM, 'scriptable · no prompts, no ANSI: noodle start --json'));
|
|
404
|
+
return 0;
|
|
405
|
+
}
|
|
406
|
+
catch (err) {
|
|
407
|
+
if (err instanceof AbortPromptError) {
|
|
408
|
+
out(paint(DIM, '\nCancelled. Re-run `noodle start` any time — it resumes where you left off.'));
|
|
409
|
+
return 130;
|
|
410
|
+
}
|
|
411
|
+
if (err instanceof MissingAnswerError) {
|
|
412
|
+
if (flags.json) {
|
|
413
|
+
process.stderr.write(`${JSON.stringify({ ok: false, error: { code: 'missing_answer', key: err.key, message: err.message } })}\n`);
|
|
414
|
+
}
|
|
415
|
+
else {
|
|
416
|
+
printRecovery({
|
|
417
|
+
command: 'start',
|
|
418
|
+
cause: err.message,
|
|
419
|
+
fix: 'Supply the flag, or run interactively.',
|
|
420
|
+
next: 'noodle start --help',
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
return 2;
|
|
424
|
+
}
|
|
425
|
+
if (flags.json) {
|
|
426
|
+
process.stderr.write(`${JSON.stringify({ ok: false, error: { code: 'error', message: errorMessage(err) } })}\n`);
|
|
427
|
+
}
|
|
428
|
+
else {
|
|
429
|
+
printRecovery({
|
|
430
|
+
command: 'start',
|
|
431
|
+
cause: errorMessage(err),
|
|
432
|
+
fix: 'Resolve the error and retry.',
|
|
433
|
+
next: 'noodle doctor',
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
return 1;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
//# sourceMappingURL=first-run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"first-run.js","sourceRoot":"","sources":["../src/first-run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared warm brand gradient + ANSI control codes for the CLI's branded output
|
|
3
|
+
* (the `noodle init` splash and the progress `status` module). Keeping the palette
|
|
4
|
+
* in one place means the wordmark and the spinner read as the same Noodle Seed warmth.
|
|
5
|
+
*/
|
|
6
|
+
export type RGB = [number, number, number];
|
|
7
|
+
export declare const ORANGE: RGB;
|
|
8
|
+
export declare const AMBER: RGB;
|
|
9
|
+
export declare const ROSE: RGB;
|
|
10
|
+
export declare const RESET = "\u001B[0m";
|
|
11
|
+
export declare const HIDE_CURSOR = "\u001B[?25l";
|
|
12
|
+
export declare const SHOW_CURSOR = "\u001B[?25h";
|
|
13
|
+
export declare const CLEAR_EOL = "\u001B[K";
|
|
14
|
+
export declare const mix: (a: RGB, b: RGB, t: number) => RGB;
|
|
15
|
+
/** Move the cursor up `n` rows, for in-place redraws (e.g. the splash animation). */
|
|
16
|
+
export declare const cursorUp: (n: number) => string;
|
|
17
|
+
/** Truecolor foreground SGR for an RGB triple. */
|
|
18
|
+
export declare const fg: ([r, g, b]: RGB) => string;
|
|
19
|
+
/** Seamless cyclic warm palette over u in [0,1): orange -> amber -> rose -> amber -> orange. */
|
|
20
|
+
export declare function cyclic(u: number): RGB;
|
|
21
|
+
/** How much color the target stream/terminal can render. */
|
|
22
|
+
export type ColorMode = 'truecolor' | 'ansi256' | 'none';
|
|
23
|
+
/** Whether the terminal can be trusted to render the branded Unicode glyphs. */
|
|
24
|
+
export type GlyphMode = 'unicode' | 'ascii';
|
|
25
|
+
/** Nearest xterm-256 index for an RGB triple (6×6×6 color cube + grayscale ramp). */
|
|
26
|
+
export declare function rgbTo256([r, g, b]: RGB): number;
|
|
27
|
+
/** Foreground SGR for an RGB triple in the given color mode ('' when none). */
|
|
28
|
+
export declare function sgr(rgb: RGB, mode: ColorMode): string;
|
|
29
|
+
/** Wrap `s` in the RGB color for the mode (returns `s` unchanged when none). */
|
|
30
|
+
export declare function paint(rgb: RGB, s: string, mode: ColorMode): string;
|
|
31
|
+
/**
|
|
32
|
+
* Color mode for a stream: none (not a TTY / NO_COLOR / CI); truecolor when
|
|
33
|
+
* COLORTERM advertises 24-bit (iTerm2, VS Code, Windows Terminal, most Linux);
|
|
34
|
+
* else ansi256 — a 256-color fallback so macOS Terminal.app and bare xterm stay
|
|
35
|
+
* warm instead of rendering raw 24-bit sequences wrong.
|
|
36
|
+
*/
|
|
37
|
+
export declare function detectColorMode(stream: {
|
|
38
|
+
isTTY?: boolean;
|
|
39
|
+
}): ColorMode;
|
|
40
|
+
/**
|
|
41
|
+
* Unicode vs ASCII glyphs. Forced to ascii by `NOODLE_ASCII`; trusted for known-good
|
|
42
|
+
* terminals (VS Code, iTerm2, Terminal.app, Windows Terminal); otherwise gated on a
|
|
43
|
+
* UTF-8 locale so a `C`/minimal environment never renders tofu.
|
|
44
|
+
*/
|
|
45
|
+
export declare function detectGlyphMode(): GlyphMode;
|
|
46
|
+
//# sourceMappingURL=gradient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gradient.d.ts","sourceRoot":"","sources":["../src/gradient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE3C,eAAO,MAAM,MAAM,EAAE,GAAoB,CAAC;AAC1C,eAAO,MAAM,KAAK,EAAE,GAAoB,CAAC;AACzC,eAAO,MAAM,IAAI,EAAE,GAAmB,CAAC;AAEvC,eAAO,MAAM,KAAK,cAAc,CAAC;AACjC,eAAO,MAAM,WAAW,gBAAgB,CAAC;AACzC,eAAO,MAAM,WAAW,gBAAgB,CAAC;AACzC,eAAO,MAAM,SAAS,aAAa,CAAC;AAIpC,eAAO,MAAM,GAAG,GAAI,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,MAAM,KAAG,GAI/C,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,QAAQ,GAAI,GAAG,MAAM,KAAG,MAA4C,CAAC;AAElF,kDAAkD;AAClD,eAAO,MAAM,EAAE,GAAI,WAAW,GAAG,KAAG,MAAuC,CAAC;AAE5E,gGAAgG;AAChG,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAMrC;AAID,4DAA4D;AAC5D,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;AACzD,gFAAgF;AAChF,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAI5C,qFAAqF;AACrF,wBAAgB,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAQ/C;AAED,+EAA+E;AAC/E,wBAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CAIrD;AAED,gFAAgF;AAChF,wBAAgB,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CAElE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAOtE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,SAAS,CAa3C"}
|
package/dist/gradient.js
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
export const ORANGE = [249, 115, 22]; // #f97316
|
|
2
|
+
export const AMBER = [245, 158, 11]; // #f59e0b
|
|
3
|
+
export const ROSE = [244, 63, 94]; // #f43f5e
|
|
4
|
+
export const RESET = '\u001b[0m';
|
|
5
|
+
export const HIDE_CURSOR = '\u001b[?25l';
|
|
6
|
+
export const SHOW_CURSOR = '\u001b[?25h';
|
|
7
|
+
export const CLEAR_EOL = '\u001b[K';
|
|
8
|
+
const lerp = (a, b, t) => Math.round(a + (b - a) * t);
|
|
9
|
+
export const mix = (a, b, t) => [
|
|
10
|
+
lerp(a[0], b[0], t),
|
|
11
|
+
lerp(a[1], b[1], t),
|
|
12
|
+
lerp(a[2], b[2], t),
|
|
13
|
+
];
|
|
14
|
+
/** Move the cursor up `n` rows, for in-place redraws (e.g. the splash animation). */
|
|
15
|
+
export const cursorUp = (n) => `${String.fromCharCode(27)}[${n}A`;
|
|
16
|
+
/** Truecolor foreground SGR for an RGB triple. */
|
|
17
|
+
export const fg = ([r, g, b]) => `\u001b[38;2;${r};${g};${b}m`;
|
|
18
|
+
/** Seamless cyclic warm palette over u in [0,1): orange -> amber -> rose -> amber -> orange. */
|
|
19
|
+
export function cyclic(u) {
|
|
20
|
+
const p = ((u % 1) + 1) % 1;
|
|
21
|
+
if (p < 0.25)
|
|
22
|
+
return mix(ORANGE, AMBER, p / 0.25);
|
|
23
|
+
if (p < 0.5)
|
|
24
|
+
return mix(AMBER, ROSE, (p - 0.25) / 0.25);
|
|
25
|
+
if (p < 0.75)
|
|
26
|
+
return mix(ROSE, AMBER, (p - 0.5) / 0.25);
|
|
27
|
+
return mix(AMBER, ORANGE, (p - 0.75) / 0.25);
|
|
28
|
+
}
|
|
29
|
+
const ESC = String.fromCharCode(27);
|
|
30
|
+
/** Nearest xterm-256 index for an RGB triple (6×6×6 color cube + grayscale ramp). */
|
|
31
|
+
export function rgbTo256([r, g, b]) {
|
|
32
|
+
if (r === g && g === b) {
|
|
33
|
+
if (r < 8)
|
|
34
|
+
return 16;
|
|
35
|
+
if (r > 248)
|
|
36
|
+
return 231;
|
|
37
|
+
return 232 + Math.round(((r - 8) / 247) * 24);
|
|
38
|
+
}
|
|
39
|
+
const q = (v) => Math.round((v / 255) * 5);
|
|
40
|
+
return 16 + 36 * q(r) + 6 * q(g) + q(b);
|
|
41
|
+
}
|
|
42
|
+
/** Foreground SGR for an RGB triple in the given color mode ('' when none). */
|
|
43
|
+
export function sgr(rgb, mode) {
|
|
44
|
+
if (mode === 'none')
|
|
45
|
+
return '';
|
|
46
|
+
if (mode === 'ansi256')
|
|
47
|
+
return `${ESC}[38;5;${rgbTo256(rgb)}m`;
|
|
48
|
+
return `${ESC}[38;2;${rgb[0]};${rgb[1]};${rgb[2]}m`;
|
|
49
|
+
}
|
|
50
|
+
/** Wrap `s` in the RGB color for the mode (returns `s` unchanged when none). */
|
|
51
|
+
export function paint(rgb, s, mode) {
|
|
52
|
+
return mode === 'none' ? s : `${sgr(rgb, mode)}${s}${RESET}`;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Color mode for a stream: none (not a TTY / NO_COLOR / CI); truecolor when
|
|
56
|
+
* COLORTERM advertises 24-bit (iTerm2, VS Code, Windows Terminal, most Linux);
|
|
57
|
+
* else ansi256 — a 256-color fallback so macOS Terminal.app and bare xterm stay
|
|
58
|
+
* warm instead of rendering raw 24-bit sequences wrong.
|
|
59
|
+
*/
|
|
60
|
+
export function detectColorMode(stream) {
|
|
61
|
+
if (stream.isTTY !== true || process.env.NO_COLOR !== undefined || process.env.CI !== undefined) {
|
|
62
|
+
return 'none';
|
|
63
|
+
}
|
|
64
|
+
const ct = process.env.COLORTERM;
|
|
65
|
+
if (ct === 'truecolor' || ct === '24bit')
|
|
66
|
+
return 'truecolor';
|
|
67
|
+
return 'ansi256';
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Unicode vs ASCII glyphs. Forced to ascii by `NOODLE_ASCII`; trusted for known-good
|
|
71
|
+
* terminals (VS Code, iTerm2, Terminal.app, Windows Terminal); otherwise gated on a
|
|
72
|
+
* UTF-8 locale so a `C`/minimal environment never renders tofu.
|
|
73
|
+
*/
|
|
74
|
+
export function detectGlyphMode() {
|
|
75
|
+
if (process.env.NOODLE_ASCII !== undefined)
|
|
76
|
+
return 'ascii';
|
|
77
|
+
const program = process.env.TERM_PROGRAM;
|
|
78
|
+
if (process.env.WT_SESSION !== undefined ||
|
|
79
|
+
program === 'vscode' ||
|
|
80
|
+
program === 'iTerm.app' ||
|
|
81
|
+
program === 'Apple_Terminal') {
|
|
82
|
+
return 'unicode';
|
|
83
|
+
}
|
|
84
|
+
const locale = process.env.LC_ALL ?? process.env.LC_CTYPE ?? process.env.LANG ?? '';
|
|
85
|
+
return /utf-?8/i.test(locale) ? 'unicode' : 'ascii';
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=gradient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gradient.js","sourceRoot":"","sources":["../src/gradient.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,MAAM,GAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;AACrD,MAAM,CAAC,MAAM,KAAK,GAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;AACpD,MAAM,CAAC,MAAM,IAAI,GAAQ,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;AAElD,MAAM,CAAC,MAAM,KAAK,GAAG,WAAW,CAAC;AACjC,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;AACzC,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;AACzC,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC;AAEpC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAEtF,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAM,EAAE,CAAM,EAAE,CAAS,EAAO,EAAE,CAAC;IACrD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACnB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACnB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;CACpB,CAAC;AAEF,qFAAqF;AACrF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;AAElF,kDAAkD;AAClD,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAM,EAAU,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAE5E,gGAAgG;AAChG,MAAM,UAAU,MAAM,CAAC,CAAS;IAC9B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAClD,IAAI,CAAC,GAAG,GAAG;QAAE,OAAO,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACxD,IAAI,CAAC,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACxD,OAAO,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAC/C,CAAC;AASD,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AAEpC,qFAAqF;AACrF,MAAM,UAAU,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAM;IACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QACrB,IAAI,CAAC,GAAG,GAAG;YAAE,OAAO,GAAG,CAAC;QACxB,OAAO,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,CAAC,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,GAAG,CAAC,GAAQ,EAAE,IAAe;IAC3C,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC;IAC/B,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,GAAG,GAAG,SAAS,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;IAC/D,OAAO,GAAG,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AACtD,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,KAAK,CAAC,GAAQ,EAAE,CAAS,EAAE,IAAe;IACxD,OAAO,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC;AAC/D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,MAA2B;IACzD,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAChG,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IACjC,IAAI,EAAE,KAAK,WAAW,IAAI,EAAE,KAAK,OAAO;QAAE,OAAO,WAAW,CAAC;IAC7D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe;IAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IAC3D,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IACzC,IACE,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,SAAS;QACpC,OAAO,KAAK,QAAQ;QACpB,OAAO,KAAK,WAAW;QACvB,OAAO,KAAK,gBAAgB,EAC5B,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IACpF,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;AACtD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi-import.d.ts","sourceRoot":"","sources":["../src/openapi-import.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"openapi-import.d.ts","sourceRoot":"","sources":["../src/openapi-import.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,GAAG;IACnE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC,CAuBA"}
|