@vendian/cli 0.0.20 → 0.0.21
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/cli-wrapper.mjs +132 -12
- package/package.json +1 -1
package/cli-wrapper.mjs
CHANGED
|
@@ -35807,11 +35807,12 @@ function runCapture(command, args, options = {}) {
|
|
|
35807
35807
|
shell: false,
|
|
35808
35808
|
...options
|
|
35809
35809
|
});
|
|
35810
|
+
const errorMessage3 = result.error && typeof result.error.message === "string" ? result.error.message : "";
|
|
35810
35811
|
return {
|
|
35811
|
-
ok: result.status === 0,
|
|
35812
|
+
ok: !result.error && result.status === 0,
|
|
35812
35813
|
status: result.status ?? 1,
|
|
35813
35814
|
stdout: result.stdout || "",
|
|
35814
|
-
stderr: result.stderr ||
|
|
35815
|
+
stderr: result.stderr || errorMessage3
|
|
35815
35816
|
};
|
|
35816
35817
|
}
|
|
35817
35818
|
function runInherit(command, args, options = {}) {
|
|
@@ -35916,10 +35917,12 @@ function verifyVendianImports(pythonPath) {
|
|
|
35916
35917
|
import { spawnSync as spawnSync2 } from "node:child_process";
|
|
35917
35918
|
var SERVICE = "Vendian CLI";
|
|
35918
35919
|
var PACKAGE_TOKEN_ACCOUNT = "gitlab-package-token";
|
|
35920
|
+
var SECRET_STORE_TIMEOUT_MS = 5e3;
|
|
35919
35921
|
function run(command, args, options = {}) {
|
|
35920
35922
|
return spawnSync2(command, args, {
|
|
35921
35923
|
encoding: "utf8",
|
|
35922
35924
|
shell: false,
|
|
35925
|
+
timeout: SECRET_STORE_TIMEOUT_MS,
|
|
35923
35926
|
...options
|
|
35924
35927
|
});
|
|
35925
35928
|
}
|
|
@@ -36675,7 +36678,12 @@ async function forwardToPythonVendian(args, { env: env3 = process.env, platform:
|
|
|
36675
36678
|
recordForwardedDocsCommand(args, code, { env: env3, platform: platform2 });
|
|
36676
36679
|
process.exitCode = code;
|
|
36677
36680
|
}
|
|
36678
|
-
async function preparePythonVendianInvocation(args, {
|
|
36681
|
+
async function preparePythonVendianInvocation(args, {
|
|
36682
|
+
env: env3 = process.env,
|
|
36683
|
+
platform: platform2 = process.platform,
|
|
36684
|
+
onProgress = null,
|
|
36685
|
+
skipAutoUpdate = false
|
|
36686
|
+
} = {}) {
|
|
36679
36687
|
const venvPath = managedVenvPath(env3, platform2);
|
|
36680
36688
|
const vendianPath = venvVendian(venvPath, platform2);
|
|
36681
36689
|
reportProgress(onProgress, "Checking managed Python runtime");
|
|
@@ -36688,7 +36696,9 @@ async function preparePythonVendianInvocation(args, { env: env3 = process.env, p
|
|
|
36688
36696
|
reportProgress(onProgress, "Refreshing package access");
|
|
36689
36697
|
}
|
|
36690
36698
|
const refreshed = requiresPackageAccess ? await refreshPackageAccessFromCloudAuth({ config: loadedConfig, env: env3, platform: platform2 }) : { config: loadedConfig };
|
|
36691
|
-
|
|
36699
|
+
if (!skipAutoUpdate) {
|
|
36700
|
+
maybeAutoUpdateManagedEnv({ env: env3, platform: platform2, venvPath, onProgress });
|
|
36701
|
+
}
|
|
36692
36702
|
const config = refreshed.config;
|
|
36693
36703
|
reportProgress(onProgress, "Preparing package indexes");
|
|
36694
36704
|
const registry = registryConfig(config, env3, platform2);
|
|
@@ -36794,7 +36804,7 @@ import fs12 from "node:fs";
|
|
|
36794
36804
|
import readlinePromises from "node:readline/promises";
|
|
36795
36805
|
|
|
36796
36806
|
// src/version.js
|
|
36797
|
-
var CLI_VERSION = true ? "0.0.
|
|
36807
|
+
var CLI_VERSION = true ? "0.0.21" : process.env.npm_package_version || "0.0.0-dev";
|
|
36798
36808
|
|
|
36799
36809
|
// src/npm-update.js
|
|
36800
36810
|
var NPM_CHECK_INTERVAL_MS = 30 * 60 * 1e3;
|
|
@@ -37002,6 +37012,34 @@ function findAgentDirectoryCandidates({
|
|
|
37002
37012
|
function defaultAgentsDir(candidates = []) {
|
|
37003
37013
|
return candidates[0]?.path || "./agents";
|
|
37004
37014
|
}
|
|
37015
|
+
function findAgentFolders(root, {
|
|
37016
|
+
cwd: cwd2 = process.cwd(),
|
|
37017
|
+
maxDepth = 6,
|
|
37018
|
+
maxDirs = 1e3,
|
|
37019
|
+
limit = 100
|
|
37020
|
+
} = {}) {
|
|
37021
|
+
const start = path6.resolve(cwd2);
|
|
37022
|
+
const resolvedRoot = safeResolve(root || ".");
|
|
37023
|
+
if (!resolvedRoot) {
|
|
37024
|
+
return [];
|
|
37025
|
+
}
|
|
37026
|
+
const seen = /* @__PURE__ */ new Set();
|
|
37027
|
+
const folders = [];
|
|
37028
|
+
for (const manifest of findManifestFiles(resolvedRoot, { maxDepth, maxDirs, limit })) {
|
|
37029
|
+
const folder = path6.dirname(manifest);
|
|
37030
|
+
const resolved = safeResolve(folder);
|
|
37031
|
+
if (!resolved || seen.has(resolved)) {
|
|
37032
|
+
continue;
|
|
37033
|
+
}
|
|
37034
|
+
seen.add(resolved);
|
|
37035
|
+
folders.push({
|
|
37036
|
+
path: displayPath(resolved, start),
|
|
37037
|
+
absolutePath: resolved,
|
|
37038
|
+
name: path6.basename(resolved) || displayPath(resolved, start)
|
|
37039
|
+
});
|
|
37040
|
+
}
|
|
37041
|
+
return folders.sort((a, b) => a.path.localeCompare(b.path)).slice(0, limit);
|
|
37042
|
+
}
|
|
37005
37043
|
function countAgentManifests(root, { maxDepth = 6, maxDirs = 1e3, limit = 100 } = {}) {
|
|
37006
37044
|
let count = 0;
|
|
37007
37045
|
for (const _manifest of findManifestFiles(root, { maxDepth, maxDirs, limit })) {
|
|
@@ -37959,10 +37997,21 @@ async function listCloudWorkspaces({
|
|
|
37959
37997
|
env: env3 = process.env,
|
|
37960
37998
|
platform: platform2 = process.platform,
|
|
37961
37999
|
prepareInvocation = preparePythonVendianInvocation,
|
|
37962
|
-
run: run2 = runCapture
|
|
38000
|
+
run: run2 = runCapture,
|
|
38001
|
+
onProgress = null,
|
|
38002
|
+
timeoutMs = 2e4
|
|
37963
38003
|
} = {}) {
|
|
37964
|
-
const
|
|
37965
|
-
|
|
38004
|
+
const progress = typeof onProgress === "function" ? onProgress : () => {
|
|
38005
|
+
};
|
|
38006
|
+
progress("Checking managed Python runtime");
|
|
38007
|
+
const invocation = await prepareInvocation(["cloud", "collections", "list", "--json"], {
|
|
38008
|
+
env: env3,
|
|
38009
|
+
platform: platform2,
|
|
38010
|
+
onProgress: progress,
|
|
38011
|
+
skipAutoUpdate: true
|
|
38012
|
+
});
|
|
38013
|
+
progress("Loading workspaces from Vendian");
|
|
38014
|
+
const result = run2(invocation.command, invocation.args, { env: invocation.env, timeout: timeoutMs });
|
|
37966
38015
|
if (!result.ok) {
|
|
37967
38016
|
return {
|
|
37968
38017
|
ok: false,
|
|
@@ -38567,6 +38616,7 @@ function ServeScreen({ env: env3, platform: platform2, input, onBack, onState, o
|
|
|
38567
38616
|
const [selectingDir, setSelectingDir] = useState5(() => agentDirCandidates.length > 0);
|
|
38568
38617
|
const [workspaceChoices, setWorkspaceChoices] = useState5([]);
|
|
38569
38618
|
const [pendingAgentsDir, setPendingAgentsDir] = useState5("");
|
|
38619
|
+
const [serveScopeChoice, setServeScopeChoice] = useState5(null);
|
|
38570
38620
|
const [loadingWorkspaces, setLoadingWorkspaces] = useState5(false);
|
|
38571
38621
|
const [started, setStarted] = useState5(false);
|
|
38572
38622
|
const [state, setState] = useState5(initialServeState());
|
|
@@ -38707,7 +38757,13 @@ function ServeScreen({ env: env3, platform: platform2, input, onBack, onState, o
|
|
|
38707
38757
|
setStartupError("");
|
|
38708
38758
|
setLoadingWorkspaces(true);
|
|
38709
38759
|
try {
|
|
38710
|
-
const result = await listCloudWorkspaces({
|
|
38760
|
+
const result = await listCloudWorkspaces({
|
|
38761
|
+
env: env3,
|
|
38762
|
+
platform: platform2,
|
|
38763
|
+
onProgress: (message) => {
|
|
38764
|
+
setState((current) => ({ ...current, activity: message || "Loading workspaces" }));
|
|
38765
|
+
}
|
|
38766
|
+
});
|
|
38711
38767
|
if (!result.ok) {
|
|
38712
38768
|
setStartupError(result.error || "Could not list workspaces.");
|
|
38713
38769
|
return;
|
|
@@ -38723,7 +38779,68 @@ function ServeScreen({ env: env3, platform: platform2, input, onBack, onState, o
|
|
|
38723
38779
|
setLoadingWorkspaces(false);
|
|
38724
38780
|
}
|
|
38725
38781
|
}
|
|
38782
|
+
function chooseServeScope(candidate) {
|
|
38783
|
+
if (!candidate || candidate.value === "__custom__" || candidate.value === "__back__") {
|
|
38784
|
+
return candidate?.value;
|
|
38785
|
+
}
|
|
38786
|
+
return chooseServePath(candidate.path, {
|
|
38787
|
+
absolutePath: candidate.absolutePath,
|
|
38788
|
+
agentCount: candidate.agentCount
|
|
38789
|
+
});
|
|
38790
|
+
}
|
|
38791
|
+
function chooseServePath(selectedPath, { absolutePath = selectedPath, agentCount = null } = {}) {
|
|
38792
|
+
const normalizedPath = selectedPath || "./agents";
|
|
38793
|
+
if (agentCount !== null && Number(agentCount || 0) <= 1) {
|
|
38794
|
+
chooseWorkspaceThenStart(normalizedPath);
|
|
38795
|
+
return "started";
|
|
38796
|
+
}
|
|
38797
|
+
const folders = findAgentFolders(absolutePath || normalizedPath);
|
|
38798
|
+
if (folders.length <= 1) {
|
|
38799
|
+
chooseWorkspaceThenStart(normalizedPath);
|
|
38800
|
+
return "started";
|
|
38801
|
+
}
|
|
38802
|
+
setServeScopeChoice({
|
|
38803
|
+
rootPath: normalizedPath,
|
|
38804
|
+
agentCount: agentCount ?? folders.length,
|
|
38805
|
+
folders
|
|
38806
|
+
});
|
|
38807
|
+
return "scope";
|
|
38808
|
+
}
|
|
38726
38809
|
if (!started) {
|
|
38810
|
+
if (serveScopeChoice) {
|
|
38811
|
+
const scopeItems = [
|
|
38812
|
+
{
|
|
38813
|
+
label: `All agents in ${serveScopeChoice.rootPath} (${serveScopeChoice.agentCount} agents)`,
|
|
38814
|
+
value: serveScopeChoice.rootPath
|
|
38815
|
+
},
|
|
38816
|
+
...serveScopeChoice.folders.map((folder) => ({
|
|
38817
|
+
label: `One: ${folder.path}`,
|
|
38818
|
+
value: folder.path
|
|
38819
|
+
})),
|
|
38820
|
+
{ label: "Back", value: "__back__" }
|
|
38821
|
+
];
|
|
38822
|
+
return h(
|
|
38823
|
+
Box2,
|
|
38824
|
+
{ flexDirection: "column" },
|
|
38825
|
+
h(Text2, { bold: true }, "Serve one or many agents:"),
|
|
38826
|
+
h(SelectInput2, {
|
|
38827
|
+
items: scopeItems,
|
|
38828
|
+
onSelect: (item) => {
|
|
38829
|
+
if (item.value === "__back__") {
|
|
38830
|
+
setServeScopeChoice(null);
|
|
38831
|
+
return;
|
|
38832
|
+
}
|
|
38833
|
+
chooseWorkspaceThenStart(item.value);
|
|
38834
|
+
}
|
|
38835
|
+
}),
|
|
38836
|
+
h(Text2, null, ""),
|
|
38837
|
+
h(FooterBar, { items: [
|
|
38838
|
+
{ key: "\u2191\u2193", label: "Navigate" },
|
|
38839
|
+
{ key: "\u23CE", label: "Select" },
|
|
38840
|
+
{ key: "esc", label: "Back" }
|
|
38841
|
+
] })
|
|
38842
|
+
);
|
|
38843
|
+
}
|
|
38727
38844
|
if (workspaceChoices.length > 1) {
|
|
38728
38845
|
return h(
|
|
38729
38846
|
Box2,
|
|
@@ -38756,7 +38873,10 @@ function ServeScreen({ env: env3, platform: platform2, input, onBack, onState, o
|
|
|
38756
38873
|
const items = [
|
|
38757
38874
|
...agentDirCandidates.map((candidate) => ({
|
|
38758
38875
|
label: `${candidate.path} (${candidate.agentCount} ${candidate.agentCount === 1 ? "agent" : "agents"})`,
|
|
38759
|
-
value: candidate.path
|
|
38876
|
+
value: candidate.path,
|
|
38877
|
+
path: candidate.path,
|
|
38878
|
+
absolutePath: candidate.absolutePath,
|
|
38879
|
+
agentCount: candidate.agentCount
|
|
38760
38880
|
})),
|
|
38761
38881
|
{ label: "Custom path", value: "__custom__" },
|
|
38762
38882
|
{ label: "Back", value: "__back__" }
|
|
@@ -38778,14 +38898,14 @@ function ServeScreen({ env: env3, platform: platform2, input, onBack, onState, o
|
|
|
38778
38898
|
return;
|
|
38779
38899
|
}
|
|
38780
38900
|
setAgentsDir(item.value);
|
|
38781
|
-
|
|
38901
|
+
chooseServeScope(item);
|
|
38782
38902
|
}
|
|
38783
38903
|
}),
|
|
38784
38904
|
!selectingDir && h(TextInput2, {
|
|
38785
38905
|
value: agentsDir,
|
|
38786
38906
|
placeholder: "./agents",
|
|
38787
38907
|
onChange: setAgentsDir,
|
|
38788
|
-
onSubmit: (value) =>
|
|
38908
|
+
onSubmit: (value) => chooseServePath(value)
|
|
38789
38909
|
}),
|
|
38790
38910
|
loadingWorkspaces && h(
|
|
38791
38911
|
Box2,
|