botmux 3.4.0 → 3.4.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.
@@ -22,6 +22,12 @@ export interface CreateGroupOpts {
22
22
  * local entry directly; peer bots are prompted by a multi-mention
23
23
  * `/role profile apply` command in the newly created chat. */
24
24
  roleProfileId?: string;
25
+ /** Optional kickoff: after the chat is created, the creator @-mentions this
26
+ * bot and posts `kickoffPrompt` as a top-level message. Used to
27
+ * auto-trigger a bot (e.g. a reviewer) in the new group without a human
28
+ * having to @ it. The kickoff bot must be present in `larkAppIds`. */
29
+ kickoffBotLarkAppId?: string;
30
+ kickoffPrompt?: string;
25
31
  }
26
32
  export interface CreateGroupResult {
27
33
  ok: true;
@@ -47,6 +53,8 @@ export interface CreateGroupResult {
47
53
  }[];
48
54
  roleProfileBootstrapMessageId: string | null;
49
55
  roleProfileBootstrapError: string | null;
56
+ kickoffMessageId: string | null;
57
+ kickoffError: string | null;
50
58
  }
51
59
  export interface TransferGroupOwnerOpts {
52
60
  creatorLarkAppId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"group-creator.d.ts","sourceRoot":"","sources":["../../src/services/group-creator.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB;wEACoE;IACpE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;yEAEqE;IACrE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB;yEACqE;IACrE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;2DAEuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;mEAE+D;IAC/D,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,IAAI,CAAC;IACT,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,oEAAoE;IACpE,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;8EAC0E;IAC1E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACxF,6BAA6B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,sBAAsB;IACrC,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;CACtC;AAED,MAAM,WAAW,wBAAwB;IACvC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAgBxG;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA0L3F"}
1
+ {"version":3,"file":"group-creator.d.ts","sourceRoot":"","sources":["../../src/services/group-creator.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB;wEACoE;IACpE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;yEAEqE;IACrE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB;yEACqE;IACrE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;2DAEuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;mEAE+D;IAC/D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;2EAGuE;IACvE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,IAAI,CAAC;IACT,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,oEAAoE;IACpE,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;8EAC0E;IAC1E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACxF,6BAA6B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACrC,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;CACtC;AAED,MAAM,WAAW,wBAAwB;IACvC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAgBxG;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAqO3F"}
@@ -216,6 +216,46 @@ export async function createGroupWithBots(opts) {
216
216
  }
217
217
  }
218
218
  }
219
+ // Kickoff: creator @-mentions a target bot with a prompt so it auto-starts
220
+ // working (e.g. a PR review). Resolve the @ handle from the creator's view of
221
+ // the new chat: Lark open_id values are app-scoped, so the target bot's
222
+ // self-reported open_id cannot be used directly by the creator app.
223
+ let kickoffMessageId = null;
224
+ let kickoffError = null;
225
+ const kickoffBot = opts.kickoffBotLarkAppId?.trim();
226
+ const kickoffPrompt = opts.kickoffPrompt?.trim();
227
+ if (!!kickoffBot !== !!kickoffPrompt) {
228
+ kickoffError = 'kickoff_args_must_be_paired';
229
+ }
230
+ else if (kickoffBot && kickoffPrompt) {
231
+ if (kickoffBot === opts.creatorLarkAppId) {
232
+ kickoffError = 'creator_cannot_kickoff_self';
233
+ }
234
+ else if (!opts.larkAppIds.includes(kickoffBot)) {
235
+ kickoffError = 'kickoff_bot_not_selected';
236
+ }
237
+ else if (r.invalidBotIds.includes(kickoffBot)) {
238
+ kickoffError = 'invitee_rejected';
239
+ }
240
+ try {
241
+ if (!kickoffError) {
242
+ const members = await listChatBotMembers(opts.creatorLarkAppId, r.chatId);
243
+ const target = members.find(member => member.larkAppId === kickoffBot);
244
+ if (!target) {
245
+ kickoffError = 'kickoff_bot_not_found_in_chat';
246
+ }
247
+ else if (!target.mentionable) {
248
+ kickoffError = 'kickoff_bot_not_mentionable';
249
+ }
250
+ else {
251
+ kickoffMessageId = await sendMessage(opts.creatorLarkAppId, r.chatId, `<at user_id="${target.openId}"></at> ${kickoffPrompt}`, 'text');
252
+ }
253
+ }
254
+ }
255
+ catch (e) {
256
+ kickoffError = e?.message ?? String(e);
257
+ }
258
+ }
219
259
  return {
220
260
  ok: true,
221
261
  chatId: r.chatId,
@@ -232,6 +272,8 @@ export async function createGroupWithBots(opts) {
232
272
  oncallBindings,
233
273
  roleProfileBootstrapMessageId,
234
274
  roleProfileBootstrapError,
275
+ kickoffMessageId,
276
+ kickoffError,
235
277
  };
236
278
  }
