botmux 3.4.2 → 3.4.3
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/dist/adapters/cli/pi-initial-prompt-extension.d.ts +27 -0
- package/dist/adapters/cli/pi-initial-prompt-extension.d.ts.map +1 -0
- package/dist/adapters/cli/pi-initial-prompt-extension.js +38 -0
- package/dist/adapters/cli/pi-initial-prompt-extension.js.map +1 -0
- package/dist/adapters/cli/pi-initial-prompt.d.ts +21 -0
- package/dist/adapters/cli/pi-initial-prompt.d.ts.map +1 -0
- package/dist/adapters/cli/pi-initial-prompt.js +55 -0
- package/dist/adapters/cli/pi-initial-prompt.js.map +1 -0
- package/dist/adapters/cli/pi.d.ts.map +1 -1
- package/dist/adapters/cli/pi.js +15 -4
- package/dist/adapters/cli/pi.js.map +1 -1
- package/dist/adapters/cli/read-isolation.d.ts.map +1 -1
- package/dist/adapters/cli/read-isolation.js +5 -0
- package/dist/adapters/cli/read-isolation.js.map +1 -1
- package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
- package/dist/adapters/cli/shared-hints.js +8 -0
- package/dist/adapters/cli/shared-hints.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +20 -0
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/core/inflight-input-tracker.d.ts +1 -0
- package/dist/core/inflight-input-tracker.d.ts.map +1 -1
- package/dist/core/inflight-input-tracker.js.map +1 -1
- package/dist/platform/secure-host-file.d.ts.map +1 -1
- package/dist/platform/secure-host-file.js +173 -54
- package/dist/platform/secure-host-file.js.map +1 -1
- package/dist/utils/child-env.d.ts +1 -1
- package/dist/utils/child-env.d.ts.map +1 -1
- package/dist/utils/child-env.js +2 -0
- package/dist/utils/child-env.js.map +1 -1
- package/dist/utils/pending-input-queue.d.ts +19 -0
- package/dist/utils/pending-input-queue.d.ts.map +1 -1
- package/dist/utils/pending-input-queue.js +21 -1
- package/dist/utils/pending-input-queue.js.map +1 -1
- package/dist/worker.js +102 -24
- package/dist/worker.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,11 +2,13 @@
|
|
|
2
2
|
* Strict host-authority file primitives.
|
|
3
3
|
*
|
|
4
4
|
* Unlike general dotfiles, machine/device credentials must never follow a
|
|
5
|
-
* leaf symlink.
|
|
6
|
-
*
|
|
7
|
-
* must
|
|
5
|
+
* leaf symlink. Linux pins the containing directory while operating on the
|
|
6
|
+
* leaf; other platforms require a non-replaceable ancestor chain. All writes
|
|
7
|
+
* atomically replace the leaf, and its directory must be owned by the current
|
|
8
|
+
* user without group/other write access.
|
|
8
9
|
*/
|
|
9
|
-
import {
|
|
10
|
+
import { randomBytes } from 'node:crypto';
|
|
11
|
+
import { closeSync, constants, fchmodSync, fstatSync, fsyncSync, lstatSync, mkdirSync, openSync, readFileSync, realpathSync, renameSync, statSync, unlinkSync, writeFileSync, } from 'node:fs';
|
|
10
12
|
import { basename, dirname, join } from 'node:path';
|
|
11
13
|
import { atomicWriteFileSync } from '../utils/atomic-write.js';
|
|
12
14
|
export class UnsafeHostAuthorityFileError extends Error {
|
|
@@ -25,6 +27,15 @@ function assertOwnedByCurrentUser(stats, label) {
|
|
|
25
27
|
throw new UnsafeHostAuthorityFileError(`${label} 不属于当前用户`);
|
|
26
28
|
}
|
|
27
29
|
}
|
|
30
|
+
function assertSecureParentStats(stats) {
|
|
31
|
+
if (!stats.isDirectory()) {
|
|
32
|
+
throw new UnsafeHostAuthorityFileError('宿主凭证目录不是普通目录');
|
|
33
|
+
}
|
|
34
|
+
assertOwnedByCurrentUser(stats, '宿主凭证目录');
|
|
35
|
+
if (process.platform !== 'win32' && (stats.mode & 0o022) !== 0) {
|
|
36
|
+
throw new UnsafeHostAuthorityFileError('宿主凭证目录可被组内或其它用户写入');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
28
39
|
/**
|
|
29
40
|
* A 0700 credential directory is still replaceable when one of its ancestors
|
|
30
41
|
* is writable by another user. Walk the canonical chain so later path-based
|
|
@@ -64,22 +75,69 @@ function assertAncestorChainCannotReplace(canonicalParent) {
|
|
|
64
75
|
childStats = ancestorStats;
|
|
65
76
|
}
|
|
66
77
|
}
|
|
67
|
-
|
|
68
|
-
export function secureHostFilePath(filePath) {
|
|
78
|
+
function canonicalSecureHostParent(filePath) {
|
|
69
79
|
const parent = dirname(filePath);
|
|
70
80
|
mkdirSync(parent, { recursive: true, mode: 0o700 });
|
|
71
81
|
const canonicalParent = realpathSync(parent);
|
|
72
82
|
const parentStats = statSync(canonicalParent);
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}
|
|
83
|
+
assertSecureParentStats(parentStats);
|
|
84
|
+
return canonicalParent;
|
|
85
|
+
}
|
|
86
|
+
/** Create/resolve the parent without ever resolving the final path component. */
|
|
87
|
+
export function secureHostFilePath(filePath) {
|
|
88
|
+
const canonicalParent = canonicalSecureHostParent(filePath);
|
|
80
89
|
assertAncestorChainCannotReplace(canonicalParent);
|
|
81
90
|
return join(canonicalParent, basename(filePath));
|
|
82
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Linux exposes an opened directory through /proc/self/fd. Keeping that
|
|
94
|
+
* directory descriptor open makes all leaf operations independent of later
|
|
95
|
+
* ancestor renames: an untrusted mount-point owner can still cause denial of
|
|
96
|
+
* service, but cannot redirect a credential write into a directory it reads.
|
|
97
|
+
*
|
|
98
|
+
* Other platforms retain the conservative ancestor-chain requirement until
|
|
99
|
+
* they have an equivalent descriptor-relative primitive.
|
|
100
|
+
*/
|
|
101
|
+
function acquireSecureHostParent(filePath) {
|
|
102
|
+
const canonicalParent = canonicalSecureHostParent(filePath);
|
|
103
|
+
if (process.platform !== 'linux') {
|
|
104
|
+
assertAncestorChainCannotReplace(canonicalParent);
|
|
105
|
+
return { path: canonicalParent };
|
|
106
|
+
}
|
|
107
|
+
const fd = openSync(canonicalParent, constants.O_RDONLY | constants.O_DIRECTORY | constants.O_NOFOLLOW);
|
|
108
|
+
try {
|
|
109
|
+
const openedStats = fstatSync(fd);
|
|
110
|
+
assertSecureParentStats(openedStats);
|
|
111
|
+
const anchoredPath = `/proc/self/fd/${fd}`;
|
|
112
|
+
let anchoredStats;
|
|
113
|
+
try {
|
|
114
|
+
anchoredStats = statSync(anchoredPath);
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
// Minimal/chrooted Linux environments may not mount procfs. Preserve
|
|
118
|
+
// the old fail-closed path validation there.
|
|
119
|
+
closeSync(fd);
|
|
120
|
+
assertAncestorChainCannotReplace(canonicalParent);
|
|
121
|
+
return { path: canonicalParent };
|
|
122
|
+
}
|
|
123
|
+
if (!sameInode(openedStats, anchoredStats)) {
|
|
124
|
+
throw new UnsafeHostAuthorityFileError('宿主凭证目录句柄发生变化');
|
|
125
|
+
}
|
|
126
|
+
return { path: anchoredPath, fd };
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
try {
|
|
130
|
+
closeSync(fd);
|
|
131
|
+
}
|
|
132
|
+
catch { /* best effort */ }
|
|
133
|
+
throw error;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
function releaseSecureHostParent(parent) {
|
|
137
|
+
if (parent.fd === undefined)
|
|
138
|
+
return;
|
|
139
|
+
closeSync(parent.fd);
|
|
140
|
+
}
|
|
83
141
|
function assertSecureFileStats(stats, maxBytes) {
|
|
84
142
|
if (!stats.isFile()) {
|
|
85
143
|
throw new UnsafeHostAuthorityFileError('宿主凭证必须是普通文件');
|
|
@@ -92,17 +150,8 @@ function assertSecureFileStats(stats, maxBytes) {
|
|
|
92
150
|
throw new UnsafeHostAuthorityFileError('宿主凭证文件大小异常');
|
|
93
151
|
}
|
|
94
152
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
try {
|
|
98
|
-
lstatSync(dirname(filePath));
|
|
99
|
-
}
|
|
100
|
-
catch (error) {
|
|
101
|
-
if (error.code === 'ENOENT')
|
|
102
|
-
return null;
|
|
103
|
-
throw error;
|
|
104
|
-
}
|
|
105
|
-
const resolved = secureHostFilePath(filePath);
|
|
153
|
+
function readSecureHostFileFromParentSync(parent, leafName, maxBytes) {
|
|
154
|
+
const resolved = join(parent.path, leafName);
|
|
106
155
|
let fd;
|
|
107
156
|
try {
|
|
108
157
|
const flags = process.platform === 'win32'
|
|
@@ -139,44 +188,114 @@ export function readSecureHostFileSync(filePath, maxBytes = 64 * 1024) {
|
|
|
139
188
|
closeSync(fd);
|
|
140
189
|
}
|
|
141
190
|
}
|
|
191
|
+
/** Return null only for a genuinely absent leaf; unsafe shapes fail closed. */
|
|
192
|
+
export function readSecureHostFileSync(filePath, maxBytes = 64 * 1024) {
|
|
193
|
+
try {
|
|
194
|
+
lstatSync(dirname(filePath));
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
if (error.code === 'ENOENT')
|
|
198
|
+
return null;
|
|
199
|
+
throw error;
|
|
200
|
+
}
|
|
201
|
+
const parent = acquireSecureHostParent(filePath);
|
|
202
|
+
try {
|
|
203
|
+
return readSecureHostFileFromParentSync(parent, basename(filePath), maxBytes);
|
|
204
|
+
}
|
|
205
|
+
finally {
|
|
206
|
+
releaseSecureHostParent(parent);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
function writePinnedSecureHostFileSync(parent, directoryFd, leafName, data) {
|
|
210
|
+
const resolved = join(parent.path, leafName);
|
|
211
|
+
const tmp = join(parent.path, `${leafName}.${process.pid}.${randomBytes(4).toString('hex')}.tmp`);
|
|
212
|
+
let fd;
|
|
213
|
+
try {
|
|
214
|
+
fd = openSync(tmp, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, 0o600);
|
|
215
|
+
writeFileSync(fd, data, { encoding: 'utf8' });
|
|
216
|
+
fchmodSync(fd, 0o600);
|
|
217
|
+
fsyncSync(fd);
|
|
218
|
+
closeSync(fd);
|
|
219
|
+
fd = undefined;
|
|
220
|
+
renameSync(tmp, resolved);
|
|
221
|
+
fsyncSync(directoryFd);
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
if (fd !== undefined) {
|
|
225
|
+
try {
|
|
226
|
+
closeSync(fd);
|
|
227
|
+
}
|
|
228
|
+
catch { /* best effort */ }
|
|
229
|
+
}
|
|
230
|
+
try {
|
|
231
|
+
unlinkSync(tmp);
|
|
232
|
+
}
|
|
233
|
+
catch { /* best effort */ }
|
|
234
|
+
throw error;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
142
237
|
/** Strict, durable atomic replace that never follows a leaf symlink. */
|
|
143
238
|
export function writeSecureHostFileSync(filePath, data) {
|
|
144
|
-
const
|
|
145
|
-
|
|
239
|
+
const parent = acquireSecureHostParent(filePath);
|
|
240
|
+
const leafName = basename(filePath);
|
|
241
|
+
const resolved = join(parent.path, leafName);
|
|
146
242
|
try {
|
|
147
|
-
|
|
148
|
-
|
|
243
|
+
let leafExists = false;
|
|
244
|
+
try {
|
|
245
|
+
lstatSync(resolved);
|
|
246
|
+
leafExists = true;
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
if (error.code !== 'ENOENT')
|
|
250
|
+
throw error;
|
|
251
|
+
}
|
|
252
|
+
if (leafExists) {
|
|
253
|
+
// Pin and validate the existing leaf before replacement. The final
|
|
254
|
+
// rename never follows a leaf symlink.
|
|
255
|
+
readSecureHostFileFromParentSync(parent, leafName, 64 * 1024);
|
|
256
|
+
}
|
|
257
|
+
if (parent.fd !== undefined) {
|
|
258
|
+
writePinnedSecureHostFileSync(parent, parent.fd, leafName, data);
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
atomicWriteFileSync(resolved, data, {
|
|
262
|
+
mode: 0o600,
|
|
263
|
+
durable: true,
|
|
264
|
+
followTargetSymlink: false,
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
finally {
|
|
269
|
+
releaseSecureHostParent(parent);
|
|
149
270
|
}
|
|
150
|
-
catch (error) {
|
|
151
|
-
if (error.code !== 'ENOENT')
|
|
152
|
-
throw error;
|
|
153
|
-
}
|
|
154
|
-
if (leafExists) {
|
|
155
|
-
// Pin and validate the existing leaf before replacement. The final rename
|
|
156
|
-
// never follows a leaf symlink, so a later swap cannot redirect the write.
|
|
157
|
-
readSecureHostFileSync(resolved);
|
|
158
|
-
}
|
|
159
|
-
atomicWriteFileSync(resolved, data, {
|
|
160
|
-
mode: 0o600,
|
|
161
|
-
durable: true,
|
|
162
|
-
followTargetSymlink: false,
|
|
163
|
-
});
|
|
164
271
|
}
|
|
165
272
|
/** Strict durable unlink. Returns false only if the leaf is absent. */
|
|
166
273
|
export function unlinkSecureHostFileSync(filePath) {
|
|
167
|
-
const
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
274
|
+
const parent = acquireSecureHostParent(filePath);
|
|
275
|
+
const leafName = basename(filePath);
|
|
276
|
+
const resolved = join(parent.path, leafName);
|
|
277
|
+
try {
|
|
278
|
+
if (readSecureHostFileFromParentSync(parent, leafName, 64 * 1024) === null)
|
|
279
|
+
return false;
|
|
280
|
+
unlinkSync(resolved);
|
|
281
|
+
if (process.platform !== 'win32') {
|
|
282
|
+
if (parent.fd !== undefined) {
|
|
283
|
+
fsyncSync(parent.fd);
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
const fd = openSync(parent.path, constants.O_RDONLY);
|
|
287
|
+
try {
|
|
288
|
+
fsyncSync(fd);
|
|
289
|
+
}
|
|
290
|
+
finally {
|
|
291
|
+
closeSync(fd);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
178
294
|
}
|
|
295
|
+
return true;
|
|
296
|
+
}
|
|
297
|
+
finally {
|
|
298
|
+
releaseSecureHostParent(parent);
|
|
179
299
|
}
|
|
180
|
-
return true;
|
|
181
300
|
}
|
|
182
301
|
//# sourceMappingURL=secure-host-file.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secure-host-file.js","sourceRoot":"","sources":["../../src/platform/secure-host-file.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"secure-host-file.js","sourceRoot":"","sources":["../../src/platform/secure-host-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -73,7 +73,7 @@ export declare function scrubSessionCliHomeEnv(env: NodeJS.ProcessEnv): void;
|
|
|
73
73
|
* REDACTED_CHILD_ENV_KEYS so a server botmux bootstraps can never seed them
|
|
74
74
|
* into its global env either.
|
|
75
75
|
*/
|
|
76
|
-
export declare const BOTMUX_INJECTED_ENV_KEYS: readonly ["__OWNER_OPEN_ID", "BOTMUX", "SESSION_DATA_DIR", "IS_SANDBOX", "BOTMUX_SESSION_ID", "BOTMUX_CHAT_ID", "BOTMUX_MCP_GATEWAY_SOCKET", "BOTMUX_MCP_GATEWAY_REQUIRED", "BOTMUX_CHAT_TYPE", "BOTMUX_LARK_APP_ID", "BOTMUX_ROOT_MESSAGE_ID", "BOTMUX_OWNER_OPEN_ID", "BOTMUX_TURN_ID", "BOTMUX_DISPATCH_ATTEMPT", "BOTMUX_DAEMON_IPC_PORT", "BOTMUX_LARK_LIST_BOTS_API_ENABLED", "BOTMUX_LARK_LIST_BOTS_API_TIMEOUT_MS", "BOTMUX_READY_COMMAND", "HERMES_HOME", "HERMES_BOTMUX_SOURCE_HOME", "HERMES_BOTMUX_PROFILES_ROOT", "CLAUDE_CONFIG_DIR", "CODEX_HOME", "CLAUDE_CODE_RESUME_TOKEN_THRESHOLD", "CJADK_INTERACTIVE"];
|
|
76
|
+
export declare const BOTMUX_INJECTED_ENV_KEYS: readonly ["__OWNER_OPEN_ID", "BOTMUX", "SESSION_DATA_DIR", "IS_SANDBOX", "BOTMUX_SESSION_ID", "BOTMUX_CHAT_ID", "BOTMUX_MCP_GATEWAY_SOCKET", "BOTMUX_MCP_GATEWAY_REQUIRED", "BOTMUX_CHAT_TYPE", "BOTMUX_LARK_APP_ID", "BOTMUX_ROOT_MESSAGE_ID", "BOTMUX_OWNER_OPEN_ID", "BOTMUX_TURN_ID", "BOTMUX_DISPATCH_ATTEMPT", "BOTMUX_PI_INITIAL_PROMPT_FILE", "BOTMUX_DAEMON_IPC_PORT", "BOTMUX_LARK_LIST_BOTS_API_ENABLED", "BOTMUX_LARK_LIST_BOTS_API_TIMEOUT_MS", "BOTMUX_READY_COMMAND", "HERMES_HOME", "HERMES_BOTMUX_SOURCE_HOME", "HERMES_BOTMUX_PROFILES_ROOT", "CLAUDE_CONFIG_DIR", "CODEX_HOME", "CLAUDE_CODE_RESUME_TOKEN_THRESHOLD", "CJADK_INTERACTIVE"];
|
|
77
77
|
/** Proxy env vars that must reach the CLI child process so it can dial the
|
|
78
78
|
* upstream API on hosts without direct internet access. Forwarded explicitly
|
|
79
79
|
* by buildBotmuxEnvAssignments (tmux/tmux-pipe/zellij backends) and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"child-env.d.ts","sourceRoot":"","sources":["../../src/utils/child-env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,uBAAuB,uFAM1B,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,yBAAyB,8CAA+C,CAAC;AAEtF;;;iBAGiB;AACjB,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAEnE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,wBAAwB,
|
|
1
|
+
{"version":3,"file":"child-env.d.ts","sourceRoot":"","sources":["../../src/utils/child-env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,uBAAuB,uFAM1B,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,yBAAyB,8CAA+C,CAAC;AAEtF;;;iBAGiB;AACjB,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAEnE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,wBAAwB,+nBA4C3B,CAAC;AAEX;;;;;;4DAM4D;AAC5D,eAAO,MAAM,cAAc,uHAGjB,CAAC;AAsBX;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,qCAAqC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE1E;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAIzE"}
|
package/dist/utils/child-env.js
CHANGED
|
@@ -105,6 +105,8 @@ export const BOTMUX_INJECTED_ENV_KEYS = [
|
|
|
105
105
|
'BOTMUX_OWNER_OPEN_ID',
|
|
106
106
|
'BOTMUX_TURN_ID',
|
|
107
107
|
'BOTMUX_DISPATCH_ATTEMPT',
|
|
108
|
+
// Pi deferred long-first-prompt extension reads one exact per-session file.
|
|
109
|
+
'BOTMUX_PI_INITIAL_PROMPT_FILE',
|
|
108
110
|
// Loopback port of the owning daemon's agent-facing IPC. Read-isolated CLIs
|
|
109
111
|
// (whose daemon discovery dir is Seatbelt-denied) need it to reach the
|
|
110
112
|
// session-scoped, capability-gated routes (v3 workflow relay, vc-agent).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"child-env.js","sourceRoot":"","sources":["../../src/utils/child-env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,aAAa;IACb,iBAAiB;IACjB,cAAc;IACd,UAAU;IACV,YAAY;CACJ,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,mBAAmB,EAAE,YAAY,CAAU,CAAC;AAEtF;;;iBAGiB;AACjB,MAAM,UAAU,sBAAsB,CAAC,GAAsB;IAC3D,KAAK,MAAM,GAAG,IAAI,yBAAyB;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,iBAAiB;IACjB,QAAQ;IACR,kBAAkB;IAClB,YAAY;IACZ,wEAAwE;IACxE,mEAAmE;IACnE,mBAAmB;IACnB,gBAAgB;IAChB,0EAA0E;IAC1E,wEAAwE;IACxE,wCAAwC;IACxC,2BAA2B;IAC3B,6BAA6B;IAC7B,qEAAqE;IACrE,kBAAkB;IAClB,oBAAoB;IACpB,wBAAwB;IACxB,sEAAsE;IACtE,2EAA2E;IAC3E,sBAAsB;IACtB,gBAAgB;IAChB,yBAAyB;IACzB,4EAA4E;IAC5E,uEAAuE;IACvE,yEAAyE;IACzE,6EAA6E;IAC7E,wBAAwB;IACxB,2EAA2E;IAC3E,mCAAmC;IACnC,sCAAsC;IACtC,sBAAsB;IACtB,qEAAqE;IACrE,aAAa;IACb,2BAA2B;IAC3B,6BAA6B;IAC7B,gDAAgD;IAChD,mBAAmB;IACnB,YAAY;IACZ,wDAAwD;IACxD,oCAAoC;IACpC,mBAAmB;CACX,CAAC;AAEX;;;;;;4DAM4D;AAC5D,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa;IACxD,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW;CACxC,CAAC;AAEX,MAAM,sBAAsB,GAAwB,IAAI,GAAG,CAAC;IAC1D,GAAG,wBAAwB;IAC3B,GAAG,uBAAuB;IAC1B,uEAAuE;IACvE,uEAAuE;IACvE,yEAAyE;IACzE,wEAAwE;IACxE,yEAAyE;IACzE,4EAA4E;IAC5E,6BAA6B;IAC7B,GAAG,cAAc;CAClB,CAAC,CAAC;AAEH,MAAM,6BAA6B,GAAwB,IAAI,GAAG,CAAC;IACjE,GAAG,wBAAwB;IAC3B,aAAa;IACb,iBAAiB;IACjB,YAAY;CACb,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,GAAW;IACnD,OAAO,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACrE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qCAAqC,CAAC,GAAW;IAC/D,OAAO,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,6BAA6B,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5E,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,cAAc,CAAC,IAAuB;IACpD,MAAM,GAAG,GAAsB,EAAE,GAAG,IAAI,EAAE,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,uBAAuB;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3D,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
1
|
+
{"version":3,"file":"child-env.js","sourceRoot":"","sources":["../../src/utils/child-env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,aAAa;IACb,iBAAiB;IACjB,cAAc;IACd,UAAU;IACV,YAAY;CACJ,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,mBAAmB,EAAE,YAAY,CAAU,CAAC;AAEtF;;;iBAGiB;AACjB,MAAM,UAAU,sBAAsB,CAAC,GAAsB;IAC3D,KAAK,MAAM,GAAG,IAAI,yBAAyB;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,iBAAiB;IACjB,QAAQ;IACR,kBAAkB;IAClB,YAAY;IACZ,wEAAwE;IACxE,mEAAmE;IACnE,mBAAmB;IACnB,gBAAgB;IAChB,0EAA0E;IAC1E,wEAAwE;IACxE,wCAAwC;IACxC,2BAA2B;IAC3B,6BAA6B;IAC7B,qEAAqE;IACrE,kBAAkB;IAClB,oBAAoB;IACpB,wBAAwB;IACxB,sEAAsE;IACtE,2EAA2E;IAC3E,sBAAsB;IACtB,gBAAgB;IAChB,yBAAyB;IACzB,4EAA4E;IAC5E,+BAA+B;IAC/B,4EAA4E;IAC5E,uEAAuE;IACvE,yEAAyE;IACzE,6EAA6E;IAC7E,wBAAwB;IACxB,2EAA2E;IAC3E,mCAAmC;IACnC,sCAAsC;IACtC,sBAAsB;IACtB,qEAAqE;IACrE,aAAa;IACb,2BAA2B;IAC3B,6BAA6B;IAC7B,gDAAgD;IAChD,mBAAmB;IACnB,YAAY;IACZ,wDAAwD;IACxD,oCAAoC;IACpC,mBAAmB;CACX,CAAC;AAEX;;;;;;4DAM4D;AAC5D,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa;IACxD,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW;CACxC,CAAC;AAEX,MAAM,sBAAsB,GAAwB,IAAI,GAAG,CAAC;IAC1D,GAAG,wBAAwB;IAC3B,GAAG,uBAAuB;IAC1B,uEAAuE;IACvE,uEAAuE;IACvE,yEAAyE;IACzE,wEAAwE;IACxE,yEAAyE;IACzE,4EAA4E;IAC5E,6BAA6B;IAC7B,GAAG,cAAc;CAClB,CAAC,CAAC;AAEH,MAAM,6BAA6B,GAAwB,IAAI,GAAG,CAAC;IACjE,GAAG,wBAAwB;IAC3B,aAAa;IACb,iBAAiB;IACjB,YAAY;CACb,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,GAAW;IACnD,OAAO,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACrE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qCAAqC,CAAC,GAAW;IAC/D,OAAO,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,6BAA6B,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5E,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,cAAc,CAAC,IAAuB;IACpD,MAAM,GAAG,GAAsB,EAAE,GAAG,IAAI,EAAE,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,uBAAuB;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3D,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import type { CodexAppTurnInput, VcMeetingImTurnOrigin } from '../types.js';
|
|
2
2
|
export interface PendingCliInput {
|
|
3
3
|
content: string;
|
|
4
|
+
/** The real user turn represented by `content` when delivery uses a short
|
|
5
|
+
* adapter command. Transcript bridges fingerprint this value, while the PTY
|
|
6
|
+
* receives `content`. */
|
|
7
|
+
logicalContent?: string;
|
|
4
8
|
turnId?: string;
|
|
5
9
|
dispatchAttempt?: number;
|
|
6
10
|
vcMeetingImTurnOrigin?: VcMeetingImTurnOrigin;
|
|
@@ -31,6 +35,21 @@ export declare function shouldDeferInitialPromptForArgLimit(opts: {
|
|
|
31
35
|
prompt?: string;
|
|
32
36
|
maxInitialPromptArgBytes?: number;
|
|
33
37
|
}): boolean;
|
|
38
|
+
/** Resolve the physical first-prompt transport after worker defer policy is
|
|
39
|
+
* known. A transformed argv prompt can provide a short deferred command while
|
|
40
|
+
* retaining the original text for bridge attribution. Other adapters keep the
|
|
41
|
+
* legacy behavior: argv when not deferred, original text in the queue when
|
|
42
|
+
* deferred. */
|
|
43
|
+
export declare function resolveInitialPromptDelivery(opts: {
|
|
44
|
+
originalPrompt?: string;
|
|
45
|
+
preparedArg?: string;
|
|
46
|
+
preparedDeferredContent?: string;
|
|
47
|
+
defer: boolean;
|
|
48
|
+
}): {
|
|
49
|
+
argvPrompt?: string;
|
|
50
|
+
queuedContent?: string;
|
|
51
|
+
logicalContent?: string;
|
|
52
|
+
};
|
|
34
53
|
/** Once either side of a queue boundary is durable, stop this batch and wait
|
|
35
54
|
* for the next reliable idle edge before writing the following turn. */
|
|
36
55
|
export declare function shouldStopPendingBatch(written: PendingCliInput, next: PendingCliInput | undefined): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pending-input-queue.d.ts","sourceRoot":"","sources":["../../src/utils/pending-input-queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,aAAa,CAAC,EAAE,iBAAiB,CAAC;CACnC;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,eAAe,EAAE,EAC1B,IAAI,EAAE,eAAe,GACpB,OAAO,
|
|
1
|
+
{"version":3,"file":"pending-input-queue.d.ts","sourceRoot":"","sources":["../../src/utils/pending-input-queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB;;6BAEyB;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,aAAa,CAAC,EAAE,iBAAiB,CAAC;CACnC;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,eAAe,EAAE,EAC1B,IAAI,EAAE,eAAe,GACpB,OAAO,CAeT;AAED;;sEAEsE;AACtE,wBAAgB,2BAA2B,CACzC,wBAAwB,EAAE,OAAO,EACjC,mBAAmB,EAAE,OAAO,EAC5B,IAAI,EAAE,eAAe,GAAG,SAAS,GAChC,OAAO,CAKT;AAED;;;;sEAIsE;AACtE,wBAAgB,iCAAiC,CAAC,IAAI,EAAE;IACtD,0BAA0B,EAAE,OAAO,CAAC;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAIV;AAED;;;;wDAIwD;AACxD,wBAAgB,mCAAmC,CAAC,IAAI,EAAE;IACxD,0BAA0B,EAAE,OAAO,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC,GAAG,OAAO,CAMV;AAED;;;;eAIe;AACf,wBAAgB,4BAA4B,CAAC,IAAI,EAAE;IACjD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG;IACF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAYA;AAED;yEACyE;AACzE,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,eAAe,EACxB,IAAI,EAAE,eAAe,GAAG,SAAS,GAChC,OAAO,CAKT;AAED;6EAC6E;AAC7E,wBAAgB,oBAAoB,CAAC,mBAAmB,EAAE,OAAO,GAAG,OAAO,CAE1E;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,EACtD,QAAQ,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,GACrD,OAAO,CAIT"}
|
|
@@ -9,7 +9,8 @@ export function mergeQueuedCliInput(pending, next) {
|
|
|
9
9
|
// would drop or mis-attach the sidecar.
|
|
10
10
|
if (tail.dispatchAttempt !== undefined || next.dispatchAttempt !== undefined
|
|
11
11
|
|| tail.vcMeetingImTurnOrigin || next.vcMeetingImTurnOrigin
|
|
12
|
-
|| tail.codexAppInput || next.codexAppInput
|
|
12
|
+
|| tail.codexAppInput || next.codexAppInput
|
|
13
|
+
|| tail.logicalContent || next.logicalContent)
|
|
13
14
|
return false;
|
|
14
15
|
tail.content = `${tail.content}\n\n${next.content}`;
|
|
15
16
|
tail.turnId = next.turnId ?? tail.turnId;
|
|
@@ -49,6 +50,25 @@ export function shouldDeferInitialPromptForArgLimit(opts) {
|
|
|
49
50
|
return false;
|
|
50
51
|
return Buffer.byteLength(opts.prompt, 'utf8') > limit;
|
|
51
52
|
}
|
|
53
|
+
/** Resolve the physical first-prompt transport after worker defer policy is
|
|
54
|
+
* known. A transformed argv prompt can provide a short deferred command while
|
|
55
|
+
* retaining the original text for bridge attribution. Other adapters keep the
|
|
56
|
+
* legacy behavior: argv when not deferred, original text in the queue when
|
|
57
|
+
* deferred. */
|
|
58
|
+
export function resolveInitialPromptDelivery(opts) {
|
|
59
|
+
if (!opts.originalPrompt)
|
|
60
|
+
return {};
|
|
61
|
+
if (!opts.defer) {
|
|
62
|
+
return { argvPrompt: opts.preparedArg ?? opts.originalPrompt };
|
|
63
|
+
}
|
|
64
|
+
const queuedContent = opts.preparedDeferredContent ?? opts.originalPrompt;
|
|
65
|
+
return {
|
|
66
|
+
queuedContent,
|
|
67
|
+
...(queuedContent !== opts.originalPrompt
|
|
68
|
+
? { logicalContent: opts.originalPrompt }
|
|
69
|
+
: {}),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
52
72
|
/** Once either side of a queue boundary is durable, stop this batch and wait
|
|
53
73
|
* for the next reliable idle edge before writing the following turn. */
|
|
54
74
|
export function shouldStopPendingBatch(written, next) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pending-input-queue.js","sourceRoot":"","sources":["../../src/utils/pending-input-queue.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pending-input-queue.js","sourceRoot":"","sources":["../../src/utils/pending-input-queue.ts"],"names":[],"mappings":"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"}
|