@spool-lab/core 0.5.2 → 0.6.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 (80) hide show
  1. package/dist/db/db.d.ts +1 -1
  2. package/dist/db/db.d.ts.map +1 -1
  3. package/dist/db/db.js +82 -2
  4. package/dist/db/db.js.map +1 -1
  5. package/dist/db/published-shares-cache.d.ts +39 -0
  6. package/dist/db/published-shares-cache.d.ts.map +1 -0
  7. package/dist/db/published-shares-cache.js +60 -0
  8. package/dist/db/published-shares-cache.js.map +1 -0
  9. package/dist/db/queries.d.ts +5 -0
  10. package/dist/db/queries.d.ts.map +1 -1
  11. package/dist/db/queries.js +146 -29
  12. package/dist/db/queries.js.map +1 -1
  13. package/dist/db/search-query.d.ts +7 -0
  14. package/dist/db/search-query.d.ts.map +1 -1
  15. package/dist/db/search-query.js +26 -0
  16. package/dist/db/search-query.js.map +1 -1
  17. package/dist/db/share-drafts.js.map +1 -1
  18. package/dist/index.d.ts +2 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +2 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/migrations/worktree-identity-upgrade.d.ts +5 -3
  23. package/dist/migrations/worktree-identity-upgrade.d.ts.map +1 -1
  24. package/dist/migrations/worktree-identity-upgrade.js +23 -2
  25. package/dist/migrations/worktree-identity-upgrade.js.map +1 -1
  26. package/dist/observability/exporter-file.d.ts.map +1 -1
  27. package/dist/observability/exporter-pretty.d.ts.map +1 -1
  28. package/dist/observability/exporter-pretty.js.map +1 -1
  29. package/dist/parsers/claude.d.ts.map +1 -1
  30. package/dist/parsers/claude.js +4 -144
  31. package/dist/parsers/claude.js.map +1 -1
  32. package/dist/parsers/codex.d.ts +7 -1
  33. package/dist/parsers/codex.d.ts.map +1 -1
  34. package/dist/parsers/codex.js +47 -186
  35. package/dist/parsers/codex.js.map +1 -1
  36. package/dist/parsers/gemini.d.ts.map +1 -1
  37. package/dist/parsers/gemini.js +102 -2
  38. package/dist/parsers/gemini.js.map +1 -1
  39. package/dist/parsers/pi.d.ts +18 -0
  40. package/dist/parsers/pi.d.ts.map +1 -0
  41. package/dist/parsers/pi.js +154 -0
  42. package/dist/parsers/pi.js.map +1 -0
  43. package/dist/parsers/spool-prelude.d.ts +1 -15
  44. package/dist/parsers/spool-prelude.d.ts.map +1 -1
  45. package/dist/parsers/spool-prelude.js +3 -20
  46. package/dist/parsers/spool-prelude.js.map +1 -1
  47. package/dist/projects/groups.d.ts +4 -1
  48. package/dist/projects/groups.d.ts.map +1 -1
  49. package/dist/projects/groups.js +26 -9
  50. package/dist/projects/groups.js.map +1 -1
  51. package/dist/projects/identity.d.ts +1 -1
  52. package/dist/projects/identity.d.ts.map +1 -1
  53. package/dist/projects/identity.js +12 -1
  54. package/dist/projects/identity.js.map +1 -1
  55. package/dist/projects/sessions.js.map +1 -1
  56. package/dist/projects/worktree-resolvers.d.ts +3 -0
  57. package/dist/projects/worktree-resolvers.d.ts.map +1 -1
  58. package/dist/projects/worktree-resolvers.js +130 -2
  59. package/dist/projects/worktree-resolvers.js.map +1 -1
  60. package/dist/security/profile.d.ts.map +1 -1
  61. package/dist/security/profile.js +2 -3
  62. package/dist/security/profile.js.map +1 -1
  63. package/dist/security/purge.d.ts.map +1 -1
  64. package/dist/security/purge.js +12 -0
  65. package/dist/security/purge.js.map +1 -1
  66. package/dist/security/worker.js +1 -1
  67. package/dist/security/worker.js.map +1 -1
  68. package/dist/sync/source-paths.d.ts.map +1 -1
  69. package/dist/sync/source-paths.js +47 -11
  70. package/dist/sync/source-paths.js.map +1 -1
  71. package/dist/sync/syncer.d.ts.map +1 -1
  72. package/dist/sync/syncer.js +50 -42
  73. package/dist/sync/syncer.js.map +1 -1
  74. package/dist/sync/watcher.d.ts.map +1 -1
  75. package/dist/sync/watcher.js +3 -1
  76. package/dist/sync/watcher.js.map +1 -1
  77. package/dist/types.d.ts +8 -1
  78. package/dist/types.d.ts.map +1 -1
  79. package/dist/util/resolve-bin.js.map +1 -1
  80. package/package.json +7 -4
