@xenosystem/agent-interface-client 0.1.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/LICENSE +67 -0
- package/dist/index.d.ts +185 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +523 -0
- package/dist/index.js.map +1 -0
- package/dist/local/attach.d.ts +116 -0
- package/dist/local/attach.d.ts.map +1 -0
- package/dist/local/attach.js +187 -0
- package/dist/local/attach.js.map +1 -0
- package/dist/local/index.d.ts +4 -0
- package/dist/local/index.d.ts.map +1 -0
- package/dist/local/index.js +23 -0
- package/dist/local/index.js.map +1 -0
- package/dist/local/lease.d.ts +50 -0
- package/dist/local/lease.d.ts.map +1 -0
- package/dist/local/lease.js +120 -0
- package/dist/local/lease.js.map +1 -0
- package/dist/local/transport.d.ts +100 -0
- package/dist/local/transport.d.ts.map +1 -0
- package/dist/local/transport.js +276 -0
- package/dist/local/transport.js.map +1 -0
- package/dist/localAttach.d.ts +116 -0
- package/dist/localAttach.d.ts.map +1 -0
- package/dist/localAttach.js +187 -0
- package/dist/localAttach.js.map +1 -0
- package/dist/localLease.d.ts +50 -0
- package/dist/localLease.d.ts.map +1 -0
- package/dist/localLease.js +120 -0
- package/dist/localLease.js.map +1 -0
- package/dist/localTransport.d.ts +100 -0
- package/dist/localTransport.d.ts.map +1 -0
- package/dist/localTransport.js +276 -0
- package/dist/localTransport.js.map +1 -0
- package/package.json +34 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localLease.d.ts","sourceRoot":"","sources":["../src/localLease.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,6BAA6B;IAC5C,aAAa,EAAE,CAAC,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,iCAAiC;IAChD,UAAU,EAAE,6BAA6B,CAAA;IACzC,mGAAmG;IACnG,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,yBAA0B,SAAQ,6BAA6B;IAC9E,cAAc,EAAE,MAAM,CAAA;CACvB;AAID,eAAO,MAAM,4BAA4B,QAAS,CAAA;AAElD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,WAAW,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,EAAE,EAAE,MAAM,CAAA;IACV,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;CAC1C,GAAG,OAAO,CAIV;AAID,wBAAsB,0BAA0B,CAC9C,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,6BAA6B,GAAG,IAAI,CAAC,CAQ/C;AAED;;;GAGG;AACH,wBAAsB,iCAAiC,CACrD,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,iCAAiC,GAAG,IAAI,CAAC,CAYnD;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAEtF;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,yBAAyB,CAqBzE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,yBAAyB,GAAG,6BAA6B,CAUjG;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQxD"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { isNodeError } from './localTransport.js';
|
|
2
|
+
/**
|
|
3
|
+
* Local Agent host lease — the READ half.
|
|
4
|
+
*
|
|
5
|
+
* A surface needs to find and validate a running host: read the lease, decide whether its owner
|
|
6
|
+
* is gone, and pull the connection info. It must never be able to ACQUIRE one — a thin client
|
|
7
|
+
* that can win the lease would then be asked to *be* the host, which ADE §2.7 explicitly rules
|
|
8
|
+
* out. Acquisition stays in `packages/host`, so the client cannot take ownership because the code
|
|
9
|
+
* to do it is not here.
|
|
10
|
+
*
|
|
11
|
+
* `isNodeError` and the parse/record helpers are exported for the host's acquire half; they are
|
|
12
|
+
* internal to the lease protocol and not part of the supported surface.
|
|
13
|
+
*/
|
|
14
|
+
import { randomBytes } from 'node:crypto';
|
|
15
|
+
import { mkdir, open, readFile, unlink } from 'node:fs/promises';
|
|
16
|
+
import { join } from 'node:path';
|
|
17
|
+
export const DEFAULT_LEASE_STALE_AFTER_MS = 15_000;
|
|
18
|
+
/**
|
|
19
|
+
* Is the recorded owner gone?
|
|
20
|
+
*
|
|
21
|
+
* 🔴 TWO conditions, and the second is the one that matters. A missed
|
|
22
|
+
* heartbeat alone does not mean a dead host — a process paused by a debugger,
|
|
23
|
+
* a laptop resumed from sleep, or a machine under load all produce one. Taking
|
|
24
|
+
* the lease from a LIVE owner is the split-brain the lease exists to prevent,
|
|
25
|
+
* so the pid must also be gone.
|
|
26
|
+
*
|
|
27
|
+
* Exported and shared because a second caller now needs the same question
|
|
28
|
+
* answered without acquiring anything: a surface deciding whether a host is
|
|
29
|
+
* actually there. Two spellings of "is the owner dead" would eventually
|
|
30
|
+
* disagree, and the two answers are "take over" and "connect".
|
|
31
|
+
*/
|
|
32
|
+
export function isLeaseOwnerGone(input) {
|
|
33
|
+
const staleAfterMs = positiveInteger(input.staleAfterMs) || DEFAULT_LEASE_STALE_AFTER_MS;
|
|
34
|
+
const alive = input.isProcessAlive || defaultProcessAlive;
|
|
35
|
+
return input.at - input.heartbeatAt > staleAfterMs && !alive(input.pid);
|
|
36
|
+
}
|
|
37
|
+
export async function inspectLocalAgentHostLease(rootDirectory) {
|
|
38
|
+
const path = join(rootDirectory, 'agent-host.lock');
|
|
39
|
+
try {
|
|
40
|
+
return publicDescriptor(await readLeaseRecord(path));
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
if (isNodeError(error, 'ENOENT'))
|
|
44
|
+
return null;
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Reads connection material for another trusted main/host process owned by the
|
|
50
|
+
* same OS user. Callers must keep the token outside renderers, logs, and IPC.
|
|
51
|
+
*/
|
|
52
|
+
export async function readLocalAgentHostLeaseConnection(rootDirectory) {
|
|
53
|
+
const path = join(rootDirectory, 'agent-host.lock');
|
|
54
|
+
try {
|
|
55
|
+
const record = await readLeaseRecord(path);
|
|
56
|
+
return {
|
|
57
|
+
descriptor: publicDescriptor(record),
|
|
58
|
+
transportToken: record.transportToken,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
if (isNodeError(error, 'ENOENT'))
|
|
63
|
+
return null;
|
|
64
|
+
throw error;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export async function readLeaseRecord(path) {
|
|
68
|
+
return parseLeaseRecord(await readFile(path, 'utf8'));
|
|
69
|
+
}
|
|
70
|
+
export function parseLeaseRecord(value) {
|
|
71
|
+
let parsed;
|
|
72
|
+
try {
|
|
73
|
+
parsed = JSON.parse(value);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
throw new Error('Agent host authority lease is malformed.');
|
|
77
|
+
}
|
|
78
|
+
if (!isRecord(parsed)
|
|
79
|
+
|| parsed.schemaVersion !== 1
|
|
80
|
+
|| typeof parsed.instanceId !== 'string'
|
|
81
|
+
|| typeof parsed.pid !== 'number'
|
|
82
|
+
|| typeof parsed.endpoint !== 'string'
|
|
83
|
+
|| typeof parsed.protocolVersion !== 'number'
|
|
84
|
+
|| typeof parsed.acquiredAt !== 'number'
|
|
85
|
+
|| typeof parsed.heartbeatAt !== 'number'
|
|
86
|
+
|| typeof parsed.transportToken !== 'string'
|
|
87
|
+
|| parsed.transportToken.length < 32) {
|
|
88
|
+
throw new Error('Agent host authority lease is invalid.');
|
|
89
|
+
}
|
|
90
|
+
return parsed;
|
|
91
|
+
}
|
|
92
|
+
export function publicDescriptor(record) {
|
|
93
|
+
return {
|
|
94
|
+
schemaVersion: 1,
|
|
95
|
+
instanceId: record.instanceId,
|
|
96
|
+
pid: record.pid,
|
|
97
|
+
endpoint: record.endpoint,
|
|
98
|
+
protocolVersion: record.protocolVersion,
|
|
99
|
+
acquiredAt: record.acquiredAt,
|
|
100
|
+
heartbeatAt: record.heartbeatAt,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
export function defaultProcessAlive(pid) {
|
|
104
|
+
if (!Number.isInteger(pid) || pid <= 0)
|
|
105
|
+
return false;
|
|
106
|
+
try {
|
|
107
|
+
process.kill(pid, 0);
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
return isNodeError(error, 'EPERM');
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function positiveInteger(value) {
|
|
115
|
+
return typeof value === 'number' && Number.isInteger(value) && value > 0 ? value : undefined;
|
|
116
|
+
}
|
|
117
|
+
function isRecord(value) {
|
|
118
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=localLease.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localLease.js","sourceRoot":"","sources":["../src/localLease.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEjD;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAwBhC,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAA;AAElD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAMhC;IACC,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,4BAA4B,CAAA;IACxF,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc,IAAI,mBAAmB,CAAA;IACzD,OAAO,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,WAAW,GAAG,YAAY,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACzE,CAAC;AAID,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,aAAqB;IAErB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAA;IACnD,IAAI,CAAC;QACH,OAAO,gBAAgB,CAAC,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC,CAAA;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAA;QAC7C,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,aAAqB;IAErB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAA;IACnD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAA;QAC1C,OAAO;YACL,UAAU,EAAE,gBAAgB,CAAC,MAAM,CAAC;YACpC,cAAc,EAAE,MAAM,CAAC,cAAc;SACtC,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAA;QAC7C,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,OAAO,gBAAgB,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;AACvD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,IAAI,MAAe,CAAA;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;IAC7D,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;WAChB,MAAM,CAAC,aAAa,KAAK,CAAC;WAC1B,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;WACrC,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ;WAC9B,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;WACnC,OAAO,MAAM,CAAC,eAAe,KAAK,QAAQ;WAC1C,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;WACrC,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ;WACtC,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ;WACzC,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,EAAE,EACpC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;IAC3D,CAAC;IACD,OAAO,MAA8C,CAAA;AACvD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAiC;IAChE,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,KAAK,CAAA;IACpD,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QACpB,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IACpC,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAyB;IAChD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;AAC9F,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local Agent host wire protocol — framing plus the CLIENT transport.
|
|
3
|
+
*
|
|
4
|
+
* 🔴 This lives in the CLIENT package, not in `contract`, and the reason is load-bearing:
|
|
5
|
+
* `contract` is Node-free and must stay that way. A renderer reaches `contract/index.js`, and
|
|
6
|
+
* Vite fails a browser build on any `node:` builtin ("stat" is not exported by
|
|
7
|
+
* "__vite-browser-external") — `browserBarrelPurity.test.ts` pins that. This module needs
|
|
8
|
+
* `node:net`, `node:crypto` and `node:fs/promises`, so it cannot go there.
|
|
9
|
+
*
|
|
10
|
+
* It is also why the split is client-package-and-below rather than contract-and-below: a surface
|
|
11
|
+
* that wants to ATTACH to a local host needs Node anyway.
|
|
12
|
+
*
|
|
13
|
+
* @packageDocumentation
|
|
14
|
+
*/
|
|
15
|
+
import { type Socket } from 'node:net';
|
|
16
|
+
import { type AgentHostEvent, type AgentHostEventListener, type AgentHostInput, type AgentHostMethod, type AgentHostOutput, type AgentHostProtocolErrorCode, type AgentHostTransport, type AgentHostUnsubscribe } from '@xenosystem/agent-interface-contract';
|
|
17
|
+
export declare const LOCAL_AGENT_HOST_DEFAULT_MAX_FRAME_BYTES: number;
|
|
18
|
+
export declare const LOCAL_AGENT_HOST_ABSOLUTE_MAX_FRAME_BYTES: number;
|
|
19
|
+
export interface LocalRpcRequest {
|
|
20
|
+
kind: 'request';
|
|
21
|
+
id: string;
|
|
22
|
+
protocolVersion: number;
|
|
23
|
+
token: string;
|
|
24
|
+
method: AgentHostMethod;
|
|
25
|
+
input: unknown;
|
|
26
|
+
}
|
|
27
|
+
export type LocalRpcResponse = {
|
|
28
|
+
kind: 'response';
|
|
29
|
+
id: string;
|
|
30
|
+
ok: true;
|
|
31
|
+
output: unknown;
|
|
32
|
+
} | {
|
|
33
|
+
kind: 'response';
|
|
34
|
+
id: string;
|
|
35
|
+
ok: false;
|
|
36
|
+
error: {
|
|
37
|
+
code: AgentHostProtocolErrorCode;
|
|
38
|
+
message: string;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
interface LocalRpcEvent {
|
|
42
|
+
kind: 'event';
|
|
43
|
+
event: AgentHostEvent;
|
|
44
|
+
}
|
|
45
|
+
export type LocalRpcServerMessage = LocalRpcResponse | LocalRpcEvent;
|
|
46
|
+
export interface LocalAgentHostRpcServerOptions {
|
|
47
|
+
transport: AgentHostTransport;
|
|
48
|
+
endpoint: string;
|
|
49
|
+
transportToken: string;
|
|
50
|
+
protocolVersion?: number;
|
|
51
|
+
maxFrameBytes?: number;
|
|
52
|
+
removeStaleEndpoint?: boolean;
|
|
53
|
+
}
|
|
54
|
+
export interface LocalAgentHostRpcClientOptions {
|
|
55
|
+
endpoint: string;
|
|
56
|
+
transportToken: string;
|
|
57
|
+
protocolVersion?: number;
|
|
58
|
+
maxFrameBytes?: number;
|
|
59
|
+
requestTimeoutMs?: number;
|
|
60
|
+
}
|
|
61
|
+
/** Node-side AgentHostTransport implementation for a local host authority. */
|
|
62
|
+
export declare class LocalAgentHostRpcClientTransport implements AgentHostTransport {
|
|
63
|
+
private readonly endpoint;
|
|
64
|
+
private readonly transportToken;
|
|
65
|
+
private readonly protocolVersion;
|
|
66
|
+
private readonly maxFrameBytes;
|
|
67
|
+
private readonly requestTimeoutMs;
|
|
68
|
+
private readonly listeners;
|
|
69
|
+
private readonly pending;
|
|
70
|
+
private readonly requestPrefix;
|
|
71
|
+
private requestSequence;
|
|
72
|
+
private socket;
|
|
73
|
+
private connectPromise;
|
|
74
|
+
constructor(options: LocalAgentHostRpcClientOptions);
|
|
75
|
+
get connected(): boolean;
|
|
76
|
+
connect(): Promise<void>;
|
|
77
|
+
request<M extends AgentHostMethod>(method: M, input: AgentHostInput<M>): Promise<AgentHostOutput<M>>;
|
|
78
|
+
subscribe(listener: AgentHostEventListener): AgentHostUnsubscribe;
|
|
79
|
+
close(): void;
|
|
80
|
+
private receive;
|
|
81
|
+
private disconnect;
|
|
82
|
+
}
|
|
83
|
+
export declare function resolveLocalAgentHostEndpoint(rootDirectory: string, scope?: string): string;
|
|
84
|
+
export declare class JsonLineDecoder {
|
|
85
|
+
private readonly maxFrameBytes;
|
|
86
|
+
private readonly onFrame;
|
|
87
|
+
private buffer;
|
|
88
|
+
constructor(maxFrameBytes: number, onFrame: (frame: string) => void);
|
|
89
|
+
push(chunk: Buffer): void;
|
|
90
|
+
}
|
|
91
|
+
export declare function writeFrame(socket: Socket, value: unknown, maxFrameBytes: number): void;
|
|
92
|
+
export declare function safeTokenEquals(left: string, right: string): boolean;
|
|
93
|
+
export declare function assertLocalRpcOptions(endpoint: string, transportToken: string): void;
|
|
94
|
+
export declare function positiveInteger(value: number | undefined): number | undefined;
|
|
95
|
+
export declare function resolveMaxFrameBytes(value: number | undefined): number;
|
|
96
|
+
export declare function asError(error: unknown): Error;
|
|
97
|
+
export declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
98
|
+
export declare function isNodeError(error: unknown, code: string): error is NodeJS.ErrnoException;
|
|
99
|
+
export {};
|
|
100
|
+
//# sourceMappingURL=localTransport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localTransport.d.ts","sourceRoot":"","sources":["../src/localTransport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local Agent host wire protocol — framing plus the CLIENT transport.
|
|
3
|
+
*
|
|
4
|
+
* 🔴 This lives in the CLIENT package, not in `contract`, and the reason is load-bearing:
|
|
5
|
+
* `contract` is Node-free and must stay that way. A renderer reaches `contract/index.js`, and
|
|
6
|
+
* Vite fails a browser build on any `node:` builtin ("stat" is not exported by
|
|
7
|
+
* "__vite-browser-external") — `browserBarrelPurity.test.ts` pins that. This module needs
|
|
8
|
+
* `node:net`, `node:crypto` and `node:fs/promises`, so it cannot go there.
|
|
9
|
+
*
|
|
10
|
+
* It is also why the split is client-package-and-below rather than contract-and-below: a surface
|
|
11
|
+
* that wants to ATTACH to a local host needs Node anyway.
|
|
12
|
+
*
|
|
13
|
+
* @packageDocumentation
|
|
14
|
+
*/
|
|
15
|
+
import { createHash, randomBytes, timingSafeEqual } from 'node:crypto';
|
|
16
|
+
import { chmod, mkdir, unlink } from 'node:fs/promises';
|
|
17
|
+
import { dirname, join, resolve } from 'node:path';
|
|
18
|
+
import { createConnection, createServer, } from 'node:net';
|
|
19
|
+
import { AgentHostProtocolError, XENO_AGENT_HOST_PROTOCOL_VERSION, isAgentHostMethod, isAgentHostEvent, } from '@xenosystem/agent-interface-contract';
|
|
20
|
+
export const LOCAL_AGENT_HOST_DEFAULT_MAX_FRAME_BYTES = 32 * 1024 * 1024;
|
|
21
|
+
export const LOCAL_AGENT_HOST_ABSOLUTE_MAX_FRAME_BYTES = 64 * 1024 * 1024;
|
|
22
|
+
const DEFAULT_REQUEST_TIMEOUT_MS = 30_000;
|
|
23
|
+
/** Node-side AgentHostTransport implementation for a local host authority. */
|
|
24
|
+
export class LocalAgentHostRpcClientTransport {
|
|
25
|
+
endpoint;
|
|
26
|
+
transportToken;
|
|
27
|
+
protocolVersion;
|
|
28
|
+
maxFrameBytes;
|
|
29
|
+
requestTimeoutMs;
|
|
30
|
+
listeners = new Set();
|
|
31
|
+
pending = new Map();
|
|
32
|
+
requestPrefix = randomBytes(12).toString('hex');
|
|
33
|
+
requestSequence = 0;
|
|
34
|
+
socket = null;
|
|
35
|
+
connectPromise = null;
|
|
36
|
+
constructor(options) {
|
|
37
|
+
assertLocalRpcOptions(options.endpoint, options.transportToken);
|
|
38
|
+
this.endpoint = options.endpoint;
|
|
39
|
+
this.transportToken = options.transportToken;
|
|
40
|
+
this.protocolVersion = positiveInteger(options.protocolVersion) || XENO_AGENT_HOST_PROTOCOL_VERSION;
|
|
41
|
+
this.maxFrameBytes = resolveMaxFrameBytes(options.maxFrameBytes);
|
|
42
|
+
this.requestTimeoutMs = positiveInteger(options.requestTimeoutMs) || DEFAULT_REQUEST_TIMEOUT_MS;
|
|
43
|
+
}
|
|
44
|
+
get connected() {
|
|
45
|
+
return this.socket !== null && !this.socket.destroyed;
|
|
46
|
+
}
|
|
47
|
+
async connect() {
|
|
48
|
+
if (this.connected)
|
|
49
|
+
return;
|
|
50
|
+
if (this.connectPromise)
|
|
51
|
+
return this.connectPromise;
|
|
52
|
+
this.connectPromise = new Promise((resolveConnect, rejectConnect) => {
|
|
53
|
+
const socket = createConnection(this.endpoint);
|
|
54
|
+
const decoder = new JsonLineDecoder(this.maxFrameBytes, (frame) => this.receive(frame));
|
|
55
|
+
const failConnect = (error) => {
|
|
56
|
+
socket.off('connect', connected);
|
|
57
|
+
this.socket = null;
|
|
58
|
+
rejectConnect(error);
|
|
59
|
+
};
|
|
60
|
+
const connected = () => {
|
|
61
|
+
socket.off('error', failConnect);
|
|
62
|
+
socket.setNoDelay(true);
|
|
63
|
+
this.socket = socket;
|
|
64
|
+
resolveConnect();
|
|
65
|
+
};
|
|
66
|
+
socket.once('error', failConnect);
|
|
67
|
+
socket.once('connect', connected);
|
|
68
|
+
socket.on('data', (chunk) => {
|
|
69
|
+
try {
|
|
70
|
+
decoder.push(chunk);
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
this.disconnect(asError(error));
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
socket.on('error', (error) => this.disconnect(error));
|
|
77
|
+
socket.on('close', () => this.disconnect(new Error('Local Agent host connection closed.')));
|
|
78
|
+
}).finally(() => {
|
|
79
|
+
this.connectPromise = null;
|
|
80
|
+
});
|
|
81
|
+
return this.connectPromise;
|
|
82
|
+
}
|
|
83
|
+
async request(method, input) {
|
|
84
|
+
await this.connect();
|
|
85
|
+
const socket = this.socket;
|
|
86
|
+
if (!socket || socket.destroyed) {
|
|
87
|
+
throw new AgentHostProtocolError('not_connected', 'Local Agent host is not connected.');
|
|
88
|
+
}
|
|
89
|
+
const id = `${this.requestPrefix}:${++this.requestSequence}`;
|
|
90
|
+
const request = {
|
|
91
|
+
kind: 'request',
|
|
92
|
+
id,
|
|
93
|
+
protocolVersion: this.protocolVersion,
|
|
94
|
+
token: this.transportToken,
|
|
95
|
+
method,
|
|
96
|
+
input: structuredClone(input),
|
|
97
|
+
};
|
|
98
|
+
return new Promise((resolveRequest, rejectRequest) => {
|
|
99
|
+
const requestTimeoutMs = resolveRequestTimeout(method, input, this.requestTimeoutMs);
|
|
100
|
+
const timeout = setTimeout(() => {
|
|
101
|
+
this.pending.delete(id);
|
|
102
|
+
rejectRequest(new AgentHostProtocolError('not_connected', `Local Agent host request timed out: ${method}.`));
|
|
103
|
+
}, requestTimeoutMs);
|
|
104
|
+
this.pending.set(id, {
|
|
105
|
+
resolve: (output) => resolveRequest(output),
|
|
106
|
+
reject: rejectRequest,
|
|
107
|
+
timeout,
|
|
108
|
+
});
|
|
109
|
+
try {
|
|
110
|
+
writeClientFrame(socket, request, this.maxFrameBytes);
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
clearTimeout(timeout);
|
|
114
|
+
this.pending.delete(id);
|
|
115
|
+
rejectRequest(asError(error));
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
subscribe(listener) {
|
|
120
|
+
this.listeners.add(listener);
|
|
121
|
+
return () => {
|
|
122
|
+
this.listeners.delete(listener);
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
close() {
|
|
126
|
+
this.disconnect(new Error('Local Agent host client closed.'));
|
|
127
|
+
}
|
|
128
|
+
receive(frame) {
|
|
129
|
+
let value;
|
|
130
|
+
try {
|
|
131
|
+
value = JSON.parse(frame);
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
this.disconnect(new AgentHostProtocolError('invalid_response', 'Local Agent host returned malformed JSON.'));
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
if (isLocalRpcEvent(value)) {
|
|
138
|
+
for (const listener of [...this.listeners])
|
|
139
|
+
listener(structuredClone(value.event));
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if (!isLocalRpcResponse(value)) {
|
|
143
|
+
this.disconnect(new AgentHostProtocolError('invalid_response', 'Local Agent host returned an invalid RPC frame.'));
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const pending = this.pending.get(value.id);
|
|
147
|
+
if (!pending)
|
|
148
|
+
return;
|
|
149
|
+
clearTimeout(pending.timeout);
|
|
150
|
+
this.pending.delete(value.id);
|
|
151
|
+
if (value.ok)
|
|
152
|
+
pending.resolve(structuredClone(value.output));
|
|
153
|
+
else
|
|
154
|
+
pending.reject(new AgentHostProtocolError(value.error.code, value.error.message));
|
|
155
|
+
}
|
|
156
|
+
disconnect(error) {
|
|
157
|
+
const socket = this.socket;
|
|
158
|
+
this.socket = null;
|
|
159
|
+
if (socket && !socket.destroyed)
|
|
160
|
+
socket.destroy();
|
|
161
|
+
for (const pending of this.pending.values()) {
|
|
162
|
+
clearTimeout(pending.timeout);
|
|
163
|
+
pending.reject(error);
|
|
164
|
+
}
|
|
165
|
+
this.pending.clear();
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function resolveRequestTimeout(method, input, fallback) {
|
|
169
|
+
if (method !== 'workspace.command.run')
|
|
170
|
+
return fallback;
|
|
171
|
+
const requested = isRecord(input) && typeof input.timeoutMs === 'number' && Number.isFinite(input.timeoutMs)
|
|
172
|
+
? Math.max(1_000, Math.min(120_000, Math.floor(input.timeoutMs)))
|
|
173
|
+
: 20_000;
|
|
174
|
+
return Math.max(fallback, requested + 5_000);
|
|
175
|
+
}
|
|
176
|
+
export function resolveLocalAgentHostEndpoint(rootDirectory, scope = 'default') {
|
|
177
|
+
if (!rootDirectory.trim())
|
|
178
|
+
throw new Error('Local Agent host rootDirectory is required.');
|
|
179
|
+
if (!scope.trim())
|
|
180
|
+
throw new Error('Local Agent host endpoint scope is required.');
|
|
181
|
+
const digest = createHash('sha256')
|
|
182
|
+
.update(`${resolve(rootDirectory)}\0${scope}`, 'utf8')
|
|
183
|
+
.digest('hex')
|
|
184
|
+
.slice(0, 24);
|
|
185
|
+
return process.platform === 'win32'
|
|
186
|
+
? `\\\\.\\pipe\\xeno-agent-host-${digest}`
|
|
187
|
+
: join(rootDirectory, `agent-host-${digest}.sock`);
|
|
188
|
+
}
|
|
189
|
+
export class JsonLineDecoder {
|
|
190
|
+
maxFrameBytes;
|
|
191
|
+
onFrame;
|
|
192
|
+
buffer = Buffer.alloc(0);
|
|
193
|
+
constructor(maxFrameBytes, onFrame) {
|
|
194
|
+
this.maxFrameBytes = maxFrameBytes;
|
|
195
|
+
this.onFrame = onFrame;
|
|
196
|
+
}
|
|
197
|
+
push(chunk) {
|
|
198
|
+
this.buffer = this.buffer.length === 0 ? chunk : Buffer.concat([this.buffer, chunk]);
|
|
199
|
+
if (this.buffer.length > this.maxFrameBytes && this.buffer.indexOf(0x0a) < 0) {
|
|
200
|
+
throw new AgentHostProtocolError('invalid_response', 'Local Agent host RPC frame exceeds the size limit.');
|
|
201
|
+
}
|
|
202
|
+
let newline = this.buffer.indexOf(0x0a);
|
|
203
|
+
while (newline >= 0) {
|
|
204
|
+
if (newline > this.maxFrameBytes) {
|
|
205
|
+
throw new AgentHostProtocolError('invalid_response', 'Local Agent host RPC frame exceeds the size limit.');
|
|
206
|
+
}
|
|
207
|
+
const frameBuffer = this.buffer.subarray(0, newline);
|
|
208
|
+
this.buffer = this.buffer.subarray(newline + 1);
|
|
209
|
+
const frame = frameBuffer.toString('utf8').replace(/\r$/, '');
|
|
210
|
+
if (frame)
|
|
211
|
+
this.onFrame(frame);
|
|
212
|
+
newline = this.buffer.indexOf(0x0a);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
function isLocalRpcResponse(value) {
|
|
217
|
+
if (!isRecord(value) || value.kind !== 'response' || typeof value.id !== 'string' || typeof value.ok !== 'boolean') {
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
220
|
+
if (value.ok)
|
|
221
|
+
return 'output' in value;
|
|
222
|
+
return isRecord(value.error)
|
|
223
|
+
&& isProtocolErrorCode(value.error.code)
|
|
224
|
+
&& typeof value.error.message === 'string';
|
|
225
|
+
}
|
|
226
|
+
function isLocalRpcEvent(value) {
|
|
227
|
+
return isRecord(value) && value.kind === 'event' && isAgentHostEvent(value.event);
|
|
228
|
+
}
|
|
229
|
+
function writeClientFrame(socket, value, maxFrameBytes) {
|
|
230
|
+
writeFrame(socket, value, maxFrameBytes);
|
|
231
|
+
}
|
|
232
|
+
export function writeFrame(socket, value, maxFrameBytes) {
|
|
233
|
+
const encoded = `${JSON.stringify(value)}\n`;
|
|
234
|
+
if (Buffer.byteLength(encoded, 'utf8') > maxFrameBytes) {
|
|
235
|
+
throw new AgentHostProtocolError('invalid_response', 'Local Agent host RPC frame exceeds the size limit.');
|
|
236
|
+
}
|
|
237
|
+
socket.write(encoded, 'utf8');
|
|
238
|
+
}
|
|
239
|
+
export function safeTokenEquals(left, right) {
|
|
240
|
+
const leftBytes = Buffer.from(left, 'utf8');
|
|
241
|
+
const rightBytes = Buffer.from(right, 'utf8');
|
|
242
|
+
return leftBytes.length === rightBytes.length && timingSafeEqual(leftBytes, rightBytes);
|
|
243
|
+
}
|
|
244
|
+
export function assertLocalRpcOptions(endpoint, transportToken) {
|
|
245
|
+
if (!endpoint.trim())
|
|
246
|
+
throw new Error('Local Agent host endpoint is required.');
|
|
247
|
+
if (transportToken.length < 32)
|
|
248
|
+
throw new Error('Local Agent host transportToken must contain at least 32 characters.');
|
|
249
|
+
}
|
|
250
|
+
export function positiveInteger(value) {
|
|
251
|
+
return typeof value === 'number' && Number.isInteger(value) && value > 0 ? value : undefined;
|
|
252
|
+
}
|
|
253
|
+
export function resolveMaxFrameBytes(value) {
|
|
254
|
+
const requested = positiveInteger(value) || LOCAL_AGENT_HOST_DEFAULT_MAX_FRAME_BYTES;
|
|
255
|
+
if (requested > LOCAL_AGENT_HOST_ABSOLUTE_MAX_FRAME_BYTES) {
|
|
256
|
+
throw new Error(`Local Agent host RPC frame limit cannot exceed ${LOCAL_AGENT_HOST_ABSOLUTE_MAX_FRAME_BYTES} bytes.`);
|
|
257
|
+
}
|
|
258
|
+
return requested;
|
|
259
|
+
}
|
|
260
|
+
function isProtocolErrorCode(value) {
|
|
261
|
+
return value === 'invalid_handshake'
|
|
262
|
+
|| value === 'protocol_mismatch'
|
|
263
|
+
|| value === 'surface_mismatch'
|
|
264
|
+
|| value === 'not_connected'
|
|
265
|
+
|| value === 'invalid_response';
|
|
266
|
+
}
|
|
267
|
+
export function asError(error) {
|
|
268
|
+
return error instanceof Error ? error : new Error(String(error));
|
|
269
|
+
}
|
|
270
|
+
export function isRecord(value) {
|
|
271
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
272
|
+
}
|
|
273
|
+
export function isNodeError(error, code) {
|
|
274
|
+
return error instanceof Error && 'code' in error && error.code === code;
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=localTransport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localTransport.js","sourceRoot":"","sources":["../src/localTransport.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@xenosystem/agent-interface-client",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"license": "UNLICENSED",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./local": {
|
|
14
|
+
"types": "./dist/local/index.d.ts",
|
|
15
|
+
"import": "./dist/local/index.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist"
|
|
20
|
+
],
|
|
21
|
+
"publishConfig": {
|
|
22
|
+
"registry": "https://npm.pkg.github.com",
|
|
23
|
+
"access": "restricted"
|
|
24
|
+
},
|
|
25
|
+
"repository": {
|
|
26
|
+
"type": "git",
|
|
27
|
+
"url": "git+https://github.com/XENO-CORPORATION/xeno-agent-interface.git",
|
|
28
|
+
"directory": "packages/client"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@xenosystem/agent-interface-contract": "0.1.0"
|
|
32
|
+
},
|
|
33
|
+
"scripts": {}
|
|
34
|
+
}
|