@redplanethq/corebrain 2.8.13 → 2.8.14

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 (192) hide show
  1. package/dist/commands/coding/list.js +1 -1
  2. package/dist/commands/coding/list.js.map +1 -1
  3. package/dist/commands/coding/setup.d.ts +2 -1
  4. package/dist/commands/coding/setup.d.ts.map +1 -1
  5. package/dist/commands/coding/setup.js +1 -24
  6. package/dist/commands/coding/setup.js.map +1 -1
  7. package/dist/commands/folder/add.d.ts +13 -0
  8. package/dist/commands/folder/add.d.ts.map +1 -0
  9. package/dist/commands/folder/add.js +71 -0
  10. package/dist/commands/folder/add.js.map +1 -0
  11. package/dist/commands/folder/index.d.ts +3 -0
  12. package/dist/commands/folder/index.d.ts.map +1 -0
  13. package/dist/commands/folder/index.js +5 -0
  14. package/dist/commands/folder/index.js.map +1 -0
  15. package/dist/commands/folder/list.d.ts +8 -0
  16. package/dist/commands/folder/list.d.ts.map +1 -0
  17. package/dist/commands/folder/list.js +39 -0
  18. package/dist/commands/folder/list.js.map +1 -0
  19. package/dist/commands/folder/remove.d.ts +10 -0
  20. package/dist/commands/folder/remove.d.ts.map +1 -0
  21. package/dist/commands/folder/remove.js +29 -0
  22. package/dist/commands/folder/remove.js.map +1 -0
  23. package/dist/commands/folder/scope.d.ts +13 -0
  24. package/dist/commands/folder/scope.d.ts.map +1 -0
  25. package/dist/commands/folder/scope.js +61 -0
  26. package/dist/commands/folder/scope.js.map +1 -0
  27. package/dist/commands/gateway/config.d.ts +1 -1
  28. package/dist/commands/gateway/config.d.ts.map +1 -1
  29. package/dist/commands/gateway/config.js +122 -116
  30. package/dist/commands/gateway/config.js.map +1 -1
  31. package/dist/commands/gateway/register.d.ts +37 -0
  32. package/dist/commands/gateway/register.d.ts.map +1 -0
  33. package/dist/commands/gateway/register.js +132 -0
  34. package/dist/commands/gateway/register.js.map +1 -0
  35. package/dist/commands/gateway/start.d.ts +2 -1
  36. package/dist/commands/gateway/start.d.ts.map +1 -1
  37. package/dist/commands/gateway/start.js +73 -6
  38. package/dist/commands/gateway/start.js.map +1 -1
  39. package/dist/commands/gateway/status.d.ts.map +1 -1
  40. package/dist/commands/gateway/status.js +10 -1
  41. package/dist/commands/gateway/status.js.map +1 -1
  42. package/dist/commands/gateway/stop.d.ts.map +1 -1
  43. package/dist/commands/gateway/stop.js +11 -0
  44. package/dist/commands/gateway/stop.js.map +1 -1
  45. package/dist/config/folders.d.ts +20 -0
  46. package/dist/config/folders.d.ts.map +1 -0
  47. package/dist/config/folders.js +114 -0
  48. package/dist/config/folders.js.map +1 -0
  49. package/dist/server/api/auth.d.ts +17 -0
  50. package/dist/server/api/auth.d.ts.map +1 -0
  51. package/dist/server/api/auth.js +45 -0
  52. package/dist/server/api/auth.js.map +1 -0
  53. package/dist/server/api/browser/cdp.d.ts +18 -0
  54. package/dist/server/api/browser/cdp.d.ts.map +1 -0
  55. package/dist/server/api/browser/cdp.js +137 -0
  56. package/dist/server/api/browser/cdp.js.map +1 -0
  57. package/dist/server/api/browser/index.d.ts +3 -0
  58. package/dist/server/api/browser/index.d.ts.map +1 -0
  59. package/dist/server/api/browser/index.js +10 -0
  60. package/dist/server/api/browser/index.js.map +1 -0
  61. package/dist/server/api/browser/launch.d.ts +17 -0
  62. package/dist/server/api/browser/launch.d.ts.map +1 -0
  63. package/dist/server/api/browser/launch.js +41 -0
  64. package/dist/server/api/browser/launch.js.map +1 -0
  65. package/dist/server/api/coding/coding_spawn.d.ts +22 -0
  66. package/dist/server/api/coding/coding_spawn.d.ts.map +1 -0
  67. package/dist/server/api/coding/coding_spawn.js +121 -0
  68. package/dist/server/api/coding/coding_spawn.js.map +1 -0
  69. package/dist/server/api/coding/coding_xterm_session.d.ts +3 -0
  70. package/dist/server/api/coding/coding_xterm_session.d.ts.map +1 -0
  71. package/dist/server/api/coding/coding_xterm_session.js +163 -0
  72. package/dist/server/api/coding/coding_xterm_session.js.map +1 -0
  73. package/dist/server/api/coding/index.d.ts +10 -0
  74. package/dist/server/api/coding/index.d.ts.map +1 -0
  75. package/dist/server/api/coding/index.js +17 -0
  76. package/dist/server/api/coding/index.js.map +1 -0
  77. package/dist/server/api/exec/index.d.ts +3 -0
  78. package/dist/server/api/exec/index.d.ts.map +1 -0
  79. package/dist/server/api/exec/index.js +6 -0
  80. package/dist/server/api/exec/index.js.map +1 -0
  81. package/dist/server/api/files/index.d.ts +3 -0
  82. package/dist/server/api/files/index.d.ts.map +1 -0
  83. package/dist/server/api/files/index.js +6 -0
  84. package/dist/server/api/files/index.js.map +1 -0
  85. package/dist/server/api/folders/index.d.ts +14 -0
  86. package/dist/server/api/folders/index.d.ts.map +1 -0
  87. package/dist/server/api/folders/index.js +161 -0
  88. package/dist/server/api/folders/index.js.map +1 -0
  89. package/dist/server/api/manifest-builder.d.ts +13 -0
  90. package/dist/server/api/manifest-builder.d.ts.map +1 -0
  91. package/dist/server/api/manifest-builder.js +155 -0
  92. package/dist/server/api/manifest-builder.js.map +1 -0
  93. package/dist/server/api/ops.d.ts +3 -0
  94. package/dist/server/api/ops.d.ts.map +1 -0
  95. package/dist/server/api/ops.js +32 -0
  96. package/dist/server/api/ops.js.map +1 -0
  97. package/dist/server/api/server.d.ts +9 -0
  98. package/dist/server/api/server.d.ts.map +1 -0
  99. package/dist/server/api/server.js +66 -0
  100. package/dist/server/api/server.js.map +1 -0
  101. package/dist/server/api/shell/index.d.ts +17 -0
  102. package/dist/server/api/shell/index.d.ts.map +1 -0
  103. package/dist/server/api/shell/index.js +61 -0
  104. package/dist/server/api/shell/index.js.map +1 -0
  105. package/dist/server/api/tool-group.d.ts +21 -0
  106. package/dist/server/api/tool-group.d.ts.map +1 -0
  107. package/dist/server/api/tool-group.js +23 -0
  108. package/dist/server/api/tool-group.js.map +1 -0
  109. package/dist/server/api/tunnels/ngrok.d.ts +10 -0
  110. package/dist/server/api/tunnels/ngrok.d.ts.map +1 -0
  111. package/dist/server/api/tunnels/ngrok.js +33 -0
  112. package/dist/server/api/tunnels/ngrok.js.map +1 -0
  113. package/dist/server/api/tunnels/tailscale.d.ts +12 -0
  114. package/dist/server/api/tunnels/tailscale.d.ts.map +1 -0
  115. package/dist/server/api/tunnels/tailscale.js +49 -0
  116. package/dist/server/api/tunnels/tailscale.js.map +1 -0
  117. package/dist/server/api/utils/index.d.ts +3 -0
  118. package/dist/server/api/utils/index.d.ts.map +1 -0
  119. package/dist/server/api/utils/index.js +6 -0
  120. package/dist/server/api/utils/index.js.map +1 -0
  121. package/dist/server/gateway-entry.d.ts +2 -2
  122. package/dist/server/gateway-entry.js +43 -106
  123. package/dist/server/gateway-entry.js.map +1 -1
  124. package/dist/server/gateway-log.d.ts +10 -0
  125. package/dist/server/gateway-log.d.ts.map +1 -0
  126. package/dist/server/gateway-log.js +33 -0
  127. package/dist/server/gateway-log.js.map +1 -0
  128. package/dist/server/pty/manager.d.ts +75 -0
  129. package/dist/server/pty/manager.d.ts.map +1 -0
  130. package/dist/server/pty/manager.js +280 -0
  131. package/dist/server/pty/manager.js.map +1 -0
  132. package/dist/server/tools/coding-tools.d.ts.map +1 -1
  133. package/dist/server/tools/coding-tools.js +56 -17
  134. package/dist/server/tools/coding-tools.js.map +1 -1
  135. package/dist/server/tools/exec-tools.d.ts.map +1 -1
  136. package/dist/server/tools/exec-tools.js +30 -3
  137. package/dist/server/tools/exec-tools.js.map +1 -1
  138. package/dist/server/tools/files-tools.d.ts +8 -0
  139. package/dist/server/tools/files-tools.d.ts.map +1 -0
  140. package/dist/server/tools/files-tools.js +523 -0
  141. package/dist/server/tools/files-tools.js.map +1 -0
  142. package/dist/server/tools/scope-error.d.ts +8 -0
  143. package/dist/server/tools/scope-error.d.ts.map +1 -0
  144. package/dist/server/tools/scope-error.js +11 -0
  145. package/dist/server/tools/scope-error.js.map +1 -0
  146. package/dist/types/config.d.ts +15 -3
  147. package/dist/types/config.d.ts.map +1 -1
  148. package/dist/utils/agent-templates.d.ts +18 -0
  149. package/dist/utils/agent-templates.d.ts.map +1 -0
  150. package/dist/utils/agent-templates.js +59 -0
  151. package/dist/utils/agent-templates.js.map +1 -0
  152. package/dist/utils/browser-manager.d.ts +20 -0
  153. package/dist/utils/browser-manager.d.ts.map +1 -1
  154. package/dist/utils/browser-manager.js +76 -0
  155. package/dist/utils/browser-manager.js.map +1 -1
  156. package/dist/utils/coding-agents/codex.d.ts +5 -8
  157. package/dist/utils/coding-agents/codex.d.ts.map +1 -1
  158. package/dist/utils/coding-agents/codex.js +6 -26
  159. package/dist/utils/coding-agents/codex.js.map +1 -1
  160. package/dist/utils/coding-runner.d.ts +13 -9
  161. package/dist/utils/coding-runner.d.ts.map +1 -1
  162. package/dist/utils/coding-runner.js +45 -78
  163. package/dist/utils/coding-runner.js.map +1 -1
  164. package/dist/utils/env-bootstrap.d.ts +29 -0
  165. package/dist/utils/env-bootstrap.d.ts.map +1 -0
  166. package/dist/utils/env-bootstrap.js +204 -0
  167. package/dist/utils/env-bootstrap.js.map +1 -0
  168. package/package.json +8 -1
  169. package/dist/commands/coding/close.d.ts +0 -11
  170. package/dist/commands/coding/close.d.ts.map +0 -1
  171. package/dist/commands/coding/close.js +0 -76
  172. package/dist/commands/coding/close.js.map +0 -1
  173. package/dist/commands/coding/resume.d.ts +0 -12
  174. package/dist/commands/coding/resume.d.ts.map +0 -1
  175. package/dist/commands/coding/resume.js +0 -86
  176. package/dist/commands/coding/resume.js.map +0 -1
  177. package/dist/commands/coding/start.d.ts +0 -17
  178. package/dist/commands/coding/start.d.ts.map +0 -1
  179. package/dist/commands/coding/start.js +0 -135
  180. package/dist/commands/coding/start.js.map +0 -1
  181. package/dist/server/gateway-client.d.ts +0 -84
  182. package/dist/server/gateway-client.d.ts.map +0 -1
  183. package/dist/server/gateway-client.js +0 -340
  184. package/dist/server/gateway-client.js.map +0 -1
  185. package/dist/server/tools/imessage-tools.d.ts +0 -34
  186. package/dist/server/tools/imessage-tools.d.ts.map +0 -1
  187. package/dist/server/tools/imessage-tools.js +0 -262
  188. package/dist/server/tools/imessage-tools.js.map +0 -1
  189. package/dist/utils/app-bundle.d.ts +0 -25
  190. package/dist/utils/app-bundle.d.ts.map +0 -1
  191. package/dist/utils/app-bundle.js +0 -117
  192. package/dist/utils/app-bundle.js.map +0 -1
