botmux 2.52.0 → 2.54.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +22 -269
- package/README.md +21 -300
- package/dist/adapters/backend/session-backend-selector.d.ts +5 -1
- package/dist/adapters/backend/session-backend-selector.d.ts.map +1 -1
- package/dist/adapters/backend/session-backend-selector.js +15 -1
- package/dist/adapters/backend/session-backend-selector.js.map +1 -1
- package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-backend.js +3 -0
- package/dist/adapters/backend/tmux-backend.js.map +1 -1
- package/dist/adapters/backend/types.d.ts +22 -0
- package/dist/adapters/backend/types.d.ts.map +1 -1
- package/dist/adapters/backend/types.js +7 -1
- package/dist/adapters/backend/types.js.map +1 -1
- package/dist/adapters/backend/zellij-backend.d.ts +132 -0
- package/dist/adapters/backend/zellij-backend.d.ts.map +1 -0
- package/dist/adapters/backend/zellij-backend.js +375 -0
- package/dist/adapters/backend/zellij-backend.js.map +1 -0
- package/dist/adapters/backend/zellij-observe-backend.d.ts +62 -0
- package/dist/adapters/backend/zellij-observe-backend.d.ts.map +1 -0
- package/dist/adapters/backend/zellij-observe-backend.js +218 -0
- package/dist/adapters/backend/zellij-observe-backend.js.map +1 -0
- package/dist/adapters/cli/claude-code.d.ts +39 -5
- package/dist/adapters/cli/claude-code.d.ts.map +1 -1
- package/dist/adapters/cli/claude-code.js +53 -31
- package/dist/adapters/cli/claude-code.js.map +1 -1
- package/dist/adapters/cli/registry.d.ts +2 -1
- package/dist/adapters/cli/registry.d.ts.map +1 -1
- package/dist/adapters/cli/registry.js +3 -1
- package/dist/adapters/cli/registry.js.map +1 -1
- package/dist/adapters/cli/seed.d.ts +29 -0
- package/dist/adapters/cli/seed.d.ts.map +1 -0
- package/dist/adapters/cli/seed.js +63 -0
- package/dist/adapters/cli/seed.js.map +1 -0
- package/dist/adapters/cli/types.d.ts +17 -1
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/bot-registry.d.ts +1 -1
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +79 -49
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +7 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +8 -0
- package/dist/config.js.map +1 -1
- package/dist/core/ask-hook/registry.d.ts.map +1 -1
- package/dist/core/ask-hook/registry.js +4 -0
- package/dist/core/ask-hook/registry.js.map +1 -1
- package/dist/core/command-handler.d.ts +4 -1
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +100 -8
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/dispatch.d.ts +33 -0
- package/dist/core/dispatch.d.ts.map +1 -1
- package/dist/core/dispatch.js +26 -0
- package/dist/core/dispatch.js.map +1 -1
- package/dist/core/pending-response.d.ts +31 -0
- package/dist/core/pending-response.d.ts.map +1 -0
- package/dist/core/pending-response.js +87 -0
- package/dist/core/pending-response.js.map +1 -0
- package/dist/core/session-discovery.d.ts +13 -4
- package/dist/core/session-discovery.d.ts.map +1 -1
- package/dist/core/session-discovery.js +5 -5
- package/dist/core/session-discovery.js.map +1 -1
- package/dist/core/session-manager.d.ts +10 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +59 -19
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/types.d.ts +8 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker-pool.d.ts +2 -2
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +89 -15
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/core/zellij-adopt-discovery.d.ts +28 -0
- package/dist/core/zellij-adopt-discovery.d.ts.map +1 -0
- package/dist/core/zellij-adopt-discovery.js +276 -0
- package/dist/core/zellij-adopt-discovery.js.map +1 -0
- package/dist/core/zellij-session-discovery.d.ts +73 -0
- package/dist/core/zellij-session-discovery.d.ts.map +1 -0
- package/dist/core/zellij-session-discovery.js +259 -0
- package/dist/core/zellij-session-discovery.js.map +1 -0
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +70 -4
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/web/i18n.js +1 -1
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/sessions.d.ts.map +1 -1
- package/dist/dashboard/web/sessions.js +1 -0
- package/dist/dashboard/web/sessions.js.map +1 -1
- package/dist/dashboard/web/workflows.js +1 -1
- package/dist/dashboard/web/workflows.js.map +1 -1
- package/dist/dashboard-web/app.js +3 -3
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +12 -0
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +13 -1
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/card-builder.d.ts +7 -1
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +92 -2
- package/dist/im/lark/card-builder.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +78 -6
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts +8 -1
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +28 -0
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/grant-command.d.ts +13 -0
- package/dist/im/lark/grant-command.d.ts.map +1 -1
- package/dist/im/lark/grant-command.js +93 -0
- package/dist/im/lark/grant-command.js.map +1 -1
- package/dist/services/codex-app-threads.d.ts +20 -0
- package/dist/services/codex-app-threads.d.ts.map +1 -0
- package/dist/services/codex-app-threads.js +165 -0
- package/dist/services/codex-app-threads.js.map +1 -0
- package/dist/services/pending-response-transaction-store.d.ts +12 -0
- package/dist/services/pending-response-transaction-store.d.ts.map +1 -0
- package/dist/services/pending-response-transaction-store.js +52 -0
- package/dist/services/pending-response-transaction-store.js.map +1 -0
- package/dist/services/session-store.d.ts.map +1 -1
- package/dist/services/session-store.js +15 -1
- package/dist/services/session-store.js.map +1 -1
- package/dist/setup/bot-config-editor.d.ts +1 -1
- package/dist/setup/bot-config-editor.d.ts.map +1 -1
- package/dist/setup/bot-config-editor.js +5 -4
- package/dist/setup/bot-config-editor.js.map +1 -1
- package/dist/setup/ensure-zellij.d.ts +48 -0
- package/dist/setup/ensure-zellij.d.ts.map +1 -0
- package/dist/setup/ensure-zellij.js +93 -0
- package/dist/setup/ensure-zellij.js.map +1 -0
- package/dist/types.d.ts +14 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/anchor-serializer.d.ts +3 -2
- package/dist/utils/anchor-serializer.d.ts.map +1 -1
- package/dist/utils/anchor-serializer.js +20 -5
- package/dist/utils/anchor-serializer.js.map +1 -1
- package/dist/utils/transient-snapshot.js +2 -2
- package/dist/utils/transient-snapshot.js.map +1 -1
- package/dist/worker.js +235 -32
- package/dist/worker.js.map +1 -1
- package/dist/workflows/attempt-resume.d.ts +1 -1
- package/dist/workflows/attempt-resume.d.ts.map +1 -1
- package/dist/workflows/attempt-resume.js +1 -1
- package/dist/workflows/attempt-resume.js.map +1 -1
- package/dist/workflows/events/payloads.d.ts +20 -20
- package/dist/workflows/events/schema.d.ts +48 -48
- package/package.json +1 -1
package/dist/core/dispatch.d.ts
CHANGED
|
@@ -114,6 +114,39 @@ export declare function findSubBotTopic(input: {
|
|
|
114
114
|
}>;
|
|
115
115
|
activeSeeds: Set<string>;
|
|
116
116
|
}): string | null;
|
|
117
|
+
/**
|
|
118
|
+
* Resolve where a `botmux report` should go + who to @, so report-back works
|
|
119
|
+
* even when the orchestrator is on a DIFFERENT machine.
|
|
120
|
+
*
|
|
121
|
+
* Same-machine: the dispatch registry (orchestrate-dispatch.json) is local, so
|
|
122
|
+
* `registryEntry` carries the orchestrator's exact coords (incl. orchRoot for a
|
|
123
|
+
* thread-scope orchestrator). Cross-machine: the foreign sub-bot's daemon never
|
|
124
|
+
* wrote that registry, so `registryEntry` is undefined — but everything needed
|
|
125
|
+
* for the common case is on the sub-bot's OWN session: the report goes top-level
|
|
126
|
+
* into the chat the sub-topic lives in (= the orchestrator's chat) and @-s the
|
|
127
|
+
* orchestrator (creatorOpenId, captured from the dispatch @). So we fall back to
|
|
128
|
+
* `{ orchChatId: sessionChatId, orchScope: 'chat', orchRoot: '' }`.
|
|
129
|
+
*
|
|
130
|
+
* orchOpenId prefers `creatorOpenId` (stable, set on every session-creation path
|
|
131
|
+
* incl. foreign-bot auto-create), then `ownerOpenId`, then the drifting
|
|
132
|
+
* `quoteTargetSenderOpenId` as a last resort.
|
|
133
|
+
*/
|
|
134
|
+
export declare function resolveReportTarget(input: {
|
|
135
|
+
registryEntry?: {
|
|
136
|
+
orchChatId?: string;
|
|
137
|
+
orchScope?: string;
|
|
138
|
+
orchRoot?: string;
|
|
139
|
+
};
|
|
140
|
+
sessionChatId?: string;
|
|
141
|
+
creatorOpenId?: string;
|
|
142
|
+
ownerOpenId?: string;
|
|
143
|
+
quoteTargetSenderOpenId?: string;
|
|
144
|
+
}): {
|
|
145
|
+
orchChatId?: string;
|
|
146
|
+
orchScope: string;
|
|
147
|
+
orchRoot: string;
|
|
148
|
+
orchOpenId?: string;
|
|
149
|
+
};
|
|
117
150
|
/**
|
|
118
151
|
* The footgun check shared by `botmux send`'s explicit-mention guard AND its
|
|
119
152
|
* prose `@Name` auto-injection: returns the sub-topic seed if `mentionOpenId` is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/core/dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,WAAW;IAC1B,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,QAAQ,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,GAAG,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AACtF,MAAM,MAAM,aAAa,GAAG,QAAQ,EAAE,CAAC;AAEvC,MAAM,WAAW,gBAAgB;IAC/B,8FAA8F;IAC9F,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,aAAa,EAAE,aAAa,EAAE,CAAC;IAC/B,6EAA6E;IAC7E,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAY7D;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,WAAW,EAAE,CAAC;CACrB,GAAG,gBAAgB,CAwCnB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,EAAE,CAAC;CACrB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,EAAE,CAAA;CAAE,CAO/C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,aAAa,EAAE,CAclB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACnE,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC1B,GAAG,MAAM,GAAG,IAAI,CAShB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACnE,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC1B,GAAG,MAAM,GAAG,IAAI,CAQhB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC7B,GAAG,MAAM,EAAE,CAaX"}
|
|
1
|
+
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/core/dispatch.ts"],"names":[],"mappings":"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"}
|
package/dist/core/dispatch.js
CHANGED
|
@@ -157,6 +157,32 @@ export function findSubBotTopic(input) {
|
|
|
157
157
|
}
|
|
158
158
|
return null;
|
|
159
159
|
}
|
|
160
|
+
/**
|
|
161
|
+
* Resolve where a `botmux report` should go + who to @, so report-back works
|
|
162
|
+
* even when the orchestrator is on a DIFFERENT machine.
|
|
163
|
+
*
|
|
164
|
+
* Same-machine: the dispatch registry (orchestrate-dispatch.json) is local, so
|
|
165
|
+
* `registryEntry` carries the orchestrator's exact coords (incl. orchRoot for a
|
|
166
|
+
* thread-scope orchestrator). Cross-machine: the foreign sub-bot's daemon never
|
|
167
|
+
* wrote that registry, so `registryEntry` is undefined — but everything needed
|
|
168
|
+
* for the common case is on the sub-bot's OWN session: the report goes top-level
|
|
169
|
+
* into the chat the sub-topic lives in (= the orchestrator's chat) and @-s the
|
|
170
|
+
* orchestrator (creatorOpenId, captured from the dispatch @). So we fall back to
|
|
171
|
+
* `{ orchChatId: sessionChatId, orchScope: 'chat', orchRoot: '' }`.
|
|
172
|
+
*
|
|
173
|
+
* orchOpenId prefers `creatorOpenId` (stable, set on every session-creation path
|
|
174
|
+
* incl. foreign-bot auto-create), then `ownerOpenId`, then the drifting
|
|
175
|
+
* `quoteTargetSenderOpenId` as a last resort.
|
|
176
|
+
*/
|
|
177
|
+
export function resolveReportTarget(input) {
|
|
178
|
+
const e = input.registryEntry;
|
|
179
|
+
return {
|
|
180
|
+
orchChatId: e?.orchChatId ?? input.sessionChatId,
|
|
181
|
+
orchScope: e?.orchScope ?? 'chat',
|
|
182
|
+
orchRoot: e?.orchRoot ?? '',
|
|
183
|
+
orchOpenId: input.creatorOpenId ?? input.ownerOpenId ?? input.quoteTargetSenderOpenId,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
160
186
|
/**
|
|
161
187
|
* The footgun check shared by `botmux send`'s explicit-mention guard AND its
|
|
162
188
|
* prose `@Name` auto-injection: returns the sub-topic seed if `mentionOpenId` is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/core/dispatch.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/core/dispatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Session } from '../types.js';
|
|
2
|
+
export declare const COMPLETED_REACTION_EMOJI_TYPE = "DONE";
|
|
3
|
+
type PendingResponseSession = Pick<Session, 'pendingResponseCardId' | 'pendingResponseCardState' | 'lastPatchedResponseCardId'>;
|
|
4
|
+
export declare function isPendingResponseCardOpen(session: Pick<Session, 'pendingResponseCardId' | 'pendingResponseCardState'>): boolean;
|
|
5
|
+
/** Sync only the cross-process pending-response fields from a fresher Session. */
|
|
6
|
+
export declare function syncPendingResponseState(target: PendingResponseSession, source: PendingResponseSession | undefined): void;
|
|
7
|
+
export declare function mergePendingResponseState<T extends PendingResponseSession>(incoming: T, existing: PendingResponseSession | undefined): T;
|
|
8
|
+
export declare function shouldUseCardForSend(opts: {
|
|
9
|
+
forceCard: boolean;
|
|
10
|
+
forceText: boolean;
|
|
11
|
+
hasMarkdown: boolean;
|
|
12
|
+
hasOpenPendingResponseCard: boolean;
|
|
13
|
+
}): boolean;
|
|
14
|
+
export declare function shouldWithdrawPreviousPendingOnNewTurn(_session: Pick<Session, 'pendingResponseCardId' | 'pendingResponseCardState'>): boolean;
|
|
15
|
+
/** A patched marker means the Feishu PATCH returned, but session save may not have. */
|
|
16
|
+
export declare function shouldTreatPendingCardAsPatchedByMarker(pendingCardId: string | undefined, marker: {
|
|
17
|
+
cardId?: string;
|
|
18
|
+
state?: string;
|
|
19
|
+
} | undefined): boolean;
|
|
20
|
+
export declare function createPendingResponseQueue(): {
|
|
21
|
+
run<T>(key: string, work: () => Promise<T>): Promise<T>;
|
|
22
|
+
size(): number;
|
|
23
|
+
};
|
|
24
|
+
export declare function startPendingResponseTurn(session: PendingResponseSession, messageId: string): void;
|
|
25
|
+
/** Mark the current open placeholder as patched; keep its id for diagnostics. */
|
|
26
|
+
export declare function markPendingResponseCardPatched(session: PendingResponseSession): void;
|
|
27
|
+
export declare function markPendingResponseCardPatchedIfCurrent(session: PendingResponseSession, cardId: string): boolean;
|
|
28
|
+
/** Read the open placeholder id without claiming it until PATCH succeeds. */
|
|
29
|
+
export declare function claimPendingResponseCard(session: PendingResponseSession): string | undefined;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=pending-response.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pending-response.d.ts","sourceRoot":"","sources":["../../src/core/pending-response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,eAAO,MAAM,6BAA6B,SAAS,CAAC;AAEpD,KAAK,sBAAsB,GAAG,IAAI,CAAC,OAAO,EAAE,uBAAuB,GAAG,0BAA0B,GAAG,2BAA2B,CAAC,CAAC;AAEhI,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,uBAAuB,GAAG,0BAA0B,CAAC,GAAG,OAAO,CAE/H;AAED,kFAAkF;AAClF,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,sBAAsB,EAAE,MAAM,EAAE,sBAAsB,GAAG,SAAS,GAAG,IAAI,CAKzH;AAED,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,sBAAsB,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,sBAAsB,GAAG,SAAS,GAAG,CAAC,CAyBxI;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,0BAA0B,EAAE,OAAO,CAAC;CACrC,GAAG,OAAO,CAGV;AAED,wBAAgB,sCAAsC,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,uBAAuB,GAAG,0BAA0B,CAAC,GAAG,OAAO,CAE7I;AAED,uFAAuF;AACvF,wBAAgB,uCAAuC,CACrD,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,MAAM,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GACtD,OAAO,CAET;AAED,wBAAgB,0BAA0B;QAGlC,CAAC,OAAO,MAAM,QAAQ,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;YAS/C,MAAM;EAEjB;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAGjG;AAED,iFAAiF;AACjF,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAIpF;AAED,wBAAgB,uCAAuC,CAAC,OAAO,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAIhH;AAED,6EAA6E;AAC7E,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,GAAG,SAAS,CAE5F"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
export const COMPLETED_REACTION_EMOJI_TYPE = 'DONE';
|
|
2
|
+
export function isPendingResponseCardOpen(session) {
|
|
3
|
+
return !!session.pendingResponseCardId && session.pendingResponseCardState === 'open';
|
|
4
|
+
}
|
|
5
|
+
/** Sync only the cross-process pending-response fields from a fresher Session. */
|
|
6
|
+
export function syncPendingResponseState(target, source) {
|
|
7
|
+
if (!source)
|
|
8
|
+
return;
|
|
9
|
+
target.pendingResponseCardId = source.pendingResponseCardId;
|
|
10
|
+
target.pendingResponseCardState = source.pendingResponseCardState;
|
|
11
|
+
target.lastPatchedResponseCardId = source.lastPatchedResponseCardId;
|
|
12
|
+
}
|
|
13
|
+
export function mergePendingResponseState(incoming, existing) {
|
|
14
|
+
if (!existing)
|
|
15
|
+
return incoming;
|
|
16
|
+
const hasExistingPendingState = existing.pendingResponseCardId !== undefined
|
|
17
|
+
|| existing.pendingResponseCardState !== undefined
|
|
18
|
+
|| existing.lastPatchedResponseCardId !== undefined;
|
|
19
|
+
if (!hasExistingPendingState)
|
|
20
|
+
return incoming;
|
|
21
|
+
const incomingStartsNewOpenCard = incoming.pendingResponseCardState === 'open'
|
|
22
|
+
&& !!incoming.pendingResponseCardId
|
|
23
|
+
&& incoming.pendingResponseCardId !== existing.lastPatchedResponseCardId;
|
|
24
|
+
if (incomingStartsNewOpenCard)
|
|
25
|
+
return incoming;
|
|
26
|
+
const incomingMarksPatched = incoming.pendingResponseCardState === 'patched';
|
|
27
|
+
const existingHasNewerOpenCard = existing.pendingResponseCardState === 'open'
|
|
28
|
+
&& !!existing.pendingResponseCardId
|
|
29
|
+
&& incoming.lastPatchedResponseCardId !== existing.pendingResponseCardId;
|
|
30
|
+
if (incomingMarksPatched && !existingHasNewerOpenCard)
|
|
31
|
+
return incoming;
|
|
32
|
+
return {
|
|
33
|
+
...incoming,
|
|
34
|
+
pendingResponseCardId: existing.pendingResponseCardId,
|
|
35
|
+
pendingResponseCardState: existing.pendingResponseCardState,
|
|
36
|
+
lastPatchedResponseCardId: existing.lastPatchedResponseCardId,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export function shouldUseCardForSend(opts) {
|
|
40
|
+
if (opts.hasOpenPendingResponseCard)
|
|
41
|
+
return true;
|
|
42
|
+
return opts.forceCard || (!opts.forceText && opts.hasMarkdown);
|
|
43
|
+
}
|
|
44
|
+
export function shouldWithdrawPreviousPendingOnNewTurn(_session) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
/** A patched marker means the Feishu PATCH returned, but session save may not have. */
|
|
48
|
+
export function shouldTreatPendingCardAsPatchedByMarker(pendingCardId, marker) {
|
|
49
|
+
return !!pendingCardId && marker?.state === 'patched' && marker.cardId === pendingCardId;
|
|
50
|
+
}
|
|
51
|
+
export function createPendingResponseQueue() {
|
|
52
|
+
const tails = new Map();
|
|
53
|
+
return {
|
|
54
|
+
run(key, work) {
|
|
55
|
+
const prev = tails.get(key);
|
|
56
|
+
const next = prev ? prev.catch(() => undefined).then(work) : work();
|
|
57
|
+
const stored = next.finally(() => {
|
|
58
|
+
if (tails.get(key) === stored)
|
|
59
|
+
tails.delete(key);
|
|
60
|
+
});
|
|
61
|
+
tails.set(key, stored);
|
|
62
|
+
return next;
|
|
63
|
+
},
|
|
64
|
+
size() { return tails.size; },
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export function startPendingResponseTurn(session, messageId) {
|
|
68
|
+
session.pendingResponseCardId = messageId;
|
|
69
|
+
session.pendingResponseCardState = 'open';
|
|
70
|
+
}
|
|
71
|
+
/** Mark the current open placeholder as patched; keep its id for diagnostics. */
|
|
72
|
+
export function markPendingResponseCardPatched(session) {
|
|
73
|
+
session.lastPatchedResponseCardId = session.pendingResponseCardId;
|
|
74
|
+
session.pendingResponseCardId = undefined;
|
|
75
|
+
session.pendingResponseCardState = 'patched';
|
|
76
|
+
}
|
|
77
|
+
export function markPendingResponseCardPatchedIfCurrent(session, cardId) {
|
|
78
|
+
if (session.pendingResponseCardId !== cardId || session.pendingResponseCardState !== 'open')
|
|
79
|
+
return false;
|
|
80
|
+
markPendingResponseCardPatched(session);
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
/** Read the open placeholder id without claiming it until PATCH succeeds. */
|
|
84
|
+
export function claimPendingResponseCard(session) {
|
|
85
|
+
return isPendingResponseCardOpen(session) ? session.pendingResponseCardId : undefined;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=pending-response.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pending-response.js","sourceRoot":"","sources":["../../src/core/pending-response.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ export interface AdoptableSession {
|
|
|
10
10
|
paneCols: number;
|
|
11
11
|
paneRows: number;
|
|
12
12
|
}
|
|
13
|
+
export declare function cliIdForComm(comm: string, filterCliId?: CliId): CliId | undefined;
|
|
13
14
|
/**
|
|
14
15
|
* 读取进程的 comm 名(不含路径)。Linux 走 /proc/<pid>/comm 快路径;
|
|
15
16
|
* macOS / 其它 Unix 走 `ps -o comm=` 兜底。
|
|
@@ -19,7 +20,7 @@ export interface AdoptableSession {
|
|
|
19
20
|
*
|
|
20
21
|
* 返回 undefined 表示进程不存在或读不到。
|
|
21
22
|
*/
|
|
22
|
-
declare function readComm(pid: number): string | undefined;
|
|
23
|
+
export declare function readComm(pid: number): string | undefined;
|
|
23
24
|
/**
|
|
24
25
|
* 读取进程的工作目录。Linux 走 /proc/<pid>/cwd 软链;
|
|
25
26
|
* macOS / 其它 Unix 走 `lsof -a -d cwd -p <pid> -Fn` 兜底。
|
|
@@ -32,7 +33,7 @@ declare function readComm(pid: number): string | undefined;
|
|
|
32
33
|
*
|
|
33
34
|
* 返回 undefined 表示读不到。
|
|
34
35
|
*/
|
|
35
|
-
declare function readCwd(pid: number): string | undefined;
|
|
36
|
+
export declare function readCwd(pid: number): string | undefined;
|
|
36
37
|
/**
|
|
37
38
|
* 获取一个进程的直接子进程 PID。
|
|
38
39
|
*
|
|
@@ -44,7 +45,16 @@ declare function readCwd(pid: number): string | undefined;
|
|
|
44
45
|
* 的 ps 都接受这个写法。fork-exec 一次代价可接受,因为 discovery 本身是
|
|
45
46
|
* 低频操作(只在用户 /adopt 时跑一遍)。
|
|
46
47
|
*/
|
|
47
|
-
declare function getChildPids(pid: number): number[];
|
|
48
|
+
export declare function getChildPids(pid: number): number[];
|
|
49
|
+
/**
|
|
50
|
+
* Try to read Claude Code session metadata from ~/.claude/sessions/<PID>.json.
|
|
51
|
+
* Returns { sessionId, cwd, startedAt } or undefined.
|
|
52
|
+
*/
|
|
53
|
+
export declare function readClaudeSessionMeta(pid: number): {
|
|
54
|
+
sessionId?: string;
|
|
55
|
+
cwd?: string;
|
|
56
|
+
startedAt?: number;
|
|
57
|
+
} | undefined;
|
|
48
58
|
/**
|
|
49
59
|
* Scan all tmux panes for running CLI processes that can be adopted by Botmux.
|
|
50
60
|
*
|
|
@@ -63,5 +73,4 @@ export declare function validateAdoptTarget(tmuxTarget: string, expectedPid: num
|
|
|
63
73
|
export declare const __testOnly_readComm: typeof readComm;
|
|
64
74
|
export declare const __testOnly_readCwd: typeof readCwd;
|
|
65
75
|
export declare const __testOnly_getChildPids: typeof getChildPids;
|
|
66
|
-
export {};
|
|
67
76
|
//# sourceMappingURL=session-discovery.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-discovery.d.ts","sourceRoot":"","sources":["../../src/core/session-discovery.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAUtD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"session-discovery.d.ts","sourceRoot":"","sources":["../../src/core/session-discovery.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAUtD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAeD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,CAQjF;AASD;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAkBxD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAoBvD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAsBlD;AAgCD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAavH;AAwBD;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,CAAC,EAAE,KAAK,GAAG,gBAAgB,EAAE,CAoFjF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAiBpF;AAID,eAAO,MAAM,mBAAmB,iBAAW,CAAC;AAC5C,eAAO,MAAM,kBAAkB,gBAAU,CAAC;AAC1C,eAAO,MAAM,uBAAuB,qBAAe,CAAC"}
|
|
@@ -24,7 +24,7 @@ const CLI_COMM_MAP = {
|
|
|
24
24
|
mtr: 'mtr',
|
|
25
25
|
hermes: 'hermes',
|
|
26
26
|
};
|
|
27
|
-
function cliIdForComm(comm, filterCliId) {
|
|
27
|
+
export function cliIdForComm(comm, filterCliId) {
|
|
28
28
|
const normalizedComm = comm.startsWith('.') ? comm.slice(1) : comm;
|
|
29
29
|
const direct = CLI_COMM_MAP[comm] ?? CLI_COMM_MAP[normalizedComm];
|
|
30
30
|
// MTR is an OpenCode fork and some installs still expose the underlying
|
|
@@ -48,7 +48,7 @@ function shellescape(s) {
|
|
|
48
48
|
*
|
|
49
49
|
* 返回 undefined 表示进程不存在或读不到。
|
|
50
50
|
*/
|
|
51
|
-
function readComm(pid) {
|
|
51
|
+
export function readComm(pid) {
|
|
52
52
|
if (IS_LINUX) {
|
|
53
53
|
try {
|
|
54
54
|
return readFileSync(`/proc/${pid}/comm`, 'utf-8').trim();
|
|
@@ -82,7 +82,7 @@ function readComm(pid) {
|
|
|
82
82
|
*
|
|
83
83
|
* 返回 undefined 表示读不到。
|
|
84
84
|
*/
|
|
85
|
-
function readCwd(pid) {
|
|
85
|
+
export function readCwd(pid) {
|
|
86
86
|
if (IS_LINUX) {
|
|
87
87
|
try {
|
|
88
88
|
return readlinkSync(`/proc/${pid}/cwd`);
|
|
@@ -117,7 +117,7 @@ function readCwd(pid) {
|
|
|
117
117
|
* 的 ps 都接受这个写法。fork-exec 一次代价可接受,因为 discovery 本身是
|
|
118
118
|
* 低频操作(只在用户 /adopt 时跑一遍)。
|
|
119
119
|
*/
|
|
120
|
-
function getChildPids(pid) {
|
|
120
|
+
export function getChildPids(pid) {
|
|
121
121
|
try {
|
|
122
122
|
const out = execSync('ps -A -o pid= -o ppid=', {
|
|
123
123
|
encoding: 'utf-8',
|
|
@@ -169,7 +169,7 @@ function findCliProcess(rootPid, maxDepth, filterCliId) {
|
|
|
169
169
|
* Try to read Claude Code session metadata from ~/.claude/sessions/<PID>.json.
|
|
170
170
|
* Returns { sessionId, cwd, startedAt } or undefined.
|
|
171
171
|
*/
|
|
172
|
-
function readClaudeSessionMeta(pid) {
|
|
172
|
+
export function readClaudeSessionMeta(pid) {
|
|
173
173
|
try {
|
|
174
174
|
const metaPath = join(homedir(), '.claude', 'sessions', `${pid}.json`);
|
|
175
175
|
const raw = readFileSync(metaPath, 'utf-8');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-discovery.js","sourceRoot":"","sources":["../../src/core/session-discovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAElD,4DAA4D;AAC5D,MAAM,QAAQ,GAAG,QAAQ,EAAE,KAAK,OAAO,CAAC;AAgBxC,gFAAgF;AAEhF,MAAM,YAAY,GAA0B;IAC1C,MAAM,EAAE,aAAa;IACrB,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"session-discovery.js","sourceRoot":"","sources":["../../src/core/session-discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -119,6 +119,16 @@ export declare function buildReforkPrompt(ds: DaemonSession, content: string, op
|
|
|
119
119
|
*/
|
|
120
120
|
export declare function persistStreamCardState(ds: DaemonSession): void;
|
|
121
121
|
export declare function rememberLastCliInput(ds: DaemonSession, userPrompt: string, cliInput: string): void;
|
|
122
|
+
/**
|
|
123
|
+
* Whether daemon restore should eagerly re-fork workers to re-attach surviving
|
|
124
|
+
* tmux panes (which re-renders — or re-posts — each session's streaming card in
|
|
125
|
+
* its Lark thread). True only on the tmux backend, and suppressed by
|
|
126
|
+
* quiet-restart (`BOTMUX_QUIET_RESTART=1`) so local-dev restarts don't re-push
|
|
127
|
+
* cards for unfinished sessions. When suppressed, sessions are still registered
|
|
128
|
+
* and resume lazily — re-attaching the surviving tmux on the next real message
|
|
129
|
+
* via `selectSessionBackend` — exactly like the pty backend already does.
|
|
130
|
+
*/
|
|
131
|
+
export declare function shouldAutoForkOnRestore(backendType: 'pty' | 'tmux' | 'zellij', quietRestart: boolean): boolean;
|
|
122
132
|
export declare function restoreActiveSessions(activeSessions: Map<string, DaemonSession>): Promise<void>;
|
|
123
133
|
/**
|
|
124
134
|
* Reactivate a single closed session — used by the "▶️ 恢复会话" card button
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/core/session-manager.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/core/session-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,8 +9,10 @@ import { forkWorker, forkAdoptWorker, killStalePids, getCurrentCliVersion, resto
|
|
|
9
9
|
import { createCliAdapterSync } from '../adapters/cli/registry.js';
|
|
10
10
|
import { buildBotmuxShellHints } from '../adapters/cli/shared-hints.js';
|
|
11
11
|
import { TmuxBackend } from '../adapters/backend/tmux-backend.js';
|
|
12
|
+
import { ZellijBackend } from '../adapters/backend/zellij-backend.js';
|
|
12
13
|
import { getBot, getAllBots } from '../bot-registry.js';
|
|
13
14
|
import { validateAdoptTarget } from './session-discovery.js';
|
|
15
|
+
import { validateZellijAdoptTarget } from './zellij-adopt-discovery.js';
|
|
14
16
|
import { sessionKey, sessionAnchorId } from './types.js';
|
|
15
17
|
import { markSessionActivity } from './session-activity.js';
|
|
16
18
|
import { usageLimitStateKey } from '../utils/cli-usage-limit.js';
|
|
@@ -424,7 +426,10 @@ export function persistStreamCardState(ds) {
|
|
|
424
426
|
s.currentTurnTitle === ds.currentTurnTitle &&
|
|
425
427
|
sameUsageLimit(s.usageLimit, ds.usageLimit) &&
|
|
426
428
|
s.lastUserPrompt === ds.lastUserPrompt &&
|
|
427
|
-
s.lastCliInput === ds.lastCliInput
|
|
429
|
+
s.lastCliInput === ds.lastCliInput &&
|
|
430
|
+
s.pendingResponseCardId === ds.pendingResponseCardId &&
|
|
431
|
+
s.pendingResponseCardState === ds.pendingResponseCardState &&
|
|
432
|
+
s.lastPatchedResponseCardId === ds.lastPatchedResponseCardId)
|
|
428
433
|
return;
|
|
429
434
|
s.streamCardId = cardId;
|
|
430
435
|
s.streamCardNonce = ds.streamCardNonce;
|
|
@@ -434,6 +439,9 @@ export function persistStreamCardState(ds) {
|
|
|
434
439
|
s.usageLimit = ds.usageLimit;
|
|
435
440
|
s.lastUserPrompt = ds.lastUserPrompt;
|
|
436
441
|
s.lastCliInput = ds.lastCliInput;
|
|
442
|
+
s.pendingResponseCardId = ds.pendingResponseCardId;
|
|
443
|
+
s.pendingResponseCardState = ds.pendingResponseCardState;
|
|
444
|
+
s.lastPatchedResponseCardId = ds.lastPatchedResponseCardId;
|
|
437
445
|
// Clear legacy field so it doesn't drift
|
|
438
446
|
s.streamExpanded = undefined;
|
|
439
447
|
sessionStore.updateSession(s);
|
|
@@ -446,6 +454,18 @@ export function rememberLastCliInput(ds, userPrompt, cliInput) {
|
|
|
446
454
|
sessionStore.updateSession(ds.session);
|
|
447
455
|
}
|
|
448
456
|
// ─── Session restore ─────────────────────────────────────────────────────────
|
|
457
|
+
/**
|
|
458
|
+
* Whether daemon restore should eagerly re-fork workers to re-attach surviving
|
|
459
|
+
* tmux panes (which re-renders — or re-posts — each session's streaming card in
|
|
460
|
+
* its Lark thread). True only on the tmux backend, and suppressed by
|
|
461
|
+
* quiet-restart (`BOTMUX_QUIET_RESTART=1`) so local-dev restarts don't re-push
|
|
462
|
+
* cards for unfinished sessions. When suppressed, sessions are still registered
|
|
463
|
+
* and resume lazily — re-attaching the surviving tmux on the next real message
|
|
464
|
+
* via `selectSessionBackend` — exactly like the pty backend already does.
|
|
465
|
+
*/
|
|
466
|
+
export function shouldAutoForkOnRestore(backendType, quietRestart) {
|
|
467
|
+
return (backendType === 'tmux' || backendType === 'zellij') && !quietRestart;
|
|
468
|
+
}
|
|
449
469
|
export async function restoreActiveSessions(activeSessions) {
|
|
450
470
|
const sessions = sessionStore.listSessions();
|
|
451
471
|
const active = sessions.filter(s => s.status === 'active');
|
|
@@ -463,7 +483,10 @@ export async function restoreActiveSessions(activeSessions) {
|
|
|
463
483
|
// Adopt sessions: restore if original CLI is still alive, otherwise close
|
|
464
484
|
if (session.title?.startsWith('Adopt:') && session.adoptedFrom) {
|
|
465
485
|
const adopted = session.adoptedFrom;
|
|
466
|
-
|
|
486
|
+
const stillAlive = adopted.zellijPaneId
|
|
487
|
+
? validateZellijAdoptTarget(adopted.zellijSession ?? '', adopted.zellijPaneId, adopted.originalCliPid)
|
|
488
|
+
: validateAdoptTarget(adopted.tmuxTarget ?? '', adopted.originalCliPid);
|
|
489
|
+
if (!stillAlive) {
|
|
467
490
|
logger.info(`Closing adopt session ${session.sessionId} (original CLI exited)`);
|
|
468
491
|
sessionStore.closeSession(session.sessionId);
|
|
469
492
|
continue;
|
|
@@ -495,6 +518,9 @@ export async function restoreActiveSessions(activeSessions) {
|
|
|
495
518
|
usageLimit: session.usageLimit,
|
|
496
519
|
lastUserPrompt: session.lastUserPrompt,
|
|
497
520
|
lastCliInput: session.lastCliInput,
|
|
521
|
+
pendingResponseCardId: session.pendingResponseCardId,
|
|
522
|
+
pendingResponseCardState: session.pendingResponseCardState,
|
|
523
|
+
lastPatchedResponseCardId: session.lastPatchedResponseCardId,
|
|
498
524
|
};
|
|
499
525
|
const anchor = sessionAnchorId(ds);
|
|
500
526
|
messageQueue.ensureQueue(anchor);
|
|
@@ -507,7 +533,7 @@ export async function restoreActiveSessions(activeSessions) {
|
|
|
507
533
|
// rather than silently overwriting it.
|
|
508
534
|
await setActiveSessionSafe(activeSessions, sessionKey(anchor, larkAppId), ds);
|
|
509
535
|
forkAdoptWorker(ds, { restoredFromMetadata: true });
|
|
510
|
-
logger.info(`[${session.sessionId.substring(0, 8)}] Restored adopt session (target: ${adopted.tmuxTarget}, scope: ${scope})`);
|
|
536
|
+
logger.info(`[${session.sessionId.substring(0, 8)}] Restored adopt session (target: ${adopted.tmuxTarget ?? `${adopted.zellijSession}/${adopted.zellijPaneId}`}, scope: ${scope})`);
|
|
511
537
|
continue;
|
|
512
538
|
}
|
|
513
539
|
// Adopt sessions without persisted metadata — close (legacy)
|
|
@@ -544,6 +570,9 @@ export async function restoreActiveSessions(activeSessions) {
|
|
|
544
570
|
usageLimit: session.usageLimit,
|
|
545
571
|
lastUserPrompt: session.lastUserPrompt,
|
|
546
572
|
lastCliInput: session.lastCliInput,
|
|
573
|
+
pendingResponseCardId: session.pendingResponseCardId,
|
|
574
|
+
pendingResponseCardState: session.pendingResponseCardState,
|
|
575
|
+
lastPatchedResponseCardId: session.lastPatchedResponseCardId,
|
|
547
576
|
};
|
|
548
577
|
const anchor = sessionAnchorId(ds);
|
|
549
578
|
messageQueue.ensureQueue(anchor);
|
|
@@ -553,20 +582,28 @@ export async function restoreActiveSessions(activeSessions) {
|
|
|
553
582
|
await setActiveSessionSafe(activeSessions, sessionKey(anchor, larkAppId), ds);
|
|
554
583
|
logger.debug(`Registered session ${session.sessionId} (scope: ${scope}, anchor: ${anchor})`);
|
|
555
584
|
}
|
|
556
|
-
// Tmux mode: auto-fork workers for sessions with surviving tmux sessions
|
|
557
|
-
|
|
585
|
+
// Tmux mode: auto-fork workers for sessions with surviving tmux sessions.
|
|
586
|
+
// Skipped under quiet-restart (dev) — sessions resume lazily on the next
|
|
587
|
+
// message instead of re-pushing their cards on every restart.
|
|
588
|
+
if (shouldAutoForkOnRestore(config.daemon.backendType, config.daemon.quietRestart)) {
|
|
589
|
+
// Both persistent backends expose the same static surface; pick by the
|
|
590
|
+
// daemon's backend so zellij sessions also eager-reattach on restart.
|
|
591
|
+
const isZellij = config.daemon.backendType === 'zellij';
|
|
592
|
+
const sessionNameFor = (sid) => isZellij ? ZellijBackend.sessionName(sid) : TmuxBackend.sessionName(sid);
|
|
593
|
+
const hasSession = (n) => isZellij ? ZellijBackend.hasSession(n) : TmuxBackend.hasSession(n);
|
|
594
|
+
const killSession = (n) => isZellij ? ZellijBackend.killSession(n) : TmuxBackend.killSession(n);
|
|
595
|
+
const kind = isZellij ? 'zellij' : 'tmux';
|
|
558
596
|
for (const [, ds] of activeSessions) {
|
|
559
|
-
const
|
|
560
|
-
if (!
|
|
597
|
+
const sessName = sessionNameFor(ds.session.sessionId);
|
|
598
|
+
if (!hasSession(sessName))
|
|
561
599
|
continue;
|
|
562
|
-
// Guard against re-attaching to a
|
|
563
|
-
//
|
|
564
|
-
//
|
|
565
|
-
//
|
|
566
|
-
//
|
|
567
|
-
//
|
|
568
|
-
//
|
|
569
|
-
// trigger a fresh spawn.
|
|
600
|
+
// Guard against re-attaching to a session started with a different CLI
|
|
601
|
+
// than the bot is currently configured for. attach ignores the bin/args
|
|
602
|
+
// we hand to backend.spawn(), so without this check, changing a bot's
|
|
603
|
+
// cliId in bots.json would silently resurrect the OLD CLI on restart.
|
|
604
|
+
// Compare persisted session.cliId (stamped at fork time) against the
|
|
605
|
+
// bot's current config; mismatch ⇒ kill the stale session, let the next
|
|
606
|
+
// message trigger a fresh spawn.
|
|
570
607
|
const tag = ds.session.sessionId.substring(0, 8);
|
|
571
608
|
const sessionCliId = ds.session.cliId;
|
|
572
609
|
let botCliId;
|
|
@@ -575,15 +612,15 @@ export async function restoreActiveSessions(activeSessions) {
|
|
|
575
612
|
}
|
|
576
613
|
catch { /* bot deregistered */ }
|
|
577
614
|
if (sessionCliId && botCliId && sessionCliId !== botCliId) {
|
|
578
|
-
logger.warn(`[${tag}] CLI mismatch (session=${sessionCliId}, bot=${botCliId}), killing stale
|
|
579
|
-
|
|
615
|
+
logger.warn(`[${tag}] CLI mismatch (session=${sessionCliId}, bot=${botCliId}), killing stale ${kind} ${sessName}`);
|
|
616
|
+
killSession(sessName);
|
|
580
617
|
continue;
|
|
581
618
|
}
|
|
582
|
-
logger.info(`[${tag}]
|
|
619
|
+
logger.info(`[${tag}] ${kind} session alive, auto-forking worker to re-attach`);
|
|
583
620
|
forkWorker(ds, '', true);
|
|
584
621
|
}
|
|
585
622
|
}
|
|
586
|
-
logger.info(`Restored ${active.length} session(s)${config.daemon.backendType
|
|
623
|
+
logger.info(`Restored ${active.length} session(s)${shouldAutoForkOnRestore(config.daemon.backendType, config.daemon.quietRestart) ? '' : ', waiting for messages to resume'}`);
|
|
587
624
|
}
|
|
588
625
|
/**
|
|
589
626
|
* Reactivate a single closed session — used by the "▶️ 恢复会话" card button
|
|
@@ -706,6 +743,9 @@ export async function resumeSession(sessionId, activeSessions) {
|
|
|
706
743
|
usageLimit: session.usageLimit,
|
|
707
744
|
lastUserPrompt: session.lastUserPrompt,
|
|
708
745
|
lastCliInput: session.lastCliInput,
|
|
746
|
+
pendingResponseCardId: session.pendingResponseCardId,
|
|
747
|
+
pendingResponseCardState: session.pendingResponseCardState,
|
|
748
|
+
lastPatchedResponseCardId: session.lastPatchedResponseCardId,
|
|
709
749
|
};
|
|
710
750
|
messageQueue.ensureQueue(anchor);
|
|
711
751
|
// setActiveSessionSafe over a bare Map.set: the scratch-eviction above
|