alibabacloud-agentcore-sdk 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/README.md +15 -2
  2. package/dist/auth/index.cjs +6 -7
  3. package/dist/auth/index.cjs.map +1 -1
  4. package/dist/auth/index.js +5 -6
  5. package/dist/{chunk-RZNQGEGJ.cjs → chunk-25KH5XKG.cjs} +6 -6
  6. package/dist/{chunk-RZNQGEGJ.cjs.map → chunk-25KH5XKG.cjs.map} +1 -1
  7. package/dist/{chunk-A3WMLVJC.cjs → chunk-2TRT7RSV.cjs} +5 -7
  8. package/dist/chunk-2TRT7RSV.cjs.map +1 -0
  9. package/dist/{chunk-K3TE7625.js → chunk-3JXIMUUY.js} +2 -2
  10. package/dist/{chunk-UWPKFJYM.js → chunk-45S6S5WI.js} +13 -11
  11. package/dist/chunk-45S6S5WI.js.map +1 -0
  12. package/dist/{chunk-TWEO5XVM.cjs → chunk-5S55CTNM.cjs} +18 -20
  13. package/dist/chunk-5S55CTNM.cjs.map +1 -0
  14. package/dist/{chunk-JW62DVIC.js → chunk-5UQIUMSF.js} +3 -5
  15. package/dist/{chunk-JW62DVIC.js.map → chunk-5UQIUMSF.js.map} +1 -1
  16. package/dist/{chunk-ZWQBAJ5O.js → chunk-6NNPSP3O.js} +2 -2
  17. package/dist/{chunk-IUCLCPVV.js → chunk-76NTQYJB.js} +3 -3
  18. package/dist/{chunk-7Y263YIW.js → chunk-7AJ2V7RN.js} +5 -7
  19. package/dist/{chunk-7Y263YIW.js.map → chunk-7AJ2V7RN.js.map} +1 -1
  20. package/dist/{chunk-5ZOLHQXO.js → chunk-7UBN3SJI.js} +7 -9
  21. package/dist/{chunk-5ZOLHQXO.js.map → chunk-7UBN3SJI.js.map} +1 -1
  22. package/dist/{chunk-MZ5UWGXS.js → chunk-AEQ76QIO.js} +33 -5
  23. package/dist/chunk-AEQ76QIO.js.map +1 -0
  24. package/dist/{chunk-UBP5CHU7.js → chunk-AX3NM2DK.js} +5 -7
  25. package/dist/{chunk-UBP5CHU7.js.map → chunk-AX3NM2DK.js.map} +1 -1
  26. package/dist/{chunk-55XZZRKO.js → chunk-D45QSOR4.js} +4 -6
  27. package/dist/{chunk-55XZZRKO.js.map → chunk-D45QSOR4.js.map} +1 -1
  28. package/dist/{chunk-MICRSJ6R.js → chunk-EKLTJ65H.js} +2 -2
  29. package/dist/{chunk-RBAY4MO2.js → chunk-FG7K3EF7.js} +6 -8
  30. package/dist/{chunk-RBAY4MO2.js.map → chunk-FG7K3EF7.js.map} +1 -1
  31. package/dist/{chunk-PKYET77D.cjs → chunk-JK6KPDVW.cjs} +39 -41
  32. package/dist/chunk-JK6KPDVW.cjs.map +1 -0
  33. package/dist/{chunk-2E5EWEDG.cjs → chunk-KQTZUIMI.cjs} +10 -12
  34. package/dist/chunk-KQTZUIMI.cjs.map +1 -0
  35. package/dist/{chunk-ZLKYXRNM.js → chunk-KTKZCLYB.js} +3 -5
  36. package/dist/{chunk-ZLKYXRNM.js.map → chunk-KTKZCLYB.js.map} +1 -1
  37. package/dist/{chunk-RHY7Y43E.js → chunk-L74ASQWF.js} +8 -9
  38. package/dist/chunk-L74ASQWF.js.map +1 -0
  39. package/dist/{chunk-S7PWSJNP.cjs → chunk-LQM754U3.cjs} +5 -5
  40. package/dist/{chunk-S7PWSJNP.cjs.map → chunk-LQM754U3.cjs.map} +1 -1
  41. package/dist/{chunk-GYLT23D3.js → chunk-NI3U6RZL.js} +5 -5
  42. package/dist/{chunk-5JXA7JPS.js → chunk-NRYDUATX.js} +2 -2
  43. package/dist/{chunk-A3PF2SPD.cjs → chunk-NWWTBPYG.cjs} +5 -5
  44. package/dist/{chunk-A3PF2SPD.cjs.map → chunk-NWWTBPYG.cjs.map} +1 -1
  45. package/dist/{chunk-5RKN46UU.cjs → chunk-NXMTTQQK.cjs} +15 -15
  46. package/dist/{chunk-5RKN46UU.cjs.map → chunk-NXMTTQQK.cjs.map} +1 -1
  47. package/dist/{chunk-IF7LMBXC.js → chunk-PHVKSATD.js} +60 -16
  48. package/dist/chunk-PHVKSATD.js.map +1 -0
  49. package/dist/{chunk-RYXL25AI.js → chunk-PS3EAUMK.js} +2 -2
  50. package/dist/{chunk-ULJTQSLE.cjs → chunk-R7NVBTPK.cjs} +3 -3
  51. package/dist/{chunk-ULJTQSLE.cjs.map → chunk-R7NVBTPK.cjs.map} +1 -1
  52. package/dist/{chunk-YZP55W7S.cjs → chunk-RJCDBVZ6.cjs} +3 -3
  53. package/dist/{chunk-YZP55W7S.cjs.map → chunk-RJCDBVZ6.cjs.map} +1 -1
  54. package/dist/{chunk-LXHW6OT4.cjs → chunk-T26WN7TD.cjs} +19 -17
  55. package/dist/chunk-T26WN7TD.cjs.map +1 -0
  56. package/dist/{chunk-ZTWLCHCO.cjs → chunk-UKRJR66Y.cjs} +24 -26
  57. package/dist/chunk-UKRJR66Y.cjs.map +1 -0
  58. package/dist/{chunk-MWAHO47B.cjs → chunk-UMTUXOKE.cjs} +25 -27
  59. package/dist/chunk-UMTUXOKE.cjs.map +1 -0
  60. package/dist/{chunk-JSP7ZROS.cjs → chunk-V4A6MJ42.cjs} +36 -8
  61. package/dist/chunk-V4A6MJ42.cjs.map +1 -0
  62. package/dist/{chunk-BVZ7H2F5.cjs → chunk-VYOJJECB.cjs} +55 -56
  63. package/dist/chunk-VYOJJECB.cjs.map +1 -0
  64. package/dist/{chunk-ZLQ2IBTC.cjs → chunk-WRRIPTJP.cjs} +12 -12
  65. package/dist/{chunk-ZLQ2IBTC.cjs.map → chunk-WRRIPTJP.cjs.map} +1 -1
  66. package/dist/{chunk-QIZO3A4Y.cjs → chunk-ZIXZWQSP.cjs} +85 -41
  67. package/dist/chunk-ZIXZWQSP.cjs.map +1 -0
  68. package/dist/{chunk-RQRI6RCG.cjs → chunk-ZXPTDLXJ.cjs} +12 -14
  69. package/dist/chunk-ZXPTDLXJ.cjs.map +1 -0
  70. package/dist/collaboration/index.cjs +3 -3
  71. package/dist/collaboration/index.d.cts +2 -2
  72. package/dist/collaboration/index.d.ts +2 -2
  73. package/dist/collaboration/index.js +2 -2
  74. package/dist/controlplane/index.cjs +7 -8
  75. package/dist/controlplane/index.cjs.map +1 -1
  76. package/dist/controlplane/index.js +6 -7
  77. package/dist/{errors-D9OtcR-o.d.cts → errors-BGfCbCgs.d.cts} +4 -1
  78. package/dist/{errors-BjGO6N10.d.ts → errors-D_809AqR.d.ts} +4 -1
  79. package/dist/{google-adk-model-N47R7GB2.js → google-adk-model-V7SC6RQD.js} +3 -3
  80. package/dist/{google-adk-model-PDBKY5YZ.cjs → google-adk-model-WYWEQI4R.cjs} +13 -13
  81. package/dist/{google-adk-model-PDBKY5YZ.cjs.map → google-adk-model-WYWEQI4R.cjs.map} +1 -1
  82. package/dist/index.cjs +33 -35
  83. package/dist/index.cjs.map +1 -1
  84. package/dist/index.d.cts +2 -2
  85. package/dist/index.d.ts +2 -2
  86. package/dist/index.js +15 -17
  87. package/dist/index.js.map +1 -1
  88. package/dist/integrations/ai-sdk.cjs +3 -3
  89. package/dist/integrations/ai-sdk.js +2 -2
  90. package/dist/integrations/google-adk.cjs +14 -15
  91. package/dist/integrations/google-adk.cjs.map +1 -1
  92. package/dist/integrations/google-adk.js +10 -11
  93. package/dist/integrations/google-adk.js.map +1 -1
  94. package/dist/integrations/langchain.cjs +18 -19
  95. package/dist/integrations/langchain.cjs.map +1 -1
  96. package/dist/integrations/langchain.d.cts +3 -2
  97. package/dist/integrations/langchain.d.ts +3 -2
  98. package/dist/integrations/langchain.js +11 -12
  99. package/dist/integrations/langchain.js.map +1 -1
  100. package/dist/integrations/langgraph.cjs +10 -11
  101. package/dist/integrations/langgraph.cjs.map +1 -1
  102. package/dist/integrations/langgraph.d.cts +3 -2
  103. package/dist/integrations/langgraph.d.ts +3 -2
  104. package/dist/integrations/langgraph.js +9 -10
  105. package/dist/integrations/mastra.cjs +14 -15
  106. package/dist/integrations/mastra.cjs.map +1 -1
  107. package/dist/integrations/mastra.js +8 -9
  108. package/dist/integrations/mastra.js.map +1 -1
  109. package/dist/{langchain-adapter-DJsyjm5V.d.ts → langchain-adapter-CaTCXaeo.d.ts} +4 -2
  110. package/dist/{langchain-adapter-DFJdEX04.d.cts → langchain-adapter-DtxU7oAi.d.cts} +4 -2
  111. package/dist/{langchain-provider-PHL4UWNF.js → langchain-provider-JFWLKOGL.js} +26 -2
  112. package/dist/langchain-provider-JFWLKOGL.js.map +1 -0
  113. package/dist/{langchain-provider-NF5GIDQV.cjs → langchain-provider-UKO27CQA.cjs} +38 -14
  114. package/dist/langchain-provider-UKO27CQA.cjs.map +1 -0
  115. package/dist/mcp/index.cjs +3 -4
  116. package/dist/mcp/index.cjs.map +1 -1
  117. package/dist/mcp/index.js +2 -3
  118. package/dist/memory/index.cjs +6 -7
  119. package/dist/memory/index.cjs.map +1 -1
  120. package/dist/memory/index.d.cts +24 -2
  121. package/dist/memory/index.d.ts +24 -2
  122. package/dist/memory/index.js +5 -6
  123. package/dist/model/index.cjs +4 -5
  124. package/dist/model/index.cjs.map +1 -1
  125. package/dist/model/index.js +3 -4
  126. package/dist/runtime/index.cjs +7 -8
  127. package/dist/runtime/index.cjs.map +1 -1
  128. package/dist/runtime/index.js +6 -7
  129. package/dist/server/index.cjs +13 -15
  130. package/dist/server/index.cjs.map +1 -1
  131. package/dist/server/index.js +5 -7
  132. package/dist/server/index.js.map +1 -1
  133. package/dist/skill/index.cjs +4 -5
  134. package/dist/skill/index.cjs.map +1 -1
  135. package/dist/skill/index.js +3 -4
  136. package/package.json +1 -1
  137. package/dist/chunk-2E5EWEDG.cjs.map +0 -1
  138. package/dist/chunk-A3WMLVJC.cjs.map +0 -1
  139. package/dist/chunk-BVZ7H2F5.cjs.map +0 -1
  140. package/dist/chunk-IF7LMBXC.js.map +0 -1
  141. package/dist/chunk-JSP7ZROS.cjs.map +0 -1
  142. package/dist/chunk-LE5P3SJW.cjs +0 -16
  143. package/dist/chunk-LE5P3SJW.cjs.map +0 -1
  144. package/dist/chunk-LXHW6OT4.cjs.map +0 -1
  145. package/dist/chunk-MWAHO47B.cjs.map +0 -1
  146. package/dist/chunk-MZ5UWGXS.js.map +0 -1
  147. package/dist/chunk-NZL3VPJ2.js +0 -16
  148. package/dist/chunk-NZL3VPJ2.js.map +0 -1
  149. package/dist/chunk-PKYET77D.cjs.map +0 -1
  150. package/dist/chunk-QIZO3A4Y.cjs.map +0 -1
  151. package/dist/chunk-RHY7Y43E.js.map +0 -1
  152. package/dist/chunk-RQRI6RCG.cjs.map +0 -1
  153. package/dist/chunk-TWEO5XVM.cjs.map +0 -1
  154. package/dist/chunk-UWPKFJYM.js.map +0 -1
  155. package/dist/chunk-ZTWLCHCO.cjs.map +0 -1
  156. package/dist/langchain-provider-NF5GIDQV.cjs.map +0 -1
  157. package/dist/langchain-provider-PHL4UWNF.js.map +0 -1
  158. /package/dist/{chunk-K3TE7625.js.map → chunk-3JXIMUUY.js.map} +0 -0
  159. /package/dist/{chunk-ZWQBAJ5O.js.map → chunk-6NNPSP3O.js.map} +0 -0
  160. /package/dist/{chunk-IUCLCPVV.js.map → chunk-76NTQYJB.js.map} +0 -0
  161. /package/dist/{chunk-MICRSJ6R.js.map → chunk-EKLTJ65H.js.map} +0 -0
  162. /package/dist/{chunk-GYLT23D3.js.map → chunk-NI3U6RZL.js.map} +0 -0
  163. /package/dist/{chunk-5JXA7JPS.js.map → chunk-NRYDUATX.js.map} +0 -0
  164. /package/dist/{chunk-RYXL25AI.js.map → chunk-PS3EAUMK.js.map} +0 -0
  165. /package/dist/{google-adk-model-N47R7GB2.js.map → google-adk-model-V7SC6RQD.js.map} +0 -0
