orchajs 0.17.0 → 0.18.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 (97) hide show
  1. package/README.md +9 -3
  2. package/dist/cli.js +4 -4
  3. package/dist/cli.js.map +1 -1
  4. package/dist/compiler/build-project.js +2 -2
  5. package/dist/env.d.ts.map +1 -1
  6. package/dist/env.js +5 -2
  7. package/dist/env.js.map +1 -1
  8. package/dist/playground/public/app.js +9 -9
  9. package/dist/playground/public/app.js.map +4 -4
  10. package/dist/playground/server.d.ts.map +1 -1
  11. package/dist/playground/server.js +9 -4
  12. package/dist/playground/server.js.map +1 -1
  13. package/dist/project-loader.js +1 -1
  14. package/dist/providers/google-gemini.d.ts +67 -4
  15. package/dist/providers/google-gemini.d.ts.map +1 -1
  16. package/dist/providers/google-gemini.js +13 -2
  17. package/dist/providers/google-gemini.js.map +1 -1
  18. package/dist/providers/google-genai.d.ts.map +1 -1
  19. package/dist/providers/google-genai.js +2 -2
  20. package/dist/providers/google-genai.js.map +1 -1
  21. package/dist/providers/index.js +11 -1
  22. package/dist/providers/index.js.map +1 -1
  23. package/dist/providers/vertex-ai.d.ts.map +1 -1
  24. package/dist/providers/vertex-ai.js +2 -2
  25. package/dist/providers/vertex-ai.js.map +1 -1
  26. package/dist/runtime/actions/context.js +25 -1
  27. package/dist/runtime/actions/context.js.map +1 -1
  28. package/dist-cjs/amarsia/metadata.js +18 -18
  29. package/dist-cjs/amarsia/metadata.js.map +2 -2
  30. package/dist-cjs/amarsia/sync.js +1 -1
  31. package/dist-cjs/cli-agents-template.js +1 -1
  32. package/dist-cjs/compiler/build-project.js +24 -24
  33. package/dist-cjs/compiler/build-project.js.map +2 -2
  34. package/dist-cjs/compiler/compile.js +31 -31
  35. package/dist-cjs/compiler/compile.js.map +2 -2
  36. package/dist-cjs/env.js +10 -7
  37. package/dist-cjs/env.js.map +2 -2
  38. package/dist-cjs/errors.js +1 -1
  39. package/dist-cjs/file-content.js +6 -6
  40. package/dist-cjs/file-content.js.map +2 -2
  41. package/dist-cjs/index.js +1 -1
  42. package/dist-cjs/integrations/esbuild.js +4 -4
  43. package/dist-cjs/integrations/esbuild.js.map +2 -2
  44. package/dist-cjs/orcha.js +4 -4
  45. package/dist-cjs/orcha.js.map +2 -2
  46. package/dist-cjs/playground/server.js +34 -30
  47. package/dist-cjs/playground/server.js.map +2 -2
  48. package/dist-cjs/playground/source.js +11 -11
  49. package/dist-cjs/playground/source.js.map +2 -2
  50. package/dist-cjs/project-loader.js +11 -11
  51. package/dist-cjs/project-loader.js.map +2 -2
  52. package/dist-cjs/providers/anthropic.js +1 -1
  53. package/dist-cjs/providers/bedrock.js +8 -8
  54. package/dist-cjs/providers/bedrock.js.map +2 -2
  55. package/dist-cjs/providers/catalog.js +1 -1
  56. package/dist-cjs/providers/deepseek.js +1 -1
  57. package/dist-cjs/providers/dispatcher.js +1 -1
  58. package/dist-cjs/providers/google-gemini.js +13 -3
  59. package/dist-cjs/providers/google-gemini.js.map +2 -2
  60. package/dist-cjs/providers/google-genai.js +2 -2
  61. package/dist-cjs/providers/google-genai.js.map +2 -2
  62. package/dist-cjs/providers/index.js +11 -1
  63. package/dist-cjs/providers/index.js.map +2 -2
  64. package/dist-cjs/providers/openai.js +1 -1
  65. package/dist-cjs/providers/sse.js +1 -1
  66. package/dist-cjs/providers/types.js +1 -1
  67. package/dist-cjs/providers/vertex-ai.js +6 -2
  68. package/dist-cjs/providers/vertex-ai.js.map +2 -2
  69. package/dist-cjs/runtime/actions/context.js +26 -2
  70. package/dist-cjs/runtime/actions/context.js.map +2 -2
  71. package/dist-cjs/runtime/actions/execute.js +1 -1
  72. package/dist-cjs/runtime/actions/native.js +3 -3
  73. package/dist-cjs/runtime/actions/native.js.map +2 -2
  74. package/dist-cjs/runtime/actions/sandbox.js +1 -1
  75. package/dist-cjs/runtime/agent.js +3 -3
  76. package/dist-cjs/runtime/agent.js.map +2 -2
  77. package/dist-cjs/runtime/context.js +1 -1
  78. package/dist-cjs/runtime/create-orcha.js +3 -3
  79. package/dist-cjs/runtime/create-orcha.js.map +2 -2
  80. package/dist-cjs/runtime/execution.js +1 -1
  81. package/dist-cjs/runtime/session-events.js +1 -1
  82. package/dist-cjs/runtime/structured-output.js +1 -1
  83. package/dist-cjs/storage/browser-indexeddb.js +1 -1
  84. package/dist-cjs/storage/create-store.js +1 -1
  85. package/dist-cjs/storage/edge-store.js +1 -1
  86. package/dist-cjs/storage/migrate.js +1 -1
  87. package/dist-cjs/storage/node-jsonl.js +10 -10
  88. package/dist-cjs/storage/node-jsonl.js.map +2 -2
  89. package/dist-cjs/storage/node-sqlite.js +7 -7
  90. package/dist-cjs/storage/node-sqlite.js.map +2 -2
  91. package/dist-cjs/storage/react-native-jsonl.js +1 -1
  92. package/dist-cjs/testing.js +17 -17
  93. package/dist-cjs/testing.js.map +2 -2
  94. package/dist-cjs/types/google-genai-sdk.d.js +3 -0
  95. package/dist-cjs/types/google-genai-sdk.d.js.map +7 -0
  96. package/dist-cjs/types.js +1 -1
  97. package/package.json +12 -8
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/amarsia/metadata.ts"],
4
- "sourcesContent": ["import { createHash } from \"node:crypto\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport type {\n CompiledActionManifest,\n CompiledAgentManifest,\n CompiledBundle,\n} from \"../types.js\";\n\nexport interface AmarsiaProjectMetadata {\n schema_version: 1;\n content_hash: string;\n project: {\n external_id: string;\n name: string;\n description?: string;\n root_path: string;\n package_name?: string;\n repository_url?: string;\n metadata: Record<string, unknown>;\n };\n agents: AmarsiaAgentMetadata[];\n}\n\nexport interface AmarsiaAgentMetadata {\n external_id: string;\n parent_external_id?: string;\n name: string;\n description?: string;\n provider?: string;\n model?: string;\n output_type?: string;\n actions: AmarsiaActionMetadata[];\n skills: AmarsiaSkillMetadata[];\n evaluations: AmarsiaEvaluationMetadata[];\n tests: AmarsiaTestMetadata[];\n metadata: Record<string, unknown>;\n}\n\nexport interface AmarsiaActionMetadata {\n key: string;\n name: string;\n description: string;\n execution?: \"client\" | \"local\";\n parameters: Record<string, unknown>;\n output_schema?: Record<string, unknown>;\n permissions: Record<string, string[]>;\n timeout_ms?: number;\n side_effect?: boolean;\n source_hash?: string;\n}\n\nexport interface AmarsiaSkillMetadata {\n key: string;\n name: string;\n description?: string;\n enabled?: boolean;\n triggers: string[];\n}\n\nexport interface AmarsiaEvaluationMetadata {\n key: string;\n name: string;\n description?: string;\n enabled?: boolean;\n provider?: string;\n model?: string;\n metrics: Array<{\n name: string;\n description?: string;\n threshold?: number;\n }>;\n}\n\nexport interface AmarsiaTestMetadata {\n key: string;\n name?: string;\n description?: string;\n enabled?: boolean;\n}\n\nexport function createAmarsiaProjectMetadata(\n bundle: CompiledBundle,\n projectRoot: string,\n): AmarsiaProjectMetadata {\n const packageInfo = readPackageInfo(projectRoot);\n const projectExternalId = hashStable({\n packageName: packageInfo.name,\n rootPath: projectRoot,\n }).slice(0, 32);\n const agents = flattenAgents(bundle.agents);\n const content = {\n project: {\n external_id: projectExternalId,\n name: packageInfo.name ?? \"Orcha project\",\n description: packageInfo.description,\n root_path: projectRoot,\n package_name: packageInfo.name,\n repository_url: packageInfo.repositoryUrl,\n metadata: {\n packageVersion: packageInfo.version,\n orchaSchemaVersion: bundle.schemaVersion,\n actionRuntime: bundle.actionRuntime,\n },\n },\n agents,\n };\n\n return {\n schema_version: 1,\n content_hash: hashStable(content),\n ...content,\n };\n}\n\nfunction flattenAgents(\n agents: Record<string, CompiledAgentManifest>,\n): AmarsiaAgentMetadata[] {\n const result: AmarsiaAgentMetadata[] = [];\n const visit = (\n manifest: CompiledAgentManifest,\n parentExternalId?: string,\n ) => {\n result.push(agentMetadata(manifest, parentExternalId));\n for (const subagent of Object.values(manifest.subagents ?? {})) {\n visit(subagent, manifest.key);\n }\n };\n\n for (const manifest of Object.values(agents)) {\n visit(manifest);\n }\n return result;\n}\n\nfunction agentMetadata(\n manifest: CompiledAgentManifest,\n parentExternalId?: string,\n): AmarsiaAgentMetadata {\n return {\n external_id: manifest.key,\n parent_external_id: parentExternalId,\n name: manifest.name,\n description: manifest.description,\n provider: manifest.provider,\n model: manifest.model,\n output_type: manifest.outputType,\n actions: Object.entries(manifest.actions ?? {}).map(([key, action]) =>\n actionMetadata(key, action),\n ),\n skills: Object.entries(manifest.skills ?? {}).map(([key, skill]) => ({\n key,\n name: skill.name,\n description: skill.description,\n enabled: skill.enabled,\n triggers: skill.triggers ?? [],\n })),\n evaluations: Object.entries(manifest.evaluations ?? {}).map(\n ([key, evaluation]) => ({\n key,\n name: evaluation.name,\n description: evaluation.description,\n enabled: evaluation.enabled,\n provider: evaluation.provider,\n model: evaluation.model,\n metrics: evaluation.metrics.map((metric) => ({\n name: metric.name,\n description: metric.description,\n threshold: metric.threshold,\n })),\n }),\n ),\n tests: [],\n metadata: {\n region: manifest.region,\n maxTokens: manifest.maxTokens,\n reasoningLevel: manifest.reasoningLevel,\n outputSchema: manifest.outputSchema,\n subagents: Object.keys(manifest.subagents ?? {}),\n subagentPolicy: manifest.subagentPolicy,\n },\n };\n}\n\nfunction actionMetadata(\n key: string,\n action: CompiledActionManifest,\n): AmarsiaActionMetadata {\n return {\n key,\n name: action.name,\n description: action.description,\n execution: action.execution,\n parameters: action.parameters,\n output_schema: action.outputSchema,\n permissions: action.permissions ?? {},\n timeout_ms: action.timeoutMs,\n side_effect: action.sideEffect,\n source_hash: action.sourceHash,\n };\n}\n\nfunction readPackageInfo(projectRoot: string): {\n name?: string;\n description?: string;\n version?: string;\n repositoryUrl?: string;\n} {\n const packagePath = join(projectRoot, \"package.json\");\n if (!existsSync(packagePath)) {\n return { repositoryUrl: normalizeRepositoryUrl(readGitRemoteUrl(projectRoot)) };\n }\n try {\n const parsed = JSON.parse(readFileSync(packagePath, \"utf8\")) as {\n name?: unknown;\n description?: unknown;\n version?: unknown;\n repository?: unknown;\n };\n return {\n name: typeof parsed.name === \"string\" ? parsed.name : undefined,\n description:\n typeof parsed.description === \"string\" ? parsed.description : undefined,\n version: typeof parsed.version === \"string\" ? parsed.version : undefined,\n repositoryUrl: normalizeRepositoryUrl(\n readPackageRepositoryUrl(parsed.repository) ??\n readGitRemoteUrl(projectRoot),\n ),\n };\n } catch {\n return { repositoryUrl: normalizeRepositoryUrl(readGitRemoteUrl(projectRoot)) };\n }\n}\n\nfunction readPackageRepositoryUrl(repository: unknown): string | undefined {\n if (typeof repository === \"string\") {\n return repository;\n }\n if (\n repository &&\n typeof repository === \"object\" &&\n typeof (repository as { url?: unknown }).url === \"string\"\n ) {\n return (repository as { url: string }).url;\n }\n return undefined;\n}\n\nfunction readGitRemoteUrl(projectRoot: string): string | undefined {\n const configPath = resolveGitConfigPath(projectRoot);\n if (!configPath || !existsSync(configPath)) {\n return undefined;\n }\n const config = readFileSync(configPath, \"utf8\");\n const origin = config.match(/\\[remote \"origin\"\\][\\s\\S]*?\\n\\s*url = (.+)/);\n return origin?.[1]?.trim();\n}\n\nfunction resolveGitConfigPath(projectRoot: string): string | undefined {\n let directory = resolve(projectRoot);\n while (true) {\n const gitPath = join(directory, \".git\");\n if (existsSync(gitPath)) {\n try {\n const gitFile = readFileSync(gitPath, \"utf8\");\n const gitDir = gitFile.match(/^gitdir: (.+)$/m)?.[1]?.trim();\n if (gitDir) {\n return join(resolve(directory, gitDir), \"config\");\n }\n } catch {\n return join(gitPath, \"config\");\n }\n return join(dirname(gitPath), \".git\", \"config\");\n }\n const parent = dirname(directory);\n if (parent === directory) {\n return undefined;\n }\n directory = parent;\n }\n}\n\nfunction normalizeRepositoryUrl(url: string | undefined): string | undefined {\n return url\n ?.replace(/^git\\+/, \"\")\n .replace(/^git@github\\.com:/, \"https://github.com/\")\n .replace(/\\.git$/, \"\");\n}\n\nfunction hashStable(value: unknown): string {\n return createHash(\"sha256\")\n .update(JSON.stringify(sortStable(value)))\n .digest(\"hex\");\n}\n\nfunction sortStable(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(sortStable);\n }\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .filter(([, entry]) => entry !== undefined)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entry]) => [key, sortStable(entry)]),\n );\n }\n return value;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { createHash } from \"crypto\";\nimport { existsSync, readFileSync } from \"fs\";\nimport { dirname, join, resolve } from \"path\";\nimport type {\n CompiledActionManifest,\n CompiledAgentManifest,\n CompiledBundle,\n} from \"../types.js\";\n\nexport interface AmarsiaProjectMetadata {\n schema_version: 1;\n content_hash: string;\n project: {\n external_id: string;\n name: string;\n description?: string;\n root_path: string;\n package_name?: string;\n repository_url?: string;\n metadata: Record<string, unknown>;\n };\n agents: AmarsiaAgentMetadata[];\n}\n\nexport interface AmarsiaAgentMetadata {\n external_id: string;\n parent_external_id?: string;\n name: string;\n description?: string;\n provider?: string;\n model?: string;\n output_type?: string;\n actions: AmarsiaActionMetadata[];\n skills: AmarsiaSkillMetadata[];\n evaluations: AmarsiaEvaluationMetadata[];\n tests: AmarsiaTestMetadata[];\n metadata: Record<string, unknown>;\n}\n\nexport interface AmarsiaActionMetadata {\n key: string;\n name: string;\n description: string;\n execution?: \"client\" | \"local\";\n parameters: Record<string, unknown>;\n output_schema?: Record<string, unknown>;\n permissions: Record<string, string[]>;\n timeout_ms?: number;\n side_effect?: boolean;\n source_hash?: string;\n}\n\nexport interface AmarsiaSkillMetadata {\n key: string;\n name: string;\n description?: string;\n enabled?: boolean;\n triggers: string[];\n}\n\nexport interface AmarsiaEvaluationMetadata {\n key: string;\n name: string;\n description?: string;\n enabled?: boolean;\n provider?: string;\n model?: string;\n metrics: Array<{\n name: string;\n description?: string;\n threshold?: number;\n }>;\n}\n\nexport interface AmarsiaTestMetadata {\n key: string;\n name?: string;\n description?: string;\n enabled?: boolean;\n}\n\nexport function createAmarsiaProjectMetadata(\n bundle: CompiledBundle,\n projectRoot: string,\n): AmarsiaProjectMetadata {\n const packageInfo = readPackageInfo(projectRoot);\n const projectExternalId = hashStable({\n packageName: packageInfo.name,\n rootPath: projectRoot,\n }).slice(0, 32);\n const agents = flattenAgents(bundle.agents);\n const content = {\n project: {\n external_id: projectExternalId,\n name: packageInfo.name ?? \"Orcha project\",\n description: packageInfo.description,\n root_path: projectRoot,\n package_name: packageInfo.name,\n repository_url: packageInfo.repositoryUrl,\n metadata: {\n packageVersion: packageInfo.version,\n orchaSchemaVersion: bundle.schemaVersion,\n actionRuntime: bundle.actionRuntime,\n },\n },\n agents,\n };\n\n return {\n schema_version: 1,\n content_hash: hashStable(content),\n ...content,\n };\n}\n\nfunction flattenAgents(\n agents: Record<string, CompiledAgentManifest>,\n): AmarsiaAgentMetadata[] {\n const result: AmarsiaAgentMetadata[] = [];\n const visit = (\n manifest: CompiledAgentManifest,\n parentExternalId?: string,\n ) => {\n result.push(agentMetadata(manifest, parentExternalId));\n for (const subagent of Object.values(manifest.subagents ?? {})) {\n visit(subagent, manifest.key);\n }\n };\n\n for (const manifest of Object.values(agents)) {\n visit(manifest);\n }\n return result;\n}\n\nfunction agentMetadata(\n manifest: CompiledAgentManifest,\n parentExternalId?: string,\n): AmarsiaAgentMetadata {\n return {\n external_id: manifest.key,\n parent_external_id: parentExternalId,\n name: manifest.name,\n description: manifest.description,\n provider: manifest.provider,\n model: manifest.model,\n output_type: manifest.outputType,\n actions: Object.entries(manifest.actions ?? {}).map(([key, action]) =>\n actionMetadata(key, action),\n ),\n skills: Object.entries(manifest.skills ?? {}).map(([key, skill]) => ({\n key,\n name: skill.name,\n description: skill.description,\n enabled: skill.enabled,\n triggers: skill.triggers ?? [],\n })),\n evaluations: Object.entries(manifest.evaluations ?? {}).map(\n ([key, evaluation]) => ({\n key,\n name: evaluation.name,\n description: evaluation.description,\n enabled: evaluation.enabled,\n provider: evaluation.provider,\n model: evaluation.model,\n metrics: evaluation.metrics.map((metric) => ({\n name: metric.name,\n description: metric.description,\n threshold: metric.threshold,\n })),\n }),\n ),\n tests: [],\n metadata: {\n region: manifest.region,\n maxTokens: manifest.maxTokens,\n reasoningLevel: manifest.reasoningLevel,\n outputSchema: manifest.outputSchema,\n subagents: Object.keys(manifest.subagents ?? {}),\n subagentPolicy: manifest.subagentPolicy,\n },\n };\n}\n\nfunction actionMetadata(\n key: string,\n action: CompiledActionManifest,\n): AmarsiaActionMetadata {\n return {\n key,\n name: action.name,\n description: action.description,\n execution: action.execution,\n parameters: action.parameters,\n output_schema: action.outputSchema,\n permissions: action.permissions ?? {},\n timeout_ms: action.timeoutMs,\n side_effect: action.sideEffect,\n source_hash: action.sourceHash,\n };\n}\n\nfunction readPackageInfo(projectRoot: string): {\n name?: string;\n description?: string;\n version?: string;\n repositoryUrl?: string;\n} {\n const packagePath = join(projectRoot, \"package.json\");\n if (!existsSync(packagePath)) {\n return { repositoryUrl: normalizeRepositoryUrl(readGitRemoteUrl(projectRoot)) };\n }\n try {\n const parsed = JSON.parse(readFileSync(packagePath, \"utf8\")) as {\n name?: unknown;\n description?: unknown;\n version?: unknown;\n repository?: unknown;\n };\n return {\n name: typeof parsed.name === \"string\" ? parsed.name : undefined,\n description:\n typeof parsed.description === \"string\" ? parsed.description : undefined,\n version: typeof parsed.version === \"string\" ? parsed.version : undefined,\n repositoryUrl: normalizeRepositoryUrl(\n readPackageRepositoryUrl(parsed.repository) ??\n readGitRemoteUrl(projectRoot),\n ),\n };\n } catch {\n return { repositoryUrl: normalizeRepositoryUrl(readGitRemoteUrl(projectRoot)) };\n }\n}\n\nfunction readPackageRepositoryUrl(repository: unknown): string | undefined {\n if (typeof repository === \"string\") {\n return repository;\n }\n if (\n repository &&\n typeof repository === \"object\" &&\n typeof (repository as { url?: unknown }).url === \"string\"\n ) {\n return (repository as { url: string }).url;\n }\n return undefined;\n}\n\nfunction readGitRemoteUrl(projectRoot: string): string | undefined {\n const configPath = resolveGitConfigPath(projectRoot);\n if (!configPath || !existsSync(configPath)) {\n return undefined;\n }\n const config = readFileSync(configPath, \"utf8\");\n const origin = config.match(/\\[remote \"origin\"\\][\\s\\S]*?\\n\\s*url = (.+)/);\n return origin?.[1]?.trim();\n}\n\nfunction resolveGitConfigPath(projectRoot: string): string | undefined {\n let directory = resolve(projectRoot);\n while (true) {\n const gitPath = join(directory, \".git\");\n if (existsSync(gitPath)) {\n try {\n const gitFile = readFileSync(gitPath, \"utf8\");\n const gitDir = gitFile.match(/^gitdir: (.+)$/m)?.[1]?.trim();\n if (gitDir) {\n return join(resolve(directory, gitDir), \"config\");\n }\n } catch {\n return join(gitPath, \"config\");\n }\n return join(dirname(gitPath), \".git\", \"config\");\n }\n const parent = dirname(directory);\n if (parent === directory) {\n return undefined;\n }\n directory = parent;\n }\n}\n\nfunction normalizeRepositoryUrl(url: string | undefined): string | undefined {\n return url\n ?.replace(/^git\\+/, \"\")\n .replace(/^git@github\\.com:/, \"https://github.com/\")\n .replace(/\\.git$/, \"\");\n}\n\nfunction hashStable(value: unknown): string {\n return createHash(\"sha256\")\n .update(JSON.stringify(sortStable(value)))\n .digest(\"hex\");\n}\n\nfunction sortStable(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(sortStable);\n }\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .filter(([, entry]) => entry !== undefined)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entry]) => [key, sortStable(entry)]),\n );\n }\n return value;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,4 @@
1
- "use strict"; const __orchaImportMetaUrl = require("node:url").pathToFileURL(__filename).href;
1
+ "use strict"; const __orchaImportMetaUrl = require("url").pathToFileURL(__filename).href;
2
2
  "use strict";
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -1,4 +1,4 @@
1
- "use strict"; const __orchaImportMetaUrl = require("node:url").pathToFileURL(__filename).href;
1
+ "use strict"; const __orchaImportMetaUrl = require("url").pathToFileURL(__filename).href;
2
2
  "use strict";
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -1,4 +1,4 @@
1
- "use strict"; const __orchaImportMetaUrl = require("node:url").pathToFileURL(__filename).href;
1
+ "use strict"; const __orchaImportMetaUrl = require("url").pathToFileURL(__filename).href;
2
2
  "use strict";
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -22,28 +22,28 @@ __export(build_project_exports, {
22
22
  buildProject: () => buildProject
23
23
  });
24
24
  module.exports = __toCommonJS(build_project_exports);
25
- var import_node_fs = require("node:fs");
26
- var import_promises = require("node:fs/promises");
27
- var import_node_path = require("node:path");
28
- var import_node_url = require("node:url");
25
+ var import_fs = require("fs");
26
+ var import_promises = require("fs/promises");
27
+ var import_path = require("path");
28
+ var import_url = require("url");
29
29
  var import_esbuild = require("esbuild");
30
30
  var import_orcha = require("../orcha.js");
31
31
  var import_catalog = require("../providers/catalog.js");
32
32
  async function buildProject(options = {}) {
33
- const projectRoot = (0, import_node_path.resolve)(options.projectRoot ?? process.cwd());
34
- const registryPath = (0, import_node_path.resolve)(projectRoot, "orcha/index.ts");
35
- if (!(0, import_node_fs.existsSync)(registryPath)) {
33
+ const projectRoot = (0, import_path.resolve)(options.projectRoot ?? process.cwd());
34
+ const registryPath = (0, import_path.resolve)(projectRoot, "orcha/index.ts");
35
+ if (!(0, import_fs.existsSync)(registryPath)) {
36
36
  throw new Error('Missing "orcha/index.ts". Run "orcha init" first.');
37
37
  }
38
- const temporaryDirectory = (0, import_node_path.resolve)(projectRoot, ".orcha/.build");
39
- const registryBundlePath = (0, import_node_path.resolve)(temporaryDirectory, "registry.mjs");
40
- const productionEntryPath = (0, import_node_path.resolve)(
38
+ const temporaryDirectory = (0, import_path.resolve)(projectRoot, ".orcha/.build");
39
+ const registryBundlePath = (0, import_path.resolve)(temporaryDirectory, "registry.mjs");
40
+ const productionEntryPath = (0, import_path.resolve)(
41
41
  temporaryDirectory,
42
42
  "production-entry.mjs"
43
43
  );
44
- const outputPath = (0, import_node_path.resolve)(projectRoot, ".orcha/dist/bundle.js");
44
+ const outputPath = (0, import_path.resolve)(projectRoot, ".orcha/dist/bundle.js");
45
45
  await (0, import_promises.mkdir)(temporaryDirectory, { recursive: true });
46
- await (0, import_promises.mkdir)((0, import_node_path.dirname)(outputPath), { recursive: true });
46
+ await (0, import_promises.mkdir)((0, import_path.dirname)(outputPath), { recursive: true });
47
47
  try {
48
48
  await (0, import_esbuild.build)({
49
49
  entryPoints: [registryPath],
@@ -51,7 +51,7 @@ async function buildProject(options = {}) {
51
51
  bundle: true,
52
52
  format: "esm",
53
53
  platform: "node",
54
- target: "node20",
54
+ target: "node18",
55
55
  packages: "external",
56
56
  logLevel: "silent"
57
57
  });
@@ -60,7 +60,7 @@ async function buildProject(options = {}) {
60
60
  process.env.ORCHA_COMPILING = "1";
61
61
  process.env.ORCHA_PROJECT_ROOT = projectRoot;
62
62
  try {
63
- await import(`${(0, import_node_url.pathToFileURL)(registryBundlePath).href}?time=${Date.now()}`);
63
+ await import(`${(0, import_url.pathToFileURL)(registryBundlePath).href}?time=${Date.now()}`);
64
64
  } finally {
65
65
  if (previousCompiling === void 0) {
66
66
  delete process.env.ORCHA_COMPILING;
@@ -74,12 +74,12 @@ async function buildProject(options = {}) {
74
74
  }
75
75
  }
76
76
  const compiledBundle = import_orcha.orcha.getCompiledBundle();
77
- const runtimeFactoryPath = (0, import_node_path.resolve)(
78
- (0, import_node_path.dirname)((0, import_node_url.fileURLToPath)(__orchaImportMetaUrl)),
77
+ const runtimeFactoryPath = (0, import_path.resolve)(
78
+ (0, import_path.dirname)((0, import_url.fileURLToPath)(__orchaImportMetaUrl)),
79
79
  "../runtime/create-orcha.js"
80
80
  ).replaceAll("\\", "/");
81
- const providerDispatcherPath = (0, import_node_path.resolve)(
82
- (0, import_node_path.dirname)((0, import_node_url.fileURLToPath)(__orchaImportMetaUrl)),
81
+ const providerDispatcherPath = (0, import_path.resolve)(
82
+ (0, import_path.dirname)((0, import_url.fileURLToPath)(__orchaImportMetaUrl)),
83
83
  "../providers/dispatcher.js"
84
84
  ).replaceAll("\\", "/");
85
85
  const includedProviders = [
@@ -114,7 +114,7 @@ async function buildProject(options = {}) {
114
114
  bundle: true,
115
115
  format: "esm",
116
116
  platform: "node",
117
- target: "node20",
117
+ target: "node18",
118
118
  minify: true,
119
119
  legalComments: "none",
120
120
  define: {
@@ -125,7 +125,7 @@ async function buildProject(options = {}) {
125
125
  ...needsNodeRequire ? {
126
126
  banner: {
127
127
  js: [
128
- 'import { createRequire as __orchaCreateRequire } from "node:module";',
128
+ 'import { createRequire as __orchaCreateRequire } from "module";',
129
129
  "const require = __orchaCreateRequire(import.meta.url);"
130
130
  ].join("\n")
131
131
  }
@@ -147,8 +147,8 @@ function allCompiledAgents(agents) {
147
147
  ]);
148
148
  }
149
149
  function createProviderRuntimeSource(providerNames) {
150
- const providersDirectory = (0, import_node_path.resolve)(
151
- (0, import_node_path.dirname)((0, import_node_url.fileURLToPath)(__orchaImportMetaUrl)),
150
+ const providersDirectory = (0, import_path.resolve)(
151
+ (0, import_path.dirname)((0, import_url.fileURLToPath)(__orchaImportMetaUrl)),
152
152
  "../providers"
153
153
  );
154
154
  const imports = [];
@@ -161,7 +161,7 @@ function createProviderRuntimeSource(providerNames) {
161
161
  const localName = `provider${index}`;
162
162
  imports.push(
163
163
  `import { ${descriptor.exportName} as ${localName} } from ${JSON.stringify(
164
- (0, import_node_path.resolve)(providersDirectory, descriptor.moduleFile)
164
+ (0, import_path.resolve)(providersDirectory, descriptor.moduleFile)
165
165
  )};`
166
166
  );
167
167
  entries.push(`${JSON.stringify(name)}: ${localName}`);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/compiler/build-project.ts"],
4
- "sourcesContent": ["import { existsSync } from \"node:fs\";\nimport { mkdir, rm, writeFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport { build as bundleEntry } from \"esbuild\";\nimport { orcha } from \"../orcha.js\";\nimport {\n builtInProviderCatalog,\n isBuiltInProvider,\n} from \"../providers/catalog.js\";\nimport type {\n CompiledAgentManifest,\n CompiledBundle,\n} from \"../types.js\";\n\nexport interface BuildProjectOptions {\n projectRoot?: string;\n}\n\nexport async function buildProject(\n options: BuildProjectOptions = {},\n): Promise<string> {\n const projectRoot = resolve(options.projectRoot ?? process.cwd());\n const registryPath = resolve(projectRoot, \"orcha/index.ts\");\n if (!existsSync(registryPath)) {\n throw new Error('Missing \"orcha/index.ts\". Run \"orcha init\" first.');\n }\n\n const temporaryDirectory = resolve(projectRoot, \".orcha/.build\");\n const registryBundlePath = resolve(temporaryDirectory, \"registry.mjs\");\n const productionEntryPath = resolve(\n temporaryDirectory,\n \"production-entry.mjs\",\n );\n const outputPath = resolve(projectRoot, \".orcha/dist/bundle.js\");\n await mkdir(temporaryDirectory, { recursive: true });\n await mkdir(dirname(outputPath), { recursive: true });\n\n try {\n await bundleEntry({\n entryPoints: [registryPath],\n outfile: registryBundlePath,\n bundle: true,\n format: \"esm\",\n platform: \"node\",\n target: \"node20\",\n packages: \"external\",\n logLevel: \"silent\",\n });\n\n const previousCompiling = process.env.ORCHA_COMPILING;\n const previousProjectRoot = process.env.ORCHA_PROJECT_ROOT;\n process.env.ORCHA_COMPILING = \"1\";\n process.env.ORCHA_PROJECT_ROOT = projectRoot;\n try {\n await import(\n `${pathToFileURL(registryBundlePath).href}?time=${Date.now()}`\n );\n } finally {\n if (previousCompiling === undefined) {\n delete process.env.ORCHA_COMPILING;\n } else {\n process.env.ORCHA_COMPILING = previousCompiling;\n }\n if (previousProjectRoot === undefined) {\n delete process.env.ORCHA_PROJECT_ROOT;\n } else {\n process.env.ORCHA_PROJECT_ROOT = previousProjectRoot;\n }\n }\n const compiledBundle = orcha.getCompiledBundle();\n const runtimeFactoryPath = resolve(\n dirname(fileURLToPath(import.meta.url)),\n \"../runtime/create-orcha.js\",\n ).replaceAll(\"\\\\\", \"/\");\n const providerDispatcherPath = resolve(\n dirname(fileURLToPath(import.meta.url)),\n \"../providers/dispatcher.js\",\n ).replaceAll(\"\\\\\", \"/\");\n const includedProviders = [\n ...new Set(\n allCompiledAgents(compiledBundle.agents).flatMap(\n (agent) => [\n agent.provider,\n ...Object.values(agent.evaluations ?? {})\n .filter((evaluation) => evaluation.enabled !== false)\n .map((evaluation) => evaluation.provider),\n ],\n ),\n ),\n ];\n const providerRuntimeSource =\n createProviderRuntimeSource(includedProviders);\n const needsNodeRequire =\n compiledBundle.actionRuntime === \"sandbox\" ||\n includedProviders.includes(\"vertexai\") ||\n includedProviders.includes(\"bedrock\");\n\n await writeFile(\n productionEntryPath,\n [\n `import { createOrcha } from ${JSON.stringify(runtimeFactoryPath)};`,\n `import { createProviderResponseGenerator } from ${JSON.stringify(providerDispatcherPath)};`,\n providerRuntimeSource,\n `const compiledBundle = ${JSON.stringify(compiledBundle)};`,\n \"const generateProviderResponse = createProviderResponseGenerator(includedProviders);\",\n \"export const orcha = createOrcha(() => compiledBundle, generateProviderResponse);\",\n \"export default orcha;\",\n \"\",\n ].join(\"\\n\"),\n \"utf8\",\n );\n await bundleEntry({\n entryPoints: [productionEntryPath],\n outfile: outputPath,\n bundle: true,\n format: \"esm\",\n platform: \"node\",\n target: \"node20\",\n minify: true,\n legalComments: \"none\",\n define: {\n \"process.env.ORCHA_INCLUDE_SANDBOX\": JSON.stringify(\n compiledBundle.actionRuntime === \"sandbox\" ? \"1\" : \"0\",\n ),\n },\n ...(needsNodeRequire\n ? {\n banner: {\n js: [\n 'import { createRequire as __orchaCreateRequire } from \"node:module\";',\n \"const require = __orchaCreateRequire(import.meta.url);\",\n ].join(\"\\n\"),\n },\n }\n : {}),\n logLevel: \"silent\",\n });\n\n return outputPath;\n } finally {\n await rm(temporaryDirectory, {\n recursive: true,\n force: true,\n });\n }\n}\n\nfunction allCompiledAgents(\n agents: CompiledBundle[\"agents\"],\n): CompiledAgentManifest[] {\n return Object.values(agents).flatMap((agent) => [\n agent,\n ...Object.values(agent.subagents ?? {}),\n ]);\n}\n\nfunction createProviderRuntimeSource(providerNames: string[]): string {\n const providersDirectory = resolve(\n dirname(fileURLToPath(import.meta.url)),\n \"../providers\",\n );\n const imports: string[] = [];\n const entries: string[] = [];\n\n for (const [index, name] of providerNames.entries()) {\n if (!isBuiltInProvider(name)) {\n throw new Error(`Provider \"${name}\" is not built in.`);\n }\n const descriptor = builtInProviderCatalog[name];\n const localName = `provider${index}`;\n imports.push(\n `import { ${descriptor.exportName} as ${localName} } from ${JSON.stringify(\n resolve(providersDirectory, descriptor.moduleFile),\n )};`,\n );\n entries.push(`${JSON.stringify(name)}: ${localName}`);\n }\n\n const contents = [\n ...imports,\n `const includedProviders = { ${entries.join(\", \")} };`,\n \"\",\n ].join(\"\\n\");\n\n return contents;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { existsSync } from \"fs\";\nimport { mkdir, rm, writeFile } from \"fs/promises\";\nimport { dirname, resolve } from \"path\";\nimport { fileURLToPath, pathToFileURL } from \"url\";\nimport { build as bundleEntry } from \"esbuild\";\nimport { orcha } from \"../orcha.js\";\nimport {\n builtInProviderCatalog,\n isBuiltInProvider,\n} from \"../providers/catalog.js\";\nimport type {\n CompiledAgentManifest,\n CompiledBundle,\n} from \"../types.js\";\n\nexport interface BuildProjectOptions {\n projectRoot?: string;\n}\n\nexport async function buildProject(\n options: BuildProjectOptions = {},\n): Promise<string> {\n const projectRoot = resolve(options.projectRoot ?? process.cwd());\n const registryPath = resolve(projectRoot, \"orcha/index.ts\");\n if (!existsSync(registryPath)) {\n throw new Error('Missing \"orcha/index.ts\". Run \"orcha init\" first.');\n }\n\n const temporaryDirectory = resolve(projectRoot, \".orcha/.build\");\n const registryBundlePath = resolve(temporaryDirectory, \"registry.mjs\");\n const productionEntryPath = resolve(\n temporaryDirectory,\n \"production-entry.mjs\",\n );\n const outputPath = resolve(projectRoot, \".orcha/dist/bundle.js\");\n await mkdir(temporaryDirectory, { recursive: true });\n await mkdir(dirname(outputPath), { recursive: true });\n\n try {\n await bundleEntry({\n entryPoints: [registryPath],\n outfile: registryBundlePath,\n bundle: true,\n format: \"esm\",\n platform: \"node\",\n target: \"node18\",\n packages: \"external\",\n logLevel: \"silent\",\n });\n\n const previousCompiling = process.env.ORCHA_COMPILING;\n const previousProjectRoot = process.env.ORCHA_PROJECT_ROOT;\n process.env.ORCHA_COMPILING = \"1\";\n process.env.ORCHA_PROJECT_ROOT = projectRoot;\n try {\n await import(\n `${pathToFileURL(registryBundlePath).href}?time=${Date.now()}`\n );\n } finally {\n if (previousCompiling === undefined) {\n delete process.env.ORCHA_COMPILING;\n } else {\n process.env.ORCHA_COMPILING = previousCompiling;\n }\n if (previousProjectRoot === undefined) {\n delete process.env.ORCHA_PROJECT_ROOT;\n } else {\n process.env.ORCHA_PROJECT_ROOT = previousProjectRoot;\n }\n }\n const compiledBundle = orcha.getCompiledBundle();\n const runtimeFactoryPath = resolve(\n dirname(fileURLToPath(import.meta.url)),\n \"../runtime/create-orcha.js\",\n ).replaceAll(\"\\\\\", \"/\");\n const providerDispatcherPath = resolve(\n dirname(fileURLToPath(import.meta.url)),\n \"../providers/dispatcher.js\",\n ).replaceAll(\"\\\\\", \"/\");\n const includedProviders = [\n ...new Set(\n allCompiledAgents(compiledBundle.agents).flatMap(\n (agent) => [\n agent.provider,\n ...Object.values(agent.evaluations ?? {})\n .filter((evaluation) => evaluation.enabled !== false)\n .map((evaluation) => evaluation.provider),\n ],\n ),\n ),\n ];\n const providerRuntimeSource =\n createProviderRuntimeSource(includedProviders);\n const needsNodeRequire =\n compiledBundle.actionRuntime === \"sandbox\" ||\n includedProviders.includes(\"vertexai\") ||\n includedProviders.includes(\"bedrock\");\n\n await writeFile(\n productionEntryPath,\n [\n `import { createOrcha } from ${JSON.stringify(runtimeFactoryPath)};`,\n `import { createProviderResponseGenerator } from ${JSON.stringify(providerDispatcherPath)};`,\n providerRuntimeSource,\n `const compiledBundle = ${JSON.stringify(compiledBundle)};`,\n \"const generateProviderResponse = createProviderResponseGenerator(includedProviders);\",\n \"export const orcha = createOrcha(() => compiledBundle, generateProviderResponse);\",\n \"export default orcha;\",\n \"\",\n ].join(\"\\n\"),\n \"utf8\",\n );\n await bundleEntry({\n entryPoints: [productionEntryPath],\n outfile: outputPath,\n bundle: true,\n format: \"esm\",\n platform: \"node\",\n target: \"node18\",\n minify: true,\n legalComments: \"none\",\n define: {\n \"process.env.ORCHA_INCLUDE_SANDBOX\": JSON.stringify(\n compiledBundle.actionRuntime === \"sandbox\" ? \"1\" : \"0\",\n ),\n },\n ...(needsNodeRequire\n ? {\n banner: {\n js: [\n 'import { createRequire as __orchaCreateRequire } from \"module\";',\n \"const require = __orchaCreateRequire(import.meta.url);\",\n ].join(\"\\n\"),\n },\n }\n : {}),\n logLevel: \"silent\",\n });\n\n return outputPath;\n } finally {\n await rm(temporaryDirectory, {\n recursive: true,\n force: true,\n });\n }\n}\n\nfunction allCompiledAgents(\n agents: CompiledBundle[\"agents\"],\n): CompiledAgentManifest[] {\n return Object.values(agents).flatMap((agent) => [\n agent,\n ...Object.values(agent.subagents ?? {}),\n ]);\n}\n\nfunction createProviderRuntimeSource(providerNames: string[]): string {\n const providersDirectory = resolve(\n dirname(fileURLToPath(import.meta.url)),\n \"../providers\",\n );\n const imports: string[] = [];\n const entries: string[] = [];\n\n for (const [index, name] of providerNames.entries()) {\n if (!isBuiltInProvider(name)) {\n throw new Error(`Provider \"${name}\" is not built in.`);\n }\n const descriptor = builtInProviderCatalog[name];\n const localName = `provider${index}`;\n imports.push(\n `import { ${descriptor.exportName} as ${localName} } from ${JSON.stringify(\n resolve(providersDirectory, descriptor.moduleFile),\n )};`,\n );\n entries.push(`${JSON.stringify(name)}: ${localName}`);\n }\n\n const contents = [\n ...imports,\n `const includedProviders = { ${entries.join(\", \")} };`,\n \"\",\n ].join(\"\\n\");\n\n return contents;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["bundleEntry"]
7
7
  }
@@ -1,4 +1,4 @@
1
- "use strict"; const __orchaImportMetaUrl = require("node:url").pathToFileURL(__filename).href;
1
+ "use strict"; const __orchaImportMetaUrl = require("url").pathToFileURL(__filename).href;
2
2
  "use strict";
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -23,9 +23,9 @@ __export(compile_exports, {
23
23
  serializeBundle: () => serializeBundle
24
24
  });
25
25
  module.exports = __toCommonJS(compile_exports);
26
- var import_node_crypto = require("node:crypto");
27
- var import_node_fs = require("node:fs");
28
- var import_node_path = require("node:path");
26
+ var import_crypto = require("crypto");
27
+ var import_fs = require("fs");
28
+ var import_path = require("path");
29
29
  var import_esbuild = require("esbuild");
30
30
  var import_catalog = require("../providers/catalog.js");
31
31
  function compileRegistry(registrations, registryRoot, actionRuntime = "native") {
@@ -110,12 +110,12 @@ function normalizeAgentRegistration(key, registration) {
110
110
  }
111
111
  function compileAgent(key, registeredPath, registryRoot, actionRuntime) {
112
112
  const name = key;
113
- const sourceDirectory = (0, import_node_path.resolve)(registryRoot, registeredPath);
114
- const configPath = (0, import_node_path.resolve)(sourceDirectory, "index.json");
113
+ const sourceDirectory = (0, import_path.resolve)(registryRoot, registeredPath);
114
+ const configPath = (0, import_path.resolve)(sourceDirectory, "index.json");
115
115
  let configuration;
116
116
  try {
117
117
  configuration = JSON.parse(
118
- (0, import_node_fs.readFileSync)(configPath, "utf8")
118
+ (0, import_fs.readFileSync)(configPath, "utf8")
119
119
  );
120
120
  } catch (error) {
121
121
  throw new Error(
@@ -170,10 +170,10 @@ function compileAgent(key, registeredPath, registryRoot, actionRuntime) {
170
170
  `Agent "${name}" must configure outputSchema when outputType is "json".`
171
171
  );
172
172
  }
173
- const instructionsPath = (0, import_node_path.resolve)(sourceDirectory, "instructions.md");
173
+ const instructionsPath = (0, import_path.resolve)(sourceDirectory, "instructions.md");
174
174
  let systemPrompt;
175
175
  try {
176
- systemPrompt = (0, import_node_fs.readFileSync)(instructionsPath, "utf8").trim();
176
+ systemPrompt = (0, import_fs.readFileSync)(instructionsPath, "utf8").trim();
177
177
  } catch (error) {
178
178
  throw new Error(
179
179
  `Agent "${name}" is missing required instructions.md at ${instructionsPath}.`,
@@ -203,16 +203,16 @@ function compileAgent(key, registeredPath, registryRoot, actionRuntime) {
203
203
  });
204
204
  }
205
205
  function compileActions(agentName, sourceDirectory, actionRuntime) {
206
- const actionsDirectory = (0, import_node_path.resolve)(sourceDirectory, "actions");
207
- if (!(0, import_node_fs.existsSync)(actionsDirectory)) {
206
+ const actionsDirectory = (0, import_path.resolve)(sourceDirectory, "actions");
207
+ if (!(0, import_fs.existsSync)(actionsDirectory)) {
208
208
  return {};
209
209
  }
210
210
  const actions = {};
211
- for (const entry of (0, import_node_fs.readdirSync)(actionsDirectory, { withFileTypes: true })) {
211
+ for (const entry of (0, import_fs.readdirSync)(actionsDirectory, { withFileTypes: true })) {
212
212
  if (!entry.isDirectory()) {
213
213
  continue;
214
214
  }
215
- const configurationPath = (0, import_node_path.resolve)(
215
+ const configurationPath = (0, import_path.resolve)(
216
216
  actionsDirectory,
217
217
  entry.name,
218
218
  "index.json"
@@ -220,7 +220,7 @@ function compileActions(agentName, sourceDirectory, actionRuntime) {
220
220
  let configuration;
221
221
  try {
222
222
  configuration = JSON.parse(
223
- (0, import_node_fs.readFileSync)(configurationPath, "utf8")
223
+ (0, import_fs.readFileSync)(configurationPath, "utf8")
224
224
  );
225
225
  } catch (error) {
226
226
  throw new Error(
@@ -318,19 +318,19 @@ function compileActions(agentName, sourceDirectory, actionRuntime) {
318
318
  return Object.freeze(actions);
319
319
  }
320
320
  function compileSkills(agentName, sourceDirectory) {
321
- const skillsDirectory = (0, import_node_path.resolve)(sourceDirectory, "skills");
322
- if (!(0, import_node_fs.existsSync)(skillsDirectory)) {
321
+ const skillsDirectory = (0, import_path.resolve)(sourceDirectory, "skills");
322
+ if (!(0, import_fs.existsSync)(skillsDirectory)) {
323
323
  return {};
324
324
  }
325
325
  rejectLegacyRegistry(agentName, skillsDirectory, "skills");
326
326
  const skills = {};
327
327
  for (const entry of discoverDirectories(skillsDirectory)) {
328
- const skillDirectory = (0, import_node_path.resolve)(skillsDirectory, entry);
329
- const configurationPath = (0, import_node_path.resolve)(skillDirectory, "index.json");
328
+ const skillDirectory = (0, import_path.resolve)(skillsDirectory, entry);
329
+ const configurationPath = (0, import_path.resolve)(skillDirectory, "index.json");
330
330
  let configuration;
331
331
  try {
332
332
  configuration = JSON.parse(
333
- (0, import_node_fs.readFileSync)(configurationPath, "utf8")
333
+ (0, import_fs.readFileSync)(configurationPath, "utf8")
334
334
  );
335
335
  } catch (error) {
336
336
  throw new Error(
@@ -343,10 +343,10 @@ function compileSkills(agentName, sourceDirectory) {
343
343
  continue;
344
344
  }
345
345
  validateSkillConfiguration(agentName, entry, configuration);
346
- const instructionsPath = (0, import_node_path.resolve)(skillDirectory, "instructions.md");
346
+ const instructionsPath = (0, import_path.resolve)(skillDirectory, "instructions.md");
347
347
  let instructions;
348
348
  try {
349
- instructions = (0, import_node_fs.readFileSync)(instructionsPath, "utf8").trim();
349
+ instructions = (0, import_fs.readFileSync)(instructionsPath, "utf8").trim();
350
350
  } catch (error) {
351
351
  throw new Error(
352
352
  `Skill "${agentName}/${entry}" is missing instructions.md at ${instructionsPath}.`,
@@ -372,19 +372,19 @@ function compileSkills(agentName, sourceDirectory) {
372
372
  return Object.freeze(skills);
373
373
  }
374
374
  function compileEvaluations(agentName, sourceDirectory) {
375
- const evaluationsDirectory = (0, import_node_path.resolve)(sourceDirectory, "evaluations");
376
- if (!(0, import_node_fs.existsSync)(evaluationsDirectory)) {
375
+ const evaluationsDirectory = (0, import_path.resolve)(sourceDirectory, "evaluations");
376
+ if (!(0, import_fs.existsSync)(evaluationsDirectory)) {
377
377
  return {};
378
378
  }
379
379
  rejectLegacyRegistry(agentName, evaluationsDirectory, "evaluations");
380
380
  const evaluations = {};
381
381
  for (const entry of discoverDirectories(evaluationsDirectory)) {
382
- const evaluationDirectory = (0, import_node_path.resolve)(evaluationsDirectory, entry);
383
- const configurationPath = (0, import_node_path.resolve)(evaluationDirectory, "index.json");
382
+ const evaluationDirectory = (0, import_path.resolve)(evaluationsDirectory, entry);
383
+ const configurationPath = (0, import_path.resolve)(evaluationDirectory, "index.json");
384
384
  let configuration;
385
385
  try {
386
386
  configuration = JSON.parse(
387
- (0, import_node_fs.readFileSync)(configurationPath, "utf8")
387
+ (0, import_fs.readFileSync)(configurationPath, "utf8")
388
388
  );
389
389
  } catch (error) {
390
390
  throw new Error(
@@ -418,10 +418,10 @@ function compileEvaluations(agentName, sourceDirectory) {
418
418
  return Object.freeze(evaluations);
419
419
  }
420
420
  function discoverDirectories(directory) {
421
- return (0, import_node_fs.readdirSync)(directory, { withFileTypes: true }).filter((entry) => entry.isDirectory() && !entry.name.startsWith(".")).map((entry) => entry.name).sort();
421
+ return (0, import_fs.readdirSync)(directory, { withFileTypes: true }).filter((entry) => entry.isDirectory() && !entry.name.startsWith(".")).map((entry) => entry.name).sort();
422
422
  }
423
423
  function rejectLegacyRegistry(agentName, directory, collection) {
424
- if ((0, import_node_fs.existsSync)((0, import_node_path.resolve)(directory, "index.js"))) {
424
+ if ((0, import_fs.existsSync)((0, import_path.resolve)(directory, "index.js"))) {
425
425
  throw new Error(
426
426
  `Agent "${agentName}" ${collection}/index.js is no longer supported. Remove the registry; folders are discovered automatically and can be disabled with "enabled": false.`
427
427
  );
@@ -499,8 +499,8 @@ function validateEvaluationConfiguration(agentName, registrationName, configurat
499
499
  }
500
500
  }
501
501
  function compileLocalAction(agentName, directoryName, actionsDirectory, actionRuntime) {
502
- const entryPath = (0, import_node_path.resolve)(actionsDirectory, directoryName, "index.js");
503
- if (!(0, import_node_fs.existsSync)(entryPath)) {
502
+ const entryPath = (0, import_path.resolve)(actionsDirectory, directoryName, "index.js");
503
+ if (!(0, import_fs.existsSync)(entryPath)) {
504
504
  throw new Error(
505
505
  `Local action "${agentName}/${directoryName}" requires index.js.`
506
506
  );
@@ -531,7 +531,7 @@ function compileLocalAction(agentName, directoryName, actionsDirectory, actionRu
531
531
  }
532
532
  return {
533
533
  source: output,
534
- sourceHash: (0, import_node_crypto.createHash)("sha256").update(output).digest("hex")
534
+ sourceHash: (0, import_crypto.createHash)("sha256").update(output).digest("hex")
535
535
  };
536
536
  }
537
537
  function serializeBundle(bundle) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/compiler/compile.ts"],
4
- "sourcesContent": ["import { createHash } from \"node:crypto\";\nimport { existsSync, readFileSync, readdirSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { buildSync } from \"esbuild\";\nimport { isBuiltInProvider } from \"../providers/catalog.js\";\nimport type {\n AgentConfiguration,\n AgentRegistration,\n ActionConfiguration,\n CompiledActionManifest,\n CompiledAgentManifest,\n CompiledBundle,\n CompiledEvaluationManifest,\n CompiledSkillManifest,\n EvaluationConfiguration,\n SkillConfiguration,\n} from \"../types.js\";\n\nexport function compileRegistry(\n registrations: Record<string, AgentRegistration>,\n registryRoot: string,\n actionRuntime: \"native\" | \"sandbox\" = \"native\",\n): CompiledBundle {\n if (\n !registrations ||\n typeof registrations !== \"object\" ||\n Array.isArray(registrations)\n ) {\n throw new TypeError(\n 'orcha.init() requires an \"agents\" object of registered folder paths.',\n );\n }\n\n const agents: Record<string, CompiledAgentManifest> = {};\n\n for (const [key, registration] of Object.entries(registrations)) {\n if (!key.trim()) {\n throw new Error(\"Registered agent names cannot be empty.\");\n }\n const normalized = normalizeAgentRegistration(key, registration);\n const subagents: Record<string, CompiledAgentManifest> = {};\n for (const [subagentKey, registeredPath] of Object.entries(\n normalized.subagents,\n )) {\n if (!subagentKey.trim()) {\n throw new Error(`Agent \"${key}\" has an empty subagent name.`);\n }\n subagents[subagentKey] = compileAgent(\n subagentKey,\n registeredPath,\n registryRoot,\n actionRuntime,\n );\n }\n const parent = compileAgent(\n key,\n normalized.path,\n registryRoot,\n actionRuntime,\n );\n agents[key] = Object.freeze({\n ...parent,\n subagentPolicy:\n Object.keys(subagents).length > 0\n ? Object.freeze({\n ...parent.subagentPolicy,\n maxPerRun: parent.subagentPolicy?.maxPerRun ?? 10,\n })\n : parent.subagentPolicy,\n subagents: Object.freeze(subagents),\n });\n }\n\n if (Object.keys(agents).length === 0) {\n throw new Error(\"At least one agent must be registered.\");\n }\n\n return Object.freeze({\n schemaVersion: 1,\n actionRuntime,\n agents: Object.freeze(agents),\n });\n}\n\nfunction normalizeAgentRegistration(\n key: string,\n registration: AgentRegistration,\n): { path: string; subagents: Record<string, string> } {\n if (typeof registration === \"string\") {\n if (!registration.trim()) {\n throw new Error(`Agent \"${key}\" must register a folder path.`);\n }\n return { path: registration, subagents: {} };\n }\n if (!registration || typeof registration !== \"object\") {\n throw new Error(`Agent \"${key}\" must register a folder path.`);\n }\n if (typeof registration.path !== \"string\" || !registration.path.trim()) {\n throw new Error(`Agent \"${key}\" must register a folder path.`);\n }\n if (\n registration.subagents !== undefined &&\n (!registration.subagents ||\n typeof registration.subagents !== \"object\" ||\n Array.isArray(registration.subagents))\n ) {\n throw new Error(`Agent \"${key}\" subagents must be an object of folder paths.`);\n }\n for (const [subagentKey, registeredPath] of Object.entries(\n registration.subagents ?? {},\n )) {\n if (typeof registeredPath !== \"string\" || !registeredPath.trim()) {\n throw new Error(\n `Subagent \"${key}/${subagentKey}\" must register a folder path.`,\n );\n }\n }\n return {\n path: registration.path,\n subagents: registration.subagents ?? {},\n };\n}\n\nfunction compileAgent(\n key: string,\n registeredPath: string,\n registryRoot: string,\n actionRuntime: \"native\" | \"sandbox\",\n): CompiledAgentManifest {\n const name = key;\n\n const sourceDirectory = resolve(registryRoot, registeredPath);\n const configPath = resolve(sourceDirectory, \"index.json\");\n let configuration: AgentConfiguration;\n try {\n configuration = JSON.parse(\n readFileSync(configPath, \"utf8\"),\n ) as AgentConfiguration;\n } catch (error) {\n throw new Error(\n `Agent \"${name}\" is missing a valid index.json at ${configPath}.`,\n { cause: error },\n );\n }\n if (typeof configuration.name !== \"string\" || !configuration.name.trim()) {\n throw new Error(`Agent \"${name}\" requires a name.`);\n }\n if (\n configuration.description !== undefined &&\n (typeof configuration.description !== \"string\" ||\n !configuration.description.trim())\n ) {\n throw new Error(\n `Agent \"${name}\" description must be a non-empty string when provided.`,\n );\n }\n if (!isBuiltInProvider(configuration.provider)) {\n throw new Error(\n `Agent \"${name}\" uses unsupported provider \"${configuration.provider}\".`,\n );\n }\n if (!configuration.model?.trim()) {\n throw new Error(`Agent \"${name}\" must configure a model.`);\n }\n validateNumber(name, \"maxTokens\", configuration.maxTokens, {\n integer: true,\n minimum: 1,\n });\n if (\n configuration.subagents !== undefined &&\n (!configuration.subagents ||\n typeof configuration.subagents !== \"object\" ||\n Array.isArray(configuration.subagents))\n ) {\n throw new Error(`Agent \"${name}\" subagents must be an object.`);\n }\n validateNumber(\n name,\n \"subagents.maxPerRun\",\n configuration.subagents?.maxPerRun,\n { integer: true, minimum: 1 },\n );\n if (\n configuration.outputType &&\n ![\"text\", \"json\", \"image\", \"audio\"].includes(configuration.outputType)\n ) {\n throw new Error(`Agent \"${name}\" has an invalid outputType.`);\n }\n if (\n configuration.reasoningLevel !== undefined &&\n (typeof configuration.reasoningLevel !== \"string\" ||\n !configuration.reasoningLevel.trim())\n ) {\n throw new Error(\n `Agent \"${name}\" reasoningLevel must be a non-empty string.`,\n );\n }\n if (![\"text\", \"json\"].includes(configuration.outputType ?? \"text\")) {\n throw new Error(\n `Agent \"${name}\" outputType \"${configuration.outputType}\" is not implemented yet.`,\n );\n }\n if (\n configuration.outputType === \"json\" &&\n (!configuration.outputSchema ||\n typeof configuration.outputSchema !== \"object\")\n ) {\n throw new Error(\n `Agent \"${name}\" must configure outputSchema when outputType is \"json\".`,\n );\n }\n\n const instructionsPath = resolve(sourceDirectory, \"instructions.md\");\n let systemPrompt: string;\n try {\n systemPrompt = readFileSync(instructionsPath, \"utf8\").trim();\n } catch (error) {\n throw new Error(\n `Agent \"${name}\" is missing required instructions.md at ${instructionsPath}.`,\n { cause: error },\n );\n }\n if (!systemPrompt) {\n throw new Error(`Agent \"${name}\" instructions.md cannot be empty.`);\n }\n\n return Object.freeze({\n key,\n name: configuration.name.trim(),\n description: configuration.description?.trim(),\n provider: configuration.provider,\n model: configuration.model,\n systemPrompt,\n region: configuration.region,\n maxTokens: configuration.maxTokens,\n reasoningLevel: configuration.reasoningLevel,\n outputType: configuration.outputType ?? \"text\",\n outputSchema: configuration.outputSchema,\n actions: compileActions(name, sourceDirectory, actionRuntime),\n skills: compileSkills(name, sourceDirectory),\n evaluations: compileEvaluations(name, sourceDirectory),\n subagentPolicy: configuration.subagents\n ? Object.freeze({ ...configuration.subagents })\n : undefined,\n subagents: Object.freeze({}),\n });\n}\n\nfunction compileActions(\n agentName: string,\n sourceDirectory: string,\n actionRuntime: \"native\" | \"sandbox\",\n): Record<string, CompiledActionManifest> {\n const actionsDirectory = resolve(sourceDirectory, \"actions\");\n if (!existsSync(actionsDirectory)) {\n return {};\n }\n\n const actions: Record<string, CompiledActionManifest> = {};\n for (const entry of readdirSync(actionsDirectory, { withFileTypes: true })) {\n if (!entry.isDirectory()) {\n continue;\n }\n\n const configurationPath = resolve(\n actionsDirectory,\n entry.name,\n \"index.json\",\n );\n let configuration: ActionConfiguration;\n try {\n configuration = JSON.parse(\n readFileSync(configurationPath, \"utf8\"),\n ) as ActionConfiguration;\n } catch (error) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" is missing a valid index.json.`,\n { cause: error },\n );\n }\n validateEnabled(\n `Action \"${agentName}/${entry.name}\"`,\n configuration?.enabled,\n );\n if (configuration?.enabled === false) {\n continue;\n }\n\n if (!configuration.name?.trim() || !configuration.description?.trim()) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" requires name and description.`,\n );\n }\n if (!/^[a-zA-Z0-9_-]{1,64}$/.test(configuration.name)) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" has an invalid model-facing name.`,\n );\n }\n if (\n [\n \"load_skill\",\n \"run_agent\",\n \"resume_agent\",\n \"inspect_agent\",\n ].includes(configuration.name)\n ) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" uses reserved name \"${configuration.name}\".`,\n );\n }\n const execution = configuration.execution ?? \"local\";\n if (![\"client\", \"local\"].includes(execution)) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" has invalid execution \"${configuration.execution}\".`,\n );\n }\n if (\n !configuration.parameters ||\n typeof configuration.parameters !== \"object\" ||\n Array.isArray(configuration.parameters)\n ) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" requires a parameters JSON Schema.`,\n );\n }\n if (\n configuration.outputSchema !== undefined &&\n (typeof configuration.outputSchema !== \"object\" ||\n configuration.outputSchema === null ||\n Array.isArray(configuration.outputSchema))\n ) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" has an invalid outputSchema.`,\n );\n }\n validateNumber(\n `${agentName}/${entry.name}`,\n \"timeoutMs\",\n configuration.timeoutMs,\n { integer: true, minimum: 1, maximum: 120_000 },\n );\n if (\n configuration.permissions?.env !== undefined &&\n !Array.isArray(configuration.permissions.env)\n ) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" permissions.env must be an array.`,\n );\n }\n if (\n configuration.permissions?.network !== undefined &&\n !Array.isArray(configuration.permissions.network)\n ) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" permissions.network must be an array.`,\n );\n }\n for (const permission of [\n ...(configuration.permissions?.env ?? []),\n ...(configuration.permissions?.network ?? []),\n ]) {\n if (typeof permission !== \"string\" || !permission.trim()) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" has an invalid permission.`,\n );\n }\n }\n if (actions[configuration.name]) {\n throw new Error(\n `Agent \"${agentName}\" has duplicate action name \"${configuration.name}\".`,\n );\n }\n\n const compiledSource =\n execution === \"local\"\n ? compileLocalAction(\n agentName,\n entry.name,\n actionsDirectory,\n actionRuntime,\n )\n : undefined;\n actions[configuration.name] = Object.freeze({\n ...configuration,\n execution,\n directoryName: entry.name,\n ...compiledSource,\n });\n }\n\n return Object.freeze(actions);\n}\n\nfunction compileSkills(\n agentName: string,\n sourceDirectory: string,\n): Record<string, CompiledSkillManifest> {\n const skillsDirectory = resolve(sourceDirectory, \"skills\");\n if (!existsSync(skillsDirectory)) {\n return {};\n }\n rejectLegacyRegistry(agentName, skillsDirectory, \"skills\");\n\n const skills: Record<string, CompiledSkillManifest> = {};\n\n for (const entry of discoverDirectories(skillsDirectory)) {\n const skillDirectory = resolve(skillsDirectory, entry);\n const configurationPath = resolve(skillDirectory, \"index.json\");\n let configuration: SkillConfiguration;\n try {\n configuration = JSON.parse(\n readFileSync(configurationPath, \"utf8\"),\n ) as SkillConfiguration;\n } catch (error) {\n throw new Error(\n `Skill \"${agentName}/${entry}\" is missing a valid index.json at ${configurationPath}.`,\n { cause: error },\n );\n }\n validateEnabled(`Skill \"${agentName}/${entry}\"`, configuration?.enabled);\n if (configuration?.enabled === false) {\n continue;\n }\n validateSkillConfiguration(agentName, entry, configuration);\n\n const instructionsPath = resolve(skillDirectory, \"instructions.md\");\n let instructions: string;\n try {\n instructions = readFileSync(instructionsPath, \"utf8\").trim();\n } catch (error) {\n throw new Error(\n `Skill \"${agentName}/${entry}\" is missing instructions.md at ${instructionsPath}.`,\n { cause: error },\n );\n }\n if (!instructions) {\n throw new Error(\n `Skill \"${agentName}/${entry}\" instructions.md cannot be empty.`,\n );\n }\n if (skills[configuration.name]) {\n throw new Error(\n `Agent \"${agentName}\" has duplicate skill name \"${configuration.name}\".`,\n );\n }\n\n skills[configuration.name] = Object.freeze({\n ...configuration,\n directoryName: entry,\n instructions,\n });\n }\n\n return Object.freeze(skills);\n}\n\nfunction compileEvaluations(\n agentName: string,\n sourceDirectory: string,\n): Record<string, CompiledEvaluationManifest> {\n const evaluationsDirectory = resolve(sourceDirectory, \"evaluations\");\n if (!existsSync(evaluationsDirectory)) {\n return {};\n }\n rejectLegacyRegistry(agentName, evaluationsDirectory, \"evaluations\");\n\n const evaluations: Record<string, CompiledEvaluationManifest> = {};\n\n for (const entry of discoverDirectories(evaluationsDirectory)) {\n const evaluationDirectory = resolve(evaluationsDirectory, entry);\n const configurationPath = resolve(evaluationDirectory, \"index.json\");\n let configuration: EvaluationConfiguration;\n try {\n configuration = JSON.parse(\n readFileSync(configurationPath, \"utf8\"),\n ) as EvaluationConfiguration;\n } catch (error) {\n throw new Error(\n `Evaluation \"${agentName}/${entry}\" is missing a valid index.json at ${configurationPath}.`,\n { cause: error },\n );\n }\n validateEnabled(\n `Evaluation \"${agentName}/${entry}\"`,\n configuration?.enabled,\n );\n if (configuration?.enabled === false) {\n continue;\n }\n validateEvaluationConfiguration(agentName, entry, configuration);\n if (evaluations[configuration.name]) {\n throw new Error(\n `Agent \"${agentName}\" has duplicate evaluation name \"${configuration.name}\".`,\n );\n }\n\n evaluations[configuration.name] = Object.freeze({\n ...configuration,\n enabled: true,\n provider: configuration.provider as CompiledEvaluationManifest[\"provider\"],\n directoryName: entry,\n metrics: Object.freeze(\n configuration.metrics.map((metric) => Object.freeze({ ...metric })),\n ),\n });\n }\n\n return Object.freeze(evaluations);\n}\n\nfunction discoverDirectories(directory: string): string[] {\n return readdirSync(directory, { withFileTypes: true })\n .filter((entry) => entry.isDirectory() && !entry.name.startsWith(\".\"))\n .map((entry) => entry.name)\n .sort();\n}\n\nfunction rejectLegacyRegistry(\n agentName: string,\n directory: string,\n collection: \"skills\" | \"evaluations\",\n): void {\n if (existsSync(resolve(directory, \"index.js\"))) {\n throw new Error(\n `Agent \"${agentName}\" ${collection}/index.js is no longer supported. Remove the registry; folders are discovered automatically and can be disabled with \"enabled\": false.`,\n );\n }\n}\n\nfunction validateEnabled(label: string, enabled: unknown): void {\n if (enabled !== undefined && typeof enabled !== \"boolean\") {\n throw new Error(`${label} enabled must be a boolean.`);\n }\n}\n\nfunction validateSkillConfiguration(\n agentName: string,\n registrationName: string,\n configuration: SkillConfiguration,\n): void {\n if (\n !configuration ||\n typeof configuration !== \"object\" ||\n Array.isArray(configuration) ||\n typeof configuration.name !== \"string\" ||\n !configuration.name.trim() ||\n typeof configuration.description !== \"string\" ||\n !configuration.description.trim()\n ) {\n throw new Error(\n `Skill \"${agentName}/${registrationName}\" requires name and description.`,\n );\n }\n if (!/^[a-zA-Z0-9_-]{1,64}$/.test(configuration.name)) {\n throw new Error(\n `Skill \"${agentName}/${registrationName}\" has an invalid model-facing name.`,\n );\n }\n if (\n configuration.triggers !== undefined &&\n (!Array.isArray(configuration.triggers) ||\n configuration.triggers.length === 0 ||\n configuration.triggers.some(\n (trigger) => typeof trigger !== \"string\" || !trigger.trim(),\n ))\n ) {\n throw new Error(\n `Skill \"${agentName}/${registrationName}\" triggers must be non-empty strings.`,\n );\n }\n}\n\nfunction validateEvaluationConfiguration(\n agentName: string,\n registrationName: string,\n configuration: EvaluationConfiguration,\n): void {\n const label = `Evaluation \"${agentName}/${registrationName}\"`;\n if (\n !configuration ||\n typeof configuration !== \"object\" ||\n Array.isArray(configuration) ||\n typeof configuration.name !== \"string\" ||\n !configuration.name.trim()\n ) {\n throw new Error(`${label} requires a name.`);\n }\n if (!/^[a-zA-Z0-9_-]{1,64}$/.test(configuration.name)) {\n throw new Error(`${label} has an invalid name.`);\n }\n if (\n configuration.description !== undefined &&\n (typeof configuration.description !== \"string\" ||\n !configuration.description.trim())\n ) {\n throw new Error(`${label} description must be a non-empty string.`);\n }\n if (\n configuration.instructions !== undefined &&\n (typeof configuration.instructions !== \"string\" ||\n !configuration.instructions.trim())\n ) {\n throw new Error(`${label} instructions must be a non-empty string.`);\n }\n if (!isBuiltInProvider(configuration.provider)) {\n throw new Error(\n `${label} uses unsupported provider \"${configuration.provider}\".`,\n );\n }\n if (typeof configuration.model !== \"string\" || !configuration.model.trim()) {\n throw new Error(`${label} requires a model.`);\n }\n validateNumber(\n `${agentName}/${registrationName}`,\n \"maxTokens\",\n configuration.maxTokens,\n { integer: true, minimum: 1 },\n );\n if (\n configuration.reasoningLevel !== undefined &&\n (typeof configuration.reasoningLevel !== \"string\" ||\n !configuration.reasoningLevel.trim())\n ) {\n throw new Error(`${label} reasoningLevel must be a non-empty string.`);\n }\n if (\n !Array.isArray(configuration.metrics) ||\n configuration.metrics.length === 0\n ) {\n throw new Error(`${label} requires at least one metric.`);\n }\n const names = new Set<string>();\n for (const metric of configuration.metrics) {\n if (\n !metric ||\n typeof metric !== \"object\" ||\n typeof metric.name !== \"string\" ||\n !/^[a-zA-Z0-9_-]{1,64}$/.test(metric.name) ||\n typeof metric.description !== \"string\" ||\n !metric.description.trim() ||\n typeof metric.threshold !== \"number\" ||\n !Number.isFinite(metric.threshold) ||\n metric.threshold < 0 ||\n metric.threshold > 1\n ) {\n throw new Error(\n `${label} metrics require a valid name, description, and threshold between 0 and 1.`,\n );\n }\n if (names.has(metric.name)) {\n throw new Error(`${label} has duplicate metric \"${metric.name}\".`);\n }\n names.add(metric.name);\n }\n}\n\nfunction compileLocalAction(\n agentName: string,\n directoryName: string,\n actionsDirectory: string,\n actionRuntime: \"native\" | \"sandbox\",\n): { source: string; sourceHash: string } {\n const entryPath = resolve(actionsDirectory, directoryName, \"index.js\");\n if (!existsSync(entryPath)) {\n throw new Error(\n `Local action \"${agentName}/${directoryName}\" requires index.js.`,\n );\n }\n\n let output: string;\n try {\n const result = buildSync({\n entryPoints: [entryPath],\n bundle: true,\n write: false,\n format: \"iife\",\n globalName: \"__orchaActionModule\",\n platform: actionRuntime === \"native\" ? \"node\" : \"neutral\",\n target: \"es2022\",\n logLevel: \"silent\",\n });\n output = result.outputFiles[0]?.text ?? \"\";\n } catch (error) {\n throw new Error(\n `Local action \"${agentName}/${directoryName}\" could not be bundled.`,\n { cause: error },\n );\n }\n if (!output.includes(\"__orchaActionModule\")) {\n throw new Error(\n `Local action \"${agentName}/${directoryName}\" must export a default function.`,\n );\n }\n\n return {\n source: output,\n sourceHash: createHash(\"sha256\").update(output).digest(\"hex\"),\n };\n}\n\nexport function serializeBundle(bundle: CompiledBundle): string {\n return [\n \"// Generated by OrchaJS. Do not edit manually.\",\n `export const bundle = ${JSON.stringify(bundle, null, 2)};`,\n \"export default bundle;\",\n \"\",\n ].join(\"\\n\");\n}\n\nfunction validateNumber(\n agentName: string,\n field: string,\n value: number | undefined,\n constraints: {\n integer?: boolean;\n minimum?: number;\n maximum?: number;\n },\n): void {\n if (value === undefined) {\n return;\n }\n if (\n !Number.isFinite(value) ||\n (constraints.integer && !Number.isInteger(value)) ||\n (constraints.minimum !== undefined && value < constraints.minimum) ||\n (constraints.maximum !== undefined && value > constraints.maximum)\n ) {\n throw new Error(`Agent \"${agentName}\" has an invalid ${field}.`);\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { createHash } from \"crypto\";\nimport { existsSync, readFileSync, readdirSync } from \"fs\";\nimport { resolve } from \"path\";\nimport { buildSync } from \"esbuild\";\nimport { isBuiltInProvider } from \"../providers/catalog.js\";\nimport type {\n AgentConfiguration,\n AgentRegistration,\n ActionConfiguration,\n CompiledActionManifest,\n CompiledAgentManifest,\n CompiledBundle,\n CompiledEvaluationManifest,\n CompiledSkillManifest,\n EvaluationConfiguration,\n SkillConfiguration,\n} from \"../types.js\";\n\nexport function compileRegistry(\n registrations: Record<string, AgentRegistration>,\n registryRoot: string,\n actionRuntime: \"native\" | \"sandbox\" = \"native\",\n): CompiledBundle {\n if (\n !registrations ||\n typeof registrations !== \"object\" ||\n Array.isArray(registrations)\n ) {\n throw new TypeError(\n 'orcha.init() requires an \"agents\" object of registered folder paths.',\n );\n }\n\n const agents: Record<string, CompiledAgentManifest> = {};\n\n for (const [key, registration] of Object.entries(registrations)) {\n if (!key.trim()) {\n throw new Error(\"Registered agent names cannot be empty.\");\n }\n const normalized = normalizeAgentRegistration(key, registration);\n const subagents: Record<string, CompiledAgentManifest> = {};\n for (const [subagentKey, registeredPath] of Object.entries(\n normalized.subagents,\n )) {\n if (!subagentKey.trim()) {\n throw new Error(`Agent \"${key}\" has an empty subagent name.`);\n }\n subagents[subagentKey] = compileAgent(\n subagentKey,\n registeredPath,\n registryRoot,\n actionRuntime,\n );\n }\n const parent = compileAgent(\n key,\n normalized.path,\n registryRoot,\n actionRuntime,\n );\n agents[key] = Object.freeze({\n ...parent,\n subagentPolicy:\n Object.keys(subagents).length > 0\n ? Object.freeze({\n ...parent.subagentPolicy,\n maxPerRun: parent.subagentPolicy?.maxPerRun ?? 10,\n })\n : parent.subagentPolicy,\n subagents: Object.freeze(subagents),\n });\n }\n\n if (Object.keys(agents).length === 0) {\n throw new Error(\"At least one agent must be registered.\");\n }\n\n return Object.freeze({\n schemaVersion: 1,\n actionRuntime,\n agents: Object.freeze(agents),\n });\n}\n\nfunction normalizeAgentRegistration(\n key: string,\n registration: AgentRegistration,\n): { path: string; subagents: Record<string, string> } {\n if (typeof registration === \"string\") {\n if (!registration.trim()) {\n throw new Error(`Agent \"${key}\" must register a folder path.`);\n }\n return { path: registration, subagents: {} };\n }\n if (!registration || typeof registration !== \"object\") {\n throw new Error(`Agent \"${key}\" must register a folder path.`);\n }\n if (typeof registration.path !== \"string\" || !registration.path.trim()) {\n throw new Error(`Agent \"${key}\" must register a folder path.`);\n }\n if (\n registration.subagents !== undefined &&\n (!registration.subagents ||\n typeof registration.subagents !== \"object\" ||\n Array.isArray(registration.subagents))\n ) {\n throw new Error(`Agent \"${key}\" subagents must be an object of folder paths.`);\n }\n for (const [subagentKey, registeredPath] of Object.entries(\n registration.subagents ?? {},\n )) {\n if (typeof registeredPath !== \"string\" || !registeredPath.trim()) {\n throw new Error(\n `Subagent \"${key}/${subagentKey}\" must register a folder path.`,\n );\n }\n }\n return {\n path: registration.path,\n subagents: registration.subagents ?? {},\n };\n}\n\nfunction compileAgent(\n key: string,\n registeredPath: string,\n registryRoot: string,\n actionRuntime: \"native\" | \"sandbox\",\n): CompiledAgentManifest {\n const name = key;\n\n const sourceDirectory = resolve(registryRoot, registeredPath);\n const configPath = resolve(sourceDirectory, \"index.json\");\n let configuration: AgentConfiguration;\n try {\n configuration = JSON.parse(\n readFileSync(configPath, \"utf8\"),\n ) as AgentConfiguration;\n } catch (error) {\n throw new Error(\n `Agent \"${name}\" is missing a valid index.json at ${configPath}.`,\n { cause: error },\n );\n }\n if (typeof configuration.name !== \"string\" || !configuration.name.trim()) {\n throw new Error(`Agent \"${name}\" requires a name.`);\n }\n if (\n configuration.description !== undefined &&\n (typeof configuration.description !== \"string\" ||\n !configuration.description.trim())\n ) {\n throw new Error(\n `Agent \"${name}\" description must be a non-empty string when provided.`,\n );\n }\n if (!isBuiltInProvider(configuration.provider)) {\n throw new Error(\n `Agent \"${name}\" uses unsupported provider \"${configuration.provider}\".`,\n );\n }\n if (!configuration.model?.trim()) {\n throw new Error(`Agent \"${name}\" must configure a model.`);\n }\n validateNumber(name, \"maxTokens\", configuration.maxTokens, {\n integer: true,\n minimum: 1,\n });\n if (\n configuration.subagents !== undefined &&\n (!configuration.subagents ||\n typeof configuration.subagents !== \"object\" ||\n Array.isArray(configuration.subagents))\n ) {\n throw new Error(`Agent \"${name}\" subagents must be an object.`);\n }\n validateNumber(\n name,\n \"subagents.maxPerRun\",\n configuration.subagents?.maxPerRun,\n { integer: true, minimum: 1 },\n );\n if (\n configuration.outputType &&\n ![\"text\", \"json\", \"image\", \"audio\"].includes(configuration.outputType)\n ) {\n throw new Error(`Agent \"${name}\" has an invalid outputType.`);\n }\n if (\n configuration.reasoningLevel !== undefined &&\n (typeof configuration.reasoningLevel !== \"string\" ||\n !configuration.reasoningLevel.trim())\n ) {\n throw new Error(\n `Agent \"${name}\" reasoningLevel must be a non-empty string.`,\n );\n }\n if (![\"text\", \"json\"].includes(configuration.outputType ?? \"text\")) {\n throw new Error(\n `Agent \"${name}\" outputType \"${configuration.outputType}\" is not implemented yet.`,\n );\n }\n if (\n configuration.outputType === \"json\" &&\n (!configuration.outputSchema ||\n typeof configuration.outputSchema !== \"object\")\n ) {\n throw new Error(\n `Agent \"${name}\" must configure outputSchema when outputType is \"json\".`,\n );\n }\n\n const instructionsPath = resolve(sourceDirectory, \"instructions.md\");\n let systemPrompt: string;\n try {\n systemPrompt = readFileSync(instructionsPath, \"utf8\").trim();\n } catch (error) {\n throw new Error(\n `Agent \"${name}\" is missing required instructions.md at ${instructionsPath}.`,\n { cause: error },\n );\n }\n if (!systemPrompt) {\n throw new Error(`Agent \"${name}\" instructions.md cannot be empty.`);\n }\n\n return Object.freeze({\n key,\n name: configuration.name.trim(),\n description: configuration.description?.trim(),\n provider: configuration.provider,\n model: configuration.model,\n systemPrompt,\n region: configuration.region,\n maxTokens: configuration.maxTokens,\n reasoningLevel: configuration.reasoningLevel,\n outputType: configuration.outputType ?? \"text\",\n outputSchema: configuration.outputSchema,\n actions: compileActions(name, sourceDirectory, actionRuntime),\n skills: compileSkills(name, sourceDirectory),\n evaluations: compileEvaluations(name, sourceDirectory),\n subagentPolicy: configuration.subagents\n ? Object.freeze({ ...configuration.subagents })\n : undefined,\n subagents: Object.freeze({}),\n });\n}\n\nfunction compileActions(\n agentName: string,\n sourceDirectory: string,\n actionRuntime: \"native\" | \"sandbox\",\n): Record<string, CompiledActionManifest> {\n const actionsDirectory = resolve(sourceDirectory, \"actions\");\n if (!existsSync(actionsDirectory)) {\n return {};\n }\n\n const actions: Record<string, CompiledActionManifest> = {};\n for (const entry of readdirSync(actionsDirectory, { withFileTypes: true })) {\n if (!entry.isDirectory()) {\n continue;\n }\n\n const configurationPath = resolve(\n actionsDirectory,\n entry.name,\n \"index.json\",\n );\n let configuration: ActionConfiguration;\n try {\n configuration = JSON.parse(\n readFileSync(configurationPath, \"utf8\"),\n ) as ActionConfiguration;\n } catch (error) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" is missing a valid index.json.`,\n { cause: error },\n );\n }\n validateEnabled(\n `Action \"${agentName}/${entry.name}\"`,\n configuration?.enabled,\n );\n if (configuration?.enabled === false) {\n continue;\n }\n\n if (!configuration.name?.trim() || !configuration.description?.trim()) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" requires name and description.`,\n );\n }\n if (!/^[a-zA-Z0-9_-]{1,64}$/.test(configuration.name)) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" has an invalid model-facing name.`,\n );\n }\n if (\n [\n \"load_skill\",\n \"run_agent\",\n \"resume_agent\",\n \"inspect_agent\",\n ].includes(configuration.name)\n ) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" uses reserved name \"${configuration.name}\".`,\n );\n }\n const execution = configuration.execution ?? \"local\";\n if (![\"client\", \"local\"].includes(execution)) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" has invalid execution \"${configuration.execution}\".`,\n );\n }\n if (\n !configuration.parameters ||\n typeof configuration.parameters !== \"object\" ||\n Array.isArray(configuration.parameters)\n ) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" requires a parameters JSON Schema.`,\n );\n }\n if (\n configuration.outputSchema !== undefined &&\n (typeof configuration.outputSchema !== \"object\" ||\n configuration.outputSchema === null ||\n Array.isArray(configuration.outputSchema))\n ) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" has an invalid outputSchema.`,\n );\n }\n validateNumber(\n `${agentName}/${entry.name}`,\n \"timeoutMs\",\n configuration.timeoutMs,\n { integer: true, minimum: 1, maximum: 120_000 },\n );\n if (\n configuration.permissions?.env !== undefined &&\n !Array.isArray(configuration.permissions.env)\n ) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" permissions.env must be an array.`,\n );\n }\n if (\n configuration.permissions?.network !== undefined &&\n !Array.isArray(configuration.permissions.network)\n ) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" permissions.network must be an array.`,\n );\n }\n for (const permission of [\n ...(configuration.permissions?.env ?? []),\n ...(configuration.permissions?.network ?? []),\n ]) {\n if (typeof permission !== \"string\" || !permission.trim()) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" has an invalid permission.`,\n );\n }\n }\n if (actions[configuration.name]) {\n throw new Error(\n `Agent \"${agentName}\" has duplicate action name \"${configuration.name}\".`,\n );\n }\n\n const compiledSource =\n execution === \"local\"\n ? compileLocalAction(\n agentName,\n entry.name,\n actionsDirectory,\n actionRuntime,\n )\n : undefined;\n actions[configuration.name] = Object.freeze({\n ...configuration,\n execution,\n directoryName: entry.name,\n ...compiledSource,\n });\n }\n\n return Object.freeze(actions);\n}\n\nfunction compileSkills(\n agentName: string,\n sourceDirectory: string,\n): Record<string, CompiledSkillManifest> {\n const skillsDirectory = resolve(sourceDirectory, \"skills\");\n if (!existsSync(skillsDirectory)) {\n return {};\n }\n rejectLegacyRegistry(agentName, skillsDirectory, \"skills\");\n\n const skills: Record<string, CompiledSkillManifest> = {};\n\n for (const entry of discoverDirectories(skillsDirectory)) {\n const skillDirectory = resolve(skillsDirectory, entry);\n const configurationPath = resolve(skillDirectory, \"index.json\");\n let configuration: SkillConfiguration;\n try {\n configuration = JSON.parse(\n readFileSync(configurationPath, \"utf8\"),\n ) as SkillConfiguration;\n } catch (error) {\n throw new Error(\n `Skill \"${agentName}/${entry}\" is missing a valid index.json at ${configurationPath}.`,\n { cause: error },\n );\n }\n validateEnabled(`Skill \"${agentName}/${entry}\"`, configuration?.enabled);\n if (configuration?.enabled === false) {\n continue;\n }\n validateSkillConfiguration(agentName, entry, configuration);\n\n const instructionsPath = resolve(skillDirectory, \"instructions.md\");\n let instructions: string;\n try {\n instructions = readFileSync(instructionsPath, \"utf8\").trim();\n } catch (error) {\n throw new Error(\n `Skill \"${agentName}/${entry}\" is missing instructions.md at ${instructionsPath}.`,\n { cause: error },\n );\n }\n if (!instructions) {\n throw new Error(\n `Skill \"${agentName}/${entry}\" instructions.md cannot be empty.`,\n );\n }\n if (skills[configuration.name]) {\n throw new Error(\n `Agent \"${agentName}\" has duplicate skill name \"${configuration.name}\".`,\n );\n }\n\n skills[configuration.name] = Object.freeze({\n ...configuration,\n directoryName: entry,\n instructions,\n });\n }\n\n return Object.freeze(skills);\n}\n\nfunction compileEvaluations(\n agentName: string,\n sourceDirectory: string,\n): Record<string, CompiledEvaluationManifest> {\n const evaluationsDirectory = resolve(sourceDirectory, \"evaluations\");\n if (!existsSync(evaluationsDirectory)) {\n return {};\n }\n rejectLegacyRegistry(agentName, evaluationsDirectory, \"evaluations\");\n\n const evaluations: Record<string, CompiledEvaluationManifest> = {};\n\n for (const entry of discoverDirectories(evaluationsDirectory)) {\n const evaluationDirectory = resolve(evaluationsDirectory, entry);\n const configurationPath = resolve(evaluationDirectory, \"index.json\");\n let configuration: EvaluationConfiguration;\n try {\n configuration = JSON.parse(\n readFileSync(configurationPath, \"utf8\"),\n ) as EvaluationConfiguration;\n } catch (error) {\n throw new Error(\n `Evaluation \"${agentName}/${entry}\" is missing a valid index.json at ${configurationPath}.`,\n { cause: error },\n );\n }\n validateEnabled(\n `Evaluation \"${agentName}/${entry}\"`,\n configuration?.enabled,\n );\n if (configuration?.enabled === false) {\n continue;\n }\n validateEvaluationConfiguration(agentName, entry, configuration);\n if (evaluations[configuration.name]) {\n throw new Error(\n `Agent \"${agentName}\" has duplicate evaluation name \"${configuration.name}\".`,\n );\n }\n\n evaluations[configuration.name] = Object.freeze({\n ...configuration,\n enabled: true,\n provider: configuration.provider as CompiledEvaluationManifest[\"provider\"],\n directoryName: entry,\n metrics: Object.freeze(\n configuration.metrics.map((metric) => Object.freeze({ ...metric })),\n ),\n });\n }\n\n return Object.freeze(evaluations);\n}\n\nfunction discoverDirectories(directory: string): string[] {\n return readdirSync(directory, { withFileTypes: true })\n .filter((entry) => entry.isDirectory() && !entry.name.startsWith(\".\"))\n .map((entry) => entry.name)\n .sort();\n}\n\nfunction rejectLegacyRegistry(\n agentName: string,\n directory: string,\n collection: \"skills\" | \"evaluations\",\n): void {\n if (existsSync(resolve(directory, \"index.js\"))) {\n throw new Error(\n `Agent \"${agentName}\" ${collection}/index.js is no longer supported. Remove the registry; folders are discovered automatically and can be disabled with \"enabled\": false.`,\n );\n }\n}\n\nfunction validateEnabled(label: string, enabled: unknown): void {\n if (enabled !== undefined && typeof enabled !== \"boolean\") {\n throw new Error(`${label} enabled must be a boolean.`);\n }\n}\n\nfunction validateSkillConfiguration(\n agentName: string,\n registrationName: string,\n configuration: SkillConfiguration,\n): void {\n if (\n !configuration ||\n typeof configuration !== \"object\" ||\n Array.isArray(configuration) ||\n typeof configuration.name !== \"string\" ||\n !configuration.name.trim() ||\n typeof configuration.description !== \"string\" ||\n !configuration.description.trim()\n ) {\n throw new Error(\n `Skill \"${agentName}/${registrationName}\" requires name and description.`,\n );\n }\n if (!/^[a-zA-Z0-9_-]{1,64}$/.test(configuration.name)) {\n throw new Error(\n `Skill \"${agentName}/${registrationName}\" has an invalid model-facing name.`,\n );\n }\n if (\n configuration.triggers !== undefined &&\n (!Array.isArray(configuration.triggers) ||\n configuration.triggers.length === 0 ||\n configuration.triggers.some(\n (trigger) => typeof trigger !== \"string\" || !trigger.trim(),\n ))\n ) {\n throw new Error(\n `Skill \"${agentName}/${registrationName}\" triggers must be non-empty strings.`,\n );\n }\n}\n\nfunction validateEvaluationConfiguration(\n agentName: string,\n registrationName: string,\n configuration: EvaluationConfiguration,\n): void {\n const label = `Evaluation \"${agentName}/${registrationName}\"`;\n if (\n !configuration ||\n typeof configuration !== \"object\" ||\n Array.isArray(configuration) ||\n typeof configuration.name !== \"string\" ||\n !configuration.name.trim()\n ) {\n throw new Error(`${label} requires a name.`);\n }\n if (!/^[a-zA-Z0-9_-]{1,64}$/.test(configuration.name)) {\n throw new Error(`${label} has an invalid name.`);\n }\n if (\n configuration.description !== undefined &&\n (typeof configuration.description !== \"string\" ||\n !configuration.description.trim())\n ) {\n throw new Error(`${label} description must be a non-empty string.`);\n }\n if (\n configuration.instructions !== undefined &&\n (typeof configuration.instructions !== \"string\" ||\n !configuration.instructions.trim())\n ) {\n throw new Error(`${label} instructions must be a non-empty string.`);\n }\n if (!isBuiltInProvider(configuration.provider)) {\n throw new Error(\n `${label} uses unsupported provider \"${configuration.provider}\".`,\n );\n }\n if (typeof configuration.model !== \"string\" || !configuration.model.trim()) {\n throw new Error(`${label} requires a model.`);\n }\n validateNumber(\n `${agentName}/${registrationName}`,\n \"maxTokens\",\n configuration.maxTokens,\n { integer: true, minimum: 1 },\n );\n if (\n configuration.reasoningLevel !== undefined &&\n (typeof configuration.reasoningLevel !== \"string\" ||\n !configuration.reasoningLevel.trim())\n ) {\n throw new Error(`${label} reasoningLevel must be a non-empty string.`);\n }\n if (\n !Array.isArray(configuration.metrics) ||\n configuration.metrics.length === 0\n ) {\n throw new Error(`${label} requires at least one metric.`);\n }\n const names = new Set<string>();\n for (const metric of configuration.metrics) {\n if (\n !metric ||\n typeof metric !== \"object\" ||\n typeof metric.name !== \"string\" ||\n !/^[a-zA-Z0-9_-]{1,64}$/.test(metric.name) ||\n typeof metric.description !== \"string\" ||\n !metric.description.trim() ||\n typeof metric.threshold !== \"number\" ||\n !Number.isFinite(metric.threshold) ||\n metric.threshold < 0 ||\n metric.threshold > 1\n ) {\n throw new Error(\n `${label} metrics require a valid name, description, and threshold between 0 and 1.`,\n );\n }\n if (names.has(metric.name)) {\n throw new Error(`${label} has duplicate metric \"${metric.name}\".`);\n }\n names.add(metric.name);\n }\n}\n\nfunction compileLocalAction(\n agentName: string,\n directoryName: string,\n actionsDirectory: string,\n actionRuntime: \"native\" | \"sandbox\",\n): { source: string; sourceHash: string } {\n const entryPath = resolve(actionsDirectory, directoryName, \"index.js\");\n if (!existsSync(entryPath)) {\n throw new Error(\n `Local action \"${agentName}/${directoryName}\" requires index.js.`,\n );\n }\n\n let output: string;\n try {\n const result = buildSync({\n entryPoints: [entryPath],\n bundle: true,\n write: false,\n format: \"iife\",\n globalName: \"__orchaActionModule\",\n platform: actionRuntime === \"native\" ? \"node\" : \"neutral\",\n target: \"es2022\",\n logLevel: \"silent\",\n });\n output = result.outputFiles[0]?.text ?? \"\";\n } catch (error) {\n throw new Error(\n `Local action \"${agentName}/${directoryName}\" could not be bundled.`,\n { cause: error },\n );\n }\n if (!output.includes(\"__orchaActionModule\")) {\n throw new Error(\n `Local action \"${agentName}/${directoryName}\" must export a default function.`,\n );\n }\n\n return {\n source: output,\n sourceHash: createHash(\"sha256\").update(output).digest(\"hex\"),\n };\n}\n\nexport function serializeBundle(bundle: CompiledBundle): string {\n return [\n \"// Generated by OrchaJS. Do not edit manually.\",\n `export const bundle = ${JSON.stringify(bundle, null, 2)};`,\n \"export default bundle;\",\n \"\",\n ].join(\"\\n\");\n}\n\nfunction validateNumber(\n agentName: string,\n field: string,\n value: number | undefined,\n constraints: {\n integer?: boolean;\n minimum?: number;\n maximum?: number;\n },\n): void {\n if (value === undefined) {\n return;\n }\n if (\n !Number.isFinite(value) ||\n (constraints.integer && !Number.isInteger(value)) ||\n (constraints.minimum !== undefined && value < constraints.minimum) ||\n (constraints.maximum !== undefined && value > constraints.maximum)\n ) {\n throw new Error(`Agent \"${agentName}\" has an invalid ${field}.`);\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }