codingbuddy 5.2.0 → 5.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (447) hide show
  1. package/dist/src/agent/agent-prompt.builder.js +135 -2
  2. package/dist/src/agent/agent-stack.loader.d.ts +3 -0
  3. package/dist/src/agent/agent-stack.loader.js +38 -0
  4. package/dist/src/agent/agent-stack.schema.d.ts +14 -0
  5. package/dist/src/agent/agent-stack.schema.js +19 -0
  6. package/dist/src/agent/agent-stack.service.d.ts +15 -0
  7. package/dist/src/agent/agent-stack.service.js +112 -0
  8. package/dist/src/agent/agent.module.js +5 -2
  9. package/dist/src/agent/agent.service.d.ts +8 -1
  10. package/dist/src/agent/agent.service.js +126 -40
  11. package/dist/src/agent/agent.types.d.ts +26 -46
  12. package/dist/src/agent/council-preset.service.d.ts +6 -0
  13. package/dist/src/agent/council-preset.service.js +46 -0
  14. package/dist/src/agent/council-preset.types.d.ts +6 -0
  15. package/dist/src/agent/council-preset.types.js +3 -0
  16. package/dist/src/agent/execution-plan.d.ts +8 -0
  17. package/dist/src/agent/execution-plan.js +73 -0
  18. package/dist/src/agent/execution-plan.types.d.ts +74 -0
  19. package/dist/src/agent/execution-plan.types.js +3 -0
  20. package/dist/src/agent/index.d.ts +8 -0
  21. package/dist/src/agent/index.js +8 -0
  22. package/dist/src/agent/teams-capability.service.d.ts +11 -0
  23. package/dist/src/agent/teams-capability.service.js +74 -0
  24. package/dist/src/agent/teams-capability.types.d.ts +6 -0
  25. package/dist/src/agent/teams-capability.types.js +3 -0
  26. package/dist/src/cli/cli.d.ts +4 -3
  27. package/dist/src/cli/cli.js +54 -0
  28. package/dist/src/cli/cli.types.d.ts +4 -0
  29. package/dist/src/cli/completion/completion.d.ts +16 -0
  30. package/dist/src/cli/completion/completion.js +276 -0
  31. package/dist/src/cli/completion/index.d.ts +2 -0
  32. package/dist/src/cli/completion/index.js +7 -0
  33. package/dist/src/cli/plugin/create-plugin.command.d.ts +21 -0
  34. package/dist/src/cli/plugin/create-plugin.command.js +151 -0
  35. package/dist/src/cli/run-tui.d.ts +1 -0
  36. package/dist/src/cli/run-tui.js +7 -1
  37. package/dist/src/collaboration/council-summary.service.d.ts +2 -0
  38. package/dist/src/collaboration/council-summary.service.js +114 -0
  39. package/dist/src/collaboration/council-summary.types.d.ts +24 -0
  40. package/dist/src/collaboration/council-summary.types.js +3 -0
  41. package/dist/src/collaboration/index.d.ts +2 -0
  42. package/dist/src/collaboration/index.js +3 -1
  43. package/dist/src/config/config.schema.d.ts +3 -0
  44. package/dist/src/config/config.schema.js +5 -0
  45. package/dist/src/keyword/keyword.types.d.ts +8 -0
  46. package/dist/src/mcp/handlers/agent.handler.d.ts +6 -1
  47. package/dist/src/mcp/handlers/agent.handler.js +81 -8
  48. package/dist/src/mcp/handlers/checklist-context.handler.d.ts +3 -1
  49. package/dist/src/mcp/handlers/checklist-context.handler.js +17 -2
  50. package/dist/src/mcp/handlers/discussion.handler.d.ts +3 -0
  51. package/dist/src/mcp/handlers/discussion.handler.js +22 -1
  52. package/dist/src/mcp/handlers/mode.handler.d.ts +9 -1
  53. package/dist/src/mcp/handlers/mode.handler.js +79 -2
  54. package/dist/src/mcp/handlers/quality-report.handler.d.ts +3 -1
  55. package/dist/src/mcp/handlers/quality-report.handler.js +20 -2
  56. package/dist/src/rules/rules.service.d.ts +6 -0
  57. package/dist/src/rules/rules.service.js +3 -0
  58. package/dist/src/rules/skill.schema.d.ts +5 -0
  59. package/dist/src/rules/skill.schema.js +36 -0
  60. package/dist/src/shared/rules-core.d.ts +5 -0
  61. package/dist/src/shared/rules-core.js +5 -0
  62. package/dist/src/shared/version.d.ts +1 -1
  63. package/dist/src/shared/version.js +1 -1
  64. package/dist/src/skill/i18n/keywords.js +921 -0
  65. package/dist/src/skill/skill-recommendation.service.d.ts +1 -0
  66. package/dist/src/skill/skill-recommendation.service.js +27 -1
  67. package/dist/src/skill/skill-recommendation.types.d.ts +5 -0
  68. package/dist/src/tui/events/hud-file-bridge.d.ts +4 -0
  69. package/dist/src/tui/events/hud-file-bridge.js +36 -0
  70. package/dist/src/tui-bundle.mjs +45 -3
  71. package/package.json +7 -2
  72. package/dist/api/mcp.js.map +0 -1
  73. package/dist/src/agent/agent-prompt.builder.js.map +0 -1
  74. package/dist/src/agent/agent-summary.utils.js.map +0 -1
  75. package/dist/src/agent/agent.module.js.map +0 -1
  76. package/dist/src/agent/agent.service.js.map +0 -1
  77. package/dist/src/agent/agent.types.js.map +0 -1
  78. package/dist/src/agent/index.js.map +0 -1
  79. package/dist/src/analyzer/analyzer.module.js.map +0 -1
  80. package/dist/src/analyzer/analyzer.service.js.map +0 -1
  81. package/dist/src/analyzer/analyzer.types.js.map +0 -1
  82. package/dist/src/analyzer/code.sampler.js.map +0 -1
  83. package/dist/src/analyzer/config.analyzer.js.map +0 -1
  84. package/dist/src/analyzer/conventions.analyzer.js.map +0 -1
  85. package/dist/src/analyzer/conventions.schemas.js.map +0 -1
  86. package/dist/src/analyzer/conventions.types.js.map +0 -1
  87. package/dist/src/analyzer/directory.analyzer.js.map +0 -1
  88. package/dist/src/analyzer/index.js.map +0 -1
  89. package/dist/src/analyzer/package.analyzer.js.map +0 -1
  90. package/dist/src/app.module.js.map +0 -1
  91. package/dist/src/checklist/checklist.module.js.map +0 -1
  92. package/dist/src/checklist/checklist.schema.js.map +0 -1
  93. package/dist/src/checklist/checklist.service.js.map +0 -1
  94. package/dist/src/checklist/checklist.types.js.map +0 -1
  95. package/dist/src/checklist/index.js.map +0 -1
  96. package/dist/src/cli/cli.js.map +0 -1
  97. package/dist/src/cli/cli.types.js.map +0 -1
  98. package/dist/src/cli/index.js.map +0 -1
  99. package/dist/src/cli/init/claude-settings.utils.js.map +0 -1
  100. package/dist/src/cli/init/config.generator.js.map +0 -1
  101. package/dist/src/cli/init/config.writer.js.map +0 -1
  102. package/dist/src/cli/init/gitignore.utils.js.map +0 -1
  103. package/dist/src/cli/init/index.js.map +0 -1
  104. package/dist/src/cli/init/init.command.js.map +0 -1
  105. package/dist/src/cli/init/init.constants.js.map +0 -1
  106. package/dist/src/cli/init/init.wizard.js.map +0 -1
  107. package/dist/src/cli/init/prompt.builder.js.map +0 -1
  108. package/dist/src/cli/init/prompts/agent-prompt.js.map +0 -1
  109. package/dist/src/cli/init/prompts/architecture-prompt.js.map +0 -1
  110. package/dist/src/cli/init/prompts/basic-prompt.js.map +0 -1
  111. package/dist/src/cli/init/prompts/conventions-prompt.js.map +0 -1
  112. package/dist/src/cli/init/prompts/index.js.map +0 -1
  113. package/dist/src/cli/init/prompts/language-prompt.js.map +0 -1
  114. package/dist/src/cli/init/prompts/model-prompt.js.map +0 -1
  115. package/dist/src/cli/init/prompts/tech-stack-prompt.js.map +0 -1
  116. package/dist/src/cli/init/prompts/test-strategy-prompt.js.map +0 -1
  117. package/dist/src/cli/init/summary/index.js.map +0 -1
  118. package/dist/src/cli/init/summary/summary.prompt.js.map +0 -1
  119. package/dist/src/cli/init/summary/summary.renderer.js.map +0 -1
  120. package/dist/src/cli/init/templates/config-renderer.js.map +0 -1
  121. package/dist/src/cli/init/templates/frameworks/default.template.js.map +0 -1
  122. package/dist/src/cli/init/templates/frameworks/express.template.js.map +0 -1
  123. package/dist/src/cli/init/templates/frameworks/index.js.map +0 -1
  124. package/dist/src/cli/init/templates/frameworks/nestjs.template.js.map +0 -1
  125. package/dist/src/cli/init/templates/frameworks/nextjs.template.js.map +0 -1
  126. package/dist/src/cli/init/templates/frameworks/node.template.js.map +0 -1
  127. package/dist/src/cli/init/templates/frameworks/react.template.js.map +0 -1
  128. package/dist/src/cli/init/templates/index.js.map +0 -1
  129. package/dist/src/cli/init/templates/template.renderer.js.map +0 -1
  130. package/dist/src/cli/init/templates/template.selector.js.map +0 -1
  131. package/dist/src/cli/init/templates/template.types.js.map +0 -1
  132. package/dist/src/cli/plugin/install.command.js.map +0 -1
  133. package/dist/src/cli/plugin/plugins.command.js.map +0 -1
  134. package/dist/src/cli/plugin/search.command.js.map +0 -1
  135. package/dist/src/cli/plugin/uninstall.command.js.map +0 -1
  136. package/dist/src/cli/plugin/update.command.js.map +0 -1
  137. package/dist/src/cli/restart-tui.js.map +0 -1
  138. package/dist/src/cli/run-tui.js.map +0 -1
  139. package/dist/src/cli/utils/console.js.map +0 -1
  140. package/dist/src/cli/utils/index.js.map +0 -1
  141. package/dist/src/collaboration/discussion-engine.js.map +0 -1
  142. package/dist/src/collaboration/index.js.map +0 -1
  143. package/dist/src/collaboration/opinion-adapter.js.map +0 -1
  144. package/dist/src/collaboration/terminal-formatter.js.map +0 -1
  145. package/dist/src/collaboration/types.js.map +0 -1
  146. package/dist/src/config/config-diff.service.js.map +0 -1
  147. package/dist/src/config/config.loader.js.map +0 -1
  148. package/dist/src/config/config.module.js.map +0 -1
  149. package/dist/src/config/config.schema.js.map +0 -1
  150. package/dist/src/config/config.service.js.map +0 -1
  151. package/dist/src/config/context.loader.js.map +0 -1
  152. package/dist/src/config/ignore.parser.js.map +0 -1
  153. package/dist/src/config/index.js.map +0 -1
  154. package/dist/src/context/briefing-loader.service.js.map +0 -1
  155. package/dist/src/context/briefing.service.js.map +0 -1
  156. package/dist/src/context/briefing.types.js.map +0 -1
  157. package/dist/src/context/context-archive.service.js.map +0 -1
  158. package/dist/src/context/context-archive.types.js.map +0 -1
  159. package/dist/src/context/context-document.service.js.map +0 -1
  160. package/dist/src/context/context-document.types.js.map +0 -1
  161. package/dist/src/context/context-parser.utils.js.map +0 -1
  162. package/dist/src/context/context-serializer.utils.js.map +0 -1
  163. package/dist/src/context/context.module.js.map +0 -1
  164. package/dist/src/context/context.service.js.map +0 -1
  165. package/dist/src/context/context.types.js.map +0 -1
  166. package/dist/src/context/index.js.map +0 -1
  167. package/dist/src/context/intent-patterns.js.map +0 -1
  168. package/dist/src/custom/custom.module.js.map +0 -1
  169. package/dist/src/custom/custom.service.js.map +0 -1
  170. package/dist/src/custom/custom.types.js.map +0 -1
  171. package/dist/src/custom/index.js.map +0 -1
  172. package/dist/src/diagnostic/diagnostic-log.service.js.map +0 -1
  173. package/dist/src/diagnostic/diagnostic.module.js.map +0 -1
  174. package/dist/src/diagnostic/diagnostic.types.js.map +0 -1
  175. package/dist/src/diagnostic/index.js.map +0 -1
  176. package/dist/src/impact/impact-event.service.js.map +0 -1
  177. package/dist/src/impact/impact-report.service.js.map +0 -1
  178. package/dist/src/impact/impact.module.js.map +0 -1
  179. package/dist/src/impact/impact.types.js.map +0 -1
  180. package/dist/src/impact/index.js.map +0 -1
  181. package/dist/src/keyword/activation-message.builder.js.map +0 -1
  182. package/dist/src/keyword/auto-executor.js.map +0 -1
  183. package/dist/src/keyword/auto-executor.types.js.map +0 -1
  184. package/dist/src/keyword/auto-formatter.js.map +0 -1
  185. package/dist/src/keyword/auto-prompt-builder.js.map +0 -1
  186. package/dist/src/keyword/complexity-classifier.js.map +0 -1
  187. package/dist/src/keyword/complexity-indicators.js.map +0 -1
  188. package/dist/src/keyword/diff-analyzer.js.map +0 -1
  189. package/dist/src/keyword/explicit-pattern-matcher.js.map +0 -1
  190. package/dist/src/keyword/index.js.map +0 -1
  191. package/dist/src/keyword/keyword.module.js.map +0 -1
  192. package/dist/src/keyword/keyword.service.js.map +0 -1
  193. package/dist/src/keyword/keyword.types.js.map +0 -1
  194. package/dist/src/keyword/patterns/agent.patterns.js.map +0 -1
  195. package/dist/src/keyword/patterns/ai-ml.patterns.js.map +0 -1
  196. package/dist/src/keyword/patterns/backend.patterns.js.map +0 -1
  197. package/dist/src/keyword/patterns/context.patterns.js.map +0 -1
  198. package/dist/src/keyword/patterns/data-science.patterns.js.map +0 -1
  199. package/dist/src/keyword/patterns/data.patterns.js.map +0 -1
  200. package/dist/src/keyword/patterns/devops.patterns.js.map +0 -1
  201. package/dist/src/keyword/patterns/explicit.patterns.js.map +0 -1
  202. package/dist/src/keyword/patterns/frontend.patterns.js.map +0 -1
  203. package/dist/src/keyword/patterns/index.js.map +0 -1
  204. package/dist/src/keyword/patterns/intent-pattern-checks.js.map +0 -1
  205. package/dist/src/keyword/patterns/intent-patterns.types.js.map +0 -1
  206. package/dist/src/keyword/patterns/meta-discussion.patterns.js.map +0 -1
  207. package/dist/src/keyword/patterns/mobile.patterns.js.map +0 -1
  208. package/dist/src/keyword/patterns/platform.patterns.js.map +0 -1
  209. package/dist/src/keyword/patterns/security.patterns.js.map +0 -1
  210. package/dist/src/keyword/patterns/systems.patterns.js.map +0 -1
  211. package/dist/src/keyword/patterns/test.patterns.js.map +0 -1
  212. package/dist/src/keyword/patterns/tooling.patterns.js.map +0 -1
  213. package/dist/src/keyword/primary-agent-resolver.js.map +0 -1
  214. package/dist/src/keyword/rule-filter.js.map +0 -1
  215. package/dist/src/keyword/srp-template.js.map +0 -1
  216. package/dist/src/keyword/strategies/__tests__/strategy-test.utils.js.map +0 -1
  217. package/dist/src/keyword/strategies/act-agent.strategy.js.map +0 -1
  218. package/dist/src/keyword/strategies/eval-agent.strategy.js.map +0 -1
  219. package/dist/src/keyword/strategies/index.js.map +0 -1
  220. package/dist/src/keyword/strategies/plan-agent.strategy.js.map +0 -1
  221. package/dist/src/keyword/strategies/resolution-strategy.interface.js.map +0 -1
  222. package/dist/src/keyword/taskmaestro-detector.js.map +0 -1
  223. package/dist/src/keyword/visual-data.builder.js.map +0 -1
  224. package/dist/src/main.js.map +0 -1
  225. package/dist/src/mcp/handlers/abstract-handler.js.map +0 -1
  226. package/dist/src/mcp/handlers/agent.handler.js.map +0 -1
  227. package/dist/src/mcp/handlers/base.handler.js.map +0 -1
  228. package/dist/src/mcp/handlers/briefing.handler.js.map +0 -1
  229. package/dist/src/mcp/handlers/checklist-context.handler.js.map +0 -1
  230. package/dist/src/mcp/handlers/config.handler.js.map +0 -1
  231. package/dist/src/mcp/handlers/context-archive.handler.js.map +0 -1
  232. package/dist/src/mcp/handlers/context-document.handler.js.map +0 -1
  233. package/dist/src/mcp/handlers/conventions.handler.js.map +0 -1
  234. package/dist/src/mcp/handlers/discussion.handler.js.map +0 -1
  235. package/dist/src/mcp/handlers/discussion.types.js.map +0 -1
  236. package/dist/src/mcp/handlers/impact.handler.js.map +0 -1
  237. package/dist/src/mcp/handlers/index.js.map +0 -1
  238. package/dist/src/mcp/handlers/mode.handler.js.map +0 -1
  239. package/dist/src/mcp/handlers/pipeline.handler.js.map +0 -1
  240. package/dist/src/mcp/handlers/plugin-validation.handler.js.map +0 -1
  241. package/dist/src/mcp/handlers/quality-report.handler.js.map +0 -1
  242. package/dist/src/mcp/handlers/release-check.handler.js.map +0 -1
  243. package/dist/src/mcp/handlers/resume.handler.js.map +0 -1
  244. package/dist/src/mcp/handlers/rule-impact.handler.js.map +0 -1
  245. package/dist/src/mcp/handlers/rule-insights.handler.js.map +0 -1
  246. package/dist/src/mcp/handlers/rules.handler.js.map +0 -1
  247. package/dist/src/mcp/handlers/skill.handler.js.map +0 -1
  248. package/dist/src/mcp/handlers/tui.handler.js.map +0 -1
  249. package/dist/src/mcp/mcp-serverless.js.map +0 -1
  250. package/dist/src/mcp/mcp.controller.js.map +0 -1
  251. package/dist/src/mcp/mcp.module.js.map +0 -1
  252. package/dist/src/mcp/mcp.service.js.map +0 -1
  253. package/dist/src/mcp/response.utils.js.map +0 -1
  254. package/dist/src/mcp/sse-auth.guard.js.map +0 -1
  255. package/dist/src/model/index.js.map +0 -1
  256. package/dist/src/model/model-resolver.service.js.map +0 -1
  257. package/dist/src/model/model.constants.js.map +0 -1
  258. package/dist/src/model/model.resolver.js.map +0 -1
  259. package/dist/src/model/model.types.js.map +0 -1
  260. package/dist/src/parallel-validation/extract-file-paths.js.map +0 -1
  261. package/dist/src/parallel-validation/index.js.map +0 -1
  262. package/dist/src/parallel-validation/overlap-matrix.js.map +0 -1
  263. package/dist/src/parallel-validation/parallel-validation.handler.js.map +0 -1
  264. package/dist/src/parallel-validation/parallel-validation.types.js.map +0 -1
  265. package/dist/src/parallel-validation/wave-splitter.js.map +0 -1
  266. package/dist/src/pipeline/index.js.map +0 -1
  267. package/dist/src/pipeline/pipeline.executors.js.map +0 -1
  268. package/dist/src/pipeline/pipeline.module.js.map +0 -1
  269. package/dist/src/pipeline/pipeline.service.js.map +0 -1
  270. package/dist/src/pipeline/pipeline.types.js.map +0 -1
  271. package/dist/src/plugin/plugin-installer.service.js.map +0 -1
  272. package/dist/src/plugin/plugin-manifest.schema.js.map +0 -1
  273. package/dist/src/plugin/plugin.module.js.map +0 -1
  274. package/dist/src/plugin/plugin.types.js.map +0 -1
  275. package/dist/src/plugin/registry-client.js.map +0 -1
  276. package/dist/src/rules/agent.schema.js.map +0 -1
  277. package/dist/src/rules/rule-event-collector.js.map +0 -1
  278. package/dist/src/rules/rule-event.types.js.map +0 -1
  279. package/dist/src/rules/rule-insights.service.js.map +0 -1
  280. package/dist/src/rules/rule-stats-writer.js.map +0 -1
  281. package/dist/src/rules/rule-tracker.js.map +0 -1
  282. package/dist/src/rules/rules-content.utils.js.map +0 -1
  283. package/dist/src/rules/rules.module.js.map +0 -1
  284. package/dist/src/rules/rules.service.js.map +0 -1
  285. package/dist/src/rules/rules.types.js.map +0 -1
  286. package/dist/src/rules/skill.schema.js.map +0 -1
  287. package/dist/src/shared/agent.utils.js.map +0 -1
  288. package/dist/src/shared/async.utils.js.map +0 -1
  289. package/dist/src/shared/client-type.js.map +0 -1
  290. package/dist/src/shared/error.utils.js.map +0 -1
  291. package/dist/src/shared/esm-import.js.map +0 -1
  292. package/dist/src/shared/event-bridge-reader.js.map +0 -1
  293. package/dist/src/shared/file.utils.js.map +0 -1
  294. package/dist/src/shared/filesystem.interface.js.map +0 -1
  295. package/dist/src/shared/format.utils.js.map +0 -1
  296. package/dist/src/shared/keyword-core.js.map +0 -1
  297. package/dist/src/shared/language.service.js.map +0 -1
  298. package/dist/src/shared/language.types.js.map +0 -1
  299. package/dist/src/shared/lru-cache.js.map +0 -1
  300. package/dist/src/shared/node-filesystem.service.js.map +0 -1
  301. package/dist/src/shared/path.utils.js.map +0 -1
  302. package/dist/src/shared/pattern-matcher.js.map +0 -1
  303. package/dist/src/shared/rules-core.js.map +0 -1
  304. package/dist/src/shared/security.utils.js.map +0 -1
  305. package/dist/src/shared/slug.utils.js.map +0 -1
  306. package/dist/src/shared/tui-bundle-path.js.map +0 -1
  307. package/dist/src/shared/validation.constants.js.map +0 -1
  308. package/dist/src/shared/verbosity.types.js.map +0 -1
  309. package/dist/src/shared/version.js.map +0 -1
  310. package/dist/src/shared/version.utils.js.map +0 -1
  311. package/dist/src/ship/file-specialist-mapper.js.map +0 -1
  312. package/dist/src/ship/quality-report.service.js.map +0 -1
  313. package/dist/src/ship/quality-report.types.js.map +0 -1
  314. package/dist/src/ship/ship.module.js.map +0 -1
  315. package/dist/src/skill/i18n/index.js.map +0 -1
  316. package/dist/src/skill/i18n/keywords.js.map +0 -1
  317. package/dist/src/skill/i18n/keywords.types.js.map +0 -1
  318. package/dist/src/skill/index.js.map +0 -1
  319. package/dist/src/skill/skill-content.utils.js.map +0 -1
  320. package/dist/src/skill/skill-recommendation.service.js.map +0 -1
  321. package/dist/src/skill/skill-recommendation.types.js.map +0 -1
  322. package/dist/src/skill/skill-triggers.js.map +0 -1
  323. package/dist/src/skill/skill.module.js.map +0 -1
  324. package/dist/src/state/index.js.map +0 -1
  325. package/dist/src/state/state.module.js.map +0 -1
  326. package/dist/src/state/state.service.js.map +0 -1
  327. package/dist/src/state/state.types.js.map +0 -1
  328. package/dist/src/tui/__perf__/memory-stability.spec.d.ts +0 -1
  329. package/dist/src/tui/__perf__/memory-stability.spec.js +0 -105
  330. package/dist/src/tui/__perf__/memory-stability.spec.js.map +0 -1
  331. package/dist/src/tui/__perf__/rendering-performance.spec.d.ts +0 -1
  332. package/dist/src/tui/__perf__/rendering-performance.spec.js +0 -163
  333. package/dist/src/tui/__perf__/rendering-performance.spec.js.map +0 -1
  334. package/dist/src/tui/cli-flags.js.map +0 -1
  335. package/dist/src/tui/components/ActModeScreen.js.map +0 -1
  336. package/dist/src/tui/components/ActivityVisualizer.js.map +0 -1
  337. package/dist/src/tui/components/ActivityVisualizer.spec.d.ts +0 -1
  338. package/dist/src/tui/components/ActivityVisualizer.spec.js +0 -91
  339. package/dist/src/tui/components/ActivityVisualizer.spec.js.map +0 -1
  340. package/dist/src/tui/components/AgentDiscussionPanel.js.map +0 -1
  341. package/dist/src/tui/components/AgentDiscussionPanel.spec.d.ts +0 -1
  342. package/dist/src/tui/components/AgentDiscussionPanel.spec.js +0 -229
  343. package/dist/src/tui/components/AgentDiscussionPanel.spec.js.map +0 -1
  344. package/dist/src/tui/components/ChecklistPanel.js.map +0 -1
  345. package/dist/src/tui/components/ChecklistPanel.spec.d.ts +0 -1
  346. package/dist/src/tui/components/ChecklistPanel.spec.js +0 -45
  347. package/dist/src/tui/components/ChecklistPanel.spec.js.map +0 -1
  348. package/dist/src/tui/components/ContextSection.js.map +0 -1
  349. package/dist/src/tui/components/EvalModeScreen.js.map +0 -1
  350. package/dist/src/tui/components/FlowMap.js.map +0 -1
  351. package/dist/src/tui/components/FlowMap.spec.d.ts +0 -1
  352. package/dist/src/tui/components/FlowMap.spec.js +0 -147
  353. package/dist/src/tui/components/FlowMap.spec.js.map +0 -1
  354. package/dist/src/tui/components/FocusedAgentPanel.js.map +0 -1
  355. package/dist/src/tui/components/FocusedAgentPanel.spec.d.ts +0 -1
  356. package/dist/src/tui/components/FocusedAgentPanel.spec.js +0 -183
  357. package/dist/src/tui/components/FocusedAgentPanel.spec.js.map +0 -1
  358. package/dist/src/tui/components/HeaderBar.js.map +0 -1
  359. package/dist/src/tui/components/HeaderBar.spec.d.ts +0 -1
  360. package/dist/src/tui/components/HeaderBar.spec.js +0 -96
  361. package/dist/src/tui/components/HeaderBar.spec.js.map +0 -1
  362. package/dist/src/tui/components/ModeScreenRouter.js.map +0 -1
  363. package/dist/src/tui/components/PlanModeScreen.js.map +0 -1
  364. package/dist/src/tui/components/SessionDashboard.js.map +0 -1
  365. package/dist/src/tui/components/SessionTabBar.js.map +0 -1
  366. package/dist/src/tui/components/SessionTabBar.spec.d.ts +0 -1
  367. package/dist/src/tui/components/SessionTabBar.spec.js +0 -59
  368. package/dist/src/tui/components/SessionTabBar.spec.js.map +0 -1
  369. package/dist/src/tui/components/StageHealthBar.js.map +0 -1
  370. package/dist/src/tui/components/StageHealthBar.spec.d.ts +0 -1
  371. package/dist/src/tui/components/StageHealthBar.spec.js +0 -99
  372. package/dist/src/tui/components/StageHealthBar.spec.js.map +0 -1
  373. package/dist/src/tui/components/act-screen.pure.js.map +0 -1
  374. package/dist/src/tui/components/activity-visualizer.pure.js.map +0 -1
  375. package/dist/src/tui/components/agent-discussion-panel.pure.js.map +0 -1
  376. package/dist/src/tui/components/checklist-panel.pure.js.map +0 -1
  377. package/dist/src/tui/components/context-section.pure.js.map +0 -1
  378. package/dist/src/tui/components/eval-screen.pure.js.map +0 -1
  379. package/dist/src/tui/components/flow-map.pure.js.map +0 -1
  380. package/dist/src/tui/components/focused-agent.pure.js.map +0 -1
  381. package/dist/src/tui/components/grid-layout.pure.js.map +0 -1
  382. package/dist/src/tui/components/index.js.map +0 -1
  383. package/dist/src/tui/components/live.pure.js.map +0 -1
  384. package/dist/src/tui/components/plan-screen.pure.js.map +0 -1
  385. package/dist/src/tui/components/session-dashboard.pure.js.map +0 -1
  386. package/dist/src/tui/components/session-tab-bar.pure.js.map +0 -1
  387. package/dist/src/tui/components/stage-health.pure.js.map +0 -1
  388. package/dist/src/tui/dashboard-app.js.map +0 -1
  389. package/dist/src/tui/dashboard-app.spec.d.ts +0 -1
  390. package/dist/src/tui/dashboard-app.spec.js +0 -158
  391. package/dist/src/tui/dashboard-app.spec.js.map +0 -1
  392. package/dist/src/tui/dashboard-types.js.map +0 -1
  393. package/dist/src/tui/ensure-tui-ready.js.map +0 -1
  394. package/dist/src/tui/eventbus-ui.integration.spec.d.ts +0 -1
  395. package/dist/src/tui/eventbus-ui.integration.spec.js +0 -577
  396. package/dist/src/tui/eventbus-ui.integration.spec.js.map +0 -1
  397. package/dist/src/tui/events/agent-metadata.service.js.map +0 -1
  398. package/dist/src/tui/events/agent-metadata.types.js.map +0 -1
  399. package/dist/src/tui/events/event-bus.js.map +0 -1
  400. package/dist/src/tui/events/events.module.js.map +0 -1
  401. package/dist/src/tui/events/hud-file-bridge.js.map +0 -1
  402. package/dist/src/tui/events/index.js.map +0 -1
  403. package/dist/src/tui/events/parse-agent.js.map +0 -1
  404. package/dist/src/tui/events/parse-tool-response.js.map +0 -1
  405. package/dist/src/tui/events/response-event-extractor.js.map +0 -1
  406. package/dist/src/tui/events/tui-interceptor.js.map +0 -1
  407. package/dist/src/tui/events/types.js.map +0 -1
  408. package/dist/src/tui/hooks/index.js.map +0 -1
  409. package/dist/src/tui/hooks/use-dashboard-state.js.map +0 -1
  410. package/dist/src/tui/hooks/use-focus-agent.js.map +0 -1
  411. package/dist/src/tui/hooks/use-multi-session-state.js.map +0 -1
  412. package/dist/src/tui/hooks/use-terminal-size.js.map +0 -1
  413. package/dist/src/tui/hooks/use-tick.js.map +0 -1
  414. package/dist/src/tui/hooks/use-tick.spec.d.ts +0 -1
  415. package/dist/src/tui/hooks/use-tick.spec.js +0 -70
  416. package/dist/src/tui/hooks/use-tick.spec.js.map +0 -1
  417. package/dist/src/tui/index.js.map +0 -1
  418. package/dist/src/tui/ipc/index.js.map +0 -1
  419. package/dist/src/tui/ipc/instance-registry.js.map +0 -1
  420. package/dist/src/tui/ipc/ipc-bridge.js.map +0 -1
  421. package/dist/src/tui/ipc/ipc-client.js.map +0 -1
  422. package/dist/src/tui/ipc/ipc-debug.js.map +0 -1
  423. package/dist/src/tui/ipc/ipc-server.js.map +0 -1
  424. package/dist/src/tui/ipc/ipc-state-cache.js.map +0 -1
  425. package/dist/src/tui/ipc/ipc.types.js.map +0 -1
  426. package/dist/src/tui/ipc/multi-session-manager.js.map +0 -1
  427. package/dist/src/tui/ipc/shutdown-manager.js.map +0 -1
  428. package/dist/src/tui/ipc/test-utils.js.map +0 -1
  429. package/dist/src/tui/ipc/tui-auto-launcher.js.map +0 -1
  430. package/dist/src/tui/multi-session-app.js.map +0 -1
  431. package/dist/src/tui/multi-session-app.spec.d.ts +0 -1
  432. package/dist/src/tui/multi-session-app.spec.js +0 -95
  433. package/dist/src/tui/multi-session-app.spec.js.map +0 -1
  434. package/dist/src/tui/testing/tui-test-utils.js.map +0 -1
  435. package/dist/src/tui/transport-tui.integration.spec.d.ts +0 -1
  436. package/dist/src/tui/transport-tui.integration.spec.js +0 -189
  437. package/dist/src/tui/transport-tui.integration.spec.js.map +0 -1
  438. package/dist/src/tui/tui-config.js.map +0 -1
  439. package/dist/src/tui/types.js.map +0 -1
  440. package/dist/src/tui/utils/color-buffer.js.map +0 -1
  441. package/dist/src/tui/utils/colors.js.map +0 -1
  442. package/dist/src/tui/utils/display-width.js.map +0 -1
  443. package/dist/src/tui/utils/edge-router.js.map +0 -1
  444. package/dist/src/tui/utils/icons.js.map +0 -1
  445. package/dist/src/tui/utils/index.js.map +0 -1
  446. package/dist/src/tui/utils/theme.js.map +0 -1
  447. package/dist/tsconfig.build.tsbuildinfo +0 -1
