@opengeni/runtime 2.4.3 → 2.5.2-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 (44) 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-YRKIQK25.js → chunk-CD22I76N.js} +2 -2
  5. package/dist/{chunk-7K6WOXFS.js → chunk-GB763TSV.js} +17 -1
  6. package/dist/chunk-GB763TSV.js.map +1 -0
  7. package/dist/{chunk-BV2DSPZK.js → chunk-GBHOT4KS.js} +267 -181
  8. package/dist/chunk-GBHOT4KS.js.map +1 -0
  9. package/dist/{chunk-WATBACLT.js → chunk-LEIGL6X2.js} +2309 -1428
  10. package/dist/chunk-LEIGL6X2.js.map +1 -0
  11. package/dist/index.d.ts +12 -5
  12. package/dist/index.js +15 -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/archive-spool.d.ts +14 -0
  17. package/dist/sandbox/host-archive-spool.d.ts +19 -0
  18. package/dist/sandbox/index.d.ts +5 -1
  19. package/dist/sandbox/index.js +7 -3
  20. package/dist/sandbox/workspace-archive.d.ts +7 -0
  21. package/dist/skill-files.d.ts +4 -0
  22. package/dist/skill-library.d.ts +1 -1
  23. package/dist/skill-library.js +3 -1
  24. package/dist/workspace-tool-gateway.js +5 -5
  25. package/package.json +11 -11
  26. package/src/bundled_management_skills/opengeni-skills/SKILL.md +3 -1
  27. package/src/index.ts +184 -33
  28. package/src/lazy-tool-transport.ts +0 -3
  29. package/src/model-input.ts +1 -1
  30. package/src/run-events.ts +23 -0
  31. package/src/runtime-skills.ts +122 -161
  32. package/src/sandbox/archive-spool.ts +16 -0
  33. package/src/sandbox/host-archive-spool.ts +1040 -0
  34. package/src/sandbox/index.ts +292 -203
  35. package/src/sandbox/routing/routing-session.ts +1 -1
  36. package/src/sandbox/workspace-archive.ts +54 -1
  37. package/src/skill-files.ts +20 -0
  38. package/src/skill-library.ts +1 -0
  39. package/dist/chunk-7K6WOXFS.js.map +0 -1
  40. package/dist/chunk-BV2DSPZK.js.map +0 -1
  41. package/dist/chunk-WATBACLT.js.map +0 -1
  42. /package/dist/{agent-UA75SUZ7.js.map → agent-Q2VNH5FV.js.map} +0 -0
  43. /package/dist/{chunk-YRKIQK25.js.map → chunk-CD22I76N.js.map} +0 -0
  44. /package/dist/{localSources-GDQRRHT3.js.map → localSources-Z5IJIIRV.js.map} +0 -0
@@ -14,6 +14,8 @@ import {
14
14
  type WorkspaceTreeFingerprint,
15
15
  } from "@opengeni/contracts";
16
16
  import { withSandboxProviderCapture } from "./provider-operation-gate";
17
+ import type { VerifiedHostWorkspaceArchive } from "./archive-spool";
18
+ import { captureHostWorkspaceArchive, fingerprintHostWorkspace } from "./host-archive-spool";
17
19
 
