@probelabs/visor 0.1.158 → 0.1.159

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 +9 -0
  2. package/dist/defaults/assistant.yaml +9 -0
  3. package/dist/index.js +100 -207
  4. package/dist/output/traces/{run-2026-03-05T09-35-31-694Z.ndjson → run-2026-03-05T15-45-37-714Z.ndjson} +84 -84
  5. package/dist/output/traces/{run-2026-03-05T09-36-16-833Z.ndjson → run-2026-03-05T15-46-23-118Z.ndjson} +1858 -1858
  6. package/dist/sdk/{check-provider-registry-IRHRMYUJ.mjs → check-provider-registry-74VLAETF.mjs} +5 -5
  7. package/dist/sdk/{check-provider-registry-LVXLROAJ.mjs → check-provider-registry-CZLHVHZZ.mjs} +5 -5
  8. package/dist/sdk/{check-provider-registry-2GTN7M37.mjs → check-provider-registry-UVLGKORU.mjs} +5 -5
  9. package/dist/sdk/{chunk-FRVHW725.mjs → chunk-5N33URMM.mjs} +3 -3
  10. package/dist/sdk/{chunk-FRTHLKIG.mjs → chunk-A3B4LEGZ.mjs} +15 -15
  11. package/dist/sdk/{chunk-ZWPQV2VT.mjs → chunk-AW3IHBCI.mjs} +15 -15
  12. package/dist/sdk/{chunk-ILIWDV37.mjs → chunk-ITZWA2RF.mjs} +2 -2
  13. package/dist/sdk/{chunk-QRTO7XNW.mjs → chunk-IVTSD7ZW.mjs} +15 -15
  14. package/dist/sdk/{chunk-IJGA5TFA.mjs → chunk-PSZI5NZL.mjs} +2 -2
  15. package/dist/sdk/{chunk-TLXAIQLH.mjs → chunk-PZONH3RK.mjs} +3 -3
  16. package/dist/sdk/{chunk-TLXAIQLH.mjs.map → chunk-PZONH3RK.mjs.map} +1 -1
  17. package/dist/sdk/{chunk-SPCGI24K.mjs → chunk-QSY3XLA3.mjs} +3 -3
  18. package/dist/sdk/{chunk-GQ7H7E4Y.mjs → chunk-WYD5ISLQ.mjs} +2 -2
  19. package/dist/sdk/{chunk-GQ7H7E4Y.mjs.map → chunk-WYD5ISLQ.mjs.map} +1 -1
  20. package/dist/sdk/{failure-condition-evaluator-ORMMBR23.mjs → failure-condition-evaluator-5DJZEGYT.mjs} +3 -3
  21. package/dist/sdk/{failure-condition-evaluator-LYFZMQ6Y.mjs → failure-condition-evaluator-LQ5NUFZN.mjs} +3 -3
  22. package/dist/sdk/{github-frontend-NNWL7IXV.mjs → github-frontend-TJ6TGLUW.mjs} +3 -3
  23. package/dist/sdk/{github-frontend-XKPAYXOT.mjs → github-frontend-YSRVB5FS.mjs} +3 -3
  24. package/dist/sdk/{host-MICUIU7J.mjs → host-VJWSCD7X.mjs} +2 -2
  25. package/dist/sdk/{host-YKTAWW33.mjs → host-YG6LPL6H.mjs} +2 -2
  26. package/dist/sdk/{routing-L224WQSY.mjs → routing-7JFYIXHU.mjs} +4 -4
  27. package/dist/sdk/{routing-SVLHRQEW.mjs → routing-ZJSROSUU.mjs} +4 -4
  28. package/dist/sdk/{schedule-tool-6KIQPMWM.mjs → schedule-tool-2GSWLIWA.mjs} +5 -5
  29. package/dist/sdk/{schedule-tool-JNL6TFP4.mjs → schedule-tool-QCJWLYS3.mjs} +5 -5
  30. package/dist/sdk/{schedule-tool-526VUPMF.mjs → schedule-tool-Y2R3YZL6.mjs} +5 -5
  31. package/dist/sdk/{schedule-tool-handler-4SG6HYLF.mjs → schedule-tool-handler-5FGL2VQ5.mjs} +5 -5
  32. package/dist/sdk/{schedule-tool-handler-IYK54BWK.mjs → schedule-tool-handler-HWHHAHJD.mjs} +5 -5
  33. package/dist/sdk/{schedule-tool-handler-Z5VWUB76.mjs → schedule-tool-handler-K2LO33KU.mjs} +5 -5
  34. package/dist/sdk/sdk.js +2 -2
  35. package/dist/sdk/sdk.js.map +1 -1
  36. package/dist/sdk/sdk.mjs +4 -4
  37. package/dist/sdk/{trace-helpers-AWTAWKRA.mjs → trace-helpers-23KC3NGK.mjs} +2 -2
  38. package/dist/sdk/{trace-helpers-TOEA67GA.mjs → trace-helpers-VPGAR5ZR.mjs} +2 -2
  39. package/dist/sdk/{workflow-check-provider-MVDV4U7F.mjs → workflow-check-provider-23RPALNF.mjs} +5 -5
  40. package/dist/sdk/{workflow-check-provider-V5QHQPTG.mjs → workflow-check-provider-DHNWJKYK.mjs} +5 -5
  41. package/dist/sdk/{workflow-check-provider-5G6BGZEX.mjs → workflow-check-provider-OUREVWAI.mjs} +5 -5
  42. package/dist/traces/{run-2026-03-05T09-35-31-694Z.ndjson → run-2026-03-05T15-45-37-714Z.ndjson} +84 -84
  43. package/dist/traces/{run-2026-03-05T09-36-16-833Z.ndjson → run-2026-03-05T15-46-23-118Z.ndjson} +1858 -1858
  44. package/package.json +2 -2
  45. /package/dist/sdk/{check-provider-registry-2GTN7M37.mjs.map → check-provider-registry-74VLAETF.mjs.map} +0 -0
  46. /package/dist/sdk/{check-provider-registry-IRHRMYUJ.mjs.map → check-provider-registry-CZLHVHZZ.mjs.map} +0 -0
  47. /package/dist/sdk/{check-provider-registry-LVXLROAJ.mjs.map → check-provider-registry-UVLGKORU.mjs.map} +0 -0
  48. /package/dist/sdk/{chunk-FRVHW725.mjs.map → chunk-5N33URMM.mjs.map} +0 -0
  49. /package/dist/sdk/{chunk-FRTHLKIG.mjs.map → chunk-A3B4LEGZ.mjs.map} +0 -0
  50. /package/dist/sdk/{chunk-QRTO7XNW.mjs.map → chunk-AW3IHBCI.mjs.map} +0 -0
  51. /package/dist/sdk/{chunk-IJGA5TFA.mjs.map → chunk-ITZWA2RF.mjs.map} +0 -0
  52. /package/dist/sdk/{chunk-ZWPQV2VT.mjs.map → chunk-IVTSD7ZW.mjs.map} +0 -0
  53. /package/dist/sdk/{chunk-ILIWDV37.mjs.map → chunk-PSZI5NZL.mjs.map} +0 -0
  54. /package/dist/sdk/{chunk-SPCGI24K.mjs.map → chunk-QSY3XLA3.mjs.map} +0 -0
  55. /package/dist/sdk/{failure-condition-evaluator-LYFZMQ6Y.mjs.map → failure-condition-evaluator-5DJZEGYT.mjs.map} +0 -0
  56. /package/dist/sdk/{failure-condition-evaluator-ORMMBR23.mjs.map → failure-condition-evaluator-LQ5NUFZN.mjs.map} +0 -0
  57. /package/dist/sdk/{github-frontend-NNWL7IXV.mjs.map → github-frontend-TJ6TGLUW.mjs.map} +0 -0
  58. /package/dist/sdk/{github-frontend-XKPAYXOT.mjs.map → github-frontend-YSRVB5FS.mjs.map} +0 -0
  59. /package/dist/sdk/{host-MICUIU7J.mjs.map → host-VJWSCD7X.mjs.map} +0 -0
  60. /package/dist/sdk/{host-YKTAWW33.mjs.map → host-YG6LPL6H.mjs.map} +0 -0
  61. /package/dist/sdk/{routing-L224WQSY.mjs.map → routing-7JFYIXHU.mjs.map} +0 -0
  62. /package/dist/sdk/{routing-SVLHRQEW.mjs.map → routing-ZJSROSUU.mjs.map} +0 -0
  63. /package/dist/sdk/{schedule-tool-526VUPMF.mjs.map → schedule-tool-2GSWLIWA.mjs.map} +0 -0
  64. /package/dist/sdk/{schedule-tool-6KIQPMWM.mjs.map → schedule-tool-QCJWLYS3.mjs.map} +0 -0
  65. /package/dist/sdk/{schedule-tool-JNL6TFP4.mjs.map → schedule-tool-Y2R3YZL6.mjs.map} +0 -0
  66. /package/dist/sdk/{schedule-tool-handler-4SG6HYLF.mjs.map → schedule-tool-handler-5FGL2VQ5.mjs.map} +0 -0
  67. /package/dist/sdk/{schedule-tool-handler-IYK54BWK.mjs.map → schedule-tool-handler-HWHHAHJD.mjs.map} +0 -0
  68. /package/dist/sdk/{schedule-tool-handler-Z5VWUB76.mjs.map → schedule-tool-handler-K2LO33KU.mjs.map} +0 -0
  69. /package/dist/sdk/{trace-helpers-AWTAWKRA.mjs.map → trace-helpers-23KC3NGK.mjs.map} +0 -0
  70. /package/dist/sdk/{trace-helpers-TOEA67GA.mjs.map → trace-helpers-VPGAR5ZR.mjs.map} +0 -0
  71. /package/dist/sdk/{workflow-check-provider-5G6BGZEX.mjs.map → workflow-check-provider-23RPALNF.mjs.map} +0 -0
  72. /package/dist/sdk/{workflow-check-provider-MVDV4U7F.mjs.map → workflow-check-provider-DHNWJKYK.mjs.map} +0 -0
  73. /package/dist/sdk/{workflow-check-provider-V5QHQPTG.mjs.map → workflow-check-provider-OUREVWAI.mjs.map} +0 -0
