@probelabs/visor 0.1.175 → 0.1.176

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 (73) hide show
  1. package/defaults/assistant.yaml +16 -0
  2. package/defaults/code-talk.yaml +5 -6
  3. package/dist/ai-review-service.d.ts.map +1 -1
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/defaults/assistant.yaml +16 -0
  6. package/dist/defaults/code-talk.yaml +5 -6
  7. package/dist/index.js +117 -32
  8. package/dist/output/traces/{run-2026-03-09T18-49-07-663Z.ndjson → run-2026-03-10T15-37-04-236Z.ndjson} +84 -84
  9. package/dist/{traces/run-2026-03-09T18-49-46-345Z.ndjson → output/traces/run-2026-03-10T15-37-44-748Z.ndjson} +1876 -1876
  10. package/dist/providers/ai-check-provider.d.ts.map +1 -1
  11. package/dist/sdk/{a2a-frontend-ORLAU5GK.mjs → a2a-frontend-W54ZZ32L.mjs} +2 -2
  12. package/dist/sdk/{check-provider-registry-7JPPJHVM.mjs → check-provider-registry-7HSDAKHQ.mjs} +3 -3
  13. package/dist/sdk/{check-provider-registry-QCDV3SI6.mjs → check-provider-registry-MJYNLB37.mjs} +6 -6
  14. package/dist/sdk/{check-provider-registry-O36CQEGD.mjs → check-provider-registry-VE6LQPLY.mjs} +3 -3
  15. package/dist/sdk/{chunk-TAK5HLAR.mjs → chunk-4E34HRCW.mjs} +69 -30
  16. package/dist/sdk/chunk-4E34HRCW.mjs.map +1 -0
  17. package/dist/sdk/{chunk-QAO73GUX.mjs → chunk-66PTDQAO.mjs} +3 -3
  18. package/dist/sdk/{chunk-MLXGCLZJ.mjs → chunk-MM3TGVQ4.mjs} +6 -2
  19. package/dist/sdk/chunk-MM3TGVQ4.mjs.map +1 -0
  20. package/dist/sdk/{chunk-FZPCP444.mjs → chunk-OK4MLC3R.mjs} +69 -30
  21. package/dist/sdk/chunk-OK4MLC3R.mjs.map +1 -0
  22. package/dist/sdk/{chunk-YVVOG7RP.mjs → chunk-R3FNZRE4.mjs} +77 -38
  23. package/dist/sdk/chunk-R3FNZRE4.mjs.map +1 -0
  24. package/dist/sdk/{chunk-HNK5ZJ2L.mjs → chunk-SEA2FWEC.mjs} +2 -2
  25. package/dist/sdk/{chunk-4FGX4SA6.mjs → chunk-Y2DYDGGY.mjs} +2 -2
  26. package/dist/sdk/{chunk-4FGX4SA6.mjs.map → chunk-Y2DYDGGY.mjs.map} +1 -1
  27. package/dist/sdk/{config-4JMBJKWS.mjs → config-OOUMTCEA.mjs} +2 -2
  28. package/dist/sdk/{failure-condition-evaluator-RM5JJS4Q.mjs → failure-condition-evaluator-RTT5SLVL.mjs} +3 -3
  29. package/dist/sdk/{github-frontend-O5IAWXL5.mjs → github-frontend-C4GG62PI.mjs} +3 -3
  30. package/dist/sdk/{host-WTJBWO4T.mjs → host-6GGO2BQE.mjs} +3 -3
  31. package/dist/sdk/{routing-AWOHU2WP.mjs → routing-DXVYOXAS.mjs} +4 -4
  32. package/dist/sdk/{schedule-tool-XVSYLH4Z.mjs → schedule-tool-GKKVOQB7.mjs} +3 -3
  33. package/dist/sdk/{schedule-tool-L5G2BRIG.mjs → schedule-tool-LL7XDILD.mjs} +6 -6
  34. package/dist/sdk/{schedule-tool-DF5WUVYV.mjs → schedule-tool-R7NSHTPJ.mjs} +3 -3
  35. package/dist/sdk/{schedule-tool-handler-CFMFHDUL.mjs → schedule-tool-handler-5GTQ6SFI.mjs} +3 -3
  36. package/dist/sdk/{schedule-tool-handler-JGWA4N3C.mjs → schedule-tool-handler-O3L2R5OJ.mjs} +3 -3
  37. package/dist/sdk/{schedule-tool-handler-UJ4RFTW2.mjs → schedule-tool-handler-ZZGJ3UFR.mjs} +6 -6
  38. package/dist/sdk/sdk.js +66 -23
  39. package/dist/sdk/sdk.js.map +1 -1
  40. package/dist/sdk/sdk.mjs +5 -5
  41. package/dist/sdk/{trace-helpers-4ERTVCZG.mjs → trace-helpers-CECHXDLI.mjs} +2 -2
  42. package/dist/sdk/{workflow-check-provider-Z6U7FZAF.mjs → workflow-check-provider-AX7IRQEZ.mjs} +3 -3
  43. package/dist/sdk/{workflow-check-provider-ETM452BO.mjs → workflow-check-provider-EY6VSMNG.mjs} +3 -3
  44. package/dist/sdk/{workflow-check-provider-I3XLJP6V.mjs → workflow-check-provider-HZQGJFOU.mjs} +6 -6
  45. package/dist/test-runner/index.d.ts.map +1 -1
  46. package/dist/traces/{run-2026-03-09T18-49-07-663Z.ndjson → run-2026-03-10T15-37-04-236Z.ndjson} +84 -84
  47. package/dist/{output/traces/run-2026-03-09T18-49-46-345Z.ndjson → traces/run-2026-03-10T15-37-44-748Z.ndjson} +1876 -1876
  48. package/package.json +1 -1
  49. package/dist/sdk/chunk-FZPCP444.mjs.map +0 -1
  50. package/dist/sdk/chunk-MLXGCLZJ.mjs.map +0 -1
  51. package/dist/sdk/chunk-TAK5HLAR.mjs.map +0 -1
  52. package/dist/sdk/chunk-YVVOG7RP.mjs.map +0 -1
  53. /package/dist/sdk/{a2a-frontend-ORLAU5GK.mjs.map → a2a-frontend-W54ZZ32L.mjs.map} +0 -0
  54. /package/dist/sdk/{check-provider-registry-7JPPJHVM.mjs.map → check-provider-registry-7HSDAKHQ.mjs.map} +0 -0
  55. /package/dist/sdk/{check-provider-registry-O36CQEGD.mjs.map → check-provider-registry-MJYNLB37.mjs.map} +0 -0
  56. /package/dist/sdk/{check-provider-registry-QCDV3SI6.mjs.map → check-provider-registry-VE6LQPLY.mjs.map} +0 -0
  57. /package/dist/sdk/{chunk-QAO73GUX.mjs.map → chunk-66PTDQAO.mjs.map} +0 -0
  58. /package/dist/sdk/{chunk-HNK5ZJ2L.mjs.map → chunk-SEA2FWEC.mjs.map} +0 -0
  59. /package/dist/sdk/{config-4JMBJKWS.mjs.map → config-OOUMTCEA.mjs.map} +0 -0
  60. /package/dist/sdk/{failure-condition-evaluator-RM5JJS4Q.mjs.map → failure-condition-evaluator-RTT5SLVL.mjs.map} +0 -0
  61. /package/dist/sdk/{github-frontend-O5IAWXL5.mjs.map → github-frontend-C4GG62PI.mjs.map} +0 -0
  62. /package/dist/sdk/{host-WTJBWO4T.mjs.map → host-6GGO2BQE.mjs.map} +0 -0
  63. /package/dist/sdk/{routing-AWOHU2WP.mjs.map → routing-DXVYOXAS.mjs.map} +0 -0
  64. /package/dist/sdk/{schedule-tool-DF5WUVYV.mjs.map → schedule-tool-GKKVOQB7.mjs.map} +0 -0
  65. /package/dist/sdk/{schedule-tool-L5G2BRIG.mjs.map → schedule-tool-LL7XDILD.mjs.map} +0 -0
  66. /package/dist/sdk/{schedule-tool-XVSYLH4Z.mjs.map → schedule-tool-R7NSHTPJ.mjs.map} +0 -0
  67. /package/dist/sdk/{schedule-tool-handler-CFMFHDUL.mjs.map → schedule-tool-handler-5GTQ6SFI.mjs.map} +0 -0
  68. /package/dist/sdk/{schedule-tool-handler-JGWA4N3C.mjs.map → schedule-tool-handler-O3L2R5OJ.mjs.map} +0 -0
  69. /package/dist/sdk/{schedule-tool-handler-UJ4RFTW2.mjs.map → schedule-tool-handler-ZZGJ3UFR.mjs.map} +0 -0
  70. /package/dist/sdk/{trace-helpers-4ERTVCZG.mjs.map → trace-helpers-CECHXDLI.mjs.map} +0 -0
  71. /package/dist/sdk/{workflow-check-provider-ETM452BO.mjs.map → workflow-check-provider-AX7IRQEZ.mjs.map} +0 -0
  72. /package/dist/sdk/{workflow-check-provider-I3XLJP6V.mjs.map → workflow-check-provider-EY6VSMNG.mjs.map} +0 -0
  73. /package/dist/sdk/{workflow-check-provider-Z6U7FZAF.mjs.map → workflow-check-provider-HZQGJFOU.mjs.map} +0 -0
