@moxxy/core 0.3.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 (332) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +125 -0
  3. package/dist/events/factory.d.ts +6 -0
  4. package/dist/events/factory.d.ts.map +1 -0
  5. package/dist/events/factory.js +14 -0
  6. package/dist/events/factory.js.map +1 -0
  7. package/dist/events/log.d.ts +92 -0
  8. package/dist/events/log.d.ts.map +1 -0
  9. package/dist/events/log.js +244 -0
  10. package/dist/events/log.js.map +1 -0
  11. package/dist/index.d.ts +40 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +41 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/logger.d.ts +16 -0
  16. package/dist/logger.d.ts.map +1 -0
  17. package/dist/logger.js +27 -0
  18. package/dist/logger.js.map +1 -0
  19. package/dist/permissions/engine.d.ts +94 -0
  20. package/dist/permissions/engine.d.ts.map +1 -0
  21. package/dist/permissions/engine.js +203 -0
  22. package/dist/permissions/engine.js.map +1 -0
  23. package/dist/permissions/resolvers.d.ts +8 -0
  24. package/dist/permissions/resolvers.d.ts.map +1 -0
  25. package/dist/permissions/resolvers.js +8 -0
  26. package/dist/permissions/resolvers.js.map +1 -0
  27. package/dist/plugins/discovery.d.ts +9 -0
  28. package/dist/plugins/discovery.d.ts.map +1 -0
  29. package/dist/plugins/discovery.js +112 -0
  30. package/dist/plugins/discovery.js.map +1 -0
  31. package/dist/plugins/host-options.d.ts +72 -0
  32. package/dist/plugins/host-options.d.ts.map +1 -0
  33. package/dist/plugins/host-options.js +2 -0
  34. package/dist/plugins/host-options.js.map +1 -0
  35. package/dist/plugins/host.d.ts +53 -0
  36. package/dist/plugins/host.d.ts.map +1 -0
  37. package/dist/plugins/host.js +269 -0
  38. package/dist/plugins/host.js.map +1 -0
  39. package/dist/plugins/lifecycle.d.ts +31 -0
  40. package/dist/plugins/lifecycle.d.ts.map +1 -0
  41. package/dist/plugins/lifecycle.js +100 -0
  42. package/dist/plugins/lifecycle.js.map +1 -0
  43. package/dist/plugins/loader.d.ts +7 -0
  44. package/dist/plugins/loader.d.ts.map +1 -0
  45. package/dist/plugins/loader.js +68 -0
  46. package/dist/plugins/loader.js.map +1 -0
  47. package/dist/plugins/package-requirements.d.ts +16 -0
  48. package/dist/plugins/package-requirements.d.ts.map +1 -0
  49. package/dist/plugins/package-requirements.js +52 -0
  50. package/dist/plugins/package-requirements.js.map +1 -0
  51. package/dist/plugins/registry-kinds.d.ts +58 -0
  52. package/dist/plugins/registry-kinds.d.ts.map +1 -0
  53. package/dist/plugins/registry-kinds.js +139 -0
  54. package/dist/plugins/registry-kinds.js.map +1 -0
  55. package/dist/plugins/toposort.d.ts +24 -0
  56. package/dist/plugins/toposort.d.ts.map +1 -0
  57. package/dist/plugins/toposort.js +67 -0
  58. package/dist/plugins/toposort.js.map +1 -0
  59. package/dist/preferences.d.ts +40 -0
  60. package/dist/preferences.d.ts.map +1 -0
  61. package/dist/preferences.js +58 -0
  62. package/dist/preferences.js.map +1 -0
  63. package/dist/registries/active-backend-registry.d.ts +65 -0
  64. package/dist/registries/active-backend-registry.d.ts.map +1 -0
  65. package/dist/registries/active-backend-registry.js +108 -0
  66. package/dist/registries/active-backend-registry.js.map +1 -0
  67. package/dist/registries/active-def-registry.d.ts +59 -0
  68. package/dist/registries/active-def-registry.d.ts.map +1 -0
  69. package/dist/registries/active-def-registry.js +63 -0
  70. package/dist/registries/active-def-registry.js.map +1 -0
  71. package/dist/registries/agents.d.ts +16 -0
  72. package/dist/registries/agents.d.ts.map +1 -0
  73. package/dist/registries/agents.js +17 -0
  74. package/dist/registries/agents.js.map +1 -0
  75. package/dist/registries/cache-strategies.d.ts +12 -0
  76. package/dist/registries/cache-strategies.d.ts.map +1 -0
  77. package/dist/registries/cache-strategies.js +13 -0
  78. package/dist/registries/cache-strategies.js.map +1 -0
  79. package/dist/registries/channels.d.ts +16 -0
  80. package/dist/registries/channels.d.ts.map +1 -0
  81. package/dist/registries/channels.js +35 -0
  82. package/dist/registries/channels.js.map +1 -0
  83. package/dist/registries/commands.d.ts +29 -0
  84. package/dist/registries/commands.d.ts.map +1 -0
  85. package/dist/registries/commands.js +72 -0
  86. package/dist/registries/commands.js.map +1 -0
  87. package/dist/registries/compactors.d.ts +12 -0
  88. package/dist/registries/compactors.d.ts.map +1 -0
  89. package/dist/registries/compactors.js +13 -0
  90. package/dist/registries/compactors.js.map +1 -0
  91. package/dist/registries/def-map-registry.d.ts +33 -0
  92. package/dist/registries/def-map-registry.d.ts.map +1 -0
  93. package/dist/registries/def-map-registry.js +36 -0
  94. package/dist/registries/def-map-registry.js.map +1 -0
  95. package/dist/registries/embedders.d.ts +16 -0
  96. package/dist/registries/embedders.d.ts.map +1 -0
  97. package/dist/registries/embedders.js +17 -0
  98. package/dist/registries/embedders.js.map +1 -0
  99. package/dist/registries/isolators.d.ts +21 -0
  100. package/dist/registries/isolators.d.ts.map +1 -0
  101. package/dist/registries/isolators.js +32 -0
  102. package/dist/registries/isolators.js.map +1 -0
  103. package/dist/registries/modes.d.ts +28 -0
  104. package/dist/registries/modes.d.ts.map +1 -0
  105. package/dist/registries/modes.js +81 -0
  106. package/dist/registries/modes.js.map +1 -0
  107. package/dist/registries/providers.d.ts +44 -0
  108. package/dist/registries/providers.d.ts.map +1 -0
  109. package/dist/registries/providers.js +95 -0
  110. package/dist/registries/providers.js.map +1 -0
  111. package/dist/registries/skills.d.ts +24 -0
  112. package/dist/registries/skills.d.ts.map +1 -0
  113. package/dist/registries/skills.js +81 -0
  114. package/dist/registries/skills.js.map +1 -0
  115. package/dist/registries/surfaces.d.ts +13 -0
  116. package/dist/registries/surfaces.d.ts.map +1 -0
  117. package/dist/registries/surfaces.js +14 -0
  118. package/dist/registries/surfaces.js.map +1 -0
  119. package/dist/registries/synthesizers.d.ts +26 -0
  120. package/dist/registries/synthesizers.d.ts.map +1 -0
  121. package/dist/registries/synthesizers.js +34 -0
  122. package/dist/registries/synthesizers.js.map +1 -0
  123. package/dist/registries/tools.d.ts +49 -0
  124. package/dist/registries/tools.d.ts.map +1 -0
  125. package/dist/registries/tools.js +98 -0
  126. package/dist/registries/tools.js.map +1 -0
  127. package/dist/registries/transcribers.d.ts +17 -0
  128. package/dist/registries/transcribers.d.ts.map +1 -0
  129. package/dist/registries/transcribers.js +18 -0
  130. package/dist/registries/transcribers.js.map +1 -0
  131. package/dist/registries/tunnel-providers.d.ts +12 -0
  132. package/dist/registries/tunnel-providers.d.ts.map +1 -0
  133. package/dist/registries/tunnel-providers.js +13 -0
  134. package/dist/registries/tunnel-providers.js.map +1 -0
  135. package/dist/registries/view-renderers.d.ts +13 -0
  136. package/dist/registries/view-renderers.d.ts.map +1 -0
  137. package/dist/registries/view-renderers.js +14 -0
  138. package/dist/registries/view-renderers.js.map +1 -0
  139. package/dist/registries/workflow-executors.d.ts +13 -0
  140. package/dist/registries/workflow-executors.d.ts.map +1 -0
  141. package/dist/registries/workflow-executors.js +14 -0
  142. package/dist/registries/workflow-executors.js.map +1 -0
  143. package/dist/requirements.d.ts +59 -0
  144. package/dist/requirements.d.ts.map +1 -0
  145. package/dist/requirements.js +149 -0
  146. package/dist/requirements.js.map +1 -0
  147. package/dist/run-turn.d.ts +6 -0
  148. package/dist/run-turn.d.ts.map +1 -0
  149. package/dist/run-turn.js +141 -0
  150. package/dist/run-turn.js.map +1 -0
  151. package/dist/session-runtime.d.ts +67 -0
  152. package/dist/session-runtime.d.ts.map +1 -0
  153. package/dist/session-runtime.js +2 -0
  154. package/dist/session-runtime.js.map +1 -0
  155. package/dist/session.d.ts +203 -0
  156. package/dist/session.d.ts.map +1 -0
  157. package/dist/session.js +399 -0
  158. package/dist/session.js.map +1 -0
  159. package/dist/sessions/persistence.d.ts +184 -0
  160. package/dist/sessions/persistence.d.ts.map +1 -0
  161. package/dist/sessions/persistence.js +442 -0
  162. package/dist/sessions/persistence.js.map +1 -0
  163. package/dist/setup-agent.d.ts +91 -0
  164. package/dist/setup-agent.d.ts.map +1 -0
  165. package/dist/setup-agent.js +138 -0
  166. package/dist/setup-agent.js.map +1 -0
  167. package/dist/skills/index.d.ts +4 -0
  168. package/dist/skills/index.d.ts.map +1 -0
  169. package/dist/skills/index.js +4 -0
  170. package/dist/skills/index.js.map +1 -0
  171. package/dist/skills/loader.d.ts +16 -0
  172. package/dist/skills/loader.d.ts.map +1 -0
  173. package/dist/skills/loader.js +99 -0
  174. package/dist/skills/loader.js.map +1 -0
  175. package/dist/skills/parse.d.ts +5 -0
  176. package/dist/skills/parse.d.ts.map +1 -0
  177. package/dist/skills/parse.js +8 -0
  178. package/dist/skills/parse.js.map +1 -0
  179. package/dist/skills/synthesize-draft.d.ts +8 -0
  180. package/dist/skills/synthesize-draft.d.ts.map +1 -0
  181. package/dist/skills/synthesize-draft.js +32 -0
  182. package/dist/skills/synthesize-draft.js.map +1 -0
  183. package/dist/skills/synthesize.d.ts +33 -0
  184. package/dist/skills/synthesize.d.ts.map +1 -0
  185. package/dist/skills/synthesize.js +241 -0
  186. package/dist/skills/synthesize.js.map +1 -0
  187. package/dist/subagents/events.d.ts +20 -0
  188. package/dist/subagents/events.d.ts.map +1 -0
  189. package/dist/subagents/events.js +146 -0
  190. package/dist/subagents/events.js.map +1 -0
  191. package/dist/subagents/registry.d.ts +40 -0
  192. package/dist/subagents/registry.d.ts.map +1 -0
  193. package/dist/subagents/registry.js +42 -0
  194. package/dist/subagents/registry.js.map +1 -0
  195. package/dist/subagents/run-child.d.ts +43 -0
  196. package/dist/subagents/run-child.d.ts.map +1 -0
  197. package/dist/subagents/run-child.js +276 -0
  198. package/dist/subagents/run-child.js.map +1 -0
  199. package/dist/subagents/spawn.d.ts +8 -0
  200. package/dist/subagents/spawn.d.ts.map +1 -0
  201. package/dist/subagents/spawn.js +8 -0
  202. package/dist/subagents/spawn.js.map +1 -0
  203. package/dist/subagents/tools.d.ts +4 -0
  204. package/dist/subagents/tools.d.ts.map +1 -0
  205. package/dist/subagents/tools.js +13 -0
  206. package/dist/subagents/tools.js.map +1 -0
  207. package/dist/subagents.d.ts +3 -0
  208. package/dist/subagents.d.ts.map +1 -0
  209. package/dist/subagents.js +3 -0
  210. package/dist/subagents.js.map +1 -0
  211. package/dist/surfaces/host.d.ts +53 -0
  212. package/dist/surfaces/host.d.ts.map +1 -0
  213. package/dist/surfaces/host.js +177 -0
  214. package/dist/surfaces/host.js.map +1 -0
  215. package/dist/tunnel/localhost.d.ts +7 -0
  216. package/dist/tunnel/localhost.d.ts.map +1 -0
  217. package/dist/tunnel/localhost.js +21 -0
  218. package/dist/tunnel/localhost.js.map +1 -0
  219. package/dist/usage-stats.d.ts +42 -0
  220. package/dist/usage-stats.d.ts.map +1 -0
  221. package/dist/usage-stats.js +83 -0
  222. package/dist/usage-stats.js.map +1 -0
  223. package/dist/view/default-renderer.d.ts +7 -0
  224. package/dist/view/default-renderer.d.ts.map +1 -0
  225. package/dist/view/default-renderer.js +14 -0
  226. package/dist/view/default-renderer.js.map +1 -0
  227. package/dist/view/parse.d.ts +7 -0
  228. package/dist/view/parse.d.ts.map +1 -0
  229. package/dist/view/parse.js +479 -0
  230. package/dist/view/parse.js.map +1 -0
  231. package/package.json +61 -0
  232. package/src/events/factory.ts +27 -0
  233. package/src/events/log.test.ts +470 -0
  234. package/src/events/log.ts +256 -0
  235. package/src/index.ts +102 -0
  236. package/src/logger.ts +46 -0
  237. package/src/permissions/engine.test.ts +206 -0
  238. package/src/permissions/engine.ts +247 -0
  239. package/src/permissions/resolvers.test.ts +40 -0
  240. package/src/permissions/resolvers.ts +17 -0
  241. package/src/plugins/discovery.test.ts +115 -0
  242. package/src/plugins/discovery.ts +124 -0
  243. package/src/plugins/host-options.ts +73 -0
  244. package/src/plugins/host-view-tunnel.test.ts +86 -0
  245. package/src/plugins/host.test.ts +434 -0
  246. package/src/plugins/host.ts +327 -0
  247. package/src/plugins/lifecycle.test.ts +187 -0
  248. package/src/plugins/lifecycle.ts +136 -0
  249. package/src/plugins/loader.ts +79 -0
  250. package/src/plugins/package-requirements.ts +50 -0
  251. package/src/plugins/registry-kinds.test.ts +162 -0
  252. package/src/plugins/registry-kinds.ts +210 -0
  253. package/src/plugins/toposort.test.ts +66 -0
  254. package/src/plugins/toposort.ts +69 -0
  255. package/src/preferences.test.ts +105 -0
  256. package/src/preferences.ts +84 -0
  257. package/src/registries/active-backend-registry.ts +142 -0
  258. package/src/registries/active-def-registry.test.ts +103 -0
  259. package/src/registries/active-def-registry.ts +97 -0
  260. package/src/registries/agents.ts +18 -0
  261. package/src/registries/cache-strategies.ts +14 -0
  262. package/src/registries/channels.ts +42 -0
  263. package/src/registries/commands.test.ts +71 -0
  264. package/src/registries/commands.ts +78 -0
  265. package/src/registries/compactors.ts +14 -0
  266. package/src/registries/def-map-registry.test.ts +67 -0
  267. package/src/registries/def-map-registry.ts +59 -0
  268. package/src/registries/embedders.test.ts +54 -0
  269. package/src/registries/embedders.ts +18 -0
  270. package/src/registries/isolators.test.ts +43 -0
  271. package/src/registries/isolators.ts +38 -0
  272. package/src/registries/modes.test.ts +66 -0
  273. package/src/registries/modes.ts +80 -0
  274. package/src/registries/providers.test.ts +50 -0
  275. package/src/registries/providers.ts +97 -0
  276. package/src/registries/semantics.test.ts +117 -0
  277. package/src/registries/skills.ts +87 -0
  278. package/src/registries/surfaces.ts +18 -0
  279. package/src/registries/synthesizers.test.ts +63 -0
  280. package/src/registries/synthesizers.ts +36 -0
  281. package/src/registries/tools.test.ts +142 -0
  282. package/src/registries/tools.ts +145 -0
  283. package/src/registries/transcribers.test.ts +70 -0
  284. package/src/registries/transcribers.ts +19 -0
  285. package/src/registries/tunnel-providers.test.ts +30 -0
  286. package/src/registries/tunnel-providers.ts +14 -0
  287. package/src/registries/view-renderers.test.ts +68 -0
  288. package/src/registries/view-renderers.ts +15 -0
  289. package/src/registries/workflow-executors.test.ts +53 -0
  290. package/src/registries/workflow-executors.ts +15 -0
  291. package/src/requirements.targetinfo.test.ts +70 -0
  292. package/src/requirements.test.ts +111 -0
  293. package/src/requirements.ts +262 -0
  294. package/src/run-turn.test.ts +178 -0
  295. package/src/run-turn.ts +156 -0
  296. package/src/session-runtime.ts +75 -0
  297. package/src/session.test.ts +216 -0
  298. package/src/session.ts +491 -0
  299. package/src/sessions/persistence.flush.test.ts +100 -0
  300. package/src/sessions/persistence.ready.test.ts +91 -0
  301. package/src/sessions/persistence.test.ts +274 -0
  302. package/src/sessions/persistence.ts +498 -0
  303. package/src/setup-agent.test.ts +72 -0
  304. package/src/setup-agent.ts +189 -0
  305. package/src/skills/index.ts +14 -0
  306. package/src/skills/loader.test.ts +102 -0
  307. package/src/skills/loader.ts +114 -0
  308. package/src/skills/parse.test.ts +59 -0
  309. package/src/skills/parse.ts +11 -0
  310. package/src/skills/synthesize-draft.test.ts +79 -0
  311. package/src/skills/synthesize-draft.ts +46 -0
  312. package/src/skills/synthesize.test.ts +170 -0
  313. package/src/skills/synthesize.ts +304 -0
  314. package/src/subagents/events.test.ts +56 -0
  315. package/src/subagents/events.ts +194 -0
  316. package/src/subagents/registry.ts +62 -0
  317. package/src/subagents/run-child.test.ts +185 -0
  318. package/src/subagents/run-child.ts +425 -0
  319. package/src/subagents/spawn.ts +12 -0
  320. package/src/subagents/tools.ts +19 -0
  321. package/src/subagents.ts +2 -0
  322. package/src/surfaces/host.test.ts +330 -0
  323. package/src/surfaces/host.ts +192 -0
  324. package/src/tunnel/localhost.test.ts +22 -0
  325. package/src/tunnel/localhost.ts +21 -0
  326. package/src/usage-stats.test.ts +77 -0
  327. package/src/usage-stats.ts +119 -0
  328. package/src/view/default-renderer.test.ts +29 -0
  329. package/src/view/default-renderer.ts +14 -0
  330. package/src/view/parse-extended.test.ts +255 -0
  331. package/src/view/parse.test.ts +232 -0
  332. package/src/view/parse.ts +520 -0
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Shared base for the "single active def, no built instance" registries
3
+ * (compactors, cache strategies, view renderers, tunnel providers, workflow
4
+ * executors). Each is a `Map<name, def>` with at most one *active* def at a
5
+ * time:
6
+ * - plugins call `register(def)` at load time (throws on duplicate)
7
+ * - the first registration auto-activates (when `autoAdoptFirst`, the
8
+ * default), so a session always has a default once a plugin loads one
9
+ * - the host / agent calls `setActive(name)` to switch
10
+ * - call sites read `getActive()` (returns null when nothing is active)
11
+ * - `unregister` clears the active slot rather than silently picking an
12
+ * arbitrary successor — callers must `setActive()` again
13
+ *
14
+ * This is the def-only sibling of {@link ActiveBackendRegistry} (which also
15
+ * builds runtime *instances* for STT/TTS/embeddings). The two families share
16
+ * the same surface (register/replace/unregister/list/has/setActive/getActive/
17
+ * getActiveName/clearActive) so they stay consistent.
18
+ *
19
+ * `ModeRegistry` (change-listeners + legacy-name migration) and
20
+ * `ProviderRegistry` (disabled-set + built instances) deliberately stay
21
+ * bespoke rather than extend this base.
22
+ */
23
+ export interface ActiveDefRegistryOptions {
24
+ /** Capitalised singular noun for error messages, e.g. `'Compactor'`. */
25
+ readonly noun: string;
26
+ /** Adopt the first registered def as active when nothing is active yet.
27
+ * Defaults to `true`. */
28
+ readonly autoAdoptFirst?: boolean;
29
+ }
30
+ export declare class ActiveDefRegistry<TDef extends {
31
+ name: string;
32
+ }> {
33
+ private readonly defs;
34
+ private active;
35
+ private readonly noun;
36
+ private readonly autoAdoptFirst;
37
+ constructor(opts: ActiveDefRegistryOptions);
38
+ /**
39
+ * Register a def. Throws on duplicate — use `replace()` to overwrite.
40
+ * Auto-activates the first registration (when `autoAdoptFirst`).
41
+ */
42
+ register(def: TDef): void;
43
+ /** Overwrite an existing def (or add a new one) without throwing.
44
+ * Auto-activates when nothing is active yet (mirrors `register`). */
45
+ replace(def: TDef): void;
46
+ /**
47
+ * Remove a def. If it was active, the active slot is cleared (callers must
48
+ * `setActive()` rather than getting an arbitrary "next").
49
+ */
50
+ unregister(name: string): void;
51
+ list(): ReadonlyArray<TDef>;
52
+ has(name: string): boolean;
53
+ setActive(name: string): void;
54
+ /** Deactivate the current def (callers fall back to their default). */
55
+ clearActive(): void;
56
+ getActive(): TDef | null;
57
+ getActiveName(): string | null;
58
+ }
59
+ //# sourceMappingURL=active-def-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"active-def-registry.d.ts","sourceRoot":"","sources":["../../src/registries/active-def-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,wBAAwB;IACvC,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;8BAC0B;IAC1B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,qBAAa,iBAAiB,CAAC,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE;IAC1D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA2B;IAChD,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;gBAE7B,IAAI,EAAE,wBAAwB;IAK1C;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI;IAQzB;0EACsE;IACtE,OAAO,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI;IAKxB;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK9B,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC;IAI3B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM7B,uEAAuE;IACvE,WAAW,IAAI,IAAI;IAInB,SAAS,IAAI,IAAI,GAAG,IAAI;IAKxB,aAAa,IAAI,MAAM,GAAG,IAAI;CAG/B"}
@@ -0,0 +1,63 @@
1
+ export class ActiveDefRegistry {
2
+ defs = new Map();
3
+ active = null;
4
+ noun;
5
+ autoAdoptFirst;
6
+ constructor(opts) {
7
+ this.noun = opts.noun;
8
+ this.autoAdoptFirst = opts.autoAdoptFirst ?? true;
9
+ }
10
+ /**
11
+ * Register a def. Throws on duplicate — use `replace()` to overwrite.
12
+ * Auto-activates the first registration (when `autoAdoptFirst`).
13
+ */
14
+ register(def) {
15
+ if (this.defs.has(def.name)) {
16
+ throw new Error(`${this.noun} already registered: ${def.name}`);
17
+ }
18
+ this.defs.set(def.name, def);
19
+ if (this.autoAdoptFirst && !this.active)
20
+ this.active = def.name;
21
+ }
22
+ /** Overwrite an existing def (or add a new one) without throwing.
23
+ * Auto-activates when nothing is active yet (mirrors `register`). */
24
+ replace(def) {
25
+ this.defs.set(def.name, def);
26
+ if (this.autoAdoptFirst && !this.active)
27
+ this.active = def.name;
28
+ }
29
+ /**
30
+ * Remove a def. If it was active, the active slot is cleared (callers must
31
+ * `setActive()` rather than getting an arbitrary "next").
32
+ */
33
+ unregister(name) {
34
+ this.defs.delete(name);
35
+ if (this.active === name)
36
+ this.active = null;
37
+ }
38
+ list() {
39
+ return [...this.defs.values()];
40
+ }
41
+ has(name) {
42
+ return this.defs.has(name);
43
+ }
44
+ setActive(name) {
45
+ const def = this.defs.get(name);
46
+ if (!def)
47
+ throw new Error(`${this.noun} not registered: ${name}`);
48
+ this.active = def.name;
49
+ }
50
+ /** Deactivate the current def (callers fall back to their default). */
51
+ clearActive() {
52
+ this.active = null;
53
+ }
54
+ getActive() {
55
+ if (!this.active)
56
+ return null;
57
+ return this.defs.get(this.active) ?? null;
58
+ }
59
+ getActiveName() {
60
+ return this.active;
61
+ }
62
+ }
63
+ //# sourceMappingURL=active-def-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"active-def-registry.js","sourceRoot":"","sources":["../../src/registries/active-def-registry.ts"],"names":[],"mappings":"AA8BA,MAAM,OAAO,iBAAiB;IACX,IAAI,GAAG,IAAI,GAAG,EAAgB,CAAC;IACxC,MAAM,GAAkB,IAAI,CAAC;IACpB,IAAI,CAAS;IACb,cAAc,CAAU;IAEzC,YAAY,IAA8B;QACxC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC;IACpD,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,GAAS;QAChB,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,wBAAwB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC;IAClE,CAAC;IAED;0EACsE;IACtE,OAAO,CAAC,GAAS;QACf,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC;IAClE,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,IAAY;QACrB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;YAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IAC/C,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,SAAS,CAAC,IAAY;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,oBAAoB,IAAI,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC;IACzB,CAAC;IAED,uEAAuE;IACvE,WAAW;QACT,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,SAAS;QACP,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IAC5C,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ import type { AgentDef } from '@moxxy/sdk';
2
+ import { DefMapRegistry } from './def-map-registry.js';
3
+ /**
4
+ * Registry of named subagent kinds contributed by plugins. The
5
+ * `dispatch_agent` tool looks definitions up here by `agentType` and
6
+ * uses them as templates (systemPrompt, allowedTools, mode, …)
7
+ * for the spawned child.
8
+ *
9
+ * A flat name→def map ({@link DefMapRegistry}): register throws on
10
+ * duplicate so two plugins can't silently shadow each other — use
11
+ * `replace()` when you really want to override (e.g. user-config overrides).
12
+ */
13
+ export declare class AgentRegistry extends DefMapRegistry<AgentDef> {
14
+ constructor();
15
+ }
16
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/registries/agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD;;;;;;;;;GASG;AACH,qBAAa,aAAc,SAAQ,cAAc,CAAC,QAAQ,CAAC;;CAI1D"}
@@ -0,0 +1,17 @@
1
+ import { DefMapRegistry } from './def-map-registry.js';
2
+ /**
3
+ * Registry of named subagent kinds contributed by plugins. The
4
+ * `dispatch_agent` tool looks definitions up here by `agentType` and
5
+ * uses them as templates (systemPrompt, allowedTools, mode, …)
6
+ * for the spawned child.
7
+ *
8
+ * A flat name→def map ({@link DefMapRegistry}): register throws on
9
+ * duplicate so two plugins can't silently shadow each other — use
10
+ * `replace()` when you really want to override (e.g. user-config overrides).
11
+ */
12
+ export class AgentRegistry extends DefMapRegistry {
13
+ constructor() {
14
+ super({ noun: 'Agent', keyOf: (def) => def.name });
15
+ }
16
+ }
17
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/registries/agents.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD;;;;;;;;;GASG;AACH,MAAM,OAAO,aAAc,SAAQ,cAAwB;IACzD;QACE,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import type { CacheStrategyDef } from '@moxxy/sdk';
2
+ import { ActiveDefRegistry } from './active-def-registry.js';
3
+ /**
4
+ * One active prompt-caching strategy per session. Register throws on
5
+ * duplicate, auto-activates the first, and `unregister` clears the active
6
+ * slot rather than picking an arbitrary successor. See
7
+ * {@link ActiveDefRegistry}.
8
+ */
9
+ export declare class CacheStrategyRegistry extends ActiveDefRegistry<CacheStrategyDef> {
10
+ constructor();
11
+ }
12
+ //# sourceMappingURL=cache-strategies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-strategies.d.ts","sourceRoot":"","sources":["../../src/registries/cache-strategies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;;GAKG;AACH,qBAAa,qBAAsB,SAAQ,iBAAiB,CAAC,gBAAgB,CAAC;;CAI7E"}
@@ -0,0 +1,13 @@
1
+ import { ActiveDefRegistry } from './active-def-registry.js';
2
+ /**
3
+ * One active prompt-caching strategy per session. Register throws on
4
+ * duplicate, auto-activates the first, and `unregister` clears the active
5
+ * slot rather than picking an arbitrary successor. See
6
+ * {@link ActiveDefRegistry}.
7
+ */
8
+ export class CacheStrategyRegistry extends ActiveDefRegistry {
9
+ constructor() {
10
+ super({ noun: 'Cache strategy' });
11
+ }
12
+ }
13
+ //# sourceMappingURL=cache-strategies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-strategies.js","sourceRoot":"","sources":["../../src/registries/cache-strategies.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;;GAKG;AACH,MAAM,OAAO,qBAAsB,SAAQ,iBAAmC;IAC5E;QACE,KAAK,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACpC,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ import type { ChannelAvailability, ChannelDef, ChannelFactoryDeps, ChannelRegistry } from '@moxxy/sdk';
2
+ import { DefMapRegistry } from './def-map-registry.js';
3
+ /**
4
+ * Flat name→def registry of channels ({@link DefMapRegistry}) plus
5
+ * `listWithAvailability`, which pairs each channel with its current
6
+ * availability (treating channels without an `isAvailable` hook as
7
+ * `{ ok: true }` and mapping a thrown probe to `{ ok: false }`).
8
+ */
9
+ export declare class ChannelRegistryImpl extends DefMapRegistry<ChannelDef> implements ChannelRegistry {
10
+ constructor();
11
+ listWithAvailability(deps: ChannelFactoryDeps): Promise<ReadonlyArray<{
12
+ def: ChannelDef;
13
+ availability: ChannelAvailability;
14
+ }>>;
15
+ }
16
+ //# sourceMappingURL=channels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../src/registries/channels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,UAAU,EACV,kBAAkB,EAClB,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD;;;;;GAKG;AACH,qBAAa,mBAAoB,SAAQ,cAAc,CAAC,UAAU,CAAE,YAAW,eAAe;;IAKtF,oBAAoB,CACxB,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,aAAa,CAAC;QAAE,GAAG,EAAE,UAAU,CAAC;QAAC,YAAY,EAAE,mBAAmB,CAAA;KAAE,CAAC,CAAC;CAoBlF"}
@@ -0,0 +1,35 @@
1
+ import { DefMapRegistry } from './def-map-registry.js';
2
+ /**
3
+ * Flat name→def registry of channels ({@link DefMapRegistry}) plus
4
+ * `listWithAvailability`, which pairs each channel with its current
5
+ * availability (treating channels without an `isAvailable` hook as
6
+ * `{ ok: true }` and mapping a thrown probe to `{ ok: false }`).
7
+ */
8
+ export class ChannelRegistryImpl extends DefMapRegistry {
9
+ constructor() {
10
+ super({ noun: 'Channel', keyOf: (def) => def.name });
11
+ }
12
+ async listWithAvailability(deps) {
13
+ const out = [];
14
+ for (const def of this.defs.values()) {
15
+ let availability;
16
+ if (def.isAvailable) {
17
+ try {
18
+ availability = await def.isAvailable(deps);
19
+ }
20
+ catch (err) {
21
+ availability = {
22
+ ok: false,
23
+ reason: err instanceof Error ? err.message : String(err),
24
+ };
25
+ }
26
+ }
27
+ else {
28
+ availability = { ok: true };
29
+ }
30
+ out.push({ def, availability });
31
+ }
32
+ return out;
33
+ }
34
+ }
35
+ //# sourceMappingURL=channels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channels.js","sourceRoot":"","sources":["../../src/registries/channels.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,OAAO,mBAAoB,SAAQ,cAA0B;IACjE;QACE,KAAK,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,IAAwB;QAExB,MAAM,GAAG,GAAkE,EAAE,CAAC;QAC9E,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACrC,IAAI,YAAiC,CAAC;YACtC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;gBACpB,IAAI,CAAC;oBACH,YAAY,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC7C,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,YAAY,GAAG;wBACb,EAAE,EAAE,KAAK;wBACT,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;qBACzD,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,YAAY,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;YAC9B,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
@@ -0,0 +1,29 @@
1
+ import type { CommandDef } from '@moxxy/sdk';
2
+ /**
3
+ * Registry of `/<name>` slash commands shared across every channel.
4
+ * Plugins contribute via `PluginSpec.commands`; channels read with
5
+ * `list()` / `get()` / `match()` to render their picker and dispatch
6
+ * matching user input.
7
+ *
8
+ * Naming conflicts throw at registration time so two plugins can't
9
+ * silently shadow the same name — use `replace()` for explicit
10
+ * overrides (e.g. user-config tweaks of a built-in).
11
+ */
12
+ export declare class CommandRegistry {
13
+ private readonly commands;
14
+ /** Reverse-lookup table: alias → primary name. */
15
+ private readonly aliases;
16
+ register(cmd: CommandDef): void;
17
+ replace(cmd: CommandDef): void;
18
+ unregister(name: string): void;
19
+ get(name: string): CommandDef | undefined;
20
+ has(name: string): boolean;
21
+ list(): ReadonlyArray<CommandDef>;
22
+ /**
23
+ * Filter to commands visible in `channel`. Commands with no
24
+ * `channels` field are visible everywhere; commands with a list are
25
+ * visible only when `channel` appears in it.
26
+ */
27
+ listForChannel(channel: string): ReadonlyArray<CommandDef>;
28
+ }
29
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/registries/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;;;;;;GASG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiC;IAC1D,kDAAkD;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IAErD,QAAQ,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI;IAgB/B,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI;IAY9B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO9B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAOzC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,IAAI,IAAI,aAAa,CAAC,UAAU,CAAC;IAIjC;;;;OAIG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC;CAK3D"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Registry of `/<name>` slash commands shared across every channel.
3
+ * Plugins contribute via `PluginSpec.commands`; channels read with
4
+ * `list()` / `get()` / `match()` to render their picker and dispatch
5
+ * matching user input.
6
+ *
7
+ * Naming conflicts throw at registration time so two plugins can't
8
+ * silently shadow the same name — use `replace()` for explicit
9
+ * overrides (e.g. user-config tweaks of a built-in).
10
+ */
11
+ export class CommandRegistry {
12
+ commands = new Map();
13
+ /** Reverse-lookup table: alias → primary name. */
14
+ aliases = new Map();
15
+ register(cmd) {
16
+ if (this.commands.has(cmd.name)) {
17
+ throw new Error(`Command already registered: /${cmd.name}`);
18
+ }
19
+ if (this.aliases.has(cmd.name)) {
20
+ throw new Error(`Command name already in use as an alias: /${cmd.name}`);
21
+ }
22
+ this.commands.set(cmd.name, cmd);
23
+ for (const alias of cmd.aliases ?? []) {
24
+ if (this.aliases.has(alias) || this.commands.has(alias)) {
25
+ throw new Error(`Command alias already in use: /${alias}`);
26
+ }
27
+ this.aliases.set(alias, cmd.name);
28
+ }
29
+ }
30
+ replace(cmd) {
31
+ // Clean up any aliases of the prior definition before re-adding.
32
+ const prior = this.commands.get(cmd.name);
33
+ if (prior) {
34
+ for (const alias of prior.aliases ?? [])
35
+ this.aliases.delete(alias);
36
+ }
37
+ this.commands.set(cmd.name, cmd);
38
+ for (const alias of cmd.aliases ?? []) {
39
+ this.aliases.set(alias, cmd.name);
40
+ }
41
+ }
42
+ unregister(name) {
43
+ const cmd = this.commands.get(name);
44
+ if (!cmd)
45
+ return;
46
+ for (const alias of cmd.aliases ?? [])
47
+ this.aliases.delete(alias);
48
+ this.commands.delete(name);
49
+ }
50
+ get(name) {
51
+ const direct = this.commands.get(name);
52
+ if (direct)
53
+ return direct;
54
+ const aliased = this.aliases.get(name);
55
+ return aliased ? this.commands.get(aliased) : undefined;
56
+ }
57
+ has(name) {
58
+ return this.get(name) !== undefined;
59
+ }
60
+ list() {
61
+ return [...this.commands.values()];
62
+ }
63
+ /**
64
+ * Filter to commands visible in `channel`. Commands with no
65
+ * `channels` field are visible everywhere; commands with a list are
66
+ * visible only when `channel` appears in it.
67
+ */
68
+ listForChannel(channel) {
69
+ return this.list().filter((c) => !c.channels || c.channels.includes(channel));
70
+ }
71
+ }
72
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/registries/commands.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,OAAO,eAAe;IACT,QAAQ,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC1D,kDAAkD;IACjC,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAErD,QAAQ,CAAC,GAAe;QACtB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,6CAA6C,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACjC,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,MAAM,IAAI,KAAK,CAAC,kCAAkC,KAAK,EAAE,CAAC,CAAC;YAC7D,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAe;QACrB,iEAAiE;QACjE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE;gBAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACjC,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE;YAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,GAAG,CAAC,IAAY;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvC,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1D,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;IACtC,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,OAAe;QAC5B,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CACvB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CACnD,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import type { CompactorDef } from '@moxxy/sdk';
2
+ import { ActiveDefRegistry } from './active-def-registry.js';
3
+ /**
4
+ * One active compaction strategy per session. Register throws on duplicate
5
+ * (use `replace()` to overwrite) and auto-activates the first registration;
6
+ * `unregister` clears the active slot rather than picking an arbitrary
7
+ * successor. See {@link ActiveDefRegistry}.
8
+ */
9
+ export declare class CompactorRegistry extends ActiveDefRegistry<CompactorDef> {
10
+ constructor();
11
+ }
12
+ //# sourceMappingURL=compactors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compactors.d.ts","sourceRoot":"","sources":["../../src/registries/compactors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;;GAKG;AACH,qBAAa,iBAAkB,SAAQ,iBAAiB,CAAC,YAAY,CAAC;;CAIrE"}
@@ -0,0 +1,13 @@
1
+ import { ActiveDefRegistry } from './active-def-registry.js';
2
+ /**
3
+ * One active compaction strategy per session. Register throws on duplicate
4
+ * (use `replace()` to overwrite) and auto-activates the first registration;
5
+ * `unregister` clears the active slot rather than picking an arbitrary
6
+ * successor. See {@link ActiveDefRegistry}.
7
+ */
8
+ export class CompactorRegistry extends ActiveDefRegistry {
9
+ constructor() {
10
+ super({ noun: 'Compactor' });
11
+ }
12
+ }
13
+ //# sourceMappingURL=compactors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compactors.js","sourceRoot":"","sources":["../../src/registries/compactors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;;GAKG;AACH,MAAM,OAAO,iBAAkB,SAAQ,iBAA+B;IACpE;QACE,KAAK,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IAC/B,CAAC;CACF"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Shared base for the "flat name→def, no active slot" registries (agents,
3
+ * channels, surfaces). A `Map<key, def>` exposing register (throws on
4
+ * duplicate), replace (overwrite), unregister, list, get and has. The three
5
+ * registries differ only in their noun and key field (`name` vs `kind`),
6
+ * supplied via {@link DefMapRegistryOptions}.
7
+ *
8
+ * `ChannelRegistryImpl` extends this and adds `listWithAvailability`;
9
+ * `SurfaceRegistryImpl` keys on `kind` rather than `name`.
10
+ */
11
+ export interface DefMapRegistryOptions<TDef, K> {
12
+ /** Capitalised singular noun for error messages, e.g. `'Agent'`. */
13
+ readonly noun: string;
14
+ /** Extract the map key from a def, e.g. `(d) => d.name` or `(d) => d.kind`. */
15
+ readonly keyOf: (def: TDef) => K;
16
+ }
17
+ export declare class DefMapRegistry<TDef, K = string> {
18
+ protected readonly defs: Map<K, TDef>;
19
+ private readonly noun;
20
+ private readonly keyOf;
21
+ constructor(opts: DefMapRegistryOptions<TDef, K>);
22
+ /**
23
+ * Register a definition. Throws on duplicate so two plugins can't silently
24
+ * shadow each other — use `replace()` when you really want to override.
25
+ */
26
+ register(def: TDef): void;
27
+ replace(def: TDef): void;
28
+ unregister(key: K): void;
29
+ list(): ReadonlyArray<TDef>;
30
+ get(key: K): TDef | undefined;
31
+ has(key: K): boolean;
32
+ }
33
+ //# sourceMappingURL=def-map-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"def-map-registry.d.ts","sourceRoot":"","sources":["../../src/registries/def-map-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,WAAW,qBAAqB,CAAC,IAAI,EAAE,CAAC;IAC5C,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,CAAC;CAClC;AAED,qBAAa,cAAc,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM;IAC1C,SAAS,CAAC,QAAQ,CAAC,IAAI,eAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;gBAE7B,IAAI,EAAE,qBAAqB,CAAC,IAAI,EAAE,CAAC,CAAC;IAKhD;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI;IAQzB,OAAO,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI;IAIxB,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI;IAIxB,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC;IAI3B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS;IAI7B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;CAGrB"}
@@ -0,0 +1,36 @@
1
+ export class DefMapRegistry {
2
+ defs = new Map();
3
+ noun;
4
+ keyOf;
5
+ constructor(opts) {
6
+ this.noun = opts.noun;
7
+ this.keyOf = opts.keyOf;
8
+ }
9
+ /**
10
+ * Register a definition. Throws on duplicate so two plugins can't silently
11
+ * shadow each other — use `replace()` when you really want to override.
12
+ */
13
+ register(def) {
14
+ const key = this.keyOf(def);
15
+ if (this.defs.has(key)) {
16
+ throw new Error(`${this.noun} already registered: ${String(key)}`);
17
+ }
18
+ this.defs.set(key, def);
19
+ }
20
+ replace(def) {
21
+ this.defs.set(this.keyOf(def), def);
22
+ }
23
+ unregister(key) {
24
+ this.defs.delete(key);
25
+ }
26
+ list() {
27
+ return [...this.defs.values()];
28
+ }
29
+ get(key) {
30
+ return this.defs.get(key);
31
+ }
32
+ has(key) {
33
+ return this.defs.has(key);
34
+ }
35
+ }
36
+ //# sourceMappingURL=def-map-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"def-map-registry.js","sourceRoot":"","sources":["../../src/registries/def-map-registry.ts"],"names":[],"mappings":"AAiBA,MAAM,OAAO,cAAc;IACN,IAAI,GAAG,IAAI,GAAG,EAAW,CAAC;IAC5B,IAAI,CAAS;IACb,KAAK,CAAmB;IAEzC,YAAY,IAAoC;QAC9C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,GAAS;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,wBAAwB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,CAAC,GAAS;QACf,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACtC,CAAC;IAED,UAAU,CAAC,GAAM;QACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,GAAG,CAAC,GAAM;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,GAAG,CAAC,GAAM;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ import type { EmbedderDef, EmbeddingProvider } from '@moxxy/sdk';
2
+ import { ActiveBackendRegistry } from './active-backend-registry.js';
3
+ /**
4
+ * Registry of text-embedding backends:
5
+ * - plugins call `register(def)` at load time (via `PluginSpec.embedders`)
6
+ * - the host/CLI calls `setActive(name, config)` once an embedder is chosen
7
+ * - @moxxy/plugin-memory reads `getActive()` / `tryGetActive()` for recall
8
+ *
9
+ * At most one embedder is active at a time, selected explicitly. `createClient`
10
+ * is called lazily on first activation, so a registered-but-unselected embedder
11
+ * (e.g. the heavy transformers one) never instantiates its runtime.
12
+ */
13
+ export declare class EmbedderRegistry extends ActiveBackendRegistry<EmbedderDef, EmbeddingProvider> {
14
+ constructor();
15
+ }
16
+ //# sourceMappingURL=embedders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedders.d.ts","sourceRoot":"","sources":["../../src/registries/embedders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE;;;;;;;;;GASG;AACH,qBAAa,gBAAiB,SAAQ,qBAAqB,CAAC,WAAW,EAAE,iBAAiB,CAAC;;CAI1F"}
@@ -0,0 +1,17 @@
1
+ import { ActiveBackendRegistry } from './active-backend-registry.js';
2
+ /**
3
+ * Registry of text-embedding backends:
4
+ * - plugins call `register(def)` at load time (via `PluginSpec.embedders`)
5
+ * - the host/CLI calls `setActive(name, config)` once an embedder is chosen
6
+ * - @moxxy/plugin-memory reads `getActive()` / `tryGetActive()` for recall
7
+ *
8
+ * At most one embedder is active at a time, selected explicitly. `createClient`
9
+ * is called lazily on first activation, so a registered-but-unselected embedder
10
+ * (e.g. the heavy transformers one) never instantiates its runtime.
11
+ */
12
+ export class EmbedderRegistry extends ActiveBackendRegistry {
13
+ constructor() {
14
+ super({ noun: 'Embedder', build: (def, config) => def.createClient(config) });
15
+ }
16
+ }
17
+ //# sourceMappingURL=embedders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedders.js","sourceRoot":"","sources":["../../src/registries/embedders.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE;;;;;;;;;GASG;AACH,MAAM,OAAO,gBAAiB,SAAQ,qBAAqD;IACzF;QACE,KAAK,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAChF,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ import type { Isolator } from '@moxxy/sdk';
2
+ /**
3
+ * Collection of capability isolators contributed by plugins via
4
+ * `PluginSpec.isolators`. Unlike the single-active registries, this is just the
5
+ * set of AVAILABLE isolators — selection (and ownership of the security
6
+ * boundary) stays with the active security layer (`@moxxy/plugin-security`),
7
+ * which reads these and picks one by `security.isolator` config.
8
+ *
9
+ * A contributed isolator is therefore NEVER auto-activated: registration only
10
+ * makes it available; the user must opt in by name, so a rogue plugin can't
11
+ * silently weaken isolation just by being installed.
12
+ */
13
+ export declare class IsolatorRegistry {
14
+ private readonly impls;
15
+ register(iso: Isolator): void;
16
+ unregister(name: string): void;
17
+ get(name: string): Isolator | undefined;
18
+ has(name: string): boolean;
19
+ list(): ReadonlyArray<Isolator>;
20
+ }
21
+ //# sourceMappingURL=isolators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isolators.d.ts","sourceRoot":"","sources":["../../src/registries/isolators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;;;;;;;GAUG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;IAErD,QAAQ,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI;IAM7B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAIvC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,IAAI,IAAI,aAAa,CAAC,QAAQ,CAAC;CAGhC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Collection of capability isolators contributed by plugins via
3
+ * `PluginSpec.isolators`. Unlike the single-active registries, this is just the
4
+ * set of AVAILABLE isolators — selection (and ownership of the security
5
+ * boundary) stays with the active security layer (`@moxxy/plugin-security`),
6
+ * which reads these and picks one by `security.isolator` config.
7
+ *
8
+ * A contributed isolator is therefore NEVER auto-activated: registration only
9
+ * makes it available; the user must opt in by name, so a rogue plugin can't
10
+ * silently weaken isolation just by being installed.
11
+ */
12
+ export class IsolatorRegistry {
13
+ impls = new Map();
14
+ register(iso) {
15
+ // Overwrite by name: an isolator may arrive via more than one path (a
16
+ // bundled built-in AND a discovered copy). Same name → same role; last wins.
17
+ this.impls.set(iso.name, iso);
18
+ }
19
+ unregister(name) {
20
+ this.impls.delete(name);
21
+ }
22
+ get(name) {
23
+ return this.impls.get(name);
24
+ }
25
+ has(name) {
26
+ return this.impls.has(name);
27
+ }
28
+ list() {
29
+ return [...this.impls.values()];
30
+ }
31
+ }
32
+ //# sourceMappingURL=isolators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isolators.js","sourceRoot":"","sources":["../../src/registries/isolators.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,MAAM,OAAO,gBAAgB;IACV,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAC;IAErD,QAAQ,CAAC,GAAa;QACpB,sEAAsE;QACtE,6EAA6E;QAC7E,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAClC,CAAC;CACF"}
@@ -0,0 +1,28 @@
1
+ import { type ModeDef } from '@moxxy/sdk';
2
+ export declare class ModeRegistry {
3
+ private readonly modes;
4
+ private active;
5
+ private readonly changeListeners;
6
+ /** Observe active-mode changes — used by the runner to broadcast
7
+ * InfoChanged so remote clients track a mode switch (whether it came from
8
+ * a `setMode` RPC or a mode handing off to another mode mid-session). */
9
+ onActiveChange(fn: () => void): () => void;
10
+ /**
11
+ * Register a mode. Throws on duplicate — use `replace()` for
12
+ * overwrite. Auto-activates on first registration (modes need a default
13
+ * for any session to work).
14
+ */
15
+ register(mode: ModeDef): void;
16
+ replace(mode: ModeDef): void;
17
+ /**
18
+ * Remove a mode. If it was active, the active slot is cleared —
19
+ * callers must `setActive()` explicitly rather than silently picking
20
+ * some arbitrary "next" mode.
21
+ */
22
+ unregister(name: string): void;
23
+ list(): ReadonlyArray<ModeDef>;
24
+ setActive(name: string): void;
25
+ getActive(): ModeDef;
26
+ private activate;
27
+ }
28
+ //# sourceMappingURL=modes.d.ts.map