@@ -31,6 +31,40 @@ const MODE_TASK_PREFIXES = {
31
31
  EVAL: 'review',
32
32
  AUTO: 'autonomous execution',
33
33
  };
34
+ const MAX_LIST_ITEMS = 10;
35
+ function trimList(items, maxItems = MAX_LIST_ITEMS) {
36
+ if (items.length <= maxItems)
37
+ return items;
38
+ const remaining = items.length - maxItems;
39
+ return [...items.slice(0, maxItems), `... and ${remaining} more`];
40
+ }
41
+ function renderValueAsText(value, sections, indent = '') {
42
+ if (Array.isArray(value)) {
43
+ for (const item of value) {
44
+ if (item && typeof item === 'object') {
45
+ renderValueAsText(item, sections, indent);
46
+ }
47
+ else {
48
+ sections.push(`${indent}- ${item}`);
49
+ }
50
+ }
51
+ }
52
+ else if (value && typeof value === 'object') {
53
+ for (const [key, val] of Object.entries(value)) {
54
+ if (Array.isArray(val)) {
55
+ sections.push(`${indent}- **${key}**:`);
56
+ renderValueAsText(val, sections, indent + ' ');
57
+ }
58
+ else if (val && typeof val === 'object') {
59
+ sections.push(`${indent}- **${key}**:`);
60
+ renderValueAsText(val, sections, indent + ' ');
61
+ }
62
+ else {
63
+ sections.push(`${indent}- **${key}**: ${val}`);
64
+ }
65
+ }
66
+ }
67
+ }
34
68
  function buildAgentSystemPrompt(agentProfile, context) {
35
69
  const sections = [];
36
70
  sections.push(`# ${agentProfile.name}`);
@@ -52,11 +86,110 @@ function buildAgentSystemPrompt(agentProfile, context) {
52
86
  }
53
87
  sections.push('');
54
88
  }
