@kybernesis/create 0.1.2 → 0.1.4
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 +4 -5
- package/dist/init.d.ts +3 -1
- package/dist/init.js +34 -2
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -15,7 +15,7 @@ import { upgrade } from "./upgrade.js";
|
|
|
15
15
|
const [, , command, ...rest] = process.argv;
|
|
16
16
|
switch (command) {
|
|
17
17
|
case "init":
|
|
18
|
-
await init(rest.find((a) => !a.startsWith("-")));
|
|
18
|
+
await init(rest.find((a) => !a.startsWith("-")), { engineer: rest.includes("--engineer") });
|
|
19
19
|
break;
|
|
20
20
|
case "doctor":
|
|
21
21
|
await doctor();
|
|
@@ -24,20 +24,19 @@ switch (command) {
|
|
|
24
24
|
await upgrade(rest.includes("--skip-eval"));
|
|
25
25
|
break;
|
|
26
26
|
case undefined:
|
|
27
|
-
|
|
28
|
-
// npm create passes extra args as argv; treat a bare arg as init's name.
|
|
29
|
-
await init(undefined);
|
|
27
|
+
await init(undefined, { engineer: false });
|
|
30
28
|
break;
|
|
31
29
|
default:
|
|
32
30
|
if (!command.startsWith("-")) {
|
|
33
31
|
// `npm create @kybernesis acme-agent` → argv[2] is the name.
|
|
34
|
-
await init(command);
|
|
32
|
+
await init(command, { engineer: rest.includes("--engineer") });
|
|
35
33
|
break;
|
|
36
34
|
}
|
|
37
35
|
console.log(`
|
|
38
36
|
${bold("kyb")} — Kybernesis agent scaffolder & FDE toolkit
|
|
39
37
|
|
|
40
38
|
${bold("kyb init [name]")} scaffold a full Kybernesis eve agent
|
|
39
|
+
--engineer ${dim("add the engineer layer: workshop sandbox + vision dev loop")}
|
|
41
40
|
${bold("kyb doctor")} preflight checks (keys, issuer, envs, discovery)
|
|
42
41
|
${bold("kyb upgrade")} bump @kybernesis/* packages, gated on evals
|
|
43
42
|
--skip-eval ${dim("skip the eval gate")}
|
package/dist/init.d.ts
CHANGED
package/dist/init.js
CHANGED
|
@@ -3,7 +3,10 @@ import { join, resolve } from "node:path";
|
|
|
3
3
|
import { DEFAULT_ISSUER, EVE_VERSION, REGISTRY_URL, ask, bold, closePrompts, green, run, slug, yellow, } from "./util.js";
|
|
4
4
|
import { envExample, evalFileTs, evalScript, identityMd, rootArcanaTs, subagentAgentTs, subagentArcanaTs, subagentInstructionsMd, } from "./templates.js";
|
|
5
5
|
const ITEMS = ["enterprise", "arcana", "multiplayer", "evals"];
|
|
6
|
-
|
|
6
|
+
// Official eve-registry limbs installed alongside the engineer layer.
|
|
7
|
+
const ENGINEER_OFFICIAL_ITEMS = ["extension/agent-browser", "extension/github-tools", "connection/vercel"];
|
|
8
|
+
export async function init(rawName, options) {
|
|
9
|
+
const engineer = options?.engineer === true;
|
|
7
10
|
const name = slug(rawName ?? (await ask("Agent name (kebab-case)?", "acme-agent")));
|
|
8
11
|
if (!name) {
|
|
9
12
|
console.error("An agent name is required.");
|
|
@@ -29,6 +32,17 @@ export async function init(rawName) {
|
|
|
29
32
|
for (const item of ITEMS) {
|
|
30
33
|
run("npx", ["eve", "add", `@kybernesis/${item}`, "--overwrite"], { cwd: dir });
|
|
31
34
|
}
|
|
35
|
+
if (engineer) {
|
|
36
|
+
console.log(bold("\n2b Engineer layer: workshop sandbox + vision dev loop …"));
|
|
37
|
+
run("npx", ["eve", "add", "@kybernesis/engineer", "--overwrite"], { cwd: dir });
|
|
38
|
+
for (const item of ENGINEER_OFFICIAL_ITEMS) {
|
|
39
|
+
// Official items may carry their own interactive setup; a failure here
|
|
40
|
+
// shouldn't kill the scaffold — the FDE can re-run `eve add <item>`.
|
|
41
|
+
const ok = run("npx", ["eve", "add", item, "--overwrite"], { cwd: dir, allowFail: true });
|
|
42
|
+
if (!ok)
|
|
43
|
+
console.log(yellow(` ! ${item} did not install cleanly — re-run: npx eve add ${item}`));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
32
46
|
console.log(bold("\n3/6 Writing agent identity, memory mount, and eval wiring …"));
|
|
33
47
|
mkdirSync(join(dir, "agent/instructions"), { recursive: true });
|
|
34
48
|
writeFileSync(join(dir, "agent/instructions/identity.md"), identityMd(displayName, depts));
|
|
@@ -68,7 +82,25 @@ export async function init(rawName) {
|
|
|
68
82
|
const infoOk = run("npx", ["eve", "info"], { cwd: dir, allowFail: true, quiet: true });
|
|
69
83
|
console.log(tsOk && infoOk ? green(" ✓ typecheck + discovery clean") : yellow(" ! verify manually: npm run typecheck && npx eve info"));
|
|
70
84
|
console.log(`
|
|
71
|
-
${green("✓")} ${bold(name)} scaffolded: governed (enterprise) · remembering (arcana) · multiplayer (slack) · self-testing (evals)${depts.length ? ` · ${depts.length} dept subagent(s)` : ""}
|
|
85
|
+
${green("✓")} ${bold(name)} scaffolded: governed (enterprise) · remembering (arcana) · multiplayer (slack) · self-testing (evals)${engineer ? " · engineer (workshop + vision loop)" : ""}${depts.length ? ` · ${depts.length} dept subagent(s)` : ""}${engineer ? `
|
|
86
|
+
|
|
87
|
+
${bold("Engineer notes:")}
|
|
88
|
+
· The workshop sandbox (agent/sandbox/sandbox.ts) bakes Playwright into the
|
|
89
|
+
template at DEPLOY time — a broken bootstrap fails the Vercel build loudly.
|
|
90
|
+
Deployed sessions run under a domain allowlist; extend it deliberately in
|
|
91
|
+
that file when a project needs another host.
|
|
92
|
+
· Vercel connection (preview deploys + link-back), after \`vercel link\`:
|
|
93
|
+
vercel connect create mcp.vercel.com --name vercel
|
|
94
|
+
vercel connect attach mcp.vercel.com/vercel --yes
|
|
95
|
+
then set connect("mcp.vercel.com/vercel") — the UID, not the short name —
|
|
96
|
+
in agent/connections/vercel.ts. First tool use posts an OAuth link in the
|
|
97
|
+
thread (user-scoped); grant "All projects" so the agent can create new ones,
|
|
98
|
+
then narrow the grant in the dashboard once the project exists.
|
|
99
|
+
· File delivery (the deliver tool needs it):
|
|
100
|
+
vercel blob create-store ${name}-deliverables --access public --yes
|
|
101
|
+
links the store and injects BLOB_READ_WRITE_TOKEN automatically.
|
|
102
|
+
· agent-browser / github-tools may need their Connect setup flows — run
|
|
103
|
+
their printed setup commands if tools 401.` : ""}
|
|
72
104
|
|
|
73
105
|
${bold("Human steps (in order) — the FDE playbook covers each in detail:")}
|
|
74
106
|
1. Arcana: create workspaces (${name}-company, ${name}-eval${depts.map((d) => `, ${name}-${d}`).join("")}) + scoped kb_ keys; fill .env.local from .env.example
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kybernesis/create",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
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",
|