@cef-ai/cli 0.2.7 → 0.3.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 (127) hide show
  1. package/README.md +75 -1247
  2. package/dist/build/duration.d.ts +22 -0
  3. package/dist/build/duration.d.ts.map +1 -0
  4. package/dist/build/duration.js +44 -0
  5. package/dist/build/duration.js.map +1 -0
  6. package/dist/build/esbuild-plugin.d.ts +32 -0
  7. package/dist/build/esbuild-plugin.d.ts.map +1 -0
  8. package/dist/build/esbuild-plugin.js +53 -0
  9. package/dist/build/esbuild-plugin.js.map +1 -0
  10. package/dist/build/lints.d.ts +55 -0
  11. package/dist/build/lints.d.ts.map +1 -0
  12. package/dist/build/lints.js +214 -0
  13. package/dist/build/lints.js.map +1 -0
  14. package/dist/build/load-config.d.ts +114 -0
  15. package/dist/build/load-config.d.ts.map +1 -0
  16. package/dist/build/load-config.js +150 -0
  17. package/dist/build/load-config.js.map +1 -0
  18. package/dist/build/manifest.d.ts +156 -0
  19. package/dist/build/manifest.d.ts.map +1 -0
  20. package/dist/build/manifest.js +111 -0
  21. package/dist/build/manifest.js.map +1 -0
  22. package/dist/build/targeting.d.ts +15 -0
  23. package/dist/build/targeting.d.ts.map +1 -0
  24. package/dist/build/targeting.js +69 -0
  25. package/dist/build/targeting.js.map +1 -0
  26. package/dist/cli.d.ts +2 -2
  27. package/dist/cli.d.ts.map +1 -0
  28. package/dist/cli.js +107 -62
  29. package/dist/cli.js.map +1 -0
  30. package/dist/commands/build.d.ts +41 -0
  31. package/dist/commands/build.d.ts.map +1 -0
  32. package/dist/commands/build.js +252 -0
  33. package/dist/commands/build.js.map +1 -0
  34. package/dist/commands/inspect.d.ts +49 -0
  35. package/dist/commands/inspect.d.ts.map +1 -0
  36. package/dist/commands/inspect.js +135 -0
  37. package/dist/commands/inspect.js.map +1 -0
  38. package/dist/commands/typegen.d.ts +36 -0
  39. package/dist/commands/typegen.d.ts.map +1 -0
  40. package/dist/commands/typegen.js +210 -0
  41. package/dist/commands/typegen.js.map +1 -0
  42. package/dist/index.d.ts +6 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +6 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/lib.d.ts +12 -0
  47. package/dist/lib.d.ts.map +1 -0
  48. package/dist/lib.js +9 -0
  49. package/dist/lib.js.map +1 -0
  50. package/dist/typegen/augment.d.ts +57 -0
  51. package/dist/typegen/augment.d.ts.map +1 -0
  52. package/dist/typegen/augment.js +87 -0
  53. package/dist/typegen/augment.js.map +1 -0
  54. package/dist/typegen/fetch.d.ts +30 -0
  55. package/dist/typegen/fetch.d.ts.map +1 -0
  56. package/dist/typegen/fetch.js +38 -0
  57. package/dist/typegen/fetch.js.map +1 -0
  58. package/dist/typegen/lockfile.d.ts +42 -0
  59. package/dist/typegen/lockfile.d.ts.map +1 -0
  60. package/dist/typegen/lockfile.js +58 -0
  61. package/dist/typegen/lockfile.js.map +1 -0
  62. package/dist/typegen/schema-to-ts.d.ts +21 -0
  63. package/dist/typegen/schema-to-ts.d.ts.map +1 -0
  64. package/dist/typegen/schema-to-ts.js +29 -0
  65. package/dist/typegen/schema-to-ts.js.map +1 -0
  66. package/package.json +20 -58
  67. package/dist/commands/auth/index.d.ts +0 -2
  68. package/dist/commands/auth/index.js +0 -162
  69. package/dist/commands/deploy/clone.d.ts +0 -13
  70. package/dist/commands/deploy/clone.js +0 -143
  71. package/dist/commands/deploy/delete.d.ts +0 -14
  72. package/dist/commands/deploy/delete.js +0 -134
  73. package/dist/commands/deploy/deploy.d.ts +0 -24
  74. package/dist/commands/deploy/deploy.js +0 -654
  75. package/dist/commands/deploy/index.d.ts +0 -2
  76. package/dist/commands/deploy/index.js +0 -216
  77. package/dist/commands/deploy/status.d.ts +0 -14
  78. package/dist/commands/deploy/status.js +0 -61
  79. package/dist/commands/dev/index.d.ts +0 -2
  80. package/dist/commands/dev/index.js +0 -134
  81. package/dist/commands/dev/server.d.ts +0 -14
  82. package/dist/commands/dev/server.js +0 -195
  83. package/dist/commands/dev/static/app.js +0 -633
  84. package/dist/commands/dev/static/index.html +0 -205
  85. package/dist/commands/dev/static/static/app.js +0 -633
  86. package/dist/commands/dev/static/static/index.html +0 -205
  87. package/dist/commands/dev/static/static/style.css +0 -184
  88. package/dist/commands/dev/static/style.css +0 -184
  89. package/dist/commands/playground/index.d.ts +0 -2
  90. package/dist/commands/playground/index.js +0 -75
  91. package/dist/commands/playground/test.d.ts +0 -15
  92. package/dist/commands/playground/test.js +0 -166
  93. package/dist/commands/service/index.d.ts +0 -2
  94. package/dist/commands/service/index.js +0 -89
  95. package/dist/lib/api.d.ts +0 -146
  96. package/dist/lib/api.js +0 -330
  97. package/dist/lib/config.d.ts +0 -12
  98. package/dist/lib/config.js +0 -145
  99. package/dist/lib/credentials.d.ts +0 -19
  100. package/dist/lib/credentials.js +0 -68
  101. package/dist/lib/runtime/agent-router.d.ts +0 -12
  102. package/dist/lib/runtime/agent-router.js +0 -67
  103. package/dist/lib/runtime/context-builder.d.ts +0 -27
  104. package/dist/lib/runtime/context-builder.js +0 -166
  105. package/dist/lib/runtime/cubby-manager.d.ts +0 -20
  106. package/dist/lib/runtime/cubby-manager.js +0 -162
  107. package/dist/lib/runtime/index.d.ts +0 -51
  108. package/dist/lib/runtime/index.js +0 -181
  109. package/dist/lib/runtime/log-collector.d.ts +0 -17
  110. package/dist/lib/runtime/log-collector.js +0 -61
  111. package/dist/lib/runtime/stream-manager.d.ts +0 -10
  112. package/dist/lib/runtime/stream-manager.js +0 -77
  113. package/dist/lib/runtime/types.d.ts +0 -76
  114. package/dist/lib/runtime/types.js +0 -2
  115. package/dist/lib/transpile.d.ts +0 -1
  116. package/dist/lib/transpile.js +0 -9
  117. package/dist/lib/typecheck.d.ts +0 -31
  118. package/dist/lib/typecheck.js +0 -175
  119. package/dist/lib/types.d.ts +0 -246
  120. package/dist/lib/types.js +0 -2
  121. package/dist/lib/utils.d.ts +0 -4
  122. package/dist/lib/utils.js +0 -33
  123. package/example/.env.example +0 -6
  124. package/example/agents/object-detection/tasks/yolo.ts +0 -28
  125. package/example/agents/parking-violation-detector/tasks/detect.ts +0 -326
  126. package/example/cef.config.yaml +0 -91
  127. package/example/engagements/engagement.ts +0 -902