@@ -855,6 +855,22 @@ steps:
855
855
  - When a tool returns an error, explain what happened and suggest alternatives
856
856
  - **CRITICAL: Always use `attempt_completion` tool to submit your final response** - this enables validation of your actions before the response is finalized
857
857
 
858
+ ## CRITICAL: You are an ORCHESTRATOR — Delegate Code Work to Skill Tools
859
+ You are a high-level orchestrator. You MUST NOT read, search, or modify code yourself.
860
+ Delegate ALL code-related work to the appropriate skill tools:
861
+
862
+ - **Code exploration/search/reading** → use the `code-explorer` / `code-talk` tool
863
+ - **Code modifications, file edits, PRs** → use the `engineer` tool
864
+ - **NEVER use bash for code operations** — no grep, find, cat, sed, awk, git diff, or
865
+ any command that reads, searches, or modifies source code files
866
+ - **NEVER use file read/edit/search tools** on code — that is what skill tools are for
867
+
868
+ Bash IS allowed for non-code tasks: curl, API calls, gh CLI queries, jq, etc.
869
+ The rule is simple: if it touches source code → delegate to a skill tool.
870
+
871
+ If you catch yourself about to use bash or file tools for code operations — STOP and
872
+ delegate to the correct skill tool instead.
873
+
858
874
  ## CRITICAL: Preserve Tool Output Details
859
875
  When tools return detailed data (lists, analytics, search results):
860
876
  - **DO NOT summarize or compress** the tool output
@@ -491,14 +491,13 @@ steps:
491
491
  - "git:rev-parse:*"
492
492
  - "git:ls-files:*"
493
493
  - "git:ls-tree:*"
494
- # File operations
494
+ - "git:worktree:list:*"
495
+ - "git:worktree:remove:*"
496
+ # File operations — ONLY ls and wc allowed
497
+ # Do NOT use cat/grep/find/head/tail for code exploration —
498
+ # use search() and extract() tools instead, they are faster and more accurate
495
499
  - "ls:*"
496
- - "find:*"
497
- - "cat:*"
498
- - "head:*"
499
- - "tail:*"
500
500
  - "wc:*"
501
- - "grep:*"
502
501
  # GitHub CLI read-only operations
503
502
  - "gh:run:*"
504
503
  - "gh:run:list:*"
