orchajs 0.16.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/README.md +9 -3
  2. package/dist/amarsia/metadata.js +30 -16
  3. package/dist/amarsia/metadata.js.map +1 -1
  4. package/dist/cli.js +4 -4
  5. package/dist/cli.js.map +1 -1
  6. package/dist/compiler/build-project.js +2 -2
  7. package/dist/env.d.ts.map +1 -1
  8. package/dist/env.js +5 -2
  9. package/dist/env.js.map +1 -1
  10. package/dist/playground/public/app.js +9 -9
  11. package/dist/playground/public/app.js.map +4 -4
  12. package/dist/playground/server.d.ts.map +1 -1
  13. package/dist/playground/server.js +9 -4
  14. package/dist/playground/server.js.map +1 -1
  15. package/dist/project-loader.js +1 -1
  16. package/dist/providers/google-gemini.d.ts +67 -4
  17. package/dist/providers/google-gemini.d.ts.map +1 -1
  18. package/dist/providers/google-gemini.js +13 -2
  19. package/dist/providers/google-gemini.js.map +1 -1
  20. package/dist/providers/google-genai.d.ts.map +1 -1
  21. package/dist/providers/google-genai.js +2 -2
  22. package/dist/providers/google-genai.js.map +1 -1
  23. package/dist/providers/index.js +11 -1
  24. package/dist/providers/index.js.map +1 -1
  25. package/dist/providers/vertex-ai.d.ts.map +1 -1
  26. package/dist/providers/vertex-ai.js +2 -2
  27. package/dist/providers/vertex-ai.js.map +1 -1
  28. package/dist/runtime/actions/context.js +25 -1
  29. package/dist/runtime/actions/context.js.map +1 -1
  30. package/dist-cjs/amarsia/metadata.js +37 -25
  31. package/dist-cjs/amarsia/metadata.js.map +2 -2
  32. package/dist-cjs/amarsia/sync.js +1 -1
  33. package/dist-cjs/cli-agents-template.js +1 -1
  34. package/dist-cjs/compiler/build-project.js +24 -24
  35. package/dist-cjs/compiler/build-project.js.map +2 -2
  36. package/dist-cjs/compiler/compile.js +31 -31
  37. package/dist-cjs/compiler/compile.js.map +2 -2
  38. package/dist-cjs/env.js +10 -7
  39. package/dist-cjs/env.js.map +2 -2
  40. package/dist-cjs/errors.js +1 -1
  41. package/dist-cjs/file-content.js +6 -6
  42. package/dist-cjs/file-content.js.map +2 -2
  43. package/dist-cjs/index.js +1 -1
  44. package/dist-cjs/integrations/esbuild.js +4 -4
  45. package/dist-cjs/integrations/esbuild.js.map +2 -2
  46. package/dist-cjs/orcha.js +4 -4
  47. package/dist-cjs/orcha.js.map +2 -2
  48. package/dist-cjs/playground/server.js +34 -30
  49. package/dist-cjs/playground/server.js.map +2 -2
  50. package/dist-cjs/playground/source.js +11 -11
  51. package/dist-cjs/playground/source.js.map +2 -2
  52. package/dist-cjs/project-loader.js +11 -11
  53. package/dist-cjs/project-loader.js.map +2 -2
  54. package/dist-cjs/providers/anthropic.js +1 -1
  55. package/dist-cjs/providers/bedrock.js +8 -8
  56. package/dist-cjs/providers/bedrock.js.map +2 -2
  57. package/dist-cjs/providers/catalog.js +1 -1
  58. package/dist-cjs/providers/deepseek.js +1 -1
  59. package/dist-cjs/providers/dispatcher.js +1 -1
  60. package/dist-cjs/providers/google-gemini.js +13 -3
  61. package/dist-cjs/providers/google-gemini.js.map +2 -2
  62. package/dist-cjs/providers/google-genai.js +2 -2
  63. package/dist-cjs/providers/google-genai.js.map +2 -2
  64. package/dist-cjs/providers/index.js +11 -1
  65. package/dist-cjs/providers/index.js.map +2 -2
  66. package/dist-cjs/providers/openai.js +1 -1
  67. package/dist-cjs/providers/sse.js +1 -1
  68. package/dist-cjs/providers/types.js +1 -1
  69. package/dist-cjs/providers/vertex-ai.js +6 -2
  70. package/dist-cjs/providers/vertex-ai.js.map +2 -2
  71. package/dist-cjs/runtime/actions/context.js +26 -2
  72. package/dist-cjs/runtime/actions/context.js.map +2 -2
  73. package/dist-cjs/runtime/actions/execute.js +1 -1
  74. package/dist-cjs/runtime/actions/native.js +3 -3
  75. package/dist-cjs/runtime/actions/native.js.map +2 -2
  76. package/dist-cjs/runtime/actions/sandbox.js +1 -1
  77. package/dist-cjs/runtime/agent.js +3 -3
  78. package/dist-cjs/runtime/agent.js.map +2 -2
  79. package/dist-cjs/runtime/context.js +1 -1
  80. package/dist-cjs/runtime/create-orcha.js +3 -3
  81. package/dist-cjs/runtime/create-orcha.js.map +2 -2
  82. package/dist-cjs/runtime/execution.js +1 -1
  83. package/dist-cjs/runtime/session-events.js +1 -1
  84. package/dist-cjs/runtime/structured-output.js +1 -1
  85. package/dist-cjs/storage/browser-indexeddb.js +1 -1
  86. package/dist-cjs/storage/create-store.js +1 -1
  87. package/dist-cjs/storage/edge-store.js +1 -1
  88. package/dist-cjs/storage/migrate.js +1 -1
  89. package/dist-cjs/storage/node-jsonl.js +10 -10
  90. package/dist-cjs/storage/node-jsonl.js.map +2 -2
  91. package/dist-cjs/storage/node-sqlite.js +7 -7
  92. package/dist-cjs/storage/node-sqlite.js.map +2 -2
  93. package/dist-cjs/storage/react-native-jsonl.js +1 -1
  94. package/dist-cjs/testing.js +17 -17
  95. package/dist-cjs/testing.js.map +2 -2
  96. package/dist-cjs/types/google-genai-sdk.d.js +3 -0
  97. package/dist-cjs/types/google-genai-sdk.d.js.map +7 -0
  98. package/dist-cjs/types.js +1 -1
  99. package/package.json +14 -9
