autodev-cli 1.4.109 → 1.4.110

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.
@@ -0,0 +1,25 @@
1
+ export interface CopilotSessionInfo {
2
+ id: string;
3
+ name: string;
4
+ cwd: string;
5
+ updated: number;
6
+ }
7
+ /** All Copilot sessions on this machine (newest first). `updated` is epoch ms
8
+ * from events.jsonl mtime (falls back to workspace.yaml / the folder mtime). */
9
+ export declare function listAllCopilotSessions(): CopilotSessionInfo[];
10
+ /** Copilot sessions whose cwd matches `root` (for per-workspace collectSessions). */
11
+ export declare function listCopilotSessions(root: string): Array<{
12
+ id: string;
13
+ title: string;
14
+ updated: number;
15
+ }>;
16
+ export interface TranscriptMsg {
17
+ role: 'user' | 'assistant' | 'system' | 'tool';
18
+ text: string;
19
+ ts?: number;
20
+ }
21
+ /** Parse a copilot session's events.jsonl into a normalized message array.
22
+ * Renders user/assistant prose, tool calls (assistant.message.toolRequests +
23
+ * tool.execution_complete results) and the system prompt (heavily truncated).
24
+ * Returns at most `limit` messages (the tail). */
25
+ export declare function readCopilotTranscript(id: string, limit?: number): TranscriptMsg[];
@@ -0,0 +1,214 @@
1
+ "use strict";
2
+ // ---------------------------------------------------------------------------
3
+ // copilotSessions — list + read GitHub Copilot CLI sessions.
4
+ //
5
+ // Copilot keeps one directory per session at
6
+ // ~/.copilot/session-state/<uuid>/
7
+ // workspace.yaml → id, cwd, name, created_at/updated_at (flat scalars)
8
+ // events.jsonl → one JSON event per line (session.start, user.message,
9
+ // assistant.message, tool.execution_start/_complete, …)
10
+ // ~/.copilot/session-store.db (SQLite index — NOT needed for discovery)
11
+ //
12
+ // Pure filesystem — no SQLite, no yaml dependency (a tiny line scan parses the
13
+ // handful of top-level `key: value` scalars we need). Read-only; every store
14
+ // miss degrades to [] and no path ever throws.
15
+ // ---------------------------------------------------------------------------
16
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ var desc = Object.getOwnPropertyDescriptor(m, k);
19
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
20
+ desc = { enumerable: true, get: function() { return m[k]; } };
21
+ }
22
+ Object.defineProperty(o, k2, desc);
23
+ }) : (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ o[k2] = m[k];
26
+ }));
27
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
28
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
29
+ }) : function(o, v) {
30
+ o["default"] = v;
31
+ });
32
+ var __importStar = (this && this.__importStar) || (function () {
33
+ var ownKeys = function(o) {
34
+ ownKeys = Object.getOwnPropertyNames || function (o) {
35
+ var ar = [];
36
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
37
+ return ar;
38
+ };
39
+ return ownKeys(o);
40
+ };
41
+ return function (mod) {
42
+ if (mod && mod.__esModule) return mod;
43
+ var result = {};
44
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
45
+ __setModuleDefault(result, mod);
46
+ return result;
47
+ };
48
+ })();
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ exports.listAllCopilotSessions = listAllCopilotSessions;
51
+ exports.listCopilotSessions = listCopilotSessions;
52
+ exports.readCopilotTranscript = readCopilotTranscript;
53
+ const fs = __importStar(require("fs"));
54
+ const path = __importStar(require("path"));
55
+ const layout_1 = require("../agentBackup/layout");
56
+ /** Normalise a path for comparison (absolute, no trailing slash). */
57
+ function norm(p) {
58
+ try {
59
+ return path.resolve(p).replace(/\/+$/, '');
60
+ }
61
+ catch {
62
+ return p;
63
+ }
64
+ }
65
+ /** Scan the flat top-level `key: value` scalars of a workspace.yaml. Only the
66
+ * first occurrence of each key is kept; quotes are stripped. Good enough for
67
+ * copilot's file (a flat map of scalars) without pulling in a YAML parser. */
68
+ function readWorkspaceYaml(file) {
69
+ const out = {};
70
+ let text = '';
71
+ try {
72
+ text = fs.readFileSync(file, 'utf8');
73
+ }
74
+ catch {
75
+ return out;
76
+ }
77
+ for (const line of text.split('\n')) {
78
+ const m = /^([A-Za-z0-9_]+):\s*(.*)$/.exec(line);
79
+ if (!m) {
80
+ continue;
81
+ }
82
+ const key = m[1];
83
+ if (key in out) {
84
+ continue;
85
+ }
86
+ let val = m[2].trim();
87
+ if ((val.startsWith('"') && val.endsWith('"')) || (val.startsWith("'") && val.endsWith("'"))) {
88
+ val = val.slice(1, -1);
89
+ }
90
+ out[key] = val;
91
+ }
92
+ return out;
93
+ }
94
+ /** All Copilot sessions on this machine (newest first). `updated` is epoch ms
95
+ * from events.jsonl mtime (falls back to workspace.yaml / the folder mtime). */
96
+ function listAllCopilotSessions() {
97
+ const stateDir = (0, layout_1.copilotSessionStateDir)();
98
+ let uuids = [];
99
+ try {
100
+ uuids = fs.readdirSync(stateDir);
101
+ }
102
+ catch {
103
+ return [];
104
+ }
105
+ const out = [];
106
+ for (const uuid of uuids) {
107
+ const dir = path.join(stateDir, uuid);
108
+ try {
109
+ if (!fs.statSync(dir).isDirectory()) {
110
+ continue;
111
+ }
112
+ }
113
+ catch {
114
+ continue;
115
+ }
116
+ const meta = readWorkspaceYaml(path.join(dir, 'workspace.yaml'));
117
+ const cwd = meta['cwd'] || meta['directory'] || '';
118
+ let updated = 0;
119
+ for (const f of ['events.jsonl', 'workspace.yaml']) {
120
+ try {
121
+ updated = Math.max(updated, fs.statSync(path.join(dir, f)).mtimeMs);
122
+ }
123
+ catch { /* skip */ }
124
+ }
125
+ if (!updated) {
126
+ try {
127
+ updated = fs.statSync(dir).mtimeMs;
128
+ }
129
+ catch { /* keep 0 */ }
130
+ }
131
+ out.push({ id: uuid, name: (meta['name'] || '').trim() || '(untitled)', cwd, updated });
132
+ }
133
+ return out.sort((a, b) => b.updated - a.updated);
134
+ }
135
+ /** Copilot sessions whose cwd matches `root` (for per-workspace collectSessions). */
136
+ function listCopilotSessions(root) {
137
+ const target = norm(root);
138
+ return listAllCopilotSessions()
139
+ .filter(s => s.cwd && norm(s.cwd) === target)
140
+ .map(s => ({ id: s.id, title: s.name, updated: s.updated }));
141
+ }
142
+ function ellipsis(s, max) {
143
+ return s.length > max ? s.slice(0, max) + '…' : s;
144
+ }
145
+ /** Parse a copilot session's events.jsonl into a normalized message array.
146
+ * Renders user/assistant prose, tool calls (assistant.message.toolRequests +
147
+ * tool.execution_complete results) and the system prompt (heavily truncated).
148
+ * Returns at most `limit` messages (the tail). */
149
+ function readCopilotTranscript(id, limit = 400) {
150
+ const file = path.join((0, layout_1.copilotSessionStateDir)(), id, 'events.jsonl');
151
+ let text = '';
152
+ try {
153
+ text = fs.readFileSync(file, 'utf8');
154
+ }
155
+ catch {
156
+ return [];
157
+ }
158
+ const msgs = [];
159
+ for (const line of text.split('\n')) {
160
+ const s = line.trim();
161
+ if (!s) {
162
+ continue;
163
+ }
164
+ let o;
165
+ try {
166
+ o = JSON.parse(s);
167
+ }
168
+ catch {
169
+ continue;
170
+ }
171
+ const type = String(o['type'] ?? '');
172
+ const data = (o['data'] ?? {});
173
+ const ts = o['timestamp'] ? Date.parse(String(o['timestamp'])) : undefined;
174
+ if (type === 'user.message') {
175
+ const c = String(data['content'] ?? '').trim();
176
+ if (c) {
177
+ msgs.push({ role: 'user', text: c, ts });
178
+ }
179
+ }
180
+ else if (type === 'assistant.message') {
181
+ const c = String(data['content'] ?? '').trim();
182
+ if (c) {
183
+ msgs.push({ role: 'assistant', text: c, ts });
184
+ }
185
+ const reqs = data['toolRequests'];
186
+ if (Array.isArray(reqs)) {
187
+ for (const r of reqs) {
188
+ const name = String(r['name'] ?? '');
189
+ if (!name) {
190
+ continue;
191
+ }
192
+ const args = r['arguments'] != null ? ellipsis(JSON.stringify(r['arguments']), 200) : '';
193
+ msgs.push({ role: 'tool', text: `🔧 ${name}(${args})`, ts });
194
+ }
195
+ }
196
+ }
197
+ else if (type === 'tool.execution_complete') {
198
+ const result = (data['result'] ?? {});
199
+ const content = result['content'] ?? result['detailedContent'];
200
+ const txt = typeof content === 'string' ? content : (content == null ? '' : JSON.stringify(content));
201
+ if (txt.trim()) {
202
+ msgs.push({ role: 'tool', text: `↳ ${ellipsis(txt.trim(), 400)}`, ts });
203
+ }
204
+ }
205
+ else if (type === 'system.message') {
206
+ const c = String(data['content'] ?? '').trim();
207
+ if (c) {
208
+ msgs.push({ role: 'system', text: ellipsis(c, 200), ts });
209
+ }
210
+ }
211
+ }
212
+ return msgs.slice(-limit);
213
+ }
214
+ //# sourceMappingURL=copilotSessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilotSessions.js","sourceRoot":"","sources":["../../src/providers/copilotSessions.ts"],"names":[],"mappings":"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"}
@@ -4,3 +4,24 @@ export declare function listGrokSessions(root: string): Array<{
4
4
  title: string;
5
5
  updated: number;
6
6
  }>;
