@opengeni/runtime 2.4.3-canary.0 → 2.5.1-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/{agent-UA75SUZ7.js → agent-Q2VNH5FV.js} +2 -2
  2. package/dist/{chunk-ORKCCH5X.js → chunk-25B3EQRW.js} +3 -398
  3. package/dist/{chunk-ORKCCH5X.js.map → chunk-25B3EQRW.js.map} +1 -1
  4. package/dist/{chunk-P5AEIDAS.js → chunk-26GUTY32.js} +267 -181
  5. package/dist/chunk-26GUTY32.js.map +1 -0
  6. package/dist/{chunk-YRKIQK25.js → chunk-CD22I76N.js} +2 -2
  7. package/dist/{chunk-7K6WOXFS.js → chunk-GB763TSV.js} +17 -1
  8. package/dist/chunk-GB763TSV.js.map +1 -0
  9. package/dist/{chunk-WATBACLT.js → chunk-LGLJ5PVD.js} +5 -88
  10. package/dist/chunk-LGLJ5PVD.js.map +1 -0
  11. package/dist/index.d.ts +12 -5
  12. package/dist/index.js +11 -5
  13. package/dist/{localSources-GDQRRHT3.js → localSources-Z5IJIIRV.js} +3 -3
  14. package/dist/model-input.d.ts +2 -1
  15. package/dist/runtime-skills.d.ts +28 -5
  16. package/dist/sandbox/index.js +3 -3
  17. package/dist/skill-files.d.ts +4 -0
  18. package/dist/skill-library.d.ts +1 -1
  19. package/dist/skill-library.js +3 -1
  20. package/dist/workspace-tool-gateway.js +5 -5
  21. package/package.json +11 -11
  22. package/src/bundled_management_skills/opengeni-skills/SKILL.md +3 -1
  23. package/src/index.ts +184 -33
  24. package/src/lazy-tool-transport.ts +0 -3
  25. package/src/model-input.ts +1 -1
  26. package/src/run-events.ts +23 -0
  27. package/src/runtime-skills.ts +122 -161
  28. package/src/sandbox/routing/routing-session.ts +1 -1
  29. package/src/skill-files.ts +20 -0
  30. package/src/skill-library.ts +1 -0
  31. package/dist/chunk-7K6WOXFS.js.map +0 -1
  32. package/dist/chunk-P5AEIDAS.js.map +0 -1
  33. package/dist/chunk-WATBACLT.js.map +0 -1
  34. /package/dist/{agent-UA75SUZ7.js.map → agent-Q2VNH5FV.js.map} +0 -0
  35. /package/dist/{chunk-YRKIQK25.js.map → chunk-CD22I76N.js.map} +0 -0
  36. /package/dist/{localSources-GDQRRHT3.js.map → localSources-Z5IJIIRV.js.map} +0 -0
@@ -26,7 +26,7 @@ import {
26
26
  randomUUID,
27
27
  relativePosixPathWithinRoot,
28
28
  shellQuote
29
- } from "./chunk-ORKCCH5X.js";
29
+ } from "./chunk-25B3EQRW.js";
30
30
 
31
31
  // ../../node_modules/.bun/@openai+agents-core@0.14.3+933c5e7db4cd33c2/node_modules/@openai/agents-core/dist/mcpServers.mjs
32
32
  var DEFAULT_CONNECT_TIMEOUT_MS = 1e4;
@@ -2140,4 +2140,4 @@ export {
2140
2140
  materializeLocalSourceManifest,
2141
2141
  materializeLocalSourceManifestEntry
2142
2142
  };
2143
- //# sourceMappingURL=chunk-YRKIQK25.js.map
2143
+ //# sourceMappingURL=chunk-CD22I76N.js.map
@@ -26,6 +26,21 @@ function assertSkillRelativePath(path) {
26
26
  throw new SkillFileError("invalid_path", `Expected a safe relative Skill path: ${path}`);
27
27
  }
28
28
  }
