@cef-ai/cli 1.6.0 → 1.7.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 (36) hide show
  1. package/dist/cli-program.d.ts.map +1 -1
  2. package/dist/cli-program.js +43 -5
  3. package/dist/cli-program.js.map +1 -1
  4. package/dist/commands/build.d.ts +11 -0
  5. package/dist/commands/build.d.ts.map +1 -1
  6. package/dist/commands/build.js +48 -8
  7. package/dist/commands/build.js.map +1 -1
  8. package/dist/commands/dev.d.ts +61 -0
  9. package/dist/commands/dev.d.ts.map +1 -0
  10. package/dist/commands/dev.js +239 -0
  11. package/dist/commands/dev.js.map +1 -0
  12. package/dist/commands/init.d.ts.map +1 -1
  13. package/dist/commands/init.js +33 -4
  14. package/dist/commands/init.js.map +1 -1
  15. package/dist/lib/env.d.ts +41 -8
  16. package/dist/lib/env.d.ts.map +1 -1
  17. package/dist/lib/env.js +42 -9
  18. package/dist/lib/env.js.map +1 -1
  19. package/dist/lib/widget-manifest.d.ts +48 -0
  20. package/dist/lib/widget-manifest.d.ts.map +1 -0
  21. package/dist/lib/widget-manifest.js +91 -0
  22. package/dist/lib/widget-manifest.js.map +1 -0
  23. package/dist/lib/widget-runtime-bundle.d.ts +7 -0
  24. package/dist/lib/widget-runtime-bundle.d.ts.map +1 -0
  25. package/dist/lib/widget-runtime-bundle.js +31 -0
  26. package/dist/lib/widget-runtime-bundle.js.map +1 -0
  27. package/dist/lib.d.ts +4 -0
  28. package/dist/lib.d.ts.map +1 -1
  29. package/dist/lib.js +2 -0
  30. package/dist/lib.js.map +1 -1
  31. package/package.json +4 -3
  32. package/templates/hello-world/cef.config.ts +14 -2
  33. package/templates/hello-world/package.json +6 -0
  34. package/templates/hello-world/src/agent.ts +7 -2
  35. package/templates/hello-world/widgets/hello/app.js +117 -7
  36. package/templates/hello-world/widgets/hello/index.html +16 -1
