codingbuddy 5.1.3 → 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 (483) hide show
  1. package/README.md +9 -0
  2. package/dist/src/agent/agent-prompt.builder.js +135 -2
  3. package/dist/src/agent/agent-stack.loader.d.ts +3 -0
  4. package/dist/src/agent/agent-stack.loader.js +38 -0
  5. package/dist/src/agent/agent-stack.schema.d.ts +14 -0
  6. package/dist/src/agent/agent-stack.schema.js +19 -0
  7. package/dist/src/agent/agent-stack.service.d.ts +15 -0
  8. package/dist/src/agent/agent-stack.service.js +112 -0
  9. package/dist/src/agent/agent.module.js +5 -2
  10. package/dist/src/agent/agent.service.d.ts +8 -1
  11. package/dist/src/agent/agent.service.js +126 -40
  12. package/dist/src/agent/agent.types.d.ts +26 -46
  13. package/dist/src/agent/council-preset.service.d.ts +6 -0
  14. package/dist/src/agent/council-preset.service.js +46 -0
  15. package/dist/src/agent/council-preset.types.d.ts +6 -0
  16. package/dist/src/agent/council-preset.types.js +3 -0
  17. package/dist/src/agent/execution-plan.d.ts +8 -0
  18. package/dist/src/agent/execution-plan.js +73 -0
  19. package/dist/src/agent/execution-plan.types.d.ts +74 -0
  20. package/dist/src/agent/execution-plan.types.js +3 -0
  21. package/dist/src/agent/index.d.ts +8 -0
  22. package/dist/src/agent/index.js +8 -0
  23. package/dist/src/agent/teams-capability.service.d.ts +11 -0
  24. package/dist/src/agent/teams-capability.service.js +74 -0
  25. package/dist/src/agent/teams-capability.types.d.ts +6 -0
  26. package/dist/src/agent/teams-capability.types.js +3 -0
  27. package/dist/src/app.module.js +2 -0
  28. package/dist/src/cli/cli.d.ts +4 -3
  29. package/dist/src/cli/cli.js +172 -1
  30. package/dist/src/cli/cli.types.d.ts +18 -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/init/init.constants.js +0 -1
  36. package/dist/src/cli/plugin/create-plugin.command.d.ts +21 -0
  37. package/dist/src/cli/plugin/create-plugin.command.js +151 -0
  38. package/dist/src/cli/plugin/install.command.d.ts +10 -0
  39. package/dist/src/cli/plugin/install.command.js +31 -0
  40. package/dist/src/cli/plugin/plugins.command.d.ts +9 -0
  41. package/dist/src/cli/plugin/plugins.command.js +51 -0
  42. package/dist/src/cli/plugin/search.command.d.ts +9 -0
  43. package/dist/src/cli/plugin/search.command.js +53 -0
  44. package/dist/src/cli/plugin/uninstall.command.d.ts +12 -0
  45. package/dist/src/cli/plugin/uninstall.command.js +79 -0
  46. package/dist/src/cli/plugin/update.command.d.ts +11 -0
  47. package/dist/src/cli/plugin/update.command.js +103 -0
  48. package/dist/src/cli/run-tui.d.ts +1 -0
  49. package/dist/src/cli/run-tui.js +7 -1
  50. package/dist/src/collaboration/council-summary.service.d.ts +2 -0
  51. package/dist/src/collaboration/council-summary.service.js +114 -0
  52. package/dist/src/collaboration/council-summary.types.d.ts +24 -0
  53. package/dist/src/collaboration/council-summary.types.js +3 -0
  54. package/dist/src/collaboration/index.d.ts +2 -0
  55. package/dist/src/collaboration/index.js +3 -1
  56. package/dist/src/config/config.schema.d.ts +3 -0
  57. package/dist/src/config/config.schema.js +5 -0
  58. package/dist/src/context/briefing-loader.service.d.ts +27 -0
  59. package/dist/src/context/briefing-loader.service.js +124 -0
  60. package/dist/src/context/briefing.service.d.ts +27 -0
  61. package/dist/src/context/briefing.service.js +181 -0
  62. package/dist/src/context/briefing.types.d.ts +13 -0
  63. package/dist/src/context/briefing.types.js +6 -0
  64. package/dist/src/context/context.module.js +16 -2
  65. package/dist/src/context/index.d.ts +2 -0
  66. package/dist/src/context/index.js +2 -0
  67. package/dist/src/keyword/keyword.types.d.ts +8 -0
  68. package/dist/src/main.js +0 -17
  69. package/dist/src/mcp/handlers/agent.handler.d.ts +6 -1
  70. package/dist/src/mcp/handlers/agent.handler.js +81 -8
  71. package/dist/src/mcp/handlers/briefing.handler.d.ts +12 -0
  72. package/dist/src/mcp/handlers/briefing.handler.js +71 -0
  73. package/dist/src/mcp/handlers/checklist-context.handler.d.ts +3 -1
  74. package/dist/src/mcp/handlers/checklist-context.handler.js +17 -2
  75. package/dist/src/mcp/handlers/discussion.handler.d.ts +3 -0
  76. package/dist/src/mcp/handlers/discussion.handler.js +22 -1
  77. package/dist/src/mcp/handlers/index.d.ts +4 -0
  78. package/dist/src/mcp/handlers/index.js +9 -1
  79. package/dist/src/mcp/handlers/mode.handler.d.ts +9 -1
  80. package/dist/src/mcp/handlers/mode.handler.js +79 -2
  81. package/dist/src/mcp/handlers/quality-report.handler.d.ts +14 -0
  82. package/dist/src/mcp/handlers/quality-report.handler.js +93 -0
  83. package/dist/src/mcp/handlers/resume.handler.d.ts +12 -0
  84. package/dist/src/mcp/handlers/resume.handler.js +63 -0
  85. package/dist/src/mcp/handlers/rule-impact.handler.d.ts +23 -0
  86. package/dist/src/mcp/handlers/rule-impact.handler.js +241 -0
  87. package/dist/src/mcp/handlers/skill.handler.js +2 -2
  88. package/dist/src/mcp/mcp.module.js +6 -0
  89. package/dist/src/plugin/plugin-installer.service.d.ts +41 -0
  90. package/dist/src/plugin/plugin-installer.service.js +183 -0
  91. package/dist/src/plugin/plugin-manifest.schema.d.ts +21 -0
  92. package/dist/src/plugin/plugin-manifest.schema.js +45 -0
  93. package/dist/src/plugin/plugin.module.d.ts +2 -0
  94. package/dist/src/plugin/plugin.module.js +17 -0
  95. package/dist/src/plugin/plugin.types.d.ts +7 -0
  96. package/dist/src/plugin/plugin.types.js +3 -0
  97. package/dist/src/plugin/registry-client.d.ts +24 -0
  98. package/dist/src/plugin/registry-client.js +45 -0
  99. package/dist/src/rules/rule-event-collector.d.ts +7 -0
  100. package/dist/src/rules/rule-event-collector.js +38 -0
  101. package/dist/src/rules/rule-event.types.d.ts +9 -0
  102. package/dist/src/rules/rule-event.types.js +10 -0
  103. package/dist/src/rules/rule-stats-writer.d.ts +23 -0
  104. package/dist/src/rules/rule-stats-writer.js +138 -0
  105. package/dist/src/rules/rules.module.js +4 -2
  106. package/dist/src/rules/rules.service.d.ts +8 -1
  107. package/dist/src/rules/rules.service.js +3 -0
  108. package/dist/src/rules/skill.schema.d.ts +10 -0
  109. package/dist/src/rules/skill.schema.js +42 -0
  110. package/dist/src/shared/rules-core.d.ts +7 -1
  111. package/dist/src/shared/rules-core.js +6 -0
  112. package/dist/src/shared/version.d.ts +1 -1
  113. package/dist/src/shared/version.js +1 -1
  114. package/dist/src/ship/file-specialist-mapper.d.ts +9 -0
  115. package/dist/src/ship/file-specialist-mapper.js +56 -0
  116. package/dist/src/ship/quality-report.service.d.ts +6 -0
  117. package/dist/src/ship/quality-report.service.js +56 -0
  118. package/dist/src/ship/quality-report.types.d.ts +20 -0
  119. package/dist/src/ship/quality-report.types.js +3 -0
  120. package/dist/src/ship/ship.module.d.ts +2 -0
  121. package/dist/src/ship/ship.module.js +21 -0
  122. package/dist/src/skill/i18n/keywords.js +921 -0
  123. package/dist/src/skill/skill-recommendation.service.d.ts +10 -2
  124. package/dist/src/skill/skill-recommendation.service.js +120 -16
  125. package/dist/src/skill/skill-recommendation.types.d.ts +5 -0
  126. package/dist/src/skill/skill.module.js +2 -0
  127. package/dist/src/tui/events/hud-file-bridge.d.ts +4 -0
  128. package/dist/src/tui/events/hud-file-bridge.js +36 -0
  129. package/dist/src/tui/testing/tui-test-utils.d.ts +2 -0
  130. package/dist/src/tui/testing/tui-test-utils.js +25 -0
  131. package/dist/src/tui-bundle.mjs +239 -36
  132. package/package.json +7 -2
  133. package/dist/api/mcp.js.map +0 -1
  134. package/dist/src/agent/agent-prompt.builder.js.map +0 -1
  135. package/dist/src/agent/agent-summary.utils.js.map +0 -1
  136. package/dist/src/agent/agent.module.js.map +0 -1
  137. package/dist/src/agent/agent.service.js.map +0 -1
  138. package/dist/src/agent/agent.types.js.map +0 -1
  139. package/dist/src/agent/index.js.map +0 -1
  140. package/dist/src/analyzer/analyzer.module.js.map +0 -1
  141. package/dist/src/analyzer/analyzer.service.js.map +0 -1
  142. package/dist/src/analyzer/analyzer.types.js.map +0 -1
  143. package/dist/src/analyzer/code.sampler.js.map +0 -1
  144. package/dist/src/analyzer/config.analyzer.js.map +0 -1
  145. package/dist/src/analyzer/conventions.analyzer.js.map +0 -1
  146. package/dist/src/analyzer/conventions.schemas.js.map +0 -1
  147. package/dist/src/analyzer/conventions.types.js.map +0 -1
  148. package/dist/src/analyzer/directory.analyzer.js.map +0 -1
  149. package/dist/src/analyzer/index.js.map +0 -1
  150. package/dist/src/analyzer/package.analyzer.js.map +0 -1
  151. package/dist/src/app.module.js.map +0 -1
  152. package/dist/src/checklist/checklist.module.js.map +0 -1
  153. package/dist/src/checklist/checklist.schema.js.map +0 -1
  154. package/dist/src/checklist/checklist.service.js.map +0 -1
  155. package/dist/src/checklist/checklist.types.js.map +0 -1
  156. package/dist/src/checklist/index.js.map +0 -1
  157. package/dist/src/cli/cli.js.map +0 -1
  158. package/dist/src/cli/cli.types.js.map +0 -1
  159. package/dist/src/cli/index.js.map +0 -1
  160. package/dist/src/cli/init/claude-settings.utils.js.map +0 -1
  161. package/dist/src/cli/init/config.generator.js.map +0 -1
  162. package/dist/src/cli/init/config.writer.js.map +0 -1
  163. package/dist/src/cli/init/gitignore.utils.js.map +0 -1
  164. package/dist/src/cli/init/index.js.map +0 -1
  165. package/dist/src/cli/init/init.command.js.map +0 -1
  166. package/dist/src/cli/init/init.constants.js.map +0 -1
  167. package/dist/src/cli/init/init.wizard.js.map +0 -1
  168. package/dist/src/cli/init/prompt.builder.js.map +0 -1
  169. package/dist/src/cli/init/prompts/agent-prompt.js.map +0 -1
  170. package/dist/src/cli/init/prompts/architecture-prompt.js.map +0 -1
  171. package/dist/src/cli/init/prompts/basic-prompt.js.map +0 -1
  172. package/dist/src/cli/init/prompts/conventions-prompt.js.map +0 -1
  173. package/dist/src/cli/init/prompts/index.js.map +0 -1
  174. package/dist/src/cli/init/prompts/language-prompt.js.map +0 -1
  175. package/dist/src/cli/init/prompts/model-prompt.js.map +0 -1
  176. package/dist/src/cli/init/prompts/tech-stack-prompt.js.map +0 -1
  177. package/dist/src/cli/init/prompts/test-strategy-prompt.js.map +0 -1
  178. package/dist/src/cli/init/summary/index.js.map +0 -1
  179. package/dist/src/cli/init/summary/summary.prompt.js.map +0 -1
  180. package/dist/src/cli/init/summary/summary.renderer.js.map +0 -1
  181. package/dist/src/cli/init/templates/config-renderer.js.map +0 -1
  182. package/dist/src/cli/init/templates/frameworks/default.template.js.map +0 -1
  183. package/dist/src/cli/init/templates/frameworks/express.template.js.map +0 -1
  184. package/dist/src/cli/init/templates/frameworks/index.js.map +0 -1
  185. package/dist/src/cli/init/templates/frameworks/nestjs.template.js.map +0 -1
  186. package/dist/src/cli/init/templates/frameworks/nextjs.template.js.map +0 -1
  187. package/dist/src/cli/init/templates/frameworks/node.template.js.map +0 -1
  188. package/dist/src/cli/init/templates/frameworks/react.template.js.map +0 -1
  189. package/dist/src/cli/init/templates/index.js.map +0 -1
  190. package/dist/src/cli/init/templates/template.renderer.js.map +0 -1
  191. package/dist/src/cli/init/templates/template.selector.js.map +0 -1
  192. package/dist/src/cli/init/templates/template.types.js.map +0 -1
  193. package/dist/src/cli/restart-tui.js.map +0 -1
  194. package/dist/src/cli/run-tui.js.map +0 -1
  195. package/dist/src/cli/utils/console.js.map +0 -1
  196. package/dist/src/cli/utils/index.js.map +0 -1
  197. package/dist/src/collaboration/discussion-engine.js.map +0 -1
  198. package/dist/src/collaboration/index.js.map +0 -1
  199. package/dist/src/collaboration/opinion-adapter.js.map +0 -1
  200. package/dist/src/collaboration/terminal-formatter.js.map +0 -1
  201. package/dist/src/collaboration/types.js.map +0 -1
  202. package/dist/src/config/config-diff.service.js.map +0 -1
  203. package/dist/src/config/config.loader.js.map +0 -1
  204. package/dist/src/config/config.module.js.map +0 -1
  205. package/dist/src/config/config.schema.js.map +0 -1
  206. package/dist/src/config/config.service.js.map +0 -1
  207. package/dist/src/config/context.loader.js.map +0 -1
  208. package/dist/src/config/ignore.parser.js.map +0 -1
  209. package/dist/src/config/index.js.map +0 -1
  210. package/dist/src/context/context-archive.service.js.map +0 -1
  211. package/dist/src/context/context-archive.types.js.map +0 -1
  212. package/dist/src/context/context-document.service.js.map +0 -1
  213. package/dist/src/context/context-document.types.js.map +0 -1
  214. package/dist/src/context/context-parser.utils.js.map +0 -1
  215. package/dist/src/context/context-serializer.utils.js.map +0 -1
  216. package/dist/src/context/context.module.js.map +0 -1
  217. package/dist/src/context/context.service.js.map +0 -1
  218. package/dist/src/context/context.types.js.map +0 -1
  219. package/dist/src/context/index.js.map +0 -1
  220. package/dist/src/context/intent-patterns.js.map +0 -1
  221. package/dist/src/custom/custom.module.js.map +0 -1
  222. package/dist/src/custom/custom.service.js.map +0 -1
  223. package/dist/src/custom/custom.types.js.map +0 -1
  224. package/dist/src/custom/index.js.map +0 -1
  225. package/dist/src/diagnostic/diagnostic-log.service.js.map +0 -1
  226. package/dist/src/diagnostic/diagnostic.module.js.map +0 -1
  227. package/dist/src/diagnostic/diagnostic.types.js.map +0 -1
  228. package/dist/src/diagnostic/index.js.map +0 -1
  229. package/dist/src/impact/impact-event.service.js.map +0 -1
  230. package/dist/src/impact/impact-report.service.js.map +0 -1
  231. package/dist/src/impact/impact.module.js.map +0 -1
  232. package/dist/src/impact/impact.types.js.map +0 -1
  233. package/dist/src/impact/index.js.map +0 -1
  234. package/dist/src/keyword/activation-message.builder.js.map +0 -1
  235. package/dist/src/keyword/auto-executor.js.map +0 -1
  236. package/dist/src/keyword/auto-executor.types.js.map +0 -1
  237. package/dist/src/keyword/auto-formatter.js.map +0 -1
  238. package/dist/src/keyword/auto-prompt-builder.js.map +0 -1
  239. package/dist/src/keyword/complexity-classifier.js.map +0 -1
  240. package/dist/src/keyword/complexity-indicators.js.map +0 -1
  241. package/dist/src/keyword/diff-analyzer.js.map +0 -1
  242. package/dist/src/keyword/explicit-pattern-matcher.js.map +0 -1
  243. package/dist/src/keyword/index.js.map +0 -1
  244. package/dist/src/keyword/keyword.module.js.map +0 -1
  245. package/dist/src/keyword/keyword.service.js.map +0 -1
  246. package/dist/src/keyword/keyword.types.js.map +0 -1
  247. package/dist/src/keyword/patterns/agent.patterns.js.map +0 -1
  248. package/dist/src/keyword/patterns/ai-ml.patterns.js.map +0 -1
  249. package/dist/src/keyword/patterns/backend.patterns.js.map +0 -1
  250. package/dist/src/keyword/patterns/context.patterns.js.map +0 -1
  251. package/dist/src/keyword/patterns/data-science.patterns.js.map +0 -1
  252. package/dist/src/keyword/patterns/data.patterns.js.map +0 -1
  253. package/dist/src/keyword/patterns/devops.patterns.js.map +0 -1
  254. package/dist/src/keyword/patterns/explicit.patterns.js.map +0 -1
  255. package/dist/src/keyword/patterns/frontend.patterns.js.map +0 -1
  256. package/dist/src/keyword/patterns/index.js.map +0 -1
  257. package/dist/src/keyword/patterns/intent-pattern-checks.js.map +0 -1
  258. package/dist/src/keyword/patterns/intent-patterns.types.js.map +0 -1
  259. package/dist/src/keyword/patterns/meta-discussion.patterns.js.map +0 -1
  260. package/dist/src/keyword/patterns/mobile.patterns.js.map +0 -1
  261. package/dist/src/keyword/patterns/platform.patterns.js.map +0 -1
  262. package/dist/src/keyword/patterns/security.patterns.js.map +0 -1
  263. package/dist/src/keyword/patterns/systems.patterns.js.map +0 -1
  264. package/dist/src/keyword/patterns/test.patterns.js.map +0 -1
  265. package/dist/src/keyword/patterns/tooling.patterns.js.map +0 -1
  266. package/dist/src/keyword/primary-agent-resolver.js.map +0 -1
  267. package/dist/src/keyword/rule-filter.js.map +0 -1
  268. package/dist/src/keyword/srp-template.js.map +0 -1
  269. package/dist/src/keyword/strategies/__tests__/strategy-test.utils.js.map +0 -1
  270. package/dist/src/keyword/strategies/act-agent.strategy.js.map +0 -1
  271. package/dist/src/keyword/strategies/eval-agent.strategy.js.map +0 -1
  272. package/dist/src/keyword/strategies/index.js.map +0 -1
  273. package/dist/src/keyword/strategies/plan-agent.strategy.js.map +0 -1
  274. package/dist/src/keyword/strategies/resolution-strategy.interface.js.map +0 -1
  275. package/dist/src/keyword/taskmaestro-detector.js.map +0 -1
  276. package/dist/src/keyword/visual-data.builder.js.map +0 -1
  277. package/dist/src/main.js.map +0 -1
  278. package/dist/src/mcp/handlers/abstract-handler.js.map +0 -1
  279. package/dist/src/mcp/handlers/agent.handler.js.map +0 -1
  280. package/dist/src/mcp/handlers/base.handler.js.map +0 -1
  281. package/dist/src/mcp/handlers/checklist-context.handler.js.map +0 -1
  282. package/dist/src/mcp/handlers/config.handler.js.map +0 -1
  283. package/dist/src/mcp/handlers/context-archive.handler.js.map +0 -1
  284. package/dist/src/mcp/handlers/context-document.handler.js.map +0 -1
  285. package/dist/src/mcp/handlers/conventions.handler.js.map +0 -1
  286. package/dist/src/mcp/handlers/discussion.handler.js.map +0 -1
  287. package/dist/src/mcp/handlers/discussion.types.js.map +0 -1
  288. package/dist/src/mcp/handlers/impact.handler.js.map +0 -1
  289. package/dist/src/mcp/handlers/index.js.map +0 -1
  290. package/dist/src/mcp/handlers/mode.handler.js.map +0 -1
  291. package/dist/src/mcp/handlers/pipeline.handler.js.map +0 -1
  292. package/dist/src/mcp/handlers/plugin-validation.handler.js.map +0 -1
  293. package/dist/src/mcp/handlers/release-check.handler.js.map +0 -1
  294. package/dist/src/mcp/handlers/rule-insights.handler.js.map +0 -1
  295. package/dist/src/mcp/handlers/rules.handler.js.map +0 -1
  296. package/dist/src/mcp/handlers/skill.handler.js.map +0 -1
  297. package/dist/src/mcp/handlers/tui.handler.js.map +0 -1
  298. package/dist/src/mcp/mcp-serverless.js.map +0 -1
  299. package/dist/src/mcp/mcp.controller.js.map +0 -1
  300. package/dist/src/mcp/mcp.module.js.map +0 -1
  301. package/dist/src/mcp/mcp.service.js.map +0 -1
  302. package/dist/src/mcp/response.utils.js.map +0 -1
  303. package/dist/src/mcp/sse-auth.guard.js.map +0 -1
  304. package/dist/src/model/index.js.map +0 -1
  305. package/dist/src/model/model-resolver.service.js.map +0 -1
  306. package/dist/src/model/model.constants.js.map +0 -1
  307. package/dist/src/model/model.resolver.js.map +0 -1
  308. package/dist/src/model/model.types.js.map +0 -1
  309. package/dist/src/parallel-validation/extract-file-paths.js.map +0 -1
  310. package/dist/src/parallel-validation/index.js.map +0 -1
  311. package/dist/src/parallel-validation/overlap-matrix.js.map +0 -1
  312. package/dist/src/parallel-validation/parallel-validation.handler.js.map +0 -1
  313. package/dist/src/parallel-validation/parallel-validation.types.js.map +0 -1
  314. package/dist/src/parallel-validation/wave-splitter.js.map +0 -1
  315. package/dist/src/pipeline/index.js.map +0 -1
  316. package/dist/src/pipeline/pipeline.executors.js.map +0 -1
  317. package/dist/src/pipeline/pipeline.module.js.map +0 -1
  318. package/dist/src/pipeline/pipeline.service.js.map +0 -1
  319. package/dist/src/pipeline/pipeline.types.js.map +0 -1
  320. package/dist/src/rules/agent.schema.js.map +0 -1
  321. package/dist/src/rules/rule-insights.service.js.map +0 -1
  322. package/dist/src/rules/rule-tracker.js.map +0 -1
  323. package/dist/src/rules/rules-content.utils.js.map +0 -1
  324. package/dist/src/rules/rules.module.js.map +0 -1
  325. package/dist/src/rules/rules.service.js.map +0 -1
  326. package/dist/src/rules/rules.types.js.map +0 -1
  327. package/dist/src/rules/skill.schema.js.map +0 -1
  328. package/dist/src/shared/agent.utils.js.map +0 -1
  329. package/dist/src/shared/async.utils.js.map +0 -1
  330. package/dist/src/shared/client-type.js.map +0 -1
  331. package/dist/src/shared/error.utils.js.map +0 -1
  332. package/dist/src/shared/esm-import.js.map +0 -1
  333. package/dist/src/shared/event-bridge-reader.js.map +0 -1
  334. package/dist/src/shared/file.utils.js.map +0 -1
  335. package/dist/src/shared/filesystem.interface.js.map +0 -1
  336. package/dist/src/shared/format.utils.js.map +0 -1
  337. package/dist/src/shared/keyword-core.js.map +0 -1
  338. package/dist/src/shared/language.service.js.map +0 -1
  339. package/dist/src/shared/language.types.js.map +0 -1
  340. package/dist/src/shared/lru-cache.js.map +0 -1
  341. package/dist/src/shared/node-filesystem.service.js.map +0 -1
  342. package/dist/src/shared/path.utils.js.map +0 -1
  343. package/dist/src/shared/pattern-matcher.js.map +0 -1
  344. package/dist/src/shared/rules-core.js.map +0 -1
  345. package/dist/src/shared/security.utils.js.map +0 -1
  346. package/dist/src/shared/slug.utils.js.map +0 -1
  347. package/dist/src/shared/tui-bundle-path.js.map +0 -1
  348. package/dist/src/shared/validation.constants.js.map +0 -1
  349. package/dist/src/shared/verbosity.types.js.map +0 -1
  350. package/dist/src/shared/version.js.map +0 -1
  351. package/dist/src/shared/version.utils.js.map +0 -1
  352. package/dist/src/skill/i18n/index.js.map +0 -1
  353. package/dist/src/skill/i18n/keywords.js.map +0 -1
  354. package/dist/src/skill/i18n/keywords.types.js.map +0 -1
  355. package/dist/src/skill/index.js.map +0 -1
  356. package/dist/src/skill/skill-content.utils.js.map +0 -1
  357. package/dist/src/skill/skill-recommendation.service.js.map +0 -1
  358. package/dist/src/skill/skill-recommendation.types.js.map +0 -1
  359. package/dist/src/skill/skill-triggers.js.map +0 -1
  360. package/dist/src/skill/skill.module.js.map +0 -1
  361. package/dist/src/state/index.js.map +0 -1
  362. package/dist/src/state/state.module.js.map +0 -1
  363. package/dist/src/state/state.service.js.map +0 -1
  364. package/dist/src/state/state.types.js.map +0 -1
  365. package/dist/src/tui/__perf__/memory-stability.spec.d.ts +0 -1
  366. package/dist/src/tui/__perf__/memory-stability.spec.js +0 -105
  367. package/dist/src/tui/__perf__/memory-stability.spec.js.map +0 -1
  368. package/dist/src/tui/__perf__/rendering-performance.spec.d.ts +0 -1
  369. package/dist/src/tui/__perf__/rendering-performance.spec.js +0 -166
  370. package/dist/src/tui/__perf__/rendering-performance.spec.js.map +0 -1
  371. package/dist/src/tui/cli-flags.js.map +0 -1
  372. package/dist/src/tui/components/ActModeScreen.js.map +0 -1
  373. package/dist/src/tui/components/ActivityVisualizer.js.map +0 -1
  374. package/dist/src/tui/components/ActivityVisualizer.spec.d.ts +0 -1
  375. package/dist/src/tui/components/ActivityVisualizer.spec.js +0 -91
  376. package/dist/src/tui/components/ActivityVisualizer.spec.js.map +0 -1
  377. package/dist/src/tui/components/AgentDiscussionPanel.js.map +0 -1
  378. package/dist/src/tui/components/AgentDiscussionPanel.spec.d.ts +0 -1
  379. package/dist/src/tui/components/AgentDiscussionPanel.spec.js +0 -229
  380. package/dist/src/tui/components/AgentDiscussionPanel.spec.js.map +0 -1
  381. package/dist/src/tui/components/ChecklistPanel.js.map +0 -1
  382. package/dist/src/tui/components/ChecklistPanel.spec.d.ts +0 -1
  383. package/dist/src/tui/components/ChecklistPanel.spec.js +0 -45
  384. package/dist/src/tui/components/ChecklistPanel.spec.js.map +0 -1
  385. package/dist/src/tui/components/ContextSection.js.map +0 -1
  386. package/dist/src/tui/components/EvalModeScreen.js.map +0 -1
  387. package/dist/src/tui/components/FlowMap.js.map +0 -1
  388. package/dist/src/tui/components/FlowMap.spec.d.ts +0 -1
  389. package/dist/src/tui/components/FlowMap.spec.js +0 -147
  390. package/dist/src/tui/components/FlowMap.spec.js.map +0 -1
  391. package/dist/src/tui/components/FocusedAgentPanel.js.map +0 -1
  392. package/dist/src/tui/components/FocusedAgentPanel.spec.d.ts +0 -1
  393. package/dist/src/tui/components/FocusedAgentPanel.spec.js +0 -183
  394. package/dist/src/tui/components/FocusedAgentPanel.spec.js.map +0 -1
  395. package/dist/src/tui/components/HeaderBar.js.map +0 -1
  396. package/dist/src/tui/components/HeaderBar.spec.d.ts +0 -1
  397. package/dist/src/tui/components/HeaderBar.spec.js +0 -96
  398. package/dist/src/tui/components/HeaderBar.spec.js.map +0 -1
  399. package/dist/src/tui/components/ModeScreenRouter.js.map +0 -1
  400. package/dist/src/tui/components/PlanModeScreen.js.map +0 -1
  401. package/dist/src/tui/components/SessionDashboard.js.map +0 -1
  402. package/dist/src/tui/components/SessionTabBar.js.map +0 -1
  403. package/dist/src/tui/components/SessionTabBar.spec.d.ts +0 -1
  404. package/dist/src/tui/components/SessionTabBar.spec.js +0 -59
  405. package/dist/src/tui/components/SessionTabBar.spec.js.map +0 -1
  406. package/dist/src/tui/components/StageHealthBar.js.map +0 -1
  407. package/dist/src/tui/components/StageHealthBar.spec.d.ts +0 -1
  408. package/dist/src/tui/components/StageHealthBar.spec.js +0 -99
  409. package/dist/src/tui/components/StageHealthBar.spec.js.map +0 -1
  410. package/dist/src/tui/components/act-screen.pure.js.map +0 -1
  411. package/dist/src/tui/components/activity-visualizer.pure.js.map +0 -1
  412. package/dist/src/tui/components/agent-discussion-panel.pure.js.map +0 -1
  413. package/dist/src/tui/components/checklist-panel.pure.js.map +0 -1
  414. package/dist/src/tui/components/context-section.pure.js.map +0 -1
  415. package/dist/src/tui/components/eval-screen.pure.js.map +0 -1
  416. package/dist/src/tui/components/flow-map.pure.js.map +0 -1
  417. package/dist/src/tui/components/focused-agent.pure.js.map +0 -1
  418. package/dist/src/tui/components/grid-layout.pure.js.map +0 -1
  419. package/dist/src/tui/components/index.js.map +0 -1
  420. package/dist/src/tui/components/live.pure.js.map +0 -1
  421. package/dist/src/tui/components/plan-screen.pure.js.map +0 -1
  422. package/dist/src/tui/components/session-dashboard.pure.js.map +0 -1
  423. package/dist/src/tui/components/session-tab-bar.pure.js.map +0 -1
  424. package/dist/src/tui/components/stage-health.pure.js.map +0 -1
  425. package/dist/src/tui/dashboard-app.js.map +0 -1
  426. package/dist/src/tui/dashboard-app.spec.d.ts +0 -1
  427. package/dist/src/tui/dashboard-app.spec.js +0 -158
  428. package/dist/src/tui/dashboard-app.spec.js.map +0 -1
  429. package/dist/src/tui/dashboard-types.js.map +0 -1
  430. package/dist/src/tui/ensure-tui-ready.js.map +0 -1
  431. package/dist/src/tui/eventbus-ui.integration.spec.d.ts +0 -1
  432. package/dist/src/tui/eventbus-ui.integration.spec.js +0 -577
  433. package/dist/src/tui/eventbus-ui.integration.spec.js.map +0 -1
  434. package/dist/src/tui/events/agent-metadata.service.js.map +0 -1
  435. package/dist/src/tui/events/agent-metadata.types.js.map +0 -1
  436. package/dist/src/tui/events/event-bus.js.map +0 -1
  437. package/dist/src/tui/events/events.module.js.map +0 -1
  438. package/dist/src/tui/events/hud-file-bridge.js.map +0 -1
  439. package/dist/src/tui/events/index.js.map +0 -1
  440. package/dist/src/tui/events/parse-agent.js.map +0 -1
  441. package/dist/src/tui/events/parse-tool-response.js.map +0 -1
  442. package/dist/src/tui/events/response-event-extractor.js.map +0 -1
  443. package/dist/src/tui/events/tui-interceptor.js.map +0 -1
  444. package/dist/src/tui/events/types.js.map +0 -1
  445. package/dist/src/tui/hooks/index.js.map +0 -1
  446. package/dist/src/tui/hooks/use-dashboard-state.js.map +0 -1
  447. package/dist/src/tui/hooks/use-focus-agent.js.map +0 -1
  448. package/dist/src/tui/hooks/use-multi-session-state.js.map +0 -1
  449. package/dist/src/tui/hooks/use-terminal-size.js.map +0 -1
  450. package/dist/src/tui/hooks/use-tick.js.map +0 -1
  451. package/dist/src/tui/hooks/use-tick.spec.d.ts +0 -1
  452. package/dist/src/tui/hooks/use-tick.spec.js +0 -70
  453. package/dist/src/tui/hooks/use-tick.spec.js.map +0 -1
  454. package/dist/src/tui/index.js.map +0 -1
  455. package/dist/src/tui/ipc/index.js.map +0 -1
  456. package/dist/src/tui/ipc/instance-registry.js.map +0 -1
  457. package/dist/src/tui/ipc/ipc-bridge.js.map +0 -1
  458. package/dist/src/tui/ipc/ipc-client.js.map +0 -1
  459. package/dist/src/tui/ipc/ipc-debug.js.map +0 -1
  460. package/dist/src/tui/ipc/ipc-server.js.map +0 -1
  461. package/dist/src/tui/ipc/ipc-state-cache.js.map +0 -1
  462. package/dist/src/tui/ipc/ipc.types.js.map +0 -1
  463. package/dist/src/tui/ipc/multi-session-manager.js.map +0 -1
  464. package/dist/src/tui/ipc/shutdown-manager.js.map +0 -1
  465. package/dist/src/tui/ipc/test-utils.js.map +0 -1
  466. package/dist/src/tui/ipc/tui-auto-launcher.js.map +0 -1
  467. package/dist/src/tui/multi-session-app.js.map +0 -1
  468. package/dist/src/tui/multi-session-app.spec.d.ts +0 -1
  469. package/dist/src/tui/multi-session-app.spec.js +0 -95
  470. package/dist/src/tui/multi-session-app.spec.js.map +0 -1
  471. package/dist/src/tui/transport-tui.integration.spec.d.ts +0 -1
  472. package/dist/src/tui/transport-tui.integration.spec.js +0 -189
  473. package/dist/src/tui/transport-tui.integration.spec.js.map +0 -1
  474. package/dist/src/tui/tui-config.js.map +0 -1
  475. package/dist/src/tui/types.js.map +0 -1
  476. package/dist/src/tui/utils/color-buffer.js.map +0 -1
  477. package/dist/src/tui/utils/colors.js.map +0 -1
  478. package/dist/src/tui/utils/display-width.js.map +0 -1
  479. package/dist/src/tui/utils/edge-router.js.map +0 -1
  480. package/dist/src/tui/utils/icons.js.map +0 -1
  481. package/dist/src/tui/utils/index.js.map +0 -1
  482. package/dist/src/tui/utils/theme.js.map +0 -1
  483. package/dist/tsconfig.build.tsbuildinfo +0 -1
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PluginInstallerService = void 0;
4
+ const child_process_1 = require("child_process");
5
+ const fs_1 = require("fs");
6
+ const os_1 = require("os");
7
+ const path_1 = require("path");
8
+ const plugin_manifest_schema_1 = require("./plugin-manifest.schema");
9
+ const registry_client_1 = require("./registry-client");
10
+ const version_utils_1 = require("../shared/version.utils");
11
+ const ASSET_DIRS = ['agents', 'rules', 'skills', 'checklists'];
12
+ class PluginInstallerService {
13
+ async resolveSource(nameOrUrl) {
14
+ if (nameOrUrl.startsWith('github:') || nameOrUrl.startsWith('https://')) {
15
+ return { source: nameOrUrl };
16
+ }
17
+ const { name, version } = this.parseNameVersion(nameOrUrl);
18
+ const client = new registry_client_1.RegistryClient();
19
+ const plugin = await client.findByName(name);
20
+ if (!plugin) {
21
+ throw new Error(`Plugin "${name}" not found in registry. Use a git URL (github:user/repo or https://...) for unregistered plugins.`);
22
+ }
23
+ return version ? { source: plugin.source, version } : { source: plugin.source };
24
+ }
25
+ parseNameVersion(input) {
26
+ const atIndex = input.lastIndexOf('@');
27
+ if (atIndex > 0) {
28
+ return { name: input.slice(0, atIndex), version: input.slice(atIndex + 1) };
29
+ }
30
+ return { name: input };
31
+ }
32
+ resolveGitUrl(source) {
33
+ if (source.startsWith('github:')) {
34
+ const path = source.slice('github:'.length);
35
+ return `https://github.com/${path}.git`;
36
+ }
37
+ if (source.startsWith('https://')) {
38
+ return source;
39
+ }
40
+ throw new Error(`Invalid git URL format: "${source}". Use github:user/repo or https://...`);
41
+ }
42
+ async install(options) {
43
+ let tempDir;
44
+ try {
45
+ const gitUrl = this.resolveGitUrl(options.source);
46
+ tempDir = (0, fs_1.mkdtempSync)((0, path_1.join)((0, os_1.tmpdir)(), 'codingbuddy-plugin-'));
47
+ try {
48
+ const branchFlag = options.version ? ` --branch v${options.version}` : '';
49
+ (0, child_process_1.execSync)(`git clone --depth=1${branchFlag} ${gitUrl} ${tempDir}`, {
50
+ stdio: 'pipe',
51
+ timeout: 60_000,
52
+ });
53
+ }
54
+ catch {
55
+ return this.fail('Failed to clone repository. Check the URL and your network connection.', tempDir);
56
+ }
57
+ const manifestPath = (0, path_1.join)(tempDir, 'plugin.json');
58
+ if (!(0, fs_1.existsSync)(manifestPath)) {
59
+ return this.fail('plugin.json not found in repository root.', tempDir);
60
+ }
61
+ let manifest;
62
+ try {
63
+ const raw = (0, fs_1.readFileSync)(manifestPath, 'utf-8');
64
+ manifest = (0, plugin_manifest_schema_1.validatePluginManifest)(JSON.parse(raw));
65
+ }
66
+ catch (err) {
67
+ const message = err instanceof Error ? err.message : String(err);
68
+ return this.fail(message, tempDir);
69
+ }
70
+ if (manifest.compatibility) {
71
+ if (!this.isCompatible(manifest.compatibility)) {
72
+ return this.fail(`Plugin "${manifest.name}" requires codingbuddy ${manifest.compatibility} but current version is ${(0, version_utils_1.getPackageVersion)()}. Version incompatible.`, tempDir);
73
+ }
74
+ }
75
+ const aiRulesDir = (0, path_1.join)(options.targetRoot, '.ai-rules');
76
+ if (!options.force) {
77
+ const conflicts = this.detectConflicts(tempDir, aiRulesDir, manifest);
78
+ if (conflicts.length > 0) {
79
+ return this.fail(`Name conflict detected: ${conflicts.join(', ')}. Use --force to overwrite.`, tempDir);
80
+ }
81
+ }
82
+ const provides = this.copyAssets(tempDir, aiRulesDir);
83
+ const pluginsJsonPath = (0, path_1.join)(options.targetRoot, '.codingbuddy', 'plugins.json');
84
+ this.recordInstallation(pluginsJsonPath, {
85
+ name: manifest.name,
86
+ version: manifest.version,
87
+ source: options.source,
88
+ installedAt: new Date().toISOString(),
89
+ provides,
90
+ });
91
+ const summary = `Installed ${manifest.name}@${manifest.version}: ${provides.agents.length} agents, ${provides.rules.length} rules, ${provides.skills.length} skills`;
92
+ this.cleanup(tempDir);
93
+ return { success: true, pluginName: manifest.name, summary };
94
+ }
95
+ catch (err) {
96
+ const message = err instanceof Error ? err.message : String(err);
97
+ return this.fail(message, tempDir);
98
+ }
99
+ }
100
+ isCompatible(compatibility) {
101
+ const currentVersion = (0, version_utils_1.getPackageVersion)();
102
+ const match = compatibility.match(/^>=(\d+\.\d+\.\d+)$/);
103
+ if (!match)
104
+ return true;
105
+ const required = match[1];
106
+ return this.compareVersions(currentVersion, required) >= 0;
107
+ }
108
+ compareVersions(a, b) {
109
+ const partsA = a.split('.').map(Number);
110
+ const partsB = b.split('.').map(Number);
111
+ for (let i = 0; i < 3; i++) {
112
+ const diff = (partsA[i] ?? 0) - (partsB[i] ?? 0);
113
+ if (diff !== 0)
114
+ return diff;
115
+ }
116
+ return 0;
117
+ }
118
+ detectConflicts(tempDir, aiRulesDir, manifest) {
119
+ const conflicts = [];
120
+ for (const dir of ASSET_DIRS) {
121
+ const providedNames = manifest.provides[dir] ?? [];
122
+ for (const name of providedNames) {
123
+ const extensions = dir === 'agents' ? ['.json'] : ['.md', '.json', '.yaml', '.yml'];
124
+ for (const ext of extensions) {
125
+ const targetPath = (0, path_1.join)(aiRulesDir, dir, `${name}${ext}`);
126
+ if ((0, fs_1.existsSync)(targetPath)) {
127
+ conflicts.push(`${dir}/${name}`);
128
+ break;
129
+ }
130
+ }
131
+ }
132
+ }
133
+ return conflicts;
134
+ }
135
+ copyAssets(tempDir, aiRulesDir) {
136
+ const provides = { agents: [], rules: [], skills: [], checklists: [] };
137
+ for (const dir of ASSET_DIRS) {
138
+ const sourceDir = (0, path_1.join)(tempDir, dir);
139
+ const targetDir = (0, path_1.join)(aiRulesDir, dir);
140
+ if (!(0, fs_1.existsSync)(sourceDir))
141
+ continue;
142
+ (0, fs_1.mkdirSync)(targetDir, { recursive: true });
143
+ const files = (0, fs_1.readdirSync)(sourceDir);
144
+ for (const file of files) {
145
+ (0, fs_1.cpSync)((0, path_1.join)(sourceDir, file), (0, path_1.join)(targetDir, file), { recursive: true });
146
+ const name = file.replace(/\.[^.]+$/, '');
147
+ provides[dir].push(name);
148
+ }
149
+ }
150
+ return provides;
151
+ }
152
+ recordInstallation(pluginsJsonPath, record) {
153
+ let registry = { plugins: [] };
154
+ if ((0, fs_1.existsSync)(pluginsJsonPath)) {
155
+ try {
156
+ registry = JSON.parse((0, fs_1.readFileSync)(pluginsJsonPath, 'utf-8'));
157
+ }
158
+ catch {
159
+ registry = { plugins: [] };
160
+ }
161
+ }
162
+ registry.plugins = registry.plugins.filter(p => p.name !== record.name);
163
+ registry.plugins.push(record);
164
+ const dir = pluginsJsonPath.replace(/[/\\][^/\\]+$/, '');
165
+ (0, fs_1.mkdirSync)(dir, { recursive: true });
166
+ (0, fs_1.writeFileSync)(pluginsJsonPath, JSON.stringify(registry, null, 2), 'utf-8');
167
+ }
168
+ cleanup(tempDir) {
169
+ if (tempDir) {
170
+ try {
171
+ (0, fs_1.rmSync)(tempDir, { recursive: true, force: true });
172
+ }
173
+ catch {
174
+ }
175
+ }
176
+ }
177
+ fail(error, tempDir) {
178
+ this.cleanup(tempDir);
179
+ return { success: false, error };
180
+ }
181
+ }
182
+ exports.PluginInstallerService = PluginInstallerService;
183
+ //# sourceMappingURL=plugin-installer.service.js.map
@@ -0,0 +1,21 @@
1
+ import { z } from 'zod';
2
+ export declare class PluginManifestSchemaError extends Error {
3
+ readonly details?: z.ZodError | undefined;
4
+ constructor(message: string, details?: z.ZodError | undefined);
5
+ }
6
+ export declare const PluginManifestSchema: z.ZodObject<{
7
+ name: z.ZodString;
8
+ version: z.ZodString;
9
+ description: z.ZodString;
10
+ author: z.ZodString;
11
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
12
+ compatibility: z.ZodOptional<z.ZodString>;
13
+ provides: z.ZodObject<{
14
+ agents: z.ZodOptional<z.ZodArray<z.ZodString>>;
15
+ rules: z.ZodOptional<z.ZodArray<z.ZodString>>;
16
+ skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
17
+ checklists: z.ZodOptional<z.ZodArray<z.ZodString>>;
18
+ }, z.core.$strip>;
19
+ }, z.core.$strip>;
20
+ export type PluginManifest = z.infer<typeof PluginManifestSchema>;
21
+ export declare function validatePluginManifest(json: unknown): PluginManifest;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PluginManifestSchema = exports.PluginManifestSchemaError = void 0;
4
+ exports.validatePluginManifest = validatePluginManifest;
5
+ const zod_1 = require("zod");
6
+ class PluginManifestSchemaError extends Error {
7
+ constructor(message, details) {
8
+ super(message);
9
+ this.details = details;
10
+ this.name = 'PluginManifestSchemaError';
11
+ }
12
+ }
13
+ exports.PluginManifestSchemaError = PluginManifestSchemaError;
14
+ const PluginProvidesSchema = zod_1.z.object({
15
+ agents: zod_1.z.array(zod_1.z.string()).optional(),
16
+ rules: zod_1.z.array(zod_1.z.string()).optional(),
17
+ skills: zod_1.z.array(zod_1.z.string()).optional(),
18
+ checklists: zod_1.z.array(zod_1.z.string()).optional(),
19
+ });
20
+ exports.PluginManifestSchema = zod_1.z.object({
21
+ name: zod_1.z
22
+ .string()
23
+ .min(1)
24
+ .regex(/^[a-z][a-z0-9-]*$/, 'Plugin name must start with a letter and contain only lowercase alphanumeric with hyphens'),
25
+ version: zod_1.z.string().regex(/^\d+\.\d+\.\d+$/, 'Version must be in semver format (e.g. 1.0.0)'),
26
+ description: zod_1.z.string().min(1),
27
+ author: zod_1.z.string().min(1),
28
+ tags: zod_1.z.array(zod_1.z.string()).optional(),
29
+ compatibility: zod_1.z.string().optional(),
30
+ provides: PluginProvidesSchema,
31
+ });
32
+ function validatePluginManifest(json) {
33
+ const result = exports.PluginManifestSchema.safeParse(json);
34
+ if (result.success) {
35
+ return result.data;
36
+ }
37
+ const errorMessage = result.error.issues
38
+ .map(issue => {
39
+ const pathStr = issue.path.length > 0 ? issue.path.join('.') : 'root';
40
+ return `${pathStr}: ${issue.message}`;
41
+ })
42
+ .join(', ');
43
+ throw new PluginManifestSchemaError(`Invalid plugin manifest: ${errorMessage}`, result.error);
44
+ }
45
+ //# sourceMappingURL=plugin-manifest.schema.js.map
@@ -0,0 +1,2 @@
1
+ export declare class PluginModule {
2
+ }
@@ -0,0 +1,17 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.PluginModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ let PluginModule = class PluginModule {
12
+ };
13
+ exports.PluginModule = PluginModule;
14
+ exports.PluginModule = PluginModule = __decorate([
15
+ (0, common_1.Module)({})
16
+ ], PluginModule);
17
+ //# sourceMappingURL=plugin.module.js.map
@@ -0,0 +1,7 @@
1
+ export interface PluginProvides {
2
+ agents?: string[];
3
+ rules?: string[];
4
+ skills?: string[];
5
+ checklists?: string[];
6
+ }
7
+ export type { PluginManifest } from './plugin-manifest.schema';
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=plugin.types.js.map
@@ -0,0 +1,24 @@
1
+ export interface RegistryPluginProvides {
2
+ agents?: string[];
3
+ rules?: string[];
4
+ skills?: string[];
5
+ checklists?: string[];
6
+ }
7
+ export interface RegistryPlugin {
8
+ name: string;
9
+ version: string;
10
+ description: string;
11
+ source: string;
12
+ tags: string[];
13
+ provides: RegistryPluginProvides;
14
+ }
15
+ export interface RegistryIndex {
16
+ plugins: RegistryPlugin[];
17
+ }
18
+ export declare class RegistryClient {
19
+ private cache;
20
+ private cacheTime;
21
+ fetchIndex(): Promise<RegistryIndex>;
22
+ findByName(name: string): Promise<RegistryPlugin | undefined>;
23
+ search(query: string): Promise<RegistryPlugin[]>;
24
+ }
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RegistryClient = void 0;
4
+ const REGISTRY_URL = 'https://raw.githubusercontent.com/JeremyDev87/codingbuddy-registry/main/index.json';
5
+ const CACHE_TTL_MS = 5 * 60 * 1000;
6
+ class RegistryClient {
7
+ constructor() {
8
+ this.cache = null;
9
+ this.cacheTime = 0;
10
+ }
11
+ async fetchIndex() {
12
+ if (this.cache && Date.now() - this.cacheTime < CACHE_TTL_MS) {
13
+ return this.cache;
14
+ }
15
+ try {
16
+ const response = await fetch(REGISTRY_URL);
17
+ if (!response.ok) {
18
+ return { plugins: [] };
19
+ }
20
+ const data = (await response.json());
21
+ this.cache = data;
22
+ this.cacheTime = Date.now();
23
+ return data;
24
+ }
25
+ catch {
26
+ return { plugins: [] };
27
+ }
28
+ }
29
+ async findByName(name) {
30
+ const index = await this.fetchIndex();
31
+ return index.plugins.find(plugin => plugin.name === name);
32
+ }
33
+ async search(query) {
34
+ const index = await this.fetchIndex();
35
+ const lowerQuery = query.toLowerCase();
36
+ return index.plugins.filter(plugin => {
37
+ const nameMatch = plugin.name.toLowerCase().includes(lowerQuery);
38
+ const descMatch = plugin.description.toLowerCase().includes(lowerQuery);
39
+ const tagMatch = plugin.tags.some(tag => tag.toLowerCase().includes(lowerQuery));
40
+ return nameMatch || descMatch || tagMatch;
41
+ });
42
+ }
43
+ }
44
+ exports.RegistryClient = RegistryClient;
45
+ //# sourceMappingURL=registry-client.js.map
@@ -0,0 +1,7 @@
1
+ import { RuleEvent } from './rule-event.types';
2
+ export declare class RuleEventCollector {
3
+ private events;
4
+ record(event: RuleEvent): void;
5
+ getEvents(): RuleEvent[];
6
+ flush(): RuleEvent[];
7
+ }
@@ -0,0 +1,38 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.RuleEventCollector = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const rule_event_types_1 = require("./rule-event.types");
12
+ let RuleEventCollector = class RuleEventCollector {
13
+ constructor() {
14
+ this.events = [];
15
+ }
16
+ record(event) {
17
+ if (!rule_event_types_1.RULE_EVENT_TYPES.includes(event.type)) {
18
+ throw new Error(`Invalid rule event type: ${event.type}`);
19
+ }
20
+ this.events.push({
21
+ ...event,
22
+ timestamp: event.timestamp ?? new Date().toISOString(),
23
+ });
24
+ }
25
+ getEvents() {
26
+ return [...this.events];
27
+ }
28
+ flush() {
29
+ const flushed = [...this.events];
30
+ this.events = [];
31
+ return flushed;
32
+ }
33
+ };
34
+ exports.RuleEventCollector = RuleEventCollector;
35
+ exports.RuleEventCollector = RuleEventCollector = __decorate([
36
+ (0, common_1.Injectable)()
37
+ ], RuleEventCollector);
38
+ //# sourceMappingURL=rule-event-collector.js.map
@@ -0,0 +1,9 @@
1
+ export declare const RULE_EVENT_TYPES: readonly ["mode_activated", "checklist_generated", "specialist_dispatched", "violation_caught"];
2
+ export type RuleEventType = (typeof RULE_EVENT_TYPES)[number];
3
+ export interface RuleEvent {
4
+ type: RuleEventType;
5
+ timestamp: string;
6
+ domain?: string;
7
+ rule?: string;
8
+ details?: Record<string, unknown>;
9
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RULE_EVENT_TYPES = void 0;
4
+ exports.RULE_EVENT_TYPES = [
5
+ 'mode_activated',
6
+ 'checklist_generated',
7
+ 'specialist_dispatched',
8
+ 'violation_caught',
9
+ ];
10
+ //# sourceMappingURL=rule-event.types.js.map
@@ -0,0 +1,23 @@
1
+ import { RuleEventCollector } from './rule-event-collector';
2
+ export declare const STATS_FILE_PATH: unique symbol;
3
+ export interface RuleStatsEntry {
4
+ applied: number;
5
+ sessions: number;
6
+ }
7
+ export interface DomainStatsEntry {
8
+ checks: number;
9
+ issues_prevented: number;
10
+ }
11
+ export interface StatsFile {
12
+ lastUpdated: string;
13
+ rules: Record<string, RuleStatsEntry>;
14
+ domains: Record<string, DomainStatsEntry>;
15
+ }
16
+ export declare class RuleStatsWriter {
17
+ private readonly collector;
18
+ private readonly statsPath;
19
+ constructor(collector: RuleEventCollector, statsPath?: string);
20
+ flush(): Promise<void>;
21
+ private readExistingStats;
22
+ private atomicWrite;
23
+ }
@@ -0,0 +1,138 @@
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 __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.RuleStatsWriter = exports.STATS_FILE_PATH = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const promises_1 = require("fs/promises");
18
+ const fs_1 = require("fs");
19
+ const path_1 = require("path");
20
+ const rule_event_collector_1 = require("./rule-event-collector");
21
+ exports.STATS_FILE_PATH = Symbol('STATS_FILE_PATH');
22
+ const DEFAULT_STATS_RELATIVE_PATH = 'docs/codingbuddy/rule-stats.json';
23
+ function createEmptyStats() {
24
+ return {
25
+ lastUpdated: new Date().toISOString(),
26
+ rules: {},
27
+ domains: {},
28
+ };
29
+ }
30
+ function aggregateEvents(events) {
31
+ const stats = createEmptyStats();
32
+ for (const event of events) {
33
+ switch (event.type) {
34
+ case 'mode_activated': {
35
+ if (!event.rule)
36
+ break;
37
+ if (!stats.rules[event.rule]) {
38
+ stats.rules[event.rule] = { applied: 0, sessions: 0 };
39
+ }
40
+ stats.rules[event.rule].applied += 1;
41
+ stats.rules[event.rule].sessions += 1;
42
+ break;
43
+ }
44
+ case 'checklist_generated':
45
+ case 'specialist_dispatched': {
46
+ if (!event.domain)
47
+ break;
48
+ if (!stats.domains[event.domain]) {
49
+ stats.domains[event.domain] = { checks: 0, issues_prevented: 0 };
50
+ }
51
+ stats.domains[event.domain].checks += 1;
52
+ break;
53
+ }
54
+ case 'violation_caught': {
55
+ if (!event.domain)
56
+ break;
57
+ if (!stats.domains[event.domain]) {
58
+ stats.domains[event.domain] = { checks: 0, issues_prevented: 0 };
59
+ }
60
+ stats.domains[event.domain].issues_prevented += 1;
61
+ break;
62
+ }
63
+ }
64
+ }
65
+ return stats;
66
+ }
67
+ function mergeStats(existing, incoming) {
68
+ const merged = {
69
+ lastUpdated: new Date().toISOString(),
70
+ rules: { ...existing.rules },
71
+ domains: { ...existing.domains },
72
+ };
73
+ for (const [name, entry] of Object.entries(incoming.rules)) {
74
+ if (merged.rules[name]) {
75
+ merged.rules[name] = {
76
+ applied: merged.rules[name].applied + entry.applied,
77
+ sessions: merged.rules[name].sessions + entry.sessions,
78
+ };
79
+ }
80
+ else {
81
+ merged.rules[name] = { ...entry };
82
+ }
83
+ }
84
+ for (const [name, entry] of Object.entries(incoming.domains)) {
85
+ if (merged.domains[name]) {
86
+ merged.domains[name] = {
87
+ checks: merged.domains[name].checks + entry.checks,
88
+ issues_prevented: merged.domains[name].issues_prevented + entry.issues_prevented,
89
+ };
90
+ }
91
+ else {
92
+ merged.domains[name] = { ...entry };
93
+ }
94
+ }
95
+ return merged;
96
+ }
97
+ let RuleStatsWriter = class RuleStatsWriter {
98
+ constructor(collector, statsPath) {
99
+ this.collector = collector;
100
+ this.statsPath = statsPath ?? (0, path_1.join)(process.cwd(), DEFAULT_STATS_RELATIVE_PATH);
101
+ }
102
+ async flush() {
103
+ const events = this.collector.flush();
104
+ if (events.length === 0) {
105
+ return;
106
+ }
107
+ const incoming = aggregateEvents(events);
108
+ const existing = await this.readExistingStats();
109
+ const merged = existing ? mergeStats(existing, incoming) : incoming;
110
+ await this.atomicWrite(merged);
111
+ }
112
+ async readExistingStats() {
113
+ try {
114
+ const raw = await (0, promises_1.readFile)(this.statsPath, 'utf-8');
115
+ return JSON.parse(raw);
116
+ }
117
+ catch {
118
+ return null;
119
+ }
120
+ }
121
+ async atomicWrite(stats) {
122
+ const dir = (0, path_1.dirname)(this.statsPath);
123
+ if (!(0, fs_1.existsSync)(dir)) {
124
+ await (0, promises_1.mkdir)(dir, { recursive: true });
125
+ }
126
+ const tmpPath = this.statsPath + '.tmp';
127
+ await (0, promises_1.writeFile)(tmpPath, JSON.stringify(stats, null, 2), 'utf-8');
128
+ await (0, promises_1.rename)(tmpPath, this.statsPath);
129
+ }
130
+ };
131
+ exports.RuleStatsWriter = RuleStatsWriter;
132
+ exports.RuleStatsWriter = RuleStatsWriter = __decorate([
133
+ (0, common_1.Injectable)(),
134
+ __param(1, (0, common_1.Optional)()),
135
+ __param(1, (0, common_1.Inject)(exports.STATS_FILE_PATH)),
136
+ __metadata("design:paramtypes", [rule_event_collector_1.RuleEventCollector, String])
137
+ ], RuleStatsWriter);
138
+ //# sourceMappingURL=rule-stats-writer.js.map
@@ -10,6 +10,8 @@ exports.RulesModule = void 0;
10
10
  const common_1 = require("@nestjs/common");
11
11
  const rules_service_1 = require("./rules.service");
12
12
  const rule_insights_service_1 = require("./rule-insights.service");
13
+ const rule_event_collector_1 = require("./rule-event-collector");
14
+ const rule_stats_writer_1 = require("./rule-stats-writer");
13
15
  const custom_1 = require("../custom");
14
16
  const config_module_1 = require("../config/config.module");
15
17
  let RulesModule = class RulesModule {
@@ -18,8 +20,8 @@ exports.RulesModule = RulesModule;
18
20
  exports.RulesModule = RulesModule = __decorate([
19
21
  (0, common_1.Module)({
20
22
  imports: [custom_1.CustomModule, config_module_1.CodingBuddyConfigModule],
21
- providers: [rules_service_1.RulesService, rule_insights_service_1.RuleInsightsService],
22
- exports: [rules_service_1.RulesService, rule_insights_service_1.RuleInsightsService],
23
+ providers: [rules_service_1.RulesService, rule_insights_service_1.RuleInsightsService, rule_event_collector_1.RuleEventCollector, rule_stats_writer_1.RuleStatsWriter],
24
+ exports: [rules_service_1.RulesService, rule_insights_service_1.RuleInsightsService, rule_event_collector_1.RuleEventCollector, rule_stats_writer_1.RuleStatsWriter],
23
25
  })
24
26
  ], RulesModule);
25
27
  //# sourceMappingURL=rules.module.js.map
@@ -1,5 +1,5 @@
1
1
  import { AgentProfile, SearchResult } from './rules.types';
2
- import type { Skill } from './skill.schema';
2
+ import type { Skill, SkillFrontmatterTrigger } from './skill.schema';
3
3
  import { CustomService } from '../custom';
4
4
  import { ConfigService } from '../config/config.service';
5
5
  export declare class RulesService {
@@ -11,12 +11,19 @@ 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[]>;
17
18
  listSkillsFromDir(): Promise<Array<{
18
19
  name: string;
19
20
  description: string;
21
+ triggers?: SkillFrontmatterTrigger[];
22
+ userInvocable?: boolean;
23
+ disableModelInvocation?: boolean;
24
+ context?: string;
25
+ agent?: string;
26
+ allowedTools?: string[];
20
27
  }>>;
21
28
  getSkill(name: string): Promise<Skill>;
22
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
  }
@@ -3,10 +3,20 @@ export declare class SkillSchemaError extends Error {
3
3
  readonly details?: z.ZodError | undefined;
4
4
  constructor(message: string, details?: z.ZodError | undefined);
5
5
  }
6
+ export interface SkillFrontmatterTrigger {
7
+ pattern: string;
8
+ confidence: 'high' | 'medium' | 'low';
9
+ }
6
10
  export interface Skill {
7
11
  name: string;
8
12
  description: string;
9
13
  content: string;
10
14
  path: string;
15
+ triggers?: SkillFrontmatterTrigger[];
16
+ userInvocable?: boolean;
17
+ disableModelInvocation?: boolean;
18
+ context?: string;
19
+ agent?: string;
20
+ allowedTools?: string[];
11
21
  }
12
22
  export declare function parseSkill(content: string, filePath: string): Skill;