@bradygaster/squad-sdk 0.7.0 → 0.8.2

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 (354) hide show
  1. package/README.md +296 -296
  2. package/dist/adapter/client.d.ts +243 -0
  3. package/dist/adapter/client.d.ts.map +1 -0
  4. package/dist/adapter/client.js +567 -0
  5. package/dist/adapter/client.js.map +1 -0
  6. package/dist/adapter/errors.d.ts +260 -0
  7. package/dist/adapter/errors.d.ts.map +1 -0
  8. package/dist/adapter/errors.js +362 -0
  9. package/dist/adapter/errors.js.map +1 -0
  10. package/dist/adapter/types.d.ts +779 -0
  11. package/dist/adapter/types.d.ts.map +1 -0
  12. package/dist/adapter/types.js +11 -0
  13. package/dist/adapter/types.js.map +1 -0
  14. package/dist/agents/charter-compiler.d.ts +102 -0
  15. package/dist/agents/charter-compiler.d.ts.map +1 -0
  16. package/dist/agents/charter-compiler.js +157 -0
  17. package/dist/agents/charter-compiler.js.map +1 -0
  18. package/dist/agents/history-shadow.d.ts +80 -0
  19. package/dist/agents/history-shadow.d.ts.map +1 -0
  20. package/dist/agents/history-shadow.js +239 -0
  21. package/dist/agents/history-shadow.js.map +1 -0
  22. package/dist/agents/index.d.ts +71 -0
  23. package/dist/agents/index.d.ts.map +1 -0
  24. package/dist/agents/index.js +183 -0
  25. package/dist/agents/index.js.map +1 -0
  26. package/dist/agents/lifecycle.d.ts +138 -0
  27. package/dist/agents/lifecycle.d.ts.map +1 -0
  28. package/dist/agents/lifecycle.js +284 -0
  29. package/dist/agents/lifecycle.js.map +1 -0
  30. package/dist/agents/model-selector.d.ts +80 -0
  31. package/dist/agents/model-selector.d.ts.map +1 -0
  32. package/dist/agents/model-selector.js +171 -0
  33. package/dist/agents/model-selector.js.map +1 -0
  34. package/dist/agents/onboarding.d.ts +65 -0
  35. package/dist/agents/onboarding.d.ts.map +1 -0
  36. package/dist/agents/onboarding.js +373 -0
  37. package/dist/agents/onboarding.js.map +1 -0
  38. package/dist/build/bundle.d.ts +32 -0
  39. package/dist/build/bundle.d.ts.map +1 -0
  40. package/dist/build/bundle.js +97 -0
  41. package/dist/build/bundle.js.map +1 -0
  42. package/dist/build/ci-pipeline.d.ts +51 -0
  43. package/dist/build/ci-pipeline.d.ts.map +1 -0
  44. package/dist/build/ci-pipeline.js +180 -0
  45. package/dist/build/ci-pipeline.js.map +1 -0
  46. package/dist/build/github-dist.d.ts +37 -0
  47. package/dist/build/github-dist.d.ts.map +1 -0
  48. package/dist/build/github-dist.js +117 -0
  49. package/dist/build/github-dist.js.map +1 -0
  50. package/dist/build/index.d.ts +11 -0
  51. package/dist/build/index.d.ts.map +1 -0
  52. package/dist/build/index.js +11 -0
  53. package/dist/build/index.js.map +1 -0
  54. package/dist/build/install-migration.d.ts +28 -0
  55. package/dist/build/install-migration.d.ts.map +1 -0
  56. package/dist/build/install-migration.js +103 -0
  57. package/dist/build/install-migration.js.map +1 -0
  58. package/dist/build/npm-package.d.ts +54 -0
  59. package/dist/build/npm-package.d.ts.map +1 -0
  60. package/dist/build/npm-package.js +128 -0
  61. package/dist/build/npm-package.js.map +1 -0
  62. package/dist/build/release.d.ts +108 -0
  63. package/dist/build/release.d.ts.map +1 -0
  64. package/dist/build/release.js +295 -0
  65. package/dist/build/release.js.map +1 -0
  66. package/dist/build/versioning.d.ts +38 -0
  67. package/dist/build/versioning.d.ts.map +1 -0
  68. package/dist/build/versioning.js +113 -0
  69. package/dist/build/versioning.js.map +1 -0
  70. package/dist/casting/casting-engine.d.ts +60 -0
  71. package/dist/casting/casting-engine.d.ts.map +1 -0
  72. package/dist/casting/casting-engine.js +223 -0
  73. package/dist/casting/casting-engine.js.map +1 -0
  74. package/dist/casting/casting-history.d.ts +54 -0
  75. package/dist/casting/casting-history.d.ts.map +1 -0
  76. package/dist/casting/casting-history.js +63 -0
  77. package/dist/casting/casting-history.js.map +1 -0
  78. package/dist/casting/index.d.ts +46 -0
  79. package/dist/casting/index.d.ts.map +1 -0
  80. package/dist/casting/index.js +45 -0
  81. package/dist/casting/index.js.map +1 -0
  82. package/dist/client/event-bus.d.ts +29 -0
  83. package/dist/client/event-bus.d.ts.map +1 -0
  84. package/dist/client/event-bus.js +52 -0
  85. package/dist/client/event-bus.js.map +1 -0
  86. package/dist/client/index.d.ts +100 -0
  87. package/dist/client/index.d.ts.map +1 -0
  88. package/dist/client/index.js +170 -0
  89. package/dist/client/index.js.map +1 -0
  90. package/dist/client/session-pool.d.ts +66 -0
  91. package/dist/client/session-pool.d.ts.map +1 -0
  92. package/dist/client/session-pool.js +145 -0
  93. package/dist/client/session-pool.js.map +1 -0
  94. package/dist/config/agent-doc.d.ts +43 -0
  95. package/dist/config/agent-doc.d.ts.map +1 -0
  96. package/dist/config/agent-doc.js +158 -0
  97. package/dist/config/agent-doc.js.map +1 -0
  98. package/dist/config/agent-source.d.ts +95 -0
  99. package/dist/config/agent-source.d.ts.map +1 -0
  100. package/dist/config/agent-source.js +274 -0
  101. package/dist/config/agent-source.js.map +1 -0
  102. package/dist/config/doc-sync.d.ts +66 -0
  103. package/dist/config/doc-sync.d.ts.map +1 -0
  104. package/dist/config/doc-sync.js +270 -0
  105. package/dist/config/doc-sync.js.map +1 -0
  106. package/dist/config/feature-audit.d.ts +49 -0
  107. package/dist/config/feature-audit.d.ts.map +1 -0
  108. package/dist/config/feature-audit.js +148 -0
  109. package/dist/config/feature-audit.js.map +1 -0
  110. package/dist/config/index.d.ts +15 -0
  111. package/dist/config/index.d.ts.map +1 -0
  112. package/dist/config/index.js +15 -0
  113. package/dist/config/index.js.map +1 -0
  114. package/dist/config/init.d.ts +61 -0
  115. package/dist/config/init.d.ts.map +1 -0
  116. package/dist/config/init.js +376 -0
  117. package/dist/config/init.js.map +1 -0
  118. package/dist/config/legacy-fallback.d.ts +83 -0
  119. package/dist/config/legacy-fallback.d.ts.map +1 -0
  120. package/dist/config/legacy-fallback.js +212 -0
  121. package/dist/config/legacy-fallback.js.map +1 -0
  122. package/dist/config/markdown-migration.d.ts +157 -0
  123. package/dist/config/markdown-migration.d.ts.map +1 -0
  124. package/dist/config/markdown-migration.js +434 -0
  125. package/dist/config/markdown-migration.js.map +1 -0
  126. package/dist/config/migration.d.ts +123 -0
  127. package/dist/config/migration.d.ts.map +1 -0
  128. package/dist/config/migration.js +273 -0
  129. package/dist/config/migration.js.map +1 -0
  130. package/dist/config/migrations/index.d.ts +36 -0
  131. package/dist/config/migrations/index.d.ts.map +1 -0
  132. package/dist/config/migrations/index.js +216 -0
  133. package/dist/config/migrations/index.js.map +1 -0
  134. package/dist/config/models.d.ts +134 -0
  135. package/dist/config/models.d.ts.map +1 -0
  136. package/dist/config/models.js +354 -0
  137. package/dist/config/models.js.map +1 -0
  138. package/dist/config/routing.d.ts +118 -0
  139. package/dist/config/routing.d.ts.map +1 -0
  140. package/dist/config/routing.js +247 -0
  141. package/dist/config/routing.js.map +1 -0
  142. package/dist/config/schema.d.ts +72 -0
  143. package/dist/config/schema.d.ts.map +1 -0
  144. package/dist/config/schema.js +63 -0
  145. package/dist/config/schema.js.map +1 -0
  146. package/dist/coordinator/coordinator.d.ts +82 -0
  147. package/dist/coordinator/coordinator.d.ts.map +1 -0
  148. package/dist/coordinator/coordinator.js +192 -0
  149. package/dist/coordinator/coordinator.js.map +1 -0
  150. package/dist/coordinator/direct-response.d.ts +83 -0
  151. package/dist/coordinator/direct-response.d.ts.map +1 -0
  152. package/dist/coordinator/direct-response.js +187 -0
  153. package/dist/coordinator/direct-response.js.map +1 -0
  154. package/dist/coordinator/fan-out.d.ts +83 -0
  155. package/dist/coordinator/fan-out.d.ts.map +1 -0
  156. package/dist/coordinator/fan-out.js +161 -0
  157. package/dist/coordinator/fan-out.js.map +1 -0
  158. package/dist/coordinator/index.d.ts +62 -0
  159. package/dist/coordinator/index.d.ts.map +1 -0
  160. package/dist/coordinator/index.js +171 -0
  161. package/dist/coordinator/index.js.map +1 -0
  162. package/dist/coordinator/response-tiers.d.ts +49 -0
  163. package/dist/coordinator/response-tiers.d.ts.map +1 -0
  164. package/dist/coordinator/response-tiers.js +149 -0
  165. package/dist/coordinator/response-tiers.js.map +1 -0
  166. package/dist/hooks/index.d.ts +103 -0
  167. package/dist/hooks/index.d.ts.map +1 -0
  168. package/dist/hooks/index.js +279 -0
  169. package/dist/hooks/index.js.map +1 -0
  170. package/dist/index.d.ts +33 -1
  171. package/dist/index.d.ts.map +1 -1
  172. package/dist/index.js +33 -3
  173. package/dist/index.js.map +1 -1
  174. package/dist/marketplace/backend.d.ts +35 -0
  175. package/dist/marketplace/backend.d.ts.map +1 -0
  176. package/dist/marketplace/backend.js +99 -0
  177. package/dist/marketplace/backend.js.map +1 -0
  178. package/dist/marketplace/browser.d.ts +33 -0
  179. package/dist/marketplace/browser.d.ts.map +1 -0
  180. package/dist/marketplace/browser.js +97 -0
  181. package/dist/marketplace/browser.js.map +1 -0
  182. package/dist/marketplace/extension-adapter.d.ts +51 -0
  183. package/dist/marketplace/extension-adapter.d.ts.map +1 -0
  184. package/dist/marketplace/extension-adapter.js +81 -0
  185. package/dist/marketplace/extension-adapter.js.map +1 -0
  186. package/dist/marketplace/index.d.ts +51 -0
  187. package/dist/marketplace/index.d.ts.map +1 -0
  188. package/dist/marketplace/index.js +108 -0
  189. package/dist/marketplace/index.js.map +1 -0
  190. package/dist/marketplace/packaging.d.ts +25 -0
  191. package/dist/marketplace/packaging.d.ts.map +1 -0
  192. package/dist/marketplace/packaging.js +117 -0
  193. package/dist/marketplace/packaging.js.map +1 -0
  194. package/dist/marketplace/schema.d.ts +50 -0
  195. package/dist/marketplace/schema.d.ts.map +1 -0
  196. package/dist/marketplace/schema.js +120 -0
  197. package/dist/marketplace/schema.js.map +1 -0
  198. package/dist/marketplace/security.d.ts +26 -0
  199. package/dist/marketplace/security.d.ts.map +1 -0
  200. package/dist/marketplace/security.js +199 -0
  201. package/dist/marketplace/security.js.map +1 -0
  202. package/dist/parsers.d.ts +15 -0
  203. package/dist/parsers.d.ts.map +1 -0
  204. package/dist/parsers.js +15 -0
  205. package/dist/parsers.js.map +1 -0
  206. package/dist/ralph/index.d.ts +58 -0
  207. package/dist/ralph/index.d.ts.map +1 -0
  208. package/dist/ralph/index.js +128 -0
  209. package/dist/ralph/index.js.map +1 -0
  210. package/dist/resolution.d.ts +47 -0
  211. package/dist/resolution.d.ts.map +1 -0
  212. package/dist/resolution.js +106 -0
  213. package/dist/resolution.js.map +1 -0
  214. package/dist/runtime/benchmarks.d.ts +121 -0
  215. package/dist/runtime/benchmarks.d.ts.map +1 -0
  216. package/dist/runtime/benchmarks.js +251 -0
  217. package/dist/runtime/benchmarks.js.map +1 -0
  218. package/dist/runtime/config.d.ts +314 -0
  219. package/dist/runtime/config.d.ts.map +1 -0
  220. package/dist/runtime/config.js +467 -0
  221. package/dist/runtime/config.js.map +1 -0
  222. package/dist/runtime/constants.d.ts +35 -0
  223. package/dist/runtime/constants.d.ts.map +1 -0
  224. package/dist/runtime/constants.js +58 -0
  225. package/dist/runtime/constants.js.map +1 -0
  226. package/dist/runtime/cost-tracker.d.ts +73 -0
  227. package/dist/runtime/cost-tracker.d.ts.map +1 -0
  228. package/dist/runtime/cost-tracker.js +157 -0
  229. package/dist/runtime/cost-tracker.js.map +1 -0
  230. package/dist/runtime/event-bus-otel-bridge.d.ts +19 -0
  231. package/dist/runtime/event-bus-otel-bridge.d.ts.map +1 -0
  232. package/dist/runtime/event-bus-otel-bridge.js +61 -0
  233. package/dist/runtime/event-bus-otel-bridge.js.map +1 -0
  234. package/dist/runtime/event-bus-ws-bridge.d.ts +35 -0
  235. package/dist/runtime/event-bus-ws-bridge.d.ts.map +1 -0
  236. package/dist/runtime/event-bus-ws-bridge.js +55 -0
  237. package/dist/runtime/event-bus-ws-bridge.js.map +1 -0
  238. package/dist/runtime/event-bus.d.ts +190 -0
  239. package/dist/runtime/event-bus.d.ts.map +1 -0
  240. package/dist/runtime/event-bus.js +218 -0
  241. package/dist/runtime/event-bus.js.map +1 -0
  242. package/dist/runtime/event-payloads.d.ts +108 -0
  243. package/dist/runtime/event-payloads.d.ts.map +1 -0
  244. package/dist/runtime/event-payloads.js +28 -0
  245. package/dist/runtime/event-payloads.js.map +1 -0
  246. package/dist/runtime/health.d.ts +66 -0
  247. package/dist/runtime/health.d.ts.map +1 -0
  248. package/dist/runtime/health.js +112 -0
  249. package/dist/runtime/health.js.map +1 -0
  250. package/dist/runtime/i18n.d.ts +54 -0
  251. package/dist/runtime/i18n.d.ts.map +1 -0
  252. package/dist/runtime/i18n.js +126 -0
  253. package/dist/runtime/i18n.js.map +1 -0
  254. package/dist/runtime/offline.d.ts +64 -0
  255. package/dist/runtime/offline.d.ts.map +1 -0
  256. package/dist/runtime/offline.js +108 -0
  257. package/dist/runtime/offline.js.map +1 -0
  258. package/dist/runtime/otel-bridge.d.ts +52 -0
  259. package/dist/runtime/otel-bridge.d.ts.map +1 -0
  260. package/dist/runtime/otel-bridge.js +132 -0
  261. package/dist/runtime/otel-bridge.js.map +1 -0
  262. package/dist/runtime/otel-init.d.ts +72 -0
  263. package/dist/runtime/otel-init.d.ts.map +1 -0
  264. package/dist/runtime/otel-init.js +68 -0
  265. package/dist/runtime/otel-init.js.map +1 -0
  266. package/dist/runtime/otel-metrics.d.ts +42 -0
  267. package/dist/runtime/otel-metrics.d.ts.map +1 -0
  268. package/dist/runtime/otel-metrics.js +196 -0
  269. package/dist/runtime/otel-metrics.js.map +1 -0
  270. package/dist/runtime/otel.d.ts +53 -0
  271. package/dist/runtime/otel.d.ts.map +1 -0
  272. package/dist/runtime/otel.js +127 -0
  273. package/dist/runtime/otel.js.map +1 -0
  274. package/dist/runtime/squad-observer.d.ts +75 -0
  275. package/dist/runtime/squad-observer.d.ts.map +1 -0
  276. package/dist/runtime/squad-observer.js +190 -0
  277. package/dist/runtime/squad-observer.js.map +1 -0
  278. package/dist/runtime/streaming.d.ts +106 -0
  279. package/dist/runtime/streaming.d.ts.map +1 -0
  280. package/dist/runtime/streaming.js +192 -0
  281. package/dist/runtime/streaming.js.map +1 -0
  282. package/dist/runtime/telemetry.d.ts +82 -0
  283. package/dist/runtime/telemetry.d.ts.map +1 -0
  284. package/dist/runtime/telemetry.js +120 -0
  285. package/dist/runtime/telemetry.js.map +1 -0
  286. package/dist/sharing/agent-repo.d.ts +33 -0
  287. package/dist/sharing/agent-repo.d.ts.map +1 -0
  288. package/dist/sharing/agent-repo.js +79 -0
  289. package/dist/sharing/agent-repo.js.map +1 -0
  290. package/dist/sharing/cache.d.ts +36 -0
  291. package/dist/sharing/cache.d.ts.map +1 -0
  292. package/dist/sharing/cache.js +85 -0
  293. package/dist/sharing/cache.js.map +1 -0
  294. package/dist/sharing/conflicts.d.ts +32 -0
  295. package/dist/sharing/conflicts.d.ts.map +1 -0
  296. package/dist/sharing/conflicts.js +121 -0
  297. package/dist/sharing/conflicts.js.map +1 -0
  298. package/dist/sharing/export.d.ts +50 -0
  299. package/dist/sharing/export.d.ts.map +1 -0
  300. package/dist/sharing/export.js +156 -0
  301. package/dist/sharing/export.js.map +1 -0
  302. package/dist/sharing/history-split.d.ts +34 -0
  303. package/dist/sharing/history-split.d.ts.map +1 -0
  304. package/dist/sharing/history-split.js +101 -0
  305. package/dist/sharing/history-split.js.map +1 -0
  306. package/dist/sharing/import.d.ts +37 -0
  307. package/dist/sharing/import.d.ts.map +1 -0
  308. package/dist/sharing/import.js +138 -0
  309. package/dist/sharing/import.js.map +1 -0
  310. package/dist/sharing/index.d.ts +11 -0
  311. package/dist/sharing/index.d.ts.map +1 -0
  312. package/dist/sharing/index.js +11 -0
  313. package/dist/sharing/index.js.map +1 -0
  314. package/dist/sharing/versioning.d.ts +32 -0
  315. package/dist/sharing/versioning.d.ts.map +1 -0
  316. package/dist/sharing/versioning.js +64 -0
  317. package/dist/sharing/versioning.js.map +1 -0
  318. package/dist/skills/index.d.ts +49 -0
  319. package/dist/skills/index.d.ts.map +1 -0
  320. package/dist/skills/index.js +85 -0
  321. package/dist/skills/index.js.map +1 -0
  322. package/dist/skills/skill-loader.d.ts +56 -0
  323. package/dist/skills/skill-loader.d.ts.map +1 -0
  324. package/dist/skills/skill-loader.js +106 -0
  325. package/dist/skills/skill-loader.js.map +1 -0
  326. package/dist/skills/skill-source.d.ts +63 -0
  327. package/dist/skills/skill-source.d.ts.map +1 -0
  328. package/dist/skills/skill-source.js +199 -0
  329. package/dist/skills/skill-source.js.map +1 -0
  330. package/dist/tools/index.d.ts +95 -0
  331. package/dist/tools/index.d.ts.map +1 -0
  332. package/dist/tools/index.js +475 -0
  333. package/dist/tools/index.js.map +1 -0
  334. package/dist/types.d.ts +43 -0
  335. package/dist/types.d.ts.map +1 -0
  336. package/dist/types.js +8 -0
  337. package/dist/types.js.map +1 -0
  338. package/dist/upstream/index.d.ts +8 -0
  339. package/dist/upstream/index.d.ts.map +1 -0
  340. package/dist/upstream/index.js +7 -0
  341. package/dist/upstream/index.js.map +1 -0
  342. package/dist/upstream/resolver.d.ts +37 -0
  343. package/dist/upstream/resolver.d.ts.map +1 -0
  344. package/dist/upstream/resolver.js +234 -0
  345. package/dist/upstream/resolver.js.map +1 -0
  346. package/dist/upstream/types.d.ts +55 -0
  347. package/dist/upstream/types.d.ts.map +1 -0
  348. package/dist/upstream/types.js +11 -0
  349. package/dist/upstream/types.js.map +1 -0
  350. package/dist/utils/normalize-eol.d.ts +6 -0
  351. package/dist/utils/normalize-eol.d.ts.map +1 -0
  352. package/dist/utils/normalize-eol.js +8 -0
  353. package/dist/utils/normalize-eol.js.map +1 -0
  354. package/package.json +197 -63
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Parallel Fan-Out Session Spawning (M1-10, Issue #130)
3
+ *
4
+ * Spawns multiple agent sessions concurrently using Promise.allSettled
5
+ * for maximum throughput. Each spawn compiles charter → resolves model
6
+ * → creates session → sends initial message. Event aggregation collects
7
+ * all session events into coordinator's event bus. Error isolation ensures
8
+ * one session failure doesn't affect others.
9
+ */
10
+ // --- Fan-Out Orchestrator ---
11
+ /**
12
+ * Spawn multiple agents in parallel using Promise.allSettled.
13
+ *
14
+ * Each spawn:
15
+ * 1. Compile charter.md → AgentCharter
16
+ * 2. Resolve model (override or charter or auto-select)
17
+ * 3. Create session via SquadClient
18
+ * 4. Send initial message with task and context
19
+ * 5. Aggregate events to coordinator's event bus
20
+ *
21
+ * Error isolation: one failure doesn't block others.
22
+ * Returns SpawnResult[] with outcomes for each agent.
23
+ *
24
+ * @param configs - Array of agent spawn configurations
25
+ * @param deps - Injected dependencies (charter compiler, model resolver, client)
26
+ * @returns Promise resolving to array of spawn results
27
+ */
28
+ export async function spawnParallel(configs, deps) {
29
+ const spawnPromises = configs.map(config => spawnSingle(config, deps));
30
+ const settledResults = await Promise.allSettled(spawnPromises);
31
+ return settledResults.map((result, index) => {
32
+ if (result.status === 'fulfilled') {
33
+ return result.value;
34
+ }
35
+ else {
36
+ // Rejection from spawnSingle shouldn't happen (it catches internally),
37
+ // but handle defensively
38
+ return {
39
+ agentName: configs[index].agentName,
40
+ status: 'failed',
41
+ error: result.reason?.message || String(result.reason),
42
+ startTime: new Date(),
43
+ endTime: new Date(),
44
+ };
45
+ }
46
+ });
47
+ }
48
+ /**
49
+ * Spawn a single agent session.
50
+ * Catches all errors and returns a SpawnResult (never rejects).
51
+ */
52
+ async function spawnSingle(config, deps) {
53
+ const startTime = new Date();
54
+ try {
55
+ // Step 1: Compile charter
56
+ const charter = await deps.compileCharter(config.agentName);
57
+ // Step 2: Resolve model
58
+ const model = config.modelOverride
59
+ ? config.modelOverride
60
+ : await deps.resolveModel(charter, config.modelOverride);
61
+ // Step 3: Create session
62
+ const session = await deps.createSession({
63
+ model,
64
+ clientName: `squad-agent-${config.agentName}`,
65
+ });
66
+ // Step 4: Register in session pool
67
+ deps.sessionPool.add({
68
+ id: session.sessionId,
69
+ agentName: config.agentName,
70
+ status: 'active',
71
+ createdAt: startTime,
72
+ });
73
+ // Step 5: Send initial task message
74
+ const initialPrompt = buildInitialPrompt(config);
75
+ await session.sendMessage({
76
+ prompt: initialPrompt,
77
+ mode: 'immediate',
78
+ });
79
+ // Step 6: Emit spawn success event
80
+ await deps.eventBus.emit({
81
+ type: 'session.created',
82
+ sessionId: session.sessionId,
83
+ payload: { agentName: config.agentName, priority: config.priority || 'normal' },
84
+ timestamp: new Date(),
85
+ });
86
+ return {
87
+ agentName: config.agentName,
88
+ sessionId: session.sessionId,
89
+ status: 'success',
90
+ startTime,
91
+ endTime: new Date(),
92
+ };
93
+ }
94
+ catch (error) {
95
+ // Error isolation: one spawn failure doesn't affect others
96
+ const errorMessage = error instanceof Error ? error.message : String(error);
97
+ await deps.eventBus.emit({
98
+ type: 'session.error',
99
+ sessionId: undefined,
100
+ payload: { agentName: config.agentName, error: errorMessage },
101
+ timestamp: new Date(),
102
+ });
103
+ return {
104
+ agentName: config.agentName,
105
+ status: 'failed',
106
+ error: errorMessage,
107
+ startTime,
108
+ endTime: new Date(),
109
+ };
110
+ }
111
+ }
112
+ /**
113
+ * Build the initial prompt message for a spawned agent.
114
+ * Includes task, priority, and optional context.
115
+ */
116
+ function buildInitialPrompt(config) {
117
+ const parts = [];
118
+ if (config.priority && config.priority !== 'normal') {
119
+ parts.push(`**Priority:** ${config.priority.toUpperCase()}`);
120
+ }
121
+ parts.push('', `**Task:**`, config.task);
122
+ if (config.context) {
123
+ parts.push('', `**Context:**`, config.context);
124
+ }
125
+ return parts.join('\n');
126
+ }
127
+ // --- Event Aggregation Helper ---
128
+ /**
129
+ * Subscribe to all events from a spawned session and forward them
130
+ * to the coordinator's event bus with agent context.
131
+ *
132
+ * @param sessionId - Session ID to subscribe to
133
+ * @param agentName - Agent name for context
134
+ * @param sessionEventEmitter - Session's event emitter (if available)
135
+ * @param coordinatorEventBus - Coordinator's event bus
136
+ */
137
+ export function aggregateSessionEvents(sessionId, agentName, sessionEventEmitter, // SquadSession
138
+ coordinatorEventBus) {
139
+ // Forward all session events to coordinator's event bus
140
+ const eventTypes = [
141
+ 'message.delta',
142
+ 'message.complete',
143
+ 'tool.start',
144
+ 'tool.complete',
145
+ 'session.error',
146
+ 'session.complete',
147
+ ];
148
+ for (const eventType of eventTypes) {
149
+ if (sessionEventEmitter.on) {
150
+ sessionEventEmitter.on(eventType, (event) => {
151
+ coordinatorEventBus.emit({
152
+ type: eventType,
153
+ sessionId,
154
+ payload: { agentName, ...event },
155
+ timestamp: new Date(),
156
+ });
157
+ });
158
+ }
159
+ }
160
+ }
161
+ //# sourceMappingURL=fan-out.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fan-out.js","sourceRoot":"","sources":["../../src/coordinator/fan-out.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Coordinator Orchestrator (PRD 5)
3
+ *
4
+ * The central orchestration engine. Replaces the 32KB squad.agent.md
5
+ * prompt-based coordinator with a TypeScript program that manages
6
+ * agent sessions, routes work, and observes progress via SDK events.
7
+ */
8
+ export { SquadCoordinator, type SquadCoordinatorOptions, type CoordinatorResult, type SpawnStrategy, type CoordinatorContext, } from './coordinator.js';
9
+ export { DirectResponseHandler, type DirectResponseResult, type DirectResponseCategory, type DirectResponsePattern, } from './direct-response.js';
10
+ export { spawnParallel, aggregateSessionEvents, type AgentSpawnConfig, type SpawnResult, type FanOutDependencies, } from './fan-out.js';
11
+ export { selectResponseTier, getTier, type TierName, type TierContext, type ModelTierSuggestion, } from './response-tiers.js';
12
+ import type { SquadClient } from '../client/index.js';
13
+ import type { EventBus } from '../runtime/event-bus.js';
14
+ import type { AgentSessionManager } from '../agents/index.js';
15
+ import type { HookPipeline } from '../hooks/index.js';
16
+ import type { ToolRegistry } from '../tools/index.js';
17
+ export type ResponseTier = 'direct' | 'lightweight' | 'standard' | 'full';
18
+ export interface RoutingDecision {
19
+ /** Tier of response based on complexity */
20
+ tier: ResponseTier;
21
+ /** Target agent(s) for this request */
22
+ agents: string[];
23
+ /** Whether agents should run in parallel */
24
+ parallel: boolean;
25
+ /** Routing rationale (for observability) */
26
+ rationale: string;
27
+ }
28
+ export interface CoordinatorConfig {
29
+ /** Path to the team root (.squad/ directory) */
30
+ teamRoot: string;
31
+ /** Default model for routing decisions */
32
+ model?: string;
33
+ /** Enable parallel fan-out for multi-agent tasks */
34
+ enableParallel?: boolean;
35
+ }
36
+ export interface CoordinatorDeps {
37
+ client?: SquadClient;
38
+ eventBus?: EventBus;
39
+ agentManager?: AgentSessionManager;
40
+ hookPipeline?: HookPipeline;
41
+ toolRegistry?: ToolRegistry;
42
+ }
43
+ export declare class Coordinator {
44
+ private client;
45
+ private eventBus;
46
+ private agentManager;
47
+ private hookPipeline;
48
+ private toolRegistry;
49
+ private config;
50
+ private initialized;
51
+ private unsubscribers;
52
+ constructor(config: CoordinatorConfig, deps?: CoordinatorDeps);
53
+ /** Initialize the coordinator: wire up event subscriptions and mark ready */
54
+ initialize(): Promise<void>;
55
+ /** Route an incoming user message to the appropriate agent(s) */
56
+ route(message: string): Promise<RoutingDecision>;
57
+ /** Execute a routing decision: emit routing event on EventBus */
58
+ execute(decision: RoutingDecision, message: string): Promise<void>;
59
+ /** Graceful shutdown: unsubscribe from events and release references */
60
+ shutdown(): Promise<void>;
61
+ }
62
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/coordinator/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,kBAAkB,GACxB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,qBAAqB,EACrB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,kBAAkB,GACxB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,kBAAkB,EAClB,OAAO,EACP,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,KAAK,EAAE,WAAW,EAAsB,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAgB,MAAM,oBAAoB,CAAC;AAC5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAOtD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,aAAa,GAAG,UAAU,GAAG,MAAM,CAAC;AAE1E,MAAM,WAAW,eAAe;IAC9B,2CAA2C;IAC3C,IAAI,EAAE,YAAY,CAAC;IACnB,uCAAuC;IACvC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,4CAA4C;IAC5C,QAAQ,EAAE,OAAO,CAAC;IAClB,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAID,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAsB;gBAE/B,MAAM,EAAE,iBAAiB,EAAE,IAAI,CAAC,EAAE,eAAe;IAW7D,6EAA6E;IACvE,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA8BjC,iEAAiE;IAC3D,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA0DtD,iEAAiE;IAC3D,OAAO,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBxE,wEAAwE;IAClE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAqBhC"}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Coordinator Orchestrator (PRD 5)
3
+ *
4
+ * The central orchestration engine. Replaces the 32KB squad.agent.md
5
+ * prompt-based coordinator with a TypeScript program that manages
6
+ * agent sessions, routes work, and observes progress via SDK events.
7
+ */
8
+ // --- M3-1 Coordinator ---
9
+ export { SquadCoordinator, } from './coordinator.js';
10
+ // --- M3-6 Direct Response ---
11
+ export { DirectResponseHandler, } from './direct-response.js';
12
+ // --- M1-10 Fan-Out ---
13
+ export { spawnParallel, aggregateSessionEvents, } from './fan-out.js';
14
+ // --- M3-4 Response Tiers ---
15
+ export { selectResponseTier, getTier, } from './response-tiers.js';
16
+ import { trace, SpanStatusCode } from '@opentelemetry/api';
17
+ const tracer = trace.getTracer('squad-sdk');
18
+ export class Coordinator {
19
+ client = null;
20
+ eventBus = null;
21
+ agentManager = null;
22
+ hookPipeline = null;
23
+ toolRegistry = null;
24
+ config;
25
+ initialized = false;
26
+ unsubscribers = [];
27
+ constructor(config, deps) {
28
+ this.config = config;
29
+ if (deps) {
30
+ this.client = deps.client ?? null;
31
+ this.eventBus = deps.eventBus ?? null;
32
+ this.agentManager = deps.agentManager ?? null;
33
+ this.hookPipeline = deps.hookPipeline ?? null;
34
+ this.toolRegistry = deps.toolRegistry ?? null;
35
+ }
36
+ }
37
+ /** Initialize the coordinator: wire up event subscriptions and mark ready */
38
+ async initialize() {
39
+ const span = tracer.startSpan('squad.coordinator.initialize');
40
+ try {
41
+ if (this.eventBus) {
42
+ this.unsubscribers.push(this.eventBus.subscribe('session:created', (event) => {
43
+ console.log(`[Coordinator] Session created: ${event.sessionId ?? 'unknown'}`);
44
+ }));
45
+ this.unsubscribers.push(this.eventBus.subscribe('session:error', (event) => {
46
+ console.log(`[Coordinator] Session error: ${event.sessionId ?? 'unknown'}`);
47
+ }));
48
+ this.unsubscribers.push(this.eventBus.subscribe('session:destroyed', (event) => {
49
+ console.log(`[Coordinator] Session destroyed: ${event.sessionId ?? 'unknown'}`);
50
+ }));
51
+ }
52
+ this.initialized = true;
53
+ }
54
+ catch (err) {
55
+ span.setStatus({ code: SpanStatusCode.ERROR, message: err instanceof Error ? err.message : String(err) });
56
+ span.recordException(err instanceof Error ? err : new Error(String(err)));
57
+ throw err;
58
+ }
59
+ finally {
60
+ span.end();
61
+ }
62
+ }
63
+ /** Route an incoming user message to the appropriate agent(s) */
64
+ async route(message) {
65
+ const span = tracer.startSpan('squad.coordinator.route');
66
+ span.setAttribute('message.length', message.length);
67
+ try {
68
+ const lower = message.toLowerCase().trim();
69
+ let decision;
70
+ // Direct response: status queries, factual questions
71
+ if (/^(status|help|what is|who is|how many|show|list)\b/.test(lower)) {
72
+ decision = {
73
+ tier: 'direct',
74
+ agents: [],
75
+ parallel: false,
76
+ rationale: `Direct response for informational query: "${message}"`,
77
+ };
78
+ }
79
+ else {
80
+ // Agent name mention — route to that specific agent
81
+ const agentMention = lower.match(/@(\w+)/);
82
+ if (agentMention) {
83
+ decision = {
84
+ tier: 'standard',
85
+ agents: [agentMention[1]],
86
+ parallel: false,
87
+ rationale: `Routed to mentioned agent: ${agentMention[1]}`,
88
+ };
89
+ }
90
+ else if (/\bteam\b/.test(lower)) {
91
+ // Team-wide task — fan-out to all agents
92
+ decision = {
93
+ tier: 'full',
94
+ agents: ['all'],
95
+ parallel: true,
96
+ rationale: 'Team-wide task detected — fan-out to all agents',
97
+ };
98
+ }
99
+ else {
100
+ // Default: route to lead agent (Keaton)
101
+ decision = {
102
+ tier: 'standard',
103
+ agents: ['lead'],
104
+ parallel: false,
105
+ rationale: 'Default routing to lead agent (Keaton)',
106
+ };
107
+ }
108
+ }
109
+ span.setAttribute('routing.tier', decision.tier);
110
+ span.setAttribute('target.agents', decision.agents.join(','));
111
+ span.setAttribute('routing.reason', decision.rationale);
112
+ return decision;
113
+ }
114
+ catch (err) {
115
+ span.setStatus({ code: SpanStatusCode.ERROR, message: err instanceof Error ? err.message : String(err) });
116
+ span.recordException(err instanceof Error ? err : new Error(String(err)));
117
+ throw err;
118
+ }
119
+ finally {
120
+ span.end();
121
+ }
122
+ }
123
+ /** Execute a routing decision: emit routing event on EventBus */
124
+ async execute(decision, message) {
125
+ const span = tracer.startSpan('squad.coordinator.execute');
126
+ span.setAttribute('routing.tier', decision.tier);
127
+ span.setAttribute('target.agents', decision.agents.join(','));
128
+ try {
129
+ if (this.eventBus) {
130
+ await this.eventBus.emit({
131
+ type: 'coordinator:routing',
132
+ payload: { decision, message },
133
+ timestamp: new Date(),
134
+ });
135
+ }
136
+ }
137
+ catch (err) {
138
+ span.setStatus({ code: SpanStatusCode.ERROR, message: err instanceof Error ? err.message : String(err) });
139
+ span.recordException(err instanceof Error ? err : new Error(String(err)));
140
+ throw err;
141
+ }
142
+ finally {
143
+ span.end();
144
+ }
145
+ }
146
+ /** Graceful shutdown: unsubscribe from events and release references */
147
+ async shutdown() {
148
+ const span = tracer.startSpan('squad.coordinator.shutdown');
149
+ try {
150
+ for (const unsub of this.unsubscribers) {
151
+ unsub();
152
+ }
153
+ this.unsubscribers = [];
154
+ this.initialized = false;
155
+ this.client = null;
156
+ this.eventBus = null;
157
+ this.agentManager = null;
158
+ this.hookPipeline = null;
159
+ this.toolRegistry = null;
160
+ }
161
+ catch (err) {
162
+ span.setStatus({ code: SpanStatusCode.ERROR, message: err instanceof Error ? err.message : String(err) });
163
+ span.recordException(err instanceof Error ? err : new Error(String(err)));
164
+ throw err;
165
+ }
166
+ finally {
167
+ span.end();
168
+ }
169
+ }
170
+ }
171
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/coordinator/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Response Tier Selection (M3-4, Issue #143)
3
+ *
4
+ * Not all tasks need the same level of agent involvement. This module
5
+ * selects one of four response tiers based on message complexity,
6
+ * keyword patterns, config overrides, and history hints.
7
+ *
8
+ * Tiers:
9
+ * Direct — Answer inline, no agent spawn
10
+ * Lightweight — Single fast-model agent
11
+ * Standard — Single standard-model agent
12
+ * Full — Multi-agent fan-out (premium models)
13
+ */
14
+ import type { SquadConfig } from '../config/schema.js';
15
+ export type TierName = 'direct' | 'lightweight' | 'standard' | 'full';
16
+ export type ModelTierSuggestion = 'none' | 'fast' | 'standard' | 'premium';
17
+ export interface ResponseTier {
18
+ /** Tier identifier */
19
+ tier: TierName;
20
+ /** Suggested model tier */
21
+ modelTier: ModelTierSuggestion;
22
+ /** Maximum agents to spawn */
23
+ maxAgents: number;
24
+ /** Per-agent timeout in seconds */
25
+ timeout: number;
26
+ }
27
+ export interface TierContext {
28
+ /** Recent conversation history (summaries) */
29
+ recentHistory?: string[];
30
+ /** Names of currently available agents */
31
+ agentAvailability?: string[];
32
+ /** Number of currently active sessions */
33
+ currentLoad?: number;
34
+ }
35
+ /** Get a tier definition by name. */
36
+ export declare function getTier(name: TierName): ResponseTier;
37
+ /**
38
+ * Select the appropriate response tier for an incoming message.
39
+ *
40
+ * Priority order:
41
+ * 1. Config routing-rule tier overrides
42
+ * 2. Full-tier keyword patterns
43
+ * 3. Direct-tier keyword patterns (short / simple)
44
+ * 4. Lightweight keyword patterns
45
+ * 5. Context-based adjustments (load, history)
46
+ * 6. Default → standard
47
+ */
48
+ export declare function selectResponseTier(message: string, config: SquadConfig, context?: TierContext): ResponseTier;
49
+ //# sourceMappingURL=response-tiers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-tiers.d.ts","sourceRoot":"","sources":["../../src/coordinator/response-tiers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIvD,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,aAAa,GAAG,UAAU,GAAG,MAAM,CAAC;AAEtE,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;AAE3E,MAAM,WAAW,YAAY;IAC3B,sBAAsB;IACtB,IAAI,EAAE,QAAQ,CAAC;IACf,2BAA2B;IAC3B,SAAS,EAAE,mBAAmB,CAAC;IAC/B,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAuCD,qCAAqC;AACrC,wBAAgB,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,YAAY,CAEpD;AA8BD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,WAAgB,GACxB,YAAY,CAoCd"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Response Tier Selection (M3-4, Issue #143)
3
+ *
4
+ * Not all tasks need the same level of agent involvement. This module
5
+ * selects one of four response tiers based on message complexity,
6
+ * keyword patterns, config overrides, and history hints.
7
+ *
8
+ * Tiers:
9
+ * Direct — Answer inline, no agent spawn
10
+ * Lightweight — Single fast-model agent
11
+ * Standard — Single standard-model agent
12
+ * Full — Multi-agent fan-out (premium models)
13
+ */
14
+ // --- Tier Definitions ---
15
+ const TIER_DIRECT = {
16
+ tier: 'direct',
17
+ modelTier: 'none',
18
+ maxAgents: 0,
19
+ timeout: 0,
20
+ };
21
+ const TIER_LIGHTWEIGHT = {
22
+ tier: 'lightweight',
23
+ modelTier: 'fast',
24
+ maxAgents: 1,
25
+ timeout: 30,
26
+ };
27
+ const TIER_STANDARD = {
28
+ tier: 'standard',
29
+ modelTier: 'standard',
30
+ maxAgents: 1,
31
+ timeout: 120,
32
+ };
33
+ const TIER_FULL = {
34
+ tier: 'full',
35
+ modelTier: 'premium',
36
+ maxAgents: 5,
37
+ timeout: 300,
38
+ };
39
+ const TIERS = {
40
+ direct: TIER_DIRECT,
41
+ lightweight: TIER_LIGHTWEIGHT,
42
+ standard: TIER_STANDARD,
43
+ full: TIER_FULL,
44
+ };
45
+ /** Get a tier definition by name. */
46
+ export function getTier(name) {
47
+ return { ...TIERS[name] };
48
+ }
49
+ // --- Keyword Patterns ---
50
+ /** Patterns that suggest a direct (no-spawn) response. */
51
+ const DIRECT_PATTERNS = [
52
+ /^(hi|hello|hey|thanks|thank you|ok|okay)\b/i,
53
+ /^what('s| is) (your|the) (name|version|status)\b/i,
54
+ /^(help|usage|how do I use)\b/i,
55
+ /\?$/,
56
+ ];
57
+ /** Patterns that suggest lightweight (quick lookup / simple task). */
58
+ const LIGHTWEIGHT_PATTERNS = [
59
+ /\b(list|show|display|get|find|search|where is)\b/i,
60
+ /\b(status|info|check)\b/i,
61
+ /\b(rename|move|delete|remove)\s+\w+/i,
62
+ ];
63
+ /** Patterns that suggest full multi-agent fan-out. */
64
+ const FULL_PATTERNS = [
65
+ /\b(refactor|redesign|migrate|rewrite)\b.*\b(entire|all|whole|system|codebase)\b/i,
66
+ /\b(implement|build|create)\b.*\b(feature|module|system|service)\b/i,
67
+ /\bmulti[- ]?(agent|step|file)\b/i,
68
+ /\b(security audit|pen\s?test|vulnerability scan)\b/i,
69
+ /\bfull\s+(review|analysis|sweep)\b/i,
70
+ ];
71
+ // --- Selection Logic ---
72
+ /**
73
+ * Select the appropriate response tier for an incoming message.
74
+ *
75
+ * Priority order:
76
+ * 1. Config routing-rule tier overrides
77
+ * 2. Full-tier keyword patterns
78
+ * 3. Direct-tier keyword patterns (short / simple)
79
+ * 4. Lightweight keyword patterns
80
+ * 5. Context-based adjustments (load, history)
81
+ * 6. Default → standard
82
+ */
83
+ export function selectResponseTier(message, config, context = {}) {
84
+ const trimmed = message.trim();
85
+ // 1. Config override: check routing rules for explicit tier
86
+ const configTier = matchConfigTier(trimmed, config);
87
+ if (configTier)
88
+ return getTier(configTier);
89
+ // 2. Full patterns (checked first — they are most impactful)
90
+ if (FULL_PATTERNS.some((p) => p.test(trimmed))) {
91
+ return applyLoadAdjustment(getTier('full'), context);
92
+ }
93
+ // 3. Very short messages are usually direct
94
+ if (trimmed.length < 20 && !trimmed.includes('\n')) {
95
+ if (DIRECT_PATTERNS.some((p) => p.test(trimmed))) {
96
+ return getTier('direct');
97
+ }
98
+ }
99
+ // 4. Direct patterns (greetings, simple questions)
100
+ if (DIRECT_PATTERNS.some((p) => p.test(trimmed))) {
101
+ return getTier('direct');
102
+ }
103
+ // 5. Lightweight patterns
104
+ if (LIGHTWEIGHT_PATTERNS.some((p) => p.test(trimmed))) {
105
+ return applyLoadAdjustment(getTier('lightweight'), context);
106
+ }
107
+ // 6. History hint: if recent history contains multi-file changes → standard+
108
+ if (context.recentHistory && context.recentHistory.length > 3) {
109
+ return applyLoadAdjustment(getTier('standard'), context);
110
+ }
111
+ // Default: standard
112
+ return applyLoadAdjustment(getTier('standard'), context);
113
+ }
114
+ // --- Helpers ---
115
+ function matchConfigTier(message, config) {
116
+ if (!config.routing?.rules)
117
+ return undefined;
118
+ const lower = message.toLowerCase();
119
+ for (const rule of config.routing.rules) {
120
+ if (!rule.tier)
121
+ continue;
122
+ // Simple pattern match against the rule pattern
123
+ const words = rule.pattern
124
+ .toLowerCase()
125
+ .split(/[-_\s]+/)
126
+ .filter((w) => w.length > 2);
127
+ if (words.length > 0 && words.every((w) => lower.includes(w))) {
128
+ return rule.tier;
129
+ }
130
+ }
131
+ return undefined;
132
+ }
133
+ /**
134
+ * Downgrade tier when load is high to conserve resources.
135
+ */
136
+ function applyLoadAdjustment(tier, context) {
137
+ if (context.currentLoad === undefined)
138
+ return tier;
139
+ // If load is ≥ 4 active sessions, cap at standard
140
+ if (context.currentLoad >= 4 && tier.tier === 'full') {
141
+ return getTier('standard');
142
+ }
143
+ // If load is ≥ 6, cap at lightweight
144
+ if (context.currentLoad >= 6 && tier.tier === 'standard') {
145
+ return getTier('lightweight');
146
+ }
147
+ return tier;
148
+ }
149
+ //# sourceMappingURL=response-tiers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-tiers.js","sourceRoot":"","sources":["../../src/coordinator/response-tiers.ts"],"names":[],"mappings":"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"}