botmux 3.11.0 → 3.12.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 (165) hide show
  1. package/dist/.runtime-build-id +1 -1
  2. package/dist/adapters/backend/riff-backend.d.ts.map +1 -1
  3. package/dist/adapters/backend/riff-backend.js +11 -2
  4. package/dist/adapters/backend/riff-backend.js.map +1 -1
  5. package/dist/adapters/cli/coco.js +3 -3
  6. package/dist/adapters/cli/coco.js.map +1 -1
  7. package/dist/adapters/cli/codex.js +2 -2
  8. package/dist/adapters/cli/codex.js.map +1 -1
  9. package/dist/cli/dashboard-command.d.ts +23 -0
  10. package/dist/cli/dashboard-command.d.ts.map +1 -0
  11. package/dist/cli/dashboard-command.js +61 -0
  12. package/dist/cli/dashboard-command.js.map +1 -0
  13. package/dist/cli/dashboard-endpoint.d.ts +3 -3
  14. package/dist/cli/dashboard-endpoint.d.ts.map +1 -1
  15. package/dist/cli/dashboard-endpoint.js +1 -1
  16. package/dist/cli.d.ts.map +1 -1
  17. package/dist/cli.js +36 -22
  18. package/dist/cli.js.map +1 -1
  19. package/dist/codex-rpc-engine.d.ts +33 -3
  20. package/dist/codex-rpc-engine.d.ts.map +1 -1
  21. package/dist/codex-rpc-engine.js +182 -20
  22. package/dist/codex-rpc-engine.js.map +1 -1
  23. package/dist/codex-rpc-lifecycle.d.ts +42 -7
  24. package/dist/codex-rpc-lifecycle.d.ts.map +1 -1
  25. package/dist/codex-rpc-lifecycle.js +73 -7
  26. package/dist/codex-rpc-lifecycle.js.map +1 -1
  27. package/dist/config.d.ts +1 -1
  28. package/dist/config.js +1 -1
  29. package/dist/core/command-handler.d.ts +3 -2
  30. package/dist/core/command-handler.d.ts.map +1 -1
  31. package/dist/core/command-handler.js +3 -2
  32. package/dist/core/command-handler.js.map +1 -1
  33. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  34. package/dist/core/dashboard-ipc-server.js +15 -10
  35. package/dist/core/dashboard-ipc-server.js.map +1 -1
  36. package/dist/core/dispatch.d.ts +9 -10
  37. package/dist/core/dispatch.d.ts.map +1 -1
  38. package/dist/core/dispatch.js +17 -10
  39. package/dist/core/dispatch.js.map +1 -1
  40. package/dist/core/role-resolver.d.ts +5 -2
  41. package/dist/core/role-resolver.d.ts.map +1 -1
  42. package/dist/core/role-resolver.js +55 -23
  43. package/dist/core/role-resolver.js.map +1 -1
  44. package/dist/core/session-manager.d.ts +2 -0
  45. package/dist/core/session-manager.d.ts.map +1 -1
  46. package/dist/core/session-manager.js +20 -18
  47. package/dist/core/session-manager.js.map +1 -1
  48. package/dist/core/terminal-write-auth.d.ts +4 -4
  49. package/dist/core/terminal-write-auth.d.ts.map +1 -1
  50. package/dist/core/terminal-write-auth.js +18 -6
  51. package/dist/core/terminal-write-auth.js.map +1 -1
  52. package/dist/daemon.d.ts +1 -0
  53. package/dist/daemon.d.ts.map +1 -1
  54. package/dist/daemon.js +101 -12
  55. package/dist/daemon.js.map +1 -1
  56. package/dist/dashboard/auth.d.ts +21 -11
  57. package/dist/dashboard/auth.d.ts.map +1 -1
  58. package/dist/dashboard/auth.js +39 -25
  59. package/dist/dashboard/auth.js.map +1 -1
  60. package/dist/dashboard/bot-payload.d.ts +0 -1
  61. package/dist/dashboard/bot-payload.d.ts.map +1 -1
  62. package/dist/dashboard/bot-payload.js +0 -1
  63. package/dist/dashboard/bot-payload.js.map +1 -1
  64. package/dist/dashboard/dashboard-summary-endpoint.d.ts +39 -0
  65. package/dist/dashboard/dashboard-summary-endpoint.d.ts.map +1 -0
  66. package/dist/dashboard/dashboard-summary-endpoint.js +50 -0
  67. package/dist/dashboard/dashboard-summary-endpoint.js.map +1 -0
  68. package/dist/dashboard/dashboard-summary.d.ts +62 -0
  69. package/dist/dashboard/dashboard-summary.d.ts.map +1 -0
  70. package/dist/dashboard/dashboard-summary.js +106 -0
  71. package/dist/dashboard/dashboard-summary.js.map +1 -0
  72. package/dist/dashboard/web/feed-group-picker.d.ts +13 -0
  73. package/dist/dashboard/web/feed-group-picker.d.ts.map +1 -0
  74. package/dist/dashboard/web/feed-group-picker.js +45 -0
  75. package/dist/dashboard/web/feed-group-picker.js.map +1 -0
  76. package/dist/dashboard/web/groups-page.d.ts.map +1 -1
  77. package/dist/dashboard/web/groups-page.js +2 -5
  78. package/dist/dashboard/web/groups-page.js.map +1 -1
  79. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  80. package/dist/dashboard/web/i18n.js +8 -14
  81. package/dist/dashboard/web/i18n.js.map +1 -1
  82. package/dist/dashboard/web/roles-page.d.ts.map +1 -1
  83. package/dist/dashboard/web/roles-page.js +36 -4
  84. package/dist/dashboard/web/roles-page.js.map +1 -1
  85. package/dist/dashboard/web/roles.d.ts +3 -1
  86. package/dist/dashboard/web/roles.d.ts.map +1 -1
  87. package/dist/dashboard/web/roles.js +10 -2
  88. package/dist/dashboard/web/roles.js.map +1 -1
  89. package/dist/dashboard/web/schedules-page.d.ts.map +1 -1
  90. package/dist/dashboard/web/schedules-page.js +8 -2
  91. package/dist/dashboard/web/schedules-page.js.map +1 -1
  92. package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
  93. package/dist/dashboard/web/sessions-page.js +2 -2
  94. package/dist/dashboard/web/sessions-page.js.map +1 -1
  95. package/dist/dashboard-web/app.js +1 -1
  96. package/dist/dashboard-web/chunks/{bot-defaults-page-GED4FEMS.js → bot-defaults-page-USC6EZXP.js} +1 -1
  97. package/dist/dashboard-web/chunks/chunk-6ALR252E.js +1 -0
  98. package/dist/dashboard-web/chunks/{chunk-VBXJOJFH.js → chunk-A7VC4BXR.js} +1 -1
  99. package/dist/dashboard-web/chunks/{chunk-HK7NIBJG.js → chunk-KOPISPHN.js} +1 -1
  100. package/dist/dashboard-web/chunks/{chunk-6J5LS5AU.js → chunk-M6BHWQFO.js} +6 -6
  101. package/dist/dashboard-web/chunks/{chunk-KRHWZEXU.js → chunk-RXRJB5SO.js} +1 -1
  102. package/dist/dashboard-web/chunks/{connectors-page-EELM66G3.js → connectors-page-4Z76HWRH.js} +1 -1
  103. package/dist/dashboard-web/chunks/groups-page-C6NSDTIN.js +8 -0
  104. package/dist/dashboard-web/chunks/{insights-page-54UBPPOC.js → insights-page-UTOVYLLY.js} +1 -1
  105. package/dist/dashboard-web/chunks/{monitor-room-PORHVKRH.js → monitor-room-UKTJYTA2.js} +1 -1
  106. package/dist/dashboard-web/chunks/{monitoring-page-XGA7AXNL.js → monitoring-page-Q3CEZIVX.js} +1 -1
  107. package/dist/dashboard-web/chunks/{office-page-AO3AFG45.js → office-page-GYCZOOVJ.js} +1 -1
  108. package/dist/dashboard-web/chunks/{overview-page-F5BUTYR6.js → overview-page-W2VBJ6OH.js} +1 -1
  109. package/dist/dashboard-web/chunks/roles-page-U4SHER4K.js +1 -0
  110. package/dist/dashboard-web/chunks/schedules-page-TNPW3N3Q.js +1 -0
  111. package/dist/dashboard-web/chunks/{sessions-page-YFRPSTIL.js → sessions-page-YWWDDV57.js} +3 -3
  112. package/dist/dashboard-web/chunks/{settings-page-OJAZLZQT.js → settings-page-VKW5ZK5K.js} +1 -1
  113. package/dist/dashboard-web/chunks/{skills-page-EFZQPWV4.js → skills-page-ZCEDFGZZ.js} +1 -1
  114. package/dist/dashboard-web/chunks/{team-federation-page-ZJVAP7HW.js → team-federation-page-OMFGGBT2.js} +1 -1
  115. package/dist/dashboard-web/chunks/{v3-page-GYWTRGO2.js → v3-page-PLXWK4KO.js} +1 -1
  116. package/dist/dashboard-web/chunks/{whiteboards-page-MSDAG6P7.js → whiteboards-page-NJQOEO2P.js} +1 -1
  117. package/dist/dashboard-web/style.css +112 -0
  118. package/dist/dashboard.js +116 -31
  119. package/dist/dashboard.js.map +1 -1
  120. package/dist/desktop/main/ipc.js +1 -1
  121. package/dist/desktop/main/runtime-service.js +2 -2
  122. package/dist/desktop/main/runtime-service.js.map +1 -1
  123. package/dist/desktop/shared/types.d.ts +1 -1
  124. package/dist/i18n/en.d.ts.map +1 -1
  125. package/dist/i18n/en.js +3 -1
  126. package/dist/i18n/en.js.map +1 -1
  127. package/dist/i18n/zh.d.ts.map +1 -1
  128. package/dist/i18n/zh.js +3 -1
  129. package/dist/i18n/zh.js.map +1 -1
  130. package/dist/services/adopt-input-sequence.d.ts +52 -0
  131. package/dist/services/adopt-input-sequence.d.ts.map +1 -0
  132. package/dist/services/adopt-input-sequence.js +50 -0
  133. package/dist/services/adopt-input-sequence.js.map +1 -0
  134. package/dist/services/bridge-fallback-gate.d.ts.map +1 -1
  135. package/dist/services/bridge-fallback-gate.js +34 -11
  136. package/dist/services/bridge-fallback-gate.js.map +1 -1
  137. package/dist/services/codex-bridge-queue.d.ts +103 -7
  138. package/dist/services/codex-bridge-queue.d.ts.map +1 -1
  139. package/dist/services/codex-bridge-queue.js +291 -17
  140. package/dist/services/codex-bridge-queue.js.map +1 -1
  141. package/dist/services/codex-transcript.d.ts +4 -3
  142. package/dist/services/codex-transcript.d.ts.map +1 -1
  143. package/dist/services/codex-transcript.js.map +1 -1
  144. package/dist/services/structured-bridge-clis.d.ts +8 -1
  145. package/dist/services/structured-bridge-clis.d.ts.map +1 -1
  146. package/dist/services/structured-bridge-clis.js +13 -0
  147. package/dist/services/structured-bridge-clis.js.map +1 -1
  148. package/dist/services/submit-confirmation.d.ts +50 -0
  149. package/dist/services/submit-confirmation.d.ts.map +1 -1
  150. package/dist/services/submit-confirmation.js +82 -0
  151. package/dist/services/submit-confirmation.js.map +1 -1
  152. package/dist/utils/async-serial-queue.d.ts +9 -0
  153. package/dist/utils/async-serial-queue.d.ts.map +1 -0
  154. package/dist/utils/async-serial-queue.js +13 -0
  155. package/dist/utils/async-serial-queue.js.map +1 -0
  156. package/dist/utils/runtime-screen-status.d.ts +52 -0
  157. package/dist/utils/runtime-screen-status.d.ts.map +1 -0
  158. package/dist/utils/runtime-screen-status.js +60 -0
  159. package/dist/utils/runtime-screen-status.js.map +1 -0
  160. package/dist/worker.js +1642 -452
  161. package/dist/worker.js.map +1 -1
  162. package/package.json +1 -1
  163. package/dist/dashboard-web/chunks/groups-page-WKUV6E42.js +0 -8
  164. package/dist/dashboard-web/chunks/roles-page-M5GIASJU.js +0 -1
  165. package/dist/dashboard-web/chunks/schedules-page-O232WQRR.js +0 -1
