@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":"transcribers.d.ts","sourceRoot":"","sources":["../../src/registries/transcribers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE;;;;;;;;;;GAUG;AACH,qBAAa,mBAAoB,SAAQ,qBAAqB,CAAC,cAAc,EAAE,WAAW,CAAC;;CAI1F"}
@@ -0,0 +1,18 @@
1
+ import { ActiveBackendRegistry } from './active-backend-registry.js';
2
+ /**
3
+ * Registry of speech-to-text backends:
4
+ * - plugins call `register(def)` at load time
5
+ * - the host/CLI calls `setActive(name, config)` once a backend is chosen
6
+ * - channels with audio input read `getActive()` to transcribe bytes
7
+ *
8
+ * At most one transcriber is *active* at a time, selected explicitly (no
9
+ * auto-adopt). `getActive()` throws when none is active, so call sites can
10
+ * degrade gracefully (e.g. Telegram falls back to "you sent a voice note but no
11
+ * transcriber is configured").
12
+ */
13
+ export class TranscriberRegistry extends ActiveBackendRegistry {
14
+ constructor() {
15
+ super({ noun: 'Transcriber', build: (def, config) => def.createClient(config) });
16
+ }
17
+ }
18
+ //# sourceMappingURL=transcribers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcribers.js","sourceRoot":"","sources":["../../src/registries/transcribers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE;;;;;;;;;;GAUG;AACH,MAAM,OAAO,mBAAoB,SAAQ,qBAAkD;IACzF;QACE,KAAK,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnF,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import type { TunnelProviderDef } from '@moxxy/sdk';
2
+ import { ActiveDefRegistry } from './active-def-registry.js';
3
+ /**
4
+ * One active tunnel provider per session. Register throws on duplicate,
5
+ * auto-activates the first, and `unregister` clears the active slot. Core
6
+ * seeds the `localhost` provider so `getActive()` is non-null even when no
7
+ * tunnel plugin is installed. See {@link ActiveDefRegistry}.
8
+ */
9
+ export declare class TunnelProviderRegistry extends ActiveDefRegistry<TunnelProviderDef> {
10
+ constructor();
11
+ }
12
+ //# sourceMappingURL=tunnel-providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel-providers.d.ts","sourceRoot":"","sources":["../../src/registries/tunnel-providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;;GAKG;AACH,qBAAa,sBAAuB,SAAQ,iBAAiB,CAAC,iBAAiB,CAAC;;CAI/E"}
@@ -0,0 +1,13 @@
1
+ import { ActiveDefRegistry } from './active-def-registry.js';
2
+ /**
3
+ * One active tunnel provider per session. Register throws on duplicate,
4
+ * auto-activates the first, and `unregister` clears the active slot. Core
5
+ * seeds the `localhost` provider so `getActive()` is non-null even when no
6
+ * tunnel plugin is installed. See {@link ActiveDefRegistry}.
7
+ */
8
+ export class TunnelProviderRegistry extends ActiveDefRegistry {
9
+ constructor() {
10
+ super({ noun: 'Tunnel provider' });
11
+ }
12
+ }
13
+ //# sourceMappingURL=tunnel-providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel-providers.js","sourceRoot":"","sources":["../../src/registries/tunnel-providers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;;GAKG;AACH,MAAM,OAAO,sBAAuB,SAAQ,iBAAoC;IAC9E;QACE,KAAK,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;IACrC,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import type { ViewRendererDef } from '@moxxy/sdk';
2
+ import { ActiveDefRegistry } from './active-def-registry.js';
3
+ /**
4
+ * One active view-spec renderer per session. Register throws on duplicate,
5
+ * auto-activates the first, and `unregister` clears the active slot rather
6
+ * than picking an arbitrary successor. Core seeds a default renderer so
7
+ * `getActive()` is non-null even with no plugins. See
8
+ * {@link ActiveDefRegistry}.
9
+ */
10
+ export declare class ViewRendererRegistry extends ActiveDefRegistry<ViewRendererDef> {
11
+ constructor();
12
+ }
13
+ //# sourceMappingURL=view-renderers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-renderers.d.ts","sourceRoot":"","sources":["../../src/registries/view-renderers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;;;GAMG;AACH,qBAAa,oBAAqB,SAAQ,iBAAiB,CAAC,eAAe,CAAC;;CAI3E"}
@@ -0,0 +1,14 @@
1
+ import { ActiveDefRegistry } from './active-def-registry.js';
2
+ /**
3
+ * One active view-spec renderer per session. Register throws on duplicate,
4
+ * auto-activates the first, and `unregister` clears the active slot rather
5
+ * than picking an arbitrary successor. Core seeds a default renderer so
6
+ * `getActive()` is non-null even with no plugins. See
7
+ * {@link ActiveDefRegistry}.
8
+ */
9
+ export class ViewRendererRegistry extends ActiveDefRegistry {
10
+ constructor() {
11
+ super({ noun: 'View renderer' });
12
+ }
13
+ }
14
+ //# sourceMappingURL=view-renderers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-renderers.js","sourceRoot":"","sources":["../../src/registries/view-renderers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,OAAO,oBAAqB,SAAQ,iBAAkC;IAC1E;QACE,KAAK,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;IACnC,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import type { WorkflowExecutorDef } from '@moxxy/sdk';
2
+ import { ActiveDefRegistry } from './active-def-registry.js';
3
+ /**
4
+ * Registry of swappable workflow-execution strategies. Register throws on
5
+ * duplicate, auto-activates the first registration (so a session always has
6
+ * an executor once `@moxxy/plugin-workflows` loads its default `dag`), and
7
+ * `unregister` clears the active slot rather than silently picking a
8
+ * successor. See {@link ActiveDefRegistry}.
9
+ */
10
+ export declare class WorkflowExecutorRegistry extends ActiveDefRegistry<WorkflowExecutorDef> {
11
+ constructor();
12
+ }
13
+ //# sourceMappingURL=workflow-executors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-executors.d.ts","sourceRoot":"","sources":["../../src/registries/workflow-executors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;;;GAMG;AACH,qBAAa,wBAAyB,SAAQ,iBAAiB,CAAC,mBAAmB,CAAC;;CAInF"}
@@ -0,0 +1,14 @@
1
+ import { ActiveDefRegistry } from './active-def-registry.js';
2
+ /**
3
+ * Registry of swappable workflow-execution strategies. Register throws on
4
+ * duplicate, auto-activates the first registration (so a session always has
5
+ * an executor once `@moxxy/plugin-workflows` loads its default `dag`), and
6
+ * `unregister` clears the active slot rather than silently picking a
7
+ * successor. See {@link ActiveDefRegistry}.
8
+ */
9
+ export class WorkflowExecutorRegistry extends ActiveDefRegistry {
10
+ constructor() {
11
+ super({ noun: 'Workflow executor' });
12
+ }
13
+ }
14
+ //# sourceMappingURL=workflow-executors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-executors.js","sourceRoot":"","sources":["../../src/registries/workflow-executors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,OAAO,wBAAyB,SAAQ,iBAAsC;IAClF;QACE,KAAK,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;IACvC,CAAC;CACF"}
@@ -0,0 +1,59 @@
1
+ import type { MoxxyRequirement, RequirementCheck, RequirementKind, RequirementState, AgentDef, ChannelDef, CommandDef, CompactorDef, ModeDef, ProviderDef, ToolDef, TranscriberDef, SynthesizerDef } from '@moxxy/sdk';
2
+ export interface RequirementChecker {
3
+ check(requirements: ReadonlyArray<MoxxyRequirement> | undefined): RequirementCheck;
4
+ }
5
+ export interface RequirementRegistryOptions {
6
+ readonly tools: {
7
+ get(name: string): ToolDef | undefined;
8
+ };
9
+ readonly providers: {
10
+ list(): ReadonlyArray<ProviderDef>;
11
+ getActiveName(): string | null;
12
+ };
13
+ readonly modes: {
14
+ list(): ReadonlyArray<ModeDef>;
15
+ getActive(): ModeDef;
16
+ };
17
+ readonly compactors: {
18
+ list(): ReadonlyArray<CompactorDef>;
19
+ getActive(): CompactorDef | null;
20
+ };
21
+ readonly channels: {
22
+ get(name: string): ChannelDef | undefined;
23
+ };
24
+ readonly agents: {
25
+ get(name: string): AgentDef | undefined;
26
+ };
27
+ readonly commands: {
28
+ get(name: string): CommandDef | undefined;
29
+ };
30
+ readonly transcribers: {
31
+ list(): ReadonlyArray<TranscriberDef>;
32
+ getActiveName(): string | null;
33
+ };
34
+ readonly synthesizers: {
35
+ list(): ReadonlyArray<SynthesizerDef>;
36
+ getActiveName(): string | null;
37
+ };
38
+ }
39
+ export declare class RequirementRegistry {
40
+ private readonly opts;
41
+ private readonly runtime;
42
+ private readonly plugins;
43
+ constructor(opts: RequirementRegistryOptions);
44
+ registerPlugin(name: string, version: string): void;
45
+ unregisterPlugin(name: string): void;
46
+ setRuntime(name: string, state?: RequirementState): void;
47
+ clearRuntime(name: string): void;
48
+ check(requirements: ReadonlyArray<MoxxyRequirement> | undefined): RequirementCheck;
49
+ /**
50
+ * Convenience: check whether a single named target is present and (if
51
+ * its kind has an active/inactive distinction) currently active.
52
+ * Equivalent to `check([{ kind, name, state: 'active' }])`.
53
+ */
54
+ isReady(kind: RequirementKind, name: string): RequirementCheck;
55
+ private checkOne;
56
+ private checkRuntime;
57
+ private targetInfo;
58
+ }
59
+ //# sourceMappingURL=requirements.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requirements.d.ts","sourceRoot":"","sources":["../src/requirements.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAEhB,eAAe,EACf,gBAAgB,EAChB,QAAQ,EACR,UAAU,EACV,UAAU,EACV,YAAY,EACZ,OAAO,EACP,WAAW,EACX,OAAO,EACP,cAAc,EACd,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,YAAY,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAAG,SAAS,GAAG,gBAAgB,CAAC;CACpF;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,KAAK,EAAE;QACd,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;KACxC,CAAC;IACF,QAAQ,CAAC,SAAS,EAAE;QAClB,IAAI,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC;QACnC,aAAa,IAAI,MAAM,GAAG,IAAI,CAAC;KAChC,CAAC;IACF,QAAQ,CAAC,KAAK,EAAE;QACd,IAAI,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;QAC/B,SAAS,IAAI,OAAO,CAAC;KACtB,CAAC;IACF,QAAQ,CAAC,UAAU,EAAE;QACnB,IAAI,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC;QACpC,SAAS,IAAI,YAAY,GAAG,IAAI,CAAC;KAClC,CAAC;IACF,QAAQ,CAAC,QAAQ,EAAE;QACjB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;KAC3C,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE;QACf,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;KACzC,CAAC;IACF,QAAQ,CAAC,QAAQ,EAAE;QACjB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;KAC3C,CAAC;IACF,QAAQ,CAAC,YAAY,EAAE;QACrB,IAAI,IAAI,aAAa,CAAC,cAAc,CAAC,CAAC;QACtC,aAAa,IAAI,MAAM,GAAG,IAAI,CAAC;KAChC,CAAC;IACF,QAAQ,CAAC,YAAY,EAAE;QACrB,IAAI,IAAI,aAAa,CAAC,cAAc,CAAC,CAAC;QACtC,aAAa,IAAI,MAAM,GAAG,IAAI,CAAC;KAChC,CAAC;CACH;AAwCD,qBAAa,mBAAmB;IAIlB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAC/D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;gBAElC,IAAI,EAAE,0BAA0B;IAE7D,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAInD,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIpC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,gBAA0B,GAAG,IAAI;IAIjE,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIhC,KAAK,CAAC,YAAY,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAAG,SAAS,GAAG,gBAAgB;IAUlF;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,gBAAgB;IAI9D,OAAO,CAAC,QAAQ;IAwBhB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,UAAU;CAmBnB"}
@@ -0,0 +1,149 @@
1
+ /** Active for kinds with no active/inactive distinction (tool/channel/agent/command). */
2
+ const ALWAYS_ACTIVE = () => true;
3
+ export class RequirementRegistry {
4
+ opts;
5
+ runtime = new Map();
6
+ plugins = new Map();
7
+ constructor(opts) {
8
+ this.opts = opts;
9
+ }
10
+ registerPlugin(name, version) {
11
+ this.plugins.set(name, { name, version });
12
+ }
13
+ unregisterPlugin(name) {
14
+ this.plugins.delete(name);
15
+ }
16
+ setRuntime(name, state = 'ready') {
17
+ this.runtime.set(name, state);
18
+ }
19
+ clearRuntime(name) {
20
+ this.runtime.delete(name);
21
+ }
22
+ check(requirements) {
23
+ const issues = [];
24
+ for (const requirement of requirements ?? []) {
25
+ const issue = this.checkOne(requirement);
26
+ if (issue)
27
+ issues.push(issue);
28
+ }
29
+ const blocking = issues.filter((issue) => !issue.requirement.optional);
30
+ return { ready: blocking.length === 0, issues };
31
+ }
32
+ /**
33
+ * Convenience: check whether a single named target is present and (if
34
+ * its kind has an active/inactive distinction) currently active.
35
+ * Equivalent to `check([{ kind, name, state: 'active' }])`.
36
+ */
37
+ isReady(kind, name) {
38
+ return this.check([{ kind, name, state: 'active' }]);
39
+ }
40
+ checkOne(requirement) {
41
+ if (requirement.kind === 'runtime')
42
+ return this.checkRuntime(requirement);
43
+ const target = this.targetInfo(requirement.kind, requirement.name);
44
+ if (!target) {
45
+ return issue(requirement, 'missing', `Required ${label(requirement.kind)} is not registered: ${requirement.name}`);
46
+ }
47
+ if (requirement.version && target.version !== requirement.version) {
48
+ return issue(requirement, 'version_mismatch', `Required ${label(requirement.kind)} has version ${target.version ?? '(unknown)'}, expected ${requirement.version}: ${requirement.name}`);
49
+ }
50
+ const state = requirement.state ?? 'registered';
51
+ if ((state === 'active' || state === 'ready') && !target.active) {
52
+ return issue(requirement, 'inactive', `Required ${label(requirement.kind)} is not active: ${requirement.name}`);
53
+ }
54
+ return null;
55
+ }
56
+ checkRuntime(requirement) {
57
+ const state = requirement.state ?? 'ready';
58
+ const actual = this.runtime.get(requirement.name);
59
+ if (actual !== state) {
60
+ return issue(requirement, 'not_ready', `Required runtime is not ready: ${requirement.name}`);
61
+ }
62
+ return null;
63
+ }
64
+ targetInfo(kind, name) {
65
+ // `plugin` resolves against this instance's private registration map (not a
66
+ // registry on `opts`) and is the only kind carrying a version, so it stays a
67
+ // special case rather than being contorted into the shared table.
68
+ if (kind === 'plugin') {
69
+ const plugin = this.plugins.get(name);
70
+ return plugin ? { kind, name, version: plugin.version, active: true } : null;
71
+ }
72
+ // `runtime` never reaches here — `checkOne` routes it to `checkRuntime` first.
73
+ if (kind === 'runtime')
74
+ return null;
75
+ // Every remaining kind has a table entry: `TARGET_DESCRIPTORS` is a total
76
+ // `Record` over `Exclude<RequirementKind, 'plugin' | 'runtime'>`, so a kind
77
+ // added to the union without an entry is a compile error (the table-driven
78
+ // replacement for the old switch's `assertNever` default).
79
+ const descriptor = TARGET_DESCRIPTORS[kind];
80
+ if (!descriptor.present(this.opts, name))
81
+ return null;
82
+ return { kind, name, active: descriptor.active(this.opts, name) };
83
+ }
84
+ }
85
+ /**
86
+ * Lookup table backing {@link RequirementRegistry.targetInfo} for every
87
+ * registry-backed {@link RequirementKind}. `plugin` (private map + version) and
88
+ * `runtime` (handled before `targetInfo`) are intentionally absent and dealt
89
+ * with as special cases; the `Partial`-free `Record` keyed on the remaining
90
+ * kinds keeps the set exhaustive (a new kind is a compile error until listed).
91
+ */
92
+ const TARGET_DESCRIPTORS = {
93
+ provider: {
94
+ present: (opts, name) => opts.providers.list().some((p) => p.name === name),
95
+ active: (opts, name) => opts.providers.getActiveName() === name,
96
+ },
97
+ tool: {
98
+ present: (opts, name) => opts.tools.get(name) !== undefined,
99
+ active: ALWAYS_ACTIVE,
100
+ },
101
+ transcriber: {
102
+ present: (opts, name) => opts.transcribers.list().some((t) => t.name === name),
103
+ active: (opts, name) => opts.transcribers.getActiveName() === name,
104
+ },
105
+ synthesizer: {
106
+ present: (opts, name) => opts.synthesizers.list().some((s) => s.name === name),
107
+ active: (opts, name) => opts.synthesizers.getActiveName() === name,
108
+ },
109
+ mode: {
110
+ present: (opts, name) => opts.modes.list().some((m) => m.name === name),
111
+ active: (opts, name) => activeModeName(opts.modes) === name,
112
+ },
113
+ compactor: {
114
+ present: (opts, name) => opts.compactors.list().some((c) => c.name === name),
115
+ active: (opts, name) => opts.compactors.getActive()?.name === name,
116
+ },
117
+ channel: {
118
+ present: (opts, name) => opts.channels.get(name) !== undefined,
119
+ active: ALWAYS_ACTIVE,
120
+ },
121
+ agent: {
122
+ present: (opts, name) => opts.agents.get(name) !== undefined,
123
+ active: ALWAYS_ACTIVE,
124
+ },
125
+ command: {
126
+ present: (opts, name) => opts.commands.get(name) !== undefined,
127
+ active: ALWAYS_ACTIVE,
128
+ },
129
+ };
130
+ function issue(requirement, code, message) {
131
+ return {
132
+ requirement,
133
+ code,
134
+ message,
135
+ ...(requirement.hint ? { hint: requirement.hint } : {}),
136
+ };
137
+ }
138
+ function label(kind) {
139
+ return kind;
140
+ }
141
+ function activeModeName(modes) {
142
+ try {
143
+ return modes.getActive().name;
144
+ }
145
+ catch {
146
+ return null;
147
+ }
148
+ }
149
+ //# sourceMappingURL=requirements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requirements.js","sourceRoot":"","sources":["../src/requirements.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { MoxxyEvent, RunTurnOptions } from '@moxxy/sdk';
2
+ import type { SessionRuntime } from './session-runtime.js';
3
+ export type { RunTurnOptions } from '@moxxy/sdk';
4
+ export declare function runTurn(session: SessionRuntime, prompt: string, opts?: RunTurnOptions): AsyncIterable<MoxxyEvent>;
5
+ export declare function collectTurn(session: SessionRuntime, prompt: string, opts?: RunTurnOptions): Promise<ReadonlyArray<MoxxyEvent>>;
6
+ //# sourceMappingURL=run-turn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-turn.d.ts","sourceRoot":"","sources":["../src/run-turn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA6B,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACxF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAM3D,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAuB,OAAO,CAC5B,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,cAAmB,GACxB,aAAa,CAAC,UAAU,CAAC,CAoI3B;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAIpC"}
@@ -0,0 +1,141 @@
1
+ import { createSubagentSpawner } from './subagents.js';
2
+ export async function* runTurn(session, prompt, opts = {}) {
3
+ // Mint the turnId first so the subscriber below can filter by it. Without
4
+ // the filter, concurrent runTurn() calls on the same Session would each
5
+ // observe every event from every other turn (the EventLog has one global
6
+ // listener set), causing cross-talk for hosts like the HTTP channel that
7
+ // serve multiple turns in parallel.
8
+ // Use a caller-supplied turnId when present (the runner mints it up front so
9
+ // it can return the id before the turn runs); otherwise mint one here.
10
+ const turnId = opts.turnId ?? session.startTurn().turnId;
11
+ const provider = session.providers.getActive();
12
+ const model = opts.model ?? provider.models[0]?.id ?? 'default';
13
+ // Record the resolution so out-of-band spawns (workflow triggers) can
14
+ // inherit the conversation's current model. Last-writer-wins when turns
15
+ // run concurrently — see the field's doc in SessionRuntime.
16
+ session.lastResolvedModel = model;
17
+ const queue = [];
18
+ const waiters = [];
19
+ let done = false;
20
+ let strategyError = null;
21
+ // A mode can ask (via ctx.requestModeSwitch) to hand off to another mode
22
+ // once this turn finishes — applied after the strategy drains, below.
23
+ let requestedModeSwitch = null;
24
+ const wake = () => waiters.shift()?.();
25
+ const unsubscribe = session.log.subscribe((event) => {
26
+ if (event.turnId !== turnId)
27
+ return;
28
+ queue.push(event);
29
+ wake();
30
+ });
31
+ let strategyPromise = null;
32
+ try {
33
+ await session.log.append({
34
+ type: 'user_prompt',
35
+ sessionId: session.id,
36
+ turnId,
37
+ source: 'user',
38
+ text: prompt,
39
+ ...(opts.attachments && opts.attachments.length > 0
40
+ ? { attachments: opts.attachments }
41
+ : {}),
42
+ });
43
+ const strategy = session.modes.getActive();
44
+ // Combine the session's signal with the per-turn one (if provided)
45
+ // so either firing cancels the turn.
46
+ const effectiveSignal = opts.signal
47
+ ? AbortSignal.any([session.signal, opts.signal])
48
+ : session.signal;
49
+ // The session's working dir + environment, mirrored onto the ModeContext
50
+ // so the shared tool dispatcher can hand onToolCall hooks the real cwd/env
51
+ // (path-based policy hooks gate on these) instead of empty placeholders.
52
+ const appCtx = session.appContext();
53
+ const ctx = {
54
+ sessionId: session.id,
55
+ turnId,
56
+ cwd: appCtx.cwd,
57
+ env: appCtx.env,
58
+ model,
59
+ systemPrompt: opts.systemPrompt,
60
+ provider,
61
+ tools: session.tools,
62
+ skills: session.skills,
63
+ log: session.log,
64
+ compactor: session.compactors.getActive(),
65
+ cacheStrategy: session.cacheStrategies.getActive(),
66
+ ...(session.elisionSettings ? { elision: session.elisionSettings } : {}),
67
+ ...(session.lazyTools ? { lazyTools: true } : {}),
68
+ // Reasoning preference (effort) — honored only by providers/models that
69
+ // advertise `supportsReasoning` (gated in collectProviderStream).
70
+ ...(session.reasoning ? { reasoning: session.reasoning } : {}),
71
+ permissions: session.resolver,
72
+ ...(session.approvalResolver ? { approval: session.approvalResolver } : {}),
73
+ hooks: session.dispatcher,
74
+ pluginHost: session.pluginHost,
75
+ signal: effectiveSignal,
76
+ maxIterations: opts.maxIterations,
77
+ subagents: createSubagentSpawner({
78
+ parentSession: session,
79
+ parentTurnId: turnId,
80
+ parentSignal: effectiveSignal,
81
+ parentModel: model,
82
+ }),
83
+ requestModeSwitch: (modeName) => {
84
+ requestedModeSwitch = modeName;
85
+ },
86
+ emit: (event) => session.log.append(event),
87
+ };
88
+ const turnStartCtx = { ...appCtx, turnId, iteration: 0 };
89
+ strategyPromise = (async () => {
90
+ try {
91
+ await session.dispatcher.dispatchTurnStart(turnStartCtx);
92
+ for await (const _ of strategy.run(ctx)) {
93
+ // Events are surfaced via the log subscription above.
94
+ void _;
95
+ }
96
+ await session.dispatcher.dispatchTurnEnd(turnStartCtx);
97
+ }
98
+ catch (err) {
99
+ strategyError = err;
100
+ }
101
+ finally {
102
+ done = true;
103
+ wake();
104
+ }
105
+ })();
106
+ while (true) {
107
+ while (queue.length > 0)
108
+ yield queue.shift();
109
+ if (done)
110
+ break;
111
+ await new Promise((resolve) => waiters.push(resolve));
112
+ }
113
+ }
114
+ finally {
115
+ unsubscribe();
116
+ if (strategyPromise)
117
+ await strategyPromise;
118
+ // Apply a mode hand-off the strategy requested, now that the turn has
119
+ // fully drained. Only on clean completion (a thrown/aborted turn keeps
120
+ // the current mode); an unknown target is ignored so a bad name can't
121
+ // wedge the session. The registry's setActive triggers the runner's
122
+ // InfoChanged broadcast, so channels see the new mode.
123
+ if (requestedModeSwitch && !strategyError) {
124
+ try {
125
+ session.modes.setActive(requestedModeSwitch);
126
+ }
127
+ catch {
128
+ /* unregistered target — leave the active mode unchanged */
129
+ }
130
+ }
131
+ }
132
+ if (strategyError)
133
+ throw strategyError;
134
+ }
135
+ export async function collectTurn(session, prompt, opts = {}) {
136
+ const events = [];
137
+ for await (const event of runTurn(session, prompt, opts))
138
+ events.push(event);
139
+ return events;
140
+ }
141
+ //# sourceMappingURL=run-turn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-turn.js","sourceRoot":"","sources":["../src/run-turn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import type { AppContext, ApprovalResolver, CacheStrategyDef, CompactorDef, ElisionSettings, HookDispatcher, LLMProvider, ModeDef, PermissionResolver, PluginHostHandle, SessionId, SkillRegistry, TurnId } from '@moxxy/sdk';
2
+ import type { EventLog } from './events/log.js';
3
+ import type { ToolRegistry } from './registries/tools.js';
4
+ /**
5
+ * The slice of the concrete `Session` that the turn driver (`run-turn.ts`)
6
+ * and the subagent runtime (`subagents/spawn.ts`, `subagents/events.ts`)
7
+ * actually consume. Those modules depend on *this* interface rather than
8
+ * importing the `Session` class directly.
9
+ *
10
+ * Why: `session.ts` value-imports `runTurn`, so if `run-turn.ts` (and the
11
+ * subagent modules it pulls in) imported the `Session` class back, the
12
+ * package would have an import cycle — flagged by `pnpm check:deps` because
13
+ * dependency-cruiser tracks type-only edges (`tsPreCompilationDeps`). Routing
14
+ * through this leaf contract keeps the value graph a DAG
15
+ * (`session → run-turn → subagents → spawn → events`) with no edges pointing
16
+ * back at `session.ts`.
17
+ *
18
+ * `Session implements SessionRuntime`, so the contract can't silently drift
19
+ * from the class it abstracts.
20
+ */
21
+ export interface SessionRuntime {
22
+ readonly id: SessionId;
23
+ readonly log: EventLog;
24
+ readonly signal: AbortSignal;
25
+ readonly tools: ToolRegistry;
26
+ readonly skills: SkillRegistry;
27
+ readonly providers: {
28
+ getActive(): LLMProvider;
29
+ };
30
+ readonly modes: {
31
+ getActive(): ModeDef;
32
+ list(): ReadonlyArray<ModeDef>;
33
+ /** Post-turn mode hand-off (one mode handing back to another). Throws on an
34
+ * unknown name; run-turn guards the call. */
35
+ setActive(name: string): void;
36
+ };
37
+ readonly compactors: {
38
+ getActive(): CompactorDef | null;
39
+ };
40
+ readonly cacheStrategies: {
41
+ getActive(): CacheStrategyDef | null;
42
+ };
43
+ readonly resolver: PermissionResolver;
44
+ readonly approvalResolver: ApprovalResolver | null;
45
+ readonly elisionSettings: ElisionSettings | null;
46
+ readonly lazyTools: boolean;
47
+ /** Reasoning/thinking preference (effort), forwarded to each turn's ModeContext. */
48
+ readonly reasoning?: {
49
+ readonly effort?: 'low' | 'medium' | 'high';
50
+ } | boolean | undefined;
51
+ readonly dispatcher: HookDispatcher;
52
+ readonly pluginHost: PluginHostHandle;
53
+ /**
54
+ * Model id resolved by the most recent `runTurn()` on this session.
55
+ * Out-of-band spawns (workflow triggers, schedulers) read this so their
56
+ * children inherit whatever the user is currently talking to instead of a
57
+ * stale hardcoded default. Last-writer-wins under concurrent turns — it is
58
+ * a "current conversation model" hint, not a per-turn record. Null until
59
+ * the first turn resolves a model.
60
+ */
61
+ lastResolvedModel: string | null;
62
+ startTurn(): {
63
+ turnId: TurnId;
64
+ };
65
+ appContext(): AppContext;
66
+ }
67
+ //# sourceMappingURL=session-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-runtime.d.ts","sourceRoot":"","sources":["../src/session-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,cAAc,EACd,WAAW,EACX,OAAO,EACP,kBAAkB,EAClB,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,MAAM,EACP,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAIhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE;QAAE,SAAS,IAAI,WAAW,CAAA;KAAE,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE;QACd,SAAS,IAAI,OAAO,CAAC;QACrB,IAAI,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;QAC/B;sDAC8C;QAC9C,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;KAC/B,CAAC;IACF,QAAQ,CAAC,UAAU,EAAE;QAAE,SAAS,IAAI,YAAY,GAAG,IAAI,CAAA;KAAE,CAAC;IAC1D,QAAQ,CAAC,eAAe,EAAE;QAAE,SAAS,IAAI,gBAAgB,GAAG,IAAI,CAAA;KAAE,CAAC;IACnE,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACnD,QAAQ,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACjD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,oFAAoF;IACpF,QAAQ,CAAC,SAAS,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;KAAE,GAAG,OAAO,GAAG,SAAS,CAAC;IAC3F,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC;;;;;;;OAOG;IACH,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,SAAS,IAAI;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAChC,UAAU,IAAI,UAAU,CAAC;CAC1B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=session-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-runtime.js","sourceRoot":"","sources":["../src/session-runtime.ts"],"names":[],"mappings":""}