@@ -0,0 +1,239 @@
1
+ /**
2
+ * `cef dev [widgetId]` — local widget dev server.
3
+ *
4
+ * Serves one widget from `cef.config.ts` on localhost so a developer can test
5
+ * it in a real browser. The page is served top-level (no host iframe), so
6
+ * `@cef-ai/widget-runtime`'s STANDALONE path runs automatically: it opens the
7
+ * interactive Cere embed-wallet (built from the baked `manifest.wallet`), the
8
+ * user connects, and the widget queries their dev vault — exactly like the
9
+ * production standalone link.
10
+ *
11
+ * The server:
12
+ * - serves `/widget-runtime.js` from the resolved workspace runtime bundle,
13
+ * - serves the entry HTML with `injectWidgetBridge` applied on every request
14
+ * (so edits to the entry are reflected on refresh),
15
+ * - serves any other file from the widget `dir` (static),
16
+ * - watches `dir` and live-reloads the browser on change (SSE; watch mode).
17
+ *
18
+ * The interactive browser auth loop is NOT headless-testable; unit tests cover
19
+ * the static serving (injected entry HTML, the runtime file, and a 404).
20
+ */
21
+ import http from "node:http";
22
+ import fs from "node:fs";
23
+ import fsp from "node:fs/promises";
24
+ import path from "node:path";
25
+ import { injectWidgetBridge } from "@cef-ai/widget-runtime/build-tools";
26
+ import { flattenAgents, loadConfig } from "../build/load-config.js";
27
+ import { buildWidgetManifestForDecl } from "../lib/widget-manifest.js";
28
+ import { resolveWidgetRuntimeBundle, WIDGET_RUNTIME_BUNDLE_BASENAME, } from "../lib/widget-runtime-bundle.js";
29
+ const RUNTIME_ROUTE = `/${WIDGET_RUNTIME_BUNDLE_BASENAME}`;
30
+ /** SSE endpoint the injected live-reload client subscribes to (watch mode). */
31
+ const RELOAD_ROUTE = "/__cef_dev_reload";
32
+ const CONTENT_TYPES = {
33
+ ".html": "text/html; charset=utf-8",
34
+ ".htm": "text/html; charset=utf-8",
35
+ ".js": "text/javascript; charset=utf-8",
36
+ ".mjs": "text/javascript; charset=utf-8",
37
+ ".css": "text/css; charset=utf-8",
38
+ ".json": "application/json; charset=utf-8",
39
+ ".svg": "image/svg+xml",
40
+ ".png": "image/png",
41
+ ".jpg": "image/jpeg",
42
+ ".jpeg": "image/jpeg",
43
+ ".gif": "image/gif",
44
+ ".ico": "image/x-icon",
45
+ ".webp": "image/webp",
46
+ ".wasm": "application/wasm",
47
+ ".map": "application/json; charset=utf-8",
48
+ };
49
+ function contentType(file) {
50
+ return CONTENT_TYPES[path.extname(file).toLowerCase()] ?? "application/octet-stream";
51
+ }
52
+ function resolveWidget(widgets, widgetId) {
53
+ if (widgets.length === 0) {
54
+ throw new Error("[cef dev] no widgets declared in cef.config.ts (add a `widgets[]` entry).");
55
+ }
56
+ if (widgetId === undefined)
57
+ return widgets[0];
58
+ const found = widgets.find((w) => w.id === widgetId);
59
+ if (!found) {
60
+ throw new Error(`[cef dev] widget "${widgetId}" not found. Declared: ${widgets
61
+ .map((w) => w.id)
62
+ .join(", ")}.`);
63
+ }
64
+ return found;
65
+ }
66
+ /**
67
+ * Start the dev server. Resolves once it is listening; the caller must
68
+ * `close()` it. Loads config, resolves the widget, builds the manifest, and
69
+ * wires the request handler + (optionally) a dir watcher.
70
+ */
71
+ export async function cefDev(opts = {}) {
72
+ const cwd = opts.cwd ? path.resolve(opts.cwd) : process.cwd();
73
+ const configPath = opts.configPath
74
+ ? path.resolve(cwd, opts.configPath)
75
+ : path.join(cwd, "cef.config.ts");
76
+ const configDir = path.dirname(configPath);
77
+ const host = opts.host ?? "127.0.0.1";
78
+ const log = opts.logger ?? ((m) => console.log(m));
79
+ const watch = opts.watch ?? true;
80
+ // Live reload (watch mode only): the served page opens an SSE stream on
81
+ // RELOAD_ROUTE; the file watcher pushes "reload" on change → the injected
82
+ // client calls location.reload(). Full-page reload (not HMR) — right level
83
+ // for a build-less HTML+JS widget. Disabled when `watch` is off (tests).
84
+ const liveReload = watch;
85
+ const reloadClients = new Set();
86
+ const reloadSnippet = liveReload
87
+ ? `\n<script>/* cef dev live-reload */try{new EventSource(${JSON.stringify(RELOAD_ROUTE)}).onmessage=function(){location.reload()};}catch(e){}</script>\n`
88
+ : "";
89
+ const config = await loadConfig(configPath, configDir);
90
+ const leaves = flattenAgents(config);
91
+ // Collect every declared widget across leaf agents, remembering its agent.
92
+ const owners = [];
93
+ for (const agent of leaves) {
94
+ for (const w of agent.widgets ?? []) {
95
+ owners.push({ widget: w, alias: agent.alias ?? agent.id });
96
+ }
97
+ }
98
+ const chosen = resolveWidget(owners.map((o) => o.widget), opts.widgetId);
99
+ const owner = owners.find((o) => o.widget === chosen);
100
+ const dir = path.resolve(configDir, chosen.dir);
101
+ const { manifest, env, warnings } = buildWidgetManifestForDecl({
102
+ widget: chosen,
103
+ alias: owner.alias,
104
+ ...(opts.env !== undefined ? { env: opts.env } : {}),
105
+ ...(opts.asPubkey !== undefined ? { asPubkey: opts.asPubkey } : {}),
106
+ });
107
+ for (const msg of warnings)
108
+ log(`[cef dev] warning: ${msg}`);
109
+ const runtimeBundle = resolveWidgetRuntimeBundle();
110
+ if (!runtimeBundle) {
111
+ throw new Error(`[cef dev] @cef-ai/widget-runtime's dist/${WIDGET_RUNTIME_BUNDLE_BASENAME} ` +
112
+ `could not be resolved — build the widget-runtime package first.`);
113
+ }
114
+ const entryRoutes = new Set(["/", `/${chosen.entry}`]);
115
+ const server = http.createServer((req, res) => {
116
+ void handleRequest(req, res).catch((err) => {
117
+ res.statusCode = 500;
118
+ res.end(`500 ${err instanceof Error ? err.message : String(err)}`);
119
+ });
120
+ });
121
+ async function handleRequest(req, res) {
122
+ const rawPath = decodeURIComponent((req.url ?? "/").split("?")[0]);
123
+ if (rawPath === RUNTIME_ROUTE) {
124
+ const body = await fsp.readFile(runtimeBundle);
125
+ res.writeHead(200, { "content-type": contentType(RUNTIME_ROUTE) });
126
+ res.end(body);
127
+ return;
128
+ }
129
+ // Live-reload SSE stream: held open; the watcher writes "data: reload".
130
+ if (liveReload && rawPath === RELOAD_ROUTE) {
131
+ res.writeHead(200, {
132
+ "content-type": "text/event-stream",
133
+ "cache-control": "no-cache",
134
+ connection: "keep-alive",
135
+ });
136
+ res.write("retry: 1000\n\n");
137
+ reloadClients.add(res);
138
+ req.on("close", () => reloadClients.delete(res));
139
+ return;
140
+ }
141
+ // Entry HTML → inject the manifest + runtime <script> fresh each request.
142
+ if (entryRoutes.has(rawPath)) {
143
+ const html = await fsp.readFile(path.join(dir, chosen.entry), "utf8");
144
+ const injected = injectWidgetBridge(html, {
145
+ manifest,
146
+ runtimeUrl: RUNTIME_ROUTE,
147
+ });
148
+ res.writeHead(200, { "content-type": "text/html; charset=utf-8" });
149
+ res.end(injected + reloadSnippet);
150
+ return;
151
+ }
152
+ // Static file from the widget dir (path-traversal guarded).
153
+ const rel = rawPath.replace(/^\/+/, "");
154
+ const target = path.resolve(dir, rel);
155
+ if (target !== dir && !target.startsWith(dir + path.sep)) {
156
+ res.writeHead(403).end("403 Forbidden");
157
+ return;
158
+ }
159
+ let stat = null;
160
+ try {
161
+ stat = await fsp.stat(target);
162
+ }
163
+ catch {
164
+ stat = null;
165
+ }
166
+ if (!stat || !stat.isFile()) {
167
+ res.writeHead(404, { "content-type": "text/plain; charset=utf-8" });
168
+ res.end(`404 Not Found: ${rawPath}`);
169
+ return;
170
+ }
171
+ const body = await fsp.readFile(target);
172
+ res.writeHead(200, { "content-type": contentType(target) });
173
+ res.end(body);
174
+ }
175
+ await new Promise((resolve) => {
176
+ server.listen(opts.port ?? 0, host, () => resolve());
177
+ });
178
+ const port = server.address().port;
179
+ const url = `http://${host}:${port}/`;
180
+ let watcher;
181
+ let reloadTimer;
182
+ if (watch) {
183
+ try {
184
+ watcher = fs.watch(dir, { recursive: true }, (_event, file) => {
185
+ // Debounce: a single save often fires several fs events.
186
+ if (reloadTimer)
187
+ clearTimeout(reloadTimer);
188
+ reloadTimer = setTimeout(() => {
189
+ log(`[cef dev] changed: ${file ?? "(dir)"} — reloading browser`);
190
+ for (const client of reloadClients) {
191
+ try {
192
+ client.write("data: reload\n\n");
193
+ }
194
+ catch {
195
+ reloadClients.delete(client);
196
+ }
197
+ }
198
+ }, 80);
199
+ });
200
+ }
201
+ catch {
202
+ // Some platforms don't support recursive watch; non-fatal.
203
+ log(`[cef dev] file watching unavailable on this platform`);
204
+ }
205
+ }
206
+ log(`[cef dev] serving widget "${chosen.id}" (env ${env}) from ${dir}`);
207
+ log(`[cef dev] open ${url}`);
208
+ if (liveReload) {
209
+ log(`[cef dev] live reload on — edits to the widget refresh the browser`);
210
+ }
211
+ log(`[cef dev] the page runs standalone — connect your Cere wallet in the browser to query your ${env} vault`);
212
+ return {
213
+ server,
214
+ url,
215
+ port,
216
+ host,
217
+ widgetId: chosen.id,
218
+ dir,
219
+ manifest,
220
+ warnings,
221
+ close: () => new Promise((resolve, reject) => {
222
+ if (reloadTimer)
223
+ clearTimeout(reloadTimer);
224
+ watcher?.close();
225
+ // End held-open SSE streams so server.close() can complete.
226
+ for (const client of reloadClients) {
227
+ try {
228
+ client.end();
229
+ }
230
+ catch {
231
+ /* already gone */
232
+ }
233
+ }
234
+ reloadClients.clear();
235
+ server.close((err) => (err ? reject(err) : resolve()));
236
+ }),
237
+ };
238
+ }
239
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC7B,kFAAkF;IAClF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,0EAA0E;IAC1E,EAAE,CAAC,EAAE,cAAc,CAAC;IACpB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,4DAA4D;IAC5D,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,oDAAoD;IACpD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iFAAiF;IACjF,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,EAAE,EAAE,cAAc,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAyBD,wBAAgB,oBAAoB,IAAI,cAAc,CAOrD;AAuDD,wBAAsB,OAAO,CAAC,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAiH/E"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAwBA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC7B,kFAAkF;IAClF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,0EAA0E;IAC1E,EAAE,CAAC,EAAE,cAAc,CAAC;IACpB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,4DAA4D;IAC5D,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,oDAAoD;IACpD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iFAAiF;IACjF,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,EAAE,EAAE,cAAc,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAyBD,wBAAgB,oBAAoB,IAAI,cAAc,CAOrD;AAuDD,wBAAsB,OAAO,CAAC,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAgI/E"}
@@ -1,10 +1,22 @@
1
- import { execFile } from "node:child_process";
1
+ import { execFile, spawn } from "node:child_process";
2
2
  import fs from "node:fs/promises";
