botmux 2.73.0 → 2.74.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 (47) hide show
  1. package/README.en.md +3 -2
  2. package/README.md +3 -2
  3. package/dist/adapters/cli/antigravity.d.ts.map +1 -1
  4. package/dist/adapters/cli/antigravity.js +7 -0
  5. package/dist/adapters/cli/antigravity.js.map +1 -1
  6. package/dist/adapters/cli/claude-code.d.ts.map +1 -1
  7. package/dist/adapters/cli/claude-code.js +7 -0
  8. package/dist/adapters/cli/claude-code.js.map +1 -1
  9. package/dist/adapters/cli/codex.d.ts.map +1 -1
  10. package/dist/adapters/cli/codex.js +7 -1
  11. package/dist/adapters/cli/codex.js.map +1 -1
  12. package/dist/adapters/cli/traex.d.ts.map +1 -1
  13. package/dist/adapters/cli/traex.js +7 -1
  14. package/dist/adapters/cli/traex.js.map +1 -1
  15. package/dist/adapters/cli/types.d.ts +29 -0
  16. package/dist/adapters/cli/types.d.ts.map +1 -1
  17. package/dist/core/command-handler.d.ts +10 -0
  18. package/dist/core/command-handler.d.ts.map +1 -1
  19. package/dist/core/command-handler.js +75 -6
  20. package/dist/core/command-handler.js.map +1 -1
  21. package/dist/i18n/en.d.ts.map +1 -1
  22. package/dist/i18n/en.js +7 -2
  23. package/dist/i18n/en.js.map +1 -1
  24. package/dist/i18n/zh.d.ts.map +1 -1
  25. package/dist/i18n/zh.js +7 -2
  26. package/dist/i18n/zh.js.map +1 -1
  27. package/dist/im/lark/card-builder.d.ts +14 -4
  28. package/dist/im/lark/card-builder.d.ts.map +1 -1
  29. package/dist/im/lark/card-builder.js +59 -18
  30. package/dist/im/lark/card-builder.js.map +1 -1
  31. package/dist/im/lark/card-handler.d.ts.map +1 -1
  32. package/dist/im/lark/card-handler.js +49 -6
  33. package/dist/im/lark/card-handler.js.map +1 -1
  34. package/dist/im/lark/grant-command.d.ts +8 -2
  35. package/dist/im/lark/grant-command.d.ts.map +1 -1
  36. package/dist/im/lark/grant-command.js +66 -14
  37. package/dist/im/lark/grant-command.js.map +1 -1
  38. package/dist/services/resumable-session-discovery.d.ts +12 -0
  39. package/dist/services/resumable-session-discovery.d.ts.map +1 -0
  40. package/dist/services/resumable-session-discovery.js +331 -0
  41. package/dist/services/resumable-session-discovery.js.map +1 -0
  42. package/dist/services/session-store.d.ts +13 -0
  43. package/dist/services/session-store.d.ts.map +1 -1
  44. package/dist/services/session-store.js +44 -0
  45. package/dist/services/session-store.js.map +1 -1
  46. package/dist/workflows/events/schema.d.ts +560 -560
  47. package/package.json +1 -1
