botmux 3.2.0 → 3.2.1

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 (169) hide show
  1. package/README.en.md +1 -0
  2. package/README.md +1 -0
  3. package/dist/adapters/cli/codex.d.ts.map +1 -1
  4. package/dist/adapters/cli/codex.js +13 -1
  5. package/dist/adapters/cli/codex.js.map +1 -1
  6. package/dist/adapters/cli/traex.d.ts.map +1 -1
  7. package/dist/adapters/cli/traex.js +11 -1
  8. package/dist/adapters/cli/traex.js.map +1 -1
  9. package/dist/adapters/cli/types.d.ts +6 -0
  10. package/dist/adapters/cli/types.d.ts.map +1 -1
  11. package/dist/bot-registry.d.ts +7 -0
  12. package/dist/bot-registry.d.ts.map +1 -1
  13. package/dist/bot-registry.js +1 -0
  14. package/dist/bot-registry.js.map +1 -1
  15. package/dist/cli/daemon-lifecycle-env.d.ts +11 -0
  16. package/dist/cli/daemon-lifecycle-env.d.ts.map +1 -0
  17. package/dist/cli/daemon-lifecycle-env.js +25 -0
  18. package/dist/cli/daemon-lifecycle-env.js.map +1 -0
  19. package/dist/cli.d.ts.map +1 -1
  20. package/dist/cli.js +11 -4
  21. package/dist/cli.js.map +1 -1
  22. package/dist/codex-rpc-engine.d.ts +110 -0
  23. package/dist/codex-rpc-engine.d.ts.map +1 -0
  24. package/dist/codex-rpc-engine.js +496 -0
  25. package/dist/codex-rpc-engine.js.map +1 -0
  26. package/dist/codex-rpc-lifecycle.d.ts +157 -0
  27. package/dist/codex-rpc-lifecycle.d.ts.map +1 -0
  28. package/dist/codex-rpc-lifecycle.js +210 -0
  29. package/dist/codex-rpc-lifecycle.js.map +1 -0
  30. package/dist/config.d.ts +1 -0
  31. package/dist/config.d.ts.map +1 -1
  32. package/dist/config.js +14 -2
  33. package/dist/config.js.map +1 -1
  34. package/dist/core/attachment-path.d.ts +3 -0
  35. package/dist/core/attachment-path.d.ts.map +1 -0
  36. package/dist/core/attachment-path.js +8 -0
  37. package/dist/core/attachment-path.js.map +1 -0
  38. package/dist/core/command-handler.d.ts.map +1 -1
  39. package/dist/core/command-handler.js +6 -1
  40. package/dist/core/command-handler.js.map +1 -1
  41. package/dist/core/dashboard-images.d.ts +29 -0
  42. package/dist/core/dashboard-images.d.ts.map +1 -0
  43. package/dist/core/dashboard-images.js +113 -0
  44. package/dist/core/dashboard-images.js.map +1 -0
  45. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  46. package/dist/core/dashboard-ipc-server.js +13 -1
  47. package/dist/core/dashboard-ipc-server.js.map +1 -1
  48. package/dist/core/github-auth.d.ts +5 -0
  49. package/dist/core/github-auth.d.ts.map +1 -1
  50. package/dist/core/github-auth.js +38 -0
  51. package/dist/core/github-auth.js.map +1 -1
  52. package/dist/core/maintenance.d.ts +1 -0
  53. package/dist/core/maintenance.d.ts.map +1 -1
  54. package/dist/core/maintenance.js +9 -1
  55. package/dist/core/maintenance.js.map +1 -1
  56. package/dist/core/session-create.d.ts +10 -0
  57. package/dist/core/session-create.d.ts.map +1 -1
  58. package/dist/core/session-create.js +21 -0
  59. package/dist/core/session-create.js.map +1 -1
  60. package/dist/core/session-manager.d.ts +4 -1
  61. package/dist/core/session-manager.d.ts.map +1 -1
  62. package/dist/core/session-manager.js +25 -13
  63. package/dist/core/session-manager.js.map +1 -1
  64. package/dist/core/trigger-session.d.ts +3 -0
  65. package/dist/core/trigger-session.d.ts.map +1 -1
  66. package/dist/core/trigger-session.js +17 -3
  67. package/dist/core/trigger-session.js.map +1 -1
  68. package/dist/core/worker-pool.d.ts.map +1 -1
  69. package/dist/core/worker-pool.js +2 -0
  70. package/dist/core/worker-pool.js.map +1 -1
  71. package/dist/daemon.d.ts.map +1 -1
  72. package/dist/daemon.js +19 -3
  73. package/dist/daemon.js.map +1 -1
  74. package/dist/dashboard/connector-api.d.ts.map +1 -1
  75. package/dist/dashboard/connector-api.js +19 -0
  76. package/dist/dashboard/connector-api.js.map +1 -1
  77. package/dist/dashboard/settings-write-applier.d.ts +2 -1
  78. package/dist/dashboard/settings-write-applier.d.ts.map +1 -1
  79. package/dist/dashboard/settings-write-applier.js +6 -0
  80. package/dist/dashboard/settings-write-applier.js.map +1 -1
  81. package/dist/dashboard/web/connectors-page.d.ts.map +1 -1
  82. package/dist/dashboard/web/connectors-page.js +23 -2
  83. package/dist/dashboard/web/connectors-page.js.map +1 -1
  84. package/dist/dashboard/web/create-session-composer.d.ts +35 -0
  85. package/dist/dashboard/web/create-session-composer.d.ts.map +1 -0
  86. package/dist/dashboard/web/create-session-composer.js +70 -0
  87. package/dist/dashboard/web/create-session-composer.js.map +1 -0
  88. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  89. package/dist/dashboard/web/i18n.js +65 -5
  90. package/dist/dashboard/web/i18n.js.map +1 -1
  91. package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
  92. package/dist/dashboard/web/sessions-page.js +147 -1
  93. package/dist/dashboard/web/sessions-page.js.map +1 -1
  94. package/dist/dashboard/web/settings-page.d.ts.map +1 -1
  95. package/dist/dashboard/web/settings-page.js +2 -1
  96. package/dist/dashboard/web/settings-page.js.map +1 -1
  97. package/dist/dashboard/web/skills-page.d.ts.map +1 -1
  98. package/dist/dashboard/web/skills-page.js +5 -2
  99. package/dist/dashboard/web/skills-page.js.map +1 -1
  100. package/dist/dashboard/webhook-routes.d.ts +4 -0
  101. package/dist/dashboard/webhook-routes.d.ts.map +1 -1
  102. package/dist/dashboard/webhook-routes.js +19 -0
  103. package/dist/dashboard/webhook-routes.js.map +1 -1
  104. package/dist/dashboard-web/app.js +1 -1
  105. package/dist/dashboard-web/chunks/{bot-defaults-page-4PM4T6QQ.js → bot-defaults-page-O37SAQD5.js} +1 -1
  106. package/dist/dashboard-web/chunks/{chunk-RXVA6XW3.js → chunk-6QHMLMIM.js} +6 -6
  107. package/dist/dashboard-web/chunks/{chunk-IKCZ677K.js → chunk-B42PCL5P.js} +1 -1
  108. package/dist/dashboard-web/chunks/{chunk-3PMN55Z6.js → chunk-FYALHCPG.js} +1 -1
  109. package/dist/dashboard-web/chunks/{chunk-AIDN2WZB.js → chunk-O2DPQL7C.js} +1 -1
  110. package/dist/dashboard-web/chunks/connectors-page-DZBQ42MH.js +1 -0
  111. package/dist/dashboard-web/chunks/{groups-page-TAU2UIVS.js → groups-page-3IEGRZKQ.js} +1 -1
  112. package/dist/dashboard-web/chunks/{insights-page-PJ2XVM6T.js → insights-page-X3ADRON3.js} +1 -1
  113. package/dist/dashboard-web/chunks/{monitor-room-D6445HJO.js → monitor-room-IV36RGQY.js} +1 -1
  114. package/dist/dashboard-web/chunks/{monitoring-page-GUHMCKSO.js → monitoring-page-ADFKVON4.js} +1 -1
  115. package/dist/dashboard-web/chunks/{office-page-6K6U2MS5.js → office-page-CALAOWNS.js} +1 -1
  116. package/dist/dashboard-web/chunks/{overview-page-USDYU7U5.js → overview-page-SLMGLK3M.js} +1 -1
  117. package/dist/dashboard-web/chunks/{roles-page-O4OUA7ZH.js → roles-page-L7JJ4FFV.js} +1 -1
  118. package/dist/dashboard-web/chunks/{schedules-page-LNIBXJSZ.js → schedules-page-Z3672POL.js} +1 -1
  119. package/dist/dashboard-web/chunks/sessions-page-OKJ5YWUZ.js +3 -0
  120. package/dist/dashboard-web/chunks/settings-page-P6MI2ZUE.js +2 -0
  121. package/dist/dashboard-web/chunks/{skills-page-M5KYNXBA.js → skills-page-FT7BVZ6X.js} +4 -4
  122. package/dist/dashboard-web/chunks/{team-federation-page-GT7UFQMN.js → team-federation-page-DEYCPUFB.js} +1 -1
  123. package/dist/dashboard-web/chunks/{v3-page-UYZIRJ2C.js → v3-page-4IOWREZG.js} +1 -1
  124. package/dist/dashboard-web/chunks/{whiteboards-page-WAR77DQE.js → whiteboards-page-2VMBETZH.js} +1 -1
  125. package/dist/dashboard-web/style.css +191 -0
  126. package/dist/dashboard.js +33 -6
  127. package/dist/dashboard.js.map +1 -1
  128. package/dist/global-config.d.ts +7 -0
  129. package/dist/global-config.d.ts.map +1 -1
  130. package/dist/global-config.js +2 -0
  131. package/dist/global-config.js.map +1 -1
  132. package/dist/im/lark/ask-card.d.ts.map +1 -1
  133. package/dist/im/lark/ask-card.js +52 -4
  134. package/dist/im/lark/ask-card.js.map +1 -1
  135. package/dist/im/lark/card-handler.d.ts +2 -0
  136. package/dist/im/lark/card-handler.d.ts.map +1 -1
  137. package/dist/im/lark/card-handler.js +19 -2
  138. package/dist/im/lark/card-handler.js.map +1 -1
  139. package/dist/im/lark/event-dispatcher.d.ts +3 -0
  140. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  141. package/dist/im/lark/event-dispatcher.js +706 -693
  142. package/dist/im/lark/event-dispatcher.js.map +1 -1
  143. package/dist/im/lark/grant-pending.d.ts +8 -4
  144. package/dist/im/lark/grant-pending.d.ts.map +1 -1
  145. package/dist/im/lark/grant-pending.js +13 -6
  146. package/dist/im/lark/grant-pending.js.map +1 -1
  147. package/dist/services/connector-store.d.ts +8 -0
  148. package/dist/services/connector-store.d.ts.map +1 -1
  149. package/dist/services/connector-store.js.map +1 -1
  150. package/dist/services/session-store.d.ts +2 -1
  151. package/dist/services/session-store.d.ts.map +1 -1
  152. package/dist/services/session-store.js +60 -2
  153. package/dist/services/session-store.js.map +1 -1
  154. package/dist/services/skill-registry-store.d.ts +16 -0
  155. package/dist/services/skill-registry-store.d.ts.map +1 -1
  156. package/dist/services/skill-registry-store.js +343 -47
  157. package/dist/services/skill-registry-store.js.map +1 -1
  158. package/dist/services/trigger-types.d.ts +5 -0
  159. package/dist/services/trigger-types.d.ts.map +1 -1
  160. package/dist/services/trigger-types.js +12 -0
  161. package/dist/services/trigger-types.js.map +1 -1
  162. package/dist/types.d.ts +13 -2
  163. package/dist/types.d.ts.map +1 -1
  164. package/dist/worker.js +440 -34
  165. package/dist/worker.js.map +1 -1
  166. package/package.json +1 -1
  167. package/dist/dashboard-web/chunks/connectors-page-2MKF4YTN.js +0 -1
  168. package/dist/dashboard-web/chunks/sessions-page-B6U6TCFF.js +0 -3
  169. package/dist/dashboard-web/chunks/settings-page-PXLRFF7I.js +0 -2
