@probelabs/visor 0.1.106 → 0.1.111

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 (530) hide show
  1. package/README.md +71 -2
  2. package/action.yml +1 -1
  3. package/defaults/code-refiner.yaml +114 -0
  4. package/defaults/{.visor.yaml → code-review.yaml} +35 -226
  5. package/defaults/override.yaml +52 -0
  6. package/defaults/task-refinement.yaml +624 -0
  7. package/defaults/visor.tests.yaml +685 -0
  8. package/defaults/visor.yaml +483 -0
  9. package/dist/action-cli-bridge.d.ts +11 -82
  10. package/dist/action-cli-bridge.d.ts.map +1 -1
  11. package/dist/ai-review-service.d.ts +28 -9
  12. package/dist/ai-review-service.d.ts.map +1 -1
  13. package/dist/check-execution-engine.d.ts +19 -331
  14. package/dist/check-execution-engine.d.ts.map +1 -1
  15. package/dist/cli-main.d.ts.map +1 -1
  16. package/dist/cli.d.ts +0 -1
  17. package/dist/cli.d.ts.map +1 -1
  18. package/dist/config.d.ts +16 -0
  19. package/dist/config.d.ts.map +1 -1
  20. package/dist/cron-scheduler.d.ts +3 -3
  21. package/dist/cron-scheduler.d.ts.map +1 -1
  22. package/dist/debug-visualizer/ws-server.d.ts +7 -1
  23. package/dist/debug-visualizer/ws-server.d.ts.map +1 -1
  24. package/dist/defaults/code-refiner.yaml +114 -0
  25. package/dist/defaults/{.visor.yaml → code-review.yaml} +35 -226
  26. package/dist/defaults/override.yaml +52 -0
  27. package/dist/defaults/task-refinement.yaml +624 -0
  28. package/dist/defaults/visor.tests.yaml +685 -0
  29. package/dist/defaults/visor.yaml +483 -0
  30. package/dist/docs/DEPLOYMENT.md +118 -0
  31. package/dist/docs/GITHUB_CHECKS.md +280 -0
  32. package/dist/docs/NPM_USAGE.md +208 -0
  33. package/dist/docs/action-reference.md +19 -0
  34. package/dist/docs/advanced-ai.md +237 -0
  35. package/dist/docs/ai-configuration.md +535 -0
  36. package/dist/docs/ai-custom-tools-usage.md +261 -0
  37. package/dist/docs/ai-custom-tools.md +392 -0
  38. package/dist/docs/author-permissions.md +610 -0
  39. package/dist/docs/bot-transports-rfc.md +23 -0
  40. package/dist/docs/ci-cli-mode.md +34 -0
  41. package/dist/docs/claude-code.md +74 -0
  42. package/dist/docs/command-provider.md +559 -0
  43. package/dist/docs/commands.md +8 -0
  44. package/dist/docs/configuration.md +324 -0
  45. package/dist/docs/custom-tools.md +424 -0
  46. package/dist/docs/dashboards/README.md +23 -0
  47. package/dist/docs/dashboards/grafana-visor-diagrams.json +20 -0
  48. package/dist/docs/dashboards/grafana-visor-overview.json +33 -0
  49. package/dist/docs/debug-visualizer-progress.md +572 -0
  50. package/dist/docs/debug-visualizer-rfc.md +691 -0
  51. package/dist/docs/debug-visualizer.md +114 -0
  52. package/dist/docs/debugging.md +636 -0
  53. package/dist/docs/default-output-schema.md +28 -0
  54. package/dist/docs/dependencies.md +369 -0
  55. package/dist/docs/dev-playbook.md +9 -0
  56. package/dist/docs/engine-pause-resume-rfc.md +192 -0
  57. package/dist/docs/engine-state-machine-plan.md +333 -0
  58. package/dist/docs/event-driven-github-integration-rfc.md +743 -0
  59. package/dist/docs/event-triggers.md +292 -0
  60. package/dist/docs/execution-statistics-rfc.md +290 -0
  61. package/dist/docs/fact-validator-gap-analysis.md +178 -0
  62. package/dist/docs/fact-validator-implementation-plan.md +1235 -0
  63. package/dist/docs/fail-if.md +95 -0
  64. package/dist/docs/failure-conditions-implementation.md +271 -0
  65. package/dist/docs/failure-conditions-schema.md +173 -0
  66. package/dist/docs/failure-routing-rfc.md +193 -0
  67. package/dist/docs/failure-routing.md +507 -0
  68. package/dist/docs/foreach-dependency-propagation.md +473 -0
  69. package/dist/docs/github-ops.md +89 -0
  70. package/dist/docs/goto-forward-run-plan.md +113 -0
  71. package/dist/docs/guides/criticality-modes.md +332 -0
  72. package/dist/docs/guides/fault-management-and-contracts.md +738 -0
  73. package/dist/docs/guides/workflow-style-guide.md +224 -0
  74. package/dist/docs/http.md +299 -0
  75. package/dist/docs/human-input-provider.md +372 -0
  76. package/dist/docs/lifecycle-hooks.md +253 -0
  77. package/dist/docs/limits.md +64 -0
  78. package/dist/docs/liquid-templates.md +490 -0
  79. package/dist/docs/loop-routing-refactor.md +89 -0
  80. package/dist/docs/mcp-provider.md +557 -0
  81. package/dist/docs/mcp.md +124 -0
  82. package/dist/docs/memory.md +903 -0
  83. package/dist/docs/observability.md +12 -0
  84. package/dist/docs/output-formats.md +20 -0
  85. package/dist/docs/output-formatting.md +29 -0
  86. package/dist/docs/output-history.md +383 -0
  87. package/dist/docs/performance.md +6 -0
  88. package/dist/docs/pluggable.md +124 -0
  89. package/dist/docs/proposals/snapshot-scope-execution.md +236 -0
  90. package/dist/docs/providers/git-checkout.md +589 -0
  91. package/dist/docs/recipes.md +474 -0
  92. package/dist/docs/rfc/git-checkout-step.md +601 -0
  93. package/dist/docs/rfc/on_init-hook.md +1294 -0
  94. package/dist/docs/rfc/workspace-isolation.md +216 -0
  95. package/dist/docs/roadmap/criticality-implementation-tasks.md +92 -0
  96. package/dist/docs/router-patterns.md +339 -0
  97. package/dist/docs/schema-next-pr.md +10 -0
  98. package/dist/docs/schema-templates.md +68 -0
  99. package/dist/docs/script.md +34 -0
  100. package/dist/docs/sdk.md +222 -0
  101. package/dist/docs/security.md +7 -0
  102. package/dist/docs/suppressions.md +89 -0
  103. package/dist/docs/tag-filtering.md +258 -0
  104. package/dist/docs/telemetry-setup.md +119 -0
  105. package/dist/docs/telemetry-tracing-rfc.md +275 -0
  106. package/dist/docs/test-framework-rfc.md +680 -0
  107. package/dist/docs/testing/assertions.md +85 -0
  108. package/dist/docs/testing/ci.md +44 -0
  109. package/dist/docs/testing/cli.md +41 -0
  110. package/dist/docs/testing/cookbook.md +172 -0
  111. package/dist/docs/testing/dsl-reference.md +199 -0
  112. package/dist/docs/testing/fixtures-and-mocks.md +91 -0
  113. package/dist/docs/testing/flows.md +92 -0
  114. package/dist/docs/testing/getting-started.md +93 -0
  115. package/dist/docs/testing/troubleshooting.md +55 -0
  116. package/dist/docs/timeouts.md +50 -0
  117. package/dist/docs/troubleshooting.md +7 -0
  118. package/dist/docs/visor-sdk-rfc.md +186 -0
  119. package/dist/docs/workflows.md +569 -0
  120. package/dist/engine/on-finish/orchestrator.d.ts +19 -0
  121. package/dist/engine/on-finish/orchestrator.d.ts.map +1 -0
  122. package/dist/engine/on-finish/utils.d.ts +44 -0
  123. package/dist/engine/on-finish/utils.d.ts.map +1 -0
  124. package/dist/event-bus/event-bus.d.ts +13 -0
  125. package/dist/event-bus/event-bus.d.ts.map +1 -0
  126. package/dist/event-bus/types.d.ts +71 -0
  127. package/dist/event-bus/types.d.ts.map +1 -0
  128. package/dist/examples/.claude/agents/code-reviewer.md +69 -0
  129. package/dist/examples/.mcp.json +34 -0
  130. package/dist/examples/CALCULATOR-SDK.md +364 -0
  131. package/dist/examples/README.md +384 -0
  132. package/dist/examples/ai-custom-tools-example.yaml +206 -0
  133. package/dist/examples/ai-custom-tools-simple.yaml +76 -0
  134. package/dist/examples/ai-retry-fallback-config.yaml +180 -0
  135. package/dist/examples/ai-with-bash.yaml +126 -0
  136. package/dist/examples/ai-with-mcp.yaml +82 -0
  137. package/dist/examples/basic-human-input.yaml +15 -0
  138. package/dist/examples/bedrock-config.yaml +77 -0
  139. package/dist/examples/calculator-config.yaml +133 -0
  140. package/dist/examples/calculator-json-output-guide.md +311 -0
  141. package/dist/examples/calculator-sdk-automated.ts +340 -0
  142. package/dist/examples/calculator-sdk-example.ts +275 -0
  143. package/dist/examples/calculator-sdk-json.ts +331 -0
  144. package/dist/examples/calculator-sdk-real.ts +374 -0
  145. package/dist/examples/calculator-sdk-test.ts +148 -0
  146. package/dist/examples/claude-code-config.yaml +191 -0
  147. package/dist/examples/cron-webhook-config.yaml +215 -0
  148. package/dist/examples/custom-template.liquid +57 -0
  149. package/dist/examples/custom-tools-example.yaml +281 -0
  150. package/dist/examples/enhanced-config.yaml +165 -0
  151. package/dist/examples/environments/visor.base.yaml +92 -0
  152. package/dist/examples/environments/visor.dev.yaml +33 -0
  153. package/dist/examples/environments/visor.prod.yaml +95 -0
  154. package/dist/examples/environments/visor.staging.yaml +46 -0
  155. package/dist/examples/fact-validator.yaml +361 -0
  156. package/dist/examples/fail-if-simple.yaml +90 -0
  157. package/dist/examples/failure-conditions-advanced.yaml +136 -0
  158. package/dist/examples/failure-conditions-basic.yaml +48 -0
  159. package/dist/examples/failure-conditions-github-style.yaml +119 -0
  160. package/dist/examples/failure-conditions-migration.yaml +74 -0
  161. package/dist/examples/for-loop-example.yaml +176 -0
  162. package/dist/examples/forEach-example.yaml +120 -0
  163. package/dist/examples/git-checkout-basic.yaml +32 -0
  164. package/dist/examples/git-checkout-compare.yaml +59 -0
  165. package/dist/examples/git-checkout-cross-repo.yaml +76 -0
  166. package/dist/examples/github-workflow-with-tags.yml +163 -0
  167. package/dist/examples/http-integration-config.yaml +240 -0
  168. package/dist/examples/https-server-config.yaml +209 -0
  169. package/dist/examples/human-input-example.yaml +63 -0
  170. package/dist/examples/if-conditions.yaml +173 -0
  171. package/dist/examples/jira-simple-example.yaml +56 -0
  172. package/dist/examples/jira-single-issue-workflow.yaml +166 -0
  173. package/dist/examples/jira-workflow-mcp.yaml +182 -0
  174. package/dist/examples/mcp/analyzer.py +119 -0
  175. package/dist/examples/mcp-provider-example.yaml +301 -0
  176. package/dist/examples/memory-counter.yaml +99 -0
  177. package/dist/examples/memory-error-collection.yaml +104 -0
  178. package/dist/examples/memory-exec-js.yaml +247 -0
  179. package/dist/examples/memory-namespace-isolation.yaml +184 -0
  180. package/dist/examples/memory-retry-counter.yaml +65 -0
  181. package/dist/examples/memory-state-machine.yaml +170 -0
  182. package/dist/examples/on-init-import-demo.yaml +179 -0
  183. package/dist/examples/outputs-raw-basic.yaml +26 -0
  184. package/dist/examples/project-with-tools.yaml +174 -0
  185. package/dist/examples/prompts/architecture-analysis.liquid +116 -0
  186. package/dist/examples/prompts/security-comprehensive.liquid +107 -0
  187. package/dist/examples/quick-start-tags.yaml +53 -0
  188. package/dist/examples/reusable-tools.yaml +92 -0
  189. package/dist/examples/reusable-workflows.yaml +88 -0
  190. package/dist/examples/routing-basic.yaml +35 -0
  191. package/dist/examples/routing-dynamic-js.yaml +46 -0
  192. package/dist/examples/routing-foreach.yaml +34 -0
  193. package/dist/examples/routing-goto-event.yaml +34 -0
  194. package/dist/examples/routing-on-success.yaml +25 -0
  195. package/dist/examples/run-calculator-demo.sh +71 -0
  196. package/dist/examples/sdk-basic.mjs +10 -0
  197. package/dist/examples/sdk-cjs.cjs +10 -0
  198. package/dist/examples/sdk-comprehensive.mjs +175 -0
  199. package/dist/examples/sdk-manual-config.mjs +65 -0
  200. package/dist/examples/sdk-typescript.js +81 -0
  201. package/dist/examples/sdk-typescript.ts +92 -0
  202. package/dist/examples/session-reuse-config.yaml +151 -0
  203. package/dist/examples/session-reuse-self.yaml +81 -0
  204. package/dist/examples/slack-simple-chat.yaml +775 -0
  205. package/dist/examples/templates/security-report.liquid +137 -0
  206. package/dist/examples/tools-library.yaml +281 -0
  207. package/dist/examples/transform-example.yaml +199 -0
  208. package/dist/examples/visor-with-tags.yaml +198 -0
  209. package/dist/examples/webhook-pipeline-config.yaml +218 -0
  210. package/dist/examples/workflows/calculator-workflow.yaml +163 -0
  211. package/dist/examples/workflows/code-quality.yaml +222 -0
  212. package/dist/examples/workflows/quick-pr-check.yaml +90 -0
  213. package/dist/examples/workflows/workflow-composition-example.yaml +130 -0
  214. package/dist/failure-condition-evaluator.d.ts +3 -0
  215. package/dist/failure-condition-evaluator.d.ts.map +1 -1
  216. package/dist/frontends/github-frontend.d.ts +58 -0
  217. package/dist/frontends/github-frontend.d.ts.map +1 -0
  218. package/dist/frontends/host.d.ts +47 -0
  219. package/dist/frontends/host.d.ts.map +1 -0
  220. package/dist/frontends/ndjson-sink.d.ts +12 -0
  221. package/dist/frontends/ndjson-sink.d.ts.map +1 -0
  222. package/dist/frontends/slack-frontend.d.ts +58 -0
  223. package/dist/frontends/slack-frontend.d.ts.map +1 -0
  224. package/dist/generated/config-schema.d.ts +967 -57
  225. package/dist/generated/config-schema.d.ts.map +1 -1
  226. package/dist/generated/config-schema.json +1033 -56
  227. package/dist/github-check-service.d.ts +4 -6
  228. package/dist/github-check-service.d.ts.map +1 -1
  229. package/dist/github-comments.d.ts +2 -4
  230. package/dist/github-comments.d.ts.map +1 -1
  231. package/dist/index.d.ts.map +1 -1
  232. package/dist/index.js +134327 -99004
  233. package/dist/liquid-extensions.d.ts.map +1 -1
  234. package/dist/logger.d.ts +2 -0
  235. package/dist/logger.d.ts.map +1 -1
  236. package/dist/memory-store.d.ts +6 -0
  237. package/dist/memory-store.d.ts.map +1 -1
  238. package/dist/output/assistant-json/template.liquid +0 -0
  239. package/dist/output/traces/run-2026-01-20T19-22-58-043Z.ndjson +138 -0
  240. package/dist/output/traces/run-2026-01-20T19-23-52-175Z.ndjson +1067 -0
  241. package/dist/output-formatters.d.ts +1 -1
  242. package/dist/output-formatters.d.ts.map +1 -1
  243. package/dist/providers/ai-check-provider.d.ts +12 -0
  244. package/dist/providers/ai-check-provider.d.ts.map +1 -1
  245. package/dist/providers/check-provider-registry.d.ts +6 -0
  246. package/dist/providers/check-provider-registry.d.ts.map +1 -1
  247. package/dist/providers/check-provider.interface.d.ts +43 -1
  248. package/dist/providers/check-provider.interface.d.ts.map +1 -1
  249. package/dist/providers/claude-code-check-provider.d.ts.map +1 -1
  250. package/dist/providers/command-check-provider.d.ts +1 -1
  251. package/dist/providers/command-check-provider.d.ts.map +1 -1
  252. package/dist/providers/custom-tool-executor.d.ts +61 -0
  253. package/dist/providers/custom-tool-executor.d.ts.map +1 -0
  254. package/dist/providers/git-checkout-provider.d.ts +25 -0
  255. package/dist/providers/git-checkout-provider.d.ts.map +1 -0
  256. package/dist/providers/github-ops-provider.d.ts.map +1 -1
  257. package/dist/providers/http-client-provider.d.ts +4 -4
  258. package/dist/providers/http-client-provider.d.ts.map +1 -1
  259. package/dist/providers/human-input-check-provider.d.ts +5 -0
  260. package/dist/providers/human-input-check-provider.d.ts.map +1 -1
  261. package/dist/providers/index.d.ts +1 -0
  262. package/dist/providers/index.d.ts.map +1 -1
  263. package/dist/providers/log-check-provider.d.ts +2 -5
  264. package/dist/providers/log-check-provider.d.ts.map +1 -1
  265. package/dist/providers/mcp-check-provider.d.ts +10 -4
  266. package/dist/providers/mcp-check-provider.d.ts.map +1 -1
  267. package/dist/providers/mcp-custom-sse-server.d.ts +66 -0
  268. package/dist/providers/mcp-custom-sse-server.d.ts.map +1 -0
  269. package/dist/providers/memory-check-provider.d.ts +2 -8
  270. package/dist/providers/memory-check-provider.d.ts.map +1 -1
  271. package/dist/providers/script-check-provider.d.ts +25 -0
  272. package/dist/providers/script-check-provider.d.ts.map +1 -0
  273. package/dist/providers/workflow-check-provider.d.ts +56 -0
  274. package/dist/providers/workflow-check-provider.d.ts.map +1 -0
  275. package/dist/reviewer.d.ts +2 -1
  276. package/dist/reviewer.d.ts.map +1 -1
  277. package/dist/sdk/check-provider-registry-534KL5HT.mjs +27 -0
  278. package/dist/sdk/chunk-23L3QRYX.mjs +16872 -0
  279. package/dist/sdk/chunk-23L3QRYX.mjs.map +1 -0
  280. package/dist/sdk/{chunk-TUTOLSFV.mjs → chunk-3OMWVM6J.mjs} +11 -1
  281. package/dist/sdk/chunk-3OMWVM6J.mjs.map +1 -0
  282. package/dist/sdk/chunk-7UK3NIIT.mjs +482 -0
  283. package/dist/sdk/chunk-7UK3NIIT.mjs.map +1 -0
  284. package/dist/sdk/chunk-AGIZJ4UZ.mjs +173 -0
  285. package/dist/sdk/chunk-AGIZJ4UZ.mjs.map +1 -0
  286. package/dist/sdk/chunk-AIVFBIS4.mjs +1371 -0
  287. package/dist/sdk/chunk-AIVFBIS4.mjs.map +1 -0
  288. package/dist/sdk/chunk-AK6BVWIT.mjs +426 -0
  289. package/dist/sdk/chunk-AK6BVWIT.mjs.map +1 -0
  290. package/dist/sdk/chunk-AUT26LHW.mjs +139 -0
  291. package/dist/sdk/chunk-AUT26LHW.mjs.map +1 -0
  292. package/dist/sdk/chunk-BOVFH3LI.mjs +232 -0
  293. package/dist/sdk/chunk-BOVFH3LI.mjs.map +1 -0
  294. package/dist/sdk/chunk-CNX7V5JK.mjs +89 -0
  295. package/dist/sdk/chunk-CNX7V5JK.mjs.map +1 -0
  296. package/dist/sdk/chunk-HTOKWMPO.mjs +157 -0
  297. package/dist/sdk/chunk-HTOKWMPO.mjs.map +1 -0
  298. package/dist/sdk/chunk-NAW3DB3I.mjs +197 -0
  299. package/dist/sdk/chunk-NAW3DB3I.mjs.map +1 -0
  300. package/dist/sdk/chunk-O5EZDNYL.mjs +274 -0
  301. package/dist/sdk/chunk-O5EZDNYL.mjs.map +1 -0
  302. package/dist/sdk/chunk-QR7MOMJH.mjs +558 -0
  303. package/dist/sdk/chunk-QR7MOMJH.mjs.map +1 -0
  304. package/dist/sdk/chunk-QY2XYPEV.mjs +3556 -0
  305. package/dist/sdk/chunk-QY2XYPEV.mjs.map +1 -0
  306. package/dist/sdk/chunk-S2RUE2RG.mjs +145 -0
  307. package/dist/sdk/chunk-S2RUE2RG.mjs.map +1 -0
  308. package/dist/sdk/chunk-SIWNBRTK.mjs +800 -0
  309. package/dist/sdk/chunk-SIWNBRTK.mjs.map +1 -0
  310. package/dist/sdk/chunk-YSN4G6CI.mjs +146 -0
  311. package/dist/sdk/chunk-YSN4G6CI.mjs.map +1 -0
  312. package/dist/sdk/chunk-ZYAUYXSW.mjs +206 -0
  313. package/dist/sdk/chunk-ZYAUYXSW.mjs.map +1 -0
  314. package/dist/sdk/command-executor-TYUV6HUS.mjs +14 -0
  315. package/dist/sdk/config-YNC2EOOT.mjs +16 -0
  316. package/dist/sdk/config-merger-PX3WIT57.mjs +10 -0
  317. package/dist/sdk/event-bus-5BEVPQ6T.mjs +35 -0
  318. package/dist/sdk/event-bus-5BEVPQ6T.mjs.map +1 -0
  319. package/dist/sdk/failure-condition-evaluator-YGTF2GHG.mjs +17 -0
  320. package/dist/sdk/git-repository-analyzer-HJC4MYW4.mjs +458 -0
  321. package/dist/sdk/git-repository-analyzer-HJC4MYW4.mjs.map +1 -0
  322. package/dist/sdk/github-frontend-SIAEOCON.mjs +1420 -0
  323. package/dist/sdk/github-frontend-SIAEOCON.mjs.map +1 -0
  324. package/dist/sdk/host-DXUYTNMU.mjs +52 -0
  325. package/dist/sdk/host-DXUYTNMU.mjs.map +1 -0
  326. package/dist/sdk/{liquid-extensions-KVL4MKRH.mjs → liquid-extensions-PKWCKK7E.mjs} +8 -2
  327. package/dist/sdk/memory-store-XGBB7LX7.mjs +12 -0
  328. package/dist/sdk/memory-store-XGBB7LX7.mjs.map +1 -0
  329. package/dist/sdk/metrics-7PP3EJUH.mjs +29 -0
  330. package/dist/sdk/metrics-7PP3EJUH.mjs.map +1 -0
  331. package/dist/sdk/ndjson-sink-B4V4NTAQ.mjs +44 -0
  332. package/dist/sdk/ndjson-sink-B4V4NTAQ.mjs.map +1 -0
  333. package/dist/sdk/prompt-state-YRJY6QAL.mjs +16 -0
  334. package/dist/sdk/prompt-state-YRJY6QAL.mjs.map +1 -0
  335. package/dist/sdk/renderer-schema-LPKN5UJS.mjs +51 -0
  336. package/dist/sdk/renderer-schema-LPKN5UJS.mjs.map +1 -0
  337. package/dist/sdk/routing-6N45MJ4F.mjs +24 -0
  338. package/dist/sdk/routing-6N45MJ4F.mjs.map +1 -0
  339. package/dist/sdk/sdk.d.mts +541 -22
  340. package/dist/sdk/sdk.d.ts +541 -22
  341. package/dist/sdk/sdk.js +27963 -16505
  342. package/dist/sdk/sdk.js.map +1 -1
  343. package/dist/sdk/sdk.mjs +1116 -2169
  344. package/dist/sdk/sdk.mjs.map +1 -1
  345. package/dist/sdk/session-registry-4E6YRQ77.mjs +10 -0
  346. package/dist/sdk/session-registry-4E6YRQ77.mjs.map +1 -0
  347. package/dist/sdk/slack-frontend-BVKW3GD5.mjs +735 -0
  348. package/dist/sdk/slack-frontend-BVKW3GD5.mjs.map +1 -0
  349. package/dist/sdk/trace-helpers-VP6QYVBX.mjs +23 -0
  350. package/dist/sdk/trace-helpers-VP6QYVBX.mjs.map +1 -0
  351. package/dist/sdk/{tracer-init-WC75N5NW.mjs → tracer-init-GSLPPLCD.mjs} +2 -2
  352. package/dist/sdk/tracer-init-GSLPPLCD.mjs.map +1 -0
  353. package/dist/sdk/workflow-registry-R6KSACFR.mjs +12 -0
  354. package/dist/sdk/workflow-registry-R6KSACFR.mjs.map +1 -0
  355. package/dist/sdk.d.ts.map +1 -1
  356. package/dist/slack/adapter.d.ts +36 -0
  357. package/dist/slack/adapter.d.ts.map +1 -0
  358. package/dist/slack/cache-prewarmer.d.ts +31 -0
  359. package/dist/slack/cache-prewarmer.d.ts.map +1 -0
  360. package/dist/slack/client.d.ts +77 -0
  361. package/dist/slack/client.d.ts.map +1 -0
  362. package/dist/slack/markdown.d.ts +45 -0
  363. package/dist/slack/markdown.d.ts.map +1 -0
  364. package/dist/slack/prompt-state.d.ts +33 -0
  365. package/dist/slack/prompt-state.d.ts.map +1 -0
  366. package/dist/slack/rate-limiter.d.ts +56 -0
  367. package/dist/slack/rate-limiter.d.ts.map +1 -0
  368. package/dist/slack/signature.d.ts +2 -0
  369. package/dist/slack/signature.d.ts.map +1 -0
  370. package/dist/slack/socket-runner.d.ts +42 -0
  371. package/dist/slack/socket-runner.d.ts.map +1 -0
  372. package/dist/slack/thread-cache.d.ts +51 -0
  373. package/dist/slack/thread-cache.d.ts.map +1 -0
  374. package/dist/snapshot-store.d.ts +59 -0
  375. package/dist/snapshot-store.d.ts.map +1 -0
  376. package/dist/state-machine/context/build-engine-context.d.ts +17 -0
  377. package/dist/state-machine/context/build-engine-context.d.ts.map +1 -0
  378. package/dist/state-machine/dispatch/dependency-gating.d.ts +12 -0
  379. package/dist/state-machine/dispatch/dependency-gating.d.ts.map +1 -0
  380. package/dist/state-machine/dispatch/execution-invoker.d.ts +14 -0
  381. package/dist/state-machine/dispatch/execution-invoker.d.ts.map +1 -0
  382. package/dist/state-machine/dispatch/foreach-processor.d.ts +8 -0
  383. package/dist/state-machine/dispatch/foreach-processor.d.ts.map +1 -0
  384. package/dist/state-machine/dispatch/history-snapshot.d.ts +8 -0
  385. package/dist/state-machine/dispatch/history-snapshot.d.ts.map +1 -0
  386. package/dist/state-machine/dispatch/on-init-handlers.d.ts +43 -0
  387. package/dist/state-machine/dispatch/on-init-handlers.d.ts.map +1 -0
  388. package/dist/state-machine/dispatch/renderer-schema.d.ts +8 -0
  389. package/dist/state-machine/dispatch/renderer-schema.d.ts.map +1 -0
  390. package/dist/state-machine/dispatch/stats-manager.d.ts +15 -0
  391. package/dist/state-machine/dispatch/stats-manager.d.ts.map +1 -0
  392. package/dist/state-machine/dispatch/template-renderer.d.ts +7 -0
  393. package/dist/state-machine/dispatch/template-renderer.d.ts.map +1 -0
  394. package/dist/state-machine/execution/summary.d.ts +8 -0
  395. package/dist/state-machine/execution/summary.d.ts.map +1 -0
  396. package/dist/state-machine/runner.d.ts +79 -0
  397. package/dist/state-machine/runner.d.ts.map +1 -0
  398. package/dist/state-machine/states/check-running.d.ts +14 -0
  399. package/dist/state-machine/states/check-running.d.ts.map +1 -0
  400. package/dist/state-machine/states/completed.d.ts +12 -0
  401. package/dist/state-machine/states/completed.d.ts.map +1 -0
  402. package/dist/state-machine/states/error.d.ts +11 -0
  403. package/dist/state-machine/states/error.d.ts.map +1 -0
  404. package/dist/state-machine/states/init.d.ts +11 -0
  405. package/dist/state-machine/states/init.d.ts.map +1 -0
  406. package/dist/state-machine/states/level-dispatch.d.ts +17 -0
  407. package/dist/state-machine/states/level-dispatch.d.ts.map +1 -0
  408. package/dist/state-machine/states/plan-ready.d.ts +12 -0
  409. package/dist/state-machine/states/plan-ready.d.ts.map +1 -0
  410. package/dist/state-machine/states/routing.d.ts +52 -0
  411. package/dist/state-machine/states/routing.d.ts.map +1 -0
  412. package/dist/state-machine/states/wave-planning.d.ts +14 -0
  413. package/dist/state-machine/states/wave-planning.d.ts.map +1 -0
  414. package/dist/state-machine/workflow-projection.d.ts +47 -0
  415. package/dist/state-machine/workflow-projection.d.ts.map +1 -0
  416. package/dist/state-machine-execution-engine.d.ts +159 -0
  417. package/dist/state-machine-execution-engine.d.ts.map +1 -0
  418. package/dist/telemetry/opentelemetry.d.ts.map +1 -1
  419. package/dist/telemetry/state-capture.d.ts +5 -0
  420. package/dist/telemetry/state-capture.d.ts.map +1 -1
  421. package/dist/test-runner/assertions.d.ts +59 -0
  422. package/dist/test-runner/assertions.d.ts.map +1 -0
  423. package/dist/test-runner/core/environment.d.ts +8 -0
  424. package/dist/test-runner/core/environment.d.ts.map +1 -0
  425. package/dist/test-runner/core/fixture.d.ts +3 -0
  426. package/dist/test-runner/core/fixture.d.ts.map +1 -0
  427. package/dist/test-runner/core/flow-stage.d.ts +32 -0
  428. package/dist/test-runner/core/flow-stage.d.ts.map +1 -0
  429. package/dist/test-runner/core/mocks.d.ts +8 -0
  430. package/dist/test-runner/core/mocks.d.ts.map +1 -0
  431. package/dist/test-runner/core/test-execution-wrapper.d.ts +18 -0
  432. package/dist/test-runner/core/test-execution-wrapper.d.ts.map +1 -0
  433. package/dist/test-runner/evaluators.d.ts +45 -0
  434. package/dist/test-runner/evaluators.d.ts.map +1 -0
  435. package/dist/test-runner/fixture-loader.d.ts +30 -0
  436. package/dist/test-runner/fixture-loader.d.ts.map +1 -0
  437. package/dist/test-runner/index.d.ts +127 -0
  438. package/dist/test-runner/index.d.ts.map +1 -0
  439. package/dist/test-runner/recorders/github-recorder.d.ts +23 -0
  440. package/dist/test-runner/recorders/github-recorder.d.ts.map +1 -0
  441. package/dist/test-runner/recorders/global-recorder.d.ts +4 -0
  442. package/dist/test-runner/recorders/global-recorder.d.ts.map +1 -0
  443. package/dist/test-runner/recorders/slack-recorder.d.ts +17 -0
  444. package/dist/test-runner/recorders/slack-recorder.d.ts.map +1 -0
  445. package/dist/test-runner/utils/selectors.d.ts +2 -0
  446. package/dist/test-runner/utils/selectors.d.ts.map +1 -0
  447. package/dist/test-runner/validator.d.ts +8 -0
  448. package/dist/test-runner/validator.d.ts.map +1 -0
  449. package/dist/traces/run-2026-01-20T19-22-58-043Z.ndjson +138 -0
  450. package/dist/traces/run-2026-01-20T19-23-52-175Z.ndjson +1067 -0
  451. package/dist/types/bot.d.ts +109 -0
  452. package/dist/types/bot.d.ts.map +1 -0
  453. package/dist/types/cli.d.ts +8 -1
  454. package/dist/types/cli.d.ts.map +1 -1
  455. package/dist/types/config.d.ts +459 -9
  456. package/dist/types/config.d.ts.map +1 -1
  457. package/dist/types/engine.d.ts +177 -0
  458. package/dist/types/engine.d.ts.map +1 -0
  459. package/dist/types/execution.d.ts +73 -0
  460. package/dist/types/execution.d.ts.map +1 -0
  461. package/dist/types/git-checkout.d.ts +76 -0
  462. package/dist/types/git-checkout.d.ts.map +1 -0
  463. package/dist/types/github.d.ts +51 -0
  464. package/dist/types/github.d.ts.map +1 -0
  465. package/dist/types/workflow.d.ts +237 -0
  466. package/dist/types/workflow.d.ts.map +1 -0
  467. package/dist/utils/command-executor.d.ts +43 -0
  468. package/dist/utils/command-executor.d.ts.map +1 -0
  469. package/dist/utils/comment-metadata.d.ts +21 -0
  470. package/dist/utils/comment-metadata.d.ts.map +1 -0
  471. package/dist/utils/config-loader.d.ts.map +1 -1
  472. package/dist/utils/config-merger.d.ts.map +1 -1
  473. package/dist/utils/env-exposure.d.ts +3 -0
  474. package/dist/utils/env-exposure.d.ts.map +1 -0
  475. package/dist/utils/file-exclusion.d.ts.map +1 -1
  476. package/dist/utils/interactive-prompt.d.ts +1 -1
  477. package/dist/utils/interactive-prompt.d.ts.map +1 -1
  478. package/dist/utils/json-text-extractor.d.ts +17 -0
  479. package/dist/utils/json-text-extractor.d.ts.map +1 -0
  480. package/dist/utils/sandbox.d.ts +10 -0
  481. package/dist/utils/sandbox.d.ts.map +1 -1
  482. package/dist/utils/script-memory-ops.d.ts +21 -0
  483. package/dist/utils/script-memory-ops.d.ts.map +1 -0
  484. package/dist/utils/template-context.d.ts +8 -0
  485. package/dist/utils/template-context.d.ts.map +1 -0
  486. package/dist/utils/tracer-init.d.ts.map +1 -1
  487. package/dist/utils/workspace-manager.d.ts +118 -0
  488. package/dist/utils/workspace-manager.d.ts.map +1 -0
  489. package/dist/utils/worktree-cleanup.d.ts +33 -0
  490. package/dist/utils/worktree-cleanup.d.ts.map +1 -0
  491. package/dist/utils/worktree-manager.d.ts +153 -0
  492. package/dist/utils/worktree-manager.d.ts.map +1 -0
  493. package/dist/webhook-server.d.ts +3 -3
  494. package/dist/webhook-server.d.ts.map +1 -1
  495. package/dist/workflow-executor.d.ts +81 -0
  496. package/dist/workflow-executor.d.ts.map +1 -0
  497. package/dist/workflow-registry.d.ts +79 -0
  498. package/dist/workflow-registry.d.ts.map +1 -0
  499. package/package.json +12 -5
  500. package/dist/output/traces/run-2025-10-22T18-22-56-873Z.ndjson +0 -218
  501. package/dist/sdk/check-execution-engine-2YYKUUSH.mjs +0 -11
  502. package/dist/sdk/check-execution-engine-6QJXYYON.mjs +0 -11
  503. package/dist/sdk/check-execution-engine-PJZ4ZOKG.mjs +0 -11
  504. package/dist/sdk/chunk-33QVZ2D4.mjs +0 -316
  505. package/dist/sdk/chunk-33QVZ2D4.mjs.map +0 -1
  506. package/dist/sdk/chunk-B5QBV2QJ.mjs +0 -752
  507. package/dist/sdk/chunk-B5QBV2QJ.mjs.map +0 -1
  508. package/dist/sdk/chunk-BVFNRCHT.mjs +0 -14129
  509. package/dist/sdk/chunk-BVFNRCHT.mjs.map +0 -1
  510. package/dist/sdk/chunk-KWZW23FG.mjs +0 -14129
  511. package/dist/sdk/chunk-KWZW23FG.mjs.map +0 -1
  512. package/dist/sdk/chunk-O4RP4BRH.mjs +0 -14092
  513. package/dist/sdk/chunk-O4RP4BRH.mjs.map +0 -1
  514. package/dist/sdk/chunk-TUTOLSFV.mjs.map +0 -1
  515. package/dist/sdk/chunk-U5D2LY66.mjs +0 -245
  516. package/dist/sdk/chunk-U5D2LY66.mjs.map +0 -1
  517. package/dist/sdk/chunk-U7X54EMV.mjs +0 -331
  518. package/dist/sdk/chunk-U7X54EMV.mjs.map +0 -1
  519. package/dist/sdk/config-merger-TWUBWFC2.mjs +0 -8
  520. package/dist/sdk/mermaid-telemetry-SN6A2TKW.mjs +0 -61
  521. package/dist/sdk/mermaid-telemetry-SN6A2TKW.mjs.map +0 -1
  522. package/dist/sdk/mermaid-telemetry-YCTIG76M.mjs +0 -61
  523. package/dist/sdk/mermaid-telemetry-YCTIG76M.mjs.map +0 -1
  524. package/dist/traces/run-2025-10-22T18-22-56-873Z.ndjson +0 -218
  525. /package/dist/sdk/{check-execution-engine-2YYKUUSH.mjs.map → check-provider-registry-534KL5HT.mjs.map} +0 -0
  526. /package/dist/sdk/{check-execution-engine-6QJXYYON.mjs.map → command-executor-TYUV6HUS.mjs.map} +0 -0
  527. /package/dist/sdk/{check-execution-engine-PJZ4ZOKG.mjs.map → config-YNC2EOOT.mjs.map} +0 -0
  528. /package/dist/sdk/{config-merger-TWUBWFC2.mjs.map → config-merger-PX3WIT57.mjs.map} +0 -0
  529. /package/dist/sdk/{liquid-extensions-KVL4MKRH.mjs.map → failure-condition-evaluator-YGTF2GHG.mjs.map} +0 -0
  530. /package/dist/sdk/{tracer-init-WC75N5NW.mjs.map → liquid-extensions-PKWCKK7E.mjs.map} +0 -0