@@ -10,17 +10,21 @@
10
10
  * Rules:
11
11
  * - Non-adopt + sentinel terminator: the model ended its final with a
12
12
  * standalone `BOTMUX_NOTHING_TO_SEND` (or the legacy `BOTMUX_NO_REPLY`)
13
- * line. Two sub-cases, split by what remains after the sentinel line is
14
- * stripped (stripTrailingBridgeSentinelLine):
15
- * · NOTHING remains genuine silence (#554): the model was triggered but
16
- * deliberately produced no answer (ambient group chatter, or a message
17
- * addressed to another bot). Suppress the whole turn. isBridgeNothingToSendFinal.
18
- * · PROSE remains the model DID produce an answer and merely appended
19
- * the sentinel. This is the "did work, forgot to `botmux send`, ended
20
- * with the sentinel" ghosting shape. Do NOT drop it: callers strip the
21
- * sentinel line and forward the prose through the normal send-marker
22
- * gate (so a turn that already sent is still suppressed, but an un-sent
23
- * answer is delivered instead of lost).
13
+ * line. Sub-cases:
14
+ * · NOTHING remains after stripping the sentinel → genuine silence (#554):
15
+ * the model was triggered but deliberately produced no answer (ambient
16
+ * group chatter, or a message addressed to another bot). Suppress the
17
+ * whole turn. isBridgeNothingToSendFinal.
18
+ * · PROSE remains AND the model ALREADY sent ≥1 message in-window the
19
+ * trailing prose is narration / thinking the model kept out of chat and
20
+ * then ended with the sentinel. SUPPRESS (do not re-post it as a new
21
+ * answer the length heuristic would otherwise mistake longer narration
22
+ * for a substantive final). This is the "already sent, then narrated,
23
+ * ended with sentinel" leak the send-marker branch guards.
24
+ * · PROSE remains AND the model sent NOTHING in-window → the prose is a
25
+ * real answer produced but never sent (ghosting). Do NOT drop it: callers
26
+ * strip the sentinel line and forward the prose (empty marker set → not
27
+ * suppressed).
24
28
  * A token that only appears inline (mid-sentence, or with prose after it) is
25
29
  * a normal answer and is left untouched.
26
30
  * - Adopt mode never suppresses: in /adopt the model in the adopted
@@ -228,6 +232,25 @@ export function shouldSuppressBridgeEmit(turn, nextBoundaryMs, markers, adoptMod
228
232
  const lower = turn.markTimeMs;
229
233
  const upper = nextBoundaryMs ?? Number.POSITIVE_INFINITY;
230
234
  const markersInWindow = markers.filter(m => m.sentAtMs >= lower && m.sentAtMs < upper);
235
+ // A trailing sentinel line is the model's explicit "I have nothing more to
236
+ // send" signal. Split the two prose+sentinel cases by whether the model
237
+ // ALREADY sent this turn:
238
+ // · sent ≥1 in-window + trailing sentinel → the trailing prose is narration
239
+ // / thinking the model deliberately kept out of chat (it explicitly ended
240
+ // with the sentinel after sending). SUPPRESS — do NOT let the length
241
+ // heuristic below mistake longer narration for a new substantive answer
242
+ // and re-post it. This is the "already sent, then narrated, ended with
243
+ // sentinel" leak.
244
+ // · zero sends in-window + trailing sentinel → the prose is a real answer
245
+ // the model produced but never sent (ghosting). Fall through: the
246
+ // stripped prose is forwarded by the length check below (markers empty →
247
+ // markerSetCoversFinal=false → not suppressed → caller posts it).
248
+ // A final WITHOUT a trailing sentinel keeps the pure length-based behavior.
249
+ if (turn.finalText !== undefined
250
+ && hasTrailingBridgeSentinelLine(turn.finalText)
251
+ && markersInWindow.length > 0) {
252
+ return true;
253
+ }
231
254
  // Compare the SENTINEL-STRIPPED final against send markers: a prose+sentinel
232
255
  // final is delivered as the stripped prose (callers strip before send), so the
233
256
  // length used for the material-longer check must match what actually posts —
@@ -1 +1 @@
1
- {"version":3,"file":"bridge-fallback-gate.js","sourceRoot":"","sources":["../../src/services/bridge-fallback-gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bridge-fallback-gate.js","sourceRoot":"","sources":["../../src/services/bridge-fallback-gate.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,19 @@
1
1
  import type { CodexBridgeEvent } from './codex-transcript.js';
2
+ /** A verified submit may be parked in a type-ahead queue before its transcript
3
+ * user event is written. Keep that hand-off busy for a bounded interval: long
4
+ * enough for the active turn to finish and dequeue it, but never forever if
5
+ * the CLI accepted the keypress without producing a structured event. */
6
+ export declare const STRUCTURED_SUBMIT_START_GRACE_MS = 20000;
7
+ /** Maximum time an unconfirmed worker mark may remain at the attribution
8
+ * head after the adapter write/verification path stops. This lease never
9
+ * contributes to lifecycle busy: it exists only so a late transcript user
10
+ * event can still claim the mark without allowing a silent write to wedge
11
+ * every later turn forever. */
12
+ export declare const STRUCTURED_UNCONFIRMED_ATTRIBUTION_GRACE_MS = 20000;
13
+ /** Maximum time a worker may wait for an adapter/history verification call.
14
+ * This covers Codex/CoCo's in-band polling plus the 20s deferred recheck,
15
+ * while remaining bounded if an adapter promise or recheck is stranded. */
16
+ export declare const STRUCTURED_SUBMIT_VERIFICATION_GRACE_MS = 30000;
2
17
  export interface CodexPendingTurn {
3
18
  turnId: string;
4
19
  dispatchAttempt?: number;
@@ -8,6 +23,17 @@ export interface CodexPendingTurn {
8
23
  * the lower bound of the "did `botmux send` happen for this turn?"
9
24
  * window. Optional only for legacy / test-injected turns. */
10
25
  markTimeMs?: number;
26
+ /** Wall-clock millis when an authoritative adapter/history check confirmed
27
+ * the submit. Unverified writes deliberately leave this unset. */
28
+ submitConfirmedAtMs?: number;
29
+ /** Wall-clock millis anchoring the bounded attribution-only lease for an
30
+ * unconfirmed mark. Unlike verification/confirmation leases, this never
31
+ * gates screen-ready or reports the CLI busy. */
32
+ unconfirmedAttributionStartedAtMs?: number;
33
+ /** Wall-clock millis when worker-side authoritative submit verification
34
+ * began. This closes the race where screen-ready arrives while writeInput
35
+ * is still polling history, before it can return `submitted: true`. */
36
+ submitVerificationStartedAtMs?: number;
11
37
  /** Set once an assistant_final event closes this turn. */
12
38
  finalText?: string;
13
39
  /** Explicit transcript terminal semantics. Undefined keeps the historical
@@ -24,8 +50,17 @@ export interface CodexPendingTurn {
24
50
  * assistant reply so the Lark thread sees both sides of the exchange. */
25
51
  userText?: string;
26
52
  sourceSessionId?: string;
53
+ /** True when the turn was delivered via Codex RPC (turn/start) and the
54
+ * app-server has acknowledged it. RPC turns have no local transcript to
55
+ * ingest, so they can never reach the started state; this flag keeps the
56
+ * lifecycle gate asserted for the full server-side execution instead of
57
+ * letting the bounded 20s confirmation lease expire mid-turn (which would
58
+ * falsely release idle and prune a still-running turn). Cleared by the
59
+ * terminal edge or an explicit stop. */
60
+ rpcActive?: boolean;
27
61
  }
28
62
  export declare class CodexBridgeQueue {
63
+ private readonly now;
29
64
  private seen;
30
65
  private queue;
31
66
  private collecting;
@@ -36,6 +71,7 @@ export declare class CodexBridgeQueue {
36
71
  * fresh-empty attach replaying historical iTerm conversation as
37
72
  * "live" local input. Typically set to the moment adopt was wired up. */
38
73
  private localLowerBoundMs;
74
+ constructor(now?: () => number);
39
75
  /** Register events as historical without producing pending-turn side
40
76
  * effects. Used at attach time when resume mode wants to swallow prior
41
77
  * conversation as already-processed. */
@@ -53,22 +89,82 @@ export declare class CodexBridgeQueue {
53
89
  /** Drop all pending turns. Used when the worker decides it can't reliably
54
90
  * attribute future events (e.g. a teardown). */
55
91
  clearPending(): CodexPendingTurn[];
56
- /** Remove one exact worker delivery attempt after a failed/ambiguous
57
- * terminal. A replay may reuse turnId with a higher dispatchAttempt; if
58
- * the retired mark stayed queued, its fingerprint would claim the replay's
59
- * transcript events and permanently head-of-line block the live attempt. */
60
- dropPendingTurn(turnId: string, dispatchAttempt?: number): CodexPendingTurn | null;
92
+ /** Remove one exact worker delivery attempt. Submit-confirmation cleanup is
93
+ * pre-start-only by default: once the transcript has started a turn, only a
94
+ * structured terminal may retire it. An authoritative failed/ambiguous
95
+ * terminal may opt into removing a started attempt via `allowStarted`.
96
+ * Matching dispatchAttempt keeps a replay of the same turnId isolated from
97
+ * the retired delivery attempt. */
98
+ dropPendingTurn(turnId: string, dispatchAttempt?: number, allowStarted?: boolean): CodexPendingTurn | null;
99
+ /** Remove expired pre-start queue heads that never reached transcript
100
+ * start, whether positively confirmed or only retained for attribution.
101
+ * Only the first unresolved fingerprint(s) are eligible, and never
102
+ * while an earlier started turn is still running: that predecessor's final
103
+ * is the dequeue boundary that refreshes the next legitimate type-ahead
104
+ * lease. Dropping a stale head replays buffered events immediately, so a
105
+ * later real turn can become started instead of remaining hidden behind a
106
+ * dead fingerprint. */
107
+ pruneExpiredPreStartHeads(nowMs?: number): CodexPendingTurn[];
108
+ /** Record positive submit evidence from an adapter/history check. The turn
109
+ * can still be waiting in the CLI's type-ahead queue, so this starts a
110
+ * bounded hand-off lease until its transcript user event appears. */
111
+ confirmPendingTurn(turnId: string, confirmedAtMs?: number, dispatchAttempt?: number): boolean;
112
+ /** Mark a turn as actively running server-side via Codex RPC. The app-server
113
+ * ack for turn/start is authoritative confirmation that execution has begun,
114
+ * but no local transcript event will follow to flip started. This flag keeps
115
+ * the lifecycle gate asserted and protects the turn from lease expiry pruning
116
+ * until the terminal edge (or an explicit stop) clears it. */
117
+ markRpcActive(turnId: string, dispatchAttempt?: number): boolean;
118
+ /** Clear the server-side active flag when an RPC turn reaches a terminal edge
119
+ * or is otherwise retired. Without this, a completed RPC turn would keep the
120
+ * lifecycle gate asserted forever (permanent false-busy). */
121
+ stopRpcActive(turnId: string, dispatchAttempt?: number): boolean;
122
+ /** Start bounded adapter/history verification before awaiting writeInput. */
123
+ beginSubmitVerification(turnId: string, startedAtMs?: number, dispatchAttempt?: number): boolean;
124
+ /** Finish verification without positive submit evidence. A bare mark remains
125
+ * available for transcript attribution but no longer gates screen-ready. */
126
+ finishSubmitVerification(turnId: string, finishedAtMs?: number, dispatchAttempt?: number): boolean;
127
+ /** Exact-attempt existence check for deferred callbacks. A replay reuses
128
+ * turnId with a higher dispatchAttempt, so an old timer must treat that as
129
+ * a missing target rather than mutating the new delivery generation. */
130
+ hasPendingTurn(turnId: string, dispatchAttempt?: number): boolean;
131
+ /** True when buffered transcript replay has already closed this exact turn
132
+ * before its RPC turn/start continuation installs rpcActive. */
133
+ hasTerminalTurn(turnId: string, dispatchAttempt?: number): boolean;
134
+ /** True while the transcript proves a turn is running, or while a verified
135
+ * submit is in the bounded pre-start hand-off window. A bare worker mark is
136
+ * never authoritative, preventing a dropped Enter from causing permanent
137
+ * false-busy. */
138
+ hasBlockingTurn(nowMs?: number): boolean;
139
+ /** Remaining bounded pre-start verification/confirmation lease. The worker
140
+ * uses this to re-drive a previously rejected ready signal once every active
141
+ * lease expires. Started turns return undefined because their eventual
142
+ * assistant_final is the authoritative re-drive. */
143
+ preStartLeaseRemainingMs(nowMs?: number): number | undefined;
61
144
  /** Process newly-appended events. Idempotent on uuid: events with seen
62
145
  * uuids are skipped, so callers can replay safely. */
63
146
  ingest(events: CodexBridgeEvent[]): void;
64
147
  private replayBufferedUnmatched;
65
148
  private rememberUnmatched;
149
+ /** Refresh the next queued submit from the locally-observed terminal edge.
150
+ * External transcript clocks may be skewed, so lease boundedness must use
151
+ * this process's clock for both successful and aborted predecessors. */
152
+ private refreshNextPreStartLease;
66
153
  private ingestOne;
67
- /** Pop FIFO any leading turn that is started AND observed assistant_final.
68
- * Empty final text still closes a durable turn. */
154
+ /** Pop FIFO any leading turn that is started AND observed a terminal edge.
155
+ * Empty final text closes a durable turn without producing final_output. */
69
156
  drainEmittable(): CodexPendingTurn[];
70
157
  size(): number;
71
158
  /** Test helper — peek the queue without mutating. */
72
159
  peek(): readonly CodexPendingTurn[];
73
160
  }
161
+ /** Explicit mutation boundary for lease expiry. Pruning can replay a buffered
162
+ * successor user+final pair, so callers must drain/emit in the same call
163
+ * stack; keeping that invariant here prevents a status/query path from
164
+ * silently creating an unconsumed completion. */
165
+ export declare function pruneExpiredPreStartHeadsAndEmit(queue: CodexBridgeQueue, emitReady: () => void, nowMs?: number,
166
+ /** Settle exact durable attempts before a replayed successor is emitted.
167
+ * The queue removal can expose buffered successor user/final events, so
168
+ * running this after emitReady would publish N+1 ahead of N's terminal. */
169
+ onDropped?: (dropped: readonly CodexPendingTurn[]) => void): CodexPendingTurn[];
74
170
  //# sourceMappingURL=codex-bridge-queue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex-bridge-queue.d.ts","sourceRoot":"","sources":["../../src/services/codex-bridge-queue.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAK9D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;kEAE8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;kDAC8C;IAC9C,cAAc,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IACtD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;2EAGuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;8EAC0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,iBAAiB,CAA0B;IACnD,OAAO,CAAC,8BAA8B,CAAqB;IAC3D;;8EAE0E;IAC1E,OAAO,CAAC,iBAAiB,CAAK;IAE9B;;6CAEyC;IACzC,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAIxC;;uEAEmE;IACnE,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,GAAE,MAAmB,GAAG,IAAI;IAMxE;;;;+DAI2D;IAC3D,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,GAAE,MAAmB,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI;IAWtG;qDACiD;IACjD,YAAY,IAAI,gBAAgB,EAAE;IAQlC;;;iFAG6E;IAC7E,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAUlF;2DACuD;IACvD,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAQxC,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,SAAS;IA+GjB;wDACoD;IACpD,cAAc,IAAI,gBAAgB,EAAE;IAYpC,IAAI,IAAI,MAAM;IAId,qDAAqD;IACrD,IAAI,IAAI,SAAS,gBAAgB,EAAE;CAGpC"}
1
+ {"version":3,"file":"codex-bridge-queue.d.ts","sourceRoot":"","sources":["../../src/services/codex-bridge-queue.ts"],"names":[],"mappings":"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"}