@redplanethq/corebrain 2.8.12 → 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 (203) 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 +83 -19
  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/claude-code.d.ts +1 -0
  157. package/dist/utils/coding-agents/claude-code.d.ts.map +1 -1
  158. package/dist/utils/coding-agents/claude-code.js +9 -0
  159. package/dist/utils/coding-agents/claude-code.js.map +1 -1
  160. package/dist/utils/coding-agents/codex.d.ts +6 -8
  161. package/dist/utils/coding-agents/codex.d.ts.map +1 -1
  162. package/dist/utils/coding-agents/codex.js +16 -19
  163. package/dist/utils/coding-agents/codex.js.map +1 -1
  164. package/dist/utils/coding-agents/index.d.ts +1 -0
  165. package/dist/utils/coding-agents/index.d.ts.map +1 -1
  166. package/dist/utils/coding-agents/index.js +3 -0
  167. package/dist/utils/coding-agents/index.js.map +1 -1
  168. package/dist/utils/coding-agents/types.d.ts +6 -0
  169. package/dist/utils/coding-agents/types.d.ts.map +1 -1
  170. package/dist/utils/coding-agents/types.js.map +1 -1
  171. package/dist/utils/coding-runner.d.ts +13 -9
  172. package/dist/utils/coding-runner.d.ts.map +1 -1
  173. package/dist/utils/coding-runner.js +45 -78
  174. package/dist/utils/coding-runner.js.map +1 -1
  175. package/dist/utils/env-bootstrap.d.ts +29 -0
  176. package/dist/utils/env-bootstrap.d.ts.map +1 -0
  177. package/dist/utils/env-bootstrap.js +204 -0
  178. package/dist/utils/env-bootstrap.js.map +1 -0
  179. package/package.json +8 -1
  180. package/dist/commands/coding/close.d.ts +0 -11
  181. package/dist/commands/coding/close.d.ts.map +0 -1
  182. package/dist/commands/coding/close.js +0 -76
  183. package/dist/commands/coding/close.js.map +0 -1
  184. package/dist/commands/coding/resume.d.ts +0 -12
  185. package/dist/commands/coding/resume.d.ts.map +0 -1
  186. package/dist/commands/coding/resume.js +0 -86
  187. package/dist/commands/coding/resume.js.map +0 -1
  188. package/dist/commands/coding/start.d.ts +0 -17
  189. package/dist/commands/coding/start.d.ts.map +0 -1
  190. package/dist/commands/coding/start.js +0 -135
  191. package/dist/commands/coding/start.js.map +0 -1
  192. package/dist/server/gateway-client.d.ts +0 -84
  193. package/dist/server/gateway-client.d.ts.map +0 -1
  194. package/dist/server/gateway-client.js +0 -340
  195. package/dist/server/gateway-client.js.map +0 -1
  196. package/dist/server/tools/imessage-tools.d.ts +0 -34
  197. package/dist/server/tools/imessage-tools.d.ts.map +0 -1
  198. package/dist/server/tools/imessage-tools.js +0 -262
  199. package/dist/server/tools/imessage-tools.js.map +0 -1
  200. package/dist/utils/app-bundle.d.ts +0 -25
  201. package/dist/utils/app-bundle.d.ts.map +0 -1
  202. package/dist/utils/app-bundle.js +0 -117
  203. package/dist/utils/app-bundle.js.map +0 -1
