codingbuddy 5.2.0 → 5.4.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 (472) 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 +9 -0
  21. package/dist/src/agent/index.js +9 -0
  22. package/dist/src/agent/stack-matcher.d.ts +13 -0
  23. package/dist/src/agent/stack-matcher.js +81 -0
  24. package/dist/src/agent/teams-capability.service.d.ts +11 -0
  25. package/dist/src/agent/teams-capability.service.js +74 -0
  26. package/dist/src/agent/teams-capability.types.d.ts +6 -0
  27. package/dist/src/agent/teams-capability.types.js +3 -0
  28. package/dist/src/cli/cli.d.ts +4 -3
  29. package/dist/src/cli/cli.js +54 -0
  30. package/dist/src/cli/cli.types.d.ts +4 -0
  31. package/dist/src/cli/completion/completion.d.ts +16 -0
  32. package/dist/src/cli/completion/completion.js +276 -0
  33. package/dist/src/cli/completion/index.d.ts +2 -0
  34. package/dist/src/cli/completion/index.js +7 -0
  35. package/dist/src/cli/plugin/create-plugin.command.d.ts +21 -0
  36. package/dist/src/cli/plugin/create-plugin.command.js +151 -0
  37. package/dist/src/cli/run-tui.d.ts +1 -0
  38. package/dist/src/cli/run-tui.js +7 -1
  39. package/dist/src/config/config.schema.d.ts +3 -0
  40. package/dist/src/config/config.schema.js +5 -0
  41. package/dist/src/keyword/keyword.module.js +39 -2
  42. package/dist/src/keyword/keyword.service.d.ts +5 -0
  43. package/dist/src/keyword/keyword.service.js +90 -6
  44. package/dist/src/keyword/keyword.types.d.ts +30 -0
  45. package/dist/src/keyword/permission-forecast.d.ts +2 -0
  46. package/dist/src/keyword/permission-forecast.js +94 -0
  47. package/dist/src/mcp/handlers/agent.handler.d.ts +6 -1
  48. package/dist/src/mcp/handlers/agent.handler.js +81 -8
  49. package/dist/src/mcp/handlers/checklist-context.handler.d.ts +3 -1
  50. package/dist/src/mcp/handlers/checklist-context.handler.js +17 -2
  51. package/dist/src/mcp/handlers/clarification-gate.d.ts +22 -0
  52. package/dist/src/mcp/handlers/clarification-gate.js +129 -0
  53. package/dist/src/mcp/handlers/council-scene.builder.d.ts +9 -0
  54. package/dist/src/mcp/handlers/council-scene.builder.js +115 -0
  55. package/dist/src/mcp/handlers/council-scene.types.d.ts +11 -0
  56. package/dist/src/mcp/handlers/council-scene.types.js +3 -0
  57. package/dist/src/mcp/handlers/discussion.handler.d.ts +4 -0
  58. package/dist/src/mcp/handlers/discussion.handler.js +45 -5
  59. package/dist/src/mcp/handlers/discussion.types.d.ts +12 -0
  60. package/dist/src/mcp/handlers/discussion.types.js +4 -1
  61. package/dist/src/mcp/handlers/execution-gate.d.ts +29 -0
  62. package/dist/src/mcp/handlers/execution-gate.js +49 -0
  63. package/dist/src/mcp/handlers/index.d.ts +1 -0
  64. package/dist/src/mcp/handlers/index.js +3 -1
  65. package/dist/src/mcp/handlers/mode.handler.d.ts +14 -1
  66. package/dist/src/mcp/handlers/mode.handler.js +205 -3
  67. package/dist/src/mcp/handlers/planning-contract.d.ts +2 -0
  68. package/dist/src/mcp/handlers/planning-contract.js +28 -0
  69. package/dist/src/mcp/handlers/planning-stage.d.ts +20 -0
  70. package/dist/src/mcp/handlers/planning-stage.js +58 -0
  71. package/dist/src/mcp/handlers/quality-report.handler.d.ts +3 -1
  72. package/dist/src/mcp/handlers/quality-report.handler.js +20 -2
  73. package/dist/src/mcp/handlers/review-pr.handler.d.ts +12 -0
  74. package/dist/src/mcp/handlers/review-pr.handler.js +81 -0
  75. package/dist/src/mcp/mcp.module.js +1 -0
  76. package/dist/src/rules/rules.service.d.ts +6 -0
  77. package/dist/src/rules/rules.service.js +3 -0
  78. package/dist/src/rules/skill.schema.d.ts +5 -0
  79. package/dist/src/rules/skill.schema.js +36 -0
  80. package/dist/src/shared/rules-core.d.ts +5 -0
  81. package/dist/src/shared/rules-core.js +5 -0
  82. package/dist/src/shared/version.d.ts +1 -1
  83. package/dist/src/shared/version.js +1 -1
  84. package/dist/src/ship/review-pr.service.d.ts +15 -0
  85. package/dist/src/ship/review-pr.service.js +136 -0
  86. package/dist/src/ship/review-pr.types.d.ts +21 -0
  87. package/dist/src/ship/review-pr.types.js +3 -0
  88. package/dist/src/ship/ship.module.js +5 -2
  89. package/dist/src/skill/i18n/keywords.js +921 -0
  90. package/dist/src/skill/skill-recommendation.service.d.ts +1 -0
  91. package/dist/src/skill/skill-recommendation.service.js +27 -1
  92. package/dist/src/skill/skill-recommendation.types.d.ts +5 -0
  93. package/dist/src/tui/events/hud-file-bridge.d.ts +4 -0
  94. package/dist/src/tui/events/hud-file-bridge.js +36 -0
  95. package/dist/src/tui-bundle.mjs +45 -3
  96. package/package.json +7 -2
  97. package/dist/api/mcp.js.map +0 -1
  98. package/dist/src/agent/agent-prompt.builder.js.map +0 -1
  99. package/dist/src/agent/agent-summary.utils.js.map +0 -1
  100. package/dist/src/agent/agent.module.js.map +0 -1
  101. package/dist/src/agent/agent.service.js.map +0 -1
  102. package/dist/src/agent/agent.types.js.map +0 -1
  103. package/dist/src/agent/index.js.map +0 -1
  104. package/dist/src/analyzer/analyzer.module.js.map +0 -1
  105. package/dist/src/analyzer/analyzer.service.js.map +0 -1
  106. package/dist/src/analyzer/analyzer.types.js.map +0 -1
  107. package/dist/src/analyzer/code.sampler.js.map +0 -1
  108. package/dist/src/analyzer/config.analyzer.js.map +0 -1
  109. package/dist/src/analyzer/conventions.analyzer.js.map +0 -1
  110. package/dist/src/analyzer/conventions.schemas.js.map +0 -1
  111. package/dist/src/analyzer/conventions.types.js.map +0 -1
  112. package/dist/src/analyzer/directory.analyzer.js.map +0 -1
  113. package/dist/src/analyzer/index.js.map +0 -1
  114. package/dist/src/analyzer/package.analyzer.js.map +0 -1
  115. package/dist/src/app.module.js.map +0 -1
  116. package/dist/src/checklist/checklist.module.js.map +0 -1
  117. package/dist/src/checklist/checklist.schema.js.map +0 -1
  118. package/dist/src/checklist/checklist.service.js.map +0 -1
  119. package/dist/src/checklist/checklist.types.js.map +0 -1
  120. package/dist/src/checklist/index.js.map +0 -1
  121. package/dist/src/cli/cli.js.map +0 -1
  122. package/dist/src/cli/cli.types.js.map +0 -1
  123. package/dist/src/cli/index.js.map +0 -1
  124. package/dist/src/cli/init/claude-settings.utils.js.map +0 -1
  125. package/dist/src/cli/init/config.generator.js.map +0 -1
  126. package/dist/src/cli/init/config.writer.js.map +0 -1
  127. package/dist/src/cli/init/gitignore.utils.js.map +0 -1
  128. package/dist/src/cli/init/index.js.map +0 -1
  129. package/dist/src/cli/init/init.command.js.map +0 -1
  130. package/dist/src/cli/init/init.constants.js.map +0 -1
  131. package/dist/src/cli/init/init.wizard.js.map +0 -1
  132. package/dist/src/cli/init/prompt.builder.js.map +0 -1
  133. package/dist/src/cli/init/prompts/agent-prompt.js.map +0 -1
  134. package/dist/src/cli/init/prompts/architecture-prompt.js.map +0 -1
  135. package/dist/src/cli/init/prompts/basic-prompt.js.map +0 -1
  136. package/dist/src/cli/init/prompts/conventions-prompt.js.map +0 -1
  137. package/dist/src/cli/init/prompts/index.js.map +0 -1
  138. package/dist/src/cli/init/prompts/language-prompt.js.map +0 -1
  139. package/dist/src/cli/init/prompts/model-prompt.js.map +0 -1
  140. package/dist/src/cli/init/prompts/tech-stack-prompt.js.map +0 -1
  141. package/dist/src/cli/init/prompts/test-strategy-prompt.js.map +0 -1
  142. package/dist/src/cli/init/summary/index.js.map +0 -1
  143. package/dist/src/cli/init/summary/summary.prompt.js.map +0 -1
  144. package/dist/src/cli/init/summary/summary.renderer.js.map +0 -1
  145. package/dist/src/cli/init/templates/config-renderer.js.map +0 -1
  146. package/dist/src/cli/init/templates/frameworks/default.template.js.map +0 -1
  147. package/dist/src/cli/init/templates/frameworks/express.template.js.map +0 -1
  148. package/dist/src/cli/init/templates/frameworks/index.js.map +0 -1
  149. package/dist/src/cli/init/templates/frameworks/nestjs.template.js.map +0 -1
  150. package/dist/src/cli/init/templates/frameworks/nextjs.template.js.map +0 -1
  151. package/dist/src/cli/init/templates/frameworks/node.template.js.map +0 -1
  152. package/dist/src/cli/init/templates/frameworks/react.template.js.map +0 -1
  153. package/dist/src/cli/init/templates/index.js.map +0 -1
  154. package/dist/src/cli/init/templates/template.renderer.js.map +0 -1
  155. package/dist/src/cli/init/templates/template.selector.js.map +0 -1
  156. package/dist/src/cli/init/templates/template.types.js.map +0 -1
  157. package/dist/src/cli/plugin/install.command.js.map +0 -1
  158. package/dist/src/cli/plugin/plugins.command.js.map +0 -1
  159. package/dist/src/cli/plugin/search.command.js.map +0 -1
  160. package/dist/src/cli/plugin/uninstall.command.js.map +0 -1
  161. package/dist/src/cli/plugin/update.command.js.map +0 -1
  162. package/dist/src/cli/restart-tui.js.map +0 -1
  163. package/dist/src/cli/run-tui.js.map +0 -1
  164. package/dist/src/cli/utils/console.js.map +0 -1
  165. package/dist/src/cli/utils/index.js.map +0 -1
  166. package/dist/src/collaboration/discussion-engine.js.map +0 -1
  167. package/dist/src/collaboration/index.js.map +0 -1
  168. package/dist/src/collaboration/opinion-adapter.js.map +0 -1
  169. package/dist/src/collaboration/terminal-formatter.js.map +0 -1
  170. package/dist/src/collaboration/types.js.map +0 -1
  171. package/dist/src/config/config-diff.service.js.map +0 -1
  172. package/dist/src/config/config.loader.js.map +0 -1
  173. package/dist/src/config/config.module.js.map +0 -1
  174. package/dist/src/config/config.schema.js.map +0 -1
  175. package/dist/src/config/config.service.js.map +0 -1
  176. package/dist/src/config/context.loader.js.map +0 -1
  177. package/dist/src/config/ignore.parser.js.map +0 -1
  178. package/dist/src/config/index.js.map +0 -1
  179. package/dist/src/context/briefing-loader.service.js.map +0 -1
  180. package/dist/src/context/briefing.service.js.map +0 -1
  181. package/dist/src/context/briefing.types.js.map +0 -1
  182. package/dist/src/context/context-archive.service.js.map +0 -1
  183. package/dist/src/context/context-archive.types.js.map +0 -1
  184. package/dist/src/context/context-document.service.js.map +0 -1
  185. package/dist/src/context/context-document.types.js.map +0 -1
  186. package/dist/src/context/context-parser.utils.js.map +0 -1
  187. package/dist/src/context/context-serializer.utils.js.map +0 -1
  188. package/dist/src/context/context.module.js.map +0 -1
  189. package/dist/src/context/context.service.js.map +0 -1
  190. package/dist/src/context/context.types.js.map +0 -1
  191. package/dist/src/context/index.js.map +0 -1
  192. package/dist/src/context/intent-patterns.js.map +0 -1
  193. package/dist/src/custom/custom.module.js.map +0 -1
  194. package/dist/src/custom/custom.service.js.map +0 -1
  195. package/dist/src/custom/custom.types.js.map +0 -1
  196. package/dist/src/custom/index.js.map +0 -1
  197. package/dist/src/diagnostic/diagnostic-log.service.js.map +0 -1
  198. package/dist/src/diagnostic/diagnostic.module.js.map +0 -1
  199. package/dist/src/diagnostic/diagnostic.types.js.map +0 -1
  200. package/dist/src/diagnostic/index.js.map +0 -1
  201. package/dist/src/impact/impact-event.service.js.map +0 -1
  202. package/dist/src/impact/impact-report.service.js.map +0 -1
  203. package/dist/src/impact/impact.module.js.map +0 -1
  204. package/dist/src/impact/impact.types.js.map +0 -1
  205. package/dist/src/impact/index.js.map +0 -1
  206. package/dist/src/keyword/activation-message.builder.js.map +0 -1
  207. package/dist/src/keyword/auto-executor.js.map +0 -1
  208. package/dist/src/keyword/auto-executor.types.js.map +0 -1
  209. package/dist/src/keyword/auto-formatter.js.map +0 -1
  210. package/dist/src/keyword/auto-prompt-builder.js.map +0 -1
  211. package/dist/src/keyword/complexity-classifier.js.map +0 -1
  212. package/dist/src/keyword/complexity-indicators.js.map +0 -1
  213. package/dist/src/keyword/diff-analyzer.js.map +0 -1
  214. package/dist/src/keyword/explicit-pattern-matcher.js.map +0 -1
  215. package/dist/src/keyword/index.js.map +0 -1
  216. package/dist/src/keyword/keyword.module.js.map +0 -1
  217. package/dist/src/keyword/keyword.service.js.map +0 -1
  218. package/dist/src/keyword/keyword.types.js.map +0 -1
  219. package/dist/src/keyword/patterns/agent.patterns.js.map +0 -1
  220. package/dist/src/keyword/patterns/ai-ml.patterns.js.map +0 -1
  221. package/dist/src/keyword/patterns/backend.patterns.js.map +0 -1
  222. package/dist/src/keyword/patterns/context.patterns.js.map +0 -1
  223. package/dist/src/keyword/patterns/data-science.patterns.js.map +0 -1
  224. package/dist/src/keyword/patterns/data.patterns.js.map +0 -1
  225. package/dist/src/keyword/patterns/devops.patterns.js.map +0 -1
  226. package/dist/src/keyword/patterns/explicit.patterns.js.map +0 -1
  227. package/dist/src/keyword/patterns/frontend.patterns.js.map +0 -1
  228. package/dist/src/keyword/patterns/index.js.map +0 -1
  229. package/dist/src/keyword/patterns/intent-pattern-checks.js.map +0 -1
  230. package/dist/src/keyword/patterns/intent-patterns.types.js.map +0 -1
  231. package/dist/src/keyword/patterns/meta-discussion.patterns.js.map +0 -1
  232. package/dist/src/keyword/patterns/mobile.patterns.js.map +0 -1
  233. package/dist/src/keyword/patterns/platform.patterns.js.map +0 -1
  234. package/dist/src/keyword/patterns/security.patterns.js.map +0 -1
  235. package/dist/src/keyword/patterns/systems.patterns.js.map +0 -1
  236. package/dist/src/keyword/patterns/test.patterns.js.map +0 -1
  237. package/dist/src/keyword/patterns/tooling.patterns.js.map +0 -1
  238. package/dist/src/keyword/primary-agent-resolver.js.map +0 -1
  239. package/dist/src/keyword/rule-filter.js.map +0 -1
  240. package/dist/src/keyword/srp-template.js.map +0 -1
  241. package/dist/src/keyword/strategies/__tests__/strategy-test.utils.js.map +0 -1
  242. package/dist/src/keyword/strategies/act-agent.strategy.js.map +0 -1
  243. package/dist/src/keyword/strategies/eval-agent.strategy.js.map +0 -1
  244. package/dist/src/keyword/strategies/index.js.map +0 -1
  245. package/dist/src/keyword/strategies/plan-agent.strategy.js.map +0 -1
  246. package/dist/src/keyword/strategies/resolution-strategy.interface.js.map +0 -1
  247. package/dist/src/keyword/taskmaestro-detector.js.map +0 -1
  248. package/dist/src/keyword/visual-data.builder.js.map +0 -1
  249. package/dist/src/main.js.map +0 -1
  250. package/dist/src/mcp/handlers/abstract-handler.js.map +0 -1
  251. package/dist/src/mcp/handlers/agent.handler.js.map +0 -1
  252. package/dist/src/mcp/handlers/base.handler.js.map +0 -1
  253. package/dist/src/mcp/handlers/briefing.handler.js.map +0 -1
  254. package/dist/src/mcp/handlers/checklist-context.handler.js.map +0 -1
  255. package/dist/src/mcp/handlers/config.handler.js.map +0 -1
  256. package/dist/src/mcp/handlers/context-archive.handler.js.map +0 -1
  257. package/dist/src/mcp/handlers/context-document.handler.js.map +0 -1
  258. package/dist/src/mcp/handlers/conventions.handler.js.map +0 -1
  259. package/dist/src/mcp/handlers/discussion.handler.js.map +0 -1
  260. package/dist/src/mcp/handlers/discussion.types.js.map +0 -1
  261. package/dist/src/mcp/handlers/impact.handler.js.map +0 -1
  262. package/dist/src/mcp/handlers/index.js.map +0 -1
  263. package/dist/src/mcp/handlers/mode.handler.js.map +0 -1
  264. package/dist/src/mcp/handlers/pipeline.handler.js.map +0 -1
  265. package/dist/src/mcp/handlers/plugin-validation.handler.js.map +0 -1
  266. package/dist/src/mcp/handlers/quality-report.handler.js.map +0 -1
  267. package/dist/src/mcp/handlers/release-check.handler.js.map +0 -1
  268. package/dist/src/mcp/handlers/resume.handler.js.map +0 -1
  269. package/dist/src/mcp/handlers/rule-impact.handler.js.map +0 -1
  270. package/dist/src/mcp/handlers/rule-insights.handler.js.map +0 -1
  271. package/dist/src/mcp/handlers/rules.handler.js.map +0 -1
  272. package/dist/src/mcp/handlers/skill.handler.js.map +0 -1
  273. package/dist/src/mcp/handlers/tui.handler.js.map +0 -1
  274. package/dist/src/mcp/mcp-serverless.js.map +0 -1
  275. package/dist/src/mcp/mcp.controller.js.map +0 -1
  276. package/dist/src/mcp/mcp.module.js.map +0 -1
  277. package/dist/src/mcp/mcp.service.js.map +0 -1
  278. package/dist/src/mcp/response.utils.js.map +0 -1
  279. package/dist/src/mcp/sse-auth.guard.js.map +0 -1
  280. package/dist/src/model/index.js.map +0 -1
  281. package/dist/src/model/model-resolver.service.js.map +0 -1
  282. package/dist/src/model/model.constants.js.map +0 -1
  283. package/dist/src/model/model.resolver.js.map +0 -1
  284. package/dist/src/model/model.types.js.map +0 -1
  285. package/dist/src/parallel-validation/extract-file-paths.js.map +0 -1
  286. package/dist/src/parallel-validation/index.js.map +0 -1
  287. package/dist/src/parallel-validation/overlap-matrix.js.map +0 -1
  288. package/dist/src/parallel-validation/parallel-validation.handler.js.map +0 -1
  289. package/dist/src/parallel-validation/parallel-validation.types.js.map +0 -1
  290. package/dist/src/parallel-validation/wave-splitter.js.map +0 -1
  291. package/dist/src/pipeline/index.js.map +0 -1
  292. package/dist/src/pipeline/pipeline.executors.js.map +0 -1
  293. package/dist/src/pipeline/pipeline.module.js.map +0 -1
  294. package/dist/src/pipeline/pipeline.service.js.map +0 -1
  295. package/dist/src/pipeline/pipeline.types.js.map +0 -1
  296. package/dist/src/plugin/plugin-installer.service.js.map +0 -1
  297. package/dist/src/plugin/plugin-manifest.schema.js.map +0 -1
  298. package/dist/src/plugin/plugin.module.js.map +0 -1
  299. package/dist/src/plugin/plugin.types.js.map +0 -1
  300. package/dist/src/plugin/registry-client.js.map +0 -1
  301. package/dist/src/rules/agent.schema.js.map +0 -1
  302. package/dist/src/rules/rule-event-collector.js.map +0 -1
  303. package/dist/src/rules/rule-event.types.js.map +0 -1
  304. package/dist/src/rules/rule-insights.service.js.map +0 -1
  305. package/dist/src/rules/rule-stats-writer.js.map +0 -1
  306. package/dist/src/rules/rule-tracker.js.map +0 -1
  307. package/dist/src/rules/rules-content.utils.js.map +0 -1
  308. package/dist/src/rules/rules.module.js.map +0 -1
  309. package/dist/src/rules/rules.service.js.map +0 -1
  310. package/dist/src/rules/rules.types.js.map +0 -1
  311. package/dist/src/rules/skill.schema.js.map +0 -1
  312. package/dist/src/shared/agent.utils.js.map +0 -1
  313. package/dist/src/shared/async.utils.js.map +0 -1
  314. package/dist/src/shared/client-type.js.map +0 -1
  315. package/dist/src/shared/error.utils.js.map +0 -1
  316. package/dist/src/shared/esm-import.js.map +0 -1
  317. package/dist/src/shared/event-bridge-reader.js.map +0 -1
  318. package/dist/src/shared/file.utils.js.map +0 -1
  319. package/dist/src/shared/filesystem.interface.js.map +0 -1
  320. package/dist/src/shared/format.utils.js.map +0 -1
  321. package/dist/src/shared/keyword-core.js.map +0 -1
  322. package/dist/src/shared/language.service.js.map +0 -1
  323. package/dist/src/shared/language.types.js.map +0 -1
  324. package/dist/src/shared/lru-cache.js.map +0 -1
  325. package/dist/src/shared/node-filesystem.service.js.map +0 -1
  326. package/dist/src/shared/path.utils.js.map +0 -1
  327. package/dist/src/shared/pattern-matcher.js.map +0 -1
  328. package/dist/src/shared/rules-core.js.map +0 -1
  329. package/dist/src/shared/security.utils.js.map +0 -1
  330. package/dist/src/shared/slug.utils.js.map +0 -1
  331. package/dist/src/shared/tui-bundle-path.js.map +0 -1
  332. package/dist/src/shared/validation.constants.js.map +0 -1
  333. package/dist/src/shared/verbosity.types.js.map +0 -1
  334. package/dist/src/shared/version.js.map +0 -1
  335. package/dist/src/shared/version.utils.js.map +0 -1
  336. package/dist/src/ship/file-specialist-mapper.js.map +0 -1
  337. package/dist/src/ship/quality-report.service.js.map +0 -1
  338. package/dist/src/ship/quality-report.types.js.map +0 -1
  339. package/dist/src/ship/ship.module.js.map +0 -1
  340. package/dist/src/skill/i18n/index.js.map +0 -1
  341. package/dist/src/skill/i18n/keywords.js.map +0 -1
  342. package/dist/src/skill/i18n/keywords.types.js.map +0 -1
  343. package/dist/src/skill/index.js.map +0 -1
  344. package/dist/src/skill/skill-content.utils.js.map +0 -1
  345. package/dist/src/skill/skill-recommendation.service.js.map +0 -1
  346. package/dist/src/skill/skill-recommendation.types.js.map +0 -1
  347. package/dist/src/skill/skill-triggers.js.map +0 -1
  348. package/dist/src/skill/skill.module.js.map +0 -1
  349. package/dist/src/state/index.js.map +0 -1
  350. package/dist/src/state/state.module.js.map +0 -1
  351. package/dist/src/state/state.service.js.map +0 -1
  352. package/dist/src/state/state.types.js.map +0 -1
  353. package/dist/src/tui/__perf__/memory-stability.spec.d.ts +0 -1
  354. package/dist/src/tui/__perf__/memory-stability.spec.js +0 -105
  355. package/dist/src/tui/__perf__/memory-stability.spec.js.map +0 -1
  356. package/dist/src/tui/__perf__/rendering-performance.spec.d.ts +0 -1
  357. package/dist/src/tui/__perf__/rendering-performance.spec.js +0 -163
  358. package/dist/src/tui/__perf__/rendering-performance.spec.js.map +0 -1
  359. package/dist/src/tui/cli-flags.js.map +0 -1
  360. package/dist/src/tui/components/ActModeScreen.js.map +0 -1
  361. package/dist/src/tui/components/ActivityVisualizer.js.map +0 -1
  362. package/dist/src/tui/components/ActivityVisualizer.spec.d.ts +0 -1
  363. package/dist/src/tui/components/ActivityVisualizer.spec.js +0 -91
  364. package/dist/src/tui/components/ActivityVisualizer.spec.js.map +0 -1
  365. package/dist/src/tui/components/AgentDiscussionPanel.js.map +0 -1
  366. package/dist/src/tui/components/AgentDiscussionPanel.spec.d.ts +0 -1
  367. package/dist/src/tui/components/AgentDiscussionPanel.spec.js +0 -229
  368. package/dist/src/tui/components/AgentDiscussionPanel.spec.js.map +0 -1
  369. package/dist/src/tui/components/ChecklistPanel.js.map +0 -1
  370. package/dist/src/tui/components/ChecklistPanel.spec.d.ts +0 -1
  371. package/dist/src/tui/components/ChecklistPanel.spec.js +0 -45
  372. package/dist/src/tui/components/ChecklistPanel.spec.js.map +0 -1
  373. package/dist/src/tui/components/ContextSection.js.map +0 -1
  374. package/dist/src/tui/components/EvalModeScreen.js.map +0 -1
  375. package/dist/src/tui/components/FlowMap.js.map +0 -1
  376. package/dist/src/tui/components/FlowMap.spec.d.ts +0 -1
  377. package/dist/src/tui/components/FlowMap.spec.js +0 -147
  378. package/dist/src/tui/components/FlowMap.spec.js.map +0 -1
  379. package/dist/src/tui/components/FocusedAgentPanel.js.map +0 -1
  380. package/dist/src/tui/components/FocusedAgentPanel.spec.d.ts +0 -1
  381. package/dist/src/tui/components/FocusedAgentPanel.spec.js +0 -183
  382. package/dist/src/tui/components/FocusedAgentPanel.spec.js.map +0 -1
  383. package/dist/src/tui/components/HeaderBar.js.map +0 -1
  384. package/dist/src/tui/components/HeaderBar.spec.d.ts +0 -1
  385. package/dist/src/tui/components/HeaderBar.spec.js +0 -96
  386. package/dist/src/tui/components/HeaderBar.spec.js.map +0 -1
  387. package/dist/src/tui/components/ModeScreenRouter.js.map +0 -1
  388. package/dist/src/tui/components/PlanModeScreen.js.map +0 -1
  389. package/dist/src/tui/components/SessionDashboard.js.map +0 -1
  390. package/dist/src/tui/components/SessionTabBar.js.map +0 -1
  391. package/dist/src/tui/components/SessionTabBar.spec.d.ts +0 -1
  392. package/dist/src/tui/components/SessionTabBar.spec.js +0 -59
  393. package/dist/src/tui/components/SessionTabBar.spec.js.map +0 -1
  394. package/dist/src/tui/components/StageHealthBar.js.map +0 -1
  395. package/dist/src/tui/components/StageHealthBar.spec.d.ts +0 -1
  396. package/dist/src/tui/components/StageHealthBar.spec.js +0 -99
  397. package/dist/src/tui/components/StageHealthBar.spec.js.map +0 -1
  398. package/dist/src/tui/components/act-screen.pure.js.map +0 -1
  399. package/dist/src/tui/components/activity-visualizer.pure.js.map +0 -1
  400. package/dist/src/tui/components/agent-discussion-panel.pure.js.map +0 -1
  401. package/dist/src/tui/components/checklist-panel.pure.js.map +0 -1
  402. package/dist/src/tui/components/context-section.pure.js.map +0 -1
  403. package/dist/src/tui/components/eval-screen.pure.js.map +0 -1
  404. package/dist/src/tui/components/flow-map.pure.js.map +0 -1
  405. package/dist/src/tui/components/focused-agent.pure.js.map +0 -1
  406. package/dist/src/tui/components/grid-layout.pure.js.map +0 -1
  407. package/dist/src/tui/components/index.js.map +0 -1
  408. package/dist/src/tui/components/live.pure.js.map +0 -1
  409. package/dist/src/tui/components/plan-screen.pure.js.map +0 -1
  410. package/dist/src/tui/components/session-dashboard.pure.js.map +0 -1
  411. package/dist/src/tui/components/session-tab-bar.pure.js.map +0 -1
  412. package/dist/src/tui/components/stage-health.pure.js.map +0 -1
  413. package/dist/src/tui/dashboard-app.js.map +0 -1
  414. package/dist/src/tui/dashboard-app.spec.d.ts +0 -1
  415. package/dist/src/tui/dashboard-app.spec.js +0 -158
  416. package/dist/src/tui/dashboard-app.spec.js.map +0 -1
  417. package/dist/src/tui/dashboard-types.js.map +0 -1
  418. package/dist/src/tui/ensure-tui-ready.js.map +0 -1
  419. package/dist/src/tui/eventbus-ui.integration.spec.d.ts +0 -1
  420. package/dist/src/tui/eventbus-ui.integration.spec.js +0 -577
  421. package/dist/src/tui/eventbus-ui.integration.spec.js.map +0 -1
  422. package/dist/src/tui/events/agent-metadata.service.js.map +0 -1
  423. package/dist/src/tui/events/agent-metadata.types.js.map +0 -1
  424. package/dist/src/tui/events/event-bus.js.map +0 -1
  425. package/dist/src/tui/events/events.module.js.map +0 -1
  426. package/dist/src/tui/events/hud-file-bridge.js.map +0 -1
  427. package/dist/src/tui/events/index.js.map +0 -1
  428. package/dist/src/tui/events/parse-agent.js.map +0 -1
  429. package/dist/src/tui/events/parse-tool-response.js.map +0 -1
  430. package/dist/src/tui/events/response-event-extractor.js.map +0 -1
  431. package/dist/src/tui/events/tui-interceptor.js.map +0 -1
  432. package/dist/src/tui/events/types.js.map +0 -1
  433. package/dist/src/tui/hooks/index.js.map +0 -1
  434. package/dist/src/tui/hooks/use-dashboard-state.js.map +0 -1
  435. package/dist/src/tui/hooks/use-focus-agent.js.map +0 -1
  436. package/dist/src/tui/hooks/use-multi-session-state.js.map +0 -1
  437. package/dist/src/tui/hooks/use-terminal-size.js.map +0 -1
  438. package/dist/src/tui/hooks/use-tick.js.map +0 -1
  439. package/dist/src/tui/hooks/use-tick.spec.d.ts +0 -1
  440. package/dist/src/tui/hooks/use-tick.spec.js +0 -70
  441. package/dist/src/tui/hooks/use-tick.spec.js.map +0 -1
  442. package/dist/src/tui/index.js.map +0 -1
  443. package/dist/src/tui/ipc/index.js.map +0 -1
  444. package/dist/src/tui/ipc/instance-registry.js.map +0 -1
  445. package/dist/src/tui/ipc/ipc-bridge.js.map +0 -1
  446. package/dist/src/tui/ipc/ipc-client.js.map +0 -1
  447. package/dist/src/tui/ipc/ipc-debug.js.map +0 -1
  448. package/dist/src/tui/ipc/ipc-server.js.map +0 -1
  449. package/dist/src/tui/ipc/ipc-state-cache.js.map +0 -1
  450. package/dist/src/tui/ipc/ipc.types.js.map +0 -1
  451. package/dist/src/tui/ipc/multi-session-manager.js.map +0 -1
  452. package/dist/src/tui/ipc/shutdown-manager.js.map +0 -1
  453. package/dist/src/tui/ipc/test-utils.js.map +0 -1
  454. package/dist/src/tui/ipc/tui-auto-launcher.js.map +0 -1
  455. package/dist/src/tui/multi-session-app.js.map +0 -1
  456. package/dist/src/tui/multi-session-app.spec.d.ts +0 -1
  457. package/dist/src/tui/multi-session-app.spec.js +0 -95
  458. package/dist/src/tui/multi-session-app.spec.js.map +0 -1
  459. package/dist/src/tui/testing/tui-test-utils.js.map +0 -1
  460. package/dist/src/tui/transport-tui.integration.spec.d.ts +0 -1
  461. package/dist/src/tui/transport-tui.integration.spec.js +0 -189
  462. package/dist/src/tui/transport-tui.integration.spec.js.map +0 -1
  463. package/dist/src/tui/tui-config.js.map +0 -1
  464. package/dist/src/tui/types.js.map +0 -1
  465. package/dist/src/tui/utils/color-buffer.js.map +0 -1
  466. package/dist/src/tui/utils/colors.js.map +0 -1
  467. package/dist/src/tui/utils/display-width.js.map +0 -1
  468. package/dist/src/tui/utils/edge-router.js.map +0 -1
  469. package/dist/src/tui/utils/icons.js.map +0 -1
  470. package/dist/src/tui/utils/index.js.map +0 -1
  471. package/dist/src/tui/utils/theme.js.map +0 -1
  472. package/dist/tsconfig.build.tsbuildinfo +0 -1