89
+ const rawProfile = agentProfile;
90
+ const activation = rawProfile.activation;
91
+ const activationChecklist = activation?.mandatory_checklist;
92
+ if (activationChecklist &&
93
+ typeof activationChecklist === 'object' &&
94
+ !Array.isArray(activationChecklist)) {
95
+ sections.push('## Mandatory Checklist');
96
+ const items = [];
97
+ for (const [name, item] of Object.entries(activationChecklist)) {
98
+ if (item && typeof item === 'object' && 'rule' in item) {
99
+ items.push(`- [${name}] ${item.rule}`);
100
+ }
101
+ }
102
+ for (const line of trimList(items)) {
103
+ sections.push(line);
104
+ }
105
+ sections.push('');
106
+ }
107
+ else if (Array.isArray(rawProfile.mandatory_checklist) &&
108
+ rawProfile.mandatory_checklist.length) {
109
+ sections.push('## Mandatory Checklist');
110
+ const items = rawProfile.mandatory_checklist.map((item) => `- ${item}`);
111
+ for (const line of trimList(items)) {
112
+ sections.push(line);
113
+ }
114
+ sections.push('');
115
+ }
116
+ const comm = rawProfile.communication;
117
+ if (comm?.language) {
118
+ sections.push('## Communication');
119
+ sections.push(`IMPORTANT: Always respond in ${comm.language}.`);
120
+ sections.push('');
121
+ }
122
+ const skills = rawProfile.skills;
123
+ if (skills?.required?.length) {
124
+ sections.push('## Required Skills');
125
+ for (const s of skills.required) {
126
+ sections.push(`- **${s.name}**: ${s.purpose} (when: ${s.when})`);
127
+ }
128
+ sections.push('');
129
+ }
130
+ if (skills?.recommended?.length) {
131
+ sections.push('## Recommended Skills');
132
+ for (const s of skills.recommended) {
133
+ sections.push(`- **${s.name}**: ${s.purpose} (when: ${s.when})`);
134
+ }
135
+ sections.push('');
136
+ }
55
137
  sections.push('## Current Mode');
