@code-yeongyu/senpi 2026.9.7 → 2026.9.8

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 (323) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/dist/core/agent-session.d.ts +40 -3
  3. package/dist/core/agent-session.d.ts.map +1 -1
  4. package/dist/core/agent-session.js +159 -40
  5. package/dist/core/agent-session.js.map +1 -1
  6. package/dist/core/compaction/compaction.d.ts.map +1 -1
  7. package/dist/core/compaction/compaction.js +2 -1
  8. package/dist/core/compaction/compaction.js.map +1 -1
  9. package/dist/core/dynamic-prompt/working-task.js +1 -1
  10. package/dist/core/dynamic-prompt/working-task.js.map +1 -1
  11. package/dist/core/extensions/builtin/cache-keepalive/index.d.ts.map +1 -1
  12. package/dist/core/extensions/builtin/cache-keepalive/index.js +4 -21
  13. package/dist/core/extensions/builtin/cache-keepalive/index.js.map +1 -1
  14. package/dist/core/extensions/builtin/claude-sdk-oauth/account-command.d.ts +2 -0
  15. package/dist/core/extensions/builtin/claude-sdk-oauth/account-command.d.ts.map +1 -1
  16. package/dist/core/extensions/builtin/claude-sdk-oauth/account-command.js +10 -25
  17. package/dist/core/extensions/builtin/claude-sdk-oauth/account-command.js.map +1 -1
  18. package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.d.ts.map +1 -1
  19. package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.js +36 -19
  20. package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.js.map +1 -1
  21. package/dist/core/extensions/builtin/claude-sdk-oauth/session-commit-boundary.d.ts.map +1 -1
  22. package/dist/core/extensions/builtin/claude-sdk-oauth/session-commit-boundary.js +21 -10
  23. package/dist/core/extensions/builtin/claude-sdk-oauth/session-commit-boundary.js.map +1 -1
  24. package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.d.ts +4 -17
  25. package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.d.ts.map +1 -1
  26. package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.js +23 -33
  27. package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.js.map +1 -1
  28. package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.d.ts.map +1 -1
  29. package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.js +1 -0
  30. package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.js.map +1 -1
  31. package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.d.ts.map +1 -1
  32. package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.js +5 -3
  33. package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.js.map +1 -1
  34. package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-attempt.d.ts.map +1 -1
  35. package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-attempt.js +8 -3
  36. package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-attempt.js.map +1 -1
  37. package/dist/core/extensions/builtin/claude-sdk-oauth/tools.d.ts +6 -5
  38. package/dist/core/extensions/builtin/claude-sdk-oauth/tools.d.ts.map +1 -1
  39. package/dist/core/extensions/builtin/claude-sdk-oauth/tools.js +6 -5
  40. package/dist/core/extensions/builtin/claude-sdk-oauth/tools.js.map +1 -1
  41. package/dist/core/extensions/builtin/compaction/circuit-breaker.d.ts +8 -0
  42. package/dist/core/extensions/builtin/compaction/circuit-breaker.d.ts.map +1 -1
  43. package/dist/core/extensions/builtin/compaction/circuit-breaker.js +8 -0
  44. package/dist/core/extensions/builtin/compaction/circuit-breaker.js.map +1 -1
  45. package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts +8 -0
  46. package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts.map +1 -1
  47. package/dist/core/extensions/builtin/compaction/deterministic-fallback.js +125 -20
  48. package/dist/core/extensions/builtin/compaction/deterministic-fallback.js.map +1 -1
  49. package/dist/core/extensions/builtin/compaction/fallback-failed-turn-normalization.d.ts +18 -0
  50. package/dist/core/extensions/builtin/compaction/fallback-failed-turn-normalization.d.ts.map +1 -0
  51. package/dist/core/extensions/builtin/compaction/fallback-failed-turn-normalization.js +20 -0
  52. package/dist/core/extensions/builtin/compaction/fallback-failed-turn-normalization.js.map +1 -0
  53. package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
  54. package/dist/core/extensions/builtin/compaction/index.js +54 -11
  55. package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
  56. package/dist/core/extensions/builtin/compaction/lane-policy.d.ts +3 -0
  57. package/dist/core/extensions/builtin/compaction/lane-policy.d.ts.map +1 -1
  58. package/dist/core/extensions/builtin/compaction/lane-policy.js +47 -23
  59. package/dist/core/extensions/builtin/compaction/lane-policy.js.map +1 -1
  60. package/dist/core/extensions/builtin/goal/agent-end-continuation.d.ts.map +1 -1
  61. package/dist/core/extensions/builtin/goal/agent-end-continuation.js +11 -0
  62. package/dist/core/extensions/builtin/goal/agent-end-continuation.js.map +1 -1
  63. package/dist/core/extensions/builtin/goal/cache-warm-renderer.js +6 -4
  64. package/dist/core/extensions/builtin/goal/cache-warm-renderer.js.map +1 -1
  65. package/dist/core/extensions/builtin/goal/cache-warm.d.ts +25 -1
  66. package/dist/core/extensions/builtin/goal/cache-warm.d.ts.map +1 -1
  67. package/dist/core/extensions/builtin/goal/cache-warm.js +29 -10
  68. package/dist/core/extensions/builtin/goal/cache-warm.js.map +1 -1
  69. package/dist/core/extensions/builtin/goal/continuation.d.ts +3 -1
  70. package/dist/core/extensions/builtin/goal/continuation.d.ts.map +1 -1
  71. package/dist/core/extensions/builtin/goal/continuation.js +17 -2
  72. package/dist/core/extensions/builtin/goal/continuation.js.map +1 -1
  73. package/dist/core/extensions/builtin/goal/lifecycle-helpers.d.ts.map +1 -1
  74. package/dist/core/extensions/builtin/goal/lifecycle-helpers.js +1 -0
  75. package/dist/core/extensions/builtin/goal/lifecycle-helpers.js.map +1 -1
  76. package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts +1 -1
  77. package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts.map +1 -1
  78. package/dist/core/extensions/builtin/goal/monitor-continuation.js +8 -3
  79. package/dist/core/extensions/builtin/goal/monitor-continuation.js.map +1 -1
  80. package/dist/core/extensions/builtin/gpt-account.d.ts +5 -1
  81. package/dist/core/extensions/builtin/gpt-account.d.ts.map +1 -1
  82. package/dist/core/extensions/builtin/gpt-account.js +9 -26
  83. package/dist/core/extensions/builtin/gpt-account.js.map +1 -1
  84. package/dist/core/extensions/builtin/hooks/plugin-manifest.js +2 -2
  85. package/dist/core/extensions/builtin/hooks/plugin-manifest.js.map +1 -1
  86. package/dist/core/extensions/builtin/hooks/safety.js +2 -2
  87. package/dist/core/extensions/builtin/hooks/safety.js.map +1 -1
  88. package/dist/core/extensions/builtin/monitor-state-event.d.ts +18 -0
  89. package/dist/core/extensions/builtin/monitor-state-event.d.ts.map +1 -1
  90. package/dist/core/extensions/builtin/monitor-state-event.js +23 -0
  91. package/dist/core/extensions/builtin/monitor-state-event.js.map +1 -1
  92. package/dist/core/extensions/builtin/oauth-login-interaction.d.ts +24 -0
  93. package/dist/core/extensions/builtin/oauth-login-interaction.d.ts.map +1 -0
  94. package/dist/core/extensions/builtin/oauth-login-interaction.js +77 -0
  95. package/dist/core/extensions/builtin/oauth-login-interaction.js.map +1 -0
  96. package/dist/core/extensions/builtin/permission-system/external-dir.d.ts.map +1 -1
  97. package/dist/core/extensions/builtin/permission-system/external-dir.js +5 -51
  98. package/dist/core/extensions/builtin/permission-system/external-dir.js.map +1 -1
  99. package/dist/core/extensions/builtin/permission-system/parsers.d.ts.map +1 -1
  100. package/dist/core/extensions/builtin/permission-system/parsers.js +5 -7
  101. package/dist/core/extensions/builtin/permission-system/parsers.js.map +1 -1
  102. package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.js +1 -1
  103. package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.js.map +1 -1
  104. package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.js +1 -1
  105. package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.js.map +1 -1
  106. package/dist/core/extensions/builtin/prompt-preset/execution-tooling.d.ts +14 -7
  107. package/dist/core/extensions/builtin/prompt-preset/execution-tooling.d.ts.map +1 -1
  108. package/dist/core/extensions/builtin/prompt-preset/execution-tooling.js +34 -13
  109. package/dist/core/extensions/builtin/prompt-preset/execution-tooling.js.map +1 -1
  110. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.d.ts +6 -10
  111. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.d.ts.map +1 -1
  112. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js +14 -9
  113. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js.map +1 -1
  114. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.d.ts +15 -15
  115. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.d.ts.map +1 -1
  116. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.js +49 -21
  117. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.js.map +1 -1
  118. package/dist/core/extensions/builtin/prompt-preset/kimi-k3.js +1 -1
  119. package/dist/core/extensions/builtin/prompt-preset/kimi-k3.js.map +1 -1
  120. package/dist/core/extensions/builtin/service-tier.d.ts +2 -0
  121. package/dist/core/extensions/builtin/service-tier.d.ts.map +1 -1
  122. package/dist/core/extensions/builtin/service-tier.js +17 -1
  123. package/dist/core/extensions/builtin/service-tier.js.map +1 -1
  124. package/dist/core/extensions/builtin/terminal/durable-command.d.ts.map +1 -1
  125. package/dist/core/extensions/builtin/terminal/durable-command.js +3 -0
  126. package/dist/core/extensions/builtin/terminal/durable-command.js.map +1 -1
  127. package/dist/core/extensions/builtin/terminal/durable-file.d.ts.map +1 -1
  128. package/dist/core/extensions/builtin/terminal/durable-file.js +2 -0
  129. package/dist/core/extensions/builtin/terminal/durable-file.js.map +1 -1
  130. package/dist/core/extensions/builtin/terminal/extension.d.ts.map +1 -1
  131. package/dist/core/extensions/builtin/terminal/extension.js +14 -2
  132. package/dist/core/extensions/builtin/terminal/extension.js.map +1 -1
  133. package/dist/core/extensions/builtin/terminal/monitor-notify.d.ts.map +1 -1
  134. package/dist/core/extensions/builtin/terminal/monitor-notify.js +27 -5
  135. package/dist/core/extensions/builtin/terminal/monitor-notify.js.map +1 -1
  136. package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts +17 -0
  137. package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts.map +1 -1
  138. package/dist/core/extensions/builtin/terminal/monitor-registry.js +76 -14
  139. package/dist/core/extensions/builtin/terminal/monitor-registry.js.map +1 -1
  140. package/dist/core/extensions/builtin/terminal/notify.d.ts +2 -0
  141. package/dist/core/extensions/builtin/terminal/notify.d.ts.map +1 -1
  142. package/dist/core/extensions/builtin/terminal/notify.js +6 -1
  143. package/dist/core/extensions/builtin/terminal/notify.js.map +1 -1
  144. package/dist/core/extensions/builtin/terminal/session-bundle.d.ts +3 -1
  145. package/dist/core/extensions/builtin/terminal/session-bundle.d.ts.map +1 -1
  146. package/dist/core/extensions/builtin/terminal/session-bundle.js +13 -0
  147. package/dist/core/extensions/builtin/terminal/session-bundle.js.map +1 -1
  148. package/dist/core/extensions/builtin/terminal/shared.d.ts +13 -2
  149. package/dist/core/extensions/builtin/terminal/shared.d.ts.map +1 -1
  150. package/dist/core/extensions/builtin/terminal/shared.js +15 -2
  151. package/dist/core/extensions/builtin/terminal/shared.js.map +1 -1
  152. package/dist/core/extensions/builtin/terminal/tools/monitor.d.ts.map +1 -1
  153. package/dist/core/extensions/builtin/terminal/tools/monitor.js +8 -1
  154. package/dist/core/extensions/builtin/terminal/tools/monitor.js.map +1 -1
  155. package/dist/core/extensions/builtin/tool-search/index.d.ts.map +1 -1
  156. package/dist/core/extensions/builtin/tool-search/index.js +1 -0
  157. package/dist/core/extensions/builtin/tool-search/index.js.map +1 -1
  158. package/dist/core/extensions/builtin/tool-search/service.d.ts +4 -0
  159. package/dist/core/extensions/builtin/tool-search/service.d.ts.map +1 -1
  160. package/dist/core/extensions/builtin/tool-search/service.js +11 -0
  161. package/dist/core/extensions/builtin/tool-search/service.js.map +1 -1
  162. package/dist/core/extensions/runner.d.ts +1 -0
  163. package/dist/core/extensions/runner.d.ts.map +1 -1
  164. package/dist/core/extensions/runner.js +8 -1
  165. package/dist/core/extensions/runner.js.map +1 -1
  166. package/dist/core/extensions/types.d.ts +9 -0
  167. package/dist/core/extensions/types.d.ts.map +1 -1
  168. package/dist/core/extensions/types.js.map +1 -1
  169. package/dist/core/high-reasoning-warning.d.ts.map +1 -1
  170. package/dist/core/high-reasoning-warning.js +4 -6
  171. package/dist/core/high-reasoning-warning.js.map +1 -1
  172. package/dist/core/sdk.d.ts +1 -1
  173. package/dist/core/sdk.d.ts.map +1 -1
  174. package/dist/core/sdk.js +25 -6
  175. package/dist/core/sdk.js.map +1 -1
  176. package/dist/core/settings-manager.js +1 -1
  177. package/dist/core/settings-manager.js.map +1 -1
  178. package/dist/core/settings-shapes.js.map +1 -1
  179. package/dist/core/tools/bounded-realpath.d.ts +28 -0
  180. package/dist/core/tools/bounded-realpath.d.ts.map +1 -0
  181. package/dist/core/tools/bounded-realpath.js +53 -0
  182. package/dist/core/tools/bounded-realpath.js.map +1 -0
  183. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  184. package/dist/core/tools/file-mutation-queue.js +15 -13
  185. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  186. package/dist/core/tools/filesystem-policy.d.ts +7 -0
  187. package/dist/core/tools/filesystem-policy.d.ts.map +1 -1
  188. package/dist/core/tools/filesystem-policy.js +25 -15
  189. package/dist/core/tools/filesystem-policy.js.map +1 -1
  190. package/dist/core/trust-manager.d.ts.map +1 -1
  191. package/dist/core/trust-manager.js +13 -2
  192. package/dist/core/trust-manager.js.map +1 -1
  193. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  194. package/dist/modes/interactive/interactive-mode.js +1 -0
  195. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  196. package/dist/modes/interactive/tips/catalog/memory-tips.d.ts.map +1 -1
  197. package/dist/modes/interactive/tips/catalog/memory-tips.js +6 -0
  198. package/dist/modes/interactive/tips/catalog/memory-tips.js.map +1 -1
  199. package/dist/modes/interactive/tips/catalog/subagent-tips.d.ts.map +1 -1
  200. package/dist/modes/interactive/tips/catalog/subagent-tips.js +6 -0
  201. package/dist/modes/interactive/tips/catalog/subagent-tips.js.map +1 -1
  202. package/dist/modes/rpc/host-lifecycle.d.ts.map +1 -1
  203. package/dist/modes/rpc/host-lifecycle.js +31 -5
  204. package/dist/modes/rpc/host-lifecycle.js.map +1 -1
  205. package/dist/modes/rpc/host-watchdog.d.ts +11 -0
  206. package/dist/modes/rpc/host-watchdog.d.ts.map +1 -1
  207. package/dist/modes/rpc/host-watchdog.js +16 -2
  208. package/dist/modes/rpc/host-watchdog.js.map +1 -1
  209. package/dist/modes/rpc/multi-session-host.d.ts.map +1 -1
  210. package/dist/modes/rpc/multi-session-host.js +54 -16
  211. package/dist/modes/rpc/multi-session-host.js.map +1 -1
  212. package/dist/modes/rpc/socket-ownership.d.ts +46 -0
  213. package/dist/modes/rpc/socket-ownership.d.ts.map +1 -0
  214. package/dist/modes/rpc/socket-ownership.js +178 -0
  215. package/dist/modes/rpc/socket-ownership.js.map +1 -0
  216. package/dist/utils/fs-watch.d.ts +17 -0
  217. package/dist/utils/fs-watch.d.ts.map +1 -1
  218. package/dist/utils/fs-watch.js +38 -10
  219. package/dist/utils/fs-watch.js.map +1 -1
  220. package/dist/utils/paths.d.ts +33 -0
  221. package/dist/utils/paths.d.ts.map +1 -1
  222. package/dist/utils/paths.js +109 -3
  223. package/dist/utils/paths.js.map +1 -1
  224. package/docs/development.md +3 -2
  225. package/docs/providers.md +5 -1
  226. package/docs/settings.md +1 -0
  227. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +31 -0
  228. package/node_modules/@code-yeongyu/senpi-codemode/README.md +14 -1
  229. package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
  230. package/node_modules/@code-yeongyu/senpi-codemode/src/bridge/protocol.ts +1 -0
  231. package/node_modules/@code-yeongyu/senpi-codemode/src/extension/runtime-factory.ts +3 -0
  232. package/node_modules/@code-yeongyu/senpi-codemode/src/extension/session-manager.ts +7 -0
  233. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/AGENTS.md +7 -0
  234. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/jl/kernel.ts +4 -0
  235. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-contract.ts +3 -0
  236. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-core.js +29 -0
  237. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-indirect-eval.js +10 -6
  238. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-shell-capture.d.ts +16 -0
  239. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-shell-capture.js +44 -8
  240. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-startup.ts +1 -0
  241. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/kernel-contract.ts +3 -0
  242. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/transport.ts +9 -1
  243. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/rb/kernel.ts +4 -0
  244. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/session-env.ts +56 -0
  245. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/shared/subprocess-contract.ts +3 -0
  246. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/shared/subprocess-kernel.ts +9 -1
  247. package/node_modules/@code-yeongyu/senpi-codemode/src/output/output-meta.ts +26 -2
  248. package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt.ts +17 -24
  249. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/image.ts +12 -3
  250. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  251. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +2 -2
  252. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  253. package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.d.ts +7 -0
  254. package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.d.ts.map +1 -1
  255. package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.js +19 -0
  256. package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.js.map +1 -1
  257. package/node_modules/@earendil-works/pi-agent-core/dist/empty-assistant-recovery.d.ts.map +1 -1
  258. package/node_modules/@earendil-works/pi-agent-core/dist/empty-assistant-recovery.js +24 -16
  259. package/node_modules/@earendil-works/pi-agent-core/dist/empty-assistant-recovery.js.map +1 -1
  260. package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts +1 -1
  261. package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts.map +1 -1
  262. package/node_modules/@earendil-works/pi-agent-core/dist/index.js +1 -1
  263. package/node_modules/@earendil-works/pi-agent-core/dist/index.js.map +1 -1
  264. package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
  265. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts.map +1 -1
  266. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +47 -178
  267. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
  268. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-tool-references.d.ts +3 -0
  269. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-tool-references.d.ts.map +1 -0
  270. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-tool-references.js +260 -0
  271. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-tool-references.js.map +1 -0
  272. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.d.ts.map +1 -1
  273. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js +1 -0
  274. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js.map +1 -1
  275. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.d.ts.map +1 -1
  276. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js +1 -0
  277. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
  278. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/anthropic-callback-listener.d.ts +40 -0
  279. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/anthropic-callback-listener.d.ts.map +1 -0
  280. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/anthropic-callback-listener.js +138 -0
  281. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/anthropic-callback-listener.js.map +1 -0
  282. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/anthropic.d.ts +2 -3
  283. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/anthropic.d.ts.map +1 -1
  284. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/anthropic.js +42 -139
  285. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/anthropic.js.map +1 -1
  286. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/authorization-input.d.ts +6 -0
  287. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/authorization-input.d.ts.map +1 -0
  288. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/authorization-input.js +29 -0
  289. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/authorization-input.js.map +1 -0
  290. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/error-details.d.ts +3 -0
  291. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/error-details.d.ts.map +1 -0
  292. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/error-details.js +20 -0
  293. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/error-details.js.map +1 -0
  294. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  295. package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
  296. package/node_modules/@earendil-works/pi-ai/dist/providers/data/azure-openai-responses.json +1 -1
  297. package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
  298. package/node_modules/@earendil-works/pi-ai/dist/providers/data/github-copilot.json +1 -1
  299. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai-codex.json +1 -1
  300. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai.json +1 -1
  301. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
  302. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opengateway.json +1 -1
  303. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  304. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  305. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-stream-terminal.d.ts.map +1 -1
  306. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-stream-terminal.js +16 -1
  307. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-stream-terminal.js.map +1 -1
  308. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +7 -0
  309. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  310. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  311. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts +1 -1
  312. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts.map +1 -1
  313. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js +14 -3
  314. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js.map +1 -1
  315. package/node_modules/@earendil-works/pi-ai/dist/utils/server-fallback-receipt.d.ts +2 -1
  316. package/node_modules/@earendil-works/pi-ai/dist/utils/server-fallback-receipt.d.ts.map +1 -1
  317. package/node_modules/@earendil-works/pi-ai/dist/utils/server-fallback-receipt.js +16 -0
  318. package/node_modules/@earendil-works/pi-ai/dist/utils/server-fallback-receipt.js.map +1 -1
  319. package/node_modules/@earendil-works/pi-ai/package.json +2 -2
  320. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  321. package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
  322. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  323. package/package.json +7 -7