@@ -1,10 +1,8 @@
1
- import {
2
- nullLogger
3
- } from "./chunk-NZL3VPJ2.js";
4
1
  import {
5
2
  ConfigError,
6
- ResourceNotConfiguredError
7
- } from "./chunk-MZ5UWGXS.js";
3
+ ResourceNotConfiguredError,
4
+ nullLogger
5
+ } from "./chunk-AEQ76QIO.js";
8
6
 
9
7
  // src/skill/loader.ts
10
8
  import { createHash } from "crypto";
@@ -217,4 +215,4 @@ async function loadDirectory(root, sourceFiles) {
217
215
  export {
218
216
  Skills
219
217
  };
220
- //# sourceMappingURL=chunk-55XZZRKO.js.map
218
+ //# sourceMappingURL=chunk-D45QSOR4.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/skill/loader.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\nimport { lstat, mkdir, mkdtemp, readFile, readdir, rename, rm, writeFile } from 'node:fs/promises';\nimport { basename, dirname, join, posix, resolve } from 'node:path';\nimport { fromBuffer, type Entry, type ZipFile } from 'yauzl';\nimport { parseDocument } from 'yaml';\nimport type { SkillArtifact } from '../controlplane/client';\nimport { ConfigError, ResourceNotConfiguredError } from '../errors';\nimport { nullLogger, type Logger } from '../logging';\n\nconst MAX_BYTES = 10 * 1024 * 1024;\nconst METADATA = '.agentcore-skill.json';\nconst writes = new Map<string, Promise<void>>();\nexport interface Skill {\n readonly name: string;\n readonly description: string;\n readonly version: string;\n readonly instruction: string;\n readonly root: string;\n readonly files: readonly string[];\n readonly source: 'local' | 'agentcore';\n readonly digest?: string;\n readonly workspaceId?: string;\n}\nexport interface SkillProvider { getSkill(name: string, version?: string): Promise<SkillArtifact>; }\nexport interface SkillsOptions {\n workspaceDir?: string;\n runtime?: () => Promise<{ workspaceId: string; provider: SkillProvider }>;\n logger?: Logger;\n}\n\nexport class Skills {\n private readonly pins = new Map<string, Promise<Skill>>();\n private readonly workspace: string;\n private readonly logger: Logger;\n constructor(private readonly options: SkillsOptions = {}) {\n this.workspace = resolve(options.workspaceDir ?? process.env.AGENTCORE_SKILL_WORKSPACE_DIR ?? '.skills/.agentcore-managed');\n this.logger = options.logger ?? nullLogger;\n }\n async local(root: string): Promise<Skill[]> {\n this.logger.info('agentcore.skill.local.load.started', { root });\n try {\n root = resolve(root);\n if (!(await lstat(root)).isDirectory()) throw new ConfigError('local Skill root is not a directory');\n const entries = await readdir(root, { withFileTypes: true });\n const directories = entries.some((entry) => entry.name === 'SKILL.md') ? [root] : entries.sort((a, b) => a.name.localeCompare(b.name)).flatMap((entry) => {\n if (entry.isSymbolicLink()) throw new ConfigError('local Skill root must not contain symbolic-link Skills');\n return entry.isDirectory() ? [join(root, entry.name)] : [];\n });\n const result: Skill[] = [];\n for (const directory of directories) {\n if ((await readdir(directory)).includes('SKILL.md')) result.push(await loadDirectory(directory));\n }\n this.logger.info('agentcore.skill.local.load.succeeded', { root, skill_count: result.length }); return result;\n } catch (error) { this.logger.warn('agentcore.skill.local.load.failed', { root, error_type: error instanceof Error ? error.name : 'Error' }); throw error; }\n }\n async managed(name: string, options: { version?: string } = {}): Promise<Skill> {\n if (!this.options.runtime) throw new ResourceNotConfiguredError('managed Skill runtime is not configured');\n const { workspaceId, provider } = await this.options.runtime();\n component(name, 'name'); component(workspaceId, 'workspace ID');\n if (options.version !== undefined) component(options.version, 'version');\n const key = JSON.stringify([workspaceId, name, options.version]);\n const cached = this.pins.get(key); if (cached) return cached;\n const pending = (async () => {\n this.logger.info('agentcore.skill.managed.load.started', { workspace_id: workspaceId, name, version: options.version ?? 'latest' });\n const artifact = await provider.getSkill(name, options.version); component(artifact.version, 'version');\n const files = await unpack(name, artifact.archive);\n const hash = createHash('sha256');\n for (const [path, data] of [...files.entries()].sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)) hash.update(path).update('\\0').update(data).update('\\0');\n const digest = hash.digest('hex');\n const target = join(this.workspace, workspaceId, name, artifact.version);\n const metadata = { source: 'agentcore', workspaceId, name, version: artifact.version, digest };\n // Serialize writes to the same named version across Core instances in this process.\n const write = (writes.get(target) ?? Promise.resolve()).catch(() => undefined).then(() => materialize(target, files, metadata));\n writes.set(target, write);\n try { await write; } finally { if (writes.get(target) === write) writes.delete(target); }\n const sourceFiles = ['SKILL.md', ...[...files.keys()].filter((path) => path !== 'SKILL.md').sort()];\n const skill = Object.freeze({ ...await loadDirectory(target, sourceFiles), ...metadata, source: 'agentcore' as const });\n this.logger.info('agentcore.skill.managed.load.succeeded', { workspace_id: workspaceId, name, version: artifact.version, digest });\n return skill;\n })();\n this.pins.set(key, pending);\n try { return await pending; } catch (error) {\n this.pins.delete(key); this.logger.warn('agentcore.skill.managed.load.failed', { workspace_id: workspaceId, name, error_type: error instanceof Error ? error.name : 'Error' }); throw error;\n }\n }\n}\n\nfunction component(value: string, label: string): void {\n if (!value.trim() || /[\\\\/:\\0]/.test(value) || value === '.' || value === '..') throw new ConfigError(`managed Skill ${label} is invalid`);\n}\nfunction safePath(path: string): void {\n if (!path || /[\\\\:\\0]/.test(path) || posix.isAbsolute(path) || path !== posix.normalize(path) || path.split('/').some((part) => part === '.' || part === '..') || path === METADATA) throw new ConfigError('managed Skill contains an unsafe resource path');\n}\nasync function unpack(name: string, archive: Uint8Array): Promise<Map<string, Buffer>> {\n if (!archive.length || archive.length > MAX_BYTES) throw new ConfigError('Skill package exceeds the 10 MiB size limit');\n try {\n const zip = await new Promise<ZipFile>((accept, reject) => fromBuffer(Buffer.from(archive), { lazyEntries: true, strictFileNames: true }, (error, value) => error ? reject(error) : accept(value)));\n const files = new Map<string, Buffer>(); let total = 0;\n await new Promise<void>((accept, reject) => {\n zip.on('error', reject); zip.on('end', accept);\n zip.on('entry', (entry: Entry) => { void (async () => {\n if (entry.fileName.endsWith('/')) return;\n safePath(entry.fileName);\n if (!entry.fileName.startsWith(`${name}/`)) throw new ConfigError('managed Skill package must use the Skill name as its root directory');\n const path = entry.fileName.slice(name.length + 1); safePath(path);\n if (files.has(path)) throw new ConfigError('managed Skill package contains a duplicate path');\n if (((entry.externalFileAttributes >>> 16) & 0xf000) === 0xa000) throw new ConfigError('Skill directories must not contain symbolic links');\n if (entry.uncompressedSize > MAX_BYTES - total) throw new ConfigError('Skill content exceeds the 10 MiB size limit');\n const stream = await new Promise<NodeJS.ReadableStream>((resolve, reject) => zip.openReadStream(entry, (error, stream) => error ? reject(error) : resolve(stream)));\n const chunks: Buffer[] = [];\n for await (const chunk of stream) { const data = Buffer.from(chunk); total += data.length; if (total > MAX_BYTES) throw new ConfigError('Skill content exceeds the 10 MiB size limit'); chunks.push(data); }\n files.set(path, Buffer.concat(chunks));\n })().then(() => zip.readEntry(), (error) => { zip.close(); reject(error); }); });\n zip.readEntry();\n });\n if (!files.has('SKILL.md')) throw new ConfigError(`managed Skill package does not contain ${name}/SKILL.md`);\n for (const path of files.keys()) {\n let parent = posix.dirname(path);\n while (parent !== '.') { if (files.has(parent)) throw new ConfigError('managed Skill contains a colliding resource path'); parent = posix.dirname(parent); }\n }\n return files;\n } catch (error) { if (error instanceof ConfigError) throw error; throw new ConfigError('managed Skill package is not a valid ZIP archive'); }\n}\n\nasync function materialize(target: string, files: Map<string, Buffer>, metadata: Record<string, string>): Promise<void> {\n try {\n const stat = await lstat(target);\n if (stat.isDirectory() && !stat.isSymbolicLink()) {\n const existing: unknown = JSON.parse(await readFile(join(target, METADATA), 'utf8'));\n if (JSON.stringify(existing) === JSON.stringify(metadata)) return;\n }\n } catch (error) { if (!(error instanceof SyntaxError) && (error as NodeJS.ErrnoException).code !== 'ENOENT') throw error; }\n await mkdir(dirname(target), { recursive: true });\n const temporary = await mkdtemp(join(dirname(target), '.skill-'));\n try {\n for (const [path, content] of files) { const destination = join(temporary, path); await mkdir(dirname(destination), { recursive: true }); await writeFile(destination, content); }\n await writeFile(join(temporary, METADATA), JSON.stringify(metadata));\n await loadDirectory(temporary); // Do not replace a working version with invalid SKILL.md.\n await rm(target, { recursive: true, force: true });\n await rename(temporary, target);\n } finally { await rm(temporary, { recursive: true, force: true }); }\n}\n\nasync function loadDirectory(root: string, sourceFiles?: readonly string[]): Promise<Skill> {\n const files: string[] = []; let total = 0;\n async function walk(directory: string, prefix = ''): Promise<void> {\n for (const entry of (await readdir(directory, { withFileTypes: true })).sort((a, b) => a.name.localeCompare(b.name))) {\n if (entry.isSymbolicLink()) throw new ConfigError('Skill directories must not contain symbolic links');\n const name = prefix + entry.name;\n if (entry.isDirectory()) await walk(join(directory, entry.name), `${name}/`);\n else if (entry.isFile() && entry.name !== METADATA) { total += (await lstat(join(directory, entry.name))).size; if (total > MAX_BYTES) throw new ConfigError('Skill content exceeds the 10 MiB size limit'); files.push(name); }\n }\n }\n if (sourceFiles) {\n // Managed packages track source files, not files generated by command execution.\n for (const name of sourceFiles) {\n const entry = await lstat(join(root, name));\n if (entry.isSymbolicLink() || !entry.isFile()) throw new ConfigError('managed Skill workspace is missing a source file');\n files.push(name);\n }\n } else await walk(root);\n const instruction = new TextDecoder('utf8', { fatal: true }).decode(await readFile(join(root, 'SKILL.md')));\n const match = /^---\\s*\\n([\\s\\S]*?)\\n---(?:\\s*\\n|$)/.exec(instruction);\n const metadata: Record<string, string> = {};\n if (match) {\n const document = parseDocument(match[1]!);\n if (document.errors.length) throw new ConfigError('SKILL.md contains invalid YAML frontmatter');\n let value: unknown;\n try { value = document.toJS({ maxAliasCount: 0 }) ?? {}; } catch { throw new ConfigError('SKILL.md contains invalid YAML frontmatter'); }\n if (!value || typeof value !== 'object' || Array.isArray(value)) throw new ConfigError('SKILL.md frontmatter must be an object');\n for (const key of ['name', 'description', 'version']) {\n const item = (value as Record<string, unknown>)[key];\n if (item !== undefined && item !== null) { if (typeof item !== 'string') throw new ConfigError(`SKILL.md frontmatter ${key} must be a string`); metadata[key] = item; }\n }\n }\n return Object.freeze({ name: metadata.name || basename(root), description: metadata.description || '', version: metadata.version || '', instruction, root, files: Object.freeze(files), source: 'local' as const });\n}\n"],"mappings":";;;;;;;;;AAAA,SAAS,kBAAkB;AAC3B,SAAS,OAAO,OAAO,SAAS,UAAU,SAAS,QAAQ,IAAI,iBAAiB;AAChF,SAAS,UAAU,SAAS,MAAM,OAAO,eAAe;AACxD,SAAS,kBAA4C;AACrD,SAAS,qBAAqB;AAK9B,IAAM,YAAY,KAAK,OAAO;AAC9B,IAAM,WAAW;AACjB,IAAM,SAAS,oBAAI,IAA2B;AAmBvC,IAAM,SAAN,MAAa;AAAA,EAIlB,YAA6B,UAAyB,CAAC,GAAG;AAA7B;AAC3B,SAAK,YAAY,QAAQ,QAAQ,gBAAgB,QAAQ,IAAI,iCAAiC,4BAA4B;AAC1H,SAAK,SAAS,QAAQ,UAAU;AAAA,EAClC;AAAA,EAH6B;AAAA,EAHZ,OAAO,oBAAI,IAA4B;AAAA,EACvC;AAAA,EACA;AAAA,EAKjB,MAAM,MAAM,MAAgC;AAC1C,SAAK,OAAO,KAAK,sCAAsC,EAAE,KAAK,CAAC;AAC/D,QAAI;AACF,aAAO,QAAQ,IAAI;AACnB,UAAI,EAAE,MAAM,MAAM,IAAI,GAAG,YAAY,EAAG,OAAM,IAAI,YAAY,qCAAqC;AACnG,YAAM,UAAU,MAAM,QAAQ,MAAM,EAAE,eAAe,KAAK,CAAC;AAC3D,YAAM,cAAc,QAAQ,KAAK,CAAC,UAAU,MAAM,SAAS,UAAU,IAAI,CAAC,IAAI,IAAI,QAAQ,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,UAAU;AACxJ,YAAI,MAAM,eAAe,EAAG,OAAM,IAAI,YAAY,wDAAwD;AAC1G,eAAO,MAAM,YAAY,IAAI,CAAC,KAAK,MAAM,MAAM,IAAI,CAAC,IAAI,CAAC;AAAA,MAC3D,CAAC;AACD,YAAM,SAAkB,CAAC;AACzB,iBAAW,aAAa,aAAa;AACnC,aAAK,MAAM,QAAQ,SAAS,GAAG,SAAS,UAAU,EAAG,QAAO,KAAK,MAAM,cAAc,SAAS,CAAC;AAAA,MACjG;AACA,WAAK,OAAO,KAAK,wCAAwC,EAAE,MAAM,aAAa,OAAO,OAAO,CAAC;AAAG,aAAO;AAAA,IACzG,SAAS,OAAO;AAAE,WAAK,OAAO,KAAK,qCAAqC,EAAE,MAAM,YAAY,iBAAiB,QAAQ,MAAM,OAAO,QAAQ,CAAC;AAAG,YAAM;AAAA,IAAO;AAAA,EAC7J;AAAA,EACA,MAAM,QAAQ,MAAc,UAAgC,CAAC,GAAmB;AAC9E,QAAI,CAAC,KAAK,QAAQ,QAAS,OAAM,IAAI,2BAA2B,yCAAyC;AACzG,UAAM,EAAE,aAAa,SAAS,IAAI,MAAM,KAAK,QAAQ,QAAQ;AAC7D,cAAU,MAAM,MAAM;AAAG,cAAU,aAAa,cAAc;AAC9D,QAAI,QAAQ,YAAY,OAAW,WAAU,QAAQ,SAAS,SAAS;AACvE,UAAM,MAAM,KAAK,UAAU,CAAC,aAAa,MAAM,QAAQ,OAAO,CAAC;AAC/D,UAAM,SAAS,KAAK,KAAK,IAAI,GAAG;AAAG,QAAI,OAAQ,QAAO;AACtD,UAAM,WAAW,YAAY;AAC3B,WAAK,OAAO,KAAK,wCAAwC,EAAE,cAAc,aAAa,MAAM,SAAS,QAAQ,WAAW,SAAS,CAAC;AAClI,YAAM,WAAW,MAAM,SAAS,SAAS,MAAM,QAAQ,OAAO;AAAG,gBAAU,SAAS,SAAS,SAAS;AACtG,YAAM,QAAQ,MAAM,OAAO,MAAM,SAAS,OAAO;AACjD,YAAM,OAAO,WAAW,QAAQ;AAChC,iBAAW,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,EAAG,MAAK,OAAO,IAAI,EAAE,OAAO,IAAI,EAAE,OAAO,IAAI,EAAE,OAAO,IAAI;AACvJ,YAAM,SAAS,KAAK,OAAO,KAAK;AAChC,YAAM,SAAS,KAAK,KAAK,WAAW,aAAa,MAAM,SAAS,OAAO;AACvE,YAAM,WAAW,EAAE,QAAQ,aAAa,aAAa,MAAM,SAAS,SAAS,SAAS,OAAO;AAE7F,YAAM,SAAS,OAAO,IAAI,MAAM,KAAK,QAAQ,QAAQ,GAAG,MAAM,MAAM,MAAS,EAAE,KAAK,MAAM,YAAY,QAAQ,OAAO,QAAQ,CAAC;AAC9H,aAAO,IAAI,QAAQ,KAAK;AACxB,UAAI;AAAE,cAAM;AAAA,MAAO,UAAE;AAAU,YAAI,OAAO,IAAI,MAAM,MAAM,MAAO,QAAO,OAAO,MAAM;AAAA,MAAG;AACxF,YAAM,cAAc,CAAC,YAAY,GAAG,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,OAAO,CAAC,SAAS,SAAS,UAAU,EAAE,KAAK,CAAC;AAClG,YAAM,QAAQ,OAAO,OAAO,EAAE,GAAG,MAAM,cAAc,QAAQ,WAAW,GAAG,GAAG,UAAU,QAAQ,YAAqB,CAAC;AACtH,WAAK,OAAO,KAAK,0CAA0C,EAAE,cAAc,aAAa,MAAM,SAAS,SAAS,SAAS,OAAO,CAAC;AACjI,aAAO;AAAA,IACT,GAAG;AACH,SAAK,KAAK,IAAI,KAAK,OAAO;AAC1B,QAAI;AAAE,aAAO,MAAM;AAAA,IAAS,SAAS,OAAO;AAC1C,WAAK,KAAK,OAAO,GAAG;AAAG,WAAK,OAAO,KAAK,uCAAuC,EAAE,cAAc,aAAa,MAAM,YAAY,iBAAiB,QAAQ,MAAM,OAAO,QAAQ,CAAC;AAAG,YAAM;AAAA,IACxL;AAAA,EACF;AACF;AAEA,SAAS,UAAU,OAAe,OAAqB;AACrD,MAAI,CAAC,MAAM,KAAK,KAAK,WAAW,KAAK,KAAK,KAAK,UAAU,OAAO,UAAU,KAAM,OAAM,IAAI,YAAY,iBAAiB,KAAK,aAAa;AAC3I;AACA,SAAS,SAAS,MAAoB;AACpC,MAAI,CAAC,QAAQ,UAAU,KAAK,IAAI,KAAK,MAAM,WAAW,IAAI,KAAK,SAAS,MAAM,UAAU,IAAI,KAAK,KAAK,MAAM,GAAG,EAAE,KAAK,CAAC,SAAS,SAAS,OAAO,SAAS,IAAI,KAAK,SAAS,SAAU,OAAM,IAAI,YAAY,gDAAgD;AAC7P;AACA,eAAe,OAAO,MAAc,SAAmD;AACrF,MAAI,CAAC,QAAQ,UAAU,QAAQ,SAAS,UAAW,OAAM,IAAI,YAAY,6CAA6C;AACtH,MAAI;AACF,UAAM,MAAM,MAAM,IAAI,QAAiB,CAAC,QAAQ,WAAW,WAAW,OAAO,KAAK,OAAO,GAAG,EAAE,aAAa,MAAM,iBAAiB,KAAK,GAAG,CAAC,OAAO,UAAU,QAAQ,OAAO,KAAK,IAAI,OAAO,KAAK,CAAC,CAAC;AAClM,UAAM,QAAQ,oBAAI,IAAoB;AAAG,QAAI,QAAQ;AACrD,UAAM,IAAI,QAAc,CAAC,QAAQ,WAAW;AAC1C,UAAI,GAAG,SAAS,MAAM;AAAG,UAAI,GAAG,OAAO,MAAM;AAC7C,UAAI,GAAG,SAAS,CAAC,UAAiB;AAAE,cAAM,YAAY;AACpD,cAAI,MAAM,SAAS,SAAS,GAAG,EAAG;AAClC,mBAAS,MAAM,QAAQ;AACvB,cAAI,CAAC,MAAM,SAAS,WAAW,GAAG,IAAI,GAAG,EAAG,OAAM,IAAI,YAAY,qEAAqE;AACvI,gBAAM,OAAO,MAAM,SAAS,MAAM,KAAK,SAAS,CAAC;AAAG,mBAAS,IAAI;AACjE,cAAI,MAAM,IAAI,IAAI,EAAG,OAAM,IAAI,YAAY,iDAAiD;AAC5F,eAAM,MAAM,2BAA2B,KAAM,WAAY,MAAQ,OAAM,IAAI,YAAY,mDAAmD;AAC1I,cAAI,MAAM,mBAAmB,YAAY,MAAO,OAAM,IAAI,YAAY,6CAA6C;AACnH,gBAAM,SAAS,MAAM,IAAI,QAA+B,CAACA,UAASC,YAAW,IAAI,eAAe,OAAO,CAAC,OAAOC,YAAW,QAAQD,QAAO,KAAK,IAAID,SAAQE,OAAM,CAAC,CAAC;AAClK,gBAAM,SAAmB,CAAC;AAC1B,2BAAiB,SAAS,QAAQ;AAAE,kBAAM,OAAO,OAAO,KAAK,KAAK;AAAG,qBAAS,KAAK;AAAQ,gBAAI,QAAQ,UAAW,OAAM,IAAI,YAAY,6CAA6C;AAAG,mBAAO,KAAK,IAAI;AAAA,UAAG;AAC3M,gBAAM,IAAI,MAAM,OAAO,OAAO,MAAM,CAAC;AAAA,QACvC,GAAG,EAAE,KAAK,MAAM,IAAI,UAAU,GAAG,CAAC,UAAU;AAAE,cAAI,MAAM;AAAG,iBAAO,KAAK;AAAA,QAAG,CAAC;AAAA,MAAG,CAAC;AAC/E,UAAI,UAAU;AAAA,IAChB,CAAC;AACD,QAAI,CAAC,MAAM,IAAI,UAAU,EAAG,OAAM,IAAI,YAAY,0CAA0C,IAAI,WAAW;AAC3G,eAAW,QAAQ,MAAM,KAAK,GAAG;AAC/B,UAAI,SAAS,MAAM,QAAQ,IAAI;AAC/B,aAAO,WAAW,KAAK;AAAE,YAAI,MAAM,IAAI,MAAM,EAAG,OAAM,IAAI,YAAY,kDAAkD;AAAG,iBAAS,MAAM,QAAQ,MAAM;AAAA,MAAG;AAAA,IAC7J;AACA,WAAO;AAAA,EACT,SAAS,OAAO;AAAE,QAAI,iBAAiB,YAAa,OAAM;AAAO,UAAM,IAAI,YAAY,kDAAkD;AAAA,EAAG;AAC9I;AAEA,eAAe,YAAY,QAAgB,OAA4B,UAAiD;AACtH,MAAI;AACF,UAAM,OAAO,MAAM,MAAM,MAAM;AAC/B,QAAI,KAAK,YAAY,KAAK,CAAC,KAAK,eAAe,GAAG;AAChD,YAAM,WAAoB,KAAK,MAAM,MAAM,SAAS,KAAK,QAAQ,QAAQ,GAAG,MAAM,CAAC;AACnF,UAAI,KAAK,UAAU,QAAQ,MAAM,KAAK,UAAU,QAAQ,EAAG;AAAA,IAC7D;AAAA,EACF,SAAS,OAAO;AAAE,QAAI,EAAE,iBAAiB,gBAAiB,MAAgC,SAAS,SAAU,OAAM;AAAA,EAAO;AAC1H,QAAM,MAAM,QAAQ,MAAM,GAAG,EAAE,WAAW,KAAK,CAAC;AAChD,QAAM,YAAY,MAAM,QAAQ,KAAK,QAAQ,MAAM,GAAG,SAAS,CAAC;AAChE,MAAI;AACF,eAAW,CAAC,MAAM,OAAO,KAAK,OAAO;AAAE,YAAM,cAAc,KAAK,WAAW,IAAI;AAAG,YAAM,MAAM,QAAQ,WAAW,GAAG,EAAE,WAAW,KAAK,CAAC;AAAG,YAAM,UAAU,aAAa,OAAO;AAAA,IAAG;AACjL,UAAM,UAAU,KAAK,WAAW,QAAQ,GAAG,KAAK,UAAU,QAAQ,CAAC;AACnE,UAAM,cAAc,SAAS;AAC7B,UAAM,GAAG,QAAQ,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACjD,UAAM,OAAO,WAAW,MAAM;AAAA,EAChC,UAAE;AAAU,UAAM,GAAG,WAAW,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,EAAG;AACrE;AAEA,eAAe,cAAc,MAAc,aAAiD;AAC1F,QAAM,QAAkB,CAAC;AAAG,MAAI,QAAQ;AACxC,iBAAe,KAAK,WAAmB,SAAS,IAAmB;AACjE,eAAW,UAAU,MAAM,QAAQ,WAAW,EAAE,eAAe,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC,GAAG;AACpH,UAAI,MAAM,eAAe,EAAG,OAAM,IAAI,YAAY,mDAAmD;AACrG,YAAM,OAAO,SAAS,MAAM;AAC5B,UAAI,MAAM,YAAY,EAAG,OAAM,KAAK,KAAK,WAAW,MAAM,IAAI,GAAG,GAAG,IAAI,GAAG;AAAA,eAClE,MAAM,OAAO,KAAK,MAAM,SAAS,UAAU;AAAE,kBAAU,MAAM,MAAM,KAAK,WAAW,MAAM,IAAI,CAAC,GAAG;AAAM,YAAI,QAAQ,UAAW,OAAM,IAAI,YAAY,6CAA6C;AAAG,cAAM,KAAK,IAAI;AAAA,MAAG;AAAA,IACjO;AAAA,EACF;AACA,MAAI,aAAa;AAEf,eAAW,QAAQ,aAAa;AAC9B,YAAM,QAAQ,MAAM,MAAM,KAAK,MAAM,IAAI,CAAC;AAC1C,UAAI,MAAM,eAAe,KAAK,CAAC,MAAM,OAAO,EAAG,OAAM,IAAI,YAAY,kDAAkD;AACvH,YAAM,KAAK,IAAI;AAAA,IACjB;AAAA,EACF,MAAO,OAAM,KAAK,IAAI;AACtB,QAAM,cAAc,IAAI,YAAY,QAAQ,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,MAAM,SAAS,KAAK,MAAM,UAAU,CAAC,CAAC;AAC1G,QAAM,QAAQ,sCAAsC,KAAK,WAAW;AACpE,QAAM,WAAmC,CAAC;AAC1C,MAAI,OAAO;AACT,UAAM,WAAW,cAAc,MAAM,CAAC,CAAE;AACxC,QAAI,SAAS,OAAO,OAAQ,OAAM,IAAI,YAAY,4CAA4C;AAC9F,QAAI;AACJ,QAAI;AAAE,cAAQ,SAAS,KAAK,EAAE,eAAe,EAAE,CAAC,KAAK,CAAC;AAAA,IAAG,QAAQ;AAAE,YAAM,IAAI,YAAY,4CAA4C;AAAA,IAAG;AACxI,QAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,OAAM,IAAI,YAAY,wCAAwC;AAC/H,eAAW,OAAO,CAAC,QAAQ,eAAe,SAAS,GAAG;AACpD,YAAM,OAAQ,MAAkC,GAAG;AACnD,UAAI,SAAS,UAAa,SAAS,MAAM;AAAE,YAAI,OAAO,SAAS,SAAU,OAAM,IAAI,YAAY,wBAAwB,GAAG,mBAAmB;AAAG,iBAAS,GAAG,IAAI;AAAA,MAAM;AAAA,IACxK;AAAA,EACF;AACA,SAAO,OAAO,OAAO,EAAE,MAAM,SAAS,QAAQ,SAAS,IAAI,GAAG,aAAa,SAAS,eAAe,IAAI,SAAS,SAAS,WAAW,IAAI,aAAa,MAAM,OAAO,OAAO,OAAO,KAAK,GAAG,QAAQ,QAAiB,CAAC;AACpN;","names":["resolve","reject","stream"]}
1
+ {"version":3,"sources":["../src/skill/loader.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\nimport { lstat, mkdir, mkdtemp, readFile, readdir, rename, rm, writeFile } from 'node:fs/promises';\nimport { basename, dirname, join, posix, resolve } from 'node:path';\nimport { fromBuffer, type Entry, type ZipFile } from 'yauzl';\nimport { parseDocument } from 'yaml';\nimport type { SkillArtifact } from '../controlplane/client';\nimport { ConfigError, ResourceNotConfiguredError } from '../errors';\nimport { nullLogger, type Logger } from '../logging';\n\nconst MAX_BYTES = 10 * 1024 * 1024;\nconst METADATA = '.agentcore-skill.json';\nconst writes = new Map<string, Promise<void>>();\nexport interface Skill {\n readonly name: string;\n readonly description: string;\n readonly version: string;\n readonly instruction: string;\n readonly root: string;\n readonly files: readonly string[];\n readonly source: 'local' | 'agentcore';\n readonly digest?: string;\n readonly workspaceId?: string;\n}\nexport interface SkillProvider { getSkill(name: string, version?: string): Promise<SkillArtifact>; }\nexport interface SkillsOptions {\n workspaceDir?: string;\n runtime?: () => Promise<{ workspaceId: string; provider: SkillProvider }>;\n logger?: Logger;\n}\n\nexport class Skills {\n private readonly pins = new Map<string, Promise<Skill>>();\n private readonly workspace: string;\n private readonly logger: Logger;\n constructor(private readonly options: SkillsOptions = {}) {\n this.workspace = resolve(options.workspaceDir ?? process.env.AGENTCORE_SKILL_WORKSPACE_DIR ?? '.skills/.agentcore-managed');\n this.logger = options.logger ?? nullLogger;\n }\n async local(root: string): Promise<Skill[]> {\n this.logger.info('agentcore.skill.local.load.started', { root });\n try {\n root = resolve(root);\n if (!(await lstat(root)).isDirectory()) throw new ConfigError('local Skill root is not a directory');\n const entries = await readdir(root, { withFileTypes: true });\n const directories = entries.some((entry) => entry.name === 'SKILL.md') ? [root] : entries.sort((a, b) => a.name.localeCompare(b.name)).flatMap((entry) => {\n if (entry.isSymbolicLink()) throw new ConfigError('local Skill root must not contain symbolic-link Skills');\n return entry.isDirectory() ? [join(root, entry.name)] : [];\n });\n const result: Skill[] = [];\n for (const directory of directories) {\n if ((await readdir(directory)).includes('SKILL.md')) result.push(await loadDirectory(directory));\n }\n this.logger.info('agentcore.skill.local.load.succeeded', { root, skill_count: result.length }); return result;\n } catch (error) { this.logger.warn('agentcore.skill.local.load.failed', { root, error_type: error instanceof Error ? error.name : 'Error' }); throw error; }\n }\n async managed(name: string, options: { version?: string } = {}): Promise<Skill> {\n if (!this.options.runtime) throw new ResourceNotConfiguredError('managed Skill runtime is not configured');\n const { workspaceId, provider } = await this.options.runtime();\n component(name, 'name'); component(workspaceId, 'workspace ID');\n if (options.version !== undefined) component(options.version, 'version');\n const key = JSON.stringify([workspaceId, name, options.version]);\n const cached = this.pins.get(key); if (cached) return cached;\n const pending = (async () => {\n this.logger.info('agentcore.skill.managed.load.started', { workspace_id: workspaceId, name, version: options.version ?? 'latest' });\n const artifact = await provider.getSkill(name, options.version); component(artifact.version, 'version');\n const files = await unpack(name, artifact.archive);\n const hash = createHash('sha256');\n for (const [path, data] of [...files.entries()].sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)) hash.update(path).update('\\0').update(data).update('\\0');\n const digest = hash.digest('hex');\n const target = join(this.workspace, workspaceId, name, artifact.version);\n const metadata = { source: 'agentcore', workspaceId, name, version: artifact.version, digest };\n // Serialize writes to the same named version across Core instances in this process.\n const write = (writes.get(target) ?? Promise.resolve()).catch(() => undefined).then(() => materialize(target, files, metadata));\n writes.set(target, write);\n try { await write; } finally { if (writes.get(target) === write) writes.delete(target); }\n const sourceFiles = ['SKILL.md', ...[...files.keys()].filter((path) => path !== 'SKILL.md').sort()];\n const skill = Object.freeze({ ...await loadDirectory(target, sourceFiles), ...metadata, source: 'agentcore' as const });\n this.logger.info('agentcore.skill.managed.load.succeeded', { workspace_id: workspaceId, name, version: artifact.version, digest });\n return skill;\n })();\n this.pins.set(key, pending);\n try { return await pending; } catch (error) {\n this.pins.delete(key); this.logger.warn('agentcore.skill.managed.load.failed', { workspace_id: workspaceId, name, error_type: error instanceof Error ? error.name : 'Error' }); throw error;\n }\n }\n}\n\nfunction component(value: string, label: string): void {\n if (!value.trim() || /[\\\\/:\\0]/.test(value) || value === '.' || value === '..') throw new ConfigError(`managed Skill ${label} is invalid`);\n}\nfunction safePath(path: string): void {\n if (!path || /[\\\\:\\0]/.test(path) || posix.isAbsolute(path) || path !== posix.normalize(path) || path.split('/').some((part) => part === '.' || part === '..') || path === METADATA) throw new ConfigError('managed Skill contains an unsafe resource path');\n}\nasync function unpack(name: string, archive: Uint8Array): Promise<Map<string, Buffer>> {\n if (!archive.length || archive.length > MAX_BYTES) throw new ConfigError('Skill package exceeds the 10 MiB size limit');\n try {\n const zip = await new Promise<ZipFile>((accept, reject) => fromBuffer(Buffer.from(archive), { lazyEntries: true, strictFileNames: true }, (error, value) => error ? reject(error) : accept(value)));\n const files = new Map<string, Buffer>(); let total = 0;\n await new Promise<void>((accept, reject) => {\n zip.on('error', reject); zip.on('end', accept);\n zip.on('entry', (entry: Entry) => { void (async () => {\n if (entry.fileName.endsWith('/')) return;\n safePath(entry.fileName);\n if (!entry.fileName.startsWith(`${name}/`)) throw new ConfigError('managed Skill package must use the Skill name as its root directory');\n const path = entry.fileName.slice(name.length + 1); safePath(path);\n if (files.has(path)) throw new ConfigError('managed Skill package contains a duplicate path');\n if (((entry.externalFileAttributes >>> 16) & 0xf000) === 0xa000) throw new ConfigError('Skill directories must not contain symbolic links');\n if (entry.uncompressedSize > MAX_BYTES - total) throw new ConfigError('Skill content exceeds the 10 MiB size limit');\n const stream = await new Promise<NodeJS.ReadableStream>((resolve, reject) => zip.openReadStream(entry, (error, stream) => error ? reject(error) : resolve(stream)));\n const chunks: Buffer[] = [];\n for await (const chunk of stream) { const data = Buffer.from(chunk); total += data.length; if (total > MAX_BYTES) throw new ConfigError('Skill content exceeds the 10 MiB size limit'); chunks.push(data); }\n files.set(path, Buffer.concat(chunks));\n })().then(() => zip.readEntry(), (error) => { zip.close(); reject(error); }); });\n zip.readEntry();\n });\n if (!files.has('SKILL.md')) throw new ConfigError(`managed Skill package does not contain ${name}/SKILL.md`);\n for (const path of files.keys()) {\n let parent = posix.dirname(path);\n while (parent !== '.') { if (files.has(parent)) throw new ConfigError('managed Skill contains a colliding resource path'); parent = posix.dirname(parent); }\n }\n return files;\n } catch (error) { if (error instanceof ConfigError) throw error; throw new ConfigError('managed Skill package is not a valid ZIP archive'); }\n}\n\nasync function materialize(target: string, files: Map<string, Buffer>, metadata: Record<string, string>): Promise<void> {\n try {\n const stat = await lstat(target);\n if (stat.isDirectory() && !stat.isSymbolicLink()) {\n const existing: unknown = JSON.parse(await readFile(join(target, METADATA), 'utf8'));\n if (JSON.stringify(existing) === JSON.stringify(metadata)) return;\n }\n } catch (error) { if (!(error instanceof SyntaxError) && (error as NodeJS.ErrnoException).code !== 'ENOENT') throw error; }\n await mkdir(dirname(target), { recursive: true });\n const temporary = await mkdtemp(join(dirname(target), '.skill-'));\n try {\n for (const [path, content] of files) { const destination = join(temporary, path); await mkdir(dirname(destination), { recursive: true }); await writeFile(destination, content); }\n await writeFile(join(temporary, METADATA), JSON.stringify(metadata));\n await loadDirectory(temporary); // Do not replace a working version with invalid SKILL.md.\n await rm(target, { recursive: true, force: true });\n await rename(temporary, target);\n } finally { await rm(temporary, { recursive: true, force: true }); }\n}\n\nasync function loadDirectory(root: string, sourceFiles?: readonly string[]): Promise<Skill> {\n const files: string[] = []; let total = 0;\n async function walk(directory: string, prefix = ''): Promise<void> {\n for (const entry of (await readdir(directory, { withFileTypes: true })).sort((a, b) => a.name.localeCompare(b.name))) {\n if (entry.isSymbolicLink()) throw new ConfigError('Skill directories must not contain symbolic links');\n const name = prefix + entry.name;\n if (entry.isDirectory()) await walk(join(directory, entry.name), `${name}/`);\n else if (entry.isFile() && entry.name !== METADATA) { total += (await lstat(join(directory, entry.name))).size; if (total > MAX_BYTES) throw new ConfigError('Skill content exceeds the 10 MiB size limit'); files.push(name); }\n }\n }\n if (sourceFiles) {\n // Managed packages track source files, not files generated by command execution.\n for (const name of sourceFiles) {\n const entry = await lstat(join(root, name));\n if (entry.isSymbolicLink() || !entry.isFile()) throw new ConfigError('managed Skill workspace is missing a source file');\n files.push(name);\n }\n } else await walk(root);\n const instruction = new TextDecoder('utf8', { fatal: true }).decode(await readFile(join(root, 'SKILL.md')));\n const match = /^---\\s*\\n([\\s\\S]*?)\\n---(?:\\s*\\n|$)/.exec(instruction);\n const metadata: Record<string, string> = {};\n if (match) {\n const document = parseDocument(match[1]!);\n if (document.errors.length) throw new ConfigError('SKILL.md contains invalid YAML frontmatter');\n let value: unknown;\n try { value = document.toJS({ maxAliasCount: 0 }) ?? {}; } catch { throw new ConfigError('SKILL.md contains invalid YAML frontmatter'); }\n if (!value || typeof value !== 'object' || Array.isArray(value)) throw new ConfigError('SKILL.md frontmatter must be an object');\n for (const key of ['name', 'description', 'version']) {\n const item = (value as Record<string, unknown>)[key];\n if (item !== undefined && item !== null) { if (typeof item !== 'string') throw new ConfigError(`SKILL.md frontmatter ${key} must be a string`); metadata[key] = item; }\n }\n }\n return Object.freeze({ name: metadata.name || basename(root), description: metadata.description || '', version: metadata.version || '', instruction, root, files: Object.freeze(files), source: 'local' as const });\n}\n"],"mappings":"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","names":["resolve","reject","stream"]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ConfigError
3
- } from "./chunk-MZ5UWGXS.js";
3
+ } from "./chunk-AEQ76QIO.js";
4
4
 