56
138
  sections.push(`Mode: ${context.mode}`);
57
139
  sections.push('');
58
- sections.push(MODE_INSTRUCTIONS[context.mode]);
59
- sections.push('');
140
+ const modesObj = rawProfile.modes;
141
+ const modeKey = context.mode.toLowerCase();
142
+ const agentModeConfig = modesObj?.[modeKey];
143
+ if (agentModeConfig && typeof agentModeConfig === 'object') {
144
+ sections.push('## Mode-Specific Instructions');
145
+ renderValueAsText(agentModeConfig, sections);
146
+ sections.push('');
147
+ }
148
+ else {
149
+ sections.push(MODE_INSTRUCTIONS[context.mode]);
150
+ sections.push('');
151
+ }
152
+ const verificationGuide = activation?.verification_guide ?? rawProfile.verification_guide;
153
+ if (Array.isArray(verificationGuide) && verificationGuide.length) {
154
+ sections.push('## Verification Guide');
155
+ const items = verificationGuide.map((step) => `- ${step}`);
156
+ for (const line of trimList(items)) {
157
+ sections.push(line);
158
+ }
159
+ sections.push('');
160
+ }
161
+ else if (verificationGuide && typeof verificationGuide === 'object') {
162
+ sections.push('## Verification Guide');
163
+ const items = [];
164
+ for (const [key, desc] of Object.entries(verificationGuide)) {
165
+ items.push(`- **${key}**: ${desc}`);
166
+ }
167
+ for (const line of trimList(items)) {
168
+ sections.push(line);
169
+ }
170
+ sections.push('');
171
+ }
172
+ const executionOrder = activation?.execution_order;
173
+ if (executionOrder && typeof executionOrder === 'object' && !Array.isArray(executionOrder)) {
174
+ sections.push('## Execution Order');
175
+ for (const [phase, steps] of Object.entries(executionOrder)) {
176
+ if (Array.isArray(steps) && steps.length) {
177
+ sections.push(`### ${phase}`);
178
+ for (const line of trimList(steps)) {
179
+ sections.push(line);
180
+ }
181
+ }
182
+ }
183
+ sections.push('');
184
+ }
185
+ else if (Array.isArray(executionOrder) && executionOrder.length) {
186
+ sections.push('## Execution Order');
187
+ const items = executionOrder.map((step, i) => `${i + 1}. ${step}`);
188
+ for (const line of trimList(items)) {
189
+ sections.push(line);
190
+ }
191
+ sections.push('');
192
+ }
60
193
  sections.push('## Task Context');