@@ -0,0 +1,12 @@
1
+ import type { ResumableSession } from '../adapters/cli/types.js';
2
+ export declare function discoverClaudeFamilySessions(dataDir: string, limit: number, exclude?: ReadonlySet<string>): Promise<ResumableSession[]>;
3
+ export declare function discoverRolloutSessions(sessionsRoot: string, limit: number, exclude?: ReadonlySet<string>): Promise<ResumableSession[]>;
4
+ /** Antigravity appends one line per submit: `{display, timestamp, workspace,
5
+ * conversationId}`. This is an append-only log — the freshest conversations
6
+ * live at the TAIL — so we stream the WHOLE file (a flat submit log, not a
7
+ * per-session transcript, so it stays small) rather than a bounded prefix that
8
+ * would hide recent sessions once the file grows. Dedup by conversationId,
9
+ * keeping the latest timestamp; the first display seen for a conversation is
10
+ * its title. */
11
+ export declare function discoverAntigravitySessions(historyPath: string, limit: number, exclude?: ReadonlySet<string>): Promise<ResumableSession[]>;
12
+ //# sourceMappingURL=resumable-session-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resumable-session-discovery.d.ts","sourceRoot":"","sources":["../../src/services/resumable-session-discovery.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAwMjE,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAC5B,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAO7B;AAuCD,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAC5B,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAa7B;AAID;;;;;;iBAMiB;AACjB,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAC5B,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA6B7B"}
@@ -0,0 +1,331 @@
1
+ /**
2
+ * Resumable-session discovery — scan a CLI's on-disk transcript store and
3
+ * surface the sessions a user can *resume* (paseo-style import), independent of
4
+ * whether the original CLI is still running in tmux. This powers the second
5
+ * filter of `/adopt`: pick a stored session → botmux spawns a fresh worker that
6
+ * runs `<cli> --resume <id>` in the recorded cwd.
7
+ *
8
+ * Three storage shapes are covered (one parser each, shared across CLIs):
9
+ * - Claude-family JSONL (`claude-code`, `seed`): <dataDir>/projects/<hash>/<id>.jsonl
10
+ * - Codex/TRAE rollout (`codex`, `traex`): <sessionsRoot>/YYYY/MM/DD/rollout-*.jsonl
11
+ * - Antigravity history (`antigravity`): <home>/history.jsonl (flat submit log)
12
+ *
13
+ * All scans are daemon-side, pure filesystem (no PTY / subprocess), and run
14
+ * only on an explicit `/adopt` — so we favour correctness over cleverness: take
15
+ * the most-recent files by mtime, then stream each line by line (NOT a bounded
16
+ * byte prefix, which truncates oversized records and hides an append-only log's
17
+ * fresh tail), stopping early once the needed metadata is in hand.
18
+ */
19
+ import { promises as fs, createReadStream } from 'node:fs';
20
+ import { createInterface } from 'node:readline';
21
+ import { basename, join } from 'node:path';
22
+ const TITLE_MAX = 80;
23
+ /** Safety cap on lines scanned per transcript when searching for the metadata
24
+ * we need (session id / cwd / first prompt). All three live near the top of
25
+ * claude/rollout transcripts, so the early-stop almost always fires first;
26
+ * this only bounds pathological / corrupt files. Antigravity's flat submit log
27
+ * is read in full (see its own higher cap) so tail entries are never missed. */
28
+ const MAX_LINES_PER_FILE = 5_000;
29
+ function asRecord(v) {
30
+ return v && typeof v === 'object' && !Array.isArray(v) ? v : null;
31
+ }
32
+ /** Stream a JSONL file line by line, invoking `onLine` for each parsed object.
33
+ * Return `true` from `onLine` to stop early (closes the stream). Reading
34
+ * COMPLETE lines — rather than a fixed byte prefix — is deliberate: a single
35
+ * oversized first record (e.g. a 200KiB user prompt) must still be parsed
36
+ * whole to recover its `cwd`, and an append-only log's freshest entries live
37
+ * at the tail. Swallows fs/parse errors (missing file, corrupt line) so a bad
38
+ * transcript degrades to "skipped", never throws. */
39
+ async function forEachJsonLine(path, onLine, maxLines = MAX_LINES_PER_FILE) {
40
+ const stream = createReadStream(path, { encoding: 'utf8' });
41
+ // A missing/unreadable file emits 'error' asynchronously; without a listener
42
+ // that becomes an unhandled error. Absorb it — the for-await below also
43
+ // rejects and is caught, but the listener guarantees no stray crash.
44
+ stream.on('error', () => { });
45
+ const rl = createInterface({ input: stream, crlfDelay: Infinity });
46
+ let n = 0;
47
+ try {
48
+ for await (const raw of rl) {
49
+ const line = raw.trim();
50
+ if (line) {
51
+ let parsed = null;
52
+ try {
53
+ parsed = JSON.parse(line);
54
+ }
55
+ catch { /* corrupt line — skip */ }
56
+ const rec = asRecord(parsed);
57
+ if (rec && onLine(rec) === true)
58
+ break;
59
+ }
60
+ if (++n >= maxLines)
61
+ break;
62
+ }
63
+ }
64
+ catch {
65
+ // missing file / read error — return what we have
66
+ }
67
+ finally {
68
+ rl.close();
69
+ stream.destroy();
70
+ }
71
+ }
72
+ function truncateTitle(text) {
73
+ const norm = text.replace(/\s+/g, ' ').trim();
74
+ if (!norm)
75
+ return '';
76
+ return norm.length > TITLE_MAX ? `${norm.slice(0, TITLE_MAX - 1)}…` : norm;
77
+ }
78
+ /** botmux injects identifiable wrappers into every message it forwards to the
79
+ * CLI: the per-message `<sender type=…>` footer + `<user_message>…</user_message>`
80
+ * envelope, the `<botmux_routing>` block, the legacy `用户发送了:` prefix, or a
81
+ * `[来自 … 的 @mention]` bot handoff. A session whose user turn carries any of
82
+ * these was spawned BY botmux.
83
+ *
84
+ * Per the `/adopt` resume design (option B), such sessions are hidden from the
85
+ * picker — botmux's own sessions are already resumable through their topic or
86
+ * session-closed card, so re-importing them is redundant and confusing. The
87
+ * picker exists to import GENUINELY EXTERNAL sessions (a CLI the user ran
88
+ * standalone in a terminal), whose first prompt is raw text with none of these
89
+ * markers. The session store can't be used for this — it doesn't retain closed
90
+ * sessions — but the transcript wrapper is a reliable, retention-independent
91
+ * signal. */
92
+ // Each pattern matches a STRUCTURAL shape botmux produces — never a bare tag
93
+ // name — so an external session whose prompt merely *discusses* botmux's XML
94
+ // (common in this repo: "explain <botmux_routing>", "why does <sender type=
95
+ // appear") is NOT mis-flagged.
96
+ const BOTMUX_INJECTION_PATTERNS = [
97
+ // The whole prompt IS a botmux envelope — it STARTS with the opening wrapper.
98
+ // botmux wraps every forwarded AND scheduled message this way; an external
99
+ // prompt that merely discusses the tags has them mid-text, not leading. This
100
+ // also catches scheduled-task sessions that carry no trailing <sender> block.
101
+ /^<user_message>[\s\S]*?<\/user_message>/,
102
+ /^用户发送了:\s*\n-{3,}/,
103
+ // Modern envelope: the `</user_message>` close butted up against one of
104
+ // botmux's trailing blocks (claude → <sender>, codex/traex → <session_id>,
105
+ // plus <mentions>/<botmux_reminder>/<botmux_routing>/<available_bots>). A
106
+ // prompt that only mentions "<user_message>" never has this adjacency.
107
+ /<\/user_message>\s*<(?:sender|session_id|mentions|botmux_reminder|botmux_routing|available_bots)\b/i,
108
+ // The per-message footer with a real Lark open_id — bulletproof against a
109
+ // prompt that merely contains the substring "<sender type=".
110
+ /<sender\s+type="(?:user|bot)"\s+open_id="ou_[0-9a-z]{16,}"/i,
111
+ // botmux bot-handoff / quoted-message markers (e.g. antigravity `display`).
112
+ /\[来自[^\]]*?@mention\]|\[用户引用了消息\s*用\s*botmux\s+quoted/,
113
+ // Legacy "用户发送了:---…---" envelope PAIRED with the injected "Session ID:
114
+ // <uuid>" — the combination (not either alone, not anchored at ^) is what's
115
+ // unfakeable, so an optional "你已连接到飞书话题," preamble doesn't defeat it.
116
+ /用户发送了:\s*\n-{3,}[\s\S]*?\n-{3,}[\s\S]*?Session ID:\s*[0-9a-f]{8}-[0-9a-f]{4}-/i,
117
+ ];
118
+ function isBotmuxInjected(text) {
119
+ return BOTMUX_INJECTION_PATTERNS.some((re) => re.test(text));
120
+ }
121
+ /** Recursively collect `*.jsonl` files under `root`, returning the most-recently
122
+ * modified `limit` of them. Bounded depth so a pathological tree can't wedge
123
+ * the scan. `excludeBasenames` drops files whose name (sans `.jsonl`) is in the
124
+ * set BEFORE the limit slice — used by claude-family, where the filename IS the
125
+ * session id, so live sessions are skipped without ever being parsed. */
126
+ async function collectRecentJsonl(root, limit, maxDepth = 4, excludeBasenames) {
127
+ const out = [];
128
+ async function walk(dir, depth) {
129
+ if (depth > maxDepth)
130
+ return;
131
+ let dirents;
132
+ try {
133
+ dirents = await fs.readdir(dir, { withFileTypes: true });
134
+ }
135
+ catch {
136
+ return;
137
+ }
138
+ await Promise.all(dirents.map(async (d) => {
139
+ const full = join(dir, d.name);
140
+ if (d.isDirectory()) {
141
+ await walk(full, depth + 1);
142
+ }
143
+ else if (d.isFile() && d.name.endsWith('.jsonl')) {
144
+ if (excludeBasenames?.has(d.name.slice(0, -'.jsonl'.length)))
145
+ return;
146
+ try {
147
+ const st = await fs.stat(full);
148
+ out.push({ path: full, mtimeMs: st.mtimeMs });
149
+ }
150
+ catch { /* ignore */ }
151
+ }
152
+ }));
153
+ }
154
+ await walk(root, 0);
155
+ return out.sort((a, b) => b.mtimeMs - a.mtimeMs).slice(0, limit);
156
+ }
157
+ // ─── Claude-family JSONL (claude-code, seed) ─────────────────────────────────
158
+ /** Parse one Claude JSONL transcript. The session id is the filename; cwd +
159
+ * first user prompt come from the content (streamed line by line, stopping
160
+ * once both are found). Sidechain / synthetic / slash-command entries are
161
+ * skipped so the title is the user's real first turn. */
162
+ async function parseClaudeTranscript(path, mtimeMs) {
163
+ const cliSessionId = basename(path, '.jsonl');
164
+ if (!cliSessionId)
165
+ return null;
166
+ // Accumulate into an object (see parseRolloutTranscript) so the post-loop
167
+ // guard narrows correctly despite closure mutation.
168
+ const acc = { cwd: null, title: '', botmux: false };
169
+ await forEachJsonLine(path, (rec) => {
170
+ if (rec.isSidechain === true)
171
+ return;
172
+ if (!acc.cwd && typeof rec.cwd === 'string')
173
+ acc.cwd = rec.cwd;
174
+ if (rec.type === 'user') {
175
+ const raw = rawClaudeUserText(rec.message);
176
+ if (raw && isBotmuxInjected(raw)) {
177
+ acc.botmux = true;
178
+ return true;
179
+ } // botmux-origin → drop
180
+ if (!acc.title && raw) {
181
+ const clean = cleanUserPromptForTitle(raw);
182
+ if (clean)
183
+ acc.title = truncateTitle(clean);
184
+ }
185
+ }
186
+ return Boolean(acc.cwd && acc.title); // stop once we have everything
187
+ });
188
+ // Drop botmux-origin sessions and empties (no real user prompt → command-only
189
+ // / aborted — not worth importing).
190
+ if (acc.botmux || !acc.cwd || !acc.title)
191
+ return null;
192
+ return { cliSessionId, cwd: acc.cwd, title: acc.title, lastActivityAt: mtimeMs };
193
+ }
194
+ /** Pull plain user text out of a Claude `message` field (string content or the
195
+ * first text part of array content), trimmed. Returns null for tool-result /
196
+ * non-text messages. No filtering — used both for botmux-origin detection
197
+ * (which must see the raw wrapper) and as the source for the title. */
198
+ function rawClaudeUserText(message) {
199
+ const msg = asRecord(message);
200
+ if (!msg || msg.role !== 'user')
201
+ return null;
202
+ let text = null;
203
+ if (typeof msg.content === 'string') {
204
+ text = msg.content;
205
+ }
206
+ else if (Array.isArray(msg.content)) {
207
+ const part = msg.content.find((p) => asRecord(p)?.type === 'text');
208
+ const t = asRecord(part)?.text;
209
+ if (typeof t === 'string')
210
+ text = t;
211
+ }
212
+ const trimmed = text?.trim();
213
+ return trimmed || null;
214
+ }
215
+ /** Reject slash-command / local-command meta turns (not a meaningful title);
216
+ * returns the text otherwise. */
217
+ function cleanUserPromptForTitle(raw) {
218
+ if (raw.startsWith('<command-') || raw.startsWith('<local-command'))
219
+ return null;
220
+ return raw;
221
+ }
222
+ export async function discoverClaudeFamilySessions(dataDir, limit, exclude) {
223
+ const projectsRoot = join(dataDir, 'projects');
224
+ // The jsonl filename IS the session id, so excluded (live) sessions are
225
+ // dropped here — before any file is parsed — and never count against `limit`.
226
+ const files = await collectRecentJsonl(projectsRoot, limit * 3, 2, exclude);
227
+ const parsed = await Promise.all(files.map((f) => parseClaudeTranscript(f.path, f.mtimeMs)));
228
+ return parsed.filter((s) => s !== null).slice(0, limit);
229
+ }
230
+ // ─── Codex / TRAE rollout (codex, traex) ─────────────────────────────────────
231
+ /** Parse one Codex/TRAE rollout. `session_meta` carries the resume id + cwd;
232
+ * the first `event_msg`/`user_message` carries the user's first prompt (the
233
+ * `response_item` role:user entries include the synthetic
234
+ * <environment_context>/<permissions> preamble, so we prefer user_message).
235
+ * Streamed line by line, stopping once id + cwd + title are found. */
236
+ async function parseRolloutTranscript(path, mtimeMs, exclude) {
237
+ // Accumulate into an object — closure mutation of plain `let` defeats TS's
238
+ // control-flow narrowing at the post-loop guard; object properties keep their
239
+ // declared type.
240
+ const acc = { id: null, cwd: null, title: '', botmux: false };
241
+ let excluded = false;
242
+ await forEachJsonLine(path, (rec) => {
243
+ const payload = asRecord(rec.payload);
244
+ if (rec.type === 'session_meta' && payload) {
245
+ if (typeof payload.id === 'string') {
246
+ acc.id = payload.id;
247
+ // The resume id lives on the very first line; bail immediately on a
248
+ // live session so excluded rollouts cost a single line read.
249
+ if (exclude?.has(payload.id)) {
250
+ excluded = true;
251
+ return true;
252
+ }
253
+ }
254
+ if (typeof payload.cwd === 'string')
255
+ acc.cwd = payload.cwd;
256
+ }
257
+ else if (rec.type === 'event_msg' && payload?.type === 'user_message' && typeof payload.message === 'string') {
258
+ if (isBotmuxInjected(payload.message)) {
259
+ acc.botmux = true;
260
+ return true;
261
+ } // botmux-origin → drop
262
+ if (!acc.title)
263
+ acc.title = truncateTitle(payload.message);
264
+ }
265
+ return Boolean(acc.id && acc.cwd && acc.title);
266
+ });
267
+ if (excluded || acc.botmux || !acc.id || !acc.cwd || !acc.title)
268
+ return null;
269
+ return { cliSessionId: acc.id, cwd: acc.cwd, title: acc.title, lastActivityAt: mtimeMs };
270
+ }
271
+ export async function discoverRolloutSessions(sessionsRoot, limit, exclude) {
272
+ // The resume id is inside the file (not the filename), so we can't pre-filter
273
+ // by name. Instead walk most-recent-first and parse until `limit` non-excluded
274
+ // sessions are collected — excluded ones cost only a first-line read, so a
275
+ // host with many live sessions doesn't starve the picker.
276
+ const files = await collectRecentJsonl(sessionsRoot, Number.MAX_SAFE_INTEGER, 5);
277
+ const out = [];
278
+ for (const f of files) {
279
+ if (out.length >= limit)
280
+ break;
281
+ const s = await parseRolloutTranscript(f.path, f.mtimeMs, exclude);
282
+ if (s)
283
+ out.push(s);
284
+ }
285
+ return out;
286
+ }
287
+ // ─── Antigravity flat history log (antigravity) ──────────────────────────────
288
+ /** Antigravity appends one line per submit: `{display, timestamp, workspace,
289
+ * conversationId}`. This is an append-only log — the freshest conversations
290
+ * live at the TAIL — so we stream the WHOLE file (a flat submit log, not a
291
+ * per-session transcript, so it stays small) rather than a bounded prefix that
292
+ * would hide recent sessions once the file grows. Dedup by conversationId,
293
+ * keeping the latest timestamp; the first display seen for a conversation is
294
+ * its title. */
295
+ export async function discoverAntigravitySessions(historyPath, limit, exclude) {
296
+ const byConversation = new Map();
297
+ const botmuxConversations = new Set(); // conversations with any botmux-injected submit
298
+ // Read the full log (high line cap, no byte prefix) so tail entries are seen.
299
+ await forEachJsonLine(historyPath, (rec) => {
300
+ const conversationId = rec.conversationId;
301
+ const workspace = rec.workspace;
302
+ if (typeof conversationId !== 'string' || !conversationId || typeof workspace !== 'string' || !workspace)
303
+ return;
304
+ const ts = typeof rec.timestamp === 'number' ? rec.timestamp : 0;
305
+ const display = typeof rec.display === 'string' ? rec.display : '';
306
+ // A botmux-injected submit marks the whole conversation as botmux-origin.
307
+ if (isBotmuxInjected(display)) {
308
+ botmuxConversations.add(conversationId);
309
+ return;
310
+ }
311
+ const existing = byConversation.get(conversationId);
312
+ if (!existing) {
313
+ if (!display.trim())
314
+ return; // empty/no-prompt submit — skip
315
+ byConversation.set(conversationId, {
316
+ cliSessionId: conversationId,
317
+ cwd: workspace,
318
+ title: truncateTitle(display),
319
+ lastActivityAt: ts,
320
+ });
321
+ }
322
+ else if (ts > existing.lastActivityAt) {
323
+ existing.lastActivityAt = ts;
324
+ }
325
+ }, 1_000_000);
326
+ return [...byConversation.values()]
327
+ .filter((s) => !exclude?.has(s.cliSessionId) && !botmuxConversations.has(s.cliSessionId))
328
+ .sort((a, b) => b.lastActivityAt - a.lastActivityAt)
329
+ .slice(0, limit);
330
+ }
331
+ //# sourceMappingURL=resumable-session-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resumable-session-discovery.js","sourceRoot":"","sources":["../../src/services/resumable-session-discovery.ts"],"names":[],"mappings":"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"}
@@ -39,4 +39,17 @@ export declare function findActiveChatScopeSessionsByChat(chatId: string): Sessi
39
39
  * which bot owns this process — used by the restart-report DM after a restart.