@@ -0,0 +1,157 @@
1
+ import type { DaemonToWorker } from './types.js';
2
+ type InitCfg = Extract<DaemonToWorker, {
3
+ type: 'init';
4
+ }>;
5
+ /** CLIs that expose the codex-family `app-server --listen` + `--remote resume`
6
+ * protocol the RPC engine drives. codex + traex are verified identical; coco
7
+ * diverges (--resume flag) and needs its own verification before inclusion. */
8
+ export declare const RPC_CAPABLE_CLIS: Set<string>;
9
+ /** All fail-closed gates for codex-family RPC input in ONE place so the worker's
10
+ * pane-branching and engageCodexRpc agree. Every excluded case degrades to the
11
+ * normal paste path — never a silent capability/security change:
12
+ * - disableCliBypass: RPC hardcodes approvalPolicy=never + dangerFullAccess, so
13
+ * engaging it for an approval-gated bot would silently upgrade it to full
14
+ * access (P1-1).
15
+ * - startupCommands: /effort etc. must run in the TUI before the first turn,
16
+ * but the fresh first turn is sent pre-spawn to persist the rollout — RPC
17
+ * can't honor that ordering, so fail-closed (P1-4).
18
+ * - wrapperCli / cliPathOverride: the app-server is launched as `<bin>
19
+ * app-server`, which a wrapper/alternate launcher won't satisfy the same way
20
+ * the TUI's buildArgs does — two launchers would diverge, so fail-closed
21
+ * (P1-2).
22
+ * - backendType !== 'tmux': the pane-ownership detection + controlled respawn
23
+ * are only wired for tmux. On herdr/zellij a surviving dead `--remote` pane
24
+ * would be misjudged as native and reattached, and pty has no persistent
25
+ * pane at all — so restrict RPC to tmux until each backend's replace path is
26
+ * built + verified. */
27
+ export interface CodexRpcRuntimeGates {
28
+ /** Process-wide BOTMUX_SANDBOX=1 force. It is not represented in InitCfg but
29
+ * must gate RPC too: the app-server owns model execution and otherwise runs
30
+ * outside the sandbox wrapped around the viewer pane. */
31
+ sandboxForced?: boolean;
32
+ }
33
+ export declare function codexRpcEligible(cfg: InitCfg, runtime?: CodexRpcRuntimeGates): boolean;
34
+ /** Positive rollout evidence that THIS turn's user message was persisted (P1-1).
35
+ * Given a thread's drained rollout events, is there a user turn matching the
36
+ * prompt? session_meta (written at thread/start) is not a `kind:'user'` event,
37
+ * so an empty thread yields false — filename existence alone would not. Match is
38
+ * normalized-equal OR contains (codex may prepend AGENTS.md context to the first
39
+ * turn); the fresh-thread scope makes a contains-match unambiguous. */
40
+ export declare function rolloutUserTurnMatches(events: ReadonlyArray<{
41
+ kind: string;
42
+ text: string;
43
+ }>, promptText: string): boolean;
44
+ /** Decide what to do about a codex startup dialog on an RPC `--remote` pane
45
+ * (P1-3 / P2). An RPC pane has no terminal input path, so a blocking dialog
46
+ * freezes the viewer. The update menu is disabled at the source (-c
47
+ * check_for_update_on_startup=false); this is only a fail-safe:
48
+ * - 'warn-update' — an update menu is present (default may be "Update now") →
49
+ * NEVER auto-press; warn the user, they dismiss manually.
50
+ * - 'dismiss-safe' — a plain "press enter to continue" with no menu → safe Enter.
51
+ * - 'ready' — composer reached, no blocking dialog → stop watching.
52
+ * - 'wait' — nothing actionable yet.
53
+ * UPDATE_DIALOG takes precedence, so a screen with both an update menu AND a
54
+ * "press enter" line is warned, never pressed. */
55
+ export declare function decideStartupDialogAction(screen: string, readyPattern?: RegExp): 'warn-update' | 'dismiss-safe' | 'ready' | 'wait';
56
+ export interface PaneProbes {
57
+ panePidOf?: (sessionName: string) => number | undefined;
58
+ argvOf?: (pid: number) => string[];
59
+ commOf?: (pid: number) => string | undefined;
60
+ childrenOf?: (pid: number) => number[];
61
+ }
62
+ /** Outcome of an engage attempt (exactly-once-priority three-state for fresh +
63
+ * the resume/setup states):
64
+ * - 'accepted' — fresh first turn confirmed (ack or rollout evidence), or a
65
+ * resume that needs its waking prompt queued is 'resumed'.
66
+ * - 'ambiguous' — fresh first turn dispatched but unconfirmed → engaged, but
67
+ * the prompt must NOT be resent (P1-1); caller notifies.
68
+ * - 'resumed' — resume path engaged (no turn sent) → the waking prompt must
69
+ * be queued for post-ready flush.
70
+ * - 'not-engaged' — setup failed OR fresh frame never dispatched → paste. */
71
+ export type EngageOutcome = 'accepted' | 'ambiguous' | 'resumed' | 'not-engaged';
72
+ /** Whether the FRESH first turn should PRE-mark the codex bridge (so the reply is
73
+ * attributed even if the model skips `botmux send`). ONLY 'accepted' — a
74
+ * confirmed turn whose prompt is not re-queued, so exactly one mark exists and
75
+ * the reply consumes it. NOT 'ambiguous' (no positive evidence the turn ran → an
76
+ * unstarted queue head would wedge every later turn's drain — Codex P1) and NOT
77
+ * 'not-sent'/'resumed' (those never reach the pre-mark; not-sent's paste flush
78
+ * marks once, resume flushes its queued prompt). */
79
+ export declare function shouldPreMarkFirstTurn(outcome: EngageOutcome): boolean;
80
+ /** Injected effects for the init-time RPC state machine (real ones wired by the
81
+ * worker; fakes by tests). */
82
+ export interface RpcInitEffects {
83
+ paneInfo: (sessionId: string) => {
84
+ name: string;
85
+ live: boolean;
86
+ } | null;
87
+ paneIsRemote: (sessionName: string) => boolean;
88
+ /** Refresh the session-scoped Skill/MCP generation and start its trusted MCP
89
+ * host before the app-server starts. For fresh RPC, this also mutates the
90
+ * first prompt to include the current Skill catalog. */
91
+ prepare: () => Promise<void>;
92
+ engage: () => Promise<EngageOutcome>;
93
+ killVerify: (sessionName: string) => Promise<boolean>;
94
+ teardownEngine: () => void;
95
+ log: (m: string) => void;
96
+ notify: (m: string) => void;
97
+ }
98
+ /** Whether the initial prompt should be pushed to pendingMessages (the exact
99
+ * worker wiring, extracted so the P1-1 exactly-once guarantee is unit-testable):
100
+ * - paste (no RPC engine) → queue as usual.
101
+ * - RPC RESUME (engine + queuePrompt) → queue the waking prompt for post-ready flush.
102
+ * - RPC FRESH accepted/ambiguous → engine set + queuePrompt=false → NEVER
103
+ * queue (the turn was pre-sent or is ambiguous; re-queuing would double-execute).
104
+ * args-baked first prompts skip the queue unless deferred for startup commands. */
105
+ export declare function shouldQueueInitialPrompt(o: {
106
+ hasPrompt: boolean;
107
+ rpcEngineActive: boolean;
108
+ queuePrompt: boolean;
109
+ passesInitialPromptViaArgs: boolean;
110
+ deferInitialPrompt: boolean;
111
+ }): boolean;
112
+ export interface RpcInitDecision {
113
+ /** RPC is active → spawnCli will launch the `--remote resume` TUI. */
114
+ engaged: boolean;
115
+ /** The init prompt must be QUEUED (resume path: delivered by flushPending →
116
+ * sendTurn once the TUI is ready) rather than pre-sent (fresh) or pasted. */
117
+ queuePrompt: boolean;
118
+ /** A stale `--remote` pane could not be replaced — the caller MUST NOT run
119
+ * spawnCli (it would reattach the dead pane against the fresh-port engine). */
120
+ abortSpawn: boolean;
121
+ }
122
+ /** Pure init-time state machine for codex-family RPC, extracted so the
123
+ * fresh/resume/kill-failure ORDERING is unit-testable (the worker only wires
124
+ * real effects + acts on the decision). Mirrors the four cases:
125
+ * - not eligible → nothing (paste).
126
+ * - no live pane (fresh or resume- → prepare Skill/MCP state, then engage;
127
+ * without a surviving pane) fresh pre-sends the first turn inside
128
+ * engage, resume must queue it.
129
+ * - live RPC-owned pane → prepare, engage, then kill+VERIFY the stale pane;
130
+ * on success respawn (queue the prompt),
131
+ * on failure tear the engine down + abort
132
+ * spawn (never attach a stale remote pane
133
+ * to a fresh-port engine — Codex P0-2).
134
+ * - live native paste pane → leave it (fail-closed paste, boundary #3). */
135
+ export declare function orchestrateCodexRpcInit(cfg: InitCfg, fx: RpcInitEffects, runtime?: CodexRpcRuntimeGates): Promise<RpcInitDecision>;
136
+ export interface PersistentPaneKillEffects {
137
+ kill: (sessionName: string) => void;
138
+ isLive: (sessionName: string) => boolean;
139
+ wait: (ms: number) => Promise<void>;
140
+ }
141
+ /** Kill a resolved persistent-session name and verify that exact name is gone.
142
+ * Keeping the resolved name opaque avoids accidentally applying sessionName()
143
+ * twice (`bmx-1234` -> `bmx-bmx-`), which would turn every failed kill into a
144
+ * false success and reattach the stale RPC pane. */
145
+ export declare function killAndVerifyPersistentPane(sessionName: string, fx: PersistentPaneKillEffects, attempts?: number, retryMs?: number): Promise<boolean>;
146
+ /** Does the surviving persistent pane run a botmux RPC `--remote` TUI (vs a
147
+ * native paste codex/traex)? Walks the pane's process tree and inspects the LEAF
148
+ * argv (Linux /proc + macOS ps, via readCmdline) — NOT tmux
149
+ * pane_current_command, which only returns `codex`/`node` without argv. Only a
150
+ * codex-family process carrying `--remote` in argv counts as RPC-owned; a native
151
+ * `codex resume`, a bare shell, or an unreadable tree fails-closed to false so a
152
+ * daemon-restart resume never force-respawns a possibly-mid-turn native pane.
153
+ * This is a live-argv check, not a persisted marker, so there is no stale-marker
154
+ * hazard. Probes are injectable for tests (defaults hit the real OS/tmux). */
155
+ export declare function paneRunsRemoteTui(persistentSessionName: string, probes?: PaneProbes): boolean;
156
+ export {};
157
+ //# sourceMappingURL=codex-rpc-lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-rpc-lifecycle.d.ts","sourceRoot":"","sources":["../src/codex-rpc-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,210 @@
1
+ // Pure, testable helpers for the hybrid codex-family RPC input lifecycle. Kept
2
+ // out of worker.ts (which auto-registers process handlers on import) so the gate
3
+ // and the pane-ownership detection can be unit-tested with injected probes.
4
+ import { execFileSync } from 'node:child_process';
5
+ import { readCmdline, readComm, getChildPids } from './core/session-discovery.js';
6
+ /** CLIs that expose the codex-family `app-server --listen` + `--remote resume`
7
+ * protocol the RPC engine drives. codex + traex are verified identical; coco
8
+ * diverges (--resume flag) and needs its own verification before inclusion. */
9
+ export const RPC_CAPABLE_CLIS = new Set(['codex', 'traex']);
10
+ export function codexRpcEligible(cfg, runtime = {}) {
11
+ const wantResume = cfg.resume === true && !!cfg.cliSessionId;
12
+ return (cfg.codexRpcInput === true && RPC_CAPABLE_CLIS.has(cfg.cliId) &&
13
+ cfg.backendType === 'tmux' &&
14
+ cfg.adoptMode !== true && cfg.readIsolation !== true && cfg.sandbox !== true && runtime.sandboxForced !== true &&
15
+ cfg.disableCliBypass !== true &&
16
+ !cfg.startupCommands?.length &&
17
+ !cfg.wrapperCli && !cfg.cliPathOverride &&
18
+ (!!cfg.prompt || wantResume));
19
+ }
20
+ /** Positive rollout evidence that THIS turn's user message was persisted (P1-1).
21
+ * Given a thread's drained rollout events, is there a user turn matching the
22
+ * prompt? session_meta (written at thread/start) is not a `kind:'user'` event,
23
+ * so an empty thread yields false — filename existence alone would not. Match is
24
+ * normalized-equal OR contains (codex may prepend AGENTS.md context to the first
25
+ * turn); the fresh-thread scope makes a contains-match unambiguous. */
26
+ export function rolloutUserTurnMatches(events, promptText) {
27
+ const norm = (s) => s.replace(/\r\n/g, '\n').replace(/\r/g, '\n').trim();
28
+ const needle = norm(promptText);
29
+ if (!needle)
30
+ return false;
31
+ return events.some(e => e.kind === 'user' && (norm(e.text) === needle || norm(e.text).includes(needle)));
32
+ }
33
+ /** Decide what to do about a codex startup dialog on an RPC `--remote` pane
34
+ * (P1-3 / P2). An RPC pane has no terminal input path, so a blocking dialog
35
+ * freezes the viewer. The update menu is disabled at the source (-c
36
+ * check_for_update_on_startup=false); this is only a fail-safe:
37
+ * - 'warn-update' — an update menu is present (default may be "Update now") →
38
+ * NEVER auto-press; warn the user, they dismiss manually.
39
+ * - 'dismiss-safe' — a plain "press enter to continue" with no menu → safe Enter.
40
+ * - 'ready' — composer reached, no blocking dialog → stop watching.
41
+ * - 'wait' — nothing actionable yet.
42
+ * UPDATE_DIALOG takes precedence, so a screen with both an update menu AND a
43
+ * "press enter" line is warned, never pressed. */
44
+ export function decideStartupDialogAction(screen, readyPattern) {
45
+ if (/Update available|Update now \(runs|Skip until next version/i.test(screen))
46
+ return 'warn-update';
47
+ if (/Press enter to continue/i.test(screen))
48
+ return 'dismiss-safe';
49
+ if (readyPattern?.test(screen) === true)
50
+ return 'ready';
51
+ return 'wait';
52
+ }
53
+ /** Whether the FRESH first turn should PRE-mark the codex bridge (so the reply is
54
+ * attributed even if the model skips `botmux send`). ONLY 'accepted' — a
55
+ * confirmed turn whose prompt is not re-queued, so exactly one mark exists and
56
+ * the reply consumes it. NOT 'ambiguous' (no positive evidence the turn ran → an
57
+ * unstarted queue head would wedge every later turn's drain — Codex P1) and NOT
58
+ * 'not-sent'/'resumed' (those never reach the pre-mark; not-sent's paste flush
59
+ * marks once, resume flushes its queued prompt). */
60
+ export function shouldPreMarkFirstTurn(outcome) {
61
+ return outcome === 'accepted';
62
+ }
63
+ /** Whether the initial prompt should be pushed to pendingMessages (the exact
64
+ * worker wiring, extracted so the P1-1 exactly-once guarantee is unit-testable):
65
+ * - paste (no RPC engine) → queue as usual.
66
+ * - RPC RESUME (engine + queuePrompt) → queue the waking prompt for post-ready flush.
67
+ * - RPC FRESH accepted/ambiguous → engine set + queuePrompt=false → NEVER
68
+ * queue (the turn was pre-sent or is ambiguous; re-queuing would double-execute).
69
+ * args-baked first prompts skip the queue unless deferred for startup commands. */
70
+ export function shouldQueueInitialPrompt(o) {
71
+ if (!o.hasPrompt)
72
+ return false;
73
+ const wantsQueue = !o.rpcEngineActive || o.queuePrompt;
74
+ if (!wantsQueue)
75
+ return false;
76
+ return !o.passesInitialPromptViaArgs || o.deferInitialPrompt;
77
+ }
78
+ /** Pure init-time state machine for codex-family RPC, extracted so the
79
+ * fresh/resume/kill-failure ORDERING is unit-testable (the worker only wires
80
+ * real effects + acts on the decision). Mirrors the four cases:
81
+ * - not eligible → nothing (paste).
82
+ * - no live pane (fresh or resume- → prepare Skill/MCP state, then engage;
83
+ * without a surviving pane) fresh pre-sends the first turn inside
84
+ * engage, resume must queue it.
85
+ * - live RPC-owned pane → prepare, engage, then kill+VERIFY the stale pane;
86
+ * on success respawn (queue the prompt),
87
+ * on failure tear the engine down + abort
88
+ * spawn (never attach a stale remote pane
89
+ * to a fresh-port engine — Codex P0-2).
90
+ * - live native paste pane → leave it (fail-closed paste, boundary #3). */
91
+ export async function orchestrateCodexRpcInit(cfg, fx, runtime = {}) {
92
+ const NONE = { engaged: false, queuePrompt: false, abortSpawn: false };
93
+ if (!codexRpcEligible(cfg, runtime))
94
+ return NONE;
95
+ const pane = fx.paneInfo(cfg.sessionId);
96
+ if (!pane || !pane.live) {
97
+ // Fresh session, or a resume whose pane didn't survive.
98
+ await fx.prepare();
99
+ const outcome = await fx.engage();
100
+ switch (outcome) {
101
+ case 'accepted':
102
+ // Fresh first turn confirmed delivered → engaged, do NOT re-queue.
103
+ return { engaged: true, queuePrompt: false, abortSpawn: false };
104
+ case 'ambiguous':
105
+ // Fresh first turn dispatched but unconfirmed → engaged, but NEVER resend
106
+ // (exactly-once). The notify is the authoritative result; the viewer
107
+ // resume recovers the turn if it actually landed. The prompt is NOT
108
+ // queued (queuePrompt:false) and must never reach pending/inflight.
109
+ fx.notify('⚠️ 首条消息已发出但未收到确认。为避免重复执行未自动重发;请查看终端结果,如未执行请手动重发。');
110
+ return { engaged: true, queuePrompt: false, abortSpawn: false };
111
+ case 'resumed':
112
+ // Resume engaged (no pre-send) → queue the waking prompt for post-ready flush.
113
+ return { engaged: true, queuePrompt: true, abortSpawn: false };
114
+ case 'not-engaged':
115
+ return NONE; // setup failed or frame never dispatched → safe paste fallback
116
+ }
117
+ }
118
+ if (fx.paneIsRemote(pane.name)) {
119
+ // Surviving RPC `--remote` pane on the now-dead prior app-server (always a
120
+ // resume). Re-engage, then replace the stale pane.
121
+ await fx.prepare();
122
+ const outcome = await fx.engage();
123
+ if (outcome === 'not-engaged') {
124
+ // The pane is still a viewer for the prior incarnation's dead app-server;
125
+ // merely returning to the paste path would reattach that pane and silently
126
+ // drop input. Remove it first so spawnCli can create a native paste pane.
127
+ const gone = await fx.killVerify(pane.name);
128
+ if (gone)
129
+ return NONE;
130
+ fx.notify('Codex RPC 会话恢复失败:新引擎未启动,且无法替换旧 --remote 面板。请重试,或 /close 后重开会话。');
131
+ fx.log(`Codex RPC resume: engine unavailable and FAILED to kill stale --remote pane ${pane.name}; aborting init`);
132
+ return { engaged: false, queuePrompt: false, abortSpawn: true };
133
+ }
134
+ const gone = await fx.killVerify(pane.name);
135
+ if (gone)
136
+ return { engaged: true, queuePrompt: true, abortSpawn: false };
137
+ fx.teardownEngine();
138
+ fx.notify('Codex RPC 会话恢复失败:无法替换旧 --remote 面板。请重试,或 /close 后重开会话。');
139
+ fx.log(`Codex RPC resume: FAILED to kill stale --remote pane ${pane.name}; aborting init (never attach a stale remote pane to a fresh-port engine)`);
140
+ return { engaged: false, queuePrompt: false, abortSpawn: true };
141
+ }
142
+ fx.log('Codex RPC: surviving pane is native paste (not RPC-owned) — keeping paste for this restore');
143
+ return NONE;
144
+ }
145
+ /** Kill a resolved persistent-session name and verify that exact name is gone.
146
+ * Keeping the resolved name opaque avoids accidentally applying sessionName()
147
+ * twice (`bmx-1234` -> `bmx-bmx-`), which would turn every failed kill into a
148
+ * false success and reattach the stale RPC pane. */
149
+ export async function killAndVerifyPersistentPane(sessionName, fx, attempts = 4, retryMs = 250) {
150
+ for (let attempt = 0; attempt < attempts; attempt++) {
151
+ try {
152
+ fx.kill(sessionName);
153
+ }
154
+ catch { /* verify below */ }
155
+ if (!fx.isLive(sessionName))
156
+ return true;
157
+ if (attempt + 1 < attempts)
158
+ await fx.wait(retryMs);
159
+ }
160
+ return !fx.isLive(sessionName);
161
+ }
162
+ function tmuxPanePid(sessionName) {
163
+ try {
164
+ const out = execFileSync('tmux', ['display', '-t', sessionName, '-p', '#{pane_pid}'], { encoding: 'utf-8', stdio: ['ignore', 'pipe', 'ignore'], timeout: 3000 }).trim();
165
+ const n = Number(out);
166
+ return Number.isInteger(n) && n > 0 ? n : undefined;
167
+ }
168
+ catch {
169
+ return undefined;
170
+ }
171
+ }
172
+ /** Does the surviving persistent pane run a botmux RPC `--remote` TUI (vs a
173
+ * native paste codex/traex)? Walks the pane's process tree and inspects the LEAF
174
+ * argv (Linux /proc + macOS ps, via readCmdline) — NOT tmux
175
+ * pane_current_command, which only returns `codex`/`node` without argv. Only a
176
+ * codex-family process carrying `--remote` in argv counts as RPC-owned; a native
177
+ * `codex resume`, a bare shell, or an unreadable tree fails-closed to false so a
178
+ * daemon-restart resume never force-respawns a possibly-mid-turn native pane.
179
+ * This is a live-argv check, not a persisted marker, so there is no stale-marker
180
+ * hazard. Probes are injectable for tests (defaults hit the real OS/tmux). */
181
+ export function paneRunsRemoteTui(persistentSessionName, probes = {}) {
182
+ const panePidOf = probes.panePidOf ?? tmuxPanePid;
183
+ const argvOf = probes.argvOf ?? readCmdline;
184
+ const commOf = probes.commOf ?? readComm;
185
+ const childrenOf = probes.childrenOf ?? getChildPids;
186
+ const panePid = panePidOf(persistentSessionName);
187
+ if (panePid === undefined || !Number.isInteger(panePid) || panePid <= 0)
188
+ return false;
189
+ let frontier = [panePid];
190
+ const seen = new Set();
191
+ for (let depth = 0; depth <= 4 && frontier.length; depth++) {
192
+ const next = [];
193
+ for (const pid of frontier) {
194
+ if (seen.has(pid))
195
+ continue;
196
+ seen.add(pid);
197
+ const argv = argvOf(pid);
198
+ if (argv.length) {
199
+ const comm = commOf(pid) ?? '';
200
+ const isCodexFamily = /^(codex|traex)/i.test(comm) || argv.some(a => /(?:^|\/)(codex|traex)$/i.test(a));
201
+ if (isCodexFamily && argv.includes('--remote'))
202
+ return true;
203
+ }
204
+ next.push(...childrenOf(pid));
205
+ }
206
+ frontier = next;
207
+ }
208
+ return false;
209
+ }
210
+ //# sourceMappingURL=codex-rpc-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-rpc-lifecycle.js","sourceRoot":"","sources":["../src/codex-rpc-lifecycle.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -135,6 +135,7 @@ export declare const config: {
135
135
  };
