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.
- package/README.en.md +3 -2
- package/README.md +3 -2
- package/dist/adapters/cli/antigravity.d.ts.map +1 -1
- package/dist/adapters/cli/antigravity.js +7 -0
- package/dist/adapters/cli/antigravity.js.map +1 -1
- package/dist/adapters/cli/claude-code.d.ts.map +1 -1
- package/dist/adapters/cli/claude-code.js +7 -0
- package/dist/adapters/cli/claude-code.js.map +1 -1
- package/dist/adapters/cli/codex.d.ts.map +1 -1
- package/dist/adapters/cli/codex.js +7 -1
- package/dist/adapters/cli/codex.js.map +1 -1
- package/dist/adapters/cli/traex.d.ts.map +1 -1
- package/dist/adapters/cli/traex.js +7 -1
- package/dist/adapters/cli/traex.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +29 -0
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/core/command-handler.d.ts +10 -0
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +75 -6
- package/dist/core/command-handler.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +7 -2
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +7 -2
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/card-builder.d.ts +14 -4
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +59 -18
- 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 +49 -6
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/grant-command.d.ts +8 -2
- package/dist/im/lark/grant-command.d.ts.map +1 -1
- package/dist/im/lark/grant-command.js +66 -14
- package/dist/im/lark/grant-command.js.map +1 -1
- package/dist/services/resumable-session-discovery.d.ts +12 -0
- package/dist/services/resumable-session-discovery.d.ts.map +1 -0
- package/dist/services/resumable-session-discovery.js +331 -0
- package/dist/services/resumable-session-discovery.js.map +1 -0
- package/dist/services/session-store.d.ts +13 -0
- package/dist/services/session-store.d.ts.map +1 -1
- package/dist/services/session-store.js +44 -0
- package/dist/services/session-store.js.map +1 -1
- package/dist/workflows/events/schema.d.ts +560 -560
- 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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"}
|