40
40
  */
41
41
  export declare function countActiveSessionsOnDisk(dataDir?: string): number;
42
+ /**
43
+ * Collect every CLI session identity botmux has ever recorded — across ALL bot
44
+ * store files, ANY status (active or closed). Returns both each session's
45
+ * botmux `sessionId` (which, for claude-family, IS the on-disk jsonl filename
46
+ * since botmux spawns with `--session-id <id>`) and its `cliSessionId` (the
47
+ * CLI-native id after any resume/rotation, e.g. a codex/traex rollout id).
48
+ *
49
+ * Used by `/adopt`'s resume-import discovery to hide sessions botmux already
50
+ * manages — live OR closed — so the picker surfaces only genuinely external
51
+ * sessions (a CLI the user ran standalone). Closed botmux sessions remain
52
+ * resumable via their own session-closed cards.
53
+ */
54
+ export declare function collectBotmuxSessionIdentities(dataDir?: string): Set<string>;
42
55
  //# sourceMappingURL=session-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../src/services/session-store.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAM3C;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAIzC;AAsFD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,OAAO,CAevH;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAGjE;AA2BD,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAUpD;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAO5E;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAIpD;AAED,wBAAgB,YAAY,IAAI,OAAO,EAAE,CAGxC;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,EAAE,CAEzE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CAE3E;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,GAAE,MAA+B,GAAG,MAAM,CAY1F"}
