@noodleseed/one 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/banner.d.ts +11 -0
  2. package/dist/banner.d.ts.map +1 -0
  3. package/dist/banner.js +183 -0
  4. package/dist/banner.js.map +1 -0
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cli.js +8 -1
  7. package/dist/cli.js.map +1 -1
  8. package/dist/commands/connect-oauth.d.ts +26 -0
  9. package/dist/commands/connect-oauth.d.ts.map +1 -0
  10. package/dist/commands/connect-oauth.js +160 -0
  11. package/dist/commands/connect-oauth.js.map +1 -0
  12. package/dist/commands/connect.d.ts +3 -0
  13. package/dist/commands/connect.d.ts.map +1 -0
  14. package/dist/commands/connect.js +180 -0
  15. package/dist/commands/connect.js.map +1 -0
  16. package/dist/commands/deploy-ops.d.ts.map +1 -1
  17. package/dist/commands/deploy-ops.js +24 -1
  18. package/dist/commands/deploy-ops.js.map +1 -1
  19. package/dist/commands/project-setup.d.ts +1 -3
  20. package/dist/commands/project-setup.d.ts.map +1 -1
  21. package/dist/commands/project-setup.js +7 -109
  22. package/dist/commands/project-setup.js.map +1 -1
  23. package/dist/commands/shared.d.ts.map +1 -1
  24. package/dist/commands/shared.js +4 -1
  25. package/dist/commands/shared.js.map +1 -1
  26. package/dist/dev.d.ts.map +1 -1
  27. package/dist/dev.js +9 -1
  28. package/dist/dev.js.map +1 -1
  29. package/dist/first-run-entry.d.ts +2 -0
  30. package/dist/first-run-entry.d.ts.map +1 -0
  31. package/dist/first-run-entry.js +36 -0
  32. package/dist/first-run-entry.js.map +1 -0
  33. package/dist/first-run.d.ts +26 -0
  34. package/dist/first-run.d.ts.map +1 -0
  35. package/dist/first-run.js +439 -0
  36. package/dist/first-run.js.map +1 -0
  37. package/dist/gradient.d.ts +46 -0
  38. package/dist/gradient.d.ts.map +1 -0
  39. package/dist/gradient.js +87 -0
  40. package/dist/gradient.js.map +1 -0
  41. package/dist/openapi-import.d.ts.map +1 -1
  42. package/dist/openapi-import.js +47 -8
  43. package/dist/openapi-import.js.map +1 -1
  44. package/dist/prompts.d.ts +61 -0
  45. package/dist/prompts.d.ts.map +1 -0
  46. package/dist/prompts.js +209 -0
  47. package/dist/prompts.js.map +1 -0
  48. package/dist/status.d.ts +58 -0
  49. package/dist/status.d.ts.map +1 -0
  50. package/dist/status.js +106 -0
  51. package/dist/status.js.map +1 -0
  52. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.d.ts.map +1 -1
  53. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js +4 -0
  54. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js.map +1 -1
  55. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts.map +1 -1
  56. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +1 -0
  57. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
  58. package/node_modules/@noodle-borg/openapi-import/dist/index.d.ts +4 -0
  59. package/node_modules/@noodle-borg/openapi-import/dist/index.d.ts.map +1 -1
  60. package/node_modules/@noodle-borg/openapi-import/dist/index.js +27 -1
  61. package/node_modules/@noodle-borg/openapi-import/dist/index.js.map +1 -1
  62. package/node_modules/@noodle-borg/openapi-import/dist/response-schema.d.ts +50 -0
  63. package/node_modules/@noodle-borg/openapi-import/dist/response-schema.d.ts.map +1 -0
  64. package/node_modules/@noodle-borg/openapi-import/dist/response-schema.js +227 -0
  65. package/node_modules/@noodle-borg/openapi-import/dist/response-schema.js.map +1 -0
  66. package/package.json +2 -2
