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
@@ -0,0 +1,276 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.COMMAND_FLAGS = exports.GLOBAL_FLAGS = exports.COMMANDS = void 0;
4
+ exports.getPluginNames = getPluginNames;
5
+ exports.generateBashCompletion = generateBashCompletion;
6
+ exports.generateZshCompletion = generateZshCompletion;
7
+ exports.generateFishCompletion = generateFishCompletion;
8
+ exports.generateCompletion = generateCompletion;
9
+ exports.runCompletion = runCompletion;
10
+ const fs_1 = require("fs");
11
+ const path_1 = require("path");
12
+ exports.COMMANDS = [
13
+ 'init',
14
+ 'install',
15
+ 'search',
16
+ 'plugins',
17
+ 'update',
18
+ 'uninstall',
19
+ 'mcp',
20
+ 'tui',
21
+ 'completion',
22
+ ];
23
+ exports.GLOBAL_FLAGS = ['--help', '--version'];
24
+ exports.COMMAND_FLAGS = {
25
+ init: ['--force', '--yes', '--api-key'],
26
+ install: ['--force'],
27
+ uninstall: ['--yes'],
28
+ tui: ['--restart'],
29
+ completion: ['bash', 'zsh', 'fish'],
30
+ };
31
+ const COMMAND_DESCRIPTIONS = {
32
+ init: 'Initialize configuration',
33
+ install: 'Install a plugin from git repository',
34
+ search: 'Search plugins in the registry',
35
+ plugins: 'List installed plugins',
36
+ update: 'Check and update outdated plugins',
37
+ uninstall: 'Uninstall a plugin',
38
+ mcp: 'Start MCP server (stdio mode)',
39
+ tui: 'Monitor agent execution in real-time',
40
+ completion: 'Generate shell completion script',
41
+ };
42
+ function getPluginNames(projectRoot) {
43
+ const pluginsPath = (0, path_1.join)(projectRoot, '.codingbuddy', 'plugins.json');
44
+ if (!(0, fs_1.existsSync)(pluginsPath)) {
45
+ return [];
46
+ }
47
+ try {
48
+ const raw = (0, fs_1.readFileSync)(pluginsPath, 'utf-8');
49
+ const data = JSON.parse(raw);
50
+ return (data.plugins ?? []).map(p => p.name);
51
+ }
52
+ catch {
53
+ return [];
54
+ }
55
+ }
56
+ function generateBashCompletion() {
57
+ const cmds = exports.COMMANDS.join(' ');
58
+ const globalFlags = exports.GLOBAL_FLAGS.join(' ');
59
+ const initFlags = (exports.COMMAND_FLAGS.init ?? []).join(' ');
60
+ const installFlags = (exports.COMMAND_FLAGS.install ?? []).join(' ');
61
+ const uninstallFlags = (exports.COMMAND_FLAGS.uninstall ?? []).join(' ');
62
+ const tuiFlags = (exports.COMMAND_FLAGS.tui ?? []).join(' ');
63
+ return `#!/bin/bash
64
+ # codingbuddy bash completion
65
+ # Install: codingbuddy completion bash >> ~/.bashrc
66
+ # or: codingbuddy completion bash > /etc/bash_completion.d/codingbuddy
67
+
68
+ _codingbuddy_get_plugin_names() {
69
+ local plugins_file=".codingbuddy/plugins.json"
70
+ if [[ -f "$plugins_file" ]]; then
71
+ grep -o '"name"[[:space:]]*:[[:space:]]*"[^"]*"' "$plugins_file" | sed 's/"name"[[:space:]]*:[[:space:]]*"\\([^"]*\\)"/\\1/'
72
+ fi
73
+ }
74
+
75
+ _codingbuddy_completions() {
76
+ local cur prev commands
77
+ cur="\${COMP_WORDS[COMP_CWORD]}"
78
+ prev="\${COMP_WORDS[COMP_CWORD-1]}"
79
+ commands="${cmds}"
80
+
81
+ # Complete commands at position 1
82
+ if [[ \${COMP_CWORD} -eq 1 ]]; then
83
+ COMPREPLY=( $(compgen -W "$commands ${globalFlags}" -- "$cur") )
84
+ return
85
+ fi
86
+
87
+ # Complete based on command
88
+ case "\${COMP_WORDS[1]}" in
89
+ init)
90
+ COMPREPLY=( $(compgen -W "${initFlags}" -- "$cur") )
91
+ ;;
92
+ install)
93
+ COMPREPLY=( $(compgen -W "${installFlags}" -- "$cur") )
94
+ ;;
95
+ uninstall)
96
+ if [[ \${COMP_CWORD} -eq 2 ]]; then
97
+ local plugins=$(_codingbuddy_get_plugin_names)
98
+ COMPREPLY=( $(compgen -W "$plugins ${uninstallFlags}" -- "$cur") )
99
+ else
100
+ COMPREPLY=( $(compgen -W "${uninstallFlags}" -- "$cur") )
101
+ fi
102
+ ;;
103
+ update)
104
+ if [[ \${COMP_CWORD} -eq 2 ]]; then
105
+ local plugins=$(_codingbuddy_get_plugin_names)
106
+ COMPREPLY=( $(compgen -W "$plugins" -- "$cur") )
107
+ fi
108
+ ;;
109
+ tui)
110
+ COMPREPLY=( $(compgen -W "${tuiFlags}" -- "$cur") )
111
+ ;;
112
+ completion)
113
+ COMPREPLY=( $(compgen -W "bash zsh fish" -- "$cur") )
114
+ ;;
115
+ esac
116
+ }
117
+
118
+ complete -F _codingbuddy_completions codingbuddy
119
+ `;
120
+ }
121
+ function generateZshCompletion() {
122
+ const cmdEntries = exports.COMMANDS.map(cmd => ` '${cmd}:${COMMAND_DESCRIPTIONS[cmd] ?? cmd}'`).join('\n');
123
+ const initFlags = (exports.COMMAND_FLAGS.init ?? [])
124
+ .map(f => ` '${f}[${f === '--force' ? 'Overwrite existing config' : f === '--yes' ? 'Accept defaults' : 'Anthropic API key'}]'`)
125
+ .join('\n');
126
+ const installFlags = (exports.COMMAND_FLAGS.install ?? [])
127
+ .map(f => ` '${f}[Force install]'`)
128
+ .join('\n');
129
+ const uninstallFlags = (exports.COMMAND_FLAGS.uninstall ?? [])
130
+ .map(f => ` '${f}[Skip confirmation]'`)
131
+ .join('\n');
132
+ return `#compdef codingbuddy
133
+ # codingbuddy zsh completion
134
+ # Install: codingbuddy completion zsh > ~/.zsh/completions/_codingbuddy
135
+ # then add to ~/.zshrc: fpath=(~/.zsh/completions $fpath)
136
+
137
+ _codingbuddy_get_plugin_names() {
138
+ local plugins_file=".codingbuddy/plugins.json"
139
+ if [[ -f "$plugins_file" ]]; then
140
+ grep -o '"name"[[:space:]]*:[[:space:]]*"[^"]*"' "$plugins_file" | sed 's/"name"[[:space:]]*:[[:space:]]*"\\([^"]*\\)"/\\1/'
141
+ fi
142
+ }
143
+
144
+ _codingbuddy() {
145
+ local -a commands
146
+ commands=(
147
+ ${cmdEntries}
148
+ )
149
+
150
+ _arguments -C \\
151
+ '1:command:->command' \\
152
+ '*::arg:->args'
153
+
154
+ case "$state" in
155
+ command)
156
+ _describe 'command' commands
157
+ compadd -- --help --version
158
+ ;;
159
+ args)
160
+ case "\${words[1]}" in
161
+ init)
162
+ _arguments \\
163
+ ${initFlags}
164
+ ;;
165
+ install)
166
+ _arguments \\
167
+ ${installFlags}
168
+ ;;
169
+ uninstall)
170
+ if (( CURRENT == 2 )); then
171
+ local -a plugins
172
+ plugins=(\${(f)"$(_codingbuddy_get_plugin_names)"})
173
+ compadd -a plugins
174
+ fi
175
+ _arguments \\
176
+ ${uninstallFlags}
177
+ ;;
178
+ update)
179
+ if (( CURRENT == 2 )); then
180
+ local -a plugins
181
+ plugins=(\${(f)"$(_codingbuddy_get_plugin_names)"})
182
+ compadd -a plugins
183
+ fi
184
+ ;;
185
+ tui)
186
+ _arguments \\
187
+ '--restart[Restart TUI client]'
188
+ ;;
189
+ completion)
190
+ compadd bash zsh fish
191
+ ;;
192
+ esac
193
+ ;;
194
+ esac
195
+ }
196
+
197
+ _codingbuddy "$@"
198
+ `;
199
+ }
200
+ function generateFishCompletion() {
201
+ const noSubcommandCond = '__fish_seen_subcommand_from init install search plugins update uninstall mcp tui completion';
202
+ const lines = [
203
+ '# codingbuddy fish completion',
204
+ '# Install: codingbuddy completion fish > ~/.config/fish/completions/codingbuddy.fish',
205
+ '',
206
+ '# Helper: get plugin names from plugins.json',
207
+ 'function __codingbuddy_plugin_names',
208
+ ' set -l plugins_file ".codingbuddy/plugins.json"',
209
+ ' if test -f $plugins_file',
210
+ ' string match -rg \'"name"\\s*:\\s*"([^"]*)"\' < $plugins_file',
211
+ ' end',
212
+ 'end',
213
+ '',
214
+ '# Disable file completions by default',
215
+ 'complete -c codingbuddy -f',
216
+ '',
217
+ '# Commands (only when no subcommand given)',
218
+ ];
219
+ for (const cmd of exports.COMMANDS) {
220
+ const desc = COMMAND_DESCRIPTIONS[cmd] ?? cmd;
221
+ lines.push(`complete -c codingbuddy -n "not ${noSubcommandCond}" -a "${cmd}" -d "${desc}"`);
222
+ }
223
+ lines.push('');
224
+ lines.push('# Global flags');
225
+ lines.push(`complete -c codingbuddy -n "not ${noSubcommandCond}" -l help -d "Show help"`);
226
+ lines.push(`complete -c codingbuddy -n "not ${noSubcommandCond}" -l version -d "Show version"`);
227
+ lines.push('');
228
+ lines.push('# init flags');
229
+ lines.push('complete -c codingbuddy -n "__fish_seen_subcommand_from init" -l force -s f -d "Overwrite existing config"');
230
+ lines.push('complete -c codingbuddy -n "__fish_seen_subcommand_from init" -l yes -s y -d "Accept defaults"');
231
+ lines.push('complete -c codingbuddy -n "__fish_seen_subcommand_from init" -l api-key -d "Anthropic API key"');
232
+ lines.push('');
233
+ lines.push('# install flags');
234
+ lines.push('complete -c codingbuddy -n "__fish_seen_subcommand_from install" -l force -s f -d "Force install"');
235
+ lines.push('');
236
+ lines.push('# uninstall - dynamic plugin names + flags');
237
+ lines.push('complete -c codingbuddy -n "__fish_seen_subcommand_from uninstall" -a "(__codingbuddy_plugin_names)" -d "Plugin name"');
238
+ lines.push('complete -c codingbuddy -n "__fish_seen_subcommand_from uninstall" -l yes -s y -d "Skip confirmation"');
239
+ lines.push('');
240
+ lines.push('# update - dynamic plugin names');
241
+ lines.push('complete -c codingbuddy -n "__fish_seen_subcommand_from update" -a "(__codingbuddy_plugin_names)" -d "Plugin name"');
242
+ lines.push('');
243
+ lines.push('# tui flags');
244
+ lines.push('complete -c codingbuddy -n "__fish_seen_subcommand_from tui" -l restart -d "Restart TUI client"');
245
+ lines.push('');
246
+ lines.push('# completion subcommands');
247
+ lines.push('complete -c codingbuddy -n "__fish_seen_subcommand_from completion" -a "bash zsh fish" -d "Shell type"');
248
+ lines.push('');
249
+ return lines.join('\n');
250
+ }
251
+ function generateCompletion(shell) {
252
+ switch (shell) {
253
+ case 'bash':
254
+ return generateBashCompletion();
255
+ case 'zsh':
256
+ return generateZshCompletion();
257
+ case 'fish':
258
+ return generateFishCompletion();
259
+ default:
260
+ return null;
261
+ }
262
+ }
263
+ function runCompletion(options) {
264
+ if (!options.shell) {
265
+ process.stderr.write('Error: Missing shell type. Usage: codingbuddy completion <bash|zsh|fish>\n');
266
+ return { success: false, error: 'Missing shell type' };
267
+ }
268
+ const script = generateCompletion(options.shell);
269
+ if (!script) {
270
+ process.stderr.write(`Error: Unsupported shell "${options.shell}". Supported: bash, zsh, fish\n`);
271
+ return { success: false, error: `Unsupported shell: ${options.shell}` };
272
+ }
273
+ process.stdout.write(script);
274
+ return { success: true };
275
+ }
276
+ //# sourceMappingURL=completion.js.map
@@ -0,0 +1,2 @@
1
+ export { runCompletion, generateCompletion } from './completion';
2
+ export type { CompletionOptions, CompletionResult } from './completion';
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateCompletion = exports.runCompletion = void 0;
4
+ var completion_1 = require("./completion");
5
+ Object.defineProperty(exports, "runCompletion", { enumerable: true, get: function () { return completion_1.runCompletion; } });
6
+ Object.defineProperty(exports, "generateCompletion", { enumerable: true, get: function () { return completion_1.generateCompletion; } });
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,21 @@
1
+ export interface CreatePluginOptions {
2
+ name: string;
3
+ outputDir: string;
4
+ template: 'minimal' | 'full';
5
+ description?: string;
6
+ author?: string;
7
+ }
8
+ export interface CreatePluginResult {
9
+ success: boolean;
10
+ pluginDir?: string;
11
+ error?: string;
12
+ }
13
+ export interface TemplateContext {
14
+ name: string;
15
+ description: string;
16
+ author: string;
17
+ }
18
+ export declare function validatePluginName(name: string): boolean;
19
+ export declare function generateMinimalTemplate(ctx: TemplateContext): Record<string, string>;
20
+ export declare function generateFullTemplate(ctx: TemplateContext): Record<string, string>;
21
+ export declare function runCreatePlugin(options: CreatePluginOptions): Promise<CreatePluginResult>;
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validatePluginName = validatePluginName;
4
+ exports.generateMinimalTemplate = generateMinimalTemplate;
5
+ exports.generateFullTemplate = generateFullTemplate;
6
+ exports.runCreatePlugin = runCreatePlugin;
7
+ const fs = require("fs");
8
+ const path = require("path");
9
+ const child_process_1 = require("child_process");
10
+ const console_1 = require("../utils/console");
11
+ const PLUGIN_NAME_REGEX = /^[a-z][a-z0-9-]*$/;
12
+ function validatePluginName(name) {
13
+ return PLUGIN_NAME_REGEX.test(name);
14
+ }
15
+ function getDefaultAuthor() {
16
+ try {
17
+ return (0, child_process_1.execSync)('git config user.name', { encoding: 'utf-8' }).trim();
18
+ }
19
+ catch {
20
+ return 'unknown';
21
+ }
22
+ }
23
+ function generateMinimalTemplate(ctx) {
24
+ const manifest = {
25
+ name: ctx.name,
26
+ version: '1.0.0',
27
+ description: ctx.description,
28
+ author: ctx.author,
29
+ provides: {
30
+ agents: [],
31
+ rules: [],
32
+ skills: [],
33
+ checklists: [],
34
+ },
35
+ };
36
+ const readme = `# ${ctx.name}
37
+
38
+ ${ctx.description}
39
+
40
+ ## Installation
41
+
42
+ \`\`\`bash
43
+ codingbuddy install ./${ctx.name}
44
+ \`\`\`
45
+
46
+ ## Author
47
+
48
+ ${ctx.author}
49
+ `;
50
+ const gitignore = `node_modules/
51
+ dist/
52
+ .DS_Store
53
+ `;
54
+ return {
55
+ 'plugin.json': JSON.stringify(manifest, null, 2),
56
+ 'README.md': readme,
57
+ '.gitignore': gitignore,
58
+ };
59
+ }
60
+ function generateFullTemplate(ctx) {
61
+ const minimalFiles = generateMinimalTemplate(ctx);
62
+ const manifest = JSON.parse(minimalFiles['plugin.json']);
63
+ manifest.provides = {
64
+ agents: ['agents/example-agent.json'],
65
+ rules: ['rules/example-rule.md'],
66
+ skills: ['skills/example-skill.md'],
67
+ checklists: ['checklists/example-checklist.json'],
68
+ };
69
+ const exampleAgent = {
70
+ name: 'Example Agent',
71
+ description: `Example specialist agent for ${ctx.name}`,
72
+ role: {
73
+ title: 'Example Specialist',
74
+ expertise: ['example-domain'],
75
+ },
76
+ activation_message: {
77
+ formatted: '🤖 example-agent [Example Specialist]',
78
+ },
79
+ };
80
+ const exampleSkill = `# Example Skill
81
+
82
+ ## Purpose
83
+
84
+ An example skill provided by ${ctx.name}.
85
+
86
+ ## Instructions
87
+
88
+ Describe the skill instructions here.
89
+ `;
90
+ const exampleRule = `# Example Rule
91
+
92
+ ## Description
93
+
94
+ An example rule provided by ${ctx.name}.
95
+
96
+ ## Guidelines
97
+
98
+ - Guideline 1
99
+ - Guideline 2
100
+ `;
101
+ const exampleChecklist = {
102
+ name: 'Example Checklist',
103
+ description: `Example checklist from ${ctx.name}`,
104
+ items: [
105
+ {
106
+ id: 'example-1',
107
+ text: 'Check example condition',
108
+ severity: 'medium',
109
+ },
110
+ ],
111
+ };
112
+ return {
113
+ ...minimalFiles,
114
+ 'plugin.json': JSON.stringify(manifest, null, 2),
115
+ 'agents/example-agent.json': JSON.stringify(exampleAgent, null, 2),
116
+ 'skills/example-skill.md': exampleSkill,
117
+ 'rules/example-rule.md': exampleRule,
118
+ 'checklists/example-checklist.json': JSON.stringify(exampleChecklist, null, 2),
119
+ };
120
+ }
121
+ async function runCreatePlugin(options) {
122
+ const console = (0, console_1.createConsoleUtils)();
123
+ if (!validatePluginName(options.name)) {
124
+ const msg = `Invalid plugin name "${options.name}". Must match /^[a-z][a-z0-9-]*$/`;
125
+ console.log.error(msg);
126
+ return { success: false, error: msg };
127
+ }
128
+ const pluginDir = path.join(options.outputDir, options.name);
129
+ if (fs.existsSync(pluginDir)) {
130
+ const msg = `Directory "${pluginDir}" already exists`;
131
+ console.log.error(msg);
132
+ return { success: false, error: msg };
133
+ }
134
+ const author = options.author ?? getDefaultAuthor();
135
+ const description = options.description ?? `A CodingBuddy plugin: ${options.name}`;
136
+ const ctx = {
137
+ name: options.name,
138
+ description,
139
+ author,
140
+ };
141
+ const files = options.template === 'full' ? generateFullTemplate(ctx) : generateMinimalTemplate(ctx);
142
+ console.log.step('🔧', `Scaffolding plugin "${options.name}" (${options.template} template)...`);
143
+ for (const [filePath, content] of Object.entries(files)) {
144
+ const fullPath = path.join(pluginDir, filePath);
145
+ fs.mkdirSync(path.dirname(fullPath), { recursive: true });
146
+ fs.writeFileSync(fullPath, content, 'utf-8');
147
+ }
148
+ console.log.success(`Plugin "${options.name}" created at ${pluginDir}`);
149
+ return { success: true, pluginDir };
150
+ }
151
+ //# sourceMappingURL=create-plugin.command.js.map
@@ -1,3 +1,4 @@
1
+ export declare function resolveHudStateDir(): string;
1
2
  export declare function runTui(options?: {
2
3
  restart?: boolean;
3
4
  }): Promise<void>;
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveHudStateDir = resolveHudStateDir;
3
4
  exports.runTui = runTui;