@@ -1 +1 @@
1
- {"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/ai-review-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/ai-review-service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/config.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,WAAW,EAGX,YAAY,EAIZ,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAOzC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,YAAY,EAU9C,CAAC;AAEX;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,eAAe,CAiBrB;IACF,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,kBAAkB,CAAgE;IAC1F,OAAO,CAAC,mBAAmB,CAA2D;IAEtF;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;OAEG;IACU,UAAU,CACrB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,WAAW,CAAC;IAwHvB;;;OAGG;IACU,oBAAoB,CAC/B,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,EACzB,OAAO,GAAE,iBAAiB,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,GACrD,OAAO,CAAC,WAAW,CAAC;IAoDvB;;OAEG;IACU,iBAAiB,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,WAAW,CAAC;IA4CrF;;OAEG;YACW,qBAAqB;IAiBnC;;OAEG;IACU,gBAAgB,IAAI,OAAO,CAAC,WAAW,CAAC;IAgBrD;;OAEG;IACI,wBAAwB,IAAI,WAAW,GAAG,IAAI;IA0FrD;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB;;;OAGG;YACW,uBAAuB;IAuGrC;;OAEG;YACW,aAAa;IAuB3B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAgC/B;;OAEG;IACI,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,UAAU,GAAG,YAAY;IAqB9F;;OAEG;IACU,0BAA0B,IAAI,OAAO,CAAC;QACjD,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,oBAAoB,EAAE,oBAAoB,CAAC;KAC5C,CAAC;IA2BF;;;;OAIG;IACI,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,UAAQ,GAAG,IAAI;IA4VzE;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAuL7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA8T3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmM5B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA0DhC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAwI7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA6DzB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA6EhC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA+B5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CA6B1B"}
1
+ {"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/config.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,WAAW,EAGX,YAAY,EAIZ,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAOzC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,YAAY,EAc9C,CAAC;AAEX;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,eAAe,CAiBrB;IACF,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,kBAAkB,CAAgE;IAC1F,OAAO,CAAC,mBAAmB,CAA2D;IAEtF;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;OAEG;IACU,UAAU,CACrB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,WAAW,CAAC;IAwHvB;;;OAGG;IACU,oBAAoB,CAC/B,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,EACzB,OAAO,GAAE,iBAAiB,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,GACrD,OAAO,CAAC,WAAW,CAAC;IAoDvB;;OAEG;IACU,iBAAiB,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,WAAW,CAAC;IA4CrF;;OAEG;YACW,qBAAqB;IAiBnC;;OAEG;IACU,gBAAgB,IAAI,OAAO,CAAC,WAAW,CAAC;IAgBrD;;OAEG;IACI,wBAAwB,IAAI,WAAW,GAAG,IAAI;IA0FrD;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB;;;OAGG;YACW,uBAAuB;IAuGrC;;OAEG;YACW,aAAa;IAuB3B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAgC/B;;OAEG;IACI,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,UAAU,GAAG,YAAY;IAqB9F;;OAEG;IACU,0BAA0B,IAAI,OAAO,CAAC;QACjD,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,oBAAoB,EAAE,oBAAoB,CAAC;KAC5C,CAAC;IA2BF;;;;OAIG;IACI,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,UAAQ,GAAG,IAAI;IA4VzE;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAuL7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA8T3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmM5B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA0DhC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAwI7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA6DzB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA6EhC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA+B5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CA6B1B"}
@@ -855,6 +855,22 @@ steps:
855
855
  - When a tool returns an error, explain what happened and suggest alternatives
856
856
  - **CRITICAL: Always use `attempt_completion` tool to submit your final response** - this enables validation of your actions before the response is finalized
857
857
 
858
+ ## CRITICAL: You are an ORCHESTRATOR — Delegate Code Work to Skill Tools
859
+ You are a high-level orchestrator. You MUST NOT read, search, or modify code yourself.
860
+ Delegate ALL code-related work to the appropriate skill tools:
861
+
862
+ - **Code exploration/search/reading** → use the `code-explorer` / `code-talk` tool
863
+ - **Code modifications, file edits, PRs** → use the `engineer` tool
864
+ - **NEVER use bash for code operations** — no grep, find, cat, sed, awk, git diff, or
865
+ any command that reads, searches, or modifies source code files
866
+ - **NEVER use file read/edit/search tools** on code — that is what skill tools are for
867
+
868
+ Bash IS allowed for non-code tasks: curl, API calls, gh CLI queries, jq, etc.
869
+ The rule is simple: if it touches source code → delegate to a skill tool.
870
+
871
+ If you catch yourself about to use bash or file tools for code operations — STOP and
872
+ delegate to the correct skill tool instead.
873
+
858
874
  ## CRITICAL: Preserve Tool Output Details
859
875
  When tools return detailed data (lists, analytics, search results):
860
876
  - **DO NOT summarize or compress** the tool output
@@ -491,14 +491,13 @@ steps:
491
491
  - "git:rev-parse:*"
492
492
  - "git:ls-files:*"
493
493
  - "git:ls-tree:*"
494
- # File operations
494
+ - "git:worktree:list:*"
495
+ - "git:worktree:remove:*"
496
+ # File operations — ONLY ls and wc allowed
497
+ # Do NOT use cat/grep/find/head/tail for code exploration —
498
+ # use search() and extract() tools instead, they are faster and more accurate
495
499
  - "ls:*"
496
- - "find:*"
497
- - "cat:*"
498
- - "head:*"
499
- - "tail:*"
500
500
  - "wc:*"
501
- - "grep:*"
502
501
  # GitHub CLI read-only operations
503
502
  - "gh:run:*"
504
503
  - "gh:run:list:*"
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
- process.env.VISOR_VERSION = '0.1.175';
2
+ process.env.VISOR_VERSION = '0.1.176';
3
3
  process.env.PROBE_VERSION = '0.6.0-rc291';
