aicodeman 1.48.0 → 1.49.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -3
- package/dist/config/cli-registry/schema.d.ts +1 -0
- package/dist/config/cli-registry/schema.d.ts.map +1 -1
- package/dist/config/cli-registry/schema.js +5 -1
- package/dist/config/cli-registry/schema.js.map +1 -1
- package/dist/config/cli-registry/stock.d.ts.map +1 -1
- package/dist/config/cli-registry/stock.js +71 -5
- package/dist/config/cli-registry/stock.js.map +1 -1
- package/dist/config/cli-registry/types.d.ts +4 -4
- package/dist/config/cli-registry/types.d.ts.map +1 -1
- package/dist/config/foreign-tmux.d.ts +48 -0
- package/dist/config/foreign-tmux.d.ts.map +1 -0
- package/dist/config/foreign-tmux.js +48 -0
- package/dist/config/foreign-tmux.js.map +1 -0
- package/dist/custom-model-injection-apply.d.ts +4 -2
- package/dist/custom-model-injection-apply.d.ts.map +1 -1
- package/dist/custom-model-injection-apply.js +35 -21
- package/dist/custom-model-injection-apply.js.map +1 -1
- package/dist/docker-hosts.d.ts +8 -1
- package/dist/docker-hosts.d.ts.map +1 -1
- package/dist/docker-hosts.js +5 -5
- package/dist/docker-hosts.js.map +1 -1
- package/dist/foreign-tmux-discovery.d.ts +140 -0
- package/dist/foreign-tmux-discovery.d.ts.map +1 -0
- package/dist/foreign-tmux-discovery.js +366 -0
- package/dist/foreign-tmux-discovery.js.map +1 -0
- package/dist/foreign-tmux.d.ts +381 -0
- package/dist/foreign-tmux.d.ts.map +1 -0
- package/dist/foreign-tmux.js +775 -0
- package/dist/foreign-tmux.js.map +1 -0
- package/dist/git-fetch-scheduler.d.ts +2 -0
- package/dist/git-fetch-scheduler.d.ts.map +1 -1
- package/dist/git-fetch-scheduler.js +1 -1
- package/dist/git-fetch-scheduler.js.map +1 -1
- package/dist/git-fetch.d.ts +1 -1
- package/dist/git-fetch.d.ts.map +1 -1
- package/dist/git-workspace-status.d.ts +2 -2
- package/dist/git-workspace-status.d.ts.map +1 -1
- package/dist/hooks-config.d.ts +2 -1
- package/dist/hooks-config.d.ts.map +1 -1
- package/dist/hooks-config.js +2 -1
- package/dist/hooks-config.js.map +1 -1
- package/dist/live-worktree.d.ts +53 -0
- package/dist/live-worktree.d.ts.map +1 -0
- package/dist/live-worktree.js +97 -0
- package/dist/live-worktree.js.map +1 -0
- package/dist/mux-interface.d.ts +12 -1
- package/dist/mux-interface.d.ts.map +1 -1
- package/dist/reboot-restore.d.ts +1 -1
- package/dist/reboot-restore.d.ts.map +1 -1
- package/dist/reboot-restore.js +9 -0
- package/dist/reboot-restore.js.map +1 -1
- package/dist/remote-files.d.ts +150 -5
- package/dist/remote-files.d.ts.map +1 -1
- package/dist/remote-files.js +505 -7
- package/dist/remote-files.js.map +1 -1
- package/dist/remote-hosts.d.ts +15 -9
- package/dist/remote-hosts.d.ts.map +1 -1
- package/dist/remote-hosts.js +42 -20
- package/dist/remote-hosts.js.map +1 -1
- package/dist/session-cli-registry-bridge.d.ts.map +1 -1
- package/dist/session-cli-registry-bridge.js +19 -8
- package/dist/session-cli-registry-bridge.js.map +1 -1
- package/dist/session-env-clamp.d.ts +1 -1
- package/dist/session-env-clamp.d.ts.map +1 -1
- package/dist/session-env-clamp.js +4 -3
- package/dist/session-env-clamp.js.map +1 -1
- package/dist/session.d.ts +91 -21
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +190 -33
- package/dist/session.js.map +1 -1
- package/dist/tmux-manager.d.ts +74 -12
- package/dist/tmux-manager.d.ts.map +1 -1
- package/dist/tmux-manager.js +256 -41
- package/dist/tmux-manager.js.map +1 -1
- package/dist/types/foreign-tmux.d.ts +101 -0
- package/dist/types/foreign-tmux.d.ts.map +1 -0
- package/dist/types/foreign-tmux.js +27 -0
- package/dist/types/foreign-tmux.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/session.d.ts +106 -2
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/session.js.map +1 -1
- package/dist/types/update.d.ts +4 -1
- package/dist/types/update.d.ts.map +1 -1
- package/dist/web/edit-history-sync.d.ts +27 -7
- package/dist/web/edit-history-sync.d.ts.map +1 -1
- package/dist/web/edit-history-sync.js +35 -19
- package/dist/web/edit-history-sync.js.map +1 -1
- package/dist/web/launch-defaults.d.ts +1 -1
- package/dist/web/launch-defaults.js +2 -2
- package/dist/web/launch-defaults.js.map +1 -1
- package/dist/web/linked-cases-writer.d.ts +43 -0
- package/dist/web/linked-cases-writer.d.ts.map +1 -0
- package/dist/web/linked-cases-writer.js +107 -0
- package/dist/web/linked-cases-writer.js.map +1 -0
- package/dist/web/paste-image-gc.d.ts +4 -1
- package/dist/web/paste-image-gc.d.ts.map +1 -1
- package/dist/web/paste-image-gc.js +4 -2
- package/dist/web/paste-image-gc.js.map +1 -1
- package/dist/web/public/admin-ui.js.gz +0 -0
- package/dist/web/public/api-client.c9b1cddc.js.gz +0 -0
- package/dist/web/public/{app.963b5ba8.js → app.9ea37070.js} +6 -6
- package/dist/web/public/app.9ea37070.js.br +0 -0
- package/dist/web/public/app.9ea37070.js.gz +0 -0
- package/dist/web/public/approvals-ui.js.gz +0 -0
- package/dist/web/public/constants.782170e1.js.gz +0 -0
- package/dist/web/public/cron-ui.js.gz +0 -0
- package/dist/web/public/edit-history-ui.js +27 -14
- package/dist/web/public/edit-history-ui.js.br +0 -0
- package/dist/web/public/edit-history-ui.js.gz +0 -0
- package/dist/web/public/entrance-animations.js.gz +0 -0
- package/dist/web/public/foreign-sessions.js +476 -0
- package/dist/web/public/foreign-sessions.js.br +0 -0
- package/dist/web/public/foreign-sessions.js.gz +0 -0
- package/dist/web/public/git-status-ui.js +5 -3
- package/dist/web/public/git-status-ui.js.br +0 -0
- package/dist/web/public/git-status-ui.js.gz +0 -0
- package/dist/web/public/header-divider.eb2d2463.js.gz +0 -0
- package/dist/web/public/home-sessions.js.gz +0 -0
- package/dist/web/public/host-wake-ui.js.gz +0 -0
- package/dist/web/public/i18n.a5e82c95.js +2 -0
- package/dist/web/public/i18n.a5e82c95.js.br +0 -0
- package/dist/web/public/i18n.a5e82c95.js.gz +0 -0
- package/dist/web/public/image-input.a5d0f8f3.js.gz +0 -0
- package/dist/web/public/index.html +36 -17
- package/dist/web/public/index.html.br +0 -0
- package/dist/web/public/index.html.gz +0 -0
- package/dist/web/public/input-cjk.8bc46081.js.gz +0 -0
- package/dist/web/public/{keyboard-accessory.d4ec5957.js → keyboard-accessory.b941676c.js} +3 -1
- package/dist/web/public/keyboard-accessory.b941676c.js.br +0 -0
- package/dist/web/public/{keyboard-accessory.d4ec5957.js.gz → keyboard-accessory.b941676c.js.gz} +0 -0
- package/dist/web/public/mobile-handlers.f7c3f692.js.gz +0 -0
- package/dist/web/public/mobile-ime-preview.2dbaf262.js.gz +0 -0
- package/dist/web/public/mobile-overview.js +10 -0
- package/dist/web/public/mobile-overview.js.br +0 -0
- package/dist/web/public/mobile-overview.js.gz +0 -0
- package/dist/web/public/{mobile.5ef2ce85.css → mobile.67c8eb5b.css} +1 -1
- package/dist/web/public/mobile.67c8eb5b.css.br +0 -0
- package/dist/web/public/{mobile.5ef2ce85.css.gz → mobile.67c8eb5b.css.gz} +0 -0
- package/dist/web/public/notification-manager.feb82c04.js.gz +0 -0
- package/dist/web/public/orchestrator-panel.js.gz +0 -0
- package/dist/web/public/{panels-ui.b100727d.js → panels-ui.8bcd4473.js} +4 -4
- package/dist/web/public/panels-ui.8bcd4473.js.br +0 -0
- package/dist/web/public/panels-ui.8bcd4473.js.gz +0 -0
- package/dist/web/public/ralph-panel.b350e2ef.js.gz +0 -0
- package/dist/web/public/ralph-wizard.b6c0dd19.js.gz +0 -0
- package/dist/web/public/readmymind-ui.js.gz +0 -0
- package/dist/web/public/reboot-restore-ui.js.gz +0 -0
- package/dist/web/public/respawn-ui.304ba0d4.js.gz +0 -0
- package/dist/web/public/sanitize-html.e7147e76.js.gz +0 -0
- package/dist/web/public/session-lineage.js.gz +0 -0
- package/dist/web/public/{session-ui.5ac82f2c.js → session-ui.a7c8c095.js} +11 -11
- package/dist/web/public/session-ui.a7c8c095.js.br +0 -0
- package/dist/web/public/session-ui.a7c8c095.js.gz +0 -0
- package/dist/web/public/{settings-ui.d1d4fb99.js → settings-ui.18f92052.js} +3 -3
- package/dist/web/public/settings-ui.18f92052.js.br +0 -0
- package/dist/web/public/settings-ui.18f92052.js.gz +0 -0
- package/dist/web/public/spreadsheet-preview-worker.js.gz +0 -0
- package/dist/web/public/spreadsheet-preview.75c751de.js.gz +0 -0
- package/dist/web/public/spreadsheet-xlsx-core.js.gz +0 -0
- package/dist/web/public/{styles.77dc538f.css → styles.6a718331.css} +1 -1
- package/dist/web/public/styles.6a718331.css.br +0 -0
- package/dist/web/public/{styles.77dc538f.css.gz → styles.6a718331.css.gz} +0 -0
- package/dist/web/public/subagent-windows.07277a58.js.gz +0 -0
- package/dist/web/public/sw.js +2 -2
- package/dist/web/public/sw.js.br +0 -0
- package/dist/web/public/sw.js.gz +0 -0
- package/dist/web/public/tab-layout-browser.2d6189f7.js.gz +0 -0
- package/dist/web/public/tab-rail-resize.b5cdceaf.js.gz +0 -0
- package/dist/web/public/terminal-keycode229-recovery.98843069.js.gz +0 -0
- package/dist/web/public/terminal-split.js.gz +0 -0
- package/dist/web/public/terminal-tile.js +2 -2
- package/dist/web/public/terminal-tile.js.br +0 -0
- package/dist/web/public/terminal-tile.js.gz +0 -0
- package/dist/web/public/{terminal-ui.d7c75ce8.js → terminal-ui.a7883640.js} +2 -2
- package/dist/web/public/terminal-ui.a7883640.js.br +0 -0
- package/dist/web/public/terminal-ui.a7883640.js.gz +0 -0
- package/dist/web/public/tile-grid.js.gz +0 -0
- package/dist/web/public/ultracode-panel.js.gz +0 -0
- package/dist/web/public/ultracode-windows.js.gz +0 -0
- package/dist/web/public/vendor/dompurify.min.js.gz +0 -0
- package/dist/web/public/vendor/exceljs.min.js.gz +0 -0
- package/dist/web/public/vendor/fflate.min.js.gz +0 -0
- package/dist/web/public/vendor/marked.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-serialize.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-predictive-echo.276b11d9.js.gz +0 -0
- package/dist/web/public/vendor/xterm-zerolag-input.1be42307.js.gz +0 -0
- package/dist/web/public/vendor/xterm.css.gz +0 -0
- package/dist/web/public/vendor/xterm.min.js.gz +0 -0
- package/dist/web/public/voice-input.2342c37b.js.gz +0 -0
- package/dist/web/public/voice-pcm-worklet.js.gz +0 -0
- package/dist/web/public/webview-tabs.js.gz +0 -0
- package/dist/web/public/whats-new.json +9 -9
- package/dist/web/routes/case-routes.d.ts.map +1 -1
- package/dist/web/routes/case-routes.js +72 -53
- package/dist/web/routes/case-routes.js.map +1 -1
- package/dist/web/routes/discord-routes.js +1 -1
- package/dist/web/routes/discord-routes.js.map +1 -1
- package/dist/web/routes/edit-history-routes.d.ts +2 -2
- package/dist/web/routes/edit-history-routes.d.ts.map +1 -1
- package/dist/web/routes/edit-history-routes.js +4 -3
- package/dist/web/routes/edit-history-routes.js.map +1 -1
- package/dist/web/routes/file-routes.d.ts.map +1 -1
- package/dist/web/routes/file-routes.js +213 -102
- package/dist/web/routes/file-routes.js.map +1 -1
- package/dist/web/routes/git-status-routes.d.ts.map +1 -1
- package/dist/web/routes/git-status-routes.js +7 -2
- package/dist/web/routes/git-status-routes.js.map +1 -1
- package/dist/web/routes/mux-routes.d.ts +10 -3
- package/dist/web/routes/mux-routes.d.ts.map +1 -1
- package/dist/web/routes/mux-routes.js +59 -1
- package/dist/web/routes/mux-routes.js.map +1 -1
- package/dist/web/routes/ralph-routes.d.ts.map +1 -1
- package/dist/web/routes/ralph-routes.js +22 -0
- package/dist/web/routes/ralph-routes.js.map +1 -1
- package/dist/web/routes/readmymind-routes.d.ts.map +1 -1
- package/dist/web/routes/readmymind-routes.js +3 -2
- package/dist/web/routes/readmymind-routes.js.map +1 -1
- package/dist/web/routes/respawn-routes.d.ts.map +1 -1
- package/dist/web/routes/respawn-routes.js +24 -0
- package/dist/web/routes/respawn-routes.js.map +1 -1
- package/dist/web/routes/session-routes.d.ts +11 -8
- package/dist/web/routes/session-routes.d.ts.map +1 -1
- package/dist/web/routes/session-routes.js +262 -29
- package/dist/web/routes/session-routes.js.map +1 -1
- package/dist/web/routes/system-routes.d.ts.map +1 -1
- package/dist/web/routes/system-routes.js +3 -2
- package/dist/web/routes/system-routes.js.map +1 -1
- package/dist/web/schemas.d.ts +24 -1
- package/dist/web/schemas.d.ts.map +1 -1
- package/dist/web/schemas.js +34 -9
- package/dist/web/schemas.js.map +1 -1
- package/dist/web/self-update.d.ts +9 -0
- package/dist/web/self-update.d.ts.map +1 -1
- package/dist/web/self-update.js +19 -3
- package/dist/web/self-update.js.map +1 -1
- package/dist/web/server.d.ts +16 -3
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +84 -24
- package/dist/web/server.js.map +1 -1
- package/dist/web/session-wait-registry.d.ts +13 -0
- package/dist/web/session-wait-registry.d.ts.map +1 -1
- package/dist/web/session-wait-registry.js +16 -8
- package/dist/web/session-wait-registry.js.map +1 -1
- package/package.json +2 -2
- package/skills/codeman/SKILL.md +20 -4
- package/dist/web/public/app.963b5ba8.js.br +0 -0
- package/dist/web/public/app.963b5ba8.js.gz +0 -0
- package/dist/web/public/i18n.33f930d7.js +0 -2
- package/dist/web/public/i18n.33f930d7.js.br +0 -0
- package/dist/web/public/i18n.33f930d7.js.gz +0 -0
- package/dist/web/public/keyboard-accessory.d4ec5957.js.br +0 -0
- package/dist/web/public/mobile.5ef2ce85.css.br +0 -0
- package/dist/web/public/panels-ui.b100727d.js.br +0 -0
- package/dist/web/public/panels-ui.b100727d.js.gz +0 -0
- package/dist/web/public/session-ui.5ac82f2c.js.br +0 -0
- package/dist/web/public/session-ui.5ac82f2c.js.gz +0 -0
- package/dist/web/public/settings-ui.d1d4fb99.js.br +0 -0
- package/dist/web/public/settings-ui.d1d4fb99.js.gz +0 -0
- package/dist/web/public/styles.77dc538f.css.br +0 -0
- package/dist/web/public/terminal-ui.d7c75ce8.js.br +0 -0
- package/dist/web/public/terminal-ui.d7c75ce8.js.gz +0 -0
package/dist/remote-files.js
CHANGED
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
*
|
|
18
18
|
* ⚠️ The path is the injection surface: it arrives from the browser (`?path=`). It is
|
|
19
19
|
* always interpolated as a single `shellescape`d token, and the whole remote command
|
|
20
|
-
* is
|
|
21
|
-
* each see one opaque argument
|
|
22
|
-
* path into the string.
|
|
20
|
+
* is {@link remoteLoginShellLine} shellescaped into the ssh line, so the local shell
|
|
21
|
+
* and the remote login shell each see one opaque argument, whichever shell that is.
|
|
22
|
+
* Never build a command here by concatenating a raw path into the string.
|
|
23
23
|
*
|
|
24
24
|
* Read-only by design: previews, text reads and streaming. Writing to a remote file
|
|
25
25
|
* is deliberately NOT implemented (docs/file-viewer-edit-plan.md §6), nor are the
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
import { exec, spawn } from 'node:child_process';
|
|
29
29
|
import { promisify } from 'node:util';
|
|
30
30
|
import { PassThrough } from 'node:stream';
|
|
31
|
-
import { buildSshConnectionArgs, remoteSshTarget, shellescape } from './remote-hosts.js';
|
|
31
|
+
import { buildSshConnectionArgs, remoteSshTarget, shellescape, withRemoteTmuxPath } from './remote-hosts.js';
|
|
32
32
|
import { runWithRemoteSshLimit } from './remote-ssh-limiter.js';
|
|
33
33
|
const execAsync = promisify(exec);
|
|
34
34
|
/**
|
|
@@ -82,16 +82,41 @@ export class RemoteFileAccessError extends Error {
|
|
|
82
82
|
this.name = 'RemoteFileAccessError';
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* A POSIX script as one line that every remote login shell reads the same way, and hands
|
|
87
|
+
* to `sh`.
|
|
88
|
+
*
|
|
89
|
+
* ⚠️ sshd gives the command to the user's LOGIN shell, and {@link shellescape} quotes for a
|
|
90
|
+
* POSIX one. Inside single quotes fish takes `\'` as a literal quote, so `'\''` stops
|
|
91
|
+
* closing and reopening the string, and csh and tcsh end a command at a newline even there
|
|
92
|
+
* and run the script line by line. Both let a path act as a command (measured: a path
|
|
93
|
+
* holding `';touch x;'` ran `touch x` under fish, and one holding a newline ran the next
|
|
94
|
+
* line under tcsh). So the script travels as `printf` text with the bytes those shells
|
|
95
|
+
* treat specially written as octal: no quote, backslash pair, newline or `!` for the login
|
|
96
|
+
* shell to read, and `%` so `printf` keeps its hands off too. Only `sh` sees the script.
|
|
97
|
+
*/
|
|
98
|
+
export function remoteLoginShellLine(script) {
|
|
99
|
+
const text = Array.from(Buffer.from(script), (byte) => {
|
|
100
|
+
const char = String.fromCharCode(byte);
|
|
101
|
+
return byte < 0x20 || byte > 0x7e || "'\\%!".includes(char) ? `\\${byte.toString(8).padStart(3, '0')}` : char;
|
|
102
|
+
}).join('');
|
|
103
|
+
return `sh -c 'eval "$(printf "$1")"' sh '${text}'`;
|
|
104
|
+
}
|
|
85
105
|
/**
|
|
86
106
|
* Wrap a remote shell command in the shared, shellescaped ssh line.
|
|
87
107
|
*
|
|
88
108
|
* The single entry point for "run this on the remote host": connection args (port,
|
|
89
109
|
* identity, jump host, SOCKS ProxyCommand, extra `-o`) all come from
|
|
90
|
-
* `buildSshConnectionArgs`, and the command is ONE shellescaped token
|
|
91
|
-
* spaces, quotes or `$(…)` cannot escape
|
|
110
|
+
* `buildSshConnectionArgs`, and the command is ONE shellescaped token holding
|
|
111
|
+
* {@link remoteLoginShellLine}, so a path with spaces, quotes or `$(…)` cannot escape
|
|
112
|
+
* into the ssh command line or the remote login shell.
|
|
92
113
|
*/
|
|
93
114
|
export function buildRemoteFileCommand(remote, shellCommand) {
|
|
94
|
-
return [
|
|
115
|
+
return [
|
|
116
|
+
...buildSshConnectionArgs(remote),
|
|
117
|
+
remoteSshTarget(remote),
|
|
118
|
+
shellescape(remoteLoginShellLine(shellCommand)),
|
|
119
|
+
].join(' ');
|
|
95
120
|
}
|
|
96
121
|
/**
|
|
97
122
|
* `realpath + stat + existence` for one or more paths, in a SINGLE ssh round trip.
|
|
@@ -352,6 +377,479 @@ export async function remoteReadFile(remote, remotePath, maxBytes) {
|
|
|
352
377
|
throw new RemoteFileAccessError(`failed to read remote file: ${describeExecError(err)}`);
|
|
353
378
|
}
|
|
354
379
|
}
|
|
380
|
+
/** Conversation ids are uuids; anything else never reaches the remote shell. */
|
|
381
|
+
const CLAUDE_TRANSCRIPT_ID_PATTERN = /^[A-Za-z0-9._-]+$/;
|
|
382
|
+
/** Exit status the edit-history scripts use for "no such transcript on that host". */
|
|
383
|
+
const TRANSCRIPT_NOT_FOUND_EXIT = 3;
|
|
384
|
+
/** Transcript files an edit-source request may name; nothing else reaches the shell. */
|
|
385
|
+
const EDIT_SOURCE_REL_PATH_PATTERN = /^(main|subagents\/agent-[A-Za-z0-9_-]+\.jsonl)$/;
|
|
386
|
+
/** The meta record's relPath; group 1 is the agentId. */
|
|
387
|
+
const EDIT_SOURCE_META_REL_PATH_PATTERN = /^subagents\/agent-([A-Za-z0-9_-]+)\.meta\.json$/;
|
|
388
|
+
/** Cap on one subagent `.meta.json` record (outside the transcript budget), as in the local reader. */
|
|
389
|
+
const EDIT_SOURCE_META_MAX_BYTES = 8192;
|
|
390
|
+
/**
|
|
391
|
+
* Cap on all meta records of one read (the local reader has none). A meta comes only with a
|
|
392
|
+
* subagent's first read, so one past the cap is never sent: that subagent's transcript is read
|
|
393
|
+
* as usual, and the panel names it by its id instead of its description.
|
|
394
|
+
*/
|
|
395
|
+
const EDIT_SOURCE_META_BUDGET_BYTES = 4 * 1024 * 1024;
|
|
396
|
+
/** Room for the record headers (one per transcript file) on top of budget and metas. */
|
|
397
|
+
const EDIT_SOURCE_HEADER_SLACK_BYTES = 1024 * 1024;
|
|
398
|
+
/**
|
|
399
|
+
* Subagent requests per ssh round trip of an edit-history read. Like
|
|
400
|
+
* {@link REMOTE_PROBE_CHUNK_SIZE}: the script is ONE argument of the ssh line, Linux caps a
|
|
401
|
+
* single argv string at 128 KiB, and each request adds a `case` line of 139 bytes once
|
|
402
|
+
* encoded for the login shell (376 with the longest name a filesystem allows; the test pins
|
|
403
|
+
* that worst case). See {@link planRemoteEditSourceRounds}.
|
|
404
|
+
*/
|
|
405
|
+
const EDIT_SOURCE_REQUESTS_PER_ROUND_TRIP = 300;
|
|
406
|
+
/**
|
|
407
|
+
* The slowest link an edit-history read is given time for. Such a read can carry megabytes
|
|
408
|
+
* (a forward pass its budget plus the metas, "Load older" up to three budgets), which a flat
|
|
409
|
+
* {@link REMOTE_READ_TIMEOUT_MS} would cut off below ~1 MiB/s. 256 KiB/s ≈ 2 Mbit/s.
|
|
410
|
+
*/
|
|
411
|
+
const EDIT_SOURCE_MIN_BYTES_PER_SEC = 256 * 1024;
|
|
412
|
+
/**
|
|
413
|
+
* Timeout of an edit-history read that may return up to `maxBytes`: the flat read timeout plus
|
|
414
|
+
* the transfer time at {@link EDIT_SOURCE_MIN_BYTES_PER_SEC}. It ends a hung read (a host that
|
|
415
|
+
* fell asleep mid-transfer; no keepalives, see the wake invariants), it does not cut a slow one.
|
|
416
|
+
*/
|
|
417
|
+
export function remoteEditSourcesTimeoutMs(maxBytes) {
|
|
418
|
+
return REMOTE_READ_TIMEOUT_MS + Math.ceil((Math.max(0, maxBytes) / EDIT_SOURCE_MIN_BYTES_PER_SEC) * 1000);
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* The ssh line of an edit-history lookup or read: {@link buildRemoteFileCommand} with `exec`, so a
|
|
422
|
+
* timeout reaches ssh itself. Node signals the local `sh -c`, and dash stays the parent of a
|
|
423
|
+
* plain command, which would leave ssh running and the remote read holding its connection.
|
|
424
|
+
*/
|
|
425
|
+
export function buildRemoteEditHistoryCommand(remote, shellCommand) {
|
|
426
|
+
return `exec ${buildRemoteFileCommand(remote, shellCommand)}`;
|
|
427
|
+
}
|
|
428
|
+
const TMUX_NAME_PATTERN = /^[A-Za-z0-9._-]+$/;
|
|
429
|
+
function isByteCount(value) {
|
|
430
|
+
return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0;
|
|
431
|
+
}
|
|
432
|
+
/** De-duplicated ids that match {@link CLAUDE_TRANSCRIPT_ID_PATTERN}, in order. */
|
|
433
|
+
function safeClaudeTranscriptIds(ids) {
|
|
434
|
+
return [...new Set(ids)].filter((id) => CLAUDE_TRANSCRIPT_ID_PATTERN.test(id));
|
|
435
|
+
}
|
|
436
|
+
/** A main transcript path the read script takes: absolute, `<id>.jsonl`, no NUL or newline. */
|
|
437
|
+
export function isRemoteClaudeTranscriptPath(path) {
|
|
438
|
+
if (!path.startsWith('/') || !path.endsWith('.jsonl') || /[\0\n]/.test(path))
|
|
439
|
+
return false;
|
|
440
|
+
return CLAUDE_TRANSCRIPT_ID_PATTERN.test(path.slice(path.lastIndexOf('/') + 1, -'.jsonl'.length));
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* Shell lines that set `cfg` to claude's config dir on the remote host: an absolute
|
|
444
|
+
* `CLAUDE_CONFIG_DIR` from the ssh command's environment, else `$HOME/.claude`, claude's own
|
|
445
|
+
* rule. ⚠️ The remote claude runs under `$SHELL -i -l -c` (`remoteLoginShellCommand`), this
|
|
446
|
+
* script under a plain non-interactive `sh` from sshd's `$SHELL -c`: a `CLAUDE_CONFIG_DIR` set
|
|
447
|
+
* only in a login or interactive profile (`.profile`, `.bash_profile`, `.zshrc`) is not seen
|
|
448
|
+
* here; one from `.zshenv`, sshd `SetEnv` or the system environment is.
|
|
449
|
+
*/
|
|
450
|
+
function claudeConfigDirLines() {
|
|
451
|
+
return ['cfg=$HOME/.claude', 'case ${CLAUDE_CONFIG_DIR:-} in /*) cfg=$CLAUDE_CONFIG_DIR ;; esac'];
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Shell lines that set `live` to the conversation the claude in `pane` is writing NOW,
|
|
455
|
+
* or leave it empty; they need `cfg` ({@link claudeConfigDirLines}). Codeman launches a
|
|
456
|
+
* remote claude with `--session-id <id>`, but a `/clear` (or a resume picked inside claude)
|
|
457
|
+
* starts a new conversation, and with no hooks from a remote host Codeman never hears of it.
|
|
458
|
+
* claude itself keeps `<config dir>/sessions/<pid>.json` with the current `sessionId`, so: the
|
|
459
|
+
* pane's pid, its children and grandchildren (a wrapper shell may sit in between), the first
|
|
460
|
+
* of those with such a file. Only `[A-Za-z0-9._-]` survives the `sed`, the id pattern, so
|
|
461
|
+
* `$live` is safe unquoted. `ps -A -o pid= -o ppid=` is POSIX (no GNU `--ppid`).
|
|
462
|
+
*
|
|
463
|
+
* ⚠️ tmux runs on the PATH of every other remote tmux call ({@link withRemoteTmuxPath}): sshd's
|
|
464
|
+
* non-interactive shell may not list the directory it lives in, and a silent miss here leaves
|
|
465
|
+
* the panel on the launch conversation after a `/clear`. The `export` stays inside the `$(…)`,
|
|
466
|
+
* and inside this script, which runs under `sh` whatever the remote user's login shell is.
|
|
467
|
+
*
|
|
468
|
+
* ⚠️ `=name:` is an EXACT session match. Without the colon tmux reads a window target, so a
|
|
469
|
+
* session that is gone resolves to a window of that name or a session the name is a prefix of,
|
|
470
|
+
* and that session's conversation would land in this one's edit history.
|
|
471
|
+
*/
|
|
472
|
+
function liveClaudeIdLines(pane) {
|
|
473
|
+
if (!pane || !TMUX_NAME_PATTERN.test(pane.socket) || !TMUX_NAME_PATTERN.test(pane.sessionName))
|
|
474
|
+
return [];
|
|
475
|
+
return [
|
|
476
|
+
'live=',
|
|
477
|
+
`pp=$(${withRemoteTmuxPath(`tmux -L ${shellescape(pane.socket)} list-panes -t ${shellescape(`=${pane.sessionName}:`)} -F '#{pane_pid}' 2>/dev/null | head -n 1`)})`,
|
|
478
|
+
"case $pp in ''|*[!0-9]*) pp= ;; esac",
|
|
479
|
+
'if [ -n "$pp" ]; then',
|
|
480
|
+
' tree=$(ps -A -o pid= -o ppid= 2>/dev/null)',
|
|
481
|
+
' kids=$(printf \'%s\\n\' "$tree" | awk -v p="$pp" \'$2 == p { print $1 }\')',
|
|
482
|
+
' grand=$(for k in $kids; do printf \'%s\\n\' "$tree" | awk -v p="$k" \'$2 == p { print $1 }\'; done)',
|
|
483
|
+
' for c in $pp $kids $grand; do',
|
|
484
|
+
' f="$cfg/sessions/$c.json"',
|
|
485
|
+
' [ -f "$f" ] || continue',
|
|
486
|
+
' live=$(sed -n \'s/.*"sessionId":"\\([A-Za-z0-9._-]*\\)".*/\\1/p\' "$f" | head -n 1)',
|
|
487
|
+
' [ -n "$live" ] && break',
|
|
488
|
+
' done',
|
|
489
|
+
'fi',
|
|
490
|
+
];
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* Script that finds a remote claude session's main transcript and prints `\0<path>\0`;
|
|
494
|
+
* exit {@link TRANSCRIPT_NOT_FOUND_EXIT} when there is none. First the conversation the
|
|
495
|
+
* claude in `pane` writes now ({@link liveClaudeIdLines}); without one, the most recently
|
|
496
|
+
* written transcript of ALL `ids`, not the first id that has one: the conversation claude
|
|
497
|
+
* wrote last is the current one whether a `/clear` moved on from the launch id or a respawn
|
|
498
|
+
* resumed it again, and no order of the ids gets both right. Each id is looked up as
|
|
499
|
+
* `<config dir>/projects/*\/<id>.jsonl` ({@link claudeConfigDirLines}). `$HOME` is expanded
|
|
500
|
+
* by the REMOTE shell: the transcript lives in the remote user's home, which the server
|
|
501
|
+
* cannot know.
|
|
502
|
+
*
|
|
503
|
+
* ⚠️ Runs under an explicit `sh` with `LC_ALL=C`: sshd runs a command in the remote user's
|
|
504
|
+
* LOGIN shell, and on a zsh host `ls` can be an alias and an unmatched glob aborts the whole
|
|
505
|
+
* script ("no matches found"). So: no `ls` at all, the newest file wins via `-nt`, and an
|
|
506
|
+
* `[ -f ]` guard on every glob. `C` makes bracket ranges and glob order plain bytes.
|
|
507
|
+
*/
|
|
508
|
+
export function buildRemoteClaudeTranscriptLocateCommand(ids, pane) {
|
|
509
|
+
const safeIds = safeClaudeTranscriptIds(ids);
|
|
510
|
+
if (safeIds.length === 0)
|
|
511
|
+
return `exit ${TRANSCRIPT_NOT_FOUND_EXIT}`;
|
|
512
|
+
const liveLines = liveClaudeIdLines(pane);
|
|
513
|
+
const script = [
|
|
514
|
+
'LC_ALL=C',
|
|
515
|
+
'export LC_ALL',
|
|
516
|
+
'best=',
|
|
517
|
+
...claudeConfigDirLines(),
|
|
518
|
+
// newest <id>: `best` becomes that id's transcript if it is newer than the current best.
|
|
519
|
+
// BusyBox's (and bash 3.2's) `-nt` compares whole seconds: a tie keeps the earlier id, the
|
|
520
|
+
// stored conversation, until the next write; only without a live id.
|
|
521
|
+
'newest() {',
|
|
522
|
+
' for f in "$cfg"/projects/*/"$1".jsonl; do',
|
|
523
|
+
' [ -f "$f" ] || continue',
|
|
524
|
+
' if [ -z "$best" ] || [ "$f" -nt "$best" ]; then best=$f; fi',
|
|
525
|
+
' done',
|
|
526
|
+
'}',
|
|
527
|
+
...liveLines,
|
|
528
|
+
...(liveLines.length ? ['[ -z "$live" ] || newest "$live"'] : []),
|
|
529
|
+
'if [ -z "$best" ]; then',
|
|
530
|
+
` for id in ${safeIds.map((id) => shellescape(id)).join(' ')}; do newest "$id"; done`,
|
|
531
|
+
'fi',
|
|
532
|
+
`[ -n "$best" ] || exit ${TRANSCRIPT_NOT_FOUND_EXIT}`,
|
|
533
|
+
'printf \'\\0%s\\0\' "$best"',
|
|
534
|
+
].join('\n');
|
|
535
|
+
return `sh -c ${shellescape(script)}`;
|
|
536
|
+
}
|
|
537
|
+
/** The path from {@link buildRemoteClaudeTranscriptLocateCommand} output; null when there is none. */
|
|
538
|
+
export function parseRemoteClaudeTranscriptLocate(stdout) {
|
|
539
|
+
const start = stdout.indexOf(0);
|
|
540
|
+
const end = start === -1 ? -1 : stdout.indexOf(0, start + 1);
|
|
541
|
+
if (end === -1)
|
|
542
|
+
return null;
|
|
543
|
+
const path = stdout.toString('utf8', start + 1, end);
|
|
544
|
+
return isRemoteClaudeTranscriptPath(path) ? path : null;
|
|
545
|
+
}
|
|
546
|
+
/**
|
|
547
|
+
* Find a remote claude session's main transcript in ONE ssh round trip (see
|
|
548
|
+
* {@link buildRemoteClaudeTranscriptLocateCommand}). `null` when it has none; an unreachable
|
|
549
|
+
* host, an ssh failure or broken output is a `RemoteFileAccessError`. Never wakes a host: a
|
|
550
|
+
* sleeping one is a connect timeout, like every other read in this module.
|
|
551
|
+
*/
|
|
552
|
+
export async function remoteLocateClaudeTranscript(remote, ids, pane) {
|
|
553
|
+
assertNotUnderTest();
|
|
554
|
+
const command = buildRemoteEditHistoryCommand(remote, buildRemoteClaudeTranscriptLocateCommand(ids, pane));
|
|
555
|
+
let stdout;
|
|
556
|
+
try {
|
|
557
|
+
const result = await runWithRemoteSshLimit(() => execAsync(command, { timeout: REMOTE_READ_TIMEOUT_MS, maxBuffer: READ_BUFFER_SLACK_BYTES, encoding: 'buffer' }));
|
|
558
|
+
stdout = Buffer.isBuffer(result.stdout) ? result.stdout : Buffer.from(result.stdout);
|
|
559
|
+
}
|
|
560
|
+
catch (err) {
|
|
561
|
+
if (err.code === TRANSCRIPT_NOT_FOUND_EXIT)
|
|
562
|
+
return null;
|
|
563
|
+
throw new RemoteFileAccessError(`remote host ${remote.label || remote.host} unreachable: ${describeExecError(err)}`);
|
|
564
|
+
}
|
|
565
|
+
const path = parseRemoteClaudeTranscriptLocate(stdout);
|
|
566
|
+
if (!path)
|
|
567
|
+
throw new RemoteFileAccessError('unexpected output from the remote transcript lookup');
|
|
568
|
+
return path;
|
|
569
|
+
}
|
|
570
|
+
/** The requests a read script may take: the first per relPath, valid ones only. */
|
|
571
|
+
function validEditSourceRequests(requests) {
|
|
572
|
+
const byRelPath = new Map();
|
|
573
|
+
for (const request of requests) {
|
|
574
|
+
if (!request || typeof request.relPath !== 'string')
|
|
575
|
+
continue;
|
|
576
|
+
if (!EDIT_SOURCE_REL_PATH_PATTERN.test(request.relPath))
|
|
577
|
+
continue;
|
|
578
|
+
if (!isByteCount(request.offset))
|
|
579
|
+
continue;
|
|
580
|
+
if (request.len !== undefined && !isByteCount(request.len))
|
|
581
|
+
continue;
|
|
582
|
+
if (byRelPath.has(request.relPath))
|
|
583
|
+
continue;
|
|
584
|
+
byRelPath.set(request.relPath, request);
|
|
585
|
+
}
|
|
586
|
+
return byRelPath;
|
|
587
|
+
}
|
|
588
|
+
/**
|
|
589
|
+
* The ssh round trips a read takes. Up to `perRound` subagent requests fit one; more are sorted
|
|
590
|
+
* and cut into groups of `perRound`, or the ssh line would hit `E2BIG` and the session would
|
|
591
|
+
* stay `unavailable`: the cursors have no cap and the stored conversation is read first, so
|
|
592
|
+
* not even a `/clear` would get past it.
|
|
593
|
+
*
|
|
594
|
+
* ⚠️ The cuts are NAME RANGES, not only groups of requests. The script takes a file that no
|
|
595
|
+
* `case` line names for a new one (its tail, its meta), so a plain group would read every
|
|
596
|
+
* file of the other groups as new. Each round trip walks only the names between its cuts; the
|
|
597
|
+
* ranges cover every possible name exactly once, so a new file lands in one of them and the
|
|
598
|
+
* merged result is the one a single script would give (the fuzz test compares it with the
|
|
599
|
+
* local reader).
|
|
600
|
+
*/
|
|
601
|
+
export function planRemoteEditSourceRounds(requests, perRound = EDIT_SOURCE_REQUESTS_PER_ROUND_TRIP) {
|
|
602
|
+
const valid = validEditSourceRequests(requests);
|
|
603
|
+
const subagents = [...valid.values()].filter((request) => request.relPath !== 'main');
|
|
604
|
+
if (subagents.length <= perRound)
|
|
605
|
+
return [{ requests: [...valid.values()], main: true, after: '', upTo: '' }];
|
|
606
|
+
const main = valid.get('main');
|
|
607
|
+
const fileName = (request) => request.relPath.slice('subagents/'.length);
|
|
608
|
+
subagents.sort((a, b) => (a.relPath < b.relPath ? -1 : 1));
|
|
609
|
+
const rounds = [];
|
|
610
|
+
for (let i = 0; i < subagents.length; i += perRound) {
|
|
611
|
+
const group = subagents.slice(i, i + perRound);
|
|
612
|
+
rounds.push({
|
|
613
|
+
requests: i === 0 && main ? [main, ...group] : group,
|
|
614
|
+
main: i === 0,
|
|
615
|
+
after: i === 0 ? '' : fileName(subagents[i - 1]),
|
|
616
|
+
upTo: i + perRound < subagents.length ? fileName(group[group.length - 1]) : '',
|
|
617
|
+
});
|
|
618
|
+
}
|
|
619
|
+
return rounds;
|
|
620
|
+
}
|
|
621
|
+
/**
|
|
622
|
+
* Script for one round trip of a read of a remote claude session's main transcript at
|
|
623
|
+
* `mainPath` and its subagent transcripts (`<mainPath without .jsonl>/subagents/agent-<id>.jsonl`),
|
|
624
|
+
* with exactly the local reader's rules (`readClaudeEditSources`):
|
|
625
|
+
*
|
|
626
|
+
* - a request without `len` reads from `offset` (clamped to the size);
|
|
627
|
+
* - a request with `len` is a block that ends at `offset + len`: short of budget, its end;
|
|
628
|
+
* - a file without a request (one the caller has not seen) reads its last bytes, and a new
|
|
629
|
+
* subagent's `.meta.json` (≤ {@link EDIT_SOURCE_META_MAX_BYTES}, outside the budget) comes
|
|
630
|
+
* along as its own record; with `onlyRequested` such files are left out.
|
|
631
|
+
*
|
|
632
|
+
* `budgetBytes` is shared by all transcript files, main first, then the subagents in byte
|
|
633
|
+
* order. A file that gets none of it still produces a zero-length record, because the caller
|
|
634
|
+
* needs its size. Exit {@link TRANSCRIPT_NOT_FOUND_EXIT} when `mainPath` is not a file. A read
|
|
635
|
+
* with more requests than fit one script is several of these ({@link planRemoteEditSourceRounds}).
|
|
636
|
+
*
|
|
637
|
+
* Output: `\0<transcriptId>\0`, then per record `<relPath>\0<size>\0<start>\0<len>\0`
|
|
638
|
+
* followed by exactly `<len>` raw bytes. Should a file shrink between `wc -c` and the read,
|
|
639
|
+
* the slice is NUL-padded to `<len>` so the framing never shifts.
|
|
640
|
+
*
|
|
641
|
+
* Inputs never reach the script unchecked: the path via {@link isRemoteClaudeTranscriptPath}
|
|
642
|
+
* (and shellescaped), relPaths via {@link EDIT_SOURCE_REL_PATH_PATTERN}, offsets and lengths as
|
|
643
|
+
* plain digits; anything invalid is dropped. A subagent file whose name the pattern would
|
|
644
|
+
* reject is skipped on the remote side too. Same `sh` + `LC_ALL=C` rules as the lookup.
|
|
645
|
+
*/
|
|
646
|
+
export function buildRemoteClaudeEditSourcesCommand(mainPath, requests, budgetBytes, opts = {}) {
|
|
647
|
+
if (!isRemoteClaudeTranscriptPath(mainPath))
|
|
648
|
+
return `exit ${TRANSCRIPT_NOT_FOUND_EXIT}`;
|
|
649
|
+
const transcriptId = mainPath.slice(mainPath.lastIndexOf('/') + 1, -'.jsonl'.length);
|
|
650
|
+
const byRelPath = validEditSourceRequests(requests);
|
|
651
|
+
const budget = Number.isFinite(budgetBytes) ? Math.max(0, Math.floor(budgetBytes)) : 0;
|
|
652
|
+
const requestArgs = (request) => `r ${request.offset} ${request.len === undefined ? "''" : String(request.len)}`;
|
|
653
|
+
const { main: readsMain, after, upTo } = opts.round ?? { main: true, after: '', upTo: '' };
|
|
654
|
+
const main = byRelPath.get('main');
|
|
655
|
+
const mainLine = !readsMain
|
|
656
|
+
? ''
|
|
657
|
+
: main
|
|
658
|
+
? `emit main "$best" ${requestArgs(main)}`
|
|
659
|
+
: opts.onlyRequested
|
|
660
|
+
? ''
|
|
661
|
+
: 'emit main "$best" t 0 \'\'';
|
|
662
|
+
// The names come from validated relPaths, and `$0` stays a string: every name starts `agent-`.
|
|
663
|
+
const rangeFilter = after || upTo
|
|
664
|
+
? ` | awk -v after=${shellescape(after)} -v upto=${shellescape(upTo)} '$0 > after && (upto == "" || $0 <= upto)'`
|
|
665
|
+
: '';
|
|
666
|
+
const subagentCases = [...byRelPath.entries()]
|
|
667
|
+
.filter(([relPath]) => relPath !== 'main')
|
|
668
|
+
.map(([relPath, request]) => {
|
|
669
|
+
const name = relPath.slice('subagents/'.length);
|
|
670
|
+
return ` ${shellescape(name)}) emit "subagents/$b" "$f" ${requestArgs(request)} ;;`;
|
|
671
|
+
});
|
|
672
|
+
const newSubagent = opts.onlyRequested
|
|
673
|
+
? [' *) ;;']
|
|
674
|
+
: [
|
|
675
|
+
' *) emit "subagents/$b" "$f" t 0 \'\'',
|
|
676
|
+
' m=${f%.jsonl}.meta.json',
|
|
677
|
+
' if [ -f "$m" ]; then',
|
|
678
|
+
' fsize "$m"',
|
|
679
|
+
` mn=$s; [ "$mn" -le ${EDIT_SOURCE_META_MAX_BYTES} ] || mn=${EDIT_SOURCE_META_MAX_BYTES}`,
|
|
680
|
+
' if [ "$mn" -le "$mbudget" ]; then',
|
|
681
|
+
' mbudget=$((mbudget - mn))',
|
|
682
|
+
' printf \'%s\\0%s\\0%s\\0%s\\0\' "subagents/${b%.jsonl}.meta.json" "$s" 0 "$mn"',
|
|
683
|
+
' [ "$mn" -eq 0 ] || bytes "$m" 0 "$mn"',
|
|
684
|
+
' fi',
|
|
685
|
+
' fi ;;',
|
|
686
|
+
];
|
|
687
|
+
const script = [
|
|
688
|
+
'LC_ALL=C',
|
|
689
|
+
'export LC_ALL',
|
|
690
|
+
`best=${shellescape(mainPath)}`,
|
|
691
|
+
`[ -f "$best" ] || exit ${TRANSCRIPT_NOT_FOUND_EXIT}`,
|
|
692
|
+
`printf '\\0%s\\0' ${shellescape(transcriptId)}`,
|
|
693
|
+
`budget=${budget}`,
|
|
694
|
+
`mbudget=${opts.metaBudget ?? EDIT_SOURCE_META_BUDGET_BYTES}`,
|
|
695
|
+
// Size via `wc -c <` (POSIX; BSD pads it with spaces, hence the tr).
|
|
696
|
+
'fsize() {',
|
|
697
|
+
' s=$(wc -c < "$1" 2>/dev/null | tr -d \' \\t\\n\')',
|
|
698
|
+
" case $s in ''|*[!0-9]*) s=0 ;; esac",
|
|
699
|
+
'}',
|
|
700
|
+
// Exactly $3 bytes of $1 from offset $2, NUL-padded if the file shrank meanwhile.
|
|
701
|
+
'bytes() {',
|
|
702
|
+
' { tail -c +$(($2 + 1)) "$1" 2>/dev/null | head -c "$3"; head -c "$3" /dev/zero; } | head -c "$3"',
|
|
703
|
+
'}',
|
|
704
|
+
// emit <relPath> <file> <r|t> <offset> <len|''>: r = a request, t = the tail of a new file.
|
|
705
|
+
'emit() {',
|
|
706
|
+
' fsize "$2"',
|
|
707
|
+
' if [ "$3" = r ] && [ -n "$5" ]; then',
|
|
708
|
+
' bs=$4; [ "$bs" -le "$s" ] || bs=$s',
|
|
709
|
+
' be=$(($4 + $5)); [ "$be" -le "$s" ] || be=$s',
|
|
710
|
+
' n=$((be - bs)); [ "$n" -le "$budget" ] || n=$budget',
|
|
711
|
+
' start=$((be - n))',
|
|
712
|
+
' elif [ "$3" = r ]; then',
|
|
713
|
+
' start=$4; [ "$start" -le "$s" ] || start=$s',
|
|
714
|
+
' n=$((s - start)); [ "$n" -le "$budget" ] || n=$budget',
|
|
715
|
+
' else',
|
|
716
|
+
' n=$s; [ "$n" -le "$budget" ] || n=$budget',
|
|
717
|
+
' start=$((s - n))',
|
|
718
|
+
' fi',
|
|
719
|
+
' budget=$((budget - n))',
|
|
720
|
+
' printf \'%s\\0%s\\0%s\\0%s\\0\' "$1" "$s" "$start" "$n"',
|
|
721
|
+
' [ "$n" -eq 0 ] || bytes "$2" "$start" "$n"',
|
|
722
|
+
'}',
|
|
723
|
+
// The valid names, one per line in byte order (the glob's order under `C`). Nothing but
|
|
724
|
+
// `[A-Za-z0-9_.-]` is left, so the unquoted `$(…)` below splits on them and globs nothing.
|
|
725
|
+
// A function, because bash 3.2 (macOS `sh`) cannot parse a `case` inside `$(…)`.
|
|
726
|
+
'subagent_names() {',
|
|
727
|
+
' for f in "${best%.jsonl}"/subagents/agent-*.jsonl; do',
|
|
728
|
+
' b=${f##*/}',
|
|
729
|
+
' case $b in agent-.jsonl|agent-*[!A-Za-z0-9_-]*.jsonl) continue ;; esac',
|
|
730
|
+
' printf \'%s\\n\' "$b"',
|
|
731
|
+
' done',
|
|
732
|
+
'}',
|
|
733
|
+
mainLine,
|
|
734
|
+
`for b in $(subagent_names${rangeFilter}); do`,
|
|
735
|
+
' f=${best%.jsonl}/subagents/$b',
|
|
736
|
+
' [ -f "$f" ] || continue',
|
|
737
|
+
' case $b in',
|
|
738
|
+
...subagentCases,
|
|
739
|
+
...newSubagent,
|
|
740
|
+
' esac',
|
|
741
|
+
'done',
|
|
742
|
+
].join('\n');
|
|
743
|
+
return `sh -c ${shellescape(script)}`;
|
|
744
|
+
}
|
|
745
|
+
/**
|
|
746
|
+
* Parse {@link buildRemoteClaudeEditSourcesCommand} output, byte-exact on the Buffer (a chunk
|
|
747
|
+
* may end mid UTF-8 sequence, so nothing here measures decoded strings). Everything before
|
|
748
|
+
* the first NUL is rc-file chatter. `null` = protocol broken: a missing or malformed header
|
|
749
|
+
* field, an unknown relPath, a slice outside the file or a body shorter than its length.
|
|
750
|
+
*/
|
|
751
|
+
export function parseRemoteClaudeEditSources(stdout) {
|
|
752
|
+
let pos = stdout.indexOf(0);
|
|
753
|
+
if (pos === -1)
|
|
754
|
+
return null;
|
|
755
|
+
pos += 1;
|
|
756
|
+
const readField = () => {
|
|
757
|
+
const end = stdout.indexOf(0, pos);
|
|
758
|
+
if (end === -1)
|
|
759
|
+
return null;
|
|
760
|
+
const field = stdout.toString('utf8', pos, end);
|
|
761
|
+
pos = end + 1;
|
|
762
|
+
return field;
|
|
763
|
+
};
|
|
764
|
+
const readNumber = () => {
|
|
765
|
+
const field = readField();
|
|
766
|
+
if (field === null || !/^\d+$/.test(field))
|
|
767
|
+
return null;
|
|
768
|
+
const value = Number(field);
|
|
769
|
+
return Number.isSafeInteger(value) ? value : null;
|
|
770
|
+
};
|
|
771
|
+
const transcriptId = readField();
|
|
772
|
+
if (!transcriptId || !CLAUDE_TRANSCRIPT_ID_PATTERN.test(transcriptId))
|
|
773
|
+
return null;
|
|
774
|
+
const files = [];
|
|
775
|
+
const metas = {};
|
|
776
|
+
while (pos < stdout.length) {
|
|
777
|
+
const relPath = readField();
|
|
778
|
+
const size = readNumber();
|
|
779
|
+
const startOffset = readNumber();
|
|
780
|
+
const len = readNumber();
|
|
781
|
+
if (relPath === null || size === null || startOffset === null || len === null)
|
|
782
|
+
return null;
|
|
783
|
+
if (startOffset + len > size || pos + len > stdout.length)
|
|
784
|
+
return null;
|
|
785
|
+
const chunk = stdout.subarray(pos, pos + len);
|
|
786
|
+
pos += len;
|
|
787
|
+
const meta = EDIT_SOURCE_META_REL_PATH_PATTERN.exec(relPath);
|
|
788
|
+
if (meta) {
|
|
789
|
+
metas[meta[1]] = chunk.toString('utf8');
|
|
790
|
+
}
|
|
791
|
+
else if (EDIT_SOURCE_REL_PATH_PATTERN.test(relPath)) {
|
|
792
|
+
files.push({ relPath, size, startOffset, chunk });
|
|
793
|
+
}
|
|
794
|
+
else {
|
|
795
|
+
return null;
|
|
796
|
+
}
|
|
797
|
+
}
|
|
798
|
+
return { transcriptId, files, metas };
|
|
799
|
+
}
|
|
800
|
+
/**
|
|
801
|
+
* Run the round trips of a read ({@link planRemoteEditSourceRounds}) one after the other and
|
|
802
|
+
* merge them into what one read returns. Budget and meta budget carry over: a later round trip
|
|
803
|
+
* gets what the earlier ones left, and still lists its files, because a requested file missing
|
|
804
|
+
* from the result counts as deleted and loses its cursor. So a read is all or nothing: a failed
|
|
805
|
+
* round trip fails it, and nothing of it reaches the store.
|
|
806
|
+
*/
|
|
807
|
+
export async function readRemoteEditSourceRounds(mainPath, requests, budgetBytes, opts, run, perRound) {
|
|
808
|
+
let budget = Number.isFinite(budgetBytes) ? Math.max(0, Math.floor(budgetBytes)) : 0;
|
|
809
|
+
let metaBudget = EDIT_SOURCE_META_BUDGET_BYTES;
|
|
810
|
+
const merged = { transcriptId: '', files: [], metas: {} };
|
|
811
|
+
for (const round of planRemoteEditSourceRounds(requests, perRound)) {
|
|
812
|
+
const stdout = await run(buildRemoteClaudeEditSourcesCommand(mainPath, round.requests, budget, { ...opts, round, metaBudget }), budget + metaBudget + EDIT_SOURCE_HEADER_SLACK_BYTES);
|
|
813
|
+
if (!stdout)
|
|
814
|
+
return null;
|
|
815
|
+
const parsed = parseRemoteClaudeEditSources(stdout);
|
|
816
|
+
if (!parsed || !mainPath.endsWith(`/${parsed.transcriptId}.jsonl`)) {
|
|
817
|
+
throw new RemoteFileAccessError('unexpected output from the remote edit-history read');
|
|
818
|
+
}
|
|
819
|
+
merged.transcriptId = parsed.transcriptId;
|
|
820
|
+
merged.files.push(...parsed.files);
|
|
821
|
+
Object.assign(merged.metas, parsed.metas);
|
|
822
|
+
for (const file of parsed.files)
|
|
823
|
+
budget -= file.chunk.length;
|
|
824
|
+
for (const text of Object.values(parsed.metas))
|
|
825
|
+
metaBudget = Math.max(0, metaBudget - Buffer.byteLength(text));
|
|
826
|
+
}
|
|
827
|
+
return merged;
|
|
828
|
+
}
|
|
829
|
+
/**
|
|
830
|
+
* Read a remote claude session's transcripts (see {@link readRemoteEditSourceRounds}), the
|
|
831
|
+
* remote twin of `readClaudeEditSources`. `null` when `mainPath` does not exist; an unreachable
|
|
832
|
+
* host, an ssh failure or broken output is a `RemoteFileAccessError`. Each round trip takes its
|
|
833
|
+
* own slot of the ssh limiter. Never wakes.
|
|
834
|
+
*/
|
|
835
|
+
export async function remoteReadClaudeEditSources(remote, mainPath, requests, budgetBytes, opts = {}) {
|
|
836
|
+
assertNotUnderTest();
|
|
837
|
+
return readRemoteEditSourceRounds(mainPath, requests, budgetBytes, opts, async (command, maxBytes) => {
|
|
838
|
+
try {
|
|
839
|
+
const result = await runWithRemoteSshLimit(() => execAsync(buildRemoteEditHistoryCommand(remote, command), {
|
|
840
|
+
timeout: remoteEditSourcesTimeoutMs(maxBytes),
|
|
841
|
+
maxBuffer: maxBytes,
|
|
842
|
+
encoding: 'buffer',
|
|
843
|
+
}));
|
|
844
|
+
return Buffer.isBuffer(result.stdout) ? result.stdout : Buffer.from(result.stdout);
|
|
845
|
+
}
|
|
846
|
+
catch (err) {
|
|
847
|
+
if (err.code === TRANSCRIPT_NOT_FOUND_EXIT)
|
|
848
|
+
return null;
|
|
849
|
+
throw new RemoteFileAccessError(`remote host ${remote.label || remote.host} unreachable: ${describeExecError(err)}`);
|
|
850
|
+
}
|
|
851
|
+
});
|
|
852
|
+
}
|
|
355
853
|
/**
|
|
356
854
|
* Command that writes a remote file's bytes to stdout.
|
|
357
855
|
*
|
package/dist/remote-files.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-files.js","sourceRoot":"","sources":["../src/remote-files.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"remote-files.js","sourceRoot":"","sources":["../src/remote-files.ts"],"names":[],"mappings":"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"}
|