237
279
  //# sourceMappingURL=group-creator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"group-creator.js","sourceRoot":"","sources":["../../src/services/group-creator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"group-creator.js","sourceRoot":"","sources":["../../src/services/group-creator.ts"],"names":[],"mappings":"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"}
@@ -38,4 +38,45 @@ export declare function shouldReleaseFirstPromptTimeout(state: {
38
38
  /** Absolute hard cap for keeping the first prompt queued. */
39
39
  hardTimeoutMs: number;
40
40
  }): boolean;
41
+ /**
42
+ * After the ready-gate releases (real SessionStart signal OR the timeout
43
+ * fallback), the worker settles for PTY quiescence and then decides whether to
44
+ * mark the prompt ready (which flushes for ALL adapters) vs. just calling
45
+ * flushPending() (which only flushes for type-ahead adapters). Marking ready is
46
+ * correct when ANY of these hold:
47
+ * - promptReadyAfterSettle — the real SessionStart/BOTMUX_READY_COMMAND
48
+ * signal fired (authoritative: input box exists).
49
+ * - promptReadyDetectedDuringSettle — the idle detector fired during the
50
+ * settle (a readyPattern/idle proved readiness).
51
+ * - readyPatternSeenDuringHold — a readyPattern fired WHILE the gate was
52
+ * holding (markPromptReady was blocked by
53
+ * readyGate.shouldHold()). The input box
54
+ * exists; the gate only deferred delivery.
55
+ *
56
+ * Pins the Hermes regression: a non-type-ahead adapter that renders its prompt
57
+ * (❯) during the hold but never fires the SessionStart signal must be marked
58
+ * ready at settle — otherwise settle calls flushPending(), which bails on
59
+ * !isPromptReady && !typeAheadAllowed and leaves the first message queued until
60
+ * the hard timeout (and, before the hard-timeout fix, forever).
61
+ */
62
+ export declare function decideSettleMarkReady(state: {
63
+ promptReadyAfterSettle: boolean;
64
+ promptReadyDetectedDuringSettle: boolean;
65
+ readyPatternSeenDuringHold: boolean;
66
+ }): boolean;
67
+ /**
68
+ * At the first-prompt hard timeout the worker has waited the full cap. For
69
+ * type-ahead adapters flushPending() drains the queue even while !isPromptReady
70
+ * (the TUI parks input in its own queue). For non-type-ahead adapters
71
+ * flushPending() bails on !isPromptReady && !typeAheadAllowed, so the worker
72
+ * must mark the prompt ready first (markPromptReady() then flushes).
73
+ * Returns the action the worker must take:
74
+ * - 'flush' — call flushPending() (type-ahead adapters).
75
+ * - 'mark-ready' — call markPromptReady() (non-type-ahead adapters).
76
+ *
77
+ * Pins the regression where non-type-ahead adapters only logged "forcing
78
+ * queued message flush" at the hard timeout without actually delivering the
79
+ * held first message.
80
+ */
81
+ export declare function decideHardTimeoutAction(supportsTypeAhead: boolean): 'flush' | 'mark-ready';
41
82
  //# sourceMappingURL=input-gate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"input-gate.d.ts","sourceRoot":"","sources":["../../src/utils/input-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE;IACpC,sCAAsC;IACtC,aAAa,EAAE,OAAO,CAAC;IACvB,0DAA0D;IAC1D,UAAU,EAAE,OAAO,CAAC;IACpB,oEAAoE;IACpE,iBAAiB,EAAE,OAAO,CAAC;IAC3B,sFAAsF;IACtF,mBAAmB,EAAE,OAAO,CAAC;CAC9B,GAAG,OAAO,CAIV;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE;IACrD,sEAAsE;IACtE,iCAAiC,EAAE,OAAO,CAAC;IAC3C,8EAA8E;IAC9E,eAAe,EAAE,OAAO,CAAC;IACzB,8EAA8E;IAC9E,SAAS,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAIV"}
