ai-hist 0.15.9 → 0.16.0
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/README.md +40 -0
- package/dist/cloud-client.d.ts +107 -33
- package/dist/cloud-client.d.ts.map +1 -1
- package/dist/cloud-client.js +107 -430
- package/dist/cloud-client.js.map +1 -1
- package/dist/index.d.ts +5 -164
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -286
- package/dist/index.js.map +1 -1
- package/dist/native.d.ts +42 -0
- package/dist/native.d.ts.map +1 -0
- package/dist/native.js +115 -0
- package/dist/native.js.map +1 -0
- package/dist/sdk-common.d.ts +57 -0
- package/dist/sdk-common.d.ts.map +1 -0
- package/dist/sdk-common.js +81 -0
- package/dist/sdk-common.js.map +1 -0
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -192,6 +192,46 @@ See [the migration guide](https://github.com/AgentWorkforce/relayhistory/blob/ma
|
|
|
192
192
|
|
|
193
193
|
Run `ai-hist enable-cloud` to log in, drain local history and keep pushing. Use `--once` to exit after draining. The npm CLI bundles Agent Relay Cloud login, so no separate `agent-relay` CLI install is required; a run without a TTY fails promptly with interactive-login and token guidance. The async SDK exports `enableCloud`, `pushCloud`, `installGitHooks` and `createShareableTrace`; RelayHistory exchange, transport, and stage-scoped auth stay in Rust. See [cloud setup](https://github.com/AgentWorkforce/relayhistory/blob/main/docs/enable-cloud.md).
|
|
194
194
|
|
|
195
|
+
`ai-hist/cloud` owns the cloud API wrappers, including `loginCloud` and
|
|
196
|
+
`loadStoredRelayhistoryAuth`, and delegates to the Rust cloud layer through N-API.
|
|
197
|
+
The root `ai-hist` entrypoint re-exports the cloud API for convenience. Credentials
|
|
198
|
+
live in `$RELAYHISTORY_HOME/stages`, defaulting to
|
|
199
|
+
`~/.agentworkforce/relayhistory/stages`. The Rust layer selects the stage, checks
|
|
200
|
+
transport security, preserves session metadata, and saves rotated tokens atomically.
|
|
201
|
+
|
|
202
|
+
## Session thread transport
|
|
203
|
+
|
|
204
|
+
`getSessionThread` accepts `SessionThreadOptions.fetchImpl` for the thread GET
|
|
205
|
+
request and its retries. Authentication requests use the Rust HTTP client.
|
|
206
|
+
A stored-session 401 can therefore trigger a native refresh request even when
|
|
207
|
+
`fetchImpl` is mocked. Custom proxy or TLS settings supplied through `fetchImpl`
|
|
208
|
+
apply only to thread requests; the auth endpoint must also be reachable by the
|
|
209
|
+
native client for automatic refresh to succeed.
|
|
210
|
+
|
|
211
|
+
For isolated mocks or caller-managed credentials, supply `resolveSession` that
|
|
212
|
+
returns `{ auth }` without the `session: true` marker:
|
|
213
|
+
|
|
214
|
+
```ts
|
|
215
|
+
import { getSessionThread } from 'ai-hist/cloud';
|
|
216
|
+
|
|
217
|
+
const thread = await getSessionThread(
|
|
218
|
+
{ source: 'claude', sessionId: 'example-session' },
|
|
219
|
+
{
|
|
220
|
+
resolveSession: async () => ({
|
|
221
|
+
auth: { baseUrl: 'https://history.example.com', accessToken: 'rth_at_fixture' },
|
|
222
|
+
}),
|
|
223
|
+
fetchImpl: async () => new Response(JSON.stringify({
|
|
224
|
+
session: null, outcomes: [], links: [], nextCursor: null,
|
|
225
|
+
})),
|
|
226
|
+
},
|
|
227
|
+
);
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
This resolver disables automatic refresh. A 401 from the selected transport
|
|
231
|
+
throws `AuthenticationExpiredError` without an authentication request. The
|
|
232
|
+
default `resolveCloudSession` returns the marker for stored credentials and
|
|
233
|
+
enables native refresh.
|
|
234
|
+
|
|
195
235
|
## Cloud token and replay
|
|
196
236
|
|
|
197
237
|
The npm CLI uses the same Rust engine as the public async SDK:
|
package/dist/cloud-client.d.ts
CHANGED
|
@@ -2,13 +2,10 @@ export interface RelayhistoryAuth {
|
|
|
2
2
|
baseUrl: string;
|
|
3
3
|
accessToken: string;
|
|
4
4
|
refreshToken?: string;
|
|
5
|
-
/** Server-issued RFC 3339 expiry. Absent in sessions stored before it existed. */
|
|
6
5
|
accessTokenExpiresAt?: string;
|
|
7
|
-
/**
|
|
8
|
-
* Locally cached org, for provenance only — never sent as an authorization
|
|
9
|
-
* selector. The native store records it; this SDK's own login does not.
|
|
10
|
-
*/
|
|
6
|
+
/** Cached provenance; never an authorization selector. */
|
|
11
7
|
orgId?: string;
|
|
8
|
+
workspaceId?: string;
|
|
12
9
|
}
|
|
13
10
|
export type LoginCloudResult = {
|
|
14
11
|
ok: true;
|
|
@@ -17,41 +14,110 @@ export type LoginCloudResult = {
|
|
|
17
14
|
ok: false;
|
|
18
15
|
error: string;
|
|
19
16
|
};
|
|
20
|
-
export
|
|
21
|
-
|
|
17
|
+
export interface CloudPushResult {
|
|
18
|
+
baseUrl: string;
|
|
19
|
+
sent: number;
|
|
20
|
+
accepted: number;
|
|
21
|
+
syncSkipped: boolean;
|
|
22
|
+
}
|
|
23
|
+
/** Return a secret service token with at least 60 seconds of validity. Rust
|
|
24
|
+
* selects the stage, refreshes if needed and atomically saves rotated tokens. */
|
|
25
|
+
export declare function accessToken(options?: {
|
|
22
26
|
baseUrl?: string;
|
|
27
|
+
}): Promise<string>;
|
|
28
|
+
export interface ReplayOptions {
|
|
29
|
+
baseUrl?: string;
|
|
30
|
+
/** Page size, not a total cap; Rust fetches every page in server order. */
|
|
31
|
+
limit?: number;
|
|
32
|
+
maxContent?: number;
|
|
33
|
+
/** Return the raw event array serialized as JSON instead of readable text. */
|
|
34
|
+
json?: boolean;
|
|
35
|
+
/** Atomically save in Rust after all pages succeed; transcript is then null. */
|
|
36
|
+
out?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface ReplayResult {
|
|
39
|
+
eventCount: number;
|
|
40
|
+
transcript: string | null;
|
|
41
|
+
outputPath: string | null;
|
|
42
|
+
}
|
|
43
|
+
/** Fetch a cloud transcript without opening or importing into the local DB. */
|
|
44
|
+
export declare function replay(sessionId: string, options?: ReplayOptions): Promise<ReplayResult>;
|
|
45
|
+
export interface CloudOptions {
|
|
46
|
+
dbPath?: string;
|
|
47
|
+
baseUrl?: string;
|
|
48
|
+
relayAccessToken?: string;
|
|
23
49
|
label?: string;
|
|
24
|
-
}): Promise<LoginCloudResult>;
|
|
25
|
-
/** Which store a candidate came from. The two carry different written contracts. */
|
|
26
|
-
type StoreOrigin = 'native' | 'sdk';
|
|
27
|
-
interface StoredCandidate {
|
|
28
|
-
auth: RelayhistoryAuth;
|
|
29
|
-
origin: StoreOrigin;
|
|
30
|
-
/** The file this session was read from, so a rotated pair replaces it in place. */
|
|
31
|
-
path: string;
|
|
32
50
|
}
|
|
33
|
-
|
|
51
|
+
export interface EnableCloudOptions extends CloudOptions {
|
|
52
|
+
/** Keep syncing until stop() is called. Defaults to true. */
|
|
53
|
+
watch?: boolean;
|
|
54
|
+
intervalMs?: number;
|
|
55
|
+
onPush?: (result: CloudPushResult) => void;
|
|
56
|
+
onError?: (error: unknown) => void;
|
|
57
|
+
}
|
|
58
|
+
export interface CloudHandle extends CloudPushResult {
|
|
59
|
+
stop(): Promise<void>;
|
|
60
|
+
}
|
|
61
|
+
/** Both SDK consumers and the engine use the same stage-scoped Rust auth store. */
|
|
62
|
+
export declare function loadStoredRelayhistoryAuth(baseUrl?: string): Promise<RelayhistoryAuth | null>;
|
|
34
63
|
export type CloudSessionResolution = {
|
|
35
64
|
auth: RelayhistoryAuth;
|
|
36
|
-
session
|
|
65
|
+
/** Marks a stored session eligible for native refresh after a 401. Omit for caller-managed auth. */
|
|
66
|
+
session?: true;
|
|
37
67
|
} | {
|
|
38
68
|
auth: null;
|
|
39
69
|
detail: string;
|
|
40
70
|
};
|
|
41
|
-
/**
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
export declare function
|
|
71
|
+
/** Read-only connector probe; stage selection and eligibility belong to Rust. */
|
|
72
|
+
export declare function resolveCloudSession(baseUrl?: string, now?: number): Promise<CloudSessionResolution>;
|
|
73
|
+
/** Rotate a rejected stored bearer under the native stage lock. */
|
|
74
|
+
export declare function refreshCloudSession(baseUrl: string, rejectedToken: string): Promise<RelayhistoryAuth | null>;
|
|
75
|
+
/** Refuse to forward an SDK-obtained Agent Relay bearer to an untrusted stage. */
|
|
76
|
+
export declare function validateCloudExchangeBaseUrl(baseUrl?: string): Promise<void>;
|
|
77
|
+
export interface LoginOptions {
|
|
78
|
+
baseUrl?: string;
|
|
79
|
+
relayAccessToken?: string;
|
|
80
|
+
label?: string;
|
|
81
|
+
}
|
|
82
|
+
/** Exchange a supplied Agent Relay Cloud bearer for a RelayHistory session. */
|
|
83
|
+
export declare function login(options?: LoginOptions): Promise<RelayhistoryAuth>;
|
|
84
|
+
export declare function loginCloud(relayAccessToken: string, options?: {
|
|
85
|
+
baseUrl?: string;
|
|
86
|
+
label?: string;
|
|
87
|
+
}): Promise<LoginCloudResult>;
|
|
88
|
+
export declare function pushCloud(options?: CloudOptions): Promise<CloudPushResult>;
|
|
89
|
+
/** Device login, service-token exchange and first push run in Rust. The optional
|
|
90
|
+
* loop is host orchestration only: no token, refresh, stage or cursor logic in JS.
|
|
91
|
+
* The loop remains in this process; await stop() before shutdown. */
|
|
92
|
+
export declare function enableCloud(options?: EnableCloudOptions): Promise<CloudHandle>;
|
|
93
|
+
export interface GitHookOptions {
|
|
94
|
+
repo: string;
|
|
95
|
+
sessionId: string;
|
|
96
|
+
source?: string;
|
|
97
|
+
dbPath?: string;
|
|
98
|
+
prUrl?: string;
|
|
99
|
+
}
|
|
100
|
+
/** Install a local post-commit recorder for an explicit session. prUrl identifies
|
|
101
|
+
* an existing GitHub PR; linkage is uploaded by the next cloud push. */
|
|
102
|
+
export declare function installGitHooks(options: GitHookOptions): Promise<{
|
|
103
|
+
hookPath: string;
|
|
104
|
+
prUrl: string | null;
|
|
105
|
+
}>;
|
|
106
|
+
export declare function linkGitCommit(options: GitHookOptions): Promise<{
|
|
107
|
+
commitSha: string;
|
|
108
|
+
}>;
|
|
109
|
+
export type TraceVisibility = 'public' | 'private' | 'direct-link';
|
|
110
|
+
export interface ShareableTrace {
|
|
111
|
+
url: string;
|
|
112
|
+
visibility: TraceVisibility;
|
|
113
|
+
eventCount: number;
|
|
114
|
+
}
|
|
115
|
+
/** Share the already-pushed, frozen server snapshot of a session. */
|
|
116
|
+
export declare function createShareableTrace(sessionId: string, options: {
|
|
117
|
+
visibility: TraceVisibility;
|
|
118
|
+
source?: string;
|
|
119
|
+
baseUrl?: string;
|
|
120
|
+
}): Promise<ShareableTrace>;
|
|
55
121
|
/**
|
|
56
122
|
* The unsupported-operation message, in the shape the sibling remote
|
|
57
123
|
* connectors use.
|
|
@@ -129,9 +195,18 @@ export interface SessionThreadOptions {
|
|
|
129
195
|
* The connector-status resolver: a usable stored RelayHistory session means
|
|
130
196
|
* the `cloud` connector is configured, and anything else carries the reason
|
|
131
197
|
* it is not. Defaults to {@link resolveCloudSession}.
|
|
198
|
+
* Return `{ auth }` without `session: true` for caller-managed credentials or
|
|
199
|
+
* isolated mocks: a 401 then throws AuthenticationExpiredError without refresh.
|
|
132
200
|
*/
|
|
133
201
|
resolveSession?: (requestedBaseUrl?: string) => Promise<CloudSessionResolution>;
|
|
134
|
-
/**
|
|
202
|
+
/**
|
|
203
|
+
* Transport for thread GET requests and their retries. Defaults to global fetch.
|
|
204
|
+
* Does not handle authentication requests: stored-session refresh uses Rust's
|
|
205
|
+
* native HTTP client and can make a real network request after a 401, even when
|
|
206
|
+
* this function is a mock. Proxy and TLS settings here do not configure refresh.
|
|
207
|
+
* For isolated mocks, also provide resolveSession returning `{ auth }` without
|
|
208
|
+
* `session: true`, which disables automatic refresh.
|
|
209
|
+
*/
|
|
135
210
|
fetchImpl?: typeof fetch;
|
|
136
211
|
}
|
|
137
212
|
/**
|
|
@@ -143,5 +218,4 @@ export interface SessionThreadOptions {
|
|
|
143
218
|
* a remote-only request no connector can serve.
|
|
144
219
|
*/
|
|
145
220
|
export declare function getSessionThread(query: SessionThreadQuery, opts?: SessionThreadOptions): Promise<SessionThread>;
|
|
146
|
-
export {};
|
|
147
221
|
//# sourceMappingURL=cloud-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-client.d.ts","sourceRoot":"","sources":["../src/cloud-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cloud-client.d.ts","sourceRoot":"","sources":["../src/cloud-client.ts"],"names":[],"mappings":"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"}
|