@probelabs/visor 0.1.143 → 0.1.144
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.
- package/dist/index.js +189 -24
- package/dist/output/traces/{run-2026-02-25T06-11-39-869Z.ndjson → run-2026-02-25T17-29-59-894Z.ndjson} +84 -84
- package/dist/{traces/run-2026-02-25T06-12-27-651Z.ndjson → output/traces/run-2026-02-25T17-30-47-149Z.ndjson} +1092 -1092
- package/dist/sdk/{check-provider-registry-HDMOOQ3J.mjs → check-provider-registry-GKLK3I2X.mjs} +5 -5
- package/dist/sdk/{check-provider-registry-QCE7HDRY.mjs → check-provider-registry-VTNNTMWC.mjs} +5 -5
- package/dist/sdk/{check-provider-registry-3GYSI2H3.mjs → check-provider-registry-WBEOZCGW.mjs} +5 -5
- package/dist/sdk/{chunk-5X6TLBDA.mjs → chunk-CLQTOZKH.mjs} +3 -3
- package/dist/sdk/{chunk-6ZVR3WHW.mjs → chunk-D3UC5KUJ.mjs} +14 -14
- package/dist/sdk/{chunk-HBPGNGES.mjs → chunk-FG6THKK7.mjs} +3 -3
- package/dist/sdk/{chunk-HBPGNGES.mjs.map → chunk-FG6THKK7.mjs.map} +1 -1
- package/dist/sdk/{chunk-MIVULWHE.mjs → chunk-N7LW3Q5B.mjs} +14 -14
- package/dist/sdk/{chunk-RUQBSUTM.mjs → chunk-O7WE6HCA.mjs} +2 -2
- package/dist/sdk/{chunk-RUQBSUTM.mjs.map → chunk-O7WE6HCA.mjs.map} +1 -1
- package/dist/sdk/{chunk-XAOA6CQY.mjs → chunk-PES5G5RR.mjs} +3 -3
- package/dist/sdk/{chunk-TPJWUDMJ.mjs → chunk-PQWAAGUP.mjs} +2 -2
- package/dist/sdk/{chunk-HHQFJTPJ.mjs → chunk-PXWWPPNF.mjs} +14 -14
- package/dist/sdk/{chunk-TML27TJH.mjs → chunk-XHIXKNUF.mjs} +2 -2
- package/dist/sdk/{failure-condition-evaluator-TK26KQRA.mjs → failure-condition-evaluator-2BJHKTMX.mjs} +3 -3
- package/dist/sdk/{failure-condition-evaluator-G3YW5TG6.mjs → failure-condition-evaluator-LWH3NQ2S.mjs} +3 -3
- package/dist/sdk/{github-frontend-HOPD4TAR.mjs → github-frontend-ICKRZ4VV.mjs} +3 -3
- package/dist/sdk/{github-frontend-VFKREBO3.mjs → github-frontend-UUASYGNV.mjs} +3 -3
- package/dist/sdk/{host-AYYUK7CA.mjs → host-CVJ3VG5Y.mjs} +2 -2
- package/dist/sdk/{host-LCKHX2EN.mjs → host-LAF3NFPZ.mjs} +2 -2
- package/dist/sdk/{routing-GDVV3MT6.mjs → routing-3XDRYU3Z.mjs} +4 -4
- package/dist/sdk/{routing-ZNIYEVS3.mjs → routing-LEUV6A4K.mjs} +4 -4
- package/dist/sdk/{schedule-tool-handler-MIVCDCJO.mjs → schedule-tool-handler-7RGTKO24.mjs} +5 -5
- package/dist/sdk/{schedule-tool-handler-QC7CAK55.mjs → schedule-tool-handler-EYDCUGOB.mjs} +5 -5
- package/dist/sdk/{schedule-tool-handler-646OMXGP.mjs → schedule-tool-handler-W7IB4MK3.mjs} +5 -5
- package/dist/sdk/sdk.js +2 -2
- package/dist/sdk/sdk.js.map +1 -1
- package/dist/sdk/sdk.mjs +4 -4
- package/dist/sdk/{trace-helpers-HP3LKMTS.mjs → trace-helpers-NNBQNFWZ.mjs} +2 -2
- package/dist/sdk/{trace-helpers-PGKN5L72.mjs → trace-helpers-VUUP6ILH.mjs} +2 -2
- package/dist/sdk/{workflow-check-provider-HG5LNVBC.mjs → workflow-check-provider-2G2CEXFR.mjs} +5 -5
- package/dist/sdk/{workflow-check-provider-MLRZ5EHG.mjs → workflow-check-provider-FLBIJQ4Z.mjs} +5 -5
- package/dist/sdk/{workflow-check-provider-4CTBJWK5.mjs → workflow-check-provider-WW5U6R2P.mjs} +5 -5
- package/dist/traces/{run-2026-02-25T06-11-39-869Z.ndjson → run-2026-02-25T17-29-59-894Z.ndjson} +84 -84
- package/dist/{output/traces/run-2026-02-25T06-12-27-651Z.ndjson → traces/run-2026-02-25T17-30-47-149Z.ndjson} +1092 -1092
- package/package.json +2 -2
- /package/dist/sdk/{check-provider-registry-3GYSI2H3.mjs.map → check-provider-registry-GKLK3I2X.mjs.map} +0 -0
- /package/dist/sdk/{check-provider-registry-HDMOOQ3J.mjs.map → check-provider-registry-VTNNTMWC.mjs.map} +0 -0
- /package/dist/sdk/{check-provider-registry-QCE7HDRY.mjs.map → check-provider-registry-WBEOZCGW.mjs.map} +0 -0
- /package/dist/sdk/{chunk-5X6TLBDA.mjs.map → chunk-CLQTOZKH.mjs.map} +0 -0
- /package/dist/sdk/{chunk-6ZVR3WHW.mjs.map → chunk-D3UC5KUJ.mjs.map} +0 -0
- /package/dist/sdk/{chunk-MIVULWHE.mjs.map → chunk-N7LW3Q5B.mjs.map} +0 -0
- /package/dist/sdk/{chunk-XAOA6CQY.mjs.map → chunk-PES5G5RR.mjs.map} +0 -0
- /package/dist/sdk/{chunk-TML27TJH.mjs.map → chunk-PQWAAGUP.mjs.map} +0 -0
- /package/dist/sdk/{chunk-HHQFJTPJ.mjs.map → chunk-PXWWPPNF.mjs.map} +0 -0
- /package/dist/sdk/{chunk-TPJWUDMJ.mjs.map → chunk-XHIXKNUF.mjs.map} +0 -0
- /package/dist/sdk/{failure-condition-evaluator-G3YW5TG6.mjs.map → failure-condition-evaluator-2BJHKTMX.mjs.map} +0 -0
- /package/dist/sdk/{failure-condition-evaluator-TK26KQRA.mjs.map → failure-condition-evaluator-LWH3NQ2S.mjs.map} +0 -0
- /package/dist/sdk/{github-frontend-HOPD4TAR.mjs.map → github-frontend-ICKRZ4VV.mjs.map} +0 -0
- /package/dist/sdk/{github-frontend-VFKREBO3.mjs.map → github-frontend-UUASYGNV.mjs.map} +0 -0
- /package/dist/sdk/{host-AYYUK7CA.mjs.map → host-CVJ3VG5Y.mjs.map} +0 -0
- /package/dist/sdk/{host-LCKHX2EN.mjs.map → host-LAF3NFPZ.mjs.map} +0 -0
- /package/dist/sdk/{routing-GDVV3MT6.mjs.map → routing-3XDRYU3Z.mjs.map} +0 -0
- /package/dist/sdk/{routing-ZNIYEVS3.mjs.map → routing-LEUV6A4K.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-handler-646OMXGP.mjs.map → schedule-tool-handler-7RGTKO24.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-handler-MIVCDCJO.mjs.map → schedule-tool-handler-EYDCUGOB.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-handler-QC7CAK55.mjs.map → schedule-tool-handler-W7IB4MK3.mjs.map} +0 -0
- /package/dist/sdk/{trace-helpers-HP3LKMTS.mjs.map → trace-helpers-NNBQNFWZ.mjs.map} +0 -0
- /package/dist/sdk/{trace-helpers-PGKN5L72.mjs.map → trace-helpers-VUUP6ILH.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-4CTBJWK5.mjs.map → workflow-check-provider-2G2CEXFR.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-HG5LNVBC.mjs.map → workflow-check-provider-FLBIJQ4Z.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-MLRZ5EHG.mjs.map → workflow-check-provider-WW5U6R2P.mjs.map} +0 -0
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
process.env.VISOR_VERSION = '0.1.
|
|
3
|
-
process.env.PROBE_VERSION = '0.6.0-
|
|
4
|
-
process.env.VISOR_COMMIT_SHA = '
|
|
5
|
-
process.env.VISOR_COMMIT_SHORT = '
|
|
2
|
+
process.env.VISOR_VERSION = '0.1.144';
|
|
3
|
+
process.env.PROBE_VERSION = '0.6.0-rc259';
|
|
4
|
+
process.env.VISOR_COMMIT_SHA = '0f8df6f53e18e9ad94507e1761debabaf533c0df';
|
|
5
|
+
process.env.VISOR_COMMIT_SHORT = '0f8df6f';
|
|
6
6
|
/******/ (() => { // webpackBootstrap
|
|
7
7
|
/******/ var __webpack_modules__ = ({
|
|
8
8
|
|
|
@@ -280396,7 +280396,7 @@ async function handleLineEdit({ resolvedPath: resolvedPath2, file_path, start_li
|
|
|
280396
280396
|
return buildLineEditResponse(file_path, startLine, endLine, newLines.length, fileLines, startLine - 1, action, modifications);
|
|
280397
280397
|
}
|
|
280398
280398
|
}
|
|
280399
|
-
var import_ai, import_fs4, import_path5, import_fs5, editTool, createTool, editSchema, createSchema, editDescription, createDescription, editToolDefinition, createToolDefinition;
|
|
280399
|
+
var import_ai, import_fs4, import_path5, import_fs5, editTool, createTool, multiEditTool, editSchema, createSchema, multiEditSchema, editDescription, createDescription, multiEditDescription, editToolDefinition, createToolDefinition, multiEditToolDefinition;
|
|
280400
280400
|
var init_edit = __esm({
|
|
280401
280401
|
"src/tools/edit.js"() {
|
|
280402
280402
|
"use strict";
|
|
@@ -280470,7 +280470,7 @@ Parameters:
|
|
|
280470
280470
|
},
|
|
280471
280471
|
required: ["file_path", "new_string"]
|
|
280472
280472
|
},
|
|
280473
|
-
execute: async ({ file_path, old_string, new_string, replace_all = false, symbol: symbol15, position, start_line, end_line }) => {
|
|
280473
|
+
execute: async ({ file_path, old_string, new_string, replace_all = false, symbol: symbol15, position, start_line, end_line, workingDirectory }) => {
|
|
280474
280474
|
try {
|
|
280475
280475
|
if (!file_path || typeof file_path !== "string" || file_path.trim() === "") {
|
|
280476
280476
|
return `Error editing file: Invalid file_path - must be a non-empty string. Provide an absolute path or a path relative to the working directory (e.g. "src/main.js").`;
|
|
@@ -280478,7 +280478,8 @@ Parameters:
|
|
|
280478
280478
|
if (new_string === void 0 || new_string === null || typeof new_string !== "string") {
|
|
280479
280479
|
return `Error editing file: Invalid new_string - must be a string. Provide the replacement content as a string value (empty string "" is valid for deletions).`;
|
|
280480
280480
|
}
|
|
280481
|
-
const
|
|
280481
|
+
const effectiveCwd = workingDirectory || cwd || process.cwd();
|
|
280482
|
+
const resolvedPath2 = (0, import_path5.isAbsolute)(file_path) ? file_path : (0, import_path5.resolve)(effectiveCwd, file_path);
|
|
280482
280483
|
if (debug) {
|
|
280483
280484
|
console.error(`[Edit] Attempting to edit file: ${resolvedPath2}`);
|
|
280484
280485
|
}
|
|
@@ -280585,7 +280586,7 @@ Important:
|
|
|
280585
280586
|
},
|
|
280586
280587
|
required: ["file_path", "content"]
|
|
280587
280588
|
},
|
|
280588
|
-
execute: async ({ file_path, content, overwrite = false }) => {
|
|
280589
|
+
execute: async ({ file_path, content, overwrite = false, workingDirectory }) => {
|
|
280589
280590
|
try {
|
|
280590
280591
|
if (!file_path || typeof file_path !== "string" || file_path.trim() === "") {
|
|
280591
280592
|
return `Error creating file: Invalid file_path - must be a non-empty string. Provide an absolute path or a path relative to the working directory (e.g. "src/newFile.js").`;
|
|
@@ -280593,7 +280594,8 @@ Important:
|
|
|
280593
280594
|
if (content === void 0 || content === null || typeof content !== "string") {
|
|
280594
280595
|
return `Error creating file: Invalid content - must be a string. Provide the file content as a string value (empty string "" is valid for an empty file).`;
|
|
280595
280596
|
}
|
|
280596
|
-
const
|
|
280597
|
+
const effectiveCwd = workingDirectory || cwd || process.cwd();
|
|
280598
|
+
const resolvedPath2 = (0, import_path5.isAbsolute)(file_path) ? file_path : (0, import_path5.resolve)(effectiveCwd, file_path);
|
|
280597
280599
|
if (debug) {
|
|
280598
280600
|
console.error(`[Create] Attempting to create file: ${resolvedPath2}`);
|
|
280599
280601
|
}
|
|
@@ -280622,6 +280624,70 @@ Important:
|
|
|
280622
280624
|
}
|
|
280623
280625
|
});
|
|
280624
280626
|
};
|
|
280627
|
+
multiEditTool = (options = {}) => {
|
|
280628
|
+
const editInstance = editTool(options);
|
|
280629
|
+
return (0, import_ai.tool)({
|
|
280630
|
+
name: "multi_edit",
|
|
280631
|
+
description: "Apply multiple file edits in a single tool call. Accepts a JSON array of edit operations.",
|
|
280632
|
+
inputSchema: {
|
|
280633
|
+
type: "object",
|
|
280634
|
+
properties: {
|
|
280635
|
+
edits: {
|
|
280636
|
+
type: "string",
|
|
280637
|
+
description: "JSON array of edit operations. Each object supports: file_path, old_string, new_string, replace_all, symbol, position, start_line, end_line."
|
|
280638
|
+
}
|
|
280639
|
+
},
|
|
280640
|
+
required: ["edits"]
|
|
280641
|
+
},
|
|
280642
|
+
execute: async ({ edits: rawEdits }) => {
|
|
280643
|
+
let edits;
|
|
280644
|
+
if (typeof rawEdits === "string") {
|
|
280645
|
+
try {
|
|
280646
|
+
edits = JSON.parse(rawEdits);
|
|
280647
|
+
} catch (e5) {
|
|
280648
|
+
return `Error: Invalid JSON in edits parameter - ${e5.message}. Provide a raw JSON array between <edits> tags.`;
|
|
280649
|
+
}
|
|
280650
|
+
} else if (Array.isArray(rawEdits)) {
|
|
280651
|
+
edits = rawEdits;
|
|
280652
|
+
} else {
|
|
280653
|
+
return "Error: edits must be a JSON array of edit operations.";
|
|
280654
|
+
}
|
|
280655
|
+
if (!Array.isArray(edits) || edits.length === 0) {
|
|
280656
|
+
return "Error: edits must be a non-empty JSON array.";
|
|
280657
|
+
}
|
|
280658
|
+
if (edits.length > 50) {
|
|
280659
|
+
return `Error: Too many edits (${edits.length}). Maximum 50 per batch.`;
|
|
280660
|
+
}
|
|
280661
|
+
const results = [];
|
|
280662
|
+
let successCount = 0;
|
|
280663
|
+
let failCount = 0;
|
|
280664
|
+
for (let i5 = 0; i5 < edits.length; i5++) {
|
|
280665
|
+
const editOp = edits[i5];
|
|
280666
|
+
if (!editOp || typeof editOp !== "object" || Array.isArray(editOp)) {
|
|
280667
|
+
results.push(`[${i5 + 1}] FAIL: Invalid edit operation - must be an object`);
|
|
280668
|
+
failCount++;
|
|
280669
|
+
continue;
|
|
280670
|
+
}
|
|
280671
|
+
try {
|
|
280672
|
+
const result = await editInstance.execute(editOp);
|
|
280673
|
+
const isError = typeof result === "string" && result.startsWith("Error");
|
|
280674
|
+
if (isError) {
|
|
280675
|
+
results.push(`[${i5 + 1}] FAIL: ${result}`);
|
|
280676
|
+
failCount++;
|
|
280677
|
+
} else {
|
|
280678
|
+
results.push(`[${i5 + 1}] OK: ${result}`);
|
|
280679
|
+
successCount++;
|
|
280680
|
+
}
|
|
280681
|
+
} catch (error2) {
|
|
280682
|
+
results.push(`[${i5 + 1}] FAIL: ${error2.message}`);
|
|
280683
|
+
failCount++;
|
|
280684
|
+
}
|
|
280685
|
+
}
|
|
280686
|
+
const summary = `Multi-edit: ${successCount}/${edits.length} succeeded` + (failCount > 0 ? `, ${failCount} failed` : "");
|
|
280687
|
+
return summary + "\n\n" + results.join("\n");
|
|
280688
|
+
}
|
|
280689
|
+
});
|
|
280690
|
+
};
|
|
280625
280691
|
editSchema = {
|
|
280626
280692
|
type: "object",
|
|
280627
280693
|
properties: {
|
|
@@ -280679,8 +280745,19 @@ Important:
|
|
|
280679
280745
|
},
|
|
280680
280746
|
required: ["file_path", "content"]
|
|
280681
280747
|
};
|
|
280748
|
+
multiEditSchema = {
|
|
280749
|
+
type: "object",
|
|
280750
|
+
properties: {
|
|
280751
|
+
edits: {
|
|
280752
|
+
type: "string",
|
|
280753
|
+
description: "JSON array of edit operations"
|
|
280754
|
+
}
|
|
280755
|
+
},
|
|
280756
|
+
required: ["edits"]
|
|
280757
|
+
};
|
|
280682
280758
|
editDescription = "Edit files using text replacement, AST-aware symbol operations, or line-targeted editing. Supports fuzzy matching for text edits and optional hash-based integrity verification for line edits.";
|
|
280683
280759
|
createDescription = "Create new files with specified content. Will create parent directories if needed.";
|
|
280760
|
+
multiEditDescription = "Apply multiple file edits in a single tool call. Accepts a JSON array of edit operations, each supporting the same modes as the edit tool.";
|
|
280684
280761
|
editToolDefinition = `
|
|
280685
280762
|
## edit
|
|
280686
280763
|
Description: ${editDescription}
|
|
@@ -280836,6 +280913,44 @@ Examples:
|
|
|
280836
280913
|
This is a new project.</content>
|
|
280837
280914
|
<overwrite>true</overwrite>
|
|
280838
280915
|
</create>`;
|
|
280916
|
+
multiEditToolDefinition = `
|
|
280917
|
+
## multi_edit
|
|
280918
|
+
Description: ${multiEditDescription}
|
|
280919
|
+
|
|
280920
|
+
Apply multiple edits in one call. Each operation in the array uses the same parameters as the edit tool:
|
|
280921
|
+
- file_path, old_string, new_string (text mode)
|
|
280922
|
+
- file_path, symbol, new_string (symbol replace)
|
|
280923
|
+
- file_path, symbol, new_string, position (symbol insert)
|
|
280924
|
+
- file_path, start_line, new_string (line-targeted)
|
|
280925
|
+
|
|
280926
|
+
Edits are applied sequentially. Failures do not stop remaining edits. Maximum 50 edits per call.
|
|
280927
|
+
|
|
280928
|
+
Parameters:
|
|
280929
|
+
- edits: (required) JSON array of edit objects. Place raw JSON between tags.
|
|
280930
|
+
|
|
280931
|
+
When to use multi_edit vs edit:
|
|
280932
|
+
- Use edit for a single change to one file
|
|
280933
|
+
- Use multi_edit when making 2+ related changes across files (e.g., rename a function and update all call sites)
|
|
280934
|
+
- Use multi_edit for coordinated multi-file refactoring where order matters
|
|
280935
|
+
|
|
280936
|
+
Examples:
|
|
280937
|
+
|
|
280938
|
+
Multiple text replacements across files:
|
|
280939
|
+
<multi_edit>
|
|
280940
|
+
<edits>[
|
|
280941
|
+
{"file_path": "src/main.js", "old_string": "return false;", "new_string": "return true;"},
|
|
280942
|
+
{"file_path": "src/config.js", "old_string": "debug: false", "new_string": "debug: true"}
|
|
280943
|
+
]</edits>
|
|
280944
|
+
</multi_edit>
|
|
280945
|
+
|
|
280946
|
+
Mixed edit modes in one batch:
|
|
280947
|
+
<multi_edit>
|
|
280948
|
+
<edits>[
|
|
280949
|
+
{"file_path": "src/utils.js", "symbol": "oldHelper", "new_string": "function newHelper() { return 42; }"},
|
|
280950
|
+
{"file_path": "src/main.js", "old_string": "oldHelper()", "new_string": "newHelper()", "replace_all": true},
|
|
280951
|
+
{"file_path": "src/index.js", "start_line": "10", "end_line": "12", "new_string": "export { newHelper };"}
|
|
280952
|
+
]</edits>
|
|
280953
|
+
</multi_edit>`;
|
|
280839
280954
|
}
|
|
280840
280955
|
});
|
|
280841
280956
|
|
|
@@ -281328,7 +281443,8 @@ function getValidParamsForTool(toolName) {
|
|
|
281328
281443
|
task: taskSchema,
|
|
281329
281444
|
attempt_completion: attemptCompletionSchema,
|
|
281330
281445
|
edit: editSchema,
|
|
281331
|
-
create: createSchema
|
|
281446
|
+
create: createSchema,
|
|
281447
|
+
multi_edit: multiEditSchema
|
|
281332
281448
|
};
|
|
281333
281449
|
const schema = schemaMap[toolName];
|
|
281334
281450
|
if (!schema) {
|
|
@@ -281368,7 +281484,7 @@ function parseXmlToolCall(xmlString, validTools = DEFAULT_VALID_TOOLS) {
|
|
|
281368
281484
|
const closeTag = `</${toolName}>`;
|
|
281369
281485
|
const openIndex = earliestOpenIndex;
|
|
281370
281486
|
let closeIndex;
|
|
281371
|
-
if (toolName
|
|
281487
|
+
if (LAST_INDEX_TOOLS.has(toolName)) {
|
|
281372
281488
|
closeIndex = xmlString.lastIndexOf(closeTag);
|
|
281373
281489
|
if (closeIndex !== -1 && closeIndex <= openIndex + openTag.length) {
|
|
281374
281490
|
closeIndex = -1;
|
|
@@ -281393,7 +281509,15 @@ function parseXmlToolCall(xmlString, validTools = DEFAULT_VALID_TOOLS) {
|
|
|
281393
281509
|
if (paramOpenIndex === -1) {
|
|
281394
281510
|
continue;
|
|
281395
281511
|
}
|
|
281396
|
-
let paramCloseIndex
|
|
281512
|
+
let paramCloseIndex;
|
|
281513
|
+
if (RAW_CONTENT_PARAMS.has(paramName)) {
|
|
281514
|
+
paramCloseIndex = innerContent.lastIndexOf(paramCloseTag);
|
|
281515
|
+
if (paramCloseIndex !== -1 && paramCloseIndex <= paramOpenIndex + paramOpenTag.length) {
|
|
281516
|
+
paramCloseIndex = -1;
|
|
281517
|
+
}
|
|
281518
|
+
} else {
|
|
281519
|
+
paramCloseIndex = innerContent.indexOf(paramCloseTag, paramOpenIndex + paramOpenTag.length);
|
|
281520
|
+
}
|
|
281397
281521
|
if (paramCloseIndex === -1) {
|
|
281398
281522
|
let nextTagIndex = innerContent.length;
|
|
281399
281523
|
for (const nextParam of validParams) {
|
|
@@ -281405,18 +281529,26 @@ function parseXmlToolCall(xmlString, validTools = DEFAULT_VALID_TOOLS) {
|
|
|
281405
281529
|
}
|
|
281406
281530
|
paramCloseIndex = nextTagIndex;
|
|
281407
281531
|
}
|
|
281408
|
-
|
|
281532
|
+
const rawValue = innerContent.substring(
|
|
281409
281533
|
paramOpenIndex + paramOpenTag.length,
|
|
281410
281534
|
paramCloseIndex
|
|
281411
|
-
)
|
|
281412
|
-
|
|
281413
|
-
|
|
281414
|
-
|
|
281415
|
-
|
|
281416
|
-
|
|
281417
|
-
|
|
281418
|
-
|
|
281419
|
-
|
|
281535
|
+
);
|
|
281536
|
+
let paramValue;
|
|
281537
|
+
if (RAW_CONTENT_PARAMS.has(paramName)) {
|
|
281538
|
+
paramValue = unescapeXmlEntities(rawValue.replace(/^\n/, "").replace(/\n$/, ""));
|
|
281539
|
+
} else {
|
|
281540
|
+
paramValue = unescapeXmlEntities(rawValue.trim());
|
|
281541
|
+
}
|
|
281542
|
+
if (!RAW_CONTENT_PARAMS.has(paramName)) {
|
|
281543
|
+
if (paramValue.toLowerCase() === "true") {
|
|
281544
|
+
paramValue = true;
|
|
281545
|
+
} else if (paramValue.toLowerCase() === "false") {
|
|
281546
|
+
paramValue = false;
|
|
281547
|
+
} else if (!isNaN(paramValue) && paramValue.trim() !== "") {
|
|
281548
|
+
const num = Number(paramValue);
|
|
281549
|
+
if (Number.isFinite(num)) {
|
|
281550
|
+
paramValue = num;
|
|
281551
|
+
}
|
|
281420
281552
|
}
|
|
281421
281553
|
}
|
|
281422
281554
|
params[paramName] = paramValue;
|
|
@@ -281459,6 +281591,7 @@ function detectUnrecognizedToolCall(xmlString, validTools) {
|
|
|
281459
281591
|
"readImage",
|
|
281460
281592
|
"edit",
|
|
281461
281593
|
"create",
|
|
281594
|
+
"multi_edit",
|
|
281462
281595
|
"delegate",
|
|
281463
281596
|
"bash",
|
|
281464
281597
|
"task",
|
|
@@ -281588,7 +281721,7 @@ function resolveTargetPath(target, cwd) {
|
|
|
281588
281721
|
}
|
|
281589
281722
|
return filePart + suffix;
|
|
281590
281723
|
}
|
|
281591
|
-
var import_path6, searchSchema, searchAllSchema, querySchema, extractSchema, delegateSchema, listSkillsSchema, useSkillSchema, bashSchema, analyzeAllSchema, executePlanSchema, cleanupExecutePlanSchema, attemptCompletionSchema, searchToolDefinition, queryToolDefinition, extractToolDefinition, delegateToolDefinition, attemptCompletionToolDefinition, analyzeAllToolDefinition, bashToolDefinition, googleSearchToolDefinition, urlContextToolDefinition, searchDescription, queryDescription, extractDescription, delegateDescription, bashDescription, analyzeAllDescription, DEFAULT_VALID_TOOLS;
|
|
281724
|
+
var import_path6, searchSchema, searchAllSchema, querySchema, extractSchema, delegateSchema, listSkillsSchema, useSkillSchema, bashSchema, analyzeAllSchema, executePlanSchema, cleanupExecutePlanSchema, attemptCompletionSchema, searchToolDefinition, queryToolDefinition, extractToolDefinition, delegateToolDefinition, attemptCompletionToolDefinition, analyzeAllToolDefinition, bashToolDefinition, googleSearchToolDefinition, urlContextToolDefinition, searchDescription, queryDescription, extractDescription, delegateDescription, bashDescription, analyzeAllDescription, DEFAULT_VALID_TOOLS, RAW_CONTENT_PARAMS, LAST_INDEX_TOOLS;
|
|
281592
281725
|
var init_common2 = __esm({
|
|
281593
281726
|
"src/tools/common.js"() {
|
|
281594
281727
|
"use strict";
|
|
@@ -282008,6 +282141,8 @@ Capabilities:
|
|
|
282008
282141
|
"task",
|
|
282009
282142
|
"attempt_completion"
|
|
282010
282143
|
];
|
|
282144
|
+
RAW_CONTENT_PARAMS = /* @__PURE__ */ new Set(["content", "new_string", "old_string"]);
|
|
282145
|
+
LAST_INDEX_TOOLS = /* @__PURE__ */ new Set(["attempt_completion", "create", "edit"]);
|
|
282011
282146
|
}
|
|
282012
282147
|
});
|
|
282013
282148
|
|
|
@@ -282673,6 +282808,9 @@ function createTools(configOptions) {
|
|
|
282673
282808
|
if (configOptions.allowEdit && isToolAllowed("create")) {
|
|
282674
282809
|
tools2.createTool = createTool(configOptions);
|
|
282675
282810
|
}
|
|
282811
|
+
if (configOptions.allowEdit && isToolAllowed("multi_edit")) {
|
|
282812
|
+
tools2.multiEditTool = multiEditTool(configOptions);
|
|
282813
|
+
}
|
|
282676
282814
|
return tools2;
|
|
282677
282815
|
}
|
|
282678
282816
|
function parseXmlToolCallWithThinking(xmlString, validTools) {
|
|
@@ -290058,6 +290196,13 @@ function createWrappedTools(baseTools) {
|
|
|
290058
290196
|
baseTools.createTool.execute
|
|
290059
290197
|
);
|
|
290060
290198
|
}
|
|
290199
|
+
if (baseTools.multiEditTool) {
|
|
290200
|
+
wrappedTools.multiEditToolInstance = wrapToolWithEmitter(
|
|
290201
|
+
baseTools.multiEditTool,
|
|
290202
|
+
"multi_edit",
|
|
290203
|
+
baseTools.multiEditTool.execute
|
|
290204
|
+
);
|
|
290205
|
+
}
|
|
290061
290206
|
return wrappedTools;
|
|
290062
290207
|
}
|
|
290063
290208
|
var import_child_process6, import_util11, import_crypto4, import_events, import_fs7, import_fs8, import_path8, toolCallEmitter, activeToolExecutions, wrapToolWithEmitter, listFilesTool, searchFilesTool, listFilesToolInstance, searchFilesToolInstance;
|
|
@@ -353146,6 +353291,9 @@ var init_ProbeAgent = __esm({
|
|
|
353146
353291
|
if (wrappedTools.createToolInstance && isToolAllowed("create")) {
|
|
353147
353292
|
this.toolImplementations.create = wrappedTools.createToolInstance;
|
|
353148
353293
|
}
|
|
353294
|
+
if (wrappedTools.multiEditToolInstance && isToolAllowed("multi_edit")) {
|
|
353295
|
+
this.toolImplementations.multi_edit = wrappedTools.multiEditToolInstance;
|
|
353296
|
+
}
|
|
353149
353297
|
}
|
|
353150
353298
|
this.wrappedTools = wrappedTools;
|
|
353151
353299
|
if (this.debug) {
|
|
@@ -354435,6 +354583,10 @@ Workspace: ${this.allowedFolders.join(", ")}`;
|
|
|
354435
354583
|
}
|
|
354436
354584
|
if (this.allowEdit && isToolAllowed("create")) {
|
|
354437
354585
|
toolDefinitions += `${createToolDefinition}
|
|
354586
|
+
`;
|
|
354587
|
+
}
|
|
354588
|
+
if (this.allowEdit && isToolAllowed("multi_edit")) {
|
|
354589
|
+
toolDefinitions += `${multiEditToolDefinition}
|
|
354438
354590
|
`;
|
|
354439
354591
|
}
|
|
354440
354592
|
if (this.enableBash && isToolAllowed("bash")) {
|
|
@@ -354531,6 +354683,9 @@ The configuration is loaded from src/config.js lines 15-25 which contains the da
|
|
|
354531
354683
|
if (this.allowEdit && isToolAllowed("create")) {
|
|
354532
354684
|
availableToolsList += "- create: Create new files with specified content.\n";
|
|
354533
354685
|
}
|
|
354686
|
+
if (this.allowEdit && isToolAllowed("multi_edit")) {
|
|
354687
|
+
availableToolsList += "- multi_edit: Apply multiple file edits in one call using a JSON array of operations.\n";
|
|
354688
|
+
}
|
|
354534
354689
|
if (this.enableDelegate && isToolAllowed("delegate")) {
|
|
354535
354690
|
availableToolsList += "- delegate: Delegate big distinct tasks to specialized probe subagents.\n";
|
|
354536
354691
|
}
|
|
@@ -355125,6 +355280,9 @@ You are working with a workspace. Available paths: ${workspaceDesc}
|
|
|
355125
355280
|
if (this.allowEdit && this.allowedTools.isEnabled("create")) {
|
|
355126
355281
|
validTools.push("create");
|
|
355127
355282
|
}
|
|
355283
|
+
if (this.allowEdit && this.allowedTools.isEnabled("multi_edit")) {
|
|
355284
|
+
validTools.push("multi_edit");
|
|
355285
|
+
}
|
|
355128
355286
|
if (this.enableBash && this.allowedTools.isEnabled("bash")) {
|
|
355129
355287
|
validTools.push("bash");
|
|
355130
355288
|
}
|
|
@@ -358231,6 +358389,10 @@ __export(tools_exports, {
|
|
|
358231
358389
|
extractTool: () => extractTool,
|
|
358232
358390
|
getCleanupExecutePlanToolDefinition: () => getCleanupExecutePlanToolDefinition,
|
|
358233
358391
|
getExecutePlanToolDefinition: () => getExecutePlanToolDefinition,
|
|
358392
|
+
multiEditDescription: () => multiEditDescription,
|
|
358393
|
+
multiEditSchema: () => multiEditSchema,
|
|
358394
|
+
multiEditTool: () => multiEditTool,
|
|
358395
|
+
multiEditToolDefinition: () => multiEditToolDefinition,
|
|
358234
358396
|
parseAndResolvePaths: () => parseAndResolvePaths,
|
|
358235
358397
|
querySchema: () => querySchema,
|
|
358236
358398
|
queryTool: () => queryTool,
|
|
@@ -358882,6 +359044,9 @@ __export(index_exports, {
|
|
|
358882
359044
|
initializeSimpleTelemetryFromOptions: () => initializeSimpleTelemetryFromOptions,
|
|
358883
359045
|
listFilesByLevel: () => listFilesByLevel,
|
|
358884
359046
|
listFilesToolInstance: () => listFilesToolInstance,
|
|
359047
|
+
multiEditSchema: () => multiEditSchema,
|
|
359048
|
+
multiEditTool: () => multiEditTool,
|
|
359049
|
+
multiEditToolDefinition: () => multiEditToolDefinition,
|
|
358885
359050
|
parseXmlToolCall: () => parseXmlToolCall,
|
|
358886
359051
|
query: () => query,
|
|
358887
359052
|
querySchema: () => querySchema,
|
|
@@ -394190,7 +394355,7 @@ module.exports = /*#__PURE__*/JSON.parse('{"100":"Continue","101":"Switching Pro
|
|
|
394190
394355
|
/***/ ((module) => {
|
|
394191
394356
|
|
|
394192
394357
|
"use strict";
|
|
394193
|
-
module.exports = /*#__PURE__*/JSON.parse('{"name":"@probelabs/visor","version":"0.1.
|
|
394358
|
+
module.exports = /*#__PURE__*/JSON.parse('{"name":"@probelabs/visor","version":"0.1.144","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-rc259","@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"]}}');
|
|
394194
394359
|
|
|
394195
394360
|
/***/ })
|
|
394196
394361
|
|