18
20
  export {
19
21
  WORKSPACE_ARCHIVE_DESCRIPTOR_VERSION,
@@ -36,6 +38,55 @@ export type VerifiedWorkspaceArchive = {
36
38
  nativeSnapshot?: NativeSnapshotRef;
37
39
  };
38
40
 
41
+ export type VerifiedWorkspaceArchivePayload =
42
+ | VerifiedWorkspaceArchive
43
+ | VerifiedHostWorkspaceArchive;
44
+
45
+ /** Host-backed portable archives can go directly to object storage without an
46
+ * intermediate whole-document string or buffer. Existing inline/provider APIs
47
+ * retain their compatibility path when disk-backed publication is unavailable. */
48
+ export async function captureWorkspaceArchiveForStorage(
49
+ session: unknown,
50
+ capturedAtMs: number,
51
+ options: WorkspaceArchiveCaptureOptions,
52
+ objectStorageAvailable: boolean,
53
+ ): Promise<VerifiedWorkspaceArchivePayload> {
54
+ const target = session as WorkspaceSession;
55
+ const root = hostBackedWorkspaceRoot(target);
56
+ if (
57
+ process.platform !== "linux" ||
58
+ !root ||
59
+ !objectStorageAvailable ||
60
+ options.strategy === "portable_tar"
61
+ ) {
62
+ return await captureVerifiedWorkspaceArchive(session, capturedAtMs, options);
63
+ }
64
+ return await withSandboxProviderCapture(session, async () => {
65
+ const { spool, workspace } = await captureHostWorkspaceArchive(
66
+ root,
67
+ workspaceFingerprintExcludes(target),
68
+ );
69
+ return {
70
+ kind: "host_spool" as const,
71
+ spool,
72
+ descriptor: {
73
+ version: 1 as const,
74
+ revision: `wa1:${String(capturedAtMs).padStart(13, "0")}:${spool.sha256}`,
75
+ archiveSha256: spool.sha256,
76
+ archiveBytes: spool.byteSize,
77
+ capturedAt: new Date(capturedAtMs).toISOString(),
78
+ workspace,
79
+ },
80
+ };
81
+ });
82
+ }
83
+
84
+ export async function disposeWorkspaceArchive(
85
+ archive: VerifiedWorkspaceArchivePayload | undefined,
86
+ ): Promise<void> {
87
+ if (archive?.kind === "host_spool") await archive.spool.dispose();
88
+ }
89
+
39
90
  export type WorkspaceArchiveIntegrityCode =
40
91
  | "archive_metadata_missing"
41
92
  | "archive_metadata_invalid"
@@ -789,7 +840,9 @@ export async function verifyRestoredWorkspace(
789
840
  "selected host-backed workspace archive was restored by a non-host-backed provider",
790
841
  );
791
842
  }
792
- return fingerprintHostBackedWorkspace(root, workspaceFingerprintExcludes(target));
843
+ return process.platform === "linux"
844
+ ? fingerprintHostWorkspace(root, workspaceFingerprintExcludes(target))
845
+ : fingerprintHostBackedWorkspace(root, workspaceFingerprintExcludes(target));
793
846
  })()
794
847
  : await fingerprintRemoteWorkspace(target);
795
848
  if (!fingerprintsEqual(actual, descriptor.workspace)) {
@@ -30,6 +30,26 @@ export function assertSkillRelativePath(path: string): void {
30
30
  }
31
31
  }
32
32
 
33
+ /** Inventory shares the reader's path validation and never includes file bodies. */
34
+ export function listSkillPaths(
35
+ files: readonly SkillTextFile[],
36
+ maxFiles: number,
37
+ ): { paths: string[] } {
38
+ if (files.length > maxFiles)
39
+ throw new SkillFileError("output_too_large", `Skill inventory exceeds ${maxFiles} files.`);
40
+ const seen = new Set<string>();
41
+ for (const { path } of files) {
42
+ assertSkillRelativePath(path);
43
+ if (seen.has(path))
44
+ throw new SkillFileError("invalid_request", `Duplicate stored Skill path: ${path}`);
45
+ seen.add(path);
46
+ }
47
+ const result = { paths: [...seen].sort() };
48
+ if (new TextEncoder().encode(JSON.stringify(result)).byteLength > SKILL_READ_MAX_OUTPUT_BYTES)
49
+ throw new SkillFileError("output_too_large", "Skill inventory exceeds the read output limit.");
50
+ return result;
51
+ }
52
+
33
53
  /** Omitted paths default to the entry point; explicit paths are never expanded. */
34
54
  export function readSkillFiles(
35
55
  files: readonly SkillTextFile[],
@@ -13,6 +13,7 @@ export { parseSkillFrontmatter as parsePortableSkillFrontmatter } from "@opengen
13
13
  export {
14
14
  applySkillFileChanges,
15
15
  assertSkillRelativePath,
16
+ listSkillPaths,
16
17
  readSkillFiles,
17
18
  SkillFileError,
18
19
  SKILL_READ_MAX_OUTPUT_BYTES,
@@ -1 +0,0 @@
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 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/** 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":[]}