@undefineds.co/linx 0.2.17 → 0.2.18

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 (117) hide show
  1. package/README.md +3 -6
  2. package/dist/generated/version.js +1 -1
  3. package/dist/generated/version.js.map +1 -1
  4. package/dist/index.js +256 -143
  5. package/dist/index.js.map +1 -1
  6. package/dist/lib/account-api.js +1 -1
  7. package/dist/lib/account-api.js.map +1 -1
  8. package/dist/lib/account-session.js +1 -1
  9. package/dist/lib/account-session.js.map +1 -1
  10. package/dist/lib/ai-command.js +186 -367
  11. package/dist/lib/ai-command.js.map +1 -1
  12. package/dist/lib/chat-api.js +177 -19
  13. package/dist/lib/chat-api.js.map +1 -1
  14. package/dist/lib/codex-plugin/bridge.js.map +1 -1
  15. package/dist/lib/codex-plugin/codex-native-proxy.js.map +1 -1
  16. package/dist/lib/codex-plugin/index.js.map +1 -1
  17. package/dist/lib/codex-plugin/runner.js.map +1 -1
  18. package/dist/lib/credentials-store.js +7 -1
  19. package/dist/lib/credentials-store.js.map +1 -1
  20. package/dist/lib/default-model.js +1 -0
  21. package/dist/lib/default-model.js.map +1 -1
  22. package/dist/lib/login-command.js +33 -10
  23. package/dist/lib/login-command.js.map +1 -1
  24. package/dist/lib/models.js +2 -27
  25. package/dist/lib/models.js.map +1 -1
  26. package/dist/lib/node-warning-filter.js +34 -0
  27. package/dist/lib/node-warning-filter.js.map +1 -0
  28. package/dist/lib/oidc-auth.js +130 -18
  29. package/dist/lib/oidc-auth.js.map +1 -1
  30. package/dist/lib/oidc-session-storage.js.map +1 -1
  31. package/dist/lib/pi-adapter/auth.js +47 -11
  32. package/dist/lib/pi-adapter/auth.js.map +1 -1
  33. package/dist/lib/pi-adapter/branding.js +764 -76
  34. package/dist/lib/pi-adapter/branding.js.map +1 -1
  35. package/dist/lib/pi-adapter/index.js.map +1 -1
  36. package/dist/lib/pi-adapter/interactive.js +179 -5
  37. package/dist/lib/pi-adapter/interactive.js.map +1 -1
  38. package/dist/lib/pi-adapter/pod-approval.js +8 -0
  39. package/dist/lib/pi-adapter/pod-approval.js.map +1 -0
  40. package/dist/lib/pi-adapter/pod-mirror-mapping.js +189 -0
  41. package/dist/lib/pi-adapter/pod-mirror-mapping.js.map +1 -0
  42. package/dist/lib/pi-adapter/pod-mirror.js +416 -0
  43. package/dist/lib/pi-adapter/pod-mirror.js.map +1 -0
  44. package/dist/lib/pi-adapter/pod-tools.js +104 -0
  45. package/dist/lib/pi-adapter/pod-tools.js.map +1 -0
  46. package/dist/lib/pi-adapter/runtime.js +327 -28
  47. package/dist/lib/pi-adapter/runtime.js.map +1 -1
  48. package/dist/lib/pi-adapter/session.js +608 -0
  49. package/dist/lib/pi-adapter/session.js.map +1 -0
  50. package/dist/lib/pi-adapter/stream.js +154 -4
  51. package/dist/lib/pi-adapter/stream.js.map +1 -1
  52. package/dist/lib/pi-adapter/theme.js.map +1 -1
  53. package/dist/lib/pi-adapter/web-fetch.js +154 -0
  54. package/dist/lib/pi-adapter/web-fetch.js.map +1 -0
  55. package/dist/lib/pod-chat-store.js +40 -30
  56. package/dist/lib/pod-chat-store.js.map +1 -1
  57. package/dist/lib/pod-data-session.js +110 -0
  58. package/dist/lib/pod-data-session.js.map +1 -0
  59. package/dist/lib/profile-identity.js +16 -60
  60. package/dist/lib/profile-identity.js.map +1 -1
  61. package/dist/lib/prompt.js.map +1 -1
  62. package/dist/lib/runtime-target.js +1 -1
  63. package/dist/lib/runtime-target.js.map +1 -1
  64. package/dist/lib/solid-auth.js.map +1 -1
  65. package/dist/lib/thread-utils.js.map +1 -1
  66. package/dist/lib/watch/archive.js +1 -1
  67. package/dist/lib/watch/archive.js.map +1 -1
  68. package/dist/lib/watch/auth.js +1 -1
  69. package/dist/lib/watch/auth.js.map +1 -1
  70. package/dist/lib/watch/codex-composer.js.map +1 -1
  71. package/dist/lib/watch/codex-footer.js.map +1 -1
  72. package/dist/lib/watch/codex-overlay.js.map +1 -1
  73. package/dist/lib/watch/codex-request-form.js +1 -1
  74. package/dist/lib/watch/codex-request-form.js.map +1 -1
  75. package/dist/lib/watch/codex-request-input.js.map +1 -1
  76. package/dist/lib/watch/display.js.map +1 -1
  77. package/dist/lib/watch/format.js.map +1 -1
  78. package/dist/lib/watch/hooks/claude.js +4 -0
  79. package/dist/lib/watch/hooks/claude.js.map +1 -1
  80. package/dist/lib/watch/hooks/codebuddy.js +4 -0
  81. package/dist/lib/watch/hooks/codebuddy.js.map +1 -1
  82. package/dist/lib/watch/hooks/codex.js +4 -0
  83. package/dist/lib/watch/hooks/codex.js.map +1 -1
  84. package/dist/lib/watch/hooks/index.js.map +1 -1
  85. package/dist/lib/watch/hooks/shared.js +0 -1
  86. package/dist/lib/watch/hooks/shared.js.map +1 -1
  87. package/dist/lib/watch/index.js.map +1 -1
  88. package/dist/lib/watch/pod-ai.js +29 -37
  89. package/dist/lib/watch/pod-ai.js.map +1 -1
  90. package/dist/lib/watch/pod-approval.js +822 -220
  91. package/dist/lib/watch/pod-approval.js.map +1 -1
  92. package/dist/lib/watch/pod-persistence.js +214 -106
  93. package/dist/lib/watch/pod-persistence.js.map +1 -1
  94. package/dist/lib/watch/runner.js +243 -38
  95. package/dist/lib/watch/runner.js.map +1 -1
  96. package/dist/lib/watch/secretary.js +238 -0
  97. package/dist/lib/watch/secretary.js.map +1 -0
  98. package/dist/lib/watch/types.js.map +1 -1
  99. package/dist/watch-cli.js +8 -34
  100. package/dist/watch-cli.js.map +1 -1
  101. package/package.json +3 -9
  102. package/vendor/agent-runtime/dist/acp.d.ts +27 -0
  103. package/vendor/agent-runtime/dist/acp.js +86 -0
  104. package/vendor/agent-runtime/dist/companion-model.d.ts +7 -0
  105. package/vendor/agent-runtime/dist/companion-model.js +12 -0
  106. package/vendor/agent-runtime/dist/index.d.ts +3 -0
  107. package/vendor/agent-runtime/dist/index.js +3 -0
  108. package/vendor/agent-runtime/dist/turn-controller.d.ts +69 -0
  109. package/vendor/agent-runtime/dist/turn-controller.js +129 -0
  110. package/vendor/agent-runtime/package.json +11 -0
  111. package/vendor/client/dist/client/index.d.ts +0 -118
  112. package/vendor/client/dist/client/index.js +0 -260
  113. package/vendor/client/dist/index.d.ts +0 -1
  114. package/vendor/client/dist/index.js +0 -1
  115. package/vendor/client/dist/watch/index.d.ts +0 -226
  116. package/vendor/client/dist/watch/index.js +0 -1114
  117. package/vendor/client/package.json +0 -9