@@ -33,10 +33,18 @@ const keyword_types_2 = require("../../keyword/keyword.types");
33
33
  const visual_data_builder_1 = require("../../keyword/visual-data.builder");
34
34
  const verbosity_types_1 = require("../../shared/verbosity.types");
35
35
  const agent_service_1 = require("../../agent/agent.service");
36
+ const council_preset_service_1 = require("../../agent/council-preset.service");
37
+ const teams_capability_service_1 = require("../../agent/teams-capability.service");
38
+ const execution_plan_1 = require("../../agent/execution-plan");
36
39
  const impact_1 = require("../../impact");
40
+ const rule_event_collector_1 = require("../../rules/rule-event-collector");
41
+ const clarification_gate_1 = require("./clarification-gate");
42
+ const planning_stage_1 = require("./planning-stage");
43
+ const execution_gate_1 = require("./execution-gate");
44
+ const council_scene_builder_1 = require("./council-scene.builder");
37
45
  const CONTEXT_TITLE_MAX_LENGTH = 50;
38
46
  let ModeHandler = ModeHandler_1 = class ModeHandler extends abstract_handler_1.AbstractHandler {
39
- constructor(keywordService, configService, languageService, modelResolverService, stateService, contextDocService, diagnosticLogService, agentService, impactEventService) {
47
+ constructor(keywordService, configService, languageService, modelResolverService, stateService, contextDocService, diagnosticLogService, agentService, councilPresetService, teamsCapabilityService, impactEventService, ruleEventCollector) {
40
48
  super();
41
49
  this.keywordService = keywordService;
42
50
  this.configService = configService;
@@ -46,7 +54,10 @@ let ModeHandler = ModeHandler_1 = class ModeHandler extends abstract_handler_1.A
46
54
  this.contextDocService = contextDocService;
47
55
  this.diagnosticLogService = diagnosticLogService;
48
56
  this.agentService = agentService;
57
+ this.councilPresetService = councilPresetService;
58
+ this.teamsCapabilityService = teamsCapabilityService;
49
59
  this.impactEventService = impactEventService;
60
+ this.ruleEventCollector = ruleEventCollector;
50
61
  this.logger = new common_1.Logger(ModeHandler_1.name);
51
62
  }
52
63
  getHandledTools() {
@@ -73,6 +84,15 @@ let ModeHandler = ModeHandler_1 = class ModeHandler extends abstract_handler_1.A
73
84
  enum: ['minimal', 'standard', 'full'],
74
85
  description: 'Control response detail level. minimal: metadata only; standard: truncated content (default); full: complete content',
75
86
  },
87
+ question_budget: {
88
+ type: 'number',
89
+ description: 'Clarification Gate budget (#1371). Maximum clarification questions remaining in this session. Defaults to 3 on the first call; pass the `questionBudget` returned from the previous PLAN response to decrement across rounds. When 0, the gate proceeds to planning with explicit assumptions.',
90
+ },
91
+ planning_stage: {
92
+ type: 'string',
93
+ enum: ['discover', 'design', 'plan'],
94
+ description: 'Staged planning hint (#1372). Overrides automatic stage routing when the caller knows which stage to enter. Use "design" after the user confirms direction from Discover, or "plan" after the user confirms the approach from Design.',
95
+ },
76
96
  },
77
97
  required: ['prompt'],
78
98
  },
