@allin-ai/agent-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.
Files changed (164) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +53 -0
  3. package/bin/allinai-agent +4 -0
  4. package/dist/capabilities/context.d.ts +16 -0
  5. package/dist/capabilities/context.d.ts.map +1 -0
  6. package/dist/capabilities/context.js +98 -0
  7. package/dist/capabilities/context.js.map +1 -0
  8. package/dist/capabilities/input.d.ts +7 -0
  9. package/dist/capabilities/input.d.ts.map +1 -0
  10. package/dist/capabilities/input.js +224 -0
  11. package/dist/capabilities/input.js.map +1 -0
  12. package/dist/capabilities/manifest.d.ts +15 -0
  13. package/dist/capabilities/manifest.d.ts.map +1 -0
  14. package/dist/capabilities/manifest.js +292 -0
  15. package/dist/capabilities/manifest.js.map +1 -0
  16. package/dist/capabilities/policy.d.ts +17 -0
  17. package/dist/capabilities/policy.d.ts.map +1 -0
  18. package/dist/capabilities/policy.js +57 -0
  19. package/dist/capabilities/policy.js.map +1 -0
  20. package/dist/capabilities/shell-host.d.ts +32 -0
  21. package/dist/capabilities/shell-host.d.ts.map +1 -0
  22. package/dist/capabilities/shell-host.js +378 -0
  23. package/dist/capabilities/shell-host.js.map +1 -0
  24. package/dist/capabilities/shell-wire.d.ts +13 -0
  25. package/dist/capabilities/shell-wire.d.ts.map +1 -0
  26. package/dist/capabilities/shell-wire.js +60 -0
  27. package/dist/capabilities/shell-wire.js.map +1 -0
  28. package/dist/capabilities/types.d.ts +46 -0
  29. package/dist/capabilities/types.d.ts.map +1 -0
  30. package/dist/capabilities/types.js +7 -0
  31. package/dist/capabilities/types.js.map +1 -0
  32. package/dist/cli/commands.d.ts +83 -0
  33. package/dist/cli/commands.d.ts.map +1 -0
  34. package/dist/cli/commands.js +638 -0
  35. package/dist/cli/commands.js.map +1 -0
  36. package/dist/cli/main.d.ts +2 -0
  37. package/dist/cli/main.d.ts.map +1 -0
  38. package/dist/cli/main.js +7 -0
  39. package/dist/cli/main.js.map +1 -0
  40. package/dist/client/state-store.d.ts +80 -0
  41. package/dist/client/state-store.d.ts.map +1 -0
  42. package/dist/client/state-store.js +422 -0
  43. package/dist/client/state-store.js.map +1 -0
  44. package/dist/client/supervisor.d.ts +118 -0
  45. package/dist/client/supervisor.d.ts.map +1 -0
  46. package/dist/client/supervisor.js +627 -0
  47. package/dist/client/supervisor.js.map +1 -0
  48. package/dist/client/transport.d.ts +30 -0
  49. package/dist/client/transport.d.ts.map +1 -0
  50. package/dist/client/transport.js +2 -0
  51. package/dist/client/transport.js.map +1 -0
  52. package/dist/client/types.d.ts +65 -0
  53. package/dist/client/types.d.ts.map +1 -0
  54. package/dist/client/types.js +13 -0
  55. package/dist/client/types.js.map +1 -0
  56. package/dist/client/wire.d.ts +32 -0
  57. package/dist/client/wire.d.ts.map +1 -0
  58. package/dist/client/wire.js +302 -0
  59. package/dist/client/wire.js.map +1 -0
  60. package/dist/client/ws-transport.d.ts +54 -0
  61. package/dist/client/ws-transport.d.ts.map +1 -0
  62. package/dist/client/ws-transport.js +229 -0
  63. package/dist/client/ws-transport.js.map +1 -0
  64. package/dist/config.d.ts +38 -0
  65. package/dist/config.d.ts.map +1 -0
  66. package/dist/config.js +125 -0
  67. package/dist/config.js.map +1 -0
  68. package/dist/control.d.ts +59 -0
  69. package/dist/control.d.ts.map +1 -0
  70. package/dist/control.js +217 -0
  71. package/dist/control.js.map +1 -0
  72. package/dist/credentials.d.ts +44 -0
  73. package/dist/credentials.d.ts.map +1 -0
  74. package/dist/credentials.js +229 -0
  75. package/dist/credentials.js.map +1 -0
  76. package/dist/hub.d.ts +83 -0
  77. package/dist/hub.d.ts.map +1 -0
  78. package/dist/hub.js +412 -0
  79. package/dist/hub.js.map +1 -0
  80. package/dist/index.d.ts +20 -0
  81. package/dist/index.d.ts.map +1 -0
  82. package/dist/index.js +18 -0
  83. package/dist/index.js.map +1 -0
  84. package/dist/logger.d.ts +47 -0
  85. package/dist/logger.d.ts.map +1 -0
  86. package/dist/logger.js +175 -0
  87. package/dist/logger.js.map +1 -0
  88. package/dist/paths.d.ts +29 -0
  89. package/dist/paths.d.ts.map +1 -0
  90. package/dist/paths.js +50 -0
  91. package/dist/paths.js.map +1 -0
  92. package/dist/plugins/git.d.ts +30 -0
  93. package/dist/plugins/git.d.ts.map +1 -0
  94. package/dist/plugins/git.js +80 -0
  95. package/dist/plugins/git.js.map +1 -0
  96. package/dist/plugins/manager.d.ts +41 -0
  97. package/dist/plugins/manager.d.ts.map +1 -0
  98. package/dist/plugins/manager.js +328 -0
  99. package/dist/plugins/manager.js.map +1 -0
  100. package/dist/plugins/manifest.d.ts +9 -0
  101. package/dist/plugins/manifest.d.ts.map +1 -0
  102. package/dist/plugins/manifest.js +63 -0
  103. package/dist/plugins/manifest.js.map +1 -0
  104. package/dist/plugins/types.d.ts +39 -0
  105. package/dist/plugins/types.d.ts.map +1 -0
  106. package/dist/plugins/types.js +2 -0
  107. package/dist/plugins/types.js.map +1 -0
  108. package/dist/runtime/claude.d.ts +30 -0
  109. package/dist/runtime/claude.d.ts.map +1 -0
  110. package/dist/runtime/claude.js +163 -0
  111. package/dist/runtime/claude.js.map +1 -0
  112. package/dist/runtime/codex.d.ts +44 -0
  113. package/dist/runtime/codex.d.ts.map +1 -0
  114. package/dist/runtime/codex.js +192 -0
  115. package/dist/runtime/codex.js.map +1 -0
  116. package/dist/runtime/events.d.ts +7 -0
  117. package/dist/runtime/events.d.ts.map +1 -0
  118. package/dist/runtime/events.js +37 -0
  119. package/dist/runtime/events.js.map +1 -0
  120. package/dist/runtime/index.d.ts +10 -0
  121. package/dist/runtime/index.d.ts.map +1 -0
  122. package/dist/runtime/index.js +10 -0
  123. package/dist/runtime/index.js.map +1 -0
  124. package/dist/runtime/pi.d.ts +34 -0
  125. package/dist/runtime/pi.d.ts.map +1 -0
  126. package/dist/runtime/pi.js +211 -0
  127. package/dist/runtime/pi.js.map +1 -0
  128. package/dist/runtime/registry.d.ts +16 -0
  129. package/dist/runtime/registry.d.ts.map +1 -0
  130. package/dist/runtime/registry.js +22 -0
  131. package/dist/runtime/registry.js.map +1 -0
  132. package/dist/runtime/runner-child.d.ts +2 -0
  133. package/dist/runtime/runner-child.d.ts.map +1 -0
  134. package/dist/runtime/runner-child.js +41 -0
  135. package/dist/runtime/runner-child.js.map +1 -0
  136. package/dist/runtime/runner-manager.d.ts +77 -0
  137. package/dist/runtime/runner-manager.d.ts.map +1 -0
  138. package/dist/runtime/runner-manager.js +295 -0
  139. package/dist/runtime/runner-manager.js.map +1 -0
  140. package/dist/runtime/runner-wire.d.ts +23 -0
  141. package/dist/runtime/runner-wire.d.ts.map +1 -0
  142. package/dist/runtime/runner-wire.js +93 -0
  143. package/dist/runtime/runner-wire.js.map +1 -0
  144. package/dist/runtime/types.d.ts +43 -0
  145. package/dist/runtime/types.d.ts.map +1 -0
  146. package/dist/runtime/types.js +3 -0
  147. package/dist/runtime/types.js.map +1 -0
  148. package/dist/runtime/zcode.d.ts +14 -0
  149. package/dist/runtime/zcode.d.ts.map +1 -0
  150. package/dist/runtime/zcode.js +21 -0
  151. package/dist/runtime/zcode.js.map +1 -0
  152. package/dist/service/launchd.d.ts +34 -0
  153. package/dist/service/launchd.d.ts.map +1 -0
  154. package/dist/service/launchd.js +86 -0
  155. package/dist/service/launchd.js.map +1 -0
  156. package/dist/service/systemd.d.ts +16 -0
  157. package/dist/service/systemd.d.ts.map +1 -0
  158. package/dist/service/systemd.js +89 -0
  159. package/dist/service/systemd.js.map +1 -0
  160. package/dist/wire.d.ts +24 -0
  161. package/dist/wire.d.ts.map +1 -0
  162. package/dist/wire.js +7 -0
  163. package/dist/wire.js.map +1 -0
  164. package/package.json +140 -0
