experimental-agent 0.7.1 → 0.8.0-alpha.2

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.
@@ -0,0 +1,107 @@
1
+ import {
2
+ agent
3
+ } from "./chunk-EH4L2CPW.mjs";
4
+ import "./chunk-C4VSUEY2.mjs";
5
+ import "./chunk-CS2SEUAA.mjs";
6
+ import "./chunk-MSWINCCM.mjs";
7
+ import "./chunk-BJTO5JO5.mjs";
8
+
9
+ // src/framework-runtime/merge-options.ts
10
+ function mergeFrameworkOptions(base, overlay) {
11
+ const merged = { ...base };
12
+ if (overlay.system !== void 0) {
13
+ if (base.system === void 0) {
14
+ merged.system = overlay.system;
15
+ } else if (typeof base.system === "function") {
16
+ const baseFn = base.system;
17
+ merged.system = async (args) => {
18
+ const resolved = await baseFn(args);
19
+ if (resolved === void 0) {
20
+ return overlay.system;
21
+ }
22
+ const baseArr = Array.isArray(resolved) ? resolved : [resolved];
23
+ return [...baseArr, overlay.system];
24
+ };
25
+ } else {
26
+ const baseArr = Array.isArray(base.system) ? base.system : [base.system];
27
+ merged.system = [...baseArr, overlay.system];
28
+ }
29
+ }
30
+ if (overlay.skills !== void 0) {
31
+ if (base.skills === void 0) {
32
+ merged.skills = overlay.skills;
33
+ } else if (typeof base.skills === "function") {
34
+ const baseFn = base.skills;
35
+ merged.skills = async (args) => {
36
+ const resolved = await baseFn(args);
37
+ return [...resolved ?? [], ...overlay.skills];
38
+ };
39
+ } else {
40
+ merged.skills = [...base.skills, ...overlay.skills];
41
+ }
42
+ }
43
+ return merged;
44
+ }
45
+
46
+ // src/framework-runtime/resolve.ts
47
+ var resolvedAgentCache = /* @__PURE__ */ new Map();
48
+ async function resolveFrameworkAgent(opts) {
49
+ const { name, agents } = opts;
50
+ if (!Object.hasOwn(agents, name)) {
51
+ return null;
52
+ }
53
+ const entry = agents[name];
54
+ const cacheKey = name + JSON.stringify(entry.config);
55
+ const cached = resolvedAgentCache.get(cacheKey);
56
+ if (cached) {
57
+ return cached;
58
+ }
59
+ const instance = await resolveEntry({ name, entry });
60
+ resolvedAgentCache.set(cacheKey, instance);
61
+ return instance;
62
+ }
63
+ async function resolveEntry(opts) {
64
+ const { name, entry } = opts;
65
+ if (typeof entry.import === "function") {
66
+ const mod = await entry.import();
67
+ if (!mod.default) {
68
+ throw new Error(
69
+ `Agent "${name}" module does not have a default export.
70
+
71
+ hint: agents/${name}/agent.ts must export a default agent instance.
72
+
73
+ import { agent } from "experimental-agent";
74
+ export default agent("${name}", { ... });
75
+ `
76
+ );
77
+ }
78
+ const imported = mod.default;
79
+ if (hasConfig(entry.config)) {
80
+ return imported.extend(
81
+ (base) => mergeFrameworkOptions(base, entry.config)
82
+ );
83
+ }
84
+ return imported;
85
+ }
86
+ return agent(name, entry.config);
87
+ }
88
+ function hasConfig(config) {
89
+ return Object.keys(config).length > 0;
90
+ }
91
+
92
+ // src/framework-runtime/index.ts
93
+ var runtime = {
94
+ /**
95
+ * Look up an agent by name from a generated registry, merging any
96
+ * filesystem-scanned config (system prompts, skills) on top of the
97
+ * agent's own options. Results are cached for the lifetime of the
98
+ * process.
99
+ *
100
+ * Returns `null` when the name doesn't match any registry entry.
101
+ */
102
+ resolveAgent: resolveFrameworkAgent
103
+ };
104
+ export {
105
+ runtime
106
+ };
107
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2ZyYW1ld29yay1ydW50aW1lL21lcmdlLW9wdGlvbnMudHMiLCAiLi4vc3JjL2ZyYW1ld29yay1ydW50aW1lL3Jlc29sdmUudHMiLCAiLi4vc3JjL2ZyYW1ld29yay1ydW50aW1lL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgdHlwZSB7IEFnZW50T3B0aW9ucyB9IGZyb20gXCIuLi9hZ2VudC9jbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgRnNBZ2VudENvbmZpZyB9IGZyb20gXCIuLi9mcmFtZXdvcmstcnVudGltZS9yZXNvbHZlXCI7XG5cbi8qKlxuICogTWVyZ2UgZnMtc2Nhbm5lZCBjb25maWcgb24gdG9wIG9mIHRoZSBhZ2VudC50cyBiYXNlIGNvbmZpZy5cbiAqIFNraWxscyBhcmUgYXBwZW5kZWQuIFN5c3RlbSBwcm9tcHRzIGFyZSBjb25jYXRlbmF0ZWQgKGFycmF5cykuXG4gKiBUaGUgYmFzZSBvcHRpb25zIG1heSBjb250YWluIFJlc29sdmFibGUgdmFsdWVzIChmdW5jdGlvbnMpOyB3aGVuXG4gKiB0aGUgb3ZlcmxheSBoYXMgYSBzdGF0aWMgdmFsdWUgd2Ugd3JhcCB0aGUgYmFzZSByZXNvbHZhYmxlIHNvIHRoZVxuICogZnMgdmFsdWVzIGdldCBhcHBlbmRlZCBhdCByZXNvbHZlIHRpbWUuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRnJhbWV3b3JrT3B0aW9ucyhcbiAgYmFzZTogQWdlbnRPcHRpb25zLFxuICBvdmVybGF5OiBGc0FnZW50Q29uZmlnXG4pOiBBZ2VudE9wdGlvbnMge1xuICBjb25zdCBtZXJnZWQ6IEFnZW50T3B0aW9ucyA9IHsgLi4uYmFzZSB9O1xuXG4gIGlmIChvdmVybGF5LnN5c3RlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGJhc2Uuc3lzdGVtID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG1lcmdlZC5zeXN0ZW0gPSBvdmVybGF5LnN5c3RlbTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBiYXNlLnN5c3RlbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBjb25zdCBiYXNlRm4gPSBiYXNlLnN5c3RlbTtcbiAgICAgIG1lcmdlZC5zeXN0ZW0gPSBhc3luYyAoYXJncykgPT4ge1xuICAgICAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IGJhc2VGbihhcmdzKTtcbiAgICAgICAgaWYgKHJlc29sdmVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gb3ZlcmxheS5zeXN0ZW07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmFzZUFyciA9IEFycmF5LmlzQXJyYXkocmVzb2x2ZWQpID8gcmVzb2x2ZWQgOiBbcmVzb2x2ZWRdO1xuICAgICAgICByZXR1cm4gWy4uLmJhc2VBcnIsIG92ZXJsYXkuc3lzdGVtIV07XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBiYXNlQXJyID0gQXJyYXkuaXNBcnJheShiYXNlLnN5c3RlbSkgPyBiYXNlLnN5c3RlbSA6IFtiYXNlLnN5c3RlbV07XG4gICAgICBtZXJnZWQuc3lzdGVtID0gWy4uLmJhc2VBcnIsIG92ZXJsYXkuc3lzdGVtXTtcbiAgICB9XG4gIH1cblxuICBpZiAob3ZlcmxheS5za2lsbHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChiYXNlLnNraWxscyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBtZXJnZWQuc2tpbGxzID0gb3ZlcmxheS5za2lsbHM7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYmFzZS5za2lsbHMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgY29uc3QgYmFzZUZuID0gYmFzZS5za2lsbHM7XG4gICAgICBtZXJnZWQuc2tpbGxzID0gYXN5bmMgKGFyZ3MpID0+IHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCBiYXNlRm4oYXJncyk7XG4gICAgICAgIHJldHVybiBbLi4uKHJlc29sdmVkID8/IFtdKSwgLi4ub3ZlcmxheS5za2lsbHMhXTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIG1lcmdlZC5za2lsbHMgPSBbLi4uYmFzZS5za2lsbHMsIC4uLm92ZXJsYXkuc2tpbGxzXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkO1xufVxuIiwgImltcG9ydCB7IHR5cGUgQW55QWdlbnQsIGFnZW50IGFzIGNyZWF0ZUFnZW50IH0gZnJvbSBcIi4uL2FnZW50L2NsaWVudFwiO1xuaW1wb3J0IHR5cGUgeyBTa2lsbElucHV0IH0gZnJvbSBcIi4uL3NraWxscy90eXBlc1wiO1xuaW1wb3J0IHsgbWVyZ2VGcmFtZXdvcmtPcHRpb25zIH0gZnJvbSBcIi4vbWVyZ2Utb3B0aW9uc1wiO1xuXG4vKipcbiAqIFRoZSBzdWJzZXQgb2YgQWdlbnRPcHRpb25zIHRoYXQgY2FuIGNvbWUgZnJvbSB0aGUgZmlsZXN5c3RlbSBzY2FubmVyLlxuICogQWx3YXlzIHBsYWluIHZhbHVlcyBcdTIwMTQgbmV2ZXIgUmVzb2x2YWJsZSBmdW5jdGlvbnMuXG4gKi9cbmV4cG9ydCB0eXBlIEZzQWdlbnRDb25maWcgPSB7XG4gIHN5c3RlbT86IHN0cmluZztcbiAgc2tpbGxzPzogU2tpbGxJbnB1dFtdO1xufTtcblxuLyoqXG4gKiBBIHNpbmdsZSBlbnRyeSBpbiB0aGUgZ2VuZXJhdGVkIGFnZW50IHJlZ2lzdHJ5LlxuICogQ29udGFpbnMgdGhlIGZpbGVzeXN0ZW0tc2Nhbm5lZCBjb25maWcgYW5kIGFuIG9wdGlvbmFsIGR5bmFtaWMgaW1wb3J0XG4gKiBmb3IgYWdlbnRzIHRoYXQgaGF2ZSBhbiBgYWdlbnQudHNgIG1vZHVsZS5cbiAqL1xuZXhwb3J0IHR5cGUgQWdlbnRSZWdpc3RyeUVudHJ5ID0ge1xuICBjb25maWc6IEZzQWdlbnRDb25maWc7XG4gIGltcG9ydD86ICgpID0+IFByb21pc2U8eyBkZWZhdWx0PzogdW5rbm93biB9Pjtcbn07XG5cbi8qKlxuICogTWFwIG9mIGFnZW50IG5hbWUgdG8gcmVnaXN0cnkgZW50cnksIHByb2R1Y2VkIGJ5IHRoZSBnZW5lcmF0ZWRcbiAqIGBfcmVnaXN0cnkudHNgIGZpbGUgYW5kIGNvbnN1bWVkIGJ5IHtAbGluayBydW50aW1lLnJlc29sdmVBZ2VudH1cbiAqIGF0IHJlcXVlc3QgdGltZS5cbiAqL1xuZXhwb3J0IHR5cGUgQWdlbnRSZWdpc3RyeSA9IFJlY29yZDxzdHJpbmcsIEFnZW50UmVnaXN0cnlFbnRyeT47XG5cbmNvbnN0IHJlc29sdmVkQWdlbnRDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBBbnlBZ2VudD4oKTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVGcmFtZXdvcmtBZ2VudChvcHRzOiB7XG4gIG5hbWU6IHN0cmluZztcbiAgYWdlbnRzOiBBZ2VudFJlZ2lzdHJ5O1xufSk6IFByb21pc2U8QW55QWdlbnQgfCBudWxsPiB7XG4gIGNvbnN0IHsgbmFtZSwgYWdlbnRzIH0gPSBvcHRzO1xuXG4gIGlmICghT2JqZWN0Lmhhc093bihhZ2VudHMsIG5hbWUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBlbnRyeSA9IGFnZW50c1tuYW1lXTtcbiAgY29uc3QgY2FjaGVLZXkgPSBuYW1lICsgSlNPTi5zdHJpbmdpZnkoZW50cnkuY29uZmlnKTtcbiAgY29uc3QgY2FjaGVkID0gcmVzb2x2ZWRBZ2VudENhY2hlLmdldChjYWNoZUtleSk7XG4gIGlmIChjYWNoZWQpIHtcbiAgICByZXR1cm4gY2FjaGVkO1xuICB9XG5cbiAgY29uc3QgaW5zdGFuY2UgPSBhd2FpdCByZXNvbHZlRW50cnkoeyBuYW1lLCBlbnRyeSB9KTtcbiAgcmVzb2x2ZWRBZ2VudENhY2hlLnNldChjYWNoZUtleSwgaW5zdGFuY2UpO1xuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVFbnRyeShvcHRzOiB7XG4gIG5hbWU6IHN0cmluZztcbiAgZW50cnk6IEFnZW50UmVnaXN0cnlFbnRyeTtcbn0pOiBQcm9taXNlPEFueUFnZW50PiB7XG4gIGNvbnN0IHsgbmFtZSwgZW50cnkgfSA9IG9wdHM7XG5cbiAgaWYgKHR5cGVvZiBlbnRyeS5pbXBvcnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNvbnN0IG1vZCA9IGF3YWl0IGVudHJ5LmltcG9ydCgpO1xuICAgIGlmICghbW9kLmRlZmF1bHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEFnZW50IFwiJHtuYW1lfVwiIG1vZHVsZSBkb2VzIG5vdCBoYXZlIGEgZGVmYXVsdCBleHBvcnQuXFxuXFxuYCArXG4gICAgICAgICAgYGhpbnQ6IGFnZW50cy8ke25hbWV9L2FnZW50LnRzIG11c3QgZXhwb3J0IGEgZGVmYXVsdCBhZ2VudCBpbnN0YW5jZS5cXG5cXG5gICtcbiAgICAgICAgICBgICBpbXBvcnQgeyBhZ2VudCB9IGZyb20gXCJleHBlcmltZW50YWwtYWdlbnRcIjtcXG5gICtcbiAgICAgICAgICBgICBleHBvcnQgZGVmYXVsdCBhZ2VudChcIiR7bmFtZX1cIiwgeyAuLi4gfSk7XFxuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbXBvcnRlZCA9IG1vZC5kZWZhdWx0IGFzIEFueUFnZW50O1xuXG4gICAgaWYgKGhhc0NvbmZpZyhlbnRyeS5jb25maWcpKSB7XG4gICAgICByZXR1cm4gaW1wb3J0ZWQuZXh0ZW5kKChiYXNlKSA9PlxuICAgICAgICBtZXJnZUZyYW1ld29ya09wdGlvbnMoYmFzZSwgZW50cnkuY29uZmlnKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW1wb3J0ZWQ7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlQWdlbnQobmFtZSwgZW50cnkuY29uZmlnKTtcbn1cblxuZnVuY3Rpb24gaGFzQ29uZmlnKGNvbmZpZzogRnNBZ2VudENvbmZpZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnKS5sZW5ndGggPiAwO1xufVxuIiwgImltcG9ydCB7IHJlc29sdmVGcmFtZXdvcmtBZ2VudCB9IGZyb20gXCIuL3Jlc29sdmVcIjtcblxuLyoqXG4gKiBSZXF1ZXN0LXRpbWUgdXRpbGl0aWVzIGZvciB0aGUgZnJhbWV3b3JrIHJvdXRlci5cbiAqXG4gKiBVc2VkIGluc2lkZSBnZW5lcmF0ZWQgcm91dGUgaGFuZGxlcnMgdG8gcmVzb2x2ZSBhbiBhZ2VudCBieSBuYW1lXG4gKiBmcm9tIGEgcmVnaXN0cnkgcHJvZHVjZWQgYXQgYnVpbGQgdGltZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tIFwiZXhwZXJpbWVudGFsLWFnZW50L2ZyYW1ld29yay1ydW50aW1lXCI7XG4gKlxuICogY29uc3QgYWdlbnQgPSBhd2FpdCBydW50aW1lLnJlc29sdmVBZ2VudCh7IG5hbWUsIGFnZW50cyB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgcnVudGltZSA9IHtcbiAgLyoqXG4gICAqIExvb2sgdXAgYW4gYWdlbnQgYnkgbmFtZSBmcm9tIGEgZ2VuZXJhdGVkIHJlZ2lzdHJ5LCBtZXJnaW5nIGFueVxuICAgKiBmaWxlc3lzdGVtLXNjYW5uZWQgY29uZmlnIChzeXN0ZW0gcHJvbXB0cywgc2tpbGxzKSBvbiB0b3Agb2YgdGhlXG4gICAqIGFnZW50J3Mgb3duIG9wdGlvbnMuIFJlc3VsdHMgYXJlIGNhY2hlZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZVxuICAgKiBwcm9jZXNzLlxuICAgKlxuICAgKiBSZXR1cm5zIGBudWxsYCB3aGVuIHRoZSBuYW1lIGRvZXNuJ3QgbWF0Y2ggYW55IHJlZ2lzdHJ5IGVudHJ5LlxuICAgKi9cbiAgcmVzb2x2ZUFnZW50OiByZXNvbHZlRnJhbWV3b3JrQWdlbnQsXG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7O0FBV08sU0FBUyxzQkFDZCxNQUNBLFNBQ2M7QUFDZCxRQUFNLFNBQXVCLEVBQUUsR0FBRyxLQUFLO0FBRXZDLE1BQUksUUFBUSxXQUFXLFFBQVc7QUFDaEMsUUFBSSxLQUFLLFdBQVcsUUFBVztBQUM3QixhQUFPLFNBQVMsUUFBUTtB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
@@ -0,0 +1,11 @@
1
+ export { F as Framework } from './framework-c9fvEy0o.mjs';
2
+ export { A as AgentRegistry, a as AgentRegistryEntry } from './resolve-Cma6YFgx.mjs';
3
+ import './types-B3lbsOa7.mjs';
4
+ import './client-PuttJd6O.mjs';
5
+ import '@vercel/sandbox';
6
+ import './steps-ChOeFWAq.mjs';
7
+ import './adapter-CFq5IeYI.mjs';
8
+ import '@workflow/serde';
9
+ import 'ai';
10
+ import './entry-CRBUC5DB.mjs';
11
+ import 'zod';
@@ -0,0 +1,11 @@
1
+ export { F as Framework } from './framework-DH4Z1NLV.js';
2
+ export { A as AgentRegistry, a as AgentRegistryEntry } from './resolve-BZ26gcyj.js';
3
+ import './types-B3lbsOa7.js';
4
+ import './client-DIanpEQ_.js';
5
+ import '@vercel/sandbox';
6
+ import './steps-DWTQiAPt.js';
7
+ import './adapter-CFq5IeYI.js';
8
+ import '@workflow/serde';
9
+ import 'ai';
10
+ import './entry-BUYBv4Cu.js';
11
+ import 'zod';
@@ -0,0 +1,235 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/framework/index.ts
31
+ var framework_exports = {};
32
+ __export(framework_exports, {
33
+ Framework: () => Framework
34
+ });
35
+ module.exports = __toCommonJS(framework_exports);
36
+
37
+ // src/framework/generate.ts
38
+ var fs = __toESM(require("fs"));
39
+ var path = __toESM(require("path"));
40
+ var TS_IMPORT_EXT = /\.(ts|mts)$/;
41
+ function generateRegistry(opts) {
42
+ const entries = opts.agents.map(
43
+ (agent) => inlineEntry({ agent, outputDir: opts.outputDir })
44
+ );
45
+ return [
46
+ "// Auto-generated by withAgents - do not edit",
47
+ 'import type { AgentRegistry } from "experimental-agent/framework";',
48
+ "",
49
+ "export const agents = {",
50
+ ...entries,
51
+ "} satisfies AgentRegistry;",
52
+ ""
53
+ ].join("\n");
54
+ }
55
+ function inlineEntry(opts) {
56
+ const config = buildConfig(opts.agent);
57
+ const configStr = JSON.stringify(config, null, 2).split("\n").map((line, i) => i === 0 ? line : ` ${line}`).join("\n");
58
+ const parts = [` config: ${configStr}`];
59
+ if (opts.agent.hasAgentConfig) {
60
+ const configPath = findAgentConfigPath(opts.agent.absolutePath);
61
+ const relativePath = relativeImportPath({
62
+ from: opts.outputDir,
63
+ to: configPath
64
+ });
65
+ parts.push(` import: () => import(${JSON.stringify(relativePath)})`);
66
+ }
67
+ return ` ${JSON.stringify(opts.agent.name)}: {
68
+ ${parts.join(",\n")}
69
+ },`;
70
+ }
71
+ function buildConfig(agent) {
72
+ const config = {};
73
+ if (agent.systemPrompt) {
74
+ config.system = agent.systemPrompt;
75
+ }
76
+ if (agent.skills.length > 0) {
77
+ config.skills = agent.skills;
78
+ }
79
+ return config;
80
+ }
81
+ function findAgentConfigPath(agentDir) {
82
+ const extensions = [".ts", ".js", ".mts", ".mjs"];
83
+ for (const ext of extensions) {
84
+ const candidate = path.join(agentDir, `agent${ext}`);
85
+ if (fs.existsSync(candidate)) {
86
+ return candidate;
87
+ }
88
+ }
89
+ return path.join(agentDir, "agent");
90
+ }
91
+ function relativeImportPath(opts) {
92
+ let rel = path.relative(opts.from, opts.to).replace(/\\/g, "/");
93
+ rel = rel.replace(TS_IMPORT_EXT, "");
94
+ if (!rel.startsWith(".")) {
95
+ rel = `./${rel}`;
96
+ }
97
+ return rel;
98
+ }
99
+
100
+ // src/framework/scan.ts
101
+ var fs2 = __toESM(require("fs"));
102
+ var path2 = __toESM(require("path"));
103
+ var AGENT_CONFIG_FILES = ["agent.ts", "agent.js", "agent.mts", "agent.mjs"];
104
+ var MD_EXT = /\.md$/;
105
+ var TS_EXT = /\.(ts|js|mts|mjs)$/;
106
+ function listDir(dir) {
107
+ if (!fs2.existsSync(dir)) {
108
+ return [];
109
+ }
110
+ return fs2.readdirSync(dir);
111
+ }
112
+ function readFile(filePath) {
113
+ return fs2.readFileSync(filePath, "utf-8");
114
+ }
115
+ function fileExists(filePath) {
116
+ return fs2.existsSync(filePath);
117
+ }
118
+ function isDirectory(filePath) {
119
+ return fs2.existsSync(filePath) && fs2.statSync(filePath).isDirectory();
120
+ }
121
+ function discoverAgentDirs(agentsRoot) {
122
+ const entries = listDir(agentsRoot);
123
+ const dirs = [];
124
+ for (const entry of entries) {
125
+ const absolutePath = path2.join(agentsRoot, entry);
126
+ if (!isDirectory(absolutePath)) {
127
+ continue;
128
+ }
129
+ if (entry.startsWith(".")) {
130
+ continue;
131
+ }
132
+ dirs.push({
133
+ name: entry,
134
+ absolutePath,
135
+ hasAgentConfig: hasAgentConfig(absolutePath)
136
+ });
137
+ }
138
+ return dirs;
139
+ }
140
+ function hasAgentConfig(agentDir) {
141
+ return AGENT_CONFIG_FILES.some((f) => fileExists(path2.join(agentDir, f)));
142
+ }
143
+ function getSkills(agentDir) {
144
+ const skillsDir = path2.join(agentDir, "skills");
145
+ const entries = listDir(skillsDir);
146
+ const skills = [];
147
+ const tsSkillImportPaths = [];
148
+ for (const entry of entries.sort()) {
149
+ const absolutePath = path2.join(skillsDir, entry);
150
+ if (MD_EXT.test(entry)) {
151
+ skills.push({
152
+ type: "host",
153
+ path: absolutePath
154
+ });
155
+ } else if (TS_EXT.test(entry)) {
156
+ tsSkillImportPaths.push(absolutePath);
157
+ }
158
+ }
159
+ return { skills, tsSkillImportPaths };
160
+ }
161
+ function getSystemPrompt(agentDir) {
162
+ const systemDir = path2.join(agentDir, "system");
163
+ const entries = listDir(systemDir);
164
+ const mdFiles = entries.filter((e) => MD_EXT.test(e)).sort();
165
+ if (mdFiles.length === 0) {
166
+ return void 0;
167
+ }
168
+ const parts = [];
169
+ for (const file of mdFiles) {
170
+ const content = readFile(path2.join(systemDir, file)).trim();
171
+ if (content) {
172
+ parts.push(content);
173
+ }
174
+ }
175
+ return parts.length > 0 ? parts.join("\n\n") : void 0;
176
+ }
177
+ function scanAgent(agentDir) {
178
+ const { skills, tsSkillImportPaths } = getSkills(agentDir.absolutePath);
179
+ const systemPrompt = getSystemPrompt(agentDir.absolutePath);
180
+ return { ...agentDir, skills, systemPrompt, tsSkillImportPaths };
181
+ }
182
+ function findAgentsRoot(cwd, userDefinedAgentsDir) {
183
+ if (userDefinedAgentsDir) {
184
+ return path2.resolve(cwd, userDefinedAgentsDir);
185
+ }
186
+ const candidates = [
187
+ path2.join(cwd, "src", "agents"),
188
+ path2.join(cwd, "agents")
189
+ ];
190
+ for (const candidate of candidates) {
191
+ if (isDirectory(candidate)) {
192
+ return candidate;
193
+ }
194
+ }
195
+ return null;
196
+ }
197
+
198
+ // src/framework/framework.ts
199
+ var Framework = class {
200
+ cwd;
201
+ agentsDir;
202
+ log;
203
+ constructor(opts) {
204
+ this.cwd = opts.cwd ?? process.cwd();
205
+ this.agentsDir = opts.agentsDir;
206
+ this.log = opts.debug ? console.log.bind(console, "[Framework]") : () => void 0;
207
+ }
208
+ /**
209
+ * Scan the agents directory and return metadata for every agent found.
210
+ * Each subfolder inside the agents directory becomes one agent.
211
+ * Returns an empty array when no agents directory exists.
212
+ */
213
+ discoverAgents() {
214
+ const root = findAgentsRoot(this.cwd, this.agentsDir);
215
+ if (!root) {
216
+ return [];
217
+ }
218
+ const dirs = discoverAgentDirs(root);
219
+ return dirs.map(scanAgent);
220
+ }
221
+ /**
222
+ * Generate the TypeScript source for an agent registry module.
223
+ *
224
+ * @param opts.agents - Scanned agents to include in the registry.
225
+ * @param opts.outputDir - Directory where the registry file will be written
226
+ * (used to compute relative import paths to each agent's config module).
227
+ * @returns The full source text of the generated `_registry.ts` file.
228
+ */
229
+ generateRegistrySource = generateRegistry;
230
+ };
231
+ // Annotate the CommonJS export names for ESM import in node:
232
+ 0 && (module.exports = {
233
+ Framework
234
+ });
235
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2ZyYW1ld29yay9pbmRleC50cyIsICIuLi9zcmMvZnJhbWV3b3JrL2dlbmVyYXRlLnRzIiwgIi4uL3NyYy9mcmFtZXdvcmsvc2Nhbi50cyIsICIuLi9zcmMvZnJhbWV3b3JrL2ZyYW1ld29yay50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0IHsgRnJhbWV3b3JrIH0gZnJvbSBcIi4vZnJhbWV3b3JrXCI7XG5leHBvcnQgdHlwZSB7XG4gIEFnZW50UmVnaXN0cnksXG4gIEFnZW50UmVnaXN0cnlFbnRyeSxcbn0gZnJvbSBcIi4uL2ZyYW1ld29yay1ydW50aW1lL3Jlc29sdmVcIjtcbiIsICJpbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgdHlwZSB7IFNjYW5uZWRBZ2VudCB9IGZyb20gXCIuL3NjYW5cIjtcblxuY29uc3QgVFNfSU1QT1JUX0VYVCA9IC9cXC4odHN8bXRzKSQvO1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUmVnaXN0cnkob3B0czoge1xuICBhZ2VudHM6IFNjYW5uZWRBZ2VudFtdO1xuICBvdXRwdXREaXI6IHN0cmluZztcbn0pOiBzdHJpbmcge1xuICBjb25zdCBlbnRyaWVzID0gb3B0cy5hZ2VudHMubWFwKChhZ2VudCkgPT5cbiAgICBpbmxpbmVFbnRyeSh7IGFnZW50LCBvdXRwdXREaXI6IG9wdHMub3V0cHV0RGlyIH0pXG4gICk7XG5cbiAgcmV0dXJuIFtcbiAgICBcIi8vIEF1dG8tZ2VuZXJhdGVkIGJ5IHdpdGhBZ2VudHMgLSBkbyBub3QgZWRpdFwiLFxuICAgICdpbXBvcnQgdHlwZSB7IEFnZW50UmVnaXN0cnkgfSBmcm9tIFwiZXhwZXJpbWVudGFsLWFnZW50L2ZyYW1ld29ya1wiOycsXG4gICAgXCJcIixcbiAgICBcImV4cG9ydCBjb25zdCBhZ2VudHMgPSB7XCIsXG4gICAgLi4uZW50cmllcyxcbiAgICBcIn0gc2F0aXNmaWVzIEFnZW50UmVnaXN0cnk7XCIsXG4gICAgXCJcIixcbiAgXS5qb2luKFwiXFxuXCIpO1xufVxuXG5mdW5jdGlvbiBpbmxpbmVFbnRyeShvcHRzOiB7XG4gIGFnZW50OiBTY2FubmVkQWdlbnQ7XG4gIG91dHB1dERpcjogc3RyaW5nO1xufSk6IHN0cmluZyB7XG4gIGNvbnN0IGNvbmZpZyA9IGJ1aWxkQ29uZmlnKG9wdHMuYWdlbnQpO1xuICBjb25zdCBjb25maWdTdHIgPSBKU09OLnN0cmluZ2lmeShjb25maWcsIG51bGwsIDIpXG4gICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgLm1hcCgobGluZSwgaSkgPT4gKGkgPT09IDAgPyBsaW5lIDogYCAgICAgICR7bGluZX1gKSlcbiAgICAuam9pbihcIlxcblwiKTtcblxuICBjb25zdCBwYXJ0cyA9IFtgICAgIGNvbmZpZzogJHtjb25maWdTdHJ9YF07XG5cbiAgaWYgKG9wdHMuYWdlbnQuaGFzQWdlbnRDb25maWcpIHtcbiAgICBjb25zdCBjb25maWdQYXRoID0gZmluZEFnZW50Q29uZmlnUGF0aChvcHRzLmFnZW50LmFic29sdXRlUGF0aCk7XG4gICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcmVsYXRpdmVJbXBvcnRQYXRoKHtcbiAgICAgIGZyb206IG9wdHMub3V0cHV0RGlyLFxuICAgICAgdG86IGNvbmZpZ1BhdGgsXG4gICAgfSk7XG4gICAgcGFydHMucHVzaChgICAgIGltcG9ydDogKCkgPT4gaW1wb3J0KCR7SlNPTi5zdHJpbmdpZnkocmVsYXRpdmVQYXRoKX0pYCk7XG4gIH1cblxuICByZXR1cm4gYCAgJHtKU09OLnN0cmluZ2lmeShvcHRzLmFnZW50Lm5hbWUpfToge1xcbiR7cGFydHMuam9pbihcIixcXG5cIil9XFxuICB9LGA7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQ29uZmlnKGFnZW50OiBTY2FubmVkQWdlbnQpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnN0IGNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICBpZiAoYWdlbnQuc3lzdGVtUHJvbXB0KSB7XG4gICAgY29uZmlnLnN5c3RlbSA9IGFnZW50LnN5c3RlbVByb21wdDtcbiAgfVxuXG4gIGlmIChhZ2VudC5za2lsbHMubGVuZ3RoID4gMCkge1xuICAgIGNvbmZpZy5za2lsbHMgPSBhZ2VudC5za2lsbHM7XG4gIH1cblxuICByZXR1cm4gY29uZmlnO1xufVxuXG5mdW5jdGlvbiBmaW5kQWdlbnRDb25maWdQYXRoKGFnZW50RGlyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBleHRlbnNpb25zID0gW1wiLnRzXCIsIFwiLmpzXCIsIFwiLm10c1wiLCBcIi5tanNcIl07XG4gIGZvciAoY29uc3QgZXh0IG9mIGV4dGVuc2lvbnMpIHtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSBwYXRoLmpvaW4oYWdlbnREaXIsIGBhZ2VudCR7ZXh0fWApO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGNhbmRpZGF0ZSkpIHtcbiAgICAgIHJldHVybiBjYW5kaWRhdGU7XG4gICAgfVxuICB9XG4gIHJldHVybiBwYXRoLmpvaW4oYWdlbnREaXIsIFwiYWdlbnRcIik7XG59XG5cbmZ1bmN0aW9uIHJlbGF0aXZlSW1wb3J0UGF0aChvcHRzOiB7IGZyb206IHN0cmluZzsgdG86IHN0cmluZyB9KTogc3RyaW5nIHtcbiAgbGV0IHJlbCA9IHBhdGgucmVsYXRpdmUob3B0cy5mcm9tLCBvcHRzLnRvKS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKTtcbiAgcmVsID0gcmVsLnJlcGxhY2UoVFNfSU1QT1JUX0VYVCwgXCJcIik7XG4gIGlmICghcmVsLnN0YXJ0c1dpdGgoXCIuXCIpKSB7XG4gICAgcmVsID0gYC4vJHtyZWx9YDtcbiAgfVxuICByZXR1cm4gcmVsO1xufVxuXG4iLCAiaW1wb3J0ICogYXMgZnMgZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHR5cGUgeyBIb3N0U2tpbGxJbnB1dCwgU2tpbGxJbnB1dCB9IGZyb20gXCIuLi9za2lsbHMvdHlwZXNcIjtcblxuZXhwb3J0IHR5cGUgQWdlbnREaXIgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgYWJzb2x1dGVQYXRoOiBzdHJpbmc7XG4gIGhhc0FnZW50Q29uZmlnOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgU2Nhbm5lZEFnZW50ID0gQWdlbnREaXIgJiB7XG4gIHNraWxsczogU2tpbGxJbnB1dFtdO1xuICBzeXN0ZW1Qcm9tcHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdHNTa2lsbEltcG9ydFBhdGhzOiBzdHJpbmdbXTtcbn07XG5cbmNvbnN0IEFHRU5UX0NPTkZJR19GSUxFUyA9IFtcImFnZW50LnRzXCIsIFwiYWdlbnQuanNcIiwgXCJhZ2VudC5tdHNcIiwgXCJhZ2VudC5tanNcIl07XG5jb25zdCBNRF9FWFQgPSAvXFwubWQkLztcbmNvbnN0IFRTX0VYVCA9IC9cXC4odHN8anN8bXRzfG1qcykkLztcblxuZXhwb3J0IGZ1bmN0aW9uIGxpc3REaXIoZGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGlmICghZnMuZXhpc3RzU3luYyhkaXIpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBmcy5yZWFkZGlyU3luYyhkaXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZEZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsIFwidXRmLThcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWxlRXhpc3RzKGZpbGVQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGZzLmV4aXN0c1N5bmMoZmlsZVBhdGgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaXJlY3RvcnkoZmlsZVBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZnMuZXhpc3RzU3luYyhmaWxlUGF0aCkgJiYgZnMuc3RhdFN5bmMoZmlsZVBhdGgpLmlzRGlyZWN0b3J5KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNjb3ZlckFnZW50RGlycyhhZ2VudHNSb290OiBzdHJpbmcpOiBBZ2VudERpcltdIHtcbiAgY29uc3QgZW50cmllcyA9IGxpc3REaXIoYWdlbnRzUm9vdCk7XG4gIGNvbnN0IGRpcnM6IEFnZW50RGlyW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBjb25zdCBhYnNvbHV0ZVBhdGggPSBwYXRoLmpvaW4oYWdlbnRzUm9vdCwgZW50cnkpO1xuICAgIGlmICghaXNEaXJlY3RvcnkoYWJzb2x1dGVQYXRoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChlbnRyeS5zdGFydHNXaXRoKFwiLlwiKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZGlycy5wdXNoKHtcbiAgICAgIG5hbWU6IGVudHJ5LFxuICAgICAgYWJzb2x1dGVQYXRoLFxuICAgICAgaGFzQWdlbnRDb25maWc6IGhhc0FnZW50Q29uZmlnKGFic29sdXRlUGF0aCksXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZGlycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0FnZW50Q29uZmlnKGFnZW50RGlyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIEFHRU5UX0NPTkZJR19GSUxFUy5zb21lKChmKSA9PiBmaWxlRXhpc3RzKHBhdGguam9pbihhZ2VudERpciwgZikpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNraWxscyhhZ2VudERpcjogc3RyaW5nKToge1xuICBza2lsbHM6IFNraWxsSW5wdXRbXTtcbiAgdHNTa2lsbEltcG9ydFBhdGhzOiBzdHJpbmdbXTtcbn0ge1xuICBjb25zdCBza2lsbHNEaXIgPSBwYXRoLmpvaW4oYWdlbnREaXIsIFwic2tpbGxzXCIpO1xuICBjb25zdCBlbnRyaWVzID0gbGlzdERpcihza2lsbHNEaXIpO1xuICBjb25zdCBza2lsbHM6IFNraWxsSW5wdXRbXSA9IFtdO1xuICBjb25zdCB0c1NraWxsSW1wb3J0UGF0aHM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzLnNvcnQoKSkge1xuICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IHBhdGguam9pbihza2lsbHNEaXIsIGVudHJ5KTtcblxuICAgIGlmIChNRF9FWFQudGVzdChlbnRyeSkpIHtcbiAgICAgIHNraWxscy5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJob3N0XCIsXG4gICAgICAgIHBhdGg6IGFic29sdXRlUGF0aCxcbiAgICAgIH0gc2F0aXNmaWVzIEhvc3RTa2lsbElucHV0KTtcbiAgICB9IGVsc2UgaWYgKFRTX0VYVC50ZXN0KGVudHJ5KSkge1xuICAgICAgdHNTa2lsbEltcG9ydFBhdGhzLnB1c2goYWJzb2x1dGVQYXRoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBza2lsbHMsIHRzU2tpbGxJbXBvcnRQYXRocyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3lzdGVtUHJvbXB0KGFnZW50RGlyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBzeXN0ZW1EaXIgPSBwYXRoLmpvaW4oYWdlbnREaXIsIFwic3lzdGVtXCIpO1xuICBjb25zdCBlbnRyaWVzID0gbGlzdERpcihzeXN0ZW1EaXIpO1xuICBjb25zdCBtZEZpbGVzID0gZW50cmllcy5maWx0ZXIoKGUpID0+IE1EX0VYVC50ZXN0KGUpKS5zb3J0KCk7XG5cbiAgaWYgKG1kRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbGUgb2YgbWRGaWxlcykge1xuICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkRmlsZShwYXRoLmpvaW4oc3lzdGVtRGlyLCBmaWxlKSkudHJpbSgpO1xuICAgIGlmIChjb250ZW50KSB7XG4gICAgICBwYXJ0cy5wdXNoKGNvbnRlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHMuam9pbihcIlxcblxcblwiKSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYW5BZ2VudChhZ2VudERpcjogQWdlbnREaXIpOiBTY2FubmVkQWdlbnQge1xuICBjb25zdCB7IHNraWxscywgdHNTa2lsbEltcG9ydFBhdGhzIH0gPSBnZXRTa2lsbHMoYWdlbnREaXIuYWJzb2x1dGVQYXRoKTtcbiAgY29uc3Qgc3lzdGVtUHJvbXB0ID0gZ2V0U3lzdGVtUHJvbXB0KGFnZW50RGlyLmFic29sdXRlUGF0aCk7XG5cbiAgcmV0dXJuIHsgLi4uYWdlbnREaXIsIHNraWxscywgc3lzdGVtUHJvbXB0LCB0c1NraWxsSW1wb3J0UGF0aHMgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRBZ2VudHNSb290KFxuICBjd2Q6IHN0cmluZyxcbiAgdXNlckRlZmluZWRBZ2VudHNEaXI6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmICh1c2VyRGVmaW5lZEFnZW50c0Rpcikge1xuICAgIHJldHVybiBwYXRoLnJlc29sdmUoY3dkLCB1c2VyRGVmaW5lZEFnZW50c0Rpcik7XG4gIH1cbiAgY29uc3QgY2FuZGlkYXRlcyA9IFtcbiAgICBwYXRoLmpvaW4oY3dkLCBcInNyY1wiLCBcImFnZW50c1wiKSxcbiAgICBwYXRoLmpvaW4oY3dkLCBcImFnZW50c1wiKSxcbiAgXTtcblxuICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgaWYgKGlzRGlyZWN0b3J5KGNhbmRpZGF0ZSkpIHtcbiAgICAgIHJldHVybiBjYW5kaWRhdGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iLCAiaW1wb3J0IHsgZ2VuZXJhdGVSZWdpc3RyeSB9IGZyb20gXCIuL2dlbmVyYXRlXCI7XG5pbXBvcnQgdHlwZSB7IFNjYW5uZWRBZ2VudCB9IGZyb20gXCIuL3NjYW5cIjtcbmltcG9ydCB7IGRpc2NvdmVyQWdlbnREaXJzLCBmaW5kQWdlbnRzUm9vdCwgc2NhbkFnZW50IH0gZnJvbSBcIi4vc2NhblwiO1xuXG4vKipcbiAqIEZyYW1ld29yay1hZ25vc3RpYyBjb3JlIGZvciBmaWxlc3lzdGVtLWJhc2VkIGFnZW50IGRpc2NvdmVyeSBhbmRcbiAqIHJlZ2lzdHJ5IGNvZGUgZ2VuZXJhdGlvbi4gQWRhcHRlcnMgbGlrZSB7QGxpbmsgTmV4dH0gcmVjZWl2ZSBhXG4gKiBgRnJhbWV3b3JrYCBpbnN0YW5jZSBhbmQgdXNlIGl0IHRvIHNjYW4gYWdlbnRzIGFuZCBwcm9kdWNlIHJlZ2lzdHJ5XG4gKiBzb3VyY2UgY29kZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZyYW1ld29yayB7XG4gIHJlYWRvbmx5IGN3ZDogc3RyaW5nO1xuICByZWFkb25seSBhZ2VudHNEaXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgbG9nOiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKG9wdHM6IHtcbiAgICAvKipcbiAgICAgKiBQcm9qZWN0IHJvb3QgZGlyZWN0b3J5LlxuICAgICAqIEBkZWZhdWx0VmFsdWUgYHByb2Nlc3MuY3dkKClgXG4gICAgICovXG4gICAgY3dkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gdGhlIGFnZW50cyBkaXJlY3RvcnksIHJlbGF0aXZlIHRvIGBjd2RgLlxuICAgICAqIFdoZW4gb21pdHRlZCwgYXV0by1kZXRlY3RlZCBhcyB0aGUgZmlyc3QgZXhpc3RpbmcgZGlyZWN0b3J5XG4gICAgICogYW1vbmcgYHNyYy9hZ2VudHNgIGFuZCBgYWdlbnRzYC5cbiAgICAgKi9cbiAgICBhZ2VudHNEaXI/OiBzdHJpbmc7XG4gICAgLyoqIEVuYWJsZSB2ZXJib3NlIGxvZ2dpbmcgdG8gc3Rkb3V0LiAqL1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgfSkge1xuICAgIHRoaXMuY3dkID0gb3B0cy5jd2QgPz8gcHJvY2Vzcy5jd2QoKTtcbiAgICB0aGlzLmFnZW50c0RpciA9IG9wdHMuYWdlbnRzRGlyO1xuICAgIHRoaXMubG9nID0gb3B0cy5kZWJ1Z1xuICAgICAgPyBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIFwiW0ZyYW1ld29ya11cIilcbiAgICAgIDogKCkgPT4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNjYW4gdGhlIGFnZW50cyBkaXJlY3RvcnkgYW5kIHJldHVybiBtZXRhZGF0YSBmb3IgZXZlcnkgYWdlbnQgZm91bmQuXG4gICAqIEVhY2ggc3ViZm9sZGVyIGluc2lkZSB0aGUgYWdlbnRzIGRpcmVjdG9yeSBiZWNvbWVzIG9uZSBhZ2VudC5cbiAgICogUmV0dXJucyBhbiBlbXB0eSBhcnJheSB3aGVuIG5vIGFnZW50cyBkaXJlY3RvcnkgZXhpc3RzLlxuICAgKi9cbiAgZGlzY292ZXJBZ2VudHMoKTogU2Nhbm5lZEFnZW50W10ge1xuICAgIGNvbnN0IHJvb3QgPSBmaW5kQWdlbnRzUm9vdCh0aGlzLmN3ZCwgdGhpcy5hZ2VudHNEaXIpO1xuICAgIGlmICghcm9vdCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBkaXJzID0gZGlzY292ZXJBZ2VudERpcnMocm9vdCk7XG4gICAgcmV0dXJuIGRpcnMubWFwKHNjYW5BZ2VudCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgdGhlIFR5cGVTY3JpcHQgc291cmNlIGZvciBhbiBhZ2VudCByZWdpc3RyeSBtb2R1bGUuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRzLmFnZW50cyAtIFNjYW5uZWQgYWdlbnRzIHRvIGluY2x1ZGUgaW4gdGhlIHJlZ2lzdHJ5LlxuICAgKiBAcGFyYW0gb3B0cy5vdXRwdXREaXIgLSBEaXJlY3Rvcnkgd2hlcmUgdGhlIHJlZ2lzdHJ5IGZpbGUgd2lsbCBiZSB3cml0dGVuXG4gICAqICAgKHVzZWQgdG8gY29tcHV0ZSByZWxhdGl2ZSBpbXBvcnQgcGF0aHMgdG8gZWFjaCBhZ2VudCdzIGNvbmZpZyBtb2R1bGUpLlxuICAgKiBAcmV0dXJucyBUaGUgZnVsbCBzb3VyY2UgdGV4dCBvZiB0aGUgZ2VuZXJhdGVkIGBfcmVnaXN0cnkudHNgIGZpbGUuXG4gICAqL1xuICBnZW5lcmF0ZVJlZ2lzdHJ5U291cmNlID0gZ2VuZXJhdGVSZWdpc3RyeTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0FBLFNBQW9CO0FBQ3BCLFdBQXNCO0FBR3RCLElBQU0sZ0JBQWdCO0FBQ2YsU0FBUyxpQkFBaUIsTUFHdEI7QUFDVCxRQUFNLFVBQVUsS0FBSyxPQUFPO0FBQUEsSUFBSSxDQUFDLFVBQy9CLFlBQVksRUFBRSxPQUFPLFdBQVcsS0FBSyxVQUFVLENBQUM7QUFBQSxFQUNsRDtBQUVBLFNBQU87QUFBQSxJQUNMO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxHQUFHO0FBQUEsSUFDSDtBQUFBLElBQ0E7QUFBQSxFQUNGLEVBQUUsS0FBSyxJQUFJO0FBQ2I7QUFFQSxTQUFTLFlBQVksTUFHVjtBQUNULFFBQU0sU0FBUyxZQUFZLEtBQUssS0FBSztBQUNyQyxRQUFNLFlBQVksS0FBSyxVQUFVLFFBQVEsTUFBTSxDQUFDLEVBQzdDLE1BQU0sSUFBSSxFQUNWLElBQUksQ0FBQyxNQUFNLE1BQU8sTUFBTSxJQUFJLE9BQU8sU0FBUyxJQUFJLEVBQUcsRUFDbkQsS0FBSyxJQUFJO0FBRVosUUFBTSxRQUFRLENBQUMsZUFBZSxTQUFTLEVBQUU7QUFFekMsTUFBSSxLQUFLLE1BQU0sZ0JBQWdCO0FBQzdCLFVBQU0sYUFBYSxvQkFBb0IsS0FBSyxNQUFNLFlBQVk7QUFDOUQsVUFBTSxlQUFlLG1CQUFtQjtBQUFBLE1BQ3RDLE1BQU0sS0FBSztBQUFBLE1BQ1gsSUFBSTtBQUFBLElBQ04sQ0FBQztBQUNELFVBQU0sS0FBSyw0QkFBNEIsS0FBSyxVQUFVLFlBQVksQ0FBQyxHQUFHO0FBQUEsRUFDeEU7QUFFQSxTQUFPLEtBQUssS0FBSyxVQUFVLEtBQUssTUFBTSxJQUFJLENBQUM7QUFBQSxFQUFRLE1BQU0sS0FBSyxLQUFLLENBQUM7QUFBQTtBQUN0RTtBQUVBLFNBQVMsWUFBWSxPQUE4QztBQUNqRSxRQUFNLFNBQWtDLENBQUM7QUFFekMsTUFBSSxNQUFNLGNBQWM7QUFDdEIsV0FBTyxTQUFTLE1BQU07QUFBQSxFQUN4QjtBQUVBLE1BQUksTUFBTSxPQUFPLFNBQVMsR0FBRztBQUMzQixXQUFPLFNBQVMsTUFBTTtBQUFBLEVBQ3hCO0FBRUEsU0FBTztBQUNUO0FBRUEsU0FBUyxvQkFBb0IsVUFBMEI7QUFDckQsUUFBTSxhQUFhLENBQUMsT0FBTyxPQUFPLFFBQVEsTUFBTTtBQUNoRCxhQUFXLE9BQU8sWUFBWTtBQUM1QixVQUFNLFlBQWlCLFVBQUssVUFBVSxRQUFRLEdBQUcsRUFBRTtBQUNuRCxRQUFPLGNBQVcsU0FBUyxHQUFHO0FBQzVCLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUNBLFNBQVksVUFBSyxVQUFVLE9BQU87QUFDcEM7QUFFQSxTQUFTLG1CQUFtQixNQUE0QztBQUN0RSxNQUFJLE1BQVcsY0FBUyxLQUFLLE1BQU0sS0FBSyxFQUFFLEVBQUUsUUFBUSxPQUFPLEdBQUc7QUFDOUQsUUFBTSxJQUFJLFFBQVEsZUFBZSxFQUFFO0FBQ25DLE1BQUksQ0FBQyxJQUFJLFdBQVcsR0FBRyxHQUFHO0FBQ3hCLFVBQU0sS0FBSyxHQUFHO0FBQUEsRUFDaEI7QUFDQSxTQUFPO0FBQ1Q7OztBQ2hGQSxJQUFBQSxNQUFvQjtBQUNwQixJQUFBQyxRQUFzQjtBQWV0QixJQUFNLHFCQUFxQixDQUFDLFlBQVksWUFBWSxhQUFhLFdBQVc7QUFDNUUsSUFBTSxTQUFTO0FBQ2YsSUFBTSxTQUFTO0FBRVIsU0FBUyxRQUFRLEtBQXVCO0FBQzdDLE1BQUksQ0FBSSxlQUFXLEdBQUcsR0FBRztBQUN2QixXQUFPLENBQUM7QUFBQSxFQUNWO0FBQ0EsU0FBVSxnQkFBWSxHQUFHO0FBQzNCO0FBRU8sU0FBUyxTQUFTLFVBQTBCO0FBQ2pELFNBQVUsaUJBQWEsVUFBVSxPQUFPO0FBQzFDO0FBRU8sU0FBUyxXQUFXLFVBQTJCO0FBQ3BELFNBQVUsZUFBVyxRQUFRO0FBQy9CO0FBRU8sU0FBUyxZQUFZLFVBQTJCO0FBQ3JELFNBQVUsZUFBVyxRQUFRLEtBQVEsYUFBUyxRQUFRLEVBQUUsWUFBWTtBQUN0RTtBQUVPLFNBQVMsa0JBQWtCLFlBQWdDO0FBQ2hFLFFBQU0sVUFBVSxRQUFRLFVBQVU7QUFDbEMsUUFBTSxPQUFtQixDQUFDO0FBRTFCLGFBQVcsU0FBUyxTQUFTO0FBQzNCLFVBQU0sZUFBb0IsV0FBSyxZQUFZLEtBQUs7QUFDaEQsUUFBSSxDQUFDLFlBQVksWUFBWSxHQUFHO0FBQzlCO0FBQUEsSUFDRjtBQUNBLFFBQUksTUFBTSxXQUFXLEdBQUcsR0FBRztBQUN6QjtBQUFBLElBQ0Y7QUFFQSxTQUFLLEtBQUs7QUFBQSxNQUNSLE1BQU07QUFBQSxNQUNOO0FBQUEsTUFDQSxnQkFBZ0IsZUFBZSxZQUFZO0FBQUEsSUFDN0MsQ0FBQztBQUFBLEVBQ0g7QUFFQSxTQUFPO0FBQ1Q7QUFFTyxTQUFTLGVBQWUsVUFBMkI7QUFDeEQsU0FBTyxtQkFBbUIsS0FBSyxDQUFDLE1BQU0sV0FBZ0IsV0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzFFO0FBRU8sU0FBUyxVQUFVLFVBR3hCO0FBQ0EsUUFBTSxZQUFpQixXQUFLLFVBQVUsUUFBUTtBQUM5QyxRQUFNLFVBQVUsUUFBUSxTQUFTO0FBQ2pDLFFBQU0sU0FBdUIsQ0FBQztBQUM5QixRQUFNLHFCQUErQixDQUFDO0FBRXRDLGFBQVcsU0FBUyxRQUFRLEtBQUssR0FBRztBQUNsQyxVQUFNLGVBQW9CLFdBQUssV0FBVyxLQUFLO0FBRS9DLFFBQUksT0FBTyxLQUFLLEtBQUssR0FBRztBQUN0QixhQUFPLEtBQUs7QUFBQSxRQUNWLE1BQU07QUFBQSxRQUNOLE1BQU07QUFBQSxNQUNSLENBQTBCO0FBQUEsSUFDNUIsV0FBVyxPQUFPLEtBQUssS0FBSyxHQUFHO0FBQzdCLHlCQUFtQixLQUFLLFlBQVk7QUFBQSxJQUN0QztBQUFBLEVBQ0Y7QUFFQSxTQUFPLEVBQUUsUUFBUSxtQkFBbUI7QUFDdEM7QUFFTyxTQUFTLGdCQUFnQixVQUFzQztBQUNwRSxRQUFNLFlBQWlCLFdBQUssVUFBVSxRQUFRO0FBQzlDLFFBQU0sVUFBVSxRQUFRLFNBQVM7QUFDakMsUUFBTSxVQUFVLFFBQVEsT0FBTyxDQUFDLE1BQU0sT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUs7QUFFM0QsTUFBSSxRQUFRLFdBQVcsR0FBRztBQUN4QixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sUUFBa0IsQ0FBQztBQUN6QixhQUFXLFFBQVEsU0FBUztBQUMxQixVQUFNLFVBQVUsU0FBYyxXQUFLLFdBQVcsSUFBSSxDQUFDLEVBQUUsS0FBSztBQUMxRCxRQUFJLFNBQVM7QUFDWCxZQUFNLEtBQUssT0FBTztBQUFBLElBQ3BCO0FBQUEsRUFDRjtBQUVBLFNBQU8sTUFBTSxTQUFTLElBQUksTUFBTSxLQUFLLE1BQU0sSUFBSTtBQUNqRDtBQUVPLFNBQVMsVUFBVSxVQUFrQztBQUMxRCxRQUFNLEVBQUUsUUFBUSxtQkFBbUIsSUFBSSxVQUFVLFNBQVMsWUFBWTtBQUN0RSxRQUFNLGVBQWUsZ0JBQWdCLFNBQVMsWUFBWTtBQUUxRCxTQUFPLEVBQUUsR0FBRyxVQUFVLFFBQVEsY0FBYyxtQkFBbUI7QUFDakU7QUFFTyxTQUFTLGVBQ2QsS0FDQSxzQkFDZTtBQUNmLE1BQUksc0JBQXNCO0FBQ3hCLFdBQVksY0FBUSxLQUFLLG9CQUFvQjtBQUFBLEVBQy9DO0FBQ0EsUUFBTSxhQUFhO0FBQUEsSUFDWixXQUFLLEtBQUssT0FBTyxRQUFRO0FBQUEsSUFDekIsV0FBSyxLQUFLLFFBQVE7QUFBQSxFQUN6QjtBQUVBLGFBQVcsYUFBYSxZQUFZO0FBQ2xDLFFBQUksWUFBWSxTQUFTLEdBQUc7QUFDMUIsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUOzs7QUMvSE8sSUFBTSxZQUFOLE1BQWdCO0FBQUEsRUFDWjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFVCxZQUFZLE1BY1Q7QUFDRCxTQUFLLE1BQU0sS0FBSyxPQUFPLFFBQVEsSUFBSTtBQUNuQyxTQUFLLFlBQVksS0FBSztBQUN0QixTQUFLLE1BQU0sS0FBSyxRQUNaLFFBQVEsSUFBSSxLQUFLLFNBQVMsYUFBYSxJQUN2QyxNQUFNO0FBQUEsRUFDWjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLGlCQUFpQztBQUMvQixVQUFNLE9BQU8sZUFBZSxLQUFLLEtBQUssS0FBSyxTQUFTO0FBQ3BELFFBQUksQ0FBQyxNQUFNO0FBQ1QsYUFBTyxDQUFDO0FBQUEsSUFDVjtBQUNBLFVBQU0sT0FBTyxrQkFBa0IsSUFBSTtBQUNuQyxXQUFPLEtBQUssSUFBSSxTQUFTO0FBQUEsRUFDM0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFVQSx5QkFBeUI7QUFDM0I7IiwKICAibmFtZXMiOiBbImZzIiwgInBhdGgiXQp9Cg==
@@ -0,0 +1,8 @@
1
+ import {
2
+ Framework
3
+ } from "./chunk-DO4HKPHR.mjs";
4
+ import "./chunk-BJTO5JO5.mjs";
5
+ export {
6
+ Framework
7
+ };
8
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFtdLAogICJtYXBwaW5ncyI6ICIiLAogICJuYW1lcyI6IFtdCn0K
package/dist/index.d.mts CHANGED
@@ -1,12 +1,13 @@
1
- import { T as ToolContext, A as AnyAgent, S as SessionSendArgs, b as SendResult } from './client-DCtmZCY8.mjs';
2
- export { c as AgentDataTypes, d as AgentHooks, e as AgentOptions, a as AgentStatus, f as ApprovalData, B as BuiltInToolName, G as GitSkillEntry, g as GitSkillInput, H as HostSkillEntry, h as HostSkillInput, I as InferSession, i as InferUIMessage, j as InlineSkillEntry, k as InlineSkillInput, N as NeedsApprovalMap, R as Resolvable, l as ResolvableArgs, m as SandboxSkillEntry, n as SandboxSkillInput, o as SendInput, p as SessionDefaults, q as SkillEntry, r as SkillInput, s as SkillSourceType, t as StepUsage, U as UsageSummary, W as WorkflowRunLike, u as agent, v as builtinToolNames } from './client-DCtmZCY8.mjs';
1
+ import { T as ToolContext, A as AnyAgent, S as SessionSendArgs, b as SendResult } from './client-PuttJd6O.mjs';
2
+ export { c as AgentDataTypes, d as AgentHooks, e as AgentOptions, a as AgentStatus, f as ApprovalData, B as BuiltInToolName, I as InferSession, g as InferUIMessage, N as NeedsApprovalMap, R as Resolvable, h as ResolvableArgs, i as SendInput, j as SessionDefaults, k as StepUsage, U as UsageSummary, W as WorkflowRunLike, l as agent, m as builtinToolNames } from './client-PuttJd6O.mjs';
3
3
  import * as errore from 'errore';