@@ -734,6 +734,15 @@ steps:
734
734
  5. If a tool returned an error or empty result, acknowledge it honestly
735
735
  6. Never claim success if you only PLANNED to do something but didn't execute it
736
736
 
737
+ Tool usage policy for this validation step:
738
+ 7. Do NOT call code exploration tools (code-talk, search, delegate) unless
739
+ you found a SPECIFIC factual claim in your response that is unsupported
740
+ by any tool output in the conversation history above
741
+ 8. If the conversation already contains tool results that answer the question,
742
+ use those results — do NOT re-explore the same codebase topics
743
+ 9. Only call a tool if you can state exactly which claim needs verification
744
+ and why existing tool results are insufficient
745
+
737
746
  If you find discrepancies:
738
747
  - Correct your response to reflect what actually happened
739
748
  - If you couldn't complete an action, explain why and what the user can do
@@ -734,6 +734,15 @@ steps:
734
734
  5. If a tool returned an error or empty result, acknowledge it honestly
735
735
  6. Never claim success if you only PLANNED to do something but didn't execute it
736
736
 
737
+ Tool usage policy for this validation step:
738
+ 7. Do NOT call code exploration tools (code-talk, search, delegate) unless
739
+ you found a SPECIFIC factual claim in your response that is unsupported
740
+ by any tool output in the conversation history above
741
+ 8. If the conversation already contains tool results that answer the question,
742
+ use those results — do NOT re-explore the same codebase topics
743
+ 9. Only call a tool if you can state exactly which claim needs verification
744
+ and why existing tool results are insufficient
745
+
737
746
  If you find discrepancies:
738
747
  - Correct your response to reflect what actually happened
739
748
  - If you couldn't complete an action, explain why and what the user can do
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
- process.env.VISOR_VERSION = '0.1.158';
3
- process.env.PROBE_VERSION = '0.6.0-rc271';
4
- process.env.VISOR_COMMIT_SHA = '1e3454d9f5650edec0c5c1cb982653fb1e3ae7c5';
5
- process.env.VISOR_COMMIT_SHORT = '1e3454d9';
2
+ process.env.VISOR_VERSION = '0.1.159';
3
+ process.env.PROBE_VERSION = '0.6.0-rc274';
4
+ process.env.VISOR_COMMIT_SHA = '345101301086b988952a5425033fc0ca9cbaafe1';
5
+ process.env.VISOR_COMMIT_SHORT = '345101301';
6
6
  /******/ (() => { // webpackBootstrap
7
7
  /******/ var __webpack_modules__ = ({
8
8
 
@@ -260667,22 +260667,16 @@ var init_JsonShapeDeserializer = __esm({
260667
260667
  if (Array.isArray(value) && ns.isListSchema()) {
260668
260668
  const listMember = ns.getValueSchema();
260669
260669
  const out = [];
260670
- const sparse = !!ns.getMergedTraits().sparse;
260671
260670
  for (const item of value) {
260672
- if (sparse || item != null) {
260673
- out.push(this._read(listMember, item));
260674
- }
260671
+ out.push(this._read(listMember, item));
260675
260672
  }
260676
260673
  return out;
260677
260674
  }
260678
260675
  if (ns.isMapSchema()) {
260679
260676
  const mapMember = ns.getValueSchema();
260680
260677
  const out = {};
260681
- const sparse = !!ns.getMergedTraits().sparse;
260682
260678
  for (const [_k, _v] of Object.entries(value)) {
260683
- if (sparse || _v != null) {
260684
- out[_k] = this._read(mapMember, _v);
260685
- }
260679
+ out[_k] = this._read(mapMember, _v);
260686
260680
  }
260687
260681
  return out;
260688
260682
  }
@@ -262331,18 +262325,18 @@ var init_XmlShapeDeserializer = __esm({
262331
262325
  return value;
262332
262326
  }
262333
262327
  if (typeof value === "object") {
262334
- const sparse = !!traits.sparse;
262335
262328
  const flat = !!traits.xmlFlattened;
262336
262329
  if (ns.isListSchema()) {
262337
262330
  const listValue = ns.getValueSchema();
262338
262331
  const buffer2 = [];
262339
262332
  const sourceKey = listValue.getMergedTraits().xmlName ?? "member";
262340
262333
  const source = flat ? value : (value[0] ?? value)[sourceKey];
262334
+ if (source == null) {
262335
+ return buffer2;
262336
+ }
262341
262337
  const sourceArray = Array.isArray(source) ? source : [source];
262342
262338
  for (const v5 of sourceArray) {
262343
- if (v5 != null || sparse) {
262344
- buffer2.push(this.readSchema(listValue, v5));
262345
- }
262339
+ buffer2.push(this.readSchema(listValue, v5));
262346
262340
  }
262347
262341
  return buffer2;
262348
262342
  }
@@ -262361,9 +262355,7 @@ var init_XmlShapeDeserializer = __esm({
262361
262355
  for (const entry of entries) {
262362
262356
  const key = entry[keyProperty];
262363
262357
  const value2 = entry[valueProperty];
262364
- if (value2 != null || sparse) {
262365
- buffer[key] = this.readSchema(memberNs, value2);
262366
- }
262358
+ buffer[key] = this.readSchema(memberNs, value2);
262367
262359
  }
262368
262360
  return buffer;
262369
262361
  }
@@ -266705,7 +266697,7 @@ var require_package2 = __commonJS({
266705
266697
  module2.exports = {
266706
266698
  name: "@aws-sdk/client-bedrock-runtime",
266707
266699
  description: "AWS SDK for JavaScript Bedrock Runtime Client for Node.js, Browser and React Native",
266708
- version: "3.1001.0",
266700
+ version: "3.1002.0",
266709
266701
  scripts: {
266710
266702
  build: "concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs",
266711
266703
  "build:cjs": "node ../../scripts/compilation/inline client-bedrock-runtime",
@@ -266729,21 +266721,21 @@ var require_package2 = __commonJS({
266729
266721
  dependencies: {
266730
266722
  "@aws-crypto/sha256-browser": "5.2.0",
266731
266723
  "@aws-crypto/sha256-js": "5.2.0",
266732
- "@aws-sdk/core": "^3.973.16",
266733
- "@aws-sdk/credential-provider-node": "^3.972.15",
266724
+ "@aws-sdk/core": "^3.973.17",
266725
+ "@aws-sdk/credential-provider-node": "^3.972.16",
266734
266726
  "@aws-sdk/eventstream-handler-node": "^3.972.9",
266735
266727
  "@aws-sdk/middleware-eventstream": "^3.972.6",
266736
266728
  "@aws-sdk/middleware-host-header": "^3.972.6",
266737
266729
  "@aws-sdk/middleware-logger": "^3.972.6",
266738
266730
  "@aws-sdk/middleware-recursion-detection": "^3.972.6",
266739
- "@aws-sdk/middleware-user-agent": "^3.972.16",
266731
+ "@aws-sdk/middleware-user-agent": "^3.972.17",
266740
266732
  "@aws-sdk/middleware-websocket": "^3.972.11",
266741
266733
  "@aws-sdk/region-config-resolver": "^3.972.6",
266742
- "@aws-sdk/token-providers": "3.1001.0",
266734
+ "@aws-sdk/token-providers": "3.1002.0",
266743
266735
  "@aws-sdk/types": "^3.973.4",
266744
266736
  "@aws-sdk/util-endpoints": "^3.996.3",
266745
266737
  "@aws-sdk/util-user-agent-browser": "^3.972.6",
266746
- "@aws-sdk/util-user-agent-node": "^3.973.1",
266738
+ "@aws-sdk/util-user-agent-node": "^3.973.2",
266747
266739
  "@smithy/config-resolver": "^4.4.9",
266748
266740
  "@smithy/core": "^3.23.7",
266749
266741
  "@smithy/eventstream-serde-browser": "^4.2.10",
@@ -267492,7 +267484,7 @@ var init_package = __esm({
267492
267484
  "node_modules/@aws-sdk/nested-clients/package.json"() {
267493
267485
  package_default = {
267494
267486
  name: "@aws-sdk/nested-clients",
267495
- version: "3.996.4",
267487
+ version: "3.996.5",
267496
267488
  description: "Nested clients for AWS SDK packages.",
267497
267489
  main: "./dist-cjs/index.js",
267498
267490
  module: "./dist-es/index.js",
@@ -267521,16 +267513,16 @@ var init_package = __esm({
267521
267513
  dependencies: {
267522
267514
  "@aws-crypto/sha256-browser": "5.2.0",
267523
267515
  "@aws-crypto/sha256-js": "5.2.0",
267524
- "@aws-sdk/core": "^3.973.16",
267516
+ "@aws-sdk/core": "^3.973.17",
267525
267517
  "@aws-sdk/middleware-host-header": "^3.972.6",
267526
267518
  "@aws-sdk/middleware-logger": "^3.972.6",
267527
267519
  "@aws-sdk/middleware-recursion-detection": "^3.972.6",
267528
- "@aws-sdk/middleware-user-agent": "^3.972.16",
267520
+ "@aws-sdk/middleware-user-agent": "^3.972.17",
267529
267521
  "@aws-sdk/region-config-resolver": "^3.972.6",
267530
267522
  "@aws-sdk/types": "^3.973.4",
267531
267523
  "@aws-sdk/util-endpoints": "^3.996.3",
267532
267524
  "@aws-sdk/util-user-agent-browser": "^3.972.6",
267533
- "@aws-sdk/util-user-agent-node": "^3.973.1",
267525
+ "@aws-sdk/util-user-agent-node": "^3.973.2",
267534
267526
  "@smithy/config-resolver": "^4.4.9",
267535
267527
  "@smithy/core": "^3.23.7",
267536
267528
  "@smithy/fetch-http-handler": "^5.3.12",
@@ -283179,20 +283171,15 @@ var init_zod = __esm({
283179
283171
 
283180
283172
  // src/agent/tasks/taskTool.js
283181
283173
  function createTaskCompletionBlockedMessage(taskSummary) {
283182
- return `<task_completion_blocked>
283183
- You cannot complete yet. The following tasks are still unresolved:
283174
+ return `You cannot complete yet. The following tasks are still unresolved:
283184
283175
 
283185
283176
  ${taskSummary}
283186
283177
 
283187
- Required action:
283188
- 1. For each "pending" or "in_progress" task, either:
283189
- - Complete the work and mark it: <task><action>complete</action><id>task-X</id></task>
283190
- - Or cancel if no longer needed: <task><action>update</action><id>task-X</id><status>cancelled</status></task>
283178
+ For each pending/in_progress task, either:
283179
+ - Complete it: call task tool with action="complete", id="task-X"
283180
+ - Cancel it: call task tool with action="update", id="task-X", status="cancelled"
283191
283181
 
283192
- 2. After ALL tasks are resolved (completed or cancelled), call attempt_completion again.
283193
-
283194
- Use <task><action>list</action></task> to review current status.
283195
- </task_completion_blocked>`;
283182
+ After all tasks are resolved, call attempt_completion again.`;
283196
283183
  }
283197
283184
  function createTaskTool(options = {}) {
283198
283185
  const { taskManager, tracer, debug = false } = options;
@@ -283415,145 +283402,46 @@ var init_taskTool = __esm({
283415
283402
  dependencies: external_exports.array(external_exports.string()).optional(),
283416
283403
  after: external_exports.string().optional()
283417
283404
  });
283418
- taskSystemPrompt = `[Task Management System]
283419
-
283420
- You have access to a task tracking tool to organize your work on complex requests.
283421
-
283422
- ## When to Create Tasks
283423
-
283424
- CREATE TASKS when the request has **multiple distinct deliverables or goals**:
283425
- - "Fix bug A AND add feature B" \u2192 Two separate tasks
283426
- - "Investigate auth, payments, AND notifications" \u2192 Three independent areas
283427
- - "Implement X, then add tests, then update docs" \u2192 Sequential phases with different outputs
283428
- - User explicitly asks for a plan or task breakdown
283429
-
283430
- SKIP TASKS for single-goal requests, even if they require multiple searches:
283431
- - "How does ranking work?" \u2192 Just investigate and answer (one goal)
283432
- - "What does function X do?" \u2192 Just look it up (one goal)
283433
- - "Explain the authentication flow" \u2192 Just trace and explain (one goal)
283434
- - "Find where errors are logged" \u2192 Just search and report (one goal)
283435
-
283436
- **Key insight**: Multiple *internal steps* (search, read, analyze) are NOT the same as multiple *goals*.
283437
- A single investigation with many steps is still ONE task, not many.
283438
-
283439
- ## Task Granularity
283440
-
283441
- Tasks represent LOGICAL UNITS OF WORK, not individual files or steps:
283442
- - "Fix 8 similar test files" \u2192 ONE task (same type of fix across files)
283443
- - "Update API + tests + docs" \u2192 THREE tasks (different types of work)
283444
- - "Implement feature in 5 files" \u2192 ONE task (single feature)
283445
-
283446
- **Rule of thumb**: If you're creating more than 3-4 tasks, you're probably too granular.
283447
-
283448
- **Anti-patterns to avoid**:
283449
- - One task per file \u274C
283450
- - One task per function \u274C
283451
- - One task per repository (when same type of work) \u274C
283452
-
283453
- **Good patterns**:
283454
- - One task per distinct deliverable \u2713
283455
- - One task per phase (implement, test, document) \u2713
283456
- - One task per different type of work \u2713
283457
-
283458
- MODIFY TASKS when (during execution):
283459
- - You discover the problem is more complex than expected \u2192 Add new tasks
283460
- - A single task covers too much scope \u2192 Split into smaller tasks
283461
- - You find related work that needs attention \u2192 Add dependent tasks
283462
- - A task becomes irrelevant based on findings \u2192 Cancel it
283463
- - Task priorities change based on discoveries \u2192 Update priority
283464
- - You learn new context \u2192 Update task description
283465
-
283466
- ## Task Workflow
283467
-
283468
- **STEP 1 - Plan (at start):**
283469
- Analyze the request and create tasks for each logical step:
283470
-
283471
- <task>
283472
- <action>create</action>
283473
- <tasks>[
283474
- {"title": "Search for authentication module", "priority": "high"},
283475
- {"title": "Analyze login flow implementation", "dependencies": ["task-1"]},
283476
- {"title": "Find session management code", "dependencies": ["task-1"]},
283477
- {"title": "Summarize authentication architecture", "dependencies": ["task-2", "task-3"]}
283478
- ]</tasks>
283479
- </task>
283480
-
283481
- **STEP 2 - Execute (during work):**
283482
- Update task status as you work:
283483
-
283484
- <task>
283485
- <action>update</action>
283486
- <id>task-1</id>
283487
- <status>in_progress</status>
283488
- </task>
283489
-
283490
- ... do the work (search, extract, etc.) ...
283491
-
283492
- <task>
283493
- <action>complete</action>
283494
- <id>task-1</id>
283495
- </task>
283496
-
283497
- **STEP 2b - Adapt (when you discover new work):**
283498
- As you work, you may discover that:
283499
- - A task is more complex than expected \u2192 Split it into subtasks
283500
- - New areas need investigation \u2192 Add new tasks
283501
- - Some tasks are no longer needed \u2192 Cancel them
283502
- - Task order should change \u2192 Update dependencies
283503
-
283504
- *Adding a new task when you discover more work:*
283505
- <task>
283506
- <action>create</action>
283507
- <title>Investigate caching layer</title>
283508
- <description>Found references to Redis caching in auth module</description>
283509
- </task>
283510
-
283511
- *Inserting a task after a specific task (to maintain logical order):*
283512
- <task>
283513
- <action>create</action>
283514
- <title>Check rate limiting</title>
283515
- <after>task-2</after>
283516
- </task>
283517
-
283518
- *Cancelling and splitting a complex task:*
283519
- <task>
283520
- <action>update</action>
283521
- <id>task-3</id>
283522
- <status>cancelled</status>
283523
- </task>
283524
- <task>
283525
- <action>create</action>
283526
- <tasks>[
283527
- {"title": "Review JWT token generation", "priority": "high"},
283528
- {"title": "Review token refresh logic"}
283529
- ]</tasks>
283530
- </task>
283531
-
283532
- **STEP 3 - Finish (before completion):**
283533
- Before calling attempt_completion, ensure ALL tasks are either:
283534
- - \`completed\` - you finished the work
283535
- - \`cancelled\` - no longer needed
283536
-
283537
- If you created tasks, you MUST resolve them all before completing.
283538
-
283539
- ## Key Rules
283540
-
283541
- 1. **Dependencies are enforced**: A task cannot start until its dependencies are completed
283542
- 2. **Circular dependencies are rejected**: task-1 \u2192 task-2 \u2192 task-1 is invalid
283543
- 3. **Completion is blocked**: attempt_completion will fail if tasks remain unresolved
283544
- 4. **List to review**: Use <task><action>list</action></task> to see current task status
283545
- 5. **Tasks are living documents**: Add, split, or cancel tasks as you learn more about the problem
283405
+ taskSystemPrompt = `[Task Management]
283406
+
283407
+ Use the task tool to track progress on complex requests with multiple distinct goals.
283408
+
283409
+ ## When to Use Tasks
283410
+
283411
+ CREATE tasks when the request has **multiple separate deliverables**:
283412
+ - "Fix bug A AND add feature B" \u2192 two tasks
283413
+ - "Investigate auth, payments, AND notifications" \u2192 three tasks
283414
+ - "Implement X, then add tests, then update docs" \u2192 three sequential tasks
283415
+
283416
+ SKIP tasks for single-goal requests, even complex ones:
283417
+ - "How does ranking work?" \u2014 just investigate and answer
283418
+ - "Explain the authentication flow" \u2014 just trace and explain
283419
+ Multiple internal steps (search, read, analyze) for one goal \u2260 multiple tasks.
283420
+
283421
+ ## Granularity
283422
+
283423
+ Tasks = logical units of work, not files or steps.
283424
+ - "Fix 8 similar test files" \u2192 ONE task (same fix repeated)
283425
+ - "Update API + tests + docs" \u2192 THREE tasks (different work types)
283426
+ - Max 3\u20134 tasks. More means you're too granular.
283427
+
283428
+ ## Workflow
283429
+
283430
+ 1. **Plan**: Call task tool with action="create" and a tasks array up front
283431
+ 2. **Execute**: Update status to "in_progress" / "completed" as you work. Add, split, or cancel tasks as you learn more.
283432
+ 3. **Finish**: All tasks must be "completed" or "cancelled" before calling attempt_completion.
283433
+
283434
+ ## Rules
283435
+
283436
+ - Dependencies are enforced: a task cannot start until its dependencies are completed
283437
+ - Circular dependencies are rejected
283438
+ - attempt_completion is blocked while tasks remain unresolved
283546
283439
  `;
283547
- taskGuidancePrompt = `<task_guidance>
283548
- Does this request have MULTIPLE DISTINCT GOALS?
283440
+ taskGuidancePrompt = `Does this request have MULTIPLE DISTINCT GOALS?
283549
283441
  - "Do A AND B AND C" (multiple goals) \u2192 Create tasks for each goal
283550
283442
  - "Investigate/explain/find X" (single goal) \u2192 Skip tasks, just answer directly
283551
-
283552
- Multiple internal steps (search, read, analyze) for ONE goal = NO tasks needed.
283553
- Only create tasks when there are separate deliverables the user is asking for.
283554
-
283555
- If creating tasks, use the task tool with action="create" first.
283556
- </task_guidance>`;
283443
+ Multiple internal steps for ONE goal = NO tasks needed.
283444
+ If creating tasks, use the task tool with action="create" first.`;
283557
283445
  }
283558
283446
  });
283559
283447
 
@@ -330052,9 +329940,10 @@ If the solution is clear, you can jump to implementation right away. If not, ask
330052
329940
  - After every significant change, verify the project still builds and passes linting. Do not wait until the end to discover breakage.
330053
329941
 
330054
329942
  # After Implementation
330055
- - Always run the project's tests before considering the task complete. If tests fail, fix them.
330056
- - Run lint and typecheck commands if known for the project.
330057
- - If a build, lint, or test fails, fix the issue before finishing.
329943
+ - Verify the project builds successfully. If it doesn't, fix the build before moving on.
329944
+ - Run lint and typecheck commands if known for the project. Fix any new warnings or errors you introduced.
329945
+ - Add tests for any new or changed functionality. Tests must cover the main path and important edge cases.
329946
+ - Run the project's full test suite. If any tests fail (including pre-existing ones you may have broken), fix them before finishing.
330058
329947
  - When the task is done, respond to the user with a concise summary of what was implemented, what files were changed, and any relevant details. Include links (e.g. pull request URL) so the user has everything they need.
330059
329948
 
330060
329949
  # GitHub Integration
@@ -339267,6 +339156,19 @@ function isContextLimitError(error2) {
339267
339156
  }
339268
339157
  return false;
339269
339158
  }
339159
+ function messageContainsCompletion(msg) {
339160
+ if (Array.isArray(msg.toolInvocations)) {
339161
+ if (msg.toolInvocations.some((t5) => t5.toolName === "attempt_completion")) return true;
339162
+ }
339163
+ if (Array.isArray(msg.tool_calls)) {
339164
+ if (msg.tool_calls.some((t5) => t5.function?.name === "attempt_completion")) return true;
339165
+ }
339166
+ if (Array.isArray(msg.content)) {
339167
+ if (msg.content.some((p5) => p5.type === "tool-call" && p5.toolName === "attempt_completion")) return true;
339168
+ }
339169
+ const text = typeof msg.content === "string" ? msg.content : "";
339170
+ return text.includes("attempt_completion");
339171
+ }
339270
339172
  function identifyMessageSegments(messages) {
339271
339173
  const segments = [];
339272
339174
  let currentSegment = null;
@@ -339275,27 +339177,23 @@ function identifyMessageSegments(messages) {
339275
339177
  if (msg.role === "system") {
339276
339178
  continue;
339277
339179
  }
339180
+ if (msg.role === "tool" && currentSegment) {
339181
+ currentSegment.monologueIndices.push(i5);
339182
+ continue;
339183
+ }
339278
339184
  if (msg.role === "user") {
339279
- const content = typeof msg.content === "string" ? msg.content : "";
339280
- const isToolResult = content.includes("<tool_result>");
339281
- if (isToolResult && currentSegment) {
339282
- currentSegment.finalIndex = i5;
339185
+ if (currentSegment) {
339283
339186
  segments.push(currentSegment);
339284
- currentSegment = null;
339285
- } else {
339286
- if (currentSegment) {
339287
- segments.push(currentSegment);
339288
- }
339289
- currentSegment = {
339290
- userIndex: i5,
339291
- monologueIndices: [],
339292
- finalIndex: null
339293
- };
339294
339187
  }
339188
+ currentSegment = {
339189
+ userIndex: i5,
339190
+ monologueIndices: [],
339191
+ finalIndex: null
339192
+ };
339295
339193
  }
339296
339194
  if (msg.role === "assistant" && currentSegment) {
339297
- const content = typeof msg.content === "string" ? msg.content : "";
339298
- if (content.includes("<attempt_completion>") || content.includes("attempt_completion")) {
339195
+ const hasCompletion = messageContainsCompletion(msg);
339196
+ if (hasCompletion) {
339299
339197
  currentSegment.monologueIndices.push(i5);
339300
339198
  currentSegment.finalIndex = i5;
339301
339199
  segments.push(currentSegment);
@@ -357402,8 +357300,7 @@ Instructions:
357402
357300
  - Format as a structured list if multiple items found
357403
357301
  - If nothing relevant is found in this chunk, respond with "No relevant items found in this chunk."
357404
357302
  - Do NOT summarize the code - extract the specific information requested
357405
- - IMPORTANT: When completing, always use the FULL format: <attempt_completion><result>YOUR ANSWER HERE</result></attempt_completion>
357406
- - Do NOT use the shorthand <attempt_complete></attempt_complete> format`;
357303
+ - When done, use the attempt_completion tool with your answer as the result.`;
357407
357304
  try {
357408
357305
  const result = await delegate({
357409
357306
  task,
@@ -357468,7 +357365,7 @@ async function aggregateResults(chunkResults2, aggregation, extractionPrompt, op
357468
357365
  ${stripResultTags(r5.result)}`).join("\n\n");
357469
357366
  const completionNote = `
357470
357367
 
357471
- IMPORTANT: When completing, always use the FULL format: <attempt_completion><result>YOUR ANSWER HERE</result></attempt_completion>`;
357368
+ When done, use the attempt_completion tool with your answer as the result.`;
357472
357369
  const aggregationPrompts = {
357473
357370
  summarize: `Synthesize these analyses into a comprehensive summary. Combine related findings, remove redundancy, and present a coherent overview.
357474
357371
 
@@ -357626,7 +357523,7 @@ Your answer should:
357626
357523
 
357627
357524
  Format your response as a well-structured document that fully answers: "${question}"
357628
357525
 
357629
- IMPORTANT: When completing, use the FULL format: <attempt_completion><result>YOUR ANSWER HERE</result></attempt_completion>`;
357526
+ When done, use the attempt_completion tool with your answer as the result.`;
357630
357527
  try {
357631
357528
  const result = await delegate({
357632
357529
  task: synthesisTask,
@@ -357957,7 +357854,7 @@ function buildSearchDelegateTask({ searchQuery, searchPath, exact, language, all
357957
357854
  "",
357958
357855
  "Strategy for complex queries:",
357959
357856
  "1. Analyze the query - identify key concepts, entities, and relationships",
357960
- '2. Run focused searches for each concept (e.g., "error handling" + "authentication" separately)',
357857
+ '2. Run focused searches for each independent concept (e.g., for "how do payments work and how are emails sent", search "payments" and "emails" separately since they are unrelated)',
357961
357858
  "3. Use extract to verify relevance of promising results",
357962
357859
  "4. Combine all relevant targets in your final response",
357963
357860
  "",
@@ -358696,9 +358593,7 @@ Example: <edit><file_path>${file_path}</file_path><symbol>${allMatches[0].qualif
358696
358593
  if (fileTracker) {
358697
358594
  const check = fileTracker.checkSymbolContent(resolvedPath2, symbol15, symbolInfo.code);
358698
358595
  if (!check.ok && check.reason === "stale") {
358699
- return `Error editing ${file_path}: Symbol "${symbol15}" has changed since you last read it. Use extract to re-read the current content, then retry.
358700
-
358701
- Example: <extract><targets>${file_path}#${symbol15}</targets></extract>`;
358596
+ return `Error editing ${file_path}: Symbol "${symbol15}" has changed since you last read it. Use the extract tool with targets="${file_path}#${symbol15}" to re-read the current content, then retry.`;
358702
358597
  }
358703
358598
  }
358704
358599
  const content = await import_fs12.promises.readFile(resolvedPath2, "utf-8");
@@ -358936,9 +358831,7 @@ Parameters:
358936
358831
  }
358937
358832
  if (options.fileTracker && !options.fileTracker.isFileSeen(resolvedPath2)) {
358938
358833
  const displayPath = toRelativePath(resolvedPath2, workspaceRoot);
358939
- return `Error editing ${displayPath}: This file has not been read yet in this session. Use 'extract' to read the file first, then retry your edit. This ensures you are working with the current file content.
358940
-
358941
- Example: <extract><targets>${displayPath}</targets></extract>`;
358834
+ return `Error editing ${displayPath}: This file has not been read yet in this session. Use the extract tool with targets="${displayPath}" to read the file first, then retry your edit.`;
358942
358835
  }
358943
358836
  if (symbol15 !== void 0 && symbol15 !== null) {
358944
358837
  return await handleSymbolEdit({ resolvedPath: resolvedPath2, file_path, symbol: symbol15, new_string, position, debug, cwd, fileTracker: options.fileTracker });
@@ -358958,7 +358851,7 @@ Example: <extract><targets>${displayPath}</targets></extract>`;
358958
358851
  const displayPath = toRelativePath(resolvedPath2, workspaceRoot);
358959
358852
  return `Error editing ${displayPath}: ${staleCheck.message}
358960
358853
 
358961
- Example: <extract><targets>${displayPath}</targets></extract>`;
358854
+ Use the extract tool with targets="${displayPath}" to re-read the file, then retry.`;
358962
358855
  }
358963
358856
  }
358964
358857
  const content = await import_fs12.promises.readFile(resolvedPath2, "utf-8");
@@ -395622,7 +395515,7 @@ module.exports = /*#__PURE__*/JSON.parse('{"100":"Continue","101":"Switching Pro
395622
395515
  /***/ ((module) => {
395623
395516
 
395624
395517
  "use strict";
395625
- module.exports = /*#__PURE__*/JSON.parse('{"name":"@probelabs/visor","version":"0.1.158","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","@modelcontextprotocol/sdk":"^1.25.3","@nyariv/sandboxjs":"github:probelabs/SandboxJS#f1c13b8eee98734a8ea024061eada4aa9a9ff2e9","@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/core":"^1.30.1","@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-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-rc271","@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","cli-table3":"^0.6.5","commander":"^14.0.0","deepmerge":"^4.3.1","dotenv":"^17.2.3","ignore":"^7.0.5","js-yaml":"^4.1.0","jsonpath-plus":"^10.4.0","liquidjs":"^10.21.1","minimatch":"^10.2.2","node-cron":"^3.0.3","open":"^9.1.0","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/node":"^24.3.0","@types/node-cron":"^3.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"]}}');
395518
+ module.exports = /*#__PURE__*/JSON.parse('{"name":"@probelabs/visor","version":"0.1.159","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","@modelcontextprotocol/sdk":"^1.25.3","@nyariv/sandboxjs":"github:probelabs/SandboxJS#f1c13b8eee98734a8ea024061eada4aa9a9ff2e9","@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/core":"^1.30.1","@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-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-rc274","@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","cli-table3":"^0.6.5","commander":"^14.0.0","deepmerge":"^4.3.1","dotenv":"^17.2.3","ignore":"^7.0.5","js-yaml":"^4.1.0","jsonpath-plus":"^10.4.0","liquidjs":"^10.21.1","minimatch":"^10.2.2","node-cron":"^3.0.3","open":"^9.1.0","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/node":"^24.3.0","@types/node-cron":"^3.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"]}}');
395626
395519
 
395627
395520
  /***/ })
395628
395521