@undefineds.co/linx 0.3.4 → 0.3.7

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 (172) hide show
  1. package/README.md +58 -23
  2. package/dist/generated/version.js +1 -1
  3. package/dist/generated/version.js.map +1 -1
  4. package/dist/index.js +334 -162
  5. package/dist/index.js.map +1 -1
  6. package/dist/lib/account-session.js +4 -8
  7. package/dist/lib/account-session.js.map +1 -1
  8. package/dist/lib/ai-command.js +228 -178
  9. package/dist/lib/ai-command.js.map +1 -1
  10. package/dist/lib/auto-mode/archive.js +38 -7
  11. package/dist/lib/auto-mode/archive.js.map +1 -1
  12. package/dist/lib/auto-mode/auth.js.map +1 -1
  13. package/dist/lib/auto-mode/display.js +71 -45
  14. package/dist/lib/auto-mode/display.js.map +1 -1
  15. package/dist/lib/auto-mode/format.js +9 -7
  16. package/dist/lib/auto-mode/format.js.map +1 -1
  17. package/dist/lib/auto-mode/hooks/claude.js +12 -2
  18. package/dist/lib/auto-mode/hooks/claude.js.map +1 -1
  19. package/dist/lib/auto-mode/hooks/codex.js +17 -7
  20. package/dist/lib/auto-mode/hooks/codex.js.map +1 -1
  21. package/dist/lib/auto-mode/hooks/index.js +28 -8
  22. package/dist/lib/auto-mode/hooks/index.js.map +1 -1
  23. package/dist/lib/auto-mode/pod-ai.js +20 -37
  24. package/dist/lib/auto-mode/pod-ai.js.map +1 -1
  25. package/dist/lib/auto-mode/pod-approval.js +124 -195
  26. package/dist/lib/auto-mode/pod-approval.js.map +1 -1
  27. package/dist/lib/auto-mode/pod-persistence.js +169 -90
  28. package/dist/lib/auto-mode/pod-persistence.js.map +1 -1
  29. package/dist/lib/auto-mode/runner.js +683 -81
  30. package/dist/lib/auto-mode/runner.js.map +1 -1
  31. package/dist/lib/auto-mode/secretary.js +186 -41
  32. package/dist/lib/auto-mode/secretary.js.map +1 -1
  33. package/dist/lib/auto-mode-command.js +32 -32
  34. package/dist/lib/auto-mode-command.js.map +1 -1
  35. package/dist/lib/chat-api.js +242 -50
  36. package/dist/lib/chat-api.js.map +1 -1
  37. package/dist/lib/codex-plugin/bridge.js +164 -17
  38. package/dist/lib/codex-plugin/bridge.js.map +1 -1
  39. package/dist/lib/codex-plugin/codex-native-proxy.js +370 -34
  40. package/dist/lib/codex-plugin/codex-native-proxy.js.map +1 -1
  41. package/dist/lib/credentials-store.js +33 -42
  42. package/dist/lib/credentials-store.js.map +1 -1
  43. package/dist/lib/linx-cloud-errors.js +61 -0
  44. package/dist/lib/linx-cloud-errors.js.map +1 -0
  45. package/dist/lib/linx-tui-contract.js +8 -5
  46. package/dist/lib/linx-tui-contract.js.map +1 -1
  47. package/dist/lib/login-command.js +9 -2
  48. package/dist/lib/login-command.js.map +1 -1
  49. package/dist/lib/models.js +3 -20
  50. package/dist/lib/models.js.map +1 -1
  51. package/dist/lib/oidc-auth.js +143 -17
  52. package/dist/lib/oidc-auth.js.map +1 -1
  53. package/dist/lib/oidc-session-storage.js +2 -6
  54. package/dist/lib/oidc-session-storage.js.map +1 -1
  55. package/dist/lib/pi-adapter/auto-input-controller.js +988 -0
  56. package/dist/lib/pi-adapter/auto-input-controller.js.map +1 -0
  57. package/dist/lib/pi-adapter/backend-command.js +2 -0
  58. package/dist/lib/pi-adapter/backend-command.js.map +1 -0
  59. package/dist/lib/pi-adapter/backend-credentials.js +80 -0
  60. package/dist/lib/pi-adapter/backend-credentials.js.map +1 -0
  61. package/dist/lib/pi-adapter/branding.js +246 -108
  62. package/dist/lib/pi-adapter/branding.js.map +1 -1
  63. package/dist/lib/pi-adapter/control-state.js +72 -0
  64. package/dist/lib/pi-adapter/control-state.js.map +1 -0
  65. package/dist/lib/pi-adapter/interactive.js +2634 -30
  66. package/dist/lib/pi-adapter/interactive.js.map +1 -1
  67. package/dist/lib/pi-adapter/pod-approval.js +382 -210
  68. package/dist/lib/pi-adapter/pod-approval.js.map +1 -1
  69. package/dist/lib/pi-adapter/pod-mirror-mapping.js +71 -17
  70. package/dist/lib/pi-adapter/pod-mirror-mapping.js.map +1 -1
  71. package/dist/lib/pi-adapter/pod-mirror.js +531 -64
  72. package/dist/lib/pi-adapter/pod-mirror.js.map +1 -1
  73. package/dist/lib/pi-adapter/pod-native.js +81 -85
  74. package/dist/lib/pi-adapter/pod-native.js.map +1 -1
  75. package/dist/lib/pi-adapter/pod-status-output.js +54 -0
  76. package/dist/lib/pi-adapter/pod-status-output.js.map +1 -0
  77. package/dist/lib/pi-adapter/runtime.js +458 -228
  78. package/dist/lib/pi-adapter/runtime.js.map +1 -1
  79. package/dist/lib/pi-adapter/session-control.js +509 -0
  80. package/dist/lib/pi-adapter/session-control.js.map +1 -0
  81. package/dist/lib/pi-adapter/session.js +35 -22
  82. package/dist/lib/pi-adapter/session.js.map +1 -1
  83. package/dist/lib/pi-adapter/stream.js +89 -32
  84. package/dist/lib/pi-adapter/stream.js.map +1 -1
  85. package/dist/lib/pi-adapter/sync-recovery.js +89 -0
  86. package/dist/lib/pi-adapter/sync-recovery.js.map +1 -0
  87. package/dist/lib/pi-adapter/web-fetch.js +13 -14
  88. package/dist/lib/pi-adapter/web-fetch.js.map +1 -1
  89. package/dist/lib/pod-chat-store.js +254 -78
  90. package/dist/lib/pod-chat-store.js.map +1 -1
  91. package/dist/lib/pod-data-session.js +156 -35
  92. package/dist/lib/pod-data-session.js.map +1 -1
  93. package/dist/lib/solid-auth-store.js +27 -0
  94. package/dist/lib/solid-auth-store.js.map +1 -0
  95. package/dist/lib/solid-auth.js +2 -4
  96. package/dist/lib/solid-auth.js.map +1 -1
  97. package/dist/lib/solid-client-credentials-login.js +100 -0
  98. package/dist/lib/solid-client-credentials-login.js.map +1 -0
  99. package/dist/lib/solid-local-store.js +31 -0
  100. package/dist/lib/solid-local-store.js.map +1 -0
  101. package/dist/lib/symphony/archive.js +328 -18
  102. package/dist/lib/symphony/archive.js.map +1 -1
  103. package/dist/lib/symphony/pod-projection.js +2222 -0
  104. package/dist/lib/symphony/pod-projection.js.map +1 -0
  105. package/dist/lib/symphony-command.js +602 -178
  106. package/dist/lib/symphony-command.js.map +1 -1
  107. package/dist/lib/sync-checkpoint-store.js +74 -0
  108. package/dist/lib/sync-checkpoint-store.js.map +1 -0
  109. package/dist/skills/symphony/SKILL.md +665 -0
  110. package/package.json +15 -9
  111. package/vendor/agent-runtime/dist/agent-runtime.d.ts +137 -0
  112. package/vendor/agent-runtime/dist/agent-runtime.js +211 -0
  113. package/vendor/agent-runtime/dist/auto-mode.d.ts +78 -13
  114. package/vendor/agent-runtime/dist/auto-mode.js +288 -31
  115. package/vendor/agent-runtime/dist/control-plane.d.ts +28 -0
  116. package/vendor/agent-runtime/dist/control-plane.js +79 -0
  117. package/vendor/agent-runtime/dist/file-sync.d.ts +157 -0
  118. package/vendor/agent-runtime/dist/file-sync.js +314 -0
  119. package/vendor/agent-runtime/dist/index.d.ts +7 -0
  120. package/vendor/agent-runtime/dist/index.js +7 -0
  121. package/vendor/agent-runtime/dist/reconciler.d.ts +117 -0
  122. package/vendor/agent-runtime/dist/reconciler.js +361 -0
  123. package/vendor/agent-runtime/dist/symphony.d.ts +128 -8
  124. package/vendor/agent-runtime/dist/symphony.js +362 -57
  125. package/vendor/agent-runtime/dist/sync.d.ts +271 -0
  126. package/vendor/agent-runtime/dist/sync.js +550 -0
  127. package/vendor/agent-runtime/dist/thread-reconciler-controller.d.ts +58 -0
  128. package/vendor/agent-runtime/dist/thread-reconciler-controller.js +137 -0
  129. package/vendor/agent-runtime/dist/turn-controller.js +2 -2
  130. package/vendor/agent-runtime/dist/wake-scheduler.d.ts +67 -0
  131. package/vendor/agent-runtime/dist/wake-scheduler.js +194 -0
  132. package/vendor/agent-runtime/package.json +8 -1
  133. package/vendor/pi-web-access/CHANGELOG.md +387 -0
  134. package/vendor/pi-web-access/LICENSE +21 -0
  135. package/vendor/pi-web-access/README.md +352 -0
  136. package/vendor/pi-web-access/activity.ts +101 -0
  137. package/vendor/pi-web-access/banner.png +0 -0
  138. package/vendor/pi-web-access/chrome-cookies.ts +322 -0
  139. package/vendor/pi-web-access/code-search.ts +107 -0
  140. package/vendor/pi-web-access/curator-page.ts +3359 -0
  141. package/vendor/pi-web-access/curator-server.ts +605 -0
  142. package/vendor/pi-web-access/exa.ts +520 -0
  143. package/vendor/pi-web-access/extract.ts +641 -0
  144. package/vendor/pi-web-access/gemini-api.ts +112 -0
  145. package/vendor/pi-web-access/gemini-search.ts +361 -0
  146. package/vendor/pi-web-access/gemini-url-context.ts +126 -0
  147. package/vendor/pi-web-access/gemini-web-config.ts +52 -0
  148. package/vendor/pi-web-access/gemini-web.ts +396 -0
  149. package/vendor/pi-web-access/github-api.ts +196 -0
  150. package/vendor/pi-web-access/github-extract.ts +634 -0
  151. package/vendor/pi-web-access/index.ts +2346 -0
  152. package/vendor/pi-web-access/package.json +45 -0
  153. package/vendor/pi-web-access/pdf-extract.ts +192 -0
  154. package/vendor/pi-web-access/perplexity.ts +195 -0
  155. package/vendor/pi-web-access/pi-web-fetch-demo.mp4 +0 -0
  156. package/vendor/pi-web-access/rsc-extract.ts +338 -0
  157. package/vendor/pi-web-access/skills/librarian/SKILL.md +195 -0
  158. package/vendor/pi-web-access/storage.ts +72 -0
  159. package/vendor/pi-web-access/summary-review.ts +276 -0
  160. package/vendor/pi-web-access/test/gemini-web-cookie-opt-in.test.mjs +41 -0
  161. package/vendor/pi-web-access/test/pdf-extract.test.mjs +95 -0
  162. package/vendor/pi-web-access/utils.ts +44 -0
  163. package/vendor/pi-web-access/video-extract.ts +378 -0
  164. package/vendor/pi-web-access/youtube-extract.ts +310 -0
  165. package/dist/lib/pi-adapter/auth.js +0 -68
  166. package/dist/lib/pi-adapter/auth.js.map +0 -1
  167. package/dist/lib/pi-adapter/pod-tools.js +0 -140
  168. package/dist/lib/pi-adapter/pod-tools.js.map +0 -1
  169. package/dist/skills/drizzle-solid/SKILL.md +0 -340
  170. package/dist/skills/pod-storage/SKILL.md +0 -100
  171. package/dist/skills/solid-modeling/SKILL.md +0 -274
  172. package/dist/skills/xpod-componentsjs/SKILL.md +0 -284
