@cef-ai/cli 1.4.0 → 1.6.0

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.
Files changed (43) hide show
  1. package/README.md +5 -1
  2. package/dist/cli-program.d.ts +8 -1
  3. package/dist/cli-program.d.ts.map +1 -1
  4. package/dist/cli-program.js +129 -6
  5. package/dist/cli-program.js.map +1 -1
  6. package/dist/commands/deploy.d.ts +38 -0
  7. package/dist/commands/deploy.d.ts.map +1 -0
  8. package/dist/commands/deploy.js +317 -0
  9. package/dist/commands/deploy.js.map +1 -0
  10. package/dist/commands/init.d.ts +41 -0
  11. package/dist/commands/init.d.ts.map +1 -0
  12. package/dist/commands/init.js +191 -0
  13. package/dist/commands/init.js.map +1 -0
  14. package/dist/commands/publish.d.ts.map +1 -1
  15. package/dist/commands/publish.js +4 -1
  16. package/dist/commands/publish.js.map +1 -1
  17. package/dist/lib/ddc.d.ts.map +1 -1
  18. package/dist/lib/ddc.js +18 -1
  19. package/dist/lib/ddc.js.map +1 -1
  20. package/dist/lib/env.d.ts +38 -0
  21. package/dist/lib/env.d.ts.map +1 -0
  22. package/dist/lib/env.js +45 -0
  23. package/dist/lib/env.js.map +1 -0
  24. package/dist/lib.d.ts +4 -0
  25. package/dist/lib.d.ts.map +1 -1
  26. package/dist/lib.js +2 -0
  27. package/dist/lib.js.map +1 -1
  28. package/package.json +3 -2
  29. package/templates/hello-world/AGENTS.md +41 -0
  30. package/templates/hello-world/CLAUDE.md +9 -0
  31. package/templates/hello-world/README.md +55 -0
  32. package/templates/hello-world/cef.config.ts +47 -0
  33. package/templates/hello-world/claude/settings.json +23 -0
  34. package/templates/hello-world/deployments/default.jsonc +9 -0
  35. package/templates/hello-world/deployments/sandbox-canary.jsonc +12 -0
  36. package/templates/hello-world/gitignore +3 -0
  37. package/templates/hello-world/migrations/history/001-init.sql +5 -0
  38. package/templates/hello-world/package.json +23 -0
  39. package/templates/hello-world/src/agent.ts +57 -0
  40. package/templates/hello-world/test/agent.test.ts +41 -0
  41. package/templates/hello-world/tsconfig.json +19 -0
  42. package/templates/hello-world/widgets/hello/app.js +8 -0
  43. package/templates/hello-world/widgets/hello/index.html +5 -0
package/README.md CHANGED
@@ -18,11 +18,15 @@ invoke it via `pnpm exec cef <subcommand>`.
18
18
 
19
19
  | Subcommand | Status | Description |
20
20
  | --- | --- | --- |
21
+ | `cef init [dir]` | shipped | Scaffold a hello-world agent project (agent + cubby + widget + test), depending on the published `@cef-ai/*` packages. Interactive with `--yes`/flags; writes AI-friendly files that auto-wire the `cef` Claude Code plugin (`--no-ai` to skip). |
22
+ | `cef deploy` | shipped | Make an agent live: apply the repo's `deployments/` folder (or a single set file) to the platform. `--endpoint <url>` (or `$CEF_ENDPOINT`; defaults to dev), `--deployments <file\|dir>`, `--version`, `--as-pubkey`, `--dry-run`. Requires deployment records + reachability to the endpoint. |
21
23
  | `cef build` | shipped | Lint the agent entry, bundle with esbuild (the bundle imports the SDK runtime shims and installs `globalThis.__handlers`), emit `dist/<agentId>/{bundle.js,manifest.json}`. |
22
24
  | `cef typegen` | shipped | Generate `.cef/generated.d.ts` (declaration-merged `KnownEventTypes`) and refresh `cef.lock.json`. |
23
25
  | `cef inspect <agentDir>` | shipped | Read a built `manifest.json`, run the bundle in `node:vm`, and report the handler names exposed on `__handlers` plus any routing targets the manifest references but the bundle doesn't expose. |
26
+ | `cef publish` | shipped | Sign a built agent's card and POST it to the marketplace API (credentials resolved AWS-CLI-style). |
27
+ | `cef push` | shipped | Upload a built agent's `bundle.js` (+ widget dirs) to DDC and stamp the manifest's bundle ref. |
28
+ | `cef keypair generate` | shipped | Materialise a new AS Ed25519 keypair (stdout, `--out` file, or `--profile`). |
24
29
  | `cef test` | stub | Placeholder — use `vitest` directly with `@cef-ai/testing` until the integrated runner lands. |