package/dist/core/sdk.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { join } from "node:path";
2
2
  import { Agent, setDefaultStreamFn } from "@earendil-works/pi-agent-core";
3
- import { streamSimple } from "@earendil-works/pi-ai/compat";
3
+ import { modelsAreEqual, streamSimple } from "@earendil-works/pi-ai/compat";
4
4
  import { getAgentDir } from "../config.js";
5
5
  import { resolvePath } from "../utils/paths.js";
6
6
  import { AgentSession } from "./agent-session.js";
@@ -9,6 +9,7 @@ import { AuthStorage } from "./auth-storage.js";
9
9
  import { estimateTokens } from "./compaction/compaction.js";
10
10
  import { createSessionCursorExecBridge } from "./cursor-exec-bridge-session.js";
11
11
  import { DEFAULT_THINKING_LEVEL } from "./defaults.js";
12
+ import { supportsServiceTier } from "./extensions/builtin/service-tier.js";
12
13
  import { convertToLlmForTransport, TRANSPORT_IMAGE_BUDGET_BYTES } from "./messages.js";
13
14
  import { ModelRegistry } from "./model-registry.js";
14
15
  import { findInitialModel, getModelNarrowingPatterns, resolveModelScope, resolveStoredModelReference, } from "./model-resolver.js";
