@kybernesis/create 0.3.0 → 0.3.1

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/doctor.js CHANGED
@@ -45,10 +45,13 @@ export async function doctor() {
45
45
  if (env.ARCANA_API_KEY && env.ARCANA_COMPANY_WORKSPACE)
46
46
  arcanaPairs.push({ key: env.ARCANA_API_KEY, ws: env.ARCANA_COMPANY_WORKSPACE, label: "company brain" });
47
47
  if (env.ARCANA_EVAL_API_KEY) {
48
- const evalWs = /ARCANA_COMPANY_WORKSPACE=([a-z0-9-]+)-eval|([a-z0-9-]+)-eval/.exec(pkg.scripts?.eval ?? "");
49
- const ws = evalWs?.[1] ? `${evalWs[1]}-eval` : evalWs?.[2] ? `${evalWs[2]}-eval` : null;
50
- if (ws)
51
- arcanaPairs.push({ key: env.ARCANA_EVAL_API_KEY, ws, label: "eval workspace" });
48
+ // Match both `WORKSPACE=name-eval` and the shell-default form
49
+ // `WORKSPACE=${ARCANA_EVAL_WORKSPACE:-name-eval}`.
50
+ const script = pkg.scripts?.eval ?? "";
51
+ const evalWs = /=\$\{[A-Z0-9_]+:-([a-z0-9][a-z0-9-]*-eval)\}/.exec(script) ??
52
+ /=([a-z0-9][a-z0-9-]*-eval)\b/.exec(script);
53
+ if (evalWs?.[1])
54
+ arcanaPairs.push({ key: env.ARCANA_EVAL_API_KEY, ws: evalWs[1], label: "eval workspace" });
52
55
  }
53
56
  for (const [k, v] of Object.entries(env)) {
54
57
  const m = /^ARCANA_([A-Z0-9_]+)_API_KEY$/.exec(k);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kybernesis/create",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
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",
@@ -33,7 +33,23 @@ model under test.
33
33
  - Stale sandbox state (migration errors, re-baking templates):
34
34
  `rm -rf .eve/sandbox-cache .eve/dev-runtime` and rerun.
35
35
  - Don't pipe the eval command through `tail` in scripts — it masks the exit
36
- code.
36
+ code (and `| tail -N` on a backgrounded run destroys the per-eval detail —
37
+ `tee` to a file instead).
38
+ - **Heavy-model suites: `maxConcurrency: 1` locally.** At 2, long opus turns
39
+ overload the local world-queue transport (`Queue delivery failed … fetch
40
+ failed`); crashed deliveries REPLAY subagent steps, surfacing as
41
+ `lost continuationToken` races and phantom failures that move between runs.
42
+ The deployed runtime uses real queue infra — this is a local-harness limit.
43
+ - **AI Gateway budget is a silent eval killer**: Vercel applies a default
44
+ per-project budget (e.g. $10/daily); a suite of real opus turns can exhaust
45
+ it MID-RUN → `MODEL_CALL_FAILED` on whatever ran last. Check/raise:
46
+ `vercel ai-gateway budgets list` / `budgets set project <name> --limit 30
47
+ --refresh-period monthly`.
48
+ - **"run parked on N unanswered input request(s)"** = the agent called a
49
+ human-in-the-loop tool (`approval: status=pending tool=ask_question` in the
50
+ turn log) — no one answers in an eval. Usually a behavior finding: the
51
+ fixture was self-contained and the agent asked instead of acting. Fix the
52
+ agent's bias-to-act instructions, not the fixture.
37
53
 
38
54
  ## eve version certification
39
55
 
@@ -18,7 +18,11 @@ able to *initiate*.
18
18
  2. **Vercel identities** of both projects: team slug + project name as shown in
19
19
  `npx vercel ls <project>` (slugs, not `team_…`/`prj_…` IDs).
20
20
  3. **Stable production URL** of the callee: `npx vercel inspect <latest-prod-url>`
21
- → Aliases prefer the `<project>-<team>.vercel.app` form (survives redeploys).
21
+ → Aliases then **verify the alias is OPEN before wiring it**:
22
+ `curl -s -o /dev/null -w "%{http_code}" <url>/eve/v1/health` must return
23
+ **200**. The `<project>-<team>.vercel.app` aliases commonly sit behind
24
+ Vercel SSO deployment protection (302 → vercel.com/sso-api) and CANNOT
25
+ receive dispatches; the shorter production alias is usually the open one.
22
26
  4. Both repos need `@kybernesis/dispatch` installed (`npm i @kybernesis/dispatch`).
23
27
 
24
28
  ## Caller side — one file