@relayhistory/capture 0.0.0 → 0.18.8

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.
package/dist/plugin.js ADDED
@@ -0,0 +1,452 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { readFile } from 'node:fs/promises';
3
+ import { createHistoryDelivery, DEFAULT_DELIVERY_LIMITS, HistoryDeliveryError, InvalidArgumentError, RelayHistoryError, isCatalogSource, CATALOG_SOURCES, } from 'ai-hist';
4
+ import { helperRequest } from './helper.js';
5
+ import { accessToken, login, replay, getSessionThread as getLegacySessionThread, } from './cloud-client.js';
6
+ const ordinal = (left, right) => (left < right ? -1 : left > right ? 1 : 0);
7
+ const MAPPING = 'relayhistory-delivery-v1';
8
+ export function deliveryAccount(options = {}) {
9
+ return helperRequest('deliveryAccount', { baseUrl: options.baseUrl }, options);
10
+ }
11
+ export function readDeliveredHistory(query, options = {}) {
12
+ return helperRequest('deliveryRead', { baseUrl: options.baseUrl, readOptions: query }, options);
13
+ }
14
+ /** Restart each traversal from the beginning: the live listing is not a change feed. */
15
+ export async function* deliveredHistory(query, options = {}) {
16
+ let cursor;
17
+ const seen = new Set();
18
+ do {
19
+ const page = await readDeliveredHistory({ ...query, cursor }, options);
20
+ if (page.protocolVersion !== 1 || page.listing !== 'live' || !Array.isArray(page.records))
21
+ throw new RelayHistoryError('Invalid delivery read response', 'HISTORY_PLUGIN_PROTOCOL_FAILED');
22
+ for (const record of page.records)
23
+ yield record;
24
+ cursor = page.nextCursor ?? undefined;
25
+ if (cursor && seen.has(cursor))
26
+ throw new RelayHistoryError('Delivery listing cursor repeated', 'HISTORY_PLUGIN_PROTOCOL_FAILED');
27
+ if (cursor)
28
+ seen.add(cursor);
29
+ } while (cursor);
30
+ }
31
+ export function projectDeliveredTranscript(records) {
32
+ const available = canonicalDeliveredEvidence(records).filter((record) => record.operation === 'upsert' && record.payload && typeof record.payload === 'object');
33
+ const events = available.filter((record) => record.kind === 'session_event' &&
34
+ typeof record.payload.text === 'string');
35
+ const selected = events.length ? events : available.filter((record) => record.kind === 'history');
36
+ const seen = new Set();
37
+ return selected
38
+ .map((record) => {
39
+ const payload = record.payload;
40
+ return {
41
+ originId: record.origin_id,
42
+ recordId: record.record_id,
43
+ revisionId: record.revision_id,
44
+ eventId: typeof payload.event_uid === 'string' ? payload.event_uid : null,
45
+ timestampMs: typeof payload.ts_ms === 'number'
46
+ ? payload.ts_ms
47
+ : typeof payload.timestamp_ms === 'number'
48
+ ? payload.timestamp_ms
49
+ : null,
50
+ role: typeof payload.role === 'string' ? payload.role : 'user',
51
+ text: String(record.kind === 'history' ? (payload.prompt ?? '') : (payload.text ?? '')),
52
+ representation: record.kind,
53
+ };
54
+ })
55
+ .sort((a, b) => (a.timestampMs ?? Number.MAX_SAFE_INTEGER) - (b.timestampMs ?? Number.MAX_SAFE_INTEGER) ||
56
+ ordinal(a.originId, b.originId) ||
57
+ ordinal(a.recordId, b.recordId))
58
+ .filter((row) => {
59
+ const key = row.eventId ?? JSON.stringify([row.originId, row.recordId]);
60
+ if (seen.has(key))
61
+ return false;
62
+ seen.add(key);
63
+ return true;
64
+ });
65
+ }
66
+ export async function getDeliveredSession(query, options = {}) {
67
+ const expectedAccount = options.expectedAccount ?? (await deliveryAccount(options));
68
+ const records = [];
69
+ for await (const record of deliveredHistory({ ...query, expectedAccount }, options))
70
+ records.push(record);
71
+ return { records, transcript: projectDeliveredTranscript(records), listing: 'live' };
72
+ }
73
+ /** Both components use one pinned account. Legacy reads cannot rotate credentials. */
74
+ export async function getSessionThreadWithHistory(query, options = {}) {
75
+ const resolved = options.resolveSession
76
+ ? await options.resolveSession(options.baseUrl)
77
+ : await helperRequest('cloudResolveSession', { baseUrl: options.baseUrl, now: Date.now() }, options);
78
+ if (!resolved.auth?.orgId)
79
+ throw new HistoryDeliveryError('authentication_required');
80
+ const auth = resolved.auth;
81
+ const expectedAccount = 'relayhistory:' +
82
+ createHash('sha256')
83
+ .update(JSON.stringify([auth.orgId, auth.workspaceId ?? '']))
84
+ .digest('hex');
85
+ if (options.expectedAccount && options.expectedAccount !== expectedAccount)
86
+ throw new HistoryDeliveryError('permission_denied');
87
+ const history = await getDeliveredSession(query, { ...options, expectedAccount });
88
+ let legacyStatus = { available: true };
89
+ let thread;
90
+ try {
91
+ thread = await getLegacySessionThread(query, {
92
+ ...options,
93
+ resolveSession: async () => ({ auth }),
94
+ });
95
+ }
96
+ catch (error) {
97
+ if (!(error instanceof RelayHistoryError))
98
+ throw error;
99
+ legacyStatus = { available: false, code: error.code };
100
+ thread = { session: null, outcomes: [], links: [], nextCursor: null };
101
+ }
102
+ return {
103
+ ...thread,
104
+ legacyStatus,
105
+ deliveredHistory: history.records,
106
+ transcript: history.transcript,
107
+ historyListing: history.listing,
108
+ };
109
+ }
110
+ export function legacySchedules(options = {}) {
111
+ return helperRequest('deliveryMigrationStatus', {}, options);
112
+ }
113
+ /** Explicit command pre-check. Delivery itself rechecks this in the helper,
114
+ * per dispatch, where a later install cannot race the decision. */
115
+ async function requireMigration(options) {
116
+ const result = await legacySchedules(options);
117
+ if (result.state === 'active' ||
118
+ (result.state === 'unknown' && options.acknowledgeUninspectedLegacySchedules !== true))
119
+ throw new HistoryDeliveryError('permission_denied');
120
+ }
121
+ function classified(error) {
122
+ if (error instanceof HistoryDeliveryError)
123
+ throw error;
124
+ // A deterministic helper envelope/input rejection cannot recover on retry.
125
+ if (error instanceof InvalidArgumentError)
126
+ throw new HistoryDeliveryError('invalid_payload');
127
+ if (error instanceof RelayHistoryError && error.code.startsWith('DELIVERY_')) {
128
+ const failure = error.code.slice(9).toLowerCase();
129
+ if ([
130
+ 'transient',
131
+ 'rate_limited',
132
+ 'authentication_required',
133
+ 'permission_denied',
134
+ 'invalid_payload',
135
+ 'unsupported_evidence',
136
+ 'mapping_version_mismatch',
137
+ ].includes(failure))
138
+ throw new HistoryDeliveryError(failure);
139
+ }
140
+ throw new HistoryDeliveryError(error instanceof RelayHistoryError && error.code === 'CLOUD_MIGRATION_REQUIRED'
141
+ ? 'permission_denied'
142
+ : 'transient');
143
+ }
144
+ export function relayHistoryInstance(options = {}) {
145
+ const endpoint = new URL(options.baseUrl ?? 'https://history.agentrelay.com');
146
+ endpoint.hash = '';
147
+ endpoint.search = '';
148
+ const canonical = endpoint.toString().replace(/\/+$/, '');
149
+ return `${options.instanceId ?? 'default'}:${createHash('sha256').update(canonical).digest('hex').slice(0, 32)}`;
150
+ }
151
+ /** What this configuration asserts about the generation it delivers to. The
152
+ * helper enforces them; an omitted assertion is not checked there either. */
153
+ function guards(options) {
154
+ return {
155
+ expectedAccount: options.expectedAccount,
156
+ instanceId: relayHistoryInstance(options),
157
+ acknowledgeUninspectedSchedules: options.acknowledgeUninspectedLegacySchedules === true,
158
+ };
159
+ }
160
+ export function relayHistoryDestination(options = {}) {
161
+ options = { ...options, baseUrl: options.baseUrl ?? 'https://history.agentrelay.com' };
162
+ return {
163
+ id: 'relayhistory',
164
+ mappingVersion: MAPPING,
165
+ idempotency: 'revision',
166
+ orderedRevisions: true,
167
+ supportsTombstones: true,
168
+ supportedKinds: [
169
+ 'history',
170
+ 'session_event',
171
+ 'tool_call',
172
+ 'file_edit',
173
+ 'session',
174
+ 'presence',
175
+ 'relationship',
176
+ 'commit_link',
177
+ 'trajectory',
178
+ 'source_observation',
179
+ 'observation_evidence',
180
+ ],
181
+ // The legacy-scheduler guard and the account/instance assertions live in
182
+ // the helper's receiver, so this plugin and the probe recheck them
183
+ // identically before mapping and again before transport.
184
+ prepare: async (batch, { signal }) => {
185
+ try {
186
+ const value = await helperRequest('deliveryPrepare', { batch, ...guards(options) }, { ...options, signal });
187
+ return { body: value.body, content_type: value.content_type };
188
+ }
189
+ catch (error) {
190
+ return classified(error);
191
+ }
192
+ },
193
+ send: async (prepared, { signal, batch }) => {
194
+ try {
195
+ return await helperRequest('deliverySend', { baseUrl: options.baseUrl, prepared, batch, ...guards(options) }, { ...options, signal });
196
+ }
197
+ catch (error) {
198
+ return classified(error);
199
+ }
200
+ },
201
+ };
202
+ }
203
+ /** Cross-origin revisions are incomparable. Pick a stable origin/record winner
204
+ * for each canonical identity; readback still exposes every original record. */
205
+ export function canonicalDeliveredEvidence(rows) {
206
+ const keys = {
207
+ history: ['source', 'timestamp_ms', 'prompt'],
208
+ session_event: ['source', 'session_id', 'event_uid'],
209
+ tool_call: ['source', 'session_id', 'tool_use_id'],
210
+ file_edit: ['source', 'session_id', 'tool_use_id'],
211
+ relationship: ['source', 'parent_session_id', 'relationship_uid'],
212
+ commit_link: ['source', 'session_id', 'commit_sha', 'match_method'],
213
+ };
214
+ const selected = new Map();
215
+ for (const row of [...rows].sort((a, b) => ordinal(a.origin_id, b.origin_id) || ordinal(a.record_id, b.record_id))) {
216
+ if (row.operation !== 'upsert' ||
217
+ !keys[row.kind] ||
218
+ !row.payload ||
219
+ typeof row.payload !== 'object')
220
+ continue;
221
+ const payload = row.payload;
222
+ const key = JSON.stringify([
223
+ row.kind,
224
+ ...keys[row.kind].map((field) => payload[field] ?? null),
225
+ ]);
226
+ if (!selected.has(key))
227
+ selected.set(key, row);
228
+ }
229
+ return [...selected.values()];
230
+ }
231
+ export function relayHistorySource(options = {}) {
232
+ const pinned = () => {
233
+ if (!options.expectedAccount)
234
+ throw new InvalidArgumentError('Configure expectedAccount before acquiring cloud history', 'INVALID_ARGUMENT');
235
+ return options.expectedAccount;
236
+ };
237
+ const instanceId = relayHistoryInstance(options) +
238
+ (options.expectedAccount
239
+ ? ':' + createHash('sha256').update(options.expectedAccount).digest('hex').slice(0, 16)
240
+ : '');
241
+ return {
242
+ id: 'cloud',
243
+ instanceId,
244
+ location: 'remote',
245
+ supportedSources: CATALOG_SOURCES,
246
+ discover: async (query) => {
247
+ const expectedAccount = pinned();
248
+ const sessions = new Map();
249
+ const sources = query.sources ?? [undefined];
250
+ for (const source of sources)
251
+ for await (const record of deliveredHistory({ expectedAccount, source, sessionId: query.sessionId }, { ...options, signal: query.signal, timeoutMs: query.acquisitionTimeoutMs ?? options.timeoutMs })) {
252
+ if (!record.session_id || !isCatalogSource(record.source))
253
+ continue;
254
+ const key = JSON.stringify([record.source, record.session_id]);
255
+ const row = sessions.get(key) ?? {
256
+ source: record.source,
257
+ session_id: record.session_id,
258
+ first_prompt: null,
259
+ first_activity_ms: null,
260
+ last_activity_ms: null,
261
+ source_stamp: '',
262
+ revisions: [],
263
+ };
264
+ const payload = record.payload;
265
+ const timestamps = [
266
+ payload?.ts_ms,
267
+ payload?.timestamp_ms,
268
+ payload?.first_activity_ms,
269
+ payload?.last_activity_ms,
270
+ ].filter((value) => typeof value === 'number' && Number.isFinite(value));
271
+ if (timestamps.length) {
272
+ row.first_activity_ms = Math.min(row.first_activity_ms ?? Infinity, ...timestamps);
273
+ row.last_activity_ms = Math.max(row.last_activity_ms ?? -Infinity, ...timestamps);
274
+ }
275
+ row.first_prompt ??=
276
+ typeof payload?.prompt === 'string'
277
+ ? payload.prompt
278
+ : typeof payload?.first_prompt === 'string'
279
+ ? payload.first_prompt
280
+ : null;
281
+ row.revisions.push(JSON.stringify([
282
+ record.origin_id,
283
+ record.record_id,
284
+ record.revision_id,
285
+ record.operation,
286
+ ]));
287
+ sessions.set(key, row);
288
+ }
289
+ return {
290
+ observations: [...sessions.values()]
291
+ .sort((a, b) => (b.last_activity_ms ?? -Infinity) - (a.last_activity_ms ?? -Infinity) ||
292
+ ordinal(a.source, b.source) ||
293
+ ordinal(a.session_id, b.session_id))
294
+ .slice(0, query.limit)
295
+ .map(({ revisions, ...row }) => ({
296
+ ...row,
297
+ source_stamp: createHash('sha256').update(revisions.sort().join('\n')).digest('hex'),
298
+ })),
299
+ };
300
+ },
301
+ hydrate: async (observation, context) => {
302
+ const rows = [];
303
+ for await (const row of deliveredHistory({
304
+ expectedAccount: pinned(),
305
+ source: observation.key.source,
306
+ sessionId: observation.key.session_id,
307
+ includeDeleted: true,
308
+ }, { ...options, signal: context.signal, timeoutMs: context.acquisitionTimeoutMs ?? options.timeoutMs }))
309
+ rows.push(row);
310
+ const allowed = [
311
+ 'history',
312
+ 'session_event',
313
+ 'tool_call',
314
+ 'file_edit',
315
+ 'relationship',
316
+ 'commit_link',
317
+ ];
318
+ const covered = allowed.filter((kind) => rows.some((row) => row.kind === kind));
319
+ const records = canonicalDeliveredEvidence(rows)
320
+ .filter((row) => row.operation === 'upsert' && covered.includes(row.kind))
321
+ .map((row) => ({
322
+ kind: row.kind,
323
+ payload: Object.fromEntries(Object.entries(row.payload).filter(([key]) => key !== 'id')),
324
+ record_id: row.record_id,
325
+ revision_id: row.revision_id,
326
+ }));
327
+ return {
328
+ source_stamp: createHash('sha256')
329
+ .update(rows
330
+ .map((row) => JSON.stringify([row.origin_id, row.record_id, row.revision_id, row.operation]))
331
+ .sort()
332
+ .join('\n'))
333
+ .digest('hex'),
334
+ source_bytes: Buffer.byteLength(JSON.stringify(records)),
335
+ covered_kinds: covered,
336
+ records,
337
+ };
338
+ },
339
+ };
340
+ }
341
+ function flags(args) {
342
+ const result = {};
343
+ for (let index = 0; index < args.length; index++) {
344
+ const arg = args[index];
345
+ if (!arg.startsWith('--'))
346
+ throw new InvalidArgumentError('Plugin commands require named options', 'INVALID_ARGUMENT');
347
+ const [key, inline] = arg.slice(2).split(/=(.*)/s);
348
+ if (!['base-url', 'token', 'label', 'session', 'limit', 'selection', 'db'].includes(key))
349
+ throw new InvalidArgumentError(`Unknown plugin option --${key}`, 'INVALID_ARGUMENT');
350
+ const value = inline ?? args[++index];
351
+ if (value === undefined)
352
+ throw new InvalidArgumentError(`--${key} requires a value`, 'INVALID_ARGUMENT');
353
+ result[key] = value;
354
+ }
355
+ return result;
356
+ }
357
+ /** Inert registration. Network/auth/service checks occur only in invoked operations. */
358
+ export function createHistoryPlugin(options = {}) {
359
+ options = { ...options, baseUrl: options.baseUrl ?? 'https://history.agentrelay.com' };
360
+ return {
361
+ sources: [relayHistorySource(options)],
362
+ destinations: [
363
+ { instanceId: relayHistoryInstance(options), destination: relayHistoryDestination(options) },
364
+ ],
365
+ commands: [
366
+ {
367
+ name: 'login',
368
+ run: async (args) => {
369
+ const f = flags(args);
370
+ const baseUrl = String(f['base-url'] ?? options.baseUrl ?? 'https://history.agentrelay.com');
371
+ // Without an explicit bearer, Agent Relay Cloud sign-in happens in the
372
+ // Rust helper; JavaScript only reports whether a terminal is attached.
373
+ const relayAccessToken = typeof f.token === 'string' ? f.token : undefined;
374
+ const auth = await login({
375
+ baseUrl,
376
+ relayAccessToken,
377
+ label: typeof f.label === 'string' ? f.label : undefined,
378
+ ...(relayAccessToken ? {} : { interactive: process.stdin.isTTY === true }),
379
+ });
380
+ return { ok: true, baseUrl: auth.baseUrl };
381
+ },
382
+ },
383
+ {
384
+ name: 'token',
385
+ run: async (args) => {
386
+ const f = flags(args);
387
+ return accessToken({
388
+ baseUrl: typeof f['base-url'] === 'string' ? f['base-url'] : options.baseUrl,
389
+ });
390
+ },
391
+ },
392
+ {
393
+ name: 'replay',
394
+ run: async (args) => {
395
+ const f = flags(args);
396
+ if (typeof f.session !== 'string')
397
+ throw new InvalidArgumentError('--session is required', 'INVALID_ARGUMENT');
398
+ return replay(f.session, {
399
+ baseUrl: typeof f['base-url'] === 'string' ? f['base-url'] : options.baseUrl,
400
+ });
401
+ },
402
+ },
403
+ {
404
+ name: 'relayhistory-migration-status',
405
+ run: async () => ({
406
+ legacySchedules: await legacySchedules(options),
407
+ action: 'Stop old managed push jobs explicitly before enabling a new durable generation. Existing auth and legacy cursors remain unchanged.',
408
+ }),
409
+ },
410
+ {
411
+ name: 'relayhistory-enable',
412
+ run: async (args) => {
413
+ const f = flags(args);
414
+ await requireMigration(options);
415
+ if (typeof f.selection !== 'string')
416
+ throw new InvalidArgumentError('--selection file is required for a new delivery generation', 'INVALID_ARGUMENT');
417
+ const selection = JSON.parse(await readFile(f.selection, 'utf8'));
418
+ const selected = {
419
+ ...options,
420
+ baseUrl: typeof f['base-url'] === 'string' ? f['base-url'] : options.baseUrl,
421
+ };
422
+ return createHistoryDelivery({
423
+ destination_id: 'relayhistory',
424
+ instance_id: relayHistoryInstance(selected),
425
+ account_id: await deliveryAccount(selected),
426
+ mapping_version: MAPPING,
427
+ selection,
428
+ limits: DEFAULT_DELIVERY_LIMITS,
429
+ }, { dbPath: typeof f.db === 'string' ? f.db : undefined });
430
+ },
431
+ },
432
+ ],
433
+ tools: [
434
+ {
435
+ name: 'get_session_thread',
436
+ description: 'Current delivered session evidence plus legacy lifecycle links. Fresh live scan; no incremental cursor.',
437
+ run: async (input) => getSessionThreadWithHistory({ source: String(input.source ?? ''), sessionId: String(input.session_id ?? '') }, options),
438
+ },
439
+ {
440
+ name: 'read_delivered_history',
441
+ description: 'Explicit live readback of retained history evidence; cursors are not change-feed checkpoints.',
442
+ run: async (input) => readDeliveredHistory({
443
+ expectedAccount: await deliveryAccount(options),
444
+ source: typeof input.source === 'string' ? input.source : undefined,
445
+ sessionId: typeof input.session_id === 'string' ? input.session_id : undefined,
446
+ cursor: typeof input.cursor === 'string' ? input.cursor : undefined,
447
+ }, options),
448
+ },
449
+ ],
450
+ };
451
+ }
452
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=plugin.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.test.d.ts","sourceRoot":"","sources":["../src/plugin.test.ts"],"names":[],"mappings":""}