orchajs 0.18.0 → 0.20.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 (286) hide show
  1. package/README.md +93 -9
  2. package/dist/amarsia/metadata.d.ts +0 -1
  3. package/dist/amarsia/metadata.js +0 -1
  4. package/dist/amarsia/sync.d.ts +0 -1
  5. package/dist/amarsia/sync.js +0 -1
  6. package/dist/cli-agents-template.d.ts +0 -1
  7. package/dist/cli-agents-template.js +0 -1
  8. package/dist/cli.d.ts +0 -1
  9. package/dist/cli.js +0 -1
  10. package/dist/compiler/build-project.d.ts +0 -1
  11. package/dist/compiler/build-project.js +0 -1
  12. package/dist/compiler/compile.d.ts +0 -1
  13. package/dist/compiler/compile.js +0 -1
  14. package/dist/env.d.ts +0 -1
  15. package/dist/env.js +0 -1
  16. package/dist/errors.d.ts +0 -1
  17. package/dist/errors.js +0 -1
  18. package/dist/file-content.d.ts +0 -1
  19. package/dist/file-content.js +0 -1
  20. package/dist/index.d.ts +0 -1
  21. package/dist/index.js +0 -1
  22. package/dist/integrations/esbuild.d.ts +0 -1
  23. package/dist/integrations/esbuild.js +0 -1
  24. package/dist/integrations/serverless.d.ts +27 -0
  25. package/dist/integrations/serverless.js +78 -0
  26. package/dist/orcha.d.ts +0 -1
  27. package/dist/orcha.js +0 -1
  28. package/dist/playground/public/app.css +0 -1
  29. package/dist/playground/public/app.js +0 -1
  30. package/dist/playground/server.d.ts +0 -1
  31. package/dist/playground/server.js +0 -1
  32. package/dist/playground/source.d.ts +0 -1
  33. package/dist/playground/source.js +0 -1
  34. package/dist/project-loader.d.ts +0 -1
  35. package/dist/project-loader.js +0 -1
  36. package/dist/providers/anthropic.d.ts +0 -1
  37. package/dist/providers/anthropic.js +0 -1
  38. package/dist/providers/bedrock.d.ts +0 -1
  39. package/dist/providers/bedrock.js +0 -1
  40. package/dist/providers/catalog.d.ts +0 -1
  41. package/dist/providers/catalog.js +0 -1
  42. package/dist/providers/deepseek.d.ts +0 -1
  43. package/dist/providers/deepseek.js +0 -1
  44. package/dist/providers/dispatcher.d.ts +0 -1
  45. package/dist/providers/dispatcher.js +0 -1
  46. package/dist/providers/google-gemini.d.ts +0 -1
  47. package/dist/providers/google-gemini.js +0 -1
  48. package/dist/providers/google-genai.d.ts +0 -1
  49. package/dist/providers/google-genai.js +0 -1
  50. package/dist/providers/index.d.ts +0 -1
  51. package/dist/providers/index.js +20 -5
  52. package/dist/providers/openai.d.ts +0 -1
  53. package/dist/providers/openai.js +0 -1
  54. package/dist/providers/sse.d.ts +0 -1
  55. package/dist/providers/sse.js +0 -1
  56. package/dist/providers/types.d.ts +0 -1
  57. package/dist/providers/types.js +0 -1
  58. package/dist/providers/vertex-ai.d.ts +0 -1
  59. package/dist/providers/vertex-ai.js +0 -1
  60. package/dist/runtime/actions/context.d.ts +0 -1
  61. package/dist/runtime/actions/context.js +0 -1
  62. package/dist/runtime/actions/execute.d.ts +0 -1
  63. package/dist/runtime/actions/execute.js +14 -2
  64. package/dist/runtime/actions/native.d.ts +0 -1
  65. package/dist/runtime/actions/native.js +0 -1
  66. package/dist/runtime/actions/sandbox.d.ts +0 -1
  67. package/dist/runtime/actions/sandbox.js +0 -1
  68. package/dist/runtime/agent.d.ts +0 -1
  69. package/dist/runtime/agent.js +0 -1
  70. package/dist/runtime/context.d.ts +0 -1
  71. package/dist/runtime/context.js +0 -1
  72. package/dist/runtime/create-orcha.d.ts +0 -1
  73. package/dist/runtime/create-orcha.js +0 -1
  74. package/dist/runtime/execution.d.ts +0 -1
  75. package/dist/runtime/execution.js +0 -1
  76. package/dist/runtime/session-events.d.ts +0 -1
  77. package/dist/runtime/session-events.js +0 -1
  78. package/dist/runtime/structured-output.d.ts +0 -1
  79. package/dist/runtime/structured-output.js +0 -1
  80. package/dist/storage/browser-indexeddb.d.ts +0 -1
  81. package/dist/storage/browser-indexeddb.js +0 -1
  82. package/dist/storage/create-store.d.ts +0 -1
  83. package/dist/storage/create-store.js +0 -1
  84. package/dist/storage/edge-store.d.ts +0 -1
  85. package/dist/storage/edge-store.js +0 -1
  86. package/dist/storage/migrate.d.ts +0 -1
  87. package/dist/storage/migrate.js +0 -1
  88. package/dist/storage/node-jsonl.d.ts +0 -1
  89. package/dist/storage/node-jsonl.js +0 -1
  90. package/dist/storage/node-sqlite.d.ts +0 -1
  91. package/dist/storage/node-sqlite.js +1 -2
  92. package/dist/storage/react-native-jsonl.d.ts +0 -1
  93. package/dist/storage/react-native-jsonl.js +0 -1
  94. package/dist/testing.d.ts +0 -1
  95. package/dist/testing.js +0 -1
  96. package/dist/types.d.ts +0 -1
  97. package/dist/types.js +0 -1
  98. package/dist-cjs/amarsia/metadata.js +0 -1
  99. package/dist-cjs/amarsia/sync.js +0 -1
  100. package/dist-cjs/cli-agents-template.js +0 -1
  101. package/dist-cjs/compiler/build-project.js +0 -1
  102. package/dist-cjs/compiler/compile.js +0 -1
  103. package/dist-cjs/env.js +0 -1
  104. package/dist-cjs/errors.js +0 -1
  105. package/dist-cjs/file-content.js +0 -1
  106. package/dist-cjs/index.js +0 -1
  107. package/dist-cjs/integrations/esbuild.js +0 -1
  108. package/dist-cjs/integrations/serverless.cjs +2 -0
  109. package/dist-cjs/integrations/serverless.js +125 -0
  110. package/dist-cjs/orcha.js +0 -1
  111. package/dist-cjs/playground/server.js +0 -1
  112. package/dist-cjs/playground/source.js +0 -1
  113. package/dist-cjs/project-loader.js +0 -1
  114. package/dist-cjs/providers/anthropic.js +0 -1
  115. package/dist-cjs/providers/bedrock.js +0 -1
  116. package/dist-cjs/providers/catalog.js +0 -1
  117. package/dist-cjs/providers/deepseek.js +0 -1
  118. package/dist-cjs/providers/dispatcher.js +0 -1
  119. package/dist-cjs/providers/google-gemini.js +0 -1
  120. package/dist-cjs/providers/google-genai.js +0 -1
  121. package/dist-cjs/providers/index.js +16 -3
  122. package/dist-cjs/providers/openai.js +0 -1
  123. package/dist-cjs/providers/sse.js +0 -1
  124. package/dist-cjs/providers/types.js +0 -1
  125. package/dist-cjs/providers/vertex-ai.js +0 -1
  126. package/dist-cjs/runtime/actions/context.js +0 -1
  127. package/dist-cjs/runtime/actions/execute.js +16 -2
  128. package/dist-cjs/runtime/actions/native.js +0 -1
  129. package/dist-cjs/runtime/actions/sandbox.js +0 -1
  130. package/dist-cjs/runtime/agent.js +0 -1
  131. package/dist-cjs/runtime/context.js +0 -1
  132. package/dist-cjs/runtime/create-orcha.js +0 -1
  133. package/dist-cjs/runtime/execution.js +0 -1
  134. package/dist-cjs/runtime/session-events.js +0 -1
  135. package/dist-cjs/runtime/structured-output.js +0 -1
  136. package/dist-cjs/storage/browser-indexeddb.js +0 -1
  137. package/dist-cjs/storage/create-store.js +0 -1
  138. package/dist-cjs/storage/edge-store.js +0 -1
  139. package/dist-cjs/storage/migrate.js +0 -1
  140. package/dist-cjs/storage/node-jsonl.js +0 -1
  141. package/dist-cjs/storage/node-sqlite.js +1 -2
  142. package/dist-cjs/storage/react-native-jsonl.js +0 -1
  143. package/dist-cjs/testing.js +0 -1
  144. package/dist-cjs/types/google-genai-sdk.d.js +0 -1
  145. package/dist-cjs/types.js +0 -1
  146. package/package.json +41 -9
  147. package/dist/amarsia/metadata.d.ts.map +0 -1
  148. package/dist/amarsia/metadata.js.map +0 -1
  149. package/dist/amarsia/sync.d.ts.map +0 -1
  150. package/dist/amarsia/sync.js.map +0 -1
  151. package/dist/cli-agents-template.d.ts.map +0 -1
  152. package/dist/cli-agents-template.js.map +0 -1
  153. package/dist/cli.d.ts.map +0 -1
  154. package/dist/cli.js.map +0 -1
  155. package/dist/compiler/build-project.d.ts.map +0 -1
  156. package/dist/compiler/build-project.js.map +0 -1
  157. package/dist/compiler/compile.d.ts.map +0 -1
  158. package/dist/compiler/compile.js.map +0 -1
  159. package/dist/env.d.ts.map +0 -1
  160. package/dist/env.js.map +0 -1
  161. package/dist/errors.d.ts.map +0 -1
  162. package/dist/errors.js.map +0 -1
  163. package/dist/file-content.d.ts.map +0 -1
  164. package/dist/file-content.js.map +0 -1
  165. package/dist/index.d.ts.map +0 -1
  166. package/dist/index.js.map +0 -1
  167. package/dist/integrations/esbuild.d.ts.map +0 -1
  168. package/dist/integrations/esbuild.js.map +0 -1
  169. package/dist/orcha.d.ts.map +0 -1
  170. package/dist/orcha.js.map +0 -1
  171. package/dist/playground/public/app.css.map +0 -7
  172. package/dist/playground/public/app.js.map +0 -7
  173. package/dist/playground/server.d.ts.map +0 -1
  174. package/dist/playground/server.js.map +0 -1
  175. package/dist/playground/source.d.ts.map +0 -1
  176. package/dist/playground/source.js.map +0 -1
  177. package/dist/project-loader.d.ts.map +0 -1
  178. package/dist/project-loader.js.map +0 -1
  179. package/dist/providers/anthropic.d.ts.map +0 -1
  180. package/dist/providers/anthropic.js.map +0 -1
  181. package/dist/providers/bedrock.d.ts.map +0 -1
  182. package/dist/providers/bedrock.js.map +0 -1
  183. package/dist/providers/catalog.d.ts.map +0 -1
  184. package/dist/providers/catalog.js.map +0 -1
  185. package/dist/providers/deepseek.d.ts.map +0 -1
  186. package/dist/providers/deepseek.js.map +0 -1
  187. package/dist/providers/dispatcher.d.ts.map +0 -1
  188. package/dist/providers/dispatcher.js.map +0 -1
  189. package/dist/providers/google-gemini.d.ts.map +0 -1
  190. package/dist/providers/google-gemini.js.map +0 -1
  191. package/dist/providers/google-genai.d.ts.map +0 -1
  192. package/dist/providers/google-genai.js.map +0 -1
  193. package/dist/providers/index.d.ts.map +0 -1
  194. package/dist/providers/index.js.map +0 -1
  195. package/dist/providers/openai.d.ts.map +0 -1
  196. package/dist/providers/openai.js.map +0 -1
  197. package/dist/providers/sse.d.ts.map +0 -1
  198. package/dist/providers/sse.js.map +0 -1
  199. package/dist/providers/types.d.ts.map +0 -1
  200. package/dist/providers/types.js.map +0 -1
  201. package/dist/providers/vertex-ai.d.ts.map +0 -1
  202. package/dist/providers/vertex-ai.js.map +0 -1
  203. package/dist/runtime/actions/context.d.ts.map +0 -1
  204. package/dist/runtime/actions/context.js.map +0 -1
  205. package/dist/runtime/actions/execute.d.ts.map +0 -1
  206. package/dist/runtime/actions/execute.js.map +0 -1
  207. package/dist/runtime/actions/native.d.ts.map +0 -1
  208. package/dist/runtime/actions/native.js.map +0 -1
  209. package/dist/runtime/actions/sandbox.d.ts.map +0 -1
  210. package/dist/runtime/actions/sandbox.js.map +0 -1
  211. package/dist/runtime/agent.d.ts.map +0 -1
  212. package/dist/runtime/agent.js.map +0 -1
  213. package/dist/runtime/context.d.ts.map +0 -1
  214. package/dist/runtime/context.js.map +0 -1
  215. package/dist/runtime/create-orcha.d.ts.map +0 -1
  216. package/dist/runtime/create-orcha.js.map +0 -1
  217. package/dist/runtime/execution.d.ts.map +0 -1
  218. package/dist/runtime/execution.js.map +0 -1
  219. package/dist/runtime/session-events.d.ts.map +0 -1
  220. package/dist/runtime/session-events.js.map +0 -1
  221. package/dist/runtime/structured-output.d.ts.map +0 -1
  222. package/dist/runtime/structured-output.js.map +0 -1
  223. package/dist/storage/browser-indexeddb.d.ts.map +0 -1
  224. package/dist/storage/browser-indexeddb.js.map +0 -1
  225. package/dist/storage/create-store.d.ts.map +0 -1
  226. package/dist/storage/create-store.js.map +0 -1
  227. package/dist/storage/edge-store.d.ts.map +0 -1
  228. package/dist/storage/edge-store.js.map +0 -1
  229. package/dist/storage/migrate.d.ts.map +0 -1
  230. package/dist/storage/migrate.js.map +0 -1
  231. package/dist/storage/node-jsonl.d.ts.map +0 -1
  232. package/dist/storage/node-jsonl.js.map +0 -1
  233. package/dist/storage/node-sqlite.d.ts.map +0 -1
  234. package/dist/storage/node-sqlite.js.map +0 -1
  235. package/dist/storage/react-native-jsonl.d.ts.map +0 -1
  236. package/dist/storage/react-native-jsonl.js.map +0 -1
  237. package/dist/testing.d.ts.map +0 -1
  238. package/dist/testing.js.map +0 -1
  239. package/dist/types.d.ts.map +0 -1
  240. package/dist/types.js.map +0 -1
  241. package/dist-cjs/amarsia/metadata.js.map +0 -7
  242. package/dist-cjs/amarsia/sync.js.map +0 -7
  243. package/dist-cjs/cli-agents-template.js.map +0 -7
  244. package/dist-cjs/compiler/build-project.js.map +0 -7
  245. package/dist-cjs/compiler/compile.js.map +0 -7
  246. package/dist-cjs/env.js.map +0 -7
  247. package/dist-cjs/errors.js.map +0 -7
  248. package/dist-cjs/file-content.js.map +0 -7
  249. package/dist-cjs/index.js.map +0 -7
  250. package/dist-cjs/integrations/esbuild.js.map +0 -7
  251. package/dist-cjs/orcha.js.map +0 -7
  252. package/dist-cjs/playground/server.js.map +0 -7
  253. package/dist-cjs/playground/source.js.map +0 -7
  254. package/dist-cjs/project-loader.js.map +0 -7
  255. package/dist-cjs/providers/anthropic.js.map +0 -7
  256. package/dist-cjs/providers/bedrock.js.map +0 -7
  257. package/dist-cjs/providers/catalog.js.map +0 -7
  258. package/dist-cjs/providers/deepseek.js.map +0 -7
  259. package/dist-cjs/providers/dispatcher.js.map +0 -7
  260. package/dist-cjs/providers/google-gemini.js.map +0 -7
  261. package/dist-cjs/providers/google-genai.js.map +0 -7
  262. package/dist-cjs/providers/index.js.map +0 -7
  263. package/dist-cjs/providers/openai.js.map +0 -7
  264. package/dist-cjs/providers/sse.js.map +0 -7
  265. package/dist-cjs/providers/types.js.map +0 -7
  266. package/dist-cjs/providers/vertex-ai.js.map +0 -7
  267. package/dist-cjs/runtime/actions/context.js.map +0 -7
  268. package/dist-cjs/runtime/actions/execute.js.map +0 -7
  269. package/dist-cjs/runtime/actions/native.js.map +0 -7
  270. package/dist-cjs/runtime/actions/sandbox.js.map +0 -7
  271. package/dist-cjs/runtime/agent.js.map +0 -7
  272. package/dist-cjs/runtime/context.js.map +0 -7
  273. package/dist-cjs/runtime/create-orcha.js.map +0 -7
  274. package/dist-cjs/runtime/execution.js.map +0 -7
  275. package/dist-cjs/runtime/session-events.js.map +0 -7
  276. package/dist-cjs/runtime/structured-output.js.map +0 -7
  277. package/dist-cjs/storage/browser-indexeddb.js.map +0 -7
  278. package/dist-cjs/storage/create-store.js.map +0 -7
  279. package/dist-cjs/storage/edge-store.js.map +0 -7
  280. package/dist-cjs/storage/migrate.js.map +0 -7
  281. package/dist-cjs/storage/node-jsonl.js.map +0 -7
  282. package/dist-cjs/storage/node-sqlite.js.map +0 -7
  283. package/dist-cjs/storage/react-native-jsonl.js.map +0 -7
  284. package/dist-cjs/testing.js.map +0 -7
  285. package/dist-cjs/types/google-genai-sdk.d.js.map +0 -7
  286. package/dist-cjs/types.js.map +0 -7
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/cli-agents-template.ts"],
4
- "sourcesContent": ["export const AGENTS_MD = `# Orcha project guide\n\nThis repository uses OrchaJS, a filesystem-convention framework for durable\nAI agents. Treat the \\`orcha/\\` directory as source code. Do not edit generated\nfiles under \\`.orcha/\\`.\n\n## Commands\n\n- \\`orcha init\\` creates the initial Orcha files without overwriting files.\n- \\`orcha dev\\` validates agent source and watches \\`orcha/**\\` for changes.\n- \\`orcha playground\\` opens the built-in local UI and hot reloads agent source.\n- \\`orcha run <agent> --input \"\u2026\"\\` executes one registered agent.\n- \\`orcha run <agent> --input-file request.json\\` accepts structured input.\n- \\`orcha run <agent> --session <id> --input \"\u2026\"\\` continues a session.\n- \\`orcha run <agent> --session <id> --tool-results results.json\\` submits\n pending client-action results.\n- \\`orcha test\\` runs every enabled discovered agent test.\n- \\`orcha test <agent>\\` or \\`orcha test <agent>/<case>\\` narrows the run.\n- \\`orcha migrate-storage --to sqlite|node-jsonl\\` copies all session histories\n between local stores without deleting the source.\n- \\`orcha export-session <agent> <sessionId> [--output <path>]\\` exports one\n session from the active store as JSONL.\n- \\`orcha build\\` creates the production Orcha bundle without calling models.\n- Add \\`--json\\` to \\`run\\` and \\`test\\` for machine-readable output.\n\n\\`run\\`, \\`test\\`, and playground executions use real providers and require\ncredentials. \\`dev\\` and \\`build\\` are offline. Sessions use JSONL by default\nunder \\`.orcha/sessions/<agentName>/\\`; opt-in SQLite stores all agents in\n\\`.orcha/sessions/orcha-sqlite.db\\`.\n\n## Registry\n\n\\`orcha/index.ts\\` initializes providers and explicitly registers agents:\n\n\\`\\`\\`ts\nimport { orcha } from \"orchajs\";\n\norcha.init({\n providers: {\n anthropic: process.env.ANTHROPIC_API_KEY ?? \"\",\n openai: process.env.OPENAI_API_KEY ?? \"\",\n },\n agents: {\n supportBot: \"./supportBot\",\n },\n});\n\\`\\`\\`\n\nOnly registered agents are compiled. Agent keys become runtime properties\nsuch as \\`orcha.supportBot\\`. Local actions use the native Node.js runtime by\ndefault. Set \\`actions.runtime: \"sandbox\"\\` only when isolated execution is\nrequired.\n\n\\`orcha.init()\\` fields:\n\n- \\`providers\\` (required): provider configurations keyed by built-in provider\n name.\n- \\`agents\\` (required): runtime property names mapped to folders relative to\n \\`orcha/\\`. At least one agent is required.\n- \\`amarsia.key\\` (optional): project connection key generated in Amarsia.\n When set, Orcha syncs structural project and agent metadata only. It never\n uploads provider credentials, environment values, prompts, instructions,\n test inputs, or action source.\n- \\`amarsia.endpoint\\` (optional): Amarsia API URL for project sync. Defaults to\n \\`AMARSIA_API_URL\\` and then \\`https://api.amarsia.com\\`.\n- \\`actions\\` (optional): overrides the native local-action runtime or configures\n its environment and sandbox settings.\n- \\`storage.strategy\\` (optional): \\`\"node-jsonl\"\\` (default) or \\`\"sqlite\"\\`.\n The SQLite driver ships as an internal optional Orcha dependency.\n- \\`storage.directory\\` (optional): session directory relative to project\n root; defaults to \\`.orcha/sessions\\`.\n- \\`root\\` (optional): absolute or working-directory-relative project root;\n defaults to \\`ORCHA_PROJECT_ROOT\\` and then \\`process.cwd()\\`.\n\nThe Orcha library reads the host application's existing \\`process.env\\`.\nStandalone Orcha CLI commands also load \\`.env\\` from the project root without\noverriding environment variables already in the process.\n\nProvider configuration shapes:\n\n\\`\\`\\`ts\nproviders: {\n anthropic: process.env.ANTHROPIC_API_KEY ?? \"\",\n deepseek: process.env.DEEPSEEK_API_KEY ?? \"\",\n googlegenai: process.env.GOOGLE_API_KEY ?? \"\",\n openai: {\n apiKey: process.env.OPENAI_API_KEY ?? \"\",\n baseUrl: \"https://api.openai.com/v1\", // optional override\n },\n vertexai: {\n project: process.env.GOOGLE_CLOUD_PROJECT ?? \"\",\n location: process.env.GOOGLE_CLOUD_LOCATION ?? \"us-central1\",\n // credentials is optional; omit it to use Google ADC.\n credentials: {\n clientEmail: process.env.GOOGLE_CLIENT_EMAIL ?? \"\",\n privateKey: process.env.GOOGLE_PRIVATE_KEY ?? \"\",\n },\n baseUrl: undefined, // optional override\n },\n bedrock: {\n region: process.env.AWS_REGION ?? \"us-east-1\",\n // credentials is optional; omit it to use the AWS credential chain.\n credentials: {\n accessKeyId: process.env.AWS_ACCESS_KEY_ID ?? \"\",\n secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY ?? \"\",\n sessionToken: process.env.AWS_SESSION_TOKEN,\n },\n baseUrl: undefined, // optional override\n },\n}\n\\`\\`\\`\n\nAPI-key providers accept either a string shorthand or\n\\`{ apiKey, baseUrl? }\\`. Vertex AI requires \\`project\\` and \\`location\\`;\nexplicit service-account credentials are optional. Bedrock requires \\`region\\`;\nexplicit AWS credentials are optional. Never place credentials in\n\\`index.json\\`, instructions, tests, session metadata, or committed files.\n\n## Agent folders\n\n\\`\\`\\`text\norcha/\n index.ts\n supportBot/\n index.json\n instructions.md\n actions/\n skills/\n tests/\n evaluations/\n\\`\\`\\`\n\n\\`index.json\\` selects the model:\n\n\\`\\`\\`json\n{\n \"name\": \"Support Agent\",\n \"description\": \"Resolve customer support questions using confirmed account data.\",\n \"provider\": \"anthropic\",\n \"model\": \"claude-sonnet-4-6\",\n \"region\": \"provider_managed\",\n \"maxTokens\": 10240,\n \"outputType\": \"text\"\n}\n\\`\\`\\`\n\nOptional fields include \\`reasoningLevel\\`, \\`outputType: \"json\"\\`, and an\n\\`outputSchema\\` JSON Schema. Provider-specific reasoning values are forwarded\nwithout translation. Put the agent's stable role, boundaries, and operating\ninstructions in \\`instructions.md\\`.\n\nAgent \\`index.json\\` fields:\n\n- \\`name\\` (required): concise human-readable agent name.\n- \\`description\\` (optional): what the agent does and when it should be used.\n- \\`provider\\` (required): \\`\"anthropic\"\\`, \\`\"bedrock\"\\`, \\`\"deepseek\"\\`,\n \\`\"openai\"\\`, \\`\"googlegenai\"\\`, or \\`\"vertexai\"\\`.\n- \\`model\\` (required): exact provider model identifier.\n- \\`region\\` (optional): provider/model routing hint; defaults in durable\n metadata to \\`\"provider_managed\"\\`.\n- \\`maxTokens\\` (optional): positive integer. If omitted, the provider adapter\n chooses its default.\n- \\`reasoningLevel\\` (optional): non-empty provider-native string. Orcha does\n not translate values between providers.\n- \\`outputType\\` (optional): \\`\"text\"\\` (default) or \\`\"json\"\\`. Image and\n audio are reserved but not implemented.\n- \\`outputSchema\\` (required for JSON output): JSON Schema used for provider\n structured output and final validation.\n\n\\`instructions.md\\` is required and cannot be empty. At compile time it becomes\nthe base system prompt. Orcha appends the compact available-skill catalog and\nthe full instructions for skills already loaded in this durable session.\n\n## Subagents\n\nRegister private subagents alongside a parent in \\`orcha/index.ts\\`:\n\n\\`\\`\\`js\nagents: {\n coordinator: {\n path: \"./coordinator\",\n subagents: {\n researcher: \"./researcher\",\n },\n },\n researcher: \"./researcher\",\n}\n\\`\\`\\`\n\nOnly top-level keys become \\`orcha.<agentName>\\`. In this example the\nresearcher is both directly accessible and available to the coordinator.\nRemove its top-level entry to make it private.\n\nA parent may configure delegation limits in its \\`index.json\\`:\n\n\\`\\`\\`json\n{\n \"subagents\": {\n \"maxPerRun\": 3\n }\n}\n\\`\\`\\`\n\n\\`maxPerRun\\` limits newly created child sessions in one parent run and\ndefaults to 10.\n\nThe parent receives a compact catalog containing each subagent's registered\nname and optional description. Internal \\`run_agent\\`, \\`resume_agent\\`,\n\\`inspect_agent\\` tools let it start, continue, and inspect only child sessions\ninitiated by its current session. A delegated agent cannot delegate again.\n\nSubagent calls are synchronous. The parent becomes\n\\`waiting_for_subagent\\` while the child runs, then receives the child's text,\npause state, client-action request, failure, or completion as a normal tool\nresult. The parent and child keep separate linked JSONL sessions.\n\n## Core execution model\n\nAn **agent** is the compiled definition: model settings, instructions, actions,\nskills, and evaluations. An agent can create many independent sessions.\n\nA **session** is one durable conversation owned by one agent. It has one\n\\`sessionId\\`, optional name and metadata, fixed prompt variables, and one\nappend-only JSONL timeline. Completing one response does not close the\nsession\u2014the application can resume it later. A session cannot be transferred\nto another registered agent, but later runs may use a different provider or\nmodel if that same agent's configuration changes.\n\nA **run** is one attempt to advance a session. \\`run()\\` creates a session and\nits first run. A conversational \\`resume(sessionId, { content })\\` creates the\nnext numbered run in that session. Each run accumulates its own model usage and\nends in exactly one of these states:\n\n- \\`completed\\`: the model produced final output.\n- \\`waiting_for_subagent\\`: the parent is waiting for a synchronous child\n response and continues automatically when it arrives.\n- \\`waiting_for_client_action\\`: the model requested work that only the\n application can perform. The run is paused, not completed.\n- \\`paused\\`: active provider work was aborted, streamed output was preserved,\n and a later \\`resume()\\` starts a new run.\n- \\`failed\\`: validation, provider, storage, or execution failed. The durable\n events remain available for diagnosis.\n\nAn **execution** is the in-process handle returned by one call to \\`run()\\` or\n\\`resume()\\`. It exposes a cumulative output stream, latest snapshot, final\nresult promise, and evaluation promise. An execution ends when that invocation\ncompletes, pauses, or fails; the durable session may continue through another\nexecution.\n\nA **model round** is one provider request inside a run. One run may contain\nseveral rounds:\n\n\\`\\`\\`text\nuser input\n \u2192 model round\n \u2192 tool calls\n \u2192 tool results\n \u2192 another model round\n \u2192 final answer\n\\`\\`\\`\n\nLocal actions and skill loads are handled automatically inside the same\nexecution. Their results are sent back to the model and the model loop\ncontinues without application involvement.\n\nA **client action** deliberately crosses the application boundary. Orcha can\ndescribe the tool to the model but cannot execute it because the operation\nbelongs to a browser, mobile app, approval system, or other caller-owned\nenvironment. The complete pause/continue flow is:\n\n\\`\\`\\`text\n1. Application calls agent.run(...) or agent.resume(...content).\n2. Model requests one or more client actions.\n3. Orcha stores client_action.requested and run.paused.\n4. execution.result resolves with:\n {\n status: \"waiting_for_client_action\",\n sessionId,\n clientToolCalls: [{ callId, name, arguments }]\n }\n5. Application executes every requested action.\n6. Application calls agent.resume(sessionId, {\n toolResults: [{ callId, output, isError? }]\n }).\n7. Orcha validates every callId and output, stores the results, and continues\n the same paused run from its prior model context.\n8. The resumed execution either completes, requests more client actions, or\n fails.\n\\`\\`\\`\n\nEvery pending call must be resolved exactly once in one resume operation.\n\\`callId\\` links the submitted result to the model's request; the action name\nmust not be substituted for it. Re-submitting the identical resolved result is\nidempotent and returns the prior completed result. Submitting different data\nfor an already-resolved call fails with \\`action_result_conflict\\`.\n\n\\`clientCapabilities\\` is supplied per invocation because different callers\nmay support different client actions. Orcha exposes only declared client\nactions to that model round. Local actions are always available when compiled.\n\nOnly one execution may mutate a session at a time. Concurrent calls for the\nsame \\`sessionId\\` return \\`session_busy\\`; different sessions can run\nindependently.\n\n## Running and resuming\n\n\\`\\`\\`ts\nconst execution = orcha.supportBot.run({\n content: \"Check subscription sub_123.\",\n name: \"Subscription check\",\n metadata: { accountId: \"acct_123\" },\n clientCapabilities: [\"request_human_approval\"],\n});\n\nfor await (const snapshot of execution.stream) {\n console.log(snapshot);\n}\n\nconst result = await execution.result;\nconst evaluations = await execution.evaluations;\n\\`\\`\\`\n\n\\`run()\\` input fields:\n\n- \\`content\\` (required): a non-empty string, one content item, or an array.\n Use \\`{ filePath: \"./document.pdf\" }\\` for a local file or\n \\`{ url: \"https://example.com/document.pdf\" }\\` for a remote file.\n \\`mimeType\\` is optional when it can be inferred from the extension. Durable\n events store local paths and MIME types, never encoded file bytes.\n- \\`name\\` (optional): trimmed session label from 1 through 200 characters.\n- \\`metadata\\` (optional): at most 50 fields with non-empty keys and finite\n string, number, boolean, or null values. Metadata is durable and available\n to local action context; never place secrets in it.\n- \\`variables\\` (optional): at most 50 string values whose keys are JavaScript\n identifiers. They replace \\`{{ variableName }}\\` placeholders in\n \\`instructions.md\\`, are fixed when the session is created, and are reused\n by later resumes. A missing referenced variable fails the run.\n- \\`clientCapabilities\\` (optional): action names the current caller can\n execute. Client actions not declared here are withheld from the model.\n\n\\`run()\\` always creates a new durable session. Continue one with:\n\n\\`\\`\\`ts\nconst execution = orcha.supportBot.resume(sessionId, {\n content: \"Continue with the confirmed account.\",\n});\n\\`\\`\\`\n\nIf a result has \\`status: \"waiting_for_client_action\"\\`, execute the requested\nclient actions in the application and submit every result:\n\n\\`\\`\\`ts\norcha.supportBot.resume(sessionId, {\n toolResults: [\n { callId: \"call_123\", output: { approved: true } }\n ],\n});\n\\`\\`\\`\n\nNever invent call IDs. Use the IDs returned in \\`clientToolCalls\\`.\n\n## Actions\n\nEach action has metadata and, for local actions, executable code:\n\n\\`\\`\\`text\nactions/\n lookupAccount/\n index.json\n index.js\n\\`\\`\\`\n\n\\`\\`\\`json\n{\n \"name\": \"lookup_account\",\n \"description\": \"Look up one account.\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"accountId\": { \"type\": \"string\" }\n },\n \"required\": [\"accountId\"],\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"status\": { \"type\": \"string\" }\n },\n \"required\": [\"status\"],\n \"additionalProperties\": false\n }\n}\n\\`\\`\\`\n\n\\`\\`\\`js\nexport default async function lookupAccount({ accountId }) {\n return { status: \"active\" };\n}\n\\`\\`\\`\n\nAction entrypoints can use ordinary relative project imports, TypeScript\nmodules, npm packages, transitive dependencies, and standard exports. Orcha\nbundles the complete import graph for development and production.\n\nClient actions use \\`\"execution\": \"client\"\\` and do not include executable\ncode. Orcha pauses until the caller submits their results. Keep action names,\ndescriptions, schemas, and implementations aligned.\n\nAction \\`index.json\\` fields:\n\n- \\`name\\` (required): model-facing tool name, 1\u201364 letters, numbers,\n underscores, or hyphens. \\`load_skill\\` is reserved.\n- \\`description\\` (required): tells the model when and why to call the action.\n- \\`enabled\\` (optional): defaults to \\`true\\`. Set to \\`false\\` to keep a WIP\n action inactive without deleting its folder.\n- \\`execution\\` (optional): defaults to \\`\"local\"\\`, which executes \\`index.js\\`.\n Set to \\`\"client\"\\` to pause and delegate execution to the application.\n- \\`parameters\\` (required): JSON Schema for model-generated arguments.\n- \\`outputSchema\\` (optional): JSON Schema validated against local or submitted\n client output before the model receives it.\n- \\`timeoutMs\\` (optional): integer from 1 through 120000; defaults to 10000.\n- \\`permissions.env\\` (optional): names copied from \\`orcha.init().actions.env\\`\n into the action context.\n- \\`permissions.network\\` (optional): exact hosts or wildcard subdomains such\n as \\`\"api.example.com\"\\` or \\`\"*.example.com\"\\` allowed through\n \\`context.fetch\\`. Redirects are rejected.\n- \\`sideEffect\\` (optional): descriptive metadata for whether the operation\n mutates external state. It does not currently change execution behavior.\n\n\\`orcha.init().actions.runtime\\` and an action's \\`execution\\` solve different\nproblems:\n\n- \\`execution: \"client\"\\`: Orcha never executes code for this action.\n- \\`execution: \"local\"\\` + \\`runtime: \"sandbox\"\\`: compiled code runs in a\n QuickJS isolate with JSON-only inputs/outputs, default 32 MB memory, default\n 512 KB stack, interruptible timeout, declared environment values, and\n allowlisted network access through the provided context.\n- \\`execution: \"local\"\\` + \\`runtime: \"native\"\\`: code runs in the host Node.js\n process. It can use host privileges directly. The timeout rejects slow\n asynchronous work but cannot interrupt synchronous blocking code.\n\nGlobal local-action configuration:\n\n\\`\\`\\`ts\nactions: {\n runtime: \"sandbox\", // optional; native is the default\n env: {\n BILLING_API_TOKEN: process.env.BILLING_API_TOKEN,\n },\n sandbox: {\n memoryLimitMb: 32,\n stackLimitKb: 512,\n },\n}\n\\`\\`\\`\n\nThe local action signature is\n\\`(parameters, context) => output | Promise<output>\\`. Context contains\n\\`sessionId\\`, immutable session \\`metadata\\`, a stable \\`idempotencyKey\\`,\nallowlisted \\`env\\`, guarded \\`fetch\\`, and prefixed \\`log\\`.\n\n## Skills\n\nSkills are lazy-loaded procedural instructions. Direct child folders under\n\\`skills/\\` are discovered automatically. Each folder contains \\`index.json\\`\nmetadata and \\`instructions.md\\`.\nThe model receives a compact catalog and can call the internal \\`load_skill\\`\ntool. Loaded instructions remain active for the durable session. Lifecycle\nevents are \\`skill.requested\\`, \\`skill.loaded\\`, and \\`skill.failed\\`.\n\nSkill \\`index.json\\` fields:\n\n- \\`name\\` (required): model-facing name, 1\u201364 letters, numbers, underscores,\n or hyphens; unique within the agent.\n- \\`description\\` (required): compact catalog description shown before loading.\n- \\`enabled\\` (optional): defaults to \\`true\\`. Set to \\`false\\` to keep a WIP\n skill inactive.\n- \\`triggers\\` (optional): non-empty array of non-empty situations describing\n when the model should load the skill.\n\n\\`instructions.md\\` is required and cannot be empty for enabled skills.\n\\`index.json.name\\` is the name used by the model and durable events.\n\n## Tests\n\nDirect child folders under \\`tests/\\` are discovered automatically. Each\ncase's \\`index.json\\` defines \\`input\\`, optional mocked action responses, and\n\\`expect\\`. Tests run the real compiled agent and provider. Actions listed\nunder \\`actions\\` are mocked; unlisted local actions execute live. Orcha reports\nlive action use in the terminal, test report, and session trace.\nClient actions must always be mocked because no application client is attached\nto the test runner.\n\n\\`\\`\\`json\n{\n \"input\": { \"content\": \"Check account acct_123.\" },\n \"actions\": {\n \"lookup_account\": {\n \"responses\": [\n { \"output\": { \"status\": \"active\" } }\n ]\n }\n },\n \"expect\": {\n \"status\": \"completed\",\n \"text\": { \"contains\": [\"active\"] },\n \"actions\": [\n {\n \"name\": \"lookup_account\",\n \"arguments\": { \"equals\": { \"accountId\": \"acct_123\" } }\n }\n ]\n }\n}\n\\`\\`\\`\n\nTest sessions use the \\`ses_test_<timestamp>_<uuid>\\` format and end with a \\`test.completed\\`\nevent. Prefer semantic output assertions; verify exact identifiers and values\nthrough action-argument assertions.\n\nTest \\`index.json\\` fields:\n\n- \\`name\\` (optional): friendly display name. The folder name remains the CLI\n selector.\n- \\`description\\` (optional): human-readable purpose.\n- \\`enabled\\` (optional): defaults to \\`true\\`. Set to \\`false\\` to keep a WIP test\n inactive.\n- \\`input\\` (required): an inline agent input object or a path to a JSON file\n containing that object. Relative paths resolve from the test case directory.\n- \\`input.content\\` (required for inline input): string or multimodal content\n array.\n- \\`input.variables\\` (optional): string map available to the session.\n- \\`input.metadata\\` (optional): string, number, boolean, or null values.\n- \\`actions\\` (optional): mocked actions keyed by compiled action name. Unlisted\n local actions execute live and may cause side effects. Unknown action names\n are rejected, and unlisted client actions are rejected. Every \\`responses\\`\n array is consumed in call order.\n- \\`responses[].output\\` (required): mocked action result.\n- \\`responses[].isError\\` (optional): marks the mocked result as an error.\n- \\`expect.status\\` (optional): \\`\"completed\"\\` or \\`\"failed\"\\`; defaults to\n \\`\"completed\"\\`.\n- \\`expect.output.equals\\` / \\`partial\\` (optional): exact or recursive partial\n comparison against structured output.\n- \\`expect.text.contains\\` / \\`excludes\\` (optional): case-sensitive semantic\n text checks.\n- \\`expect.actions\\` (optional): ordered expected calls. Each may assert\n \\`arguments.equals\\` or \\`arguments.partial\\`.\n\nThe test folder name is the selector used by \\`orcha test agent/testName\\`.\n\n## Evaluations\n\nEvaluations are asynchronous LLM judges discovered from direct child folders\nunder \\`evaluations/\\`. Each folder's \\`index.json\\` defines its provider, model,\nmetrics, and thresholds:\n\n\\`\\`\\`json\n{\n \"name\": \"response_quality\",\n \"description\": \"Grounding of agent responses.\",\n \"instructions\": \"Judge the complete response using only confirmed evidence recorded in the session.\",\n \"enabled\": true,\n \"provider\": \"openai\",\n \"model\": \"gpt-5-mini\",\n \"metrics\": [\n {\n \"name\": \"groundedness\",\n \"description\": \"The answer relies on confirmed session evidence.\",\n \"threshold\": 0.8\n }\n ]\n}\n\\`\\`\\`\n\n\\`execution.result\\` does not wait for judges. Await\n\\`execution.evaluations\\` when results must finish before process exit.\nEvaluations always finish during \\`orcha test\\`; judge errors and missed\nthresholds fail the test. Lifecycle events are \\`evaluation.requested\\`,\n\\`evaluation.completed\\`, and \\`evaluation.failed\\`.\n\nEvaluation \\`index.json\\` fields:\n\n- \\`name\\` (required): durable model-facing identifier, 1\u201364 letters, numbers,\n underscores, or hyphens; unique within the agent.\n- \\`description\\` (optional): short human-facing summary of the evaluator.\n- \\`instructions\\` (optional): detailed prompt supplied to the judge. When\n omitted, \\`description\\` is used for backward compatibility.\n- \\`enabled\\` (optional): defaults to \\`true\\`. Disabled evaluations are ignored\n by compilation and runtime.\n- \\`provider\\` and \\`model\\` (required): independently select the judge. The\n provider must also exist in \\`orcha.init().providers\\`.\n- \\`maxTokens\\` (optional): positive integer; defaults to 2000 for judges.\n- \\`reasoningLevel\\` (optional): non-empty provider-native string forwarded\n without translation.\n- \\`metrics\\` (required): non-empty array with unique metric names.\n- \\`metrics[].name\\`: 1\u201364 letters, numbers, underscores, or hyphens.\n- \\`metrics[].description\\`: exact criterion supplied to the judge.\n- \\`metrics[].threshold\\`: inclusive number from 0 to 1. A metric passes when\n the returned score is greater than or equal to this threshold.\n\nThe judge sees a sanitized transcript of user/assistant messages, action\nrequests and outcomes, client-action activity, and loaded skill names. It does\nnot receive internal reasoning blocks, replay metadata, previous evaluation\nresults, or test assertions. It must return exactly one score, reasoning\nstring, and non-empty evidence array for every configured metric.\n\n## Sessions and logs\n\nThe configured session store is the durable source of truth. JSONL stores one\ncomplete event object per line; SQLite stores one event per row. Events are\nappend-only and ordered by \\`sequence\\`.\n\nAll events use this envelope:\n\n\\`\\`\\`ts\ntype SessionEvent<T> = {\n sequence: number; // starts at 1 and increases across the whole session\n type: SessionEventType;\n timestamp: string; // ISO-8601 UTC timestamp\n run?: number; // present for run-scoped events\n data: T;\n};\n\\`\\`\\`\n\nSession-scoped events omit \\`run\\`. Optional properties whose values are\n\\`undefined\\` are omitted from serialized JSON.\n\nShared stored structures:\n\n\\`\\`\\`ts\ntype Usage = {\n inputTokens: number;\n outputTokens: number;\n reasoningTokens: number | null;\n cacheReadTokens: number;\n cacheWriteTokens: number;\n};\n\ntype ErrorData = {\n code: string;\n message: string;\n retryable?: boolean;\n};\n\ntype UserContent =\n | { type: \"text\"; text: string }\n | { type: \"file\"; filePath: string; mimeType: string }\n | {\n type: \"image\" | \"video\" | \"audio\" | \"url\";\n mimeType: string;\n fileUri: string;\n };\n\ntype AssistantContent =\n | { type: \"text\"; text: string }\n | {\n type: \"reasoning\";\n text: string;\n replay?: { providerId?: string; opaqueData?: string };\n }\n | {\n type: \"tool_call\";\n callId: string;\n name: string;\n arguments: Record<string, unknown>;\n replay?: { providerId?: string; opaqueData?: string };\n };\n\ntype ToolResult = {\n callId: string;\n output: unknown;\n isError?: boolean;\n};\n\\`\\`\\`\n\nExact event payloads:\n\n\\`\\`\\`ts\ntype SessionCreated = SessionEvent<{\n schemaVersion: 1;\n sessionId: string;\n agent: string;\n status: \"active\";\n name?: string;\n metadata: Record<string, string | number | boolean | null>;\n variables: Record<string, string>;\n lineage?: {\n origin: \"delegated\";\n parentAgent: string;\n parentSessionId: string;\n parentCallId: string;\n };\n}>; // type \"session.created\", no run\n\ntype SessionUpdated = SessionEvent<{\n name?: string;\n metadata?: Record<string, string | number | boolean | null>;\n}>; // type \"session.updated\", no run\n\ntype RunStarted = SessionEvent<{\n status: \"running\";\n agent: string;\n provider: string;\n model: string;\n region: string;\n reasoningLevel?: string;\n outputType: \"text\" | \"json\";\n clientCapabilities: string[];\n}>; // type \"run.started\"\n\ntype UserMessageCreated = SessionEvent<{\n role: \"user\";\n content: UserContent[];\n}>; // type \"message.created\"\n\ntype AssistantMessageCreated = SessionEvent<{\n status: \"completed\" | \"incomplete\";\n provider: string;\n model: string;\n responseId?: string;\n stopReason?: \"end_turn\" | \"tool_call\" | \"max_tokens\" |\n \"content_filter\" | \"unknown\";\n role: \"assistant\";\n content: AssistantContent[];\n parsedOutput?: unknown; // final JSON output only\n usage: Usage;\n durationMs: number;\n}>; // type \"message.created\"\n\ntype ToolMessageCreated = SessionEvent<{\n role: \"tool\";\n content: ToolResult[];\n}>; // type \"message.created\"\n\ntype ActionRequested = SessionEvent<{\n callId: string;\n name: string;\n arguments: Record<string, unknown>;\n sourceHash?: string;\n idempotencyKey: string; // sessionId:callId\n}>; // type \"action.requested\"\n\ntype ActionCompleted = SessionEvent<{\n callId: string;\n name: string;\n output: unknown;\n sourceHash?: string;\n durationMs: number;\n}>; // type \"action.completed\"\n\ntype ActionFailed = SessionEvent<{\n callId: string;\n name: string;\n sourceHash?: string;\n durationMs: number;\n error: {\n code: \"action_execution_failed\";\n message: string;\n };\n}>; // type \"action.failed\"\n\ntype ClientActionRequested = SessionEvent<{\n status: \"waiting\";\n calls: Array<{\n callId: string;\n name: string;\n arguments: Record<string, unknown>;\n }>;\n localResults: ToolResult[];\n toolCallOrder: string[];\n}>; // type \"client_action.requested\"\n\ntype ClientActionResolved = SessionEvent<{\n status: \"completed\";\n results: ToolResult[];\n}>; // type \"client_action.resolved\"\n\ntype SkillRequested = SessionEvent<{\n callId: string;\n name: unknown;\n}>; // type \"skill.requested\"\n\ntype SkillLoaded = SessionEvent<{\n callId: string;\n name: string;\n alreadyLoaded: boolean;\n}>; // type \"skill.loaded\", no run\n\ntype SkillFailed = SessionEvent<{\n callId: string;\n name: unknown;\n error: {\n code: \"skill_not_found\";\n message: string;\n };\n}>; // type \"skill.failed\"\n\ntype EvaluationRequested = SessionEvent<{\n name: string;\n provider: string;\n model: string;\n evaluatedThroughSequence: number;\n}>; // type \"evaluation.requested\"\n\ntype EvaluationMetric = {\n name: string;\n score: number;\n threshold: number;\n passed: boolean;\n reasoning: string;\n evidence: string[];\n};\n\ntype EvaluationCompleted = SessionEvent<{\n name: string;\n status: \"passed\" | \"failed\";\n metrics: EvaluationMetric[];\n usage?: Usage;\n durationMs: number;\n provider: string;\n model: string;\n evaluatedThroughSequence: number;\n}>; // type \"evaluation.completed\"\n\ntype EvaluationFailed = SessionEvent<{\n name: string;\n status: \"error\";\n metrics: [];\n durationMs: number;\n error: { message: string };\n provider: string;\n model: string;\n evaluatedThroughSequence: number;\n}>; // type \"evaluation.failed\"\n\ntype SubagentInitiated = SessionEvent<{\n callId: string;\n agent: string;\n sessionId: string;\n status: \"running\";\n}>; // type \"subagent.initiated\"\n\ntype SubagentResumed = SessionEvent<{\n callId: string;\n agent: string;\n sessionId: string;\n status: \"running\";\n}>; // type \"subagent.resumed\"\n\ntype SubagentCompletedOrPausedOrFailed = SessionEvent<{\n callId: string;\n agent: string;\n sessionId: string;\n status:\n | \"completed\"\n | \"waiting_for_client_action\"\n | \"paused\"\n | \"failed\";\n output?: unknown;\n usage?: Usage;\n clientToolCalls?: Array<{\n callId: string;\n name: string;\n arguments: Record<string, unknown>;\n }>;\n error?: ErrorData;\n}>; // type \"subagent.completed\" | \"subagent.paused\" | \"subagent.failed\"\n\ntype RunPaused = SessionEvent<{\n status: \"waiting_for_client_action\" | \"paused\";\n clientToolCalls?: Array<{\n callId: string;\n name: string;\n arguments: Record<string, unknown>;\n }>;\n usage?: Usage;\n output?: unknown;\n durationMs?: number;\n}>; // type \"run.paused\"\n\ntype RunCompleted = SessionEvent<{\n status: \"completed\";\n durationMs: number;\n usage: Usage;\n}>; // type \"run.completed\"\n\ntype RunFailed = SessionEvent<{\n status: \"failed\";\n durationMs: number;\n usage?: Usage;\n error: ErrorData;\n}>; // type \"run.failed\"\n\ntype SessionPaused = SessionEvent<{\n status: \"paused\";\n}>; // type \"session.paused\", no run\n\ntype SessionResumed = SessionEvent<{\n status: \"active\";\n}>; // type \"session.resumed\", no run\n\ntype TestCompleted = SessionEvent<{\n suiteId: string;\n agent: string;\n test: string;\n status: \"passed\" | \"failed\";\n durationMs: number;\n assertions: Array<{\n path: string;\n passed: boolean;\n message: string;\n expected?: unknown;\n actual?: unknown;\n }>;\n usage?: Usage;\n evaluations?: Array<{\n name: string;\n status: \"passed\" | \"failed\" | \"error\";\n metrics: EvaluationMetric[];\n usage?: Usage;\n durationMs: number;\n error?: { message: string };\n }>;\n warnings?: Array<{\n code: \"live_actions\";\n message: string;\n actions: string[];\n }>;\n error?: ErrorData;\n}>; // type \"test.completed\", no run\n\ntype TestWarning = SessionEvent<{\n code: \"live_actions\";\n message: string;\n actions: string[];\n}>; // type \"test.warning\", no run\n\\`\\`\\`\n\nTypical event order:\n\n\\`\\`\\`text\nsession.created\nrun.started\nmessage.created (user)\nmessage.created (assistant, possibly with tool_call)\naction.requested \u2192 action.completed|action.failed # local action\nsubagent.initiated\n...child session advances independently...\nsubagent.paused\nsubagent.resumed\n...child session advances independently...\nsubagent.completed|subagent.paused|subagent.failed\nmessage.created (tool)\n...additional model/action rounds...\nmessage.created (assistant final)\nrun.completed\nevaluation.requested\nevaluation.completed|evaluation.failed\n\\`\\`\\`\n\nFor client actions, \\`client_action.requested\\` and \\`run.paused\\` replace the\nimmediate tool message. A later \\`resume(...toolResults)\\` appends\n\\`client_action.resolved\\`, the tool message, and continues the same run\nnumber. A conversational \\`resume(...content)\\` starts a new run number.\n\n## How Orcha works behind the scenes\n\n### Compilation\n\n1. \\`orcha/index.ts\\` calls \\`orcha.init()\\` with explicit agent paths.\n2. The compiler reads each registered agent's \\`index.json\\` and\n \\`instructions.md\\`.\n3. Direct child folders under \\`actions/\\`, \\`skills/\\`, \\`tests/\\`, and\n \\`evaluations/\\` are discovered automatically. Items with \\`\"enabled\": false\\`\n remain inactive.\n4. Local action source is bundled and SHA-256 hashed. Production bundles keep\n only provider adapters required by agents and enabled evaluations.\n5. Invalid paths, duplicate model-facing names, missing files, unsupported\n configuration values, and missing schema objects fail before execution.\n Concrete action arguments and outputs are validated against their schemas\n when the action is used.\n\n\\`orcha dev\\` repeats validation when files change. \\`orcha build\\` performs\noffline production compilation. Neither command invokes a provider.\n\n### Run lifecycle\n\n1. \\`run()\\` creates a \\`ses_<timestamp>_<uuid>\\`, acquires the per-session execution lock,\n appends \\`session.created\\`, then starts run 1.\n2. \\`resume()\\` reads and validates the existing session. Message continuation\n starts a new run; submitted client results continue the paused run.\n3. The provider receives the base instructions, available-skill catalog,\n loaded skill instructions, normalized conversation messages, action\n schemas, model settings, and current client capabilities.\n4. Provider-specific responses are normalized into text, reasoning, and tool\n call blocks. Opaque replay metadata is stored only when a provider needs it\n to replay its own prior block correctly.\n5. Tool calls are checked against compiled actions and declared client\n capabilities. Arguments and outputs are validated against JSON Schema.\n6. \\`load_skill\\` updates durable session instructions. Local actions execute\n through the configured runtime. Client actions pause safely. Tool results\n are reordered to match the model's original call order.\n7. Internal agent tools start or continue linked child sessions. A\n \\`run_agent\\` input accepts the same text or multimodal content shape as a\n normal run. Local file paths resolve from the configured Orcha project root.\n The parent reports \\`waiting_for_subagent\\` until each synchronous child\n call returns.\n8. The model loop continues until final output, failure, a pause, or the\n maximum of 10 action rounds.\n9. Usage is normalized and aggregated across every model call in the run.\n10. After \\`run.completed\\`, enabled evaluations start in the background.\n \\`execution.result\\` is already available; \\`execution.evaluations\\` waits\n for judge completion and durable persistence.\n\nThe per-session lock prevents two model executions from mutating one session\nat once. Background evaluation writes queue behind active runs so they cannot\ncause \\`resume()\\` to fail spuriously or reuse sequence numbers.\n\n### Replay and context\n\nOrcha does not send raw stored events back to the model. It projects them\ninto provider-neutral conversation messages. Completed and explicitly paused\nconversational runs become user, assistant, and tool messages, so a new run\nsees incomplete assistant text preserved by \\`pause()\\`. Lifecycle bookkeeping\nsuch as durations, test assertions, and evaluation events is excluded from\nmodel context. Reasoning text and provider replay metadata are retained where\nneeded for faithful continuation but are omitted from evaluation transcripts.\n\n### Reading sessions\n\n- \\`agent.get(sessionId)\\` projects the latest status, pending client actions,\n last output, metadata, and aggregate usage.\n- \\`agent.history(sessionId, { page, pageSize })\\` returns a safe user-facing\n timeline rather than raw provider bookkeeping.\n- \\`agent.events(sessionId, { page, pageSize })\\` returns the canonical durable\n event records for observability, audit, and debugging tools. For subsequent\n pages of a changing session, pass the first response's \\`throughSequence\\`\n back in the options to keep pagination on a stable event boundary.\n- \\`agent.list({ page, pageSize, status, metadata })\\` lists projected session\n snapshots.\n- \\`agent.subagentHistory(childSessionId, { page, pageSize })\\` returns the\n projected history of a child owned by this parent agent. Lineage checks\n prevent access through unrelated agents.\n- \\`agent.subagentEvents(childSessionId, { page, pageSize })\\` returns that\n owned child's canonical events for full transcript and debugging interfaces.\n- \\`agent.pause(sessionId)\\` aborts active provider work for the session and\n active children, preserving streamed text as an incomplete assistant\n message. \\`agent.resume(sessionId)\\` starts a new run with \\`\"Continue.\"\\`;\n pass content to give different instructions. Pending client actions still\n require their exact tool results.\n- Never read storage files directly. Use these methods so applications remain\n compatible with JSONL, SQLite, IndexedDB, remote, and future storage adapters.\n\n## Change rules\n\n- Register every new agent and subagent explicitly. Agent-owned actions, skills,\n tests, and evaluations are auto-discovered; use \\`\"enabled\": false\\` for WIP.\n- Keep runtime behavior provider-neutral.\n- Mock actions when tests must avoid side effects; document intentional live\n action coverage.\n- Do not commit \\`.orcha/\\`; it contains generated output and session data.\n- Run \\`orcha dev\\` after filesystem changes and \\`orcha test\\` when behavior\n changes.\n- Do not weaken assertions to match incorrect behavior. Remove an assertion\n only when it is stricter than the documented agent contract.\n`;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/compiler/build-project.ts"],
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": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAA2B;AAC3B,sBAAqC;AACrC,kBAAiC;AACjC,iBAA6C;AAC7C,qBAAqC;AACrC,mBAAsB;AACtB,qBAGO;AAUP,eAAsB,aACpB,UAA+B,CAAC,GACf;AACjB,QAAM,kBAAc,qBAAQ,QAAQ,eAAe,QAAQ,IAAI,CAAC;AAChE,QAAM,mBAAe,qBAAQ,aAAa,gBAAgB;AAC1D,MAAI,KAAC,sBAAW,YAAY,GAAG;AAC7B,UAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE;AAEA,QAAM,yBAAqB,qBAAQ,aAAa,eAAe;AAC/D,QAAM,yBAAqB,qBAAQ,oBAAoB,cAAc;AACrE,QAAM,0BAAsB;AAAA,IAC1B;AAAA,IACA;AAAA,EACF;AACA,QAAM,iBAAa,qBAAQ,aAAa,uBAAuB;AAC/D,YAAM,uBAAM,oBAAoB,EAAE,WAAW,KAAK,CAAC;AACnD,YAAM,2BAAM,qBAAQ,UAAU,GAAG,EAAE,WAAW,KAAK,CAAC;AAEpD,MAAI;AACF,cAAM,eAAAA,OAAY;AAAA,MAChB,aAAa,CAAC,YAAY;AAAA,MAC1B,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,IACZ,CAAC;AAED,UAAM,oBAAoB,QAAQ,IAAI;AACtC,UAAM,sBAAsB,QAAQ,IAAI;AACxC,YAAQ,IAAI,kBAAkB;AAC9B,YAAQ,IAAI,qBAAqB;AACjC,QAAI;AACF,YAAM,OACJ,OAAG,0BAAc,kBAAkB,EAAE,IAAI,SAAS,KAAK,IAAI,CAAC;AAAA,IAEhE,UAAE;AACA,UAAI,sBAAsB,QAAW;AACnC,eAAO,QAAQ,IAAI;AAAA,MACrB,OAAO;AACL,gBAAQ,IAAI,kBAAkB;AAAA,MAChC;AACA,UAAI,wBAAwB,QAAW;AACrC,eAAO,QAAQ,IAAI;AAAA,MACrB,OAAO;AACL,gBAAQ,IAAI,qBAAqB;AAAA,MACnC;AAAA,IACF;AACA,UAAM,iBAAiB,mBAAM,kBAAkB;AAC/C,UAAM,yBAAqB;AAAA,UACzB,yBAAQ,0BAAc,oBAAe,CAAC;AAAA,MACtC;AAAA,IACF,EAAE,WAAW,MAAM,GAAG;AACtB,UAAM,6BAAyB;AAAA,UAC7B,yBAAQ,0BAAc,oBAAe,CAAC;AAAA,MACtC;AAAA,IACF,EAAE,WAAW,MAAM,GAAG;AACtB,UAAM,oBAAoB;AAAA,MACxB,GAAG,IAAI;AAAA,QACL,kBAAkB,eAAe,MAAM,EAAE;AAAA,UACvC,CAAC,UAAU;AAAA,YACT,MAAM;AAAA,YACN,GAAG,OAAO,OAAO,MAAM,eAAe,CAAC,CAAC,EACrC,OAAO,CAAC,eAAe,WAAW,YAAY,KAAK,EACnD,IAAI,CAAC,eAAe,WAAW,QAAQ;AAAA,UAC5C;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,UAAM,wBACJ,4BAA4B,iBAAiB;AAC/C,UAAM,mBACJ,eAAe,kBAAkB,aACjC,kBAAkB,SAAS,UAAU,KACrC,kBAAkB,SAAS,SAAS;AAEtC,cAAM;AAAA,MACJ;AAAA,MACA;AAAA,QACE,+BAA+B,KAAK,UAAU,kBAAkB,CAAC;AAAA,QACjE,mDAAmD,KAAK,UAAU,sBAAsB,CAAC;AAAA,QACzF;AAAA,QACA,0BAA0B,KAAK,UAAU,cAAc,CAAC;AAAA,QACxD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,EAAE,KAAK,IAAI;AAAA,MACX;AAAA,IACF;AACA,cAAM,eAAAA,OAAY;AAAA,MAChB,aAAa,CAAC,mBAAmB;AAAA,MACjC,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,eAAe;AAAA,MACf,QAAQ;AAAA,QACN,qCAAqC,KAAK;AAAA,UACxC,eAAe,kBAAkB,YAAY,MAAM;AAAA,QACrD;AAAA,MACF;AAAA,MACA,GAAI,mBACA;AAAA,QACE,QAAQ;AAAA,UACN,IAAI;AAAA,YACF;AAAA,YACA;AAAA,UACF,EAAE,KAAK,IAAI;AAAA,QACb;AAAA,MACF,IACA,CAAC;AAAA,MACL,UAAU;AAAA,IACZ,CAAC;AAED,WAAO;AAAA,EACT,UAAE;AACA,cAAM,oBAAG,oBAAoB;AAAA,MAC3B,WAAW;AAAA,MACX,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AACF;AAEA,SAAS,kBACP,QACyB;AACzB,SAAO,OAAO,OAAO,MAAM,EAAE,QAAQ,CAAC,UAAU;AAAA,IAC9C;AAAA,IACA,GAAG,OAAO,OAAO,MAAM,aAAa,CAAC,CAAC;AAAA,EACxC,CAAC;AACH;AAEA,SAAS,4BAA4B,eAAiC;AACpE,QAAM,yBAAqB;AAAA,QACzB,yBAAQ,0BAAc,oBAAe,CAAC;AAAA,IACtC;AAAA,EACF;AACA,QAAM,UAAoB,CAAC;AAC3B,QAAM,UAAoB,CAAC;AAE3B,aAAW,CAAC,OAAO,IAAI,KAAK,cAAc,QAAQ,GAAG;AACnD,QAAI,KAAC,kCAAkB,IAAI,GAAG;AAC5B,YAAM,IAAI,MAAM,aAAa,IAAI,oBAAoB;AAAA,IACvD;AACA,UAAM,aAAa,sCAAuB,IAAI;AAC9C,UAAM,YAAY,WAAW,KAAK;AAClC,YAAQ;AAAA,MACN,YAAY,WAAW,UAAU,OAAO,SAAS,WAAW,KAAK;AAAA,YAC/D,qBAAQ,oBAAoB,WAAW,UAAU;AAAA,MACnD,CAAC;AAAA,IACH;AACA,YAAQ,KAAK,GAAG,KAAK,UAAU,IAAI,CAAC,KAAK,SAAS,EAAE;AAAA,EACtD;AAEA,QAAM,WAAW;AAAA,IACf,GAAG;AAAA,IACH,+BAA+B,QAAQ,KAAK,IAAI,CAAC;AAAA,IACjD;AAAA,EACF,EAAE,KAAK,IAAI;AAEX,SAAO;AACT;",
6
- "names": ["bundleEntry"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/compiler/compile.ts"],
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
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/env.ts"],
4
- "sourcesContent": ["import { existsSync } from \"fs\";\nimport { resolve } from \"path\";\nimport { config } from \"dotenv\";\n\nexport function loadProjectEnvironment(projectRoot: string): void {\n const path = resolve(projectRoot, \".env\");\n if (existsSync(path)) {\n const result = config({ path, override: false, quiet: true });\n if (result.error) {\n throw result.error;\n }\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAA2B;AAC3B,kBAAwB;AACxB,oBAAuB;AAEhB,SAAS,uBAAuB,aAA2B;AAChE,QAAM,WAAO,qBAAQ,aAAa,MAAM;AACxC,UAAI,sBAAW,IAAI,GAAG;AACpB,UAAM,aAAS,sBAAO,EAAE,MAAM,UAAU,OAAO,OAAO,KAAK,CAAC;AAC5D,QAAI,OAAO,OAAO;AAChB,YAAM,OAAO;AAAA,IACf;AAAA,EACF;AACF;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/errors.ts"],
4
- "sourcesContent": ["import type { OrchaErrorCode } from \"./types.js\";\n\nexport class OrchaError extends Error {\n readonly code: OrchaErrorCode;\n readonly retryable: boolean;\n readonly details?: Record<string, unknown>;\n\n constructor(\n code: OrchaErrorCode,\n message: string,\n options: {\n retryable?: boolean;\n details?: Record<string, unknown>;\n cause?: unknown;\n } = {},\n ) {\n super(message, { cause: options.cause });\n this.name = \"OrchaError\";\n this.code = code;\n this.retryable = options.retryable ?? false;\n this.details = options.details;\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,MAAM,mBAAmB,MAAM;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EAET,YACE,MACA,SACA,UAII,CAAC,GACL;AACA,UAAM,SAAS,EAAE,OAAO,QAAQ,MAAM,CAAC;AACvC,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,YAAY,QAAQ,aAAa;AACtC,SAAK,UAAU,QAAQ;AAAA,EACzB;AACF;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/file-content.ts"],
4
- "sourcesContent": ["import { readFile } from \"fs/promises\";\nimport { basename, extname, resolve } from \"path\";\nimport type { LocalFileContent } from \"./types.js\";\n\nconst MIME_TYPES: Record<string, string> = {\n \".csv\": \"text/csv\",\n \".doc\": \"application/msword\",\n \".docx\":\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n \".gif\": \"image/gif\",\n \".htm\": \"text/html\",\n \".html\": \"text/html\",\n \".jpeg\": \"image/jpeg\",\n \".jpg\": \"image/jpeg\",\n \".json\": \"application/json\",\n \".md\": \"text/markdown\",\n \".mp3\": \"audio/mpeg\",\n \".mp4\": \"video/mp4\",\n \".pdf\": \"application/pdf\",\n \".png\": \"image/png\",\n \".txt\": \"text/plain\",\n \".wav\": \"audio/wav\",\n \".webp\": \"image/webp\",\n \".xls\": \"application/vnd.ms-excel\",\n \".xlsx\":\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n};\n\nexport function normalizeLocalFile(\n filePath: string,\n mimeType?: string,\n projectRoot = process.cwd(),\n): LocalFileContent {\n const absolutePath = resolve(projectRoot, filePath);\n return {\n type: \"file\",\n filePath: absolutePath,\n mimeType: normalizeMimeType(mimeType, absolutePath),\n };\n}\n\nexport function normalizeUrlContent(\n url: string,\n mimeType?: string,\n): {\n type: \"url\";\n fileUri: string;\n mimeType: string;\n} {\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n throw new Error(`Invalid content URL \"${url}\".`);\n }\n if (parsed.protocol !== \"https:\" && parsed.protocol !== \"http:\") {\n throw new Error(\"Content URLs must use http or https.\");\n }\n return {\n type: \"url\",\n fileUri: parsed.href,\n mimeType: normalizeMimeType(mimeType, parsed.pathname),\n };\n}\n\nexport async function readLocalFileContent(\n content: LocalFileContent,\n): Promise<{\n bytes: Uint8Array;\n base64: string;\n dataUri: string;\n fileName: string;\n}> {\n const bytes = await readFile(content.filePath);\n const base64 = bytes.toString(\"base64\");\n return {\n bytes,\n base64,\n dataUri: `data:${content.mimeType};base64,${base64}`,\n fileName: basename(content.filePath),\n };\n}\n\nfunction normalizeMimeType(\n mimeType: string | undefined,\n source: string,\n): string {\n if (mimeType?.trim()) {\n return mimeType.trim().toLowerCase();\n }\n const inferred = MIME_TYPES[extname(source).toLowerCase()];\n if (!inferred) {\n throw new Error(\n `Could not infer a MIME type for \"${source}\". Provide mimeType explicitly.`,\n );\n }\n return inferred;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAyB;AACzB,kBAA2C;AAG3C,MAAM,aAAqC;AAAA,EACzC,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SACE;AAAA,EACF,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SACE;AACJ;AAEO,SAAS,mBACd,UACA,UACA,cAAc,QAAQ,IAAI,GACR;AAClB,QAAM,mBAAe,qBAAQ,aAAa,QAAQ;AAClD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU;AAAA,IACV,UAAU,kBAAkB,UAAU,YAAY;AAAA,EACpD;AACF;AAEO,SAAS,oBACd,KACA,UAKA;AACA,MAAI;AACJ,MAAI;AACF,aAAS,IAAI,IAAI,GAAG;AAAA,EACtB,QAAQ;AACN,UAAM,IAAI,MAAM,wBAAwB,GAAG,IAAI;AAAA,EACjD;AACA,MAAI,OAAO,aAAa,YAAY,OAAO,aAAa,SAAS;AAC/D,UAAM,IAAI,MAAM,sCAAsC;AAAA,EACxD;AACA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS,OAAO;AAAA,IAChB,UAAU,kBAAkB,UAAU,OAAO,QAAQ;AAAA,EACvD;AACF;AAEA,eAAsB,qBACpB,SAMC;AACD,QAAM,QAAQ,UAAM,0BAAS,QAAQ,QAAQ;AAC7C,QAAM,SAAS,MAAM,SAAS,QAAQ;AACtC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,SAAS,QAAQ,QAAQ,QAAQ,WAAW,MAAM;AAAA,IAClD,cAAU,sBAAS,QAAQ,QAAQ;AAAA,EACrC;AACF;AAEA,SAAS,kBACP,UACA,QACQ;AACR,MAAI,UAAU,KAAK,GAAG;AACpB,WAAO,SAAS,KAAK,EAAE,YAAY;AAAA,EACrC;AACA,QAAM,WAAW,eAAW,qBAAQ,MAAM,EAAE,YAAY,CAAC;AACzD,MAAI,CAAC,UAAU;AACb,UAAM,IAAI;AAAA,MACR,oCAAoC,MAAM;AAAA,IAC5C;AAAA,EACF;AACA,SAAO;AACT;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/index.ts"],
4
- "sourcesContent": ["export { orcha } from \"./orcha.js\";\nexport { OrchaError } from \"./errors.js\";\nexport type { Orcha, OrchaClient } from \"./orcha.js\";\nexport { NodeJsonlSessionStore } from \"./storage/node-jsonl.js\";\nexport { NodeSqliteSessionStore } from \"./storage/node-sqlite.js\";\nexport {\n exportSessionJsonl,\n migrateSessionStore,\n} from \"./storage/migrate.js\";\nexport type {\n SessionStoreMigrationResult,\n} from \"./storage/migrate.js\";\nexport type {\n ActionConfiguration,\n AgentTestActionConfiguration,\n AgentTestActionExpectation,\n AgentTestActionResponse,\n AgentTestAssertionResult,\n AgentTestCaseConfiguration,\n AgentTestCaseReport,\n AgentTestCaseSummary,\n AgentTestExpectation,\n AgentTestReport,\n AgentTestTextExpectation,\n AgentTestValueExpectation,\n AgentTestWarning,\n ApiKeyProviderConfiguration,\n AwsCredentials,\n AgentContinueInput,\n AgentConfiguration,\n AgentContentInput,\n AgentInput,\n AgentRegistration,\n AgentRuntime,\n ClientCapability,\n ClientToolCall,\n CompletedRunResult,\n CompiledActionManifest,\n CompiledAgentManifest,\n CompiledBundle,\n CompiledEvaluationManifest,\n CompiledSkillManifest,\n EvaluationConfiguration,\n EvaluationMetricConfiguration,\n EvaluationMetricResult,\n EvaluationResult,\n Execution,\n ExecutionSnapshot,\n FailedRunResult,\n FileContent,\n FilePathContentInput,\n LocalFileContent,\n LocalActionRuntimeConfiguration,\n MessageContent,\n MessageContentInput,\n MetadataValue,\n OrchaErrorCode,\n OrchaInitConfiguration,\n PausedRunResult,\n PaginationOptions,\n ProjectConfiguration,\n ProviderConfiguration,\n ProviderInitConfigurations,\n ProviderName,\n BedrockProviderConfiguration,\n RunError,\n RunStatus,\n RunTestsOptions,\n ResumeInput,\n RunResult,\n SessionEvent,\n SessionEventListOptions,\n SessionEvents,\n SessionEventType,\n SessionHistory,\n SessionHistoryItem,\n SessionList,\n SessionListOptions,\n SessionMetadata,\n SessionSnapshot,\n SessionStatus,\n SessionStore,\n SkillConfiguration,\n SessionUpdate,\n StreamingRunSnapshot,\n SubagentConfiguration,\n TextContent,\n ToolResult,\n ToolResumeInput,\n UrlContentInput,\n Usage,\n VertexAIProviderConfiguration,\n GoogleServiceAccountCredentials,\n WaitingRunResult,\n WaitingForSubagentSnapshot,\n} from \"./types.js\";\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAsB;AACtB,oBAA2B;AAE3B,wBAAsC;AACtC,yBAAuC;AACvC,qBAGO;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/integrations/esbuild.ts"],
4
- "sourcesContent": ["import { resolve } from \"path\";\nimport type { Plugin } from \"esbuild\";\nimport { buildProject } from \"../compiler/build-project.js\";\n\nexport interface OrchaEsbuildPluginOptions {\n projectRoot?: string;\n}\n\n/**\n * Compiles the consumer's Orcha registry and replaces unchanged `orchajs`\n * application imports with the self-contained generated production runtime.\n */\nexport function orchaPlugin(\n options: OrchaEsbuildPluginOptions = {},\n): Plugin {\n const projectRoot = resolve(options.projectRoot ?? process.cwd());\n const generatedBundle = resolve(projectRoot, \".orcha/dist/bundle.js\");\n\n return {\n name: \"orchajs\",\n setup(builder) {\n builder.onStart(async () => {\n await buildProject({ projectRoot });\n });\n\n builder.onResolve({ filter: /^orchajs$/ }, () => ({\n path: generatedBundle,\n }));\n },\n };\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAwB;AAExB,2BAA6B;AAUtB,SAAS,YACd,UAAqC,CAAC,GAC9B;AACR,QAAM,kBAAc,qBAAQ,QAAQ,eAAe,QAAQ,IAAI,CAAC;AAChE,QAAM,sBAAkB,qBAAQ,aAAa,uBAAuB;AAEpE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,SAAS;AACb,cAAQ,QAAQ,YAAY;AAC1B,kBAAM,mCAAa,EAAE,YAAY,CAAC;AAAA,MACpC,CAAC;AAED,cAAQ,UAAU,EAAE,QAAQ,YAAY,GAAG,OAAO;AAAA,QAChD,MAAM;AAAA,MACR,EAAE;AAAA,IACJ;AAAA,EACF;AACF;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/orcha.ts"],
4
- "sourcesContent": ["import { resolve } from \"path\";\nimport { compileRegistry } from \"./compiler/compile.js\";\nimport { generateProviderResponse } from \"./providers/index.js\";\nimport { createOrcha } from \"./runtime/create-orcha.js\";\n\nexport type { Orcha, OrchaClient } from \"./runtime/create-orcha.js\";\n\nexport const orcha = createOrcha(\n (configuration) => {\n if (\n process.env.NODE_ENV === \"production\" &&\n process.env.ORCHA_COMPILING !== \"1\"\n ) {\n throw new Error(\n \"ORCHA_PRODUCTION_BUNDLE_MISSING: configure the Orcha integration in your application build.\",\n );\n }\n const projectRoot = resolve(\n configuration.root ??\n process.env.ORCHA_PROJECT_ROOT ??\n process.cwd(),\n );\n const registryRoot = resolve(projectRoot, \"orcha\");\n return compileRegistry(\n configuration.agents,\n registryRoot,\n configuration.actions?.runtime ?? \"native\",\n );\n },\n generateProviderResponse,\n);\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAwB;AACxB,qBAAgC;AAChC,uBAAyC;AACzC,0BAA4B;AAIrB,MAAM,YAAQ;AAAA,EACnB,CAAC,kBAAkB;AACjB,QACE,QAAQ,IAAI,aAAa,gBACzB,QAAQ,IAAI,oBAAoB,KAChC;AACA,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,UAAM,kBAAc;AAAA,MAClB,cAAc,QACZ,QAAQ,IAAI,sBACZ,QAAQ,IAAI;AAAA,IAChB;AACA,UAAM,mBAAe,qBAAQ,aAAa,OAAO;AACjD,eAAO;AAAA,MACL,cAAc;AAAA,MACd;AAAA,MACA,cAAc,SAAS,WAAW;AAAA,IACpC;AAAA,EACF;AAAA,EACA;AACF;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/playground/server.ts"],
4
- "sourcesContent": ["import { spawn } from \"child_process\";\nimport { randomBytes } from \"crypto\";\nimport { existsSync } from \"fs\";\nimport { readFile } from \"fs/promises\";\nimport { dirname, extname, isAbsolute, relative, resolve } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport {\n createServer,\n type IncomingMessage,\n type ServerResponse,\n} from \"http\";\nimport { watch } from \"chokidar\";\nimport { orcha } from \"../orcha.js\";\nimport type { OrchaClient } from \"../orcha.js\";\nimport { loadProject } from \"../project-loader.js\";\nimport { RuntimeAgent } from \"../runtime/agent.js\";\nimport { listTests, runTests } from \"../testing.js\";\nimport type {\n AgentContentInput,\n Execution,\n MessageContentInput,\n SessionEvent,\n ToolResult,\n} from \"../types.js\";\nimport { readPlaygroundAgentSource } from \"./source.js\";\n\nexport interface PlaygroundOptions {\n projectRoot?: string;\n host?: string;\n port?: number;\n open?: boolean;\n}\n\nexport async function startPlayground(\n options: PlaygroundOptions = {},\n): Promise<void> {\n const projectRoot = resolve(options.projectRoot ?? process.cwd());\n const host = options.host ?? \"localhost\";\n const port = options.port ?? 4310;\n if (host === \"0.0.0.0\" || host === \"::\") {\n throw new Error(\n \"Use an explicit hostname or IP address instead of a wildcard playground host.\",\n );\n }\n const mutationToken = randomBytes(32).toString(\"base64url\");\n const allowedHosts = playgroundHosts(host, port);\n await loadProject(projectRoot);\n\n const projectClients = new Set<ServerResponse>();\n const server = createServer(async (request, response) => {\n try {\n await routeRequest({\n request,\n response,\n projectRoot,\n host,\n port,\n projectClients,\n mutationToken,\n allowedHosts,\n });\n } catch (error) {\n sendJson(response, error instanceof HttpError ? error.status : 500, {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n });\n\n await new Promise<void>((resolveListening, reject) => {\n server.once(\"error\", reject);\n server.listen(port, host, resolveListening);\n });\n\n const url = `http://${host}:${port}`;\n console.log(`Orcha playground: ${url}`);\n if (options.open !== false) {\n openBrowser(url);\n }\n\n let reloadTimer: NodeJS.Timeout | undefined;\n let reloading = false;\n let reloadAgain = false;\n const reload = async (): Promise<void> => {\n if (reloading) {\n reloadAgain = true;\n return;\n }\n reloading = true;\n try {\n await loadProject(projectRoot);\n publishProjectEvent(projectClients, {\n type: \"project.updated\",\n timestamp: new Date().toISOString(),\n });\n console.log(\"[orcha] playground reloaded\");\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n publishProjectEvent(projectClients, {\n type: \"project.error\",\n timestamp: new Date().toISOString(),\n error: message,\n });\n console.error(`[orcha] playground reload failed \u2014 ${message}`);\n } finally {\n reloading = false;\n if (reloadAgain) {\n reloadAgain = false;\n await reload();\n }\n }\n };\n const watcher = watch(\n resolve(projectRoot, \"orcha\"),\n { ignoreInitial: true },\n ).on(\"all\", () => {\n clearTimeout(reloadTimer);\n reloadTimer = setTimeout(() => void reload(), 100);\n });\n\n await new Promise<void>((resolveStop) => {\n const stop = (): void => {\n clearTimeout(reloadTimer);\n for (const client of projectClients) {\n client.end();\n }\n void Promise.all([\n watcher.close(),\n new Promise<void>((resolveClosed) => {\n server.close(() => resolveClosed());\n }),\n ]).then(() => resolveStop());\n };\n process.once(\"SIGINT\", stop);\n process.once(\"SIGTERM\", stop);\n });\n}\n\ninterface RouteContext {\n request: IncomingMessage;\n response: ServerResponse;\n projectRoot: string;\n host: string;\n port: number;\n projectClients: Set<ServerResponse>;\n mutationToken: string;\n allowedHosts: Set<string>;\n}\n\nasync function routeRequest(context: RouteContext): Promise<void> {\n const { request, response } = context;\n const method = request.method ?? \"GET\";\n const url = new URL(\n request.url ?? \"/\",\n `http://${context.host}:${context.port}`,\n );\n const segments = url.pathname\n .split(\"/\")\n .filter(Boolean)\n .map(decodeURIComponent);\n validateRequestHost(request, context.allowedHosts);\n\n if (method === \"GET\" && url.pathname === \"/api/playground\") {\n sendJson(response, 200, { mutationToken: context.mutationToken });\n return;\n }\n if (method !== \"GET\" && method !== \"HEAD\") {\n validateMutationRequest(request, context.mutationToken);\n }\n\n if (method === \"GET\" && url.pathname === \"/api/project/events\") {\n response.writeHead(200, {\n \"content-type\": \"text/event-stream; charset=utf-8\",\n \"cache-control\": \"no-store\",\n connection: \"keep-alive\",\n });\n response.write(\": connected\\n\\n\");\n context.projectClients.add(response);\n response.once(\"close\", () => context.projectClients.delete(response));\n return;\n }\n\n if (method === \"GET\" && url.pathname === \"/api/agents\") {\n sendJson(response, 200, {\n agents: Object.values(orcha.getCompiledBundle().agents).map(\n publicAgentSummary,\n ),\n });\n return;\n }\n\n if (\n method === \"GET\" &&\n segments.length === 3 &&\n segments[0] === \"api\" &&\n segments[1] === \"agents\"\n ) {\n getAgent(segments[2]);\n sendJson(\n response,\n 200,\n await readPlaygroundAgentSource(orcha, segments[2]),\n );\n return;\n }\n\n if (\n segments.length === 4 &&\n segments[0] === \"api\" &&\n segments[1] === \"agents\" &&\n segments[3] === \"tests\"\n ) {\n getAgent(segments[2]);\n if (method === \"GET\") {\n const tests = await listTests(orcha, { agent: segments[2] });\n sendJson(response, 200, {\n tests: tests.map((test) => ({\n ...test,\n rawConfiguration: JSON.stringify(test.configuration, null, 2),\n })),\n });\n return;\n }\n if (method === \"POST\") {\n const body = await readJsonBody(request);\n const test = optionalString(body.test);\n sendJson(\n response,\n 200,\n await runTests(orcha, {\n agent: segments[2],\n ...(test ? { test } : {}),\n onWarning: (warning) => {\n console.warn(\n `[orcha playground] WARN ${warning.agent}/${warning.test}: ${warning.message}`,\n );\n },\n }),\n );\n return;\n }\n }\n\n if (\n method === \"POST\" &&\n segments.length === 4 &&\n segments[0] === \"api\" &&\n segments[1] === \"agents\" &&\n segments[3] === \"executions\"\n ) {\n await executeAgent(segments[2], request, response);\n return;\n }\n\n if (\n segments.length >= 4 &&\n segments[0] === \"api\" &&\n segments[1] === \"agents\" &&\n segments[3] === \"sessions\"\n ) {\n const agent = getAgent(segments[2]);\n if (method === \"GET\" && segments.length === 4) {\n sendJson(\n response,\n 200,\n await agent.list({\n page: positiveInteger(url.searchParams.get(\"page\"), 1),\n pageSize: positiveInteger(url.searchParams.get(\"pageSize\"), 50),\n }),\n );\n return;\n }\n if (\n method === \"GET\" &&\n segments.length === 5 &&\n segments[4] === \"stream\"\n ) {\n response.writeHead(200, {\n \"content-type\": \"text/event-stream; charset=utf-8\",\n \"cache-control\": \"no-store\",\n connection: \"keep-alive\",\n });\n response.write(\": connected\\n\\n\");\n let closed = false;\n const unsubscribe = agent._subscribeAllSessionEvents((sessionId) => {\n void agent.get(sessionId).then(\n (snapshot) => {\n if (!closed) {\n response.write(\n `data: ${JSON.stringify({ snapshot })}\\n\\n`,\n );\n }\n },\n () => undefined,\n );\n });\n response.once(\"close\", () => {\n closed = true;\n unsubscribe();\n });\n return;\n }\n const sessionId = segments[4];\n if (method === \"GET\" && segments.length === 5) {\n sendJson(response, 200, await agent.get(sessionId));\n return;\n }\n if (\n method === \"GET\" &&\n segments.length === 6 &&\n segments[5] === \"events\"\n ) {\n sendJson(response, 200, {\n events: await readAllEvents(agent, sessionId),\n });\n return;\n }\n if (\n method === \"GET\" &&\n segments.length === 6 &&\n segments[5] === \"stream\"\n ) {\n await agent.get(sessionId);\n let ready = false;\n const pending: SessionEvent[][] = [];\n const publish = (events: SessionEvent[]): void => {\n if (!ready) {\n pending.push(events);\n return;\n }\n response.write(`data: ${JSON.stringify({ events })}\\n\\n`);\n };\n const unsubscribe = agent._subscribeSessionEvents(\n sessionId,\n publish,\n );\n response.writeHead(200, {\n \"content-type\": \"text/event-stream; charset=utf-8\",\n \"cache-control\": \"no-store\",\n connection: \"keep-alive\",\n });\n response.write(\": connected\\n\\n\");\n ready = true;\n for (const events of pending) {\n publish(events);\n }\n pending.length = 0;\n response.once(\"close\", unsubscribe);\n return;\n }\n if (\n method === \"POST\" &&\n segments.length === 6 &&\n segments[5] === \"pause\"\n ) {\n sendJson(response, 200, await agent.pause(sessionId));\n return;\n }\n }\n\n if (\n method === \"GET\" &&\n segments.length === 6 &&\n segments[0] === \"api\" &&\n segments[1] === \"agents\" &&\n segments[3] === \"subagents\" &&\n segments[5] === \"events\"\n ) {\n const agent = getAgent(segments[2]);\n sendJson(response, 200, {\n events: await readAllSubagentEvents(agent, segments[4]),\n });\n return;\n }\n\n if (\n method === \"GET\" &&\n segments.length === 6 &&\n segments[0] === \"api\" &&\n segments[1] === \"agents\" &&\n segments[3] === \"subagents\" &&\n segments[5] === \"stream\"\n ) {\n const agent = getAgent(segments[2]);\n let ready = false;\n const pending: SessionEvent[][] = [];\n const publish = (events: SessionEvent[]): void => {\n if (!ready) {\n pending.push(events);\n return;\n }\n response.write(`data: ${JSON.stringify({ events })}\\n\\n`);\n };\n const unsubscribe = await agent._subscribeSubagentSessionEvents(\n segments[4],\n publish,\n );\n response.writeHead(200, {\n \"content-type\": \"text/event-stream; charset=utf-8\",\n \"cache-control\": \"no-store\",\n connection: \"keep-alive\",\n });\n response.write(\": connected\\n\\n\");\n ready = true;\n for (const events of pending) {\n publish(events);\n }\n pending.length = 0;\n response.once(\"close\", unsubscribe);\n return;\n }\n\n if (url.pathname.startsWith(\"/api/\")) {\n sendJson(response, 404, { error: \"Not found.\" });\n return;\n }\n\n if (method === \"GET\") {\n await serveAsset(response, url.pathname);\n return;\n }\n\n sendJson(response, 404, { error: \"Not found.\" });\n}\n\nasync function executeAgent(\n agentName: string,\n request: IncomingMessage,\n response: ServerResponse,\n): Promise<void> {\n const agent = getAgent(agentName);\n const body = await readJsonBody(request);\n const sessionId = optionalString(body.sessionId);\n const clientCapabilities = agent.clientTools.map((tool) => tool.name);\n let execution: Execution;\n if (\"toolResults\" in body) {\n if (!sessionId) {\n throw new HttpError(400, \"sessionId is required with toolResults.\");\n }\n execution = agent.resume(sessionId, {\n toolResults: parseToolResults(body.toolResults),\n });\n } else {\n const content = parseContent(body.content);\n const name = optionalString(body.name);\n execution = sessionId\n ? agent.resume(sessionId, { content, clientCapabilities })\n : agent.run({\n content,\n clientCapabilities,\n ...(name ? { name } : {}),\n });\n }\n await streamExecution(agent, execution, response);\n}\n\nasync function streamExecution(\n agent: RuntimeAgent,\n execution: Execution,\n response: ServerResponse,\n): Promise<void> {\n response.writeHead(200, {\n \"content-type\": \"application/x-ndjson; charset=utf-8\",\n \"cache-control\": \"no-store\",\n connection: \"keep-alive\",\n });\n const unsubscribe = agent._subscribeSessionEvents(\n execution.sessionId,\n (events) => writeNdjson(response, { type: \"events.appended\", events }),\n );\n writeNdjson(response, {\n type: \"execution.started\",\n sessionId: execution.sessionId,\n });\n try {\n for await (const snapshot of execution.stream) {\n writeNdjson(response, { type: \"snapshot\", snapshot });\n }\n const result = await execution.result;\n writeNdjson(response, { type: \"result\", result });\n writeNdjson(response, {\n type: \"events\",\n sessionId: result.sessionId,\n events: await readAllEvents(agent, result.sessionId),\n });\n writeNdjson(response, {\n type: \"evaluations\",\n sessionId: result.sessionId,\n evaluations: await execution.evaluations,\n });\n response.end();\n } catch (error) {\n await execution.result.catch(() => undefined);\n writeNdjson(response, {\n type: \"error\",\n error: error instanceof Error ? error.message : String(error),\n });\n try {\n writeNdjson(response, {\n type: \"events\",\n sessionId: execution.sessionId,\n events: await readAllEvents(agent, execution.sessionId),\n });\n } catch {\n // The session may have failed before it could be persisted.\n }\n response.end();\n } finally {\n unsubscribe();\n }\n}\n\nfunction getAgent(name: string): RuntimeAgent {\n const manifest = orcha.getCompiledBundle().agents[name];\n const agent = (orcha as OrchaClient)[name] as RuntimeAgent | undefined;\n if (!manifest || !agent) {\n throw new HttpError(404, `Unknown agent \"${name}\".`);\n }\n return agent;\n}\n\nfunction publicAgentSummary(\n manifest: ReturnType<typeof orcha.getCompiledBundle>[\"agents\"][string],\n) {\n return {\n key: manifest.key,\n name: manifest.name,\n description: manifest.description,\n provider: manifest.provider,\n model: manifest.model,\n actionCount: Object.keys(manifest.actions).length,\n skillCount: Object.keys(manifest.skills).length,\n evaluationCount: Object.keys(manifest.evaluations).length,\n subagentCount: Object.keys(manifest.subagents).length,\n };\n}\n\nasync function readAllEvents(\n agent: RuntimeAgent,\n sessionId: string,\n): Promise<SessionEvent[]> {\n return readAllEventPages((page, throughSequence) =>\n agent.events(sessionId, {\n page,\n pageSize: 100,\n ...(throughSequence ? { throughSequence } : {}),\n }),\n );\n}\n\nasync function readAllSubagentEvents(\n agent: RuntimeAgent,\n sessionId: string,\n): Promise<SessionEvent[]> {\n return readAllEventPages((page, throughSequence) =>\n agent.subagentEvents(sessionId, {\n page,\n pageSize: 100,\n ...(throughSequence ? { throughSequence } : {}),\n }),\n );\n}\n\nasync function readAllEventPages(\n read: (\n page: number,\n throughSequence?: number,\n ) => Promise<{\n events: SessionEvent[];\n throughSequence: number;\n hasMore: boolean;\n }>,\n): Promise<SessionEvent[]> {\n const pages: SessionEvent[][] = [];\n let page = 1;\n let hasMore = true;\n let throughSequence: number | undefined;\n while (hasMore) {\n const result = await read(page, throughSequence);\n throughSequence = result.throughSequence;\n pages.unshift(result.events);\n hasMore = result.hasMore;\n page += 1;\n }\n return pages.flat();\n}\n\nasync function serveAsset(\n response: ServerResponse,\n pathname: string,\n): Promise<void> {\n const publicRoot = resolve(\n dirname(fileURLToPath(import.meta.url)),\n \"public\",\n );\n const requested = pathname === \"/\" ? \"index.html\" : pathname.slice(1);\n const path = resolve(publicRoot, requested);\n const relativePath = relative(publicRoot, path);\n if (\n relativePath.startsWith(\"..\") ||\n isAbsolute(relativePath) ||\n !existsSync(path)\n ) {\n const indexPath = resolve(publicRoot, \"index.html\");\n if (!existsSync(indexPath)) {\n sendJson(response, 503, {\n error: \"Playground assets are missing. Rebuild orchajs.\",\n });\n return;\n }\n response.writeHead(200, {\n \"content-type\": \"text/html; charset=utf-8\",\n \"cache-control\": \"no-store\",\n });\n response.end(await readFile(indexPath));\n return;\n }\n response.writeHead(200, {\n \"content-type\": contentType(path),\n \"cache-control\": \"no-store\",\n });\n response.end(await readFile(path));\n}\n\nfunction contentType(path: string): string {\n switch (extname(path)) {\n case \".html\":\n return \"text/html; charset=utf-8\";\n case \".js\":\n return \"text/javascript; charset=utf-8\";\n case \".css\":\n return \"text/css; charset=utf-8\";\n case \".svg\":\n return \"image/svg+xml\";\n default:\n return \"application/octet-stream\";\n }\n}\n\nasync function readJsonBody(\n request: IncomingMessage,\n): Promise<Record<string, unknown>> {\n const chunks: Buffer[] = [];\n let size = 0;\n for await (const chunk of request) {\n const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n size += buffer.length;\n if (size > 2_000_000) {\n throw new HttpError(413, \"Request body exceeds 2 MB.\");\n }\n chunks.push(buffer);\n }\n let value: unknown;\n try {\n value = JSON.parse(Buffer.concat(chunks).toString(\"utf8\"));\n } catch {\n throw new HttpError(400, \"Request body must contain valid JSON.\");\n }\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new HttpError(400, \"Request body must be a JSON object.\");\n }\n return value as Record<string, unknown>;\n}\n\nfunction parseContent(value: unknown): AgentContentInput {\n if (typeof value === \"string\" && value.trim()) {\n return value;\n }\n const items = Array.isArray(value) ? value : [value];\n if (items.length === 0) {\n throw new HttpError(400, \"content is required.\");\n }\n const parsed = items.map(parseContentItem);\n return Array.isArray(value) ? parsed : parsed[0];\n}\n\nfunction parseContentItem(value: unknown): MessageContentInput {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new HttpError(400, \"Every content item must be an object.\");\n }\n const item = value as Record<string, unknown>;\n if (typeof item.filePath === \"string\") {\n return {\n filePath: item.filePath,\n ...(typeof item.mimeType === \"string\"\n ? { mimeType: item.mimeType }\n : {}),\n };\n }\n if (typeof item.url === \"string\") {\n return {\n url: item.url,\n ...(typeof item.mimeType === \"string\"\n ? { mimeType: item.mimeType }\n : {}),\n };\n }\n if (item.type === \"text\" && typeof item.text === \"string\") {\n return { type: \"text\", text: item.text };\n }\n if (\n (item.type === \"image\" ||\n item.type === \"video\" ||\n item.type === \"audio\" ||\n item.type === \"url\") &&\n typeof item.mimeType === \"string\" &&\n typeof item.fileUri === \"string\"\n ) {\n return {\n type: item.type,\n mimeType: item.mimeType,\n fileUri: item.fileUri,\n };\n }\n throw new HttpError(400, \"Content item has invalid fields.\");\n}\n\nfunction parseToolResults(value: unknown): ToolResult[] {\n if (!Array.isArray(value) || value.length === 0) {\n throw new HttpError(400, \"toolResults must be a non-empty array.\");\n }\n return value.map((item) => {\n if (\n !item ||\n typeof item !== \"object\" ||\n Array.isArray(item) ||\n typeof (item as Record<string, unknown>).callId !== \"string\" ||\n !(\"output\" in item)\n ) {\n throw new HttpError(\n 400,\n \"Every tool result requires callId and output.\",\n );\n }\n const result = item as Record<string, unknown>;\n return {\n callId: result.callId as string,\n output: result.output,\n ...(result.isError === true ? { isError: true } : {}),\n };\n });\n}\n\nfunction sendJson(\n response: ServerResponse,\n status: number,\n value: unknown,\n): void {\n if (response.headersSent) {\n return;\n }\n response.writeHead(status, {\n \"content-type\": \"application/json; charset=utf-8\",\n \"cache-control\": \"no-store\",\n });\n response.end(JSON.stringify(value));\n}\n\nfunction writeNdjson(response: ServerResponse, value: unknown): void {\n response.write(`${JSON.stringify(value)}\\n`);\n}\n\nfunction publishProjectEvent(\n clients: Set<ServerResponse>,\n value: unknown,\n): void {\n const payload = `data: ${JSON.stringify(value)}\\n\\n`;\n for (const client of clients) {\n client.write(payload);\n }\n}\n\nfunction positiveInteger(value: string | null, fallback: number): number {\n const parsed = value ? Number.parseInt(value, 10) : fallback;\n return Number.isInteger(parsed) && parsed > 0 ? parsed : fallback;\n}\n\nfunction optionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim()\n ? value.trim()\n : undefined;\n}\n\nfunction openBrowser(url: string): void {\n const command =\n process.platform === \"darwin\"\n ? \"open\"\n : process.platform === \"win32\"\n ? \"cmd\"\n : \"xdg-open\";\n const arguments_ =\n process.platform === \"win32\" ? [\"/c\", \"start\", \"\", url] : [url];\n const child = spawn(command, arguments_, {\n detached: true,\n stdio: \"ignore\",\n });\n child.once(\"error\", () => undefined);\n child.unref();\n}\n\nclass HttpError extends Error {\n readonly status: number;\n\n constructor(status: number, message: string) {\n super(message);\n this.status = status;\n }\n}\n\nfunction playgroundHosts(host: string, port: number): Set<string> {\n const configured =\n host.includes(\":\") && !host.startsWith(\"[\")\n ? `[${host}]:${port}`\n : `${host}:${port}`;\n const hosts = new Set([configured.toLowerCase()]);\n if ([\"127.0.0.1\", \"localhost\", \"::1\"].includes(host)) {\n hosts.add(`127.0.0.1:${port}`);\n hosts.add(`localhost:${port}`);\n hosts.add(`[::1]:${port}`);\n }\n return hosts;\n}\n\nfunction validateRequestHost(\n request: IncomingMessage,\n allowedHosts: Set<string>,\n): void {\n const host = request.headers.host?.toLowerCase();\n if (!host || !allowedHosts.has(host)) {\n throw new HttpError(403, \"Playground request host is not allowed.\");\n }\n}\n\nfunction validateMutationRequest(\n request: IncomingMessage,\n mutationToken: string,\n): void {\n const contentType = request.headers[\"content-type\"] ?? \"\";\n if (!contentType.toLowerCase().startsWith(\"application/json\")) {\n throw new HttpError(\n 415,\n \"Playground mutations require application/json.\",\n );\n }\n if (request.headers[\"x-orcha-playground-token\"] !== mutationToken) {\n throw new HttpError(403, \"Invalid playground mutation token.\");\n }\n const origin = request.headers.origin;\n if (origin) {\n let originHost: string;\n try {\n originHost = new URL(origin).host.toLowerCase();\n } catch {\n throw new HttpError(403, \"Invalid playground request origin.\");\n }\n if (originHost !== request.headers.host?.toLowerCase()) {\n throw new HttpError(403, \"Cross-origin playground request denied.\");\n }\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["sessionId", "contentType"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/playground/source.ts"],
4
- "sourcesContent": ["import { readFile, readdir } from \"fs/promises\";\nimport { resolve } from \"path\";\nimport { getOrchaRuntimeContext } from \"../runtime/context.js\";\nimport type { OrchaClient } from \"../runtime/create-orcha.js\";\nimport type {\n AgentRegistration,\n CompiledAgentManifest,\n} from \"../types.js\";\n\nexport interface PlaygroundSourceItem {\n key: string;\n name: string;\n description?: string;\n enabled: boolean;\n configuration: Record<string, unknown>;\n rawConfiguration: string;\n instructions?: string;\n source?: string;\n}\n\nexport interface PlaygroundAgentSource {\n key: string;\n name: string;\n description?: string;\n provider: string;\n model: string;\n actionCount: number;\n skillCount: number;\n evaluationCount: number;\n subagentCount: number;\n configuration: Record<string, unknown>;\n rawConfiguration: string;\n instructions: string;\n actions: PlaygroundSourceItem[];\n skills: PlaygroundSourceItem[];\n evaluations: PlaygroundSourceItem[];\n subagents: Array<{\n key: string;\n name: string;\n description?: string;\n }>;\n}\n\nexport async function readPlaygroundAgentSource(\n orcha: OrchaClient,\n agentKey: string,\n): Promise<PlaygroundAgentSource> {\n const context = getOrchaRuntimeContext(orcha);\n const manifest = context.bundle.agents[agentKey];\n const registration = context.registrations[agentKey];\n if (!manifest || !registration) {\n throw new Error(`Unknown agent \"${agentKey}\".`);\n }\n const directory = registeredAgentDirectory(\n context.projectRoot,\n registration,\n );\n const rawConfiguration = await readRequired(\n resolve(directory, \"index.json\"),\n );\n const configuration = parseObject(rawConfiguration, `${agentKey}/index.json`);\n const instructions = await readRequired(\n resolve(directory, \"instructions.md\"),\n );\n\n return {\n key: agentKey,\n name: manifest.name,\n description: manifest.description,\n provider: manifest.provider,\n model: manifest.model,\n actionCount: Object.keys(manifest.actions).length,\n skillCount: Object.keys(manifest.skills).length,\n evaluationCount: Object.keys(manifest.evaluations).length,\n subagentCount: Object.keys(manifest.subagents).length,\n configuration,\n rawConfiguration,\n instructions,\n actions: await readCollectionItems(\n directory,\n \"actions\",\n manifest.actions,\n true,\n ),\n skills: await readCollectionItems(\n directory,\n \"skills\",\n manifest.skills,\n false,\n ),\n evaluations: await readCollectionItems(\n directory,\n \"evaluations\",\n manifest.evaluations,\n false,\n ),\n subagents: Object.entries(manifest.subagents).map(([key, child]) => ({\n key,\n name: child.name,\n description: child.description,\n })),\n };\n}\n\nfunction registeredAgentDirectory(\n projectRoot: string,\n registration: AgentRegistration,\n): string {\n const registeredPath =\n typeof registration === \"string\" ? registration : registration.path;\n return resolve(projectRoot, \"orcha\", registeredPath);\n}\n\nasync function readCollectionItems(\n agentDirectory: string,\n collection: \"actions\" | \"skills\" | \"evaluations\",\n manifests:\n | CompiledAgentManifest[\"actions\"]\n | CompiledAgentManifest[\"skills\"]\n | CompiledAgentManifest[\"evaluations\"],\n includeSource: boolean,\n): Promise<PlaygroundSourceItem[]> {\n const root = resolve(agentDirectory, collection);\n let entries;\n try {\n entries = await readdir(root, { withFileTypes: true });\n } catch (error) {\n if (\n error instanceof Error &&\n \"code\" in error &&\n (error as NodeJS.ErrnoException).code === \"ENOENT\"\n ) {\n return [];\n }\n throw error;\n }\n const byDirectory = new Map(\n Object.entries(manifests).map(([key, manifest]) => [\n manifest.directoryName,\n { key, manifest },\n ]),\n );\n return Promise.all(\n entries\n .filter((entry) => entry.isDirectory() && !entry.name.startsWith(\".\"))\n .sort((left, right) => left.name.localeCompare(right.name))\n .map(async (entry) => {\n const directory = resolve(root, entry.name);\n const rawConfiguration = await readRequired(\n resolve(directory, \"index.json\"),\n );\n const configuration = parseObject(\n rawConfiguration,\n `${collection}/${entry.name}/index.json`,\n );\n const compiled = byDirectory.get(entry.name);\n const instructions = includeSource\n ? undefined\n : await readOptional(resolve(directory, \"instructions.md\"));\n const source = includeSource\n ? await readOptional(resolve(directory, \"index.js\"))\n : undefined;\n return {\n key: compiled?.key ?? entry.name,\n name:\n typeof configuration.name === \"string\"\n ? configuration.name\n : entry.name,\n description:\n typeof configuration.description === \"string\"\n ? configuration.description\n : undefined,\n enabled: configuration.enabled !== false,\n configuration,\n rawConfiguration,\n ...(instructions !== undefined ? { instructions } : {}),\n ...(source !== undefined ? { source } : {}),\n };\n }),\n );\n}\n\nasync function readRequired(path: string): Promise<string> {\n return readFile(path, \"utf8\");\n}\n\nasync function readOptional(path: string): Promise<string | undefined> {\n try {\n return await readFile(path, \"utf8\");\n } catch (error) {\n if (\n error instanceof Error &&\n \"code\" in error &&\n (error as NodeJS.ErrnoException).code === \"ENOENT\"\n ) {\n return undefined;\n }\n throw error;\n }\n}\n\nfunction parseObject(\n source: string,\n label: string,\n): Record<string, unknown> {\n const value: unknown = JSON.parse(source);\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(`${label} must contain a JSON object.`);\n }\n return value as Record<string, unknown>;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAkC;AAClC,kBAAwB;AACxB,qBAAuC;AAyCvC,eAAsB,0BACpB,OACA,UACgC;AAChC,QAAM,cAAU,uCAAuB,KAAK;AAC5C,QAAM,WAAW,QAAQ,OAAO,OAAO,QAAQ;AAC/C,QAAM,eAAe,QAAQ,cAAc,QAAQ;AACnD,MAAI,CAAC,YAAY,CAAC,cAAc;AAC9B,UAAM,IAAI,MAAM,kBAAkB,QAAQ,IAAI;AAAA,EAChD;AACA,QAAM,YAAY;AAAA,IAChB,QAAQ;AAAA,IACR;AAAA,EACF;AACA,QAAM,mBAAmB,MAAM;AAAA,QAC7B,qBAAQ,WAAW,YAAY;AAAA,EACjC;AACA,QAAM,gBAAgB,YAAY,kBAAkB,GAAG,QAAQ,aAAa;AAC5E,QAAM,eAAe,MAAM;AAAA,QACzB,qBAAQ,WAAW,iBAAiB;AAAA,EACtC;AAEA,SAAO;AAAA,IACL,KAAK;AAAA,IACL,MAAM,SAAS;AAAA,IACf,aAAa,SAAS;AAAA,IACtB,UAAU,SAAS;AAAA,IACnB,OAAO,SAAS;AAAA,IAChB,aAAa,OAAO,KAAK,SAAS,OAAO,EAAE;AAAA,IAC3C,YAAY,OAAO,KAAK,SAAS,MAAM,EAAE;AAAA,IACzC,iBAAiB,OAAO,KAAK,SAAS,WAAW,EAAE;AAAA,IACnD,eAAe,OAAO,KAAK,SAAS,SAAS,EAAE;AAAA,IAC/C;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,MAAM;AAAA,MACb;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT;AAAA,IACF;AAAA,IACA,QAAQ,MAAM;AAAA,MACZ;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT;AAAA,IACF;AAAA,IACA,aAAa,MAAM;AAAA,MACjB;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT;AAAA,IACF;AAAA,IACA,WAAW,OAAO,QAAQ,SAAS,SAAS,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO;AAAA,MACnE;AAAA,MACA,MAAM,MAAM;AAAA,MACZ,aAAa,MAAM;AAAA,IACrB,EAAE;AAAA,EACJ;AACF;AAEA,SAAS,yBACP,aACA,cACQ;AACR,QAAM,iBACJ,OAAO,iBAAiB,WAAW,eAAe,aAAa;AACjE,aAAO,qBAAQ,aAAa,SAAS,cAAc;AACrD;AAEA,eAAe,oBACb,gBACA,YACA,WAIA,eACiC;AACjC,QAAM,WAAO,qBAAQ,gBAAgB,UAAU;AAC/C,MAAI;AACJ,MAAI;AACF,cAAU,UAAM,yBAAQ,MAAM,EAAE,eAAe,KAAK,CAAC;AAAA,EACvD,SAAS,OAAO;AACd,QACE,iBAAiB,SACjB,UAAU,SACT,MAAgC,SAAS,UAC1C;AACA,aAAO,CAAC;AAAA,IACV;AACA,UAAM;AAAA,EACR;AACA,QAAM,cAAc,IAAI;AAAA,IACtB,OAAO,QAAQ,SAAS,EAAE,IAAI,CAAC,CAAC,KAAK,QAAQ,MAAM;AAAA,MACjD,SAAS;AAAA,MACT,EAAE,KAAK,SAAS;AAAA,IAClB,CAAC;AAAA,EACH;AACA,SAAO,QAAQ;AAAA,IACb,QACG,OAAO,CAAC,UAAU,MAAM,YAAY,KAAK,CAAC,MAAM,KAAK,WAAW,GAAG,CAAC,EACpE,KAAK,CAAC,MAAM,UAAU,KAAK,KAAK,cAAc,MAAM,IAAI,CAAC,EACzD,IAAI,OAAO,UAAU;AACpB,YAAM,gBAAY,qBAAQ,MAAM,MAAM,IAAI;AAC1C,YAAM,mBAAmB,MAAM;AAAA,YAC7B,qBAAQ,WAAW,YAAY;AAAA,MACjC;AACA,YAAM,gBAAgB;AAAA,QACpB;AAAA,QACA,GAAG,UAAU,IAAI,MAAM,IAAI;AAAA,MAC7B;AACA,YAAM,WAAW,YAAY,IAAI,MAAM,IAAI;AAC3C,YAAM,eAAe,gBACjB,SACA,MAAM,iBAAa,qBAAQ,WAAW,iBAAiB,CAAC;AAC5D,YAAM,SAAS,gBACX,MAAM,iBAAa,qBAAQ,WAAW,UAAU,CAAC,IACjD;AACJ,aAAO;AAAA,QACL,KAAK,UAAU,OAAO,MAAM;AAAA,QAC5B,MACE,OAAO,cAAc,SAAS,WAC1B,cAAc,OACd,MAAM;AAAA,QACZ,aACE,OAAO,cAAc,gBAAgB,WACjC,cAAc,cACd;AAAA,QACN,SAAS,cAAc,YAAY;AAAA,QACnC;AAAA,QACA;AAAA,QACA,GAAI,iBAAiB,SAAY,EAAE,aAAa,IAAI,CAAC;AAAA,QACrD,GAAI,WAAW,SAAY,EAAE,OAAO,IAAI,CAAC;AAAA,MAC3C;AAAA,IACF,CAAC;AAAA,EACL;AACF;AAEA,eAAe,aAAa,MAA+B;AACzD,aAAO,0BAAS,MAAM,MAAM;AAC9B;AAEA,eAAe,aAAa,MAA2C;AACrE,MAAI;AACF,WAAO,UAAM,0BAAS,MAAM,MAAM;AAAA,EACpC,SAAS,OAAO;AACd,QACE,iBAAiB,SACjB,UAAU,SACT,MAAgC,SAAS,UAC1C;AACA,aAAO;AAAA,IACT;AACA,UAAM;AAAA,EACR;AACF;AAEA,SAAS,YACP,QACA,OACyB;AACzB,QAAM,QAAiB,KAAK,MAAM,MAAM;AACxC,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AAC/D,UAAM,IAAI,MAAM,GAAG,KAAK,8BAA8B;AAAA,EACxD;AACA,SAAO;AACT;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/project-loader.ts"],
4
- "sourcesContent": ["import { existsSync } from \"fs\";\nimport { mkdir, rm } from \"fs/promises\";\nimport { resolve } from \"path\";\nimport { pathToFileURL } from \"url\";\nimport { build as bundleEntry } from \"esbuild\";\nimport { loadProjectEnvironment } from \"./env.js\";\nimport { orcha } from \"./orcha.js\";\n\nexport async function loadProject(projectRoot: string): Promise<void> {\n loadProjectEnvironment(projectRoot);\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 const temporaryDirectory = resolve(projectRoot, \".orcha/.cli\");\n const bundlePath = resolve(\n temporaryDirectory,\n `registry-${process.pid}-${Date.now()}.mjs`,\n );\n await mkdir(temporaryDirectory, { recursive: true });\n try {\n const previousBundle = orcha.isInitialized()\n ? orcha.getCompiledBundle()\n : undefined;\n await bundleEntry({\n entryPoints: [registryPath],\n outfile: bundlePath,\n bundle: true,\n format: \"esm\",\n platform: \"node\",\n target: \"node18\",\n packages: \"external\",\n logLevel: \"silent\",\n });\n const previousRoot = process.env.ORCHA_PROJECT_ROOT;\n const previousCompiling = process.env.ORCHA_COMPILING;\n process.env.ORCHA_PROJECT_ROOT = projectRoot;\n process.env.ORCHA_COMPILING = \"1\";\n try {\n await import(\n `${pathToFileURL(bundlePath).href}?time=${Date.now()}`\n );\n } finally {\n restoreEnvironment(\"ORCHA_PROJECT_ROOT\", previousRoot);\n restoreEnvironment(\"ORCHA_COMPILING\", previousCompiling);\n }\n if (\n !orcha.isInitialized() ||\n orcha.getCompiledBundle() === previousBundle\n ) {\n throw new Error(\n '\"orcha/index.ts\" must call orcha.init({ providers, agents }).',\n );\n }\n } finally {\n await rm(bundlePath, { force: true });\n }\n}\n\nfunction restoreEnvironment(\n name: string,\n value: string | undefined,\n): void {\n if (value === undefined) {\n delete process.env[name];\n } else {\n process.env[name] = value;\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAA2B;AAC3B,sBAA0B;AAC1B,kBAAwB;AACxB,iBAA8B;AAC9B,qBAAqC;AACrC,iBAAuC;AACvC,mBAAsB;AAEtB,eAAsB,YAAY,aAAoC;AACpE,yCAAuB,WAAW;AAClC,QAAM,mBAAe,qBAAQ,aAAa,gBAAgB;AAC1D,MAAI,KAAC,sBAAW,YAAY,GAAG;AAC7B,UAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE;AACA,QAAM,yBAAqB,qBAAQ,aAAa,aAAa;AAC7D,QAAM,iBAAa;AAAA,IACjB;AAAA,IACA,YAAY,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC;AAAA,EACvC;AACA,YAAM,uBAAM,oBAAoB,EAAE,WAAW,KAAK,CAAC;AACnD,MAAI;AACF,UAAM,iBAAiB,mBAAM,cAAc,IACvC,mBAAM,kBAAkB,IACxB;AACJ,cAAM,eAAAA,OAAY;AAAA,MAChB,aAAa,CAAC,YAAY;AAAA,MAC1B,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,IACZ,CAAC;AACD,UAAM,eAAe,QAAQ,IAAI;AACjC,UAAM,oBAAoB,QAAQ,IAAI;AACtC,YAAQ,IAAI,qBAAqB;AACjC,YAAQ,IAAI,kBAAkB;AAC9B,QAAI;AACF,YAAM,OACJ,OAAG,0BAAc,UAAU,EAAE,IAAI,SAAS,KAAK,IAAI,CAAC;AAAA,IAExD,UAAE;AACA,yBAAmB,sBAAsB,YAAY;AACrD,yBAAmB,mBAAmB,iBAAiB;AAAA,IACzD;AACA,QACE,CAAC,mBAAM,cAAc,KACrB,mBAAM,kBAAkB,MAAM,gBAC9B;AACA,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF,UAAE;AACA,cAAM,oBAAG,YAAY,EAAE,OAAO,KAAK,CAAC;AAAA,EACtC;AACF;AAEA,SAAS,mBACP,MACA,OACM;AACN,MAAI,UAAU,QAAW;AACvB,WAAO,QAAQ,IAAI,IAAI;AAAA,EACzB,OAAO;AACL,YAAQ,IAAI,IAAI,IAAI;AAAA,EACtB;AACF;",
6
- "names": ["bundleEntry"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/providers/anthropic.ts"],
4
- "sourcesContent": ["import type {\n ProviderConfiguration,\n Usage,\n} from \"../types.js\";\nimport { OrchaError } from \"../errors.js\";\nimport { readLocalFileContent } from \"../file-content.js\";\nimport { parseStructuredOutput } from \"../runtime/structured-output.js\";\nimport { readServerSentEvents } from \"./sse.js\";\nimport type {\n ProviderAdapter,\n ProviderAssistantBlock,\n ProviderMessage,\n ProviderRequest,\n ProviderResponse,\n ProviderStopReason,\n ProviderTextBlock,\n ProviderToolCall,\n} from \"./types.js\";\n\nexport interface AnthropicContentBlock {\n type: string;\n text?: string;\n thinking?: string;\n signature?: string;\n data?: string;\n id?: string;\n name?: string;\n input?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\ninterface AnthropicResponse {\n id?: string;\n stop_reason?: string | null;\n content?: AnthropicContentBlock[];\n usage?: {\n input_tokens?: number;\n output_tokens?: number;\n cache_read_input_tokens?: number;\n cache_creation_input_tokens?: number;\n };\n error?: {\n message?: string;\n };\n}\n\nexport const anthropicProvider: ProviderAdapter = {\n name: \"anthropic\",\n generate: generateAnthropic,\n};\n\nasync function generateAnthropic(\n provider: ProviderConfiguration,\n request: ProviderRequest,\n): Promise<ProviderResponse> {\n if (!provider.apiKey?.trim()) {\n throw new Error(\n 'Missing Anthropic API key in orcha.init({ providers: { anthropic: \"...\" } }).',\n );\n }\n\n if (request.outputType === \"image\" || request.outputType === \"audio\") {\n throw new OrchaError(\n \"unsupported_provider_capability\",\n `Anthropic does not support \"${request.outputType}\" agent output.`,\n );\n }\n\n const reasoning = getReasoningConfiguration(request);\n const systemPrompt =\n request.outputType === \"json\"\n ? `${request.systemPrompt}\\n\\nReturn only valid JSON matching this JSON Schema:\\n${JSON.stringify(request.outputSchema)}`\n : request.systemPrompt;\n const requestBody: Record<string, unknown> = {\n model: request.model,\n max_tokens: reasoning.maxTokens,\n system: systemPrompt,\n messages: await toAnthropicMessages(request.messages),\n ...(request.publishOutput ? { stream: true } : {}),\n };\n const tools = request.tools.map((tool) => ({\n name: tool.name,\n description: tool.description,\n input_schema: tool.parameters,\n }));\n if (tools.length > 0) {\n requestBody.tools = tools;\n }\n\n if (reasoning.thinking) {\n requestBody.thinking = reasoning.thinking;\n if (reasoning.outputConfig) {\n requestBody.output_config = reasoning.outputConfig;\n }\n }\n\n const response = await fetch(\n `${provider.baseUrl ?? \"https://api.anthropic.com\"}/v1/messages`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n \"x-api-key\": provider.apiKey,\n \"anthropic-version\": \"2023-06-01\",\n },\n body: JSON.stringify(requestBody),\n signal: request.signal,\n },\n );\n\n if (!response.ok) {\n const body = (await response.json()) as AnthropicResponse;\n throw new Error(\n body.error?.message ?? `Anthropic request failed with HTTP ${response.status}.`,\n );\n }\n\n const body = response.headers\n .get(\"content-type\")\n ?.includes(\"text/event-stream\")\n ? await readAnthropicStream(response, request.publishOutput)\n : ((await response.json()) as AnthropicResponse);\n return toProviderResponse(request, body);\n}\n\nfunction toProviderResponse(\n request: ProviderRequest,\n body: AnthropicResponse,\n): ProviderResponse {\n const content = (body.content ?? []).map(toProviderContentBlock);\n const textOutput = content\n .filter((item): item is ProviderTextBlock => item.type === \"text\")\n .map((item) => item.text)\n .join(\"\");\n const toolCalls = content.filter(\n (item): item is ProviderToolCall => item.type === \"tool_call\",\n );\n const stopReason = normalizeStopReason(body.stop_reason);\n const output =\n request.outputType === \"json\" &&\n toolCalls.length === 0 &&\n stopReason !== \"max_tokens\"\n ? parseStructuredOutput(textOutput, request.outputSchema ?? {})\n : textOutput;\n if (textOutput && request.publishOutput) {\n request.publishOutput(textOutput);\n }\n\n return {\n output,\n responseId: body.id,\n stopReason,\n content,\n toolCalls,\n usage: {\n inputTokens: body.usage?.input_tokens ?? 0,\n outputTokens: body.usage?.output_tokens ?? 0,\n reasoningTokens: null,\n cacheReadTokens: body.usage?.cache_read_input_tokens ?? 0,\n cacheWriteTokens: body.usage?.cache_creation_input_tokens ?? 0,\n },\n };\n}\n\nfunction normalizeStopReason(\n reason: string | null | undefined,\n): ProviderStopReason | undefined {\n if (reason === undefined || reason === null) {\n return undefined;\n }\n if (reason === \"end_turn\" || reason === \"stop_sequence\") {\n return \"end_turn\";\n }\n if (reason === \"tool_use\") {\n return \"tool_call\";\n }\n if (reason === \"max_tokens\") {\n return \"max_tokens\";\n }\n if (reason === \"refusal\") {\n return \"content_filter\";\n }\n return \"unknown\";\n}\n\nfunction toProviderContentBlock(\n block: AnthropicContentBlock,\n): ProviderAssistantBlock {\n if (block.type === \"text\" && typeof block.text === \"string\") {\n return { type: \"text\", text: block.text };\n }\n if (block.type === \"thinking\" && typeof block.thinking === \"string\") {\n return {\n type: \"reasoning\",\n text: block.thinking,\n ...(typeof block.signature === \"string\"\n ? { replay: { opaqueData: block.signature } }\n : {}),\n };\n }\n if (block.type === \"redacted_thinking\" && typeof block.data === \"string\") {\n return {\n type: \"reasoning\",\n text: \"\",\n replay: {\n opaqueData: block.data,\n },\n };\n }\n if (\n block.type === \"tool_use\" &&\n typeof block.id === \"string\" &&\n typeof block.name === \"string\"\n ) {\n return {\n type: \"tool_call\",\n callId: block.id,\n name: block.name,\n arguments: block.input ?? {},\n };\n }\n throw new Error(`Anthropic returned unsupported content block \"${block.type}\".`);\n}\n\nasync function readAnthropicStream(\n response: Response,\n publishOutput?: (output: string) => void,\n): Promise<AnthropicResponse> {\n const body: AnthropicResponse = {\n content: [],\n usage: {},\n };\n const partialToolInputs = new Map<number, string>();\n let cumulativeText = \"\";\n\n for await (const event of readServerSentEvents(response)) {\n applyAnthropicStreamEvent(\n event,\n body,\n partialToolInputs,\n (textDelta) => {\n cumulativeText += textDelta;\n publishOutput?.(cumulativeText);\n },\n );\n }\n\n for (const [index, input] of partialToolInputs) {\n const block = body.content?.[index];\n if (block?.type === \"tool_use\") {\n block.input = input ? parseToolInput(input, block.name) : {};\n }\n }\n return body;\n}\n\nfunction applyAnthropicStreamEvent(\n event: Record<string, unknown>,\n body: AnthropicResponse,\n partialToolInputs: Map<number, string>,\n publishTextDelta: (text: string) => void,\n): void {\n if (event.type === \"error\") {\n const error = isRecord(event.error) ? event.error : {};\n throw new Error(\n typeof error.message === \"string\"\n ? error.message\n : \"Anthropic streaming request failed.\",\n );\n }\n\n if (event.type === \"message_start\" && isRecord(event.message)) {\n const message = event.message;\n body.id = typeof message.id === \"string\" ? message.id : undefined;\n if (isRecord(message.usage)) {\n body.usage = {\n input_tokens: numberOrUndefined(message.usage.input_tokens),\n output_tokens: numberOrUndefined(message.usage.output_tokens),\n cache_read_input_tokens: numberOrUndefined(\n message.usage.cache_read_input_tokens,\n ),\n cache_creation_input_tokens: numberOrUndefined(\n message.usage.cache_creation_input_tokens,\n ),\n };\n }\n return;\n }\n\n const index = numberOrUndefined(event.index);\n if (index === undefined) {\n if (event.type === \"message_delta\" && isRecord(event.delta)) {\n body.stop_reason =\n typeof event.delta.stop_reason === \"string\"\n ? event.delta.stop_reason\n : body.stop_reason;\n if (isRecord(event.usage)) {\n body.usage = {\n ...body.usage,\n output_tokens:\n numberOrUndefined(event.usage.output_tokens) ??\n body.usage?.output_tokens,\n };\n }\n }\n return;\n }\n\n if (\n event.type === \"content_block_start\" &&\n isRecord(event.content_block) &&\n typeof event.content_block.type === \"string\"\n ) {\n const block = {\n ...event.content_block,\n type: event.content_block.type,\n } as AnthropicContentBlock;\n if (block.type === \"tool_use\") {\n block.input = {};\n partialToolInputs.set(index, \"\");\n }\n if (block.type === \"text\" && typeof block.text === \"string\" && block.text) {\n publishTextDelta(block.text);\n }\n if (!body.content) {\n body.content = [];\n }\n body.content[index] = block;\n return;\n }\n\n if (event.type !== \"content_block_delta\" || !isRecord(event.delta)) {\n return;\n }\n const block = body.content?.[index];\n if (!block) {\n throw new Error(\n `Anthropic streamed a delta for unknown content block ${index}.`,\n );\n }\n const delta = event.delta;\n if (delta.type === \"text_delta\" && typeof delta.text === \"string\") {\n block.text = `${block.text ?? \"\"}${delta.text}`;\n publishTextDelta(delta.text);\n } else if (\n delta.type === \"thinking_delta\" &&\n typeof delta.thinking === \"string\"\n ) {\n block.thinking = `${block.thinking ?? \"\"}${delta.thinking}`;\n } else if (\n delta.type === \"signature_delta\" &&\n typeof delta.signature === \"string\"\n ) {\n block.signature = `${block.signature ?? \"\"}${delta.signature}`;\n } else if (\n delta.type === \"input_json_delta\" &&\n typeof delta.partial_json === \"string\"\n ) {\n partialToolInputs.set(\n index,\n `${partialToolInputs.get(index) ?? \"\"}${delta.partial_json}`,\n );\n }\n}\n\nfunction parseToolInput(\n input: string,\n toolName: string | undefined,\n): Record<string, unknown> {\n let parsed: unknown;\n try {\n parsed = JSON.parse(input);\n } catch (error) {\n throw new Error(\n `Anthropic returned invalid arguments for tool \"${toolName ?? \"unknown\"}\".`,\n { cause: error },\n );\n }\n if (!isRecord(parsed)) {\n throw new Error(\n `Anthropic returned non-object arguments for tool \"${toolName ?? \"unknown\"}\".`,\n );\n }\n return parsed;\n}\n\nfunction numberOrUndefined(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nasync function toAnthropicMessages(\n messages: ProviderMessage[],\n): Promise<\n Array<{ role: \"user\" | \"assistant\"; content: string | unknown[] }>\n> {\n return Promise.all(messages.map(async (message) => {\n if (message.role === \"assistant\") {\n return {\n role: \"assistant\",\n content: message.content.map((block) => {\n if (block.type === \"text\") {\n return block;\n }\n if (block.type === \"reasoning\") {\n if (message.provider !== \"anthropic\") {\n return {\n type: \"text\",\n text: block.text,\n };\n }\n return !block.text && block.replay?.opaqueData\n ? {\n type: \"redacted_thinking\",\n data: block.replay.opaqueData,\n }\n : {\n type: \"thinking\",\n thinking: block.text,\n signature: block.replay?.opaqueData,\n };\n }\n return {\n type: \"tool_use\",\n id: block.callId,\n name: block.name,\n input: block.arguments,\n };\n }),\n };\n }\n if (message.role === \"tool\") {\n return {\n role: \"user\",\n content: message.results.map((result) => ({\n type: \"tool_result\",\n tool_use_id: result.callId,\n content: JSON.stringify(result.output ?? null),\n ...(result.isError ? { is_error: true } : {}),\n })),\n };\n }\n if (typeof message.content === \"string\") {\n return message;\n }\n return {\n role: \"user\",\n content: await Promise.all(message.content.map(async (block) => {\n if (!isRecord(block) || typeof block.type !== \"string\") {\n throw new OrchaError(\n \"invalid_input\",\n \"Anthropic message content contains an invalid block.\",\n );\n }\n if (\n block.type === \"text\"\n ) {\n return block;\n }\n if (block.type === \"file\") {\n const file = await readLocalFileContent(block);\n if (block.mimeType.startsWith(\"image/\")) {\n return {\n type: \"image\",\n source: {\n type: \"base64\",\n media_type: block.mimeType,\n data: file.base64,\n },\n };\n }\n if (block.mimeType === \"application/pdf\") {\n return {\n type: \"document\",\n source: {\n type: \"base64\",\n media_type: block.mimeType,\n data: file.base64,\n },\n };\n }\n }\n if (\n block.type === \"image\" &&\n typeof block.fileUri === \"string\"\n ) {\n return {\n type: \"image\",\n source: {\n type: \"url\",\n url: block.fileUri,\n },\n };\n }\n if (\n block.type === \"url\" &&\n typeof block.fileUri === \"string\" &&\n block.mimeType === \"application/pdf\"\n ) {\n return {\n type: \"document\",\n source: {\n type: \"url\",\n url: block.fileUri,\n },\n };\n }\n throw new OrchaError(\n \"unsupported_content_type\",\n `Anthropic does not support content type \"${block.type}\" with MIME type \"${String(block.mimeType)}\".`,\n );\n })),\n };\n }));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction getReasoningConfiguration(request: ProviderRequest): {\n maxTokens: number;\n thinking?: Record<string, unknown>;\n outputConfig?: Record<string, unknown>;\n} {\n const baseMaxTokens = request.maxTokens ?? 10_000;\n if (!request.reasoningLevel) {\n return { maxTokens: baseMaxTokens };\n }\n return {\n maxTokens: baseMaxTokens,\n thinking: { type: \"adaptive\" },\n outputConfig: { effort: request.reasoningLevel },\n };\n}\n"],
5
- "mappings": "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",
6
- "names": ["body", "block"]
7
- }