136
136
  readonly chatBotDiscovery: ChatBotDiscoveryConfig;
137
137
  readonly herdrTraexPlugin: HerdrTraexPluginRuntimeConfig;
138
+ readonly codexRpcInputDefault: boolean;
138
139
  };
139
140
  export type Config = typeof config;
140
141
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAsB/D,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AA2BD,MAAM,WAAW,sBAAsB;IACrC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,sBAAsB,CAU1G;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,6BAA6B,CAgBjH;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,IAAI,OAAO,CAEzD;AAED,wBAAgB,oCAAoC,IAAI,MAAM,GAAG,SAAS,CAEzE;AAKD;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAQzF;AAED,eAAO,MAAM,MAAM;;;;;;iBAUI,MAAM;;;QAGzB;;;4CAGoC;;;;eAIY,OAAO,yBAAyB,EAAE,KAAK;;qBAElB,WAAW;QAChF;;;;;6CAKqC;;;;;;;;;;;;;;;;;;;;QAwCrC;;;;;;;;;;sEAU8D;;;;;;;;QAQ9D,sCAAsC;;QAEtC,iEAAiE;;QAEjE,2CAA2C;;QAE3C,mFAAmF;sBAI3E,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;QAC9B,mGAAmG;mBAI3F,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;QAG/B;;;;;WAKG;;;;;;QAMH,uDAAuD;sBAI/C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;QAC9B,2DAA2D;mBAInD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;CAOlC,CAAC;AAGF,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AA0B/D,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AA2BD,MAAM,WAAW,sBAAsB;IACrC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,sBAAsB,CAU1G;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,6BAA6B,CAgBjH;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,IAAI,OAAO,CAEzD;AAED,wBAAgB,oCAAoC,IAAI,MAAM,GAAG,SAAS,CAEzE;AAKD;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAQzF;AAED,eAAO,MAAM,MAAM;;;;;;iBAUI,MAAM;;;QAGzB;;;4CAGoC;;;;eAIY,OAAO,yBAAyB,EAAE,KAAK;;qBAElB,WAAW;QAChF;;;;;6CAKqC;;;;;;;;;;;;;;;;;;;;QAwCrC;;;;;;;;;;sEAU8D;;;;;;;;QAQ9D,sCAAsC;;QAEtC,iEAAiE;;QAEjE,2CAA2C;;QAE3C,mFAAmF;sBAI3E,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;QAC9B,mGAAmG;mBAI3F,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;QAG/B;;;;;WAKG;;;;;;QAMH,uDAAuD;sBAI/C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;QAC9B,2DAA2D;mBAInD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;mCAeL,OAAO;CACpC,CAAC;AAGF,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC"}
package/dist/config.js CHANGED
@@ -11,8 +11,11 @@ function getLocalIp() {
11
11
  }
