@openagentsinc/pylon 0.1.15 → 0.1.17
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/README.md +21 -8
- package/package.json +1 -1
- package/src/cli.js +34 -4
- package/src/index.js +24 -3
package/README.md
CHANGED
|
@@ -13,9 +13,10 @@ npx @openagentsinc/pylon
|
|
|
13
13
|
bunx @openagentsinc/pylon
|
|
14
14
|
npm install -g @openagentsinc/pylon && pylon
|
|
15
15
|
bun install -g @openagentsinc/pylon && pylon
|
|
16
|
-
npx @openagentsinc/pylon --version 0.1.
|
|
16
|
+
npx @openagentsinc/pylon --version 0.1.16
|
|
17
17
|
npx @openagentsinc/pylon --no-launch
|
|
18
18
|
npx @openagentsinc/pylon --no-updates
|
|
19
|
+
npx @openagentsinc/pylon status --json
|
|
19
20
|
npx @openagentsinc/pylon --download-curated-cache --model gemma-4-e2b --run-diagnostics
|
|
20
21
|
npx @openagentsinc/pylon --verbose
|
|
21
22
|
```
|
|
@@ -60,17 +61,29 @@ The launcher:
|
|
|
60
61
|
- starts the installed `pylon-tui` by default after the smoke path; that TUI
|
|
61
62
|
starts and supervises the earning worker
|
|
62
63
|
unless `--no-launch` is set
|
|
64
|
+
- forwards CLI subcommands such as `pylon status --json` to the installed
|
|
65
|
+
`pylon` binary after bootstrap instead of opening `pylon-tui`
|
|
63
66
|
- while the TUI is running on the default release track, checks GitHub Releases
|
|
64
|
-
|
|
67
|
+
on a six-hour cadence and restarts the TUI from a newer trusted cached release
|
|
65
68
|
without replacing the global npm/bun command
|
|
66
69
|
- use `--no-updates` to keep the current installed release running without
|
|
67
|
-
background GitHub release checks; `--version` remains a pinned release run
|
|
68
|
-
|
|
70
|
+
background GitHub release checks; `--version` remains a pinned release run.
|
|
71
|
+
Set `GITHUB_TOKEN` or `GH_TOKEN` when you want authenticated GitHub release
|
|
72
|
+
lookups.
|
|
73
|
+
- owns the current auto-update contract. Directly extracted GitHub release
|
|
74
|
+
assets do not contain a native updater today; if an operator runs
|
|
75
|
+
`./pylon` from an unpacked archive, that process stays on its compiled
|
|
76
|
+
version until the operator manually replaces the archive or switches back to
|
|
77
|
+
the npm/bun launcher.
|
|
78
|
+
- for hosted homework/training work, use launcher `0.1.17` or newer so the
|
|
69
79
|
cached standalone binary auto-updates while the dashboard is open. The
|
|
70
|
-
`pylon-v0.1.
|
|
71
|
-
from `0.1.14
|
|
72
|
-
|
|
73
|
-
|
|
80
|
+
`pylon-v0.1.16` standalone binary keeps the long hosted homework ID hashing
|
|
81
|
+
from `0.1.14`, refuses to seal terminal training windows until the worker
|
|
82
|
+
contribution artifact bundle has uploaded and verified for validator replay,
|
|
83
|
+
and packages the minimal Psionic training runtime so standalone installs can
|
|
84
|
+
advertise homework-worker capability. Launcher `0.1.17` adds CLI subcommand
|
|
85
|
+
forwarding and bounds background GitHub release checks to avoid
|
|
86
|
+
unauthenticated rate-limit churn.
|
|
74
87
|
- does not try to install or register a local runtime automatically; the
|
|
75
88
|
bootstrap stays honest about the separate local Gemma runtime
|
|
76
89
|
prerequisite instead of mutating the host behind the user's back
|
package/package.json
CHANGED
package/src/cli.js
CHANGED
|
@@ -6,11 +6,11 @@ import {
|
|
|
6
6
|
DEFAULT_RELEASE_REPO,
|
|
7
7
|
bootstrapInstalledPylon,
|
|
8
8
|
ensureReleaseInstall,
|
|
9
|
-
launchInstalledPylon,
|
|
10
9
|
launchInstalledPylonWithUpdates,
|
|
11
10
|
resolveBootstrapOutcome,
|
|
12
11
|
resolvePlatformTarget,
|
|
13
12
|
renderBootstrapSummary,
|
|
13
|
+
runInstalledPylonCli,
|
|
14
14
|
} from "./index.js";
|
|
15
15
|
import {
|
|
16
16
|
createTelemetryClient,
|
|
@@ -78,6 +78,8 @@ export function usage() {
|
|
|
78
78
|
npx @openagentsinc/pylon [options]
|
|
79
79
|
bunx @openagentsinc/pylon [options]
|
|
80
80
|
pylon [options]
|
|
81
|
+
pylon [options] <pylon-command> [pylon-options]
|
|
82
|
+
pylon [options] -- <pylon-command> [pylon-options]
|
|
81
83
|
|
|
82
84
|
Description:
|
|
83
85
|
Download the latest tagged standalone Pylon release asset for this machine,
|
|
@@ -86,11 +88,15 @@ Description:
|
|
|
86
88
|
and build it locally instead. Cache the binaries, run the first-run smoke
|
|
87
89
|
path, and then start the Pylon terminal UI by default. The terminal UI manages
|
|
88
90
|
the earning worker and keeps live status visible. The launcher checks GitHub
|
|
89
|
-
for newer tagged pylon-v... releases on each default run and
|
|
91
|
+
for newer tagged pylon-v... releases on each default run and periodically
|
|
90
92
|
while the dashboard is open. Only releases initiated by AtlantisPleb are
|
|
91
93
|
accepted. New standalone binaries are cached under the local bootstrap root;
|
|
92
94
|
the global npm or bun pylon command is not replaced.
|
|
93
95
|
|
|
96
|
+
When a Pylon command is provided, the launcher bootstraps the managed release
|
|
97
|
+
and forwards that command to the installed pylon binary instead of opening
|
|
98
|
+
pylon-tui. For example: pylon status --json.
|
|
99
|
+
|
|
94
100
|
Options:
|
|
95
101
|
--version <x.y.z> Resolve a specific Pylon release.
|
|
96
102
|
--install-root <path> Override the launcher cache/install root.
|
|
@@ -109,7 +115,7 @@ Options:
|
|
|
109
115
|
--skip-model-download Keep the curated GGUF cache skipped.
|
|
110
116
|
--skip-diagnostics Keep optional pylon gemma diagnose skipped.
|
|
111
117
|
--no-launch Do not start pylon-tui after bootstrap.
|
|
112
|
-
--no-updates Disable
|
|
118
|
+
--no-updates Disable background GitHub release polling
|
|
113
119
|
and dashboard restart while pylon runs.
|
|
114
120
|
--verbose Print extra network and recovery detail.
|
|
115
121
|
--debug-network Alias for --verbose.
|
|
@@ -140,10 +146,19 @@ export function parseArgs(argv) {
|
|
|
140
146
|
verbose: false,
|
|
141
147
|
json: false,
|
|
142
148
|
help: false,
|
|
149
|
+
pylonArgs: [],
|
|
143
150
|
};
|
|
144
151
|
|
|
145
152
|
for (let index = 0; index < argv.length; index += 1) {
|
|
146
153
|
const arg = argv[index];
|
|
154
|
+
if (arg === "--") {
|
|
155
|
+
options.pylonArgs = argv.slice(index + 1);
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
if (!arg.startsWith("-")) {
|
|
159
|
+
options.pylonArgs = argv.slice(index);
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
147
162
|
switch (arg) {
|
|
148
163
|
case "--version":
|
|
149
164
|
options.version = argv[++index];
|
|
@@ -241,6 +256,7 @@ export async function main(argv = process.argv.slice(2), dependencies = {}) {
|
|
|
241
256
|
ensureReleaseInstallImpl = ensureReleaseInstall,
|
|
242
257
|
bootstrapInstalledPylonImpl = bootstrapInstalledPylon,
|
|
243
258
|
launchInstalledPylonImpl = launchInstalledPylonWithUpdates,
|
|
259
|
+
runInstalledPylonCliImpl = runInstalledPylonCli,
|
|
244
260
|
createTelemetryClientImpl = createTelemetryClient,
|
|
245
261
|
} = dependencies;
|
|
246
262
|
const options = parseArgs(argv);
|
|
@@ -320,7 +336,21 @@ export async function main(argv = process.argv.slice(2), dependencies = {}) {
|
|
|
320
336
|
reporter?.warning(`Pylon ${outcome.verdict}`, outcome.detail);
|
|
321
337
|
}
|
|
322
338
|
console.log(renderBootstrapSummary(summary));
|
|
323
|
-
if (
|
|
339
|
+
if (options.pylonArgs.length > 0) {
|
|
340
|
+
await runInstalledPylonCliImpl(
|
|
341
|
+
{
|
|
342
|
+
...options,
|
|
343
|
+
...install,
|
|
344
|
+
version: install.version,
|
|
345
|
+
},
|
|
346
|
+
options.pylonArgs,
|
|
347
|
+
{
|
|
348
|
+
...dependencies,
|
|
349
|
+
onStatus: reporter?.status,
|
|
350
|
+
telemetryClient,
|
|
351
|
+
},
|
|
352
|
+
);
|
|
353
|
+
} else if (!options.noLaunch) {
|
|
324
354
|
await launchInstalledPylonImpl(
|
|
325
355
|
{
|
|
326
356
|
...options,
|
package/src/index.js
CHANGED
|
@@ -20,7 +20,7 @@ export const DEFAULT_MODEL_ID = "gemma-4-e4b";
|
|
|
20
20
|
export const DEFAULT_DIAGNOSTIC_REPEATS = 3;
|
|
21
21
|
export const DEFAULT_DIAGNOSTIC_MAX_OUTPUT_TOKENS = 96;
|
|
22
22
|
export const DEFAULT_FETCH_TIMEOUT_MS = 15_000;
|
|
23
|
-
export const DEFAULT_UPDATE_CHECK_INTERVAL_MS =
|
|
23
|
+
export const DEFAULT_UPDATE_CHECK_INTERVAL_MS = 6 * 60 * 60 * 1000;
|
|
24
24
|
export const DEFAULT_TRUSTED_RELEASE_AUTHOR = "AtlantisPleb";
|
|
25
25
|
const PYLON_RELEASE_TAG_PREFIX = "pylon-v";
|
|
26
26
|
const RELEASE_ASSET_INSTALL_METHOD = "release_asset";
|
|
@@ -215,8 +215,9 @@ function requestHeaders() {
|
|
|
215
215
|
accept: "application/vnd.github+json",
|
|
216
216
|
"user-agent": "@openagentsinc/pylon bootstrap",
|
|
217
217
|
};
|
|
218
|
-
|
|
219
|
-
|
|
218
|
+
const githubToken = process.env.GITHUB_TOKEN ?? process.env.GH_TOKEN;
|
|
219
|
+
if (githubToken) {
|
|
220
|
+
headers.authorization = `Bearer ${githubToken}`;
|
|
220
221
|
}
|
|
221
222
|
return headers;
|
|
222
223
|
}
|
|
@@ -2016,6 +2017,26 @@ export async function launchInstalledPylon(
|
|
|
2016
2017
|
|
|
2017
2018
|
export const launchInstalledPylonTui = launchInstalledPylon;
|
|
2018
2019
|
|
|
2020
|
+
export async function runInstalledPylonCli(
|
|
2021
|
+
options,
|
|
2022
|
+
args = [],
|
|
2023
|
+
{
|
|
2024
|
+
runProcessImpl = runProcess,
|
|
2025
|
+
onStatus = null,
|
|
2026
|
+
} = {},
|
|
2027
|
+
) {
|
|
2028
|
+
const pylonPath = path.resolve(options.pylonPath);
|
|
2029
|
+
emitStatus(
|
|
2030
|
+
onStatus,
|
|
2031
|
+
"Running Pylon CLI command",
|
|
2032
|
+
[path.basename(pylonPath), ...args].join(" "),
|
|
2033
|
+
);
|
|
2034
|
+
return runProcessImpl(pylonPath, args, {
|
|
2035
|
+
env: buildPylonEnv(options),
|
|
2036
|
+
stdio: "inherit",
|
|
2037
|
+
});
|
|
2038
|
+
}
|
|
2039
|
+
|
|
2019
2040
|
export async function launchInstalledPylonWithUpdates(
|
|
2020
2041
|
options,
|
|
2021
2042
|
{
|