managed-deepagents 0.8.6-dev.3 → 0.9.0-dev.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.
Files changed (150) hide show
  1. package/README.md +81 -1
  2. package/dist/channels/http/index.d.ts.map +1 -1
  3. package/dist/channels/http/index.js +5 -1
  4. package/dist/channels/http/index.js.map +1 -1
  5. package/dist/channels/http/types.d.ts +2 -0
  6. package/dist/channels/http/types.d.ts.map +1 -1
  7. package/dist/channels/reactions.d.ts +31 -0
  8. package/dist/channels/reactions.d.ts.map +1 -0
  9. package/dist/channels/reactions.js +52 -0
  10. package/dist/channels/reactions.js.map +1 -0
  11. package/dist/channels/runtime.d.ts +1 -0
  12. package/dist/channels/runtime.d.ts.map +1 -1
  13. package/dist/channels/runtime.js +7 -1
  14. package/dist/channels/runtime.js.map +1 -1
  15. package/dist/channels/schedule-delivery.d.ts +3 -25
  16. package/dist/channels/schedule-delivery.d.ts.map +1 -1
  17. package/dist/channels/schedule-delivery.js +28 -31
  18. package/dist/channels/schedule-delivery.js.map +1 -1
  19. package/dist/channels/slack/index.d.ts +8 -0
  20. package/dist/channels/slack/index.d.ts.map +1 -1
  21. package/dist/channels/slack/index.js +10 -0
  22. package/dist/channels/slack/index.js.map +1 -1
  23. package/dist/channels/slack/transport.d.ts.map +1 -1
  24. package/dist/channels/slack/transport.js +1 -1
  25. package/dist/channels/slack/transport.js.map +1 -1
  26. package/dist/channels/trigger/http.d.ts +3 -0
  27. package/dist/channels/trigger/http.d.ts.map +1 -1
  28. package/dist/channels/trigger/http.js +82 -37
  29. package/dist/channels/trigger/http.js.map +1 -1
  30. package/dist/channels/trigger/transport.d.ts.map +1 -1
  31. package/dist/channels/trigger/transport.js +6 -3
  32. package/dist/channels/trigger/transport.js.map +1 -1
  33. package/dist/channels/trigger/types.d.ts +21 -2
  34. package/dist/channels/trigger/types.d.ts.map +1 -1
  35. package/dist/channels/trigger/types.js.map +1 -1
  36. package/dist/channels/types.d.ts +3 -0
  37. package/dist/channels/types.d.ts.map +1 -1
  38. package/dist/channels/types.js.map +1 -1
  39. package/dist/connection-authorization.d.ts +7 -0
  40. package/dist/connection-authorization.d.ts.map +1 -1
  41. package/dist/connection-authorization.js +1 -1
  42. package/dist/connection-authorization.js.map +1 -1
  43. package/dist/connectors/mcp/index.d.ts +11 -11
  44. package/dist/connectors/mcp/index.d.ts.map +1 -1
  45. package/dist/connectors/mcp/index.js +74 -120
  46. package/dist/connectors/mcp/index.js.map +1 -1
  47. package/dist/connectors/mcp/langsmith-url.js +2 -2
  48. package/dist/connectors/mcp/langsmith-url.js.map +1 -1
  49. package/dist/connectors/mcp/schema.d.ts +4 -13
  50. package/dist/connectors/mcp/schema.d.ts.map +1 -1
  51. package/dist/connectors/mcp/schema.js +57 -96
  52. package/dist/connectors/mcp/schema.js.map +1 -1
  53. package/dist/connectors/mcp/types.d.ts +15 -49
  54. package/dist/connectors/mcp/types.d.ts.map +1 -1
  55. package/dist/credential-gate.d.ts.map +1 -1
  56. package/dist/credential-gate.js +2 -4
  57. package/dist/credential-gate.js.map +1 -1
  58. package/dist/define-deep-agent.d.ts +6 -5
  59. package/dist/define-deep-agent.d.ts.map +1 -1
  60. package/dist/define-deep-agent.js +13 -17
  61. package/dist/define-deep-agent.js.map +1 -1
  62. package/dist/dynamic-agent.d.ts +13 -0
  63. package/dist/dynamic-agent.d.ts.map +1 -0
  64. package/dist/dynamic-agent.js +12 -0
  65. package/dist/dynamic-agent.js.map +1 -0
  66. package/dist/index.d.ts +6 -2
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +2 -0
  69. package/dist/index.js.map +1 -1
  70. package/dist/managed-composition.d.ts +15 -0
  71. package/dist/managed-composition.d.ts.map +1 -0
  72. package/dist/managed-composition.js +181 -0
  73. package/dist/managed-composition.js.map +1 -0
  74. package/dist/run-context.d.ts +6 -0
  75. package/dist/run-context.d.ts.map +1 -1
  76. package/dist/run-context.js +1 -0
  77. package/dist/run-context.js.map +1 -1
  78. package/dist/runtime/agent-entry.d.ts +6 -0
  79. package/dist/runtime/agent-entry.d.ts.map +1 -0
  80. package/dist/runtime/agent-entry.js +42 -0
  81. package/dist/runtime/agent-entry.js.map +1 -0
  82. package/dist/runtime/auth.d.ts +1 -6
  83. package/dist/runtime/auth.d.ts.map +1 -1
  84. package/dist/runtime/auth.js +9 -7
  85. package/dist/runtime/auth.js.map +1 -1
  86. package/dist/runtime/backend.d.ts +1 -0
  87. package/dist/runtime/backend.d.ts.map +1 -1
  88. package/dist/runtime/backend.js +9 -6
  89. package/dist/runtime/backend.js.map +1 -1
  90. package/dist/runtime/eval-filesystem.d.ts +4 -2
  91. package/dist/runtime/eval-filesystem.d.ts.map +1 -1
  92. package/dist/runtime/eval-filesystem.js +134 -8
  93. package/dist/runtime/eval-filesystem.js.map +1 -1
  94. package/dist/runtime/index.d.ts +4 -3
  95. package/dist/runtime/index.d.ts.map +1 -1
  96. package/dist/runtime/index.js +118 -42
  97. package/dist/runtime/index.js.map +1 -1
  98. package/dist/runtime/memory/index.d.ts +1 -1
  99. package/dist/runtime/memory/index.d.ts.map +1 -1
  100. package/dist/runtime/memory/index.js +1 -1
  101. package/dist/runtime/memory/index.js.map +1 -1
  102. package/dist/runtime/memory/mounts.d.ts +3 -2
  103. package/dist/runtime/memory/mounts.d.ts.map +1 -1
  104. package/dist/runtime/memory/mounts.js +11 -15
  105. package/dist/runtime/memory/mounts.js.map +1 -1
  106. package/dist/runtime/memory/paths.d.ts +1 -0
  107. package/dist/runtime/memory/paths.d.ts.map +1 -1
  108. package/dist/runtime/memory/paths.js +10 -0
  109. package/dist/runtime/memory/paths.js.map +1 -1
  110. package/dist/runtime/run-input.d.ts +3 -0
  111. package/dist/runtime/run-input.d.ts.map +1 -1
  112. package/dist/runtime/sandbox-manager.d.ts +14 -2
  113. package/dist/runtime/sandbox-manager.d.ts.map +1 -1
  114. package/dist/runtime/sandbox-manager.js +90 -12
  115. package/dist/runtime/sandbox-manager.js.map +1 -1
  116. package/dist/runtime/schedule-auth.d.ts +49 -0
  117. package/dist/runtime/schedule-auth.d.ts.map +1 -0
  118. package/dist/runtime/schedule-auth.js +177 -0
  119. package/dist/runtime/schedule-auth.js.map +1 -0
  120. package/dist/runtime/selected-skills-backend.d.ts +22 -0
  121. package/dist/runtime/selected-skills-backend.d.ts.map +1 -0
  122. package/dist/runtime/selected-skills-backend.js +238 -0
  123. package/dist/runtime/selected-skills-backend.js.map +1 -0
  124. package/dist/runtime/selected-skills.d.ts +13 -0
  125. package/dist/runtime/selected-skills.d.ts.map +1 -0
  126. package/dist/runtime/selected-skills.js +257 -0
  127. package/dist/runtime/selected-skills.js.map +1 -0
  128. package/dist/runtime/static-entry.d.ts +4 -0
  129. package/dist/runtime/static-entry.d.ts.map +1 -0
  130. package/dist/runtime/static-entry.js +18 -0
  131. package/dist/runtime/static-entry.js.map +1 -0
  132. package/dist/runtime-schedules.d.ts +101 -0
  133. package/dist/runtime-schedules.d.ts.map +1 -0
  134. package/dist/runtime-schedules.js +454 -0
  135. package/dist/runtime-schedules.js.map +1 -0
  136. package/dist/sandbox.d.ts +2 -1
  137. package/dist/sandbox.d.ts.map +1 -1
  138. package/dist/sandbox.js.map +1 -1
  139. package/dist/schedule-channel.d.ts +3 -0
  140. package/dist/schedule-channel.d.ts.map +1 -0
  141. package/dist/schedule-channel.js +21 -0
  142. package/dist/schedule-channel.js.map +1 -0
  143. package/dist/schedule-time.d.ts +12 -0
  144. package/dist/schedule-time.d.ts.map +1 -0
  145. package/dist/schedule-time.js +101 -0
  146. package/dist/schedule-time.js.map +1 -0
  147. package/dist/types.d.ts +40 -15
  148. package/dist/types.d.ts.map +1 -1
  149. package/dist/types.js.map +1 -1
  150. package/package.json +8 -8