@@ -87,6 +107,15 @@ let ModeHandler = ModeHandler_1 = class ModeHandler extends abstract_handler_1.A
87
107
  const recommendedAgent = (0, validation_constants_1.extractRequiredString)(args, 'recommended_agent') ?? undefined;
88
108
  const rawVerbosity = (0, validation_constants_1.extractRequiredString)(args, 'verbosity') ?? 'standard';
89
109
  const verbosity = (0, verbosity_types_1.isValidVerbosity)(rawVerbosity) ? rawVerbosity : 'standard';
110
+ const rawQuestionBudget = args?.['question_budget'];
111
+ const questionBudget = typeof rawQuestionBudget === 'number' && Number.isFinite(rawQuestionBudget)
112
+ ? rawQuestionBudget
113
+ : undefined;
114
+ const VALID_STAGES = new Set(['discover', 'design', 'plan']);
115
+ const rawPlanningStage = (0, validation_constants_1.extractRequiredString)(args, 'planning_stage') ?? undefined;
116
+ const planningStageHint = rawPlanningStage && VALID_STAGES.has(rawPlanningStage)
117
+ ? rawPlanningStage
118
+ : undefined;
90
119
  try {
91
120
  await this.configService.reload();
92
121
  let resolvedRecommendedAgent = recommendedAgent;
@@ -143,17 +172,53 @@ let ModeHandler = ModeHandler_1 = class ModeHandler extends abstract_handler_1.A
143
172
  const deepThinkingInstructions = this.buildDeepThinkingInstructions(result.mode);
144
173
  const planReviewGate = this.buildPlanReviewGate(result.mode, settings?.ai?.planReviewGate);
145
174
  const agentDiscussion = this.buildAgentDiscussion(result.mode, settings?.ai?.agentDiscussion);
175
+ const reviewContext = this.buildReviewContext(result.mode, result.originalPrompt);
176
+ const councilPreset = this.councilPresetService.resolvePreset(result.mode) ?? undefined;
177
+ const teamsCapability = await this.resolveTeamsCapability();
178
+ const executionPlan = this.buildExecutionPlan(dispatchReady, teamsCapability);
146
179
  const visual = await this.buildVisual(result.mode, result.delegates_to, result.parallelAgentsRecommendation?.specialists, settings?.eco);
180
+ const councilScene = (0, council_scene_builder_1.buildCouncilScene)(result.mode, councilPreset ?? undefined, visual, {
181
+ delegatesTo: result.delegates_to,
182
+ specialists: result.parallelAgentsRecommendation?.specialists,
183
+ });
184
+ const councilRenderInstructions = (0, council_scene_builder_1.buildCouncilSceneInstructions)(councilScene);
185
+ if (councilRenderInstructions) {
186
+ result.instructions += councilRenderInstructions;
187
+ }
188
+ const clarification = this.buildClarificationMetadata(result.mode, result.originalPrompt, questionBudget);
189
+ const clarificationInstructions = this.buildClarificationFirstInstructions(clarification);
190
+ const planningStage = this.buildPlanningStageMetadata(result.mode, clarification, planningStageHint);
191
+ const executionGate = this.buildExecutionGate(result.mode, clarification, planningStage, result.parallelAgentsRecommendation?.specialists);
192
+ const serializedExecutionPlan = executionPlan
193
+ ? (0, execution_plan_1.serializeExecutionPlan)(executionPlan)
194
+ : undefined;
195
+ const gatedFields = (0, execution_gate_1.suppressDispatchWhileGated)(executionGate, {
196
+ dispatchReady,
197
+ parallelAgentsRecommendation: result.parallelAgentsRecommendation,
198
+ executionPlan: serializedExecutionPlan,
199
+ });
147
200
  const response = (0, response_utils_1.createJsonResponse)({
148
201
  ...result,
202
+ ...(clarificationInstructions !== undefined && { instructions: clarificationInstructions }),
149
203
  language,
150
204
  languageInstruction: languageInstructionResult.instruction,
151
205
  resolvedModel,
152
- ...(dispatchReady && { dispatchReady }),
206
+ ...(gatedFields.parallelAgentsRecommendation !== undefined && {
207
+ parallelAgentsRecommendation: gatedFields.parallelAgentsRecommendation,
208
+ }),
209
+ ...(gatedFields.dispatchReady && { dispatchReady: gatedFields.dispatchReady }),
153
210
  ...(deepThinkingInstructions && { deepThinkingInstructions }),
154
211
  ...(planReviewGate && { planReviewGate }),
155
212
  ...(agentDiscussion && { agentDiscussion }),
213
+ ...(reviewContext && { reviewContext }),
156
214
  ...(visual && { visual }),
215
+ ...(councilPreset && { councilPreset }),
216
+ ...(councilScene && { councilScene }),
217
+ ...(gatedFields.executionPlan && { executionPlan: gatedFields.executionPlan }),
218
+ ...(teamsCapability && { teamsCapability }),
219
+ ...(clarification && clarification),
220
+ ...(planningStage && { planningStage }),
221
+ ...(executionGate && { executionGate }),
157
222
  ...contextResult,
158
223
  ...(projectRootWarning && { projectRootWarning }),
159
224
  });
@@ -165,6 +230,16 @@ let ModeHandler = ModeHandler_1 = class ModeHandler extends abstract_handler_1.A
165
230
  }