4
- process.env.VISOR_COMMIT_SHA = '5b303b06870720f90057ff3f58f0e72f34bf80cb';
5
- process.env.VISOR_COMMIT_SHORT = '5b303b06';
4
+ process.env.VISOR_COMMIT_SHA = 'e7bb0fe8d7a8a33772178036a26d756882ad454b';
5
+ process.env.VISOR_COMMIT_SHORT = 'e7bb0fe8';
6
6
  /******/ (() => { // webpackBootstrap
7
7
  /******/ var __webpack_modules__ = ({
8
8
 
@@ -300287,11 +300287,42 @@ function getCurrentDateXml() {
300287
300287
  }
300288
300288
  function createProbeTracerAdapter(fallbackTracer) {
300289
300289
  const fallback = fallbackTracer && typeof fallbackTracer === 'object' ? fallbackTracer : null;
300290
+ // OTel span event attributes only support primitive types (string, number, boolean)
300291
+ // and arrays of primitives. Complex values (objects, arrays of objects) are silently
300292
+ // dropped. Flatten them to JSON strings so they survive serialization.
300293
+ const flattenAttrs = (attrs) => {
300294
+ if (!attrs)
300295
+ return attrs;
300296
+ const out = {};
300297
+ for (const [k, v] of Object.entries(attrs)) {
300298
+ if (v === null || v === undefined)
300299
+ continue;
300300
+ if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') {
300301
+ out[k] = v;
300302
+ }
300303
+ else if (Array.isArray(v)) {
300304
+ // Arrays of primitives are OK; arrays of objects need serialization
300305
+ if (v.length > 0 && typeof v[0] === 'object') {
300306
+ out[k] = JSON.stringify(v);
300307
+ }
300308
+ else {
300309
+ out[k] = v;
300310
+ }
300311
+ }
300312
+ else if (typeof v === 'object') {
300313
+ out[k] = JSON.stringify(v);
300314
+ }
300315
+ else {
300316
+ out[k] = v;
300317
+ }
300318
+ }
300319
+ return out;
300320
+ };
300290
300321
  const emitEvent = (name, attrs) => {
300291
300322
  try {
300292
300323
  const span = lazy_otel_1.trace.getActiveSpan();
300293
300324
  if (span && typeof span.addEvent === 'function') {
300294
- span.addEvent(name, attrs);
300325
+ span.addEvent(name, flattenAttrs(attrs));
300295
300326
  }
300296
300327
  }
300297
300328
  catch { }
@@ -300345,6 +300376,21 @@ function createProbeTracerAdapter(fallbackTracer) {
300345
300376
  catch { }
300346
300377
  }
300347
300378
  },
300379
+ recordToolDecision: (toolName, params, metadata) => {
300380
+ const paramsStr = typeof params === 'string' ? params : JSON.stringify(params || {});
300381
+ emitEvent('tool.decision', {
300382
+ 'tool.name': toolName,
300383
+ 'tool.params': paramsStr.substring(0, 5000),
300384
+ 'tool.params.length': paramsStr.length,
300385
+ ...(metadata || {}),
300386
+ });
300387
+ if (fallback && typeof fallback.recordToolDecision === 'function') {
300388
+ try {
300389
+ fallback.recordToolDecision(toolName, params, metadata);
300390
+ }
300391
+ catch { }
300392
+ }
300393
+ },
300348
300394
  recordDelegationEvent: (phase, attrs) => {
300349
300395
  emitEvent(`delegation.${phase}`, attrs);
300350
300396
  if (fallback && typeof fallback.recordDelegationEvent === 'function') {
@@ -306302,6 +306348,10 @@ exports.VALID_EVENT_TRIGGERS = [
306302
306348
  'schedule',
306303
306349
  'webhook_received',
306304
306350
  'slack_message',
306351
+ 'telegram_message',
306352
+ 'email_message',
306353
+ 'whatsapp_message',
306354
+ 'teams_message',
306305
306355
  ];
306306
306356
  /**
306307
306357
  * Configuration manager for Visor
@@ -324805,7 +324855,9 @@ class AICheckProvider extends check_provider_interface_1.CheckProvider {
324805
324855
  if (!first || typeof first !== 'object')
324806
324856
  return {};
324807
324857
  const ev = first.event;
324808
- const conv = first.slack_conversation;
324858
+ const slackConv = first.slack_conversation;
324859
+ const telegramConv = first.telegram_conversation;
324860
+ const conv = slackConv || telegramConv;
324809
324861
  if (!ev && !conv)
324810
324862
  return {};
324811
324863
  // Attach conversation to prInfo so downstream helpers (XML context) can use it
@@ -324817,7 +324869,11 @@ class AICheckProvider extends check_provider_interface_1.CheckProvider {
324817
324869
  // best-effort only
324818
324870
  }
324819
324871
  }
324820
- return { slack: { event: ev, conversation: conv } };
324872
+ // Build transport-specific context
324873
+ const transportCtx = slackConv
324874
+ ? { slack: { event: ev, conversation: slackConv } }
324875
+ : { telegram: { event: ev, conversation: telegramConv } };
324876
+ return { ...transportCtx, conversation: conv };
324821
324877
  }
324822
324878
  catch {
324823
324879
  return {};
@@ -351452,7 +351508,7 @@ async function executeCheckWithForEachItems(checkId, forEachParent, forEachItems
351452
351508
  }
351453
351509
  }
351454
351510
  catch { }
351455
- // Extract Slack conversation from webhookContext (for Slack socket mode)
351511
+ // Extract conversation from webhookContext (for Slack/Telegram socket mode)
351456
351512
  // The socket-runner stores conversation data in webhookData under the endpoint key
351457
351513
  try {
351458
351514
  const webhookCtx = context.executionContext?.webhookContext;
@@ -351461,25 +351517,27 @@ async function executeCheckWithForEachItems(checkId, forEachParent, forEachItems
351461
351517
  logger_1.logger.info(`[LevelDispatch] webhookContext: ${webhookCtx ? 'present' : 'absent'}, webhookData size: ${webhookData?.size || 0}`);
351462
351518
  }
351463
351519
  if (webhookData && webhookData.size > 0) {
351464
- // Find the payload with slack_conversation
351520
+ // Find the payload with slack_conversation or telegram_conversation
351465
351521
  for (const payload of webhookData.values()) {
351466
351522
  const slackConv = payload?.slack_conversation;
351467
- if (slackConv) {
351468
- // Build slack context with event and conversation
351523
+ const telegramConv = payload?.telegram_conversation;
351524
+ const conv = slackConv || telegramConv;
351525
+ if (conv) {
351469
351526
  const event = payload?.event;
351470
- const messageCount = Array.isArray(slackConv?.messages)
351471
- ? slackConv.messages.length
351527
+ const messageCount = Array.isArray(conv?.messages)
351528
+ ? conv.messages.length
351472
351529
  : 0;
351473
351530
  if (context.debug) {
351474
- logger_1.logger.info(`[LevelDispatch] Slack conversation extracted: ${messageCount} messages`);
351531
+ logger_1.logger.info(`[LevelDispatch] Conversation extracted (${conv?.transport || 'unknown'}): ${messageCount} messages`);
351475
351532
  }
351533
+ // Build transport-specific context
351534
+ const transportCtx = slackConv
351535
+ ? { slack: { event: event || {}, conversation: slackConv } }
351536
+ : { telegram: { event: event || {}, conversation: telegramConv }, webhook: payload };
351476
351537
  providerConfig.eventContext = {
351477
351538
  ...providerConfig.eventContext,
351478
- slack: {
351479
- event: event || {},
351480
- conversation: slackConv,
351481
- },
351482
- conversation: slackConv, // Also expose at top level for convenience
351539
+ ...transportCtx,
351540
+ conversation: conv, // Expose at top level for all transports
351483
351541
  };
351484
351542
  break;
351485
351543
  }
@@ -351488,7 +351546,7 @@ async function executeCheckWithForEachItems(checkId, forEachParent, forEachItems
351488
351546
  }
351489
351547
  catch { }
351490
351548
  // Fallback: expose conversation from executionContext (for CLI --message)
351491
- // Only if no Slack conversation was set above
351549
+ // Only if no conversation was set above
351492
351550
  try {
351493
351551
  if (!providerConfig.eventContext?.conversation &&
351494
351552
  context.executionContext?.conversation) {
@@ -352684,7 +352742,7 @@ async function executeSingleCheck(checkId, context, state, emitEvent, transition
352684
352742
  }
352685
352743
  }
352686
352744
  catch { }
352687
- // Extract Slack conversation from webhookContext (for Slack socket mode)
352745
+ // Extract conversation from webhookContext (for Slack/Telegram socket mode)
352688
352746
  // The socket-runner stores conversation data in webhookData under the endpoint key
352689
352747
  try {
352690
352748
  const webhookCtx = context.executionContext?.webhookContext;
@@ -352693,23 +352751,25 @@ async function executeSingleCheck(checkId, context, state, emitEvent, transition
352693
352751
  logger_1.logger.info(`[LevelDispatch] webhookContext: ${webhookCtx ? 'present' : 'absent'}, webhookData size: ${webhookData?.size || 0}`);
352694
352752
  }
352695
352753
  if (webhookData && webhookData.size > 0) {
352696
- // Find the payload with slack_conversation
352754
+ // Find the payload with slack_conversation or telegram_conversation
352697
352755
  for (const payload of webhookData.values()) {
352698
352756
  const slackConv = payload?.slack_conversation;
352699
- if (slackConv) {
352700
- // Build slack context with event and conversation
352757
+ const telegramConv = payload?.telegram_conversation;
352758
+ const conv = slackConv || telegramConv;
352759
+ if (conv) {
352701
352760
  const event = payload?.event;
352702
- const messageCount = Array.isArray(slackConv?.messages) ? slackConv.messages.length : 0;
352761
+ const messageCount = Array.isArray(conv?.messages) ? conv.messages.length : 0;
352703
352762
  if (context.debug) {
352704
- logger_1.logger.info(`[LevelDispatch] Slack conversation extracted: ${messageCount} messages`);
352763
+ logger_1.logger.info(`[LevelDispatch] Conversation extracted (${conv?.transport || 'unknown'}): ${messageCount} messages`);
352705
352764
  }
352765
+ // Build transport-specific context
352766
+ const transportCtx = slackConv
352767
+ ? { slack: { event: event || {}, conversation: slackConv } }
352768
+ : { telegram: { event: event || {}, conversation: telegramConv }, webhook: payload };
352706
352769
  providerConfig.eventContext = {
352707
352770
  ...providerConfig.eventContext,
352708
- slack: {
352709
- event: event || {},
352710
- conversation: slackConv,
352711
- },
352712
- conversation: slackConv, // Also expose at top level for convenience
352771
+ ...transportCtx,
352772
+ conversation: conv, // Expose at top level for all transports
352713
352773
  };
352714
352774
  break;
352715
352775
  }
@@ -352718,7 +352778,7 @@ async function executeSingleCheck(checkId, context, state, emitEvent, transition
352718
352778
  }
352719
352779
  catch { }
352720
352780
  // Fallback: expose conversation from executionContext (for CLI --message)
352721
- // Only if no Slack conversation was set above
352781
+ // Only if no conversation was set above
352722
352782
  try {
352723
352783
  if (!providerConfig.eventContext?.conversation &&
352724
352784
  context.executionContext?.conversation) {
@@ -362218,6 +362278,31 @@ class VisorTestRunner {
362218
362278
  catch {
362219
362279
  throw new Error(`Explicit tests file not accessible: ${resolved}`);
362220
362280
  }
362281
+ // If the explicit path is a config file (not a .tests.yaml), look for
362282
+ // tests files relative to the config file's directory (#503).
362283
+ if (!/\.tests\.ya?ml$/i.test(resolved)) {
362284
+ const configDir = path_1.default.dirname(resolved);
362285
+ const testsCandidates = [
362286
+ path_1.default.resolve(configDir, 'defaults/visor.tests.yaml'),
362287
+ path_1.default.resolve(configDir, 'defaults/visor.tests.yml'),
362288
+ path_1.default.resolve(configDir, '.visor.tests.yaml'),
362289
+ path_1.default.resolve(configDir, '.visor.tests.yml'),
362290
+ ];
362291
+ for (const p of testsCandidates) {
362292
+ const np = path_1.default.normalize(p);
362293
+ if (!np.startsWith(normalizedCwd))
362294
+ continue;
362295
+ try {
362296
+ if (fs_1.default.statSync(p).isFile())
362297
+ return p;
362298
+ }
362299
+ catch {
362300
+ continue;
362301
+ }
362302
+ }
362303
+ // Fall through to return the explicit path as-is (loadSuite will
362304
+ // report a clear error if it's not a valid tests file).
362305
+ }
362221
362306
  return resolved;
362222
362307
  }
362223
362308
  const candidates = [
@@ -608675,7 +608760,7 @@ module.exports = /*#__PURE__*/JSON.parse('["aaa","aarp","abb","abbott","abbvie",
608675
608760
  /***/ ((module) => {
608676
608761
 
608677
608762
  "use strict";
608678
- module.exports = /*#__PURE__*/JSON.parse('{"name":"@probelabs/visor","version":"0.1.175","main":"dist/index.js","bin":{"visor":"./dist/index.js"},"exports":{".":{"require":"./dist/index.js","import":"./dist/index.js"},"./sdk":{"types":"./dist/sdk/sdk.d.ts","import":"./dist/sdk/sdk.mjs","require":"./dist/sdk/sdk.js"},"./cli":{"require":"./dist/index.js"}},"files":["dist/","defaults/","action.yml","README.md","LICENSE"],"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"scripts":{"build:cli":"ncc build src/index.ts -o dist && cp -r defaults dist/ && cp -r output dist/ && cp -r docs dist/ && cp -r examples dist/ && cp -r src/debug-visualizer/ui dist/debug-visualizer/ && node scripts/inject-version.js && echo \'#!/usr/bin/env node\' | cat - dist/index.js > temp && mv temp dist/index.js && chmod +x dist/index.js","build:sdk":"tsup src/sdk.ts --dts --sourcemap --format esm,cjs --out-dir dist/sdk","build":"./scripts/build-oss.sh","build:ee":"npm run build:cli && npm run build:sdk","test":"jest && npm run test:yaml","test:unit":"jest","prepublishOnly":"npm run build","test:watch":"jest --watch","test:coverage":"jest --coverage","test:ee":"jest --testPathPatterns=\'tests/ee\' --testPathIgnorePatterns=\'/node_modules/\' --no-coverage","test:manual:bash":"RUN_MANUAL_TESTS=true jest tests/manual/bash-config-manual.test.ts","lint":"eslint src tests --ext .ts","lint:fix":"eslint src tests --ext .ts --fix","format":"prettier --write src tests","format:check":"prettier --check src tests","clean":"","clean:traces":"node scripts/clean-traces.js","prebuild":"npm run clean && node scripts/generate-config-schema.js","pretest":"npm run clean:traces && node scripts/generate-config-schema.js && npm run build:cli","pretest:unit":"npm run clean:traces && node scripts/generate-config-schema.js && npm run build:cli","test:with-build":"npm run build:cli && jest","test:yaml":"node dist/index.js test --progress compact","test:yaml:parallel":"node dist/index.js test --progress compact --max-parallel 4","prepare":"husky","pre-commit":"lint-staged","deploy:site":"cd site && npx wrangler pages deploy . --project-name=visor-site --commit-dirty=true","deploy:worker":"npx wrangler deploy","deploy":"npm run deploy:site && npm run deploy:worker","publish:ee":"./scripts/publish-ee.sh","release":"./scripts/release.sh","release:patch":"./scripts/release.sh patch","release:minor":"./scripts/release.sh minor","release:major":"./scripts/release.sh major","release:prerelease":"./scripts/release.sh prerelease","docs:validate":"node scripts/validate-readme-links.js","workshop:setup":"npm install -D reveal-md@6.1.2","workshop:serve":"cd workshop && reveal-md slides.md -w","workshop:export":"reveal-md workshop/slides.md --static workshop/build","workshop:pdf":"reveal-md workshop/slides.md --print workshop/Visor-Workshop.pdf --print-size letter","workshop:pdf:ci":"reveal-md workshop/slides.md --print workshop/Visor-Workshop.pdf --print-size letter --puppeteer-launch-args=\\"--no-sandbox --disable-dev-shm-usage\\"","workshop:pdf:a4":"reveal-md workshop/slides.md --print workshop/Visor-Workshop-A4.pdf --print-size A4","workshop:build":"npm run workshop:export && npm run workshop:pdf","simulate:issue":"TS_NODE_TRANSPILE_ONLY=1 ts-node scripts/simulate-gh-run.ts --event issues --action opened --debug","simulate:comment":"TS_NODE_TRANSPILE_ONLY=1 ts-node scripts/simulate-gh-run.ts --event issue_comment --action created --debug"},"keywords":["code-review","ai","github-action","cli","pr-review","visor"],"author":"Probe Labs","license":"MIT","description":"AI workflow engine for code review, assistants, and automation — orchestrate checks, MCP tools, and AI providers with YAML-driven pipelines","repository":{"type":"git","url":"git+https://github.com/probelabs/visor.git"},"bugs":{"url":"https://github.com/probelabs/visor/issues"},"homepage":"https://github.com/probelabs/visor#readme","dependencies":{"@actions/core":"^1.11.1","@apidevtools/swagger-parser":"^12.1.0","@grammyjs/runner":"^2.0.3","@modelcontextprotocol/sdk":"^1.25.3","@nyariv/sandboxjs":"github:probelabs/SandboxJS#23c4bb611f7d05f3cb8c523917b5f57103e48108","@octokit/action":"^8.0.2","@octokit/auth-app":"^8.1.0","@octokit/core":"^7.0.3","@octokit/rest":"^22.0.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.203.0","@opentelemetry/core":"^1.30.1","@opentelemetry/exporter-logs-otlp-http":"^0.203.0","@opentelemetry/exporter-metrics-otlp-http":"^0.203.0","@opentelemetry/exporter-trace-otlp-grpc":"^0.203.0","@opentelemetry/exporter-trace-otlp-http":"^0.203.0","@opentelemetry/instrumentation":"^0.203.0","@opentelemetry/resources":"^1.30.1","@opentelemetry/sdk-logs":"^0.203.0","@opentelemetry/sdk-metrics":"^1.30.1","@opentelemetry/sdk-node":"^0.203.0","@opentelemetry/sdk-trace-base":"^1.30.1","@opentelemetry/semantic-conventions":"^1.30.1","@probelabs/probe":"^0.6.0-rc291","@types/commander":"^2.12.0","@types/uuid":"^10.0.0","acorn":"^8.16.0","acorn-walk":"^8.3.5","ajv":"^8.17.1","ajv-formats":"^3.0.1","better-sqlite3":"^11.0.0","blessed":"^0.1.81","botbuilder":"^4.23.3","botframework-connector":"^4.23.3","cli-table3":"^0.6.5","commander":"^14.0.0","deepmerge":"^4.3.1","dotenv":"^17.2.3","grammy":"^1.41.1","ignore":"^7.0.5","imapflow":"^1.2.12","js-yaml":"^4.1.0","jsonpath-plus":"^10.4.0","liquidjs":"^10.21.1","mailparser":"^3.9.3","minimatch":"^10.2.2","node-cron":"^3.0.3","nodemailer":"^8.0.1","open":"^9.1.0","resend":"^6.9.3","simple-git":"^3.28.0","uuid":"^11.1.0","ws":"^8.18.3"},"optionalDependencies":{"@anthropic/claude-code-sdk":"npm:null@*","@open-policy-agent/opa-wasm":"^1.10.0","knex":"^3.1.0","mysql2":"^3.11.0","pg":"^8.13.0","tedious":"^19.0.0"},"devDependencies":{"@eslint/js":"^9.34.0","@kie/act-js":"^2.6.2","@kie/mock-github":"^2.0.1","@swc/core":"^1.13.2","@swc/jest":"^0.2.37","@types/better-sqlite3":"^7.6.0","@types/blessed":"^0.1.27","@types/jest":"^30.0.0","@types/js-yaml":"^4.0.9","@types/mailparser":"^3.4.6","@types/node":"^24.3.0","@types/node-cron":"^3.0.11","@types/nodemailer":"^7.0.11","@types/ws":"^8.18.1","@typescript-eslint/eslint-plugin":"^8.42.0","@typescript-eslint/parser":"^8.42.0","@vercel/ncc":"^0.38.4","eslint":"^9.34.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","husky":"^9.1.7","jest":"^30.1.3","lint-staged":"^16.1.6","prettier":"^3.6.2","reveal-md":"^6.1.2","ts-json-schema-generator":"^1.5.1","ts-node":"^10.9.2","tsup":"^8.5.0","typescript":"^5.9.2","wrangler":"^3.0.0"},"peerDependenciesMeta":{"@anthropic/claude-code-sdk":{"optional":true}},"directories":{"test":"tests"},"lint-staged":{"src/**/*.{ts,js}":["eslint --fix","prettier --write"],"tests/**/*.{ts,js}":["eslint --fix","prettier --write"],"*.{json,md,yml,yaml}":["prettier --write"]}}');
608763
+ module.exports = /*#__PURE__*/JSON.parse('{"name":"@probelabs/visor","version":"0.1.176","main":"dist/index.js","bin":{"visor":"./dist/index.js"},"exports":{".":{"require":"./dist/index.js","import":"./dist/index.js"},"./sdk":{"types":"./dist/sdk/sdk.d.ts","import":"./dist/sdk/sdk.mjs","require":"./dist/sdk/sdk.js"},"./cli":{"require":"./dist/index.js"}},"files":["dist/","defaults/","action.yml","README.md","LICENSE"],"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"scripts":{"build:cli":"ncc build src/index.ts -o dist && cp -r defaults dist/ && cp -r output dist/ && cp -r docs dist/ && cp -r examples dist/ && cp -r src/debug-visualizer/ui dist/debug-visualizer/ && node scripts/inject-version.js && echo \'#!/usr/bin/env node\' | cat - dist/index.js > temp && mv temp dist/index.js && chmod +x dist/index.js","build:sdk":"tsup src/sdk.ts --dts --sourcemap --format esm,cjs --out-dir dist/sdk","build":"./scripts/build-oss.sh","build:ee":"npm run build:cli && npm run build:sdk","test":"jest && npm run test:yaml","test:unit":"jest","prepublishOnly":"npm run build","test:watch":"jest --watch","test:coverage":"jest --coverage","test:ee":"jest --testPathPatterns=\'tests/ee\' --testPathIgnorePatterns=\'/node_modules/\' --no-coverage","test:manual:bash":"RUN_MANUAL_TESTS=true jest tests/manual/bash-config-manual.test.ts","lint":"eslint src tests --ext .ts","lint:fix":"eslint src tests --ext .ts --fix","format":"prettier --write src tests","format:check":"prettier --check src tests","clean":"","clean:traces":"node scripts/clean-traces.js","prebuild":"npm run clean && node scripts/generate-config-schema.js","pretest":"npm run clean:traces && node scripts/generate-config-schema.js && npm run build:cli","pretest:unit":"npm run clean:traces && node scripts/generate-config-schema.js && npm run build:cli","test:with-build":"npm run build:cli && jest","test:yaml":"node dist/index.js test --progress compact","test:yaml:parallel":"node dist/index.js test --progress compact --max-parallel 4","prepare":"husky","pre-commit":"lint-staged","deploy:site":"cd site && npx wrangler pages deploy . --project-name=visor-site --commit-dirty=true","deploy:worker":"npx wrangler deploy","deploy":"npm run deploy:site && npm run deploy:worker","publish:ee":"./scripts/publish-ee.sh","release":"./scripts/release.sh","release:patch":"./scripts/release.sh patch","release:minor":"./scripts/release.sh minor","release:major":"./scripts/release.sh major","release:prerelease":"./scripts/release.sh prerelease","docs:validate":"node scripts/validate-readme-links.js","workshop:setup":"npm install -D reveal-md@6.1.2","workshop:serve":"cd workshop && reveal-md slides.md -w","workshop:export":"reveal-md workshop/slides.md --static workshop/build","workshop:pdf":"reveal-md workshop/slides.md --print workshop/Visor-Workshop.pdf --print-size letter","workshop:pdf:ci":"reveal-md workshop/slides.md --print workshop/Visor-Workshop.pdf --print-size letter --puppeteer-launch-args=\\"--no-sandbox --disable-dev-shm-usage\\"","workshop:pdf:a4":"reveal-md workshop/slides.md --print workshop/Visor-Workshop-A4.pdf --print-size A4","workshop:build":"npm run workshop:export && npm run workshop:pdf","simulate:issue":"TS_NODE_TRANSPILE_ONLY=1 ts-node scripts/simulate-gh-run.ts --event issues --action opened --debug","simulate:comment":"TS_NODE_TRANSPILE_ONLY=1 ts-node scripts/simulate-gh-run.ts --event issue_comment --action created --debug"},"keywords":["code-review","ai","github-action","cli","pr-review","visor"],"author":"Probe Labs","license":"MIT","description":"AI workflow engine for code review, assistants, and automation — orchestrate checks, MCP tools, and AI providers with YAML-driven pipelines","repository":{"type":"git","url":"git+https://github.com/probelabs/visor.git"},"bugs":{"url":"https://github.com/probelabs/visor/issues"},"homepage":"https://github.com/probelabs/visor#readme","dependencies":{"@actions/core":"^1.11.1","@apidevtools/swagger-parser":"^12.1.0","@grammyjs/runner":"^2.0.3","@modelcontextprotocol/sdk":"^1.25.3","@nyariv/sandboxjs":"github:probelabs/SandboxJS#23c4bb611f7d05f3cb8c523917b5f57103e48108","@octokit/action":"^8.0.2","@octokit/auth-app":"^8.1.0","@octokit/core":"^7.0.3","@octokit/rest":"^22.0.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.203.0","@opentelemetry/core":"^1.30.1","@opentelemetry/exporter-logs-otlp-http":"^0.203.0","@opentelemetry/exporter-metrics-otlp-http":"^0.203.0","@opentelemetry/exporter-trace-otlp-grpc":"^0.203.0","@opentelemetry/exporter-trace-otlp-http":"^0.203.0","@opentelemetry/instrumentation":"^0.203.0","@opentelemetry/resources":"^1.30.1","@opentelemetry/sdk-logs":"^0.203.0","@opentelemetry/sdk-metrics":"^1.30.1","@opentelemetry/sdk-node":"^0.203.0","@opentelemetry/sdk-trace-base":"^1.30.1","@opentelemetry/semantic-conventions":"^1.30.1","@probelabs/probe":"^0.6.0-rc291","@types/commander":"^2.12.0","@types/uuid":"^10.0.0","acorn":"^8.16.0","acorn-walk":"^8.3.5","ajv":"^8.17.1","ajv-formats":"^3.0.1","better-sqlite3":"^11.0.0","blessed":"^0.1.81","botbuilder":"^4.23.3","botframework-connector":"^4.23.3","cli-table3":"^0.6.5","commander":"^14.0.0","deepmerge":"^4.3.1","dotenv":"^17.2.3","grammy":"^1.41.1","ignore":"^7.0.5","imapflow":"^1.2.12","js-yaml":"^4.1.0","jsonpath-plus":"^10.4.0","liquidjs":"^10.21.1","mailparser":"^3.9.3","minimatch":"^10.2.2","node-cron":"^3.0.3","nodemailer":"^8.0.1","open":"^9.1.0","resend":"^6.9.3","simple-git":"^3.28.0","uuid":"^11.1.0","ws":"^8.18.3"},"optionalDependencies":{"@anthropic/claude-code-sdk":"npm:null@*","@open-policy-agent/opa-wasm":"^1.10.0","knex":"^3.1.0","mysql2":"^3.11.0","pg":"^8.13.0","tedious":"^19.0.0"},"devDependencies":{"@eslint/js":"^9.34.0","@kie/act-js":"^2.6.2","@kie/mock-github":"^2.0.1","@swc/core":"^1.13.2","@swc/jest":"^0.2.37","@types/better-sqlite3":"^7.6.0","@types/blessed":"^0.1.27","@types/jest":"^30.0.0","@types/js-yaml":"^4.0.9","@types/mailparser":"^3.4.6","@types/node":"^24.3.0","@types/node-cron":"^3.0.11","@types/nodemailer":"^7.0.11","@types/ws":"^8.18.1","@typescript-eslint/eslint-plugin":"^8.42.0","@typescript-eslint/parser":"^8.42.0","@vercel/ncc":"^0.38.4","eslint":"^9.34.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","husky":"^9.1.7","jest":"^30.1.3","lint-staged":"^16.1.6","prettier":"^3.6.2","reveal-md":"^6.1.2","ts-json-schema-generator":"^1.5.1","ts-node":"^10.9.2","tsup":"^8.5.0","typescript":"^5.9.2","wrangler":"^3.0.0"},"peerDependenciesMeta":{"@anthropic/claude-code-sdk":{"optional":true}},"directories":{"test":"tests"},"lint-staged":{"src/**/*.{ts,js}":["eslint --fix","prettier --write"],"tests/**/*.{ts,js}":["eslint --fix","prettier --write"],"*.{json,md,yml,yaml}":["prettier --write"]}}');
608679
608764
 
608680
608765
  /***/ })
608681
608766