7
+ /** ALL grok sessions across every workspace (newest first), carrying each row's
8
+ * own cwd. Same store as {@link listGrokSessions} but unfiltered — for global
9
+ * cross-workspace discovery. `updated` is epoch ms. */
10
+ export declare function listAllGrokSessions(): Array<{
11
+ id: string;
12
+ title: string;
13
+ updated: number;
14
+ cwd: string;
15
+ }>;
16
+ export interface TranscriptMsg {
17
+ role: 'user' | 'assistant' | 'system' | 'tool';
18
+ text: string;
19
+ ts?: number;
20
+ }
21
+ /**
22
+ * Read a grok session's clean chat_history.jsonl into a normalized message
23
+ * array. Each line is {type|role, content, tool_calls?, tool_call_id?}. Renders
24
+ * user/assistant/system prose, assistant tool_calls, and tool_result output.
25
+ * Returns at most `limit` messages (the tail). Read-only; [] on any miss.
26
+ */
27
+ export declare function readGrokTranscript(sessionId: string, cwd?: string, limit?: number): TranscriptMsg[];
@@ -45,6 +45,8 @@ var __importStar = (this && this.__importStar) || (function () {
45
45
  })();
46
46
  Object.defineProperty(exports, "__esModule", { value: true });
47
47
  exports.listGrokSessions = listGrokSessions;