3
3
  import path from "node:path";
4
4
  import * as readline from "node:readline/promises";
5
5
  import { fileURLToPath } from "node:url";
6
6
  import { promisify } from "node:util";
7
7
  const execFileAsync = promisify(execFile);
8
+ /**
9
+ * Run a command with its stdio inherited so the child's own progress (e.g.
10
+ * `pnpm install`'s live "resolved/downloaded" output) streams straight to the
11
+ * terminal — real feedback, not a buffered one-liner. Rejects on non-zero exit.
12
+ */
13
+ function runStreaming(cmd, args, cwd) {
14
+ return new Promise((resolve, reject) => {
15
+ const child = spawn(cmd, args, { cwd, stdio: "inherit" });
16
+ child.on("error", reject);
17
+ child.on("close", (code) => code === 0 ? resolve() : reject(new Error(`${cmd} exited with ${code}`)));
18
+ });
19
+ }
8
20
  /** Files allowed to pre-exist in an otherwise-"empty" target. */
9
21
  const SAFE_FILES = new Set([
10
22
  ".git",
@@ -99,15 +111,25 @@ export async function cefInit(opts = {}) {
99
111
  const answer = (await rl.question(`${q} (${def}) `)).trim();
100
112
  return answer || def;
101
113
  };
114
+ // Progress notes to stderr (interactive runs only — keeps tests/programmatic
115
+ // callers quiet). The `<pm> install` step can take a minute; without these it
116
+ // looks like a hang and gets terminated.
117
+ const note = (msg) => {
118
+ if (interactive)
119
+ process.stderr.write(`${msg}\n`);
120
+ };
102
121
  try {
103
122
  const dirName = opts.dir ?? (await ask("Project directory", "my-agent"));
104
123
  const targetDir = path.resolve(cwd, dirName);
105
124
  const projectName = path.basename(targetDir);
106
- const agentId = slugify(opts.name ?? (await ask("Agent id", slugify(projectName))));
125
+ // Default the agent id from the directory name — no prompt. Override with
126
+ // `--name`, or edit `id` in cef.config.ts later. This keeps `cef init <dir>`
127
+ // fully prompt-free; a bare `cef init` still prompts only for the directory.
128
+ const agentId = slugify(opts.name ?? projectName);
107
129
  const pm = opts.pm ?? detectPackageManager();
108
130
  const template = opts.template ?? "hello-world";
109
131
  const ai = opts.ai ?? true;
110
- const doInstall = opts.install ?? true;
132
+ const doInstall = opts.install ?? false;
111
133
  const doGit = opts.git ?? true;
112
134
  const unsafe = await nonEmptyUnsafeEntries(targetDir);
113
135
  if (unsafe.length > 0 && !opts.force) {
@@ -129,6 +151,7 @@ export async function cefInit(opts = {}) {
129
151
  throw new Error(`[cef init] unknown template "${template}"`);
130
152
  }
131
153
  const vars = { projectName, agentId };
154
+ note(`\nScaffolding ${projectName}…`);
132
155
  const written = [];
133
156
  for (const rel of await walk(srcRoot)) {
134
157
  const dest = mapDest(rel);
@@ -141,12 +164,15 @@ export async function cefInit(opts = {}) {
141
164
  await fs.writeFile(destFile, substitute(raw, vars));
142
165
  written.push(dest);
143
166
  }
167
+ note(` ✓ ${written.length} files created`);
144
168
  let gitInitialized = false;
145
169
  if (doGit && !(await insideGitRepo(targetDir))) {
146
170
  try {
171
+ note(" initializing git repository…");
147
172
  await execFileAsync("git", ["init", "-q"], { cwd: targetDir });
148
173
  await execFileAsync("git", ["add", "-A"], { cwd: targetDir });
149
174
  gitInitialized = true;
175
+ note(" ✓ git initialized");
150
176
  }
151
177
  catch {
152
178
  gitInitialized = false;
@@ -155,11 +181,14 @@ export async function cefInit(opts = {}) {
155
181
  let installed = false;
156
182
  if (doInstall) {
157
183
  try {
158
- await execFileAsync(pm, ["install"], { cwd: targetDir });
184
+ note(`\nInstalling dependencies with ${pm}…`);
185
+ // Stream the installer's own output so the user sees real progress.
186
+ await runStreaming(pm, ["install"], targetDir);
159
187
  installed = true;
160
188
  }
161
189
  catch {
162
190
  installed = false;
191
+ note(` ! ${pm} install failed — run \`${pm} install\` in the project yourself`);
163
192
  }
164
193
  }
165
194
  const relDir = path.relative(cwd, targetDir) || ".";
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
package/dist/lib/env.d.ts CHANGED
@@ -10,24 +10,57 @@
10
10
  */
11
11
  import type { DdcPreset } from "./ddc.js";
12
12
  export type CefEnv = "dev" | "stage" | "prod";
13
+ /**
14
+ * Cere embed-wallet config for a widget's STANDALONE (interactive) auth path.
15
+ * `env` is the embed-wallet `WalletEnvironment`; `appId` is the Cere wallet
16
+ * application id.
17
+ */
18
+ export interface WidgetWalletConfig {
19
+ appId: string;
20
+ env: string;
21
+ }
22
+ /**
23
+ * The full set of endpoints for one environment. One flat set per env is used
24
+ * across every command: `cef deploy` uses `orchestrator`; `cef publish` uses
25
+ * `marketplace`; `cef build`/`cef dev` bake `vault`/`gar`/`marketplace`/
26
+ * `s3GatewayAuthInfo`/`rpc` into the widget manifest (what
27
+ * `@cef-ai/widget-runtime` reads at boot to reach the user's vault, the Global
28
+ * Agent Registry, the marketplace, the DDC S3 gateway, and the Cere chain).
29
+ */
13
30
  export interface EnvConfig {
14
31
  /** DDC network preset for `cef push`. */
15
32
  ddcPreset: DdcPreset;
16
33
  /** Orchestrator (platform API) base URL for `cef deploy`. */
17
34
  orchestrator: string;
18
- /** Marketplace base URL for `cef publish`. */
35
+ /** Marketplace base URL for `cef publish` + widget manifests. */
19
36
  marketplace: string;
37
+ /** User-vault API base URL (widget manifests / `cef dev`). */
38
+ vault: string;
39
+ /** Global Agent Registry base URL. */
40
+ gar: string;
41
+ /** DDC S3 gateway auth-info URL. */
42
+ s3GatewayAuthInfo: string;
43
+ /** Cere chain RPC endpoint. */
44
+ rpc: string;
45
+ /** Cere embed-wallet config for standalone widget auth. */
46
+ wallet: WidgetWalletConfig;
20
47
  }
21
48
  /**
22
- * Per-environment endpoint table.
49
+ * Cere embed-wallet `appId` for CEF widgets. `cere-widget` is the shared
50
+ * widget app identity (distinct from demo apps like `cef-chat`). Override per
51
+ * deployment via `buildWidgetManifestForDecl`'s `walletAppId` arg or
52
+ * `$CEF_WALLET_APP_ID`.
53
+ */
54
+ export declare const WIDGET_WALLET_APP_ID = "cere-widget";
55
+ /**
56
+ * Per-environment endpoint table. One flat set of endpoints per env.
23
57
  *
24
- * DDC presets are confirmed: dev=devnet, stage=testnet, prod=mainnet.
58
+ * DDC presets: dev=devnet, stage=testnet, prod=mainnet.
25
59
  *
26
- * `dev` hosts are confirmed. `stage`/`prod` orchestrator + marketplace hosts
27
- * are inferred from the `*.compute.<env>.ddcdragon.com` pattern and should be
28
- * verified — the staging cluster's hostname infix may differ (e.g. `test`),
29
- * and prod is a separate host. Until confirmed, pass `--endpoint` /
30
- * `--marketplace` explicitly for stage/prod if these are wrong.
60
+ * `dev` and `stage` (= the `compute.test` cluster) hosts are verified against
61
+ * the cef-chat reference config. `prod` hosts are UNVERIFIED (no prod config
62
+ * on disk) and mirror the pattern — pass `--endpoint` / `--marketplace`
63
+ * explicitly for prod if they're wrong.
31
64
  */
32
65
  export declare const ENVIRONMENTS: Record<CefEnv, EnvConfig>;
33
66
  export declare const DEFAULT_ENV: CefEnv;
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/lib/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;AAE9C,MAAM,WAAW,SAAS;IACxB,yCAAyC;IACzC,SAAS,EAAE,SAAS,CAAC;IACrB,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAgBlD,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,MAAc,CAAC;AAEzC,iFAAiF;AACjF,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAQhD;AAED,6DAA6D;AAC7D,wBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAElD"}
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/lib/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;AAE9C;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,SAAS;IACxB,yCAAyC;IACzC,SAAS,EAAE,SAAS,CAAC;IACrB,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,oCAAoC;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,+BAA+B;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,2DAA2D;IAC3D,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,gBAAgB,CAAC;AAElD;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CA2ClD,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,MAAc,CAAC;AAEzC,iFAAiF;AACjF,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAQhD;AAED,6DAA6D;AAC7D,wBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAElD"}
package/dist/lib/env.js CHANGED
@@ -1,29 +1,62 @@
1
1
  /**
2
- * Per-environment endpoint table.
2
+ * Cere embed-wallet `appId` for CEF widgets. `cere-widget` is the shared
3
+ * widget app identity (distinct from demo apps like `cef-chat`). Override per
4
+ * deployment via `buildWidgetManifestForDecl`'s `walletAppId` arg or
5
+ * `$CEF_WALLET_APP_ID`.
6
+ */
7
+ export const WIDGET_WALLET_APP_ID = "cere-widget";
8
+ /**
9
+ * Per-environment endpoint table. One flat set of endpoints per env.
3
10
  *
4
- * DDC presets are confirmed: dev=devnet, stage=testnet, prod=mainnet.
11
+ * DDC presets: dev=devnet, stage=testnet, prod=mainnet.
5
12
  *
6
- * `dev` hosts are confirmed. `stage`/`prod` orchestrator + marketplace hosts
7
- * are inferred from the `*.compute.<env>.ddcdragon.com` pattern and should be
8
- * verified — the staging cluster's hostname infix may differ (e.g. `test`),
9
- * and prod is a separate host. Until confirmed, pass `--endpoint` /
10
- * `--marketplace` explicitly for stage/prod if these are wrong.
13
+ * `dev` and `stage` (= the `compute.test` cluster) hosts are verified against
14
+ * the cef-chat reference config. `prod` hosts are UNVERIFIED (no prod config
15
+ * on disk) and mirror the pattern — pass `--endpoint` / `--marketplace`
16
+ * explicitly for prod if they're wrong.
11
17
  */
12
18
  export const ENVIRONMENTS = {
19
+ // All dev endpoints verified against the cef-chat reference app
20
+ // (`cef-chat/.env.example`): the user-vault host is `vault-api.compute…`
21
+ // (not `vault.compute…`).
13
22
  dev: {
14
23
  ddcPreset: "DEVNET",
15
24
  orchestrator: "https://orchestrator.compute.dev.ddcdragon.com/",
16
25
  marketplace: "https://agent-marketplace.compute.dev.ddcdragon.com",
26
+ vault: "https://vault-api.compute.dev.ddcdragon.com/",
27
+ gar: "https://gar.compute.dev.ddcdragon.com",
28
+ s3GatewayAuthInfo: "https://ddc-s3-gateway.compute.dev.ddcdragon.com/auth/info",
29
+ rpc: "wss://rpc.devnet.cere.network/ws",
30
+ // Wallet env follows the CEF env. NOTE: cef-chat historically pinned the
31
+ // embed-wallet to `prod` even against dev compute — if the `dev` wallet
32
+ // backend doesn't hold your account, override this or use `--env prod`.
33
+ wallet: { appId: WIDGET_WALLET_APP_ID, env: "dev" },
17
34
  },
35
+ // "stage" = the TEST cluster (`compute.test`), verified against
36
+ // `cef-chat/.env.stage`. Not `compute.stage`.
18
37
  stage: {
19
38
  ddcPreset: "TESTNET",
20
- orchestrator: "https://orchestrator.compute.stage.ddcdragon.com/",
21
- marketplace: "https://agent-marketplace.compute.stage.ddcdragon.com",
39
+ orchestrator: "https://orchestrator.compute.test.ddcdragon.com/",
40
+ marketplace: "https://agent-marketplace.compute.test.ddcdragon.com",
41
+ vault: "https://vault-api.compute.test.ddcdragon.com/",
42
+ gar: "https://gar.compute.test.ddcdragon.com",
43
+ s3GatewayAuthInfo: "https://ddc-s3-gateway.compute.test.ddcdragon.com/auth/info",
44
+ rpc: "wss://rpc.testnet.cere.network/ws",
45
+ wallet: { appId: WIDGET_WALLET_APP_ID, env: "stage" },
22
46
  },
47
+ // FLAG — prod endpoints are UNVERIFIED (no prod config found on disk; prod
48
+ // may use distinct hosts such as `vault.cere.io` / `marketplace.cere.network`).
49
+ // The `compute.prod.ddcdragon.com` hosts mirror the verified dev/test pattern.
50
+ // Override with explicit `--endpoint` / `--marketplace` for prod.
23
51
  prod: {
24
52
  ddcPreset: "MAINNET",
25
53
  orchestrator: "https://orchestrator.compute.prod.ddcdragon.com/",
26
54
  marketplace: "https://agent-marketplace.compute.prod.ddcdragon.com",
55
+ vault: "https://vault-api.compute.prod.ddcdragon.com/",
56
+ gar: "https://gar.compute.prod.ddcdragon.com",
57
+ s3GatewayAuthInfo: "https://ddc-s3-gateway.compute.prod.ddcdragon.com/auth/info",
58
+ rpc: "wss://rpc.mainnet.cere.network/ws",
59
+ wallet: { appId: WIDGET_WALLET_APP_ID, env: "prod" },
27
60
  },
28
61
  };
29
62
  export const DEFAULT_ENV = "dev";
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/lib/env.ts"],"names":[],"mappings":"AAuBA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,YAAY,GAA8B;IACrD,GAAG,EAAE;QACH,SAAS,EAAE,QAAQ;QACnB,YAAY,EAAE,iDAAiD;QAC/D,WAAW,EAAE,qDAAqD;KACnE;IACD,KAAK,EAAE;QACL,SAAS,EAAE,SAAS;QACpB,YAAY,EAAE,mDAAmD;QACjE,WAAW,EAAE,uDAAuD;KACrE;IACD,IAAI,EAAE;QACJ,SAAS,EAAE,SAAS;QACpB,YAAY,EAAE,kDAAkD;QAChE,WAAW,EAAE,sDAAsD;KACpE;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAW,KAAK,CAAC;AAEzC,iFAAiF;AACjF,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,MAAM,MAAM,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAC3C,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE;QAAE,OAAO,WAAW,CAAC;IAC9D,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAChC,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,OAAO,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,2CAA2C,MAAM,IAAI,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,SAAS,CAAC,IAAa;IACrC,OAAO,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/lib/env.ts"],"names":[],"mappings":"AAmDA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAElD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,YAAY,GAA8B;IACrD,gEAAgE;IAChE,yEAAyE;IACzE,0BAA0B;IAC1B,GAAG,EAAE;QACH,SAAS,EAAE,QAAQ;QACnB,YAAY,EAAE,iDAAiD;QAC/D,WAAW,EAAE,qDAAqD;QAClE,KAAK,EAAE,8CAA8C;QACrD,GAAG,EAAE,uCAAuC;QAC5C,iBAAiB,EAAE,4DAA4D;QAC/E,GAAG,EAAE,kCAAkC;QACvC,yEAAyE;QACzE,wEAAwE;QACxE,wEAAwE;QACxE,MAAM,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,GAAG,EAAE,KAAK,EAAE;KACpD;IACD,gEAAgE;IAChE,8CAA8C;IAC9C,KAAK,EAAE;QACL,SAAS,EAAE,SAAS;QACpB,YAAY,EAAE,kDAAkD;QAChE,WAAW,EAAE,sDAAsD;QACnE,KAAK,EAAE,+CAA+C;QACtD,GAAG,EAAE,wCAAwC;QAC7C,iBAAiB,EAAE,6DAA6D;QAChF,GAAG,EAAE,mCAAmC;QACxC,MAAM,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,GAAG,EAAE,OAAO,EAAE;KACtD;IACD,2EAA2E;IAC3E,gFAAgF;IAChF,+EAA+E;IAC/E,kEAAkE;IAClE,IAAI,EAAE;QACJ,SAAS,EAAE,SAAS;QACpB,YAAY,EAAE,kDAAkD;QAChE,WAAW,EAAE,sDAAsD;QACnE,KAAK,EAAE,+CAA+C;QACtD,GAAG,EAAE,wCAAwC;QAC7C,iBAAiB,EAAE,6DAA6D;QAChF,GAAG,EAAE,mCAAmC;QACxC,MAAM,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,GAAG,EAAE,MAAM,EAAE;KACrD;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAW,KAAK,CAAC;AAEzC,iFAAiF;AACjF,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,MAAM,MAAM,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAC3C,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE;QAAE,OAAO,WAAW,CAAC;IAC9D,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAChC,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,OAAO,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,2CAA2C,MAAM,IAAI,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,SAAS,CAAC,IAAa;IACrC,OAAO,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Widget manifest builder (build-time tooling).
3
+ *
4
+ * `@cef-ai/widget-runtime` *reads* a `WidgetManifest` at boot but never builds
5
+ * one — that is the CLI's job. This module assembles the arguments for the
6
+ * runtime's `buildWidgetManifest` from a `cef.config.ts` widget declaration, the
7
+ * resolved `--env` endpoints (see `./env.ts`), and the agent's AS pubkey.
8
+ *
9
+ * Used by both `cef build` (bakes the manifest into `dist/…/widgets/<id>/`) and
10
+ * `cef dev` (serves it inline), so the embedded and standalone paths get an
11
+ * identical manifest.
12
+ */
13
+ import { type WidgetManifest } from "@cef-ai/widget-runtime/build-tools";
14
+ import type { ConfigWidget } from "../build/load-config.js";
15
+ import { type CefEnv } from "./env.js";
16
+ export interface BuildWidgetManifestArgs {
17
+ /** The widget declaration from `cef.config.ts`. */
18
+ widget: ConfigWidget;
19
+ /** Agent alias — the `cef.config.ts` `id`. Forms the manifest `agentId`. */
20
+ alias: string;
21
+ /** `--env` flag (falls back to `$CEF_ENV`, then `dev`). */
22
+ env?: string;
23
+ /**
24
+ * On-platform AS pubkey (bare hex). When present the manifest `agentId` is
25
+ * `<asPubkey>:<alias>`; when absent it falls back to the alias alone and a
26
+ * warning is emitted (queries need the full composite id at runtime).
27
+ */
28
+ asPubkey?: string;
29
+ /** Override the wallet `appId` from the env table (e.g. `$CEF_WALLET_APP_ID`). */
30
+ walletAppId?: string;
31
+ }
32
+ export interface BuildWidgetManifestOutput {
33
+ manifest: WidgetManifest;
34
+ /** Resolved env the endpoints came from. */
35
+ env: CefEnv;
36
+ /** Non-fatal advisories (missing asPubkey, dropped kind, …). */
37
+ warnings: string[];
38
+ }
39
+ /**
40
+ * Build a `WidgetManifest` for one widget declaration + resolved env.
41
+ *
42
+ * Deliberately tolerant: an unknown `kind` (WidgetDecl.kind is free-form) is
43
+ * dropped with a warning rather than throwing, so a `cef build` never fails on
44
+ * a widget the runtime doesn't render as a config-driven kind — the widget can
45
+ * still query the cubby via `window.WidgetRuntime`.
46
+ */
47
+ export declare function buildWidgetManifestForDecl(args: BuildWidgetManifestArgs): BuildWidgetManifestOutput;
48
+ //# sourceMappingURL=widget-manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget-manifest.d.ts","sourceRoot":"","sources":["../../src/lib/widget-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,oCAAoC,CAAC;AAG5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAyB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAc9D,MAAM,WAAW,uBAAuB;IACtC,mDAAmD;IACnD,MAAM,EAAE,YAAY,CAAC;IACrB,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,cAAc,CAAC;IACzB,4CAA4C;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,uBAAuB,GAC5B,yBAAyB,CA8D3B"}