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.
- package/README.md +9 -3
- package/dist/amarsia/metadata.js +30 -16
- package/dist/amarsia/metadata.js.map +1 -1
- package/dist/cli.js +4 -4
- package/dist/cli.js.map +1 -1
- package/dist/compiler/build-project.js +2 -2
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +5 -2
- package/dist/env.js.map +1 -1
- package/dist/playground/public/app.js +9 -9
- package/dist/playground/public/app.js.map +4 -4
- package/dist/playground/server.d.ts.map +1 -1
- package/dist/playground/server.js +9 -4
- package/dist/playground/server.js.map +1 -1
- package/dist/project-loader.js +1 -1
- package/dist/providers/google-gemini.d.ts +67 -4
- package/dist/providers/google-gemini.d.ts.map +1 -1
- package/dist/providers/google-gemini.js +13 -2
- package/dist/providers/google-gemini.js.map +1 -1
- package/dist/providers/google-genai.d.ts.map +1 -1
- package/dist/providers/google-genai.js +2 -2
- package/dist/providers/google-genai.js.map +1 -1
- package/dist/providers/index.js +11 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/vertex-ai.d.ts.map +1 -1
- package/dist/providers/vertex-ai.js +2 -2
- package/dist/providers/vertex-ai.js.map +1 -1
- package/dist/runtime/actions/context.js +25 -1
- package/dist/runtime/actions/context.js.map +1 -1
- package/dist-cjs/amarsia/metadata.js +37 -25
- package/dist-cjs/amarsia/metadata.js.map +2 -2
- package/dist-cjs/amarsia/sync.js +1 -1
- package/dist-cjs/cli-agents-template.js +1 -1
- package/dist-cjs/compiler/build-project.js +24 -24
- package/dist-cjs/compiler/build-project.js.map +2 -2
- package/dist-cjs/compiler/compile.js +31 -31
- package/dist-cjs/compiler/compile.js.map +2 -2
- package/dist-cjs/env.js +10 -7
- package/dist-cjs/env.js.map +2 -2
- package/dist-cjs/errors.js +1 -1
- package/dist-cjs/file-content.js +6 -6
- package/dist-cjs/file-content.js.map +2 -2
- package/dist-cjs/index.js +1 -1
- package/dist-cjs/integrations/esbuild.js +4 -4
- package/dist-cjs/integrations/esbuild.js.map +2 -2
- package/dist-cjs/orcha.js +4 -4
- package/dist-cjs/orcha.js.map +2 -2
- package/dist-cjs/playground/server.js +34 -30
- package/dist-cjs/playground/server.js.map +2 -2
- package/dist-cjs/playground/source.js +11 -11
- package/dist-cjs/playground/source.js.map +2 -2
- package/dist-cjs/project-loader.js +11 -11
- package/dist-cjs/project-loader.js.map +2 -2
- package/dist-cjs/providers/anthropic.js +1 -1
- package/dist-cjs/providers/bedrock.js +8 -8
- package/dist-cjs/providers/bedrock.js.map +2 -2
- package/dist-cjs/providers/catalog.js +1 -1
- package/dist-cjs/providers/deepseek.js +1 -1
- package/dist-cjs/providers/dispatcher.js +1 -1
- package/dist-cjs/providers/google-gemini.js +13 -3
- package/dist-cjs/providers/google-gemini.js.map +2 -2
- package/dist-cjs/providers/google-genai.js +2 -2
- package/dist-cjs/providers/google-genai.js.map +2 -2
- package/dist-cjs/providers/index.js +11 -1
- package/dist-cjs/providers/index.js.map +2 -2
- package/dist-cjs/providers/openai.js +1 -1
- package/dist-cjs/providers/sse.js +1 -1
- package/dist-cjs/providers/types.js +1 -1
- package/dist-cjs/providers/vertex-ai.js +6 -2
- package/dist-cjs/providers/vertex-ai.js.map +2 -2
- package/dist-cjs/runtime/actions/context.js +26 -2
- package/dist-cjs/runtime/actions/context.js.map +2 -2
- package/dist-cjs/runtime/actions/execute.js +1 -1
- package/dist-cjs/runtime/actions/native.js +3 -3
- package/dist-cjs/runtime/actions/native.js.map +2 -2
- package/dist-cjs/runtime/actions/sandbox.js +1 -1
- package/dist-cjs/runtime/agent.js +3 -3
- package/dist-cjs/runtime/agent.js.map +2 -2
- package/dist-cjs/runtime/context.js +1 -1
- package/dist-cjs/runtime/create-orcha.js +3 -3
- package/dist-cjs/runtime/create-orcha.js.map +2 -2
- package/dist-cjs/runtime/execution.js +1 -1
- package/dist-cjs/runtime/session-events.js +1 -1
- package/dist-cjs/runtime/structured-output.js +1 -1
- package/dist-cjs/storage/browser-indexeddb.js +1 -1
- package/dist-cjs/storage/create-store.js +1 -1
- package/dist-cjs/storage/edge-store.js +1 -1
- package/dist-cjs/storage/migrate.js +1 -1
- package/dist-cjs/storage/node-jsonl.js +10 -10
- package/dist-cjs/storage/node-jsonl.js.map +2 -2
- package/dist-cjs/storage/node-sqlite.js +7 -7
- package/dist-cjs/storage/node-sqlite.js.map +2 -2
- package/dist-cjs/storage/react-native-jsonl.js +1 -1
- package/dist-cjs/testing.js +17 -17
- package/dist-cjs/testing.js.map +2 -2
- package/dist-cjs/types/google-genai-sdk.d.js +3 -0
- package/dist-cjs/types/google-genai-sdk.d.js.map +7 -0
- package/dist-cjs/types.js +1 -1
- package/package.json +14 -9
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/amarsia/metadata.ts"],
|
|
4
|
-
"sourcesContent": ["import { createHash } from \"
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,
|
|
4
|
+
"sourcesContent": ["import { createHash } from \"crypto\";\nimport { existsSync, readFileSync } from \"fs\";\nimport { dirname, join, resolve } from \"path\";\nimport type {\n CompiledActionManifest,\n CompiledAgentManifest,\n CompiledBundle,\n} from \"../types.js\";\n\nexport interface AmarsiaProjectMetadata {\n schema_version: 1;\n content_hash: string;\n project: {\n external_id: string;\n name: string;\n description?: string;\n root_path: string;\n package_name?: string;\n repository_url?: string;\n metadata: Record<string, unknown>;\n };\n agents: AmarsiaAgentMetadata[];\n}\n\nexport interface AmarsiaAgentMetadata {\n external_id: string;\n parent_external_id?: string;\n name: string;\n description?: string;\n provider?: string;\n model?: string;\n output_type?: string;\n actions: AmarsiaActionMetadata[];\n skills: AmarsiaSkillMetadata[];\n evaluations: AmarsiaEvaluationMetadata[];\n tests: AmarsiaTestMetadata[];\n metadata: Record<string, unknown>;\n}\n\nexport interface AmarsiaActionMetadata {\n key: string;\n name: string;\n description: string;\n execution?: \"client\" | \"local\";\n parameters: Record<string, unknown>;\n output_schema?: Record<string, unknown>;\n permissions: Record<string, string[]>;\n timeout_ms?: number;\n side_effect?: boolean;\n source_hash?: string;\n}\n\nexport interface AmarsiaSkillMetadata {\n key: string;\n name: string;\n description?: string;\n enabled?: boolean;\n triggers: string[];\n}\n\nexport interface AmarsiaEvaluationMetadata {\n key: string;\n name: string;\n description?: string;\n enabled?: boolean;\n provider?: string;\n model?: string;\n metrics: Array<{\n name: string;\n description?: string;\n threshold?: number;\n }>;\n}\n\nexport interface AmarsiaTestMetadata {\n key: string;\n name?: string;\n description?: string;\n enabled?: boolean;\n}\n\nexport function createAmarsiaProjectMetadata(\n bundle: CompiledBundle,\n projectRoot: string,\n): AmarsiaProjectMetadata {\n const packageInfo = readPackageInfo(projectRoot);\n const projectExternalId = hashStable({\n packageName: packageInfo.name,\n rootPath: projectRoot,\n }).slice(0, 32);\n const agents = flattenAgents(bundle.agents);\n const content = {\n project: {\n external_id: projectExternalId,\n name: packageInfo.name ?? \"Orcha project\",\n description: packageInfo.description,\n root_path: projectRoot,\n package_name: packageInfo.name,\n repository_url: packageInfo.repositoryUrl,\n metadata: {\n packageVersion: packageInfo.version,\n orchaSchemaVersion: bundle.schemaVersion,\n actionRuntime: bundle.actionRuntime,\n },\n },\n agents,\n };\n\n return {\n schema_version: 1,\n content_hash: hashStable(content),\n ...content,\n };\n}\n\nfunction flattenAgents(\n agents: Record<string, CompiledAgentManifest>,\n): AmarsiaAgentMetadata[] {\n const result: AmarsiaAgentMetadata[] = [];\n const visit = (\n manifest: CompiledAgentManifest,\n parentExternalId?: string,\n ) => {\n result.push(agentMetadata(manifest, parentExternalId));\n for (const subagent of Object.values(manifest.subagents ?? {})) {\n visit(subagent, manifest.key);\n }\n };\n\n for (const manifest of Object.values(agents)) {\n visit(manifest);\n }\n return result;\n}\n\nfunction agentMetadata(\n manifest: CompiledAgentManifest,\n parentExternalId?: string,\n): AmarsiaAgentMetadata {\n return {\n external_id: manifest.key,\n parent_external_id: parentExternalId,\n name: manifest.name,\n description: manifest.description,\n provider: manifest.provider,\n model: manifest.model,\n output_type: manifest.outputType,\n actions: Object.entries(manifest.actions ?? {}).map(([key, action]) =>\n actionMetadata(key, action),\n ),\n skills: Object.entries(manifest.skills ?? {}).map(([key, skill]) => ({\n key,\n name: skill.name,\n description: skill.description,\n enabled: skill.enabled,\n triggers: skill.triggers ?? [],\n })),\n evaluations: Object.entries(manifest.evaluations ?? {}).map(\n ([key, evaluation]) => ({\n key,\n name: evaluation.name,\n description: evaluation.description,\n enabled: evaluation.enabled,\n provider: evaluation.provider,\n model: evaluation.model,\n metrics: evaluation.metrics.map((metric) => ({\n name: metric.name,\n description: metric.description,\n threshold: metric.threshold,\n })),\n }),\n ),\n tests: [],\n metadata: {\n region: manifest.region,\n maxTokens: manifest.maxTokens,\n reasoningLevel: manifest.reasoningLevel,\n outputSchema: manifest.outputSchema,\n subagents: Object.keys(manifest.subagents ?? {}),\n subagentPolicy: manifest.subagentPolicy,\n },\n };\n}\n\nfunction actionMetadata(\n key: string,\n action: CompiledActionManifest,\n): AmarsiaActionMetadata {\n return {\n key,\n name: action.name,\n description: action.description,\n execution: action.execution,\n parameters: action.parameters,\n output_schema: action.outputSchema,\n permissions: action.permissions ?? {},\n timeout_ms: action.timeoutMs,\n side_effect: action.sideEffect,\n source_hash: action.sourceHash,\n };\n}\n\nfunction readPackageInfo(projectRoot: string): {\n name?: string;\n description?: string;\n version?: string;\n repositoryUrl?: string;\n} {\n const packagePath = join(projectRoot, \"package.json\");\n if (!existsSync(packagePath)) {\n return { repositoryUrl: normalizeRepositoryUrl(readGitRemoteUrl(projectRoot)) };\n }\n try {\n const parsed = JSON.parse(readFileSync(packagePath, \"utf8\")) as {\n name?: unknown;\n description?: unknown;\n version?: unknown;\n repository?: unknown;\n };\n return {\n name: typeof parsed.name === \"string\" ? parsed.name : undefined,\n description:\n typeof parsed.description === \"string\" ? parsed.description : undefined,\n version: typeof parsed.version === \"string\" ? parsed.version : undefined,\n repositoryUrl: normalizeRepositoryUrl(\n readPackageRepositoryUrl(parsed.repository) ??\n readGitRemoteUrl(projectRoot),\n ),\n };\n } catch {\n return { repositoryUrl: normalizeRepositoryUrl(readGitRemoteUrl(projectRoot)) };\n }\n}\n\nfunction readPackageRepositoryUrl(repository: unknown): string | undefined {\n if (typeof repository === \"string\") {\n return repository;\n }\n if (\n repository &&\n typeof repository === \"object\" &&\n typeof (repository as { url?: unknown }).url === \"string\"\n ) {\n return (repository as { url: string }).url;\n }\n return undefined;\n}\n\nfunction readGitRemoteUrl(projectRoot: string): string | undefined {\n const configPath = resolveGitConfigPath(projectRoot);\n if (!configPath || !existsSync(configPath)) {\n return undefined;\n }\n const config = readFileSync(configPath, \"utf8\");\n const origin = config.match(/\\[remote \"origin\"\\][\\s\\S]*?\\n\\s*url = (.+)/);\n return origin?.[1]?.trim();\n}\n\nfunction resolveGitConfigPath(projectRoot: string): string | undefined {\n let directory = resolve(projectRoot);\n while (true) {\n const gitPath = join(directory, \".git\");\n if (existsSync(gitPath)) {\n try {\n const gitFile = readFileSync(gitPath, \"utf8\");\n const gitDir = gitFile.match(/^gitdir: (.+)$/m)?.[1]?.trim();\n if (gitDir) {\n return join(resolve(directory, gitDir), \"config\");\n }\n } catch {\n return join(gitPath, \"config\");\n }\n return join(dirname(gitPath), \".git\", \"config\");\n }\n const parent = dirname(directory);\n if (parent === directory) {\n return undefined;\n }\n directory = parent;\n }\n}\n\nfunction normalizeRepositoryUrl(url: string | undefined): string | undefined {\n return url\n ?.replace(/^git\\+/, \"\")\n .replace(/^git@github\\.com:/, \"https://github.com/\")\n .replace(/\\.git$/, \"\");\n}\n\nfunction hashStable(value: unknown): string {\n return createHash(\"sha256\")\n .update(JSON.stringify(sortStable(value)))\n .digest(\"hex\");\n}\n\nfunction sortStable(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(sortStable);\n }\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .filter(([, entry]) => entry !== undefined)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entry]) => [key, sortStable(entry)]),\n );\n }\n return value;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA2B;AAC3B,gBAAyC;AACzC,kBAAuC;AA+EhC,SAAS,6BACd,QACA,aACwB;AACxB,QAAM,cAAc,gBAAgB,WAAW;AAC/C,QAAM,oBAAoB,WAAW;AAAA,IACnC,aAAa,YAAY;AAAA,IACzB,UAAU;AAAA,EACZ,CAAC,EAAE,MAAM,GAAG,EAAE;AACd,QAAM,SAAS,cAAc,OAAO,MAAM;AAC1C,QAAM,UAAU;AAAA,IACd,SAAS;AAAA,MACP,aAAa;AAAA,MACb,MAAM,YAAY,QAAQ;AAAA,MAC1B,aAAa,YAAY;AAAA,MACzB,WAAW;AAAA,MACX,cAAc,YAAY;AAAA,MAC1B,gBAAgB,YAAY;AAAA,MAC5B,UAAU;AAAA,QACR,gBAAgB,YAAY;AAAA,QAC5B,oBAAoB,OAAO;AAAA,QAC3B,eAAe,OAAO;AAAA,MACxB;AAAA,IACF;AAAA,IACA;AAAA,EACF;AAEA,SAAO;AAAA,IACL,gBAAgB;AAAA,IAChB,cAAc,WAAW,OAAO;AAAA,IAChC,GAAG;AAAA,EACL;AACF;AAEA,SAAS,cACP,QACwB;AACxB,QAAM,SAAiC,CAAC;AACxC,QAAM,QAAQ,CACZ,UACA,qBACG;AACH,WAAO,KAAK,cAAc,UAAU,gBAAgB,CAAC;AACrD,eAAW,YAAY,OAAO,OAAO,SAAS,aAAa,CAAC,CAAC,GAAG;AAC9D,YAAM,UAAU,SAAS,GAAG;AAAA,IAC9B;AAAA,EACF;AAEA,aAAW,YAAY,OAAO,OAAO,MAAM,GAAG;AAC5C,UAAM,QAAQ;AAAA,EAChB;AACA,SAAO;AACT;AAEA,SAAS,cACP,UACA,kBACsB;AACtB,SAAO;AAAA,IACL,aAAa,SAAS;AAAA,IACtB,oBAAoB;AAAA,IACpB,MAAM,SAAS;AAAA,IACf,aAAa,SAAS;AAAA,IACtB,UAAU,SAAS;AAAA,IACnB,OAAO,SAAS;AAAA,IAChB,aAAa,SAAS;AAAA,IACtB,SAAS,OAAO,QAAQ,SAAS,WAAW,CAAC,CAAC,EAAE;AAAA,MAAI,CAAC,CAAC,KAAK,MAAM,MAC/D,eAAe,KAAK,MAAM;AAAA,IAC5B;AAAA,IACA,QAAQ,OAAO,QAAQ,SAAS,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO;AAAA,MACnE;AAAA,MACA,MAAM,MAAM;AAAA,MACZ,aAAa,MAAM;AAAA,MACnB,SAAS,MAAM;AAAA,MACf,UAAU,MAAM,YAAY,CAAC;AAAA,IAC/B,EAAE;AAAA,IACF,aAAa,OAAO,QAAQ,SAAS,eAAe,CAAC,CAAC,EAAE;AAAA,MACtD,CAAC,CAAC,KAAK,UAAU,OAAO;AAAA,QACtB;AAAA,QACA,MAAM,WAAW;AAAA,QACjB,aAAa,WAAW;AAAA,QACxB,SAAS,WAAW;AAAA,QACpB,UAAU,WAAW;AAAA,QACrB,OAAO,WAAW;AAAA,QAClB,SAAS,WAAW,QAAQ,IAAI,CAAC,YAAY;AAAA,UAC3C,MAAM,OAAO;AAAA,UACb,aAAa,OAAO;AAAA,UACpB,WAAW,OAAO;AAAA,QACpB,EAAE;AAAA,MACJ;AAAA,IACF;AAAA,IACA,OAAO,CAAC;AAAA,IACR,UAAU;AAAA,MACR,QAAQ,SAAS;AAAA,MACjB,WAAW,SAAS;AAAA,MACpB,gBAAgB,SAAS;AAAA,MACzB,cAAc,SAAS;AAAA,MACvB,WAAW,OAAO,KAAK,SAAS,aAAa,CAAC,CAAC;AAAA,MAC/C,gBAAgB,SAAS;AAAA,IAC3B;AAAA,EACF;AACF;AAEA,SAAS,eACP,KACA,QACuB;AACvB,SAAO;AAAA,IACL;AAAA,IACA,MAAM,OAAO;AAAA,IACb,aAAa,OAAO;AAAA,IACpB,WAAW,OAAO;AAAA,IAClB,YAAY,OAAO;AAAA,IACnB,eAAe,OAAO;AAAA,IACtB,aAAa,OAAO,eAAe,CAAC;AAAA,IACpC,YAAY,OAAO;AAAA,IACnB,aAAa,OAAO;AAAA,IACpB,aAAa,OAAO;AAAA,EACtB;AACF;AAEA,SAAS,gBAAgB,aAKvB;AACA,QAAM,kBAAc,kBAAK,aAAa,cAAc;AACpD,MAAI,KAAC,sBAAW,WAAW,GAAG;AAC5B,WAAO,EAAE,eAAe,uBAAuB,iBAAiB,WAAW,CAAC,EAAE;AAAA,EAChF;AACA,MAAI;AACF,UAAM,SAAS,KAAK,UAAM,wBAAa,aAAa,MAAM,CAAC;AAM3D,WAAO;AAAA,MACL,MAAM,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO;AAAA,MACtD,aACE,OAAO,OAAO,gBAAgB,WAAW,OAAO,cAAc;AAAA,MAChE,SAAS,OAAO,OAAO,YAAY,WAAW,OAAO,UAAU;AAAA,MAC/D,eAAe;AAAA,QACb,yBAAyB,OAAO,UAAU,KACxC,iBAAiB,WAAW;AAAA,MAChC;AAAA,IACF;AAAA,EACF,QAAQ;AACN,WAAO,EAAE,eAAe,uBAAuB,iBAAiB,WAAW,CAAC,EAAE;AAAA,EAChF;AACF;AAEA,SAAS,yBAAyB,YAAyC;AACzE,MAAI,OAAO,eAAe,UAAU;AAClC,WAAO;AAAA,EACT;AACA,MACE,cACA,OAAO,eAAe,YACtB,OAAQ,WAAiC,QAAQ,UACjD;AACA,WAAQ,WAA+B;AAAA,EACzC;AACA,SAAO;AACT;AAEA,SAAS,iBAAiB,aAAyC;AACjE,QAAM,aAAa,qBAAqB,WAAW;AACnD,MAAI,CAAC,cAAc,KAAC,sBAAW,UAAU,GAAG;AAC1C,WAAO;AAAA,EACT;AACA,QAAM,aAAS,wBAAa,YAAY,MAAM;AAC9C,QAAM,SAAS,OAAO,MAAM,4CAA4C;AACxE,SAAO,SAAS,CAAC,GAAG,KAAK;AAC3B;AAEA,SAAS,qBAAqB,aAAyC;AACrE,MAAI,gBAAY,qBAAQ,WAAW;AACnC,SAAO,MAAM;AACX,UAAM,cAAU,kBAAK,WAAW,MAAM;AACtC,YAAI,sBAAW,OAAO,GAAG;AACvB,UAAI;AACF,cAAM,cAAU,wBAAa,SAAS,MAAM;AAC5C,cAAM,SAAS,QAAQ,MAAM,iBAAiB,IAAI,CAAC,GAAG,KAAK;AAC3D,YAAI,QAAQ;AACV,qBAAO,sBAAK,qBAAQ,WAAW,MAAM,GAAG,QAAQ;AAAA,QAClD;AAAA,MACF,QAAQ;AACN,mBAAO,kBAAK,SAAS,QAAQ;AAAA,MAC/B;AACA,iBAAO,sBAAK,qBAAQ,OAAO,GAAG,QAAQ,QAAQ;AAAA,IAChD;AACA,UAAM,aAAS,qBAAQ,SAAS;AAChC,QAAI,WAAW,WAAW;AACxB,aAAO;AAAA,IACT;AACA,gBAAY;AAAA,EACd;AACF;AAEA,SAAS,uBAAuB,KAA6C;AAC3E,SAAO,KACH,QAAQ,UAAU,EAAE,EACrB,QAAQ,qBAAqB,qBAAqB,EAClD,QAAQ,UAAU,EAAE;AACzB;AAEA,SAAS,WAAW,OAAwB;AAC1C,aAAO,0BAAW,QAAQ,EACvB,OAAO,KAAK,UAAU,WAAW,KAAK,CAAC,CAAC,EACxC,OAAO,KAAK;AACjB;AAEA,SAAS,WAAW,OAAyB;AAC3C,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,IAAI,UAAU;AAAA,EAC7B;AACA,MAAI,SAAS,OAAO,UAAU,UAAU;AACtC,WAAO,OAAO;AAAA,MACZ,OAAO,QAAQ,KAAgC,EAC5C,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,UAAU,MAAS,EACzC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,MAAM,KAAK,cAAc,KAAK,CAAC,EACnD,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,WAAW,KAAK,CAAC,CAAC;AAAA,IACnD;AAAA,EACF;AACA,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist-cjs/amarsia/sync.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict"; const __orchaImportMetaUrl = require("
|
|
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("
|
|
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("
|
|
1
|
+
"use strict"; const __orchaImportMetaUrl = require("url").pathToFileURL(__filename).href;
|
|
2
2
|
"use strict";
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -22,28 +22,28 @@ __export(build_project_exports, {
|
|
|
22
22
|
buildProject: () => buildProject
|
|
23
23
|
});
|
|
24
24
|
module.exports = __toCommonJS(build_project_exports);
|
|
25
|
-
var
|
|
26
|
-
var import_promises = require("
|
|
27
|
-
var
|
|
28
|
-
var
|
|
25
|
+
var import_fs = require("fs");
|
|
26
|
+
var import_promises = require("fs/promises");
|
|
27
|
+
var import_path = require("path");
|
|
28
|
+
var import_url = require("url");
|
|
29
29
|
var import_esbuild = require("esbuild");
|
|
30
30
|
var import_orcha = require("../orcha.js");
|
|
31
31
|
var import_catalog = require("../providers/catalog.js");
|
|
32
32
|
async function buildProject(options = {}) {
|
|
33
|
-
const projectRoot = (0,
|
|
34
|
-
const registryPath = (0,
|
|
35
|
-
if (!(0,
|
|
33
|
+
const projectRoot = (0, import_path.resolve)(options.projectRoot ?? process.cwd());
|
|
34
|
+
const registryPath = (0, import_path.resolve)(projectRoot, "orcha/index.ts");
|
|
35
|
+
if (!(0, import_fs.existsSync)(registryPath)) {
|
|
36
36
|
throw new Error('Missing "orcha/index.ts". Run "orcha init" first.');
|
|
37
37
|
}
|
|
38
|
-
const temporaryDirectory = (0,
|
|
39
|
-
const registryBundlePath = (0,
|
|
40
|
-
const productionEntryPath = (0,
|
|
38
|
+
const temporaryDirectory = (0, import_path.resolve)(projectRoot, ".orcha/.build");
|
|
39
|
+
const registryBundlePath = (0, import_path.resolve)(temporaryDirectory, "registry.mjs");
|
|
40
|
+
const productionEntryPath = (0, import_path.resolve)(
|
|
41
41
|
temporaryDirectory,
|
|
42
42
|
"production-entry.mjs"
|
|
43
43
|
);
|
|
44
|
-
const outputPath = (0,
|
|
44
|
+
const outputPath = (0, import_path.resolve)(projectRoot, ".orcha/dist/bundle.js");
|
|
45
45
|
await (0, import_promises.mkdir)(temporaryDirectory, { recursive: true });
|
|
46
|
-
await (0, import_promises.mkdir)((0,
|
|
46
|
+
await (0, import_promises.mkdir)((0, import_path.dirname)(outputPath), { recursive: true });
|
|
47
47
|
try {
|
|
48
48
|
await (0, import_esbuild.build)({
|
|
49
49
|
entryPoints: [registryPath],
|
|
@@ -51,7 +51,7 @@ async function buildProject(options = {}) {
|
|
|
51
51
|
bundle: true,
|
|
52
52
|
format: "esm",
|
|
53
53
|
platform: "node",
|
|
54
|
-
target: "
|
|
54
|
+
target: "node18",
|
|
55
55
|
packages: "external",
|
|
56
56
|
logLevel: "silent"
|
|
57
57
|
});
|
|
@@ -60,7 +60,7 @@ async function buildProject(options = {}) {
|
|
|
60
60
|
process.env.ORCHA_COMPILING = "1";
|
|
61
61
|
process.env.ORCHA_PROJECT_ROOT = projectRoot;
|
|
62
62
|
try {
|
|
63
|
-
await import(`${(0,
|
|
63
|
+
await import(`${(0, import_url.pathToFileURL)(registryBundlePath).href}?time=${Date.now()}`);
|
|
64
64
|
} finally {
|
|
65
65
|
if (previousCompiling === void 0) {
|
|
66
66
|
delete process.env.ORCHA_COMPILING;
|
|
@@ -74,12 +74,12 @@ async function buildProject(options = {}) {
|
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
const compiledBundle = import_orcha.orcha.getCompiledBundle();
|
|
77
|
-
const runtimeFactoryPath = (0,
|
|
78
|
-
(0,
|
|
77
|
+
const runtimeFactoryPath = (0, import_path.resolve)(
|
|
78
|
+
(0, import_path.dirname)((0, import_url.fileURLToPath)(__orchaImportMetaUrl)),
|
|
79
79
|
"../runtime/create-orcha.js"
|
|
80
80
|
).replaceAll("\\", "/");
|
|
81
|
-
const providerDispatcherPath = (0,
|
|
82
|
-
(0,
|
|
81
|
+
const providerDispatcherPath = (0, import_path.resolve)(
|
|
82
|
+
(0, import_path.dirname)((0, import_url.fileURLToPath)(__orchaImportMetaUrl)),
|
|
83
83
|
"../providers/dispatcher.js"
|
|
84
84
|
).replaceAll("\\", "/");
|
|
85
85
|
const includedProviders = [
|
|
@@ -114,7 +114,7 @@ async function buildProject(options = {}) {
|
|
|
114
114
|
bundle: true,
|
|
115
115
|
format: "esm",
|
|
116
116
|
platform: "node",
|
|
117
|
-
target: "
|
|
117
|
+
target: "node18",
|
|
118
118
|
minify: true,
|
|
119
119
|
legalComments: "none",
|
|
120
120
|
define: {
|
|
@@ -125,7 +125,7 @@ async function buildProject(options = {}) {
|
|
|
125
125
|
...needsNodeRequire ? {
|
|
126
126
|
banner: {
|
|
127
127
|
js: [
|
|
128
|
-
'import { createRequire as __orchaCreateRequire } from "
|
|
128
|
+
'import { createRequire as __orchaCreateRequire } from "module";',
|
|
129
129
|
"const require = __orchaCreateRequire(import.meta.url);"
|
|
130
130
|
].join("\n")
|
|
131
131
|
}
|
|
@@ -147,8 +147,8 @@ function allCompiledAgents(agents) {
|
|
|
147
147
|
]);
|
|
148
148
|
}
|
|
149
149
|
function createProviderRuntimeSource(providerNames) {
|
|
150
|
-
const providersDirectory = (0,
|
|
151
|
-
(0,
|
|
150
|
+
const providersDirectory = (0, import_path.resolve)(
|
|
151
|
+
(0, import_path.dirname)((0, import_url.fileURLToPath)(__orchaImportMetaUrl)),
|
|
152
152
|
"../providers"
|
|
153
153
|
);
|
|
154
154
|
const imports = [];
|
|
@@ -161,7 +161,7 @@ function createProviderRuntimeSource(providerNames) {
|
|
|
161
161
|
const localName = `provider${index}`;
|
|
162
162
|
imports.push(
|
|
163
163
|
`import { ${descriptor.exportName} as ${localName} } from ${JSON.stringify(
|
|
164
|
-
(0,
|
|
164
|
+
(0, import_path.resolve)(providersDirectory, descriptor.moduleFile)
|
|
165
165
|
)};`
|
|
166
166
|
);
|
|
167
167
|
entries.push(`${JSON.stringify(name)}: ${localName}`);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/compiler/build-project.ts"],
|
|
4
|
-
"sourcesContent": ["import { existsSync } from \"
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,
|
|
4
|
+
"sourcesContent": ["import { existsSync } from \"fs\";\nimport { mkdir, rm, writeFile } from \"fs/promises\";\nimport { dirname, resolve } from \"path\";\nimport { fileURLToPath, pathToFileURL } from \"url\";\nimport { build as bundleEntry } from \"esbuild\";\nimport { orcha } from \"../orcha.js\";\nimport {\n builtInProviderCatalog,\n isBuiltInProvider,\n} from \"../providers/catalog.js\";\nimport type {\n CompiledAgentManifest,\n CompiledBundle,\n} from \"../types.js\";\n\nexport interface BuildProjectOptions {\n projectRoot?: string;\n}\n\nexport async function buildProject(\n options: BuildProjectOptions = {},\n): Promise<string> {\n const projectRoot = resolve(options.projectRoot ?? process.cwd());\n const registryPath = resolve(projectRoot, \"orcha/index.ts\");\n if (!existsSync(registryPath)) {\n throw new Error('Missing \"orcha/index.ts\". Run \"orcha init\" first.');\n }\n\n const temporaryDirectory = resolve(projectRoot, \".orcha/.build\");\n const registryBundlePath = resolve(temporaryDirectory, \"registry.mjs\");\n const productionEntryPath = resolve(\n temporaryDirectory,\n \"production-entry.mjs\",\n );\n const outputPath = resolve(projectRoot, \".orcha/dist/bundle.js\");\n await mkdir(temporaryDirectory, { recursive: true });\n await mkdir(dirname(outputPath), { recursive: true });\n\n try {\n await bundleEntry({\n entryPoints: [registryPath],\n outfile: registryBundlePath,\n bundle: true,\n format: \"esm\",\n platform: \"node\",\n target: \"node18\",\n packages: \"external\",\n logLevel: \"silent\",\n });\n\n const previousCompiling = process.env.ORCHA_COMPILING;\n const previousProjectRoot = process.env.ORCHA_PROJECT_ROOT;\n process.env.ORCHA_COMPILING = \"1\";\n process.env.ORCHA_PROJECT_ROOT = projectRoot;\n try {\n await import(\n `${pathToFileURL(registryBundlePath).href}?time=${Date.now()}`\n );\n } finally {\n if (previousCompiling === undefined) {\n delete process.env.ORCHA_COMPILING;\n } else {\n process.env.ORCHA_COMPILING = previousCompiling;\n }\n if (previousProjectRoot === undefined) {\n delete process.env.ORCHA_PROJECT_ROOT;\n } else {\n process.env.ORCHA_PROJECT_ROOT = previousProjectRoot;\n }\n }\n const compiledBundle = orcha.getCompiledBundle();\n const runtimeFactoryPath = resolve(\n dirname(fileURLToPath(import.meta.url)),\n \"../runtime/create-orcha.js\",\n ).replaceAll(\"\\\\\", \"/\");\n const providerDispatcherPath = resolve(\n dirname(fileURLToPath(import.meta.url)),\n \"../providers/dispatcher.js\",\n ).replaceAll(\"\\\\\", \"/\");\n const includedProviders = [\n ...new Set(\n allCompiledAgents(compiledBundle.agents).flatMap(\n (agent) => [\n agent.provider,\n ...Object.values(agent.evaluations ?? {})\n .filter((evaluation) => evaluation.enabled !== false)\n .map((evaluation) => evaluation.provider),\n ],\n ),\n ),\n ];\n const providerRuntimeSource =\n createProviderRuntimeSource(includedProviders);\n const needsNodeRequire =\n compiledBundle.actionRuntime === \"sandbox\" ||\n includedProviders.includes(\"vertexai\") ||\n includedProviders.includes(\"bedrock\");\n\n await writeFile(\n productionEntryPath,\n [\n `import { createOrcha } from ${JSON.stringify(runtimeFactoryPath)};`,\n `import { createProviderResponseGenerator } from ${JSON.stringify(providerDispatcherPath)};`,\n providerRuntimeSource,\n `const compiledBundle = ${JSON.stringify(compiledBundle)};`,\n \"const generateProviderResponse = createProviderResponseGenerator(includedProviders);\",\n \"export const orcha = createOrcha(() => compiledBundle, generateProviderResponse);\",\n \"export default orcha;\",\n \"\",\n ].join(\"\\n\"),\n \"utf8\",\n );\n await bundleEntry({\n entryPoints: [productionEntryPath],\n outfile: outputPath,\n bundle: true,\n format: \"esm\",\n platform: \"node\",\n target: \"node18\",\n minify: true,\n legalComments: \"none\",\n define: {\n \"process.env.ORCHA_INCLUDE_SANDBOX\": JSON.stringify(\n compiledBundle.actionRuntime === \"sandbox\" ? \"1\" : \"0\",\n ),\n },\n ...(needsNodeRequire\n ? {\n banner: {\n js: [\n 'import { createRequire as __orchaCreateRequire } from \"module\";',\n \"const require = __orchaCreateRequire(import.meta.url);\",\n ].join(\"\\n\"),\n },\n }\n : {}),\n logLevel: \"silent\",\n });\n\n return outputPath;\n } finally {\n await rm(temporaryDirectory, {\n recursive: true,\n force: true,\n });\n }\n}\n\nfunction allCompiledAgents(\n agents: CompiledBundle[\"agents\"],\n): CompiledAgentManifest[] {\n return Object.values(agents).flatMap((agent) => [\n agent,\n ...Object.values(agent.subagents ?? {}),\n ]);\n}\n\nfunction createProviderRuntimeSource(providerNames: string[]): string {\n const providersDirectory = resolve(\n dirname(fileURLToPath(import.meta.url)),\n \"../providers\",\n );\n const imports: string[] = [];\n const entries: string[] = [];\n\n for (const [index, name] of providerNames.entries()) {\n if (!isBuiltInProvider(name)) {\n throw new Error(`Provider \"${name}\" is not built in.`);\n }\n const descriptor = builtInProviderCatalog[name];\n const localName = `provider${index}`;\n imports.push(\n `import { ${descriptor.exportName} as ${localName} } from ${JSON.stringify(\n resolve(providersDirectory, descriptor.moduleFile),\n )};`,\n );\n entries.push(`${JSON.stringify(name)}: ${localName}`);\n }\n\n const contents = [\n ...imports,\n `const includedProviders = { ${entries.join(\", \")} };`,\n \"\",\n ].join(\"\\n\");\n\n return contents;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["bundleEntry"]
|
|
7
7
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict"; const __orchaImportMetaUrl = require("
|
|
1
|
+
"use strict"; const __orchaImportMetaUrl = require("url").pathToFileURL(__filename).href;
|
|
2
2
|
"use strict";
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -23,9 +23,9 @@ __export(compile_exports, {
|
|
|
23
23
|
serializeBundle: () => serializeBundle
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(compile_exports);
|
|
26
|
-
var
|
|
27
|
-
var
|
|
28
|
-
var
|
|
26
|
+
var import_crypto = require("crypto");
|
|
27
|
+
var import_fs = require("fs");
|
|
28
|
+
var import_path = require("path");
|
|
29
29
|
var import_esbuild = require("esbuild");
|
|
30
30
|
var import_catalog = require("../providers/catalog.js");
|
|
31
31
|
function compileRegistry(registrations, registryRoot, actionRuntime = "native") {
|
|
@@ -110,12 +110,12 @@ function normalizeAgentRegistration(key, registration) {
|
|
|
110
110
|
}
|
|
111
111
|
function compileAgent(key, registeredPath, registryRoot, actionRuntime) {
|
|
112
112
|
const name = key;
|
|
113
|
-
const sourceDirectory = (0,
|
|
114
|
-
const configPath = (0,
|
|
113
|
+
const sourceDirectory = (0, import_path.resolve)(registryRoot, registeredPath);
|
|
114
|
+
const configPath = (0, import_path.resolve)(sourceDirectory, "index.json");
|
|
115
115
|
let configuration;
|
|
116
116
|
try {
|
|
117
117
|
configuration = JSON.parse(
|
|
118
|
-
(0,
|
|
118
|
+
(0, import_fs.readFileSync)(configPath, "utf8")
|
|
119
119
|
);
|
|
120
120
|
} catch (error) {
|
|
121
121
|
throw new Error(
|
|
@@ -170,10 +170,10 @@ function compileAgent(key, registeredPath, registryRoot, actionRuntime) {
|
|
|
170
170
|
`Agent "${name}" must configure outputSchema when outputType is "json".`
|
|
171
171
|
);
|
|
172
172
|
}
|
|
173
|
-
const instructionsPath = (0,
|
|
173
|
+
const instructionsPath = (0, import_path.resolve)(sourceDirectory, "instructions.md");
|
|
174
174
|
let systemPrompt;
|
|
175
175
|
try {
|
|
176
|
-
systemPrompt = (0,
|
|
176
|
+
systemPrompt = (0, import_fs.readFileSync)(instructionsPath, "utf8").trim();
|
|
177
177
|
} catch (error) {
|
|
178
178
|
throw new Error(
|
|
179
179
|
`Agent "${name}" is missing required instructions.md at ${instructionsPath}.`,
|
|
@@ -203,16 +203,16 @@ function compileAgent(key, registeredPath, registryRoot, actionRuntime) {
|
|
|
203
203
|
});
|
|
204
204
|
}
|
|
205
205
|
function compileActions(agentName, sourceDirectory, actionRuntime) {
|
|
206
|
-
const actionsDirectory = (0,
|
|
207
|
-
if (!(0,
|
|
206
|
+
const actionsDirectory = (0, import_path.resolve)(sourceDirectory, "actions");
|
|
207
|
+
if (!(0, import_fs.existsSync)(actionsDirectory)) {
|
|
208
208
|
return {};
|
|
209
209
|
}
|
|
210
210
|
const actions = {};
|
|
211
|
-
for (const entry of (0,
|
|
211
|
+
for (const entry of (0, import_fs.readdirSync)(actionsDirectory, { withFileTypes: true })) {
|
|
212
212
|
if (!entry.isDirectory()) {
|
|
213
213
|
continue;
|
|
214
214
|
}
|
|
215
|
-
const configurationPath = (0,
|
|
215
|
+
const configurationPath = (0, import_path.resolve)(
|
|
216
216
|
actionsDirectory,
|
|
217
217
|
entry.name,
|
|
218
218
|
"index.json"
|
|
@@ -220,7 +220,7 @@ function compileActions(agentName, sourceDirectory, actionRuntime) {
|
|
|
220
220
|
let configuration;
|
|
221
221
|
try {
|
|
222
222
|
configuration = JSON.parse(
|
|
223
|
-
(0,
|
|
223
|
+
(0, import_fs.readFileSync)(configurationPath, "utf8")
|
|
224
224
|
);
|
|
225
225
|
} catch (error) {
|
|
226
226
|
throw new Error(
|
|
@@ -318,19 +318,19 @@ function compileActions(agentName, sourceDirectory, actionRuntime) {
|
|
|
318
318
|
return Object.freeze(actions);
|
|
319
319
|
}
|
|
320
320
|
function compileSkills(agentName, sourceDirectory) {
|
|
321
|
-
const skillsDirectory = (0,
|
|
322
|
-
if (!(0,
|
|
321
|
+
const skillsDirectory = (0, import_path.resolve)(sourceDirectory, "skills");
|
|
322
|
+
if (!(0, import_fs.existsSync)(skillsDirectory)) {
|
|
323
323
|
return {};
|
|
324
324
|
}
|
|
325
325
|
rejectLegacyRegistry(agentName, skillsDirectory, "skills");
|
|
326
326
|
const skills = {};
|
|
327
327
|
for (const entry of discoverDirectories(skillsDirectory)) {
|
|
328
|
-
const skillDirectory = (0,
|
|
329
|
-
const configurationPath = (0,
|
|
328
|
+
const skillDirectory = (0, import_path.resolve)(skillsDirectory, entry);
|
|
329
|
+
const configurationPath = (0, import_path.resolve)(skillDirectory, "index.json");
|
|
330
330
|
let configuration;
|
|
331
331
|
try {
|
|
332
332
|
configuration = JSON.parse(
|
|
333
|
-
(0,
|
|
333
|
+
(0, import_fs.readFileSync)(configurationPath, "utf8")
|
|
334
334
|
);
|
|
335
335
|
} catch (error) {
|
|
336
336
|
throw new Error(
|
|
@@ -343,10 +343,10 @@ function compileSkills(agentName, sourceDirectory) {
|
|
|
343
343
|
continue;
|
|
344
344
|
}
|
|
345
345
|
validateSkillConfiguration(agentName, entry, configuration);
|
|
346
|
-
const instructionsPath = (0,
|
|
346
|
+
const instructionsPath = (0, import_path.resolve)(skillDirectory, "instructions.md");
|
|
347
347
|
let instructions;
|
|
348
348
|
try {
|
|
349
|
-
instructions = (0,
|
|
349
|
+
instructions = (0, import_fs.readFileSync)(instructionsPath, "utf8").trim();
|
|
350
350
|
} catch (error) {
|
|
351
351
|
throw new Error(
|
|
352
352
|
`Skill "${agentName}/${entry}" is missing instructions.md at ${instructionsPath}.`,
|
|
@@ -372,19 +372,19 @@ function compileSkills(agentName, sourceDirectory) {
|
|
|
372
372
|
return Object.freeze(skills);
|
|
373
373
|
}
|
|
374
374
|
function compileEvaluations(agentName, sourceDirectory) {
|
|
375
|
-
const evaluationsDirectory = (0,
|
|
376
|
-
if (!(0,
|
|
375
|
+
const evaluationsDirectory = (0, import_path.resolve)(sourceDirectory, "evaluations");
|
|
376
|
+
if (!(0, import_fs.existsSync)(evaluationsDirectory)) {
|
|
377
377
|
return {};
|
|
378
378
|
}
|
|
379
379
|
rejectLegacyRegistry(agentName, evaluationsDirectory, "evaluations");
|
|
380
380
|
const evaluations = {};
|
|
381
381
|
for (const entry of discoverDirectories(evaluationsDirectory)) {
|
|
382
|
-
const evaluationDirectory = (0,
|
|
383
|
-
const configurationPath = (0,
|
|
382
|
+
const evaluationDirectory = (0, import_path.resolve)(evaluationsDirectory, entry);
|
|
383
|
+
const configurationPath = (0, import_path.resolve)(evaluationDirectory, "index.json");
|
|
384
384
|
let configuration;
|
|
385
385
|
try {
|
|
386
386
|
configuration = JSON.parse(
|
|
387
|
-
(0,
|
|
387
|
+
(0, import_fs.readFileSync)(configurationPath, "utf8")
|
|
388
388
|
);
|
|
389
389
|
} catch (error) {
|
|
390
390
|
throw new Error(
|
|
@@ -418,10 +418,10 @@ function compileEvaluations(agentName, sourceDirectory) {
|
|
|
418
418
|
return Object.freeze(evaluations);
|
|
419
419
|
}
|
|
420
420
|
function discoverDirectories(directory) {
|
|
421
|
-
return (0,
|
|
421
|
+
return (0, import_fs.readdirSync)(directory, { withFileTypes: true }).filter((entry) => entry.isDirectory() && !entry.name.startsWith(".")).map((entry) => entry.name).sort();
|
|
422
422
|
}
|
|
423
423
|
function rejectLegacyRegistry(agentName, directory, collection) {
|
|
424
|
-
if ((0,
|
|
424
|
+
if ((0, import_fs.existsSync)((0, import_path.resolve)(directory, "index.js"))) {
|
|
425
425
|
throw new Error(
|
|
426
426
|
`Agent "${agentName}" ${collection}/index.js is no longer supported. Remove the registry; folders are discovered automatically and can be disabled with "enabled": false.`
|
|
427
427
|
);
|
|
@@ -499,8 +499,8 @@ function validateEvaluationConfiguration(agentName, registrationName, configurat
|
|
|
499
499
|
}
|
|
500
500
|
}
|
|
501
501
|
function compileLocalAction(agentName, directoryName, actionsDirectory, actionRuntime) {
|
|
502
|
-
const entryPath = (0,
|
|
503
|
-
if (!(0,
|
|
502
|
+
const entryPath = (0, import_path.resolve)(actionsDirectory, directoryName, "index.js");
|
|
503
|
+
if (!(0, import_fs.existsSync)(entryPath)) {
|
|
504
504
|
throw new Error(
|
|
505
505
|
`Local action "${agentName}/${directoryName}" requires index.js.`
|
|
506
506
|
);
|
|
@@ -531,7 +531,7 @@ function compileLocalAction(agentName, directoryName, actionsDirectory, actionRu
|
|
|
531
531
|
}
|
|
532
532
|
return {
|
|
533
533
|
source: output,
|
|
534
|
-
sourceHash: (0,
|
|
534
|
+
sourceHash: (0, import_crypto.createHash)("sha256").update(output).digest("hex")
|
|
535
535
|
};
|
|
536
536
|
}
|
|
537
537
|
function serializeBundle(bundle) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/compiler/compile.ts"],
|
|
4
|
-
"sourcesContent": ["import { createHash } from \"node:crypto\";\nimport { existsSync, readFileSync, readdirSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { buildSync } from \"esbuild\";\nimport { isBuiltInProvider } from \"../providers/catalog.js\";\nimport type {\n AgentConfiguration,\n AgentRegistration,\n ActionConfiguration,\n CompiledActionManifest,\n CompiledAgentManifest,\n CompiledBundle,\n CompiledEvaluationManifest,\n CompiledSkillManifest,\n EvaluationConfiguration,\n SkillConfiguration,\n} from \"../types.js\";\n\nexport function compileRegistry(\n registrations: Record<string, AgentRegistration>,\n registryRoot: string,\n actionRuntime: \"native\" | \"sandbox\" = \"native\",\n): CompiledBundle {\n if (\n !registrations ||\n typeof registrations !== \"object\" ||\n Array.isArray(registrations)\n ) {\n throw new TypeError(\n 'orcha.init() requires an \"agents\" object of registered folder paths.',\n );\n }\n\n const agents: Record<string, CompiledAgentManifest> = {};\n\n for (const [key, registration] of Object.entries(registrations)) {\n if (!key.trim()) {\n throw new Error(\"Registered agent names cannot be empty.\");\n }\n const normalized = normalizeAgentRegistration(key, registration);\n const subagents: Record<string, CompiledAgentManifest> = {};\n for (const [subagentKey, registeredPath] of Object.entries(\n normalized.subagents,\n )) {\n if (!subagentKey.trim()) {\n throw new Error(`Agent \"${key}\" has an empty subagent name.`);\n }\n subagents[subagentKey] = compileAgent(\n subagentKey,\n registeredPath,\n registryRoot,\n actionRuntime,\n );\n }\n const parent = compileAgent(\n key,\n normalized.path,\n registryRoot,\n actionRuntime,\n );\n agents[key] = Object.freeze({\n ...parent,\n subagentPolicy:\n Object.keys(subagents).length > 0\n ? Object.freeze({\n ...parent.subagentPolicy,\n maxPerRun: parent.subagentPolicy?.maxPerRun ?? 10,\n })\n : parent.subagentPolicy,\n subagents: Object.freeze(subagents),\n });\n }\n\n if (Object.keys(agents).length === 0) {\n throw new Error(\"At least one agent must be registered.\");\n }\n\n return Object.freeze({\n schemaVersion: 1,\n actionRuntime,\n agents: Object.freeze(agents),\n });\n}\n\nfunction normalizeAgentRegistration(\n key: string,\n registration: AgentRegistration,\n): { path: string; subagents: Record<string, string> } {\n if (typeof registration === \"string\") {\n if (!registration.trim()) {\n throw new Error(`Agent \"${key}\" must register a folder path.`);\n }\n return { path: registration, subagents: {} };\n }\n if (!registration || typeof registration !== \"object\") {\n throw new Error(`Agent \"${key}\" must register a folder path.`);\n }\n if (typeof registration.path !== \"string\" || !registration.path.trim()) {\n throw new Error(`Agent \"${key}\" must register a folder path.`);\n }\n if (\n registration.subagents !== undefined &&\n (!registration.subagents ||\n typeof registration.subagents !== \"object\" ||\n Array.isArray(registration.subagents))\n ) {\n throw new Error(`Agent \"${key}\" subagents must be an object of folder paths.`);\n }\n for (const [subagentKey, registeredPath] of Object.entries(\n registration.subagents ?? {},\n )) {\n if (typeof registeredPath !== \"string\" || !registeredPath.trim()) {\n throw new Error(\n `Subagent \"${key}/${subagentKey}\" must register a folder path.`,\n );\n }\n }\n return {\n path: registration.path,\n subagents: registration.subagents ?? {},\n };\n}\n\nfunction compileAgent(\n key: string,\n registeredPath: string,\n registryRoot: string,\n actionRuntime: \"native\" | \"sandbox\",\n): CompiledAgentManifest {\n const name = key;\n\n const sourceDirectory = resolve(registryRoot, registeredPath);\n const configPath = resolve(sourceDirectory, \"index.json\");\n let configuration: AgentConfiguration;\n try {\n configuration = JSON.parse(\n readFileSync(configPath, \"utf8\"),\n ) as AgentConfiguration;\n } catch (error) {\n throw new Error(\n `Agent \"${name}\" is missing a valid index.json at ${configPath}.`,\n { cause: error },\n );\n }\n if (typeof configuration.name !== \"string\" || !configuration.name.trim()) {\n throw new Error(`Agent \"${name}\" requires a name.`);\n }\n if (\n configuration.description !== undefined &&\n (typeof configuration.description !== \"string\" ||\n !configuration.description.trim())\n ) {\n throw new Error(\n `Agent \"${name}\" description must be a non-empty string when provided.`,\n );\n }\n if (!isBuiltInProvider(configuration.provider)) {\n throw new Error(\n `Agent \"${name}\" uses unsupported provider \"${configuration.provider}\".`,\n );\n }\n if (!configuration.model?.trim()) {\n throw new Error(`Agent \"${name}\" must configure a model.`);\n }\n validateNumber(name, \"maxTokens\", configuration.maxTokens, {\n integer: true,\n minimum: 1,\n });\n if (\n configuration.subagents !== undefined &&\n (!configuration.subagents ||\n typeof configuration.subagents !== \"object\" ||\n Array.isArray(configuration.subagents))\n ) {\n throw new Error(`Agent \"${name}\" subagents must be an object.`);\n }\n validateNumber(\n name,\n \"subagents.maxPerRun\",\n configuration.subagents?.maxPerRun,\n { integer: true, minimum: 1 },\n );\n if (\n configuration.outputType &&\n ![\"text\", \"json\", \"image\", \"audio\"].includes(configuration.outputType)\n ) {\n throw new Error(`Agent \"${name}\" has an invalid outputType.`);\n }\n if (\n configuration.reasoningLevel !== undefined &&\n (typeof configuration.reasoningLevel !== \"string\" ||\n !configuration.reasoningLevel.trim())\n ) {\n throw new Error(\n `Agent \"${name}\" reasoningLevel must be a non-empty string.`,\n );\n }\n if (![\"text\", \"json\"].includes(configuration.outputType ?? \"text\")) {\n throw new Error(\n `Agent \"${name}\" outputType \"${configuration.outputType}\" is not implemented yet.`,\n );\n }\n if (\n configuration.outputType === \"json\" &&\n (!configuration.outputSchema ||\n typeof configuration.outputSchema !== \"object\")\n ) {\n throw new Error(\n `Agent \"${name}\" must configure outputSchema when outputType is \"json\".`,\n );\n }\n\n const instructionsPath = resolve(sourceDirectory, \"instructions.md\");\n let systemPrompt: string;\n try {\n systemPrompt = readFileSync(instructionsPath, \"utf8\").trim();\n } catch (error) {\n throw new Error(\n `Agent \"${name}\" is missing required instructions.md at ${instructionsPath}.`,\n { cause: error },\n );\n }\n if (!systemPrompt) {\n throw new Error(`Agent \"${name}\" instructions.md cannot be empty.`);\n }\n\n return Object.freeze({\n key,\n name: configuration.name.trim(),\n description: configuration.description?.trim(),\n provider: configuration.provider,\n model: configuration.model,\n systemPrompt,\n region: configuration.region,\n maxTokens: configuration.maxTokens,\n reasoningLevel: configuration.reasoningLevel,\n outputType: configuration.outputType ?? \"text\",\n outputSchema: configuration.outputSchema,\n actions: compileActions(name, sourceDirectory, actionRuntime),\n skills: compileSkills(name, sourceDirectory),\n evaluations: compileEvaluations(name, sourceDirectory),\n subagentPolicy: configuration.subagents\n ? Object.freeze({ ...configuration.subagents })\n : undefined,\n subagents: Object.freeze({}),\n });\n}\n\nfunction compileActions(\n agentName: string,\n sourceDirectory: string,\n actionRuntime: \"native\" | \"sandbox\",\n): Record<string, CompiledActionManifest> {\n const actionsDirectory = resolve(sourceDirectory, \"actions\");\n if (!existsSync(actionsDirectory)) {\n return {};\n }\n\n const actions: Record<string, CompiledActionManifest> = {};\n for (const entry of readdirSync(actionsDirectory, { withFileTypes: true })) {\n if (!entry.isDirectory()) {\n continue;\n }\n\n const configurationPath = resolve(\n actionsDirectory,\n entry.name,\n \"index.json\",\n );\n let configuration: ActionConfiguration;\n try {\n configuration = JSON.parse(\n readFileSync(configurationPath, \"utf8\"),\n ) as ActionConfiguration;\n } catch (error) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" is missing a valid index.json.`,\n { cause: error },\n );\n }\n validateEnabled(\n `Action \"${agentName}/${entry.name}\"`,\n configuration?.enabled,\n );\n if (configuration?.enabled === false) {\n continue;\n }\n\n if (!configuration.name?.trim() || !configuration.description?.trim()) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" requires name and description.`,\n );\n }\n if (!/^[a-zA-Z0-9_-]{1,64}$/.test(configuration.name)) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" has an invalid model-facing name.`,\n );\n }\n if (\n [\n \"load_skill\",\n \"run_agent\",\n \"resume_agent\",\n \"inspect_agent\",\n ].includes(configuration.name)\n ) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" uses reserved name \"${configuration.name}\".`,\n );\n }\n const execution = configuration.execution ?? \"local\";\n if (![\"client\", \"local\"].includes(execution)) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" has invalid execution \"${configuration.execution}\".`,\n );\n }\n if (\n !configuration.parameters ||\n typeof configuration.parameters !== \"object\" ||\n Array.isArray(configuration.parameters)\n ) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" requires a parameters JSON Schema.`,\n );\n }\n if (\n configuration.outputSchema !== undefined &&\n (typeof configuration.outputSchema !== \"object\" ||\n configuration.outputSchema === null ||\n Array.isArray(configuration.outputSchema))\n ) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" has an invalid outputSchema.`,\n );\n }\n validateNumber(\n `${agentName}/${entry.name}`,\n \"timeoutMs\",\n configuration.timeoutMs,\n { integer: true, minimum: 1, maximum: 120_000 },\n );\n if (\n configuration.permissions?.env !== undefined &&\n !Array.isArray(configuration.permissions.env)\n ) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" permissions.env must be an array.`,\n );\n }\n if (\n configuration.permissions?.network !== undefined &&\n !Array.isArray(configuration.permissions.network)\n ) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" permissions.network must be an array.`,\n );\n }\n for (const permission of [\n ...(configuration.permissions?.env ?? []),\n ...(configuration.permissions?.network ?? []),\n ]) {\n if (typeof permission !== \"string\" || !permission.trim()) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" has an invalid permission.`,\n );\n }\n }\n if (actions[configuration.name]) {\n throw new Error(\n `Agent \"${agentName}\" has duplicate action name \"${configuration.name}\".`,\n );\n }\n\n const compiledSource =\n execution === \"local\"\n ? compileLocalAction(\n agentName,\n entry.name,\n actionsDirectory,\n actionRuntime,\n )\n : undefined;\n actions[configuration.name] = Object.freeze({\n ...configuration,\n execution,\n directoryName: entry.name,\n ...compiledSource,\n });\n }\n\n return Object.freeze(actions);\n}\n\nfunction compileSkills(\n agentName: string,\n sourceDirectory: string,\n): Record<string, CompiledSkillManifest> {\n const skillsDirectory = resolve(sourceDirectory, \"skills\");\n if (!existsSync(skillsDirectory)) {\n return {};\n }\n rejectLegacyRegistry(agentName, skillsDirectory, \"skills\");\n\n const skills: Record<string, CompiledSkillManifest> = {};\n\n for (const entry of discoverDirectories(skillsDirectory)) {\n const skillDirectory = resolve(skillsDirectory, entry);\n const configurationPath = resolve(skillDirectory, \"index.json\");\n let configuration: SkillConfiguration;\n try {\n configuration = JSON.parse(\n readFileSync(configurationPath, \"utf8\"),\n ) as SkillConfiguration;\n } catch (error) {\n throw new Error(\n `Skill \"${agentName}/${entry}\" is missing a valid index.json at ${configurationPath}.`,\n { cause: error },\n );\n }\n validateEnabled(`Skill \"${agentName}/${entry}\"`, configuration?.enabled);\n if (configuration?.enabled === false) {\n continue;\n }\n validateSkillConfiguration(agentName, entry, configuration);\n\n const instructionsPath = resolve(skillDirectory, \"instructions.md\");\n let instructions: string;\n try {\n instructions = readFileSync(instructionsPath, \"utf8\").trim();\n } catch (error) {\n throw new Error(\n `Skill \"${agentName}/${entry}\" is missing instructions.md at ${instructionsPath}.`,\n { cause: error },\n );\n }\n if (!instructions) {\n throw new Error(\n `Skill \"${agentName}/${entry}\" instructions.md cannot be empty.`,\n );\n }\n if (skills[configuration.name]) {\n throw new Error(\n `Agent \"${agentName}\" has duplicate skill name \"${configuration.name}\".`,\n );\n }\n\n skills[configuration.name] = Object.freeze({\n ...configuration,\n directoryName: entry,\n instructions,\n });\n }\n\n return Object.freeze(skills);\n}\n\nfunction compileEvaluations(\n agentName: string,\n sourceDirectory: string,\n): Record<string, CompiledEvaluationManifest> {\n const evaluationsDirectory = resolve(sourceDirectory, \"evaluations\");\n if (!existsSync(evaluationsDirectory)) {\n return {};\n }\n rejectLegacyRegistry(agentName, evaluationsDirectory, \"evaluations\");\n\n const evaluations: Record<string, CompiledEvaluationManifest> = {};\n\n for (const entry of discoverDirectories(evaluationsDirectory)) {\n const evaluationDirectory = resolve(evaluationsDirectory, entry);\n const configurationPath = resolve(evaluationDirectory, \"index.json\");\n let configuration: EvaluationConfiguration;\n try {\n configuration = JSON.parse(\n readFileSync(configurationPath, \"utf8\"),\n ) as EvaluationConfiguration;\n } catch (error) {\n throw new Error(\n `Evaluation \"${agentName}/${entry}\" is missing a valid index.json at ${configurationPath}.`,\n { cause: error },\n );\n }\n validateEnabled(\n `Evaluation \"${agentName}/${entry}\"`,\n configuration?.enabled,\n );\n if (configuration?.enabled === false) {\n continue;\n }\n validateEvaluationConfiguration(agentName, entry, configuration);\n if (evaluations[configuration.name]) {\n throw new Error(\n `Agent \"${agentName}\" has duplicate evaluation name \"${configuration.name}\".`,\n );\n }\n\n evaluations[configuration.name] = Object.freeze({\n ...configuration,\n enabled: true,\n provider: configuration.provider as CompiledEvaluationManifest[\"provider\"],\n directoryName: entry,\n metrics: Object.freeze(\n configuration.metrics.map((metric) => Object.freeze({ ...metric })),\n ),\n });\n }\n\n return Object.freeze(evaluations);\n}\n\nfunction discoverDirectories(directory: string): string[] {\n return readdirSync(directory, { withFileTypes: true })\n .filter((entry) => entry.isDirectory() && !entry.name.startsWith(\".\"))\n .map((entry) => entry.name)\n .sort();\n}\n\nfunction rejectLegacyRegistry(\n agentName: string,\n directory: string,\n collection: \"skills\" | \"evaluations\",\n): void {\n if (existsSync(resolve(directory, \"index.js\"))) {\n throw new Error(\n `Agent \"${agentName}\" ${collection}/index.js is no longer supported. Remove the registry; folders are discovered automatically and can be disabled with \"enabled\": false.`,\n );\n }\n}\n\nfunction validateEnabled(label: string, enabled: unknown): void {\n if (enabled !== undefined && typeof enabled !== \"boolean\") {\n throw new Error(`${label} enabled must be a boolean.`);\n }\n}\n\nfunction validateSkillConfiguration(\n agentName: string,\n registrationName: string,\n configuration: SkillConfiguration,\n): void {\n if (\n !configuration ||\n typeof configuration !== \"object\" ||\n Array.isArray(configuration) ||\n typeof configuration.name !== \"string\" ||\n !configuration.name.trim() ||\n typeof configuration.description !== \"string\" ||\n !configuration.description.trim()\n ) {\n throw new Error(\n `Skill \"${agentName}/${registrationName}\" requires name and description.`,\n );\n }\n if (!/^[a-zA-Z0-9_-]{1,64}$/.test(configuration.name)) {\n throw new Error(\n `Skill \"${agentName}/${registrationName}\" has an invalid model-facing name.`,\n );\n }\n if (\n configuration.triggers !== undefined &&\n (!Array.isArray(configuration.triggers) ||\n configuration.triggers.length === 0 ||\n configuration.triggers.some(\n (trigger) => typeof trigger !== \"string\" || !trigger.trim(),\n ))\n ) {\n throw new Error(\n `Skill \"${agentName}/${registrationName}\" triggers must be non-empty strings.`,\n );\n }\n}\n\nfunction validateEvaluationConfiguration(\n agentName: string,\n registrationName: string,\n configuration: EvaluationConfiguration,\n): void {\n const label = `Evaluation \"${agentName}/${registrationName}\"`;\n if (\n !configuration ||\n typeof configuration !== \"object\" ||\n Array.isArray(configuration) ||\n typeof configuration.name !== \"string\" ||\n !configuration.name.trim()\n ) {\n throw new Error(`${label} requires a name.`);\n }\n if (!/^[a-zA-Z0-9_-]{1,64}$/.test(configuration.name)) {\n throw new Error(`${label} has an invalid name.`);\n }\n if (\n configuration.description !== undefined &&\n (typeof configuration.description !== \"string\" ||\n !configuration.description.trim())\n ) {\n throw new Error(`${label} description must be a non-empty string.`);\n }\n if (\n configuration.instructions !== undefined &&\n (typeof configuration.instructions !== \"string\" ||\n !configuration.instructions.trim())\n ) {\n throw new Error(`${label} instructions must be a non-empty string.`);\n }\n if (!isBuiltInProvider(configuration.provider)) {\n throw new Error(\n `${label} uses unsupported provider \"${configuration.provider}\".`,\n );\n }\n if (typeof configuration.model !== \"string\" || !configuration.model.trim()) {\n throw new Error(`${label} requires a model.`);\n }\n validateNumber(\n `${agentName}/${registrationName}`,\n \"maxTokens\",\n configuration.maxTokens,\n { integer: true, minimum: 1 },\n );\n if (\n configuration.reasoningLevel !== undefined &&\n (typeof configuration.reasoningLevel !== \"string\" ||\n !configuration.reasoningLevel.trim())\n ) {\n throw new Error(`${label} reasoningLevel must be a non-empty string.`);\n }\n if (\n !Array.isArray(configuration.metrics) ||\n configuration.metrics.length === 0\n ) {\n throw new Error(`${label} requires at least one metric.`);\n }\n const names = new Set<string>();\n for (const metric of configuration.metrics) {\n if (\n !metric ||\n typeof metric !== \"object\" ||\n typeof metric.name !== \"string\" ||\n !/^[a-zA-Z0-9_-]{1,64}$/.test(metric.name) ||\n typeof metric.description !== \"string\" ||\n !metric.description.trim() ||\n typeof metric.threshold !== \"number\" ||\n !Number.isFinite(metric.threshold) ||\n metric.threshold < 0 ||\n metric.threshold > 1\n ) {\n throw new Error(\n `${label} metrics require a valid name, description, and threshold between 0 and 1.`,\n );\n }\n if (names.has(metric.name)) {\n throw new Error(`${label} has duplicate metric \"${metric.name}\".`);\n }\n names.add(metric.name);\n }\n}\n\nfunction compileLocalAction(\n agentName: string,\n directoryName: string,\n actionsDirectory: string,\n actionRuntime: \"native\" | \"sandbox\",\n): { source: string; sourceHash: string } {\n const entryPath = resolve(actionsDirectory, directoryName, \"index.js\");\n if (!existsSync(entryPath)) {\n throw new Error(\n `Local action \"${agentName}/${directoryName}\" requires index.js.`,\n );\n }\n\n let output: string;\n try {\n const result = buildSync({\n entryPoints: [entryPath],\n bundle: true,\n write: false,\n format: \"iife\",\n globalName: \"__orchaActionModule\",\n platform: actionRuntime === \"native\" ? \"node\" : \"neutral\",\n target: \"es2022\",\n logLevel: \"silent\",\n });\n output = result.outputFiles[0]?.text ?? \"\";\n } catch (error) {\n throw new Error(\n `Local action \"${agentName}/${directoryName}\" could not be bundled.`,\n { cause: error },\n );\n }\n if (!output.includes(\"__orchaActionModule\")) {\n throw new Error(\n `Local action \"${agentName}/${directoryName}\" must export a default function.`,\n );\n }\n\n return {\n source: output,\n sourceHash: createHash(\"sha256\").update(output).digest(\"hex\"),\n };\n}\n\nexport function serializeBundle(bundle: CompiledBundle): string {\n return [\n \"// Generated by OrchaJS. Do not edit manually.\",\n `export const bundle = ${JSON.stringify(bundle, null, 2)};`,\n \"export default bundle;\",\n \"\",\n ].join(\"\\n\");\n}\n\nfunction validateNumber(\n agentName: string,\n field: string,\n value: number | undefined,\n constraints: {\n integer?: boolean;\n minimum?: number;\n maximum?: number;\n },\n): void {\n if (value === undefined) {\n return;\n }\n if (\n !Number.isFinite(value) ||\n (constraints.integer && !Number.isInteger(value)) ||\n (constraints.minimum !== undefined && value < constraints.minimum) ||\n (constraints.maximum !== undefined && value > constraints.maximum)\n ) {\n throw new Error(`Agent \"${agentName}\" has an invalid ${field}.`);\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { createHash } from \"crypto\";\nimport { existsSync, readFileSync, readdirSync } from \"fs\";\nimport { resolve } from \"path\";\nimport { buildSync } from \"esbuild\";\nimport { isBuiltInProvider } from \"../providers/catalog.js\";\nimport type {\n AgentConfiguration,\n AgentRegistration,\n ActionConfiguration,\n CompiledActionManifest,\n CompiledAgentManifest,\n CompiledBundle,\n CompiledEvaluationManifest,\n CompiledSkillManifest,\n EvaluationConfiguration,\n SkillConfiguration,\n} from \"../types.js\";\n\nexport function compileRegistry(\n registrations: Record<string, AgentRegistration>,\n registryRoot: string,\n actionRuntime: \"native\" | \"sandbox\" = \"native\",\n): CompiledBundle {\n if (\n !registrations ||\n typeof registrations !== \"object\" ||\n Array.isArray(registrations)\n ) {\n throw new TypeError(\n 'orcha.init() requires an \"agents\" object of registered folder paths.',\n );\n }\n\n const agents: Record<string, CompiledAgentManifest> = {};\n\n for (const [key, registration] of Object.entries(registrations)) {\n if (!key.trim()) {\n throw new Error(\"Registered agent names cannot be empty.\");\n }\n const normalized = normalizeAgentRegistration(key, registration);\n const subagents: Record<string, CompiledAgentManifest> = {};\n for (const [subagentKey, registeredPath] of Object.entries(\n normalized.subagents,\n )) {\n if (!subagentKey.trim()) {\n throw new Error(`Agent \"${key}\" has an empty subagent name.`);\n }\n subagents[subagentKey] = compileAgent(\n subagentKey,\n registeredPath,\n registryRoot,\n actionRuntime,\n );\n }\n const parent = compileAgent(\n key,\n normalized.path,\n registryRoot,\n actionRuntime,\n );\n agents[key] = Object.freeze({\n ...parent,\n subagentPolicy:\n Object.keys(subagents).length > 0\n ? Object.freeze({\n ...parent.subagentPolicy,\n maxPerRun: parent.subagentPolicy?.maxPerRun ?? 10,\n })\n : parent.subagentPolicy,\n subagents: Object.freeze(subagents),\n });\n }\n\n if (Object.keys(agents).length === 0) {\n throw new Error(\"At least one agent must be registered.\");\n }\n\n return Object.freeze({\n schemaVersion: 1,\n actionRuntime,\n agents: Object.freeze(agents),\n });\n}\n\nfunction normalizeAgentRegistration(\n key: string,\n registration: AgentRegistration,\n): { path: string; subagents: Record<string, string> } {\n if (typeof registration === \"string\") {\n if (!registration.trim()) {\n throw new Error(`Agent \"${key}\" must register a folder path.`);\n }\n return { path: registration, subagents: {} };\n }\n if (!registration || typeof registration !== \"object\") {\n throw new Error(`Agent \"${key}\" must register a folder path.`);\n }\n if (typeof registration.path !== \"string\" || !registration.path.trim()) {\n throw new Error(`Agent \"${key}\" must register a folder path.`);\n }\n if (\n registration.subagents !== undefined &&\n (!registration.subagents ||\n typeof registration.subagents !== \"object\" ||\n Array.isArray(registration.subagents))\n ) {\n throw new Error(`Agent \"${key}\" subagents must be an object of folder paths.`);\n }\n for (const [subagentKey, registeredPath] of Object.entries(\n registration.subagents ?? {},\n )) {\n if (typeof registeredPath !== \"string\" || !registeredPath.trim()) {\n throw new Error(\n `Subagent \"${key}/${subagentKey}\" must register a folder path.`,\n );\n }\n }\n return {\n path: registration.path,\n subagents: registration.subagents ?? {},\n };\n}\n\nfunction compileAgent(\n key: string,\n registeredPath: string,\n registryRoot: string,\n actionRuntime: \"native\" | \"sandbox\",\n): CompiledAgentManifest {\n const name = key;\n\n const sourceDirectory = resolve(registryRoot, registeredPath);\n const configPath = resolve(sourceDirectory, \"index.json\");\n let configuration: AgentConfiguration;\n try {\n configuration = JSON.parse(\n readFileSync(configPath, \"utf8\"),\n ) as AgentConfiguration;\n } catch (error) {\n throw new Error(\n `Agent \"${name}\" is missing a valid index.json at ${configPath}.`,\n { cause: error },\n );\n }\n if (typeof configuration.name !== \"string\" || !configuration.name.trim()) {\n throw new Error(`Agent \"${name}\" requires a name.`);\n }\n if (\n configuration.description !== undefined &&\n (typeof configuration.description !== \"string\" ||\n !configuration.description.trim())\n ) {\n throw new Error(\n `Agent \"${name}\" description must be a non-empty string when provided.`,\n );\n }\n if (!isBuiltInProvider(configuration.provider)) {\n throw new Error(\n `Agent \"${name}\" uses unsupported provider \"${configuration.provider}\".`,\n );\n }\n if (!configuration.model?.trim()) {\n throw new Error(`Agent \"${name}\" must configure a model.`);\n }\n validateNumber(name, \"maxTokens\", configuration.maxTokens, {\n integer: true,\n minimum: 1,\n });\n if (\n configuration.subagents !== undefined &&\n (!configuration.subagents ||\n typeof configuration.subagents !== \"object\" ||\n Array.isArray(configuration.subagents))\n ) {\n throw new Error(`Agent \"${name}\" subagents must be an object.`);\n }\n validateNumber(\n name,\n \"subagents.maxPerRun\",\n configuration.subagents?.maxPerRun,\n { integer: true, minimum: 1 },\n );\n if (\n configuration.outputType &&\n ![\"text\", \"json\", \"image\", \"audio\"].includes(configuration.outputType)\n ) {\n throw new Error(`Agent \"${name}\" has an invalid outputType.`);\n }\n if (\n configuration.reasoningLevel !== undefined &&\n (typeof configuration.reasoningLevel !== \"string\" ||\n !configuration.reasoningLevel.trim())\n ) {\n throw new Error(\n `Agent \"${name}\" reasoningLevel must be a non-empty string.`,\n );\n }\n if (![\"text\", \"json\"].includes(configuration.outputType ?? \"text\")) {\n throw new Error(\n `Agent \"${name}\" outputType \"${configuration.outputType}\" is not implemented yet.`,\n );\n }\n if (\n configuration.outputType === \"json\" &&\n (!configuration.outputSchema ||\n typeof configuration.outputSchema !== \"object\")\n ) {\n throw new Error(\n `Agent \"${name}\" must configure outputSchema when outputType is \"json\".`,\n );\n }\n\n const instructionsPath = resolve(sourceDirectory, \"instructions.md\");\n let systemPrompt: string;\n try {\n systemPrompt = readFileSync(instructionsPath, \"utf8\").trim();\n } catch (error) {\n throw new Error(\n `Agent \"${name}\" is missing required instructions.md at ${instructionsPath}.`,\n { cause: error },\n );\n }\n if (!systemPrompt) {\n throw new Error(`Agent \"${name}\" instructions.md cannot be empty.`);\n }\n\n return Object.freeze({\n key,\n name: configuration.name.trim(),\n description: configuration.description?.trim(),\n provider: configuration.provider,\n model: configuration.model,\n systemPrompt,\n region: configuration.region,\n maxTokens: configuration.maxTokens,\n reasoningLevel: configuration.reasoningLevel,\n outputType: configuration.outputType ?? \"text\",\n outputSchema: configuration.outputSchema,\n actions: compileActions(name, sourceDirectory, actionRuntime),\n skills: compileSkills(name, sourceDirectory),\n evaluations: compileEvaluations(name, sourceDirectory),\n subagentPolicy: configuration.subagents\n ? Object.freeze({ ...configuration.subagents })\n : undefined,\n subagents: Object.freeze({}),\n });\n}\n\nfunction compileActions(\n agentName: string,\n sourceDirectory: string,\n actionRuntime: \"native\" | \"sandbox\",\n): Record<string, CompiledActionManifest> {\n const actionsDirectory = resolve(sourceDirectory, \"actions\");\n if (!existsSync(actionsDirectory)) {\n return {};\n }\n\n const actions: Record<string, CompiledActionManifest> = {};\n for (const entry of readdirSync(actionsDirectory, { withFileTypes: true })) {\n if (!entry.isDirectory()) {\n continue;\n }\n\n const configurationPath = resolve(\n actionsDirectory,\n entry.name,\n \"index.json\",\n );\n let configuration: ActionConfiguration;\n try {\n configuration = JSON.parse(\n readFileSync(configurationPath, \"utf8\"),\n ) as ActionConfiguration;\n } catch (error) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" is missing a valid index.json.`,\n { cause: error },\n );\n }\n validateEnabled(\n `Action \"${agentName}/${entry.name}\"`,\n configuration?.enabled,\n );\n if (configuration?.enabled === false) {\n continue;\n }\n\n if (!configuration.name?.trim() || !configuration.description?.trim()) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" requires name and description.`,\n );\n }\n if (!/^[a-zA-Z0-9_-]{1,64}$/.test(configuration.name)) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" has an invalid model-facing name.`,\n );\n }\n if (\n [\n \"load_skill\",\n \"run_agent\",\n \"resume_agent\",\n \"inspect_agent\",\n ].includes(configuration.name)\n ) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" uses reserved name \"${configuration.name}\".`,\n );\n }\n const execution = configuration.execution ?? \"local\";\n if (![\"client\", \"local\"].includes(execution)) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" has invalid execution \"${configuration.execution}\".`,\n );\n }\n if (\n !configuration.parameters ||\n typeof configuration.parameters !== \"object\" ||\n Array.isArray(configuration.parameters)\n ) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" requires a parameters JSON Schema.`,\n );\n }\n if (\n configuration.outputSchema !== undefined &&\n (typeof configuration.outputSchema !== \"object\" ||\n configuration.outputSchema === null ||\n Array.isArray(configuration.outputSchema))\n ) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" has an invalid outputSchema.`,\n );\n }\n validateNumber(\n `${agentName}/${entry.name}`,\n \"timeoutMs\",\n configuration.timeoutMs,\n { integer: true, minimum: 1, maximum: 120_000 },\n );\n if (\n configuration.permissions?.env !== undefined &&\n !Array.isArray(configuration.permissions.env)\n ) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" permissions.env must be an array.`,\n );\n }\n if (\n configuration.permissions?.network !== undefined &&\n !Array.isArray(configuration.permissions.network)\n ) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" permissions.network must be an array.`,\n );\n }\n for (const permission of [\n ...(configuration.permissions?.env ?? []),\n ...(configuration.permissions?.network ?? []),\n ]) {\n if (typeof permission !== \"string\" || !permission.trim()) {\n throw new Error(\n `Action \"${agentName}/${entry.name}\" has an invalid permission.`,\n );\n }\n }\n if (actions[configuration.name]) {\n throw new Error(\n `Agent \"${agentName}\" has duplicate action name \"${configuration.name}\".`,\n );\n }\n\n const compiledSource =\n execution === \"local\"\n ? compileLocalAction(\n agentName,\n entry.name,\n actionsDirectory,\n actionRuntime,\n )\n : undefined;\n actions[configuration.name] = Object.freeze({\n ...configuration,\n execution,\n directoryName: entry.name,\n ...compiledSource,\n });\n }\n\n return Object.freeze(actions);\n}\n\nfunction compileSkills(\n agentName: string,\n sourceDirectory: string,\n): Record<string, CompiledSkillManifest> {\n const skillsDirectory = resolve(sourceDirectory, \"skills\");\n if (!existsSync(skillsDirectory)) {\n return {};\n }\n rejectLegacyRegistry(agentName, skillsDirectory, \"skills\");\n\n const skills: Record<string, CompiledSkillManifest> = {};\n\n for (const entry of discoverDirectories(skillsDirectory)) {\n const skillDirectory = resolve(skillsDirectory, entry);\n const configurationPath = resolve(skillDirectory, \"index.json\");\n let configuration: SkillConfiguration;\n try {\n configuration = JSON.parse(\n readFileSync(configurationPath, \"utf8\"),\n ) as SkillConfiguration;\n } catch (error) {\n throw new Error(\n `Skill \"${agentName}/${entry}\" is missing a valid index.json at ${configurationPath}.`,\n { cause: error },\n );\n }\n validateEnabled(`Skill \"${agentName}/${entry}\"`, configuration?.enabled);\n if (configuration?.enabled === false) {\n continue;\n }\n validateSkillConfiguration(agentName, entry, configuration);\n\n const instructionsPath = resolve(skillDirectory, \"instructions.md\");\n let instructions: string;\n try {\n instructions = readFileSync(instructionsPath, \"utf8\").trim();\n } catch (error) {\n throw new Error(\n `Skill \"${agentName}/${entry}\" is missing instructions.md at ${instructionsPath}.`,\n { cause: error },\n );\n }\n if (!instructions) {\n throw new Error(\n `Skill \"${agentName}/${entry}\" instructions.md cannot be empty.`,\n );\n }\n if (skills[configuration.name]) {\n throw new Error(\n `Agent \"${agentName}\" has duplicate skill name \"${configuration.name}\".`,\n );\n }\n\n skills[configuration.name] = Object.freeze({\n ...configuration,\n directoryName: entry,\n instructions,\n });\n }\n\n return Object.freeze(skills);\n}\n\nfunction compileEvaluations(\n agentName: string,\n sourceDirectory: string,\n): Record<string, CompiledEvaluationManifest> {\n const evaluationsDirectory = resolve(sourceDirectory, \"evaluations\");\n if (!existsSync(evaluationsDirectory)) {\n return {};\n }\n rejectLegacyRegistry(agentName, evaluationsDirectory, \"evaluations\");\n\n const evaluations: Record<string, CompiledEvaluationManifest> = {};\n\n for (const entry of discoverDirectories(evaluationsDirectory)) {\n const evaluationDirectory = resolve(evaluationsDirectory, entry);\n const configurationPath = resolve(evaluationDirectory, \"index.json\");\n let configuration: EvaluationConfiguration;\n try {\n configuration = JSON.parse(\n readFileSync(configurationPath, \"utf8\"),\n ) as EvaluationConfiguration;\n } catch (error) {\n throw new Error(\n `Evaluation \"${agentName}/${entry}\" is missing a valid index.json at ${configurationPath}.`,\n { cause: error },\n );\n }\n validateEnabled(\n `Evaluation \"${agentName}/${entry}\"`,\n configuration?.enabled,\n );\n if (configuration?.enabled === false) {\n continue;\n }\n validateEvaluationConfiguration(agentName, entry, configuration);\n if (evaluations[configuration.name]) {\n throw new Error(\n `Agent \"${agentName}\" has duplicate evaluation name \"${configuration.name}\".`,\n );\n }\n\n evaluations[configuration.name] = Object.freeze({\n ...configuration,\n enabled: true,\n provider: configuration.provider as CompiledEvaluationManifest[\"provider\"],\n directoryName: entry,\n metrics: Object.freeze(\n configuration.metrics.map((metric) => Object.freeze({ ...metric })),\n ),\n });\n }\n\n return Object.freeze(evaluations);\n}\n\nfunction discoverDirectories(directory: string): string[] {\n return readdirSync(directory, { withFileTypes: true })\n .filter((entry) => entry.isDirectory() && !entry.name.startsWith(\".\"))\n .map((entry) => entry.name)\n .sort();\n}\n\nfunction rejectLegacyRegistry(\n agentName: string,\n directory: string,\n collection: \"skills\" | \"evaluations\",\n): void {\n if (existsSync(resolve(directory, \"index.js\"))) {\n throw new Error(\n `Agent \"${agentName}\" ${collection}/index.js is no longer supported. Remove the registry; folders are discovered automatically and can be disabled with \"enabled\": false.`,\n );\n }\n}\n\nfunction validateEnabled(label: string, enabled: unknown): void {\n if (enabled !== undefined && typeof enabled !== \"boolean\") {\n throw new Error(`${label} enabled must be a boolean.`);\n }\n}\n\nfunction validateSkillConfiguration(\n agentName: string,\n registrationName: string,\n configuration: SkillConfiguration,\n): void {\n if (\n !configuration ||\n typeof configuration !== \"object\" ||\n Array.isArray(configuration) ||\n typeof configuration.name !== \"string\" ||\n !configuration.name.trim() ||\n typeof configuration.description !== \"string\" ||\n !configuration.description.trim()\n ) {\n throw new Error(\n `Skill \"${agentName}/${registrationName}\" requires name and description.`,\n );\n }\n if (!/^[a-zA-Z0-9_-]{1,64}$/.test(configuration.name)) {\n throw new Error(\n `Skill \"${agentName}/${registrationName}\" has an invalid model-facing name.`,\n );\n }\n if (\n configuration.triggers !== undefined &&\n (!Array.isArray(configuration.triggers) ||\n configuration.triggers.length === 0 ||\n configuration.triggers.some(\n (trigger) => typeof trigger !== \"string\" || !trigger.trim(),\n ))\n ) {\n throw new Error(\n `Skill \"${agentName}/${registrationName}\" triggers must be non-empty strings.`,\n );\n }\n}\n\nfunction validateEvaluationConfiguration(\n agentName: string,\n registrationName: string,\n configuration: EvaluationConfiguration,\n): void {\n const label = `Evaluation \"${agentName}/${registrationName}\"`;\n if (\n !configuration ||\n typeof configuration !== \"object\" ||\n Array.isArray(configuration) ||\n typeof configuration.name !== \"string\" ||\n !configuration.name.trim()\n ) {\n throw new Error(`${label} requires a name.`);\n }\n if (!/^[a-zA-Z0-9_-]{1,64}$/.test(configuration.name)) {\n throw new Error(`${label} has an invalid name.`);\n }\n if (\n configuration.description !== undefined &&\n (typeof configuration.description !== \"string\" ||\n !configuration.description.trim())\n ) {\n throw new Error(`${label} description must be a non-empty string.`);\n }\n if (\n configuration.instructions !== undefined &&\n (typeof configuration.instructions !== \"string\" ||\n !configuration.instructions.trim())\n ) {\n throw new Error(`${label} instructions must be a non-empty string.`);\n }\n if (!isBuiltInProvider(configuration.provider)) {\n throw new Error(\n `${label} uses unsupported provider \"${configuration.provider}\".`,\n );\n }\n if (typeof configuration.model !== \"string\" || !configuration.model.trim()) {\n throw new Error(`${label} requires a model.`);\n }\n validateNumber(\n `${agentName}/${registrationName}`,\n \"maxTokens\",\n configuration.maxTokens,\n { integer: true, minimum: 1 },\n );\n if (\n configuration.reasoningLevel !== undefined &&\n (typeof configuration.reasoningLevel !== \"string\" ||\n !configuration.reasoningLevel.trim())\n ) {\n throw new Error(`${label} reasoningLevel must be a non-empty string.`);\n }\n if (\n !Array.isArray(configuration.metrics) ||\n configuration.metrics.length === 0\n ) {\n throw new Error(`${label} requires at least one metric.`);\n }\n const names = new Set<string>();\n for (const metric of configuration.metrics) {\n if (\n !metric ||\n typeof metric !== \"object\" ||\n typeof metric.name !== \"string\" ||\n !/^[a-zA-Z0-9_-]{1,64}$/.test(metric.name) ||\n typeof metric.description !== \"string\" ||\n !metric.description.trim() ||\n typeof metric.threshold !== \"number\" ||\n !Number.isFinite(metric.threshold) ||\n metric.threshold < 0 ||\n metric.threshold > 1\n ) {\n throw new Error(\n `${label} metrics require a valid name, description, and threshold between 0 and 1.`,\n );\n }\n if (names.has(metric.name)) {\n throw new Error(`${label} has duplicate metric \"${metric.name}\".`);\n }\n names.add(metric.name);\n }\n}\n\nfunction compileLocalAction(\n agentName: string,\n directoryName: string,\n actionsDirectory: string,\n actionRuntime: \"native\" | \"sandbox\",\n): { source: string; sourceHash: string } {\n const entryPath = resolve(actionsDirectory, directoryName, \"index.js\");\n if (!existsSync(entryPath)) {\n throw new Error(\n `Local action \"${agentName}/${directoryName}\" requires index.js.`,\n );\n }\n\n let output: string;\n try {\n const result = buildSync({\n entryPoints: [entryPath],\n bundle: true,\n write: false,\n format: \"iife\",\n globalName: \"__orchaActionModule\",\n platform: actionRuntime === \"native\" ? \"node\" : \"neutral\",\n target: \"es2022\",\n logLevel: \"silent\",\n });\n output = result.outputFiles[0]?.text ?? \"\";\n } catch (error) {\n throw new Error(\n `Local action \"${agentName}/${directoryName}\" could not be bundled.`,\n { cause: error },\n );\n }\n if (!output.includes(\"__orchaActionModule\")) {\n throw new Error(\n `Local action \"${agentName}/${directoryName}\" must export a default function.`,\n );\n }\n\n return {\n source: output,\n sourceHash: createHash(\"sha256\").update(output).digest(\"hex\"),\n };\n}\n\nexport function serializeBundle(bundle: CompiledBundle): string {\n return [\n \"// Generated by OrchaJS. Do not edit manually.\",\n `export const bundle = ${JSON.stringify(bundle, null, 2)};`,\n \"export default bundle;\",\n \"\",\n ].join(\"\\n\");\n}\n\nfunction validateNumber(\n agentName: string,\n field: string,\n value: number | undefined,\n constraints: {\n integer?: boolean;\n minimum?: number;\n maximum?: number;\n },\n): void {\n if (value === undefined) {\n return;\n }\n if (\n !Number.isFinite(value) ||\n (constraints.integer && !Number.isInteger(value)) ||\n (constraints.minimum !== undefined && value < constraints.minimum) ||\n (constraints.maximum !== undefined && value > constraints.maximum)\n ) {\n throw new Error(`Agent \"${agentName}\" has an invalid ${field}.`);\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA2B;AAC3B,gBAAsD;AACtD,kBAAwB;AACxB,qBAA0B;AAC1B,qBAAkC;AAc3B,SAAS,gBACd,eACA,cACA,gBAAsC,UACtB;AAChB,MACE,CAAC,iBACD,OAAO,kBAAkB,YACzB,MAAM,QAAQ,aAAa,GAC3B;AACA,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,SAAgD,CAAC;AAEvD,aAAW,CAAC,KAAK,YAAY,KAAK,OAAO,QAAQ,aAAa,GAAG;AAC/D,QAAI,CAAC,IAAI,KAAK,GAAG;AACf,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC3D;AACA,UAAM,aAAa,2BAA2B,KAAK,YAAY;AAC/D,UAAM,YAAmD,CAAC;AAC1D,eAAW,CAAC,aAAa,cAAc,KAAK,OAAO;AAAA,MACjD,WAAW;AAAA,IACb,GAAG;AACD,UAAI,CAAC,YAAY,KAAK,GAAG;AACvB,cAAM,IAAI,MAAM,UAAU,GAAG,+BAA+B;AAAA,MAC9D;AACA,gBAAU,WAAW,IAAI;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,UAAM,SAAS;AAAA,MACb;AAAA,MACA,WAAW;AAAA,MACX;AAAA,MACA;AAAA,IACF;AACA,WAAO,GAAG,IAAI,OAAO,OAAO;AAAA,MAC1B,GAAG;AAAA,MACH,gBACE,OAAO,KAAK,SAAS,EAAE,SAAS,IAC5B,OAAO,OAAO;AAAA,QACZ,GAAG,OAAO;AAAA,QACV,WAAW,OAAO,gBAAgB,aAAa;AAAA,MACjD,CAAC,IACD,OAAO;AAAA,MACb,WAAW,OAAO,OAAO,SAAS;AAAA,IACpC,CAAC;AAAA,EACH;AAEA,MAAI,OAAO,KAAK,MAAM,EAAE,WAAW,GAAG;AACpC,UAAM,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AAEA,SAAO,OAAO,OAAO;AAAA,IACnB,eAAe;AAAA,IACf;AAAA,IACA,QAAQ,OAAO,OAAO,MAAM;AAAA,EAC9B,CAAC;AACH;AAEA,SAAS,2BACP,KACA,cACqD;AACrD,MAAI,OAAO,iBAAiB,UAAU;AACpC,QAAI,CAAC,aAAa,KAAK,GAAG;AACxB,YAAM,IAAI,MAAM,UAAU,GAAG,gCAAgC;AAAA,IAC/D;AACA,WAAO,EAAE,MAAM,cAAc,WAAW,CAAC,EAAE;AAAA,EAC7C;AACA,MAAI,CAAC,gBAAgB,OAAO,iBAAiB,UAAU;AACrD,UAAM,IAAI,MAAM,UAAU,GAAG,gCAAgC;AAAA,EAC/D;AACA,MAAI,OAAO,aAAa,SAAS,YAAY,CAAC,aAAa,KAAK,KAAK,GAAG;AACtE,UAAM,IAAI,MAAM,UAAU,GAAG,gCAAgC;AAAA,EAC/D;AACA,MACE,aAAa,cAAc,WAC1B,CAAC,aAAa,aACb,OAAO,aAAa,cAAc,YAClC,MAAM,QAAQ,aAAa,SAAS,IACtC;AACA,UAAM,IAAI,MAAM,UAAU,GAAG,gDAAgD;AAAA,EAC/E;AACA,aAAW,CAAC,aAAa,cAAc,KAAK,OAAO;AAAA,IACjD,aAAa,aAAa,CAAC;AAAA,EAC7B,GAAG;AACD,QAAI,OAAO,mBAAmB,YAAY,CAAC,eAAe,KAAK,GAAG;AAChE,YAAM,IAAI;AAAA,QACR,aAAa,GAAG,IAAI,WAAW;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AACA,SAAO;AAAA,IACL,MAAM,aAAa;AAAA,IACnB,WAAW,aAAa,aAAa,CAAC;AAAA,EACxC;AACF;AAEA,SAAS,aACP,KACA,gBACA,cACA,eACuB;AACrB,QAAM,OAAO;AAEb,QAAM,sBAAkB,qBAAQ,cAAc,cAAc;AAC5D,QAAM,iBAAa,qBAAQ,iBAAiB,YAAY;AACxD,MAAI;AACJ,MAAI;AACF,oBAAgB,KAAK;AAAA,UACnB,wBAAa,YAAY,MAAM;AAAA,IACjC;AAAA,EACF,SAAS,OAAO;AACd,UAAM,IAAI;AAAA,MACR,UAAU,IAAI,sCAAsC,UAAU;AAAA,MAC9D,EAAE,OAAO,MAAM;AAAA,IACjB;AAAA,EACF;AACA,MAAI,OAAO,cAAc,SAAS,YAAY,CAAC,cAAc,KAAK,KAAK,GAAG;AACxE,UAAM,IAAI,MAAM,UAAU,IAAI,oBAAoB;AAAA,EACpD;AACA,MACE,cAAc,gBAAgB,WAC7B,OAAO,cAAc,gBAAgB,YACpC,CAAC,cAAc,YAAY,KAAK,IAClC;AACA,UAAM,IAAI;AAAA,MACR,UAAU,IAAI;AAAA,IAChB;AAAA,EACF;AACA,MAAI,KAAC,kCAAkB,cAAc,QAAQ,GAAG;AAC9C,UAAM,IAAI;AAAA,MACR,UAAU,IAAI,gCAAgC,cAAc,QAAQ;AAAA,IACtE;AAAA,EACF;AACA,MAAI,CAAC,cAAc,OAAO,KAAK,GAAG;AAChC,UAAM,IAAI,MAAM,UAAU,IAAI,2BAA2B;AAAA,EAC3D;AACA,iBAAe,MAAM,aAAa,cAAc,WAAW;AAAA,IACzD,SAAS;AAAA,IACT,SAAS;AAAA,EACX,CAAC;AACD,MACE,cAAc,cAAc,WAC3B,CAAC,cAAc,aACd,OAAO,cAAc,cAAc,YACnC,MAAM,QAAQ,cAAc,SAAS,IACvC;AACA,UAAM,IAAI,MAAM,UAAU,IAAI,gCAAgC;AAAA,EAChE;AACA;AAAA,IACE;AAAA,IACA;AAAA,IACA,cAAc,WAAW;AAAA,IACzB,EAAE,SAAS,MAAM,SAAS,EAAE;AAAA,EAC9B;AACA,MACE,cAAc,cACd,CAAC,CAAC,QAAQ,QAAQ,SAAS,OAAO,EAAE,SAAS,cAAc,UAAU,GACrE;AACA,UAAM,IAAI,MAAM,UAAU,IAAI,8BAA8B;AAAA,EAC9D;AACA,MACE,cAAc,mBAAmB,WAChC,OAAO,cAAc,mBAAmB,YACvC,CAAC,cAAc,eAAe,KAAK,IACrC;AACA,UAAM,IAAI;AAAA,MACR,UAAU,IAAI;AAAA,IAChB;AAAA,EACF;AACA,MAAI,CAAC,CAAC,QAAQ,MAAM,EAAE,SAAS,cAAc,cAAc,MAAM,GAAG;AAClE,UAAM,IAAI;AAAA,MACR,UAAU,IAAI,iBAAiB,cAAc,UAAU;AAAA,IACzD;AAAA,EACF;AACA,MACE,cAAc,eAAe,WAC5B,CAAC,cAAc,gBACd,OAAO,cAAc,iBAAiB,WACxC;AACA,UAAM,IAAI;AAAA,MACR,UAAU,IAAI;AAAA,IAChB;AAAA,EACF;AAEA,QAAM,uBAAmB,qBAAQ,iBAAiB,iBAAiB;AACnE,MAAI;AACJ,MAAI;AACF,uBAAe,wBAAa,kBAAkB,MAAM,EAAE,KAAK;AAAA,EAC7D,SAAS,OAAO;AACd,UAAM,IAAI;AAAA,MACR,UAAU,IAAI,4CAA4C,gBAAgB;AAAA,MAC1E,EAAE,OAAO,MAAM;AAAA,IACjB;AAAA,EACF;AACA,MAAI,CAAC,cAAc;AACjB,UAAM,IAAI,MAAM,UAAU,IAAI,oCAAoC;AAAA,EACpE;AAEA,SAAO,OAAO,OAAO;AAAA,IACnB;AAAA,IACA,MAAM,cAAc,KAAK,KAAK;AAAA,IAC9B,aAAa,cAAc,aAAa,KAAK;AAAA,IAC7C,UAAU,cAAc;AAAA,IACxB,OAAO,cAAc;AAAA,IACrB;AAAA,IACA,QAAQ,cAAc;AAAA,IACtB,WAAW,cAAc;AAAA,IACzB,gBAAgB,cAAc;AAAA,IAC9B,YAAY,cAAc,cAAc;AAAA,IACxC,cAAc,cAAc;AAAA,IAC5B,SAAS,eAAe,MAAM,iBAAiB,aAAa;AAAA,IAC5D,QAAQ,cAAc,MAAM,eAAe;AAAA,IAC3C,aAAa,mBAAmB,MAAM,eAAe;AAAA,IACrD,gBAAgB,cAAc,YAC1B,OAAO,OAAO,EAAE,GAAG,cAAc,UAAU,CAAC,IAC5C;AAAA,IACJ,WAAW,OAAO,OAAO,CAAC,CAAC;AAAA,EAC7B,CAAC;AACL;AAEA,SAAS,eACP,WACA,iBACA,eACwC;AACxC,QAAM,uBAAmB,qBAAQ,iBAAiB,SAAS;AAC3D,MAAI,KAAC,sBAAW,gBAAgB,GAAG;AACjC,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,UAAkD,CAAC;AACzD,aAAW,aAAS,uBAAY,kBAAkB,EAAE,eAAe,KAAK,CAAC,GAAG;AAC1E,QAAI,CAAC,MAAM,YAAY,GAAG;AACxB;AAAA,IACF;AAEA,UAAM,wBAAoB;AAAA,MACxB;AAAA,MACA,MAAM;AAAA,MACN;AAAA,IACF;AACA,QAAI;AACJ,QAAI;AACF,sBAAgB,KAAK;AAAA,YACnB,wBAAa,mBAAmB,MAAM;AAAA,MACxC;AAAA,IACF,SAAS,OAAO;AACd,YAAM,IAAI;AAAA,QACR,WAAW,SAAS,IAAI,MAAM,IAAI;AAAA,QAClC,EAAE,OAAO,MAAM;AAAA,MACjB;AAAA,IACF;AACA;AAAA,MACE,WAAW,SAAS,IAAI,MAAM,IAAI;AAAA,MAClC,eAAe;AAAA,IACjB;AACA,QAAI,eAAe,YAAY,OAAO;AACpC;AAAA,IACF;AAEA,QAAI,CAAC,cAAc,MAAM,KAAK,KAAK,CAAC,cAAc,aAAa,KAAK,GAAG;AACrE,YAAM,IAAI;AAAA,QACR,WAAW,SAAS,IAAI,MAAM,IAAI;AAAA,MACpC;AAAA,IACF;AACA,QAAI,CAAC,wBAAwB,KAAK,cAAc,IAAI,GAAG;AACrD,YAAM,IAAI;AAAA,QACR,WAAW,SAAS,IAAI,MAAM,IAAI;AAAA,MACpC;AAAA,IACF;AACA,QACE;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,SAAS,cAAc,IAAI,GAC7B;AACA,YAAM,IAAI;AAAA,QACR,WAAW,SAAS,IAAI,MAAM,IAAI,yBAAyB,cAAc,IAAI;AAAA,MAC/E;AAAA,IACF;AACA,UAAM,YAAY,cAAc,aAAa;AAC7C,QAAI,CAAC,CAAC,UAAU,OAAO,EAAE,SAAS,SAAS,GAAG;AAC5C,YAAM,IAAI;AAAA,QACR,WAAW,SAAS,IAAI,MAAM,IAAI,4BAA4B,cAAc,SAAS;AAAA,MACvF;AAAA,IACF;AACA,QACE,CAAC,cAAc,cACf,OAAO,cAAc,eAAe,YACpC,MAAM,QAAQ,cAAc,UAAU,GACtC;AACA,YAAM,IAAI;AAAA,QACR,WAAW,SAAS,IAAI,MAAM,IAAI;AAAA,MACpC;AAAA,IACF;AACA,QACE,cAAc,iBAAiB,WAC9B,OAAO,cAAc,iBAAiB,YACrC,cAAc,iBAAiB,QAC/B,MAAM,QAAQ,cAAc,YAAY,IAC1C;AACA,YAAM,IAAI;AAAA,QACR,WAAW,SAAS,IAAI,MAAM,IAAI;AAAA,MACpC;AAAA,IACF;AACA;AAAA,MACE,GAAG,SAAS,IAAI,MAAM,IAAI;AAAA,MAC1B;AAAA,MACA,cAAc;AAAA,MACd,EAAE,SAAS,MAAM,SAAS,GAAG,SAAS,KAAQ;AAAA,IAChD;AACA,QACE,cAAc,aAAa,QAAQ,UACnC,CAAC,MAAM,QAAQ,cAAc,YAAY,GAAG,GAC5C;AACA,YAAM,IAAI;AAAA,QACR,WAAW,SAAS,IAAI,MAAM,IAAI;AAAA,MACpC;AAAA,IACF;AACA,QACE,cAAc,aAAa,YAAY,UACvC,CAAC,MAAM,QAAQ,cAAc,YAAY,OAAO,GAChD;AACA,YAAM,IAAI;AAAA,QACR,WAAW,SAAS,IAAI,MAAM,IAAI;AAAA,MACpC;AAAA,IACF;AACA,eAAW,cAAc;AAAA,MACvB,GAAI,cAAc,aAAa,OAAO,CAAC;AAAA,MACvC,GAAI,cAAc,aAAa,WAAW,CAAC;AAAA,IAC7C,GAAG;AACD,UAAI,OAAO,eAAe,YAAY,CAAC,WAAW,KAAK,GAAG;AACxD,cAAM,IAAI;AAAA,UACR,WAAW,SAAS,IAAI,MAAM,IAAI;AAAA,QACpC;AAAA,MACF;AAAA,IACF;AACA,QAAI,QAAQ,cAAc,IAAI,GAAG;AAC/B,YAAM,IAAI;AAAA,QACR,UAAU,SAAS,gCAAgC,cAAc,IAAI;AAAA,MACvE;AAAA,IACF;AAEA,UAAM,iBACJ,cAAc,UACV;AAAA,MACE;AAAA,MACA,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IACF,IACA;AACN,YAAQ,cAAc,IAAI,IAAI,OAAO,OAAO;AAAA,MAC1C,GAAG;AAAA,MACH;AAAA,MACA,eAAe,MAAM;AAAA,MACrB,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAEA,SAAO,OAAO,OAAO,OAAO;AAC9B;AAEA,SAAS,cACP,WACA,iBACuC;AACvC,QAAM,sBAAkB,qBAAQ,iBAAiB,QAAQ;AACzD,MAAI,KAAC,sBAAW,eAAe,GAAG;AAChC,WAAO,CAAC;AAAA,EACV;AACA,uBAAqB,WAAW,iBAAiB,QAAQ;AAEzD,QAAM,SAAgD,CAAC;AAEvD,aAAW,SAAS,oBAAoB,eAAe,GAAG;AACxD,UAAM,qBAAiB,qBAAQ,iBAAiB,KAAK;AACrD,UAAM,wBAAoB,qBAAQ,gBAAgB,YAAY;AAC9D,QAAI;AACJ,QAAI;AACF,sBAAgB,KAAK;AAAA,YACnB,wBAAa,mBAAmB,MAAM;AAAA,MACxC;AAAA,IACF,SAAS,OAAO;AACd,YAAM,IAAI;AAAA,QACR,UAAU,SAAS,IAAI,KAAK,sCAAsC,iBAAiB;AAAA,QACnF,EAAE,OAAO,MAAM;AAAA,MACjB;AAAA,IACF;AACA,oBAAgB,UAAU,SAAS,IAAI,KAAK,KAAK,eAAe,OAAO;AACvE,QAAI,eAAe,YAAY,OAAO;AACpC;AAAA,IACF;AACA,+BAA2B,WAAW,OAAO,aAAa;AAE1D,UAAM,uBAAmB,qBAAQ,gBAAgB,iBAAiB;AAClE,QAAI;AACJ,QAAI;AACF,yBAAe,wBAAa,kBAAkB,MAAM,EAAE,KAAK;AAAA,IAC7D,SAAS,OAAO;AACd,YAAM,IAAI;AAAA,QACR,UAAU,SAAS,IAAI,KAAK,mCAAmC,gBAAgB;AAAA,QAC/E,EAAE,OAAO,MAAM;AAAA,MACjB;AAAA,IACF;AACA,QAAI,CAAC,cAAc;AACjB,YAAM,IAAI;AAAA,QACR,UAAU,SAAS,IAAI,KAAK;AAAA,MAC9B;AAAA,IACF;AACA,QAAI,OAAO,cAAc,IAAI,GAAG;AAC9B,YAAM,IAAI;AAAA,QACR,UAAU,SAAS,+BAA+B,cAAc,IAAI;AAAA,MACtE;AAAA,IACF;AAEA,WAAO,cAAc,IAAI,IAAI,OAAO,OAAO;AAAA,MACzC,GAAG;AAAA,MACH,eAAe;AAAA,MACf;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO,OAAO,OAAO,MAAM;AAC7B;AAEA,SAAS,mBACP,WACA,iBAC4C;AAC5C,QAAM,2BAAuB,qBAAQ,iBAAiB,aAAa;AACnE,MAAI,KAAC,sBAAW,oBAAoB,GAAG;AACrC,WAAO,CAAC;AAAA,EACV;AACA,uBAAqB,WAAW,sBAAsB,aAAa;AAEnE,QAAM,cAA0D,CAAC;AAEjE,aAAW,SAAS,oBAAoB,oBAAoB,GAAG;AAC7D,UAAM,0BAAsB,qBAAQ,sBAAsB,KAAK;AAC/D,UAAM,wBAAoB,qBAAQ,qBAAqB,YAAY;AACnE,QAAI;AACJ,QAAI;AACF,sBAAgB,KAAK;AAAA,YACnB,wBAAa,mBAAmB,MAAM;AAAA,MACxC;AAAA,IACF,SAAS,OAAO;AACd,YAAM,IAAI;AAAA,QACR,eAAe,SAAS,IAAI,KAAK,sCAAsC,iBAAiB;AAAA,QACxF,EAAE,OAAO,MAAM;AAAA,MACjB;AAAA,IACF;AACA;AAAA,MACE,eAAe,SAAS,IAAI,KAAK;AAAA,MACjC,eAAe;AAAA,IACjB;AACA,QAAI,eAAe,YAAY,OAAO;AACpC;AAAA,IACF;AACA,oCAAgC,WAAW,OAAO,aAAa;AAC/D,QAAI,YAAY,cAAc,IAAI,GAAG;AACnC,YAAM,IAAI;AAAA,QACR,UAAU,SAAS,oCAAoC,cAAc,IAAI;AAAA,MAC3E;AAAA,IACF;AAEA,gBAAY,cAAc,IAAI,IAAI,OAAO,OAAO;AAAA,MAC9C,GAAG;AAAA,MACH,SAAS;AAAA,MACT,UAAU,cAAc;AAAA,MACxB,eAAe;AAAA,MACf,SAAS,OAAO;AAAA,QACd,cAAc,QAAQ,IAAI,CAAC,WAAW,OAAO,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;AAAA,MACpE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO,OAAO,OAAO,WAAW;AAClC;AAEA,SAAS,oBAAoB,WAA6B;AACxD,aAAO,uBAAY,WAAW,EAAE,eAAe,KAAK,CAAC,EAClD,OAAO,CAAC,UAAU,MAAM,YAAY,KAAK,CAAC,MAAM,KAAK,WAAW,GAAG,CAAC,EACpE,IAAI,CAAC,UAAU,MAAM,IAAI,EACzB,KAAK;AACV;AAEA,SAAS,qBACP,WACA,WACA,YACM;AACN,UAAI,0BAAW,qBAAQ,WAAW,UAAU,CAAC,GAAG;AAC9C,UAAM,IAAI;AAAA,MACR,UAAU,SAAS,KAAK,UAAU;AAAA,IACpC;AAAA,EACF;AACF;AAEA,SAAS,gBAAgB,OAAe,SAAwB;AAC9D,MAAI,YAAY,UAAa,OAAO,YAAY,WAAW;AACzD,UAAM,IAAI,MAAM,GAAG,KAAK,6BAA6B;AAAA,EACvD;AACF;AAEA,SAAS,2BACP,WACA,kBACA,eACM;AACN,MACE,CAAC,iBACD,OAAO,kBAAkB,YACzB,MAAM,QAAQ,aAAa,KAC3B,OAAO,cAAc,SAAS,YAC9B,CAAC,cAAc,KAAK,KAAK,KACzB,OAAO,cAAc,gBAAgB,YACrC,CAAC,cAAc,YAAY,KAAK,GAChC;AACA,UAAM,IAAI;AAAA,MACR,UAAU,SAAS,IAAI,gBAAgB;AAAA,IACzC;AAAA,EACF;AACA,MAAI,CAAC,wBAAwB,KAAK,cAAc,IAAI,GAAG;AACrD,UAAM,IAAI;AAAA,MACR,UAAU,SAAS,IAAI,gBAAgB;AAAA,IACzC;AAAA,EACF;AACA,MACE,cAAc,aAAa,WAC1B,CAAC,MAAM,QAAQ,cAAc,QAAQ,KACpC,cAAc,SAAS,WAAW,KAClC,cAAc,SAAS;AAAA,IACrB,CAAC,YAAY,OAAO,YAAY,YAAY,CAAC,QAAQ,KAAK;AAAA,EAC5D,IACF;AACA,UAAM,IAAI;AAAA,MACR,UAAU,SAAS,IAAI,gBAAgB;AAAA,IACzC;AAAA,EACF;AACF;AAEA,SAAS,gCACP,WACA,kBACA,eACM;AACN,QAAM,QAAQ,eAAe,SAAS,IAAI,gBAAgB;AAC1D,MACE,CAAC,iBACD,OAAO,kBAAkB,YACzB,MAAM,QAAQ,aAAa,KAC3B,OAAO,cAAc,SAAS,YAC9B,CAAC,cAAc,KAAK,KAAK,GACzB;AACA,UAAM,IAAI,MAAM,GAAG,KAAK,mBAAmB;AAAA,EAC7C;AACA,MAAI,CAAC,wBAAwB,KAAK,cAAc,IAAI,GAAG;AACrD,UAAM,IAAI,MAAM,GAAG,KAAK,uBAAuB;AAAA,EACjD;AACA,MACE,cAAc,gBAAgB,WAC7B,OAAO,cAAc,gBAAgB,YACpC,CAAC,cAAc,YAAY,KAAK,IAClC;AACA,UAAM,IAAI,MAAM,GAAG,KAAK,0CAA0C;AAAA,EACpE;AACA,MACE,cAAc,iBAAiB,WAC9B,OAAO,cAAc,iBAAiB,YACrC,CAAC,cAAc,aAAa,KAAK,IACnC;AACA,UAAM,IAAI,MAAM,GAAG,KAAK,2CAA2C;AAAA,EACrE;AACA,MAAI,KAAC,kCAAkB,cAAc,QAAQ,GAAG;AAC9C,UAAM,IAAI;AAAA,MACR,GAAG,KAAK,+BAA+B,cAAc,QAAQ;AAAA,IAC/D;AAAA,EACF;AACA,MAAI,OAAO,cAAc,UAAU,YAAY,CAAC,cAAc,MAAM,KAAK,GAAG;AAC1E,UAAM,IAAI,MAAM,GAAG,KAAK,oBAAoB;AAAA,EAC9C;AACA;AAAA,IACE,GAAG,SAAS,IAAI,gBAAgB;AAAA,IAChC;AAAA,IACA,cAAc;AAAA,IACd,EAAE,SAAS,MAAM,SAAS,EAAE;AAAA,EAC9B;AACA,MACE,cAAc,mBAAmB,WAChC,OAAO,cAAc,mBAAmB,YACvC,CAAC,cAAc,eAAe,KAAK,IACrC;AACA,UAAM,IAAI,MAAM,GAAG,KAAK,6CAA6C;AAAA,EACvE;AACA,MACE,CAAC,MAAM,QAAQ,cAAc,OAAO,KACpC,cAAc,QAAQ,WAAW,GACjC;AACA,UAAM,IAAI,MAAM,GAAG,KAAK,gCAAgC;AAAA,EAC1D;AACA,QAAM,QAAQ,oBAAI,IAAY;AAC9B,aAAW,UAAU,cAAc,SAAS;AAC1C,QACE,CAAC,UACD,OAAO,WAAW,YAClB,OAAO,OAAO,SAAS,YACvB,CAAC,wBAAwB,KAAK,OAAO,IAAI,KACzC,OAAO,OAAO,gBAAgB,YAC9B,CAAC,OAAO,YAAY,KAAK,KACzB,OAAO,OAAO,cAAc,YAC5B,CAAC,OAAO,SAAS,OAAO,SAAS,KACjC,OAAO,YAAY,KACnB,OAAO,YAAY,GACnB;AACA,YAAM,IAAI;AAAA,QACR,GAAG,KAAK;AAAA,MACV;AAAA,IACF;AACA,QAAI,MAAM,IAAI,OAAO,IAAI,GAAG;AAC1B,YAAM,IAAI,MAAM,GAAG,KAAK,0BAA0B,OAAO,IAAI,IAAI;AAAA,IACnE;AACA,UAAM,IAAI,OAAO,IAAI;AAAA,EACvB;AACF;AAEA,SAAS,mBACP,WACA,eACA,kBACA,eACwC;AACxC,QAAM,gBAAY,qBAAQ,kBAAkB,eAAe,UAAU;AACrE,MAAI,KAAC,sBAAW,SAAS,GAAG;AAC1B,UAAM,IAAI;AAAA,MACR,iBAAiB,SAAS,IAAI,aAAa;AAAA,IAC7C;AAAA,EACF;AAEA,MAAI;AACJ,MAAI;AACF,UAAM,aAAS,0BAAU;AAAA,MACvB,aAAa,CAAC,SAAS;AAAA,MACvB,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,UAAU,kBAAkB,WAAW,SAAS;AAAA,MAChD,QAAQ;AAAA,MACR,UAAU;AAAA,IACZ,CAAC;AACD,aAAS,OAAO,YAAY,CAAC,GAAG,QAAQ;AAAA,EAC1C,SAAS,OAAO;AACd,UAAM,IAAI;AAAA,MACR,iBAAiB,SAAS,IAAI,aAAa;AAAA,MAC3C,EAAE,OAAO,MAAM;AAAA,IACjB;AAAA,EACF;AACA,MAAI,CAAC,OAAO,SAAS,qBAAqB,GAAG;AAC3C,UAAM,IAAI;AAAA,MACR,iBAAiB,SAAS,IAAI,aAAa;AAAA,IAC7C;AAAA,EACF;AAEA,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,gBAAY,0BAAW,QAAQ,EAAE,OAAO,MAAM,EAAE,OAAO,KAAK;AAAA,EAC9D;AACF;AAEO,SAAS,gBAAgB,QAAgC;AAC9D,SAAO;AAAA,IACL;AAAA,IACA,yBAAyB,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA,IACxD;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,SAAS,eACP,WACA,OACA,OACA,aAKM;AACN,MAAI,UAAU,QAAW;AACvB;AAAA,EACF;AACA,MACE,CAAC,OAAO,SAAS,KAAK,KACrB,YAAY,WAAW,CAAC,OAAO,UAAU,KAAK,KAC9C,YAAY,YAAY,UAAa,QAAQ,YAAY,WACzD,YAAY,YAAY,UAAa,QAAQ,YAAY,SAC1D;AACA,UAAM,IAAI,MAAM,UAAU,SAAS,oBAAoB,KAAK,GAAG;AAAA,EACjE;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|