@asm-agent/coding-agent 0.8.8 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +2 -7
  3. package/dist/asm-agent-runtime/src/__pycache__/asm_cm_driver.cpython-313.pyc +0 -0
  4. package/dist/asm-agent-runtime/src/__pycache__/phase76_address_head.cpython-313.pyc +0 -0
  5. package/dist/asm-agent-runtime/src/rlm/__init__.py +1 -1
  6. package/dist/asm-agent-runtime/src/rlm/__pycache__/__init__.cpython-312.pyc +0 -0
  7. package/dist/asm-agent-runtime/src/rlm/__pycache__/__init__.cpython-313.pyc +0 -0
  8. package/dist/asm-agent-runtime/src/rlm/__pycache__/bash.cpython-312.pyc +0 -0
  9. package/dist/asm-agent-runtime/src/rlm/__pycache__/bash.cpython-313.pyc +0 -0
  10. package/dist/asm-agent-runtime/src/rlm/__pycache__/mcp.cpython-312.pyc +0 -0
  11. package/dist/asm-agent-runtime/src/rlm/__pycache__/mcp_base.cpython-312.pyc +0 -0
  12. package/dist/asm-agent-runtime/src/rlm/__pycache__/repl.cpython-312.pyc +0 -0
  13. package/dist/asm-agent-runtime/src/rlm/__pycache__/repl.cpython-313.pyc +0 -0
  14. package/dist/asm-agent-runtime/src/rlm/__pycache__/skill.cpython-313.pyc +0 -0
  15. package/dist/asm-agent-runtime/src/rlm/bash.py +94 -31
  16. package/dist/asm-agent-runtime/src/rlm/repl.md +3 -3
  17. package/dist/asm-agent-runtime/src/rlm/repl.py +46 -45
  18. package/dist/asm-agent-runtime/test/__pycache__/test_bash.cpython-313.pyc +0 -0
  19. package/dist/asm-agent-runtime/test/__pycache__/test_repl.cpython-313.pyc +0 -0
  20. package/dist/asm-agent-runtime/test/test_bash.py +74 -19
  21. package/dist/asm-agent-runtime/test/test_repl.py +67 -3
  22. package/dist/asm-agent-runtime/uv.lock +446 -155
  23. package/dist/bundle/{anthropic-OFECORE7.js → anthropic-ZOZNPFXS.js} +2 -2
  24. package/dist/bundle/{azure-openai-responses-AOVTLR6N.js → azure-openai-responses-TDHCU647.js} +2 -2
  25. package/dist/bundle/{bundled-modules-JQCJDEIY.js → bundled-modules-Q2YODC4B.js} +3 -3
  26. package/dist/bundle/{chunk-M67RGWDQ.js → chunk-AMKLNEAK.js} +25 -44
  27. package/dist/bundle/{chunk-7TB7CGPV.js → chunk-FPY7FFJS.js} +978 -1821
  28. package/dist/bundle/{chunk-JC2TT4MZ.js → chunk-G6SC4YYW.js} +4942 -1916
  29. package/dist/bundle/{chunk-A65OM3TZ.js → chunk-QLHAP3FT.js} +1 -1
  30. package/dist/bundle/{cli-main-FNHDQGQD.js → cli-main-277AG2BR.js} +3 -3
  31. package/dist/bundle/cli.js +1 -1
  32. package/dist/bundle/{google-RVJL6RIQ.js → google-Q3AJWUOY.js} +1 -1
  33. package/dist/bundle/{google-vertex-EZTRRRH6.js → google-vertex-2CSNOUBS.js} +1 -1
  34. package/dist/bundle/{main-IYXIIAJN.js → main-TNXWJXIU.js} +3 -3
  35. package/dist/bundle/{mistral-FSGKSMA7.js → mistral-XRYJGLLG.js} +1 -1
  36. package/dist/bundle/{openai-codex-responses-VM5Y564D.js → openai-codex-responses-C6BRO2BN.js} +2 -2
  37. package/dist/bundle/{openai-completions-X46FOQDN.js → openai-completions-DNXCK2JW.js} +3 -3
  38. package/dist/bundle/{openai-responses-SOQNEPBE.js → openai-responses-BEMWVIXE.js} +2 -2
  39. package/dist/config.d.ts +0 -1
  40. package/dist/config.d.ts.map +1 -1
  41. package/dist/config.js +0 -3
  42. package/dist/config.js.map +1 -1
  43. package/dist/core/agent-session-config.d.ts +1 -2
  44. package/dist/core/agent-session-config.d.ts.map +1 -1
  45. package/dist/core/agent-session-config.js +0 -3
  46. package/dist/core/agent-session-config.js.map +1 -1
  47. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  48. package/dist/core/agent-session-runtime.js +0 -8
  49. package/dist/core/agent-session-runtime.js.map +1 -1
  50. package/dist/core/agent-session-services.d.ts +0 -2
  51. package/dist/core/agent-session-services.d.ts.map +1 -1
  52. package/dist/core/agent-session-services.js +0 -22
  53. package/dist/core/agent-session-services.js.map +1 -1
  54. package/dist/core/agent-session.d.ts +8 -1
  55. package/dist/core/agent-session.d.ts.map +1 -1
  56. package/dist/core/agent-session.js +100 -22
  57. package/dist/core/agent-session.js.map +1 -1
  58. package/dist/core/kernel/bootstrap.d.ts.map +1 -1
  59. package/dist/core/kernel/bootstrap.js +1 -1
  60. package/dist/core/kernel/bootstrap.js.map +1 -1
  61. package/dist/core/kernel/repl-manager.d.ts +32 -8
  62. package/dist/core/kernel/repl-manager.d.ts.map +1 -1
  63. package/dist/core/kernel/repl-manager.js +401 -102
  64. package/dist/core/kernel/repl-manager.js.map +1 -1
  65. package/dist/core/kernel/shared.d.ts +11 -7
  66. package/dist/core/kernel/shared.d.ts.map +1 -1
  67. package/dist/core/kernel/shared.js +2 -5
  68. package/dist/core/kernel/shared.js.map +1 -1
  69. package/dist/core/mcp/mcp-manager.d.ts +4 -2
  70. package/dist/core/mcp/mcp-manager.d.ts.map +1 -1
  71. package/dist/core/mcp/mcp-manager.js +9 -7
  72. package/dist/core/mcp/mcp-manager.js.map +1 -1
  73. package/dist/core/prime-inference-auth.d.ts +0 -9
  74. package/dist/core/prime-inference-auth.d.ts.map +1 -1
  75. package/dist/core/prime-inference-auth.js +0 -50
  76. package/dist/core/prime-inference-auth.js.map +1 -1
  77. package/dist/core/provider-display-names.d.ts.map +1 -1
  78. package/dist/core/provider-display-names.js +0 -1
  79. package/dist/core/provider-display-names.js.map +1 -1
  80. package/dist/core/session-manager.d.ts +0 -4
  81. package/dist/core/session-manager.d.ts.map +1 -1
  82. package/dist/core/session-manager.js +0 -22
  83. package/dist/core/session-manager.js.map +1 -1
  84. package/dist/core/settings-manager.d.ts +4 -16
  85. package/dist/core/settings-manager.d.ts.map +1 -1
  86. package/dist/core/settings-manager.js +13 -43
  87. package/dist/core/settings-manager.js.map +1 -1
  88. package/dist/core/slash-commands.d.ts.map +1 -1
  89. package/dist/core/slash-commands.js +0 -5
  90. package/dist/core/slash-commands.js.map +1 -1
  91. package/dist/core/tools/acp-mcp.d.ts +6 -0
  92. package/dist/core/tools/acp-mcp.d.ts.map +1 -0
  93. package/dist/core/tools/acp-mcp.js +86 -0
  94. package/dist/core/tools/acp-mcp.js.map +1 -0
  95. package/dist/core/tools/index.d.ts +1 -0
  96. package/dist/core/tools/index.d.ts.map +1 -1
  97. package/dist/core/tools/index.js +1 -0
  98. package/dist/core/tools/index.js.map +1 -1
  99. package/dist/core/tools/ipython.d.ts.map +1 -1
  100. package/dist/core/tools/ipython.js +9 -4
  101. package/dist/core/tools/ipython.js.map +1 -1
  102. package/dist/main.d.ts.map +1 -1
  103. package/dist/main.js +2 -11
  104. package/dist/main.js.map +1 -1
  105. package/dist/modes/acp/acp-mode.d.ts.map +1 -1
  106. package/dist/modes/acp/acp-mode.js +1 -1
  107. package/dist/modes/acp/acp-mode.js.map +1 -1
  108. package/dist/modes/agent-connection/daemon-agent-connection.d.ts +0 -2
  109. package/dist/modes/agent-connection/daemon-agent-connection.d.ts.map +1 -1
  110. package/dist/modes/agent-connection/daemon-agent-connection.js +0 -2
  111. package/dist/modes/agent-connection/daemon-agent-connection.js.map +1 -1
  112. package/dist/modes/agents-view/agents-view-mode.d.ts.map +1 -1
  113. package/dist/modes/agents-view/agents-view-mode.js +0 -19
  114. package/dist/modes/agents-view/agents-view-mode.js.map +1 -1
  115. package/dist/modes/daemon/daemon-mode.d.ts +1 -10
  116. package/dist/modes/daemon/daemon-mode.d.ts.map +1 -1
  117. package/dist/modes/daemon/daemon-mode.js +134 -274
  118. package/dist/modes/daemon/daemon-mode.js.map +1 -1
  119. package/dist/modes/daemon/daemon-protocol.d.ts +11 -5
  120. package/dist/modes/daemon/daemon-protocol.d.ts.map +1 -1
  121. package/dist/modes/daemon/daemon-protocol.js +6 -8
  122. package/dist/modes/daemon/daemon-protocol.js.map +1 -1
  123. package/dist/modes/daemon/daemon-supervisor.d.ts +0 -3
  124. package/dist/modes/daemon/daemon-supervisor.d.ts.map +1 -1
  125. package/dist/modes/daemon/daemon-supervisor.js +18 -52
  126. package/dist/modes/daemon/daemon-supervisor.js.map +1 -1
  127. package/dist/modes/daemon/daemon-worker-protocol.d.ts +1 -6
  128. package/dist/modes/daemon/daemon-worker-protocol.d.ts.map +1 -1
  129. package/dist/modes/daemon/daemon-worker-protocol.js +0 -2
  130. package/dist/modes/daemon/daemon-worker-protocol.js.map +1 -1
  131. package/dist/modes/interactive/auth-flows.d.ts +0 -2
  132. package/dist/modes/interactive/auth-flows.d.ts.map +1 -1
  133. package/dist/modes/interactive/auth-flows.js +1 -101
  134. package/dist/modes/interactive/auth-flows.js.map +1 -1
  135. package/dist/modes/interactive/components/assistant-message.d.ts +6 -1
  136. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  137. package/dist/modes/interactive/components/assistant-message.js +13 -3
  138. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  139. package/dist/modes/interactive/components/footer.d.ts +1 -1
  140. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  141. package/dist/modes/interactive/components/footer.js +2 -2
  142. package/dist/modes/interactive/components/footer.js.map +1 -1
  143. package/dist/modes/interactive/components/mermaid.d.ts +12 -0
  144. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
  145. package/dist/modes/interactive/components/mermaid.js +63 -0
  146. package/dist/modes/interactive/components/mermaid.js.map +1 -0
  147. package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
  148. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  149. package/dist/modes/interactive/components/settings-selector.js +10 -0
  150. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  151. package/dist/modes/interactive/feature-hints.d.ts.map +1 -1
  152. package/dist/modes/interactive/feature-hints.js +0 -4
  153. package/dist/modes/interactive/feature-hints.js.map +1 -1
  154. package/dist/modes/interactive/interactive-mode.d.ts +1 -7
  155. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  156. package/dist/modes/interactive/interactive-mode.js +23 -279
  157. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  158. package/dist/utils/version-check.d.ts.map +1 -1
  159. package/dist/utils/version-check.js +1 -1
  160. package/dist/utils/version-check.js.map +1 -1
  161. package/docs/settings.md +1 -31
  162. package/docs/usage.md +1 -4
  163. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  164. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  165. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  166. package/examples/extensions/sandbox/package-lock.json +2 -2
  167. package/examples/extensions/sandbox/package.json +1 -1
  168. package/examples/extensions/with-deps/package-lock.json +2 -2
  169. package/examples/extensions/with-deps/package.json +1 -1
  170. package/package.json +6 -5
  171. package/dist/core/agent-traces.d.ts +0 -130
  172. package/dist/core/agent-traces.d.ts.map +0 -1
  173. package/dist/core/agent-traces.js +0 -746
  174. package/dist/core/agent-traces.js.map +0 -1
  175. package/dist/core/telemetry.d.ts +0 -92
  176. package/dist/core/telemetry.d.ts.map +0 -1
  177. package/dist/core/telemetry.js +0 -633
  178. package/dist/core/telemetry.js.map +0 -1