48
+ exports.listAllGrokSessions = listAllGrokSessions;
49
+ exports.readGrokTranscript = readGrokTranscript;
48
50
  const fs = __importStar(require("fs"));
49
51
  const os = __importStar(require("os"));
50
52
  const path = __importStar(require("path"));
@@ -93,4 +95,152 @@ function listGrokSessions(root) {
93
95
  catch { /* ignore */ }
94
96
  }
95
97
  }
98
+ /** ALL grok sessions across every workspace (newest first), carrying each row's
99
+ * own cwd. Same store as {@link listGrokSessions} but unfiltered — for global
100
+ * cross-workspace discovery. `updated` is epoch ms. */
101
+ function listAllGrokSessions() {
102
+ const dbFile = grokSessionsDbPath();
103
+ if (!fs.existsSync(dbFile)) {
104
+ return [];
105
+ }
106
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
107
+ let db;
108
+ try {
109
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
110
+ const { DatabaseSync } = require('node:sqlite');
111
+ db = new DatabaseSync(dbFile, { readOnly: true });
112
+ return db.prepare('SELECT session_id, title, updated_at, cwd FROM session_docs').all()
113
+ .map(r => ({
114
+ id: String(r.session_id),
115
+ title: String(r.title ?? '').trim(),
116
+ updated: Number(r.updated_at ?? 0) * 1000, // grok stores seconds → ms
117
+ cwd: String(r.cwd ?? ''),
118
+ }))
119
+ .sort((a, b) => b.updated - a.updated);
120
+ }
121
+ catch {
122
+ return [];
123
+ }
124
+ finally {
125
+ try {
126
+ db?.close();
127
+ }
128
+ catch { /* ignore */ }
129
+ }
130
+ }
131
+ /** Path to grok's clean structured transcript for a session under a given cwd. */
132
+ function grokChatHistoryPath(cwd, sessionId) {
133
+ const base = process.env['GROK_HOME'] || path.join(os.homedir(), '.grok');
134
+ return path.join(base, 'sessions', encodeURIComponent(cwd), sessionId, 'chat_history.jsonl');
135
+ }
136
+ /** Resolve a session's chat_history.jsonl. If `cwd` is unknown, look the cwd up
137
+ * in the session index, then fall back to scanning every workspace folder. */
138
+ function resolveGrokChatHistory(sessionId, cwd) {
139
+ if (cwd) {
140
+ const p = grokChatHistoryPath(cwd, sessionId);
141
+ if (fs.existsSync(p)) {
142
+ return p;
143
+ }
144
+ }
145
+ const known = listAllGrokSessions().find(s => s.id === sessionId)?.cwd;
146
+ if (known) {
147
+ const p = grokChatHistoryPath(known, sessionId);
148
+ if (fs.existsSync(p)) {
149
+ return p;
150
+ }
151
+ }
152
+ // Last resort: scan the per-workspace session folders for a matching id.
153
+ try {
154
+ const base = process.env['GROK_HOME'] || path.join(os.homedir(), '.grok');
155
+ const sessRoot = path.join(base, 'sessions');
156
+ for (const enc of fs.readdirSync(sessRoot)) {
157
+ const p = path.join(sessRoot, enc, sessionId, 'chat_history.jsonl');
158
+ if (fs.existsSync(p)) {
159
+ return p;
160
+ }
161
+ }
162
+ }
163
+ catch { /* none */ }
164
+ return undefined;
165
+ }
166
+ /**
167
+ * Read a grok session's clean chat_history.jsonl into a normalized message
168
+ * array. Each line is {type|role, content, tool_calls?, tool_call_id?}. Renders
169
+ * user/assistant/system prose, assistant tool_calls, and tool_result output.
170
+ * Returns at most `limit` messages (the tail). Read-only; [] on any miss.
171
+ */
172
+ function readGrokTranscript(sessionId, cwd, limit = 400) {
173
+ const file = resolveGrokChatHistory(sessionId, cwd);
174
+ if (!file) {
175
+ return [];
176
+ }
177
+ let text = '';
178
+ try {
179
+ text = fs.readFileSync(file, 'utf8');
180
+ }
181
+ catch {
182
+ return [];
183
+ }
184
+ const trunc = (s, max) => (s.length > max ? s.slice(0, max) + '…' : s);
185
+ // grok content is either a plain string or an array of {type:'text',text} blocks.
186
+ const extract = (c) => {
187
+ if (typeof c === 'string') {
188
+ return c;
189
+ }
190
+ if (Array.isArray(c)) {
191
+ return c
192
+ .map(b => (b && b['type'] === 'text' ? String(b['text'] ?? '') : ''))
193
+ .filter(Boolean).join('\n');
194
+ }
195
+ return c == null ? '' : JSON.stringify(c);
196
+ };
197
+ const msgs = [];
198
+ for (const line of text.split('\n')) {
199
+ const s = line.trim();
200
+ if (!s) {
201
+ continue;
202
+ }
203
+ let o;
204
+ try {
205
+ o = JSON.parse(s);
206
+ }
207
+ catch {
208
+ continue;
209
+ }
210
+ const kind = o.type || o.role;
211
+ const content = extract(o.content);
212
+ if (kind === 'user') {
213
+ if (content.trim()) {
214
+ msgs.push({ role: 'user', text: content.trim() });
215
+ }
216
+ }
217
+ else if (kind === 'assistant') {
218
+ if (content.trim()) {
219
+ msgs.push({ role: 'assistant', text: content.trim() });
220
+ }
221
+ if (Array.isArray(o.tool_calls)) {
222
+ for (const tc of o.tool_calls) {
223
+ const name = (tc?.name || '').trim();
224
+ if (!name) {
225
+ continue;
226
+ }
227
+ const args = tc?.arguments ? trunc(String(tc.arguments), 200) : '';
228
+ msgs.push({ role: 'tool', text: `🔧 ${name}(${args})` });
229
+ }
230
+ }
231
+ }
232
+ else if (kind === 'tool_result') {
233
+ if (content.trim()) {
234
+ msgs.push({ role: 'tool', text: `↳ ${trunc(content.trim(), 400)}` });
235
+ }
236
+ }
237
+ else if (kind === 'system') {
238
+ if (content.trim()) {
239
+ msgs.push({ role: 'system', text: trunc(content.trim(), 200) });
240
+ }
241
+ }
242
+ // 'reasoning' records are intentionally skipped (internal chain-of-thought).
243
+ }
244
+ return msgs.slice(-limit);
245
+ }
96
246
  //# sourceMappingURL=grokSessions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"grokSessions.js","sourceRoot":"","sources":["../../src/providers/grokSessions.ts"],"names":[],"mappings":";AAAA,8EAA8E;AAC9E,wEAAwE;AACxE,EAAE;AACF,8CAA8C;AAC9C,kEAAkE;AAClE,8DAA8D;AAC9D,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,qDAAqD;AACrD,8EAA8E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmB9E,4CAmBC;AApCD,uCAAyB;AACzB,uCAAyB;AACzB,2CAA6B;AAE7B,SAAS,kBAAkB;IACzB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,uBAAuB,CAAC,CAAC;AAC9D,CAAC;AAED,qEAAqE;AACrE,SAAS,IAAI,CAAC,CAAS;IACrB,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,CAAC,CAAC;IAAC,CAAC;AACzE,CAAC;AAID,gFAAgF;AAChF,SAAgB,gBAAgB,CAAC,IAAY;IAC3C,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;IAC1C,8DAA8D;IAC9D,IAAI,EAAO,CAAC;IACZ,IAAI,CAAC;QACH,8DAA8D;QAC9D,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;QAChD,EAAE,GAAG,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAQ,EAAE,CAAC,OAAO,CAAC,6DAA6D,CAAC,CAAC,GAAG,EAAuB;aACzG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC;aACjD,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACT,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;YACxB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YACnC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,2BAA2B;SACvE,CAAC,CAAC;aACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;YAAS,CAAC;QAAC,IAAI,CAAC;YAAC,EAAE,EAAE,KAAK,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAAC,CAAC;AAChF,CAAC"}
