@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,311 @@
1
+ # Calculator SDK - JSON Output Guide
2
+
3
+ This guide explains how to use the calculator examples with JSON output for programmatic processing.
4
+
5
+ ## Overview
6
+
7
+ Three calculator variants are provided:
8
+
9
+ 1. **`calculator-sdk-real.ts`** - Interactive with table output (original)
10
+ 2. **`calculator-sdk-json.ts`** - Interactive with JSON output + custom visualization
11
+ 3. **`calculator-sdk-automated.ts`** - Non-interactive with pure JSON output
12
+
13
+ ## Quick Start
14
+
15
+ ### Interactive with JSON Output
16
+
17
+ ```bash
18
+ bun examples/calculator-sdk-json.ts
19
+ ```
20
+
21
+ **Features:**
22
+ - Prompts for user input
23
+ - Uses `outputFormat: 'json'`
24
+ - Suppresses engine console output
25
+ - Returns structured JSON
26
+ - Custom visualization in script
27
+
28
+ **Output:**
29
+ ```json
30
+ {
31
+ "success": true,
32
+ "calculation": {
33
+ "number1": 10,
34
+ "number2": 5,
35
+ "operation": "+",
36
+ "result": 15,
37
+ "expression": "10 + 5 = 15"
38
+ },
39
+ "executionTime": 1234,
40
+ "issues": []
41
+ }
42
+ ```
43
+
44
+ ### Fully Automated (No Interaction)
45
+
46
+ ```bash
47
+ # With default values (10 + 5)
48
+ bun examples/calculator-sdk-automated.ts
49
+
50
+ # With custom values
51
+ bun examples/calculator-sdk-automated.ts 100 25 -
52
+
53
+ # Output is pure JSON
54
+ bun examples/calculator-sdk-automated.ts 7 8 '*' --json
55
+ ```
56
+
57
+ **Features:**
58
+ - No user interaction required
59
+ - Inputs provided programmatically
60
+ - All console output suppressed
61
+ - Perfect for testing & automation
62
+ - Includes test suite
63
+
64
+ ## Key Techniques
65
+
66
+ ### 1. Using JSON Output Format
67
+
68
+ ```typescript
69
+ const result = await engine.executeChecks({
70
+ checks: checksToRun,
71
+ config: calculatorConfig,
72
+ outputFormat: 'json', // ← Instead of 'table'
73
+ maxParallelism: 1,
74
+ debug: false
75
+ });
76
+ ```
77
+
78
+ ### 2. Suppressing Console Output
79
+
80
+ ```typescript
81
+ function suppressAllOutput() {
82
+ const noop = () => {};
83
+ const originalLog = console.log;
84
+ // ... save all console methods
85
+
86
+ console.log = noop;
87
+ console.error = noop;
88
+ console.warn = noop;
89
+ // ... suppress all
90
+
91
+ return {
92
+ restore: () => {
93
+ console.log = originalLog;
94
+ // ... restore all
95
+ }
96
+ };
97
+ }
98
+
99
+ // Usage
100
+ const suppressor = suppressAllOutput();
101
+ const result = await engine.executeChecks({...});
102
+ suppressor.restore();
103
+ ```
104
+
105
+ ### 3. Automated Input Provider
106
+
107
+ ```typescript
108
+ function createAutomatedInputHandler(inputs: {
109
+ 'get-number1': string;
110
+ 'get-number2': string;
111
+ 'get-operation': string;
112
+ }) {
113
+ return async (request: HumanInputRequest): Promise<string> => {
114
+ return inputs[request.checkId];
115
+ };
116
+ }
117
+
118
+ // Set the hook
119
+ HumanInputCheckProvider.setHooks({
120
+ onHumanInput: createAutomatedInputHandler({
121
+ 'get-number1': '10',
122
+ 'get-number2': '5',
123
+ 'get-operation': '+'
124
+ })
125
+ });
126
+ ```
127
+
128
+ ### 4. Accessing Memory Results
129
+
130
+ ```typescript
131
+ const { MemoryStore } = await import('../src/memory-store');
132
+ const memoryStore = MemoryStore.getInstance(config.memory);
133
+
134
+ const result = memoryStore.get('result', 'calculator');
135
+ const num1 = memoryStore.get('number1', 'calculator');
136
+ ```
137
+
138
+ ## JSON Output Structure
139
+
140
+ The result from `executeChecks` with `outputFormat: 'json'` returns:
141
+
142
+ ```typescript
143
+ interface ExecutionResult {
144
+ executionTime: number;
145
+ timestamp: string;
146
+ summary: {
147
+ issues: Array<{
148
+ file: string;
149
+ line: number;
150
+ ruleId: string;
151
+ message: string;
152
+ severity: 'info' | 'warning' | 'error' | 'critical';
153
+ category: string;
154
+ }>;
155
+ };
156
+ // Additional fields based on output format
157
+ }
158
+ ```
159
+
160
+ ## Custom Result Structure
161
+
162
+ You can transform this into your own structure:
163
+
164
+ ```typescript
165
+ interface CalculationResult {
166
+ success: boolean;
167
+ calculation?: {
168
+ number1: number;
169
+ number2: number;
170
+ operation: string;
171
+ result: number;
172
+ expression: string;
173
+ };
174
+ executionTime?: number;
175
+ issues?: any[];
176
+ error?: string;
177
+ }
178
+
179
+ async function calculate(num1, num2, op): Promise<CalculationResult> {
180
+ // Suppress output
181
+ const suppressor = suppressAllOutput();
182
+
183
+ // Execute
184
+ const result = await engine.executeChecks({
185
+ outputFormat: 'json',
186
+ // ...
187
+ });
188
+
189
+ suppressor.restore();
190
+
191
+ // Extract from memory
192
+ const memoryStore = MemoryStore.getInstance();
193
+ const resultValue = memoryStore.get('result', 'calculator');
194
+
195
+ // Return custom structure
196
+ return {
197
+ success: true,
198
+ calculation: {
199
+ number1: parseFloat(num1),
200
+ number2: parseFloat(num2),
201
+ operation: op,
202
+ result: resultValue,
203
+ expression: `${num1} ${op} ${num2} = ${resultValue}`
204
+ },
205
+ executionTime: result.executionTime,
206
+ issues: result.summary?.issues || []
207
+ };
208
+ }
209
+ ```
210
+
211
+ ## Testing Example
212
+
213
+ ```typescript
214
+ // Run multiple calculations programmatically
215
+ const testCases = [
216
+ { num1: '100', num2: '25', operation: '-', expected: 75 },
217
+ { num1: '7', num2: '8', operation: '*', expected: 56 },
218
+ { num1: '100', num2: '4', operation: '/', expected: 25 },
219
+ ];
220
+
221
+ const results = await Promise.all(
222
+ testCases.map(tc =>
223
+ calculate(tc.num1, tc.num2, tc.operation, { suppressOutput: true })
224
+ )
225
+ );
226
+
227
+ // Verify results
228
+ results.forEach((result, idx) => {
229
+ const tc = testCases[idx];
230
+ const passed = result.calculation?.result === tc.expected;
231
+ console.log(`${tc.num1} ${tc.operation} ${tc.num2} = ${result.calculation?.result} ${passed ? '✅' : '❌'}`);
232
+ });
233
+ ```
234
+
235
+ ## Benefits
236
+
237
+ ### For Production Use
238
+ - ✅ Clean JSON output for APIs
239
+ - ✅ No stdout pollution
240
+ - ✅ Easy to parse and process
241
+ - ✅ Structured error handling
242
+
243
+ ### For Testing
244
+ - ✅ Automated test suites
245
+ - ✅ CI/CD integration
246
+ - ✅ Reproducible results
247
+ - ✅ No user interaction needed
248
+
249
+ ### For Monitoring
250
+ - ✅ Log to files/databases
251
+ - ✅ Metrics collection
252
+ - ✅ Alerting on failures
253
+ - ✅ Performance tracking
254
+
255
+ ## Integration Examples
256
+
257
+ ### Express API Endpoint
258
+
259
+ ```typescript
260
+ app.post('/api/calculate', async (req, res) => {
261
+ const { num1, num2, operation } = req.body;
262
+
263
+ const result = await calculate(num1, num2, operation, {
264
+ suppressOutput: true
265
+ });
266
+
267
+ if (result.success) {
268
+ res.json(result);
269
+ } else {
270
+ res.status(400).json({ error: result.error });
271
+ }
272
+ });
273
+ ```
274
+
275
+ ### CLI Tool with JSON Flag
276
+
277
+ ```typescript
278
+ if (process.argv.includes('--json')) {
279
+ const result = await calculate(num1, num2, op, { suppressOutput: true });
280
+ console.log(JSON.stringify(result));
281
+ } else {
282
+ // Interactive mode
283
+ await interactiveCalculator();
284
+ }
285
+ ```
286
+
287
+ ### Background Job
288
+
289
+ ```typescript
290
+ async function processCalculations(jobs: CalculationJob[]) {
291
+ const results = await Promise.all(
292
+ jobs.map(job =>
293
+ calculate(job.num1, job.num2, job.operation, {
294
+ suppressOutput: true
295
+ })
296
+ )
297
+ );
298
+
299
+ // Store results in database
300
+ await db.calculations.insertMany(results);
301
+
302
+ return results;
303
+ }
304
+ ```
305
+
306
+ ## See Also
307
+
308
+ - **SDK Documentation**: `docs/sdk.md`
309
+ - **Human Input Feature**: `docs/human-input-feature-plan.md`
310
+ - **Memory Provider**: `src/providers/memory-check-provider.ts`
311
+ - **Examples**: `examples/calculator-*.ts`
@@ -0,0 +1,340 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Calculator SDK - Fully Automated (Non-Interactive)
5
+ *
6
+ * This example shows how to:
7
+ * - Run calculations without user interaction
8
+ * - Provide inputs programmatically
9
+ * - Get pure JSON output
10
+ * - Use for testing or automation
11
+ *
12
+ * Usage:
13
+ * npm run build
14
+ * bun examples/calculator-sdk-automated.ts
15
+ * bun examples/calculator-sdk-automated.ts 10 5 +
16
+ */
17
+
18
+ import { HumanInputRequest, VisorConfig } from '../src/types/config';
19
+ import { HumanInputCheckProvider } from '../src/providers/human-input-check-provider';
20
+ import { CheckExecutionEngine } from '../src/check-execution-engine';
21
+
22
+ // ============================================================================
23
+ // CONFIGURATION
24
+ // ============================================================================
25
+
26
+ const calculatorConfig: VisorConfig = {
27
+ version: "1.0",
28
+
29
+ memory: {
30
+ namespace: "calculator",
31
+ persist: false
32
+ },
33
+
34
+ checks: {
35
+ "get-number1": {
36
+ type: "human-input",
37
+ prompt: "Enter the first number:",
38
+ },
39
+
40
+ "store-number1": {
41
+ type: "memory",
42
+ depends_on: ["get-number1"],
43
+ operation: "set",
44
+ namespace: "calculator",
45
+ key: "number1",
46
+ value_js: "parseFloat(outputs['get-number1'])"
47
+ },
48
+
49
+ "get-number2": {
50
+ type: "human-input",
51
+ depends_on: ["store-number1"],
52
+ prompt: "Enter the second number:",
53
+ },
54
+
55
+ "store-number2": {
56
+ type: "memory",
57
+ depends_on: ["get-number2"],
58
+ operation: "set",
59
+ namespace: "calculator",
60
+ key: "number2",
61
+ value_js: "parseFloat(outputs['get-number2'])"
62
+ },
63
+
64
+ "get-operation": {
65
+ type: "human-input",
66
+ depends_on: ["store-number2"],
67
+ prompt: "Select operation (+, -, *, /):",
68
+ },
69
+
70
+ "store-operation": {
71
+ type: "memory",
72
+ depends_on: ["get-operation"],
73
+ operation: "set",
74
+ namespace: "calculator",
75
+ key: "operation",
76
+ value_js: "outputs['get-operation'].trim()",
77
+ fail_if: "!['+', '-', '*', '/'].includes(outputs['get-operation'].trim())"
78
+ },
79
+
80
+ "calculate": {
81
+ type: "script",
82
+ depends_on: ["store-operation"],
83
+ content: `
84
+ const num1 = memory.get('number1', 'calculator');
85
+ const num2 = memory.get('number2', 'calculator');
86
+ const op = memory.get('operation', 'calculator');
87
+
88
+ let result;
89
+ switch(op) {
90
+ case '+': result = num1 + num2; break;
91
+ case '-': result = num1 - num2; break;
92
+ case '*': result = num1 * num2; break;
93
+ case '/':
94
+ if (num2 === 0) throw new Error('Division by zero!');
95
+ result = num1 / num2;
96
+ break;
97
+ default: throw new Error('Invalid operation: ' + op);
98
+ }
99
+
100
+ return result;
101
+ `
102
+ }
103
+ }
104
+ };
105
+
106
+ // ============================================================================
107
+ // AUTOMATED INPUT PROVIDER
108
+ // ============================================================================
109
+
110
+ interface CalculatorInputs {
111
+ 'get-number1': string;
112
+ 'get-number2': string;
113
+ 'get-operation': string;
114
+ }
115
+
116
+ /**
117
+ * Create an automated input handler with predefined values
118
+ */
119
+ function createAutomatedInputHandler(inputs: CalculatorInputs) {
120
+ return async (request: HumanInputRequest): Promise<string> => {
121
+ const checkId = request.checkId as keyof CalculatorInputs;
122
+ const value = inputs[checkId];
123
+
124
+ if (value === undefined) {
125
+ throw new Error(`No automated input provided for check: ${checkId}`);
126
+ }
127
+
128
+ return value;
129
+ };
130
+ }
131
+
132
+ // ============================================================================
133
+ // SUPPRESS ALL CONSOLE OUTPUT
134
+ // ============================================================================
135
+
136
+ function suppressAllOutput() {
137
+ const noop = () => {};
138
+ const originalLog = console.log;
139
+ const originalError = console.error;
140
+ const originalWarn = console.warn;
141
+ const originalInfo = console.info;
142
+ const originalDebug = console.debug;
143
+
144
+ console.log = noop;
145
+ console.error = noop;
146
+ console.warn = noop;
147
+ console.info = noop;
148
+ console.debug = noop;
149
+
150
+ return {
151
+ restore: () => {
152
+ console.log = originalLog;
153
+ console.error = originalError;
154
+ console.warn = originalWarn;
155
+ console.info = originalInfo;
156
+ console.debug = originalDebug;
157
+ }
158
+ };
159
+ }
160
+
161
+ // ============================================================================
162
+ // CALCULATION FUNCTION
163
+ // ============================================================================
164
+
165
+ interface CalculationResult {
166
+ success: boolean;
167
+ calculation?: {
168
+ number1: number;
169
+ number2: number;
170
+ operation: string;
171
+ result: number;
172
+ expression: string;
173
+ };
174
+ executionTime?: number;
175
+ issues?: any[];
176
+ error?: string;
177
+ }
178
+
179
+ async function calculate(
180
+ num1: string,
181
+ num2: string,
182
+ operation: string,
183
+ options: { verbose?: boolean; suppressOutput?: boolean } = {}
184
+ ): Promise<CalculationResult> {
185
+ const { verbose = false, suppressOutput = true } = options;
186
+
187
+ try {
188
+ // Set up automated inputs
189
+ HumanInputCheckProvider.setHooks({
190
+ onHumanInput: createAutomatedInputHandler({
191
+ 'get-number1': num1,
192
+ 'get-number2': num2,
193
+ 'get-operation': operation
194
+ })
195
+ });
196
+
197
+ // Suppress console output if requested
198
+ const suppressor = suppressOutput ? suppressAllOutput() : null;
199
+
200
+ // Create execution engine
201
+ const engine = new CheckExecutionEngine();
202
+
203
+ // Execute all checks
204
+ const checksToRun = Object.keys(calculatorConfig.checks || {});
205
+
206
+ const result = await engine.executeChecks({
207
+ checks: checksToRun,
208
+ config: calculatorConfig,
209
+ outputFormat: 'json',
210
+ maxParallelism: 1,
211
+ debug: false
212
+ });
213
+
214
+ // Restore console
215
+ if (suppressor) suppressor.restore();
216
+
217
+ // Extract results from memory
218
+ const { MemoryStore } = await import('../src/memory-store');
219
+ const memoryStore = MemoryStore.getInstance(calculatorConfig.memory);
220
+
221
+ const n1 = memoryStore.get('number1', 'calculator');
222
+ const n2 = memoryStore.get('number2', 'calculator');
223
+ const op = memoryStore.get('operation', 'calculator');
224
+ const resultValue = memoryStore.get('result', 'calculator');
225
+
226
+ return {
227
+ success: true,
228
+ calculation: {
229
+ number1: n1,
230
+ number2: n2,
231
+ operation: op,
232
+ result: resultValue,
233
+ expression: `${n1} ${op} ${n2} = ${resultValue}`
234
+ },
235
+ executionTime: result.executionTime,
236
+ issues: result.summary?.issues || []
237
+ };
238
+
239
+ } catch (error) {
240
+ return {
241
+ success: false,
242
+ error: error instanceof Error ? error.message : String(error)
243
+ };
244
+ }
245
+ }
246
+
247
+ // ============================================================================
248
+ // MAIN EXECUTION
249
+ // ============================================================================
250
+
251
+ async function main() {
252
+ // Parse command line arguments
253
+ const args = process.argv.slice(2);
254
+
255
+ let num1: string, num2: string, operation: string;
256
+
257
+ if (args.length >= 3) {
258
+ // Use command line arguments
259
+ [num1, num2, operation] = args;
260
+ } else {
261
+ // Use default values for demo
262
+ num1 = '10';
263
+ num2 = '5';
264
+ operation = '+';
265
+ }
266
+
267
+ console.log('🧮 Calculator SDK - Automated Mode\n');
268
+ console.log(`Input: ${num1} ${operation} ${num2}\n`);
269
+
270
+ // Run calculation
271
+ const result = await calculate(num1, num2, operation, {
272
+ verbose: false,
273
+ suppressOutput: true
274
+ });
275
+
276
+ // Display result
277
+ if (result.success && result.calculation) {
278
+ console.log('✅ Calculation Complete!\n');
279
+ console.log('📊 Result (JSON):\n');
280
+ console.log(JSON.stringify(result, null, 2));
281
+
282
+ console.log('\n' + '─'.repeat(50));
283
+ console.log('Expression:', result.calculation.expression);
284
+ console.log('─'.repeat(50));
285
+
286
+ if (result.issues && result.issues.length > 0) {
287
+ console.log(`\n⚠️ ${result.issues.length} issue(s) found`);
288
+ }
289
+ } else {
290
+ console.log('❌ Calculation Failed!\n');
291
+ console.log('Error:', result.error);
292
+ }
293
+
294
+ console.log();
295
+
296
+ // Run additional test cases
297
+ console.log('🧪 Running Test Cases...\n');
298
+
299
+ const testCases = [
300
+ { num1: '100', num2: '25', operation: '-', expected: 75 },
301
+ { num1: '7', num2: '8', operation: '*', expected: 56 },
302
+ { num1: '100', num2: '4', operation: '/', expected: 25 },
303
+ { num1: '15', num2: '3', operation: '+', expected: 18 },
304
+ ];
305
+
306
+ const results = await Promise.all(
307
+ testCases.map(tc =>
308
+ calculate(tc.num1, tc.num2, tc.operation, { suppressOutput: true })
309
+ )
310
+ );
311
+
312
+ console.log('Test Results:');
313
+ console.log('─'.repeat(70));
314
+ console.log('Input'.padEnd(20), 'Expected'.padEnd(15), 'Actual'.padEnd(15), 'Status');
315
+ console.log('─'.repeat(70));
316
+
317
+ results.forEach((result, idx) => {
318
+ const tc = testCases[idx];
319
+ const input = `${tc.num1} ${tc.operation} ${tc.num2}`;
320
+ const expected = tc.expected;
321
+ const actual = result.calculation?.result;
322
+ const status = actual === expected ? '✅ PASS' : '❌ FAIL';
323
+
324
+ console.log(
325
+ input.padEnd(20),
326
+ String(expected).padEnd(15),
327
+ String(actual).padEnd(15),
328
+ status
329
+ );
330
+ });
331
+
332
+ console.log('─'.repeat(70));
333
+ console.log('\n✨ Done!\n');
334
+ }
335
+
336
+ // Run main
337
+ main().catch((error) => {
338
+ console.error('Fatal error:', error);
339
+ process.exit(1);
340
+ });