@@ -5,8 +5,6 @@ import { homedir } from "node:os";
5
5
  import { basename, dirname, join } from "node:path";
6
6
  export const PRIME_INFERENCE_PROVIDER_ID = "prime-inference";
7
7
  export const PRIME_INFERENCE_PROVIDER_NAME = "Prime Inference";
8
- export const ASM_AGENT_TRACES_PROVIDER_ID = "asm-agent-traces";
9
- export const ASM_AGENT_TRACES_PROVIDER_NAME = "ASM Agent Traces";
10
8
  const DEFAULT_PRIME_API_BASE_URL = "https://api.primeintellect.ai";
11
9
  const DEFAULT_PRIME_FRONTEND_URL = "https://app.primeintellect.ai";
12
10
  const DEFAULT_PRIME_INFERENCE_URL = "https://api.pinference.ai/api/v1";
@@ -145,15 +143,6 @@ export function savePrimeCliTeamSelection(team, configPath = defaultPrimeCliConf
145
143
  writePrimeCliConfigData(configPath, data);
146
144
  return loadPrimeCliConfig(configPath);
147
145
  }
148
- export function resolveAsmAgentTracesBaseUrl(baseUrl) {
149
- return normalizeBaseUrl(baseUrl ?? stringEnv("ASM_AGENT_TRACES_BASE_URL"));
150
- }
151
- function resolveAsmAgentTracesChallengeConfig(config) {
152
- return {
153
- baseUrl: resolveAsmAgentTracesBaseUrl(),
154
- frontendUrl: stringEnv("ASM_AGENT_TRACES_BASE_URL") ? config.frontendUrl : DEFAULT_PRIME_FRONTEND_URL,
155
- };
156
- }
157
146
  function throwIfCancelled(signal) {
158
147
  if (signal?.aborted) {
159
148
  throw new Error("Login cancelled");
@@ -418,9 +407,6 @@ async function checkPrimeScopeAccess(apiKey, baseUrl, scopeName, scopeLabel, opt
418
407
  export async function checkPrimeInferenceAccess(apiKey, baseUrl, options = {}) {
419
408
  return checkPrimeScopeAccess(apiKey, baseUrl, "inference", "inference", options);
420
409
  }
421
- export async function checkAsmAgentTracesAccess(apiKey, baseUrl, options = {}) {
422
- return checkPrimeScopeAccess(apiKey, baseUrl, "agent_traces", "agent trace", options);
423
- }
424
410
  function formatAccessFailure(result) {
425
411
  const status = result.status === undefined ? "" : `HTTP ${result.status}: `;
426
412
  return `${status}${result.message}`;
@@ -460,40 +446,4 @@ export async function loginPrimeInference(callbacks, options = {}) {
460
446
  throwIfCancelled(callbacks.signal);
461
447
  return { apiKey, source: "browser" };
462
448
  }
463
- export async function loginAsmAgentTraces(callbacks, options = {}) {
464
- const config = loadPrimeCliConfig(options.configPath);
465
- const traceConfig = resolveAsmAgentTracesChallengeConfig(config);
466
- const fetchFn = options.fetchFn ?? fetch;
467
- const requestTimeoutMs = options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
468
- const pollIntervalMs = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
469
- if (config.apiKey) {
470
- callbacks.onProgress?.("Checking existing Prime CLI credentials...");
471
- const access = await checkAsmAgentTracesAccess(config.apiKey, traceConfig.baseUrl, {
472
- fetchFn,
473
- requestTimeoutMs,
474
- signal: callbacks.signal,
475
- });
476
- if (access.ok) {
477
- throwIfCancelled(callbacks.signal);
478
- return { apiKey: config.apiKey, source: "prime-cli" };
479
- }
480
- callbacks.onProgress?.(`Existing Prime CLI key cannot upload ASM Agent traces (${formatAccessFailure(access)}). Starting browser login...`);
481
- }
482
- else {
483
- callbacks.onProgress?.("No Prime CLI API key found. Starting browser login...");
484
- }
485
- const apiKey = await runPrimeBrowserLogin(traceConfig, callbacks, fetchFn, requestTimeoutMs, pollIntervalMs, "agent_traces");
486
- throwIfCancelled(callbacks.signal);
487
- callbacks.onProgress?.("Checking ASM Agent trace access...");
488
- const access = await checkAsmAgentTracesAccess(apiKey, traceConfig.baseUrl, {
489
- fetchFn,
490
- requestTimeoutMs,
491
- signal: callbacks.signal,
492
- });
493
- if (!access.ok) {
494
- throw new Error(`Prime API key does not have ASM Agent trace access (${formatAccessFailure(access)})`);
495
- }
496
- throwIfCancelled(callbacks.signal);
497
- return { apiKey, source: "browser" };
498
- }
499
449
  //# sourceMappingURL=prime-inference-auth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prime-inference-auth.js","sourceRoot":"","sources":["../../src/core/prime-inference-auth.ts"],"names":[],"mappings":"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","sourcesContent":["import { Buffer } from \"node:buffer\";\nimport { constants, generateKeyPairSync, privateDecrypt } from \"node:crypto\";\nimport {\n\tchmodSync,\n\tcloseSync,\n\texistsSync,\n\tmkdirSync,\n\topenSync,\n\treadFileSync,\n\trenameSync,\n\trmSync,\n\twriteFileSync,\n} from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { basename, dirname, join } from \"node:path\";\nimport type { OAuthAuthInfo } from \"@asm-agent/ai\";\n\nexport const PRIME_INFERENCE_PROVIDER_ID = \"prime-inference\";\nexport const PRIME_INFERENCE_PROVIDER_NAME = \"Prime Inference\";\nexport const ASM_AGENT_TRACES_PROVIDER_ID = \"asm-agent-traces\";\nexport const ASM_AGENT_TRACES_PROVIDER_NAME = \"ASM Agent Traces\";\n\nconst DEFAULT_PRIME_API_BASE_URL = \"https://api.primeintellect.ai\";\nconst DEFAULT_PRIME_FRONTEND_URL = \"https://app.primeintellect.ai\";\nconst DEFAULT_PRIME_INFERENCE_URL = \"https://api.pinference.ai/api/v1\";\nconst DEFAULT_REQUEST_TIMEOUT_MS = 30_000;\nconst DEFAULT_POLL_INTERVAL_MS = 5_000;\n\nexport type PrimeInferenceAuthSource = \"prime-cli\" | \"browser\";\n\nexport type PrimeInferenceLoginResult = {\n\tapiKey: string;\n\tsource: PrimeInferenceAuthSource;\n};\n\nexport type PrimeCliConfig = {\n\tapiKey?: string;\n\tbaseUrl: string;\n\tfrontendUrl: string;\n\tinferenceUrl: string;\n\tpath: string;\n\tteamId?: string;\n\tteamName?: string;\n\tteamRole?: string;\n\tteamIdFromEnv: boolean;\n};\n\nexport type PrimeInferenceLoginCallbacks = {\n\tonAuth: (info: OAuthAuthInfo) => void;\n\tonProgress?: (message: string) => void;\n\tsignal?: AbortSignal;\n};\n\nexport type PrimeInferenceLoginOptions = {\n\tconfigPath?: string;\n\tfetchFn?: typeof fetch;\n\tpollIntervalMs?: number;\n\trequestTimeoutMs?: number;\n};\n\ntype PrimeChallengeConfig = {\n\tbaseUrl: string;\n\tfrontendUrl: string;\n};\n\ntype PrimeChallengeResponse = {\n\tchallenge: string;\n\tstatusAuthToken: string;\n};\n\nexport type PrimeInferenceAccessResult =\n\t| { ok: true }\n\t| {\n\t\t\tok: false;\n\t\t\tstatus?: number;\n\t\t\tmessage: string;\n\t };\n\ntype PrimeAccessScope = \"inference\" | \"agent_traces\";\n\nexport type PrimeTeam = {\n\tteamId: string;\n\tname: string;\n\tslug?: string;\n\trole?: string;\n\tcreatedAt?: string;\n};\n\nfunction defaultPrimeCliConfigPath(): string {\n\treturn join(homedir(), \".prime\", \"config.json\");\n}\n\nexport function getPrimeCliConfigPath(configPath?: string): string {\n\treturn configPath ?? defaultPrimeCliConfigPath();\n}\n\nfunction normalizeBaseUrl(value: string | undefined): string {\n\treturn (value?.trim() || DEFAULT_PRIME_API_BASE_URL).replace(/\\/+$/, \"\").replace(/\\/api\\/v1$/, \"\");\n}\n\nfunction normalizeUrl(value: string | undefined, fallback: string): string {\n\treturn (value || fallback).trim().replace(/\\/+$/, \"\");\n}\n\nfunction stringField(data: Record<string, unknown>, key: string): string | undefined {\n\tconst value = data[key];\n\treturn typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction stringEnv(name: string): string | undefined {\n\tconst value = process.env[name];\n\treturn typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction numberField(data: Record<string, unknown>, key: string): number | undefined {\n\tconst value = data[key];\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction readPrimeCliConfigData(configPath: string): Record<string, unknown> {\n\tlet data: Record<string, unknown> = {};\n\tif (existsSync(configPath)) {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(readFileSync(configPath, \"utf-8\")) as unknown;\n\t\t\tif (isRecord(parsed)) {\n\t\t\t\tdata = parsed;\n\t\t\t}\n\t\t} catch {\n\t\t\tdata = {};\n\t\t}\n\t}\n\treturn data;\n}\n\nfunction writePrimeCliConfigData(configPath: string, data: Record<string, unknown>): void {\n\tconst dir = dirname(configPath);\n\tif (!existsSync(dir)) {\n\t\tmkdirSync(dir, { recursive: true, mode: 0o700 });\n\t}\n\tconst tempPath = join(\n\t\tdir,\n\t\t`.${basename(configPath)}.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}.tmp`,\n\t);\n\tlet fd: number | undefined = openSync(tempPath, \"wx\", 0o600);\n\ttry {\n\t\twriteFileSync(fd, `${JSON.stringify(data, null, 2)}\\n`, \"utf-8\");\n\t\tcloseSync(fd);\n\t\tfd = undefined;\n\t\tchmodSync(tempPath, 0o600);\n\t\trenameSync(tempPath, configPath);\n\t\tchmodSync(configPath, 0o600);\n\t} finally {\n\t\tif (fd !== undefined) {\n\t\t\tcloseSync(fd);\n\t\t}\n\t\tif (existsSync(tempPath)) {\n\t\t\trmSync(tempPath, { force: true });\n\t\t}\n\t}\n}\n\nfunction clearPrimeTeamFields(data: Record<string, unknown>): void {\n\tdelete data.team_id;\n\tdelete data.team_name;\n\tdelete data.team_role;\n}\n\nexport function loadPrimeCliConfig(configPath: string = defaultPrimeCliConfigPath()): PrimeCliConfig {\n\tconst data = readPrimeCliConfigData(configPath);\n\tconst teamIdFromEnv = stringEnv(\"PRIME_TEAM_ID\");\n\tconst teamId = teamIdFromEnv ?? stringField(data, \"team_id\");\n\n\tconst config: PrimeCliConfig = {\n\t\tbaseUrl: normalizeBaseUrl(stringField(data, \"base_url\")),\n\t\tfrontendUrl: normalizeUrl(stringField(data, \"frontend_url\"), DEFAULT_PRIME_FRONTEND_URL),\n\t\tinferenceUrl: normalizeUrl(stringField(data, \"inference_url\"), DEFAULT_PRIME_INFERENCE_URL),\n\t\tpath: configPath,\n\t\tteamIdFromEnv: teamIdFromEnv !== undefined,\n\t};\n\tconst apiKey = stringField(data, \"api_key\");\n\tif (apiKey) {\n\t\tconfig.apiKey = apiKey;\n\t}\n\tif (teamId) {\n\t\tconfig.teamId = teamId;\n\t}\n\tif (!teamIdFromEnv) {\n\t\tconst teamName = stringField(data, \"team_name\");\n\t\tconst teamRole = stringField(data, \"team_role\");\n\t\tif (teamName) {\n\t\t\tconfig.teamName = teamName;\n\t\t}\n\t\tif (teamRole) {\n\t\t\tconfig.teamRole = teamRole;\n\t\t}\n\t}\n\treturn config;\n}\n\nexport function savePrimeCliApiKey(apiKey: string, configPath: string = defaultPrimeCliConfigPath()): PrimeCliConfig {\n\tconst data = readPrimeCliConfigData(configPath);\n\tdata.api_key = apiKey;\n\tclearPrimeTeamFields(data);\n\twritePrimeCliConfigData(configPath, data);\n\treturn loadPrimeCliConfig(configPath);\n}\n\nexport function clearPrimeCliCredentials(configPath: string = defaultPrimeCliConfigPath()): PrimeCliConfig {\n\tconst data = readPrimeCliConfigData(configPath);\n\tdelete data.api_key;\n\tclearPrimeTeamFields(data);\n\twritePrimeCliConfigData(configPath, data);\n\treturn loadPrimeCliConfig(configPath);\n}\n\nexport function savePrimeCliTeamSelection(\n\tteam: PrimeTeam | null,\n\tconfigPath: string = defaultPrimeCliConfigPath(),\n): PrimeCliConfig {\n\tconst data = readPrimeCliConfigData(configPath);\n\tif (team) {\n\t\tdata.team_id = team.teamId;\n\t\tdata.team_name = team.name;\n\t\tif (team.role) {\n\t\t\tdata.team_role = team.role;\n\t\t} else {\n\t\t\tdelete data.team_role;\n\t\t}\n\t} else {\n\t\tclearPrimeTeamFields(data);\n\t}\n\twritePrimeCliConfigData(configPath, data);\n\treturn loadPrimeCliConfig(configPath);\n}\n\nexport function resolveAsmAgentTracesBaseUrl(baseUrl?: string): string {\n\treturn normalizeBaseUrl(baseUrl ?? stringEnv(\"ASM_AGENT_TRACES_BASE_URL\"));\n}\n\nfunction resolveAsmAgentTracesChallengeConfig(config: PrimeCliConfig): PrimeChallengeConfig {\n\treturn {\n\t\tbaseUrl: resolveAsmAgentTracesBaseUrl(),\n\t\tfrontendUrl: stringEnv(\"ASM_AGENT_TRACES_BASE_URL\") ? config.frontendUrl : DEFAULT_PRIME_FRONTEND_URL,\n\t};\n}\n\nfunction throwIfCancelled(signal?: AbortSignal): void {\n\tif (signal?.aborted) {\n\t\tthrow new Error(\"Login cancelled\");\n\t}\n}\n\nfunction abortableSleep(ms: number, signal?: AbortSignal): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tif (signal?.aborted) {\n\t\t\treject(new Error(\"Login cancelled\"));\n\t\t\treturn;\n\t\t}\n\n\t\tlet timeout: NodeJS.Timeout;\n\t\tconst onAbort = () => {\n\t\t\tclearTimeout(timeout);\n\t\t\treject(new Error(\"Login cancelled\"));\n\t\t};\n\t\ttimeout = setTimeout(() => {\n\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\tresolve();\n\t\t}, ms);\n\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n}\n\nasync function fetchWithTimeout(\n\tfetchFn: typeof fetch,\n\turl: string | URL,\n\tinit: RequestInit,\n\ttimeoutMs: number,\n\tsignal?: AbortSignal,\n): Promise<Response> {\n\tthrowIfCancelled(signal);\n\n\tconst controller = new AbortController();\n\tconst timeout = setTimeout(() => controller.abort(), timeoutMs);\n\tconst onAbort = () => controller.abort();\n\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\ttry {\n\t\treturn await fetchFn(url, { ...init, signal: controller.signal });\n\t} catch (error) {\n\t\tif (signal?.aborted) {\n\t\t\tthrow new Error(\"Login cancelled\");\n\t\t}\n\t\tif (controller.signal.aborted) {\n\t\t\tthrow new Error(\"Prime Inference request timed out\");\n\t\t}\n\t\tthrow error;\n\t} finally {\n\t\tclearTimeout(timeout);\n\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t}\n}\n\nasync function readResponseMessage(response: Response): Promise<string> {\n\tconst text = await response.text().catch(() => \"\");\n\tif (!text.trim()) {\n\t\treturn response.statusText || \"Unknown error\";\n\t}\n\n\ttry {\n\t\tconst parsed = JSON.parse(text) as unknown;\n\t\tif (isRecord(parsed)) {\n\t\t\tconst error = parsed.error;\n\t\t\tif (isRecord(error)) {\n\t\t\t\tconst message = stringField(error, \"message\");\n\t\t\t\tif (message) return message;\n\t\t\t}\n\t\t\tconst detail = stringField(parsed, \"detail\");\n\t\t\tif (detail) return detail;\n\t\t\tconst message = stringField(parsed, \"message\");\n\t\t\tif (message) return message;\n\t\t}\n\t} catch {\n\t\t// Fall back to raw text.\n\t}\n\n\treturn text.trim();\n}\n\nasync function readJsonObject(response: Response, context: string): Promise<Record<string, unknown>> {\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = (await response.json()) as unknown;\n\t} catch {\n\t\tthrow new Error(`${context} returned an invalid response`);\n\t}\n\tif (!isRecord(parsed)) {\n\t\tthrow new Error(`${context} returned an invalid response`);\n\t}\n\treturn parsed;\n}\n\nfunction parsePrimeTeam(value: unknown): PrimeTeam | undefined {\n\tif (!isRecord(value)) {\n\t\treturn undefined;\n\t}\n\tconst teamId = stringField(value, \"teamId\");\n\tif (!teamId) {\n\t\treturn undefined;\n\t}\n\n\tconst team: PrimeTeam = {\n\t\tteamId,\n\t\tname: stringField(value, \"name\") ?? \"Unknown\",\n\t};\n\tconst slug = stringField(value, \"slug\");\n\tconst role = stringField(value, \"role\");\n\tconst createdAt = stringField(value, \"createdAt\");\n\tif (slug) {\n\t\tteam.slug = slug;\n\t}\n\tif (role) {\n\t\tteam.role = role;\n\t}\n\tif (createdAt) {\n\t\tteam.createdAt = createdAt;\n\t}\n\treturn team;\n}\n\nexport async function fetchPrimeTeams(\n\tapiKey: string,\n\tbaseUrl: string,\n\toptions: {\n\t\tfetchFn?: typeof fetch;\n\t\trequestTimeoutMs?: number;\n\t\tsignal?: AbortSignal;\n\t} = {},\n): Promise<PrimeTeam[]> {\n\tconst fetchFn = options.fetchFn ?? fetch;\n\tconst requestTimeoutMs = options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;\n\tconst teams: PrimeTeam[] = [];\n\tlet offset = 0;\n\tconst limit = 100;\n\n\twhile (true) {\n\t\tconst url = new URL(`${normalizeBaseUrl(baseUrl)}/api/v1/user/teams`);\n\t\turl.searchParams.set(\"offset\", String(offset));\n\t\turl.searchParams.set(\"limit\", String(limit));\n\t\tconst response = await fetchWithTimeout(\n\t\t\tfetchFn,\n\t\t\turl,\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\theaders: {\n\t\t\t\t\tAuthorization: `Bearer ${apiKey}`,\n\t\t\t\t\tAccept: \"application/json\",\n\t\t\t\t},\n\t\t\t},\n\t\t\trequestTimeoutMs,\n\t\t\toptions.signal,\n\t\t);\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Failed to fetch Prime teams: ${await readResponseMessage(response)}`);\n\t\t}\n\n\t\tconst data = await readJsonObject(response, \"Prime teams\");\n\t\tconst batch = data.data;\n\t\tif (!Array.isArray(batch)) {\n\t\t\tthrow new Error(\"Prime teams response missing team data\");\n\t\t}\n\n\t\tfor (const item of batch) {\n\t\t\tconst team = parsePrimeTeam(item);\n\t\t\tif (team) {\n\t\t\t\tteams.push(team);\n\t\t\t}\n\t\t}\n\n\t\tconst totalCount = numberField(data, \"total_count\") ?? teams.length;\n\t\tif (batch.length === 0 || teams.length >= totalCount) {\n\t\t\tbreak;\n\t\t}\n\t\toffset += limit;\n\t}\n\n\treturn teams;\n}\n\nfunction createPrimeChallengeKeypair(): { privateKey: string; publicKey: string } {\n\tconst { privateKey, publicKey } = generateKeyPairSync(\"rsa\", {\n\t\tmodulusLength: 2048,\n\t\tpublicExponent: 0x10001,\n\t\tpublicKeyEncoding: {\n\t\t\ttype: \"spki\",\n\t\t\tformat: \"pem\",\n\t\t},\n\t\tprivateKeyEncoding: {\n\t\t\ttype: \"pkcs8\",\n\t\t\tformat: \"pem\",\n\t\t},\n\t});\n\treturn { privateKey, publicKey };\n}\n\nfunction decryptPrimeChallengeResult(privateKey: string, encryptedResult: string): string {\n\tconst decrypted = privateDecrypt(\n\t\t{\n\t\t\tkey: privateKey,\n\t\t\tpadding: constants.RSA_PKCS1_OAEP_PADDING,\n\t\t\toaepHash: \"sha256\",\n\t\t},\n\t\tBuffer.from(encryptedResult, \"base64\"),\n\t);\n\treturn decrypted.toString(\"utf-8\");\n}\n\nasync function generatePrimeChallenge(\n\tconfig: PrimeChallengeConfig,\n\tpublicKey: string,\n\tfetchFn: typeof fetch,\n\ttimeoutMs: number,\n\tsignal?: AbortSignal,\n): Promise<PrimeChallengeResponse> {\n\tconst response = await fetchWithTimeout(\n\t\tfetchFn,\n\t\t`${config.baseUrl}/api/v1/auth_challenge/generate`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\tbody: JSON.stringify({ encryptionPublicKey: publicKey }),\n\t\t},\n\t\ttimeoutMs,\n\t\tsignal,\n\t);\n\n\tif (!response.ok) {\n\t\tthrow new Error(`Failed to generate Prime login challenge: ${await readResponseMessage(response)}`);\n\t}\n\n\tconst data = await readJsonObject(response, \"Prime login challenge\");\n\tconst challenge = stringField(data, \"challenge\");\n\tconst statusAuthToken = stringField(data, \"status_auth_token\");\n\tif (!challenge || !statusAuthToken) {\n\t\tthrow new Error(\"Prime login challenge response missing required fields\");\n\t}\n\n\treturn { challenge, statusAuthToken };\n}\n\nasync function pollPrimeChallengeResult(\n\tconfig: PrimeChallengeConfig,\n\tchallenge: PrimeChallengeResponse,\n\tprivateKey: string,\n\tfetchFn: typeof fetch,\n\ttimeoutMs: number,\n\tpollIntervalMs: number,\n\tsignal?: AbortSignal,\n): Promise<string> {\n\twhile (true) {\n\t\tthrowIfCancelled(signal);\n\n\t\tconst statusUrl = new URL(`${config.baseUrl}/api/v1/auth_challenge/status`);\n\t\tstatusUrl.searchParams.set(\"challenge\", challenge.challenge);\n\t\tconst response = await fetchWithTimeout(\n\t\t\tfetchFn,\n\t\t\tstatusUrl,\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\theaders: { Authorization: `Bearer ${challenge.statusAuthToken}` },\n\t\t\t},\n\t\t\ttimeoutMs,\n\t\t\tsignal,\n\t\t);\n\n\t\tif (response.status === 404) {\n\t\t\tthrow new Error(\"Prime login challenge expired\");\n\t\t}\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Failed to check Prime login status: ${await readResponseMessage(response)}`);\n\t\t}\n\n\t\tconst data = await readJsonObject(response, \"Prime login status\");\n\t\tconst encryptedResult = stringField(data, \"result\");\n\t\tif (encryptedResult) {\n\t\t\treturn decryptPrimeChallengeResult(privateKey, encryptedResult);\n\t\t}\n\n\t\tawait abortableSleep(pollIntervalMs, signal);\n\t}\n}\n\nasync function runPrimeBrowserLogin(\n\tconfig: PrimeChallengeConfig,\n\tcallbacks: PrimeInferenceLoginCallbacks,\n\tfetchFn: typeof fetch,\n\ttimeoutMs: number,\n\tpollIntervalMs: number,\n\tscope?: PrimeAccessScope,\n): Promise<string> {\n\tconst { privateKey, publicKey } = createPrimeChallengeKeypair();\n\tconst challenge = await generatePrimeChallenge(config, publicKey, fetchFn, timeoutMs, callbacks.signal);\n\tconst url = new URL(`${config.frontendUrl}/dashboard/tokens/challenge`);\n\turl.searchParams.set(\"code\", challenge.challenge);\n\tif (scope) {\n\t\turl.searchParams.set(\"scope\", scope);\n\t}\n\tcallbacks.onAuth({ url: url.toString(), instructions: `Code: ${challenge.challenge}` });\n\treturn pollPrimeChallengeResult(config, challenge, privateKey, fetchFn, timeoutMs, pollIntervalMs, callbacks.signal);\n}\n\nasync function checkPrimeScopeAccess(\n\tapiKey: string,\n\tbaseUrl: string,\n\tscopeName: PrimeAccessScope,\n\tscopeLabel: string,\n\toptions: {\n\t\tfetchFn?: typeof fetch;\n\t\trequestTimeoutMs?: number;\n\t\tsignal?: AbortSignal;\n\t} = {},\n): Promise<PrimeInferenceAccessResult> {\n\tconst fetchFn = options.fetchFn ?? fetch;\n\tconst requestTimeoutMs = options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;\n\tconst url = `${normalizeBaseUrl(baseUrl)}/api/v1/user/whoami`;\n\tconst response = await fetchWithTimeout(\n\t\tfetchFn,\n\t\turl,\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${apiKey}`,\n\t\t\t\tAccept: \"application/json\",\n\t\t\t},\n\t\t},\n\t\trequestTimeoutMs,\n\t\toptions.signal,\n\t);\n\n\tif (!response.ok) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\tstatus: response.status,\n\t\t\tmessage: await readResponseMessage(response),\n\t\t};\n\t}\n\n\tconst data = await readJsonObject(response, \"Prime whoami\");\n\tconst user = data.data;\n\tif (!isRecord(user)) {\n\t\treturn { ok: false, message: \"Prime whoami response missing user data\" };\n\t}\n\n\tconst scope = user.scope;\n\tif (!isRecord(scope)) {\n\t\treturn { ok: false, message: \"Prime token is missing permission scope data\" };\n\t}\n\n\tconst scopedPermission = scope[scopeName];\n\tif (!isRecord(scopedPermission)) {\n\t\treturn { ok: false, message: `Prime token is missing ${scopeLabel} permissions` };\n\t}\n\n\tif (scopedPermission.write === true) {\n\t\treturn { ok: true };\n\t}\n\n\treturn { ok: false, message: `Prime token does not have ${scopeLabel} write permission` };\n}\n\nexport async function checkPrimeInferenceAccess(\n\tapiKey: string,\n\tbaseUrl: string,\n\toptions: {\n\t\tfetchFn?: typeof fetch;\n\t\trequestTimeoutMs?: number;\n\t\tsignal?: AbortSignal;\n\t} = {},\n): Promise<PrimeInferenceAccessResult> {\n\treturn checkPrimeScopeAccess(apiKey, baseUrl, \"inference\", \"inference\", options);\n}\n\nexport async function checkAsmAgentTracesAccess(\n\tapiKey: string,\n\tbaseUrl: string,\n\toptions: {\n\t\tfetchFn?: typeof fetch;\n\t\trequestTimeoutMs?: number;\n\t\tsignal?: AbortSignal;\n\t} = {},\n): Promise<PrimeInferenceAccessResult> {\n\treturn checkPrimeScopeAccess(apiKey, baseUrl, \"agent_traces\", \"agent trace\", options);\n}\n\nfunction formatAccessFailure(result: Exclude<PrimeInferenceAccessResult, { ok: true }>): string {\n\tconst status = result.status === undefined ? \"\" : `HTTP ${result.status}: `;\n\treturn `${status}${result.message}`;\n}\n\nexport async function loginPrimeInference(\n\tcallbacks: PrimeInferenceLoginCallbacks,\n\toptions: PrimeInferenceLoginOptions = {},\n): Promise<PrimeInferenceLoginResult> {\n\tconst config = loadPrimeCliConfig(options.configPath);\n\tconst fetchFn = options.fetchFn ?? fetch;\n\tconst requestTimeoutMs = options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;\n\tconst pollIntervalMs = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;\n\n\tif (config.apiKey) {\n\t\tcallbacks.onProgress?.(\"Checking existing Prime CLI credentials...\");\n\t\tconst access = await checkPrimeInferenceAccess(config.apiKey, config.baseUrl, {\n\t\t\tfetchFn,\n\t\t\trequestTimeoutMs,\n\t\t\tsignal: callbacks.signal,\n\t\t});\n\t\tif (access.ok) {\n\t\t\tthrowIfCancelled(callbacks.signal);\n\t\t\treturn { apiKey: config.apiKey, source: \"prime-cli\" };\n\t\t}\n\t\tcallbacks.onProgress?.(\n\t\t\t`Existing Prime CLI key cannot access Prime Inference (${formatAccessFailure(access)}). Starting browser login...`,\n\t\t);\n\t} else {\n\t\tcallbacks.onProgress?.(\"No Prime CLI API key found. Starting browser login...\");\n\t}\n\n\tconst apiKey = await runPrimeBrowserLogin(config, callbacks, fetchFn, requestTimeoutMs, pollIntervalMs);\n\tthrowIfCancelled(callbacks.signal);\n\tcallbacks.onProgress?.(\"Checking Prime Inference access...\");\n\tconst access = await checkPrimeInferenceAccess(apiKey, config.baseUrl, {\n\t\tfetchFn,\n\t\trequestTimeoutMs,\n\t\tsignal: callbacks.signal,\n\t});\n\tif (!access.ok) {\n\t\tthrow new Error(`Prime API key does not have Prime Inference access (${formatAccessFailure(access)})`);\n\t}\n\n\tthrowIfCancelled(callbacks.signal);\n\treturn { apiKey, source: \"browser\" };\n}\n\nexport async function loginAsmAgentTraces(\n\tcallbacks: PrimeInferenceLoginCallbacks,\n\toptions: PrimeInferenceLoginOptions = {},\n): Promise<PrimeInferenceLoginResult> {\n\tconst config = loadPrimeCliConfig(options.configPath);\n\tconst traceConfig = resolveAsmAgentTracesChallengeConfig(config);\n\tconst fetchFn = options.fetchFn ?? fetch;\n\tconst requestTimeoutMs = options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;\n\tconst pollIntervalMs = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;\n\n\tif (config.apiKey) {\n\t\tcallbacks.onProgress?.(\"Checking existing Prime CLI credentials...\");\n\t\tconst access = await checkAsmAgentTracesAccess(config.apiKey, traceConfig.baseUrl, {\n\t\t\tfetchFn,\n\t\t\trequestTimeoutMs,\n\t\t\tsignal: callbacks.signal,\n\t\t});\n\t\tif (access.ok) {\n\t\t\tthrowIfCancelled(callbacks.signal);\n\t\t\treturn { apiKey: config.apiKey, source: \"prime-cli\" };\n\t\t}\n\t\tcallbacks.onProgress?.(\n\t\t\t`Existing Prime CLI key cannot upload ASM Agent traces (${formatAccessFailure(access)}). Starting browser login...`,\n\t\t);\n\t} else {\n\t\tcallbacks.onProgress?.(\"No Prime CLI API key found. Starting browser login...\");\n\t}\n\n\tconst apiKey = await runPrimeBrowserLogin(\n\t\ttraceConfig,\n\t\tcallbacks,\n\t\tfetchFn,\n\t\trequestTimeoutMs,\n\t\tpollIntervalMs,\n\t\t\"agent_traces\",\n\t);\n\tthrowIfCancelled(callbacks.signal);\n\tcallbacks.onProgress?.(\"Checking ASM Agent trace access...\");\n\tconst access = await checkAsmAgentTracesAccess(apiKey, traceConfig.baseUrl, {\n\t\tfetchFn,\n\t\trequestTimeoutMs,\n\t\tsignal: callbacks.signal,\n\t});\n\tif (!access.ok) {\n\t\tthrow new Error(`Prime API key does not have ASM Agent trace access (${formatAccessFailure(access)})`);\n\t}\n\n\tthrowIfCancelled(callbacks.signal);\n\treturn { apiKey, source: \"browser\" };\n}\n"]}
1
+ {"version":3,"file":"prime-inference-auth.js","sourceRoot":"","sources":["../../src/core/prime-inference-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EACN,SAAS,EACT,SAAS,EACT,UAAU,EACV,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,MAAM,EACN,aAAa,GACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGpD,MAAM,CAAC,MAAM,2BAA2B,GAAG,iBAAiB,CAAC;AAC7D,MAAM,CAAC,MAAM,6BAA6B,GAAG,iBAAiB,CAAC;AAE/D,MAAM,0BAA0B,GAAG,+BAA+B,CAAC;AACnE,MAAM,0BAA0B,GAAG,+BAA+B,CAAC;AACnE,MAAM,2BAA2B,GAAG,kCAAkC,CAAC;AACvE,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAC1C,MAAM,wBAAwB,GAAG,KAAK,CAAC;AA8DvC,SAAS,yBAAyB,GAAW;IAC5C,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AAAA,CAChD;AAED,MAAM,UAAU,qBAAqB,CAAC,UAAmB,EAAU;IAClE,OAAO,UAAU,IAAI,yBAAyB,EAAE,CAAC;AAAA,CACjD;AAED,SAAS,gBAAgB,CAAC,KAAyB,EAAU;IAC5D,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,0BAA0B,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAAA,CACnG;AAED,SAAS,YAAY,CAAC,KAAyB,EAAE,QAAgB,EAAU;IAC1E,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAAA,CACtD;AAED,SAAS,WAAW,CAAC,IAA6B,EAAE,GAAW,EAAsB;IACpF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACxB,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAAA,CAC5E;AAED,SAAS,SAAS,CAAC,IAAY,EAAsB;IACpD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAAA,CAC5E;AAED,SAAS,WAAW,CAAC,IAA6B,EAAE,GAAW,EAAsB;IACpF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACxB,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAAA,CAC/E;AAED,SAAS,QAAQ,CAAC,KAAc,EAAoC;IACnE,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAAA,CAC5E;AAED,SAAS,sBAAsB,CAAC,UAAkB,EAA2B;IAC5E,IAAI,IAAI,GAA4B,EAAE,CAAC;IACvC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAY,CAAC;YACxE,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtB,IAAI,GAAG,MAAM,CAAC;YACf,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,IAAI,GAAG,EAAE,CAAC;QACX,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AAAA,CACZ;AAED,SAAS,uBAAuB,CAAC,UAAkB,EAAE,IAA6B,EAAQ;IACzF,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAChC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CACpB,GAAG,EACH,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAClG,CAAC;IACF,IAAI,EAAE,GAAuB,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7D,IAAI,CAAC;QACJ,aAAa,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjE,SAAS,CAAC,EAAE,CAAC,CAAC;QACd,EAAE,GAAG,SAAS,CAAC;QACf,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3B,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACjC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;YAAS,CAAC;QACV,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACtB,SAAS,CAAC,EAAE,CAAC,CAAC;QACf,CAAC;QACD,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnC,CAAC;IACF,CAAC;AAAA,CACD;AAED,SAAS,oBAAoB,CAAC,IAA6B,EAAQ;IAClE,OAAO,IAAI,CAAC,OAAO,CAAC;IACpB,OAAO,IAAI,CAAC,SAAS,CAAC;IACtB,OAAO,IAAI,CAAC,SAAS,CAAC;AAAA,CACtB;AAED,MAAM,UAAU,kBAAkB,CAAC,UAAU,GAAW,yBAAyB,EAAE,EAAkB;IACpG,MAAM,IAAI,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,aAAa,IAAI,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAE7D,MAAM,MAAM,GAAmB;QAC9B,OAAO,EAAE,gBAAgB,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACxD,WAAW,EAAE,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,0BAA0B,CAAC;QACxF,YAAY,EAAE,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,2BAA2B,CAAC;QAC3F,IAAI,EAAE,UAAU;QAChB,aAAa,EAAE,aAAa,KAAK,SAAS;KAC1C,CAAC;IACF,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC5C,IAAI,MAAM,EAAE,CAAC;QACZ,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACxB,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACZ,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACxB,CAAC;IACD,IAAI,CAAC,aAAa,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAChD,IAAI,QAAQ,EAAE,CAAC;YACd,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC5B,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACd,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC5B,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC;AAAA,CACd;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,UAAU,GAAW,yBAAyB,EAAE,EAAkB;IACpH,MAAM,IAAI,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACtB,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC3B,uBAAuB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC1C,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAC;AAAA,CACtC;AAED,MAAM,UAAU,wBAAwB,CAAC,UAAU,GAAW,yBAAyB,EAAE,EAAkB;IAC1G,MAAM,IAAI,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAChD,OAAO,IAAI,CAAC,OAAO,CAAC;IACpB,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC3B,uBAAuB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC1C,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAC;AAAA,CACtC;AAED,MAAM,UAAU,yBAAyB,CACxC,IAAsB,EACtB,UAAU,GAAW,yBAAyB,EAAE,EAC/B;IACjB,MAAM,IAAI,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAChD,IAAI,IAAI,EAAE,CAAC;QACV,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;QAC3B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;QAC5B,CAAC;aAAM,CAAC;YACP,OAAO,IAAI,CAAC,SAAS,CAAC;QACvB,CAAC;IACF,CAAC;SAAM,CAAC;QACP,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,uBAAuB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC1C,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAC;AAAA,CACtC;AAED,SAAS,gBAAgB,CAAC,MAAoB,EAAQ;IACrD,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACpC,CAAC;AAAA,CACD;AAED,SAAS,cAAc,CAAC,EAAU,EAAE,MAAoB,EAAiB;IACxE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;QACvC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACrC,OAAO;QACR,CAAC;QAED,IAAI,OAAuB,CAAC;QAC5B,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;YACrB,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAAA,CACrC,CAAC;QACF,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;YAC1B,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9C,OAAO,EAAE,CAAC;QAAA,CACV,EAAE,EAAE,CAAC,CAAC;QACP,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAAA,CAC3D,CAAC,CAAC;AAAA,CACH;AAED,KAAK,UAAU,gBAAgB,CAC9B,OAAqB,EACrB,GAAiB,EACjB,IAAiB,EACjB,SAAiB,EACjB,MAAoB,EACA;IACpB,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEzB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IACzC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3D,IAAI,CAAC;QACJ,OAAO,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IACnE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACtD,CAAC;QACD,MAAM,KAAK,CAAC;IACb,CAAC;YAAS,CAAC;QACV,YAAY,CAAC,OAAO,CAAC,CAAC;QACtB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;AAAA,CACD;AAED,KAAK,UAAU,mBAAmB,CAAC,QAAkB,EAAmB;IACvE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACnD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QAClB,OAAO,QAAQ,CAAC,UAAU,IAAI,eAAe,CAAC;IAC/C,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;QAC3C,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAC3B,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrB,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBAC9C,IAAI,OAAO;oBAAE,OAAO,OAAO,CAAC;YAC7B,CAAC;YACD,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC7C,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;YAC1B,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC/C,IAAI,OAAO;gBAAE,OAAO,OAAO,CAAC;QAC7B,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,yBAAyB;IAC1B,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,CACnB;AAED,KAAK,UAAU,cAAc,CAAC,QAAkB,EAAE,OAAe,EAAoC;IACpG,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACJ,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAY,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACR,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,+BAA+B,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,+BAA+B,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,MAAM,CAAC;AAAA,CACd;AAED,SAAS,cAAc,CAAC,KAAc,EAAyB;IAC9D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAc;QACvB,MAAM;QACN,IAAI,EAAE,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,SAAS;KAC7C,CAAC;IACF,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAClD,IAAI,IAAI,EAAE,CAAC;QACV,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,CAAC;IACD,IAAI,IAAI,EAAE,CAAC;QACV,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACf,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;IACD,OAAO,IAAI,CAAC;AAAA,CACZ;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACpC,MAAc,EACd,OAAe,EACf,OAAO,GAIH,EAAE,EACiB;IACvB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;IACzC,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,0BAA0B,CAAC;IAChF,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,KAAK,GAAG,GAAG,CAAC;IAElB,OAAO,IAAI,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,gBAAgB,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACtE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CACtC,OAAO,EACP,GAAG,EACH;YACC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACR,aAAa,EAAE,UAAU,MAAM,EAAE;gBACjC,MAAM,EAAE,kBAAkB;aAC1B;SACD,EACD,gBAAgB,EAChB,OAAO,CAAC,MAAM,CACd,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACxF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC3D,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,IAAI,EAAE,CAAC;gBACV,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;QACF,CAAC;QAED,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC;QACpE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;YACtD,MAAM;QACP,CAAC;QACD,MAAM,IAAI,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC;AAAA,CACb;AAED,SAAS,2BAA2B,GAA8C;IACjF,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,mBAAmB,CAAC,KAAK,EAAE;QAC5D,aAAa,EAAE,IAAI;QACnB,cAAc,EAAE,OAAO;QACvB,iBAAiB,EAAE;YAClB,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,KAAK;SACb;QACD,kBAAkB,EAAE;YACnB,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,KAAK;SACb;KACD,CAAC,CAAC;IACH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AAAA,CACjC;AAED,SAAS,2BAA2B,CAAC,UAAkB,EAAE,eAAuB,EAAU;IACzF,MAAM,SAAS,GAAG,cAAc,CAC/B;QACC,GAAG,EAAE,UAAU;QACf,OAAO,EAAE,SAAS,CAAC,sBAAsB;QACzC,QAAQ,EAAE,QAAQ;KAClB,EACD,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CACtC,CAAC;IACF,OAAO,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAAA,CACnC;AAED,KAAK,UAAU,sBAAsB,CACpC,MAA4B,EAC5B,SAAiB,EACjB,OAAqB,EACrB,SAAiB,EACjB,MAAoB,EACc;IAClC,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CACtC,OAAO,EACP,GAAG,MAAM,CAAC,OAAO,iCAAiC,EAClD;QACC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,mBAAmB,EAAE,SAAS,EAAE,CAAC;KACxD,EACD,SAAS,EACT,MAAM,CACN,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,6CAA6C,MAAM,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACrG,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACjD,MAAM,eAAe,GAAG,WAAW,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;IAC/D,IAAI,CAAC,SAAS,IAAI,CAAC,eAAe,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;AAAA,CACtC;AAED,KAAK,UAAU,wBAAwB,CACtC,MAA4B,EAC5B,SAAiC,EACjC,UAAkB,EAClB,OAAqB,EACrB,SAAiB,EACjB,cAAsB,EACtB,MAAoB,EACF;IAClB,OAAO,IAAI,EAAE,CAAC;QACb,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAEzB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,+BAA+B,CAAC,CAAC;QAC5E,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CACtC,OAAO,EACP,SAAS,EACT;YACC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,SAAS,CAAC,eAAe,EAAE,EAAE;SACjE,EACD,SAAS,EACT,MAAM,CACN,CAAC;QAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,uCAAuC,MAAM,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC/F,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;QAClE,MAAM,eAAe,GAAG,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACpD,IAAI,eAAe,EAAE,CAAC;YACrB,OAAO,2BAA2B,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,cAAc,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;AAAA,CACD;AAED,KAAK,UAAU,oBAAoB,CAClC,MAA4B,EAC5B,SAAuC,EACvC,OAAqB,EACrB,SAAiB,EACjB,cAAsB,EACtB,KAAwB,EACN;IAClB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,2BAA2B,EAAE,CAAC;IAChE,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACxG,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,WAAW,6BAA6B,CAAC,CAAC;IACxE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAClD,IAAI,KAAK,EAAE,CAAC;QACX,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IACD,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,SAAS,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACxF,OAAO,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;AAAA,CACrH;AAED,KAAK,UAAU,qBAAqB,CACnC,MAAc,EACd,OAAe,EACf,SAA2B,EAC3B,UAAkB,EAClB,OAAO,GAIH,EAAE,EACgC;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;IACzC,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,0BAA0B,CAAC;IAChF,MAAM,GAAG,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,qBAAqB,CAAC;IAC9D,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CACtC,OAAO,EACP,GAAG,EACH;QACC,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACR,aAAa,EAAE,UAAU,MAAM,EAAE;YACjC,MAAM,EAAE,kBAAkB;SAC1B;KACD,EACD,gBAAgB,EAChB,OAAO,CAAC,MAAM,CACd,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAClB,OAAO;YACN,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,OAAO,EAAE,MAAM,mBAAmB,CAAC,QAAQ,CAAC;SAC5C,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,yCAAyC,EAAE,CAAC;IAC1E,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACzB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAAC;IAC/E,CAAC;IAED,MAAM,gBAAgB,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,0BAA0B,UAAU,cAAc,EAAE,CAAC;IACnF,CAAC;IAED,IAAI,gBAAgB,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QACrC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACrB,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,6BAA6B,UAAU,mBAAmB,EAAE,CAAC;AAAA,CAC1F;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC9C,MAAc,EACd,OAAe,EACf,OAAO,GAIH,EAAE,EACgC;IACtC,OAAO,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AAAA,CACjF;AAED,SAAS,mBAAmB,CAAC,MAAyD,EAAU;IAC/F,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,MAAM,CAAC,MAAM,IAAI,CAAC;IAC5E,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;AAAA,CACpC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,SAAuC,EACvC,OAAO,GAA+B,EAAE,EACH;IACrC,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;IACzC,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,0BAA0B,CAAC;IAChF,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,wBAAwB,CAAC;IAE1E,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,SAAS,CAAC,UAAU,EAAE,CAAC,4CAA4C,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE;YAC7E,OAAO;YACP,gBAAgB;YAChB,MAAM,EAAE,SAAS,CAAC,MAAM;SACxB,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACnC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QACvD,CAAC;QACD,SAAS,CAAC,UAAU,EAAE,CACrB,yDAAyD,mBAAmB,CAAC,MAAM,CAAC,8BAA8B,CAClH,CAAC;IACH,CAAC;SAAM,CAAC;QACP,SAAS,CAAC,UAAU,EAAE,CAAC,uDAAuD,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC;IACxG,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACnC,SAAS,CAAC,UAAU,EAAE,CAAC,oCAAoC,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE;QACtE,OAAO;QACP,gBAAgB;QAChB,MAAM,EAAE,SAAS,CAAC,MAAM;KACxB,CAAC,CAAC;IACH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,uDAAuD,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACxG,CAAC;IAED,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACnC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAAA,CACrC","sourcesContent":["import { Buffer } from \"node:buffer\";\nimport { constants, generateKeyPairSync, privateDecrypt } from \"node:crypto\";\nimport {\n\tchmodSync,\n\tcloseSync,\n\texistsSync,\n\tmkdirSync,\n\topenSync,\n\treadFileSync,\n\trenameSync,\n\trmSync,\n\twriteFileSync,\n} from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { basename, dirname, join } from \"node:path\";\nimport type { OAuthAuthInfo } from \"@asm-agent/ai\";\n\nexport const PRIME_INFERENCE_PROVIDER_ID = \"prime-inference\";\nexport const PRIME_INFERENCE_PROVIDER_NAME = \"Prime Inference\";\n\nconst DEFAULT_PRIME_API_BASE_URL = \"https://api.primeintellect.ai\";\nconst DEFAULT_PRIME_FRONTEND_URL = \"https://app.primeintellect.ai\";\nconst DEFAULT_PRIME_INFERENCE_URL = \"https://api.pinference.ai/api/v1\";\nconst DEFAULT_REQUEST_TIMEOUT_MS = 30_000;\nconst DEFAULT_POLL_INTERVAL_MS = 5_000;\n\nexport type PrimeInferenceAuthSource = \"prime-cli\" | \"browser\";\n\nexport type PrimeInferenceLoginResult = {\n\tapiKey: string;\n\tsource: PrimeInferenceAuthSource;\n};\n\nexport type PrimeCliConfig = {\n\tapiKey?: string;\n\tbaseUrl: string;\n\tfrontendUrl: string;\n\tinferenceUrl: string;\n\tpath: string;\n\tteamId?: string;\n\tteamName?: string;\n\tteamRole?: string;\n\tteamIdFromEnv: boolean;\n};\n\nexport type PrimeInferenceLoginCallbacks = {\n\tonAuth: (info: OAuthAuthInfo) => void;\n\tonProgress?: (message: string) => void;\n\tsignal?: AbortSignal;\n};\n\nexport type PrimeInferenceLoginOptions = {\n\tconfigPath?: string;\n\tfetchFn?: typeof fetch;\n\tpollIntervalMs?: number;\n\trequestTimeoutMs?: number;\n};\n\ntype PrimeChallengeConfig = {\n\tbaseUrl: string;\n\tfrontendUrl: string;\n};\n\ntype PrimeChallengeResponse = {\n\tchallenge: string;\n\tstatusAuthToken: string;\n};\n\nexport type PrimeInferenceAccessResult =\n\t| { ok: true }\n\t| {\n\t\t\tok: false;\n\t\t\tstatus?: number;\n\t\t\tmessage: string;\n\t };\n\ntype PrimeAccessScope = \"inference\";\n\nexport type PrimeTeam = {\n\tteamId: string;\n\tname: string;\n\tslug?: string;\n\trole?: string;\n\tcreatedAt?: string;\n};\n\nfunction defaultPrimeCliConfigPath(): string {\n\treturn join(homedir(), \".prime\", \"config.json\");\n}\n\nexport function getPrimeCliConfigPath(configPath?: string): string {\n\treturn configPath ?? defaultPrimeCliConfigPath();\n}\n\nfunction normalizeBaseUrl(value: string | undefined): string {\n\treturn (value?.trim() || DEFAULT_PRIME_API_BASE_URL).replace(/\\/+$/, \"\").replace(/\\/api\\/v1$/, \"\");\n}\n\nfunction normalizeUrl(value: string | undefined, fallback: string): string {\n\treturn (value || fallback).trim().replace(/\\/+$/, \"\");\n}\n\nfunction stringField(data: Record<string, unknown>, key: string): string | undefined {\n\tconst value = data[key];\n\treturn typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction stringEnv(name: string): string | undefined {\n\tconst value = process.env[name];\n\treturn typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction numberField(data: Record<string, unknown>, key: string): number | undefined {\n\tconst value = data[key];\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction readPrimeCliConfigData(configPath: string): Record<string, unknown> {\n\tlet data: Record<string, unknown> = {};\n\tif (existsSync(configPath)) {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(readFileSync(configPath, \"utf-8\")) as unknown;\n\t\t\tif (isRecord(parsed)) {\n\t\t\t\tdata = parsed;\n\t\t\t}\n\t\t} catch {\n\t\t\tdata = {};\n\t\t}\n\t}\n\treturn data;\n}\n\nfunction writePrimeCliConfigData(configPath: string, data: Record<string, unknown>): void {\n\tconst dir = dirname(configPath);\n\tif (!existsSync(dir)) {\n\t\tmkdirSync(dir, { recursive: true, mode: 0o700 });\n\t}\n\tconst tempPath = join(\n\t\tdir,\n\t\t`.${basename(configPath)}.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}.tmp`,\n\t);\n\tlet fd: number | undefined = openSync(tempPath, \"wx\", 0o600);\n\ttry {\n\t\twriteFileSync(fd, `${JSON.stringify(data, null, 2)}\\n`, \"utf-8\");\n\t\tcloseSync(fd);\n\t\tfd = undefined;\n\t\tchmodSync(tempPath, 0o600);\n\t\trenameSync(tempPath, configPath);\n\t\tchmodSync(configPath, 0o600);\n\t} finally {\n\t\tif (fd !== undefined) {\n\t\t\tcloseSync(fd);\n\t\t}\n\t\tif (existsSync(tempPath)) {\n\t\t\trmSync(tempPath, { force: true });\n\t\t}\n\t}\n}\n\nfunction clearPrimeTeamFields(data: Record<string, unknown>): void {\n\tdelete data.team_id;\n\tdelete data.team_name;\n\tdelete data.team_role;\n}\n\nexport function loadPrimeCliConfig(configPath: string = defaultPrimeCliConfigPath()): PrimeCliConfig {\n\tconst data = readPrimeCliConfigData(configPath);\n\tconst teamIdFromEnv = stringEnv(\"PRIME_TEAM_ID\");\n\tconst teamId = teamIdFromEnv ?? stringField(data, \"team_id\");\n\n\tconst config: PrimeCliConfig = {\n\t\tbaseUrl: normalizeBaseUrl(stringField(data, \"base_url\")),\n\t\tfrontendUrl: normalizeUrl(stringField(data, \"frontend_url\"), DEFAULT_PRIME_FRONTEND_URL),\n\t\tinferenceUrl: normalizeUrl(stringField(data, \"inference_url\"), DEFAULT_PRIME_INFERENCE_URL),\n\t\tpath: configPath,\n\t\tteamIdFromEnv: teamIdFromEnv !== undefined,\n\t};\n\tconst apiKey = stringField(data, \"api_key\");\n\tif (apiKey) {\n\t\tconfig.apiKey = apiKey;\n\t}\n\tif (teamId) {\n\t\tconfig.teamId = teamId;\n\t}\n\tif (!teamIdFromEnv) {\n\t\tconst teamName = stringField(data, \"team_name\");\n\t\tconst teamRole = stringField(data, \"team_role\");\n\t\tif (teamName) {\n\t\t\tconfig.teamName = teamName;\n\t\t}\n\t\tif (teamRole) {\n\t\t\tconfig.teamRole = teamRole;\n\t\t}\n\t}\n\treturn config;\n}\n\nexport function savePrimeCliApiKey(apiKey: string, configPath: string = defaultPrimeCliConfigPath()): PrimeCliConfig {\n\tconst data = readPrimeCliConfigData(configPath);\n\tdata.api_key = apiKey;\n\tclearPrimeTeamFields(data);\n\twritePrimeCliConfigData(configPath, data);\n\treturn loadPrimeCliConfig(configPath);\n}\n\nexport function clearPrimeCliCredentials(configPath: string = defaultPrimeCliConfigPath()): PrimeCliConfig {\n\tconst data = readPrimeCliConfigData(configPath);\n\tdelete data.api_key;\n\tclearPrimeTeamFields(data);\n\twritePrimeCliConfigData(configPath, data);\n\treturn loadPrimeCliConfig(configPath);\n}\n\nexport function savePrimeCliTeamSelection(\n\tteam: PrimeTeam | null,\n\tconfigPath: string = defaultPrimeCliConfigPath(),\n): PrimeCliConfig {\n\tconst data = readPrimeCliConfigData(configPath);\n\tif (team) {\n\t\tdata.team_id = team.teamId;\n\t\tdata.team_name = team.name;\n\t\tif (team.role) {\n\t\t\tdata.team_role = team.role;\n\t\t} else {\n\t\t\tdelete data.team_role;\n\t\t}\n\t} else {\n\t\tclearPrimeTeamFields(data);\n\t}\n\twritePrimeCliConfigData(configPath, data);\n\treturn loadPrimeCliConfig(configPath);\n}\n\nfunction throwIfCancelled(signal?: AbortSignal): void {\n\tif (signal?.aborted) {\n\t\tthrow new Error(\"Login cancelled\");\n\t}\n}\n\nfunction abortableSleep(ms: number, signal?: AbortSignal): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tif (signal?.aborted) {\n\t\t\treject(new Error(\"Login cancelled\"));\n\t\t\treturn;\n\t\t}\n\n\t\tlet timeout: NodeJS.Timeout;\n\t\tconst onAbort = () => {\n\t\t\tclearTimeout(timeout);\n\t\t\treject(new Error(\"Login cancelled\"));\n\t\t};\n\t\ttimeout = setTimeout(() => {\n\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\tresolve();\n\t\t}, ms);\n\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n}\n\nasync function fetchWithTimeout(\n\tfetchFn: typeof fetch,\n\turl: string | URL,\n\tinit: RequestInit,\n\ttimeoutMs: number,\n\tsignal?: AbortSignal,\n): Promise<Response> {\n\tthrowIfCancelled(signal);\n\n\tconst controller = new AbortController();\n\tconst timeout = setTimeout(() => controller.abort(), timeoutMs);\n\tconst onAbort = () => controller.abort();\n\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\ttry {\n\t\treturn await fetchFn(url, { ...init, signal: controller.signal });\n\t} catch (error) {\n\t\tif (signal?.aborted) {\n\t\t\tthrow new Error(\"Login cancelled\");\n\t\t}\n\t\tif (controller.signal.aborted) {\n\t\t\tthrow new Error(\"Prime Inference request timed out\");\n\t\t}\n\t\tthrow error;\n\t} finally {\n\t\tclearTimeout(timeout);\n\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t}\n}\n\nasync function readResponseMessage(response: Response): Promise<string> {\n\tconst text = await response.text().catch(() => \"\");\n\tif (!text.trim()) {\n\t\treturn response.statusText || \"Unknown error\";\n\t}\n\n\ttry {\n\t\tconst parsed = JSON.parse(text) as unknown;\n\t\tif (isRecord(parsed)) {\n\t\t\tconst error = parsed.error;\n\t\t\tif (isRecord(error)) {\n\t\t\t\tconst message = stringField(error, \"message\");\n\t\t\t\tif (message) return message;\n\t\t\t}\n\t\t\tconst detail = stringField(parsed, \"detail\");\n\t\t\tif (detail) return detail;\n\t\t\tconst message = stringField(parsed, \"message\");\n\t\t\tif (message) return message;\n\t\t}\n\t} catch {\n\t\t// Fall back to raw text.\n\t}\n\n\treturn text.trim();\n}\n\nasync function readJsonObject(response: Response, context: string): Promise<Record<string, unknown>> {\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = (await response.json()) as unknown;\n\t} catch {\n\t\tthrow new Error(`${context} returned an invalid response`);\n\t}\n\tif (!isRecord(parsed)) {\n\t\tthrow new Error(`${context} returned an invalid response`);\n\t}\n\treturn parsed;\n}\n\nfunction parsePrimeTeam(value: unknown): PrimeTeam | undefined {\n\tif (!isRecord(value)) {\n\t\treturn undefined;\n\t}\n\tconst teamId = stringField(value, \"teamId\");\n\tif (!teamId) {\n\t\treturn undefined;\n\t}\n\n\tconst team: PrimeTeam = {\n\t\tteamId,\n\t\tname: stringField(value, \"name\") ?? \"Unknown\",\n\t};\n\tconst slug = stringField(value, \"slug\");\n\tconst role = stringField(value, \"role\");\n\tconst createdAt = stringField(value, \"createdAt\");\n\tif (slug) {\n\t\tteam.slug = slug;\n\t}\n\tif (role) {\n\t\tteam.role = role;\n\t}\n\tif (createdAt) {\n\t\tteam.createdAt = createdAt;\n\t}\n\treturn team;\n}\n\nexport async function fetchPrimeTeams(\n\tapiKey: string,\n\tbaseUrl: string,\n\toptions: {\n\t\tfetchFn?: typeof fetch;\n\t\trequestTimeoutMs?: number;\n\t\tsignal?: AbortSignal;\n\t} = {},\n): Promise<PrimeTeam[]> {\n\tconst fetchFn = options.fetchFn ?? fetch;\n\tconst requestTimeoutMs = options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;\n\tconst teams: PrimeTeam[] = [];\n\tlet offset = 0;\n\tconst limit = 100;\n\n\twhile (true) {\n\t\tconst url = new URL(`${normalizeBaseUrl(baseUrl)}/api/v1/user/teams`);\n\t\turl.searchParams.set(\"offset\", String(offset));\n\t\turl.searchParams.set(\"limit\", String(limit));\n\t\tconst response = await fetchWithTimeout(\n\t\t\tfetchFn,\n\t\t\turl,\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\theaders: {\n\t\t\t\t\tAuthorization: `Bearer ${apiKey}`,\n\t\t\t\t\tAccept: \"application/json\",\n\t\t\t\t},\n\t\t\t},\n\t\t\trequestTimeoutMs,\n\t\t\toptions.signal,\n\t\t);\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Failed to fetch Prime teams: ${await readResponseMessage(response)}`);\n\t\t}\n\n\t\tconst data = await readJsonObject(response, \"Prime teams\");\n\t\tconst batch = data.data;\n\t\tif (!Array.isArray(batch)) {\n\t\t\tthrow new Error(\"Prime teams response missing team data\");\n\t\t}\n\n\t\tfor (const item of batch) {\n\t\t\tconst team = parsePrimeTeam(item);\n\t\t\tif (team) {\n\t\t\t\tteams.push(team);\n\t\t\t}\n\t\t}\n\n\t\tconst totalCount = numberField(data, \"total_count\") ?? teams.length;\n\t\tif (batch.length === 0 || teams.length >= totalCount) {\n\t\t\tbreak;\n\t\t}\n\t\toffset += limit;\n\t}\n\n\treturn teams;\n}\n\nfunction createPrimeChallengeKeypair(): { privateKey: string; publicKey: string } {\n\tconst { privateKey, publicKey } = generateKeyPairSync(\"rsa\", {\n\t\tmodulusLength: 2048,\n\t\tpublicExponent: 0x10001,\n\t\tpublicKeyEncoding: {\n\t\t\ttype: \"spki\",\n\t\t\tformat: \"pem\",\n\t\t},\n\t\tprivateKeyEncoding: {\n\t\t\ttype: \"pkcs8\",\n\t\t\tformat: \"pem\",\n\t\t},\n\t});\n\treturn { privateKey, publicKey };\n}\n\nfunction decryptPrimeChallengeResult(privateKey: string, encryptedResult: string): string {\n\tconst decrypted = privateDecrypt(\n\t\t{\n\t\t\tkey: privateKey,\n\t\t\tpadding: constants.RSA_PKCS1_OAEP_PADDING,\n\t\t\toaepHash: \"sha256\",\n\t\t},\n\t\tBuffer.from(encryptedResult, \"base64\"),\n\t);\n\treturn decrypted.toString(\"utf-8\");\n}\n\nasync function generatePrimeChallenge(\n\tconfig: PrimeChallengeConfig,\n\tpublicKey: string,\n\tfetchFn: typeof fetch,\n\ttimeoutMs: number,\n\tsignal?: AbortSignal,\n): Promise<PrimeChallengeResponse> {\n\tconst response = await fetchWithTimeout(\n\t\tfetchFn,\n\t\t`${config.baseUrl}/api/v1/auth_challenge/generate`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\tbody: JSON.stringify({ encryptionPublicKey: publicKey }),\n\t\t},\n\t\ttimeoutMs,\n\t\tsignal,\n\t);\n\n\tif (!response.ok) {\n\t\tthrow new Error(`Failed to generate Prime login challenge: ${await readResponseMessage(response)}`);\n\t}\n\n\tconst data = await readJsonObject(response, \"Prime login challenge\");\n\tconst challenge = stringField(data, \"challenge\");\n\tconst statusAuthToken = stringField(data, \"status_auth_token\");\n\tif (!challenge || !statusAuthToken) {\n\t\tthrow new Error(\"Prime login challenge response missing required fields\");\n\t}\n\n\treturn { challenge, statusAuthToken };\n}\n\nasync function pollPrimeChallengeResult(\n\tconfig: PrimeChallengeConfig,\n\tchallenge: PrimeChallengeResponse,\n\tprivateKey: string,\n\tfetchFn: typeof fetch,\n\ttimeoutMs: number,\n\tpollIntervalMs: number,\n\tsignal?: AbortSignal,\n): Promise<string> {\n\twhile (true) {\n\t\tthrowIfCancelled(signal);\n\n\t\tconst statusUrl = new URL(`${config.baseUrl}/api/v1/auth_challenge/status`);\n\t\tstatusUrl.searchParams.set(\"challenge\", challenge.challenge);\n\t\tconst response = await fetchWithTimeout(\n\t\t\tfetchFn,\n\t\t\tstatusUrl,\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\theaders: { Authorization: `Bearer ${challenge.statusAuthToken}` },\n\t\t\t},\n\t\t\ttimeoutMs,\n\t\t\tsignal,\n\t\t);\n\n\t\tif (response.status === 404) {\n\t\t\tthrow new Error(\"Prime login challenge expired\");\n\t\t}\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Failed to check Prime login status: ${await readResponseMessage(response)}`);\n\t\t}\n\n\t\tconst data = await readJsonObject(response, \"Prime login status\");\n\t\tconst encryptedResult = stringField(data, \"result\");\n\t\tif (encryptedResult) {\n\t\t\treturn decryptPrimeChallengeResult(privateKey, encryptedResult);\n\t\t}\n\n\t\tawait abortableSleep(pollIntervalMs, signal);\n\t}\n}\n\nasync function runPrimeBrowserLogin(\n\tconfig: PrimeChallengeConfig,\n\tcallbacks: PrimeInferenceLoginCallbacks,\n\tfetchFn: typeof fetch,\n\ttimeoutMs: number,\n\tpollIntervalMs: number,\n\tscope?: PrimeAccessScope,\n): Promise<string> {\n\tconst { privateKey, publicKey } = createPrimeChallengeKeypair();\n\tconst challenge = await generatePrimeChallenge(config, publicKey, fetchFn, timeoutMs, callbacks.signal);\n\tconst url = new URL(`${config.frontendUrl}/dashboard/tokens/challenge`);\n\turl.searchParams.set(\"code\", challenge.challenge);\n\tif (scope) {\n\t\turl.searchParams.set(\"scope\", scope);\n\t}\n\tcallbacks.onAuth({ url: url.toString(), instructions: `Code: ${challenge.challenge}` });\n\treturn pollPrimeChallengeResult(config, challenge, privateKey, fetchFn, timeoutMs, pollIntervalMs, callbacks.signal);\n}\n\nasync function checkPrimeScopeAccess(\n\tapiKey: string,\n\tbaseUrl: string,\n\tscopeName: PrimeAccessScope,\n\tscopeLabel: string,\n\toptions: {\n\t\tfetchFn?: typeof fetch;\n\t\trequestTimeoutMs?: number;\n\t\tsignal?: AbortSignal;\n\t} = {},\n): Promise<PrimeInferenceAccessResult> {\n\tconst fetchFn = options.fetchFn ?? fetch;\n\tconst requestTimeoutMs = options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;\n\tconst url = `${normalizeBaseUrl(baseUrl)}/api/v1/user/whoami`;\n\tconst response = await fetchWithTimeout(\n\t\tfetchFn,\n\t\turl,\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${apiKey}`,\n\t\t\t\tAccept: \"application/json\",\n\t\t\t},\n\t\t},\n\t\trequestTimeoutMs,\n\t\toptions.signal,\n\t);\n\n\tif (!response.ok) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\tstatus: response.status,\n\t\t\tmessage: await readResponseMessage(response),\n\t\t};\n\t}\n\n\tconst data = await readJsonObject(response, \"Prime whoami\");\n\tconst user = data.data;\n\tif (!isRecord(user)) {\n\t\treturn { ok: false, message: \"Prime whoami response missing user data\" };\n\t}\n\n\tconst scope = user.scope;\n\tif (!isRecord(scope)) {\n\t\treturn { ok: false, message: \"Prime token is missing permission scope data\" };\n\t}\n\n\tconst scopedPermission = scope[scopeName];\n\tif (!isRecord(scopedPermission)) {\n\t\treturn { ok: false, message: `Prime token is missing ${scopeLabel} permissions` };\n\t}\n\n\tif (scopedPermission.write === true) {\n\t\treturn { ok: true };\n\t}\n\n\treturn { ok: false, message: `Prime token does not have ${scopeLabel} write permission` };\n}\n\nexport async function checkPrimeInferenceAccess(\n\tapiKey: string,\n\tbaseUrl: string,\n\toptions: {\n\t\tfetchFn?: typeof fetch;\n\t\trequestTimeoutMs?: number;\n\t\tsignal?: AbortSignal;\n\t} = {},\n): Promise<PrimeInferenceAccessResult> {\n\treturn checkPrimeScopeAccess(apiKey, baseUrl, \"inference\", \"inference\", options);\n}\n\nfunction formatAccessFailure(result: Exclude<PrimeInferenceAccessResult, { ok: true }>): string {\n\tconst status = result.status === undefined ? \"\" : `HTTP ${result.status}: `;\n\treturn `${status}${result.message}`;\n}\n\nexport async function loginPrimeInference(\n\tcallbacks: PrimeInferenceLoginCallbacks,\n\toptions: PrimeInferenceLoginOptions = {},\n): Promise<PrimeInferenceLoginResult> {\n\tconst config = loadPrimeCliConfig(options.configPath);\n\tconst fetchFn = options.fetchFn ?? fetch;\n\tconst requestTimeoutMs = options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;\n\tconst pollIntervalMs = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;\n\n\tif (config.apiKey) {\n\t\tcallbacks.onProgress?.(\"Checking existing Prime CLI credentials...\");\n\t\tconst access = await checkPrimeInferenceAccess(config.apiKey, config.baseUrl, {\n\t\t\tfetchFn,\n\t\t\trequestTimeoutMs,\n\t\t\tsignal: callbacks.signal,\n\t\t});\n\t\tif (access.ok) {\n\t\t\tthrowIfCancelled(callbacks.signal);\n\t\t\treturn { apiKey: config.apiKey, source: \"prime-cli\" };\n\t\t}\n\t\tcallbacks.onProgress?.(\n\t\t\t`Existing Prime CLI key cannot access Prime Inference (${formatAccessFailure(access)}). Starting browser login...`,\n\t\t);\n\t} else {\n\t\tcallbacks.onProgress?.(\"No Prime CLI API key found. Starting browser login...\");\n\t}\n\n\tconst apiKey = await runPrimeBrowserLogin(config, callbacks, fetchFn, requestTimeoutMs, pollIntervalMs);\n\tthrowIfCancelled(callbacks.signal);\n\tcallbacks.onProgress?.(\"Checking Prime Inference access...\");\n\tconst access = await checkPrimeInferenceAccess(apiKey, config.baseUrl, {\n\t\tfetchFn,\n\t\trequestTimeoutMs,\n\t\tsignal: callbacks.signal,\n\t});\n\tif (!access.ok) {\n\t\tthrow new Error(`Prime API key does not have Prime Inference access (${formatAccessFailure(access)})`);\n\t}\n\n\tthrowIfCancelled(callbacks.signal);\n\treturn { apiKey, source: \"browser\" };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"provider-display-names.d.ts","sourceRoot":"","sources":["../../src/core/provider-display-names.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,+BAA+B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAiClE,CAAC","sourcesContent":["export const BUILT_IN_PROVIDER_DISPLAY_NAMES: Record<string, string> = {\n\tanthropic: \"Anthropic\",\n\t\"amazon-bedrock\": \"Amazon Bedrock\",\n\t\"azure-openai-responses\": \"Azure OpenAI Responses\",\n\tcerebras: \"Cerebras\",\n\t\"cloudflare-ai-gateway\": \"Cloudflare AI Gateway\",\n\t\"cloudflare-workers-ai\": \"Cloudflare Workers AI\",\n\tdeepseek: \"DeepSeek\",\n\tfireworks: \"Fireworks\",\n\tgoogle: \"Google Gemini\",\n\t\"google-vertex\": \"Google Vertex AI\",\n\tgroq: \"Groq\",\n\thuggingface: \"Hugging Face\",\n\t\"kimi-coding\": \"Kimi For Coding\",\n\tmistral: \"Mistral\",\n\tminimax: \"MiniMax\",\n\t\"minimax-cn\": \"MiniMax (China)\",\n\tmoonshotai: \"Moonshot AI\",\n\t\"moonshotai-cn\": \"Moonshot AI (China)\",\n\topencode: \"OpenCode Zen\",\n\t\"opencode-go\": \"OpenCode Go\",\n\topenai: \"OpenAI\",\n\tollama: \"Ollama\",\n\topenrouter: \"OpenRouter\",\n\t\"asm-agent-traces\": \"ASM Agent Traces\",\n\t\"prime-inference\": \"Prime Inference\",\n\t\"vercel-ai-gateway\": \"Vercel AI Gateway\",\n\txai: \"xAI\",\n\tzai: \"ZAI\",\n\txiaomi: \"Xiaomi MiMo\",\n\t\"xiaomi-token-plan-cn\": \"Xiaomi MiMo Token Plan (China)\",\n\t\"xiaomi-token-plan-ams\": \"Xiaomi MiMo Token Plan (Amsterdam)\",\n\t\"xiaomi-token-plan-sgp\": \"Xiaomi MiMo Token Plan (Singapore)\",\n};\n"]}
1
+ {"version":3,"file":"provider-display-names.d.ts","sourceRoot":"","sources":["../../src/core/provider-display-names.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,+BAA+B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAgClE,CAAC","sourcesContent":["export const BUILT_IN_PROVIDER_DISPLAY_NAMES: Record<string, string> = {\n\tanthropic: \"Anthropic\",\n\t\"amazon-bedrock\": \"Amazon Bedrock\",\n\t\"azure-openai-responses\": \"Azure OpenAI Responses\",\n\tcerebras: \"Cerebras\",\n\t\"cloudflare-ai-gateway\": \"Cloudflare AI Gateway\",\n\t\"cloudflare-workers-ai\": \"Cloudflare Workers AI\",\n\tdeepseek: \"DeepSeek\",\n\tfireworks: \"Fireworks\",\n\tgoogle: \"Google Gemini\",\n\t\"google-vertex\": \"Google Vertex AI\",\n\tgroq: \"Groq\",\n\thuggingface: \"Hugging Face\",\n\t\"kimi-coding\": \"Kimi For Coding\",\n\tmistral: \"Mistral\",\n\tminimax: \"MiniMax\",\n\t\"minimax-cn\": \"MiniMax (China)\",\n\tmoonshotai: \"Moonshot AI\",\n\t\"moonshotai-cn\": \"Moonshot AI (China)\",\n\topencode: \"OpenCode Zen\",\n\t\"opencode-go\": \"OpenCode Go\",\n\topenai: \"OpenAI\",\n\tollama: \"Ollama\",\n\topenrouter: \"OpenRouter\",\n\t\"prime-inference\": \"Prime Inference\",\n\t\"vercel-ai-gateway\": \"Vercel AI Gateway\",\n\txai: \"xAI\",\n\tzai: \"ZAI\",\n\txiaomi: \"Xiaomi MiMo\",\n\t\"xiaomi-token-plan-cn\": \"Xiaomi MiMo Token Plan (China)\",\n\t\"xiaomi-token-plan-ams\": \"Xiaomi MiMo Token Plan (Amsterdam)\",\n\t\"xiaomi-token-plan-sgp\": \"Xiaomi MiMo Token Plan (Singapore)\",\n};\n"]}
@@ -22,7 +22,6 @@ export const BUILT_IN_PROVIDER_DISPLAY_NAMES = {
22
22
  openai: "OpenAI",
23
23
  ollama: "Ollama",
24
24
  openrouter: "OpenRouter",
25
- "asm-agent-traces": "ASM Agent Traces",
26
25
  "prime-inference": "Prime Inference",
27
26
  "vercel-ai-gateway": "Vercel AI Gateway",
28
27
  xai: "xAI",
@@ -1 +1 @@
1
- {"version":3,"file":"provider-display-names.js","sourceRoot":"","sources":["../../src/core/provider-display-names.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,+BAA+B,GAA2B;IACtE,SAAS,EAAE,WAAW;IACtB,gBAAgB,EAAE,gBAAgB;IAClC,wBAAwB,EAAE,wBAAwB;IAClD,QAAQ,EAAE,UAAU;IACpB,uBAAuB,EAAE,uBAAuB;IAChD,uBAAuB,EAAE,uBAAuB;IAChD,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,eAAe;IACvB,eAAe,EAAE,kBAAkB;IACnC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,cAAc;IAC3B,aAAa,EAAE,iBAAiB;IAChC,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,YAAY,EAAE,iBAAiB;IAC/B,UAAU,EAAE,aAAa;IACzB,eAAe,EAAE,qBAAqB;IACtC,QAAQ,EAAE,cAAc;IACxB,aAAa,EAAE,aAAa;IAC5B,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;IACxB,kBAAkB,EAAE,kBAAkB;IACtC,iBAAiB,EAAE,iBAAiB;IACpC,mBAAmB,EAAE,mBAAmB;IACxC,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,aAAa;IACrB,sBAAsB,EAAE,gCAAgC;IACxD,uBAAuB,EAAE,oCAAoC;IAC7D,uBAAuB,EAAE,oCAAoC;CAC7D,CAAC","sourcesContent":["export const BUILT_IN_PROVIDER_DISPLAY_NAMES: Record<string, string> = {\n\tanthropic: \"Anthropic\",\n\t\"amazon-bedrock\": \"Amazon Bedrock\",\n\t\"azure-openai-responses\": \"Azure OpenAI Responses\",\n\tcerebras: \"Cerebras\",\n\t\"cloudflare-ai-gateway\": \"Cloudflare AI Gateway\",\n\t\"cloudflare-workers-ai\": \"Cloudflare Workers AI\",\n\tdeepseek: \"DeepSeek\",\n\tfireworks: \"Fireworks\",\n\tgoogle: \"Google Gemini\",\n\t\"google-vertex\": \"Google Vertex AI\",\n\tgroq: \"Groq\",\n\thuggingface: \"Hugging Face\",\n\t\"kimi-coding\": \"Kimi For Coding\",\n\tmistral: \"Mistral\",\n\tminimax: \"MiniMax\",\n\t\"minimax-cn\": \"MiniMax (China)\",\n\tmoonshotai: \"Moonshot AI\",\n\t\"moonshotai-cn\": \"Moonshot AI (China)\",\n\topencode: \"OpenCode Zen\",\n\t\"opencode-go\": \"OpenCode Go\",\n\topenai: \"OpenAI\",\n\tollama: \"Ollama\",\n\topenrouter: \"OpenRouter\",\n\t\"asm-agent-traces\": \"ASM Agent Traces\",\n\t\"prime-inference\": \"Prime Inference\",\n\t\"vercel-ai-gateway\": \"Vercel AI Gateway\",\n\txai: \"xAI\",\n\tzai: \"ZAI\",\n\txiaomi: \"Xiaomi MiMo\",\n\t\"xiaomi-token-plan-cn\": \"Xiaomi MiMo Token Plan (China)\",\n\t\"xiaomi-token-plan-ams\": \"Xiaomi MiMo Token Plan (Amsterdam)\",\n\t\"xiaomi-token-plan-sgp\": \"Xiaomi MiMo Token Plan (Singapore)\",\n};\n"]}
1
+ {"version":3,"file":"provider-display-names.js","sourceRoot":"","sources":["../../src/core/provider-display-names.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,+BAA+B,GAA2B;IACtE,SAAS,EAAE,WAAW;IACtB,gBAAgB,EAAE,gBAAgB;IAClC,wBAAwB,EAAE,wBAAwB;IAClD,QAAQ,EAAE,UAAU;IACpB,uBAAuB,EAAE,uBAAuB;IAChD,uBAAuB,EAAE,uBAAuB;IAChD,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,eAAe;IACvB,eAAe,EAAE,kBAAkB;IACnC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,cAAc;IAC3B,aAAa,EAAE,iBAAiB;IAChC,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,YAAY,EAAE,iBAAiB;IAC/B,UAAU,EAAE,aAAa;IACzB,eAAe,EAAE,qBAAqB;IACtC,QAAQ,EAAE,cAAc;IACxB,aAAa,EAAE,aAAa;IAC5B,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;IACxB,iBAAiB,EAAE,iBAAiB;IACpC,mBAAmB,EAAE,mBAAmB;IACxC,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,aAAa;IACrB,sBAAsB,EAAE,gCAAgC;IACxD,uBAAuB,EAAE,oCAAoC;IAC7D,uBAAuB,EAAE,oCAAoC;CAC7D,CAAC","sourcesContent":["export const BUILT_IN_PROVIDER_DISPLAY_NAMES: Record<string, string> = {\n\tanthropic: \"Anthropic\",\n\t\"amazon-bedrock\": \"Amazon Bedrock\",\n\t\"azure-openai-responses\": \"Azure OpenAI Responses\",\n\tcerebras: \"Cerebras\",\n\t\"cloudflare-ai-gateway\": \"Cloudflare AI Gateway\",\n\t\"cloudflare-workers-ai\": \"Cloudflare Workers AI\",\n\tdeepseek: \"DeepSeek\",\n\tfireworks: \"Fireworks\",\n\tgoogle: \"Google Gemini\",\n\t\"google-vertex\": \"Google Vertex AI\",\n\tgroq: \"Groq\",\n\thuggingface: \"Hugging Face\",\n\t\"kimi-coding\": \"Kimi For Coding\",\n\tmistral: \"Mistral\",\n\tminimax: \"MiniMax\",\n\t\"minimax-cn\": \"MiniMax (China)\",\n\tmoonshotai: \"Moonshot AI\",\n\t\"moonshotai-cn\": \"Moonshot AI (China)\",\n\topencode: \"OpenCode Zen\",\n\t\"opencode-go\": \"OpenCode Go\",\n\topenai: \"OpenAI\",\n\tollama: \"Ollama\",\n\topenrouter: \"OpenRouter\",\n\t\"prime-inference\": \"Prime Inference\",\n\t\"vercel-ai-gateway\": \"Vercel AI Gateway\",\n\txai: \"xAI\",\n\tzai: \"ZAI\",\n\txiaomi: \"Xiaomi MiMo\",\n\t\"xiaomi-token-plan-cn\": \"Xiaomi MiMo Token Plan (China)\",\n\t\"xiaomi-token-plan-ams\": \"Xiaomi MiMo Token Plan (Amsterdam)\",\n\t\"xiaomi-token-plan-sgp\": \"Xiaomi MiMo Token Plan (Singapore)\",\n};\n"]}
@@ -18,7 +18,6 @@ export interface NewSessionOptions {
18
18
  parentSession?: string;
19
19
  rlmDepth?: number;
20
20
  }
21
- export type SessionPersistListener = (sessionFile: string) => void;
22
21
  export interface SessionEntryBase {
23
22
  type: string;
24
23
  id: string;
@@ -185,7 +184,6 @@ export declare class SessionManager {
185
184
  private labelsById;
186
185
  private labelTimestampsById;
187
186
  private leafId;
188
- private persistListeners;
189
187
  private constructor();
190
188
  /**
191
189
  * Switch to a different session file (used for resume and branching).
@@ -196,8 +194,6 @@ export declare class SessionManager {
196
194
  newSession(options?: NewSessionOptions): string | undefined;
197
195
  private _buildIndex;
198
196
  private _rewriteFile;
199
- private _notifyPersistListeners;
200
- onPersist(listener: SessionPersistListener): () => void;
201
197
  isPersisted(): boolean;
202
198
  getCwd(): string;
203
199
  getSessionDir(): string;