@@ -1,9 +1,6 @@
1
- import { spawn } from 'node:child_process';
2
- import { existsSync, mkdirSync, openSync, statSync } from 'node:fs';
3
- import { join } from 'node:path';
4
- import { homedir } from 'node:os';
5
1
  import { getPreferences } from '../config/preferences.js';
6
- import { getSession, deleteSession, isProcessRunningByPid } from '../utils/coding-sessions.js';
2
+ import { getSession } from '../utils/coding-sessions.js';
3
+ import { ptyManager } from '../server/pty/manager.js';
7
4
  export function getAgentConfig(agentName) {
8
5
  const prefs = getPreferences();
9
6
  const coding = prefs.coding;
@@ -12,6 +9,12 @@ export function getAgentConfig(agentName) {
12
9
  }
13
10
  return coding[agentName];
14
11
  }
12
+ /**
13
+ * Build CLI args for starting an agent's interactive TUI. If `prompt` is
14
+ * provided, it's appended as the final positional arg so the agent processes
15
+ * it on startup; otherwise the TUI launches blank (used by the xterm spawn
16
+ * path). Session id flows through `sessionArg` when the agent supports it.
17
+ */
15
18
  export function buildStartArgs(config, params) {
16
19
  const args = [...(config.args || [])];
17
20
  if (config.sessionArg && config.sessionMode === 'always') {
@@ -33,114 +36,78 @@ export function buildStartArgs(config, params) {
33
36
  if (params.systemPrompt && config.systemPromptArg) {
34
37
  args.push(config.systemPromptArg, params.systemPrompt);
35
38
  }
36
- args.push(params.prompt);
39
+ if (params.prompt) {
40
+ args.push(params.prompt);
41
+ }
37
42
  return args;
38
43
  }
44
+ /**
45
+ * Build CLI args for resuming an agent via `resumeArgs` (`{sessionId}` is
46
+ * substituted). Prompt is optional — omit for a blank-resume into the TUI,
47
+ * set for a prompt-on-resume flow.
48
+ */
39
49
  export function buildResumeArgs(config, params) {
40
50
  if (config.resumeArgs) {
41
51
  const args = config.resumeArgs.map(arg => arg.replace('{sessionId}', params.sessionId));
42
- args.push(params.prompt);
52
+ if (params.prompt)
53
+ args.push(params.prompt);
43
54
  return args;
44
55
  }
45
56
  return buildStartArgs(config, params);
46
57
  }
47
- export function getSessionLogPath(sessionId, stream) {
48
- return join(homedir(), '.corebrain', 'logs', `${sessionId}.${stream}.log`);
49
- }
50
- function ensureLogsDir() {
51
- const logsDir = join(homedir(), '.corebrain', 'logs');
52
- if (!existsSync(logsDir)) {
53
- mkdirSync(logsDir, { recursive: true });
54
- }
55
- }
56
58
  export function startAgentProcess(sessionId, config, args, workingDirectory, logger) {
57
59
  const log = logger || (() => { });
58
60
  log(`SPAWN_START: sessionId=${sessionId}`);
59
61
  log(`SPAWN_COMMAND: ${config.command}`);
60
62
  log(`SPAWN_ARGS: ${JSON.stringify(args)}`);
61
63
  log(`SPAWN_CWD: ${workingDirectory}`);
62
- ensureLogsDir();
63
- const stdoutFd = openSync(getSessionLogPath(sessionId, 'stdout'), 'w');
64
- const stderrFd = openSync(getSessionLogPath(sessionId, 'stderr'), 'w');
65
- let proc;
66
64
  try {
67
- proc = spawn(config.command, args, {
65
+ const { pid } = ptyManager.spawn({
66
+ sessionId,
67
+ command: config.command,
68
+ args,
68
69
  cwd: workingDirectory,
69
- shell: false,
70
- stdio: ['ignore', stdoutFd, stderrFd],
71
- detached: true,
72
70
  });
71
+ log(`SPAWN_PID: ${pid}`);
72
+ return { pid };
73
73
  }
74
74
  catch (err) {
75
75
  const errorMsg = err instanceof Error ? err.message : String(err);
76
76
  log(`SPAWN_ERROR: ${errorMsg}`);
77
77
  return { pid: undefined, error: errorMsg };
78
78
  }
79
- const pid = proc.pid;
80
- log(`SPAWN_PID: ${pid}`);
81
- proc.on('error', (err) => log(`SPAWN_PROCESS_ERROR: ${err.message}`));
82
- proc.on('exit', (code, signal) => log(`SPAWN_EXIT: pid=${pid} code=${code} signal=${signal}`));
83
- proc.unref();
84
- log(`SPAWN_DETACHED: process detached and running`);
85
- return { pid };
86
79
  }
87
80
  export function isProcessRunning(sessionId) {
81
+ // Primary source: PtyManager in-memory state for agents spawned under this
82
+ // daemon. Falls back to PID-probe for legacy session records that may have
83
+ // been started before the PTY refactor.
84
+ if (ptyManager.isRunning(sessionId))
85
+ return true;
88
86
  const session = getSession(sessionId);
89
87
  if (!session?.pid)
90
88
  return false;
91
- return isProcessRunningByPid(session.pid);
89
+ try {
90
+ process.kill(session.pid, 0);
91
+ return true;
92
+ }
93
+ catch {
94
+ return false;
95
+ }
92
96
  }
93
97
  export function stopProcess(sessionId) {
98
+ if (ptyManager.isRunning(sessionId)) {
99
+ return ptyManager.kill(sessionId, 'SIGTERM');
100
+ }
101
+ // Legacy path: kill by stored PID if PTY manager doesn't know about it.
94
102
  const session = getSession(sessionId);
95
103
  if (!session?.pid)
96
104
  return false;
97
- if (isProcessRunningByPid(session.pid)) {
98
- try {
99
- process.kill(session.pid, 'SIGTERM');
100
- return true;
101
- }
102
- catch {
103
- return false;
104
- }
105
+ try {
106
+ process.kill(session.pid, 'SIGTERM');
107
+ return true;
105
108
  }
106
- return false;
107
- }
108
- /**
109
- * Start a background watchdog for a running session.
110
- * If the stdout log has not grown for `idleTimeoutMs` (default 30s), the process is killed.
111
- * Also cleans up the running session record when the process exits naturally.
112
- */
113
- export function startIdleWatchdog(sessionId, pid, idleTimeoutMs = 30_000) {
114
- const logPath = getSessionLogPath(sessionId, 'stdout');
115
- const pollInterval = 5_000;
116
- let lastSize = -1;
117
- let lastChangedAt = Date.now();
118
- function check() {
119
- // Process already dead — clean up session record and stop
120
- if (!isProcessRunningByPid(pid)) {
121
- deleteSession(sessionId);
122
- return;
123
- }
124
- let currentSize = 0;
125
- try {
126
- currentSize = statSync(logPath).size;
127
- }
128
- catch { /* log not created yet */ }
129
- if (currentSize !== lastSize) {
130
- lastSize = currentSize;
131
- lastChangedAt = Date.now();
132
- }
133
- else if (Date.now() - lastChangedAt >= idleTimeoutMs) {
134
- // Idle too long — kill and clean up
135
- try {
136
- process.kill(pid, 'SIGTERM');
137
- }
138
- catch { /* already gone */ }
139
- deleteSession(sessionId);
140
- return;
141
- }
142
- setTimeout(check, pollInterval);
109
+ catch {
110
+ return false;
143
111
  }
144
- setTimeout(check, pollInterval);
145
112
  }
146
113
  //# sourceMappingURL=coding-runner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"coding-runner.js","sourceRoot":"","sources":["../../src/utils/coding-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"coding-runner.js","sourceRoot":"","sources":["../../src/utils/coding-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Bootstrap a gateway config from environment variables when running
3
+ * headless (Docker / systemd without an interactive `corebrain login` +
4
+ * `corebrain gateway config` flow).
5
+ *
6
+ * Reads (all optional; only missing values are filled in):
7
+ *
8
+ * COREBRAIN_API_URL → core.auth.url
9
+ * COREBRAIN_API_KEY → core.auth.apiKey (user's PAT)
10
+ * COREBRAIN_GATEWAY_NAME → preferences.gateway.name
11
+ * COREBRAIN_GATEWAY_DESCRIPTION → preferences.gateway.description
12
+ * COREBRAIN_GATEWAY_SECURITY_KEY → if set, used as the gateway's auth key.
13
+ * Otherwise one is generated and printed
14
+ * to stdout *once* for the user to paste
15
+ * into the webapp's Register Gateway flow.
16
+ * COREBRAIN_DEFAULT_WORKSPACE → auto-registered as a folder with
17
+ * [files, coding, exec] scopes; also flips
18
+ * on browser/coding/files/exec slots so a
19
+ * fresh container is ready to use.
20
+ *
21
+ * Idempotent. Safe to call on every gateway boot. Never overwrites a value
22
+ * already present in the on-disk config — so a user who manually runs
23
+ * `corebrain login` / `corebrain gateway config` inside their container
24
+ * won't have their hand-entered values clobbered on restart.
25
+ *
26
+ * Returns the set of fields that were populated, for logging.
27
+ */
28
+ export declare function bootstrapFromEnv(): string[];
29
+ //# sourceMappingURL=env-bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-bootstrap.d.ts","sourceRoot":"","sources":["../../src/utils/env-bootstrap.ts"],"names":[],"mappings":"AAcA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CA6K3C"}
@@ -0,0 +1,204 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { existsSync, realpathSync, statSync } from 'node:fs';
3
+ import { resolve } from 'node:path';
4
+ import { updateConfig, getConfig } from '../config/index.js';
5
+ import { getPreferences, updatePreferences } from '../config/preferences.js';
6
+ import { generateSecurityKey, hashKey } from '../server/api/auth.js';
7
+ import { AGENT_TEMPLATES, resolveCommand } from '../utils/agent-templates.js';
8
+ /**
9
+ * Bootstrap a gateway config from environment variables when running
10
+ * headless (Docker / systemd without an interactive `corebrain login` +
11
+ * `corebrain gateway config` flow).
12
+ *
13
+ * Reads (all optional; only missing values are filled in):
14
+ *
15
+ * COREBRAIN_API_URL → core.auth.url
16
+ * COREBRAIN_API_KEY → core.auth.apiKey (user's PAT)
17
+ * COREBRAIN_GATEWAY_NAME → preferences.gateway.name
18
+ * COREBRAIN_GATEWAY_DESCRIPTION → preferences.gateway.description
19
+ * COREBRAIN_GATEWAY_SECURITY_KEY → if set, used as the gateway's auth key.
20
+ * Otherwise one is generated and printed
21
+ * to stdout *once* for the user to paste
22
+ * into the webapp's Register Gateway flow.
23
+ * COREBRAIN_DEFAULT_WORKSPACE → auto-registered as a folder with
24
+ * [files, coding, exec] scopes; also flips
25
+ * on browser/coding/files/exec slots so a
26
+ * fresh container is ready to use.
27
+ *
28
+ * Idempotent. Safe to call on every gateway boot. Never overwrites a value
29
+ * already present in the on-disk config — so a user who manually runs
30
+ * `corebrain login` / `corebrain gateway config` inside their container
31
+ * won't have their hand-entered values clobbered on restart.
32
+ *
33
+ * Returns the set of fields that were populated, for logging.
34
+ */
35
+ export function bootstrapFromEnv() {
36
+ const applied = [];
37
+ const apiUrl = process.env.COREBRAIN_API_URL;
38
+ const apiKey = process.env.COREBRAIN_API_KEY;
39
+ const gwName = process.env.COREBRAIN_GATEWAY_NAME;
40
+ const gwDesc = process.env.COREBRAIN_GATEWAY_DESCRIPTION;
41
+ const defaultWorkspace = process.env.COREBRAIN_DEFAULT_WORKSPACE;
42
+ // --- core.auth ---
43
+ // auth requires both url and apiKey, so we only persist when the merge
44
+ // would yield a complete pair (env-supplied or already on disk).
45
+ const config = getConfig();
46
+ const mergedUrl = config.auth?.url ?? apiUrl;
47
+ const mergedApiKey = config.auth?.apiKey ?? apiKey;
48
+ const addedUrl = !config.auth?.url && !!apiUrl;
49
+ const addedApiKey = !config.auth?.apiKey && !!apiKey;
50
+ if ((addedUrl || addedApiKey) && mergedUrl && mergedApiKey) {
51
+ updateConfig({ auth: { url: mergedUrl, apiKey: mergedApiKey } });
52
+ if (addedUrl)
53
+ applied.push('COREBRAIN_API_URL');
54
+ if (addedApiKey)
55
+ applied.push('COREBRAIN_API_KEY');
56
+ }
57
+ // --- preferences.gateway ---
58
+ const prefs = getPreferences();
59
+ const existing = prefs.gateway ?? { pid: 0, startedAt: 0 };
60
+ // Local id — internal key for the gateway record. Webapp assigns its own
61
+ // ID at registration time; this is just to satisfy the existing
62
+ // "configured" check in the start command.
63
+ const needsId = !existing.id;
64
+ const namePatch = gwName && !existing.name ? { name: gwName } : {};
65
+ const descPatch = gwDesc && !existing.description ? { description: gwDesc } : {};
66
+ // Security key. Without this every authed request returns 401, so make
67
+ // sure a fresh container always boots with one. Three cases:
68
+ // 1) Env var supplied → use it (user controls the value via Railway/Fly env).
69
+ // 2) Already on disk → keep it.
70
+ // 3) Neither → generate, persist the hash, print the raw key
71
+ // so the user can paste it into the webapp's
72
+ // "Register gateway" dialog.
73
+ const envKey = process.env.COREBRAIN_GATEWAY_SECURITY_KEY;
74
+ let securityKeyPatch = {};
75
+ let printRawKey = null;
76
+ if (envKey && !existing.securityKeyHash) {
77
+ securityKeyPatch.securityKeyHash = hashKey(envKey);
78
+ applied.push('COREBRAIN_GATEWAY_SECURITY_KEY');
79
+ }
80
+ else if (!envKey && !existing.securityKeyHash) {
81
+ printRawKey = generateSecurityKey();
82
+ securityKeyPatch.securityKeyHash = hashKey(printRawKey);
83
+ applied.push('generated-security-key');
84
+ }
85
+ // Default slots: browser/coding/files/exec on. Only applied to a fresh
86
+ // gateway record — once a slot has any explicit setting (even `false`),
87
+ // we don't override it.
88
+ const slotsPatch = {};
89
+ if (!existing.slots) {
90
+ slotsPatch.slots = {
91
+ browser: { enabled: true },
92
+ coding: { enabled: true },
93
+ files: { enabled: true },
94
+ exec: { enabled: true },
95
+ };
96
+ }
97
+ // Auto-register /app (or whatever COREBRAIN_DEFAULT_WORKSPACE points at)
98
+ // as a coding+files+exec folder so a brand-new container is immediately
99
+ // usable from the webapp's "New coding session" dialog without the user
100
+ // having to add a folder manually.
101
+ const foldersPatch = {};
102
+ if (defaultWorkspace && existsSync(defaultWorkspace)) {
103
+ try {
104
+ const abs = realpathSync(resolve(defaultWorkspace));
105
+ if (statSync(abs).isDirectory()) {
106
+ const existingFolders = existing.folders ?? [];
107
+ if (!existingFolders.some(f => f.path === abs)) {
108
+ const baseName = abs.split('/').filter(Boolean).pop() ?? 'app';
109
+ let name = baseName;
110
+ for (let i = 2; existingFolders.some(f => f.name === name); i++) {
111
+ name = `${baseName}-${i}`;
112
+ }
113
+ foldersPatch.folders = [
114
+ ...existingFolders,
115
+ {
116
+ id: `fld_${randomUUID()}`,
117
+ name,
118
+ path: abs,
119
+ scopes: ['files', 'coding', 'exec'],
120
+ gitRepo: existsSync(`${abs}/.git`),
121
+ },
122
+ ];
123
+ applied.push(`folder:${name}=${abs}`);
124
+ }
125
+ }
126
+ }
127
+ catch {
128
+ /* path errors fall through to "no auto-register" */
129
+ }
130
+ }
131
+ if (needsId ||
132
+ Object.keys(namePatch).length > 0 ||
133
+ Object.keys(descPatch).length > 0 ||
134
+ slotsPatch.slots ||
135
+ foldersPatch.folders ||
136
+ securityKeyPatch.securityKeyHash) {
137
+ updatePreferences({
138
+ gateway: {
139
+ ...existing,
140
+ ...(needsId ? { id: randomUUID() } : {}),
141
+ ...namePatch,
142
+ ...descPatch,
143
+ ...slotsPatch,
144
+ ...foldersPatch,
145
+ ...securityKeyPatch,
146
+ },
147
+ });
148
+ if (namePatch.name)
149
+ applied.push('COREBRAIN_GATEWAY_NAME');
150
+ if (descPatch.description)
151
+ applied.push('COREBRAIN_GATEWAY_DESCRIPTION');
152
+ if (slotsPatch.slots)
153
+ applied.push('default-slots');
154
+ }
155
+ // --- preferences.coding ---
156
+ // Auto-configure any coding agent we detect on PATH that isn't already
157
+ // in the user's preferences. This is what `corebrain coding setup` does
158
+ // interactively; doing it on every boot makes Docker / headless installs
159
+ // usable without an extra setup step. Existing entries are never
160
+ // overwritten, so a user who tuned args manually keeps their values.
161
+ const existingCoding = (prefs.coding ?? {});
162
+ const codingPatch = {};
163
+ for (const tmpl of AGENT_TEMPLATES) {
164
+ if (existingCoding[tmpl.name])
165
+ continue;
166
+ const cmdPath = tmpl.commands
167
+ .map(c => resolveCommand(c))
168
+ .find((p) => Boolean(p));
169
+ if (!cmdPath)
170
+ continue;
171
+ codingPatch[tmpl.name] = {
172
+ command: cmdPath,
173
+ ...tmpl.defaultConfig,
174
+ };
175
+ applied.push(`coding:${tmpl.name}`);
176
+ }
177
+ if (Object.keys(codingPatch).length > 0) {
178
+ updatePreferences({
179
+ coding: { ...existingCoding, ...codingPatch },
180
+ });
181
+ }
182
+ if (printRawKey) {
183
+ // Banner prints to stdout (not the log file) so it's visible in
184
+ // `docker logs <container>` immediately. Shown only once because the
185
+ // next boot already has a hash on disk and skips this branch.
186
+ const banner = [
187
+ '',
188
+ '='.repeat(64),
189
+ 'CoreBrain Gateway — security key generated',
190
+ '',
191
+ ` ${printRawKey}`,
192
+ '',
193
+ 'Paste this (with your gateway URL) into the webapp:',
194
+ ' Settings → Gateways → New gateway',
195
+ '',
196
+ 'Set COREBRAIN_GATEWAY_SECURITY_KEY env var to provide your own.',
197
+ '='.repeat(64),
198
+ '',
199
+ ].join('\n');
200
+ process.stdout.write(banner);
201
+ }
202
+ return applied;
203
+ }
204
+ //# sourceMappingURL=env-bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-bootstrap.js","sourceRoot":"","sources":["../../src/utils/env-bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AACvC,OAAO,EAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAC,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,YAAY,EAAE,SAAS,EAAC,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAC,cAAc,EAAE,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAOvE,OAAO,EAAC,mBAAmB,EAAE,OAAO,EAAC,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAC,eAAe,EAAE,cAAc,EAAC,MAAM,yBAAyB,CAAC;AAExE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,gBAAgB;IAC/B,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IAClD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;IACzD,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;IAEjE,oBAAoB;IACpB,uEAAuE;IACvE,iEAAiE;IACjE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC;IAC7C,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,MAAM,CAAC;IACnD,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC;IAC/C,MAAM,WAAW,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC;IACrD,IAAI,CAAC,QAAQ,IAAI,WAAW,CAAC,IAAI,SAAS,IAAI,YAAY,EAAE,CAAC;QAC5D,YAAY,CAAC,EAAC,IAAI,EAAE,EAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAC,EAAC,CAAC,CAAC;QAC7D,IAAI,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChD,IAAI,WAAW;YAAE,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACpD,CAAC;IAED,8BAA8B;IAC9B,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,IAAI,EAAC,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAC,CAAC;IAEzD,yEAAyE;IACzE,gEAAgE;IAChE,2CAA2C;IAC3C,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,MAAM,SAAS,GACd,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAC,WAAW,EAAE,MAAM,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9D,uEAAuE;IACvE,6DAA6D;IAC7D,gFAAgF;IAChF,qCAAqC;IACrC,0EAA0E;IAC1E,uEAAuE;IACvE,uDAAuD;IACvD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC;IAC1D,IAAI,gBAAgB,GAA+B,EAAE,CAAC;IACtD,IAAI,WAAW,GAAkB,IAAI,CAAC;IACtC,IAAI,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;QACzC,gBAAgB,CAAC,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAChD,CAAC;SAAM,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;QACjD,WAAW,GAAG,mBAAmB,EAAE,CAAC;QACpC,gBAAgB,CAAC,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACxC,CAAC;IAED,uEAAuE;IACvE,wEAAwE;IACxE,wBAAwB;IACxB,MAAM,UAAU,GAA2B,EAAE,CAAC;IAC9C,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACrB,UAAU,CAAC,KAAK,GAAG;YAClB,OAAO,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC;YACxB,MAAM,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC;YACvB,KAAK,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC;YACtB,IAAI,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC;SACrB,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,wEAAwE;IACxE,wEAAwE;IACxE,mCAAmC;IACnC,MAAM,YAAY,GAA+B,EAAE,CAAC;IACpD,IAAI,gBAAgB,IAAI,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACpD,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBACjC,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;gBAC/C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;oBAChD,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC;oBAC/D,IAAI,IAAI,GAAG,QAAQ,CAAC;oBACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;wBACjE,IAAI,GAAG,GAAG,QAAQ,IAAI,CAAC,EAAE,CAAC;oBAC3B,CAAC;oBACD,YAAY,CAAC,OAAO,GAAG;wBACtB,GAAG,eAAe;wBAClB;4BACC,EAAE,EAAE,OAAO,UAAU,EAAE,EAAE;4BACzB,IAAI;4BACJ,IAAI,EAAE,GAAG;4BACT,MAAM,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC;4BACnC,OAAO,EAAE,UAAU,CAAC,GAAG,GAAG,OAAO,CAAC;yBAClC;qBACD,CAAC;oBACF,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;gBACvC,CAAC;YACF,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,oDAAoD;QACrD,CAAC;IACF,CAAC;IAED,IACC,OAAO;QACP,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC;QACjC,UAAU,CAAC,KAAK;QAChB,YAAY,CAAC,OAAO;QACpB,gBAAgB,CAAC,eAAe,EAC/B,CAAC;QACF,iBAAiB,CAAC;YACjB,OAAO,EAAE;gBACR,GAAG,QAAQ;gBACX,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,EAAE,EAAE,UAAU,EAAE,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtC,GAAG,SAAS;gBACZ,GAAG,SAAS;gBACZ,GAAG,UAAU;gBACb,GAAG,YAAY;gBACf,GAAG,gBAAgB;aACnB;SACD,CAAC,CAAC;QACH,IAAI,SAAS,CAAC,IAAI;YAAE,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAC3D,IAAI,SAAS,CAAC,WAAW;YAAE,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QACzE,IAAI,UAAU,CAAC,KAAK;YAAE,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACrD,CAAC;IAED,6BAA6B;IAC7B,uEAAuE;IACvE,wEAAwE;IACxE,yEAAyE;IACzE,iEAAiE;IACjE,qEAAqE;IACrE,MAAM,cAAc,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAiB,CAAC;IAC5D,MAAM,WAAW,GAAqC,EAAE,CAAC;IACzD,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACpC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ;aAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;aAC3B,IAAI,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YACxB,OAAO,EAAE,OAAO;YAChB,GAAG,IAAI,CAAC,aAAa;SACrB,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,iBAAiB,CAAC;YACjB,MAAM,EAAE,EAAC,GAAG,cAAc,EAAE,GAAG,WAAW,EAAC;SAC3C,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QACjB,gEAAgE;QAChE,qEAAqE;QACrE,8DAA8D;QAC9D,MAAM,MAAM,GAAG;YACd,EAAE;YACF,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACd,4CAA4C;YAC5C,EAAE;YACF,KAAK,WAAW,EAAE;YAClB,EAAE;YACF,qDAAqD;YACrD,qCAAqC;YACrC,EAAE;YACF,iEAAiE;YACjE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACd,EAAE;SACF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redplanethq/corebrain",
3
- "version": "2.8.13",
3
+ "version": "2.8.14",
4
4
  "type": "module",
5
5
  "engines": {
6
6
  "node": ">=16"
@@ -17,26 +17,33 @@
17
17
  ],
18
18
  "dependencies": {
19
19
  "@clack/prompts": "^1.0.1",
20
+ "@fastify/websocket": "^11.0.1",
20
21
  "@mariozechner/pi-tui": "^0.57.1",
21
22
  "@mishieck/ink-titled-box": "^0.4.2",
22
23
  "@redplanethq/ui": "2.1.3",
24
+ "fastify": "^5.0.0",
23
25
  "chalk": "^5.2.0",
26
+ "diff": "^5.2.0",
24
27
  "dotenv": "^17.2.3",
28
+ "fast-glob": "^3.3.2",
25
29
  "fast-png": "^8.0.0",
26
30
  "ink": "^6.6.0",
27
31
  "ink-select-input": "^6.2.0",
28
32
  "ink-spinner": "5.0.0",
29
33
  "ink-stepper": "0.2.0",
30
34
  "ink-text-input": "^6.0.0",
35
+ "node-pty": "^1.0.0",
31
36
  "pastel": "^4.0.0",
32
37
  "playwright": "^1.44.0",
33
38
  "react": "^19.2.4",
34
39
  "ws": "^8.18.0",
35
40
  "zod": "^4.3.6",
41
+ "@core/gateway-protocol": "0.1.0",
36
42
  "@redplanethq/sdk": "0.1.19"
37
43
  },
38
44
  "devDependencies": {
39
45
  "@sindresorhus/tsconfig": "^8.1.0",
46
+ "@types/diff": "^5.2.0",
40
47
  "@types/node": "18",
41
48
  "@types/react": "^19.2.13",
42
49
  "@types/ws": "^8.5.13",
@@ -1,11 +0,0 @@
1
- import zod from 'zod';
2
- export declare const options: zod.ZodObject<{
3
- sessionId: zod.ZodOptional<zod.ZodString>;
4
- all: zod.ZodOptional<zod.ZodBoolean>;
5
- }, zod.core.$strip>;
6
- type Props = {
7
- options: zod.infer<typeof options>;
8
- };
9
- export default function CodingClose({ options: opts }: Props): null;
10
- export {};
11
- //# sourceMappingURL=close.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"close.d.ts","sourceRoot":"","sources":["../../../src/commands/coding/close.tsx"],"names":[],"mappings":"AAIA,OAAO,GAAG,MAAM,KAAK,CAAC;AAItB,eAAO,MAAM,OAAO;;;mBAGlB,CAAC;AAEH,KAAK,KAAK,GAAG;IACZ,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CACnC,CAAC;AAqEF,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAAC,OAAO,EAAE,IAAI,EAAC,EAAE,KAAK,QAUzD"}
@@ -1,76 +0,0 @@
1
- import { useEffect } from 'react';
2
- import { useApp } from 'ink';
3
- import * as p from '@clack/prompts';
4
- import chalk from 'chalk';
5
- import zod from 'zod';
6
- import { executeCodingTool } from '../../server/tools/coding-tools.js';
7
- import { listRunningSessions } from '../../utils/coding-sessions.js';
8
- export const options = zod.object({
9
- sessionId: zod.string().optional().describe('Session ID to close'),
10
- all: zod.boolean().optional().describe('Close all running sessions'),
11
- });
12
- async function runCloseSession(opts) {
13
- if (opts.all) {
14
- const sessions = listRunningSessions();
15
- if (sessions.length === 0) {
16
- p.log.info('No running sessions.');
17
- return;
18
- }
19
- const confirmed = await p.confirm({ message: `Close all ${sessions.length} running sessions?` });
20
- if (p.isCancel(confirmed) || !confirmed) {
21
- p.cancel('Cancelled');
22
- return;
23
- }
24
- const spinner = p.spinner();
25
- spinner.start('Closing all sessions...');
26
- const result = await executeCodingTool('coding_close_all', {});
27
- const res = result.result;
28
- spinner.stop(chalk.green(`Closed ${res.closed} sessions`));
29
- for (const s of res.sessions) {
30
- if (s.worktreePath) {
31
- p.log.warn(`${s.sessionId.slice(0, 8)}... — ${s.message}`);
32
- }
33
- }
34
- return;
35
- }
36
- let sessionId = opts.sessionId;
37
- if (!sessionId) {
38
- const sessions = listRunningSessions();
39
- if (sessions.length === 0) {
40
- p.log.error('No running sessions found.');
41
- return;
42
- }
43
- const selected = await p.select({
44
- message: 'Select session to close',
45
- options: sessions.map((s) => ({
46
- value: s.sessionId,
47
- label: `${s.sessionId.slice(0, 8)}... (${s.agent}) ${chalk.blue('running')}`,
48
- })),
49
- });
50
- if (p.isCancel(selected)) {
51
- p.cancel('Cancelled');
52
- return;
53
- }
54
- sessionId = selected;
55
- }
56
- const spinner = p.spinner();
57
- spinner.start('Closing session...');
58
- const result = await executeCodingTool('coding_close_session', { sessionId });
59
- if (!result.success) {
60
- spinner.stop(chalk.red('Failed'));
61
- p.log.error(result.error || 'Unknown error');
62
- return;
63
- }
64
- spinner.stop(chalk.green('Closed'));
65
- p.log.success(`Session ${sessionId.slice(0, 8)}... closed`);
66
- }
67
- export default function CodingClose({ options: opts }) {
68
- const { exit } = useApp();
69
- useEffect(() => {
70
- runCloseSession(opts)
71
- .catch((err) => p.log.error(err instanceof Error ? err.message : 'Unknown error'))
72
- .finally(() => setTimeout(() => exit(), 100));
73
- }, [opts, exit]);
74
- return null;
75
- }
76
- //# sourceMappingURL=close.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"close.js","sourceRoot":"","sources":["../../../src/commands/coding/close.tsx"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- import zod from 'zod';
2
- export declare const options: zod.ZodObject<{
3
- sessionId: zod.ZodOptional<zod.ZodString>;
4
- prompt: zod.ZodOptional<zod.ZodString>;
5
- dir: zod.ZodOptional<zod.ZodString>;
6
- }, zod.core.$strip>;
7
- type Props = {
8
- options: zod.infer<typeof options>;
9
- };
10
- export default function CodingResume({ options: opts }: Props): null;
11
- export {};
12
- //# sourceMappingURL=resume.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resume.d.ts","sourceRoot":"","sources":["../../../src/commands/coding/resume.tsx"],"names":[],"mappings":"AAIA,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,eAAO,MAAM,OAAO;;;;mBAIlB,CAAC;AAEH,KAAK,KAAK,GAAG;IACZ,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CACnC,CAAC;AA2FF,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EAAC,OAAO,EAAE,IAAI,EAAC,EAAE,KAAK,QAU1D"}