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
@@ -1,6 +1,14 @@
1
+ import { type OnModuleInit } from '@nestjs/common';
1
2
  import type { RecommendSkillsResult, ListSkillsResult, ListSkillsOptions } from './skill-recommendation.types';
2
- export declare class SkillRecommendationService {
3
+ import { RulesService } from '../rules/rules.service';
4
+ export declare class SkillRecommendationService implements OnModuleInit {
5
+ private readonly rulesService;
6
+ private frontmatterTriggerCache;
7
+ private skillMetadataCache;
8
+ constructor(rulesService: RulesService);
9
+ onModuleInit(): Promise<void>;
10
+ loadFrontmatterTriggers(): Promise<void>;
3
11
  recommendSkills(prompt: string): RecommendSkillsResult;
4
12
  private determineConfidence;
5
- listSkills(options?: ListSkillsOptions): ListSkillsResult;
13
+ listSkills(options?: ListSkillsOptions): Promise<ListSkillsResult>;
6
14
  }
@@ -5,16 +5,63 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
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
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
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
+ };
8
11
  Object.defineProperty(exports, "__esModule", { value: true });
9
12
  exports.SkillRecommendationService = void 0;
10
13
  const common_1 = require("@nestjs/common");
11
14
  const skill_triggers_1 = require("./skill-triggers");
12
15
  const keywords_1 = require("./i18n/keywords");
16
+ const rules_service_1 = require("../rules/rules.service");
17
+ const DEFAULT_PRIORITY = 0;
18
+ const CONFIDENCE_RANK = {
19
+ high: 3,
20
+ medium: 2,
21
+ low: 1,
22
+ };
13
23
  function getSkillDescription(skillName) {
14
24
  const skill = keywords_1.SKILL_KEYWORDS.find(s => s.skillName === skillName);
15
25
  return skill?.description ?? `Skill: ${skillName}`;
16
26
  }
