@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,29 @@
1
+ /**
2
+ * Cross-Session Event Bus (PRD 1)
3
+ *
4
+ * Pub/sub event bus for session lifecycle events. Enables the coordinator
5
+ * to observe all agent sessions from a single subscription point.
6
+ * Decouples event producers (sessions) from consumers (coordinator, Ralph, UI).
7
+ */
8
+ export type SquadEventType = 'session.created' | 'session.destroyed' | 'session.status_changed' | 'session.message' | 'session.tool_call' | 'session.error' | 'agent.milestone' | 'coordinator.routing' | 'pool.health';
9
+ export interface SquadEvent {
10
+ type: SquadEventType;
11
+ sessionId?: string;
12
+ agentName?: string;
13
+ payload: unknown;
14
+ timestamp: Date;
15
+ }
16
+ export type EventHandler = (event: SquadEvent) => void | Promise<void>;
17
+ export declare class EventBus {
18
+ private handlers;
19
+ private allHandlers;
20
+ /** Subscribe to a specific event type */
21
+ on(type: SquadEventType, handler: EventHandler): () => void;
22
+ /** Subscribe to all events */
23
+ onAny(handler: EventHandler): () => void;
24
+ /** Emit an event to all matching subscribers */
25
+ emit(event: SquadEvent): Promise<void>;
26
+ /** Remove all handlers */
27
+ clear(): void;
28
+ }
29
+ //# sourceMappingURL=event-bus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../src/client/event-bus.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,MAAM,cAAc,GACtB,iBAAiB,GACjB,mBAAmB,GACnB,wBAAwB,GACxB,iBAAiB,GACjB,mBAAmB,GACnB,eAAe,GACf,iBAAiB,GACjB,qBAAqB,GACrB,aAAa,CAAC;AAElB,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAIvE,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAqD;IACrE,OAAO,CAAC,WAAW,CAAgC;IAEnD,yCAAyC;IACzC,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,IAAI;IAY3D,8BAA8B;IAC9B,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,IAAI;IAOxC,gDAAgD;IAC1C,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB5C,0BAA0B;IAC1B,KAAK,IAAI,IAAI;CAId"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Cross-Session Event Bus (PRD 1)
3
+ *
4
+ * Pub/sub event bus for session lifecycle events. Enables the coordinator
5
+ * to observe all agent sessions from a single subscription point.
6
+ * Decouples event producers (sessions) from consumers (coordinator, Ralph, UI).
7
+ */
8
+ // --- Event Bus ---
9
+ export class EventBus {
10
+ handlers = new Map();
11
+ allHandlers = new Set();
12
+ /** Subscribe to a specific event type */
13
+ on(type, handler) {
14
+ if (!this.handlers.has(type)) {
15
+ this.handlers.set(type, new Set());
16
+ }
17
+ this.handlers.get(type).add(handler);
18
+ // Return unsubscribe function
19
+ return () => {
20
+ this.handlers.get(type)?.delete(handler);
21
+ };
22
+ }
23
+ /** Subscribe to all events */
24
+ onAny(handler) {
25
+ this.allHandlers.add(handler);
26
+ return () => {
27
+ this.allHandlers.delete(handler);
28
+ };
29
+ }
30
+ /** Emit an event to all matching subscribers */
31
+ async emit(event) {
32
+ const typeHandlers = this.handlers.get(event.type) ?? new Set();
33
+ const allPromises = [];
34
+ for (const handler of typeHandlers) {
35
+ const result = handler(event);
36
+ if (result instanceof Promise)
37
+ allPromises.push(result);
38
+ }
39
+ for (const handler of this.allHandlers) {
40
+ const result = handler(event);
41
+ if (result instanceof Promise)
42
+ allPromises.push(result);
43
+ }
44
+ await Promise.all(allPromises);
45
+ }
46
+ /** Remove all handlers */
47
+ clear() {
48
+ this.handlers.clear();
49
+ this.allHandlers.clear();
50
+ }
51
+ }
52
+ //# sourceMappingURL=event-bus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../../src/client/event-bus.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAyBH,oBAAoB;AAEpB,MAAM,OAAO,QAAQ;IACX,QAAQ,GAA2C,IAAI,GAAG,EAAE,CAAC;IAC7D,WAAW,GAAsB,IAAI,GAAG,EAAE,CAAC;IAEnD,yCAAyC;IACzC,EAAE,CAAC,IAAoB,EAAE,OAAqB;QAC5C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEtC,8BAA8B;QAC9B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC,CAAC;IACJ,CAAC;IAED,8BAA8B;IAC9B,KAAK,CAAC,OAAqB;QACzB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC,CAAC;IACJ,CAAC;IAED,gDAAgD;IAChD,KAAK,CAAC,IAAI,CAAC,KAAiB;QAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;QAChE,MAAM,WAAW,GAAoB,EAAE,CAAC;QAExC,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,MAAM,YAAY,OAAO;gBAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1D,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,MAAM,YAAY,OAAO;gBAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACjC,CAAC;IAED,0BAA0B;IAC1B,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;CACF"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Squad Client — High-Level API with Session Pool Management (PRD 1)
3
+ *
4
+ * This module provides the main Squad client API that combines:
5
+ * - SquadClient adapter (from adapter/client.ts) for connection management
6
+ * - SessionPool for multi-session lifecycle management
7
+ * - EventBus for cross-session event handling
8
+ *
9
+ * Applications should import from this module, not from adapter/ directly.
10
+ */
11
+ export { SquadClient, type SquadClientOptions, type SquadConnectionState, } from '../adapter/client.js';
12
+ export type { SquadSession, SquadSessionConfig, SquadSessionMetadata, SquadGetStatusResponse, SquadGetAuthStatusResponse, SquadModelInfo, } from '../adapter/types.js';
13
+ export type SessionStatus = 'creating' | 'active' | 'idle' | 'error' | 'destroyed';
14
+ export { SessionPool, type SessionPoolConfig, type PoolEvent, DEFAULT_POOL_CONFIG } from './session-pool.js';
15
+ export { EventBus, type SquadEvent, type SquadEventType } from './event-bus.js';
16
+ import { type SquadClientOptions } from '../adapter/client.js';
17
+ import type { SquadSession, SquadSessionConfig } from '../adapter/types.js';
18
+ import { SessionPool, type SessionPoolConfig } from './session-pool.js';
19
+ import { EventBus } from './event-bus.js';
20
+ export interface SquadClientWithPoolConfig extends SquadClientOptions {
21
+ /** Session pool configuration */
22
+ pool?: Partial<SessionPoolConfig>;
23
+ }
24
+ /**
25
+ * Squad Client with integrated session pool management.
26
+ *
27
+ * This is the recommended client for applications that need to manage
28
+ * multiple concurrent agent sessions. It provides:
29
+ * - Connection lifecycle management (from SquadClient)
30
+ * - Session pool with capacity limits and health checks
31
+ * - Event bus for cross-session event handling
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * const client = new SquadClientWithPool({
36
+ * pool: { maxConcurrent: 5 }
37
+ * });
38
+ *
39
+ * await client.connect();
40
+ *
41
+ * const session1 = await client.createSession({ model: 'claude-sonnet-4.5' });
42
+ * const session2 = await client.createSession({ model: 'claude-haiku-4.5' });
43
+ *
44
+ * client.eventBus.on('session.created', (event) => {
45
+ * console.log('New session:', event.sessionId);
46
+ * });
47
+ *
48
+ * await client.shutdown();
49
+ * ```
50
+ */
51
+ export declare class SquadClientWithPool {
52
+ private baseClient;
53
+ readonly pool: SessionPool;
54
+ readonly eventBus: EventBus;
55
+ constructor(config?: SquadClientWithPoolConfig);
56
+ /** Connect to the Copilot CLI server */
57
+ connect(): Promise<void>;
58
+ /** Disconnect from the Copilot CLI server */
59
+ disconnect(): Promise<Error[]>;
60
+ /** Force disconnect without graceful cleanup */
61
+ forceDisconnect(): Promise<void>;
62
+ /** Get current connection state */
63
+ getState(): import("../adapter/client.js").SquadConnectionState;
64
+ /** Check if connected */
65
+ isConnected(): boolean;
66
+ /**
67
+ * Create a new session and add it to the pool.
68
+ * Throws if the pool is at capacity.
69
+ */
70
+ createSession(config?: SquadSessionConfig): Promise<SquadSession>;
71
+ /**
72
+ * Resume an existing session and add it to the pool if not present.
73
+ */
74
+ resumeSession(sessionId: string, config?: SquadSessionConfig): Promise<SquadSession>;
75
+ /**
76
+ * Delete a session and remove it from the pool.
77
+ */
78
+ deleteSession(sessionId: string): Promise<void>;
79
+ /** List all sessions from the base client */
80
+ listSessions(): Promise<import("../adapter/types.js").SquadSessionMetadata[]>;
81
+ /** Send a ping to verify connectivity */
82
+ ping(message?: string): Promise<{
83
+ message: string;
84
+ timestamp: number;
85
+ protocolVersion?: number;
86
+ }>;
87
+ /** Get CLI status information */
88
+ getStatus(): Promise<import("../adapter/types.js").SquadGetStatusResponse>;
89
+ /** Get authentication status */
90
+ getAuthStatus(): Promise<import("../adapter/types.js").SquadGetAuthStatusResponse>;
91
+ /** List available models */
92
+ listModels(): Promise<import("../adapter/types.js").SquadModelInfo[]>;
93
+ /** Subscribe to session lifecycle events */
94
+ on(eventType: any, handler: any): () => void;
95
+ /**
96
+ * Graceful shutdown — destroy all sessions and disconnect.
97
+ */
98
+ shutdown(): Promise<void>;
99
+ }
100
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EACL,WAAW,EACX,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,cAAc,GACf,MAAM,qBAAqB,CAAC;AAG7B,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;AAGnF,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,KAAK,SAAS,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7G,OAAO,EAAE,QAAQ,EAAE,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAIhF,OAAO,EAAkC,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,WAAW,yBAA0B,SAAQ,kBAAkB;IACnE,iCAAiC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,UAAU,CAAkB;IACpC,SAAgB,IAAI,EAAE,WAAW,CAAC;IAClC,SAAgB,QAAQ,EAAE,QAAQ,CAAC;gBAEvB,MAAM,GAAE,yBAA8B;IAgBlD,wCAAwC;IAClC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,6CAA6C;IACvC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAKpC,gDAAgD;IAC1C,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtC,mCAAmC;IACnC,QAAQ;IAIR,yBAAyB;IACzB,WAAW,IAAI,OAAO;IAItB;;;OAGG;IACG,aAAa,CAAC,MAAM,GAAE,kBAAuB,GAAG,OAAO,CAAC,YAAY,CAAC;IAuB3E;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,GAAE,kBAAuB,GAAG,OAAO,CAAC,YAAY,CAAC;IAgB9F;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYrD,6CAA6C;IACvC,YAAY;IAIlB,yCAAyC;IACnC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM;;;;;IAI3B,iCAAiC;IAC3B,SAAS;IAIf,gCAAgC;IAC1B,aAAa;IAInB,4BAA4B;IACtB,UAAU;IAIhB,4CAA4C;IAC5C,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;IAI/B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAIhC"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * Squad Client — High-Level API with Session Pool Management (PRD 1)
3
+ *
4
+ * This module provides the main Squad client API that combines:
5
+ * - SquadClient adapter (from adapter/client.ts) for connection management
6
+ * - SessionPool for multi-session lifecycle management
7
+ * - EventBus for cross-session event handling
8
+ *
9
+ * Applications should import from this module, not from adapter/ directly.
10
+ */
11
+ // Re-export core types and classes from adapter layer
12
+ export { SquadClient, } from '../adapter/client.js';
13
+ // Re-export pool and event bus
14
+ export { SessionPool, DEFAULT_POOL_CONFIG } from './session-pool.js';
15
+ export { EventBus } from './event-bus.js';
16
+ // --- High-Level Client with Pool Management ---
17
+ import { SquadClient as BaseSquadClient } from '../adapter/client.js';
18
+ import { SessionPool } from './session-pool.js';
19
+ import { EventBus } from './event-bus.js';
20
+ /**
21
+ * Squad Client with integrated session pool management.
22
+ *
23
+ * This is the recommended client for applications that need to manage
24
+ * multiple concurrent agent sessions. It provides:
25
+ * - Connection lifecycle management (from SquadClient)
26
+ * - Session pool with capacity limits and health checks
27
+ * - Event bus for cross-session event handling
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * const client = new SquadClientWithPool({
32
+ * pool: { maxConcurrent: 5 }
33
+ * });
34
+ *
35
+ * await client.connect();
36
+ *
37
+ * const session1 = await client.createSession({ model: 'claude-sonnet-4.5' });
38
+ * const session2 = await client.createSession({ model: 'claude-haiku-4.5' });
39
+ *
40
+ * client.eventBus.on('session.created', (event) => {
41
+ * console.log('New session:', event.sessionId);
42
+ * });
43
+ *
44
+ * await client.shutdown();
45
+ * ```
46
+ */
47
+ export class SquadClientWithPool {
48
+ baseClient;
49
+ pool;
50
+ eventBus;
51
+ constructor(config = {}) {
52
+ this.baseClient = new BaseSquadClient(config);
53
+ this.pool = new SessionPool(config.pool);
54
+ this.eventBus = new EventBus();
55
+ // Wire pool events to event bus
56
+ this.pool.on((event) => {
57
+ this.eventBus.emit({
58
+ type: event.type,
59
+ sessionId: event.sessionId,
60
+ payload: event,
61
+ timestamp: event.timestamp,
62
+ });
63
+ });
64
+ }
65
+ /** Connect to the Copilot CLI server */
66
+ async connect() {
67
+ return this.baseClient.connect();
68
+ }
69
+ /** Disconnect from the Copilot CLI server */
70
+ async disconnect() {
71
+ await this.pool.shutdown();
72
+ return this.baseClient.disconnect();
73
+ }
74
+ /** Force disconnect without graceful cleanup */
75
+ async forceDisconnect() {
76
+ await this.pool.shutdown();
77
+ return this.baseClient.forceDisconnect();
78
+ }
79
+ /** Get current connection state */
80
+ getState() {
81
+ return this.baseClient.getState();
82
+ }
83
+ /** Check if connected */
84
+ isConnected() {
85
+ return this.baseClient.isConnected();
86
+ }
87
+ /**
88
+ * Create a new session and add it to the pool.
89
+ * Throws if the pool is at capacity.
90
+ */
91
+ async createSession(config = {}) {
92
+ const session = await this.baseClient.createSession(config);
93
+ // Convert to pool-compatible session format
94
+ const poolSession = {
95
+ id: session.sessionId,
96
+ agentName: config.model ?? 'default',
97
+ status: 'active',
98
+ createdAt: new Date(),
99
+ };
100
+ this.pool.add(poolSession);
101
+ await this.eventBus.emit({
102
+ type: 'session.created',
103
+ sessionId: session.sessionId,
104
+ payload: { session },
105
+ timestamp: new Date(),
106
+ });
107
+ return session;
108
+ }
109
+ /**
110
+ * Resume an existing session and add it to the pool if not present.
111
+ */
112
+ async resumeSession(sessionId, config = {}) {
113
+ const session = await this.baseClient.resumeSession(sessionId, config);
114
+ if (!this.pool.get(sessionId)) {
115
+ const poolSession = {
116
+ id: session.sessionId,
117
+ agentName: config.model ?? 'resumed',
118
+ status: 'active',
119
+ createdAt: new Date(),
120
+ };
121
+ this.pool.add(poolSession);
122
+ }
123
+ return session;
124
+ }
125
+ /**
126
+ * Delete a session and remove it from the pool.
127
+ */
128
+ async deleteSession(sessionId) {
129
+ await this.baseClient.deleteSession(sessionId);
130
+ this.pool.remove(sessionId);
131
+ await this.eventBus.emit({
132
+ type: 'session.destroyed',
133
+ sessionId,
134
+ payload: null,
135
+ timestamp: new Date(),
136
+ });
137
+ }
138
+ /** List all sessions from the base client */
139
+ async listSessions() {
140
+ return this.baseClient.listSessions();
141
+ }
142
+ /** Send a ping to verify connectivity */
143
+ async ping(message) {
144
+ return this.baseClient.ping(message);
145
+ }
146
+ /** Get CLI status information */
147
+ async getStatus() {
148
+ return this.baseClient.getStatus();
149
+ }
150
+ /** Get authentication status */
151
+ async getAuthStatus() {
152
+ return this.baseClient.getAuthStatus();
153
+ }
154
+ /** List available models */
155
+ async listModels() {
156
+ return this.baseClient.listModels();
157
+ }
158
+ /** Subscribe to session lifecycle events */
159
+ on(eventType, handler) {
160
+ return this.baseClient.on(eventType, handler);
161
+ }
162
+ /**
163
+ * Graceful shutdown — destroy all sessions and disconnect.
164
+ */
165
+ async shutdown() {
166
+ await this.pool.shutdown();
167
+ await this.baseClient.disconnect();
168
+ }
169
+ }
170
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Session Pool Manager (PRD 1)
3
+ *
4
+ * Manages the lifecycle of multiple concurrent agent sessions.
5
+ * Tracks session state, enforces concurrency limits, and handles
6
+ * cleanup of idle/errored sessions.
7
+ */
8
+ export type SessionStatus = 'creating' | 'active' | 'idle' | 'error' | 'destroyed';
9
+ export interface SquadSession {
10
+ id: string;
11
+ agentName: string;
12
+ status: SessionStatus;
13
+ createdAt: Date;
14
+ }
15
+ export interface SessionPoolConfig {
16
+ /** Maximum concurrent sessions */
17
+ maxConcurrent: number;
18
+ /** Idle timeout before auto-cleanup (ms) */
19
+ idleTimeout: number;
20
+ /** Health check interval (ms) */
21
+ healthCheckInterval: number;
22
+ }
23
+ export declare const DEFAULT_POOL_CONFIG: SessionPoolConfig;
24
+ export type PoolEventType = 'session.added' | 'session.removed' | 'session.status_changed' | 'pool.at_capacity' | 'pool.health_check';
25
+ export interface PoolEvent {
26
+ type: PoolEventType;
27
+ sessionId?: string;
28
+ oldStatus?: SessionStatus;
29
+ newStatus?: SessionStatus;
30
+ timestamp: Date;
31
+ }
32
+ export declare class SessionPool {
33
+ private config;
34
+ private sessions;
35
+ private healthCheckTimer;
36
+ private cleanupTimer;
37
+ private listeners;
38
+ constructor(config?: Partial<SessionPoolConfig>);
39
+ /** Add a session to the pool */
40
+ add(session: SquadSession): void;
41
+ /** Remove a session from the pool */
42
+ remove(sessionId: string): boolean;
43
+ /** Get a session by ID */
44
+ get(sessionId: string): SquadSession | undefined;
45
+ /** Find a session by agent name */
46
+ findByAgent(agentName: string): SquadSession | undefined;
47
+ /** Get all active sessions */
48
+ active(): SquadSession[];
49
+ /** Update session status and emit event */
50
+ updateStatus(sessionId: string, newStatus: SessionStatus): void;
51
+ /** Current pool size */
52
+ get size(): number;
53
+ /** Whether the pool is at capacity */
54
+ get atCapacity(): boolean;
55
+ /** Destroy all sessions and stop timers */
56
+ shutdown(): Promise<void>;
57
+ /** Subscribe to pool events */
58
+ on(handler: (event: PoolEvent) => void): () => void;
59
+ /** Emit a pool event to all listeners */
60
+ private emitEvent;
61
+ /** Start the health check timer */
62
+ private startHealthCheckTimer;
63
+ /** Start the idle session cleanup timer */
64
+ private startCleanupTimer;
65
+ }
66
+ //# sourceMappingURL=session-pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-pool.d.ts","sourceRoot":"","sources":["../../src/client/session-pool.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;AAEnF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,IAAI,CAAC;CACjB;AAID,MAAM,WAAW,iBAAiB;IAChC,kCAAkC;IAClC,aAAa,EAAE,MAAM,CAAC;IAEtB,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IAEpB,iCAAiC;IACjC,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,mBAAmB,EAAE,iBAIjC,CAAC;AAIF,MAAM,MAAM,aAAa,GACrB,eAAe,GACf,iBAAiB,GACjB,wBAAwB,GACxB,kBAAkB,GAClB,mBAAmB,CAAC;AAExB,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,SAAS,EAAE,IAAI,CAAC;CACjB;AAID,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,QAAQ,CAAwC;IACxD,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,SAAS,CAAyC;gBAE9C,MAAM,GAAE,OAAO,CAAC,iBAAiB,CAAM;IAMnD,gCAAgC;IAChC,GAAG,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAgBhC,qCAAqC;IACrC,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAYlC,0BAA0B;IAC1B,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIhD,mCAAmC;IACnC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAOxD,8BAA8B;IAC9B,MAAM,IAAI,YAAY,EAAE;IAIxB,2CAA2C;IAC3C,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,GAAG,IAAI;IAiB/D,wBAAwB;IACxB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,sCAAsC;IACtC,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,2CAA2C;IACrC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAY/B,+BAA+B;IAC/B,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI;IAQnD,yCAAyC;IACzC,OAAO,CAAC,SAAS;IAMjB,mCAAmC;IACnC,OAAO,CAAC,qBAAqB;IAS7B,2CAA2C;IAC3C,OAAO,CAAC,iBAAiB;CAa1B"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Session Pool Manager (PRD 1)
3
+ *
4
+ * Manages the lifecycle of multiple concurrent agent sessions.
5
+ * Tracks session state, enforces concurrency limits, and handles
6
+ * cleanup of idle/errored sessions.
7
+ */
8
+ export const DEFAULT_POOL_CONFIG = {
9
+ maxConcurrent: 10,
10
+ idleTimeout: 300_000, // 5 minutes
11
+ healthCheckInterval: 30_000, // 30 seconds
12
+ };
13
+ // --- Session Pool ---
14
+ export class SessionPool {
15
+ config;
16
+ sessions = new Map();
17
+ healthCheckTimer = null;
18
+ cleanupTimer = null;
19
+ listeners = [];
20
+ constructor(config = {}) {
21
+ this.config = { ...DEFAULT_POOL_CONFIG, ...config };
22
+ this.startHealthCheckTimer();
23
+ this.startCleanupTimer();
24
+ }
25
+ /** Add a session to the pool */
26
+ add(session) {
27
+ if (this.atCapacity) {
28
+ this.emitEvent({
29
+ type: 'pool.at_capacity',
30
+ timestamp: new Date(),
31
+ });
32
+ throw new Error(`SessionPool at capacity (${this.config.maxConcurrent})`);
33
+ }
34
+ this.sessions.set(session.id, session);
35
+ this.emitEvent({
36
+ type: 'session.added',
37
+ sessionId: session.id,
38
+ timestamp: new Date(),
39
+ });
40
+ }
41
+ /** Remove a session from the pool */
42
+ remove(sessionId) {
43
+ const existed = this.sessions.delete(sessionId);
44
+ if (existed) {
45
+ this.emitEvent({
46
+ type: 'session.removed',
47
+ sessionId,
48
+ timestamp: new Date(),
49
+ });
50
+ }
51
+ return existed;
52
+ }
53
+ /** Get a session by ID */
54
+ get(sessionId) {
55
+ return this.sessions.get(sessionId);
56
+ }
57
+ /** Find a session by agent name */
58
+ findByAgent(agentName) {
59
+ for (const session of this.sessions.values()) {
60
+ if (session.agentName === agentName)
61
+ return session;
62
+ }
63
+ return undefined;
64
+ }
65
+ /** Get all active sessions */
66
+ active() {
67
+ return Array.from(this.sessions.values()).filter(s => s.status === 'active');
68
+ }
69
+ /** Update session status and emit event */
70
+ updateStatus(sessionId, newStatus) {
71
+ const session = this.sessions.get(sessionId);
72
+ if (!session)
73
+ return;
74
+ const oldStatus = session.status;
75
+ if (oldStatus !== newStatus) {
76
+ session.status = newStatus;
77
+ this.emitEvent({
78
+ type: 'session.status_changed',
79
+ sessionId,
80
+ oldStatus,
81
+ newStatus,
82
+ timestamp: new Date(),
83
+ });
84
+ }
85
+ }
86
+ /** Current pool size */
87
+ get size() {
88
+ return this.sessions.size;
89
+ }
90
+ /** Whether the pool is at capacity */
91
+ get atCapacity() {
92
+ return this.sessions.size >= this.config.maxConcurrent;
93
+ }
94
+ /** Destroy all sessions and stop timers */
95
+ async shutdown() {
96
+ if (this.healthCheckTimer) {
97
+ clearInterval(this.healthCheckTimer);
98
+ this.healthCheckTimer = null;
99
+ }
100
+ if (this.cleanupTimer) {
101
+ clearInterval(this.cleanupTimer);
102
+ this.cleanupTimer = null;
103
+ }
104
+ this.sessions.clear();
105
+ }
106
+ /** Subscribe to pool events */
107
+ on(handler) {
108
+ this.listeners.push(handler);
109
+ return () => {
110
+ const index = this.listeners.indexOf(handler);
111
+ if (index !== -1)
112
+ this.listeners.splice(index, 1);
113
+ };
114
+ }
115
+ /** Emit a pool event to all listeners */
116
+ emitEvent(event) {
117
+ for (const listener of this.listeners) {
118
+ listener(event);
119
+ }
120
+ }
121
+ /** Start the health check timer */
122
+ startHealthCheckTimer() {
123
+ this.healthCheckTimer = setInterval(() => {
124
+ this.emitEvent({
125
+ type: 'pool.health_check',
126
+ timestamp: new Date(),
127
+ });
128
+ }, this.config.healthCheckInterval);
129
+ }
130
+ /** Start the idle session cleanup timer */
131
+ startCleanupTimer() {
132
+ this.cleanupTimer = setInterval(() => {
133
+ const now = Date.now();
134
+ for (const session of this.sessions.values()) {
135
+ if (session.status === 'idle') {
136
+ const idleTime = now - session.createdAt.getTime();
137
+ if (idleTime > this.config.idleTimeout) {
138
+ this.remove(session.id);
139
+ }
140
+ }
141
+ }
142
+ }, this.config.idleTimeout);
143
+ }
144
+ }
145
+ //# sourceMappingURL=session-pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-pool.js","sourceRoot":"","sources":["../../src/client/session-pool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Agent Documentation Parser (M2-12)
3
+ *
4
+ * Extracts structured metadata from .agent.md files so the markdown
5
+ * becomes a reference document while typed config remains the runtime
6
+ * source of truth.
7
+ *
8
+ * @module config/agent-doc
9
+ */
10
+ /**
11
+ * Structured metadata extracted from an agent .md file.
12
+ */
13
+ export interface AgentDocMetadata {
14
+ /** Agent name from the IDENTITY section or top-level heading */
15
+ name?: string;
16
+ /** One-line description / role */
17
+ description?: string;
18
+ /** Capability strings listed under CAPABILITIES */
19
+ capabilities: string[];
20
+ /** Routing hints (work-type patterns this agent handles) */
21
+ routingHints: string[];
22
+ /** Model preferences (e.g. "claude-sonnet-4.5") */
23
+ modelPreferences: string[];
24
+ /** Constraints / boundaries the agent must follow */
25
+ constraints: string[];
26
+ /** Tool names the agent is allowed to use */
27
+ tools: string[];
28
+ /** Extra sections not in the standard set, keyed by heading */
29
+ extraSections: Record<string, string>;
30
+ }
31
+ /**
32
+ * Parse an agent .agent.md file into structured metadata.
33
+ *
34
+ * Recognised top-level (##) sections:
35
+ * IDENTITY, CAPABILITIES, ROUTING, CONSTRAINTS, TOOLS
36
+ *
37
+ * Any other ## sections are captured in `extraSections`.
38
+ *
39
+ * @param markdown - Raw markdown content of the agent doc
40
+ * @returns Parsed metadata
41
+ */
42
+ export declare function parseAgentDoc(markdown: string): AgentDocMetadata;
43
+ //# sourceMappingURL=agent-doc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-doc.d.ts","sourceRoot":"","sources":["../../src/config/agent-doc.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,mDAAmD;IACnD,YAAY,EAAE,MAAM,EAAE,CAAC;IAEvB,4DAA4D;IAC5D,YAAY,EAAE,MAAM,EAAE,CAAC;IAEvB,mDAAmD;IACnD,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAE3B,qDAAqD;IACrD,WAAW,EAAE,MAAM,EAAE,CAAC;IAEtB,6CAA6C;IAC7C,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB,+DAA+D;IAC/D,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAWD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAmDhE"}