@kybernesis/create 0.8.1 → 0.8.2
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/cli.js +43 -0
- package/dist/upgrade.js +32 -9
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -60,7 +60,50 @@ function initOptions(rest) {
|
|
|
60
60
|
yes: rest.includes('--yes') || rest.includes('-y'),
|
|
61
61
|
};
|
|
62
62
|
}
|
|
63
|
+
/** What each command is for, in one line, as a person would ask for it. */
|
|
64
|
+
const COMMANDS = {
|
|
65
|
+
init: "Scaffold a new agent: governed, remembering, multiplayer, self-testing.",
|
|
66
|
+
doctor: "Check this machine and this project before an engagement.",
|
|
67
|
+
arcana: "Set the memory workspaces and keys this agent uses.",
|
|
68
|
+
skills: "Install the FDE skill suite (--global for every project).",
|
|
69
|
+
credential: "Write the agent credential onto a host (--local to stay here).",
|
|
70
|
+
register: "Register this agent with the control plane (--name, --url).",
|
|
71
|
+
deploy: "Deploy this agent to its host (--no-env to leave the env file alone).",
|
|
72
|
+
upgrade: "Bring @kybernesis packages and eve to the certified versions (--skip-eval).",
|
|
73
|
+
version: "Print the version of this tool.",
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Print help instead of doing anything.
|
|
77
|
+
*
|
|
78
|
+
* Given a command, describe that command; otherwise list them. Either way this
|
|
79
|
+
* function's only effect is output — which is the entire point of it existing.
|
|
80
|
+
*/
|
|
81
|
+
function usage(command) {
|
|
82
|
+
if (command && COMMANDS[command]) {
|
|
83
|
+
console.log(`\n ${bold(`kyb ${command}`)} — ${COMMANDS[command]}\n`);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
console.log(`\n ${bold("kyb")} ${dim(VERSION)} — the Kybernesis agent CLI\n`);
|
|
87
|
+
for (const [name, description] of Object.entries(COMMANDS)) {
|
|
88
|
+
console.log(` ${bold(name.padEnd(12))}${description}`);
|
|
89
|
+
}
|
|
90
|
+
console.log(`\n ${dim("kyb <command> --help for one command.")}\n`);
|
|
91
|
+
}
|
|
63
92
|
const [, , command, ...rest] = process.argv;
|
|
93
|
+
/**
|
|
94
|
+
* `--help` asks what a command does. It must never be the thing that does it.
|
|
95
|
+
*
|
|
96
|
+
* Checked before dispatch rather than inside each command, because "the flag
|
|
97
|
+
* was ignored" is not a failure anyone verifies per command — and the one time
|
|
98
|
+
* it mattered, `kyb upgrade --help` ran a real upgrade against a live agent's
|
|
99
|
+
* dependencies. Nothing broke, which is the wrong kind of luck: the same
|
|
100
|
+
* mistake on a command that writes credentials or deploys would not have been
|
|
101
|
+
* survivable.
|
|
102
|
+
*/
|
|
103
|
+
if (rest.includes("--help") || rest.includes("-h")) {
|
|
104
|
+
usage(command);
|
|
105
|
+
process.exit(0);
|
|
106
|
+
}
|
|
64
107
|
switch (command) {
|
|
65
108
|
case "init":
|
|
66
109
|
await init(rest.find((a) => !a.startsWith("-")), initOptions(rest));
|
package/dist/upgrade.js
CHANGED
|
@@ -1,14 +1,25 @@
|
|
|
1
1
|
import { readFileSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { EVE_VERSION, bold, capture, dim, green, red, run, yellow } from "./util.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Which packages to upgrade: every `@kybernesis/*` this agent depends on.
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* This was a fixed list of six, written when there were six. Four more shipped
|
|
9
|
+
* afterwards — connectors, local, manage and exe — and an agent using them was
|
|
10
|
+
* told "everything is at latest certified versions" while holding versions from
|
|
11
|
+
* months earlier. A hardcoded list does not fail loudly when it falls behind;
|
|
12
|
+
* it just quietly stops covering things, and the command that reports it is the
|
|
13
|
+
* same one that is wrong.
|
|
14
|
+
*
|
|
15
|
+
* Reading the manifest cannot fall behind. A package added tomorrow is covered
|
|
16
|
+
* by an upgrade run today.
|
|
17
|
+
*/
|
|
18
|
+
function kybernesisPackages(deps) {
|
|
19
|
+
return Object.keys(deps)
|
|
20
|
+
.filter((name) => name.startsWith("@kybernesis/"))
|
|
21
|
+
.sort();
|
|
22
|
+
}
|
|
12
23
|
function versionLt(a, b) {
|
|
13
24
|
const pa = a.split(".").map(Number);
|
|
14
25
|
const pb = b.split(".").map(Number);
|
|
@@ -52,13 +63,15 @@ export async function upgrade(skipEval) {
|
|
|
52
63
|
console.log(bold("\nkyb upgrade — checking @kybernesis/* and eve against npm\n"));
|
|
53
64
|
warnIfStale();
|
|
54
65
|
const toUpgrade = [];
|
|
55
|
-
|
|
66
|
+
const unresolved = [];
|
|
67
|
+
for (const name of kybernesisPackages(deps)) {
|
|
56
68
|
if (!deps[name])
|
|
57
69
|
continue;
|
|
58
70
|
const installed = capture("node", ["-p", `require('${name}/package.json').version`], cwd)?.trim();
|
|
59
71
|
const latest = capture("npm", ["view", name, "version"])?.trim();
|
|
60
72
|
if (!installed || !latest) {
|
|
61
73
|
console.log(` ${yellow("!")} ${name}: could not resolve versions`);
|
|
74
|
+
unresolved.push(name);
|
|
62
75
|
continue;
|
|
63
76
|
}
|
|
64
77
|
if (installed === latest)
|
|
@@ -91,6 +104,16 @@ export async function upgrade(skipEval) {
|
|
|
91
104
|
console.log(dim(` note: eve@${eveLatest} exists upstream; ${EVE_VERSION} is the newest Kybernesis-certified version.`));
|
|
92
105
|
}
|
|
93
106
|
}
|
|
107
|
+
if (toUpgrade.length === 0 && unresolved.length > 0) {
|
|
108
|
+
// Saying everything is current, having just failed to check several
|
|
109
|
+
// packages, is the worst available answer: it is the sentence someone
|
|
110
|
+
// repeats to a client. Usually the dependencies are simply not installed
|
|
111
|
+
// here, which is worth naming rather than hiding behind a green tick.
|
|
112
|
+
console.log(`\n${yellow(`Checked what could be read. ${unresolved.length} package(s) could not be ` +
|
|
113
|
+
`resolved, so this is not a clean bill of health.`)}\n` +
|
|
114
|
+
` ${dim("Usually: dependencies are not installed here. Run npm install, then kyb upgrade.")}\n`);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
94
117
|
if (toUpgrade.length === 0) {
|
|
95
118
|
console.log(`\n${green("Everything is at latest certified versions.")}\n`);
|
|
96
119
|
return;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kybernesis/create",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.2",
|
|
4
4
|
"description": "The Kybernesis agent scaffolder and FDE toolkit: one command to a governed, remembering, multiplayer, self-testing eve agent — plus doctor and upgrade.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|