@undefineds.co/linx 0.2.1

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 (100) hide show
  1. package/README.md +91 -0
  2. package/dist/index.js +578 -0
  3. package/dist/index.js.map +1 -0
  4. package/dist/lib/account-api.js +100 -0
  5. package/dist/lib/account-api.js.map +1 -0
  6. package/dist/lib/account-session.js +30 -0
  7. package/dist/lib/account-session.js.map +1 -0
  8. package/dist/lib/ai-command.js +411 -0
  9. package/dist/lib/ai-command.js.map +1 -0
  10. package/dist/lib/chat-api.js +122 -0
  11. package/dist/lib/chat-api.js.map +1 -0
  12. package/dist/lib/codex-plugin/bridge.js +109 -0
  13. package/dist/lib/codex-plugin/bridge.js.map +1 -0
  14. package/dist/lib/codex-plugin/codex-native-proxy.js +358 -0
  15. package/dist/lib/codex-plugin/codex-native-proxy.js.map +1 -0
  16. package/dist/lib/codex-plugin/index.js +4 -0
  17. package/dist/lib/codex-plugin/index.js.map +1 -0
  18. package/dist/lib/codex-plugin/runner.js +38 -0
  19. package/dist/lib/codex-plugin/runner.js.map +1 -0
  20. package/dist/lib/credentials-store.js +74 -0
  21. package/dist/lib/credentials-store.js.map +1 -0
  22. package/dist/lib/default-model.js +8 -0
  23. package/dist/lib/default-model.js.map +1 -0
  24. package/dist/lib/login-command.js +51 -0
  25. package/dist/lib/login-command.js.map +1 -0
  26. package/dist/lib/models.js +6 -0
  27. package/dist/lib/models.js.map +1 -0
  28. package/dist/lib/oidc-auth.js +451 -0
  29. package/dist/lib/oidc-auth.js.map +1 -0
  30. package/dist/lib/oidc-session-storage.js +37 -0
  31. package/dist/lib/oidc-session-storage.js.map +1 -0
  32. package/dist/lib/pi-adapter/auth.js +38 -0
  33. package/dist/lib/pi-adapter/auth.js.map +1 -0
  34. package/dist/lib/pi-adapter/branding.js +239 -0
  35. package/dist/lib/pi-adapter/branding.js.map +1 -0
  36. package/dist/lib/pi-adapter/index.js +4 -0
  37. package/dist/lib/pi-adapter/index.js.map +1 -0
  38. package/dist/lib/pi-adapter/interactive.js +63 -0
  39. package/dist/lib/pi-adapter/interactive.js.map +1 -0
  40. package/dist/lib/pi-adapter/runtime.js +271 -0
  41. package/dist/lib/pi-adapter/runtime.js.map +1 -0
  42. package/dist/lib/pi-adapter/stream.js +314 -0
  43. package/dist/lib/pi-adapter/stream.js.map +1 -0
  44. package/dist/lib/pi-adapter/theme.js +84 -0
  45. package/dist/lib/pi-adapter/theme.js.map +1 -0
  46. package/dist/lib/pod-chat-store.js +200 -0
  47. package/dist/lib/pod-chat-store.js.map +1 -0
  48. package/dist/lib/profile-identity.js +116 -0
  49. package/dist/lib/profile-identity.js.map +1 -0
  50. package/dist/lib/prompt.js +82 -0
  51. package/dist/lib/prompt.js.map +1 -0
  52. package/dist/lib/runtime-target.js +12 -0
  53. package/dist/lib/runtime-target.js.map +1 -0
  54. package/dist/lib/solid-auth.js +55 -0
  55. package/dist/lib/solid-auth.js.map +1 -0
  56. package/dist/lib/thread-utils.js +12 -0
  57. package/dist/lib/thread-utils.js.map +1 -0
  58. package/dist/lib/watch/archive.js +110 -0
  59. package/dist/lib/watch/archive.js.map +1 -0
  60. package/dist/lib/watch/auth.js +56 -0
  61. package/dist/lib/watch/auth.js.map +1 -0
  62. package/dist/lib/watch/codex-composer.js +219 -0
  63. package/dist/lib/watch/codex-composer.js.map +1 -0
  64. package/dist/lib/watch/codex-footer.js +88 -0
  65. package/dist/lib/watch/codex-footer.js.map +1 -0
  66. package/dist/lib/watch/codex-overlay.js +154 -0
  67. package/dist/lib/watch/codex-overlay.js.map +1 -0
  68. package/dist/lib/watch/codex-request-form.js +341 -0
  69. package/dist/lib/watch/codex-request-form.js.map +1 -0
  70. package/dist/lib/watch/codex-request-input.js +187 -0
  71. package/dist/lib/watch/codex-request-input.js.map +1 -0
  72. package/dist/lib/watch/display.js +1514 -0
  73. package/dist/lib/watch/display.js.map +1 -0
  74. package/dist/lib/watch/format.js +161 -0
  75. package/dist/lib/watch/format.js.map +1 -0
  76. package/dist/lib/watch/hooks/claude.js +12 -0
  77. package/dist/lib/watch/hooks/claude.js.map +1 -0
  78. package/dist/lib/watch/hooks/codebuddy.js +18 -0
  79. package/dist/lib/watch/hooks/codebuddy.js.map +1 -0
  80. package/dist/lib/watch/hooks/codex.js +13 -0
  81. package/dist/lib/watch/hooks/codex.js.map +1 -0
  82. package/dist/lib/watch/hooks/index.js +24 -0
  83. package/dist/lib/watch/hooks/index.js.map +1 -0
  84. package/dist/lib/watch/hooks/shared.js +19 -0
  85. package/dist/lib/watch/hooks/shared.js.map +1 -0
  86. package/dist/lib/watch/index.js +10 -0
  87. package/dist/lib/watch/index.js.map +1 -0
  88. package/dist/lib/watch/pod-ai.js +168 -0
  89. package/dist/lib/watch/pod-ai.js.map +1 -0
  90. package/dist/lib/watch/pod-approval.js +578 -0
  91. package/dist/lib/watch/pod-approval.js.map +1 -0
  92. package/dist/lib/watch/pod-persistence.js +226 -0
  93. package/dist/lib/watch/pod-persistence.js.map +1 -0
  94. package/dist/lib/watch/runner.js +1124 -0
  95. package/dist/lib/watch/runner.js.map +1 -0
  96. package/dist/lib/watch/types.js +2 -0
  97. package/dist/lib/watch/types.js.map +1 -0
  98. package/dist/watch-cli.js +142 -0
  99. package/dist/watch-cli.js.map +1 -0
  100. package/package.json +38 -0
