@bubblebrain-ai/bubble 0.0.63 → 0.0.65

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 (912) hide show
  1. package/README.md +437 -11
  2. package/dist/agent/abort-errors.d.ts +18 -0
  3. package/dist/agent/abort-errors.js +51 -0
  4. package/dist/agent/budget-ledger.d.ts +20 -0
  5. package/dist/agent/budget-ledger.js +45 -0
  6. package/dist/agent/categories.d.ts +100 -0
  7. package/dist/agent/categories.js +203 -0
  8. package/dist/agent/change-tracker.d.ts +40 -0
  9. package/dist/agent/change-tracker.js +89 -0
  10. package/dist/agent/child-runner.d.ts +64 -0
  11. package/dist/agent/child-runner.js +405 -0
  12. package/dist/agent/input-controller.d.ts +14 -0
  13. package/dist/agent/input-controller.js +43 -0
  14. package/dist/agent/internal-reminder-sanitizer.d.ts +25 -0
  15. package/dist/agent/internal-reminder-sanitizer.js +297 -0
  16. package/dist/agent/profiles.d.ts +76 -0
  17. package/dist/agent/profiles.js +526 -0
  18. package/dist/agent/provider-fingerprint.d.ts +6 -0
  19. package/dist/agent/provider-fingerprint.js +89 -0
  20. package/dist/agent/resident-history.d.ts +7 -0
  21. package/dist/agent/resident-history.js +61 -0
  22. package/dist/agent/result-integrator.d.ts +22 -0
  23. package/dist/agent/result-integrator.js +50 -0
  24. package/dist/agent/routing-catalog.d.ts +131 -0
  25. package/dist/agent/routing-catalog.js +260 -0
  26. package/dist/agent/structured-output.d.ts +37 -0
  27. package/dist/agent/structured-output.js +193 -0
  28. package/dist/agent/subagent/router.d.ts +65 -0
  29. package/dist/agent/subagent/router.js +203 -0
  30. package/dist/agent/subagent/runtime.d.ts +235 -0
  31. package/dist/agent/subagent/runtime.js +835 -0
  32. package/dist/agent/subagent-control.d.ts +100 -0
  33. package/dist/agent/subagent-control.js +70 -0
  34. package/dist/agent/subagent-lifecycle-reminder.d.ts +3 -0
  35. package/dist/agent/subagent-lifecycle-reminder.js +112 -0
  36. package/dist/agent/subagent-route-format.d.ts +8 -0
  37. package/dist/agent/subagent-route-format.js +18 -0
  38. package/dist/agent/subagent-scheduler.d.ts +105 -0
  39. package/dist/agent/subagent-scheduler.js +287 -0
  40. package/dist/agent/subagent-store.d.ts +57 -0
  41. package/dist/agent/subagent-store.js +180 -0
  42. package/dist/agent/subagent-summary.d.ts +30 -0
  43. package/dist/agent/subagent-summary.js +74 -0
  44. package/dist/agent/subagent-wait-guidance.d.ts +2 -0
  45. package/dist/agent/subagent-wait-guidance.js +8 -0
  46. package/dist/agent/subtask-policy.d.ts +13 -0
  47. package/dist/agent/subtask-policy.js +56 -0
  48. package/dist/agent/task-lifecycle-reminder.d.ts +26 -0
  49. package/dist/agent/task-lifecycle-reminder.js +59 -0
  50. package/dist/agent/tool-intent.d.ts +45 -0
  51. package/dist/agent/tool-intent.js +318 -0
  52. package/dist/agent/tool-visibility.d.ts +10 -0
  53. package/dist/agent/tool-visibility.js +6 -0
  54. package/dist/agent/transcript-helpers.d.ts +20 -0
  55. package/dist/agent/transcript-helpers.js +63 -0
  56. package/dist/agent/update-queue.d.ts +13 -0
  57. package/dist/agent/update-queue.js +69 -0
  58. package/dist/agent/workflow/control.d.ts +60 -0
  59. package/dist/agent/workflow/control.js +62 -0
  60. package/dist/agent/workflow/errors.d.ts +16 -0
  61. package/dist/agent/workflow/errors.js +24 -0
  62. package/dist/agent/workflow/runs.d.ts +73 -0
  63. package/dist/agent/workflow/runs.js +160 -0
  64. package/dist/agent/workflow/runtime.d.ts +88 -0
  65. package/dist/agent/workflow/runtime.js +319 -0
  66. package/dist/agent/worktree.d.ts +29 -0
  67. package/dist/agent/worktree.js +73 -0
  68. package/dist/agent.d.ts +460 -0
  69. package/dist/agent.js +2210 -0
  70. package/dist/anthropic-thinking.d.ts +4 -0
  71. package/dist/anthropic-thinking.js +11 -0
  72. package/dist/approval/controller.d.ts +71 -0
  73. package/dist/approval/controller.js +286 -0
  74. package/dist/approval/danger.d.ts +13 -0
  75. package/dist/approval/danger.js +55 -0
  76. package/dist/approval/diff-hunks.d.ts +12 -0
  77. package/dist/approval/diff-hunks.js +32 -0
  78. package/dist/approval/protected-paths.d.ts +1 -0
  79. package/dist/approval/protected-paths.js +35 -0
  80. package/dist/approval/session-cache.d.ts +21 -0
  81. package/dist/approval/session-cache.js +38 -0
  82. package/dist/approval/tool-helper.d.ts +14 -0
  83. package/dist/approval/tool-helper.js +47 -0
  84. package/dist/approval/types.d.ts +146 -0
  85. package/dist/approval/types.js +8 -0
  86. package/dist/bin.d.ts +2 -0
  87. package/dist/bin.js +3 -0
  88. package/dist/bubble-home.d.ts +8 -0
  89. package/dist/bubble-home.js +19 -0
  90. package/dist/checkpoints.d.ts +57 -0
  91. package/dist/checkpoints.js +0 -0
  92. package/dist/cli.d.ts +37 -0
  93. package/dist/cli.js +175 -0
  94. package/dist/clipboard.d.ts +14 -0
  95. package/dist/clipboard.js +132 -0
  96. package/dist/config.d.ts +96 -0
  97. package/dist/config.js +287 -0
  98. package/dist/context/budget.d.ts +28 -0
  99. package/dist/context/budget.js +130 -0
  100. package/dist/context/checkpoint.d.ts +18 -0
  101. package/dist/context/checkpoint.js +117 -0
  102. package/dist/context/compact-llm.d.ts +25 -0
  103. package/dist/context/compact-llm.js +175 -0
  104. package/dist/context/compact.d.ts +124 -0
  105. package/dist/context/compact.js +635 -0
  106. package/dist/context/compaction-files.d.ts +44 -0
  107. package/dist/context/compaction-files.js +148 -0
  108. package/dist/context/llm-compactor.d.ts +53 -0
  109. package/dist/context/llm-compactor.js +424 -0
  110. package/dist/context/overflow.d.ts +9 -0
  111. package/dist/context/overflow.js +50 -0
  112. package/dist/context/projector.d.ts +34 -0
  113. package/dist/context/projector.js +251 -0
  114. package/dist/context/prune.d.ts +26 -0
  115. package/dist/context/prune.js +171 -0
  116. package/dist/context/session-write-lock.d.ts +20 -0
  117. package/dist/context/session-write-lock.js +162 -0
  118. package/dist/context/token-estimator.d.ts +14 -0
  119. package/dist/context/token-estimator.js +106 -0
  120. package/dist/context/tool-images.d.ts +3 -0
  121. package/dist/context/tool-images.js +35 -0
  122. package/dist/context/tool-output-truncate.d.ts +24 -0
  123. package/dist/context/tool-output-truncate.js +181 -0
  124. package/dist/context/usage.d.ts +34 -0
  125. package/dist/context/usage.js +230 -0
  126. package/dist/debug-trace.d.ts +27 -0
  127. package/dist/debug-trace.js +401 -0
  128. package/dist/diff-stats.d.ts +5 -0
  129. package/dist/diff-stats.js +21 -0
  130. package/dist/external-runtime/grok-acp.d.ts +56 -0
  131. package/dist/external-runtime/grok-acp.js +386 -0
  132. package/dist/external-runtime/grok-binary.d.ts +25 -0
  133. package/dist/external-runtime/grok-binary.js +108 -0
  134. package/dist/external-runtime/grok-errors.d.ts +7 -0
  135. package/dist/external-runtime/grok-errors.js +15 -0
  136. package/dist/external-runtime/grok-input-policy.d.ts +58 -0
  137. package/dist/external-runtime/grok-input-policy.js +52 -0
  138. package/dist/external-runtime/grok-ndjson.d.ts +14 -0
  139. package/dist/external-runtime/grok-ndjson.js +193 -0
  140. package/dist/external-runtime/grok-network.d.ts +15 -0
  141. package/dist/external-runtime/grok-network.js +81 -0
  142. package/dist/external-runtime/grok-preflight.d.ts +28 -0
  143. package/dist/external-runtime/grok-preflight.js +194 -0
  144. package/dist/external-runtime/grok-process.d.ts +26 -0
  145. package/dist/external-runtime/grok-process.js +184 -0
  146. package/dist/external-runtime/grok-profile.d.ts +32 -0
  147. package/dist/external-runtime/grok-profile.js +419 -0
  148. package/dist/external-runtime/grok-provider.d.ts +31 -0
  149. package/dist/external-runtime/grok-provider.js +41 -0
  150. package/dist/external-runtime/grok-runtime.d.ts +91 -0
  151. package/dist/external-runtime/grok-runtime.js +882 -0
  152. package/dist/external-runtime/index.d.ts +13 -0
  153. package/dist/external-runtime/index.js +13 -0
  154. package/dist/external-runtime/session-policy.d.ts +11 -0
  155. package/dist/external-runtime/session-policy.js +30 -0
  156. package/dist/external-runtime/types.d.ts +65 -0
  157. package/dist/external-runtime/types.js +1 -0
  158. package/dist/feedback/collect.d.ts +7 -0
  159. package/dist/feedback/collect.js +119 -0
  160. package/dist/feedback/config.d.ts +14 -0
  161. package/dist/feedback/config.js +16 -0
  162. package/dist/feedback/redact.d.ts +1 -0
  163. package/dist/feedback/redact.js +25 -0
  164. package/dist/feedback/submit.d.ts +6 -0
  165. package/dist/feedback/submit.js +43 -0
  166. package/dist/feedback/types.d.ts +22 -0
  167. package/dist/feedback/types.js +1 -0
  168. package/dist/feishu/agent-host/approval-card.d.ts +11 -0
  169. package/dist/feishu/agent-host/approval-card.js +85 -0
  170. package/dist/feishu/agent-host/approval-ui.d.ts +59 -0
  171. package/dist/feishu/agent-host/approval-ui.js +214 -0
  172. package/dist/feishu/agent-host/run-driver.d.ts +51 -0
  173. package/dist/feishu/agent-host/run-driver.js +397 -0
  174. package/dist/feishu/agent-host/runtime-deps.d.ts +33 -0
  175. package/dist/feishu/agent-host/runtime-deps.js +8 -0
  176. package/dist/feishu/card/budget.d.ts +40 -0
  177. package/dist/feishu/card/budget.js +134 -0
  178. package/dist/feishu/card/renderer.d.ts +29 -0
  179. package/dist/feishu/card/renderer.js +245 -0
  180. package/dist/feishu/card/run-state-types.d.ts +49 -0
  181. package/dist/feishu/card/run-state-types.js +15 -0
  182. package/dist/feishu/card/run-state.d.ts +21 -0
  183. package/dist/feishu/card/run-state.js +223 -0
  184. package/dist/feishu/channel/channel.d.ts +52 -0
  185. package/dist/feishu/channel/channel.js +74 -0
  186. package/dist/feishu/config.d.ts +24 -0
  187. package/dist/feishu/config.js +97 -0
  188. package/dist/feishu/format.d.ts +6 -0
  189. package/dist/feishu/format.js +14 -0
  190. package/dist/feishu/index.d.ts +4 -0
  191. package/dist/feishu/index.js +4 -0
  192. package/dist/feishu/logger.d.ts +31 -0
  193. package/dist/feishu/logger.js +62 -0
  194. package/dist/feishu/paths.d.ts +12 -0
  195. package/dist/feishu/paths.js +38 -0
  196. package/dist/feishu/process-registry.d.ts +29 -0
  197. package/dist/feishu/process-registry.js +90 -0
  198. package/dist/feishu/router/commands.d.ts +38 -0
  199. package/dist/feishu/router/commands.js +286 -0
  200. package/dist/feishu/router/event-router.d.ts +40 -0
  201. package/dist/feishu/router/event-router.js +208 -0
  202. package/dist/feishu/router/whitelist.d.ts +23 -0
  203. package/dist/feishu/router/whitelist.js +20 -0
  204. package/dist/feishu/runtime/active-runs.d.ts +32 -0
  205. package/dist/feishu/runtime/active-runs.js +84 -0
  206. package/dist/feishu/runtime/pending-queue.d.ts +36 -0
  207. package/dist/feishu/runtime/pending-queue.js +98 -0
  208. package/dist/feishu/runtime/process-pool.d.ts +29 -0
  209. package/dist/feishu/runtime/process-pool.js +49 -0
  210. package/dist/feishu/schema.d.ts +17 -0
  211. package/dist/feishu/schema.js +252 -0
  212. package/dist/feishu/scope/scope-registry.d.ts +39 -0
  213. package/dist/feishu/scope/scope-registry.js +148 -0
  214. package/dist/feishu/scope/session-binder.d.ts +44 -0
  215. package/dist/feishu/scope/session-binder.js +100 -0
  216. package/dist/feishu/scope/session-store.d.ts +24 -0
  217. package/dist/feishu/scope/session-store.js +73 -0
  218. package/dist/feishu/secrets.d.ts +37 -0
  219. package/dist/feishu/secrets.js +129 -0
  220. package/dist/feishu/serve.d.ts +12 -0
  221. package/dist/feishu/serve.js +302 -0
  222. package/dist/feishu/types.d.ts +75 -0
  223. package/dist/feishu/types.js +23 -0
  224. package/dist/feishu/wizard.d.ts +24 -0
  225. package/dist/feishu/wizard.js +121 -0
  226. package/dist/goal/command.d.ts +20 -0
  227. package/dist/goal/command.js +76 -0
  228. package/dist/goal/engine.d.ts +33 -0
  229. package/dist/goal/engine.js +65 -0
  230. package/dist/goal/format.d.ts +18 -0
  231. package/dist/goal/format.js +112 -0
  232. package/dist/goal/prompts.d.ts +13 -0
  233. package/dist/goal/prompts.js +84 -0
  234. package/dist/goal/store.d.ts +64 -0
  235. package/dist/goal/store.js +174 -0
  236. package/dist/goal/tools.d.ts +13 -0
  237. package/dist/goal/tools.js +67 -0
  238. package/dist/goal/usage.d.ts +2 -0
  239. package/dist/goal/usage.js +3 -0
  240. package/dist/hooks/config.d.ts +9 -0
  241. package/dist/hooks/config.js +278 -0
  242. package/dist/hooks/controller.d.ts +24 -0
  243. package/dist/hooks/controller.js +254 -0
  244. package/dist/hooks/index.d.ts +6 -0
  245. package/dist/hooks/index.js +4 -0
  246. package/dist/hooks/log.d.ts +14 -0
  247. package/dist/hooks/log.js +54 -0
  248. package/dist/hooks/runner.d.ts +5 -0
  249. package/dist/hooks/runner.js +225 -0
  250. package/dist/hooks/trust.d.ts +37 -0
  251. package/dist/hooks/trust.js +143 -0
  252. package/dist/hooks/types.d.ts +173 -0
  253. package/dist/hooks/types.js +46 -0
  254. package/dist/loop/engine.d.ts +29 -0
  255. package/dist/loop/engine.js +63 -0
  256. package/dist/lsp/config.d.ts +18 -0
  257. package/dist/lsp/config.js +58 -0
  258. package/dist/lsp/diagnostics.d.ts +24 -0
  259. package/dist/lsp/diagnostics.js +103 -0
  260. package/dist/lsp/index.d.ts +3 -0
  261. package/dist/lsp/index.js +3 -0
  262. package/dist/lsp/service.d.ts +97 -0
  263. package/dist/lsp/service.js +815 -0
  264. package/dist/main.d.ts +5 -0
  265. package/dist/main.js +984 -0
  266. package/dist/mcp/client.d.ts +68 -0
  267. package/dist/mcp/client.js +177 -0
  268. package/dist/mcp/config.d.ts +30 -0
  269. package/dist/mcp/config.js +144 -0
  270. package/dist/mcp/manager.d.ts +67 -0
  271. package/dist/mcp/manager.js +328 -0
  272. package/dist/mcp/name.d.ts +26 -0
  273. package/dist/mcp/name.js +40 -0
  274. package/dist/mcp/transports.d.ts +54 -0
  275. package/dist/mcp/transports.js +267 -0
  276. package/dist/mcp/types.d.ts +111 -0
  277. package/dist/mcp/types.js +14 -0
  278. package/dist/memory/db.d.ts +65 -0
  279. package/dist/memory/db.js +332 -0
  280. package/dist/memory/index.d.ts +10 -0
  281. package/dist/memory/index.js +10 -0
  282. package/dist/memory/paths.d.ts +18 -0
  283. package/dist/memory/paths.js +38 -0
  284. package/dist/memory/phase1.d.ts +23 -0
  285. package/dist/memory/phase1.js +292 -0
  286. package/dist/memory/phase2.d.ts +19 -0
  287. package/dist/memory/phase2.js +119 -0
  288. package/dist/memory/prompts.d.ts +19 -0
  289. package/dist/memory/prompts.js +104 -0
  290. package/dist/memory/reset.d.ts +1 -0
  291. package/dist/memory/reset.js +13 -0
  292. package/dist/memory/session-policy.d.ts +25 -0
  293. package/dist/memory/session-policy.js +55 -0
  294. package/dist/memory/start.d.ts +24 -0
  295. package/dist/memory/start.js +50 -0
  296. package/dist/memory/storage.d.ts +11 -0
  297. package/dist/memory/storage.js +95 -0
  298. package/dist/memory/store.d.ts +43 -0
  299. package/dist/memory/store.js +193 -0
  300. package/dist/memory/usage.d.ts +1 -0
  301. package/dist/memory/usage.js +38 -0
  302. package/dist/model-catalog.d.ts +65 -0
  303. package/dist/model-catalog.js +399 -0
  304. package/dist/model-config.d.ts +40 -0
  305. package/dist/model-config.js +74 -0
  306. package/dist/model-data.generated.d.ts +16 -0
  307. package/dist/model-data.generated.js +275 -0
  308. package/dist/model-pricing.d.ts +54 -0
  309. package/dist/model-pricing.js +256 -0
  310. package/dist/model-selection.d.ts +7 -0
  311. package/dist/model-selection.js +18 -0
  312. package/dist/network/chatgpt-transport.d.ts +16 -0
  313. package/dist/network/chatgpt-transport.js +232 -0
  314. package/dist/network/errors.d.ts +47 -0
  315. package/dist/network/errors.js +48 -0
  316. package/dist/network/provider-transport-log.d.ts +12 -0
  317. package/dist/network/provider-transport-log.js +32 -0
  318. package/dist/network/provider-transport.d.ts +37 -0
  319. package/dist/network/provider-transport.js +256 -0
  320. package/dist/network/retry.d.ts +34 -0
  321. package/dist/network/retry.js +97 -0
  322. package/dist/network/system-proxy.d.ts +18 -0
  323. package/dist/network/system-proxy.js +175 -0
  324. package/dist/oauth/grok.d.ts +26 -0
  325. package/dist/oauth/grok.js +251 -0
  326. package/dist/oauth/index.d.ts +4 -0
  327. package/dist/oauth/index.js +3 -0
  328. package/dist/oauth/openai-codex.d.ts +15 -0
  329. package/dist/oauth/openai-codex.js +193 -0
  330. package/dist/oauth/refresh-control.d.ts +12 -0
  331. package/dist/oauth/refresh-control.js +42 -0
  332. package/dist/oauth/storage.d.ts +88 -0
  333. package/dist/oauth/storage.js +357 -0
  334. package/dist/oauth/types.d.ts +15 -0
  335. package/dist/oauth/types.js +1 -0
  336. package/dist/orchestrator/default-hooks.d.ts +22 -0
  337. package/dist/orchestrator/default-hooks.js +127 -0
  338. package/dist/orchestrator/hooks.d.ts +69 -0
  339. package/dist/orchestrator/hooks.js +52 -0
  340. package/dist/permission/mode.d.ts +19 -0
  341. package/dist/permission/mode.js +16 -0
  342. package/dist/permissions/rule.d.ts +42 -0
  343. package/dist/permissions/rule.js +293 -0
  344. package/dist/permissions/settings.d.ts +97 -0
  345. package/dist/permissions/settings.js +289 -0
  346. package/dist/permissions/shell-command.d.ts +36 -0
  347. package/dist/permissions/shell-command.js +226 -0
  348. package/dist/permissions/trust-prompt.d.ts +10 -0
  349. package/dist/permissions/trust-prompt.js +34 -0
  350. package/dist/permissions/trust.d.ts +26 -0
  351. package/dist/permissions/trust.js +113 -0
  352. package/dist/permissions/types.d.ts +61 -0
  353. package/dist/permissions/types.js +14 -0
  354. package/dist/print-output.d.ts +98 -0
  355. package/dist/print-output.js +117 -0
  356. package/dist/prompt/compose.d.ts +19 -0
  357. package/dist/prompt/compose.js +110 -0
  358. package/dist/prompt/delegation.d.ts +14 -0
  359. package/dist/prompt/delegation.js +100 -0
  360. package/dist/prompt/environment.d.ts +12 -0
  361. package/dist/prompt/environment.js +55 -0
  362. package/dist/prompt/provider-prompts/anthropic.d.ts +1 -0
  363. package/dist/prompt/provider-prompts/anthropic.js +5 -0
  364. package/dist/prompt/provider-prompts/codex.d.ts +1 -0
  365. package/dist/prompt/provider-prompts/codex.js +5 -0
  366. package/dist/prompt/provider-prompts/deepseek.d.ts +1 -0
  367. package/dist/prompt/provider-prompts/deepseek.js +7 -0
  368. package/dist/prompt/provider-prompts/default.d.ts +1 -0
  369. package/dist/prompt/provider-prompts/default.js +6 -0
  370. package/dist/prompt/provider-prompts/gemini.d.ts +1 -0
  371. package/dist/prompt/provider-prompts/gemini.js +5 -0
  372. package/dist/prompt/provider-prompts/glm.d.ts +1 -0
  373. package/dist/prompt/provider-prompts/glm.js +7 -0
  374. package/dist/prompt/provider-prompts/gpt.d.ts +1 -0
  375. package/dist/prompt/provider-prompts/gpt.js +5 -0
  376. package/dist/prompt/provider-prompts/kimi.d.ts +1 -0
  377. package/dist/prompt/provider-prompts/kimi.js +8 -0
  378. package/dist/prompt/reminders.d.ts +33 -0
  379. package/dist/prompt/reminders.js +135 -0
  380. package/dist/prompt/routing.d.ts +14 -0
  381. package/dist/prompt/routing.js +71 -0
  382. package/dist/prompt/runtime.d.ts +12 -0
  383. package/dist/prompt/runtime.js +40 -0
  384. package/dist/prompt/task-reminders.d.ts +12 -0
  385. package/dist/prompt/task-reminders.js +64 -0
  386. package/dist/provider-ai-sdk.d.ts +59 -0
  387. package/dist/provider-ai-sdk.js +584 -0
  388. package/dist/provider-anthropic.d.ts +126 -0
  389. package/dist/provider-anthropic.js +940 -0
  390. package/dist/provider-ark-responses.d.ts +29 -0
  391. package/dist/provider-ark-responses.js +518 -0
  392. package/dist/provider-artifacts.d.ts +7 -0
  393. package/dist/provider-artifacts.js +60 -0
  394. package/dist/provider-error-record.d.ts +43 -0
  395. package/dist/provider-error-record.js +213 -0
  396. package/dist/provider-grok.d.ts +50 -0
  397. package/dist/provider-grok.js +110 -0
  398. package/dist/provider-model-policy.d.ts +16 -0
  399. package/dist/provider-model-policy.js +33 -0
  400. package/dist/provider-openai-codex.d.ts +66 -0
  401. package/dist/provider-openai-codex.js +781 -0
  402. package/dist/provider-registry.d.ts +197 -0
  403. package/dist/provider-registry.js +1194 -0
  404. package/dist/provider-transform.d.ts +12 -0
  405. package/dist/provider-transform.js +293 -0
  406. package/dist/provider-zen-errors.d.ts +9 -0
  407. package/dist/provider-zen-errors.js +36 -0
  408. package/dist/provider.d.ts +85 -0
  409. package/dist/provider.js +925 -0
  410. package/dist/question/controller.d.ts +22 -0
  411. package/dist/question/controller.js +98 -0
  412. package/dist/question/index.d.ts +2 -0
  413. package/dist/question/index.js +2 -0
  414. package/dist/question/normalize.d.ts +6 -0
  415. package/dist/question/normalize.js +11 -0
  416. package/dist/question/types.d.ts +42 -0
  417. package/dist/question/types.js +6 -0
  418. package/dist/reasoning-debug.d.ts +7 -0
  419. package/dist/reasoning-debug.js +33 -0
  420. package/dist/rewind.d.ts +20 -0
  421. package/dist/rewind.js +29 -0
  422. package/dist/sdk/index.d.ts +319 -0
  423. package/dist/sdk/index.js +1068 -0
  424. package/dist/sdk/replay-event-log.d.ts +26 -0
  425. package/dist/sdk/replay-event-log.js +122 -0
  426. package/dist/sdk/session-turn-coordinator.d.ts +45 -0
  427. package/dist/sdk/session-turn-coordinator.js +227 -0
  428. package/dist/session-context-fence.d.ts +16 -0
  429. package/dist/session-context-fence.js +26 -0
  430. package/dist/session-log.d.ts +25 -0
  431. package/dist/session-log.js +444 -0
  432. package/dist/session-title.d.ts +16 -0
  433. package/dist/session-title.js +131 -0
  434. package/dist/session-types.d.ts +86 -0
  435. package/dist/session-types.js +1 -0
  436. package/dist/session.d.ts +135 -0
  437. package/dist/session.js +664 -0
  438. package/dist/skills/discovery.d.ts +12 -0
  439. package/dist/skills/discovery.js +166 -0
  440. package/dist/skills/format.d.ts +32 -0
  441. package/dist/skills/format.js +68 -0
  442. package/dist/skills/frontmatter.d.ts +5 -0
  443. package/dist/skills/frontmatter.js +60 -0
  444. package/dist/skills/invocation.d.ts +8 -0
  445. package/dist/skills/invocation.js +33 -0
  446. package/dist/skills/registry.d.ts +28 -0
  447. package/dist/skills/registry.js +79 -0
  448. package/dist/skills/types.d.ts +34 -0
  449. package/dist/skills/types.js +1 -0
  450. package/dist/slash-commands/commands.d.ts +10 -0
  451. package/dist/slash-commands/commands.js +1251 -0
  452. package/dist/slash-commands/feishu.d.ts +17 -0
  453. package/dist/slash-commands/feishu.js +400 -0
  454. package/dist/slash-commands/index.d.ts +4 -0
  455. package/dist/slash-commands/index.js +8 -0
  456. package/dist/slash-commands/registry.d.ts +32 -0
  457. package/dist/slash-commands/registry.js +73 -0
  458. package/dist/slash-commands/types.d.ts +109 -0
  459. package/dist/slash-commands/types.js +1 -0
  460. package/dist/slash-commands/unified.d.ts +38 -0
  461. package/dist/slash-commands/unified.js +38 -0
  462. package/dist/stats/usage.d.ts +59 -0
  463. package/dist/stats/usage.js +485 -0
  464. package/dist/stream-json.d.ts +13 -0
  465. package/dist/stream-json.js +74 -0
  466. package/dist/system-prompt.d.ts +40 -0
  467. package/dist/system-prompt.js +7 -0
  468. package/dist/tasks/manager.d.ts +145 -0
  469. package/dist/tasks/manager.js +634 -0
  470. package/dist/tasks/process-utils.d.ts +10 -0
  471. package/dist/tasks/process-utils.js +49 -0
  472. package/dist/tasks/promotion.d.ts +17 -0
  473. package/dist/tasks/promotion.js +30 -0
  474. package/dist/tasks/wake.d.ts +53 -0
  475. package/dist/tasks/wake.js +125 -0
  476. package/dist/text-display.d.ts +3 -0
  477. package/dist/text-display.js +25 -0
  478. package/dist/tools/agent-lifecycle.d.ts +30 -0
  479. package/dist/tools/agent-lifecycle.js +790 -0
  480. package/dist/tools/bash.d.ts +23 -0
  481. package/dist/tools/bash.js +443 -0
  482. package/dist/tools/child-tools.d.ts +41 -0
  483. package/dist/tools/child-tools.js +122 -0
  484. package/dist/tools/edit-apply.d.ts +25 -0
  485. package/dist/tools/edit-apply.js +274 -0
  486. package/dist/tools/edit.d.ts +18 -0
  487. package/dist/tools/edit.js +200 -0
  488. package/dist/tools/exa-mcp.d.ts +3 -0
  489. package/dist/tools/exa-mcp.js +74 -0
  490. package/dist/tools/exit-plan-mode.d.ts +22 -0
  491. package/dist/tools/exit-plan-mode.js +79 -0
  492. package/dist/tools/file-mutation-queue.d.ts +2 -0
  493. package/dist/tools/file-mutation-queue.js +43 -0
  494. package/dist/tools/file-state.d.ts +48 -0
  495. package/dist/tools/file-state.js +76 -0
  496. package/dist/tools/grep.d.ts +9 -0
  497. package/dist/tools/grep.js +387 -0
  498. package/dist/tools/index.d.ts +63 -0
  499. package/dist/tools/index.js +76 -0
  500. package/dist/tools/ls.d.ts +3 -0
  501. package/dist/tools/ls.js +85 -0
  502. package/dist/tools/lsp.d.ts +4 -0
  503. package/dist/tools/lsp.js +95 -0
  504. package/dist/tools/memory.d.ts +8 -0
  505. package/dist/tools/memory.js +77 -0
  506. package/dist/tools/path-utils.d.ts +8 -0
  507. package/dist/tools/path-utils.js +53 -0
  508. package/dist/tools/prompt-metadata.d.ts +3 -0
  509. package/dist/tools/prompt-metadata.js +17 -0
  510. package/dist/tools/question.d.ts +3 -0
  511. package/dist/tools/question.js +177 -0
  512. package/dist/tools/read.d.ts +8 -0
  513. package/dist/tools/read.js +309 -0
  514. package/dist/tools/sensitive-paths.d.ts +11 -0
  515. package/dist/tools/sensitive-paths.js +106 -0
  516. package/dist/tools/server-manager.d.ts +6 -0
  517. package/dist/tools/server-manager.js +6 -0
  518. package/dist/tools/server.d.ts +6 -0
  519. package/dist/tools/server.js +249 -0
  520. package/dist/tools/skill-search.d.ts +10 -0
  521. package/dist/tools/skill-search.js +134 -0
  522. package/dist/tools/skill.d.ts +7 -0
  523. package/dist/tools/skill.js +81 -0
  524. package/dist/tools/task-tools.d.ts +10 -0
  525. package/dist/tools/task-tools.js +133 -0
  526. package/dist/tools/tool-search.d.ts +23 -0
  527. package/dist/tools/tool-search.js +145 -0
  528. package/dist/tools/web-fetch.d.ts +6 -0
  529. package/dist/tools/web-fetch.js +76 -0
  530. package/dist/tools/web-search.d.ts +5 -0
  531. package/dist/tools/web-search.js +50 -0
  532. package/dist/tools/write.d.ts +10 -0
  533. package/dist/tools/write.js +155 -0
  534. package/dist/tui/animation-clock.d.ts +14 -0
  535. package/dist/tui/animation-clock.js +34 -0
  536. package/dist/tui/app.d.ts +176 -0
  537. package/dist/tui/app.js +1659 -0
  538. package/dist/tui/components/approval-dialog.d.ts +43 -0
  539. package/dist/tui/components/approval-dialog.js +212 -0
  540. package/dist/tui/components/bottom-sheet.d.ts +9 -0
  541. package/dist/tui/components/bottom-sheet.js +32 -0
  542. package/dist/tui/components/context-info.d.ts +54 -0
  543. package/dist/tui/components/context-info.js +388 -0
  544. package/dist/tui/components/feedback-dialog.d.ts +56 -0
  545. package/dist/tui/components/feedback-dialog.js +262 -0
  546. package/dist/tui/components/feishu-setup-dialog.d.ts +65 -0
  547. package/dist/tui/components/feishu-setup-dialog.js +332 -0
  548. package/dist/tui/components/image-preview.d.ts +32 -0
  549. package/dist/tui/components/image-preview.js +130 -0
  550. package/dist/tui/components/plan-dialog.d.ts +34 -0
  551. package/dist/tui/components/plan-dialog.js +196 -0
  552. package/dist/tui/components/provider-key-input.d.ts +18 -0
  553. package/dist/tui/components/provider-key-input.js +49 -0
  554. package/dist/tui/components/question-dialog.d.ts +25 -0
  555. package/dist/tui/components/question-dialog.js +263 -0
  556. package/dist/tui/components/responsive-transcript.d.ts +31 -0
  557. package/dist/tui/components/responsive-transcript.js +77 -0
  558. package/dist/tui/components/rewind-picker.d.ts +62 -0
  559. package/dist/tui/components/rewind-picker.js +317 -0
  560. package/dist/tui/components/session-picker.d.ts +49 -0
  561. package/dist/tui/components/session-picker.js +303 -0
  562. package/dist/tui/components/skills-panel.d.ts +63 -0
  563. package/dist/tui/components/skills-panel.js +582 -0
  564. package/dist/tui/components/stats-panel.d.ts +40 -0
  565. package/dist/tui/components/stats-panel.js +301 -0
  566. package/dist/tui/components/streaming-message.d.ts +69 -0
  567. package/dist/tui/components/streaming-message.js +398 -0
  568. package/dist/tui/components/subagent-inspector.d.ts +28 -0
  569. package/dist/tui/components/subagent-inspector.js +127 -0
  570. package/dist/tui/components/task-inspector.d.ts +26 -0
  571. package/dist/tui/components/task-inspector.js +70 -0
  572. package/dist/tui/components/tasks-pane.d.ts +126 -0
  573. package/dist/tui/components/tasks-pane.js +566 -0
  574. package/dist/tui/components/transcript.d.ts +103 -0
  575. package/dist/tui/components/transcript.js +858 -0
  576. package/dist/tui/components/welcome.d.ts +20 -0
  577. package/dist/tui/components/welcome.js +133 -0
  578. package/dist/tui/components/workflow-inspector.d.ts +30 -0
  579. package/dist/tui/components/workflow-inspector.js +136 -0
  580. package/dist/tui/composer-autocomplete.d.ts +76 -0
  581. package/dist/tui/composer-autocomplete.js +465 -0
  582. package/dist/tui/composer-style.d.ts +7 -0
  583. package/dist/tui/composer-style.js +29 -0
  584. package/dist/tui/controller/agent-event-reducer.d.ts +75 -0
  585. package/dist/tui/controller/agent-event-reducer.js +239 -0
  586. package/dist/tui/controller/composer-controller.d.ts +95 -0
  587. package/dist/tui/controller/composer-controller.js +502 -0
  588. package/dist/tui/controller/controller.d.ts +199 -0
  589. package/dist/tui/controller/controller.js +1034 -0
  590. package/dist/tui/controller/effects.d.ts +71 -0
  591. package/dist/tui/controller/effects.js +1 -0
  592. package/dist/tui/controller/goal-runtime-controller.d.ts +47 -0
  593. package/dist/tui/controller/goal-runtime-controller.js +202 -0
  594. package/dist/tui/controller/input-queue-machine.d.ts +71 -0
  595. package/dist/tui/controller/input-queue-machine.js +121 -0
  596. package/dist/tui/controller/intents.d.ts +56 -0
  597. package/dist/tui/controller/intents.js +6 -0
  598. package/dist/tui/controller/overlay-controller.d.ts +64 -0
  599. package/dist/tui/controller/overlay-controller.js +129 -0
  600. package/dist/tui/controller/ports.d.ts +57 -0
  601. package/dist/tui/controller/ports.js +9 -0
  602. package/dist/tui/controller/session-transition.d.ts +54 -0
  603. package/dist/tui/controller/session-transition.js +68 -0
  604. package/dist/tui/controller/state.d.ts +14 -0
  605. package/dist/tui/controller/state.js +36 -0
  606. package/dist/tui/controller/task-runtime-controller.d.ts +66 -0
  607. package/dist/tui/controller/task-runtime-controller.js +158 -0
  608. package/dist/tui/detect-theme.d.ts +4 -0
  609. package/dist/tui/detect-theme.js +116 -0
  610. package/dist/tui/display-history.d.ts +64 -0
  611. package/dist/tui/display-history.js +283 -0
  612. package/dist/tui/display-sanitizer.d.ts +3 -0
  613. package/dist/tui/display-sanitizer.js +38 -0
  614. package/dist/tui/edit-diff.d.ts +11 -0
  615. package/dist/tui/edit-diff.js +57 -0
  616. package/dist/tui/file-mentions.d.ts +29 -0
  617. package/dist/tui/file-mentions.js +174 -0
  618. package/dist/tui/footer.d.ts +37 -0
  619. package/dist/tui/footer.js +80 -0
  620. package/dist/tui/formatting/edit-diff.d.ts +11 -0
  621. package/dist/tui/formatting/edit-diff.js +52 -0
  622. package/dist/tui/formatting/summary.d.ts +43 -0
  623. package/dist/tui/formatting/summary.js +150 -0
  624. package/dist/tui/fullscreen.d.ts +48 -0
  625. package/dist/tui/fullscreen.js +256 -0
  626. package/dist/tui/image-display.d.ts +23 -0
  627. package/dist/tui/image-display.js +92 -0
  628. package/dist/tui/image-paste.d.ts +113 -0
  629. package/dist/tui/image-paste.js +565 -0
  630. package/dist/tui/input-history.d.ts +47 -0
  631. package/dist/tui/input-history.js +250 -0
  632. package/dist/tui/markdown-style.d.ts +5 -0
  633. package/dist/tui/markdown-style.js +23 -0
  634. package/dist/tui/model/composer-buffer.d.ts +55 -0
  635. package/dist/tui/model/composer-buffer.js +317 -0
  636. package/dist/tui/model/composer-types.d.ts +17 -0
  637. package/dist/tui/model/composer-types.js +1 -0
  638. package/dist/tui/model/display-history.d.ts +78 -0
  639. package/dist/tui/model/display-history.js +124 -0
  640. package/dist/tui/model/display-reconstruct.d.ts +3 -0
  641. package/dist/tui/model/display-reconstruct.js +130 -0
  642. package/dist/tui/model/file-mentions.d.ts +31 -0
  643. package/dist/tui/model/file-mentions.js +178 -0
  644. package/dist/tui/model/image-attachment.d.ts +15 -0
  645. package/dist/tui/model/image-attachment.js +1 -0
  646. package/dist/tui/model/image-paste.d.ts +119 -0
  647. package/dist/tui/model/image-paste.js +610 -0
  648. package/dist/tui/model/input-history.d.ts +1 -0
  649. package/dist/tui/model/input-history.js +1 -0
  650. package/dist/tui/model/input-queue.d.ts +12 -0
  651. package/dist/tui/model/input-queue.js +17 -0
  652. package/dist/tui/model/key-events.d.ts +9 -0
  653. package/dist/tui/model/key-events.js +8 -0
  654. package/dist/tui/model/paste-operation-tracker.d.ts +13 -0
  655. package/dist/tui/model/paste-operation-tracker.js +25 -0
  656. package/dist/tui/model/recent-activity.d.ts +8 -0
  657. package/dist/tui/model/recent-activity.js +71 -0
  658. package/dist/tui/model/subagent-view.d.ts +87 -0
  659. package/dist/tui/model/subagent-view.js +336 -0
  660. package/dist/tui/model/submit-dedupe.d.ts +5 -0
  661. package/dist/tui/model/submit-dedupe.js +25 -0
  662. package/dist/tui/model/sync-output.d.ts +17 -0
  663. package/dist/tui/model/sync-output.js +35 -0
  664. package/dist/tui/model/task-lifecycle.d.ts +57 -0
  665. package/dist/tui/model/task-lifecycle.js +124 -0
  666. package/dist/tui/model/terminal-env.d.ts +15 -0
  667. package/dist/tui/model/terminal-env.js +22 -0
  668. package/dist/tui/model/terminal-mouse.d.ts +28 -0
  669. package/dist/tui/model/terminal-mouse.js +82 -0
  670. package/dist/tui/model/theme-style.d.ts +10 -0
  671. package/dist/tui/model/theme-style.js +79 -0
  672. package/dist/tui/model/theme.d.ts +72 -0
  673. package/dist/tui/model/theme.js +121 -0
  674. package/dist/tui/model/trace-groups.d.ts +45 -0
  675. package/dist/tui/model/trace-groups.js +558 -0
  676. package/dist/tui/model/trace-interaction.d.ts +63 -0
  677. package/dist/tui/model/trace-interaction.js +87 -0
  678. package/dist/tui/model/width.d.ts +18 -0
  679. package/dist/tui/model/width.js +130 -0
  680. package/dist/tui/model-picker-data.d.ts +9 -0
  681. package/dist/tui/model-picker-data.js +39 -0
  682. package/dist/tui/model-switch.d.ts +49 -0
  683. package/dist/tui/model-switch.js +67 -0
  684. package/dist/tui/paste-placeholder.d.ts +11 -0
  685. package/dist/tui/paste-placeholder.js +52 -0
  686. package/dist/tui/recent-activity.d.ts +8 -0
  687. package/dist/tui/recent-activity.js +71 -0
  688. package/dist/tui/run-session-picker.d.ts +9 -0
  689. package/dist/tui/run-session-picker.js +64 -0
  690. package/dist/tui/run.d.ts +72 -0
  691. package/dist/tui/run.js +139 -0
  692. package/dist/tui/session-display.d.ts +6 -0
  693. package/dist/tui/session-display.js +12 -0
  694. package/dist/tui/session-picker-data.d.ts +18 -0
  695. package/dist/tui/session-picker-data.js +21 -0
  696. package/dist/tui/terminal/multiplexer.d.ts +5 -0
  697. package/dist/tui/terminal/multiplexer.js +14 -0
  698. package/dist/tui/testing/fake-agent.d.ts +24 -0
  699. package/dist/tui/testing/fake-agent.js +22 -0
  700. package/dist/tui/testing/spy-host.d.ts +21 -0
  701. package/dist/tui/testing/spy-host.js +55 -0
  702. package/dist/tui/trace-groups.d.ts +43 -0
  703. package/dist/tui/trace-groups.js +554 -0
  704. package/dist/tui/wordmark.d.ts +18 -0
  705. package/dist/tui/wordmark.js +208 -0
  706. package/dist/types.d.ts +503 -0
  707. package/dist/types.js +4 -0
  708. package/dist/update/index.d.ts +61 -0
  709. package/dist/update/index.js +267 -0
  710. package/dist/variant/thinking-level.d.ts +5 -0
  711. package/dist/variant/thinking-level.js +26 -0
  712. package/dist/variant/variant-resolver.d.ts +28 -0
  713. package/dist/variant/variant-resolver.js +62 -0
  714. package/node_modules/@bubblebrain-ai/pi-tui/LICENSE +21 -0
  715. package/node_modules/@bubblebrain-ai/pi-tui/README.md +854 -0
  716. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/alt-screen-search.d.ts +26 -0
  717. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/alt-screen-search.d.ts.map +1 -0
  718. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/alt-screen-search.js +121 -0
  719. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/alt-screen-search.js.map +1 -0
  720. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/autocomplete.d.ts +86 -0
  721. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/autocomplete.d.ts.map +1 -0
  722. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/autocomplete.js +649 -0
  723. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/autocomplete.js.map +1 -0
  724. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/alt-screen-flash.d.ts +13 -0
  725. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/alt-screen-flash.d.ts.map +1 -0
  726. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/alt-screen-flash.js +36 -0
  727. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/alt-screen-flash.js.map +1 -0
  728. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/box.d.ts +22 -0
  729. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/box.d.ts.map +1 -0
  730. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/box.js +99 -0
  731. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/box.js.map +1 -0
  732. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/cancellable-loader.d.ts +22 -0
  733. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/cancellable-loader.d.ts.map +1 -0
  734. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/cancellable-loader.js +36 -0
  735. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/cancellable-loader.js.map +1 -0
  736. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/editor.d.ts +330 -0
  737. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/editor.d.ts.map +1 -0
  738. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/editor.js +2344 -0
  739. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/editor.js.map +1 -0
  740. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/h-stack.d.ts +7 -0
  741. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/h-stack.d.ts.map +1 -0
  742. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/h-stack.js +43 -0
  743. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/h-stack.js.map +1 -0
  744. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/image.d.ts +28 -0
  745. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/image.d.ts.map +1 -0
  746. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/image.js +82 -0
  747. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/image.js.map +1 -0
  748. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/input.d.ts +48 -0
  749. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/input.d.ts.map +1 -0
  750. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/input.js +390 -0
  751. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/input.js.map +1 -0
  752. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/loader.d.ts +31 -0
  753. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/loader.d.ts.map +1 -0
  754. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/loader.js +67 -0
  755. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/loader.js.map +1 -0
  756. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/markdown.d.ts +103 -0
  757. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/markdown.d.ts.map +1 -0
  758. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/markdown.js +797 -0
  759. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/markdown.js.map +1 -0
  760. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/scroll-view.d.ts +56 -0
  761. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/scroll-view.d.ts.map +1 -0
  762. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/scroll-view.js +179 -0
  763. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/scroll-view.js.map +1 -0
  764. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/select-list.d.ts +53 -0
  765. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/select-list.d.ts.map +1 -0
  766. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/select-list.js +175 -0
  767. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/select-list.js.map +1 -0
  768. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/settings-list.d.ts +50 -0
  769. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/settings-list.d.ts.map +1 -0
  770. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/settings-list.js +174 -0
  771. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/settings-list.js.map +1 -0
  772. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/spacer.d.ts +12 -0
  773. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/spacer.d.ts.map +1 -0
  774. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/spacer.js +22 -0
  775. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/spacer.js.map +1 -0
  776. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/stack.d.ts +32 -0
  777. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/stack.d.ts.map +1 -0
  778. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/stack.js +109 -0
  779. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/stack.js.map +1 -0
  780. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/text.d.ts +19 -0
  781. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/text.d.ts.map +1 -0
  782. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/text.js +81 -0
  783. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/text.js.map +1 -0
  784. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/truncated-text.d.ts +13 -0
  785. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/truncated-text.d.ts.map +1 -0
  786. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/truncated-text.js +48 -0
  787. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/truncated-text.js.map +1 -0
  788. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/v-stack.d.ts +8 -0
  789. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/v-stack.d.ts.map +1 -0
  790. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/v-stack.js +26 -0
  791. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/v-stack.js.map +1 -0
  792. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/editor-component.d.ts +39 -0
  793. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/editor-component.d.ts.map +1 -0
  794. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/editor-component.js +2 -0
  795. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/editor-component.js.map +1 -0
  796. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/fuzzy.d.ts +16 -0
  797. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/fuzzy.d.ts.map +1 -0
  798. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/fuzzy.js +110 -0
  799. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/fuzzy.js.map +1 -0
  800. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/index.d.ts +31 -0
  801. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/index.d.ts.map +1 -0
  802. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/index.js +42 -0
  803. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/index.js.map +1 -0
  804. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/keybindings.d.ts +273 -0
  805. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/keybindings.d.ts.map +1 -0
  806. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/keybindings.js +231 -0
  807. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/keybindings.js.map +1 -0
  808. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/keys.d.ts +184 -0
  809. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/keys.d.ts.map +1 -0
  810. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/keys.js +1174 -0
  811. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/keys.js.map +1 -0
  812. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/kill-ring.d.ts +28 -0
  813. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/kill-ring.d.ts.map +1 -0
  814. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/kill-ring.js +46 -0
  815. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/kill-ring.js.map +1 -0
  816. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/latex.d.ts +10 -0
  817. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/latex.d.ts.map +1 -0
  818. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/latex.js +1268 -0
  819. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/latex.js.map +1 -0
  820. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/layout-node.d.ts +40 -0
  821. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/layout-node.d.ts.map +1 -0
  822. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/layout-node.js +6 -0
  823. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/layout-node.js.map +1 -0
  824. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/layout.d.ts +42 -0
  825. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/layout.d.ts.map +1 -0
  826. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/layout.js +335 -0
  827. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/layout.js.map +1 -0
  828. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/native-modifiers.d.ts +3 -0
  829. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/native-modifiers.d.ts.map +1 -0
  830. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/native-modifiers.js +60 -0
  831. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/native-modifiers.js.map +1 -0
  832. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/stdin-buffer.d.ts +56 -0
  833. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/stdin-buffer.d.ts.map +1 -0
  834. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/stdin-buffer.js +363 -0
  835. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/stdin-buffer.js.map +1 -0
  836. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal-colors.d.ts +10 -0
  837. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal-colors.d.ts.map +1 -0
  838. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal-colors.js +59 -0
  839. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal-colors.js.map +1 -0
  840. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal-image.d.ts +116 -0
  841. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal-image.d.ts.map +1 -0
  842. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal-image.js +518 -0
  843. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal-image.js.map +1 -0
  844. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal.d.ts +142 -0
  845. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal.d.ts.map +1 -0
  846. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal.js +544 -0
  847. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal.js.map +1 -0
  848. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/testing.d.ts +11 -0
  849. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/testing.d.ts.map +1 -0
  850. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/testing.js +11 -0
  851. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/testing.js.map +1 -0
  852. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui-alt-screen.d.ts +141 -0
  853. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui-alt-screen.d.ts.map +1 -0
  854. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui-alt-screen.js +1340 -0
  855. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui-alt-screen.js.map +1 -0
  856. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui-main-screen.d.ts +39 -0
  857. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui-main-screen.d.ts.map +1 -0
  858. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui-main-screen.js +536 -0
  859. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui-main-screen.js.map +1 -0
  860. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui.d.ts +340 -0
  861. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui.d.ts.map +1 -0
  862. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui.js +1020 -0
  863. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui.js.map +1 -0
  864. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/undo-stack.d.ts +17 -0
  865. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/undo-stack.d.ts.map +1 -0
  866. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/undo-stack.js +27 -0
  867. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/undo-stack.js.map +1 -0
  868. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/utils.d.ts +96 -0
  869. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/utils.d.ts.map +1 -0
  870. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/utils.js +1193 -0
  871. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/utils.js.map +1 -0
  872. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/word-navigation.d.ts +25 -0
  873. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/word-navigation.d.ts.map +1 -0
  874. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/word-navigation.js +96 -0
  875. package/node_modules/@bubblebrain-ai/pi-tui/dist/src/word-navigation.js.map +1 -0
  876. package/node_modules/@bubblebrain-ai/pi-tui/dist/test/virtual-terminal.d.ts +73 -0
  877. package/node_modules/@bubblebrain-ai/pi-tui/dist/test/virtual-terminal.d.ts.map +1 -0
  878. package/node_modules/@bubblebrain-ai/pi-tui/dist/test/virtual-terminal.js +188 -0
  879. package/node_modules/@bubblebrain-ai/pi-tui/dist/test/virtual-terminal.js.map +1 -0
  880. package/node_modules/@bubblebrain-ai/pi-tui/native/darwin/README.md +20 -0
  881. package/node_modules/@bubblebrain-ai/pi-tui/native/darwin/build.sh +62 -0
  882. package/node_modules/@bubblebrain-ai/pi-tui/native/darwin/prebuilds/darwin-arm64/darwin-modifiers.node +0 -0
  883. package/node_modules/@bubblebrain-ai/pi-tui/native/darwin/prebuilds/darwin-x64/darwin-modifiers.node +0 -0
  884. package/node_modules/@bubblebrain-ai/pi-tui/native/darwin/src/darwin-modifiers.c +70 -0
  885. package/node_modules/@bubblebrain-ai/pi-tui/native/win32/README.md +22 -0
  886. package/node_modules/@bubblebrain-ai/pi-tui/native/win32/build.mjs +229 -0
  887. package/node_modules/@bubblebrain-ai/pi-tui/native/win32/prebuilds/win32-arm64/win32-console-mode.node +0 -0
  888. package/node_modules/@bubblebrain-ai/pi-tui/native/win32/prebuilds/win32-x64/win32-console-mode.node +0 -0
  889. package/node_modules/@bubblebrain-ai/pi-tui/native/win32/src/win32-console-mode.c +119 -0
  890. package/node_modules/@bubblebrain-ai/pi-tui/package.json +66 -0
  891. package/node_modules/get-east-asian-width/index.d.ts +60 -0
  892. package/node_modules/get-east-asian-width/index.js +30 -0
  893. package/node_modules/get-east-asian-width/license +9 -0
  894. package/node_modules/get-east-asian-width/lookup-data.js +21 -0
  895. package/node_modules/get-east-asian-width/lookup.js +138 -0
  896. package/node_modules/get-east-asian-width/package.json +71 -0
  897. package/node_modules/get-east-asian-width/readme.md +65 -0
  898. package/node_modules/get-east-asian-width/utilities.js +24 -0
  899. package/node_modules/marked/LICENSE +44 -0
  900. package/node_modules/marked/README.md +115 -0
  901. package/node_modules/marked/bin/main.js +284 -0
  902. package/node_modules/marked/bin/marked.js +16 -0
  903. package/node_modules/marked/lib/marked.d.ts +760 -0
  904. package/node_modules/marked/lib/marked.esm.js +77 -0
  905. package/node_modules/marked/lib/marked.esm.js.map +7 -0
  906. package/node_modules/marked/lib/marked.umd.js +79 -0
  907. package/node_modules/marked/lib/marked.umd.js.map +7 -0
  908. package/node_modules/marked/man/marked.1 +113 -0
  909. package/node_modules/marked/man/marked.1.md +93 -0
  910. package/node_modules/marked/package.json +103 -0
  911. package/package.json +96 -17
  912. package/bin/bubble.js +0 -39
