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.
Files changed (186) hide show
  1. package/README.md +4 -0
  2. package/dist/adapters/backend/sandbox.d.ts +4 -0
  3. package/dist/adapters/backend/sandbox.d.ts.map +1 -1
  4. package/dist/adapters/backend/sandbox.js +14 -0
  5. package/dist/adapters/backend/sandbox.js.map +1 -1
  6. package/dist/adapters/cli/claude-code.d.ts.map +1 -1
  7. package/dist/adapters/cli/claude-code.js +4 -1
  8. package/dist/adapters/cli/claude-code.js.map +1 -1
  9. package/dist/adapters/cli/types.d.ts +11 -0
  10. package/dist/adapters/cli/types.d.ts.map +1 -1
  11. package/dist/bot-registry.d.ts +18 -0
  12. package/dist/bot-registry.d.ts.map +1 -1
  13. package/dist/bot-registry.js +34 -0
  14. package/dist/bot-registry.js.map +1 -1
  15. package/dist/cli.d.ts.map +1 -1
  16. package/dist/cli.js +30 -65
  17. package/dist/cli.js.map +1 -1
  18. package/dist/core/command-handler.d.ts.map +1 -1
  19. package/dist/core/command-handler.js +42 -1
  20. package/dist/core/command-handler.js.map +1 -1
  21. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  22. package/dist/core/dashboard-ipc-server.js +100 -1
  23. package/dist/core/dashboard-ipc-server.js.map +1 -1
  24. package/dist/core/passthrough-commands.d.ts.map +1 -1
  25. package/dist/core/passthrough-commands.js +1 -1
  26. package/dist/core/passthrough-commands.js.map +1 -1
  27. package/dist/core/pending-response.d.ts +2 -39
  28. package/dist/core/pending-response.d.ts.map +1 -1
  29. package/dist/core/pending-response.js +5 -99
  30. package/dist/core/pending-response.js.map +1 -1
  31. package/dist/core/session-manager.d.ts.map +1 -1
  32. package/dist/core/session-manager.js +4 -16
  33. package/dist/core/session-manager.js.map +1 -1
  34. package/dist/core/skills/claude-plugin-delivery.d.ts +6 -0
  35. package/dist/core/skills/claude-plugin-delivery.d.ts.map +1 -0
  36. package/dist/core/skills/claude-plugin-delivery.js +21 -0
  37. package/dist/core/skills/claude-plugin-delivery.js.map +1 -0
  38. package/dist/core/skills/cli-admin-command.d.ts +7 -0
  39. package/dist/core/skills/cli-admin-command.d.ts.map +1 -0
  40. package/dist/core/skills/cli-admin-command.js +243 -0
  41. package/dist/core/skills/cli-admin-command.js.map +1 -0
  42. package/dist/core/skills/cli-session-command.d.ts +7 -0
  43. package/dist/core/skills/cli-session-command.d.ts.map +1 -0
  44. package/dist/core/skills/cli-session-command.js +45 -0
  45. package/dist/core/skills/cli-session-command.js.map +1 -0
  46. package/dist/core/skills/delivery.d.ts +11 -0
  47. package/dist/core/skills/delivery.d.ts.map +1 -0
  48. package/dist/core/skills/delivery.js +22 -0
  49. package/dist/core/skills/delivery.js.map +1 -0
  50. package/dist/core/skills/discovery.d.ts +3 -0
  51. package/dist/core/skills/discovery.d.ts.map +1 -0
  52. package/dist/core/skills/discovery.js +34 -0
  53. package/dist/core/skills/discovery.js.map +1 -0
  54. package/dist/core/skills/frontmatter.d.ts +9 -0
  55. package/dist/core/skills/frontmatter.d.ts.map +1 -0
  56. package/dist/core/skills/frontmatter.js +42 -0
  57. package/dist/core/skills/frontmatter.js.map +1 -0
  58. package/dist/core/skills/im-command.d.ts +9 -0
  59. package/dist/core/skills/im-command.d.ts.map +1 -0
  60. package/dist/core/skills/im-command.js +107 -0
  61. package/dist/core/skills/im-command.js.map +1 -0
  62. package/dist/core/skills/manifest-store.d.ts +4 -0
  63. package/dist/core/skills/manifest-store.d.ts.map +1 -0
  64. package/dist/core/skills/manifest-store.js +26 -0
  65. package/dist/core/skills/manifest-store.js.map +1 -0
  66. package/dist/core/skills/package.d.ts +13 -0
  67. package/dist/core/skills/package.d.ts.map +1 -0
  68. package/dist/core/skills/package.js +35 -0
  69. package/dist/core/skills/package.js.map +1 -0
  70. package/dist/core/skills/policy.d.ts +18 -0
  71. package/dist/core/skills/policy.d.ts.map +1 -0
  72. package/dist/core/skills/policy.js +69 -0
  73. package/dist/core/skills/policy.js.map +1 -0
  74. package/dist/core/skills/prompt.d.ts +3 -0
  75. package/dist/core/skills/prompt.d.ts.map +1 -0
  76. package/dist/core/skills/prompt.js +25 -0
  77. package/dist/core/skills/prompt.js.map +1 -0
  78. package/dist/core/skills/references.d.ts +21 -0
  79. package/dist/core/skills/references.d.ts.map +1 -0
  80. package/dist/core/skills/references.js +27 -0
  81. package/dist/core/skills/references.js.map +1 -0
  82. package/dist/core/skills/registry-paths.d.ts +5 -0
  83. package/dist/core/skills/registry-paths.d.ts.map +1 -0
  84. package/dist/core/skills/registry-paths.js +15 -0
  85. package/dist/core/skills/registry-paths.js.map +1 -0
  86. package/dist/core/skills/resource-reader.d.ts +9 -0
  87. package/dist/core/skills/resource-reader.d.ts.map +1 -0
  88. package/dist/core/skills/resource-reader.js +97 -0
  89. package/dist/core/skills/resource-reader.js.map +1 -0
  90. package/dist/core/skills/session-resolver.d.ts +14 -0
  91. package/dist/core/skills/session-resolver.d.ts.map +1 -0
  92. package/dist/core/skills/session-resolver.js +24 -0
  93. package/dist/core/skills/session-resolver.js.map +1 -0
  94. package/dist/core/skills/session-runtime.d.ts +14 -0
  95. package/dist/core/skills/session-runtime.d.ts.map +1 -0
  96. package/dist/core/skills/session-runtime.js +32 -0
  97. package/dist/core/skills/session-runtime.js.map +1 -0
  98. package/dist/core/skills/sources.d.ts +21 -0
  99. package/dist/core/skills/sources.d.ts.map +1 -0
  100. package/dist/core/skills/sources.js +155 -0
  101. package/dist/core/skills/sources.js.map +1 -0
  102. package/dist/core/skills/types.d.ts +71 -0
  103. package/dist/core/skills/types.d.ts.map +1 -0
  104. package/dist/core/skills/types.js +2 -0
  105. package/dist/core/skills/types.js.map +1 -0
  106. package/dist/core/startup-commands.d.ts +57 -0
  107. package/dist/core/startup-commands.d.ts.map +1 -0
  108. package/dist/core/startup-commands.js +85 -0
  109. package/dist/core/startup-commands.js.map +1 -0
  110. package/dist/core/types.d.ts +10 -3
  111. package/dist/core/types.d.ts.map +1 -1
  112. package/dist/core/types.js.map +1 -1
  113. package/dist/core/worker-pool.d.ts +14 -1
  114. package/dist/core/worker-pool.d.ts.map +1 -1
  115. package/dist/core/worker-pool.js +93 -62
  116. package/dist/core/worker-pool.js.map +1 -1
  117. package/dist/daemon.d.ts +2 -2
  118. package/dist/daemon.d.ts.map +1 -1
  119. package/dist/daemon.js +49 -52
  120. package/dist/daemon.js.map +1 -1
  121. package/dist/dashboard/skill-install-request.d.ts +21 -0
  122. package/dist/dashboard/skill-install-request.d.ts.map +1 -0
  123. package/dist/dashboard/skill-install-request.js +62 -0
  124. package/dist/dashboard/skill-install-request.js.map +1 -0
  125. package/dist/dashboard/web/app.d.ts.map +1 -1
  126. package/dist/dashboard/web/app.js +4 -1
  127. package/dist/dashboard/web/app.js.map +1 -1
  128. package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
  129. package/dist/dashboard/web/bot-defaults.js +61 -1
  130. package/dist/dashboard/web/bot-defaults.js.map +1 -1
  131. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  132. package/dist/dashboard/web/i18n.js +146 -0
  133. package/dist/dashboard/web/i18n.js.map +1 -1
  134. package/dist/dashboard/web/skills.d.ts +2 -0
  135. package/dist/dashboard/web/skills.d.ts.map +1 -0
  136. package/dist/dashboard/web/skills.js +539 -0
  137. package/dist/dashboard/web/skills.js.map +1 -0
  138. package/dist/dashboard-web/app.js +599 -446
  139. package/dist/dashboard-web/index.html +1 -0
  140. package/dist/dashboard-web/style.css +793 -0
  141. package/dist/dashboard.js +250 -0
  142. package/dist/dashboard.js.map +1 -1
  143. package/dist/global-config.d.ts +7 -0
  144. package/dist/global-config.d.ts.map +1 -1
  145. package/dist/global-config.js +16 -0
  146. package/dist/global-config.js.map +1 -1
  147. package/dist/i18n/en.d.ts.map +1 -1
  148. package/dist/i18n/en.js +3 -5
  149. package/dist/i18n/en.js.map +1 -1
  150. package/dist/i18n/zh.d.ts.map +1 -1
  151. package/dist/i18n/zh.js +3 -5
  152. package/dist/i18n/zh.js.map +1 -1
  153. package/dist/im/lark/card-builder.d.ts +0 -3
  154. package/dist/im/lark/card-builder.d.ts.map +1 -1
  155. package/dist/im/lark/card-builder.js +2 -33
  156. package/dist/im/lark/card-builder.js.map +1 -1
  157. package/dist/services/bot-config-store.d.ts +10 -4
  158. package/dist/services/bot-config-store.d.ts.map +1 -1
  159. package/dist/services/bot-config-store.js +29 -2
  160. package/dist/services/bot-config-store.js.map +1 -1
  161. package/dist/services/session-store.d.ts +1 -0
  162. package/dist/services/session-store.d.ts.map +1 -1
  163. package/dist/services/session-store.js +12 -5
  164. package/dist/services/session-store.js.map +1 -1
  165. package/dist/services/skill-registry-store.d.ts +42 -0
  166. package/dist/services/skill-registry-store.d.ts.map +1 -0
  167. package/dist/services/skill-registry-store.js +343 -0
  168. package/dist/services/skill-registry-store.js.map +1 -0
  169. package/dist/skills/installer.d.ts.map +1 -1
  170. package/dist/skills/installer.js +3 -0
  171. package/dist/skills/installer.js.map +1 -1
  172. package/dist/types.d.ts +3 -5
  173. package/dist/types.d.ts.map +1 -1
  174. package/dist/utils/file-lock.d.ts +1 -0
  175. package/dist/utils/file-lock.d.ts.map +1 -1
  176. package/dist/utils/file-lock.js +87 -1
  177. package/dist/utils/file-lock.js.map +1 -1
  178. package/dist/worker.js +127 -20
  179. package/dist/worker.js.map +1 -1
  180. package/dist/workflows/definition.d.ts +16 -16
  181. package/dist/workflows/events/schema.d.ts +280 -280
  182. package/package.json +1 -1
  183. package/dist/services/pending-response-transaction-store.d.ts +0 -12
  184. package/dist/services/pending-response-transaction-store.d.ts.map +0 -1
  185. package/dist/services/pending-response-transaction-store.js +0 -52
  186. 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,EAAE,QAAQ,IAAI,GAAG,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,WAAW,GAAG,KAAK,CAAC;AAC1B,MAAM,aAAa,GAAG,EAAE,CAAC;AACzB,2EAA2E;AAC3E,4EAA4E;AAC5E,qCAAqC;AACrC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B,KAAK,UAAU,UAAU,CAAC,GAAW;IACnC,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,IAAI,GAAG,KAAK,OAAO,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AACpE,CAAC;AASD,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,UAAkB,EAClB,EAAoB,EACpB,OAAwB,EAAE;IAE1B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,WAAW,CAAC;IAChD,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,gBAAgB,CAAC;IAC7D,MAAM,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC1C,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YACxC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,OAAO,MAAM,EAAE,EAAE,CAAC;YACpB,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC;oBAAC,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,4BAA4B,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,CAAC,CAAC;YAEjC,qEAAqE;YACrE,oEAAoE;YACpE,+BAA+B;YAC/B,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,IAAI,SAAS,GAAG,QAAQ,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBACpC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;oBAC/B,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;iBACnB,CAAC,CAAC;gBACH,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;gBAChC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;YACxC,CAAC;YAAC,OAAO,EAAO,EAAE,CAAC;gBACjB,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ;oBAAE,SAAS,CAAC,mCAAmC;gBACvE,MAAM,EAAE,CAAC;YACX,CAAC;YAED,MAAM,SAAS,GAAG,MAAM;mBACnB,SAAS,IAAI,aAAa;mBAC1B,CAAC,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YACjC,IAAI,SAAS,EAAE,CAAC;gBACd,iEAAiE;gBACjE,iEAAiE;gBACjE,8CAA8C;gBAC9C,MAAM,SAAS,GAAG,GAAG,QAAQ,UAAU,OAAO,CAAC,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvF,IAAI,CAAC;oBACH,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;oBACtC,MAAM,CAAC,IAAI,CAAC,mCAAmC,QAAQ,cAAc,MAAM,SAAS,SAAS,KAAK,CAAC,CAAC;oBACpG,IAAI,CAAC;wBAAC,MAAM,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;oBAC7D,SAAS;gBACX,CAAC;gBAAC,OAAO,SAAc,EAAE,CAAC;oBACxB,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ;wBAAE,SAAS,CAAC,yBAAyB;oBACpE,MAAM,SAAS,CAAC;gBAClB,CAAC;YACH,CAAC;YAED,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,SAAS,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CACb,iCAAiC,QAAQ,GAAG;oBAC5C,gBAAgB,MAAM,IAAI,GAAG,SAAS,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CACjE,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;AACH,CAAC"}
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
- // Bridge mark is deferred to flushPending see flushPending
5048
- // comment for why marking at enqueue is wrong.
5049
- if (msg.prompt && !cliAdapter?.passesInitialPromptViaArgs) {
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
- if ('sendText' in backend && 'sendSpecialKeys' in backend) {
5179
- backend.sendText(msg.content);
5180
- // Beat between text and Enter so the CLI's slash-command picker has
5181
- // time to register the match before submit. Without this, Codex
5182
- // (and likely other Ink-based TUIs) fires Enter while the picker
5183
- // is still building, dismisses the match, and submits the literal
5184
- // `/clear` as a regular user prompt visible to the user as
5185
- // "/clear + 换行" stuck in conversation history. 200ms mirrors the
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}`);