1
+ {"version":3,"file":"input-gate.d.ts","sourceRoot":"","sources":["../../src/utils/input-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE;IACpC,sCAAsC;IACtC,aAAa,EAAE,OAAO,CAAC;IACvB,0DAA0D;IAC1D,UAAU,EAAE,OAAO,CAAC;IACpB,oEAAoE;IACpE,iBAAiB,EAAE,OAAO,CAAC;IAC3B,sFAAsF;IACtF,mBAAmB,EAAE,OAAO,CAAC;CAC9B,GAAG,OAAO,CAIV;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE;IACrD,sEAAsE;IACtE,iCAAiC,EAAE,OAAO,CAAC;IAC3C,8EAA8E;IAC9E,eAAe,EAAE,OAAO,CAAC;IACzB,8EAA8E;IAC9E,SAAS,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAIV;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,sBAAsB,EAAE,OAAO,CAAC;IAChC,+BAA+B,EAAE,OAAO,CAAC;IACzC,0BAA0B,EAAE,OAAO,CAAC;CACrC,GAAG,OAAO,CAEV;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,iBAAiB,EAAE,OAAO,GAAG,OAAO,GAAG,YAAY,CAE1F"}
@@ -31,4 +31,45 @@ export function shouldReleaseFirstPromptTimeout(state) {
31
31
  return true;
32
32
  return state.elapsedMs >= state.hardTimeoutMs;
33
33
  }
34
+ /**
35
+ * After the ready-gate releases (real SessionStart signal OR the timeout
36
+ * fallback), the worker settles for PTY quiescence and then decides whether to
37
+ * mark the prompt ready (which flushes for ALL adapters) vs. just calling
38
+ * flushPending() (which only flushes for type-ahead adapters). Marking ready is
39
+ * correct when ANY of these hold:
40
+ * - promptReadyAfterSettle — the real SessionStart/BOTMUX_READY_COMMAND
41
+ * signal fired (authoritative: input box exists).
42
+ * - promptReadyDetectedDuringSettle — the idle detector fired during the
43
+ * settle (a readyPattern/idle proved readiness).
44
+ * - readyPatternSeenDuringHold — a readyPattern fired WHILE the gate was
45
+ * holding (markPromptReady was blocked by
46
+ * readyGate.shouldHold()). The input box
47
+ * exists; the gate only deferred delivery.
48
+ *
49
+ * Pins the Hermes regression: a non-type-ahead adapter that renders its prompt
50
+ * (❯) during the hold but never fires the SessionStart signal must be marked
51
+ * ready at settle — otherwise settle calls flushPending(), which bails on
52
+ * !isPromptReady && !typeAheadAllowed and leaves the first message queued until
53
+ * the hard timeout (and, before the hard-timeout fix, forever).
54
+ */
55
+ export function decideSettleMarkReady(state) {
56
+ return state.promptReadyAfterSettle || state.promptReadyDetectedDuringSettle || state.readyPatternSeenDuringHold;
57
+ }
58
+ /**
59
+ * At the first-prompt hard timeout the worker has waited the full cap. For
60
+ * type-ahead adapters flushPending() drains the queue even while !isPromptReady
61
+ * (the TUI parks input in its own queue). For non-type-ahead adapters
62
+ * flushPending() bails on !isPromptReady && !typeAheadAllowed, so the worker
63
+ * must mark the prompt ready first (markPromptReady() then flushes).
64
+ * Returns the action the worker must take:
65
+ * - 'flush' — call flushPending() (type-ahead adapters).
66
+ * - 'mark-ready' — call markPromptReady() (non-type-ahead adapters).
67
+ *
68
+ * Pins the regression where non-type-ahead adapters only logged "forcing
69
+ * queued message flush" at the hard timeout without actually delivering the
70
+ * held first message.
71
+ */
72
+ export function decideHardTimeoutAction(supportsTypeAhead) {
73
+ return supportsTypeAhead ? 'flush' : 'mark-ready';
74
+ }
34
75
  //# sourceMappingURL=input-gate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"input-gate.js","sourceRoot":"","sources":["../../src/utils/input-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,cAAc,CAAC,KAS9B;IACC,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IACzD,kEAAkE;IAClE,OAAO,KAAK,CAAC,iBAAiB,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,KAS/C;IACC,IAAI,CAAC,KAAK,CAAC,iCAAiC;QAAE,OAAO,IAAI,CAAC;IAC1D,IAAI,CAAC,KAAK,CAAC,eAAe;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,aAAa,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"input-gate.js","sourceRoot":"","sources":["../../src/utils/input-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,cAAc,CAAC,KAS9B;IACC,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IACzD,kEAAkE;IAClE,OAAO,KAAK,CAAC,iBAAiB,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,KAS/C;IACC,IAAI,CAAC,KAAK,CAAC,iCAAiC;QAAE,OAAO,IAAI,CAAC;IAC1D,IAAI,CAAC,KAAK,CAAC,eAAe;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,aAAa,CAAC;AAChD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAIrC;IACC,OAAO,KAAK,CAAC,sBAAsB,IAAI,KAAK,CAAC,+BAA+B,IAAI,KAAK,CAAC,0BAA0B,CAAC;AACnH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,uBAAuB,CAAC,iBAA0B;IAChE,OAAO,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;AACpD,CAAC"}
package/dist/worker.js CHANGED
@@ -24,7 +24,7 @@ import { readProcessStartIdentity } from './core/session-marker.js';
24
24
  import { drainTranscript, joinAssistantText, trailingAssistantText, findJsonlContainingFingerprint, findJsonlsContainingExactContent, findLatestJsonl, extractLastAssistantTurn, extractTurnStartText, splitTranscriptEventsByCutoff } from './services/claude-transcript.js';
25
25
  import { BridgeTurnQueue, makeFingerprint, normaliseForFingerprint } from './services/bridge-turn-queue.js';
26
26
  import { shouldSuppressBridgeEmit } from './services/bridge-fallback-gate.js';
27
- import { shouldReleaseFirstPromptTimeout, shouldWriteNow } from './utils/input-gate.js';
27
+ import { decideHardTimeoutAction, decideSettleMarkReady, shouldReleaseFirstPromptTimeout, shouldWriteNow } from './utils/input-gate.js';
28
28
  import { canStartInjectionFlush, shouldDeferUserFlush, shouldFlushInjectionsFirst } from './core/inject-queue-policy.js';
29
29
  import { stripAnsiForLog, tailChars } from './utils/crash-log.js';
30
30
  import { CodexUpdateDialogGuard } from './utils/codex-update-dialog.js';
@@ -837,6 +837,15 @@ let isSettlingFirstFlush = false;
837
837
  * ready yet, or flushPending will be blocked by isSettlingFirstFlush and a
838
838
  * later markPromptReady call would return early with the first prompt stranded. */
839
839
  let promptReadyDetectedDuringSettle = false;
840
+ /** While the ready-gate is holding, the IdleDetector may still fire on a real
841
+ * readyPattern (e.g. Hermes's ❯) — proving the input box exists — but
842
+ * markPromptReady() returns early because the gate is armed. Record that the
843
+ * pattern was seen so the gate's timeout-fallback settle can mark the prompt
844
+ * ready immediately instead of delivering into a !isPromptReady state that
845
+ * flushPending() rejects for non-type-ahead adapters. Without this, a Hermes
846
+ * spawn that renders ❯ but never fires BOTMUX_READY_COMMAND waits the full
847
+ * hard timeout (and previously never delivered at all). */
848
+ let readyPatternSeenDuringHold = false;
840
849
  /** Wait until the PTY has been quiet for READY_FLUSH_SETTLE_MS (Ink render
841
850
  * drained), capped at READY_FLUSH_SETTLE_CAP_MS, then flush the held prompt.
842
851
  * A real SessionStart/BOTMUX_READY_COMMAND signal is itself authoritative
@@ -848,8 +857,13 @@ function settleThenFlush(startedAtMs, promptReadyAfterSettle) {
848
857
  const quietForMs = now - lastPtyOutputAtMs;
849
858
  if (quietForMs >= READY_FLUSH_SETTLE_MS || now - startedAtMs >= READY_FLUSH_SETTLE_CAP_MS) {
850
859
  isSettlingFirstFlush = false;
851
- const shouldMarkPromptReady = promptReadyAfterSettle || promptReadyDetectedDuringSettle;
860
+ const shouldMarkPromptReady = decideSettleMarkReady({
861
+ promptReadyAfterSettle,
862
+ promptReadyDetectedDuringSettle,
863
+ readyPatternSeenDuringHold,
864
+ });
852
865
  promptReadyDetectedDuringSettle = false;
866
+ readyPatternSeenDuringHold = false;
853
867
  log(`Ready-gate settle done (quiet ${quietForMs}ms); ${shouldMarkPromptReady ? 'marking prompt ready' : 'delivering held first prompt'}`);
854
868
  if (shouldMarkPromptReady) {
855
869
  markPromptReady();
@@ -4524,6 +4538,11 @@ function markPromptReady() {
4524
4538
  // releaseReadyGate() drives flushPending() once the real signal lands, and a
4525
4539
  // later genuine idle then runs this fully. No-op for non-armed gates.
4526
4540
  if (readyGate.shouldHold()) {
4541
+ // A real readyPattern fired while the gate was holding — the input box
4542
+ // exists. Remember it so the gate's timeout-fallback settle can mark the
4543
+ // prompt ready (see settleThenFlush) instead of letting flushPending()
4544
+ // reject the held message for non-type-ahead adapters.
4545
+ readyPatternSeenDuringHold = true;
4527
4546
  log('Idle detected but holding for SessionStart ready signal (startup selector guard)');
4528
4547
  return;
4529
4548
  }
@@ -7349,6 +7368,7 @@ async function spawnCli(cfg, opts = {}) {
7349
7368
  }
7350
7369
  isSettlingFirstFlush = false;
7351
7370
  promptReadyDetectedDuringSettle = false;
7371
+ readyPatternSeenDuringHold = false;
7352
7372
  // Reset quiescence baseline so the settle measures silence from THIS spawn.
7353
7373
  lastPtyOutputAtMs = Date.now();
7354
7374
  const readyHookAvailable = effectiveReadyHookInstall
@@ -7574,8 +7594,23 @@ async function spawnCli(cfg, opts = {}) {
7574
7594
  // invoking markPromptReady() would claim the CLI is idle while it's still
7575
7595
  // mid-boot, so flushPending() alone is safer — it respects typeAheadAllowed
7576
7596
  // and drains pendingMessages now.
7577
- if (cliAdapter?.supportsTypeAhead)
7597
+ //
7598
+ // Non-type-ahead adapters (Hermes etc.) flushPending() rejects the held
7599
+ // message while isPromptReady is false — it bails on
7600
+ // `!isPromptReady && !typeAheadAllowed`. The hard cap means we've waited
7601
+ // long enough. By now the ready gate's 45s fallback has already released
7602
+ // the gate (READY_SIGNAL_TIMEOUT_MS < this 90s hard cap) and the post-
7603
+ // release settle has drained, so markPromptReady() proceeds: it sets
7604
+ // isPromptReady and drains the held first prompt. Without this, a spawn
7605
+ // that never fires the ready signal (and whose readyPattern the idle
7606
+ // detector never matched) would hold the first queued message forever —
7607
+ // the previous code only logged "forcing flush" without actually flushing
7608
+ // for non-type-ahead adapters.
7609
+ if (decideHardTimeoutAction(cliAdapter?.supportsTypeAhead === true) === 'flush') {
7578
7610
  flushPending();
7611
+ return;
7612
+ }
7613
+ markPromptReady();
7579
7614
  };
7580
7615
  setTimeout(() => releaseFirstPromptTimeout(FIRST_PROMPT_TIMEOUT_MS, false), FIRST_PROMPT_TIMEOUT_MS);
7581
7616
  // Riff (and other remote HTTP backends) have no local boot process — the
@@ -7607,6 +7642,7 @@ function killCli(opts = {}) {
7607
7642
  }
7608
7643
  isSettlingFirstFlush = false;
7609
7644
  promptReadyDetectedDuringSettle = false;
7645
+ readyPatternSeenDuringHold = false;
7610
7646
  stopScreenAnalyzer();
7611
7647
  stopScreenUpdates();
7612
7648
  backend?.kill();