@agents24/cli 0.3.12 → 0.3.13
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/compatibility.json +3 -3
- package/dist/{chunk-6WUKPOLE.js → chunk-GFT6T7PO.js} +1 -1
- package/dist/{chunk-6WUKPOLE.js.map → chunk-GFT6T7PO.js.map} +1 -1
- package/dist/cli.js +77 -44
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +1 -1
- package/package.json +2 -2
package/compatibility.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"contractHash": "
|
|
2
|
+
"contractHash": "666b7eb95da150322cfe3418685f29a554fd4f2cedfc89ff4d7a6d0228b8060a",
|
|
3
3
|
"contractVersion": "0.3.0",
|
|
4
4
|
"corpus": "conformance/v1/corpus.json",
|
|
5
5
|
"generatedBy": "@agents24/sdk-contract",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"runtime": "run-stream.v3"
|
|
20
20
|
},
|
|
21
21
|
"@agents24/node": {
|
|
22
|
-
"contract": "
|
|
22
|
+
"contract": "666b7eb95da150322cfe3418685f29a554fd4f2cedfc89ff4d7a6d0228b8060a",
|
|
23
23
|
"node": "^22.0.0 || ^24.0.0"
|
|
24
24
|
},
|
|
25
25
|
"@agents24/react": {
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"protocolOwner": "@agents24/client"
|
|
32
32
|
},
|
|
33
33
|
"agents24": {
|
|
34
|
-
"contract": "
|
|
34
|
+
"contract": "666b7eb95da150322cfe3418685f29a554fd4f2cedfc89ff4d7a6d0228b8060a",
|
|
35
35
|
"python": ">=3.10"
|
|
36
36
|
}
|
|
37
37
|
},
|
|
@@ -1 +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 { copyFile, lstat, mkdir, mkdtemp, readFile, readdir, rename, rm, stat, writeFile } from \"node:fs/promises\";\nimport { readFileSync as readSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { randomBytes } from \"node:crypto\";\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 PACKAGE_ROOTS = new Set([\"workflows\", \"agents\", \"rag\", \"skills\", \"stores\", \"artifacts\", \"files\"]);\nconst PACKAGE_ID = /^pkg_[0-9a-f]{32}$/;\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 LOCAL = /^(workflows|agents|rag|skills|stores|artifacts|files)\\//;\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}\nexport function createPackageId(): string {\n return `pkg_${randomBytes(16).toString(\"hex\")}`;\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 if (directory === root && entry.name === \"knowledge\") {\n throw new Error(\"Package knowledge/ content is unsupported; ingest Store content through a RAG pipeline\");\n }\n if (directory === root && entry.name !== MANIFEST && !PACKAGE_ROOTS.has(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)) add(diagnostics, \"error\", \"FORBIDDEN_VALUE\", MANIFEST + itemPath, \"Platform UUIDs 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 (/^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())) {\n add(diagnostics, \"error\", \"FORBIDDEN_VALUE\", `${filePath}/body`, \"Platform UUIDs 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 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}\n\nexport async function packPackageSnapshot(input: string): Promise<Uint8Array> {\n return packFiles(await loadPackageFiles(input));\n}\n\nexport async function replacePackageFiles(\n directory: string,\n proposed: Record<string, string>,\n afterWrite?: () => Promise<void>,\n): Promise<void> {\n const root = path.resolve(directory);\n if (!(await stat(root)).isDirectory()) throw new Error(\"pull requires a Resource Package directory\");\n const files = new Map(Object.entries(proposed));\n const current = await directoryFiles(root);\n preserveLocalSelfHostedArtifactSources(current, files);\n const validated = validateFiles(files);\n if (!validated.valid) throw Object.assign(new Error(\"Pulled Resource Package is invalid\"), { diagnostics: validated.diagnostics });\n const changed = [...new Set([...current.keys(), ...files.keys()])].filter((item) => current.get(item) !== files.get(item));\n const staging = await mkdtemp(path.join(path.dirname(root), \".agents24-pull-\"));\n const backups = path.join(staging, \"backups\");\n const writes = path.join(staging, \"writes\");\n const existing = new Set<string>();\n try {\n for (const relative of changed) {\n const destination = safeDestination(root, relative);\n if (current.has(relative)) {\n existing.add(relative);\n const backup = path.join(backups, relative);\n await mkdir(path.dirname(backup), { recursive: true });\n await copyFile(destination, backup);\n }\n if (files.has(relative)) {\n const staged = path.join(writes, relative);\n await mkdir(path.dirname(staged), { recursive: true });\n await writeFile(staged, files.get(relative)!, \"utf8\");\n }\n }\n for (const relative of changed) {\n const destination = safeDestination(root, relative);\n if (!files.has(relative)) {\n await rm(destination, { force: true });\n continue;\n }\n await mkdir(path.dirname(destination), { recursive: true });\n await rename(path.join(writes, relative), destination);\n }\n if (afterWrite) await afterWrite();\n } catch (error) {\n for (const relative of changed) {\n const destination = safeDestination(root, relative);\n if (!existing.has(relative)) {\n await rm(destination, { force: true });\n continue;\n }\n await mkdir(path.dirname(destination), { recursive: true });\n await copyFile(path.join(backups, relative), destination);\n }\n throw error;\n } finally {\n await rm(staging, { recursive: true, force: true });\n }\n}\n\nfunction preserveLocalSelfHostedArtifactSources(current: Map<string, string>, proposed: Map<string, string>): void {\n const prefixes = new Set([\n ...selfHostedArtifactSourcePrefixes(current),\n ...selfHostedArtifactSourcePrefixes(proposed),\n ]);\n for (const [filePath, content] of current) {\n if ([...prefixes].some((prefix) => filePath.startsWith(prefix))) proposed.set(filePath, content);\n }\n}\n\nfunction selfHostedArtifactSourcePrefixes(files: Map<string, string>): string[] {\n const diagnostics: Diagnostic[] = [];\n const manifest = parseYaml(files.get(MANIFEST) || \"\", MANIFEST, diagnostics);\n const resources = Array.isArray(manifest.resources) ? manifest.resources : [];\n return resources.flatMap((resource) => {\n if (!resource || typeof resource !== \"object\" || Array.isArray(resource)) return [];\n const artifactPath = String((resource as Record<string, unknown>).path || \"\");\n if (!/^artifacts\\/[a-z0-9][a-z0-9-]*\\/artifact\\.yaml$/.test(artifactPath)) return [];\n const source = parseYaml(files.get(artifactPath) || \"\", artifactPath, diagnostics);\n return source.execution_target === \"self_hosted\" ? [artifactPath.replace(/artifact\\.yaml$/, \"src/\")] : [];\n });\n}\n\nfunction safeDestination(root: string, relative: string): string {\n if (!relative || relative.startsWith(\"/\") || relative.includes(\"\\\\\")) throw new Error(\"Pulled package contains an unsafe path\");\n const destination = path.resolve(root, relative);\n if (!destination.startsWith(`${root}${path.sep}`)) throw new Error(\"Pulled package contains an unsafe path\");\n return destination;\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, \"files\"), { recursive: true });\n const manifest = { schema: \"agents24.package/v2\", package_id: createPackageId(), 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}\nexport async function forkPackage(source: string, target: string, requestedName?: string): Promise<{ name: string; packageId: string }> {\n const sourceFiles = await loadPackageFiles(source);\n const diagnostics: Diagnostic[] = [];\n const manifest = parseYaml(sourceFiles.get(MANIFEST) || \"\", MANIFEST, diagnostics);\n if (diagnostics.length) throw Object.assign(new Error(\"Resource package manifest is invalid\"), { diagnostics });\n const packageName = slug(requestedName || path.basename(path.resolve(target)));\n const packageId = createPackageId();\n manifest.package_id = packageId;\n manifest.name = packageName;\n sourceFiles.set(MANIFEST, _yaml(manifest));\n const validated = validateFiles(sourceFiles);\n if (!validated.valid) throw Object.assign(new Error(\"Resource package is invalid\"), { diagnostics: validated.diagnostics });\n let targetExists = true;\n try {\n const metadata = await stat(target);\n if (!metadata.isDirectory()) throw new Error(\"Fork target must be a directory\");\n if ((await readdir(target)).length) throw new Error(\"Fork target directory must be empty\");\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") targetExists = false;\n else throw error;\n }\n if (!targetExists) await mkdir(target, { recursive: true });\n for (const [relative, content] of validated.files) {\n const destination = path.join(target, relative);\n await mkdir(path.dirname(destination), { recursive: true });\n await writeFile(destination, content, { flag: \"wx\" });\n }\n if (!PACKAGE_ID.test(packageId)) throw new Error(\"Generated package identity is invalid\");\n return { name: packageName, packageId };\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 ResourcePackageImportUpload = ResourcePackageUpload & { mappings?: Record<string, string> };\ntype ResourceInstallationPlanUpload = ResourcePackageUpload & { 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 importPreview(upload: ResourcePackageImportUpload): Promise<Record<string, unknown>>;\n importPackage(upload: ResourcePackageImportUpload, 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_id: string; package_name: string; operation_id: string }, options?: { idempotencyKey?: string }): Promise<Record<string, unknown>>;\n get(id: string): Promise<Record<string, unknown>>;\n getByPackageId(packageId: string): Promise<Record<string, unknown>>;\n plan(upload: ResourceInstallationPlanUpload): Promise<Record<string, unknown>>;\n planPull(id: string, upload: ResourcePackageUpload): Promise<Record<string, unknown>>;\n downloadPull(id: string, pullId: string): Promise<Record<string, unknown>>;\n acceptPull(id: string, pullId: string, request: { platform_snapshot_hash: string; package_hash: string }, options?: { idempotencyKey?: string }): 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"]}
|
|
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 { copyFile, lstat, mkdir, mkdtemp, readFile, readdir, rename, rm, stat, writeFile } from \"node:fs/promises\";\nimport { readFileSync as readSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { randomBytes } from \"node:crypto\";\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 PACKAGE_ROOTS = new Set([\"workflows\", \"agents\", \"rag\", \"skills\", \"stores\", \"artifacts\", \"files\"]);\nconst PACKAGE_ID = /^pkg_[0-9a-f]{32}$/;\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 LOCAL = /^(workflows|agents|rag|skills|stores|artifacts|files)\\//;\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}\nexport function createPackageId(): string {\n return `pkg_${randomBytes(16).toString(\"hex\")}`;\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 if (directory === root && entry.name === \"knowledge\") {\n throw new Error(\"Package knowledge/ content is unsupported; ingest Store content through a RAG pipeline\");\n }\n if (directory === root && entry.name !== MANIFEST && !PACKAGE_ROOTS.has(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)) add(diagnostics, \"error\", \"FORBIDDEN_VALUE\", MANIFEST + itemPath, \"Platform UUIDs 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 (/^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())) {\n add(diagnostics, \"error\", \"FORBIDDEN_VALUE\", `${filePath}/body`, \"Platform UUIDs 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 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}\n\nexport async function packPackageSnapshot(input: string): Promise<Uint8Array> {\n return packFiles(await loadPackageFiles(input));\n}\n\nexport async function replacePackageFiles(\n directory: string,\n proposed: Record<string, string>,\n afterWrite?: () => Promise<void>,\n): Promise<void> {\n const root = path.resolve(directory);\n if (!(await stat(root)).isDirectory()) throw new Error(\"pull requires a Resource Package directory\");\n const files = new Map(Object.entries(proposed));\n const current = await directoryFiles(root);\n preserveLocalSelfHostedArtifactSources(current, files);\n const validated = validateFiles(files);\n if (!validated.valid) throw Object.assign(new Error(\"Pulled Resource Package is invalid\"), { diagnostics: validated.diagnostics });\n const changed = [...new Set([...current.keys(), ...files.keys()])].filter((item) => current.get(item) !== files.get(item));\n const staging = await mkdtemp(path.join(path.dirname(root), \".agents24-pull-\"));\n const backups = path.join(staging, \"backups\");\n const writes = path.join(staging, \"writes\");\n const existing = new Set<string>();\n try {\n for (const relative of changed) {\n const destination = safeDestination(root, relative);\n if (current.has(relative)) {\n existing.add(relative);\n const backup = path.join(backups, relative);\n await mkdir(path.dirname(backup), { recursive: true });\n await copyFile(destination, backup);\n }\n if (files.has(relative)) {\n const staged = path.join(writes, relative);\n await mkdir(path.dirname(staged), { recursive: true });\n await writeFile(staged, files.get(relative)!, \"utf8\");\n }\n }\n for (const relative of changed) {\n const destination = safeDestination(root, relative);\n if (!files.has(relative)) {\n await rm(destination, { force: true });\n continue;\n }\n await mkdir(path.dirname(destination), { recursive: true });\n await rename(path.join(writes, relative), destination);\n }\n if (afterWrite) await afterWrite();\n } catch (error) {\n for (const relative of changed) {\n const destination = safeDestination(root, relative);\n if (!existing.has(relative)) {\n await rm(destination, { force: true });\n continue;\n }\n await mkdir(path.dirname(destination), { recursive: true });\n await copyFile(path.join(backups, relative), destination);\n }\n throw error;\n } finally {\n await rm(staging, { recursive: true, force: true });\n }\n}\n\nfunction preserveLocalSelfHostedArtifactSources(current: Map<string, string>, proposed: Map<string, string>): void {\n const prefixes = new Set([\n ...selfHostedArtifactSourcePrefixes(current),\n ...selfHostedArtifactSourcePrefixes(proposed),\n ]);\n for (const [filePath, content] of current) {\n if ([...prefixes].some((prefix) => filePath.startsWith(prefix))) proposed.set(filePath, content);\n }\n}\n\nfunction selfHostedArtifactSourcePrefixes(files: Map<string, string>): string[] {\n const diagnostics: Diagnostic[] = [];\n const manifest = parseYaml(files.get(MANIFEST) || \"\", MANIFEST, diagnostics);\n const resources = Array.isArray(manifest.resources) ? manifest.resources : [];\n return resources.flatMap((resource) => {\n if (!resource || typeof resource !== \"object\" || Array.isArray(resource)) return [];\n const artifactPath = String((resource as Record<string, unknown>).path || \"\");\n if (!/^artifacts\\/[a-z0-9][a-z0-9-]*\\/artifact\\.yaml$/.test(artifactPath)) return [];\n const source = parseYaml(files.get(artifactPath) || \"\", artifactPath, diagnostics);\n return source.execution_target === \"self_hosted\" ? [artifactPath.replace(/artifact\\.yaml$/, \"src/\")] : [];\n });\n}\n\nfunction safeDestination(root: string, relative: string): string {\n if (!relative || relative.startsWith(\"/\") || relative.includes(\"\\\\\")) throw new Error(\"Pulled package contains an unsafe path\");\n const destination = path.resolve(root, relative);\n if (!destination.startsWith(`${root}${path.sep}`)) throw new Error(\"Pulled package contains an unsafe path\");\n return destination;\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, \"files\"), { recursive: true });\n const manifest = { schema: \"agents24.package/v2\", package_id: createPackageId(), 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}\nexport async function forkPackage(source: string, target: string, requestedName?: string): Promise<{ name: string; packageId: string }> {\n const sourceFiles = await loadPackageFiles(source);\n const diagnostics: Diagnostic[] = [];\n const manifest = parseYaml(sourceFiles.get(MANIFEST) || \"\", MANIFEST, diagnostics);\n if (diagnostics.length) throw Object.assign(new Error(\"Resource package manifest is invalid\"), { diagnostics });\n const packageName = slug(requestedName || path.basename(path.resolve(target)));\n const packageId = createPackageId();\n manifest.package_id = packageId;\n manifest.name = packageName;\n sourceFiles.set(MANIFEST, _yaml(manifest));\n const validated = validateFiles(sourceFiles);\n if (!validated.valid) throw Object.assign(new Error(\"Resource package is invalid\"), { diagnostics: validated.diagnostics });\n let targetExists = true;\n try {\n const metadata = await stat(target);\n if (!metadata.isDirectory()) throw new Error(\"Fork target must be a directory\");\n if ((await readdir(target)).length) throw new Error(\"Fork target directory must be empty\");\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") targetExists = false;\n else throw error;\n }\n if (!targetExists) await mkdir(target, { recursive: true });\n for (const [relative, content] of validated.files) {\n const destination = path.join(target, relative);\n await mkdir(path.dirname(destination), { recursive: true });\n await writeFile(destination, content, { flag: \"wx\" });\n }\n if (!PACKAGE_ID.test(packageId)) throw new Error(\"Generated package identity is invalid\");\n return { name: packageName, packageId };\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 ResourcePackageImportUpload = ResourcePackageUpload & { mappings?: Record<string, string> };\ntype ResourceInstallationPlanUpload = ResourcePackageUpload & { prune?: boolean; integrationMode?: \"publish-only\" | \"bff\" | \"client-deployment\"; primaryResourceKey?: string };\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 importPreview(upload: ResourcePackageImportUpload): Promise<Record<string, unknown>>;\n importPackage(upload: ResourcePackageImportUpload, 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_id: string; package_name: string; operation_id: string }, options?: { idempotencyKey?: string }): Promise<Record<string, unknown>>;\n get(id: string): Promise<Record<string, unknown>>;\n getByPackageId(packageId: string): Promise<Record<string, unknown>>;\n plan(upload: ResourceInstallationPlanUpload): Promise<Record<string, unknown>>;\n planPull(id: string, upload: ResourcePackageUpload): Promise<Record<string, unknown>>;\n downloadPull(id: string, pullId: string): Promise<Record<string, unknown>>;\n acceptPull(id: string, pullId: string, request: { platform_snapshot_hash: string; package_hash: string }, options?: { idempotencyKey?: string }): 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"]}
|
package/dist/cli.js
CHANGED
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
replacePackageFiles,
|
|
12
12
|
shouldPromptForDependency,
|
|
13
13
|
validatePackage
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-GFT6T7PO.js";
|
|
15
15
|
|
|
16
16
|
// src/cli.ts
|
|
17
17
|
import { basename as basename2, dirname, join as join3, resolve as resolve3 } from "path";
|
|
@@ -563,6 +563,54 @@ async function openDevelopmentRelay(client, installationIdValue, artifact, local
|
|
|
563
563
|
return { sessionId: String(admission.id), socket, state };
|
|
564
564
|
}
|
|
565
565
|
|
|
566
|
+
// src/cli-help.ts
|
|
567
|
+
var commands = {
|
|
568
|
+
prepare: { args: "<directory>", summary: "Validate package identity and prepare local secrets.", flags: "", example: "agents24 prepare ./agents24" },
|
|
569
|
+
plan: { args: "<directory|archive.zip>", summary: "Plan the complete operation without changing resources. Resolve blockers before apply.", flags: "--integration <publish-only|bff|client-deployment> --agent <stable-key> --prune", example: "agents24 plan ./agents24 --integration bff --agent assistant --json" },
|
|
570
|
+
apply: { args: "<directory|archive.zip>", summary: "Plan and apply resource drafts. Existing primary Agent selections are fixed.", flags: "--integration <publish-only|bff|client-deployment> --agent <stable-key> --prune --yes", example: "agents24 apply ./agents24 --yes" },
|
|
571
|
+
setup: { args: "<directory>", summary: "Apply resources and configure an application integration.", flags: "--app <directory> --integration <publish-only|bff|client-deployment> --agent <stable-key> --policy-set <id> --oidc-config <json> --no-write-env --yes", example: "agents24 setup ./agents24 --integration bff --app . --agent assistant" },
|
|
572
|
+
publish: { args: "<directory>", summary: "Publish the installed package resources after validation.", flags: "--yes", example: "agents24 publish ./agents24 --yes" },
|
|
573
|
+
status: { args: "<directory>", summary: "Inspect installation, validation, and publication status.", flags: "", example: "agents24 status ./agents24 --json" },
|
|
574
|
+
pull: { args: "<directory>", summary: "Review and pull portable platform changes into the local package.", flags: "--yes", example: "agents24 pull ./agents24" },
|
|
575
|
+
link: { args: "<directory>", summary: "Link an external requirement by its stable key in an installation.", flags: "--resource <stable-key=resource-id> (repeatable)", example: "agents24 link ./agents24 --resource '$tools.search=<tool-id>'" },
|
|
576
|
+
resources: { args: "", summary: "List candidate resources for external requirements.", flags: "--kind <kind> --query <text> --limit <number>", example: "agents24 resources --kind tool --query Search --json" },
|
|
577
|
+
dev: { args: "<directory>", summary: "Run the local Remote Artifact development relay.", flags: "--artifact <stable-key> --apply --yes", example: "agents24 dev ./agents24 --artifact workspace --apply" },
|
|
578
|
+
fork: { args: "<source> <target>", summary: "Copy a package with a new installation identity.", flags: "--name <name>", example: "agents24 fork ./agents24 ./copy --name copy" },
|
|
579
|
+
"package init": { args: "[directory]", summary: "Initialize a package with a unique package_id. Copying keeps identity; fork creates a new one.", flags: "--name <name>", example: "agents24 package init ./agents24 --name research" },
|
|
580
|
+
"package validate": { args: "<directory|archive.zip>", summary: "Validate authored package source, optionally against the backend.", flags: "--remote", example: "agents24 package validate ./agents24 --json" },
|
|
581
|
+
"package pack": { args: "<directory>", summary: "Create a portable resource archive.", flags: "--output <archive.zip>", example: "agents24 package pack ./agents24 --output research.zip" },
|
|
582
|
+
"package export": { args: "", summary: "Export a platform resource and its portable dependencies.", flags: "--kind <kind> --id <resource-id> --target <draft|version> --version-id <id> --output <archive.zip>", example: "agents24 package export --kind agent --id <agent-id> --target draft" },
|
|
583
|
+
"package preview": { args: "<directory|archive.zip>", summary: "Preview an import and its unresolved dependencies.", flags: "--map <requirement=id>", example: "agents24 package preview research.zip --json" },
|
|
584
|
+
"package import": { args: "<directory|archive.zip>", summary: "Import resource drafts with explicit dependency mappings.", flags: "--map <requirement=id> --allow-incomplete --yes", example: "agents24 package import research.zip --yes" }
|
|
585
|
+
};
|
|
586
|
+
function commandHelp(argv) {
|
|
587
|
+
const topic = argv[0] === "package" ? `package ${argv[1] || ""}`.trim() : argv[0];
|
|
588
|
+
const entry = commands[topic];
|
|
589
|
+
if (!entry) return `Usage: agents24 <command> [arguments] [options]
|
|
590
|
+
|
|
591
|
+
Commands:
|
|
592
|
+
${Object.entries(commands).map(([name, item]) => ` ${name} ${item.args} \u2014 ${item.summary}`).join("\n")}
|
|
593
|
+
|
|
594
|
+
Use agents24 <command> --help for flags and examples.
|
|
595
|
+
`;
|
|
596
|
+
return `Usage: agents24 ${topic} ${entry.args}
|
|
597
|
+
|
|
598
|
+
${entry.summary}
|
|
599
|
+
|
|
600
|
+
Options:
|
|
601
|
+
${entry.flags || "No command-specific flags."}
|
|
602
|
+
--json Machine-readable JSON output (default: human-readable)
|
|
603
|
+
--help, -h Show this help; exits successfully without authentication
|
|
604
|
+
|
|
605
|
+
Authentication:
|
|
606
|
+
AGENTS24_API_KEY Organization API key; never pass keys in command arguments.
|
|
607
|
+
AGENTS24_BASE_URL API URL override for a local backend.
|
|
608
|
+
|
|
609
|
+
Example:
|
|
610
|
+
${entry.example}
|
|
611
|
+
`;
|
|
612
|
+
}
|
|
613
|
+
|
|
566
614
|
// src/cli.ts
|
|
567
615
|
var DEFAULT_API_BASE_URL2 = "https://api.agents24.dev";
|
|
568
616
|
var DEFAULT_LOCAL_CLIENT_ORIGINS = ["http://localhost:5173", "http://127.0.0.1:5173"];
|
|
@@ -795,9 +843,9 @@ function blockedPlanMessage(plan) {
|
|
|
795
843
|
});
|
|
796
844
|
return `The Resource Package plan is blocked: ${details.join("; ")}`;
|
|
797
845
|
}
|
|
798
|
-
async function ensureInstallation(input, client, data) {
|
|
846
|
+
async function ensureInstallation(input, client, data, plan) {
|
|
799
847
|
const identity = await packageIdentity(input);
|
|
800
|
-
const initial = await client.resourceInstallations.plan(packageUpload(data, input));
|
|
848
|
+
const initial = plan || await client.resourceInstallations.plan(packageUpload(data, input));
|
|
801
849
|
if (initial.installation_id) return String(initial.installation_id);
|
|
802
850
|
const created = await client.resourceInstallations.create(
|
|
803
851
|
{ package_id: identity.packageId, package_name: String(initial.package_name), operation_id: String(initial.operation_id) },
|
|
@@ -805,29 +853,6 @@ async function ensureInstallation(input, client, data) {
|
|
|
805
853
|
);
|
|
806
854
|
return String(created.id);
|
|
807
855
|
}
|
|
808
|
-
async function primaryAgentForApply(parsed, input, plan, client) {
|
|
809
|
-
const explicit = flag(parsed, "agent");
|
|
810
|
-
if (explicit) return explicit;
|
|
811
|
-
const installationId = String(plan.installation_id || "").trim();
|
|
812
|
-
if (installationId) {
|
|
813
|
-
const installation = await client.resourceInstallations.get(installationId);
|
|
814
|
-
if (String(installation.primary_resource_key || "").trim()) return void 0;
|
|
815
|
-
}
|
|
816
|
-
const validated = await validatePackage(input);
|
|
817
|
-
const agentPaths = new Set(validated.resources.filter((resource) => String(resource.kind || "") === "agent").map((resource) => String(resource.path || "")));
|
|
818
|
-
const declarations = Array.isArray(validated.package.resources) ? validated.package.resources.filter((item) => Boolean(item && typeof item === "object" && !Array.isArray(item))) : [];
|
|
819
|
-
const agents = declarations.filter((resource) => agentPaths.has(String(resource.path || ""))).map((resource) => String(resource.key || "").trim()).filter(Boolean);
|
|
820
|
-
if (agents.length <= 1) return agents[0];
|
|
821
|
-
if (!interactive(parsed)) {
|
|
822
|
-
throw new Error(`This package declares multiple Agents. Select the application entrypoint with --agent <stable-key>. Available keys: ${agents.join(", ")}`);
|
|
823
|
-
}
|
|
824
|
-
const answer = await select({
|
|
825
|
-
message: "Primary Agent",
|
|
826
|
-
options: agents.map((key) => ({ value: key, label: key }))
|
|
827
|
-
});
|
|
828
|
-
cancelled(answer);
|
|
829
|
-
return answer;
|
|
830
|
-
}
|
|
831
856
|
async function applyDraft(parsed, options = {}) {
|
|
832
857
|
const input = parsed.positionals[0];
|
|
833
858
|
if (!input) throw new Error(`${parsed.command} requires a Resource Package directory or ZIP`);
|
|
@@ -835,28 +860,37 @@ async function applyDraft(parsed, options = {}) {
|
|
|
835
860
|
const apiKey = options.apiKey || await apiKeyForLifecycle(parsed);
|
|
836
861
|
const client = options.client || await createRemoteClient({ ...process.env, AGENTS24_API_KEY: apiKey });
|
|
837
862
|
const data = await packPackage(input);
|
|
838
|
-
|
|
863
|
+
const planInput = {
|
|
839
864
|
...packageUpload(data, input),
|
|
840
|
-
prune: flag(parsed, "prune") === "true"
|
|
841
|
-
|
|
865
|
+
prune: flag(parsed, "prune") === "true",
|
|
866
|
+
integrationMode: options.integrationMode || flag(parsed, "integration"),
|
|
867
|
+
primaryResourceKey: flag(parsed, "agent")
|
|
868
|
+
};
|
|
869
|
+
let plan = await client.resourceInstallations.plan(planInput);
|
|
842
870
|
if (plan.can_apply !== true && interactive(parsed)) {
|
|
843
|
-
const
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
871
|
+
const blockers = Array.isArray(plan.blockers) ? plan.blockers : [];
|
|
872
|
+
const selection = blockers.find((blocker) => blocker.code === "PRIMARY_AGENT_REQUIRED");
|
|
873
|
+
if (selection && Array.isArray(selection.candidates) && selection.candidates.length) {
|
|
874
|
+
const answer = await select({ message: "Primary Agent", options: selection.candidates.map((key) => ({ value: String(key), label: String(key) })) });
|
|
875
|
+
cancelled(answer);
|
|
876
|
+
planInput.primaryResourceKey = answer;
|
|
877
|
+
plan = await client.resourceInstallations.plan(planInput);
|
|
878
|
+
}
|
|
879
|
+
const requirements2 = Array.isArray(plan.external_requirements) ? plan.external_requirements : [];
|
|
880
|
+
const requiresLink = requirements2.some((item) => item.required === true && item.configured !== true && !["model", "secret"].includes(String(item.kind)));
|
|
881
|
+
if (requiresLink) {
|
|
882
|
+
const installationId = await ensureInstallation(input, client, data, plan);
|
|
883
|
+
if (await promptInstallationRequirementLinks(client, installationId, plan, true)) {
|
|
884
|
+
plan = await client.resourceInstallations.plan(planInput);
|
|
885
|
+
}
|
|
849
886
|
}
|
|
850
887
|
}
|
|
851
888
|
if (plan.can_apply !== true) throw Object.assign(new Error(blockedPlanMessage(plan)), { plan });
|
|
852
|
-
const primaryResourceKey = await primaryAgentForApply(parsed, input, plan, client);
|
|
853
889
|
if (!options.skipConfirmation) await applyConfirmation(parsed, plan);
|
|
854
890
|
const secrets = await secretValues(input);
|
|
855
891
|
let operation = await client.resourceInstallations.apply(String(plan.operation_id), {
|
|
856
|
-
primary_resource_key: primaryResourceKey,
|
|
857
|
-
integration_mode: options.integrationMode || flag(parsed, "integration") || "publish-only",
|
|
858
892
|
secrets
|
|
859
|
-
}, { idempotencyKey: `apply-${String(plan.
|
|
893
|
+
}, { idempotencyKey: `apply-${String(plan.operation_id)}` });
|
|
860
894
|
operation = await pollOperation(client, operation);
|
|
861
895
|
if (operation.status !== "completed") {
|
|
862
896
|
throw Object.assign(new Error("Draft apply failed"), {
|
|
@@ -911,7 +945,9 @@ async function execute(parsed) {
|
|
|
911
945
|
const data = await packPackage(input);
|
|
912
946
|
const plan = await client.resourceInstallations.plan({
|
|
913
947
|
...packageUpload(data, input),
|
|
914
|
-
prune: flag(parsed, "prune") === "true"
|
|
948
|
+
prune: flag(parsed, "prune") === "true",
|
|
949
|
+
integrationMode: flag(parsed, "integration"),
|
|
950
|
+
primaryResourceKey: flag(parsed, "agent")
|
|
915
951
|
});
|
|
916
952
|
return { ok: plan.can_apply === true, plan };
|
|
917
953
|
}
|
|
@@ -1176,10 +1212,7 @@ async function execute(parsed) {
|
|
|
1176
1212
|
async function run(argv = process.argv.slice(2)) {
|
|
1177
1213
|
const helpIndex = argv.findIndex((item) => item === "--help" || item === "-h");
|
|
1178
1214
|
if (argv.length === 0 || helpIndex >= 0) {
|
|
1179
|
-
|
|
1180
|
-
const usage = topic === "agents24" ? "Usage: agents24 <prepare|plan|apply|pull|dev|publish|setup|status|link|resources|fork> | agents24 package <init|validate|pack|export|preview|import>" : topic === "package" ? "Usage: agents24 package <init|validate|pack|export|preview|import>" : topic === "init" ? "Usage: agents24 package init [directory] [--name <name>]" : `Usage: agents24 ${argv[0] === "package" ? `package ${topic}` : topic} [options]`;
|
|
1181
|
-
process.stdout.write(`${usage}
|
|
1182
|
-
`);
|
|
1215
|
+
process.stdout.write(commandHelp(argv));
|
|
1183
1216
|
return 0;
|
|
1184
1217
|
}
|
|
1185
1218
|
let parsed;
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts","../src/cli-arguments.ts","../src/cli-output.ts","../src/cli-installation-state.ts","../src/cli-secrets.ts","../src/cli-pull.ts","../src/cli-status.ts","../src/cli-requirements.ts","../src/cli-development.ts"],"sourcesContent":["import { basename, dirname, join, resolve } from \"node:path\";\nimport { chmod, readFile, writeFile } from \"node:fs/promises\";\nimport { createInterface } from \"node:readline/promises\";\nimport { createHash } from \"node:crypto\";\nimport { spawn, type ChildProcess } from \"node:child_process\";\nimport { isCancel, password, select, text } from \"@clack/prompts\";\n\nimport { forkPackage, initializePackage, loadPackageFiles, packPackage, validatePackage } from \"./package-source.js\";\nimport { createRemoteClient } from \"./remote.js\";\nimport { assertImportAllowed, parseMappings } from \"./import-guards.js\";\nimport { flag, parseArguments, values, type Parsed } from \"./cli-arguments.js\";\nimport { failurePayload, registerSensitiveValue, writeResult } from \"./cli-output.js\";\nimport { canonicalJson, isNotFoundResponse, packageDirectory, packageUpload as upload } from \"./cli-installation-state.js\";\nimport { parseEnv, preparePackage, secretValues } from \"./cli-secrets.js\";\nimport { pullPackage } from \"./cli-pull.js\";\nimport { installedPackageStatus } from \"./cli-status.js\";\nimport { promptImportMappings, promptInstallationRequirementLinks } from \"./cli-requirements.js\";\nimport { developmentArtifacts, openDevelopmentRelay, waitForServer } from \"./cli-development.js\";\n\nconst DEFAULT_API_BASE_URL = \"https://api.agents24.dev\";\nconst DEFAULT_LOCAL_CLIENT_ORIGINS = [\"http://localhost:5173\", \"http://127.0.0.1:5173\"];\n\nfunction mappings(parsed: Parsed): Record<string, string> {\n return parseMappings(values(parsed, \"map\"));\n}\n\nasync function confirmation(parsed: Parsed, preview: Record<string, unknown>): Promise<void> {\n const resources = Array.isArray(preview.resources) ? preview.resources as Array<Record<string, unknown>> : [];\n const yes = flag(parsed, \"yes\") === \"true\";\n assertImportAllowed(preview, {\n allowIncomplete: flag(parsed, \"allow-incomplete\") === \"true\",\n yes,\n interactive: Boolean(process.stdin.isTTY && process.stdout.isTTY),\n });\n if (yes) return;\n const prompt = createInterface({ input: process.stdin, output: process.stdout });\n const answer = await prompt.question(`Import ${resources.length} resource draft(s)? [y/N] `);\n prompt.close();\n if (!/^y(?:es)?$/i.test(answer.trim())) throw new Error(\"Import cancelled\");\n}\n\nasync function applyConfirmation(parsed: Parsed, plan: Record<string, unknown>): Promise<void> {\n if (flag(parsed, \"yes\") === \"true\") return;\n if (!process.stdin.isTTY || !process.stdout.isTTY) throw new Error(\"apply requires --yes in noninteractive mode\");\n const actions = Array.isArray(plan.actions) ? plan.actions.length : 0;\n const prompt = createInterface({ input: process.stdin, output: process.stdout });\n const answer = await prompt.question(`Apply ${actions} resource action(s)? [y/N] `);\n prompt.close();\n if (!/^y(?:es)?$/i.test(answer.trim())) throw new Error(\"Apply cancelled\");\n}\n\nasync function pollOperation(client: Awaited<ReturnType<typeof createRemoteClient>>, operation: Record<string, unknown>): Promise<Record<string, unknown>> {\n let current = operation;\n for (let attempt = 0; attempt < 900; attempt += 1) {\n const status = String(current.status || \"\");\n if ([\"completed\", \"failed\"].includes(status)) return current;\n await new Promise((resolvePromise) => setTimeout(resolvePromise, 1000));\n current = await client.resourceInstallations.operationStatus(String(current.operation_id));\n }\n throw new Error(\"Resource apply did not finish within 15 minutes\");\n}\n\nasync function packedValidatedPackage(parsed: Parsed): Promise<{ data: Uint8Array; filename: string }> {\n const input = parsed.positionals[0];\n if (!input) throw new Error(`${parsed.command} requires a package directory or ZIP`);\n const local = await validatePackage(input);\n if (!local.valid) throw Object.assign(new Error(\"Resource package is invalid\"), { diagnostics: local.diagnostics });\n const data = await packPackage(input);\n return { data, filename: `${basename(resolve(input))}.agents24.zip` };\n}\n\nfunction importKey(packageHash: string, map: Record<string, string>): string {\n return `import-${createHash(\"sha256\").update(canonicalJson({ package_hash: packageHash, mappings: map })).digest(\"hex\").slice(0, 40)}`;\n}\n\ntype InstallMode = \"client-deployment\" | \"bff\" | \"publish-only\";\ntype AppInfo = { directory: string; integration: Exclude<InstallMode, \"publish-only\">; packageManager: string };\n\nfunction interactive(parsed: Parsed): boolean {\n return flag(parsed, \"yes\") !== \"true\" && Boolean(process.stdin.isTTY && process.stdout.isTTY);\n}\n\nfunction cancelled<T>(value: T): asserts value is Exclude<T, symbol> {\n if (isCancel(value)) throw new Error(\"Installation cancelled\");\n}\n\nasync function apiKeyForLifecycle(parsed: Parsed): Promise<string> {\n await loadPackageLifecycleEnvironment(parsed.positionals[0]);\n let apiKey = String(process.env.AGENTS24_API_KEY || \"\").trim();\n if (!apiKey && interactive(parsed)) {\n const answer = await password({ message: \"Agents24 API key\", validate: (value) => String(value || \"\").trim() ? undefined : \"The API key is required.\" });\n cancelled(answer);\n apiKey = String(answer).trim();\n }\n if (!apiKey) throw new Error(\"AGENTS24_API_KEY is required for noninteractive resource management\");\n if (/[\\r\\n\\0]/.test(apiKey)) throw new Error(\"AGENTS24_API_KEY contains invalid control characters\");\n registerSensitiveValue(apiKey);\n return apiKey;\n}\n\nasync function loadPackageLifecycleEnvironment(input: string | undefined): Promise<void> {\n if (!input) return;\n const directory = await packageDirectory(input);\n if (!directory) return;\n for (const path of [join(dirname(directory), \".env.local\"), join(directory, \".env.local\")]) {\n try {\n const values = parseEnv(await readFile(path, \"utf8\"));\n for (const [name, value] of Object.entries(values)) {\n if (!process.env[name]) process.env[name] = value;\n }\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error;\n }\n }\n}\n\nfunction publicationProjection(publication: Record<string, unknown>): Record<string, unknown> {\n return {\n installation_id: publication.installation_id,\n operation_id: publication.operation_id,\n package_hash: publication.package_hash,\n status: publication.status,\n ...(publication.published_at ? { published_at: publication.published_at } : {}),\n ...(publication.client_deployment_id ? { client_deployment_id: publication.client_deployment_id } : {}),\n };\n}\n\nfunction clientAppBaseUrl(environment: NodeJS.ProcessEnv = process.env): string | undefined {\n const baseUrl = String(environment.AGENTS24_BASE_URL || \"\").trim().replace(/\\/+$/, \"\");\n if (!baseUrl || baseUrl === DEFAULT_API_BASE_URL) return undefined;\n let parsed: URL;\n try {\n parsed = new URL(baseUrl);\n } catch {\n throw new Error(\"AGENTS24_BASE_URL must be a valid absolute HTTP(S) URL.\");\n }\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new Error(\"AGENTS24_BASE_URL must be a valid absolute HTTP(S) URL.\");\n }\n return baseUrl;\n}\n\nasync function appInfoAt(directory: string, explicit: boolean): Promise<AppInfo | undefined> {\n const target = resolve(directory);\n try {\n const manifest = JSON.parse(await readFile(join(target, \"package.json\"), \"utf8\")) as Record<string, unknown>;\n const metadata = manifest.agents24 && typeof manifest.agents24 === \"object\" ? manifest.agents24 as Record<string, unknown> : {};\n const integration = String(metadata.integration || \"\");\n if (integration !== \"client-deployment\" && integration !== \"bff\") {\n if (explicit) throw new Error(\"--app must reference a generated Agents24 application\");\n return undefined;\n }\n return { directory: target, integration, packageManager: String(metadata.package_manager || \"pnpm\") };\n } catch (error) {\n if (explicit || (error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error;\n return undefined;\n }\n}\n\nasync function resolveApp(parsed: Parsed): Promise<AppInfo | undefined> {\n const requested = flag(parsed, \"app\");\n return appInfoAt(requested || process.cwd(), Boolean(requested));\n}\n\nasync function resolveInstallMode(parsed: Parsed, app: AppInfo | undefined): Promise<InstallMode> {\n const requested = flag(parsed, \"integration\") as InstallMode | undefined;\n if (requested && ![\"client-deployment\", \"bff\", \"publish-only\"].includes(requested)) throw new Error(\"--integration must be client-deployment, bff, or publish-only\");\n if (requested && app && requested !== \"publish-only\" && requested !== app.integration) throw new Error(\"--integration does not match the generated application\");\n if (requested) return requested;\n if (app) return app.integration;\n if (!interactive(parsed)) throw new Error(\"--integration is required when no generated application is detected\");\n const answer = await select<InstallMode>({ message: \"How will this Agent be integrated?\", options: [\n { value: \"client-deployment\", label: \"Client deployment\", hint: \"Create a public deployment ID\" },\n { value: \"bff\", label: \"Server BFF\", hint: \"Use the API key only on the server\" },\n { value: \"publish-only\", label: \"Publish only\", hint: \"Configure an integration later\" },\n ] });\n cancelled(answer);\n return answer;\n}\n\nasync function clientDeployment(parsed: Parsed, client: Awaited<ReturnType<typeof createRemoteClient>>, agent: Record<string, unknown>, app: AppInfo | undefined): Promise<Record<string, unknown>> {\n const policies = (await client.resourcePolicies.list()).filter((row) => row.is_active === true);\n let policyId = flag(parsed, \"policy-set\");\n if (policyId && !policies.some((row) => String(row.id) === policyId)) throw new Error(\"--policy-set must identify an active Resource Policy\");\n if (!policyId && policies.length === 1) policyId = String(policies[0].id);\n if (!policyId && interactive(parsed) && policies.length > 1) {\n const answer = await select<string>({ message: \"Resource Policy\", options: policies.map((row) => ({ value: String(row.id), label: String(row.name) })) });\n cancelled(answer);\n policyId = answer;\n }\n if (!policyId) throw new Error(\"An active Resource Policy is required; pass --policy-set when more than one is active\");\n let origins = values(parsed, \"origin\");\n if (!origins.length && app) origins = [...DEFAULT_LOCAL_CLIENT_ORIGINS];\n if (!origins.length && interactive(parsed)) {\n const answer = await text({ message: \"Allowed browser origins\", placeholder: \"http://localhost:5173\", validate: (value) => String(value || \"\").trim() ? undefined : \"At least one origin is required.\" });\n cancelled(answer);\n origins = String(answer).split(\",\").map((item) => item.trim()).filter(Boolean);\n }\n if (!origins.length) throw new Error(\"At least one --origin is required when no generated app is detected\");\n const authModes = values(parsed, \"auth-mode\").length ? values(parsed, \"auth-mode\") : [\"anonymous\"];\n const oidcRaw = flag(parsed, \"oidc-config\");\n if (authModes.includes(\"external_oidc\") && !oidcRaw) throw new Error(\"--oidc-config is required for external_oidc\");\n const request = {\n agent_id: String(agent.id), resource_policy_set_id: policyId,\n version_policy: { mode: \"latest_published\" }, name: `${String(agent.name)} client deployment`,\n auth_modes: authModes, allowed_origins: origins,\n ...(oidcRaw ? { oidc: JSON.parse(oidcRaw) as Record<string, unknown> } : {}),\n };\n return client.clientDeployments.create(request, { idempotencyKey: `deploy-${createHash(\"sha256\").update(canonicalJson(request)).digest(\"hex\").slice(0, 40)}` });\n}\n\ntype EnvFileValue = string | { value: string; literal: true };\n\nasync function updateEnvFile(app: AppInfo, values: Record<string, EnvFileValue>): Promise<string> {\n const target = join(app.directory, \".env.local\");\n let content = \"\";\n try { content = await readFile(target, \"utf8\"); } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error;\n }\n let next = content;\n for (const [name, value] of Object.entries(values)) {\n const line = `${name}=${typeof value === \"string\" ? JSON.stringify(value) : value.value}`;\n const pattern = new RegExp(`^${name}=.*$`, \"m\");\n next = pattern.test(next) ? next.replace(pattern, line) : `${next}${next && !next.endsWith(\"\\n\") ? \"\\n\" : \"\"}${line}\\n`;\n }\n await writeFile(target, next, { mode: 0o600 });\n await chmod(target, 0o600);\n return target;\n}\n\ntype AppliedDraft = {\n client: Awaited<ReturnType<typeof createRemoteClient>>;\n apiKey: string;\n input: string;\n installationId: string;\n plan: Record<string, unknown>;\n operation: Record<string, unknown>;\n result: Record<string, unknown>;\n agent: Record<string, unknown>;\n};\n\nfunction primaryAgentAlias(applied: AppliedDraft): string {\n const aliases = Array.isArray(applied.agent.aliases) ? applied.agent.aliases : [];\n const agentAlias = String(aliases[0] || applied.result.primary_agent_alias || \"\");\n if (!agentAlias) throw new Error(\"Apply completed without a primary Agent alias\");\n return agentAlias;\n}\n\nfunction bffApplicationValues(applied: AppliedDraft): Record<string, EnvFileValue> {\n const agentAlias = primaryAgentAlias(applied);\n return {\n AGENTS24_API_KEY: applied.apiKey,\n AGENTS24_AGENTS: { value: JSON.stringify([{ agentAlias }]), literal: true },\n };\n}\n\nasync function packageIdentity(input: string, requireValid = true): Promise<{ packageId: string; packageName: string }> {\n const result = await validatePackage(input);\n const packageId = String(result.package.package_id || \"\");\n if (!/^pkg_[0-9a-f]{32}$/.test(packageId)) {\n throw new Error(\"Resource Package is missing a valid package_id; create an independent package with agents24 fork <source> <target>\");\n }\n if (requireValid && !result.valid) throw Object.assign(new Error(\"Resource package is invalid\"), { diagnostics: result.diagnostics });\n return { packageId, packageName: String(result.package.name || \"\") };\n}\n\nasync function resolveInstallation(\n input: string,\n client: Awaited<ReturnType<typeof createRemoteClient>>,\n requireValid = true,\n): Promise<Record<string, unknown>> {\n const { packageId } = await packageIdentity(input, requireValid);\n return client.resourceInstallations.getByPackageId(packageId);\n}\n\nfunction blockedPlanMessage(plan: Record<string, unknown>): string {\n const blockers = Array.isArray(plan.blockers)\n ? plan.blockers.filter((item): item is Record<string, unknown> => Boolean(item && typeof item === \"object\"))\n : [];\n if (!blockers.length) return \"The Resource Package plan is blocked\";\n const details = blockers.map((blocker) => {\n const resource = String(blocker.resource_key || blocker.requirement_key || \"\").trim();\n const guidance = String(blocker.guidance || \"\").trim();\n const code = String(blocker.code || \"PLAN_BLOCKED\").trim();\n return `${code}${resource ? ` (${resource})` : \"\"}${guidance ? `: ${guidance}` : \"\"}`;\n });\n return `The Resource Package plan is blocked: ${details.join(\"; \")}`;\n}\n\nasync function ensureInstallation(\n input: string,\n client: Awaited<ReturnType<typeof createRemoteClient>>,\n data: Uint8Array,\n): Promise<string> {\n const identity = await packageIdentity(input);\n const initial = await client.resourceInstallations.plan(upload(data, input));\n if (initial.installation_id) return String(initial.installation_id);\n const created = await client.resourceInstallations.create(\n { package_id: identity.packageId, package_name: String(initial.package_name), operation_id: String(initial.operation_id) },\n { idempotencyKey: `installation-${identity.packageId}` },\n );\n return String(created.id);\n}\n\nasync function primaryAgentForApply(\n parsed: Parsed,\n input: string,\n plan: Record<string, unknown>,\n client: RemoteClient,\n): Promise<string | undefined> {\n const explicit = flag(parsed, \"agent\");\n if (explicit) return explicit;\n const installationId = String(plan.installation_id || \"\").trim();\n if (installationId) {\n const installation = await client.resourceInstallations.get(installationId);\n if (String(installation.primary_resource_key || \"\").trim()) return undefined;\n }\n const validated = await validatePackage(input);\n const agentPaths = new Set(validated.resources\n .filter((resource) => String(resource.kind || \"\") === \"agent\")\n .map((resource) => String(resource.path || \"\")));\n const declarations = Array.isArray(validated.package.resources)\n ? validated.package.resources.filter((item): item is Record<string, unknown> => Boolean(item && typeof item === \"object\" && !Array.isArray(item)))\n : [];\n const agents = declarations\n .filter((resource) => agentPaths.has(String(resource.path || \"\")))\n .map((resource) => String(resource.key || \"\").trim())\n .filter(Boolean);\n if (agents.length <= 1) return agents[0];\n if (!interactive(parsed)) {\n throw new Error(`This package declares multiple Agents. Select the application entrypoint with --agent <stable-key>. Available keys: ${agents.join(\", \")}`);\n }\n const answer = await select<string>({\n message: \"Primary Agent\",\n options: agents.map((key) => ({ value: key, label: key })),\n });\n cancelled(answer);\n return answer;\n}\n\ntype RemoteClient = Awaited<ReturnType<typeof createRemoteClient>>;\n\nasync function applyDraft(\n parsed: Parsed,\n options: {\n apiKey?: string;\n client?: RemoteClient;\n skipConfirmation?: boolean;\n integrationMode?: InstallMode;\n } = {},\n): Promise<AppliedDraft> {\n const input = parsed.positionals[0];\n if (!input) throw new Error(`${parsed.command} requires a Resource Package directory or ZIP`);\n await packageIdentity(input);\n const apiKey = options.apiKey || await apiKeyForLifecycle(parsed);\n const client = options.client || await createRemoteClient({ ...process.env, AGENTS24_API_KEY: apiKey });\n const data = await packPackage(input);\n let plan = await client.resourceInstallations.plan({\n ...upload(data, input),\n prune: flag(parsed, \"prune\") === \"true\",\n });\n if (plan.can_apply !== true && interactive(parsed)) {\n const installationId = await ensureInstallation(input, client, data);\n if (await promptInstallationRequirementLinks(client, installationId, plan, true)) {\n plan = await client.resourceInstallations.plan({\n ...upload(data, input), prune: flag(parsed, \"prune\") === \"true\",\n });\n }\n }\n if (plan.can_apply !== true) throw Object.assign(new Error(blockedPlanMessage(plan)), { plan });\n const primaryResourceKey = await primaryAgentForApply(parsed, input, plan, client);\n if (!options.skipConfirmation) await applyConfirmation(parsed, plan);\n const secrets = await secretValues(input);\n let operation = await client.resourceInstallations.apply(String(plan.operation_id), {\n primary_resource_key: primaryResourceKey,\n integration_mode: options.integrationMode || flag(parsed, \"integration\") || \"publish-only\",\n secrets,\n }, { idempotencyKey: `apply-${String(plan.package_hash).slice(0, 40)}` });\n operation = await pollOperation(client, operation);\n if (operation.status !== \"completed\") {\n throw Object.assign(new Error(\"Draft apply failed\"), {\n failureId: operation.failure_id,\n operationId: operation.operation_id,\n operationStatus: operation.status,\n });\n }\n const installationIdValue = String(operation.installation_id || \"\");\n if (!installationIdValue) throw new Error(\"Apply completed without an installation ID\");\n const result = operation.result && typeof operation.result === \"object\" ? operation.result as Record<string, unknown> : {};\n const agentId = String(result.primary_agent_id || \"\");\n const resources = Array.isArray(result.resources) ? result.resources as Array<Record<string, unknown>> : [];\n const agent = resources.find((item) => String(item.id) === agentId) || { id: agentId, name: \"Agent\" };\n return { client, apiKey, input, installationId: installationIdValue, plan, operation, result, agent };\n}\n\ntype PublishedDraft = {\n publication: Record<string, unknown>;\n installationId: string;\n};\n\nasync function publishDraft(parsed: Parsed, applied?: AppliedDraft): Promise<PublishedDraft> {\n const input = applied?.input || parsed.positionals[0];\n if (!input) throw new Error(\"publish requires a Resource Package directory or ZIP\");\n await packageIdentity(input);\n const apiKey = applied?.apiKey || await apiKeyForLifecycle(parsed);\n const client = applied?.client || await createRemoteClient({ ...process.env, AGENTS24_API_KEY: apiKey });\n const installed = applied ? undefined : await resolveInstallation(input, client);\n const id = applied?.installationId || String(installed?.id || \"\");\n if (!id) throw new Error(\"No installation exists for this package_id; run agents24 apply first\");\n const data = await packPackage(input);\n const plan = applied?.plan || await client.resourceInstallations.plan(upload(data, input));\n const publication = await client.resourceInstallations.publish(id, { package_hash: String(plan.package_hash) }, {\n idempotencyKey: `publish-${String(plan.package_hash).slice(0, 40)}`,\n });\n return { publication, installationId: id };\n}\n\nasync function execute(parsed: Parsed): Promise<Record<string, unknown>> {\n if (parsed.command === \"fork\") {\n const [source, target] = parsed.positionals;\n if (!source || !target) throw new Error(\"Usage: agents24 fork <source> <target> [--name <name>]\");\n const result = await forkPackage(source, target, flag(parsed, \"name\"));\n return { ok: true, directory: resolve(target), package: result.name, package_id: result.packageId };\n }\n if (parsed.command === \"prepare\") {\n const input = parsed.positionals[0];\n if (!input) throw new Error(\"prepare requires a Resource Package directory\");\n await packageIdentity(input);\n return preparePackage(input);\n }\n if (parsed.command === \"plan\") {\n const input = parsed.positionals[0];\n if (!input) throw new Error(\"plan requires a Resource Package directory or ZIP\");\n await packageIdentity(input);\n const apiKey = await apiKeyForLifecycle(parsed);\n const client = await createRemoteClient({ ...process.env, AGENTS24_API_KEY: apiKey });\n const data = await packPackage(input);\n const plan = await client.resourceInstallations.plan({\n ...upload(data, input),\n prune: flag(parsed, \"prune\") === \"true\",\n });\n return { ok: plan.can_apply === true, plan };\n }\n if (parsed.command === \"pull\") {\n const input = parsed.positionals[0];\n if (!input) throw new Error(\"pull requires a Resource Package directory\");\n const apiKey = await apiKeyForLifecycle(parsed);\n const client = await createRemoteClient({ ...process.env, AGENTS24_API_KEY: apiKey });\n const installation = await resolveInstallation(input, client, false);\n return pullPackage({ parsed, input, client, installationId: String(installation.id || \"\") });\n }\n if (parsed.command === \"status\") {\n const input = parsed.positionals[0];\n if (!input) throw new Error(\"status requires a Resource Package directory or ZIP\");\n const identity = await packageIdentity(input);\n const apiKey = await apiKeyForLifecycle(parsed);\n const client = await createRemoteClient({ ...process.env, AGENTS24_API_KEY: apiKey });\n let status: Record<string, unknown>;\n try {\n status = await resolveInstallation(input, client);\n } catch (error) {\n if (!isNotFoundResponse(error)) throw error;\n return {\n ok: true,\n installed: false,\n package_id: identity.packageId,\n message: \"This package has not been applied to this organization. Run agents24 apply <package-directory> to create its resources.\",\n };\n }\n return installedPackageStatus(input, client, status);\n }\n if (parsed.command === \"resources\") {\n if (parsed.positionals[0] !== \"list\") throw new Error(\"Usage: agents24 resources list --kind <kind>\");\n const kind = flag(parsed, \"kind\");\n if (!kind) throw new Error(\"resources list requires --kind\");\n const apiKey = await apiKeyForLifecycle(parsed);\n const result = await (await createRemoteClient({ ...process.env, AGENTS24_API_KEY: apiKey })).resourceInstallations.resources({\n kind, query: flag(parsed, \"query\"), limit: Number(flag(parsed, \"limit\") || 100),\n });\n return { ok: true, ...result };\n }\n if (parsed.command === \"link\") {\n const input = parsed.positionals[0];\n if (!input) throw new Error(\"link requires a Resource Package directory or ZIP\");\n const assignments = values(parsed, \"resource\");\n if (!assignments.length) throw new Error(\"link requires --resource <stable-key>=<uuid>\");\n await packageIdentity(input);\n const apiKey = await apiKeyForLifecycle(parsed);\n const client = await createRemoteClient({ ...process.env, AGENTS24_API_KEY: apiKey });\n const data = await packPackage(input);\n const id = await ensureInstallation(input, client, data);\n const linked = [];\n for (const assignment of assignments) {\n const separator = assignment.indexOf(\"=\");\n if (separator <= 0 || separator === assignment.length - 1) throw new Error(\"--resource must be <stable-key>=<uuid>\");\n const resourceKey = assignment.slice(0, separator);\n const resourceId = assignment.slice(separator + 1);\n linked.push(await client.resourceInstallations.link(id, { resource_key: resourceKey, resource_id: resourceId }, {\n idempotencyKey: `link-${createHash(\"sha256\").update(`${id}:${assignment}`).digest(\"hex\").slice(0, 40)}`,\n }));\n }\n return { ok: true, installation_id: id, linked };\n }\n if (parsed.command === \"apply\") {\n const app = await resolveApp(parsed);\n const integration = app || flag(parsed, \"integration\")\n ? await resolveInstallMode(parsed, app)\n : \"publish-only\";\n const applied = await applyDraft(parsed, { integrationMode: integration });\n const envFile = app && integration === \"bff\" && flag(parsed, \"no-write-env\") !== \"true\"\n ? await updateEnvFile(app, bffApplicationValues(applied))\n : undefined;\n return {\n ok: true,\n phase: \"draft_applied\",\n installation_id: applied.installationId,\n agent_alias: primaryAgentAlias(applied),\n operation_id: applied.operation.operation_id,\n operation_status: applied.operation.status,\n ...(envFile ? { env_file: envFile } : {}),\n };\n }\n if (parsed.command === \"publish\") {\n const published = await publishDraft(parsed);\n return {\n ok: true,\n phase: \"published\",\n installation_id: published.installationId,\n publication: publicationProjection(published.publication),\n };\n }\n if (parsed.command === \"setup\") {\n const app = await resolveApp(parsed);\n const integration = await resolveInstallMode(parsed, app);\n const applied = await applyDraft(parsed, { integrationMode: integration });\n const published = await publishDraft(parsed, applied);\n const installed = await applied.client.resourceInstallations.get(applied.installationId);\n let deployment: Record<string, unknown> | undefined;\n let deploymentId: string | undefined;\n if (integration === \"client-deployment\") {\n deployment = installed.client_deployment_id\n ? await applied.client.clientDeployments.get(String(installed.client_deployment_id))\n : await clientDeployment(parsed, applied.client, applied.agent, app);\n if (!installed.client_deployment_id) {\n await applied.client.resourceInstallations.bindDeployment(applied.installationId, { client_deployment_id: String(deployment.id) }, { idempotencyKey: `deployment-bind-${applied.installationId}` });\n }\n deploymentId = String(deployment.client_id || \"\");\n }\n let envFile: string | undefined;\n if (app && flag(parsed, \"no-write-env\") !== \"true\" && integration !== \"publish-only\") {\n const localClientBaseUrl = integration === \"client-deployment\" ? clientAppBaseUrl() : undefined;\n envFile = await updateEnvFile(app, integration === \"client-deployment\"\n ? { VITE_AGENTS24_DEPLOYMENT_ID: String(deploymentId), ...(localClientBaseUrl ? { VITE_AGENTS24_BASE_URL: localClientBaseUrl } : {}) }\n : bffApplicationValues(applied));\n }\n return {\n ok: true,\n phase: deployment ? \"deployed\" : \"published\",\n integration,\n installation_id: applied.installationId,\n agent_alias: primaryAgentAlias(applied),\n publication: publicationProjection(published.publication),\n ...(deployment ? { deployment_id: deploymentId } : {}),\n ...(envFile ? { env_file: envFile } : {}),\n };\n }\n if (parsed.command === \"dev\") {\n const input = parsed.positionals[0];\n if (!input) throw new Error(\"dev requires a Resource Package directory\");\n await packageIdentity(input);\n await preparePackage(input);\n const declared = await developmentArtifacts(input);\n const selectedKey = flag(parsed, \"artifact\");\n const artifacts = selectedKey ? declared.filter((item) => item.key === selectedKey) : declared;\n if (!artifacts.length) throw new Error(selectedKey ? `Artifact ${selectedKey} has no development configuration` : \"No self-hosted Artifact development configuration was found\");\n const apiKey = await apiKeyForLifecycle(parsed);\n const client = await createRemoteClient({ ...process.env, AGENTS24_API_KEY: apiKey });\n const applied = flag(parsed, \"apply\") === \"true\"\n ? await applyDraft(parsed, { apiKey, client })\n : undefined;\n let id = applied?.installationId;\n if (!id) {\n try {\n id = String((await resolveInstallation(input, client)).id || \"\");\n } catch (error) {\n if (!isNotFoundResponse(error)) throw error;\n throw new Error(\"Apply the package before starting Artifact development\");\n }\n }\n if (!id) throw new Error(\"Apply the package before starting Artifact development\");\n const configuredSecrets = await secretValues(input);\n if (Object.keys(configuredSecrets).length) await client.resourceInstallations.configureSecrets(id, { secrets: configuredSecrets });\n const directory = await packageDirectory(input);\n const localEnv = directory ? parseEnv(await readFile(join(directory, \".env.local\"), \"utf8\")) : {};\n const children: ChildProcess[] = [];\n const relays: Array<{ sessionId: string; socket: WebSocket; state: { terminalReason?: string } }> = [];\n try {\n for (const artifact of artifacts) {\n if (artifact.command) children.push(spawn(artifact.command, artifact.args, { cwd: artifact.cwd, env: { ...process.env, ...localEnv }, stdio: \"inherit\", shell: false }));\n await waitForServer(artifact.baseUrl, artifact.protocol.health_path);\n relays.push(await openDevelopmentRelay(client, id, artifact, localEnv));\n }\n const developmentSessions: Record<string, string> = Object.fromEntries(artifacts.map((item, index) => [item.key, relays[index].sessionId]));\n process.stdout.write(`${JSON.stringify({ ok: true, phase: \"development_connected\", installation_id: id, development_sessions: developmentSessions, draft_applied: Boolean(applied) }, null, 2)}\\n`);\n await new Promise<void>((resolveStop) => {\n let stopping = false;\n const reconnecting = new Set<number>();\n const stop = () => { stopping = true; resolveStop(); };\n const watch = (relay: typeof relays[number], index: number) => {\n relay.socket.addEventListener(\"close\", async () => {\n if (stopping) return;\n if (relay.state.terminalReason || reconnecting.has(index)) {\n stop();\n return;\n }\n reconnecting.add(index);\n for (let attempt = 1; attempt <= 3 && !stopping; attempt += 1) {\n await new Promise((resolveDelay) => setTimeout(resolveDelay, attempt * 500));\n try {\n const replacement = await openDevelopmentRelay(client, id, artifacts[index], localEnv);\n relays[index] = replacement;\n developmentSessions[artifacts[index].key] = replacement.sessionId;\n reconnecting.delete(index);\n watch(replacement, index);\n return;\n } catch {\n // Retry with a fresh one-time relay admission.\n }\n }\n reconnecting.delete(index);\n stop();\n }, { once: true });\n };\n process.once(\"SIGINT\", stop);\n process.once(\"SIGTERM\", stop);\n relays.forEach(watch);\n });\n return { ok: true, phase: \"development_stopped\", installation_id: id };\n } finally {\n for (const relay of relays) relay.socket.close();\n for (const child of children) child.kill(\"SIGTERM\");\n }\n }\n if (parsed.command === \"init\") {\n const directory = resolve(parsed.positionals[0] || \".\");\n const name = flag(parsed, \"name\") || basename(directory);\n const packageName = await initializePackage(directory, name);\n return { ok: true, directory, package: packageName };\n }\n if (parsed.command === \"validate\") {\n const input = parsed.positionals[0];\n if (!input) throw new Error(\"validate requires a package directory or ZIP\");\n const local = await validatePackage(input);\n let remote: Record<string, unknown> | undefined;\n if (flag(parsed, \"remote\") === \"true\" && local.valid) {\n const data = await packPackage(input);\n remote = await (await createRemoteClient()).resourcePackages.validatePackage(upload(data, input));\n }\n return { ok: local.valid && (!remote || remote.valid === true), local: { ...local, files: undefined }, ...(remote ? { remote } : {}) };\n }\n if (parsed.command === \"pack\") {\n const input = parsed.positionals[0];\n if (!input) throw new Error(\"pack requires a package directory\");\n const data = await packPackage(input);\n const output = resolve(flag(parsed, \"output\") || `${basename(resolve(input))}.agents24.zip`);\n await writeFile(output, data);\n return { ok: true, output, bytes: data.byteLength };\n }\n if (parsed.command === \"export\") {\n const kind = flag(parsed, \"kind\");\n const id = flag(parsed, \"id\");\n if (!kind || !id) throw new Error(\"export requires --kind and --id\");\n const target = flag(parsed, \"target\") || \"draft\";\n const selectors = [{ kind, id, target, ...(flag(parsed, \"version-id\") ? { version_id: flag(parsed, \"version-id\") } : {}) }];\n for (const value of values(parsed, \"selector\")) {\n const [itemKind, itemId, itemTarget = \"draft\", versionId] = value.split(\":\");\n if (!itemKind || !itemId) throw new Error(\"--selector must be kind:id[:draft|version[:version-id]]\");\n selectors.push({ kind: itemKind, id: itemId, target: itemTarget, ...(versionId ? { version_id: versionId } : {}) });\n }\n const request = { selectors };\n const archive = await (await createRemoteClient()).resourcePackages.exportPackage(request);\n const output = resolve(flag(parsed, \"output\") || archive.filename);\n await writeFile(output, archive.data);\n return { ok: true, output, bytes: archive.data.byteLength };\n }\n if (parsed.command === \"preview\" || parsed.command === \"import\") {\n const client = await createRemoteClient();\n const { data, filename } = await packedValidatedPackage(parsed);\n const request = {\n data,\n filename,\n mappings: mappings(parsed),\n };\n let preview = await client.resourcePackages.importPreview(request);\n request.mappings = await promptImportMappings(client, preview, request.mappings, interactive(parsed));\n if (Object.keys(request.mappings).length) preview = await client.resourcePackages.importPreview(request);\n if (parsed.command === \"preview\") return { ok: preview.can_import === true, preview };\n if (preview.can_import !== true) return { ok: false, preview };\n await confirmation(parsed, preview);\n const packageHash = String(preview.package_hash || \"\");\n if (!packageHash) throw new Error(\"Package preview did not return a package hash\");\n const imported = await client.resourcePackages.importPackage(request, { idempotencyKey: importKey(packageHash, request.mappings) });\n return { ok: true, phase: \"imported\", preview, result: imported };\n }\n throw new Error(`Unknown package command: ${parsed.command}`);\n}\n\nexport async function run(argv = process.argv.slice(2)): Promise<number> {\n const helpIndex = argv.findIndex((item) => item === \"--help\" || item === \"-h\");\n if (argv.length === 0 || helpIndex >= 0) {\n const topic = argv[0] === \"package\"\n ? argv[1] || \"package\"\n : !argv[0] || argv[0].startsWith(\"-\")\n ? \"agents24\"\n : argv[0];\n const usage = topic === \"agents24\"\n ? \"Usage: agents24 <prepare|plan|apply|pull|dev|publish|setup|status|link|resources|fork> | agents24 package <init|validate|pack|export|preview|import>\"\n : topic === \"package\"\n ? \"Usage: agents24 package <init|validate|pack|export|preview|import>\"\n : topic === \"init\"\n ? \"Usage: agents24 package init [directory] [--name <name>]\"\n : `Usage: agents24 ${argv[0] === \"package\" ? `package ${topic}` : topic} [options]`;\n process.stdout.write(`${usage}\\n`);\n return 0;\n }\n let parsed: Parsed | undefined;\n try {\n parsed = parseArguments(argv);\n const result = await execute(parsed);\n writeResult(result, parsed);\n return result.ok === false ? 1 : 0;\n } catch (error) {\n const payload = failurePayload(error);\n if (parsed) writeResult(payload, parsed);\n else process.stderr.write(`${JSON.stringify(payload, null, 2)}\\n`);\n return 1;\n }\n}\n\nprocess.exitCode = await run();\n","export type Parsed = {\n command: string;\n positionals: string[];\n flags: Map<string, string[]>;\n};\n\nconst BOOLEAN_FLAGS = new Set([\"json\", \"remote\", \"yes\", \"allow-incomplete\", \"no-write-env\", \"prune\", \"apply\"]);\nconst LIFECYCLE_COMMANDS = new Set([\"prepare\", \"plan\", \"apply\", \"pull\", \"dev\", \"publish\", \"setup\", \"status\", \"link\", \"resources\", \"fork\"]);\n\nexport function parseArguments(argv: string[]): Parsed {\n const lifecycle = LIFECYCLE_COMMANDS.has(argv[0]);\n if (!lifecycle && (argv[0] !== \"package\" || !argv[1])) {\n throw new Error(\"Usage: agents24 <prepare|plan|apply|pull|dev|publish|setup|status|link|resources|fork> | agents24 package <init|validate|pack|export|preview|import>\");\n }\n const flags = new Map<string, string[]>();\n const positionals: string[] = [];\n for (let index = lifecycle ? 1 : 2; index < argv.length; index += 1) {\n const current = argv[index];\n if (!current.startsWith(\"--\")) {\n positionals.push(current);\n continue;\n }\n const [rawName, inline] = current.slice(2).split(\"=\", 2);\n if (!rawName) throw new Error(\"Invalid option\");\n if (rawName === \"api-key\") {\n throw new Error(\"--api-key is not supported; use AGENTS24_API_KEY or the masked prompt\");\n }\n const value = inline ?? (BOOLEAN_FLAGS.has(rawName) ? \"true\" : argv[++index]);\n if (value === undefined || value.startsWith(\"--\")) throw new Error(`--${rawName} requires a value`);\n flags.set(rawName, [...(flags.get(rawName) || []), value]);\n }\n return { command: lifecycle ? argv[0] : argv[1], positionals, flags };\n}\n\nexport function flag(parsed: Parsed, name: string): string | undefined {\n return parsed.flags.get(name)?.at(-1);\n}\n\nexport function values(parsed: Parsed, name: string): string[] {\n return parsed.flags.get(name) || [];\n}\n","import type { Diagnostic } from \"./package-source.js\";\nimport type { Parsed } from \"./cli-arguments.js\";\nimport { flag } from \"./cli-arguments.js\";\n\nconst sensitiveValues = new Set<string>();\n\nexport function registerSensitiveValue(value: string): void {\n if (value.length >= 8) sensitiveValues.add(value);\n}\n\nfunction redactText(value: string): string {\n let result = value;\n for (const secret of sensitiveValues) result = result.split(secret).join(\"[REDACTED]\");\n return result;\n}\n\nfunction sanitize(value: unknown): unknown {\n if (typeof value === \"string\") return redactText(value);\n if (Array.isArray(value)) return value.map(sanitize);\n if (!value || typeof value !== \"object\") return value;\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>).map(([key, item]) => [key, sanitize(item)]),\n );\n}\n\nfunction readDiagnostics(value: unknown): Diagnostic[] | undefined {\n return Array.isArray(value) ? value as Diagnostic[] : undefined;\n}\n\nfunction diagnostics(error: unknown): Diagnostic[] | undefined {\n if (!error || typeof error !== \"object\") return undefined;\n const record = error as { diagnostics?: unknown; details?: unknown };\n const fromError = readDiagnostics(record.diagnostics);\n if (fromError) return fromError;\n if (!record.details || typeof record.details !== \"object\" || Array.isArray(record.details)) return undefined;\n const details = record.details as Record<string, unknown>;\n const fromDetails = readDiagnostics(details.diagnostics);\n if (fromDetails) return fromDetails;\n const nested = details.detail;\n if (!nested || typeof nested !== \"object\" || Array.isArray(nested)) return undefined;\n return readDiagnostics((nested as Record<string, unknown>).diagnostics);\n}\n\nexport function failurePayload(error: unknown): Record<string, unknown> {\n const diagnosticList = diagnostics(error);\n const record = error && typeof error === \"object\"\n ? error as Record<string, unknown>\n : {};\n const clean = (value: unknown, pattern: RegExp): string | undefined => {\n const candidate = typeof value === \"string\" ? value.trim() : \"\";\n return pattern.test(candidate) ? candidate : undefined;\n };\n const failureId = clean(record.failureId, /^[A-Za-z0-9_-]{1,128}$/);\n const requestId = clean(record.requestId, /^[A-Za-z0-9_.:-]{1,128}$/);\n const code = clean(record.code, /^[A-Z0-9_]{2,128}$/);\n const category = clean(record.category, /^[a-z_]{2,64}$/);\n const operationId = clean(record.operationId, /^[A-Za-z0-9_-]{1,128}$/);\n const operationStatus = clean(record.operationStatus, /^[a-z_]{2,64}$/);\n return {\n ok: false,\n error: redactText(error instanceof Error ? error.message : \"Unexpected CLI failure\"),\n ...(failureId ? { failure_id: failureId } : {}),\n ...(requestId ? { request_id: requestId } : {}),\n ...(code ? { code } : {}),\n ...(category ? { category } : {}),\n ...(operationId ? { operation_id: operationId } : {}),\n ...(operationStatus ? { operation_status: operationStatus } : {}),\n ...(typeof record.status === \"number\" ? { status: record.status } : {}),\n ...(error && typeof error === \"object\" && \"phase\" in error\n ? { phase: (error as { phase: unknown }).phase }\n : {}),\n ...(error && typeof error === \"object\" && \"imported\" in error\n ? { import_result: (error as { imported: unknown }).imported }\n : {}),\n ...(diagnosticList ? { diagnostics: diagnosticList } : {}),\n };\n}\n\nexport function writeResult(result: Record<string, unknown>, parsed: Parsed): void {\n const compact = flag(parsed, \"json\") === \"true\";\n const safeResult = sanitize(result);\n const body = compact ? JSON.stringify(safeResult) : JSON.stringify(safeResult, null, 2);\n const stream = result.ok === false ? process.stderr : process.stdout;\n stream.write(`${body}\\n`);\n}\n","import { basename, join, resolve } from \"node:path\";\nimport { readFile, stat, writeFile } from \"node:fs/promises\";\n\nexport function canonicalJson(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(canonicalJson).join(\",\")}]`;\n if (value && typeof value === \"object\") return `{${Object.entries(value as Record<string, unknown>).sort(([a], [b]) => a.localeCompare(b)).map(([key, item]) => `${JSON.stringify(key)}:${canonicalJson(item)}`).join(\",\")}}`;\n return JSON.stringify(value);\n}\n\nexport function isNotFoundResponse(error: unknown): boolean {\n return Boolean(error && typeof error === \"object\" && \"status\" in error\n && Number((error as { status?: unknown }).status) === 404);\n}\n\nexport function packageUpload(data: Uint8Array, input: string): { data: Uint8Array; filename: string } {\n return {\n data,\n filename: basename(input).endsWith(\".zip\") ? basename(input) : \"resource.agents24.zip\",\n };\n}\n\nexport async function packageDirectory(input: string): Promise<string | undefined> {\n try {\n return (await stat(input)).isDirectory() ? resolve(input) : undefined;\n } catch {\n return undefined;\n }\n}\n\nexport async function ensureIgnored(directory: string, entries: string[]): Promise<void> {\n const target = join(directory, \".gitignore\");\n let current = \"\";\n try {\n current = await readFile(target, \"utf8\");\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error;\n }\n const lines = new Set(current.split(/\\r?\\n/).map((item) => item.trim()).filter(Boolean));\n const missing = entries.filter((item) => !lines.has(item));\n if (!missing.length) return;\n const separator = current && !current.endsWith(\"\\n\") ? \"\\n\" : \"\";\n await writeFile(target, `${current}${separator}${missing.join(\"\\n\")}\\n`);\n}\n","import { randomBytes } from \"node:crypto\";\nimport { chmod, readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { parse as parseYaml } from \"yaml\";\n\nimport { ensureIgnored, packageDirectory } from \"./cli-installation-state.js\";\nimport { loadPackageFiles, validatePackage } from \"./package-source.js\";\n\nexport function parseEnv(textValue: string): Record<string, string> {\n const result: Record<string, string> = {};\n for (const line of textValue.split(/\\r?\\n/)) {\n const match = /^([A-Za-z_][A-Za-z0-9_]*)=(.*)$/.exec(line.trim());\n if (!match) continue;\n const raw = match[2].trim();\n try { result[match[1]] = raw.startsWith('\"') ? JSON.parse(raw) : raw; }\n catch { result[match[1]] = raw; }\n }\n return result;\n}\n\nasync function requirements(input: string): Promise<Array<{ key: string; env: string; generate: boolean }>> {\n const files = await loadPackageFiles(input);\n const manifest = parseYaml(files.get(\"agents24.yaml\") || \"\") as Record<string, unknown>;\n const requires = manifest.requires && typeof manifest.requires === \"object\" ? manifest.requires as Record<string, unknown> : {};\n const secrets = requires.secrets && typeof requires.secrets === \"object\" ? requires.secrets as Record<string, unknown> : {};\n return Object.entries(secrets).map(([key, raw]) => {\n const item = raw && typeof raw === \"object\" ? raw as Record<string, unknown> : {};\n const env = String(item.env || \"\").trim();\n if (!env) throw new Error(`Secret requirement ${key} must declare env`);\n return { key: `$secrets.${key}`, env, generate: item.generate === true };\n });\n}\n\nexport async function preparePackage(input: string): Promise<Record<string, unknown>> {\n const directory = await packageDirectory(input);\n if (!directory) throw new Error(\"prepare requires a Resource Package directory\");\n const local = await validatePackage(input);\n if (!local.valid) throw Object.assign(new Error(\"Resource package is invalid\"), { diagnostics: local.diagnostics });\n const target = join(directory, \".env.local\");\n let current = \"\";\n try { current = await readFile(target, \"utf8\"); }\n catch (error) { if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error; }\n const values = parseEnv(current);\n const generated: string[] = [];\n const preserved: string[] = [];\n let next = current;\n for (const requirement of await requirements(input)) {\n if (values[requirement.env] || process.env[requirement.env]) { preserved.push(requirement.env); continue; }\n if (!requirement.generate) continue;\n const value = randomBytes(32).toString(\"base64url\");\n next += `${next && !next.endsWith(\"\\n\") ? \"\\n\" : \"\"}${requirement.env}=${JSON.stringify(value)}\\n`;\n generated.push(requirement.env);\n }\n await writeFile(target, next, { mode: 0o600 });\n await chmod(target, 0o600);\n await ensureIgnored(directory, [\".env.local\"]);\n return { ok: true, package: directory, env_file: target, generated, preserved };\n}\n\nexport async function secretValues(input: string): Promise<Record<string, string>> {\n const directory = await packageDirectory(input);\n let local: Record<string, string> = {};\n if (directory) {\n try { local = parseEnv(await readFile(join(directory, \".env.local\"), \"utf8\")); }\n catch (error) { if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error; }\n }\n const result: Record<string, string> = {};\n for (const requirement of await requirements(input)) {\n const value = String(process.env[requirement.env] || local[requirement.env] || \"\");\n if (value) result[requirement.key] = value;\n }\n return result;\n}\n","import { createInterface } from \"node:readline/promises\";\n\nimport { flag, type Parsed } from \"./cli-arguments.js\";\nimport { packageUpload } from \"./cli-installation-state.js\";\nimport { packPackageSnapshot, replacePackageFiles } from \"./package-source.js\";\nimport type { RemoteClient } from \"./remote.js\";\n\nasync function confirmPull(parsed: Parsed, plan: Record<string, unknown>): Promise<void> {\n if (flag(parsed, \"yes\") === \"true\") return;\n if (flag(parsed, \"json\") === \"true\") throw new Error(\"pull requires --yes with --json\");\n if (!process.stdin.isTTY || !process.stdout.isTTY) throw new Error(\"pull requires --yes in noninteractive mode\");\n const files = Array.isArray(plan.files) ? plan.files as Array<Record<string, unknown>> : [];\n for (const item of files) process.stdout.write(`${String(item.status || \"M\")} ${String(item.path || \"\")}\\n`);\n const summary = plan.summary && typeof plan.summary === \"object\" ? plan.summary as Record<string, unknown> : {};\n const prompt = createInterface({ input: process.stdin, output: process.stdout });\n const answer = await prompt.question(\n `Pull platform drafts (${summary.files_added || 0} added, ${summary.files_modified || 0} modified, ${summary.files_removed || 0} removed)? [y/N] `,\n );\n prompt.close();\n if (!/^y(?:es)?$/i.test(answer.trim())) throw new Error(\"Pull cancelled\");\n}\n\nexport async function pullPackage(options: {\n parsed: Parsed;\n input: string;\n client: RemoteClient;\n installationId: string;\n}): Promise<Record<string, unknown>> {\n const { parsed, input, client, installationId } = options;\n const preview = await client.resourceInstallations.planPull(\n installationId,\n packageUpload(await packPackageSnapshot(input), input),\n );\n const plan = preview.plan && typeof preview.plan === \"object\"\n ? preview.plan as Record<string, unknown>\n : {};\n await confirmPull(parsed, plan);\n const pullId = String(preview.pull_id || \"\");\n const payload = await client.resourceInstallations.downloadPull(installationId, pullId);\n if (\n payload.platform_snapshot_hash !== preview.platform_snapshot_hash\n || payload.package_hash !== preview.package_hash\n || !payload.files\n || typeof payload.files !== \"object\"\n || Array.isArray(payload.files)\n ) throw new Error(\"Pulled package snapshot does not match its preview\");\n let accepted: Record<string, unknown> = {};\n await replacePackageFiles(input, payload.files as Record<string, string>, async () => {\n accepted = await client.resourceInstallations.acceptPull(\n installationId,\n pullId,\n {\n platform_snapshot_hash: String(preview.platform_snapshot_hash || \"\"),\n package_hash: String(preview.package_hash || \"\"),\n },\n { idempotencyKey: `pull-${pullId}` },\n );\n });\n return {\n ok: true,\n phase: \"pulled\",\n installation_id: installationId,\n pull_id: preview.pull_id,\n package_hash: preview.package_hash,\n summary: plan.summary || {},\n files: Array.isArray(plan.files) ? plan.files : [],\n status: accepted.status,\n };\n}\n","import { packageUpload } from \"./cli-installation-state.js\";\nimport { packPackage } from \"./package-source.js\";\nimport type { RemoteClient } from \"./remote.js\";\n\nexport async function installedPackageStatus(\n input: string,\n client: RemoteClient,\n status: Record<string, unknown>,\n): Promise<Record<string, unknown>> {\n const callableBindings = Array.isArray(status.callable_bindings)\n ? status.callable_bindings as Array<Record<string, unknown>>\n : [];\n const publicationCurrent = status.publication_state === \"current\";\n const healthy = callableBindings.filter((item) => (\n item.draft_status === \"attached\"\n && (!publicationCurrent || item.published_status === \"attached\")\n )).length;\n const compiled = await client.resourcePackages.validatePackage(\n packageUpload(await packPackage(input), input),\n );\n const localPackageHash = typeof compiled.package_hash === \"string\"\n ? compiled.package_hash\n : null;\n return {\n ok: true,\n installed: true,\n binding_summary: {\n total: callableBindings.length,\n healthy,\n unhealthy: callableBindings.length - healthy,\n },\n synchronization: {\n direction: status.last_sync_direction || null,\n synchronized_at: status.last_synchronized_at || null,\n synchronized_package_hash: status.synchronized_package_hash || null,\n local_package_hash: localPackageHash,\n diverged: Boolean(localPackageHash && status.synchronized_package_hash && localPackageHash !== status.synchronized_package_hash),\n },\n installation: status,\n };\n}\n","import { createHash } from \"node:crypto\";\nimport { createInterface } from \"node:readline/promises\";\n\nimport { shouldPromptForDependency } from \"./import-guards.js\";\nimport type { RemoteClient } from \"./remote.js\";\n\nexport async function promptImportMappings(\n client: RemoteClient,\n preview: Record<string, unknown>,\n current: Record<string, string>,\n enabled: boolean,\n): Promise<Record<string, string>> {\n if (!enabled) return current;\n const dependencies = Array.isArray(preview.dependencies)\n ? preview.dependencies.filter((item): item is Record<string, unknown> => Boolean(item && typeof item === \"object\" && item.status === \"unresolved\"))\n : [];\n const unique = new Map(dependencies.map((item) => [String(item.requirement_key || item.id), item]));\n if (!unique.size) return current;\n const prompt = createInterface({ input: process.stdin, output: process.stdout });\n try {\n const next = { ...current };\n for (const [key, dependency] of unique) {\n if (!shouldPromptForDependency(dependency)) continue;\n if (dependency.kind === \"secret\") {\n const answer = await prompt.question(`${dependency.source_name || key} secret ($secret:name, blank to omit): `);\n if (answer.trim()) next[key] = answer.trim();\n continue;\n }\n const response = await client.resourcePackages.candidates({\n kind: String(dependency.kind), query: String(dependency.source_name || \"\"),\n requiredCapability: dependency.required_capability === \"embedding\" ? \"embedding\" : dependency.required_capability === \"chat\" ? \"chat\" : undefined,\n });\n const candidates = Array.isArray(response.items) ? response.items as Array<Record<string, unknown>> : [];\n process.stdout.write(`${dependency.source_name || key}: ${candidates.map((item, index) => `${index + 1}) ${item.name}`).join(\" \")}\\n`);\n const answer = await prompt.question(\"Choose a candidate number (blank to omit): \");\n const selected = candidates[Number(answer) - 1];\n if (selected?.id) next[key] = String(selected.id);\n }\n return next;\n } finally {\n prompt.close();\n }\n}\n\nexport async function promptInstallationRequirementLinks(\n client: RemoteClient,\n installationId: string,\n plan: Record<string, unknown>,\n enabled: boolean,\n): Promise<boolean> {\n if (!enabled) return false;\n const requirements = Array.isArray(plan.external_requirements)\n ? plan.external_requirements.filter((item): item is Record<string, unknown> => Boolean(\n item && typeof item === \"object\" && item.required === true && item.configured !== true && ![\"model\", \"secret\"].includes(String(item.kind)),\n ))\n : [];\n if (!requirements.length) return false;\n const prompt = createInterface({ input: process.stdin, output: process.stdout });\n let linked = false;\n try {\n for (const requirement of requirements) {\n const key = String(requirement.requirement_key || \"\");\n const response = await client.resourcePackages.candidates({ kind: String(requirement.kind), query: String(requirement.name || \"\") });\n const candidates = Array.isArray(response.items) ? response.items as Array<Record<string, unknown>> : [];\n process.stdout.write(`${requirement.name || key}: ${candidates.map((item, index) => `${index + 1}) ${item.name}`).join(\" \")}\\n`);\n const answer = await prompt.question(\"Choose a candidate number (blank to leave unresolved): \");\n const selected = candidates[Number(answer) - 1];\n if (!selected?.id) continue;\n await client.resourceInstallations.link(installationId, { resource_key: key, resource_id: String(selected.id) }, {\n idempotencyKey: `link-${createHash(\"sha256\").update(`${installationId}:${key}:${selected.id}`).digest(\"hex\").slice(0, 40)}`,\n });\n linked = true;\n }\n return linked;\n } finally {\n prompt.close();\n }\n}\n","import { createHmac } from \"node:crypto\";\nimport { hostname } from \"node:os\";\nimport { resolve } from \"node:path\";\nimport { parse as parseYaml } from \"yaml\";\n\nimport { canonicalJson, packageDirectory } from \"./cli-installation-state.js\";\nimport { loadPackageFiles } from \"./package-source.js\";\n\nconst DEFAULT_API_BASE_URL = \"https://api.agents24.dev\";\nconst MANIFEST_POLL_INTERVAL_MS = 2_000;\n\nexport type DevelopmentArtifact = {\n key: string;\n baseUrl: string;\n command?: string;\n args: string[];\n cwd: string;\n protocol: Record<string, unknown>;\n signingSecretEnv?: string;\n};\n\ntype DevelopmentClient = {\n resourceInstallations: {\n prepareDevelopmentSession(\n installationId: string,\n request: { resource_key: string; machine_label: string },\n ): Promise<Record<string, unknown>>;\n };\n};\n\nexport async function developmentArtifacts(input: string): Promise<DevelopmentArtifact[]> {\n const directory = await packageDirectory(input);\n if (!directory) throw new Error(\"dev requires a Resource Package directory\");\n const files = await loadPackageFiles(input);\n const manifest = parseYaml(files.get(\"agents24.yaml\") || \"\") as Record<string, unknown>;\n const resources = Array.isArray(manifest.resources) ? manifest.resources as Array<Record<string, unknown>> : [];\n const requires = manifest.requires && typeof manifest.requires === \"object\" ? manifest.requires as Record<string, unknown> : {};\n const requiredSecrets = requires.secrets && typeof requires.secrets === \"object\" ? requires.secrets as Record<string, unknown> : {};\n const result: DevelopmentArtifact[] = [];\n for (const resource of resources) {\n const path = String(resource.path || \"\");\n if (!/^artifacts\\/[a-z0-9][a-z0-9-]*\\/artifact\\.yaml$/.test(path)) continue;\n const sourceText = files.get(path);\n if (!sourceText) continue;\n const source = parseYaml(sourceText) as Record<string, unknown>;\n if (source.execution_target !== \"self_hosted\") continue;\n const development = source.development && typeof source.development === \"object\" ? source.development as Record<string, unknown> : undefined;\n if (!development) continue;\n const server = source.server && typeof source.server === \"object\" ? source.server as Record<string, unknown> : {};\n const auth = server.auth && typeof server.auth === \"object\" ? server.auth as Record<string, unknown> : {};\n const secretRequirement = String(auth.secret || \"\");\n const secretKey = secretRequirement.startsWith(\"$secrets.\") ? secretRequirement.slice(\"$secrets.\".length) : \"\";\n const secretDeclaration = secretKey && requiredSecrets[secretKey] && typeof requiredSecrets[secretKey] === \"object\"\n ? requiredSecrets[secretKey] as Record<string, unknown>\n : undefined;\n const cwd = resolve(directory, String(development.cwd || \".\"));\n if (cwd !== directory && !cwd.startsWith(`${directory}/`)) throw new Error(`Artifact ${resource.key} development.cwd must remain inside the package`);\n result.push({\n key: String(resource.key || \"\"), baseUrl: String(development.base_url || \"\"),\n command: development.command ? String(development.command) : undefined,\n args: Array.isArray(development.args) ? development.args.map(String) : [], cwd,\n protocol: {\n manifest_path: server.manifest_path, health_path: server.health_path, verify_path: server.verify_path,\n invoke_path: server.invoke_path, auth_mode: auth.mode, signing_secret_requirement: auth.secret,\n },\n signingSecretEnv: secretDeclaration?.env ? String(secretDeclaration.env) : undefined,\n });\n }\n return result;\n}\n\nexport async function waitForServer(baseUrl: string, healthPath: unknown): Promise<void> {\n const target = new URL(String(healthPath || \"/.well-known/agents24/artifact/health\"), baseUrl);\n for (let attempt = 0; attempt < 60; attempt += 1) {\n try { const response = await fetch(target); if (response.ok) return; } catch { /* retry */ }\n await new Promise((resolvePromise) => setTimeout(resolvePromise, 250));\n }\n throw new Error(`Local Artifact server did not become healthy at ${target}`);\n}\n\nexport async function openDevelopmentRelay(\n client: DevelopmentClient,\n installationIdValue: string,\n artifact: DevelopmentArtifact,\n localEnv: Record<string, string>,\n): Promise<{ sessionId: string; socket: WebSocket; state: { terminalReason?: string } }> {\n const admission = await client.resourceInstallations.prepareDevelopmentSession(installationIdValue, {\n resource_key: artifact.key, machine_label: hostname(),\n });\n const apiUrl = new URL(String(process.env.AGENTS24_BASE_URL || DEFAULT_API_BASE_URL));\n apiUrl.protocol = apiUrl.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n apiUrl.pathname = String(admission.relay_path);\n const socket = new WebSocket(apiUrl, [\n \"agents24-artifact-relay\",\n `agents24-credential-${String(admission.relay_token)}`,\n ]);\n const state: { terminalReason?: string } = {};\n let manifestHash: string | undefined;\n let pendingHash: string | undefined;\n let polling = false;\n const manifestUrl = new URL(String(artifact.protocol.manifest_path || \"/.well-known/agents24/artifact\"), artifact.baseUrl);\n const localManifestHash = async (): Promise<string> => {\n const response = await fetch(manifestUrl);\n if (!response.ok) throw new Error(\"Local Artifact manifest is unavailable\");\n return canonicalJson(await response.json());\n };\n const pollManifest = async (): Promise<void> => {\n if (polling || socket.readyState !== WebSocket.OPEN || pendingHash !== undefined) return;\n polling = true;\n try {\n const nextHash = await localManifestHash();\n if (manifestHash !== undefined && nextHash === manifestHash) return;\n if (manifestHash === undefined) {\n manifestHash = nextHash;\n return;\n }\n pendingHash = nextHash;\n socket.send(JSON.stringify({ type: \"manifest_changed\" }));\n } catch {\n pendingHash = \"unavailable\";\n socket.send(JSON.stringify({ type: \"manifest_changed\" }));\n } finally {\n polling = false;\n }\n };\n await new Promise<void>((resolveReady, rejectReady) => {\n socket.addEventListener(\"error\", () => rejectReady(new Error(`Artifact relay failed for ${artifact.key}`)), { once: true });\n socket.addEventListener(\"message\", async (event) => {\n const message = JSON.parse(String(event.data)) as Record<string, unknown>;\n if (message.type === \"ready\") {\n try { manifestHash = await localManifestHash(); } catch { manifestHash = undefined; }\n resolveReady();\n return;\n }\n if (message.type === \"manifest_refreshed\") {\n if (pendingHash && pendingHash !== \"unavailable\") manifestHash = pendingHash;\n pendingHash = undefined;\n return;\n }\n if (message.type === \"manifest_refresh_failed\") {\n pendingHash = undefined;\n return;\n }\n if (message.type === \"superseded\" || message.type === \"revoked\") {\n state.terminalReason = String(message.type);\n socket.close();\n return;\n }\n if (message.type !== \"request\") return;\n const method = message.operation === \"health\" || message.operation === \"manifest\" ? \"GET\" : \"POST\";\n try {\n const requestBody = method === \"POST\" ? JSON.stringify(message.body || {}) : undefined;\n const headers: Record<string, string> = method === \"POST\" ? { \"content-type\": \"application/json\" } : {};\n if (method === \"POST\" && String(artifact.protocol.auth_mode || \"hmac_sha256\") === \"hmac_sha256\") {\n const signingSecret = String(\n (artifact.signingSecretEnv && (localEnv[artifact.signingSecretEnv] || process.env[artifact.signingSecretEnv])) || \"\",\n );\n if (!signingSecret) throw new Error(`Artifact ${artifact.key} signing secret is unavailable`);\n const timestamp = String(Date.now());\n const signature = createHmac(\"sha256\", signingSecret).update(`${timestamp}.${requestBody}`).digest(\"hex\");\n headers[\"x-agents24-timestamp\"] = timestamp;\n headers[\"x-agents24-signature\"] = `sha256=${signature}`;\n }\n const response = await fetch(new URL(String(message.path || \"/\"), artifact.baseUrl), { method, headers, body: requestBody });\n const textBody = await response.text();\n let body: unknown = textBody;\n try { body = textBody ? JSON.parse(textBody) : null; } catch { /* preserve text */ }\n socket.send(JSON.stringify({ type: \"response\", request_id: message.request_id, status: response.status, body }));\n } catch {\n socket.send(JSON.stringify({ type: \"response\", request_id: message.request_id, status: 502, body: { status: \"failed\" } }));\n }\n });\n const heartbeat = setInterval(() => { if (socket.readyState === WebSocket.OPEN) socket.send(JSON.stringify({ type: \"heartbeat\" })); }, 15_000);\n const manifestPoll = setInterval(() => { void pollManifest(); }, MANIFEST_POLL_INTERVAL_MS);\n socket.addEventListener(\"close\", () => { clearInterval(heartbeat); clearInterval(manifestPoll); }, { once: true });\n });\n return { sessionId: String(admission.id), socket, state };\n}\n"],"mappings":"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","names":["basename","join","resolve","chmod","readFile","writeFile","createInterface","createHash","readFile","writeFile","join","join","readFile","values","writeFile","createInterface","createInterface","answer","requirements","resolve","parseYaml","parseYaml","resolve","DEFAULT_API_BASE_URL","createInterface","basename","resolve","createHash","join","values","readFile","writeFile","chmod"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/cli-arguments.ts","../src/cli-output.ts","../src/cli-installation-state.ts","../src/cli-secrets.ts","../src/cli-pull.ts","../src/cli-status.ts","../src/cli-requirements.ts","../src/cli-development.ts","../src/cli-help.ts"],"sourcesContent":["import { basename, dirname, join, resolve } from \"node:path\";\nimport { chmod, readFile, writeFile } from \"node:fs/promises\";\nimport { createInterface } from \"node:readline/promises\";\nimport { createHash } from \"node:crypto\";\nimport { spawn, type ChildProcess } from \"node:child_process\";\nimport { isCancel, password, select, text } from \"@clack/prompts\";\n\nimport { forkPackage, initializePackage, loadPackageFiles, packPackage, validatePackage } from \"./package-source.js\";\nimport { createRemoteClient } from \"./remote.js\";\nimport { assertImportAllowed, parseMappings } from \"./import-guards.js\";\nimport { flag, parseArguments, values, type Parsed } from \"./cli-arguments.js\";\nimport { failurePayload, registerSensitiveValue, writeResult } from \"./cli-output.js\";\nimport { canonicalJson, isNotFoundResponse, packageDirectory, packageUpload as upload } from \"./cli-installation-state.js\";\nimport { parseEnv, preparePackage, secretValues } from \"./cli-secrets.js\";\nimport { pullPackage } from \"./cli-pull.js\";\nimport { installedPackageStatus } from \"./cli-status.js\";\nimport { promptImportMappings, promptInstallationRequirementLinks } from \"./cli-requirements.js\";\nimport { developmentArtifacts, openDevelopmentRelay, waitForServer } from \"./cli-development.js\";\nimport { commandHelp } from \"./cli-help.js\";\n\nconst DEFAULT_API_BASE_URL = \"https://api.agents24.dev\";\nconst DEFAULT_LOCAL_CLIENT_ORIGINS = [\"http://localhost:5173\", \"http://127.0.0.1:5173\"];\n\nfunction mappings(parsed: Parsed): Record<string, string> {\n return parseMappings(values(parsed, \"map\"));\n}\n\nasync function confirmation(parsed: Parsed, preview: Record<string, unknown>): Promise<void> {\n const resources = Array.isArray(preview.resources) ? preview.resources as Array<Record<string, unknown>> : [];\n const yes = flag(parsed, \"yes\") === \"true\";\n assertImportAllowed(preview, {\n allowIncomplete: flag(parsed, \"allow-incomplete\") === \"true\",\n yes,\n interactive: Boolean(process.stdin.isTTY && process.stdout.isTTY),\n });\n if (yes) return;\n const prompt = createInterface({ input: process.stdin, output: process.stdout });\n const answer = await prompt.question(`Import ${resources.length} resource draft(s)? [y/N] `);\n prompt.close();\n if (!/^y(?:es)?$/i.test(answer.trim())) throw new Error(\"Import cancelled\");\n}\n\nasync function applyConfirmation(parsed: Parsed, plan: Record<string, unknown>): Promise<void> {\n if (flag(parsed, \"yes\") === \"true\") return;\n if (!process.stdin.isTTY || !process.stdout.isTTY) throw new Error(\"apply requires --yes in noninteractive mode\");\n const actions = Array.isArray(plan.actions) ? plan.actions.length : 0;\n const prompt = createInterface({ input: process.stdin, output: process.stdout });\n const answer = await prompt.question(`Apply ${actions} resource action(s)? [y/N] `);\n prompt.close();\n if (!/^y(?:es)?$/i.test(answer.trim())) throw new Error(\"Apply cancelled\");\n}\n\nasync function pollOperation(client: Awaited<ReturnType<typeof createRemoteClient>>, operation: Record<string, unknown>): Promise<Record<string, unknown>> {\n let current = operation;\n for (let attempt = 0; attempt < 900; attempt += 1) {\n const status = String(current.status || \"\");\n if ([\"completed\", \"failed\"].includes(status)) return current;\n await new Promise((resolvePromise) => setTimeout(resolvePromise, 1000));\n current = await client.resourceInstallations.operationStatus(String(current.operation_id));\n }\n throw new Error(\"Resource apply did not finish within 15 minutes\");\n}\n\nasync function packedValidatedPackage(parsed: Parsed): Promise<{ data: Uint8Array; filename: string }> {\n const input = parsed.positionals[0];\n if (!input) throw new Error(`${parsed.command} requires a package directory or ZIP`);\n const local = await validatePackage(input);\n if (!local.valid) throw Object.assign(new Error(\"Resource package is invalid\"), { diagnostics: local.diagnostics });\n const data = await packPackage(input);\n return { data, filename: `${basename(resolve(input))}.agents24.zip` };\n}\n\nfunction importKey(packageHash: string, map: Record<string, string>): string {\n return `import-${createHash(\"sha256\").update(canonicalJson({ package_hash: packageHash, mappings: map })).digest(\"hex\").slice(0, 40)}`;\n}\n\ntype InstallMode = \"client-deployment\" | \"bff\" | \"publish-only\";\ntype AppInfo = { directory: string; integration: Exclude<InstallMode, \"publish-only\">; packageManager: string };\n\nfunction interactive(parsed: Parsed): boolean {\n return flag(parsed, \"yes\") !== \"true\" && Boolean(process.stdin.isTTY && process.stdout.isTTY);\n}\n\nfunction cancelled<T>(value: T): asserts value is Exclude<T, symbol> {\n if (isCancel(value)) throw new Error(\"Installation cancelled\");\n}\n\nasync function apiKeyForLifecycle(parsed: Parsed): Promise<string> {\n await loadPackageLifecycleEnvironment(parsed.positionals[0]);\n let apiKey = String(process.env.AGENTS24_API_KEY || \"\").trim();\n if (!apiKey && interactive(parsed)) {\n const answer = await password({ message: \"Agents24 API key\", validate: (value) => String(value || \"\").trim() ? undefined : \"The API key is required.\" });\n cancelled(answer);\n apiKey = String(answer).trim();\n }\n if (!apiKey) throw new Error(\"AGENTS24_API_KEY is required for noninteractive resource management\");\n if (/[\\r\\n\\0]/.test(apiKey)) throw new Error(\"AGENTS24_API_KEY contains invalid control characters\");\n registerSensitiveValue(apiKey);\n return apiKey;\n}\n\nasync function loadPackageLifecycleEnvironment(input: string | undefined): Promise<void> {\n if (!input) return;\n const directory = await packageDirectory(input);\n if (!directory) return;\n for (const path of [join(dirname(directory), \".env.local\"), join(directory, \".env.local\")]) {\n try {\n const values = parseEnv(await readFile(path, \"utf8\"));\n for (const [name, value] of Object.entries(values)) {\n if (!process.env[name]) process.env[name] = value;\n }\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error;\n }\n }\n}\n\nfunction publicationProjection(publication: Record<string, unknown>): Record<string, unknown> {\n return {\n installation_id: publication.installation_id,\n operation_id: publication.operation_id,\n package_hash: publication.package_hash,\n status: publication.status,\n ...(publication.published_at ? { published_at: publication.published_at } : {}),\n ...(publication.client_deployment_id ? { client_deployment_id: publication.client_deployment_id } : {}),\n };\n}\n\nfunction clientAppBaseUrl(environment: NodeJS.ProcessEnv = process.env): string | undefined {\n const baseUrl = String(environment.AGENTS24_BASE_URL || \"\").trim().replace(/\\/+$/, \"\");\n if (!baseUrl || baseUrl === DEFAULT_API_BASE_URL) return undefined;\n let parsed: URL;\n try {\n parsed = new URL(baseUrl);\n } catch {\n throw new Error(\"AGENTS24_BASE_URL must be a valid absolute HTTP(S) URL.\");\n }\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new Error(\"AGENTS24_BASE_URL must be a valid absolute HTTP(S) URL.\");\n }\n return baseUrl;\n}\n\nasync function appInfoAt(directory: string, explicit: boolean): Promise<AppInfo | undefined> {\n const target = resolve(directory);\n try {\n const manifest = JSON.parse(await readFile(join(target, \"package.json\"), \"utf8\")) as Record<string, unknown>;\n const metadata = manifest.agents24 && typeof manifest.agents24 === \"object\" ? manifest.agents24 as Record<string, unknown> : {};\n const integration = String(metadata.integration || \"\");\n if (integration !== \"client-deployment\" && integration !== \"bff\") {\n if (explicit) throw new Error(\"--app must reference a generated Agents24 application\");\n return undefined;\n }\n return { directory: target, integration, packageManager: String(metadata.package_manager || \"pnpm\") };\n } catch (error) {\n if (explicit || (error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error;\n return undefined;\n }\n}\n\nasync function resolveApp(parsed: Parsed): Promise<AppInfo | undefined> {\n const requested = flag(parsed, \"app\");\n return appInfoAt(requested || process.cwd(), Boolean(requested));\n}\n\nasync function resolveInstallMode(parsed: Parsed, app: AppInfo | undefined): Promise<InstallMode> {\n const requested = flag(parsed, \"integration\") as InstallMode | undefined;\n if (requested && ![\"client-deployment\", \"bff\", \"publish-only\"].includes(requested)) throw new Error(\"--integration must be client-deployment, bff, or publish-only\");\n if (requested && app && requested !== \"publish-only\" && requested !== app.integration) throw new Error(\"--integration does not match the generated application\");\n if (requested) return requested;\n if (app) return app.integration;\n if (!interactive(parsed)) throw new Error(\"--integration is required when no generated application is detected\");\n const answer = await select<InstallMode>({ message: \"How will this Agent be integrated?\", options: [\n { value: \"client-deployment\", label: \"Client deployment\", hint: \"Create a public deployment ID\" },\n { value: \"bff\", label: \"Server BFF\", hint: \"Use the API key only on the server\" },\n { value: \"publish-only\", label: \"Publish only\", hint: \"Configure an integration later\" },\n ] });\n cancelled(answer);\n return answer;\n}\n\nasync function clientDeployment(parsed: Parsed, client: Awaited<ReturnType<typeof createRemoteClient>>, agent: Record<string, unknown>, app: AppInfo | undefined): Promise<Record<string, unknown>> {\n const policies = (await client.resourcePolicies.list()).filter((row) => row.is_active === true);\n let policyId = flag(parsed, \"policy-set\");\n if (policyId && !policies.some((row) => String(row.id) === policyId)) throw new Error(\"--policy-set must identify an active Resource Policy\");\n if (!policyId && policies.length === 1) policyId = String(policies[0].id);\n if (!policyId && interactive(parsed) && policies.length > 1) {\n const answer = await select<string>({ message: \"Resource Policy\", options: policies.map((row) => ({ value: String(row.id), label: String(row.name) })) });\n cancelled(answer);\n policyId = answer;\n }\n if (!policyId) throw new Error(\"An active Resource Policy is required; pass --policy-set when more than one is active\");\n let origins = values(parsed, \"origin\");\n if (!origins.length && app) origins = [...DEFAULT_LOCAL_CLIENT_ORIGINS];\n if (!origins.length && interactive(parsed)) {\n const answer = await text({ message: \"Allowed browser origins\", placeholder: \"http://localhost:5173\", validate: (value) => String(value || \"\").trim() ? undefined : \"At least one origin is required.\" });\n cancelled(answer);\n origins = String(answer).split(\",\").map((item) => item.trim()).filter(Boolean);\n }\n if (!origins.length) throw new Error(\"At least one --origin is required when no generated app is detected\");\n const authModes = values(parsed, \"auth-mode\").length ? values(parsed, \"auth-mode\") : [\"anonymous\"];\n const oidcRaw = flag(parsed, \"oidc-config\");\n if (authModes.includes(\"external_oidc\") && !oidcRaw) throw new Error(\"--oidc-config is required for external_oidc\");\n const request = {\n agent_id: String(agent.id), resource_policy_set_id: policyId,\n version_policy: { mode: \"latest_published\" }, name: `${String(agent.name)} client deployment`,\n auth_modes: authModes, allowed_origins: origins,\n ...(oidcRaw ? { oidc: JSON.parse(oidcRaw) as Record<string, unknown> } : {}),\n };\n return client.clientDeployments.create(request, { idempotencyKey: `deploy-${createHash(\"sha256\").update(canonicalJson(request)).digest(\"hex\").slice(0, 40)}` });\n}\n\ntype EnvFileValue = string | { value: string; literal: true };\n\nasync function updateEnvFile(app: AppInfo, values: Record<string, EnvFileValue>): Promise<string> {\n const target = join(app.directory, \".env.local\");\n let content = \"\";\n try { content = await readFile(target, \"utf8\"); } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error;\n }\n let next = content;\n for (const [name, value] of Object.entries(values)) {\n const line = `${name}=${typeof value === \"string\" ? JSON.stringify(value) : value.value}`;\n const pattern = new RegExp(`^${name}=.*$`, \"m\");\n next = pattern.test(next) ? next.replace(pattern, line) : `${next}${next && !next.endsWith(\"\\n\") ? \"\\n\" : \"\"}${line}\\n`;\n }\n await writeFile(target, next, { mode: 0o600 });\n await chmod(target, 0o600);\n return target;\n}\n\ntype AppliedDraft = {\n client: Awaited<ReturnType<typeof createRemoteClient>>;\n apiKey: string;\n input: string;\n installationId: string;\n plan: Record<string, unknown>;\n operation: Record<string, unknown>;\n result: Record<string, unknown>;\n agent: Record<string, unknown>;\n};\n\nfunction primaryAgentAlias(applied: AppliedDraft): string {\n const aliases = Array.isArray(applied.agent.aliases) ? applied.agent.aliases : [];\n const agentAlias = String(aliases[0] || applied.result.primary_agent_alias || \"\");\n if (!agentAlias) throw new Error(\"Apply completed without a primary Agent alias\");\n return agentAlias;\n}\n\nfunction bffApplicationValues(applied: AppliedDraft): Record<string, EnvFileValue> {\n const agentAlias = primaryAgentAlias(applied);\n return {\n AGENTS24_API_KEY: applied.apiKey,\n AGENTS24_AGENTS: { value: JSON.stringify([{ agentAlias }]), literal: true },\n };\n}\n\nasync function packageIdentity(input: string, requireValid = true): Promise<{ packageId: string; packageName: string }> {\n const result = await validatePackage(input);\n const packageId = String(result.package.package_id || \"\");\n if (!/^pkg_[0-9a-f]{32}$/.test(packageId)) {\n throw new Error(\"Resource Package is missing a valid package_id; create an independent package with agents24 fork <source> <target>\");\n }\n if (requireValid && !result.valid) throw Object.assign(new Error(\"Resource package is invalid\"), { diagnostics: result.diagnostics });\n return { packageId, packageName: String(result.package.name || \"\") };\n}\n\nasync function resolveInstallation(\n input: string,\n client: Awaited<ReturnType<typeof createRemoteClient>>,\n requireValid = true,\n): Promise<Record<string, unknown>> {\n const { packageId } = await packageIdentity(input, requireValid);\n return client.resourceInstallations.getByPackageId(packageId);\n}\n\nfunction blockedPlanMessage(plan: Record<string, unknown>): string {\n const blockers = Array.isArray(plan.blockers)\n ? plan.blockers.filter((item): item is Record<string, unknown> => Boolean(item && typeof item === \"object\"))\n : [];\n if (!blockers.length) return \"The Resource Package plan is blocked\";\n const details = blockers.map((blocker) => {\n const resource = String(blocker.resource_key || blocker.requirement_key || \"\").trim();\n const guidance = String(blocker.guidance || \"\").trim();\n const code = String(blocker.code || \"PLAN_BLOCKED\").trim();\n return `${code}${resource ? ` (${resource})` : \"\"}${guidance ? `: ${guidance}` : \"\"}`;\n });\n return `The Resource Package plan is blocked: ${details.join(\"; \")}`;\n}\n\nasync function ensureInstallation(\n input: string,\n client: Awaited<ReturnType<typeof createRemoteClient>>,\n data: Uint8Array,\n plan?: Record<string, unknown>,\n): Promise<string> {\n const identity = await packageIdentity(input);\n const initial = plan || await client.resourceInstallations.plan(upload(data, input));\n if (initial.installation_id) return String(initial.installation_id);\n const created = await client.resourceInstallations.create(\n { package_id: identity.packageId, package_name: String(initial.package_name), operation_id: String(initial.operation_id) },\n { idempotencyKey: `installation-${identity.packageId}` },\n );\n return String(created.id);\n}\n\n\ntype RemoteClient = Awaited<ReturnType<typeof createRemoteClient>>;\n\nasync function applyDraft(\n parsed: Parsed,\n options: {\n apiKey?: string;\n client?: RemoteClient;\n skipConfirmation?: boolean;\n integrationMode?: InstallMode;\n } = {},\n): Promise<AppliedDraft> {\n const input = parsed.positionals[0];\n if (!input) throw new Error(`${parsed.command} requires a Resource Package directory or ZIP`);\n await packageIdentity(input);\n const apiKey = options.apiKey || await apiKeyForLifecycle(parsed);\n const client = options.client || await createRemoteClient({ ...process.env, AGENTS24_API_KEY: apiKey });\n const data = await packPackage(input);\n const planInput = {\n ...upload(data, input),\n prune: flag(parsed, \"prune\") === \"true\",\n integrationMode: options.integrationMode || flag(parsed, \"integration\") as InstallMode | undefined,\n primaryResourceKey: flag(parsed, \"agent\"),\n };\n let plan = await client.resourceInstallations.plan(planInput);\n if (plan.can_apply !== true && interactive(parsed)) {\n const blockers = Array.isArray(plan.blockers) ? plan.blockers as Array<Record<string, unknown>> : [];\n const selection = blockers.find((blocker) => blocker.code === \"PRIMARY_AGENT_REQUIRED\");\n if (selection && Array.isArray(selection.candidates) && selection.candidates.length) {\n const answer = await select<string>({ message: \"Primary Agent\", options: selection.candidates.map((key) => ({ value: String(key), label: String(key) })) });\n cancelled(answer);\n planInput.primaryResourceKey = answer;\n plan = await client.resourceInstallations.plan(planInput);\n }\n const requirements = Array.isArray(plan.external_requirements) ? plan.external_requirements as Array<Record<string, unknown>> : [];\n const requiresLink = requirements.some((item) => item.required === true && item.configured !== true && ![\"model\", \"secret\"].includes(String(item.kind)));\n if (requiresLink) {\n const installationId = await ensureInstallation(input, client, data, plan);\n if (await promptInstallationRequirementLinks(client, installationId, plan, true)) {\n plan = await client.resourceInstallations.plan(planInput);\n }\n }\n }\n if (plan.can_apply !== true) throw Object.assign(new Error(blockedPlanMessage(plan)), { plan });\n if (!options.skipConfirmation) await applyConfirmation(parsed, plan);\n const secrets = await secretValues(input);\n let operation = await client.resourceInstallations.apply(String(plan.operation_id), {\n secrets,\n }, { idempotencyKey: `apply-${String(plan.operation_id)}` });\n operation = await pollOperation(client, operation);\n if (operation.status !== \"completed\") {\n throw Object.assign(new Error(\"Draft apply failed\"), {\n failureId: operation.failure_id,\n operationId: operation.operation_id,\n operationStatus: operation.status,\n });\n }\n const installationIdValue = String(operation.installation_id || \"\");\n if (!installationIdValue) throw new Error(\"Apply completed without an installation ID\");\n const result = operation.result && typeof operation.result === \"object\" ? operation.result as Record<string, unknown> : {};\n const agentId = String(result.primary_agent_id || \"\");\n const resources = Array.isArray(result.resources) ? result.resources as Array<Record<string, unknown>> : [];\n const agent = resources.find((item) => String(item.id) === agentId) || { id: agentId, name: \"Agent\" };\n return { client, apiKey, input, installationId: installationIdValue, plan, operation, result, agent };\n}\n\ntype PublishedDraft = {\n publication: Record<string, unknown>;\n installationId: string;\n};\n\nasync function publishDraft(parsed: Parsed, applied?: AppliedDraft): Promise<PublishedDraft> {\n const input = applied?.input || parsed.positionals[0];\n if (!input) throw new Error(\"publish requires a Resource Package directory or ZIP\");\n await packageIdentity(input);\n const apiKey = applied?.apiKey || await apiKeyForLifecycle(parsed);\n const client = applied?.client || await createRemoteClient({ ...process.env, AGENTS24_API_KEY: apiKey });\n const installed = applied ? undefined : await resolveInstallation(input, client);\n const id = applied?.installationId || String(installed?.id || \"\");\n if (!id) throw new Error(\"No installation exists for this package_id; run agents24 apply first\");\n const data = await packPackage(input);\n const plan = applied?.plan || await client.resourceInstallations.plan(upload(data, input));\n const publication = await client.resourceInstallations.publish(id, { package_hash: String(plan.package_hash) }, {\n idempotencyKey: `publish-${String(plan.package_hash).slice(0, 40)}`,\n });\n return { publication, installationId: id };\n}\n\nasync function execute(parsed: Parsed): Promise<Record<string, unknown>> {\n if (parsed.command === \"fork\") {\n const [source, target] = parsed.positionals;\n if (!source || !target) throw new Error(\"Usage: agents24 fork <source> <target> [--name <name>]\");\n const result = await forkPackage(source, target, flag(parsed, \"name\"));\n return { ok: true, directory: resolve(target), package: result.name, package_id: result.packageId };\n }\n if (parsed.command === \"prepare\") {\n const input = parsed.positionals[0];\n if (!input) throw new Error(\"prepare requires a Resource Package directory\");\n await packageIdentity(input);\n return preparePackage(input);\n }\n if (parsed.command === \"plan\") {\n const input = parsed.positionals[0];\n if (!input) throw new Error(\"plan requires a Resource Package directory or ZIP\");\n await packageIdentity(input);\n const apiKey = await apiKeyForLifecycle(parsed);\n const client = await createRemoteClient({ ...process.env, AGENTS24_API_KEY: apiKey });\n const data = await packPackage(input);\n const plan = await client.resourceInstallations.plan({\n ...upload(data, input),\n prune: flag(parsed, \"prune\") === \"true\",\n integrationMode: flag(parsed, \"integration\") as InstallMode | undefined,\n primaryResourceKey: flag(parsed, \"agent\"),\n });\n return { ok: plan.can_apply === true, plan };\n }\n if (parsed.command === \"pull\") {\n const input = parsed.positionals[0];\n if (!input) throw new Error(\"pull requires a Resource Package directory\");\n const apiKey = await apiKeyForLifecycle(parsed);\n const client = await createRemoteClient({ ...process.env, AGENTS24_API_KEY: apiKey });\n const installation = await resolveInstallation(input, client, false);\n return pullPackage({ parsed, input, client, installationId: String(installation.id || \"\") });\n }\n if (parsed.command === \"status\") {\n const input = parsed.positionals[0];\n if (!input) throw new Error(\"status requires a Resource Package directory or ZIP\");\n const identity = await packageIdentity(input);\n const apiKey = await apiKeyForLifecycle(parsed);\n const client = await createRemoteClient({ ...process.env, AGENTS24_API_KEY: apiKey });\n let status: Record<string, unknown>;\n try {\n status = await resolveInstallation(input, client);\n } catch (error) {\n if (!isNotFoundResponse(error)) throw error;\n return {\n ok: true,\n installed: false,\n package_id: identity.packageId,\n message: \"This package has not been applied to this organization. Run agents24 apply <package-directory> to create its resources.\",\n };\n }\n return installedPackageStatus(input, client, status);\n }\n if (parsed.command === \"resources\") {\n if (parsed.positionals[0] !== \"list\") throw new Error(\"Usage: agents24 resources list --kind <kind>\");\n const kind = flag(parsed, \"kind\");\n if (!kind) throw new Error(\"resources list requires --kind\");\n const apiKey = await apiKeyForLifecycle(parsed);\n const result = await (await createRemoteClient({ ...process.env, AGENTS24_API_KEY: apiKey })).resourceInstallations.resources({\n kind, query: flag(parsed, \"query\"), limit: Number(flag(parsed, \"limit\") || 100),\n });\n return { ok: true, ...result };\n }\n if (parsed.command === \"link\") {\n const input = parsed.positionals[0];\n if (!input) throw new Error(\"link requires a Resource Package directory or ZIP\");\n const assignments = values(parsed, \"resource\");\n if (!assignments.length) throw new Error(\"link requires --resource <stable-key>=<uuid>\");\n await packageIdentity(input);\n const apiKey = await apiKeyForLifecycle(parsed);\n const client = await createRemoteClient({ ...process.env, AGENTS24_API_KEY: apiKey });\n const data = await packPackage(input);\n const id = await ensureInstallation(input, client, data);\n const linked = [];\n for (const assignment of assignments) {\n const separator = assignment.indexOf(\"=\");\n if (separator <= 0 || separator === assignment.length - 1) throw new Error(\"--resource must be <stable-key>=<uuid>\");\n const resourceKey = assignment.slice(0, separator);\n const resourceId = assignment.slice(separator + 1);\n linked.push(await client.resourceInstallations.link(id, { resource_key: resourceKey, resource_id: resourceId }, {\n idempotencyKey: `link-${createHash(\"sha256\").update(`${id}:${assignment}`).digest(\"hex\").slice(0, 40)}`,\n }));\n }\n return { ok: true, installation_id: id, linked };\n }\n if (parsed.command === \"apply\") {\n const app = await resolveApp(parsed);\n const integration = app || flag(parsed, \"integration\")\n ? await resolveInstallMode(parsed, app)\n : \"publish-only\";\n const applied = await applyDraft(parsed, { integrationMode: integration });\n const envFile = app && integration === \"bff\" && flag(parsed, \"no-write-env\") !== \"true\"\n ? await updateEnvFile(app, bffApplicationValues(applied))\n : undefined;\n return {\n ok: true,\n phase: \"draft_applied\",\n installation_id: applied.installationId,\n agent_alias: primaryAgentAlias(applied),\n operation_id: applied.operation.operation_id,\n operation_status: applied.operation.status,\n ...(envFile ? { env_file: envFile } : {}),\n };\n }\n if (parsed.command === \"publish\") {\n const published = await publishDraft(parsed);\n return {\n ok: true,\n phase: \"published\",\n installation_id: published.installationId,\n publication: publicationProjection(published.publication),\n };\n }\n if (parsed.command === \"setup\") {\n const app = await resolveApp(parsed);\n const integration = await resolveInstallMode(parsed, app);\n const applied = await applyDraft(parsed, { integrationMode: integration });\n const published = await publishDraft(parsed, applied);\n const installed = await applied.client.resourceInstallations.get(applied.installationId);\n let deployment: Record<string, unknown> | undefined;\n let deploymentId: string | undefined;\n if (integration === \"client-deployment\") {\n deployment = installed.client_deployment_id\n ? await applied.client.clientDeployments.get(String(installed.client_deployment_id))\n : await clientDeployment(parsed, applied.client, applied.agent, app);\n if (!installed.client_deployment_id) {\n await applied.client.resourceInstallations.bindDeployment(applied.installationId, { client_deployment_id: String(deployment.id) }, { idempotencyKey: `deployment-bind-${applied.installationId}` });\n }\n deploymentId = String(deployment.client_id || \"\");\n }\n let envFile: string | undefined;\n if (app && flag(parsed, \"no-write-env\") !== \"true\" && integration !== \"publish-only\") {\n const localClientBaseUrl = integration === \"client-deployment\" ? clientAppBaseUrl() : undefined;\n envFile = await updateEnvFile(app, integration === \"client-deployment\"\n ? { VITE_AGENTS24_DEPLOYMENT_ID: String(deploymentId), ...(localClientBaseUrl ? { VITE_AGENTS24_BASE_URL: localClientBaseUrl } : {}) }\n : bffApplicationValues(applied));\n }\n return {\n ok: true,\n phase: deployment ? \"deployed\" : \"published\",\n integration,\n installation_id: applied.installationId,\n agent_alias: primaryAgentAlias(applied),\n publication: publicationProjection(published.publication),\n ...(deployment ? { deployment_id: deploymentId } : {}),\n ...(envFile ? { env_file: envFile } : {}),\n };\n }\n if (parsed.command === \"dev\") {\n const input = parsed.positionals[0];\n if (!input) throw new Error(\"dev requires a Resource Package directory\");\n await packageIdentity(input);\n await preparePackage(input);\n const declared = await developmentArtifacts(input);\n const selectedKey = flag(parsed, \"artifact\");\n const artifacts = selectedKey ? declared.filter((item) => item.key === selectedKey) : declared;\n if (!artifacts.length) throw new Error(selectedKey ? `Artifact ${selectedKey} has no development configuration` : \"No self-hosted Artifact development configuration was found\");\n const apiKey = await apiKeyForLifecycle(parsed);\n const client = await createRemoteClient({ ...process.env, AGENTS24_API_KEY: apiKey });\n const applied = flag(parsed, \"apply\") === \"true\"\n ? await applyDraft(parsed, { apiKey, client })\n : undefined;\n let id = applied?.installationId;\n if (!id) {\n try {\n id = String((await resolveInstallation(input, client)).id || \"\");\n } catch (error) {\n if (!isNotFoundResponse(error)) throw error;\n throw new Error(\"Apply the package before starting Artifact development\");\n }\n }\n if (!id) throw new Error(\"Apply the package before starting Artifact development\");\n const configuredSecrets = await secretValues(input);\n if (Object.keys(configuredSecrets).length) await client.resourceInstallations.configureSecrets(id, { secrets: configuredSecrets });\n const directory = await packageDirectory(input);\n const localEnv = directory ? parseEnv(await readFile(join(directory, \".env.local\"), \"utf8\")) : {};\n const children: ChildProcess[] = [];\n const relays: Array<{ sessionId: string; socket: WebSocket; state: { terminalReason?: string } }> = [];\n try {\n for (const artifact of artifacts) {\n if (artifact.command) children.push(spawn(artifact.command, artifact.args, { cwd: artifact.cwd, env: { ...process.env, ...localEnv }, stdio: \"inherit\", shell: false }));\n await waitForServer(artifact.baseUrl, artifact.protocol.health_path);\n relays.push(await openDevelopmentRelay(client, id, artifact, localEnv));\n }\n const developmentSessions: Record<string, string> = Object.fromEntries(artifacts.map((item, index) => [item.key, relays[index].sessionId]));\n process.stdout.write(`${JSON.stringify({ ok: true, phase: \"development_connected\", installation_id: id, development_sessions: developmentSessions, draft_applied: Boolean(applied) }, null, 2)}\\n`);\n await new Promise<void>((resolveStop) => {\n let stopping = false;\n const reconnecting = new Set<number>();\n const stop = () => { stopping = true; resolveStop(); };\n const watch = (relay: typeof relays[number], index: number) => {\n relay.socket.addEventListener(\"close\", async () => {\n if (stopping) return;\n if (relay.state.terminalReason || reconnecting.has(index)) {\n stop();\n return;\n }\n reconnecting.add(index);\n for (let attempt = 1; attempt <= 3 && !stopping; attempt += 1) {\n await new Promise((resolveDelay) => setTimeout(resolveDelay, attempt * 500));\n try {\n const replacement = await openDevelopmentRelay(client, id, artifacts[index], localEnv);\n relays[index] = replacement;\n developmentSessions[artifacts[index].key] = replacement.sessionId;\n reconnecting.delete(index);\n watch(replacement, index);\n return;\n } catch {\n // Retry with a fresh one-time relay admission.\n }\n }\n reconnecting.delete(index);\n stop();\n }, { once: true });\n };\n process.once(\"SIGINT\", stop);\n process.once(\"SIGTERM\", stop);\n relays.forEach(watch);\n });\n return { ok: true, phase: \"development_stopped\", installation_id: id };\n } finally {\n for (const relay of relays) relay.socket.close();\n for (const child of children) child.kill(\"SIGTERM\");\n }\n }\n if (parsed.command === \"init\") {\n const directory = resolve(parsed.positionals[0] || \".\");\n const name = flag(parsed, \"name\") || basename(directory);\n const packageName = await initializePackage(directory, name);\n return { ok: true, directory, package: packageName };\n }\n if (parsed.command === \"validate\") {\n const input = parsed.positionals[0];\n if (!input) throw new Error(\"validate requires a package directory or ZIP\");\n const local = await validatePackage(input);\n let remote: Record<string, unknown> | undefined;\n if (flag(parsed, \"remote\") === \"true\" && local.valid) {\n const data = await packPackage(input);\n remote = await (await createRemoteClient()).resourcePackages.validatePackage(upload(data, input));\n }\n return { ok: local.valid && (!remote || remote.valid === true), local: { ...local, files: undefined }, ...(remote ? { remote } : {}) };\n }\n if (parsed.command === \"pack\") {\n const input = parsed.positionals[0];\n if (!input) throw new Error(\"pack requires a package directory\");\n const data = await packPackage(input);\n const output = resolve(flag(parsed, \"output\") || `${basename(resolve(input))}.agents24.zip`);\n await writeFile(output, data);\n return { ok: true, output, bytes: data.byteLength };\n }\n if (parsed.command === \"export\") {\n const kind = flag(parsed, \"kind\");\n const id = flag(parsed, \"id\");\n if (!kind || !id) throw new Error(\"export requires --kind and --id\");\n const target = flag(parsed, \"target\") || \"draft\";\n const selectors = [{ kind, id, target, ...(flag(parsed, \"version-id\") ? { version_id: flag(parsed, \"version-id\") } : {}) }];\n for (const value of values(parsed, \"selector\")) {\n const [itemKind, itemId, itemTarget = \"draft\", versionId] = value.split(\":\");\n if (!itemKind || !itemId) throw new Error(\"--selector must be kind:id[:draft|version[:version-id]]\");\n selectors.push({ kind: itemKind, id: itemId, target: itemTarget, ...(versionId ? { version_id: versionId } : {}) });\n }\n const request = { selectors };\n const archive = await (await createRemoteClient()).resourcePackages.exportPackage(request);\n const output = resolve(flag(parsed, \"output\") || archive.filename);\n await writeFile(output, archive.data);\n return { ok: true, output, bytes: archive.data.byteLength };\n }\n if (parsed.command === \"preview\" || parsed.command === \"import\") {\n const client = await createRemoteClient();\n const { data, filename } = await packedValidatedPackage(parsed);\n const request = {\n data,\n filename,\n mappings: mappings(parsed),\n };\n let preview = await client.resourcePackages.importPreview(request);\n request.mappings = await promptImportMappings(client, preview, request.mappings, interactive(parsed));\n if (Object.keys(request.mappings).length) preview = await client.resourcePackages.importPreview(request);\n if (parsed.command === \"preview\") return { ok: preview.can_import === true, preview };\n if (preview.can_import !== true) return { ok: false, preview };\n await confirmation(parsed, preview);\n const packageHash = String(preview.package_hash || \"\");\n if (!packageHash) throw new Error(\"Package preview did not return a package hash\");\n const imported = await client.resourcePackages.importPackage(request, { idempotencyKey: importKey(packageHash, request.mappings) });\n return { ok: true, phase: \"imported\", preview, result: imported };\n }\n throw new Error(`Unknown package command: ${parsed.command}`);\n}\n\nexport async function run(argv = process.argv.slice(2)): Promise<number> {\n const helpIndex = argv.findIndex((item) => item === \"--help\" || item === \"-h\");\n if (argv.length === 0 || helpIndex >= 0) {\n process.stdout.write(commandHelp(argv));\n return 0;\n }\n let parsed: Parsed | undefined;\n try {\n parsed = parseArguments(argv);\n const result = await execute(parsed);\n writeResult(result, parsed);\n return result.ok === false ? 1 : 0;\n } catch (error) {\n const payload = failurePayload(error);\n if (parsed) writeResult(payload, parsed);\n else process.stderr.write(`${JSON.stringify(payload, null, 2)}\\n`);\n return 1;\n }\n}\n\nprocess.exitCode = await run();\n","export type Parsed = {\n command: string;\n positionals: string[];\n flags: Map<string, string[]>;\n};\n\nconst BOOLEAN_FLAGS = new Set([\"json\", \"remote\", \"yes\", \"allow-incomplete\", \"no-write-env\", \"prune\", \"apply\"]);\nconst LIFECYCLE_COMMANDS = new Set([\"prepare\", \"plan\", \"apply\", \"pull\", \"dev\", \"publish\", \"setup\", \"status\", \"link\", \"resources\", \"fork\"]);\n\nexport function parseArguments(argv: string[]): Parsed {\n const lifecycle = LIFECYCLE_COMMANDS.has(argv[0]);\n if (!lifecycle && (argv[0] !== \"package\" || !argv[1])) {\n throw new Error(\"Usage: agents24 <prepare|plan|apply|pull|dev|publish|setup|status|link|resources|fork> | agents24 package <init|validate|pack|export|preview|import>\");\n }\n const flags = new Map<string, string[]>();\n const positionals: string[] = [];\n for (let index = lifecycle ? 1 : 2; index < argv.length; index += 1) {\n const current = argv[index];\n if (!current.startsWith(\"--\")) {\n positionals.push(current);\n continue;\n }\n const [rawName, inline] = current.slice(2).split(\"=\", 2);\n if (!rawName) throw new Error(\"Invalid option\");\n if (rawName === \"api-key\") {\n throw new Error(\"--api-key is not supported; use AGENTS24_API_KEY or the masked prompt\");\n }\n const value = inline ?? (BOOLEAN_FLAGS.has(rawName) ? \"true\" : argv[++index]);\n if (value === undefined || value.startsWith(\"--\")) throw new Error(`--${rawName} requires a value`);\n flags.set(rawName, [...(flags.get(rawName) || []), value]);\n }\n return { command: lifecycle ? argv[0] : argv[1], positionals, flags };\n}\n\nexport function flag(parsed: Parsed, name: string): string | undefined {\n return parsed.flags.get(name)?.at(-1);\n}\n\nexport function values(parsed: Parsed, name: string): string[] {\n return parsed.flags.get(name) || [];\n}\n","import type { Diagnostic } from \"./package-source.js\";\nimport type { Parsed } from \"./cli-arguments.js\";\nimport { flag } from \"./cli-arguments.js\";\n\nconst sensitiveValues = new Set<string>();\n\nexport function registerSensitiveValue(value: string): void {\n if (value.length >= 8) sensitiveValues.add(value);\n}\n\nfunction redactText(value: string): string {\n let result = value;\n for (const secret of sensitiveValues) result = result.split(secret).join(\"[REDACTED]\");\n return result;\n}\n\nfunction sanitize(value: unknown): unknown {\n if (typeof value === \"string\") return redactText(value);\n if (Array.isArray(value)) return value.map(sanitize);\n if (!value || typeof value !== \"object\") return value;\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>).map(([key, item]) => [key, sanitize(item)]),\n );\n}\n\nfunction readDiagnostics(value: unknown): Diagnostic[] | undefined {\n return Array.isArray(value) ? value as Diagnostic[] : undefined;\n}\n\nfunction diagnostics(error: unknown): Diagnostic[] | undefined {\n if (!error || typeof error !== \"object\") return undefined;\n const record = error as { diagnostics?: unknown; details?: unknown };\n const fromError = readDiagnostics(record.diagnostics);\n if (fromError) return fromError;\n if (!record.details || typeof record.details !== \"object\" || Array.isArray(record.details)) return undefined;\n const details = record.details as Record<string, unknown>;\n const fromDetails = readDiagnostics(details.diagnostics);\n if (fromDetails) return fromDetails;\n const nested = details.detail;\n if (!nested || typeof nested !== \"object\" || Array.isArray(nested)) return undefined;\n return readDiagnostics((nested as Record<string, unknown>).diagnostics);\n}\n\nexport function failurePayload(error: unknown): Record<string, unknown> {\n const diagnosticList = diagnostics(error);\n const record = error && typeof error === \"object\"\n ? error as Record<string, unknown>\n : {};\n const clean = (value: unknown, pattern: RegExp): string | undefined => {\n const candidate = typeof value === \"string\" ? value.trim() : \"\";\n return pattern.test(candidate) ? candidate : undefined;\n };\n const failureId = clean(record.failureId, /^[A-Za-z0-9_-]{1,128}$/);\n const requestId = clean(record.requestId, /^[A-Za-z0-9_.:-]{1,128}$/);\n const code = clean(record.code, /^[A-Z0-9_]{2,128}$/);\n const category = clean(record.category, /^[a-z_]{2,64}$/);\n const operationId = clean(record.operationId, /^[A-Za-z0-9_-]{1,128}$/);\n const operationStatus = clean(record.operationStatus, /^[a-z_]{2,64}$/);\n return {\n ok: false,\n error: redactText(error instanceof Error ? error.message : \"Unexpected CLI failure\"),\n ...(failureId ? { failure_id: failureId } : {}),\n ...(requestId ? { request_id: requestId } : {}),\n ...(code ? { code } : {}),\n ...(category ? { category } : {}),\n ...(operationId ? { operation_id: operationId } : {}),\n ...(operationStatus ? { operation_status: operationStatus } : {}),\n ...(typeof record.status === \"number\" ? { status: record.status } : {}),\n ...(error && typeof error === \"object\" && \"phase\" in error\n ? { phase: (error as { phase: unknown }).phase }\n : {}),\n ...(error && typeof error === \"object\" && \"imported\" in error\n ? { import_result: (error as { imported: unknown }).imported }\n : {}),\n ...(diagnosticList ? { diagnostics: diagnosticList } : {}),\n };\n}\n\nexport function writeResult(result: Record<string, unknown>, parsed: Parsed): void {\n const compact = flag(parsed, \"json\") === \"true\";\n const safeResult = sanitize(result);\n const body = compact ? JSON.stringify(safeResult) : JSON.stringify(safeResult, null, 2);\n const stream = result.ok === false ? process.stderr : process.stdout;\n stream.write(`${body}\\n`);\n}\n","import { basename, join, resolve } from \"node:path\";\nimport { readFile, stat, writeFile } from \"node:fs/promises\";\n\nexport function canonicalJson(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(canonicalJson).join(\",\")}]`;\n if (value && typeof value === \"object\") return `{${Object.entries(value as Record<string, unknown>).sort(([a], [b]) => a.localeCompare(b)).map(([key, item]) => `${JSON.stringify(key)}:${canonicalJson(item)}`).join(\",\")}}`;\n return JSON.stringify(value);\n}\n\nexport function isNotFoundResponse(error: unknown): boolean {\n return Boolean(error && typeof error === \"object\" && \"status\" in error\n && Number((error as { status?: unknown }).status) === 404);\n}\n\nexport function packageUpload(data: Uint8Array, input: string): { data: Uint8Array; filename: string } {\n return {\n data,\n filename: basename(input).endsWith(\".zip\") ? basename(input) : \"resource.agents24.zip\",\n };\n}\n\nexport async function packageDirectory(input: string): Promise<string | undefined> {\n try {\n return (await stat(input)).isDirectory() ? resolve(input) : undefined;\n } catch {\n return undefined;\n }\n}\n\nexport async function ensureIgnored(directory: string, entries: string[]): Promise<void> {\n const target = join(directory, \".gitignore\");\n let current = \"\";\n try {\n current = await readFile(target, \"utf8\");\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error;\n }\n const lines = new Set(current.split(/\\r?\\n/).map((item) => item.trim()).filter(Boolean));\n const missing = entries.filter((item) => !lines.has(item));\n if (!missing.length) return;\n const separator = current && !current.endsWith(\"\\n\") ? \"\\n\" : \"\";\n await writeFile(target, `${current}${separator}${missing.join(\"\\n\")}\\n`);\n}\n","import { randomBytes } from \"node:crypto\";\nimport { chmod, readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { parse as parseYaml } from \"yaml\";\n\nimport { ensureIgnored, packageDirectory } from \"./cli-installation-state.js\";\nimport { loadPackageFiles, validatePackage } from \"./package-source.js\";\n\nexport function parseEnv(textValue: string): Record<string, string> {\n const result: Record<string, string> = {};\n for (const line of textValue.split(/\\r?\\n/)) {\n const match = /^([A-Za-z_][A-Za-z0-9_]*)=(.*)$/.exec(line.trim());\n if (!match) continue;\n const raw = match[2].trim();\n try { result[match[1]] = raw.startsWith('\"') ? JSON.parse(raw) : raw; }\n catch { result[match[1]] = raw; }\n }\n return result;\n}\n\nasync function requirements(input: string): Promise<Array<{ key: string; env: string; generate: boolean }>> {\n const files = await loadPackageFiles(input);\n const manifest = parseYaml(files.get(\"agents24.yaml\") || \"\") as Record<string, unknown>;\n const requires = manifest.requires && typeof manifest.requires === \"object\" ? manifest.requires as Record<string, unknown> : {};\n const secrets = requires.secrets && typeof requires.secrets === \"object\" ? requires.secrets as Record<string, unknown> : {};\n return Object.entries(secrets).map(([key, raw]) => {\n const item = raw && typeof raw === \"object\" ? raw as Record<string, unknown> : {};\n const env = String(item.env || \"\").trim();\n if (!env) throw new Error(`Secret requirement ${key} must declare env`);\n return { key: `$secrets.${key}`, env, generate: item.generate === true };\n });\n}\n\nexport async function preparePackage(input: string): Promise<Record<string, unknown>> {\n const directory = await packageDirectory(input);\n if (!directory) throw new Error(\"prepare requires a Resource Package directory\");\n const local = await validatePackage(input);\n if (!local.valid) throw Object.assign(new Error(\"Resource package is invalid\"), { diagnostics: local.diagnostics });\n const target = join(directory, \".env.local\");\n let current = \"\";\n try { current = await readFile(target, \"utf8\"); }\n catch (error) { if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error; }\n const values = parseEnv(current);\n const generated: string[] = [];\n const preserved: string[] = [];\n let next = current;\n for (const requirement of await requirements(input)) {\n if (values[requirement.env] || process.env[requirement.env]) { preserved.push(requirement.env); continue; }\n if (!requirement.generate) continue;\n const value = randomBytes(32).toString(\"base64url\");\n next += `${next && !next.endsWith(\"\\n\") ? \"\\n\" : \"\"}${requirement.env}=${JSON.stringify(value)}\\n`;\n generated.push(requirement.env);\n }\n await writeFile(target, next, { mode: 0o600 });\n await chmod(target, 0o600);\n await ensureIgnored(directory, [\".env.local\"]);\n return { ok: true, package: directory, env_file: target, generated, preserved };\n}\n\nexport async function secretValues(input: string): Promise<Record<string, string>> {\n const directory = await packageDirectory(input);\n let local: Record<string, string> = {};\n if (directory) {\n try { local = parseEnv(await readFile(join(directory, \".env.local\"), \"utf8\")); }\n catch (error) { if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error; }\n }\n const result: Record<string, string> = {};\n for (const requirement of await requirements(input)) {\n const value = String(process.env[requirement.env] || local[requirement.env] || \"\");\n if (value) result[requirement.key] = value;\n }\n return result;\n}\n","import { createInterface } from \"node:readline/promises\";\n\nimport { flag, type Parsed } from \"./cli-arguments.js\";\nimport { packageUpload } from \"./cli-installation-state.js\";\nimport { packPackageSnapshot, replacePackageFiles } from \"./package-source.js\";\nimport type { RemoteClient } from \"./remote.js\";\n\nasync function confirmPull(parsed: Parsed, plan: Record<string, unknown>): Promise<void> {\n if (flag(parsed, \"yes\") === \"true\") return;\n if (flag(parsed, \"json\") === \"true\") throw new Error(\"pull requires --yes with --json\");\n if (!process.stdin.isTTY || !process.stdout.isTTY) throw new Error(\"pull requires --yes in noninteractive mode\");\n const files = Array.isArray(plan.files) ? plan.files as Array<Record<string, unknown>> : [];\n for (const item of files) process.stdout.write(`${String(item.status || \"M\")} ${String(item.path || \"\")}\\n`);\n const summary = plan.summary && typeof plan.summary === \"object\" ? plan.summary as Record<string, unknown> : {};\n const prompt = createInterface({ input: process.stdin, output: process.stdout });\n const answer = await prompt.question(\n `Pull platform drafts (${summary.files_added || 0} added, ${summary.files_modified || 0} modified, ${summary.files_removed || 0} removed)? [y/N] `,\n );\n prompt.close();\n if (!/^y(?:es)?$/i.test(answer.trim())) throw new Error(\"Pull cancelled\");\n}\n\nexport async function pullPackage(options: {\n parsed: Parsed;\n input: string;\n client: RemoteClient;\n installationId: string;\n}): Promise<Record<string, unknown>> {\n const { parsed, input, client, installationId } = options;\n const preview = await client.resourceInstallations.planPull(\n installationId,\n packageUpload(await packPackageSnapshot(input), input),\n );\n const plan = preview.plan && typeof preview.plan === \"object\"\n ? preview.plan as Record<string, unknown>\n : {};\n await confirmPull(parsed, plan);\n const pullId = String(preview.pull_id || \"\");\n const payload = await client.resourceInstallations.downloadPull(installationId, pullId);\n if (\n payload.platform_snapshot_hash !== preview.platform_snapshot_hash\n || payload.package_hash !== preview.package_hash\n || !payload.files\n || typeof payload.files !== \"object\"\n || Array.isArray(payload.files)\n ) throw new Error(\"Pulled package snapshot does not match its preview\");\n let accepted: Record<string, unknown> = {};\n await replacePackageFiles(input, payload.files as Record<string, string>, async () => {\n accepted = await client.resourceInstallations.acceptPull(\n installationId,\n pullId,\n {\n platform_snapshot_hash: String(preview.platform_snapshot_hash || \"\"),\n package_hash: String(preview.package_hash || \"\"),\n },\n { idempotencyKey: `pull-${pullId}` },\n );\n });\n return {\n ok: true,\n phase: \"pulled\",\n installation_id: installationId,\n pull_id: preview.pull_id,\n package_hash: preview.package_hash,\n summary: plan.summary || {},\n files: Array.isArray(plan.files) ? plan.files : [],\n status: accepted.status,\n };\n}\n","import { packageUpload } from \"./cli-installation-state.js\";\nimport { packPackage } from \"./package-source.js\";\nimport type { RemoteClient } from \"./remote.js\";\n\nexport async function installedPackageStatus(\n input: string,\n client: RemoteClient,\n status: Record<string, unknown>,\n): Promise<Record<string, unknown>> {\n const callableBindings = Array.isArray(status.callable_bindings)\n ? status.callable_bindings as Array<Record<string, unknown>>\n : [];\n const publicationCurrent = status.publication_state === \"current\";\n const healthy = callableBindings.filter((item) => (\n item.draft_status === \"attached\"\n && (!publicationCurrent || item.published_status === \"attached\")\n )).length;\n const compiled = await client.resourcePackages.validatePackage(\n packageUpload(await packPackage(input), input),\n );\n const localPackageHash = typeof compiled.package_hash === \"string\"\n ? compiled.package_hash\n : null;\n return {\n ok: true,\n installed: true,\n binding_summary: {\n total: callableBindings.length,\n healthy,\n unhealthy: callableBindings.length - healthy,\n },\n synchronization: {\n direction: status.last_sync_direction || null,\n synchronized_at: status.last_synchronized_at || null,\n synchronized_package_hash: status.synchronized_package_hash || null,\n local_package_hash: localPackageHash,\n diverged: Boolean(localPackageHash && status.synchronized_package_hash && localPackageHash !== status.synchronized_package_hash),\n },\n installation: status,\n };\n}\n","import { createHash } from \"node:crypto\";\nimport { createInterface } from \"node:readline/promises\";\n\nimport { shouldPromptForDependency } from \"./import-guards.js\";\nimport type { RemoteClient } from \"./remote.js\";\n\nexport async function promptImportMappings(\n client: RemoteClient,\n preview: Record<string, unknown>,\n current: Record<string, string>,\n enabled: boolean,\n): Promise<Record<string, string>> {\n if (!enabled) return current;\n const dependencies = Array.isArray(preview.dependencies)\n ? preview.dependencies.filter((item): item is Record<string, unknown> => Boolean(item && typeof item === \"object\" && item.status === \"unresolved\"))\n : [];\n const unique = new Map(dependencies.map((item) => [String(item.requirement_key || item.id), item]));\n if (!unique.size) return current;\n const prompt = createInterface({ input: process.stdin, output: process.stdout });\n try {\n const next = { ...current };\n for (const [key, dependency] of unique) {\n if (!shouldPromptForDependency(dependency)) continue;\n if (dependency.kind === \"secret\") {\n const answer = await prompt.question(`${dependency.source_name || key} secret ($secret:name, blank to omit): `);\n if (answer.trim()) next[key] = answer.trim();\n continue;\n }\n const response = await client.resourcePackages.candidates({\n kind: String(dependency.kind), query: String(dependency.source_name || \"\"),\n requiredCapability: dependency.required_capability === \"embedding\" ? \"embedding\" : dependency.required_capability === \"chat\" ? \"chat\" : undefined,\n });\n const candidates = Array.isArray(response.items) ? response.items as Array<Record<string, unknown>> : [];\n process.stdout.write(`${dependency.source_name || key}: ${candidates.map((item, index) => `${index + 1}) ${item.name}`).join(\" \")}\\n`);\n const answer = await prompt.question(\"Choose a candidate number (blank to omit): \");\n const selected = candidates[Number(answer) - 1];\n if (selected?.id) next[key] = String(selected.id);\n }\n return next;\n } finally {\n prompt.close();\n }\n}\n\nexport async function promptInstallationRequirementLinks(\n client: RemoteClient,\n installationId: string,\n plan: Record<string, unknown>,\n enabled: boolean,\n): Promise<boolean> {\n if (!enabled) return false;\n const requirements = Array.isArray(plan.external_requirements)\n ? plan.external_requirements.filter((item): item is Record<string, unknown> => Boolean(\n item && typeof item === \"object\" && item.required === true && item.configured !== true && ![\"model\", \"secret\"].includes(String(item.kind)),\n ))\n : [];\n if (!requirements.length) return false;\n const prompt = createInterface({ input: process.stdin, output: process.stdout });\n let linked = false;\n try {\n for (const requirement of requirements) {\n const key = String(requirement.requirement_key || \"\");\n const response = await client.resourcePackages.candidates({ kind: String(requirement.kind), query: String(requirement.name || \"\") });\n const candidates = Array.isArray(response.items) ? response.items as Array<Record<string, unknown>> : [];\n process.stdout.write(`${requirement.name || key}: ${candidates.map((item, index) => `${index + 1}) ${item.name}`).join(\" \")}\\n`);\n const answer = await prompt.question(\"Choose a candidate number (blank to leave unresolved): \");\n const selected = candidates[Number(answer) - 1];\n if (!selected?.id) continue;\n await client.resourceInstallations.link(installationId, { resource_key: key, resource_id: String(selected.id) }, {\n idempotencyKey: `link-${createHash(\"sha256\").update(`${installationId}:${key}:${selected.id}`).digest(\"hex\").slice(0, 40)}`,\n });\n linked = true;\n }\n return linked;\n } finally {\n prompt.close();\n }\n}\n","import { createHmac } from \"node:crypto\";\nimport { hostname } from \"node:os\";\nimport { resolve } from \"node:path\";\nimport { parse as parseYaml } from \"yaml\";\n\nimport { canonicalJson, packageDirectory } from \"./cli-installation-state.js\";\nimport { loadPackageFiles } from \"./package-source.js\";\n\nconst DEFAULT_API_BASE_URL = \"https://api.agents24.dev\";\nconst MANIFEST_POLL_INTERVAL_MS = 2_000;\n\nexport type DevelopmentArtifact = {\n key: string;\n baseUrl: string;\n command?: string;\n args: string[];\n cwd: string;\n protocol: Record<string, unknown>;\n signingSecretEnv?: string;\n};\n\ntype DevelopmentClient = {\n resourceInstallations: {\n prepareDevelopmentSession(\n installationId: string,\n request: { resource_key: string; machine_label: string },\n ): Promise<Record<string, unknown>>;\n };\n};\n\nexport async function developmentArtifacts(input: string): Promise<DevelopmentArtifact[]> {\n const directory = await packageDirectory(input);\n if (!directory) throw new Error(\"dev requires a Resource Package directory\");\n const files = await loadPackageFiles(input);\n const manifest = parseYaml(files.get(\"agents24.yaml\") || \"\") as Record<string, unknown>;\n const resources = Array.isArray(manifest.resources) ? manifest.resources as Array<Record<string, unknown>> : [];\n const requires = manifest.requires && typeof manifest.requires === \"object\" ? manifest.requires as Record<string, unknown> : {};\n const requiredSecrets = requires.secrets && typeof requires.secrets === \"object\" ? requires.secrets as Record<string, unknown> : {};\n const result: DevelopmentArtifact[] = [];\n for (const resource of resources) {\n const path = String(resource.path || \"\");\n if (!/^artifacts\\/[a-z0-9][a-z0-9-]*\\/artifact\\.yaml$/.test(path)) continue;\n const sourceText = files.get(path);\n if (!sourceText) continue;\n const source = parseYaml(sourceText) as Record<string, unknown>;\n if (source.execution_target !== \"self_hosted\") continue;\n const development = source.development && typeof source.development === \"object\" ? source.development as Record<string, unknown> : undefined;\n if (!development) continue;\n const server = source.server && typeof source.server === \"object\" ? source.server as Record<string, unknown> : {};\n const auth = server.auth && typeof server.auth === \"object\" ? server.auth as Record<string, unknown> : {};\n const secretRequirement = String(auth.secret || \"\");\n const secretKey = secretRequirement.startsWith(\"$secrets.\") ? secretRequirement.slice(\"$secrets.\".length) : \"\";\n const secretDeclaration = secretKey && requiredSecrets[secretKey] && typeof requiredSecrets[secretKey] === \"object\"\n ? requiredSecrets[secretKey] as Record<string, unknown>\n : undefined;\n const cwd = resolve(directory, String(development.cwd || \".\"));\n if (cwd !== directory && !cwd.startsWith(`${directory}/`)) throw new Error(`Artifact ${resource.key} development.cwd must remain inside the package`);\n result.push({\n key: String(resource.key || \"\"), baseUrl: String(development.base_url || \"\"),\n command: development.command ? String(development.command) : undefined,\n args: Array.isArray(development.args) ? development.args.map(String) : [], cwd,\n protocol: {\n manifest_path: server.manifest_path, health_path: server.health_path, verify_path: server.verify_path,\n invoke_path: server.invoke_path, auth_mode: auth.mode, signing_secret_requirement: auth.secret,\n },\n signingSecretEnv: secretDeclaration?.env ? String(secretDeclaration.env) : undefined,\n });\n }\n return result;\n}\n\nexport async function waitForServer(baseUrl: string, healthPath: unknown): Promise<void> {\n const target = new URL(String(healthPath || \"/.well-known/agents24/artifact/health\"), baseUrl);\n for (let attempt = 0; attempt < 60; attempt += 1) {\n try { const response = await fetch(target); if (response.ok) return; } catch { /* retry */ }\n await new Promise((resolvePromise) => setTimeout(resolvePromise, 250));\n }\n throw new Error(`Local Artifact server did not become healthy at ${target}`);\n}\n\nexport async function openDevelopmentRelay(\n client: DevelopmentClient,\n installationIdValue: string,\n artifact: DevelopmentArtifact,\n localEnv: Record<string, string>,\n): Promise<{ sessionId: string; socket: WebSocket; state: { terminalReason?: string } }> {\n const admission = await client.resourceInstallations.prepareDevelopmentSession(installationIdValue, {\n resource_key: artifact.key, machine_label: hostname(),\n });\n const apiUrl = new URL(String(process.env.AGENTS24_BASE_URL || DEFAULT_API_BASE_URL));\n apiUrl.protocol = apiUrl.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n apiUrl.pathname = String(admission.relay_path);\n const socket = new WebSocket(apiUrl, [\n \"agents24-artifact-relay\",\n `agents24-credential-${String(admission.relay_token)}`,\n ]);\n const state: { terminalReason?: string } = {};\n let manifestHash: string | undefined;\n let pendingHash: string | undefined;\n let polling = false;\n const manifestUrl = new URL(String(artifact.protocol.manifest_path || \"/.well-known/agents24/artifact\"), artifact.baseUrl);\n const localManifestHash = async (): Promise<string> => {\n const response = await fetch(manifestUrl);\n if (!response.ok) throw new Error(\"Local Artifact manifest is unavailable\");\n return canonicalJson(await response.json());\n };\n const pollManifest = async (): Promise<void> => {\n if (polling || socket.readyState !== WebSocket.OPEN || pendingHash !== undefined) return;\n polling = true;\n try {\n const nextHash = await localManifestHash();\n if (manifestHash !== undefined && nextHash === manifestHash) return;\n if (manifestHash === undefined) {\n manifestHash = nextHash;\n return;\n }\n pendingHash = nextHash;\n socket.send(JSON.stringify({ type: \"manifest_changed\" }));\n } catch {\n pendingHash = \"unavailable\";\n socket.send(JSON.stringify({ type: \"manifest_changed\" }));\n } finally {\n polling = false;\n }\n };\n await new Promise<void>((resolveReady, rejectReady) => {\n socket.addEventListener(\"error\", () => rejectReady(new Error(`Artifact relay failed for ${artifact.key}`)), { once: true });\n socket.addEventListener(\"message\", async (event) => {\n const message = JSON.parse(String(event.data)) as Record<string, unknown>;\n if (message.type === \"ready\") {\n try { manifestHash = await localManifestHash(); } catch { manifestHash = undefined; }\n resolveReady();\n return;\n }\n if (message.type === \"manifest_refreshed\") {\n if (pendingHash && pendingHash !== \"unavailable\") manifestHash = pendingHash;\n pendingHash = undefined;\n return;\n }\n if (message.type === \"manifest_refresh_failed\") {\n pendingHash = undefined;\n return;\n }\n if (message.type === \"superseded\" || message.type === \"revoked\") {\n state.terminalReason = String(message.type);\n socket.close();\n return;\n }\n if (message.type !== \"request\") return;\n const method = message.operation === \"health\" || message.operation === \"manifest\" ? \"GET\" : \"POST\";\n try {\n const requestBody = method === \"POST\" ? JSON.stringify(message.body || {}) : undefined;\n const headers: Record<string, string> = method === \"POST\" ? { \"content-type\": \"application/json\" } : {};\n if (method === \"POST\" && String(artifact.protocol.auth_mode || \"hmac_sha256\") === \"hmac_sha256\") {\n const signingSecret = String(\n (artifact.signingSecretEnv && (localEnv[artifact.signingSecretEnv] || process.env[artifact.signingSecretEnv])) || \"\",\n );\n if (!signingSecret) throw new Error(`Artifact ${artifact.key} signing secret is unavailable`);\n const timestamp = String(Date.now());\n const signature = createHmac(\"sha256\", signingSecret).update(`${timestamp}.${requestBody}`).digest(\"hex\");\n headers[\"x-agents24-timestamp\"] = timestamp;\n headers[\"x-agents24-signature\"] = `sha256=${signature}`;\n }\n const response = await fetch(new URL(String(message.path || \"/\"), artifact.baseUrl), { method, headers, body: requestBody });\n const textBody = await response.text();\n let body: unknown = textBody;\n try { body = textBody ? JSON.parse(textBody) : null; } catch { /* preserve text */ }\n socket.send(JSON.stringify({ type: \"response\", request_id: message.request_id, status: response.status, body }));\n } catch {\n socket.send(JSON.stringify({ type: \"response\", request_id: message.request_id, status: 502, body: { status: \"failed\" } }));\n }\n });\n const heartbeat = setInterval(() => { if (socket.readyState === WebSocket.OPEN) socket.send(JSON.stringify({ type: \"heartbeat\" })); }, 15_000);\n const manifestPoll = setInterval(() => { void pollManifest(); }, MANIFEST_POLL_INTERVAL_MS);\n socket.addEventListener(\"close\", () => { clearInterval(heartbeat); clearInterval(manifestPoll); }, { once: true });\n });\n return { sessionId: String(admission.id), socket, state };\n}\n","const commands: Record<string, { args: string; summary: string; flags: string; example: string }> = {\n prepare: { args: \"<directory>\", summary: \"Validate package identity and prepare local secrets.\", flags: \"\", example: \"agents24 prepare ./agents24\" },\n plan: { args: \"<directory|archive.zip>\", summary: \"Plan the complete operation without changing resources. Resolve blockers before apply.\", flags: \"--integration <publish-only|bff|client-deployment> --agent <stable-key> --prune\", example: \"agents24 plan ./agents24 --integration bff --agent assistant --json\" },\n apply: { args: \"<directory|archive.zip>\", summary: \"Plan and apply resource drafts. Existing primary Agent selections are fixed.\", flags: \"--integration <publish-only|bff|client-deployment> --agent <stable-key> --prune --yes\", example: \"agents24 apply ./agents24 --yes\" },\n setup: { args: \"<directory>\", summary: \"Apply resources and configure an application integration.\", flags: \"--app <directory> --integration <publish-only|bff|client-deployment> --agent <stable-key> --policy-set <id> --oidc-config <json> --no-write-env --yes\", example: \"agents24 setup ./agents24 --integration bff --app . --agent assistant\" },\n publish: { args: \"<directory>\", summary: \"Publish the installed package resources after validation.\", flags: \"--yes\", example: \"agents24 publish ./agents24 --yes\" },\n status: { args: \"<directory>\", summary: \"Inspect installation, validation, and publication status.\", flags: \"\", example: \"agents24 status ./agents24 --json\" },\n pull: { args: \"<directory>\", summary: \"Review and pull portable platform changes into the local package.\", flags: \"--yes\", example: \"agents24 pull ./agents24\" },\n link: { args: \"<directory>\", summary: \"Link an external requirement by its stable key in an installation.\", flags: \"--resource <stable-key=resource-id> (repeatable)\", example: \"agents24 link ./agents24 --resource '$tools.search=<tool-id>'\" },\n resources: { args: \"\", summary: \"List candidate resources for external requirements.\", flags: \"--kind <kind> --query <text> --limit <number>\", example: \"agents24 resources --kind tool --query Search --json\" },\n dev: { args: \"<directory>\", summary: \"Run the local Remote Artifact development relay.\", flags: \"--artifact <stable-key> --apply --yes\", example: \"agents24 dev ./agents24 --artifact workspace --apply\" },\n fork: { args: \"<source> <target>\", summary: \"Copy a package with a new installation identity.\", flags: \"--name <name>\", example: \"agents24 fork ./agents24 ./copy --name copy\" },\n \"package init\": { args: \"[directory]\", summary: \"Initialize a package with a unique package_id. Copying keeps identity; fork creates a new one.\", flags: \"--name <name>\", example: \"agents24 package init ./agents24 --name research\" },\n \"package validate\": { args: \"<directory|archive.zip>\", summary: \"Validate authored package source, optionally against the backend.\", flags: \"--remote\", example: \"agents24 package validate ./agents24 --json\" },\n \"package pack\": { args: \"<directory>\", summary: \"Create a portable resource archive.\", flags: \"--output <archive.zip>\", example: \"agents24 package pack ./agents24 --output research.zip\" },\n \"package export\": { args: \"\", summary: \"Export a platform resource and its portable dependencies.\", flags: \"--kind <kind> --id <resource-id> --target <draft|version> --version-id <id> --output <archive.zip>\", example: \"agents24 package export --kind agent --id <agent-id> --target draft\" },\n \"package preview\": { args: \"<directory|archive.zip>\", summary: \"Preview an import and its unresolved dependencies.\", flags: \"--map <requirement=id>\", example: \"agents24 package preview research.zip --json\" },\n \"package import\": { args: \"<directory|archive.zip>\", summary: \"Import resource drafts with explicit dependency mappings.\", flags: \"--map <requirement=id> --allow-incomplete --yes\", example: \"agents24 package import research.zip --yes\" },\n};\n\nexport function commandHelp(argv: string[]): string {\n const topic = argv[0] === \"package\" ? `package ${argv[1] || \"\"}`.trim() : argv[0];\n const entry = commands[topic];\n if (!entry) return `Usage: agents24 <command> [arguments] [options]\\n\\nCommands:\\n${Object.entries(commands).map(([name, item]) => ` ${name} ${item.args} — ${item.summary}`).join(\"\\n\")}\\n\\nUse agents24 <command> --help for flags and examples.\\n`;\n return `Usage: agents24 ${topic} ${entry.args}\\n\\n${entry.summary}\\n\\nOptions:\\n ${entry.flags || \"No command-specific flags.\"}\\n --json Machine-readable JSON output (default: human-readable)\\n --help, -h Show this help; exits successfully without authentication\\n\\nAuthentication:\\n AGENTS24_API_KEY Organization API key; never pass keys in command arguments.\\n AGENTS24_BASE_URL API URL override for a local backend.\\n\\nExample:\\n ${entry.example}\\n`;\n}\n"],"mappings":"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","names":["basename","join","resolve","chmod","readFile","writeFile","createInterface","createHash","readFile","writeFile","join","join","readFile","values","writeFile","createInterface","createInterface","answer","requirements","resolve","parseYaml","parseYaml","resolve","DEFAULT_API_BASE_URL","createInterface","basename","resolve","createHash","join","values","readFile","writeFile","chmod","requirements"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -44,7 +44,8 @@ type ResourcePackageImportUpload = ResourcePackageUpload & {
|
|
|
44
44
|
};
|
|
45
45
|
type ResourceInstallationPlanUpload = ResourcePackageUpload & {
|
|
46
46
|
prune?: boolean;
|
|
47
|
-
|
|
47
|
+
integrationMode?: "publish-only" | "bff" | "client-deployment";
|
|
48
|
+
primaryResourceKey?: string;
|
|
48
49
|
};
|
|
49
50
|
type RemoteClient = {
|
|
50
51
|
resourcePackages: {
|
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agents24/cli",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.13",
|
|
4
4
|
"description": "Git-friendly Agents24 resource package tooling.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"provenance": false
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@agents24/node": "0.5.
|
|
37
|
+
"@agents24/node": "0.5.10",
|
|
38
38
|
"@clack/prompts": "1.7.0",
|
|
39
39
|
"ajv": "^8.17.1",
|
|
40
40
|
"yaml": "^2.8.1"
|