@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,578 @@
1
+ import { setTimeout as delay } from 'node:timers/promises';
2
+ const WATCH_CHAT_ID = 'linx-watch';
3
+ const WATCH_AGENT_ID = 'linx-watch-assistant';
4
+ const REMOTE_APPROVAL_POLICY_VERSION = 'linx-watch-remote-approval/v1';
5
+ const DEFAULT_REMOTE_APPROVAL_POLL_MS = 1000;
6
+ function createAbortError() {
7
+ const error = new Error('The operation was aborted.');
8
+ error.name = 'AbortError';
9
+ return error;
10
+ }
11
+ async function dynamicImport(specifier) {
12
+ const loader = new Function('modulePath', 'return import(modulePath)');
13
+ return loader(specifier);
14
+ }
15
+ function normalizeString(value) {
16
+ return typeof value === 'string' && value.trim() ? value.trim() : undefined;
17
+ }
18
+ function isRecord(value) {
19
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
20
+ }
21
+ function toIsoString(value, fallback) {
22
+ if (value instanceof Date) {
23
+ return value.toISOString();
24
+ }
25
+ if (typeof value === 'string' && value.trim()) {
26
+ return value;
27
+ }
28
+ return fallback;
29
+ }
30
+ function getPodBaseUrl(webIdOrUri) {
31
+ if (webIdOrUri.includes('/profile/card#me')) {
32
+ return webIdOrUri.replace('/profile/card#me', '').replace(/\/$/, '');
33
+ }
34
+ const match = webIdOrUri.match(/^(https?:\/\/[^?#]+?)(?:\/\.data\/|\/inbox\/)/u);
35
+ if (match) {
36
+ return match[1].replace(/\/$/, '');
37
+ }
38
+ return webIdOrUri.replace(/\/$/, '');
39
+ }
40
+ function buildThreadUri(webId, threadId) {
41
+ return `${getPodBaseUrl(webId)}/.data/chat/${WATCH_CHAT_ID}/index.ttl#${threadId}`;
42
+ }
43
+ function buildApprovalUri(webIdOrUri, approvalId) {
44
+ return `${getPodBaseUrl(webIdOrUri)}/.data/approvals/${approvalId}.ttl`;
45
+ }
46
+ function buildGrantUri(webIdOrUri, grantId) {
47
+ return `${getPodBaseUrl(webIdOrUri)}/settings/autonomy/grants/${grantId}.ttl`;
48
+ }
49
+ function buildAgentUri(webId) {
50
+ return `${getPodBaseUrl(webId)}/.data/agents/${WATCH_AGENT_ID}.ttl`;
51
+ }
52
+ function buildActionUri(request) {
53
+ if (request.kind === 'command-approval') {
54
+ return 'https://undefineds.co/ns#commandExecution';
55
+ }
56
+ if (request.kind === 'file-change-approval') {
57
+ return 'https://undefineds.co/ns#fileChange';
58
+ }
59
+ if (request.kind === 'permissions-approval') {
60
+ return 'https://undefineds.co/ns#permissionRequest';
61
+ }
62
+ return 'https://undefineds.co/ns#runtimeApproval';
63
+ }
64
+ function buildToolName(request) {
65
+ if (request.kind === 'command-approval') {
66
+ return 'commandExecution';
67
+ }
68
+ if (request.kind === 'file-change-approval') {
69
+ return 'fileChange';
70
+ }
71
+ if (request.kind === 'permissions-approval') {
72
+ return 'permissionRequest';
73
+ }
74
+ return 'runtimeApproval';
75
+ }
76
+ function buildRisk(request) {
77
+ if (request.kind === 'permissions-approval') {
78
+ return 'high';
79
+ }
80
+ if (request.kind === 'file-change-approval') {
81
+ return 'high';
82
+ }
83
+ return 'medium';
84
+ }
85
+ function riskScore(risk) {
86
+ switch (risk) {
87
+ case 'low':
88
+ return 1;
89
+ case 'medium':
90
+ return 2;
91
+ case 'high':
92
+ return 3;
93
+ default:
94
+ return 0;
95
+ }
96
+ }
97
+ function buildRequestMessage(request) {
98
+ if (request.kind === 'command-approval') {
99
+ return request.command?.trim() || request.message;
100
+ }
101
+ if (request.kind === 'file-change-approval') {
102
+ return request.reason?.trim() || request.message;
103
+ }
104
+ return request.message;
105
+ }
106
+ function buildRequestAuditContext(record, request) {
107
+ return {
108
+ kind: request.kind,
109
+ message: buildRequestMessage(request),
110
+ ...(request.kind === 'command-approval' && request.command ? { command: request.command } : {}),
111
+ ...(request.kind === 'command-approval' && request.cwd ? { cwd: request.cwd } : {}),
112
+ backend: record.backend,
113
+ sessionId: record.id,
114
+ };
115
+ }
116
+ function extractToolCallId(request) {
117
+ if (!isRecord(request.raw)) {
118
+ return crypto.randomUUID();
119
+ }
120
+ const params = isRecord(request.raw.params) ? request.raw.params : null;
121
+ const toolCall = params && isRecord(params.toolCall) ? params.toolCall : null;
122
+ return normalizeString(toolCall?.toolCallId)
123
+ ?? normalizeString(params?.toolCallId)
124
+ ?? crypto.randomUUID();
125
+ }
126
+ function encodeDecisionReason(decision, note) {
127
+ return JSON.stringify({
128
+ decision,
129
+ ...(note?.trim() ? { note: note.trim() } : {}),
130
+ });
131
+ }
132
+ function parseDecisionReason(value) {
133
+ if (typeof value !== 'string' || !value.trim()) {
134
+ return null;
135
+ }
136
+ try {
137
+ const parsed = JSON.parse(value);
138
+ if (!isRecord(parsed)) {
139
+ return null;
140
+ }
141
+ const decision = normalizeString(parsed.decision);
142
+ if (!decision || !['accept', 'accept_for_session', 'decline', 'cancel'].includes(decision)) {
143
+ return null;
144
+ }
145
+ return {
146
+ decision: decision,
147
+ ...(normalizeString(parsed.note) ? { note: normalizeString(parsed.note) } : {}),
148
+ };
149
+ }
150
+ catch {
151
+ return null;
152
+ }
153
+ }
154
+ function parseRequestAuditContext(value) {
155
+ if (typeof value !== 'string' || !value.trim()) {
156
+ return null;
157
+ }
158
+ try {
159
+ const parsed = JSON.parse(value);
160
+ if (!isRecord(parsed)) {
161
+ return null;
162
+ }
163
+ const kind = normalizeString(parsed.kind);
164
+ const message = normalizeString(parsed.message);
165
+ const backend = normalizeString(parsed.backend);
166
+ const sessionId = normalizeString(parsed.sessionId);
167
+ if (!kind || !message || !backend || !sessionId) {
168
+ return null;
169
+ }
170
+ return {
171
+ kind: kind,
172
+ message,
173
+ backend: backend,
174
+ sessionId,
175
+ ...(normalizeString(parsed.command) ? { command: normalizeString(parsed.command) } : {}),
176
+ ...(normalizeString(parsed.cwd) ? { cwd: normalizeString(parsed.cwd) } : {}),
177
+ };
178
+ }
179
+ catch {
180
+ return null;
181
+ }
182
+ }
183
+ function extractSessionId(sessionUri) {
184
+ if (sessionUri.includes('#')) {
185
+ return sessionUri.split('#').pop() || sessionUri;
186
+ }
187
+ return sessionUri;
188
+ }
189
+ function decisionFromApprovalRow(row) {
190
+ const status = normalizeString(row.status);
191
+ if (status === 'pending') {
192
+ return null;
193
+ }
194
+ const parsed = parseDecisionReason(row.reason);
195
+ if (status === 'rejected') {
196
+ return parsed?.decision === 'cancel' ? 'cancel' : 'decline';
197
+ }
198
+ if (parsed?.decision === 'accept_for_session') {
199
+ return 'accept_for_session';
200
+ }
201
+ return 'accept';
202
+ }
203
+ function requestAuditForApproval(approvalUri, audits) {
204
+ const matches = audits.filter((audit) => audit.approval === approvalUri && audit.action === 'approval_requested');
205
+ matches.sort((left, right) => toIsoString(right.createdAt, '').localeCompare(toIsoString(left.createdAt, '')));
206
+ return matches[0];
207
+ }
208
+ function normalizeApprovalSummary(row, audits) {
209
+ const approvalUri = buildApprovalUri(row.session, row.id);
210
+ const requestAudit = requestAuditForApproval(approvalUri, audits);
211
+ const requestContext = parseRequestAuditContext(requestAudit?.context);
212
+ const createdAt = toIsoString(row.createdAt, new Date(0).toISOString());
213
+ const sessionUri = row.session;
214
+ const decision = decisionFromApprovalRow(row);
215
+ return {
216
+ id: row.id,
217
+ sessionId: extractSessionId(sessionUri),
218
+ sessionUri,
219
+ toolCallId: row.toolCallId,
220
+ toolName: row.toolName,
221
+ risk: normalizeString(row.risk) ?? 'medium',
222
+ status: normalizeString(row.status) ?? 'pending',
223
+ message: requestContext?.message ?? row.toolName,
224
+ ...(requestContext?.command ? { command: requestContext.command } : {}),
225
+ ...(requestContext?.cwd ? { cwd: requestContext.cwd } : {}),
226
+ ...(normalizeString(row.assignedTo) ? { assignedTo: normalizeString(row.assignedTo) } : {}),
227
+ ...(normalizeString(row.decisionBy) ? { decisionBy: normalizeString(row.decisionBy) } : {}),
228
+ ...(decision ? { decision } : {}),
229
+ createdAt,
230
+ ...(row.resolvedAt ? { resolvedAt: toIsoString(row.resolvedAt, createdAt) } : {}),
231
+ };
232
+ }
233
+ function formatSummaryHeadline(summary) {
234
+ return `${summary.id} | ${summary.status} | ${summary.risk} | session=${summary.sessionId}`;
235
+ }
236
+ export function formatRemoteWatchApprovalSummary(summary) {
237
+ const detail = summary.command ?? summary.message;
238
+ const secondary = [
239
+ summary.toolName,
240
+ summary.cwd ? `cwd=${summary.cwd}` : '',
241
+ summary.decision ? `decision=${summary.decision}` : '',
242
+ ].filter(Boolean).join(' | ');
243
+ return [formatSummaryHeadline(summary), ` ${detail}`, secondary ? ` ${secondary}` : ''].filter(Boolean).join('\n');
244
+ }
245
+ export function isRemoteApprovalAbortError(error) {
246
+ return error instanceof Error && error.name === 'AbortError';
247
+ }
248
+ function missingRemoteApprovalCredentialsMessage() {
249
+ return 'LinX remote approval requires `linx login` first.';
250
+ }
251
+ function unsupportedRemoteApprovalAuthMessage() {
252
+ return 'LinX remote approval requires client credentials auth in `~/.linx`.';
253
+ }
254
+ async function createDefaultRuntime() {
255
+ const [credentialsStore, solidAuth, models] = await Promise.all([
256
+ dynamicImport(new URL('../credentials-store.js', import.meta.url).href),
257
+ dynamicImport(new URL('../solid-auth.js', import.meta.url).href),
258
+ dynamicImport(new URL('../models.js', import.meta.url).href),
259
+ ]);
260
+ return {
261
+ loadCredentials: credentialsStore.loadCredentials,
262
+ getClientCredentials: credentialsStore.getClientCredentials,
263
+ authenticate: solidAuth.authenticate,
264
+ createStore(session) {
265
+ const db = models.drizzle(session, {
266
+ logger: false,
267
+ disableInteropDiscovery: true,
268
+ schema: models.solidSchema,
269
+ });
270
+ let initialized = false;
271
+ async function ensureInitialized() {
272
+ if (initialized) {
273
+ return;
274
+ }
275
+ initialized = true;
276
+ await db.init([
277
+ models.approvalTable,
278
+ models.auditTable,
279
+ models.grantTable,
280
+ models.inboxNotificationTable,
281
+ ]).catch(() => undefined);
282
+ }
283
+ return {
284
+ async listApprovals() {
285
+ await ensureInitialized();
286
+ return await db.select().from(models.approvalTable).execute();
287
+ },
288
+ async insertApproval(row) {
289
+ await ensureInitialized();
290
+ await db.insert(models.approvalTable).values(row).execute();
291
+ },
292
+ async updateApproval(id, patch) {
293
+ await ensureInitialized();
294
+ await db.update(models.approvalTable).set(patch).where(models.eq(models.approvalTable.id, id)).execute();
295
+ },
296
+ async listAudits() {
297
+ await ensureInitialized();
298
+ return await db.select().from(models.auditTable).execute();
299
+ },
300
+ async insertAudit(row) {
301
+ await ensureInitialized();
302
+ await db.insert(models.auditTable).values(row).execute();
303
+ },
304
+ async listGrants() {
305
+ await ensureInitialized();
306
+ return await db.select().from(models.grantTable).execute();
307
+ },
308
+ async insertGrant(row) {
309
+ await ensureInitialized();
310
+ await db.insert(models.grantTable).values(row).execute();
311
+ },
312
+ async insertInboxNotification(row) {
313
+ await ensureInitialized();
314
+ await db.insert(models.inboxNotificationTable).values(row).execute();
315
+ },
316
+ };
317
+ },
318
+ sleep(ms) {
319
+ return delay(ms);
320
+ },
321
+ now() {
322
+ return new Date();
323
+ },
324
+ };
325
+ }
326
+ async function withRemoteApprovalStore(runtime, fn) {
327
+ const stored = runtime.loadCredentials();
328
+ if (!stored) {
329
+ throw new Error(missingRemoteApprovalCredentialsMessage());
330
+ }
331
+ const clientCredentials = runtime.getClientCredentials(stored);
332
+ if (!clientCredentials) {
333
+ throw new Error(unsupportedRemoteApprovalAuthMessage());
334
+ }
335
+ const { session } = await runtime.authenticate(clientCredentials.clientId, clientCredentials.clientSecret, stored.url);
336
+ const webId = session.info.webId ?? stored.webId;
337
+ if (!webId) {
338
+ await session.logout().catch(() => undefined);
339
+ throw new Error('Remote approval authentication succeeded without a WebID.');
340
+ }
341
+ try {
342
+ return await fn({
343
+ store: runtime.createStore(session),
344
+ webId,
345
+ stored,
346
+ });
347
+ }
348
+ finally {
349
+ await session.logout().catch(() => undefined);
350
+ }
351
+ }
352
+ export async function createRemoteWatchApproval(options) {
353
+ const activeRuntime = options.runtime ?? await createDefaultRuntime();
354
+ return withRemoteApprovalStore(activeRuntime, async ({ store, webId }) => {
355
+ const approvalId = crypto.randomUUID();
356
+ const now = activeRuntime.now();
357
+ const sessionUri = buildThreadUri(webId, options.record.id);
358
+ const approvalUri = buildApprovalUri(webId, approvalId);
359
+ const toolCallId = extractToolCallId(options.request);
360
+ const requestContext = buildRequestAuditContext(options.record, options.request);
361
+ await store.insertApproval({
362
+ id: approvalId,
363
+ session: sessionUri,
364
+ toolCallId,
365
+ toolName: buildToolName(options.request),
366
+ target: sessionUri,
367
+ action: buildActionUri(options.request),
368
+ risk: buildRisk(options.request),
369
+ status: 'pending',
370
+ assignedTo: webId,
371
+ policyVersion: REMOTE_APPROVAL_POLICY_VERSION,
372
+ createdAt: now,
373
+ });
374
+ await store.insertAudit({
375
+ id: crypto.randomUUID(),
376
+ action: 'approval_requested',
377
+ actor: buildAgentUri(webId),
378
+ actorRole: 'secretary',
379
+ onBehalfOf: webId,
380
+ session: sessionUri,
381
+ toolCallId,
382
+ approval: approvalUri,
383
+ context: JSON.stringify(requestContext),
384
+ policyVersion: REMOTE_APPROVAL_POLICY_VERSION,
385
+ createdAt: now,
386
+ });
387
+ await store.insertInboxNotification({
388
+ id: crypto.randomUUID(),
389
+ actor: buildAgentUri(webId),
390
+ object: approvalUri,
391
+ createdAt: now,
392
+ }).catch(() => undefined);
393
+ return normalizeApprovalSummary({
394
+ id: approvalId,
395
+ session: sessionUri,
396
+ toolCallId,
397
+ toolName: buildToolName(options.request),
398
+ target: sessionUri,
399
+ action: buildActionUri(options.request),
400
+ risk: buildRisk(options.request),
401
+ status: 'pending',
402
+ assignedTo: webId,
403
+ policyVersion: REMOTE_APPROVAL_POLICY_VERSION,
404
+ createdAt: now,
405
+ }, [{
406
+ id: crypto.randomUUID(),
407
+ action: 'approval_requested',
408
+ actor: buildAgentUri(webId),
409
+ actorRole: 'secretary',
410
+ onBehalfOf: webId,
411
+ session: sessionUri,
412
+ toolCallId,
413
+ approval: approvalUri,
414
+ context: JSON.stringify(requestContext),
415
+ policyVersion: REMOTE_APPROVAL_POLICY_VERSION,
416
+ createdAt: now,
417
+ }]);
418
+ });
419
+ }
420
+ export async function waitForRemoteWatchApproval(options) {
421
+ const activeRuntime = options.runtime ?? await createDefaultRuntime();
422
+ return withRemoteApprovalStore(activeRuntime, async ({ store }) => {
423
+ while (true) {
424
+ if (options.signal?.aborted) {
425
+ throw createAbortError();
426
+ }
427
+ const approvals = await store.listApprovals();
428
+ const row = approvals.find((entry) => entry.id === options.approvalId);
429
+ if (!row) {
430
+ throw new Error(`Remote approval disappeared before resolution: ${options.approvalId}`);
431
+ }
432
+ const decision = decisionFromApprovalRow(row);
433
+ if (decision) {
434
+ return decision;
435
+ }
436
+ await activeRuntime.sleep(options.pollMs ?? DEFAULT_REMOTE_APPROVAL_POLL_MS);
437
+ }
438
+ });
439
+ }
440
+ export async function requestRemoteWatchApproval(options) {
441
+ const activeRuntime = options.runtime ?? await createDefaultRuntime();
442
+ const delegated = await withRemoteApprovalStore(activeRuntime, async ({ store, webId }) => {
443
+ const grants = await store.listGrants();
444
+ const requestAction = buildActionUri(options.request);
445
+ const requestTarget = buildThreadUri(webId, options.record.id);
446
+ const requestRisk = buildRisk(options.request);
447
+ return grants.some((grant) => (grant.effect === 'allow'
448
+ && grant.action === requestAction
449
+ && grant.target === requestTarget
450
+ && riskScore(typeof grant.riskCeiling === 'string' ? grant.riskCeiling : undefined) >= riskScore(requestRisk)
451
+ && !grant.revokedAt));
452
+ });
453
+ if (delegated) {
454
+ return 'accept_for_session';
455
+ }
456
+ const summary = await createRemoteWatchApproval({
457
+ record: options.record,
458
+ request: options.request,
459
+ runtime: activeRuntime,
460
+ });
461
+ return waitForRemoteWatchApproval({
462
+ approvalId: summary.id,
463
+ pollMs: options.pollMs,
464
+ signal: options.signal,
465
+ runtime: activeRuntime,
466
+ });
467
+ }
468
+ export async function listRemoteWatchApprovals(options = {}) {
469
+ const activeRuntime = options.runtime ?? await createDefaultRuntime();
470
+ const requestedStatus = options.status ?? 'pending';
471
+ return withRemoteApprovalStore(activeRuntime, async ({ store, webId }) => {
472
+ const [approvals, audits] = await Promise.all([
473
+ store.listApprovals(),
474
+ store.listAudits(),
475
+ ]);
476
+ return approvals
477
+ .map((row) => normalizeApprovalSummary(row, audits))
478
+ .filter((summary) => !summary.assignedTo || summary.assignedTo === webId)
479
+ .filter((summary) => requestedStatus === 'all' || summary.status === requestedStatus)
480
+ .sort((left, right) => right.createdAt.localeCompare(left.createdAt));
481
+ });
482
+ }
483
+ export async function resolveRemoteWatchApproval(options) {
484
+ const activeRuntime = options.runtime ?? await createDefaultRuntime();
485
+ return withRemoteApprovalStore(activeRuntime, async ({ store, webId }) => {
486
+ const approvals = await store.listApprovals();
487
+ const row = approvals.find((entry) => entry.id === options.approvalId);
488
+ if (!row) {
489
+ throw new Error(`Remote approval not found: ${options.approvalId}`);
490
+ }
491
+ if (row.status !== 'pending') {
492
+ const audits = await store.listAudits();
493
+ return normalizeApprovalSummary(row, audits);
494
+ }
495
+ const now = activeRuntime.now();
496
+ const approvalUri = buildApprovalUri(row.session, row.id);
497
+ const nextStatus = options.decision === 'accept' || options.decision === 'accept_for_session'
498
+ ? 'approved'
499
+ : 'rejected';
500
+ await store.updateApproval(row.id, {
501
+ status: nextStatus,
502
+ decisionBy: webId,
503
+ decisionRole: 'human',
504
+ onBehalfOf: webId,
505
+ reason: encodeDecisionReason(options.decision, options.note),
506
+ resolvedAt: now,
507
+ });
508
+ await store.insertAudit({
509
+ id: crypto.randomUUID(),
510
+ action: nextStatus === 'approved' ? 'approval_approved' : 'approval_rejected',
511
+ actor: webId,
512
+ actorRole: 'human',
513
+ onBehalfOf: webId,
514
+ session: row.session,
515
+ toolCallId: row.toolCallId,
516
+ approval: approvalUri,
517
+ context: JSON.stringify({
518
+ decision: options.decision,
519
+ ...(options.note?.trim() ? { note: options.note.trim() } : {}),
520
+ }),
521
+ policyVersion: REMOTE_APPROVAL_POLICY_VERSION,
522
+ createdAt: now,
523
+ });
524
+ if (options.decision === 'accept_for_session') {
525
+ const grantId = crypto.randomUUID();
526
+ await store.insertGrant({
527
+ id: grantId,
528
+ target: row.target,
529
+ action: row.action,
530
+ effect: 'allow',
531
+ riskCeiling: row.risk,
532
+ decisionBy: webId,
533
+ decisionRole: 'human',
534
+ onBehalfOf: webId,
535
+ createdAt: now,
536
+ });
537
+ await store.insertInboxNotification({
538
+ id: crypto.randomUUID(),
539
+ actor: webId,
540
+ object: buildGrantUri(row.session, grantId),
541
+ createdAt: now,
542
+ }).catch(() => undefined);
543
+ }
544
+ await store.insertInboxNotification({
545
+ id: crypto.randomUUID(),
546
+ actor: webId,
547
+ object: approvalUri,
548
+ createdAt: now,
549
+ }).catch(() => undefined);
550
+ const nextRow = {
551
+ ...row,
552
+ status: nextStatus,
553
+ decisionBy: webId,
554
+ decisionRole: 'human',
555
+ onBehalfOf: webId,
556
+ reason: encodeDecisionReason(options.decision, options.note),
557
+ resolvedAt: now,
558
+ };
559
+ const audits = await store.listAudits();
560
+ return normalizeApprovalSummary(nextRow, audits);
561
+ });
562
+ }
563
+ export const __podApprovalInternal = {
564
+ createAbortError,
565
+ buildActionUri,
566
+ buildRequestAuditContext,
567
+ buildRisk,
568
+ buildToolName,
569
+ extractToolCallId,
570
+ decisionFromApprovalRow,
571
+ encodeDecisionReason,
572
+ formatSummaryHeadline,
573
+ isRemoteApprovalAbortError,
574
+ normalizeApprovalSummary,
575
+ parseDecisionReason,
576
+ parseRequestAuditContext,
577
+ };
578
+ //# sourceMappingURL=pod-approval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pod-approval.js","sourceRoot":"","sources":["../../../src/lib/watch/pod-approval.ts"],"names":[],"mappings":"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"}