@@ -0,0 +1,226 @@
1
+ import { buildWatchThreadMetadata, buildWatchTranscriptMessages, } from '@undefineds.co/models/watch';
2
+ import { loadWatchEvents } from './archive.js';
3
+ const WATCH_CHAT_ID = 'linx-watch';
4
+ const WATCH_CHAT_TITLE = 'LinX Watch';
5
+ const WATCH_AGENT_ID = 'linx-watch-assistant';
6
+ async function dynamicImport(specifier) {
7
+ const loader = new Function('modulePath', 'return import(modulePath)');
8
+ return loader(specifier);
9
+ }
10
+ async function createDefaultRuntime() {
11
+ const [credentialsStore, solidAuth, models] = await Promise.all([
12
+ dynamicImport(new URL('../credentials-store.js', import.meta.url).href),
13
+ dynamicImport(new URL('../solid-auth.js', import.meta.url).href),
14
+ dynamicImport(new URL('../models.js', import.meta.url).href),
15
+ ]);
16
+ return {
17
+ loadCredentials: credentialsStore.loadCredentials,
18
+ getClientCredentials: credentialsStore.getClientCredentials,
19
+ authenticate: solidAuth.authenticate,
20
+ createDb(session) {
21
+ return models.drizzle(session, {
22
+ logger: false,
23
+ disableInteropDiscovery: true,
24
+ schema: models.solidSchema,
25
+ });
26
+ },
27
+ chatTable: models.chatTable,
28
+ threadTable: models.threadTable,
29
+ messageTable: models.messageTable,
30
+ agentTable: models.agentTable,
31
+ loadWatchEvents,
32
+ };
33
+ }
34
+ function normalizeTitle(text, width = 72) {
35
+ const normalized = text.replace(/\s+/g, ' ').trim();
36
+ if (!normalized) {
37
+ return 'Watch Session';
38
+ }
39
+ if (normalized.length <= width) {
40
+ return normalized;
41
+ }
42
+ return `${normalized.slice(0, Math.max(0, width - 3))}...`;
43
+ }
44
+ function getPodBaseUrl(webId) {
45
+ return webId.replace('/profile/card#me', '').replace(/\/$/, '');
46
+ }
47
+ function buildPodIri(webId, relativeUri) {
48
+ if (/^https?:\/\//.test(relativeUri))
49
+ return relativeUri;
50
+ return new URL(relativeUri.replace(/^\//, ''), `${getPodBaseUrl(webId)}/`).toString();
51
+ }
52
+ function resolveRowIri(webId, table, id) {
53
+ const relativeUri = typeof table.resolveUri === 'function' ? table.resolveUri(id) : id;
54
+ return buildPodIri(webId, relativeUri);
55
+ }
56
+ function whereByStorageId(webId, table, query, id) {
57
+ const iri = resolveRowIri(webId, table, id);
58
+ if (typeof query.whereByIri === 'function') {
59
+ return query.whereByIri(iri);
60
+ }
61
+ return query.where({ id });
62
+ }
63
+ function buildThreadUri(webId, chatId, threadId) {
64
+ return `${getPodBaseUrl(webId)}/.data/chat/${chatId}/index.ttl#${threadId}`;
65
+ }
66
+ function buildAgentUri(webId, agentId) {
67
+ return `${getPodBaseUrl(webId)}/.data/agents/${agentId}.ttl`;
68
+ }
69
+ function buildWatchConversationThreadTitle(record, transcript = []) {
70
+ const firstUserTurn = transcript.find((message) => message.role === 'user')?.content;
71
+ const base = firstUserTurn?.trim() || record.prompt?.trim() || `${record.backend} watch`;
72
+ return normalizeTitle(`${record.backend} · ${base}`);
73
+ }
74
+ function buildWatchConversationChatRow(record, lastPreview) {
75
+ const startedAt = new Date(record.startedAt);
76
+ const updatedAt = record.endedAt ? new Date(record.endedAt) : startedAt;
77
+ return {
78
+ id: WATCH_CHAT_ID,
79
+ title: WATCH_CHAT_TITLE,
80
+ participants: [],
81
+ lastActiveAt: updatedAt,
82
+ lastMessagePreview: lastPreview ? normalizeTitle(lastPreview, 100) : undefined,
83
+ createdAt: startedAt,
84
+ updatedAt,
85
+ };
86
+ }
87
+ function buildWatchConversationThreadRow(record, transcript = []) {
88
+ const startedAt = new Date(record.startedAt);
89
+ const updatedAt = record.endedAt ? new Date(record.endedAt) : startedAt;
90
+ return {
91
+ id: record.id,
92
+ chat: WATCH_CHAT_ID,
93
+ title: buildWatchConversationThreadTitle(record, transcript),
94
+ metadata: buildWatchThreadMetadata(record),
95
+ createdAt: startedAt,
96
+ updatedAt,
97
+ };
98
+ }
99
+ function buildWatchConversationMessages(record, webId, entries) {
100
+ const transcript = buildWatchTranscriptMessages(entries);
101
+ const threadUri = buildThreadUri(webId, WATCH_CHAT_ID, record.id);
102
+ const agentUri = buildAgentUri(webId, WATCH_AGENT_ID);
103
+ return transcript.map((message, index) => ({
104
+ id: `${record.id}-m${String(index + 1).padStart(4, '0')}`,
105
+ chat: WATCH_CHAT_ID,
106
+ thread: record.id,
107
+ maker: message.role === 'user' ? webId : agentUri,
108
+ role: message.role,
109
+ content: message.content,
110
+ status: 'sent',
111
+ createdAt: new Date(message.createdAt),
112
+ }));
113
+ }
114
+ async function selectById(db, webId, table, id) {
115
+ if (typeof db.findByIri === 'function') {
116
+ return await db.findByIri(table, resolveRowIri(webId, table, id));
117
+ }
118
+ const rows = await db.select().from(table).execute();
119
+ return rows.find((row) => row?.id === id) ?? null;
120
+ }
121
+ async function ensureWatchConversationChat(db, runtime, webId, row) {
122
+ const existing = await selectById(db, webId, runtime.chatTable, WATCH_CHAT_ID);
123
+ if (!existing) {
124
+ await db.insert(runtime.chatTable).values(row).execute();
125
+ return;
126
+ }
127
+ await whereByStorageId(webId, runtime.chatTable, db.update(runtime.chatTable).set({
128
+ title: row.title,
129
+ lastActiveAt: row.lastActiveAt,
130
+ lastMessagePreview: row.lastMessagePreview,
131
+ updatedAt: row.updatedAt,
132
+ }), WATCH_CHAT_ID).execute();
133
+ }
134
+ async function ensureWatchConversationAgent(db, runtime, webId, record) {
135
+ const existing = await selectById(db, webId, runtime.agentTable, WATCH_AGENT_ID);
136
+ const now = record.endedAt ? new Date(record.endedAt) : new Date(record.startedAt);
137
+ if (!existing) {
138
+ await db.insert(runtime.agentTable).values({
139
+ id: WATCH_AGENT_ID,
140
+ name: 'Secretary AI',
141
+ provider: 'linx',
142
+ model: record.model ?? record.backend,
143
+ createdAt: now,
144
+ updatedAt: now,
145
+ }).execute();
146
+ return;
147
+ }
148
+ await whereByStorageId(webId, runtime.agentTable, db.update(runtime.agentTable).set({
149
+ provider: 'linx',
150
+ model: record.model ?? record.backend,
151
+ updatedAt: now,
152
+ }), WATCH_AGENT_ID).execute();
153
+ }
154
+ async function upsertWatchConversationThread(db, runtime, webId, row) {
155
+ const threadId = row.id;
156
+ if (!threadId) {
157
+ return;
158
+ }
159
+ const existing = await selectById(db, webId, runtime.threadTable, threadId);
160
+ if (!existing) {
161
+ await db.insert(runtime.threadTable).values(row).execute();
162
+ return;
163
+ }
164
+ await whereByStorageId(webId, runtime.threadTable, db.update(runtime.threadTable).set({
165
+ title: row.title,
166
+ metadata: row.metadata,
167
+ updatedAt: row.updatedAt,
168
+ }), threadId).execute();
169
+ }
170
+ async function upsertWatchConversationMessages(db, runtime, webId, rows) {
171
+ for (const row of rows) {
172
+ const existing = await selectById(db, webId, runtime.messageTable, row.id);
173
+ if (!existing) {
174
+ await db.insert(runtime.messageTable).values(row).execute();
175
+ continue;
176
+ }
177
+ await whereByStorageId(webId, runtime.messageTable, db.update(runtime.messageTable).set({
178
+ role: row.role,
179
+ maker: row.maker,
180
+ content: row.content,
181
+ status: row.status,
182
+ createdAt: row.createdAt,
183
+ }), row.id).execute();
184
+ }
185
+ }
186
+ export async function persistWatchConversationToPod(record, runtime) {
187
+ const activeRuntime = runtime ?? await createDefaultRuntime();
188
+ const stored = activeRuntime.loadCredentials();
189
+ if (!stored) {
190
+ return false;
191
+ }
192
+ const clientCredentials = activeRuntime.getClientCredentials(stored);
193
+ if (!clientCredentials) {
194
+ return false;
195
+ }
196
+ const { session } = await activeRuntime.authenticate(clientCredentials.clientId, clientCredentials.clientSecret, stored.url);
197
+ try {
198
+ const db = activeRuntime.createDb(session);
199
+ const entries = activeRuntime.loadWatchEvents(record.id);
200
+ const transcriptRows = buildWatchConversationMessages(record, stored.webId, entries);
201
+ const lastPreview = transcriptRows.at(-1)?.content;
202
+ await db.init([
203
+ activeRuntime.chatTable,
204
+ activeRuntime.threadTable,
205
+ activeRuntime.messageTable,
206
+ activeRuntime.agentTable,
207
+ ]).catch(() => undefined);
208
+ await ensureWatchConversationChat(db, activeRuntime, stored.webId, buildWatchConversationChatRow(record, lastPreview));
209
+ await ensureWatchConversationAgent(db, activeRuntime, stored.webId, record);
210
+ await upsertWatchConversationThread(db, activeRuntime, stored.webId, buildWatchConversationThreadRow(record, transcriptRows));
211
+ await upsertWatchConversationMessages(db, activeRuntime, stored.webId, transcriptRows);
212
+ return true;
213
+ }
214
+ finally {
215
+ await session.logout().catch(() => undefined);
216
+ }
217
+ }
218
+ export const __podPersistenceInternal = {
219
+ WATCH_AGENT_ID,
220
+ WATCH_CHAT_ID,
221
+ WATCH_CHAT_TITLE,
222
+ buildWatchConversationMessages,
223
+ buildWatchConversationThreadRow,
224
+ buildWatchConversationThreadTitle,
225
+ };
226
+ //# sourceMappingURL=pod-persistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pod-persistence.js","sourceRoot":"","sources":["../../../src/lib/watch/pod-persistence.ts"],"names":[],"mappings":"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"}