bitfab-cli 0.2.439 → 0.2.440
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 +107 -45
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -4974,7 +4974,7 @@ var require_compile = __commonJS({
|
|
|
4974
4974
|
const schOrFunc = root.refs[ref];
|
|
4975
4975
|
if (schOrFunc)
|
|
4976
4976
|
return schOrFunc;
|
|
4977
|
-
let _sch =
|
|
4977
|
+
let _sch = resolve6.call(this, root, ref);
|
|
4978
4978
|
if (_sch === void 0) {
|
|
4979
4979
|
const schema = (_a3 = root.localRefs) === null || _a3 === void 0 ? void 0 : _a3[ref];
|
|
4980
4980
|
const { schemaId } = this.opts;
|
|
@@ -5001,7 +5001,7 @@ var require_compile = __commonJS({
|
|
|
5001
5001
|
function sameSchemaEnv(s1, s2) {
|
|
5002
5002
|
return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId;
|
|
5003
5003
|
}
|
|
5004
|
-
function
|
|
5004
|
+
function resolve6(root, ref) {
|
|
5005
5005
|
let sch;
|
|
5006
5006
|
while (typeof (sch = this.refs[ref]) == "string")
|
|
5007
5007
|
ref = sch;
|
|
@@ -5632,7 +5632,7 @@ var require_fast_uri = __commonJS({
|
|
|
5632
5632
|
}
|
|
5633
5633
|
return uri;
|
|
5634
5634
|
}
|
|
5635
|
-
function
|
|
5635
|
+
function resolve6(baseURI, relativeURI, options) {
|
|
5636
5636
|
const schemelessOptions = options ? Object.assign({ scheme: "null" }, options) : { scheme: "null" };
|
|
5637
5637
|
const { parsed: baseParsed, malformedAuthorityOrPort: baseMalformed } = parseWithStatus(baseURI, schemelessOptions);
|
|
5638
5638
|
const { parsed: relativeParsed, malformedAuthorityOrPort: relativeMalformed } = parseWithStatus(relativeURI, schemelessOptions);
|
|
@@ -5916,7 +5916,7 @@ var require_fast_uri = __commonJS({
|
|
|
5916
5916
|
var fastUri = {
|
|
5917
5917
|
SCHEMES,
|
|
5918
5918
|
normalize,
|
|
5919
|
-
resolve:
|
|
5919
|
+
resolve: resolve6,
|
|
5920
5920
|
resolveComponent,
|
|
5921
5921
|
equal,
|
|
5922
5922
|
serialize,
|
|
@@ -8914,6 +8914,10 @@ import { cancel as cancel3 } from "@clack/prompts";
|
|
|
8914
8914
|
import { execSync as execSync2 } from "child_process";
|
|
8915
8915
|
import * as p7 from "@clack/prompts";
|
|
8916
8916
|
|
|
8917
|
+
// ../bitfab-plugin-lib/dist/bitfabToolHandlers.js
|
|
8918
|
+
import { readFile } from "fs/promises";
|
|
8919
|
+
import { resolve } from "path";
|
|
8920
|
+
|
|
8917
8921
|
// ../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/external.js
|
|
8918
8922
|
var external_exports = {};
|
|
8919
8923
|
__export(external_exports, {
|
|
@@ -13940,7 +13944,7 @@ var recursive = /* @__PURE__ */ new WeakMap();
|
|
|
13940
13944
|
var NONE = 0;
|
|
13941
13945
|
var ASSUMED = 1;
|
|
13942
13946
|
var PROVEN = 2;
|
|
13943
|
-
function isRecursive(inst, stack,
|
|
13947
|
+
function isRecursive(inst, stack, resolve6) {
|
|
13944
13948
|
const cached2 = recursive.get(inst);
|
|
13945
13949
|
if (cached2 !== void 0)
|
|
13946
13950
|
return cached2 ? PROVEN : NONE;
|
|
@@ -13950,7 +13954,7 @@ function isRecursive(inst, stack, resolve5) {
|
|
|
13950
13954
|
let result = NONE;
|
|
13951
13955
|
const check2 = (child) => {
|
|
13952
13956
|
if (result !== PROVEN && child?._zod) {
|
|
13953
|
-
const answer = isRecursive(child, stack,
|
|
13957
|
+
const answer = isRecursive(child, stack, resolve6);
|
|
13954
13958
|
if (answer > result)
|
|
13955
13959
|
result = answer;
|
|
13956
13960
|
}
|
|
@@ -13961,7 +13965,7 @@ function isRecursive(inst, stack, resolve5) {
|
|
|
13961
13965
|
const desc = Object.getOwnPropertyDescriptor(sh, key);
|
|
13962
13966
|
if (spread && !desc.enumerable)
|
|
13963
13967
|
continue;
|
|
13964
|
-
const child = desc.get ? ASSUMED : desc.value?._zod ? isRecursive(desc.value, stack,
|
|
13968
|
+
const child = desc.get ? ASSUMED : desc.value?._zod ? isRecursive(desc.value, stack, resolve6) : NONE;
|
|
13965
13969
|
if (child > answer)
|
|
13966
13970
|
answer = child;
|
|
13967
13971
|
}
|
|
@@ -14025,7 +14029,7 @@ function isRecursive(inst, stack, resolve5) {
|
|
|
14025
14029
|
break;
|
|
14026
14030
|
// `$ZodLazy` caches its inner on the def, so a resolved edge is followed exactly
|
|
14027
14031
|
case "lazy": {
|
|
14028
|
-
const inner = def._cachedInner ?? (
|
|
14032
|
+
const inner = def._cachedInner ?? (resolve6 ? inst._zod.innerType : void 0);
|
|
14029
14033
|
merge2(inner ? isRecursive(inner, stack, false) : ASSUMED);
|
|
14030
14034
|
break;
|
|
14031
14035
|
}
|
|
@@ -29253,17 +29257,29 @@ var getScenario = {
|
|
|
29253
29257
|
var saveScenario = {
|
|
29254
29258
|
name: "save_scenario",
|
|
29255
29259
|
title: "Save Scenario",
|
|
29256
|
-
description: "
|
|
29260
|
+
description: "Create or update one scenario. To create a scenario, or to replace its records, send traceId with records or recordsPath: the records your own system holds that relate to that trace's run, as of the run. Bitfab builds the trigger and data from the trace when the trace has no scenario yet (so far only for traces of Noah's noah-agent-turn function; any other trace with no scenario is refused), then looks for each record's quote, and failing that its text, in the inputs and outputs of the trace's spans. A record found in a span cites that span and can back an assertion; a record found in no span is kept as context the run never saw. A trace that is a replay is refused, because a scenario belongs on the original. records and recordsPath replace the saved records whole, need traceId rather than scenarioId, and cannot be sent with any other field. To edit a scenario that already exists, find it by its id or by a trace it was built from and send name, description, trigger, data, or appendData, for example to add history the run had available, record data it was missing, or correct the trigger. name, description, trigger, and data each replace the saved value whole, and fields left out are kept. To add to the data without resending it, use appendData instead of data: its history entries go after the saved ones and its missing items after the saved missing items, in one step that cannot lose another caller's append made at the same time. Send data or appendData, not both. trigger, data, and appendData entries must keep the shape get_scenario returns. A history entry's source names the span its text came from, on any trace linked to the scenario (a trace that finds it by traceId is one); set it to null or leave it out when the text is not in such a trace, and the entry still counts as data the run had but cannot be cited as evidence when the scenario is turned into assertions. A source naming a span on any other trace is refused. The trigger and data summaries are rebuilt from what is saved. An edit to a trace with no scenario, or to a scenario id that does not exist, is refused. Returns the saved scenario.",
|
|
29257
29261
|
inputSchema: {
|
|
29258
29262
|
...scenarioTargetSchema,
|
|
29259
29263
|
name: external_exports.string().min(1).optional().describe("The scenario's name."),
|
|
29260
29264
|
description: external_exports.string().min(1).optional().describe("The scenario's description."),
|
|
29261
29265
|
trigger: external_exports.preprocess(parseJsonString, external_exports.record(external_exports.string(), external_exports.unknown())).optional().describe("The whole trigger object, in the shape get_scenario returns: what started the run."),
|
|
29262
|
-
data: external_exports.preprocess(parseJsonString, external_exports.record(external_exports.string(), external_exports.unknown())).optional().describe("The whole data object, in the shape get_scenario returns: topic, history (earlier facts in time order, each with its source span), and missing (what the run did not have). Replaces the saved data. Leave it out when sending appendData."),
|
|
29266
|
+
data: external_exports.preprocess(parseJsonString, external_exports.record(external_exports.string(), external_exports.unknown())).optional().describe("The whole data object, in the shape get_scenario returns: topic, history (earlier facts in time order, each with its source span), and missing (what the run did not have). Replaces the saved data, except that the saved records are kept when it has no records field. Leave it out when sending appendData."),
|
|
29263
29267
|
appendData: external_exports.preprocess(parseJsonString, external_exports.object({
|
|
29264
29268
|
history: external_exports.array(external_exports.record(external_exports.string(), external_exports.unknown())).optional(),
|
|
29265
29269
|
missing: external_exports.array(external_exports.string()).optional()
|
|
29266
|
-
})).optional().describe("Data to add to the saved data: history entries (same shape as data.history, source optional, in time order, after the saved ones) and missing items. At least one of the two must be non-empty. Leave data out when sending this.")
|
|
29270
|
+
})).optional().describe("Data to add to the saved data: history entries (same shape as data.history, source optional, in time order, after the saved ones) and missing items. At least one of the two must be non-empty. Leave data out when sending this."),
|
|
29271
|
+
records: external_exports.preprocess(parseJsonString, external_exports.array(external_exports.record(external_exports.string(), external_exports.unknown()))).optional().describe(`The records related to this run, each { kind, ref, at, asOf, title, text, quote }. kind is one of "message", "contact", "preference", "memory", "email", "calendar_event", "action_item". ref is your own pointer to the row, such as "Input:234605". at is when the record came to exist, or null. asOf is "run" when the record is as it was at the run, or "now" when no history is kept for it. quote is a short exact string to look for in the run's spans, or null to look for the whole text. Prefer recordsPath, so the records never pass through the conversation. Send records or recordsPath, not both.`),
|
|
29272
|
+
recordsPath: external_exports.string().min(1).optional().describe("Path to a local JSON file holding the records, either as an array or as an object with a records array. The Bitfab plugin reads the file and sends its records, so they never pass through the conversation. Send records or recordsPath, not both.")
|
|
29273
|
+
}
|
|
29274
|
+
};
|
|
29275
|
+
var generateScenarioAssertions = {
|
|
29276
|
+
name: "generate_scenario_assertions",
|
|
29277
|
+
title: "Generate Scenario Assertions",
|
|
29278
|
+
description: "Turn a person's label on the scenario built from one trace into up to four assertions, saved as pending agent assertions on that trace for review. The note says what the run got right or wrong; the verdict says whether the run was right overall. Each assertion cites the spans that settle its values, from the scenario's trigger, history, and records the run saw; records the run never saw are context only. A note that gives nothing a reviewer could check against a replay yields no assertions. A trace that is a replay, or a trace with no scenario, is refused. Returns the saved assertions.",
|
|
29279
|
+
inputSchema: {
|
|
29280
|
+
traceId: external_exports.uuid().describe("ID of the trace whose run the person labeled. Its scenario supplies the context, and the assertions are saved on this trace."),
|
|
29281
|
+
verdict: external_exports.preprocess(parseJsonString, external_exports.boolean()).optional().describe("true when the person said the run was right, false when wrong. Leave it out when they gave no verdict."),
|
|
29282
|
+
note: external_exports.string().min(1).describe("What the person said was right or wrong about the run, in their words.")
|
|
29267
29283
|
}
|
|
29268
29284
|
};
|
|
29269
29285
|
var ALL_TOOL_CONTRACTS = [
|
|
@@ -29320,7 +29336,8 @@ var ALL_TOOL_CONTRACTS = [
|
|
|
29320
29336
|
getSimPlan,
|
|
29321
29337
|
saveSimPlan,
|
|
29322
29338
|
getScenario,
|
|
29323
|
-
saveScenario
|
|
29339
|
+
saveScenario,
|
|
29340
|
+
generateScenarioAssertions
|
|
29324
29341
|
];
|
|
29325
29342
|
var TOOL_NAMES = ALL_TOOL_CONTRACTS.map((contract) => contract.name).sort();
|
|
29326
29343
|
|
|
@@ -29718,6 +29735,36 @@ function withLegacyExperimentKeys(args) {
|
|
|
29718
29735
|
...args.experimentIds === void 0 ? {} : { testRunIds: args.experimentIds }
|
|
29719
29736
|
};
|
|
29720
29737
|
}
|
|
29738
|
+
function recordsInFile(parsed) {
|
|
29739
|
+
if (Array.isArray(parsed)) {
|
|
29740
|
+
return parsed;
|
|
29741
|
+
}
|
|
29742
|
+
if (typeof parsed === "object" && parsed !== null && "records" in parsed && Array.isArray(parsed.records)) {
|
|
29743
|
+
return parsed.records;
|
|
29744
|
+
}
|
|
29745
|
+
return null;
|
|
29746
|
+
}
|
|
29747
|
+
async function readRecordsFile(recordsPath) {
|
|
29748
|
+
const fullPath = resolve(recordsPath);
|
|
29749
|
+
let contents;
|
|
29750
|
+
try {
|
|
29751
|
+
contents = await readFile(fullPath, "utf8");
|
|
29752
|
+
} catch (error62) {
|
|
29753
|
+
return {
|
|
29754
|
+
error: `could not read recordsPath ${fullPath}: ${error62 instanceof Error ? error62.message : String(error62)}`
|
|
29755
|
+
};
|
|
29756
|
+
}
|
|
29757
|
+
let parsed;
|
|
29758
|
+
try {
|
|
29759
|
+
parsed = JSON.parse(contents);
|
|
29760
|
+
} catch {
|
|
29761
|
+
return { error: `recordsPath ${fullPath} is not JSON.` };
|
|
29762
|
+
}
|
|
29763
|
+
const records = recordsInFile(parsed);
|
|
29764
|
+
return records === null ? {
|
|
29765
|
+
error: `recordsPath ${fullPath} holds neither an array of records nor an object with a records array.`
|
|
29766
|
+
} : { records };
|
|
29767
|
+
}
|
|
29721
29768
|
function createBitfabToolHandlers(platform2, getConfig2, pluginVersion) {
|
|
29722
29769
|
const proxy = new McpProxy(platform2, pluginVersion);
|
|
29723
29770
|
function proxyToolCall(toolName, args) {
|
|
@@ -29760,10 +29807,25 @@ function createBitfabToolHandlers(platform2, getConfig2, pluginVersion) {
|
|
|
29760
29807
|
notes
|
|
29761
29808
|
});
|
|
29762
29809
|
}
|
|
29810
|
+
async function handleSaveScenario(args) {
|
|
29811
|
+
const { recordsPath, ...rest } = args;
|
|
29812
|
+
if (recordsPath === void 0) {
|
|
29813
|
+
return proxyToolCall("save_scenario", rest);
|
|
29814
|
+
}
|
|
29815
|
+
if (rest.records !== void 0) {
|
|
29816
|
+
return errorResult("Error saving scenario: send records or recordsPath, not both.");
|
|
29817
|
+
}
|
|
29818
|
+
const read = await readRecordsFile(recordsPath);
|
|
29819
|
+
if ("error" in read) {
|
|
29820
|
+
return errorResult(`Error saving scenario: ${read.error}`);
|
|
29821
|
+
}
|
|
29822
|
+
return proxyToolCall("save_scenario", { ...rest, records: read.records });
|
|
29823
|
+
}
|
|
29763
29824
|
const specialHandlers = {
|
|
29764
29825
|
[saveAgentLabels.name]: handleSaveAgentLabels,
|
|
29765
29826
|
[saveExperiment.name]: handleSaveExperiment,
|
|
29766
|
-
[saveExperimentGroup.name]: handleSaveExperimentGroup
|
|
29827
|
+
[saveExperimentGroup.name]: handleSaveExperimentGroup,
|
|
29828
|
+
[saveScenario.name]: handleSaveScenario
|
|
29767
29829
|
};
|
|
29768
29830
|
const handlers = ALL_TOOL_CONTRACTS.map((contract) => ({
|
|
29769
29831
|
contract,
|
|
@@ -29952,7 +30014,7 @@ function exists(p9) {
|
|
|
29952
30014
|
return false;
|
|
29953
30015
|
}
|
|
29954
30016
|
}
|
|
29955
|
-
function
|
|
30017
|
+
function readFile2(p9) {
|
|
29956
30018
|
try {
|
|
29957
30019
|
return fs6.readFileSync(p9, "utf-8");
|
|
29958
30020
|
} catch {
|
|
@@ -30003,7 +30065,7 @@ function expandGlob(rootDir, pattern) {
|
|
|
30003
30065
|
});
|
|
30004
30066
|
}
|
|
30005
30067
|
function readPnpmWorkspacePackages(rootDir) {
|
|
30006
|
-
const content =
|
|
30068
|
+
const content = readFile2(path5.join(rootDir, "pnpm-workspace.yaml"));
|
|
30007
30069
|
if (!content) {
|
|
30008
30070
|
return [];
|
|
30009
30071
|
}
|
|
@@ -30021,7 +30083,7 @@ function readPnpmWorkspacePackages(rootDir) {
|
|
|
30021
30083
|
return patterns.flatMap((p9) => expandGlob(rootDir, p9));
|
|
30022
30084
|
}
|
|
30023
30085
|
function readPackageJsonWorkspaces(rootDir) {
|
|
30024
|
-
const content =
|
|
30086
|
+
const content = readFile2(path5.join(rootDir, "package.json"));
|
|
30025
30087
|
if (!content) {
|
|
30026
30088
|
return [];
|
|
30027
30089
|
}
|
|
@@ -30039,7 +30101,7 @@ function readPackageJsonWorkspaces(rootDir) {
|
|
|
30039
30101
|
}
|
|
30040
30102
|
}
|
|
30041
30103
|
function readUvWorkspaceMembers(rootDir) {
|
|
30042
|
-
const content =
|
|
30104
|
+
const content = readFile2(path5.join(rootDir, "pyproject.toml"));
|
|
30043
30105
|
if (!content) {
|
|
30044
30106
|
return [];
|
|
30045
30107
|
}
|
|
@@ -30058,7 +30120,7 @@ function readUvWorkspaceMembers(rootDir) {
|
|
|
30058
30120
|
return patterns.flatMap((p9) => expandGlob(rootDir, p9));
|
|
30059
30121
|
}
|
|
30060
30122
|
function readGoWorkModules(rootDir) {
|
|
30061
|
-
const content =
|
|
30123
|
+
const content = readFile2(path5.join(rootDir, "go.work"));
|
|
30062
30124
|
if (!content) {
|
|
30063
30125
|
return [];
|
|
30064
30126
|
}
|
|
@@ -30713,7 +30775,7 @@ async function closeLoginWindow(signInUrl) {
|
|
|
30713
30775
|
const appName = path15.match(/\/([^/]+)\.app\//)?.[1];
|
|
30714
30776
|
return appName === void 0 ? [] : [appName];
|
|
30715
30777
|
}));
|
|
30716
|
-
await Promise.all(appNames.map((appName) => new Promise((
|
|
30778
|
+
await Promise.all(appNames.map((appName) => new Promise((resolve6) => {
|
|
30717
30779
|
const script = [
|
|
30718
30780
|
"on run argv",
|
|
30719
30781
|
" set loginPrefix to item 1 of argv",
|
|
@@ -30736,9 +30798,9 @@ async function closeLoginWindow(signInUrl) {
|
|
|
30736
30798
|
"end run"
|
|
30737
30799
|
].join("\n");
|
|
30738
30800
|
try {
|
|
30739
|
-
execFile("osascript", ["-e", script, `${url2.origin}${url2.pathname}?`, marker], { timeout: 4e3 }, () =>
|
|
30801
|
+
execFile("osascript", ["-e", script, `${url2.origin}${url2.pathname}?`, marker], { timeout: 4e3 }, () => resolve6());
|
|
30740
30802
|
} catch {
|
|
30741
|
-
|
|
30803
|
+
resolve6();
|
|
30742
30804
|
}
|
|
30743
30805
|
})));
|
|
30744
30806
|
}
|
|
@@ -31037,7 +31099,7 @@ import { join } from "path";
|
|
|
31037
31099
|
// ../bitfab-plugin-lib/dist/commands/replayProgress.js
|
|
31038
31100
|
import { spawn as spawn2 } from "child_process";
|
|
31039
31101
|
import { createWriteStream, mkdirSync as mkdirSync4, rmSync as rmSync2 } from "fs";
|
|
31040
|
-
import { dirname as dirname3, resolve as
|
|
31102
|
+
import { dirname as dirname3, resolve as resolve4 } from "path";
|
|
31041
31103
|
import { createInterface } from "readline";
|
|
31042
31104
|
|
|
31043
31105
|
// ../bitfab-plugin-lib/dist/replayCloudResult.js
|
|
@@ -31061,7 +31123,7 @@ import { dirname } from "path";
|
|
|
31061
31123
|
// ../bitfab-plugin-lib/dist/replayRunDir.js
|
|
31062
31124
|
import { randomUUID } from "crypto";
|
|
31063
31125
|
import { appendFileSync, existsSync, mkdirSync as mkdirSync2, readFileSync as readFileSync2, statSync } from "fs";
|
|
31064
|
-
import { dirname as dirname2, join as join2, resolve } from "path";
|
|
31126
|
+
import { dirname as dirname2, join as join2, resolve as resolve2 } from "path";
|
|
31065
31127
|
var EXPERIMENT_ID_KEYS = [
|
|
31066
31128
|
"experimentId",
|
|
31067
31129
|
"experiment_id",
|
|
@@ -31087,7 +31149,7 @@ function extractExperimentId(result) {
|
|
|
31087
31149
|
|
|
31088
31150
|
// ../bitfab-plugin-lib/dist/replayResultResolver.js
|
|
31089
31151
|
import { readFileSync as readFileSync3, rmSync } from "fs";
|
|
31090
|
-
import { resolve as
|
|
31152
|
+
import { resolve as resolve3 } from "path";
|
|
31091
31153
|
var replayResultSchema = external_exports.object({
|
|
31092
31154
|
items: external_exports.array(external_exports.unknown()),
|
|
31093
31155
|
experimentId: external_exports.string().optional(),
|
|
@@ -46276,7 +46338,7 @@ var Protocol = class {
|
|
|
46276
46338
|
return;
|
|
46277
46339
|
}
|
|
46278
46340
|
const pollInterval = task2.pollInterval ?? this._options?.defaultTaskPollInterval ?? 1e3;
|
|
46279
|
-
await new Promise((
|
|
46341
|
+
await new Promise((resolve6) => setTimeout(resolve6, pollInterval));
|
|
46280
46342
|
options?.signal?.throwIfAborted();
|
|
46281
46343
|
}
|
|
46282
46344
|
} catch (error62) {
|
|
@@ -46293,7 +46355,7 @@ var Protocol = class {
|
|
|
46293
46355
|
*/
|
|
46294
46356
|
request(request, resultSchema, options) {
|
|
46295
46357
|
const { relatedRequestId, resumptionToken, onresumptiontoken, task, relatedTask } = options ?? {};
|
|
46296
|
-
return new Promise((
|
|
46358
|
+
return new Promise((resolve6, reject) => {
|
|
46297
46359
|
const earlyReject = (error62) => {
|
|
46298
46360
|
reject(error62);
|
|
46299
46361
|
};
|
|
@@ -46371,7 +46433,7 @@ var Protocol = class {
|
|
|
46371
46433
|
if (!parseResult.success) {
|
|
46372
46434
|
reject(parseResult.error);
|
|
46373
46435
|
} else {
|
|
46374
|
-
|
|
46436
|
+
resolve6(parseResult.data);
|
|
46375
46437
|
}
|
|
46376
46438
|
} catch (error62) {
|
|
46377
46439
|
reject(error62);
|
|
@@ -46632,12 +46694,12 @@ var Protocol = class {
|
|
|
46632
46694
|
}
|
|
46633
46695
|
} catch {
|
|
46634
46696
|
}
|
|
46635
|
-
return new Promise((
|
|
46697
|
+
return new Promise((resolve6, reject) => {
|
|
46636
46698
|
if (signal.aborted) {
|
|
46637
46699
|
reject(new McpError(ErrorCode.InvalidRequest, "Request cancelled"));
|
|
46638
46700
|
return;
|
|
46639
46701
|
}
|
|
46640
|
-
const timeoutId = setTimeout(
|
|
46702
|
+
const timeoutId = setTimeout(resolve6, interval);
|
|
46641
46703
|
signal.addEventListener("abort", () => {
|
|
46642
46704
|
clearTimeout(timeoutId);
|
|
46643
46705
|
reject(new McpError(ErrorCode.InvalidRequest, "Request cancelled"));
|
|
@@ -47728,7 +47790,7 @@ var McpServer = class {
|
|
|
47728
47790
|
let task = createTaskResult.task;
|
|
47729
47791
|
const pollInterval = task.pollInterval ?? 5e3;
|
|
47730
47792
|
while (task.status !== "completed" && task.status !== "failed" && task.status !== "cancelled") {
|
|
47731
|
-
await new Promise((
|
|
47793
|
+
await new Promise((resolve6) => setTimeout(resolve6, pollInterval));
|
|
47732
47794
|
const updatedTask = await extra.taskStore.getTask(taskId);
|
|
47733
47795
|
if (!updatedTask) {
|
|
47734
47796
|
throw new McpError(ErrorCode.InternalError, `Task ${taskId} not found during polling`);
|
|
@@ -48392,12 +48454,12 @@ var StdioServerTransport = class {
|
|
|
48392
48454
|
this.onclose?.();
|
|
48393
48455
|
}
|
|
48394
48456
|
send(message) {
|
|
48395
|
-
return new Promise((
|
|
48457
|
+
return new Promise((resolve6) => {
|
|
48396
48458
|
const json2 = serializeMessage(message);
|
|
48397
48459
|
if (this._stdout.write(json2)) {
|
|
48398
|
-
|
|
48460
|
+
resolve6();
|
|
48399
48461
|
} else {
|
|
48400
|
-
this._stdout.once("drain",
|
|
48462
|
+
this._stdout.once("drain", resolve6);
|
|
48401
48463
|
}
|
|
48402
48464
|
});
|
|
48403
48465
|
}
|
|
@@ -49031,7 +49093,7 @@ async function runClaudeAnalyzeRepo(captureOverride, limit, prompt) {
|
|
|
49031
49093
|
}
|
|
49032
49094
|
};
|
|
49033
49095
|
try {
|
|
49034
|
-
const exitCode = await new Promise((
|
|
49096
|
+
const exitCode = await new Promise((resolve6, reject) => {
|
|
49035
49097
|
const child = spawn3(
|
|
49036
49098
|
CLI2,
|
|
49037
49099
|
[
|
|
@@ -49070,7 +49132,7 @@ async function runClaudeAnalyzeRepo(captureOverride, limit, prompt) {
|
|
|
49070
49132
|
);
|
|
49071
49133
|
return;
|
|
49072
49134
|
}
|
|
49073
|
-
|
|
49135
|
+
resolve6(code2);
|
|
49074
49136
|
});
|
|
49075
49137
|
});
|
|
49076
49138
|
flushRedactors();
|
|
@@ -49910,7 +49972,7 @@ async function runCodexAnalyzeRepo(captureOverride, limit, prompt) {
|
|
|
49910
49972
|
}
|
|
49911
49973
|
};
|
|
49912
49974
|
try {
|
|
49913
|
-
const exitCode = await new Promise((
|
|
49975
|
+
const exitCode = await new Promise((resolve6, reject) => {
|
|
49914
49976
|
const child = spawn4(
|
|
49915
49977
|
CLI3,
|
|
49916
49978
|
[
|
|
@@ -49952,7 +50014,7 @@ async function runCodexAnalyzeRepo(captureOverride, limit, prompt) {
|
|
|
49952
50014
|
);
|
|
49953
50015
|
return;
|
|
49954
50016
|
}
|
|
49955
|
-
|
|
50017
|
+
resolve6(code2);
|
|
49956
50018
|
});
|
|
49957
50019
|
});
|
|
49958
50020
|
flushRedactors();
|
|
@@ -50231,7 +50293,7 @@ async function runCursorAnalyzeRepo(captureOverride, limit, prompt) {
|
|
|
50231
50293
|
}
|
|
50232
50294
|
};
|
|
50233
50295
|
try {
|
|
50234
|
-
const exitCode = await new Promise((
|
|
50296
|
+
const exitCode = await new Promise((resolve6, reject) => {
|
|
50235
50297
|
const child = spawn5(
|
|
50236
50298
|
"cursor",
|
|
50237
50299
|
[
|
|
@@ -50276,7 +50338,7 @@ async function runCursorAnalyzeRepo(captureOverride, limit, prompt) {
|
|
|
50276
50338
|
);
|
|
50277
50339
|
return;
|
|
50278
50340
|
}
|
|
50279
|
-
|
|
50341
|
+
resolve6(code2);
|
|
50280
50342
|
});
|
|
50281
50343
|
});
|
|
50282
50344
|
flushRedactors();
|
|
@@ -50790,7 +50852,7 @@ import * as p8 from "@clack/prompts";
|
|
|
50790
50852
|
// src/setupV2Verification.ts
|
|
50791
50853
|
import { spawnSync as spawnSync4 } from "child_process";
|
|
50792
50854
|
import { existsSync as existsSync3, readFileSync as readFileSync4 } from "fs";
|
|
50793
|
-
import { basename, relative, resolve as
|
|
50855
|
+
import { basename, relative, resolve as resolve5 } from "path";
|
|
50794
50856
|
var MUTATING_TOOLS = /* @__PURE__ */ new Set(["Edit", "Write"]);
|
|
50795
50857
|
var CODE_EXTENSIONS = /* @__PURE__ */ new Set([
|
|
50796
50858
|
".cjs",
|
|
@@ -50814,7 +50876,7 @@ function pathFromToolInput(input2) {
|
|
|
50814
50876
|
return typeof path15 === "string" ? path15 : void 0;
|
|
50815
50877
|
}
|
|
50816
50878
|
function normalizePath(cwd, path15) {
|
|
50817
|
-
return
|
|
50879
|
+
return resolve5(cwd, path15);
|
|
50818
50880
|
}
|
|
50819
50881
|
function readGitDirtyPaths(cwd) {
|
|
50820
50882
|
const result = spawnSync4(
|
|
@@ -50915,7 +50977,7 @@ function resolveRelativeImport(registryPath, specifier, sourcePaths) {
|
|
|
50915
50977
|
if (!specifier.startsWith(".")) {
|
|
50916
50978
|
return void 0;
|
|
50917
50979
|
}
|
|
50918
|
-
const base =
|
|
50980
|
+
const base = resolve5(registryPath, "..", specifier);
|
|
50919
50981
|
const candidates = [
|
|
50920
50982
|
base,
|
|
50921
50983
|
`${base}.ts`,
|
|
@@ -50924,8 +50986,8 @@ function resolveRelativeImport(registryPath, specifier, sourcePaths) {
|
|
|
50924
50986
|
`${base}.mjs`,
|
|
50925
50987
|
base.replace(/\.js$/, ".ts"),
|
|
50926
50988
|
base.replace(/\.mjs$/, ".ts"),
|
|
50927
|
-
|
|
50928
|
-
|
|
50989
|
+
resolve5(base, "index.ts"),
|
|
50990
|
+
resolve5(base, "index.tsx")
|
|
50929
50991
|
];
|
|
50930
50992
|
return candidates.find((candidate) => sourcePaths.has(candidate));
|
|
50931
50993
|
}
|
|
@@ -50945,7 +51007,7 @@ function importedSourcePaths(registryPath, source, sourcePaths) {
|
|
|
50945
51007
|
return [...paths];
|
|
50946
51008
|
}
|
|
50947
51009
|
function projectTypecheckCoversRegistry(cwd, registryPath) {
|
|
50948
|
-
const configPath =
|
|
51010
|
+
const configPath = resolve5(cwd, "tsconfig.json");
|
|
50949
51011
|
if (!existsSync3(configPath)) {
|
|
50950
51012
|
return false;
|
|
50951
51013
|
}
|
package/package.json
CHANGED