@@ -0,0 +1,280 @@
1
+ import { spawn as ptySpawn } from 'node-pty';
2
+ import { execFileSync } from 'node:child_process';
3
+ import { existsSync, statSync, chmodSync } from 'node:fs';
4
+ import { createRequire } from 'node:module';
5
+ import { dirname, join } from 'node:path';
6
+ const MAX_BUFFER_BYTES = 256 * 1024; // 256 KB scrollback
7
+ const MAX_AGE_MS = 60 * 60 * 1000; // 1 hour
8
+ /**
9
+ * When the gateway is launched from launchd / systemd / a non-login shell,
10
+ * `process.env.PATH` often omits per-user tool installs (npm global bin,
11
+ * `~/.claude/local/node_modules/.bin`, etc.), so `posix_spawnp('claude', …)`
12
+ * fails with ENOENT. Capture the user's login-shell PATH once at startup so
13
+ * agents like `claude` / `codex` resolve. Mirrors the Rust Tauri
14
+ * `capture_login_path` fix.
15
+ *
16
+ * Prefers `$SHELL` (what the user actually uses), then falls back through
17
+ * the common POSIX shells. Returns `process.env.PATH` if none are usable.
18
+ */
19
+ function captureLoginPath() {
20
+ const candidates = [
21
+ process.env.SHELL,
22
+ '/bin/zsh',
23
+ '/bin/bash',
24
+ '/bin/sh',
25
+ ].filter((s) => Boolean(s && existsSync(s)));
26
+ for (const shell of candidates) {
27
+ try {
28
+ const out = execFileSync(shell, ['-lc', 'printf %s "$PATH"'], {
29
+ encoding: 'utf8',
30
+ timeout: 3_000,
31
+ });
32
+ const path = out.trim();
33
+ if (path)
34
+ return path;
35
+ }
36
+ catch {
37
+ /* try next */
38
+ }
39
+ }
40
+ return process.env.PATH ?? '';
41
+ }
42
+ const LOGIN_PATH = captureLoginPath();
43
+ /**
44
+ * node-pty's Unix `spawn(...)` execs a bundled bootstrap (`spawn-helper`)
45
+ * which then sets up the PTY and execs the real target. If that helper isn't
46
+ * marked executable every spawn fails with the same cryptic `posix_spawnp
47
+ * failed.` — for `echo`, `sh`, `claude`, anything. This normally arrives
48
+ * with mode 0755 in the npm tarball, but some installers (pnpm's
49
+ * content-addressed store on certain filesystems, archival tools that strip
50
+ * mode bits) drop the +x. Self-heal at boot so the user never hits that.
51
+ */
52
+ function ensureSpawnHelperExecutable() {
53
+ if (process.platform === 'win32')
54
+ return;
55
+ const plat = process.platform; // 'darwin' | 'linux'
56
+ const arch = process.arch; // 'arm64' | 'x64'
57
+ try {
58
+ const req = createRequire(import.meta.url);
59
+ const ptyPkgPath = req.resolve('node-pty/package.json');
60
+ const ptyRoot = dirname(ptyPkgPath);
61
+ const helper = join(ptyRoot, 'prebuilds', `${plat}-${arch}`, 'spawn-helper');
62
+ if (!existsSync(helper))
63
+ return;
64
+ const mode = statSync(helper).mode;
65
+ if ((mode & 0o111) === 0) {
66
+ chmodSync(helper, 0o755);
67
+ }
68
+ }
69
+ catch {
70
+ /* best-effort — spawn errors will surface the real problem if this fails */
71
+ }
72
+ }
73
+ ensureSpawnHelperExecutable();
74
+ /**
75
+ * Resolve a bare command to an absolute path using `command -v` under the
76
+ * captured login PATH. We do this before spawn so `posix_spawnp` doesn't have
77
+ * to do its own PATH lookup — if the resolution fails we surface a clear
78
+ * "not found on PATH" error instead of the cryptic `posix_spawnp failed`.
79
+ */
80
+ function resolveCommand(command) {
81
+ // Already absolute or relative — trust the caller.
82
+ if (command.includes('/'))
83
+ return command;
84
+ try {
85
+ const out = execFileSync('/bin/sh', ['-c', `command -v ${command}`], {
86
+ encoding: 'utf8',
87
+ timeout: 3_000,
88
+ env: { ...process.env, PATH: LOGIN_PATH || process.env.PATH || '' },
89
+ });
90
+ const resolved = out.trim();
91
+ return resolved || null;
92
+ }
93
+ catch {
94
+ return null;
95
+ }
96
+ }
97
+ class PtyManager {
98
+ handles = new Map();
99
+ spawn(opts) {
100
+ const existing = this.handles.get(opts.sessionId);
101
+ if (existing && !existing.exited && existing.pty) {
102
+ throw new Error(`Session "${opts.sessionId}" is already running — kill it first or attach to it.`);
103
+ }
104
+ // If there's a stale exited handle, drop it.
105
+ if (existing)
106
+ this.handles.delete(opts.sessionId);
107
+ const env = {
108
+ ...process.env,
109
+ // Override PATH with the login-shell PATH so per-user tool installs
110
+ // (claude, codex, npm global bin) resolve even when the gateway was
111
+ // launched by launchd/systemd with a minimal environment.
112
+ PATH: LOGIN_PATH || process.env.PATH || '',
113
+ ...(opts.env ?? {}),
114
+ TERM: 'xterm-256color',
115
+ };
116
+ const resolved = resolveCommand(opts.command);
117
+ if (!resolved) {
118
+ throw new Error(`command "${opts.command}" not found on PATH (tried login shell). ` +
119
+ `Install it or set an absolute path in the agent config.`);
120
+ }
121
+ const pty = ptySpawn(resolved, opts.args, {
122
+ name: 'xterm-256color',
123
+ cols: opts.cols ?? 80,
124
+ rows: opts.rows ?? 24,
125
+ cwd: opts.cwd,
126
+ env,
127
+ });
128
+ const handle = {
129
+ pty,
130
+ outputBuffer: Buffer.alloc(0),
131
+ pendingUtf8: Buffer.alloc(0),
132
+ createdAt: Date.now(),
133
+ cancelled: false,
134
+ exited: false,
135
+ subscribers: new Set(),
136
+ exitSubscribers: new Set(),
137
+ lastActivityAt: Date.now(),
138
+ meta: {
139
+ command: opts.command,
140
+ args: opts.args,
141
+ cwd: opts.cwd,
142
+ agent: opts.agent,
143
+ },
144
+ };
145
+ pty.onData((data) => {
146
+ if (handle.cancelled)
147
+ return;
148
+ handle.lastActivityAt = Date.now();
149
+ // Append raw bytes to scrollback (for future reconnects)
150
+ const chunk = Buffer.from(data, 'utf8');
151
+ handle.outputBuffer = Buffer.concat([handle.outputBuffer, chunk]);
152
+ if (handle.outputBuffer.length > MAX_BUFFER_BYTES) {
153
+ const drain = handle.outputBuffer.length - Math.floor(MAX_BUFFER_BYTES / 2);
154
+ handle.outputBuffer = handle.outputBuffer.subarray(drain);
155
+ }
156
+ // node-pty already emits UTF-8 strings, but we still guard against subscriber
157
+ // errors so one bad consumer can't kill the others.
158
+ for (const sub of handle.subscribers) {
159
+ try {
160
+ sub(data);
161
+ }
162
+ catch {
163
+ /* ignore subscriber errors */
164
+ }
165
+ }
166
+ });
167
+ pty.onExit(({ exitCode, signal }) => {
168
+ handle.exited = true;
169
+ handle.exitInfo = { exitCode, signal };
170
+ if (handle.cancelled)
171
+ return;
172
+ for (const sub of handle.exitSubscribers) {
173
+ try {
174
+ sub({ exitCode, signal });
175
+ }
176
+ catch {
177
+ /* ignore */
178
+ }
179
+ }
180
+ });
181
+ this.handles.set(opts.sessionId, handle);
182
+ return { pid: pty.pid };
183
+ }
184
+ /**
185
+ * Attach a subscriber to an existing session. Replays scrollback synchronously,
186
+ * then streams new bytes via onData. Returns null if no session exists.
187
+ */
188
+ attach(sessionId, onData, onExit) {
189
+ const handle = this.handles.get(sessionId);
190
+ if (!handle)
191
+ return null;
192
+ const replayed = handle.outputBuffer.toString('utf8');
193
+ if (!handle.exited) {
194
+ handle.subscribers.add(onData);
195
+ if (onExit)
196
+ handle.exitSubscribers.add(onExit);
197
+ }
198
+ else if (onExit && handle.exitInfo) {
199
+ // Queue exit on next tick so caller can handle replay first
200
+ const info = handle.exitInfo;
201
+ setImmediate(() => onExit(info));
202
+ }
203
+ const detach = () => {
204
+ handle.subscribers.delete(onData);
205
+ if (onExit)
206
+ handle.exitSubscribers.delete(onExit);
207
+ };
208
+ return {
209
+ replayed,
210
+ exited: handle.exited,
211
+ exitInfo: handle.exitInfo,
212
+ meta: handle.meta,
213
+ createdAt: handle.createdAt,
214
+ pid: handle.pty.pid,
215
+ detach,
216
+ };
217
+ }
218
+ write(sessionId, data) {
219
+ const handle = this.handles.get(sessionId);
220
+ if (!handle || handle.exited)
221
+ return false;
222
+ handle.pty.write(data);
223
+ return true;
224
+ }
225
+ resize(sessionId, cols, rows) {
226
+ const handle = this.handles.get(sessionId);
227
+ if (!handle || handle.exited)
228
+ return false;
229
+ try {
230
+ handle.pty.resize(cols, rows);
231
+ return true;
232
+ }
233
+ catch {
234
+ return false;
235
+ }
236
+ }
237
+ kill(sessionId, signal = 'SIGTERM') {
238
+ const handle = this.handles.get(sessionId);
239
+ if (!handle)
240
+ return false;
241
+ try {
242
+ handle.cancelled = true;
243
+ handle.pty.kill(signal);
244
+ return true;
245
+ }
246
+ catch {
247
+ return false;
248
+ }
249
+ }
250
+ killAll() {
251
+ for (const sessionId of this.handles.keys()) {
252
+ this.kill(sessionId, 'SIGTERM');
253
+ }
254
+ }
255
+ isRunning(sessionId) {
256
+ const handle = this.handles.get(sessionId);
257
+ return Boolean(handle && !handle.exited);
258
+ }
259
+ getPid(sessionId) {
260
+ const handle = this.handles.get(sessionId);
261
+ return handle?.pty.pid;
262
+ }
263
+ getLastActivity(sessionId) {
264
+ return this.handles.get(sessionId)?.lastActivityAt;
265
+ }
266
+ /**
267
+ * Drop handles that have aged out past MAX_AGE_MS and whose process has
268
+ * already exited. Live PTYs are never reaped — only observed as stale.
269
+ */
270
+ reap() {
271
+ const now = Date.now();
272
+ for (const [id, h] of this.handles) {
273
+ if (h.exited && now - h.createdAt > MAX_AGE_MS) {
274
+ this.handles.delete(id);
275
+ }
276
+ }
277
+ }
278
+ }
279
+ export const ptyManager = new PtyManager();
280
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/server/pty/manager.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"coding-tools.d.ts","sourceRoot":"","sources":["../../../src/server/tools/coding-tools.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAQjD,OAAO,EAON,KAAK,MAAM,EACX,MAAM,uBAAuB,CAAC;AAwK/B,eAAO,MAAM,WAAW,EAAE,WAAW,EA0CpC,CAAC;AA4hBF,wBAAsB,iBAAiB,CACtC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,CAAC,EAAE,MAAM,GACb,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC,CA6B/D"}
1
+ {"version":3,"file":"coding-tools.d.ts","sourceRoot":"","sources":["../../../src/server/tools/coding-tools.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAUjD,OAAO,EAON,KAAK,MAAM,EACX,MAAM,uBAAuB,CAAC;AA2K/B,eAAO,MAAM,WAAW,EAAE,WAAW,EA0CpC,CAAC;AAqlBF,wBAAsB,iBAAiB,CACtC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,CAAC,EAAE,MAAM,GACb,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC,CA6B/D"}
@@ -1,12 +1,16 @@
1
1
  import zod from 'zod';
2
2
  import { randomUUID } from 'node:crypto';
3
3
  import { execSync } from 'node:child_process';
4
- import { existsSync, mkdirSync, cpSync } from 'node:fs';
4
+ import { existsSync, mkdirSync, cpSync, readFileSync, appendFileSync } from 'node:fs';
5
5
  import { resolve } from 'node:path';
6
6
  import { getPreferences } from '../../config/preferences.js';
7
+ import { listFolders, resolveFolderForPath } from '../../config/folders.js';
8
+ import { folderScopeError } from './scope-error.js';
7
9
  import { getSession, upsertSession, deleteSession, listRunningSessions, } from '../../utils/coding-sessions.js';
8
10
  import { getAgentConfig, buildStartArgs, buildResumeArgs, startAgentProcess, isProcessRunning, stopProcess, } from '../../utils/coding-runner.js';
9
- import { readAgentSessionTurns, agentSessionExists, getAgentReader, scanAllSessions, searchSessions, findLatestCodexSession, } from '../../utils/coding-agents/index.js';
11
+ import { gatewayLog } from '../../server/gateway-log.js';
12
+ import { readAgentSessionTurns, agentSessionUpdatedSince, getAgentReader, scanAllSessions, searchSessions, findLatestCodexSession, } from '../../utils/coding-agents/index.js';
13
+ import { ptyManager } from '../../server/pty/manager.js';
10
14
  // ============ Schemas ============
11
15
  const AskSchema = zod.object({
12
16
  agent: zod.string().optional(),
@@ -51,7 +55,7 @@ const jsonSchemas = {
51
55
  },
52
56
  dir: {
53
57
  type: 'string',
54
- description: 'Working directory for the session (must exist)',
58
+ description: 'Working directory for the session. Must exist and (when folders are registered) resolve to a folder registered via `corebrain folder add` with the `coding` scope.',
55
59
  },
56
60
  sessionId: {
57
61
  type: 'string',
@@ -78,7 +82,7 @@ const jsonSchemas = {
78
82
  description: 'New branch name to create in the worktree (required when worktree is true)',
79
83
  },
80
84
  },
81
- required: ['agent', 'prompt', 'dir'],
85
+ required: ['prompt', 'dir'],
82
86
  },
83
87
  coding_close_session: {
84
88
  type: 'object',
@@ -166,7 +170,7 @@ export const codingTools = [
166
170
  },
167
171
  {
168
172
  name: 'coding_read_session',
169
- description: 'Read conversation turns (user/assistant messages) from a coding session. Returns structured turns instead of raw log lines.',
173
+ description: 'Read conversation turns (user/assistant messages) from a coding session. Returns structured turns instead of raw log lines. The `status` field is one of: "initializing" (agent booting, transcript not yet written), "running" (agent process alive and writing), "completed" (process exited with a transcript), "failed" (process exited without any transcript).',
170
174
  inputSchema: jsonSchemas.coding_read_session,
171
175
  },
172
176
  {
@@ -230,9 +234,28 @@ function detectAgentForSession(sessionId, dir) {
230
234
  return prefs.defaultCodingAgent ?? 'claude-code';
231
235
  }
232
236
  // ============ Worktree Helpers ============
237
+ function ensureWorktreesIgnored(dir) {
238
+ // Worktrees live at `<dir>/.worktrees/<branch>/` so they're auto-scoped by the
239
+ // parent registered folder. Make sure git ignores them in the main repo.
240
+ const gitignorePath = resolve(dir, '.gitignore');
241
+ const entry = '.worktrees/';
242
+ try {
243
+ const existing = existsSync(gitignorePath)
244
+ ? readFileSync(gitignorePath, 'utf8')
245
+ : '';
246
+ const lines = existing.split('\n').map(l => l.trim());
247
+ if (lines.includes(entry) || lines.includes('.worktrees'))
248
+ return;
249
+ const sep = existing && !existing.endsWith('\n') ? '\n' : '';
250
+ appendFileSync(gitignorePath, `${sep}${entry}\n`, 'utf8');
251
+ }
252
+ catch {
253
+ // Non-fatal — if we can't write .gitignore, the worktree still works.
254
+ }
255
+ }
233
256
  function setupWorktree(dir, baseBranch, branch) {
234
257
  const encodedBranch = branch.replace(/\//g, '-');
235
- const worktreePath = resolve(dir, '..', 'worktrees', encodedBranch);
258
+ const worktreePath = resolve(dir, '.worktrees', encodedBranch);
236
259
  // If the worktree already exists (valid git worktree), reuse it so multiple
237
260
  // sessions can run against the same branch without hitting "already checked out".
238
261
  if (existsSync(resolve(worktreePath, '.git'))) {
@@ -249,6 +272,7 @@ function setupWorktree(dir, baseBranch, branch) {
249
272
  return { worktreePath, worktreeBranch: branch };
250
273
  }
251
274
  try {
275
+ ensureWorktreesIgnored(dir);
252
276
  mkdirSync(worktreePath, { recursive: true });
253
277
  execSync(`git -C ${JSON.stringify(dir)} worktree add ${JSON.stringify(worktreePath)} -b ${JSON.stringify(branch)} ${JSON.stringify(baseBranch)}`, { stdio: 'pipe' });
254
278
  // Copy .claude settings to worktree so plugins are available
@@ -287,10 +311,21 @@ function removeWorktree(worktreePath, repoDir) {
287
311
  }
288
312
  }
289
313
  // ============ Handlers ============
290
- async function handleAsk(params, logger) {
314
+ async function handleAsk(params, logger = gatewayLog) {
291
315
  if (!existsSync(params.dir)) {
292
316
  return { success: false, error: `Directory "${params.dir}" does not exist` };
293
317
  }
318
+ // Scope enforcement: coding requires a folder with `coding` scope
319
+ if (listFolders().length > 0) {
320
+ const resolved = resolveFolderForPath(params.dir, 'coding');
321
+ if (!resolved) {
322
+ const err = folderScopeError(params.dir, 'coding');
323
+ return {
324
+ success: false,
325
+ error: `${err.error.code}: ${err.error.message}`,
326
+ };
327
+ }
328
+ }
294
329
  if (params.worktree && (!params.baseBranch || !params.branch)) {
295
330
  return {
296
331
  success: false,
@@ -394,37 +429,50 @@ async function handleAsk(params, logger) {
394
429
  worktreePath,
395
430
  worktreeBranch,
396
431
  });
397
- // Start idle watchdog — kills the process if stdout goes silent for 30s
398
- // if (pid) startIdleWatchdog(sessionId, pid);
399
- // For agents with a session reader, wait until the session file appears
432
+ // Wait until the agent has produced output.
433
+ // - New session: the PTY has emitted any bytes (lastActivity > startedAt) works
434
+ // for both claude-code and codex, regardless of whether the agent has written
435
+ // its own transcript file yet.
436
+ // - Resume: the agent's transcript file has been touched (mtime > startedAt). The
437
+ // file pre-exists from the original run, so PTY activity alone isn't enough —
438
+ // the resumed process must actually write new turns.
400
439
  const hasReader = getAgentReader(agentName) !== null;
401
- if (hasReader && !isResume) {
440
+ if (hasReader) {
402
441
  const deadline = Date.now() + 30_000;
442
+ const isReady = () => {
443
+ if (isResume) {
444
+ return agentSessionUpdatedSince(agentName, workingDir, sessionId, startedAt);
445
+ }
446
+ const lastActivity = ptyManager.getLastActivity(sessionId);
447
+ return Boolean(lastActivity && lastActivity > startedAt);
448
+ };
403
449
  const sessionReady = await new Promise(resolve => {
404
450
  function check() {
405
- if (agentSessionExists(agentName, workingDir, sessionId))
451
+ if (isReady())
406
452
  return resolve(true);
407
453
  if (!isProcessRunning(sessionId))
408
- return resolve(agentSessionExists(agentName, workingDir, sessionId));
454
+ return resolve(isReady());
409
455
  if (Date.now() >= deadline)
410
- return resolve(agentSessionExists(agentName, workingDir, sessionId));
456
+ return resolve(isReady());
411
457
  setTimeout(check, 500);
412
458
  }
413
459
  setTimeout(check, 500);
414
460
  });
415
461
  if (!sessionReady) {
416
462
  stopProcess(sessionId);
417
- if (worktreePath)
463
+ if (worktreePath && !isResume)
418
464
  removeWorktree(worktreePath, params.dir);
419
465
  deleteSession(sessionId);
420
466
  return {
421
467
  success: false,
422
- error: 'Session failed to start: agent did not produce output within 30 seconds',
468
+ error: isResume
469
+ ? 'Resume failed: agent did not write to the session transcript within 30 seconds'
470
+ : 'Session failed to start: agent did not produce output within 30 seconds',
423
471
  };
424
472
  }
425
- // For codex-cli: find the actual session ID codex assigned (its own UUID in the filename)
426
- // and re-key our running session record to use it.
427
- if (agentName === 'codex-cli') {
473
+ // For codex-cli on a new session: find the actual session ID codex assigned
474
+ // (its own UUID in the filename) and re-key our running session record to use it.
475
+ if (agentName === 'codex-cli' && !isResume) {
428
476
  const found = await findLatestCodexSession(workingDir, startedAt);
429
477
  if (found && found.sessionId !== sessionId) {
430
478
  sessionId = found.sessionId;
@@ -524,6 +572,9 @@ async function handleReadSession(params) {
524
572
  const { turns, totalLines, fileExists, fileSizeBytes, fileSizeHuman, error: readError, } = await readAgentSessionTurns(agent, sessionDir, params.sessionId);
525
573
  let status;
526
574
  let statusMessage;
575
+ // 30s grace window before we flip initializing → failed when the process is gone
576
+ // but no transcript was ever written. Matches handleAsk's ready-wait deadline.
577
+ const INIT_GRACE_MS = 30_000;
527
578
  if (running && !fileExists) {
528
579
  status = 'initializing';
529
580
  statusMessage = 'Agent is booting. Wait a few seconds and read again.';
@@ -531,6 +582,19 @@ async function handleReadSession(params) {
531
582
  else if (running) {
532
583
  status = 'running';
533
584
  }
585
+ else if (!fileExists && stored?.startedAt) {
586
+ // Process is gone and produced no transcript. Don't lie with "completed".
587
+ if (stored)
588
+ deleteSession(params.sessionId);
589
+ if (Date.now() - stored.startedAt < INIT_GRACE_MS) {
590
+ status = 'initializing';
591
+ statusMessage = 'Agent is booting. Wait a few seconds and read again.';
592
+ }
593
+ else {
594
+ status = 'failed';
595
+ statusMessage = 'Agent exited before writing any output to the session transcript.';
596
+ }
597
+ }
534
598
  else {
535
599
  // Process finished — clean up running session record
536
600
  if (stored)
@@ -1 +1 @@
1
- {"version":3,"file":"coding-tools.js","sourceRoot":"","sources":["../../../src/server/tools/coding-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"coding-tools.js","sourceRoot":"","sources":["../../../src/server/tools/coding-tools.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"exec-tools.d.ts","sourceRoot":"","sources":["../../../src/server/tools/exec-tools.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AAKtB,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AA4CjD,eAAO,MAAM,iBAAiB;;;;mBAI5B,CAAC;AA2BH,eAAO,MAAM,SAAS,EAAE,WAAW,EAMlC,CAAC;AA+LF,wBAAsB,eAAe,CACpC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC,CAkB/D"}
1
+ {"version":3,"file":"exec-tools.d.ts","sourceRoot":"","sources":["../../../src/server/tools/exec-tools.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AAKtB,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAiDjD,eAAO,MAAM,iBAAiB;;;;mBAI5B,CAAC;AA4BH,eAAO,MAAM,SAAS,EAAE,WAAW,EAMlC,CAAC;AAwNF,wBAAsB,eAAe,CACpC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC,CAkB/D"}
@@ -3,8 +3,12 @@ import { spawn } from 'node:child_process';
3
3
  import { existsSync } from 'node:fs';
4
4
  import { getPreferences } from '../../config/preferences.js';
5
5
  import { getConfigPath } from '../../config/paths.js';
6
+ import { listFolders, resolveFolderForPath } from '../../config/folders.js';
7
+ import { folderScopeError } from './scope-error.js';
6
8
  // Default directory for exec commands - uses same directory as config
7
9
  const DEFAULT_EXEC_DIR = getConfigPath();
10
+ // Warn once per process about the folders-empty fallback
11
+ let warnedFoldersEmpty = false;
8
12
  // Default blocked command patterns — always enforced unless allowUnsafe is set
9
13
  const DEFAULT_BLOCKED = [
10
14
  // Destructive file operations
@@ -57,7 +61,7 @@ const jsonSchemas = {
57
61
  },
58
62
  dir: {
59
63
  type: 'string',
60
- description: 'Working directory for the command (defaults to ~/.corebrain)',
64
+ description: 'Working directory. Must resolve to a folder registered via `corebrain folder add` with the `exec` scope. If no folders are registered, falls back to ExecConfig.defaultDir (deprecated).',
61
65
  },
62
66
  timeout: {
63
67
  type: 'number',
@@ -210,8 +214,31 @@ async function handleExecCommand(params) {
210
214
  error: `Command not allowed: ${reason}`,
211
215
  };
212
216
  }
213
- // Determine working directory
214
- const dir = params.dir || config.defaultDir || DEFAULT_EXEC_DIR;
217
+ // Determine working directory with scope enforcement
218
+ let dir;
219
+ const folders = listFolders();
220
+ if (folders.length > 0) {
221
+ // Scope enforcement: dir must resolve to a folder with `exec` scope
222
+ const target = params.dir || process.cwd();
223
+ const resolved = resolveFolderForPath(target, 'exec');
224
+ if (!resolved) {
225
+ const err = folderScopeError(target, 'exec');
226
+ return {
227
+ success: false,
228
+ error: `${err.error.code}: ${err.error.message}`,
229
+ };
230
+ }
231
+ dir = resolved.absPath;
232
+ }
233
+ else {
234
+ // Backwards-compatibility fallback — no folders registered
235
+ dir = params.dir || config.defaultDir || DEFAULT_EXEC_DIR;
236
+ if (!warnedFoldersEmpty) {
237
+ warnedFoldersEmpty = true;
238
+ console.warn('[corebrain] DEPRECATION: no folders registered; falling back to ExecConfig.defaultDir. ' +
239
+ 'Register folders with `corebrain folder add <path> --scopes exec` to enforce path scope.');
240
+ }
241
+ }
215
242
  // Ensure directory exists
216
243
  if (!existsSync(dir)) {
217
244
  return {