package/dist-cjs/env.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict"; const __orchaImportMetaUrl = require("node:url").pathToFileURL(__filename).href;
1
+ "use strict"; const __orchaImportMetaUrl = require("url").pathToFileURL(__filename).href;
2
2
  "use strict";
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -22,13 +22,16 @@ __export(env_exports, {
22
22
  loadProjectEnvironment: () => loadProjectEnvironment
23
23
  });
24
24
  module.exports = __toCommonJS(env_exports);
25
- var import_node_fs = require("node:fs");
26
- var import_node_path = require("node:path");
27
- var import_node_process = require("node:process");
25
+ var import_fs = require("fs");
26
+ var import_path = require("path");
27
+ var import_dotenv = require("dotenv");
28
28
  function loadProjectEnvironment(projectRoot) {
29
- const path = (0, import_node_path.resolve)(projectRoot, ".env");
30
- if ((0, import_node_fs.existsSync)(path)) {
31
- (0, import_node_process.loadEnvFile)(path);
29
+ const path = (0, import_path.resolve)(projectRoot, ".env");
30
+ if ((0, import_fs.existsSync)(path)) {
31
+ const result = (0, import_dotenv.config)({ path, override: false, quiet: true });
32
+ if (result.error) {
33
+ throw result.error;
34
+ }
32
35
  }
33
36
  }
34
37
  // Annotate the CommonJS export names for ESM import in node:
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/env.ts"],
4
- "sourcesContent": ["import { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { loadEnvFile } from \"node:process\";\n\nexport function loadProjectEnvironment(projectRoot: string): void {\n const path = resolve(projectRoot, \".env\");\n if (existsSync(path)) {\n loadEnvFile(path);\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAA2B;AAC3B,uBAAwB;AACxB,0BAA4B;AAErB,SAAS,uBAAuB,aAA2B;AAChE,QAAM,WAAO,0BAAQ,aAAa,MAAM;AACxC,UAAI,2BAAW,IAAI,GAAG;AACpB,yCAAY,IAAI;AAAA,EAClB;AACF;",
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
6
  "names": []
7
7
  }
@@ -1,4 +1,4 @@
1
- "use strict"; const __orchaImportMetaUrl = require("node:url").pathToFileURL(__filename).href;
1
+ "use strict"; const __orchaImportMetaUrl = require("url").pathToFileURL(__filename).href;
2
2
  "use strict";
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -1,4 +1,4 @@
1
- "use strict"; const __orchaImportMetaUrl = require("node:url").pathToFileURL(__filename).href;
1
+ "use strict"; const __orchaImportMetaUrl = require("url").pathToFileURL(__filename).href;
2
2
  "use strict";
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -24,8 +24,8 @@ __export(file_content_exports, {
24
24
  readLocalFileContent: () => readLocalFileContent
25
25
  });
26
26
  module.exports = __toCommonJS(file_content_exports);
27
- var import_promises = require("node:fs/promises");
28
- var import_node_path = require("node:path");
27
+ var import_promises = require("fs/promises");
28
+ var import_path = require("path");
29
29
  const MIME_TYPES = {
30
30
  ".csv": "text/csv",
31
31
  ".doc": "application/msword",
@@ -48,7 +48,7 @@ const MIME_TYPES = {
48
48
  ".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
49
49
  };
50
50
  function normalizeLocalFile(filePath, mimeType, projectRoot = process.cwd()) {
51
- const absolutePath = (0, import_node_path.resolve)(projectRoot, filePath);
51
+ const absolutePath = (0, import_path.resolve)(projectRoot, filePath);
52
52
  return {
53
53
  type: "file",
54
54
  filePath: absolutePath,
@@ -78,14 +78,14 @@ async function readLocalFileContent(content) {
78
78
  bytes,
79
79
  base64,
80
80
  dataUri: `data:${content.mimeType};base64,${base64}`,
81
- fileName: (0, import_node_path.basename)(content.filePath)
81
+ fileName: (0, import_path.basename)(content.filePath)
82
82
  };
83
83
  }
84
84
  function normalizeMimeType(mimeType, source) {
85
85
  if (mimeType?.trim()) {
86
86
  return mimeType.trim().toLowerCase();
87
87
  }
88
- const inferred = MIME_TYPES[(0, import_node_path.extname)(source).toLowerCase()];
88
+ const inferred = MIME_TYPES[(0, import_path.extname)(source).toLowerCase()];
89
89
  if (!inferred) {
90
90
  throw new Error(
91
91
  `Could not infer a MIME type for "${source}". Provide mimeType explicitly.`
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/file-content.ts"],
4
- "sourcesContent": ["import { readFile } from \"node:fs/promises\";\nimport { basename, extname, resolve } from \"node: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,uBAA2C;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,0BAAQ,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,2BAAS,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,0BAAQ,MAAM,EAAE,YAAY,CAAC;AACzD,MAAI,CAAC,UAAU;AACb,UAAM,IAAI;AAAA,MACR,oCAAoC,MAAM;AAAA,IAC5C;AAAA,EACF;AACA,SAAO;AACT;",
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
6
  "names": []
7
7
  }
package/dist-cjs/index.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict"; const __orchaImportMetaUrl = require("node:url").pathToFileURL(__filename).href;
1
+ "use strict"; const __orchaImportMetaUrl = require("url").pathToFileURL(__filename).href;
2
2
  "use strict";
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -1,4 +1,4 @@
1
- "use strict"; const __orchaImportMetaUrl = require("node:url").pathToFileURL(__filename).href;
1
+ "use strict"; const __orchaImportMetaUrl = require("url").pathToFileURL(__filename).href;
2
2
  "use strict";
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -22,11 +22,11 @@ __export(esbuild_exports, {
22
22
  orchaPlugin: () => orchaPlugin
23
23
  });
24
24
  module.exports = __toCommonJS(esbuild_exports);
25
- var import_node_path = require("node:path");
25
+ var import_path = require("path");
26
26
  var import_build_project = require("../compiler/build-project.js");
27
27
  function orchaPlugin(options = {}) {
28
- const projectRoot = (0, import_node_path.resolve)(options.projectRoot ?? process.cwd());
29
- const generatedBundle = (0, import_node_path.resolve)(projectRoot, ".orcha/dist/bundle.js");
28
+ const projectRoot = (0, import_path.resolve)(options.projectRoot ?? process.cwd());
29
+ const generatedBundle = (0, import_path.resolve)(projectRoot, ".orcha/dist/bundle.js");
30
30
  return {
31
31
  name: "orchajs",
32
32
  setup(builder) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/integrations/esbuild.ts"],
4
- "sourcesContent": ["import { resolve } from \"node: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,uBAAwB;AAExB,2BAA6B;AAUtB,SAAS,YACd,UAAqC,CAAC,GAC9B;AACR,QAAM,kBAAc,0BAAQ,QAAQ,eAAe,QAAQ,IAAI,CAAC;AAChE,QAAM,sBAAkB,0BAAQ,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;",
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
6
  "names": []
7
7
  }
package/dist-cjs/orcha.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict"; const __orchaImportMetaUrl = require("node:url").pathToFileURL(__filename).href;
1
+ "use strict"; const __orchaImportMetaUrl = require("url").pathToFileURL(__filename).href;
2
2
  "use strict";
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -22,7 +22,7 @@ __export(orcha_exports, {
22
22
  orcha: () => orcha
23
23
  });
24
24
  module.exports = __toCommonJS(orcha_exports);
25
- var import_node_path = require("node:path");
25
+ var import_path = require("path");
26
26
  var import_compile = require("./compiler/compile.js");
27
27
  var import_providers = require("./providers/index.js");
28
28
  var import_create_orcha = require("./runtime/create-orcha.js");
@@ -33,10 +33,10 @@ const orcha = (0, import_create_orcha.createOrcha)(
33
33
  "ORCHA_PRODUCTION_BUNDLE_MISSING: configure the Orcha integration in your application build."
34
34
  );
35
35
  }
36
- const projectRoot = (0, import_node_path.resolve)(
36
+ const projectRoot = (0, import_path.resolve)(
37
37
  configuration.root ?? process.env.ORCHA_PROJECT_ROOT ?? process.cwd()
38
38
  );
39
- const registryRoot = (0, import_node_path.resolve)(projectRoot, "orcha");
39
+ const registryRoot = (0, import_path.resolve)(projectRoot, "orcha");
40
40
  return (0, import_compile.compileRegistry)(
41
41
  configuration.agents,
42
42
  registryRoot,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/orcha.ts"],
4
- "sourcesContent": ["import { resolve } from \"node: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,uBAAwB;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,0BAAQ,aAAa,OAAO;AACjD,eAAO;AAAA,MACL,cAAc;AAAA,MACd;AAAA,MACA,cAAc,SAAS,WAAW;AAAA,IACpC;AAAA,EACF;AAAA,EACA;AACF;",
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
6
  "names": []
7
7
  }
@@ -1,4 +1,4 @@
1
- "use strict"; const __orchaImportMetaUrl = require("node:url").pathToFileURL(__filename).href;
1
+ "use strict"; const __orchaImportMetaUrl = require("url").pathToFileURL(__filename).href;
2
2
  "use strict";
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -22,19 +22,20 @@ __export(server_exports, {
22
22
  startPlayground: () => startPlayground
23
23
  });
24
24
  module.exports = __toCommonJS(server_exports);
25
- var import_node_child_process = require("node:child_process");
26
- var import_node_crypto = require("node:crypto");
27
- var import_node_fs = require("node:fs");
28
- var import_promises = require("node:fs/promises");
29
- var import_node_path = require("node:path");
30
- var import_node_url = require("node:url");
31
- var import_node_http = require("node:http");
25
+ var import_child_process = require("child_process");
26
+ var import_crypto = require("crypto");
27
+ var import_fs = require("fs");
28
+ var import_promises = require("fs/promises");
29
+ var import_path = require("path");
30
+ var import_url = require("url");
31
+ var import_http = require("http");
32
+ var import_chokidar = require("chokidar");
32
33
  var import_orcha = require("../orcha.js");
33
34
  var import_project_loader = require("../project-loader.js");
34
35
  var import_testing = require("../testing.js");
35
36
  var import_source = require("./source.js");
36
37
  async function startPlayground(options = {}) {
37
- const projectRoot = (0, import_node_path.resolve)(options.projectRoot ?? process.cwd());
38
+ const projectRoot = (0, import_path.resolve)(options.projectRoot ?? process.cwd());
38
39
  const host = options.host ?? "localhost";
39
40
  const port = options.port ?? 4310;
40
41
  if (host === "0.0.0.0" || host === "::") {
@@ -42,11 +43,11 @@ async function startPlayground(options = {}) {
42
43
  "Use an explicit hostname or IP address instead of a wildcard playground host."
43
44
  );
44
45
  }
45
- const mutationToken = (0, import_node_crypto.randomBytes)(32).toString("base64url");
46
+ const mutationToken = (0, import_crypto.randomBytes)(32).toString("base64url");
46
47
  const allowedHosts = playgroundHosts(host, port);
47
48
  await (0, import_project_loader.loadProject)(projectRoot);
48
49
  const projectClients = /* @__PURE__ */ new Set();
49
- const server = (0, import_node_http.createServer)(async (request, response) => {
50
+ const server = (0, import_http.createServer)(async (request, response) => {
50
51
  try {
51
52
  await routeRequest({
52
53
  request,
@@ -105,22 +106,25 @@ async function startPlayground(options = {}) {
105
106
  }
106
107
  }
107
108
  };
108
- const watcher = (0, import_node_fs.watch)(
109
- (0, import_node_path.resolve)(projectRoot, "orcha"),
110
- { recursive: true },
111
- () => {
112
- clearTimeout(reloadTimer);
113
- reloadTimer = setTimeout(() => void reload(), 100);
114
- }
115
- );
109
+ const watcher = (0, import_chokidar.watch)(
110
+ (0, import_path.resolve)(projectRoot, "orcha"),
111
+ { ignoreInitial: true }
112
+ ).on("all", () => {
113
+ clearTimeout(reloadTimer);
114
+ reloadTimer = setTimeout(() => void reload(), 100);
115
+ });
116
116
  await new Promise((resolveStop) => {
117
117
  const stop = () => {
118
118
  clearTimeout(reloadTimer);
119
- watcher.close();
120
119
  for (const client of projectClients) {
121
120
  client.end();
122
121
  }
123
- server.close(() => resolveStop());
122
+ void Promise.all([
123
+ watcher.close(),
124
+ new Promise((resolveClosed) => {
125
+ server.close(() => resolveClosed());
126
+ })
127
+ ]).then(() => resolveStop());
124
128
  };
125
129
  process.once("SIGINT", stop);
126
130
  process.once("SIGTERM", stop);
@@ -469,16 +473,16 @@ async function readAllEventPages(read) {
469
473
  return pages.flat();
470
474
  }
471
475
  async function serveAsset(response, pathname) {
472
- const publicRoot = (0, import_node_path.resolve)(
473
- (0, import_node_path.dirname)((0, import_node_url.fileURLToPath)(__orchaImportMetaUrl)),
476
+ const publicRoot = (0, import_path.resolve)(
477
+ (0, import_path.dirname)((0, import_url.fileURLToPath)(__orchaImportMetaUrl)),
474
478
  "public"
475
479
  );
476
480
  const requested = pathname === "/" ? "index.html" : pathname.slice(1);
477
- const path = (0, import_node_path.resolve)(publicRoot, requested);
478
- const relativePath = (0, import_node_path.relative)(publicRoot, path);
479
- if (relativePath.startsWith("..") || (0, import_node_path.isAbsolute)(relativePath) || !(0, import_node_fs.existsSync)(path)) {
480
- const indexPath = (0, import_node_path.resolve)(publicRoot, "index.html");
481
- if (!(0, import_node_fs.existsSync)(indexPath)) {
481
+ const path = (0, import_path.resolve)(publicRoot, requested);
482
+ const relativePath = (0, import_path.relative)(publicRoot, path);
483
+ if (relativePath.startsWith("..") || (0, import_path.isAbsolute)(relativePath) || !(0, import_fs.existsSync)(path)) {
484
+ const indexPath = (0, import_path.resolve)(publicRoot, "index.html");
485
+ if (!(0, import_fs.existsSync)(indexPath)) {
482
486
  sendJson(response, 503, {
483
487
  error: "Playground assets are missing. Rebuild orchajs."
484
488
  });
@@ -498,7 +502,7 @@ async function serveAsset(response, pathname) {
498
502
  response.end(await (0, import_promises.readFile)(path));
499
503
  }
500
504
  function contentType(path) {
501
- switch ((0, import_node_path.extname)(path)) {
505
+ switch ((0, import_path.extname)(path)) {
502
506
  case ".html":
503
507
  return "text/html; charset=utf-8";
504
508
  case ".js":
@@ -624,7 +628,7 @@ function optionalString(value) {
624
628
  function openBrowser(url) {
625
629
  const command = process.platform === "darwin" ? "open" : process.platform === "win32" ? "cmd" : "xdg-open";
626
630
  const arguments_ = process.platform === "win32" ? ["/c", "start", "", url] : [url];
627
- const child = (0, import_node_child_process.spawn)(command, arguments_, {
631
+ const child = (0, import_child_process.spawn)(command, arguments_, {
628
632
  detached: true,
629
633
  stdio: "ignore"
630
634
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/playground/server.ts"],
4
- "sourcesContent": ["import { spawn } from \"node:child_process\";\nimport { randomBytes } from \"node:crypto\";\nimport { existsSync, watch } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { dirname, extname, isAbsolute, relative, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n createServer,\n type IncomingMessage,\n type ServerResponse,\n} from \"node:http\";\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 { recursive: true },\n () => {\n clearTimeout(reloadTimer);\n reloadTimer = setTimeout(() => void reload(), 100);\n },\n );\n\n await new Promise<void>((resolveStop) => {\n const stop = (): void => {\n clearTimeout(reloadTimer);\n watcher.close();\n for (const client of projectClients) {\n client.end();\n }\n server.close(() => 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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",
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
6
  "names": ["sessionId", "contentType"]
7
7
  }
@@ -1,4 +1,4 @@
1
- "use strict"; const __orchaImportMetaUrl = require("node:url").pathToFileURL(__filename).href;
1
+ "use strict"; const __orchaImportMetaUrl = require("url").pathToFileURL(__filename).href;
2
2
  "use strict";
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -22,8 +22,8 @@ __export(source_exports, {
22
22
  readPlaygroundAgentSource: () => readPlaygroundAgentSource
23
23
  });
24
24
  module.exports = __toCommonJS(source_exports);
25
- var import_promises = require("node:fs/promises");
26
- var import_node_path = require("node:path");
25
+ var import_promises = require("fs/promises");
26
+ var import_path = require("path");
27
27
  var import_context = require("../runtime/context.js");
28
28
  async function readPlaygroundAgentSource(orcha, agentKey) {
29
29
  const context = (0, import_context.getOrchaRuntimeContext)(orcha);
@@ -37,11 +37,11 @@ async function readPlaygroundAgentSource(orcha, agentKey) {
37
37
  registration
38
38
  );
39
39
  const rawConfiguration = await readRequired(
40
- (0, import_node_path.resolve)(directory, "index.json")
40
+ (0, import_path.resolve)(directory, "index.json")
41
41
  );
42
42
  const configuration = parseObject(rawConfiguration, `${agentKey}/index.json`);
43
43
  const instructions = await readRequired(
44
- (0, import_node_path.resolve)(directory, "instructions.md")
44
+ (0, import_path.resolve)(directory, "instructions.md")
45
45
  );
46
46
  return {
47
47
  key: agentKey,
@@ -83,10 +83,10 @@ async function readPlaygroundAgentSource(orcha, agentKey) {
83
83
  }
84
84
  function registeredAgentDirectory(projectRoot, registration) {
85
85
  const registeredPath = typeof registration === "string" ? registration : registration.path;
86
- return (0, import_node_path.resolve)(projectRoot, "orcha", registeredPath);
86
+ return (0, import_path.resolve)(projectRoot, "orcha", registeredPath);
87
87
  }
88
88
  async function readCollectionItems(agentDirectory, collection, manifests, includeSource) {
89
- const root = (0, import_node_path.resolve)(agentDirectory, collection);
89
+ const root = (0, import_path.resolve)(agentDirectory, collection);
90
90
  let entries;
91
91
  try {
92
92
  entries = await (0, import_promises.readdir)(root, { withFileTypes: true });
@@ -104,17 +104,17 @@ async function readCollectionItems(agentDirectory, collection, manifests, includ
104
104
  );
105
105
  return Promise.all(
106
106
  entries.filter((entry) => entry.isDirectory() && !entry.name.startsWith(".")).sort((left, right) => left.name.localeCompare(right.name)).map(async (entry) => {
107
- const directory = (0, import_node_path.resolve)(root, entry.name);
107
+ const directory = (0, import_path.resolve)(root, entry.name);
108
108
  const rawConfiguration = await readRequired(
109
- (0, import_node_path.resolve)(directory, "index.json")
109
+ (0, import_path.resolve)(directory, "index.json")
110
110
  );
111
111
  const configuration = parseObject(
112
112
  rawConfiguration,
113
113
  `${collection}/${entry.name}/index.json`
114
114
  );
115
115
  const compiled = byDirectory.get(entry.name);
116
- const instructions = includeSource ? void 0 : await readOptional((0, import_node_path.resolve)(directory, "instructions.md"));
117
- const source = includeSource ? await readOptional((0, import_node_path.resolve)(directory, "index.js")) : void 0;
116
+ const instructions = includeSource ? void 0 : await readOptional((0, import_path.resolve)(directory, "instructions.md"));
117
+ const source = includeSource ? await readOptional((0, import_path.resolve)(directory, "index.js")) : void 0;
118
118
  return {
119
119
  key: compiled?.key ?? entry.name,
120
120
  name: typeof configuration.name === "string" ? configuration.name : entry.name,