@@ -0,0 +1,608 @@
1
+ import { existsSync, mkdirSync, statSync, writeFileSync } from 'node:fs';
2
+ import { basename, join, resolve } from 'node:path';
3
+ import { CURRENT_SESSION_VERSION, SessionManager, } from '@mariozechner/pi-coding-agent';
4
+ import { getDefaultPodDataSession, } from '../pod-data-session.js';
5
+ import { chatTable, drizzle, eq, messageTable, sessionTable, solidSchema, } from '../models.js';
6
+ import { PI_CHAT_ID } from './pod-mirror-mapping.js';
7
+ export function createNativeLinxPiPodSessionSource(context) {
8
+ const source = {
9
+ async listSessions(cwd) {
10
+ return listPodSessionSnapshots(context, cwd);
11
+ },
12
+ async findSession(input, cwd) {
13
+ const sessions = await source.listSessions(cwd);
14
+ const exact = sessions.find((session) => session.id === input);
15
+ if (exact) {
16
+ return exact;
17
+ }
18
+ const matches = sessions.filter((session) => session.id.startsWith(input));
19
+ if (matches.length === 1) {
20
+ return matches[0];
21
+ }
22
+ return null;
23
+ },
24
+ };
25
+ return source;
26
+ }
27
+ export async function createLinxPiSessionManager(options) {
28
+ const sessionDir = getDefaultLinxPiSessionDir(options.cwd, options.agentDir);
29
+ if (options.session?.trim()) {
30
+ const session = await resolveLinxPiSession(options.session.trim(), options.cwd, sessionDir, {
31
+ podSessionSource: options.podSessionSource,
32
+ });
33
+ return openAndRepairLinxPiSession(session.path, sessionDir);
34
+ }
35
+ if (options.last) {
36
+ const sessions = await listLinxPiSessions(options.cwd, options.agentDir, {
37
+ podSessionSource: options.podSessionSource,
38
+ });
39
+ if (sessions[0]) {
40
+ return openAndRepairLinxPiSession(sessions[0].path, sessionDir);
41
+ }
42
+ return SessionManager.create(options.cwd, sessionDir);
43
+ }
44
+ return SessionManager.create(options.cwd, sessionDir);
45
+ }
46
+ export async function listLinxPiSessions(cwd, agentDir, options = {}) {
47
+ const sessionDir = getDefaultLinxPiSessionDir(cwd, agentDir);
48
+ const localSessions = await SessionManager.list(cwd, sessionDir);
49
+ const podSessions = await hydratePodSessions(cwd, sessionDir, options.podSessionSource, localSessions);
50
+ return sortSessionsByModified(mergeSessions(localSessions, podSessions));
51
+ }
52
+ export async function resolveLinxPiSession(input, cwd, sessionDir, options = {}) {
53
+ const directPath = resolve(input);
54
+ if (existsSync(directPath) && statSync(directPath).isFile()) {
55
+ const manager = SessionManager.open(directPath);
56
+ const header = manager.getHeader();
57
+ return {
58
+ path: directPath,
59
+ id: manager.getSessionId(),
60
+ cwd: manager.getCwd(),
61
+ created: header?.timestamp ? new Date(header.timestamp) : new Date(0),
62
+ modified: statSync(directPath).mtime,
63
+ messageCount: manager.getEntries().filter((entry) => entry.type === 'message').length,
64
+ firstMessage: '(session file)',
65
+ allMessagesText: '',
66
+ };
67
+ }
68
+ const localSessions = sessionDir
69
+ ? await SessionManager.list(cwd, sessionDir)
70
+ : await SessionManager.list(cwd);
71
+ const globalSessions = sessionDir ? await SessionManager.listAll() : [];
72
+ const sessions = [...localSessions, ...globalSessions];
73
+ const exact = sessions.find((session) => session.id === input);
74
+ if (exact) {
75
+ return exact;
76
+ }
77
+ const byPrefix = sessions.filter((session) => session.id.startsWith(input));
78
+ if (byPrefix.length === 1) {
79
+ return byPrefix[0];
80
+ }
81
+ const byFilePrefix = sessions.filter((session) => session.path.includes(input));
82
+ if (byFilePrefix.length === 1) {
83
+ return byFilePrefix[0];
84
+ }
85
+ const scoped = (byPrefix.length > 0 ? byPrefix : byFilePrefix)
86
+ .filter((session) => session.cwd === cwd);
87
+ if (scoped.length === 1) {
88
+ return scoped[0];
89
+ }
90
+ if (sessionDir) {
91
+ const podSession = await hydratePodSession(input, cwd, sessionDir, options.podSessionSource);
92
+ if (podSession) {
93
+ return podSession;
94
+ }
95
+ }
96
+ if (byPrefix.length > 1 || byFilePrefix.length > 1) {
97
+ const matches = sortSessionsByModified([...new Map([...byPrefix, ...byFilePrefix].map((session) => [session.path, session])).values()])
98
+ .slice(0, 8)
99
+ .map((session) => `- ${formatLinxPiSessionSummary(session)}`)
100
+ .join('\n');
101
+ throw new Error(`Session id is ambiguous: ${input}\n${matches}`);
102
+ }
103
+ throw new Error(`No LinX session found for: ${input}`);
104
+ }
105
+ export function formatLinxPiSessionSummary(session) {
106
+ const label = session.name || session.firstMessage || '(no messages)';
107
+ const cwd = session.cwd || '(unknown cwd)';
108
+ return `${session.id.slice(0, 13)} ${label} ${cwd}`;
109
+ }
110
+ function sortSessionsByModified(sessions) {
111
+ return [...sessions].sort((a, b) => b.modified.getTime() - a.modified.getTime());
112
+ }
113
+ function mergeSessions(localSessions, podSessions) {
114
+ const merged = new Map();
115
+ for (const session of podSessions) {
116
+ merged.set(session.id, session);
117
+ }
118
+ for (const session of localSessions) {
119
+ merged.set(session.id, session);
120
+ }
121
+ return [...merged.values()];
122
+ }
123
+ function getDefaultLinxPiSessionDir(cwd, agentDir) {
124
+ const safePath = `--${cwd.replace(/^[/\\]/, '').replace(/[/\\:]/g, '-')}--`;
125
+ return join(agentDir, 'sessions', safePath);
126
+ }
127
+ async function hydratePodSessions(cwd, sessionDir, source, localSessions) {
128
+ const resolvedSource = await resolvePodSessionSource(source);
129
+ if (!resolvedSource) {
130
+ return [];
131
+ }
132
+ const localIds = new Set(localSessions.map((session) => session.id));
133
+ const snapshots = await resolvedSource.listSessions(cwd).catch(() => []);
134
+ const hydrated = [];
135
+ for (const snapshot of snapshots) {
136
+ if (localIds.has(snapshot.id)) {
137
+ continue;
138
+ }
139
+ hydrated.push(materializePodSessionSnapshot(snapshot, cwd, sessionDir));
140
+ }
141
+ return hydrated;
142
+ }
143
+ async function hydratePodSession(input, cwd, sessionDir, source) {
144
+ const resolvedSource = await resolvePodSessionSource(source);
145
+ if (!resolvedSource) {
146
+ return null;
147
+ }
148
+ const snapshot = await resolvedSource.findSession(input, cwd).catch(() => null);
149
+ if (!snapshot) {
150
+ return null;
151
+ }
152
+ return materializePodSessionSnapshot(snapshot, cwd, sessionDir);
153
+ }
154
+ async function resolvePodSessionSource(source) {
155
+ if (source !== undefined) {
156
+ return source;
157
+ }
158
+ return createDefaultLinxPiPodSessionSource().catch(() => null);
159
+ }
160
+ function materializePodSessionSnapshot(snapshot, fallbackCwd, sessionDir) {
161
+ mkdirSync(sessionDir, { recursive: true });
162
+ const created = toDate(snapshot.createdAt) ?? toDate(snapshot.updatedAt) ?? new Date();
163
+ const modified = toDate(snapshot.updatedAt) ?? created;
164
+ const cwd = snapshot.cwd?.trim() || fallbackCwd;
165
+ const entries = buildPodSessionEntries(snapshot);
166
+ const sessionFile = getMaterializedSessionFile(snapshot, sessionDir, created);
167
+ const header = {
168
+ type: 'session',
169
+ version: CURRENT_SESSION_VERSION,
170
+ id: snapshot.id,
171
+ timestamp: created.toISOString(),
172
+ cwd,
173
+ };
174
+ const lines = [header, ...entries].map((entry) => JSON.stringify(entry));
175
+ writeFileSync(sessionFile, `${lines.join('\n')}\n`);
176
+ const manager = openAndRepairLinxPiSession(sessionFile, sessionDir);
177
+ const info = buildSessionInfoFromManager(manager, sessionFile, created, modified);
178
+ return snapshot.name ? { ...info, name: snapshot.name } : info;
179
+ }
180
+ function openAndRepairLinxPiSession(path, sessionDir) {
181
+ const manager = SessionManager.open(path, sessionDir);
182
+ repairDanglingLinxPiToolCalls(manager);
183
+ return manager;
184
+ }
185
+ export function repairDanglingLinxPiToolCalls(manager) {
186
+ let repaired = 0;
187
+ const maxRepairs = 10;
188
+ for (let index = 0; index < maxRepairs; index += 1) {
189
+ const repair = findFirstDanglingToolCallRepair(manager.getBranch());
190
+ if (!repair) {
191
+ break;
192
+ }
193
+ manager.branch(repair.assistantEntry.id);
194
+ for (const toolCall of repair.toolCalls) {
195
+ const existingResult = repair.immediateToolResults.get(toolCall.id);
196
+ if (existingResult) {
197
+ appendReplayedSessionEntry(manager, existingResult);
198
+ }
199
+ else {
200
+ manager.appendMessage(createInterruptedToolResultMessage(toolCall));
201
+ }
202
+ }
203
+ for (const entry of repair.replayEntries) {
204
+ const message = entry.type === 'message' ? entry.message : undefined;
205
+ if (isToolResultMessageFor(message, repair.toolCallIds)) {
206
+ continue;
207
+ }
208
+ appendReplayedSessionEntry(manager, entry);
209
+ }
210
+ repaired += repair.toolCalls.filter((toolCall) => !repair.immediateToolResults.has(toolCall.id)).length;
211
+ }
212
+ return repaired;
213
+ }
214
+ function findFirstDanglingToolCallRepair(branch) {
215
+ for (let index = 0; index < branch.length; index += 1) {
216
+ const entry = branch[index];
217
+ const message = entry.type === 'message' ? entry.message : undefined;
218
+ const toolCalls = extractAssistantToolCalls(message);
219
+ if (toolCalls.length === 0) {
220
+ continue;
221
+ }
222
+ const toolCallIds = new Set(toolCalls.map((toolCall) => toolCall.id));
223
+ const immediateToolResults = new Map();
224
+ let nextIndex = index + 1;
225
+ while (nextIndex < branch.length) {
226
+ const nextEntry = branch[nextIndex];
227
+ const nextMessage = nextEntry.type === 'message' ? nextEntry.message : undefined;
228
+ if (!isRecord(nextMessage) || nextMessage.role !== 'toolResult') {
229
+ break;
230
+ }
231
+ const toolCallId = typeof nextMessage.toolCallId === 'string' ? nextMessage.toolCallId : '';
232
+ if (toolCallIds.has(toolCallId) && !immediateToolResults.has(toolCallId)) {
233
+ immediateToolResults.set(toolCallId, nextEntry);
234
+ }
235
+ nextIndex += 1;
236
+ }
237
+ if (toolCalls.every((toolCall) => immediateToolResults.has(toolCall.id))) {
238
+ continue;
239
+ }
240
+ return {
241
+ assistantEntry: entry,
242
+ toolCalls,
243
+ toolCallIds,
244
+ immediateToolResults,
245
+ replayEntries: branch.slice(nextIndex),
246
+ };
247
+ }
248
+ return null;
249
+ }
250
+ function extractAssistantToolCalls(message) {
251
+ if (!isRecord(message) || message.role !== 'assistant' || !Array.isArray(message.content)) {
252
+ return [];
253
+ }
254
+ return message.content.flatMap((part) => {
255
+ if (!isRecord(part) || part.type !== 'toolCall') {
256
+ return [];
257
+ }
258
+ const id = typeof part.id === 'string' ? part.id : '';
259
+ const name = typeof part.name === 'string' ? part.name : '';
260
+ return id && name ? [{ id, name }] : [];
261
+ });
262
+ }
263
+ function isToolResultMessageFor(message, toolCallIds) {
264
+ if (!isRecord(message) || message.role !== 'toolResult') {
265
+ return false;
266
+ }
267
+ const toolCallId = typeof message.toolCallId === 'string' ? message.toolCallId : '';
268
+ return toolCallIds.has(toolCallId);
269
+ }
270
+ function createInterruptedToolResultMessage(toolCall) {
271
+ return {
272
+ role: 'toolResult',
273
+ toolCallId: toolCall.id,
274
+ toolName: toolCall.name,
275
+ content: [{
276
+ type: 'text',
277
+ text: `Tool execution was interrupted before LinX received a result for ${toolCall.name}. Treat this tool call as failed and retry only if still needed.`,
278
+ }],
279
+ details: {
280
+ linxRepair: 'dangling-tool-call',
281
+ interrupted: true,
282
+ },
283
+ isError: true,
284
+ timestamp: Date.now(),
285
+ };
286
+ }
287
+ function appendReplayedSessionEntry(manager, entry) {
288
+ if (entry.type === 'message') {
289
+ manager.appendMessage(cloneJson(entry.message));
290
+ return;
291
+ }
292
+ if (entry.type === 'thinking_level_change') {
293
+ manager.appendThinkingLevelChange(entry.thinkingLevel);
294
+ return;
295
+ }
296
+ if (entry.type === 'model_change') {
297
+ manager.appendModelChange(entry.provider, entry.modelId);
298
+ return;
299
+ }
300
+ if (entry.type === 'session_info' && entry.name) {
301
+ manager.appendSessionInfo(entry.name);
302
+ return;
303
+ }
304
+ if (entry.type === 'custom') {
305
+ manager.appendCustomEntry(entry.customType, cloneJson(entry.data));
306
+ return;
307
+ }
308
+ if (entry.type === 'custom_message') {
309
+ manager.appendCustomMessageEntry(entry.customType, cloneJson(entry.content), entry.display, cloneJson(entry.details));
310
+ }
311
+ }
312
+ function cloneJson(value) {
313
+ if (value === undefined) {
314
+ return value;
315
+ }
316
+ return JSON.parse(JSON.stringify(value));
317
+ }
318
+ function buildPodSessionEntries(snapshot) {
319
+ const sortedMessages = [...(snapshot.messages ?? [])].sort((a, b) => {
320
+ const aTime = toDate(a.createdAt)?.getTime() ?? 0;
321
+ const bTime = toDate(b.createdAt)?.getTime() ?? 0;
322
+ return aTime - bTime;
323
+ });
324
+ const entries = [];
325
+ let previousId = null;
326
+ for (const row of sortedMessages) {
327
+ const parsed = parsePodRichContent(row.richContent);
328
+ const message = parsed.message ?? synthesizeAgentMessage(row);
329
+ if (!message) {
330
+ continue;
331
+ }
332
+ const id = parsed.entry?.id
333
+ ?? extractEntryIdFromPodMessageId(snapshot.id, row.id);
334
+ const timestamp = parsed.entry?.timestamp
335
+ ?? toDate(row.createdAt)?.toISOString()
336
+ ?? new Date().toISOString();
337
+ const entry = {
338
+ type: 'message',
339
+ id,
340
+ parentId: parsed.entry?.parentId !== undefined ? parsed.entry.parentId : previousId,
341
+ timestamp,
342
+ message,
343
+ };
344
+ entries.push(entry);
345
+ previousId = id;
346
+ }
347
+ return entries;
348
+ }
349
+ function parsePodRichContent(richContent) {
350
+ if (!richContent?.trim()) {
351
+ return {};
352
+ }
353
+ try {
354
+ const parsed = JSON.parse(richContent);
355
+ if (isRecord(parsed) && parsed.type === 'message' && isRecord(parsed.message)) {
356
+ return {
357
+ entry: parsed,
358
+ message: parsed.message,
359
+ };
360
+ }
361
+ if (isRecord(parsed) && isRecord(parsed.linxPiSessionEntry)) {
362
+ const entry = parsed.linxPiSessionEntry;
363
+ return {
364
+ entry,
365
+ message: isRecord(entry.message) ? entry.message : parsed,
366
+ };
367
+ }
368
+ if (isRecord(parsed) && typeof parsed.role === 'string') {
369
+ return { message: parsed };
370
+ }
371
+ }
372
+ catch {
373
+ return {};
374
+ }
375
+ return {};
376
+ }
377
+ function synthesizeAgentMessage(row) {
378
+ const role = row.role === 'assistant' || row.role === 'system' ? row.role : 'user';
379
+ const timestamp = toDate(row.createdAt)?.getTime() ?? Date.now();
380
+ const content = [{ type: 'text', text: row.content ?? '' }];
381
+ if (role === 'assistant') {
382
+ return {
383
+ role: 'assistant',
384
+ content,
385
+ api: 'openai-completions',
386
+ provider: 'undefineds',
387
+ model: 'linx-lite',
388
+ usage: {
389
+ input: 0,
390
+ output: 0,
391
+ cacheRead: 0,
392
+ cacheWrite: 0,
393
+ totalTokens: 0,
394
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
395
+ },
396
+ stopReason: 'stop',
397
+ timestamp,
398
+ };
399
+ }
400
+ if (role === 'system') {
401
+ return {
402
+ role: 'custom',
403
+ customType: 'linx-pod-system',
404
+ content,
405
+ timestamp,
406
+ };
407
+ }
408
+ return {
409
+ role: 'user',
410
+ content,
411
+ timestamp,
412
+ };
413
+ }
414
+ function extractEntryIdFromPodMessageId(sessionId, messageId) {
415
+ const prefix = `${sessionId}-`;
416
+ return messageId.startsWith(prefix) ? messageId.slice(prefix.length) : messageId;
417
+ }
418
+ function getMaterializedSessionFile(snapshot, sessionDir, created) {
419
+ if (snapshot.sessionFile?.trim()) {
420
+ const fileName = basename(snapshot.sessionFile);
421
+ if (fileName.endsWith('.jsonl')) {
422
+ return join(sessionDir, fileName);
423
+ }
424
+ }
425
+ const fileTimestamp = created.toISOString().replace(/[:.]/g, '-');
426
+ return join(sessionDir, `${fileTimestamp}_${snapshot.id}.jsonl`);
427
+ }
428
+ function buildSessionInfoFromManager(manager, path, created, modified) {
429
+ const entries = manager.getEntries();
430
+ const messages = entries.filter((entry) => entry.type === 'message');
431
+ const allMessages = messages
432
+ .map((entry) => extractMessageText(entry.message))
433
+ .filter(Boolean);
434
+ const firstUserMessage = messages.find((entry) => {
435
+ const message = entry.message;
436
+ return message?.role === 'user';
437
+ });
438
+ return {
439
+ path,
440
+ id: manager.getSessionId(),
441
+ cwd: manager.getCwd(),
442
+ name: manager.getSessionName(),
443
+ created,
444
+ modified,
445
+ messageCount: messages.length,
446
+ firstMessage: firstUserMessage
447
+ ? extractMessageText(firstUserMessage.message) || '(no messages)'
448
+ : '(no messages)',
449
+ allMessagesText: allMessages.join(' '),
450
+ };
451
+ }
452
+ function extractMessageText(message) {
453
+ if (!isRecord(message)) {
454
+ return '';
455
+ }
456
+ const content = message.content;
457
+ if (typeof content === 'string') {
458
+ return content;
459
+ }
460
+ if (!Array.isArray(content)) {
461
+ return '';
462
+ }
463
+ return content
464
+ .map((part) => {
465
+ if (typeof part === 'string')
466
+ return part;
467
+ if (!isRecord(part))
468
+ return '';
469
+ if (part.type === 'text')
470
+ return String(part.text ?? '');
471
+ if (part.type === 'thinking')
472
+ return String(part.thinking ?? '');
473
+ return '';
474
+ })
475
+ .join('');
476
+ }
477
+ function toDate(value) {
478
+ if (value instanceof Date) {
479
+ return Number.isNaN(value.getTime()) ? null : value;
480
+ }
481
+ if (typeof value === 'string' || typeof value === 'number') {
482
+ const parsed = new Date(value);
483
+ return Number.isNaN(parsed.getTime()) ? null : parsed;
484
+ }
485
+ return null;
486
+ }
487
+ async function createDefaultLinxPiPodSessionSource() {
488
+ const contextPromise = createDefaultPodSessionContext();
489
+ return {
490
+ async listSessions(cwd) {
491
+ const context = await contextPromise;
492
+ return context ? createNativeLinxPiPodSessionSource(context).listSessions(cwd) : [];
493
+ },
494
+ async findSession(input, cwd) {
495
+ const context = await contextPromise;
496
+ return context ? createNativeLinxPiPodSessionSource(context).findSession(input, cwd) : null;
497
+ },
498
+ };
499
+ }
500
+ async function createDefaultPodSessionContext() {
501
+ const session = await getDefaultPodDataSession();
502
+ if (!session) {
503
+ return null;
504
+ }
505
+ return {
506
+ webId: session.webId,
507
+ db: createSessionSourceDb(session),
508
+ };
509
+ }
510
+ async function listPodSessionSnapshots(context, cwd) {
511
+ const rows = await listPodSessionRows(context);
512
+ const snapshots = (await Promise.all(rows.map((row) => (buildPodSessionSnapshot(context, row, { expectedCwd: cwd }).catch(() => null)))))
513
+ .filter((snapshot) => snapshot !== null);
514
+ return snapshots.sort((a, b) => {
515
+ const aTime = toDate(a.updatedAt)?.getTime() ?? 0;
516
+ const bTime = toDate(b.updatedAt)?.getTime() ?? 0;
517
+ return bTime - aTime;
518
+ });
519
+ }
520
+ function createSessionSourceDb(session) {
521
+ return drizzle(session.solidSession, {
522
+ logger: false,
523
+ disableInteropDiscovery: true,
524
+ schema: solidSchema,
525
+ });
526
+ }
527
+ async function listPodSessionRows(context) {
528
+ const toolColumn = sessionTable.tool;
529
+ const rows = await context.db.select()
530
+ .from(sessionTable)
531
+ .where(eq(toolColumn, 'linx'))
532
+ .orderBy('updatedAt', 'desc')
533
+ .execute();
534
+ const secretaryChat = context.db.resolveLocatorIri(chatTable, { id: PI_CHAT_ID });
535
+ return rows.filter((row) => {
536
+ if (row.ownerWebId && row.ownerWebId !== context.webId) {
537
+ return false;
538
+ }
539
+ if (row.chat && row.chat !== secretaryChat) {
540
+ return false;
541
+ }
542
+ return true;
543
+ });
544
+ }
545
+ async function buildPodSessionSnapshot(context, row, options = {}) {
546
+ if (!row.id || row.tool !== 'linx') {
547
+ return null;
548
+ }
549
+ if (row.ownerWebId && row.ownerWebId !== context.webId) {
550
+ return null;
551
+ }
552
+ const metadata = isRecord(row.metadata) ? row.metadata : {};
553
+ const sessionCwd = typeof metadata.cwd === 'string' ? metadata.cwd : undefined;
554
+ if (options.expectedCwd && sessionCwd !== options.expectedCwd) {
555
+ return null;
556
+ }
557
+ const messages = await listPodSessionMessages(context, row);
558
+ return {
559
+ id: row.id,
560
+ cwd: sessionCwd,
561
+ createdAt: normalizeUnknownDate(row.createdAt),
562
+ updatedAt: normalizeUnknownDate(row.updatedAt),
563
+ sessionFile: typeof metadata.sessionFile === 'string' ? metadata.sessionFile : undefined,
564
+ messages,
565
+ };
566
+ }
567
+ async function listPodSessionMessages(context, session) {
568
+ if (!session.thread) {
569
+ return [];
570
+ }
571
+ const threadColumn = messageTable.thread;
572
+ const rows = await context.db.select()
573
+ .from(messageTable)
574
+ .where(eq(threadColumn, session.thread))
575
+ .orderBy('createdAt', 'asc')
576
+ .execute();
577
+ return rows
578
+ .filter((message) => {
579
+ if (!message.id || message.thread !== session.thread) {
580
+ return false;
581
+ }
582
+ return message.id.startsWith(`${session.id}-`);
583
+ })
584
+ .map((message) => ({
585
+ id: message.id,
586
+ role: message.role,
587
+ content: message.content,
588
+ richContent: message.richContent,
589
+ createdAt: normalizeUnknownDate(message.createdAt),
590
+ updatedAt: normalizeUnknownDate(message.updatedAt),
591
+ }))
592
+ .filter((message) => message.id)
593
+ .sort((a, b) => {
594
+ const aTime = toDate(a.createdAt)?.getTime() ?? 0;
595
+ const bTime = toDate(b.createdAt)?.getTime() ?? 0;
596
+ return aTime - bTime;
597
+ });
598
+ }
599
+ function normalizeUnknownDate(value) {
600
+ if (value instanceof Date || typeof value === 'string' || typeof value === 'number') {
601
+ return value;
602
+ }
603
+ return undefined;
604
+ }
605
+ function isRecord(value) {
606
+ return typeof value === 'object' && value !== null;
607
+ }
608
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/lib/pi-adapter/session.ts"],"names":[],"mappings":"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"}