4
- import * as elysia from 'elysia';
5
- import elysia__default from 'elysia';
6
4
  import * as ai from 'ai';
7
5
  import { Tool } from 'ai';
6
+ import * as elysia from 'elysia';
7
+ import elysia__default from 'elysia';
8
8
  import z$1, { z } from 'zod';
9
9
  export { E as ExecResult, S as SandboxAgentRef, a as SandboxBinding, b as SandboxInstance, c as SandboxSetupFields, U as UploadableFile } from './steps-ChOeFWAq.mjs';
10
+ export { G as GitSkillEntry, a as GitSkillInput, H as HostSkillEntry, b as HostSkillInput, I as InlineSkillEntry, c as InlineSkillInput, d as SandboxSkillEntry, e as SandboxSkillInput, f as SkillEntry, S as SkillInput, g as SkillSourceType } from './types-B3lbsOa7.mjs';
10
11
  import '@vercel/sandbox';
11
12
  import './entry-CRBUC5DB.mjs';
12
13
  import './adapter-CFq5IeYI.mjs';
@@ -166,7 +167,7 @@ type BasePath = `/api/agents/[agent]`;
166
167
  type Without<O, K extends keyof O> = Omit<O, K>;
167
168
  declare function handleRequest<Agent extends AnyAgent, AgentBasePath extends string = BasePath>(agent: Agent, options?: {
168
169
  basePath?: AgentBasePath;
169
- workflow?: (sessionId: string, ...args: SessionSendArgs<AnyAgent>) => Promise<SendResult>;
170
+ workflow?: (sessionId: string, ...args: SessionSendArgs<Agent>) => Promise<SendResult>;
170
171
  overrides?: {
171
172
  [K in keyof AgentContract<Agent>]?: (contract: Without<InferContract<Agent>[K], "response">, next: () => Promise<InferResponse<Agent, K> | Response>) => Promise<InferResponse<Agent, K> | Response>;
172
173
  };
@@ -178,6 +179,9 @@ declare function handleRequest<Agent extends AnyAgent, AgentBasePath extends str
178
179
  }, {
179
180
  typebox: {};
180
181
  error: {};
182
+ } & {
183
+ typebox: {};
184
+ error: {};
181
185
  }, {
182
186
  schema: {};
183
187
  standaloneSchema: {};
@@ -185,7 +189,20 @@ declare function handleRequest<Agent extends AnyAgent, AgentBasePath extends str
185
189
  macroFn: {};
186
190
  parser: {};
187
191
  response: {};
188
- }, ((({
192
+ } & {
193
+ schema: {};
194
+ standaloneSchema: {};
195
+ macro: {};
196
+ macroFn: {};
197
+ parser: {};
198
+ response: {};
199
+ }, (((({
200
+ api: {
201
+ agents: {
202
+ [x: string]: {};
203
+ };
204
+ };
205
+ } | (AgentBasePath extends "" ? {} : {} & elysia.CreateEden<AgentBasePath, {}>)) & ({
189
206
  api: {
190
207
  agents: {
191
208
  [x: string]: {
@@ -246,7 +263,7 @@ declare function handleRequest<Agent extends AnyAgent, AgentBasePath extends str
246
263
  };
247
264
  };
248
265
  };
249
- } | ({} & elysia.CreateEden<`${AgentBasePath}/:sessionId`, {
266
+ } | elysia.CreateEden<`${AgentBasePath}/:sessionId`, {
250
267
  get: {
251
268
  body: unknown;
252
269
  params: {
@@ -495,6 +512,12 @@ declare function handleRequest<Agent extends AnyAgent, AgentBasePath extends str
495
512
  schema: {};
496
513
  standaloneSchema: {};
497
514
  response: {};
515
+ } & {
516
+ derive: {};
517
+ resolve: {};
518
+ schema: {};
519
+ standaloneSchema: {};
520
+ response: {};
498
521
  }>;
499
522
 
500
523
  export { AnyAgent, MessageNotFoundError, SandboxError, SandboxNotFoundError, SessionNotFoundError, SessionSendArgs, StorageConflictError, StorageError, ToolContext, handleRequest, tool };
package/dist/index.d.ts CHANGED
@@ -1,12 +1,13 @@
1
- import { T as ToolContext, A as AnyAgent, S as SessionSendArgs, b as SendResult } from './client-D4AiVqFt.js';
2
- export { c as AgentDataTypes, d as AgentHooks, e as AgentOptions, a as AgentStatus, f as ApprovalData, B as BuiltInToolName, G as GitSkillEntry, g as GitSkillInput, H as HostSkillEntry, h as HostSkillInput, I as InferSession, i as InferUIMessage, j as InlineSkillEntry, k as InlineSkillInput, N as NeedsApprovalMap, R as Resolvable, l as ResolvableArgs, m as SandboxSkillEntry, n as SandboxSkillInput, o as SendInput, p as SessionDefaults, q as SkillEntry, r as SkillInput, s as SkillSourceType, t as StepUsage, U as UsageSummary, W as WorkflowRunLike, u as agent, v as builtinToolNames } from './client-D4AiVqFt.js';
1
+ import { T as ToolContext, A as AnyAgent, S as SessionSendArgs, b as SendResult } from './client-DIanpEQ_.js';
2
+ export { c as AgentDataTypes, d as AgentHooks, e as AgentOptions, a as AgentStatus, f as ApprovalData, B as BuiltInToolName, I as InferSession, g as InferUIMessage, N as NeedsApprovalMap, R as Resolvable, h as ResolvableArgs, i as SendInput, j as SessionDefaults, k as StepUsage, U as UsageSummary, W as WorkflowRunLike, l as agent, m as builtinToolNames } from './client-DIanpEQ_.js';
3
3
  import * as errore from 'errore';
4
- import * as elysia from 'elysia';
5
- import elysia__default from 'elysia';
6
4
  import * as ai from 'ai';
7
5
  import { Tool } from 'ai';
6
+ import * as elysia from 'elysia';
7
+ import elysia__default from 'elysia';
8
8
  import z$1, { z } from 'zod';
9
9
  export { E as ExecResult, S as SandboxAgentRef, a as SandboxBinding, b as SandboxInstance, c as SandboxSetupFields, U as UploadableFile } from './steps-DWTQiAPt.js';
10
+ export { G as GitSkillEntry, a as GitSkillInput, H as HostSkillEntry, b as HostSkillInput, I as InlineSkillEntry, c as InlineSkillInput, d as SandboxSkillEntry, e as SandboxSkillInput, f as SkillEntry, S as SkillInput, g as SkillSourceType } from './types-B3lbsOa7.js';
10
11
  import '@vercel/sandbox';
11
12
  import './entry-BUYBv4Cu.js';
12
13
  import './adapter-CFq5IeYI.js';
@@ -166,7 +167,7 @@ type BasePath = `/api/agents/[agent]`;
166
167
  type Without<O, K extends keyof O> = Omit<O, K>;
167
168
  declare function handleRequest<Agent extends AnyAgent, AgentBasePath extends string = BasePath>(agent: Agent, options?: {
168
169
  basePath?: AgentBasePath;
169
- workflow?: (sessionId: string, ...args: SessionSendArgs<AnyAgent>) => Promise<SendResult>;
170
+ workflow?: (sessionId: string, ...args: SessionSendArgs<Agent>) => Promise<SendResult>;
170
171
  overrides?: {
171
172
  [K in keyof AgentContract<Agent>]?: (contract: Without<InferContract<Agent>[K], "response">, next: () => Promise<InferResponse<Agent, K> | Response>) => Promise<InferResponse<Agent, K> | Response>;
172
173
  };
@@ -178,6 +179,9 @@ declare function handleRequest<Agent extends AnyAgent, AgentBasePath extends str
178
179
  }, {
179
180
  typebox: {};
180
181
  error: {};
182
+ } & {
183
+ typebox: {};
184
+ error: {};
181
185
  }, {
182
186
  schema: {};
183
187
  standaloneSchema: {};
@@ -185,7 +189,20 @@ declare function handleRequest<Agent extends AnyAgent, AgentBasePath extends str
185
189
  macroFn: {};
186
190
  parser: {};
187
191
  response: {};
188
- }, ((({
192
+ } & {
193
+ schema: {};
194
+ standaloneSchema: {};
195
+ macro: {};
196
+ macroFn: {};
197
+ parser: {};
198
+ response: {};
199
+ }, (((({
200
+ api: {
201
+ agents: {
202
+ [x: string]: {};
203
+ };
204
+ };
205
+ } | (AgentBasePath extends "" ? {} : {} & elysia.CreateEden<AgentBasePath, {}>)) & ({
189
206
  api: {
190
207
  agents: {
191
208
  [x: string]: {
@@ -246,7 +263,7 @@ declare function handleRequest<Agent extends AnyAgent, AgentBasePath extends str
246
263
  };
247
264
  };
248
265
  };
249
- } | ({} & elysia.CreateEden<`${AgentBasePath}/:sessionId`, {
266
+ } | elysia.CreateEden<`${AgentBasePath}/:sessionId`, {
250
267
  get: {
251
268
  body: unknown;
252
269
  params: {
@@ -495,6 +512,12 @@ declare function handleRequest<Agent extends AnyAgent, AgentBasePath extends str
495
512
  schema: {};
496
513
  standaloneSchema: {};
497
514
  response: {};
515
+ } & {
516
+ derive: {};
517
+ resolve: {};
518
+ schema: {};
519
+ standaloneSchema: {};
520
+ response: {};
498
521
  }>;
499
522
 
500
523
  export { AnyAgent, MessageNotFoundError, SandboxError, SandboxNotFoundError, SessionNotFoundError, SessionSendArgs, StorageConflictError, StorageError, ToolContext, handleRequest, tool };