@allin-ai/agent-client 0.1.0 → 0.2.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 +75 -42
- package/dist/cli/commands.d.ts +9 -0
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +244 -7
- package/dist/cli/commands.js.map +1 -1
- package/dist/client/index.d.ts +7 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +6 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/state-store.d.ts +1 -1
- package/dist/client/state-store.d.ts.map +1 -1
- package/dist/client/state-store.js +1 -1
- package/dist/client/state-store.js.map +1 -1
- package/dist/client/supervisor.d.ts +37 -1
- package/dist/client/supervisor.d.ts.map +1 -1
- package/dist/client/supervisor.js +159 -10
- package/dist/client/supervisor.js.map +1 -1
- package/dist/client/transport.d.ts +5 -1
- package/dist/client/transport.d.ts.map +1 -1
- package/dist/client/types.d.ts +6 -64
- package/dist/client/types.d.ts.map +1 -1
- package/dist/client/types.js +9 -12
- package/dist/client/types.js.map +1 -1
- package/dist/client/wire.d.ts +2 -31
- package/dist/client/wire.d.ts.map +1 -1
- package/dist/client/wire.js +2 -301
- package/dist/client/wire.js.map +1 -1
- package/dist/client/ws-transport.d.ts +5 -1
- package/dist/client/ws-transport.d.ts.map +1 -1
- package/dist/client/ws-transport.js +30 -6
- package/dist/client/ws-transport.js.map +1 -1
- package/dist/config.d.ts +10 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +30 -1
- package/dist/config.js.map +1 -1
- package/dist/control.d.ts +6 -0
- package/dist/control.d.ts.map +1 -1
- package/dist/control.js +25 -0
- package/dist/control.js.map +1 -1
- package/dist/demo/index.d.ts +3 -0
- package/dist/demo/index.d.ts.map +1 -0
- package/dist/demo/index.js +2 -0
- package/dist/demo/index.js.map +1 -0
- package/dist/demo/observable-store.d.ts +55 -0
- package/dist/demo/observable-store.d.ts.map +1 -0
- package/dist/demo/observable-store.js +88 -0
- package/dist/demo/observable-store.js.map +1 -0
- package/dist/demo/projection.d.ts +23 -0
- package/dist/demo/projection.d.ts.map +1 -0
- package/dist/demo/projection.js +47 -0
- package/dist/demo/projection.js.map +1 -0
- package/dist/demo/site.d.ts +30 -0
- package/dist/demo/site.d.ts.map +1 -0
- package/dist/demo/site.js +330 -0
- package/dist/demo/site.js.map +1 -0
- package/dist/demo/static.d.ts +5 -0
- package/dist/demo/static.d.ts.map +1 -0
- package/dist/demo/static.js +53 -0
- package/dist/demo/static.js.map +1 -0
- package/dist/demo/token-registry.d.ts +20 -0
- package/dist/demo/token-registry.d.ts.map +1 -0
- package/dist/demo/token-registry.js +34 -0
- package/dist/demo/token-registry.js.map +1 -0
- package/dist/demo/types.d.ts +8 -0
- package/dist/demo/types.d.ts.map +1 -0
- package/dist/demo/types.js +2 -0
- package/dist/demo/types.js.map +1 -0
- package/dist/hub/agent-hub.d.ts +4 -0
- package/dist/hub/agent-hub.d.ts.map +1 -0
- package/dist/hub/agent-hub.js +352 -0
- package/dist/hub/agent-hub.js.map +1 -0
- package/dist/hub/index.d.ts +3 -0
- package/dist/hub/index.d.ts.map +1 -0
- package/dist/hub/index.js +2 -0
- package/dist/hub/index.js.map +1 -0
- package/dist/hub/testkit/index.d.ts +4 -0
- package/dist/hub/testkit/index.d.ts.map +1 -0
- package/dist/hub/testkit/index.js +4 -0
- package/dist/hub/testkit/index.js.map +1 -0
- package/dist/hub/testkit/memory-hub.d.ts +23 -0
- package/dist/hub/testkit/memory-hub.d.ts.map +1 -0
- package/dist/hub/testkit/memory-hub.js +33 -0
- package/dist/hub/testkit/memory-hub.js.map +1 -0
- package/dist/hub/testkit/memory-store.d.ts +62 -0
- package/dist/hub/testkit/memory-store.d.ts.map +1 -0
- package/dist/hub/testkit/memory-store.js +186 -0
- package/dist/hub/testkit/memory-store.js.map +1 -0
- package/dist/hub/types.d.ts +118 -0
- package/dist/hub/types.d.ts.map +1 -0
- package/dist/hub/types.js +2 -0
- package/dist/hub/types.js.map +1 -0
- package/dist/hub.d.ts +2 -82
- package/dist/hub.d.ts.map +1 -1
- package/dist/hub.js +2 -411
- package/dist/hub.js.map +1 -1
- package/dist/index.d.ts +3 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/login.d.ts +22 -0
- package/dist/login.d.ts.map +1 -0
- package/dist/login.js +94 -0
- package/dist/login.js.map +1 -0
- package/dist/protocol/index.d.ts +3 -0
- package/dist/protocol/index.d.ts.map +1 -0
- package/dist/protocol/index.js +3 -0
- package/dist/protocol/index.js.map +1 -0
- package/dist/protocol/types.d.ts +111 -0
- package/dist/protocol/types.d.ts.map +1 -0
- package/dist/protocol/types.js +13 -0
- package/dist/protocol/types.js.map +1 -0
- package/dist/protocol/wire.d.ts +25 -0
- package/dist/protocol/wire.d.ts.map +1 -0
- package/dist/protocol/wire.js +337 -0
- package/dist/protocol/wire.js.map +1 -0
- package/dist/runtime/claude.d.ts +32 -9
- package/dist/runtime/claude.d.ts.map +1 -1
- package/dist/runtime/claude.js +18 -2
- package/dist/runtime/claude.js.map +1 -1
- package/dist/runtime/codex.d.ts +12 -0
- package/dist/runtime/codex.d.ts.map +1 -1
- package/dist/runtime/codex.js +31 -6
- package/dist/runtime/codex.js.map +1 -1
- package/dist/runtime/index.d.ts +4 -4
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +1 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/pi.d.ts +25 -2
- package/dist/runtime/pi.d.ts.map +1 -1
- package/dist/runtime/pi.js +20 -3
- package/dist/runtime/pi.js.map +1 -1
- package/dist/runtime/registry.d.ts +9 -4
- package/dist/runtime/registry.d.ts.map +1 -1
- package/dist/runtime/registry.js +7 -7
- package/dist/runtime/registry.js.map +1 -1
- package/dist/runtime/runner-child.js +48 -4
- package/dist/runtime/runner-child.js.map +1 -1
- package/dist/wire.d.ts +2 -23
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +2 -6
- package/dist/wire.js.map +1 -1
- package/package.json +145 -34
- package/web/app.js +253 -0
- package/web/index.html +421 -0
- package/web/login.html +85 -0
- package/web/style.css +484 -0
package/dist/client/types.d.ts
CHANGED
|
@@ -1,65 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
kind: "agent.run";
|
|
8
|
-
commandId: string;
|
|
9
|
-
executionId: string;
|
|
10
|
-
taskId: string;
|
|
11
|
-
attempt: number;
|
|
12
|
-
runtime: RuntimeId;
|
|
13
|
-
payload: AgentInput;
|
|
14
|
-
} | {
|
|
15
|
-
kind: "capability.invoke";
|
|
16
|
-
commandId: string;
|
|
17
|
-
executionId: string;
|
|
18
|
-
taskId: string;
|
|
19
|
-
attempt: number;
|
|
20
|
-
capabilityId: string;
|
|
21
|
-
input: Record<string, unknown>;
|
|
22
|
-
} | {
|
|
23
|
-
kind: "cancel";
|
|
24
|
-
commandId: string;
|
|
25
|
-
executionId: string;
|
|
26
|
-
};
|
|
27
|
-
export declare const CLIENT_EVENT_TYPES: readonly ["received", "running", "awaiting_approval", "progress", "done", "failed", "cancelled", "recovery_required", "rejected"];
|
|
28
|
-
export type ClientEventType = (typeof CLIENT_EVENT_TYPES)[number];
|
|
29
|
-
export type ClientEvent = {
|
|
30
|
-
executionId: string;
|
|
31
|
-
eventSeq: number;
|
|
32
|
-
type: ClientEventType;
|
|
33
|
-
payload?: Record<string, unknown>;
|
|
34
|
-
occurredAt: string;
|
|
35
|
-
};
|
|
36
|
-
export type ClientEventBatch = {
|
|
37
|
-
type: "event.push";
|
|
38
|
-
events: ClientEvent[];
|
|
39
|
-
};
|
|
40
|
-
/** Hub desired plugin state is shared with the local Git installer. */
|
|
41
|
-
export type PluginConfig = GitPluginConfig;
|
|
42
|
-
export type HubDownlink = {
|
|
43
|
-
type: "task.offer";
|
|
44
|
-
command: ClientCommand;
|
|
45
|
-
} | {
|
|
46
|
-
type: "plugin.sync";
|
|
47
|
-
revision: string;
|
|
48
|
-
plugins: PluginConfig[];
|
|
49
|
-
};
|
|
50
|
-
export type PluginSyncStatus = "applied" | "already_applied" | "failed";
|
|
51
|
-
/** Local acknowledgement of a desired-state revision; it never carries a pluginSet task field. */
|
|
52
|
-
export type PluginSyncAcknowledgement = {
|
|
53
|
-
type: "plugin.sync.ack";
|
|
54
|
-
revision: string;
|
|
55
|
-
status: PluginSyncStatus;
|
|
56
|
-
plugins: Array<{
|
|
57
|
-
id: string;
|
|
58
|
-
resolvedCommit: string;
|
|
59
|
-
}>;
|
|
60
|
-
error?: {
|
|
61
|
-
code: "plugin_sync_failed";
|
|
62
|
-
message: string;
|
|
63
|
-
};
|
|
64
|
-
};
|
|
1
|
+
/** @deprecated Import protocol types from `@allin-ai/agent-client/protocol`. */
|
|
2
|
+
export * from "../protocol/types.js";
|
|
3
|
+
/** Thrown before transport startup when a client-owned endpoint setting is unsafe. */
|
|
4
|
+
export declare class AgentClientConfigurationError extends Error {
|
|
5
|
+
constructor(message: string);
|
|
6
|
+
}
|
|
65
7
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,cAAc,sBAAsB,CAAC;AAErC,sFAAsF;AACtF,qBAAa,6BAA8B,SAAQ,KAAK;gBAC1C,OAAO,EAAE,MAAM;CAI5B"}
|
package/dist/client/types.js
CHANGED
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
"recovery_required",
|
|
11
|
-
"rejected",
|
|
12
|
-
];
|
|
1
|
+
/** @deprecated Import protocol types from `@allin-ai/agent-client/protocol`. */
|
|
2
|
+
export * from "../protocol/types.js";
|
|
3
|
+
/** Thrown before transport startup when a client-owned endpoint setting is unsafe. */
|
|
4
|
+
export class AgentClientConfigurationError extends Error {
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "AgentClientConfigurationError";
|
|
8
|
+
}
|
|
9
|
+
}
|
|
13
10
|
//# sourceMappingURL=types.js.map
|
package/dist/client/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,cAAc,sBAAsB,CAAC;AAErC,sFAAsF;AACtF,MAAM,OAAO,6BAA8B,SAAQ,KAAK;IACtD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAC;IAC9C,CAAC;CACF"}
|
package/dist/client/wire.d.ts
CHANGED
|
@@ -1,32 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Validates a Hub command before it can be admitted to the local inbox.
|
|
5
|
-
* The capability branch intentionally has no arbitrary command/argv/shell
|
|
6
|
-
* escape hatch: the installed capability chooses its fixed entrypoint.
|
|
7
|
-
*/
|
|
8
|
-
export declare function parseClientCommand(value: unknown): ClientCommand | null;
|
|
9
|
-
/** Parses the only v2 event uplink envelope accepted by a Hub. */
|
|
10
|
-
export declare function parseClientEventBatch(value: unknown): ClientEvent[] | null;
|
|
11
|
-
/** Validates and shapes an event batch before a transport serializes it. */
|
|
12
|
-
export declare function encodeClientEventBatch(events: ClientEvent[]): ClientEventBatch;
|
|
13
|
-
export type ClientHello = {
|
|
14
|
-
type: "client.hello";
|
|
15
|
-
protocolVersion: typeof AGENT_CLIENT_PROTOCOL_VERSION;
|
|
16
|
-
clientId: string;
|
|
17
|
-
};
|
|
18
|
-
export type HubEventAcknowledgement = {
|
|
19
|
-
type: "event.ack";
|
|
20
|
-
watermarks: Record<string, number>;
|
|
21
|
-
};
|
|
22
|
-
/** Strictly validates the plugin desired-state acknowledgement emitted by a Client. */
|
|
23
|
-
export declare function parsePluginSyncAcknowledgement(value: unknown): PluginSyncAcknowledgement | null;
|
|
24
|
-
export declare function encodePluginSyncAcknowledgement(value: PluginSyncAcknowledgement): PluginSyncAcknowledgement;
|
|
25
|
-
/** Only protocol-v2 clients may open a v2 Hub connection. */
|
|
26
|
-
export declare function parseClientHello(value: unknown): ClientHello | null;
|
|
27
|
-
export declare function encodeClientHello(clientId: string): ClientHello;
|
|
28
|
-
/** Parses a validated v2 Hub command before it reaches local execution code. */
|
|
29
|
-
export declare function parseHubDownlink(value: unknown): HubDownlink | null;
|
|
30
|
-
/** Parses the acknowledgement envelope paired with one `event.push` batch. */
|
|
31
|
-
export declare function parseHubEventAcknowledgement(value: unknown): HubEventAcknowledgement | null;
|
|
1
|
+
/** @deprecated Import protocol parsers from `@allin-ai/agent-client/protocol`. */
|
|
2
|
+
export * from "../protocol/wire.js";
|
|
32
3
|
//# sourceMappingURL=wire.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../src/client/wire.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../src/client/wire.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,cAAc,qBAAqB,CAAC"}
|
package/dist/client/wire.js
CHANGED
|
@@ -1,302 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const CAPABILITY_SHELL_FIELDS = ["command", "argv", "shell"];
|
|
4
|
-
function isPlainObject(value) {
|
|
5
|
-
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
6
|
-
return false;
|
|
7
|
-
const prototype = Object.getPrototypeOf(value);
|
|
8
|
-
return prototype === Object.prototype || prototype === null;
|
|
9
|
-
}
|
|
10
|
-
function isNonEmptyString(value) {
|
|
11
|
-
return typeof value === "string" && value.trim().length > 0;
|
|
12
|
-
}
|
|
13
|
-
function isNonNegativeInteger(value) {
|
|
14
|
-
return typeof value === "number" && Number.isInteger(value) && value >= 0;
|
|
15
|
-
}
|
|
16
|
-
function hasOnlyKeys(value, allowed) {
|
|
17
|
-
return Object.keys(value).every((key) => allowed.includes(key));
|
|
18
|
-
}
|
|
19
|
-
function isRuntimeId(value) {
|
|
20
|
-
return (typeof value === "string" && CLIENT_RUNTIME_IDS.includes(value));
|
|
21
|
-
}
|
|
22
|
-
function isClientEventType(value) {
|
|
23
|
-
return (typeof value === "string" &&
|
|
24
|
-
CLIENT_EVENT_TYPES.includes(value));
|
|
25
|
-
}
|
|
26
|
-
function isPluginConfig(value) {
|
|
27
|
-
if (!isPlainObject(value) ||
|
|
28
|
-
!hasOnlyKeys(value, ["id", "gitUrl", "ref", "enabled", "runtimes"]) ||
|
|
29
|
-
!isNonEmptyString(value.id) ||
|
|
30
|
-
!isNonEmptyString(value.gitUrl) ||
|
|
31
|
-
typeof value.enabled !== "boolean") {
|
|
32
|
-
return false;
|
|
33
|
-
}
|
|
34
|
-
if (value.ref !== undefined && !isNonEmptyString(value.ref))
|
|
35
|
-
return false;
|
|
36
|
-
return (value.runtimes === undefined ||
|
|
37
|
-
(Array.isArray(value.runtimes) && value.runtimes.every(isRuntimeId)));
|
|
38
|
-
}
|
|
39
|
-
function hasCapabilityShellField(value, seen = new WeakSet()) {
|
|
40
|
-
if (!value || typeof value !== "object")
|
|
41
|
-
return false;
|
|
42
|
-
if (seen.has(value))
|
|
43
|
-
return false;
|
|
44
|
-
seen.add(value);
|
|
45
|
-
if (Array.isArray(value)) {
|
|
46
|
-
return value.some((item) => hasCapabilityShellField(item, seen));
|
|
47
|
-
}
|
|
48
|
-
if (!isPlainObject(value))
|
|
49
|
-
return false;
|
|
50
|
-
return Object.entries(value).some(([key, item]) => CAPABILITY_SHELL_FIELDS.includes(key) || hasCapabilityShellField(item, seen));
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Validates a Hub command before it can be admitted to the local inbox.
|
|
54
|
-
* The capability branch intentionally has no arbitrary command/argv/shell
|
|
55
|
-
* escape hatch: the installed capability chooses its fixed entrypoint.
|
|
56
|
-
*/
|
|
57
|
-
export function parseClientCommand(value) {
|
|
58
|
-
if (!isPlainObject(value) || !isNonEmptyString(value.kind))
|
|
59
|
-
return null;
|
|
60
|
-
if (value.kind === "agent.run") {
|
|
61
|
-
if (!hasOnlyKeys(value, [
|
|
62
|
-
"kind",
|
|
63
|
-
"commandId",
|
|
64
|
-
"executionId",
|
|
65
|
-
"taskId",
|
|
66
|
-
"attempt",
|
|
67
|
-
"runtime",
|
|
68
|
-
"payload",
|
|
69
|
-
]) ||
|
|
70
|
-
!isNonEmptyString(value.commandId) ||
|
|
71
|
-
!isNonEmptyString(value.executionId) ||
|
|
72
|
-
!isNonEmptyString(value.taskId) ||
|
|
73
|
-
!isNonNegativeInteger(value.attempt) ||
|
|
74
|
-
!isRuntimeId(value.runtime) ||
|
|
75
|
-
!isPlainObject(value.payload)) {
|
|
76
|
-
return null;
|
|
77
|
-
}
|
|
78
|
-
return {
|
|
79
|
-
kind: "agent.run",
|
|
80
|
-
commandId: value.commandId,
|
|
81
|
-
executionId: value.executionId,
|
|
82
|
-
taskId: value.taskId,
|
|
83
|
-
attempt: value.attempt,
|
|
84
|
-
runtime: value.runtime,
|
|
85
|
-
payload: value.payload,
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
if (value.kind === "capability.invoke") {
|
|
89
|
-
if (!hasOnlyKeys(value, [
|
|
90
|
-
"kind",
|
|
91
|
-
"commandId",
|
|
92
|
-
"executionId",
|
|
93
|
-
"taskId",
|
|
94
|
-
"attempt",
|
|
95
|
-
"capabilityId",
|
|
96
|
-
"input",
|
|
97
|
-
]) ||
|
|
98
|
-
!isNonEmptyString(value.commandId) ||
|
|
99
|
-
!isNonEmptyString(value.executionId) ||
|
|
100
|
-
!isNonEmptyString(value.taskId) ||
|
|
101
|
-
!isNonNegativeInteger(value.attempt) ||
|
|
102
|
-
!isNonEmptyString(value.capabilityId) ||
|
|
103
|
-
!isPlainObject(value.input) ||
|
|
104
|
-
hasCapabilityShellField(value.input)) {
|
|
105
|
-
return null;
|
|
106
|
-
}
|
|
107
|
-
return {
|
|
108
|
-
kind: "capability.invoke",
|
|
109
|
-
commandId: value.commandId,
|
|
110
|
-
executionId: value.executionId,
|
|
111
|
-
taskId: value.taskId,
|
|
112
|
-
attempt: value.attempt,
|
|
113
|
-
capabilityId: value.capabilityId,
|
|
114
|
-
input: value.input,
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
if (value.kind === "cancel") {
|
|
118
|
-
if (!hasOnlyKeys(value, ["kind", "commandId", "executionId"]) ||
|
|
119
|
-
!isNonEmptyString(value.commandId) ||
|
|
120
|
-
!isNonEmptyString(value.executionId)) {
|
|
121
|
-
return null;
|
|
122
|
-
}
|
|
123
|
-
return {
|
|
124
|
-
kind: "cancel",
|
|
125
|
-
commandId: value.commandId,
|
|
126
|
-
executionId: value.executionId,
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
return null;
|
|
130
|
-
}
|
|
131
|
-
function parseClientEvent(value) {
|
|
132
|
-
if (!isPlainObject(value) ||
|
|
133
|
-
!hasOnlyKeys(value, [
|
|
134
|
-
"executionId",
|
|
135
|
-
"eventSeq",
|
|
136
|
-
"type",
|
|
137
|
-
"payload",
|
|
138
|
-
"occurredAt",
|
|
139
|
-
]) ||
|
|
140
|
-
!isNonEmptyString(value.executionId) ||
|
|
141
|
-
!isNonNegativeInteger(value.eventSeq) ||
|
|
142
|
-
!isClientEventType(value.type) ||
|
|
143
|
-
!isNonEmptyString(value.occurredAt)) {
|
|
144
|
-
return null;
|
|
145
|
-
}
|
|
146
|
-
const hasPayload = Object.hasOwn(value, "payload");
|
|
147
|
-
if (hasPayload) {
|
|
148
|
-
if (!isPlainObject(value.payload))
|
|
149
|
-
return null;
|
|
150
|
-
return {
|
|
151
|
-
executionId: value.executionId,
|
|
152
|
-
eventSeq: value.eventSeq,
|
|
153
|
-
type: value.type,
|
|
154
|
-
payload: value.payload,
|
|
155
|
-
occurredAt: value.occurredAt,
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
return {
|
|
159
|
-
executionId: value.executionId,
|
|
160
|
-
eventSeq: value.eventSeq,
|
|
161
|
-
type: value.type,
|
|
162
|
-
occurredAt: value.occurredAt,
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
/** Parses the only v2 event uplink envelope accepted by a Hub. */
|
|
166
|
-
export function parseClientEventBatch(value) {
|
|
167
|
-
if (!isPlainObject(value) ||
|
|
168
|
-
!hasOnlyKeys(value, ["type", "events"]) ||
|
|
169
|
-
value.type !== "event.push" ||
|
|
170
|
-
!Array.isArray(value.events)) {
|
|
171
|
-
return null;
|
|
172
|
-
}
|
|
173
|
-
const events = [];
|
|
174
|
-
for (const event of value.events) {
|
|
175
|
-
const parsed = parseClientEvent(event);
|
|
176
|
-
if (!parsed)
|
|
177
|
-
return null;
|
|
178
|
-
events.push(parsed);
|
|
179
|
-
}
|
|
180
|
-
return events;
|
|
181
|
-
}
|
|
182
|
-
/** Validates and shapes an event batch before a transport serializes it. */
|
|
183
|
-
export function encodeClientEventBatch(events) {
|
|
184
|
-
const parsed = parseClientEventBatch({ type: "event.push", events });
|
|
185
|
-
if (!parsed)
|
|
186
|
-
throw new TypeError("Invalid ClientEvent batch");
|
|
187
|
-
return { type: "event.push", events: parsed };
|
|
188
|
-
}
|
|
189
|
-
function isPluginSyncAcknowledgement(value) {
|
|
190
|
-
if (!isPlainObject(value) ||
|
|
191
|
-
!hasOnlyKeys(value, ["type", "revision", "status", "plugins", "error"]) ||
|
|
192
|
-
value.type !== "plugin.sync.ack" ||
|
|
193
|
-
!isNonEmptyString(value.revision) ||
|
|
194
|
-
!["applied", "already_applied", "failed"].includes(value.status) ||
|
|
195
|
-
!Array.isArray(value.plugins) ||
|
|
196
|
-
!value.plugins.every((plugin) => isPlainObject(plugin) &&
|
|
197
|
-
hasOnlyKeys(plugin, ["id", "resolvedCommit"]) &&
|
|
198
|
-
isNonEmptyString(plugin.id) &&
|
|
199
|
-
typeof plugin.resolvedCommit === "string" &&
|
|
200
|
-
/^[0-9a-f]{40}$/i.test(plugin.resolvedCommit))) {
|
|
201
|
-
return false;
|
|
202
|
-
}
|
|
203
|
-
if (value.error === undefined)
|
|
204
|
-
return value.status !== "failed";
|
|
205
|
-
return (value.status === "failed" &&
|
|
206
|
-
isPlainObject(value.error) &&
|
|
207
|
-
hasOnlyKeys(value.error, ["code", "message"]) &&
|
|
208
|
-
value.error.code === "plugin_sync_failed" &&
|
|
209
|
-
isNonEmptyString(value.error.message));
|
|
210
|
-
}
|
|
211
|
-
/** Strictly validates the plugin desired-state acknowledgement emitted by a Client. */
|
|
212
|
-
export function parsePluginSyncAcknowledgement(value) {
|
|
213
|
-
if (!isPluginSyncAcknowledgement(value))
|
|
214
|
-
return null;
|
|
215
|
-
return {
|
|
216
|
-
type: "plugin.sync.ack",
|
|
217
|
-
revision: value.revision,
|
|
218
|
-
status: value.status,
|
|
219
|
-
plugins: value.plugins.map(({ id, resolvedCommit }) => ({
|
|
220
|
-
id,
|
|
221
|
-
resolvedCommit: resolvedCommit.toLowerCase(),
|
|
222
|
-
})),
|
|
223
|
-
...(value.error
|
|
224
|
-
? {
|
|
225
|
-
error: {
|
|
226
|
-
code: "plugin_sync_failed",
|
|
227
|
-
message: value.error.message,
|
|
228
|
-
},
|
|
229
|
-
}
|
|
230
|
-
: {}),
|
|
231
|
-
};
|
|
232
|
-
}
|
|
233
|
-
export function encodePluginSyncAcknowledgement(value) {
|
|
234
|
-
const parsed = parsePluginSyncAcknowledgement(value);
|
|
235
|
-
if (!parsed)
|
|
236
|
-
throw new TypeError("Invalid plugin sync acknowledgement");
|
|
237
|
-
return parsed;
|
|
238
|
-
}
|
|
239
|
-
/** Only protocol-v2 clients may open a v2 Hub connection. */
|
|
240
|
-
export function parseClientHello(value) {
|
|
241
|
-
if (!isPlainObject(value) ||
|
|
242
|
-
!hasOnlyKeys(value, ["type", "protocolVersion", "clientId"]) ||
|
|
243
|
-
value.type !== "client.hello" ||
|
|
244
|
-
value.protocolVersion !== AGENT_CLIENT_PROTOCOL_VERSION ||
|
|
245
|
-
!isNonEmptyString(value.clientId)) {
|
|
246
|
-
return null;
|
|
247
|
-
}
|
|
248
|
-
return {
|
|
249
|
-
type: "client.hello",
|
|
250
|
-
protocolVersion: AGENT_CLIENT_PROTOCOL_VERSION,
|
|
251
|
-
clientId: value.clientId,
|
|
252
|
-
};
|
|
253
|
-
}
|
|
254
|
-
export function encodeClientHello(clientId) {
|
|
255
|
-
const hello = parseClientHello({
|
|
256
|
-
type: "client.hello",
|
|
257
|
-
protocolVersion: AGENT_CLIENT_PROTOCOL_VERSION,
|
|
258
|
-
clientId,
|
|
259
|
-
});
|
|
260
|
-
if (!hello)
|
|
261
|
-
throw new TypeError("Client id must be a non-empty string");
|
|
262
|
-
return hello;
|
|
263
|
-
}
|
|
264
|
-
/** Parses a validated v2 Hub command before it reaches local execution code. */
|
|
265
|
-
export function parseHubDownlink(value) {
|
|
266
|
-
if (!isPlainObject(value) || !isNonEmptyString(value.type))
|
|
267
|
-
return null;
|
|
268
|
-
if (value.type === "task.offer" && hasOnlyKeys(value, ["type", "command"])) {
|
|
269
|
-
const command = parseClientCommand(value.command);
|
|
270
|
-
return command ? { type: "task.offer", command } : null;
|
|
271
|
-
}
|
|
272
|
-
if (value.type === "plugin.sync" &&
|
|
273
|
-
hasOnlyKeys(value, ["type", "revision", "plugins"]) &&
|
|
274
|
-
isNonEmptyString(value.revision) &&
|
|
275
|
-
Array.isArray(value.plugins) &&
|
|
276
|
-
value.plugins.every(isPluginConfig)) {
|
|
277
|
-
return {
|
|
278
|
-
type: "plugin.sync",
|
|
279
|
-
revision: value.revision,
|
|
280
|
-
plugins: value.plugins,
|
|
281
|
-
};
|
|
282
|
-
}
|
|
283
|
-
return null;
|
|
284
|
-
}
|
|
285
|
-
/** Parses the acknowledgement envelope paired with one `event.push` batch. */
|
|
286
|
-
export function parseHubEventAcknowledgement(value) {
|
|
287
|
-
if (!isPlainObject(value) ||
|
|
288
|
-
!hasOnlyKeys(value, ["type", "watermarks"]) ||
|
|
289
|
-
value.type !== "event.ack" ||
|
|
290
|
-
!isPlainObject(value.watermarks)) {
|
|
291
|
-
return null;
|
|
292
|
-
}
|
|
293
|
-
const watermarks = {};
|
|
294
|
-
for (const [executionId, watermark] of Object.entries(value.watermarks)) {
|
|
295
|
-
if (!isNonEmptyString(executionId) || !isNonNegativeInteger(watermark)) {
|
|
296
|
-
return null;
|
|
297
|
-
}
|
|
298
|
-
watermarks[executionId] = watermark;
|
|
299
|
-
}
|
|
300
|
-
return { type: "event.ack", watermarks };
|
|
301
|
-
}
|
|
1
|
+
/** @deprecated Import protocol parsers from `@allin-ai/agent-client/protocol`. */
|
|
2
|
+
export * from "../protocol/wire.js";
|
|
302
3
|
//# sourceMappingURL=wire.js.map
|
package/dist/client/wire.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wire.js","sourceRoot":"","sources":["../../src/client/wire.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"wire.js","sourceRoot":"","sources":["../../src/client/wire.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,cAAc,qBAAqB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ClientEvent, type InventoryReport, type PluginSyncAcknowledgement } from "../protocol/index.js";
|
|
2
2
|
import type { ClientTransport, ClientTransportHandlers } from "./transport.js";
|
|
3
3
|
export type ClientWebSocketLike = {
|
|
4
4
|
readyState: number;
|
|
@@ -13,6 +13,8 @@ export type ClientWebSocketLike = {
|
|
|
13
13
|
};
|
|
14
14
|
export type WsClientTransportOptions = {
|
|
15
15
|
hubBaseUrl: string;
|
|
16
|
+
/** Host-owned Hub route; defaults to the protocol-v2 Hub endpoint. */
|
|
17
|
+
pathPrefix?: string;
|
|
16
18
|
token: string;
|
|
17
19
|
clientId: string;
|
|
18
20
|
WebSocketImpl?: new (url: string) => ClientWebSocketLike;
|
|
@@ -29,6 +31,7 @@ export declare class WsClientTransport implements ClientTransport {
|
|
|
29
31
|
private readonly WebSocketImpl;
|
|
30
32
|
private readonly reconnectBaseMs;
|
|
31
33
|
private readonly reconnectMaxMs;
|
|
34
|
+
private readonly pathPrefix;
|
|
32
35
|
private handlers;
|
|
33
36
|
private socket;
|
|
34
37
|
private reconnectTimer;
|
|
@@ -40,6 +43,7 @@ export declare class WsClientTransport implements ClientTransport {
|
|
|
40
43
|
connect(handlers: ClientTransportHandlers): Promise<void>;
|
|
41
44
|
push(events: ClientEvent[]): Promise<Record<string, number>>;
|
|
42
45
|
reportPluginSync(acknowledgement: PluginSyncAcknowledgement): Promise<void>;
|
|
46
|
+
reportInventory(report: InventoryReport): Promise<void>;
|
|
43
47
|
close(): Promise<void>;
|
|
44
48
|
private connectSocket;
|
|
45
49
|
private notifyConnected;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-transport.d.ts","sourceRoot":"","sources":["../../src/client/ws-transport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ws-transport.d.ts","sourceRoot":"","sources":["../../src/client/ws-transport.ts"],"names":[],"mappings":"AACA,OAAO,EAOL,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAQ/E,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IACvD,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7B,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,mBAAmB,CAAC;IACzD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AA6CF;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,eAAe;IAa3C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAZpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA2C;IACzE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAwC;IACxD,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,sBAAsB,CAAuC;IACrE,OAAO,CAAC,QAAQ,CAAoC;gBAEvB,OAAO,EAAE,wBAAwB;IAqBxD,OAAO,CAAC,QAAQ,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzD,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAS5D,gBAAgB,CACpB,eAAe,EAAE,yBAAyB,GACzC,OAAO,CAAC,IAAI,CAAC;IAUV,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB5B,OAAO,CAAC,aAAa;YAgDP,eAAe;YAUf,cAAc;IAgC5B,OAAO,CAAC,YAAY;YAmBN,OAAO;IAwBrB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,4BAA4B;CAKrC"}
|
|
@@ -1,13 +1,27 @@
|
|
|
1
1
|
import { bridgeLog } from "../logger.js";
|
|
2
|
-
import { encodeClientEventBatch, encodeClientHello, encodePluginSyncAcknowledgement, parseHubDownlink, parseHubEventAcknowledgement, } from "
|
|
2
|
+
import { encodeClientEventBatch, encodeClientHello, encodeInventoryReport, encodePluginSyncAcknowledgement, parseHubDownlink, parseHubEventAcknowledgement, } from "../protocol/index.js";
|
|
3
|
+
import { AgentClientConfigurationError } from "./types.js";
|
|
3
4
|
const DEFAULT_RECONNECT_BASE_MS = 1_000;
|
|
4
5
|
const DEFAULT_RECONNECT_MAX_MS = 30_000;
|
|
6
|
+
const DEFAULT_PATH_PREFIX = "/api/agent-hub/v2";
|
|
5
7
|
const WS_OPEN = 1;
|
|
6
|
-
function
|
|
7
|
-
const
|
|
8
|
+
function normalizePathPrefix(pathPrefix) {
|
|
9
|
+
const raw = pathPrefix ?? DEFAULT_PATH_PREFIX;
|
|
10
|
+
const normalized = raw.endsWith("/") ? raw.slice(0, -1) : raw;
|
|
11
|
+
if (!normalized ||
|
|
12
|
+
!normalized.startsWith("/") ||
|
|
13
|
+
/[?#\\\s]/.test(normalized) ||
|
|
14
|
+
new URL(normalized, "http://hub.invalid").pathname !== normalized) {
|
|
15
|
+
throw new AgentClientConfigurationError("pathPrefix must be an absolute path without query, fragment, whitespace, or a trailing slash");
|
|
16
|
+
}
|
|
17
|
+
return normalized;
|
|
18
|
+
}
|
|
19
|
+
function toWebSocketUrl(hubBaseUrl, pathPrefix, token) {
|
|
20
|
+
const url = new URL(new URL(hubBaseUrl).origin);
|
|
8
21
|
url.protocol = url.protocol === "https:" ? "wss:" : "ws:";
|
|
9
|
-
|
|
10
|
-
url.
|
|
22
|
+
url.pathname = `${pathPrefix}/ws`;
|
|
23
|
+
url.search = "";
|
|
24
|
+
url.hash = "";
|
|
11
25
|
url.searchParams.set("token", token);
|
|
12
26
|
return url.toString();
|
|
13
27
|
}
|
|
@@ -24,6 +38,7 @@ export class WsClientTransport {
|
|
|
24
38
|
WebSocketImpl;
|
|
25
39
|
reconnectBaseMs;
|
|
26
40
|
reconnectMaxMs;
|
|
41
|
+
pathPrefix;
|
|
27
42
|
handlers = null;
|
|
28
43
|
socket = null;
|
|
29
44
|
reconnectTimer = null;
|
|
@@ -33,6 +48,7 @@ export class WsClientTransport {
|
|
|
33
48
|
pushTail = Promise.resolve();
|
|
34
49
|
constructor(options) {
|
|
35
50
|
this.options = options;
|
|
51
|
+
this.pathPrefix = normalizePathPrefix(options.pathPrefix);
|
|
36
52
|
const implementation = options.WebSocketImpl ??
|
|
37
53
|
globalThis.WebSocket;
|
|
38
54
|
if (!implementation) {
|
|
@@ -59,6 +75,13 @@ export class WsClientTransport {
|
|
|
59
75
|
}
|
|
60
76
|
socket.send(JSON.stringify(encodePluginSyncAcknowledgement(acknowledgement)));
|
|
61
77
|
}
|
|
78
|
+
async reportInventory(report) {
|
|
79
|
+
const socket = this.socket;
|
|
80
|
+
if (!socket || socket.readyState !== WS_OPEN) {
|
|
81
|
+
throw new Error("Hub WebSocket is not connected");
|
|
82
|
+
}
|
|
83
|
+
socket.send(JSON.stringify(encodeInventoryReport(report)));
|
|
84
|
+
}
|
|
62
85
|
async close() {
|
|
63
86
|
this.stopped = true;
|
|
64
87
|
this.clearReconnect();
|
|
@@ -81,7 +104,7 @@ export class WsClientTransport {
|
|
|
81
104
|
this.clearReconnect();
|
|
82
105
|
let socket;
|
|
83
106
|
try {
|
|
84
|
-
socket = new this.WebSocketImpl(toWebSocketUrl(this.options.hubBaseUrl, this.options.token));
|
|
107
|
+
socket = new this.WebSocketImpl(toWebSocketUrl(this.options.hubBaseUrl, this.pathPrefix, this.options.token));
|
|
85
108
|
}
|
|
86
109
|
catch (error) {
|
|
87
110
|
bridgeLog.warn("client-ws", "Hub connection could not start", {
|
|
@@ -149,6 +172,7 @@ export class WsClientTransport {
|
|
|
149
172
|
await this.handlers.pluginSync?.({
|
|
150
173
|
revision: downlink.revision,
|
|
151
174
|
plugins: downlink.plugins,
|
|
175
|
+
inventoryQuery: downlink.inventoryQuery === true,
|
|
152
176
|
});
|
|
153
177
|
}
|
|
154
178
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-transport.js","sourceRoot":"","sources":["../../src/client/ws-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,+BAA+B,EAC/B,gBAAgB,EAChB,4BAA4B,
|
|
1
|
+
{"version":3,"file":"ws-transport.js","sourceRoot":"","sources":["../../src/client/ws-transport.ts"],"names":[],"mappings":"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"}
|