@a5c-ai/agent-comm-mux 5.0.1-staging.016f0b0e8119

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 (263) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +99 -0
  3. package/dist/adapter-registry.d.ts +51 -0
  4. package/dist/adapter-registry.d.ts.map +1 -0
  5. package/dist/adapter-registry.js +208 -0
  6. package/dist/adapter-registry.js.map +1 -0
  7. package/dist/adapter-types.d.ts +164 -0
  8. package/dist/adapter-types.d.ts.map +1 -0
  9. package/dist/adapter-types.js +27 -0
  10. package/dist/adapter-types.js.map +1 -0
  11. package/dist/adapter.d.ts +248 -0
  12. package/dist/adapter.d.ts.map +1 -0
  13. package/dist/adapter.js +18 -0
  14. package/dist/adapter.js.map +1 -0
  15. package/dist/atomic-fs.d.ts +33 -0
  16. package/dist/atomic-fs.d.ts.map +1 -0
  17. package/dist/atomic-fs.js +190 -0
  18. package/dist/atomic-fs.js.map +1 -0
  19. package/dist/auth-manager.d.ts +37 -0
  20. package/dist/auth-manager.d.ts.map +1 -0
  21. package/dist/auth-manager.js +94 -0
  22. package/dist/auth-manager.js.map +1 -0
  23. package/dist/auth-types.d.ts +83 -0
  24. package/dist/auth-types.d.ts.map +1 -0
  25. package/dist/auth-types.js +10 -0
  26. package/dist/auth-types.js.map +1 -0
  27. package/dist/automation.d.ts +104 -0
  28. package/dist/automation.d.ts.map +1 -0
  29. package/dist/automation.js +2 -0
  30. package/dist/automation.js.map +1 -0
  31. package/dist/browser.d.ts +5 -0
  32. package/dist/browser.d.ts.map +1 -0
  33. package/dist/browser.js +2 -0
  34. package/dist/browser.js.map +1 -0
  35. package/dist/builtin-hooks.d.ts +24 -0
  36. package/dist/builtin-hooks.d.ts.map +1 -0
  37. package/dist/builtin-hooks.js +80 -0
  38. package/dist/builtin-hooks.js.map +1 -0
  39. package/dist/capabilities.d.ts +251 -0
  40. package/dist/capabilities.d.ts.map +1 -0
  41. package/dist/capabilities.js +7 -0
  42. package/dist/capabilities.js.map +1 -0
  43. package/dist/client.d.ts +118 -0
  44. package/dist/client.d.ts.map +1 -0
  45. package/dist/client.js +316 -0
  46. package/dist/client.js.map +1 -0
  47. package/dist/config-manager.d.ts +85 -0
  48. package/dist/config-manager.d.ts.map +1 -0
  49. package/dist/config-manager.js +202 -0
  50. package/dist/config-manager.js.map +1 -0
  51. package/dist/config-types.d.ts +134 -0
  52. package/dist/config-types.d.ts.map +1 -0
  53. package/dist/config-types.js +10 -0
  54. package/dist/config-types.js.map +1 -0
  55. package/dist/cost-utils.d.ts +31 -0
  56. package/dist/cost-utils.d.ts.map +1 -0
  57. package/dist/cost-utils.js +69 -0
  58. package/dist/cost-utils.js.map +1 -0
  59. package/dist/errors.d.ts +50 -0
  60. package/dist/errors.d.ts.map +1 -0
  61. package/dist/errors.js +85 -0
  62. package/dist/errors.js.map +1 -0
  63. package/dist/events-control.d.ts +91 -0
  64. package/dist/events-control.d.ts.map +1 -0
  65. package/dist/events-control.js +8 -0
  66. package/dist/events-control.js.map +1 -0
  67. package/dist/events.d.ts +285 -0
  68. package/dist/events.d.ts.map +1 -0
  69. package/dist/events.js +8 -0
  70. package/dist/events.js.map +1 -0
  71. package/dist/hook-catalog.d.ts +20 -0
  72. package/dist/hook-catalog.d.ts.map +1 -0
  73. package/dist/hook-catalog.js +63 -0
  74. package/dist/hook-catalog.js.map +1 -0
  75. package/dist/hook-dispatcher.d.ts +24 -0
  76. package/dist/hook-dispatcher.d.ts.map +1 -0
  77. package/dist/hook-dispatcher.js +91 -0
  78. package/dist/hook-dispatcher.js.map +1 -0
  79. package/dist/hook-payload.d.ts +24 -0
  80. package/dist/hook-payload.d.ts.map +1 -0
  81. package/dist/hook-payload.js +62 -0
  82. package/dist/hook-payload.js.map +1 -0
  83. package/dist/hooks.d.ts +59 -0
  84. package/dist/hooks.d.ts.map +1 -0
  85. package/dist/hooks.js +118 -0
  86. package/dist/hooks.js.map +1 -0
  87. package/dist/host-detection.d.ts +67 -0
  88. package/dist/host-detection.d.ts.map +1 -0
  89. package/dist/host-detection.js +147 -0
  90. package/dist/host-detection.js.map +1 -0
  91. package/dist/index.d.ts +88 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js +50 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/interaction-channel-impl.d.ts +56 -0
  96. package/dist/interaction-channel-impl.d.ts.map +1 -0
  97. package/dist/interaction-channel-impl.js +159 -0
  98. package/dist/interaction-channel-impl.js.map +1 -0
  99. package/dist/interaction.d.ts +93 -0
  100. package/dist/interaction.d.ts.map +1 -0
  101. package/dist/interaction.js +8 -0
  102. package/dist/interaction.js.map +1 -0
  103. package/dist/invocation.d.ts +100 -0
  104. package/dist/invocation.d.ts.map +1 -0
  105. package/dist/invocation.js +17 -0
  106. package/dist/invocation.js.map +1 -0
  107. package/dist/kanban.d.ts +894 -0
  108. package/dist/kanban.d.ts.map +1 -0
  109. package/dist/kanban.js +1155 -0
  110. package/dist/kanban.js.map +1 -0
  111. package/dist/merge.d.ts +37 -0
  112. package/dist/merge.d.ts.map +1 -0
  113. package/dist/merge.js +102 -0
  114. package/dist/merge.js.map +1 -0
  115. package/dist/model-registry.d.ts +61 -0
  116. package/dist/model-registry.d.ts.map +1 -0
  117. package/dist/model-registry.js +198 -0
  118. package/dist/model-registry.js.map +1 -0
  119. package/dist/plugin-manager-impl.d.ts +48 -0
  120. package/dist/plugin-manager-impl.d.ts.map +1 -0
  121. package/dist/plugin-manager-impl.js +343 -0
  122. package/dist/plugin-manager-impl.js.map +1 -0
  123. package/dist/plugin-manager.d.ts +81 -0
  124. package/dist/plugin-manager.d.ts.map +1 -0
  125. package/dist/plugin-manager.js +7 -0
  126. package/dist/plugin-manager.js.map +1 -0
  127. package/dist/plugin-types.d.ts +114 -0
  128. package/dist/plugin-types.d.ts.map +1 -0
  129. package/dist/plugin-types.js +7 -0
  130. package/dist/plugin-types.js.map +1 -0
  131. package/dist/process-tracker.d.ts +20 -0
  132. package/dist/process-tracker.d.ts.map +1 -0
  133. package/dist/process-tracker.js +96 -0
  134. package/dist/process-tracker.js.map +1 -0
  135. package/dist/profiles.d.ts +99 -0
  136. package/dist/profiles.d.ts.map +1 -0
  137. package/dist/profiles.js +231 -0
  138. package/dist/profiles.js.map +1 -0
  139. package/dist/programmatic-runner.d.ts +4 -0
  140. package/dist/programmatic-runner.d.ts.map +1 -0
  141. package/dist/programmatic-runner.js +110 -0
  142. package/dist/programmatic-runner.js.map +1 -0
  143. package/dist/provider-config.d.ts +40 -0
  144. package/dist/provider-config.d.ts.map +1 -0
  145. package/dist/provider-config.js +67 -0
  146. package/dist/provider-config.js.map +1 -0
  147. package/dist/provider-profiles.d.ts +47 -0
  148. package/dist/provider-profiles.d.ts.map +1 -0
  149. package/dist/provider-profiles.js +117 -0
  150. package/dist/provider-profiles.js.map +1 -0
  151. package/dist/provider-resolver.d.ts +15 -0
  152. package/dist/provider-resolver.d.ts.map +1 -0
  153. package/dist/provider-resolver.js +114 -0
  154. package/dist/provider-resolver.js.map +1 -0
  155. package/dist/provider-support-matrix.d.ts +12 -0
  156. package/dist/provider-support-matrix.d.ts.map +1 -0
  157. package/dist/provider-support-matrix.js +88 -0
  158. package/dist/provider-support-matrix.js.map +1 -0
  159. package/dist/remote-runner.d.ts +4 -0
  160. package/dist/remote-runner.d.ts.map +1 -0
  161. package/dist/remote-runner.js +114 -0
  162. package/dist/remote-runner.js.map +1 -0
  163. package/dist/retry.d.ts +13 -0
  164. package/dist/retry.d.ts.map +1 -0
  165. package/dist/retry.js +17 -0
  166. package/dist/retry.js.map +1 -0
  167. package/dist/run-handle-cost.d.ts +36 -0
  168. package/dist/run-handle-cost.d.ts.map +1 -0
  169. package/dist/run-handle-cost.js +62 -0
  170. package/dist/run-handle-cost.js.map +1 -0
  171. package/dist/run-handle-impl.d.ts +144 -0
  172. package/dist/run-handle-impl.d.ts.map +1 -0
  173. package/dist/run-handle-impl.js +695 -0
  174. package/dist/run-handle-impl.js.map +1 -0
  175. package/dist/run-handle.d.ts +222 -0
  176. package/dist/run-handle.d.ts.map +1 -0
  177. package/dist/run-handle.js +9 -0
  178. package/dist/run-handle.js.map +1 -0
  179. package/dist/run-options-validation.d.ts +23 -0
  180. package/dist/run-options-validation.d.ts.map +1 -0
  181. package/dist/run-options-validation.js +234 -0
  182. package/dist/run-options-validation.js.map +1 -0
  183. package/dist/run-options.d.ts +128 -0
  184. package/dist/run-options.d.ts.map +1 -0
  185. package/dist/run-options.js +329 -0
  186. package/dist/run-options.js.map +1 -0
  187. package/dist/runtime-hook-dispatcher.d.ts +19 -0
  188. package/dist/runtime-hook-dispatcher.d.ts.map +1 -0
  189. package/dist/runtime-hook-dispatcher.js +50 -0
  190. package/dist/runtime-hook-dispatcher.js.map +1 -0
  191. package/dist/runtime-hooks.d.ts +47 -0
  192. package/dist/runtime-hooks.d.ts.map +1 -0
  193. package/dist/runtime-hooks.js +2 -0
  194. package/dist/runtime-hooks.js.map +1 -0
  195. package/dist/schema/__tests__/event-schema.test.d.ts +1 -0
  196. package/dist/schema/__tests__/event-schema.test.d.ts.map +1 -0
  197. package/dist/schema/__tests__/event-schema.test.js +480 -0
  198. package/dist/schema/__tests__/event-schema.test.js.map +1 -0
  199. package/dist/schema/event-schema.d.ts +120 -0
  200. package/dist/schema/event-schema.d.ts.map +1 -0
  201. package/dist/schema/event-schema.js +546 -0
  202. package/dist/schema/event-schema.js.map +1 -0
  203. package/dist/schema/index.d.ts +7 -0
  204. package/dist/schema/index.d.ts.map +1 -0
  205. package/dist/schema/index.js +49 -0
  206. package/dist/schema/index.js.map +1 -0
  207. package/dist/session-manager-helpers.d.ts +33 -0
  208. package/dist/session-manager-helpers.d.ts.map +1 -0
  209. package/dist/session-manager-helpers.js +66 -0
  210. package/dist/session-manager-helpers.js.map +1 -0
  211. package/dist/session-manager.d.ts +70 -0
  212. package/dist/session-manager.d.ts.map +1 -0
  213. package/dist/session-manager.js +343 -0
  214. package/dist/session-manager.js.map +1 -0
  215. package/dist/session-types.d.ts +358 -0
  216. package/dist/session-types.d.ts.map +1 -0
  217. package/dist/session-types.js +10 -0
  218. package/dist/session-types.js.map +1 -0
  219. package/dist/spawn-invocation.d.ts +52 -0
  220. package/dist/spawn-invocation.d.ts.map +1 -0
  221. package/dist/spawn-invocation.js +218 -0
  222. package/dist/spawn-invocation.js.map +1 -0
  223. package/dist/spawn-runner-utils.d.ts +21 -0
  224. package/dist/spawn-runner-utils.d.ts.map +1 -0
  225. package/dist/spawn-runner-utils.js +102 -0
  226. package/dist/spawn-runner-utils.js.map +1 -0
  227. package/dist/spawn-runner.d.ts +21 -0
  228. package/dist/spawn-runner.d.ts.map +1 -0
  229. package/dist/spawn-runner.js +576 -0
  230. package/dist/spawn-runner.js.map +1 -0
  231. package/dist/spawn-runtime-hooks.d.ts +15 -0
  232. package/dist/spawn-runtime-hooks.d.ts.map +1 -0
  233. package/dist/spawn-runtime-hooks.js +136 -0
  234. package/dist/spawn-runtime-hooks.js.map +1 -0
  235. package/dist/state-machine.d.ts +33 -0
  236. package/dist/state-machine.d.ts.map +1 -0
  237. package/dist/state-machine.js +61 -0
  238. package/dist/state-machine.js.map +1 -0
  239. package/dist/storage.d.ts +47 -0
  240. package/dist/storage.d.ts.map +1 -0
  241. package/dist/storage.js +90 -0
  242. package/dist/storage.js.map +1 -0
  243. package/dist/stream-assembler.d.ts +51 -0
  244. package/dist/stream-assembler.d.ts.map +1 -0
  245. package/dist/stream-assembler.js +86 -0
  246. package/dist/stream-assembler.js.map +1 -0
  247. package/dist/tools/classify.d.ts +9 -0
  248. package/dist/tools/classify.d.ts.map +1 -0
  249. package/dist/tools/classify.js +77 -0
  250. package/dist/tools/classify.js.map +1 -0
  251. package/dist/tools/index.d.ts +2 -0
  252. package/dist/tools/index.d.ts.map +1 -0
  253. package/dist/tools/index.js +2 -0
  254. package/dist/tools/index.js.map +1 -0
  255. package/dist/types.d.ts +288 -0
  256. package/dist/types.d.ts.map +1 -0
  257. package/dist/types.js +8 -0
  258. package/dist/types.js.map +1 -0
  259. package/dist/workspaces.d.ts +142 -0
  260. package/dist/workspaces.d.ts.map +1 -0
  261. package/dist/workspaces.js +515 -0
  262. package/dist/workspaces.js.map +1 -0
  263. package/package.json +107 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 a5c-ai
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,99 @@
1
+ # @a5c-ai/agent-comm-mux
2
+
3
+ This README is the canonical package documentation for `@a5c-ai/agent-comm-mux`.
4
+ Canonical package doc path: `packages/agent-mux/core/README.md`.
5
+ The repository reference mirror lives at `docs/agent-mux/reference/01-core-types-and-client.md` and
6
+ should match this file for package identity, runtime dependencies, and import guidance.
7
+
8
+ `@a5c-ai/agent-comm-mux` is the public Node.js core runtime package at
9
+ `packages/agent-mux/core/` for agent-mux. It ships:
10
+
11
+ - the main Node entrypoint with `AgentMuxClient`, `createClient`, normalized events,
12
+ run/session/config/auth/plugin contracts, provider and hook helpers, workspace
13
+ services, and atomic filesystem helpers
14
+ - `@a5c-ai/agent-comm-mux/browser` for browser-safe type exports plus `classifyTool`
15
+ - `@a5c-ai/agent-comm-mux/kanban` for kanban/project/workspace planning types and helpers
16
+ - `@a5c-ai/agent-comm-mux/automation` for automation rule, trigger, routing, and execution record types
17
+
18
+ ## Install
19
+
20
+ ```bash
21
+ npm install @a5c-ai/agent-comm-mux
22
+ ```
23
+
24
+ Requires Node.js `>=20.9.0`.
25
+
26
+ This package is published as ESM. The export map exposes `import`, `require`, and
27
+ `default` conditions, but they all resolve to the same ESM build. Use `import`
28
+ from ESM projects. From CommonJS, load it with `await import('@a5c-ai/agent-comm-mux')`
29
+ instead of expecting a separate CJS bundle.
30
+
31
+ Runtime dependencies are part of the package contract:
32
+
33
+ - `@a5c-ai/agent-catalog` provides the harness image catalog plus host-detection
34
+ rules and metadata used by invocation and host helpers
35
+ - `@a5c-ai/agent-mux-observability` provides the structured logging and telemetry
36
+ primitives used by the client, auth/session flows, and run-handle implementation
37
+
38
+ ## Usage
39
+
40
+ ```ts
41
+ import {
42
+ createClient,
43
+ resolveProvider,
44
+ resolveRunOptions,
45
+ type AuthMethodDescriptor,
46
+ type PluginInfo,
47
+ } from '@a5c-ai/agent-comm-mux';
48
+
49
+ const client = createClient();
50
+ ```
51
+
52
+ ```ts
53
+ import { classifyTool, type AgentEvent } from '@a5c-ai/agent-comm-mux/browser';
54
+ import { buildKanbanProjectBoard } from '@a5c-ai/agent-comm-mux/kanban';
55
+ import { type AutomationRule } from '@a5c-ai/agent-comm-mux/automation';
56
+ ```
57
+
58
+ The public surface is grouped around:
59
+
60
+ - client/runtime entry points such as `AgentMuxClient` and `createClient`
61
+ - run, auth, hook, provider, and capability contracts such as `RunOptions`,
62
+ `AuthMethodDescriptor`, `HookRegistration`, and `ProviderConfig`
63
+ - plugin contracts such as `PluginInfo`, `PluginListing`, and `PluginBrowseOptions`
64
+ - workspace, merge, and filesystem helpers such as `WorkspaceService`,
65
+ `resolveRunOptions`, and `writeFileAtomic`
66
+
67
+ The supported public import seams are:
68
+
69
+ - `@a5c-ai/agent-comm-mux`
70
+ - `@a5c-ai/agent-comm-mux/browser`
71
+ - `@a5c-ai/agent-comm-mux/kanban`
72
+ - `@a5c-ai/agent-comm-mux/automation`
73
+
74
+ ## Release Verification
75
+
76
+ Use the package-local release checks to confirm the documented export map still
77
+ matches the packed package surface:
78
+
79
+ ```bash
80
+ npm run build --workspace=@a5c-ai/agent-comm-mux
81
+ npm run test --workspace=@a5c-ai/agent-comm-mux
82
+ npm run verify:release --workspace=@a5c-ai/agent-comm-mux
83
+ npm pack --json --dry-run --workspace=@a5c-ai/agent-comm-mux
84
+ ```
85
+
86
+ Release reviewers should be able to confirm from this README that the package
87
+ intentionally publishes the root, `browser`, `kanban`, and `automation`
88
+ subpaths and that all of them remain backed by `dist/*.js` and `dist/*.d.ts`
89
+ artifacts.
90
+
91
+ ## Docs
92
+
93
+ - [Agent Mux docs](../../../docs/agent-mux/README.md)
94
+ - [Reference mirror](../../../docs/agent-mux/reference/01-core-types-and-client.md)
95
+ - [Package family entrypoint](../README.md)
96
+
97
+ ## License
98
+
99
+ MIT © a5c-ai
@@ -0,0 +1,51 @@
1
+ /**
2
+ * AdapterRegistry interface and implementation for @a5c-ai/agent-mux.
3
+ *
4
+ * @see 05-adapter-system.md §5
5
+ */
6
+ import type { AgentName } from './types.js';
7
+ import type { AgentCapabilities, InstallMethod } from './capabilities.js';
8
+ import type { AgentAdapter, AgentAdapterInfo, InstalledAgentInfo } from './adapter.js';
9
+ /**
10
+ * Registry of agent adapters. Manages discovery, detection, capability
11
+ * queries, and plugin adapter registration.
12
+ */
13
+ export interface AdapterRegistry {
14
+ /** Returns metadata for all registered adapters. Synchronous. */
15
+ list(): AgentAdapterInfo[];
16
+ /** Detects all registered agents and returns installation status. */
17
+ installed(): Promise<InstalledAgentInfo[]>;
18
+ /** Detects whether a specific agent is installed. */
19
+ detect(agent: AgentName): Promise<InstalledAgentInfo | null>;
20
+ /** Returns the capabilities manifest for a specific agent. */
21
+ capabilities(agent: AgentName): AgentCapabilities;
22
+ /** Returns platform-specific installation instructions for an agent. */
23
+ installInstructions(agent: AgentName, platform?: NodeJS.Platform): InstallMethod[];
24
+ /** Retrieves the adapter instance for a given agent. */
25
+ get(agent: AgentName): AgentAdapter | undefined;
26
+ /** Registers a new adapter or replaces an existing one. */
27
+ register(adapter: AgentAdapter): void;
28
+ /** Removes an adapter from the registry. */
29
+ unregister(agent: AgentName): void;
30
+ }
31
+ /**
32
+ * Map-based implementation of AdapterRegistry.
33
+ */
34
+ export declare class AdapterRegistryImpl implements AdapterRegistry {
35
+ private readonly _adapters;
36
+ private readonly _detectCache;
37
+ /**
38
+ * Registers an adapter as a built-in. Same as register() but marks
39
+ * the source as 'built-in'.
40
+ */
41
+ registerBuiltIn(adapter: AgentAdapter): void;
42
+ list(): AgentAdapterInfo[];
43
+ installed(): Promise<InstalledAgentInfo[]>;
44
+ detect(agent: AgentName): Promise<InstalledAgentInfo | null>;
45
+ capabilities(agent: AgentName): AgentCapabilities;
46
+ installInstructions(agent: AgentName, platform?: NodeJS.Platform): InstallMethod[];
47
+ get(agent: AgentName): AgentAdapter | undefined;
48
+ register(adapter: AgentAdapter): void;
49
+ unregister(agent: AgentName): void;
50
+ private _validateAdapter;
51
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-registry.d.ts","sourceRoot":"","sources":["../src/adapter-registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,cAAc,CAAC;AAOtB;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,IAAI,IAAI,gBAAgB,EAAE,CAAC;IAE3B,qEAAqE;IACrE,SAAS,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAE3C,qDAAqD;IACrD,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IAE7D,8DAA8D;IAC9D,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,iBAAiB,CAAC;IAElD,wEAAwE;IACxE,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,GAAG,aAAa,EAAE,CAAC;IAEnF,wDAAwD;IACxD,GAAG,CAAC,KAAK,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;IAEhD,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAEtC,4CAA4C;IAC5C,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;CACpC;AAiDD;;GAEG;AACH,qBAAa,mBAAoB,YAAW,eAAe;IACzD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAC9D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuC;IAEpE;;;OAGG;IACH,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAQ5C,IAAI,IAAI,gBAAgB,EAAE;IAepB,SAAS,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAQ1C,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IA+ClE,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,iBAAiB;IAWjD,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,GAAG,aAAa,EAAE;IAclF,GAAG,CAAC,KAAK,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS;IAI/C,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAMrC,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAalC,OAAO,CAAC,gBAAgB;CA2EzB"}
@@ -0,0 +1,208 @@
1
+ /**
2
+ * AdapterRegistry interface and implementation for @a5c-ai/agent-mux.
3
+ *
4
+ * @see 05-adapter-system.md §5
5
+ */
6
+ import { AgentMuxError, ValidationError } from './errors.js';
7
+ function parseVersionParts(version) {
8
+ const match = version.match(/\d+(?:\.\d+)*/);
9
+ if (!match)
10
+ return null;
11
+ return match[0].split('.').map((part) => Number.parseInt(part, 10));
12
+ }
13
+ function meetsMinVersion(version, minVersion) {
14
+ if (!minVersion)
15
+ return true;
16
+ if (!version)
17
+ return false;
18
+ const actual = parseVersionParts(version);
19
+ const required = parseVersionParts(minVersion);
20
+ if (!actual || !required)
21
+ return false;
22
+ const len = Math.max(actual.length, required.length);
23
+ for (let i = 0; i < len; i += 1) {
24
+ const actualPart = actual[i] ?? 0;
25
+ const requiredPart = required[i] ?? 0;
26
+ if (actualPart > requiredPart)
27
+ return true;
28
+ if (actualPart < requiredPart)
29
+ return false;
30
+ }
31
+ return true;
32
+ }
33
+ // ---------------------------------------------------------------------------
34
+ // AdapterRegistryImpl
35
+ // ---------------------------------------------------------------------------
36
+ /** Cache duration for detect() results in milliseconds. */
37
+ const DETECT_CACHE_TTL_MS = 30_000;
38
+ /**
39
+ * Map-based implementation of AdapterRegistry.
40
+ */
41
+ export class AdapterRegistryImpl {
42
+ _adapters = new Map();
43
+ _detectCache = new Map();
44
+ /**
45
+ * Registers an adapter as a built-in. Same as register() but marks
46
+ * the source as 'built-in'.
47
+ */
48
+ registerBuiltIn(adapter) {
49
+ this._validateAdapter(adapter);
50
+ this._adapters.set(adapter.agent, { adapter, source: 'built-in' });
51
+ this._detectCache.delete(adapter.agent);
52
+ }
53
+ // ── AdapterRegistry interface ────────────────────────────────────
54
+ list() {
55
+ const result = [];
56
+ for (const [, entry] of this._adapters) {
57
+ result.push({
58
+ agent: entry.adapter.agent,
59
+ displayName: entry.adapter.displayName,
60
+ cliCommand: entry.adapter.cliCommand,
61
+ minVersion: entry.adapter.minVersion,
62
+ source: entry.source,
63
+ });
64
+ }
65
+ result.sort((a, b) => a.agent.localeCompare(b.agent));
66
+ return result;
67
+ }
68
+ async installed() {
69
+ const agents = Array.from(this._adapters.keys());
70
+ const results = await Promise.all(agents.map((agent) => this.detect(agent)));
71
+ return results.filter((r) => r !== null);
72
+ }
73
+ async detect(agent) {
74
+ const entry = this._adapters.get(agent);
75
+ if (!entry)
76
+ return null;
77
+ // Check cache
78
+ const cached = this._detectCache.get(agent);
79
+ if (cached && Date.now() < cached.expiresAt) {
80
+ return cached.info;
81
+ }
82
+ // Perform detection
83
+ const adapter = entry.adapter;
84
+ let authState = 'unknown';
85
+ try {
86
+ const auth = await adapter.detectAuth();
87
+ authState = auth.status;
88
+ }
89
+ catch {
90
+ // Detection failure is not fatal
91
+ }
92
+ const installation = typeof adapter.detectInstallation === 'function'
93
+ ? await adapter.detectInstallation().catch(() => null)
94
+ : null;
95
+ const version = installation?.version ?? null;
96
+ const minVersion = adapter.minVersion ?? '';
97
+ const info = {
98
+ agent: adapter.agent,
99
+ installed: installation?.installed ?? false,
100
+ cliPath: installation?.path ?? null,
101
+ version,
102
+ meetsMinVersion: meetsMinVersion(version, adapter.minVersion),
103
+ minVersion,
104
+ authState,
105
+ activeModel: adapter.defaultModelId ?? null,
106
+ };
107
+ // Cache result
108
+ this._detectCache.set(agent, {
109
+ info,
110
+ expiresAt: Date.now() + DETECT_CACHE_TTL_MS,
111
+ });
112
+ return info;
113
+ }
114
+ capabilities(agent) {
115
+ const entry = this._adapters.get(agent);
116
+ if (!entry) {
117
+ throw new AgentMuxError('UNKNOWN_AGENT', `No adapter registered for agent "${agent}"`);
118
+ }
119
+ return entry.adapter.capabilities;
120
+ }
121
+ installInstructions(agent, platform) {
122
+ const entry = this._adapters.get(agent);
123
+ if (!entry) {
124
+ throw new AgentMuxError('UNKNOWN_AGENT', `No adapter registered for agent "${agent}"`);
125
+ }
126
+ const plat = platform ?? process.platform;
127
+ return entry.adapter.capabilities.installMethods.filter((m) => m.platform === 'all' || m.platform === plat);
128
+ }
129
+ get(agent) {
130
+ return this._adapters.get(agent)?.adapter;
131
+ }
132
+ register(adapter) {
133
+ this._validateAdapter(adapter);
134
+ this._adapters.set(adapter.agent, { adapter, source: 'plugin' });
135
+ this._detectCache.delete(adapter.agent);
136
+ }
137
+ unregister(agent) {
138
+ if (!this._adapters.has(agent)) {
139
+ throw new AgentMuxError('UNKNOWN_AGENT', `No adapter registered for agent "${agent}"`);
140
+ }
141
+ this._adapters.delete(agent);
142
+ this._detectCache.delete(agent);
143
+ }
144
+ // ── Validation ───────────────────────────────────────────────────
145
+ _validateAdapter(adapter) {
146
+ const errors = [];
147
+ if (!adapter.agent || typeof adapter.agent !== 'string') {
148
+ errors.push({
149
+ field: 'agent',
150
+ message: 'must be a non-empty string',
151
+ received: adapter.agent,
152
+ expected: 'non-empty string',
153
+ });
154
+ }
155
+ if (!adapter.displayName || typeof adapter.displayName !== 'string') {
156
+ errors.push({
157
+ field: 'displayName',
158
+ message: 'must be a non-empty string',
159
+ received: adapter.displayName,
160
+ expected: 'non-empty string',
161
+ });
162
+ }
163
+ if (!adapter.cliCommand || typeof adapter.cliCommand !== 'string') {
164
+ errors.push({
165
+ field: 'cliCommand',
166
+ message: 'must be a non-empty string',
167
+ received: adapter.cliCommand,
168
+ expected: 'non-empty string',
169
+ });
170
+ }
171
+ if (!adapter.capabilities || typeof adapter.capabilities !== 'object') {
172
+ errors.push({
173
+ field: 'capabilities',
174
+ message: 'must be a valid AgentCapabilities object',
175
+ received: adapter.capabilities,
176
+ expected: 'AgentCapabilities',
177
+ });
178
+ }
179
+ if (!Array.isArray(adapter.models)) {
180
+ errors.push({
181
+ field: 'models',
182
+ message: 'must be an array',
183
+ received: adapter.models,
184
+ expected: 'ModelCapabilities[]',
185
+ });
186
+ }
187
+ if (typeof adapter.buildSpawnArgs !== 'function') {
188
+ errors.push({
189
+ field: 'buildSpawnArgs',
190
+ message: 'must be a function',
191
+ received: typeof adapter.buildSpawnArgs,
192
+ expected: 'function',
193
+ });
194
+ }
195
+ if (typeof adapter.parseEvent !== 'function') {
196
+ errors.push({
197
+ field: 'parseEvent',
198
+ message: 'must be a function',
199
+ received: typeof adapter.parseEvent,
200
+ expected: 'function',
201
+ });
202
+ }
203
+ if (errors.length > 0) {
204
+ throw new ValidationError(errors);
205
+ }
206
+ }
207
+ }
208
+ //# sourceMappingURL=adapter-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-registry.js","sourceRoot":"","sources":["../src/adapter-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Multi-type adapter architecture interfaces.
3
+ *
4
+ * Extends agent-mux to support subprocess, remote (HTTP/WebSocket), and
5
+ * programmatic (SDK) adapter types beyond the original subprocess-only model.
6
+ *
7
+ * @see ../../../docs/18-multi-adapter-architecture.md
8
+ */
9
+ import type { AgentName } from './types.js';
10
+ import type { AgentCapabilities, ModelCapabilities } from './capabilities.js';
11
+ import type { RunOptions } from './run-options.js';
12
+ import type { AgentEvent } from './events.js';
13
+ import type { InteractionResponse } from './interaction.js';
14
+ import type { AuthState, AuthSetupGuidance, AgentConfig, AgentConfigSchema, Session } from './adapter.js';
15
+ /**
16
+ * Base interface shared across all adapter types.
17
+ * Contains common functionality independent of execution method.
18
+ */
19
+ export interface BaseAgentAdapterInterface {
20
+ readonly agent: AgentName;
21
+ readonly displayName: string;
22
+ readonly adapterType: 'subprocess' | 'remote' | 'programmatic';
23
+ readonly minVersion?: string;
24
+ readonly capabilities: AgentCapabilities;
25
+ readonly models: ModelCapabilities[];
26
+ readonly defaultModelId?: string;
27
+ readonly configSchema: AgentConfigSchema;
28
+ detectAuth(): Promise<AuthState>;
29
+ getAuthGuidance(): AuthSetupGuidance;
30
+ sessionDir(cwd?: string): string;
31
+ parseSessionFile(filePath: string): Promise<Session>;
32
+ listSessionFiles(cwd?: string): Promise<string[]>;
33
+ readConfig(cwd?: string): Promise<AgentConfig>;
34
+ writeConfig(config: Partial<AgentConfig>, cwd?: string): Promise<void>;
35
+ /** Optional adapter-native model discovery hook used by ModelRegistry.refresh(). */
36
+ discoverModels?(cwd?: string): Promise<ModelCapabilities[]>;
37
+ /** Env-var names that indicate the current process is running under this harness. */
38
+ readonly hostEnvSignals?: readonly string[];
39
+ /** Extract adapter-specific metadata from an env snapshot. */
40
+ readHostMetadata?(env: NodeJS.ProcessEnv): Record<string, string | number | boolean | null>;
41
+ }
42
+ import type { AgentAdapter as LegacyAgentAdapter } from './adapter.js';
43
+ /**
44
+ * Subprocess-based adapter (traditional agent-mux model).
45
+ * Spawns CLI process and parses line-based output.
46
+ */
47
+ export interface SubprocessAdapter extends LegacyAgentAdapter {
48
+ readonly adapterType: 'subprocess';
49
+ }
50
+ /**
51
+ * Remote adapter for HTTP APIs, WebSocket connections, or Unix sockets.
52
+ * Manages persistent connections and may handle server lifecycle.
53
+ */
54
+ export interface RemoteAdapter extends LegacyAgentAdapter {
55
+ readonly adapterType: 'remote';
56
+ readonly connectionType: 'http' | 'websocket' | 'unix';
57
+ connect(options: RunOptions): Promise<RemoteConnection>;
58
+ disconnect(connection: RemoteConnection): Promise<void>;
59
+ startServer?(options?: ServerOptions): Promise<ServerInfo>;
60
+ stopServer?(serverInfo: ServerInfo): Promise<void>;
61
+ healthCheck?(serverInfo: ServerInfo): Promise<ServerHealth>;
62
+ }
63
+ /**
64
+ * Connection abstraction for remote adapters.
65
+ */
66
+ export interface RemoteConnection {
67
+ readonly connectionId: string;
68
+ readonly connectionType: 'http' | 'websocket' | 'unix';
69
+ readonly endpoint: string;
70
+ send(data: unknown): Promise<void>;
71
+ receive(): AsyncIterableIterator<AgentEvent>;
72
+ close(): Promise<void>;
73
+ }
74
+ /**
75
+ * HTTP-specific connection with REST API methods.
76
+ */
77
+ export interface HttpConnection extends RemoteConnection {
78
+ readonly connectionType: 'http';
79
+ readonly baseUrl: string;
80
+ get(path: string, params?: Record<string, unknown>): Promise<unknown>;
81
+ post(path: string, data?: unknown): Promise<unknown>;
82
+ put(path: string, data?: unknown): Promise<unknown>;
83
+ delete(path: string): Promise<unknown>;
84
+ stream(path: string, data?: unknown): AsyncIterableIterator<AgentEvent>;
85
+ }
86
+ /**
87
+ * WebSocket-specific connection with pub/sub capabilities.
88
+ */
89
+ export interface WebSocketConnection extends RemoteConnection {
90
+ readonly connectionType: 'websocket';
91
+ readonly websocketUrl: string;
92
+ subscribe(channel: string): AsyncIterableIterator<AgentEvent>;
93
+ unsubscribe(channel: string): Promise<void>;
94
+ send(message: WebSocketMessage): Promise<void>;
95
+ }
96
+ export interface WebSocketMessage {
97
+ type: string;
98
+ channel?: string;
99
+ data: unknown;
100
+ }
101
+ /**
102
+ * Programmatic adapter for direct SDK integration.
103
+ * No subprocess or network communication - direct function calls.
104
+ */
105
+ export interface ProgrammaticRun extends AsyncIterableIterator<AgentEvent> {
106
+ send?(text: string): Promise<void>;
107
+ respond?(interactionId: string, response: InteractionResponse): Promise<void>;
108
+ interrupt?(): Promise<void>;
109
+ close?(): Promise<void> | void;
110
+ }
111
+ export interface ProgrammaticAdapter extends LegacyAgentAdapter {
112
+ readonly adapterType: 'programmatic';
113
+ execute(options: RunOptions): ProgrammaticRun;
114
+ }
115
+ /**
116
+ * Server configuration options for remote adapters.
117
+ */
118
+ export interface ServerOptions {
119
+ port?: number;
120
+ host?: string;
121
+ timeout?: number;
122
+ env?: Record<string, string>;
123
+ args?: string[];
124
+ }
125
+ /**
126
+ * Information about a managed server instance.
127
+ */
128
+ export interface ServerInfo {
129
+ readonly serverId: string;
130
+ readonly serverType: string;
131
+ readonly endpoint: string;
132
+ readonly pid?: number;
133
+ readonly port: number;
134
+ readonly startedAt: Date;
135
+ }
136
+ /**
137
+ * Server health status.
138
+ */
139
+ export interface ServerHealth {
140
+ status: 'starting' | 'healthy' | 'unhealthy' | 'stopped';
141
+ uptime?: number;
142
+ lastCheck: Date;
143
+ details?: string;
144
+ }
145
+ /**
146
+ * Server lifecycle manager interface.
147
+ */
148
+ export interface ServerManager {
149
+ start(adapter: RemoteAdapter, options?: ServerOptions): Promise<ServerInfo>;
150
+ stop(serverId: string): Promise<void>;
151
+ health(serverId: string): Promise<ServerHealth>;
152
+ list(): Promise<ServerInfo[]>;
153
+ cleanup(): Promise<void>;
154
+ }
155
+ /**
156
+ * Union of all adapter types. This replaces the original AgentAdapter interface
157
+ * while maintaining backward compatibility.
158
+ */
159
+ export type AgentAdapter = SubprocessAdapter | RemoteAdapter | ProgrammaticAdapter;
160
+ export declare function isSubprocessAdapter(adapter: AgentAdapter): adapter is SubprocessAdapter;
161
+ export declare function isRemoteAdapter(adapter: AgentAdapter): adapter is RemoteAdapter;
162
+ export declare function isProgrammaticAdapter(adapter: AgentAdapter): adapter is ProgrammaticAdapter;
163
+ export declare function isHttpConnection(connection: RemoteConnection): connection is HttpConnection;
164
+ export declare function isWebSocketConnection(connection: RemoteConnection): connection is WebSocketConnection;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-types.d.ts","sourceRoot":"","sources":["../src/adapter-types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAM1G;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IAGxC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,YAAY,GAAG,QAAQ,GAAG,cAAc,CAAC;IAC/D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAI7B,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC;IACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IAIzC,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;IACjC,eAAe,IAAI,iBAAiB,CAAC;IAIrC,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAIlD,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/C,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvE,oFAAoF;IACpF,cAAc,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAI5D,qFAAqF;IACrF,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAE5C,8DAA8D;IAC9D,gBAAgB,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;CAC7F;AAOD,OAAO,KAAK,EAAE,YAAY,IAAI,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvE;;;GAGG;AACH,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB;IAC3D,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC;CACpC;AAQD;;;GAGG;AACH,MAAM,WAAW,aAAc,SAAQ,kBAAkB;IACvD,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAEvD,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACxD,UAAU,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGxD,WAAW,CAAC,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3D,UAAU,CAAC,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,WAAW,CAAC,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC7D;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IACvD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,IAAI,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAC7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACtD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAGvC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;CACzE;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAC9D,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACf;AAMD;;;GAGG;AACH,MAAM,WAAW,eAAgB,SAAQ,qBAAqB,CAAC,UAAU,CAAC;IACxE,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,CAAC,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,SAAS,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,mBAAoB,SAAQ,kBAAkB;IAC7D,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;IAErC,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,eAAe,CAAC;CAC/C;AAMD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5E,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAChD,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC9B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAMD;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,iBAAiB,GAAG,aAAa,GAAG,mBAAmB,CAAC;AAMnF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,IAAI,iBAAiB,CAEvF;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,IAAI,aAAa,CAE/E;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,IAAI,mBAAmB,CAE3F;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,gBAAgB,GAAG,UAAU,IAAI,cAAc,CAE3F;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,gBAAgB,GAAG,UAAU,IAAI,mBAAmB,CAErG"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Multi-type adapter architecture interfaces.
3
+ *
4
+ * Extends agent-mux to support subprocess, remote (HTTP/WebSocket), and
5
+ * programmatic (SDK) adapter types beyond the original subprocess-only model.
6
+ *
7
+ * @see ../../../docs/18-multi-adapter-architecture.md
8
+ */
9
+ // ---------------------------------------------------------------------------
10
+ // Type Guards
11
+ // ---------------------------------------------------------------------------
12
+ export function isSubprocessAdapter(adapter) {
13
+ return adapter.adapterType === 'subprocess';
14
+ }
15
+ export function isRemoteAdapter(adapter) {
16
+ return adapter.adapterType === 'remote';
17
+ }
18
+ export function isProgrammaticAdapter(adapter) {
19
+ return adapter.adapterType === 'programmatic';
20
+ }
21
+ export function isHttpConnection(connection) {
22
+ return connection.connectionType === 'http';
23
+ }
24
+ export function isWebSocketConnection(connection) {
25
+ return connection.connectionType === 'websocket';
26
+ }
27
+ //# sourceMappingURL=adapter-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-types.js","sourceRoot":"","sources":["../src/adapter-types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgOH,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,MAAM,UAAU,mBAAmB,CAAC,OAAqB;IACvD,OAAO,OAAO,CAAC,WAAW,KAAK,YAAY,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAqB;IACnD,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAqB;IACzD,OAAO,OAAO,CAAC,WAAW,KAAK,cAAc,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,UAA4B;IAC3D,OAAO,UAAU,CAAC,cAAc,KAAK,MAAM,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,UAA4B;IAChE,OAAO,UAAU,CAAC,cAAc,KAAK,WAAW,CAAC;AACnD,CAAC"}