@ponythewhite/base-context 1.0.0 → 1.0.1

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 (285) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/NOTICE +0 -5
  3. package/README.md +44 -27
  4. package/dist/NOTICE +0 -5
  5. package/dist/base-context-runtime/pyproject.toml +1 -1
  6. package/dist/base-context-runtime/src/rlm/__init__.py +7 -5
  7. package/dist/base-context-runtime/test/test_subagent_registry.py +28 -1
  8. package/dist/base-context-runtime/uv.lock +1 -1
  9. package/dist/build-info.json +1 -1
  10. package/dist/bundle/amazon-bedrock.js +21 -0
  11. package/dist/bundle/{anthropic-YY4S534V.js → anthropic-UV5GZDGU.js} +5 -5
  12. package/dist/bundle/{azure-openai-responses-JRP6MIM3.js → azure-openai-responses-WSNPXLYC.js} +6 -6
  13. package/dist/bundle/{bundled-modules-P5HARVZA.js → bundled-modules-TXUMJ2XQ.js} +71 -16
  14. package/dist/bundle/chunk-27QCJ2AZ.js +2578 -0
  15. package/dist/bundle/{chunk-MZHTNNVA.js → chunk-4GXPNXOJ.js} +8 -0
  16. package/dist/bundle/{chunk-SC5KG5R4.js → chunk-DGNX7HQ3.js} +1 -7
  17. package/dist/bundle/{chunk-A53O363M.js → chunk-GRJFXLBM.js} +0 -1
  18. package/dist/bundle/chunk-HKINIBP4.js +29 -0
  19. package/dist/bundle/{chunk-UDSW6FNG.js → chunk-KTNETTHI.js} +1 -1
  20. package/dist/bundle/{chunk-BYVP7LWV.js → chunk-S3INFPZZ.js} +1861 -4662
  21. package/dist/bundle/{chunk-73DCPU3D.js → chunk-V3L54UD6.js} +1019 -3427
  22. package/dist/bundle/{chunk-U7AUVG3B.js → chunk-VSIYFWYI.js} +24 -6
  23. package/dist/bundle/{chunk-IW77OXFS.js → chunk-W46VZFI6.js} +0 -2099
  24. package/dist/bundle/{cli-main-O4X7GFGY.js → cli-main-BYMSRPH6.js} +8 -6
  25. package/dist/bundle/cli.js +2 -2
  26. package/dist/bundle/{google-AUTVGDGZ.js → google-T32FMD4G.js} +6 -6
  27. package/dist/bundle/{google-vertex-Q75D7RKS.js → google-vertex-56KP6I3B.js} +3 -3
  28. package/dist/bundle/{main-XKOW2BV6.js → main-ODOYCEQC.js} +7 -5
  29. package/dist/bundle/{mistral-7ESB7QUD.js → mistral-WGBMYIVU.js} +5 -5
  30. package/dist/bundle/{openai-codex-responses-LV3QRPN4.js → openai-codex-responses-PIV2RQ3G.js} +6 -6
  31. package/dist/bundle/{openai-completions-OJECLPXJ.js → openai-completions-64C3JPR4.js} +11 -22
  32. package/dist/bundle/{openai-responses-FN6HZMBC.js → openai-responses-UI7RSTDV.js} +6 -6
  33. package/dist/cli/args.d.ts.map +1 -1
  34. package/dist/cli/args.js +108 -59
  35. package/dist/cli/args.js.map +1 -1
  36. package/dist/cli/daemon-ps.d.ts +4 -3
  37. package/dist/cli/daemon-ps.d.ts.map +1 -1
  38. package/dist/cli/daemon-ps.js +6 -1
  39. package/dist/cli/daemon-ps.js.map +1 -1
  40. package/dist/cli/product-doctor.d.ts +0 -1
  41. package/dist/cli/product-doctor.d.ts.map +1 -1
  42. package/dist/cli/product-doctor.js +6 -3
  43. package/dist/cli/product-doctor.js.map +1 -1
  44. package/dist/config.d.ts +0 -3
  45. package/dist/config.d.ts.map +1 -1
  46. package/dist/config.js +0 -8
  47. package/dist/config.js.map +1 -1
  48. package/dist/core/agent-session-config.d.ts +1 -2
  49. package/dist/core/agent-session-config.d.ts.map +1 -1
  50. package/dist/core/agent-session-config.js +0 -3
  51. package/dist/core/agent-session-config.js.map +1 -1
  52. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  53. package/dist/core/agent-session-runtime.js +5 -4
  54. package/dist/core/agent-session-runtime.js.map +1 -1
  55. package/dist/core/agent-session-services.d.ts +5 -3
  56. package/dist/core/agent-session-services.d.ts.map +1 -1
  57. package/dist/core/agent-session-services.js +2 -27
  58. package/dist/core/agent-session-services.js.map +1 -1
  59. package/dist/core/agent-session.d.ts +10 -6
  60. package/dist/core/agent-session.d.ts.map +1 -1
  61. package/dist/core/agent-session.js +107 -107
  62. package/dist/core/agent-session.js.map +1 -1
  63. package/dist/core/auth-storage.d.ts +8 -35
  64. package/dist/core/auth-storage.d.ts.map +1 -1
  65. package/dist/core/auth-storage.js +33 -243
  66. package/dist/core/auth-storage.js.map +1 -1
  67. package/dist/core/cron-jobs.d.ts.map +1 -1
  68. package/dist/core/cron-jobs.js +7 -1
  69. package/dist/core/cron-jobs.js.map +1 -1
  70. package/dist/core/inference-coordinator.d.ts +6 -1
  71. package/dist/core/inference-coordinator.d.ts.map +1 -1
  72. package/dist/core/inference-coordinator.js +18 -2
  73. package/dist/core/inference-coordinator.js.map +1 -1
  74. package/dist/core/kernel/bootstrap.d.ts.map +1 -1
  75. package/dist/core/kernel/bootstrap.js +2 -2
  76. package/dist/core/kernel/bootstrap.js.map +1 -1
  77. package/dist/core/kernel/repl-manager.d.ts +2 -0
  78. package/dist/core/kernel/repl-manager.d.ts.map +1 -1
  79. package/dist/core/kernel/repl-manager.js +44 -1
  80. package/dist/core/kernel/repl-manager.js.map +1 -1
  81. package/dist/core/logging.d.ts +4 -3
  82. package/dist/core/logging.d.ts.map +1 -1
  83. package/dist/core/logging.js +6 -6
  84. package/dist/core/logging.js.map +1 -1
  85. package/dist/core/mcp/mcp-manager.d.ts.map +1 -1
  86. package/dist/core/mcp/mcp-manager.js +3 -3
  87. package/dist/core/mcp/mcp-manager.js.map +1 -1
  88. package/dist/core/model-registry.d.ts +1 -16
  89. package/dist/core/model-registry.d.ts.map +1 -1
  90. package/dist/core/model-registry.js +88 -196
  91. package/dist/core/model-registry.js.map +1 -1
  92. package/dist/core/model-resolver.d.ts +2 -19
  93. package/dist/core/model-resolver.d.ts.map +1 -1
  94. package/dist/core/model-resolver.js +36 -266
  95. package/dist/core/model-resolver.js.map +1 -1
  96. package/dist/core/provider-contracts.d.ts +5 -6
  97. package/dist/core/provider-contracts.d.ts.map +1 -1
  98. package/dist/core/provider-contracts.js +25 -36
  99. package/dist/core/provider-contracts.js.map +1 -1
  100. package/dist/core/provider-display-names.d.ts.map +1 -1
  101. package/dist/core/provider-display-names.js +0 -2
  102. package/dist/core/provider-display-names.js.map +1 -1
  103. package/dist/core/rlm-max-subagents.d.ts +32 -0
  104. package/dist/core/rlm-max-subagents.d.ts.map +1 -0
  105. package/dist/core/rlm-max-subagents.js +50 -0
  106. package/dist/core/rlm-max-subagents.js.map +1 -0
  107. package/dist/core/rlm-runtime.d.ts +3 -3
  108. package/dist/core/rlm-runtime.d.ts.map +1 -1
  109. package/dist/core/rlm-runtime.js.map +1 -1
  110. package/dist/core/sdk.d.ts +4 -3
  111. package/dist/core/sdk.d.ts.map +1 -1
  112. package/dist/core/sdk.js +27 -14
  113. package/dist/core/sdk.js.map +1 -1
  114. package/dist/core/settings-manager.d.ts +3 -16
  115. package/dist/core/settings-manager.d.ts.map +1 -1
  116. package/dist/core/settings-manager.js +12 -44
  117. package/dist/core/settings-manager.js.map +1 -1
  118. package/dist/core/slash-commands.d.ts.map +1 -1
  119. package/dist/core/slash-commands.js +6 -6
  120. package/dist/core/slash-commands.js.map +1 -1
  121. package/dist/index.d.ts +1 -1
  122. package/dist/index.d.ts.map +1 -1
  123. package/dist/index.js.map +1 -1
  124. package/dist/installer.mjs +2 -3
  125. package/dist/main.d.ts.map +1 -1
  126. package/dist/main.js +39 -34
  127. package/dist/main.js.map +1 -1
  128. package/dist/modes/acp/acp-mode.d.ts.map +1 -1
  129. package/dist/modes/acp/acp-mode.js +1 -1
  130. package/dist/modes/acp/acp-mode.js.map +1 -1
  131. package/dist/modes/agent-connection/daemon-agent-connection.d.ts +6 -2
  132. package/dist/modes/agent-connection/daemon-agent-connection.d.ts.map +1 -1
  133. package/dist/modes/agent-connection/daemon-agent-connection.js +13 -2
  134. package/dist/modes/agent-connection/daemon-agent-connection.js.map +1 -1
  135. package/dist/modes/agent-connection/in-process-agent-connection.d.ts +2 -0
  136. package/dist/modes/agent-connection/in-process-agent-connection.d.ts.map +1 -1
  137. package/dist/modes/agent-connection/in-process-agent-connection.js +6 -0
  138. package/dist/modes/agent-connection/in-process-agent-connection.js.map +1 -1
  139. package/dist/modes/agent-connection/types.d.ts +3 -0
  140. package/dist/modes/agent-connection/types.d.ts.map +1 -1
  141. package/dist/modes/agent-connection/types.js.map +1 -1
  142. package/dist/modes/agents-view/agents-view-mode.d.ts.map +1 -1
  143. package/dist/modes/agents-view/agents-view-mode.js +2 -19
  144. package/dist/modes/agents-view/agents-view-mode.js.map +1 -1
  145. package/dist/modes/daemon/daemon-mode.d.ts +5 -0
  146. package/dist/modes/daemon/daemon-mode.d.ts.map +1 -1
  147. package/dist/modes/daemon/daemon-mode.js +107 -12
  148. package/dist/modes/daemon/daemon-mode.js.map +1 -1
  149. package/dist/modes/daemon/daemon-protocol.d.ts +194 -165
  150. package/dist/modes/daemon/daemon-protocol.d.ts.map +1 -1
  151. package/dist/modes/daemon/daemon-protocol.js +16 -11
  152. package/dist/modes/daemon/daemon-protocol.js.map +1 -1
  153. package/dist/modes/daemon/daemon-rlm-capacity-coordinator.d.ts +19 -0
  154. package/dist/modes/daemon/daemon-rlm-capacity-coordinator.d.ts.map +1 -0
  155. package/dist/modes/daemon/daemon-rlm-capacity-coordinator.js +74 -0
  156. package/dist/modes/daemon/daemon-rlm-capacity-coordinator.js.map +1 -0
  157. package/dist/modes/daemon/daemon-rlm-capacity.d.ts +19 -0
  158. package/dist/modes/daemon/daemon-rlm-capacity.d.ts.map +1 -0
  159. package/dist/modes/daemon/daemon-rlm-capacity.js +85 -0
  160. package/dist/modes/daemon/daemon-rlm-capacity.js.map +1 -0
  161. package/dist/modes/daemon/daemon-session-summarizer.d.ts +2 -3
  162. package/dist/modes/daemon/daemon-session-summarizer.d.ts.map +1 -1
  163. package/dist/modes/daemon/daemon-session-summarizer.js +32 -23
  164. package/dist/modes/daemon/daemon-session-summarizer.js.map +1 -1
  165. package/dist/modes/daemon/daemon-state-root.d.ts +15 -0
  166. package/dist/modes/daemon/daemon-state-root.d.ts.map +1 -0
  167. package/dist/modes/daemon/daemon-state-root.js +40 -0
  168. package/dist/modes/daemon/daemon-state-root.js.map +1 -0
  169. package/dist/modes/daemon/daemon-supervisor-ownership.d.ts +2 -0
  170. package/dist/modes/daemon/daemon-supervisor-ownership.d.ts.map +1 -1
  171. package/dist/modes/daemon/daemon-supervisor-ownership.js +27 -0
  172. package/dist/modes/daemon/daemon-supervisor-ownership.js.map +1 -1
  173. package/dist/modes/daemon/daemon-supervisor.d.ts +10 -1
  174. package/dist/modes/daemon/daemon-supervisor.d.ts.map +1 -1
  175. package/dist/modes/daemon/daemon-supervisor.js +213 -20
  176. package/dist/modes/daemon/daemon-supervisor.js.map +1 -1
  177. package/dist/modes/daemon/daemon-worker-protocol.d.ts +28 -1
  178. package/dist/modes/daemon/daemon-worker-protocol.d.ts.map +1 -1
  179. package/dist/modes/daemon/daemon-worker-protocol.js +16 -2
  180. package/dist/modes/daemon/daemon-worker-protocol.js.map +1 -1
  181. package/dist/modes/daemon/saved-session-catalog.d.ts.map +1 -1
  182. package/dist/modes/daemon/saved-session-catalog.js +2 -0
  183. package/dist/modes/daemon/saved-session-catalog.js.map +1 -1
  184. package/dist/modes/interactive/auth-flows.d.ts +0 -6
  185. package/dist/modes/interactive/auth-flows.d.ts.map +1 -1
  186. package/dist/modes/interactive/auth-flows.js +6 -126
  187. package/dist/modes/interactive/auth-flows.js.map +1 -1
  188. package/dist/modes/interactive/components/configuration-menu.d.ts +3 -0
  189. package/dist/modes/interactive/components/configuration-menu.d.ts.map +1 -1
  190. package/dist/modes/interactive/components/configuration-menu.js +13 -2
  191. package/dist/modes/interactive/components/configuration-menu.js.map +1 -1
  192. package/dist/modes/interactive/components/footer.d.ts +1 -1
  193. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  194. package/dist/modes/interactive/components/footer.js +2 -2
  195. package/dist/modes/interactive/components/footer.js.map +1 -1
  196. package/dist/modes/interactive/components/index.d.ts +0 -1
  197. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  198. package/dist/modes/interactive/components/index.js +0 -1
  199. package/dist/modes/interactive/components/index.js.map +1 -1
  200. package/dist/modes/interactive/components/login-dialog.d.ts +0 -1
  201. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  202. package/dist/modes/interactive/components/login-dialog.js +3 -40
  203. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  204. package/dist/modes/interactive/components/model-selector.d.ts +2 -0
  205. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  206. package/dist/modes/interactive/components/model-selector.js +13 -2
  207. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  208. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  209. package/dist/modes/interactive/components/oauth-selector.js +2 -11
  210. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  211. package/dist/modes/interactive/feature-hints.d.ts.map +1 -1
  212. package/dist/modes/interactive/feature-hints.js +0 -4
  213. package/dist/modes/interactive/feature-hints.js.map +1 -1
  214. package/dist/modes/interactive/interactive-mode.d.ts +3 -12
  215. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  216. package/dist/modes/interactive/interactive-mode.js +81 -507
  217. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  218. package/dist/modes/interactive/onboarding.d.ts +0 -3
  219. package/dist/modes/interactive/onboarding.d.ts.map +1 -1
  220. package/dist/modes/interactive/onboarding.js +0 -17
  221. package/dist/modes/interactive/onboarding.js.map +1 -1
  222. package/dist/modes/rpc/rpc-client.d.ts +2 -1
  223. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  224. package/dist/modes/rpc/rpc-client.js +24 -11
  225. package/dist/modes/rpc/rpc-client.js.map +1 -1
  226. package/dist/node/amazon-bedrock.d.ts +2 -0
  227. package/dist/node/amazon-bedrock.d.ts.map +1 -0
  228. package/dist/node/amazon-bedrock.js +6 -0
  229. package/dist/node/amazon-bedrock.js.map +1 -0
  230. package/dist/product-identity.d.ts +0 -1
  231. package/dist/product-identity.d.ts.map +1 -1
  232. package/dist/product-identity.js +0 -1
  233. package/dist/product-identity.js.map +1 -1
  234. package/docs/development.md +1 -1
  235. package/docs/fork-philosophy.md +4 -8
  236. package/docs/installation.md +83 -62
  237. package/docs/providers.md +23 -25
  238. package/docs/quickstart.md +19 -10
  239. package/docs/rlm-runtime.md +13 -5
  240. package/docs/rpc.md +4 -4
  241. package/docs/sdk.md +20 -11
  242. package/docs/sessions.md +0 -1
  243. package/docs/settings.md +9 -42
  244. package/docs/skills.md +0 -1
  245. package/docs/upstream-0.9.5.md +171 -0
  246. package/docs/usage.md +14 -10
  247. package/package.json +4 -4
  248. package/dist/core/agent-traces.d.ts +0 -149
  249. package/dist/core/agent-traces.d.ts.map +0 -1
  250. package/dist/core/agent-traces.js +0 -904
  251. package/dist/core/agent-traces.js.map +0 -1
  252. package/dist/core/prime-inference-auth.d.ts +0 -70
  253. package/dist/core/prime-inference-auth.d.ts.map +0 -1
  254. package/dist/core/prime-inference-auth.js +0 -352
  255. package/dist/core/prime-inference-auth.js.map +0 -1
  256. package/dist/core/prime-inference-model-selection.d.ts +0 -16
  257. package/dist/core/prime-inference-model-selection.d.ts.map +0 -1
  258. package/dist/core/prime-inference-model-selection.js +0 -16
  259. package/dist/core/prime-inference-model-selection.js.map +0 -1
  260. package/dist/core/prime-inference-models.d.ts +0 -6
  261. package/dist/core/prime-inference-models.d.ts.map +0 -1
  262. package/dist/core/prime-inference-models.js +0 -62
  263. package/dist/core/prime-inference-models.js.map +0 -1
  264. package/dist/core/telemetry.d.ts +0 -95
  265. package/dist/core/telemetry.d.ts.map +0 -1
  266. package/dist/core/telemetry.js +0 -637
  267. package/dist/core/telemetry.js.map +0 -1
  268. package/dist/modes/interactive/components/prime-onboarding-splash.d.ts +0 -39
  269. package/dist/modes/interactive/components/prime-onboarding-splash.d.ts.map +0 -1
  270. package/dist/modes/interactive/components/prime-onboarding-splash.js +0 -286
  271. package/dist/modes/interactive/components/prime-onboarding-splash.js.map +0 -1
  272. package/dist/modes/interactive/components/prime-team-selector.d.ts +0 -30
  273. package/dist/modes/interactive/components/prime-team-selector.d.ts.map +0 -1
  274. package/dist/modes/interactive/components/prime-team-selector.js +0 -166
  275. package/dist/modes/interactive/components/prime-team-selector.js.map +0 -1
  276. package/dist/skills/prime-intellect/SKILL.md +0 -87
  277. package/dist/skills/prime-intellect/references/compute.md +0 -45
  278. package/dist/skills/prime-intellect/references/environments.md +0 -73
  279. package/dist/skills/prime-intellect/references/inference.md +0 -47
  280. package/dist/skills/prime-intellect/references/sandboxes.md +0 -75
  281. package/skills/prime-intellect/SKILL.md +0 -87
  282. package/skills/prime-intellect/references/compute.md +0 -45
  283. package/skills/prime-intellect/references/environments.md +0 -73
  284. package/skills/prime-intellect/references/inference.md +0 -47
  285. package/skills/prime-intellect/references/sandboxes.md +0 -75
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-traces.js","sourceRoot":"","sources":["../../src/core/agent-traces.ts"],"names":[],"mappings":"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","sourcesContent":["import { Buffer } from \"node:buffer\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { type Dirent, existsSync, mkdirSync, renameSync, writeFileSync } from \"node:fs\";\nimport { mkdir, readdir, readFile, rename, stat, unlink, writeFile } from \"node:fs/promises\";\nimport { dirname, isAbsolute, join, resolve } from \"node:path\";\nimport { appendRotatingLog, getAgentDir, getAgentTracesLogPath, getSessionsDir, VERSION } from \"../config.js\";\nimport { assertProductStatePath } from \"../runtime-paths.js\";\nimport type { AuthStorage } from \"./auth-storage.js\";\nimport { BASE_CONTEXT_TRACES_PROVIDER_ID, resolvePrimeAgentTracesBaseUrl } from \"./prime-inference-auth.js\";\nimport { readSessionJournal, readSessionJournalHeader } from \"./session-journal-reader.js\";\nimport { getSessionArtifactsRoot, type SessionHeader, type SessionManager } from \"./session-manager.js\";\nimport type { SettingsManager } from \"./settings-manager.js\";\n\nconst MAX_TRACE_BYTES = 20 * 1024 * 1024;\nconst DEFAULT_REQUEST_TIMEOUT_MS = 15_000;\nconst TRACE_UPLOAD_DEBOUNCE_MS = 1_000;\nconst TRACE_UPLOAD_MIN_INTERVAL_MS = 60_000;\nconst TRACE_UPLOAD_RETRY_BASE_DELAY_MS = 500;\nconst TRACE_UPLOAD_RETRY_MAX_DELAY_MS = 10_000;\nconst TRACE_UPLOAD_MAX_RETRIES = 3;\nconst TRACE_UPLOAD_RETRY_JITTER = 0.2;\nconst TRACE_PREVIEW_MAX_CHARS = 8_000;\nconst TRACE_UPLOAD_ALL_CONCURRENCY = 4;\nconst TRACE_UPLOAD_RATE_LIMIT_REQUESTS = 5;\nconst TRACE_UPLOAD_RATE_LIMIT_WINDOW_MS = 60_000;\nconst TRACE_UPLOAD_RATE_LIMIT_SAFETY_MS = 100;\nconst MAX_TIMER_DELAY_MS = 2 ** 31 - 1;\nconst TRACE_UPLOAD_ALL_MIN_REQUEST_INTERVAL_MS =\n\tMath.ceil(TRACE_UPLOAD_RATE_LIMIT_WINDOW_MS / TRACE_UPLOAD_RATE_LIMIT_REQUESTS) + TRACE_UPLOAD_RATE_LIMIT_SAFETY_MS;\n\nexport type AgentTraceCredentialSource = \"environment\" | \"stored\";\n\nexport interface AgentTraceCredential {\n\tapiKey: string;\n\tsource: AgentTraceCredentialSource;\n\tlabel: string;\n}\n\nexport type AgentTraceUploadResult =\n\t| {\n\t\t\tstatus: \"uploaded\";\n\t\t\tsessionId: string;\n\t\t\ttraceId: string;\n\t\t\tbytesStored: number;\n\t\t\tkey?: string;\n\t }\n\t| { status: \"disabled\" }\n\t| { status: \"unchanged\" }\n\t| { status: \"missing_credentials\" }\n\t| { status: \"no_session_file\" }\n\t| { status: \"empty_session\" }\n\t| { status: \"invalid_session\"; message: string }\n\t| { status: \"too_large\"; size: number; maxBytes: number }\n\t| { status: \"failed\"; statusCode?: number; message: string; retryAfterMs?: number };\n\nexport interface AgentTraceUploadOptions {\n\tsessionFile: string | undefined;\n\tauthStorage: AuthStorage;\n\tsettingsManager: SettingsManager;\n\t/** Require the global automatic-sharing opt-in. Set false only for an explicit one-shot upload command. */\n\trequireEnabled?: boolean;\n\tbaseUrl?: string;\n\tconfigPath?: string;\n\tfetchFn?: typeof fetch;\n\treloadConfig?: boolean;\n\trequestTimeoutMs?: number;\n\tsignal?: AbortSignal;\n}\n\nexport interface AgentTraceSessionUploadOptions extends Omit<AgentTraceUploadOptions, \"sessionFile\"> {\n\tsessionManager: SessionManager;\n}\n\nexport interface AgentTraceUploadInstallOptions {\n\tauthStorage: AuthStorage;\n\tsettingsManager: SettingsManager;\n\tbaseUrl?: string;\n\tconfigPath?: string;\n\tfetchFn?: typeof fetch;\n\trequestTimeoutMs?: number;\n\t/** The session's semantic-edge ledger; registered with the outbox as its own delivery kind. */\n\tsemanticEdgesLedgerPath?: string;\n}\n\nexport type AgentTracePreviewResult =\n\t| {\n\t\t\tstatus: \"ready\";\n\t\t\tsessionFile: string;\n\t\t\tsessionId: string;\n\t\t\ttraceId: string;\n\t\t\tparentSessionId?: string;\n\t\t\tcwd: string;\n\t\t\tsize: number;\n\t\t\tmaxBytes: number;\n\t\t\tuploadable: boolean;\n\t\t\tendpoint?: string;\n\t\t\tgitRepo?: string;\n\t\t\tgitCommit?: string;\n\t\t\tcontentPreview: string;\n\t\t\ttruncated: boolean;\n\t }\n\t| { status: \"no_session_file\" }\n\t| { status: \"empty_session\" }\n\t| { status: \"invalid_session\"; message: string }\n\t| { status: \"failed\"; message: string };\n\nexport interface AgentTracePreviewOptions {\n\tsessionFile: string | undefined;\n\tbaseUrl?: string;\n\tmaxContentChars?: number;\n}\n\nexport interface AgentTraceUploadAllProgress {\n\tcompleted: number;\n\ttotal: number;\n\tsessionFile?: string;\n\tresult?: AgentTraceUploadResult;\n}\n\nexport interface AgentTraceUploadAllOptions extends Omit<AgentTraceUploadOptions, \"sessionFile\"> {\n\tsessionDir?: string;\n\tconcurrency?: number;\n\tonProgress?: (progress: AgentTraceUploadAllProgress) => void;\n}\n\nexport interface AgentTraceUploadAllResult {\n\ttotal: number;\n\tuploaded: number;\n\tfailed: number;\n\tskipped: number;\n\tbytesStored: number;\n\tresults: Array<{ sessionFile: string; result: AgentTraceUploadResult }>;\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 isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction describeError(error: unknown): string {\n\tif (!(error instanceof Error)) {\n\t\treturn String(error);\n\t}\n\tconst cause = (error as { cause?: unknown }).cause;\n\tif (isRecord(cause)) {\n\t\tconst code = typeof cause.code === \"string\" ? cause.code : undefined;\n\t\tconst causeMessage = typeof cause.message === \"string\" ? cause.message : undefined;\n\t\tconst detail = code ?? causeMessage;\n\t\tif (detail && detail !== error.message) {\n\t\t\treturn `${error.message} (${detail})`;\n\t\t}\n\t}\n\treturn error.message;\n}\n\nclass TraceUploadTimeoutError extends Error {\n\tconstructor(timeoutMs: number) {\n\t\tsuper(`Trace upload timed out after ${timeoutMs}ms`);\n\t\tthis.name = \"TraceUploadTimeoutError\";\n\t}\n}\n\nconst RETRIABLE_NETWORK_CODES = new Set([\n\t\"ECONNRESET\",\n\t\"ECONNREFUSED\",\n\t\"ECONNABORTED\",\n\t\"EPIPE\",\n\t\"ETIMEDOUT\",\n\t\"ENETUNREACH\",\n\t\"ENETDOWN\",\n\t\"EAI_AGAIN\",\n\t\"UND_ERR_SOCKET\",\n\t\"UND_ERR_CONNECT_TIMEOUT\",\n]);\n\n// 429 is deliberately absent: a rate-limited upload is rescheduled by its caller instead of sleeping in-request.\nconst RETRIABLE_HTTP_STATUSES = new Set([408, 425, 500, 502, 503, 504]);\n\nfunction isRetriableNetworkError(error: unknown): boolean {\n\tif (error instanceof TraceUploadTimeoutError) {\n\t\treturn true;\n\t}\n\tif (!(error instanceof Error) || error.name === \"AbortError\") {\n\t\treturn false;\n\t}\n\tconst cause = (error as { cause?: unknown }).cause;\n\treturn isRecord(cause) && typeof cause.code === \"string\" && RETRIABLE_NETWORK_CODES.has(cause.code);\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 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 isSessionHeader(value: unknown): value is SessionHeader {\n\treturn (\n\t\tisRecord(value) &&\n\t\tvalue.type === \"session\" &&\n\t\ttypeof value.id === \"string\" &&\n\t\ttypeof value.timestamp === \"string\" &&\n\t\ttypeof value.cwd === \"string\" &&\n\t\t(value.parentSession === undefined || typeof value.parentSession === \"string\")\n\t);\n}\n\nfunction readSessionHeader(sessionFile: string): SessionHeader | undefined {\n\ttry {\n\t\tconst parsed = readSessionJournalHeader(sessionFile);\n\t\treturn isSessionHeader(parsed) ? parsed : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nasync function readSessionTraceBody(sessionFile: string): Promise<string> {\n\tconst lines: string[] = [];\n\tfor await (const { json } of readSessionJournal(sessionFile)) {\n\t\tlines.push(`${json}\\n`);\n\t}\n\treturn lines.join(\"\");\n}\n\n/** Active-branch git for the indexing headers: walk leaf to root, not the last git_state in\n * file order (which may belong to a sibling branch). */\nexport function activeGitContext(\n\tbody: string,\n\theader: SessionHeader,\n): { repoUrl?: string; commit?: string } | undefined {\n\tconst byId = new Map<string, { parentId: string | null; type: string; git?: unknown }>();\n\tlet leafId: string | null = null;\n\tfor (const line of body.split(\"\\n\")) {\n\t\tif (!line.trim()) continue;\n\t\tlet parsed: unknown;\n\t\ttry {\n\t\t\tparsed = JSON.parse(line);\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t\tif (!isRecord(parsed) || parsed.type === \"session\" || typeof parsed.id !== \"string\") continue;\n\t\tbyId.set(parsed.id, {\n\t\t\tparentId: typeof parsed.parentId === \"string\" ? parsed.parentId : null,\n\t\t\ttype: typeof parsed.type === \"string\" ? parsed.type : \"\",\n\t\t\tgit: parsed.git,\n\t\t});\n\t\tleafId = parsed.id;\n\t}\n\n\tlet current = leafId ? byId.get(leafId) : undefined;\n\tfor (let depth = 0; current && depth < byId.size + 1; depth += 1) {\n\t\tif (current.type === \"git_state\" && isRecord(current.git)) {\n\t\t\treturn current.git as { repoUrl?: string; commit?: string };\n\t\t}\n\t\tcurrent = current.parentId ? byId.get(current.parentId) : undefined;\n\t}\n\treturn header.git;\n}\n\nfunction resolveParentSessionPath(sessionFile: string, parentSession: string): string {\n\treturn isAbsolute(parentSession) ? parentSession : resolve(dirname(sessionFile), parentSession);\n}\n\nfunction resolveTraceContext(\n\tsessionFile: string,\n\theader: SessionHeader,\n): { traceId: string; parentSessionId?: string } {\n\tlet traceId = header.id;\n\tlet parentSessionId: string | undefined;\n\tlet currentFile = sessionFile;\n\tlet currentHeader = header;\n\n\tfor (let depth = 0; depth < 32; depth += 1) {\n\t\tif (!currentHeader.parentSession) {\n\t\t\tbreak;\n\t\t}\n\n\t\tconst parentPath = resolveParentSessionPath(currentFile, currentHeader.parentSession);\n\t\tconst parentHeader = readSessionHeader(parentPath);\n\t\tif (!parentHeader) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (depth === 0) {\n\t\t\tparentSessionId = parentHeader.id;\n\t\t}\n\t\ttraceId = parentHeader.id;\n\t\tcurrentFile = parentPath;\n\t\tcurrentHeader = parentHeader;\n\t}\n\n\treturn { traceId, parentSessionId };\n}\n\nfunction parseResponseObject(text: string): Record<string, unknown> | undefined {\n\tif (!text.trim()) {\n\t\treturn undefined;\n\t}\n\ttry {\n\t\tconst parsed = JSON.parse(text) as unknown;\n\t\treturn isRecord(parsed) ? parsed : undefined;\n\t} catch {\n\t\treturn undefined;\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\tconst parsed = parseResponseObject(text);\n\tif (parsed) {\n\t\tconst error = parsed.error;\n\t\tif (isRecord(error)) {\n\t\t\tconst message = stringField(error, \"message\");\n\t\t\tif (message) return message;\n\t\t}\n\t\tconst detail = stringField(parsed, \"detail\");\n\t\tif (detail) return detail;\n\t\tconst message = stringField(parsed, \"message\");\n\t\tif (message) return message;\n\t}\n\n\treturn text.trim();\n}\n\nasync function fetchWithTimeout(\n\tfetchFn: typeof fetch,\n\turl: string,\n\tinit: RequestInit,\n\ttimeoutMs: number,\n\tsignal?: AbortSignal,\n): Promise<Response> {\n\tconst controller = new AbortController();\n\tconst timeoutError = new TraceUploadTimeoutError(timeoutMs);\n\tlet timedOut = false;\n\tconst timeout = setTimeout(() => {\n\t\ttimedOut = true;\n\t\tcontroller.abort(timeoutError);\n\t}, timeoutMs);\n\ttimeout.unref();\n\tconst onAbort = () => controller.abort(signal?.reason);\n\tif (signal?.aborted) {\n\t\tonAbort();\n\t} else {\n\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t}\n\n\ttry {\n\t\treturn await fetchFn(url, { ...init, signal: controller.signal });\n\t} catch (error) {\n\t\tif (timedOut) {\n\t\t\tthrow timeoutError;\n\t\t}\n\t\tthrow error;\n\t} finally {\n\t\tclearTimeout(timeout);\n\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t}\n}\n\nfunction delay(ms: number, signal?: AbortSignal): Promise<void> {\n\treturn new Promise((resolve) => {\n\t\tif (signal?.aborted) {\n\t\t\tresolve();\n\t\t\treturn;\n\t\t}\n\t\tconst timeout = setTimeout(finish, ms);\n\t\ttimeout.unref();\n\t\tconst onAbort = () => finish();\n\t\tfunction finish() {\n\t\t\tclearTimeout(timeout);\n\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\tresolve();\n\t\t}\n\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n}\n\nfunction traceUploadRetryDelay(retryIndex: number): number {\n\tconst exponentialDelay = Math.min(\n\t\tTRACE_UPLOAD_RETRY_MAX_DELAY_MS,\n\t\tTRACE_UPLOAD_RETRY_BASE_DELAY_MS * 2 ** retryIndex,\n\t);\n\tconst jitterMultiplier = 1 - TRACE_UPLOAD_RETRY_JITTER + Math.random() * TRACE_UPLOAD_RETRY_JITTER * 2;\n\treturn Math.max(0, Math.round(exponentialDelay * jitterMultiplier));\n}\n\nfunction retryAfterDelay(response: Response, capMs: number = TRACE_UPLOAD_RATE_LIMIT_WINDOW_MS): number | undefined {\n\tconst value = response.headers.get(\"retry-after\")?.trim();\n\tif (!value) {\n\t\treturn undefined;\n\t}\n\tconst seconds = Number(value);\n\tif (Number.isFinite(seconds) && seconds >= 0) {\n\t\treturn Math.min(Math.ceil(seconds * 1_000), capMs);\n\t}\n\tconst retryAt = Date.parse(value);\n\treturn Number.isFinite(retryAt) ? Math.min(Math.max(0, retryAt - Date.now()), capMs) : undefined;\n}\n\ntype BeforeTraceUploadRequest = () => Promise<void>;\n\nasync function fetchWithRetry(\n\tfetchFn: typeof fetch,\n\turl: string,\n\tinit: RequestInit,\n\ttimeoutMs: number,\n\tsignal?: AbortSignal,\n\tbeforeRequest?: BeforeTraceUploadRequest,\n): Promise<Response> {\n\tfor (let attempt = 0; ; attempt += 1) {\n\t\tlet retryDelayMs: number | undefined;\n\t\ttry {\n\t\t\tawait beforeRequest?.();\n\t\t\tif (signal?.aborted) {\n\t\t\t\tthrow signal.reason ?? new Error(\"Trace upload cancelled\");\n\t\t\t}\n\t\t\tconst response = await fetchWithTimeout(fetchFn, url, init, timeoutMs, signal);\n\t\t\tif (attempt >= TRACE_UPLOAD_MAX_RETRIES || !RETRIABLE_HTTP_STATUSES.has(response.status)) {\n\t\t\t\treturn response;\n\t\t\t}\n\t\t\tif (response.status === 503) {\n\t\t\t\tretryDelayMs = retryAfterDelay(response);\n\t\t\t}\n\t\t\tawait response.body?.cancel().catch(() => undefined);\n\t\t} catch (error) {\n\t\t\tif (signal?.aborted) {\n\t\t\t\tthrow signal.reason ?? error;\n\t\t\t}\n\t\t\tif (attempt >= TRACE_UPLOAD_MAX_RETRIES || !isRetriableNetworkError(error)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tawait delay(retryDelayMs ?? traceUploadRetryDelay(attempt), signal);\n\t\tif (signal?.aborted) {\n\t\t\tthrow signal.reason ?? new Error(\"Trace upload cancelled\");\n\t\t}\n\t}\n}\n\nfunction traceContentPreview(body: string, maxChars: number): { content: string; truncated: boolean } {\n\tif (body.length <= maxChars) {\n\t\treturn { content: body.trimEnd(), truncated: false };\n\t}\n\tconst marker = \"\\n... middle of trace omitted ...\\n\";\n\tconst available = Math.max(0, maxChars - marker.length);\n\tconst headChars = Math.ceil(available / 2);\n\tconst tailChars = Math.floor(available / 2);\n\treturn {\n\t\tcontent: `${body.slice(0, headChars).trimEnd()}${marker}${body.slice(body.length - tailChars).trimStart()}`,\n\t\ttruncated: true,\n\t};\n}\n\nexport async function previewAgentTraceFile(options: AgentTracePreviewOptions): Promise<AgentTracePreviewResult> {\n\tif (!options.sessionFile) {\n\t\treturn { status: \"no_session_file\" };\n\t}\n\n\tlet fileSize: number;\n\ttry {\n\t\tconst stats = await stat(options.sessionFile);\n\t\tif (!stats.isFile()) {\n\t\t\treturn { status: \"no_session_file\" };\n\t\t}\n\t\tfileSize = stats.size;\n\t} catch {\n\t\treturn { status: \"no_session_file\" };\n\t}\n\tif (fileSize === 0) {\n\t\treturn { status: \"empty_session\" };\n\t}\n\n\tconst header = readSessionHeader(options.sessionFile);\n\tif (!header) {\n\t\treturn { status: \"invalid_session\", message: \"Session file is missing a valid session header\" };\n\t}\n\n\tlet body = \"\";\n\tif (fileSize <= MAX_TRACE_BYTES) {\n\t\ttry {\n\t\t\tbody = await readSessionTraceBody(options.sessionFile);\n\t\t} catch (error) {\n\t\t\treturn { status: \"failed\", message: describeError(error) };\n\t\t}\n\t\tif (!body.trim()) {\n\t\t\treturn { status: \"empty_session\" };\n\t\t}\n\t}\n\n\tconst traceContext = resolveTraceContext(options.sessionFile, header);\n\tconst baseUrl = resolvePrimeAgentTracesBaseUrl(options.baseUrl);\n\tconst git = body ? activeGitContext(body, header) : header.git;\n\tconst preview = body\n\t\t? traceContentPreview(body, Math.max(256, options.maxContentChars ?? TRACE_PREVIEW_MAX_CHARS))\n\t\t: { content: \"\", truncated: true };\n\treturn {\n\t\tstatus: \"ready\",\n\t\tsessionFile: options.sessionFile,\n\t\tsessionId: header.id,\n\t\ttraceId: traceContext.traceId,\n\t\tparentSessionId: traceContext.parentSessionId,\n\t\tcwd: header.cwd,\n\t\tsize: fileSize,\n\t\tmaxBytes: MAX_TRACE_BYTES,\n\t\tuploadable: fileSize <= MAX_TRACE_BYTES && baseUrl !== undefined,\n\t\tendpoint: baseUrl ? `${baseUrl}/api/v1/agent-traces/sessions/${encodeURIComponent(header.id)}` : undefined,\n\t\tgitRepo: git?.repoUrl,\n\t\tgitCommit: git?.commit,\n\t\tcontentPreview: preview.content,\n\t\ttruncated: preview.truncated,\n\t};\n}\n\nasync function findSessionFilesUnder(root: string, files: Set<string>): Promise<void> {\n\tlet entries: Dirent[];\n\ttry {\n\t\tentries = await readdir(root, { withFileTypes: true });\n\t} catch {\n\t\treturn;\n\t}\n\n\tfor (const entry of entries) {\n\t\tconst entryPath = join(root, entry.name);\n\t\tif (entry.isDirectory()) {\n\t\t\tawait findSessionFilesUnder(entryPath, files);\n\t\t\tcontinue;\n\t\t}\n\t\tif (entry.isFile() && entry.name.endsWith(\".jsonl\") && readSessionHeader(entryPath)) {\n\t\t\tfiles.add(entryPath);\n\t\t}\n\t}\n}\n\nexport async function findAgentTraceFiles(sessionDir: string = getSessionsDir()): Promise<string[]> {\n\tconst files = new Set<string>();\n\tconst roots = new Set([resolve(sessionDir), resolve(getSessionArtifactsRoot(sessionDir))]);\n\tawait Promise.all([...roots].map((root) => findSessionFilesUnder(root, files)));\n\treturn [...files].sort();\n}\n\nfunction createTraceUploadAllRequestGate(signal?: AbortSignal): BeforeTraceUploadRequest {\n\tlet nextRequestAt = 0;\n\tlet queue = Promise.resolve();\n\treturn () => {\n\t\tconst slot = queue.then(async () => {\n\t\t\tconst waitMs = Math.max(0, nextRequestAt - Date.now());\n\t\t\tif (waitMs > 0) {\n\t\t\t\tawait delay(waitMs, signal);\n\t\t\t}\n\t\t\tif (!signal?.aborted) {\n\t\t\t\tnextRequestAt = Date.now() + TRACE_UPLOAD_ALL_MIN_REQUEST_INTERVAL_MS;\n\t\t\t}\n\t\t});\n\t\tqueue = slot.catch(() => undefined);\n\t\treturn slot;\n\t};\n}\n\nexport async function uploadAllAgentTraces(options: AgentTraceUploadAllOptions): Promise<AgentTraceUploadAllResult> {\n\tconst { sessionDir, concurrency, onProgress, ...uploadOptions } = options;\n\tconst sessionFiles = await findAgentTraceFiles(sessionDir);\n\ttype UploadResultItem = AgentTraceUploadAllResult[\"results\"][number];\n\tconst results: Array<UploadResultItem | undefined> = new Array(sessionFiles.length);\n\tlet cursor = 0;\n\tlet completed = 0;\n\tconst beforeRequest = createTraceUploadAllRequestGate(uploadOptions.signal);\n\tonProgress?.({ completed, total: sessionFiles.length });\n\n\tconst worker = async () => {\n\t\twhile (true) {\n\t\t\tif (uploadOptions.signal?.aborted) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst index = cursor;\n\t\t\tcursor += 1;\n\t\t\tconst sessionFile = sessionFiles[index];\n\t\t\tif (!sessionFile) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst result = await uploadAgentTraceFileWithRequestGate(\n\t\t\t\t{\n\t\t\t\t\t...uploadOptions,\n\t\t\t\t\tsessionFile,\n\t\t\t\t\treloadConfig: false,\n\t\t\t\t},\n\t\t\t\tbeforeRequest,\n\t\t\t);\n\t\t\tif (uploadOptions.signal?.aborted && result.status === \"failed\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresults[index] = { sessionFile, result };\n\t\t\tcompleted += 1;\n\t\t\tonProgress?.({ completed, total: sessionFiles.length, sessionFile, result });\n\t\t}\n\t};\n\n\tconst requestedConcurrency = concurrency ?? TRACE_UPLOAD_ALL_CONCURRENCY;\n\tconst normalizedConcurrency =\n\t\tNumber.isFinite(requestedConcurrency) && requestedConcurrency > 0\n\t\t\t? Math.max(1, Math.floor(requestedConcurrency))\n\t\t\t: TRACE_UPLOAD_ALL_CONCURRENCY;\n\tconst workerCount = Math.min(sessionFiles.length, normalizedConcurrency);\n\tawait Promise.all(Array.from({ length: workerCount }, worker));\n\n\tconst completedResults = results.filter((item): item is UploadResultItem => item !== undefined);\n\tlet uploaded = 0;\n\tlet failed = 0;\n\tlet bytesStored = 0;\n\tfor (const item of completedResults) {\n\t\tif (item.result.status === \"uploaded\") {\n\t\t\tuploaded += 1;\n\t\t\tbytesStored += item.result.bytesStored;\n\t\t} else if (item.result.status === \"failed\") {\n\t\t\tfailed += 1;\n\t\t}\n\t}\n\treturn {\n\t\ttotal: sessionFiles.length,\n\t\tuploaded,\n\t\tfailed,\n\t\tskipped: sessionFiles.length - uploaded - failed,\n\t\tbytesStored,\n\t\tresults: completedResults,\n\t};\n}\n\ninterface AgentTraceUploadedSignature {\n\tsize: number;\n\tmtimeMs: number;\n}\n\nexport const SEMANTIC_EDGES_OUTBOX_KIND = \"semantic-edges\";\n\nexport interface AgentTraceCatchUpResult {\n\tpruned: number;\n\t/** Registered semantic-edge ledgers with bytes beyond their cursor; no delivery endpoint exists yet. */\n\tsemanticEdgeLedgersPending: number;\n\tresults: Array<{ sessionFile: string; result: AgentTraceUploadResult }>;\n}\n\nfunction getAgentTraceOutboxDir(): string {\n\treturn assertProductStatePath(join(getAgentDir(), \"trace-export-outbox\"));\n}\n\n// One entry file per session file (keyed by path hash): concurrent writers cannot lose each other's cursors, and a bad read costs only its own entry.\nfunction agentTraceOutboxEntryPath(sessionFile: string): string {\n\tconst key = createHash(\"sha256\").update(sessionFile).digest(\"hex\").slice(0, 32);\n\treturn join(getAgentTraceOutboxDir(), `${key}.json`);\n}\n\nfunction parseOutboxEntry(raw: string):\n\t| {\n\t\t\tsessionFile: string;\n\t\t\tkind?: string;\n\t\t\tuploaded: AgentTraceUploadedSignature | null;\n\t\t\tuploadedBytes?: number;\n\t }\n\t| undefined {\n\tconst parsed = parseResponseObject(raw);\n\tif (!parsed || typeof parsed.sessionFile !== \"string\") {\n\t\treturn undefined;\n\t}\n\tconst uploaded =\n\t\ttypeof parsed.size === \"number\" && typeof parsed.mtimeMs === \"number\"\n\t\t\t? { size: parsed.size, mtimeMs: parsed.mtimeMs }\n\t\t\t: null;\n\treturn {\n\t\tsessionFile: parsed.sessionFile,\n\t\tkind: typeof parsed.kind === \"string\" ? parsed.kind : undefined,\n\t\tuploaded,\n\t\tuploadedBytes: typeof parsed.uploadedBytes === \"number\" ? parsed.uploadedBytes : undefined,\n\t};\n}\n\n/** `undefined` = no usable cursor; `null` = scheduled but never uploaded. */\nasync function readAgentTraceOutboxEntry(sessionFile: string): Promise<AgentTraceUploadedSignature | null | undefined> {\n\tlet raw: string;\n\ttry {\n\t\traw = await readFile(agentTraceOutboxEntryPath(sessionFile), \"utf8\");\n\t} catch {\n\t\treturn undefined;\n\t}\n\tconst entry = parseOutboxEntry(raw);\n\treturn entry && entry.sessionFile === sessionFile ? entry.uploaded : undefined;\n}\n\nfunction signatureEquals(a: AgentTraceUploadedSignature | null | undefined, b: AgentTraceUploadedSignature): boolean {\n\treturn a != null && a.size === b.size && a.mtimeMs === b.mtimeMs;\n}\n\n/** Session files with a live upload controller in this process; catch-up leaves them to their controller. */\nconst locallyManagedSessionFiles = new Set<string>();\n\n/** Best-effort and synchronous: upload intent must be on disk the moment the transcript persist returns. */\nfunction markAgentTraceOutboxPendingSync(sessionFile: string, kind?: string): boolean {\n\ttry {\n\t\tconst entryPath = agentTraceOutboxEntryPath(sessionFile);\n\t\tif (existsSync(entryPath)) {\n\t\t\treturn true;\n\t\t}\n\t\tmkdirSync(getAgentTraceOutboxDir(), { recursive: true });\n\t\tconst tempPath = `${entryPath}.${process.pid}.${randomUUID()}.tmp`;\n\t\twriteFileSync(\n\t\t\ttempPath,\n\t\t\t`${JSON.stringify(kind === undefined ? { sessionFile } : { sessionFile, kind })}\\n`,\n\t\t\t\"utf8\",\n\t\t);\n\t\trenameSync(tempPath, entryPath);\n\t\treturn true;\n\t} catch {\n\t\t// A broken agent dir must not break session persists.\n\t\treturn false;\n\t}\n}\n\nasync function recordAgentTraceOutboxUpload(\n\tsessionFile: string,\n\tsignature: AgentTraceUploadedSignature,\n): Promise<void> {\n\tconst entryPath = agentTraceOutboxEntryPath(sessionFile);\n\tawait mkdir(getAgentTraceOutboxDir(), { recursive: true });\n\tconst tempPath = `${entryPath}.${process.pid}.${randomUUID()}.tmp`;\n\tawait writeFile(tempPath, `${JSON.stringify({ sessionFile, ...signature })}\\n`, \"utf8\");\n\tawait rename(tempPath, entryPath);\n}\n\n/**\n * Explicit catch-up for the Base Context export outbox. This is never run at\n * startup and does not read inherited agent-traces-outbox entries.\n */\nexport async function catchUpAgentTraceUploads(\n\toptions: Omit<AgentTraceUploadOptions, \"sessionFile\">,\n): Promise<AgentTraceCatchUpResult> {\n\tconst catchUp: AgentTraceCatchUpResult = { pruned: 0, semanticEdgeLedgersPending: 0, results: [] };\n\tif (options.requireEnabled !== false && !(await getAgentTracesEnabled(options))) {\n\t\treturn catchUp;\n\t}\n\tlet entryNames: string[];\n\ttry {\n\t\tentryNames = await readdir(getAgentTraceOutboxDir());\n\t} catch {\n\t\treturn catchUp;\n\t}\n\tconst beforeRequest = createTraceUploadAllRequestGate(options.signal);\n\tfor (const entryName of entryNames) {\n\t\tif (options.signal?.aborted) {\n\t\t\tbreak;\n\t\t}\n\t\tif (!entryName.endsWith(\".json\")) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst entryPath = join(getAgentTraceOutboxDir(), entryName);\n\t\tlet raw: string;\n\t\ttry {\n\t\t\traw = await readFile(entryPath, \"utf8\");\n\t\t} catch {\n\t\t\t// Transient read error: keep the entry and retry at the next startup.\n\t\t\tcontinue;\n\t\t}\n\t\tconst entry = parseOutboxEntry(raw);\n\t\tif (!entry) {\n\t\t\tawait unlink(entryPath).catch(() => undefined);\n\t\t\tcatchUp.pruned += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (entry.kind === SEMANTIC_EDGES_OUTBOX_KIND) {\n\t\t\tlet ledgerStats: Awaited<ReturnType<typeof stat>>;\n\t\t\ttry {\n\t\t\t\tledgerStats = await stat(entry.sessionFile);\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n\t\t\t\t\tawait unlink(entryPath).catch(() => undefined);\n\t\t\t\t\tcatchUp.pruned += 1;\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!ledgerStats.isFile()) {\n\t\t\t\tawait unlink(entryPath).catch(() => undefined);\n\t\t\t\tcatchUp.pruned += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// Append-only byte cursor: a ledger whose size equals its delivered offset has nothing new.\n\t\t\tif (ledgerStats.size === entry.uploadedBytes) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// No delivery endpoint exists yet (verifiers#2449 consumes edges in-band over ACP\n\t\t\t// metadata; the trace server has no semantic-edges route). The delta and cursor stay\n\t\t\t// untouched so the first real sender delivers the whole backlog.\n\t\t\tcatchUp.semanticEdgeLedgersPending += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (entry.kind !== undefined) {\n\t\t\t// A newer build may register kinds this one cannot deliver; leave their cursors alone.\n\t\t\tcontinue;\n\t\t}\n\t\tif (locallyManagedSessionFiles.has(entry.sessionFile)) {\n\t\t\tcontinue;\n\t\t}\n\t\tlet stats: Awaited<ReturnType<typeof stat>>;\n\t\ttry {\n\t\t\tstats = await stat(entry.sessionFile);\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n\t\t\t\tawait unlink(entryPath).catch(() => undefined);\n\t\t\t\tcatchUp.pruned += 1;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (!stats.isFile()) {\n\t\t\tawait unlink(entryPath).catch(() => undefined);\n\t\t\tcatchUp.pruned += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (signatureEquals(entry.uploaded, { size: stats.size, mtimeMs: stats.mtimeMs })) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst result = await uploadAgentTraceFileWithRequestGate(\n\t\t\t{ ...options, sessionFile: entry.sessionFile, reloadConfig: false },\n\t\t\tbeforeRequest,\n\t\t);\n\t\tcatchUp.results.push({ sessionFile: entry.sessionFile, result });\n\t}\n\treturn catchUp;\n}\n\nexport async function getPrimeAgentTraceCredential(\n\tauthStorage: AuthStorage,\n\toptions: { reloadAuth?: boolean; configPath?: string } = {},\n): Promise<AgentTraceCredential | undefined> {\n\tconst traceEnvKey = stringEnv(\"BASE_CONTEXT_TRACES_API_KEY\");\n\tif (traceEnvKey) {\n\t\treturn { apiKey: traceEnvKey, source: \"environment\", label: \"BASE_CONTEXT_TRACES_API_KEY\" };\n\t}\n\n\tif (options.reloadAuth !== false) {\n\t\tauthStorage.reload();\n\t}\n\n\tconst traceKey = await authStorage.getApiKey(BASE_CONTEXT_TRACES_PROVIDER_ID, { includeFallback: false });\n\tif (traceKey) {\n\t\treturn { apiKey: traceKey, source: \"stored\", label: \"Base Context Traces credential\" };\n\t}\n\n\treturn undefined;\n}\n\nasync function getAgentTracesEnabled(\n\toptions: Pick<AgentTraceUploadOptions, \"reloadConfig\" | \"settingsManager\">,\n): Promise<boolean> {\n\tif (options.reloadConfig !== false) {\n\t\tawait options.settingsManager.reload().catch(() => undefined);\n\t}\n\treturn options.settingsManager.getAgentTracesEnabled();\n}\n\nasync function uploadAgentTraceFileWithRequestGate(\n\toptions: AgentTraceUploadOptions,\n\tbeforeRequest?: BeforeTraceUploadRequest,\n): Promise<AgentTraceUploadResult> {\n\tconst result = await performAgentTraceUpload(options, beforeRequest);\n\tlogAgentTraceOutcome(options.sessionFile, result);\n\treturn result;\n}\n\nexport function uploadAgentTraceFile(options: AgentTraceUploadOptions): Promise<AgentTraceUploadResult> {\n\treturn uploadAgentTraceFileWithRequestGate(options);\n}\n\nfunction logAgentTraceOutcome(sessionFile: string | undefined, result: AgentTraceUploadResult): void {\n\tlet line: string | undefined;\n\tswitch (result.status) {\n\t\tcase \"uploaded\":\n\t\t\tline = `uploaded session ${result.sessionId} (${result.bytesStored} bytes)`;\n\t\t\tbreak;\n\t\tcase \"failed\":\n\t\t\tline = `upload failed${result.statusCode ? ` (HTTP ${result.statusCode})` : \"\"}: ${result.message}`;\n\t\t\tbreak;\n\t\tcase \"too_large\":\n\t\t\tline = `upload skipped: session is ${result.size} bytes (limit ${result.maxBytes})`;\n\t\t\tbreak;\n\t\tcase \"invalid_session\":\n\t\t\tline = `upload skipped: ${result.message}`;\n\t\t\tbreak;\n\t\tcase \"missing_credentials\":\n\t\t\tline = \"upload skipped: configure a dedicated BASE_CONTEXT_TRACES_API_KEY or Base Context Traces credential\";\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treturn;\n\t}\n\tconst suffix = sessionFile ? ` [${sessionFile}]` : \"\";\n\tappendRotatingLog(getAgentTracesLogPath(), `[${new Date().toISOString()}] ${line}${suffix}`);\n}\n\nasync function performAgentTraceUpload(\n\toptions: AgentTraceUploadOptions,\n\tbeforeRequest?: BeforeTraceUploadRequest,\n): Promise<AgentTraceUploadResult> {\n\tconst requireEnabled = options.requireEnabled !== false;\n\tif (requireEnabled && !(await getAgentTracesEnabled(options))) {\n\t\treturn { status: \"disabled\" };\n\t}\n\tconst baseUrl = resolvePrimeAgentTracesBaseUrl(options.baseUrl);\n\tif (!baseUrl) {\n\t\treturn {\n\t\t\tstatus: \"failed\",\n\t\t\tmessage:\n\t\t\t\t\"Trace export requires an explicit BASE_CONTEXT_TRACES_BASE_URL and dedicated BASE_CONTEXT_TRACES_API_KEY.\",\n\t\t};\n\t}\n\tif (!options.sessionFile) {\n\t\treturn { status: \"no_session_file\" };\n\t}\n\n\tlet signature: AgentTraceUploadedSignature;\n\ttry {\n\t\tconst stats = await stat(options.sessionFile);\n\t\tif (!stats.isFile()) {\n\t\t\treturn { status: \"no_session_file\" };\n\t\t}\n\t\tsignature = { size: stats.size, mtimeMs: stats.mtimeMs };\n\t} catch {\n\t\treturn { status: \"no_session_file\" };\n\t}\n\tconst fileSize = signature.size;\n\tif (fileSize === 0) {\n\t\treturn { status: \"empty_session\" };\n\t}\n\tif (fileSize > MAX_TRACE_BYTES) {\n\t\treturn { status: \"too_large\", size: fileSize, maxBytes: MAX_TRACE_BYTES };\n\t}\n\t// Cursor invariant: an automatic upload never re-sends a file whose content already matches its uploaded cursor.\n\tif (requireEnabled && signatureEquals(await readAgentTraceOutboxEntry(options.sessionFile), signature)) {\n\t\treturn { status: \"unchanged\" };\n\t}\n\n\tconst header = readSessionHeader(options.sessionFile);\n\tif (!header) {\n\t\treturn { status: \"invalid_session\", message: \"Session file is missing a valid session header\" };\n\t}\n\n\tconst credential = await getPrimeAgentTraceCredential(options.authStorage, {\n\t\tconfigPath: options.configPath,\n\t\treloadAuth: options.reloadConfig !== false,\n\t});\n\tif (!credential) {\n\t\treturn { status: \"missing_credentials\" };\n\t}\n\n\tif (requireEnabled && !(await getAgentTracesEnabled(options))) {\n\t\treturn { status: \"disabled\" };\n\t}\n\n\tlet body: string;\n\ttry {\n\t\tbody = await readSessionTraceBody(options.sessionFile);\n\t} catch (error) {\n\t\treturn { status: \"failed\", message: describeError(error) };\n\t}\n\tif (!body.trim()) {\n\t\treturn { status: \"empty_session\" };\n\t}\n\n\tconst traceContext = resolveTraceContext(options.sessionFile, header);\n\tconst bodyBytes = Buffer.byteLength(body, \"utf8\");\n\tconst headers: Record<string, string> = {\n\t\tAuthorization: `Bearer ${credential.apiKey}`,\n\t\t\"Content-Type\": \"application/x-ndjson\",\n\t\tAccept: \"application/json\",\n\t\t\"X-Trace-Id\": traceContext.traceId,\n\t\t\"X-Cwd\": header.cwd,\n\t\t\"X-Agent-Version\": VERSION,\n\t};\n\tif (traceContext.parentSessionId) {\n\t\theaders[\"X-Parent-Session\"] = traceContext.parentSessionId;\n\t}\n\tconst git = activeGitContext(body, header);\n\tif (git?.repoUrl) {\n\t\theaders[\"X-Git-Repo\"] = git.repoUrl;\n\t}\n\tif (git?.commit) {\n\t\theaders[\"X-Git-Commit\"] = git.commit;\n\t}\n\n\tif (requireEnabled && !(await getAgentTracesEnabled(options))) {\n\t\treturn { status: \"disabled\" };\n\t}\n\n\tconst url = `${baseUrl}/api/v1/agent-traces/sessions/${encodeURIComponent(header.id)}`;\n\tconst fetchFn = options.fetchFn ?? fetch;\n\n\tlet response: Response;\n\ttry {\n\t\tresponse = await fetchWithRetry(\n\t\t\tfetchFn,\n\t\t\turl,\n\t\t\t{\n\t\t\t\tmethod: \"PUT\",\n\t\t\t\tredirect: \"error\",\n\t\t\t\theaders,\n\t\t\t\tbody,\n\t\t\t},\n\t\t\toptions.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS,\n\t\t\toptions.signal,\n\t\t\tbeforeRequest,\n\t\t);\n\t} catch (error) {\n\t\treturn { status: \"failed\", message: describeError(error) };\n\t}\n\n\tif (!response.ok) {\n\t\treturn {\n\t\t\tstatus: \"failed\",\n\t\t\tstatusCode: response.status,\n\t\t\tmessage: await readResponseMessage(response),\n\t\t\tretryAfterMs: retryAfterDelay(response, MAX_TIMER_DELAY_MS),\n\t\t};\n\t}\n\n\tconst responseText = await response.text().catch(() => \"\");\n\tconst responseData = parseResponseObject(responseText);\n\ttry {\n\t\tawait recordAgentTraceOutboxUpload(options.sessionFile, signature);\n\t} catch (error) {\n\t\treturn { status: \"failed\", message: `stored, but recording the upload cursor failed: ${describeError(error)}` };\n\t}\n\treturn {\n\t\tstatus: \"uploaded\",\n\t\tsessionId: responseData ? (stringField(responseData, \"session_id\") ?? header.id) : header.id,\n\t\ttraceId: responseData ? (stringField(responseData, \"trace_id\") ?? traceContext.traceId) : traceContext.traceId,\n\t\tbytesStored: responseData ? (numberField(responseData, \"bytes_stored\") ?? bodyBytes) : bodyBytes,\n\t\tkey: responseData ? stringField(responseData, \"key\") : undefined,\n\t};\n}\n\nexport function uploadAgentTraceSession(options: AgentTraceSessionUploadOptions): Promise<AgentTraceUploadResult> {\n\treturn uploadAgentTraceFile({\n\t\t...options,\n\t\tsessionFile: options.sessionManager.getSessionFile(),\n\t});\n}\n\nclass AgentTraceUploadController {\n\tprivate timeout: NodeJS.Timeout | undefined;\n\tprivate pending = false;\n\tprivate inFlight: Promise<void> | undefined;\n\tprivate lastUploadStartedAt: number | undefined;\n\tprivate notBeforeAt = 0;\n\n\tconstructor(\n\t\tprivate readonly sessionManager: SessionManager,\n\t\tprivate options: AgentTraceUploadInstallOptions,\n\t) {}\n\n\tupdate(options: AgentTraceUploadInstallOptions): void {\n\t\tthis.options = options;\n\t}\n\n\tschedule = (): void => {\n\t\tif (\n\t\t\t!this.options.settingsManager.getAgentTracesEnabled() ||\n\t\t\t!resolvePrimeAgentTracesBaseUrl(this.options.baseUrl)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tthis.pending = true;\n\t\t// Intent is consent-gated at persist time: an entry created while sharing\n\t\t// is off would turn a later enable into retroactive collection of\n\t\t// opted-out sessions. Marking re-runs every persist (existsSync-cheap),\n\t\t// so an entry pruned by a racing catch-up is re-registered.\n\t\tif (this.options.settingsManager.getAgentTracesEnabled()) {\n\t\t\tconst sessionFile = this.sessionManager.getSessionFile();\n\t\t\tif (\n\t\t\t\tsessionFile &&\n\t\t\t\t!locallyManagedSessionFiles.has(sessionFile) &&\n\t\t\t\tmarkAgentTraceOutboxPendingSync(sessionFile)\n\t\t\t) {\n\t\t\t\tlocallyManagedSessionFiles.add(sessionFile);\n\t\t\t}\n\t\t\tconst ledgerPath = this.options.semanticEdgesLedgerPath;\n\t\t\tif (ledgerPath) {\n\t\t\t\tmarkAgentTraceOutboxPendingSync(ledgerPath, SEMANTIC_EDGES_OUTBOX_KIND);\n\t\t\t}\n\t\t}\n\t\tthis.arm();\n\t};\n\n\tprivate arm(): void {\n\t\tif (this.timeout) {\n\t\t\tclearTimeout(this.timeout);\n\t\t}\n\t\tconst elapsed = this.lastUploadStartedAt === undefined ? undefined : Date.now() - this.lastUploadStartedAt;\n\t\tconst throttleDelay = elapsed === undefined ? 0 : Math.max(0, TRACE_UPLOAD_MIN_INTERVAL_MS - elapsed);\n\t\tconst notBeforeDelay = Math.max(0, this.notBeforeAt - Date.now());\n\t\tthis.timeout = setTimeout(\n\t\t\t() => {\n\t\t\t\tthis.timeout = undefined;\n\t\t\t\tvoid this.runScheduledUpload();\n\t\t\t},\n\t\t\tMath.max(TRACE_UPLOAD_DEBOUNCE_MS, throttleDelay, notBeforeDelay),\n\t\t);\n\t\tthis.timeout.unref();\n\t}\n\n\tprivate async runScheduledUpload(): Promise<void> {\n\t\tif (this.inFlight) {\n\t\t\treturn;\n\t\t}\n\t\tthis.pending = false;\n\t\tthis.lastUploadStartedAt = Date.now();\n\t\tthis.inFlight = uploadAgentTraceSession({\n\t\t\t...this.options,\n\t\t\tsessionManager: this.sessionManager,\n\t\t}).then(\n\t\t\t(result) => {\n\t\t\t\tif (result.status === \"failed\" && isRescheduledUploadFailure(result.statusCode)) {\n\t\t\t\t\tthis.pending = true;\n\t\t\t\t\tif (result.retryAfterMs !== undefined) {\n\t\t\t\t\t\tthis.notBeforeAt = Date.now() + result.retryAfterMs;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => undefined,\n\t\t);\n\t\tawait this.inFlight;\n\t\tthis.inFlight = undefined;\n\t\tif (this.pending) {\n\t\t\tthis.arm();\n\t\t}\n\t}\n}\n\nfunction isRescheduledUploadFailure(statusCode: number | undefined): boolean {\n\treturn statusCode === undefined || statusCode === 429 || RETRIABLE_HTTP_STATUSES.has(statusCode);\n}\n\nconst traceUploadControllers = new WeakMap<SessionManager, AgentTraceUploadController>();\nexport function installAgentTraceUpload(sessionManager: SessionManager, options: AgentTraceUploadInstallOptions): void {\n\t// Enabling export applies to live sessions, not an inherited outbox backlog.\n\tlet controller = traceUploadControllers.get(sessionManager);\n\tif (controller) {\n\t\tcontroller.update(options);\n\t\treturn;\n\t}\n\n\tcontroller = new AgentTraceUploadController(sessionManager, options);\n\ttraceUploadControllers.set(sessionManager, controller);\n\tsessionManager.onPersist(controller.schedule);\n}\n"]}
@@ -1,70 +0,0 @@
1
- import type { OAuthAuthInfo } from "@ponythewhite/base-context-ai";
2
- export declare const PRIME_INFERENCE_PROVIDER_ID = "prime-inference";
3
- export declare const PRIME_INFERENCE_PROVIDER_NAME = "Prime Inference";
4
- export declare const BASE_CONTEXT_TRACES_PROVIDER_ID = "base-context-traces";
5
- export declare const BASE_CONTEXT_TRACES_PROVIDER_NAME = "Base Context Traces";
6
- export type PrimeInferenceAuthSource = "api-key";
7
- export type PrimeInferenceLoginResult = {
8
- apiKey: string;
9
- source: PrimeInferenceAuthSource;
10
- };
11
- export type PrimeCliConfig = {
12
- apiKey?: string;
13
- baseUrl: string;
14
- frontendUrl: string;
15
- inferenceUrl: string;
16
- path: string;
17
- teamId?: string;
18
- teamName?: string;
19
- teamRole?: string;
20
- teamIdFromEnv: boolean;
21
- };
22
- export type PrimeInferenceLoginCallbacks = {
23
- onAuth: (info: OAuthAuthInfo) => void;
24
- onProgress?: (message: string) => void;
25
- signal?: AbortSignal;
26
- };
27
- export type PrimeInferenceLoginOptions = {
28
- apiKey?: string;
29
- configPath?: string;
30
- fetchFn?: typeof fetch;
31
- requestTimeoutMs?: number;
32
- };
33
- export type PrimeInferenceAccessResult = {
34
- ok: true;
35
- } | {
36
- ok: false;
37
- status?: number;
38
- message: string;
39
- };
40
- export type PrimeTeam = {
41
- teamId: string;
42
- name: string;
43
- slug?: string;
44
- role?: string;
45
- createdAt?: string;
46
- };
47
- export declare function getPrimeCliConfigPath(configPath?: string): string;
48
- export declare function loadPrimeCliConfig(configPath?: string): PrimeCliConfig;
49
- export declare function savePrimeCliApiKey(apiKey: string, configPath?: string): PrimeCliConfig;
50
- export declare function clearPrimeCliCredentials(configPath?: string): PrimeCliConfig;
51
- export declare function savePrimeCliTeamSelection(team: PrimeTeam | null, configPath?: string): PrimeCliConfig;
52
- export declare function resolvePrimeAgentTracesBaseUrl(baseUrl?: string): string | undefined;
53
- export declare function fetchPrimeTeams(apiKey: string, baseUrl: string, options?: {
54
- fetchFn?: typeof fetch;
55
- requestTimeoutMs?: number;
56
- signal?: AbortSignal;
57
- }): Promise<PrimeTeam[]>;
58
- export declare function checkPrimeInferenceAccess(apiKey: string, baseUrl: string, options?: {
59
- fetchFn?: typeof fetch;
60
- requestTimeoutMs?: number;
61
- signal?: AbortSignal;
62
- }): Promise<PrimeInferenceAccessResult>;
63
- export declare function checkPrimeAgentTracesAccess(apiKey: string, baseUrl: string, options?: {
64
- fetchFn?: typeof fetch;
65
- requestTimeoutMs?: number;
66
- signal?: AbortSignal;
67
- }): Promise<PrimeInferenceAccessResult>;
68
- export declare function loginPrimeInference(callbacks: PrimeInferenceLoginCallbacks, options?: PrimeInferenceLoginOptions): Promise<PrimeInferenceLoginResult>;
69
- export declare function loginPrimeAgentTraces(_callbacks: PrimeInferenceLoginCallbacks, _options?: PrimeInferenceLoginOptions): Promise<PrimeInferenceLoginResult>;
70
- //# sourceMappingURL=prime-inference-auth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prime-inference-auth.d.ts","sourceRoot":"","sources":["../../src/core/prime-inference-auth.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tchmodSync,\n\tcloseSync,\n\texistsSync,\n\tmkdirSync,\n\topenSync,\n\treadFileSync,\n\trenameSync,\n\trmSync,\n\twriteFileSync,\n} from \"node:fs\";\nimport { basename, dirname, join } from \"node:path\";\nimport type { OAuthAuthInfo } from \"@ponythewhite/base-context-ai\";\nimport { getAgentDir } from \"../config.js\";\nimport { assertProductStatePath } from \"../runtime-paths.js\";\n\nexport const PRIME_INFERENCE_PROVIDER_ID = \"prime-inference\";\nexport const PRIME_INFERENCE_PROVIDER_NAME = \"Prime Inference\";\nexport const BASE_CONTEXT_TRACES_PROVIDER_ID = \"base-context-traces\";\nexport const BASE_CONTEXT_TRACES_PROVIDER_NAME = \"Base Context 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;\n\nexport type PrimeInferenceAuthSource = \"api-key\";\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\tapiKey?: string;\n\tconfigPath?: string;\n\tfetchFn?: typeof fetch;\n\trequestTimeoutMs?: number;\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 assertProductStatePath(join(getAgentDir(), \"prime-inference.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\tconfigPath = assertProductStatePath(configPath);\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 resolvePrimeAgentTracesBaseUrl(baseUrl?: string): string | undefined {\n\tconst configuredBaseUrl = baseUrl?.trim() || stringEnv(\"BASE_CONTEXT_TRACES_BASE_URL\");\n\treturn configuredBaseUrl ? normalizeBaseUrl(configuredBaseUrl) : undefined;\n}\n\nfunction throwIfCancelled(signal?: AbortSignal): void {\n\tif (signal?.aborted) {\n\t\tthrow new Error(\"Login cancelled\");\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\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 checkPrimeAgentTracesAccess(\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\tthrowIfCancelled(callbacks.signal);\n\tconst config = loadPrimeCliConfig(options.configPath);\n\tconst apiKey = options.apiKey?.trim() || stringEnv(\"PRIME_API_KEY\") || config.apiKey;\n\tif (!apiKey) {\n\t\tthrow new Error(\n\t\t\t\"Base Context does not support Prime browser sign-in. Use /login to enter a Prime Inference API key, or set PRIME_API_KEY.\",\n\t\t);\n\t}\n\n\tcallbacks.onProgress?.(\"Checking Prime Inference access...\");\n\tconst access = await checkPrimeInferenceAccess(apiKey, config.baseUrl, {\n\t\tfetchFn: options.fetchFn,\n\t\trequestTimeoutMs: options.requestTimeoutMs,\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: \"api-key\" };\n}\n\nexport async function loginPrimeAgentTraces(\n\t_callbacks: PrimeInferenceLoginCallbacks,\n\t_options: PrimeInferenceLoginOptions = {},\n): Promise<PrimeInferenceLoginResult> {\n\tthrow new Error(\n\t\t\"Base Context trace browser sign-in is not configured. Set BASE_CONTEXT_TRACES_BASE_URL and a dedicated BASE_CONTEXT_TRACES_API_KEY; Prime Inference credentials are not used for traces.\",\n\t);\n}\n"]}
@@ -1,352 +0,0 @@
1
- import { chmodSync, closeSync, existsSync, mkdirSync, openSync, readFileSync, renameSync, rmSync, writeFileSync, } from "node:fs";
2
- import { basename, dirname, join } from "node:path";
3
- import { getAgentDir } from "../config.js";
4
- import { assertProductStatePath } from "../runtime-paths.js";
5
- export const PRIME_INFERENCE_PROVIDER_ID = "prime-inference";
6
- export const PRIME_INFERENCE_PROVIDER_NAME = "Prime Inference";
7
- export const BASE_CONTEXT_TRACES_PROVIDER_ID = "base-context-traces";
8
- export const BASE_CONTEXT_TRACES_PROVIDER_NAME = "Base Context Traces";
9
- const DEFAULT_PRIME_API_BASE_URL = "https://api.primeintellect.ai";
10
- const DEFAULT_PRIME_FRONTEND_URL = "https://app.primeintellect.ai";
11
- const DEFAULT_PRIME_INFERENCE_URL = "https://api.pinference.ai/api/v1";
12
- const DEFAULT_REQUEST_TIMEOUT_MS = 30_000;
13
- function defaultPrimeCliConfigPath() {
14
- return assertProductStatePath(join(getAgentDir(), "prime-inference.json"));
15
- }
16
- export function getPrimeCliConfigPath(configPath) {
17
- return configPath ?? defaultPrimeCliConfigPath();
18
- }
19
- function normalizeBaseUrl(value) {
20
- return (value?.trim() || DEFAULT_PRIME_API_BASE_URL).replace(/\/+$/, "").replace(/\/api\/v1$/, "");
21
- }
22
- function normalizeUrl(value, fallback) {
23
- return (value || fallback).trim().replace(/\/+$/, "");
24
- }
25
- function stringField(data, key) {
26
- const value = data[key];
27
- return typeof value === "string" && value.trim() ? value.trim() : undefined;
28
- }
29
- function stringEnv(name) {
30
- const value = process.env[name];
31
- return typeof value === "string" && value.trim() ? value.trim() : undefined;
32
- }
33
- function numberField(data, key) {
34
- const value = data[key];
35
- return typeof value === "number" && Number.isFinite(value) ? value : undefined;
36
- }
37
- function isRecord(value) {
38
- return typeof value === "object" && value !== null && !Array.isArray(value);
39
- }
40
- function readPrimeCliConfigData(configPath) {
41
- let data = {};
42
- if (existsSync(configPath)) {
43
- try {
44
- const parsed = JSON.parse(readFileSync(configPath, "utf-8"));
45
- if (isRecord(parsed)) {
46
- data = parsed;
47
- }
48
- }
49
- catch {
50
- data = {};
51
- }
52
- }
53
- return data;
54
- }
55
- function writePrimeCliConfigData(configPath, data) {
56
- configPath = assertProductStatePath(configPath);
57
- const dir = dirname(configPath);
58
- if (!existsSync(dir)) {
59
- mkdirSync(dir, { recursive: true, mode: 0o700 });
60
- }
61
- const tempPath = join(dir, `.${basename(configPath)}.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}.tmp`);
62
- let fd = openSync(tempPath, "wx", 0o600);
63
- try {
64
- writeFileSync(fd, `${JSON.stringify(data, null, 2)}\n`, "utf-8");
65
- closeSync(fd);
66
- fd = undefined;
67
- chmodSync(tempPath, 0o600);
68
- renameSync(tempPath, configPath);
69
- chmodSync(configPath, 0o600);
70
- }
71
- finally {
72
- if (fd !== undefined) {
73
- closeSync(fd);
74
- }
75
- if (existsSync(tempPath)) {
76
- rmSync(tempPath, { force: true });
77
- }
78
- }
79
- }
80
- function clearPrimeTeamFields(data) {
81
- delete data.team_id;
82
- delete data.team_name;
83
- delete data.team_role;
84
- }
85
- export function loadPrimeCliConfig(configPath = defaultPrimeCliConfigPath()) {
86
- const data = readPrimeCliConfigData(configPath);
87
- const teamIdFromEnv = stringEnv("PRIME_TEAM_ID");
88
- const teamId = teamIdFromEnv ?? stringField(data, "team_id");
89
- const config = {
90
- baseUrl: normalizeBaseUrl(stringField(data, "base_url")),
91
- frontendUrl: normalizeUrl(stringField(data, "frontend_url"), DEFAULT_PRIME_FRONTEND_URL),
92
- inferenceUrl: normalizeUrl(stringField(data, "inference_url"), DEFAULT_PRIME_INFERENCE_URL),
93
- path: configPath,
94
- teamIdFromEnv: teamIdFromEnv !== undefined,
95
- };
96
- const apiKey = stringField(data, "api_key");
97
- if (apiKey) {
98
- config.apiKey = apiKey;
99
- }
100
- if (teamId) {
101
- config.teamId = teamId;
102
- }
103
- if (!teamIdFromEnv) {
104
- const teamName = stringField(data, "team_name");
105
- const teamRole = stringField(data, "team_role");
106
- if (teamName) {
107
- config.teamName = teamName;
108
- }
109
- if (teamRole) {
110
- config.teamRole = teamRole;
111
- }
112
- }
113
- return config;
114
- }
115
- export function savePrimeCliApiKey(apiKey, configPath = defaultPrimeCliConfigPath()) {
116
- const data = readPrimeCliConfigData(configPath);
117
- data.api_key = apiKey;
118
- clearPrimeTeamFields(data);
119
- writePrimeCliConfigData(configPath, data);
120
- return loadPrimeCliConfig(configPath);
121
- }
122
- export function clearPrimeCliCredentials(configPath = defaultPrimeCliConfigPath()) {
123
- const data = readPrimeCliConfigData(configPath);
124
- delete data.api_key;
125
- clearPrimeTeamFields(data);
126
- writePrimeCliConfigData(configPath, data);
127
- return loadPrimeCliConfig(configPath);
128
- }
129
- export function savePrimeCliTeamSelection(team, configPath = defaultPrimeCliConfigPath()) {
130
- const data = readPrimeCliConfigData(configPath);
131
- if (team) {
132
- data.team_id = team.teamId;
133
- data.team_name = team.name;
134
- if (team.role) {
135
- data.team_role = team.role;
136
- }
137
- else {
138
- delete data.team_role;
139
- }
140
- }
141
- else {
142
- clearPrimeTeamFields(data);
143
- }
144
- writePrimeCliConfigData(configPath, data);
145
- return loadPrimeCliConfig(configPath);
146
- }
147
- export function resolvePrimeAgentTracesBaseUrl(baseUrl) {
148
- const configuredBaseUrl = baseUrl?.trim() || stringEnv("BASE_CONTEXT_TRACES_BASE_URL");
149
- return configuredBaseUrl ? normalizeBaseUrl(configuredBaseUrl) : undefined;
150
- }
151
- function throwIfCancelled(signal) {
152
- if (signal?.aborted) {
153
- throw new Error("Login cancelled");
154
- }
155
- }
156
- async function fetchWithTimeout(fetchFn, url, init, timeoutMs, signal) {
157
- throwIfCancelled(signal);
158
- const controller = new AbortController();
159
- const timeout = setTimeout(() => controller.abort(), timeoutMs);
160
- const onAbort = () => controller.abort();
161
- signal?.addEventListener("abort", onAbort, { once: true });
162
- try {
163
- return await fetchFn(url, { ...init, signal: controller.signal });
164
- }
165
- catch (error) {
166
- if (signal?.aborted) {
167
- throw new Error("Login cancelled");
168
- }
169
- if (controller.signal.aborted) {
170
- throw new Error("Prime Inference request timed out");
171
- }
172
- throw error;
173
- }
174
- finally {
175
- clearTimeout(timeout);
176
- signal?.removeEventListener("abort", onAbort);
177
- }
178
- }
179
- async function readResponseMessage(response) {
180
- const text = await response.text().catch(() => "");
181
- if (!text.trim()) {
182
- return response.statusText || "Unknown error";
183
- }
184
- try {
185
- const parsed = JSON.parse(text);
186
- if (isRecord(parsed)) {
187
- const error = parsed.error;
188
- if (isRecord(error)) {
189
- const message = stringField(error, "message");
190
- if (message)
191
- return message;
192
- }
193
- const detail = stringField(parsed, "detail");
194
- if (detail)
195
- return detail;
196
- const message = stringField(parsed, "message");
197
- if (message)
198
- return message;
199
- }
200
- }
201
- catch {
202
- // Fall back to raw text.
203
- }
204
- return text.trim();
205
- }
206
- async function readJsonObject(response, context) {
207
- let parsed;
208
- try {
209
- parsed = (await response.json());
210
- }
211
- catch {
212
- throw new Error(`${context} returned an invalid response`);
213
- }
214
- if (!isRecord(parsed)) {
215
- throw new Error(`${context} returned an invalid response`);
216
- }
217
- return parsed;
218
- }
219
- function parsePrimeTeam(value) {
220
- if (!isRecord(value)) {
221
- return undefined;
222
- }
223
- const teamId = stringField(value, "teamId");
224
- if (!teamId) {
225
- return undefined;
226
- }
227
- const team = {
228
- teamId,
229
- name: stringField(value, "name") ?? "Unknown",
230
- };
231
- const slug = stringField(value, "slug");
232
- const role = stringField(value, "role");
233
- const createdAt = stringField(value, "createdAt");
234
- if (slug) {
235
- team.slug = slug;
236
- }
237
- if (role) {
238
- team.role = role;
239
- }
240
- if (createdAt) {
241
- team.createdAt = createdAt;
242
- }
243
- return team;
244
- }
245
- export async function fetchPrimeTeams(apiKey, baseUrl, options = {}) {
246
- const fetchFn = options.fetchFn ?? fetch;
247
- const requestTimeoutMs = options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
248
- const teams = [];
249
- let offset = 0;
250
- const limit = 100;
251
- while (true) {
252
- const url = new URL(`${normalizeBaseUrl(baseUrl)}/api/v1/user/teams`);
253
- url.searchParams.set("offset", String(offset));
254
- url.searchParams.set("limit", String(limit));
255
- const response = await fetchWithTimeout(fetchFn, url, {
256
- method: "GET",
257
- headers: {
258
- Authorization: `Bearer ${apiKey}`,
259
- Accept: "application/json",
260
- },
261
- }, requestTimeoutMs, options.signal);
262
- if (!response.ok) {
263
- throw new Error(`Failed to fetch Prime teams: ${await readResponseMessage(response)}`);
264
- }
265
- const data = await readJsonObject(response, "Prime teams");
266
- const batch = data.data;
267
- if (!Array.isArray(batch)) {
268
- throw new Error("Prime teams response missing team data");
269
- }
270
- for (const item of batch) {
271
- const team = parsePrimeTeam(item);
272
- if (team) {
273
- teams.push(team);
274
- }
275
- }
276
- const totalCount = numberField(data, "total_count") ?? teams.length;
277
- if (batch.length === 0 || teams.length >= totalCount) {
278
- break;
279
- }
280
- offset += limit;
281
- }
282
- return teams;
283
- }
284
- async function checkPrimeScopeAccess(apiKey, baseUrl, scopeName, scopeLabel, options = {}) {
285
- const fetchFn = options.fetchFn ?? fetch;
286
- const requestTimeoutMs = options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
287
- const url = `${normalizeBaseUrl(baseUrl)}/api/v1/user/whoami`;
288
- const response = await fetchWithTimeout(fetchFn, url, {
289
- method: "GET",
290
- headers: {
291
- Authorization: `Bearer ${apiKey}`,
292
- Accept: "application/json",
293
- },
294
- }, requestTimeoutMs, options.signal);
295
- if (!response.ok) {
296
- return {
297
- ok: false,
298
- status: response.status,
299
- message: await readResponseMessage(response),
300
- };
301
- }
302
- const data = await readJsonObject(response, "Prime whoami");
303
- const user = data.data;
304
- if (!isRecord(user)) {
305
- return { ok: false, message: "Prime whoami response missing user data" };
306
- }
307
- const scope = user.scope;
308
- if (!isRecord(scope)) {
309
- return { ok: false, message: "Prime token is missing permission scope data" };
310
- }
311
- const scopedPermission = scope[scopeName];
312
- if (!isRecord(scopedPermission)) {
313
- return { ok: false, message: `Prime token is missing ${scopeLabel} permissions` };
314
- }
315
- if (scopedPermission.write === true) {
316
- return { ok: true };
317
- }
318
- return { ok: false, message: `Prime token does not have ${scopeLabel} write permission` };
319
- }
320
- export async function checkPrimeInferenceAccess(apiKey, baseUrl, options = {}) {
321
- return checkPrimeScopeAccess(apiKey, baseUrl, "inference", "inference", options);
322
- }
323
- export async function checkPrimeAgentTracesAccess(apiKey, baseUrl, options = {}) {
324
- return checkPrimeScopeAccess(apiKey, baseUrl, "agent_traces", "agent trace", options);
325
- }
326
- function formatAccessFailure(result) {
327
- const status = result.status === undefined ? "" : `HTTP ${result.status}: `;
328
- return `${status}${result.message}`;
329
- }
330
- export async function loginPrimeInference(callbacks, options = {}) {
331
- throwIfCancelled(callbacks.signal);
332
- const config = loadPrimeCliConfig(options.configPath);
333
- const apiKey = options.apiKey?.trim() || stringEnv("PRIME_API_KEY") || config.apiKey;
334
- if (!apiKey) {
335
- throw new Error("Base Context does not support Prime browser sign-in. Use /login to enter a Prime Inference API key, or set PRIME_API_KEY.");
336
- }
337
- callbacks.onProgress?.("Checking Prime Inference access...");
338
- const access = await checkPrimeInferenceAccess(apiKey, config.baseUrl, {
339
- fetchFn: options.fetchFn,
340
- requestTimeoutMs: options.requestTimeoutMs,
341
- signal: callbacks.signal,
342
- });
343
- if (!access.ok) {
344
- throw new Error(`Prime API key does not have Prime Inference access (${formatAccessFailure(access)})`);
345
- }
346
- throwIfCancelled(callbacks.signal);
347
- return { apiKey, source: "api-key" };
348
- }
349
- export async function loginPrimeAgentTraces(_callbacks, _options = {}) {
350
- throw new Error("Base Context trace browser sign-in is not configured. Set BASE_CONTEXT_TRACES_BASE_URL and a dedicated BASE_CONTEXT_TRACES_API_KEY; Prime Inference credentials are not used for traces.");
351
- }
352
- //# sourceMappingURL=prime-inference-auth.js.map