166
231
  catch {
167
232
  }
233
+ try {
234
+ this.ruleEventCollector.record({
235
+ type: 'mode_activated',
236
+ timestamp: new Date().toISOString(),
237
+ rule: result.mode,
238
+ details: { agent: result.agent },
239
+ });
240
+ }
241
+ catch {
242
+ }
168
243
  return response;
169
244
  }
170
245
  catch (error) {
@@ -309,6 +384,55 @@ let ModeHandler = ModeHandler_1 = class ModeHandler extends abstract_handler_1.A
309
384
  dispatch: 'recommend',
310
385
  };
311
386
  }
387
+ buildClarificationMetadata(mode, originalPrompt, questionBudget) {
388
+ if (mode !== 'PLAN' && mode !== 'AUTO') {
389
+ return undefined;
390
+ }
391
+ return (0, clarification_gate_1.evaluateClarification)(originalPrompt, {
392
+ ...(questionBudget !== undefined && { questionBudget }),
393
+ });
394
+ }
395
+ buildExecutionGate(mode, clarification, planningStage, specialists) {
396
+ if (mode !== 'PLAN' && mode !== 'AUTO') {
397
+ return undefined;
398
+ }
399
+ if (!clarification) {
400
+ return undefined;
401
+ }
402
+ return (0, execution_gate_1.evaluateExecutionGate)({
403
+ clarification,
404
+ planningStage,
405
+ specialists,
406
+ });
407
+ }
408
+ buildClarificationFirstInstructions(clarification) {
409
+ if (!clarification?.clarificationNeeded) {
410
+ return undefined;
411
+ }
412
+ const question = clarification.nextQuestion ??
413
+ 'Can you clarify the scope and success criteria of this request?';
414
+ const budget = clarification.questionBudget ?? 0;
415
+ return ('🔴 CLARIFICATION REQUIRED — DO NOT PLAN.\n\n' +
416
+ 'The request is ambiguous. You MUST:\n' +
417
+ '1. Ask EXACTLY the question below and STOP.\n' +
418
+ '2. Do NOT output any implementation plan, architecture, or code.\n' +
419
+ "3. Wait for the user's response before continuing.\n\n" +
420
+ `❓ Ask this: "${question}"\n\n` +
421
+ `Remaining question budget: ${budget}\n\n` +
422
+ 'After the user answers, call parse_mode again with the clarified prompt ' +
423
+ `and question_budget=${budget} to continue.`);
424
+ }
425
+ buildPlanningStageMetadata(mode, clarification, stageHint) {
426
+ if (mode !== 'PLAN' && mode !== 'AUTO') {
427
+ return undefined;
428
+ }
429
+ if (!clarification) {
430
+ return undefined;
431
+ }
432
+ return (0, planning_stage_1.resolvePlanningStage)(clarification, {
433
+ ...(stageHint && { stageHint }),
434
+ });
435
+ }
312
436
  buildAgentDiscussion(mode, configValue) {
313
437
  if (mode !== 'EVAL') {
314
438
  return undefined;
@@ -320,6 +444,30 @@ let ModeHandler = ModeHandler_1 = class ModeHandler extends abstract_handler_1.A
320
444
  includeConsensus: true,
321
445
  };
322
446
  }
