@kybernesis/create 0.1.2 → 0.1.3

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 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
- // `npm create @kybernesis <name>` lands here with the name in rest? No —
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
@@ -1 +1,3 @@
1
- export declare function init(rawName: string | undefined): Promise<void>;
1
+ export declare function init(rawName: string | undefined, options?: {
2
+ engineer?: boolean;
3
+ }): Promise<void>;
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
- export async function init(rawName) {
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,15 @@ 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 on FIRST use — expect the first screenshot turn to take minutes,
90
+ warm turns ~seconds. Deployed sessions run under a domain allowlist; extend
91
+ it deliberately in that file when a project needs another host.
92
+ · agent-browser / github-tools / vercel connection may need their Connect
93
+ setup flows — run their printed setup commands if tools 401.` : ""}
72
94
 
73
95
  ${bold("Human steps (in order) — the FDE playbook covers each in detail:")}
74
96
  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.2",
3
+ "version": "0.1.3",
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",