@goah/cli 0.8.0 → 0.9.1

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 (46) hide show
  1. package/dist/cli.js +13 -75
  2. package/dist/cli.js.map +1 -1
  3. package/dist/control.d.ts +13 -2
  4. package/dist/control.d.ts.map +1 -1
  5. package/dist/control.js +18 -7
  6. package/dist/control.js.map +1 -1
  7. package/dist/index.d.ts +1 -3
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +8 -25
  10. package/dist/index.js.map +1 -1
  11. package/dist/live-config.d.ts +12 -0
  12. package/dist/live-config.d.ts.map +1 -0
  13. package/dist/live-config.js +33 -0
  14. package/dist/live-config.js.map +1 -0
  15. package/dist/prompt-queue.d.ts +13 -0
  16. package/dist/prompt-queue.d.ts.map +1 -0
  17. package/dist/prompt-queue.js +30 -0
  18. package/dist/prompt-queue.js.map +1 -0
  19. package/dist/setup-wizard.d.ts +10 -0
  20. package/dist/setup-wizard.d.ts.map +1 -0
  21. package/dist/setup-wizard.js +162 -0
  22. package/dist/setup-wizard.js.map +1 -0
  23. package/dist/tui.d.ts.map +1 -1
  24. package/dist/tui.js +40 -6
  25. package/dist/tui.js.map +1 -1
  26. package/dist/welcome.d.ts +24 -0
  27. package/dist/welcome.d.ts.map +1 -0
  28. package/dist/welcome.js +63 -0
  29. package/dist/welcome.js.map +1 -0
  30. package/node_modules/goah-runner-pi/dist/env-spec.d.ts +16 -0
  31. package/node_modules/goah-runner-pi/dist/env-spec.d.ts.map +1 -0
  32. package/node_modules/goah-runner-pi/dist/env-spec.js +87 -0
  33. package/node_modules/goah-runner-pi/dist/env-spec.js.map +1 -0
  34. package/node_modules/goah-runner-pi/dist/index.d.ts +3 -0
  35. package/node_modules/goah-runner-pi/dist/index.d.ts.map +1 -1
  36. package/node_modules/goah-runner-pi/dist/index.js +4 -2
  37. package/node_modules/goah-runner-pi/dist/index.js.map +1 -1
  38. package/node_modules/goah-runner-pi/dist/test-helpers.d.ts +4 -0
  39. package/node_modules/goah-runner-pi/dist/test-helpers.d.ts.map +1 -0
  40. package/node_modules/goah-runner-pi/dist/test-helpers.js +10 -0
  41. package/node_modules/goah-runner-pi/dist/test-helpers.js.map +1 -0
  42. package/node_modules/goah-supervisor/dist/index.d.ts +8 -1
  43. package/node_modules/goah-supervisor/dist/index.d.ts.map +1 -1
  44. package/node_modules/goah-supervisor/dist/index.js +15 -2
  45. package/node_modules/goah-supervisor/dist/index.js.map +1 -1
  46. package/package.json +1 -1
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Live config mutation: edit goah.config.json in place, then ask the resident
3
+ * daemon to reload (config.reload swaps the runner; spawn-time env resolution
4
+ * applies new values to the next wake).
5
+ */
6
+ import { readFileSync, writeFileSync } from "node:fs";
7
+ import { resolve } from "node:path";
8
+ import { requestControl } from "./control.js";
9
+ export function readRunnerEnv(configPath) {
10
+ const config = JSON.parse(readFileSync(resolve(configPath), "utf8"));
11
+ return config.runner?.env ?? {};
12
+ }
13
+ function writeRunnerEnv(configPath, env) {
14
+ const config = JSON.parse(readFileSync(resolve(configPath), "utf8"));
15
+ config.runner.env = env;
16
+ writeFileSync(resolve(configPath), `${JSON.stringify(config, null, 2)}\n`);
17
+ }
18
+ /** Switch the model for this workspace and reload the daemon. Returns the reload outcome. */
19
+ export async function switchModel(configPath, stateDir, model) {
20
+ const env = readRunnerEnv(configPath);
21
+ if (!model.trim())
22
+ throw new Error("model id is required");
23
+ writeRunnerEnv(configPath, { ...env, GOAH_PI_MODEL: model.trim() });
24
+ const outcome = await requestControl(stateDir, { op: "config.reload", configPath: resolve(configPath) }).catch((error) => ({ reloaded: false, error: error instanceof Error ? error.message : String(error) }));
25
+ const reloaded = Boolean(outcome.reloaded);
26
+ return reloaded ? `model switched to ${model.trim()} — applies to the next wake` : `model written to ${resolve(configPath)}; daemon reload failed (${String(outcome.error ?? "daemon not running")}), it will pick up on next start`;
27
+ }
28
+ /** Reload the daemon config after an external edit (e.g. the setup wizard rewrote it). */
29
+ export async function reloadDaemon(stateDir, configPath) {
30
+ const outcome = await requestControl(stateDir, { op: "config.reload", configPath: resolve(configPath) }).catch(() => null);
31
+ return Boolean(outcome?.reloaded);
32
+ }
33
+ //# sourceMappingURL=live-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-config.js","sourceRoot":"","sources":["../src/live-config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAI9C,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAqC,CAAC;IACzG,OAAO,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,cAAc,CAAC,UAAkB,EAAE,GAAc;IACxD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAoC,CAAC;IACxG,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;IACxB,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAC7E,CAAC;AAED,6FAA6F;AAC7F,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,UAAkB,EAAE,QAAgB,EAAE,KAAa;IACnF,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IACtC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC3D,cAAc,CAAC,UAAU,EAAE,EAAE,GAAG,GAAG,EAAE,aAAa,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACzN,MAAM,QAAQ,GAAG,OAAO,CAAE,OAAkC,CAAC,QAAQ,CAAC,CAAC;IACvE,OAAO,QAAQ,CAAC,CAAC,CAAC,qBAAqB,KAAK,CAAC,IAAI,EAAE,6BAA6B,CAAC,CAAC,CAAC,oBAAoB,OAAO,CAAC,UAAU,CAAC,2BAA2B,MAAM,CAAE,OAA8B,CAAC,KAAK,IAAI,oBAAoB,CAAC,kCAAkC,CAAC;AAC/P,CAAC;AAED,0FAA0F;AAC1F,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB,EAAE,UAAkB;IACrE,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAC3H,OAAO,OAAO,CAAE,OAAyC,EAAE,QAAQ,CAAC,CAAC;AACvE,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { type Interface as ReadlineInterface } from "node:readline";
2
+ /**
3
+ * Prompt queue over readline 'line' events. readline/promises `question()` loses lines that arrive
4
+ * between awaits under piped input (same-tick chunks race the next listener registration), so
5
+ * onboarding buffers lines itself.
6
+ */
7
+ export declare function lineQueue(input: ReadlineInterface): ((prompt: string) => Promise<string>) & {
8
+ close(): void;
9
+ };
10
+ export declare function stdioQueue(): ((prompt: string) => Promise<string>) & {
11
+ close(): void;
12
+ };
13
+ //# sourceMappingURL=prompt-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-queue.d.ts","sourceRoot":"","sources":["../src/prompt-queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,SAAS,IAAI,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAErF;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,iBAAiB,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG;IAAE,KAAK,IAAI,IAAI,CAAA;CAAE,CAc7G;AAED,wBAAgB,UAAU,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG;IAAE,KAAK,IAAI,IAAI,CAAA;CAAE,CAEtF"}
@@ -0,0 +1,30 @@
1
+ import { createInterface } from "node:readline";
2
+ /**
3
+ * Prompt queue over readline 'line' events. readline/promises `question()` loses lines that arrive
4
+ * between awaits under piped input (same-tick chunks race the next listener registration), so
5
+ * onboarding buffers lines itself.
6
+ */
7
+ export function lineQueue(input) {
8
+ const buffered = [];
9
+ const waiters = [];
10
+ input.on("line", (line) => { const waiter = waiters.shift(); if (waiter)
11
+ waiter(line);
12
+ else
13
+ buffered.push(line); });
14
+ const ask = (prompt) => {
15
+ input.setPrompt(prompt);
16
+ input.prompt();
17
+ const { promise, resolve } = Promise.withResolvers();
18
+ const bufferedLine = buffered.shift();
19
+ if (bufferedLine !== undefined)
20
+ resolve(bufferedLine);
21
+ else
22
+ waiters.push(resolve);
23
+ return promise;
24
+ };
25
+ return Object.assign(ask, { close: () => input.close() });
26
+ }
27
+ export function stdioQueue() {
28
+ return lineQueue(createInterface({ input: process.stdin, output: process.stdout, terminal: false }));
29
+ }
30
+ //# sourceMappingURL=prompt-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-queue.js","sourceRoot":"","sources":["../src/prompt-queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAuC,MAAM,eAAe,CAAC;AAErF;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,KAAwB;IAChD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAkC,EAAE,CAAC;IAClD,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,GAAG,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,MAAM;QAAE,MAAM,CAAC,IAAI,CAAC,CAAC;;QAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5H,MAAM,GAAG,GAAG,CAAC,MAAc,EAAmB,EAAE;QAC9C,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACxB,KAAK,CAAC,MAAM,EAAE,CAAC;QACf,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,aAAa,EAAU,CAAC;QAC7D,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtC,IAAI,YAAY,KAAK,SAAS;YAAE,OAAO,CAAC,YAAY,CAAC,CAAC;;YACjD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,SAAS,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACvG,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { type InitOptions } from "./index.js";
2
+ interface WizardResult {
3
+ options: InitOptions;
4
+ }
5
+ /** Interactive or piped setup wizard. Returns the options that were chosen. */
6
+ export declare function runSetupWizard(): Promise<WizardResult>;
7
+ /** Persist the wizard result and (optionally) materialize this directory's workspace config. */
8
+ export declare function applyWizardResult(result: WizardResult, configPath: string | null): void;
9
+ export {};
10
+ //# sourceMappingURL=setup-wizard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-wizard.d.ts","sourceRoot":"","sources":["../src/setup-wizard.ts"],"names":[],"mappings":"AASA,OAAO,EAA2C,KAAK,WAAW,EAAmB,MAAM,YAAY,CAAC;AAGxG,UAAU,YAAY;IAAG,OAAO,EAAE,WAAW,CAAA;CAAE;AAuB/C,+EAA+E;AAC/E,wBAAsB,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC,CAsF5D;AA4BD,gGAAgG;AAChG,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAIvF"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * `goah setup` — interactive TUI wizard.
3
+ *
4
+ * Scenes render with pi-tui components on one screen: a persistent header and
5
+ * a swap slot that alternates between SelectList (arrow-key selection,
6
+ * omp/pi-style) and Input (free text). Non-TTY invocations fall back to the
7
+ * piped line-queue prompt so onboarding also works over pipes and in CI.
8
+ */
9
+ import { TUI, Text, Input, SelectList, ProcessTerminal } from "@mariozechner/pi-tui";
10
+ import { writeDefaultProfile, writeDefaultConfig } from "./index.js";
11
+ import { stdioQueue } from "./prompt-queue.js";
12
+ const PROVIDERS = [
13
+ { value: "anthropic", label: "anthropic", description: "Claude models via ANTHROPIC_API_KEY" },
14
+ { value: "openai", label: "openai", description: "OpenAI models via OPENAI_API_KEY" },
15
+ { value: "ark-coding", label: "ark-coding", description: "Volcano Ark coding plans (explicit context/output limits)" },
16
+ { value: "faux", label: "faux", description: "Offline simulated runner for smoke tests" },
17
+ ];
18
+ const KNOWN_MODELS = {
19
+ anthropic: ["claude-sonnet-4-6", "claude-opus-4-6", "claude-haiku-4-5"],
20
+ };
21
+ const CUSTOM = "__custom__";
22
+ const listTheme = {
23
+ selectedPrefix: (text) => `\x1b[36m❯\x1b[0m ${text}`,
24
+ selectedText: (text) => `\x1b[1m${text}\x1b[22m`,
25
+ description: (text) => `\x1b[2m${text}\x1b[22m`,
26
+ scrollInfo: (text) => `\x1b[2m${text}\x1b[22m`,
27
+ noMatch: (text) => `\x1b[2m${text}\x1b[22m`,
28
+ };
29
+ /** Interactive or piped setup wizard. Returns the options that were chosen. */
30
+ export async function runSetupWizard() {
31
+ if (!process.stdin.isTTY || !process.stdout.isTTY)
32
+ return runPipedWizard();
33
+ const tui = new TUI(new ProcessTerminal());
34
+ const header = new Text("");
35
+ let slot = null;
36
+ const { promise: done, resolve: resolveDone } = Promise.withResolvers();
37
+ const setHeader = (title, subtitle) => {
38
+ header.setText(["", `\x1b[1m Goah setup — ${title}\x1b[22m`, `\x1b[2m ${subtitle}\x1b[22m`, ""].join("\n"));
39
+ };
40
+ const setSlot = (component) => {
41
+ if (slot)
42
+ tui.removeChild(slot);
43
+ slot = component;
44
+ tui.addChild(component);
45
+ tui.setFocus(component);
46
+ tui.requestRender();
47
+ };
48
+ /** Arrow-key selection; resolves the chosen value, or null when cancelled. */
49
+ const pick = (title, subtitle, items) => {
50
+ setHeader(title, subtitle);
51
+ const list = new SelectList(items, 8, listTheme);
52
+ const { promise, resolve } = Promise.withResolvers();
53
+ list.onSelect = (item) => resolve(item.value);
54
+ list.onCancel = () => resolve(null);
55
+ setSlot(list);
56
+ return promise;
57
+ };
58
+ /** Free-text entry on one Input line. */
59
+ const askText = (title, subtitle, prompt) => {
60
+ setHeader(title, subtitle);
61
+ const input = new Input();
62
+ const { promise, resolve } = Promise.withResolvers();
63
+ let answerLine = resolve;
64
+ input.onSubmit = (line) => { input.setValue(""); const deliver = answerLine; answerLine = null; deliver?.(line.trim()); };
65
+ setSlot(input);
66
+ process.stdout.write(`${prompt} `);
67
+ return promise;
68
+ };
69
+ tui.addChild(header);
70
+ void (async () => {
71
+ let options = {};
72
+ try {
73
+ const providerValue = await pick("Provider", "↑/↓ to move, Enter to select, Esc to cancel", PROVIDERS.map((entry) => ({ value: entry.value, label: entry.label, description: entry.description })));
74
+ if (!providerValue) {
75
+ resolveDone({ options });
76
+ return;
77
+ }
78
+ const provider = providerValue;
79
+ options = { provider };
80
+ const known = KNOWN_MODELS[provider] ?? [];
81
+ let model = "";
82
+ if (known.length > 0) {
83
+ const modelValue = await pick("Model", `Provider: ${provider}`, [...known.map((id) => ({ value: id, label: id })), { value: CUSTOM, label: "custom…", description: "type the model id yourself" }]);
84
+ if (!modelValue) {
85
+ resolveDone({ options });
86
+ return;
87
+ }
88
+ model = modelValue === CUSTOM ? await askText("Model", `Provider: ${provider}`, "model id:") : modelValue;
89
+ }
90
+ else {
91
+ model = await askText("Model", `Provider: ${provider}`, "model id:");
92
+ }
93
+ if (!model) {
94
+ resolveDone({ options });
95
+ return;
96
+ }
97
+ options = { ...options, model };
98
+ if (provider !== "faux") {
99
+ const destination = provider === "anthropic" ? "ANTHROPIC_API_KEY" : provider === "openai" ? "OPENAI_API_KEY" : "ARK_API_KEY";
100
+ const apiKeyEnv = await askText("API key", "Goah stores the variable NAME only — never the secret", `env var holding the key (Enter = ${destination}):`);
101
+ options = { ...options, apiKeyEnv: apiKeyEnv && /^[A-Z_][A-Z0-9_]*$/.test(apiKeyEnv) ? apiKeyEnv : destination };
102
+ }
103
+ if (provider === "ark-coding") {
104
+ const contextWindowTokens = Number(await askText("Context window", "Ark's model-list API does not publish limits; enter the published value", "context window tokens (e.g. 256000):"));
105
+ const maxOutputTokensPerTurn = Number(await askText("Max output", "per-turn output cap", "max output tokens per turn (e.g. 32000):"));
106
+ if (!Number.isInteger(contextWindowTokens) || contextWindowTokens <= 0 || !Number.isInteger(maxOutputTokensPerTurn) || maxOutputTokensPerTurn <= 0)
107
+ throw new Error("ark-coding requires integer context-window and max-output tokens");
108
+ options = { ...options, contextWindowTokens, maxOutputTokensPerTurn };
109
+ }
110
+ const summary = ["", ` provider ${options.provider}`, ` model ${options.model}`, ...(options.apiKeyEnv ? [` key env ${options.apiKeyEnv}`] : []), ...(options.contextWindowTokens ? [` context ${options.contextWindowTokens}`, ` output ${options.maxOutputTokensPerTurn}`] : [])].join("\n");
111
+ const confirmation = await pick("Confirm", `${summary}`, [{ value: "save", label: "Save profile" }, { value: "cancel", label: "Cancel" }]);
112
+ if (confirmation !== "save")
113
+ options = {};
114
+ }
115
+ catch (error) {
116
+ setHeader("Error", error instanceof Error ? error.message : String(error));
117
+ }
118
+ resolveDone({ options });
119
+ })();
120
+ tui.start();
121
+ const result = await done;
122
+ tui.stop();
123
+ return result;
124
+ }
125
+ /** Non-TTY fallback: sequential numbered prompts through the shared line queue. */
126
+ async function runPipedWizard() {
127
+ const ask = stdioQueue();
128
+ try {
129
+ const providerIndex = await ask(`${PROVIDERS.map((entry, index) => `${index + 1}) ${entry.label}`).join(" ")} — pick 1-${PROVIDERS.length}: `);
130
+ const provider = PROVIDERS[Math.max(0, Math.min(PROVIDERS.length - 1, Number(providerIndex) - 1))].value;
131
+ const model = await ask("model id: ");
132
+ if (!model)
133
+ return { options: {} };
134
+ const options = { provider, model };
135
+ if (provider !== "faux") {
136
+ const destination = provider === "anthropic" ? "ANTHROPIC_API_KEY" : provider === "openai" ? "OPENAI_API_KEY" : "ARK_API_KEY";
137
+ const apiKeyEnv = await ask(`API key environment variable (default ${destination}): `);
138
+ options.apiKeyEnv = apiKeyEnv && /^[A-Z_][A-Z0-9_]*$/.test(apiKeyEnv) ? apiKeyEnv : destination;
139
+ }
140
+ if (provider === "ark-coding") {
141
+ const contextWindowTokens = Number(await ask("context window tokens: "));
142
+ const maxOutputTokensPerTurn = Number(await ask("max output tokens per turn: "));
143
+ if (Number.isInteger(contextWindowTokens) && contextWindowTokens > 0 && Number.isInteger(maxOutputTokensPerTurn) && maxOutputTokensPerTurn > 0) {
144
+ options.contextWindowTokens = contextWindowTokens;
145
+ options.maxOutputTokensPerTurn = maxOutputTokensPerTurn;
146
+ }
147
+ }
148
+ return { options };
149
+ }
150
+ finally {
151
+ ask.close();
152
+ }
153
+ }
154
+ /** Persist the wizard result and (optionally) materialize this directory's workspace config. */
155
+ export function applyWizardResult(result, configPath) {
156
+ if (!result.options.provider)
157
+ throw new Error("setup was cancelled; no profile written");
158
+ writeDefaultProfile(result.options);
159
+ if (configPath)
160
+ writeDefaultConfig(configPath, result.options);
161
+ }
162
+ //# sourceMappingURL=setup-wizard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-wizard.js","sourceRoot":"","sources":["../src/setup-wizard.ts"],"names":[],"mappings":"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"}
package/dist/tui.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"AAQA,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAgDnH"}
1
+ {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"AAYA,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDnH"}
package/dist/tui.js CHANGED
@@ -2,16 +2,20 @@
2
2
  import { TUI, Text, Input, ProcessTerminal } from "@mariozechner/pi-tui";
