@workbench-ai/workbench 0.0.101 → 0.0.102
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.d.ts.map +1 -1
- package/dist/index.js +55 -39
- package/dist/install-targets.js +1 -1
- package/package.json +6 -6
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiEA,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;CAC/B;AAuTD,wBAAsB,MAAM,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,EAAE,GAAE,KAGzD,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiEA,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;CAC/B;AAuTD,wBAAsB,MAAM,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,EAAE,GAAE,KAGzD,GAAG,OAAO,CAAC,MAAM,CAAC,CAgOlB"}
|
package/dist/index.js
CHANGED
|
@@ -337,7 +337,7 @@ export async function runCli(argv, io = {
|
|
|
337
337
|
rejectExtraInput(parsed, {
|
|
338
338
|
maxPositionals: 1,
|
|
339
339
|
message: "workbench eval does not accept a VERSION argument.",
|
|
340
|
-
remediation: "
|
|
340
|
+
remediation: "workbench eval",
|
|
341
341
|
});
|
|
342
342
|
if (parsed.flags.cloud === true) {
|
|
343
343
|
return await handleCloudEval(parsed, io);
|
|
@@ -373,7 +373,7 @@ export async function runCli(argv, io = {
|
|
|
373
373
|
rejectExtraInput(parsed, {
|
|
374
374
|
maxPositionals: 1,
|
|
375
375
|
message: "workbench improve does not accept a VERSION argument.",
|
|
376
|
-
remediation: "
|
|
376
|
+
remediation: "workbench improve",
|
|
377
377
|
});
|
|
378
378
|
if (parsed.flags.cloud === true) {
|
|
379
379
|
return await handleCloudImprove(parsed, io);
|
|
@@ -384,6 +384,7 @@ export async function runCli(argv, io = {
|
|
|
384
384
|
agent: stringFlag(parsed, "agents"),
|
|
385
385
|
budget: intFlag(parsed, "budget"),
|
|
386
386
|
samples: intFlag(parsed, "samples"),
|
|
387
|
+
progress: (message) => writeCliProgress(parsed, io, message, { json: true }),
|
|
387
388
|
});
|
|
388
389
|
return output({
|
|
389
390
|
...result,
|
|
@@ -469,6 +470,7 @@ export async function runCli(argv, io = {
|
|
|
469
470
|
try {
|
|
470
471
|
writeCliProgress(parsed, io, "workbench publish: preparing Cloud skill.");
|
|
471
472
|
remote = await ensurePublishRemote(parsed);
|
|
473
|
+
await writeAuthenticatedJsonProgress(parsed, io, remote, `workbench publish: publishing ${optionalPositional(parsed, 1) ?? "current"} source.`);
|
|
472
474
|
writeCliProgress(parsed, io, `workbench publish: publishing ${optionalPositional(parsed, 1) ?? "current"} source.`);
|
|
473
475
|
result = await publishWorkbenchVersion({
|
|
474
476
|
...core,
|
|
@@ -535,7 +537,7 @@ async function handleStatus(parsed, io) {
|
|
|
535
537
|
async function handleLog(parsed, io) {
|
|
536
538
|
if (parsed.flags.runs === true && parsed.flags.versions === true) {
|
|
537
539
|
throw new WorkbenchCodedError("usage", "workbench log accepts only one of --runs or --versions.", {
|
|
538
|
-
remediation: "
|
|
540
|
+
remediation: "workbench log --runs",
|
|
539
541
|
exitCode: 2,
|
|
540
542
|
});
|
|
541
543
|
}
|
|
@@ -549,7 +551,7 @@ async function handleLog(parsed, io) {
|
|
|
549
551
|
rejectExtraInput(parsed, {
|
|
550
552
|
maxPositionals: 1,
|
|
551
553
|
message: "workbench log does not accept refs or paths.",
|
|
552
|
-
remediation: "
|
|
554
|
+
remediation: "workbench log",
|
|
553
555
|
});
|
|
554
556
|
}
|
|
555
557
|
const snapshot = await createWorkbenchInspectionSnapshot(await coreOptions(parsed));
|
|
@@ -683,7 +685,7 @@ async function handleAdapterLogout(provider, parsed, io) {
|
|
|
683
685
|
status: "not_authenticated",
|
|
684
686
|
sync: "skipped",
|
|
685
687
|
reason: "not_authenticated",
|
|
686
|
-
remediation: "
|
|
688
|
+
remediation: "workbench login",
|
|
687
689
|
};
|
|
688
690
|
}
|
|
689
691
|
throw error;
|
|
@@ -772,7 +774,7 @@ async function handleLogin(parsed, io) {
|
|
|
772
774
|
}
|
|
773
775
|
if (parsed.flags["start-only"] === true || parsed.flags.wait === true || parsed.flags.timeout !== undefined || parsed.flags["no-open"] === true) {
|
|
774
776
|
throw new WorkbenchCodedError("usage", "Workbench Cloud login flags do not apply to provider login.", {
|
|
775
|
-
remediation: `
|
|
777
|
+
remediation: `workbench login ${provider} --method ${authMethod(parsed, provider)}`,
|
|
776
778
|
exitCode: 2,
|
|
777
779
|
});
|
|
778
780
|
}
|
|
@@ -780,7 +782,7 @@ async function handleLogin(parsed, io) {
|
|
|
780
782
|
}
|
|
781
783
|
if (parsed.flags["start-only"] === true && parsed.flags.wait === true) {
|
|
782
784
|
throw new WorkbenchCodedError("usage", "workbench login accepts only one of --start-only or --wait.", {
|
|
783
|
-
remediation:
|
|
785
|
+
remediation: "workbench login --start-only",
|
|
784
786
|
exitCode: 2,
|
|
785
787
|
});
|
|
786
788
|
}
|
|
@@ -790,13 +792,13 @@ async function handleLogin(parsed, io) {
|
|
|
790
792
|
const timeoutSeconds = intFlag(parsed, "timeout");
|
|
791
793
|
if (startOnly && timeoutSeconds !== undefined) {
|
|
792
794
|
throw new WorkbenchCodedError("usage", "workbench login --timeout only applies with --wait.", {
|
|
793
|
-
remediation:
|
|
795
|
+
remediation: "workbench login --start-only",
|
|
794
796
|
exitCode: 2,
|
|
795
797
|
});
|
|
796
798
|
}
|
|
797
799
|
if (waitOnly && timeoutSeconds === undefined) {
|
|
798
800
|
throw new WorkbenchCodedError("usage", "workbench login --wait requires --timeout N.", {
|
|
799
|
-
remediation: `
|
|
801
|
+
remediation: `workbench login --wait --timeout ${LOGIN_WAIT_TIMEOUT_SECONDS}`,
|
|
800
802
|
exitCode: 2,
|
|
801
803
|
});
|
|
802
804
|
}
|
|
@@ -905,11 +907,11 @@ async function handleInstall(parsed, io) {
|
|
|
905
907
|
rejectExtraInput(parsed, {
|
|
906
908
|
maxPositionals: 1,
|
|
907
909
|
message: "workbench install with no HANDLE_OR_URL lists installed skills.",
|
|
908
|
-
remediation: "
|
|
910
|
+
remediation: "workbench install OWNER/SKILL",
|
|
909
911
|
});
|
|
910
912
|
if (parsed.flags.yes === true || parsed.flags["dry-run"] === true) {
|
|
911
913
|
throw new WorkbenchCodedError("usage", "workbench install inventory does not accept --yes or --dry-run.", {
|
|
912
|
-
remediation: "
|
|
914
|
+
remediation: "workbench install OWNER/SKILL --dry-run",
|
|
913
915
|
exitCode: 2,
|
|
914
916
|
});
|
|
915
917
|
}
|
|
@@ -922,13 +924,13 @@ async function handleInstall(parsed, io) {
|
|
|
922
924
|
rejectExtraInput(parsed, {
|
|
923
925
|
maxPositionals: 2,
|
|
924
926
|
message: "workbench install accepts one HANDLE_OR_URL argument.",
|
|
925
|
-
remediation: "
|
|
927
|
+
remediation: "workbench install OWNER/SKILL",
|
|
926
928
|
});
|
|
927
929
|
const source = await resolveWorkbenchInstallSourceInput(sourceInput);
|
|
928
930
|
const workbenchSource = parseWorkbenchInstallSource(source);
|
|
929
931
|
if (!workbenchSource) {
|
|
930
932
|
throw new WorkbenchCodedError("usage", "workbench install requires a Workbench Cloud source URL.", {
|
|
931
|
-
remediation: "
|
|
933
|
+
remediation: "workbench install OWNER/SKILL",
|
|
932
934
|
exitCode: 2,
|
|
933
935
|
});
|
|
934
936
|
}
|
|
@@ -1096,7 +1098,7 @@ async function startCloudExecution(command, parsed, io) {
|
|
|
1096
1098
|
const source = parseWorkbenchInstallSource(remote.url);
|
|
1097
1099
|
if (!source) {
|
|
1098
1100
|
throw new WorkbenchCodedError("remote_invalid_url", `Workbench remote is not a Cloud skill URL: ${remote.url}`, {
|
|
1099
|
-
remediation: "
|
|
1101
|
+
remediation: "workbench publish",
|
|
1100
1102
|
subject: { remote: remote.name, url: remote.url },
|
|
1101
1103
|
exitCode: 2,
|
|
1102
1104
|
});
|
|
@@ -1241,7 +1243,7 @@ async function resolveCloudAdapterAuthTargets(input) {
|
|
|
1241
1243
|
const version = snapshotVersionByRef(snapshot, input.versionId);
|
|
1242
1244
|
if (!version) {
|
|
1243
1245
|
throw new WorkbenchCodedError("version_not_found", `Version not found: ${input.versionId}`, {
|
|
1244
|
-
remediation: "
|
|
1246
|
+
remediation: "workbench status",
|
|
1245
1247
|
subject: { versionId: input.versionId },
|
|
1246
1248
|
exitCode: 1,
|
|
1247
1249
|
});
|
|
@@ -1263,8 +1265,8 @@ async function assertCloudAdapterAuthConnected(input) {
|
|
|
1263
1265
|
if (!missing) {
|
|
1264
1266
|
return;
|
|
1265
1267
|
}
|
|
1266
|
-
throw new WorkbenchCodedError("adapter_auth_required", `${formatCloudAdapterAuthTarget(missing)} disconnected
|
|
1267
|
-
remediation: `
|
|
1268
|
+
throw new WorkbenchCodedError("adapter_auth_required", `${formatCloudAdapterAuthTarget(missing)} disconnected.`, {
|
|
1269
|
+
remediation: `workbench login ${missing.adapterId}`,
|
|
1268
1270
|
subject: {
|
|
1269
1271
|
adapterId: missing.adapterId,
|
|
1270
1272
|
profile: missing.profile,
|
|
@@ -1397,7 +1399,7 @@ async function switchHostedImproveVersionIfPromoted(started) {
|
|
|
1397
1399
|
const currentVersionId = snapshot.status.currentVersionId ?? snapshot.refs.current;
|
|
1398
1400
|
if (started.startVersionId && currentVersionId && currentVersionId !== started.startVersionId) {
|
|
1399
1401
|
throw new WorkbenchCodedError("worktree_changed", "Local source changed while hosted improve was running; refusing to overwrite it.", {
|
|
1400
|
-
remediation: `
|
|
1402
|
+
remediation: `workbench switch ${outputVersionId}`,
|
|
1401
1403
|
subject: {
|
|
1402
1404
|
startedFrom: started.startVersionId,
|
|
1403
1405
|
current: currentVersionId,
|
|
@@ -1423,7 +1425,7 @@ async function ensureCloudRemoteForExecution(root, parsed) {
|
|
|
1423
1425
|
const source = parseWorkbenchInstallSource(remote.url);
|
|
1424
1426
|
if (!source) {
|
|
1425
1427
|
throw new WorkbenchCodedError("remote_invalid_url", `Workbench remote is not a Cloud skill URL: ${remote.url}`, {
|
|
1426
|
-
remediation: "
|
|
1428
|
+
remediation: "workbench publish",
|
|
1427
1429
|
subject: { remote: remote.name, url: remote.url },
|
|
1428
1430
|
exitCode: 2,
|
|
1429
1431
|
});
|
|
@@ -1485,7 +1487,7 @@ async function resolveCloudSkillId(source) {
|
|
|
1485
1487
|
const skill = listed.skills?.find((entry) => entry.ownerSlug === source.owner && entry.name === source.skill);
|
|
1486
1488
|
if (!skill?.id) {
|
|
1487
1489
|
throw new WorkbenchCodedError("remote_not_found", `Workbench Cloud skill not found: ${source.owner}/${source.skill}`, {
|
|
1488
|
-
remediation: "
|
|
1490
|
+
remediation: "workbench publish",
|
|
1489
1491
|
subject: { owner: source.owner, skill: source.skill },
|
|
1490
1492
|
exitCode: 1,
|
|
1491
1493
|
});
|
|
@@ -1603,8 +1605,8 @@ function writeCloudProgress(io, message, enabled = true) {
|
|
|
1603
1605
|
}
|
|
1604
1606
|
io.stderr.write(`${message}\n`);
|
|
1605
1607
|
}
|
|
1606
|
-
function writeCliProgress(parsed, io, message) {
|
|
1607
|
-
if (parsed.flags.json === true) {
|
|
1608
|
+
function writeCliProgress(parsed, io, message, options = {}) {
|
|
1609
|
+
if (parsed.flags.json === true && options.json !== true) {
|
|
1608
1610
|
return;
|
|
1609
1611
|
}
|
|
1610
1612
|
io.stderr.write(`${message}\n`);
|
|
@@ -1698,7 +1700,7 @@ async function fetchWorkbenchInstallSourceSnapshot(source, displaySource) {
|
|
|
1698
1700
|
throw new WorkbenchCodedError("auth_required", token
|
|
1699
1701
|
? `Workbench Cloud rejected the provided token while installing ${displaySource}.`
|
|
1700
1702
|
: `Authentication is required to install ${displaySource}.`, {
|
|
1701
|
-
remediation: "
|
|
1703
|
+
remediation: "workbench login",
|
|
1702
1704
|
exitCode: 1,
|
|
1703
1705
|
});
|
|
1704
1706
|
}
|
|
@@ -1837,9 +1839,9 @@ function optionalWorkbenchBaseUrl(input = {}) {
|
|
|
1837
1839
|
function workbenchLoginRemediation(baseUrl) {
|
|
1838
1840
|
const normalized = baseUrl ? normalizeBaseUrl(baseUrl) : DEFAULT_WORKBENCH_CLOUD_BASE_URL;
|
|
1839
1841
|
if (normalized === DEFAULT_WORKBENCH_CLOUD_BASE_URL) {
|
|
1840
|
-
return "
|
|
1842
|
+
return "workbench login";
|
|
1841
1843
|
}
|
|
1842
|
-
return `
|
|
1844
|
+
return `workbench login --base-url ${normalized}`;
|
|
1843
1845
|
}
|
|
1844
1846
|
function normalizeBaseUrl(value) {
|
|
1845
1847
|
return value.trim().replace(/\/+$/u, "");
|
|
@@ -1915,7 +1917,7 @@ async function pollDeviceToken(baseUrl, authorization, timeoutSeconds) {
|
|
|
1915
1917
|
}
|
|
1916
1918
|
throw new WorkbenchCodedError("login_pending", "Device login is still waiting for browser authorization.", {
|
|
1917
1919
|
retryable: true,
|
|
1918
|
-
remediation: `
|
|
1920
|
+
remediation: `workbench login --wait --timeout ${LOGIN_WAIT_TIMEOUT_SECONDS}`,
|
|
1919
1921
|
subject: {
|
|
1920
1922
|
retryAfterSeconds: Math.max(1, Math.ceil(intervalMs / 1000)),
|
|
1921
1923
|
verificationUri: authorization.verification_uri,
|
|
@@ -2088,7 +2090,7 @@ async function uploadAdapterConnection(bundle, parsed) {
|
|
|
2088
2090
|
status: "not_authenticated",
|
|
2089
2091
|
sync: "skipped",
|
|
2090
2092
|
reason: "not_authenticated",
|
|
2091
|
-
remediation: "
|
|
2093
|
+
remediation: "workbench login",
|
|
2092
2094
|
};
|
|
2093
2095
|
}
|
|
2094
2096
|
await apiRequest(adapterConnectionApiPath(bundle), { method: "PUT", body: { bundle } });
|
|
@@ -2108,7 +2110,7 @@ async function deleteAdapterConnectionRemote(target, parsed) {
|
|
|
2108
2110
|
status: "not_authenticated",
|
|
2109
2111
|
sync: "skipped",
|
|
2110
2112
|
reason: "not_authenticated",
|
|
2111
|
-
remediation: "
|
|
2113
|
+
remediation: "workbench login",
|
|
2112
2114
|
};
|
|
2113
2115
|
}
|
|
2114
2116
|
await apiRequest(adapterConnectionApiPath(target), { method: "DELETE" });
|
|
@@ -2682,7 +2684,7 @@ async function defaultDiffRange(core) {
|
|
|
2682
2684
|
const current = snapshot.versions.find((version) => version.id === currentId);
|
|
2683
2685
|
if (!current) {
|
|
2684
2686
|
throw new WorkbenchCodedError("version_not_found", "Current Workbench version was not found.", {
|
|
2685
|
-
remediation: "
|
|
2687
|
+
remediation: "workbench log --versions",
|
|
2686
2688
|
exitCode: 1,
|
|
2687
2689
|
});
|
|
2688
2690
|
}
|
|
@@ -2697,7 +2699,7 @@ function parsePublishVisibilityFlags(parsed) {
|
|
|
2697
2699
|
].filter((value) => Boolean(value));
|
|
2698
2700
|
if (selected.length > 1) {
|
|
2699
2701
|
throw new WorkbenchCodedError("usage", "workbench publish accepts only one visibility flag.", {
|
|
2700
|
-
remediation: "
|
|
2702
|
+
remediation: "workbench publish --private",
|
|
2701
2703
|
exitCode: 2,
|
|
2702
2704
|
});
|
|
2703
2705
|
}
|
|
@@ -2716,7 +2718,7 @@ async function previewPublishWithDerivedRemote(parsed) {
|
|
|
2716
2718
|
: snapshotVersionByRef(reconciledSnapshot, reconciledSnapshot.status.currentVersionId ?? reconciledSnapshot.refs.current ?? "");
|
|
2717
2719
|
if (!version) {
|
|
2718
2720
|
throw new WorkbenchCodedError("version_not_found", `Version not found: ${requestedVersion ?? "current"}`, {
|
|
2719
|
-
remediation: "
|
|
2721
|
+
remediation: "workbench log --versions",
|
|
2720
2722
|
subject: { version: requestedVersion ?? "current" },
|
|
2721
2723
|
exitCode: 1,
|
|
2722
2724
|
});
|
|
@@ -2755,6 +2757,20 @@ async function ensurePublishRemote(parsed) {
|
|
|
2755
2757
|
const result = await addWorkbenchRemote(remote.name, remote.url, core);
|
|
2756
2758
|
return result.remote.name;
|
|
2757
2759
|
}
|
|
2760
|
+
async function writeAuthenticatedJsonProgress(parsed, io, remoteName, message) {
|
|
2761
|
+
if (parsed.flags.json !== true) {
|
|
2762
|
+
return;
|
|
2763
|
+
}
|
|
2764
|
+
const root = path.resolve(dirFlag(parsed) ?? process.cwd());
|
|
2765
|
+
const remote = remoteName
|
|
2766
|
+
? (await inspectionRemotes(root)).find((entry) => entry.name === remoteName)
|
|
2767
|
+
: preferredCloudRemote(await inspectionRemotes(root));
|
|
2768
|
+
const source = remote ? parseWorkbenchInstallSource(remote.url) : undefined;
|
|
2769
|
+
if (!source || !await workbenchCloudToken({ baseUrl: source.baseUrl })) {
|
|
2770
|
+
return;
|
|
2771
|
+
}
|
|
2772
|
+
writeCliProgress(parsed, io, message, { json: true });
|
|
2773
|
+
}
|
|
2758
2774
|
async function derivePublishCloudRemote(parsed, action = "workbench publish", name = "cloud") {
|
|
2759
2775
|
const config = await loadConfig();
|
|
2760
2776
|
const baseUrl = optionalWorkbenchBaseUrl({ configBaseUrl: config.baseUrl }) ?? DEFAULT_WORKBENCH_CLOUD_BASE_URL;
|
|
@@ -2767,7 +2783,7 @@ function installHandleFromCloudRemote(remote) {
|
|
|
2767
2783
|
const source = parseWorkbenchInstallSource(remote.url);
|
|
2768
2784
|
if (!source) {
|
|
2769
2785
|
throw new WorkbenchCodedError("remote_invalid_url", `Workbench remote is not a Cloud skill URL: ${remote.url}`, {
|
|
2770
|
-
remediation: "
|
|
2786
|
+
remediation: "workbench publish",
|
|
2771
2787
|
subject: { remote: remote.name, url: remote.url },
|
|
2772
2788
|
exitCode: 2,
|
|
2773
2789
|
});
|
|
@@ -2798,14 +2814,14 @@ async function publishAuthRemediation(parsed, remoteName, fallback) {
|
|
|
2798
2814
|
return workbenchLoginRemediation(source?.baseUrl);
|
|
2799
2815
|
}
|
|
2800
2816
|
catch {
|
|
2801
|
-
return fallback ?? "
|
|
2817
|
+
return fallback ?? "workbench login";
|
|
2802
2818
|
}
|
|
2803
2819
|
}
|
|
2804
2820
|
function parseOwnerSkillHandle(input) {
|
|
2805
2821
|
const handle = normalizedOwnerSkillHandle(input);
|
|
2806
2822
|
if (!handle) {
|
|
2807
2823
|
throw new WorkbenchCodedError("usage", "workbench publish --as expects OWNER/SKILL.", {
|
|
2808
|
-
remediation: "
|
|
2824
|
+
remediation: "workbench publish --as OWNER/SKILL",
|
|
2809
2825
|
exitCode: 2,
|
|
2810
2826
|
});
|
|
2811
2827
|
}
|
|
@@ -2815,7 +2831,7 @@ function derivedOwnerSkillHandle(parsed, config, action) {
|
|
|
2815
2831
|
const owner = config.username?.trim();
|
|
2816
2832
|
if (!owner) {
|
|
2817
2833
|
throw new WorkbenchCodedError("auth_required", `${action} needs a logged-in Workbench Cloud username before it can derive OWNER/SKILL.`, {
|
|
2818
|
-
remediation: "
|
|
2834
|
+
remediation: "workbench login",
|
|
2819
2835
|
exitCode: 1,
|
|
2820
2836
|
});
|
|
2821
2837
|
}
|
|
@@ -2823,7 +2839,7 @@ function derivedOwnerSkillHandle(parsed, config, action) {
|
|
|
2823
2839
|
const handle = normalizeOwnerSkillHandle(owner, path.basename(root));
|
|
2824
2840
|
if (!handle.owner || !handle.skill) {
|
|
2825
2841
|
throw new WorkbenchCodedError("usage", `${action} could not derive a valid OWNER/SKILL handle.`, {
|
|
2826
|
-
remediation:
|
|
2842
|
+
remediation: `${action} --as OWNER/SKILL`,
|
|
2827
2843
|
subject: { owner, skill: path.basename(root) },
|
|
2828
2844
|
exitCode: 2,
|
|
2829
2845
|
});
|
|
@@ -2837,7 +2853,7 @@ async function resolveWorkbenchInstallSourceInput(input) {
|
|
|
2837
2853
|
const handle = normalizedOwnerSkillHandle(input);
|
|
2838
2854
|
if (!handle) {
|
|
2839
2855
|
throw new WorkbenchCodedError("usage", "workbench install expects OWNER/SKILL or a Workbench Cloud skill URL.", {
|
|
2840
|
-
remediation: "
|
|
2856
|
+
remediation: "workbench install OWNER/SKILL",
|
|
2841
2857
|
exitCode: 2,
|
|
2842
2858
|
});
|
|
2843
2859
|
}
|
|
@@ -3446,7 +3462,7 @@ async function fileForRunOrJobRef(core, objectRef, requestedPath) {
|
|
|
3446
3462
|
return file;
|
|
3447
3463
|
}
|
|
3448
3464
|
throw new WorkbenchCodedError("ref_not_found", `File not found in ${objectRef}: ${requestedPath}`, {
|
|
3449
|
-
remediation: `
|
|
3465
|
+
remediation: `workbench show ${objectRef}`,
|
|
3450
3466
|
subject: { ref: objectRef, path: requestedPath },
|
|
3451
3467
|
exitCode: 1,
|
|
3452
3468
|
});
|
|
@@ -3507,7 +3523,7 @@ function singleEquivalentShowFile(files) {
|
|
|
3507
3523
|
function ambiguousShowPath(objectRef, requestedPath, candidates) {
|
|
3508
3524
|
const candidatePaths = candidates.map((file) => file.path);
|
|
3509
3525
|
return new WorkbenchCodedError("ref_ambiguous", `File path is ambiguous in ${objectRef}: ${requestedPath}. Candidates: ${candidatePaths.join(", ")}.`, {
|
|
3510
|
-
remediation: `
|
|
3526
|
+
remediation: `workbench show ${objectRef}`,
|
|
3511
3527
|
subject: { ref: objectRef, path: requestedPath, candidates: candidatePaths },
|
|
3512
3528
|
exitCode: 2,
|
|
3513
3529
|
});
|
package/dist/install-targets.js
CHANGED
|
@@ -47,7 +47,7 @@ export async function installSnapshotToStore(options) {
|
|
|
47
47
|
: "none";
|
|
48
48
|
if (!options.dryRun && existingHash && previous === "overwritten" && !options.overwrite) {
|
|
49
49
|
throw new WorkbenchCodedError("install_failed", `Canonical skill already exists: ${destination}`, {
|
|
50
|
-
remediation:
|
|
50
|
+
remediation: `workbench install ${options.provenance.handle} --yes`,
|
|
51
51
|
subject: { destination },
|
|
52
52
|
exitCode: 1,
|
|
53
53
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@workbench-ai/workbench",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.102",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/workbench-ai/workbench.git",
|
|
@@ -21,10 +21,10 @@
|
|
|
21
21
|
],
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"yaml": "^2.8.2",
|
|
24
|
-
"@workbench-ai/workbench-
|
|
25
|
-
"@workbench-ai/workbench-
|
|
26
|
-
"@workbench-ai/workbench-
|
|
27
|
-
"@workbench-ai/workbench-core": "0.0.
|
|
24
|
+
"@workbench-ai/workbench-built-in-adapters": "0.0.102",
|
|
25
|
+
"@workbench-ai/workbench-protocol": "0.0.102",
|
|
26
|
+
"@workbench-ai/workbench-contract": "0.0.102",
|
|
27
|
+
"@workbench-ai/workbench-core": "0.0.102"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@tailwindcss/postcss": "^4.2.2",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"react-dom": "^19.2.0",
|
|
36
36
|
"typescript": "^5.9.2",
|
|
37
37
|
"vitest": "^3.2.4",
|
|
38
|
-
"@workbench-ai/workbench-ui": "0.0.
|
|
38
|
+
"@workbench-ai/workbench-ui": "0.0.102"
|
|
39
39
|
},
|
|
40
40
|
"scripts": {
|
|
41
41
|
"build": "rm -rf dist && tsc -p tsconfig.json && chmod 755 dist/workbench.js && node ./scripts/build-dev-open-assets.mjs",
|