@@ -26,6 +26,8 @@ export function usage(write = console.error) {
26
26
  write([
27
27
  'usage: noodle <command>',
28
28
  '',
29
+ ' start [--deploy|--local] [--name <slug>] [--template <t>] [--org <slug>] [--json]',
30
+ ' guided first-run: sign in, scaffold, then deploy or run locally',
29
31
  ' init [dir] [--template hello|http-api|widget] [--name <slug>] [--force]',
30
32
  ' [--agents codex|claude-code|all|none] [--no-agents]',
31
33
  ' create a local Noodle project',
@@ -42,7 +44,8 @@ export function usage(write = console.error) {
42
44
  ' agents context compatibility alias for agents setup',
43
45
  ' auth doctor [server.ts] [--json] diagnose customerAuth.oidc/bridge readiness',
44
46
  ' docs export --format llms [--output <file>]',
45
- ' connect claude-code|codex|gemini|cursor|vscode|claude|chatgpt|inspector [--json]',
47
+ ' connect claude-code|codex|gemini|gemini-enterprise|cursor|vscode|claude|chatgpt|inspector',
48
+ ' [--endpoint <url>] [--name <label>] [--json]',
46
49
  ' import openapi <file> [--output <dir>] [--name <slug>] [--base-url <url>] [--force]',
47
50
  ' validate [server.ts] [--connectors <f>] [--json] [--fix-prompt]',
48
51
  ' author-time check (schema, expressions, connector refs); no service',
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"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"}
package/dist/dev.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../src/dev.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,wFAAwF;IACxF,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,4GAA4G;IAC5G,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,8CAA8C;IAC9C,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,oDAAoD;IACpD,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,mFAAmF;IACnF,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;QAC9B,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,SAAS;IACxB,gDAAgD;IAChD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,yCAAyC;IACzC,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;IACnC,uEAAuE;IACvE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AA4CD,2FAA2F;AAC3F,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,CAAA;CAAE,CAAC,CAetF;AAED;;;;;GAKG;AACH,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAqKjE"}
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../src/dev.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,wFAAwF;IACxF,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,4GAA4G;IAC5G,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,8CAA8C;IAC9C,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,oDAAoD;IACpD,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,mFAAmF;IACnF,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;QAC9B,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,SAAS;IACxB,gDAAgD;IAChD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,yCAAyC;IACzC,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;IACnC,uEAAuE;IACvE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AA4CD,2FAA2F;AAC3F,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,CAAA;CAAE,CAAC,CAetF;AAED;;;;;GAKG;AACH,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CA4KjE"}
package/dist/dev.js CHANGED
@@ -4,6 +4,7 @@ import { createInterface } from 'node:readline';
4
4
  import { serveService } from '@noodle-borg/service';
5
5
  import { readDeployInput } from './deploy.js';
6
6
  import { createLocalConfigStore } from './local-config.js';
7
+ import { startSpinner } from './status.js';
7
8
  const PROTOCOL = '2025-11-25';
8
9
  const ACCEPT = 'application/json, text/event-stream';
9
10
  /** A default app slug that prefers the containing directory when the file is a generic `manifest`/`server`. */
@@ -74,6 +75,10 @@ export async function dev(options) {
74
75
  const app = slug(options.app ?? defaultApp(options.manifestPath));
75
76
  const env = slug(options.env ?? 'dev');
76
77
  const configStore = createLocalConfigStore(process.cwd());
78
+ // Branded boot spinner — only for the default stdout sink on an interactive TTY (injected-log callers unaffected).
79
+ const bootStatus = options.log === undefined && process.stdout.isTTY === true
80
+ ? startSpinner('Starting dev server…')
81
+ : undefined;
77
82
  const service = await serveService({
78
83
  host: '127.0.0.1',
79
84
  port: options.port ?? 0,
@@ -122,7 +127,10 @@ export async function dev(options) {
122
127
  }
123
128
  // Initial deploy.
124
129
  const first = await deployOnce();
125
- log(`Noodle dev server listening at ${service.url}`);
130
+ if (bootStatus)
131
+ bootStatus.succeed(`Noodle dev server listening at ${service.url}`);
132
+ else
133
+ log(`Noodle dev server listening at ${service.url}`);
126
134
  log(`MCP endpoint: ${url}`);
127
135
  if (first.ok) {
128
136
  log(`Tools: ${(first.toolNames ?? []).join(', ') || '(none)'}`);
package/dist/dev.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"dev.js","sourceRoot":"","sources":["../src/dev.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../src/dev.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function offerFirstRun(env: NodeJS.ProcessEnv, home: string): Promise<number>;
2
+ //# sourceMappingURL=first-run-entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"first-run-entry.d.ts","sourceRoot":"","sources":["../src/first-run-entry.ts"],"names":[],"mappings":"AAcA,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBzF"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Bare-`noodle` first-run detection, kept out of the dispatch-only `cli.ts`.
3
+ *
4
+ * On an interactive TTY for a genuine first-run (no saved account and no project in
5
+ * this directory), offer the guided `noodle start` walkthrough. Everything else —
6
+ * pipes, CI, agents, a configured user, or an existing project — gets plain usage.
7
+ * The wizard is never forced on a non-interactive caller.
8
+ */
9
+ import { usage } from './commands/shared.js';
10
+ import { readConfig } from './config.js';
11
+ import { runStart } from './first-run.js';
12
+ import { resolveLocalEntrypoint } from './project.js';
13
+ import { confirm, isInteractive } from './prompts.js';
14
+ export async function offerFirstRun(env, home) {
15
+ const config = readConfig(home);
16
+ const configured = config.identity !== undefined || config.authToken !== undefined;
17
+ const hasProject = resolveLocalEntrypoint(process.cwd()) !== undefined;
18
+ if (isInteractive() && !configured && !hasProject) {
19
+ let wants = false;
20
+ try {
21
+ wants = await confirm('New here? Set up your first server with a guided walkthrough?', {
22
+ initial: true,
23
+ });
24
+ }
25
+ catch {
26
+ wants = false; // Esc/Ctrl+C on the offer → just show usage
27
+ }
28
+ if (wants)
29
+ return runStart([], env, home);
30
+ usage(console.log);
31
+ return 0;
32
+ }
33
+ usage();
34
+ return 1;
35
+ }
36
+ //# sourceMappingURL=first-run-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"first-run-entry.js","sourceRoot":"","sources":["../src/first-run-entry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAsB,EAAE,IAAY;IACtE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC;IACnF,MAAM,UAAU,GAAG,sBAAsB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC;IAEvE,IAAI,aAAa,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,EAAE,CAAC;QAClD,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,OAAO,CAAC,+DAA+D,EAAE;gBACrF,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,KAAK,GAAG,KAAK,CAAC,CAAC,4CAA4C;QAC7D,CAAC;QACD,IAAI,KAAK;YAAE,OAAO,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC1C,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,KAAK,EAAE,CAAC;IACR,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,26 @@
1
+ export interface StartFlags {
2
+ json: boolean;
3
+ name?: string | undefined;
4
+ template?: string | undefined;
5
+ where?: 'deploy' | 'local' | undefined;
6
+ org?: string | undefined;
7
+ app?: string | undefined;
8
+ env?: string | undefined;
9
+ access?: string | undefined;
10
+ yes: boolean;
11
+ serviceFlag?: string | undefined;
12
+ authFlag?: string | undefined;
13
+ }
14
+ export declare function parseFlags(rest: readonly string[]): StartFlags;
15
+ export interface StartResult {
16
+ ok: boolean;
17
+ deploymentId?: string;
18
+ url?: string;
19
+ verified?: boolean;
20
+ error?: {
21
+ message: string;
22
+ next?: string;
23
+ };
24
+ }
25
+ export declare function runStart(rest: readonly string[], env: NodeJS.ProcessEnv | undefined, home: string): Promise<number>;
26
+ //# sourceMappingURL=first-run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"first-run.d.ts","sourceRoot":"","sources":["../src/first-run.ts"],"names":[],"mappings":"AA0DA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;IACvC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,GAAG,EAAE,OAAO,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAYD,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAkB9D;AAgLD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5C;AAkPD,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,CAAC,UAAU,YAAc,EACpC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CA0EjB"}
@@ -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