@cef-ai/cli 0.2.7 → 0.4.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.
- package/README.md +75 -1247
- package/dist/build/duration.d.ts +22 -0
- package/dist/build/duration.d.ts.map +1 -0
- package/dist/build/duration.js +44 -0
- package/dist/build/duration.js.map +1 -0
- package/dist/build/esbuild-plugin.d.ts +32 -0
- package/dist/build/esbuild-plugin.d.ts.map +1 -0
- package/dist/build/esbuild-plugin.js +53 -0
- package/dist/build/esbuild-plugin.js.map +1 -0
- package/dist/build/lints.d.ts +55 -0
- package/dist/build/lints.d.ts.map +1 -0
- package/dist/build/lints.js +214 -0
- package/dist/build/lints.js.map +1 -0
- package/dist/build/load-config.d.ts +114 -0
- package/dist/build/load-config.d.ts.map +1 -0
- package/dist/build/load-config.js +150 -0
- package/dist/build/load-config.js.map +1 -0
- package/dist/build/manifest.d.ts +156 -0
- package/dist/build/manifest.d.ts.map +1 -0
- package/dist/build/manifest.js +111 -0
- package/dist/build/manifest.js.map +1 -0
- package/dist/build/targeting.d.ts +15 -0
- package/dist/build/targeting.d.ts.map +1 -0
- package/dist/build/targeting.js +69 -0
- package/dist/build/targeting.js.map +1 -0
- package/dist/cli-program.d.ts +14 -0
- package/dist/cli-program.d.ts.map +1 -0
- package/dist/cli-program.js +171 -0
- package/dist/cli-program.js.map +1 -0
- package/dist/cli.d.ts +2 -2
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +25 -65
- package/dist/cli.js.map +1 -0
- package/dist/commands/build.d.ts +41 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +252 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/inspect.d.ts +49 -0
- package/dist/commands/inspect.d.ts.map +1 -0
- package/dist/commands/inspect.js +135 -0
- package/dist/commands/inspect.js.map +1 -0
- package/dist/commands/keypair.d.ts +21 -0
- package/dist/commands/keypair.d.ts.map +1 -0
- package/dist/commands/keypair.js +91 -0
- package/dist/commands/keypair.js.map +1 -0
- package/dist/commands/publish.d.ts +40 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +187 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/typegen.d.ts +36 -0
- package/dist/commands/typegen.d.ts.map +1 -0
- package/dist/commands/typegen.js +210 -0
- package/dist/commands/typegen.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/cid.d.ts +3 -0
- package/dist/lib/cid.d.ts.map +1 -0
- package/dist/lib/cid.js +43 -0
- package/dist/lib/cid.js.map +1 -0
- package/dist/lib/credentials.d.ts +40 -16
- package/dist/lib/credentials.d.ts.map +1 -0
- package/dist/lib/credentials.js +222 -49
- package/dist/lib/credentials.js.map +1 -0
- package/dist/lib/jcs.d.ts +3 -0
- package/dist/lib/jcs.d.ts.map +1 -0
- package/dist/lib/jcs.js +48 -0
- package/dist/lib/jcs.js.map +1 -0
- package/dist/lib/signing.d.ts +13 -0
- package/dist/lib/signing.d.ts.map +1 -0
- package/dist/lib/signing.js +34 -0
- package/dist/lib/signing.js.map +1 -0
- package/dist/lib.d.ts +18 -0
- package/dist/lib.d.ts.map +1 -0
- package/dist/lib.js +12 -0
- package/dist/lib.js.map +1 -0
- package/dist/typegen/augment.d.ts +57 -0
- package/dist/typegen/augment.d.ts.map +1 -0
- package/dist/typegen/augment.js +87 -0
- package/dist/typegen/augment.js.map +1 -0
- package/dist/typegen/fetch.d.ts +30 -0
- package/dist/typegen/fetch.d.ts.map +1 -0
- package/dist/typegen/fetch.js +38 -0
- package/dist/typegen/fetch.js.map +1 -0
- package/dist/typegen/lockfile.d.ts +42 -0
- package/dist/typegen/lockfile.d.ts.map +1 -0
- package/dist/typegen/lockfile.js +58 -0
- package/dist/typegen/lockfile.js.map +1 -0
- package/dist/typegen/schema-to-ts.d.ts +21 -0
- package/dist/typegen/schema-to-ts.d.ts.map +1 -0
- package/dist/typegen/schema-to-ts.js +29 -0
- package/dist/typegen/schema-to-ts.js.map +1 -0
- package/package.json +23 -58
- package/dist/commands/auth/index.d.ts +0 -2
- package/dist/commands/auth/index.js +0 -162
- package/dist/commands/deploy/clone.d.ts +0 -13
- package/dist/commands/deploy/clone.js +0 -143
- package/dist/commands/deploy/delete.d.ts +0 -14
- package/dist/commands/deploy/delete.js +0 -134
- package/dist/commands/deploy/deploy.d.ts +0 -24
- package/dist/commands/deploy/deploy.js +0 -654
- package/dist/commands/deploy/index.d.ts +0 -2
- package/dist/commands/deploy/index.js +0 -216
- package/dist/commands/deploy/status.d.ts +0 -14
- package/dist/commands/deploy/status.js +0 -61
- package/dist/commands/dev/index.d.ts +0 -2
- package/dist/commands/dev/index.js +0 -134
- package/dist/commands/dev/server.d.ts +0 -14
- package/dist/commands/dev/server.js +0 -195
- package/dist/commands/dev/static/app.js +0 -633
- package/dist/commands/dev/static/index.html +0 -205
- package/dist/commands/dev/static/static/app.js +0 -633
- package/dist/commands/dev/static/static/index.html +0 -205
- package/dist/commands/dev/static/static/style.css +0 -184
- package/dist/commands/dev/static/style.css +0 -184
- package/dist/commands/playground/index.d.ts +0 -2
- package/dist/commands/playground/index.js +0 -75
- package/dist/commands/playground/test.d.ts +0 -15
- package/dist/commands/playground/test.js +0 -166
- package/dist/commands/service/index.d.ts +0 -2
- package/dist/commands/service/index.js +0 -89
- package/dist/lib/api.d.ts +0 -146
- package/dist/lib/api.js +0 -330
- package/dist/lib/config.d.ts +0 -12
- package/dist/lib/config.js +0 -145
- package/dist/lib/runtime/agent-router.d.ts +0 -12
- package/dist/lib/runtime/agent-router.js +0 -67
- package/dist/lib/runtime/context-builder.d.ts +0 -27
- package/dist/lib/runtime/context-builder.js +0 -166
- package/dist/lib/runtime/cubby-manager.d.ts +0 -20
- package/dist/lib/runtime/cubby-manager.js +0 -162
- package/dist/lib/runtime/index.d.ts +0 -51
- package/dist/lib/runtime/index.js +0 -181
- package/dist/lib/runtime/log-collector.d.ts +0 -17
- package/dist/lib/runtime/log-collector.js +0 -61
- package/dist/lib/runtime/stream-manager.d.ts +0 -10
- package/dist/lib/runtime/stream-manager.js +0 -77
- package/dist/lib/runtime/types.d.ts +0 -76
- package/dist/lib/runtime/types.js +0 -2
- package/dist/lib/transpile.d.ts +0 -1
- package/dist/lib/transpile.js +0 -9
- package/dist/lib/typecheck.d.ts +0 -31
- package/dist/lib/typecheck.js +0 -175
- package/dist/lib/types.d.ts +0 -246
- package/dist/lib/types.js +0 -2
- package/dist/lib/utils.d.ts +0 -4
- package/dist/lib/utils.js +0 -33
- package/example/.env.example +0 -6
- package/example/agents/object-detection/tasks/yolo.ts +0 -28
- package/example/agents/parking-violation-detector/tasks/detect.ts +0 -326
- package/example/cef.config.yaml +0 -91
- package/example/engagements/engagement.ts +0 -902
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Commander program factory shared by `./cli.ts` (the bin entry) and the
|
|
3
|
+
* integration tests. Splitting it out keeps the binary itself a thin
|
|
4
|
+
* wrapper that just calls `buildProgram().parseAsync(argv)` while letting
|
|
5
|
+
* tests construct the same wiring without triggering top-level argv
|
|
6
|
+
* parsing on import.
|
|
7
|
+
*/
|
|
8
|
+
import { readFileSync } from "node:fs";
|
|
9
|
+
import path from "node:path";
|
|
10
|
+
import { fileURLToPath } from "node:url";
|
|
11
|
+
import { Command } from "commander";
|
|
12
|
+
import { cefBuild } from "./commands/build.js";
|
|
13
|
+
import { cefInspect } from "./commands/inspect.js";
|
|
14
|
+
import { cefKeypairGenerate } from "./commands/keypair.js";
|
|
15
|
+
import { cefPublish } from "./commands/publish.js";
|
|
16
|
+
import { cefTypegen } from "./commands/typegen.js";
|
|
17
|
+
export const DEFAULT_MARKETPLACE_URL = "https://agent-marketplace.compute.dev.ddcdragon.com";
|
|
18
|
+
function defaultOnError(err) {
|
|
19
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
20
|
+
console.error(msg);
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
export function buildProgram(opts = {}) {
|
|
24
|
+
const onError = opts.onError ?? defaultOnError;
|
|
25
|
+
// dist/cli-program.js → ../package.json (when running compiled).
|
|
26
|
+
// src/cli-program.ts → ../package.json (when running via vitest in src/).
|
|
27
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
28
|
+
const pkg = JSON.parse(readFileSync(path.join(__dirname, "..", "package.json"), "utf8"));
|
|
29
|
+
const program = new Command();
|
|
30
|
+
program
|
|
31
|
+
.name("cef")
|
|
32
|
+
.description("CEF agent build & test CLI")
|
|
33
|
+
.version(pkg.version);
|
|
34
|
+
program
|
|
35
|
+
.command("build")
|
|
36
|
+
.description("Build agent bundle.js + manifest.json")
|
|
37
|
+
.option("--config <path>", "Path to cef.config.ts")
|
|
38
|
+
.option("--out <dir>", "Output directory", "dist")
|
|
39
|
+
.action(async (subOpts) => {
|
|
40
|
+
try {
|
|
41
|
+
const result = await cefBuild({
|
|
42
|
+
configPath: subOpts.config,
|
|
43
|
+
outDir: subOpts.out,
|
|
44
|
+
});
|
|
45
|
+
for (const a of result.agents) {
|
|
46
|
+
console.log(`[ok] ${a.agentId} -> ${a.bundlePath} (${a.bundleBytes} bytes)`);
|
|
47
|
+
console.log(`[ok] ${a.agentId} -> ${a.manifestPath}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
onError(e);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
program
|
|
55
|
+
.command("typegen")
|
|
56
|
+
.description("Generate .cef/generated.d.ts and update cef.lock.json")
|
|
57
|
+
.option("--config <path>", "Path to cef.config.ts")
|
|
58
|
+
.action(async (subOpts) => {
|
|
59
|
+
try {
|
|
60
|
+
const result = await cefTypegen({ configPath: subOpts.config });
|
|
61
|
+
console.log(`[ok] ${result.generatedPath}`);
|
|
62
|
+
console.log(`[ok] ${result.lockfilePath}`);
|
|
63
|
+
}
|
|
64
|
+
catch (e) {
|
|
65
|
+
onError(e);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
program
|
|
69
|
+
.command("inspect <agentDir>")
|
|
70
|
+
.description("Inspect a built bundle + manifest")
|
|
71
|
+
.action(async (agentDir) => {
|
|
72
|
+
try {
|
|
73
|
+
const result = await cefInspect({ agentDir });
|
|
74
|
+
const anyMissing = result.engagements.some((e) => e.missingMethods.length > 0);
|
|
75
|
+
if (anyMissing)
|
|
76
|
+
process.exit(2);
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
onError(e);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
// Stubs — implemented in subsequent milestones.
|
|
83
|
+
program
|
|
84
|
+
.command("test")
|
|
85
|
+
.description("(stub) run agent tests")
|
|
86
|
+
.action(() => {
|
|
87
|
+
console.log("cef test: not yet implemented (use vitest directly for now)");
|
|
88
|
+
});
|
|
89
|
+
program
|
|
90
|
+
.command("publish")
|
|
91
|
+
.description("Publish a built agent's manifest to the marketplace")
|
|
92
|
+
.option("--marketplace <url>", "Marketplace base URL (overrides $CEF_MARKETPLACE_URL)")
|
|
93
|
+
.option("--agent <id>", "Which dist/<id>/ to publish (defaults to the only built agent)")
|
|
94
|
+
.option("--privkey <hex>", "AS private key (hex, 64 chars). Pair with --pubkey.")
|
|
95
|
+
.option("--pubkey <hex>", "AS public key (hex, 64 chars). Pair with --privkey.")
|
|
96
|
+
.option("--keystore <path>", "Path to a JSON keystore file `{ pubkey, privkey }`")
|
|
97
|
+
.option("--profile <name>", "Profile section in ~/.config/cef/credentials (default: 'default')")
|
|
98
|
+
.option("--out <dir>", "Output directory the build wrote to (defaults to dist)", "dist")
|
|
99
|
+
.action(async (subOpts) => {
|
|
100
|
+
try {
|
|
101
|
+
const marketplaceUrl = subOpts.marketplace ??
|
|
102
|
+
process.env.CEF_MARKETPLACE_URL ??
|
|
103
|
+
DEFAULT_MARKETPLACE_URL;
|
|
104
|
+
const publishOpts = {
|
|
105
|
+
marketplaceUrl,
|
|
106
|
+
...(subOpts.agent !== undefined ? { agentId: subOpts.agent } : {}),
|
|
107
|
+
...(subOpts.privkey !== undefined ? { privkey: subOpts.privkey } : {}),
|
|
108
|
+
...(subOpts.pubkey !== undefined ? { pubkey: subOpts.pubkey } : {}),
|
|
109
|
+
...(subOpts.keystore !== undefined ? { keystore: subOpts.keystore } : {}),
|
|
110
|
+
...(subOpts.profile !== undefined ? { profile: subOpts.profile } : {}),
|
|
111
|
+
...(subOpts.out !== undefined ? { distDir: subOpts.out } : {}),
|
|
112
|
+
...(opts.fetchImpl !== undefined ? { fetchImpl: opts.fetchImpl } : {}),
|
|
113
|
+
};
|
|
114
|
+
const result = await cefPublish(publishOpts);
|
|
115
|
+
console.log(`✓ Published ${result.agentId}@${result.version}`);
|
|
116
|
+
console.log(` agentId: ${result.agentId}`);
|
|
117
|
+
console.log(` pubkey: ${result.pubkey}`);
|
|
118
|
+
console.log(` manifestCid: ${result.manifestCid}`);
|
|
119
|
+
}
|
|
120
|
+
catch (e) {
|
|
121
|
+
// CredentialsError carries either a single-line typo message or
|
|
122
|
+
// the canonical multi-line "no AS credentials configured" guidance
|
|
123
|
+
// block. Both ship through `onError` unchanged — the default impl
|
|
124
|
+
// writes to stderr, which is what we want.
|
|
125
|
+
onError(e);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
const keypair = program
|
|
129
|
+
.command("keypair")
|
|
130
|
+
.description("Manage AS Ed25519 keypairs (Agent Service identity)");
|
|
131
|
+
keypair
|
|
132
|
+
.command("generate")
|
|
133
|
+
.description("Generate a new AS keypair (stdout, --out file, or --profile)")
|
|
134
|
+
.option("--out <path>", "Write the JSON keypair to <path> (mode 0600); refuses existing unless --force")
|
|
135
|
+
.option("--profile <name>", "Write/merge into ~/.config/cef/credentials under [<name>] (mode 0600)")
|
|
136
|
+
.option("--force", "Overwrite an existing --out file or --profile section")
|
|
137
|
+
.action(async (subOpts) => {
|
|
138
|
+
try {
|
|
139
|
+
const result = await cefKeypairGenerate({
|
|
140
|
+
...(subOpts.out !== undefined ? { out: subOpts.out } : {}),
|
|
141
|
+
...(subOpts.profile !== undefined ? { profile: subOpts.profile } : {}),
|
|
142
|
+
...(subOpts.force !== undefined ? { force: subOpts.force } : {}),
|
|
143
|
+
});
|
|
144
|
+
if (result.path === undefined && result.profile === undefined) {
|
|
145
|
+
// Default sink: print the JSON to stdout.
|
|
146
|
+
process.stdout.write(JSON.stringify({ pubkey: result.pubkey, privkey: result.privkey }) +
|
|
147
|
+
"\n");
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
const profileSuffix = result.profile
|
|
151
|
+
? ` [profile: ${result.profile}]`
|
|
152
|
+
: "";
|
|
153
|
+
console.log(`✓ AS keypair written to ${result.path}${profileSuffix}`);
|
|
154
|
+
console.log(` Pubkey: ${result.pubkey}`);
|
|
155
|
+
console.log(" This keypair is your Agent Service identity. Keep the private key safe.");
|
|
156
|
+
console.log(" To share with your team, hand them the file or sync it through your team's");
|
|
157
|
+
console.log(" secrets manager — do NOT generate a new one for each developer.");
|
|
158
|
+
}
|
|
159
|
+
catch (e) {
|
|
160
|
+
onError(e);
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
program
|
|
164
|
+
.command("dev")
|
|
165
|
+
.description("(stub) run dev loop")
|
|
166
|
+
.action(() => {
|
|
167
|
+
console.log("cef dev: not yet implemented");
|
|
168
|
+
});
|
|
169
|
+
return program;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=cli-program.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-program.js","sourceRoot":"","sources":["../src/cli-program.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
export {};
|
|
3
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
CHANGED
|
@@ -1,69 +1,29 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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:
|
|
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
|
+
* - publish : sign + POST a built manifest to the marketplace API
|
|
11
|
+
*
|
|
12
|
+
* Stubs (planned for the next phase):
|
|
13
|
+
* - test, dev
|
|
14
|
+
*/
|
|
15
|
+
import { buildProgram } from "./cli-program.js";
|
|
16
|
+
function fail(err) {
|
|
17
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
18
|
+
console.error(msg);
|
|
19
|
+
process.exit(1);
|
|
21
20
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
`);
|
|
21
|
+
// Top-level await is fine: the package is "type": "module" with
|
|
22
|
+
// "module": "NodeNext" which targets ES2022.
|
|
23
|
+
try {
|
|
24
|
+
await buildProgram().parseAsync(process.argv);
|
|
43
25
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
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);
|
|
55
|
-
return program;
|
|
56
|
-
}
|
|
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();
|
|
26
|
+
catch (e) {
|
|
27
|
+
fail(e);
|
|
69
28
|
}
|
|
29
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,SAAS,IAAI,CAAC,GAAY;IACxB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7D,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,gEAAgE;AAChE,6CAA6C;AAC7C,IAAI,CAAC;IACH,MAAM,YAAY,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAChD,CAAC;AAAC,OAAO,CAAC,EAAE,CAAC;IACX,IAAI,CAAC,CAAC,CAAC,CAAC;AACV,CAAC"}
|
|
@@ -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
|