@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 @@
1
+ {"version":3,"file":"package-requirements.js","sourceRoot":"","sources":["../../src/plugins/package-requirements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAyB,MAAM,YAAY,CAAC;AAEvE;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,WAAmB,EACnB,OAAe;IAEf,MAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC7D,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAC5B,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,UAAmB,CAAC;IACxB,IAAI,CAAC;QACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,UAAU,GAAI,UAAkC,CAAC,KAAK,CAAC;IAC7D,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACxD,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAC/B,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,kBAAkB,CAAC,WAAmB,EAAE,OAAe;IAC9D,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAClE,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,WAAW,eAAe,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,58 @@
1
+ import type { Plugin } from '@moxxy/sdk';
2
+ import type { PluginHostOptions } from './host-options.js';
3
+ /**
4
+ * The per-registry record of the names a loaded plugin contributed. Keyed by
5
+ * the {@link LoadedRecord} field each kind writes to. PluginHost stores one
6
+ * `LoadedRecord` per loaded plugin so `unload` knows exactly which names to
7
+ * unregister from each registry.
8
+ */
9
+ export interface RegistryNameRecord {
10
+ readonly toolNames: ReadonlyArray<string>;
11
+ readonly providerNames: ReadonlyArray<string>;
12
+ readonly modeNames: ReadonlyArray<string>;
13
+ readonly compactorNames: ReadonlyArray<string>;
14
+ readonly cacheStrategyNames: ReadonlyArray<string>;
15
+ readonly viewRendererNames: ReadonlyArray<string>;
16
+ readonly tunnelProviderNames: ReadonlyArray<string>;
17
+ readonly channelNames: ReadonlyArray<string>;
18
+ readonly surfaceNames: ReadonlyArray<string>;
19
+ readonly agentNames: ReadonlyArray<string>;
20
+ readonly commandNames: ReadonlyArray<string>;
21
+ readonly transcriberNames: ReadonlyArray<string>;
22
+ readonly synthesizerNames: ReadonlyArray<string>;
23
+ readonly embedderNames: ReadonlyArray<string>;
24
+ readonly isolatorNames: ReadonlyArray<string>;
25
+ readonly workflowExecutorNames: ReadonlyArray<string>;
26
+ }
27
+ /**
28
+ * A single contribution kind, mapping a plugin field + registry to the
29
+ * register / unregister / name-extraction operations PluginHost performs for
30
+ * it. Driving register and unregister from this one table keeps the two sides
31
+ * in lockstep — adding a registry kind is one entry, not edits to two parallel
32
+ * 16-line lists.
33
+ *
34
+ * `TDef` is the contribution def type for this kind. The table is declared with
35
+ * heterogeneous defs, so it is widened to `RegistryKind<any>` for iteration;
36
+ * each entry's closures stay individually type-checked against their own def.
37
+ */
38
+ export interface RegistryKind<TDef> {
39
+ /** Stable identifier for the kind (used by tests/diagnostics). */
40
+ readonly kind: string;
41
+ /** {@link RegistryNameRecord} field this kind writes its names to. */
42
+ readonly recordField: keyof RegistryNameRecord;
43
+ /** The defs this plugin contributes for this kind. */
44
+ readonly defs: (plugin: Plugin) => ReadonlyArray<TDef>;
45
+ /** Extract the registry key from a def (mostly `.name`; surfaces use `.kind`). */
46
+ readonly nameOf: (def: TDef) => string;
47
+ /** Register a single def into its registry (uses `register` or `replace`). */
48
+ readonly register: (opts: PluginHostOptions, def: TDef) => void;
49
+ /** Remove a previously-registered name from its registry. */
50
+ readonly unregister: (opts: PluginHostOptions, name: string) => void;
51
+ }
52
+ /**
53
+ * The authoritative ordered list of contribution kinds. The ORDER here is the
54
+ * exact register order `applyPlugin` used and the exact unregister order
55
+ * `unload` used; preserve it when editing.
56
+ */
57
+ export declare const REGISTRY_KINDS: ReadonlyArray<RegistryKind<unknown>>;
58
+ //# sourceMappingURL=registry-kinds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-kinds.d.ts","sourceRoot":"","sources":["../../src/plugins/registry-kinds.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAOV,MAAM,EAWP,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,cAAc,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/C,QAAQ,CAAC,kBAAkB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACnD,QAAQ,CAAC,iBAAiB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAClD,QAAQ,CAAC,mBAAmB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACpD,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC3C,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,gBAAgB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,gBAAgB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,qBAAqB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACvD;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,YAAY,CAAC,IAAI;IAChC,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,QAAQ,CAAC,WAAW,EAAE,MAAM,kBAAkB,CAAC;IAC/C,sDAAsD;IACtD,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,aAAa,CAAC,IAAI,CAAC,CAAC;IACvD,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,MAAM,CAAC;IACvC,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,IAAI,KAAK,IAAI,CAAC;IAChE,6DAA6D;IAC7D,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACtE;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,CAoIvB,CAAC"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * The authoritative ordered list of contribution kinds. The ORDER here is the
3
+ * exact register order `applyPlugin` used and the exact unregister order
4
+ * `unload` used; preserve it when editing.
5
+ */
6
+ export const REGISTRY_KINDS = [
7
+ {
8
+ kind: 'tool',
9
+ recordField: 'toolNames',
10
+ defs: (p) => p.tools ?? [],
11
+ nameOf: (t) => t.name,
12
+ register: (o, t) => o.tools.register(t),
13
+ unregister: (o, n) => o.tools.unregister(n),
14
+ },
15
+ {
16
+ kind: 'provider',
17
+ recordField: 'providerNames',
18
+ defs: (p) => p.providers ?? [],
19
+ nameOf: (d) => d.name,
20
+ register: (o, d) => o.providers.register(d),
21
+ unregister: (o, n) => o.providers.unregister(n),
22
+ },
23
+ {
24
+ kind: 'mode',
25
+ recordField: 'modeNames',
26
+ defs: (p) => p.modes ?? [],
27
+ nameOf: (m) => m.name,
28
+ register: (o, m) => o.modes.register(m),
29
+ unregister: (o, n) => o.modes.unregister(n),
30
+ },
31
+ {
32
+ kind: 'compactor',
33
+ recordField: 'compactorNames',
34
+ defs: (p) => p.compactors ?? [],
35
+ nameOf: (c) => c.name,
36
+ register: (o, c) => o.compactors.register(c),
37
+ unregister: (o, n) => o.compactors.unregister(n),
38
+ },
39
+ {
40
+ kind: 'cacheStrategy',
41
+ recordField: 'cacheStrategyNames',
42
+ defs: (p) => p.cacheStrategies ?? [],
43
+ nameOf: (c) => c.name,
44
+ register: (o, c) => o.cacheStrategies.register(c),
45
+ unregister: (o, n) => o.cacheStrategies.unregister(n),
46
+ },
47
+ {
48
+ kind: 'viewRenderer',
49
+ recordField: 'viewRendererNames',
50
+ defs: (p) => p.viewRenderers ?? [],
51
+ nameOf: (v) => v.name,
52
+ // viewRenderers use `replace` (override-allowed) on the register side.
53
+ register: (o, v) => o.viewRenderers.replace(v),
54
+ unregister: (o, n) => o.viewRenderers.unregister(n),
55
+ },
56
+ {
57
+ kind: 'tunnelProvider',
58
+ recordField: 'tunnelProviderNames',
59
+ defs: (p) => p.tunnelProviders ?? [],
60
+ nameOf: (t) => t.name,
61
+ // tunnelProviders use `replace` (override-allowed) on the register side.
62
+ register: (o, t) => o.tunnelProviders.replace(t),
63
+ unregister: (o, n) => o.tunnelProviders.unregister(n),
64
+ },
65
+ {
66
+ kind: 'channel',
67
+ recordField: 'channelNames',
68
+ defs: (p) => p.channels ?? [],
69
+ nameOf: (c) => c.name,
70
+ register: (o, c) => o.channels.register(c),
71
+ unregister: (o, n) => o.channels.unregister(n),
72
+ },
73
+ {
74
+ kind: 'surface',
75
+ recordField: 'surfaceNames',
76
+ defs: (p) => p.surfaces ?? [],
77
+ // surfaces are keyed by `.kind`, not `.name`.
78
+ nameOf: (s) => s.kind,
79
+ register: (o, s) => o.surfaces.register(s),
80
+ unregister: (o, n) => o.surfaces.unregister(n),
81
+ },
82
+ {
83
+ kind: 'agent',
84
+ recordField: 'agentNames',
85
+ defs: (p) => p.agents ?? [],
86
+ nameOf: (a) => a.name,
87
+ register: (o, a) => o.agents.register(a),
88
+ unregister: (o, n) => o.agents.unregister(n),
89
+ },
90
+ {
91
+ kind: 'command',
92
+ recordField: 'commandNames',
93
+ defs: (p) => p.commands ?? [],
94
+ nameOf: (c) => c.name,
95
+ register: (o, c) => o.commands.register(c),
96
+ unregister: (o, n) => o.commands.unregister(n),
97
+ },
98
+ {
99
+ kind: 'transcriber',
100
+ recordField: 'transcriberNames',
101
+ defs: (p) => p.transcribers ?? [],
102
+ nameOf: (t) => t.name,
103
+ register: (o, t) => o.transcribers.register(t),
104
+ unregister: (o, n) => o.transcribers.unregister(n),
105
+ },
106
+ {
107
+ kind: 'synthesizer',
108
+ recordField: 'synthesizerNames',
109
+ defs: (p) => p.synthesizers ?? [],
110
+ nameOf: (s) => s.name,
111
+ register: (o, s) => o.synthesizers.register(s),
112
+ unregister: (o, n) => o.synthesizers.unregister(n),
113
+ },
114
+ {
115
+ kind: 'embedder',
116
+ recordField: 'embedderNames',
117
+ defs: (p) => p.embedders ?? [],
118
+ nameOf: (e) => e.name,
119
+ register: (o, e) => o.embedders.register(e),
120
+ unregister: (o, n) => o.embedders.unregister(n),
121
+ },
122
+ {
123
+ kind: 'isolator',
124
+ recordField: 'isolatorNames',
125
+ defs: (p) => p.isolators ?? [],
126
+ nameOf: (i) => i.name,
127
+ register: (o, i) => o.isolators.register(i),
128
+ unregister: (o, n) => o.isolators.unregister(n),
129
+ },
130
+ {
131
+ kind: 'workflowExecutor',
132
+ recordField: 'workflowExecutorNames',
133
+ defs: (p) => p.workflowExecutors ?? [],
134
+ nameOf: (w) => w.name,
135
+ register: (o, w) => o.workflowExecutors.register(w),
136
+ unregister: (o, n) => o.workflowExecutors.unregister(n),
137
+ },
138
+ ];
139
+ //# sourceMappingURL=registry-kinds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-kinds.js","sourceRoot":"","sources":["../../src/plugins/registry-kinds.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { ResolvedPluginManifest } from '@moxxy/sdk';
2
+ /**
3
+ * Topological sort of discovered plugin manifests by their static
4
+ * `requirements` (from `package.json#moxxy.requirements`). Only
5
+ * `kind: 'plugin'` requirements participate; everything else (runtime,
6
+ * provider-state, etc.) is irrelevant to load order.
7
+ *
8
+ * Behavior:
9
+ * - A manifest whose required plugin name doesn't appear in `manifests`
10
+ * is left in place — the readiness check in PluginHost will reject it
11
+ * later. Toposort doesn't pre-judge.
12
+ * - Optional requirements (`optional: true`) are treated as soft edges:
13
+ * if the target is present we order around it; if not, we skip the
14
+ * edge silently.
15
+ * - Cycles throw `PluginCycleError` with the participating plugin names
16
+ * so the caller can surface a useful diagnostic instead of silently
17
+ * loading in an arbitrary order.
18
+ */
19
+ export declare class PluginCycleError extends Error {
20
+ readonly cycle: ReadonlyArray<string>;
21
+ constructor(cycle: ReadonlyArray<string>);
22
+ }
23
+ export declare function toposortPluginManifests(manifests: ReadonlyArray<ResolvedPluginManifest>): ReadonlyArray<ResolvedPluginManifest>;
24
+ //# sourceMappingURL=toposort.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toposort.d.ts","sourceRoot":"","sources":["../../src/plugins/toposort.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAE3E;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IAC7B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC;gBAA5B,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC;CAIlD;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,aAAa,CAAC,sBAAsB,CAAC,GAC/C,aAAa,CAAC,sBAAsB,CAAC,CA6BvC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Topological sort of discovered plugin manifests by their static
3
+ * `requirements` (from `package.json#moxxy.requirements`). Only
4
+ * `kind: 'plugin'` requirements participate; everything else (runtime,
5
+ * provider-state, etc.) is irrelevant to load order.
6
+ *
7
+ * Behavior:
8
+ * - A manifest whose required plugin name doesn't appear in `manifests`
9
+ * is left in place — the readiness check in PluginHost will reject it
10
+ * later. Toposort doesn't pre-judge.
11
+ * - Optional requirements (`optional: true`) are treated as soft edges:
12
+ * if the target is present we order around it; if not, we skip the
13
+ * edge silently.
14
+ * - Cycles throw `PluginCycleError` with the participating plugin names
15
+ * so the caller can surface a useful diagnostic instead of silently
16
+ * loading in an arbitrary order.
17
+ */
18
+ export class PluginCycleError extends Error {
19
+ cycle;
20
+ constructor(cycle) {
21
+ super(`Plugin requirement cycle detected: ${cycle.join(' -> ')}`);
22
+ this.cycle = cycle;
23
+ this.name = 'PluginCycleError';
24
+ }
25
+ }
26
+ export function toposortPluginManifests(manifests) {
27
+ const byPackage = new Map();
28
+ for (const m of manifests)
29
+ byPackage.set(m.packageName, m);
30
+ const order = [];
31
+ const visited = new Set();
32
+ const onStack = new Set();
33
+ const stack = [];
34
+ const visit = (name) => {
35
+ if (visited.has(name))
36
+ return;
37
+ if (onStack.has(name)) {
38
+ const startIdx = stack.indexOf(name);
39
+ throw new PluginCycleError(stack.slice(startIdx).concat(name));
40
+ }
41
+ const manifest = byPackage.get(name);
42
+ if (!manifest)
43
+ return; // unknown dep — leave for readiness gate
44
+ onStack.add(name);
45
+ stack.push(name);
46
+ for (const dep of pluginDeps(manifest.requirements))
47
+ visit(dep);
48
+ onStack.delete(name);
49
+ stack.pop();
50
+ visited.add(name);
51
+ order.push(manifest);
52
+ };
53
+ for (const m of manifests)
54
+ visit(m.packageName);
55
+ return order;
56
+ }
57
+ function pluginDeps(requirements) {
58
+ if (!requirements)
59
+ return [];
60
+ const out = [];
61
+ for (const req of requirements) {
62
+ if (req.kind === 'plugin')
63
+ out.push(req.name);
64
+ }
65
+ return out;
66
+ }
67
+ //# sourceMappingURL=toposort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toposort.js","sourceRoot":"","sources":["../../src/plugins/toposort.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACpB;IAArB,YAAqB,KAA4B;QAC/C,KAAK,CAAC,sCAAsC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAD/C,UAAK,GAAL,KAAK,CAAuB;QAE/C,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,MAAM,UAAU,uBAAuB,CACrC,SAAgD;IAEhD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkC,CAAC;IAC5D,KAAK,MAAM,CAAC,IAAI,SAAS;QAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAE3D,MAAM,KAAK,GAA6B,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,MAAM,KAAK,GAAG,CAAC,IAAY,EAAQ,EAAE;QACnC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO;QAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,IAAI,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,yCAAyC;QAEhE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QAChE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrB,KAAK,CAAC,GAAG,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,SAAS;QAAE,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAChD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CACjB,YAAyD;IAEzD,IAAI,CAAC,YAAY;QAAE,OAAO,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * User-level runtime preferences persisted at ~/.moxxy/preferences.json.
3
+ * Distinct from `~/.moxxy/config.yaml` (user-edited, source of truth for
4
+ * provider/plugin wiring) — this file is mutated by the TUI as the user
5
+ * picks a model / loop strategy via slash commands, so it survives across
6
+ * CLI invocations. A missing file or unreadable contents is a no-op:
7
+ * preferences are best-effort, never load-blocking.
8
+ */
9
+ export interface MoxxyPreferences {
10
+ /** Active provider name (e.g. "openai", "anthropic"). */
11
+ readonly providerName?: string;
12
+ /** Active model id under that provider (e.g. "gpt-5.4-mini"). */
13
+ readonly model?: string;
14
+ /** Active loop strategy name (e.g. "default", "research", "goal"). */
15
+ readonly mode?: string;
16
+ /**
17
+ * Providers the user disabled (desktop Settings → Providers toggle).
18
+ * Seeded into the ProviderRegistry at boot; a listed provider stays
19
+ * registered but can't be activated until re-enabled.
20
+ */
21
+ readonly disabledProviders?: ReadonlyArray<string>;
22
+ }
23
+ export declare function preferencesPath(): string;
24
+ /**
25
+ * Read preferences from disk. Returns an empty object when the file
26
+ * doesn't exist or fails to parse — preferences are an optional layer,
27
+ * never a hard dependency of session bootstrap.
28
+ */
29
+ export declare function loadPreferences(): Promise<MoxxyPreferences>;
30
+ /**
31
+ * Merge-and-write preferences. Reads the current file (if any), merges
32
+ * the patch on top so we don't blow away unrelated fields, and writes
33
+ * the result back atomically. The whole read-merge-write runs inside a
34
+ * module-level mutex so overlapping saves serialize (invariant #5) and
35
+ * never lose an update. Best-effort: a write failure logs to stderr but
36
+ * does not throw — the user's pick still takes effect in this session,
37
+ * just won't persist across invocations.
38
+ */
39
+ export declare function savePreferences(patch: Partial<MoxxyPreferences>): Promise<void>;
40
+ //# sourceMappingURL=preferences.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preferences.d.ts","sourceRoot":"","sources":["../src/preferences.ts"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,iEAAiE;IACjE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACpD;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;;;GAIG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAYjE;AAUD;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAcrF"}
@@ -0,0 +1,58 @@
1
+ import { promises as fs } from 'node:fs';
2
+ import * as os from 'node:os';
3
+ import * as path from 'node:path';
4
+ import { createMutex, migrateModeName } from '@moxxy/sdk';
5
+ import { writeFileAtomic } from '@moxxy/sdk/server';
6
+ export function preferencesPath() {
7
+ return path.join(os.homedir(), '.moxxy', 'preferences.json');
8
+ }
9
+ /**
10
+ * Read preferences from disk. Returns an empty object when the file
11
+ * doesn't exist or fails to parse — preferences are an optional layer,
12
+ * never a hard dependency of session bootstrap.
13
+ */
14
+ export async function loadPreferences() {
15
+ try {
16
+ const raw = await fs.readFile(preferencesPath(), 'utf8');
17
+ const parsed = JSON.parse(raw);
18
+ if (parsed && typeof parsed === 'object') {
19
+ const prefs = parsed;
20
+ return prefs.mode ? { ...prefs, mode: migrateModeName(prefs.mode) } : prefs;
21
+ }
22
+ return {};
23
+ }
24
+ catch {
25
+ return {};
26
+ }
27
+ }
28
+ // Serializes the read-modify-write in `savePreferences` so two concurrent
29
+ // saves (e.g. a /model pick and a provider-disable toggle firing close
30
+ // together) can't both read the same snapshot and have the second write
31
+ // clobber the first's field. This is the single write path for the file —
32
+ // other packages (CLI, runner, channels) route their fire-and-forget saves
33
+ // through it, and any load-modify-save must go through it too.
34
+ const writeMutex = createMutex();
35
+ /**
36
+ * Merge-and-write preferences. Reads the current file (if any), merges
37
+ * the patch on top so we don't blow away unrelated fields, and writes
38
+ * the result back atomically. The whole read-merge-write runs inside a
39
+ * module-level mutex so overlapping saves serialize (invariant #5) and
40
+ * never lose an update. Best-effort: a write failure logs to stderr but
41
+ * does not throw — the user's pick still takes effect in this session,
42
+ * just won't persist across invocations.
43
+ */
44
+ export async function savePreferences(patch) {
45
+ return writeMutex.run(async () => {
46
+ const current = await loadPreferences();
47
+ const next = { ...current, ...patch };
48
+ const target = preferencesPath();
49
+ try {
50
+ await writeFileAtomic(target, JSON.stringify(next, null, 2) + '\n');
51
+ }
52
+ catch (err) {
53
+ process.stderr.write(`moxxy: failed to persist preferences to ${target}: ` +
54
+ `${err instanceof Error ? err.message : String(err)}\n`);
55
+ }
56
+ });
57
+ }
58
+ //# sourceMappingURL=preferences.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preferences.js","sourceRoot":"","sources":["../src/preferences.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAyBpD,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC;AAC/D,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,MAAM,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QAC1C,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,MAA0B,CAAC;YACzC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAC9E,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,0EAA0E;AAC1E,uEAAuE;AACvE,wEAAwE;AACxE,0EAA0E;AAC1E,2EAA2E;AAC3E,+DAA+D;AAC/D,MAAM,UAAU,GAAG,WAAW,EAAE,CAAC;AAEjC;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAgC;IACpE,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QAC/B,MAAM,OAAO,GAAG,MAAM,eAAe,EAAE,CAAC;QACxC,MAAM,IAAI,GAAqB,EAAE,GAAG,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,2CAA2C,MAAM,IAAI;gBACnD,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAC1D,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Shared base for the "single active backend" registries (speech-to-text,
3
+ * text-to-speech, embeddings). Each one is a Map of named defs with at most one
4
+ * *active* at a time:
5
+ * - plugins call `register(def)` at load time
6
+ * - the host / CLI / agent calls `setActive(name, config)` to pick one
7
+ * - call sites read `getActive()` / `tryGetActive()` to use it (degrading
8
+ * gracefully when none is active)
9
+ *
10
+ * The three concrete registries differ only along a few axes, expressed via
11
+ * {@link BackendRegistryOptions}:
12
+ * - how a def becomes an instance (`build`) — `createClient(config)` for
13
+ * STT/embeddings, `create({ config, getSecret })` for TTS
14
+ * - whether the first registered def auto-becomes active (`autoAdoptFirst`,
15
+ * TTS only — STT/embeddings require an explicit `setActive`)
16
+ * - whether the active instance is (re)built lazily on read (`buildOnRead`,
17
+ * TTS only — needed because `autoAdoptFirst` can set `active` without ever
18
+ * building an instance; it also makes `setActive` rebuild when handed a
19
+ * fresh config)
20
+ *
21
+ * `ProviderRegistry` deliberately stays separate: it is the core LLM path and
22
+ * carries its own ready-state semantics.
23
+ */
24
+ export interface BackendRegistryOptions<TDef extends {
25
+ name: string;
26
+ }, TInstance> {
27
+ /** Capitalised singular noun for error messages, e.g. `'Synthesizer'`. */
28
+ readonly noun: string;
29
+ /** Turn a def + (possibly empty) config into a runtime instance. */
30
+ readonly build: (def: TDef, config: Record<string, unknown>) => TInstance;
31
+ /** Adopt the first registered def as active when nothing is active yet. */
32
+ readonly autoAdoptFirst?: boolean;
33
+ /** (Re)build the active instance lazily on read rather than requiring it to
34
+ * have been built at `setActive` time. Also makes `setActive` rebuild when a
35
+ * config is supplied. Pair with {@link autoAdoptFirst}. */
36
+ readonly buildOnRead?: boolean;
37
+ }
38
+ export declare class ActiveBackendRegistry<TDef extends {
39
+ name: string;
40
+ }, TInstance> {
41
+ private readonly opts;
42
+ private readonly defs;
43
+ private readonly instances;
44
+ private active;
45
+ constructor(opts: BackendRegistryOptions<TDef, TInstance>);
46
+ register(def: TDef, instance?: TInstance): void;
47
+ /** Overwrite an existing def, dropping the cached instance so the next build
48
+ * uses the new def. */
49
+ replace(def: TDef, instance?: TInstance): void;
50
+ unregister(name: string): void;
51
+ list(): ReadonlyArray<TDef>;
52
+ has(name: string): boolean;
53
+ setActive(name: string, config?: Record<string, unknown>): TInstance;
54
+ /** Deactivate the current backend (callers fall back to their default). */
55
+ clearActive(): void;
56
+ getActive(): TInstance;
57
+ /** Active backend, or null when none is configured. Lets call sites degrade
58
+ * gracefully (keyword recall, the OS voice, "no transcriber configured"). */
59
+ tryGetActive(): TInstance | null;
60
+ getActiveName(): string | null;
61
+ /** Cached instance for `name`, building it from its def on first use. */
62
+ private instantiate;
63
+ private buildInstance;
64
+ }
65
+ //# sourceMappingURL=active-backend-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"active-backend-registry.d.ts","sourceRoot":"","sources":["../../src/registries/active-backend-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,WAAW,sBAAsB,CAAC,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,SAAS;IAC9E,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,SAAS,CAAC;IAC1E,2EAA2E;IAC3E,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC;;gEAE4D;IAC5D,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,qBAAa,qBAAqB,CAAC,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,SAAS;IAK7D,OAAO,CAAC,QAAQ,CAAC,IAAI;IAJjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA2B;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgC;IAC1D,OAAO,CAAC,MAAM,CAAuB;gBAER,IAAI,EAAE,sBAAsB,CAAC,IAAI,EAAE,SAAS,CAAC;IAE1E,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,SAAS,GAAG,IAAI;IAS/C;4BACwB;IACxB,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,SAAS,GAAG,IAAI;IAM9C,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM9B,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC;IAI3B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;IAmBpE,2EAA2E;IAC3E,WAAW,IAAI,IAAI;IAInB,SAAS,IAAI,SAAS;IAUtB;kFAC8E;IAC9E,YAAY,IAAI,SAAS,GAAG,IAAI;IAYhC,aAAa,IAAI,MAAM,GAAG,IAAI;IAI9B,yEAAyE;IACzE,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,aAAa;CAKtB"}
@@ -0,0 +1,108 @@
1
+ export class ActiveBackendRegistry {
2
+ opts;
3
+ defs = new Map();
4
+ instances = new Map();
5
+ active = null;
6
+ constructor(opts) {
7
+ this.opts = opts;
8
+ }
9
+ register(def, instance) {
10
+ if (this.defs.has(def.name)) {
11
+ throw new Error(`${this.opts.noun} already registered: ${def.name}`);
12
+ }
13
+ this.defs.set(def.name, def);
14
+ if (instance)
15
+ this.instances.set(def.name, instance);
16
+ if (this.opts.autoAdoptFirst && this.active === null)
17
+ this.active = def.name;
18
+ }
19
+ /** Overwrite an existing def, dropping the cached instance so the next build
20
+ * uses the new def. */
21
+ replace(def, instance) {
22
+ this.defs.set(def.name, def);
23
+ this.instances.delete(def.name);
24
+ if (instance)
25
+ this.instances.set(def.name, instance);
26
+ }
27
+ unregister(name) {
28
+ this.defs.delete(name);
29
+ this.instances.delete(name);
30
+ if (this.active === name)
31
+ this.active = null;
32
+ }
33
+ list() {
34
+ return [...this.defs.values()];
35
+ }
36
+ has(name) {
37
+ return this.defs.has(name);
38
+ }
39
+ setActive(name, config) {
40
+ if (!this.defs.has(name))
41
+ throw new Error(`${this.opts.noun} not registered: ${name}`);
42
+ if (this.opts.buildOnRead) {
43
+ // Supplying a config (re)builds with it; otherwise reuse / lazily build.
44
+ if (config)
45
+ this.instances.set(name, this.buildInstance(name, config));
46
+ this.active = name;
47
+ return this.instantiate(name);
48
+ }
49
+ // Build once, on first activation; later activations reuse the cache and
50
+ // ignore `config`.
51
+ let instance = this.instances.get(name);
52
+ if (!instance) {
53
+ instance = this.buildInstance(name, config);
54
+ this.instances.set(name, instance);
55
+ }
56
+ this.active = name;
57
+ return instance;
58
+ }
59
+ /** Deactivate the current backend (callers fall back to their default). */
60
+ clearActive() {
61
+ this.active = null;
62
+ }
63
+ getActive() {
64
+ if (!this.active) {
65
+ throw new Error(`No active ${this.opts.noun.toLowerCase()}. Call setActive(name) first.`);
66
+ }
67
+ if (this.opts.buildOnRead)
68
+ return this.instantiate(this.active);
69
+ const inst = this.instances.get(this.active);
70
+ if (!inst)
71
+ throw new Error(`Active ${this.opts.noun.toLowerCase()} has no instance: ${this.active}`);
72
+ return inst;
73
+ }
74
+ /** Active backend, or null when none is configured. Lets call sites degrade
75
+ * gracefully (keyword recall, the OS voice, "no transcriber configured"). */
76
+ tryGetActive() {
77
+ if (!this.active)
78
+ return null;
79
+ if (this.opts.buildOnRead) {
80
+ try {
81
+ return this.instantiate(this.active);
82
+ }
83
+ catch {
84
+ return null;
85
+ }
86
+ }
87
+ return this.instances.get(this.active) ?? null;
88
+ }
89
+ getActiveName() {
90
+ return this.active;
91
+ }
92
+ /** Cached instance for `name`, building it from its def on first use. */
93
+ instantiate(name) {
94
+ let inst = this.instances.get(name);
95
+ if (!inst) {
96
+ inst = this.buildInstance(name);
97
+ this.instances.set(name, inst);
98
+ }
99
+ return inst;
100
+ }
101
+ buildInstance(name, config) {
102
+ const def = this.defs.get(name);
103
+ if (!def)
104
+ throw new Error(`${this.opts.noun} not registered: ${name}`);
105
+ return this.opts.build(def, config ?? {});
106
+ }
107
+ }
108
+ //# sourceMappingURL=active-backend-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"active-backend-registry.js","sourceRoot":"","sources":["../../src/registries/active-backend-registry.ts"],"names":[],"mappings":"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"}