25
- | `cef publish` | stub | Placeholder — pending the Marketplace API. |
26
30
  | `cef dev` | stub | Placeholder — pending the packaged platform image. |
27
31
 
28
32
  `cef build` writes one directory per declared agent:
@@ -1,5 +1,12 @@
1
1
  import { Command } from "commander";
2
- export declare const DEFAULT_MARKETPLACE_URL = "https://agent-marketplace.compute.dev.ddcdragon.com";
2
+ /**
3
+ * Dev-environment defaults, kept as named exports for back-compat. The full
4
+ * per-environment table lives in `./lib/env.ts`; `--env` / `$CEF_ENV` select an
5
+ * environment (default `dev`) and individual `--endpoint` / `--preset` /
6
+ * `--marketplace` flags override the specific value.
7
+ */
8
+ export declare const DEFAULT_MARKETPLACE_URL: string;
9
+ export declare const DEFAULT_ENDPOINT: string;
3
10
  export interface BuildProgramOptions {
4
11
  /** Optional fetch override threaded into `cef publish`. Tests use this. */
5
12
  fetchImpl?: typeof fetch;
@@ -1 +1 @@
1
- {"version":3,"file":"cli-program.d.ts","sourceRoot":"","sources":["../src/cli-program.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,eAAO,MAAM,uBAAuB,wDACmB,CAAC;AAExD,MAAM,WAAW,mBAAmB;IAClC,2EAA2E;IAC3E,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,KAAK,CAAC;CACnC;AAQD,wBAAgB,YAAY,CAAC,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAwTpE"}
1
+ {"version":3,"file":"cli-program.d.ts","sourceRoot":"","sources":["../src/cli-program.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,QAA+B,CAAC;AACpE,eAAO,MAAM,gBAAgB,QAAgC,CAAC;AAE9D,MAAM,WAAW,mBAAmB;IAClC,2EAA2E;IAC3E,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,KAAK,CAAC;CACnC;AAQD,wBAAgB,YAAY,CAAC,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAqfpE"}
@@ -10,12 +10,22 @@ import path from "node:path";
10
10
  import { fileURLToPath } from "node:url";
11
11
  import { Command } from "commander";
12
12
  import { cefBuild } from "./commands/build.js";
13
+ import { cefDeploy } from "./commands/deploy.js";
14
+ import { cefInit } from "./commands/init.js";
13
15
  import { cefInspect } from "./commands/inspect.js";
14
16
  import { cefKeypairGenerate } from "./commands/keypair.js";
15
17
  import { cefPublish } from "./commands/publish.js";
16
18
  import { cefPush } from "./commands/push.js";
17
19
  import { cefTypegen } from "./commands/typegen.js";
18
- export const DEFAULT_MARKETPLACE_URL = "https://agent-marketplace.compute.dev.ddcdragon.com";
20
+ import { ENVIRONMENTS, envConfig } from "./lib/env.js";
21
+ /**
22
+ * Dev-environment defaults, kept as named exports for back-compat. The full
23
+ * per-environment table lives in `./lib/env.ts`; `--env` / `$CEF_ENV` select an
24
+ * environment (default `dev`) and individual `--endpoint` / `--preset` /
25
+ * `--marketplace` flags override the specific value.
26
+ */
27
+ export const DEFAULT_MARKETPLACE_URL = ENVIRONMENTS.dev.marketplace;
28
+ export const DEFAULT_ENDPOINT = ENVIRONMENTS.dev.orchestrator;
19
29
  function defaultOnError(err) {
20
30
  const msg = err instanceof Error ? err.message : String(err);
21
31
  console.error(msg);
@@ -32,6 +42,54 @@ export function buildProgram(opts = {}) {
32
42
  .name("cef")
33
43
  .description("CEF agent build & test CLI")
34
44
  .version(pkg.version);
45
+ program
46
+ .command("init")
47
+ .argument("[dir]", "Target directory for the new agent project")
48
+ .description("Scaffold a new hello-world agent project")
49
+ .option("--name <alias>", "Agent id/alias (default: slug of the directory)")
50
+ .option("-y, --yes", "Accept all defaults; do not prompt")
51
+ .option("--pm <manager>", "Package manager: pnpm | npm | yarn | bun")
52
+ .option("--no-install", "Skip dependency install")
53
+ .option("--no-git", "Skip git init")
54
+ .option("--no-ai", "Skip the AI-friendly files (AGENTS.md / CLAUDE.md / .claude)")
55
+ .option("--force", "Scaffold into a non-empty directory")
56
+ .option("--template <name>", "Template to use", "hello-world")
57
+ .action(async (dir, subOpts) => {
58
+ try {
59
+ if (subOpts.pm !== undefined &&
60
+ !["pnpm", "npm", "yarn", "bun"].includes(subOpts.pm)) {
61
+ throw new Error(`[cef init] --pm must be pnpm, npm, yarn, or bun (got "${subOpts.pm}")`);
62
+ }
63
+ const result = await cefInit({
64
+ ...(dir !== undefined ? { dir } : {}),
65
+ ...(subOpts.name !== undefined ? { name: subOpts.name } : {}),
66
+ ...(subOpts.yes !== undefined ? { yes: subOpts.yes } : {}),
67
+ ...(subOpts.pm !== undefined
68
+ ? { pm: subOpts.pm }
69
+ : {}),
70
+ ...(subOpts.install !== undefined ? { install: subOpts.install } : {}),
71
+ ...(subOpts.git !== undefined ? { git: subOpts.git } : {}),
72
+ ...(subOpts.ai !== undefined ? { ai: subOpts.ai } : {}),
73
+ ...(subOpts.force !== undefined ? { force: subOpts.force } : {}),
74
+ ...(subOpts.template !== undefined
75
+ ? { template: subOpts.template }
76
+ : {}),
77
+ });
78
+ console.log(`✓ Scaffolded ${result.agentId} in ${result.dir}`);
79
+ console.log(` ${result.files.length} files · ${result.pm} · ${result.installed ? "deps installed" : "deps not installed"}`);
80
+ console.log("\nNext steps:");
81
+ for (const step of result.nextSteps)
82
+ console.log(` ${step}`);
83
+ if (result.aiFiles) {
84
+ console.log("\nAI-assisted dev (Claude Code): trust the folder to auto-install the `cef` plugin, or run:");
85
+ console.log(" /plugin marketplace add CEF-AI/cef-plugins");
86
+ console.log(" /plugin install cef@cef");
87
+ }
88
+ }
89
+ catch (e) {
90
+ onError(e);
91
+ }
92
+ });
35
93
  program
36
94
  .command("build")
37
95
  .description("Build agent bundle.js + manifest.json")
@@ -90,7 +148,8 @@ export function buildProgram(opts = {}) {
90
148
  program
91
149
  .command("publish")
92
150
  .description("Publish a built agent's manifest to the marketplace")
93
- .option("--marketplace <url>", "Marketplace base URL (overrides $CEF_MARKETPLACE_URL)")
151
+ .option("--env <env>", "Environment: dev | stage | prod (default dev; overrides $CEF_ENV)")
152
+ .option("--marketplace <url>", "Marketplace base URL (overrides --env / $CEF_MARKETPLACE_URL)")
94
153
  .option("--agent <id>", "Which dist/<id>/ to publish (defaults to the only built agent)")
95
154
  .option("--privkey <hex>", "AS private key (hex, 64 chars). Pair with --pubkey.")
96
155
  .option("--pubkey <hex>", "AS public key (hex, 64 chars). Pair with --privkey.")
@@ -102,7 +161,7 @@ export function buildProgram(opts = {}) {
102
161
  try {
103
162
  const marketplaceUrl = subOpts.marketplace ??
104
163
  process.env.CEF_MARKETPLACE_URL ??
105
- DEFAULT_MARKETPLACE_URL;
164
+ envConfig(subOpts.env).marketplace;
106
165
  const publishOpts = {
107
166
  marketplaceUrl,
108
167
  ...(subOpts.agent !== undefined ? { agentId: subOpts.agent } : {}),
@@ -138,8 +197,9 @@ export function buildProgram(opts = {}) {
138
197
  .option("--secret-phrase <phrase>", "Sr25519 substrate secret phrase for the DDC bucket owner (overrides $CEF_DDC_SECRET_PHRASE)")
139
198
  .option("--access-token <token>", "DDC access token granted by the bucket owner, for pushing without the bucket's secret phrase (overrides $CEF_DDC_ACCESS_TOKEN)")
140
199
  .option("--as-pubkey <hex>", "Agent Service pubkey (hex, as shown in ROC) to stamp into the manifest identity (agentServicePubkey + agentId <asPubkey>:<alias>). The DDC signing key is unrelated to AS identity, so pass it explicitly.")
141
- .option("--endpoint <url>", "DDC blockchain endpoint (overrides --preset)")
142
- .option("--preset <name>", "DDC network preset: MAINNET | TESTNET | DEVNET (default MAINNET)")
200
+ .option("--env <env>", "Environment: dev | stage | prod (default dev; overrides $CEF_ENV). Sets the DDC network (dev=devnet, stage=testnet, prod=mainnet).")
201
+ .option("--endpoint <url>", "DDC blockchain endpoint (overrides --env / --preset)")
202
+ .option("--preset <name>", "DDC network preset: MAINNET | TESTNET | DEVNET (overrides --env)")
143
203
  .option("--cdn <url>", "CDN endpoint override")
144
204
  .option("--out <dir>", "Output directory the build wrote to (defaults to dist)", "dist")
145
205
  .action(async (subOpts) => {
@@ -152,6 +212,10 @@ export function buildProgram(opts = {}) {
152
212
  }
153
213
  preset = upper;
154
214
  }
215
+ else {
216
+ // No explicit --preset: use the DDC network for the selected env.
217
+ preset = envConfig(subOpts.env).ddcPreset;
218
+ }
155
219
  const pushOpts = {
156
220
  bucket: subOpts.bucket,
157
221
  ...(subOpts.agent !== undefined ? { agentId: subOpts.agent } : {}),
@@ -167,7 +231,7 @@ export function buildProgram(opts = {}) {
167
231
  ...(subOpts.endpoint !== undefined
168
232
  ? { endpoint: subOpts.endpoint }
169
233
  : {}),
170
- ...(preset !== undefined ? { preset } : {}),
234
+ preset,
171
235
  ...(subOpts.cdn !== undefined ? { cdn: subOpts.cdn } : {}),
172
236
  ...(subOpts.out !== undefined ? { distDir: subOpts.out } : {}),
173
237
  };
@@ -189,6 +253,65 @@ export function buildProgram(opts = {}) {
189
253
  onError(e);
190
254
  }
191
255
  });
256
+ program
257
+ .command("deploy")
258
+ .description("Make an agent live: apply the deployments/ folder to the platform")
259
+ .option("--env <env>", "Environment: dev | stage | prod (default dev; overrides $CEF_ENV)")
260
+ .option("--endpoint <url>", "Platform API base URL (overrides --env / $CEF_ENDPOINT)")
261
+ .option("--agent <id>", "Which dist/<id>/ to read identity from (defaults to the only built agent)")
262
+ .option("--version <v>", 'Override the version of every applied record ("latest" allowed)')
263
+ .option("--author <who>", "Audit author (defaults to git user.email)")
264
+ .option("--note <text>", "Audit note recorded on the applied set")
265
+ .option("--dry-run", "Print the assembled deployment set without applying")
266
+ .option("--as-pubkey <hex>", "Agent Service pubkey for the composite agentId (overrides manifest)")
267
+ .option("--header <k:v>", "Extra request header (repeatable) — for an endpoint that requires auth", (val, acc) => {
268
+ acc.push(val);
269
+ return acc;
270
+ }, [])
271
+ .option("--out <dir>", "Output directory the build wrote to", "dist")
272
+ .option("--deployments <path>", "Deployment records: a directory (default) or a single set/record file", "deployments")
273
+ .action(async (subOpts) => {
274
+ try {
275
+ const endpoint = subOpts.endpoint ??
276
+ process.env.CEF_ENDPOINT ??
277
+ envConfig(subOpts.env).orchestrator;
278
+ const extraHeaders = {};
279
+ for (const h of subOpts.header ?? []) {
280
+ const idx = h.indexOf(":");
281
+ if (idx === -1) {
282
+ throw new Error(`[cef deploy] --header must be "Key: Value" (got "${h}")`);
283
+ }
284
+ extraHeaders[h.slice(0, idx).trim()] = h.slice(idx + 1).trim();
285
+ }
286
+ const deployOpts = {
287
+ endpoint,
288
+ ...(subOpts.agent !== undefined ? { agentId: subOpts.agent } : {}),
289
+ ...(subOpts.version !== undefined ? { version: subOpts.version } : {}),
290
+ ...(subOpts.author !== undefined ? { author: subOpts.author } : {}),
291
+ ...(subOpts.note !== undefined ? { note: subOpts.note } : {}),
292
+ ...(subOpts.dryRun !== undefined ? { dryRun: subOpts.dryRun } : {}),
293
+ ...(subOpts.asPubkey !== undefined
294
+ ? { agentServicePubkey: subOpts.asPubkey }
295
+ : {}),
296
+ ...(Object.keys(extraHeaders).length > 0 ? { extraHeaders } : {}),
297
+ ...(subOpts.out !== undefined ? { distDir: subOpts.out } : {}),
298
+ ...(subOpts.deployments !== undefined
299
+ ? { deploymentsPath: subOpts.deployments }
300
+ : {}),
301
+ ...(opts.fetchImpl !== undefined ? { fetchImpl: opts.fetchImpl } : {}),
302
+ };
303
+ const result = await cefDeploy(deployOpts);
304
+ if (result.dryRun) {
305
+ console.log(`[dry-run] ${result.agentId} — would apply ${result.deployments.length} deployment(s): ${result.deployments.join(", ")}`);
306
+ }
307
+ else {
308
+ console.log(`✓ Deployed ${result.agentId} — ${result.deployments.length} deployment(s) [${result.deployments.join(", ")}] (revision ${result.revision})`);
309
+ }
310
+ }
311
+ catch (e) {
312
+ onError(e);
313
+ }
314
+ });
192
315
  const keypair = program
193
316
  .command("keypair")
194
317
  .description("Manage AS Ed25519 keypairs (Agent Service identity)");
@@ -1 +1 @@
1
- {"version":3,"file":"cli-program.js","sourceRoot":"","sources":["../src/cli-program.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-program.js","sourceRoot":"","sources":["../src/cli-program.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ export interface CefDeployOptions {
2
+ /** Platform API base URL — trailing slash trimmed. */
3
+ endpoint: string;
4
+ /** Which `dist/<id>/` to read identity from; auto-detected when undefined. */
5
+ agentId?: string;
6
+ /** Build output dir for the manifest (identity). Defaults to `<cwd>/dist`. */
7
+ distDir?: string;
8
+ /** Path to the deployment records: a directory (default `<cwd>/deployments`)
9
+ * or a single set/record file. */
10
+ deploymentsPath?: string;
11
+ /** Defaults to `process.cwd()`. */
12
+ cwd?: string;
13
+ /** AS pubkey for the composite agentId; overrides `manifest.agentServicePubkey`. */
14
+ agentServicePubkey?: string;
15
+ /** Override the `version` of every applied record (without editing files). */
16
+ version?: string;
17
+ /** Audit author; defaults to git `user.email`. */
18
+ author?: string;
19
+ /** Audit note. */
20
+ note?: string;
21
+ /** Print the assembled set without applying it. */
22
+ dryRun?: boolean;
23
+ /** Extra request headers (for an endpoint that requires ingress auth). */
24
+ extraHeaders?: Record<string, string>;
25
+ /** `fetch` override — defaults to `globalThis.fetch`. Tests pass a stub. */
26
+ fetchImpl?: typeof fetch;
27
+ }
28
+ export interface CefDeployResult {
29
+ /** The composite agentId the set was keyed under. */
30
+ agentId: string;
31
+ /** Record names applied, sorted. */
32
+ deployments: string[];
33
+ /** Revision returned by the platform (absent on a dry run). */
34
+ revision?: number;
35
+ dryRun: boolean;
36
+ }
37
+ export declare function cefDeploy(opts: CefDeployOptions): Promise<CefDeployResult>;
38
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;uCACmC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mCAAmC;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,4EAA4E;IAC5E,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB;AA0OD,wBAAsB,SAAS,CAC7B,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,eAAe,CAAC,CAwG1B"}
@@ -0,0 +1,317 @@
1
+ /**
2
+ * `cef deploy` — make an agent live by applying its `deployments/` folder to
3
+ * the CEF platform. A pushed agent is inert until a deployment targets a
4
+ * version; `cef deploy` (NOT `cef publish`) is what makes it run.
5
+ *
6
+ * Deployment records live in the agent repo as `deployments/<name>.jsonc`
7
+ * (one record per file, filename stem = record name). The command reads the
8
+ * whole folder, assembles the deployment SET, and applies it atomically:
9
+ *
10
+ * PUT <endpoint>/api/v1/agents/<compositeAgentId>/deployments
11
+ * { "deployments": [ ...records ], "author"?, "note"? } -> { revision }
12
+ *
13
+ * `--endpoint` (or $CEF_ENDPOINT) selects WHERE to apply and is orthogonal to
14
+ * the files — the same folder applies to any environment.
15
+ */
16
+ import { execFile } from "node:child_process";
17
+ import fs from "node:fs/promises";
18
+ import path from "node:path";
19
+ import { promisify } from "node:util";
20
+ const execFileAsync = promisify(execFile);
21
+ const DEFAULT_DIST = "dist";
22
+ const DEFAULT_DEPLOYMENTS = "deployments";
23
+ const NAME_RE = /^[a-z0-9][a-z0-9_-]{0,62}$/;
24
+ /** Strip `//` line and block comments, respecting string literals. */
25
+ function stripJsonComments(input) {
26
+ let out = "";
27
+ let inStr = false;
28
+ let strCh = "";
29
+ let line = false;
30
+ let block = false;
31
+ for (let i = 0; i < input.length; i++) {
32
+ const c = input[i];
33
+ const n = input[i + 1];
34
+ if (line) {
35
+ if (c === "\n") {
36
+ line = false;
37
+ out += c;
38
+ }
39
+ continue;
40
+ }
41
+ if (block) {
42
+ if (c === "*" && n === "/") {
43
+ block = false;
44
+ i++;
45
+ }
46
+ continue;
47
+ }
48
+ if (inStr) {
49
+ out += c;
50
+ if (c === "\\") {
51
+ out += input[++i] ?? "";
52
+ }
53
+ else if (c === strCh) {
54
+ inStr = false;
55
+ }
56
+ continue;
57
+ }
58
+ if (c === '"' || c === "'") {
59
+ inStr = true;
60
+ strCh = c;
61
+ out += c;
62
+ continue;
63
+ }
64
+ if (c === "/" && n === "/") {
65
+ line = true;
66
+ i++;
67
+ continue;
68
+ }
69
+ if (c === "/" && n === "*") {
70
+ block = true;
71
+ i++;
72
+ continue;
73
+ }
74
+ out += c;
75
+ }
76
+ return out;
77
+ }
78
+ function parseJsonc(raw, source) {
79
+ try {
80
+ return JSON.parse(stripJsonComments(raw));
81
+ }
82
+ catch (e) {
83
+ throw new Error(`[cef deploy] ${source} is not valid JSON: ${e.message}`);
84
+ }
85
+ }
86
+ function normalizeRecord(obj, name, source, versionOverride) {
87
+ if (!NAME_RE.test(name)) {
88
+ throw new Error(`[cef deploy] ${source}: name "${name}" must match ${NAME_RE}`);
89
+ }
90
+ if (typeof obj.priority !== "number") {
91
+ throw new Error(`[cef deploy] ${source}: "priority" (number) is required`);
92
+ }
93
+ if (typeof obj.targeting !== "string") {
94
+ throw new Error(`[cef deploy] ${source}: "targeting" (string; "" for the default) is required`);
95
+ }
96
+ const version = versionOverride ?? obj.version;
97
+ if (typeof version !== "string" || version.length === 0) {
98
+ throw new Error(`[cef deploy] ${source}: "version" (semver or "latest") is required`);
99
+ }
100
+ const weight = obj.weight === undefined ? 1 : obj.weight;
101
+ if (typeof weight !== "number" || !Number.isInteger(weight) || weight < 1) {
102
+ throw new Error(`[cef deploy] ${source}: "weight" must be a positive integer (>= 1). ` +
103
+ `Weights are absolute shares that split traffic within a priority tier ` +
104
+ `(e.g. 90 and 10 for a 90/10 split), not fractions.`);
105
+ }
106
+ return {
107
+ name,
108
+ priority: obj.priority,
109
+ targeting: obj.targeting,
110
+ version,
111
+ weight,
112
+ ...(obj.enabled !== undefined ? { enabled: obj.enabled } : {}),
113
+ ...(obj.params !== undefined
114
+ ? { params: obj.params }
115
+ : {}),
116
+ ...(obj.engagements !== undefined
117
+ ? { engagements: obj.engagements }
118
+ : {}),
119
+ ...(obj.expiresAt !== undefined
120
+ ? { expiresAt: obj.expiresAt }
121
+ : {}),
122
+ };
123
+ }
124
+ /**
125
+ * Load deployment records from a path that is either a DIRECTORY (one record
126
+ * per `<name>.jsonc`, filename stem = record name — the default `deployments/`)
127
+ * or a single FILE that is the whole set (`{ deployments: [...] }`) or a single
128
+ * record object. Mirrors `kubectl apply -f <file|dir>`.
129
+ */
130
+ async function readDeployments(depPath, versionOverride) {
131
+ const stat = await fs.stat(depPath).catch(() => null);
132
+ if (!stat) {
133
+ throw new Error(`[cef deploy] deployments path not found: ${depPath} — create ` +
134
+ `deployments/default.jsonc, or pass --deployments <file|dir>`);
135
+ }
136
+ const records = [];
137
+ if (stat.isDirectory()) {
138
+ const files = (await fs.readdir(depPath))
139
+ .filter((f) => f.endsWith(".json") || f.endsWith(".jsonc"))
140
+ .sort();
141
+ if (files.length === 0) {
142
+ throw new Error(`[cef deploy] deployments folder ${depPath} has no .json/.jsonc records`);
143
+ }
144
+ for (const file of files) {
145
+ const stem = file.replace(/\.jsonc?$/, "");
146
+ const obj = parseJsonc(await fs.readFile(path.join(depPath, file), "utf8"), file);
147
+ if (typeof obj.name === "string" && obj.name !== stem) {
148
+ throw new Error(`[cef deploy] "${file}": in-file name "${obj.name}" must match filename "${stem}"`);
149
+ }
150
+ records.push(normalizeRecord(obj, stem, file, versionOverride));
151
+ }
152
+ }
153
+ else {
154
+ // Single file: the whole set { deployments: [...] } or one record object.
155
+ const base = path.basename(depPath);
156
+ const obj = parseJsonc(await fs.readFile(depPath, "utf8"), base);
157
+ const list = Array.isArray(obj.deployments)
158
+ ? obj.deployments
159
+ : [obj];
160
+ for (const rec of list) {
161
+ const name = rec.name;
162
+ if (typeof name !== "string" || name.length === 0) {
163
+ throw new Error(`[cef deploy] ${base}: each deployment needs a "name" (slug) when read from a single file`);
164
+ }
165
+ records.push(normalizeRecord(rec, name, `${base}#${name}`, versionOverride));
166
+ }
167
+ }
168
+ if (records.length === 0) {
169
+ throw new Error(`[cef deploy] no deployment records found at ${depPath}`);
170
+ }
171
+ const seen = new Set();
172
+ for (const r of records) {
173
+ if (seen.has(r.name)) {
174
+ throw new Error(`[cef deploy] duplicate deployment name "${r.name}"`);
175
+ }
176
+ seen.add(r.name);
177
+ }
178
+ // Exactly one default (empty targeting) — the mandatory fallthrough.
179
+ const defaults = records.filter((r) => r.targeting.trim() === "");
180
+ if (defaults.length !== 1) {
181
+ throw new Error(`[cef deploy] the deployment set must have exactly one default ` +
182
+ `(a record with empty targeting) — found ${defaults.length}.`);
183
+ }
184
+ return records;
185
+ }
186
+ async function gitEmail(cwd) {
187
+ try {
188
+ const { stdout } = await execFileAsync("git", ["config", "user.email"], {
189
+ cwd,
190
+ });
191
+ const v = stdout.trim();
192
+ return v.length > 0 ? v : undefined;
193
+ }
194
+ catch {
195
+ return undefined;
196
+ }
197
+ }
198
+ export async function cefDeploy(opts) {
199
+ const cwd = opts.cwd ? path.resolve(opts.cwd) : process.cwd();
200
+ const distDir = opts.distDir
201
+ ? path.resolve(cwd, opts.distDir)
202
+ : path.join(cwd, DEFAULT_DIST);
203
+ const deploymentsPath = opts.deploymentsPath
204
+ ? path.resolve(cwd, opts.deploymentsPath)
205
+ : path.join(cwd, DEFAULT_DEPLOYMENTS);
206
+ const fetchImpl = opts.fetchImpl ?? globalThis.fetch;
207
+ if (!fetchImpl) {
208
+ throw new Error("[cef deploy] no fetch implementation available");
209
+ }
210
+ // Identity (composite agentId) from the built manifest, like publish/push.
211
+ const agentId = opts.agentId ?? (await autodetectAgentId(distDir));
212
+ const manifestPath = path.join(distDir, agentId, "manifest.json");
213
+ let manifest;
214
+ try {
215
+ manifest = JSON.parse(await fs.readFile(manifestPath, "utf8"));
216
+ }
217
+ catch (e) {
218
+ if (e.code === "ENOENT") {
219
+ throw new Error(`[cef deploy] manifest not found at ${manifestPath} — run \`cef build\` first`);
220
+ }
221
+ throw new Error(`[cef deploy] manifest at ${manifestPath} is not readable: ${e.message}`);
222
+ }
223
+ // Prefer the plain `alias`; if only the composite `agentId`
224
+ // (`<asPubkey>:<alias>`) is present, take the tail so we don't double the
225
+ // pubkey when re-composing below.
226
+ const alias = manifest.alias ?? manifest.agentId?.split(":").pop();
227
+ if (!alias) {
228
+ throw new Error(`[cef deploy] manifest at ${manifestPath} has no alias/agentId`);
229
+ }
230
+ const rawAsPubkey = opts.agentServicePubkey ??
231
+ (typeof manifest.agentServicePubkey === "string" &&
232
+ manifest.agentServicePubkey.length > 0
233
+ ? manifest.agentServicePubkey
234
+ : undefined);
235
+ if (!rawAsPubkey) {
236
+ throw new Error("[cef deploy] no Agent Service pubkey — pass `--as-pubkey <hex>` (from ROC) " +
237
+ "or push with `cef push --as-pubkey` so the manifest carries it");
238
+ }
239
+ const asPubkey = rawAsPubkey.startsWith("0x")
240
+ ? rawAsPubkey.slice(2)
241
+ : rawAsPubkey;
242
+ const compositeAgentId = `${asPubkey}:${alias}`;
243
+ const records = await readDeployments(deploymentsPath, opts.version);
244
+ const author = opts.author ?? (await gitEmail(cwd));
245
+ const body = {
246
+ deployments: records,
247
+ ...(author !== undefined ? { author } : {}),
248
+ ...(opts.note !== undefined ? { note: opts.note } : {}),
249
+ };
250
+ const url = `${opts.endpoint.replace(/\/+$/, "")}/api/v1/agents/${compositeAgentId}/deployments`;
251
+ const names = records.map((r) => r.name).sort();
252
+ if (opts.dryRun) {
253
+ return { agentId: compositeAgentId, deployments: names, dryRun: true };
254
+ }
255
+ const res = await fetchImpl(url, {
256
+ method: "PUT",
257
+ headers: {
258
+ "content-type": "application/json",
259
+ ...(opts.extraHeaders ?? {}),
260
+ },
261
+ body: JSON.stringify(body),
262
+ });
263
+ if (res.status === 200) {
264
+ const json = (await res.json());
265
+ if (typeof json.revision !== "number") {
266
+ throw new Error(`[cef deploy] unexpected 200 body: ${JSON.stringify(json)}`);
267
+ }
268
+ return {
269
+ agentId: compositeAgentId,
270
+ deployments: names,
271
+ revision: json.revision,
272
+ dryRun: false,
273
+ };
274
+ }
275
+ const text = await res.text();
276
+ if (res.status === 400) {
277
+ throw new Error(`[cef deploy] deployment set rejected (HTTP 400): ${text}`);
278
+ }
279
+ if (res.status === 409) {
280
+ throw new Error(`[cef deploy] revision conflict (HTTP 409) — a concurrent apply won; retry: ${text}`);
281
+ }
282
+ throw new Error(`[cef deploy] platform returned HTTP ${res.status}: ${text}`);
283
+ }
284
+ async function autodetectAgentId(distDir) {
285
+ let entries;
286
+ try {
287
+ entries = await fs.readdir(distDir);
288
+ }
289
+ catch (e) {
290
+ if (e.code === "ENOENT") {
291
+ throw new Error(`[cef deploy] dist directory ${distDir} not found — run \`cef build\` first`);
292
+ }
293
+ throw e;
294
+ }
295
+ const candidates = [];
296
+ for (const name of entries) {
297
+ const stat = await fs.stat(path.join(distDir, name)).catch(() => null);
298
+ if (!stat?.isDirectory())
299
+ continue;
300
+ const has = await fs
301
+ .stat(path.join(distDir, name, "manifest.json"))
302
+ .then(() => true)
303
+ .catch(() => false);
304
+ if (has)
305
+ candidates.push(name);
306
+ }
307
+ if (candidates.length === 0) {
308
+ throw new Error(`[cef deploy] no built agents found in ${distDir} — run \`cef build\` first`);
309
+ }
310
+ if (candidates.length > 1) {
311
+ throw new Error(`[cef deploy] multiple built agents in ${distDir} (${candidates
312
+ .sort()
313
+ .join(", ")}) — pass \`--agent <id>\` to pick one`);
314
+ }
315
+ return candidates[0];
316
+ }
317
+ //# sourceMappingURL=deploy.js.map