@agents24/cli 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -7
- package/compatibility.json +7 -7
- package/dist/{chunk-MNGBA3HP.js → chunk-NLUCQTMN.js} +34 -26
- package/dist/chunk-NLUCQTMN.js.map +1 -0
- package/dist/cli.js +519 -105
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +53 -2
- package/dist/index.js +1 -3
- package/generated/schemas/resource-package/{1.0 → 2.0}/agent.schema.json +7 -2
- package/generated/schemas/resource-package/2.0/artifact.schema.json +67 -0
- package/generated/schemas/resource-package/{1.0 → 2.0}/manifest.schema.json +22 -4
- package/generated/schemas/resource-package/{1.0 → 2.0}/rag.schema.json +1 -1
- package/generated/schemas/resource-package/{1.0 → 2.0}/skill.schema.json +1 -1
- package/generated/schemas/resource-package/{1.0 → 2.0}/store.schema.json +7 -2
- package/generated/schemas/resource-package/{1.0 → 2.0}/workflow.schema.json +1 -1
- package/package.json +3 -3
- package/dist/chunk-MNGBA3HP.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# `@agents24/cli`
|
|
2
2
|
|
|
3
|
-
Last Updated: 2026-08-
|
|
3
|
+
Last Updated: 2026-08-13
|
|
4
4
|
|
|
5
5
|
Command-line tooling for editable `agents24.resource_package` source packages.
|
|
6
6
|
|
|
@@ -23,15 +23,18 @@ agents24 package export --kind agent --id <id> --target draft
|
|
|
23
23
|
agents24 package compile customer-service.agents24.zip --output bundle.json
|
|
24
24
|
agents24 package preview customer-service.agents24.zip
|
|
25
25
|
agents24 package import customer-service.agents24.zip --yes
|
|
26
|
-
agents24
|
|
26
|
+
agents24 prepare ./customer-service
|
|
27
|
+
agents24 plan ./customer-service
|
|
28
|
+
agents24 apply ./customer-service
|
|
29
|
+
agents24 publish ./customer-service
|
|
27
30
|
```
|
|
28
31
|
|
|
29
|
-
|
|
32
|
+
Package V2 uses stable resource keys and a durable server-side installation. `prepare` generates declared secrets in protected `.env.local`, `plan` compiles and shows reconciliation without mutation, and `apply` creates or updates the same product **as drafts only**. `publish` rejects source changed since its successful apply, then atomically promotes production-ready drafts. `setup` performs apply, publish, and detected-app configuration. `status` reports bindings and operation state; `link --resource <key>=<uuid>` explicitly adopts existing same-organization resources; `resources list --kind <kind>` aids discovery. `package import` remains create-only cloning. There is no top-level `install` command.
|
|
30
33
|
|
|
31
|
-
From a generated app, `
|
|
34
|
+
From a generated app, `setup` reads `package.json.agents24.integration`; `--app <directory>` selects another app. Later applies retain direct-client deployment IDs and Resource Policy assignments, or BFF API key plus Agent ID. `.env.local` is updated without disturbing unrelated values and is user-only; `--no-write-env` leaves application configuration for later.
|
|
32
35
|
|
|
33
|
-
The API key comes only from `AGENTS24_API_KEY` or an interactive masked prompt; `--api-key` is rejected.
|
|
36
|
+
The API key comes only from `AGENTS24_API_KEY` or an interactive masked prompt; `--api-key` is rejected. Remote Artifact signing values are created locally then synchronized through write-only APIs; neither values nor credentials appear in packages, plans, or output. MCP servers and OAuth remain external requirements.
|
|
34
37
|
|
|
35
|
-
|
|
38
|
+
The local installation pointer is `.agents24/installation-id` and must be ignored; CI uses `AGENTS24_INSTALLATION_ID`. `apply` is durable and resumable. Deleted declarations are retained by default; `apply --prune` removes only plan-confirmed resources. `dev` starts or attaches declared local self-hosted Artifact servers, opens one managed authenticated HMAC relay connection per Artifact, and applies drafts. A newly verified provisional relay supersedes the prior Artifact-wide relay; relay liveness is required for draft execution. It is a fixed Artifact protocol bridge, not a generic HTTP proxy; no local paths or secrets persist. Hosted Artifacts embed package source; `publish` verifies and atomically activates the deployed HTTPS production binding without mutating the development projection.
|
|
36
39
|
|
|
37
|
-
The canonical
|
|
40
|
+
The canonical tree is `agents24.yaml`, Workflows, Agent Markdown, RAG, Skills, Stores, optional Artifacts/source trees, managed `knowledge/` content, and optional `files/`. Local Artifact references use `$artifacts.*` plus an explicit export key. See the [resource movement guide](https://docs.agents24.dev/guides/move-resource-bundles) and [manifest schema](https://docs.agents24.dev/schemas/resource-package/2.0/manifest.schema.json).
|
package/compatibility.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"contractHash": "
|
|
2
|
+
"contractHash": "4012be62020727eb18b7e88cdc8067dcc605e1ecbe9d5acd12c51268e351a289",
|
|
3
3
|
"contractVersion": "0.2.0",
|
|
4
4
|
"corpus": "conformance/v1/corpus.json",
|
|
5
5
|
"generatedBy": "@agents24/sdk-contract",
|
|
@@ -15,11 +15,11 @@
|
|
|
15
15
|
"reactDom": ">=19 <20"
|
|
16
16
|
},
|
|
17
17
|
"@agents24/client": {
|
|
18
|
-
"contract": "
|
|
18
|
+
"contract": "a409af6996d10a8d94e0f6332c9a381c3535a9c8511314b6c42b237d7e057029",
|
|
19
19
|
"runtime": "run-stream.v3"
|
|
20
20
|
},
|
|
21
21
|
"@agents24/node": {
|
|
22
|
-
"contract": "
|
|
22
|
+
"contract": "4012be62020727eb18b7e88cdc8067dcc605e1ecbe9d5acd12c51268e351a289",
|
|
23
23
|
"node": "^22.0.0 || ^24.0.0"
|
|
24
24
|
},
|
|
25
25
|
"@agents24/react": {
|
|
@@ -27,11 +27,11 @@
|
|
|
27
27
|
"react": ">=19 <20"
|
|
28
28
|
},
|
|
29
29
|
"@talmudpedia/runtime-sdk": {
|
|
30
|
-
"contract": "
|
|
30
|
+
"contract": "a409af6996d10a8d94e0f6332c9a381c3535a9c8511314b6c42b237d7e057029",
|
|
31
31
|
"protocolOwner": "@agents24/client"
|
|
32
32
|
},
|
|
33
33
|
"agents24": {
|
|
34
|
-
"contract": "
|
|
34
|
+
"contract": "4012be62020727eb18b7e88cdc8067dcc605e1ecbe9d5acd12c51268e351a289",
|
|
35
35
|
"python": ">=3.10"
|
|
36
36
|
}
|
|
37
37
|
},
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"schemaVersion": "agents24.compatibility.v1",
|
|
49
49
|
"targetOperationCounts": {
|
|
50
50
|
"client": 22,
|
|
51
|
-
"node":
|
|
52
|
-
"python":
|
|
51
|
+
"node": 93,
|
|
52
|
+
"python": 84
|
|
53
53
|
}
|
|
54
54
|
}
|
|
@@ -25,7 +25,7 @@ function safePath(raw) {
|
|
|
25
25
|
if (parts.some((part) => !part || part === "." || part === "..")) throw new Error("Archive contains an unsafe path");
|
|
26
26
|
if (parts.length > MAX_DEPTH) throw new Error(`Archive path exceeds depth ${MAX_DEPTH}: ${raw}`);
|
|
27
27
|
if (/\.(?:zip|tar|tgz|gz)$/i.test(raw)) throw new Error(`Nested archives are unsupported: ${raw}`);
|
|
28
|
-
if (!/\.(?:yaml|md)$/.test(raw) || raw.endsWith(".yml")) throw new Error(`Unsupported package file: ${raw}`);
|
|
28
|
+
if (!/\.(?:yaml|md|txt|html|json|csv|py|js|mjs|ts)$/.test(raw) || raw.endsWith(".yml")) throw new Error(`Unsupported package file: ${raw}`);
|
|
29
29
|
return raw;
|
|
30
30
|
}
|
|
31
31
|
function writeUInt32(value) {
|
|
@@ -181,8 +181,8 @@ var MANIFEST = "agents24.yaml";
|
|
|
181
181
|
var SYMBOL = /^\$(workflows|rag|skills|models|stores|tools|toolsets|artifacts|integrations|secrets)\.([a-z0-9]+(?:-[a-z0-9]+)*)$/;
|
|
182
182
|
var UUID = /\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/i;
|
|
183
183
|
var URL_PATTERN = /\b[A-Za-z][A-Za-z0-9+.-]*:\/\//;
|
|
184
|
-
var LOCAL = /^(workflows|agents|rag|skills|stores|files
|
|
185
|
-
var SECRET_FIELDS = /* @__PURE__ */ new Set(["access_token", "api_key", "authorization", "bearer_token", "client_secret", "credential", "credentials", "fixed_account_connection_id", "oauth_client_id", "oauth_client_secret", "password", "private_key", "refresh_token", "secret_name", "secret_value", "static_bearer_token", "static_headers", "token", "
|
|
184
|
+
var LOCAL = /^(workflows|agents|rag|skills|stores|artifacts|files|knowledge)\//;
|
|
185
|
+
var SECRET_FIELDS = /* @__PURE__ */ new Set(["access_token", "api_key", "authorization", "bearer_token", "client_secret", "credential", "credentials", "fixed_account_connection_id", "oauth_client_id", "oauth_client_secret", "password", "private_key", "refresh_token", "secret_name", "secret_value", "static_bearer_token", "static_headers", "token", "account_id", "organization_id", "project_id", "publication_state", "governance_policy"]);
|
|
186
186
|
function add(rows, severity, code, itemPath, message) {
|
|
187
187
|
rows.push({ severity, code, path: itemPath, message });
|
|
188
188
|
}
|
|
@@ -213,17 +213,18 @@ function markdownBody(text) {
|
|
|
213
213
|
return match?.[1] || "";
|
|
214
214
|
}
|
|
215
215
|
function schema(name) {
|
|
216
|
-
const location = new URL(`../generated/schemas/resource-package/
|
|
216
|
+
const location = new URL(`../generated/schemas/resource-package/2.0/${name}.schema.json`, import.meta.url);
|
|
217
217
|
return JSON.parse(readSync(fileURLToPath(location), "utf8"));
|
|
218
218
|
}
|
|
219
219
|
var AjvConstructor = Ajv2020;
|
|
220
|
-
var ajv = new AjvConstructor({ allErrors: true, strict: true, strictRequired: false });
|
|
221
|
-
var validators = Object.fromEntries(["manifest", "workflow", "agent", "rag", "skill", "store"].map((name) => [name, ajv.compile(schema(name))]));
|
|
220
|
+
var ajv = new AjvConstructor({ allErrors: true, strict: true, strictRequired: false, formats: { uri: true } });
|
|
221
|
+
var validators = Object.fromEntries(["manifest", "workflow", "agent", "rag", "skill", "store", "artifact"].map((name) => [name, ajv.compile(schema(name))]));
|
|
222
222
|
async function directoryFiles(root) {
|
|
223
223
|
const files = /* @__PURE__ */ new Map();
|
|
224
224
|
let total = 0;
|
|
225
225
|
async function visit(directory) {
|
|
226
226
|
for (const entry of await readdir(directory, { withFileTypes: true })) {
|
|
227
|
+
if ([".agents24", ".git", "node_modules"].includes(entry.name) || [".env.local", ".gitignore"].includes(entry.name)) continue;
|
|
227
228
|
const absolute = path.join(directory, entry.name);
|
|
228
229
|
const relative = path.relative(root, absolute).split(path.sep).join("/");
|
|
229
230
|
const metadata = await lstat(absolute);
|
|
@@ -234,7 +235,7 @@ async function directoryFiles(root) {
|
|
|
234
235
|
}
|
|
235
236
|
if (!metadata.isFile()) continue;
|
|
236
237
|
if (relative.split("/").length > 12) throw new Error(`Package path exceeds depth 12: ${relative}`);
|
|
237
|
-
if (!/\.(?:yaml|md)$/.test(relative) || relative.endsWith(".yml")) throw new Error(`Unsupported package file: ${relative}`);
|
|
238
|
+
if (!/\.(?:yaml|md|txt|html|json|csv|py|js|mjs|ts)$/.test(relative) || relative.endsWith(".yml")) throw new Error(`Unsupported package file: ${relative}`);
|
|
238
239
|
if (metadata.size > 2 * 1024 * 1024) throw new Error(`Package file exceeds the 2 MiB limit: ${relative}`);
|
|
239
240
|
total += metadata.size;
|
|
240
241
|
if (total > 10 * 1024 * 1024) throw new Error("Package exceeds the 10 MiB uncompressed limit");
|
|
@@ -285,7 +286,14 @@ function validateFiles(files) {
|
|
|
285
286
|
else if (/^rag\/[a-z0-9][a-z0-9-]*\.yaml$/.test(filePath)) kind = "rag";
|
|
286
287
|
else if (/^skills\/[a-z0-9][a-z0-9-]*\.md$/.test(filePath)) kind = "skill";
|
|
287
288
|
else if (/^stores\/[a-z0-9][a-z0-9-]*\.yaml$/.test(filePath)) kind = "store";
|
|
288
|
-
else if (/^
|
|
289
|
+
else if (/^artifacts\/[a-z0-9][a-z0-9-]*\/artifact\.yaml$/.test(filePath)) kind = "artifact";
|
|
290
|
+
else if (/^artifacts\/[a-z0-9][a-z0-9-]*\/src\/.+\.(?:py|js|mjs|ts)$/.test(filePath)) {
|
|
291
|
+
parsed.set(filePath, {});
|
|
292
|
+
continue;
|
|
293
|
+
} else if (/^knowledge\/.+\.(?:md|txt|html|json|csv)$/.test(filePath)) {
|
|
294
|
+
parsed.set(filePath, {});
|
|
295
|
+
continue;
|
|
296
|
+
} else if (/^files\/.+\.md$/.test(filePath)) {
|
|
289
297
|
parsed.set(filePath, {});
|
|
290
298
|
continue;
|
|
291
299
|
}
|
|
@@ -293,16 +301,20 @@ function validateFiles(files) {
|
|
|
293
301
|
add(diagnostics, "error", "UNKNOWN_FILE", filePath, "File is not in a canonical package directory");
|
|
294
302
|
continue;
|
|
295
303
|
}
|
|
296
|
-
const value = kind === "workflow" || kind === "rag" || kind === "store" ? parseYaml(text, filePath, diagnostics) : frontmatter(text, filePath, diagnostics);
|
|
304
|
+
const value = kind === "workflow" || kind === "rag" || kind === "store" || kind === "artifact" ? parseYaml(text, filePath, diagnostics) : frontmatter(text, filePath, diagnostics);
|
|
297
305
|
validateSchema(kind, value, filePath, diagnostics);
|
|
298
306
|
if ((kind === "agent" || kind === "skill") && (UUID.test(markdownBody(text).trim()) || URL_PATTERN.test(markdownBody(text).trim()))) {
|
|
299
307
|
add(diagnostics, "error", "FORBIDDEN_VALUE", `${filePath}/body`, "Platform UUIDs and URLs are forbidden in source packages");
|
|
300
308
|
}
|
|
301
309
|
parsed.set(filePath, value);
|
|
302
|
-
if (kind !== "agent") resources.push({ path: filePath, kind: kind === "workflow" ? "agent" : kind === "rag" ? "rag_pipeline" : kind === "store" ? "knowledge_store" : "instruction", name: value.name });
|
|
310
|
+
if (kind !== "agent") resources.push({ path: filePath, kind: kind === "workflow" ? "agent" : kind === "rag" ? "rag_pipeline" : kind === "store" ? "knowledge_store" : kind === "skill" ? "instruction" : kind, name: value.name });
|
|
303
311
|
}
|
|
304
|
-
const
|
|
305
|
-
|
|
312
|
+
const declarations = Array.isArray(manifest.resources) ? manifest.resources.filter((item) => Boolean(item && typeof item === "object" && !Array.isArray(item))) : [];
|
|
313
|
+
const declaredRows = declarations.map((item) => String(item.path || ""));
|
|
314
|
+
const declaredKeys = declarations.map((item) => String(item.key || ""));
|
|
315
|
+
if (declaredKeys.some((item, index) => item !== [...declaredKeys].sort()[index])) add(diagnostics, "error", "RESOURCE_ORDER", MANIFEST, "resources must be sorted by key");
|
|
316
|
+
if (new Set(declaredKeys).size !== declaredKeys.length) add(diagnostics, "error", "RESOURCE_KEY_DUPLICATE", MANIFEST, "resource keys must be unique");
|
|
317
|
+
if (new Set(declaredRows).size !== declaredRows.length) add(diagnostics, "error", "RESOURCE_PATH_DUPLICATE", MANIFEST, "resource paths must be unique");
|
|
306
318
|
const declared = new Set(declaredRows);
|
|
307
319
|
const platformResources = new Set(resources.map((item) => String(item.path)));
|
|
308
320
|
declaredRows.forEach((filePath, index) => {
|
|
@@ -328,15 +340,16 @@ function validateFiles(files) {
|
|
|
328
340
|
walk(value, (item, itemPath, key) => {
|
|
329
341
|
if (key && SECRET_FIELDS.has(key.toLowerCase())) add(diagnostics, "error", "FORBIDDEN_FIELD", source + itemPath, "Secret and platform identity fields are forbidden");
|
|
330
342
|
if (typeof item !== "string") return;
|
|
331
|
-
if (UUID.test(item)
|
|
343
|
+
if (UUID.test(item)) add(diagnostics, "error", "FORBIDDEN_VALUE", source + itemPath, "Platform UUIDs are forbidden in source packages");
|
|
344
|
+
if (URL_PATTERN.test(item) && !(source.startsWith("artifacts/") && ["/development/base_url", "/production/base_url"].includes(itemPath))) add(diagnostics, "error", "FORBIDDEN_VALUE", source + itemPath, "URLs are allowed only in schema-owned connection fields");
|
|
332
345
|
const symbol = SYMBOL.exec(item);
|
|
333
346
|
if (symbol) {
|
|
334
347
|
referenceCount += 1;
|
|
335
|
-
const
|
|
336
|
-
if (!
|
|
348
|
+
const declarations2 = manifest.requires?.[symbol[1]];
|
|
349
|
+
if (!declarations2 || !(symbol[2] in declarations2)) add(diagnostics, "error", "REQUIREMENT_UNDECLARED", source + itemPath, `${item} is not declared`);
|
|
337
350
|
}
|
|
338
|
-
const target = resolve(source, item);
|
|
339
|
-
const platformTarget = Boolean(target && /^(workflows|rag|skills|stores)\//.test(target));
|
|
351
|
+
const target = item.startsWith("../") || item.startsWith("./") ? resolve(source, item) : null;
|
|
352
|
+
const platformTarget = Boolean(target && /^(workflows|rag|skills|stores|artifacts)\//.test(target));
|
|
340
353
|
if (target && (platformTarget || ["uses", "skills", "instructions", "file"].includes(String(key)))) {
|
|
341
354
|
referenceCount += 1;
|
|
342
355
|
if (!parsed.has(target)) add(diagnostics, "error", "LOCAL_REFERENCE_MISSING", source + itemPath, `Missing local reference: ${target}`);
|
|
@@ -369,8 +382,10 @@ async function initializePackage(directory, packageName) {
|
|
|
369
382
|
await mkdir(path.join(directory, "rag"), { recursive: true });
|
|
370
383
|
await mkdir(path.join(directory, "skills"), { recursive: true });
|
|
371
384
|
await mkdir(path.join(directory, "stores"), { recursive: true });
|
|
385
|
+
await mkdir(path.join(directory, "artifacts"), { recursive: true });
|
|
386
|
+
await mkdir(path.join(directory, "knowledge"), { recursive: true });
|
|
372
387
|
await mkdir(path.join(directory, "files"), { recursive: true });
|
|
373
|
-
const manifest = { schema: "agents24.package/
|
|
388
|
+
const manifest = { schema: "agents24.package/v2", name: packageSlug, description: `${packageName} agent package`, resources: [{ key: "main", path: "workflows/main.yaml" }], requires: { models: { primary: { required: true, capability: "chat" } } } };
|
|
374
389
|
const workflow = { schema: "agents24.workflow/v1", name: packageName, description: "", inputs: { text: "string" }, outputs: { response: "string" }, entry: "assistant", nodes: { assistant: { uses: "../agents/assistant.md" } }, flow: [{ from: "assistant.output", to: "output.response" }] };
|
|
375
390
|
const agent = `---
|
|
376
391
|
schema: agents24.agent/v1
|
|
@@ -419,12 +434,6 @@ function parseMappings(items) {
|
|
|
419
434
|
function shouldPromptForDependency(dependency) {
|
|
420
435
|
return dependency.kind !== "model";
|
|
421
436
|
}
|
|
422
|
-
function assertInstallPreviewReady(preview) {
|
|
423
|
-
if (preview.can_import === true) return;
|
|
424
|
-
const blockers = Array.isArray(preview.blockers) ? preview.blockers : [];
|
|
425
|
-
const message = String(blockers[0]?.message || "Package cannot be installed");
|
|
426
|
-
throw new Error(message);
|
|
427
|
-
}
|
|
428
437
|
function assertImportAllowed(preview, options) {
|
|
429
438
|
const resources = Array.isArray(preview.resources) ? preview.resources : [];
|
|
430
439
|
if (resources.some((item) => item.status === "incomplete") && !options.allowIncomplete) {
|
|
@@ -444,7 +453,6 @@ export {
|
|
|
444
453
|
createRemoteClient,
|
|
445
454
|
parseMappings,
|
|
446
455
|
shouldPromptForDependency,
|
|
447
|
-
assertInstallPreviewReady,
|
|
448
456
|
assertImportAllowed
|
|
449
457
|
};
|
|
450
|
-
//# sourceMappingURL=chunk-
|
|
458
|
+
//# sourceMappingURL=chunk-NLUCQTMN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/archive.ts","../src/package-source.ts","../src/remote.ts","../src/import-guards.ts"],"sourcesContent":["import { inflateRawSync, deflateRawSync } from \"node:zlib\";\n\nconst MAX_COMPRESSED = 5 * 1024 * 1024;\nconst MAX_UNCOMPRESSED = 10 * 1024 * 1024;\nconst MAX_FILE = 2 * 1024 * 1024;\nconst MAX_FILES = 512;\nconst MAX_DEPTH = 12;\n\nconst CRC_TABLE = Array.from({ length: 256 }, (_, start) => {\n let value = start;\n for (let bit = 0; bit < 8; bit += 1) {\n value = (value & 1) ? 0xedb88320 ^ (value >>> 1) : value >>> 1;\n }\n return value >>> 0;\n});\n\nfunction crc32(value: Uint8Array): number {\n let crc = 0xffffffff;\n for (const byte of value) crc = CRC_TABLE[(crc ^ byte) & 0xff] ^ (crc >>> 8);\n return (crc ^ 0xffffffff) >>> 0;\n}\n\nfunction safePath(raw: string): string {\n if (!raw || raw.startsWith(\"/\") || raw.includes(\"\\\\\")) throw new Error(\"Archive contains an unsafe path\");\n const parts = raw.split(\"/\");\n if (parts.some((part) => !part || part === \".\" || part === \"..\")) throw new Error(\"Archive contains an unsafe path\");\n if (parts.length > MAX_DEPTH) throw new Error(`Archive path exceeds depth ${MAX_DEPTH}: ${raw}`);\n if (/\\.(?:zip|tar|tgz|gz)$/i.test(raw)) throw new Error(`Nested archives are unsupported: ${raw}`);\n if (!/\\.(?:yaml|md|txt|html|json|csv|py|js|mjs|ts)$/.test(raw) || raw.endsWith(\".yml\")) throw new Error(`Unsupported package file: ${raw}`);\n return raw;\n}\n\nfunction writeUInt32(value: number): Buffer {\n const result = Buffer.allocUnsafe(4);\n result.writeUInt32LE(value >>> 0);\n return result;\n}\n\nfunction writeUInt16(value: number): Buffer {\n const result = Buffer.allocUnsafe(2);\n result.writeUInt16LE(value);\n return result;\n}\n\nexport function packFiles(files: Map<string, string>): Uint8Array {\n if (files.size > MAX_FILES) throw new Error(\"Package exceeds the 512-file limit\");\n const localParts: Buffer[] = [];\n const centralParts: Buffer[] = [];\n let offset = 0;\n let total = 0;\n const normalized = new Set<string>();\n\n for (const [rawPath, text] of [...files.entries()].sort(([left], [right]) => left.localeCompare(right))) {\n const path = safePath(rawPath);\n const folded = path.toLocaleLowerCase(\"en-US\");\n if (normalized.has(folded)) throw new Error(`Package contains duplicate path: ${path}`);\n normalized.add(folded);\n const name = Buffer.from(path, \"utf8\");\n const content = Buffer.from(text, \"utf8\");\n if (content.byteLength > MAX_FILE) throw new Error(`Package file exceeds the 2 MiB limit: ${path}`);\n total += content.byteLength;\n if (total > MAX_UNCOMPRESSED) throw new Error(\"Package exceeds the 10 MiB uncompressed limit\");\n const compressed = deflateRawSync(content, { level: 9 });\n const checksum = crc32(content);\n const local = Buffer.concat([\n writeUInt32(0x04034b50),\n writeUInt16(20),\n writeUInt16(0x0800),\n writeUInt16(8),\n writeUInt16(0),\n writeUInt16(0x0021),\n writeUInt32(checksum),\n writeUInt32(compressed.byteLength),\n writeUInt32(content.byteLength),\n writeUInt16(name.byteLength),\n writeUInt16(0),\n name,\n compressed,\n ]);\n localParts.push(local);\n centralParts.push(Buffer.concat([\n writeUInt32(0x02014b50),\n writeUInt16(0x0314),\n writeUInt16(20),\n writeUInt16(0x0800),\n writeUInt16(8),\n writeUInt16(0),\n writeUInt16(0x0021),\n writeUInt32(checksum),\n writeUInt32(compressed.byteLength),\n writeUInt32(content.byteLength),\n writeUInt16(name.byteLength),\n writeUInt16(0),\n writeUInt16(0),\n writeUInt16(0),\n writeUInt16(0),\n writeUInt32(0o100644 << 16),\n writeUInt32(offset),\n name,\n ]));\n offset += local.byteLength;\n }\n\n const central = Buffer.concat(centralParts);\n const result = Buffer.concat([\n ...localParts,\n central,\n writeUInt32(0x06054b50),\n writeUInt16(0),\n writeUInt16(0),\n writeUInt16(files.size),\n writeUInt16(files.size),\n writeUInt32(central.byteLength),\n writeUInt32(offset),\n writeUInt16(0),\n ]);\n if (result.byteLength > MAX_COMPRESSED) throw new Error(\"Package exceeds the 5 MiB compressed limit\");\n return result;\n}\n\nfunction endOfCentralDirectory(data: Buffer): number {\n const minimum = Math.max(0, data.byteLength - 65557);\n for (let index = data.byteLength - 22; index >= minimum; index -= 1) {\n if (data.readUInt32LE(index) === 0x06054b50) return index;\n }\n throw new Error(\"Package must be a valid ZIP archive\");\n}\n\nexport function unpackFiles(value: Uint8Array): Map<string, string> {\n const data = Buffer.from(value);\n if (data.byteLength > MAX_COMPRESSED) throw new Error(\"Package exceeds the 5 MiB compressed limit\");\n const end = endOfCentralDirectory(data);\n const count = data.readUInt16LE(end + 10);\n const centralOffset = data.readUInt32LE(end + 16);\n if (count > MAX_FILES) throw new Error(\"Package exceeds the 512-file limit\");\n const files = new Map<string, string>();\n const normalized = new Set<string>();\n let cursor = centralOffset;\n let total = 0;\n\n for (let index = 0; index < count; index += 1) {\n if (data.readUInt32LE(cursor) !== 0x02014b50) throw new Error(\"Package central directory is invalid\");\n const method = data.readUInt16LE(cursor + 10);\n const expectedCrc = data.readUInt32LE(cursor + 16);\n const compressedSize = data.readUInt32LE(cursor + 20);\n const uncompressedSize = data.readUInt32LE(cursor + 24);\n const nameLength = data.readUInt16LE(cursor + 28);\n const extraLength = data.readUInt16LE(cursor + 30);\n const commentLength = data.readUInt16LE(cursor + 32);\n const externalAttributes = data.readUInt32LE(cursor + 38);\n const localOffset = data.readUInt32LE(cursor + 42);\n const path = safePath(data.subarray(cursor + 46, cursor + 46 + nameLength).toString(\"utf8\"));\n if ((externalAttributes >>> 16 & 0o170000) === 0o120000) throw new Error(`Package symlinks are unsupported: ${path}`);\n const folded = path.toLocaleLowerCase(\"en-US\");\n if (normalized.has(folded)) throw new Error(`Package contains duplicate path: ${path}`);\n normalized.add(folded);\n if (uncompressedSize > MAX_FILE) throw new Error(`Package file exceeds the 2 MiB limit: ${path}`);\n total += uncompressedSize;\n if (total > MAX_UNCOMPRESSED) throw new Error(\"Package exceeds the 10 MiB uncompressed limit\");\n if (data.readUInt32LE(localOffset) !== 0x04034b50) throw new Error(\"Package local header is invalid\");\n const localNameLength = data.readUInt16LE(localOffset + 26);\n const localExtraLength = data.readUInt16LE(localOffset + 28);\n const contentOffset = localOffset + 30 + localNameLength + localExtraLength;\n const compressed = data.subarray(contentOffset, contentOffset + compressedSize);\n let content: Buffer | null = null;\n try {\n content = method === 8\n ? inflateRawSync(compressed, { maxOutputLength: Math.min(MAX_FILE, uncompressedSize) + 1 })\n : method === 0 ? compressed : null;\n } catch {\n throw new Error(`Package file is invalid or exceeds its declared size: ${path}`);\n }\n if (!content || content.byteLength !== uncompressedSize || crc32(content) !== expectedCrc) {\n throw new Error(`Package file is invalid: ${path}`);\n }\n if (content.includes(0)) throw new Error(`Binary package file is unsupported: ${path}`);\n files.set(path, new TextDecoder(\"utf-8\", { fatal: true }).decode(content));\n cursor += 46 + nameLength + extraLength + commentLength;\n }\n if (!files.has(\"agents24.yaml\")) throw new Error(\"Package requires agents24.yaml at the archive root\");\n return files;\n}\n","import { lstat, mkdir, readFile, readdir, stat, writeFile } from \"node:fs/promises\";\nimport { readFileSync as readSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport Ajv2020 from \"ajv/dist/2020.js\";\nimport { parseDocument } from \"yaml\";\n\nimport { packFiles, unpackFiles } from \"./archive.js\";\n\nexport type Diagnostic = { severity: \"error\" | \"warning\"; code: string; path: string; message: string };\nexport type ValidationResult = {\n valid: boolean;\n package: Record<string, unknown>;\n resources: Array<Record<string, unknown>>;\n requirements: string[];\n diagnostics: Diagnostic[];\n files: Map<string, string>;\n};\n\nconst MANIFEST = \"agents24.yaml\";\nconst SYMBOL = /^\\$(workflows|rag|skills|models|stores|tools|toolsets|artifacts|integrations|secrets)\\.([a-z0-9]+(?:-[a-z0-9]+)*)$/;\nconst UUID = /\\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\b/i;\nconst URL_PATTERN = /\\b[A-Za-z][A-Za-z0-9+.-]*:\\/\\//;\nconst LOCAL = /^(workflows|agents|rag|skills|stores|artifacts|files|knowledge)\\//;\nconst SECRET_FIELDS = new Set([\"access_token\",\"api_key\",\"authorization\",\"bearer_token\",\"client_secret\",\"credential\",\"credentials\",\"fixed_account_connection_id\",\"oauth_client_id\",\"oauth_client_secret\",\"password\",\"private_key\",\"refresh_token\",\"secret_name\",\"secret_value\",\"static_bearer_token\",\"static_headers\",\"token\",\"account_id\",\"organization_id\",\"project_id\",\"publication_state\",\"governance_policy\"]);\n\nfunction add(rows: Diagnostic[], severity: Diagnostic[\"severity\"], code: string, itemPath: string, message: string): void {\n rows.push({ severity, code, path: itemPath, message });\n}\nfunction slug(value: string): string {\n return value.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-+|-+$/g, \"\").slice(0, 64) || \"agent\";\n}\nfunction parseYaml(text: string, itemPath: string, diagnostics: Diagnostic[]): Record<string, unknown> {\n const doc = parseDocument(text, { uniqueKeys: true });\n for (const error of doc.errors) add(diagnostics, \"error\", \"YAML_INVALID\", itemPath, error.message);\n if (doc.errors.length) return {};\n const value = doc.toJS({ maxAliasCount: 0 });\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n add(diagnostics, \"error\", \"YAML_INVALID\", itemPath, \"YAML source must contain a mapping\");\n return {};\n }\n return value as Record<string, unknown>;\n}\nfunction frontmatter(text: string, itemPath: string, diagnostics: Diagnostic[]): Record<string, unknown> {\n const match = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---(?:\\r?\\n|$)/.exec(text);\n if (!match) {\n add(diagnostics, \"error\", \"FRONTMATTER_REQUIRED\", itemPath, \"Markdown source requires YAML frontmatter\");\n return {};\n }\n return parseYaml(match[1], itemPath, diagnostics);\n}\nfunction markdownBody(text: string): string {\n const match = /^---\\r?\\n[\\s\\S]*?\\r?\\n---(?:\\r?\\n|$)([\\s\\S]*)$/.exec(text);\n return match?.[1] || \"\";\n}\nfunction schema(name: string): Record<string, unknown> {\n const location = new URL(`../generated/schemas/resource-package/2.0/${name}.schema.json`, import.meta.url);\n return JSON.parse(readSync(fileURLToPath(location), \"utf8\")) as Record<string, unknown>;\n}\nconst AjvConstructor = Ajv2020 as unknown as new (options: Record<string, unknown>) => {\n compile(schema: Record<string, unknown>): ((value: unknown) => boolean) & { errors?: Array<{ instancePath?: string; message?: string }> };\n};\nconst ajv = new AjvConstructor({ allErrors: true, strict: true, strictRequired: false, formats: { uri: true } });\nconst validators = Object.fromEntries([\"manifest\",\"workflow\",\"agent\",\"rag\",\"skill\",\"store\",\"artifact\"].map((name) => [name, ajv.compile(schema(name))]));\n\nasync function directoryFiles(root: string): Promise<Map<string, string>> {\n const files = new Map<string, string>();\n let total = 0;\n async function visit(directory: string): Promise<void> {\n for (const entry of await readdir(directory, { withFileTypes: true })) {\n if ([\".agents24\", \".git\", \"node_modules\"].includes(entry.name) || [\".env.local\", \".gitignore\"].includes(entry.name)) continue;\n const absolute = path.join(directory, entry.name);\n const relative = path.relative(root, absolute).split(path.sep).join(\"/\");\n const metadata = await lstat(absolute);\n if (metadata.isSymbolicLink()) throw new Error(`Package symlinks are unsupported: ${relative}`);\n if (metadata.isDirectory()) { await visit(absolute); continue; }\n if (!metadata.isFile()) continue;\n if (relative.split(\"/\").length > 12) throw new Error(`Package path exceeds depth 12: ${relative}`);\n if (!/\\.(?:yaml|md|txt|html|json|csv|py|js|mjs|ts)$/.test(relative) || relative.endsWith(\".yml\")) throw new Error(`Unsupported package file: ${relative}`);\n if (metadata.size > 2 * 1024 * 1024) throw new Error(`Package file exceeds the 2 MiB limit: ${relative}`);\n total += metadata.size;\n if (total > 10 * 1024 * 1024) throw new Error(\"Package exceeds the 10 MiB uncompressed limit\");\n const body = await readFile(absolute);\n if (body.includes(0)) throw new Error(`Binary package file is unsupported: ${relative}`);\n files.set(relative, new TextDecoder(\"utf-8\", { fatal: true }).decode(body));\n if (files.size > 512) throw new Error(\"Package exceeds the 512-file limit\");\n }\n }\n await visit(root);\n return files;\n}\nexport async function loadPackageFiles(input: string): Promise<Map<string, string>> {\n return (await stat(input)).isDirectory() ? directoryFiles(input) : unpackFiles(await readFile(input));\n}\nfunction validateSchema(kind: keyof typeof validators, value: Record<string, unknown>, itemPath: string, diagnostics: Diagnostic[]): void {\n const validate = validators[kind];\n if (validate(value)) return;\n for (const error of validate.errors || []) add(diagnostics, \"error\", \"SCHEMA_INVALID\", itemPath + (error.instancePath || \"\"), error.message || \"Schema validation failed\");\n}\nfunction resolve(source: string, target: string): string | null {\n if (!target || target.startsWith(\"/\") || target.includes(\"\\\\\")) return null;\n const value = path.posix.normalize(path.posix.join(path.posix.dirname(source), target));\n return value === \"..\" || value.startsWith(\"../\") || !LOCAL.test(value) ? null : value;\n}\nfunction walk(value: unknown, visit: (value: unknown, itemPath: string, key?: string) => void, itemPath = \"\", key?: string): void {\n visit(value, itemPath, key);\n if (Array.isArray(value)) value.forEach((item, index) => walk(item, visit, `${itemPath}/${index}`, key));\n else if (value && typeof value === \"object\") for (const [key, item] of Object.entries(value as Record<string, unknown>)) {\n walk(item, visit, `${itemPath}/${key}`, key);\n }\n}\n\nexport function validateFiles(files: Map<string, string>): ValidationResult {\n const diagnostics: Diagnostic[] = [];\n const manifest = parseYaml(files.get(MANIFEST) || \"\", MANIFEST, diagnostics);\n validateSchema(\"manifest\", manifest, MANIFEST, diagnostics);\n walk(manifest, (item, itemPath, key) => {\n if (key && SECRET_FIELDS.has(key.toLowerCase())) add(diagnostics, \"error\", \"FORBIDDEN_FIELD\", MANIFEST + itemPath, \"Secret and platform identity fields are forbidden\");\n if (typeof item === \"string\" && (UUID.test(item) || URL_PATTERN.test(item))) add(diagnostics, \"error\", \"FORBIDDEN_VALUE\", MANIFEST + itemPath, \"Platform UUIDs and URLs are forbidden in source packages\");\n });\n const parsed = new Map<string, Record<string, unknown>>();\n const resources: Array<Record<string, unknown>> = [];\n for (const [filePath, text] of [...files].sort(([left],[right]) => left.localeCompare(right))) {\n if (filePath === MANIFEST) continue;\n let kind: \"workflow\"|\"agent\"|\"rag\"|\"skill\"|\"store\"|\"artifact\"|null = null;\n if (/^workflows\\/[a-z0-9][a-z0-9-]*\\.yaml$/.test(filePath)) kind = \"workflow\";\n else if (/^agents\\/[a-z0-9][a-z0-9-]*\\.md$/.test(filePath)) kind = \"agent\";\n else if (/^rag\\/[a-z0-9][a-z0-9-]*\\.yaml$/.test(filePath)) kind = \"rag\";\n else if (/^skills\\/[a-z0-9][a-z0-9-]*\\.md$/.test(filePath)) kind = \"skill\";\n else if (/^stores\\/[a-z0-9][a-z0-9-]*\\.yaml$/.test(filePath)) kind = \"store\";\n else if (/^artifacts\\/[a-z0-9][a-z0-9-]*\\/artifact\\.yaml$/.test(filePath)) kind = \"artifact\";\n else if (/^artifacts\\/[a-z0-9][a-z0-9-]*\\/src\\/.+\\.(?:py|js|mjs|ts)$/.test(filePath)) { parsed.set(filePath, {}); continue; }\n else if (/^knowledge\\/.+\\.(?:md|txt|html|json|csv)$/.test(filePath)) { parsed.set(filePath, {}); continue; }\n else if (/^files\\/.+\\.md$/.test(filePath)) { parsed.set(filePath, {}); continue; }\n if (!kind) { add(diagnostics, \"error\", \"UNKNOWN_FILE\", filePath, \"File is not in a canonical package directory\"); continue; }\n const value = kind === \"workflow\" || kind === \"rag\" || kind === \"store\" || kind === \"artifact\" ? parseYaml(text, filePath, diagnostics) : frontmatter(text, filePath, diagnostics);\n validateSchema(kind, value, filePath, diagnostics);\n if ((kind === \"agent\" || kind === \"skill\") && (UUID.test(markdownBody(text).trim()) || URL_PATTERN.test(markdownBody(text).trim()))) {\n add(diagnostics, \"error\", \"FORBIDDEN_VALUE\", `${filePath}/body`, \"Platform UUIDs and URLs are forbidden in source packages\");\n }\n parsed.set(filePath, value);\n if (kind !== \"agent\") resources.push({ path: filePath, kind: kind === \"workflow\" ? \"agent\" : kind === \"rag\" ? \"rag_pipeline\" : kind === \"store\" ? \"knowledge_store\" : kind === \"skill\" ? \"instruction\" : kind, name: value.name });\n }\n const declarations = Array.isArray(manifest.resources) ? manifest.resources.filter((item): item is Record<string, unknown> => Boolean(item && typeof item === \"object\" && !Array.isArray(item))) : [];\n const declaredRows = declarations.map((item) => String(item.path || \"\"));\n const declaredKeys = declarations.map((item) => String(item.key || \"\"));\n if (declaredKeys.some((item, index) => item !== [...declaredKeys].sort()[index])) add(diagnostics, \"error\", \"RESOURCE_ORDER\", MANIFEST, \"resources must be sorted by key\");\n if (new Set(declaredKeys).size !== declaredKeys.length) add(diagnostics, \"error\", \"RESOURCE_KEY_DUPLICATE\", MANIFEST, \"resource keys must be unique\");\n if (new Set(declaredRows).size !== declaredRows.length) add(diagnostics, \"error\", \"RESOURCE_PATH_DUPLICATE\", MANIFEST, \"resource paths must be unique\");\n const declared = new Set(declaredRows);\n const platformResources = new Set(resources.map((item) => String(item.path)));\n declaredRows.forEach((filePath, index) => {\n if (!platformResources.has(filePath)) add(diagnostics, \"error\", \"RESOURCE_DECLARATION_INVALID\", `${MANIFEST}/resources/${index}`, `Declared resource does not exist or is not a platform resource: ${filePath}`);\n });\n for (const filePath of platformResources) if (!declared.has(filePath)) add(diagnostics, \"error\", \"RESOURCE_NOT_DECLARED\", filePath, \"Platform resource must be listed in agents24.yaml resources\");\n const reachable = new Set<string>();\n const queue = declaredRows.filter((filePath) => platformResources.has(filePath));\n let referenceCount = 0;\n while (queue.length) {\n const source = queue.shift() as string;\n if (reachable.has(source)) continue;\n reachable.add(source);\n const value = parsed.get(source) || {};\n if (source.startsWith(\"agents/\")) {\n for (const match of (files.get(source) || \"\").matchAll(/\\[\\[skill:([a-z0-9]+(?:-[a-z0-9]+)*)\\]\\]/g)) {\n referenceCount += 1;\n const target = `skills/${match[1]}.md`;\n if (!parsed.has(target)) add(diagnostics, \"error\", \"LOCAL_REFERENCE_MISSING\", `${source}/body`, `Missing local reference: ${target}`);\n else queue.push(target);\n }\n }\n walk(value, (item, itemPath, key) => {\n if (key && SECRET_FIELDS.has(key.toLowerCase())) add(diagnostics, \"error\", \"FORBIDDEN_FIELD\", source + itemPath, \"Secret and platform identity fields are forbidden\");\n if (typeof item !== \"string\") return;\n if (UUID.test(item)) add(diagnostics, \"error\", \"FORBIDDEN_VALUE\", source + itemPath, \"Platform UUIDs are forbidden in source packages\");\n if (URL_PATTERN.test(item) && !(\n source.startsWith(\"artifacts/\")\n && [\"/development/base_url\", \"/production/base_url\"].includes(itemPath)\n )) add(diagnostics, \"error\", \"FORBIDDEN_VALUE\", source + itemPath, \"URLs are allowed only in schema-owned connection fields\");\n const symbol = SYMBOL.exec(item);\n if (symbol) {\n referenceCount += 1;\n const declarations = (manifest.requires as Record<string, Record<string, unknown>> | undefined)?.[symbol[1]];\n if (!declarations || !(symbol[2] in declarations)) add(diagnostics, \"error\", \"REQUIREMENT_UNDECLARED\", source + itemPath, `${item} is not declared`);\n }\n const target = item.startsWith(\"../\") || item.startsWith(\"./\") ? resolve(source, item) : null;\n const platformTarget = Boolean(target && /^(workflows|rag|skills|stores|artifacts)\\//.test(target));\n if (target && (platformTarget || [\"uses\",\"skills\",\"instructions\",\"file\"].includes(String(key)))) {\n referenceCount += 1;\n if (!parsed.has(target)) add(diagnostics, \"error\", \"LOCAL_REFERENCE_MISSING\", source + itemPath, `Missing local reference: ${target}`);\n else {\n if (platformTarget && !declared.has(target)) add(diagnostics, \"error\", \"RESOURCE_NOT_DECLARED\", source + itemPath, `Referenced platform resource is not declared: ${target}`);\n queue.push(target);\n }\n }\n });\n }\n for (const filePath of parsed.keys()) if (/^(agents|files)\\//.test(filePath) && !reachable.has(filePath)) add(diagnostics, \"error\", \"ORPHAN_AUXILIARY\", filePath, \"Auxiliary file is not referenced by a declared resource\");\n if (resources.length > 250) add(diagnostics, \"error\", \"RESOURCE_LIMIT\", MANIFEST, \"Package exceeds 250 resources\");\n if (referenceCount > 5000) add(diagnostics, \"error\", \"REFERENCE_LIMIT\", MANIFEST, \"Package exceeds 5,000 references\");\n diagnostics.sort((left,right) => left.path.localeCompare(right.path) || left.code.localeCompare(right.code) || left.message.localeCompare(right.message));\n const requirements = [...new Set([...files.values()].flatMap((text) => [...text.matchAll(/\\$(?:workflows|rag|skills|models|stores|tools|toolsets|artifacts|integrations|secrets)\\.[a-z0-9-]+/g)].map((match) => match[0])))].sort();\n return { valid: !diagnostics.some((item) => item.severity === \"error\"), package: manifest, resources, requirements, diagnostics, files };\n}\nexport async function validatePackage(input: string): Promise<ValidationResult> {\n return validateFiles(await loadPackageFiles(input));\n}\nexport async function packPackage(input: string): Promise<Uint8Array> {\n const result = await validatePackage(input);\n if (!result.valid) throw Object.assign(new Error(\"Resource package is invalid\"), { diagnostics: result.diagnostics });\n return packFiles(result.files);\n}\nexport async function initializePackage(directory: string, packageName: string): Promise<string> {\n const packageSlug = slug(packageName);\n await mkdir(path.join(directory, \"workflows\"), { recursive: true });\n await mkdir(path.join(directory, \"agents\"), { recursive: true });\n await mkdir(path.join(directory, \"rag\"), { recursive: true });\n await mkdir(path.join(directory, \"skills\"), { recursive: true });\n await mkdir(path.join(directory, \"stores\"), { recursive: true });\n await mkdir(path.join(directory, \"artifacts\"), { recursive: true });\n await mkdir(path.join(directory, \"knowledge\"), { recursive: true });\n await mkdir(path.join(directory, \"files\"), { recursive: true });\n const manifest = { schema: \"agents24.package/v2\", name: packageSlug, description: `${packageName} agent package`, resources: [{ key: \"main\", path: \"workflows/main.yaml\" }], requires: { models: { primary: { required: true, capability: \"chat\" } } } };\n const workflow = { schema: \"agents24.workflow/v1\", name: packageName, description: \"\", inputs: { text: \"string\" }, outputs: { response: \"string\" }, entry: \"assistant\", nodes: { assistant: { uses: \"../agents/assistant.md\" } }, flow: [{ from: \"assistant.output\", to: \"output.response\" }] };\n const agent = `---\\nschema: agents24.agent/v1\\nname: Assistant\\ndescription: Primary assistant\\nmodel: $models.primary\\n---\\n\\nYou are a helpful assistant.\\n`;\n await writeFile(path.join(directory, MANIFEST), _yaml(manifest), { flag: \"wx\" });\n await writeFile(path.join(directory, \"workflows/main.yaml\"), _yaml(workflow), { flag: \"wx\" });\n await writeFile(path.join(directory, \"agents/assistant.md\"), agent, { flag: \"wx\" });\n return packageSlug;\n}\nfunction _yaml(value: unknown): string {\n const doc = parseDocument(\"{}\");\n doc.contents = doc.createNode(value) as typeof doc.contents;\n return String(doc);\n}\n","type ResourcePackageUpload = { data: Uint8Array; filename?: string };\ntype ResourceBundleRequest = {\n bundle: Record<string, unknown>;\n selected_resource_keys?: string[];\n mappings?: Record<string, string>;\n};\ntype ResourceInstallationPlanUpload = ResourcePackageUpload & { installationId?: string; prune?: boolean; development?: boolean };\n\nexport type RemoteClient = {\n resourcePackages: {\n exportPackage(request: Record<string, unknown>): Promise<{ data: Uint8Array; filename: string }>;\n validatePackage(upload: ResourcePackageUpload): Promise<Record<string, unknown>>;\n compilePackage(upload: ResourcePackageUpload): Promise<Record<string, unknown>>;\n };\n resourceBundles: {\n importPreview(request: ResourceBundleRequest): Promise<Record<string, unknown>>;\n importBundle(request: ResourceBundleRequest, options?: { idempotencyKey?: string }): Promise<Record<string, unknown>>;\n candidates(options: { kind: string; query?: string; requiredCapability?: \"chat\" | \"embedding\" }): Promise<Record<string, unknown>>;\n };\n resourceInstallations: {\n list(): Promise<Record<string, unknown>>;\n create(request: { package_name: string; operation_id: string }, options?: { idempotencyKey?: string }): Promise<Record<string, unknown>>;\n get(id: string): Promise<Record<string, unknown>>;\n plan(upload: ResourceInstallationPlanUpload): Promise<Record<string, unknown>>;\n link(id: string, request: { resource_key: string; resource_id: string }, options?: { idempotencyKey?: string }): Promise<Record<string, unknown>>;\n configureSecrets(id: string, request: { secrets: Record<string, string> }, options?: { idempotencyKey?: string }): Promise<Record<string, unknown>>;\n apply(operationId: string, request: Record<string, unknown>, options?: { idempotencyKey?: string }): Promise<Record<string, unknown>>;\n operationStatus(operationId: string): Promise<Record<string, unknown>>;\n publish(id: string, request: { package_hash: string }, options?: { idempotencyKey?: string }): Promise<Record<string, unknown>>;\n prepareDevelopmentSession(id: string, request: Record<string, unknown>): Promise<Record<string, unknown>>;\n developmentSessionStatus(id: string, resourceKey: string): Promise<Record<string, unknown>>;\n revokeDevelopmentSession(id: string, sessionId: string, options?: { idempotencyKey?: string }): Promise<Record<string, unknown>>;\n bindDeployment(id: string, request: { client_deployment_id: string | null }, options?: { idempotencyKey?: string }): Promise<Record<string, unknown>>;\n resources(options: { kind: string; query?: string; limit?: number }): Promise<Record<string, unknown>>;\n };\n agents: { publish(id: string, options?: { idempotencyKey?: string }): Promise<Record<string, unknown>> };\n resourcePolicies: { list(): Promise<Array<Record<string, unknown>>> };\n clientDeployments: {\n create(request: Record<string, unknown>, options?: { idempotencyKey?: string }): Promise<Record<string, unknown>>;\n get(id: string): Promise<Record<string, unknown>>;\n };\n};\n\nexport async function createRemoteClient(environment: NodeJS.ProcessEnv = process.env): Promise<RemoteClient> {\n const required = [\"AGENTS24_API_KEY\"] as const;\n const missing = required.filter((name) => !String(environment[name] || \"\").trim());\n if (missing.length) throw new Error(`Missing remote configuration: ${missing.join(\", \")}`);\n\n const canonicalNodePackage = \"@agents24/node\";\n const module = await import(canonicalNodePackage) as { Agents24?: new (options: Record<string, unknown>) => unknown };\n if (!module.Agents24) throw new Error(\"@agents24/node does not export Agents24\");\n return new module.Agents24({\n baseUrl: String(environment.AGENTS24_BASE_URL || \"https://api.agents24.dev\").trim(),\n apiKey: environment.AGENTS24_API_KEY,\n }) as unknown as RemoteClient;\n}\n","export function parseMappings(items: string[]): Record<string, string> {\n return Object.fromEntries(items.map((item) => {\n const separator = item.indexOf(\"=\");\n if (separator <= 0 || separator === item.length - 1) {\n throw new Error(\"--map must use requirement-key=target-id\");\n }\n return [item.slice(0, separator), item.slice(separator + 1)];\n }));\n}\n\nexport function shouldPromptForDependency(dependency: Record<string, unknown>): boolean {\n return dependency.kind !== \"model\";\n}\n\nexport function assertImportAllowed(\n preview: Record<string, unknown>,\n options: { allowIncomplete: boolean; yes: boolean; interactive: boolean },\n): void {\n const resources = Array.isArray(preview.resources) ? preview.resources as Array<Record<string, unknown>> : [];\n if (resources.some((item) => item.status === \"incomplete\") && !options.allowIncomplete) {\n throw new Error(\"Import would create incomplete drafts; pass --allow-incomplete to continue\");\n }\n if (!options.yes && !options.interactive) throw new Error(\"Non-interactive import requires --yes\");\n}\n"],"mappings":"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","names":["path","key","declarations"]}
|