@@ -0,0 +1,30 @@
1
+ import type { ClientCommand, ClientEvent, PluginConfig, PluginSyncAcknowledgement } from "./types.js";
2
+ export type ClientTransportHandlers = {
3
+ command(command: ClientCommand): Promise<void>;
4
+ /** Desired Git plugin state; the plugin host is added in a later task. */
5
+ pluginSync?(input: {
6
+ revision: string;
7
+ plugins: PluginConfig[];
8
+ }): Promise<void>;
9
+ connected(): Promise<void>;
10
+ };
11
+ /**
12
+ * Connection boundary between the durable Client Core and a Hub protocol
13
+ * implementation. Transports deliver at least once; the state store supplies
14
+ * the local idempotency and the per-execution event outbox.
15
+ */
16
+ export type ClientTransport = {
17
+ connect(handlers: ClientTransportHandlers): Promise<void>;
18
+ push(events: ClientEvent[]): Promise<Record<string, number>>;
19
+ /** Optional while older Hubs ignore plugin desired-state acknowledgements. */
20
+ reportPluginSync?(acknowledgement: PluginSyncAcknowledgement): Promise<void>;
21
+ close(): Promise<void>;
22
+ };
23
+ /** The isolated runtime runner port. It must never be used for capabilities. */
24
+ export type RunStarter = {
25
+ start(command: Extract<ClientCommand, {
26
+ kind: "agent.run";
27
+ }>): Promise<void>;
28
+ cancel(executionId: string): Promise<void>;
29
+ };
30
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/client/transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,YAAY,EACZ,yBAAyB,EAC1B,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,0EAA0E;IAC1E,UAAU,CAAC,CAAC,KAAK,EAAE;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,YAAY,EAAE,CAAC;KACzB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,CAAC,QAAQ,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7D,8EAA8E;IAC9E,gBAAgB,CAAC,CAAC,eAAe,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AAEF,gFAAgF;AAChF,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7E,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/client/transport.ts"],"names":[],"mappings":""}
@@ -0,0 +1,65 @@
1
+ import type { PluginConfig as GitPluginConfig } from "../plugins/types.js";
2
+ export declare const CLIENT_RUNTIME_IDS: readonly ["codex", "claude", "pi", "zcode"];
3
+ export type RuntimeId = (typeof CLIENT_RUNTIME_IDS)[number];
4
+ /** Structured input passed to a platform adapter; runtime-specific validation is adapter-owned. */
5
+ export type AgentInput = Record<string, unknown>;
6
+ export type ClientCommand = {
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
+ };
65
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,IAAI,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3E,eAAO,MAAM,kBAAkB,6CAA8C,CAAC;AAE9E,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,mGAAmG;AACnG,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEjD,MAAM,MAAM,aAAa,GACrB;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,SAAS,CAAC;IACnB,OAAO,EAAE,UAAU,CAAC;CACrB,GACD;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,GACD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/D,eAAO,MAAM,kBAAkB,mIAUrB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE,MAAM,MAAM,WAAW,GAAG;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB,CAAC;AAEF,uEAAuE;AACvE,MAAM,MAAM,YAAY,GAAG,eAAe,CAAC;AAE3C,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC;AAEvE,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,iBAAiB,GAAG,QAAQ,CAAC;AAExE,kGAAkG;AAClG,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvD,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,oBAAoB,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACzD,CAAC"}
@@ -0,0 +1,13 @@
1
+ export const CLIENT_RUNTIME_IDS = ["codex", "claude", "pi", "zcode"];
2
+ export const CLIENT_EVENT_TYPES = [
3
+ "received",
4
+ "running",
5
+ "awaiting_approval",
6
+ "progress",
7
+ "done",
8
+ "failed",
9
+ "cancelled",
10
+ "recovery_required",
11
+ "rejected",
12
+ ];
13
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAU,CAAC;AA4B9E,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,UAAU;IACV,SAAS;IACT,mBAAmB;IACnB,UAAU;IACV,MAAM;IACN,QAAQ;IACR,WAAW;IACX,mBAAmB;IACnB,UAAU;CACF,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { type ClientCommand, type ClientEvent, type ClientEventBatch, type HubDownlink, type PluginSyncAcknowledgement } from "./types.js";
2
+ import { AGENT_CLIENT_PROTOCOL_VERSION } from "../wire.js";
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;
32
+ //# sourceMappingURL=wire.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../src/client/wire.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EAErB,KAAK,WAAW,EAEhB,KAAK,yBAAyB,EAE/B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AA6E3D;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAqFvE;AAwCD,kEAAkE;AAClE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,EAAE,GAAG,IAAI,CAiB1E;AAED,4EAA4E;AAC5E,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,WAAW,EAAE,GACpB,gBAAgB,CAIlB;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,cAAc,CAAC;IACrB,eAAe,EAAE,OAAO,6BAA6B,CAAC;IACtD,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC,CAAC;AAoCF,uFAAuF;AACvF,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,OAAO,GACb,yBAAyB,GAAG,IAAI,CAmBlC;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,yBAAyB,GAC/B,yBAAyB,CAI3B;AAED,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,CAenE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAQ/D;AAED,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,CAuBnE;AAED,8EAA8E;AAC9E,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,OAAO,GACb,uBAAuB,GAAG,IAAI,CAkBhC"}
@@ -0,0 +1,302 @@
1
+ import { CLIENT_EVENT_TYPES, CLIENT_RUNTIME_IDS, } from "./types.js";
2
+ import { AGENT_CLIENT_PROTOCOL_VERSION } from "../wire.js";
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
+ }
302
+ //# sourceMappingURL=wire.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire.js","sourceRoot":"","sources":["../../src/client/wire.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import type { ClientEvent, PluginSyncAcknowledgement } from "./types.js";
2
+ import type { ClientTransport, ClientTransportHandlers } from "./transport.js";
3
+ export type ClientWebSocketLike = {
4
+ readyState: number;
5
+ onmessage: ((event: {
6
+ data: unknown;
7
+ }) => void) | null;
8
+ onclose: (() => void) | null;
9
+ onerror: (() => void) | null;
10
+ onopen: (() => void) | null;
11
+ send(data: string): void;
12
+ close(): void;
13
+ };
14
+ export type WsClientTransportOptions = {
15
+ hubBaseUrl: string;
16
+ token: string;
17
+ clientId: string;
18
+ WebSocketImpl?: new (url: string) => ClientWebSocketLike;
19
+ reconnectBaseMs?: number;
20
+ reconnectMaxMs?: number;
21
+ };
22
+ /**
23
+ * WebSocket transport for the protocol-v2 Client Core. It has no execution
24
+ * policy or state: the supervisor owns those durable concerns. A reconnect
25
+ * can replay the same offer and the state store will safely de-duplicate it.
26
+ */
27
+ export declare class WsClientTransport implements ClientTransport {
28
+ private readonly options;
29
+ private readonly WebSocketImpl;
30
+ private readonly reconnectBaseMs;
31
+ private readonly reconnectMaxMs;
32
+ private handlers;
33
+ private socket;
34
+ private reconnectTimer;
35
+ private reconnectAttempt;
36
+ private stopped;
37
+ private pendingAcknowledgement;
38
+ private pushTail;
39
+ constructor(options: WsClientTransportOptions);
40
+ connect(handlers: ClientTransportHandlers): Promise<void>;
41
+ push(events: ClientEvent[]): Promise<Record<string, number>>;
42
+ reportPluginSync(acknowledgement: PluginSyncAcknowledgement): Promise<void>;
43
+ close(): Promise<void>;
44
+ private connectSocket;
45
+ private notifyConnected;
46
+ private consumeMessage;
47
+ private parseMessage;
48
+ private pushOne;
49
+ private closeSocket;
50
+ private scheduleReconnect;
51
+ private clearReconnect;
52
+ private rejectPendingAcknowledgement;
53
+ }
54
+ //# sourceMappingURL=ws-transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws-transport.d.ts","sourceRoot":"","sources":["../../src/client/ws-transport.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAM/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,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;AAwBF;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,eAAe;IAY3C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAXpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA2C;IACzE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,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;IAoBxD,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,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB5B,OAAO,CAAC,aAAa;YA4CP,eAAe;YAUf,cAAc;IA+B5B,OAAO,CAAC,YAAY;YAmBN,OAAO;IAwBrB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,4BAA4B;CAKrC"}