@bradygaster/squad-sdk 0.6.2 → 0.8.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 (306) hide show
  1. package/README.md +296 -296
  2. package/dist/adapter/client.d.ts +225 -0
  3. package/dist/adapter/client.d.ts.map +1 -0
  4. package/dist/adapter/client.js +397 -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 +68 -0
  23. package/dist/agents/index.d.ts.map +1 -0
  24. package/dist/agents/index.js +74 -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 +258 -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 +198 -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 +37 -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 +53 -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 +369 -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 +174 -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 +47 -0
  159. package/dist/coordinator/index.d.ts.map +1 -0
  160. package/dist/coordinator/index.js +54 -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 +24 -1
  171. package/dist/index.d.ts.map +1 -1
  172. package/dist/index.js +23 -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 +56 -0
  207. package/dist/ralph/index.d.ts.map +1 -0
  208. package/dist/ralph/index.js +61 -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 +313 -0
  219. package/dist/runtime/config.d.ts.map +1 -0
  220. package/dist/runtime/config.js +466 -0
  221. package/dist/runtime/config.js.map +1 -0
  222. package/dist/runtime/cost-tracker.d.ts +73 -0
  223. package/dist/runtime/cost-tracker.d.ts.map +1 -0
  224. package/dist/runtime/cost-tracker.js +157 -0
  225. package/dist/runtime/cost-tracker.js.map +1 -0
  226. package/dist/runtime/event-bus.d.ts +190 -0
  227. package/dist/runtime/event-bus.d.ts.map +1 -0
  228. package/dist/runtime/event-bus.js +218 -0
  229. package/dist/runtime/event-bus.js.map +1 -0
  230. package/dist/runtime/health.d.ts +66 -0
  231. package/dist/runtime/health.d.ts.map +1 -0
  232. package/dist/runtime/health.js +111 -0
  233. package/dist/runtime/health.js.map +1 -0
  234. package/dist/runtime/i18n.d.ts +54 -0
  235. package/dist/runtime/i18n.d.ts.map +1 -0
  236. package/dist/runtime/i18n.js +126 -0
  237. package/dist/runtime/i18n.js.map +1 -0
  238. package/dist/runtime/offline.d.ts +64 -0
  239. package/dist/runtime/offline.d.ts.map +1 -0
  240. package/dist/runtime/offline.js +108 -0
  241. package/dist/runtime/offline.js.map +1 -0
  242. package/dist/runtime/streaming.d.ts +97 -0
  243. package/dist/runtime/streaming.d.ts.map +1 -0
  244. package/dist/runtime/streaming.js +156 -0
  245. package/dist/runtime/streaming.js.map +1 -0
  246. package/dist/runtime/telemetry.d.ts +82 -0
  247. package/dist/runtime/telemetry.d.ts.map +1 -0
  248. package/dist/runtime/telemetry.js +120 -0
  249. package/dist/runtime/telemetry.js.map +1 -0
  250. package/dist/sharing/agent-repo.d.ts +33 -0
  251. package/dist/sharing/agent-repo.d.ts.map +1 -0
  252. package/dist/sharing/agent-repo.js +79 -0
  253. package/dist/sharing/agent-repo.js.map +1 -0
  254. package/dist/sharing/cache.d.ts +36 -0
  255. package/dist/sharing/cache.d.ts.map +1 -0
  256. package/dist/sharing/cache.js +85 -0
  257. package/dist/sharing/cache.js.map +1 -0
  258. package/dist/sharing/conflicts.d.ts +32 -0
  259. package/dist/sharing/conflicts.d.ts.map +1 -0
  260. package/dist/sharing/conflicts.js +121 -0
  261. package/dist/sharing/conflicts.js.map +1 -0
  262. package/dist/sharing/export.d.ts +50 -0
  263. package/dist/sharing/export.d.ts.map +1 -0
  264. package/dist/sharing/export.js +156 -0
  265. package/dist/sharing/export.js.map +1 -0
  266. package/dist/sharing/history-split.d.ts +34 -0
  267. package/dist/sharing/history-split.d.ts.map +1 -0
  268. package/dist/sharing/history-split.js +101 -0
  269. package/dist/sharing/history-split.js.map +1 -0
  270. package/dist/sharing/import.d.ts +37 -0
  271. package/dist/sharing/import.d.ts.map +1 -0
  272. package/dist/sharing/import.js +138 -0
  273. package/dist/sharing/import.js.map +1 -0
  274. package/dist/sharing/index.d.ts +11 -0
  275. package/dist/sharing/index.d.ts.map +1 -0
  276. package/dist/sharing/index.js +11 -0
  277. package/dist/sharing/index.js.map +1 -0
  278. package/dist/sharing/versioning.d.ts +32 -0
  279. package/dist/sharing/versioning.d.ts.map +1 -0
  280. package/dist/sharing/versioning.js +64 -0
  281. package/dist/sharing/versioning.js.map +1 -0
  282. package/dist/skills/index.d.ts +49 -0
  283. package/dist/skills/index.d.ts.map +1 -0
  284. package/dist/skills/index.js +85 -0
  285. package/dist/skills/index.js.map +1 -0
  286. package/dist/skills/skill-loader.d.ts +56 -0
  287. package/dist/skills/skill-loader.d.ts.map +1 -0
  288. package/dist/skills/skill-loader.js +106 -0
  289. package/dist/skills/skill-loader.js.map +1 -0
  290. package/dist/skills/skill-source.d.ts +63 -0
  291. package/dist/skills/skill-source.d.ts.map +1 -0
  292. package/dist/skills/skill-source.js +199 -0
  293. package/dist/skills/skill-source.js.map +1 -0
  294. package/dist/tools/index.d.ts +87 -0
  295. package/dist/tools/index.d.ts.map +1 -0
  296. package/dist/tools/index.js +419 -0
  297. package/dist/tools/index.js.map +1 -0
  298. package/dist/types.d.ts +43 -0
  299. package/dist/types.d.ts.map +1 -0
  300. package/dist/types.js +8 -0
  301. package/dist/types.js.map +1 -0
  302. package/dist/utils/normalize-eol.d.ts +6 -0
  303. package/dist/utils/normalize-eol.d.ts.map +1 -0
  304. package/dist/utils/normalize-eol.js +8 -0
  305. package/dist/utils/normalize-eol.js.map +1 -0
  306. package/package.json +115 -39
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Agent Session Lifecycle (PRD 4)
3
+ *
4
+ * Manages the full agent lifecycle: spawn → active → idle → cleanup.
5
+ * Compiles charter.md files into SDK CustomAgentConfig objects.
6
+ * Injects dynamic context via session hooks instead of string templates.
7
+ */
8
+ export { compileCharter, compileCharterFull, parseCharterMarkdown, type CharterCompileOptions, type CharterConfigOverrides, type ParsedCharter, type CompiledCharter, } from './charter-compiler.js';
9
+ export { resolveModel, inferTierFromModel, isTierFallbackAllowed, ModelFallbackExecutor, type ModelResolutionOptions, type ResolvedModel, type TaskType, type ModelTier, type ModelResolutionSource, type FallbackExecutorConfig, type FallbackAttempt, type FallbackResult, } from './model-selector.js';
10
+ export { AgentLifecycleManager, type AgentHandle, type AgentStatus, type SpawnAgentOptions, type LifecycleManagerConfig, } from './lifecycle.js';
11
+ export { createHistoryShadow, appendToHistory, readHistory, shadowExists, deleteHistoryShadow, type HistorySection, type ParsedHistory, } from './history-shadow.js';
12
+ export interface AgentCharter {
13
+ /** Agent name (e.g., 'fenster', 'verbal') */
14
+ name: string;
15
+ /** Display name (e.g., 'Fenster — Core Dev') */
16
+ displayName: string;
17
+ /** Role description */
18
+ role: string;
19
+ /** Expertise areas */
20
+ expertise: string[];
21
+ /** Working style */
22
+ style: string;
23
+ /** Full charter prompt content */
24
+ prompt: string;
25
+ /** Allowed tools for this agent */
26
+ allowedTools?: string[];
27
+ /** Excluded tools for this agent */
28
+ excludedTools?: string[];
29
+ /** Model preference from charter */
30
+ modelPreference?: string;
31
+ }
32
+ export type AgentLifecycleState = 'pending' | 'spawning' | 'active' | 'idle' | 'error' | 'destroyed';
33
+ export interface AgentSessionInfo {
34
+ charter: AgentCharter;
35
+ sessionId: string | null;
36
+ state: AgentLifecycleState;
37
+ createdAt: Date | null;
38
+ lastActiveAt: Date | null;
39
+ /** Response mode: lightweight (no history), standard, full */
40
+ responseMode: 'lightweight' | 'standard' | 'full';
41
+ }
42
+ export declare class CharterCompiler {
43
+ /**
44
+ * Load and compile a charter.md file into an AgentCharter.
45
+ * Parses frontmatter and prompt content from markdown.
46
+ */
47
+ compile(charterPath: string): Promise<AgentCharter>;
48
+ /**
49
+ * Load all charters from the team directory.
50
+ * Scans .squad/agents/{name}/charter.md
51
+ */
52
+ compileAll(teamRoot: string): Promise<AgentCharter[]>;
53
+ }
54
+ export declare class AgentSessionManager {
55
+ private agents;
56
+ constructor();
57
+ /** Spawn a new agent session from a charter */
58
+ spawn(charter: AgentCharter, mode?: 'lightweight' | 'standard' | 'full'): Promise<AgentSessionInfo>;
59
+ /** Resume an existing agent session */
60
+ resume(agentName: string): Promise<AgentSessionInfo>;
61
+ /** Get info about a specific agent */
62
+ getAgent(name: string): AgentSessionInfo | undefined;
63
+ /** Get all agent session info */
64
+ getAllAgents(): AgentSessionInfo[];
65
+ /** Destroy an agent session */
66
+ destroy(agentName: string): Promise<void>;
67
+ }
68
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,qBAAqB,EACrB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,GAC5B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,aAAa,GACnB,MAAM,qBAAqB,CAAC;AAI7B,MAAM,WAAW,YAAY;IAC3B,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IAEb,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IAEpB,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IAEb,sBAAsB;IACtB,SAAS,EAAE,MAAM,EAAE,CAAC;IAEpB,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IAEd,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IAEf,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,oCAAoC;IACpC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB,oCAAoC;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;AAErG,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,mBAAmB,CAAC;IAC3B,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,8DAA8D;IAC9D,YAAY,EAAE,aAAa,GAAG,UAAU,GAAG,MAAM,CAAC;CACnD;AAID,qBAAa,eAAe;IAC1B;;;OAGG;IACG,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAQzD;;;OAGG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CAK5D;AAID,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAA4C;;IAM1D,+CAA+C;IACzC,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,GAAE,aAAa,GAAG,UAAU,GAAG,MAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAQrH,uCAAuC;IACjC,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAM1D,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAIpD,iCAAiC;IACjC,YAAY,IAAI,gBAAgB,EAAE;IAIlC,+BAA+B;IACzB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAKhD"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Agent Session Lifecycle (PRD 4)
3
+ *
4
+ * Manages the full agent lifecycle: spawn → active → idle → cleanup.
5
+ * Compiles charter.md files into SDK CustomAgentConfig objects.
6
+ * Injects dynamic context via session hooks instead of string templates.
7
+ */
8
+ // --- M1-8 Charter Compilation + M2-9 Config-driven ---
9
+ export { compileCharter, compileCharterFull, parseCharterMarkdown, } from './charter-compiler.js';
10
+ // --- M1-9 Model Selection + M3-5 Model Fallback ---
11
+ export { resolveModel, inferTierFromModel, isTierFallbackAllowed, ModelFallbackExecutor, } from './model-selector.js';
12
+ // --- M1-7 Agent Lifecycle ---
13
+ export { AgentLifecycleManager, } from './lifecycle.js';
14
+ // --- M1-11 History Shadows ---
15
+ export { createHistoryShadow, appendToHistory, readHistory, shadowExists, deleteHistoryShadow, } from './history-shadow.js';
16
+ // --- Charter Compiler ---
17
+ export class CharterCompiler {
18
+ /**
19
+ * Load and compile a charter.md file into an AgentCharter.
20
+ * Parses frontmatter and prompt content from markdown.
21
+ */
22
+ async compile(charterPath) {
23
+ // TODO: PRD 4 — Read charter.md from filesystem
24
+ // TODO: PRD 4 — Parse YAML frontmatter (name, role, expertise, style)
25
+ // TODO: PRD 4 — Extract prompt body
26
+ // TODO: PRD 4 — Map to CustomAgentConfig for SDK registration
27
+ throw new Error('Not implemented');
28
+ }
29
+ /**
30
+ * Load all charters from the team directory.
31
+ * Scans .squad/agents/{name}/charter.md
32
+ */
33
+ async compileAll(teamRoot) {
34
+ // TODO: PRD 4 — Glob for charter.md files
35
+ // TODO: PRD 4 — Compile each charter
36
+ throw new Error('Not implemented');
37
+ }
38
+ }
39
+ // --- Agent Session Manager ---
40
+ export class AgentSessionManager {
41
+ agents = new Map();
42
+ constructor() {
43
+ // TODO: PRD 4 — Accept SquadClient and SessionPool references
44
+ }
45
+ /** Spawn a new agent session from a charter */
46
+ async spawn(charter, mode = 'standard') {
47
+ // TODO: PRD 4 — Create SDK session with compiled charter config
48
+ // TODO: PRD 4 — Inject history.md and decisions.md via onSessionStart
49
+ // TODO: PRD 4 — Register in session pool
50
+ // TODO: PRD 4 — Emit lifecycle events
51
+ throw new Error('Not implemented');
52
+ }
53
+ /** Resume an existing agent session */
54
+ async resume(agentName) {
55
+ // TODO: PRD 4 — Call SquadClient.resumeSession()
56
+ // TODO: PRD 4 — Restore context and state
57
+ throw new Error('Not implemented');
58
+ }
59
+ /** Get info about a specific agent */
60
+ getAgent(name) {
61
+ return this.agents.get(name);
62
+ }
63
+ /** Get all agent session info */
64
+ getAllAgents() {
65
+ return Array.from(this.agents.values());
66
+ }
67
+ /** Destroy an agent session */
68
+ async destroy(agentName) {
69
+ // TODO: PRD 4 — Graceful shutdown with onSessionEnd hook
70
+ // TODO: PRD 4 — Persist final state to history.md
71
+ this.agents.delete(agentName);
72
+ }
73
+ }
74
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,wDAAwD;AACxD,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,oBAAoB,GAKrB,MAAM,uBAAuB,CAAC;AAE/B,qDAAqD;AACrD,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,GAStB,MAAM,qBAAqB,CAAC;AAE7B,+BAA+B;AAC/B,OAAO,EACL,qBAAqB,GAKtB,MAAM,gBAAgB,CAAC;AAExB,gCAAgC;AAChC,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,YAAY,EACZ,mBAAmB,GAGpB,MAAM,qBAAqB,CAAC;AA6C7B,2BAA2B;AAE3B,MAAM,OAAO,eAAe;IAC1B;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,WAAmB;QAC/B,gDAAgD;QAChD,sEAAsE;QACtE,oCAAoC;QACpC,8DAA8D;QAC9D,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,QAAgB;QAC/B,0CAA0C;QAC1C,qCAAqC;QACrC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;CACF;AAED,gCAAgC;AAEhC,MAAM,OAAO,mBAAmB;IACtB,MAAM,GAAkC,IAAI,GAAG,EAAE,CAAC;IAE1D;QACE,8DAA8D;IAChE,CAAC;IAED,+CAA+C;IAC/C,KAAK,CAAC,KAAK,CAAC,OAAqB,EAAE,OAA4C,UAAU;QACvF,gEAAgE;QAChE,sEAAsE;QACtE,yCAAyC;QACzC,sCAAsC;QACtC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,uCAAuC;IACvC,KAAK,CAAC,MAAM,CAAC,SAAiB;QAC5B,iDAAiD;QACjD,0CAA0C;QAC1C,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,sCAAsC;IACtC,QAAQ,CAAC,IAAY;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,iCAAiC;IACjC,YAAY;QACV,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,+BAA+B;IAC/B,KAAK,CAAC,OAAO,CAAC,SAAiB;QAC7B,yDAAyD;QACzD,kDAAkD;QAClD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;CACF"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Agent Session Lifecycle (M1-7)
3
+ *
4
+ * Orchestrates the complete lifecycle of agent sessions:
5
+ * - Spawning: charter compilation, model selection, session creation
6
+ * - Management: status tracking, message handling
7
+ * - Destruction: graceful shutdown and history saving
8
+ */
9
+ import { SquadClientWithPool } from '../client/index.js';
10
+ import { type TaskType } from './model-selector.js';
11
+ /**
12
+ * Agent handle status.
13
+ */
14
+ export type AgentStatus = 'spawning' | 'active' | 'idle' | 'error' | 'destroyed';
15
+ /**
16
+ * Handle to a spawned agent session.
17
+ * Provides control and communication interface to the agent.
18
+ */
19
+ export interface AgentHandle {
20
+ /** Agent name (e.g., 'verbal', 'fenster') */
21
+ agentName: string;
22
+ /** Underlying session ID from Squad Client */
23
+ sessionId: string;
24
+ /** Model being used for this agent */
25
+ model: string;
26
+ /** Current agent status */
27
+ status: AgentStatus;
28
+ /** Timestamp when agent was spawned */
29
+ createdAt: Date;
30
+ /** Last activity timestamp (for idle timeout) */
31
+ lastActivityAt: Date;
32
+ /**
33
+ * Send a message to the agent.
34
+ * @param prompt - User message or task prompt
35
+ */
36
+ sendMessage(prompt: string): Promise<void>;
37
+ /**
38
+ * Destroy the agent session gracefully.
39
+ * Saves history and cleans up resources.
40
+ */
41
+ destroy(): Promise<void>;
42
+ }
43
+ /**
44
+ * Options for spawning an agent.
45
+ */
46
+ export interface SpawnAgentOptions {
47
+ /** Agent name (e.g., 'verbal', 'fenster') */
48
+ agentName: string;
49
+ /** Task prompt to send to the agent */
50
+ task: string;
51
+ /** Task type for model selection */
52
+ taskType?: TaskType;
53
+ /** User-specified model override */
54
+ modelOverride?: string;
55
+ /** Team context content (team.md) */
56
+ teamContext?: string;
57
+ /** Routing rules content */
58
+ routingRules?: string;
59
+ /** Relevant decision records */
60
+ decisions?: string;
61
+ /** Idle timeout in milliseconds (default: 5 minutes) */
62
+ idleTimeout?: number;
63
+ }
64
+ /**
65
+ * Configuration for the lifecycle manager.
66
+ */
67
+ export interface LifecycleManagerConfig {
68
+ /** Squad client instance */
69
+ client: SquadClientWithPool;
70
+ /** Path to team root directory */
71
+ teamRoot: string;
72
+ /** Default idle timeout (default: 5 minutes) */
73
+ defaultIdleTimeout?: number;
74
+ }
75
+ /**
76
+ * Manages the full lifecycle of agent sessions.
77
+ *
78
+ * Coordinates charter compilation, model selection, session creation,
79
+ * and graceful shutdown with history persistence.
80
+ */
81
+ export declare class AgentLifecycleManager {
82
+ private client;
83
+ private teamRoot;
84
+ private defaultIdleTimeout;
85
+ private agents;
86
+ private idleCheckTimer;
87
+ constructor(config: LifecycleManagerConfig);
88
+ /**
89
+ * Spawn a new agent with full lifecycle setup.
90
+ *
91
+ * Pipeline:
92
+ * 1. Read charter.md from team root
93
+ * 2. Compile charter with team context
94
+ * 3. Resolve model using 4-layer priority
95
+ * 4. Create session via Squad Client
96
+ * 5. Set up event handlers
97
+ * 6. Return AgentHandle
98
+ *
99
+ * @param options - Spawn options
100
+ * @returns Agent handle for control and communication
101
+ */
102
+ spawnAgent(options: SpawnAgentOptions): Promise<AgentHandle>;
103
+ /**
104
+ * Destroy an agent gracefully.
105
+ * Saves history and cleans up session.
106
+ *
107
+ * @param handle - Agent handle to destroy
108
+ */
109
+ destroyAgent(handle: AgentHandle): Promise<void>;
110
+ /**
111
+ * List all active agent sessions.
112
+ *
113
+ * @returns Array of active agent handles
114
+ */
115
+ listActive(): AgentHandle[];
116
+ /**
117
+ * Get agent handle by session ID.
118
+ *
119
+ * @param sessionId - Session ID to look up
120
+ * @returns Agent handle or undefined
121
+ */
122
+ getAgent(sessionId: string): AgentHandle | undefined;
123
+ /**
124
+ * Shutdown all agents gracefully.
125
+ */
126
+ shutdown(): Promise<void>;
127
+ /**
128
+ * Start periodic idle timeout checker.
129
+ * @private
130
+ */
131
+ private startIdleChecker;
132
+ /**
133
+ * Extract model preference from charter content.
134
+ * @private
135
+ */
136
+ private extractModelPreference;
137
+ }
138
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/agents/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,EAA6C,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAK/F;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;AAEjF;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,uCAAuC;IACvC,SAAS,EAAE,IAAI,CAAC;IAChB,iDAAiD;IACjD,cAAc,EAAE,IAAI,CAAC;IAErB;;;OAGG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3C;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAElB,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IAEb,oCAAoC;IACpC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB,oCAAoC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,4BAA4B;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,4BAA4B;IAC5B,MAAM,EAAE,mBAAmB,CAAC;IAE5B,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IAEjB,gDAAgD;IAChD,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;GAKG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,MAAM,CAA2C;IACzD,OAAO,CAAC,cAAc,CAA+B;gBAEzC,MAAM,EAAE,sBAAsB;IAS1C;;;;;;;;;;;;;OAaG;IACG,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC;IAgGlE;;;;;OAKG;IACG,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtD;;;;OAIG;IACH,UAAU,IAAI,WAAW,EAAE;IAM3B;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIpD;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB/B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAcxB;;;OAGG;IACH,OAAO,CAAC,sBAAsB;CAI/B"}
@@ -0,0 +1,258 @@
1
+ /**
2
+ * Agent Session Lifecycle (M1-7)
3
+ *
4
+ * Orchestrates the complete lifecycle of agent sessions:
5
+ * - Spawning: charter compilation, model selection, session creation
6
+ * - Management: status tracking, message handling
7
+ * - Destruction: graceful shutdown and history saving
8
+ */
9
+ import { compileCharter } from './charter-compiler.js';
10
+ import { resolveModel } from './model-selector.js';
11
+ import { ConfigurationError, SessionLifecycleError } from '../adapter/errors.js';
12
+ import * as fs from 'fs/promises';
13
+ import * as path from 'path';
14
+ /**
15
+ * Manages the full lifecycle of agent sessions.
16
+ *
17
+ * Coordinates charter compilation, model selection, session creation,
18
+ * and graceful shutdown with history persistence.
19
+ */
20
+ export class AgentLifecycleManager {
21
+ client;
22
+ teamRoot;
23
+ defaultIdleTimeout;
24
+ agents = new Map();
25
+ idleCheckTimer = null;
26
+ constructor(config) {
27
+ this.client = config.client;
28
+ this.teamRoot = config.teamRoot;
29
+ this.defaultIdleTimeout = config.defaultIdleTimeout ?? 300_000; // 5 minutes
30
+ // Start idle timeout checker
31
+ this.startIdleChecker();
32
+ }
33
+ /**
34
+ * Spawn a new agent with full lifecycle setup.
35
+ *
36
+ * Pipeline:
37
+ * 1. Read charter.md from team root
38
+ * 2. Compile charter with team context
39
+ * 3. Resolve model using 4-layer priority
40
+ * 4. Create session via Squad Client
41
+ * 5. Set up event handlers
42
+ * 6. Return AgentHandle
43
+ *
44
+ * @param options - Spawn options
45
+ * @returns Agent handle for control and communication
46
+ */
47
+ async spawnAgent(options) {
48
+ const { agentName, task, taskType = 'code', modelOverride, teamContext, routingRules, decisions, idleTimeout = this.defaultIdleTimeout, } = options;
49
+ try {
50
+ // Step 1: Read charter.md
51
+ const charterPath = path.join(this.teamRoot, '.ai-team', 'agents', agentName, 'charter.md');
52
+ let charterContent;
53
+ try {
54
+ charterContent = await fs.readFile(charterPath, 'utf-8');
55
+ }
56
+ catch (error) {
57
+ throw new ConfigurationError(`Charter not found for agent '${agentName}' at ${charterPath}`, {
58
+ agentName,
59
+ operation: 'spawnAgent',
60
+ timestamp: new Date(),
61
+ metadata: { charterPath },
62
+ }, error instanceof Error ? error : undefined);
63
+ }
64
+ // Step 2: Compile charter
65
+ const compileOptions = {
66
+ agentName,
67
+ charterPath,
68
+ teamContext,
69
+ routingRules,
70
+ decisions,
71
+ };
72
+ const agentConfig = compileCharter(compileOptions);
73
+ // Step 3: Resolve model
74
+ const modelOptions = {
75
+ userOverride: modelOverride,
76
+ charterPreference: agentConfig.prompt.includes('## Model')
77
+ ? this.extractModelPreference(charterContent)
78
+ : undefined,
79
+ taskType,
80
+ agentRole: agentName,
81
+ };
82
+ const resolvedModel = resolveModel(modelOptions);
83
+ // Step 4: Create session
84
+ const sessionConfig = {
85
+ model: resolvedModel.model,
86
+ systemMessage: {
87
+ content: agentConfig.prompt,
88
+ },
89
+ };
90
+ const session = await this.client.createSession(sessionConfig);
91
+ // Step 5: Create handle with event handlers
92
+ const handle = new AgentHandleImpl({
93
+ agentName,
94
+ sessionId: session.sessionId,
95
+ model: resolvedModel.model,
96
+ session,
97
+ idleTimeout,
98
+ onDestroy: () => this.agents.delete(session.sessionId),
99
+ });
100
+ this.agents.set(session.sessionId, handle);
101
+ // Step 6: Send initial task
102
+ await handle.sendMessage(task);
103
+ return handle;
104
+ }
105
+ catch (error) {
106
+ throw new SessionLifecycleError(`Failed to spawn agent '${agentName}': ${error instanceof Error ? error.message : String(error)}`, {
107
+ agentName,
108
+ operation: 'spawnAgent',
109
+ timestamp: new Date(),
110
+ }, false, error instanceof Error ? error : undefined);
111
+ }
112
+ }
113
+ /**
114
+ * Destroy an agent gracefully.
115
+ * Saves history and cleans up session.
116
+ *
117
+ * @param handle - Agent handle to destroy
118
+ */
119
+ async destroyAgent(handle) {
120
+ await handle.destroy();
121
+ this.agents.delete(handle.sessionId);
122
+ }
123
+ /**
124
+ * List all active agent sessions.
125
+ *
126
+ * @returns Array of active agent handles
127
+ */
128
+ listActive() {
129
+ return Array.from(this.agents.values()).filter(agent => agent.status !== 'destroyed');
130
+ }
131
+ /**
132
+ * Get agent handle by session ID.
133
+ *
134
+ * @param sessionId - Session ID to look up
135
+ * @returns Agent handle or undefined
136
+ */
137
+ getAgent(sessionId) {
138
+ return this.agents.get(sessionId);
139
+ }
140
+ /**
141
+ * Shutdown all agents gracefully.
142
+ */
143
+ async shutdown() {
144
+ if (this.idleCheckTimer) {
145
+ clearInterval(this.idleCheckTimer);
146
+ this.idleCheckTimer = null;
147
+ }
148
+ const destroyPromises = Array.from(this.agents.values()).map(agent => agent.destroy().catch(err => {
149
+ console.error(`Failed to destroy agent ${agent.agentName}:`, err);
150
+ }));
151
+ await Promise.all(destroyPromises);
152
+ this.agents.clear();
153
+ }
154
+ /**
155
+ * Start periodic idle timeout checker.
156
+ * @private
157
+ */
158
+ startIdleChecker() {
159
+ this.idleCheckTimer = setInterval(() => {
160
+ const now = Date.now();
161
+ for (const agent of this.agents.values()) {
162
+ const idleTimeMs = now - agent.lastActivityAt.getTime();
163
+ if (idleTimeMs > this.defaultIdleTimeout && agent.status === 'active') {
164
+ agent.markIdle();
165
+ }
166
+ }
167
+ }, 30_000); // Check every 30 seconds
168
+ }
169
+ /**
170
+ * Extract model preference from charter content.
171
+ * @private
172
+ */
173
+ extractModelPreference(charterContent) {
174
+ const modelMatch = charterContent.match(/##\s+Model\s*\n[\s\S]*?\*\*Preferred:\*\*\s*(.+)/i);
175
+ return modelMatch ? modelMatch[1].trim() : undefined;
176
+ }
177
+ }
178
+ /**
179
+ * Internal implementation of AgentHandle.
180
+ * @private
181
+ */
182
+ class AgentHandleImpl {
183
+ agentName;
184
+ sessionId;
185
+ model;
186
+ status;
187
+ createdAt;
188
+ lastActivityAt;
189
+ session;
190
+ idleTimeout;
191
+ onDestroy;
192
+ constructor(config) {
193
+ this.agentName = config.agentName;
194
+ this.sessionId = config.sessionId;
195
+ this.model = config.model;
196
+ this.session = config.session;
197
+ this.idleTimeout = config.idleTimeout;
198
+ this.onDestroy = config.onDestroy;
199
+ this.status = 'active';
200
+ this.createdAt = new Date();
201
+ this.lastActivityAt = new Date();
202
+ }
203
+ async sendMessage(prompt) {
204
+ if (this.status === 'destroyed') {
205
+ throw new SessionLifecycleError('Cannot send message to destroyed agent', {
206
+ agentName: this.agentName,
207
+ sessionId: this.sessionId,
208
+ operation: 'sendMessage',
209
+ timestamp: new Date(),
210
+ });
211
+ }
212
+ try {
213
+ this.status = 'active';
214
+ this.lastActivityAt = new Date();
215
+ // Send message via session
216
+ await this.session.sendMessage({ prompt });
217
+ }
218
+ catch (error) {
219
+ this.status = 'error';
220
+ throw new SessionLifecycleError(`Failed to send message to agent '${this.agentName}': ${error instanceof Error ? error.message : String(error)}`, {
221
+ agentName: this.agentName,
222
+ sessionId: this.sessionId,
223
+ operation: 'sendMessage',
224
+ timestamp: new Date(),
225
+ }, false, error instanceof Error ? error : undefined);
226
+ }
227
+ }
228
+ async destroy() {
229
+ if (this.status === 'destroyed') {
230
+ return;
231
+ }
232
+ try {
233
+ this.status = 'destroyed';
234
+ // Clean up session
235
+ await this.session.close();
236
+ // Notify lifecycle manager
237
+ this.onDestroy();
238
+ }
239
+ catch (error) {
240
+ throw new SessionLifecycleError(`Failed to destroy agent '${this.agentName}': ${error instanceof Error ? error.message : String(error)}`, {
241
+ agentName: this.agentName,
242
+ sessionId: this.sessionId,
243
+ operation: 'destroy',
244
+ timestamp: new Date(),
245
+ }, false, error instanceof Error ? error : undefined);
246
+ }
247
+ }
248
+ /**
249
+ * Mark agent as idle (called by lifecycle manager).
250
+ * @internal
251
+ */
252
+ markIdle() {
253
+ if (this.status === 'active') {
254
+ this.status = 'idle';
255
+ }
256
+ }
257
+ }
258
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/agents/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Per-Agent Model Selection (M1-9) + Model Fallback (M3-5, Issue #145)
3
+ */
4
+ import type { EventBus } from '../runtime/event-bus.js';
5
+ /**
6
+ * Task types that influence model selection.
7
+ */
8
+ export type TaskType = 'code' | 'prompt' | 'docs' | 'visual' | 'planning' | 'mechanical';
9
+ /**
10
+ * Model tier classification.
11
+ */
12
+ export type ModelTier = 'premium' | 'standard' | 'fast';
13
+ /**
14
+ * Source of the model resolution.
15
+ */
16
+ export type ModelResolutionSource = 'user-override' | 'charter' | 'task-auto' | 'default';
17
+ /**
18
+ * Options for model resolution.
19
+ */
20
+ export interface ModelResolutionOptions {
21
+ /** User-specified model override */
22
+ userOverride?: string;
23
+ /** Model preference from agent's charter (## Model section) */
24
+ charterPreference?: string;
25
+ /** Type of task being performed */
26
+ taskType: TaskType;
27
+ /** Agent role (for context) */
28
+ agentRole?: string;
29
+ }
30
+ /**
31
+ * Result of model resolution.
32
+ */
33
+ export interface ResolvedModel {
34
+ /** Selected model identifier */
35
+ model: string;
36
+ /** Model tier classification */
37
+ tier: ModelTier;
38
+ /** Source that determined the model */
39
+ source: ModelResolutionSource;
40
+ /** Fallback chain for this tier */
41
+ fallbackChain: string[];
42
+ }
43
+ /**
44
+ * Resolve the appropriate model using the 4-layer priority system.
45
+ *
46
+ * @param options - Model resolution options
47
+ * @returns Resolved model with tier and fallback chain
48
+ */
49
+ export declare function resolveModel(options: ModelResolutionOptions): ResolvedModel;
50
+ export declare function inferTierFromModel(model: string): ModelTier;
51
+ export declare function isTierFallbackAllowed(fromTier: ModelTier, toTier: ModelTier, allowCrossTier: boolean): boolean;
52
+ export interface FallbackAttempt {
53
+ model: string;
54
+ tier: ModelTier;
55
+ error: string;
56
+ timestamp: Date;
57
+ }
58
+ export interface FallbackResult<T> {
59
+ value: T;
60
+ model: string;
61
+ tier: ModelTier;
62
+ attempts: FallbackAttempt[];
63
+ didFallback: boolean;
64
+ }
65
+ export interface FallbackExecutorConfig {
66
+ allowCrossTier?: boolean;
67
+ eventBus?: EventBus;
68
+ }
69
+ export declare class ModelFallbackExecutor {
70
+ private allowCrossTier;
71
+ private eventBus?;
72
+ private history;
73
+ constructor(config?: FallbackExecutorConfig);
74
+ execute<T>(resolved: ResolvedModel, agentName: string, fn: (model: string) => Promise<T>): Promise<FallbackResult<T>>;
75
+ getHistory(agentName: string): FallbackAttempt[];
76
+ clearHistory(): void;
77
+ private buildCandidateList;
78
+ private emitEvent;
79
+ }
80
+ //# sourceMappingURL=model-selector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-selector.d.ts","sourceRoot":"","sources":["../../src/agents/model-selector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;AAEzF;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,eAAe,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAE1F;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mCAAmC;IACnC,QAAQ,EAAE,QAAQ,CAAC;IACnB,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,IAAI,EAAE,SAAS,CAAC;IAChB,uCAAuC;IACvC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,mCAAmC;IACnC,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAgCD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAsC3E;AAiDD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAa3D;AAQD,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,SAAS,EACnB,MAAM,EAAE,SAAS,EACjB,cAAc,EAAE,OAAO,GACtB,OAAO,CAIT;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,CAAW;IAC5B,OAAO,CAAC,OAAO,CAA6C;gBAEhD,MAAM,GAAE,sBAA2B;IAKzC,OAAO,CAAC,CAAC,EACb,QAAQ,EAAE,aAAa,EACvB,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAChC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IA6B7B,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,EAAE;IAIhD,YAAY,IAAI,IAAI;IAIpB,OAAO,CAAC,kBAAkB;YASZ,SAAS;CAIxB"}