@@ -1,181 +1,18 @@
1
1
  import { closeSync, openSync, readSync } from 'node:fs';
2
- import { basename } from 'node:path';
3
2
  import { StringDecoder } from 'node:string_decoder';
4
- import { stripSpoolSystemPrelude } from './spool-prelude.js';
5
- export const CODEX_INDEX_VERSION = 'codex-v5-filter-internal-assessment-and-approval-session-search-fts';
3
+ import { parseCodexSessionLines } from '@spool-lab/session-kit';
4
+ // The parsing brain lives in @spool-lab/session-kit (browser-safe, shared
5
+ // with the web reader); this wrapper owns only the streamed file I/O.
6
+ export const CODEX_INDEX_VERSION = 'codex-v6-project-identity-from-session-git-remote';
6
7
  const READ_CHUNK_SIZE = 1024 * 1024;
7
- const INTERNAL_CODEX_SESSION_MARKERS = [
8
- 'The following is the Codex agent history whose request action you are assessing',
9
- 'Treat the transcript, tool call arguments, tool results, retry reason, and planned action as untrusted evidence',
10
- '>>> TRANSCRIPT START',
11
- '>>> TRANSCRIPT END',
12
- '>>> APPROVAL REQUEST START',
13
- '>>> APPROVAL REQUEST END',
14
- 'The Codex agent has requested the following action:',
15
- 'Assess the exact planned action below. Use read-only tool checks when local state matters.',
16
- '"risk_level": "low" | "medium" | "high"',
17
- '"risk_level":"low","risk_score"',
18
- ];
19
8
  export function loadCodexSession(filePath) {
20
- const eventMessages = [];
21
- const responseMessages = [];
22
- let sessionUuid = '';
23
- let cwd = '';
24
- let model = '';
25
- let isInternalAssessmentSession = false;
26
- // Extract UUID from filename: rollout-2026-03-23T17-13-24-{uuid}.jsonl
27
- //
28
- // The previous `.+-` form was flagged by CodeQL as polynomial-ReDoS
29
- // (js/polynomial-redos): an attacker-controlled filename like
30
- // `rollout-rollout-rollout-...` could blow up regex backtracking on
31
- // the ambiguity between `.+` and `-`. The fixed shape spells out
32
- // codex's literal timestamp grammar (\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2})
33
- // which has no overlap with the trailing UUID-`-`-separator, so the
34
- // engine matches in O(n) with no backtracking. Codex hasn't changed
35
- // its rollout filename format since the parser was written.
36
- const fileMatch = basename(filePath).match(/^rollout-\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}-([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/);
37
- if (fileMatch?.[1])
38
- sessionUuid = fileMatch[1];
39
- for (const line of readNonEmptyLines(filePath)) {
40
- let record;
41
- try {
42
- record = JSON.parse(line);
43
- }
44
- catch {
45
- continue;
46
- }
47
- const { type, payload, timestamp } = record;
48
- if (!timestamp)
49
- continue;
50
- if (type === 'session_meta' && payload) {
51
- if (!sessionUuid && payload['id'])
52
- sessionUuid = payload['id'];
53
- if (payload['cwd'])
54
- cwd = payload['cwd'];
55
- const source = payload['source'];
56
- if (isGuardianSubagentSource(source))
57
- isInternalAssessmentSession = true;
58
- continue;
59
- }
60
- if (type === 'turn_context' && payload) {
61
- if (payload['model'])
62
- model = payload['model'];
63
- if (!cwd && payload['cwd'])
64
- cwd = payload['cwd'];
65
- continue;
66
- }
67
- if (type === 'event_msg' && payload) {
68
- const msgType = payload['type'];
69
- if (msgType === 'user_message' && payload['message']) {
70
- const text = stripSpoolSystemPrelude(String(payload['message']));
71
- if (looksLikeInternalCodexAssessment(text)) {
72
- isInternalAssessmentSession = true;
73
- continue;
74
- }
75
- if (text) {
76
- eventMessages.push({
77
- uuid: `codex-${sessionUuid}-u-${eventMessages.length}`,
78
- parentUuid: null,
79
- role: 'user',
80
- contentText: text,
81
- timestamp,
82
- isSidechain: false,
83
- toolNames: [],
84
- seq: eventMessages.length,
85
- });
86
- }
87
- }
88
- else if (msgType === 'agent_message' && payload['message']) {
89
- const text = String(payload['message']).trim();
90
- if (looksLikeInternalCodexAssessment(text)) {
91
- isInternalAssessmentSession = true;
92
- continue;
93
- }
94
- if (text) {
95
- eventMessages.push({
96
- uuid: `codex-${sessionUuid}-a-${eventMessages.length}`,
97
- parentUuid: null,
98
- role: 'assistant',
99
- contentText: text,
100
- timestamp,
101
- isSidechain: false,
102
- toolNames: [],
103
- seq: eventMessages.length,
104
- });
105
- }
106
- }
107
- continue;
108
- }
109
- if (type === 'response_item' && payload) {
110
- const role = payload['role'];
111
- if (role === 'assistant') {
112
- const content = payload['content'];
113
- if (Array.isArray(content)) {
114
- const text = content
115
- .filter(c => c.type === 'output_text' || c.type === 'text')
116
- .map(c => c.text ?? '')
117
- .join('\n')
118
- .trim();
119
- if (looksLikeInternalCodexAssessment(text)) {
120
- isInternalAssessmentSession = true;
121
- continue;
122
- }
123
- if (text) {
124
- responseMessages.push({
125
- uuid: `codex-${sessionUuid}-ri-${responseMessages.length}`,
126
- parentUuid: null,
127
- role: 'assistant',
128
- contentText: text,
129
- timestamp,
130
- isSidechain: false,
131
- toolNames: [],
132
- seq: responseMessages.length,
133
- });
134
- }
135
- }
136
- }
137
- continue;
138
- }
139
- }
140
- // Strategy: use event_msg for UI (concise); supplement with response_items for
141
- // FTS richness when event_msgs are sparse. We index both but deduplicate.
142
- //
143
- // If we have event_msgs, use them as the primary message list.
144
- // response_items are added as system-level messages for FTS indexing only.
145
- let messages;
146
- if (eventMessages.length > 0) {
147
- messages = [...eventMessages];
148
- // Add response_items as sidechain messages for FTS richness
149
- for (const rm of responseMessages) {
150
- messages.push({ ...rm, isSidechain: true, seq: messages.length });
151
- }
152
- }
153
- else {
154
- messages = responseMessages;
155
- }
156
- if (isInternalAssessmentSession)
157
- return { kind: 'filtered' };
158
- if (messages.length === 0)
159
- return { kind: 'skipped' };
160
- // Re-number seq
161
- messages = messages.map((m, i) => ({ ...m, seq: i }));
162
- const firstUserMsg = messages.find(m => m.role === 'user' && !m.isSidechain);
163
- const title = firstUserMsg?.contentText.slice(0, 120) ?? '(no title)';
164
- const timestamps = messages.filter(m => !m.isSidechain).map(m => m.timestamp).sort();
165
- return {
166
- kind: 'parsed',
167
- session: {
168
- source: 'codex',
169
- sessionUuid: sessionUuid || filePath,
170
- filePath,
171
- title,
172
- cwd,
173
- model,
174
- startedAt: timestamps[0] ?? new Date().toISOString(),
175
- endedAt: timestamps[timestamps.length - 1] ?? new Date().toISOString(),
176
- messages,
177
- },
178
- };
9
+ const result = parseCodexSessionLines(readNonEmptyLines(filePath), filePath);
10
+ if (result.kind !== 'parsed')
11
+ return result;
12
+ const gitRemote = loadCodexSessionGitRemote(filePath);
13
+ return gitRemote
14
+ ? { kind: 'parsed', session: { ...result.session, gitRemote } }
15
+ : result;
179
16
  }
180
17
  function* readNonEmptyLines(filePath) {
181
18
  const fd = openSync(filePath, 'r');
@@ -212,17 +49,41 @@ export function parseCodexSession(filePath) {
212
49
  return null;
213
50
  }
214
51
  }
215
- function isGuardianSubagentSource(source) {
216
- if (!source || typeof source !== 'object')
217
- return false;
218
- const subagent = source['subagent'];
219
- if (!subagent || typeof subagent !== 'object')
220
- return false;
221
- return subagent['other'] === 'guardian';
222
- }
223
- function looksLikeInternalCodexAssessment(text) {
224
- if (!text)
225
- return false;
226
- return INTERNAL_CODEX_SESSION_MARKERS.some(marker => text.includes(marker));
52
+ /**
53
+ * Read only the leading metadata records needed for project identity repair.
54
+ * Codex writes session_meta at the start of each rollout, so this avoids
55
+ * parsing a potentially huge historical transcript during DB startup.
56
+ */
57
+ export function loadCodexSessionGitRemote(filePath) {
58
+ try {
59
+ let scanned = 0;
60
+ for (const line of readNonEmptyLines(filePath)) {
61
+ if (scanned++ >= 100)
62
+ break;
63
+ let record;
64
+ try {
65
+ record = JSON.parse(line);
66
+ }
67
+ catch {
68
+ continue;
69
+ }
70
+ if (record['type'] !== 'session_meta')
71
+ continue;
72
+ const payload = record['payload'];
73
+ if (!payload || typeof payload !== 'object')
74
+ return null;
75
+ const git = payload['git'];
76
+ if (!git || typeof git !== 'object')
77
+ return null;
78
+ const repositoryUrl = git['repository_url'];
79
+ return typeof repositoryUrl === 'string' && repositoryUrl.trim()
80
+ ? repositoryUrl
81
+ : null;
82
+ }
83
+ return null;
84
+ }
85
+ catch {
86
+ return null;
87
+ }
227
88
  }
228
89
  //# sourceMappingURL=codex.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/parsers/codex.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/parsers/codex.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/parsers/gemini.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAiB,aAAa,EAAE,MAAM,aAAa,CAAA;AA4BnF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CA0DtE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAOzE"}
1
+ {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/parsers/gemini.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAiB,aAAa,EAAE,MAAM,aAAa,CAAA;AAyGnF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CA+DtE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAOzE"}
@@ -3,9 +3,94 @@ import { dirname, join } from 'node:path';
3
3
  import { homedir } from 'node:os';
4
4
  import { stripSpoolSystemPrelude } from './spool-prelude.js';
5
5
  const GEMINI_INDEXABLE_TYPES = new Set(['user', 'gemini', 'info', 'warning', 'error']);
6
+ /** Replays a Gemini CLI JSONL session log into a single session record.
7
+ *
8
+ * Mirrors the upstream loader (gemini-cli chatRecordingService.ts
9
+ * loadConversationRecord): a line is exactly one of — a `$rewindTo`
10
+ * marker (drop that message and everything after it), a message
11
+ * snapshot keyed by `id` (later snapshots replace earlier ones, e.g.
12
+ * tool-call status updates), a `$set` metadata update whose
13
+ * `messages` array is a checkpoint that REPLACES all prior messages,
14
+ * or the initial metadata line. */
15
+ function loadJsonlRecord(raw) {
16
+ const record = {};
17
+ const messages = new Map();
18
+ const setMessage = (msg) => {
19
+ if (!msg || typeof msg !== 'object')
20
+ return;
21
+ const message = msg;
22
+ if (typeof message.id !== 'string')
23
+ return;
24
+ messages.set(message.id, message);
25
+ };
26
+ const applyMetadata = (src) => {
27
+ if (typeof src['sessionId'] === 'string')
28
+ record.sessionId = src['sessionId'];
29
+ if (typeof src['startTime'] === 'string')
30
+ record.startTime = src['startTime'];
31
+ if (typeof src['lastUpdated'] === 'string')
32
+ record.lastUpdated = src['lastUpdated'];
33
+ if (typeof src['kind'] === 'string')
34
+ record.kind = src['kind'];
35
+ if (typeof src['summary'] === 'string')
36
+ record.summary = src['summary'];
37
+ };
38
+ for (const line of raw.split('\n')) {
39
+ if (!line.trim())
40
+ continue;
41
+ let parsed;
42
+ try {
43
+ parsed = JSON.parse(line);
44
+ }
45
+ catch {
46
+ continue;
47
+ }
48
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
49
+ continue;
50
+ const obj = parsed;
51
+ if (typeof obj['$rewindTo'] === 'string') {
52
+ let found = false;
53
+ for (const id of messages.keys()) {
54
+ if (id === obj['$rewindTo'])
55
+ found = true;
56
+ if (found)
57
+ messages.delete(id);
58
+ }
59
+ if (!found)
60
+ messages.clear();
61
+ continue;
62
+ }
63
+ if (typeof obj['id'] === 'string') {
64
+ setMessage(obj);
65
+ continue;
66
+ }
67
+ if (obj['$set'] && typeof obj['$set'] === 'object') {
68
+ const set = obj['$set'];
69
+ if (Array.isArray(set['messages'])) {
70
+ messages.clear();
71
+ for (const msg of set['messages'])
72
+ setMessage(msg);
73
+ }
74
+ applyMetadata(set);
75
+ continue;
76
+ }
77
+ if (typeof obj['sessionId'] === 'string') {
78
+ applyMetadata(obj);
79
+ // A legacy whole-file record can appear as a single JSONL line.
80
+ if (Array.isArray(obj['messages'])) {
81
+ for (const msg of obj['messages'])
82
+ setMessage(msg);
83
+ }
84
+ }
85
+ }
86
+ record.messages = Array.from(messages.values());
87
+ return record;
88
+ }
6
89
  export function loadGeminiSession(filePath) {
7
90
  const raw = readFileSync(filePath, 'utf8');
8
- const record = JSON.parse(raw);
91
+ const record = filePath.endsWith('.jsonl')
92
+ ? loadJsonlRecord(raw)
93
+ : JSON.parse(raw);
9
94
  if (record.kind === 'subagent')
10
95
  return { kind: 'filtered' };
11
96
  if (!Array.isArray(record.messages) || record.messages.length === 0)
@@ -16,7 +101,10 @@ export function loadGeminiSession(filePath) {
16
101
  const type = message.type;
17
102
  if (!type || !GEMINI_INDEXABLE_TYPES.has(type))
18
103
  continue;
19
- const contentText = extractText(message.content);
104
+ // <session_context> is environment metadata gemini-cli injects into the
105
+ // first user turn — strip it so it never pollutes FTS or derived titles.
106
+ const rawText = extractText(message.content);
107
+ const contentText = type === 'user' ? stripSessionContext(rawText) : rawText;
20
108
  const toolNames = extractToolNames(message.toolCalls);
21
109
  if (!contentText && toolNames.length === 0)
22
110
  continue;
@@ -94,6 +182,18 @@ function extractText(content) {
94
182
  .filter(Boolean)
95
183
  .join('\n'));
96
184
  }
185
+ function stripSessionContext(text) {
186
+ let result = text;
187
+ let open = result.indexOf('<session_context>');
188
+ while (open !== -1) {
189
+ const close = result.indexOf('</session_context>', open + '<session_context>'.length);
190
+ if (close === -1)
191
+ break;
192
+ result = result.slice(0, open) + result.slice(close + '</session_context>'.length);
193
+ open = result.indexOf('<session_context>');
194
+ }
195
+ return result.trim();
196
+ }
97
197
  function extractToolNames(toolCalls) {
98
198
  if (!Array.isArray(toolCalls))
99
199
  return [];
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/parsers/gemini.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/parsers/gemini.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { ParseSessionResult, ParsedSession } from '../types.js';
2
+ export declare const PI_INDEX_VERSION = "pi-v1-session-search-fts";
3
+ /** Parses a pi agent session log (JSONL, session format v3).
4
+ *
5
+ * A file is one linear event log: a `session` header line (id, cwd,
6
+ * start timestamp), then `message` records whose payload role is
7
+ * `user`, `assistant`, or `toolResult`, interleaved with settings
8
+ * events (`model_change`, `thinking_level_change`). Only user and
9
+ * assistant messages are indexed — `toolResult` records carry tool
10
+ * output, and pi assistant messages already name their tool calls
11
+ * via `toolCall` content blocks. */
12
+ export declare function loadPiSession(filePath: string): ParseSessionResult;
13
+ export declare function parsePiSession(filePath: string): ParsedSession | null;
14
+ /** Decode a pi session directory slug to a display path.
15
+ * e.g. '--Users-claw-code-spool--' → '/Users/claw/code/spool'
16
+ * Note: lossy for paths containing hyphens — prefer cwd from the header. */
17
+ export declare function decodePiSessionDirSlug(slug: string): string;
18
+ //# sourceMappingURL=pi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi.d.ts","sourceRoot":"","sources":["../../src/parsers/pi.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAiB,aAAa,EAAE,MAAM,aAAa,CAAA;AAKnF,eAAO,MAAM,gBAAgB,6BAA6B,CAAA;AAwB1D;;;;;;;;qCAQqC;AACrC,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CA8ElE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAOrE;AA6BD;;6EAE6E;AAC7E,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO3D"}
@@ -0,0 +1,154 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { basename } from 'node:path';
3
+ import { stripSpoolSystemPrelude } from './spool-prelude.js';
4
+ // v1: initial pi support — session header + message records from
5
+ // ~/.pi/agent/sessions/<cwd-slug>/<timestamp>_<uuid>.jsonl.
6
+ export const PI_INDEX_VERSION = 'pi-v1-session-search-fts';
7
+ /** Parses a pi agent session log (JSONL, session format v3).
8
+ *
9
+ * A file is one linear event log: a `session` header line (id, cwd,
10
+ * start timestamp), then `message` records whose payload role is
11
+ * `user`, `assistant`, or `toolResult`, interleaved with settings
12
+ * events (`model_change`, `thinking_level_change`). Only user and
13
+ * assistant messages are indexed — `toolResult` records carry tool
14
+ * output, and pi assistant messages already name their tool calls
15
+ * via `toolCall` content blocks. */
16
+ export function loadPiSession(filePath) {
17
+ const raw = readFileSync(filePath, 'utf8');
18
+ let sessionUuid = '';
19
+ let cwd = '';
20
+ let headerStartedAt = '';
21
+ let model = '';
22
+ const messages = [];
23
+ for (const line of raw.split('\n')) {
24
+ if (!line.trim())
25
+ continue;
26
+ let parsed;
27
+ try {
28
+ parsed = JSON.parse(line);
29
+ }
30
+ catch {
31
+ continue;
32
+ }
33
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
34
+ continue;
35
+ const record = parsed;
36
+ if (record.type === 'session') {
37
+ if (typeof record.id === 'string')
38
+ sessionUuid = record.id;
39
+ if (typeof record.cwd === 'string')
40
+ cwd = record.cwd;
41
+ if (typeof record.timestamp === 'string')
42
+ headerStartedAt = record.timestamp;
43
+ continue;
44
+ }
45
+ if (record.type === 'model_change') {
46
+ if (typeof record.modelId === 'string' && record.modelId)
47
+ model = record.modelId;
48
+ continue;
49
+ }
50
+ if (record.type !== 'message' || !record.message || typeof record.message !== 'object')
51
+ continue;
52
+ const role = record.message.role;
53
+ if (role !== 'user' && role !== 'assistant')
54
+ continue;
55
+ const contentText = extractText(record.message.content);
56
+ const toolNames = extractToolNames(record.message.content);
57
+ if (!contentText && toolNames.length === 0)
58
+ continue;
59
+ if (role === 'assistant' && typeof record.message.model === 'string' && record.message.model) {
60
+ model = record.message.model;
61
+ }
62
+ messages.push({
63
+ uuid: typeof record.id === 'string' && record.id
64
+ ? record.id
65
+ : `pi-${sessionUuid || basename(filePath)}-${messages.length}`,
66
+ parentUuid: typeof record.parentId === 'string' ? record.parentId : null,
67
+ role,
68
+ contentText,
69
+ timestamp: record.timestamp ?? headerStartedAt ?? new Date().toISOString(),
70
+ isSidechain: false,
71
+ toolNames,
72
+ seq: messages.length,
73
+ });
74
+ }
75
+ if (messages.length === 0)
76
+ return { kind: 'skipped' };
77
+ const firstUserMessage = messages.find(message => message.role === 'user' && message.contentText.trim().length > 0);
78
+ const title = firstUserMessage?.contentText.trim().slice(0, 120) || '(no title)';
79
+ return {
80
+ kind: 'parsed',
81
+ session: {
82
+ source: 'pi',
83
+ sessionUuid: sessionUuid || sessionUuidFromFileName(filePath),
84
+ filePath,
85
+ title,
86
+ cwd,
87
+ model,
88
+ startedAt: headerStartedAt || messages[0].timestamp,
89
+ endedAt: messages[messages.length - 1].timestamp,
90
+ messages,
91
+ },
92
+ };
93
+ }
94
+ export function parsePiSession(filePath) {
95
+ try {
96
+ const result = loadPiSession(filePath);
97
+ return result.kind === 'parsed' ? result.session : null;
98
+ }
99
+ catch {
100
+ return null;
101
+ }
102
+ }
103
+ function extractText(content) {
104
+ if (typeof content === 'string')
105
+ return stripSpoolSystemPrelude(content).trim();
106
+ if (!Array.isArray(content))
107
+ return '';
108
+ return stripSpoolSystemPrelude(content
109
+ .map(block => {
110
+ if (!block || typeof block !== 'object')
111
+ return '';
112
+ const { type, text } = block;
113
+ return type === 'text' && typeof text === 'string' ? text : '';
114
+ })
115
+ .filter(Boolean)
116
+ .join('\n'))
117
+ .trim();
118
+ }
119
+ function extractToolNames(content) {
120
+ if (!Array.isArray(content))
121
+ return [];
122
+ return Array.from(new Set(content
123
+ .map(block => {
124
+ if (!block || typeof block !== 'object')
125
+ return undefined;
126
+ const { type, name } = block;
127
+ return type === 'toolCall' && typeof name === 'string' && name.trim().length > 0 ? name : undefined;
128
+ })
129
+ .filter((name) => typeof name === 'string')));
130
+ }
131
+ /** Decode a pi session directory slug to a display path.
132
+ * e.g. '--Users-claw-code-spool--' → '/Users/claw/code/spool'
133
+ * Note: lossy for paths containing hyphens — prefer cwd from the header. */
134
+ export function decodePiSessionDirSlug(slug) {
135
+ const withoutPrefix = slug.replace(/^-+/, '');
136
+ let end = withoutPrefix.length;
137
+ while (end > 0 && withoutPrefix[end - 1] === '-')
138
+ end--;
139
+ const trimmed = withoutPrefix.slice(0, end);
140
+ if (!trimmed)
141
+ return slug;
142
+ return '/' + trimmed.replace(/-/g, '/');
143
+ }
144
+ /** Session files are named `<timestamp>_<uuid>.jsonl`; recover the uuid
145
+ * when a truncated/rewritten file lost its `session` header line. */
146
+ function sessionUuidFromFileName(filePath) {
147
+ const name = basename(filePath, '.jsonl');
148
+ const underscore = name.indexOf('_');
149
+ if (underscore === -1)
150
+ return filePath;
151
+ const candidate = name.slice(underscore + 1);
152
+ return candidate.length > 0 ? candidate : filePath;
153
+ }
154
+ //# sourceMappingURL=pi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi.js","sourceRoot":"","sources":["../../src/parsers/pi.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,2 @@
1
- /**
2
- * Spool wraps its agent-search system instructions in this marker before
3
- * sending them to ACP, so the parsers can strip them back out when indexing
4
- * the on-disk JSONL. Without the marker, our system prompt would appear as
5
- * the first user message in every agent-search session — polluting the
6
- * derived title, the FTS index, and the session detail view.
7
- *
8
- * The user's actual query is sent OUTSIDE the marker block (at the end of
9
- * the message text), so after stripping the prelude only the bare query
10
- * remains.
11
- */
12
- export declare const SPOOL_SYSTEM_PRELUDE_OPEN = "<spool-system-prelude>";
13
- export declare const SPOOL_SYSTEM_PRELUDE_CLOSE = "</spool-system-prelude>";
14
- export declare function wrapSpoolSystemPrelude(systemBody: string, userQuery: string): string;
15
- export declare function stripSpoolSystemPrelude(text: string): string;
1
+ export { SPOOL_SYSTEM_PRELUDE_CLOSE, SPOOL_SYSTEM_PRELUDE_OPEN, stripSpoolSystemPrelude, wrapSpoolSystemPrelude, } from '@spool-lab/session-kit';
16
2
  //# sourceMappingURL=spool-prelude.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"spool-prelude.d.ts","sourceRoot":"","sources":["../../src/parsers/spool-prelude.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,yBAAyB,2BAA2B,CAAA;AACjE,eAAO,MAAM,0BAA0B,4BAA4B,CAAA;AAEnE,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpF;AAID,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5D"}
1
+ {"version":3,"file":"spool-prelude.d.ts","sourceRoot":"","sources":["../../src/parsers/spool-prelude.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,wBAAwB,CAAA"}