29
+ function listSkillPaths(files, maxFiles) {
30
+ if (files.length > maxFiles)
31
+ throw new SkillFileError("output_too_large", `Skill inventory exceeds ${maxFiles} files.`);
32
+ const seen = /* @__PURE__ */ new Set();
33
+ for (const { path } of files) {
34
+ assertSkillRelativePath(path);
35
+ if (seen.has(path))
36
+ throw new SkillFileError("invalid_request", `Duplicate stored Skill path: ${path}`);
37
+ seen.add(path);
38
+ }
39
+ const result = { paths: [...seen].sort() };
40
+ if (new TextEncoder().encode(JSON.stringify(result)).byteLength > SKILL_READ_MAX_OUTPUT_BYTES)
41
+ throw new SkillFileError("output_too_large", "Skill inventory exceeds the read output limit.");
42
+ return result;
43
+ }
29
44
  function readSkillFiles(files, paths) {
30
45
  const requested = paths ?? ["SKILL.md"];
31
46
  if (requested.length === 0 || requested.length > SKILL_READ_MAX_PATHS) {
@@ -508,6 +523,7 @@ export {
508
523
  SKILL_READ_MAX_PATHS,
509
524
  SkillFileError,
510
525
  assertSkillRelativePath,
526
+ listSkillPaths,
511
527
  readSkillFiles,
512
528
  applySkillFileChanges,
513
529
  loadSkillManagementSkill,
@@ -525,4 +541,4 @@ export {
525
541
  SKILL_MAX_FILE_BYTES,
526
542
  SKILL_MAX_TOTAL_BYTES
527
543
  };
528
- //# sourceMappingURL=chunk-7K6WOXFS.js.map
544
+ //# sourceMappingURL=chunk-GB763TSV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/skill-library.ts","../src/skill-files.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { lstatSync, readFileSync, readdirSync } from \"node:fs\";\nimport { dirname, isAbsolute, join, relative } from \"node:path\";\nimport { TextDecoder } from \"node:util\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n parseSkillFrontmatter as parsePortableSkillFrontmatter,\n readSkillMetadata,\n validateSkillTextFiles,\n} from \"@opengeni/contracts\";\nexport { parseSkillFrontmatter as parsePortableSkillFrontmatter } from \"@opengeni/contracts\";\n\nexport {\n applySkillFileChanges,\n assertSkillRelativePath,\n listSkillPaths,\n readSkillFiles,\n SkillFileError,\n SKILL_READ_MAX_OUTPUT_BYTES,\n SKILL_READ_MAX_PATHS,\n type SkillTextFile,\n} from \"./skill-files\";\n\n/**\n * Metadata for a platform-curated skill. The metadata is deliberately\n * provider-neutral: it describes guidance provenance and compatibility, not\n * credentials, tools, permissions, or a model route.\n *\n * Entries are immutable in the runtime. A new artifact gets a new version and\n * content hash; callers must not mutate the returned records.\n */\nexport type SkillLibraryEntry = Readonly<{\n id: string;\n name: string;\n version: string;\n description: string;\n category: string;\n tags: readonly string[];\n /** SHA-256 over the complete canonical artifact manifest, not just SKILL.md. */\n contentSha256: string;\n sourceCommit: string;\n sourceUrl: string;\n provenance: string;\n license: string;\n documentationUrl: string;\n compatibility: Readonly<{\n runtime: string;\n minimumSkillCapabilityVersion: string;\n }>;\n upgrade: Readonly<{\n policy: \"immutable-replacement\";\n supersedes: string | null;\n }>;\n relativePath: string;\n}>;\n\nexport type SkillLibraryFile = Readonly<{\n path: string;\n content: string;\n}>;\n\nexport type SkillLibraryArtifact = Readonly<{\n files: readonly SkillLibraryFile[];\n /** SHA-256 over the complete canonical artifact manifest, not just SKILL.md. */\n contentSha256: string;\n}>;\n\nexport type SkillLibrarySkill = Readonly<{\n name: string;\n description: string;\n files: readonly SkillLibraryFile[];\n}>;\n\nexport {\n SKILL_MAX_FILES as PORTABLE_SKILL_MAX_FILES,\n SKILL_MAX_FILE_BYTES as PORTABLE_SKILL_MAX_FILE_BYTES,\n SKILL_MAX_TOTAL_BYTES as PORTABLE_SKILL_MAX_TOTAL_BYTES,\n} from \"@opengeni/contracts\";\n\nexport type PortableSkillArtifact = Readonly<{\n name: string;\n description: string;\n files: readonly SkillLibraryFile[];\n contentSha256: string;\n totalBytes: number;\n}>;\n\ntype SkillLibrarySourceEntry = Omit<SkillLibraryEntry, \"name\" | \"description\">;\n\nconst skillLibraryEntries: readonly SkillLibrarySourceEntry[] = Object.freeze([\n Object.freeze({\n id: \"checkov\",\n version: \"1.0.0\",\n category: \"infrastructure\",\n tags: Object.freeze([\"skill\", \"infrastructure\", \"terraform\", \"security\", \"opt-in\"]),\n contentSha256: \"0331b987cd609946c4b95928fec9982b96b0a8614a95e5e628a531efb8ad8577\",\n sourceCommit: \"e9734c4aa062e0421a68acb5650bd5bf33ce2e10\",\n sourceUrl:\n \"https://github.com/Cloudgeni-ai/opengeni/tree/e9734c4aa062e0421a68acb5650bd5bf33ce2e10/packages/runtime/src/bundled_hashicorp_terraform_skills/checkov\",\n provenance: \"OpenGeni-authored guidance; reviewed immutable opt-in entry.\",\n license: \"Apache-2.0\",\n documentationUrl: \"https://www.checkov.io/\",\n compatibility: Object.freeze({\n runtime: \"openai-agents-skills\",\n minimumSkillCapabilityVersion: \"0.13.3\",\n }),\n upgrade: Object.freeze({ policy: \"immutable-replacement\", supersedes: null }),\n relativePath: \"checkov\",\n }),\n Object.freeze({\n id: \"document-parsing\",\n version: \"1.0.0\",\n category: \"documents\",\n tags: Object.freeze([\"skill\", \"documents\", \"parsing\", \"markdown\", \"opt-in\"]),\n contentSha256: \"5494b5bbb1629001dad8ab823afb2401efc7a6e76679644d211df8a5164f9d1a\",\n sourceCommit: \"4e3089b1ed43404241a303109f81e2c7933040b2\",\n sourceUrl:\n \"https://github.com/firecrawl/anydoc/tree/4e3089b1ed43404241a303109f81e2c7933040b2/skills/convert-documents-to-markdown\",\n provenance:\n \"OpenGeni-authored guidance adapted for the pinned Firecrawl AnyDoc runtime; reviewed immutable opt-in entry.\",\n license: \"MIT\",\n documentationUrl: \"https://github.com/firecrawl/anydoc/tree/v0.1.8\",\n compatibility: Object.freeze({\n runtime: \"openai-agents-skills\",\n minimumSkillCapabilityVersion: \"0.13.3\",\n }),\n upgrade: Object.freeze({ policy: \"immutable-replacement\", supersedes: null }),\n relativePath: \"document-parsing\",\n }),\n Object.freeze({\n id: \"refactor-module\",\n version: \"0.0.1\",\n category: \"infrastructure\",\n tags: Object.freeze([\"skill\", \"infrastructure\", \"terraform\", \"modules\", \"opt-in\"]),\n contentSha256: \"cc6d70034c4d11ef6a496c0081ca28219cbd310283d77e327914bcd2f27f3a09\",\n sourceCommit: \"de4323afdfbc30d1387f287b55062fa8d82b62e8\",\n sourceUrl:\n \"https://github.com/hashicorp/agent-skills/tree/de4323afdfbc30d1387f287b55062fa8d82b62e8/terraform/module-generation/skills/refactor-module\",\n provenance: \"Vendored from hashicorp/agent-skills; reviewed immutable opt-in entry.\",\n license: \"MPL-2.0\",\n documentationUrl: \"https://developer.hashicorp.com/terraform/language/modules/develop\",\n compatibility: Object.freeze({\n runtime: \"openai-agents-skills\",\n minimumSkillCapabilityVersion: \"0.13.3\",\n }),\n upgrade: Object.freeze({ policy: \"immutable-replacement\", supersedes: null }),\n relativePath: \"refactor-module\",\n }),\n Object.freeze({\n id: \"social-media-marketing\",\n version: \"1.0.0\",\n category: \"marketing\",\n tags: Object.freeze([\"skill\", \"marketing\", \"social\", \"analysis\", \"opt-in\"]),\n contentSha256: \"66893de1fd2110f18d9be69b1e0adb61193e0a736a88f0c0725168465d2b06a3\",\n sourceCommit: \"e9734c4aa062e0421a68acb5650bd5bf33ce2e10\",\n sourceUrl:\n \"https://github.com/Cloudgeni-ai/opengeni/tree/e9734c4aa062e0421a68acb5650bd5bf33ce2e10/packages/runtime/src/bundled_hashicorp_terraform_skills/social-media-marketing\",\n provenance: \"OpenGeni-authored guidance; reviewed immutable opt-in entry.\",\n license: \"Apache-2.0\",\n documentationUrl:\n \"https://github.com/Cloudgeni-ai/opengeni/blob/e9734c4aa062e0421a68acb5650bd5bf33ce2e10/docs/social-connectors.md\",\n compatibility: Object.freeze({\n runtime: \"openai-agents-skills\",\n minimumSkillCapabilityVersion: \"0.13.3\",\n }),\n upgrade: Object.freeze({ policy: \"immutable-replacement\", supersedes: null }),\n relativePath: \"social-media-marketing\",\n }),\n Object.freeze({\n id: \"terraform-search-import\",\n version: \"0.1.0\",\n category: \"infrastructure\",\n tags: Object.freeze([\"skill\", \"infrastructure\", \"terraform\", \"import\", \"opt-in\"]),\n contentSha256: \"994d7a48dd6a610daa8a4dbdf4b0f0e52eaf8662a509b6a163bc6e76611227f9\",\n sourceCommit: \"de4323afdfbc30d1387f287b55062fa8d82b62e8\",\n sourceUrl:\n \"https://github.com/hashicorp/agent-skills/tree/de4323afdfbc30d1387f287b55062fa8d82b62e8/terraform/code-generation/skills/terraform-search-import\",\n provenance: \"Vendored from hashicorp/agent-skills; reviewed immutable opt-in entry.\",\n license: \"MPL-2.0\",\n documentationUrl: \"https://developer.hashicorp.com/terraform/language/import\",\n compatibility: Object.freeze({\n runtime: \"openai-agents-skills\",\n minimumSkillCapabilityVersion: \"0.13.3\",\n }),\n upgrade: Object.freeze({ policy: \"immutable-replacement\", supersedes: null }),\n relativePath: \"terraform-search-import\",\n }),\n Object.freeze({\n id: \"terraform-stacks\",\n version: \"0.0.1\",\n category: \"infrastructure\",\n tags: Object.freeze([\"skill\", \"infrastructure\", \"terraform\", \"stacks\", \"opt-in\"]),\n contentSha256: \"0a6244ecddf1cce0357db41b41b3b20a1bfa71f331092ebc8bbd15e649733d35\",\n sourceCommit: \"de4323afdfbc30d1387f287b55062fa8d82b62e8\",\n sourceUrl:\n \"https://github.com/hashicorp/agent-skills/tree/de4323afdfbc30d1387f287b55062fa8d82b62e8/terraform/module-generation/skills/terraform-stacks\",\n provenance: \"Vendored from hashicorp/agent-skills; reviewed immutable opt-in entry.\",\n license: \"MPL-2.0\",\n documentationUrl: \"https://developer.hashicorp.com/terraform/language/stacks\",\n compatibility: Object.freeze({\n runtime: \"openai-agents-skills\",\n minimumSkillCapabilityVersion: \"0.13.3\",\n }),\n upgrade: Object.freeze({ policy: \"immutable-replacement\", supersedes: null }),\n relativePath: \"terraform-stacks\",\n }),\n Object.freeze({\n id: \"terraform-style-guide\",\n version: \"1.0.0\",\n category: \"infrastructure\",\n tags: Object.freeze([\"skill\", \"infrastructure\", \"terraform\", \"style\", \"opt-in\"]),\n contentSha256: \"1453c4f11636d2d88c5186a4ce2d7532d4b2056a861ed69653df21e8e45e19cd\",\n sourceCommit: \"de4323afdfbc30d1387f287b55062fa8d82b62e8\",\n sourceUrl:\n \"https://github.com/hashicorp/agent-skills/tree/de4323afdfbc30d1387f287b55062fa8d82b62e8/terraform/code-generation/skills/terraform-style-guide\",\n provenance: \"Vendored from hashicorp/agent-skills; reviewed immutable opt-in entry.\",\n license: \"MPL-2.0\",\n documentationUrl: \"https://developer.hashicorp.com/terraform/language/style\",\n compatibility: Object.freeze({\n runtime: \"openai-agents-skills\",\n minimumSkillCapabilityVersion: \"0.13.3\",\n }),\n upgrade: Object.freeze({ policy: \"immutable-replacement\", supersedes: null }),\n relativePath: \"terraform-style-guide\",\n }),\n Object.freeze({\n id: \"terraform-test\",\n version: \"0.0.2\",\n category: \"infrastructure\",\n tags: Object.freeze([\"skill\", \"infrastructure\", \"terraform\", \"testing\", \"opt-in\"]),\n contentSha256: \"61be0fa43c48f49980fee28c64215f593c4ab55d55a93c8f2e514d9ca566a97b\",\n sourceCommit: \"de4323afdfbc30d1387f287b55062fa8d82b62e8\",\n sourceUrl:\n \"https://github.com/hashicorp/agent-skills/tree/de4323afdfbc30d1387f287b55062fa8d82b62e8/terraform/code-generation/skills/terraform-test\",\n provenance: \"Vendored from hashicorp/agent-skills; reviewed immutable opt-in entry.\",\n license: \"MPL-2.0\",\n documentationUrl: \"https://developer.hashicorp.com/terraform/language/tests\",\n compatibility: Object.freeze({\n runtime: \"openai-agents-skills\",\n minimumSkillCapabilityVersion: \"0.13.3\",\n }),\n upgrade: Object.freeze({ policy: \"immutable-replacement\", supersedes: null }),\n relativePath: \"terraform-test\",\n }),\n Object.freeze({\n id: \"azure-verified-modules\",\n version: \"1.0.0\",\n category: \"infrastructure\",\n tags: Object.freeze([\"skill\", \"infrastructure\", \"terraform\", \"azure\", \"opt-in\"]),\n contentSha256: \"bbc029412fd4893c35cf2a4df6e052efa5583d57d3c26e35d62869dcf4625699\",\n sourceCommit: \"de4323afdfbc30d1387f287b55062fa8d82b62e8\",\n sourceUrl:\n \"https://github.com/hashicorp/agent-skills/tree/de4323afdfbc30d1387f287b55062fa8d82b62e8/terraform/code-generation/skills/azure-verified-modules\",\n provenance: \"Vendored from hashicorp/agent-skills; reviewed OpenGeni curated entry.\",\n license: \"MPL-2.0\",\n documentationUrl: \"https://azure.github.io/Azure-Verified-Modules/\",\n compatibility: Object.freeze({\n runtime: \"openai-agents-skills\",\n minimumSkillCapabilityVersion: \"0.13.3\",\n }),\n upgrade: Object.freeze({\n policy: \"immutable-replacement\",\n supersedes: null,\n }),\n relativePath: \"azure-verified-modules\",\n }),\n]);\n\nconst skillLibraryRootCandidates = (): string[] => {\n const moduleDir = dirname(fileURLToPath(import.meta.url));\n return [\n join(moduleDir, \"assets\", \"runtime\", \"curated_skill_library\"),\n join(moduleDir, \"curated_skill_library\"),\n join(moduleDir, \"..\", \"src\", \"curated_skill_library\"),\n ];\n};\n\nfunction skillLibraryRoot(): string | null {\n return skillLibraryRootCandidates().find((candidate) => isRealDirectory(candidate)) ?? null;\n}\n\n/** Read packaged guidance on the server; never materialize it into a sandbox. */\nexport function loadSkillManagementSkill(): SkillLibrarySkill {\n const moduleDir = dirname(fileURLToPath(import.meta.url));\n const root = [\n join(moduleDir, \"assets\", \"runtime\", \"bundled_management_skills\"),\n join(moduleDir, \"bundled_management_skills\"),\n join(moduleDir, \"..\", \"src\", \"bundled_management_skills\"),\n ].find((candidate) => isRealDirectory(candidate));\n if (!root) throw new Error(\"Built-in Skill management guidance is missing from this deployment.\");\n const artifact = readSkillLibraryArtifact(join(root, \"opengeni-skills\"));\n const main = artifact.files.find((entry) => entry.path === \"SKILL.md\");\n if (!main) throw new Error(\"Built-in Skill management guidance has no SKILL.md.\");\n const metadata = parsePortableSkillFrontmatter(main.content);\n if (metadata.name !== \"opengeni-skills\" || !metadata.description) {\n throw new Error(\"Built-in Skill management metadata is invalid.\");\n }\n return { name: metadata.name, description: metadata.description, files: artifact.files };\n}\n\nfunction entryDirectory(entry: SkillLibrarySourceEntry): string | null {\n const root = skillLibraryRoot();\n if (!root) return null;\n const directory = join(root, entry.relativePath);\n const withinRoot = relative(root, directory);\n if (\n isAbsolute(withinRoot) ||\n withinRoot === \"..\" ||\n withinRoot.startsWith(\"../\") ||\n !isRealDirectory(directory)\n ) {\n return null;\n }\n return directory;\n}\n\n/** Return only entries whose reviewed artifact is present in this deployment. */\nexport function listSkillLibraryEntries(): readonly SkillLibraryEntry[] {\n return skillLibraryEntries.flatMap((entry) => {\n const resolved = resolveSkillLibraryEntry(entry);\n return resolved ? [resolved] : [];\n });\n}\n\n/** Return whether an id belongs to the immutable library, even if its artifact is unavailable. */\nexport function isSkillLibraryEntryId(id: string): boolean {\n return skillLibraryEntries.some((entry) => entry.id === id);\n}\n\n/** Resolve an exact immutable library entry by id and version. */\nexport function getSkillLibraryEntry(id: string, version?: string): SkillLibraryEntry | null {\n const entry = skillLibraryEntries.find(\n (candidate) => candidate.id === id && (version === undefined || candidate.version === version),\n );\n return entry ? resolveSkillLibraryEntry(entry) : null;\n}\n\n/**\n * Load a selected curated entry into the SDK's in-memory skill shape.\n * Selection is guidance-only: this function has no access to settings,\n * credentials, MCP declarations, or model-provider configuration.\n */\nexport function loadSkillLibrarySkill(\n id: string,\n version?: string,\n): { entry: SkillLibraryEntry; skill: SkillLibrarySkill } {\n const entry = getSkillLibraryEntry(id, version);\n if (!entry) {\n throw new Error(\n version\n ? `Skill library entry is unavailable: ${id}@${version}`\n : `Skill library entry is unavailable: ${id}`,\n );\n }\n const directory = entryDirectory(entry);\n if (!directory) {\n throw new Error(`Skill library entry is unavailable: ${entry.id}@${entry.version}`);\n }\n const artifact = verifySkillLibraryArtifact(directory, entry.contentSha256, entry);\n const files = artifact.files;\n const skillMarkdown = files.find((file) => file.path === \"SKILL.md\")?.content;\n if (skillMarkdown === undefined) {\n throw new Error(`Skill library entry is missing SKILL.md: ${entry.id}@${entry.version}`);\n }\n return {\n entry,\n skill: Object.freeze({\n name: entry.name,\n description: entry.description,\n files: Object.freeze(files.map((file) => Object.freeze(file))),\n }),\n };\n}\n\n/** Return the immutable repository origin for a reviewed library source URL. */\nexport function skillLibraryRepositoryUrl(sourceUrl: string): string {\n const url = new URL(sourceUrl);\n const segments = url.pathname.split(\"/\").filter(Boolean);\n if (url.hostname === \"github.com\" && segments.length >= 2) {\n return `${url.origin}/${segments[0]}/${segments[1]}`;\n }\n return sourceUrl;\n}\n\n/**\n * Read a curated artifact and calculate its canonical whole-artifact digest.\n *\n * The manifest is JSON encoded as sorted `[normalizedRelativePath, base64Bytes]`\n * tuples. Base64 preserves every byte, including bytes that would not survive\n * a lossy UTF-8 string round-trip. Files are decoded only after the digest\n * input has been captured because the SDK skill surface is text-based.\n */\nexport function readSkillLibraryArtifact(root: string): SkillLibraryArtifact {\n const files = materializeSkillLibraryFiles(root);\n const contentSha256 = skillLibraryArtifactSha256(files);\n return Object.freeze({\n files: Object.freeze(\n files.map((file) =>\n Object.freeze({\n path: file.path,\n content: decodeSkillLibraryFile(file.bytes, file.path),\n }),\n ),\n ),\n contentSha256,\n });\n}\n\n/**\n * Validate and fingerprint a portable, text-only Skill artifact before it is\n * persisted or exposed to the runtime. Remote imports and curated entries use\n * the same canonical path and whole-artifact digest rules.\n */\nexport function buildPortableSkillArtifact(\n inputFiles: readonly SkillLibraryFile[],\n): PortableSkillArtifact {\n const { materialized, totalBytes } = materializePortableSkillFiles(inputFiles);\n const skillMarkdown = materialized.find((file) => file.path === \"SKILL.md\")?.content;\n if (skillMarkdown === undefined) {\n throw new Error(\"Skill artifact is missing a top-level SKILL.md\");\n }\n const metadata = readSkillMetadata(skillMarkdown);\n return Object.freeze({\n name: metadata.name,\n description: metadata.description,\n files: Object.freeze(materialized.map(({ path, content }) => Object.freeze({ path, content }))),\n contentSha256: skillLibraryArtifactSha256(materialized),\n totalBytes,\n });\n}\n\n/**\n * Canonical whole-artifact identity for any validated runtime Skill shape.\n * This deliberately does not require frontmatter because legacy Pack/session\n * contracts historically allowed a top-level SKILL.md without metadata. The\n * content identity is nevertheless byte-exact and shared with portable imports.\n */\nexport function skillArtifactContentSha256(inputFiles: readonly SkillLibraryFile[]): string {\n return skillLibraryArtifactSha256(materializePortableSkillFiles(inputFiles).materialized);\n}\n\nfunction materializePortableSkillFiles(inputFiles: readonly SkillLibraryFile[]): {\n materialized: Array<Readonly<{ path: string; content: string; bytes: Uint8Array }>>;\n totalBytes: number;\n} {\n const { totalBytes } = validateSkillTextFiles(inputFiles);\n const materialized = inputFiles\n .map((file) => {\n const path = file.path;\n const bytes = new TextEncoder().encode(file.content);\n return Object.freeze({ path, content: file.content, bytes });\n })\n .sort((left, right) => compareCanonicalPath(left.path, right.path));\n return { materialized, totalBytes };\n}\n\n/** Verify a reviewed artifact against its immutable catalog digest. */\nexport function verifySkillLibraryArtifact(\n root: string,\n expectedSha256: string,\n entry?: Pick<SkillLibraryEntry, \"id\" | \"version\">,\n): SkillLibraryArtifact {\n const artifact = readSkillLibraryArtifact(root);\n if (artifact.files.every((file) => file.path !== \"SKILL.md\")) {\n throw new Error(\n entry\n ? `Skill library entry is missing SKILL.md: ${entry.id}@${entry.version}`\n : \"Skill library artifact is missing SKILL.md\",\n );\n }\n if (artifact.contentSha256 !== expectedSha256) {\n const label = entry ? ` for ${entry.id}@${entry.version}` : \"\";\n throw new Error(\n `Skill library artifact hash mismatch${label}: expected ${expectedSha256}, got ${artifact.contentSha256}`,\n );\n }\n return artifact;\n}\n\ntype MaterializedSkillLibraryFile = Readonly<{\n path: string;\n bytes: Uint8Array;\n}>;\n\nconst utf8Decoder = new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: true });\n\nfunction materializeSkillLibraryFiles(root: string, current = \"\"): MaterializedSkillLibraryFile[] {\n const directory = current ? join(root, current) : root;\n if (!isRealDirectory(directory)) {\n throw new Error(`Skill library artifact root is not a real directory: ${directory}`);\n }\n return readdirSync(directory, { withFileTypes: true })\n .sort((a, b) => compareCanonicalPath(a.name, b.name))\n .flatMap((child) => {\n const childName = normalizeSkillLibraryRelativePath(child.name, true);\n const path = current ? `${current}/${childName}` : childName;\n normalizeSkillLibraryRelativePath(path);\n const childPath = join(root, path);\n if (child.isSymbolicLink()) {\n throw new Error(`Skill library artifact contains a symbolic link: ${path}`);\n }\n if (child.isDirectory()) {\n return materializeSkillLibraryFiles(root, path);\n }\n if (!child.isFile() || !isRealFile(childPath)) {\n throw new Error(`Skill library artifact contains a non-regular file: ${path}`);\n }\n return [{ path, bytes: Uint8Array.from(readFileSync(childPath)) }];\n });\n}\n\nfunction resolveSkillLibraryEntry(entry: SkillLibrarySourceEntry): SkillLibraryEntry | null {\n const directory = entryDirectory(entry);\n if (!directory) return null;\n try {\n const artifact = verifySkillLibraryArtifact(directory, entry.contentSha256, entry);\n const metadata = readSkillMetadata(\n artifact.files.find((file) => file.path === \"SKILL.md\")!.content,\n );\n return Object.freeze({ ...entry, ...metadata });\n } catch {\n return null;\n }\n}\n\nfunction skillLibraryArtifactSha256(files: readonly MaterializedSkillLibraryFile[]): string {\n const manifest = files\n .map((file) => {\n const path = normalizeSkillLibraryRelativePath(file.path);\n return [path, Buffer.from(file.bytes).toString(\"base64\")] as const;\n })\n .sort((left, right) => compareCanonicalPath(left[0], right[0]));\n const paths = new Set<string>();\n for (const [path] of manifest) {\n if (paths.has(path)) {\n throw new Error(`Skill library artifact contains duplicate file path: ${path}`);\n }\n paths.add(path);\n }\n return createHash(\"sha256\").update(JSON.stringify(manifest), \"utf8\").digest(\"hex\");\n}\n\nfunction decodeSkillLibraryFile(bytes: Uint8Array, path: string): string {\n try {\n return utf8Decoder.decode(bytes);\n } catch {\n throw new Error(`Skill library artifact contains invalid UTF-8: ${path}`);\n }\n}\n\nfunction normalizeSkillLibraryRelativePath(path: string, segment = false): string {\n if (\n path.length === 0 ||\n path.includes(\"\\\\\") ||\n path.includes(\"\\0\") ||\n path.startsWith(\"/\") ||\n /^[A-Za-z]:(?:\\/|$)/u.test(path)\n ) {\n throw new Error(`Skill library artifact contains an unsafe path: ${path}`);\n }\n const parts = path.split(\"/\");\n if (parts.some((part) => part.length === 0 || part === \".\" || part === \"..\")) {\n throw new Error(`Skill library artifact contains an unsafe path: ${path}`);\n }\n if (segment && parts.length !== 1) {\n throw new Error(`Skill library artifact contains an unsafe path: ${path}`);\n }\n return parts.join(\"/\");\n}\n\nfunction compareCanonicalPath(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction isRealDirectory(path: string): boolean {\n try {\n const stats = lstatSync(path);\n return stats.isDirectory() && !stats.isSymbolicLink();\n } catch {\n return false;\n }\n}\n\nfunction isRealFile(path: string): boolean {\n try {\n const stats = lstatSync(path);\n return stats.isFile() && !stats.isSymbolicLink();\n } catch {\n return false;\n }\n}\n","/**\n * Sandbox-independent file operations on an already-authorized Skill folder.\n * Callers resolve workspace authority and current content before entering here.\n * These helpers neither activate guidance nor perform persistence.\n */\nexport type SkillTextFile = Readonly<{ path: string; content: string }>;\n\nexport const SKILL_READ_MAX_OUTPUT_BYTES = 512 * 1024;\nexport const SKILL_READ_MAX_PATHS = 128;\n\nexport class SkillFileError extends Error {\n constructor(\n readonly code: \"invalid_path\" | \"invalid_request\" | \"missing_file\" | \"output_too_large\",\n message: string,\n ) {\n super(message);\n this.name = \"SkillFileError\";\n }\n}\n\nexport function assertSkillRelativePath(path: string): void {\n if (\n !path ||\n path.includes(\"\\\\\") ||\n /[\\u0000-\\u001f\\u007f]/u.test(path) ||\n path.includes(\":\") ||\n path.split(\"/\").some((segment) => !segment || segment === \".\" || segment === \"..\")\n ) {\n throw new SkillFileError(\"invalid_path\", `Expected a safe relative Skill path: ${path}`);\n }\n}\n\n/** Inventory shares the reader's path validation and never includes file bodies. */\nexport function listSkillPaths(\n files: readonly SkillTextFile[],\n maxFiles: number,\n): { paths: string[] } {\n if (files.length > maxFiles)\n throw new SkillFileError(\"output_too_large\", `Skill inventory exceeds ${maxFiles} files.`);\n const seen = new Set<string>();\n for (const { path } of files) {\n assertSkillRelativePath(path);\n if (seen.has(path))\n throw new SkillFileError(\"invalid_request\", `Duplicate stored Skill path: ${path}`);\n seen.add(path);\n }\n const result = { paths: [...seen].sort() };\n if (new TextEncoder().encode(JSON.stringify(result)).byteLength > SKILL_READ_MAX_OUTPUT_BYTES)\n throw new SkillFileError(\"output_too_large\", \"Skill inventory exceeds the read output limit.\");\n return result;\n}\n\n/** Omitted paths default to the entry point; explicit paths are never expanded. */\nexport function readSkillFiles(\n files: readonly SkillTextFile[],\n paths?: readonly string[],\n): { files: SkillTextFile[] } {\n const requested = paths ?? [\"SKILL.md\"];\n if (requested.length === 0 || requested.length > SKILL_READ_MAX_PATHS) {\n throw new SkillFileError(\n \"invalid_request\",\n `Request between 1 and ${SKILL_READ_MAX_PATHS} paths, or omit paths for SKILL.md.`,\n );\n }\n const byPath = new Map<string, SkillTextFile>();\n for (const file of files) {\n assertSkillRelativePath(file.path);\n if (byPath.has(file.path)) {\n throw new SkillFileError(\"invalid_request\", `Duplicate stored Skill path: ${file.path}`);\n }\n byPath.set(file.path, file);\n }\n const seen = new Set<string>();\n const selected = requested.map((path) => {\n assertSkillRelativePath(path);\n if (seen.has(path)) {\n throw new SkillFileError(\"invalid_request\", `Duplicate requested Skill path: ${path}`);\n }\n seen.add(path);\n const file = byPath.get(path);\n if (!file) throw new SkillFileError(\"missing_file\", `Skill file not found: ${path}`);\n return { path: file.path, content: file.content };\n });\n const result = { files: selected };\n if (new TextEncoder().encode(JSON.stringify(result)).byteLength > SKILL_READ_MAX_OUTPUT_BYTES) {\n throw new SkillFileError(\n \"output_too_large\",\n \"Requested Skill files exceed the read output limit. Request fewer paths or use checkout.\",\n );\n }\n return result;\n}\n\n/** Partial text edits preserve omitted files; deletion is always explicit. */\nexport function applySkillFileChanges(\n current: readonly SkillTextFile[],\n changes: readonly SkillTextFile[],\n deletions: readonly string[] = [],\n): SkillTextFile[] {\n const next = new Map<string, SkillTextFile>();\n for (const file of current) {\n assertSkillRelativePath(file.path);\n if (next.has(file.path)) {\n throw new SkillFileError(\"invalid_request\", `Duplicate stored Skill path: ${file.path}`);\n }\n next.set(file.path, { ...file });\n }\n const touched = new Set<string>();\n for (const path of deletions) {\n assertSkillRelativePath(path);\n if (touched.has(path)) {\n throw new SkillFileError(\"invalid_request\", `Duplicate deleted Skill path: ${path}`);\n }\n touched.add(path);\n if (!next.delete(path)) {\n throw new SkillFileError(\"missing_file\", `Cannot delete missing Skill file: ${path}`);\n }\n }\n for (const file of changes) {\n assertSkillRelativePath(file.path);\n if (touched.has(file.path)) {\n throw new SkillFileError(\"invalid_request\", `Conflicting Skill edit: ${file.path}`);\n }\n touched.add(file.path);\n next.set(file.path, { ...file });\n }\n if (!next.has(\"SKILL.md\")) {\n throw new SkillFileError(\"missing_file\", \"A Skill must contain SKILL.md.\");\n }\n return [...next.values()].sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0));\n}\n"],"mappings":"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","names":[]}
@@ -31,7 +31,7 @@ import {
31
31
  validateCredentialPair,
32
32
  validateRemoteSandboxPathForManifest,
33
33
  validateSandboxArchiveLimits
34
- } from "./chunk-YRKIQK25.js";
34
+ } from "./chunk-CD22I76N.js";
35
35
  import {
36
36
  Environment,
37
37
  FileMode,
@@ -63,7 +63,6 @@ import {
63
63
  isSandboxPathNotFoundError,
64
64
  isStringRecord,
65
65
  loadEnv,
66
- localDir,
67
66
  materializeEnvironment,
68
67
  mergeManifestDelta,
69
68
  mergeManifestEntryDelta,
@@ -71,7 +70,6 @@ import {
71
70
  normalizeExposedPort,
72
71
  normalizePosixPath,
73
72
  normalizeRelativePath,
74
- parseSkillFrontmatter,
75
73
  permissionsForSandboxEntry,
76
74
  posixDirname,
77
75
  probeSandboxPathExists,
@@ -96,7 +94,7 @@ import {
96
94
  shellQuote,
97
95
  stableJsonStringify,
98
96
  withSandboxSpan
99
- } from "./chunk-ORKCCH5X.js";
97
+ } from "./chunk-25B3EQRW.js";
100
98
 
101
99
  // src/sandbox/index.ts
102
100
  import { collectSandboxEnvironment, parseExposedPorts } from "@opengeni/config";
@@ -5012,7 +5010,7 @@ var CloudflareSandboxSession = class {
5012
5010
  async materializeEntry(args) {
5013
5011
  assertSandboxEntryMetadataSupported("CloudflareSandboxClient", args.path, args.entry, MOUNT_MANIFEST_METADATA_SUPPORT);
5014
5012
  if (entryContainsLocalSource(args.entry)) {
5015
- const { applyLocalSourceManifestEntryToState: applyLocalSourceManifestEntryToState2 } = await import("./localSources-GDQRRHT3.js");
5013
+ const { applyLocalSourceManifestEntryToState: applyLocalSourceManifestEntryToState2 } = await import("./localSources-Z5IJIIRV.js");
5016
5014
  await applyLocalSourceManifestEntryToState2(this.state, args.path, args.entry, "cloudflare", this.writer(), this.remotePathResolver, this.manifestMaterializationOptions(args.runAs));
5017
5015
  return;
5018
5016
  }
@@ -5023,7 +5021,7 @@ var CloudflareSandboxSession = class {
5023
5021
  assertSandboxManifestMetadataSupported("CloudflareSandboxClient", manifest, MOUNT_MANIFEST_METADATA_SUPPORT);
5024
5022
  assertCloudflareManifestMountsSupported(manifest);
5025
5023
  if (manifestContainsLocalSource(manifest)) {
5026
- const { applyLocalSourceManifestToState: applyLocalSourceManifestToState2 } = await import("./localSources-GDQRRHT3.js");
5024
+ const { applyLocalSourceManifestToState: applyLocalSourceManifestToState2 } = await import("./localSources-Z5IJIIRV.js");
5027
5025
  await applyLocalSourceManifestToState2(this.state, manifest, "cloudflare", this.writer(), this.remotePathResolver, this.manifestMaterializationOptions(runAs));
5028
5026
  return;
5029
5027
  }
@@ -6846,86 +6844,6 @@ var daytonaProvider = {
6846
6844
  // ../../node_modules/.bun/@openai+agents-core@0.14.3+933c5e7db4cd33c2/node_modules/@openai/agents-core/dist/sandbox/localSkills.mjs
6847
6845
  import { lstatSync, readdirSync, readFileSync } from "fs";
6848
6846
  import { dirname, join, resolve } from "path";
6849
- function localDirLazySkillSource(srcOrOptions) {
6850
- const options = typeof srcOrOptions === "string" ? { src: srcOrOptions } : srcOrOptions;
6851
- const sourceRoot = resolve(options.baseDir ?? process.cwd(), options.src);
6852
- return {
6853
- source: localDir({ src: sourceRoot }),
6854
- getIndex: (manifest) => discoverLocalDirSkillIndex(options, manifest.extraPathGrants)
6855
- };
6856
- }
6857
- function discoverLocalDirSkillIndex(options, sourceGrants = []) {
6858
- const base = resolve(options.baseDir ?? process.cwd());
6859
- let root;
6860
- try {
6861
- root = resolveLocalSkillSourcePath(options.src, base, sourceGrants);
6862
- } catch {
6863
- return [];
6864
- }
6865
- if (hasLocalSourceSymlinkAncestor(root) || !isDirectory(root)) {
6866
- return [];
6867
- }
6868
- return readdirSync(root, { withFileTypes: true }).filter((entry) => entry.isDirectory()).sort((left, right) => left.name.localeCompare(right.name)).flatMap((entry) => {
6869
- const skillMarkdownPath = join(root, entry.name, "SKILL.md");
6870
- if (!isRegularFileWithoutSymlink(skillMarkdownPath)) {
6871
- return [];
6872
- }
6873
- let markdown;
6874
- try {
6875
- markdown = readFileSync(skillMarkdownPath, "utf8");
6876
- } catch {
6877
- return [];
6878
- }
6879
- const frontmatter = parseSkillFrontmatter(markdown);
6880
- return [
6881
- {
6882
- name: frontmatter.name ?? entry.name,
6883
- description: frontmatter.description ?? "No description provided.",
6884
- path: entry.name
6885
- }
6886
- ];
6887
- });
6888
- }
6889
- function resolveLocalSkillSourcePath(sourcePath, base, sourceGrants) {
6890
- const resolvedSourcePath = resolve(base, sourcePath);
6891
- if (isHostPathWithinRoot(base, resolvedSourcePath) || sourceGrants.some((grant) => isHostPathWithinRoot(resolve(sandboxPathGrantHostPath(grant)), resolvedSourcePath))) {
6892
- return resolvedSourcePath;
6893
- }
6894
- throw new Error("local skill source is outside base directory");
6895
- }
6896
- function isDirectory(path) {
6897
- try {
6898
- return lstatSync(path).isDirectory();
6899
- } catch {
6900
- return false;
6901
- }
6902
- }
6903
- function hasLocalSourceSymlinkAncestor(path) {
6904
- const resolvedPath = resolve(path);
6905
- let current = dirname(resolvedPath);
6906
- while (current !== dirname(current)) {
6907
- const parent = dirname(current);
6908
- if (parent === dirname(parent)) {
6909
- break;
6910
- }
6911
- try {
6912
- if (lstatSync(current).isSymbolicLink()) {
6913
- return true;
6914
- }
6915
- } catch {
6916
- return false;
6917
- }
6918
- current = parent;
6919
- }
6920
- return false;
6921
- }
6922
- function isRegularFileWithoutSymlink(path) {
6923
- try {
6924
- return lstatSync(path).isFile();
6925
- } catch {
6926
- return false;
6927
- }
6928
- }
6929
6847
 
6930
6848
  // ../../node_modules/.bun/@openai+agents-core@0.14.3+933c5e7db4cd33c2/node_modules/@openai/agents-core/dist/sandbox/sandboxes/docker.mjs
6931
6849
  import { chmod as chmod2, mkdir as mkdir4, mkdtemp as mkdtemp4, realpath as realpath3, rm as rm4, stat as stat4 } from "fs/promises";
@@ -35927,7 +35845,6 @@ export {
35927
35845
  CAPABILITY_DESCRIPTORS,
35928
35846
  DESKTOP_STREAM_PORT,
35929
35847
  assertDescriptorRegistryInvariants,
35930
- localDirLazySkillSource,
35931
35848
  modalSandboxAttributionEnvironment,
35932
35849
  modalSandboxAttributionTags,
35933
35850
  isModalTaskExecStartDnsResolutionError,
@@ -36122,4 +36039,4 @@ export {
36122
36039
  collectSandboxEnvironment2 as collectSandboxEnvironment,
36123
36040
  parseExposedPorts2 as parseExposedPorts
36124
36041
  };
36125
- //# sourceMappingURL=chunk-WATBACLT.js.map
36042
+ //# sourceMappingURL=chunk-LGLJ5PVD.js.map