4
5
  const path = require("node:path");
5
6
  const os = require("node:os");
@@ -7,6 +8,11 @@ const ipc_types_1 = require("../tui/ipc/ipc.types");
7
8
  const instance_registry_1 = require("../tui/ipc/instance-registry");
8
9
  const restart_tui_1 = require("./restart-tui");
9
10
  const CLIENT_SHUTDOWN_TIMEOUT_MS = 3000;
11
+ function resolveHudStateDir() {
12
+ return (process.env.CODINGBUDDY_HUD_STATE_DIR ??
13
+ process.env.CLAUDE_PLUGIN_DATA ??
14
+ path.join(os.homedir(), '.codingbuddy'));
15
+ }
10
16
  async function runTui(options = {}) {
11
17
  if (options.restart) {
12
18
  const result = await (0, restart_tui_1.restartTui)();
@@ -46,7 +52,7 @@ async function runTui(options = {}) {
46
52
  const { HudFileBridge } = await Promise.resolve().then(() => require('../tui/events'));
47
53
  const sessions = manager.getSessions();
48
54
  if (sessions.length > 0) {
49
- const hudStatePath = path.join(process.env.CODINGBUDDY_HUD_STATE_DIR ?? path.join(os.homedir(), '.codingbuddy'), 'hud-state.json');
55
+ const hudStatePath = path.join(resolveHudStateDir(), 'hud-state.json');
50
56
  const bridge = new HudFileBridge(sessions[0].eventBus, hudStatePath);
51
57
  bridge.start();
52
58
  hudBridge = bridge;
@@ -0,0 +1,2 @@
1
+ import type { CouncilInput, CouncilSummary } from './council-summary.types';
2
+ export declare function generateCouncilSummary(inputs: readonly CouncilInput[]): CouncilSummary;
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateCouncilSummary = generateCouncilSummary;
4
+ function generateCouncilSummary(inputs) {
5
+ const opinions = [];
6
+ const failedAgents = [];
7
+ for (const input of inputs) {
8
+ if (input.opinion !== null) {
9
+ opinions.push(input.opinion);
10
+ }
11
+ else {
12
+ failedAgents.push(input.agentName);
13
+ }
14
+ }
15
+ const partialFailure = failedAgents.length > 0;
16
+ const consensus = detectConsensus(opinions);
17
+ const disagreements = detectDisagreements(opinions);
18
+ const blockingRisks = extractBlockingRisks(opinions);
19
+ const nextStep = determineNextStep(opinions, failedAgents, blockingRisks);
20
+ return {
21
+ opinions,
22
+ failedAgents,
23
+ consensus,
24
+ disagreements,
25
+ blockingRisks,
26
+ nextStep,
27
+ partialFailure,
28
+ };
29
+ }
30
+ function detectConsensus(opinions) {
31
+ if (opinions.length === 0)
32
+ return [];
33
+ const points = [];
34
+ const stances = new Set(opinions.map(o => o.stance));
35
+ if (stances.size === 1) {
36
+ const stance = opinions[0].stance;
37
+ points.push(`All specialists ${stanceVerb(stance)}`);
38
+ }
39
+ const sharedChanges = findSharedSuggestedChanges(opinions);
40
+ for (const change of sharedChanges) {
41
+ points.push(`Shared recommendation: ${change}`);
42
+ }
43
+ return points;
44
+ }
45
+ function findSharedSuggestedChanges(opinions) {
46
+ const changeCounts = new Map();
47
+ for (const opinion of opinions) {
48
+ for (const change of opinion.suggestedChanges) {
49
+ changeCounts.set(change, (changeCounts.get(change) ?? 0) + 1);
50
+ }
51
+ }
52
+ const shared = [];
53
+ for (const [change, count] of changeCounts) {
54
+ if (count >= 2) {
55
+ shared.push(change);
56
+ }
57
+ }
58
+ return shared;
59
+ }
60
+ function stanceVerb(stance) {
61
+ switch (stance) {
62
+ case 'approve':
63
+ return 'approve';
64
+ case 'concern':
65
+ return 'express concerns';
66
+ case 'reject':
67
+ return 'reject';
68
+ }
69
+ }
70
+ function detectDisagreements(opinions) {
71
+ if (opinions.length < 2)
72
+ return [];
73
+ const stances = new Set(opinions.map(o => o.stance));
74
+ if (stances.size <= 1)
75
+ return [];
76
+ const positions = opinions.map(o => ({
77
+ agentName: o.agentName,
78
+ stance: o.stance,
79
+ reasoning: o.reasoning,
80
+ }));
81
+ return [
82
+ {
83
+ topic: 'Overall assessment',
84
+ positions,
85
+ },
86
+ ];
87
+ }
88
+ function extractBlockingRisks(opinions) {
89
+ return opinions.filter(o => o.stance === 'reject').map(o => `${o.agentName}: ${o.reasoning}`);
90
+ }
91
+ function determineNextStep(opinions, failedAgents, blockingRisks) {
92
+ if (opinions.length === 0 && failedAgents.length === 0) {
93
+ return 'No specialist input available. Run specialist analysis first.';
94
+ }
95
+ if (opinions.length === 0 && failedAgents.length > 0) {
96
+ return `Re-run failed specialists (${failedAgents.join(', ')}) to obtain analysis.`;
97
+ }
98
+ if (blockingRisks.length > 0) {
99
+ return `Address ${blockingRisks.length} blocking risk(s) before proceeding.`;
100
+ }
101
+ const concerns = opinions.filter(o => o.stance === 'concern');
102
+ const parts = [];
103
+ if (failedAgents.length > 0) {
104
+ parts.push(`re-run failed specialists (${failedAgents.join(', ')})`);
105
+ }
106
+ if (concerns.length > 0) {
107
+ parts.push(`review ${concerns.length} concern(s)`);
108
+ }
109
+ if (parts.length > 0) {
110
+ return `Proceed with caution: ${parts.join(', ')}.`;
111
+ }
112
+ return 'Proceed with implementation — all specialists approve.';
113
+ }
114
+ //# sourceMappingURL=council-summary.service.js.map
@@ -0,0 +1,24 @@
1
+ import type { AgentOpinion, Stance } from './types';
2
+ export interface CouncilInput {
3
+ readonly agentName: string;
4
+ readonly opinion: AgentOpinion | null;
5
+ readonly error?: string;
6
+ }
7
+ export interface DisagreementPosition {
8
+ readonly agentName: string;
9
+ readonly stance: Stance;
10
+ readonly reasoning: string;
11
+ }
12
+ export interface Disagreement {
13
+ readonly topic: string;
14
+ readonly positions: readonly DisagreementPosition[];
15
+ }
16
+ export interface CouncilSummary {
17
+ readonly opinions: readonly AgentOpinion[];
18
+ readonly failedAgents: readonly string[];
19
+ readonly consensus: readonly string[];
20
+ readonly disagreements: readonly Disagreement[];
21
+ readonly blockingRisks: readonly string[];
22
+ readonly nextStep: string;
23
+ readonly partialFailure: boolean;
24
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=council-summary.types.js.map
@@ -3,3 +3,5 @@ export { STANCES, STANCE_ICONS, createAgentOpinion, createCrossReview, createDis
3
3
  export { DiscussionEngine } from './discussion-engine';
4
4
  export { formatOpinion, formatCrossReview, formatConsensus, formatDiscussionRound, } from './terminal-formatter';
5
5
  export { mapSeverityToStance, convertSpecialistResult, convertSpecialistResults, type FindingSeverity, type SpecialistFinding, type SpecialistResult, } from './opinion-adapter';
6
+ export type { CouncilInput, CouncilSummary, Disagreement, DisagreementPosition, } from './council-summary.types';
7
+ export { generateCouncilSummary } from './council-summary.service';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.convertSpecialistResults = exports.convertSpecialistResult = exports.mapSeverityToStance = exports.formatDiscussionRound = exports.formatConsensus = exports.formatCrossReview = exports.formatOpinion = exports.DiscussionEngine = exports.calculateConsensus = exports.createDiscussionRound = exports.createCrossReview = exports.createAgentOpinion = exports.STANCE_ICONS = exports.STANCES = void 0;
3
+ exports.generateCouncilSummary = exports.convertSpecialistResults = exports.convertSpecialistResult = exports.mapSeverityToStance = exports.formatDiscussionRound = exports.formatConsensus = exports.formatCrossReview = exports.formatOpinion = exports.DiscussionEngine = exports.calculateConsensus = exports.createDiscussionRound = exports.createCrossReview = exports.createAgentOpinion = exports.STANCE_ICONS = exports.STANCES = void 0;
4
4
  var types_1 = require("./types");
5
5
  Object.defineProperty(exports, "STANCES", { enumerable: true, get: function () { return types_1.STANCES; } });
6
6
  Object.defineProperty(exports, "STANCE_ICONS", { enumerable: true, get: function () { return types_1.STANCE_ICONS; } });
@@ -19,4 +19,6 @@ var opinion_adapter_1 = require("./opinion-adapter");
19
19
  Object.defineProperty(exports, "mapSeverityToStance", { enumerable: true, get: function () { return opinion_adapter_1.mapSeverityToStance; } });
20
20
  Object.defineProperty(exports, "convertSpecialistResult", { enumerable: true, get: function () { return opinion_adapter_1.convertSpecialistResult; } });
21
21
  Object.defineProperty(exports, "convertSpecialistResults", { enumerable: true, get: function () { return opinion_adapter_1.convertSpecialistResults; } });
22
+ var council_summary_service_1 = require("./council-summary.service");
23
+ Object.defineProperty(exports, "generateCouncilSummary", { enumerable: true, get: function () { return council_summary_service_1.generateCouncilSummary; } });
22
24
  //# sourceMappingURL=index.js.map
@@ -261,6 +261,9 @@ export declare const CodingBuddyConfigSchema: z.ZodObject<{
261
261
  maxArrayItems: z.ZodDefault<z.ZodNumber>;
262
262
  maxItemLength: z.ZodDefault<z.ZodNumber>;
263
263
  }, z.core.$strip>>;
264
+ experimental: z.ZodOptional<z.ZodObject<{
265
+ teamsCoordination: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
266
+ }, z.core.$strip>>;
264
267
  upstreamRepos: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
265
268
  keyFiles: z.ZodOptional<z.ZodArray<z.ZodString>>;
266
269
  avoid: z.ZodOptional<z.ZodArray<z.ZodString>>;