61
194
  if (context.taskDescription) {
62
195
  sections.push(`Task: ${context.taskDescription}`);
@@ -0,0 +1,3 @@
1
+ import type { AgentStack } from './agent.types';
2
+ export declare function loadAgentStack(filePath: string): Promise<AgentStack>;
3
+ export declare function loadAgentStacks(dirPath: string): Promise<AgentStack[]>;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadAgentStack = loadAgentStack;
4
+ exports.loadAgentStacks = loadAgentStacks;
5
+ const promises_1 = require("fs/promises");
6
+ const path_1 = require("path");
7
+ const agent_stack_schema_1 = require("./agent-stack.schema");
8
+ async function loadAgentStack(filePath) {
9
+ const raw = await (0, promises_1.readFile)(filePath, 'utf-8');
10
+ const data = JSON.parse(raw);
11
+ const result = agent_stack_schema_1.AgentStackSchema.safeParse(data);
12
+ if (!result.success) {
13
+ const errors = result.error.issues.map(i => `${i.path.join('.')}: ${i.message}`).join(', ');
14
+ throw new Error(`Invalid agent stack in ${filePath}: ${errors}`);
15
+ }
16
+ return result.data;
17
+ }
18
+ async function loadAgentStacks(dirPath) {
19
+ let entries;
20
+ try {
21
+ entries = await (0, promises_1.readdir)(dirPath, { withFileTypes: true });
22
+ }
23
+ catch {
24
+ return [];
25
+ }
26
+ const jsonFiles = entries.filter(e => e.isFile() && e.name.endsWith('.json'));
27
+ const stacks = [];
28
+ for (const entry of jsonFiles) {
29
+ try {
30
+ const stack = await loadAgentStack((0, path_1.join)(dirPath, entry.name));
31
+ stacks.push(stack);
32
+ }
33
+ catch {
34
+ }
35
+ }
36
+ return stacks;
37
+ }
38
+ //# sourceMappingURL=agent-stack.loader.js.map
@@ -0,0 +1,14 @@
1
+ import * as z from 'zod';
2
+ export declare const AgentStackSchema: z.ZodObject<{
3
+ name: z.ZodString;
4
+ description: z.ZodString;
5
+ category: z.ZodString;
6
+ tags: z.ZodArray<z.ZodString>;
7
+ primary_agent: z.ZodString;
8
+ specialist_agents: z.ZodArray<z.ZodString>;
9
+ recommended_for: z.ZodOptional<z.ZodObject<{
10
+ file_patterns: z.ZodOptional<z.ZodArray<z.ZodString>>;
11
+ modes: z.ZodOptional<z.ZodArray<z.ZodString>>;
12
+ }, z.z.core.$strip>>;
13
+ }, z.z.core.$strip>;
14
+ export type ValidatedAgentStack = z.infer<typeof AgentStackSchema>;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AgentStackSchema = void 0;
4
+ const z = require("zod");
5
+ exports.AgentStackSchema = z.object({
6
+ name: z.string(),
7
+ description: z.string(),
8
+ category: z.string(),
9
+ tags: z.array(z.string()),
10
+ primary_agent: z.string(),
11
+ specialist_agents: z.array(z.string()),
12
+ recommended_for: z
13
+ .object({
14
+ file_patterns: z.array(z.string()).optional(),
15
+ modes: z.array(z.string()).optional(),
16
+ })
17
+ .optional(),
18
+ });
19
+ //# sourceMappingURL=agent-stack.schema.js.map
@@ -0,0 +1,15 @@
1
+ import { RulesService } from '../rules/rules.service';
2
+ import { ConfigService } from '../config/config.service';
3
+ import type { AgentStack, AgentStackSummary } from './agent.types';
4
+ export declare class AgentStackService {
5
+ private readonly rulesService;
6
+ private readonly configService;
7
+ private readonly logger;
8
+ constructor(rulesService: RulesService, configService: ConfigService);
9
+ listStacks(category?: string): Promise<AgentStackSummary[]>;
10
+ resolveStack(stackName: string): Promise<AgentStack>;
11
+ private loadStacksFromDir;
12
+ private loadStackFile;
13
+ private isValidStack;
14
+ private toSummary;
15
+ }
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var AgentStackService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.AgentStackService = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const fs = require("fs/promises");
16
+ const path = require("path");
17
+ const rules_service_1 = require("../rules/rules.service");
18
+ const config_service_1 = require("../config/config.service");
19
+ const AGENT_STACKS_DIR = 'agent-stacks';
20
+ const CUSTOM_STACKS_DIR = '.codingbuddy/agent-stacks';
21
+ let AgentStackService = AgentStackService_1 = class AgentStackService {
22
+ constructor(rulesService, configService) {
23
+ this.rulesService = rulesService;
24
+ this.configService = configService;
25
+ this.logger = new common_1.Logger(AgentStackService_1.name);
26
+ }
27
+ async listStacks(category) {
28
+ const stackMap = new Map();
29
+ const defaultDir = path.join(this.rulesService.getRulesDir(), AGENT_STACKS_DIR);
30
+ const defaultStacks = await this.loadStacksFromDir(defaultDir);
31
+ for (const stack of defaultStacks) {
32
+ stackMap.set(stack.name, stack);
33
+ }
34
+ const customDir = path.join(this.configService.getProjectRoot(), CUSTOM_STACKS_DIR);
35
+ const customStacks = await this.loadStacksFromDir(customDir);
36
+ for (const stack of customStacks) {
37
+ stackMap.set(stack.name, stack);
38
+ }
39
+ let stacks = Array.from(stackMap.values());
40
+ if (category) {
41
+ stacks = stacks.filter(s => s.category === category);
42
+ }
43
+ return stacks.map(this.toSummary);
44
+ }
45
+ async resolveStack(stackName) {
46
+ const customDir = path.join(this.configService.getProjectRoot(), CUSTOM_STACKS_DIR);
47
+ const customStack = await this.loadStackFile(path.join(customDir, `${stackName}.json`));
48
+ if (customStack)
49
+ return customStack;
50
+ const defaultDir = path.join(this.rulesService.getRulesDir(), AGENT_STACKS_DIR);
51
+ const defaultStack = await this.loadStackFile(path.join(defaultDir, `${stackName}.json`));
52
+ if (defaultStack)
53
+ return defaultStack;
54
+ throw new Error(`Agent stack '${stackName}' not found`);
55
+ }
56
+ async loadStacksFromDir(dirPath) {
57
+ let entries;
58
+ try {
59
+ entries = (await fs.readdir(dirPath));
60
+ }
61
+ catch {
62
+ return [];
63
+ }
64
+ const stacks = [];
65
+ for (const entry of entries) {
66
+ if (!entry.endsWith('.json'))
67
+ continue;
68
+ const stack = await this.loadStackFile(path.join(dirPath, entry));
69
+ if (stack)
70
+ stacks.push(stack);
71
+ }
72
+ return stacks;
73
+ }
74
+ async loadStackFile(filePath) {
75
+ try {
76
+ const content = await fs.readFile(filePath, 'utf-8');
77
+ const parsed = JSON.parse(content);
78
+ if (!this.isValidStack(parsed)) {
79
+ this.logger.warn(`Invalid agent stack file (missing required fields): ${filePath}`);
80
+ return null;
81
+ }
82
+ return parsed;
83
+ }
84
+ catch {
85
+ return null;
86
+ }
87
+ }
88
+ isValidStack(obj) {
89
+ return (typeof obj.name === 'string' &&
90
+ typeof obj.description === 'string' &&
91
+ typeof obj.category === 'string' &&
92
+ typeof obj.primary_agent === 'string' &&
93
+ Array.isArray(obj.specialist_agents));
94
+ }
95
+ toSummary(stack) {
96
+ return {
97
+ name: stack.name,
98
+ description: stack.description,
99
+ category: stack.category,
100
+ primary_agent: stack.primary_agent,
101
+ specialist_count: stack.specialist_agents.length,
102
+ tags: stack.tags,
103
+ };
104
+ }
105
+ };
106
+ exports.AgentStackService = AgentStackService;
107
+ exports.AgentStackService = AgentStackService = AgentStackService_1 = __decorate([
108
+ (0, common_1.Injectable)(),
109
+ __metadata("design:paramtypes", [rules_service_1.RulesService,
110
+ config_service_1.ConfigService])
111
+ ], AgentStackService);
112
+ //# sourceMappingURL=agent-stack.service.js.map
@@ -9,6 +9,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.AgentModule = void 0;
10
10
  const common_1 = require("@nestjs/common");
11
11
  const agent_service_1 = require("./agent.service");
12
+ const agent_stack_service_1 = require("./agent-stack.service");
13
+ const council_preset_service_1 = require("./council-preset.service");
14
+ const teams_capability_service_1 = require("./teams-capability.service");
12
15
  const rules_module_1 = require("../rules/rules.module");
13
16
  const custom_1 = require("../custom");
14
17
  const config_module_1 = require("../config/config.module");
@@ -18,8 +21,8 @@ exports.AgentModule = AgentModule;
18
21
  exports.AgentModule = AgentModule = __decorate([
19
22
  (0, common_1.Module)({
20
23
  imports: [rules_module_1.RulesModule, custom_1.CustomModule, config_module_1.CodingBuddyConfigModule],
21
- providers: [agent_service_1.AgentService],
22
- exports: [agent_service_1.AgentService],
24
+ providers: [agent_service_1.AgentService, agent_stack_service_1.AgentStackService, council_preset_service_1.CouncilPresetService, teams_capability_service_1.TeamsCapabilityService],
25
+ exports: [agent_service_1.AgentService, agent_stack_service_1.AgentStackService, council_preset_service_1.CouncilPresetService, teams_capability_service_1.TeamsCapabilityService],
23
26
  })
24
27
  ], AgentModule);
25
28
  //# sourceMappingURL=agent.module.js.map
@@ -1,6 +1,7 @@
1
1
  import { RulesService } from '../rules/rules.service';
2
2
  import { CustomService } from '../custom';
3
3
  import { ConfigService } from '../config/config.service';
4
+ import { TeamsCapabilityService } from './teams-capability.service';
4
5
  import type { Mode } from '../keyword/keyword.types';
5
6
  import type { AgentProfile } from '../rules/rules.types';
6
7
  import type { AgentContext, AgentSystemPrompt, InlineAgentDefinition, ParallelAgentSet, DispatchAgentsInput, DispatchResult } from './agent.types';
@@ -9,8 +10,9 @@ export declare class AgentService {
9
10
  private readonly rulesService;
10
11
  private readonly customService;
11
12
  private readonly configService;
13
+ private readonly teamsCapability;
12
14
  private readonly logger;
13
- constructor(rulesService: RulesService, customService: CustomService, configService: ConfigService);
15
+ constructor(rulesService: RulesService, customService: CustomService, configService: ConfigService, teamsCapability: TeamsCapabilityService);
14
16
  getAgentSystemPrompt(agentName: string, context: AgentContext, inlineAgents?: Record<string, InlineAgentDefinition>): Promise<AgentSystemPrompt>;
15
17
  prepareParallelAgents(mode: Mode, specialists: string[], targetFiles?: string[], sharedContext?: string, verbosity?: VerbosityLevel, inlineAgents?: Record<string, InlineAgentDefinition>): Promise<ParallelAgentSet>;
16
18
  private loadAgents;
@@ -19,8 +21,13 @@ export declare class AgentService {
19
21
  getRecommendedAgents(modeDefaults: string[], files: string[]): string[];
20
22
  private addFilePatternAgents;
21
23
  dispatchAgents(input: DispatchAgentsInput): Promise<DispatchResult>;
24
+ private dispatchTaskmaestro;
25
+ private dispatchTeams;
26
+ private dispatchSubagent;
27
+ private dispatchComposable;
22
28
  private buildTaskmaestroPrompt;
23
29
  private buildTaskmaestroHint;
24
30
  private buildTeamsHint;
31
+ private buildComposableHint;
25
32
  resolveAgent(agentName: string, inlineAgents?: Record<string, InlineAgentDefinition>): Promise<AgentProfile>;
26
33
  }
@@ -15,15 +15,18 @@ const common_1 = require("@nestjs/common");
15
15
  const rules_service_1 = require("../rules/rules.service");
16
16
  const custom_1 = require("../custom");
17
17
  const config_service_1 = require("../config/config.service");
18
+ const teams_capability_service_1 = require("./teams-capability.service");
18
19
  const agent_types_1 = require("./agent.types");
19
20
  const agent_prompt_builder_1 = require("./agent-prompt.builder");
20
21
  const agent_summary_utils_1 = require("./agent-summary.utils");
22
+ const execution_plan_1 = require("./execution-plan");
21
23
  const verbosity_types_1 = require("../shared/verbosity.types");
22
24
  let AgentService = AgentService_1 = class AgentService {
23
- constructor(rulesService, customService, configService) {
25
+ constructor(rulesService, customService, configService, teamsCapability) {
24
26
  this.rulesService = rulesService;
25
27
  this.customService = customService;
26
28
  this.configService = configService;
29
+ this.teamsCapability = teamsCapability;
27
30
  this.logger = new common_1.Logger(AgentService_1.name);
28
31
  }
29
32
  async getAgentSystemPrompt(agentName, context, inlineAgents) {
@@ -146,48 +149,64 @@ let AgentService = AgentService_1 = class AgentService {
146
149
  result.failedAgents = [...(result.failedAgents || []), { id: input.primaryAgent, reason }];
147
150
  }
148
151
  }
152
+ if (input.executionStrategy === 'taskmaestro+teams' && input.specialists?.length) {
153
+ return this.dispatchComposable(input, context, result);
154
+ }
149
155
  if (input.executionStrategy === 'taskmaestro' && input.specialists?.length) {
150
- const uniqueSpecialists = Array.from(new Set(input.specialists));
151
- const { agents, failedAgents } = await this.loadAgents(uniqueSpecialists, context, true, input.inlineAgents);
152
- const assignments = agents.map(agent => ({
153
- name: agent.id,
154
- displayName: agent.displayName,
155
- prompt: this.buildTaskmaestroPrompt(agent, input),
156
- }));
157
- return {
158
- primaryAgent: result.primaryAgent,
159
- taskmaestro: {
160
- sessionName: `${(input.mode ?? 'eval').toLowerCase()}-specialists`,
161
- paneCount: assignments.length,
162
- assignments,
163
- },
164
- executionStrategy: 'taskmaestro',
165
- executionHint: this.buildTaskmaestroHint(assignments.length),
166
- failedAgents: failedAgents.length > 0 ? failedAgents : result.failedAgents,
167
- };
156
+ return this.dispatchTaskmaestro(input, context, result);
168
157
  }
169
158
  if (input.executionStrategy === 'teams' && input.specialists?.length) {
170
- const uniqueSpecialists = Array.from(new Set(input.specialists));
171
- const teamName = `${(input.mode ?? 'eval').toLowerCase()}-specialists`;
172
- const { agents, failedAgents } = await this.loadAgents(uniqueSpecialists, context, true, input.inlineAgents);
173
- const teammates = agents.map(agent => ({
174
- name: agent.id,
175
- subagent_type: 'general-purpose',
176
- team_name: teamName,
177
- prompt: agent.taskPrompt || `Perform ${agent.displayName} analysis in ${input.mode} mode`,
178
- }));
179
- return {
180
- primaryAgent: result.primaryAgent,
181
- teams: {
182
- team_name: teamName,
183
- description: `${input.mode} mode specialist team`,
184
- teammates,
185
- },
186
- executionStrategy: 'teams',
187
- executionHint: this.buildTeamsHint(teamName, teammates.length),
188
- failedAgents: failedAgents.length > 0 ? failedAgents : result.failedAgents,
189
- };
159
+ return this.dispatchTeams(input, context, result);
190
160
  }
161
+ return this.dispatchSubagent(input, context, result);
162
+ }
163
+ async dispatchTaskmaestro(input, context, result) {
164
+ const uniqueSpecialists = Array.from(new Set(input.specialists));
165
+ const { agents, failedAgents } = await this.loadAgents(uniqueSpecialists, context, true, input.inlineAgents);
166
+ const assignments = agents.map(agent => ({
167
+ name: agent.id,
168
+ displayName: agent.displayName,
169
+ prompt: this.buildTaskmaestroPrompt(agent, input),
170
+ }));
171
+ const tmDispatch = {
172
+ sessionName: `${(input.mode ?? 'eval').toLowerCase()}-specialists`,
173
+ paneCount: assignments.length,
174
+ assignments,
175
+ };
176
+ return {
177
+ primaryAgent: result.primaryAgent,
178
+ taskmaestro: tmDispatch,
179
+ executionStrategy: 'taskmaestro',
180
+ executionHint: this.buildTaskmaestroHint(assignments.length),
181
+ executionPlan: (0, execution_plan_1.buildSimplePlan)((0, execution_plan_1.taskmaestroLayer)(tmDispatch)),
182
+ failedAgents: failedAgents.length > 0 ? failedAgents : result.failedAgents,
183
+ };
184
+ }
185
+ async dispatchTeams(input, context, result) {
186
+ const uniqueSpecialists = Array.from(new Set(input.specialists));
187
+ const teamName = `${(input.mode ?? 'eval').toLowerCase()}-specialists`;
188
+ const { agents, failedAgents } = await this.loadAgents(uniqueSpecialists, context, true, input.inlineAgents);
189
+ const teammates = agents.map(agent => ({
190
+ name: agent.id,
191
+ subagent_type: 'general-purpose',
192
+ team_name: teamName,
193
+ prompt: agent.taskPrompt || `Perform ${agent.displayName} analysis in ${input.mode} mode`,
194
+ }));
195
+ const teamsConfig = {
196
+ team_name: teamName,
197
+ description: `${input.mode} mode specialist team`,
198
+ teammates,
199
+ };
200
+ return {
201
+ primaryAgent: result.primaryAgent,
202
+ teams: teamsConfig,
203
+ executionStrategy: 'teams',
204
+ executionHint: this.buildTeamsHint(teamName, teammates.length),
205
+ executionPlan: (0, execution_plan_1.buildSimplePlan)((0, execution_plan_1.teamsLayer)(teamsConfig)),
206
+ failedAgents: failedAgents.length > 0 ? failedAgents : result.failedAgents,
207
+ };
208
+ }
209
+ async dispatchSubagent(input, context, result) {
191
210
  if (input.includeParallel && input.specialists?.length) {
192
211
  const uniqueSpecialists = Array.from(new Set(input.specialists));
193
212
  const { agents, failedAgents } = await this.loadAgents(uniqueSpecialists, context, true, input.inlineAgents);
@@ -205,10 +224,63 @@ let AgentService = AgentService_1 = class AgentService {
205
224
  if (failedAgents.length > 0) {
206
225
  result.failedAgents = failedAgents;
207
226
  }
227
+ result.executionPlan = (0, execution_plan_1.buildSimplePlan)((0, execution_plan_1.subagentLayer)(result.parallelAgents));
208
228
  }
209
229
  result.executionStrategy = 'subagent';
210
230
  return result;
211
231
  }
232
+ async dispatchComposable(input, context, result) {
233
+ const teamsAvailable = await this.teamsCapability.isAvailable();
234
+ if (!teamsAvailable) {
235
+ this.logger.debug('Teams capability disabled — falling back to pure TaskMaestro for composable dispatch');
236
+ return this.dispatchTaskmaestro(input, context, result);
237
+ }
238
+ const uniqueSpecialists = Array.from(new Set(input.specialists));
239
+ const teamName = `${(input.mode ?? 'eval').toLowerCase()}-specialists`;
240
+ const { agents, failedAgents } = await this.loadAgents(uniqueSpecialists, context, true, input.inlineAgents);
241
+ const assignments = agents.map(agent => ({
242
+ name: agent.id,
243
+ displayName: agent.displayName,
244
+ prompt: this.buildTaskmaestroPrompt(agent, input),
245
+ innerCoordination: {
246
+ type: 'teams',
247
+ teamSpec: {
248
+ team_name: teamName,
249
+ description: `${input.mode} mode specialist team (coordinated within TaskMaestro panes)`,
250
+ },
251
+ teammates: agents.map(a => ({
252
+ name: a.id,
253
+ subagent_type: 'general-purpose',
254
+ })),
255
+ },
256
+ }));
257
+ const tmDispatch = {
258
+ sessionName: teamName,
259
+ paneCount: assignments.length,
260
+ assignments,
261
+ };
262
+ const teammates = agents.map(agent => ({
263
+ name: agent.id,
264
+ subagent_type: 'general-purpose',
265
+ team_name: teamName,
266
+ prompt: agent.taskPrompt || `Perform ${agent.displayName} analysis in ${input.mode} mode`,
267
+ }));
268
+ const teamsConfig = {
269
+ team_name: teamName,
270
+ description: `${input.mode} mode specialist team (coordinated within TaskMaestro panes)`,
271
+ teammates,
272
+ };
273
+ const executionPlan = (0, execution_plan_1.buildNestedPlan)((0, execution_plan_1.taskmaestroLayer)(tmDispatch), (0, execution_plan_1.teamsLayer)(teamsConfig));
274
+ return {
275
+ primaryAgent: result.primaryAgent,
276
+ taskmaestro: tmDispatch,
277
+ teams: teamsConfig,
278
+ executionStrategy: 'taskmaestro+teams',
279
+ executionHint: this.buildComposableHint(teamName, assignments.length),
280
+ executionPlan,
281
+ failedAgents: failedAgents.length > 0 ? failedAgents : result.failedAgents,
282
+ };
283
+ }
212
284
  buildTaskmaestroPrompt(agent, input) {
213
285
  const taskContext = input.taskDescription ? `\n\n**Task:** ${input.taskDescription}` : '';
214
286
  const fileContext = input.targetFiles?.length
@@ -241,6 +313,19 @@ When done, provide a summary of all findings.`;
241
313
  4. Monitor via TaskList — teammates coordinate via shared task list
242
314
  5. Collect results when all teammates go idle
243
315
  6. Shutdown teammates via SendMessage with shutdown_request`;
316
+ }
317
+ buildComposableHint(teamName, paneCount) {
318
+ return `Composable execution (TaskMaestro + Teams):
319
+ Outer — TaskMaestro manages ${paneCount} tmux pane(s):
320
+ 1. /taskmaestro start --panes ${paneCount}
321
+ 2. Assign each pane its specialist prompt
322
+ Inner — Teams coordinates within panes:
323
+ 1. Each pane worker uses TeamCreate: { team_name: "${teamName}" }
324
+ 2. Workers share task list for coordination
325
+ 3. Monitor via TaskList and /taskmaestro status
326
+ Teardown:
327
+ 1. Shutdown teammates via SendMessage with shutdown_request
328
+ 2. /taskmaestro stop all`;
244
329
  }
245
330
  async resolveAgent(agentName, inlineAgents) {
246
331
  if (inlineAgents?.[agentName]) {
@@ -279,6 +364,7 @@ exports.AgentService = AgentService = AgentService_1 = __decorate([
279
364
  (0, common_1.Injectable)(),
280
365
  __metadata("design:paramtypes", [rules_service_1.RulesService,
281
366
  custom_1.CustomService,
282
- config_service_1.ConfigService])
367
+ config_service_1.ConfigService,
368
+ teams_capability_service_1.TeamsCapabilityService])
283
369
  ], AgentService);
284
370
  //# sourceMappingURL=agent.service.js.map