1
+ {"version":3,"file":"grokSessions.js","sourceRoot":"","sources":["../../src/providers/grokSessions.ts"],"names":[],"mappings":"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"}
package/out/sessions.js CHANGED
@@ -9,6 +9,7 @@ exports.collectSessions = collectSessions;
9
9
  const claudeCliProvider_1 = require("./providers/claudeCliProvider");
10
10
  const opencodeDb_1 = require("./agentBackup/opencodeDb");
11
11
  const grokSessions_1 = require("./providers/grokSessions");
12
+ const copilotSessions_1 = require("./providers/copilotSessions");
12
13
  const settingsLoader_1 = require("./core/settingsLoader");
13
14
  /** List sessions for a workspace. If `provider` is omitted, infer the family
14
15
  * from settings and include claude + opencode (the inspectable stores). */
@@ -19,6 +20,7 @@ function collectSessions(root, provider) {
19
20
  const wantClaude = fam.startsWith('claude') || !provider;
20
21
  const wantOpencode = fam.startsWith('opencode') || !provider;
21
22
  const wantGrok = fam.startsWith('grok') || !provider;
23
+ const wantCopilot = fam.startsWith('copilot') || !provider;
22
24
  if (wantClaude) {
23
25
  for (const s of (0, claudeCliProvider_1.listClaudeSessions)(root)) {
24
26
  out.push({ provider: 'claude', id: s.id, name: (0, claudeCliProvider_1.getClaudeSessionDisplay)(s.id) || '(untitled)', updated: s.mtime });
@@ -34,6 +36,11 @@ function collectSessions(root, provider) {
34
36
  out.push({ provider: 'grok', id: s.id, name: s.title || '(untitled)', updated: s.updated });
35
37
  }
36
38
  }
39
+ if (wantCopilot) {
40
+ for (const s of (0, copilotSessions_1.listCopilotSessions)(root)) {
41
+ out.push({ provider: 'copilot', id: s.id, name: s.title || '(untitled)', updated: s.updated });
42
+ }
43
+ }
37
44
  return out.sort((a, b) => b.updated - a.updated);
38
45
  }
39
46
  //# sourceMappingURL=sessions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":";;AAqBA,0CAyBC;AA9CD,8EAA8E;AAC9E,8EAA8E;AAC9E,0EAA0E;AAC1E,0EAA0E;AAC1E,8EAA8E;AAC9E,qEAA4F;AAC5F,yDAAwE;AACxE,2DAA4D;AAC5D,0DAA4D;AAW5D;4EAC4E;AAC5E,SAAgB,eAAe,CAAC,IAAY,EAAE,QAAqB;IACjE,MAAM,QAAQ,GAAG,IAAA,oCAAmB,EAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,IAAI,YAAY,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAkB,EAAE,CAAC;IAE9B,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;IACzD,MAAM,YAAY,GAAG,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC7D,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;IAErD,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,IAAI,IAAA,sCAAkB,EAAC,IAAI,CAAC,EAAE,CAAC;YACzC,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,IAAA,2CAAuB,EAAC,CAAC,CAAC,EAAE,CAAC,IAAI,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACpH,CAAC;IACH,CAAC;IACD,IAAI,YAAY,EAAE,CAAC;QACjB,KAAK,MAAM,CAAC,IAAI,IAAA,yCAA4B,EAAC,IAAI,CAAC,EAAE,CAAC;YACnD,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,IAAI,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,MAAM,CAAC,IAAI,IAAA,+BAAgB,EAAC,IAAI,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,IAAI,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":";;AAsBA,0CA+BC;AArDD,8EAA8E;AAC9E,8EAA8E;AAC9E,0EAA0E;AAC1E,0EAA0E;AAC1E,8EAA8E;AAC9E,qEAA4F;AAC5F,yDAAwE;AACxE,2DAA4D;AAC5D,iEAAkE;AAClE,0DAA4D;AAW5D;4EAC4E;AAC5E,SAAgB,eAAe,CAAC,IAAY,EAAE,QAAqB;IACjE,MAAM,QAAQ,GAAG,IAAA,oCAAmB,EAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,IAAI,YAAY,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAkB,EAAE,CAAC;IAE9B,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;IACzD,MAAM,YAAY,GAAG,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC7D,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;IACrD,MAAM,WAAW,GAAG,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;IAE3D,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,IAAI,IAAA,sCAAkB,EAAC,IAAI,CAAC,EAAE,CAAC;YACzC,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,IAAA,2CAAuB,EAAC,CAAC,CAAC,EAAE,CAAC,IAAI,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACpH,CAAC;IACH,CAAC;IACD,IAAI,YAAY,EAAE,CAAC;QACjB,KAAK,MAAM,CAAC,IAAI,IAAA,yCAA4B,EAAC,IAAI,CAAC,EAAE,CAAC;YACnD,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,IAAI,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,MAAM,CAAC,IAAI,IAAA,+BAAgB,EAAC,IAAI,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,IAAI,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IACD,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC,IAAI,IAAA,qCAAmB,EAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,IAAI,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,32 @@
1
+ /** A provider family for global session discovery. */
2
+ export type SessionProvider = 'claude' | 'grok' | 'opencode' | 'copilot';
3
+ /** Normalized cross-provider session descriptor. `updated` is epoch ms. */
4
+ export interface GlobalSession {
5
+ provider: SessionProvider;
6
+ id: string;
7
+ name: string;
8
+ cwd: string;
9
+ updated: number;
10
+ file?: string;
11
+ msgs?: number;
12
+ }
13
+ /** Normalized transcript message. */
14
+ export interface SessionMsg {
15
+ role: 'user' | 'assistant' | 'system' | 'tool';
16
+ text: string;
17
+ ts?: number;
18
+ }
19
+ /** Map a `--provider` family string onto a canonical SessionProvider, or
20
+ * undefined for "all". Accepts the fine-grained ids too (grok-tui → grok). */
21
+ export declare function normalizeSessionProvider(p?: string): SessionProvider | undefined;
22
+ /** List sessions across ALL workspaces for every provider (or one family when
23
+ * `provider` is given), newest first. */
24
+ export declare function collectAllSessions(provider?: SessionProvider): GlobalSession[];
25
+ /** Read a session's transcript as a normalized message array. `file`/`cwd` are
26
+ * optional hints that let claude/grok resolve the store faster. Capped at
27
+ * `limit` (default 400) messages. */
28
+ export declare function readSessionTranscript(provider: SessionProvider, id: string, opts?: {
29
+ file?: string;
30
+ cwd?: string;
31
+ limit?: number;
32
+ }): SessionMsg[];
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ // ---------------------------------------------------------------------------
3
+ // Global (cross-workspace) session discovery + transcript reading across ALL
4
+ // providers (claude, grok, opencode, copilot). Unlike collectSessions() — which
5
+ // is scoped to one workspace root — this surfaces every session on the machine
6
+ // with its own cwd, so a UI (the autodev-app Sessions tab) can list and read
7
+ // them regardless of where they were started. Single source of truth: the app
8
+ // shells to `autodev sessions --all --json` and `autodev session-show`.
9
+ //
10
+ // Read-only and resilient: any missing store degrades to []; nothing throws.
11
+ // ---------------------------------------------------------------------------
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.normalizeSessionProvider = normalizeSessionProvider;
14
+ exports.collectAllSessions = collectAllSessions;
15
+ exports.readSessionTranscript = readSessionTranscript;
16
+ const claudeCliProvider_1 = require("./providers/claudeCliProvider");
17
+ const grokSessions_1 = require("./providers/grokSessions");
18
+ const opencodeDb_1 = require("./agentBackup/opencodeDb");
19
+ const copilotSessions_1 = require("./providers/copilotSessions");
20
+ /** Map a `--provider` family string onto a canonical SessionProvider, or
21
+ * undefined for "all". Accepts the fine-grained ids too (grok-tui → grok). */
22
+ function normalizeSessionProvider(p) {
23
+ if (!p) {
24
+ return undefined;
25
+ }
26
+ const s = p.toLowerCase();
27
+ if (s.startsWith('claude')) {
28
+ return 'claude';
29
+ }
30
+ if (s.startsWith('grok')) {
31
+ return 'grok';
32
+ }
33
+ if (s.startsWith('opencode')) {
34
+ return 'opencode';
35
+ }
36
+ if (s.startsWith('copilot')) {
37
+ return 'copilot';
38
+ }
39
+ return undefined;
40
+ }
41
+ /** List sessions across ALL workspaces for every provider (or one family when
42
+ * `provider` is given), newest first. */
43
+ function collectAllSessions(provider) {
44
+ const out = [];
45
+ const want = (p) => !provider || provider === p;
46
+ if (want('claude')) {
47
+ for (const s of (0, claudeCliProvider_1.listAllClaudeSessions)()) {
48
+ out.push({ provider: 'claude', id: s.id, name: s.name, cwd: s.cwd, updated: s.updated, file: s.file, msgs: s.msgs });
49
+ }
50
+ }
51
+ if (want('grok')) {
52
+ for (const s of (0, grokSessions_1.listAllGrokSessions)()) {
53
+ out.push({ provider: 'grok', id: s.id, name: s.title || '(untitled)', cwd: s.cwd, updated: s.updated });
54
+ }
55
+ }
56
+ if (want('opencode')) {
57
+ for (const s of (0, opencodeDb_1.listAllOpenCodeSessions)()) {
58
+ out.push({ provider: 'opencode', id: s.id, name: s.title || '(untitled)', cwd: s.cwd, updated: s.updated });
59
+ }
60
+ }
61
+ if (want('copilot')) {
62
+ for (const s of (0, copilotSessions_1.listAllCopilotSessions)()) {
63
+ out.push({ provider: 'copilot', id: s.id, name: s.name, cwd: s.cwd, updated: s.updated });
64
+ }
65
+ }
66
+ return out.sort((a, b) => b.updated - a.updated);
67
+ }
68
+ /** Read a session's transcript as a normalized message array. `file`/`cwd` are
69
+ * optional hints that let claude/grok resolve the store faster. Capped at
70
+ * `limit` (default 400) messages. */
71
+ function readSessionTranscript(provider, id, opts = {}) {
72
+ const limit = opts.limit ?? 400;
73
+ switch (provider) {
74
+ case 'claude': return (0, claudeCliProvider_1.readClaudeTranscript)(id, opts.file, limit);
75
+ case 'grok': return (0, grokSessions_1.readGrokTranscript)(id, opts.cwd, limit);
76
+ case 'opencode': return (0, opencodeDb_1.readOpenCodeTranscript)(id, limit);
77
+ case 'copilot': return (0, copilotSessions_1.readCopilotTranscript)(id, limit);
78
+ default: return [];
79
+ }
80
+ }
81
+ //# sourceMappingURL=sessionsGlobal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionsGlobal.js","sourceRoot":"","sources":["../src/sessionsGlobal.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "autodev-cli",
3
- "version": "1.4.109",
3
+ "version": "1.4.110",
4
4
  "description": "AutoAIDev CLI — autonomous AI task loop with VS Code / Cursor launcher",
5
5
  "license": "MIT",
6
6
  "bin": {
@@ -30,7 +30,7 @@
30
30
  "dev": "tsc -p ./ --watch",
31
31
  "prepublishOnly": "npm run build",
32
32
  "start": "node bin/autodev.js",
33
- "test": "node test/smoke.mjs && node test/liveNarration.smoke.mjs && node test/liveNarration.edge.smoke.mjs && node test/normalizer.parity.smoke.mjs && node test/providerConfig.smoke.mjs && node test/mcpOnlyOperator.smoke.mjs && node test/opencodeEventFilter.smoke.mjs && node test/copilotMcpIsolation.smoke.mjs && node test/grokSpawnError.smoke.mjs && node test/initTemplate.smoke.mjs && node test/settingsAliases.smoke.mjs && node test/setupWritesOfficeMcp.smoke.mjs && node test/claudePermissions.smoke.mjs && node test/presenceGuard.smoke.mjs && node test/cliExitHardFail.smoke.mjs && node test/redactSecrets.smoke.mjs && node test/claudeUsage.smoke.mjs && node test/graphStore.smoke.mjs && node test/programReminder.smoke.mjs && node test/agentBackup.smoke.mjs && node test/persona.smoke.mjs && node test/soulUpdate.smoke.mjs"
33
+ "test": "node test/smoke.mjs && node test/liveNarration.smoke.mjs && node test/liveNarration.edge.smoke.mjs && node test/normalizer.parity.smoke.mjs && node test/providerConfig.smoke.mjs && node test/mcpOnlyOperator.smoke.mjs && node test/opencodeEventFilter.smoke.mjs && node test/copilotMcpIsolation.smoke.mjs && node test/grokSpawnError.smoke.mjs && node test/initTemplate.smoke.mjs && node test/settingsAliases.smoke.mjs && node test/setupWritesOfficeMcp.smoke.mjs && node test/claudePermissions.smoke.mjs && node test/presenceGuard.smoke.mjs && node test/cliExitHardFail.smoke.mjs && node test/redactSecrets.smoke.mjs && node test/claudeUsage.smoke.mjs && node test/graphStore.smoke.mjs && node test/programReminder.smoke.mjs && node test/agentBackup.smoke.mjs && node test/persona.smoke.mjs && node test/soulUpdate.smoke.mjs && node test/sessionsGlobal.smoke.mjs"
34
34
  },
35
35
  "dependencies": {
36
36
  "commander": "^12.1.0",