@cef-ai/cli 4.1.0 → 4.2.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 (53) hide show
  1. package/dist/cli-program.d.ts +7 -0
  2. package/dist/cli-program.d.ts.map +1 -1
  3. package/dist/cli-program.js +61 -8
  4. package/dist/cli-program.js.map +1 -1
  5. package/dist/commands/eval.d.ts +18 -1
  6. package/dist/commands/eval.d.ts.map +1 -1
  7. package/dist/commands/eval.js +32 -4
  8. package/dist/commands/eval.js.map +1 -1
  9. package/dist/commands/eval.test.js +1 -1
  10. package/dist/commands/eval.test.js.map +1 -1
  11. package/dist/commands/push.d.ts +55 -0
  12. package/dist/commands/push.d.ts.map +1 -1
  13. package/dist/commands/push.js +80 -5
  14. package/dist/commands/push.js.map +1 -1
  15. package/dist/commands/release-cli.d.ts +77 -0
  16. package/dist/commands/release-cli.d.ts.map +1 -0
  17. package/dist/commands/release-cli.js +543 -0
  18. package/dist/commands/release-cli.js.map +1 -0
  19. package/dist/commands/release-view.d.ts +118 -0
  20. package/dist/commands/release-view.d.ts.map +1 -0
  21. package/dist/commands/release-view.js +321 -0
  22. package/dist/commands/release-view.js.map +1 -0
  23. package/dist/commands/release.d.ts +132 -0
  24. package/dist/commands/release.d.ts.map +1 -0
  25. package/dist/commands/release.js +198 -0
  26. package/dist/commands/release.js.map +1 -0
  27. package/dist/lib/ddc.d.ts +29 -0
  28. package/dist/lib/ddc.d.ts.map +1 -1
  29. package/dist/lib/ddc.js +37 -1
  30. package/dist/lib/ddc.js.map +1 -1
  31. package/dist/lib/env.d.ts +6 -0
  32. package/dist/lib/env.d.ts.map +1 -1
  33. package/dist/lib/env.js +12 -0
  34. package/dist/lib/env.js.map +1 -1
  35. package/dist/lib/eval-target.d.ts +37 -3
  36. package/dist/lib/eval-target.d.ts.map +1 -1
  37. package/dist/lib/eval-target.js +66 -7
  38. package/dist/lib/eval-target.js.map +1 -1
  39. package/dist/lib/eval-target.test.js +36 -3
  40. package/dist/lib/eval-target.test.js.map +1 -1
  41. package/dist/lib/registry-read.d.ts +27 -0
  42. package/dist/lib/registry-read.d.ts.map +1 -0
  43. package/dist/lib/registry-read.js +93 -0
  44. package/dist/lib/registry-read.js.map +1 -0
  45. package/dist/lib/release-review.d.ts +30 -0
  46. package/dist/lib/release-review.d.ts.map +1 -0
  47. package/dist/lib/release-review.js +72 -0
  48. package/dist/lib/release-review.js.map +1 -0
  49. package/dist/lib/vault-publish.d.ts +3 -1
  50. package/dist/lib/vault-publish.d.ts.map +1 -1
  51. package/dist/lib/vault-publish.js +5 -3
  52. package/dist/lib/vault-publish.js.map +1 -1
  53. package/package.json +5 -5
