@agentuity/cli 0.0.51 → 0.0.53
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/dist/api.js +68 -0
- package/dist/api.js.map +1 -0
- package/dist/auth.js +225 -0
- package/dist/auth.js.map +1 -0
- package/dist/banner.js +35 -0
- package/dist/banner.js.map +1 -0
- package/dist/cli-logger.js +72 -0
- package/dist/cli-logger.js.map +1 -0
- package/dist/cli.js +822 -0
- package/dist/cli.js.map +1 -0
- package/dist/cmd/ai/capabilities/index.js +10 -0
- package/dist/cmd/ai/capabilities/index.js.map +1 -0
- package/dist/cmd/ai/capabilities/show.js +221 -0
- package/dist/cmd/ai/capabilities/show.js.map +1 -0
- package/dist/cmd/ai/index.js +11 -0
- package/dist/cmd/ai/index.js.map +1 -0
- package/dist/cmd/ai/prompt/index.js +10 -0
- package/dist/cmd/ai/prompt/index.js.map +1 -0
- package/dist/cmd/ai/prompt/llm.js +365 -0
- package/dist/cmd/ai/prompt/llm.js.map +1 -0
- package/dist/cmd/ai/schema/index.js +10 -0
- package/dist/cmd/ai/schema/index.js.map +1 -0
- package/dist/cmd/ai/schema/show.js +23 -0
- package/dist/cmd/ai/schema/show.js.map +1 -0
- package/dist/cmd/auth/api.js +85 -0
- package/dist/cmd/auth/api.js.map +1 -0
- package/dist/cmd/auth/index.js +13 -0
- package/dist/cmd/auth/index.js.map +1 -0
- package/dist/cmd/auth/login.js +84 -0
- package/dist/cmd/auth/login.js.map +1 -0
- package/dist/cmd/auth/logout.js +17 -0
- package/dist/cmd/auth/logout.js.map +1 -0
- package/dist/cmd/auth/signup.js +55 -0
- package/dist/cmd/auth/signup.js.map +1 -0
- package/dist/cmd/auth/ssh/add.js +239 -0
- package/dist/cmd/auth/ssh/add.js.map +1 -0
- package/dist/cmd/auth/ssh/api.js +53 -0
- package/dist/cmd/auth/ssh/api.js.map +1 -0
- package/dist/cmd/auth/ssh/delete.js +126 -0
- package/dist/cmd/auth/ssh/delete.js.map +1 -0
- package/dist/cmd/auth/ssh/index.js +11 -0
- package/dist/cmd/auth/ssh/index.js.map +1 -0
- package/dist/cmd/auth/ssh/list.js +70 -0
- package/dist/cmd/auth/ssh/list.js.map +1 -0
- package/dist/cmd/auth/whoami.js +68 -0
- package/dist/cmd/auth/whoami.js.map +1 -0
- package/dist/cmd/build/ast.js +608 -0
- package/dist/cmd/build/ast.js.map +1 -0
- package/dist/cmd/build/ast.test.js +389 -0
- package/dist/cmd/build/ast.test.js.map +1 -0
- package/dist/cmd/build/bundler.js +304 -0
- package/dist/cmd/build/bundler.js.map +1 -0
- package/dist/cmd/build/file.js +10 -0
- package/dist/cmd/build/file.js.map +1 -0
- package/dist/cmd/build/fix-duplicate-exports.js +167 -0
- package/dist/cmd/build/fix-duplicate-exports.js.map +1 -0
- package/dist/cmd/build/fix-duplicate-exports.test.js +300 -0
- package/dist/cmd/build/fix-duplicate-exports.test.js.map +1 -0
- package/dist/cmd/build/index.d.ts.map +1 -1
- package/dist/cmd/build/index.js +81 -0
- package/dist/cmd/build/index.js.map +1 -0
- package/dist/cmd/build/patch/_util.js +42 -0
- package/dist/cmd/build/patch/_util.js.map +1 -0
- package/dist/cmd/build/patch/aisdk.js +65 -0
- package/dist/cmd/build/patch/aisdk.js.map +1 -0
- package/dist/cmd/build/patch/index.js +97 -0
- package/dist/cmd/build/patch/index.js.map +1 -0
- package/dist/cmd/build/patch/llm.js +18 -0
- package/dist/cmd/build/patch/llm.js.map +1 -0
- package/dist/cmd/build/plugin.d.ts.map +1 -1
- package/dist/cmd/build/plugin.js +581 -0
- package/dist/cmd/build/plugin.js.map +1 -0
- package/dist/cmd/cloud/agents/index.js +133 -0
- package/dist/cmd/cloud/agents/index.js.map +1 -0
- package/dist/cmd/cloud/deploy.js +341 -0
- package/dist/cmd/cloud/deploy.js.map +1 -0
- package/dist/cmd/cloud/deployment/index.js +20 -0
- package/dist/cmd/cloud/deployment/index.js.map +1 -0
- package/dist/cmd/cloud/deployment/list.js +89 -0
- package/dist/cmd/cloud/deployment/list.js.map +1 -0
- package/dist/cmd/cloud/deployment/remove.js +60 -0
- package/dist/cmd/cloud/deployment/remove.js.map +1 -0
- package/dist/cmd/cloud/deployment/rollback.js +80 -0
- package/dist/cmd/cloud/deployment/rollback.js.map +1 -0
- package/dist/cmd/cloud/deployment/show.js +106 -0
- package/dist/cmd/cloud/deployment/show.js.map +1 -0
- package/dist/cmd/cloud/deployment/undeploy.js +45 -0
- package/dist/cmd/cloud/deployment/undeploy.js.map +1 -0
- package/dist/cmd/cloud/deployment/utils.js +10 -0
- package/dist/cmd/cloud/deployment/utils.js.map +1 -0
- package/dist/cmd/cloud/domain.js +77 -0
- package/dist/cmd/cloud/domain.js.map +1 -0
- package/dist/cmd/cloud/env/delete.js +50 -0
- package/dist/cmd/cloud/env/delete.js.map +1 -0
- package/dist/cmd/cloud/env/get.js +65 -0
- package/dist/cmd/cloud/env/get.js.map +1 -0
- package/dist/cmd/cloud/env/import.js +113 -0
- package/dist/cmd/cloud/env/import.js.map +1 -0
- package/dist/cmd/cloud/env/index.js +24 -0
- package/dist/cmd/cloud/env/index.js.map +1 -0
- package/dist/cmd/cloud/env/list.js +58 -0
- package/dist/cmd/cloud/env/list.js.map +1 -0
- package/dist/cmd/cloud/env/pull.js +81 -0
- package/dist/cmd/cloud/env/pull.js.map +1 -0
- package/dist/cmd/cloud/env/push.js +61 -0
- package/dist/cmd/cloud/env/push.js.map +1 -0
- package/dist/cmd/cloud/env/set.js +73 -0
- package/dist/cmd/cloud/env/set.js.map +1 -0
- package/dist/cmd/cloud/index.js +31 -0
- package/dist/cmd/cloud/index.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/create-namespace.js +41 -0
- package/dist/cmd/cloud/keyvalue/create-namespace.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/delete-namespace.js +64 -0
- package/dist/cmd/cloud/keyvalue/delete-namespace.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/delete.js +47 -0
- package/dist/cmd/cloud/keyvalue/delete.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/get.js +65 -0
- package/dist/cmd/cloud/keyvalue/get.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/index.js +32 -0
- package/dist/cmd/cloud/keyvalue/index.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/keys.js +50 -0
- package/dist/cmd/cloud/keyvalue/keys.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/list-namespaces.js +37 -0
- package/dist/cmd/cloud/keyvalue/list-namespaces.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/repl.js +277 -0
- package/dist/cmd/cloud/keyvalue/repl.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/search.js +72 -0
- package/dist/cmd/cloud/keyvalue/search.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/set.js +59 -0
- package/dist/cmd/cloud/keyvalue/set.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/stats.js +82 -0
- package/dist/cmd/cloud/keyvalue/stats.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/util.js +19 -0
- package/dist/cmd/cloud/keyvalue/util.js.map +1 -0
- package/dist/cmd/cloud/objectstore/delete-bucket.js +66 -0
- package/dist/cmd/cloud/objectstore/delete-bucket.js.map +1 -0
- package/dist/cmd/cloud/objectstore/delete.js +56 -0
- package/dist/cmd/cloud/objectstore/delete.js.map +1 -0
- package/dist/cmd/cloud/objectstore/get.js +64 -0
- package/dist/cmd/cloud/objectstore/get.js.map +1 -0
- package/dist/cmd/cloud/objectstore/index.js +28 -0
- package/dist/cmd/cloud/objectstore/index.js.map +1 -0
- package/dist/cmd/cloud/objectstore/list-buckets.js +37 -0
- package/dist/cmd/cloud/objectstore/list-buckets.js.map +1 -0
- package/dist/cmd/cloud/objectstore/list-keys.js +52 -0
- package/dist/cmd/cloud/objectstore/list-keys.js.map +1 -0
- package/dist/cmd/cloud/objectstore/put.js +57 -0
- package/dist/cmd/cloud/objectstore/put.js.map +1 -0
- package/dist/cmd/cloud/objectstore/repl.js +219 -0
- package/dist/cmd/cloud/objectstore/repl.js.map +1 -0
- package/dist/cmd/cloud/objectstore/url.js +55 -0
- package/dist/cmd/cloud/objectstore/url.js.map +1 -0
- package/dist/cmd/cloud/objectstore/util.js +18 -0
- package/dist/cmd/cloud/objectstore/util.js.map +1 -0
- package/dist/cmd/cloud/resource/add.js +70 -0
- package/dist/cmd/cloud/resource/add.js.map +1 -0
- package/dist/cmd/cloud/resource/delete.js +126 -0
- package/dist/cmd/cloud/resource/delete.js.map +1 -0
- package/dist/cmd/cloud/resource/index.js +12 -0
- package/dist/cmd/cloud/resource/index.js.map +1 -0
- package/dist/cmd/cloud/resource/list.js +89 -0
- package/dist/cmd/cloud/resource/list.js.map +1 -0
- package/dist/cmd/cloud/scp/download.js +72 -0
- package/dist/cmd/cloud/scp/download.js.map +1 -0
- package/dist/cmd/cloud/scp/index.js +10 -0
- package/dist/cmd/cloud/scp/index.js.map +1 -0
- package/dist/cmd/cloud/scp/upload.js +75 -0
- package/dist/cmd/cloud/scp/upload.js.map +1 -0
- package/dist/cmd/cloud/secret/delete.js +50 -0
- package/dist/cmd/cloud/secret/delete.js.map +1 -0
- package/dist/cmd/cloud/secret/get.js +69 -0
- package/dist/cmd/cloud/secret/get.js.map +1 -0
- package/dist/cmd/cloud/secret/import.js +88 -0
- package/dist/cmd/cloud/secret/import.js.map +1 -0
- package/dist/cmd/cloud/secret/index.js +24 -0
- package/dist/cmd/cloud/secret/index.js.map +1 -0
- package/dist/cmd/cloud/secret/list.js +58 -0
- package/dist/cmd/cloud/secret/list.js.map +1 -0
- package/dist/cmd/cloud/secret/pull.js +81 -0
- package/dist/cmd/cloud/secret/pull.js.map +1 -0
- package/dist/cmd/cloud/secret/push.js +61 -0
- package/dist/cmd/cloud/secret/push.js.map +1 -0
- package/dist/cmd/cloud/secret/set.js +57 -0
- package/dist/cmd/cloud/secret/set.js.map +1 -0
- package/dist/cmd/cloud/session/get.d.ts.map +1 -1
- package/dist/cmd/cloud/session/get.js +155 -0
- package/dist/cmd/cloud/session/get.js.map +1 -0
- package/dist/cmd/cloud/session/index.js +11 -0
- package/dist/cmd/cloud/session/index.js.map +1 -0
- package/dist/cmd/cloud/session/list.js +132 -0
- package/dist/cmd/cloud/session/list.js.map +1 -0
- package/dist/cmd/cloud/session/logs.js +56 -0
- package/dist/cmd/cloud/session/logs.js.map +1 -0
- package/dist/cmd/cloud/ssh.js +67 -0
- package/dist/cmd/cloud/ssh.js.map +1 -0
- package/dist/cmd/dev/agents.js +103 -0
- package/dist/cmd/dev/agents.js.map +1 -0
- package/dist/cmd/dev/api.js +26 -0
- package/dist/cmd/dev/api.js.map +1 -0
- package/dist/cmd/dev/download.js +77 -0
- package/dist/cmd/dev/download.js.map +1 -0
- package/dist/cmd/dev/index.js +745 -0
- package/dist/cmd/dev/index.js.map +1 -0
- package/dist/cmd/dev/sync.js +229 -0
- package/dist/cmd/dev/sync.js.map +1 -0
- package/dist/cmd/dev/templates.js +75 -0
- package/dist/cmd/dev/templates.js.map +1 -0
- package/dist/cmd/index.js +49 -0
- package/dist/cmd/index.js.map +1 -0
- package/dist/cmd/profile/create.js +89 -0
- package/dist/cmd/profile/create.js.map +1 -0
- package/dist/cmd/profile/delete.js +63 -0
- package/dist/cmd/profile/delete.js.map +1 -0
- package/dist/cmd/profile/index.js +14 -0
- package/dist/cmd/profile/index.js.map +1 -0
- package/dist/cmd/profile/list.js +28 -0
- package/dist/cmd/profile/list.js.map +1 -0
- package/dist/cmd/profile/show.js +68 -0
- package/dist/cmd/profile/show.js.map +1 -0
- package/dist/cmd/profile/use.js +37 -0
- package/dist/cmd/profile/use.js.map +1 -0
- package/dist/cmd/project/create.js +92 -0
- package/dist/cmd/project/create.js.map +1 -0
- package/dist/cmd/project/delete.js +117 -0
- package/dist/cmd/project/delete.js.map +1 -0
- package/dist/cmd/project/download.js +217 -0
- package/dist/cmd/project/download.js.map +1 -0
- package/dist/cmd/project/index.js +12 -0
- package/dist/cmd/project/index.js.map +1 -0
- package/dist/cmd/project/list.js +51 -0
- package/dist/cmd/project/list.js.map +1 -0
- package/dist/cmd/project/show.js +54 -0
- package/dist/cmd/project/show.js.map +1 -0
- package/dist/cmd/project/template-flow.js +315 -0
- package/dist/cmd/project/template-flow.js.map +1 -0
- package/dist/cmd/project/templates.js +31 -0
- package/dist/cmd/project/templates.js.map +1 -0
- package/dist/cmd/repl/index.js +444 -0
- package/dist/cmd/repl/index.js.map +1 -0
- package/dist/cmd/version/index.js +29 -0
- package/dist/cmd/version/index.js.map +1 -0
- package/dist/command-prefix.js +37 -0
- package/dist/command-prefix.js.map +1 -0
- package/dist/config.js +536 -0
- package/dist/config.js.map +1 -0
- package/dist/crypto/box.js +382 -0
- package/dist/crypto/box.js.map +1 -0
- package/dist/crypto/box.test.js +317 -0
- package/dist/crypto/box.test.js.map +1 -0
- package/dist/download.js +64 -0
- package/dist/download.js.map +1 -0
- package/dist/env-util.js +219 -0
- package/dist/env-util.js.map +1 -0
- package/dist/env-util.test.js +146 -0
- package/dist/env-util.test.js.map +1 -0
- package/dist/errors.js +177 -0
- package/dist/errors.js.map +1 -0
- package/dist/explain.js +90 -0
- package/dist/explain.js.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/json.js +29 -0
- package/dist/json.js.map +1 -0
- package/dist/legacy-check.js +104 -0
- package/dist/legacy-check.js.map +1 -0
- package/dist/output.js +207 -0
- package/dist/output.js.map +1 -0
- package/dist/repl.js +1176 -0
- package/dist/repl.js.map +1 -0
- package/dist/runtime.js +19 -0
- package/dist/runtime.js.map +1 -0
- package/dist/schema-generator.js +289 -0
- package/dist/schema-generator.js.map +1 -0
- package/dist/schema-parser.js +145 -0
- package/dist/schema-parser.js.map +1 -0
- package/dist/sound.js +44 -0
- package/dist/sound.js.map +1 -0
- package/dist/steps.js +293 -0
- package/dist/steps.js.map +1 -0
- package/dist/terminal.js +130 -0
- package/dist/terminal.js.map +1 -0
- package/dist/tui.js +1124 -0
- package/dist/tui.js.map +1 -0
- package/dist/types.js +163 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/detectSubagent.js +25 -0
- package/dist/utils/detectSubagent.js.map +1 -0
- package/dist/utils/format.js +21 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/zip.js +33 -0
- package/dist/utils/zip.js.map +1 -0
- package/dist/version.js +24 -0
- package/dist/version.js.map +1 -0
- package/package.json +6 -6
- package/src/banner.ts +1 -1
- package/src/cmd/build/index.ts +18 -22
- package/src/cmd/build/plugin.ts +95 -64
- package/src/cmd/cloud/session/get.ts +20 -14
- package/src/cmd/cloud/session/list.ts +1 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { generateEnvGuard, generateGatewayEnvGuard } from './_util';
|
|
2
|
+
function registerLLMPatch(patches, module, filename, key, baseurl, name) {
|
|
3
|
+
patches.set(module, {
|
|
4
|
+
module,
|
|
5
|
+
filename,
|
|
6
|
+
body: {
|
|
7
|
+
before: generateEnvGuard(key, generateGatewayEnvGuard(key, 'process.env.AGENTUITY_SDK_KEY', baseurl, name)),
|
|
8
|
+
},
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
export function generatePatches() {
|
|
12
|
+
const patches = new Map();
|
|
13
|
+
registerLLMPatch(patches, '@anthropic-ai', 'index', 'ANTHROPIC_API_KEY', 'ANTHROPIC_BASE_URL', 'anthropic');
|
|
14
|
+
registerLLMPatch(patches, 'groq-sdk', 'index', 'GROQ_API_KEY', 'GROQ_BASE_URL', 'groq');
|
|
15
|
+
registerLLMPatch(patches, 'openai', 'index', 'OPENAI_API_KEY', 'OPENAI_BASE_URL', 'openai');
|
|
16
|
+
return patches;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=llm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm.js","sourceRoot":"","sources":["../../../../src/cmd/build/patch/llm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAEtF,SAAS,gBAAgB,CACxB,OAAiC,EACjC,MAAc,EACd,QAAgB,EAChB,GAAW,EACX,OAAe,EACf,IAAY;IAEZ,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;QACnB,MAAM;QACN,QAAQ;QACR,IAAI,EAAE;YACL,MAAM,EAAE,gBAAgB,CACvB,GAAG,EACH,uBAAuB,CAAC,GAAG,EAAE,+BAA+B,EAAE,OAAO,EAAE,IAAI,CAAC,CAC5E;SACD;KACD,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe;IAC9B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC/C,gBAAgB,CACf,OAAO,EACP,eAAe,EACf,OAAO,EACP,mBAAmB,EACnB,oBAAoB,EACpB,WAAW,CACX,CAAC;IACF,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;IACxF,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IAC5F,OAAO,OAAO,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/cmd/build/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAGrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/cmd/build/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAGrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAmRvD,wBAAgB,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC,CAEzD;AAED,QAAA,MAAM,gBAAgB,EAAE,SA6avB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,581 @@
|
|
|
1
|
+
import { dirname, basename, join, resolve } from 'node:path';
|
|
2
|
+
import { existsSync, writeFileSync, mkdirSync, unlinkSync } from 'node:fs';
|
|
3
|
+
import { parseAgentMetadata, parseRoute, parseEvalMetadata } from './ast';
|
|
4
|
+
import { applyPatch, generatePatches } from './patch';
|
|
5
|
+
import { detectSubagent } from '../../utils/detectSubagent';
|
|
6
|
+
import { createLogger } from '@agentuity/server';
|
|
7
|
+
function toCamelCase(str) {
|
|
8
|
+
return str
|
|
9
|
+
.replace(/[-_\s]+(.)?/g, (_, char) => (char ? char.toUpperCase() : ''))
|
|
10
|
+
.replace(/^(.)/, (char) => char.toLowerCase());
|
|
11
|
+
}
|
|
12
|
+
function toPascalCase(str) {
|
|
13
|
+
const camel = toCamelCase(str);
|
|
14
|
+
return camel.charAt(0).toUpperCase() + camel.slice(1);
|
|
15
|
+
}
|
|
16
|
+
function generateAgentRegistry(srcDir, agentInfo) {
|
|
17
|
+
// Separate parent agents and subagents
|
|
18
|
+
const parentAgents = agentInfo.filter((a) => !a.parent);
|
|
19
|
+
const subagents = agentInfo.filter((a) => a.parent);
|
|
20
|
+
// Group subagents by parent
|
|
21
|
+
const subagentsByParent = new Map();
|
|
22
|
+
for (const subagent of subagents) {
|
|
23
|
+
const parentName = subagent.parent;
|
|
24
|
+
if (!subagentsByParent.has(parentName)) {
|
|
25
|
+
subagentsByParent.set(parentName, []);
|
|
26
|
+
}
|
|
27
|
+
subagentsByParent.get(parentName).push(subagent);
|
|
28
|
+
}
|
|
29
|
+
// Detect naming collisions in generated identifiers
|
|
30
|
+
// Naming strategy: parent + child names are combined as `${parent}_${name}` then converted to camelCase
|
|
31
|
+
// Example: parent="user", child="profile" → "user_profile" → "userProfile"
|
|
32
|
+
// Potential collision: parent="user_profile", child="info" and parent="user", child="profile_info" both → "userProfileInfo"
|
|
33
|
+
const generatedNames = new Set();
|
|
34
|
+
const collisions = [];
|
|
35
|
+
for (const agent of agentInfo) {
|
|
36
|
+
const fullName = agent.parent ? `${agent.parent}_${agent.name}` : agent.name;
|
|
37
|
+
const camelName = toCamelCase(fullName);
|
|
38
|
+
if (generatedNames.has(camelName)) {
|
|
39
|
+
collisions.push(`Identifier collision detected: "${camelName}" (from "${fullName}")`);
|
|
40
|
+
}
|
|
41
|
+
generatedNames.add(camelName);
|
|
42
|
+
}
|
|
43
|
+
if (collisions.length > 0) {
|
|
44
|
+
throw new Error(`Agent identifier naming collisions detected:\n${collisions.join('\n')}\n\n` +
|
|
45
|
+
`This occurs when different agent names produce the same camelCase identifier.\n` +
|
|
46
|
+
`Please rename your agents to avoid this collision.`);
|
|
47
|
+
}
|
|
48
|
+
// Generate imports for all agents
|
|
49
|
+
const imports = agentInfo
|
|
50
|
+
.map(({ name, path, parent }) => {
|
|
51
|
+
const fullName = parent ? `${parent}.${name}` : name;
|
|
52
|
+
const camelName = toCamelCase(fullName.replace('.', '_'));
|
|
53
|
+
const relativePath = path.replace(/^\.\/agents\//, './');
|
|
54
|
+
return `import ${camelName}Agent from '${relativePath}';`;
|
|
55
|
+
})
|
|
56
|
+
.join('\n');
|
|
57
|
+
// Evals are now imported in plugin.ts when agents are registered
|
|
58
|
+
// No need to import them in registry.generated.ts
|
|
59
|
+
const evalsImportsStr = '';
|
|
60
|
+
// Validate that child property names don't collide with parent agent properties
|
|
61
|
+
const reservedAgentProperties = ['metadata', 'run', 'inputSchema', 'outputSchema', 'stream'];
|
|
62
|
+
for (const parentAgent of parentAgents) {
|
|
63
|
+
const children = subagentsByParent.get(parentAgent.name) || [];
|
|
64
|
+
for (const child of children) {
|
|
65
|
+
const childPropertyName = toCamelCase(child.name);
|
|
66
|
+
// Check for collision with reserved agent properties
|
|
67
|
+
if (reservedAgentProperties.includes(childPropertyName)) {
|
|
68
|
+
throw new Error(`Subagent property name collision detected: "${childPropertyName}" in parent "${parentAgent.name}"\n` +
|
|
69
|
+
`The child name "${child.name}" conflicts with a reserved agent property (${reservedAgentProperties.join(', ')}).\n` +
|
|
70
|
+
`Please rename the subagent to avoid this collision.`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Generate nested registry structure
|
|
75
|
+
const registryLines = [];
|
|
76
|
+
for (const parentAgent of parentAgents) {
|
|
77
|
+
const parentCamelName = toCamelCase(parentAgent.name);
|
|
78
|
+
const children = subagentsByParent.get(parentAgent.name) || [];
|
|
79
|
+
if (children.length === 0) {
|
|
80
|
+
// No subagents, simple assignment
|
|
81
|
+
registryLines.push(` ${parentCamelName}: ${parentCamelName}Agent,`);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
// Has subagents, create nested structure using object spread (no mutation)
|
|
85
|
+
registryLines.push(` ${parentCamelName}: {`);
|
|
86
|
+
registryLines.push(` ...${parentCamelName}Agent,`);
|
|
87
|
+
for (const child of children) {
|
|
88
|
+
const childCamelName = toCamelCase(`${parentAgent.name}_${child.name}`);
|
|
89
|
+
registryLines.push(` ${toCamelCase(child.name)}: ${childCamelName}Agent,`);
|
|
90
|
+
}
|
|
91
|
+
registryLines.push(` },`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const registry = registryLines.join('\n');
|
|
95
|
+
// Generate type exports for all agents
|
|
96
|
+
const typeExports = agentInfo
|
|
97
|
+
.map(({ name, parent }) => {
|
|
98
|
+
const fullName = parent ? `${parent}_${name}` : name;
|
|
99
|
+
const camelName = toCamelCase(fullName);
|
|
100
|
+
const pascalName = toPascalCase(fullName);
|
|
101
|
+
return `export type ${pascalName}AgentRunner = AgentRunner<typeof ${camelName}Agent['inputSchema'], typeof ${camelName}Agent['outputSchema'], typeof ${camelName}Agent['stream'] extends true ? true : false>;`;
|
|
102
|
+
})
|
|
103
|
+
.join('\n');
|
|
104
|
+
// Generate nested agent type definitions for Hono Context augmentation
|
|
105
|
+
const honoAgentTypeLines = [];
|
|
106
|
+
for (const parentAgent of parentAgents) {
|
|
107
|
+
const parentCamelName = toCamelCase(parentAgent.name);
|
|
108
|
+
const children = subagentsByParent.get(parentAgent.name) || [];
|
|
109
|
+
if (children.length === 0) {
|
|
110
|
+
// No subagents
|
|
111
|
+
honoAgentTypeLines.push(` ${parentCamelName}: AgentRunner<LocalAgentRegistry['${parentCamelName}']['inputSchema'], LocalAgentRegistry['${parentCamelName}']['outputSchema'], LocalAgentRegistry['${parentCamelName}']['stream'] extends true ? true : false>;`);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
// Has subagents - create intersection type
|
|
115
|
+
honoAgentTypeLines.push(` ${parentCamelName}: AgentRunner<LocalAgentRegistry['${parentCamelName}']['inputSchema'], LocalAgentRegistry['${parentCamelName}']['outputSchema'], LocalAgentRegistry['${parentCamelName}']['stream'] extends true ? true : false> & {`);
|
|
116
|
+
for (const child of children) {
|
|
117
|
+
const childCamelName = toCamelCase(child.name);
|
|
118
|
+
const fullChildName = toCamelCase(`${parentAgent.name}_${child.name}`);
|
|
119
|
+
honoAgentTypeLines.push(` ${childCamelName}: AgentRunner<typeof ${fullChildName}Agent['inputSchema'], typeof ${fullChildName}Agent['outputSchema'], typeof ${fullChildName}Agent['stream'] extends true ? true : false>;`);
|
|
120
|
+
}
|
|
121
|
+
honoAgentTypeLines.push(` };`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const honoAgentTypes = honoAgentTypeLines.join('\n');
|
|
125
|
+
// Generate agent type definitions for AgentRegistry interface augmentation
|
|
126
|
+
const runtimeAgentTypeLines = [];
|
|
127
|
+
for (const parentAgent of parentAgents) {
|
|
128
|
+
const parentCamelName = toCamelCase(parentAgent.name);
|
|
129
|
+
const children = subagentsByParent.get(parentAgent.name) || [];
|
|
130
|
+
if (children.length === 0) {
|
|
131
|
+
// No subagents - use typeof the imported agent
|
|
132
|
+
runtimeAgentTypeLines.push(` ${parentCamelName}: AgentRunner<typeof ${parentCamelName}Agent['inputSchema'], typeof ${parentCamelName}Agent['outputSchema'], typeof ${parentCamelName}Agent['stream'] extends true ? true : false>;`);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
// Has subagents - create intersection type using typeof
|
|
136
|
+
runtimeAgentTypeLines.push(` ${parentCamelName}: AgentRunner<typeof ${parentCamelName}Agent['inputSchema'], typeof ${parentCamelName}Agent['outputSchema'], typeof ${parentCamelName}Agent['stream'] extends true ? true : false> & {`);
|
|
137
|
+
for (const child of children) {
|
|
138
|
+
const childCamelName = toCamelCase(child.name);
|
|
139
|
+
const fullChildName = toCamelCase(`${parentAgent.name}_${child.name}`);
|
|
140
|
+
runtimeAgentTypeLines.push(` ${childCamelName}: AgentRunner<typeof ${fullChildName}Agent['inputSchema'], typeof ${fullChildName}Agent['outputSchema'], typeof ${fullChildName}Agent['stream'] extends true ? true : false>;`);
|
|
141
|
+
}
|
|
142
|
+
runtimeAgentTypeLines.push(` };`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const runtimeAgentTypes = runtimeAgentTypeLines.join('\n');
|
|
146
|
+
// Generate React client types with nested structure
|
|
147
|
+
const clientAgentTypeLines = [];
|
|
148
|
+
for (const parentAgent of parentAgents) {
|
|
149
|
+
const parentCamelName = toCamelCase(parentAgent.name);
|
|
150
|
+
const children = subagentsByParent.get(parentAgent.name) || [];
|
|
151
|
+
if (children.length === 0) {
|
|
152
|
+
// No subagents
|
|
153
|
+
clientAgentTypeLines.push(` '${parentAgent.name}': Agent<typeof ${parentCamelName}Agent['inputSchema'], typeof ${parentCamelName}Agent['outputSchema']>;`);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
// Has subagents - create nested type with subagent access via dot notation
|
|
157
|
+
clientAgentTypeLines.push(` '${parentAgent.name}': Agent<typeof ${parentCamelName}Agent['inputSchema'], typeof ${parentCamelName}Agent['outputSchema']>;`);
|
|
158
|
+
for (const child of children) {
|
|
159
|
+
const fullChildName = toCamelCase(`${parentAgent.name}_${child.name}`);
|
|
160
|
+
clientAgentTypeLines.push(` '${parentAgent.name}.${child.name}': Agent<typeof ${fullChildName}Agent['inputSchema'], typeof ${fullChildName}Agent['outputSchema']>;`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
const reactAgentTypes = clientAgentTypeLines.join('\n');
|
|
165
|
+
const generatedContent = `/// <reference types="hono" />
|
|
166
|
+
// Auto-generated by Agentuity - do not edit manually
|
|
167
|
+
${imports}${evalsImportsStr}
|
|
168
|
+
import type { AgentRunner, Logger } from '@agentuity/runtime';
|
|
169
|
+
import type { KeyValueStorage, ObjectStorage, StreamStorage, VectorStorage } from '@agentuity/core';
|
|
170
|
+
import type { Agent } from '@agentuity/react';
|
|
171
|
+
|
|
172
|
+
export const agentRegistry = {
|
|
173
|
+
${registry}
|
|
174
|
+
} as const;
|
|
175
|
+
|
|
176
|
+
// Local type aliases for Hono augmentation
|
|
177
|
+
type LocalAgentName = keyof typeof agentRegistry;
|
|
178
|
+
type LocalAgentRegistry = typeof agentRegistry;
|
|
179
|
+
|
|
180
|
+
// Typed runners for each agent
|
|
181
|
+
${typeExports}
|
|
182
|
+
|
|
183
|
+
// Augment @agentuity/runtime types with strongly-typed agents from this project
|
|
184
|
+
declare module "@agentuity/runtime" {
|
|
185
|
+
// Augment the AgentRegistry interface with project-specific strongly-typed agents
|
|
186
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
|
187
|
+
export interface AgentRegistry {
|
|
188
|
+
${runtimeAgentTypes}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Augment Hono Context to provide strongly-typed agents and runtime services
|
|
193
|
+
// Note: Properties are added to Context via middleware in @agentuity/runtime
|
|
194
|
+
declare module "hono" {
|
|
195
|
+
interface Context {
|
|
196
|
+
agentName: LocalAgentName;
|
|
197
|
+
agent: {
|
|
198
|
+
${honoAgentTypes}
|
|
199
|
+
};
|
|
200
|
+
waitUntil: (promise: Promise<void> | (() => void | Promise<void>)) => void;
|
|
201
|
+
logger: Logger;
|
|
202
|
+
kv: KeyValueStorage;
|
|
203
|
+
objectstore: ObjectStorage;
|
|
204
|
+
stream: StreamStorage;
|
|
205
|
+
vector: VectorStorage;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// Augment @agentuity/react types with strongly-typed agents from this project
|
|
210
|
+
declare module '@agentuity/react' {
|
|
211
|
+
interface AgentRegistry {
|
|
212
|
+
${reactAgentTypes}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
`;
|
|
216
|
+
const agentsDir = join(srcDir, 'agents');
|
|
217
|
+
const registryPath = join(agentsDir, 'registry.generated.ts');
|
|
218
|
+
const legacyTypesPath = join(agentsDir, 'types.generated.d.ts');
|
|
219
|
+
// Ensure agents directory exists
|
|
220
|
+
if (!existsSync(agentsDir)) {
|
|
221
|
+
mkdirSync(agentsDir, { recursive: true });
|
|
222
|
+
}
|
|
223
|
+
writeFileSync(registryPath, generatedContent, 'utf-8');
|
|
224
|
+
// Remove legacy types.generated.d.ts if it exists (now consolidated into registry.generated.ts)
|
|
225
|
+
if (existsSync(legacyTypesPath)) {
|
|
226
|
+
unlinkSync(legacyTypesPath);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
let metadata;
|
|
230
|
+
export function getBuildMetadata() {
|
|
231
|
+
return metadata;
|
|
232
|
+
}
|
|
233
|
+
const AgentuityBundler = {
|
|
234
|
+
name: 'Agentuity Bundler',
|
|
235
|
+
setup(build) {
|
|
236
|
+
const rootDir = resolve(build.config.root ?? '.');
|
|
237
|
+
const srcDir = join(rootDir, 'src');
|
|
238
|
+
const projectId = build.config.define?.['process.env.AGENTUITY_CLOUD_PROJECT_ID']
|
|
239
|
+
? JSON.parse(build.config.define['process.env.AGENTUITY_CLOUD_PROJECT_ID'])
|
|
240
|
+
: '';
|
|
241
|
+
const deploymentId = build.config.define?.['process.env.AGENTUITY_CLOUD_DEPLOYMENT_ID']
|
|
242
|
+
? JSON.parse(build.config.define['process.env.AGENTUITY_CLOUD_DEPLOYMENT_ID'])
|
|
243
|
+
: '';
|
|
244
|
+
const routes = new Set();
|
|
245
|
+
const agentInfo = [];
|
|
246
|
+
const agentMetadata = new Map();
|
|
247
|
+
const transpiler = new Bun.Transpiler({ loader: 'ts', target: 'bun' });
|
|
248
|
+
let routeDefinitions = [];
|
|
249
|
+
build.onResolve({ filter: /\/route\.ts$/, namespace: 'file' }, async (args) => {
|
|
250
|
+
if (args.path.startsWith(srcDir)) {
|
|
251
|
+
const importPath = args.path
|
|
252
|
+
.replace(rootDir, '')
|
|
253
|
+
.replace('.ts', '')
|
|
254
|
+
.replace('/src/', './');
|
|
255
|
+
routes.add(importPath);
|
|
256
|
+
}
|
|
257
|
+
return args;
|
|
258
|
+
});
|
|
259
|
+
build.onLoad({ filter: /\/route\.ts$/, namespace: 'file' }, async (args) => {
|
|
260
|
+
if (args.path.startsWith(srcDir)) {
|
|
261
|
+
const importPath = args.path
|
|
262
|
+
.replace(rootDir, '')
|
|
263
|
+
.replace('.ts', '')
|
|
264
|
+
.replace('/src/', './');
|
|
265
|
+
routes.add(importPath);
|
|
266
|
+
}
|
|
267
|
+
// return undefined to let Bun handle loading normally
|
|
268
|
+
return;
|
|
269
|
+
});
|
|
270
|
+
build.onLoad({ filter: /\/agent\.ts$/, namespace: 'file' }, async (args) => {
|
|
271
|
+
let newsource = await Bun.file(args.path).text();
|
|
272
|
+
if (args.path.startsWith(srcDir)) {
|
|
273
|
+
const contents = transpiler.transformSync(newsource);
|
|
274
|
+
const [ns, md] = await parseAgentMetadata(rootDir, args.path, contents, projectId, deploymentId);
|
|
275
|
+
newsource = ns;
|
|
276
|
+
// Detect if this is a subagent by checking path structure
|
|
277
|
+
// Note: Path structure assumption - 4 segments: agents/parent/child/agent.ts
|
|
278
|
+
const { isSubagent, parentName } = detectSubagent(args.path, srcDir);
|
|
279
|
+
if (isSubagent && parentName) {
|
|
280
|
+
md.set('parent', parentName);
|
|
281
|
+
}
|
|
282
|
+
const newAgentName = md.get('name');
|
|
283
|
+
for (const [, kv] of agentMetadata) {
|
|
284
|
+
const found = kv.get('name');
|
|
285
|
+
if (newAgentName === found) {
|
|
286
|
+
throw new Error(`The agent in ${kv.get('filename')} and the agent in ${md.get('filename')} have the same name (${found}). Agent Names must be unique within a project.`);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
agentMetadata.set(md.get('identifier'), md);
|
|
290
|
+
}
|
|
291
|
+
return {
|
|
292
|
+
contents: newsource,
|
|
293
|
+
loader: 'ts',
|
|
294
|
+
};
|
|
295
|
+
});
|
|
296
|
+
build.onLoad({ filter: /\/eval\.ts$/, namespace: 'file' }, async (args) => {
|
|
297
|
+
let newsource = await Bun.file(args.path).text();
|
|
298
|
+
if (args.path.startsWith(srcDir)) {
|
|
299
|
+
const contents = transpiler.transformSync(newsource);
|
|
300
|
+
const [ns] = parseEvalMetadata(rootDir, args.path, contents, projectId, deploymentId);
|
|
301
|
+
newsource = ns;
|
|
302
|
+
}
|
|
303
|
+
return {
|
|
304
|
+
contents: newsource,
|
|
305
|
+
loader: 'ts',
|
|
306
|
+
};
|
|
307
|
+
});
|
|
308
|
+
const patches = generatePatches();
|
|
309
|
+
for (const [, patch] of patches) {
|
|
310
|
+
let modulePath = join('node_modules', patch.module, '.*');
|
|
311
|
+
if (patch.filename) {
|
|
312
|
+
modulePath = join('node_modules', patch.module, patch.filename + '.*');
|
|
313
|
+
}
|
|
314
|
+
build.onLoad({
|
|
315
|
+
filter: new RegExp(modulePath),
|
|
316
|
+
namespace: 'file',
|
|
317
|
+
}, async (args) => {
|
|
318
|
+
if (build.config.target !== 'bun') {
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
const [contents, loader] = await applyPatch(args.path, patch);
|
|
322
|
+
return {
|
|
323
|
+
contents,
|
|
324
|
+
loader,
|
|
325
|
+
};
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
build.onLoad({
|
|
329
|
+
filter: new RegExp(join(rootDir, 'app.ts')),
|
|
330
|
+
namespace: 'file',
|
|
331
|
+
}, async (args) => {
|
|
332
|
+
const logger = createLogger(process.env.AGENTUITY_LOG_LEVEL || 'info');
|
|
333
|
+
if (build.config.target !== 'bun') {
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
await args.defer();
|
|
337
|
+
const inserts = [];
|
|
338
|
+
const routeMapping = {};
|
|
339
|
+
for (const route of routes) {
|
|
340
|
+
const name = basename(dirname(route));
|
|
341
|
+
const agent = route.replace(/\/route$/, '/agent');
|
|
342
|
+
const hasAgent = existsSync(join(srcDir, agent + '.ts'));
|
|
343
|
+
// Detect if this is a subagent route using shared utility
|
|
344
|
+
const { isSubagent, parentName } = detectSubagent(route);
|
|
345
|
+
const agentPath = route
|
|
346
|
+
.replace(/\/route$/, '/*')
|
|
347
|
+
.replace('/agents', '/agent')
|
|
348
|
+
.replace('./', '/');
|
|
349
|
+
const routePath = route
|
|
350
|
+
.replace(/\/route$/, '')
|
|
351
|
+
.replace('/apis/', '/api/')
|
|
352
|
+
.replace('/apis', '/api')
|
|
353
|
+
.replace('/agents', '/agent')
|
|
354
|
+
.replace('/agents', '/agent')
|
|
355
|
+
.replace('./', '/');
|
|
356
|
+
const definitions = await parseRoute(rootDir, join(srcDir, `${route}.ts`), projectId, deploymentId);
|
|
357
|
+
routeDefinitions = [...routeDefinitions, ...definitions];
|
|
358
|
+
let agentDetail = {};
|
|
359
|
+
if (hasAgent) {
|
|
360
|
+
const md = agentMetadata.get(name);
|
|
361
|
+
if (!md) {
|
|
362
|
+
throw new Error(`Couldn't find agent metadata for ${route}`);
|
|
363
|
+
}
|
|
364
|
+
agentDetail = {
|
|
365
|
+
name,
|
|
366
|
+
path: `.${agent}`,
|
|
367
|
+
filename: md.get('filename'),
|
|
368
|
+
identifier: md.get('identifier'),
|
|
369
|
+
description: md.get('description') ?? '',
|
|
370
|
+
agentId: md.get('agentId'),
|
|
371
|
+
};
|
|
372
|
+
if (isSubagent && parentName) {
|
|
373
|
+
agentDetail.parent = parentName;
|
|
374
|
+
}
|
|
375
|
+
agentInfo.push(agentDetail);
|
|
376
|
+
}
|
|
377
|
+
let buffer = `await (async() => {
|
|
378
|
+
const { createAgentMiddleware, getRouter, registerAgent } = await import('@agentuity/runtime');
|
|
379
|
+
const router = getRouter()!;
|
|
380
|
+
const route = require('./src/${route}').default;`;
|
|
381
|
+
if (hasAgent) {
|
|
382
|
+
const agentRegistrationName = isSubagent && parentName ? `${parentName}.${name}` : name;
|
|
383
|
+
// Build evals path from agent path (e.g., 'agents/eval/agent' -> 'agents/eval/eval.ts')
|
|
384
|
+
const agentDirPath = agent.replace(/\/agent$/, '');
|
|
385
|
+
const evalsPath = join(srcDir, agentDirPath, 'eval.ts');
|
|
386
|
+
const evalsImport = existsSync(evalsPath)
|
|
387
|
+
? `\n require('./src/${agentDirPath}/eval');`
|
|
388
|
+
: '';
|
|
389
|
+
buffer += `
|
|
390
|
+
const agent = require('./src/${agent}').default;
|
|
391
|
+
router.all("${agentPath}", createAgentMiddleware('${agentRegistrationName}'));
|
|
392
|
+
registerAgent("${agentRegistrationName}", agent);${evalsImport}`;
|
|
393
|
+
}
|
|
394
|
+
buffer += `
|
|
395
|
+
router.route("${routePath}", route);
|
|
396
|
+
})();`;
|
|
397
|
+
inserts.push(buffer);
|
|
398
|
+
for (const def of definitions) {
|
|
399
|
+
routeMapping[`${def.method} ${def.path}`] = def.id;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
const indexFile = join(srcDir, 'web', 'index.html');
|
|
403
|
+
if (existsSync(indexFile)) {
|
|
404
|
+
inserts.unshift(`await (async () => {
|
|
405
|
+
const { serveStatic } = require('hono/bun');
|
|
406
|
+
const { getRouter } = await import('@agentuity/runtime');
|
|
407
|
+
const router = getRouter()!;
|
|
408
|
+
const index = await Bun.file(import.meta.dir + '/web/index.html').text();
|
|
409
|
+
const webstatic = serveStatic({ root: import.meta.dir + '/web' });
|
|
410
|
+
router.get('/', (c) => c.html(index));
|
|
411
|
+
router.get('/web/chunk/*', webstatic);
|
|
412
|
+
router.get('/web/asset/*', webstatic);
|
|
413
|
+
router.get('/public/*', webstatic);
|
|
414
|
+
})();`);
|
|
415
|
+
}
|
|
416
|
+
// Only generate registry if there are agents
|
|
417
|
+
// Note: We don't import the registry here because:
|
|
418
|
+
// 1. Evals are already imported when agents are registered (see line 421-422)
|
|
419
|
+
// 2. The registry is for type definitions only, not runtime execution
|
|
420
|
+
// 3. Importing it causes bundler resolution issues since it's generated during build
|
|
421
|
+
if (agentInfo.length > 0) {
|
|
422
|
+
generateAgentRegistry(srcDir, agentInfo);
|
|
423
|
+
}
|
|
424
|
+
// create the workbench routes
|
|
425
|
+
inserts.push(`await (async() => {
|
|
426
|
+
const { createWorkbenchMetadataRoute, getRouter } = await import('@agentuity/runtime');
|
|
427
|
+
const router = getRouter()!;
|
|
428
|
+
router.get('/_agentuity/workbench/metadata.json', createWorkbenchMetadataRoute());
|
|
429
|
+
})();`);
|
|
430
|
+
const file = Bun.file(args.path);
|
|
431
|
+
let contents = await file.text();
|
|
432
|
+
let inserted = false;
|
|
433
|
+
let index = contents.indexOf(' createApp(');
|
|
434
|
+
if (index < 0) {
|
|
435
|
+
index = contents.indexOf(' createApp (');
|
|
436
|
+
}
|
|
437
|
+
if (index < 0) {
|
|
438
|
+
throw new Error(`couldn't find the required createApp function in ${args.path}`);
|
|
439
|
+
}
|
|
440
|
+
const endSemi = contents.indexOf(');', index);
|
|
441
|
+
if (endSemi > 0) {
|
|
442
|
+
contents =
|
|
443
|
+
contents.slice(0, endSemi + 2) +
|
|
444
|
+
'\n\n' +
|
|
445
|
+
inserts.join('\n') +
|
|
446
|
+
contents.slice(endSemi + 2);
|
|
447
|
+
inserted = true;
|
|
448
|
+
}
|
|
449
|
+
if (!inserted) {
|
|
450
|
+
contents += `\n${inserts.join('\n')}`;
|
|
451
|
+
}
|
|
452
|
+
// generate the build metadata
|
|
453
|
+
metadata = {
|
|
454
|
+
routes: routeDefinitions,
|
|
455
|
+
agents: [],
|
|
456
|
+
};
|
|
457
|
+
// Group agents by parent/child relationship
|
|
458
|
+
const parentAgentMetadata = new Map();
|
|
459
|
+
const subagentsByParent = new Map();
|
|
460
|
+
for (const [, v] of agentMetadata) {
|
|
461
|
+
if (!v.has('filename')) {
|
|
462
|
+
throw new Error('agent metadata is missing expected filename property');
|
|
463
|
+
}
|
|
464
|
+
if (!v.has('id')) {
|
|
465
|
+
throw new Error('agent metadata is missing expected id property');
|
|
466
|
+
}
|
|
467
|
+
if (!v.has('identifier')) {
|
|
468
|
+
throw new Error('agent metadata is missing expected identifier property');
|
|
469
|
+
}
|
|
470
|
+
if (!v.has('version')) {
|
|
471
|
+
throw new Error('agent metadata is missing expected version property');
|
|
472
|
+
}
|
|
473
|
+
if (!v.has('name')) {
|
|
474
|
+
throw new Error('agent metadata is missing expected name property');
|
|
475
|
+
}
|
|
476
|
+
const parentName = v.get('parent');
|
|
477
|
+
if (parentName) {
|
|
478
|
+
// This is a subagent
|
|
479
|
+
if (!subagentsByParent.has(parentName)) {
|
|
480
|
+
subagentsByParent.set(parentName, []);
|
|
481
|
+
}
|
|
482
|
+
subagentsByParent.get(parentName).push(v);
|
|
483
|
+
}
|
|
484
|
+
else {
|
|
485
|
+
// This is a parent or standalone agent
|
|
486
|
+
parentAgentMetadata.set(v.get('identifier'), v);
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
// Validate that all subagents reference existing parent agents
|
|
490
|
+
for (const [parentName, subagents] of subagentsByParent) {
|
|
491
|
+
const parentExists = Array.from(parentAgentMetadata.values()).some((meta) => meta.get('name') === parentName || meta.get('identifier') === parentName);
|
|
492
|
+
if (!parentExists) {
|
|
493
|
+
const subagentPaths = subagents.map((s) => s.get('filename')).join(', ');
|
|
494
|
+
throw new Error(`Subagent(s) [${subagentPaths}] reference parent "${parentName}" which does not exist. ` +
|
|
495
|
+
`Ensure the parent agent is defined.`);
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
// Build metadata with nested subagents
|
|
499
|
+
for (const [_identifier, v] of parentAgentMetadata) {
|
|
500
|
+
const agentData = {
|
|
501
|
+
filename: v.get('filename'),
|
|
502
|
+
id: v.get('id'),
|
|
503
|
+
identifier: v.get('identifier'),
|
|
504
|
+
agentId: v.get('agentId'),
|
|
505
|
+
version: v.get('version'),
|
|
506
|
+
name: v.get('name'),
|
|
507
|
+
description: v.get('description') ?? '<no description provided>',
|
|
508
|
+
projectId,
|
|
509
|
+
};
|
|
510
|
+
const evalsStr = v.get('evals');
|
|
511
|
+
if (evalsStr) {
|
|
512
|
+
logger.trace(`[plugin] Found evals string for agent ${agentData.name}, parsing...`);
|
|
513
|
+
try {
|
|
514
|
+
const parsedEvals = JSON.parse(evalsStr);
|
|
515
|
+
agentData.evals = parsedEvals.map((evalItem) => ({
|
|
516
|
+
...evalItem,
|
|
517
|
+
agentIdentifier: agentData.agentId,
|
|
518
|
+
projectId,
|
|
519
|
+
}));
|
|
520
|
+
logger.trace(`[plugin] Successfully parsed ${agentData.evals?.length ?? 0} eval(s) for agent ${agentData.name}`);
|
|
521
|
+
}
|
|
522
|
+
catch (e) {
|
|
523
|
+
logger.trace(`[plugin] Failed to parse evals for agent ${agentData.name}: ${e}`);
|
|
524
|
+
console.warn(`Failed to parse evals for agent ${agentData.name}: ${e}`);
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
else {
|
|
528
|
+
logger.trace(`[plugin] No evals found for agent ${agentData.name}`);
|
|
529
|
+
}
|
|
530
|
+
// Add subagents if any (check both name and identifier)
|
|
531
|
+
const subagents = subagentsByParent.get(agentData.name) ||
|
|
532
|
+
subagentsByParent.get(agentData.identifier);
|
|
533
|
+
if (subagents && subagents.length > 0) {
|
|
534
|
+
agentData.subagents = subagents.map((sub) => {
|
|
535
|
+
const subagentData = {
|
|
536
|
+
filename: sub.get('filename'),
|
|
537
|
+
id: sub.get('id'),
|
|
538
|
+
identifier: sub.get('identifier'),
|
|
539
|
+
agentId: sub.get('agentId'),
|
|
540
|
+
version: sub.get('version'),
|
|
541
|
+
name: sub.get('name'),
|
|
542
|
+
description: sub.get('description') ?? '<no description provided>',
|
|
543
|
+
projectId,
|
|
544
|
+
};
|
|
545
|
+
// Add evals for subagents if any
|
|
546
|
+
const subEvalsStr = sub.get('evals');
|
|
547
|
+
if (subEvalsStr) {
|
|
548
|
+
logger.trace(`[plugin] Found evals string for subagent ${subagentData.name}, parsing...`);
|
|
549
|
+
try {
|
|
550
|
+
const parsedSubEvals = JSON.parse(subEvalsStr);
|
|
551
|
+
subagentData.evals = parsedSubEvals.map((evalItem) => ({
|
|
552
|
+
...evalItem,
|
|
553
|
+
agentIdentifier: subagentData.agentId,
|
|
554
|
+
projectId,
|
|
555
|
+
}));
|
|
556
|
+
logger.trace(`[plugin] Successfully parsed ${subagentData.evals?.length ?? 0} eval(s) for subagent ${subagentData.name}`);
|
|
557
|
+
}
|
|
558
|
+
catch (e) {
|
|
559
|
+
logger.trace(`[plugin] Failed to parse evals for subagent ${subagentData.name}: ${e}`);
|
|
560
|
+
console.warn(`Failed to parse evals for subagent ${subagentData.name}: ${e}`);
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
else {
|
|
564
|
+
logger.trace(`[plugin] No evals found for subagent ${subagentData.name}`);
|
|
565
|
+
}
|
|
566
|
+
return subagentData;
|
|
567
|
+
});
|
|
568
|
+
}
|
|
569
|
+
metadata.agents.push(agentData);
|
|
570
|
+
}
|
|
571
|
+
const routeMappingJSFile = Bun.file(join(build.config.outdir, '.routemapping.json'));
|
|
572
|
+
await routeMappingJSFile.write(JSON.stringify(routeMapping));
|
|
573
|
+
return {
|
|
574
|
+
contents,
|
|
575
|
+
loader: 'ts',
|
|
576
|
+
};
|
|
577
|
+
});
|
|
578
|
+
},
|
|
579
|
+
};
|
|
580
|
+
export default AgentuityBundler;
|
|
581
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/cmd/build/plugin.ts"],"names":[],"mappings":"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"}
|