botmux 2.84.0 → 2.85.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 +4 -0
- package/dist/adapters/backend/sandbox.d.ts +4 -0
- package/dist/adapters/backend/sandbox.d.ts.map +1 -1
- package/dist/adapters/backend/sandbox.js +14 -0
- package/dist/adapters/backend/sandbox.js.map +1 -1
- package/dist/adapters/cli/claude-code.d.ts.map +1 -1
- package/dist/adapters/cli/claude-code.js +4 -1
- package/dist/adapters/cli/claude-code.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +11 -0
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/bot-registry.d.ts +18 -0
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +34 -0
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +30 -65
- package/dist/cli.js.map +1 -1
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +42 -1
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +100 -1
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/passthrough-commands.d.ts.map +1 -1
- package/dist/core/passthrough-commands.js +1 -1
- package/dist/core/passthrough-commands.js.map +1 -1
- package/dist/core/pending-response.d.ts +2 -39
- package/dist/core/pending-response.d.ts.map +1 -1
- package/dist/core/pending-response.js +5 -99
- package/dist/core/pending-response.js.map +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +4 -16
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/skills/claude-plugin-delivery.d.ts +6 -0
- package/dist/core/skills/claude-plugin-delivery.d.ts.map +1 -0
- package/dist/core/skills/claude-plugin-delivery.js +21 -0
- package/dist/core/skills/claude-plugin-delivery.js.map +1 -0
- package/dist/core/skills/cli-admin-command.d.ts +7 -0
- package/dist/core/skills/cli-admin-command.d.ts.map +1 -0
- package/dist/core/skills/cli-admin-command.js +243 -0
- package/dist/core/skills/cli-admin-command.js.map +1 -0
- package/dist/core/skills/cli-session-command.d.ts +7 -0
- package/dist/core/skills/cli-session-command.d.ts.map +1 -0
- package/dist/core/skills/cli-session-command.js +45 -0
- package/dist/core/skills/cli-session-command.js.map +1 -0
- package/dist/core/skills/delivery.d.ts +11 -0
- package/dist/core/skills/delivery.d.ts.map +1 -0
- package/dist/core/skills/delivery.js +22 -0
- package/dist/core/skills/delivery.js.map +1 -0
- package/dist/core/skills/discovery.d.ts +3 -0
- package/dist/core/skills/discovery.d.ts.map +1 -0
- package/dist/core/skills/discovery.js +34 -0
- package/dist/core/skills/discovery.js.map +1 -0
- package/dist/core/skills/frontmatter.d.ts +9 -0
- package/dist/core/skills/frontmatter.d.ts.map +1 -0
- package/dist/core/skills/frontmatter.js +42 -0
- package/dist/core/skills/frontmatter.js.map +1 -0
- package/dist/core/skills/im-command.d.ts +9 -0
- package/dist/core/skills/im-command.d.ts.map +1 -0
- package/dist/core/skills/im-command.js +107 -0
- package/dist/core/skills/im-command.js.map +1 -0
- package/dist/core/skills/manifest-store.d.ts +4 -0
- package/dist/core/skills/manifest-store.d.ts.map +1 -0
- package/dist/core/skills/manifest-store.js +26 -0
- package/dist/core/skills/manifest-store.js.map +1 -0
- package/dist/core/skills/package.d.ts +13 -0
- package/dist/core/skills/package.d.ts.map +1 -0
- package/dist/core/skills/package.js +35 -0
- package/dist/core/skills/package.js.map +1 -0
- package/dist/core/skills/policy.d.ts +18 -0
- package/dist/core/skills/policy.d.ts.map +1 -0
- package/dist/core/skills/policy.js +69 -0
- package/dist/core/skills/policy.js.map +1 -0
- package/dist/core/skills/prompt.d.ts +3 -0
- package/dist/core/skills/prompt.d.ts.map +1 -0
- package/dist/core/skills/prompt.js +25 -0
- package/dist/core/skills/prompt.js.map +1 -0
- package/dist/core/skills/references.d.ts +21 -0
- package/dist/core/skills/references.d.ts.map +1 -0
- package/dist/core/skills/references.js +27 -0
- package/dist/core/skills/references.js.map +1 -0
- package/dist/core/skills/registry-paths.d.ts +5 -0
- package/dist/core/skills/registry-paths.d.ts.map +1 -0
- package/dist/core/skills/registry-paths.js +15 -0
- package/dist/core/skills/registry-paths.js.map +1 -0
- package/dist/core/skills/resource-reader.d.ts +9 -0
- package/dist/core/skills/resource-reader.d.ts.map +1 -0
- package/dist/core/skills/resource-reader.js +97 -0
- package/dist/core/skills/resource-reader.js.map +1 -0
- package/dist/core/skills/session-resolver.d.ts +14 -0
- package/dist/core/skills/session-resolver.d.ts.map +1 -0
- package/dist/core/skills/session-resolver.js +24 -0
- package/dist/core/skills/session-resolver.js.map +1 -0
- package/dist/core/skills/session-runtime.d.ts +14 -0
- package/dist/core/skills/session-runtime.d.ts.map +1 -0
- package/dist/core/skills/session-runtime.js +32 -0
- package/dist/core/skills/session-runtime.js.map +1 -0
- package/dist/core/skills/sources.d.ts +21 -0
- package/dist/core/skills/sources.d.ts.map +1 -0
- package/dist/core/skills/sources.js +155 -0
- package/dist/core/skills/sources.js.map +1 -0
- package/dist/core/skills/types.d.ts +71 -0
- package/dist/core/skills/types.d.ts.map +1 -0
- package/dist/core/skills/types.js +2 -0
- package/dist/core/skills/types.js.map +1 -0
- package/dist/core/startup-commands.d.ts +57 -0
- package/dist/core/startup-commands.d.ts.map +1 -0
- package/dist/core/startup-commands.js +85 -0
- package/dist/core/startup-commands.js.map +1 -0
- package/dist/core/types.d.ts +10 -3
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker-pool.d.ts +14 -1
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +93 -62
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts +2 -2
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +49 -52
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/skill-install-request.d.ts +21 -0
- package/dist/dashboard/skill-install-request.d.ts.map +1 -0
- package/dist/dashboard/skill-install-request.js +62 -0
- package/dist/dashboard/skill-install-request.js.map +1 -0
- package/dist/dashboard/web/app.d.ts.map +1 -1
- package/dist/dashboard/web/app.js +4 -1
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js +61 -1
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +146 -0
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/skills.d.ts +2 -0
- package/dist/dashboard/web/skills.d.ts.map +1 -0
- package/dist/dashboard/web/skills.js +539 -0
- package/dist/dashboard/web/skills.js.map +1 -0
- package/dist/dashboard-web/app.js +599 -446
- package/dist/dashboard-web/index.html +1 -0
- package/dist/dashboard-web/style.css +793 -0
- package/dist/dashboard.js +250 -0
- package/dist/dashboard.js.map +1 -1
- package/dist/global-config.d.ts +7 -0
- package/dist/global-config.d.ts.map +1 -1
- package/dist/global-config.js +16 -0
- package/dist/global-config.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +3 -5
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +3 -5
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/card-builder.d.ts +0 -3
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +2 -33
- package/dist/im/lark/card-builder.js.map +1 -1
- package/dist/services/bot-config-store.d.ts +10 -4
- package/dist/services/bot-config-store.d.ts.map +1 -1
- package/dist/services/bot-config-store.js +29 -2
- package/dist/services/bot-config-store.js.map +1 -1
- package/dist/services/session-store.d.ts +1 -0
- package/dist/services/session-store.d.ts.map +1 -1
- package/dist/services/session-store.js +12 -5
- package/dist/services/session-store.js.map +1 -1
- package/dist/services/skill-registry-store.d.ts +42 -0
- package/dist/services/skill-registry-store.d.ts.map +1 -0
- package/dist/services/skill-registry-store.js +343 -0
- package/dist/services/skill-registry-store.js.map +1 -0
- package/dist/skills/installer.d.ts.map +1 -1
- package/dist/skills/installer.js +3 -0
- package/dist/skills/installer.js.map +1 -1
- package/dist/types.d.ts +3 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/file-lock.d.ts +1 -0
- package/dist/utils/file-lock.d.ts.map +1 -1
- package/dist/utils/file-lock.js +87 -1
- package/dist/utils/file-lock.js.map +1 -1
- package/dist/worker.js +127 -20
- package/dist/worker.js.map +1 -1
- package/dist/workflows/definition.d.ts +16 -16
- package/dist/workflows/events/schema.d.ts +280 -280
- package/package.json +1 -1
- package/dist/services/pending-response-transaction-store.d.ts +0 -12
- package/dist/services/pending-response-transaction-store.d.ts.map +0 -1
- package/dist/services/pending-response-transaction-store.js +0 -52
- package/dist/services/pending-response-transaction-store.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-lock.js","sourceRoot":"","sources":["../../src/utils/file-lock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"file-lock.js","sourceRoot":"","sources":["../../src/utils/file-lock.ts"],"names":[],"mappings":"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"}
|
package/dist/worker.js
CHANGED
|
@@ -22,6 +22,7 @@ import { shouldSuppressBridgeEmit } from './services/bridge-fallback-gate.js';
|
|
|
22
22
|
import { shouldWriteNow } from './utils/input-gate.js';
|
|
23
23
|
import { mergeQueuedCliInput } from './utils/pending-input-queue.js';
|
|
24
24
|
import { ReadyGate, shouldArmReadyGate } from './utils/ready-gate.js';
|
|
25
|
+
import { shouldRunStartupCommandsOnSpawn, shouldDeferInitialPromptForStartup } from './core/startup-commands.js';
|
|
25
26
|
import { InflightInputTracker } from './core/inflight-input-tracker.js';
|
|
26
27
|
import { shouldRunQuietRotation, evaluatePidResolverPullback, decideFingerprintSwitch, shouldHealAbsentBaseline, sessionIdFromJsonlPath, SESSION_ID_FILENAME_RE, } from './services/bridge-rotation-policy.js';
|
|
27
28
|
import { CodexBridgeQueue } from './services/codex-bridge-queue.js';
|
|
@@ -143,6 +144,12 @@ function cliName() { return CLI_DISPLAY_NAMES[lastInitConfig?.cliId ?? ''] ?? 'C
|
|
|
143
144
|
let isPromptReady = false;
|
|
144
145
|
/** Mutex for async flushPending — prevents concurrent flush loops. */
|
|
145
146
|
let isFlushing = false;
|
|
147
|
+
/** Per-spawn one-shot: have this spawn's bot.startupCommands been typed in yet?
|
|
148
|
+
* Reset in spawnCli so a restart/resume (which re-spawns the CLI) re-applies
|
|
149
|
+
* them — needed because session-only settings like `/effort ultracode` are lost
|
|
150
|
+
* when the CLI restarts. Consumed inside flushPending right before the first
|
|
151
|
+
* user prompt is drained, so the commands always precede it (see runStartupCommands). */
|
|
152
|
+
let hasRunStartupCommands = false;
|
|
146
153
|
/** Ready-gate (Claude-family): holds the first prompt until the SessionStart
|
|
147
154
|
* hook fires a true-ready signal, so a cjadk-style startup selector's ❯ (which
|
|
148
155
|
* falsely matches readyPattern) can't eat the first message. Recreated + armed
|
|
@@ -208,6 +215,73 @@ function releaseReadyGate(reason) {
|
|
|
208
215
|
settleThenFlush(Date.now());
|
|
209
216
|
}
|
|
210
217
|
}
|
|
218
|
+
/** Per-startup-command quiescence: how long the PTY must be quiet before sending
|
|
219
|
+
* the next command, capped so a slow/redrawing command can't stall the queue. */
|
|
220
|
+
const STARTUP_CMD_QUIET_MS = 500;
|
|
221
|
+
const STARTUP_CMD_CAP_MS = 4_000;
|
|
222
|
+
/** Type one literal input LINE into the CLI exactly like a passthrough slash
|
|
223
|
+
* command: raw text → a 200ms beat (so the TUI's slash-command picker registers
|
|
224
|
+
* the match before submit) → a separate Enter. Non-TUI backends fall back to a
|
|
225
|
+
* single write + CR. Shared by the `raw_input` IPC handler and runStartupCommands
|
|
226
|
+
* so both stay in lockstep. */
|
|
227
|
+
async function sendRawCommandLine(be, content) {
|
|
228
|
+
if ('sendText' in be && 'sendSpecialKeys' in be) {
|
|
229
|
+
be.sendText(content);
|
|
230
|
+
await new Promise(r => setTimeout(r, 200));
|
|
231
|
+
be.sendSpecialKeys('Enter');
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
be.write(content + '\r');
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/** Resolve once the PTY has been quiet for `quietMs`, or after `capMs` total.
|
|
238
|
+
* Spaces out startup commands so each is processed before the next is typed. */
|
|
239
|
+
function awaitPtyQuiescence(quietMs, capMs) {
|
|
240
|
+
return new Promise(resolve => {
|
|
241
|
+
const startedAt = Date.now();
|
|
242
|
+
const check = () => {
|
|
243
|
+
const now = Date.now();
|
|
244
|
+
if (now - lastPtyOutputAtMs >= quietMs || now - startedAt >= capMs) {
|
|
245
|
+
resolve();
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
const wait = Math.min(quietMs - (now - lastPtyOutputAtMs), capMs - (now - startedAt));
|
|
249
|
+
const t = setTimeout(check, Math.max(50, wait));
|
|
250
|
+
t.unref?.();
|
|
251
|
+
};
|
|
252
|
+
check();
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
/** Type this spawn's bot.startupCommands into the CLI in order — one submit each,
|
|
256
|
+
* before the first user prompt. Best-effort: a failing command is logged and
|
|
257
|
+
* skipped, never blocking the first prompt. Skipped in adopt mode (we observe
|
|
258
|
+
* the user's existing session). Invoked once per spawn from flushPending under
|
|
259
|
+
* the isFlushing mutex, so no user message can interleave. */
|
|
260
|
+
async function runStartupCommands() {
|
|
261
|
+
const cmds = lastInitConfig?.startupCommands;
|
|
262
|
+
if (!cmds || cmds.length === 0)
|
|
263
|
+
return;
|
|
264
|
+
if (lastInitConfig?.adoptMode)
|
|
265
|
+
return;
|
|
266
|
+
if (!backend)
|
|
267
|
+
return;
|
|
268
|
+
log(`Running ${cmds.length} startup command(s) before first prompt`);
|
|
269
|
+
for (const cmd of cmds) {
|
|
270
|
+
if (!backend)
|
|
271
|
+
break;
|
|
272
|
+
try {
|
|
273
|
+
await sendRawCommandLine(backend, cmd);
|
|
274
|
+
await awaitPtyQuiescence(STARTUP_CMD_QUIET_MS, STARTUP_CMD_CAP_MS);
|
|
275
|
+
log(`Startup command sent: ${cmd}`);
|
|
276
|
+
}
|
|
277
|
+
catch (e) {
|
|
278
|
+
log(`Startup command failed (${cmd}): ${e?.message ?? e}`);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
// Commands consumed turns and reset idle; treat the first user prompt fresh.
|
|
282
|
+
isPromptReady = false;
|
|
283
|
+
idleDetector?.reset();
|
|
284
|
+
}
|
|
211
285
|
const pendingMessages = [];
|
|
212
286
|
/** Inputs written to the CLI whose turn hasn't completed — re-queued across a
|
|
213
287
|
* CLI crash so a submit-time death can't silently eat user messages. */
|
|
@@ -3128,6 +3202,16 @@ async function flushPending() {
|
|
|
3128
3202
|
idleDetector?.reset();
|
|
3129
3203
|
}
|
|
3130
3204
|
try {
|
|
3205
|
+
// One-shot per spawn: type the bot's startup commands (e.g. `/effort
|
|
3206
|
+
// ultracode`) into the CLI before the first user prompt drains. Both ready
|
|
3207
|
+
// paths funnel through flushPending — the ready-gate settle for Claude-family
|
|
3208
|
+
// CLIs, markPromptReady for the rest — so this is the single universal
|
|
3209
|
+
// "ready, about to send the first prompt" point, for every CLI. Held by the
|
|
3210
|
+
// isFlushing mutex so no Lark message can interleave between the commands.
|
|
3211
|
+
if (!hasRunStartupCommands) {
|
|
3212
|
+
hasRunStartupCommands = true;
|
|
3213
|
+
await runStartupCommands();
|
|
3214
|
+
}
|
|
3131
3215
|
while (pendingMessages.length > 0 && backend && cliAdapter) {
|
|
3132
3216
|
const item = pendingMessages.shift();
|
|
3133
3217
|
// Track as in-flight until the CLI returns to idle (markPromptReady).
|
|
@@ -3595,6 +3679,9 @@ function scheduleBusyPatternIdleProbe(source) {
|
|
|
3595
3679
|
busyPatternIdleProbeTimer.unref?.();
|
|
3596
3680
|
}
|
|
3597
3681
|
function spawnCli(cfg) {
|
|
3682
|
+
// (startupCommands one-shot is re-armed below, AFTER the reattach-vs-fresh
|
|
3683
|
+
// prediction — only a genuinely fresh CLI process replays them; see
|
|
3684
|
+
// willReattachPersistent.)
|
|
3598
3685
|
// Re-deliver inputs that were in-flight when the previous CLI died (see
|
|
3599
3686
|
// backend.onExit). killCli() already wiped pendingMessages, so these go to
|
|
3600
3687
|
// the front; the normal flush paths (prompt detect / first-prompt timeout)
|
|
@@ -3773,6 +3860,14 @@ function spawnCli(cfg) {
|
|
|
3773
3860
|
? ZellijBackend.hasSession(persistentSessionName)
|
|
3774
3861
|
: HerdrBackend.hasSession(persistentSessionName)
|
|
3775
3862
|
: false;
|
|
3863
|
+
// Re-arm the startup-commands one-shot ONLY for a genuinely fresh CLI process.
|
|
3864
|
+
// A reattach to a LIVE persistent pane (daemon-restart recovery) is the SAME
|
|
3865
|
+
// CLI with /effort etc. already applied — replaying would re-type them (and
|
|
3866
|
+
// /clear,/compact would corrupt the recovered context). hasRun=true ⇒ skip.
|
|
3867
|
+
// Fresh spawns (incl. resume that starts a new CLI, where hasSession is false)
|
|
3868
|
+
// arm it. spawnCli is synchronous up to backend spawn, so this lands before
|
|
3869
|
+
// any flushPending consumes the flag.
|
|
3870
|
+
hasRunStartupCommands = !shouldRunStartupCommandsOnSpawn({ willReattachPersistent });
|
|
3776
3871
|
// ── Resume pre-flight check + two-tier fallback ──────────────────────────
|
|
3777
3872
|
// Tier 1 (adapter probe): adapter.checkResumeTargetExists returns false
|
|
3778
3873
|
// → skip --resume, spawn FRESH.
|
|
@@ -3853,17 +3948,28 @@ function spawnCli(cfg) {
|
|
|
3853
3948
|
// ttadk 网关:模型走 ttadk 自己的 `-m`(启动期注入到 ttadk 前缀,见下方 wrapperCli
|
|
3854
3949
|
// 分支),不能再把 cfg.model 透给底层适配器,否则真实 CLI 会再吃一个 --model 重复。
|
|
3855
3950
|
const ttadkGateway = isTtadkWrapper(cfg.wrapperCli);
|
|
3951
|
+
// When a bot has startupCommands AND this CLI bakes the first prompt into
|
|
3952
|
+
// launch args (passesInitialPromptViaArgs, e.g. Gemini -i), don't bake it —
|
|
3953
|
+
// route it through the input queue instead so startupCommands run first
|
|
3954
|
+
// (flushPending's hook can't precede an args-baked prompt). The init handler
|
|
3955
|
+
// mirrors this when deciding whether to enqueue the prompt.
|
|
3956
|
+
const deferInitialPrompt = shouldDeferInitialPromptForStartup({
|
|
3957
|
+
hasStartupCommands: !!cfg.startupCommands?.length,
|
|
3958
|
+
adoptMode: cfg.adoptMode === true,
|
|
3959
|
+
passesInitialPromptViaArgs: cliAdapter.passesInitialPromptViaArgs === true,
|
|
3960
|
+
});
|
|
3856
3961
|
const args = cliAdapter.buildArgs({
|
|
3857
3962
|
sessionId: effectiveAdapterSessionId,
|
|
3858
3963
|
resume: effectiveResume,
|
|
3859
3964
|
workingDir: cfg.workingDir,
|
|
3860
3965
|
resumeSessionId: effectiveCliSessionId,
|
|
3861
|
-
initialPrompt: cfg.prompt || undefined,
|
|
3966
|
+
initialPrompt: deferInitialPrompt ? undefined : (cfg.prompt || undefined),
|
|
3862
3967
|
botName: cfg.botName,
|
|
3863
3968
|
botOpenId: cfg.botOpenId,
|
|
3864
3969
|
locale: cfg.locale,
|
|
3865
3970
|
model: ttadkGateway ? undefined : cfg.model,
|
|
3866
3971
|
disableCliBypass: cfg.disableCliBypass === true,
|
|
3972
|
+
skillPluginDir: cfg.skillPluginDir,
|
|
3867
3973
|
});
|
|
3868
3974
|
// Extra args from env (CLI_DISABLE_DEFAULT_ARGS is removed — adapters own their defaults)
|
|
3869
3975
|
const extra = (process.env.CLI_EXTRA_ARGS ?? '').trim();
|
|
@@ -4026,6 +4132,7 @@ function spawnCli(cfg) {
|
|
|
4026
4132
|
hidePaths: cfg.sandboxHidePaths ?? [],
|
|
4027
4133
|
authPaths: cliAdapter.authPaths,
|
|
4028
4134
|
extraExecPaths: cliAdapter.sandboxExtraExecPaths?.(),
|
|
4135
|
+
readonlyRoots: cfg.skillReadonlyRoots ?? [],
|
|
4029
4136
|
});
|
|
4030
4137
|
if (sbx) {
|
|
4031
4138
|
spawnBin = sbx.bin;
|
|
@@ -5043,10 +5150,17 @@ process.on('message', async (raw) => {
|
|
|
5043
5150
|
spawnCli(msg);
|
|
5044
5151
|
// Queue the initial prompt — flushed when CLI shows idle.
|
|
5045
5152
|
// Adapters with passesInitialPromptViaArgs (e.g. Gemini -i) bake the
|
|
5046
|
-
// prompt into CLI args, so we skip queuing to avoid double-send.
|
|
5047
|
-
//
|
|
5048
|
-
//
|
|
5049
|
-
|
|
5153
|
+
// prompt into CLI args, so we normally skip queuing to avoid double-send.
|
|
5154
|
+
// EXCEPTION: when this bot has startupCommands, spawnCli deliberately did
|
|
5155
|
+
// NOT bake the prompt (deferInitialPrompt) so the commands can precede it
|
|
5156
|
+
// — so we MUST queue it here. shouldDeferInitialPromptForStartup mirrors
|
|
5157
|
+
// spawnCli's decision exactly. Bridge mark is deferred to flushPending.
|
|
5158
|
+
const deferInitialPrompt = shouldDeferInitialPromptForStartup({
|
|
5159
|
+
hasStartupCommands: !!msg.startupCommands?.length,
|
|
5160
|
+
adoptMode: msg.adoptMode === true,
|
|
5161
|
+
passesInitialPromptViaArgs: cliAdapter?.passesInitialPromptViaArgs === true,
|
|
5162
|
+
});
|
|
5163
|
+
if (msg.prompt && (!cliAdapter?.passesInitialPromptViaArgs || deferInitialPrompt)) {
|
|
5050
5164
|
pendingMessages.push({ content: msg.prompt, turnId: msg.turnId });
|
|
5051
5165
|
}
|
|
5052
5166
|
send({ type: 'ready', port, token: writeToken, turnId: currentBotmuxTurnId });
|
|
@@ -5175,21 +5289,14 @@ process.on('message', async (raw) => {
|
|
|
5175
5289
|
if (tmuxScrolledHalfPages > 0)
|
|
5176
5290
|
exitTmuxScrollMode();
|
|
5177
5291
|
if (backend) {
|
|
5178
|
-
|
|
5179
|
-
|
|
5180
|
-
|
|
5181
|
-
|
|
5182
|
-
|
|
5183
|
-
|
|
5184
|
-
|
|
5185
|
-
|
|
5186
|
-
// codex adapter's own writeInput paste-detection delay.
|
|
5187
|
-
await new Promise(r => setTimeout(r, 200));
|
|
5188
|
-
backend.sendSpecialKeys('Enter');
|
|
5189
|
-
}
|
|
5190
|
-
else {
|
|
5191
|
-
backend.write(msg.content + '\r');
|
|
5192
|
-
}
|
|
5292
|
+
// sendRawCommandLine: literal text → 200ms beat (so the CLI's slash-
|
|
5293
|
+
// command picker registers the match before submit; without it Codex /
|
|
5294
|
+
// other Ink TUIs fire Enter while the picker is still building, dismiss
|
|
5295
|
+
// the match, and submit the literal `/clear` as a regular user prompt —
|
|
5296
|
+
// visible to the user as "/clear + 换行" stuck in history; the 200ms
|
|
5297
|
+
// mirrors the codex adapter's own writeInput paste-detection delay) →
|
|
5298
|
+
// Enter. Shared with runStartupCommands so both stay in lockstep.
|
|
5299
|
+
await sendRawCommandLine(backend, msg.content);
|
|
5193
5300
|
isPromptReady = false;
|
|
5194
5301
|
idleDetector?.reset();
|
|
5195
5302
|
log(`Passthrough slash command: ${msg.content}`);
|