17
27
  let SkillRecommendationService = class SkillRecommendationService {
28
+ constructor(rulesService) {
29
+ this.rulesService = rulesService;
30
+ this.frontmatterTriggerCache = new Map();
31
+ this.skillMetadataCache = new Map();
32
+ }
33
+ async onModuleInit() {
34
+ await this.loadFrontmatterTriggers();
35
+ }
36
+ async loadFrontmatterTriggers() {
37
+ const skills = await this.rulesService.listSkillsFromDir();
38
+ this.frontmatterTriggerCache.clear();
39
+ this.skillMetadataCache.clear();
40
+ for (const skill of skills) {
41
+ if (skill.userInvocable !== undefined || skill.disableModelInvocation !== undefined) {
42
+ this.skillMetadataCache.set(skill.name, {
43
+ userInvocable: skill.userInvocable,
44
+ disableModelInvocation: skill.disableModelInvocation,
45
+ });
46
+ }
47
+ if (skill.triggers && skill.triggers.length > 0) {
48
+ const compiled = [];
49
+ for (const t of skill.triggers) {
50
+ try {
51
+ compiled.push({ pattern: new RegExp(t.pattern, 'i'), confidence: t.confidence });
52
+ }
53
+ catch {
54
+ }
55
+ }
56
+ if (compiled.length > 0) {
57
+ this.frontmatterTriggerCache.set(skill.name, {
58
+ description: skill.description,
59
+ triggers: compiled,
60
+ });
61
+ }
62
+ }
63
+ }
64
+ }
18
65
  recommendSkills(prompt) {
19
66
  const trimmedPrompt = prompt.trim();
20
67
  if (trimmedPrompt.length === 0) {
@@ -29,31 +76,72 @@ let SkillRecommendationService = class SkillRecommendationService {
29
76
  const matchedPatterns = [];
30
77
  for (const pattern of trigger.patterns) {
31
78
  if (pattern.test(trimmedPrompt)) {
32
- const patternSource = pattern.source;
33
- matchedPatterns.push(patternSource);
79
+ matchedPatterns.push(pattern.source);
34
80
  }
35
81
  }
36
82
  if (matchedPatterns.length > 0 && !skillMatches.has(trigger.skillName)) {
37
83
  skillMatches.set(trigger.skillName, {
38
84
  matchedPatterns,
39
85
  priority: trigger.priority,
86
+ confidence: this.determineConfidence(matchedPatterns.length),
87
+ description: getSkillDescription(trigger.skillName),
40
88
  });
41
89
  }
42
90
  }
91
+ for (const [skillName, entry] of this.frontmatterTriggerCache) {
92
+ const fmMatchedPatterns = [];
93
+ let bestConfidence = 'low';
94
+ for (const trigger of entry.triggers) {
95
+ if (trigger.pattern.test(trimmedPrompt)) {
96
+ fmMatchedPatterns.push(trigger.pattern.source);
97
+ if ((CONFIDENCE_RANK[trigger.confidence] ?? 0) > (CONFIDENCE_RANK[bestConfidence] ?? 0)) {
98
+ bestConfidence = trigger.confidence;
99
+ }
100
+ }
101
+ }
102
+ if (fmMatchedPatterns.length > 0) {
103
+ const existing = skillMatches.get(skillName);
104
+ if (existing) {
105
+ const mergedPatterns = [...new Set([...existing.matchedPatterns, ...fmMatchedPatterns])];
106
+ const existingRank = CONFIDENCE_RANK[existing.confidence] ?? 0;
107
+ const newRank = CONFIDENCE_RANK[bestConfidence] ?? 0;
108
+ existing.matchedPatterns = mergedPatterns;
109
+ if (newRank > existingRank) {
110
+ existing.confidence = bestConfidence;
111
+ }
112
+ }
113
+ else {
114
+ skillMatches.set(skillName, {
115
+ matchedPatterns: fmMatchedPatterns,
116
+ priority: 0,
117
+ confidence: bestConfidence,
118
+ description: entry.description,
119
+ });
120
+ }
121
+ }
122
+ }
43
123
  const recommendations = [];
44
- for (const [skillName, { matchedPatterns }] of skillMatches) {
45
- const confidence = this.determineConfidence(matchedPatterns.length);
124
+ for (const [skillName, match] of skillMatches) {
125
+ const metadata = this.skillMetadataCache.get(skillName);
126
+ if (metadata?.userInvocable === false) {
127
+ continue;
128
+ }
129
+ if (metadata?.disableModelInvocation === true) {
130
+ continue;
131
+ }
46
132
  recommendations.push({
47
133
  skillName,
48
- confidence,
49
- matchedPatterns,
50
- description: getSkillDescription(skillName),
134
+ confidence: match.confidence,
135
+ matchedPatterns: match.matchedPatterns,
136
+ description: match.description,
51
137
  });
52
138
  }
53
139
  recommendations.sort((a, b) => {
54
140
  const aPriority = skillMatches.get(a.skillName)?.priority ?? 0;
55
141
  const bPriority = skillMatches.get(b.skillName)?.priority ?? 0;
56
- return bPriority - aPriority;
142
+ if (bPriority !== aPriority)
143
+ return bPriority - aPriority;
144
+ return (CONFIDENCE_RANK[b.confidence] ?? 0) - (CONFIDENCE_RANK[a.confidence] ?? 0);
57
145
  });
58
146
  return {
59
147
  recommendations,
@@ -66,13 +154,28 @@ let SkillRecommendationService = class SkillRecommendationService {
66
154
  }
67
155
  return 'medium';
68
156
  }
69
- listSkills(options) {
70
- let skills = keywords_1.SKILL_KEYWORDS.map(skill => ({
71
- name: skill.skillName,
72
- priority: skill.priority,
73
- description: skill.description,
74
- concepts: Object.keys(skill.concepts),
75
- }));
157
+ async listSkills(options) {
158
+ const fsSkills = await this.rulesService.listSkillsFromDir();
159
+ let skills = fsSkills.map(fsSkill => {
160
+ const kwEntry = keywords_1.SKILL_KEYWORDS.find(k => k.skillName === fsSkill.name);
161
+ const info = {
162
+ name: fsSkill.name,
163
+ priority: kwEntry?.priority ?? DEFAULT_PRIORITY,
164
+ description: fsSkill.description,
165
+ concepts: kwEntry ? Object.keys(kwEntry.concepts) : [],
166
+ };
167
+ if (fsSkill.userInvocable !== undefined)
168
+ info.userInvocable = fsSkill.userInvocable;
169
+ if (fsSkill.disableModelInvocation !== undefined)
170
+ info.disableModelInvocation = fsSkill.disableModelInvocation;
171
+ if (fsSkill.context !== undefined)
172
+ info.context = fsSkill.context;
173
+ if (fsSkill.agent !== undefined)
174
+ info.agent = fsSkill.agent;
175
+ if (fsSkill.allowedTools !== undefined)
176
+ info.allowedTools = fsSkill.allowedTools;
177
+ return info;
178
+ });
76
179
  if (options?.minPriority !== undefined) {
77
180
  skills = skills.filter(s => s.priority >= options.minPriority);
78
181
  }
@@ -88,6 +191,7 @@ let SkillRecommendationService = class SkillRecommendationService {
88
191
  };
89
192
  exports.SkillRecommendationService = SkillRecommendationService;
90
193
  exports.SkillRecommendationService = SkillRecommendationService = __decorate([
91
- (0, common_1.Injectable)()
194
+ (0, common_1.Injectable)(),
195
+ __metadata("design:paramtypes", [rules_service_1.RulesService])
92
196
  ], SkillRecommendationService);
93
197
  //# sourceMappingURL=skill-recommendation.service.js.map
@@ -18,6 +18,11 @@ export interface SkillInfo {
18
18
  priority: number;
19
19
  description: string;
20
20
  concepts: string[];
21
+ userInvocable?: boolean;
22
+ disableModelInvocation?: boolean;
23
+ context?: string;
24
+ agent?: string;
25
+ allowedTools?: string[];
21
26
  }
22
27
  export interface ListSkillsResult {
23
28
  skills: SkillInfo[];
@@ -9,11 +9,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.SkillModule = void 0;
10
10
  const common_1 = require("@nestjs/common");
11
11
  const skill_recommendation_service_1 = require("./skill-recommendation.service");
12
+ const rules_module_1 = require("../rules/rules.module");
12
13
  let SkillModule = class SkillModule {
13
14
  };
14
15
  exports.SkillModule = SkillModule;
15
16
  exports.SkillModule = SkillModule = __decorate([
16
17
  (0, common_1.Module)({
18
+ imports: [rules_module_1.RulesModule],
17
19
  providers: [skill_recommendation_service_1.SkillRecommendationService],
18
20
  exports: [skill_recommendation_service_1.SkillRecommendationService],
19
21
  })
@@ -1,14 +1,17 @@
1
1
  import type { TuiEventBus } from './event-bus';
2
2
  export interface HudFileBridgeOptions {
3
3
  debounceMs?: number;
4
+ pollIntervalMs?: number;
4
5
  }
5
6
  export declare class HudFileBridge {
6
7
  private readonly eventBus;
7
8
  private readonly filePath;
8
9
  private readonly debounceMs;
10
+ private readonly pollIntervalMs;
9
11
  private watcher;
10
12
  private debounceTimer;
11
13
  private pollInterval;
14
+ private lastMtimeMs;
12
15
  private prev;
13
16
  private stopped;
14
17
  constructor(eventBus: TuiEventBus, filePath: string, options?: HudFileBridgeOptions);
@@ -17,5 +20,6 @@ export declare class HudFileBridge {
17
20
  private scheduleProcess;
18
21
  private processChange;
19
22
  private readState;
23
+ private startPollingFallback;
20
24
  private pollUntilExists;
21
25
  }
@@ -10,11 +10,13 @@ class HudFileBridge {
10
10
  this.watcher = null;
11
11
  this.debounceTimer = null;
12
12
  this.pollInterval = null;
13
+ this.lastMtimeMs = 0;
13
14
  this.prev = { currentMode: null, activeAgent: null };
14
15
  this.stopped = false;
15
16
  this.eventBus = eventBus;
16
17
  this.filePath = filePath;
17
18
  this.debounceMs = options?.debounceMs ?? 150;
19
+ this.pollIntervalMs = options?.pollIntervalMs ?? 200;
18
20
  }
19
21
  start() {
20
22
  this.stopped = false;
@@ -28,7 +30,11 @@ class HudFileBridge {
28
30
  this.scheduleProcess();
29
31
  });
30
32
  this.watcher.on('error', () => {
33
+ this.watcher?.close();
34
+ this.watcher = null;
35
+ process.stderr.write('[codingbuddy] fs.watch failed, polling safety net active\n');
31
36
  });
37
+ this.startPollingFallback(true);
32
38
  }
33
39
  catch {
34
40
  this.pollUntilExists();
@@ -91,6 +97,36 @@ class HudFileBridge {
91
97
  return { currentMode: null, activeAgent: null };
92
98
  }
93
99
  }
100
+ startPollingFallback(silent = false) {
101
+ if (this.stopped || this.pollInterval)
102
+ return;
103
+ if (!silent) {
104
+ process.stderr.write('[codingbuddy] fs.watch failed, falling back to polling\n');
105
+ }
106
+ try {
107
+ const stat = fs.statSync(this.filePath);
108
+ this.lastMtimeMs = stat.mtimeMs;
109
+ }
110
+ catch {
111
+ this.lastMtimeMs = 0;
112
+ }
113
+ this.pollInterval = setInterval(() => {
114
+ if (this.stopped) {
115
+ clearInterval(this.pollInterval);
116
+ this.pollInterval = null;
117
+ return;
118
+ }
119
+ try {
120
+ const stat = fs.statSync(this.filePath);
121
+ if (stat.mtimeMs !== this.lastMtimeMs) {
122
+ this.lastMtimeMs = stat.mtimeMs;
123
+ this.scheduleProcess();
124
+ }
125
+ }
126
+ catch {
127
+ }
128
+ }, this.pollIntervalMs);
129
+ }
94
130
  pollUntilExists() {
95
131
  if (this.stopped)
96
132
  return;
@@ -0,0 +1,2 @@
1
+ export declare function flushInk(cycles?: number): Promise<void>;
2
+ export declare function waitForFrame(getFrame: () => string | undefined, assertion: (frame: string) => void, timeoutMs?: number): Promise<void>;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.flushInk = flushInk;
4
+ exports.waitForFrame = waitForFrame;
5
+ async function flushInk(cycles = 3) {
6
+ for (let i = 0; i < cycles; i++) {
7
+ await new Promise(resolve => setTimeout(resolve, 0));
8
+ }
9
+ }
10
+ async function waitForFrame(getFrame, assertion, timeoutMs = 500) {
11
+ const start = Date.now();
12
+ let lastError;
13
+ while (Date.now() - start < timeoutMs) {
14
+ try {
15
+ assertion(getFrame() ?? '');
16
+ return;
17
+ }
18
+ catch (err) {
19
+ lastError = err;
20
+ await new Promise(resolve => setTimeout(resolve, 10));
21
+ }
22
+ }
23
+ throw lastError ?? new Error('waitForFrame timeout');
24
+ }
25
+ //# sourceMappingURL=tui-test-utils.js.map