package/dist/cli.js CHANGED
@@ -1,69 +1,114 @@
1
1
  #!/usr/bin/env node
2
- import fs from 'fs';
3
- import path from 'path';
4
- import { fileURLToPath } from 'url';
5
- import { Command } from 'commander';
6
- import { registerAuthCommands } from './commands/auth/index.js';
7
- import { registerDeployCommands } from './commands/deploy/index.js';
8
- import { registerServiceCommands } from './commands/service/index.js';
9
- import { registerPlaygroundCommands } from './commands/playground/index.js';
10
- import { registerDevCommands } from './commands/dev/index.js';
11
- function getVersion() {
12
- try {
13
- const dir = path.dirname(fileURLToPath(import.meta.url));
14
- const pkgPath = path.join(dir, '..', 'package.json');
15
- const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
16
- return pkg.version ?? '0.0.0';
17
- }
18
- catch {
19
- return '0.0.0';
20
- }
2
+ /**
3
+ * `cef` CLI binary entry point. Wires the programmatic command functions
4
+ * (re-exported from `./lib.ts`) into commander subcommands.
5
+ *
6
+ * Subcommands implemented for v1:
7
+ * - build : bundle agents per cef.config.ts
8
+ * - typegen : generate .cef/generated.d.ts + cef.lock.json
9
+ * - inspect : print manifest routing + bundle methods for a built agent
10
+ *
11
+ * Stubs (planned for the next phase):
12
+ * - test, publish, dev
13
+ */
14
+ import { readFileSync } from "node:fs";
15
+ import path from "node:path";
16
+ import { fileURLToPath } from "node:url";
17
+ import { Command } from "commander";
18
+ import { cefBuild } from "./commands/build.js";
19
+ import { cefInspect } from "./commands/inspect.js";
20
+ import { cefTypegen } from "./commands/typegen.js";
21
+ // dist/cli.js → ../package.json. Read at runtime so `cef --version` always
22
+ // reflects the published package version rather than a hardcoded literal.
23
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
24
+ const pkg = JSON.parse(readFileSync(path.join(__dirname, "..", "package.json"), "utf8"));
25
+ function fail(err) {
26
+ const msg = err instanceof Error ? err.message : String(err);
27
+ console.error(msg);
28
+ process.exit(1);
21
29
  }
22
- function showWelcome(version) {
23
- console.log(`
24
- \x1b[1mCEF AI CLI\x1b[0m \x1b[2mv${version}\x1b[0m
25
-
26
- \x1b[36mQuick start:\x1b[0m
27
-
28
- \x1b[33m$\x1b[0m cef login Authenticate with CEF platform
29
- \x1b[33m$\x1b[0m cef dev Start local dev server with UI
30
- \x1b[33m$\x1b[0m cef deploy Deploy topology to orchestrator
31
- \x1b[33m$\x1b[0m cef status Compare local vs deployed state
32
-
33
- \x1b[36mOther commands:\x1b[0m
34
-
35
- \x1b[33m$\x1b[0m cef service list List agent services
36
- \x1b[33m$\x1b[0m cef service create Create a new agent service
37
- \x1b[33m$\x1b[0m cef clone --pubkey <key> Download existing service
38
- \x1b[33m$\x1b[0m cef delete Delete deployed entities
39
- \x1b[33m$\x1b[0m cef --help Show all options
40
-
41
- \x1b[2mDocs: https://github.com/CEF-AI/deploy-sdk#readme\x1b[0m
42
- `);
43
- }
44
- export function createProgram() {
30
+ function buildProgram() {
45
31
  const program = new Command();
46
32
  program
47
- .name('cef')
48
- .description('CEF AI command-line interface')
49
- .version(getVersion(), '-V, --version');
50
- registerAuthCommands(program);
51
- registerDeployCommands(program);
52
- registerServiceCommands(program);
53
- registerPlaygroundCommands(program);
54
- registerDevCommands(program);
33
+ .name("cef")
34
+ .description("CEF agent build & test CLI")
35
+ .version(pkg.version);
36
+ program
37
+ .command("build")
38
+ .description("Build agent bundle.js + manifest.json")
39
+ .option("--config <path>", "Path to cef.config.ts")
40
+ .option("--out <dir>", "Output directory", "dist")
41
+ .action(async (opts) => {
42
+ try {
43
+ const result = await cefBuild({
44
+ configPath: opts.config,
45
+ outDir: opts.out,
46
+ });
47
+ for (const a of result.agents) {
48
+ console.log(`[ok] ${a.agentId} -> ${a.bundlePath} (${a.bundleBytes} bytes)`);
49
+ console.log(`[ok] ${a.agentId} -> ${a.manifestPath}`);
50
+ }
51
+ }
52
+ catch (e) {
53
+ fail(e);
54
+ }
55
+ });
56
+ program
57
+ .command("typegen")
58
+ .description("Generate .cef/generated.d.ts and update cef.lock.json")
59
+ .option("--config <path>", "Path to cef.config.ts")
60
+ .action(async (opts) => {
61
+ try {
62
+ const result = await cefTypegen({ configPath: opts.config });
63
+ console.log(`[ok] ${result.generatedPath}`);
64
+ console.log(`[ok] ${result.lockfilePath}`);
65
+ }
66
+ catch (e) {
67
+ fail(e);
68
+ }
69
+ });
70
+ program
71
+ .command("inspect <agentDir>")
72
+ .description("Inspect a built bundle + manifest")
73
+ .action(async (agentDir) => {
74
+ try {
75
+ const result = await cefInspect({ agentDir });
76
+ const anyMissing = result.engagements.some((e) => e.missingMethods.length > 0);
77
+ if (anyMissing)
78
+ process.exit(2);
79
+ }
80
+ catch (e) {
81
+ fail(e);
82
+ }
83
+ });
84
+ // Stubs for v1 — implemented in the next phase. They print and exit 0
85
+ // so a CI step that calls them does not fail (placeholder behaviour).
86
+ program
87
+ .command("test")
88
+ .description("(stub) run agent tests")
89
+ .action(() => {
90
+ console.log("cef test: not yet implemented (use vitest directly for now)");
91
+ });
92
+ program
93
+ .command("publish")
94
+ .description("(stub) publish to marketplace")
95
+ .action(() => {
96
+ console.log("cef publish: not yet implemented");
97
+ });
98
+ program
99
+ .command("dev")
100
+ .description("(stub) run dev loop")
101
+ .action(() => {
102
+ console.log("cef dev: not yet implemented");
103
+ });
55
104
  return program;
56
105
  }
57
- const isDirectRun = process.argv[1] &&
58
- (fileURLToPath(import.meta.url) === process.argv[1] ||
59
- process.argv[1].endsWith('/cli.js'));
60
- if (isDirectRun) {
61
- const program = createProgram();
62
- // No args (or only node + script): show welcome instead of crashing into deploy
63
- const userArgs = process.argv.slice(2);
64
- if (userArgs.length === 0) {
65
- showWelcome(getVersion());
66
- process.exit(0);
67
- }
68
- program.parse();
106
+ // Top-level await is fine: the package is "type": "module" with
107
+ // "module": "NodeNext" which targets ES2022.
108
+ try {
109
+ await buildProgram().parseAsync(process.argv);
110
+ }
111
+ catch (e) {
112
+ fail(e);
69
113
  }
114
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Public options for `cefBuild`. Defaults are deliberately CWD-relative so
3
+ * the function is usable both from the CLI binary and programmatically
4
+ * from tests / scripts.
5
+ */
6
+ export interface CefBuildOptions {
7
+ /** Project root. Defaults to `process.cwd()`. */
8
+ cwd?: string;
9
+ /** Path to `cef.config.ts`. Defaults to `<cwd>/cef.config.ts`. */
10
+ configPath?: string;
11
+ /** Output root. Defaults to `<cwd>/dist`. Each agent gets `<outDir>/<agentId>/`. */
12
+ outDir?: string;
13
+ }
14
+ export interface CefBuildResult {
15
+ agents: Array<{
16
+ agentId: string;
17
+ bundlePath: string;
18
+ manifestPath: string;
19
+ bundleBytes: number;
20
+ }>;
21
+ }
22
+ /**
23
+ * Build all agents declared in `cef.config.ts` to `<outDir>/<agentId>/`.
24
+ *
25
+ * For each leaf agent we:
26
+ * 1. Normalize the engagement layer (`entry` shorthand → one default
27
+ * engagement, or pass `engagements[]` through with absolute paths).
28
+ * 2. Run static lints PER ENGAGEMENT (so each entry source gets its own
29
+ * publishes derivation).
30
+ * 3. Bundle all engagements into one IIFE (with footer that builds
31
+ * `__cefAgent.engagements[id] = new Cls()`).
32
+ * 4. Execute the bundle in a fresh `vm` sandbox to read decorator metadata
33
+ * per engagement.
34
+ * 5. Combine that metadata + lint output + agent-level config to emit
35
+ * `manifest.json` (engagements[] + targeting + agent-level cubbies/...).
36
+ *
37
+ * Returns a list of artefact paths suitable for further pipeline stages
38
+ * (e.g. `cef publish` consuming the bundle/manifest pair).
39
+ */
40
+ export declare function cefBuild(opts?: CefBuildOptions): Promise<CefBuildResult>;
41
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AA2BA;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,KAAK,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;CACJ;AA2KD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,QAAQ,CAAC,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CA4FlF"}
@@ -0,0 +1,252 @@
1
+ import crypto from "node:crypto";
2
+ import fs from "node:fs/promises";
3
+ import path from "node:path";
4
+ import vm from "node:vm";
5
+ import * as esbuild from "esbuild";
6
+ import { ENGAGEMENT_METADATA } from "@cef-ai/agent-sdk";
7
+ import { ESBUILD_GLOBAL_NAME, IIFE_FOOTER, } from "../build/esbuild-plugin.js";
8
+ import { lintAgentSource } from "../build/lints.js";
9
+ import { flattenAgents, loadConfig, normalizeEngagements, } from "../build/load-config.js";
10
+ import { emitManifest, } from "../build/manifest.js";
11
+ import { validateTargeting } from "../build/targeting.js";
12
+ /**
13
+ * Walk up from `start` looking for an existing `node_modules` directory.
14
+ * Mirrors {@link loadConfig}'s walk so the temp wrapper file is placed
15
+ * somewhere that node's ESM resolver / esbuild can locate `@cef-ai/agent-sdk`.
16
+ *
17
+ * Returns the *parent* directory (the one CONTAINING `node_modules`), or
18
+ * `null` if none was found.
19
+ */
20
+ async function findNodeModulesParent(start) {
21
+ let dir = path.resolve(start);
22
+ while (true) {
23
+ try {
24
+ const stat = await fs.stat(path.join(dir, "node_modules"));
25
+ if (stat.isDirectory())
26
+ return dir;
27
+ }
28
+ catch {
29
+ // not here, keep walking up
30
+ }
31
+ const parent = path.dirname(dir);
32
+ if (parent === dir)
33
+ return null;
34
+ dir = parent;
35
+ }
36
+ }
37
+ /**
38
+ * Generate the temporary wrapper module that imports each engagement's
39
+ * default export and re-exports the map as `engagements`. esbuild bundles
40
+ * this wrapper as the entry point; the IIFE footer (see esbuild-plugin.ts)
41
+ * picks the map up from `globalThis.__cefBundle.engagements` and
42
+ * instantiates each class.
43
+ *
44
+ * Imports use absolute file paths so resolution doesn't depend on the
45
+ * wrapper's directory.
46
+ */
47
+ function renderWrapperSource(engagements) {
48
+ const importLines = engagements
49
+ .map((e, i) => `import _e${i} from ${JSON.stringify(e.entry)};`)
50
+ .join("\n");
51
+ const mapBody = engagements
52
+ .map((e, i) => ` ${JSON.stringify(e.id)}: _e${i}`)
53
+ .join(",\n");
54
+ return `${importLines}\nexport const engagements = {\n${mapBody}\n};\n`;
55
+ }
56
+ /**
57
+ * Bundle one agent's engagement set into `<outDir>/<agentId>/bundle.js`.
58
+ *
59
+ * The flow is:
60
+ * 1. Render a temp wrapper that pulls in every engagement's default
61
+ * export and re-exports them under `engagements`.
62
+ * 2. Run esbuild on the wrapper (IIFE + footer).
63
+ * 3. Execute the bundle in a fresh `vm` context to read each engagement
64
+ * class's decorator metadata (the `__cefAgent.engagements[id]`
65
+ * instance's `constructor[ENGAGEMENT_METADATA]`).
66
+ *
67
+ * Decorators are still TC39-stage-2 syntax in our SDK, so we feed esbuild
68
+ * a `tsconfigRaw` that turns on `experimentalDecorators` regardless of
69
+ * what the host project's tsconfig says.
70
+ */
71
+ async function bundleAgent(args) {
72
+ const { agent, engagements, configDir, outDir } = args;
73
+ const agentOutDir = path.join(outDir, agent.id);
74
+ const bundlePath = path.join(agentOutDir, "bundle.js");
75
+ await fs.mkdir(agentOutDir, { recursive: true });
76
+ // Place the wrapper inside an existing `node_modules/.cef/build-cache/`
77
+ // ancestor so its `@cef-ai/agent-sdk` import (transitively reached through
78
+ // the engagement files) resolves identically to how loadConfig does it.
79
+ const nmParent = await findNodeModulesParent(configDir);
80
+ if (!nmParent) {
81
+ throw new Error(`[@cef-ai/cli] could not find a node_modules ancestor of ${configDir}; install dependencies first`);
82
+ }
83
+ const cacheDir = path.join(nmParent, "node_modules", ".cef", "build-cache");
84
+ await fs.mkdir(cacheDir, { recursive: true });
85
+ const wrapperPath = path.join(cacheDir, `wrapper-${agent.id}-${process.pid}-${crypto.randomBytes(6).toString("hex")}.ts`);
86
+ await fs.writeFile(wrapperPath, renderWrapperSource(engagements), "utf8");
87
+ try {
88
+ await esbuild.build({
89
+ entryPoints: [wrapperPath],
90
+ bundle: true,
91
+ format: "iife",
92
+ target: "es2022",
93
+ platform: "neutral",
94
+ globalName: ESBUILD_GLOBAL_NAME,
95
+ outfile: bundlePath,
96
+ footer: { js: IIFE_FOOTER },
97
+ logLevel: "silent",
98
+ // Inline everything; the runtime sandbox has no module loader.
99
+ external: [],
100
+ tsconfigRaw: JSON.stringify({
101
+ compilerOptions: {
102
+ experimentalDecorators: true,
103
+ target: "es2022",
104
+ useDefineForClassFields: false,
105
+ },
106
+ }),
107
+ conditions: ["import", "node"],
108
+ });
109
+ }
110
+ finally {
111
+ await fs.unlink(wrapperPath).catch(() => { });
112
+ }
113
+ // Read the metadata back by executing the bundle in a fresh vm sandbox.
114
+ // The IIFE constructs one instance per engagement and assigns the map to
115
+ // globalThis.__cefAgent.engagements[id]; ENGAGEMENT_METADATA hangs off
116
+ // each instance's class.
117
+ const bundleSource = await fs.readFile(bundlePath, "utf8");
118
+ const sandbox = { console };
119
+ sandbox.globalThis = sandbox;
120
+ try {
121
+ vm.runInNewContext(bundleSource, sandbox);
122
+ }
123
+ catch (e) {
124
+ const msg = e?.message ?? String(e);
125
+ throw new Error(`[@cef-ai/cli] agent "${agent.id}" threw while initializing for metadata extraction. ` +
126
+ `Constructors must be side-effect-free for cef build to read decorator metadata. ` +
127
+ `Original error: ${msg}`);
128
+ }
129
+ const cefAgent = sandbox.__cefAgent;
130
+ if (!cefAgent || !cefAgent.engagements) {
131
+ throw new Error(`[@cef-ai/cli] agent "${agent.id}": bundle did not set globalThis.__cefAgent.engagements`);
132
+ }
133
+ const metas = new Map();
134
+ for (const e of engagements) {
135
+ const inst = cefAgent.engagements[e.id];
136
+ if (!inst) {
137
+ throw new Error(`[@cef-ai/cli] engagement "${e.id}" in agent "${agent.id}": not present in __cefAgent.engagements`);
138
+ }
139
+ const meta = inst.constructor[ENGAGEMENT_METADATA];
140
+ if (!meta) {
141
+ throw new Error(`[@cef-ai/cli] engagement "${e.id}" in agent "${agent.id}": class has no @OnEvent/@OnStart/@OnClose/@Engagement decorators`);
142
+ }
143
+ if (meta.id !== undefined && meta.id !== e.id) {
144
+ throw new Error(`[@cef-ai/cli] engagement "${e.id}" in agent "${agent.id}": @Engagement decorator declares id "${meta.id}" but config declares "${e.id}"`);
145
+ }
146
+ metas.set(e.id, meta);
147
+ }
148
+ const stat = await fs.stat(bundlePath);
149
+ return { bundlePath, bundleBytes: stat.size, metas };
150
+ }
151
+ /**
152
+ * Build all agents declared in `cef.config.ts` to `<outDir>/<agentId>/`.
153
+ *
154
+ * For each leaf agent we:
155
+ * 1. Normalize the engagement layer (`entry` shorthand → one default
156
+ * engagement, or pass `engagements[]` through with absolute paths).
157
+ * 2. Run static lints PER ENGAGEMENT (so each entry source gets its own
158
+ * publishes derivation).
159
+ * 3. Bundle all engagements into one IIFE (with footer that builds
160
+ * `__cefAgent.engagements[id] = new Cls()`).
161
+ * 4. Execute the bundle in a fresh `vm` sandbox to read decorator metadata
162
+ * per engagement.
163
+ * 5. Combine that metadata + lint output + agent-level config to emit
164
+ * `manifest.json` (engagements[] + targeting + agent-level cubbies/...).
165
+ *
166
+ * Returns a list of artefact paths suitable for further pipeline stages
167
+ * (e.g. `cef publish` consuming the bundle/manifest pair).
168
+ */
169
+ export async function cefBuild(opts = {}) {
170
+ const cwd = opts.cwd ? path.resolve(opts.cwd) : process.cwd();
171
+ const configPath = opts.configPath
172
+ ? path.resolve(cwd, opts.configPath)
173
+ : path.join(cwd, "cef.config.ts");
174
+ const outDir = opts.outDir ? path.resolve(cwd, opts.outDir) : path.join(cwd, "dist");
175
+ const configDir = path.dirname(configPath);
176
+ const config = await loadConfig(configPath, configDir);
177
+ const leaves = flattenAgents(config);
178
+ const agents = [];
179
+ for (const agent of leaves) {
180
+ const engagements = normalizeEngagements(agent, configDir);
181
+ // 1. Static lints — runs BEFORE esbuild so authors get a clean error
182
+ // location on the source rather than a transformed bundle line.
183
+ // Per-engagement so every entry source is audited and we collect
184
+ // per-engagement publishes for the manifest.
185
+ const declaredCubbyAliases = new Set((agent.cubbies ?? []).map((c) => c.alias));
186
+ const declaredModelAliases = new Set(Object.keys(agent.models ?? {}));
187
+ const perEngagementPublishes = new Map();
188
+ for (const e of engagements) {
189
+ const lintResult = lintAgentSource({
190
+ entryPath: e.entry,
191
+ declaredCubbyAliases,
192
+ declaredModelAliases,
193
+ });
194
+ perEngagementPublishes.set(e.id, lintResult.publishes);
195
+ }
196
+ // 2. Validate targeting BEFORE bundling so authors get an early failure
197
+ // that points at cef.config.ts rather than wading through esbuild
198
+ // output for what's a config-level mistake.
199
+ const { targeting } = validateTargeting({
200
+ agentId: agent.id,
201
+ engagementIds: engagements.map((e) => e.id),
202
+ targeting: agent.targeting,
203
+ });
204
+ const { bundlePath, bundleBytes, metas } = await bundleAgent({
205
+ agent,
206
+ engagements,
207
+ configDir,
208
+ outDir,
209
+ });
210
+ const engagementInputs = engagements.map((e) => {
211
+ const meta = metas.get(e.id);
212
+ const input = {
213
+ id: e.id,
214
+ events: meta.events ?? {},
215
+ lifecycle: meta.lifecycle ?? {},
216
+ publishes: perEngagementPublishes.get(e.id) ?? [],
217
+ };
218
+ if (meta.goal !== undefined)
219
+ input.goal = meta.goal;
220
+ return input;
221
+ });
222
+ const manifestPath = path.join(outDir, agent.id, "manifest.json");
223
+ await emitManifest(manifestPath, {
224
+ agentId: agent.id,
225
+ version: agent.version,
226
+ bundlePath,
227
+ engagements: engagementInputs,
228
+ config: {
229
+ alias: agent.alias,
230
+ source: agent.source,
231
+ card: agent.card,
232
+ requiredScopes: agent.requiredScopes,
233
+ idleTimeout: agent.idleTimeout,
234
+ cubbies: agent.cubbies,
235
+ settings: agent.settings,
236
+ models: agent.models,
237
+ uses: agent.uses,
238
+ eventSchemas: agent.eventSchemas,
239
+ },
240
+ configDir,
241
+ targeting,
242
+ });
243
+ agents.push({
244
+ agentId: agent.id,
245
+ bundlePath,
246
+ manifestPath,
247
+ bundleBytes,
248
+ });
249
+ }
250
+ return { agents };
251
+ }
252
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { Targeting } from "../build/load-config.js";
2
+ /**
3
+ * Public options for `cefInspect`. The agent directory is the only required
4
+ * input; logging can be disabled when calling programmatically (tests).
5
+ */
6
+ export interface CefInspectOptions {
7
+ /** Directory containing `manifest.json` and `bundle.js`. */
8
+ agentDir: string;
9
+ /** When false, suppress console output. Defaults to true. */
10
+ print?: boolean;
11
+ }
12
+ export interface InspectEngagement {
13
+ id: string;
14
+ goal?: string;
15
+ /** eventType → handlerName, copied from `manifest.engagements[i].handles`. */
16
+ handles: Record<string, string>;
17
+ /** Method names exposed on this engagement's instance, sorted alphabetically. */
18
+ exposedMethods: string[];
19
+ /** Names referenced by manifest routing that aren't on the engagement instance. */
20
+ missingMethods: string[];
21
+ }
22
+ export interface CefInspectResult {
23
+ manifest: {
24
+ /** Marketplace alias / build id. */
25
+ alias: string;
26
+ version: string;
27
+ cubbies: string[];
28
+ models: string[];
29
+ handles: string[];
30
+ publishes: string[];
31
+ targeting: Targeting;
32
+ };
33
+ engagements: InspectEngagement[];
34
+ }
35
+ /**
36
+ * Inspect a built agent directory.
37
+ *
38
+ * Reads `<agentDir>/manifest.json` for the per-engagement routing tables
39
+ * and executes `<agentDir>/bundle.js` in a fresh `node:vm` context to
40
+ * enumerate the methods actually exposed on each
41
+ * `globalThis.__cefAgent.engagements[id]` instance. The two views are
42
+ * useful for confirming that each manifest engagement's `handlerName`
43
+ * strings match real methods on the bundled instance.
44
+ *
45
+ * Pure exploration: no files are written, no network. Safe to run on any
46
+ * `dist/<agentId>/` directory.
47
+ */
48
+ export declare function cefInspect(opts: CefInspectOptions): Promise<CefInspectResult>;
49
+ //# sourceMappingURL=inspect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,iFAAiF;IACjF,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,mFAAmF;IACnF,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE;QACR,oCAAoC;QACpC,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,SAAS,EAAE,SAAS,CAAC;KACtB,CAAC;IACF,WAAW,EAAE,iBAAiB,EAAE,CAAC;CAClC;AAkBD;;;;;;;;;;;;GAYG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,gBAAgB,CAAC,CAsE3B"}