12
12
  return 'localhost';
13
13
  }
14
- const configuredWebExternalHost = process.env.WEB_EXTERNAL_HOST;
15
- const configuredDashboardExternalHost = process.env.BOTMUX_DASHBOARD_EXTERNAL_HOST ?? process.env.WEB_EXTERNAL_HOST;
14
+ function nonBlankHost(value) {
15
+ return value?.trim() || undefined;
16
+ }
17
+ const configuredWebExternalHost = nonBlankHost(process.env.WEB_EXTERNAL_HOST);
18
+ const configuredDashboardExternalHost = nonBlankHost(process.env.BOTMUX_DASHBOARD_EXTERNAL_HOST) ?? configuredWebExternalHost;
16
19
  export function getWebExternalHost() {
17
20
  return configuredWebExternalHost ?? getLocalIp();
18
21
  }
@@ -263,5 +266,14 @@ export const config = {
263
266
  // restart. The daemon's listChatBotMembers reads this per call.
264
267
  get chatBotDiscovery() { return resolveChatBotDiscoveryConfig(); },
265
268
  get herdrTraexPlugin() { return resolveHerdrTraexPluginConfig(); },
269
+ // Live getter (like chatBotDiscovery): re-reads the experimental global toggle
270
+ // so a Settings change enables/disables RPC input mode for new codex-family
271
+ // sessions without a daemon restart. The daemon ORs this with each bot's own
272
+ // `codexRpcInput` flag when building the worker init message.
273
+ // Default OFF (absent ⇒ disabled): the hybrid RPC pane lifecycle (resume
274
+ // respawn + ready-gate) must be live-verified before the fleet default flips
275
+ // ON. A per-bot codexRpcInput:true still force-enables; the dashboard toggle
276
+ // sets this global explicitly.
277
+ get codexRpcInputDefault() { return readGlobalConfig().dashboard?.codexRpcInput === true; },
266
278
  };