1
+ {"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../src/services/session-store.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAM3C;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAIzC;AAsFD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,OAAO,CAevH;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAGjE;AA2BD,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAUpD;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAO5E;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAIpD;AAED,wBAAgB,YAAY,IAAI,OAAO,EAAE,CAGxC;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,EAAE,CAEzE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CAE3E;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,GAAE,MAA+B,GAAG,MAAM,CAY1F;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,GAAE,MAA+B,GAAG,GAAG,CAAC,MAAM,CAAC,CAqBpG"}
@@ -234,6 +234,50 @@ export function countActiveSessionsOnDisk(dataDir = config.session.dataDir) {
234
234
  catch { /* missing dir → 0 */ }
235
235
  return n;
236
236
  }
237
+ /**
238
+ * Collect every CLI session identity botmux has ever recorded — across ALL bot
239
+ * store files, ANY status (active or closed). Returns both each session's
240
+ * botmux `sessionId` (which, for claude-family, IS the on-disk jsonl filename
241
+ * since botmux spawns with `--session-id <id>`) and its `cliSessionId` (the
242
+ * CLI-native id after any resume/rotation, e.g. a codex/traex rollout id).
243
+ *
244
+ * Used by `/adopt`'s resume-import discovery to hide sessions botmux already
245
+ * manages — live OR closed — so the picker surfaces only genuinely external
246
+ * sessions (a CLI the user ran standalone). Closed botmux sessions remain
247
+ * resumable via their own session-closed cards.
248
+ */
249
+ export function collectBotmuxSessionIdentities(dataDir = config.session.dataDir) {
250
+ const ids = new Set();
251
+ const add = (s) => {
252
+ if (!s)
253
+ return;
254
+ if (s.sessionId)
255
+ ids.add(s.sessionId);
256
+ if (s.cliSessionId)
257
+ ids.add(s.cliSessionId);
258
+ };
259
+ // In-memory first (freshest — covers ids not yet flushed to disk).
260
+ load();
261
+ for (const s of sessions.values())
262
+ add(s);
263
+ // Then every bot's persisted store file (other daemons own their own files).
264
+ try {
265
+ for (const file of readdirSync(dataDir)) {
266
+ if (!file.startsWith('sessions') || !file.endsWith('.json'))
267
+ continue;
268
+ try {
269
+ const data = JSON.parse(readFileSync(join(dataDir, file), 'utf-8'));
270
+ for (const s of Object.values(data))
271
+ add(s);
272
+ }
273
+ catch {
274
+ continue;
275
+ }
276
+ }
277
+ }
278
+ catch { /* missing dir → in-memory only */ }
279
+ return ids;
280
+ }
237
281
  function findActiveSessionsMatching(predicate) {
238
282
  load();
239
283
  const matches = [];
@@ -1 +1 @@
1
- {"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/services/session-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/services/session-store.ts"],"names":[],"mappings":"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"}