447
+ buildReviewContext(mode, originalPrompt) {
448
+ if (mode !== 'EVAL') {
449
+ return undefined;
450
+ }
451
+ const prMatch = originalPrompt.match(/(?:PR\s*#?(\d+)|pull\s*request\s*#?(\d+))/i);
452
+ if (!prMatch) {
453
+ return undefined;
454
+ }
455
+ const prNumber = parseInt(prMatch[1] ?? prMatch[2], 10);
456
+ if (isNaN(prNumber)) {
457
+ return undefined;
458
+ }
459
+ const issueMatch = originalPrompt.match(/issue\s*#?(\d+)/i);
460
+ const issueNumber = issueMatch ? parseInt(issueMatch[1], 10) : undefined;
461
+ const hintParams = issueNumber
462
+ ? `pr_number: ${prNumber}, issue_number: ${issueNumber}`
463
+ : `pr_number: ${prNumber}`;
464
+ return {
465
+ detected: true,
466
+ pr_number: prNumber,
467
+ ...(issueNumber && { issue_number: issueNumber }),
468
+ hint: `Call review_pr({ ${hintParams} }) to get structured review data including diff, checklists, and specialist recommendations.`,
469
+ };
470
+ }
323
471
  async buildVisual(mode, delegatesTo, specialists, eco) {
324
472
  try {
325
473
  const modeAgentName = `${mode.toLowerCase()}-mode`;
@@ -353,6 +501,57 @@ let ModeHandler = ModeHandler_1 = class ModeHandler extends abstract_handler_1.A
353
501
  return undefined;
354
502
  }
355
503
  }
504
+ async resolveTeamsCapability() {
505
+ try {
506
+ return await this.teamsCapabilityService.getStatus();
507
+ }
508
+ catch (error) {
509
+ this.logger.warn(`Failed to resolve Teams capability: ${error instanceof Error ? error.message : 'Unknown error'}`);
510
+ return undefined;
511
+ }
512
+ }
513
+ buildExecutionPlan(dispatchReady, teamsCapability) {
514
+ if (!dispatchReady) {
515
+ return undefined;
516
+ }
517
+ const agents = [];
518
+ if (dispatchReady.primaryAgent) {
519
+ agents.push({
520
+ name: dispatchReady.primaryAgent.name,
521
+ displayName: dispatchReady.primaryAgent.displayName,
522
+ description: dispatchReady.primaryAgent.description,
523
+ dispatchParams: dispatchReady.primaryAgent.dispatchParams,
524
+ });
525
+ }
526
+ if (dispatchReady.parallelAgents?.length) {
527
+ for (const agent of dispatchReady.parallelAgents) {
528
+ agents.push({
529
+ name: agent.name,
530
+ displayName: agent.displayName,
531
+ description: agent.description,
532
+ dispatchParams: agent.dispatchParams,
533
+ });
534
+ }
535
+ }
536
+ if (agents.length === 0) {
537
+ return undefined;
538
+ }
539
+ const outer = (0, execution_plan_1.subagentLayer)(agents);
540
+ if (teamsCapability?.available) {
541
+ const inner = (0, execution_plan_1.teamsLayer)({
542
+ team_name: 'auto',
543
+ description: 'Auto-generated Teams coordination layer',
544
+ teammates: agents.map(a => ({
545
+ name: a.name,
546
+ subagent_type: 'general-purpose',
547
+ team_name: 'auto',
548
+ prompt: a.description,
549
+ })),
550
+ });
551
+ return (0, execution_plan_1.buildNestedPlan)(outer, inner);
552
+ }
553
+ return (0, execution_plan_1.buildSimplePlan)(outer);
554
+ }
356
555
  async persistModeState(mode) {
357
556
  try {
358
557
  await this.stateService.updateLastMode(mode);
@@ -375,6 +574,9 @@ exports.ModeHandler = ModeHandler = ModeHandler_1 = __decorate([
375
574
  context_document_service_1.ContextDocumentService,
376
575
  diagnostic_log_service_1.DiagnosticLogService,
377
576
  agent_service_1.AgentService,
378
- impact_1.ImpactEventService])
577
+ council_preset_service_1.CouncilPresetService,
578
+ teams_capability_service_1.TeamsCapabilityService,
579
+ impact_1.ImpactEventService,
580
+ rule_event_collector_1.RuleEventCollector])
379
581
  ], ModeHandler);
380
582
  //# sourceMappingURL=mode.handler.js.map
@@ -0,0 +1,2 @@
1
+ export declare const PLANNING_CONTRACT: readonly string[];
2
+ export declare function resolvePlanningContract(mode: string, agentId?: string): readonly string[] | undefined;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PLANNING_CONTRACT = void 0;
4
+ exports.resolvePlanningContract = resolvePlanningContract;
5
+ exports.PLANNING_CONTRACT = [
6
+ 'Ask one clarifying question at a time — do not batch questions.',
7
+ 'Wait for user confirmation before advancing to the next planning stage.',
8
+ 'Use the recommended skill for the current stage (brainstorming for discover, writing-plans for plan).',
9
+ 'Present 2-3 alternative approaches with trade-offs before settling on a direction.',
10
+ 'Break implementation into bite-sized tasks (2-5 minutes each).',
11
+ ];
12
+ const PLANNING_AGENT_IDS = new Set([
13
+ 'technical-planner',
14
+ 'solution-architect',
15
+ 'plan-mode',
16
+ 'auto-mode',
17
+ ]);
18
+ const PLANNING_MODES = new Set(['PLAN', 'AUTO']);
19
+ function resolvePlanningContract(mode, agentId) {
20
+ if (!PLANNING_MODES.has(mode.toUpperCase())) {
21
+ return undefined;
22
+ }
23
+ if (agentId && PLANNING_AGENT_IDS.has(agentId)) {
24
+ return exports.PLANNING_CONTRACT;
25
+ }
26
+ return undefined;
27
+ }
28
+ //# sourceMappingURL=planning-contract.js.map
@@ -0,0 +1,20 @@
1
+ import type { ClarificationMetadata } from './clarification-gate';
2
+ export type PlanningStage = 'discover' | 'design' | 'plan';
3
+ export interface StageProgression {
4
+ completedStages: PlanningStage[];
5
+ currentStage: PlanningStage;
6
+ remainingStages: PlanningStage[];
7
+ }
8
+ export interface PlanningStageMetadata {
9
+ currentStage: PlanningStage;
10
+ stageDescription: string;
11
+ nextStage?: 'design' | 'plan';
12
+ stageTransitionHint?: string;
13
+ recommendedAgent?: string;
14
+ recommendedSkill?: string;
15
+ stageProgression?: StageProgression;
16
+ }
17
+ export interface PlanningStageOptions {
18
+ stageHint?: PlanningStage;
19
+ }
20
+ export declare function resolvePlanningStage(clarification: ClarificationMetadata, options?: PlanningStageOptions): PlanningStageMetadata;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolvePlanningStage = resolvePlanningStage;
4
+ const STAGE_DESCRIPTIONS = {
5
+ discover: 'Discover: Surface questions, constraints, and the option space before committing to an approach.',
6
+ design: 'Design: Synthesize candidate approaches, compare trade-offs, and identify open risks.',
7
+ plan: 'Plan: Produce a concrete, step-by-step implementation plan.',
8
+ };
9
+ const STAGE_TRANSITION_HINTS = {
10
+ discover: 'Answer the clarification question(s) or confirm the direction to proceed to Design.',
11
+ design: 'Confirm the preferred approach to proceed to the concrete implementation Plan.',
12
+ };
13
+ const STAGE_AGENTS = {
14
+ discover: 'solution-architect',
15
+ design: 'solution-architect',
16
+ plan: 'technical-planner',
17
+ };
18
+ const STAGE_SKILLS = {
19
+ discover: 'brainstorming',
20
+ design: undefined,
21
+ plan: 'writing-plans',
22
+ };
23
+ function resolvePlanningStage(clarification, options = {}) {
24
+ const stage = resolveStage(clarification, options);
25
+ return {
26
+ currentStage: stage,
27
+ stageDescription: STAGE_DESCRIPTIONS[stage],
28
+ ...(stage !== 'plan' && { nextStage: getNextStage(stage) }),
29
+ ...(stage !== 'plan' && {
30
+ stageTransitionHint: STAGE_TRANSITION_HINTS[stage],
31
+ }),
32
+ recommendedAgent: STAGE_AGENTS[stage],
33
+ ...(STAGE_SKILLS[stage] && { recommendedSkill: STAGE_SKILLS[stage] }),
34
+ stageProgression: buildStageProgression(stage),
35
+ };
36
+ }
37
+ function resolveStage(clarification, options) {
38
+ if (options.stageHint) {
39
+ return options.stageHint;
40
+ }
41
+ if (clarification.clarificationNeeded) {
42
+ return 'discover';
43
+ }
44
+ return 'discover';
45
+ }
46
+ function getNextStage(stage) {
47
+ return stage === 'discover' ? 'design' : 'plan';
48
+ }
49
+ const ALL_STAGES = ['discover', 'design', 'plan'];
50
+ function buildStageProgression(currentStage) {
51
+ const currentIndex = ALL_STAGES.indexOf(currentStage);
52
+ return {
53
+ completedStages: ALL_STAGES.slice(0, currentIndex),
54
+ currentStage,
55
+ remainingStages: ALL_STAGES.slice(currentIndex + 1),
56
+ };
57
+ }
58
+ //# sourceMappingURL=planning-stage.js.map
@@ -2,10 +2,12 @@ import type { ToolDefinition } from './base.handler';
2
2
  import type { ToolResponse } from '../response.utils';
3
3
  import { AbstractHandler } from './abstract-handler';
4
4
  import { QualityReportService } from '../../ship/quality-report.service';
5
+ import { RuleEventCollector } from '../../rules/rule-event-collector';
5
6
  export declare class QualityReportHandler extends AbstractHandler {
6
7
  private readonly qualityReportService;
8
+ private readonly ruleEventCollector;
7
9
  private readonly logger;
8
- constructor(qualityReportService: QualityReportService);
10
+ constructor(qualityReportService: QualityReportService, ruleEventCollector: RuleEventCollector);
9
11
  protected getHandledTools(): string[];
10
12
  protected handleTool(_toolName: string, args: Record<string, unknown> | undefined): Promise<ToolResponse>;
11
13
  getToolDefinitions(): ToolDefinition[];
@@ -16,10 +16,12 @@ const abstract_handler_1 = require("./abstract-handler");
16
16
  const quality_report_service_1 = require("../../ship/quality-report.service");
17
17
  const response_utils_1 = require("../response.utils");
18
18
  const validation_constants_1 = require("../../shared/validation.constants");
19
+ const rule_event_collector_1 = require("../../rules/rule-event-collector");
19
20
  let QualityReportHandler = QualityReportHandler_1 = class QualityReportHandler extends abstract_handler_1.AbstractHandler {
20
- constructor(qualityReportService) {
21
+ constructor(qualityReportService, ruleEventCollector) {
21
22
  super();
22
23
  this.qualityReportService = qualityReportService;
24
+ this.ruleEventCollector = ruleEventCollector;
23
25
  this.logger = new common_1.Logger(QualityReportHandler_1.name);
24
26
  }
25
27
  getHandledTools() {
@@ -36,6 +38,21 @@ let QualityReportHandler = QualityReportHandler_1 = class QualityReportHandler e
36
38
  changedFiles,
37
39
  timeout,
38
40
  });
41
+ try {
42
+ const domains = result.domains;
43
+ if (domains?.length) {
44
+ const timestamp = new Date().toISOString();
45
+ for (const d of domains) {
46
+ this.ruleEventCollector.record({
47
+ type: 'specialist_dispatched',
48
+ timestamp,
49
+ domain: d.domain,
50
+ });
51
+ }
52
+ }
53
+ }
54
+ catch {
55
+ }
39
56
  return (0, response_utils_1.createJsonResponse)(result);
40
57
  }
41
58
  catch (error) {
@@ -70,6 +87,7 @@ let QualityReportHandler = QualityReportHandler_1 = class QualityReportHandler e
70
87
  exports.QualityReportHandler = QualityReportHandler;
71
88
  exports.QualityReportHandler = QualityReportHandler = QualityReportHandler_1 = __decorate([
72
89
  (0, common_1.Injectable)(),
73
- __metadata("design:paramtypes", [quality_report_service_1.QualityReportService])
90
+ __metadata("design:paramtypes", [quality_report_service_1.QualityReportService,
91
+ rule_event_collector_1.RuleEventCollector])
74
92
  ], QualityReportHandler);
75
93
  //# sourceMappingURL=quality-report.handler.js.map
@@ -0,0 +1,12 @@
1
+ import type { ToolDefinition } from './base.handler';
2
+ import type { ToolResponse } from '../response.utils';
3
+ import { AbstractHandler } from './abstract-handler';
4
+ import { ReviewPrService } from '../../ship/review-pr.service';
5
+ export declare class ReviewPrHandler extends AbstractHandler {
6
+ private readonly reviewPrService;
7
+ private readonly logger;
8
+ constructor(reviewPrService: ReviewPrService);
9
+ protected getHandledTools(): string[];
10
+ protected handleTool(_toolName: string, args: Record<string, unknown> | undefined): Promise<ToolResponse>;
11
+ getToolDefinitions(): ToolDefinition[];
12
+ }
@@ -0,0 +1,81 @@
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 ReviewPrHandler_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.ReviewPrHandler = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const abstract_handler_1 = require("./abstract-handler");
16
+ const review_pr_service_1 = require("../../ship/review-pr.service");
17
+ const response_utils_1 = require("../response.utils");
18
+ let ReviewPrHandler = ReviewPrHandler_1 = class ReviewPrHandler extends abstract_handler_1.AbstractHandler {
19
+ constructor(reviewPrService) {
20
+ super();
21
+ this.reviewPrService = reviewPrService;
22
+ this.logger = new common_1.Logger(ReviewPrHandler_1.name);
23
+ }
24
+ getHandledTools() {
25
+ return ['review_pr'];
26
+ }
27
+ async handleTool(_toolName, args) {
28
+ try {
29
+ const prNumber = args?.pr_number;
30
+ if (typeof prNumber !== 'number' || !Number.isFinite(prNumber) || prNumber <= 0) {
31
+ return (0, response_utils_1.createErrorResponse)('pr_number is required and must be a positive number');
32
+ }
33
+ const issueNumber = typeof args?.issue_number === 'number' && args.issue_number > 0
34
+ ? args.issue_number
35
+ : undefined;
36
+ const timeout = typeof args?.timeout === 'number' && args.timeout > 0 ? args.timeout : 30000;
37
+ const result = await this.reviewPrService.reviewPr({
38
+ prNumber,
39
+ issueNumber,
40
+ timeout,
41
+ });
42
+ return (0, response_utils_1.createJsonResponse)(result);
43
+ }
44
+ catch (error) {
45
+ this.logger.error(`review_pr failed: ${error}`);
46
+ return (0, response_utils_1.createErrorResponse)(`review_pr failed: ${error instanceof Error ? error.message : String(error)}`);
47
+ }
48
+ }
49
+ getToolDefinitions() {
50
+ return [
51
+ {
52
+ name: 'review_pr',
53
+ description: 'Fetch PR metadata, diff, checklists, and specialist recommendations for EVAL-mode PR review. Returns structured data for comprehensive code review.',
54
+ inputSchema: {
55
+ type: 'object',
56
+ properties: {
57
+ pr_number: {
58
+ type: 'number',
59
+ description: 'PR number to review',
60
+ },
61
+ issue_number: {
62
+ type: 'number',
63
+ description: 'Optional linked issue number for spec compliance check',
64
+ },
65
+ timeout: {
66
+ type: 'number',
67
+ description: 'Timeout in milliseconds (default: 30000)',
68
+ },
69
+ },
70
+ required: ['pr_number'],
71
+ },
72
+ },
73
+ ];
74
+ }
75
+ };
76
+ exports.ReviewPrHandler = ReviewPrHandler;
77
+ exports.ReviewPrHandler = ReviewPrHandler = ReviewPrHandler_1 = __decorate([
78
+ (0, common_1.Injectable)(),
79
+ __metadata("design:paramtypes", [review_pr_service_1.ReviewPrService])
80
+ ], ReviewPrHandler);
81
+ //# sourceMappingURL=review-pr.handler.js.map
@@ -46,6 +46,7 @@ const handlers = [
46
46
  handlers_1.PluginValidationHandler,
47
47
  handlers_1.ReleaseCheckHandler,
48
48
  handlers_1.QualityReportHandler,
49
+ handlers_1.ReviewPrHandler,
49
50
  handlers_1.BriefingHandler,
50
51
  handlers_1.ResumeHandler,
51
52
  handlers_1.RuleImpactHandler,
@@ -11,6 +11,7 @@ export declare class RulesService {
11
11
  getRuleContent(relativePath: string): Promise<string>;
12
12
  listAgents(): Promise<string[]>;
13
13
  private sortAgentsByPriority;
14
+ getRulesDir(): string;
14
15
  isModeAgent(agentName: string): boolean;
15
16
  getAgent(name: string): Promise<AgentProfile>;
16
17
  searchRules(query: string): Promise<SearchResult[]>;
@@ -18,6 +19,11 @@ export declare class RulesService {
18
19
  name: string;
19
20
  description: string;
20
21
  triggers?: SkillFrontmatterTrigger[];
22
+ userInvocable?: boolean;
23
+ disableModelInvocation?: boolean;
24
+ context?: string;
25
+ agent?: string;
26
+ allowedTools?: string[];
21
27
  }>>;
22
28
  getSkill(name: string): Promise<Skill>;
23
29
  }
@@ -82,6 +82,9 @@ let RulesService = RulesService_1 = class RulesService {
82
82
  const sortedModeAgents = keyword_types_1.MODE_AGENTS.filter(agent => foundModeAgents.includes(agent));
83
83
  return [...sortedModeAgents, ...otherAgents.sort()];
84
84
  }
85
+ getRulesDir() {
86
+ return this.rulesDir;
87
+ }
85
88
  isModeAgent(agentName) {
86
89
  return keyword_types_1.MODE_AGENTS.includes(agentName);
87
90
  }
@@ -13,5 +13,10 @@ export interface Skill {
13
13
  content: string;
14
14
  path: string;
15
15
  triggers?: SkillFrontmatterTrigger[];
16
+ userInvocable?: boolean;
17
+ disableModelInvocation?: boolean;
18
+ context?: string;
19
+ agent?: string;
20
+ allowedTools?: string[];
16
21
  }
17
22
  export declare function parseSkill(content: string, filePath: string): Skill;
@@ -13,6 +13,30 @@ class SkillSchemaError extends Error {
13
13
  }
14
14
  }
15
15
  exports.SkillSchemaError = SkillSchemaError;
16
+ function splitAllowedTools(s) {
17
+ const result = [];
18
+ let current = '';
19
+ let depth = 0;
20
+ for (const ch of s) {
21
+ if (ch === '(')
22
+ depth++;
23
+ else if (ch === ')')
24
+ depth--;
25
+ if (ch === ',' && depth === 0) {
26
+ const trimmed = current.trim();
27
+ if (trimmed)
28
+ result.push(trimmed);
29
+ current = '';
30
+ }
31
+ else {
32
+ current += ch;
33
+ }
34
+ }
35
+ const trimmed = current.trim();
36
+ if (trimmed)
37
+ result.push(trimmed);
38
+ return result;
39
+ }
16
40
  const SkillFrontmatterTriggerSchema = z.object({
17
41
  pattern: z.string().min(1),
18
42
  confidence: z.enum(['high', 'medium', 'low']),
@@ -24,6 +48,13 @@ const SkillFrontmatterSchema = z.object({
24
48
  .regex(/^[a-z0-9-]+$/, 'Skill name must be lowercase alphanumeric with hyphens only'),
25
49
  description: z.string().min(1).max(500),
26
50
  triggers: z.array(SkillFrontmatterTriggerSchema).optional(),
51
+ 'user-invocable': z.boolean().optional(),
52
+ 'disable-model-invocation': z.boolean().optional(),
53
+ context: z.string().optional(),
54
+ agent: z.string().optional(),
55
+ 'allowed-tools': z
56
+ .union([z.array(z.string()), z.string().transform(s => splitAllowedTools(s))])
57
+ .optional(),
27
58
  });
28
59
  const FRONTMATTER_REGEX = /^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/;
29
60
  function parseFrontmatter(content) {
@@ -65,6 +96,11 @@ function parseSkill(content, filePath) {
65
96
  content: body,
66
97
  path: filePath,
67
98
  triggers: result.data.triggers,
99
+ userInvocable: result.data['user-invocable'],
100
+ disableModelInvocation: result.data['disable-model-invocation'],
101
+ context: result.data.context,
102
+ agent: result.data.agent,
103
+ allowedTools: result.data['allowed-tools'],
68
104
  };
69
105
  }
70
106
  //# sourceMappingURL=skill.schema.js.map