5
5
  // src/integrations/ai-sdk.ts
6
6
  import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
@@ -45,4 +45,4 @@ export {
45
45
  languageModel,
46
46
  tools
47
47
  };
48
- //# sourceMappingURL=chunk-MICRSJ6R.js.map
48
+ //# sourceMappingURL=chunk-EKLTJ65H.js.map
@@ -1,19 +1,17 @@
1
1
  import {
2
2
  AGENT_IDENTITY_DATA_PURPOSE
3
- } from "./chunk-IUCLCPVV.js";
3
+ } from "./chunk-76NTQYJB.js";
4
4
  import {
5
5
  ControllerClient
6
- } from "./chunk-UBP5CHU7.js";
7
- import {
8
- nullLogger
9
- } from "./chunk-NZL3VPJ2.js";
6
+ } from "./chunk-AX3NM2DK.js";
10
7
  import {
11
8
  AuthenticationError,
12
9
  ConfigError,
13
10
  CredentialExchangeError,
14
11
  WorkloadAccessTokenRejectedError,
15
- WorkloadIdentityNotConfiguredError
16
- } from "./chunk-MZ5UWGXS.js";
12
+ WorkloadIdentityNotConfiguredError,
13
+ nullLogger
14
+ } from "./chunk-AEQ76QIO.js";
17
15
 
