@a5c-ai/agent-comm-mux 5.0.1-staging.04ca6ab00d21

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
@@ -0,0 +1,343 @@
1
+ /**
2
+ * PluginManagerImpl — concrete implementation of the PluginManager interface.
3
+ *
4
+ * Every method resolves the target adapter from the AdapterRegistry,
5
+ * checks `AgentCapabilities.supportsPlugins`, and delegates to the
6
+ * adapter's optional plugin methods.
7
+ *
8
+ * @see 09-plugin-manager.md §2
9
+ */
10
+ import { AgentMuxError, CapabilityError, ValidationError } from './errors.js';
11
+ /**
12
+ * Concrete implementation of the PluginManager interface.
13
+ * Delegates all operations to the appropriate agent adapter.
14
+ */
15
+ export class PluginManagerImpl {
16
+ registry;
17
+ constructor(registry) {
18
+ this.registry = registry;
19
+ }
20
+ // ── Helpers ──────────────────────────────────────────────────────────
21
+ /**
22
+ * Resolves the adapter and asserts that it supports plugins.
23
+ * Throws AGENT_NOT_FOUND or CAPABILITY_ERROR as appropriate.
24
+ */
25
+ assertPluginCapable(agent) {
26
+ const adapter = this.registry.get(agent);
27
+ if (!adapter) {
28
+ throw new AgentMuxError('AGENT_NOT_FOUND', `Agent '${agent}' is not registered`);
29
+ }
30
+ if (!adapter.capabilities.supportsPlugins) {
31
+ throw new CapabilityError(agent, 'plugins');
32
+ }
33
+ return adapter;
34
+ }
35
+ defaultFormatForAdapter(adapter) {
36
+ const format = adapter.capabilities.pluginFormats[0];
37
+ return this.isPluginFormat(format) ? format : 'npm-package';
38
+ }
39
+ isPluginFormat(value) {
40
+ return value === 'npm-package'
41
+ || value === 'skill-file'
42
+ || value === 'skill-directory'
43
+ || value === 'extension-ts'
44
+ || value === 'channel-plugin'
45
+ || value === 'mcp-server';
46
+ }
47
+ normalizeDate(value, fallback) {
48
+ if (value instanceof Date && !Number.isNaN(value.getTime())) {
49
+ return new Date(value.getTime());
50
+ }
51
+ if (typeof value === 'string' || typeof value === 'number') {
52
+ const parsed = new Date(value);
53
+ if (!Number.isNaN(parsed.getTime())) {
54
+ return parsed;
55
+ }
56
+ }
57
+ return new Date(fallback.getTime());
58
+ }
59
+ sortInstalledPlugins(plugins) {
60
+ return [...plugins].sort((a, b) => b.installedAt.getTime() - a.installedAt.getTime());
61
+ }
62
+ normalizeInstalledPlugin(agent, adapter, plugin, fallbackInstalledAt = new Date(0)) {
63
+ return {
64
+ pluginId: plugin.pluginId,
65
+ name: plugin.name,
66
+ version: plugin.version,
67
+ agent,
68
+ format: this.isPluginFormat(plugin.format)
69
+ ? plugin.format
70
+ : this.defaultFormatForAdapter(adapter),
71
+ description: typeof plugin.description === 'string'
72
+ ? plugin.description
73
+ : undefined,
74
+ installedAt: this.normalizeDate(plugin.installedAt, fallbackInstalledAt),
75
+ enabled: typeof plugin.enabled === 'boolean' ? plugin.enabled : true,
76
+ };
77
+ }
78
+ normalizePluginListing(adapter, listing) {
79
+ const fallbackFormat = this.defaultFormatForAdapter(adapter);
80
+ const formats = Array.isArray(listing.formats)
81
+ ? listing.formats.filter((format) => this.isPluginFormat(format))
82
+ : [];
83
+ const agents = Array.isArray(listing.agents)
84
+ ? listing.agents.filter((agent) => typeof agent === 'string' && agent.length > 0)
85
+ : [];
86
+ const tags = Array.isArray(listing.tags)
87
+ ? listing.tags.filter((tag) => typeof tag === 'string')
88
+ : [];
89
+ const registry = typeof listing.registry === 'string' && listing.registry.length > 0
90
+ ? listing.registry
91
+ : adapter.capabilities.pluginRegistries[0]?.name ?? adapter.agent;
92
+ return {
93
+ pluginId: listing.pluginId,
94
+ name: listing.name,
95
+ latestVersion: listing.latestVersion,
96
+ description: typeof listing.description === 'string' ? listing.description : '',
97
+ author: typeof listing.author === 'string' ? listing.author : registry,
98
+ weeklyDownloads: typeof listing.weeklyDownloads === 'number'
99
+ ? listing.weeklyDownloads
100
+ : undefined,
101
+ agents: agents.length > 0 ? agents : [adapter.agent],
102
+ formats: formats.length > 0 ? formats : [fallbackFormat],
103
+ registry,
104
+ tags,
105
+ url: typeof listing.url === 'string' ? listing.url : '',
106
+ };
107
+ }
108
+ normalizePluginDetail(adapter, detail) {
109
+ const listing = this.normalizePluginListing(adapter, detail);
110
+ const versions = Array.isArray(detail.versions)
111
+ ? detail.versions.filter((version) => typeof version === 'string')
112
+ : [];
113
+ const dependencies = Array.isArray(detail.dependencies)
114
+ ? detail.dependencies.filter((dep) => typeof dep === 'string')
115
+ : undefined;
116
+ const agentMinVersions = detail.agentMinVersions && typeof detail.agentMinVersions === 'object'
117
+ ? Object.fromEntries(Object.entries(detail.agentMinVersions).filter(([agent, version]) => typeof agent === 'string' && typeof version === 'string'))
118
+ : undefined;
119
+ return {
120
+ ...listing,
121
+ readme: typeof detail.readme === 'string' ? detail.readme : undefined,
122
+ changelog: typeof detail.changelog === 'string' ? detail.changelog : undefined,
123
+ versions: versions.length > 0 ? versions : [listing.latestVersion],
124
+ dependencies,
125
+ agentMinVersions,
126
+ };
127
+ }
128
+ toPluginError(message, error) {
129
+ if (error instanceof AgentMuxError) {
130
+ return error;
131
+ }
132
+ const suffix = error instanceof Error && error.message
133
+ ? `: ${error.message}`
134
+ : '';
135
+ return new AgentMuxError('PLUGIN_ERROR', `${message}${suffix}`);
136
+ }
137
+ assertNonEmptyValue(field, value) {
138
+ if (value.trim().length > 0) {
139
+ return;
140
+ }
141
+ throw new ValidationError([{
142
+ field,
143
+ message: 'must not be empty',
144
+ received: value,
145
+ expected: 'non-empty string',
146
+ }]);
147
+ }
148
+ resolveSearchAdapters(agentNames) {
149
+ const adapters = [];
150
+ if (agentNames) {
151
+ for (const name of agentNames) {
152
+ const adapter = this.registry.get(name);
153
+ if (adapter && adapter.capabilities.supportsPlugins) {
154
+ adapters.push(adapter);
155
+ }
156
+ }
157
+ return adapters;
158
+ }
159
+ const allAdapters = this.registry.list();
160
+ for (const info of allAdapters) {
161
+ const adapter = this.registry.get(info.agent);
162
+ if (adapter && adapter.capabilities.supportsPlugins) {
163
+ adapters.push(adapter);
164
+ }
165
+ }
166
+ return adapters;
167
+ }
168
+ async searchAcrossAdapters(query, options, allowEmptyQuery) {
169
+ if (!allowEmptyQuery) {
170
+ this.assertNonEmptyValue('query', query);
171
+ }
172
+ const adapters = this.resolveSearchAdapters(options?.agents);
173
+ const allResults = [];
174
+ const seen = new Set();
175
+ let attempted = 0;
176
+ let failed = 0;
177
+ for (const adapter of adapters) {
178
+ if (!adapter.searchPlugins) {
179
+ continue;
180
+ }
181
+ attempted += 1;
182
+ try {
183
+ const results = await adapter.searchPlugins(query, options);
184
+ for (const listing of results) {
185
+ const normalized = this.normalizePluginListing(adapter, listing);
186
+ if (!seen.has(normalized.pluginId)) {
187
+ seen.add(normalized.pluginId);
188
+ allResults.push(normalized);
189
+ }
190
+ }
191
+ }
192
+ catch {
193
+ failed += 1;
194
+ }
195
+ }
196
+ if (attempted > 0 && failed === attempted) {
197
+ const operation = allowEmptyQuery ? 'browse plugin registries' : `search plugin registries for '${query}'`;
198
+ throw new AgentMuxError('PLUGIN_ERROR', `Failed to ${operation}`);
199
+ }
200
+ const limit = options?.limit
201
+ ? Math.min(Math.max(options.limit, 1), 200)
202
+ : 25;
203
+ return allResults.slice(0, limit);
204
+ }
205
+ // ── PluginManager interface ─────────────────────────────────────────
206
+ async list(agent) {
207
+ const adapter = this.assertPluginCapable(agent);
208
+ if (!adapter.listPlugins) {
209
+ return [];
210
+ }
211
+ try {
212
+ const plugins = await adapter.listPlugins();
213
+ return this.sortInstalledPlugins(plugins.map((plugin) => this.normalizeInstalledPlugin(agent, adapter, plugin)));
214
+ }
215
+ catch (error) {
216
+ throw this.toPluginError(`Failed to list plugins for agent '${agent}'`, error);
217
+ }
218
+ }
219
+ async install(agent, pluginId, options) {
220
+ this.assertNonEmptyValue('pluginId', pluginId);
221
+ const adapter = this.assertPluginCapable(agent);
222
+ if (!adapter.installPlugin) {
223
+ throw new AgentMuxError('PLUGIN_ERROR', `Agent '${agent}' does not implement installPlugin`);
224
+ }
225
+ try {
226
+ const result = await adapter.installPlugin(pluginId, options);
227
+ return this.normalizeInstalledPlugin(agent, adapter, result, new Date());
228
+ }
229
+ catch (error) {
230
+ throw this.toPluginError(`Failed to install plugin '${pluginId}' for agent '${agent}'`, error);
231
+ }
232
+ }
233
+ async uninstall(agent, pluginId, options) {
234
+ this.assertNonEmptyValue('pluginId', pluginId);
235
+ const adapter = this.assertPluginCapable(agent);
236
+ if (!adapter.uninstallPlugin) {
237
+ throw new AgentMuxError('PLUGIN_ERROR', `Agent '${agent}' does not implement uninstallPlugin`);
238
+ }
239
+ try {
240
+ await adapter.uninstallPlugin(pluginId, options);
241
+ }
242
+ catch (error) {
243
+ throw this.toPluginError(`Failed to uninstall plugin '${pluginId}' for agent '${agent}'`, error);
244
+ }
245
+ }
246
+ async update(agent, pluginId) {
247
+ this.assertNonEmptyValue('pluginId', pluginId);
248
+ const adapter = this.assertPluginCapable(agent);
249
+ const installedPlugins = await this.list(agent);
250
+ const currentPlugin = installedPlugins.find((plugin) => plugin.pluginId === pluginId);
251
+ if (!currentPlugin) {
252
+ throw new AgentMuxError('PLUGIN_ERROR', `Plugin '${pluginId}' is not installed for agent '${agent}'`);
253
+ }
254
+ if (!adapter.installPlugin) {
255
+ throw new AgentMuxError('PLUGIN_ERROR', `Agent '${agent}' does not implement installPlugin`);
256
+ }
257
+ try {
258
+ const result = await adapter.installPlugin(pluginId);
259
+ return this.normalizeInstalledPlugin(agent, adapter, result, currentPlugin.installedAt);
260
+ }
261
+ catch (error) {
262
+ throw this.toPluginError(`Failed to update plugin '${pluginId}' for agent '${agent}'`, error);
263
+ }
264
+ }
265
+ async updateAll(agent) {
266
+ const adapter = this.assertPluginCapable(agent);
267
+ const plugins = await this.list(agent);
268
+ if (plugins.length === 0) {
269
+ return [];
270
+ }
271
+ if (!adapter.installPlugin) {
272
+ throw new AgentMuxError('PLUGIN_ERROR', `Agent '${agent}' does not implement installPlugin`);
273
+ }
274
+ const results = [];
275
+ const failures = [];
276
+ for (const plugin of plugins) {
277
+ try {
278
+ const updated = await adapter.installPlugin(plugin.pluginId);
279
+ results.push(this.normalizeInstalledPlugin(agent, adapter, updated, plugin.installedAt));
280
+ }
281
+ catch {
282
+ failures.push(plugin.pluginId);
283
+ }
284
+ }
285
+ if (failures.length > 0) {
286
+ throw new AgentMuxError('PLUGIN_ERROR', `Failed to update plugins for agent '${agent}': ${failures.join(', ')}`);
287
+ }
288
+ return this.sortInstalledPlugins(results);
289
+ }
290
+ async search(query, options) {
291
+ return this.searchAcrossAdapters(query, options, false);
292
+ }
293
+ async browse(options) {
294
+ return this.searchAcrossAdapters('', options, true);
295
+ }
296
+ async info(pluginId, agent) {
297
+ this.assertNonEmptyValue('pluginId', pluginId);
298
+ if (agent) {
299
+ const adapter = this.assertPluginCapable(agent);
300
+ if (!adapter.searchPlugins) {
301
+ throw new AgentMuxError('PLUGIN_ERROR', `Agent '${agent}' does not implement searchPlugins`);
302
+ }
303
+ try {
304
+ const results = await adapter.searchPlugins(pluginId);
305
+ if (results.length > 0) {
306
+ return this.normalizePluginDetail(adapter, results[0]);
307
+ }
308
+ }
309
+ catch (error) {
310
+ throw this.toPluginError(`Failed to look up plugin '${pluginId}' for agent '${agent}'`, error);
311
+ }
312
+ throw new AgentMuxError('PLUGIN_ERROR', `Plugin '${pluginId}' not found for agent '${agent}'`);
313
+ }
314
+ const adapters = this.resolveSearchAdapters();
315
+ let attempted = 0;
316
+ let failed = 0;
317
+ for (const adapter of adapters) {
318
+ if (!adapter.searchPlugins) {
319
+ continue;
320
+ }
321
+ attempted += 1;
322
+ try {
323
+ const results = await adapter.searchPlugins(pluginId);
324
+ if (results.length > 0) {
325
+ return this.normalizePluginDetail(adapter, results[0]);
326
+ }
327
+ }
328
+ catch {
329
+ failed += 1;
330
+ }
331
+ }
332
+ if (attempted > 0 && failed === attempted) {
333
+ throw new AgentMuxError('PLUGIN_ERROR', `Failed to look up plugin '${pluginId}' in any registry`);
334
+ }
335
+ throw new AgentMuxError('PLUGIN_ERROR', `Plugin '${pluginId}' not found in any registry`);
336
+ }
337
+ async isInstalled(agent, pluginId) {
338
+ this.assertNonEmptyValue('pluginId', pluginId);
339
+ const plugins = await this.list(agent);
340
+ return plugins.some((p) => p.pluginId === pluginId);
341
+ }
342
+ }
343
+ //# sourceMappingURL=plugin-manager-impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-manager-impl.js","sourceRoot":"","sources":["../src/plugin-manager-impl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * PluginManager interface for @a5c-ai/agent-mux.
3
+ *
4
+ * @see 09-plugin-manager.md §2
5
+ */
6
+ import type { AgentName } from './types.js';
7
+ import type { InstalledPlugin, PluginListing, PluginDetail, PluginInstallOptions, PluginSearchOptions, PluginBrowseOptions } from './plugin-types.js';
8
+ /**
9
+ * Unified interface over each agent's native plugin system.
10
+ *
11
+ * All methods are capability-gated: calling any method on an agent where
12
+ * `AgentCapabilities.supportsPlugins` is `false` throws a `CapabilityError`
13
+ * with `code: 'CAPABILITY_ERROR'` and `capability: 'plugins'`.
14
+ */
15
+ export interface PluginManager {
16
+ /**
17
+ * List all plugins currently installed for an agent.
18
+ *
19
+ * @throws {CapabilityError} If `supportsPlugins` is `false` for the agent.
20
+ * @throws {AgentMuxError} With code `'AGENT_NOT_FOUND'` if agent is not registered.
21
+ */
22
+ list(agent: AgentName): Promise<InstalledPlugin[]>;
23
+ /**
24
+ * Install a plugin for an agent.
25
+ *
26
+ * @throws {CapabilityError} If `supportsPlugins` is `false` for the agent.
27
+ * @throws {AgentMuxError} With code `'AGENT_NOT_FOUND'` if agent is not registered.
28
+ * @throws {AgentMuxError} With code `'PLUGIN_ERROR'` if installation fails.
29
+ */
30
+ install(agent: AgentName, pluginId: string, options?: PluginInstallOptions): Promise<InstalledPlugin>;
31
+ /**
32
+ * Uninstall a plugin from an agent.
33
+ *
34
+ * @throws {CapabilityError} If `supportsPlugins` is `false` for the agent.
35
+ * @throws {AgentMuxError} With code `'AGENT_NOT_FOUND'` if agent is not registered.
36
+ * @throws {AgentMuxError} With code `'PLUGIN_ERROR'` if uninstallation fails.
37
+ */
38
+ uninstall(agent: AgentName, pluginId: string, options?: {
39
+ global?: boolean;
40
+ }): Promise<void>;
41
+ /**
42
+ * Update a single installed plugin to its latest version.
43
+ *
44
+ * @throws {CapabilityError} If `supportsPlugins` is `false` for the agent.
45
+ * @throws {AgentMuxError} With code `'AGENT_NOT_FOUND'` if agent is not registered.
46
+ * @throws {AgentMuxError} With code `'PLUGIN_ERROR'` if the update fails.
47
+ */
48
+ update(agent: AgentName, pluginId: string): Promise<InstalledPlugin>;
49
+ /**
50
+ * Update all installed plugins for an agent to their latest versions.
51
+ *
52
+ * @throws {CapabilityError} If `supportsPlugins` is `false` for the agent.
53
+ * @throws {AgentMuxError} With code `'AGENT_NOT_FOUND'` if agent is not registered.
54
+ */
55
+ updateAll(agent: AgentName): Promise<InstalledPlugin[]>;
56
+ /**
57
+ * Search for plugins across registries.
58
+ *
59
+ * @throws {AgentMuxError} With code `'PLUGIN_ERROR'` if all registries fail.
60
+ */
61
+ search(query: string, options?: PluginSearchOptions): Promise<PluginListing[]>;
62
+ /**
63
+ * Browse available plugins by agent or category.
64
+ *
65
+ * @throws {AgentMuxError} With code `'PLUGIN_ERROR'` if all registries fail.
66
+ */
67
+ browse(options?: PluginBrowseOptions): Promise<PluginListing[]>;
68
+ /**
69
+ * Get detailed information about a specific plugin.
70
+ *
71
+ * @throws {AgentMuxError} With code `'PLUGIN_ERROR'` if plugin is not found.
72
+ */
73
+ info(pluginId: string, agent?: AgentName): Promise<PluginDetail>;
74
+ /**
75
+ * Check whether a plugin is currently installed for an agent.
76
+ *
77
+ * @throws {CapabilityError} If `supportsPlugins` is `false` for the agent.
78
+ * @throws {AgentMuxError} With code `'AGENT_NOT_FOUND'` if agent is not registered.
79
+ */
80
+ isInstalled(agent: AgentName, pluginId: string): Promise<boolean>;
81
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-manager.d.ts","sourceRoot":"","sources":["../src/plugin-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAE3B;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAEnD;;;;;;OAMG;IACH,OAAO,CACL,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAAC;IAE5B;;;;;;OAMG;IACH,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7F;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAErE;;;;;OAKG;IACH,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAExD;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAE/E;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAEhE;;;;OAIG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAEjE;;;;;OAKG;IACH,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACnE"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * PluginManager interface for @a5c-ai/agent-mux.
3
+ *
4
+ * @see 09-plugin-manager.md §2
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=plugin-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-manager.js","sourceRoot":"","sources":["../src/plugin-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Plugin types for @a5c-ai/agent-mux.
3
+ *
4
+ * @see 09-plugin-manager.md §3–§8
5
+ */
6
+ import type { AgentName, PluginFormat } from './types.js';
7
+ /**
8
+ * Descriptor of a plugin currently installed for a specific agent.
9
+ *
10
+ * The `pluginId` is the canonical identifier used in `install()`,
11
+ * `uninstall()`, and `update()` calls. Its format is agent-specific.
12
+ */
13
+ export interface InstalledPlugin {
14
+ /** Canonical plugin identifier. */
15
+ pluginId: string;
16
+ /** Human-readable display name. */
17
+ name: string;
18
+ /** Installed version string. Follows semver where applicable. */
19
+ version: string;
20
+ /** The agent this plugin is installed for. */
21
+ agent: AgentName;
22
+ /** The structural format of this plugin. */
23
+ format: PluginFormat;
24
+ /** Short description of the plugin's purpose. */
25
+ description?: string;
26
+ /** Timestamp when the plugin was installed. */
27
+ installedAt: Date;
28
+ /** Whether the plugin is currently enabled. */
29
+ enabled: boolean;
30
+ }
31
+ /**
32
+ * A plugin listing from a registry search or browse result.
33
+ */
34
+ export interface PluginListing {
35
+ /** Canonical plugin identifier. */
36
+ pluginId: string;
37
+ /** Human-readable display name. */
38
+ name: string;
39
+ /** Latest available version in the registry. */
40
+ latestVersion: string;
41
+ /** Short description of the plugin. */
42
+ description: string;
43
+ /** Author name or organization. */
44
+ author: string;
45
+ /** Weekly download count from the registry. */
46
+ weeklyDownloads?: number;
47
+ /** Agents that this plugin supports. */
48
+ agents: AgentName[];
49
+ /** The plugin formats this listing is available in. */
50
+ formats: PluginFormat[];
51
+ /** The registry this listing was sourced from. */
52
+ registry: string;
53
+ /** Searchable tags / keywords. */
54
+ tags: string[];
55
+ /** URL to the plugin's homepage or registry page. */
56
+ url: string;
57
+ }
58
+ /**
59
+ * Detailed information about a specific plugin. Extends PluginListing
60
+ * with full content and metadata.
61
+ */
62
+ export interface PluginDetail extends PluginListing {
63
+ /** Full README content (Markdown). */
64
+ readme?: string;
65
+ /** Changelog content (Markdown or plain text). */
66
+ changelog?: string;
67
+ /** All published versions, sorted newest-first. */
68
+ versions: string[];
69
+ /** Runtime dependencies of the plugin. */
70
+ dependencies?: string[];
71
+ /** Minimum agent CLI version required, keyed by agent name. */
72
+ agentMinVersions?: Record<AgentName, string>;
73
+ }
74
+ /**
75
+ * Options for plugin installation.
76
+ */
77
+ export interface PluginInstallOptions {
78
+ /** Pin to a specific version (semver string or range). */
79
+ version?: string;
80
+ /** Install globally (true) vs. project-local (false). */
81
+ global?: boolean;
82
+ /** Skip plugin integrity/signature verification. */
83
+ skipVerify?: boolean;
84
+ }
85
+ /**
86
+ * Options for filtering plugin search results.
87
+ */
88
+ export interface PluginSearchOptions {
89
+ /** Filter results to plugins that support one or more of these agents. */
90
+ agents?: AgentName[];
91
+ /** Filter results to a specific plugin format. */
92
+ format?: PluginFormat;
93
+ /** Restrict the search to a specific registry by name. */
94
+ registry?: string;
95
+ /**
96
+ * Maximum number of results to return.
97
+ * Values < 1 are clamped to 1, values > 200 are clamped to 200.
98
+ * @default 25
99
+ */
100
+ limit?: number;
101
+ }
102
+ /**
103
+ * Options for browsing plugin listings by category and sort order.
104
+ * Extends PluginSearchOptions, inheriting all filter fields.
105
+ */
106
+ export interface PluginBrowseOptions extends PluginSearchOptions {
107
+ /** Browse by category. Category values are registry-defined. */
108
+ category?: string;
109
+ /**
110
+ * Sort order for browse results.
111
+ * @default 'downloads'
112
+ */
113
+ sortBy?: 'downloads' | 'updated' | 'name';
114
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-types.d.ts","sourceRoot":"","sources":["../src/plugin-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM1D;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IAEjB,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IAEb,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAEhB,8CAA8C;IAC9C,KAAK,EAAE,SAAS,CAAC;IAEjB,4CAA4C;IAC5C,MAAM,EAAE,YAAY,CAAC;IAErB,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,+CAA+C;IAC/C,WAAW,EAAE,IAAI,CAAC;IAElB,+CAA+C;IAC/C,OAAO,EAAE,OAAO,CAAC;CAClB;AAMD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IAEjB,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IAEb,gDAAgD;IAChD,aAAa,EAAE,MAAM,CAAC;IAEtB,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAC;IAEpB,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IAEf,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,wCAAwC;IACxC,MAAM,EAAE,SAAS,EAAE,CAAC;IAEpB,uDAAuD;IACvD,OAAO,EAAE,YAAY,EAAE,CAAC;IAExB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IAEjB,kCAAkC;IAClC,IAAI,EAAE,MAAM,EAAE,CAAC;IAEf,qDAAqD;IACrD,GAAG,EAAE,MAAM,CAAC;CACb;AAMD;;;GAGG;AACH,MAAM,WAAW,YAAa,SAAQ,aAAa;IACjD,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;CAC9C;AAMD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,yDAAyD;IACzD,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,oDAAoD;IACpD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAMD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,0EAA0E;IAC1E,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IAErB,kDAAkD;IAClD,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;;GAGG;AACH,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC9D,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;CAC3C"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Plugin types for @a5c-ai/agent-mux.
3
+ *
4
+ * @see 09-plugin-manager.md §3–§8
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=plugin-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-types.js","sourceRoot":"","sources":["../src/plugin-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * ProcessTracker singleton for zombie prevention.
3
+ *
4
+ * Maintains a set of all active subprocess PIDs and their metadata.
5
+ * On Node.js exit, all tracked processes are forcefully terminated.
6
+ *
7
+ * Per spec §6.4: handlers are installed once, on first register() call.
8
+ */
9
+ export interface ProcessTracker {
10
+ /** Register a spawned process. Called by RunHandle during spawn. */
11
+ register(pid: number, groupId: number, runId: string): void;
12
+ /** Unregister a process after it exits. Called on process exit. */
13
+ unregister(pid: number): void;
14
+ /** Kill all tracked processes. Sends SIGTERM then SIGKILL after grace period. */
15
+ killAll(): void;
16
+ /** Number of currently tracked processes. */
17
+ readonly activeCount: number;
18
+ }
19
+ /** Global ProcessTracker singleton. */
20
+ export declare const processTracker: ProcessTracker;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-tracker.d.ts","sourceRoot":"","sources":["../src/process-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5D,mEAAmE;IACnE,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9B,iFAAiF;IACjF,OAAO,IAAI,IAAI,CAAC;IAEhB,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AA2GD,uCAAuC;AACvC,eAAO,MAAM,cAAc,EAAE,cAAyC,CAAC"}