@proagentstore/cli 0.4.62 → 0.4.63
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/bootstrap.d.ts +1 -0
- package/dist/bootstrap.js +60 -0
- package/dist/chunk-JOWYSZOL.js +97 -0
- package/dist/index.js +11 -17
- package/package.json +4 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
BOOTSTRAP_ENV,
|
|
4
|
+
NO_SELF_UPDATE_ENV,
|
|
5
|
+
cachedPayloads,
|
|
6
|
+
installPayload,
|
|
7
|
+
latestPublishedVersion,
|
|
8
|
+
newestPayload,
|
|
9
|
+
olderThan,
|
|
10
|
+
payloadAt
|
|
11
|
+
} from "./chunk-JOWYSZOL.js";
|
|
12
|
+
|
|
13
|
+
// src/bootstrap.ts
|
|
14
|
+
import { existsSync } from "fs";
|
|
15
|
+
import { dirname, join } from "path";
|
|
16
|
+
import { fileURLToPath } from "url";
|
|
17
|
+
|
|
18
|
+
// src/bootstrap/stub.ts
|
|
19
|
+
import { pathToFileURL } from "url";
|
|
20
|
+
function checksForUpdate(args) {
|
|
21
|
+
return args.find((a) => !a.startsWith("-")) === "up";
|
|
22
|
+
}
|
|
23
|
+
async function runStub(deps) {
|
|
24
|
+
const log = deps.log ?? ((line) => process.stderr.write(`${line}
|
|
25
|
+
`));
|
|
26
|
+
const local = () => newestPayload([...deps.bundled ? [deps.bundled] : [], ...(deps.cached ?? cachedPayloads)()]);
|
|
27
|
+
let chosen = local();
|
|
28
|
+
if (checksForUpdate(deps.args) && !deps.fromSource && process.env[NO_SELF_UPDATE_ENV] !== "1") {
|
|
29
|
+
const latest = await (deps.latest ?? (() => latestPublishedVersion(15e3)))();
|
|
30
|
+
if (latest && (!chosen || olderThan(chosen.version, latest))) {
|
|
31
|
+
log(`pags: updating ${chosen?.version ?? "(none)"} \u2192 ${latest}\u2026`);
|
|
32
|
+
try {
|
|
33
|
+
chosen = await (deps.install ?? ((v) => installPayload(v)))(latest);
|
|
34
|
+
log(`pags: now on ${chosen.version}`);
|
|
35
|
+
} catch (e) {
|
|
36
|
+
log(`pags: could not fetch ${latest} (${e instanceof Error ? e.message : String(e)}) \u2014 starting ${chosen?.version ?? "nothing"} instead`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (!chosen) throw new Error("pags: no CLI to run \u2014 reinstall with `npm i -g @proagentstore/cli`");
|
|
41
|
+
process.env[BOOTSTRAP_ENV] = deps.self;
|
|
42
|
+
await (deps.load ?? ((entry) => import(pathToFileURL(entry).href)))(chosen.entry);
|
|
43
|
+
return chosen;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// src/bootstrap.ts
|
|
47
|
+
var self = fileURLToPath(import.meta.url);
|
|
48
|
+
var packageDir = join(dirname(self), "..");
|
|
49
|
+
try {
|
|
50
|
+
await runStub({
|
|
51
|
+
bundled: payloadAt(packageDir),
|
|
52
|
+
args: process.argv.slice(2),
|
|
53
|
+
self,
|
|
54
|
+
fromSource: existsSync(join(packageDir, "src", "bootstrap.ts"))
|
|
55
|
+
});
|
|
56
|
+
} catch (e) {
|
|
57
|
+
process.stderr.write(`${e instanceof Error ? e.message : String(e)}
|
|
58
|
+
`);
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
// src/bootstrap/payload.ts
|
|
2
|
+
import { execFile } from "child_process";
|
|
3
|
+
import { existsSync, mkdirSync, mkdtempSync, readdirSync, readFileSync, renameSync, rmSync } from "fs";
|
|
4
|
+
import { homedir } from "os";
|
|
5
|
+
import { join } from "path";
|
|
6
|
+
import { promisify } from "util";
|
|
7
|
+
var run = promisify(execFile);
|
|
8
|
+
var CLI_PACKAGE = "@proagentstore/cli";
|
|
9
|
+
var BOOTSTRAP_ENV = "PAGS_BOOTSTRAP";
|
|
10
|
+
var NO_SELF_UPDATE_ENV = "PAGS_NO_SELF_UPDATE";
|
|
11
|
+
var KEEP = 2;
|
|
12
|
+
function payloadRoot() {
|
|
13
|
+
return process.env.PAGS_CLI_CACHE || join(homedir(), ".config", "proagentstore", "cli");
|
|
14
|
+
}
|
|
15
|
+
function olderThan(a, b) {
|
|
16
|
+
const parse = (v) => /^(\d+)\.(\d+)\.(\d+)/.exec(v.trim())?.slice(1).map(Number);
|
|
17
|
+
const x = parse(a);
|
|
18
|
+
const y = parse(b);
|
|
19
|
+
if (!x || !y) return false;
|
|
20
|
+
for (let i = 0; i < 3; i++) if (x[i] !== y[i]) return x[i] < y[i];
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
function payloadAt(dir) {
|
|
24
|
+
try {
|
|
25
|
+
const pkg = JSON.parse(readFileSync(join(dir, "package.json"), "utf-8"));
|
|
26
|
+
if (pkg.name !== CLI_PACKAGE || !pkg.version) return null;
|
|
27
|
+
const entry = join(dir, pkg.pagsPayload || "dist/index.js");
|
|
28
|
+
return existsSync(entry) ? { version: pkg.version, entry } : null;
|
|
29
|
+
} catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
var installedAt = (prefix) => join(prefix, "node_modules", ...CLI_PACKAGE.split("/"));
|
|
34
|
+
var packageDir = (root, version) => installedAt(join(root, version));
|
|
35
|
+
function cachedPayloads(root = payloadRoot()) {
|
|
36
|
+
let names;
|
|
37
|
+
try {
|
|
38
|
+
names = readdirSync(root);
|
|
39
|
+
} catch {
|
|
40
|
+
return [];
|
|
41
|
+
}
|
|
42
|
+
return names.flatMap((v) => v.startsWith(".") ? [] : payloadAt(packageDir(root, v)) ?? []);
|
|
43
|
+
}
|
|
44
|
+
function newestPayload(payloads) {
|
|
45
|
+
return payloads.reduce((best, p) => !best || olderThan(best.version, p.version) ? p : best, null);
|
|
46
|
+
}
|
|
47
|
+
async function latestPublishedVersion(timeoutMs = 3e4) {
|
|
48
|
+
try {
|
|
49
|
+
const { stdout } = await run("npm", ["view", CLI_PACKAGE, "version"], { timeout: timeoutMs });
|
|
50
|
+
return stdout.trim() || null;
|
|
51
|
+
} catch {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async function npmInstallInto(dir, version) {
|
|
56
|
+
try {
|
|
57
|
+
await run("npm", ["install", "--prefix", dir, "--omit=dev", "--no-audit", "--no-fund", "--no-save", `${CLI_PACKAGE}@${version}`], { timeout: 5 * 6e4 });
|
|
58
|
+
} catch (e) {
|
|
59
|
+
const stderr = String(e.stderr ?? "").trim();
|
|
60
|
+
throw new Error((stderr || (e instanceof Error ? e.message : String(e))).slice(-400));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async function installPayload(version, root = payloadRoot(), install = npmInstallInto) {
|
|
64
|
+
const done = payloadAt(packageDir(root, version));
|
|
65
|
+
if (done) return done;
|
|
66
|
+
mkdirSync(root, { recursive: true });
|
|
67
|
+
const scratch = mkdtempSync(join(root, `.install-${version}-`));
|
|
68
|
+
try {
|
|
69
|
+
await install(scratch, version);
|
|
70
|
+
if (payloadAt(installedAt(scratch))?.version !== version) throw new Error(`npm installed no ${CLI_PACKAGE}@${version}`);
|
|
71
|
+
try {
|
|
72
|
+
renameSync(scratch, join(root, version));
|
|
73
|
+
} catch (e) {
|
|
74
|
+
if (!payloadAt(packageDir(root, version))) throw e;
|
|
75
|
+
}
|
|
76
|
+
} finally {
|
|
77
|
+
rmSync(scratch, { recursive: true, force: true });
|
|
78
|
+
}
|
|
79
|
+
const payload = payloadAt(packageDir(root, version));
|
|
80
|
+
if (!payload) throw new Error(`${CLI_PACKAGE}@${version} is not usable after install`);
|
|
81
|
+
for (const old of cachedPayloads(root).sort((a, b) => olderThan(a.version, b.version) ? 1 : -1).slice(KEEP)) {
|
|
82
|
+
rmSync(join(root, old.version), { recursive: true, force: true });
|
|
83
|
+
}
|
|
84
|
+
return payload;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export {
|
|
88
|
+
CLI_PACKAGE,
|
|
89
|
+
BOOTSTRAP_ENV,
|
|
90
|
+
NO_SELF_UPDATE_ENV,
|
|
91
|
+
olderThan,
|
|
92
|
+
payloadAt,
|
|
93
|
+
cachedPayloads,
|
|
94
|
+
newestPayload,
|
|
95
|
+
latestPublishedVersion,
|
|
96
|
+
installPayload
|
|
97
|
+
};
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
BOOTSTRAP_ENV,
|
|
4
|
+
CLI_PACKAGE,
|
|
5
|
+
installPayload,
|
|
6
|
+
latestPublishedVersion,
|
|
7
|
+
olderThan
|
|
8
|
+
} from "./chunk-JOWYSZOL.js";
|
|
2
9
|
|
|
3
10
|
// src/index.ts
|
|
4
11
|
import { createRequire as createRequire3 } from "module";
|
|
@@ -1204,15 +1211,6 @@ var run = promisify(execFile);
|
|
|
1204
1211
|
var RUNNER_UPDATE_PATH = "/pags/runner/update";
|
|
1205
1212
|
var RUNNER_RESTART_EXIT_CODE = 75;
|
|
1206
1213
|
var SUPERVISED_ENV = "PAGS_UP_SUPERVISED";
|
|
1207
|
-
var CLI_PACKAGE = "@proagentstore/cli";
|
|
1208
|
-
function olderThan(a, b) {
|
|
1209
|
-
const parse = (v) => /^(\d+)\.(\d+)\.(\d+)/.exec(v.trim())?.slice(1).map(Number);
|
|
1210
|
-
const x = parse(a);
|
|
1211
|
-
const y = parse(b);
|
|
1212
|
-
if (!x || !y) return false;
|
|
1213
|
-
for (let i = 0; i < 3; i++) if (x[i] !== y[i]) return x[i] < y[i];
|
|
1214
|
-
return false;
|
|
1215
|
-
}
|
|
1216
1214
|
function planRunnerUpdate(f) {
|
|
1217
1215
|
if (f.fromSource) return { action: "refused", current: f.current, reason: "This runner runs from a source checkout \u2014 update it with `git pull` there, not npm." };
|
|
1218
1216
|
if (!f.latest) return { action: "refused", current: f.current, reason: `npm could not be asked for the latest ${CLI_PACKAGE} from this machine.` };
|
|
@@ -1227,15 +1225,11 @@ function planRunnerUpdate(f) {
|
|
|
1227
1225
|
if (f.busy.length > 0) return { action: "wait", current: f.current, latest: f.latest, waitingFor: f.busy };
|
|
1228
1226
|
return { action: "update", current: f.current, latest: f.latest };
|
|
1229
1227
|
}
|
|
1230
|
-
async function latestPublishedVersion() {
|
|
1231
|
-
try {
|
|
1232
|
-
const { stdout } = await run("npm", ["view", CLI_PACKAGE, "version"], { timeout: 3e4 });
|
|
1233
|
-
return stdout.trim() || null;
|
|
1234
|
-
} catch {
|
|
1235
|
-
return null;
|
|
1236
|
-
}
|
|
1237
|
-
}
|
|
1238
1228
|
async function installVersion(version2) {
|
|
1229
|
+
if (process.env[BOOTSTRAP_ENV]) {
|
|
1230
|
+
await installPayload(version2);
|
|
1231
|
+
return;
|
|
1232
|
+
}
|
|
1239
1233
|
try {
|
|
1240
1234
|
await run("npm", ["i", "-g", `${CLI_PACKAGE}@${version2}`], { timeout: 5 * 6e4 });
|
|
1241
1235
|
} catch (e) {
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@proagentstore/cli",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.63",
|
|
4
4
|
"description": "CLI for creating, publishing, and running ProAgentStore agents",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
8
|
-
"pags": "dist/
|
|
8
|
+
"pags": "dist/bootstrap.js"
|
|
9
9
|
},
|
|
10
|
+
"pagsPayload": "dist/index.js",
|
|
10
11
|
"homepage": "https://github.com/ProAgentStore/platform#readme",
|
|
11
12
|
"repository": {
|
|
12
13
|
"type": "git",
|
|
@@ -25,7 +26,7 @@
|
|
|
25
26
|
"access": "public"
|
|
26
27
|
},
|
|
27
28
|
"scripts": {
|
|
28
|
-
"build": "pnpm --filter @proagentstore/browser-runner build && tsup src/index.ts --format esm --dts && node scripts/copy-browser-runner.mjs",
|
|
29
|
+
"build": "pnpm --filter @proagentstore/browser-runner build && tsup src/index.ts src/bootstrap.ts --format esm --dts && node scripts/copy-browser-runner.mjs",
|
|
29
30
|
"dev": "tsx src/index.ts",
|
|
30
31
|
"typecheck": "tsc --noEmit"
|
|
31
32
|
},
|