@@ -223,9 +224,25 @@ export async function createAgentSession(options = {}) {
223
224
  maxHistoricalImages: settingsManager.getMaxHistoricalImages(),
224
225
  });
225
226
  const extensionRunnerRef = {};
226
- // The session (and its tool registry) is constructed after the Agent, so
227
- // the Cursor exec bridge resolves tools through this late-bound ref.
228
- const cursorBridgeSessionRef = {};
227
+ // The session (and its tool registry) is constructed after the Agent, so the Cursor exec
228
+ // bridge and the request-tier resolver below reach it through this late-bound ref.
229
+ const sessionRef = {};
230
+ // The `service_tier` a request carries when the caller did not pin one. The session's
231
+ // effective tier is the single source: a `-fast` catalog variant, a scoped `:priority` pin, or
232
+ // session fast mode all land here, so an SDK/embedded session honors the tier without the
233
+ // interactive service-tier extension being loaded (its payload hook only fills a missing
234
+ // field and stays consistent). A request for another model (title/branch summaries) falls
235
+ // back to that model's own catalog tier. Only the OpenAI Responses family accepts the field.
236
+ const resolveRequestServiceTier = (requestModel) => {
237
+ if (!supportsServiceTier(requestModel.api))
238
+ return undefined;
239
+ const session = sessionRef.current;
240
+ const activeModel = session?.model;
241
+ if (session && activeModel && modelsAreEqual(activeModel, requestModel)) {
242
+ return session.effectiveServiceTier;
243
+ }
244
+ return modelRuntime.getCompatibilityRequestConfig(requestModel).serviceTier;
245
+ };
229
246
  agent = new Agent({
230
247
  initialState: {
231
248
  systemPrompt: "",
@@ -255,8 +272,10 @@ export async function createAgentSession(options = {}) {
255
272
  : declaredPolicy.providerRequest.enabled
256
273
  ? declaredPolicy.providerRequest.maxRetries
257
274
  : 0;
275
+ const serviceTier = options?.serviceTier ?? resolveRequestServiceTier(model);
258
276
  return modelRuntime.streamSimple(model, context, {
259
277
  ...options,
278
+ ...(serviceTier !== undefined ? { serviceTier } : {}),
260
279
  timeoutMs,
261
280
  websocketConnectTimeoutMs,
262
281
  maxRetries: options?.maxRetries ?? profileMaxRetries,
@@ -301,7 +320,7 @@ export async function createAgentSession(options = {}) {
301
320
  timeoutMs: settingsManager.getAgentStreamIdleTimeoutMs(),
302
321
  streamStartTimeoutMs: settingsManager.getAgentStreamStartTimeoutMs(),
303
322
  maxRetryDelayMs: settingsManager.getProviderRetrySettings().maxRetryDelayMs,
304
- cursorExecHandlers: (runSignal) => createSessionCursorExecBridge(cursorBridgeSessionRef, () => agent, runSignal),
323
+ cursorExecHandlers: (runSignal) => createSessionCursorExecBridge(sessionRef, () => agent, runSignal),
305
324
  });
306
325
  // Agent core accepts the field in AgentState but older constructors may not copy it
307
326
  // from initialState; assign the separately computed provenance explicitly.
@@ -350,7 +369,7 @@ export async function createAgentSession(options = {}) {
350
369
  ? existingSession.messages.reduce((total, message) => total + estimateTokens(message), 0)
351
370
  : 0;
352
371
  session.assertModelUsable(undefined, liveContextTokens, hasExistingSession ? { includeSpeculationLead: false, admission: "resume" } : { admission: "start" });
353
- cursorBridgeSessionRef.current = session;
372
+ sessionRef.current = session;
354
373
  const extensionsResult = resourceLoader.getExtensions();
355
374
  return {
356
375
  session,
@@ -1 +1 @@
1
- {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["import { join } from \"node:path\";\nimport { Agent, type AgentMessage, setDefaultStreamFn, type ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { ThinkingSelection } from \"@earendil-works/pi-ai\";\nimport { type Message, type Model, streamSimple } from \"@earendil-works/pi-ai/compat\";\nimport { getAgentDir } from \"../config.ts\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport { AgentSession } from \"./agent-session.ts\";\nimport { formatNoModelsAvailableMessage } from \"./auth-guidance.ts\";\nimport { AuthStorage } from \"./auth-storage.ts\";\nimport { estimateTokens } from \"./compaction/compaction.ts\";\nimport { createSessionCursorExecBridge } from \"./cursor-exec-bridge-session.ts\";\nimport { DEFAULT_THINKING_LEVEL } from \"./defaults.ts\";\nimport type { ServiceTier } from \"./extensions/builtin/service-tier.ts\";\nimport type { ExtensionRunner, LoadExtensionsResult, SessionStartEvent, ToolDefinition } from \"./extensions/index.ts\";\nimport { convertToLlmForTransport, TRANSPORT_IMAGE_BUDGET_BYTES } from \"./messages.ts\";\nimport { ModelRegistry } from \"./model-registry.ts\";\nimport {\n\tfindInitialModel,\n\tgetModelNarrowingPatterns,\n\ttype InitialModelProvenance,\n\tresolveModelScope,\n\tresolveStoredModelReference,\n} from \"./model-resolver.ts\";\nimport { ModelRuntime } from \"./model-runtime.ts\";\nimport { mergeProviderAttributionHeaders } from \"./provider-attribution.ts\";\nimport type { ResourceLoader } from \"./resource-loader.ts\";\nimport { DefaultResourceLoader } from \"./resource-loader.ts\";\nimport { getDefaultSessionDir, SessionManager } from \"./session-manager.ts\";\nimport { SettingsManager } from \"./settings-manager.ts\";\nimport { getSupportedThinkingLevels } from \"./thinking-levels.ts\";\nimport { time } from \"./timings.ts\";\nimport {\n\tcreateBashTool,\n\tcreateCodingTools,\n\tcreateEditTool,\n\tcreateFindTool,\n\tcreateGrepTool,\n\tcreateLsTool,\n\tcreatePowerShellTool,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateWriteTool,\n\ttype ToolName,\n\twithFileMutationQueue,\n} from \"./tools/index.ts\";\n\n// Preserve the pre-0.81 fallback for extensions that construct Agent instances\n// or invoke low-level agent loops without supplying streamFn. Agent core remains\n// provider-agnostic and does not import pi-ai/compat itself.\nsetDefaultStreamFn(streamSimple);\n\nexport interface CreateAgentSessionOptions {\n\t/** Working directory for project-local discovery. Default: process.cwd() */\n\tcwd?: string;\n\t/** Global config directory. Default: ~/.pi/agent */\n\tagentDir?: string;\n\n\t/** Canonical model/auth runtime. Defaults to a runtime using agentDir/auth.json and models.json. */\n\tmodelRuntime?: ModelRuntime;\n\t/** Legacy credential facade retained for SDK compatibility. */\n\tauthStorage?: AuthStorage;\n\t/** Legacy model facade retained for SDK compatibility. */\n\tmodelRegistry?: ModelRegistry;\n\n\t/** Model to use. Default: from settings, else first available */\n\tmodel?: Model<any>;\n\t/** Provenance for an explicitly supplied initial model. Omit to leave external SDK model selection untouched. */\n\tinitialModelProvenance?: InitialModelProvenance;\n\t/** Thinking level. Default: from settings, else 'medium' (clamped to model capabilities) */\n\tthinkingLevel?: ThinkingLevel;\n\t/** Provenance for a pre-resolved CLI/scoped/legacy selector. */\n\tthinkingSelection?: ThinkingSelection;\n\t/** Models available for cycling (Ctrl+P in interactive mode) */\n\tscopedModels?: Array<{\n\t\tmodel: Model<any>;\n\t\tthinkingLevel?: ThinkingLevel;\n\t\tthinkingSelection?: ThinkingSelection;\n\t\tserviceTier?: ServiceTier;\n\t}>;\n\t/** Favorite models for Ctrl+P cycling. */\n\tfavoriteModels?: Array<{\n\t\tmodel: Model<any>;\n\t\tthinkingLevel?: ThinkingLevel;\n\t\tthinkingSelection?: ThinkingSelection;\n\t\tserviceTier?: ServiceTier;\n\t}>;\n\n\t/**\n\t * Optional default tool suppression mode when no explicit allowlist is provided.\n\t *\n\t * - \"all\": start with no tools enabled\n\t * - \"builtin\": disable the default built-in tools (read, bash, edit, write)\n\t * but keep extension/custom tools enabled\n\t */\n\tnoTools?: \"all\" | \"builtin\";\n\t/**\n\t * Optional allowlist of tool names.\n\t *\n\t * When omitted, pi uses the `defaultTools` setting for the initial built-in\n\t * selection when configured. Otherwise it enables the default built-in tools\n\t * (read, bash, edit, write). Extension/custom tools remain enabled unless\n\t * `noTools` changes that default. When provided, only the listed tool names are\n\t * enabled.\n\t */\n\ttools?: string[];\n\t/** Optional denylist of tool names to disable. Applies after `tools` when both are provided. */\n\texcludeTools?: string[];\n\t/** Custom tools to register (in addition to built-in tools). */\n\tcustomTools?: ToolDefinition[];\n\n\t/** Resource loader. When omitted, DefaultResourceLoader is used. */\n\tresourceLoader?: ResourceLoader;\n\n\t/** Session manager. Default: SessionManager.create(cwd) */\n\tsessionManager?: SessionManager;\n\n\t/** Settings manager. Default: SettingsManager.create(cwd, agentDir) */\n\tsettingsManager?: SettingsManager;\n\t/** Session start event metadata for extension runtime startup. */\n\tsessionStartEvent?: SessionStartEvent;\n\t/** Generate a session title after the first successful turn. */\n\tautoTitleSessions?: boolean;\n}\n\n/** Result from createAgentSession */\nexport interface CreateAgentSessionResult {\n\t/** The created session */\n\tsession: AgentSession;\n\t/** Extensions result (for UI context setup in interactive mode) */\n\textensionsResult: LoadExtensionsResult;\n\t/** Warning if session was restored with a different model than saved */\n\tmodelFallbackMessage?: string;\n}\n\n// Re-exports\n\nexport * from \"./agent-session-runtime.ts\";\nexport type {\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionContext,\n\tExtensionFactory,\n\tInlineExtension,\n\tSlashCommandInfo,\n\tSlashCommandSource,\n\tToolDefinition,\n} from \"./extensions/index.ts\";\nexport type { PromptTemplate } from \"./prompt-templates.ts\";\nexport type { Skill } from \"./skills.ts\";\nexport type { Tool } from \"./tools/index.ts\";\n\nexport {\n\tcreateBashTool,\n\t// Tool factories (for custom cwd)\n\tcreateCodingTools,\n\tcreateEditTool,\n\tcreateFindTool,\n\tcreateGrepTool,\n\tcreateLsTool,\n\tcreatePowerShellTool,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateWriteTool,\n\twithFileMutationQueue,\n};\n\nexport function clampThinkingLevelToModel(\n\tlevel: ThinkingLevel | undefined,\n\tmodel: Model<any> | undefined,\n): ThinkingLevel {\n\tif (!model?.reasoning) return \"off\";\n\tconst requested = level ?? \"off\";\n\tconst available = getSupportedThinkingLevels(model);\n\tif (available.includes(requested)) return requested;\n\tconst ordered: ThinkingLevel[] = [\"off\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"];\n\tconst requestedIndex = ordered.indexOf(requested);\n\tfor (let index = requestedIndex - 1; index >= 0; index--) {\n\t\tconst candidate = ordered[index];\n\t\tif (candidate !== undefined && available.includes(candidate)) return candidate;\n\t}\n\tfor (let index = requestedIndex + 1; index < ordered.length; index++) {\n\t\tconst candidate = ordered[index];\n\t\tif (candidate !== undefined && available.includes(candidate)) return candidate;\n\t}\n\treturn available[0] ?? \"off\";\n}\n\n// Helper Functions\n\nfunction getDefaultAgentDir(): string {\n\treturn getAgentDir();\n}\n\n/**\n * Create an AgentSession with the specified options.\n *\n * @example\n * ```typescript\n * // Minimal - uses defaults\n * const { session } = await createAgentSession();\n *\n * // With explicit model\n * import { getModel } from '@earendil-works/pi-ai';\n * const { session } = await createAgentSession({\n * model: getModel('anthropic', 'claude-opus-4-5'),\n * thinkingLevel: 'high',\n * });\n *\n * // Continue previous session\n * const { session, modelFallbackMessage } = await createAgentSession({\n * continueSession: true,\n * });\n *\n * // Full control\n * const loader = new DefaultResourceLoader({\n * cwd: process.cwd(),\n * agentDir: getAgentDir(),\n * settingsManager: SettingsManager.create(),\n * });\n * await loader.reload();\n * const { session } = await createAgentSession({\n * model: myModel,\n * tools: [\"read\", \"bash\"],\n * resourceLoader: loader,\n * sessionManager: SessionManager.inMemory(),\n * });\n * ```\n */\nexport async function createAgentSession(options: CreateAgentSessionOptions = {}): Promise<CreateAgentSessionResult> {\n\tconst cwd = resolvePath(options.cwd ?? options.sessionManager?.getCwd() ?? process.cwd());\n\tconst agentDir = options.agentDir ? resolvePath(options.agentDir) : getDefaultAgentDir();\n\tlet resourceLoader = options.resourceLoader;\n\n\tconst authPath = options.agentDir ? join(agentDir, \"auth.json\") : undefined;\n\tconst modelsPath = options.agentDir ? join(agentDir, \"models.json\") : undefined;\n\tconst authStorage = options.authStorage ?? options.modelRegistry?.authStorage ?? AuthStorage.create(authPath);\n\tconst modelRuntime =\n\t\toptions.modelRuntime ??\n\t\toptions.modelRegistry?.modelRuntime ??\n\t\t(await ModelRuntime.create({ credentials: authStorage, modelsPath, agentDir }));\n\tconst modelRegistry = options.modelRegistry ?? new ModelRegistry(modelRuntime, authStorage);\n\n\tconst settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n\tconst sessionManager = options.sessionManager ?? SessionManager.create(cwd, getDefaultSessionDir(cwd, agentDir));\n\tconst scopedModels =\n\t\toptions.scopedModels ??\n\t\t(await resolveModelScope(\n\t\t\tgetModelNarrowingPatterns({ legacyEnabledPatterns: settingsManager.getEnabledModels() }),\n\t\t\tmodelRuntime,\n\t\t));\n\tconst favoriteModels =\n\t\toptions.favoriteModels ?? (await resolveModelScope(settingsManager.getFavoriteModels() ?? [], modelRuntime));\n\n\tif (!resourceLoader) {\n\t\tresourceLoader = new DefaultResourceLoader({ cwd, agentDir, settingsManager });\n\t\tawait resourceLoader.reload();\n\t\ttime(\"resourceLoader.reload\");\n\t}\n\n\t// Check if session has existing data to restore\n\tconst existingSession = sessionManager.buildSessionContext();\n\tconst hasExistingSession = existingSession.messages.length > 0;\n\tconst hasThinkingEntry = sessionManager.getBranch().some((entry) => entry.type === \"thinking_level_change\");\n\n\tlet model = options.model;\n\tlet initialModelProvenance = options.initialModelProvenance;\n\tlet initialResolvedThinkingLevel: ThinkingLevel | undefined;\n\tlet initialThinkingSelection = options.thinkingSelection;\n\tlet modelFallbackMessage: string | undefined;\n\n\tif (model) {\n\t\tconst resolved = resolveStoredModelReference(model.provider, model.id, modelRuntime);\n\t\tif (resolved?.thinkingSelection) {\n\t\t\tmodel = resolved.model;\n\t\t\tinitialResolvedThinkingLevel = resolved.thinkingLevel;\n\t\t\tinitialThinkingSelection ??= resolved.thinkingSelection;\n\t\t}\n\t}\n\n\t// If session has data, try to restore model from it\n\tif (!model && hasExistingSession && existingSession.model) {\n\t\tconst restored = resolveStoredModelReference(\n\t\t\texistingSession.model.provider,\n\t\t\texistingSession.model.modelId,\n\t\t\tmodelRuntime,\n\t\t);\n\t\tif (restored && modelRuntime.hasConfiguredAuth(restored.model.provider)) {\n\t\t\tmodel = restored.model;\n\t\t\tinitialResolvedThinkingLevel = restored.thinkingLevel;\n\t\t\tinitialThinkingSelection = restored.thinkingSelection;\n\t\t}\n\t\tif (!model) {\n\t\t\tmodelFallbackMessage = `Could not restore model ${existingSession.model.provider}/${existingSession.model.modelId}`;\n\t\t}\n\t}\n\n\t// If still no model, use findInitialModel (checks settings default, then provider defaults)\n\tif (!model) {\n\t\tconst result = await findInitialModel({\n\t\t\tscopedModels,\n\t\t\tisContinuing: hasExistingSession,\n\t\t\tdefaultProvider: settingsManager.getDefaultProvider(),\n\t\t\tdefaultModelId: settingsManager.getDefaultModel(),\n\t\t\tdefaultThinkingLevel: settingsManager.getDefaultThinkingLevel(),\n\t\t\tmodelThinkingLevels: settingsManager.getAllModelThinkingLevels(),\n\t\t\tmodelRuntime,\n\t\t});\n\t\tmodel = result.model;\n\t\tinitialModelProvenance = result.provenance;\n\t\tconst selectedModel = model;\n\t\tconst scopedSelection = selectedModel\n\t\t\t? scopedModels.find(\n\t\t\t\t\t(entry) => entry.model.provider === selectedModel.provider && entry.model.id === selectedModel.id,\n\t\t\t\t)\n\t\t\t: undefined;\n\t\tinitialResolvedThinkingLevel = scopedSelection?.thinkingLevel ?? result.thinkingLevel;\n\t\tinitialThinkingSelection = scopedSelection?.thinkingSelection ?? result.thinkingSelection;\n\t\tif (!model) {\n\t\t\tmodelFallbackMessage = formatNoModelsAvailableMessage();\n\t\t} else if (modelFallbackMessage) {\n\t\t\tmodelFallbackMessage += `. Using ${model.provider}/${model.id}`;\n\t\t}\n\t}\n\n\tlet thinkingLevel = options.thinkingLevel ?? initialResolvedThinkingLevel;\n\tlet thinkingSelection =\n\t\toptions.thinkingSelection ??\n\t\t(options.thinkingLevel !== undefined\n\t\t\t? { level: options.thinkingLevel, source: \"explicit\" as const }\n\t\t\t: undefined) ??\n\t\tinitialThinkingSelection;\n\n\t// An exact-session thinking entry wins over settings unless a real legacy alias already\n\t// selected a level. Old entries have no provenance, including Cursor's synthetic off.\n\tif (thinkingLevel === undefined && hasExistingSession && hasThinkingEntry) {\n\t\tthinkingLevel = existingSession.thinkingLevel as ThinkingLevel;\n\t\tthinkingSelection = existingSession.thinkingSelection;\n\t}\n\tif (thinkingLevel === undefined && model) {\n\t\tconst remembered = settingsManager.getModelThinkingLevel(model.provider, model.id);\n\t\tif (remembered !== undefined) {\n\t\t\tthinkingLevel = remembered;\n\t\t\tthinkingSelection = { level: remembered, source: \"explicit\" };\n\t\t}\n\t}\n\tif (thinkingLevel === undefined) {\n\t\tconst configuredDefault = settingsManager.getDefaultThinkingLevel();\n\t\tif (configuredDefault !== undefined) {\n\t\t\tthinkingLevel = configuredDefault;\n\t\t\tthinkingSelection = { level: configuredDefault, source: \"explicit\" };\n\t\t} else {\n\t\t\tthinkingLevel = DEFAULT_THINKING_LEVEL;\n\t\t}\n\t}\n\n\t// Clamp to model capabilities without inventing provenance for a defaulted level.\n\tif (!model) {\n\t\tthinkingLevel = \"off\";\n\t} else {\n\t\tthinkingLevel = clampThinkingLevelToModel(thinkingLevel, model);\n\t}\n\tif (thinkingSelection) thinkingSelection = { ...thinkingSelection, level: thinkingLevel };\n\n\tconst defaultActiveToolNames: ToolName[] = [\"read\", \"bash\", \"edit\", \"write\"];\n\tconst configuredDefaultToolNames = settingsManager.getDefaultTools();\n\tconst sessionDefaultToolNames =\n\t\toptions.tools === undefined && options.noTools === undefined ? configuredDefaultToolNames : undefined;\n\tconst allowedToolNames = options.tools ?? (options.noTools === \"all\" ? [] : undefined);\n\tconst excludedToolNames = options.excludeTools;\n\tconst excludedToolNameSet = excludedToolNames ? new Set(excludedToolNames) : undefined;\n\tconst initialActiveToolNames = (\n\t\toptions.tools ?? (options.noTools ? [] : (configuredDefaultToolNames ?? defaultActiveToolNames))\n\t).filter((name) => !excludedToolNameSet?.has(name));\n\n\tlet agent: Agent;\n\tconst reasoningBaseline = existingSession.configurationUpdate\n\t\t? (sessionManager.getBranch().find((entry) => entry.type === \"thinking_level_change\")?.thinkingLevel ??\n\t\t\tthinkingLevel)\n\t\t: undefined;\n\n\t// Read blockImages per request so a mid-session settings change takes effect.\n\tconst convertToLlmWithBlockImages = (messages: AgentMessage[]): Message[] =>\n\t\tconvertToLlmForTransport(messages, {\n\t\t\tblockImages: settingsManager.getBlockImages(),\n\t\t\tbudgetBytes: TRANSPORT_IMAGE_BUDGET_BYTES,\n\t\t\talwaysKeepNewest: 1,\n\t\t\tmaxHistoricalImages: settingsManager.getMaxHistoricalImages(),\n\t\t});\n\n\tconst extensionRunnerRef: { current?: ExtensionRunner } = {};\n\t// The session (and its tool registry) is constructed after the Agent, so\n\t// the Cursor exec bridge resolves tools through this late-bound ref.\n\tconst cursorBridgeSessionRef: { current?: AgentSession } = {};\n\n\tagent = new Agent({\n\t\tinitialState: {\n\t\t\tsystemPrompt: \"\",\n\t\t\tmodel,\n\t\t\tthinkingLevel,\n\t\t\tthinkingSelection,\n\t\t\treasoningBaseline,\n\t\t\ttools: [],\n\t\t},\n\t\tconvertToLlm: convertToLlmWithBlockImages,\n\t\tstreamFn: async (model, context, options) => {\n\t\t\tconst providerRetrySettings = settingsManager.getProviderRetrySettings();\n\t\t\tconst httpIdleTimeoutMs = settingsManager.getHttpIdleTimeoutMs();\n\t\t\t// SDKs treat timeout=0 as 0ms (immediate timeout), not \"no timeout\".\n\t\t\t// Use max int32 to effectively disable the timeout.\n\t\t\tconst effectiveTimeoutMs = httpIdleTimeoutMs === 0 ? 2147483647 : httpIdleTimeoutMs;\n\t\t\tconst timeoutMs = options?.timeoutMs ?? providerRetrySettings.timeoutMs ?? effectiveTimeoutMs;\n\t\t\tconst websocketConnectTimeoutMs =\n\t\t\t\toptions?.websocketConnectTimeoutMs ?? settingsManager.getWebSocketConnectTimeoutMs();\n\t\t\tconst headerRunner = extensionRunnerRef.current;\n\t\t\t// A provider-declared profile owns the transport retry budget: a disabled\n\t\t\t// providerRequest stage sends 0 so user retry.provider.* cannot hand it a\n\t\t\t// hidden second budget. Providers without a declared profile keep the\n\t\t\t// user's retry.provider.maxRetries transport knob exactly as before.\n\t\t\tconst declaredPolicy = model.provider ? modelRuntime.getProvider(model.provider)?.retryPolicy : undefined;\n\t\t\tconst profileMaxRetries =\n\t\t\t\tdeclaredPolicy === undefined\n\t\t\t\t\t? providerRetrySettings.maxRetries\n\t\t\t\t\t: declaredPolicy.providerRequest.enabled\n\t\t\t\t\t\t? declaredPolicy.providerRequest.maxRetries\n\t\t\t\t\t\t: 0;\n\t\t\treturn modelRuntime.streamSimple(model, context, {\n\t\t\t\t...options,\n\t\t\t\ttimeoutMs,\n\t\t\t\twebsocketConnectTimeoutMs,\n\t\t\t\tmaxRetries: options?.maxRetries ?? profileMaxRetries,\n\t\t\t\tmaxRetryDelayMs: options?.maxRetryDelayMs ?? providerRetrySettings.maxRetryDelayMs,\n\t\t\t\ttransformHeaders: async (requestHeaders) => {\n\t\t\t\t\tconst headers = mergeProviderAttributionHeaders(\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t\tsettingsManager,\n\t\t\t\t\t\toptions?.sessionId,\n\t\t\t\t\t\trequestHeaders,\n\t\t\t\t\t);\n\t\t\t\t\treturn headerRunner?.isActive && headerRunner.hasHandlers(\"before_provider_headers\")\n\t\t\t\t\t\t? headerRunner.emitBeforeProviderHeaders(headers ?? {})\n\t\t\t\t\t\t: (headers ?? {});\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t\tonPayload: async (payload, _model, request) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner?.isActive || !runner.hasHandlers(\"before_provider_request\")) {\n\t\t\t\treturn payload;\n\t\t\t}\n\t\t\treturn runner.emitBeforeProviderRequest(payload, undefined, request);\n\t\t},\n\t\tonResponse: async (response, _model) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner?.isActive || !runner.hasHandlers(\"after_provider_response\")) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait runner.emit({\n\t\t\t\ttype: \"after_provider_response\",\n\t\t\t\tstatus: response.status,\n\t\t\t\theaders: response.headers,\n\t\t\t});\n\t\t},\n\t\tsessionId: sessionManager.getSessionId(),\n\t\ttransformContext: async (messages) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner?.isActive) return messages;\n\t\t\treturn runner.emitContext(messages);\n\t\t},\n\t\tsteeringMode: settingsManager.getSteeringMode(),\n\t\tfollowUpMode: settingsManager.getFollowUpMode(),\n\t\ttransport: settingsManager.getTransport(),\n\t\tthinkingBudgets: settingsManager.getThinkingBudgets(),\n\t\ttimeoutMs: settingsManager.getAgentStreamIdleTimeoutMs(),\n\t\tstreamStartTimeoutMs: settingsManager.getAgentStreamStartTimeoutMs(),\n\t\tmaxRetryDelayMs: settingsManager.getProviderRetrySettings().maxRetryDelayMs,\n\t\tcursorExecHandlers: (runSignal: AbortSignal) =>\n\t\t\tcreateSessionCursorExecBridge(cursorBridgeSessionRef, () => agent, runSignal),\n\t});\n\t// Agent core accepts the field in AgentState but older constructors may not copy it\n\t// from initialState; assign the separately computed provenance explicitly.\n\tagent.state.thinkingSelection = thinkingSelection;\n\n\t// Restore messages if session has existing data\n\tif (hasExistingSession) {\n\t\tagent.state.messages = existingSession.messages;\n\t\tif (!hasThinkingEntry) {\n\t\t\tsessionManager.appendThinkingLevelChange(thinkingLevel, thinkingSelection);\n\t\t}\n\t} else {\n\t\t// Save initial model and thinking level for new sessions so they can be restored on resume\n\t\tif (model) {\n\t\t\tsessionManager.appendModelChange(model.provider, model.id);\n\t\t}\n\t\tsessionManager.appendThinkingLevelChange(thinkingLevel, thinkingSelection);\n\t}\n\n\tconst sessionStartEvent = initialModelProvenance\n\t\t? {\n\t\t\t\t...(options.sessionStartEvent ?? { type: \"session_start\" as const, reason: \"startup\" as const }),\n\t\t\t\tinitialModelProvenance,\n\t\t\t}\n\t\t: options.sessionStartEvent;\n\n\tconst session = new AgentSession({\n\t\tagent,\n\t\tsessionManager,\n\t\tsettingsManager,\n\t\tcwd,\n\t\tagentDir,\n\t\tscopedModels,\n\t\tfavoriteModels,\n\t\tresourceLoader,\n\t\tcustomTools: options.customTools,\n\t\tmodelRuntime,\n\t\tmodelRegistry,\n\t\tinitialActiveToolNames,\n\t\tdefaultToolNames: sessionDefaultToolNames,\n\t\tallowedToolNames,\n\t\texcludedToolNames,\n\t\textensionRunnerRef,\n\t\tsessionStartEvent,\n\t\tautoTitleSessions: options.autoTitleSessions,\n\t});\n\tconst liveContextTokens = hasExistingSession\n\t\t? existingSession.messages.reduce((total, message) => total + estimateTokens(message), 0)\n\t\t: 0;\n\tsession.assertModelUsable(\n\t\tundefined,\n\t\tliveContextTokens,\n\t\thasExistingSession ? { includeSpeculationLead: false, admission: \"resume\" } : { admission: \"start\" },\n\t);\n\tcursorBridgeSessionRef.current = session;\n\tconst extensionsResult = resourceLoader.getExtensions();\n\n\treturn {\n\t\tsession,\n\t\textensionsResult,\n\t\tmodelFallbackMessage,\n\t};\n}\n"]}
1
+ {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["import { join } from \"node:path\";\nimport { Agent, type AgentMessage, setDefaultStreamFn, type ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { ThinkingSelection } from \"@earendil-works/pi-ai\";\nimport { type Api, type Message, type Model, modelsAreEqual, streamSimple } from \"@earendil-works/pi-ai/compat\";\nimport { getAgentDir } from \"../config.ts\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport { AgentSession } from \"./agent-session.ts\";\nimport { formatNoModelsAvailableMessage } from \"./auth-guidance.ts\";\nimport { AuthStorage } from \"./auth-storage.ts\";\nimport { estimateTokens } from \"./compaction/compaction.ts\";\nimport { createSessionCursorExecBridge } from \"./cursor-exec-bridge-session.ts\";\nimport { DEFAULT_THINKING_LEVEL } from \"./defaults.ts\";\nimport { type ServiceTier, supportsServiceTier } from \"./extensions/builtin/service-tier.ts\";\nimport type { ExtensionRunner, LoadExtensionsResult, SessionStartEvent, ToolDefinition } from \"./extensions/index.ts\";\nimport { convertToLlmForTransport, TRANSPORT_IMAGE_BUDGET_BYTES } from \"./messages.ts\";\nimport { ModelRegistry } from \"./model-registry.ts\";\nimport {\n\tfindInitialModel,\n\tgetModelNarrowingPatterns,\n\ttype InitialModelProvenance,\n\tresolveModelScope,\n\tresolveStoredModelReference,\n} from \"./model-resolver.ts\";\nimport { ModelRuntime } from \"./model-runtime.ts\";\nimport { mergeProviderAttributionHeaders } from \"./provider-attribution.ts\";\nimport type { ResourceLoader } from \"./resource-loader.ts\";\nimport { DefaultResourceLoader } from \"./resource-loader.ts\";\nimport { getDefaultSessionDir, SessionManager } from \"./session-manager.ts\";\nimport { SettingsManager } from \"./settings-manager.ts\";\nimport { getSupportedThinkingLevels } from \"./thinking-levels.ts\";\nimport { time } from \"./timings.ts\";\nimport {\n\tcreateBashTool,\n\tcreateCodingTools,\n\tcreateEditTool,\n\tcreateFindTool,\n\tcreateGrepTool,\n\tcreateLsTool,\n\tcreatePowerShellTool,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateWriteTool,\n\ttype ToolName,\n\twithFileMutationQueue,\n} from \"./tools/index.ts\";\n\n// Preserve the pre-0.81 fallback for extensions that construct Agent instances\n// or invoke low-level agent loops without supplying streamFn. Agent core remains\n// provider-agnostic and does not import pi-ai/compat itself.\nsetDefaultStreamFn(streamSimple);\n\nexport interface CreateAgentSessionOptions {\n\t/** Working directory for project-local discovery. Default: process.cwd() */\n\tcwd?: string;\n\t/** Global config directory. Default: ~/.pi/agent */\n\tagentDir?: string;\n\n\t/** Canonical model/auth runtime. Defaults to a runtime using agentDir/auth.json and models.json. */\n\tmodelRuntime?: ModelRuntime;\n\t/** Legacy credential facade retained for SDK compatibility. */\n\tauthStorage?: AuthStorage;\n\t/** Legacy model facade retained for SDK compatibility. */\n\tmodelRegistry?: ModelRegistry;\n\n\t/** Model to use. Default: from settings, else first available */\n\tmodel?: Model<any>;\n\t/** Provenance for an explicitly supplied initial model. Omit to leave external SDK model selection untouched. */\n\tinitialModelProvenance?: InitialModelProvenance;\n\t/** Thinking level. Default: from settings, else 'medium' (clamped to model capabilities) */\n\tthinkingLevel?: ThinkingLevel;\n\t/** Provenance for a pre-resolved CLI/scoped/legacy selector. */\n\tthinkingSelection?: ThinkingSelection;\n\t/** Models available for cycling (Ctrl+P in interactive mode) */\n\tscopedModels?: Array<{\n\t\tmodel: Model<any>;\n\t\tthinkingLevel?: ThinkingLevel;\n\t\tthinkingSelection?: ThinkingSelection;\n\t\tserviceTier?: ServiceTier;\n\t}>;\n\t/** Favorite models for Ctrl+P cycling. */\n\tfavoriteModels?: Array<{\n\t\tmodel: Model<any>;\n\t\tthinkingLevel?: ThinkingLevel;\n\t\tthinkingSelection?: ThinkingSelection;\n\t\tserviceTier?: ServiceTier;\n\t}>;\n\n\t/**\n\t * Optional default tool suppression mode when no explicit allowlist is provided.\n\t *\n\t * - \"all\": start with no tools enabled\n\t * - \"builtin\": disable the default built-in tools (read, bash, edit, write)\n\t * but keep extension/custom tools enabled\n\t */\n\tnoTools?: \"all\" | \"builtin\";\n\t/**\n\t * Optional allowlist of tool names.\n\t *\n\t * When omitted, pi uses the `defaultTools` setting for the initial built-in\n\t * selection when configured. Otherwise it enables the default built-in tools\n\t * (read, bash, edit, write). Extension/custom tools remain enabled unless\n\t * `noTools` changes that default. When provided, only the listed tool names are\n\t * enabled.\n\t */\n\ttools?: string[];\n\t/** Optional denylist of tool names to disable. Applies after `tools` when both are provided. */\n\texcludeTools?: string[];\n\t/** Custom tools to register (in addition to built-in tools). */\n\tcustomTools?: ToolDefinition[];\n\n\t/** Resource loader. When omitted, DefaultResourceLoader is used. */\n\tresourceLoader?: ResourceLoader;\n\n\t/** Session manager. Default: SessionManager.create(cwd) */\n\tsessionManager?: SessionManager;\n\n\t/** Settings manager. Default: SettingsManager.create(cwd, agentDir) */\n\tsettingsManager?: SettingsManager;\n\t/** Session start event metadata for extension runtime startup. */\n\tsessionStartEvent?: SessionStartEvent;\n\t/** Generate a session title after the first successful turn. */\n\tautoTitleSessions?: boolean;\n}\n\n/** Result from createAgentSession */\nexport interface CreateAgentSessionResult {\n\t/** The created session */\n\tsession: AgentSession;\n\t/** Extensions result (for UI context setup in interactive mode) */\n\textensionsResult: LoadExtensionsResult;\n\t/** Warning if session was restored with a different model than saved */\n\tmodelFallbackMessage?: string;\n}\n\n// Re-exports\n\nexport * from \"./agent-session-runtime.ts\";\nexport type {\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionContext,\n\tExtensionFactory,\n\tInlineExtension,\n\tSlashCommandInfo,\n\tSlashCommandSource,\n\tToolDefinition,\n} from \"./extensions/index.ts\";\nexport type { PromptTemplate } from \"./prompt-templates.ts\";\nexport type { Skill } from \"./skills.ts\";\nexport type { Tool } from \"./tools/index.ts\";\n\nexport {\n\tcreateBashTool,\n\t// Tool factories (for custom cwd)\n\tcreateCodingTools,\n\tcreateEditTool,\n\tcreateFindTool,\n\tcreateGrepTool,\n\tcreateLsTool,\n\tcreatePowerShellTool,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateWriteTool,\n\twithFileMutationQueue,\n};\n\nexport function clampThinkingLevelToModel(\n\tlevel: ThinkingLevel | undefined,\n\tmodel: Model<any> | undefined,\n): ThinkingLevel {\n\tif (!model?.reasoning) return \"off\";\n\tconst requested = level ?? \"off\";\n\tconst available = getSupportedThinkingLevels(model);\n\tif (available.includes(requested)) return requested;\n\tconst ordered: ThinkingLevel[] = [\"off\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"];\n\tconst requestedIndex = ordered.indexOf(requested);\n\tfor (let index = requestedIndex - 1; index >= 0; index--) {\n\t\tconst candidate = ordered[index];\n\t\tif (candidate !== undefined && available.includes(candidate)) return candidate;\n\t}\n\tfor (let index = requestedIndex + 1; index < ordered.length; index++) {\n\t\tconst candidate = ordered[index];\n\t\tif (candidate !== undefined && available.includes(candidate)) return candidate;\n\t}\n\treturn available[0] ?? \"off\";\n}\n\n// Helper Functions\n\nfunction getDefaultAgentDir(): string {\n\treturn getAgentDir();\n}\n\n/**\n * Create an AgentSession with the specified options.\n *\n * @example\n * ```typescript\n * // Minimal - uses defaults\n * const { session } = await createAgentSession();\n *\n * // With explicit model\n * import { getModel } from '@earendil-works/pi-ai';\n * const { session } = await createAgentSession({\n * model: getModel('anthropic', 'claude-opus-4-5'),\n * thinkingLevel: 'high',\n * });\n *\n * // Continue previous session\n * const { session, modelFallbackMessage } = await createAgentSession({\n * continueSession: true,\n * });\n *\n * // Full control\n * const loader = new DefaultResourceLoader({\n * cwd: process.cwd(),\n * agentDir: getAgentDir(),\n * settingsManager: SettingsManager.create(),\n * });\n * await loader.reload();\n * const { session } = await createAgentSession({\n * model: myModel,\n * tools: [\"read\", \"bash\"],\n * resourceLoader: loader,\n * sessionManager: SessionManager.inMemory(),\n * });\n * ```\n */\nexport async function createAgentSession(options: CreateAgentSessionOptions = {}): Promise<CreateAgentSessionResult> {\n\tconst cwd = resolvePath(options.cwd ?? options.sessionManager?.getCwd() ?? process.cwd());\n\tconst agentDir = options.agentDir ? resolvePath(options.agentDir) : getDefaultAgentDir();\n\tlet resourceLoader = options.resourceLoader;\n\n\tconst authPath = options.agentDir ? join(agentDir, \"auth.json\") : undefined;\n\tconst modelsPath = options.agentDir ? join(agentDir, \"models.json\") : undefined;\n\tconst authStorage = options.authStorage ?? options.modelRegistry?.authStorage ?? AuthStorage.create(authPath);\n\tconst modelRuntime =\n\t\toptions.modelRuntime ??\n\t\toptions.modelRegistry?.modelRuntime ??\n\t\t(await ModelRuntime.create({ credentials: authStorage, modelsPath, agentDir }));\n\tconst modelRegistry = options.modelRegistry ?? new ModelRegistry(modelRuntime, authStorage);\n\n\tconst settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n\tconst sessionManager = options.sessionManager ?? SessionManager.create(cwd, getDefaultSessionDir(cwd, agentDir));\n\tconst scopedModels =\n\t\toptions.scopedModels ??\n\t\t(await resolveModelScope(\n\t\t\tgetModelNarrowingPatterns({ legacyEnabledPatterns: settingsManager.getEnabledModels() }),\n\t\t\tmodelRuntime,\n\t\t));\n\tconst favoriteModels =\n\t\toptions.favoriteModels ?? (await resolveModelScope(settingsManager.getFavoriteModels() ?? [], modelRuntime));\n\n\tif (!resourceLoader) {\n\t\tresourceLoader = new DefaultResourceLoader({ cwd, agentDir, settingsManager });\n\t\tawait resourceLoader.reload();\n\t\ttime(\"resourceLoader.reload\");\n\t}\n\n\t// Check if session has existing data to restore\n\tconst existingSession = sessionManager.buildSessionContext();\n\tconst hasExistingSession = existingSession.messages.length > 0;\n\tconst hasThinkingEntry = sessionManager.getBranch().some((entry) => entry.type === \"thinking_level_change\");\n\n\tlet model = options.model;\n\tlet initialModelProvenance = options.initialModelProvenance;\n\tlet initialResolvedThinkingLevel: ThinkingLevel | undefined;\n\tlet initialThinkingSelection = options.thinkingSelection;\n\tlet modelFallbackMessage: string | undefined;\n\n\tif (model) {\n\t\tconst resolved = resolveStoredModelReference(model.provider, model.id, modelRuntime);\n\t\tif (resolved?.thinkingSelection) {\n\t\t\tmodel = resolved.model;\n\t\t\tinitialResolvedThinkingLevel = resolved.thinkingLevel;\n\t\t\tinitialThinkingSelection ??= resolved.thinkingSelection;\n\t\t}\n\t}\n\n\t// If session has data, try to restore model from it\n\tif (!model && hasExistingSession && existingSession.model) {\n\t\tconst restored = resolveStoredModelReference(\n\t\t\texistingSession.model.provider,\n\t\t\texistingSession.model.modelId,\n\t\t\tmodelRuntime,\n\t\t);\n\t\tif (restored && modelRuntime.hasConfiguredAuth(restored.model.provider)) {\n\t\t\tmodel = restored.model;\n\t\t\tinitialResolvedThinkingLevel = restored.thinkingLevel;\n\t\t\tinitialThinkingSelection = restored.thinkingSelection;\n\t\t}\n\t\tif (!model) {\n\t\t\tmodelFallbackMessage = `Could not restore model ${existingSession.model.provider}/${existingSession.model.modelId}`;\n\t\t}\n\t}\n\n\t// If still no model, use findInitialModel (checks settings default, then provider defaults)\n\tif (!model) {\n\t\tconst result = await findInitialModel({\n\t\t\tscopedModels,\n\t\t\tisContinuing: hasExistingSession,\n\t\t\tdefaultProvider: settingsManager.getDefaultProvider(),\n\t\t\tdefaultModelId: settingsManager.getDefaultModel(),\n\t\t\tdefaultThinkingLevel: settingsManager.getDefaultThinkingLevel(),\n\t\t\tmodelThinkingLevels: settingsManager.getAllModelThinkingLevels(),\n\t\t\tmodelRuntime,\n\t\t});\n\t\tmodel = result.model;\n\t\tinitialModelProvenance = result.provenance;\n\t\tconst selectedModel = model;\n\t\tconst scopedSelection = selectedModel\n\t\t\t? scopedModels.find(\n\t\t\t\t\t(entry) => entry.model.provider === selectedModel.provider && entry.model.id === selectedModel.id,\n\t\t\t\t)\n\t\t\t: undefined;\n\t\tinitialResolvedThinkingLevel = scopedSelection?.thinkingLevel ?? result.thinkingLevel;\n\t\tinitialThinkingSelection = scopedSelection?.thinkingSelection ?? result.thinkingSelection;\n\t\tif (!model) {\n\t\t\tmodelFallbackMessage = formatNoModelsAvailableMessage();\n\t\t} else if (modelFallbackMessage) {\n\t\t\tmodelFallbackMessage += `. Using ${model.provider}/${model.id}`;\n\t\t}\n\t}\n\n\tlet thinkingLevel = options.thinkingLevel ?? initialResolvedThinkingLevel;\n\tlet thinkingSelection =\n\t\toptions.thinkingSelection ??\n\t\t(options.thinkingLevel !== undefined\n\t\t\t? { level: options.thinkingLevel, source: \"explicit\" as const }\n\t\t\t: undefined) ??\n\t\tinitialThinkingSelection;\n\n\t// An exact-session thinking entry wins over settings unless a real legacy alias already\n\t// selected a level. Old entries have no provenance, including Cursor's synthetic off.\n\tif (thinkingLevel === undefined && hasExistingSession && hasThinkingEntry) {\n\t\tthinkingLevel = existingSession.thinkingLevel as ThinkingLevel;\n\t\tthinkingSelection = existingSession.thinkingSelection;\n\t}\n\tif (thinkingLevel === undefined && model) {\n\t\tconst remembered = settingsManager.getModelThinkingLevel(model.provider, model.id);\n\t\tif (remembered !== undefined) {\n\t\t\tthinkingLevel = remembered;\n\t\t\tthinkingSelection = { level: remembered, source: \"explicit\" };\n\t\t}\n\t}\n\tif (thinkingLevel === undefined) {\n\t\tconst configuredDefault = settingsManager.getDefaultThinkingLevel();\n\t\tif (configuredDefault !== undefined) {\n\t\t\tthinkingLevel = configuredDefault;\n\t\t\tthinkingSelection = { level: configuredDefault, source: \"explicit\" };\n\t\t} else {\n\t\t\tthinkingLevel = DEFAULT_THINKING_LEVEL;\n\t\t}\n\t}\n\n\t// Clamp to model capabilities without inventing provenance for a defaulted level.\n\tif (!model) {\n\t\tthinkingLevel = \"off\";\n\t} else {\n\t\tthinkingLevel = clampThinkingLevelToModel(thinkingLevel, model);\n\t}\n\tif (thinkingSelection) thinkingSelection = { ...thinkingSelection, level: thinkingLevel };\n\n\tconst defaultActiveToolNames: ToolName[] = [\"read\", \"bash\", \"edit\", \"write\"];\n\tconst configuredDefaultToolNames = settingsManager.getDefaultTools();\n\tconst sessionDefaultToolNames =\n\t\toptions.tools === undefined && options.noTools === undefined ? configuredDefaultToolNames : undefined;\n\tconst allowedToolNames = options.tools ?? (options.noTools === \"all\" ? [] : undefined);\n\tconst excludedToolNames = options.excludeTools;\n\tconst excludedToolNameSet = excludedToolNames ? new Set(excludedToolNames) : undefined;\n\tconst initialActiveToolNames = (\n\t\toptions.tools ?? (options.noTools ? [] : (configuredDefaultToolNames ?? defaultActiveToolNames))\n\t).filter((name) => !excludedToolNameSet?.has(name));\n\n\tlet agent: Agent;\n\tconst reasoningBaseline = existingSession.configurationUpdate\n\t\t? (sessionManager.getBranch().find((entry) => entry.type === \"thinking_level_change\")?.thinkingLevel ??\n\t\t\tthinkingLevel)\n\t\t: undefined;\n\n\t// Read blockImages per request so a mid-session settings change takes effect.\n\tconst convertToLlmWithBlockImages = (messages: AgentMessage[]): Message[] =>\n\t\tconvertToLlmForTransport(messages, {\n\t\t\tblockImages: settingsManager.getBlockImages(),\n\t\t\tbudgetBytes: TRANSPORT_IMAGE_BUDGET_BYTES,\n\t\t\talwaysKeepNewest: 1,\n\t\t\tmaxHistoricalImages: settingsManager.getMaxHistoricalImages(),\n\t\t});\n\n\tconst extensionRunnerRef: { current?: ExtensionRunner } = {};\n\t// The session (and its tool registry) is constructed after the Agent, so the Cursor exec\n\t// bridge and the request-tier resolver below reach it through this late-bound ref.\n\tconst sessionRef: { current?: AgentSession } = {};\n\n\t// The `service_tier` a request carries when the caller did not pin one. The session's\n\t// effective tier is the single source: a `-fast` catalog variant, a scoped `:priority` pin, or\n\t// session fast mode all land here, so an SDK/embedded session honors the tier without the\n\t// interactive service-tier extension being loaded (its payload hook only fills a missing\n\t// field and stays consistent). A request for another model (title/branch summaries) falls\n\t// back to that model's own catalog tier. Only the OpenAI Responses family accepts the field.\n\tconst resolveRequestServiceTier = (requestModel: Model<Api>): ServiceTier | undefined => {\n\t\tif (!supportsServiceTier(requestModel.api)) return undefined;\n\t\tconst session = sessionRef.current;\n\t\tconst activeModel = session?.model;\n\t\tif (session && activeModel && modelsAreEqual(activeModel, requestModel)) {\n\t\t\treturn session.effectiveServiceTier;\n\t\t}\n\t\treturn modelRuntime.getCompatibilityRequestConfig(requestModel).serviceTier;\n\t};\n\n\tagent = new Agent({\n\t\tinitialState: {\n\t\t\tsystemPrompt: \"\",\n\t\t\tmodel,\n\t\t\tthinkingLevel,\n\t\t\tthinkingSelection,\n\t\t\treasoningBaseline,\n\t\t\ttools: [],\n\t\t},\n\t\tconvertToLlm: convertToLlmWithBlockImages,\n\t\tstreamFn: async (model, context, options) => {\n\t\t\tconst providerRetrySettings = settingsManager.getProviderRetrySettings();\n\t\t\tconst httpIdleTimeoutMs = settingsManager.getHttpIdleTimeoutMs();\n\t\t\t// SDKs treat timeout=0 as 0ms (immediate timeout), not \"no timeout\".\n\t\t\t// Use max int32 to effectively disable the timeout.\n\t\t\tconst effectiveTimeoutMs = httpIdleTimeoutMs === 0 ? 2147483647 : httpIdleTimeoutMs;\n\t\t\tconst timeoutMs = options?.timeoutMs ?? providerRetrySettings.timeoutMs ?? effectiveTimeoutMs;\n\t\t\tconst websocketConnectTimeoutMs =\n\t\t\t\toptions?.websocketConnectTimeoutMs ?? settingsManager.getWebSocketConnectTimeoutMs();\n\t\t\tconst headerRunner = extensionRunnerRef.current;\n\t\t\t// A provider-declared profile owns the transport retry budget: a disabled\n\t\t\t// providerRequest stage sends 0 so user retry.provider.* cannot hand it a\n\t\t\t// hidden second budget. Providers without a declared profile keep the\n\t\t\t// user's retry.provider.maxRetries transport knob exactly as before.\n\t\t\tconst declaredPolicy = model.provider ? modelRuntime.getProvider(model.provider)?.retryPolicy : undefined;\n\t\t\tconst profileMaxRetries =\n\t\t\t\tdeclaredPolicy === undefined\n\t\t\t\t\t? providerRetrySettings.maxRetries\n\t\t\t\t\t: declaredPolicy.providerRequest.enabled\n\t\t\t\t\t\t? declaredPolicy.providerRequest.maxRetries\n\t\t\t\t\t\t: 0;\n\t\t\tconst serviceTier = options?.serviceTier ?? resolveRequestServiceTier(model);\n\t\t\treturn modelRuntime.streamSimple(model, context, {\n\t\t\t\t...options,\n\t\t\t\t...(serviceTier !== undefined ? { serviceTier } : {}),\n\t\t\t\ttimeoutMs,\n\t\t\t\twebsocketConnectTimeoutMs,\n\t\t\t\tmaxRetries: options?.maxRetries ?? profileMaxRetries,\n\t\t\t\tmaxRetryDelayMs: options?.maxRetryDelayMs ?? providerRetrySettings.maxRetryDelayMs,\n\t\t\t\ttransformHeaders: async (requestHeaders) => {\n\t\t\t\t\tconst headers = mergeProviderAttributionHeaders(\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t\tsettingsManager,\n\t\t\t\t\t\toptions?.sessionId,\n\t\t\t\t\t\trequestHeaders,\n\t\t\t\t\t);\n\t\t\t\t\treturn headerRunner?.isActive && headerRunner.hasHandlers(\"before_provider_headers\")\n\t\t\t\t\t\t? headerRunner.emitBeforeProviderHeaders(headers ?? {})\n\t\t\t\t\t\t: (headers ?? {});\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t\tonPayload: async (payload, _model, request) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner?.isActive || !runner.hasHandlers(\"before_provider_request\")) {\n\t\t\t\treturn payload;\n\t\t\t}\n\t\t\treturn runner.emitBeforeProviderRequest(payload, undefined, request);\n\t\t},\n\t\tonResponse: async (response, _model) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner?.isActive || !runner.hasHandlers(\"after_provider_response\")) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait runner.emit({\n\t\t\t\ttype: \"after_provider_response\",\n\t\t\t\tstatus: response.status,\n\t\t\t\theaders: response.headers,\n\t\t\t});\n\t\t},\n\t\tsessionId: sessionManager.getSessionId(),\n\t\ttransformContext: async (messages) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner?.isActive) return messages;\n\t\t\treturn runner.emitContext(messages);\n\t\t},\n\t\tsteeringMode: settingsManager.getSteeringMode(),\n\t\tfollowUpMode: settingsManager.getFollowUpMode(),\n\t\ttransport: settingsManager.getTransport(),\n\t\tthinkingBudgets: settingsManager.getThinkingBudgets(),\n\t\ttimeoutMs: settingsManager.getAgentStreamIdleTimeoutMs(),\n\t\tstreamStartTimeoutMs: settingsManager.getAgentStreamStartTimeoutMs(),\n\t\tmaxRetryDelayMs: settingsManager.getProviderRetrySettings().maxRetryDelayMs,\n\t\tcursorExecHandlers: (runSignal: AbortSignal) => createSessionCursorExecBridge(sessionRef, () => agent, runSignal),\n\t});\n\t// Agent core accepts the field in AgentState but older constructors may not copy it\n\t// from initialState; assign the separately computed provenance explicitly.\n\tagent.state.thinkingSelection = thinkingSelection;\n\n\t// Restore messages if session has existing data\n\tif (hasExistingSession) {\n\t\tagent.state.messages = existingSession.messages;\n\t\tif (!hasThinkingEntry) {\n\t\t\tsessionManager.appendThinkingLevelChange(thinkingLevel, thinkingSelection);\n\t\t}\n\t} else {\n\t\t// Save initial model and thinking level for new sessions so they can be restored on resume\n\t\tif (model) {\n\t\t\tsessionManager.appendModelChange(model.provider, model.id);\n\t\t}\n\t\tsessionManager.appendThinkingLevelChange(thinkingLevel, thinkingSelection);\n\t}\n\n\tconst sessionStartEvent = initialModelProvenance\n\t\t? {\n\t\t\t\t...(options.sessionStartEvent ?? { type: \"session_start\" as const, reason: \"startup\" as const }),\n\t\t\t\tinitialModelProvenance,\n\t\t\t}\n\t\t: options.sessionStartEvent;\n\n\tconst session = new AgentSession({\n\t\tagent,\n\t\tsessionManager,\n\t\tsettingsManager,\n\t\tcwd,\n\t\tagentDir,\n\t\tscopedModels,\n\t\tfavoriteModels,\n\t\tresourceLoader,\n\t\tcustomTools: options.customTools,\n\t\tmodelRuntime,\n\t\tmodelRegistry,\n\t\tinitialActiveToolNames,\n\t\tdefaultToolNames: sessionDefaultToolNames,\n\t\tallowedToolNames,\n\t\texcludedToolNames,\n\t\textensionRunnerRef,\n\t\tsessionStartEvent,\n\t\tautoTitleSessions: options.autoTitleSessions,\n\t});\n\tconst liveContextTokens = hasExistingSession\n\t\t? existingSession.messages.reduce((total, message) => total + estimateTokens(message), 0)\n\t\t: 0;\n\tsession.assertModelUsable(\n\t\tundefined,\n\t\tliveContextTokens,\n\t\thasExistingSession ? { includeSpeculationLead: false, admission: \"resume\" } : { admission: \"start\" },\n\t);\n\tsessionRef.current = session;\n\tconst extensionsResult = resourceLoader.getExtensions();\n\n\treturn {\n\t\tsession,\n\t\textensionsResult,\n\t\tmodelFallbackMessage,\n\t};\n}\n"]}
@@ -498,7 +498,7 @@ export class SettingsManager {
498
498
  getPromptCacheGoalBackstopMaxSeconds() {
499
499
  return (this.projectSettings.promptCache?.goalBackstopMaxSeconds ??
500
500
  this.globalSettings.promptCache?.goalBackstopMaxSeconds ??
501
- 3570);
501
+ 270);
502
502
  }
503
503
  getPromptCacheKeepAliveSettings() {
504
504
  const configured = this.settings.promptCache?.keepAlive;