@wrongstack/core 0.296.4 → 0.298.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 (820) hide show
  1. package/dist/chronicle/index.js +126 -22
  2. package/dist/chronicle/project-server-client.d.ts +12 -0
  3. package/dist/chronicle/project-server-protocol.d.ts +22 -0
  4. package/dist/chronicle/project-server.js +1076 -283
  5. package/dist/coordination/agents/index.js +136 -1
  6. package/dist/coordination/agents/role-skills.d.ts +3 -2
  7. package/dist/coordination/brain-cache.d.ts +14 -0
  8. package/dist/coordination/brain-trace.d.ts +2 -1
  9. package/dist/coordination/director/director-task-registry.d.ts +12 -0
  10. package/dist/coordination/fleet-supervisor.d.ts +21 -0
  11. package/dist/coordination/index.d.ts +23 -21
  12. package/dist/coordination/index.js +16514 -15945
  13. package/dist/coordination/mail-tools.d.ts +3 -3
  14. package/dist/coordination/mailbox-credential-store.d.ts +22 -2
  15. package/dist/coordination/mailbox-credential-throttle.d.ts +63 -0
  16. package/dist/coordination/mailbox-http-router.d.ts +6 -0
  17. package/dist/coordination/mailbox-project-server-client.d.ts +16 -0
  18. package/dist/coordination/mailbox-project-server-protocol.d.ts +43 -5
  19. package/dist/coordination/mailbox-project-server.js +1270 -289
  20. package/dist/coordination/provider-status-tracker.d.ts +2 -0
  21. package/dist/coordination/remote-mailbox-credential-store.d.ts +5 -5
  22. package/dist/coordination/remote-mailbox.d.ts +30 -4
  23. package/dist/coordination/sqlite-mailbox-credentials.d.ts +11 -0
  24. package/dist/core/context.d.ts +5 -5
  25. package/dist/core/fallback-profile-manager.d.ts +14 -0
  26. package/dist/core/index.js +624 -168
  27. package/dist/core/instruction-bundle.d.ts +12 -0
  28. package/dist/core/system-prompt-builder.d.ts +14 -0
  29. package/dist/core/system-prompt-skill-bodies.d.ts +1 -1
  30. package/dist/core/system-prompt-skill-text.d.ts +1 -2
  31. package/dist/defaults/index.js +2393 -1302
  32. package/dist/design/index.js +47 -8
  33. package/dist/execution/design-materialize.d.ts +22 -0
  34. package/dist/execution/index.js +582 -285
  35. package/dist/execution/skill-loader.d.ts +10 -1
  36. package/dist/execution/tool-error-taxonomy.d.ts +31 -0
  37. package/dist/execution/tool-executor.d.ts +1 -0
  38. package/dist/goal/index.js +71 -17
  39. package/dist/goal/phase-store.d.ts +7 -0
  40. package/dist/hooks/index.js +5 -0
  41. package/dist/hq/auth-audit.d.ts +6 -0
  42. package/dist/hq/auth-store.d.ts +59 -3
  43. package/dist/hq/index.js +680 -163
  44. package/dist/hq/kanban-store.d.ts +3 -0
  45. package/dist/hq/persistence/event-log.d.ts +25 -0
  46. package/dist/hq/persistence.d.ts +1 -1
  47. package/dist/hq/protocol/browser.d.ts +2 -1
  48. package/dist/hq/protocol/client.d.ts +18 -1
  49. package/dist/hq/protocol/core.d.ts +5 -16
  50. package/dist/hq/protocol/envelope.d.ts +29 -0
  51. package/dist/hq/protocol/governance.d.ts +34 -0
  52. package/dist/hq/protocol/peer.d.ts +55 -0
  53. package/dist/hq/protocol/project.d.ts +3 -0
  54. package/dist/hq/protocol/resume.d.ts +56 -0
  55. package/dist/hq/protocol.d.ts +11 -8
  56. package/dist/hq/protocol.js +675 -0
  57. package/dist/hq/publisher.d.ts +31 -2
  58. package/dist/hq/session-bridge.d.ts +8 -0
  59. package/dist/index.js +7197 -4006
  60. package/dist/infrastructure/index.js +198 -101
  61. package/dist/kernel/events/session-events.d.ts +3 -0
  62. package/dist/kernel/events/tool-events.d.ts +3 -1
  63. package/dist/models/index.js +1 -1
  64. package/dist/observability/index.d.ts +1 -1
  65. package/dist/observability/index.js +103 -5
  66. package/dist/observability/metrics.d.ts +37 -0
  67. package/dist/observability/prometheus.d.ts +11 -0
  68. package/dist/plugin/index.d.ts +5 -1
  69. package/dist/plugin/index.js +965 -511
  70. package/dist/plugins/auto-review-plugin.d.ts +6 -0
  71. package/dist/plugins/review-store-maintenance.d.ts +26 -0
  72. package/dist/plugins/review-types.d.ts +6 -0
  73. package/dist/security/capabilities.d.ts +45 -1
  74. package/dist/security/error-sanitize.d.ts +49 -0
  75. package/dist/security/file-permissions.d.ts +41 -0
  76. package/dist/security/index.d.ts +9 -6
  77. package/dist/security/index.js +3007 -2032
  78. package/dist/security/permission-policy.d.ts +55 -3
  79. package/dist/security/secret-vault.d.ts +17 -0
  80. package/dist/security/totp.d.ts +86 -0
  81. package/dist/skills/frontmatter.d.ts +12 -1
  82. package/dist/skills/github-fetcher.d.ts +48 -0
  83. package/dist/skills/index.js +137 -26
  84. package/dist/skills/limits.d.ts +19 -0
  85. package/dist/skills/skill-installer.d.ts +13 -0
  86. package/dist/storage/file-session-writer.d.ts +23 -0
  87. package/dist/storage/index.js +1140 -905
  88. package/dist/storage/provider-config-watcher.d.ts +1 -0
  89. package/dist/storage/session-helpers.d.ts +1 -0
  90. package/dist/storage/session-reader.d.ts +0 -7
  91. package/dist/storage/session-store/types.d.ts +12 -1
  92. package/dist/storage/session-store.d.ts +11 -2
  93. package/dist/storage/session-workspace-checkpoints.d.ts +5 -0
  94. package/dist/tools/fallback-manage-tools.d.ts +6 -0
  95. package/dist/tools/index.js +305 -133
  96. package/dist/tools/mcp-use.d.ts +1 -1
  97. package/dist/types/blocks.d.ts +7 -0
  98. package/dist/types/config/autonomy.d.ts +12 -3
  99. package/dist/types/config/mcp-features.d.ts +15 -1
  100. package/dist/types/config/root.d.ts +10 -4
  101. package/dist/types/context-window.d.ts +15 -0
  102. package/dist/types/index.d.ts +1 -1
  103. package/dist/types/observability.d.ts +13 -0
  104. package/dist/types/secret-vault.d.ts +8 -0
  105. package/dist/types/session.d.ts +42 -0
  106. package/dist/types/skill.d.ts +56 -0
  107. package/dist/types/tool-executor.d.ts +2 -0
  108. package/dist/utils/continuous-memory-profiler.d.ts +35 -0
  109. package/dist/utils/env-typed.d.ts +64 -0
  110. package/dist/utils/glob-match.d.ts +21 -1
  111. package/dist/utils/heap-watchdog-types.d.ts +62 -0
  112. package/dist/utils/heap-watchdog.d.ts +15 -34
  113. package/dist/utils/heap-watchdog.js +592 -18
  114. package/dist/utils/incoming-images.d.ts +19 -0
  115. package/dist/utils/index.d.ts +15 -11
  116. package/dist/utils/index.js +1425 -545
  117. package/dist/utils/memory-flight-recorder.d.ts +47 -0
  118. package/dist/utils/path-segment.d.ts +29 -0
  119. package/dist/utils/tool-name.d.ts +34 -0
  120. package/dist/utils/win32-cmd.d.ts +25 -0
  121. package/dist/worktree/index.js +5 -0
  122. package/package.json +11 -3
  123. package/skills/chimera/SKILL.md +16 -4
  124. package/skills/data-governance/SKILL.md +92 -0
  125. package/skills/wrongstack-kanban/SKILL.md +129 -0
  126. package/skills/wrongstack-kanban/agents/openai.yaml +4 -0
  127. package/skills/wrongstack-mailbox-mcp/SKILL.md +72 -0
  128. package/skills/wrongstack-mailbox-mcp/agents/openai.yaml +4 -0
  129. package/dist/agent-status-helpers.d.ts.map +0 -1
  130. package/dist/agent-status-tracker.d.ts.map +0 -1
  131. package/dist/boot.d.ts.map +0 -1
  132. package/dist/chronicle/context.d.ts.map +0 -1
  133. package/dist/chronicle/decision-adapter.d.ts.map +0 -1
  134. package/dist/chronicle/domain-adapter.d.ts.map +0 -1
  135. package/dist/chronicle/event-hash.d.ts.map +0 -1
  136. package/dist/chronicle/file-observer.d.ts.map +0 -1
  137. package/dist/chronicle/health-monitor.d.ts.map +0 -1
  138. package/dist/chronicle/identity.d.ts.map +0 -1
  139. package/dist/chronicle/index.d.ts.map +0 -1
  140. package/dist/chronicle/index.js.map +0 -7
  141. package/dist/chronicle/journal.d.ts.map +0 -1
  142. package/dist/chronicle/legacy-journal-import.d.ts.map +0 -1
  143. package/dist/chronicle/metrics-store.d.ts.map +0 -1
  144. package/dist/chronicle/partition-filename.d.ts.map +0 -1
  145. package/dist/chronicle/partition-range-cache.d.ts.map +0 -1
  146. package/dist/chronicle/process-adapter.d.ts.map +0 -1
  147. package/dist/chronicle/project-access.d.ts.map +0 -1
  148. package/dist/chronicle/project-server-client.d.ts.map +0 -1
  149. package/dist/chronicle/project-server-endpoint.d.ts.map +0 -1
  150. package/dist/chronicle/project-server-protocol.d.ts.map +0 -1
  151. package/dist/chronicle/project-server.d.ts.map +0 -1
  152. package/dist/chronicle/project-server.js.map +0 -7
  153. package/dist/chronicle/prompt-manifest.d.ts.map +0 -1
  154. package/dist/chronicle/provider-adapter.d.ts.map +0 -1
  155. package/dist/chronicle/query.d.ts.map +0 -1
  156. package/dist/chronicle/review-adapter.d.ts.map +0 -1
  157. package/dist/chronicle/rollup-adapter.d.ts.map +0 -1
  158. package/dist/chronicle/sink.d.ts.map +0 -1
  159. package/dist/chronicle/sqlite-journal.d.ts.map +0 -1
  160. package/dist/chronicle/sqlite-query.d.ts.map +0 -1
  161. package/dist/chronicle/stream-adapter.d.ts.map +0 -1
  162. package/dist/chronicle/tool-adapter.d.ts.map +0 -1
  163. package/dist/chronicle/types.d.ts.map +0 -1
  164. package/dist/coordination/adaptive-concurrency.d.ts.map +0 -1
  165. package/dist/coordination/agent-bridge.d.ts.map +0 -1
  166. package/dist/coordination/agent-monitor.d.ts.map +0 -1
  167. package/dist/coordination/agent-subagent-runner.d.ts.map +0 -1
  168. package/dist/coordination/agents/agent-prompts.d.ts.map +0 -1
  169. package/dist/coordination/agents/index.d.ts.map +0 -1
  170. package/dist/coordination/agents/index.js.map +0 -7
  171. package/dist/coordination/agents/phase1-discovery.d.ts.map +0 -1
  172. package/dist/coordination/agents/phase2-planning.d.ts.map +0 -1
  173. package/dist/coordination/agents/phase3-build.d.ts.map +0 -1
  174. package/dist/coordination/agents/phase3-techstack.d.ts.map +0 -1
  175. package/dist/coordination/agents/phase3-wave1-platform.d.ts.map +0 -1
  176. package/dist/coordination/agents/phase3-wave2-meta.d.ts.map +0 -1
  177. package/dist/coordination/agents/phase4-verify.d.ts.map +0 -1
  178. package/dist/coordination/agents/phase5-review.d.ts.map +0 -1
  179. package/dist/coordination/agents/phase6-domain.d.ts.map +0 -1
  180. package/dist/coordination/agents/phase7-knowledge.d.ts.map +0 -1
  181. package/dist/coordination/agents/phase8-delivery.d.ts.map +0 -1
  182. package/dist/coordination/agents/phase8-wave3-products.d.ts.map +0 -1
  183. package/dist/coordination/agents/phase9-meta.d.ts.map +0 -1
  184. package/dist/coordination/agents/phase9-wave4-platform-meta.d.ts.map +0 -1
  185. package/dist/coordination/agents/project-agent-config-validation.d.ts.map +0 -1
  186. package/dist/coordination/agents/project-agent-consolidation.d.ts.map +0 -1
  187. package/dist/coordination/agents/project-agent-files.d.ts.map +0 -1
  188. package/dist/coordination/agents/project-agent-identity-types.d.ts.map +0 -1
  189. package/dist/coordination/agents/project-agent-identity.d.ts.map +0 -1
  190. package/dist/coordination/agents/project-agent-knowledge-manifests.d.ts.map +0 -1
  191. package/dist/coordination/agents/project-agent-learning-entries.d.ts.map +0 -1
  192. package/dist/coordination/agents/project-agent-learning-normalize.d.ts.map +0 -1
  193. package/dist/coordination/agents/project-agent-learning-policy.d.ts.map +0 -1
  194. package/dist/coordination/agents/project-agent-learning-structured.d.ts.map +0 -1
  195. package/dist/coordination/agents/project-agent-paths.d.ts.map +0 -1
  196. package/dist/coordination/agents/project-agent-profile.d.ts.map +0 -1
  197. package/dist/coordination/agents/role-skills.d.ts.map +0 -1
  198. package/dist/coordination/agents/types.d.ts.map +0 -1
  199. package/dist/coordination/agents.d.ts.map +0 -1
  200. package/dist/coordination/auto-extend.d.ts.map +0 -1
  201. package/dist/coordination/autonomous-brain.d.ts.map +0 -1
  202. package/dist/coordination/autonomous-coordinator.d.ts.map +0 -1
  203. package/dist/coordination/brain-cache.d.ts.map +0 -1
  204. package/dist/coordination/brain-heuristics.d.ts.map +0 -1
  205. package/dist/coordination/brain-ledger.d.ts.map +0 -1
  206. package/dist/coordination/brain-monitor.d.ts.map +0 -1
  207. package/dist/coordination/brain-rules.d.ts.map +0 -1
  208. package/dist/coordination/brain-telemetry.d.ts.map +0 -1
  209. package/dist/coordination/brain-trace.d.ts.map +0 -1
  210. package/dist/coordination/brain.d.ts.map +0 -1
  211. package/dist/coordination/change-manager.d.ts.map +0 -1
  212. package/dist/coordination/checkpoint-wiring.d.ts.map +0 -1
  213. package/dist/coordination/collab-bus.d.ts.map +0 -1
  214. package/dist/coordination/collab-debug-types.d.ts.map +0 -1
  215. package/dist/coordination/collab-debug.d.ts.map +0 -1
  216. package/dist/coordination/collab-director-host.d.ts.map +0 -1
  217. package/dist/coordination/commit-safety.d.ts.map +0 -1
  218. package/dist/coordination/consensus-protocol.d.ts.map +0 -1
  219. package/dist/coordination/coordinator/error-classifier.d.ts.map +0 -1
  220. package/dist/coordination/delegate-tool.d.ts.map +0 -1
  221. package/dist/coordination/dep-watcher-bridge.d.ts.map +0 -1
  222. package/dist/coordination/dep-watcher.d.ts.map +0 -1
  223. package/dist/coordination/director/director-btw-notes.d.ts.map +0 -1
  224. package/dist/coordination/director/director-budget-policy.d.ts.map +0 -1
  225. package/dist/coordination/director/director-collab.d.ts.map +0 -1
  226. package/dist/coordination/director/director-errors.d.ts.map +0 -1
  227. package/dist/coordination/director/director-task-registry.d.ts.map +0 -1
  228. package/dist/coordination/director/director-toolset.d.ts.map +0 -1
  229. package/dist/coordination/director-basic-tools.d.ts.map +0 -1
  230. package/dist/coordination/director-collab-tools.d.ts.map +0 -1
  231. package/dist/coordination/director-host-contracts.d.ts.map +0 -1
  232. package/dist/coordination/director-input-helpers.d.ts.map +0 -1
  233. package/dist/coordination/director-kanban-queue-helpers.d.ts.map +0 -1
  234. package/dist/coordination/director-options.d.ts.map +0 -1
  235. package/dist/coordination/director-prompts.d.ts.map +0 -1
  236. package/dist/coordination/director-quality-gate-tool.d.ts.map +0 -1
  237. package/dist/coordination/director-session.d.ts.map +0 -1
  238. package/dist/coordination/director-spawn-model.d.ts.map +0 -1
  239. package/dist/coordination/director-tools.d.ts.map +0 -1
  240. package/dist/coordination/director.d.ts.map +0 -1
  241. package/dist/coordination/dispatcher.d.ts.map +0 -1
  242. package/dist/coordination/file-author-tracker.d.ts.map +0 -1
  243. package/dist/coordination/fleet-bus.d.ts.map +0 -1
  244. package/dist/coordination/fleet-event-validation.d.ts.map +0 -1
  245. package/dist/coordination/fleet-manager.d.ts.map +0 -1
  246. package/dist/coordination/fleet-spawn.d.ts.map +0 -1
  247. package/dist/coordination/fleet-status-tool.d.ts.map +0 -1
  248. package/dist/coordination/fleet-supervisor.d.ts.map +0 -1
  249. package/dist/coordination/fleet.d.ts.map +0 -1
  250. package/dist/coordination/global-mailbox-completion.d.ts.map +0 -1
  251. package/dist/coordination/global-mailbox-paths.d.ts.map +0 -1
  252. package/dist/coordination/icoordinator.d.ts.map +0 -1
  253. package/dist/coordination/ifleet-manager.d.ts.map +0 -1
  254. package/dist/coordination/in-memory-transport.d.ts.map +0 -1
  255. package/dist/coordination/index.d.ts.map +0 -1
  256. package/dist/coordination/index.js.map +0 -7
  257. package/dist/coordination/knowledge-graph.d.ts.map +0 -1
  258. package/dist/coordination/large-answer-store.d.ts.map +0 -1
  259. package/dist/coordination/mail-tools.d.ts.map +0 -1
  260. package/dist/coordination/mailbox-actions.d.ts.map +0 -1
  261. package/dist/coordination/mailbox-auth-types.d.ts.map +0 -1
  262. package/dist/coordination/mailbox-codecs.d.ts.map +0 -1
  263. package/dist/coordination/mailbox-constants.d.ts.map +0 -1
  264. package/dist/coordination/mailbox-credential-store.d.ts.map +0 -1
  265. package/dist/coordination/mailbox-events.d.ts.map +0 -1
  266. package/dist/coordination/mailbox-health.d.ts.map +0 -1
  267. package/dist/coordination/mailbox-hooks.d.ts.map +0 -1
  268. package/dist/coordination/mailbox-http-auth.d.ts.map +0 -1
  269. package/dist/coordination/mailbox-http-rate-limit.d.ts.map +0 -1
  270. package/dist/coordination/mailbox-http-router.d.ts.map +0 -1
  271. package/dist/coordination/mailbox-http-validation.d.ts.map +0 -1
  272. package/dist/coordination/mailbox-message-codec.d.ts.map +0 -1
  273. package/dist/coordination/mailbox-parse-state.d.ts.map +0 -1
  274. package/dist/coordination/mailbox-project-server-client.d.ts.map +0 -1
  275. package/dist/coordination/mailbox-project-server-endpoint.d.ts.map +0 -1
  276. package/dist/coordination/mailbox-project-server-protocol.d.ts.map +0 -1
  277. package/dist/coordination/mailbox-project-server.d.ts.map +0 -1
  278. package/dist/coordination/mailbox-project-server.js.map +0 -7
  279. package/dist/coordination/mailbox-receipt-folding.d.ts.map +0 -1
  280. package/dist/coordination/mailbox-registry-codec.d.ts.map +0 -1
  281. package/dist/coordination/mailbox-retention-state.d.ts.map +0 -1
  282. package/dist/coordination/mailbox-status-mappers.d.ts.map +0 -1
  283. package/dist/coordination/mailbox-tool.d.ts.map +0 -1
  284. package/dist/coordination/mailbox-type-properties.d.ts.map +0 -1
  285. package/dist/coordination/mailbox-types.d.ts.map +0 -1
  286. package/dist/coordination/model-matrix.d.ts.map +0 -1
  287. package/dist/coordination/multi-agent-coordinator.d.ts.map +0 -1
  288. package/dist/coordination/multi-agent-timeout.d.ts.map +0 -1
  289. package/dist/coordination/null-fleet-bus.d.ts.map +0 -1
  290. package/dist/coordination/package-author-tracker.d.ts.map +0 -1
  291. package/dist/coordination/package-outdated-watcher.d.ts.map +0 -1
  292. package/dist/coordination/provider-status-tracker.d.ts.map +0 -1
  293. package/dist/coordination/remote-mailbox-credential-store.d.ts.map +0 -1
  294. package/dist/coordination/remote-mailbox.d.ts.map +0 -1
  295. package/dist/coordination/single-instance-mailbox.d.ts.map +0 -1
  296. package/dist/coordination/spawn-budget.d.ts.map +0 -1
  297. package/dist/coordination/sqlite-mailbox-compaction.d.ts.map +0 -1
  298. package/dist/coordination/sqlite-mailbox-credentials.d.ts.map +0 -1
  299. package/dist/coordination/sqlite-mailbox-rows.d.ts.map +0 -1
  300. package/dist/coordination/sqlite-mailbox-schema.d.ts.map +0 -1
  301. package/dist/coordination/sqlite-mailbox.d.ts.map +0 -1
  302. package/dist/coordination/subagent-budget.d.ts.map +0 -1
  303. package/dist/coordination/subagent-nicknames.d.ts.map +0 -1
  304. package/dist/coordination/subagent-result-tool.d.ts.map +0 -1
  305. package/dist/coordination/task-auctioneer.d.ts.map +0 -1
  306. package/dist/coordination/task-dag.d.ts.map +0 -1
  307. package/dist/coordination/techstack-mailbox-consumer.d.ts.map +0 -1
  308. package/dist/coordination/transport.d.ts.map +0 -1
  309. package/dist/coordination/worktree-task-runner.d.ts.map +0 -1
  310. package/dist/core/agent-internals.d.ts.map +0 -1
  311. package/dist/core/agent-loop.d.ts.map +0 -1
  312. package/dist/core/agent-response.d.ts.map +0 -1
  313. package/dist/core/agent-tools.d.ts.map +0 -1
  314. package/dist/core/agent-types.d.ts.map +0 -1
  315. package/dist/core/agent.d.ts.map +0 -1
  316. package/dist/core/btw.d.ts.map +0 -1
  317. package/dist/core/context.d.ts.map +0 -1
  318. package/dist/core/continue-intent.d.ts.map +0 -1
  319. package/dist/core/continue-to-next-iteration.d.ts.map +0 -1
  320. package/dist/core/conversation-state.d.ts.map +0 -1
  321. package/dist/core/fallback-model.d.ts.map +0 -1
  322. package/dist/core/fallback-profile-manager.d.ts.map +0 -1
  323. package/dist/core/fleet-pulse.d.ts.map +0 -1
  324. package/dist/core/index.d.ts.map +0 -1
  325. package/dist/core/index.js.map +0 -7
  326. package/dist/core/input-builder.d.ts.map +0 -1
  327. package/dist/core/instruction-bundle.d.ts.map +0 -1
  328. package/dist/core/iteration-limit.d.ts.map +0 -1
  329. package/dist/core/mailbox-loop.d.ts.map +0 -1
  330. package/dist/core/model-availability-calendar.d.ts.map +0 -1
  331. package/dist/core/model-ref.d.ts.map +0 -1
  332. package/dist/core/model-ref.js.map +0 -7
  333. package/dist/core/modes/brief.d.ts.map +0 -1
  334. package/dist/core/modes/default.d.ts.map +0 -1
  335. package/dist/core/modes/teach.d.ts.map +0 -1
  336. package/dist/core/provider-runner.d.ts.map +0 -1
  337. package/dist/core/queued-messages.d.ts.map +0 -1
  338. package/dist/core/request-provider-binding.d.ts.map +0 -1
  339. package/dist/core/run-env.d.ts.map +0 -1
  340. package/dist/core/streaming-response-builder.d.ts.map +0 -1
  341. package/dist/core/system-prompt-blocks.d.ts.map +0 -1
  342. package/dist/core/system-prompt-builder.d.ts.map +0 -1
  343. package/dist/core/system-prompt-environment-probes.d.ts.map +0 -1
  344. package/dist/core/system-prompt-environment.d.ts.map +0 -1
  345. package/dist/core/system-prompt-memory-skills.d.ts.map +0 -1
  346. package/dist/core/system-prompt-plan.d.ts.map +0 -1
  347. package/dist/core/system-prompt-shell.d.ts.map +0 -1
  348. package/dist/core/system-prompt-skill-bodies.d.ts.map +0 -1
  349. package/dist/core/system-prompt-skill-text.d.ts.map +0 -1
  350. package/dist/defaults/index.d.ts.map +0 -1
  351. package/dist/defaults/index.js.map +0 -7
  352. package/dist/design/index.d.ts.map +0 -1
  353. package/dist/design/index.js.map +0 -7
  354. package/dist/execution/auto-compaction-middleware.d.ts.map +0 -1
  355. package/dist/execution/autonomous-runner.d.ts.map +0 -1
  356. package/dist/execution/autonomy-brain.d.ts.map +0 -1
  357. package/dist/execution/autonomy-prompt-contributor.d.ts.map +0 -1
  358. package/dist/execution/brain-chain.d.ts.map +0 -1
  359. package/dist/execution/brain-circuit.d.ts.map +0 -1
  360. package/dist/execution/brain-evaluation.d.ts.map +0 -1
  361. package/dist/execution/brain-runtime-constants.d.ts.map +0 -1
  362. package/dist/execution/brain-runtime.d.ts.map +0 -1
  363. package/dist/execution/compaction-core.d.ts.map +0 -1
  364. package/dist/execution/compaction-scoring.d.ts.map +0 -1
  365. package/dist/execution/compaction-summary-cache.d.ts.map +0 -1
  366. package/dist/execution/compactor.d.ts.map +0 -1
  367. package/dist/execution/council-brain.d.ts.map +0 -1
  368. package/dist/execution/council-orchestrator.d.ts.map +0 -1
  369. package/dist/execution/council-personas.d.ts.map +0 -1
  370. package/dist/execution/council-profiles.d.ts.map +0 -1
  371. package/dist/execution/council-prompts.d.ts.map +0 -1
  372. package/dist/execution/council-resolution.d.ts.map +0 -1
  373. package/dist/execution/design-color.d.ts.map +0 -1
  374. package/dist/execution/design-detect.d.ts.map +0 -1
  375. package/dist/execution/design-kit-loader.d.ts.map +0 -1
  376. package/dist/execution/design-materialize.d.ts.map +0 -1
  377. package/dist/execution/design-project-store.d.ts.map +0 -1
  378. package/dist/execution/design-tune.d.ts.map +0 -1
  379. package/dist/execution/design-verify.d.ts.map +0 -1
  380. package/dist/execution/enhance-recovery.d.ts.map +0 -1
  381. package/dist/execution/error-handler.d.ts.map +0 -1
  382. package/dist/execution/eternal-autonomy-types.d.ts.map +0 -1
  383. package/dist/execution/eternal-autonomy.d.ts.map +0 -1
  384. package/dist/execution/goal-preamble.d.ts.map +0 -1
  385. package/dist/execution/index.d.ts.map +0 -1
  386. package/dist/execution/index.js.map +0 -7
  387. package/dist/execution/intelligent-compactor.d.ts.map +0 -1
  388. package/dist/execution/model-runtime.d.ts.map +0 -1
  389. package/dist/execution/one-shot-llm.d.ts.map +0 -1
  390. package/dist/execution/parallel-eternal-engine.d.ts.map +0 -1
  391. package/dist/execution/prompt-enhancer.d.ts.map +0 -1
  392. package/dist/execution/prompt-enhancer.js.map +0 -7
  393. package/dist/execution/prompt-loader.d.ts.map +0 -1
  394. package/dist/execution/provider-runner-impl.d.ts.map +0 -1
  395. package/dist/execution/regex-patterns.d.ts.map +0 -1
  396. package/dist/execution/retry-policy.d.ts.map +0 -1
  397. package/dist/execution/selective-compactor.d.ts.map +0 -1
  398. package/dist/execution/skill-loader.d.ts.map +0 -1
  399. package/dist/execution/strategy-compactor.d.ts.map +0 -1
  400. package/dist/execution/subagent-compaction.d.ts.map +0 -1
  401. package/dist/execution/tool-executor-logging.d.ts.map +0 -1
  402. package/dist/execution/tool-executor-results.d.ts.map +0 -1
  403. package/dist/execution/tool-executor-stream.d.ts.map +0 -1
  404. package/dist/execution/tool-executor-support.d.ts.map +0 -1
  405. package/dist/execution/tool-executor.d.ts.map +0 -1
  406. package/dist/extension/extension-points.d.ts.map +0 -1
  407. package/dist/extension/index.d.ts.map +0 -1
  408. package/dist/extension/index.js.map +0 -7
  409. package/dist/extension/registry.d.ts.map +0 -1
  410. package/dist/fleet-notifier.d.ts.map +0 -1
  411. package/dist/goal/checkpoint.d.ts.map +0 -1
  412. package/dist/goal/goal-assessor.d.ts.map +0 -1
  413. package/dist/goal/goal-planner.d.ts.map +0 -1
  414. package/dist/goal/goal-runner.d.ts.map +0 -1
  415. package/dist/goal/index.d.ts.map +0 -1
  416. package/dist/goal/index.js.map +0 -7
  417. package/dist/goal/phase-board-mutations.d.ts.map +0 -1
  418. package/dist/goal/phase-graph-builder.d.ts.map +0 -1
  419. package/dist/goal/phase-orchestrator-integration.d.ts.map +0 -1
  420. package/dist/goal/phase-orchestrator-queries.d.ts.map +0 -1
  421. package/dist/goal/phase-orchestrator-runtime.d.ts.map +0 -1
  422. package/dist/goal/phase-orchestrator-types.d.ts.map +0 -1
  423. package/dist/goal/phase-orchestrator.d.ts.map +0 -1
  424. package/dist/goal/phase-store.d.ts.map +0 -1
  425. package/dist/goal/types.d.ts.map +0 -1
  426. package/dist/hooks/http-executor.d.ts.map +0 -1
  427. package/dist/hooks/index.d.ts.map +0 -1
  428. package/dist/hooks/index.js.map +0 -7
  429. package/dist/hooks/registry.d.ts.map +0 -1
  430. package/dist/hooks/runner.d.ts.map +0 -1
  431. package/dist/hooks/shell-executor.d.ts.map +0 -1
  432. package/dist/hooks/shell-hooks-equal.d.ts.map +0 -1
  433. package/dist/hq/alerts.d.ts.map +0 -1
  434. package/dist/hq/auth-audit.d.ts.map +0 -1
  435. package/dist/hq/auth-store.d.ts.map +0 -1
  436. package/dist/hq/bootstrap-store.d.ts.map +0 -1
  437. package/dist/hq/brain-bridge.d.ts.map +0 -1
  438. package/dist/hq/bridge-context.d.ts.map +0 -1
  439. package/dist/hq/commands.d.ts.map +0 -1
  440. package/dist/hq/cost-bridge.d.ts.map +0 -1
  441. package/dist/hq/exposure.d.ts.map +0 -1
  442. package/dist/hq/factory.d.ts.map +0 -1
  443. package/dist/hq/fleet-bridge.d.ts.map +0 -1
  444. package/dist/hq/index.d.ts.map +0 -1
  445. package/dist/hq/index.js.map +0 -7
  446. package/dist/hq/kanban-store.d.ts.map +0 -1
  447. package/dist/hq/mailbox-mapper.d.ts.map +0 -1
  448. package/dist/hq/persistence/event-log.d.ts.map +0 -1
  449. package/dist/hq/persistence/jsonl-io.d.ts.map +0 -1
  450. package/dist/hq/persistence/simple-log.d.ts.map +0 -1
  451. package/dist/hq/persistence/snapshot-store.d.ts.map +0 -1
  452. package/dist/hq/persistence/timeseries-store.d.ts.map +0 -1
  453. package/dist/hq/persistence.d.ts.map +0 -1
  454. package/dist/hq/protocol/brain.d.ts.map +0 -1
  455. package/dist/hq/protocol/browser.d.ts.map +0 -1
  456. package/dist/hq/protocol/client.d.ts.map +0 -1
  457. package/dist/hq/protocol/core.d.ts.map +0 -1
  458. package/dist/hq/protocol/fleet.d.ts.map +0 -1
  459. package/dist/hq/protocol/kanban.d.ts.map +0 -1
  460. package/dist/hq/protocol/mailbox.d.ts.map +0 -1
  461. package/dist/hq/protocol/mcp.d.ts.map +0 -1
  462. package/dist/hq/protocol/project.d.ts.map +0 -1
  463. package/dist/hq/protocol/session.d.ts.map +0 -1
  464. package/dist/hq/protocol/tool.d.ts.map +0 -1
  465. package/dist/hq/protocol.d.ts.map +0 -1
  466. package/dist/hq/publisher.d.ts.map +0 -1
  467. package/dist/hq/redaction.d.ts.map +0 -1
  468. package/dist/hq/session-bridge.d.ts.map +0 -1
  469. package/dist/hq/tool-bridge.d.ts.map +0 -1
  470. package/dist/hq/transcript-mapper.d.ts.map +0 -1
  471. package/dist/hq/worktree-bridge.d.ts.map +0 -1
  472. package/dist/hq/write-queues.d.ts.map +0 -1
  473. package/dist/index.d.ts.map +0 -1
  474. package/dist/index.js.map +0 -7
  475. package/dist/infrastructure/context-manager.d.ts.map +0 -1
  476. package/dist/infrastructure/index.d.ts.map +0 -1
  477. package/dist/infrastructure/index.js.map +0 -7
  478. package/dist/infrastructure/logger.d.ts.map +0 -1
  479. package/dist/infrastructure/mcp-servers.d.ts.map +0 -1
  480. package/dist/infrastructure/path-resolver.d.ts.map +0 -1
  481. package/dist/infrastructure/provider-cache-ledger.d.ts.map +0 -1
  482. package/dist/infrastructure/token-counter.d.ts.map +0 -1
  483. package/dist/kernel/container.d.ts.map +0 -1
  484. package/dist/kernel/events/agent-events.d.ts.map +0 -1
  485. package/dist/kernel/events/brain-events.d.ts.map +0 -1
  486. package/dist/kernel/events/file-events.d.ts.map +0 -1
  487. package/dist/kernel/events/fleet-events.d.ts.map +0 -1
  488. package/dist/kernel/events/memory-events.d.ts.map +0 -1
  489. package/dist/kernel/events/network-events.d.ts.map +0 -1
  490. package/dist/kernel/events/process-events.d.ts.map +0 -1
  491. package/dist/kernel/events/provider-events.d.ts.map +0 -1
  492. package/dist/kernel/events/sdd-events.d.ts.map +0 -1
  493. package/dist/kernel/events/session-events.d.ts.map +0 -1
  494. package/dist/kernel/events/tool-events.d.ts.map +0 -1
  495. package/dist/kernel/events/worktree-events.d.ts.map +0 -1
  496. package/dist/kernel/events.d.ts.map +0 -1
  497. package/dist/kernel/index.d.ts.map +0 -1
  498. package/dist/kernel/index.js.map +0 -7
  499. package/dist/kernel/pipeline.d.ts.map +0 -1
  500. package/dist/kernel/run-controller.d.ts.map +0 -1
  501. package/dist/kernel/tokens.d.ts.map +0 -1
  502. package/dist/mailbox-attach.d.ts.map +0 -1
  503. package/dist/middleware/collab-pause.d.ts.map +0 -1
  504. package/dist/models/alibaba-token-plan-catalog.d.ts.map +0 -1
  505. package/dist/models/codex-catalog.d.ts.map +0 -1
  506. package/dist/models/index.d.ts.map +0 -1
  507. package/dist/models/index.js.map +0 -7
  508. package/dist/models/llm-selector.d.ts.map +0 -1
  509. package/dist/models/mode-store.d.ts.map +0 -1
  510. package/dist/models/model-intelligence.d.ts.map +0 -1
  511. package/dist/models/model-router.d.ts.map +0 -1
  512. package/dist/models/models-registry.d.ts.map +0 -1
  513. package/dist/models/provider-model-resolve.d.ts.map +0 -1
  514. package/dist/notifications/index.d.ts.map +0 -1
  515. package/dist/notifications/index.js.map +0 -7
  516. package/dist/notifications/notifier-impl.d.ts.map +0 -1
  517. package/dist/notifications/notifier.d.ts.map +0 -1
  518. package/dist/notifications/types.d.ts.map +0 -1
  519. package/dist/observability/event-bridge.d.ts.map +0 -1
  520. package/dist/observability/health.d.ts.map +0 -1
  521. package/dist/observability/index.d.ts.map +0 -1
  522. package/dist/observability/index.js.map +0 -7
  523. package/dist/observability/metrics.d.ts.map +0 -1
  524. package/dist/observability/network-telemetry.d.ts.map +0 -1
  525. package/dist/observability/otel-tracer.d.ts.map +0 -1
  526. package/dist/observability/otlp-metrics.d.ts.map +0 -1
  527. package/dist/observability/otlp-traces.d.ts.map +0 -1
  528. package/dist/observability/process-telemetry.d.ts.map +0 -1
  529. package/dist/observability/prometheus.d.ts.map +0 -1
  530. package/dist/observability/redact-command.d.ts.map +0 -1
  531. package/dist/observability/tracer.d.ts.map +0 -1
  532. package/dist/plugin/api.d.ts.map +0 -1
  533. package/dist/plugin/config.d.ts.map +0 -1
  534. package/dist/plugin/index.d.ts.map +0 -1
  535. package/dist/plugin/index.js.map +0 -7
  536. package/dist/plugin/loader.d.ts.map +0 -1
  537. package/dist/plugins/auto-review-plugin.d.ts.map +0 -1
  538. package/dist/plugins/chimera-plugin.d.ts.map +0 -1
  539. package/dist/plugins/prompts-plugin.d.ts.map +0 -1
  540. package/dist/plugins/review-claim-registry.d.ts.map +0 -1
  541. package/dist/plugins/review-context-builder.d.ts.map +0 -1
  542. package/dist/plugins/review-finding-commands.d.ts.map +0 -1
  543. package/dist/plugins/review-finding-integration.d.ts.map +0 -1
  544. package/dist/plugins/review-finding-parser.d.ts.map +0 -1
  545. package/dist/plugins/review-finding-store.d.ts.map +0 -1
  546. package/dist/plugins/review-finding-types.d.ts.map +0 -1
  547. package/dist/plugins/review-report-integration.d.ts.map +0 -1
  548. package/dist/plugins/review-report-store.d.ts.map +0 -1
  549. package/dist/plugins/review-report-types.d.ts.map +0 -1
  550. package/dist/plugins/review-types.d.ts.map +0 -1
  551. package/dist/plugins/skills-plugin.d.ts.map +0 -1
  552. package/dist/plugins/sync-plugin.d.ts.map +0 -1
  553. package/dist/prompts/index.d.ts.map +0 -1
  554. package/dist/prompts/prompt-installer.d.ts.map +0 -1
  555. package/dist/prompts/prompt-manifest-store.d.ts.map +0 -1
  556. package/dist/registry/index.d.ts.map +0 -1
  557. package/dist/registry/index.js.map +0 -7
  558. package/dist/registry/provider-registry.d.ts.map +0 -1
  559. package/dist/registry/slash-command-registry.d.ts.map +0 -1
  560. package/dist/registry/tool-registry.d.ts.map +0 -1
  561. package/dist/replay/hash.d.ts.map +0 -1
  562. package/dist/replay/index.d.ts.map +0 -1
  563. package/dist/replay/index.js.map +0 -7
  564. package/dist/replay/replay-provider-runner.d.ts.map +0 -1
  565. package/dist/security/capabilities.d.ts.map +0 -1
  566. package/dist/security/config-secrets.d.ts.map +0 -1
  567. package/dist/security/directory-permission-policy.d.ts.map +0 -1
  568. package/dist/security/directory-policy-schema.d.ts.map +0 -1
  569. package/dist/security/index.d.ts.map +0 -1
  570. package/dist/security/index.js.map +0 -7
  571. package/dist/security/kanban-boundary.d.ts.map +0 -1
  572. package/dist/security/permission-policy-schema.d.ts.map +0 -1
  573. package/dist/security/permission-policy.d.ts.map +0 -1
  574. package/dist/security/readonly-permission-policy.d.ts.map +0 -1
  575. package/dist/security/secret-scrubber.d.ts.map +0 -1
  576. package/dist/security/secret-vault.d.ts.map +0 -1
  577. package/dist/security/trust-boundary.d.ts.map +0 -1
  578. package/dist/security/yolo-risk.d.ts.map +0 -1
  579. package/dist/session-registry-atomic-file.d.ts.map +0 -1
  580. package/dist/session-registry-types.d.ts.map +0 -1
  581. package/dist/session-registry.d.ts.map +0 -1
  582. package/dist/skills/foreign-sources.d.ts.map +0 -1
  583. package/dist/skills/frontmatter.d.ts.map +0 -1
  584. package/dist/skills/github-fetcher.d.ts.map +0 -1
  585. package/dist/skills/index.d.ts.map +0 -1
  586. package/dist/skills/index.js.map +0 -7
  587. package/dist/skills/limits.d.ts.map +0 -1
  588. package/dist/skills/manifest-store.d.ts.map +0 -1
  589. package/dist/skills/registry/github-direct-adapter.d.ts.map +0 -1
  590. package/dist/skills/registry/registry-adapter.d.ts.map +0 -1
  591. package/dist/skills/registry/skills-sh-adapter.d.ts.map +0 -1
  592. package/dist/skills/skill-generator.d.ts.map +0 -1
  593. package/dist/skills/skill-installer.d.ts.map +0 -1
  594. package/dist/storage/annotations-store.d.ts.map +0 -1
  595. package/dist/storage/attachment-store.d.ts.map +0 -1
  596. package/dist/storage/cloud-sync.d.ts.map +0 -1
  597. package/dist/storage/completed-work-checkpoint.d.ts.map +0 -1
  598. package/dist/storage/config-loader/bootstrap.d.ts.map +0 -1
  599. package/dist/storage/config-loader/default-repair.d.ts.map +0 -1
  600. package/dist/storage/config-loader/defaults.d.ts.map +0 -1
  601. package/dist/storage/config-loader/diagnostics.d.ts.map +0 -1
  602. package/dist/storage/config-loader/env-overrides.d.ts.map +0 -1
  603. package/dist/storage/config-loader/in-project-policy.d.ts.map +0 -1
  604. package/dist/storage/config-loader/inline-provider-models.d.ts.map +0 -1
  605. package/dist/storage/config-loader/legacy-sage-migration.d.ts.map +0 -1
  606. package/dist/storage/config-loader/path-identity.d.ts.map +0 -1
  607. package/dist/storage/config-loader/types.d.ts.map +0 -1
  608. package/dist/storage/config-loader/validation.d.ts.map +0 -1
  609. package/dist/storage/config-loader.d.ts.map +0 -1
  610. package/dist/storage/config-migration.d.ts.map +0 -1
  611. package/dist/storage/config-store.d.ts.map +0 -1
  612. package/dist/storage/director-state.d.ts.map +0 -1
  613. package/dist/storage/file-session-writer.d.ts.map +0 -1
  614. package/dist/storage/goal-coordination.d.ts.map +0 -1
  615. package/dist/storage/goal-kanban.d.ts.map +0 -1
  616. package/dist/storage/goal-store.d.ts.map +0 -1
  617. package/dist/storage/index.d.ts.map +0 -1
  618. package/dist/storage/index.js.map +0 -7
  619. package/dist/storage/input-history-store.d.ts.map +0 -1
  620. package/dist/storage/memory-backend.d.ts.map +0 -1
  621. package/dist/storage/memory-consolidator.d.ts.map +0 -1
  622. package/dist/storage/memory-graph-backend.d.ts.map +0 -1
  623. package/dist/storage/plan-store.d.ts.map +0 -1
  624. package/dist/storage/plan-templates.d.ts.map +0 -1
  625. package/dist/storage/prompt-store.d.ts.map +0 -1
  626. package/dist/storage/prompt-usage-store.d.ts.map +0 -1
  627. package/dist/storage/provider-config-watcher.d.ts.map +0 -1
  628. package/dist/storage/queue-store.d.ts.map +0 -1
  629. package/dist/storage/recovery-lock.d.ts.map +0 -1
  630. package/dist/storage/replay-log-store.d.ts.map +0 -1
  631. package/dist/storage/session-analyzer.d.ts.map +0 -1
  632. package/dist/storage/session-checkpoint-cas.d.ts.map +0 -1
  633. package/dist/storage/session-event-bridge.d.ts.map +0 -1
  634. package/dist/storage/session-helpers.d.ts.map +0 -1
  635. package/dist/storage/session-id-resolver.d.ts.map +0 -1
  636. package/dist/storage/session-id.d.ts.map +0 -1
  637. package/dist/storage/session-read-scrubber.d.ts.map +0 -1
  638. package/dist/storage/session-reader.d.ts.map +0 -1
  639. package/dist/storage/session-recovery.d.ts.map +0 -1
  640. package/dist/storage/session-resume-validation.d.ts.map +0 -1
  641. package/dist/storage/session-rewind-apply.d.ts.map +0 -1
  642. package/dist/storage/session-rewinder.d.ts.map +0 -1
  643. package/dist/storage/session-store/delete-session-artifacts.d.ts.map +0 -1
  644. package/dist/storage/session-store/delete-session-guards.d.ts.map +0 -1
  645. package/dist/storage/session-store/directory-scan.d.ts.map +0 -1
  646. package/dist/storage/session-store/directory-session-files.d.ts.map +0 -1
  647. package/dist/storage/session-store/events.d.ts.map +0 -1
  648. package/dist/storage/session-store/fork-session.d.ts.map +0 -1
  649. package/dist/storage/session-store/index-reader.d.ts.map +0 -1
  650. package/dist/storage/session-store/load-cache.d.ts.map +0 -1
  651. package/dist/storage/session-store/load-session-data.d.ts.map +0 -1
  652. package/dist/storage/session-store/paths.d.ts.map +0 -1
  653. package/dist/storage/session-store/prune-helpers.d.ts.map +0 -1
  654. package/dist/storage/session-store/replay.d.ts.map +0 -1
  655. package/dist/storage/session-store/search-events.d.ts.map +0 -1
  656. package/dist/storage/session-store/shard-manifest.d.ts.map +0 -1
  657. package/dist/storage/session-store/summary-builder.d.ts.map +0 -1
  658. package/dist/storage/session-store/summary-header.d.ts.map +0 -1
  659. package/dist/storage/session-store/types.d.ts.map +0 -1
  660. package/dist/storage/session-store.d.ts.map +0 -1
  661. package/dist/storage/session-summary.d.ts.map +0 -1
  662. package/dist/storage/session-tool-call-ends.d.ts.map +0 -1
  663. package/dist/storage/session-writer-scrubber.d.ts.map +0 -1
  664. package/dist/storage/session-writer-truncate.d.ts.map +0 -1
  665. package/dist/storage/storage-concurrency.d.ts.map +0 -1
  666. package/dist/storage/task-store.d.ts.map +0 -1
  667. package/dist/storage/todos-checkpoint.d.ts.map +0 -1
  668. package/dist/storage/tool-audit-log.d.ts.map +0 -1
  669. package/dist/tasking/index.d.ts.map +0 -1
  670. package/dist/tasking/index.js.map +0 -7
  671. package/dist/tasking/task-store.d.ts.map +0 -1
  672. package/dist/tasking/task-tracker.d.ts.map +0 -1
  673. package/dist/tools/council-tool.d.ts.map +0 -1
  674. package/dist/tools/fallback-chain-manage-tool.d.ts.map +0 -1
  675. package/dist/tools/fallback-favorite-manage-tool.d.ts.map +0 -1
  676. package/dist/tools/fallback-manage-helpers.d.ts.map +0 -1
  677. package/dist/tools/fallback-manage-tool-options.d.ts.map +0 -1
  678. package/dist/tools/fallback-manage-tools.d.ts.map +0 -1
  679. package/dist/tools/fallback-model-ref-parse.d.ts.map +0 -1
  680. package/dist/tools/fallback-provider-key-store.d.ts.map +0 -1
  681. package/dist/tools/fallback-system-config-view-tool.d.ts.map +0 -1
  682. package/dist/tools/index.d.ts.map +0 -1
  683. package/dist/tools/index.js.map +0 -7
  684. package/dist/tools/mcp-control.d.ts.map +0 -1
  685. package/dist/tools/mcp-use.d.ts.map +0 -1
  686. package/dist/tools/one-shot-llm-tool.d.ts.map +0 -1
  687. package/dist/tools/plugin-manager.d.ts.map +0 -1
  688. package/dist/types/agent-bridge.d.ts.map +0 -1
  689. package/dist/types/attachment.d.ts.map +0 -1
  690. package/dist/types/autonomy.d.ts.map +0 -1
  691. package/dist/types/blocks.d.ts.map +0 -1
  692. package/dist/types/compactor.d.ts.map +0 -1
  693. package/dist/types/config/autonomy.d.ts.map +0 -1
  694. package/dist/types/config/context.d.ts.map +0 -1
  695. package/dist/types/config/fleet-chat.d.ts.map +0 -1
  696. package/dist/types/config/mcp-features.d.ts.map +0 -1
  697. package/dist/types/config/providers.d.ts.map +0 -1
  698. package/dist/types/config/root.d.ts.map +0 -1
  699. package/dist/types/config/runtime.d.ts.map +0 -1
  700. package/dist/types/config/skills-fleet-brain.d.ts.map +0 -1
  701. package/dist/types/config/tools.d.ts.map +0 -1
  702. package/dist/types/config.d.ts.map +0 -1
  703. package/dist/types/context-evidence.d.ts.map +0 -1
  704. package/dist/types/context-window.d.ts.map +0 -1
  705. package/dist/types/council.d.ts.map +0 -1
  706. package/dist/types/default-config.d.ts.map +0 -1
  707. package/dist/types/design-kit.d.ts.map +0 -1
  708. package/dist/types/error-handler.d.ts.map +0 -1
  709. package/dist/types/errors.d.ts.map +0 -1
  710. package/dist/types/file-event-record.d.ts.map +0 -1
  711. package/dist/types/hooks.d.ts.map +0 -1
  712. package/dist/types/index.d.ts.map +0 -1
  713. package/dist/types/index.js.map +0 -7
  714. package/dist/types/input-reader.d.ts.map +0 -1
  715. package/dist/types/logger.d.ts.map +0 -1
  716. package/dist/types/memory.d.ts.map +0 -1
  717. package/dist/types/messages.d.ts.map +0 -1
  718. package/dist/types/mode-prompts.d.ts.map +0 -1
  719. package/dist/types/mode.d.ts.map +0 -1
  720. package/dist/types/models-registry.d.ts.map +0 -1
  721. package/dist/types/multi-agent.d.ts.map +0 -1
  722. package/dist/types/observability.d.ts.map +0 -1
  723. package/dist/types/one-shot-llm.d.ts.map +0 -1
  724. package/dist/types/path-resolver.d.ts.map +0 -1
  725. package/dist/types/permission.d.ts.map +0 -1
  726. package/dist/types/plugin.d.ts.map +0 -1
  727. package/dist/types/prompt-registry.d.ts.map +0 -1
  728. package/dist/types/prompt.d.ts.map +0 -1
  729. package/dist/types/provider-runner.d.ts.map +0 -1
  730. package/dist/types/provider.d.ts.map +0 -1
  731. package/dist/types/quota-regex.d.ts.map +0 -1
  732. package/dist/types/renderer.d.ts.map +0 -1
  733. package/dist/types/retry-policy.d.ts.map +0 -1
  734. package/dist/types/secret-scrubber.d.ts.map +0 -1
  735. package/dist/types/secret-vault.d.ts.map +0 -1
  736. package/dist/types/selector.d.ts.map +0 -1
  737. package/dist/types/session-markers.d.ts.map +0 -1
  738. package/dist/types/session-markers.js.map +0 -7
  739. package/dist/types/session-reader.d.ts.map +0 -1
  740. package/dist/types/session-rewinder.d.ts.map +0 -1
  741. package/dist/types/session.d.ts.map +0 -1
  742. package/dist/types/side-effect.d.ts.map +0 -1
  743. package/dist/types/skill.d.ts.map +0 -1
  744. package/dist/types/slash-command.d.ts.map +0 -1
  745. package/dist/types/spec.d.ts.map +0 -1
  746. package/dist/types/system-prompt-contributor.d.ts.map +0 -1
  747. package/dist/types/system-prompt.d.ts.map +0 -1
  748. package/dist/types/task-graph.d.ts.map +0 -1
  749. package/dist/types/token-counter.d.ts.map +0 -1
  750. package/dist/types/tool-executor.d.ts.map +0 -1
  751. package/dist/types/tool-markers.d.ts.map +0 -1
  752. package/dist/types/tool.d.ts.map +0 -1
  753. package/dist/types/utility-types.d.ts.map +0 -1
  754. package/dist/utils/assert-never.d.ts.map +0 -1
  755. package/dist/utils/atomic-write.d.ts.map +0 -1
  756. package/dist/utils/cache-key.d.ts.map +0 -1
  757. package/dist/utils/child-env.d.ts.map +0 -1
  758. package/dist/utils/color.d.ts.map +0 -1
  759. package/dist/utils/compaction-preview.d.ts.map +0 -1
  760. package/dist/utils/config-backup.d.ts.map +0 -1
  761. package/dist/utils/config-json.d.ts.map +0 -1
  762. package/dist/utils/connectivity.d.ts.map +0 -1
  763. package/dist/utils/context-breakdown.d.ts.map +0 -1
  764. package/dist/utils/context-evidence.d.ts.map +0 -1
  765. package/dist/utils/crash-shield.d.ts.map +0 -1
  766. package/dist/utils/deep-merge.d.ts.map +0 -1
  767. package/dist/utils/diff.d.ts.map +0 -1
  768. package/dist/utils/error.d.ts.map +0 -1
  769. package/dist/utils/error.js.map +0 -7
  770. package/dist/utils/expect-defined.d.ts.map +0 -1
  771. package/dist/utils/expect-defined.js.map +0 -7
  772. package/dist/utils/glob-expand.d.ts.map +0 -1
  773. package/dist/utils/glob-match.d.ts.map +0 -1
  774. package/dist/utils/heap-watchdog.d.ts.map +0 -1
  775. package/dist/utils/heap-watchdog.js.map +0 -7
  776. package/dist/utils/incoming-images.d.ts.map +0 -1
  777. package/dist/utils/index.d.ts.map +0 -1
  778. package/dist/utils/index.js.map +0 -7
  779. package/dist/utils/instruction-file.d.ts.map +0 -1
  780. package/dist/utils/ip-guard.d.ts.map +0 -1
  781. package/dist/utils/json-repair.d.ts.map +0 -1
  782. package/dist/utils/json-schema-validate.d.ts.map +0 -1
  783. package/dist/utils/lru-cache.d.ts.map +0 -1
  784. package/dist/utils/merge-custom-models.d.ts.map +0 -1
  785. package/dist/utils/merge-models-payload.d.ts.map +0 -1
  786. package/dist/utils/message-invariants.d.ts.map +0 -1
  787. package/dist/utils/newline-normalize.d.ts.map +0 -1
  788. package/dist/utils/perf-profile.d.ts.map +0 -1
  789. package/dist/utils/pid.d.ts.map +0 -1
  790. package/dist/utils/project-identity.d.ts.map +0 -1
  791. package/dist/utils/project-watch.d.ts.map +0 -1
  792. package/dist/utils/regex-guard.d.ts.map +0 -1
  793. package/dist/utils/safe-json.d.ts.map +0 -1
  794. package/dist/utils/sage-output-block.d.ts.map +0 -1
  795. package/dist/utils/session-scoped-path.d.ts.map +0 -1
  796. package/dist/utils/sleep.d.ts.map +0 -1
  797. package/dist/utils/slug.d.ts.map +0 -1
  798. package/dist/utils/socket-path.d.ts.map +0 -1
  799. package/dist/utils/sqlite-warning.d.ts.map +0 -1
  800. package/dist/utils/string.d.ts.map +0 -1
  801. package/dist/utils/task-format.d.ts.map +0 -1
  802. package/dist/utils/term.d.ts.map +0 -1
  803. package/dist/utils/todos-format.d.ts.map +0 -1
  804. package/dist/utils/token-estimate.d.ts.map +0 -1
  805. package/dist/utils/tool-description-mode.d.ts.map +0 -1
  806. package/dist/utils/tool-output-serializer.d.ts.map +0 -1
  807. package/dist/utils/tool-result-render-mode.d.ts.map +0 -1
  808. package/dist/utils/tool-subject.d.ts.map +0 -1
  809. package/dist/utils/tool-wire-compact.d.ts.map +0 -1
  810. package/dist/utils/tree-kill.d.ts.map +0 -1
  811. package/dist/utils/tree-kill.js.map +0 -7
  812. package/dist/utils/ulid.d.ts.map +0 -1
  813. package/dist/utils/walk-ignore.d.ts.map +0 -1
  814. package/dist/utils/wstack-paths.d.ts.map +0 -1
  815. package/dist/worktree/index.d.ts.map +0 -1
  816. package/dist/worktree/index.js.map +0 -7
  817. package/dist/worktree/worktree-git.d.ts.map +0 -1
  818. package/dist/worktree/worktree-managed-ops.d.ts.map +0 -1
  819. package/dist/worktree/worktree-manager.d.ts.map +0 -1
  820. package/dist/worktree/worktree-types.d.ts.map +0 -1
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/coordination/agents/types.ts", "../../../src/coordination/agents/agent-prompts.ts", "../../../src/utils/wstack-paths.ts", "../../../src/coordination/agents/project-agent-identity.ts", "../../../src/coordination/agents/project-agent-config-validation.ts", "../../../src/coordination/agents/project-agent-knowledge-manifests.ts", "../../../src/coordination/agents/project-agent-learning-policy.ts", "../../../src/coordination/agents/project-agent-paths.ts", "../../../src/coordination/agents/project-agent-learning-entries.ts", "../../../src/coordination/agents/project-agent-learning-normalize.ts", "../../../src/coordination/agents/project-agent-learning-structured.ts", "../../../src/coordination/agents/project-agent-consolidation.ts", "../../../src/coordination/agents/project-agent-profile.ts", "../../../src/coordination/agents/project-agent-files.ts", "../../../src/coordination/agents/phase1-discovery.ts", "../../../src/coordination/agents/phase2-planning.ts", "../../../src/coordination/agents/phase3-build.ts", "../../../src/coordination/agents/phase3-wave1-platform.ts", "../../../src/coordination/agents/phase3-wave2-meta.ts", "../../../src/coordination/agents/phase4-verify.ts", "../../../src/coordination/agents/phase5-review.ts", "../../../src/coordination/agents/phase6-domain.ts", "../../../src/coordination/agents/phase7-knowledge.ts", "../../../src/coordination/agents/phase8-delivery.ts", "../../../src/coordination/agents/phase8-wave3-products.ts", "../../../src/coordination/agents/phase9-meta.ts", "../../../src/coordination/agents/phase9-wave4-platform-meta.ts", "../../../src/coordination/agents/role-skills.ts", "../../../src/coordination/agents/index.ts"],
4
- "sourcesContent": ["/**\n * Catalog types for the WrongStack agent fleet.\n *\n * An `AgentDefinition` bundles the runtime `SubagentConfig` (id/name/role/\n * prompt/tools) with two things the bare config lacks:\n * - a per-role `budget` tier (consumed by FLEET_ROSTER_BUDGETS), and\n * - dispatcher `capability` metadata (keywords + summary + phase) used by\n * the smart dispatcher to route a free-form task to the best agent.\n *\n * Phase files (`phase1-discovery.ts` \u2026 `phase9-meta.ts`) each export an\n * `AgentDefinition[]`; `index.ts` aggregates them into `AGENT_CATALOG`.\n * `fleet.ts` derives `FLEET_ROSTER` + `FLEET_ROSTER_BUDGETS` from the catalog.\n */\nimport type { SubagentConfig } from '../../types/multi-agent.js';\n\n/** Lifecycle phase grouping. Drives statusline labels + dispatcher tie-breaks. */\nexport type AgentPhase =\n | 'discovery'\n | 'planning'\n | 'build'\n | 'verify'\n | 'review'\n | 'domain'\n | 'knowledge'\n | 'delivery'\n | 'meta';\n\n/** Per-role budget tier. Same shape as fleet.ts `FleetRosterBudget`. */\nexport interface AgentBudgetTier {\n timeoutMs?: number | undefined;\n maxIterations?: number | undefined;\n maxToolCalls?: number | undefined;\n maxTokens?: number | undefined;\n maxCostUsd?: number | undefined;\n}\n\n/** Dispatcher routing metadata. */\nexport interface AgentCapability {\n phase: AgentPhase;\n /**\n * One-line capability summary. Fed to the LLM dispatcher classifier as the\n * candidate's description, and shown to the user when explaining a routing\n * decision. Keep it concrete and distinct from sibling agents.\n */\n summary: string;\n /**\n * Lowercased signal words/phrases for the heuristic dispatcher. A task whose\n * description contains these scores toward this agent. Order doesn't matter;\n * prefer specific terms (\"graphql\", \"wcag\") over generic ones (\"code\").\n */\n keywords: string[];\n /**\n * Optional `RoleDispatcherSignal` attached to the role. Wave-1/2/3/4 roles\n * carry this to make the \"why this role wins\" rationale auditable; legacy\n * roles omit it and the dispatcher falls back to `summary` + `keywords`.\n */\n rationale?: RoleDispatcherSignal | undefined;\n}\n\n/**\n * Read-only view of a role's dispatcher rationale, surfaceable to operators.\n *\n * `rationale` explains what the role owns; `signals` are the dispatcher's\n * routing tokens (extended with role id, sibling keywords, etc. at scoring\n * time); `differentiatesFrom` is the human-readable contrast against the\n * closest sibling.\n */\nexport interface RoleDispatcherSignal {\n rationale: string;\n signals: readonly string[];\n /**\n * One-line description of how this role differs from its closest sibling\n * (\"X finds defects; Y designs threats before code exists\"). Used by tests\n * to assert distinct boundaries and by docs to explain routing.\n */\n differentiatesFrom: string;\n}\n\n/** A single catalog entry: runtime config + budget tier + routing metadata. */\nexport interface AgentDefinition {\n config: SubagentConfig;\n budget: AgentBudgetTier;\n capability: AgentCapability;\n}\n\nconst HOUR = 60 * 60 * 1000;\n\n/**\n * Budget tiers by workload weight. Deliberately generous \u2014 the project's\n * existing roster uses multi-hour ceilings to avoid spurious timeouts on\n * monorepo-scale work, and the auto-extend handshake raises them further when\n * a subagent is still making progress.\n */\nexport const LIGHT_BUDGET: AgentBudgetTier = {\n timeoutMs: 3 * HOUR,\n maxIterations: 3000,\n maxToolCalls: 8000,\n};\nexport const MEDIUM_BUDGET: AgentBudgetTier = {\n timeoutMs: 5 * HOUR,\n maxIterations: 5000,\n maxToolCalls: 14000,\n};\nexport const HEAVY_BUDGET: AgentBudgetTier = {\n timeoutMs: 10 * HOUR,\n maxIterations: 8000,\n maxToolCalls: 20000,\n};\n\n/**\n * Tool allowlist presets. Agents pass the smallest set that covers their job \u2014\n * a planning agent should not hold `write`/`bash`, a reviewer should be\n * read-only. Spread + extend per-agent where a role needs one extra tool.\n */\nexport const TOOLS = {\n /** Pure read/inspect \u2014 safe for analysis and review agents. */\n read: ['read', 'grep', 'glob', 'search', 'tree', 'mailbox'],\n /** Read + structured inspection (logs, diffs, json, dependency audit). */\n inspect: ['read', 'grep', 'glob', 'search', 'tree', 'json', 'diff', 'logs', 'audit', 'mailbox'],\n /** Read + edit (no shell). For agents that write code/docs but don't run it. */\n write: ['read', 'grep', 'glob', 'search', 'tree', 'write', 'edit', 'replace', 'patch', 'mailbox'],\n /** Full build loop: edit + run (lint/format/typecheck/test/bash). */\n build: [\n 'read',\n 'grep',\n 'glob',\n 'search',\n 'tree',\n 'write',\n 'edit',\n 'replace',\n 'patch',\n 'bash',\n 'exec',\n 'lint',\n 'format',\n 'typecheck',\n 'test',\n 'mailbox',\n ],\n /** Version control. */\n vcs: ['read', 'grep', 'glob', 'git', 'diff'],\n /** Dependency management + CVE audit. */\n deps: ['read', 'grep', 'glob', 'install', 'outdated', 'audit', 'json', 'mailbox'],\n /** Documentation authoring. */\n docs: ['read', 'grep', 'glob', 'search', 'tree', 'write', 'edit', 'document', 'mailbox'],\n /** Web research. */\n research: ['read', 'grep', 'glob', 'search', 'fetch', 'mailbox'],\n} as const satisfies Record<string, readonly string[]>;\n", "import { readFileSync, statSync } from 'node:fs';\nimport * as path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { resolveWstackPaths } from '../../utils/wstack-paths.js';\nimport { buildProjectContextualizedPrompt } from './project-agent-identity.js';\n\n/**\n * Cache of resolved prompt text, keyed by `<envDir>\\0<id>`. Prompt files do\n * not change during a process lifetime, so the first successful (or failed)\n * lookup is memoized. The key includes the override env var so tests that set\n * `WRONGSTACK_AGENT_INSTRUCTIONS_DIR` still observe fresh resolution.\n */\nconst promptCache = new Map<string, string>();\n\n/**\n * Cache of the ordered candidate directory list, keyed by `<envDir>\\0<cwd-home>`.\n * The list is otherwise identical for every `agentPrompt()` call, so resolving\n * (and sorting via `statSync`) it once per env avoids ~7 redundant `statSync`\n * probes per call. `fleet.ts` + the phase catalogs alone call `agentPrompt()`\n * ~60 times at import time.\n */\nconst candidateCache = new Map<string, string[]>();\n\n/**\n * Mandatory modern technology policy that every built-in roster agent\n * inherits. Read at most once per process (memoized in `promptCache`) and\n * prepended to each role's base prompt so the rule travels with the persona.\n */\nconst TECH_VERSION_POLICY_KEY = '\\u0000__tech_version_policy__';\n\nlet techVersionPolicyBody: string | undefined;\n\nconst INLINE_TECH_VERSION_POLICY = `# Mandatory modern technology policy\n\nYou are bound to the current stable version of every library, framework and\npackage you use. The latest stable is preferred; the latest *published* is\n*required*.\n\n## Non-negotiable rules\n\n1. **Verify the version, never trust a number from training data.** Before\n recommending a package or framework version, fetch the live registry\n (npm, PyPI, crates, Go proxy, GitHub releases). Treat the value you read\n as the only acceptable reference; do not interpolate from memory.\n\n2. **Latest stable by default.** Pick the highest stable release that\n satisfies the project runtime, the pinned peer-dependency range, and\n the role's required APIs. Pin to \\`^<major>.<minor>.0\\` and report the\n exact version.\n\n3. **Reject alpha / beta / RC / nightly** unless the user explicitly\n requests a pre-release. State the rejection reason in the output.\n\n4. **Reject EOL, deprecated and unmaintained packages** \u2014 a package with\n no release in >2 years **and** open critical issues is *dead*. Reject\n it on the same day you find it and propose a maintained replacement.\n\n5. **Reject prehistoric technology.** The well-known blocklist:\n - \\`axios\\` / \\`node-fetch\\` / \\`got\\` / \\`request\\` \u2192 native \\`fetch\\` (Node 18+).\n - \\`moment\\` \u2192 \\`date-fns\\`, \\`luxon\\` or \\`Temporal\\`.\n - jQuery on new projects \u2192 vanilla DOM or React.\n - Gulp / Grunt \u2192 \\`tsup\\`, \\`esbuild\\` or \\`vite\\`.\n - CoffeeScript / Flow \u2192 TypeScript.\n - \\`Bluebird\\` \u2192 native Promises.\n - \\`crypto-js\\` \u2192 \\`node:crypto\\` or Web Crypto.\n - Bower \u2192 npm or pnpm.\n - \\`underscore\\` \u2192 \\`lodash\\` or native ES2020+.\n Use the intervention phrase: **\"This isn't code, this is X-year-old\n technology.\"** Follow with the modern replacement and a one-step\n migration path.\n\n6. **Prefer built-in over third-party.** Before adding a dependency, check\n the language or runtime native API. Examples:\n - Node \u226522.19 \u2192 \\`node:test\\`, \\`node:sqlite\\`, \\`node:fs/promises\\`,\n \\`fetch\\`, \\`WebSocket\\`, \\`node:crypto\\`, \\`node:stream/web\\`, AbortSignal.\n - Browsers \u2192 \\`fetch\\`, \\`AbortController\\`, \\`structuredClone\\`,\n \\`URLPattern\\`, Web Streams.\n - TypeScript \u22655.6 \u2192 \\`using\\` declarations, \\`await using\\`, the new\n iterator helpers, \\`NoInfer\\`, the \\`esnext.disposable\\` types.\n\n7. **Never silently upgrade a pinned version.** If the project pins an\n old version, call it out and report: the new compatible version,\n the breaking changes between them, and a migration recipe. Do not\n upgrade without confirmation.\n\n8. **Always cite the source and the verification time.** Output must\n include the registry URL and the date you verified, so the operator\n can audit the choice.\n\n9. **Never use deprecated APIs even if a tutorial says so.** When a\n vendor marks an API deprecated, switch to the documented replacement\n and record the migration in the role's working notes.\n\n10. **A package must exist.** Reject and call out any hallucinated package\n or framework. The intervention phrase for missing packages is\n **\"This package does not exist on the registry.\"** and the role must\n propose a real, maintained alternative.`;\n\nfunction loadTechVersionPolicy(): string {\n if (techVersionPolicyBody !== undefined) return techVersionPolicyBody;\n const fromDisk = policyBody();\n techVersionPolicyBody = fromDisk || INLINE_TECH_VERSION_POLICY;\n return techVersionPolicyBody;\n}\n\nfunction policyCandidateDirs(): string[] {\n const here = path.dirname(fileURLToPath(import.meta.url));\n const profileInstructions = resolveWstackPaths({ projectRoot: process.cwd() }).globalInstructions;\n return [\n path.resolve(here, '../../../../instructions/agents'),\n path.resolve(here, '../../../instructions/agents'),\n path.resolve(here, '../../instructions/agents'),\n path.resolve(here, '../instructions/agents'),\n path.resolve(here, 'instructions/agents'),\n path.join(profileInstructions, 'agents'),\n profileInstructions,\n ].filter((dir, index, all) => all.indexOf(dir) === index);\n}\n\nfunction policyBody(): string {\n const here = path.dirname(fileURLToPath(import.meta.url));\n // Two layouts must resolve:\n // * source: `packages/core/src/coordination/agents` \u2192 `../../instructions/agents/_policy/tech-version.md`\n // * build: `packages/core/dist/coordination/agents` \u2192 `../../../instructions/agents/_policy/tech-version.md`\n // Both point at the same on-disk file. We list every plausible relative\n // depth so the policy finds the prompt regardless of where the consumer\n // imported the helper from.\n const roots = [\n path.resolve(here, '_policy/tech-version.md'),\n path.resolve(here, '../_policy/tech-version.md'),\n path.resolve(here, '../../../instructions/agents/_policy/tech-version.md'),\n path.resolve(here, '../../instructions/agents/_policy/tech-version.md'),\n path.resolve(here, '../instructions/agents/_policy/tech-version.md'),\n path.resolve(here, '../../../../instructions/agents/_policy/tech-version.md'),\n path.resolve(here, 'instructions/agents/_policy/tech-version.md'),\n ];\n for (const file of roots) {\n try {\n return readFileSync(file, 'utf8').trim();\n } catch {\n // try next candidate\n }\n }\n for (const dir of policyCandidateDirs()) {\n try {\n return readFileSync(path.join(dir, '_policy', 'tech-version.md'), 'utf8').trim();\n } catch {\n // try next candidate\n }\n }\n return '';\n}\n\nexport function agentPrompt(id: string): string {\n // The policy body itself is a single shared suffix; return it directly\n // when the sentinel key is requested (used by tests / docs).\n if (id === TECH_VERSION_POLICY_KEY) return loadTechVersionPolicy();\n\n const envDir = process.env['WRONGSTACK_AGENT_INSTRUCTIONS_DIR'] ?? '';\n const policyOn = process.env['WRONGSTACK_AGENT_POLICY'] === 'on';\n const cacheBypass =\n (globalThis as { __WS_DISABLE_PROMPT_CACHE__?: boolean }).__WS_DISABLE_PROMPT_CACHE__ ===\n true;\n const cacheKey = `${envDir}\\u0000${policyOn ? 1 : 0}\\u0000${id}`;\n const cached = cacheBypass ? undefined : promptCache.get(cacheKey);\n if (cached !== undefined) return cached;\n\n const fileName = `${id}.md`;\n let resolved = '';\n for (const dir of agentPromptDirCandidates(envDir)) {\n try {\n resolved = readFileSync(path.join(dir, fileName), 'utf8').trim();\n break;\n } catch {\n // try next candidate\n }\n }\n // The policy body is appended to *every* role's prompt so the latest-stable\n // invariant is enforced uniformly. It is opt-in: the policy ships only when\n // the host explicitly enables it via `WRONGSTACK_AGENT_POLICY=on`. Tests\n // and byte-equality smoke fixtures stay deterministic by default; the\n // dispatcher and `agent-catalog` integration test opt in for the contract.\n const policy = policyOn ? loadTechVersionPolicy() : '';\n if (policy) {\n if (!resolved) {\n resolved = policy;\n } else if (cacheBypass || !resolved.includes('Mandatory modern technology policy')) {\n // Older role briefs reference the policy by name but do not yet embed\n // its body \u2014 append the canonical body so every prompt carries the\n // latest-stable invariant in full. In test-bypass mode we always\n // append so the cache-bypass assertion sees the canonical text even\n // when an older prompt already mentions the policy by name.\n resolved = `${resolved}\\n\\n---\\n\\n${policy}`;\n }\n }\n // Project-contextualized prompt: overlay identity, learned wisdom and\n // current-knowledge checklist on top of the base role prompt.\n // Uses the current working directory as project root when no explicit\n // WRONGSTACK_PROJECT_ROOT is set, allowing the project-specific agent\n // identity mechanism to work without any code changes.\n const projectRoot = process.env['WRONGSTACK_PROJECT_ROOT'] || process.cwd();\n resolved = buildProjectContextualizedPrompt(resolved, id, projectRoot);\n if (!cacheBypass) promptCache.set(cacheKey, resolved);\n return resolved;\n}\n\nfunction agentPromptDirCandidates(envDir: string): string[] {\n const profileInstructions = resolveWstackPaths({ projectRoot: process.cwd() }).globalInstructions;\n const candKey = `${envDir}\\u0000${profileInstructions}`;\n const cached = candidateCache.get(candKey);\n if (cached !== undefined) return cached;\n\n const here = path.dirname(fileURLToPath(import.meta.url));\n const explicitDir = envDir || undefined;\n const candidates = [\n ...(explicitDir ? [path.resolve(explicitDir)] : []),\n path.join(profileInstructions, 'agents'),\n path.resolve(here, '../../../../instructions/agents'),\n path.resolve(here, '../../../instructions/agents'),\n path.resolve(here, '../../instructions/agents'),\n path.resolve(here, '../instructions/agents'),\n path.resolve(here, 'instructions/agents'),\n ];\n const ordered = candidates.sort((a, b) => Number(!isDirectory(a)) - Number(!isDirectory(b)));\n candidateCache.set(candKey, ordered);\n return ordered;\n}\n\nfunction isDirectory(candidate: string): boolean {\n try {\n return statSync(candidate).isDirectory();\n } catch {\n return false;\n }\n}\n", "import { createHash } from 'node:crypto';\nimport * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\n\n/**\n * Path layout. All developer-level state lives in ~/.wrongstack/.\n * Per-project state is keyed by the canonical project root under\n * ~/.wrongstack/projects/<slug>/. Linked Git worktrees resolve to their main\n * checkout so coordination and durable state are shared across worktrees.\n *\n * The ONLY thing inside the project tree is the optional\n * .wrongstack/AGENTS.md (committed) and .wrongstack/skills/ (committed).\n */\n\nexport interface WstackPaths {\n /** ~/.wrongstack \u2014 global root. */\n globalRoot: string;\n /** Active profile name resolved from the bootstrap config. */\n profileName: string;\n /** ~/.wrongstack/profiles/<activeProfile> \u2014 active user-profile root. */\n profileDir: string;\n /** Absolute project root. */\n projectRoot: string;\n /** Home directory (~) \u2014 base for foreign tool state (~/.codex, ~/.agents, \u2026). */\n homeDir: string;\n /**\n * ~/.wrongstack/profiles/<activeProfile> \u2014 directory for profile-scoped\n * user state (mode.json, statusline.json, custom-context-modes.json, \u2026).\n */\n configDir: string;\n /** ~/.wrongstack/config.json \u2014 bootstrap config (activeProfile + version). */\n globalConfig: string;\n /**\n * ~/.wrongstack/profiles \u2014 directory containing per-profile configs.\n * Each profile has its own subdirectory with a config.json.\n */\n profilesDir: string;\n /**\n * Resolve the config path for a named profile.\n * Returns ~/.wrongstack/profiles/<name>/config.json.\n */\n profileConfig: (name: string) => string;\n /** Resolve ~/.wrongstack/profiles/<name>/statusline.json */\n profileStatuslineConfig: (name: string) => string;\n /** Resolve ~/.wrongstack/profiles/<name>/mode.json */\n profileModeConfig: (name: string) => string;\n /** Resolve ~/.wrongstack/profiles/<name>/provider-status.json */\n profileProviderStatus: (name: string) => string;\n /** Resolve ~/.wrongstack/profiles/<name>/update-cache.json */\n profileUpdateCache: (name: string) => string;\n /** ~/.wrongstack/.key \u2014 32 random bytes, mode 0600, AES-GCM key for the secret vault. */\n secretsKey: string;\n /** ~/.wrongstack/profiles/<activeProfile>/memory.md \u2014 profile memory. */\n globalMemory: string;\n /** ~/.wrongstack/profiles/<activeProfile>/skills \u2014 profile skills. */\n globalSkills: string;\n /** ~/.claude/skills \u2014 user-global skills from foreign coding agents (Claude Code, Codex, \u2026). Read-only. */\n globalClaudeSkills: string;\n /** ~/.wrongstack/profiles/<activeProfile>/design-kits \u2014 profile Design Studio kits. */\n globalDesignKits: string;\n /** ~/.wrongstack/profiles/<activeProfile>/prompts \u2014 profile prompt library. */\n globalPrompts: string;\n /** ~/.wrongstack/profiles/<activeProfile>/instructions \u2014 profile instruction overrides. */\n globalInstructions: string;\n /** ~/.wrongstack/profiles/<activeProfile>/prompt-usage.json \u2014 prompt usage. */\n promptUsage: string;\n /** ~/.wrongstack/cache \u2014 fetched data (models.dev, etc.). */\n cacheDir: string;\n /** ~/.wrongstack/cache/models.dev.json */\n modelsCache: string;\n /** ~/.wrongstack/cache/models-overlay.json \u2014 cached curated overlay. */\n modelsOverlayCache: string;\n /**\n * Per-project codebase symbol index (SQLite). Lives under the global project\n * dir \u2014 NOT inside the repo \u2014 so it never clutters the working tree or needs\n * gitignoring. `~/.wrongstack/projects/<hash>/codebase-index`.\n */\n projectCodebaseIndex: string;\n /** ~/.wrongstack/profiles/<activeProfile>/history \u2014 REPL line history. */\n historyFile: string;\n /** ~/.wrongstack/logs/wrongstack.log */\n logFile: string;\n /** ~/.wrongstack/projects/<hash> */\n projectDir: string;\n /** ~/.wrongstack/projects/<hash>/memory.md */\n projectMemory: string;\n /** ~/.wrongstack/projects/<hash>/sessions */\n projectSessions: string;\n /** ~/.wrongstack/projects/<hash>/trust.json */\n projectTrust: string;\n /** ~/.wrongstack/projects/<hash>/meta.json */\n projectMeta: string;\n /** ~/.wrongstack/projects/<hash>/config.local.json \u2014 optional override */\n projectLocalConfig: string;\n /** <project>/.wrongstack/config.json \u2014 per-project settings (safe fields only).\n * This lives inside the project root so it can be gitignored or shared. */\n inProjectConfig: string;\n /** <project>/.wrongstack/AGENTS.md \u2014 committed project memory. */\n inProjectAgentsFile: string;\n /** <project>/.wrongstack/skills \u2014 committed project skills. */\n inProjectSkills: string;\n /** <project>/.claude/skills \u2014 project skills authored for foreign coding agents (Claude Code, \u2026). Read-only. */\n inProjectClaudeSkills: string;\n /** <project>/.wrongstack/prompts \u2014 committed project prompt library. */\n inProjectPrompts: string;\n /** <project>/.wrongstack/instructions \u2014 committed project instruction overrides. */\n inProjectInstructions: string;\n /** <project>/.wrongstack/design-kits \u2014 committed project Design Studio kits. */\n inProjectDesignKits: string;\n /** <project>/.wrongstack/worktrees \u2014 git worktrees for per-phase isolation (gitignored). */\n inProjectWorktrees: string;\n /** Stable hash for the canonical project root (shared by linked Git worktrees). */\n projectHash: string;\n /** Human-readable canonical project slug, shared by linked Git worktrees. */\n projectSlug: string;\n /** ~/.wrongstack/projects/<hash>/goal.json \u2014 goal persistence */\n projectGoal: string;\n /** ~/.wrongstack/projects/<hash>/input-history.json \u2014 TUI prompt input history */\n projectInputHistory: string;\n /** ~/.wrongstack/projects/<hash>/specs \u2014 SDD spec files */\n projectSpecs: string;\n /** ~/.wrongstack/projects/<hash>/task-graphs \u2014 SDD task graphs */\n projectTaskGraphs: string;\n /** ~/.wrongstack/projects/<hash>/sdd-session.json \u2014 SDD session state */\n projectSddSession: string;\n /** ~/.wrongstack/projects/<hash>/plan.json \u2014 plan persistence */\n projectPlan: string;\n /** ~/.wrongstack/projects/<hash>/autophase \u2014 Goal phase-graph JSON files (dir name kept for backward compat) */\n projectAutophase: string;\n /** ~/.wrongstack/projects/<hash>/sdd-boards \u2014 live SDD board snapshots + JSONL event logs */\n projectSddBoards: string;\n /** ~/.wrongstack/profiles/<activeProfile>/sync.json \u2014 CloudSync configuration */\n syncConfig: string;\n /** ~/.wrongstack/config-history \u2014 timestamped backups on every config write */\n configHistoryDir: string;\n /** Function to get the status.json path for a project given its hash. */\n projectStatus: (projectHash: string) => string;\n}\n\n/**\n * Resolve the stable project identity root used by global WrongStack state.\n *\n * A linked Git worktree has its own checkout path and a `.git` *file* that\n * points into `<main>/.git/worktrees/<name>`. Its `commondir` points back to\n * the main checkout's `.git` directory. Treating the linked checkout path as\n * the project identity would split one repository into multiple session,\n * registry, and mailbox directories \u2014 agents in different worktrees would be\n * unable to see or message each other.\n *\n * Project-local paths still use the caller's actual checkout. Only global\n * state identity is canonicalized. Non-Git projects, normal checkouts, Git\n * submodules, and separate-git-dir layouts keep their existing identity.\n */\nexport function canonicalProjectRoot(absRoot: string): string {\n const checkoutRoot = path.resolve(absRoot);\n const dotGit = path.join(checkoutRoot, '.git');\n\n try {\n if (!fs.statSync(dotGit).isFile()) return checkoutRoot;\n\n const gitDirLine = fs.readFileSync(dotGit, 'utf8').trim();\n const match = /^gitdir:\\s*(.+)$/i.exec(gitDirLine);\n if (!match?.[1]) return checkoutRoot;\n\n const gitDir = path.resolve(checkoutRoot, match[1].trim());\n const commonDirFile = path.join(gitDir, 'commondir');\n if (!fs.statSync(commonDirFile).isFile()) return checkoutRoot;\n\n const commonDir = path.resolve(gitDir, fs.readFileSync(commonDirFile, 'utf8').trim());\n // Linked worktrees created by Git share the main checkout's `.git` dir.\n // A submodule or --separate-git-dir layout may point elsewhere; do not\n // guess a working-tree root for those shapes.\n if (path.basename(commonDir).toLowerCase() !== '.git') return checkoutRoot;\n return path.dirname(commonDir);\n } catch {\n // Missing/malformed administrative files must never make path resolution\n // fail. Falling back preserves the pre-canonicalization behavior.\n return checkoutRoot;\n }\n}\n\nexport function projectHash(absRoot: string): string {\n return createHash('sha256').update(canonicalProjectRoot(absRoot)).digest('hex').slice(0, 12);\n}\n\n/**\n * Human-readable project directory name: slugified folder name + short hash\n * suffix for uniqueness. e.g. `wrongstack-a1b2c3` instead of `3024e5e6fa58`.\n */\nexport function projectSlug(absRoot: string): string {\n const identityRoot = canonicalProjectRoot(absRoot);\n const base = slugify(path.basename(identityRoot));\n const hash = createHash('sha256').update(identityRoot).digest('hex').slice(0, 6);\n return `${base}-${hash}`;\n}\n\n/** Turn a folder name into a filesystem-safe lowercase slug. */\nfunction slugify(name: string): string {\n return (\n name\n .toLowerCase()\n // Collapse any run of non-alphanumeric chars into a single hyphen.\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .slice(0, 40) || 'project'\n );\n}\n\nexport interface WstackPathOptions {\n userHome?: string | undefined;\n projectRoot: string;\n /** Override the global root (e.g. for tests). Default: `${userHome}/.wrongstack`. */\n globalRoot?: string | undefined;\n /** Explicit profile override. Otherwise read from the root bootstrap config. */\n profileName?: string | undefined;\n}\n\n/** Make an untrusted profile name safe for use as one path segment. */\nexport function safeProfileName(name: string | undefined): string {\n const safe = (name ?? '').replace(/[/\\\\:]/g, '_').replace(/\\.\\./g, '_').trim();\n return safe || 'default';\n}\n\n/**\n * Resolve the selected profile from ~/.wrongstack/config.json. The root file\n * is bootstrap metadata only; a missing/corrupt bootstrap selects `default`.\n */\nexport function activeProfileName(globalRoot: string): string {\n try {\n const parsed = JSON.parse(fs.readFileSync(path.join(globalRoot, 'config.json'), 'utf8')) as {\n activeProfile?: unknown;\n };\n return safeProfileName(typeof parsed.activeProfile === 'string' ? parsed.activeProfile : undefined);\n } catch {\n return 'default';\n }\n}\n\n/**\n * The global `~/.wrongstack` root, honoring the `WRONGSTACK_HOME` env\n * override. The override exists so tests (and sandboxed runs) can redirect\n * ALL global state \u2014 config, secrets, logs, projects/, mailboxes \u2014 away from\n * the real user home. Before it existed, `pnpm test` booted runtimes against\n * the real `~/.wrongstack`: it read the user's real config.json (starting a\n * second live Telegram poller), appended to the real wrongstack.log, and left\n * ~20k orphaned fixture dirs under projects/.\n *\n * Every code path that wants the global dir must come through here (or\n * through `resolveWstackPaths`) instead of `path.join(os.homedir(), '.wrongstack')`.\n */\nexport function wstackGlobalRoot(): string {\n const fromEnv = process.env['WRONGSTACK_HOME'];\n if (fromEnv && fromEnv.trim().length > 0) return path.resolve(fromEnv);\n return path.join(os.homedir(), '.wrongstack');\n}\n\nexport function resolveWstackPaths(opts: WstackPathOptions): WstackPaths {\n // Precedence: explicit globalRoot > explicit userHome (callers/tests that\n // pass one expect paths under it) > WRONGSTACK_HOME env > real home dir.\n const globalRoot =\n opts.globalRoot ?? (opts.userHome ? path.join(opts.userHome, '.wrongstack') : wstackGlobalRoot());\n // Home dir for FOREIGN tool state (Claude Code's ~/.claude). Independent of\n // WRONGSTACK_HOME, which redirects only WrongStack state: a real user's\n // Claude skills live in their real home, but tests pass `userHome` to keep\n // both `.wrongstack` and `.claude` under a temp dir.\n const homeDir = opts.userHome ?? os.homedir();\n const profileName = safeProfileName(opts.profileName ?? activeProfileName(globalRoot));\n const profileDir = path.join(globalRoot, 'profiles', profileName);\n const hash = projectHash(opts.projectRoot);\n const slug = projectSlug(opts.projectRoot);\n const projectDir = path.join(globalRoot, 'projects', slug);\n return {\n globalRoot,\n profileName,\n profileDir,\n projectRoot: opts.projectRoot,\n homeDir,\n configDir: profileDir,\n globalConfig: path.join(globalRoot, 'config.json'),\n profilesDir: path.join(globalRoot, 'profiles'),\n profileConfig: (name: string) => {\n return path.join(globalRoot, 'profiles', safeProfileName(name), 'config.json');\n },\n profileStatuslineConfig: (name: string) => {\n return path.join(globalRoot, 'profiles', safeProfileName(name), 'statusline.json');\n },\n profileModeConfig: (name: string) => {\n return path.join(globalRoot, 'profiles', safeProfileName(name), 'mode.json');\n },\n profileProviderStatus: (name: string) => {\n return path.join(globalRoot, 'profiles', safeProfileName(name), 'provider-status.json');\n },\n profileUpdateCache: (name: string) => {\n return path.join(globalRoot, 'profiles', safeProfileName(name), 'update-cache.json');\n },\n secretsKey: path.join(globalRoot, '.key'),\n globalMemory: path.join(profileDir, 'memory.md'),\n globalSkills: path.join(profileDir, 'skills'),\n globalClaudeSkills: path.join(homeDir, '.claude', 'skills'),\n globalDesignKits: path.join(profileDir, 'design-kits'),\n globalPrompts: path.join(profileDir, 'prompts'),\n globalInstructions: path.join(profileDir, 'instructions'),\n promptUsage: path.join(profileDir, 'prompt-usage.json'),\n cacheDir: path.join(globalRoot, 'cache'),\n modelsCache: path.join(globalRoot, 'cache', 'models.dev.json'),\n modelsOverlayCache: path.join(globalRoot, 'cache', 'models-overlay.json'),\n historyFile: path.join(profileDir, 'history'),\n logFile: path.join(globalRoot, 'logs', 'wrongstack.log'),\n projectDir,\n projectCodebaseIndex: path.join(projectDir, 'codebase-index'),\n projectMemory: path.join(projectDir, 'memory.md'),\n projectSessions: path.join(projectDir, 'sessions'),\n projectTrust: path.join(projectDir, 'trust.json'),\n projectMeta: path.join(projectDir, 'meta.json'),\n projectLocalConfig: path.join(projectDir, 'config.local.json'),\n inProjectConfig: path.join(opts.projectRoot, '.wrongstack', 'config.json'),\n inProjectAgentsFile: path.join(opts.projectRoot, '.wrongstack', 'AGENTS.md'),\n inProjectSkills: path.join(opts.projectRoot, '.wrongstack', 'skills'),\n inProjectClaudeSkills: path.join(opts.projectRoot, '.claude', 'skills'),\n inProjectPrompts: path.join(opts.projectRoot, '.wrongstack', 'prompts'),\n inProjectInstructions: path.join(opts.projectRoot, '.wrongstack', 'instructions'),\n inProjectDesignKits: path.join(opts.projectRoot, '.wrongstack', 'design-kits'),\n inProjectWorktrees: path.join(opts.projectRoot, '.wrongstack', 'worktrees'),\n projectHash: hash,\n projectSlug: slug,\n projectGoal: path.join(projectDir, 'goal.json'),\n projectInputHistory: path.join(projectDir, 'input-history.json'),\n projectSpecs: path.join(projectDir, 'specs'),\n projectTaskGraphs: path.join(projectDir, 'task-graphs'),\n projectSddSession: path.join(projectDir, 'sdd-session.json'),\n projectPlan: path.join(projectDir, 'plan.json'),\n projectAutophase: path.join(projectDir, 'autophase'),\n projectSddBoards: path.join(projectDir, 'sdd-boards'),\n syncConfig: path.join(profileDir, 'sync.json'),\n configHistoryDir: path.join(globalRoot, 'config-history'),\n projectStatus: (projectHash: string) => path.join(globalRoot, 'projects', projectHash, 'status.json'),\n };\n}\n", "/**\n * Project-level agent identity, override and learning layer.\n *\n * Every built-in roster agent has a base definition (role + prompt + tools +\n * skills) in the catalog. On top of that, **each project** can:\n *\n * 1. Override prompt, tools, skills, budget per role\n * 2. Accumulate learned wisdom specific to this codebase\n * 3. Attach a project-custom identity (name, avatar, tone)\n *\n * Resolution cascade (most \u2192 least specific):\n * activeLearning.json \u2192 project-identity.md \u2192 catalog base\n *\n * Files live under `.wrongstack/agents/<role>/`:\n * config.json \u2014 static overrides (tools, budget, skillNames)\n * identity.md \u2014 custom prompt appendix (tone, project-specific rules)\n * learned.md \u2014 auto-generated wisdom from past sessions\n * knowledge.md \u2014 current-needs checklist (what versions to verify today)\n */\n\nimport { existsSync, readFileSync } from 'node:fs';\nimport * as path from 'node:path';\nimport type { SubagentConfig } from '../../types/multi-agent.js';\nimport { validateProjectAgentConfig } from './project-agent-config-validation.js';\nimport { BUILT_IN_KNOWLEDGE_MANIFESTS } from './project-agent-knowledge-manifests.js';\nimport {\n loadProjectAgentLearningPolicy,\n type ProjectAgentLearningPolicy,\n} from './project-agent-learning-policy.js';\nimport {\n splitLearnedEntries,\n tokenOverlap,\n} from './project-agent-learning-entries.js';\nimport {\n mergeStructuredEntries,\n parseStructuredLearnedEntriesFromContent,\n renderLearnedInstructions,\n type StructuredLearnedEntry,\n} from './project-agent-learning-structured.js';\nimport {\n assertProjectAgentRole,\n learningPolicyPath,\n roleDir,\n writeTextAtomically,\n} from './project-agent-paths.js';\nimport {\n LEARNED_HARD_LIMIT,\n LEARNED_SOFT_LIMIT,\n normalizeForComparison,\n normalizeLearnedEntry,\n} from './project-agent-learning-normalize.js';\nimport type {\n LearnedCaptureResult,\n ProjectAgentConfig,\n RoleKnowledgeManifest,\n} from './project-agent-identity-types.js';\nimport {\n isConsolidated,\n loadConsolidationMetadata,\n loadProjectAgentConsolidated,\n type ConsolidationMetadata,\n} from './project-agent-consolidation.js';\n\nexport { validateProjectAgentConfig } from './project-agent-config-validation.js';\nexport {\n classifyLearnedEntry,\n LEARNED_ENTRY_MAX_CHARS,\n LEARNED_HARD_LIMIT,\n LEARNED_SOFT_LIMIT,\n type LearnedEntryCategory,\n normalizeLearnedEntry,\n} from './project-agent-learning-normalize.js';\nexport {\n decomposeLearnedEntry,\n mergeStructuredEntries,\n parseLearnedEntryStamp,\n renderLearnedInstructions,\n type StructuredLearnedEntry,\n} from './project-agent-learning-structured.js';\nexport {\n loadProjectAgentLearningPolicy,\n type ProjectAgentLearningPolicy,\n updateProjectAgentLearningPolicy,\n} from './project-agent-learning-policy.js';\nexport { assertProjectAgentRole } from './project-agent-paths.js';\nexport {\n buildConsolidationInstruction,\n clearProjectAgentConsolidated,\n isConsolidated,\n loadConsolidationMetadata,\n loadProjectAgentConsolidated,\n saveProjectAgentConsolidated,\n type ConsolidationMetadata,\n} from './project-agent-consolidation.js';\nexport type {\n CreateProjectAgentInput,\n LearnedCaptureResult,\n ProjectAgentConfig,\n ProjectAgentProfile,\n RoleKnowledgeManifest,\n} from './project-agent-identity-types.js';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport {\n createProjectAgent,\n loadProjectAgentProfile,\n slugifyProjectAgentRole,\n} from './project-agent-profile.js';\nexport {\n listProjectAgentRoles,\n refreshProjectAgentIdentity,\n resetProjectAgentIdentity,\n updateProjectAgentConfig,\n updateProjectAgentIdentity,\n updateProjectAgentKnowledge,\n updateProjectAgentLearned,\n} from './project-agent-files.js';\nimport { loadProjectAgentProfile } from './project-agent-profile.js';\nimport { listProjectAgentRoles } from './project-agent-files.js';\n\n/**\n * Live roster overlay. Project policy is resolved lazily for both built-in and\n * project-created roles, so WebUI changes take effect on the next spawn without\n * rebuilding the Director. Built-in roles keep their safety floors; custom\n * roles may opt into a deliberately narrow runtime.\n */\nexport function createProjectAgentRoster(\n baseRoster: Record<string, SubagentConfig>,\n projectRoot?: string,\n): Record<string, SubagentConfig> {\n const target = { ...baseRoster };\n const resolveRole = (role: string, resolving = new Set<string>()): SubagentConfig | undefined => {\n if (resolving.has(role)) return undefined;\n const isBuiltIn = Object.hasOwn(target, role);\n if (!isBuiltIn && !listProjectAgentRoles(projectRoot).includes(role)) return undefined;\n resolving.add(role);\n const profile = loadProjectAgentProfile(role, projectRoot);\n const template = isBuiltIn\n ? target[role]\n : profile\n ? (resolveRole(profile.baseRole, resolving) ?? target['generic'])\n : target['generic'];\n resolving.delete(role);\n if (!template) return undefined;\n const base = isBuiltIn\n ? template\n : {\n ...template,\n id: role,\n role,\n name: profile?.name ?? role,\n ...(profile\n ? {\n dispatch: {\n summary: profile.purpose,\n keywords: [\n ...profile.taskTypes,\n ...new Set(\n `${profile.purpose} ${profile.taskTypes.join(' ')}`\n .toLowerCase()\n .split(/[^a-z0-9]+/)\n .filter((word) => word.length >= 3),\n ),\n ],\n },\n }\n : {}),\n };\n return applyProjectAgentConfig(base, loadProjectAgentConfig(role, projectRoot), {\n protectSystemRole: isBuiltIn && !profile,\n });\n };\n\n return new Proxy(target, {\n get(current, property, receiver) {\n if (typeof property !== 'string') return Reflect.get(current, property, receiver);\n return resolveRole(property) ?? Reflect.get(current, property, receiver);\n },\n has(current, property) {\n return typeof property === 'string'\n ? Reflect.has(current, property) || resolveRole(property) !== undefined\n : Reflect.has(current, property);\n },\n ownKeys(current) {\n return [...new Set([...Reflect.ownKeys(current), ...listProjectAgentRoles(projectRoot)])];\n },\n getOwnPropertyDescriptor(current, property) {\n const descriptor = Reflect.getOwnPropertyDescriptor(current, property);\n if (descriptor || typeof property !== 'string' || !resolveRole(property)) return descriptor;\n return {\n configurable: true,\n enumerable: true,\n writable: false,\n value: resolveRole(property),\n };\n },\n });\n}\n\n// ---------------------------------------------------------------------------\n// Project agent config loading\n// ---------------------------------------------------------------------------\n\n/**\n * Load the project-level agent config for a given role.\n * Returns `undefined` when no project override exists.\n */\nexport function loadProjectAgentConfig(\n role: string,\n projectRoot?: string,\n): ProjectAgentConfig | undefined {\n const cfgPath = path.join(roleDir(role, projectRoot), 'config.json');\n try {\n const raw = readFileSync(cfgPath, 'utf8');\n return validateProjectAgentConfig(JSON.parse(raw));\n } catch {\n return undefined;\n }\n}\n\n/**\n * Load the project-level identity appendix for a given role.\n * Appended to the subagent prompt after the base role prompt and policy.\n * Returns the empty string when no identity file exists.\n */\nexport function loadProjectAgentIdentity(role: string, projectRoot?: string): string {\n const identityPath = path.join(roleDir(role, projectRoot), 'identity.md');\n try {\n return readFileSync(identityPath, 'utf8').trim();\n } catch {\n return '';\n }\n}\n\n/**\n * Load the learning-derived wisdom for a given role.\n * Appended to the subagent prompt as a \"knowledge from past sessions\" block.\n * The learning file is auto-generated by the `memory-curator` or\n * `self-improving` agent roles and contains de-duplicated, curated findings.\n */\nexport function loadProjectAgentLearned(role: string, projectRoot?: string): string {\n const learnedPath = path.join(roleDir(role, projectRoot), 'learned.md');\n try {\n return readFileSync(learnedPath, 'utf8').trim();\n } catch {\n return '';\n }\n}\n\n/**\n * Load the current-knowledge checklist for a given role.\n * Returns the built-in directive if no project override exists.\n * The checklist guides the agent on what to verify from live registries\n * before answering questions in its domain.\n */\nexport function loadRoleKnowledgeManifest(\n role: string,\n projectRoot?: string,\n): RoleKnowledgeManifest | undefined {\n // First look for project-level knowledge manifest\n const projectPath = path.join(roleDir(role, projectRoot), 'knowledge.json');\n try {\n const raw = readFileSync(projectPath, 'utf8');\n return JSON.parse(raw) as RoleKnowledgeManifest;\n } catch {\n // Fall back to built-in manifests\n return BUILT_IN_KNOWLEDGE_MANIFESTS[role];\n }\n}\n\n/**\n * Merge a project agent config onto a base `SubagentConfig`.\n * Returns a new config; does not mutate either input.\n */\nexport function applyProjectAgentConfig(\n base: SubagentConfig,\n projectConfig: ProjectAgentConfig | undefined,\n options: { protectSystemRole?: boolean | undefined } = {},\n): SubagentConfig {\n if (!projectConfig) return base;\n const result: SubagentConfig = { ...base };\n if (projectConfig.tools !== undefined) {\n result.tools = options.protectSystemRole\n ? base.tools === undefined\n ? undefined\n : [...new Set([...base.tools, ...projectConfig.tools])]\n : [...projectConfig.tools];\n }\n if (projectConfig.skillNames !== undefined) result.skillNames = [...projectConfig.skillNames];\n if (projectConfig.provider !== undefined) result.provider = projectConfig.provider;\n if (projectConfig.model !== undefined) result.model = projectConfig.model;\n if (projectConfig.modelPolicy !== undefined) {\n result.modelPolicy = {\n allowed: projectConfig.modelPolicy.allowed.map((target) => ({ ...target })),\n fallbacks: projectConfig.modelPolicy.fallbacks?.map((target) => ({ ...target })),\n // System roles must remain recoverable even when a preferred model is\n // temporarily unavailable. Custom roles may opt into a hard boundary.\n strict: options.protectSystemRole ? false : (projectConfig.modelPolicy.strict ?? false),\n };\n result.fallbackModels = (projectConfig.modelPolicy.fallbacks ?? []).map(\n (target) => `${target.provider}/${target.model}`,\n );\n } else if (projectConfig.fallbackProfile !== undefined) {\n result.fallbackProfile = projectConfig.fallbackProfile;\n }\n if (projectConfig.cwd !== undefined) result.cwd = projectConfig.cwd;\n if (projectConfig.worktree !== undefined) {\n result.worktree =\n options.protectSystemRole &&\n (projectConfig.worktree === true || projectConfig.worktree === 'required')\n ? 'auto'\n : projectConfig.worktree;\n }\n if (projectConfig.availability !== undefined) {\n result.availability = {\n ...projectConfig.availability,\n days: [...projectConfig.availability.days],\n mode: options.protectSystemRole ? 'advisory' : (projectConfig.availability.mode ?? 'enforce'),\n };\n }\n if (projectConfig.allowedCapabilities !== undefined) {\n result.allowedCapabilities = options.protectSystemRole\n ? base.allowedCapabilities === undefined\n ? undefined\n : [...new Set([...base.allowedCapabilities, ...projectConfig.allowedCapabilities])]\n : [...projectConfig.allowedCapabilities];\n }\n if (projectConfig.budget) {\n if (projectConfig.budget.timeoutMs !== undefined)\n result.timeoutMs = projectConfig.budget.timeoutMs;\n if (projectConfig.budget.idleTimeoutMs !== undefined)\n result.idleTimeoutMs = projectConfig.budget.idleTimeoutMs;\n if (projectConfig.budget.maxIterations !== undefined)\n result.maxIterations = projectConfig.budget.maxIterations;\n if (projectConfig.budget.maxToolCalls !== undefined)\n result.maxToolCalls = projectConfig.budget.maxToolCalls;\n if (projectConfig.budget.maxTokens !== undefined)\n result.maxTokens = projectConfig.budget.maxTokens;\n if (projectConfig.budget.maxCostUsd !== undefined)\n result.maxCostUsd = projectConfig.budget.maxCostUsd;\n }\n if (options.protectSystemRole) applySystemAgentBudgetFloors(result);\n return result;\n}\n\nconst SYSTEM_AGENT_BUDGET_FLOORS = {\n timeoutMs: 300_000,\n idleTimeoutMs: 120_000,\n maxIterations: 20,\n maxToolCalls: 40,\n maxTokens: 8_192,\n maxCostUsd: 0.25,\n} as const satisfies Partial<Record<keyof SubagentConfig, number>>;\n\ntype BudgetFloorEntry = {\n [K in keyof typeof SYSTEM_AGENT_BUDGET_FLOORS]: [K, (typeof SYSTEM_AGENT_BUDGET_FLOORS)[K]];\n}[keyof typeof SYSTEM_AGENT_BUDGET_FLOORS];\n\nfunction applySystemAgentBudgetFloors(config: SubagentConfig): void {\n for (const [field, floor] of Object.entries(SYSTEM_AGENT_BUDGET_FLOORS) as BudgetFloorEntry[]) {\n const value = config[field];\n if (typeof value === 'number' && value < floor) config[field] = floor;\n }\n}\n\n/**\n * Build the full project-contextualized prompt for a given role.\n *\n * Cascade, from start to end:\n * 1. Base role prompt from instruction files (agentPrompt(id))\n * 2. Technology policy (appended by agentPrompt)\n * 3. Project identity appendix (identity.md)\n * 4. Learned wisdom (learned.md)\n * 5. Live-knowledge checklist\n */\nexport function buildProjectContextualizedPrompt(\n basePrompt: string,\n role: string,\n projectRoot?: string,\n options: { identityOverride?: string | undefined } = {},\n): string {\n const contextStart = '<!-- wrongstack:project-agent-context:start -->';\n const contextEnd = '<!-- wrongstack:project-agent-context:end -->';\n\n // Skip project identity when WRONGSTACK_AGENT_INSTRUCTIONS_DIR is set\n // (this is a test/override context \u2014 keep byte-exact equality with on-disk files).\n // The marker cleanup below is intentionally placed AFTER this early return so a\n // prompt that already contains legacy context markers is preserved verbatim.\n if (process.env['WRONGSTACK_AGENT_INSTRUCTIONS_DIR']) return basePrompt;\n\n const cleanBase = basePrompt\n .replace(\n /\\s*<!-- wrongstack:project-agent-context:start -->[\\s\\S]*?<!-- wrongstack:project-agent-context:end -->\\s*/g,\n '\\n',\n )\n .trim();\n const parts: string[] = [cleanBase];\n\n const identity = options.identityOverride ?? loadProjectAgentIdentity(role, projectRoot);\n if (identity) {\n parts.push(`\\n\\n# Project custom identity\\n\\n${identity}`);\n }\n\n const learningPolicy = loadProjectAgentLearningPolicy(role, projectRoot);\n // Prefer the reviewed, consolidated document over the raw learned.md buffer.\n // The consolidated version is a synthesized, narrowly-scoped representation\n // of everything the agent has learned \u2014 same information, less context volume.\n //\n // STALENESS GATE: When new raw entries have been captured since the last\n // consolidation (entry count > sourceEntryCount), the consolidation is stale.\n // In that case we append the delta entries so the agent still sees new\n // learnings \u2014 preserving the capture\u2192inject feedback loop without losing\n // the optimization benefit of the consolidated document.\n let learnedContent = '';\n let learnedLabel = '';\n if (learningPolicy.enabled) {\n const consolidated = loadProjectAgentConsolidated(role, projectRoot);\n if (consolidated) {\n const meta = loadConsolidationMetadata(role, projectRoot);\n // Read the raw buffer once; split it for entry counting.\n const rawLearned = loadProjectAgentLearned(role, projectRoot);\n const rawEntries = splitLearnedEntries(rawLearned);\n const rawBytes = Buffer.byteLength(rawLearned, 'utf8');\n // Freshness gate: consolidated.md is preferred, but only while the\n // raw buffer hasn't grown past the snapshot at consolidation time.\n // We check both entry count and byte size \u2014 either exceeding the\n // recorded snapshot means the consolidated document is stale. When\n // metadata is missing entirely we cannot verify freshness, so treat\n // it as stale to avoid orphaning new captures.\n const stale =\n meta === undefined ||\n rawEntries.length > meta.sourceEntryCount ||\n rawBytes > meta.sourceBytes;\n if (stale) {\n if (meta !== undefined && meta.sourceEntryCount < rawEntries.length) {\n // New countable entries arrived since consolidation \u2014 append just\n // the delta to preserve the context optimization while surfacing\n // freshly captured knowledge (capture\u2192inject loop).\n const deltaEntries = rawEntries.slice(meta.sourceEntryCount);\n learnedContent = `${consolidated}\\n\\n---\\n\\n## Recently captured (pending next optimization)\\n\\n${deltaEntries.join('\\n\\n---\\n\\n')}`;\n } else {\n // Metadata missing, or raw grew without new countable entries \u2014\n // cannot compute a precise delta, so serve the full raw buffer.\n learnedContent = rawLearned;\n }\n } else {\n learnedContent = consolidated;\n }\n learnedLabel = 'Consolidated knowledge for this project';\n } else {\n learnedContent = loadProjectAgentLearned(role, projectRoot);\n learnedLabel = 'Learned instructions for this project (structured: what / why / how)';\n }\n }\n if (learnedContent) {\n // Only include content that has meaningful text (strip HTML comments)\n const meaningful = learnedContent.replace(/<!--[\\s\\S]*?-->/g, '').trim();\n if (meaningful.length > 0) {\n parts.push(`\\n\\n# ${learnedLabel}\\n\\n${learnedContent}`);\n }\n }\n\n // \u2500\u2500 Capture mechanism: tell every agent HOW to persist new knowledge \u2500\u2500\n const effectiveProjectRoot = projectRoot || process.cwd();\n const learnedFilePath = path.join(\n effectiveProjectRoot,\n '.wrongstack',\n 'agents',\n role,\n 'learned.md',\n );\n if (learningPolicy.enabled) {\n parts.push(\n `\\n\\n## Knowledge capture\\n\\n` +\n `The file below stores **learning data for this project's \"${role}\" agent** \u2014 not your memory, not a session log. ` +\n `It is read back into the system prompt of every future \"${role}\" invocation, so each entry must teach a future agent how to act. ` +\n `On every capture the runtime **merges your new entry with every prior entry and rewrites the whole buffer as a structured instruction list** \u2014 grouped by category (\"What to do\", \"What to avoid\", \"Patterns to follow\", \"Project facts\"), with each item decomposed into **what** (the rule), **why** (the reason), and **how** (the concrete commands, file paths, or package names that anchor the rule). ` +\n `When you discover a durable principle that future invocations should follow, end your response with a \\`## LEARNED\\` block. The runtime persists it to:\\n\\n` +\n ` \\`\\`\\`\\n ${learnedFilePath}\\n \\`\\`\\`\\n\\n` +\n `**Write directives, not narratives.** Each LEARNED entry should be:\\n\\n` +\n `- A **rule or principle** that applies across sessions, not a description of what happened in this one.\\n` +\n `- A short **imperative or statement** (1\u20133 sentences), starting with a verb like \"Always verify\u2026\", \"Use X for Y\", \"Avoid\u2026\", \"Never assume\u2026\".\\n` +\n `- **Generic** \u2014 no commit SHAs, timestamps, specific line numbers, or PR/issue numbers. File paths, package names, and command names are fine when they anchor the lesson.\\n` +\n `- **Self-contained** \u2014 understandable without the surrounding session context.\\n` +\n `- **Front-load concrete anchors** \u2014 commands in backticks, package names like \\`@wrongstack/core\\`, file paths like \\`packages/core/src/.../foo.ts\\`. The structured-list renderer extracts these as the \"how\" for the entry.\\n\\n` +\n `**Bad** (session log \u2014 rejected at capture time):\\n\\n` +\n `\\`\\`\\`\\n## LEARNED\\nWhen I worked on the telegram plugin today, commit 9c7682b84 had a race condition in poll-lock at line 42 because writeFileSync wasn't using the 'wx' flag.\\n\\`\\`\\`\\n\\n` +\n `**Good** (directive \u2014 persists, then merges into the structured list):\\n\\n` +\n `\\`\\`\\`\\n## LEARNED\\nAlways use the 'wx' (exclusive create) flag with writeFileSync when implementing concurrent lock acquisition in \\`packages/core/src/.../poll-lock.ts\\` \u2014 filesystem-level atomicity guarantees only one writer wins.\\n\\`\\`\\`\\n\\n` +\n `Capture only durable, cross-session knowledge \u2014 never ephemeral task details.`,\n );\n }\n\n const knowledge = loadRoleKnowledgeManifest(role, projectRoot);\n if (knowledge && knowledge.checklist.length > 0) {\n const checklist = knowledge.checklist.map((item) => `- ${item}`).join('\\n');\n parts.push(\n `\\n\\n## Current knowledge requirements\\n\\nVerify these before answering:\\n${checklist}`,\n );\n }\n\n const additions = parts.slice(1).join('\\n\\n').trim();\n if (!additions) return cleanBase;\n return `${cleanBase}\\n\\n${contextStart}\\n${additions}\\n${contextEnd}`;\n}\n\n// ---------------------------------------------------------------------------\n// Learned-wisdom capture from agent output\n// ---------------------------------------------------------------------------\n\n// \u2500\u2500\u2500 learned.md automation contract \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n//\n// TRIGGER Primary: end of a delegated subagent task (CLI fleet host's\n// task.completed handler). The director's task resolution checks the\n// final output text for ## LEARNED blocks and captures durable entries.\n// Secondary: leader's own output after a user-invoked improvement\n// prompt (\"improve the executor agent\"). Never on intermediate tool\n// calls or every iteration \u2014 only once per task resolution.\n// Manual: `/agent-improve <role> capture` at any time.\n//\n// GUARDRAILS\n//\n// 1. COOLDOWN Per-role: minimum 120 seconds between captures. Tracks the\n// last capture timestamp in a module-level Map. A capture within the\n// cooldown window is silently skipped (counter not bumped).\n//\n// 2. FREQUENCY CAP Per-session: at most 3 captures per role before the\n// capture falls through to `/agent-improve` (human-gated). The session\n// is reset on process restart (module reload).\n//\n// 3. HUMAN-APPROVAL THRESHOLD When `learned.md` exceeds `LEARNED_SOFT_LIMIT`\n// (8 KB) the next capture is deferred \u2014 the agent is asked to run\n// `/agent-improve <role> refresh` or the user must call it explicitly.\n// The hintLearnedNeedsSummarization() check is exposed so the CLI can\n// surface this in /agent-improve output.\n//\n// 4. SIZE SOFT_LIMIT = 8 192 B \u2192 hintLearnedNeedsSummarization() returns true.\n// HARD_LIMIT = 16 384 B \u2192 capture halves the structured entry list\n// (oldest first) and re-renders before writing.\n//\n// 5. CONTENT QUALITY A block is run through `normalizeLearnedEntry` and\n// skipped when it cannot be converted into an instructive directive:\n// - too short after stripping ephemeral artifacts (< 30 chars)\n// - all narrative framing with no salvageable directive tail\n// - overwhelmingly narrative (>50% sentences are event descriptions)\n// - longer than LEARNED_ENTRY_MAX_CHARS (600 chars) \u2014 truncated to the\n// first instructive sentence cluster that fits\n// Ephemeral artifacts stripped BEFORE the length check:\n// - git commit SHAs, ISO timestamps, specific line numbers, PR/issue refs\n// Code-only blocks (>70% fenced-code lines) and near-duplicates\n// (Jaccard \u2265 0.55) are still rejected. Surviving entries are stamped\n// with a category tag (convention / pattern / warning / fact).\n//\n// OWNER logic : packages/core/src/coordination/agents/project-agent-identity.ts\n// hook : packages/cli/src/fleet/host.ts\n// ---------------------------------------------------------------------------\n\n// \u2500\u2500\u2500 Automation guardrails \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst captureCooldowns = new Map<string, number>(); // role \u2192 timestamp\nconst captureFrequency = new Map<string, number>(); // role \u2192 count\n\nexport const CAPTURE_COOLDOWN_MS = 120_000; // 2 minutes\nexport const CAPTURE_MAX_PER_SESSION = 3;\n\n/**\n * Check whether a new capture is allowed for this role. Returns a rejection\n * reason string when blocked, or undefined when capture may proceed.\n */\nexport function canCaptureNewLearned(\n role: string,\n existingSize: number,\n isManual: boolean,\n projectRoot?: string,\n): string | undefined {\n const key = `${path.resolve(projectRoot ?? process.cwd())}\\0${assertProjectAgentRole(role)}`;\n // Cooldown gate (bypassed for manual captures)\n if (!isManual) {\n const last = captureCooldowns.get(key);\n if (last && Date.now() - last < CAPTURE_COOLDOWN_MS) {\n return `Cooldown active for role \"${role}\" (${Math.ceil((CAPTURE_COOLDOWN_MS - (Date.now() - last)) / 1000)}s remaining)`;\n }\n }\n\n // Frequency cap (bypassed for manual captures)\n if (!isManual) {\n const count = captureFrequency.get(key) ?? 0;\n if (count >= CAPTURE_MAX_PER_SESSION) {\n return `Frequency cap reached for role \"${role}\" (${count}/${CAPTURE_MAX_PER_SESSION}). Use /agent-improve ${role} capture for manual override.`;\n }\n }\n\n // Size gate: when over SOFT_LIMIT, require manual approval\n if (existingSize > LEARNED_SOFT_LIMIT && !isManual) {\n return `learned.md for role \"${role}\" exceeds soft limit (${existingSize}B / ${LEARNED_SOFT_LIMIT}B). Run /agent-improve ${role} capture manually or /agent-improve ${role} refresh to reset.`;\n }\n\n return undefined;\n}\n\n/**\n * Per-role learning stats for monitoring UIs.\n */\nexport interface ProjectAgentLearnStats {\n role: string;\n exists: boolean;\n entryCount: number;\n totalBytes: number;\n lastCapture: string | null;\n lastCaptureTimestamp: number | null;\n cooldownRemainingMs: number;\n sessionCaptureCount: number;\n needsSummarization: boolean;\n learnedPath: string | null;\n identityPath: string | null;\n hasIdentity: boolean;\n hasConfig: boolean;\n hasKnowledge: boolean;\n learningEnabled: boolean;\n lifetimeCaptureCount: number;\n lastCaptureSource: ProjectAgentLearningPolicy['lastCaptureSource'] | null;\n /** Whether a consolidated document exists for this role. */\n isConsolidated: boolean;\n /** Consolidation metadata, if a consolidation has been performed. */\n consolidation?: ConsolidationMetadata | undefined;\n}\n\nexport function getProjectAgentLearnStats(\n role: string,\n projectRoot?: string,\n): ProjectAgentLearnStats {\n const dir = roleDir(role, projectRoot);\n const learnedPath_ = path.join(dir, 'learned.md');\n const identityPath_ = path.join(dir, 'identity.md');\n const configPath_ = path.join(dir, 'config.json');\n const knowledgePath_ = path.join(dir, 'knowledge.json');\n let learnedText = '';\n try {\n learnedText = readFileSync(learnedPath_, 'utf8');\n } catch {\n /* no file */\n }\n // Use the structured parser so entryCount reflects directive entries, not\n // raw chunks split by `---` (the structured document also uses `---` for\n // section dividers and the footer, which would inflate chunk counts).\n const entries = parseStructuredLearnedEntries(role, projectRoot);\n const exists = existsSync(dir);\n const policy = loadProjectAgentLearningPolicy(role, projectRoot);\n const captureKey = `${path.resolve(projectRoot ?? process.cwd())}\\0${assertProjectAgentRole(role)}`;\n const runtimeLastTs = captureCooldowns.get(captureKey) ?? null;\n const persistedLastTs = policy.lastCaptureAt ? Date.parse(policy.lastCaptureAt) : Number.NaN;\n const lastTs = runtimeLastTs ?? (Number.isFinite(persistedLastTs) ? persistedLastTs : null);\n const cooldownRemaining = lastTs ? Math.max(0, CAPTURE_COOLDOWN_MS - (Date.now() - lastTs)) : 0;\n const freq = captureFrequency.get(captureKey) ?? 0;\n\n return {\n role,\n exists,\n entryCount: entries.length,\n totalBytes: Buffer.byteLength(learnedText, 'utf8'),\n lastCapture: lastTs ? new Date(lastTs).toISOString() : null,\n lastCaptureTimestamp: lastTs,\n cooldownRemainingMs: cooldownRemaining,\n sessionCaptureCount: freq,\n needsSummarization: exists\n ? hintLearnedNeedsSummarization(role, projectRoot).length > 0\n : false,\n learnedPath: existsSync(learnedPath_) ? learnedPath_ : null,\n identityPath: existsSync(identityPath_) ? identityPath_ : null,\n hasIdentity: existsSync(identityPath_),\n hasConfig: existsSync(configPath_),\n hasKnowledge: existsSync(knowledgePath_),\n learningEnabled: policy.enabled,\n lifetimeCaptureCount: policy.lifetimeCaptureCount,\n lastCaptureSource: policy.lastCaptureSource ?? null,\n isConsolidated: isConsolidated(role, projectRoot),\n consolidation: loadConsolidationMetadata(role, projectRoot),\n };\n}\n\n/**\n * Re-export existsSync so callers can check file existence without importing fs.\n */\nexport { existsSync };\n\n/**\n * Detect semantic conflicts between different roles' learned wisdom.\n * Returns entries where token overlap \u2265 0.60, which suggests the two\n * roles have learned about the same topic \u2014 potentially contradicting.\n */\nexport function detectLearnedConflicts(projectRoot?: string): Array<{\n roleA: string;\n roleB: string;\n snippetA: string;\n snippetB: string;\n similarity: number;\n detectedAt: string;\n}> {\n const roles = listProjectAgentRoles(projectRoot);\n const entries: { role: string; normalized: string; raw: string }[] = [];\n for (const role of roles) {\n const text = loadProjectAgentLearned(role, projectRoot);\n if (!text || text.trim().length < 50) continue;\n entries.push({ role, normalized: normalizeForComparison(text), raw: text });\n }\n const conflicts: Array<{\n roleA: string;\n roleB: string;\n snippetA: string;\n snippetB: string;\n similarity: number;\n detectedAt: string;\n }> = [];\n for (const [i, a] of entries.entries()) {\n for (const b of entries.slice(i + 1)) {\n const sim = tokenOverlap(a.normalized, b.normalized);\n if (sim >= 0.6) {\n conflicts.push({\n roleA: a.role,\n roleB: b.role,\n snippetA: a.raw.slice(0, 200),\n snippetB: b.raw.slice(0, 200),\n similarity: sim,\n detectedAt: new Date().toISOString(),\n });\n }\n }\n }\n return conflicts.sort((a, b) => b.similarity - a.similarity);\n}\n\nexport function listProjectAgentLearnedEntries(role: string, projectRoot?: string): string[] {\n return splitLearnedEntries(loadProjectAgentLearned(role, projectRoot));\n}\n\n// ---------------------------------------------------------------------------\n// Structured instruction list\n//\n// Each `learned.md` capture now produces a structured instruction list rather\n// than an append-only journal. Every entry is decomposed into a \"what / why /\n// how\" shape so a future agent invocation can read the buffer and immediately\n// understand the rule, the reason behind it, and the concrete steps to apply\n// it. The buffer is rewritten in this structured form on every capture, with\n// historical entries re-decomposed in lockstep so the file stays\n// self-describing and scannable across the lifetime of the role.\n// ---------------------------------------------------------------------------\n\nexport function parseStructuredLearnedEntries(\n role: string,\n projectRoot?: string,\n): StructuredLearnedEntry[] {\n const raw = loadProjectAgentLearned(role, projectRoot);\n return parseStructuredLearnedEntriesFromContent(\n raw,\n listProjectAgentLearnedEntries(role, projectRoot),\n );\n}\n\n/**\n * Learned-wisdom capture from agent output.\n *\n * Scans `output` for `## LEARNED` blocks and persists each unique,\n * quality-passing block to the role's `learned.md`. Each block is run\n * through `normalizeLearnedEntry` so the buffer only accumulates instructive\n * directives \u2014 narrative session logs are rejected at capture time. Near-\n * duplicate entries (token overlap \u2265 0.55) are silently skipped.\n *\n * When the resulting file would exceed `LEARNED_HARD_LIMIT` (16 KB)\n * the oldest entries are rotated out before writing.\n *\n * @returns the number of **new** items actually persisted (0 if none).\n */\nexport function captureLearnedFromAgentOutput(\n output: string,\n role: string,\n projectRoot?: string,\n isManual = false,\n): number {\n return captureLearnedFromAgentOutputDetailed(output, role, projectRoot, isManual).captured;\n}\n\nexport function captureLearnedFromAgentOutputDetailed(\n output: string,\n role: string,\n projectRoot?: string,\n isManual = false,\n): LearnedCaptureResult {\n const normalizedRole = assertProjectAgentRole(role);\n if (!output.trim()) {\n return { role: normalizedRole, captured: 0, skipped: 0, status: 'empty_output' };\n }\n const policy = loadProjectAgentLearningPolicy(normalizedRole, projectRoot);\n if (!policy.enabled && !isManual) {\n return {\n role: normalizedRole,\n captured: 0,\n skipped: 0,\n status: 'disabled',\n reason: 'Automatic learning is disabled for this role.',\n };\n }\n\n const regex = /^##\\s*LEARNED\\s*$/gim;\n const candidates: string[] = [];\n let startMatch = regex.exec(output);\n while (startMatch !== null) {\n const blockStart = startMatch.index + startMatch[0].length;\n const rest = output.slice(blockStart);\n const nextHeading = /^##\\s/gm.exec(rest);\n const blockEnd = nextHeading ? blockStart + nextHeading.index : output.length;\n candidates.push(output.slice(blockStart, blockEnd).trim());\n regex.lastIndex = Math.max(regex.lastIndex, blockEnd);\n startMatch = regex.exec(output);\n }\n if (candidates.length === 0) {\n return { role: normalizedRole, captured: 0, skipped: 0, status: 'no_blocks' };\n }\n\n const existingRaw = loadProjectAgentLearned(normalizedRole, projectRoot);\n const guard = canCaptureNewLearned(\n normalizedRole,\n Buffer.byteLength(existingRaw, 'utf8'),\n isManual,\n projectRoot,\n );\n if (guard) {\n return {\n role: normalizedRole,\n captured: 0,\n skipped: candidates.length,\n status: 'guarded',\n reason: guard,\n };\n }\n\n // Dedup against existing structured entries' directive keys so the\n // capture loop can reject near-duplicates using the same normalization\n // the structured renderer applies. This replaces the old chunked-text\n // dedup path which could not see through the structured document format.\n const normalizedEntries = parseStructuredLearnedEntries(normalizedRole, projectRoot).map(\n (entry) => entry.key,\n );\n let structuredEntries = parseStructuredLearnedEntries(normalizedRole, projectRoot);\n let captured = 0;\n let skipped = 0;\n const now = new Date();\n const nowIso = now.toISOString();\n const remainingSessionCaptures = isManual\n ? Number.POSITIVE_INFINITY\n : Math.max(\n 0,\n CAPTURE_MAX_PER_SESSION -\n (captureFrequency.get(\n `${path.resolve(projectRoot ?? process.cwd())}\\0${normalizedRole}`,\n ) ?? 0),\n );\n\n for (const content of candidates) {\n if (captured >= remainingSessionCaptures) {\n skipped++;\n continue;\n }\n // Run normalization FIRST: strip ephemeral artifacts, drop narrative\n // framing, classify, and reject entries that cannot be salvaged into\n // instructive directives. This is the quality gate that keeps the\n // buffer from accumulating session logs.\n const normalized = normalizeLearnedEntry(content);\n if (!normalized) {\n skipped++;\n continue;\n }\n // Code-only check: rejects entries that are mostly fenced code even after\n // normalization (the normalizer preserves prose, so a code-only block\n // will already be short on text \u2014 this is a belt-and-braces check).\n const totalLines = Math.max(1, content.split('\\n').length);\n const codeBodyLines = (content.match(/```[\\s\\S]*?```/g) ?? []).reduce(\n (sum, block) => sum + Math.max(0, block.split('\\n').length - 2),\n 0,\n );\n if (totalLines > 5 && codeBodyLines / totalLines > 0.7) {\n skipped++;\n continue;\n }\n const candidateNorm = normalizeForComparison(normalized.text);\n if (normalizedEntries.some((entry) => tokenOverlap(candidateNorm, entry) >= 0.55)) {\n skipped++;\n continue;\n }\n normalizedEntries.push(candidateNorm);\n // Merge the new directive into the structured list, deduplicating against\n // existing entries by content similarity. The buffer is rewritten as a\n // structured instruction list (what / why / how) at the end of this\n // function \u2014 historical entries are re-decomposed in lockstep so the\n // file is always a current, consistent snapshot.\n structuredEntries = mergeStructuredEntries(structuredEntries, {\n text: normalized.text,\n category: normalized.category,\n capturedAt: nowIso,\n });\n captured++;\n }\n\n if (captured === 0) {\n return {\n role: normalizedRole,\n captured: 0,\n skipped,\n status: 'quality_rejected',\n reason:\n 'Every LEARNED block was too short, too narrative, or a near-duplicate. Write directives, not session logs.',\n };\n }\n\n // Render the merged list as a structured instruction document. This is the\n // single source of truth \u2014 the buffer is rewritten in full on every\n // capture so the file always reflects the current, merged state.\n let newContent = renderLearnedInstructions(normalizedRole, structuredEntries, nowIso);\n if (Buffer.byteLength(newContent, 'utf8') >= LEARNED_HARD_LIMIT) {\n // Trim oldest entries when the document exceeds the hard limit. Keep\n // the structured form intact by re-rendering after pruning.\n const trimmed = structuredEntries.slice(-Math.max(1, Math.floor(structuredEntries.length / 2)));\n newContent = renderLearnedInstructions(normalizedRole, trimmed, nowIso);\n }\n\n writeTextAtomically(path.join(roleDir(normalizedRole, projectRoot), 'learned.md'), newContent);\n const captureKey = `${path.resolve(projectRoot ?? process.cwd())}\\0${normalizedRole}`;\n captureCooldowns.set(captureKey, now.getTime());\n // Increment the frequency counter by 1 per capture attempt (not by\n // `captured`, the number of LEARNED blocks appended). Otherwise a single\n // response that yields N blocks immediately exhausts the\n // CAPTURE_MAX_PER_SESSION budget for the rest of the session, while a\n // response that yields 0 blocks consumes nothing \u2014 both diverge from the\n // documented \"attempts per session\" semantics the cap is meant to enforce.\n captureFrequency.set(captureKey, (captureFrequency.get(captureKey) ?? 0) + 1);\n const nextPolicy: ProjectAgentLearningPolicy = {\n ...policy,\n lifetimeCaptureCount: policy.lifetimeCaptureCount + captured,\n lastCaptureAt: now.toISOString(),\n lastCaptureSource: isManual ? 'manual' : 'automatic',\n };\n writeTextAtomically(\n learningPolicyPath(normalizedRole, projectRoot),\n `${JSON.stringify(nextPolicy, null, 2)}\\n`,\n );\n return { role: normalizedRole, captured, skipped, status: 'captured' };\n}\n\n/**\n * Signal the host that a background summarisation pass is warranted.\n * Called by `captureLearnedFromAgentOutput` when the **new** learned size\n * crosses `LEARNED_SOFT_LIMIT`. The host is responsible for scheduling a\n * low-priority consolidation task (typically via the Brain or a shadow agent).\n *\n * The summary _mechanism_ is intentionally shallow here \u2014 the real\n * summarisation is an LLM call that should run as a deferred, uncritical\n * fleet task so it never blocks a user-facing operation.\n *\n * @returns a summary brief for the host, or '' when no action is needed.\n */\nexport function hintLearnedNeedsSummarization(role: string, projectRoot?: string): string {\n const learned = loadProjectAgentLearned(role, projectRoot);\n if (!learned) return '';\n const bytes = Buffer.byteLength(learned, 'utf8');\n if (bytes < LEARNED_SOFT_LIMIT) return '';\n return `Learned wisdom for role \"${role}\" is ${bytes} B (soft limit ${LEARNED_SOFT_LIMIT}). Schedule a low-priority consolidation pass.`;\n}\n\n// ---------------------------------------------------------------------------\n// Consolidation: review raw learned.md \u2192 produce consolidated.md\n// ---------------------------------------------------------------------------\n//\n// The learned.md file is an append-only capture buffer. Over time it grows\n// with verbose, overlapping entries. The consolidation pass reads every raw\n// entry, asks an LLM to synthesize them into a single narrowly-scoped\n// document that represents what the agent has learned for its role, and\n// writes the result to consolidated.md.\n//\n// Once consolidated.md exists, buildProjectContextualizedPrompt prefers it\n// over the raw learned.md \u2014 the raw buffer is retained on disk for audit\n// but no longer injected into prompts (reducing context volume without\n// omitting information, because every fact was carried into the summary).\n//\n// Files (under .wrongstack/agents/<role>/):\n// consolidated.md \u2014 the synthesized, reviewed document\n// consolidation.json \u2014 metadata tracking the last review\n", "import * as path from 'node:path';\nimport type { ProjectAgentConfig } from './project-agent-identity-types.js';\n\nconst PROJECT_AGENT_CONFIG_KEYS = new Set([\n 'tools',\n 'skillNames',\n 'budget',\n 'provider',\n 'model',\n 'allowedCapabilities',\n 'modelPolicy',\n 'fallbackProfile',\n 'cwd',\n 'worktree',\n 'availability',\n]);\n\nconst PROJECT_AGENT_BUDGET_KEYS = new Set([\n 'timeoutMs',\n 'idleTimeoutMs',\n 'maxIterations',\n 'maxToolCalls',\n 'maxTokens',\n 'maxCostUsd',\n]);\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction assertStringList(value: unknown, field: string): asserts value is string[] {\n if (\n !Array.isArray(value) ||\n value.some((entry) => typeof entry !== 'string' || entry.trim().length === 0)\n ) {\n throw new Error(`Project agent config \"${field}\" must be an array of non-empty strings.`);\n }\n}\n\n/** Validate untrusted JSON before it can alter a roster agent runtime. */\nexport function validateProjectAgentConfig(value: unknown): ProjectAgentConfig {\n if (!isPlainRecord(value)) throw new Error('Project agent config must be an object.');\n\n const unknownKey = Object.keys(value).find((key) => !PROJECT_AGENT_CONFIG_KEYS.has(key));\n if (unknownKey) throw new Error(`Unknown project agent config field: \"${unknownKey}\".`);\n\n if (value.tools !== undefined) assertStringList(value.tools, 'tools');\n if (value.skillNames !== undefined) assertStringList(value.skillNames, 'skillNames');\n if (value.allowedCapabilities !== undefined) {\n assertStringList(value.allowedCapabilities, 'allowedCapabilities');\n }\n for (const field of ['provider', 'model', 'fallbackProfile'] as const) {\n const fieldValue = value[field];\n if (fieldValue !== undefined && (typeof fieldValue !== 'string' || !fieldValue.trim())) {\n throw new Error(`Project agent config \"${field}\" must be a non-empty string.`);\n }\n }\n\n if (value.cwd !== undefined) {\n if (typeof value.cwd !== 'string' || !value.cwd.trim()) {\n throw new Error('Project agent config \"cwd\" must be a non-empty relative path.');\n }\n const cwd = value.cwd.replace(/\\\\/g, '/').trim();\n if (path.posix.isAbsolute(cwd) || /^[a-z]:\\//i.test(cwd) || cwd.split('/').includes('..')) {\n throw new Error('Project agent config \"cwd\" must stay inside the assigned checkout.');\n }\n // Normalize before returning so the checked value is the value used at runtime.\n value.cwd = cwd;\n }\n if (\n value.worktree !== undefined &&\n value.worktree !== true &&\n value.worktree !== false &&\n value.worktree !== 'auto' &&\n value.worktree !== 'required' &&\n value.worktree !== 'off'\n ) {\n throw new Error('Project agent config \"worktree\" must be auto, required, off, or boolean.');\n }\n\n if (value.modelPolicy !== undefined) validateProjectAgentModelPolicy(value.modelPolicy);\n if (value.availability !== undefined) validateProjectAgentAvailability(value.availability);\n\n if (value.budget !== undefined) {\n if (!isPlainRecord(value.budget)) {\n throw new Error('Project agent config \"budget\" must be an object.');\n }\n const unknownBudgetKey = Object.keys(value.budget).find(\n (key) => !PROJECT_AGENT_BUDGET_KEYS.has(key),\n );\n if (unknownBudgetKey) {\n throw new Error(`Unknown project agent budget field: \"${unknownBudgetKey}\".`);\n }\n for (const [field, amount] of Object.entries(value.budget)) {\n if (typeof amount !== 'number' || !Number.isFinite(amount) || amount < 0) {\n throw new Error(`Project agent budget \"${field}\" must be a finite non-negative number.`);\n }\n if (field !== 'maxCostUsd' && !Number.isInteger(amount)) {\n throw new Error(`Project agent budget \"${field}\" must be an integer.`);\n }\n }\n }\n\n return value as ProjectAgentConfig;\n}\n\nfunction validateProjectAgentModelPolicy(value: unknown): void {\n if (!isPlainRecord(value)) throw new Error('Project agent modelPolicy must be an object.');\n const allowedKeys = new Set(['allowed', 'fallbacks', 'strict']);\n const unknownKey = Object.keys(value).find((key) => !allowedKeys.has(key));\n if (unknownKey) throw new Error(`Unknown modelPolicy field: \"${unknownKey}\".`);\n\n const validateTargets = (targets: unknown, field: string, allowEmpty: boolean) => {\n if (!Array.isArray(targets) || (!allowEmpty && targets.length === 0)) {\n throw new Error(`Project agent modelPolicy \"${field}\" must be a non-empty array.`);\n }\n for (const target of targets) {\n if (\n !isPlainRecord(target) ||\n typeof target.provider !== 'string' ||\n !target.provider.trim() ||\n typeof target.model !== 'string' ||\n !target.model.trim()\n ) {\n throw new Error(`Project agent modelPolicy \"${field}\" contains an invalid target.`);\n }\n }\n };\n validateTargets(value.allowed, 'allowed', false);\n if (value.fallbacks !== undefined) {\n validateTargets(value.fallbacks, 'fallbacks', true);\n const allowed = new Set(\n (value.allowed as Array<{ provider: string; model: string }>).map(\n (target) => `${target.provider}\\0${target.model}`,\n ),\n );\n for (const target of value.fallbacks as Array<{ provider: string; model: string }>) {\n if (!allowed.has(`${target.provider}\\0${target.model}`)) {\n throw new Error('Every modelPolicy fallback must also appear in allowed.');\n }\n }\n }\n if (value.strict !== undefined && typeof value.strict !== 'boolean') {\n throw new Error('Project agent modelPolicy \"strict\" must be boolean.');\n }\n}\n\nfunction validateProjectAgentAvailability(value: unknown): void {\n if (!isPlainRecord(value)) throw new Error('Project agent availability must be an object.');\n const allowedKeys = new Set(['timezone', 'days', 'start', 'end', 'mode']);\n const unknownKey = Object.keys(value).find((key) => !allowedKeys.has(key));\n if (unknownKey) throw new Error(`Unknown availability field: \"${unknownKey}\".`);\n if (typeof value.timezone !== 'string' || !value.timezone.trim()) {\n throw new Error('Project agent availability requires a timezone.');\n }\n try {\n new Intl.DateTimeFormat('en-US', { timeZone: value.timezone }).format();\n } catch {\n throw new Error(`Invalid project agent availability timezone: \"${value.timezone}\".`);\n }\n if (\n !Array.isArray(value.days) ||\n value.days.length === 0 ||\n value.days.some((day) => !Number.isInteger(day) || (day as number) < 0 || (day as number) > 6)\n ) {\n throw new Error('Project agent availability days must contain weekday numbers 0-6.');\n }\n if (\n typeof value.start !== 'string' ||\n typeof value.end !== 'string' ||\n !/^([01]\\d|2[0-3]):[0-5]\\d$/.test(value.start) ||\n !/^([01]\\d|2[0-3]):[0-5]\\d$/.test(value.end)\n ) {\n throw new Error('Project agent availability start/end must use HH:MM.');\n }\n if (value.mode !== undefined && value.mode !== 'advisory' && value.mode !== 'enforce') {\n throw new Error('Project agent availability mode must be advisory or enforce.');\n }\n}\n", "import type { RoleKnowledgeManifest } from './project-agent-identity-types.js';\n\nexport const BUILT_IN_KNOWLEDGE_MANIFESTS: Record<string, RoleKnowledgeManifest> = {\n android: {\n role: 'android',\n // Only machine-readable JSON registries belong in liveQueries. Android\n // release/API data has no JSON registry endpoint, so those checks stay as\n // checklist prose below.\n liveQueries: {\n kotlin: {\n registry: 'https://registry.npmjs.org/kotlin/latest',\n key: 'version',\n description: 'Kotlin latest stable',\n },\n },\n checklist: [\n 'Current Android Gradle Plugin version (8.x+)',\n 'Current Kotlin version (2.x+)',\n 'Current compileSdk / targetSdk (\u2265 34, check Play Store policy)',\n 'Current Jetpack Compose stable version',\n 'All third-party dependencies are at latest compatible minor',\n ],\n verifyThreshold: 0.5,\n },\n frontend: {\n role: 'frontend',\n liveQueries: {\n react: {\n registry: 'https://registry.npmjs.org/react/latest',\n key: 'version',\n description: 'React latest stable',\n },\n nextjs: {\n registry: 'https://registry.npmjs.org/next/latest',\n key: 'version',\n description: 'Next.js latest stable',\n },\n },\n checklist: [\n 'Current React version (pinned in package.json)',\n 'Current Next.js / Vite / framework version',\n 'Node.js runtime version (project .nvmrc or engines)',\n 'All devDependencies are at latest compatible versions',\n 'Browser compatibility targets from browserslist',\n ],\n verifyThreshold: 0.5,\n },\n executor: {\n role: 'executor',\n liveQueries: {\n node: {\n registry: 'https://registry.npmjs.org/node/latest',\n key: 'version',\n description: 'Node.js latest release',\n },\n },\n checklist: [\n 'Node.js version from .nvmrc or package.engines',\n 'TypeScript version from package.json',\n 'Package manager (pnpm \u2265 9) from packageManager',\n 'Current toolchain: esbuild, vitest, etc.',\n ],\n verifyThreshold: 0.6,\n },\n};\n", "import { readFileSync } from 'node:fs';\nimport {\n learningPolicyPath,\n writeTextAtomically,\n} from './project-agent-paths.js';\n\n/** Persistent controls and counters for one roster role's learning loop. */\nexport interface ProjectAgentLearningPolicy {\n /** Retain knowledge but stop prompt injection and automatic capture when false. */\n enabled: boolean;\n lifetimeCaptureCount: number;\n lastCaptureAt?: string | undefined;\n lastCaptureSource?: 'automatic' | 'manual' | 'taught' | undefined;\n}\n\nconst DEFAULT_LEARNING_POLICY: ProjectAgentLearningPolicy = {\n enabled: true,\n lifetimeCaptureCount: 0,\n};\n\nexport function loadProjectAgentLearningPolicy(\n role: string,\n projectRoot?: string,\n): ProjectAgentLearningPolicy {\n try {\n const parsed = JSON.parse(\n readFileSync(learningPolicyPath(role, projectRoot), 'utf8'),\n ) as Partial<ProjectAgentLearningPolicy>;\n return {\n enabled: parsed.enabled !== false,\n lifetimeCaptureCount:\n typeof parsed.lifetimeCaptureCount === 'number' &&\n Number.isInteger(parsed.lifetimeCaptureCount) &&\n parsed.lifetimeCaptureCount >= 0\n ? parsed.lifetimeCaptureCount\n : 0,\n ...(typeof parsed.lastCaptureAt === 'string' ? { lastCaptureAt: parsed.lastCaptureAt } : {}),\n ...(parsed.lastCaptureSource === 'automatic' ||\n parsed.lastCaptureSource === 'manual' ||\n parsed.lastCaptureSource === 'taught'\n ? { lastCaptureSource: parsed.lastCaptureSource }\n : {}),\n };\n } catch {\n return { ...DEFAULT_LEARNING_POLICY };\n }\n}\n\nexport function updateProjectAgentLearningPolicy(\n role: string,\n patch: Partial<Pick<ProjectAgentLearningPolicy, 'enabled'>>,\n projectRoot?: string,\n): ProjectAgentLearningPolicy {\n const current = loadProjectAgentLearningPolicy(role, projectRoot);\n const updated = {\n ...current,\n ...(patch.enabled !== undefined ? { enabled: patch.enabled } : {}),\n };\n writeTextAtomically(\n learningPolicyPath(role, projectRoot),\n `${JSON.stringify(updated, null, 2)}\\n`,\n );\n return updated;\n}\n", "import { randomUUID } from 'node:crypto';\nimport { mkdirSync, renameSync, rmSync, writeFileSync } from 'node:fs';\nimport * as path from 'node:path';\n\nconst AGENT_ROLE_PATTERN = /^[a-z0-9][a-z0-9._-]{0,95}$/i;\n\nexport function assertProjectAgentRole(role: string): string {\n const normalized = role.trim();\n if (\n !AGENT_ROLE_PATTERN.test(normalized) ||\n normalized === '.' ||\n normalized === '..' ||\n normalized.includes('/') ||\n normalized.includes('\\\\')\n ) {\n throw new Error(`Invalid project agent role: \"${role}\".`);\n }\n return normalized;\n}\n\nexport function isProjectAgentRoleName(name: string): boolean {\n return AGENT_ROLE_PATTERN.test(name) && name !== '.' && name !== '..';\n}\n\nexport function agentsDir(projectRoot?: string): string {\n const root = projectRoot ?? process.cwd();\n return path.join(root, '.wrongstack', 'agents');\n}\n\nexport function roleDir(role: string, projectRoot?: string): string {\n return path.join(agentsDir(projectRoot), assertProjectAgentRole(role));\n}\n\nexport function writeTextAtomically(filePath: string, content: string): void {\n mkdirSync(path.dirname(filePath), { recursive: true });\n const temporaryPath = `${filePath}.${process.pid}.${randomUUID()}.tmp`;\n try {\n writeFileSync(temporaryPath, content, 'utf8');\n renameSync(temporaryPath, filePath);\n } finally {\n try {\n rmSync(temporaryPath, { force: true });\n } catch {\n // Best-effort cleanup after a failed rename.\n }\n }\n}\n\nexport function learningPolicyPath(role: string, projectRoot?: string): string {\n return path.join(roleDir(role, projectRoot), 'learning.json');\n}\n\nexport function projectAgentProfilePath(role: string, projectRoot?: string): string {\n return path.join(roleDir(role, projectRoot), 'profile.json');\n}\n", "/**\n * Return the Jaccard similarity (0-1) of two normalised token sets.\n */\nexport function tokenOverlap(a: string, b: string): number {\n const setA = new Set(a.split(/\\s+/));\n const setB = new Set(b.split(/\\s+/));\n const intersect = new Set([...setA].filter((t) => setB.has(t)));\n const union = new Set([...setA, ...setB]);\n return union.size === 0 ? 0 : intersect.size / union.size;\n}\n\n/**\n * Split an existing learned.md body into individual entries.\n * Entries are delimited by `---\\n\\n` sequences.\n */\nexport function splitLearnedEntries(body: string): string[] {\n return body\n .split(/\\n---\\n+/)\n .map((entry) => entry.trim())\n .map((entry) =>\n entry\n .replace(/^# Learned wisdom for .+$/im, '')\n .replace(/<!--[\\s\\S]*?-->/g, '')\n .trim(),\n )\n .filter(Boolean);\n}\n", "export const LEARNED_SOFT_LIMIT = 8_192;\nexport const LEARNED_HARD_LIMIT = 16_384;\n\n/**\n * Maximum length (in characters) of a single captured learning entry after\n * normalization.\n */\nexport const LEARNED_ENTRY_MAX_CHARS = 600;\n\nexport const MIN_INSTRUCTIVE_LENGTH = 30;\n\n/**\n * Category tag for a captured learning entry. Derived deterministically from\n * the entry's content so the file is self-describing and scannable.\n */\nexport type LearnedEntryCategory = 'convention' | 'pattern' | 'warning' | 'fact';\n\nconst NARRATIVE_SENTENCE_STARTS: readonly RegExp[] = [\n /^(?:when|while|during|after|before|once|since)\\s+(?:i|we|the agent|i was|i were|i had)\\b/i,\n /^(?:i|we)\\s+(?:found|noticed|learned|discovered|realized|saw|encountered|hit|ran into)\\b/i,\n /^(?:i|we)\\s+(?:was|were|had|did|ran|tried|attempted|used|modified|changed|updated)\\b/i,\n /^(?:this|that|the)\\s+(?:task|session|run|commit|change|pr|pull request|invocation)\\b/i,\n /^(?:in|on|for|at|during)\\s+(?:this|that|the)\\s+(?:task|session|run|commit|change|pr)\\b/i,\n /^(?:today|yesterday|earlier|just now|recently|lately)\\b/i,\n];\n\nconst EPHEMERAL_PATTERNS: readonly { pattern: RegExp; replacement: string }[] = [\n { pattern: /\\b[0-9a-f]{7,40}\\b/g, replacement: '' },\n {\n pattern: /\\b\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(?::\\d{2})?(?:\\.\\d+)?(?:Z|[+-]\\d{2}:?\\d{2})?\\b/g,\n replacement: '',\n },\n {\n pattern: /(?<=\\b(?:on|from|since|before|after|dated|until)\\s)\\d{4}-\\d{2}-\\d{2}\\b/gi,\n replacement: '',\n },\n { pattern: /\\b(?:line|lines?)\\s+\\d+(?:\\s*[-\u2013]\\s*\\d+)?/gi, replacement: '' },\n { pattern: /#\\s*(?:PR|issue|MR)\\s*\\d+/gi, replacement: '' },\n { pattern: /(?<=\\s)#\\d{1,6}\\b/g, replacement: '' },\n];\n\n/**\n * Normalize a captured LEARNED block into an instructive entry.\n */\nexport function normalizeLearnedEntry(raw: string): {\n text: string;\n category: LearnedEntryCategory;\n} | null {\n if (!raw) return null;\n\n let cleaned = raw;\n for (const { pattern, replacement } of EPHEMERAL_PATTERNS) {\n cleaned = cleaned.replace(pattern, replacement);\n }\n\n const sentences = splitSentences(cleaned);\n const directiveSentences: string[] = [];\n let hadSubstantiveNarrative = false;\n for (const sentence of sentences) {\n const trimmed = sentence.trim();\n if (!trimmed) continue;\n if (isNarrativeSentence(trimmed)) {\n hadSubstantiveNarrative = true;\n const salvaged = salvageDirectiveTail(trimmed);\n if (salvaged) directiveSentences.push(salvaged);\n continue;\n }\n directiveSentences.push(trimmed);\n }\n\n if (directiveSentences.length === 0) return null;\n\n let normalized = directiveSentences.join(' ').replace(/\\s+/g, ' ').trim();\n\n if (normalized.length > LEARNED_ENTRY_MAX_CHARS) {\n normalized = truncateToInstructive(normalized, LEARNED_ENTRY_MAX_CHARS);\n if (normalized.length < MIN_INSTRUCTIVE_LENGTH) return null;\n }\n\n if (normalized.length < MIN_INSTRUCTIVE_LENGTH) return null;\n\n if (hadSubstantiveNarrative && directiveSentences.length < sentences.length / 2) {\n if (normalized.length < MIN_INSTRUCTIVE_LENGTH * 2) return null;\n }\n\n return {\n text: normalized,\n category: classifyLearnedEntry(normalized),\n };\n}\n\nfunction splitSentences(text: string): string[] {\n return text\n .replace(/\\s+/g, ' ')\n .split(/(?<=[.!?])\\s+(?=[A-Z(])/)\n .map((s) => s.trim())\n .filter(Boolean);\n}\n\nfunction isNarrativeSentence(sentence: string): boolean {\n return NARRATIVE_SENTENCE_STARTS.some((re) => re.test(sentence));\n}\n\nfunction salvageDirectiveTail(sentence: string): string | null {\n for (const re of NARRATIVE_SENTENCE_STARTS) {\n const m = re.exec(sentence);\n if (!m) continue;\n const tail = sentence\n .slice(m[0].length)\n .replace(/^[,\\s]+/, '')\n .trim();\n if (!tail) return null;\n if (looksDirective(tail)) return tail;\n return null;\n }\n return null;\n}\n\nconst DIRECTIVE_VERB_PATTERN =\n /^(?:always|never|prefer|avoid|use|ensure|verify|check|run|execute|apply|adopt|choose|require|must|should|don'?t|do not|keep|maintain|set|define|specify|validate|confirm|inspect|review|handle|enable|disable|restrict|cap|limit|wrap|isolate|separate|combine|split|merge|refactor|rename|move|extract|inline)\\b/i;\n\nfunction looksDirective(text: string): boolean {\n if (DIRECTIVE_VERB_PATTERN.test(text)) return true;\n if (/\\b(?:is|are|must be|should be|required to)\\s+(?:always|never|used|preferred)\\b/i.test(text))\n return true;\n if (\n /\\b(?:had to|has to|have to|needs? to|must|should|ought to)\\s+\\w+/i.test(text) &&\n text.length > MIN_INSTRUCTIVE_LENGTH\n )\n return true;\n return false;\n}\n\nfunction truncateToInstructive(text: string, maxChars: number): string {\n const sentences = splitSentences(text);\n let acc = '';\n for (const s of sentences) {\n const candidate = acc ? `${acc} ${s}` : s;\n if (candidate.length > maxChars) break;\n acc = candidate;\n }\n if (acc) return acc;\n return `${text.slice(0, maxChars - 1).trimEnd()}\u2026`;\n}\n\nexport function classifyLearnedEntry(text: string): LearnedEntryCategory {\n const lower = text.toLowerCase();\n if (\n /\\b(?:avoid|never|don'?t|do not|must not|prevent|watch out|beware|pitfall|gotcha|hazard|risk)\\b/.test(\n lower,\n )\n )\n return 'warning';\n if (\n /\\b(?:use|prefer|choose|adopt|leverage|apply|switch to|migrate to)\\b/.test(lower) ||\n /\\b(?:pattern|approach|strategy|technique|idiom)\\b/.test(lower)\n )\n return 'pattern';\n if (\n /\\b(?:always|must|should|require|ensure|verify|check|run|execute|before|after|when)\\b/.test(\n lower,\n )\n )\n return 'convention';\n return 'fact';\n}\n\nexport function normalizeForComparison(text: string): string {\n return text\n .toLowerCase()\n .replace(/[^\\w\\s]/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim()\n .split(/\\s+/)\n .sort()\n .join(' ');\n}\n", "import {\n splitLearnedEntries,\n tokenOverlap,\n} from './project-agent-learning-entries.js';\nimport {\n classifyLearnedEntry,\n type LearnedEntryCategory,\n MIN_INSTRUCTIVE_LENGTH,\n normalizeForComparison,\n} from './project-agent-learning-normalize.js';\n\n/**\n * Parsed representation of a single buffered entry \u2014 the structured shape\n * that every capture merges into.\n */\nexport interface StructuredLearnedEntry {\n /** Injective content identity: normalized token signature for dedup. */\n key: string;\n /** Category bucket (convention / pattern / warning / fact). */\n category: LearnedEntryCategory;\n /** The directive itself \u2014 what the agent should do. */\n what: string;\n /** Why this directive exists \u2014 derived from category and directive signals. */\n why: string;\n /** Concrete, runnable anchor \u2014 commands, file paths, package names. */\n how: string;\n /** ISO timestamp of when this entry was originally captured. */\n capturedAt: string;\n}\n\nexport function parseLearnedEntryStamp(entry: string): {\n capturedAt: string;\n category: LearnedEntryCategory | null;\n} {\n const structuredMatch = entry.match(\n /<!--\\s*learned-stamp:\\s*category=([\\w-]+);\\s*capturedAt=([^;]+?)\\s*-->/,\n );\n if (structuredMatch) {\n const rawCategory = structuredMatch[1];\n const candidate = parseLearnedCategory(rawCategory);\n return {\n capturedAt: typeof structuredMatch[2] === 'string' ? structuredMatch[2].trim() : '',\n category: candidate ?? null,\n };\n }\n const stampMatch = entry.match(/^>\\s*(?:\\[\\s*([\\w-]+)\\s*\\]\\s+)?(?:Captured|Taught)\\s+(\\S+)/m);\n if (!stampMatch) {\n return { capturedAt: '', category: null };\n }\n return {\n capturedAt: typeof stampMatch[2] === 'string' ? stampMatch[2] : '',\n category: parseLearnedCategory(stampMatch[1]) ?? null,\n };\n}\n\nfunction parseLearnedCategory(value: string | undefined): LearnedEntryCategory | undefined {\n return value === 'convention' || value === 'pattern' || value === 'warning' || value === 'fact'\n ? value\n : undefined;\n}\n\nfunction stripStamp(entry: string): string {\n return entry\n .replace(/<!--\\s*learned-stamp:[\\s\\S]*?-->/g, '')\n .replace(/^>\\s*(?:\\[[\\w-]+\\]\\s+)?(?:Captured|Taught)\\s+.+$/m, '')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim();\n}\n\nfunction directiveKey(text: string): string {\n return normalizeForComparison(text);\n}\n\nexport function decomposeLearnedEntry(\n text: string,\n category: LearnedEntryCategory,\n): { what: string; why: string; how: string } {\n const what = text;\n const why = deriveWhy(category, text);\n const how = extractHow(text);\n return { what, why, how };\n}\n\nconst WHY_BY_CATEGORY: Record<LearnedEntryCategory, string> = {\n convention:\n 'Established convention for this codebase \u2014 skipping it risks regressions, merge friction, or out-of-sync state with peers.',\n pattern:\n \"This project's chosen approach \u2014 alternatives were considered and either conflict with existing architecture or were rejected for known reasons.\",\n warning:\n 'Known failure mode \u2014 skipping this has caused real defects in this codebase. The cost of getting it wrong outweighs the cost of the check.',\n fact: 'Current state of the project \u2014 assumed by other conventions, build steps, or peers, so acting on a stale assumption wastes a cycle.',\n};\n\nfunction deriveWhy(category: LearnedEntryCategory, text: string): string {\n const base = WHY_BY_CATEGORY[category];\n const signals: string[] = [];\n const lower = text.toLowerCase();\n if (/\\bbefore\\s+(?:merge|commit|deploy|release|shipping|publishing)\\b/.test(lower))\n signals.push('guard before shipping');\n if (/\\bto\\s+avoid\\b/.test(lower)) {\n const m = text.match(/to avoid ([^.!?]+)/i);\n if (m?.[1]) signals.push(`avoid ${m[1].trim()}`);\n }\n if (/\\bso\\s+(?:that|we|the project)\\b/.test(lower)) {\n const m = text.match(/so (?:that |we |the project )?([^.!?]+)/i);\n if (m?.[1]) signals.push(`so ${m[1].trim()}`);\n }\n if (signals.length === 0) return base;\n return `${base} Project signals: ${signals.join('; ')}.`;\n}\n\nfunction extractHow(text: string): string {\n const anchors = new Set<string>();\n const backticked = text.match(/`([^`]+)`/g) ?? [];\n for (const raw of backticked) {\n const inner = raw.replace(/`/g, '').trim();\n if (inner.length > 0 && inner.length <= 120) anchors.add(inner);\n }\n const pathMatches =\n text.match(\n /(?:[a-zA-Z0-9_.-]+\\/)+[a-zA-Z0-9_.-]+\\.(?:ts|tsx|js|jsx|mjs|cjs|json|md|yaml|yml)/g,\n ) ?? [];\n for (const p of pathMatches) anchors.add(p);\n const scoped = text.match(/@[a-z0-9][\\w.-]*\\/[a-z0-9][\\w.-]*/gi) ?? [];\n for (const p of scoped) anchors.add(p);\n if (anchors.size === 0) return '';\n return [...anchors].map((a) => `- \\`${a}\\``).join('\\n');\n}\n\nexport function parseStructuredLearnedEntriesFromContent(\n raw: string,\n legacyEntries: string[] = splitLearnedEntries(raw),\n): StructuredLearnedEntry[] {\n if (!raw) return [];\n const structured: StructuredLearnedEntry[] = [];\n const entryPattern =\n /<!--\\s*learned-stamp:\\s*category=([\\w-]+);\\s*capturedAt=([^;]+?)\\s*-->\\s*\\n-\\s+\\*\\*(.+?)\\*\\*(?:\\s*\\n\\s+-\\s+\\*Why:\\*\\s+(.+?))?(?:\\s*\\n\\s+-\\s+\\*How:\\*\\s+(.+?))?(?=\\n(?:<!--|##|---|\\n|$))/gs;\n for (const m of raw.matchAll(entryPattern)) {\n const category = parseLearnedCategory(m[1]) ?? 'fact';\n const capturedAt = (m[2] ?? '').trim();\n const what = (m[3] ?? '').trim();\n const why = (m[4] ?? '').trim();\n const howRaw = (m[5] ?? '').trim();\n if (what.length < MIN_INSTRUCTIVE_LENGTH) continue;\n structured.push({\n key: directiveKey(what),\n category,\n what,\n why: why || WHY_BY_CATEGORY[category],\n how: howRaw,\n capturedAt,\n });\n }\n if (structured.length === 0) {\n for (const chunk of legacyEntries) {\n const stamp = parseLearnedEntryStamp(chunk);\n const directive = stamp.capturedAt || stamp.category ? stripStamp(chunk) : chunk;\n if (directive.length < MIN_INSTRUCTIVE_LENGTH) continue;\n const category = stamp.category ?? classifyLearnedEntry(directive);\n const { what, why, how } = decomposeLearnedEntry(directive, category);\n structured.push({\n key: directiveKey(directive),\n category,\n what,\n why,\n how,\n capturedAt: stamp.capturedAt,\n });\n }\n }\n return structured;\n}\n\nexport function mergeStructuredEntries(\n existing: StructuredLearnedEntry[],\n fresh: { text: string; category: LearnedEntryCategory; capturedAt: string },\n): StructuredLearnedEntry[] {\n const { what, why, how } = decomposeLearnedEntry(fresh.text, fresh.category);\n const freshEntry: StructuredLearnedEntry = {\n key: directiveKey(fresh.text),\n category: fresh.category,\n what,\n why,\n how,\n capturedAt: fresh.capturedAt,\n };\n const merged = existing.filter((entry) => tokenOverlap(entry.key, freshEntry.key) < 0.55);\n merged.push(freshEntry);\n const order: Record<LearnedEntryCategory, number> = {\n warning: 0,\n convention: 1,\n pattern: 2,\n fact: 3,\n };\n merged.sort((a, b) => {\n const cmp = order[a.category] - order[b.category];\n if (cmp !== 0) return cmp;\n return a.what.localeCompare(b.what);\n });\n return merged;\n}\n\nconst SECTION_TITLE: Record<LearnedEntryCategory, string> = {\n warning: '## What to avoid',\n convention: '## What to do',\n pattern: '## Patterns to follow',\n fact: '## Project facts',\n};\n\nexport function renderLearnedInstructions(\n role: string,\n entries: StructuredLearnedEntry[],\n capturedAt: string,\n): string {\n const headerLines = [\n `# Learned instructions for \\`${role}\\``,\n '',\n '> Project-specific learning data for the `' +\n role +\n '` agent. Each entry is a directive \u2014 read it as an instruction, not a journal entry. Entries are re-derived on every capture, so this file is always a current, structured snapshot of what this agent has learned.',\n '',\n ];\n\n if (entries.length === 0) {\n return (\n headerLines.join('\\n') +\n [\n '_No learned entries yet._',\n '',\n '---',\n `*Last capture: ${capturedAt} \u00B7 0 entries*`,\n '',\n ].join('\\n')\n );\n }\n\n const buckets: Record<LearnedEntryCategory, StructuredLearnedEntry[]> = {\n warning: [],\n convention: [],\n pattern: [],\n fact: [],\n };\n for (const entry of entries) buckets[entry.category].push(entry);\n\n const sections: string[] = [];\n for (const category of ['warning', 'convention', 'pattern', 'fact'] as LearnedEntryCategory[]) {\n const list = buckets[category];\n if (list.length === 0) continue;\n sections.push(SECTION_TITLE[category]);\n sections.push('');\n for (const entry of list) {\n const stamp = `<!-- learned-stamp: category=${entry.category}; capturedAt=${entry.capturedAt} -->`;\n sections.push(stamp);\n sections.push(`- **${entry.what}**`);\n sections.push(` - *Why:* ${entry.why}`);\n if (entry.how) {\n for (const line of entry.how.split('\\n'))\n sections.push(` - *How:* ${line.replace(/^- /, '')}`);\n }\n sections.push('');\n }\n }\n\n const footer = ['---', `*Last capture: ${capturedAt} \u00B7 ${entries.length} entries*`, ''];\n return [...headerLines, ...sections, ...footer].join('\\n');\n}\n", "import {\n existsSync,\n mkdirSync,\n readFileSync,\n rmSync,\n} from 'node:fs';\nimport * as path from 'node:path';\nimport { splitLearnedEntries } from './project-agent-learning-entries.js';\nimport { assertProjectAgentRole, roleDir, writeTextAtomically } from './project-agent-paths.js';\n\nexport interface ConsolidationMetadata {\n /** ISO timestamp of the last consolidation. */\n consolidatedAt: string;\n /** Number of raw learned.md entries that were synthesized. */\n sourceEntryCount: number;\n /** Byte size of the raw learned.md at consolidation time. */\n sourceBytes: number;\n /** Byte size of the resulting consolidated.md. */\n consolidatedBytes: number;\n /** Whether the consolidation was user-triggered or automatic. */\n trigger: 'manual' | 'automatic';\n /** Optional model that produced the consolidation. */\n model?: string | undefined;\n}\n\nfunction learnedPath(role: string, projectRoot?: string): string {\n return path.join(roleDir(role, projectRoot), 'learned.md');\n}\n\nfunction loadProjectAgentLearnedText(role: string, projectRoot?: string): string {\n try {\n return readFileSync(learnedPath(role, projectRoot), 'utf8').trim();\n } catch {\n return '';\n }\n}\n\nfunction listProjectAgentLearnedTextEntries(role: string, projectRoot?: string): string[] {\n return splitLearnedEntries(loadProjectAgentLearnedText(role, projectRoot));\n}\n\nfunction consolidationPath(role: string, projectRoot?: string): string {\n return path.join(roleDir(role, projectRoot), 'consolidated.md');\n}\n\nfunction consolidationMetaPath(role: string, projectRoot?: string): string {\n return path.join(roleDir(role, projectRoot), 'consolidation.json');\n}\n\nexport function loadProjectAgentConsolidated(role: string, projectRoot?: string): string {\n try {\n return readFileSync(consolidationPath(role, projectRoot), 'utf8').trim();\n } catch {\n return '';\n }\n}\n\nexport function loadConsolidationMetadata(\n role: string,\n projectRoot?: string,\n): ConsolidationMetadata | undefined {\n try {\n const raw = readFileSync(consolidationMetaPath(role, projectRoot), 'utf8');\n const parsed = JSON.parse(raw) as unknown;\n if (\n typeof parsed === 'object' &&\n parsed !== null &&\n typeof (parsed as ConsolidationMetadata).consolidatedAt === 'string' &&\n typeof (parsed as ConsolidationMetadata).sourceEntryCount === 'number'\n ) {\n return parsed as ConsolidationMetadata;\n }\n return undefined;\n } catch {\n return undefined;\n }\n}\n\nexport function isConsolidated(role: string, projectRoot?: string): boolean {\n return existsSync(consolidationMetaPath(role, projectRoot));\n}\n\nexport function saveProjectAgentConsolidated(\n role: string,\n content: string,\n projectRoot?: string,\n metadata?: Partial<ConsolidationMetadata>,\n): string {\n if (!content.trim()) {\n return consolidationPath(assertProjectAgentRole(role), projectRoot);\n }\n const normalizedRole = assertProjectAgentRole(role);\n const dir = roleDir(normalizedRole, projectRoot);\n mkdirSync(dir, { recursive: true });\n const fp = consolidationPath(normalizedRole, projectRoot);\n writeTextAtomically(fp, content);\n\n const rawEntries = listProjectAgentLearnedTextEntries(normalizedRole, projectRoot);\n const rawBytes = Buffer.byteLength(loadProjectAgentLearnedText(normalizedRole, projectRoot), 'utf8');\n const meta: ConsolidationMetadata = {\n consolidatedAt: new Date().toISOString(),\n sourceEntryCount: rawEntries.length,\n sourceBytes: rawBytes,\n consolidatedBytes: Buffer.byteLength(content, 'utf8'),\n trigger: metadata?.trigger ?? 'manual',\n ...(metadata?.model ? { model: metadata.model } : {}),\n };\n writeTextAtomically(\n consolidationMetaPath(normalizedRole, projectRoot),\n `${JSON.stringify(meta, null, 2)}\\n`,\n );\n return fp;\n}\n\nexport function clearProjectAgentConsolidated(role: string, projectRoot?: string): void {\n const normalizedRole = assertProjectAgentRole(role);\n for (const file of [\n consolidationPath(normalizedRole, projectRoot),\n consolidationMetaPath(normalizedRole, projectRoot),\n ]) {\n try {\n rmSync(file, { force: true });\n } catch {\n // already absent\n }\n }\n}\n\nexport function buildConsolidationInstruction(\n role: string,\n projectRoot?: string,\n): {\n instruction: string;\n rawEntries: string[];\n hasExistingConsolidation: boolean;\n} {\n const normalizedRole = assertProjectAgentRole(role);\n const rawEntries = listProjectAgentLearnedTextEntries(normalizedRole, projectRoot);\n const existingConsolidation = loadProjectAgentConsolidated(normalizedRole, projectRoot);\n const rawBody = rawEntries.map((entry, i) => `### Entry ${i + 1}\\n\\n${entry}`).join('\\n\\n');\n\n const sections: string[] = [\n `You are reviewing and consolidating the captured learning entries for the \"${normalizedRole}\" agent role in this project.`,\n '',\n 'Your task is to synthesize the raw entries below into a single, narrowly-scoped document that represents what this agent has learned \u2014 specifically for its skills and role responsibilities. This document is the **instruction manual for future invocations** of this agent in this project. It is not a journal, not an exhaustive transcription, and not a memory store.',\n '',\n '## Requirements',\n '',\n '1. **Be selective.** Some raw entries are noise \u2014 narrative descriptions of single-session events, ephemeral references (commit SHAs, timestamps, line numbers, PR refs), or thin fragments that cannot be generalized. **Drop them.** The output must be smaller than the input; a consolidation that preserves every word is not a consolidation.',\n '2. **Extract the directive.** When a raw entry mixes narrative framing with a buried lesson (\"When I worked on X, I realized Y\"), extract the lesson as a directive and discard the framing.',\n '3. **Generic, not specific.** Rewrite entries so they apply across sessions. Replace session-specific anchors (commit SHAs, dates, line numbers) with general principles or concrete tools/commands that will still be valid next month.',\n '4. **Self-contained bullets.** Each bullet must make sense standalone \u2014 understandable to a future agent that has no context about the session that produced it.',\n '5. **Narrow scope.** Keep only knowledge that is genuinely durable and role-relevant. When in doubt, leave it out.',\n '6. **Structured format.** Organize the content under clear markdown headings (##) by topic. Use bullet points for individual facts. Group by category (Conventions, Patterns, Warnings, Project Facts) when it helps scannability.',\n '7. **Preserve actionable anchors.** Keep exact file paths, command names, package names, and configuration values that make a directive concrete and runnable.',\n '8. **No filler.** Do not include meta-commentary about the consolidation process. The document should read as if it were always a single authoritative reference.',\n '',\n rawEntries.length > 0\n ? `## Raw learned entries (${rawEntries.length} total)\\n\\n${rawBody}`\n : '## Raw learned entries\\n\\n(No raw entries yet \u2014 return an empty document.)',\n ];\n\n if (existingConsolidation) {\n sections.push(\n '',\n `## Existing consolidated document (for reference \u2014 improve upon it)\\n\\n${existingConsolidation}`,\n );\n }\n\n sections.push(\n '',\n '## Output',\n '',\n 'Return ONLY the consolidated markdown document. Do not wrap it in code fences or add commentary.',\n );\n\n return {\n instruction: sections.join('\\n'),\n rawEntries,\n hasExistingConsolidation: Boolean(existingConsolidation),\n };\n}\n", "import { existsSync, mkdirSync, readdirSync, readFileSync } from 'node:fs';\nimport * as path from 'node:path';\nimport type { CreateProjectAgentInput, ProjectAgentProfile } from './project-agent-identity-types.js';\nimport { assertProjectAgentRole, projectAgentProfilePath, roleDir, writeTextAtomically } from './project-agent-paths.js';\n\nexport function slugifyProjectAgentRole(name: string): string {\n const slug = name\n .normalize('NFKD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n .replace(/[^a-z0-9._-]+/g, '-')\n .replace(/^[._-]+|[._-]+$/g, '')\n .slice(0, 96);\n return assertProjectAgentRole(slug);\n}\n\nexport function loadProjectAgentProfile(\n role: string,\n projectRoot?: string,\n): ProjectAgentProfile | undefined {\n try {\n const parsed = JSON.parse(\n readFileSync(projectAgentProfilePath(role, projectRoot), 'utf8'),\n ) as Partial<ProjectAgentProfile>;\n const normalizedRole = assertProjectAgentRole(parsed.role ?? role);\n const baseRole = assertProjectAgentRole(parsed.baseRole ?? 'generic');\n if (normalizedRole !== assertProjectAgentRole(role)) return undefined;\n if (typeof parsed.name !== 'string' || !parsed.name.trim()) return undefined;\n if (typeof parsed.purpose !== 'string' || !parsed.purpose.trim()) return undefined;\n if (\n !Array.isArray(parsed.taskTypes) ||\n parsed.taskTypes.some((item) => typeof item !== 'string')\n ) {\n return undefined;\n }\n const createdAt =\n typeof parsed.createdAt === 'string' ? parsed.createdAt : new Date(0).toISOString();\n const updatedAt = typeof parsed.updatedAt === 'string' ? parsed.updatedAt : createdAt;\n return {\n role: normalizedRole,\n name: parsed.name.trim(),\n baseRole,\n purpose: parsed.purpose.trim(),\n taskTypes: parsed.taskTypes.map((item) => item.trim()).filter(Boolean),\n createdAt,\n updatedAt,\n };\n } catch {\n return undefined;\n }\n}\n\n/** Create a new, independently-learning project role from a roster template. */\nexport function createProjectAgent(\n input: CreateProjectAgentInput,\n projectRoot?: string,\n): ProjectAgentProfile {\n const name = input.name.trim();\n const purpose = input.purpose.trim();\n if (!name || name.length > 120) throw new Error('Project agent name must be 1-120 characters.');\n if (purpose.length < 10 || purpose.length > 4_000) {\n throw new Error('Project agent purpose must be 10-4000 characters.');\n }\n const role = assertProjectAgentRole(\n (input.role?.trim() || slugifyProjectAgentRole(name)).toLowerCase(),\n );\n const baseRole = assertProjectAgentRole((input.baseRole?.trim() || 'generic').toLowerCase());\n const taskTypes = [...new Set(input.taskTypes.map((item) => item.trim()).filter(Boolean))];\n if (\n taskTypes.length === 0 ||\n taskTypes.length > 32 ||\n taskTypes.some((item) => item.length > 160)\n ) {\n throw new Error('Project agent requires 1-32 task descriptions, each at most 160 characters.');\n }\n\n const dir = roleDir(role, projectRoot);\n if (existsSync(dir) && readdirSync(dir).length > 0) {\n throw new Error(`Project agent role \"${role}\" already exists.`);\n }\n const now = new Date().toISOString();\n const profile: ProjectAgentProfile = {\n role,\n name,\n baseRole,\n purpose,\n taskTypes,\n createdAt: now,\n updatedAt: now,\n };\n const identity = [\n `# ${name}`,\n '',\n `You are the project-specific \"${name}\" agent (role: ${role}).`,\n '',\n '## Purpose',\n '',\n purpose,\n '',\n '## Primary task types',\n '',\n ...taskTypes.map((item) => `- ${item}`),\n '',\n 'Learn durable project conventions from completed work, keep conclusions evidence-based, and stay within this assigned purpose.',\n '',\n ].join('\\n');\n\n mkdirSync(dir, { recursive: true });\n writeTextAtomically(path.join(dir, 'identity.md'), identity);\n writeTextAtomically(\n projectAgentProfilePath(role, projectRoot),\n `${JSON.stringify(profile, null, 2)}\\n`,\n );\n return profile;\n}\n", "import {\n existsSync,\n mkdirSync,\n readdirSync,\n readFileSync,\n rmSync,\n} from 'node:fs';\nimport * as path from 'node:path';\nimport { validateProjectAgentConfig } from './project-agent-config-validation.js';\nimport {\n agentsDir,\n isProjectAgentRoleName,\n roleDir,\n writeTextAtomically,\n} from './project-agent-paths.js';\nimport { renderLearnedInstructions } from './project-agent-learning-structured.js';\nimport type {\n ProjectAgentConfig,\n RoleKnowledgeManifest,\n} from './project-agent-identity-types.js';\n\n/**\n * Write or update the learned wisdom file for a given role.\n * Appends to existing content when `mode` is 'append'; replaces when\n * it is 'replace'. Returns the full path written so callers can log it.\n */\nexport function updateProjectAgentLearned(\n role: string,\n content: string,\n projectRoot?: string,\n mode: 'append' | 'replace' = 'append',\n): string {\n const dir = roleDir(role, projectRoot);\n mkdirSync(dir, { recursive: true });\n const filePath = path.join(dir, 'learned.md');\n const existing = (() => {\n try {\n return readFileSync(filePath, 'utf8');\n } catch {\n return '';\n }\n })();\n const newContent =\n mode === 'append' && existing\n ? `${existing.trimEnd()}\\n\\n---\\n\\n${content.trimStart()}`\n : content;\n writeTextAtomically(filePath, newContent);\n return filePath;\n}\n\n/**\n * Write or update the project identity file for a given role.\n * Replaces any existing identity.md with the new content.\n */\nexport function updateProjectAgentIdentity(\n role: string,\n content: string,\n projectRoot?: string,\n): string {\n const dir = roleDir(role, projectRoot);\n mkdirSync(dir, { recursive: true });\n const filePath = path.join(dir, 'identity.md');\n writeTextAtomically(filePath, content);\n return filePath;\n}\n\n/**\n * Write or update the config.json override for a given role.\n */\nexport function updateProjectAgentConfig(\n role: string,\n config: ProjectAgentConfig,\n projectRoot?: string,\n): string {\n const validated = validateProjectAgentConfig(config);\n const dir = roleDir(role, projectRoot);\n mkdirSync(dir, { recursive: true });\n const filePath = path.join(dir, 'config.json');\n writeTextAtomically(filePath, `${JSON.stringify(validated, null, 2)}\\n`);\n return filePath;\n}\n\n/**\n * Write or update the knowledge manifest for a given role.\n */\nexport function updateProjectAgentKnowledge(\n role: string,\n manifest: RoleKnowledgeManifest,\n projectRoot?: string,\n): string {\n const dir = roleDir(role, projectRoot);\n mkdirSync(dir, { recursive: true });\n const filePath = path.join(dir, 'knowledge.json');\n writeTextAtomically(filePath, `${JSON.stringify(manifest, null, 2)}\\n`);\n return filePath;\n}\n\n/**\n * Reset all project-level customizations for a given role back to factory\n * defaults by removing its `.wrongstack/agents/<role>/` directory.\n * When `role` is omitted or `'*'`, resets all roles.\n * Returns a list of paths that were removed.\n */\nexport function resetProjectAgentIdentity(role?: string, projectRoot?: string): string[] {\n const removed: string[] = [];\n if (!role || role === '*') {\n const dir = agentsDir(projectRoot);\n if (existsSync(dir)) {\n rmSync(dir, { recursive: true, force: true });\n removed.push(dir);\n }\n return removed;\n }\n const dir = roleDir(role, projectRoot);\n if (existsSync(dir)) {\n rmSync(dir, { recursive: true, force: true });\n removed.push(dir);\n }\n return removed;\n}\n\n/**\n * Improve (or refresh) the project-custom identity for a given role\n * by clearing the learned.md and identity.md and re-scaffolding empty\n * templates. This is the explicit \"refresh\" trigger a user can call\n * when they want the project agent to re-learn from scratch.\n *\n * Returns a status report string.\n */\nexport function refreshProjectAgentIdentity(role: string, projectRoot?: string): string {\n const dir = roleDir(role, projectRoot);\n mkdirSync(dir, { recursive: true });\n\n for (const file of ['learned.md', 'identity.md', 'consolidated.md', 'consolidation.json']) {\n const fp = path.join(dir, file);\n try {\n rmSync(fp, { force: true });\n } catch {\n // file didn't exist\n }\n }\n\n writeTextAtomically(\n path.join(dir, 'learned.md'),\n renderLearnedInstructions(role, [], new Date().toISOString()),\n );\n writeTextAtomically(\n path.join(dir, 'identity.md'),\n `# Project identity for ${role}\\n\\n<!-- Describe how this agent should behave in the context of this project. -->\\n`,\n );\n\n return `Project identity for role \"${role}\" has been refreshed. The identity.md and learned.md files are reset to empty templates. Run an agent-improve pass to populate them with project-specific knowledge.`;\n}\n\n/**\n * List every role that has any project-level agent customization or policy.\n */\nexport function listProjectAgentRoles(projectRoot?: string): string[] {\n const dir = agentsDir(projectRoot);\n try {\n return readdirSync(dir).filter((name: string) => {\n if (!isProjectAgentRoleName(name)) return false;\n const sub = path.join(dir, name);\n try {\n return [\n 'learned.md',\n 'identity.md',\n 'config.json',\n 'knowledge.json',\n 'learning.json',\n 'profile.json',\n 'consolidated.md',\n 'consolidation.json',\n ].some((file) => existsSync(path.join(sub, file)));\n } catch {\n return false;\n }\n });\n } catch {\n return [];\n }\n}\n", "import { type AgentDefinition, LIGHT_BUDGET, MEDIUM_BUDGET, TOOLS } from './types.js';\nimport { agentPrompt } from './agent-prompts.js';\n\n/** Phase 1 \u00B7 Discovery \u2014 map the territory before any work begins. */\nexport const DISCOVERY_AGENTS: AgentDefinition[] = [\n {\n config: {\n id: 'explore',\n name: 'Explore',\n role: 'explore',\n tools: [...TOOLS.read],\n prompt: agentPrompt('explore'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'discovery',\n summary: 'Maps unfamiliar codebases: entry points, structure, architecture, feature flow (read-only).',\n keywords: [\n 'explore',\n 'map',\n 'understand',\n 'where is',\n 'how does',\n 'codebase',\n 'architecture',\n 'structure',\n 'overview',\n 'find file',\n 'entry point',\n 'orient',\n ],\n },\n },\n {\n config: {\n id: 'search',\n name: 'Search',\n role: 'search',\n tools: [...TOOLS.read],\n prompt: agentPrompt('search'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'discovery',\n summary: 'Semantic + lexical code search across repos; finds definitions, references, duplicates, ranks by relevance.',\n keywords: [\n 'search',\n 'find all',\n 'references',\n 'usages',\n 'call sites',\n 'grep',\n 'locate symbol',\n 'duplicate',\n 'where used',\n 'occurrences',\n 'cross-repo',\n ],\n },\n },\n {\n config: {\n id: 'research',\n name: 'Research',\n role: 'research',\n tools: [...TOOLS.research],\n prompt: agentPrompt('research'),\n },\n budget: LIGHT_BUDGET,\n capability: {\n phase: 'discovery',\n summary: 'Technical research and feasibility: compares libraries/approaches, recommends a path with evidence and tradeoffs.',\n keywords: [\n 'research',\n 'feasibility',\n 'compare libraries',\n 'which library',\n 'best practice',\n 'tradeoff',\n 'investigate',\n 'evaluate approach',\n 'should we use',\n 'pros and cons',\n ],\n },\n },\n];\n", "import { type AgentDefinition, HEAVY_BUDGET, LIGHT_BUDGET, TOOLS } from './types.js';\nimport { agentPrompt } from './agent-prompts.js';\n\nconst PLAN_TOOLS = [...TOOLS.read, 'plan', 'todo'];\n\n/** Phase 2 \u00B7 Planning \u2014 turn intent into requirements, plans, and architecture. */\nexport const PLANNING_AGENTS: AgentDefinition[] = [\n {\n config: {\n id: 'analyst',\n name: 'Analyst',\n role: 'analyst',\n tools: [...PLAN_TOOLS],\n prompt: agentPrompt('analyst'),\n },\n budget: LIGHT_BUDGET,\n capability: {\n phase: 'planning',\n summary: 'Requirement analysis: turns vague requests into testable specs with acceptance criteria and open questions.',\n keywords: [\n 'requirements',\n 'analyze requirement',\n 'acceptance criteria',\n 'spec',\n 'specification',\n 'clarify',\n 'scope',\n 'user story',\n 'what should it do',\n ],\n },\n },\n {\n config: {\n id: 'planner',\n name: 'Planner',\n role: 'planner',\n tools: [...PLAN_TOOLS],\n prompt: agentPrompt('planner'),\n },\n budget: LIGHT_BUDGET,\n capability: {\n phase: 'planning',\n summary: 'Execution planning: decomposes a goal into ordered, dependency-aware, parallelizable steps with checkpoints.',\n keywords: [\n 'plan',\n 'execution plan',\n 'break down',\n 'decompose',\n 'steps',\n 'sequence',\n 'roadmap',\n 'task breakdown',\n 'order of work',\n 'milestones',\n ],\n },\n },\n {\n config: {\n id: 'architect',\n name: 'Architect',\n role: 'architect',\n tools: [...PLAN_TOOLS],\n prompt: agentPrompt('architect'),\n },\n budget: LIGHT_BUDGET,\n capability: {\n phase: 'planning',\n summary: 'System architecture: designs module boundaries, interfaces, data flow, and records key decisions.',\n keywords: [\n 'architecture',\n 'design system',\n 'module boundaries',\n 'interfaces',\n 'data flow',\n 'component design',\n 'system design',\n 'decision record',\n 'adr',\n 'structure the',\n ],\n },\n },\n {\n config: {\n id: 'critic',\n name: 'Critic',\n role: 'critic',\n tools: [...TOOLS.read],\n prompt: agentPrompt('critic'),\n },\n budget: LIGHT_BUDGET,\n capability: {\n phase: 'planning',\n summary: 'Adversarial review of plans/designs: finds gaps, risks, and unstated assumptions with ranked fixes.',\n keywords: [\n 'critique',\n 'review plan',\n 'review design',\n 'red team',\n 'poke holes',\n 'risks',\n 'what could go wrong',\n 'second opinion',\n 'challenge',\n 'flaws',\n ],\n },\n },\n {\n config: {\n id: 'refactor-planner',\n name: 'Refactor Planner',\n role: 'refactor-planner',\n tools: [...PLAN_TOOLS, 'diff'],\n prompt: agentPrompt('refactor-planner'),\n },\n budget: HEAVY_BUDGET,\n capability: {\n phase: 'planning',\n summary: 'Refactoring planner: analyzes code structure, maps dependencies, produces risk-scored phased plans with rollback strategy.',\n keywords: [\n 'refactor',\n 'refactoring',\n 'restructure',\n 'debt',\n 'technical debt',\n 'clean up',\n 'modularize',\n 'decouple',\n 'dependency graph',\n 'code structure',\n ],\n },\n },\n];\n", "import { type AgentDefinition, HEAVY_BUDGET, MEDIUM_BUDGET, TOOLS } from './types.js';\nimport { agentPrompt } from './agent-prompts.js';\n\n/** Phase 3 \u00B7 Build \u2014 write, refactor, migrate, and fix code. */\nexport const BUILD_AGENTS: AgentDefinition[] = [\n {\n config: {\n id: 'executor',\n name: 'Executor',\n role: 'executor',\n tools: [...TOOLS.build],\n prompt: agentPrompt('executor'),\n },\n budget: HEAVY_BUDGET,\n capability: {\n phase: 'build',\n summary: 'Implements well-specified tasks: writes code, runs checks, leaves the tree green.',\n keywords: [\n 'implement',\n 'build',\n 'write code',\n 'add feature',\n 'create',\n 'code up',\n 'develop',\n 'apply change',\n 'make it work',\n ],\n },\n },\n {\n config: {\n id: 'refactor',\n name: 'Refactor',\n role: 'refactor',\n tools: [...TOOLS.build],\n prompt: agentPrompt('refactor'),\n },\n budget: HEAVY_BUDGET,\n capability: {\n phase: 'build',\n summary: 'Structural refactoring: extract/split/move/rename/decouple without changing observable behavior.',\n keywords: [\n 'refactor',\n 'restructure',\n 'extract',\n 'split module',\n 'decouple',\n 'rename',\n 'move code',\n 'break dependency',\n 'reorganize',\n ],\n },\n },\n {\n config: {\n id: 'simplifier',\n name: 'Simplifier',\n role: 'simplifier',\n tools: [...TOOLS.build],\n prompt: agentPrompt('simplifier'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'build',\n summary: 'Reduces complexity: deletes dead code, collapses needless abstractions, shortens and clarifies code.',\n keywords: [\n 'simplify',\n 'dead code',\n 'remove unused',\n 'reduce complexity',\n 'clean up',\n 'denest',\n 'shorten',\n 'over-engineered',\n 'too complex',\n ],\n },\n },\n {\n config: {\n id: 'migration',\n name: 'Migration',\n role: 'migration',\n tools: [...TOOLS.build, 'install', 'outdated'],\n prompt: agentPrompt('migration'),\n },\n budget: HEAVY_BUDGET,\n capability: {\n phase: 'build',\n summary: 'Framework/language/version upgrades: applies codemods across call sites, staged and verified.',\n keywords: [\n 'migrate',\n 'upgrade',\n 'codemod',\n 'breaking change',\n 'major version',\n 'port to',\n 'convert to',\n 'esm',\n 'modernize',\n ],\n },\n },\n {\n config: {\n id: 'vision',\n name: 'Vision',\n role: 'vision',\n tools: [...TOOLS.write, 'fetch'],\n prompt: agentPrompt('vision'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'build',\n summary: 'Screenshot/mockup \u2192 UI code: infers component tree and generates matching, accessible markup.',\n keywords: [\n 'screenshot',\n 'mockup',\n 'design to code',\n 'image to ui',\n 'figma',\n 'replicate this ui',\n 'from this picture',\n 'vision',\n 'clone ui',\n ],\n },\n },\n {\n config: {\n id: 'debugger',\n name: 'Debugger',\n role: 'debugger',\n tools: [...TOOLS.build, 'logs'],\n prompt: agentPrompt('debugger'),\n },\n budget: HEAVY_BUDGET,\n capability: {\n phase: 'build',\n summary: 'Root-cause bug fixing: reproduces, bisects to the true cause, applies a minimal fix with a regression test.',\n keywords: [\n 'bug',\n 'fix',\n 'debug',\n 'broken',\n 'error',\n 'crash',\n 'root cause',\n 'not working',\n 'failing',\n 'reproduce',\n 'why does',\n ],\n },\n },\n {\n config: {\n id: 'tracer',\n name: 'Tracer',\n role: 'tracer',\n tools: [...TOOLS.build, 'logs'],\n prompt: agentPrompt('tracer'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'build',\n summary: 'Runtime tracing: instruments and runs code to observe call order, values, and timing, then cleans up.',\n keywords: [\n 'trace',\n 'runtime',\n 'instrument',\n 'execution path',\n 'what happens at runtime',\n 'call order',\n 'profile execution',\n 'observe behavior',\n 'stack trace',\n ],\n },\n },\n];\n", "import { agentPrompt } from './agent-prompts.js';\nimport type { BundledAgentSkill } from './role-skills.js';\nimport {\n type AgentDefinition,\n type RoleDispatcherSignal,\n HEAVY_BUDGET,\n MEDIUM_BUDGET,\n TOOLS,\n} from './types.js';\n\n\nconst skillSet = (...names: BundledAgentSkill[]): BundledAgentSkill[] => names;\n\nvoid skillSet;\n\n/**\n * Wave 1: Platform and systems engineering.\n *\n * Six new specialist roles sit alongside the existing build/domain/verify\n * phases. Each carries an explicit `RoleDispatcherSignal` so the dispatcher\n * can tell it apart from siblings that share vocabulary.\n */\n\nconst ANDROID_META = {\n rationale:\n 'Android platform specialist: Kotlin, Jetpack Compose, Android SDK and Play Store delivery. Mirrors the iOS role on the Android side of the mobile fence.',\n signals: [\n 'android',\n 'kotlin',\n 'jetpack compose',\n 'compose',\n 'android sdk',\n 'gradle',\n 'play store',\n 'aosp',\n ] as const,\n differentiatesFrom:\n 'frontend builds cross-platform UI; android owns the Android-specific lifecycle, framework and platform APIs.',\n} satisfies RoleDispatcherSignal;\n\nconst DESKTOP_META = {\n rationale:\n 'Desktop application specialist: Electron, Tauri, native packaging, IPC and OS integration. Owns the process/IPC boundary that web-only roles ignore.',\n signals: [\n 'desktop',\n 'electron',\n 'tauri',\n 'ipc',\n 'tray',\n 'native packaging',\n 'sandbox',\n 'os integration',\n ] as const,\n differentiatesFrom:\n 'frontend assumes a single browser tab; desktop owns the multi-process / IPC / OS-level boundaries.',\n} satisfies RoleDispatcherSignal;\n\nconst REALTIME_META = {\n rationale:\n 'Realtime transport specialist: WebSocket, SSE, presence, heartbeat, reconnect and backpressure. Owns long-lived connection state and lifecycle.',\n signals: [\n 'realtime',\n 'websocket',\n 'sse',\n 'server-sent events',\n 'presence',\n 'heartbeat',\n 'backpressure',\n 'reconnect',\n ] as const,\n differentiatesFrom:\n 'api designs request/response contracts; realtime designs long-lived connections and presence semantics.',\n} satisfies RoleDispatcherSignal;\n\nconst DISTRIBUTED_SYSTEMS_META = {\n rationale:\n 'Distributed-systems engineer: consistency, partitioning, idempotency, saga and distributed coordination. Implementation-level specialist; architect designs the surface, distributed-systems implements the failure semantics.',\n signals: [\n 'distributed systems',\n 'consensus',\n 'saga',\n 'idempotency',\n 'partition',\n 'eventual consistency',\n 'leader election',\n 'replication',\n ] as const,\n differentiatesFrom:\n 'architect designs the system surface; distributed-systems implements the failure semantics and coordination protocols.',\n} satisfies RoleDispatcherSignal;\n\nconst CONCURRENCY_META = {\n rationale:\n 'Concurrency engineer: race conditions, locks, worker pools, async lifecycle and shared-state safety. Focused practitioner; debugger diagnoses, concurrency designs.',\n signals: [\n 'concurrency',\n 'race condition',\n 'deadlock',\n 'worker pool',\n 'lock',\n 'mutex',\n 'async lifecycle',\n 'shared state',\n ] as const,\n differentiatesFrom:\n 'debugger diagnoses concurrency incidents; concurrency designs shared-state systems to avoid them in the first place.',\n} satisfies RoleDispatcherSignal;\n\nconst PLATFORM_ENGINEER_META = {\n rationale:\n 'Platform engineer: monorepo, build graph, internal tooling and developer experience. The \"DX half\" of CI/CD, separate from devops which owns deployment.',\n signals: [\n 'platform',\n 'monorepo',\n 'build graph',\n 'developer experience',\n 'developer tooling',\n 'scaffolding',\n 'workspace',\n ] as const,\n differentiatesFrom:\n 'devops owns deploy/operate; platform-engineer owns the internal developer surface that ships the code.',\n} satisfies RoleDispatcherSignal;\n\nexport const WAVE1_AGENTS: AgentDefinition[] = [\n {\n config: {\n id: 'android',\n name: 'Android',\n role: 'android',\n tools: [...TOOLS.build, 'fetch'],\n prompt: agentPrompt('android'),\n },\n budget: HEAVY_BUDGET,\n capability: {\n phase: 'domain',\n summary:\n 'Android platform specialist: Kotlin, Jetpack Compose, Android SDK, lifecycle and Play Store delivery.',\n keywords: [\n ...ANDROID_META.signals,\n 'android',\n 'kotlin',\n 'compose',\n 'gradle',\n 'playstore',\n ],\n },\n },\n {\n config: {\n id: 'desktop',\n name: 'Desktop',\n role: 'desktop',\n tools: [...TOOLS.build, 'fetch'],\n prompt: agentPrompt('desktop'),\n },\n budget: HEAVY_BUDGET,\n capability: {\n phase: 'domain',\n summary:\n 'Desktop application specialist: Electron or Tauri, native packaging, IPC and OS integration.',\n keywords: [\n ...DESKTOP_META.signals,\n 'desktop',\n 'electron',\n 'tauri',\n 'ipc',\n 'tray',\n ],\n },\n },\n {\n config: {\n id: 'realtime',\n name: 'Realtime',\n role: 'realtime',\n tools: [...TOOLS.build, 'logs'],\n prompt: agentPrompt('realtime'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'verify',\n summary:\n 'Realtime transport specialist: WebSocket, SSE, presence, heartbeat, reconnect and backpressure.',\n keywords: [\n ...REALTIME_META.signals,\n 'realtime',\n 'websocket',\n 'sse',\n 'presence',\n 'heartbeat',\n 'reconnect',\n ],\n },\n },\n {\n config: {\n id: 'distributed-systems',\n name: 'Distributed Systems',\n role: 'distributed-systems',\n tools: [...TOOLS.inspect, 'plan', 'test'],\n prompt: agentPrompt('distributed-systems'),\n },\n budget: HEAVY_BUDGET,\n capability: {\n phase: 'domain',\n summary:\n 'Distributed-systems engineer: consistency, partitioning, idempotency, saga and coordination at the implementation level.',\n keywords: [\n ...DISTRIBUTED_SYSTEMS_META.signals,\n 'distributed-systems',\n 'consensus',\n 'saga',\n 'idempotency',\n 'partition',\n 'leader-election',\n ],\n },\n },\n {\n config: {\n id: 'concurrency',\n name: 'Concurrency',\n role: 'concurrency',\n tools: [...TOOLS.build, 'logs'],\n prompt: agentPrompt('concurrency'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'build',\n summary:\n 'Concurrency engineer: race conditions, locks, worker pools, async lifecycle and shared-state safety.',\n keywords: [\n ...CONCURRENCY_META.signals,\n 'concurrency',\n 'race',\n 'deadlock',\n 'worker-pool',\n 'lock',\n ],\n },\n },\n {\n config: {\n id: 'platform-engineer',\n name: 'Platform Engineer',\n role: 'platform-engineer',\n tools: [...TOOLS.build, 'install', 'git', 'node-modern'],\n prompt: agentPrompt('platform-engineer'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'delivery',\n summary:\n 'Platform engineer: monorepo, build graph, internal tooling and developer experience.',\n keywords: [\n ...PLATFORM_ENGINEER_META.signals,\n 'platform',\n 'monorepo',\n 'build-graph',\n 'dx',\n 'scaffolding',\n 'workspace',\n ],\n },\n },\n];\n\nexport const WAVE1_ROLE_METAS: Record<string, RoleDispatcherSignal> = {\n android: ANDROID_META,\n desktop: DESKTOP_META,\n realtime: REALTIME_META,\n 'distributed-systems': DISTRIBUTED_SYSTEMS_META,\n concurrency: CONCURRENCY_META,\n 'platform-engineer': PLATFORM_ENGINEER_META,\n};\n\nexport const WAVE1_ROLES = new Set<string>(Object.keys(WAVE1_ROLE_METAS));\n", "import { agentPrompt } from './agent-prompts.js';\nimport type { BundledAgentSkill } from './role-skills.js';\nimport {\n type AgentDefinition,\n type RoleDispatcherSignal,\n LIGHT_BUDGET,\n MEDIUM_BUDGET,\n TOOLS,\n} from './types.js';\n\nconst skillSet = (...names: BundledAgentSkill[]): BundledAgentSkill[] => names;\n\n/**\n * Wave 2: Security, resilience, governance and agent platform.\n *\n * These roles extend the existing 51-role phase catalog with focused\n * specialists. Each role carries an `agentMeta` block so the dispatcher\n * can distinguish it from siblings via an explicit rationale and signal\n * list. The legacy `keywords` array is kept for backward compatibility\n * with the heuristic dispatcher.\n */\n\nconst THREAT_MODELER_META = {\n rationale:\n 'Models trust boundaries, abuse cases and data flow before code is written; threat-modeler is the pre-implementation counterpart to security-reviewer.',\n signals: [\n 'threat model',\n 'trust boundary',\n 'abuse case',\n 'attack tree',\n 'data flow diagram',\n 'stride',\n 'asset',\n 'adversary',\n ] as const,\n differentiatesFrom:\n 'security-reviewer finds defects in code; threat-modeler designs the threat surface before code exists.',\n};\n\nconst SECURE_CODING_COACH_META = {\n rationale:\n 'Teaches secure patterns, produces safe defaults and walks engineers through fixes; secure-coding-coach is the counterpart to security-scanner that drives adoption.',\n signals: [\n 'secure coding',\n 'secure default',\n 'hardening',\n 'security example',\n 'security review',\n 'security fix',\n 'defensive',\n 'owasp',\n ] as const,\n differentiatesFrom:\n 'security-scanner detects issues; secure-coding-coach produces prescriptive safe-by-default code and guidance.',\n};\n\nconst RESILIENCE_ENGINEER_META = {\n rationale:\n 'Designs retry, timeout, circuit breaker and graceful-degradation patterns; resilience-engineer is the protective counterpart to chaos.',\n signals: [\n 'retry',\n 'timeout',\n 'circuit breaker',\n 'bulkhead',\n 'graceful degradation',\n 'backoff',\n 'resilience',\n 'fault tolerance',\n ] as const,\n differentiatesFrom:\n 'chaos injects faults to test existing code; resilience-engineer designs the protective mechanisms ahead of time.',\n};\n\nconst CHAOS_ENGINEER_META = {\n rationale:\n 'Builds the controlled fault-injection harness and blast-radius discipline; chaos-engineer is the operator counterpart to the chaos reviewer.',\n signals: [\n 'chaos experiment',\n 'fault injection',\n 'blast radius',\n 'gameday',\n 'steady state',\n 'hypothesis',\n 'explosion radius',\n ] as const,\n differentiatesFrom:\n 'chaos verifies fault behavior; chaos-engineer designs the experiments and runs them safely.',\n};\n\nconst COMPLIANCE_AUDITOR_META = {\n rationale:\n 'Produces auditable control evidence, traceability and evidence maps; compliance-auditor is the documenter counterpart to compliance.',\n signals: [\n 'audit',\n 'control evidence',\n 'evidence map',\n 'soc2',\n 'iso 27001',\n 'attestation',\n 'auditable',\n 'remediation tracking',\n ] as const,\n differentiatesFrom:\n 'compliance reviews the design; compliance-auditor produces traceable evidence for an external audit.',\n};\n\nconst PRIVACY_ENGINEER_META = {\n rationale:\n 'Implements data minimization, consent, retention and deletion; privacy-engineer is the implementation counterpart to compliance.',\n signals: [\n 'privacy',\n 'pii',\n 'consent',\n 'retention',\n 'deletion',\n 'data minimization',\n 'lawful basis',\n 'gdpr',\n ] as const,\n differentiatesFrom:\n 'compliance audits controls; privacy-engineer implements privacy-by-design in code and pipelines.',\n};\n\nconst PLUGIN_AUTHOR_META = {\n rationale:\n 'Builds, packages and ships runnable WrongStack plugins; plugin-author is the production counterpart to skill-manage.',\n signals: [\n 'plugin',\n 'plugin api',\n 'lifecycle',\n 'health',\n 'teardown',\n 'packaging',\n 'distribution',\n ] as const,\n differentiatesFrom:\n 'skill-manage authors skills; plugin-author authors full lifecycle plugins with health and teardown.',\n};\n\nconst TOOL_AUTHOR_META = {\n rationale:\n 'Designs tool schemas, capability declarations and error contracts; tool-author is the narrow, security-focused counterpart to plugin-author.',\n signals: [\n 'tool',\n 'tool schema',\n 'capability',\n 'permission',\n 'tool contract',\n 'tool error',\n 'tool lifecycle',\n ] as const,\n differentiatesFrom:\n 'plugin-author writes full plugin lifecycle; tool-author focuses on a single tool contract and capability set.',\n};\n\nconst PROMPT_EVALUATOR_META = {\n rationale:\n 'Builds rubrics and runs adversarial / regression tests on prompts; prompt-evaluator is the independent measurement counterpart to prompt.',\n signals: [\n 'prompt eval',\n 'prompt regression',\n 'rubric',\n 'adversarial prompt',\n 'prompt benchmark',\n 'judge prompt',\n 'eval suite',\n ] as const,\n differentiatesFrom:\n 'prompt authors prompts; prompt-evaluator independently measures them with rubrics and adversarial inputs.',\n};\n\nconst BENCHMARK_ENGINEER_META = {\n rationale:\n 'Designs reproducible benchmarks and methodology for comparing models and agent setups; benchmark-engineer is the measurement-infrastructure counterpart to performance.',\n signals: [\n 'benchmark',\n 'reproducible',\n 'evaluation harness',\n 'regression suite',\n 'metric methodology',\n 'baseline',\n 'deterministic run',\n ] as const,\n differentiatesFrom:\n 'performance optimizes product code; benchmark-engineer builds the measurement infrastructure that supports comparison.',\n};\n\nconst MEMORY_CURATOR_META = {\n rationale:\n 'Validates, merges and de-duplicates long-term memory entries with audience scope; memory-curator is the quality counterpart to context.',\n signals: [\n 'memory',\n 'curate',\n 'memory audit',\n 'memory merge',\n 'memory expiry',\n 'audience scope',\n 'memory recall quality',\n ] as const,\n differentiatesFrom:\n 'context manages the active context window; memory-curator curates the long-term memory store for accuracy.',\n};\n\nconst FLEET_COORDINATOR_META = {\n rationale:\n 'Owns job partitioning, capacity and result synthesis across many workers; fleet-coordinator is the multi-agent execution counterpart to planner.',\n signals: [\n 'fleet',\n 'fan out',\n 'parallel agents',\n 'synthesis',\n 'subagent capacity',\n 'coordinator',\n 'result aggregation',\n ] as const,\n differentiatesFrom:\n 'planner designs ordered steps for one worker; fleet-coordinator runs many workers in parallel and merges their results.',\n};\n\nexport const WAVE2_AGENTS: AgentDefinition[] = [\n {\n config: {\n id: 'threat-modeler',\n name: 'Threat Modeler',\n role: 'threat-modeler',\n tools: [...TOOLS.read, 'write', 'document'],\n prompt: agentPrompt('threat-modeler'),\n },\n budget: LIGHT_BUDGET,\n capability: {\n phase: 'review',\n summary:\n 'Models trust boundaries, abuse cases and data flow before code is written; produces a threat model with attack trees.',\n keywords: [\n ...THREAT_MODELER_META.signals,\n 'threat-modeler',\n 'trust',\n 'boundary',\n 'abuse',\n 'attack',\n 'stride',\n 'asset',\n 'adversary',\n ],\n },\n },\n {\n config: {\n id: 'secure-coding-coach',\n name: 'Secure Coding Coach',\n role: 'secure-coding-coach',\n tools: [...TOOLS.read],\n prompt: agentPrompt('secure-coding-coach'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'review',\n summary:\n 'Teaches secure patterns, produces safe defaults and walks engineers through prescriptive fixes.',\n keywords: [\n ...SECURE_CODING_COACH_META.signals,\n 'secure-coding',\n 'security-coach',\n 'hardening',\n 'safe-default',\n 'owasp',\n ],\n },\n },\n {\n config: {\n id: 'resilience-engineer',\n name: 'Resilience Engineer',\n role: 'resilience-engineer',\n tools: [...TOOLS.build, 'logs', 'observability'],\n // uniqueness guaranteed by 'observability' vs chaos-engineer's 'test'\n prompt: agentPrompt('resilience-engineer'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'verify',\n summary:\n 'Designs retry, timeout, circuit breaker, bulkhead and graceful-degradation patterns ahead of time.',\n keywords: [\n ...RESILIENCE_ENGINEER_META.signals,\n 'resilience',\n 'timeout',\n 'circuit-breaker',\n 'bulkhead',\n 'backoff',\n 'graceful',\n ],\n },\n },\n {\n config: {\n id: 'chaos-engineer',\n name: 'Chaos Engineer',\n role: 'chaos-engineer',\n tools: [...TOOLS.build, 'logs', 'observability'],\n // uniqueness guaranteed by 'observability' vs chaos-engineer's 'test'\n prompt: agentPrompt('chaos-engineer'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'verify',\n summary:\n 'Builds and runs controlled fault-injection experiments with a defined blast radius, steady state and hypothesis.',\n keywords: [\n ...CHAOS_ENGINEER_META.signals,\n 'chaos-engineer',\n 'chaos-experiment',\n 'gameday',\n 'steady-state',\n ],\n },\n },\n {\n config: {\n id: 'compliance-auditor',\n name: 'Compliance Auditor',\n role: 'compliance-auditor',\n tools: [...TOOLS.inspect],\n prompt: agentPrompt('compliance-auditor'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'review',\n summary:\n 'Produces auditable control evidence, traceability and evidence maps for SOC2, ISO and similar frameworks.',\n keywords: [\n ...COMPLIANCE_AUDITOR_META.signals,\n 'compliance-auditor',\n 'soc2',\n 'iso',\n 'evidence-map',\n 'attestation',\n 'auditable',\n ],\n },\n },\n {\n config: {\n id: 'privacy-engineer',\n name: 'Privacy Engineer',\n role: 'privacy-engineer',\n tools: [...TOOLS.build, 'audit'],\n prompt: agentPrompt('privacy-engineer'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'review',\n summary:\n 'Implements data minimization, consent, retention and deletion; privacy-by-design across the stack.',\n keywords: [\n ...PRIVACY_ENGINEER_META.signals,\n 'privacy-engineer',\n 'pii',\n 'gdpr',\n 'consent',\n 'retention',\n 'deletion',\n 'data-minimization',\n ],\n },\n },\n];\n\nexport const WAVE2_ROLE_METAS: Record<string, RoleDispatcherSignal> = {\n 'threat-modeler': THREAT_MODELER_META,\n 'secure-coding-coach': SECURE_CODING_COACH_META,\n 'resilience-engineer': RESILIENCE_ENGINEER_META,\n 'chaos-engineer': CHAOS_ENGINEER_META,\n 'compliance-auditor': COMPLIANCE_AUDITOR_META,\n 'privacy-engineer': PRIVACY_ENGINEER_META,\n 'plugin-author': PLUGIN_AUTHOR_META,\n 'tool-author': TOOL_AUTHOR_META,\n 'prompt-evaluator': PROMPT_EVALUATOR_META,\n 'benchmark-engineer': BENCHMARK_ENGINEER_META,\n 'memory-curator': MEMORY_CURATOR_META,\n 'fleet-coordinator': FLEET_COORDINATOR_META,\n};\n\nexport const WAVE2_ROLES = new Set<string>(Object.keys(WAVE2_ROLE_METAS));\n\nvoid skillSet;\n\n", "import { agentPrompt } from './agent-prompts.js';\nimport { type AgentDefinition, HEAVY_BUDGET, MEDIUM_BUDGET, TOOLS } from './types.js';\n\n/** Phase 4 \u00B7 Verify \u2014 prove the code works under normal, end-to-end, and adverse conditions. */\nexport const VERIFY_AGENTS: AgentDefinition[] = [\n {\n config: {\n id: 'verifier',\n name: 'Verifier',\n role: 'verifier',\n tools: [...TOOLS.inspect, 'bash', 'exec', 'lint', 'typecheck', 'test', 'git'],\n prompt: agentPrompt('verifier'),\n },\n budget: HEAVY_BUDGET,\n capability: {\n phase: 'verify',\n summary:\n 'Independent verification gate: runs the relevant checks until they pass or returns exact failures that need another implementation pass.',\n keywords: [\n 'verify',\n 'verification',\n 'quality gate',\n 'prove it works',\n 'run checks',\n 'run tests until pass',\n 'test pass',\n 'green build',\n 'typecheck',\n 'lint',\n 'regression check',\n 'acceptance gate',\n ],\n },\n },\n {\n config: {\n id: 'test',\n name: 'Test',\n role: 'test',\n tools: [...TOOLS.build],\n prompt: agentPrompt('test'),\n },\n budget: HEAVY_BUDGET,\n capability: {\n phase: 'verify',\n summary:\n 'Unit + integration testing: writes meaningful tests covering golden path and edge cases, runs the suite.',\n keywords: [\n 'test',\n 'unit test',\n 'integration test',\n 'write tests',\n 'coverage',\n 'test suite',\n 'vitest',\n 'jest',\n 'add tests',\n 'spec',\n ],\n },\n },\n {\n config: {\n id: 'e2e',\n name: 'E2E',\n role: 'e2e',\n tools: [\n ...TOOLS.build,\n 'fetch',\n 'playwright_navigate',\n 'playwright_screenshot',\n 'playwright_click',\n 'playwright_type',\n 'playwright_evaluate',\n 'playwright_select_option',\n 'playwright_hover',\n 'playwright_fill_form',\n 'playwright_wait_for',\n 'playwright_press_key',\n 'playwright_drag',\n ],\n prompt: agentPrompt('e2e'),\n },\n budget: HEAVY_BUDGET,\n capability: {\n phase: 'verify',\n summary:\n 'End-to-end testing: drives full user journeys across UI/CLI/API boundaries with reproducible failures.',\n keywords: [\n 'e2e',\n 'end to end',\n 'end-to-end',\n 'user journey',\n 'smoke test',\n 'playwright',\n 'browser',\n 'screenshot',\n 'web ui',\n 'headless',\n 'cypress',\n 'full flow',\n 'browser test',\n 'acceptance test',\n 'navigate',\n 'click',\n 'form fill',\n 'dom',\n 'page load',\n ],\n },\n },\n {\n config: {\n id: 'browser',\n name: 'Browser',\n role: 'browser',\n tools: [\n ...TOOLS.read,\n 'fetch',\n 'playwright_navigate',\n 'playwright_screenshot',\n 'playwright_click',\n 'playwright_type',\n 'playwright_evaluate',\n 'playwright_select_option',\n 'playwright_hover',\n 'playwright_fill_form',\n 'playwright_wait_for',\n 'playwright_press_key',\n 'playwright_drag',\n ],\n prompt: agentPrompt('browser'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'verify',\n summary:\n 'Browser automation: opens pages, clicks, types, screenshots, extracts data via Playwright headless Chromium.',\n keywords: [\n 'browser',\n 'screenshot',\n 'navigate',\n 'web page',\n 'scrape',\n 'crawl',\n 'headless',\n 'chrome',\n 'open url',\n 'capture',\n 'page title',\n 'extract data',\n 'fill form',\n 'click button',\n 'take screenshot',\n ],\n },\n },\n {\n config: {\n id: 'performance',\n name: 'Performance',\n role: 'performance',\n tools: [...TOOLS.build, 'logs'],\n prompt: agentPrompt('performance'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'verify',\n summary:\n 'Performance analysis: benchmarks/profiles to find the real bottleneck, optimizes, proves speedup with numbers.',\n keywords: [\n 'performance',\n 'slow',\n 'optimize',\n 'bottleneck',\n 'profile',\n 'benchmark',\n 'latency',\n 'throughput',\n 'memory',\n 'speed up',\n 'too slow',\n ],\n },\n },\n {\n config: {\n id: 'chaos',\n name: 'Chaos',\n role: 'chaos',\n tools: [...TOOLS.build, 'logs'],\n prompt: agentPrompt('chaos'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'verify',\n summary:\n 'Resilience testing via fault injection: breaks network/disk/timing to find ungraceful failures and recovery gaps.',\n keywords: [\n 'chaos',\n 'resilience',\n 'fault injection',\n 'failure mode',\n 'fail safe',\n 'retry',\n 'circuit breaker',\n 'graceful degradation',\n 'inject failure',\n 'robustness',\n ],\n },\n },\n {\n config: {\n id: 'security-scanner',\n name: 'Security Scanner',\n role: 'security-scanner',\n tools: [...TOOLS.inspect],\n prompt: agentPrompt('security-scanner'),\n },\n budget: HEAVY_BUDGET,\n capability: {\n phase: 'verify',\n summary:\n 'Security scanner: detects hardcoded secrets, injection vectors, insecure patterns, and supply-chain risks with remediation.',\n keywords: [\n 'security',\n 'scan',\n 'vulnerability',\n 'secret',\n 'api key',\n 'hardcoded',\n 'injection',\n 'cve',\n 'audit dependencies',\n 'supply chain',\n 'xss',\n 'sqli',\n 'shell injection',\n 'sensitive data',\n 'credential',\n ],\n },\n },\n {\n config: {\n id: 'bug-hunter',\n name: 'Bug Hunter',\n role: 'bug-hunter',\n tools: [...TOOLS.inspect],\n prompt: agentPrompt('bug-hunter'),\n },\n budget: HEAVY_BUDGET,\n capability: {\n phase: 'verify',\n summary:\n 'Bug hunter: scans source code for bugs, anti-patterns, and code smells, producing a file:line-ranked hit list with fixes.',\n keywords: [\n 'bug',\n 'hunt',\n 'scan',\n 'code smell',\n 'anti-pattern',\n 'race condition',\n 'memory leak',\n 'null deref',\n 'type safety',\n 'unhandled error',\n 'find bugs',\n 'audit code',\n 'code quality',\n ],\n },\n },\n {\n config: {\n id: 'audit-log',\n name: 'Audit Log',\n role: 'audit-log',\n tools: [...TOOLS.inspect],\n prompt: agentPrompt('audit-log'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'verify',\n summary:\n 'Audit log analyzer: parses session JSONL, detects failure patterns, tool anomalies, and cost trends with structured reports.',\n keywords: [\n 'audit',\n 'log',\n 'logs',\n 'session',\n 'trace',\n 'analyze logs',\n 'error patterns',\n 'cost analysis',\n 'tool usage',\n 'token usage',\n 'post-mortem',\n 'trend',\n 'anomaly',\n ],\n },\n },\n];\n", "import { agentPrompt } from './agent-prompts.js';\nimport { type AgentDefinition, MEDIUM_BUDGET, TOOLS } from './types.js';\n\n/** Phase 5 \u00B7 Review \u2014 read-only quality, security, a11y, and compliance gates. */\nexport const REVIEW_AGENTS: AgentDefinition[] = [\n {\n config: {\n id: 'reviewer',\n name: 'Reviewer',\n role: 'reviewer',\n tools: [...TOOLS.inspect, 'git'],\n prompt: agentPrompt('reviewer'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'review',\n summary:\n \"Independent AI reviewer: audits another agent's output, flags uncertainty, correlated-failure risk, and must-fix defects.\",\n keywords: [\n 'reviewer',\n 'independent review',\n 'ai review',\n 'review agent',\n 'quality review',\n 'second opinion',\n 'check another agent',\n 'cross check',\n 'uncertainty',\n 'correlated error',\n 'verify output',\n 'quality control',\n ],\n },\n },\n {\n config: {\n id: 'code-reviewer',\n name: 'Code Reviewer',\n role: 'code-reviewer',\n tools: [...TOOLS.inspect, 'git'],\n prompt: agentPrompt('code-reviewer'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'review',\n summary:\n 'Correctness-first code review of diffs/PRs: finds bugs, edge cases, and convention violations with fixes.',\n keywords: [\n 'review',\n 'code review',\n 'review pr',\n 'review diff',\n 'look over',\n 'feedback on code',\n 'quality',\n 'is this correct',\n 'check my code',\n ],\n },\n },\n {\n config: {\n id: 'security-reviewer',\n name: 'Security Reviewer',\n role: 'security-reviewer',\n tools: [...TOOLS.inspect, 'git'],\n prompt: agentPrompt('security-reviewer'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'review',\n summary:\n 'Security review: finds injection/authz/secret/crypto issues mapped to OWASP severity with remediation.',\n keywords: [\n 'security review',\n 'security',\n 'vulnerability',\n 'vulnerabilities',\n 'owasp',\n 'injection',\n 'sql injection',\n 'xss',\n 'ssrf',\n 'authz',\n 'secrets',\n 'security audit',\n 'threat',\n 'unsafe',\n ],\n },\n },\n {\n config: {\n id: 'accessibility',\n name: 'Accessibility',\n role: 'accessibility',\n tools: [...TOOLS.read],\n prompt: agentPrompt('accessibility'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'review',\n summary:\n 'WCAG/a11y review of UI: checks semantics, ARIA, keyboard, contrast; maps findings to success criteria.',\n keywords: [\n 'accessibility',\n 'a11y',\n 'wcag',\n 'aria',\n 'screen reader',\n 'keyboard navigation',\n 'contrast',\n 'disabled users',\n 'accessible',\n ],\n },\n },\n {\n config: {\n id: 'compliance',\n name: 'Compliance',\n role: 'compliance',\n tools: [...TOOLS.inspect],\n prompt: agentPrompt('compliance'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'review',\n summary:\n 'License/privacy/regulatory review: audits licenses, PII handling, and controls vs GDPR/SOC2.',\n keywords: [\n 'compliance',\n 'license',\n 'gdpr',\n 'soc2',\n 'privacy',\n 'pii',\n 'data retention',\n 'regulatory',\n 'audit log',\n 'legal review',\n ],\n },\n },\n];\n", "import { type AgentDefinition, HEAVY_BUDGET, MEDIUM_BUDGET, TOOLS } from './types.js';\nimport { agentPrompt } from './agent-prompts.js';\n\n/** Phase 6 \u00B7 Domain \u2014 specialists for the major slices of a system. */\nexport const DOMAIN_AGENTS: AgentDefinition[] = [\n {\n config: {\n id: 'database',\n name: 'Database',\n role: 'database',\n tools: [...TOOLS.build],\n prompt: agentPrompt('database'),\n },\n budget: HEAVY_BUDGET,\n capability: {\n phase: 'domain',\n summary: 'Schema design, query optimization, and safe reversible migrations for SQL databases.',\n keywords: [\n 'database',\n 'schema',\n 'sql',\n 'migration',\n 'query',\n 'index',\n 'postgres',\n 'mysql',\n 'table',\n 'orm',\n 'slow query',\n ],\n },\n },\n {\n config: {\n id: 'api',\n name: 'API',\n role: 'api',\n tools: [...TOOLS.build, 'fetch'],\n prompt: agentPrompt('api'),\n },\n budget: HEAVY_BUDGET,\n capability: {\n phase: 'domain',\n summary: 'REST + GraphQL API design and implementation: contracts, HTTP/GraphQL semantics, versioning.',\n keywords: [\n 'api',\n 'rest',\n 'graphql',\n 'endpoint',\n 'resolver',\n 'http',\n 'openapi',\n 'swagger',\n 'route',\n 'contract',\n 'webhook',\n ],\n },\n },\n {\n config: {\n id: 'auth',\n name: 'Auth',\n role: 'auth',\n tools: [...TOOLS.build],\n prompt: agentPrompt('auth'),\n },\n budget: HEAVY_BUDGET,\n capability: {\n phase: 'domain',\n summary: 'Authentication and authorization: identity, sessions/tokens, RBAC/ABAC, OAuth/OIDC, done securely.',\n keywords: [\n 'auth',\n 'authentication',\n 'authorization',\n 'login',\n 'session',\n 'jwt',\n 'oauth',\n 'oidc',\n 'rbac',\n 'permissions',\n 'token',\n 'sso',\n ],\n },\n },\n {\n config: {\n id: 'data',\n name: 'Data',\n role: 'data',\n tools: [...TOOLS.build],\n prompt: agentPrompt('data'),\n },\n budget: HEAVY_BUDGET,\n capability: {\n phase: 'domain',\n summary: 'Data engineering: ETL/ELT pipelines, data-quality validation, idempotent transforms, reconciliation.',\n keywords: [\n 'etl',\n 'elt',\n 'pipeline',\n 'data quality',\n 'data engineering',\n 'transform',\n 'ingestion',\n 'batch',\n 'stream',\n 'reconcile',\n 'dataset',\n ],\n },\n },\n {\n config: {\n id: 'frontend',\n name: 'Frontend',\n role: 'frontend',\n tools: [...TOOLS.build, 'fetch'],\n prompt: agentPrompt('frontend'),\n },\n budget: HEAVY_BUDGET,\n capability: {\n phase: 'domain',\n summary: 'UI implementation: components, client state, data fetching, responsive and accessible by default.',\n keywords: [\n 'frontend',\n 'component',\n 'react',\n 'vue',\n 'svelte',\n 'client state',\n 'ui implementation',\n 'css',\n 'responsive',\n 'hook',\n 'render',\n ],\n },\n },\n {\n config: {\n id: 'backend',\n name: 'Backend',\n role: 'backend',\n tools: [...TOOLS.build],\n prompt: agentPrompt('backend'),\n },\n budget: HEAVY_BUDGET,\n capability: {\n phase: 'domain',\n summary: 'Server-side logic: services, business rules, persistence/queue wiring, concurrency and transactions.',\n keywords: [\n 'backend',\n 'server',\n 'service',\n 'business logic',\n 'controller',\n 'handler',\n 'queue',\n 'cache',\n 'transaction',\n 'microservice',\n 'server-side',\n ],\n },\n },\n {\n config: {\n id: 'designer',\n name: 'Designer',\n role: 'designer',\n tools: [...TOOLS.docs],\n prompt: agentPrompt('designer'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'domain',\n summary: 'UI/UX design: user flows, layout/wireframes, interaction states, and design-system decisions.',\n keywords: [\n 'design',\n 'ux',\n 'ui design',\n 'wireframe',\n 'user flow',\n 'layout',\n 'design system',\n 'interaction',\n 'mockup design',\n 'information architecture',\n ],\n },\n },\n {\n config: {\n id: 'ios',\n name: 'iOS',\n role: 'ios',\n tools: [...TOOLS.build, 'fetch'],\n prompt: agentPrompt('ios'),\n },\n budget: HEAVY_BUDGET,\n capability: {\n phase: 'domain',\n summary:\n 'Apple-platform app development in Swift against the latest Xcode/iOS-SDK line: SwiftUI, UIKit, SwiftData, concurrency, accessibility, and App Store submission.',\n keywords: [\n 'ios',\n 'iphone',\n 'ipad',\n 'ipados',\n 'watchos',\n 'tvos',\n 'visionos',\n 'macos',\n 'swift',\n 'swiftui',\n 'uikit',\n 'xcode',\n 'swiftdata',\n 'app store',\n 'app intents',\n 'swift package manager',\n 'cocoapods',\n 'foundation models',\n ],\n },\n },\n];\n", "import { type AgentDefinition, LIGHT_BUDGET, MEDIUM_BUDGET, TOOLS } from './types.js';\nimport { agentPrompt } from './agent-prompts.js';\n\n/** Phase 7 \u00B7 Knowledge \u2014 documentation, diagrams, localization, and prompts. */\nexport const KNOWLEDGE_AGENTS: AgentDefinition[] = [\n {\n config: {\n id: 'document',\n name: 'Document',\n role: 'document',\n tools: [...TOOLS.docs],\n prompt: agentPrompt('document'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'knowledge',\n summary: 'Technical documentation: READMEs, API/reference docs, guides, and verified examples grounded in code.',\n keywords: [\n 'document',\n 'documentation',\n 'readme',\n 'docs',\n 'write up',\n 'guide',\n 'api docs',\n 'explain in writing',\n 'reference',\n 'changelog notes',\n ],\n },\n },\n {\n config: {\n id: 'uml',\n name: 'UML',\n role: 'uml',\n tools: [...TOOLS.read, 'write', 'edit'],\n prompt: agentPrompt('uml'),\n },\n budget: LIGHT_BUDGET,\n capability: {\n phase: 'knowledge',\n summary: 'Diagram generation from code: class/sequence/component/ER diagrams as Mermaid/PlantUML.',\n keywords: [\n 'uml',\n 'diagram',\n 'mermaid',\n 'plantuml',\n 'sequence diagram',\n 'class diagram',\n 'er diagram',\n 'visualize',\n 'flowchart',\n 'architecture diagram',\n ],\n },\n },\n {\n config: {\n id: 'i18n',\n name: 'I18n',\n role: 'i18n',\n tools: [...TOOLS.write],\n prompt: agentPrompt('i18n'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'knowledge',\n summary: 'Internationalization/localization: string extraction, catalog management, plurals/RTL/format handling.',\n keywords: [\n 'i18n',\n 'internationalization',\n 'localization',\n 'l10n',\n 'translation',\n 'translate ui',\n 'locale',\n 'rtl',\n 'message catalog',\n 'multilingual',\n ],\n },\n },\n {\n config: {\n id: 'prompt',\n name: 'Prompt',\n role: 'prompt',\n tools: [...TOOLS.write],\n prompt: agentPrompt('prompt'),\n },\n budget: LIGHT_BUDGET,\n capability: {\n phase: 'knowledge',\n summary: 'Prompt engineering: designs/refines/evaluates LLM system prompts and agent instructions.',\n keywords: [\n 'prompt',\n 'prompt engineering',\n 'system prompt',\n 'llm instructions',\n 'few-shot',\n 'refine prompt',\n 'agent instructions',\n 'prompt template',\n ],\n },\n },\n];\n", "import { type AgentDefinition, MEDIUM_BUDGET, TOOLS } from './types.js';\nimport { agentPrompt } from './agent-prompts.js';\n\n/** Phase 8 \u00B7 Delivery & Ops \u2014 ship it, run it, keep it healthy. */\nexport const DELIVERY_AGENTS: AgentDefinition[] = [\n {\n config: {\n id: 'git',\n name: 'Git',\n role: 'git',\n tools: [...TOOLS.vcs, 'bash'],\n prompt: agentPrompt('git'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'delivery',\n summary: 'Git automation: focused commits, branch/rebase/conflict handling, PR prep, history investigation.',\n keywords: [\n 'git',\n 'commit',\n 'branch',\n 'rebase',\n 'merge',\n 'pull request',\n 'pr',\n 'conflict',\n 'blame',\n 'bisect',\n 'cherry-pick',\n 'stash',\n ],\n },\n },\n {\n config: {\n id: 'release',\n name: 'Release',\n role: 'release',\n tools: [...TOOLS.vcs, 'bash', 'json'],\n prompt: agentPrompt('release'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'delivery',\n summary: 'Release management: semver bumps, changelogs, and release notes derived from real history.',\n keywords: [\n 'release',\n 'version',\n 'semver',\n 'changelog',\n 'release notes',\n 'tag',\n 'bump version',\n 'publish',\n 'versioning',\n ],\n },\n },\n {\n config: {\n id: 'devops',\n name: 'DevOps',\n role: 'devops',\n tools: [\n ...TOOLS.build,\n 'mcp__ssh__ssh_list_servers',\n 'mcp__ssh__ssh_connection_status',\n 'mcp__ssh__ssh_execute',\n 'mcp__ssh__ssh_execute_sudo',\n 'mcp__ssh__ssh_upload',\n 'mcp__ssh__ssh_download',\n 'mcp__ssh__ssh_sync',\n 'mcp__ssh__ssh_deploy',\n 'mcp__ssh__ssh_health_check',\n 'mcp__ssh__ssh_service_status',\n 'mcp__ssh__ssh_process_manager',\n 'mcp__ssh__ssh_tunnel',\n 'mcp__ssh__ssh_backup_create',\n 'mcp__ssh__ssh_backup_list',\n 'mcp__ssh__ssh_backup_restore',\n 'mcp__ssh__ssh_db_list',\n 'mcp__ssh__ssh_db_query',\n 'mcp__ssh__ssh_profile',\n ],\n prompt: agentPrompt('devops'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'delivery',\n summary: 'CI/CD, containerization, and deployment config: reproducible builds and safe deploys with rollback.',\n keywords: [\n 'devops',\n 'ci',\n 'cd',\n 'ci/cd',\n 'pipeline',\n 'docker',\n 'dockerfile',\n 'kubernetes',\n 'k8s',\n 'deploy',\n 'ssh',\n 'remote ssh',\n 'remote server',\n 'sftp',\n 'tunnel',\n 'bastion',\n 'jump host',\n 'github actions',\n 'container',\n ],\n },\n },\n {\n config: {\n id: 'observability',\n name: 'Observability',\n role: 'observability',\n tools: [...TOOLS.build, 'logs'],\n prompt: agentPrompt('observability'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'delivery',\n summary: 'Observability: structured logging, metrics, distributed tracing, and alerts/dashboards.',\n keywords: [\n 'observability',\n 'logging',\n 'metrics',\n 'tracing',\n 'telemetry',\n 'opentelemetry',\n 'otel',\n 'prometheus',\n 'monitoring',\n 'alert',\n 'dashboard',\n 'instrument',\n ],\n },\n },\n {\n config: {\n id: 'dependency',\n name: 'Dependency',\n role: 'dependency',\n tools: [...TOOLS.deps, 'bash'],\n prompt: agentPrompt('dependency'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'delivery',\n summary: 'Package management + supply-chain safety: CVE audit, safe upgrades, pruning, install-script review.',\n keywords: [\n 'dependency',\n 'dependencies',\n 'package',\n 'npm',\n 'pnpm',\n 'cve',\n 'vulnerability scan',\n 'upgrade deps',\n 'audit',\n 'supply chain',\n 'outdated',\n 'lockfile',\n ],\n },\n },\n];\n", "import { agentPrompt } from './agent-prompts.js';\nimport type { BundledAgentSkill } from './role-skills.js';\nimport {\n type AgentDefinition,\n type RoleDispatcherSignal,\n HEAVY_BUDGET,\n MEDIUM_BUDGET,\n TOOLS,\n} from './types.js';\n\nconst skillSet = (...names: BundledAgentSkill[]): BundledAgentSkill[] => names;\n\n/**\n * Wave 3: Product and data specialists.\n *\n * Six roles that own areas the existing 51-role catalog only touches\n * generically. Each carries an explicit `RoleDispatcherSignal` so the\n * dispatcher can disambiguate from close siblings.\n */\n\nconst PAYMENTS_META = {\n rationale:\n 'Payments specialist: ledger, refund, webhook, idempotency, reconciliation. Financial correctness is too domain-specific to leave to a general backend role.',\n signals: [\n 'payments',\n 'ledger',\n 'refund',\n 'webhook',\n 'idempotency',\n 'reconciliation',\n 'pci',\n 'currency',\n ] as const,\n differentiatesFrom:\n 'backend builds services; payments owns the financial-correctness invariants and money-handling patterns.',\n} satisfies RoleDispatcherSignal;\n\nconst MESSAGING_META = {\n rationale:\n 'Messaging infrastructure specialist: queue, pub/sub, delivery semantics, DLQ. Owns distributed-messaging failure modes that the distributed-systems role designs but does not implement.',\n signals: [\n 'messaging',\n 'queue',\n 'pubsub',\n 'dead letter',\n 'dlq',\n 'delivery semantics',\n 'at-least-once',\n 'at-most-once',\n 'kafka',\n ] as const,\n differentiatesFrom:\n 'distributed-systems designs the failure semantics; messaging implements the broker and consumer infrastructure.',\n} satisfies RoleDispatcherSignal;\n\nconst SEARCH_RELEVANCE_META = {\n rationale:\n 'Search relevance specialist: indexing, ranking, retrieval, evaluation. Owns the offline and online quality metrics that a generic database role does not.',\n signals: [\n 'search',\n 'search relevance',\n 'ranking',\n 'retrieval',\n 'indexing',\n 'recall',\n 'precision',\n 'reranker',\n ] as const,\n differentiatesFrom:\n 'database stores rows; search-relevance owns the ranking, retrieval and relevance-evaluation pipeline.',\n} satisfies RoleDispatcherSignal;\n\nconst STORAGE_META = {\n rationale:\n 'Object-storage specialist: upload, checksum, lifecycle, CDN. Owns the durability and replication boundaries of blob data.',\n signals: [\n 'object storage',\n 'blob',\n 'upload',\n 'checksum',\n 'lifecycle',\n 'cdn',\n 'presigned url',\n 'multipart upload',\n ] as const,\n differentiatesFrom:\n 'database owns structured rows; storage owns unstructured blob lifecycle and replication.',\n} satisfies RoleDispatcherSignal;\n\nconst ML_ENGINEER_META = {\n rationale:\n 'ML engineer: model integration, inference, evaluation, guardrail. The catalog has no existing ML-application specialist.',\n signals: [\n 'ml',\n 'machine learning',\n 'inference',\n 'embedding',\n 'model evaluation',\n 'guardrail',\n 'llm evaluation',\n ] as const,\n differentiatesFrom:\n 'data builds pipelines; ml-engineer integrates models, evaluates them and wires guardrails.',\n} satisfies RoleDispatcherSignal;\n\nconst DATA_GOVERNANCE_META = {\n rationale:\n 'Data governance specialist: lineage, classification, ownership, data contracts. Owns accountability and quality-of-record for data assets.',\n signals: [\n 'data governance',\n 'lineage',\n 'classification',\n 'ownership',\n 'data contract',\n 'data quality',\n 'retention policy',\n ] as const,\n differentiatesFrom:\n 'data builds pipelines; data-governance owns accountability, lineage and the data contracts that bind them.',\n} satisfies RoleDispatcherSignal;\n\nexport const WAVE3_AGENTS: AgentDefinition[] = [\n {\n config: {\n id: 'payments',\n name: 'Payments',\n role: 'payments',\n tools: [...new Set([...TOOLS.build, ...TOOLS.write, ...TOOLS.inspect, 'fetch'])],\n prompt: agentPrompt('payments'),\n },\n budget: HEAVY_BUDGET,\n capability: {\n phase: 'domain',\n summary:\n 'Payments specialist: ledger, refund, webhook, idempotency and reconciliation with financial-correctness invariants.',\n keywords: [\n ...PAYMENTS_META.signals,\n 'payments',\n 'ledger',\n 'refund',\n 'webhook',\n 'idempotency',\n 'pci',\n ],\n },\n },\n {\n config: {\n id: 'messaging',\n name: 'Messaging',\n role: 'messaging',\n tools: [...TOOLS.build, 'logs', 'observability'],\n prompt: agentPrompt('messaging'),\n },\n budget: HEAVY_BUDGET,\n capability: {\n phase: 'domain',\n summary:\n 'Messaging infrastructure specialist: queue, pub/sub, delivery semantics and DLQ with broker failure modes.',\n keywords: [\n ...MESSAGING_META.signals,\n 'messaging',\n 'queue',\n 'pubsub',\n 'dlq',\n 'kafka',\n 'rabbitmq',\n ],\n },\n },\n {\n config: {\n id: 'search-relevance',\n name: 'Search Relevance',\n role: 'search-relevance',\n tools: [...TOOLS.build, 'logs'],\n prompt: agentPrompt('search-relevance'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'domain',\n summary:\n 'Search relevance specialist: indexing, ranking, retrieval and offline/online evaluation of search quality.',\n keywords: [\n ...SEARCH_RELEVANCE_META.signals,\n 'search',\n 'ranking',\n 'retrieval',\n 'indexing',\n 'recall',\n 'rerank',\n ],\n },\n },\n {\n config: {\n id: 'storage',\n name: 'Storage',\n role: 'storage',\n tools: [...TOOLS.build, 'fetch', 'logs'],\n prompt: agentPrompt('storage'),\n },\n budget: HEAVY_BUDGET,\n capability: {\n phase: 'domain',\n summary:\n 'Object-storage specialist: upload, checksum, lifecycle, CDN and replication for unstructured blob data.',\n keywords: [\n ...STORAGE_META.signals,\n 'object-storage',\n 'blob',\n 'upload',\n 'checksum',\n 'lifecycle',\n 'cdn',\n ],\n },\n },\n {\n config: {\n id: 'ml-engineer',\n name: 'ML Engineer',\n role: 'ml-engineer',\n tools: [...TOOLS.build, 'logs'],\n prompt: agentPrompt('ml-engineer'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'domain',\n summary:\n 'ML engineer: model integration, inference, evaluation and guardrail wiring.',\n keywords: [\n ...ML_ENGINEER_META.signals,\n 'ml',\n 'inference',\n 'embedding',\n 'guardrail',\n 'llm-eval',\n ],\n },\n },\n {\n config: {\n id: 'data-governance',\n name: 'Data Governance',\n role: 'data-governance',\n tools: [...TOOLS.read, 'write', 'audit'],\n prompt: agentPrompt('data-governance'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'domain',\n summary:\n 'Data governance specialist: lineage, classification, ownership and data contracts with quality-of-record.',\n keywords: [\n ...DATA_GOVERNANCE_META.signals,\n 'data-governance',\n 'lineage',\n 'classification',\n 'data-contract',\n 'retention',\n ],\n },\n },\n];\n\nexport const WAVE3_ROLE_METAS: Record<string, RoleDispatcherSignal> = {\n payments: PAYMENTS_META,\n messaging: MESSAGING_META,\n 'search-relevance': SEARCH_RELEVANCE_META,\n storage: STORAGE_META,\n 'ml-engineer': ML_ENGINEER_META,\n 'data-governance': DATA_GOVERNANCE_META,\n};\n\nexport const WAVE3_ROLES = new Set<string>(Object.keys(WAVE3_ROLE_METAS));\n\nvoid skillSet;\n", "import { type AgentDefinition, LIGHT_BUDGET, MEDIUM_BUDGET, TOOLS } from './types.js';\nimport { agentPrompt } from './agent-prompts.js';\n\n/** Phase 9 \u00B7 Meta \u2014 agents that improve the agent system itself. */\nexport const META_AGENTS: AgentDefinition[] = [\n {\n config: {\n id: 'skill-manage',\n name: 'Skill Manager',\n role: 'skill-manage',\n tools: [...TOOLS.write],\n prompt: agentPrompt('skill-manage'),\n },\n budget: LIGHT_BUDGET,\n capability: {\n phase: 'meta',\n summary: 'Skill curation: audits, refines descriptions/triggers, scaffolds, and retires skills.',\n keywords: [\n 'skill',\n 'skills',\n 'curate skill',\n 'skill description',\n 'create skill',\n 'skill library',\n 'skill trigger',\n 'manage skills',\n ],\n },\n },\n {\n config: {\n id: 'self-improving',\n name: 'Self-Improving',\n role: 'self-improving',\n tools: [...TOOLS.inspect],\n prompt: agentPrompt('self-improving'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'meta',\n summary: 'Learns from execution logs: mines recurring failures/inefficiencies and proposes evidence-based improvements.',\n keywords: [\n 'self-improving',\n 'learn from',\n 'session logs',\n 'execution analysis',\n 'recurring failure',\n 'improve agents',\n 'post-mortem',\n 'retrospective',\n 'meta-analysis',\n ],\n },\n },\n {\n config: {\n id: 'context',\n name: 'Context',\n role: 'context',\n tools: [...TOOLS.inspect, 'remember', 'forget'],\n prompt: agentPrompt('context'),\n },\n budget: LIGHT_BUDGET,\n capability: {\n phase: 'meta',\n summary: 'Memory + context-window management: compaction, recall, and curation within a token budget.',\n keywords: [\n 'context',\n 'context window',\n 'memory',\n 'compact',\n 'summarize history',\n 'recall',\n 'token budget',\n 'prune context',\n 'remember',\n 'dfmt',\n ],\n },\n },\n {\n config: {\n id: 'cost',\n name: 'Cost',\n role: 'cost',\n tools: [...TOOLS.inspect],\n prompt: agentPrompt('cost'),\n },\n budget: LIGHT_BUDGET,\n capability: {\n phase: 'meta',\n summary: 'Token/cloud cost optimization: finds spend waste, recommends model routing and trimming with $ estimates.',\n keywords: [\n 'cost',\n 'token cost',\n 'optimize cost',\n 'spend',\n 'cheaper',\n 'model routing',\n 'budget',\n 'expensive',\n 'reduce tokens',\n 'pricing',\n 'cloud cost',\n ],\n },\n },\n {\n config: {\n id: 'tech-stack',\n name: 'Tech Stack Validator',\n role: 'tech-stack',\n tools: ['search', 'fetch', 'read', 'grep', 'glob', 'outdated', 'audit', 'json', 'mailbox'],\n prompt: agentPrompt('tech-stack'),\n },\n budget: {\n timeoutMs: 120_000,\n maxIterations: 10,\n maxToolCalls: 40,\n maxTokens: 60_000,\n maxCostUsd: 0.25,\n },\n capability: {\n phase: 'meta',\n summary: 'Single-shot tech stack validator: checks npm for latest versions, rejects dead/obsolete packages, enforces modern alternatives.',\n keywords: [\n 'tech stack',\n 'version',\n 'package',\n 'library',\n 'framework',\n 'dependency',\n 'install',\n 'upgrade',\n 'latest',\n 'npm',\n 'pnpm add',\n 'outdated',\n 'obsolete',\n 'deprecated',\n 'what version',\n 'which package',\n 'check version',\n 'verify version',\n 'is this current',\n ],\n },\n },\n];\n", "import { agentPrompt } from './agent-prompts.js';\nimport type { BundledAgentSkill } from './role-skills.js';\nimport {\n type AgentDefinition,\n type RoleDispatcherSignal,\n LIGHT_BUDGET,\n MEDIUM_BUDGET,\n TOOLS,\n} from './types.js';\n\nconst skillSet = (...names: BundledAgentSkill[]): BundledAgentSkill[] => names;\n\n/**\n * Wave 4: Agent platform and quality.\n *\n * Six roles that improve the agent system itself. The existing\n * `skill-manage`, `self-improving`, `context`, `cost` and `tech-stack` roles\n * are kept; the new roles focus on quality measurement and the platform\n * surface that the host exposes to extensions.\n */\n\nconst PROMPT_evaluator_META = {\n rationale:\n 'Prompt evaluator: builds rubrics, adversarial tests and regression suites. Independent measurement counterpart to the `prompt` author role.',\n signals: [\n 'prompt eval',\n 'prompt regression',\n 'rubric',\n 'adversarial prompt',\n 'prompt benchmark',\n 'judge prompt',\n 'eval suite',\n ] as const,\n differentiatesFrom:\n 'prompt authors prompts; prompt-evaluator independently measures them with rubrics and adversarial inputs.',\n} satisfies RoleDispatcherSignal;\n\nconst BENCHMARK_ENGINEER_META = {\n rationale:\n 'Benchmark engineer: reproducible benchmark design and methodology. The measurement-infrastructure counterpart to `performance`.',\n signals: [\n 'benchmark',\n 'reproducible',\n 'evaluation harness',\n 'regression suite',\n 'metric methodology',\n 'baseline',\n 'deterministic run',\n ] as const,\n differentiatesFrom:\n 'performance optimizes product code; benchmark-engineer builds the measurement infrastructure that supports comparison.',\n} satisfies RoleDispatcherSignal;\n\nconst MEMORY_CURATOR_META = {\n rationale:\n 'Memory curator: validates, merges and de-duplicates long-term memory with audience scope. Quality counterpart to `context`.',\n signals: [\n 'memory',\n 'curate',\n 'memory audit',\n 'memory merge',\n 'memory expiry',\n 'audience scope',\n 'memory recall quality',\n ] as const,\n differentiatesFrom:\n 'context manages the active context window; memory-curator curates the long-term memory store for accuracy.',\n} satisfies RoleDispatcherSignal;\n\nconst FLEET_COORDINATOR_META = {\n rationale:\n 'Fleet coordinator: multi-agent job partitioning, capacity planning and result synthesis. Operational counterpart to `planner`.',\n signals: [\n 'fleet',\n 'fan out',\n 'parallel agents',\n 'synthesis',\n 'subagent capacity',\n 'coordinator',\n 'result aggregation',\n ] as const,\n differentiatesFrom:\n 'planner designs ordered steps for one worker; fleet-coordinator runs many workers in parallel and merges their results.',\n} satisfies RoleDispatcherSignal;\n\nconst PLUGIN_AUTHOR_META = {\n rationale:\n 'Plugin author: build, package and ship runnable WrongStack plugins. The production counterpart to `skill-manage`.',\n signals: [\n 'plugin',\n 'plugin api',\n 'lifecycle',\n 'health',\n 'teardown',\n 'packaging',\n 'distribution',\n ] as const,\n differentiatesFrom:\n 'skill-manage authors skills; plugin-author authors full lifecycle plugins with health and teardown.',\n} satisfies RoleDispatcherSignal;\n\nconst TOOL_AUTHOR_META = {\n rationale:\n 'Tool author: tool schema, capability declaration, permission and error contract. The narrow, security-focused counterpart to `plugin-author`.',\n signals: [\n 'tool',\n 'tool schema',\n 'capability',\n 'permission',\n 'tool contract',\n 'tool error',\n 'tool lifecycle',\n ] as const,\n differentiatesFrom:\n 'plugin-author writes full plugin lifecycle; tool-author focuses on a single tool contract and capability set.',\n} satisfies RoleDispatcherSignal;\n\nexport const WAVE4_AGENTS: AgentDefinition[] = [\n {\n config: {\n id: 'plugin-author',\n name: 'Plugin Author',\n role: 'plugin-author',\n tools: [...TOOLS.write, 'fetch'],\n prompt: agentPrompt('plugin-author'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'meta',\n summary:\n 'Plugin author: build, package and ship runnable WrongStack plugins with full lifecycle, health and teardown.',\n keywords: [\n ...PLUGIN_AUTHOR_META.signals,\n 'plugin',\n 'plugin-author',\n 'lifecycle',\n 'health',\n 'teardown',\n 'plugin-packaging',\n ],\n },\n },\n {\n config: {\n id: 'tool-author',\n name: 'Tool Author',\n role: 'tool-author',\n tools: [...TOOLS.write, 'install'],\n prompt: agentPrompt('tool-author'),\n },\n budget: LIGHT_BUDGET,\n capability: {\n phase: 'meta',\n summary:\n 'Tool author: design tool schemas, capability declarations, permissions and error contracts with security as the first concern.',\n keywords: [\n ...TOOL_AUTHOR_META.signals,\n 'tool',\n 'tool-author',\n 'capability',\n 'permission',\n 'tool-schema',\n 'tool-error',\n ],\n },\n },\n {\n config: {\n id: 'prompt-evaluator',\n name: 'Prompt Evaluator',\n role: 'prompt-evaluator',\n tools: [...TOOLS.read, 'write'],\n prompt: agentPrompt('prompt-evaluator'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'meta',\n summary:\n 'Prompt evaluator: build rubrics, adversarial prompt tests and regression suites for independent measurement.',\n keywords: [\n ...PROMPT_evaluator_META.signals,\n 'prompt-evaluator',\n 'rubric',\n 'adversarial',\n 'regression',\n 'judge',\n ],\n },\n },\n {\n config: {\n id: 'benchmark-engineer',\n name: 'Benchmark Engineer',\n role: 'benchmark-engineer',\n tools: [...TOOLS.read, 'write', 'logs'],\n prompt: agentPrompt('benchmark-engineer'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'meta',\n summary:\n 'Benchmark engineer: design reproducible benchmarks and methodology with deterministic baselines.',\n keywords: [\n ...BENCHMARK_ENGINEER_META.signals,\n 'benchmark-engineer',\n 'benchmark',\n 'baseline',\n 'eval-harness',\n 'deterministic',\n ],\n },\n },\n {\n config: {\n id: 'memory-curator',\n name: 'Memory Curator',\n role: 'memory-curator',\n tools: [...TOOLS.read, 'memory'],\n prompt: agentPrompt('memory-curator'),\n },\n budget: LIGHT_BUDGET,\n capability: {\n phase: 'meta',\n summary:\n 'Memory curator: validate, merge and de-duplicate long-term memory entries with audience scoping.',\n keywords: [\n ...MEMORY_CURATOR_META.signals,\n 'memory-curator',\n 'curate',\n 'memory-audit',\n 'memory-merge',\n 'audience-scope',\n ],\n },\n },\n {\n config: {\n id: 'fleet-coordinator',\n name: 'Fleet Coordinator',\n role: 'fleet-coordinator',\n tools: [...TOOLS.read, 'plan', 'multi-agent'],\n prompt: agentPrompt('fleet-coordinator'),\n },\n budget: MEDIUM_BUDGET,\n capability: {\n phase: 'meta',\n summary:\n 'Fleet coordinator: own multi-agent job partitioning, capacity planning and result synthesis across many parallel workers.',\n keywords: [\n ...FLEET_COORDINATOR_META.signals,\n 'fleet-coordinator',\n 'fan-out',\n 'parallel',\n 'synthesis',\n 'subagent-capacity',\n ],\n },\n },\n];\n\nexport const WAVE4_ROLE_METAS: Record<string, RoleDispatcherSignal> = {\n 'plugin-author': PLUGIN_AUTHOR_META,\n 'tool-author': TOOL_AUTHOR_META,\n 'prompt-evaluator': PROMPT_evaluator_META,\n 'benchmark-engineer': BENCHMARK_ENGINEER_META,\n 'memory-curator': MEMORY_CURATOR_META,\n 'fleet-coordinator': FLEET_COORDINATOR_META,\n};\n\nexport const WAVE4_ROLES = new Set<string>(Object.keys(WAVE4_ROLE_METAS));\n\nvoid skillSet;\n", "import type { AgentDefinition } from './types.js';\n\n/**\n * Bundled skills currently assigned to built-in roster agents.\n *\n * Keeping this list explicit makes role assignments auditable and prevents a\n * typo from silently degrading a worker into its persona-only fallback.\n */\nconst BUNDLED_AGENT_SKILLS = [\n 'api-design',\n 'audit-log',\n 'bug-hunter',\n 'chimera',\n 'data-governance',\n 'docker-deploy',\n 'git-flow',\n 'mnemosyne',\n 'multi-agent',\n 'node-modern',\n 'observability',\n 'output-standards',\n 'plugin-author',\n 'prompt-engineering',\n 'react-modern',\n 'refactor-planner',\n 'research-web',\n 'sdd',\n 'security-scanner',\n 'skill-creator',\n 'tech-stack',\n 'testing',\n 'typescript-strict',\n 'wrongstack-mailbox',\n] as const;\n\nexport type BundledAgentSkill = (typeof BUNDLED_AGENT_SKILLS)[number];\n\nconst skillSet = (...names: BundledAgentSkill[]): BundledAgentSkill[] => names;\n\n/**\n * Curated cross-disciplinary skill sets for every catalog role.\n *\n * A role prompt supplies the specialist persona; these skills add reusable\n * methods and safety rails from adjacent disciplines. Sets intentionally mix\n * domain knowledge, verification, security, and delivery rather than merely\n * repeating the role name.\n */\nexport const ROLE_SKILL_SETS = {\n explore: skillSet('research-web', 'node-modern', 'typescript-strict'),\n search: skillSet('bug-hunter', 'typescript-strict', 'research-web'),\n research: skillSet('research-web', 'tech-stack', 'security-scanner', 'api-design'),\n\n analyst: skillSet('sdd', 'api-design', 'testing', 'security-scanner'),\n planner: skillSet('sdd', 'multi-agent', 'refactor-planner', 'testing'),\n architect: skillSet('sdd', 'api-design', 'refactor-planner', 'security-scanner', 'observability'),\n critic: skillSet('chimera', 'bug-hunter', 'security-scanner', 'refactor-planner'),\n 'refactor-planner': skillSet(\n 'refactor-planner',\n 'sdd',\n 'typescript-strict',\n 'testing',\n 'bug-hunter',\n ),\n\n executor: skillSet('sdd', 'typescript-strict', 'node-modern', 'testing', 'git-flow'),\n refactor: skillSet('refactor-planner', 'typescript-strict', 'testing', 'bug-hunter'),\n simplifier: skillSet('bug-hunter', 'typescript-strict', 'testing', 'refactor-planner'),\n migration: skillSet('tech-stack', 'node-modern', 'typescript-strict', 'testing', 'git-flow'),\n vision: skillSet('react-modern', 'testing', 'typescript-strict', 'security-scanner'),\n debugger: skillSet('bug-hunter', 'testing', 'typescript-strict', 'observability', 'audit-log'),\n tracer: skillSet('observability', 'audit-log', 'bug-hunter', 'testing'),\n\n verifier: skillSet('testing', 'typescript-strict', 'security-scanner', 'chimera'),\n test: skillSet('testing', 'typescript-strict', 'bug-hunter', 'security-scanner'),\n e2e: skillSet('testing', 'react-modern', 'api-design', 'security-scanner'),\n browser: skillSet('testing', 'react-modern', 'security-scanner', 'research-web'),\n performance: skillSet('observability', 'testing', 'node-modern', 'audit-log'),\n chaos: skillSet('testing', 'observability', 'security-scanner', 'audit-log'),\n 'security-scanner': skillSet('security-scanner', 'bug-hunter', 'api-design', 'tech-stack'),\n 'bug-hunter': skillSet('bug-hunter', 'typescript-strict', 'testing', 'security-scanner'),\n 'audit-log': skillSet('audit-log', 'observability', 'bug-hunter', 'output-standards'),\n\n reviewer: skillSet('chimera', 'bug-hunter', 'security-scanner', 'testing'),\n 'code-reviewer': skillSet('chimera', 'bug-hunter', 'typescript-strict', 'testing'),\n 'security-reviewer': skillSet('security-scanner', 'chimera', 'api-design', 'tech-stack'),\n accessibility: skillSet('react-modern', 'testing', 'chimera', 'security-scanner'),\n compliance: skillSet('security-scanner', 'audit-log', 'tech-stack', 'chimera'),\n\n database: skillSet('api-design', 'testing', 'security-scanner', 'observability'),\n api: skillSet('api-design', 'typescript-strict', 'node-modern', 'testing', 'security-scanner'),\n auth: skillSet('security-scanner', 'api-design', 'testing', 'typescript-strict', 'audit-log'),\n data: skillSet('typescript-strict', 'testing', 'observability', 'security-scanner'),\n frontend: skillSet('react-modern', 'typescript-strict', 'testing', 'security-scanner'),\n backend: skillSet('node-modern', 'typescript-strict', 'api-design', 'testing', 'observability'),\n designer: skillSet('react-modern', 'prompt-engineering', 'research-web', 'output-standards'),\n ios: skillSet('sdd', 'testing', 'security-scanner', 'research-web'),\n\n document: skillSet('output-standards', 'research-web', 'api-design', 'prompt-engineering'),\n uml: skillSet('sdd', 'refactor-planner', 'api-design', 'output-standards'),\n i18n: skillSet('react-modern', 'testing', 'typescript-strict', 'output-standards'),\n prompt: skillSet('prompt-engineering', 'skill-creator', 'output-standards', 'testing'),\n\n git: skillSet('git-flow', 'chimera', 'testing', 'security-scanner'),\n release: skillSet('git-flow', 'tech-stack', 'chimera', 'security-scanner'),\n devops: skillSet('docker-deploy', 'observability', 'security-scanner', 'git-flow', 'tech-stack'),\n observability: skillSet('observability', 'node-modern', 'testing', 'audit-log'),\n dependency: skillSet('tech-stack', 'security-scanner', 'node-modern', 'git-flow'),\n\n 'skill-manage': skillSet(\n 'skill-creator',\n 'prompt-engineering',\n 'security-scanner',\n 'output-standards',\n ),\n 'self-improving': skillSet(\n 'audit-log',\n 'mnemosyne',\n 'prompt-engineering',\n 'bug-hunter',\n 'observability',\n ),\n context: skillSet('mnemosyne', 'output-standards', 'prompt-engineering', 'audit-log'),\n cost: skillSet('audit-log', 'tech-stack', 'observability', 'research-web'),\n 'tech-stack': skillSet('tech-stack', 'research-web', 'security-scanner', 'node-modern'),\n\n // \u2500\u2500 Wave 1: Platform and systems engineering \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n android: skillSet('react-modern', 'typescript-strict', 'testing', 'security-scanner', 'tech-stack'),\n desktop: skillSet('node-modern', 'typescript-strict', 'testing', 'security-scanner', 'tech-stack'),\n realtime: skillSet(\n 'api-design',\n 'observability',\n 'node-modern',\n 'typescript-strict',\n 'testing',\n 'tech-stack',\n ),\n 'distributed-systems': skillSet(\n 'api-design',\n 'observability',\n 'typescript-strict',\n 'testing',\n 'security-scanner',\n 'tech-stack',\n ),\n concurrency: skillSet(\n 'bug-hunter',\n 'typescript-strict',\n 'testing',\n 'observability',\n 'node-modern',\n 'tech-stack',\n ),\n 'platform-engineer': skillSet(\n 'node-modern',\n 'typescript-strict',\n 'git-flow',\n 'docker-deploy',\n 'tech-stack',\n ),\n\n // \u2500\u2500 Wave 3: Product and data specialists \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n payments: skillSet(\n 'api-design',\n 'security-scanner',\n 'audit-log',\n 'testing',\n 'typescript-strict',\n 'tech-stack',\n ),\n messaging: skillSet(\n 'api-design',\n 'observability',\n 'node-modern',\n 'testing',\n 'security-scanner',\n 'tech-stack',\n ),\n 'search-relevance': skillSet(\n 'api-design',\n 'observability',\n 'testing',\n 'typescript-strict',\n 'data-governance',\n 'tech-stack',\n ),\n storage: skillSet(\n 'api-design',\n 'security-scanner',\n 'testing',\n 'observability',\n 'node-modern',\n 'tech-stack',\n ),\n 'ml-engineer': skillSet(\n 'observability',\n 'typescript-strict',\n 'testing',\n 'security-scanner',\n 'data-governance',\n 'tech-stack',\n ),\n 'data-governance': skillSet(\n 'audit-log',\n 'security-scanner',\n 'observability',\n 'testing',\n 'output-standards',\n 'tech-stack',\n ),\n\n // \u2500\u2500 Wave 4: Agent platform and quality \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n 'plugin-author': skillSet(\n 'plugin-author',\n 'node-modern',\n 'typescript-strict',\n 'testing',\n 'security-scanner',\n 'tech-stack',\n ),\n 'tool-author': skillSet(\n 'typescript-strict',\n 'security-scanner',\n 'testing',\n 'output-standards',\n 'tech-stack',\n ),\n 'prompt-evaluator': skillSet(\n 'prompt-engineering',\n 'testing',\n 'output-standards',\n 'security-scanner',\n 'tech-stack',\n ),\n 'benchmark-engineer': skillSet(\n 'observability',\n 'testing',\n 'output-standards',\n 'tech-stack',\n ),\n 'memory-curator': skillSet(\n 'mnemosyne',\n 'audit-log',\n 'testing',\n 'output-standards',\n 'tech-stack',\n ),\n 'fleet-coordinator': skillSet(\n 'multi-agent',\n 'sdd',\n 'output-standards',\n 'testing',\n 'tech-stack',\n ),\n\n // \u2500\u2500 Wave 2: Security, resilience, governance and agent platform \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n 'threat-modeler': skillSet(\n 'security-scanner',\n 'api-design',\n 'tech-stack',\n 'audit-log',\n 'testing',\n ),\n 'secure-coding-coach': skillSet(\n 'security-scanner',\n 'testing',\n 'typescript-strict',\n 'api-design',\n 'tech-stack',\n ),\n 'resilience-engineer': skillSet(\n 'observability',\n 'testing',\n 'typescript-strict',\n 'api-design',\n 'tech-stack',\n ),\n 'chaos-engineer': skillSet(\n 'observability',\n 'testing',\n 'security-scanner',\n 'git-flow',\n 'tech-stack',\n ),\n 'compliance-auditor': skillSet(\n 'audit-log',\n 'security-scanner',\n 'output-standards',\n 'testing',\n 'tech-stack',\n ),\n 'privacy-engineer': skillSet(\n 'security-scanner',\n 'audit-log',\n 'api-design',\n 'data-governance',\n 'tech-stack',\n ),\n} as const satisfies Record<string, readonly BundledAgentSkill[]>;\n\nexport type CatalogRoleWithSkills = keyof typeof ROLE_SKILL_SETS;\n\n/** Standalone operational role that lives outside the phase catalog. */\nexport const SHADOW_AGENT_SKILLS = skillSet(\n 'wrongstack-mailbox',\n 'multi-agent',\n 'audit-log',\n 'observability',\n 'security-scanner',\n);\n\n/** Attach a fresh skill-name array so catalog templates remain mutation-safe. */\nexport function assignSkillsToAgents(definitions: readonly AgentDefinition[]): AgentDefinition[] {\n return definitions.map((definition) => {\n const role = definition.config.role;\n if (!role || !Object.hasOwn(ROLE_SKILL_SETS, role)) {\n throw new Error(\n `Missing curated skill set for roster role: \"${role ?? definition.config.name}\"`,\n );\n }\n const skills = ROLE_SKILL_SETS[role as CatalogRoleWithSkills];\n return {\n ...definition,\n config: {\n ...definition.config,\n skillNames: [...skills],\n },\n };\n });\n}\n", "/**\n * Agent catalog aggregator.\n *\n * Collects every phase's `AgentDefinition[]` into:\n * - `ALL_AGENT_DEFINITIONS` \u2014 flat list, catalog order (phase 1 \u2192 9 + waves)\n * - `AGENT_CATALOG` \u2014 keyed by role for O(1) lookup\n * - `AGENTS_BY_PHASE` \u2014 grouped for statusline / dispatcher tie-breaks\n *\n * `fleet.ts` derives `FLEET_ROSTER` + `FLEET_ROSTER_BUDGETS` from this, and the\n * dispatcher routes free-form tasks against `capability` metadata here.\n */\n\nimport { DISCOVERY_AGENTS } from './phase1-discovery.js';\nimport { PLANNING_AGENTS } from './phase2-planning.js';\nimport { BUILD_AGENTS } from './phase3-build.js';\nimport { WAVE1_AGENTS } from './phase3-wave1-platform.js';\nimport { WAVE2_AGENTS } from './phase3-wave2-meta.js';\nimport { VERIFY_AGENTS } from './phase4-verify.js';\nimport { REVIEW_AGENTS } from './phase5-review.js';\nimport { DOMAIN_AGENTS } from './phase6-domain.js';\nimport { KNOWLEDGE_AGENTS } from './phase7-knowledge.js';\nimport { DELIVERY_AGENTS } from './phase8-delivery.js';\nimport { WAVE3_AGENTS } from './phase8-wave3-products.js';\nimport { META_AGENTS } from './phase9-meta.js';\nimport { WAVE4_AGENTS } from './phase9-wave4-platform-meta.js';\nimport { ROLE_SKILL_SETS, SHADOW_AGENT_SKILLS, assignSkillsToAgents } from './role-skills.js';\nimport type { AgentDefinition, AgentPhase } from './types.js';\n\nexport * from './role-skills.js';\nexport * from './types.js';\nexport * from './phase3-wave1-platform.js';\nexport * from './phase3-wave2-meta.js';\nexport * from './phase8-wave3-products.js';\nexport * from './phase9-wave4-platform-meta.js';\nexport * from './project-agent-identity.js';\nexport {\n BUILD_AGENTS,\n DELIVERY_AGENTS,\n DISCOVERY_AGENTS,\n DOMAIN_AGENTS,\n KNOWLEDGE_AGENTS,\n META_AGENTS,\n PLANNING_AGENTS,\n REVIEW_AGENTS,\n VERIFY_AGENTS,\n WAVE1_AGENTS,\n WAVE2_AGENTS,\n WAVE3_AGENTS,\n WAVE4_AGENTS,\n};\n\n/** Every catalog agent, in phase order, enriched with its curated skills. */\nexport const ALL_AGENT_DEFINITIONS: AgentDefinition[] = assignSkillsToAgents([\n ...DISCOVERY_AGENTS,\n ...PLANNING_AGENTS,\n ...BUILD_AGENTS,\n ...WAVE1_AGENTS,\n ...WAVE2_AGENTS,\n ...VERIFY_AGENTS,\n ...REVIEW_AGENTS,\n ...DOMAIN_AGENTS,\n ...KNOWLEDGE_AGENTS,\n ...DELIVERY_AGENTS,\n ...WAVE3_AGENTS,\n ...META_AGENTS,\n ...WAVE4_AGENTS,\n]);\n\n/** Phase \u2192 its enriched agents, for grouped display and dispatcher fallbacks. */\nconst agentsInPhase = (phase: AgentPhase): AgentDefinition[] =>\n ALL_AGENT_DEFINITIONS.filter((definition) => definition.capability.phase === phase);\n\nexport const AGENTS_BY_PHASE = {\n discovery: agentsInPhase('discovery'),\n planning: agentsInPhase('planning'),\n build: agentsInPhase('build'),\n verify: agentsInPhase('verify'),\n review: agentsInPhase('review'),\n domain: agentsInPhase('domain'),\n knowledge: agentsInPhase('knowledge'),\n delivery: agentsInPhase('delivery'),\n meta: agentsInPhase('meta'),\n} satisfies Record<AgentPhase, AgentDefinition[]>;\n\n/**\n * Role \u2192 definition. Built once at module load. Throws on a duplicate role so\n * a copy-paste collision fails loudly at startup instead of silently shadowing.\n */\nexport const AGENT_CATALOG: Record<string, AgentDefinition> = (() => {\n const map: Record<string, AgentDefinition> = {};\n for (const def of ALL_AGENT_DEFINITIONS) {\n const role = def.config.role;\n if (!role) {\n throw new Error(`Agent \"${def.config.name}\" is missing a role`);\n }\n if (map[role]) {\n throw new Error(`Duplicate agent role in catalog: \"${role}\"`);\n }\n map[role] = def;\n }\n return map;\n})();\n\n/** Role lookup helper. Returns undefined for unknown roles. */\nexport function getAgentDefinition(role: string): AgentDefinition | undefined {\n return AGENT_CATALOG[role];\n}\n\n// Re-export the skill-set aliases that some callers historically imported\n// from this module so the wave-1/2/3/4 surface keeps backward compatibility.\nexport { ROLE_SKILL_SETS, SHADOW_AGENT_SKILLS };\n"],
5
- "mappings": "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",
6
- "names": ["readFileSync", "statSync", "path", "projectHash", "existsSync", "readFileSync", "path", "path", "readFileSync", "path", "readFileSync", "mkdirSync", "readFileSync", "rmSync", "path", "readFileSync", "mkdirSync", "rmSync", "existsSync", "mkdirSync", "readFileSync", "path", "readFileSync", "existsSync", "mkdirSync", "existsSync", "mkdirSync", "readdirSync", "readFileSync", "rmSync", "path", "mkdirSync", "readFileSync", "dir", "existsSync", "rmSync", "readdirSync", "readFileSync", "learnedPath", "existsSync", "readFileSync", "statSync", "BENCHMARK_ENGINEER_META", "MEMORY_CURATOR_META", "FLEET_COORDINATOR_META", "PLUGIN_AUTHOR_META", "TOOL_AUTHOR_META"]
7
- }