@@ -0,0 +1,89 @@
1
+ import { existsSync, readdirSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { listLinxSyncCheckpoints, } from '../../../vendor/agent-runtime/dist/sync.js';
4
+ import { createFileSyncCheckpointStore } from '../sync-checkpoint-store.js';
5
+ import { LinxPiPodMirror } from './pod-mirror.js';
6
+ import { createLinxPiSessionManager } from './session.js';
7
+ export function getPiPodMirrorSyncDir(agentDir, sessionId) {
8
+ const baseDir = join(agentDir, 'sync', 'pi-pod-mirror');
9
+ return sessionId ? join(baseDir, sessionId) : baseDir;
10
+ }
11
+ export async function listPendingPiPodMirrorSync(agentDir) {
12
+ const baseDir = getPiPodMirrorSyncDir(agentDir);
13
+ if (!existsSync(baseDir)) {
14
+ return [];
15
+ }
16
+ const statuses = [];
17
+ for (const entry of readdirSync(baseDir, { withFileTypes: true })) {
18
+ if (!entry.isDirectory()) {
19
+ continue;
20
+ }
21
+ const sessionId = entry.name;
22
+ const checkpoints = await listLinxSyncCheckpoints(createFileSyncCheckpointStore({
23
+ dir: getPiPodMirrorSyncDir(agentDir, sessionId),
24
+ }), {
25
+ source: 'pi-runtime',
26
+ target: 'pod',
27
+ plane: 'projection',
28
+ status: ['failed', 'partial'],
29
+ metadata: {
30
+ resourceBindings: {
31
+ session: {
32
+ local: sessionId,
33
+ },
34
+ },
35
+ },
36
+ });
37
+ if (checkpoints.length > 0) {
38
+ statuses.push({ sessionId, checkpoints });
39
+ }
40
+ }
41
+ return statuses.sort((a, b) => {
42
+ const aLatest = a.checkpoints.at(-1)?.completedAt ?? '';
43
+ const bLatest = b.checkpoints.at(-1)?.completedAt ?? '';
44
+ return bLatest.localeCompare(aLatest) || a.sessionId.localeCompare(b.sessionId);
45
+ });
46
+ }
47
+ export async function retryPendingPiPodMirrorSync(options) {
48
+ const checkpointStore = createFileSyncCheckpointStore({
49
+ dir: getPiPodMirrorSyncDir(options.agentDir, options.sessionId),
50
+ });
51
+ const pending = await listLinxSyncCheckpoints(checkpointStore, {
52
+ source: 'pi-runtime',
53
+ target: 'pod',
54
+ plane: 'projection',
55
+ status: ['failed', 'partial'],
56
+ metadata: {
57
+ resourceBindings: {
58
+ session: {
59
+ local: options.sessionId,
60
+ },
61
+ },
62
+ },
63
+ });
64
+ if (pending.length === 0) {
65
+ return {
66
+ sessionId: options.sessionId,
67
+ attempted: false,
68
+ results: [],
69
+ };
70
+ }
71
+ const sessionManager = await createLinxPiSessionManager({
72
+ cwd: options.cwd,
73
+ agentDir: options.agentDir,
74
+ session: options.sessionId,
75
+ });
76
+ const mirror = new LinxPiPodMirror({
77
+ cwd: options.cwd,
78
+ sessionManager,
79
+ checkpointStore,
80
+ });
81
+ const results = await mirror.replayPendingSync();
82
+ await mirror.flush();
83
+ return {
84
+ sessionId: options.sessionId,
85
+ attempted: true,
86
+ results,
87
+ };
88
+ }
89
+ //# sourceMappingURL=sync-recovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-recovery.js","sourceRoot":"","sources":["../../../src/lib/pi-adapter/sync-recovery.ts"],"names":[],"mappings":"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"}
@@ -5,9 +5,9 @@
5
5
  * user's Pod-backed shared credential model. The LLM must not read or write
6
6
  * credential Turtle directly.
7
7
  */
8
- import { Type } from '@sinclair/typebox';
8
+ import { Type } from 'typebox';
9
9
  import { getDefaultPodDataSession } from '../pod-data-session.js';
10
- import { aiProviderResource, credentialResource, drizzle, selectAIConfigCredential, solidResources, } from '../models.js';
10
+ import { aiConfigRepository, drizzle, solidResources, } from '../models.js';
11
11
  // ── Constants ───────────────────────────────────────────────────────────────
12
12
  const JINA_READER_BASE = 'https://r.jina.ai';
13
13
  const JINA_SEARCH_BASE = 'https://s.jina.ai';
@@ -44,13 +44,8 @@ export async function resolveJinaApiKey(runtime = activeCredentialRuntime) {
44
44
  if (!session)
45
45
  return null;
46
46
  const db = runtime.createDb(session);
47
- const [credentialRows, providerRow] = await Promise.all([
48
- db.select().from(credentialResource).execute(),
49
- typeof db.findById === 'function'
50
- ? db.findById(aiProviderResource, JINA_PROVIDER_ID).catch(() => null)
51
- : Promise.resolve(null),
52
- ]);
53
- const selected = selectAIConfigCredential(JINA_PROVIDER_ID, credentialRows, providerRow ? [providerRow] : []);
47
+ const selected = await aiConfigRepository.loadCredentialForBackend(db, JINA_PROVIDER_ID);
48
+ await aiConfigRepository.markCredentialUsed(db, selected);
54
49
  return selected?.apiKey ?? null;
55
50
  }
56
51
  function missingKeyMessage() {
@@ -163,9 +158,13 @@ export const webSearchTool = {
163
158
  return { content: [{ type: 'text', text: `Results for "${query}":\n\n${formatResults(r.results)}` }] };
164
159
  },
165
160
  };
166
- // ── Pi Extension ────────────────────────────────────────────────────────────
167
- export default function (pi) {
168
- pi.registerTool(webFetchTool);
169
- pi.registerTool(webSearchTool);
170
- }
161
+ // ── Pi Extension (disabled; replaced by pi-web-access) ─────────────────────
162
+ //
163
+ // LinX now uses pi-web-access for web_search and fetch_content.
164
+ // The Jina utility functions below are kept for potential fallback use.
165
+ //
166
+ // export default function (pi: ExtensionAPI): void {
167
+ // pi.registerTool(webFetchTool);
168
+ // pi.registerTool(webSearchTool);
169
+ // }
171
170
  //# sourceMappingURL=web-fetch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"web-fetch.js","sourceRoot":"","sources":["../../../src/lib/pi-adapter/web-fetch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web-fetch.js","sourceRoot":"","sources":["../../../src/lib/pi-adapter/web-fetch.ts"],"names":[],"mappings":"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"}
@@ -1,31 +1,18 @@
1
- import { agentResource, chatResource, drizzle, eq, extractChatIdFromChatRef, extractThreadIdFromThreadRef, solidResources, messageResource, threadResource, } from './models.js';
1
+ import { createLinxPodSyncScope, } from '../../vendor/agent-runtime/dist/sync.js';
2
+ import { agentResource, chatRepository, chatResource, drizzle, eq, solidResources, messageResource, threadResource, threadRepository, } from './models.js';
2
3
  import { DEFAULT_LINX_CLOUD_MODEL_ID } from './default-model.js';
3
4
  import { formatThreadLabel, toOpenAiMessages } from './thread-utils.js';
4
5
  const DEFAULT_CHAT_ID = 'cli-default';
5
6
  const DEFAULT_AGENT_ID = 'linx-cli-assistant';
7
+ const POD_WRITE_RETRY_ATTEMPTS = 2;
8
+ const POD_WRITE_RETRY_DELAY_MS = 250;
9
+ const cliChatSyncResults = [];
10
+ let cliChatSyncSeq = 0;
6
11
  function extractChatId(chatIdOrUri) {
7
- return extractChatIdFromChatRef(chatIdOrUri) ?? DEFAULT_CHAT_ID;
12
+ return chatRepository.idFromRef(chatIdOrUri) ?? chatIdOrUri ?? DEFAULT_CHAT_ID;
8
13
  }
9
14
  function extractThreadId(threadIdOrUri) {
10
- return extractThreadIdFromThreadRef(threadIdOrUri) ?? undefined;
11
- }
12
- function getPodBaseUrl(webId) {
13
- return webId.replace('/profile/card#me', '').replace(/\/$/, '');
14
- }
15
- function buildAgentUri(webId, agentId) {
16
- return `${getPodBaseUrl(webId)}/.data/agents/${agentId}.ttl`;
17
- }
18
- function requireFindById(db) {
19
- if (typeof db.findById !== 'function') {
20
- throw new Error('Solid database does not support findById');
21
- }
22
- return db.findById.bind(db);
23
- }
24
- function requireUpdateById(db) {
25
- if (typeof db.updateById !== 'function') {
26
- throw new Error('Solid database does not support updateById');
27
- }
28
- return db.updateById.bind(db);
15
+ return threadRepository.idFromRef(threadIdOrUri) ?? threadIdOrUri ?? undefined;
29
16
  }
30
17
  function createDb(session) {
31
18
  return drizzle(session, {
@@ -35,25 +22,119 @@ function createDb(session) {
35
22
  schema: solidResources,
36
23
  });
37
24
  }
25
+ const defaultRuntime = {
26
+ createDb,
27
+ now: () => new Date(),
28
+ randomUUID: () => crypto.randomUUID(),
29
+ };
30
+ let activeRuntime = defaultRuntime;
31
+ function getActiveRuntime() {
32
+ return activeRuntime;
33
+ }
34
+ async function runCliChatProjection(input, project) {
35
+ const runtime = getActiveRuntime();
36
+ const sync = createLinxPodSyncScope({
37
+ source: 'cli-chat-store',
38
+ target: 'pod',
39
+ direction: 'local-to-core',
40
+ plane: 'projection',
41
+ authority: 'core',
42
+ now: runtime.now,
43
+ onResult(result) {
44
+ cliChatSyncResults.push(result);
45
+ runtime.onSyncResult?.(result);
46
+ },
47
+ });
48
+ return await sync.run({
49
+ action: input.action,
50
+ operationId: nextCliChatSyncOperationId(input),
51
+ kind: input.kind,
52
+ description: `cli-chat-store:${input.action}`,
53
+ subject: input.messageId ?? input.threadId ?? input.chatId,
54
+ resourceBindings: buildCliChatSyncResourceBindings(input),
55
+ metadata: {
56
+ role: input.role,
57
+ },
58
+ task: () => withTransientPodWriteRetry(project),
59
+ });
60
+ }
61
+ async function withTransientPodWriteRetry(project) {
62
+ let lastError;
63
+ for (let attempt = 0; attempt <= POD_WRITE_RETRY_ATTEMPTS; attempt += 1) {
64
+ try {
65
+ return await project();
66
+ }
67
+ catch (error) {
68
+ lastError = error;
69
+ if (attempt >= POD_WRITE_RETRY_ATTEMPTS || !isTransientPodWriteError(error)) {
70
+ throw error;
71
+ }
72
+ await delay(POD_WRITE_RETRY_DELAY_MS * (attempt + 1));
73
+ }
74
+ }
75
+ throw lastError;
76
+ }
77
+ function isTransientPodWriteError(error) {
78
+ const message = error instanceof Error ? error.message : String(error);
79
+ const normalized = message.toLowerCase();
80
+ return normalized.includes('502 bad gateway')
81
+ || normalized.includes('503 service unavailable')
82
+ || normalized.includes('504 gateway timeout')
83
+ || normalized.includes('temporarily unavailable');
84
+ }
85
+ function delay(ms) {
86
+ return new Promise((resolve) => setTimeout(resolve, ms));
87
+ }
88
+ function nextCliChatSyncOperationId(input) {
89
+ const subject = input.messageId ?? input.threadId ?? input.chatId ?? 'cli-chat';
90
+ const timestamp = getActiveRuntime().now().toISOString().replace(/[:.]/g, '-');
91
+ return `cli-chat-store:${input.action}:${subject}:${timestamp}:${++cliChatSyncSeq}`;
92
+ }
93
+ function buildCliChatSyncResourceBindings(input) {
94
+ const chatUri = input.chatId
95
+ ? (input.webId ? chatResource.buildIri(input.webId, { id: input.chatId }) : undefined)
96
+ : undefined;
97
+ const threadUri = input.threadId && input.chatId
98
+ ? (input.webId ? threadRepository.iriForChat(input.webId, input.chatId, input.threadId) : undefined)
99
+ : undefined;
100
+ const messageUri = input.messageId && input.chatId && input.createdAt
101
+ ? (input.webId ? messageResource.buildIri(input.webId, {
102
+ id: input.messageId,
103
+ chat: chatResource.buildIri(input.webId, { id: input.chatId }),
104
+ ...(threadUri ? { thread: threadUri } : {}),
105
+ createdAt: input.createdAt,
106
+ }) : undefined)
107
+ : undefined;
108
+ return {
109
+ chat: input.chatId ? { uri: chatUri, local: input.chatId } : undefined,
110
+ thread: input.threadId ? { uri: threadUri, local: input.threadId } : undefined,
111
+ message: input.messageId ? { uri: messageUri, local: input.messageId } : undefined,
112
+ };
113
+ }
38
114
  export async function initPodData(session) {
39
- const db = createDb(session);
115
+ const db = getActiveRuntime().createDb(session);
40
116
  return db;
41
117
  }
42
118
  async function ensureCliAgent(db, webId) {
43
- const findById = requireFindById(db);
44
- const existing = await findById(agentResource, DEFAULT_AGENT_ID);
119
+ const agentId = agentResource.buildId({ id: DEFAULT_AGENT_ID });
120
+ const existing = await db.findById(agentResource, agentId);
45
121
  if (existing) {
46
122
  return;
47
123
  }
48
- const now = new Date();
49
- await db.insert(agentResource).values({
50
- id: DEFAULT_AGENT_ID,
124
+ const now = getActiveRuntime().now();
125
+ await runCliChatProjection({
126
+ action: 'agent.ensure',
127
+ kind: 'insert',
128
+ db,
129
+ webId,
130
+ }, () => db.insert(agentResource).values({
131
+ id: agentId,
51
132
  name: 'LinX CLI Assistant',
52
133
  provider: 'xpod',
53
134
  model: DEFAULT_LINX_CLOUD_MODEL_ID,
54
135
  createdAt: now,
55
136
  updatedAt: now,
56
- }).execute();
137
+ }).execute());
57
138
  }
58
139
  export async function getOrCreateDefaultChat(session) {
59
140
  const db = await initPodData(session);
@@ -62,28 +143,38 @@ export async function getOrCreateDefaultChat(session) {
62
143
  throw new Error('Missing webId in Solid session');
63
144
  }
64
145
  await ensureCliAgent(db, webId);
65
- const findById = requireFindById(db);
66
- const existing = await findById(chatResource, DEFAULT_CHAT_ID);
146
+ const existing = await db.findById(chatResource, DEFAULT_CHAT_ID);
67
147
  if (existing) {
68
148
  return DEFAULT_CHAT_ID;
69
149
  }
70
- const now = new Date();
71
- await db.insert(chatResource).values({
150
+ const now = getActiveRuntime().now();
151
+ await runCliChatProjection({
152
+ action: 'chat.create',
153
+ kind: 'insert',
154
+ db,
155
+ webId,
156
+ chatId: DEFAULT_CHAT_ID,
157
+ }, () => db.insert(chatResource).values({
72
158
  id: DEFAULT_CHAT_ID,
73
159
  title: 'LinX CLI',
74
160
  participants: [],
75
161
  createdAt: now,
76
162
  updatedAt: now,
77
163
  lastActiveAt: now,
78
- }).execute();
164
+ }).execute());
79
165
  return DEFAULT_CHAT_ID;
80
166
  }
81
167
  export async function listThreads(session, chatId) {
82
168
  const db = await initPodData(session);
83
- const chatCol = threadResource.chat;
84
- const rows = await db.select().from(threadResource).where(eq(chatCol, chatId)).orderBy('updatedAt', 'desc').execute();
169
+ const webId = session.info.webId;
170
+ if (!webId) {
171
+ throw new Error('Missing webId in Solid session');
172
+ }
173
+ const chatUri = chatRepository.iri(webId, chatId);
174
+ const parentCol = threadResource.parent;
175
+ const rows = await db.select().from(threadResource).where(eq(parentCol, chatUri)).orderBy('updatedAt', 'desc').execute();
85
176
  return rows.map((row) => ({
86
- id: String(row.id),
177
+ id: threadRepository.idFromRef(String(row.id)) ?? String(row.id),
87
178
  title: row.title || undefined,
88
179
  workspace: row.workspace || undefined,
89
180
  updatedAt: row.updatedAt ? new Date(row.updatedAt) : undefined,
@@ -91,24 +182,46 @@ export async function listThreads(session, chatId) {
91
182
  }
92
183
  export async function createThread(session, chatId, workspace, title) {
93
184
  const db = await initPodData(session);
94
- const threadId = crypto.randomUUID();
95
- const now = new Date();
96
- await db.insert(threadResource).values({
97
- id: threadId,
98
- chat: chatId,
185
+ const webId = session.info.webId;
186
+ if (!webId) {
187
+ throw new Error('Missing webId in Solid session');
188
+ }
189
+ const threadId = getActiveRuntime().randomUUID();
190
+ const now = getActiveRuntime().now();
191
+ const chatUri = chatResource.buildIri(webId, { id: chatId });
192
+ await runCliChatProjection({
193
+ action: 'thread.create',
194
+ kind: 'insert',
195
+ db,
196
+ webId,
197
+ chatId,
198
+ threadId,
199
+ }, () => db.insert(threadResource).values({
200
+ id: threadRepository.idForChat(chatUri, threadId),
201
+ parent: chatUri,
99
202
  title: title || 'CLI Session',
100
203
  workspace: workspace || undefined,
101
204
  createdAt: now,
102
205
  updatedAt: now,
103
- }).execute();
206
+ }).execute());
104
207
  return threadId;
105
208
  }
106
209
  export async function touchThread(session, threadId) {
107
210
  const db = await initPodData(session);
108
- const chatId = extractChatId((await loadThread(session, threadId))?.chat) ?? DEFAULT_CHAT_ID;
109
- const updateById = requireUpdateById(db);
110
- const threadResourceId = db.resolveLocatorId(threadResource, { chat: chatId, id: threadId });
111
- await updateById(threadResource, threadResourceId, { updatedAt: new Date() });
211
+ const webId = session.info.webId;
212
+ if (!webId) {
213
+ throw new Error('Missing webId in Solid session');
214
+ }
215
+ const chatId = threadRepository.chatId(await loadThread(session, threadId)) ?? DEFAULT_CHAT_ID;
216
+ const threadRecordId = threadRepository.idForChat(chatId, threadId);
217
+ await runCliChatProjection({
218
+ action: 'thread.touch',
219
+ kind: 'update',
220
+ db,
221
+ webId,
222
+ chatId,
223
+ threadId,
224
+ }, () => db.updateById(threadResource, threadRecordId, { updatedAt: getActiveRuntime().now() }));
112
225
  }
113
226
  export async function loadMessages(session, threadId) {
114
227
  const db = await initPodData(session);
@@ -117,7 +230,7 @@ export async function loadMessages(session, threadId) {
117
230
  if (!thread) {
118
231
  return [];
119
232
  }
120
- const chatId = extractChatId(thread.chat);
233
+ const chatId = threadRepository.chatId(thread);
121
234
  const rows = await db.select().from(messageResource).orderBy(createdAtCol).execute();
122
235
  return rows
123
236
  .filter((row) => (extractChatId(row.chat) === chatId
@@ -131,71 +244,108 @@ export async function loadMessages(session, threadId) {
131
244
  }
132
245
  export async function saveUserMessage(session, chatId, threadId, content) {
133
246
  const db = await initPodData(session);
134
- const now = new Date();
247
+ const now = getActiveRuntime().now();
135
248
  const webId = session.info.webId;
136
249
  if (!webId) {
137
250
  throw new Error('Missing webId in Solid session');
138
251
  }
139
- const updateById = requireUpdateById(db);
140
- await db.insert(messageResource).values({
141
- id: crypto.randomUUID(),
142
- chat: chatId,
143
- thread: threadId,
252
+ const messageId = getActiveRuntime().randomUUID();
253
+ const chatUri = chatResource.buildIri(webId, { id: chatId });
254
+ const threadUri = threadRepository.iriForChat(webId, chatId, threadId);
255
+ await runCliChatProjection({
256
+ action: 'message.create',
257
+ kind: 'insert',
258
+ db,
259
+ webId,
260
+ chatId,
261
+ threadId,
262
+ messageId,
263
+ createdAt: now,
264
+ role: 'user',
265
+ }, () => db.insert(messageResource).values({
266
+ id: messageId,
267
+ chat: chatUri,
268
+ thread: threadUri,
144
269
  maker: webId,
145
270
  role: 'user',
146
271
  content,
147
272
  status: 'sent',
148
273
  createdAt: now,
149
- }).execute();
150
- await updateById(chatResource, chatId, {
274
+ }).execute());
275
+ await runCliChatProjection({
276
+ action: 'chat.activity.update',
277
+ kind: 'update',
278
+ db,
279
+ webId,
280
+ chatId,
281
+ threadId,
282
+ messageId,
283
+ createdAt: now,
284
+ role: 'user',
285
+ }, () => db.updateById(chatResource, chatId, {
151
286
  lastActiveAt: now,
152
287
  lastMessagePreview: content.slice(0, 100),
153
288
  updatedAt: now,
154
- });
289
+ }));
155
290
  await touchThread(session, threadId);
156
291
  }
157
292
  export async function saveAssistantMessage(session, chatId, threadId, content) {
158
293
  const db = await initPodData(session);
159
- const now = new Date();
294
+ const now = getActiveRuntime().now();
160
295
  const webId = session.info.webId;
161
296
  if (!webId) {
162
297
  throw new Error('Missing webId in Solid session');
163
298
  }
164
- const updateById = requireUpdateById(db);
165
- await db.insert(messageResource).values({
166
- id: crypto.randomUUID(),
167
- chat: chatId,
168
- thread: threadId,
169
- maker: buildAgentUri(webId, DEFAULT_AGENT_ID),
299
+ const messageId = getActiveRuntime().randomUUID();
300
+ const chatUri = chatResource.buildIri(webId, { id: chatId });
301
+ const threadUri = threadRepository.iriForChat(webId, chatId, threadId);
302
+ await runCliChatProjection({
303
+ action: 'message.create',
304
+ kind: 'insert',
305
+ db,
306
+ webId,
307
+ chatId,
308
+ threadId,
309
+ messageId,
310
+ createdAt: now,
311
+ role: 'assistant',
312
+ }, () => db.insert(messageResource).values({
313
+ id: messageId,
314
+ chat: chatUri,
315
+ thread: threadUri,
316
+ maker: agentResource.buildIri(webId, { id: DEFAULT_AGENT_ID }),
170
317
  role: 'assistant',
171
318
  content,
172
319
  status: 'sent',
173
320
  createdAt: now,
174
- }).execute();
175
- await updateById(chatResource, chatId, {
321
+ }).execute());
322
+ await runCliChatProjection({
323
+ action: 'chat.activity.update',
324
+ kind: 'update',
325
+ db,
326
+ webId,
327
+ chatId,
328
+ threadId,
329
+ messageId,
330
+ createdAt: now,
331
+ role: 'assistant',
332
+ }, () => db.updateById(chatResource, chatId, {
176
333
  lastActiveAt: now,
177
334
  lastMessagePreview: content.slice(0, 100),
178
335
  updatedAt: now,
179
- });
336
+ }));
180
337
  await touchThread(session, threadId);
181
338
  }
182
339
  export async function loadThread(session, threadId) {
183
340
  const db = await initPodData(session);
184
- const findById = requireFindById(db);
185
- const directChatId = extractChatId(threadId);
341
+ const directChatId = threadRepository.chatIdFromRef(threadId);
186
342
  const directThreadId = extractThreadId(threadId);
187
343
  if (directChatId && directThreadId) {
188
- const resourceId = db.resolveLocatorId(threadResource, {
189
- chat: directChatId,
190
- id: directThreadId,
191
- });
192
- return await findById(threadResource, resourceId);
344
+ const resourceId = threadRepository.idForChat(directChatId, directThreadId);
345
+ return await db.findById(threadResource, resourceId);
193
346
  }
194
- const resourceId = db.resolveLocatorId(threadResource, {
195
- chat: DEFAULT_CHAT_ID,
196
- id: threadId,
197
- });
198
- return await findById(threadResource, resourceId);
347
+ const resourceId = threadRepository.idForChat(DEFAULT_CHAT_ID, threadId);
348
+ return await db.findById(threadResource, resourceId);
199
349
  }
200
350
  export async function getLatestThreadId(session, chatId) {
201
351
  const threads = await listThreads(session, chatId);
@@ -205,4 +355,30 @@ export { toOpenAiMessages, formatThreadLabel };
205
355
  export function isMessageRow(_row) {
206
356
  return true;
207
357
  }
358
+ export const __podChatStoreInternal = {
359
+ resources: {
360
+ agentResource,
361
+ chatResource,
362
+ threadResource,
363
+ messageResource,
364
+ },
365
+ getSyncResults() {
366
+ return [...cliChatSyncResults];
367
+ },
368
+ resetSyncResults() {
369
+ cliChatSyncResults.length = 0;
370
+ cliChatSyncSeq = 0;
371
+ },
372
+ setRuntime(runtime = {}) {
373
+ activeRuntime = {
374
+ ...defaultRuntime,
375
+ ...runtime,
376
+ };
377
+ },
378
+ resetRuntime() {
379
+ activeRuntime = defaultRuntime;
380
+ cliChatSyncResults.length = 0;
381
+ cliChatSyncSeq = 0;
382
+ },
383
+ };
208
384
  //# sourceMappingURL=pod-chat-store.js.map