18
16
  // src/auth/workload-access-token.ts
19
17
  var WorkloadAccessTokenProvider = class {
@@ -199,4 +197,4 @@ export {
199
197
  BoundCredential,
200
198
  BoundCredentials
201
199
  };
202
- //# sourceMappingURL=chunk-RBAY4MO2.js.map
200
+ //# sourceMappingURL=chunk-FG7K3EF7.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/auth/workload-access-token.ts","../src/auth/bound-credentials.ts"],"sourcesContent":["import { AuthenticationError, WorkloadIdentityNotConfiguredError } from '../errors';\nimport type { AgentSATokenSource } from './agent-sa-token';\nimport { ControllerClient, type ControllerOptions } from './controller';\n\nexport class WorkloadAccessTokenProvider {\n private readonly controller: ControllerClient;\n #token?: string;\n private pending?: Promise<string>;\n\n constructor(endpoint: string, source: AgentSATokenSource, options: ControllerOptions = {}) {\n this.controller = new ControllerClient(endpoint, source, options);\n }\n async get(): Promise<string> {\n if (this.#token !== undefined) return this.#token;\n if (this.pending) return this.pending;\n const request = this.exchange();\n this.pending = request;\n try { this.#token = await request; return this.#token; }\n finally { this.pending = undefined; }\n }\n async invalidate(token?: string): Promise<void> {\n // Serialize invalidation after an exchange, including an initially empty cache.\n if (this.pending) await this.pending.catch(() => undefined);\n if (token === undefined || token === this.#token) this.#token = undefined;\n }\n close(): void { this.controller.close(); this.#token = undefined; }\n\n private async exchange(): Promise<string> {\n const response = await this.controller.post('/api/v1/workload/token');\n if (response.status === 404) throw new WorkloadIdentityNotConfiguredError('the current Agent has no configured Workload Identity');\n if (response.status < 200 || response.status >= 300) throw new AuthenticationError(`Controller workload token request failed with HTTP ${response.status}`);\n const payload = response.payload;\n const token = payload && typeof payload === 'object' && 'workloadAccessToken' in payload ? payload.workloadAccessToken : undefined;\n if (typeof token !== 'string' || !token.trim()) throw new AuthenticationError('Controller returned an empty workload access token');\n return token.trim();\n }\n}\n","import { inspect } from 'node:util';\nimport Client, { GetResourceAPIKeyRequest } from '@alicloud/agentidentitydata20251127';\nimport { $OpenApiUtil } from '@alicloud/openapi-core';\nimport { RuntimeOptions } from '@darabonba/typescript';\nimport { ConfigError, CredentialExchangeError, WorkloadAccessTokenRejectedError } from '../errors';\nimport type { AgentCoreControlPlane, CredentialMetadata } from '../controlplane/client';\nimport { nullLogger, type Logger } from '../logging';\nimport type { AccessKeyCredential, CredentialProvider } from './access-key';\nimport { AGENT_IDENTITY_DATA_PURPOSE } from './resource-sts';\n\nconst GeneratedClient = typeof Client === 'function' ? Client : (Client as unknown as { default: typeof Client }).default;\nconst WAT_ERRORS = new Set(['WORKLOAD_ACCESS_TOKEN_EXPIRED', 'WORKLOAD_ACCESS_TOKEN_INVALID']);\ninterface CredentialRuntime {\n workspaceId: string;\n regionId: string;\n controlPlane: AgentCoreControlPlane;\n resourceSTS?: CredentialProvider;\n workloadAccessToken?: { get(): Promise<string>; invalidate(token: string): Promise<void> };\n}\n\nexport class BoundCredential {\n readonly providerName: string;\n #value: string;\n constructor(providerName: string, value: string, readonly metadata: CredentialMetadata) { this.providerName = providerName; this.#value = value; }\n get value(): string { return this.#value; }\n get credentialType(): string { return this.metadata.credentialType; }\n asHeaders(): Record<string, string> {\n if (this.credentialType !== 'mcpHeader') throw new ConfigError('Credential must have type mcpHeader to read headers');\n let data: unknown;\n try { data = JSON.parse(this.#value); } catch { throw new ConfigError('Invalid MCP Header credential payload'); }\n const entries = fields(data).headers;\n if (!Array.isArray(entries) || !entries.length) throw new ConfigError('MCP Header credential must contain a non-empty headers array');\n const headers: Record<string, string> = {};\n for (const entry of entries) {\n const { name, value } = fields(entry);\n if (typeof name !== 'string' || !/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(name)) throw new ConfigError('Invalid credential header name');\n if (typeof value !== 'string' || /[\\x00-\\x1f\\x7f]/.test(value)) throw new ConfigError('Invalid credential header value');\n const folded = name.toLowerCase();\n if (Object.hasOwn(headers, folded)) throw new ConfigError('Duplicate credential header name');\n Object.defineProperty(headers, folded, { value, enumerable: true, configurable: true, writable: true });\n }\n return headers;\n }\n [inspect.custom](): string { return `BoundCredential(providerName=${JSON.stringify(this.providerName)}, <redacted>)`; }\n toJSON(): string { return this[inspect.custom](); }\n}\n\n/** Resolve metadata by name, then fetch the secret from AgentIdentity. WAT/STS cache independently. */\nexport class BoundCredentials {\n constructor(private readonly runtime: () => Promise<CredentialRuntime>, private readonly logger: Logger = nullLogger) {}\n async get(credentialName: string): Promise<BoundCredential> {\n return this.resolve(credentialName);\n }\n /** @internal Bind only after validating the credential's MCP application scope. */\n async getForMCP(credentialName: string, serverId: string): Promise<BoundCredential> {\n return this.resolve(credentialName, serverId);\n }\n private async resolve(credentialName: string, serverId?: string): Promise<BoundCredential> {\n credentialName = credentialName.trim();\n if (!credentialName) throw new TypeError('credential name must not be empty');\n const { workspaceId, regionId, workloadAccessToken: wat, resourceSTS: sts, controlPlane } = await this.runtime();\n if (!wat || !sts) throw new CredentialExchangeError('AgentCore credential runtime is not configured');\n const metadata = await controlPlane.resolveCredential(credentialName);\n if (serverId !== undefined) {\n if (metadata.credentialType !== 'mcpHeader') throw new ConfigError('MCP credential must have type mcpHeader');\n if (!(metadata.resourceScope === 'ALL' || (metadata.resourceScope === 'SPECIFIED' &&\n metadata.resourceRefs.some((ref) => ref.resourceType === 'mcpServer' && ref.resourceId === serverId)))) {\n throw new ConfigError('MCP credential does not allow the selected MCP server');\n }\n }\n // Matches the control plane's CreateCredential provider naming contract.\n const providerName = `${workspaceId}-${credentialName}`;\n this.logger.info('agentcore.credential.resolve.started', { workspace_id: workspaceId, credential_name: credentialName });\n const credential = await sts.get(AGENT_IDENTITY_DATA_PURPOSE);\n let token = await wat.get(); let value: string;\n try { value = await this.getAPIKey(regionId, credential, providerName, token); }\n catch (error) {\n if (!(error instanceof WorkloadAccessTokenRejectedError)) throw error;\n this.logger.warn('agentcore.credential.resolve.wat_rejected', { workspace_id: workspaceId, credential_name: credentialName, retry: true });\n await wat.invalidate(token); token = await wat.get();\n value = await this.getAPIKey(regionId, credential, providerName, token);\n }\n this.logger.info('agentcore.credential.resolve.succeeded', { workspace_id: workspaceId, credential_name: credentialName });\n return new BoundCredential(providerName, value, metadata);\n }\n private async getAPIKey(regionId: string, credential: AccessKeyCredential, providerName: string, token: string): Promise<string> {\n const endpoint = `agentidentitydata.${regionId}.aliyuncs.com`;\n const client = new GeneratedClient(new $OpenApiUtil.Config({\n accessKeyId: credential.accessKeyId, accessKeySecret: credential.accessKeySecret, securityToken: credential.securityToken,\n regionId, endpoint, protocol: 'https',\n }));\n try {\n const response = await client.getResourceAPIKeyWithOptions(new GetResourceAPIKeyRequest({\n resourceCredentialProviderName: providerName, workloadAccessToken: token,\n }), new RuntimeOptions({ autoretry: false, connectTimeout: 10_000, readTimeout: 30_000 }));\n const value = response.body?.APIKey;\n if (typeof value !== 'string' || !value) throw new CredentialExchangeError('Agent Identity Data returned an empty or invalid API key');\n return value;\n } catch (error) {\n if (watRejection(error)) throw new WorkloadAccessTokenRejectedError('Agent Identity Data rejected the Workload Access Token');\n const details = fields(error); const data = fields(details.data);\n this.logger.warn('agentcore.credential.api.failed', { endpoint: `https://${endpoint}/`, provider_name: providerName,\n error_type: error instanceof Error ? error.name : 'Error', request_id: String(details.requestId ?? data.RequestId ?? data.requestId ?? '') });\n if (error instanceof CredentialExchangeError) throw error;\n // Generated SDK errors may contain a credential-bearing request; do not attach them.\n throw new CredentialExchangeError('Agent Identity Data API key request failed');\n }\n }\n}\nfunction fields(value: unknown): Record<string, unknown> { return value && typeof value === 'object' ? value as Record<string, unknown> : {}; }\nfunction watRejection(error: unknown): boolean {\n let current = fields(error);\n for (let depth = 0; depth < 3; depth++) {\n const data = fields(current.data);\n if ([current.code, data.Code, data.code].some((code) => typeof code === 'string' && WAT_ERRORS.has(code.toUpperCase()))) return true;\n if (!current.innerException) return false;\n current = fields(current.innerException);\n }\n return false;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/auth/workload-access-token.ts","../src/auth/bound-credentials.ts"],"sourcesContent":["import { AuthenticationError, WorkloadIdentityNotConfiguredError } from '../errors';\nimport type { AgentSATokenSource } from './agent-sa-token';\nimport { ControllerClient, type ControllerOptions } from './controller';\n\nexport class WorkloadAccessTokenProvider {\n private readonly controller: ControllerClient;\n #token?: string;\n private pending?: Promise<string>;\n\n constructor(endpoint: string, source: AgentSATokenSource, options: ControllerOptions = {}) {\n this.controller = new ControllerClient(endpoint, source, options);\n }\n async get(): Promise<string> {\n if (this.#token !== undefined) return this.#token;\n if (this.pending) return this.pending;\n const request = this.exchange();\n this.pending = request;\n try { this.#token = await request; return this.#token; }\n finally { this.pending = undefined; }\n }\n async invalidate(token?: string): Promise<void> {\n // Serialize invalidation after an exchange, including an initially empty cache.\n if (this.pending) await this.pending.catch(() => undefined);\n if (token === undefined || token === this.#token) this.#token = undefined;\n }\n close(): void { this.controller.close(); this.#token = undefined; }\n\n private async exchange(): Promise<string> {\n const response = await this.controller.post('/api/v1/workload/token');\n if (response.status === 404) throw new WorkloadIdentityNotConfiguredError('the current Agent has no configured Workload Identity');\n if (response.status < 200 || response.status >= 300) throw new AuthenticationError(`Controller workload token request failed with HTTP ${response.status}`);\n const payload = response.payload;\n const token = payload && typeof payload === 'object' && 'workloadAccessToken' in payload ? payload.workloadAccessToken : undefined;\n if (typeof token !== 'string' || !token.trim()) throw new AuthenticationError('Controller returned an empty workload access token');\n return token.trim();\n }\n}\n","import { inspect } from 'node:util';\nimport Client, { GetResourceAPIKeyRequest } from '@alicloud/agentidentitydata20251127';\nimport { $OpenApiUtil } from '@alicloud/openapi-core';\nimport { RuntimeOptions } from '@darabonba/typescript';\nimport { ConfigError, CredentialExchangeError, WorkloadAccessTokenRejectedError } from '../errors';\nimport type { AgentCoreControlPlane, CredentialMetadata } from '../controlplane/client';\nimport { nullLogger, type Logger } from '../logging';\nimport type { AccessKeyCredential, CredentialProvider } from './access-key';\nimport { AGENT_IDENTITY_DATA_PURPOSE } from './resource-sts';\n\nconst GeneratedClient = typeof Client === 'function' ? Client : (Client as unknown as { default: typeof Client }).default;\nconst WAT_ERRORS = new Set(['WORKLOAD_ACCESS_TOKEN_EXPIRED', 'WORKLOAD_ACCESS_TOKEN_INVALID']);\ninterface CredentialRuntime {\n workspaceId: string;\n regionId: string;\n controlPlane: AgentCoreControlPlane;\n resourceSTS?: CredentialProvider;\n workloadAccessToken?: { get(): Promise<string>; invalidate(token: string): Promise<void> };\n}\n\nexport class BoundCredential {\n readonly providerName: string;\n #value: string;\n constructor(providerName: string, value: string, readonly metadata: CredentialMetadata) { this.providerName = providerName; this.#value = value; }\n get value(): string { return this.#value; }\n get credentialType(): string { return this.metadata.credentialType; }\n asHeaders(): Record<string, string> {\n if (this.credentialType !== 'mcpHeader') throw new ConfigError('Credential must have type mcpHeader to read headers');\n let data: unknown;\n try { data = JSON.parse(this.#value); } catch { throw new ConfigError('Invalid MCP Header credential payload'); }\n const entries = fields(data).headers;\n if (!Array.isArray(entries) || !entries.length) throw new ConfigError('MCP Header credential must contain a non-empty headers array');\n const headers: Record<string, string> = {};\n for (const entry of entries) {\n const { name, value } = fields(entry);\n if (typeof name !== 'string' || !/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(name)) throw new ConfigError('Invalid credential header name');\n if (typeof value !== 'string' || /[\\x00-\\x1f\\x7f]/.test(value)) throw new ConfigError('Invalid credential header value');\n const folded = name.toLowerCase();\n if (Object.hasOwn(headers, folded)) throw new ConfigError('Duplicate credential header name');\n Object.defineProperty(headers, folded, { value, enumerable: true, configurable: true, writable: true });\n }\n return headers;\n }\n [inspect.custom](): string { return `BoundCredential(providerName=${JSON.stringify(this.providerName)}, <redacted>)`; }\n toJSON(): string { return this[inspect.custom](); }\n}\n\n/** Resolve metadata by name, then fetch the secret from AgentIdentity. WAT/STS cache independently. */\nexport class BoundCredentials {\n constructor(private readonly runtime: () => Promise<CredentialRuntime>, private readonly logger: Logger = nullLogger) {}\n async get(credentialName: string): Promise<BoundCredential> {\n return this.resolve(credentialName);\n }\n /** @internal Bind only after validating the credential's MCP application scope. */\n async getForMCP(credentialName: string, serverId: string): Promise<BoundCredential> {\n return this.resolve(credentialName, serverId);\n }\n private async resolve(credentialName: string, serverId?: string): Promise<BoundCredential> {\n credentialName = credentialName.trim();\n if (!credentialName) throw new TypeError('credential name must not be empty');\n const { workspaceId, regionId, workloadAccessToken: wat, resourceSTS: sts, controlPlane } = await this.runtime();\n if (!wat || !sts) throw new CredentialExchangeError('AgentCore credential runtime is not configured');\n const metadata = await controlPlane.resolveCredential(credentialName);\n if (serverId !== undefined) {\n if (metadata.credentialType !== 'mcpHeader') throw new ConfigError('MCP credential must have type mcpHeader');\n if (!(metadata.resourceScope === 'ALL' || (metadata.resourceScope === 'SPECIFIED' &&\n metadata.resourceRefs.some((ref) => ref.resourceType === 'mcpServer' && ref.resourceId === serverId)))) {\n throw new ConfigError('MCP credential does not allow the selected MCP server');\n }\n }\n // Matches the control plane's CreateCredential provider naming contract.\n const providerName = `${workspaceId}-${credentialName}`;\n this.logger.info('agentcore.credential.resolve.started', { workspace_id: workspaceId, credential_name: credentialName });\n const credential = await sts.get(AGENT_IDENTITY_DATA_PURPOSE);\n let token = await wat.get(); let value: string;\n try { value = await this.getAPIKey(regionId, credential, providerName, token); }\n catch (error) {\n if (!(error instanceof WorkloadAccessTokenRejectedError)) throw error;\n this.logger.warn('agentcore.credential.resolve.wat_rejected', { workspace_id: workspaceId, credential_name: credentialName, retry: true });\n await wat.invalidate(token); token = await wat.get();\n value = await this.getAPIKey(regionId, credential, providerName, token);\n }\n this.logger.info('agentcore.credential.resolve.succeeded', { workspace_id: workspaceId, credential_name: credentialName });\n return new BoundCredential(providerName, value, metadata);\n }\n private async getAPIKey(regionId: string, credential: AccessKeyCredential, providerName: string, token: string): Promise<string> {\n const endpoint = `agentidentitydata.${regionId}.aliyuncs.com`;\n const client = new GeneratedClient(new $OpenApiUtil.Config({\n accessKeyId: credential.accessKeyId, accessKeySecret: credential.accessKeySecret, securityToken: credential.securityToken,\n regionId, endpoint, protocol: 'https',\n }));\n try {\n const response = await client.getResourceAPIKeyWithOptions(new GetResourceAPIKeyRequest({\n resourceCredentialProviderName: providerName, workloadAccessToken: token,\n }), new RuntimeOptions({ autoretry: false, connectTimeout: 10_000, readTimeout: 30_000 }));\n const value = response.body?.APIKey;\n if (typeof value !== 'string' || !value) throw new CredentialExchangeError('Agent Identity Data returned an empty or invalid API key');\n return value;\n } catch (error) {\n if (watRejection(error)) throw new WorkloadAccessTokenRejectedError('Agent Identity Data rejected the Workload Access Token');\n const details = fields(error); const data = fields(details.data);\n this.logger.warn('agentcore.credential.api.failed', { endpoint: `https://${endpoint}/`, provider_name: providerName,\n error_type: error instanceof Error ? error.name : 'Error', request_id: String(details.requestId ?? data.RequestId ?? data.requestId ?? '') });\n if (error instanceof CredentialExchangeError) throw error;\n // Generated SDK errors may contain a credential-bearing request; do not attach them.\n throw new CredentialExchangeError('Agent Identity Data API key request failed');\n }\n }\n}\nfunction fields(value: unknown): Record<string, unknown> { return value && typeof value === 'object' ? value as Record<string, unknown> : {}; }\nfunction watRejection(error: unknown): boolean {\n let current = fields(error);\n for (let depth = 0; depth < 3; depth++) {\n const data = fields(current.data);\n if ([current.code, data.Code, data.code].some((code) => typeof code === 'string' && WAT_ERRORS.has(code.toUpperCase()))) return true;\n if (!current.innerException) return false;\n current = fields(current.innerException);\n }\n return false;\n}\n"],"mappings":"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","names":[]}
@@ -1,40 +1,38 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } async function _asyncNullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return await rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;
2
2
 
