@openagentsinc/pylon 0.1.10 → 0.1.11
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 +10 -6
- package/package.json +1 -1
- package/src/cli.js +14 -9
- package/src/index.js +17 -7
package/README.md
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
Bootstrap the latest tagged standalone `Pylon` release asset from GitHub
|
|
4
4
|
Releases, fall back to a deterministic source build when no matching asset
|
|
5
5
|
exists for the local platform, stream first-run status updates in the terminal,
|
|
6
|
-
and start the Pylon
|
|
7
|
-
available.
|
|
6
|
+
and start the Pylon terminal UI without Cargo when prebuilt binaries are
|
|
7
|
+
available. The terminal UI manages the long-lived earning worker.
|
|
8
8
|
|
|
9
9
|
## Usage
|
|
10
10
|
|
|
@@ -13,9 +13,9 @@ 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.11
|
|
17
17
|
npx @openagentsinc/pylon --no-launch
|
|
18
|
-
npx @openagentsinc/pylon --download-curated-cache --model gemma-4-e2b --
|
|
18
|
+
npx @openagentsinc/pylon --download-curated-cache --model gemma-4-e2b --run-diagnostics
|
|
19
19
|
npx @openagentsinc/pylon --verbose
|
|
20
20
|
```
|
|
21
21
|
|
|
@@ -45,13 +45,17 @@ The launcher:
|
|
|
45
45
|
- ends first run with an explicit verdict such as `fully online`, `runtime
|
|
46
46
|
ready`, or `installed but runtime missing`, plus exact next-step guidance
|
|
47
47
|
- runs `pylon --help`, `init`, `status --json`, and `inventory --json`
|
|
48
|
-
-
|
|
48
|
+
- skips Gemma diagnostics by default because hosted homework training does not
|
|
49
|
+
require local Gemma weights
|
|
50
|
+
- only runs `pylon gemma diagnose <model> --json` when `--run-diagnostics` is
|
|
51
|
+
set
|
|
49
52
|
- only runs `pylon gemma download <model>` when `--download-curated-cache` is
|
|
50
53
|
set, because the optional GGUF cache does not satisfy the sellable runtime by
|
|
51
54
|
itself
|
|
52
55
|
- falls back to `curl` for release metadata and asset downloads when the Node
|
|
53
56
|
fetch path fails in constrained network contexts
|
|
54
|
-
- starts the installed `pylon`
|
|
57
|
+
- starts the installed `pylon-tui` by default after the smoke path; that TUI
|
|
58
|
+
starts and supervises the earning worker
|
|
55
59
|
unless `--no-launch` is set
|
|
56
60
|
- does not try to install or register a local runtime automatically; the
|
|
57
61
|
bootstrap stays honest about the separate Ollama-compatible runtime
|
package/package.json
CHANGED
package/src/cli.js
CHANGED
|
@@ -83,8 +83,9 @@ Description:
|
|
|
83
83
|
or a specific tagged Pylon version when --version is set. If no matching
|
|
84
84
|
asset exists for the local platform, fetch the exact tagged source checkout
|
|
85
85
|
and build it locally instead. Cache the binaries, run the first-run smoke
|
|
86
|
-
path, and then start the Pylon
|
|
87
|
-
|
|
86
|
+
path, and then start the Pylon terminal UI by default. The terminal UI manages
|
|
87
|
+
the earning worker and keeps live status visible. The launcher checks GitHub
|
|
88
|
+
for newer tagged pylon-v... releases on
|
|
88
89
|
each default run, but only caches the standalone binaries under the local
|
|
89
90
|
bootstrap root; it does not replace your global npm or bun pylon command.
|
|
90
91
|
|
|
@@ -98,13 +99,14 @@ Options:
|
|
|
98
99
|
Default: ${DEFAULT_MODEL_ID}
|
|
99
100
|
--download-curated-cache Prefetch the optional Hugging Face GGUF
|
|
100
101
|
cache before launching pylon.
|
|
101
|
-
--
|
|
102
|
+
--run-diagnostics Run optional pylon gemma diagnose.
|
|
103
|
+
--diagnostic-repeats <n> Repeat count when diagnostics are enabled.
|
|
102
104
|
Default: ${DEFAULT_DIAGNOSTIC_REPEATS}
|
|
103
|
-
--diagnostic-max-output-tokens <n> Max output tokens
|
|
105
|
+
--diagnostic-max-output-tokens <n> Max output tokens when diagnostics are enabled.
|
|
104
106
|
Default: ${DEFAULT_DIAGNOSTIC_MAX_OUTPUT_TOKENS}
|
|
105
107
|
--skip-model-download Keep the curated GGUF cache skipped.
|
|
106
|
-
--skip-diagnostics
|
|
107
|
-
--no-launch Do not start pylon after bootstrap.
|
|
108
|
+
--skip-diagnostics Keep optional pylon gemma diagnose skipped.
|
|
109
|
+
--no-launch Do not start pylon-tui after bootstrap.
|
|
108
110
|
--verbose Print extra network and recovery detail.
|
|
109
111
|
--debug-network Alias for --verbose.
|
|
110
112
|
--json Emit a machine-readable JSON summary.
|
|
@@ -128,7 +130,7 @@ export function parseArgs(argv) {
|
|
|
128
130
|
diagnosticRepeats: DEFAULT_DIAGNOSTIC_REPEATS,
|
|
129
131
|
diagnosticMaxOutputTokens: DEFAULT_DIAGNOSTIC_MAX_OUTPUT_TOKENS,
|
|
130
132
|
skipModelDownload: true,
|
|
131
|
-
skipDiagnostics:
|
|
133
|
+
skipDiagnostics: true,
|
|
132
134
|
noLaunch: false,
|
|
133
135
|
verbose: false,
|
|
134
136
|
json: false,
|
|
@@ -171,6 +173,9 @@ export function parseArgs(argv) {
|
|
|
171
173
|
case "--download-curated-cache":
|
|
172
174
|
options.skipModelDownload = false;
|
|
173
175
|
break;
|
|
176
|
+
case "--run-diagnostics":
|
|
177
|
+
options.skipDiagnostics = false;
|
|
178
|
+
break;
|
|
174
179
|
case "--diagnostic-repeats":
|
|
175
180
|
options.diagnosticRepeats = parseIntegerFlag(
|
|
176
181
|
argv[++index],
|
|
@@ -321,8 +326,8 @@ export async function main(argv = process.argv.slice(2), dependencies = {}) {
|
|
|
321
326
|
);
|
|
322
327
|
} else {
|
|
323
328
|
reporter?.warning(
|
|
324
|
-
"Skipped Pylon launch",
|
|
325
|
-
"pass no flag to start the
|
|
329
|
+
"Skipped Pylon terminal UI launch",
|
|
330
|
+
"pass no flag to open pylon-tui and start the earning worker",
|
|
326
331
|
);
|
|
327
332
|
}
|
|
328
333
|
}
|
package/src/index.js
CHANGED
|
@@ -1757,6 +1757,8 @@ export async function bootstrapInstalledPylon(
|
|
|
1757
1757
|
options.diagnosticRepeats ?? DEFAULT_DIAGNOSTIC_REPEATS;
|
|
1758
1758
|
const diagnosticMaxOutputTokens =
|
|
1759
1759
|
options.diagnosticMaxOutputTokens ?? DEFAULT_DIAGNOSTIC_MAX_OUTPUT_TOKENS;
|
|
1760
|
+
const skipModelDownload = options.skipModelDownload ?? true;
|
|
1761
|
+
const skipDiagnostics = options.skipDiagnostics ?? true;
|
|
1760
1762
|
emitTelemetry(telemetryClient, "installer_smoke_test_started", {
|
|
1761
1763
|
release_tag: options.tagName ?? `pylon-v${options.version}`,
|
|
1762
1764
|
release_commit: options.sourceCommit ?? null,
|
|
@@ -1793,7 +1795,7 @@ export async function bootstrapInstalledPylon(
|
|
|
1793
1795
|
);
|
|
1794
1796
|
|
|
1795
1797
|
let download = null;
|
|
1796
|
-
if (!
|
|
1798
|
+
if (!skipModelDownload) {
|
|
1797
1799
|
emitStatus(onStatus, "Downloading curated model bundle", model);
|
|
1798
1800
|
download = await runPylonJson(
|
|
1799
1801
|
pylonPath,
|
|
@@ -1810,7 +1812,7 @@ export async function bootstrapInstalledPylon(
|
|
|
1810
1812
|
}
|
|
1811
1813
|
|
|
1812
1814
|
let diagnostic = null;
|
|
1813
|
-
if (!
|
|
1815
|
+
if (!skipDiagnostics) {
|
|
1814
1816
|
emitStatus(onStatus, "Running first-run diagnostic", model);
|
|
1815
1817
|
try {
|
|
1816
1818
|
diagnostic = await runPylonJson(
|
|
@@ -1839,7 +1841,11 @@ export async function bootstrapInstalledPylon(
|
|
|
1839
1841
|
);
|
|
1840
1842
|
}
|
|
1841
1843
|
} else {
|
|
1842
|
-
emitStatus(
|
|
1844
|
+
emitStatus(
|
|
1845
|
+
onStatus,
|
|
1846
|
+
"Skipping optional Gemma diagnostic",
|
|
1847
|
+
"use --run-diagnostics when validating local inference separately",
|
|
1848
|
+
);
|
|
1843
1849
|
}
|
|
1844
1850
|
|
|
1845
1851
|
const diagnosticResult =
|
|
@@ -1917,9 +1923,13 @@ export async function launchInstalledPylon(
|
|
|
1917
1923
|
onStatus = null,
|
|
1918
1924
|
} = {},
|
|
1919
1925
|
) {
|
|
1920
|
-
const
|
|
1921
|
-
emitStatus(
|
|
1922
|
-
|
|
1926
|
+
const pylonTuiPath = path.resolve(options.pylonTuiPath);
|
|
1927
|
+
emitStatus(
|
|
1928
|
+
onStatus,
|
|
1929
|
+
"Starting Pylon terminal UI",
|
|
1930
|
+
`${path.basename(pylonTuiPath)} manages the earning worker`,
|
|
1931
|
+
);
|
|
1932
|
+
return runProcessImpl(pylonTuiPath, [], {
|
|
1923
1933
|
env: buildPylonEnv(options),
|
|
1924
1934
|
stdio: "inherit",
|
|
1925
1935
|
});
|
|
@@ -1989,7 +1999,7 @@ function renderBootstrapNextSteps(summary, outcome) {
|
|
|
1989
1999
|
];
|
|
1990
2000
|
|
|
1991
2001
|
if (outcome.verdict === "fully online" || outcome.verdict === "runtime ready") {
|
|
1992
|
-
lines.push("Next step: run `pylon`; it
|
|
2002
|
+
lines.push("Next step: run `pylon`; it opens the TUI and starts the earning worker.");
|
|
1993
2003
|
return lines;
|
|
1994
2004
|
}
|
|
1995
2005
|
|