267
279
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EACL,oCAAoC,EACpC,6BAA6B,EAC7B,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAE5B,sEAAsE;AACtE,SAAS,UAAU;IACjB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC;QACvD,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO,IAAI,CAAC,OAAO,CAAC;QACpE,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,YAAY,CAAC,KAAyB;IAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;AACpC,CAAC;AAED,MAAM,yBAAyB,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAC9E,MAAM,+BAA+B,GACnC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,IAAI,yBAAyB,CAAC;AAExF,MAAM,UAAU,kBAAkB;IAChC,OAAO,yBAAyB,IAAI,UAAU,EAAE,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,+BAA+B,IAAI,UAAU,EAAE,CAAC;AACzD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,oBAAoB;IAC3B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,2EAA2E;AAC3E,8EAA8E;AAC9E,iDAAiD;AACjD,4EAA4E;AAC5E,+EAA+E;AAC/E,4EAA4E;AAC5E,yEAAyE;AACzE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AAarE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,6BAA6B,CAAC,MAAyB,OAAO,CAAC,GAAG;IAChF,MAAM,OAAO,GAAG,GAAG,CAAC,iCAAiC,CAAC;IACtD,MAAM,kBAAkB,GACtB,OAAO,IAAI,IAAI,IAAI,OAAO,KAAK,EAAE;QAC/B,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,MAAM;QAClC,CAAC,CAAC,gBAAgB,EAAE,CAAC,SAAS,EAAE,gBAAgB,KAAK,KAAK,CAAC,CAAC,aAAa;IAC7E,OAAO;QACL,kBAAkB;QAClB,oBAAoB,EAAE,MAAM,CAAC,GAAG,CAAC,oCAAoC,CAAC,IAAI,KAAK;KAChF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,6BAA6B,CAAC,MAAyB,OAAO,CAAC,GAAG;IAChF,MAAM,UAAU,GAAG,GAAG,CAAC,iCAAiC,CAAC;IACzD,MAAM,YAAY,GAAG,gBAAgB,EAAE,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACpE,MAAM,OAAO,GAAG,UAAU,IAAI,IAAI,IAAI,UAAU,KAAK,EAAE;QACrD,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,MAAM;QACrC,CAAC,CAAC,YAAY,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,cAAc;IAClD,2EAA2E;IAC3E,8EAA8E;IAC9E,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACrE,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IACnF,MAAM,SAAS,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzE,MAAM,cAAc,GAAG,GAAG,CAAC,gCAAgC,IAAI,IAAI,IAAI,CAAC,CAAC,YAAY,CAAC;IACtF,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,gCAAgC,IAAI,CAAC,YAAY,IAAI,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7G,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,6BAA6B,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACjH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAClC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,+BAA+B;IAC7C,OAAO,6BAA6B,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,oCAAoC;IAClD,OAAO,oCAAoC,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,gCAAgC,GAAG,KAAK,CAAC;AAC/C,MAAM,4BAA4B,GAAG,MAAM,CAAC;AAE5C;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC/E,MAAM,GAAG,GAAG,GAAG,CAAC,+BAA+B,EAAE,IAAI,EAAE,CAAC;IACxD,IAAI,CAAC,GAAG;QAAE,OAAO,gCAAgC,CAAC;IAElD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,gCAAgC,CAAC;IAClF,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE;QACJ,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE;QACpC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE;KAC7C;IACD,OAAO,EAAE;QACP,IAAI,OAAO,KAAK,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,eAAe,CAAC,CAAC,CAAC;QACzE,gEAAgE;QAChE,0EAA0E;QAC1E,qEAAqE;QACrE,IAAI,OAAO,CAAC,KAAa,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,KAAK,CAAC,CAAC,CAAC;KACrE;IACD,IAAI,EAAE;QACJ;;;4CAGoC;QACpC,sBAAsB,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO;KAC1G;IACD,MAAM,EAAE;QACN,KAAK,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,aAAa,CAA4C;QACvF,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;QACrC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,oBAAoB,EAAE,CAAgB;QAChF;;;;;6CAKqC;QACrC,qBAAqB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;QACvF,mBAAmB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,GAAG,CAAC,CAAC;QAC1F,qBAAqB,EAAE,4BAA4B,EAAE;QACrD,UAAU,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG;QACpG,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QAC3F,YAAY,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;KAC9F;IACD,GAAG,EAAE;QACH,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,SAAS;QACvC,UAAU,EAAE,qBAAqB,EAAE;QACnC,IAAI,YAAY,KAAK,OAAO,kBAAkB,EAAE,CAAC,CAAC,CAAC;QACnD,uEAAuE;QACvE,2EAA2E;QAC3E,gFAAgF;QAChF,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,IAAI,IAAI;QACrE,0EAA0E;QAC1E,4EAA4E;QAC5E,6EAA6E;QAC7E,yEAAyE;QACzE,8EAA8E;QAC9E,8EAA8E;QAC9E,kEAAkE;QAClE,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC;KACzD;IACD,SAAS,EAAE;QACT,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,SAAS;QACpD,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,IAAI;QACvD,IAAI,YAAY,KAAK,OAAO,wBAAwB,EAAE,CAAC,CAAC,CAAC;QACzD,8EAA8E;QAC9E,4EAA4E;QAC5E,2EAA2E;QAC3E,yEAAyE;QACzE,uEAAuE;QACvE,+EAA+E;QAC/E,4EAA4E;QAC5E,4EAA4E;QAC5E,2EAA2E;QAC3E,oDAAoD;QACpD,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,IAAI;QACpE;;;;;;;;;;sEAU8D;QAC9D,cAAc,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,gCAAgC,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO;KACnG;IACD,cAAc,EAAE;QACd,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM;QAC7E,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,EAAE;QACnD,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,EAAE;QACjD,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE;QAC9C,sCAAsC;QACtC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,KAAK;QACpE,iEAAiE;QACjE,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,IAAI,CAAC;QAClE,2CAA2C;QAC3C,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,IAAI,KAAK;QACjF,mFAAmF;QACnF,YAAY,EAAE,CAAC,GAAG,EAAE;YAClB,IAAI,CAAC;gBAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,IAAI,CAAC,CAAC;YAAC,CAAC;YAC7E,MAAM,CAAC;gBAAC,OAAO,EAAE,CAAC;YAAC,CAAC;QACtB,CAAC,CAAC,EAA4B;QAC9B,mGAAmG;QACnG,SAAS,EAAE,CAAC,GAAG,EAAE;YACf,IAAI,CAAC;gBAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,IAAI,CAAC,CAAC;YAAC,CAAC;YAC1E,MAAM,CAAC;gBAAC,OAAO,EAAE,CAAC;YAAC,CAAC;QACtB,CAAC,CAAC,EAA6B;KAChC;IACD,cAAc,EAAE;QACd;;;;;WAKG;QACH,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM;QACrF,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,gCAAgC,IAAI,EAAE;QAC3D,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,EAAE;QACzD,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,EAAE;QACtD,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,IAAI,KAAK;QAC1E,uDAAuD;QACvD,YAAY,EAAE,CAAC,GAAG,EAAE;YAClB,IAAI,CAAC;gBAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,qCAAqC,IAAI,IAAI,CAAC,CAAC;YAAC,CAAC;YACrF,MAAM,CAAC;gBAAC,OAAO,EAAE,CAAC;YAAC,CAAC;QACtB,CAAC,CAAC,EAA4B;QAC9B,2DAA2D;QAC3D,SAAS,EAAE,CAAC,GAAG,EAAE;YACf,IAAI,CAAC;gBAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,kCAAkC,IAAI,IAAI,CAAC,CAAC;YAAC,CAAC;YAClF,MAAM,CAAC;gBAAC,OAAO,EAAE,CAAC;YAAC,CAAC;QACtB,CAAC,CAAC,EAA6B;KAChC;IACD,wEAAwE;IACxE,4EAA4E;IAC5E,gEAAgE;IAChE,IAAI,gBAAgB,KAAK,OAAO,6BAA6B,EAAE,CAAC,CAAC,CAAC;IAClE,IAAI,gBAAgB,KAAK,OAAO,6BAA6B,EAAE,CAAC,CAAC,CAAC;IAClE,+EAA+E;IAC/E,4EAA4E;IAC5E,6EAA6E;IAC7E,8DAA8D;IAC9D,yEAAyE;IACzE,6EAA6E;IAC7E,6EAA6E;IAC7E,+BAA+B;IAC/B,IAAI,oBAAoB,KAAc,OAAO,gBAAgB,EAAE,CAAC,SAAS,EAAE,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC;CACrG,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Per-bot attachment bucket shared by Lark downloads and Dashboard uploads. */
2
+ export declare function getAttachmentsDir(larkAppId: string, messageId: string): string;
3
+ //# sourceMappingURL=attachment-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-path.d.ts","sourceRoot":"","sources":["../../src/core/attachment-path.ts"],"names":[],"mappings":"AAIA,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE9E"}
@@ -0,0 +1,8 @@
1
+ import { join, resolve } from 'node:path';
2
+ import { assertSafeAppId } from '../adapters/cli/read-isolation.js';
3
+ import { config } from '../config.js';
4
+ /** Per-bot attachment bucket shared by Lark downloads and Dashboard uploads. */
5
+ export function getAttachmentsDir(larkAppId, messageId) {
6
+ return join(resolve(config.session.dataDir), 'attachments', assertSafeAppId(larkAppId), messageId);
7
+ }
8
+ //# sourceMappingURL=attachment-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-path.js","sourceRoot":"","sources":["../../src/core/attachment-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,gFAAgF;AAChF,MAAM,UAAU,iBAAiB,CAAC,SAAiB,EAAE,SAAiB;IACpE,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,eAAe,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;AACrG,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"command-handler.d.ts","sourceRoot":"","sources":["../../src/core/command-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command-handler.d.ts","sourceRoot":"","sources":["../../src/core/command-handler.ts"],"names":[],"mappings":"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"}
@@ -1565,7 +1565,12 @@ export async function handleCommand(cmd, rootId, message, deps, larkAppId) {
1565
1565
  sessionStore.closeSession(ds.session.sessionId);
1566
1566
  await deliverEphemeralOrReply(ds, message.senderId, closedCard, 'interactive', () => sessionReply(rootId, closedCard, 'interactive'));
1567
1567
  const oldSession = ds.session;
1568
- const session = sessionStore.createSession(ds.chatId, rootId, displayName, ds.chatType);
1568
+ // `rootId` is the routing anchor. For chat-scope sessions it is the
1569
+ // `oc_...` chat id, not the traceable `om_...` message root stored on
1570
+ // Session. Preserve the old identity and explicitly persist scope so
1571
+ // repo switches cannot turn a chat session into a legacy scope-less
1572
+ // record that the CLI later mistakes for a thread.
1573
+ const session = sessionStore.createSession(ds.chatId, ds.scope === 'chat' ? oldSession.rootMessageId : rootId, displayName, ds.chatType, ds.scope);
1569
1574
  ds.session = session;
1570
1575
  ds.lastUserPrompt = undefined;
1571
1576
  ds.lastCliInput = undefined;