@@ -0,0 +1,157 @@
1
+ import {
2
+ init_logger,
3
+ logger
4
+ } from "./chunk-AGIZJ4UZ.mjs";
5
+ import {
6
+ __esm
7
+ } from "./chunk-WMJKH4XE.mjs";
8
+
9
+ // src/slack/prompt-state.ts
10
+ function getPromptStateManager(ttlMs) {
11
+ if (!__promptState) __promptState = new PromptStateManager(ttlMs);
12
+ return __promptState;
13
+ }
14
+ function resetPromptStateManager() {
15
+ __promptState = void 0;
16
+ }
17
+ var PromptStateManager, __promptState;
18
+ var init_prompt_state = __esm({
19
+ "src/slack/prompt-state.ts"() {
20
+ init_logger();
21
+ PromptStateManager = class {
22
+ waiting = /* @__PURE__ */ new Map();
23
+ // key: `${channel}:${threadTs}`
24
+ ttlMs;
25
+ timer;
26
+ firstMessage = /* @__PURE__ */ new Map();
27
+ summaryTs = /* @__PURE__ */ new Map();
28
+ // key: threadKey -> group -> ts
29
+ constructor(ttlMs = 60 * 60 * 1e3) {
30
+ this.ttlMs = ttlMs;
31
+ this.startCleanup();
32
+ }
33
+ key(channel, threadTs) {
34
+ return `${channel}:${threadTs}`;
35
+ }
36
+ setWaiting(channel, threadTs, info) {
37
+ const key = this.key(channel, threadTs);
38
+ const value = { ...info, timestamp: Date.now(), channel, threadTs };
39
+ this.waiting.set(key, value);
40
+ try {
41
+ logger.info(
42
+ `[prompt-state] waiting set for ${key} (check=${info.checkName}, prompt="${info.prompt.substring(
43
+ 0,
44
+ 60
45
+ )}\u2026")`
46
+ );
47
+ } catch {
48
+ }
49
+ }
50
+ getWaiting(channel, threadTs) {
51
+ const key = this.key(channel, threadTs);
52
+ const info = this.waiting.get(key);
53
+ if (!info) return void 0;
54
+ const age = Date.now() - info.timestamp;
55
+ if (age > this.ttlMs) {
56
+ this.waiting.delete(key);
57
+ try {
58
+ logger.warn(`[prompt-state] expired ${key} (age=${Math.round(age / 1e3)}s)`);
59
+ } catch {
60
+ }
61
+ return void 0;
62
+ }
63
+ return info;
64
+ }
65
+ clear(channel, threadTs) {
66
+ const key = this.key(channel, threadTs);
67
+ const had = this.waiting.delete(key);
68
+ if (had) {
69
+ try {
70
+ logger.info(`[prompt-state] cleared ${key}`);
71
+ } catch {
72
+ }
73
+ }
74
+ return had;
75
+ }
76
+ /** Merge updates into an existing waiting entry */
77
+ update(channel, threadTs, patch) {
78
+ const key = this.key(channel, threadTs);
79
+ const prev = this.waiting.get(key);
80
+ if (!prev) return void 0;
81
+ const next = { ...prev, ...patch };
82
+ this.waiting.set(key, next);
83
+ try {
84
+ if (patch.snapshotPath) {
85
+ logger.info(`[prompt-state] snapshotPath set for ${key}`);
86
+ }
87
+ } catch {
88
+ }
89
+ return next;
90
+ }
91
+ // First message capture helpers
92
+ setFirstMessage(channel, threadTs, text) {
93
+ const key = this.key(channel, threadTs);
94
+ if (!text || !text.trim()) return;
95
+ const existing = this.firstMessage.get(key);
96
+ if (!existing || existing.consumed) {
97
+ this.firstMessage.set(key, { text, consumed: false });
98
+ }
99
+ }
100
+ consumeFirstMessage(channel, threadTs) {
101
+ const key = this.key(channel, threadTs);
102
+ const entry = this.firstMessage.get(key);
103
+ if (entry && !entry.consumed) {
104
+ entry.consumed = true;
105
+ this.firstMessage.set(key, entry);
106
+ return entry.text;
107
+ }
108
+ return void 0;
109
+ }
110
+ hasUnconsumedFirstMessage(channel, threadTs) {
111
+ const key = this.key(channel, threadTs);
112
+ const e = this.firstMessage.get(key);
113
+ return !!(e && !e.consumed && e.text && e.text.trim());
114
+ }
115
+ startCleanup(intervalMs = 5 * 60 * 1e3) {
116
+ if (this.timer) clearInterval(this.timer);
117
+ this.timer = setInterval(() => this.cleanup(), intervalMs);
118
+ if (this.timer.unref) this.timer.unref();
119
+ }
120
+ cleanup() {
121
+ const now = Date.now();
122
+ let removed = 0;
123
+ for (const [key, info] of this.waiting.entries()) {
124
+ if (now - info.timestamp > this.ttlMs) {
125
+ this.waiting.delete(key);
126
+ removed++;
127
+ }
128
+ }
129
+ for (const [key] of this.firstMessage.entries()) {
130
+ const waitingInfo = this.waiting.get(key);
131
+ if (!waitingInfo) {
132
+ const entry = this.firstMessage.get(key);
133
+ if (entry?.consumed) {
134
+ this.firstMessage.delete(key);
135
+ removed++;
136
+ }
137
+ }
138
+ }
139
+ if (removed) {
140
+ try {
141
+ logger.info(`[prompt-state] cleanup removed ${removed} entries`);
142
+ } catch {
143
+ }
144
+ }
145
+ return removed;
146
+ }
147
+ };
148
+ }
149
+ });
150
+
151
+ export {
152
+ PromptStateManager,
153
+ getPromptStateManager,
154
+ resetPromptStateManager,
155
+ init_prompt_state
156
+ };
157
+ //# sourceMappingURL=chunk-HTOKWMPO.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/slack/prompt-state.ts"],"sourcesContent":["import { logger } from '../logger';\n\nexport interface WaitingPromptInfo {\n checkName: string;\n prompt: string;\n timestamp: number;\n channel: string;\n threadTs: string;\n promptMessageTs?: string;\n snapshotPath?: string;\n promptsPosted?: number; // how many prompts we posted into this thread\n context?: Record<string, unknown>;\n}\n\nexport class PromptStateManager {\n private waiting = new Map<string, WaitingPromptInfo>(); // key: `${channel}:${threadTs}`\n private ttlMs: number;\n private timer?: NodeJS.Timeout;\n private firstMessage = new Map<string, { text: string; consumed: boolean }>();\n private summaryTs = new Map<string, Map<string, string>>(); // key: threadKey -> group -> ts\n\n constructor(ttlMs: number = 60 * 60 * 1000) {\n this.ttlMs = ttlMs;\n this.startCleanup();\n }\n\n private key(channel: string, threadTs: string): string {\n return `${channel}:${threadTs}`;\n }\n\n setWaiting(\n channel: string,\n threadTs: string,\n info: Omit<WaitingPromptInfo, 'timestamp' | 'channel' | 'threadTs'>\n ) {\n const key = this.key(channel, threadTs);\n const value: WaitingPromptInfo = { ...info, timestamp: Date.now(), channel, threadTs };\n this.waiting.set(key, value);\n try {\n logger.info(\n `[prompt-state] waiting set for ${key} (check=${info.checkName}, prompt=\"${info.prompt.substring(\n 0,\n 60\n )}…\")`\n );\n } catch {}\n }\n\n getWaiting(channel: string, threadTs: string): WaitingPromptInfo | undefined {\n const key = this.key(channel, threadTs);\n const info = this.waiting.get(key);\n if (!info) return undefined;\n const age = Date.now() - info.timestamp;\n if (age > this.ttlMs) {\n this.waiting.delete(key);\n try {\n logger.warn(`[prompt-state] expired ${key} (age=${Math.round(age / 1000)}s)`);\n } catch {}\n return undefined;\n }\n return info;\n }\n\n clear(channel: string, threadTs: string): boolean {\n const key = this.key(channel, threadTs);\n const had = this.waiting.delete(key);\n if (had) {\n try {\n logger.info(`[prompt-state] cleared ${key}`);\n } catch {}\n }\n return had;\n }\n\n /** Merge updates into an existing waiting entry */\n update(\n channel: string,\n threadTs: string,\n patch: Partial<WaitingPromptInfo>\n ): WaitingPromptInfo | undefined {\n const key = this.key(channel, threadTs);\n const prev = this.waiting.get(key);\n if (!prev) return undefined;\n const next = { ...prev, ...patch } as WaitingPromptInfo;\n this.waiting.set(key, next);\n try {\n if (patch.snapshotPath) {\n logger.info(`[prompt-state] snapshotPath set for ${key}`);\n }\n } catch {}\n return next;\n }\n\n // First message capture helpers\n setFirstMessage(channel: string, threadTs: string, text: string): void {\n const key = this.key(channel, threadTs);\n if (!text || !text.trim()) return;\n const existing = this.firstMessage.get(key);\n // Only set if: no entry exists OR the existing entry was already consumed\n // This allows new messages to be captured after a resume cycle\n if (!existing || existing.consumed) {\n this.firstMessage.set(key, { text, consumed: false });\n }\n }\n consumeFirstMessage(channel: string, threadTs: string): string | undefined {\n const key = this.key(channel, threadTs);\n const entry = this.firstMessage.get(key);\n if (entry && !entry.consumed) {\n entry.consumed = true;\n this.firstMessage.set(key, entry);\n return entry.text;\n }\n return undefined;\n }\n hasUnconsumedFirstMessage(channel: string, threadTs: string): boolean {\n const key = this.key(channel, threadTs);\n const e = this.firstMessage.get(key);\n return !!(e && !e.consumed && e.text && e.text.trim());\n }\n\n private startCleanup(intervalMs: number = 5 * 60 * 1000) {\n if (this.timer) clearInterval(this.timer);\n this.timer = setInterval(() => this.cleanup(), intervalMs);\n if (this.timer.unref) this.timer.unref();\n }\n\n private cleanup(): number {\n const now = Date.now();\n let removed = 0;\n for (const [key, info] of this.waiting.entries()) {\n if (now - info.timestamp > this.ttlMs) {\n this.waiting.delete(key);\n removed++;\n }\n }\n // Also clean up stale firstMessage entries (consumed entries older than TTL)\n // Keep unconsumed entries to avoid losing user messages\n for (const [key] of this.firstMessage.entries()) {\n const waitingInfo = this.waiting.get(key);\n // If no corresponding waiting entry exists and the firstMessage was consumed,\n // the conversation is likely complete - safe to remove\n if (!waitingInfo) {\n const entry = this.firstMessage.get(key);\n if (entry?.consumed) {\n this.firstMessage.delete(key);\n removed++;\n }\n }\n }\n if (removed) {\n try {\n logger.info(`[prompt-state] cleanup removed ${removed} entries`);\n } catch {}\n }\n return removed;\n }\n}\n\nlet __promptState: PromptStateManager | undefined;\nexport function getPromptStateManager(ttlMs?: number): PromptStateManager {\n if (!__promptState) __promptState = new PromptStateManager(ttlMs);\n return __promptState;\n}\n\nexport function resetPromptStateManager(): void {\n __promptState = undefined;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,197 @@
1
+ import {
2
+ __esm,
3
+ __export
4
+ } from "./chunk-WMJKH4XE.mjs";
5
+
6
+ // src/session-registry.ts
7
+ var session_registry_exports = {};
8
+ __export(session_registry_exports, {
9
+ SessionRegistry: () => SessionRegistry
10
+ });
11
+ var SessionRegistry;
12
+ var init_session_registry = __esm({
13
+ "src/session-registry.ts"() {
14
+ SessionRegistry = class _SessionRegistry {
15
+ static instance;
16
+ sessions = /* @__PURE__ */ new Map();
17
+ exitHandlerRegistered = false;
18
+ constructor() {
19
+ this.registerExitHandlers();
20
+ }
21
+ /**
22
+ * Get the singleton instance of SessionRegistry
23
+ */
24
+ static getInstance() {
25
+ if (!_SessionRegistry.instance) {
26
+ _SessionRegistry.instance = new _SessionRegistry();
27
+ }
28
+ return _SessionRegistry.instance;
29
+ }
30
+ /**
31
+ * Register a ProbeAgent session
32
+ */
33
+ registerSession(sessionId, agent) {
34
+ console.error(`\u{1F504} Registering AI session: ${sessionId}`);
35
+ this.sessions.set(sessionId, agent);
36
+ }
37
+ /**
38
+ * Get an existing ProbeAgent session
39
+ */
40
+ getSession(sessionId) {
41
+ const agent = this.sessions.get(sessionId);
42
+ if (agent) {
43
+ console.error(`\u267B\uFE0F Reusing AI session: ${sessionId}`);
44
+ }
45
+ return agent;
46
+ }
47
+ /**
48
+ * Remove a session from the registry
49
+ */
50
+ unregisterSession(sessionId) {
51
+ if (this.sessions.has(sessionId)) {
52
+ console.error(`\u{1F5D1}\uFE0F Unregistering AI session: ${sessionId}`);
53
+ const agent = this.sessions.get(sessionId);
54
+ this.sessions.delete(sessionId);
55
+ if (agent && typeof agent.cleanup === "function") {
56
+ try {
57
+ agent.cleanup();
58
+ } catch (error) {
59
+ console.error(`\u26A0\uFE0F Warning: Failed to cleanup ProbeAgent: ${error}`);
60
+ }
61
+ }
62
+ }
63
+ }
64
+ /**
65
+ * Clear all sessions (useful for cleanup)
66
+ */
67
+ clearAllSessions() {
68
+ console.error(`\u{1F9F9} Clearing all AI sessions (${this.sessions.size} sessions)`);
69
+ for (const [, agent] of this.sessions.entries()) {
70
+ if (agent && typeof agent.cleanup === "function") {
71
+ try {
72
+ agent.cleanup();
73
+ } catch {
74
+ }
75
+ }
76
+ }
77
+ this.sessions.clear();
78
+ }
79
+ /**
80
+ * Get all active session IDs
81
+ */
82
+ getActiveSessionIds() {
83
+ return Array.from(this.sessions.keys());
84
+ }
85
+ /**
86
+ * Check if a session exists
87
+ */
88
+ hasSession(sessionId) {
89
+ return this.sessions.has(sessionId);
90
+ }
91
+ /**
92
+ * Clone a session with a new session ID using ProbeAgent's official clone() method
93
+ * This uses ProbeAgent's built-in cloning which automatically handles:
94
+ * - Intelligent filtering of internal messages (schema reminders, tool prompts, etc.)
95
+ * - Preserving system message for cache efficiency
96
+ * - Deep copying conversation history
97
+ * - Copying agent configuration
98
+ */
99
+ async cloneSession(sourceSessionId, newSessionId, checkName) {
100
+ const sourceAgent = this.sessions.get(sourceSessionId);
101
+ if (!sourceAgent) {
102
+ console.error(`\u26A0\uFE0F Cannot clone session: ${sourceSessionId} not found`);
103
+ return void 0;
104
+ }
105
+ try {
106
+ const clonedAgent = sourceAgent.clone({
107
+ sessionId: newSessionId,
108
+ stripInternalMessages: true,
109
+ // Remove schema reminders, tool prompts, etc.
110
+ keepSystemMessage: true,
111
+ // Keep for cache efficiency
112
+ deepCopy: true
113
+ // Safe deep copy of history
114
+ });
115
+ if (sourceAgent.debug && checkName) {
116
+ try {
117
+ const { initializeTracer } = await import("./tracer-init-GSLPPLCD.mjs");
118
+ const tracerResult = await initializeTracer(newSessionId, checkName);
119
+ if (tracerResult) {
120
+ clonedAgent.tracer = tracerResult.tracer;
121
+ clonedAgent._telemetryConfig = tracerResult.telemetryConfig;
122
+ clonedAgent._traceFilePath = tracerResult.filePath;
123
+ }
124
+ } catch (traceError) {
125
+ console.error(
126
+ "\u26A0\uFE0F Warning: Failed to initialize tracing for cloned session:",
127
+ traceError
128
+ );
129
+ }
130
+ }
131
+ if (sourceAgent._mcpInitialized && typeof clonedAgent.initialize === "function") {
132
+ try {
133
+ await clonedAgent.initialize();
134
+ console.error(`\u{1F527} Initialized MCP tools for cloned session`);
135
+ } catch (initError) {
136
+ console.error(`\u26A0\uFE0F Warning: Failed to initialize cloned agent: ${initError}`);
137
+ }
138
+ }
139
+ const historyLength = clonedAgent.history?.length || 0;
140
+ console.error(
141
+ `\u{1F4CB} Cloned session ${sourceSessionId} \u2192 ${newSessionId} using ProbeAgent.clone() (${historyLength} messages, internal messages filtered)`
142
+ );
143
+ this.registerSession(newSessionId, clonedAgent);
144
+ return clonedAgent;
145
+ } catch (error) {
146
+ console.error(`\u26A0\uFE0F Failed to clone session ${sourceSessionId}:`, error);
147
+ return void 0;
148
+ }
149
+ }
150
+ /**
151
+ * Register process exit handlers to cleanup sessions on exit
152
+ */
153
+ registerExitHandlers() {
154
+ if (this.exitHandlerRegistered) {
155
+ return;
156
+ }
157
+ const cleanupAndExit = (signal) => {
158
+ if (this.sessions.size > 0) {
159
+ console.error(`
160
+ \u{1F9F9} [${signal}] Cleaning up ${this.sessions.size} active AI sessions...`);
161
+ this.clearAllSessions();
162
+ }
163
+ };
164
+ process.on("exit", () => {
165
+ if (this.sessions.size > 0) {
166
+ console.error(`\u{1F9F9} [exit] Cleaning up ${this.sessions.size} active AI sessions...`);
167
+ for (const [, agent] of this.sessions.entries()) {
168
+ if (agent && typeof agent.cleanup === "function") {
169
+ try {
170
+ agent.cleanup();
171
+ } catch {
172
+ }
173
+ }
174
+ }
175
+ this.sessions.clear();
176
+ }
177
+ });
178
+ process.on("SIGINT", () => {
179
+ cleanupAndExit("SIGINT");
180
+ process.exit(0);
181
+ });
182
+ process.on("SIGTERM", () => {
183
+ cleanupAndExit("SIGTERM");
184
+ process.exit(0);
185
+ });
186
+ this.exitHandlerRegistered = true;
187
+ }
188
+ };
189
+ }
190
+ });
191
+
192
+ export {
193
+ SessionRegistry,
194
+ session_registry_exports,
195
+ init_session_registry
196
+ };
197
+ //# sourceMappingURL=chunk-NAW3DB3I.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/session-registry.ts"],"sourcesContent":["import { ProbeAgent } from '@probelabs/probe';\n\n/**\n * Extended ProbeAgent interface that includes tracing properties\n */\ninterface TracedProbeAgent extends ProbeAgent {\n tracer?: any; // AppTracer removed from probe\n _telemetryConfig?: any; // TelemetryConfig removed from probe\n _traceFilePath?: string;\n}\n\n/**\n * Registry to manage active ProbeAgent sessions for session reuse\n */\nexport class SessionRegistry {\n private static instance: SessionRegistry;\n private sessions: Map<string, TracedProbeAgent> = new Map();\n private exitHandlerRegistered = false;\n\n private constructor() {\n // Register process exit handlers to cleanup sessions\n this.registerExitHandlers();\n }\n\n /**\n * Get the singleton instance of SessionRegistry\n */\n public static getInstance(): SessionRegistry {\n if (!SessionRegistry.instance) {\n SessionRegistry.instance = new SessionRegistry();\n }\n return SessionRegistry.instance;\n }\n\n /**\n * Register a ProbeAgent session\n */\n public registerSession(sessionId: string, agent: TracedProbeAgent): void {\n console.error(`🔄 Registering AI session: ${sessionId}`);\n this.sessions.set(sessionId, agent);\n }\n\n /**\n * Get an existing ProbeAgent session\n */\n public getSession(sessionId: string): TracedProbeAgent | undefined {\n const agent = this.sessions.get(sessionId);\n if (agent) {\n console.error(`♻️ Reusing AI session: ${sessionId}`);\n }\n return agent;\n }\n\n /**\n * Remove a session from the registry\n */\n public unregisterSession(sessionId: string): void {\n if (this.sessions.has(sessionId)) {\n console.error(`🗑️ Unregistering AI session: ${sessionId}`);\n const agent = this.sessions.get(sessionId);\n this.sessions.delete(sessionId);\n\n // Cleanup the ProbeAgent instance to prevent hanging processes\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (agent && typeof (agent as any).cleanup === 'function') {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (agent as any).cleanup();\n } catch (error) {\n console.error(`⚠️ Warning: Failed to cleanup ProbeAgent: ${error}`);\n }\n }\n }\n }\n\n /**\n * Clear all sessions (useful for cleanup)\n */\n public clearAllSessions(): void {\n console.error(`🧹 Clearing all AI sessions (${this.sessions.size} sessions)`);\n\n // Cleanup each ProbeAgent instance before clearing\n for (const [, agent] of this.sessions.entries()) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (agent && typeof (agent as any).cleanup === 'function') {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (agent as any).cleanup();\n } catch {\n // Silent fail during bulk cleanup\n }\n }\n }\n\n this.sessions.clear();\n }\n\n /**\n * Get all active session IDs\n */\n public getActiveSessionIds(): string[] {\n return Array.from(this.sessions.keys());\n }\n\n /**\n * Check if a session exists\n */\n public hasSession(sessionId: string): boolean {\n return this.sessions.has(sessionId);\n }\n\n /**\n * Clone a session with a new session ID using ProbeAgent's official clone() method\n * This uses ProbeAgent's built-in cloning which automatically handles:\n * - Intelligent filtering of internal messages (schema reminders, tool prompts, etc.)\n * - Preserving system message for cache efficiency\n * - Deep copying conversation history\n * - Copying agent configuration\n */\n public async cloneSession(\n sourceSessionId: string,\n newSessionId: string,\n checkName?: string\n ): Promise<ProbeAgent | undefined> {\n const sourceAgent = this.sessions.get(sourceSessionId);\n if (!sourceAgent) {\n console.error(`⚠️ Cannot clone session: ${sourceSessionId} not found`);\n return undefined;\n }\n\n try {\n // Use ProbeAgent's official clone() method with options\n // This handles intelligent message filtering automatically\n const clonedAgent = (sourceAgent as any).clone({\n sessionId: newSessionId,\n stripInternalMessages: true, // Remove schema reminders, tool prompts, etc.\n keepSystemMessage: true, // Keep for cache efficiency\n deepCopy: true, // Safe deep copy of history\n }) as TracedProbeAgent;\n\n // Set up tracing for cloned session if debug mode is enabled\n if ((sourceAgent as any).debug && checkName) {\n try {\n const { initializeTracer } = await import('./utils/tracer-init');\n const tracerResult = await initializeTracer(newSessionId, checkName);\n if (tracerResult) {\n clonedAgent.tracer = tracerResult.tracer;\n // Store telemetry config and trace file path for proper shutdown\n clonedAgent._telemetryConfig = tracerResult.telemetryConfig;\n clonedAgent._traceFilePath = tracerResult.filePath;\n }\n } catch (traceError) {\n console.error(\n '⚠️ Warning: Failed to initialize tracing for cloned session:',\n traceError\n );\n }\n }\n\n // Initialize MCP tools if the source agent had them initialized\n if (\n (sourceAgent as any)._mcpInitialized &&\n typeof (clonedAgent as any).initialize === 'function'\n ) {\n try {\n await (clonedAgent as any).initialize();\n console.error(`🔧 Initialized MCP tools for cloned session`);\n } catch (initError) {\n console.error(`⚠️ Warning: Failed to initialize cloned agent: ${initError}`);\n }\n }\n\n // Get history length for logging\n const historyLength = (clonedAgent as any).history?.length || 0;\n\n console.error(\n `📋 Cloned session ${sourceSessionId} → ${newSessionId} using ProbeAgent.clone() (${historyLength} messages, internal messages filtered)`\n );\n\n // Register the cloned session\n this.registerSession(newSessionId, clonedAgent);\n\n return clonedAgent;\n } catch (error) {\n console.error(`⚠️ Failed to clone session ${sourceSessionId}:`, error);\n return undefined;\n }\n }\n\n /**\n * Register process exit handlers to cleanup sessions on exit\n */\n private registerExitHandlers(): void {\n if (this.exitHandlerRegistered) {\n return;\n }\n\n const cleanupAndExit = (signal: string) => {\n if (this.sessions.size > 0) {\n console.error(`\\n🧹 [${signal}] Cleaning up ${this.sessions.size} active AI sessions...`);\n this.clearAllSessions();\n }\n };\n\n // Handle normal process exit\n process.on('exit', () => {\n if (this.sessions.size > 0) {\n console.error(`🧹 [exit] Cleaning up ${this.sessions.size} active AI sessions...`);\n // Note: async operations won't complete here, but sync cleanup methods will\n for (const [, agent] of this.sessions.entries()) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (agent && typeof (agent as any).cleanup === 'function') {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (agent as any).cleanup();\n } catch {\n // Silent fail on exit\n }\n }\n }\n this.sessions.clear();\n }\n });\n\n // Handle SIGINT (Ctrl+C)\n process.on('SIGINT', () => {\n cleanupAndExit('SIGINT');\n process.exit(0);\n });\n\n // Handle SIGTERM\n process.on('SIGTERM', () => {\n cleanupAndExit('SIGTERM');\n process.exit(0);\n });\n\n this.exitHandlerRegistered = true;\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,274 @@
1
+ import {
2
+ __esm,
3
+ __export
4
+ } from "./chunk-WMJKH4XE.mjs";
5
+
6
+ // src/utils/config-merger.ts
7
+ var config_merger_exports = {};
8
+ __export(config_merger_exports, {
9
+ ConfigMerger: () => ConfigMerger
10
+ });
11
+ var ConfigMerger;
12
+ var init_config_merger = __esm({
13
+ "src/utils/config-merger.ts"() {
14
+ ConfigMerger = class {
15
+ /**
16
+ * Merge two configurations with child overriding parent
17
+ * @param parent - Base configuration
18
+ * @param child - Configuration to merge on top
19
+ * @returns Merged configuration
20
+ */
21
+ merge(parent, child) {
22
+ const result = this.deepCopy(parent);
23
+ if (child.version !== void 0) result.version = child.version;
24
+ if (child.ai_model !== void 0) result.ai_model = child.ai_model;
25
+ if (child.ai_provider !== void 0) result.ai_provider = child.ai_provider;
26
+ if (child.max_parallelism !== void 0) result.max_parallelism = child.max_parallelism;
27
+ if (child.fail_fast !== void 0) result.fail_fast = child.fail_fast;
28
+ if (child.fail_if !== void 0) result.fail_if = child.fail_if;
29
+ if (child.failure_conditions !== void 0)
30
+ result.failure_conditions = child.failure_conditions;
31
+ if (child.env) {
32
+ result.env = this.mergeObjects(parent.env || {}, child.env);
33
+ }
34
+ if (child.output) {
35
+ result.output = this.mergeOutputConfig(parent.output, child.output);
36
+ }
37
+ if (child.checks) {
38
+ result.checks = this.mergeChecks(parent.checks || {}, child.checks);
39
+ }
40
+ if (child.steps) {
41
+ const parentSteps = parent.steps || {};
42
+ const childSteps = child.steps || {};
43
+ result.steps = this.mergeChecks(parentSteps, childSteps);
44
+ }
45
+ if (child.tools) {
46
+ result.tools = this.mergeObjects(parent.tools || {}, child.tools);
47
+ }
48
+ if (child.imports) {
49
+ const parentImports = parent.imports || [];
50
+ const childImports = child.imports || [];
51
+ result.imports = [.../* @__PURE__ */ new Set([...parentImports, ...childImports])];
52
+ }
53
+ return result;
54
+ }
55
+ /**
56
+ * Deep copy an object
57
+ */
58
+ deepCopy(obj) {
59
+ if (obj === null || obj === void 0) {
60
+ return obj;
61
+ }
62
+ if (obj instanceof Date) {
63
+ return new Date(obj.getTime());
64
+ }
65
+ if (obj instanceof Array) {
66
+ const copy = [];
67
+ for (const item of obj) {
68
+ copy.push(this.deepCopy(item));
69
+ }
70
+ return copy;
71
+ }
72
+ if (obj instanceof Object) {
73
+ const copy = {};
74
+ for (const key in obj) {
75
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
76
+ copy[key] = this.deepCopy(obj[key]);
77
+ }
78
+ }
79
+ return copy;
80
+ }
81
+ return obj;
82
+ }
83
+ /**
84
+ * Merge two objects (child overrides parent)
85
+ */
86
+ mergeObjects(parent, child) {
87
+ const result = { ...parent };
88
+ for (const key in child) {
89
+ if (Object.prototype.hasOwnProperty.call(child, key)) {
90
+ const parentValue = parent[key];
91
+ const childValue = child[key];
92
+ if (childValue === null || childValue === void 0) {
93
+ delete result[key];
94
+ } else if (typeof parentValue === "object" && typeof childValue === "object" && !Array.isArray(parentValue) && !Array.isArray(childValue) && parentValue !== null && childValue !== null) {
95
+ result[key] = this.mergeObjects(
96
+ parentValue,
97
+ childValue
98
+ );
99
+ } else {
100
+ result[key] = this.deepCopy(childValue);
101
+ }
102
+ }
103
+ }
104
+ return result;
105
+ }
106
+ /**
107
+ * Merge output configurations
108
+ */
109
+ mergeOutputConfig(parent, child) {
110
+ if (!child) return parent;
111
+ if (!parent) return child;
112
+ const result = this.deepCopy(parent);
113
+ if (child.pr_comment) {
114
+ result.pr_comment = this.mergeObjects(
115
+ parent.pr_comment || {},
116
+ child.pr_comment
117
+ );
118
+ }
119
+ if (child.file_comment !== void 0) {
120
+ if (child.file_comment === null) {
121
+ delete result.file_comment;
122
+ } else {
123
+ result.file_comment = this.mergeObjects(
124
+ parent.file_comment || {},
125
+ child.file_comment
126
+ );
127
+ }
128
+ }
129
+ if (child.github_checks !== void 0) {
130
+ if (child.github_checks === null) {
131
+ delete result.github_checks;
132
+ } else {
133
+ result.github_checks = this.mergeObjects(
134
+ parent.github_checks || {},
135
+ child.github_checks
136
+ );
137
+ }
138
+ }
139
+ return result;
140
+ }
141
+ /**
142
+ * Merge check configurations with special handling
143
+ */
144
+ mergeChecks(parent, child) {
145
+ const result = {};
146
+ for (const [checkName, checkConfig] of Object.entries(parent)) {
147
+ result[checkName] = this.deepCopy(checkConfig);
148
+ }
149
+ for (const [checkName, childConfig] of Object.entries(child)) {
150
+ const parentConfig = parent[checkName];
151
+ if (!parentConfig) {
152
+ const copiedConfig = this.deepCopy(childConfig);
153
+ if (!copiedConfig.type) {
154
+ copiedConfig.type = "ai";
155
+ }
156
+ if (!copiedConfig.on) {
157
+ copiedConfig.on = ["manual"];
158
+ }
159
+ if (copiedConfig.appendPrompt !== void 0) {
160
+ if (!copiedConfig.prompt) {
161
+ copiedConfig.prompt = copiedConfig.appendPrompt;
162
+ } else {
163
+ copiedConfig.prompt = copiedConfig.prompt + "\n\n" + copiedConfig.appendPrompt;
164
+ }
165
+ delete copiedConfig.appendPrompt;
166
+ }
167
+ result[checkName] = copiedConfig;
168
+ } else {
169
+ result[checkName] = this.mergeCheckConfig(parentConfig, childConfig);
170
+ }
171
+ }
172
+ return result;
173
+ }
174
+ /**
175
+ * Merge individual check configurations
176
+ */
177
+ mergeCheckConfig(parent, child) {
178
+ const result = this.deepCopy(parent);
179
+ if (child.type !== void 0) result.type = child.type;
180
+ if (!result.type) {
181
+ result.type = "ai";
182
+ }
183
+ if (child.prompt !== void 0) result.prompt = child.prompt;
184
+ if (child.appendPrompt !== void 0) {
185
+ if (result.prompt) {
186
+ result.prompt = result.prompt + "\n\n" + child.appendPrompt;
187
+ } else {
188
+ result.prompt = child.appendPrompt;
189
+ }
190
+ delete result.appendPrompt;
191
+ }
192
+ if (child.exec !== void 0) result.exec = child.exec;
193
+ if (child.stdin !== void 0) result.stdin = child.stdin;
194
+ if (child.url !== void 0) result.url = child.url;
195
+ if (child.focus !== void 0) result.focus = child.focus;
196
+ if (child.command !== void 0) result.command = child.command;
197
+ if (child.ai_model !== void 0) result.ai_model = child.ai_model;
198
+ if (child.ai_provider !== void 0) result.ai_provider = child.ai_provider;
199
+ if (child.group !== void 0) result.group = child.group;
200
+ if (child.schema !== void 0) result.schema = child.schema;
201
+ if (child.if !== void 0) result.if = child.if;
202
+ if (child.reuse_ai_session !== void 0) result.reuse_ai_session = child.reuse_ai_session;
203
+ if (child.fail_if !== void 0) result.fail_if = child.fail_if;
204
+ if (child.failure_conditions !== void 0)
205
+ result.failure_conditions = child.failure_conditions;
206
+ if (child.on !== void 0) {
207
+ if (Array.isArray(child.on) && child.on.length === 0) {
208
+ result.on = [];
209
+ } else {
210
+ result.on = [...child.on];
211
+ }
212
+ }
213
+ if (!result.on) {
214
+ result.on = ["manual"];
215
+ }
216
+ if (child.triggers !== void 0) {
217
+ result.triggers = child.triggers ? [...child.triggers] : void 0;
218
+ }
219
+ if (child.depends_on !== void 0) {
220
+ result.depends_on = child.depends_on ? [...child.depends_on] : void 0;
221
+ }
222
+ if (child.env) {
223
+ result.env = this.mergeObjects(
224
+ parent.env || {},
225
+ child.env
226
+ );
227
+ }
228
+ if (child.ai) {
229
+ result.ai = this.mergeObjects(
230
+ parent.ai || {},
231
+ child.ai
232
+ );
233
+ }
234
+ if (child.template) {
235
+ result.template = this.mergeObjects(
236
+ parent.template || {},
237
+ child.template
238
+ );
239
+ }
240
+ return result;
241
+ }
242
+ /**
243
+ * Check if a check is disabled (has empty 'on' array)
244
+ */
245
+ isCheckDisabled(check) {
246
+ return Array.isArray(check.on) && check.on.length === 0;
247
+ }
248
+ /**
249
+ * Remove disabled checks from the configuration
250
+ */
251
+ removeDisabledChecks(config) {
252
+ if (!config.checks) return config;
253
+ const result = this.deepCopy(config);
254
+ const enabledChecks = {};
255
+ for (const [checkName, checkConfig] of Object.entries(result.checks)) {
256
+ if (!this.isCheckDisabled(checkConfig)) {
257
+ enabledChecks[checkName] = checkConfig;
258
+ } else {
259
+ console.log(`\u2139\uFE0F Check '${checkName}' is disabled (empty 'on' array)`);
260
+ }
261
+ }
262
+ result.checks = enabledChecks;
263
+ return result;
264
+ }
265
+ };
266
+ }
267
+ });
268
+
269
+ export {
270
+ ConfigMerger,
271
+ config_merger_exports,
272
+ init_config_merger
273
+ };
274
+ //# sourceMappingURL=chunk-O5EZDNYL.mjs.map