3
- var _chunkYZP55W7Scjs = require('./chunk-YZP55W7S.cjs');
3
+ var _chunkRJCDBVZ6cjs = require('./chunk-RJCDBVZ6.cjs');
4
4
 
5
5
 
6
- var _chunkRZNQGEGJcjs = require('./chunk-RZNQGEGJ.cjs');
6
+ var _chunk25KH5XKGcjs = require('./chunk-25KH5XKG.cjs');
7
7
 
8
8
 
9
9
 
10
- var _chunk5RKN46UUcjs = require('./chunk-5RKN46UU.cjs');
10
+ var _chunkNXMTTQQKcjs = require('./chunk-NXMTTQQK.cjs');
11
11
 
12
12
 
13
- var _chunkLE5P3SJWcjs = require('./chunk-LE5P3SJW.cjs');
14
13
 
15
14
 
16
15
 
17
16
 
18
17
 
19
-
20
- var _chunkJSP7ZROScjs = require('./chunk-JSP7ZROS.cjs');
18
+ var _chunkV4A6MJ42cjs = require('./chunk-V4A6MJ42.cjs');
21
19
 
22
20
  // src/controlplane/client.ts
23
21
  var _agentcore20260804 = require('@alicloud/agentcore20260804'); var models = _interopRequireWildcard(_agentcore20260804);