@@ -0,0 +1,256 @@
1
+ import { GENERATED_MODEL_DATA } from "./model-data.generated.js";
2
+ // Official USD prices checked 2026-09-10:
3
+ // https://api-docs.deepseek.com/quick_start/pricing
4
+ // Exact transition times: https://api-docs.deepseek.com/news/news260910
5
+ const DEEPSEEK_PEAK_WINDOWS_UTC = [
6
+ { startMinute: 60, endMinute: 240 },
7
+ { startMinute: 360, endMinute: 600 },
8
+ ];
9
+ const DEEPSEEK_PEAK_WEEKDAYS_UTC = [1, 2, 3, 4, 5];
10
+ const DEEPSEEK_V41_FLASH_TARIFF = {
11
+ inputCacheHitPerMillion: 0.006,
12
+ inputCacheMissPerMillion: 0.3,
13
+ outputPerMillion: 1.2,
14
+ peakWindowsUtc: DEEPSEEK_PEAK_WINDOWS_UTC,
15
+ peakWeekdaysUtc: DEEPSEEK_PEAK_WEEKDAYS_UTC,
16
+ offPeak: {
17
+ inputCacheHitPerMillion: 0.003,
18
+ inputCacheMissPerMillion: 0.15,
19
+ outputPerMillion: 0.6,
20
+ },
21
+ };
22
+ /**
23
+ * Hand-maintained corrections layered over the generated models.dev snapshot.
24
+ * An entry here shadows the generated entry with the same (providerId, modelId).
25
+ * Only exceptions belong here — facts the upstream catalog cannot carry
26
+ * (promo expiry dates, non-USD billing) or gets wrong. Everything else comes
27
+ * from src/model-data.generated.ts via `npm run refresh-models`.
28
+ */
29
+ export const MODEL_PRICING_OVERRIDES = [
30
+ ...[
31
+ "muse-spark-1.3-contributor-free",
32
+ "muse-spark-1.2-contributor-free",
33
+ "space-bunny-free",
34
+ ].map((modelId) => ({
35
+ providerId: "opencode-zen",
36
+ modelId,
37
+ currency: "USD",
38
+ inputCacheHitPerMillion: 0,
39
+ inputCacheMissPerMillion: 0,
40
+ outputPerMillion: 0,
41
+ })),
42
+ {
43
+ providerId: "opencode-zen",
44
+ modelId: "muse-spark-1.2",
45
+ currency: "USD",
46
+ inputCacheHitPerMillion: 0.15,
47
+ inputCacheMissPerMillion: 1.25,
48
+ outputPerMillion: 4.25,
49
+ },
50
+ // Gemini 3.7/3.8 Flash launch pricing. Google's standard paid-tier prices
51
+ // double on 2027-01-01; keep both rates so historical and future /stats are
52
+ // priced against the tariff that was actually active.
53
+ ...["gemini-3.7-flash", "gemini-3.8-flash"].map((modelId) => ({
54
+ providerId: "google",
55
+ modelId,
56
+ currency: "USD",
57
+ inputCacheHitPerMillion: 0.075,
58
+ inputCacheMissPerMillion: 0.75,
59
+ outputPerMillion: 3.75,
60
+ effectiveUntil: "2027-01-01T00:00:00Z",
61
+ original: {
62
+ inputCacheHitPerMillion: 0.15,
63
+ inputCacheMissPerMillion: 1.5,
64
+ outputPerMillion: 7.5,
65
+ },
66
+ })),
67
+ // Gemini 4 Argon and Carbon share one tariff: introductory pricing through
68
+ // 2026-11-30, standard rates from 2026-12-01. Implicit caching only (95% off
69
+ // input), so no cache-write rate.
70
+ // https://ai.google.dev/gemini-api/docs/pricing
71
+ ...["gemini-4-argon", "gemini-4-carbon"].map((modelId) => ({
72
+ providerId: "google",
73
+ modelId,
74
+ currency: "USD",
75
+ inputCacheHitPerMillion: 0.1,
76
+ inputCacheMissPerMillion: 2,
77
+ outputPerMillion: 10,
78
+ effectiveUntil: "2026-12-01T00:00:00Z",
79
+ original: {
80
+ inputCacheHitPerMillion: 0.2,
81
+ inputCacheMissPerMillion: 4,
82
+ outputPerMillion: 20,
83
+ },
84
+ })),
85
+ // Gemini 4 Hydrogen: one flat rate for all context lengths, implicit caching
86
+ // only (95% off input). Not yet on models.dev at launch (2026-11-12).
87
+ // https://ai.google.dev/gemini-api/docs/pricing
88
+ {
89
+ providerId: "google",
90
+ modelId: "gemini-4-hydrogen",
91
+ currency: "USD",
92
+ inputCacheHitPerMillion: 0.075,
93
+ inputCacheMissPerMillion: 1.5,
94
+ outputPerMillion: 7.5,
95
+ },
96
+ {
97
+ providerId: "deepseek",
98
+ modelId: "deepseek-flash",
99
+ currency: "USD",
100
+ ...DEEPSEEK_V41_FLASH_TARIFF,
101
+ effectiveFrom: "2026-09-10T04:00:00Z",
102
+ },
103
+ // Preserve older tariffs for historical /stats. Both legacy Flash IDs now
104
+ // serve V4.1 Flash; Pro switches on 2026-09-14 at 04:00 UTC. A transition
105
+ // must select the whole tariff, including its peak/off-peak schedule.
106
+ ...[
107
+ { modelId: "deepseek-v4-flash", kind: "flash" },
108
+ { modelId: "deepseek-v4-flash-vision-exp", kind: "flash" },
109
+ { modelId: "deepseek-v4-pro", kind: "pro" },
110
+ ].map(({ modelId, kind }) => {
111
+ const peak = kind === "pro"
112
+ ? { inputCacheHitPerMillion: 0.044, inputCacheMissPerMillion: 1.32, outputPerMillion: 3.96 }
113
+ : { inputCacheHitPerMillion: 0.014, inputCacheMissPerMillion: 0.44, outputPerMillion: 1.32 };
114
+ const offPeak = kind === "pro"
115
+ ? { inputCacheHitPerMillion: 0.022, inputCacheMissPerMillion: 0.66, outputPerMillion: 1.98 }
116
+ : { inputCacheHitPerMillion: 0.007, inputCacheMissPerMillion: 0.22, outputPerMillion: 0.66 };
117
+ const prior = kind === "pro"
118
+ ? { inputCacheHitPerMillion: 0.003625, inputCacheMissPerMillion: 0.435, outputPerMillion: 0.87 }
119
+ : { inputCacheHitPerMillion: 0.0028, inputCacheMissPerMillion: 0.14, outputPerMillion: 0.28 };
120
+ // The 2026-08-16 schedule was already Monday-Friday only; the earlier
121
+ // every-day model here was an omission, so applying the weekday rule to
122
+ // this tariff corrects August weekend history rather than repricing it.
123
+ const previous = {
124
+ ...peak,
125
+ peakWindowsUtc: DEEPSEEK_PEAK_WINDOWS_UTC,
126
+ peakWeekdaysUtc: DEEPSEEK_PEAK_WEEKDAYS_UTC,
127
+ offPeak,
128
+ effectiveFrom: "2026-08-16T16:00:00Z",
129
+ // The vision model launched after the tariff change; it has no valid
130
+ // pre-change usage. Stable Flash/Pro retain their former rates so /stats
131
+ // does not reprice old sessions using today's schedule.
132
+ ...(modelId === "deepseek-v4-flash-vision-exp" ? {} : { prior }),
133
+ };
134
+ return {
135
+ providerId: "deepseek",
136
+ modelId,
137
+ currency: "USD",
138
+ ...(kind === "flash" ? {
139
+ ...DEEPSEEK_V41_FLASH_TARIFF,
140
+ effectiveFrom: "2026-09-10T04:00:00Z",
141
+ prior: previous,
142
+ } : {
143
+ ...previous,
144
+ effectiveUntil: "2026-09-14T04:00:00Z",
145
+ original: DEEPSEEK_V41_FLASH_TARIFF,
146
+ }),
147
+ };
148
+ }),
149
+ // Official current prices, verified 2026-09-23:
150
+ // https://platform.claude.com/docs/en/about-claude/pricing
151
+ // Cache reads are 2.5% (Fable 5.1) / 5% (Opus 5.5), not the older 10%.
152
+ {
153
+ providerId: "anthropic",
154
+ modelId: "claude-fable-5-1",
155
+ currency: "USD",
156
+ inputCacheHitPerMillion: 0.25,
157
+ inputCacheMissPerMillion: 10,
158
+ inputCacheWritePerMillion: 12.5,
159
+ outputPerMillion: 50,
160
+ },
161
+ {
162
+ providerId: "anthropic",
163
+ modelId: "claude-opus-5-5",
164
+ currency: "USD",
165
+ inputCacheHitPerMillion: 0.2,
166
+ inputCacheMissPerMillion: 4,
167
+ inputCacheWritePerMillion: 5,
168
+ outputPerMillion: 20,
169
+ },
170
+ // The current official Sonnet 5 price is $2/$10 without an expiry.
171
+ {
172
+ providerId: "anthropic",
173
+ modelId: "claude-sonnet-5",
174
+ currency: "USD",
175
+ inputCacheHitPerMillion: 0.2,
176
+ inputCacheMissPerMillion: 2,
177
+ inputCacheWritePerMillion: 2.5,
178
+ outputPerMillion: 10,
179
+ },
180
+ // The StepFun step plan bills in CNY; models.dev normalizes prices to USD.
181
+ {
182
+ providerId: "stepfun",
183
+ modelId: "step-3.7-flash",
184
+ currency: "CNY",
185
+ inputCacheHitPerMillion: 0.27,
186
+ inputCacheMissPerMillion: 1.35,
187
+ outputPerMillion: 8.1,
188
+ },
189
+ ];
190
+ function pricingFromGenerated(entry) {
191
+ return {
192
+ providerId: entry.providerId,
193
+ modelId: entry.modelId,
194
+ currency: "USD",
195
+ // Without a cache discount upstream, cached input bills at the plain rate.
196
+ inputCacheHitPerMillion: entry.cacheReadPerMillion ?? entry.inputPerMillion,
197
+ inputCacheMissPerMillion: entry.inputPerMillion,
198
+ ...(entry.cacheWritePerMillion !== undefined
199
+ ? { inputCacheWritePerMillion: entry.cacheWritePerMillion }
200
+ : {}),
201
+ outputPerMillion: entry.outputPerMillion,
202
+ };
203
+ }
204
+ const overriddenKeys = new Set(MODEL_PRICING_OVERRIDES.map((item) => `${item.providerId}\0${item.modelId}`));
205
+ export const MODEL_PRICING = [
206
+ ...GENERATED_MODEL_DATA
207
+ .filter((entry) => !overriddenKeys.has(`${entry.providerId}\0${entry.modelId}`))
208
+ .map(pricingFromGenerated),
209
+ ...MODEL_PRICING_OVERRIDES,
210
+ ];
211
+ export function getModelPricing(providerId, modelId) {
212
+ return MODEL_PRICING.find((item) => item.providerId === providerId && item.modelId === modelId);
213
+ }
214
+ function pricingRateAt(pricing, at) {
215
+ if (pricing.prior && pricing.effectiveFrom && at.getTime() < Date.parse(pricing.effectiveFrom)) {
216
+ return pricingRateAt(pricing.prior, at);
217
+ }
218
+ if (pricing.original && pricing.effectiveUntil && at.getTime() >= Date.parse(pricing.effectiveUntil)) {
219
+ return pricingRateAt(pricing.original, at);
220
+ }
221
+ if (!pricing.offPeak || !pricing.peakWindowsUtc?.length)
222
+ return pricing;
223
+ const minute = at.getUTCHours() * 60 + at.getUTCMinutes();
224
+ const isPeakDay = !pricing.peakWeekdaysUtc || pricing.peakWeekdaysUtc.includes(at.getUTCDay());
225
+ const isPeak = isPeakDay && pricing.peakWindowsUtc.some((window) => minute >= window.startMinute && minute < window.endMinute);
226
+ return isPeak ? pricing : pricing.offPeak;
227
+ }
228
+ export function calculateUsageCost(providerId, modelId, usage, at = new Date()) {
229
+ const pricing = getModelPricing(providerId, modelId);
230
+ if (!pricing)
231
+ return undefined;
232
+ const rate = pricingRateAt(pricing, at);
233
+ const hasCacheBreakdown = typeof usage.promptCacheHitTokens === "number"
234
+ || typeof usage.promptCacheMissTokens === "number"
235
+ || typeof usage.cacheCreationTokens === "number";
236
+ const hit = usage.promptCacheHitTokens ?? 0;
237
+ const miss = hasCacheBreakdown
238
+ ? usage.promptCacheMissTokens ?? Math.max(0, usage.promptTokens - hit)
239
+ : usage.promptTokens;
240
+ // `miss` already contains the cache-write tokens (see mergeAnthropicUsage),
241
+ // so writes must be netted out before being re-priced — adding a write term
242
+ // on top of the untouched miss term would bill them at miss + write.
243
+ const write = rate.inputCacheWritePerMillion !== undefined
244
+ ? Math.min(usage.cacheCreationTokens ?? 0, miss)
245
+ : 0;
246
+ const missOnly = miss - write;
247
+ const cost = (hit / 1_000_000) * rate.inputCacheHitPerMillion
248
+ + (write / 1_000_000) * (rate.inputCacheWritePerMillion ?? rate.inputCacheMissPerMillion)
249
+ + (missOnly / 1_000_000) * rate.inputCacheMissPerMillion
250
+ + (usage.completionTokens / 1_000_000) * rate.outputPerMillion;
251
+ return {
252
+ currency: pricing.currency,
253
+ cost,
254
+ estimated: !hasCacheBreakdown,
255
+ };
256
+ }
@@ -0,0 +1,7 @@
1
+ export interface ResolveConfiguredModelInput {
2
+ cliModel?: string;
3
+ sessionModel?: string;
4
+ defaultModel?: string;
5
+ fallbackProviderId?: string;
6
+ }
7
+ export declare function resolveConfiguredModel(input: ResolveConfiguredModelInput): string;
@@ -0,0 +1,18 @@
1
+ import { decodeModel, encodeModel } from "./provider-registry.js";
2
+ import { assertProviderModelAllowed } from "./provider-model-policy.js";
3
+ export function resolveConfiguredModel(input) {
4
+ const selected = input.cliModel ?? input.sessionModel ?? input.defaultModel;
5
+ if (!selected)
6
+ return "";
7
+ const normalized = selected.includes(":")
8
+ ? selected
9
+ : input.fallbackProviderId
10
+ ? encodeModel(input.fallbackProviderId, selected)
11
+ : "";
12
+ if (!normalized)
13
+ return "";
14
+ const { providerId, modelId } = decodeModel(normalized);
15
+ if (providerId)
16
+ assertProviderModelAllowed(providerId, modelId);
17
+ return normalized;
18
+ }
@@ -0,0 +1,16 @@
1
+ import { type Dispatcher } from "undici";
2
+ export type ChatGptFetch = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;
3
+ export interface ChatGptFetchOptions {
4
+ fetch?: ChatGptFetch;
5
+ env?: NodeJS.ProcessEnv;
6
+ }
7
+ type RequestInitWithDispatcher = RequestInit & {
8
+ dispatcher?: Dispatcher;
9
+ };
10
+ export declare function chatGptFetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
11
+ export declare function getChatGptFetch(env?: NodeJS.ProcessEnv): ChatGptFetch;
12
+ export declare function createChatGptFetch(options?: ChatGptFetchOptions): ChatGptFetch;
13
+ export declare function createChatGptDispatcher(env?: NodeJS.ProcessEnv, input?: RequestInfo | URL): Dispatcher | undefined;
14
+ export declare function withChatGptNetworkOptions(input: RequestInfo | URL, init: RequestInit | undefined, env?: NodeJS.ProcessEnv, dispatcher?: Dispatcher | undefined): RequestInitWithDispatcher;
15
+ export declare function normalizeChatGptNetworkError(error: unknown, env?: NodeJS.ProcessEnv): Error;
16
+ export {};
@@ -0,0 +1,232 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { delimiter } from "node:path";
3
+ import { rootCertificates } from "node:tls";
4
+ import { Agent, ProxyAgent } from "undici";
5
+ import { getSystemProxyForUrl } from "./system-proxy.js";
6
+ let cachedDefaultFetch;
7
+ export function chatGptFetch(input, init) {
8
+ return getChatGptFetch()(input, init);
9
+ }
10
+ export function getChatGptFetch(env = process.env) {
11
+ const signature = networkEnvSignature(env);
12
+ if (!cachedDefaultFetch || cachedDefaultFetch.signature !== signature) {
13
+ cachedDefaultFetch = {
14
+ signature,
15
+ fetch: createChatGptFetch({ env }),
16
+ };
17
+ }
18
+ return cachedDefaultFetch.fetch;
19
+ }
20
+ export function createChatGptFetch(options = {}) {
21
+ const env = options.env ?? process.env;
22
+ const fetchImpl = options.fetch ?? ((input, init) => globalThis.fetch(input, init));
23
+ const dispatcher = createChatGptDispatcher(env);
24
+ return async (input, init) => {
25
+ const requestInit = withChatGptNetworkOptions(input, init, env, dispatcher);
26
+ try {
27
+ return await fetchImpl(input, requestInit);
28
+ }
29
+ catch (error) {
30
+ throw normalizeChatGptNetworkError(error, env);
31
+ }
32
+ };
33
+ }
34
+ export function createChatGptDispatcher(env = process.env, input) {
35
+ const ca = loadExtraCaCertificates(env);
36
+ const proxy = input ? nodeProxyForUrl(input, env) : defaultNodeProxy(env);
37
+ if (!proxy && ca.length === 0)
38
+ return undefined;
39
+ const caOptions = ca.length > 0 ? { ca: [...rootCertificates, ...ca] } : undefined;
40
+ if (proxy) {
41
+ return new ProxyAgent({
42
+ uri: proxy,
43
+ ...(caOptions ? { requestTls: caOptions, proxyTls: caOptions } : {}),
44
+ });
45
+ }
46
+ return caOptions ? new Agent({ connect: caOptions }) : undefined;
47
+ }
48
+ export function withChatGptNetworkOptions(input, init, env = process.env, dispatcher = createChatGptDispatcher(env, input)) {
49
+ const next = { ...(init ?? {}) };
50
+ if (dispatcher)
51
+ next.dispatcher = dispatcher;
52
+ return next;
53
+ }
54
+ export function normalizeChatGptNetworkError(error, env = process.env) {
55
+ // Already normalized — wrapping again would nest "Original error:" messages.
56
+ if (error instanceof Error && error.message.includes("connection failed before Bubble received a response")) {
57
+ return error;
58
+ }
59
+ const text = errorMessageChain(error).join("\n");
60
+ if (!isChatGptNetworkErrorText(text)) {
61
+ return error instanceof Error ? error : new Error(String(error));
62
+ }
63
+ const systemProxy = hasProxyEnv(env) ? undefined : getSystemProxyForUrl(new URL("https://chatgpt.com/"), env);
64
+ const message = [
65
+ "ChatGPT connection failed before Bubble received a response.",
66
+ isCertificateErrorText(text)
67
+ ? "TLS certificate verification failed. If you are on a corporate proxy, VPN, or HTTPS inspection network, start Bubble with NODE_EXTRA_CA_CERTS=/absolute/path/to/ca.pem or BUBBLE_EXTRA_CA_CERTS=/absolute/path/to/ca.pem."
68
+ : "This looks like a proxy or network transport failure.",
69
+ hasProxyEnv(env)
70
+ ? "Bubble is using proxy environment variables for ChatGPT requests. Make sure NO_PROXY includes localhost,127.0.0.1."
71
+ : systemProxy
72
+ ? `Bubble is routing this request through the OS system proxy at ${systemProxy} (detected automatically). Check that the proxy app is running and healthy, or set BUBBLE_SYSTEM_PROXY=0 to disable system proxy detection.`
73
+ : "If your network requires a proxy, set HTTPS_PROXY or HTTP_PROXY, and set NO_PROXY=localhost,127.0.0.1.",
74
+ "Do not disable TLS verification with NODE_TLS_REJECT_UNAUTHORIZED=0.",
75
+ `Original error: ${firstMeaningfulErrorMessage(error) || "unknown network error"}`,
76
+ ].join(" ");
77
+ return new Error(message, { cause: error });
78
+ }
79
+ function hasProxyEnv(env) {
80
+ return Boolean(env.BUBBLE_CHATGPT_PROXY || env.bubble_chatgpt_proxy
81
+ || env.HTTPS_PROXY || env.https_proxy || env.HTTP_PROXY || env.http_proxy || env.ALL_PROXY || env.all_proxy);
82
+ }
83
+ function chatGptProxyOverride(env) {
84
+ return env.BUBBLE_CHATGPT_PROXY ?? env.bubble_chatgpt_proxy;
85
+ }
86
+ function nodeProxyForUrl(input, env) {
87
+ const url = urlFromInput(input);
88
+ if (!url || shouldBypassProxy(url, env))
89
+ return undefined;
90
+ const override = chatGptProxyOverride(env);
91
+ if (override)
92
+ return override;
93
+ if (url.protocol === "https:")
94
+ return env.HTTPS_PROXY ?? env.https_proxy ?? env.ALL_PROXY ?? env.all_proxy ?? getSystemProxyForUrl(url, env);
95
+ if (url.protocol === "http:")
96
+ return env.HTTP_PROXY ?? env.http_proxy ?? env.ALL_PROXY ?? env.all_proxy ?? getSystemProxyForUrl(url, env);
97
+ return defaultNodeProxy(env);
98
+ }
99
+ function defaultNodeProxy(env) {
100
+ return chatGptProxyOverride(env)
101
+ ?? env.HTTPS_PROXY ?? env.https_proxy ?? env.HTTP_PROXY ?? env.http_proxy ?? env.ALL_PROXY ?? env.all_proxy
102
+ ?? getSystemProxyForUrl(new URL("https://system-proxy-default.invalid/"), env);
103
+ }
104
+ function urlFromInput(input) {
105
+ if (input instanceof URL)
106
+ return input;
107
+ if (typeof input === "string")
108
+ return URL.canParse(input) ? new URL(input) : undefined;
109
+ const url = input.url;
110
+ return URL.canParse(url) ? new URL(url) : undefined;
111
+ }
112
+ function shouldBypassProxy(url, env) {
113
+ const noProxy = (env.NO_PROXY ?? env.no_proxy ?? "").trim();
114
+ if (!noProxy)
115
+ return false;
116
+ if (noProxy === "*")
117
+ return true;
118
+ const hostname = url.hostname.toLowerCase();
119
+ const port = url.port;
120
+ return noProxy
121
+ .split(/[,\s]+/)
122
+ .filter(Boolean)
123
+ .some((entry) => noProxyEntryMatches(entry.toLowerCase(), hostname, port));
124
+ }
125
+ function noProxyEntryMatches(entry, hostname, port) {
126
+ const [entryHost, entryPort] = entry.includes(":") ? entry.split(":") : [entry, ""];
127
+ if (entryPort && entryPort !== port)
128
+ return false;
129
+ if (entryHost === hostname)
130
+ return true;
131
+ if (entryHost.startsWith("*."))
132
+ return hostname.endsWith(entryHost.slice(1));
133
+ if (entryHost.startsWith("."))
134
+ return hostname.endsWith(entryHost);
135
+ return false;
136
+ }
137
+ function loadExtraCaCertificates(env) {
138
+ const paths = extraCaCertificatePaths(env);
139
+ return paths.map((path) => {
140
+ try {
141
+ return readFileSync(path, "utf-8");
142
+ }
143
+ catch (error) {
144
+ throw new Error(`Failed to read ChatGPT custom CA certificate at ${path}. Check NODE_EXTRA_CA_CERTS or BUBBLE_EXTRA_CA_CERTS.`, {
145
+ cause: error,
146
+ });
147
+ }
148
+ });
149
+ }
150
+ function extraCaCertificatePaths(env) {
151
+ const bubbleValue = env.BUBBLE_EXTRA_CA_CERTS?.trim();
152
+ if (bubbleValue) {
153
+ return bubbleValue.split(delimiter).map((item) => item.trim()).filter(Boolean);
154
+ }
155
+ const nodeValue = env.NODE_EXTRA_CA_CERTS?.trim();
156
+ return nodeValue ? [nodeValue] : [];
157
+ }
158
+ function networkEnvSignature(env) {
159
+ return [
160
+ env.BUBBLE_CHATGPT_PROXY,
161
+ env.bubble_chatgpt_proxy,
162
+ env.HTTP_PROXY,
163
+ env.http_proxy,
164
+ env.HTTPS_PROXY,
165
+ env.https_proxy,
166
+ env.ALL_PROXY,
167
+ env.all_proxy,
168
+ env.NO_PROXY,
169
+ env.no_proxy,
170
+ env.NODE_EXTRA_CA_CERTS,
171
+ env.BUBBLE_EXTRA_CA_CERTS,
172
+ // Invalidate the cached fetch when the user toggles the OS proxy
173
+ // (e.g. turning Clash system proxy on/off mid-session).
174
+ getSystemProxyForUrl(new URL("https://chatgpt.com/"), env),
175
+ ].join("\0");
176
+ }
177
+ function isChatGptNetworkErrorText(text) {
178
+ return [
179
+ /fetch failed/i,
180
+ /network.*failed/i,
181
+ /socket connection was closed unexpectedly/i,
182
+ /\bConnectionClosed\b/i,
183
+ /\bECONNRESET\b/i,
184
+ /\bECONNREFUSED\b/i,
185
+ /\bETIMEDOUT\b/i,
186
+ /\bEPIPE\b/i,
187
+ /\bUND_ERR_/i,
188
+ /socket hang up/i,
189
+ /Unable to connect\. Is the computer able to access the url\?/i,
190
+ /certificate/i,
191
+ /unable to verify/i,
192
+ /self[- ]signed/i,
193
+ ].some((pattern) => pattern.test(text));
194
+ }
195
+ function isCertificateErrorText(text) {
196
+ return [
197
+ /unknown certificate verification error/i,
198
+ /certificate (?:verify|verification) (?:failed|error)/i,
199
+ /unable to verify (?:the )?(?:first )?certificate/i,
200
+ /UNABLE_TO_(?:VERIFY_LEAF_SIGNATURE|GET_ISSUER_CERT_LOCALLY)/i,
201
+ /SELF_SIGNED_CERT_IN_CHAIN/i,
202
+ /DEPTH_ZERO_SELF_SIGNED_CERT/i,
203
+ /CERT_(?:HAS_EXPIRED|UNTRUSTED|INVALID)/i,
204
+ /self[- ]signed certificate/i,
205
+ ].some((pattern) => pattern.test(text));
206
+ }
207
+ function firstMeaningfulErrorMessage(error) {
208
+ return errorMessageChain(error).find((item) => item && item !== "Error");
209
+ }
210
+ function errorMessageChain(error) {
211
+ const messages = [];
212
+ let current = error;
213
+ for (let depth = 0; current && depth < 8; depth++) {
214
+ if (current instanceof Error) {
215
+ messages.push(current.name, current.message);
216
+ current = current.cause;
217
+ continue;
218
+ }
219
+ if (typeof current === "object") {
220
+ const record = current;
221
+ for (const key of ["name", "code", "message"]) {
222
+ if (typeof record[key] === "string")
223
+ messages.push(record[key]);
224
+ }
225
+ current = record.cause;
226
+ continue;
227
+ }
228
+ messages.push(String(current));
229
+ break;
230
+ }
231
+ return messages;
232
+ }
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Typed transport errors shared between providers and the subagent runtime.
3
+ *
4
+ * `RateLimitError` is the contract for 429 handling (design doc
5
+ * docs/subagent-runtime-design.md §4.5): under `rateLimitPolicy: "defer"` the
6
+ * transport performs no 429 backoff of its own and throws this error
7
+ * immediately so the subagent scheduler can be the single backoff layer.
8
+ */
9
+ export declare class RateLimitError extends Error {
10
+ readonly isRateLimitError = true;
11
+ readonly status: number;
12
+ readonly retryAfterMs?: number;
13
+ constructor(message: string, options?: {
14
+ status?: number;
15
+ retryAfterMs?: number;
16
+ cause?: unknown;
17
+ });
18
+ }
19
+ export declare function isRateLimitError(error: unknown): error is RateLimitError;
20
+ /**
21
+ * A provider accepted the HTTP request but terminated generation with an
22
+ * in-band protocol error (for example OpenRouter's HTTP-200 SSE error chunk).
23
+ * Keeping the wire status/type structured prevents the agent from mistaking
24
+ * the terminal event for a successful empty response.
25
+ */
26
+ export declare class ProviderResponseError extends Error {
27
+ readonly isProviderResponseError = true;
28
+ readonly status?: number;
29
+ readonly errorType?: string;
30
+ readonly retryAfterMs?: number;
31
+ constructor(message: string, options?: {
32
+ status?: number;
33
+ errorType?: string;
34
+ retryAfterMs?: number;
35
+ cause?: unknown;
36
+ });
37
+ }
38
+ export declare function isProviderResponseError(error: unknown): error is ProviderResponseError;
39
+ /**
40
+ * How a provider transport should treat HTTP 429 responses.
41
+ *
42
+ * - "handle": retry inside the transport with backoff (parent traffic default).
43
+ * - "defer": do not retry 429 at all; throw RateLimitError immediately so the
44
+ * caller (subagent scheduler) owns the backoff. Other retryable
45
+ * statuses are unaffected.
46
+ */
47
+ export type RateLimitPolicy = "handle" | "defer";
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Typed transport errors shared between providers and the subagent runtime.
3
+ *
4
+ * `RateLimitError` is the contract for 429 handling (design doc
5
+ * docs/subagent-runtime-design.md §4.5): under `rateLimitPolicy: "defer"` the
6
+ * transport performs no 429 backoff of its own and throws this error
7
+ * immediately so the subagent scheduler can be the single backoff layer.
8
+ */
9
+ export class RateLimitError extends Error {
10
+ isRateLimitError = true;
11
+ status;
12
+ retryAfterMs;
13
+ constructor(message, options) {
14
+ super(message, options?.cause !== undefined ? { cause: options.cause } : undefined);
15
+ this.name = "RateLimitError";
16
+ this.status = options?.status ?? 429;
17
+ this.retryAfterMs = options?.retryAfterMs;
18
+ }
19
+ }
20
+ export function isRateLimitError(error) {
21
+ return !!error
22
+ && typeof error === "object"
23
+ && error.isRateLimitError === true;
24
+ }
25
+ /**
26
+ * A provider accepted the HTTP request but terminated generation with an
27
+ * in-band protocol error (for example OpenRouter's HTTP-200 SSE error chunk).
28
+ * Keeping the wire status/type structured prevents the agent from mistaking
29
+ * the terminal event for a successful empty response.
30
+ */
31
+ export class ProviderResponseError extends Error {
32
+ isProviderResponseError = true;
33
+ status;
34
+ errorType;
35
+ retryAfterMs;
36
+ constructor(message, options = {}) {
37
+ super(message, options.cause !== undefined ? { cause: options.cause } : undefined);
38
+ this.name = "ProviderResponseError";
39
+ this.status = options.status;
40
+ this.errorType = options.errorType;
41
+ this.retryAfterMs = options.retryAfterMs;
42
+ }
43
+ }
44
+ export function isProviderResponseError(error) {
45
+ return !!error
46
+ && typeof error === "object"
47
+ && error.isProviderResponseError === true;
48
+ }
@@ -0,0 +1,12 @@
1
+ import { type ProviderErrorContext } from "../provider-error-record.js";
2
+ export interface ProviderTransportFailureContext extends ProviderErrorContext {
3
+ sessionId: string;
4
+ requestId: string;
5
+ attempt: number;
6
+ responseStatus?: number;
7
+ receivedEvents: number;
8
+ elapsedMs: number;
9
+ lastEventAgeMs?: number;
10
+ decision: "retry" | "delegate_retry" | "fail" | "cancelled";
11
+ }
12
+ export declare function logProviderTransportFailure(error: unknown, context: ProviderTransportFailureContext): void;
@@ -0,0 +1,32 @@
1
+ import { appendFileSync, existsSync, mkdirSync, renameSync, statSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { getBubbleHome } from "../bubble-home.js";
4
+ import { createSanitizedProviderError } from "../provider-error-record.js";
5
+ // Failure-only diagnostics are enabled without BUBBLE_TRACE. Keep at most two
6
+ // 2 MiB files; never persist request/response bodies, headers, or raw errors.
7
+ export function logProviderTransportFailure(error, context) {
8
+ try {
9
+ const dir = join(getBubbleHome(), "logs");
10
+ mkdirSync(dir, { recursive: true });
11
+ const file = join(dir, "provider-transport.jsonl");
12
+ if (existsSync(file) && statSync(file).size >= 2 * 1024 * 1024) {
13
+ renameSync(file, `${file}.1`);
14
+ }
15
+ appendFileSync(file, JSON.stringify({
16
+ timestamp: new Date().toISOString(),
17
+ phase: "provider_transport_failure",
18
+ sessionId: context.sessionId,
19
+ requestId: context.requestId,
20
+ attempt: context.attempt,
21
+ responseStatus: context.responseStatus,
22
+ receivedEvents: context.receivedEvents,
23
+ elapsedMs: context.elapsedMs,
24
+ lastEventAgeMs: context.lastEventAgeMs,
25
+ decision: context.decision,
26
+ error: createSanitizedProviderError(error, context),
27
+ }) + "\n", { encoding: "utf8", mode: 0o600 });
28
+ }
29
+ catch {
30
+ // Disk errors and concurrent rotation must never affect the request.
31
+ }
32
+ }