3
3
  import { controlAvailable, requestControl, streamControl } from "./control.js";
4
4
  import { readConsoleMetadata } from "./index.js";
5
+ import { switchModel, reloadDaemon, readRunnerEnv } from "./live-config.js";
6
+ import { welcomeSnapshot, renderWelcome } from "./welcome.js";
7
+ import { runSetupWizard, applyWizardResult } from "./setup-wizard.js";
5
8
  import { spawn } from "node:child_process";
6
9
  import { resolve } from "node:path";
7
10
  export async function runGoahTui(configPath, stateDir, initialMessage) {
8
11
  if (!process.stdout.isTTY || !process.stdin.isTTY)
9
12
  return runNonInteractive(configPath, stateDir, initialMessage);
13
+ const runnerEnv = readRunnerEnv(configPath);
14
+ const snapshot = welcomeSnapshot(stateDir, runnerEnv);
15
+ const transcript = renderWelcome(snapshot, snapshot.handoffs.length > 0);
10
16
  await ensureDaemon(configPath, stateDir);
11
- const { promise: exited, resolve: resolveExit } = Promise.withResolvers();
12
17
  const terminal = new ProcessTerminal();
13
18
  const tui = new TUI(terminal);
14
- const transcript = ["Goah CEO — type a goal or message. /status inspects, /quit exits."];
15
19
  const transcriptView = new Text(transcript.join("\n"));
16
20
  const input = new Input();
17
21
  const busy = { active: false };
@@ -49,18 +53,23 @@ export async function runGoahTui(configPath, stateDir, initialMessage) {
49
53
  void printStatus(stateDir, push);
50
54
  return;
51
55
  }
52
- if (text.startsWith("/goal ") || text.startsWith("/observe ")) {
53
- void slashGoal(text, stateDir, push);
56
+ if (text.startsWith("/model ")) {
57
+ void switchModelCommand(text, configPath, stateDir, push);
58
+ return;
59
+ }
60
+ if (text === "/setup") {
61
+ void runSetupReload(configPath, stateDir, push);
54
62
  return;
55
63
  }
56
- if (text.startsWith("/approve ") || text.startsWith("/reject ")) {
57
- void slashApprove(text, stateDir, push);
64
+ if (text.startsWith("/goal ") || text.startsWith("/observe ")) {
65
+ void slashGoal(text, stateDir, push);
58
66
  return;
59
67
  }
60
68
  };
61
69
  tui.addChild(transcriptView);
62
70
  tui.addChild(input);
63
71
  tui.setFocus(input);
72
+ const { promise: exited, resolve: resolveExit } = Promise.withResolvers();
64
73
  tui.start();
65
74
  if (initialMessage)
66
75
  void send(initialMessage);
@@ -215,4 +224,29 @@ function messageText(value) {
215
224
  .filter(Boolean)
216
225
  .join("\n");
217
226
  }
227
+ /** /model ID — write config and hot-reload the daemon runner. */
228
+ async function switchModelCommand(text, configPath, stateDir, push) {
229
+ const model = text.slice(7).trim();
230
+ if (!model) {
231
+ push("! usage: /model MODEL_ID");
232
+ return;
233
+ }
234
+ try {
235
+ push(await switchModel(configPath, stateDir, model));
236
+ }
237
+ catch (error) {
238
+ push(`! ${error instanceof Error ? error.message : String(error)}`);
239
+ }
240
+ }
241
+ /** /setup — re-enter the wizard, then reload the daemon so changes apply to the next wake. */
242
+ async function runSetupReload(configPath, stateDir, push) {
243
+ push("Leaving the TUI for setup — it returns after the wizard finishes.");
244
+ const result = await runSetupWizard();
245
+ if (!result.options.provider) {
246
+ push("setup cancelled; nothing changed");
247
+ return;
248
+ }
249
+ applyWizardResult(result, configPath);
250
+ push(await reloadDaemon(stateDir, configPath) ? "config reloaded — applies to the next wake" : `saved to ${resolve(configPath)}; daemon will pick it up on next start`);
251
+ }
218
252
  //# sourceMappingURL=tui.js.map
package/dist/tui.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tui.js","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tui.js","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export interface WelcomeSnapshot {
2
+ root: {
3
+ id: string;
4
+ objective: string;
5
+ phase: string;
6
+ } | null;
7
+ team: Array<{
8
+ agent: string;
9
+ status: string;
10
+ }>;
11
+ handoffs: Array<{
12
+ agent: string;
13
+ result: string;
14
+ }>;
15
+ provider: string;
16
+ model: string;
17
+ }
18
+ export declare const WELCOME_TEAM_SLOTS = 3;
19
+ export declare const WELCOME_HANDOFF_SLOTS = 2;
20
+ /** Read workspace facts from the ledger file; a missing or unreadable ledger yields an empty snapshot. */
21
+ export declare function welcomeSnapshot(stateDir: string, runnerEnv: Record<string, string | undefined>): WelcomeSnapshot;
22
+ /** Render the snapshot into a fixed-height block of plain lines (fixed slots keep layout stable). */
23
+ export declare function renderWelcome(snapshot: WelcomeSnapshot, hasHistory: boolean): string[];
24
+ //# sourceMappingURL=welcome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"welcome.d.ts","sourceRoot":"","sources":["../src/welcome.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9D,IAAI,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,QAAQ,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAKvC,0GAA0G;AAC1G,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,eAAe,CAkBhH;AAED,qGAAqG;AACrG,wBAAgB,aAAa,CAAC,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM,EAAE,CAoBtF"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Welcome-panel snapshot: read-only Ledger facts rendered into fixed slots.
3
+ *
4
+ * Zero daemon dependency and zero blocking: the workspace ledger is a local
5
+ * SQLite file opened read-only; a missing ledger (fresh workspace) renders
6
+ * placeholder slots, so panel height never changes between runs (pi/omp
7
+ * fixed-slot pattern).
8
+ */
9
+ import { DatabaseSync } from "node:sqlite";
10
+ import { existsSync } from "node:fs";
11
+ import { join } from "node:path";
12
+ export const WELCOME_TEAM_SLOTS = 3;
13
+ export const WELCOME_HANDOFF_SLOTS = 2;
14
+ /** Read workspace facts from the ledger file; a missing or unreadable ledger yields an empty snapshot. */
15
+ export function welcomeSnapshot(stateDir, runnerEnv) {
16
+ const database = join(stateDir, "ledger.sqlite");
17
+ if (!existsSync(database))
18
+ return { root: null, team: [], handoffs: [], provider: runnerEnv.GOAH_PI_PROVIDER ?? "", model: runnerEnv.GOAH_PI_MODEL ?? "" };
19
+ const db = new DatabaseSync(database, { readOnly: true });
20
+ try {
21
+ const goals = db.prepare("SELECT id, objective, phase, parent_id, owner FROM goals").all();
22
+ const root = goals.find((goal) => goal.parent_id === null && goal.owner === "ceo" && goal.phase !== "complete") ?? goals.find((goal) => goal.parent_id === null) ?? null;
23
+ const team = db.prepare("SELECT owner AS agent, phase AS status FROM goals WHERE parent_id IS NOT NULL ORDER BY id").all().slice(0, WELCOME_TEAM_SLOTS);
24
+ const handoffRows = db.prepare("SELECT actor, data FROM events WHERE type='handoff.recorded' ORDER BY seq DESC LIMIT ?").all(WELCOME_HANDOFF_SLOTS).reverse();
25
+ const handoffs = handoffRows.flatMap((row) => {
26
+ try {
27
+ const data = JSON.parse(row.data);
28
+ const result = Array.isArray(data.results) && typeof data.results[0] === "string" ? data.results[0] : "";
29
+ return [{ agent: row.actor, result }];
30
+ }
31
+ catch {
32
+ return [{ agent: row.actor, result: "" }];
33
+ }
34
+ });
35
+ return { root: root ? { id: root.id, objective: root.objective, phase: root.phase } : null, team, handoffs, provider: runnerEnv.GOAH_PI_PROVIDER ?? "", model: runnerEnv.GOAH_PI_MODEL ?? "" };
36
+ }
37
+ finally {
38
+ db.close();
39
+ }
40
+ }
41
+ /** Render the snapshot into a fixed-height block of plain lines (fixed slots keep layout stable). */
42
+ export function renderWelcome(snapshot, hasHistory) {
43
+ const lines = [];
44
+ lines.push(`Goah — ${hasHistory ? "Welcome back!" : "Welcome!"} ${snapshot.provider ? `${snapshot.provider}/${snapshot.model}` : "(unconfigured)"}`);
45
+ lines.push("");
46
+ lines.push(snapshot.root ? `Goal: ${snapshot.root.objective} [${snapshot.root.phase}]` : "Goal: none yet — type one to start");
47
+ lines.push("");
48
+ lines.push("Agents:");
49
+ for (let index = 0; index < WELCOME_TEAM_SLOTS; index += 1) {
50
+ const member = snapshot.team[index];
51
+ lines.push(member ? ` ${member.agent} — ${member.status}` : " ·");
52
+ }
53
+ lines.push("");
54
+ lines.push("Recent work:");
55
+ for (let index = 0; index < WELCOME_HANDOFF_SLOTS; index += 1) {
56
+ const handoff = snapshot.handoffs[index];
57
+ lines.push(handoff ? ` ${handoff.agent}: ${handoff.result || "(handed off)"}` : " ·");
58
+ }
59
+ lines.push("");
60
+ lines.push("Tips: type a goal · /model ID switches · /setup re-runs onboarding · /status inspects · /quit exits");
61
+ return lines;
62
+ }
63
+ //# sourceMappingURL=welcome.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"welcome.js","sourceRoot":"","sources":["../src/welcome.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export interface EnvSpecSource {
2
+ /** Absolute path of the workspace root whose `.env` is consulted. */
3
+ root: string;
4
+ }
5
+ export declare const ENV_REFERENCE_PREFIX = "env:";
6
+ /** Parse one `.env` file into key/value pairs; missing files yield {}. Minimal grammar: KEY=VALUE, quotes stripped, comments and blanks ignored. */
7
+ export declare function parseEnvFile(text: string): Record<string, string>;
8
+ export declare function envFileChain(source: EnvSpecSource | undefined): Array<Record<string, string>>;
9
+ /**
10
+ * Resolve an env spec for one spawn. Literal values pass through; `env:NAME`
11
+ * references consult the chain above. An unresolvable reference throws with the
12
+ * variable name so the wake fails honestly instead of spawning a child that
13
+ * would fail opaquely at its first model call.
14
+ */
15
+ export declare function resolveEnvSpec(spec: Record<string, string> | undefined, source: EnvSpecSource | undefined): Record<string, string>;
16
+ //# sourceMappingURL=env-spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-spec.d.ts","sourceRoot":"","sources":["../src/env-spec.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,aAAa;IAC5B,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,oBAAoB,SAAS,CAAC;AAE3C,oJAAoJ;AACpJ,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAcjE;AAMD,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAO7F;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAclI"}