24
22
  var _openapicore = require('@alicloud/openapi-core');
25
23
  var _typescript = require('@darabonba/typescript');
26
24
  var GeneratedClient = typeof models.default === "function" ? models.default : models.default.default;
27
- function exact(items, field, name, label, ErrorType = _chunkJSP7ZROScjs.ResourceNotConfiguredError) {
25
+ function exact(items, field, name, label, ErrorType = _chunkV4A6MJ42cjs.ResourceNotConfiguredError) {
28
26
  const matches = items.filter((item) => item[field] === name);
29
27
  if (!matches.length) throw new ErrorType(`${label} ${JSON.stringify(name)} does not exist`);
30
- if (matches.length !== 1) throw new (0, _chunkJSP7ZROScjs.ConfigError)(`${label} ${JSON.stringify(name)} is not unique`);
28
+ if (matches.length !== 1) throw new (0, _chunkV4A6MJ42cjs.ConfigError)(`${label} ${JSON.stringify(name)} is not unique`);
31
29
  return matches[0];
32
30
  }
33
31
  function errorField(error, key) {
34
32
  return error && typeof error === "object" ? error[key] : void 0;
35
33
  }
36
34
  function responseBody(body) {
37
- if (body === void 0) throw new (0, _chunkJSP7ZROScjs.ConfigError)("AgentCore returned an empty control-plane response");
35
+ if (body === void 0) throw new (0, _chunkV4A6MJ42cjs.ConfigError)("AgentCore returned an empty control-plane response");
38
36
  return body;
39
37
  }
40
38
  function endpointFailure(error) {
@@ -45,17 +43,17 @@ function endpointFailure(error) {
45
43
  var AgentCoreControlPlane = (_class = class {
46
44
  constructor(options) {;_class.prototype.__init.call(this);
47
45
  this.options = options;
48
- this.workspaceId = _chunk5RKN46UUcjs.requiredString.call(void 0, options.workspaceId, "workspaceId");
49
- this.regionId = _chunk5RKN46UUcjs.requiredString.call(void 0, options.regionId, "regionId");
50
- if (!options.accessKeyCredential && !options.resourceSTSProvider) throw new (0, _chunkJSP7ZROScjs.ConfigError)("AgentCore control plane requires an AccessKey credential source");
46
+ this.workspaceId = _chunkNXMTTQQKcjs.requiredString.call(void 0, options.workspaceId, "workspaceId");
47
+ this.regionId = _chunkNXMTTQQKcjs.requiredString.call(void 0, options.regionId, "regionId");
48
+ if (!options.accessKeyCredential && !options.resourceSTSProvider) throw new (0, _chunkV4A6MJ42cjs.ConfigError)("AgentCore control plane requires an AccessKey credential source");
51
49
  if (options.endpoint !== void 0) {
52
50
  const value = options.endpoint.trim();
53
- const url = new URL(_chunk5RKN46UUcjs.httpUrl.call(void 0, value.includes("://") ? value : `https://${value}`, "AgentCore control endpoint"));
54
- if (url.pathname !== "/") throw new (0, _chunkJSP7ZROScjs.ConfigError)("AgentCore control endpoint must not contain a path");
51
+ const url = new URL(_chunkNXMTTQQKcjs.httpUrl.call(void 0, value.includes("://") ? value : `https://${value}`, "AgentCore control endpoint"));
52
+ if (url.pathname !== "/") throw new (0, _chunkV4A6MJ42cjs.ConfigError)("AgentCore control endpoint must not contain a path");
55
53
  this.endpoint = url.host;
56
54
  this.protocol = url.protocol.slice(0, -1);
57
55
  }
58
- this.logger = _nullishCoalesce(options.logger, () => ( _chunkLE5P3SJWcjs.nullLogger));
56
+ this.logger = _nullishCoalesce(options.logger, () => ( _chunkV4A6MJ42cjs.nullLogger));
59
57
  }
60
58
 
61
59
 
@@ -80,8 +78,8 @@ var AgentCoreControlPlane = (_class = class {
80
78
  connections.push(..._nullishCoalesce(body.items, () => ( [])));
81
79
  nextToken = body.nextToken;
82
80
  } while (nextToken);
83
- const connection = exact(connections, "name", connectionName, "model connection", _chunkJSP7ZROScjs.ModelConnectionNotFoundError);
84
- const connectionId = _chunk5RKN46UUcjs.requiredString.call(void 0, connection.connectionId, "connectionId");
81
+ const connection = exact(connections, "name", connectionName, "model connection", _chunkV4A6MJ42cjs.ModelConnectionNotFoundError);
82
+ const connectionId = _chunkNXMTTQQKcjs.requiredString.call(void 0, connection.connectionId, "connectionId");
85
83
  const available = [];
86
84
  do {
87
85
  const response = await this.invoke(client, "ListModels", () => client.listModelsWithOptions(
@@ -97,17 +95,17 @@ var AgentCoreControlPlane = (_class = class {
97
95
  let model;
98
96
  if (modelName !== void 0) model = exact(available, "modelName", modelName, "model");
99
97
  else {
100
- if (available.length !== 1) throw new (0, _chunkJSP7ZROScjs.ResourceNotConfiguredError)(`model connection ${JSON.stringify(connectionName)} requires an explicit model name`);
98
+ if (available.length !== 1) throw new (0, _chunkV4A6MJ42cjs.ResourceNotConfiguredError)(`model connection ${JSON.stringify(connectionName)} requires an explicit model name`);
101
99
  model = available[0];
102
100
  }
103
101
  const capabilities = Object.fromEntries(Object.entries(_nullishCoalesce(model.capabilities, () => ( {}))).filter((entry) => typeof entry[1] === "boolean"));
104
102
  const descriptor = Object.freeze({
105
103
  connectionId,
106
- connectionName: _chunk5RKN46UUcjs.requiredString.call(void 0, connection.name, "connection name"),
104
+ connectionName: _chunkNXMTTQQKcjs.requiredString.call(void 0, connection.name, "connection name"),
107
105
  protocol: _nullishCoalesce(connection.protocol, () => ( "")),
108
106
  providerType: _nullishCoalesce(connection.providerType, () => ( "")),
109
- modelId: _chunk5RKN46UUcjs.requiredString.call(void 0, model.modelId, "modelId"),
110
- modelName: _chunk5RKN46UUcjs.requiredString.call(void 0, model.modelName, "modelName"),
107
+ modelId: _chunkNXMTTQQKcjs.requiredString.call(void 0, model.modelId, "modelId"),
108
+ modelName: _chunkNXMTTQQKcjs.requiredString.call(void 0, model.modelName, "modelName"),
111
109
  contextSize: model.contextSize,
112
110
  maxTokens: model.maxTokens,
113
111
  capabilities: Object.freeze(capabilities)
@@ -130,10 +128,10 @@ var AgentCoreControlPlane = (_class = class {
130
128
  items.push(..._nullishCoalesce(body.items, () => ( [])));
131
129
  nextToken = body.nextToken;
132
130
  } while (nextToken);
133
- const item = exact(items, "name", name, "MCP server", _chunkJSP7ZROScjs.MCPServerNotFoundError);
131
+ const item = exact(items, "name", name, "MCP server", _chunkV4A6MJ42cjs.MCPServerNotFoundError);
134
132
  const descriptor = Object.freeze({
135
- mcpServerId: _chunk5RKN46UUcjs.requiredString.call(void 0, item.mcpServerId, "mcpServerId"),
136
- name: _chunk5RKN46UUcjs.requiredString.call(void 0, item.name, "MCP name"),
133
+ mcpServerId: _chunkNXMTTQQKcjs.requiredString.call(void 0, item.mcpServerId, "mcpServerId"),
134
+ name: _chunkNXMTTQQKcjs.requiredString.call(void 0, item.name, "MCP name"),
137
135
  protocol: _nullishCoalesce(item.protocol, () => ( "")),
138
136
  type: _nullishCoalesce(item.type, () => ( "")),
139
137
  status: _nullishCoalesce(item.status, () => ( ""))
@@ -157,7 +155,7 @@ var AgentCoreControlPlane = (_class = class {
157
155
  this.runtimeOptions()
158
156
  ));
159
157
  const downloadURL = responseBody(response.body).data;
160
- if (typeof downloadURL !== "string") throw new (0, _chunkJSP7ZROScjs.ConfigError)("AgentCore returned an invalid Skill download URL");
158
+ if (typeof downloadURL !== "string") throw new (0, _chunkV4A6MJ42cjs.ConfigError)("AgentCore returned an invalid Skill download URL");
161
159
  return { version: resolvedVersion, archive: await this.downloadSkill(downloadURL) };
162
160
  }
163
161
  close() {
@@ -188,11 +186,11 @@ var AgentCoreControlPlane = (_class = class {
188
186
  const item = exact(items, "name", name, "credential");
189
187
  const refs = _nullishCoalesce(item.resourceRefs, () => ( []));
190
188
  return {
191
- credentialId: _chunk5RKN46UUcjs.requiredString.call(void 0, item.credentialId, "credentialId"),
192
- name: _chunk5RKN46UUcjs.requiredString.call(void 0, item.name, "name"),
193
- credentialType: _chunk5RKN46UUcjs.requiredString.call(void 0, item.credentialType, "credentialType"),
189
+ credentialId: _chunkNXMTTQQKcjs.requiredString.call(void 0, item.credentialId, "credentialId"),
190
+ name: _chunkNXMTTQQKcjs.requiredString.call(void 0, item.name, "name"),
191
+ credentialType: _chunkNXMTTQQKcjs.requiredString.call(void 0, item.credentialType, "credentialType"),
194
192
  resourceScope: String(_nullishCoalesce(item.resourceScope, () => ( ""))),
195
- resourceRefs: refs.map((ref) => ({ resourceType: _chunk5RKN46UUcjs.requiredString.call(void 0, ref.resourceType, "resourceType"), resourceId: _chunk5RKN46UUcjs.requiredString.call(void 0, ref.resourceId, "resourceId") }))
193
+ resourceRefs: refs.map((ref) => ({ resourceType: _chunkNXMTTQQKcjs.requiredString.call(void 0, ref.resourceType, "resourceType"), resourceId: _chunkNXMTTQQKcjs.requiredString.call(void 0, ref.resourceId, "resourceId") }))
196
194
  };
197
195
  }
198
196
  runtimeOptions() {
@@ -200,7 +198,7 @@ var AgentCoreControlPlane = (_class = class {
200
198
  }
201
199
  async client() {
202
200
  this.lifetime.signal.throwIfAborted();
203
- const credential = await _asyncNullishCoalesce(this.options.accessKeyCredential, async () => ( await this.options.resourceSTSProvider.get(_chunkRZNQGEGJcjs.HIGH_CODE_SDK_PURPOSE)));
201
+ const credential = await _asyncNullishCoalesce(this.options.accessKeyCredential, async () => ( await this.options.resourceSTSProvider.get(_chunk25KH5XKGcjs.HIGH_CODE_SDK_PURPOSE)));
204
202
  return new GeneratedClient(new _openapicore.$OpenApiUtil.Config({
205
203
  accessKeyId: credential.accessKeyId,
206
204
  accessKeySecret: credential.accessKeySecret,
@@ -225,13 +223,13 @@ var AgentCoreControlPlane = (_class = class {
225
223
  code: String(_nullishCoalesce(errorField(cause, "code"), () => ( "-"))),
226
224
  requestId: String(_nullishCoalesce(_nullishCoalesce(_nullishCoalesce(errorField(cause, "requestId"), () => ( errorField(data, "RequestId"))), () => ( errorField(data, "requestId"))), () => ( "-")))
227
225
  });
228
- throw new (0, _chunkJSP7ZROScjs.InvocationError)("AgentCore control-plane request failed", { cause });
226
+ throw new (0, _chunkV4A6MJ42cjs.InvocationError)("AgentCore control-plane request failed", { cause });
229
227
  }
230
228
  };
231
229
  try {
232
230
  return await invoke();
233
231
  } catch (error) {
234
- if (!(error instanceof _chunkJSP7ZROScjs.InvocationError) || this.endpoint || client._endpoint !== `agentcore.${this.regionId}.aliyuncs.com` || !endpointFailure(error.cause)) throw error;
232
+ if (!(error instanceof _chunkV4A6MJ42cjs.InvocationError) || this.endpoint || client._endpoint !== `agentcore.${this.regionId}.aliyuncs.com` || !endpointFailure(error.cause)) throw error;
235
233
  const host = `agentcore-vpc.${this.regionId}.aliyuncs.com`;
236
234
  this.logger.warn("agentcore.control_plane.endpoint.fallback", { operation, fromHost: client._endpoint, toHost: host });
237
235
  client._endpoint = host;
@@ -245,9 +243,9 @@ var AgentCoreControlPlane = (_class = class {
245
243
  try {
246
244
  original = new URL(value);
247
245
  } catch (e) {
248
- throw new (0, _chunkJSP7ZROScjs.ConfigError)("AgentCore returned an invalid Skill download URL");
246
+ throw new (0, _chunkV4A6MJ42cjs.ConfigError)("AgentCore returned an invalid Skill download URL");
249
247
  }
250
- if (!["http:", "https:"].includes(original.protocol) || original.username || original.password) throw new (0, _chunkJSP7ZROScjs.ConfigError)("AgentCore returned an invalid Skill download URL");
248
+ if (!["http:", "https:"].includes(original.protocol) || original.username || original.password) throw new (0, _chunkV4A6MJ42cjs.ConfigError)("AgentCore returned an invalid Skill download URL");
251
249
  let candidate = original;
252
250
  for (; ; ) {
253
251
  this.lifetime.signal.throwIfAborted();
@@ -255,30 +253,30 @@ var AgentCoreControlPlane = (_class = class {
255
253
  try {
256
254
  const response = await fetch(candidate, { redirect: "manual", signal: AbortSignal.any([this.lifetime.signal, AbortSignal.timeout(3e4)]) });
257
255
  if (response.ok) {
258
- const archive = await _chunkYZP55W7Scjs.readBytes.call(void 0, response, 10 * 1024 * 1024, "Skill archive");
259
- if (!archive.length) throw new (0, _chunkJSP7ZROScjs.ConfigError)("Skill package is empty");
256
+ const archive = await _chunkRJCDBVZ6cjs.readBytes.call(void 0, response, 10 * 1024 * 1024, "Skill archive");
257
+ if (!archive.length) throw new (0, _chunkV4A6MJ42cjs.ConfigError)("Skill package is empty");
260
258
  return archive;
261
259
  }
262
260
  status = response.status;
263
261
  await _optionalChain([response, 'access', _ => _.body, 'optionalAccess', _2 => _2.cancel, 'call', _3 => _3()]);
264
262
  } catch (error) {
265
263
  this.lifetime.signal.throwIfAborted();
266
- if (error instanceof _chunkJSP7ZROScjs.ConfigError) throw error;
264
+ if (error instanceof _chunkV4A6MJ42cjs.ConfigError) throw error;
267
265
  }
268
266
  this.logger.warn("agentcore.control_plane.skill.download.failed", { host: candidate.host, path: candidate.pathname, status });
269
267
  const fallback = candidate === original && (status === void 0 || status >= 500 && status < 600) ? internalOSSURL(original) : void 0;
270
- if (!fallback) throw new (0, _chunkJSP7ZROScjs.InvocationError)(status ? `Skill package download failed with HTTP ${status}` : "Skill package download failed");
268
+ if (!fallback) throw new (0, _chunkV4A6MJ42cjs.InvocationError)(status ? `Skill package download failed with HTTP ${status}` : "Skill package download failed");
271
269
  this.logger.warn("agentcore.control_plane.skill.download.fallback", { fromHost: candidate.host, toHost: fallback.host });
272
270
  candidate = fallback;
273
271
  }
274
272
  }
275
273
  }, _class);
276
274
  function latestVersion(data) {
277
- if (!data) throw new (0, _chunkJSP7ZROScjs.ResourceNotConfiguredError)("AgentCore Skill does not exist");
275
+ if (!data) throw new (0, _chunkV4A6MJ42cjs.ResourceNotConfiguredError)("AgentCore Skill does not exist");
278
276
  for (const [label, value] of Object.entries(_nullishCoalesce(data.labels, () => ( {})))) if (label.toLowerCase() === "latest" && value) return value;
279
277
  const online = (_nullishCoalesce(data.versions, () => ( []))).filter((v) => _optionalChain([v, 'access', _4 => _4.status, 'optionalAccess', _5 => _5.toLowerCase, 'call', _6 => _6()]) === "online" && v.version);
280
278
  online.sort((a, b) => (_nullishCoalesce(b.updateTime, () => ( -1))) - (_nullishCoalesce(a.updateTime, () => ( -1))) || (_nullishCoalesce(b.version, () => ( ""))).localeCompare(_nullishCoalesce(a.version, () => ( ""))));
281
- if (!_optionalChain([online, 'access', _7 => _7[0], 'optionalAccess', _8 => _8.version])) throw new (0, _chunkJSP7ZROScjs.ResourceNotConfiguredError)("AgentCore Skill has no online version");
279
+ if (!_optionalChain([online, 'access', _7 => _7[0], 'optionalAccess', _8 => _8.version])) throw new (0, _chunkV4A6MJ42cjs.ResourceNotConfiguredError)("AgentCore Skill has no online version");
282
280
  return online[0].version;
283
281
  }
284
282
  function internalOSSURL(url) {
@@ -293,4 +291,4 @@ function internalOSSURL(url) {
293
291
 
294
292
 
295
293
  exports.AgentCoreControlPlane = AgentCoreControlPlane;
296
- //# sourceMappingURL=chunk-PKYET77D.cjs.map
294
+ //# sourceMappingURL=chunk-JK6KPDVW.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/agentcore-sdk-nodejs/agentcore-sdk-nodejs/dist/chunk-JK6KPDVW.cjs","../src/controlplane/client.ts"],"names":[],"mappings":"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","file":"/home/runner/work/agentcore-sdk-nodejs/agentcore-sdk-nodejs/dist/chunk-JK6KPDVW.cjs","sourcesContent":[null,"import Client, * as models from '@alicloud/agentcore20260804';\nimport { $OpenApiUtil } from '@alicloud/openapi-core';\nimport { RuntimeOptions } from '@darabonba/typescript';\nimport { AccessKeyCredential, type CredentialProvider } from '../auth/access-key';\nimport { HIGH_CODE_SDK_PURPOSE } from '../auth/resource-sts';\nimport { ConfigError, InvocationError, MCPServerNotFoundError, ModelConnectionNotFoundError, ResourceNotConfiguredError } from '../errors';\nimport { readBytes } from '../http';\nimport { nullLogger, type Logger } from '../logging';\nimport { httpUrl, requiredString } from '../runtime/config';\n\n// The generated package is CJS: native ESM sees module.exports as the default.\nconst GeneratedClient = typeof Client === 'function' ? Client : (Client as unknown as { default: typeof Client }).default;\n\nexport interface ModelDescriptor {\n readonly connectionId: string;\n readonly connectionName: string;\n readonly protocol: string;\n readonly providerType: string;\n readonly modelId: string;\n readonly modelName: string;\n readonly contextSize?: number;\n readonly maxTokens?: number;\n readonly capabilities: Readonly<Record<string, boolean>>;\n}\nexport interface MCPDescriptor {\n readonly mcpServerId: string;\n readonly name: string;\n readonly protocol: string;\n readonly type: string;\n readonly status: string;\n}\nexport interface SkillArtifact { version: string; archive: Uint8Array; }\nexport interface CredentialMetadata {\n readonly credentialId: string;\n readonly name: string;\n readonly credentialType: string;\n readonly resourceScope: string;\n readonly resourceRefs: ReadonlyArray<{ resourceType: string; resourceId: string }>;\n}\nexport interface ControlPlaneOptions {\n workspaceId: string;\n regionId: string;\n accessKeyCredential?: AccessKeyCredential;\n resourceSTSProvider?: CredentialProvider;\n endpoint?: string;\n logger?: Logger;\n}\n\nfunction exact<T>(items: T[], field: keyof T, name: string, label: string, ErrorType: typeof ResourceNotConfiguredError = ResourceNotConfiguredError): T {\n const matches = items.filter((item) => item[field] === name);\n if (!matches.length) throw new ErrorType(`${label} ${JSON.stringify(name)} does not exist`);\n if (matches.length !== 1) throw new ConfigError(`${label} ${JSON.stringify(name)} is not unique`);\n return matches[0]!;\n}\n\nfunction errorField(error: unknown, key: string): unknown {\n return error && typeof error === 'object' ? (error as Record<string, unknown>)[key] : undefined;\n}\nfunction responseBody<T>(body: T | undefined): T {\n if (body === undefined) throw new ConfigError('AgentCore returned an empty control-plane response');\n return body;\n}\nfunction endpointFailure(error: unknown): boolean {\n const status = errorField(error, 'statusCode');\n const code = errorField(error, 'code');\n return (typeof status === 'number' && status >= 500 && status < 600) ||\n ['ECONNREFUSED', 'ECONNRESET', 'ENOTFOUND', 'EAI_AGAIN', 'ETIMEDOUT', 'ESOCKETTIMEDOUT'].includes(String(code)) ||\n errorField(error, 'name') === 'TimeoutError';\n}\n\nexport class AgentCoreControlPlane {\n readonly workspaceId: string;\n readonly regionId: string;\n private readonly endpoint?: string;\n private readonly protocol?: string;\n private discoveredEndpoint?: string;\n private readonly logger: Logger;\n private readonly lifetime = new AbortController();\n\n constructor(private readonly options: ControlPlaneOptions) {\n this.workspaceId = requiredString(options.workspaceId, 'workspaceId');\n this.regionId = requiredString(options.regionId, 'regionId');\n if (!options.accessKeyCredential && !options.resourceSTSProvider) throw new ConfigError('AgentCore control plane requires an AccessKey credential source');\n if (options.endpoint !== undefined) {\n const value = options.endpoint.trim();\n const url = new URL(httpUrl(value.includes('://') ? value : `https://${value}`, 'AgentCore control endpoint'));\n if (url.pathname !== '/') throw new ConfigError('AgentCore control endpoint must not contain a path');\n this.endpoint = url.host; this.protocol = url.protocol.slice(0, -1);\n }\n this.logger = options.logger ?? nullLogger;\n }\n\n async resolveModel(connectionName: string, modelName?: string): Promise<ModelDescriptor> {\n const client = await this.client();\n const connections: models.ListModelConnectionsResponseBodyItems[] = [];\n let nextToken: string | undefined;\n do {\n const response = await this.invoke(client, 'ListModelConnections', () => client.listModelConnectionsWithOptions(this.workspaceId,\n new models.ListModelConnectionsRequest({ name: connectionName, searchType: 'accurate', maxResults: 100, nextToken }), {}, this.runtimeOptions()));\n const body = responseBody(response.body);\n connections.push(...(body.items ?? [])); nextToken = body.nextToken;\n } while (nextToken);\n const connection = exact(connections, 'name', connectionName, 'model connection', ModelConnectionNotFoundError);\n const connectionId = requiredString(connection.connectionId, 'connectionId');\n const available: models.ListModelsResponseBodyItems[] = [];\n do {\n const response = await this.invoke(client, 'ListModels', () => client.listModelsWithOptions(this.workspaceId,\n new models.ListModelsRequest({ connectionId, modelName, maxResults: 100, nextToken }), {}, this.runtimeOptions()));\n const body = responseBody(response.body);\n available.push(...(body.items ?? [])); nextToken = body.nextToken;\n } while (nextToken);\n let model: models.ListModelsResponseBodyItems;\n if (modelName !== undefined) model = exact(available, 'modelName', modelName, 'model');\n else {\n if (available.length !== 1) throw new ResourceNotConfiguredError(`model connection ${JSON.stringify(connectionName)} requires an explicit model name`);\n model = available[0]!;\n }\n const capabilities = Object.fromEntries(Object.entries(model.capabilities ?? {}).filter((entry): entry is [string, boolean] => typeof entry[1] === 'boolean'));\n const descriptor = Object.freeze({ connectionId, connectionName: requiredString(connection.name, 'connection name'),\n protocol: connection.protocol ?? '', providerType: connection.providerType ?? '',\n modelId: requiredString(model.modelId, 'modelId'), modelName: requiredString(model.modelName, 'modelName'),\n contextSize: model.contextSize, maxTokens: model.maxTokens, capabilities: Object.freeze(capabilities),\n });\n this.logger.info('agentcore.control_plane.model.resolve.succeeded', { connectionName, connectionId, modelName: descriptor.modelName });\n return descriptor;\n }\n\n async resolveMCP(name: string): Promise<MCPDescriptor> {\n const client = await this.client();\n const items: models.ListMcpsResponseBodyItems[] = [];\n let nextToken: string | undefined;\n do {\n const response = await this.invoke(client, 'ListMcps', () => client.listMcpsWithOptions(this.workspaceId,\n new models.ListMcpsRequest({ name, searchType: 'accurate', maxResults: 100, nextToken }), {}, this.runtimeOptions()));\n const body = responseBody(response.body);\n items.push(...(body.items ?? [])); nextToken = body.nextToken;\n } while (nextToken);\n const item = exact(items, 'name', name, 'MCP server', MCPServerNotFoundError);\n const descriptor = Object.freeze({ mcpServerId: requiredString(item.mcpServerId, 'mcpServerId'),\n name: requiredString(item.name, 'MCP name'), protocol: item.protocol ?? '', type: item.type ?? '', status: item.status ?? '',\n });\n this.logger.info('agentcore.control_plane.mcp.resolve.succeeded', { name, mcpServerId: descriptor.mcpServerId, protocol: descriptor.protocol });\n return descriptor;\n }\n\n async getSkill(name: string, version?: string): Promise<SkillArtifact> {\n const client = await this.client();\n if (version === undefined) {\n const detail = await this.invoke(client, 'GetSkillDetail', () => client.getSkillDetailWithOptions(this.workspaceId, name, new models.GetSkillDetailRequest({}), {}, this.runtimeOptions()));\n version = latestVersion(responseBody(detail.body).data);\n }\n const resolvedVersion = version;\n const response = await this.invoke(client, 'DownloadSkillVersionViaOss', () => client.downloadSkillVersionViaOssWithOptions(this.workspaceId, name, resolvedVersion,\n new models.DownloadSkillVersionViaOssRequest({}), {}, this.runtimeOptions()));\n const downloadURL = responseBody(response.body).data;\n if (typeof downloadURL !== 'string') throw new ConfigError('AgentCore returned an invalid Skill download URL');\n return { version: resolvedVersion, archive: await this.downloadSkill(downloadURL) };\n }\n\n close(): void { this.lifetime.abort(); }\n\n async resolveCredential(name: string): Promise<CredentialMetadata> {\n const client = await this.client();\n const params = new $OpenApiUtil.Params({ action: 'ListCredentials', version: '2026-08-04', protocol: 'HTTPS',\n pathname: `/workspaces/${encodeURIComponent(this.workspaceId)}/credentials`, method: 'GET', authType: 'AK',\n style: 'ROA', reqBodyType: 'json', bodyType: 'json' });\n const items: Record<string, unknown>[] = [];\n let nextToken: string | undefined;\n do {\n const request = new $OpenApiUtil.OpenApiRequest({ query: { name, maxResults: '100', ...(nextToken ? { nextToken } : {}) } });\n const response = await this.invoke(client, 'ListCredentials', () => client.callApi(params, request, this.runtimeOptions()));\n const body = responseBody(response.body);\n items.push(...(body.items ?? [])); nextToken = body.nextToken;\n } while (nextToken);\n const item = exact(items, 'name', name, 'credential');\n const refs = (item.resourceRefs ?? []) as Array<Record<string, unknown>>;\n return {\n credentialId: requiredString(item.credentialId, 'credentialId'), name: requiredString(item.name, 'name'),\n credentialType: requiredString(item.credentialType, 'credentialType'), resourceScope: String(item.resourceScope ?? ''),\n resourceRefs: refs.map((ref) => ({ resourceType: requiredString(ref.resourceType, 'resourceType'), resourceId: requiredString(ref.resourceId, 'resourceId') })),\n };\n }\n\n private runtimeOptions(): RuntimeOptions { return new RuntimeOptions({ autoretry: false, connectTimeout: 10_000, readTimeout: 30_000 }); }\n private async client(): Promise<Client> {\n this.lifetime.signal.throwIfAborted();\n const credential = this.options.accessKeyCredential ?? await this.options.resourceSTSProvider!.get(HIGH_CODE_SDK_PURPOSE);\n return new GeneratedClient(new $OpenApiUtil.Config({\n accessKeyId: credential.accessKeyId, accessKeySecret: credential.accessKeySecret, securityToken: credential.securityToken,\n regionId: this.regionId, endpoint: this.endpoint ?? this.discoveredEndpoint, protocol: this.protocol,\n }));\n }\n private async invoke<T>(client: Client, operation: string, call: () => Promise<T>): Promise<T> {\n this.lifetime.signal.throwIfAborted();\n const invoke = async () => {\n this.logger.debug('agentcore.control_plane.request.started', { operation, host: client._endpoint });\n try { return await call(); }\n catch (cause) {\n const data = errorField(cause, 'data');\n this.logger.warn('agentcore.control_plane.request.failed', { operation, host: client._endpoint,\n status: String(errorField(cause, 'statusCode') ?? '-'), code: String(errorField(cause, 'code') ?? '-'),\n requestId: String(errorField(cause, 'requestId') ?? errorField(data, 'RequestId') ?? errorField(data, 'requestId') ?? '-'),\n });\n throw new InvocationError('AgentCore control-plane request failed', { cause });\n }\n };\n try { return await invoke(); }\n catch (error) {\n if (!(error instanceof InvocationError) || this.endpoint || client._endpoint !== `agentcore.${this.regionId}.aliyuncs.com` || !endpointFailure(error.cause)) throw error;\n const host = `agentcore-vpc.${this.regionId}.aliyuncs.com`;\n this.logger.warn('agentcore.control_plane.endpoint.fallback', { operation, fromHost: client._endpoint, toHost: host });\n client._endpoint = host;\n const result = await invoke(); this.discoveredEndpoint = host; return result;\n }\n }\n\n private async downloadSkill(value: string): Promise<Uint8Array> {\n let original: URL;\n try { original = new URL(value); } catch { throw new ConfigError('AgentCore returned an invalid Skill download URL'); }\n if (!['http:', 'https:'].includes(original.protocol) || original.username || original.password) throw new ConfigError('AgentCore returned an invalid Skill download URL');\n let candidate = original;\n for (;;) {\n this.lifetime.signal.throwIfAborted();\n let status: number | undefined;\n try {\n const response = await fetch(candidate, { redirect: 'manual', signal: AbortSignal.any([this.lifetime.signal, AbortSignal.timeout(30_000)]) });\n if (response.ok) {\n const archive = await readBytes(response, 10 * 1024 * 1024, 'Skill archive');\n if (!archive.length) throw new ConfigError('Skill package is empty');\n return archive;\n }\n status = response.status; await response.body?.cancel();\n } catch (error) {\n this.lifetime.signal.throwIfAborted();\n if (error instanceof ConfigError) throw error;\n }\n this.logger.warn('agentcore.control_plane.skill.download.failed', { host: candidate.host, path: candidate.pathname, status });\n const fallback = candidate === original && (status === undefined || status >= 500 && status < 600) ? internalOSSURL(original) : undefined;\n if (!fallback) throw new InvocationError(status ? `Skill package download failed with HTTP ${status}` : 'Skill package download failed');\n this.logger.warn('agentcore.control_plane.skill.download.fallback', { fromHost: candidate.host, toHost: fallback.host });\n candidate = fallback;\n }\n }\n}\n\nfunction latestVersion(data?: models.GetSkillDetailResponseBodyData): string {\n if (!data) throw new ResourceNotConfiguredError('AgentCore Skill does not exist');\n for (const [label, value] of Object.entries(data.labels ?? {})) if (label.toLowerCase() === 'latest' && value) return value;\n const online = (data.versions ?? []).filter((v) => v.status?.toLowerCase() === 'online' && v.version);\n online.sort((a, b) => (b.updateTime ?? -1) - (a.updateTime ?? -1) || (b.version ?? '').localeCompare(a.version ?? ''));\n if (!online[0]?.version) throw new ResourceNotConfiguredError('AgentCore Skill has no online version');\n return online[0].version;\n}\n\nexport function internalOSSURL(url: URL): URL | undefined {\n const match = /^([a-z0-9-]+)\\.(oss-[a-z]+-[a-z0-9-]+)\\.aliyuncs\\.com$/.exec(url.hostname);\n if (!match || match[2]!.endsWith('-internal') || match[2]!.startsWith('oss-accelerate') || url.username || url.password) return undefined;\n if (url.searchParams.getAll('x-oss-additional-headers').some((v) => v.split(';').includes('host'))) return undefined;\n const result = new URL(url); result.hostname = `${match[1]}.${match[2]}-internal.aliyuncs.com`; return result;\n}\n"]}
@@ -1,13 +1,11 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;
2
2
 
3
- var _chunk5RKN46UUcjs = require('./chunk-5RKN46UU.cjs');
3
+ var _chunkNXMTTQQKcjs = require('./chunk-NXMTTQQK.cjs');
4
4
 
5
5
 
6
- var _chunkLE5P3SJWcjs = require('./chunk-LE5P3SJW.cjs');
7
6
 
8
7
 
9
-
10
- var _chunkJSP7ZROScjs = require('./chunk-JSP7ZROS.cjs');
8
+ var _chunkV4A6MJ42cjs = require('./chunk-V4A6MJ42.cjs');
11
9
 
12
10
  // src/auth/agent-sa-token.ts
13
11
  var _promises = require('fs/promises');
@@ -22,13 +20,13 @@ var AgentSATokenProvider = class {
22
20
  try {
23
21
  token = await _promises.readFile.call(void 0, this.path, "utf8");
24
22
  } catch (cause) {
25
- throw new (0, _chunkJSP7ZROScjs.AuthenticationError)("cannot read the Agent SA token file", { cause });
23
+ throw new (0, _chunkV4A6MJ42cjs.AuthenticationError)("cannot read the Agent SA token file", { cause });
26
24
  }
27
25
  return validToken(token);
28
26
  }
29
27
  };
30
28
  function validToken(token) {
31
- if (typeof token !== "string" || !token.trim()) throw new (0, _chunkJSP7ZROScjs.AuthenticationError)("the Agent SA token source returned an empty token");
29
+ if (typeof token !== "string" || !token.trim()) throw new (0, _chunkV4A6MJ42cjs.AuthenticationError)("the Agent SA token source returned an empty token");
32
30
  return token.trim();
33
31
  }
34
32
  async function getAgentSAToken(source) {
@@ -43,13 +41,13 @@ var _promises3 = require('timers/promises');
43
41
  var ControllerClient = (_class = class {
44
42
  constructor(endpoint, saTokens, options = {}) {;_class.prototype.__init.call(this);
45
43
  this.saTokens = saTokens;
46
- this.endpoint = _chunk5RKN46UUcjs.httpUrl.call(void 0, endpoint, "Controller endpoint");
44
+ this.endpoint = _chunkNXMTTQQKcjs.httpUrl.call(void 0, endpoint, "Controller endpoint");
47
45
  this.timeoutMs = _nullishCoalesce(options.timeoutMs, () => ( 1e4));
48
46
  this.maxAttempts = _nullishCoalesce(options.maxAttempts, () => ( 3));
49
47
  if (!Number.isFinite(this.timeoutMs) || this.timeoutMs <= 0 || !Number.isInteger(this.maxAttempts) || this.maxAttempts < 1) {
50
48
  throw new TypeError("timeoutMs and maxAttempts must be positive");
51
49
  }
52
- this.logger = _nullishCoalesce(options.logger, () => ( _chunkLE5P3SJWcjs.nullLogger));
50
+ this.logger = _nullishCoalesce(options.logger, () => ( _chunkV4A6MJ42cjs.nullLogger));
53
51
  }
54
52
 
55
53
 
@@ -68,7 +66,7 @@ var ControllerClient = (_class = class {
68
66
  response = await this.request(path, token, purpose);
69
67
  }
70
68
  }
71
- if (response.status === 401) throw new (0, _chunkJSP7ZROScjs.AuthenticationError)("Controller rejected the Agent SA token");
69
+ if (response.status === 401) throw new (0, _chunkV4A6MJ42cjs.AuthenticationError)("Controller rejected the Agent SA token");
72
70
  return response;
73
71
  }
74
72
  close() {
@@ -99,7 +97,7 @@ var ControllerClient = (_class = class {
99
97
  } catch (cause) {
100
98
  this.lifetime.signal.throwIfAborted();
101
99
  this.logger.warn("agentcore.controller.request.failed", { ...fields, attempt, reason: "transport_error" });
102
- if (attempt === this.maxAttempts) throw new (0, _chunkJSP7ZROScjs.CredentialExchangeError)("cannot reach the AgentCore Controller", { cause });
100
+ if (attempt === this.maxAttempts) throw new (0, _chunkV4A6MJ42cjs.CredentialExchangeError)("cannot reach the AgentCore Controller", { cause });
103
101
  await _promises3.setTimeout.call(void 0, 50 * 2 ** (attempt - 1), void 0, { signal: this.lifetime.signal });
104
102
  continue;
105
103
  } finally {
@@ -128,7 +126,7 @@ var ControllerClient = (_class = class {
128
126
  if (![500, 502, 503, 504].includes(response.status) || attempt === this.maxAttempts) return result;
129
127
  await _promises3.setTimeout.call(void 0, 50 * 2 ** (attempt - 1), void 0, { signal: this.lifetime.signal });
130
128
  }
131
- throw new (0, _chunkJSP7ZROScjs.CredentialExchangeError)("Controller request did not complete");
129
+ throw new (0, _chunkV4A6MJ42cjs.CredentialExchangeError)("Controller request did not complete");
132
130
  }
133
131
  }, _class);
134
132
 
@@ -139,4 +137,4 @@ var ControllerClient = (_class = class {
139
137
 
140
138
 
141
139
  exports.DEFAULT_AGENT_SA_TOKEN_PATH = DEFAULT_AGENT_SA_TOKEN_PATH; exports.AgentSATokenProvider = AgentSATokenProvider; exports.getAgentSAToken = getAgentSAToken; exports.refreshAgentSAToken = refreshAgentSAToken; exports.ControllerClient = ControllerClient;
142
- //# sourceMappingURL=chunk-2E5EWEDG.cjs.map
140
+ //# sourceMappingURL=chunk-KQTZUIMI.cjs.map