@@ -0,0 +1,238 @@
1
+ import { assertSafeMountedPath } from "./memory/paths.js";
2
+ export const MAX_SELECTED_SKILL_FILES = 128;
3
+ export const MAX_SELECTED_SKILL_FILE_BYTES = 1024 * 1024;
4
+ export const MAX_SELECTED_SKILL_TOTAL_BYTES = 10 * 1024 * 1024;
5
+ const MAX_PATH_LENGTH = 1024;
6
+ const MAX_PATH_SEGMENTS = 32;
7
+ const MAX_GLOB_LENGTH = 512;
8
+ const EPOCH = "1970-01-01T00:00:00.000Z";
9
+ export function normalizeSelectedSkillPath(path) {
10
+ if (typeof path !== "string" ||
11
+ !path.startsWith("/") ||
12
+ path.length > MAX_PATH_LENGTH) {
13
+ throw new Error("invalid skills path");
14
+ }
15
+ assertSafeMountedPath(path, "invalid skills path");
16
+ const parts = path.split("/").filter(Boolean);
17
+ if (parts.length > MAX_PATH_SEGMENTS) {
18
+ throw new Error("invalid skills path");
19
+ }
20
+ return `/${parts.join("/")}`;
21
+ }
22
+ function normalizeGlob(pattern, root) {
23
+ if (!pattern ||
24
+ pattern.length > MAX_GLOB_LENGTH ||
25
+ /[\\\0[\]{}]/.test(pattern)) {
26
+ throw new Error("invalid skills glob");
27
+ }
28
+ assertSafeMountedPath(pattern, "invalid skills glob");
29
+ if (pattern.split("/").filter(Boolean).length > MAX_PATH_SEGMENTS) {
30
+ throw new Error("invalid skills glob");
31
+ }
32
+ const bare = pattern.startsWith("/") ? pattern.slice(1) : pattern;
33
+ return root === "/" && bare.startsWith("skills/")
34
+ ? `/${bare.slice("skills/".length)}`
35
+ : pattern;
36
+ }
37
+ function relativeSearchPath(file, root) {
38
+ if (file === root)
39
+ return file.slice(file.lastIndexOf("/") + 1);
40
+ const prefix = root === "/" ? "/" : `${root}/`;
41
+ return file.startsWith(prefix) ? file.slice(prefix.length) : undefined;
42
+ }
43
+ function segmentMatch(pattern, value) {
44
+ const memo = new Map();
45
+ const visit = (patternIndex, valueIndex) => {
46
+ const key = `${patternIndex}:${valueIndex}`;
47
+ const cached = memo.get(key);
48
+ if (cached !== undefined)
49
+ return cached;
50
+ const result = patternIndex === pattern.length
51
+ ? valueIndex === value.length
52
+ : pattern[patternIndex] === "*"
53
+ ? visit(patternIndex + 1, valueIndex) ||
54
+ (valueIndex < value.length && visit(patternIndex, valueIndex + 1))
55
+ : valueIndex < value.length &&
56
+ (pattern[patternIndex] === "?" ||
57
+ pattern[patternIndex] === value[valueIndex]) &&
58
+ visit(patternIndex + 1, valueIndex + 1);
59
+ memo.set(key, result);
60
+ return result;
61
+ };
62
+ return visit(0, 0);
63
+ }
64
+ function globMatch(pattern, value) {
65
+ const patterns = pattern.split("/").filter(Boolean);
66
+ const parts = value.split("/").filter(Boolean);
67
+ if (!pattern.includes("/")) {
68
+ return parts.length > 0 && segmentMatch(pattern, parts[parts.length - 1]);
69
+ }
70
+ const memo = new Map();
71
+ const visit = (patternIndex, valueIndex) => {
72
+ const key = `${patternIndex}:${valueIndex}`;
73
+ const cached = memo.get(key);
74
+ if (cached !== undefined)
75
+ return cached;
76
+ const current = patterns[patternIndex];
77
+ const result = patternIndex === patterns.length
78
+ ? valueIndex === parts.length
79
+ : current === "**"
80
+ ? visit(patternIndex + 1, valueIndex) ||
81
+ (valueIndex < parts.length && visit(patternIndex, valueIndex + 1))
82
+ : valueIndex < parts.length &&
83
+ segmentMatch(current, parts[valueIndex]) &&
84
+ visit(patternIndex + 1, valueIndex + 1);
85
+ memo.set(key, result);
86
+ return result;
87
+ };
88
+ return visit(0, 0);
89
+ }
90
+ function contentLines(content) {
91
+ if (content === "")
92
+ return [];
93
+ return content.match(/.*(?:\n|$)/g)?.filter(Boolean) ?? [];
94
+ }
95
+ /** A run-local, immutable view of the exact selected skill files. */
96
+ export class SelectedSkillsBackend {
97
+ files;
98
+ constructor(fullPaths) {
99
+ if (fullPaths.size > MAX_SELECTED_SKILL_FILES) {
100
+ throw new Error("selected skills exceed the file limit");
101
+ }
102
+ const files = new Map();
103
+ let totalBytes = 0;
104
+ for (const [fullPath, content] of fullPaths) {
105
+ const normalized = normalizeSelectedSkillPath(fullPath);
106
+ if (!normalized.startsWith("/skills/") || typeof content !== "string") {
107
+ throw new Error("invalid selected skill file");
108
+ }
109
+ const size = Buffer.byteLength(content, "utf8");
110
+ if (size > MAX_SELECTED_SKILL_FILE_BYTES) {
111
+ throw new Error("selected skill file exceeds the size limit");
112
+ }
113
+ totalBytes += size;
114
+ if (totalBytes > MAX_SELECTED_SKILL_TOTAL_BYTES) {
115
+ throw new Error("selected skills exceed the total size limit");
116
+ }
117
+ files.set(normalized.slice("/skills".length), content);
118
+ }
119
+ this.files = files;
120
+ }
121
+ get fileCount() {
122
+ return this.files.size;
123
+ }
124
+ async ls(path = "/") {
125
+ const root = normalizeSelectedSkillPath(path);
126
+ const prefix = root === "/" ? "/" : `${root}/`;
127
+ const entries = new Map();
128
+ for (const file of this.files.keys()) {
129
+ if (!file.startsWith(prefix))
130
+ continue;
131
+ const rest = file.slice(prefix.length);
132
+ const first = rest.split("/")[0];
133
+ if (!first)
134
+ continue;
135
+ const directory = rest.includes("/");
136
+ const entry = `${prefix}${first}${directory ? "/" : ""}`;
137
+ entries.set(entry, { path: entry, is_dir: directory });
138
+ }
139
+ return { files: [...entries.values()] };
140
+ }
141
+ async read(path, offset = 0, limit = 2000) {
142
+ const content = this.files.get(normalizeSelectedSkillPath(path));
143
+ if (content === undefined)
144
+ return { error: "file_not_found" };
145
+ if (offset < 0 || limit < 0)
146
+ return { error: "invalid_path" };
147
+ const lines = contentLines(content);
148
+ if (lines.length === 0) {
149
+ return offset === 0
150
+ ? { content: "", mimeType: "text/plain", totalLines: 0 }
151
+ : { error: "line_offset_out_of_range" };
152
+ }
153
+ if (offset >= lines.length)
154
+ return { error: "line_offset_out_of_range" };
155
+ if (limit === 0)
156
+ return { content: "", mimeType: "text/plain" };
157
+ const end = Math.min(lines.length, offset + limit);
158
+ return {
159
+ content: lines.slice(offset, end).join(""),
160
+ mimeType: "text/markdown",
161
+ totalLines: lines.length,
162
+ startLine: offset + 1,
163
+ endLine: end,
164
+ ...(end < lines.length ? { nextOffset: end } : {}),
165
+ };
166
+ }
167
+ async readRaw(path) {
168
+ const content = this.files.get(normalizeSelectedSkillPath(path));
169
+ return content === undefined
170
+ ? { error: "file_not_found" }
171
+ : {
172
+ data: {
173
+ content,
174
+ mimeType: "text/markdown",
175
+ created_at: EPOCH,
176
+ modified_at: EPOCH,
177
+ },
178
+ };
179
+ }
180
+ async glob(pattern, path = "/") {
181
+ const root = normalizeSelectedSkillPath(path);
182
+ const safePattern = normalizeGlob(pattern, root);
183
+ const files = [];
184
+ for (const file of this.files.keys()) {
185
+ const relative = relativeSearchPath(file, root);
186
+ if (relative !== undefined && globMatch(safePattern, relative)) {
187
+ files.push({ path: file, is_dir: false });
188
+ }
189
+ }
190
+ return { files };
191
+ }
192
+ async grep(pattern, path = "/", glob, maxCount) {
193
+ if (maxCount !== undefined && maxCount !== null && maxCount <= 0) {
194
+ return { matches: [], truncated: true };
195
+ }
196
+ const root = normalizeSelectedSkillPath(path ?? "/");
197
+ const safeGlob = glob ? normalizeGlob(glob, root) : undefined;
198
+ const matches = [];
199
+ for (const [file, content] of this.files) {
200
+ const relative = relativeSearchPath(file, root);
201
+ if (relative === undefined)
202
+ continue;
203
+ if (safeGlob && !globMatch(safeGlob, relative))
204
+ continue;
205
+ for (const [index, line] of content.split("\n").entries()) {
206
+ if (line.includes(pattern)) {
207
+ matches.push({ path: file, line: index + 1, text: line });
208
+ }
209
+ if (maxCount != null && matches.length >= maxCount) {
210
+ return { matches, truncated: true };
211
+ }
212
+ }
213
+ }
214
+ return { matches };
215
+ }
216
+ async write(_path, _content) {
217
+ throw new Error("skills mount is read-only");
218
+ }
219
+ async edit(_path, _old, _next, _replaceAll = false) {
220
+ throw new Error("skills mount is read-only");
221
+ }
222
+ async delete(_path) {
223
+ throw new Error("skills mount is read-only");
224
+ }
225
+ async uploadFiles(_files) {
226
+ throw new Error("skills mount is read-only");
227
+ }
228
+ async downloadFiles(paths) {
229
+ const encoder = new TextEncoder();
230
+ return paths.map((path) => {
231
+ const content = this.files.get(normalizeSelectedSkillPath(path));
232
+ return content === undefined
233
+ ? { path, content: null, error: "file_not_found" }
234
+ : { path, content: encoder.encode(content), error: null };
235
+ });
236
+ }
237
+ }
238
+ //# sourceMappingURL=selected-skills-backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selected-skills-backend.js","sourceRoot":"","sources":["../../src/runtime/selected-skills-backend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { BackendProtocolV2 } from "deepagents";
2
+ import type { GeneratedSkill, SkillSelection } from "../types.js";
3
+ import { SelectedSkillsBackend } from "./selected-skills-backend.js";
4
+ export interface ResolvedSkills {
5
+ backend: SelectedSkillsBackend;
6
+ hasSkills: boolean;
7
+ }
8
+ export declare function skillMarkdown(skill: GeneratedSkill): string;
9
+ export declare function resolveSelectedSkills(selection: SkillSelection, source: {
10
+ contextBackend?: BackendProtocolV2;
11
+ localRoot?: string;
12
+ }): Promise<ResolvedSkills>;
13
+ //# sourceMappingURL=selected-skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selected-skills.d.ts","sourceRoot":"","sources":["../../src/runtime/selected-skills.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAY,MAAM,YAAY,CAAC;AAQ9D,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAKL,qBAAqB,EACtB,MAAM,8BAA8B,CAAC;AAItC,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,qBAAqB,CAAC;IAC/B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAE3D;AAED,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,cAAc,EACzB,MAAM,EAAE;IAAE,cAAc,CAAC,EAAE,iBAAiB,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GACjE,OAAO,CAAC,cAAc,CAAC,CAgDzB"}
@@ -0,0 +1,257 @@
1
+ import { readdir, readFile, realpath, stat } from "node:fs/promises";
2
+ import { join, relative, sep } from "node:path";
3
+ import { isValidSkillFilePath, isValidSkillName, skillNameFromPath, snapshotSkillSelection, } from "../managed-composition.js";
4
+ import { MAX_SELECTED_SKILL_FILE_BYTES, MAX_SELECTED_SKILL_FILES, MAX_SELECTED_SKILL_TOTAL_BYTES, normalizeSelectedSkillPath, SelectedSkillsBackend, } from "./selected-skills-backend.js";
5
+ const SKILLS_ROOT = "/skills";
6
+ export function skillMarkdown(skill) {
7
+ return `---\nname: ${skill.name}\ndescription: ${JSON.stringify(skill.description)}\n---\n\n${skill.markdown}\n`;
8
+ }
9
+ export async function resolveSelectedSkills(selection, source) {
10
+ if (!Array.isArray(selection)) {
11
+ throw new TypeError("skills must be a list");
12
+ }
13
+ const normalized = normalizeSelection(selection);
14
+ if (normalized.length === 0) {
15
+ const backend = new SelectedSkillsBackend(new Map());
16
+ return { backend, hasSkills: false };
17
+ }
18
+ const inventory = source.localRoot
19
+ ? await localSkillInventory(source.localRoot)
20
+ : source.contextBackend
21
+ ? await backendSkillInventory(source.contextBackend)
22
+ : new Set();
23
+ const files = new Map();
24
+ for (const skill of normalized) {
25
+ if (typeof skill === "string") {
26
+ if (!inventory.has(skill)) {
27
+ throw new Error("selected skill path does not reference an authored skill");
28
+ }
29
+ const copied = source.localRoot
30
+ ? await copyLocalSkill(source.localRoot, skill)
31
+ : source.contextBackend
32
+ ? await copyBackendSkill(source.contextBackend, skill)
33
+ : undefined;
34
+ if (!copied) {
35
+ throw new Error("selected skill source is unavailable");
36
+ }
37
+ for (const [path, content] of copied)
38
+ addSelectedFile(files, path, content);
39
+ continue;
40
+ }
41
+ if (inventory.has(skill.name)) {
42
+ throw new Error("generated skill name conflicts with an authored skill");
43
+ }
44
+ addSelectedFile(files, `${SKILLS_ROOT}/${skill.name}/SKILL.md`, skillMarkdown(skill));
45
+ for (const [path, content] of Object.entries(skill.files ?? {})) {
46
+ addSelectedFile(files, `${SKILLS_ROOT}/${skill.name}/${path}`, content);
47
+ }
48
+ }
49
+ const backend = new SelectedSkillsBackend(files);
50
+ return { backend, hasSkills: backend.fileCount > 0 };
51
+ }
52
+ function normalizeSelection(selection) {
53
+ return snapshotSkillSelection(selection).map((skill) => {
54
+ if (typeof skill !== "string")
55
+ return skill;
56
+ const name = skillNameFromPath(skill);
57
+ if (name === undefined) {
58
+ throw new TypeError("skills contains an invalid path");
59
+ }
60
+ return name;
61
+ });
62
+ }
63
+ async function backendSkillInventory(backend) {
64
+ const result = await backend.ls(SKILLS_ROOT);
65
+ if (result.error)
66
+ return new Set();
67
+ const names = new Set();
68
+ for (const entry of result.files ?? []) {
69
+ const path = normalizeInventoryPath(entry.path);
70
+ const suffix = path.slice(`${SKILLS_ROOT}/`.length);
71
+ const name = suffix.split("/")[0];
72
+ if (name && isValidSkillName(name))
73
+ names.add(name);
74
+ }
75
+ return names;
76
+ }
77
+ function normalizeInventoryPath(path) {
78
+ const normalized = normalizeSelectedSkillPath(path);
79
+ if (!normalized.startsWith(`${SKILLS_ROOT}/`)) {
80
+ throw new Error("authored skills contain an invalid path");
81
+ }
82
+ return normalized;
83
+ }
84
+ async function copyBackendSkill(backend, name) {
85
+ const root = `${SKILLS_ROOT}/${name}`;
86
+ const files = new Map();
87
+ const visited = new Set();
88
+ const walk = async (directory) => {
89
+ const normalizedDirectory = normalizeInventoryPath(directory);
90
+ if (normalizedDirectory !== root &&
91
+ !normalizedDirectory.startsWith(`${root}/`)) {
92
+ throw new Error("selected skill contains an invalid path");
93
+ }
94
+ if (visited.has(normalizedDirectory))
95
+ return;
96
+ visited.add(normalizedDirectory);
97
+ const result = await backend.ls(normalizedDirectory);
98
+ if (result.error || !result.files) {
99
+ throw new Error("selected skill is not readable");
100
+ }
101
+ for (const entry of result.files) {
102
+ const path = normalizeInventoryPath(entry.path);
103
+ if (path !== root && !path.startsWith(`${root}/`)) {
104
+ throw new Error("selected skill contains an invalid path");
105
+ }
106
+ if (isDirectory(entry)) {
107
+ await walk(path);
108
+ }
109
+ else {
110
+ validateCopiedFilePath(path.slice(`${root}/`.length));
111
+ if (entry.size !== undefined &&
112
+ entry.size > MAX_SELECTED_SKILL_FILE_BYTES) {
113
+ throw new Error("selected skill file exceeds the size limit");
114
+ }
115
+ const raw = await backend.readRaw(path);
116
+ if (raw.error || raw.data?.content === undefined) {
117
+ throw new Error("selected skill file is not readable");
118
+ }
119
+ addSelectedFile(files, path, decodeText(raw.data.content));
120
+ }
121
+ }
122
+ };
123
+ await walk(root);
124
+ assertSkillMarkdown(files, root);
125
+ return files;
126
+ }
127
+ function isDirectory(entry) {
128
+ return entry.is_dir === true || entry.path.endsWith("/");
129
+ }
130
+ function decodeText(content) {
131
+ if (typeof content === "string")
132
+ return content;
133
+ if (Array.isArray(content))
134
+ return content.join("\n");
135
+ try {
136
+ return new TextDecoder("utf-8", { fatal: true }).decode(content);
137
+ }
138
+ catch {
139
+ throw new Error("selected skill file must be UTF-8 text");
140
+ }
141
+ }
142
+ async function localSkillInventory(localRoot) {
143
+ const root = join(localRoot, "skills");
144
+ let entries;
145
+ try {
146
+ entries = await readdir(root, { withFileTypes: true });
147
+ }
148
+ catch {
149
+ return new Set();
150
+ }
151
+ const names = new Set();
152
+ for (const entry of entries) {
153
+ if (!isValidSkillName(entry.name))
154
+ continue;
155
+ if (entry.isDirectory()) {
156
+ names.add(entry.name);
157
+ }
158
+ else if (entry.isSymbolicLink()) {
159
+ const target = await containedRealPath(root, join(root, entry.name));
160
+ if ((await stat(target)).isDirectory())
161
+ names.add(entry.name);
162
+ }
163
+ }
164
+ return names;
165
+ }
166
+ async function copyLocalSkill(localRoot, name) {
167
+ const skillsRoot = join(localRoot, "skills");
168
+ const skillRoot = await containedRealPath(skillsRoot, join(skillsRoot, name));
169
+ if (!(await stat(skillRoot)).isDirectory()) {
170
+ throw new Error("selected skill is not a directory");
171
+ }
172
+ const files = new Map();
173
+ const visited = new Set();
174
+ const walk = async (physicalDirectory, logicalDirectory) => {
175
+ const canonical = await containedRealPath(skillsRoot, physicalDirectory);
176
+ if (visited.has(canonical)) {
177
+ throw new Error("selected skill contains an invalid symlink");
178
+ }
179
+ visited.add(canonical);
180
+ for (const entry of await readdir(canonical, { withFileTypes: true })) {
181
+ const logical = logicalDirectory
182
+ ? `${logicalDirectory}/${entry.name}`
183
+ : entry.name;
184
+ validateCopiedFilePath(logical);
185
+ const physical = join(canonical, entry.name);
186
+ const resolved = entry.isSymbolicLink()
187
+ ? await containedRealPath(skillsRoot, physical)
188
+ : physical;
189
+ const info = entry.isSymbolicLink() ? await stat(resolved) : undefined;
190
+ if (entry.isDirectory() || info?.isDirectory()) {
191
+ await walk(resolved, logical);
192
+ }
193
+ else if (entry.isFile() || info?.isFile()) {
194
+ const fileInfo = info ?? (await stat(resolved));
195
+ if (fileInfo.size > MAX_SELECTED_SKILL_FILE_BYTES) {
196
+ throw new Error("selected skill file exceeds the size limit");
197
+ }
198
+ const content = await readFile(resolved);
199
+ addSelectedFile(files, `${SKILLS_ROOT}/${name}/${logical}`, decodeText(new Uint8Array(content)));
200
+ }
201
+ else {
202
+ throw new Error("selected skill contains an unsupported file");
203
+ }
204
+ }
205
+ };
206
+ await walk(skillRoot, "");
207
+ assertSkillMarkdown(files, `${SKILLS_ROOT}/${name}`);
208
+ return files;
209
+ }
210
+ function validateCopiedFilePath(path) {
211
+ if (path === "SKILL.md")
212
+ return;
213
+ if (!isValidSkillFilePath(path)) {
214
+ throw new Error("selected skill contains an invalid file path");
215
+ }
216
+ }
217
+ function assertSkillMarkdown(files, root) {
218
+ if (!files.has(`${root}/SKILL.md`)) {
219
+ throw new Error("selected skill is missing SKILL.md");
220
+ }
221
+ }
222
+ function addSelectedFile(files, path, content) {
223
+ if (!files.has(path) && files.size >= MAX_SELECTED_SKILL_FILES) {
224
+ throw new Error("selected skills exceed the file limit");
225
+ }
226
+ const size = Buffer.byteLength(content, "utf8");
227
+ if (size > MAX_SELECTED_SKILL_FILE_BYTES) {
228
+ throw new Error("selected skill file exceeds the size limit");
229
+ }
230
+ let total = size;
231
+ for (const [existingPath, existing] of files) {
232
+ if (existingPath !== path)
233
+ total += Buffer.byteLength(existing, "utf8");
234
+ }
235
+ if (total > MAX_SELECTED_SKILL_TOTAL_BYTES) {
236
+ throw new Error("selected skills exceed the total size limit");
237
+ }
238
+ files.set(path, content);
239
+ }
240
+ async function containedRealPath(root, candidate) {
241
+ let canonicalRoot;
242
+ let canonicalCandidate;
243
+ try {
244
+ canonicalRoot = await realpath(root);
245
+ canonicalCandidate = await realpath(candidate);
246
+ }
247
+ catch {
248
+ throw new Error("selected skill path is unavailable");
249
+ }
250
+ const pathFromRoot = relative(canonicalRoot, canonicalCandidate);
251
+ if (pathFromRoot === "" ||
252
+ (!pathFromRoot.startsWith(`..${sep}`) && pathFromRoot !== "..")) {
253
+ return canonicalCandidate;
254
+ }
255
+ throw new Error("selected skill symlink escapes the skills directory");
256
+ }
257
+ //# sourceMappingURL=selected-skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selected-skills.js","sourceRoot":"","sources":["../../src/runtime/selected-skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAIhD,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,EACxB,8BAA8B,EAC9B,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,WAAW,GAAG,SAAS,CAAC;AAO9B,MAAM,UAAU,aAAa,CAAC,KAAqB;IACjD,OAAO,cAAc,KAAK,CAAC,IAAI,kBAAkB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,KAAK,CAAC,QAAQ,IAAI,CAAC;AACnH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,SAAyB,EACzB,MAAkE;IAElE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,SAAS,CAAC,uBAAuB,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,UAAU,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACjD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,qBAAqB,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QACrD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACvC,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS;QAChC,CAAC,CAAC,MAAM,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC;QAC7C,CAAC,CAAC,MAAM,CAAC,cAAc;YACrB,CAAC,CAAC,MAAM,qBAAqB,CAAC,MAAM,CAAC,cAAc,CAAC;YACpD,CAAC,CAAC,IAAI,GAAG,EAAU,CAAC;IACxB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CACb,0DAA0D,CAC3D,CAAC;YACJ,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS;gBAC7B,CAAC,CAAC,MAAM,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;gBAC/C,CAAC,CAAC,MAAM,CAAC,cAAc;oBACrB,CAAC,CAAC,MAAM,gBAAgB,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC;oBACtD,CAAC,CAAC,SAAS,CAAC;YAChB,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC1D,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM;gBAClC,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YACxC,SAAS;QACX,CAAC;QACD,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QACD,eAAe,CACb,KAAK,EACL,GAAG,WAAW,IAAI,KAAK,CAAC,IAAI,WAAW,EACvC,aAAa,CAAC,KAAK,CAAC,CACrB,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;YAChE,eAAe,CAAC,KAAK,EAAE,GAAG,WAAW,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACjD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;AACvD,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAyB;IACnD,OAAO,sBAAsB,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACrD,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5C,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,IAAI,SAAS,CAAC,iCAAiC,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,OAA0B;IAE1B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;IAC7C,IAAI,MAAM,CAAC,KAAK;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,WAAW,GAAG,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,IAAI,IAAI,gBAAgB,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAY;IAC1C,MAAM,UAAU,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,WAAW,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,OAA0B,EAC1B,IAAY;IAEZ,MAAM,IAAI,GAAG,GAAG,WAAW,IAAI,IAAI,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,IAAI,GAAG,KAAK,EAAE,SAAiB,EAAiB,EAAE;QACtD,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;QAC9D,IACE,mBAAmB,KAAK,IAAI;YAC5B,CAAC,mBAAmB,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,EAC3C,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;YAAE,OAAO;QAC7C,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC;QACrD,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;gBAClD,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;YAC7D,CAAC;YACD,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvB,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;gBACtD,IACE,KAAK,CAAC,IAAI,KAAK,SAAS;oBACxB,KAAK,CAAC,IAAI,GAAG,6BAA6B,EAC1C,CAAC;oBACD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;gBAChE,CAAC;gBACD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACxC,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,SAAS,EAAE,CAAC;oBACjD,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;gBACzD,CAAC;gBACD,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACjC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,KAAe;IAClC,OAAO,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,UAAU,CAAC,OAAuC;IACzD,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,SAAiB;IAClD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACvC,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,SAAS;QAC5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACrE,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE;gBAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,SAAiB,EACjB,IAAY;IAEZ,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;IAC9E,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,IAAI,GAAG,KAAK,EAChB,iBAAyB,EACzB,gBAAwB,EACT,EAAE;QACjB,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QACzE,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,KAAK,MAAM,KAAK,IAAI,MAAM,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACtE,MAAM,OAAO,GAAG,gBAAgB;gBAC9B,CAAC,CAAC,GAAG,gBAAgB,IAAI,KAAK,CAAC,IAAI,EAAE;gBACrC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;YACf,sBAAsB,CAAC,OAAO,CAAC,CAAC;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,EAAE;gBACrC,CAAC,CAAC,MAAM,iBAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC;gBAC/C,CAAC,CAAC,QAAQ,CAAC;YACb,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACvE,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC;gBAC/C,MAAM,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAChC,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;gBAC5C,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAChD,IAAI,QAAQ,CAAC,IAAI,GAAG,6BAA6B,EAAE,CAAC;oBAClD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;gBAChE,CAAC;gBACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACzC,eAAe,CACb,KAAK,EACL,GAAG,WAAW,IAAI,IAAI,IAAI,OAAO,EAAE,EACnC,UAAU,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CACpC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC1B,mBAAmB,CAAC,KAAK,EAAE,GAAG,WAAW,IAAI,IAAI,EAAE,CAAC,CAAC;IACrD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAY;IAC1C,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO;IAChC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAkC,EAClC,IAAY;IAEZ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CACtB,KAA0B,EAC1B,IAAY,EACZ,OAAe;IAEf,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,wBAAwB,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAChD,IAAI,IAAI,GAAG,6BAA6B,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,KAAK,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,KAAK,EAAE,CAAC;QAC7C,IAAI,YAAY,KAAK,IAAI;YAAE,KAAK,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,KAAK,GAAG,8BAA8B,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC3B,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,IAAY,EACZ,SAAiB;IAEjB,IAAI,aAAqB,CAAC;IAC1B,IAAI,kBAA0B,CAAC;IAC/B,IAAI,CAAC;QACH,aAAa,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrC,kBAAkB,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IACD,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;IACjE,IACE,YAAY,KAAK,EAAE;QACnB,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,YAAY,KAAK,IAAI,CAAC,EAC/D,CAAC;QACD,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;AACzE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { DeepAgentDefinition } from "../types.js";
2
+ /** Reject run-selected fields on a static exported agent definition. */
3
+ export declare function assertStaticAgentDefinition(definition: DeepAgentDefinition): void;
4
+ //# sourceMappingURL=static-entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-entry.d.ts","sourceRoot":"","sources":["../../src/runtime/static-entry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AASvD,wEAAwE;AACxE,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,mBAAmB,GAC9B,IAAI,CAWN"}
@@ -0,0 +1,18 @@
1
+ const DYNAMIC_ONLY_FIELDS = [
2
+ "instructions",
3
+ "mcp",
4
+ "sandbox",
5
+ "skills",
6
+ ];
7
+ /** Reject run-selected fields on a static exported agent definition. */
8
+ export function assertStaticAgentDefinition(definition) {
9
+ if (Object.hasOwn(definition.config, "memory")) {
10
+ throw new Error("Remove `memory` from defineDeepAgent(...). Declare memory in memory.ts with defineMemory(...).");
11
+ }
12
+ for (const field of DYNAMIC_ONLY_FIELDS) {
13
+ if (Object.hasOwn(definition.config, field)) {
14
+ throw new Error(`\`${field}\` requires a dynamic(...) agent entrypoint`);
15
+ }
16
+ }
17
+ }
18
+ //# sourceMappingURL=static-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-entry.js","sourceRoot":"","sources":["../../src/runtime/static-entry.ts"],"names":[],"mappings":"AAEA,MAAM,mBAAmB,GAAG;IAC1B,cAAc;IACd,KAAK;IACL,SAAS;IACT,QAAQ;CACA,CAAC;AAEX,wEAAwE;AACxE,MAAM,UAAU,2BAA2B,CACzC,UAA+B;IAE/B,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CACb,gGAAgG,CACjG,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,mBAAmB,EAAE,CAAC;QACxC,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,6CAA6C,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;AACH,CAAC"}