@@ -0,0 +1,543 @@
1
+ /**
2
+ * The `cef release` / `cef check` commands, and the release-aware half of
3
+ * `cef deploy <version>`: commander wiring over `release.ts` (the flow) and
4
+ * `release-view.ts` (the output), with the real ports — DDC through
5
+ * `cefPush`, the registry through the content gateway, evaluations through
6
+ * vault-api, runs and deployments through the orchestrator, the AI review
7
+ * through the Inference Gateway, git through `git`.
8
+ *
9
+ * Flags keep `cef push`'s meanings, so a `cef push …` line becomes a release
10
+ * by changing the verb: `--bucket`/`--secret-phrase`/`--access-token` are the
11
+ * DDC destination, `--vault`/`--vault-scope` an organization vault. What the
12
+ * checks need is named apart: `--cli-token` ($CEF_ACCESS_TOKEN) for vault-api
13
+ * and the orchestrator, `--keystore`/`--wallet-phrase` for a wallet,
14
+ * `--evals-vault` ($CEF_VAULT_ID) for the vault the workflow runs in.
15
+ */
16
+ import { execFile } from "node:child_process";
17
+ import fs from "node:fs/promises";
18
+ import path from "node:path";
19
+ import { createInterface } from "node:readline/promises";
20
+ import { promisify } from "node:util";
21
+ import { resultFieldsFromGraph, workflowContentOf } from "@cef-ai/eval";
22
+ import { loadWallet } from "../lib/eval-auth.js";
23
+ import { openVault, vaultEvalStore } from "../lib/eval-vault.js";
24
+ import { fetchOrchestrator, getDeploymentSet, liveVersion, workflowAgentId } from "../lib/eval-target.js";
25
+ import { DEFAULT_WORKFLOW_SCOPE } from "../lib/eval-workflow.js";
26
+ import { envConfig, resolveEnv } from "../lib/env.js";
27
+ import { canonicalAsPubkey } from "../lib/identity.js";
28
+ import { registryReader } from "../lib/registry-read.js";
29
+ import { runCliReview } from "../lib/release-review.js";
30
+ import { evalRun, openTarget } from "./eval.js";
31
+ import { autodetectAgentId, cefPush, prepareMoveLatest } from "./push.js";
32
+ import { cefCheck, cefRelease, ReleaseError } from "./release.js";
33
+ import { deployRelease, diffReleases, DEFAULT_DEPLOYMENT, formatDeployPlan, formatDiff, formatExperimentRows, formatReleaseBody, formatReleaseHead, formatReleaseList, formatReleaseShow, formatReviewRows, graphOf, isAlreadyLive, listReleases, paintFor, planReleaseDeploy, releaseLink, rowToRepoint, stepLabels, } from "./release-view.js";
34
+ const execFileAsync = promisify(execFile);
35
+ function withRead(cmd) {
36
+ return cmd
37
+ .option("--env <env>", "Environment: dev | stage | prod (default dev; overrides $CEF_ENV)")
38
+ .option("--agent <id>", "Which dist/<id>/ is the workflow (defaults to the only built one)")
39
+ .option("--out <dir>", "Output directory the build wrote to (defaults to dist)")
40
+ .option("--as-pubkey <hex>", "Agent Service pubkey (default: the built manifest's)")
41
+ .option("--bucket <numericId>", "DDC bucket the workflow is published in (default: the built manifest's bundle bucket)")
42
+ .option("--cdn <url>", "DDC content gateway to read the registry through ($CEF_DDC_CDN; default from --env)")
43
+ .option("--orchestrator <url>", "Orchestrator base URL ($CEF_ENDPOINT; default from --env)")
44
+ .option("--cli-token <token>", "CLI access token for the orchestrator and vault-api ($CEF_ACCESS_TOKEN)")
45
+ .option("--json", "Print JSON instead of text");
46
+ }
47
+ function withChecks(cmd) {
48
+ return withRead(cmd)
49
+ .option("--keystore <file>", "Wallet keystore JSON, ed25519, for vault-api ($CEF_KEYSTORE)")
50
+ .option("--password <pw>", "Keystore password ($CEF_KEYSTORE_PASSWORD)")
51
+ .option("--wallet-phrase <phrase>", "Wallet secret phrase, ed25519, for vault-api ($CEF_SECRET_PHRASE)")
52
+ .option("--evals-vault <id>", "Vault the workflow runs in, where its evaluations live ($CEF_VAULT_ID; default: the wallet's own)")
53
+ .option("--vault-api <url>", "vault-api base URL (default from --env)")
54
+ .option("--scope <scope>", "Vault scope the workflow runs in (default: its requiredScopes, else \"default\")")
55
+ .option("--skip-review", "Skip the AI review (one already cached for this graph is kept). Required datasets cannot be skipped.")
56
+ .option("--review-model <key>", "Gateway model for the AI review, bucket/name/version ($CEF_REVIEW_MODEL)")
57
+ .option("--inference-key <key>", "Inference Gateway key the AI review is billed to ($CEF_INFERENCE_KEY)")
58
+ .option("--inference-gateway <url>", "Inference Gateway base URL (default from --env)")
59
+ .option("--timeout <ms>", "How long one experiment run may take", "300000");
60
+ }
61
+ async function readLocal(o, cwdOf) {
62
+ const cwd = cwdOf?.() ?? process.cwd();
63
+ const distDir = path.resolve(cwd, o.out ?? "dist");
64
+ const agentDir = o.agent ?? (await autodetectAgentId(distDir));
65
+ const file = path.join(distDir, agentDir, "manifest.json");
66
+ let manifest;
67
+ try {
68
+ manifest = JSON.parse(await fs.readFile(file, "utf8"));
69
+ }
70
+ catch (e) {
71
+ throw new ReleaseError(`[cef release] cannot read ${file} — run \`cef build\` first (${e instanceof Error ? e.message : String(e)})`);
72
+ }
73
+ const workflowId = typeof manifest.alias === "string" && manifest.alias ? manifest.alias : agentDir;
74
+ const rawAs = o.asPubkey ?? (typeof manifest.agentServicePubkey === "string" && manifest.agentServicePubkey ? manifest.agentServicePubkey : undefined);
75
+ const bundle = manifest.bundle;
76
+ const bucket = o.bucket ?? (typeof bundle?.bucketId === "string" && bundle.bucketId ? bundle.bucketId : undefined);
77
+ return {
78
+ cwd, distDir, agentDir, manifest, workflowId,
79
+ ...(rawAs ? { asPubkey: canonicalAsPubkey(rawAs) } : {}),
80
+ ...(bucket ? { bucket } : {}),
81
+ };
82
+ }
83
+ function registryFor(o, local, fetchImpl) {
84
+ if (!local.bucket) {
85
+ throw new ReleaseError("[cef release] which bucket is the workflow in? Pass --bucket <id> (or push it once so the built manifest names one)");
86
+ }
87
+ return registryReader({
88
+ cdn: o.cdn ?? process.env.CEF_DDC_CDN ?? envConfig(o.env).cdn,
89
+ bucketId: local.bucket,
90
+ alias: local.workflowId,
91
+ ...(fetchImpl ? { fetchImpl } : {}),
92
+ });
93
+ }
94
+ function orchestratorFor(o, fetchImpl, headers, label = "[cef release]") {
95
+ const accessToken = o.cliToken ?? process.env.CEF_ACCESS_TOKEN;
96
+ return fetchOrchestrator({
97
+ endpoint: o.orchestrator ?? process.env.CEF_ENDPOINT ?? envConfig(o.env).orchestrator,
98
+ label,
99
+ ...(accessToken ? { accessToken } : {}),
100
+ ...(headers && Object.keys(headers).length ? { headers } : {}),
101
+ ...(fetchImpl ? { fetchImpl } : {}),
102
+ });
103
+ }
104
+ /** The deployment rows, or null when the workflow was never deployed (or the AS is unknown). */
105
+ function deploymentsFor(orch, local) {
106
+ return async () => {
107
+ if (!local.asPubkey)
108
+ return null;
109
+ const set = await getDeploymentSet(orch, workflowAgentId(local.asPubkey, local.workflowId));
110
+ return set ? set.deployments : null;
111
+ };
112
+ }
113
+ function defaultGit(cwd) {
114
+ const git = async (...args) => {
115
+ try {
116
+ return (await execFileAsync("git", args, { cwd })).stdout.trim();
117
+ }
118
+ catch {
119
+ return null;
120
+ }
121
+ };
122
+ return {
123
+ async head() {
124
+ const commit = await git("rev-parse", "HEAD");
125
+ if (!commit)
126
+ return null;
127
+ const repo = await git("config", "--get", "remote.origin.url");
128
+ return { commit, ...(repo ? { repo } : {}) };
129
+ },
130
+ async subjectsSince(since) {
131
+ const out = await git("log", "--format=%s", `${since}..HEAD`);
132
+ return out === null ? null : out.split("\n").filter(Boolean);
133
+ },
134
+ headSubject: () => git("log", "-1", "--format=%s"),
135
+ config: (key) => git("config", key),
136
+ };
137
+ }
138
+ const hex = (b) => `0x${[...b].map((x) => x.toString(16).padStart(2, "0")).join("")}`;
139
+ /** The ports a check needs, over the real services. */
140
+ async function checkPorts(o, local, deps) {
141
+ const registry = registryFor(o, local, deps.fetchImpl);
142
+ const orch = orchestratorFor(o, deps.fetchImpl);
143
+ const git = deps.git ?? defaultGit(local.cwd);
144
+ const accessToken = o.cliToken ?? process.env.CEF_ACCESS_TOKEN;
145
+ // Opened once, on first use: a release whose checks are all cached still reads the vault, nothing more.
146
+ let wallet = null;
147
+ let access = null;
148
+ const scope = o.scope?.trim()
149
+ || (Array.isArray(local.manifest.requiredScopes) ? local.manifest.requiredScopes.find((s) => typeof s === "string" && !!s.trim()) : undefined)
150
+ || DEFAULT_WORKFLOW_SCOPE;
151
+ const vault = async () => {
152
+ if (wallet === null)
153
+ wallet = await loadWallet({ ...(o.keystore ? { keystore: o.keystore } : {}), ...(o.password ? { password: o.password } : {}), ...(o.walletPhrase ? { secretPhrase: o.walletPhrase } : {}) });
154
+ access ??= await openVault({
155
+ ...(o.env ? { env: o.env } : {}),
156
+ ...(o.evalsVault ? { vault: o.evalsVault } : {}),
157
+ ...(o.vaultApi ? { vaultApi: o.vaultApi } : {}),
158
+ ...(accessToken ? { accessToken } : {}),
159
+ }, wallet, deps.fetchImpl);
160
+ return access;
161
+ };
162
+ const timeoutMs = Number(o.timeout ?? 300000);
163
+ if (!Number.isInteger(timeoutMs) || timeoutMs <= 0)
164
+ throw new ReleaseError(`[cef release] --timeout must be a whole number of ms (got "${o.timeout}")`);
165
+ const ports = {
166
+ registry,
167
+ deployments: deploymentsFor(orch, local),
168
+ evals: async () => vaultEvalStore(await vault(), scope),
169
+ async runExperiment(dataset, version) {
170
+ if (!local.asPubkey)
171
+ throw new ReleaseError("[cef release] --as-pubkey is required to run experiments");
172
+ const v = await vault();
173
+ const { target, orchestrator, agentId } = openTarget({ ...(o.env ? { env: o.env } : {}), asPubkey: local.asPubkey, ...(accessToken ? { accessToken } : {}), ...(o.orchestrator ? { orchestrator: o.orchestrator } : {}) }, v, scope, local.workflowId, deps.fetchImpl);
174
+ const live = await liveVersion(orchestrator, agentId);
175
+ const versionGraph = workflowContentOf(await registry.manifest(version) ?? local.manifest).graph;
176
+ const fields = resultFieldsFromGraph(versionGraph);
177
+ return evalRun({
178
+ store: vaultEvalStore(v, scope), target, workflowId: local.workflowId, dataset,
179
+ workflowVersion: version, live: version === live, timeoutMs,
180
+ ...(fields ? { resultFields: fields } : {}),
181
+ note: `release check of ${version}`,
182
+ onProgress: (p) => {
183
+ if (!o.json)
184
+ console.error(` ${dataset} [${p.done}/${p.total}] ${p.run.caseId}#${p.run.repeat} ${p.run.pass === null ? p.run.status : p.run.pass ? "pass" : "FAIL"}`);
185
+ },
186
+ });
187
+ },
188
+ review: ({ graph: g }) => runCliReview({
189
+ graph: g,
190
+ gateway: o.inferenceGateway ?? envConfig(o.env).inferenceGateway,
191
+ ...((o.reviewModel ?? process.env.CEF_REVIEW_MODEL) ? { model: o.reviewModel ?? process.env.CEF_REVIEW_MODEL } : {}),
192
+ ...((o.inferenceKey ?? process.env.CEF_INFERENCE_KEY) ? { key: o.inferenceKey ?? process.env.CEF_INFERENCE_KEY } : {}),
193
+ ...(deps.fetchImpl ? { fetchImpl: deps.fetchImpl } : {}),
194
+ }),
195
+ async author() {
196
+ if (wallet === null) {
197
+ wallet = await loadWallet({ ...(o.keystore ? { keystore: o.keystore } : {}), ...(o.password ? { password: o.password } : {}), ...(o.walletPhrase ? { secretPhrase: o.walletPhrase } : {}) }).catch(() => undefined);
198
+ }
199
+ const name = await git.config("user.name");
200
+ const email = await git.config("user.email");
201
+ return { pubKey: wallet ? hex(wallet.publicKey) : "", ...(name ? { name } : {}), ...(email ? { email } : {}) };
202
+ },
203
+ git,
204
+ now: deps.now ?? (() => new Date()),
205
+ ...deps.ports,
206
+ };
207
+ return { ports, registry };
208
+ }
209
+ function defaultConfirm() {
210
+ if (!process.stdin.isTTY || !process.stdout.isTTY)
211
+ return undefined;
212
+ return async (q) => {
213
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
214
+ try {
215
+ return /^y(es)?$/i.test((await rl.question(q)).trim());
216
+ }
217
+ finally {
218
+ rl.close();
219
+ }
220
+ };
221
+ }
222
+ /** `--notes-file`: the file's text, or a `[cef release]` error naming it. */
223
+ async function readNotesFile(file, given) {
224
+ try {
225
+ return (await fs.readFile(file, "utf8")).trimEnd();
226
+ }
227
+ catch (e) {
228
+ const code = e.code;
229
+ const why = code === "ENOENT" ? "no such file" : code === "EISDIR" ? "it is a directory" : e instanceof Error ? e.message : String(e);
230
+ throw new ReleaseError(`[cef release] cannot read --notes-file ${given}: ${why}`);
231
+ }
232
+ }
233
+ export function addReleaseCommands(program, deps) {
234
+ const exitCode = deps.setExitCode ?? ((c) => { process.exitCode = c; });
235
+ const push = deps.push ?? cefPush;
236
+ const release = withChecks(program.command("release"))
237
+ .argument("[version]", "Release number X.Y.Z (default: the patch after the newest release)")
238
+ .description("Release the built workflow: check it (AI review, required datasets) and publish a numbered version. Not deployed and `latest` does not move — cef deploy <version> does both.")
239
+ .option("--title <text>", "What this release is, in a few words (default: the last commit's subject)")
240
+ .option("--notes <text>", "Release notes (default: commit subjects since the previous release)")
241
+ .option("--notes-file <file>", "Read the release notes from a file")
242
+ // The destination, with `cef push`'s meanings.
243
+ .option("--secret-phrase <phrase>", "Sr25519 phrase of the DDC bucket owner ($CEF_DDC_SECRET_PHRASE); with --vault, your wallet's ($CEF_VAULT_SECRET_PHRASE)")
244
+ .option("--access-token <token>", "DDC access token granted by the bucket owner ($CEF_DDC_ACCESS_TOKEN)")
245
+ .option("--subject-phrase <phrase>", "Phrase of the key a subject-bound --access-token was issued to ($CEF_DDC_SUBJECT_PHRASE)")
246
+ .option("--vault <vaultId>", "Publish into this organization vault through vault-api instead of writing DDC (needs --vault-scope)")
247
+ .option("--vault-scope <scope>", "with --vault: the scope to publish from")
248
+ .option("--vault-token <token>", "with --vault: wallet-api bearer token ($CEF_VAULT_TOKEN)")
249
+ .option("--endpoint <url>", "DDC blockchain endpoint (overrides --env / --preset)")
250
+ .option("--preset <name>", "DDC network preset: MAINNET | TESTNET | DEVNET (overrides --env)")
251
+ // `release list --bucket 5`: the flag is list's, not release's.
252
+ .enablePositionalOptions()
253
+ .action(async (version, o) => {
254
+ try {
255
+ if (o.notes !== undefined && o.notesFile !== undefined)
256
+ throw new ReleaseError("[cef release] give --notes or --notes-file, not both");
257
+ const notes = o.notesFile !== undefined ? await readNotesFile(path.resolve(deps.cwd?.() ?? process.cwd(), o.notesFile), o.notesFile) : o.notes;
258
+ if (o.vault !== undefined && o.vaultScope === undefined)
259
+ throw new ReleaseError("[cef release] --vault needs --vault-scope: the scope to publish the workflow from");
260
+ const local = await readLocal(o, deps.cwd);
261
+ const { ports } = await checkPorts(o, local, deps);
262
+ const env = resolveEnv(o.env);
263
+ const fullPorts = {
264
+ ...ports,
265
+ async publish({ version: v, release: block, moveLatest }) {
266
+ const common = {
267
+ cwd: local.cwd, distDir: local.distDir, agentId: local.agentDir, env,
268
+ version: v, moveLatest, writeManifest: false,
269
+ ...(block ? { release: block } : {}),
270
+ ...(local.asPubkey ? { agentServicePubkey: local.asPubkey } : {}),
271
+ };
272
+ const opts = o.vault !== undefined
273
+ ? {
274
+ ...common,
275
+ vault: {
276
+ vaultId: o.vault, scope: o.vaultScope,
277
+ ...(o.vaultApi ? { vaultApi: o.vaultApi } : {}),
278
+ ...(o.vaultToken ? { token: o.vaultToken } : {}),
279
+ ...(o.secretPhrase ? { secretPhrase: o.secretPhrase } : {}),
280
+ ...(deps.fetchImpl ? { fetchImpl: deps.fetchImpl } : {}),
281
+ },
282
+ }
283
+ : {
284
+ ...common,
285
+ bucket: local.bucket ?? (() => { throw new ReleaseError("[cef release] choose a destination: --bucket <id>, or --vault <id> --vault-scope <scope>"); })(),
286
+ preset: deps.resolveDdcPreset(o.preset, o.env),
287
+ ...(o.secretPhrase ? { secretPhrase: o.secretPhrase } : {}),
288
+ ...(o.accessToken ? { accessToken: o.accessToken } : {}),
289
+ ...(o.subjectPhrase ? { subjectPhrase: o.subjectPhrase } : {}),
290
+ ...(o.endpoint ? { endpoint: o.endpoint } : {}),
291
+ ...(o.cdn ? { cdn: o.cdn } : {}),
292
+ };
293
+ await push(opts);
294
+ },
295
+ };
296
+ const p = paintFor(process.stdout);
297
+ const outcome = await cefRelease({
298
+ workflowId: local.workflowId,
299
+ manifest: local.manifest,
300
+ ...(version !== undefined ? { version } : {}),
301
+ ...(o.title !== undefined ? { title: o.title } : {}),
302
+ ...(notes !== undefined ? { notes } : {}),
303
+ skipReview: !!o.skipReview,
304
+ ports: fullPorts,
305
+ onStart: (head) => { if (!o.json)
306
+ console.log(formatReleaseHead(head, p).join("\n")); },
307
+ });
308
+ const graph = workflowContentOf(local.manifest).graph;
309
+ if (o.json)
310
+ console.log(JSON.stringify(outcome, null, 2));
311
+ else
312
+ console.log(formatReleaseBody(outcome, graph, p, releaseLink(envConfig(o.env).roc, local.asPubkey, local.workflowId, outcome.head.version)).join("\n"));
313
+ if (outcome.status === "blocked")
314
+ exitCode(1);
315
+ }
316
+ catch (e) {
317
+ deps.onError(e);
318
+ }
319
+ });
320
+ withRead(release.command("list"))
321
+ .description("The workflow's releases, newest first, with their marks and what is live")
322
+ .action(async (o) => {
323
+ try {
324
+ const local = await readLocal(o, deps.cwd);
325
+ const rows = await listReleases(registryFor(o, local, deps.fetchImpl), await deploymentsFor(orchestratorFor(o, deps.fetchImpl), local)());
326
+ if (o.json)
327
+ console.log(JSON.stringify(rows, null, 2));
328
+ else
329
+ console.log(formatReleaseList(rows, paintFor(process.stdout), (deps.now ?? (() => new Date()))()));
330
+ }
331
+ catch (e) {
332
+ deps.onError(e);
333
+ }
334
+ });
335
+ withRead(release.command("show <version>"))
336
+ .description("One release: who made it, its notes, its AI review and experiments")
337
+ .action(async (version, o) => {
338
+ try {
339
+ const local = await readLocal(o, deps.cwd);
340
+ const registry = registryFor(o, local, deps.fetchImpl);
341
+ const rows = await listReleases(registry, await deploymentsFor(orchestratorFor(o, deps.fetchImpl), local)());
342
+ const row = rows.find((r) => r.version === version);
343
+ if (!row)
344
+ throw new ReleaseError(`[cef release] ${local.workflowId} has no release ${version}`);
345
+ if (o.json)
346
+ console.log(JSON.stringify(row, null, 2));
347
+ else
348
+ console.log(formatReleaseShow(row, paintFor(process.stdout), await graphOf(registry, version)));
349
+ }
350
+ catch (e) {
351
+ deps.onError(e);
352
+ }
353
+ });
354
+ withRead(release.command("diff <from> <to>"))
355
+ .description("What changed between two releases: steps added, removed and changed")
356
+ .action(async (a, b, o) => {
357
+ try {
358
+ const local = await readLocal(o, deps.cwd);
359
+ const d = await diffReleases(registryFor(o, local, deps.fetchImpl), a, b);
360
+ if (o.json)
361
+ console.log(JSON.stringify(d, null, 2));
362
+ else
363
+ console.log(formatDiff(d, paintFor(process.stdout)));
364
+ }
365
+ catch (e) {
366
+ deps.onError(e);
367
+ }
368
+ });
369
+ withChecks(program.command("check <version>"))
370
+ .description("Run the release checks on an existing release, e.g. one made before checks existed. The release itself is not changed.")
371
+ .action(async (version, o) => {
372
+ try {
373
+ const local = await readLocal(o, deps.cwd);
374
+ const { ports } = await checkPorts(o, local, deps);
375
+ const r = await cefCheck({
376
+ workflowId: local.workflowId, version, skipReview: !!o.skipReview,
377
+ ports: { ...ports, publish: async () => { throw new Error("cef check never publishes"); } },
378
+ });
379
+ const p = paintFor(process.stdout);
380
+ if (o.json)
381
+ console.log(JSON.stringify(r, null, 2));
382
+ else {
383
+ console.log([
384
+ p.dim(`${r.workflowId} ${r.version} · content ${r.contentHash.slice(0, 7)}`),
385
+ "",
386
+ ...formatReviewRows(r.review, stepLabels(await graphOf(ports.registry, version)), p),
387
+ ...formatExperimentRows(r.experiments, p),
388
+ "",
389
+ r.passed ? p.ok(`Checks passed on ${version}.`) : `${p.err("Checks failed")} on ${version}.`,
390
+ ].join("\n"));
391
+ }
392
+ if (!r.passed)
393
+ exitCode(1);
394
+ }
395
+ catch (e) {
396
+ deps.onError(e);
397
+ }
398
+ });
399
+ }
400
+ /**
401
+ * `cef deploy <version>`: make a release live, with its marks shown and a
402
+ * confirmation on review warnings (a terminal asks; CI needs
403
+ * `--accept-warnings`). Repoints the default deployment row, then the
404
+ * registry's `latest` — directly in DDC, or through vault-api with `--vault`.
405
+ */
406
+ export async function runReleaseDeploy(version, o, deps) {
407
+ const local = await readLocal(o, deps.cwd);
408
+ if (!local.asPubkey)
409
+ throw new ReleaseError("[cef deploy] no Agent Service pubkey — pass --as-pubkey <hex>");
410
+ if (o.vault !== undefined && o.vaultScope === undefined)
411
+ throw new ReleaseError("[cef deploy] --vault needs --vault-scope: the scope the workflow is published from");
412
+ const orch = orchestratorFor({
413
+ ...(o.env ? { env: o.env } : {}),
414
+ ...(o.endpoint ? { orchestrator: o.endpoint } : {}),
415
+ ...(o.accessToken ? { cliToken: o.accessToken } : {}),
416
+ }, deps.fetchImpl, o.headers, "[cef deploy]");
417
+ const agentId = workflowAgentId(local.asPubkey, local.workflowId);
418
+ const confirm = deps.confirm === null ? undefined : deps.confirm ?? defaultConfirm();
419
+ const registry = registryFor(o, local, deps.fetchImpl);
420
+ const prepare = deps.prepareMoveLatest ?? prepareMoveLatest;
421
+ let move;
422
+ const ports = {
423
+ registry,
424
+ deployments: deploymentsFor(orch, local),
425
+ async upsert(row, note) {
426
+ let res;
427
+ try {
428
+ res = await orch.request("PUT", `/api/v1/agents/${agentId}/deployments/${encodeURIComponent(String(row.name))}`, {
429
+ deployment: row,
430
+ ...(o.author ? { author: o.author } : {}),
431
+ note: o.note ?? note,
432
+ });
433
+ }
434
+ catch (e) {
435
+ // The same words as `cef deploy` applying a deployments/ folder.
436
+ const err = e;
437
+ if (err.status === 409) {
438
+ throw new ReleaseError(`[cef deploy] revision conflict (HTTP 409) — a concurrent apply won; retry: ${typeof err.body === "string" ? err.body : ""}`.trimEnd());
439
+ }
440
+ throw e;
441
+ }
442
+ const revision = res?.revision;
443
+ return typeof revision === "number" ? revision : undefined;
444
+ },
445
+ moveLatest: async () => { await move(); },
446
+ ...(confirm ? { confirm } : {}),
447
+ };
448
+ const p = paintFor(process.stdout);
449
+ const plan = await planReleaseDeploy(local.workflowId, version, ports);
450
+ if (!o.json)
451
+ console.log(formatDeployPlan(plan, p).join("\n"));
452
+ if (isAlreadyLive(plan) && plan.latest === version) {
453
+ if (o.json)
454
+ console.log(JSON.stringify({ ...plan, deployed: false, alreadyLive: true }, null, 2));
455
+ else
456
+ console.log(`${version} is already live.`);
457
+ return;
458
+ }
459
+ if (o.dryRun) {
460
+ if (!isAlreadyLive(plan))
461
+ rowToRepoint(plan, await ports.deployments());
462
+ const would = {
463
+ ...(isAlreadyLive(plan) ? {} : { deployment: { name: DEFAULT_DEPLOYMENT, version } }),
464
+ ...(plan.latest !== version ? { latest: { from: plan.latest, to: version } } : {}),
465
+ };
466
+ if (o.json)
467
+ console.log(JSON.stringify({ ...plan, dryRun: true, would }, null, 2));
468
+ else {
469
+ if (would.deployment)
470
+ console.log(`[dry-run] would repoint the "${DEFAULT_DEPLOYMENT}" deployment at ${version}`);
471
+ if (would.latest)
472
+ console.log(`[dry-run] would move latest from ${plan.latest ?? "nothing"} to ${version}`);
473
+ console.log("[dry-run] nothing changed.");
474
+ }
475
+ return;
476
+ }
477
+ // Resolved before anything changes: a missing credential must not leave the
478
+ // row moved and `latest` behind.
479
+ if (plan.latest !== version) {
480
+ const env = resolveEnv(o.env);
481
+ move = await prepare({
482
+ alias: local.workflowId,
483
+ version,
484
+ env,
485
+ ...(o.vault !== undefined
486
+ ? {
487
+ vault: {
488
+ vaultId: o.vault, scope: o.vaultScope,
489
+ ...(o.vaultApi ? { vaultApi: o.vaultApi } : {}),
490
+ ...(o.vaultToken ? { token: o.vaultToken } : {}),
491
+ ...(o.secretPhrase ? { secretPhrase: o.secretPhrase } : {}),
492
+ ...(deps.fetchImpl ? { fetchImpl: deps.fetchImpl } : {}),
493
+ },
494
+ registry,
495
+ }
496
+ : {
497
+ bucket: local.bucket,
498
+ preset: deps.resolveDdcPreset(o.preset, o.env),
499
+ ...(o.secretPhrase ? { secretPhrase: o.secretPhrase } : {}),
500
+ ...(o.ddcAccessToken ? { accessToken: o.ddcAccessToken } : {}),
501
+ ...(o.subjectPhrase ? { subjectPhrase: o.subjectPhrase } : {}),
502
+ ...(o.ddcEndpoint ? { endpoint: o.ddcEndpoint } : {}),
503
+ ...(o.cdn ? { cdn: o.cdn } : {}),
504
+ }),
505
+ });
506
+ }
507
+ if (!o.json && plan.mark.kind === "warnings" && !o.acceptWarnings && ports.confirm && !isAlreadyLive(plan))
508
+ console.log("");
509
+ const r = await deployRelease(plan, ports, { ...(o.acceptWarnings ? { acceptWarnings: true } : {}), ...(o.author ? { author: o.author } : {}) });
510
+ if (o.json)
511
+ console.log(JSON.stringify({ ...plan, ...r }, null, 2));
512
+ else if (!r.deployed)
513
+ console.log("Not deployed.");
514
+ // Declined at the prompt: nothing changed, and a wrapper must not read it as done.
515
+ if (!r.deployed)
516
+ (deps.setExitCode ?? ((c) => { process.exitCode = c; }))(1);
517
+ else if (isAlreadyLive(plan))
518
+ console.log(`${version} is already live; latest now names it.`);
519
+ else
520
+ console.log(p.bold(`Deployed ${version}`) + (r.movedLatest ? p.dim(" · latest now names it") : ""));
521
+ }
522
+ /**
523
+ * What `cef push` says after publishing a workflow: the version it published
524
+ * carries no checks and no release record, and moved `latest`. `cef release`
525
+ * makes a checked, numbered release instead. Null for any other agent.
526
+ *
527
+ * Read from the pushed `dist/<id>/manifest.json`; a manifest that cannot be
528
+ * read says nothing (the push itself already succeeded).
529
+ */
530
+ export async function workflowPushHint(distDir, agentId) {
531
+ let manifest;
532
+ try {
533
+ manifest = JSON.parse(await fs.readFile(path.join(distDir, agentId, "manifest.json"), "utf8"));
534
+ }
535
+ catch {
536
+ return null;
537
+ }
538
+ if (!workflowContentOf(manifest).graph)
539
+ return null;
540
+ return `[cef push] ${agentId} is a workflow: this published an unchecked version with no release record. `
541
+ + "Use `cef release` to make a checked, numbered release (`cef deploy <version>` makes it live).";
542
+ }
543
+ //# sourceMappingURL=release-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-cli.js","sourceRoot":"","sources":["../../src/commands/release-cli.ts"],"names":[],"mappings":"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"}