@probelabs/visor 0.1.187-ee → 0.1.187

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 (410) hide show
  1. package/dist/{102.index.js → 140.index.js} +3 -3
  2. package/dist/{736.index.js → 142.index.js} +36 -36
  3. package/dist/{961.index.js → 223.index.js} +16 -16
  4. package/dist/{840.index.js → 676.index.js} +12 -12
  5. package/dist/{663.index.js → 85.index.js} +15 -15
  6. package/dist/action-cli-bridge.d.ts.map +1 -1
  7. package/dist/agent-protocol/a2a-frontend.d.ts.map +1 -1
  8. package/dist/agent-protocol/index.d.ts.map +1 -1
  9. package/dist/agent-protocol/push-notification-manager.d.ts.map +1 -1
  10. package/dist/agent-protocol/state-transitions.d.ts.map +1 -1
  11. package/dist/agent-protocol/task-evaluator.d.ts.map +1 -1
  12. package/dist/agent-protocol/task-live-update-slack.d.ts.map +1 -1
  13. package/dist/agent-protocol/task-live-update-teams.d.ts.map +1 -1
  14. package/dist/agent-protocol/task-live-update-telegram.d.ts.map +1 -1
  15. package/dist/agent-protocol/task-live-updates.d.ts.map +1 -1
  16. package/dist/agent-protocol/task-progress-tool.d.ts.map +1 -1
  17. package/dist/agent-protocol/task-queue.d.ts.map +1 -1
  18. package/dist/agent-protocol/task-store.d.ts.map +1 -1
  19. package/dist/agent-protocol/task-stream-manager.d.ts.map +1 -1
  20. package/dist/agent-protocol/task-trace-resolution.d.ts.map +1 -1
  21. package/dist/agent-protocol/tasks-cli-handler.d.ts.map +1 -1
  22. package/dist/agent-protocol/tasks-tui.d.ts.map +1 -1
  23. package/dist/agent-protocol/trace-serializer.d.ts.map +1 -1
  24. package/dist/agent-protocol/track-execution.d.ts.map +1 -1
  25. package/dist/agent-protocol/types.d.ts.map +1 -1
  26. package/dist/ai-review-service.d.ts.map +1 -1
  27. package/dist/check-execution-engine.d.ts.map +1 -1
  28. package/dist/cli-main.d.ts.map +1 -1
  29. package/dist/cli.d.ts.map +1 -1
  30. package/dist/commands.d.ts.map +1 -1
  31. package/dist/config/cli-handler.d.ts.map +1 -1
  32. package/dist/config/config-reloader.d.ts.map +1 -1
  33. package/dist/config/config-snapshot-store.d.ts.map +1 -1
  34. package/dist/config/config-watcher.d.ts.map +1 -1
  35. package/dist/config/types.d.ts.map +1 -1
  36. package/dist/config.d.ts.map +1 -1
  37. package/dist/cron-scheduler.d.ts.map +1 -1
  38. package/dist/debug-visualizer/debug-span-exporter.d.ts.map +1 -1
  39. package/dist/debug-visualizer/trace-reader.d.ts.map +1 -1
  40. package/dist/debug-visualizer/ws-server.d.ts.map +1 -1
  41. package/dist/dependency-resolver.d.ts.map +1 -1
  42. package/dist/email/adapter.d.ts.map +1 -1
  43. package/dist/email/client.d.ts.map +1 -1
  44. package/dist/email/markdown.d.ts.map +1 -1
  45. package/dist/email/polling-runner.d.ts.map +1 -1
  46. package/dist/engine/on-finish/orchestrator.d.ts.map +1 -1
  47. package/dist/engine/on-finish/utils.d.ts.map +1 -1
  48. package/dist/event-bus/event-bus.d.ts.map +1 -1
  49. package/dist/event-bus/types.d.ts.map +1 -1
  50. package/dist/event-mapper.d.ts.map +1 -1
  51. package/dist/failure-condition-evaluator.d.ts.map +1 -1
  52. package/dist/footer.d.ts.map +1 -1
  53. package/dist/frontends/email-frontend.d.ts.map +1 -1
  54. package/dist/frontends/github-frontend.d.ts.map +1 -1
  55. package/dist/frontends/host.d.ts.map +1 -1
  56. package/dist/frontends/ndjson-sink.d.ts.map +1 -1
  57. package/dist/frontends/slack-frontend.d.ts.map +1 -1
  58. package/dist/frontends/teams-frontend.d.ts.map +1 -1
  59. package/dist/frontends/telegram-frontend.d.ts.map +1 -1
  60. package/dist/frontends/whatsapp-frontend.d.ts.map +1 -1
  61. package/dist/generated/config-schema.d.ts.map +1 -1
  62. package/dist/git-repository-analyzer.d.ts.map +1 -1
  63. package/dist/github-auth.d.ts.map +1 -1
  64. package/dist/github-check-service.d.ts.map +1 -1
  65. package/dist/github-comments.d.ts.map +1 -1
  66. package/dist/github-reactions.d.ts.map +1 -1
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +8154 -9971
  69. package/dist/issue-filter.d.ts.map +1 -1
  70. package/dist/liquid-extensions.d.ts.map +1 -1
  71. package/dist/logger.d.ts.map +1 -1
  72. package/dist/mcp-job-manager.d.ts.map +1 -1
  73. package/dist/mcp-server.d.ts.map +1 -1
  74. package/dist/memory-store.d.ts.map +1 -1
  75. package/dist/output/traces/run-2026-08-20T13-50-06-218Z.ndjson +3148 -0
  76. package/dist/output-formatters.d.ts.map +1 -1
  77. package/dist/policy/default-engine.d.ts.map +1 -1
  78. package/dist/policy/index.d.ts.map +1 -1
  79. package/dist/policy/policy-check-command.d.ts.map +1 -1
  80. package/dist/policy/types.d.ts.map +1 -1
  81. package/dist/pr-analyzer.d.ts.map +1 -1
  82. package/dist/pr-detector.d.ts.map +1 -1
  83. package/dist/providers/a2a-check-provider.d.ts.map +1 -1
  84. package/dist/providers/ai-check-provider.d.ts.map +1 -1
  85. package/dist/providers/api-tool-executor.d.ts.map +1 -1
  86. package/dist/providers/check-provider-registry.d.ts.map +1 -1
  87. package/dist/providers/check-provider.interface.d.ts.map +1 -1
  88. package/dist/providers/claude-code-check-provider.d.ts.map +1 -1
  89. package/dist/providers/claude-code-types.d.ts.map +1 -1
  90. package/dist/providers/command-check-provider.d.ts.map +1 -1
  91. package/dist/providers/custom-tool-executor.d.ts.map +1 -1
  92. package/dist/providers/git-checkout-provider.d.ts.map +1 -1
  93. package/dist/providers/github-ops-provider.d.ts.map +1 -1
  94. package/dist/providers/http-check-provider.d.ts.map +1 -1
  95. package/dist/providers/http-client-provider.d.ts.map +1 -1
  96. package/dist/providers/http-input-provider.d.ts.map +1 -1
  97. package/dist/providers/human-input-check-provider.d.ts.map +1 -1
  98. package/dist/providers/index.d.ts.map +1 -1
  99. package/dist/providers/log-check-provider.d.ts.map +1 -1
  100. package/dist/providers/mcp-check-provider.d.ts.map +1 -1
  101. package/dist/providers/mcp-custom-sse-server.d.ts.map +1 -1
  102. package/dist/providers/mcp-tools.d.ts.map +1 -1
  103. package/dist/providers/memory-check-provider.d.ts.map +1 -1
  104. package/dist/providers/noop-check-provider.d.ts.map +1 -1
  105. package/dist/providers/script-check-provider.d.ts.map +1 -1
  106. package/dist/providers/utcp-check-provider.d.ts.map +1 -1
  107. package/dist/providers/workflow-check-provider.d.ts.map +1 -1
  108. package/dist/providers/workflow-tool-executor.d.ts.map +1 -1
  109. package/dist/reviewer.d.ts.map +1 -1
  110. package/dist/runners/config-reload-runtime.d.ts.map +1 -1
  111. package/dist/runners/graceful-restart.d.ts.map +1 -1
  112. package/dist/runners/mcp-server-runner.d.ts.map +1 -1
  113. package/dist/runners/process-cli-handler.d.ts.map +1 -1
  114. package/dist/runners/process-discovery.d.ts.map +1 -1
  115. package/dist/runners/runner-factory.d.ts.map +1 -1
  116. package/dist/runners/runner-host.d.ts.map +1 -1
  117. package/dist/runners/runner.d.ts.map +1 -1
  118. package/dist/runners/telemetry-init.d.ts.map +1 -1
  119. package/dist/sandbox/bubblewrap-sandbox.d.ts.map +1 -1
  120. package/dist/sandbox/cache-volume-manager.d.ts.map +1 -1
  121. package/dist/sandbox/check-runner.d.ts.map +1 -1
  122. package/dist/sandbox/compose-generator.d.ts.map +1 -1
  123. package/dist/sandbox/docker-compose-sandbox.d.ts.map +1 -1
  124. package/dist/sandbox/docker-image-sandbox.d.ts.map +1 -1
  125. package/dist/sandbox/env-filter.d.ts.map +1 -1
  126. package/dist/sandbox/index.d.ts.map +1 -1
  127. package/dist/sandbox/sandbox-manager.d.ts.map +1 -1
  128. package/dist/sandbox/sandbox-telemetry.d.ts.map +1 -1
  129. package/dist/sandbox/seatbelt-sandbox.d.ts.map +1 -1
  130. package/dist/sandbox/trace-ingester.d.ts.map +1 -1
  131. package/dist/sandbox/types.d.ts.map +1 -1
  132. package/dist/scheduler/cli-handler.d.ts.map +1 -1
  133. package/dist/scheduler/index.d.ts.map +1 -1
  134. package/dist/scheduler/message-trigger.d.ts.map +1 -1
  135. package/dist/scheduler/schedule-parser.d.ts.map +1 -1
  136. package/dist/scheduler/schedule-store.d.ts.map +1 -1
  137. package/dist/scheduler/schedule-tool.d.ts.map +1 -1
  138. package/dist/scheduler/scheduler.d.ts.map +1 -1
  139. package/dist/scheduler/store/index.d.ts.map +1 -1
  140. package/dist/scheduler/store/json-migrator.d.ts.map +1 -1
  141. package/dist/scheduler/store/sqlite-store.d.ts.map +1 -1
  142. package/dist/scheduler/store/types.d.ts.map +1 -1
  143. package/dist/sdk/{a2a-frontend-QVKJ7MVW.mjs → a2a-frontend-XCQ4CQUF.mjs} +3 -3
  144. package/dist/sdk/{check-provider-registry-QUUL6JI2.mjs → check-provider-registry-2D3MCWP3.mjs} +6 -6
  145. package/dist/sdk/{chunk-6LQEODDA.mjs → chunk-B2LQT6QU.mjs} +2 -2
  146. package/dist/sdk/chunk-B2LQT6QU.mjs.map +1 -0
  147. package/dist/sdk/{chunk-PZADRRLX.mjs → chunk-S3GSZRYC.mjs} +2 -2
  148. package/dist/sdk/{chunk-HQCCT6WP.mjs → chunk-TGQBEM3Y.mjs} +203 -203
  149. package/dist/sdk/chunk-TGQBEM3Y.mjs.map +1 -0
  150. package/dist/sdk/{chunk-BBLBZVWC.mjs → chunk-VS3JE2DL.mjs} +3 -3
  151. package/dist/sdk/{chunk-QLT42TX7.mjs → chunk-YETG675X.mjs} +2 -2
  152. package/dist/sdk/{dist-YLO6HUFD.mjs → dist-VBYEFQ6T.mjs} +85 -311
  153. package/dist/sdk/dist-VBYEFQ6T.mjs.map +1 -0
  154. package/dist/sdk/{email-frontend-6O454VL5.mjs → email-frontend-AE5TYWNC.mjs} +2 -2
  155. package/dist/sdk/{failure-condition-evaluator-USY3ISVA.mjs → failure-condition-evaluator-66PWLV3D.mjs} +4 -4
  156. package/dist/sdk/{github-frontend-2T5PWYD5.mjs → github-frontend-BBFKCY4M.mjs} +4 -4
  157. package/dist/sdk/{host-UZESVA6Z.mjs → host-UQRZDLT7.mjs} +4 -4
  158. package/dist/sdk/{routing-TYXT3STD.mjs → routing-Q647KUMO.mjs} +5 -5
  159. package/dist/sdk/{schedule-tool-ODMIDBMT.mjs → schedule-tool-WMGSM6IT.mjs} +6 -6
  160. package/dist/sdk/{schedule-tool-handler-IQSKBFLS.mjs → schedule-tool-handler-JMDHCGZ2.mjs} +6 -6
  161. package/dist/sdk/sdk.js +916 -2290
  162. package/dist/sdk/sdk.js.map +1 -1
  163. package/dist/sdk/sdk.mjs +5 -5
  164. package/dist/sdk/{trace-helpers-AM2QE5UZ.mjs → trace-helpers-AIUGQLK5.mjs} +3 -3
  165. package/dist/sdk/{track-execution-VJJVJH6K.mjs → track-execution-CFRZXMEC.mjs} +2 -2
  166. package/dist/sdk/{workflow-check-provider-XOWQYWTC.mjs → workflow-check-provider-G7A67EPP.mjs} +6 -6
  167. package/dist/sdk.d.ts.map +1 -1
  168. package/dist/session-registry.d.ts.map +1 -1
  169. package/dist/slack/adapter.d.ts.map +1 -1
  170. package/dist/slack/cache-prewarmer.d.ts.map +1 -1
  171. package/dist/slack/client.d.ts.map +1 -1
  172. package/dist/slack/markdown.d.ts.map +1 -1
  173. package/dist/slack/prompt-state.d.ts.map +1 -1
  174. package/dist/slack/rate-limiter.d.ts.map +1 -1
  175. package/dist/slack/schedule-tool-handler.d.ts.map +1 -1
  176. package/dist/slack/signature.d.ts.map +1 -1
  177. package/dist/slack/slack-output-adapter.d.ts.map +1 -1
  178. package/dist/slack/socket-runner.d.ts.map +1 -1
  179. package/dist/slack/thread-cache.d.ts.map +1 -1
  180. package/dist/snapshot-store.d.ts.map +1 -1
  181. package/dist/state-machine/context/build-engine-context.d.ts.map +1 -1
  182. package/dist/state-machine/context/workflow-inputs.d.ts.map +1 -1
  183. package/dist/state-machine/dispatch/debounce-manager.d.ts.map +1 -1
  184. package/dist/state-machine/dispatch/dependency-gating.d.ts.map +1 -1
  185. package/dist/state-machine/dispatch/execution-invoker.d.ts.map +1 -1
  186. package/dist/state-machine/dispatch/foreach-processor.d.ts.map +1 -1
  187. package/dist/state-machine/dispatch/history-snapshot.d.ts.map +1 -1
  188. package/dist/state-machine/dispatch/on-init-handlers.d.ts.map +1 -1
  189. package/dist/state-machine/dispatch/policy-gate.d.ts.map +1 -1
  190. package/dist/state-machine/dispatch/renderer-schema.d.ts.map +1 -1
  191. package/dist/state-machine/dispatch/sandbox-routing.d.ts.map +1 -1
  192. package/dist/state-machine/dispatch/stats-manager.d.ts.map +1 -1
  193. package/dist/state-machine/dispatch/template-renderer.d.ts.map +1 -1
  194. package/dist/state-machine/execution/summary.d.ts.map +1 -1
  195. package/dist/state-machine/runner.d.ts.map +1 -1
  196. package/dist/state-machine/states/check-running.d.ts.map +1 -1
  197. package/dist/state-machine/states/completed.d.ts.map +1 -1
  198. package/dist/state-machine/states/error.d.ts.map +1 -1
  199. package/dist/state-machine/states/init.d.ts.map +1 -1
  200. package/dist/state-machine/states/level-dispatch.d.ts.map +1 -1
  201. package/dist/state-machine/states/plan-ready.d.ts.map +1 -1
  202. package/dist/state-machine/states/routing.d.ts.map +1 -1
  203. package/dist/state-machine/states/wave-planning.d.ts.map +1 -1
  204. package/dist/state-machine/workflow-projection.d.ts.map +1 -1
  205. package/dist/state-machine-execution-engine.d.ts.map +1 -1
  206. package/dist/teams/adapter.d.ts.map +1 -1
  207. package/dist/teams/client.d.ts.map +1 -1
  208. package/dist/teams/markdown.d.ts.map +1 -1
  209. package/dist/teams/webhook-runner.d.ts.map +1 -1
  210. package/dist/telegram/adapter.d.ts.map +1 -1
  211. package/dist/telegram/client.d.ts.map +1 -1
  212. package/dist/telegram/markdown.d.ts.map +1 -1
  213. package/dist/telegram/polling-runner.d.ts.map +1 -1
  214. package/dist/telemetry/fallback-ndjson.d.ts.map +1 -1
  215. package/dist/telemetry/file-span-exporter.d.ts.map +1 -1
  216. package/dist/telemetry/lazy-otel.d.ts.map +1 -1
  217. package/dist/telemetry/metrics.d.ts.map +1 -1
  218. package/dist/telemetry/opentelemetry.d.ts.map +1 -1
  219. package/dist/telemetry/state-capture.d.ts.map +1 -1
  220. package/dist/telemetry/trace-helpers.d.ts.map +1 -1
  221. package/dist/telemetry/trace-report-exporter.d.ts.map +1 -1
  222. package/dist/test-runner/assertions.d.ts.map +1 -1
  223. package/dist/test-runner/conversation-sugar.d.ts.map +1 -1
  224. package/dist/test-runner/core/environment.d.ts.map +1 -1
  225. package/dist/test-runner/core/fixture.d.ts.map +1 -1
  226. package/dist/test-runner/core/flow-stage.d.ts.map +1 -1
  227. package/dist/test-runner/core/mocks.d.ts.map +1 -1
  228. package/dist/test-runner/core/test-execution-wrapper.d.ts.map +1 -1
  229. package/dist/test-runner/evaluators.d.ts.map +1 -1
  230. package/dist/test-runner/fixture-loader.d.ts.map +1 -1
  231. package/dist/test-runner/index.d.ts.map +1 -1
  232. package/dist/test-runner/llm-judge.d.ts.map +1 -1
  233. package/dist/test-runner/recorders/github-recorder.d.ts.map +1 -1
  234. package/dist/test-runner/recorders/global-recorder.d.ts.map +1 -1
  235. package/dist/test-runner/recorders/slack-recorder.d.ts.map +1 -1
  236. package/dist/test-runner/utils/selectors.d.ts.map +1 -1
  237. package/dist/test-runner/validator.d.ts.map +1 -1
  238. package/dist/traces/run-2026-08-20T13-50-06-218Z.ndjson +3148 -0
  239. package/dist/tui/chat-runner.d.ts.map +1 -1
  240. package/dist/tui/chat-state.d.ts.map +1 -1
  241. package/dist/tui/chat-tui.d.ts.map +1 -1
  242. package/dist/tui/components/chat-box.d.ts.map +1 -1
  243. package/dist/tui/components/input-bar.d.ts.map +1 -1
  244. package/dist/tui/components/status-bar.d.ts.map +1 -1
  245. package/dist/tui/components/trace-viewer.d.ts.map +1 -1
  246. package/dist/tui/index.d.ts.map +1 -1
  247. package/dist/tui/tui-frontend.d.ts.map +1 -1
  248. package/dist/types/bot.d.ts.map +1 -1
  249. package/dist/types/cli.d.ts.map +1 -1
  250. package/dist/types/config.d.ts.map +1 -1
  251. package/dist/types/engine.d.ts.map +1 -1
  252. package/dist/types/execution.d.ts.map +1 -1
  253. package/dist/types/git-checkout.d.ts.map +1 -1
  254. package/dist/types/github.d.ts.map +1 -1
  255. package/dist/types/workflow.d.ts.map +1 -1
  256. package/dist/utils/author-permissions.d.ts.map +1 -1
  257. package/dist/utils/child-process-error-handler.d.ts.map +1 -1
  258. package/dist/utils/command-executor.d.ts.map +1 -1
  259. package/dist/utils/comment-metadata.d.ts.map +1 -1
  260. package/dist/utils/config-loader.d.ts.map +1 -1
  261. package/dist/utils/config-merger.d.ts.map +1 -1
  262. package/dist/utils/diff-processor.d.ts.map +1 -1
  263. package/dist/utils/env-exposure.d.ts.map +1 -1
  264. package/dist/utils/env-resolver.d.ts.map +1 -1
  265. package/dist/utils/fair-concurrency-limiter.d.ts.map +1 -1
  266. package/dist/utils/file-exclusion.d.ts.map +1 -1
  267. package/dist/utils/head-sha.d.ts.map +1 -1
  268. package/dist/utils/human-id.d.ts.map +1 -1
  269. package/dist/utils/instance-id.d.ts.map +1 -1
  270. package/dist/utils/interactive-prompt.d.ts.map +1 -1
  271. package/dist/utils/issue-normalizer.d.ts.map +1 -1
  272. package/dist/utils/json-text-extractor.d.ts.map +1 -1
  273. package/dist/utils/mermaid-telemetry.d.ts.map +1 -1
  274. package/dist/utils/oauth2-token-cache.d.ts.map +1 -1
  275. package/dist/utils/rate-limiter.d.ts.map +1 -1
  276. package/dist/utils/sandbox.d.ts.map +1 -1
  277. package/dist/utils/script-memory-ops.d.ts.map +1 -1
  278. package/dist/utils/script-tool-environment.d.ts.map +1 -1
  279. package/dist/utils/stdin-reader.d.ts.map +1 -1
  280. package/dist/utils/template-context.d.ts.map +1 -1
  281. package/dist/utils/tool-resolver.d.ts.map +1 -1
  282. package/dist/utils/toolkit-expander.d.ts.map +1 -1
  283. package/dist/utils/tracer-init.d.ts.map +1 -1
  284. package/dist/utils/ui-helpers.d.ts.map +1 -1
  285. package/dist/utils/user-facing-error.d.ts.map +1 -1
  286. package/dist/utils/workspace-manager.d.ts.map +1 -1
  287. package/dist/utils/worktree-cleanup.d.ts.map +1 -1
  288. package/dist/utils/worktree-manager.d.ts.map +1 -1
  289. package/dist/webhook-server.d.ts.map +1 -1
  290. package/dist/whatsapp/adapter.d.ts.map +1 -1
  291. package/dist/whatsapp/client.d.ts.map +1 -1
  292. package/dist/whatsapp/markdown.d.ts.map +1 -1
  293. package/dist/whatsapp/webhook-runner.d.ts.map +1 -1
  294. package/dist/workflow-executor.d.ts.map +1 -1
  295. package/dist/workflow-registry.d.ts.map +1 -1
  296. package/package.json +1 -1
  297. package/dist/enterprise/license/validator.d.ts +0 -39
  298. package/dist/enterprise/license/validator.d.ts.map +0 -1
  299. package/dist/enterprise/loader.d.ts +0 -25
  300. package/dist/enterprise/loader.d.ts.map +0 -1
  301. package/dist/enterprise/policy/opa-compiler.d.ts +0 -37
  302. package/dist/enterprise/policy/opa-compiler.d.ts.map +0 -1
  303. package/dist/enterprise/policy/opa-http-evaluator.d.ts +0 -36
  304. package/dist/enterprise/policy/opa-http-evaluator.d.ts.map +0 -1
  305. package/dist/enterprise/policy/opa-policy-engine.d.ts +0 -48
  306. package/dist/enterprise/policy/opa-policy-engine.d.ts.map +0 -1
  307. package/dist/enterprise/policy/opa-wasm-evaluator.d.ts +0 -34
  308. package/dist/enterprise/policy/opa-wasm-evaluator.d.ts.map +0 -1
  309. package/dist/enterprise/policy/policy-input-builder.d.ts +0 -122
  310. package/dist/enterprise/policy/policy-input-builder.d.ts.map +0 -1
  311. package/dist/enterprise/scheduler/knex-store.d.ts +0 -47
  312. package/dist/enterprise/scheduler/knex-store.d.ts.map +0 -1
  313. package/dist/sdk/a2a-frontend-7EGXSULE.mjs +0 -1751
  314. package/dist/sdk/a2a-frontend-7EGXSULE.mjs.map +0 -1
  315. package/dist/sdk/check-provider-registry-IGNTM4MW.mjs +0 -32
  316. package/dist/sdk/chunk-6DDNEBZ7.mjs +0 -6119
  317. package/dist/sdk/chunk-6DDNEBZ7.mjs.map +0 -1
  318. package/dist/sdk/chunk-6LQEODDA.mjs.map +0 -1
  319. package/dist/sdk/chunk-7XKHFRPN.mjs +0 -739
  320. package/dist/sdk/chunk-D6O5SCPC.mjs +0 -621
  321. package/dist/sdk/chunk-D6O5SCPC.mjs.map +0 -1
  322. package/dist/sdk/chunk-H2ZWNJJO.mjs +0 -204
  323. package/dist/sdk/chunk-H2ZWNJJO.mjs.map +0 -1
  324. package/dist/sdk/chunk-HMVD3AEC.mjs +0 -47064
  325. package/dist/sdk/chunk-HMVD3AEC.mjs.map +0 -1
  326. package/dist/sdk/chunk-HQCCT6WP.mjs.map +0 -1
  327. package/dist/sdk/chunk-IY5PQ5EN.mjs +0 -1724
  328. package/dist/sdk/chunk-IY5PQ5EN.mjs.map +0 -1
  329. package/dist/sdk/chunk-PDQTEBOJ.mjs +0 -213
  330. package/dist/sdk/chunk-PDQTEBOJ.mjs.map +0 -1
  331. package/dist/sdk/chunk-PUHU6UY6.mjs +0 -391
  332. package/dist/sdk/chunk-PUHU6UY6.mjs.map +0 -1
  333. package/dist/sdk/chunk-PZADRRLX.mjs.map +0 -1
  334. package/dist/sdk/chunk-RQDLVMER.mjs +0 -1507
  335. package/dist/sdk/chunk-RQDLVMER.mjs.map +0 -1
  336. package/dist/sdk/chunk-TSX3YS3F.mjs +0 -825
  337. package/dist/sdk/chunk-TSX3YS3F.mjs.map +0 -1
  338. package/dist/sdk/chunk-WZQMTD7W.mjs +0 -33
  339. package/dist/sdk/chunk-WZQMTD7W.mjs.map +0 -1
  340. package/dist/sdk/chunk-XXAEN5KU.mjs +0 -197
  341. package/dist/sdk/chunk-XXAEN5KU.mjs.map +0 -1
  342. package/dist/sdk/chunk-ZCBVXBKG.mjs +0 -1150
  343. package/dist/sdk/chunk-ZCBVXBKG.mjs.map +0 -1
  344. package/dist/sdk/config-BI5ZXG6D.mjs +0 -16
  345. package/dist/sdk/dist-NERCHNRR.mjs +0 -7955
  346. package/dist/sdk/dist-NERCHNRR.mjs.map +0 -1
  347. package/dist/sdk/dist-YLO6HUFD.mjs.map +0 -1
  348. package/dist/sdk/email-frontend-JE7H3LBC.mjs +0 -701
  349. package/dist/sdk/email-frontend-JE7H3LBC.mjs.map +0 -1
  350. package/dist/sdk/failure-condition-evaluator-7WHZUYDC.mjs +0 -18
  351. package/dist/sdk/github-frontend-RGK4DPRI.mjs +0 -1394
  352. package/dist/sdk/github-frontend-RGK4DPRI.mjs.map +0 -1
  353. package/dist/sdk/host-YWXWROIE.mjs +0 -87
  354. package/dist/sdk/host-YWXWROIE.mjs.map +0 -1
  355. package/dist/sdk/knex-store-KCMFAMH5.mjs +0 -527
  356. package/dist/sdk/knex-store-KCMFAMH5.mjs.map +0 -1
  357. package/dist/sdk/loader-35YWX5UQ.mjs +0 -89
  358. package/dist/sdk/loader-35YWX5UQ.mjs.map +0 -1
  359. package/dist/sdk/opa-policy-engine-FY5D45YS.mjs +0 -655
  360. package/dist/sdk/opa-policy-engine-FY5D45YS.mjs.map +0 -1
  361. package/dist/sdk/routing-PHHRW2C7.mjs +0 -26
  362. package/dist/sdk/schedule-tool-ITD445EO.mjs +0 -38
  363. package/dist/sdk/schedule-tool-ITD445EO.mjs.map +0 -1
  364. package/dist/sdk/schedule-tool-ODMIDBMT.mjs.map +0 -1
  365. package/dist/sdk/schedule-tool-handler-5WPHFBOG.mjs +0 -42
  366. package/dist/sdk/schedule-tool-handler-5WPHFBOG.mjs.map +0 -1
  367. package/dist/sdk/schedule-tool-handler-IQSKBFLS.mjs.map +0 -1
  368. package/dist/sdk/session-registry-6PV6SGEJ.mjs +0 -10
  369. package/dist/sdk/session-registry-6PV6SGEJ.mjs.map +0 -1
  370. package/dist/sdk/slack-frontend-H7PX5GE7.mjs +0 -985
  371. package/dist/sdk/slack-frontend-H7PX5GE7.mjs.map +0 -1
  372. package/dist/sdk/task-evaluator-H3BXC7SE.mjs +0 -263
  373. package/dist/sdk/task-evaluator-H3BXC7SE.mjs.map +0 -1
  374. package/dist/sdk/teams-frontend-HCT4MTY4.mjs +0 -342
  375. package/dist/sdk/teams-frontend-HCT4MTY4.mjs.map +0 -1
  376. package/dist/sdk/telegram-frontend-YQRYDKPN.mjs +0 -586
  377. package/dist/sdk/telegram-frontend-YQRYDKPN.mjs.map +0 -1
  378. package/dist/sdk/trace-helpers-AM2QE5UZ.mjs.map +0 -1
  379. package/dist/sdk/trace-helpers-OMF4C24T.mjs +0 -31
  380. package/dist/sdk/trace-helpers-OMF4C24T.mjs.map +0 -1
  381. package/dist/sdk/trace-reader-OVE4DL2D.mjs +0 -270
  382. package/dist/sdk/trace-reader-OVE4DL2D.mjs.map +0 -1
  383. package/dist/sdk/trace-serializer-EBHTHZYT.mjs +0 -24
  384. package/dist/sdk/trace-serializer-EBHTHZYT.mjs.map +0 -1
  385. package/dist/sdk/track-execution-BULXL2XD.mjs +0 -249
  386. package/dist/sdk/track-execution-BULXL2XD.mjs.map +0 -1
  387. package/dist/sdk/utcp-check-provider-Q4PD5EP2.mjs +0 -16
  388. package/dist/sdk/utcp-check-provider-Q4PD5EP2.mjs.map +0 -1
  389. package/dist/sdk/validator-XTZJZZJH.mjs +0 -134
  390. package/dist/sdk/validator-XTZJZZJH.mjs.map +0 -1
  391. package/dist/sdk/whatsapp-frontend-72XEIUIR.mjs +0 -438
  392. package/dist/sdk/whatsapp-frontend-72XEIUIR.mjs.map +0 -1
  393. package/dist/sdk/workflow-check-provider-OVZDCL4E.mjs +0 -32
  394. package/dist/sdk/workflow-check-provider-OVZDCL4E.mjs.map +0 -1
  395. package/dist/sdk/workflow-check-provider-XOWQYWTC.mjs.map +0 -1
  396. /package/dist/sdk/{a2a-frontend-QVKJ7MVW.mjs.map → a2a-frontend-XCQ4CQUF.mjs.map} +0 -0
  397. /package/dist/sdk/{check-provider-registry-IGNTM4MW.mjs.map → check-provider-registry-2D3MCWP3.mjs.map} +0 -0
  398. /package/dist/sdk/{chunk-7XKHFRPN.mjs.map → chunk-S3GSZRYC.mjs.map} +0 -0
  399. /package/dist/sdk/{chunk-BBLBZVWC.mjs.map → chunk-VS3JE2DL.mjs.map} +0 -0
  400. /package/dist/sdk/{chunk-QLT42TX7.mjs.map → chunk-YETG675X.mjs.map} +0 -0
  401. /package/dist/sdk/{email-frontend-6O454VL5.mjs.map → email-frontend-AE5TYWNC.mjs.map} +0 -0
  402. /package/dist/sdk/{check-provider-registry-QUUL6JI2.mjs.map → failure-condition-evaluator-66PWLV3D.mjs.map} +0 -0
  403. /package/dist/sdk/{github-frontend-2T5PWYD5.mjs.map → github-frontend-BBFKCY4M.mjs.map} +0 -0
  404. /package/dist/sdk/{host-UZESVA6Z.mjs.map → host-UQRZDLT7.mjs.map} +0 -0
  405. /package/dist/sdk/{config-BI5ZXG6D.mjs.map → routing-Q647KUMO.mjs.map} +0 -0
  406. /package/dist/sdk/{failure-condition-evaluator-7WHZUYDC.mjs.map → schedule-tool-WMGSM6IT.mjs.map} +0 -0
  407. /package/dist/sdk/{failure-condition-evaluator-USY3ISVA.mjs.map → schedule-tool-handler-JMDHCGZ2.mjs.map} +0 -0
  408. /package/dist/sdk/{routing-PHHRW2C7.mjs.map → trace-helpers-AIUGQLK5.mjs.map} +0 -0
  409. /package/dist/sdk/{track-execution-VJJVJH6K.mjs.map → track-execution-CFRZXMEC.mjs.map} +0 -0
  410. /package/dist/sdk/{routing-TYXT3STD.mjs.map → workflow-check-provider-G7A67EPP.mjs.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/providers/check-provider.interface.ts","../../src/utils/env-resolver.ts","../../src/utils/issue-normalizer.ts","../../src/utils/env-exposure.ts","../../src/providers/utcp-check-provider.ts"],"sourcesContent":["import { PRInfo } from '../pr-analyzer';\nimport { ReviewSummary } from '../reviewer';\nimport { EnvConfig, HumanInputRequest } from '../types/config';\n\n/**\n * Configuration for a check provider\n */\nexport interface CheckProviderConfig {\n type: string;\n prompt?: string;\n eventContext?: Record<string, unknown>;\n focus?: string;\n command?: string; // For PR comment triggers\n exec?: string; // For command execution (supports Liquid templates)\n stdin?: string; // Optional stdin input (supports Liquid templates)\n args?: string[] | Record<string, unknown>; // string[] deprecated for command args; Record for workflow inputs\n command_args?: string[]; // MCP stdio command arguments\n interpreter?: string;\n url?: string;\n method?: string;\n headers?: Record<string, string>;\n timeout?: number;\n metadata?: Record<string, unknown>;\n workingDirectory?: string;\n env?: EnvConfig;\n ai?: import('../types/config').AIProviderConfig;\n /** AI model to use for this check - overrides global setting */\n ai_model?: string;\n /** AI provider to use for this check - overrides global setting */\n ai_provider?: 'google' | 'anthropic' | 'openai' | string;\n /** Check name for sessionID and logging purposes */\n checkName?: string;\n /** Session ID for AI session management */\n sessionId?: string;\n /** Script content for 'script' provider */\n content?: string;\n [key: string]: unknown;\n}\n\n/**\n * Execution context passed to check providers\n */\nexport interface ExecutionContext {\n /** Session information for AI session reuse */\n parentSessionId?: string;\n reuseSession?: boolean;\n /** CLI message value (from --message argument) */\n cliMessage?: string;\n /** Conversation context - unified access to user message across transports (CLI, Slack, etc.) */\n conversation?: import('../types/bot').ConversationContext;\n /**\n * Stage-local baseline of output history lengths per check name.\n * When present, providers should expose an `outputs_history_stage` object in\n * Liquid/JS contexts that slices the global history from this baseline.\n * This enables stage-scoped assertions in the YAML test runner without\n * relying on global execution history.\n */\n stageHistoryBase?: Record<string, number>;\n /** Workflow inputs - available when executing within a workflow */\n workflowInputs?: Record<string, unknown>;\n /** Custom arguments passed from on_init 'with' directive */\n args?: Record<string, unknown>;\n /** SDK hooks for human input and check completion */\n hooks?: {\n onHumanInput?: (request: HumanInputRequest) => Promise<string>;\n onPromptCaptured?: (info: { step: string; provider: string; prompt: string }) => void;\n mockForStep?: (step: string) => unknown | undefined;\n /** Returns true if the mock for a step has been consumed (for loop termination) */\n isMockExhausted?: (step: string) => boolean;\n /** Called when a check completes - useful for streaming TUI updates */\n onCheckComplete?: (info: {\n checkId: string;\n result: { output?: unknown; content?: string };\n checkConfig?: { type?: string; group?: string; criticality?: string; schema?: unknown };\n }) => void;\n };\n /**\n * Optional execution mode hints. The core engine does not read environment\n * variables directly; callers (CLI, test runner) can set these flags to\n * request certain behaviors without polluting core logic with test-specific\n * branches.\n */\n mode?: {\n /** true when running under the YAML test runner */\n test?: boolean;\n /** post review comments from grouped execution paths (used by tests) */\n postGroupedComments?: boolean;\n /** reset per-run guard state before grouped execution */\n resetPerRunState?: boolean;\n };\n /**\n * Absolute timestamp (ms since epoch) by which this execution must complete.\n * Set by the engine from `Date.now() + timeout` and inherited by sub-workflows\n * so nested steps know how much time the parent has left.\n */\n deadline?: number;\n /** Optional event bus for emitting integration events (e.g., HumanInputRequested) */\n eventBus?: import('../event-bus/event-bus').EventBus;\n /** Optional webhook context (e.g., Slack Events API payload) */\n webhookContext?: { webhookData?: Map<string, unknown>; eventType?: string };\n /**\n * Callback for capturing AI responses - used by scheduler to store previousResponse\n * for recurring reminders. The text passed is the AI response before mrkdwn formatting.\n */\n responseCapture?: (text: string) => void;\n}\n\n/**\n * Abstract base class for all check providers\n * Implementing classes provide specific check functionality (AI, tool, script, etc.)\n */\nexport abstract class CheckProvider {\n /**\n * Get the unique name/type of this provider\n */\n abstract getName(): string;\n\n /**\n * Get a human-readable description of this provider\n */\n abstract getDescription(): string;\n\n /**\n * Validate provider-specific configuration\n * @param config The configuration to validate\n * @returns true if configuration is valid, false otherwise\n */\n abstract validateConfig(config: unknown): Promise<boolean>;\n\n /**\n * Execute the check on the given PR information\n * @param prInfo Information about the pull request\n * @param config Provider-specific configuration\n * @param dependencyResults Optional results from dependency checks that this check depends on\n * @param context Optional execution context with session info, hooks, and CLI state\n * @returns Review summary with scores, issues, and comments\n */\n abstract execute(\n prInfo: PRInfo,\n config: CheckProviderConfig,\n dependencyResults?: Map<string, ReviewSummary>,\n context?: ExecutionContext\n ): Promise<ReviewSummary>;\n\n /**\n * Get the list of configuration keys this provider supports\n * Used for documentation and validation\n */\n abstract getSupportedConfigKeys(): string[];\n\n /**\n * Check if this provider is available (e.g., has required API keys)\n * @returns true if provider can be used, false otherwise\n */\n abstract isAvailable(): Promise<boolean>;\n\n /**\n * Get provider requirements (e.g., environment variables needed)\n */\n abstract getRequirements(): string[];\n\n /**\n * Set webhook context for providers that need access to webhook data\n * This is optional and only used by http_input providers\n * @param webhookContext Map of endpoint paths to webhook data\n */\n setWebhookContext?(webhookContext: Map<string, unknown>): void;\n}\n","/**\n * Environment variable resolution utilities\n * Supports GitHub Actions-like syntax for referencing environment variables\n */\n\nimport { EnvConfig } from '../types/config';\n\n/**\n * Resolves environment variables in configuration values\n * Supports the following syntaxes:\n * - ${{ env.VARIABLE_NAME }} (GitHub Actions style)\n * - ${VARIABLE_NAME} (shell style)\n * - $VARIABLE_NAME (simple shell style)\n * - Direct environment variable names\n */\nexport class EnvironmentResolver {\n /**\n * Resolves a single configuration value that may contain environment variable references\n */\n static resolveValue(value: string | number | boolean): string | number | boolean {\n if (typeof value !== 'string') {\n return value;\n }\n\n // GitHub Actions style: ${{ env.VARIABLE_NAME }}\n let resolved = value.replace(/\\$\\{\\{\\s*env\\.([A-Z_][A-Z0-9_]*)\\s*\\}\\}/g, (match, envVar) => {\n return process.env[envVar] || match;\n });\n\n // Shell style: ${VARIABLE_NAME}\n resolved = resolved.replace(/\\$\\{([A-Z_][A-Z0-9_]*)\\}/g, (match, envVar) => {\n return process.env[envVar] || match;\n });\n\n // Simple shell style: $VARIABLE_NAME\n resolved = resolved.replace(/\\$([A-Z_][A-Z0-9_]*)/g, (match, envVar) => {\n return process.env[envVar] || match;\n });\n\n return resolved;\n }\n\n /**\n * Resolves all environment variables in an EnvConfig object\n */\n static resolveEnvConfig(envConfig: EnvConfig): EnvConfig {\n const resolved: EnvConfig = {};\n\n for (const [key, value] of Object.entries(envConfig)) {\n resolved[key] = this.resolveValue(value);\n }\n\n return resolved;\n }\n\n /**\n * Applies environment configuration to the process environment\n * This allows checks to access their specific environment variables\n */\n static applyEnvConfig(envConfig: EnvConfig): void {\n const resolved = this.resolveEnvConfig(envConfig);\n\n for (const [key, value] of Object.entries(resolved)) {\n if (value !== undefined) {\n process.env[key] = String(value);\n }\n }\n }\n\n /**\n * Creates a temporary environment for a specific check execution\n * Returns a cleanup function to restore the original environment\n */\n static withTemporaryEnv<T>(envConfig: EnvConfig, callback: () => T | Promise<T>): T | Promise<T> {\n const resolved = this.resolveEnvConfig(envConfig);\n const originalValues: Record<string, string | undefined> = {};\n\n // Store original values and apply new ones\n for (const [key, value] of Object.entries(resolved)) {\n originalValues[key] = process.env[key];\n if (value !== undefined) {\n process.env[key] = String(value);\n }\n }\n\n try {\n const result = callback();\n\n // If callback returns a promise, handle cleanup after it resolves\n if (result instanceof Promise) {\n return result.finally(() => {\n // Restore original values\n for (const [key, originalValue] of Object.entries(originalValues)) {\n if (originalValue === undefined) {\n delete process.env[key];\n } else {\n process.env[key] = originalValue;\n }\n }\n });\n }\n\n // Restore original values immediately for sync callbacks\n for (const [key, originalValue] of Object.entries(originalValues)) {\n if (originalValue === undefined) {\n delete process.env[key];\n } else {\n process.env[key] = originalValue;\n }\n }\n\n return result;\n } catch (error) {\n // Restore original values on error\n for (const [key, originalValue] of Object.entries(originalValues)) {\n if (originalValue === undefined) {\n delete process.env[key];\n } else {\n process.env[key] = originalValue;\n }\n }\n throw error;\n }\n }\n\n /**\n * Validates that all required environment variables are available\n */\n static validateRequiredEnvVars(envConfig: EnvConfig, requiredVars: string[]): string[] {\n const resolved = this.resolveEnvConfig(envConfig);\n const missing: string[] = [];\n\n for (const varName of requiredVars) {\n const value = resolved[varName] || process.env[varName];\n if (!value) {\n missing.push(varName);\n }\n }\n\n return missing;\n }\n\n /**\n * Resolves environment variables in HTTP headers\n * Each header value is processed through resolveValue to replace env var references\n */\n static resolveHeaders(headers: Record<string, string>): Record<string, string> {\n const resolved: Record<string, string> = {};\n for (const [key, value] of Object.entries(headers)) {\n resolved[key] = String(this.resolveValue(value));\n }\n return resolved;\n }\n\n /**\n * Sanitizes headers for logging/telemetry by redacting sensitive values\n * Headers like Authorization, API keys, and cookies are replaced with [REDACTED]\n */\n static sanitizeHeaders(headers: Record<string, string>): Record<string, string> {\n const sensitiveHeaders = ['authorization', 'x-api-key', 'cookie', 'set-cookie'];\n const sanitized: Record<string, string> = {};\n\n for (const [key, value] of Object.entries(headers)) {\n if (sensitiveHeaders.includes(key.toLowerCase())) {\n sanitized[key] = '[REDACTED]';\n } else {\n sanitized[key] = value;\n }\n }\n\n return sanitized;\n }\n}\n","/**\n * Shared issue normalization utilities.\n *\n * Used by MCP, UTCP, and command providers to extract and normalize\n * ReviewIssue objects from tool/command output.\n */\nimport { ReviewIssue } from '../reviewer';\n\n/**\n * Extract issues from tool output.\n * Handles: JSON strings, arrays of issues, objects with `issues` property, single issue objects.\n */\nexport function extractIssuesFromOutput(\n output: unknown,\n defaultRuleId?: string\n): { issues: ReviewIssue[]; remainingOutput: unknown } | null {\n if (output === null || output === undefined) {\n return null;\n }\n\n // If output is a string, try to parse as JSON\n if (typeof output === 'string') {\n try {\n const parsed = JSON.parse(output);\n return extractIssuesFromOutput(parsed, defaultRuleId);\n } catch {\n return null;\n }\n }\n\n // If output is an array of issues\n if (Array.isArray(output)) {\n const issues = normalizeIssueArray(output, defaultRuleId);\n if (issues) {\n return { issues, remainingOutput: undefined };\n }\n return null;\n }\n\n // If output is an object with issues property\n if (typeof output === 'object') {\n const record = output as Record<string, unknown>;\n\n if (Array.isArray(record.issues)) {\n const issues = normalizeIssueArray(record.issues, defaultRuleId);\n if (!issues) {\n return null;\n }\n\n const remaining = { ...record };\n delete (remaining as { issues?: unknown }).issues;\n\n return {\n issues,\n remainingOutput: Object.keys(remaining).length > 0 ? remaining : undefined,\n };\n }\n\n // Check if output itself is a single issue\n const singleIssue = normalizeIssue(record, defaultRuleId);\n if (singleIssue) {\n return { issues: [singleIssue], remainingOutput: undefined };\n }\n }\n\n return null;\n}\n\n/**\n * Normalize an array of issues. Returns null if any element cannot be normalized.\n */\nexport function normalizeIssueArray(\n values: unknown[],\n defaultRuleId?: string\n): ReviewIssue[] | null {\n const normalized: ReviewIssue[] = [];\n for (const value of values) {\n const issue = normalizeIssue(value, defaultRuleId);\n if (!issue) {\n return null;\n }\n normalized.push(issue);\n }\n return normalized;\n}\n\n/**\n * Normalize a single issue from raw data.\n * Accepts various field aliases (message/text/description, severity/level/priority, etc.)\n */\nexport function normalizeIssue(raw: unknown, defaultRuleId = 'tool'): ReviewIssue | null {\n if (!raw || typeof raw !== 'object') {\n return null;\n }\n\n const data = raw as Record<string, unknown>;\n\n // Only accept string values for issue message fields.\n // Non-string values (e.g. Slack's `message: {text: \"...\", ...}` object)\n // must not be coerced — they are API payloads, not issue descriptions.\n const rawMessage = data.message || data.text || data.description || data.summary;\n if (typeof rawMessage !== 'string') {\n return null;\n }\n const message = rawMessage.trim();\n if (!message) {\n return null;\n }\n\n const allowedSeverities = new Set(['info', 'warning', 'error', 'critical']);\n const severityRaw = toTrimmedString(data.severity || data.level || data.priority);\n let severity: ReviewIssue['severity'] = 'warning';\n if (severityRaw) {\n const lower = severityRaw.toLowerCase();\n if (allowedSeverities.has(lower)) {\n severity = lower as ReviewIssue['severity'];\n }\n }\n\n const allowedCategories = new Set(['security', 'performance', 'style', 'logic', 'documentation']);\n const categoryRaw = toTrimmedString(data.category || data.type || data.group);\n let category: ReviewIssue['category'] = 'logic';\n if (categoryRaw && allowedCategories.has(categoryRaw.toLowerCase())) {\n category = categoryRaw.toLowerCase() as ReviewIssue['category'];\n }\n\n const file = toTrimmedString(data.file || data.path || data.filename) || 'system';\n const line = toNumber(data.line || data.startLine || data.lineNumber) ?? 0;\n const endLine = toNumber(data.endLine || data.end_line || data.stopLine);\n const suggestion = toTrimmedString(data.suggestion);\n const replacement = toTrimmedString(data.replacement);\n const ruleId =\n toTrimmedString(data.ruleId || data.rule || data.id || data.check) || defaultRuleId;\n\n return {\n file,\n line,\n endLine: endLine ?? undefined,\n ruleId,\n message,\n severity,\n category,\n suggestion: suggestion || undefined,\n replacement: replacement || undefined,\n };\n}\n\nexport function toTrimmedString(value: unknown): string | null {\n if (typeof value === 'string') {\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n if (value !== null && value !== undefined && typeof value.toString === 'function') {\n const converted = String(value).trim();\n return converted.length > 0 ? converted : null;\n }\n return null;\n}\n\nexport function toNumber(value: unknown): number | null {\n if (value === null || value === undefined) {\n return null;\n }\n const num = Number(value);\n if (Number.isFinite(num)) {\n return Math.trunc(num);\n }\n return null;\n}\n","export type EnvMap = Record<string, string>;\n\n// Default: expose all env vars except a conservative denylist.\n// If VISOR_ALLOW_ENV is set and not '*', restrict to that allowlist.\n// VISOR_DENY_ENV can further mask exact keys or prefix* patterns.\nexport function buildSandboxEnv(input: NodeJS.ProcessEnv): EnvMap {\n const denyDefaults = [\n 'GITHUB_TOKEN',\n 'INPUT_GITHUB-TOKEN',\n 'ACTIONS_RUNTIME_TOKEN',\n 'ACTIONS_ID_TOKEN_REQUEST_TOKEN',\n 'AWS_ACCESS_KEY_ID',\n 'AWS_SECRET_ACCESS_KEY',\n 'AWS_SESSION_TOKEN',\n 'AZURE_CLIENT_SECRET',\n 'GOOGLE_APPLICATION_CREDENTIALS',\n 'OPENAI_API_KEY',\n 'ANTHROPIC_API_KEY',\n 'HUGGINGFACE_API_KEY',\n 'CLAUDE_CODE_API_KEY',\n 'PROBE_API_KEY',\n ];\n\n const denyExtra = (input.VISOR_DENY_ENV || '')\n .split(',')\n .map(s => s.trim())\n .filter(Boolean);\n const deny = Array.from(new Set([...denyDefaults, ...denyExtra]));\n const allowSpec = (input.VISOR_ALLOW_ENV || '*').trim();\n\n const denyMatch = (key: string): boolean => {\n for (const pat of deny) {\n if (!pat) continue;\n if (pat.endsWith('*')) {\n const prefix = pat.slice(0, -1);\n if (key.startsWith(prefix)) return true;\n } else if (key === pat) {\n return true;\n }\n }\n if (/(_TOKEN|_SECRET|_PASSWORD|_PRIVATE_KEY)$/i.test(key)) return true;\n return false;\n };\n\n const out: EnvMap = {};\n if (allowSpec !== '*') {\n const allow = allowSpec\n .split(',')\n .map(s => s.trim())\n .filter(Boolean);\n for (const key of allow) {\n const val = input[key];\n if (key && val !== undefined && !denyMatch(key)) out[key] = String(val);\n }\n return out;\n }\n\n for (const [k, v] of Object.entries(input)) {\n if (v === undefined || v === null) continue;\n if (denyMatch(k)) continue;\n out[k] = String(v);\n }\n return out;\n}\n","import { CheckProvider, CheckProviderConfig } from './check-provider.interface';\nimport { PRInfo } from '../pr-analyzer';\nimport { ReviewSummary, ReviewIssue } from '../reviewer';\nimport { logger } from '../logger';\nimport { Liquid } from 'liquidjs';\nimport { createExtendedLiquid } from '../liquid-extensions';\nimport Sandbox from '@nyariv/sandboxjs';\nimport { createSecureSandbox, compileAndRun } from '../utils/sandbox';\nimport { EnvironmentResolver } from '../utils/env-resolver';\nimport { extractIssuesFromOutput } from '../utils/issue-normalizer';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\n/**\n * UTCP Check Provider Configuration\n */\nexport interface UtcpCheckConfig extends CheckProviderConfig {\n /** UTCP manual source: URL string, file path string, or inline call template object */\n manual: string | Record<string, unknown>;\n /** Tool method name to call (format: manual_name.tool_name or just tool_name) */\n method: string;\n /** Arguments to pass to the UTCP tool (supports Liquid templates) */\n methodArgs?: Record<string, unknown>;\n /** Transform template for method arguments (Liquid) - overrides methodArgs */\n argsTransform?: string;\n /** UTCP variables for manual authentication/configuration */\n variables?: Record<string, string>;\n /** UTCP plugins to load (default: ['http']) */\n plugins?: string[];\n /** Transform template for output (Liquid) */\n transform?: string;\n /** Transform using JavaScript expressions */\n transform_js?: string;\n /** Timeout in seconds (default: 60) */\n timeout?: number;\n}\n\n/**\n * Check provider that calls UTCP (Universal Tool Calling Protocol) tools directly.\n * UTCP is a client-side protocol where tools publish JSON \"manuals\" describing\n * how to call them via their native protocols (HTTP, CLI, SSE, etc.).\n *\n * Supports manual discovery from:\n * - HTTP/HTTPS URLs (GET endpoint returning UTCP manual)\n * - Local JSON files\n * - Inline call template objects\n */\nexport class UtcpCheckProvider extends CheckProvider {\n private liquid: Liquid;\n private sandbox?: Sandbox;\n private sdkAvailable: boolean | null = null;\n\n constructor() {\n super();\n this.liquid = createExtendedLiquid({\n cache: false,\n strictFilters: false,\n strictVariables: false,\n });\n }\n\n getName(): string {\n return 'utcp';\n }\n\n getDescription(): string {\n return 'Call UTCP tools directly using their native protocols (HTTP, CLI, SSE)';\n }\n\n async validateConfig(config: unknown): Promise<boolean> {\n if (!config || typeof config !== 'object') {\n return false;\n }\n\n const cfg = config as UtcpCheckConfig;\n\n // Type must be utcp\n if (cfg.type !== 'utcp') {\n return false;\n }\n\n // Manual is required\n if (!cfg.manual) {\n logger.error('UTCP check requires a manual (URL, file path, or inline call template)');\n return false;\n }\n\n // Method is required\n if (!cfg.method || typeof cfg.method !== 'string') {\n logger.error('UTCP check requires a method name');\n return false;\n }\n\n // Validate manual format\n if (typeof cfg.manual === 'string') {\n // URL validation\n if (cfg.manual.startsWith('http://') || cfg.manual.startsWith('https://')) {\n try {\n const parsedUrl = new URL(cfg.manual);\n if (parsedUrl.protocol !== 'http:' && parsedUrl.protocol !== 'https:') {\n logger.error(`Invalid URL protocol for UTCP manual: ${parsedUrl.protocol}`);\n return false;\n }\n } catch {\n logger.error(`Invalid URL format for UTCP manual: ${cfg.manual}`);\n return false;\n }\n }\n // File paths are validated at execution time\n } else if (typeof cfg.manual === 'object') {\n // Inline call template must have call_template_type\n if (!cfg.manual.call_template_type) {\n logger.error('Inline UTCP manual must have call_template_type');\n return false;\n }\n } else {\n logger.error('UTCP manual must be a URL string, file path, or inline call template object');\n return false;\n }\n\n return true;\n }\n\n async execute(\n prInfo: PRInfo,\n config: CheckProviderConfig,\n dependencyResults?: Map<string, ReviewSummary>,\n sessionInfo?: any\n ): Promise<ReviewSummary> {\n const cfg = config as UtcpCheckConfig;\n\n // Test hook: mock output for this step\n try {\n const stepName = (config as any).checkName || 'unknown';\n const mock = sessionInfo?.hooks?.mockForStep?.(String(stepName));\n if (mock !== undefined) {\n const ms = mock as any;\n const issuesArr = Array.isArray(ms?.issues) ? (ms.issues as any[]) : [];\n const out = ms && typeof ms === 'object' && 'output' in ms ? ms.output : ms;\n return {\n issues: issuesArr,\n ...(out !== undefined ? { output: out } : {}),\n } as ReviewSummary;\n }\n } catch {}\n\n try {\n // Build template context\n const templateContext = {\n pr: {\n number: prInfo.number,\n title: prInfo.title,\n author: prInfo.author,\n branch: prInfo.head,\n base: prInfo.base,\n },\n files: prInfo.files,\n fileCount: prInfo.files.length,\n outputs: this.buildOutputContext(dependencyResults),\n args: sessionInfo?.args || {},\n env: this.getSafeEnvironmentVariables(),\n inputs: (config as any).workflowInputs || sessionInfo?.workflowInputs || {},\n };\n\n // Render method arguments\n let methodArgs = cfg.methodArgs || {};\n if (cfg.argsTransform) {\n const rendered = await this.liquid.parseAndRender(cfg.argsTransform, templateContext);\n try {\n methodArgs = JSON.parse(rendered);\n } catch (error) {\n logger.error(`Failed to parse argsTransform as JSON: ${error}`);\n return {\n issues: [\n {\n file: 'utcp',\n line: 0,\n ruleId: 'utcp/args_transform_error',\n message: `Failed to parse argsTransform: ${error instanceof Error ? error.message : 'Unknown error'}`,\n severity: 'error',\n category: 'logic',\n },\n ],\n };\n }\n } else if (methodArgs && typeof methodArgs === 'object') {\n // Recursively render Liquid templates in methodArgs\n const renderValue = async (val: unknown): Promise<unknown> => {\n if (typeof val === 'string' && (val.includes('{{') || val.includes('{%'))) {\n return await this.liquid.parseAndRender(val, templateContext);\n } else if (val && typeof val === 'object' && !Array.isArray(val)) {\n const rendered: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(val)) {\n rendered[k] = await renderValue(v);\n }\n return rendered;\n } else if (Array.isArray(val)) {\n return Promise.all(val.map(item => renderValue(item)));\n }\n return val;\n };\n methodArgs = (await renderValue(methodArgs)) as Record<string, unknown>;\n }\n\n // Resolve variables through environment resolver\n const resolvedVariables: Record<string, string> = {};\n if (cfg.variables) {\n for (const [key, value] of Object.entries(cfg.variables)) {\n resolvedVariables[key] = String(EnvironmentResolver.resolveValue(value));\n }\n }\n\n // Call tool via shared static method (handles SDK import, client lifecycle, timeout)\n const result = await UtcpCheckProvider.callTool(cfg.manual, cfg.method, methodArgs, {\n variables: resolvedVariables,\n plugins: cfg.plugins || ['http'],\n timeoutMs: (cfg.timeout || 60) * 1000,\n });\n\n {\n // Apply transforms\n let finalOutput = result;\n\n // Apply Liquid transform\n if (cfg.transform) {\n try {\n const transformContext = {\n ...templateContext,\n output: result,\n };\n const rendered = await this.liquid.parseAndRender(cfg.transform, transformContext);\n try {\n finalOutput = JSON.parse(rendered.trim());\n } catch {\n finalOutput = rendered.trim();\n }\n } catch (error) {\n logger.error(`Failed to apply Liquid transform: ${error}`);\n // Throw to let the outer finally close the client before returning\n throw new Error(\n `Failed to apply transform: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n }\n\n // Apply JavaScript transform\n if (cfg.transform_js) {\n try {\n this.sandbox = createSecureSandbox();\n const scope = {\n output: finalOutput,\n pr: templateContext.pr,\n files: templateContext.files,\n outputs: templateContext.outputs,\n env: templateContext.env,\n };\n finalOutput = compileAndRun<unknown>(\n this.sandbox,\n `return (${cfg.transform_js});`,\n scope,\n { injectLog: true, wrapFunction: false, logPrefix: '[utcp:transform_js]' }\n );\n } catch (error) {\n logger.error(`Failed to apply JavaScript transform: ${error}`);\n // Throw to let the outer finally close the client before returning\n throw new Error(\n `Failed to apply JavaScript transform: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n }\n\n // Extract issues from output\n const extracted = extractIssuesFromOutput(finalOutput, 'utcp');\n if (extracted) {\n return {\n issues: extracted.issues,\n ...(extracted.remainingOutput ? { output: extracted.remainingOutput } : {}),\n } as ReviewSummary;\n }\n\n // Return output directly\n return {\n issues: [],\n ...(finalOutput ? { output: finalOutput } : {}),\n } as ReviewSummary;\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n const isTimeout = this.isTimeoutError(error);\n const severity: ReviewIssue['severity'] = isTimeout ? 'warning' : 'error';\n const ruleId = isTimeout ? 'utcp/timeout' : 'utcp/execution_error';\n\n if (isTimeout) {\n logger.warn(`UTCP check timed out: ${errorMessage}`);\n } else {\n logger.error(`UTCP check failed: ${errorMessage}`);\n }\n\n return {\n issues: [\n {\n file: 'utcp',\n line: 0,\n ruleId,\n message: isTimeout\n ? `UTCP check timed out: ${errorMessage}`\n : `UTCP check failed: ${errorMessage}`,\n severity,\n category: 'logic',\n },\n ],\n };\n }\n }\n\n /**\n * Resolve manual config to a UTCP call template object.\n * Shared utility used by both the standalone UTCP provider and the AI check provider's UTCP-to-MCP bridge.\n */\n static async resolveManualCallTemplate(\n manual: string | Record<string, unknown>\n ): Promise<Record<string, unknown>> {\n if (typeof manual === 'object') {\n if (!manual.call_template_type) {\n throw new Error('Inline manual must have call_template_type');\n }\n // Ensure it has a name\n if (!manual.name) {\n manual.name = 'inline';\n }\n return manual;\n }\n\n // URL-based discovery\n if (manual.startsWith('http://') || manual.startsWith('https://')) {\n return {\n name: UtcpCheckProvider.deriveManualName(manual),\n call_template_type: 'http',\n url: manual,\n http_method: 'GET',\n };\n }\n\n // File-based discovery\n\n // Security: reject null bytes that could bypass path validation\n if (manual.includes('\\0')) {\n throw new Error('Invalid UTCP manual path: null bytes are not allowed');\n }\n\n const resolvedPath = path.resolve(manual);\n\n // Security: ensure resolved path stays within cwd (prevent path traversal)\n const cwd = path.resolve(process.cwd());\n const normalizedResolved = path.normalize(resolvedPath);\n const cwdPrefix = cwd.endsWith(path.sep) ? cwd : cwd + path.sep;\n if (normalizedResolved !== cwd && !normalizedResolved.startsWith(cwdPrefix)) {\n throw new Error(\n `Path traversal detected: \"${manual}\" resolves outside the project directory. ` +\n `UTCP manual paths must be within the project directory.`\n );\n }\n\n // Security: resolve symlinks and re-validate to prevent symlink attacks\n if (fs.existsSync(resolvedPath)) {\n const realPath = fs.realpathSync(resolvedPath);\n if (realPath !== cwd && !realPath.startsWith(cwdPrefix)) {\n throw new Error(\n `Symlink traversal detected: \"${manual}\" points outside the project directory via symlink.`\n );\n }\n }\n\n // Validate file exists and is readable\n if (!fs.existsSync(resolvedPath)) {\n throw new Error(`UTCP manual file not found: ${resolvedPath}`);\n }\n\n // Read and parse the file\n let content: string;\n try {\n content = fs.readFileSync(resolvedPath, 'utf-8');\n } catch (err) {\n throw new Error(\n `Failed to read UTCP manual file: ${resolvedPath}: ${err instanceof Error ? err.message : 'Unknown error'}`\n );\n }\n\n let parsed: Record<string, unknown>;\n try {\n parsed = JSON.parse(content);\n } catch (err) {\n throw new Error(\n `Failed to parse UTCP manual file as JSON: ${resolvedPath}: ${err instanceof Error ? err.message : 'Unknown error'}`\n );\n }\n\n if (parsed.call_template_type) {\n // File contains a call template directly - use as-is\n if (!parsed.name) {\n parsed.name = path.basename(resolvedPath, path.extname(resolvedPath));\n }\n return parsed;\n }\n\n // File contains a UTCP manual - use file call template to let SDK handle it\n // Load the file plugin for file-based manuals\n try {\n await import('@utcp/file');\n } catch {\n logger.debug('UTCP @utcp/file plugin not available, attempting direct parse');\n }\n\n return {\n name: parsed.name || path.basename(resolvedPath, path.extname(resolvedPath)),\n call_template_type: 'file',\n file_path: resolvedPath,\n allowed_communication_protocols: ['file', 'http', 'https'],\n };\n }\n\n /**\n * Derive a manual name from a URL.\n * Shared utility for UTCP manual name derivation.\n */\n static deriveManualName(url: string): string {\n try {\n const parsed = new URL(url);\n // Use hostname with dots replaced by underscores\n return parsed.hostname.replace(/\\./g, '_').replace(/-/g, '_');\n } catch {\n return 'utcp_manual';\n }\n }\n\n /**\n * Call a UTCP tool directly. Shared by both the standalone provider and the MCP-bridge SSE server.\n * Handles SDK import, plugin loading, client creation, tool calling, and cleanup.\n */\n static async callTool(\n manual: string | Record<string, unknown>,\n toolName: string,\n args: Record<string, unknown>,\n options?: {\n variables?: Record<string, string>;\n plugins?: string[];\n timeoutMs?: number;\n }\n ): Promise<unknown> {\n const variables = options?.variables || {};\n const plugins = options?.plugins || ['http'];\n const timeoutMs = options?.timeoutMs || 60000;\n\n // Dynamic import UTCP SDK and plugins\n const { UtcpClient } = await import('@utcp/sdk');\n for (const plugin of plugins) {\n try {\n await import(`@utcp/${plugin}`);\n } catch {\n logger.debug(`UTCP plugin @utcp/${plugin} not available`);\n }\n }\n\n // Resolve manual to call template\n const callTemplate = await UtcpCheckProvider.resolveManualCallTemplate(manual);\n\n // Create client\n const client = await UtcpClient.create(process.cwd(), {\n manual_call_templates: [callTemplate],\n variables,\n } as any);\n\n try {\n // Resolve tool name - try exact match first, then suffix match\n let resolvedToolName = toolName;\n try {\n const tools = await client.getTools();\n const toolNames = tools.map((t: any) => t.name as string);\n logger.debug(`UTCP tools available: ${JSON.stringify(toolNames)}`);\n\n if (!toolNames.includes(resolvedToolName)) {\n const suffixMatch = toolNames.find((name: string) =>\n name.endsWith(`.${resolvedToolName}`)\n );\n if (suffixMatch) {\n logger.debug(\n `UTCP method '${resolvedToolName}' resolved to '${suffixMatch}' via suffix match`\n );\n resolvedToolName = suffixMatch;\n }\n }\n } catch (err) {\n logger.debug(`Failed to list UTCP tools for name resolution: ${err}`);\n }\n\n // Call tool with timeout (clear timer on success to avoid resource leak)\n let timer: ReturnType<typeof setTimeout> | undefined;\n const result = await Promise.race([\n client.callTool(resolvedToolName, args as Record<string, any>),\n new Promise<never>((_, reject) => {\n timer = setTimeout(\n () => reject(new Error(`UTCP tool '${toolName}' timed out after ${timeoutMs}ms`)),\n timeoutMs\n );\n }),\n ]).finally(() => clearTimeout(timer));\n\n return result;\n } finally {\n try {\n if (typeof (client as any).close === 'function') {\n await (client as any).close();\n }\n } catch {}\n }\n }\n\n /**\n * Check if an error is a timeout error\n */\n private isTimeoutError(error: unknown): boolean {\n const err = error as { message?: unknown; code?: unknown; cause?: unknown };\n const message = typeof err?.message === 'string' ? err.message.toLowerCase() : '';\n const code = typeof err?.code === 'string' ? err.code.toLowerCase() : '';\n return message.includes('timeout') || message.includes('timed out') || code.includes('timeout');\n }\n\n /**\n * Build output context from dependency results\n */\n private buildOutputContext(\n dependencyResults?: Map<string, ReviewSummary>\n ): Record<string, unknown> {\n if (!dependencyResults) {\n return {};\n }\n const outputs: Record<string, unknown> = {};\n for (const [checkName, result] of dependencyResults) {\n const summary = result as ReviewSummary & { output?: unknown };\n outputs[checkName] = summary.output !== undefined ? summary.output : summary;\n }\n return outputs;\n }\n\n /**\n * Get safe environment variables\n */\n private getSafeEnvironmentVariables(): Record<string, string> {\n const safeVars: Record<string, string> = {};\n const { buildSandboxEnv } = require('../utils/env-exposure');\n const merged = buildSandboxEnv(process.env);\n for (const [key, value] of Object.entries(merged)) {\n safeVars[key] = String(value);\n }\n safeVars['PWD'] = process.cwd();\n return safeVars;\n }\n\n getSupportedConfigKeys(): string[] {\n return [\n 'type',\n 'manual',\n 'method',\n 'methodArgs',\n 'argsTransform',\n 'variables',\n 'plugins',\n 'transform',\n 'transform_js',\n 'timeout',\n 'depends_on',\n 'on',\n 'if',\n 'group',\n ];\n }\n\n async isAvailable(): Promise<boolean> {\n if (this.sdkAvailable !== null) {\n return this.sdkAvailable;\n }\n try {\n await import('@utcp/sdk');\n this.sdkAvailable = true;\n } catch {\n this.sdkAvailable = false;\n }\n return this.sdkAvailable;\n }\n\n getRequirements(): string[] {\n return [\n '@utcp/sdk package installed',\n 'UTCP manual source (URL, file path, or inline)',\n 'Tool method name',\n ];\n }\n}\n"],"mappings":"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","names":["buildSandboxEnv"]}
@@ -1,33 +0,0 @@
1
- import {
2
- __esm
3
- } from "./chunk-J7LXIPZS.mjs";
4
-
5
- // src/agent-protocol/task-trace-resolution.ts
6
- async function resolveTaskTraceReference(metadata) {
7
- const traceFile = metadata?.trace_file;
8
- let traceId = metadata?.trace_id;
9
- if (!traceId && traceFile) {
10
- try {
11
- const { readTraceIdFromFile } = await import("./trace-serializer-EBHTHZYT.mjs");
12
- traceId = await readTraceIdFromFile(traceFile) || void 0;
13
- } catch {
14
- traceId = void 0;
15
- }
16
- }
17
- return {
18
- traceId,
19
- traceFile,
20
- primaryRef: traceId || traceFile || void 0
21
- };
22
- }
23
- var init_task_trace_resolution = __esm({
24
- "src/agent-protocol/task-trace-resolution.ts"() {
25
- "use strict";
26
- }
27
- });
28
-
29
- export {
30
- resolveTaskTraceReference,
31
- init_task_trace_resolution
32
- };
33
- //# sourceMappingURL=chunk-WZQMTD7W.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/agent-protocol/task-trace-resolution.ts"],"sourcesContent":["export interface TaskTraceMetadata {\n trace_id?: string;\n trace_file?: string;\n}\n\nexport interface ResolvedTaskTrace {\n traceId?: string;\n traceFile?: string;\n primaryRef?: string;\n}\n\nexport async function resolveTaskTraceReference(\n metadata?: TaskTraceMetadata | null\n): Promise<ResolvedTaskTrace> {\n const traceFile = metadata?.trace_file;\n let traceId = metadata?.trace_id;\n\n if (!traceId && traceFile) {\n try {\n const { readTraceIdFromFile } = await import('./trace-serializer');\n traceId = (await readTraceIdFromFile(traceFile)) || undefined;\n } catch {\n traceId = undefined;\n }\n }\n\n return {\n traceId,\n traceFile,\n primaryRef: traceId || traceFile || undefined,\n };\n}\n"],"mappings":";;;;;AAWA,eAAsB,0BACpB,UAC4B;AAC5B,QAAM,YAAY,UAAU;AAC5B,MAAI,UAAU,UAAU;AAExB,MAAI,CAAC,WAAW,WAAW;AACzB,QAAI;AACF,YAAM,EAAE,oBAAoB,IAAI,MAAM,OAAO,iCAAoB;AACjE,gBAAW,MAAM,oBAAoB,SAAS,KAAM;AAAA,IACtD,QAAQ;AACN,gBAAU;AAAA,IACZ;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,YAAY,WAAW,aAAa;AAAA,EACtC;AACF;AA/BA;AAAA;AAAA;AAAA;AAAA;","names":[]}
@@ -1,197 +0,0 @@
1
- import {
2
- __esm,
3
- __export
4
- } from "./chunk-J7LXIPZS.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-XPRWKMZT.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-XXAEN5KU.mjs.map
@@ -1 +0,0 @@
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":[]}