@code-yeongyu/senpi 2026.9.9 → 2026.9.10

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 (1065) hide show
  1. package/CHANGELOG.md +82 -1
  2. package/README.md +2 -0
  3. package/dist/beta/omo-local-update-worker.js.map +1 -1
  4. package/dist/beta/omo-local-update.d.ts.map +1 -1
  5. package/dist/brand-dir-migration.js.map +1 -1
  6. package/dist/cli/args.d.ts.map +1 -1
  7. package/dist/cli/args.js +1 -0
  8. package/dist/cli/args.js.map +1 -1
  9. package/dist/cli/auth-check.js.map +1 -1
  10. package/dist/cli/experimental/command.d.ts.map +1 -1
  11. package/dist/cli/grok-neo-gate.js.map +1 -1
  12. package/dist/cli/startup-ui.js.map +1 -1
  13. package/dist/cli.js.map +1 -1
  14. package/dist/client/remote-session.d.ts.map +1 -1
  15. package/dist/client/remote-session.js.map +1 -1
  16. package/dist/config.d.ts.map +1 -1
  17. package/dist/config.js +43 -19
  18. package/dist/config.js.map +1 -1
  19. package/dist/core/agent-abort-provenance.d.ts.map +1 -1
  20. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  21. package/dist/core/agent-session-runtime.js.map +1 -1
  22. package/dist/core/agent-session.d.ts +46 -7
  23. package/dist/core/agent-session.d.ts.map +1 -1
  24. package/dist/core/agent-session.js +109 -6
  25. package/dist/core/agent-session.js.map +1 -1
  26. package/dist/core/agent-settled-delivery.d.ts.map +1 -1
  27. package/dist/core/auth-providers.js.map +1 -1
  28. package/dist/core/auth-storage.d.ts.map +1 -1
  29. package/dist/core/auth-storage.js.map +1 -1
  30. package/dist/core/brand.js.map +1 -1
  31. package/dist/core/compaction/branch-summarization.js.map +1 -1
  32. package/dist/core/compaction/compaction.js.map +1 -1
  33. package/dist/core/compaction/lifecycle.d.ts.map +1 -1
  34. package/dist/core/compaction/stream-watchdog.d.ts.map +1 -1
  35. package/dist/core/compaction/utils.js.map +1 -1
  36. package/dist/core/credential-accounts.js.map +1 -1
  37. package/dist/core/credential-pool/classify.js.map +1 -1
  38. package/dist/core/credential-pool/failover.d.ts.map +1 -1
  39. package/dist/core/credential-pool/rotation-stream.js.map +1 -1
  40. package/dist/core/credential-pool/state-store.d.ts +2 -2
  41. package/dist/core/credential-pool/state-store.d.ts.map +1 -1
  42. package/dist/core/credential-pool/state-store.js.map +1 -1
  43. package/dist/core/dynamic-prompt/verification.d.ts.map +1 -1
  44. package/dist/core/edited-assistant-message.d.ts +24 -0
  45. package/dist/core/edited-assistant-message.d.ts.map +1 -0
  46. package/dist/core/edited-assistant-message.js +57 -0
  47. package/dist/core/edited-assistant-message.js.map +1 -0
  48. package/dist/core/experimental.d.ts.map +1 -1
  49. package/dist/core/extensions/builtin/ask-user/extension.d.ts +3 -0
  50. package/dist/core/extensions/builtin/ask-user/extension.d.ts.map +1 -0
  51. package/dist/core/extensions/builtin/ask-user/extension.js +47 -0
  52. package/dist/core/extensions/builtin/ask-user/extension.js.map +1 -0
  53. package/dist/core/extensions/builtin/ask-user/family.d.ts +8 -0
  54. package/dist/core/extensions/builtin/ask-user/family.d.ts.map +1 -0
  55. package/dist/core/extensions/builtin/ask-user/family.js +6 -0
  56. package/dist/core/extensions/builtin/ask-user/family.js.map +1 -0
  57. package/dist/core/extensions/builtin/ask-user/format.d.ts +22 -0
  58. package/dist/core/extensions/builtin/ask-user/format.d.ts.map +1 -0
  59. package/dist/core/extensions/builtin/ask-user/format.js +109 -0
  60. package/dist/core/extensions/builtin/ask-user/format.js.map +1 -0
  61. package/dist/core/extensions/builtin/ask-user/index.d.ts +4 -0
  62. package/dist/core/extensions/builtin/ask-user/index.d.ts.map +1 -0
  63. package/dist/core/extensions/builtin/ask-user/index.js +4 -0
  64. package/dist/core/extensions/builtin/ask-user/index.js.map +1 -0
  65. package/dist/core/extensions/builtin/ask-user/params.d.ts +27 -0
  66. package/dist/core/extensions/builtin/ask-user/params.d.ts.map +1 -0
  67. package/dist/core/extensions/builtin/ask-user/params.js +78 -0
  68. package/dist/core/extensions/builtin/ask-user/params.js.map +1 -0
  69. package/dist/core/extensions/builtin/ask-user/pending.d.ts +58 -0
  70. package/dist/core/extensions/builtin/ask-user/pending.d.ts.map +1 -0
  71. package/dist/core/extensions/builtin/ask-user/pending.js +130 -0
  72. package/dist/core/extensions/builtin/ask-user/pending.js.map +1 -0
  73. package/dist/core/extensions/builtin/ask-user/registry.d.ts +21 -0
  74. package/dist/core/extensions/builtin/ask-user/registry.d.ts.map +1 -0
  75. package/dist/core/extensions/builtin/ask-user/registry.js +20 -0
  76. package/dist/core/extensions/builtin/ask-user/registry.js.map +1 -0
  77. package/dist/core/extensions/builtin/ask-user/render.d.ts +4 -0
  78. package/dist/core/extensions/builtin/ask-user/render.d.ts.map +1 -0
  79. package/dist/core/extensions/builtin/ask-user/render.js +25 -0
  80. package/dist/core/extensions/builtin/ask-user/render.js.map +1 -0
  81. package/dist/core/extensions/builtin/ask-user/resume.d.ts +4 -0
  82. package/dist/core/extensions/builtin/ask-user/resume.d.ts.map +1 -0
  83. package/dist/core/extensions/builtin/ask-user/resume.js +85 -0
  84. package/dist/core/extensions/builtin/ask-user/resume.js.map +1 -0
  85. package/dist/core/extensions/builtin/ask-user/schema.d.ts +40 -0
  86. package/dist/core/extensions/builtin/ask-user/schema.d.ts.map +1 -0
  87. package/dist/core/extensions/builtin/ask-user/schema.js +102 -0
  88. package/dist/core/extensions/builtin/ask-user/schema.js.map +1 -0
  89. package/dist/core/extensions/builtin/ask-user/tool.d.ts +8 -0
  90. package/dist/core/extensions/builtin/ask-user/tool.d.ts.map +1 -0
  91. package/dist/core/extensions/builtin/ask-user/tool.js +195 -0
  92. package/dist/core/extensions/builtin/ask-user/tool.js.map +1 -0
  93. package/dist/core/extensions/builtin/bash-timeout/timeout.js.map +1 -1
  94. package/dist/core/extensions/builtin/btw/panel.d.ts.map +1 -1
  95. package/dist/core/extensions/builtin/btw/side-query.js.map +1 -1
  96. package/dist/core/extensions/builtin/cache-keepalive/index.d.ts.map +1 -1
  97. package/dist/core/extensions/builtin/cache-keepalive/index.js.map +1 -1
  98. package/dist/core/extensions/builtin/claude-sdk-oauth/account-command.js.map +1 -1
  99. package/dist/core/extensions/builtin/claude-sdk-oauth/account-management.js.map +1 -1
  100. package/dist/core/extensions/builtin/claude-sdk-oauth/accounts.d.ts.map +1 -1
  101. package/dist/core/extensions/builtin/claude-sdk-oauth/accounts.js.map +1 -1
  102. package/dist/core/extensions/builtin/claude-sdk-oauth/affinity.d.ts.map +1 -1
  103. package/dist/core/extensions/builtin/claude-sdk-oauth/affinity.js.map +1 -1
  104. package/dist/core/extensions/builtin/claude-sdk-oauth/availability.d.ts +11 -0
  105. package/dist/core/extensions/builtin/claude-sdk-oauth/availability.d.ts.map +1 -1
  106. package/dist/core/extensions/builtin/claude-sdk-oauth/availability.js +12 -1
  107. package/dist/core/extensions/builtin/claude-sdk-oauth/availability.js.map +1 -1
  108. package/dist/core/extensions/builtin/claude-sdk-oauth/bounded-queue.d.ts.map +1 -1
  109. package/dist/core/extensions/builtin/claude-sdk-oauth/custom-tools.d.ts.map +1 -1
  110. package/dist/core/extensions/builtin/claude-sdk-oauth/errors.d.ts.map +1 -1
  111. package/dist/core/extensions/builtin/claude-sdk-oauth/executable-path-lookup.d.ts +14 -0
  112. package/dist/core/extensions/builtin/claude-sdk-oauth/executable-path-lookup.d.ts.map +1 -0
  113. package/dist/core/extensions/builtin/claude-sdk-oauth/executable-path-lookup.js +42 -0
  114. package/dist/core/extensions/builtin/claude-sdk-oauth/executable-path-lookup.js.map +1 -0
  115. package/dist/core/extensions/builtin/claude-sdk-oauth/executable.d.ts +18 -0
  116. package/dist/core/extensions/builtin/claude-sdk-oauth/executable.d.ts.map +1 -1
  117. package/dist/core/extensions/builtin/claude-sdk-oauth/executable.js +105 -36
  118. package/dist/core/extensions/builtin/claude-sdk-oauth/executable.js.map +1 -1
  119. package/dist/core/extensions/builtin/claude-sdk-oauth/failover.d.ts.map +1 -1
  120. package/dist/core/extensions/builtin/claude-sdk-oauth/index.js.map +1 -1
  121. package/dist/core/extensions/builtin/claude-sdk-oauth/refusal.d.ts.map +1 -1
  122. package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.d.ts.map +1 -1
  123. package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.d.ts.map +1 -1
  124. package/dist/core/extensions/builtin/claude-sdk-oauth/session-commit-boundary.d.ts.map +1 -1
  125. package/dist/core/extensions/builtin/claude-sdk-oauth/session-reaper.d.ts.map +1 -1
  126. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-pump.d.ts.map +1 -1
  127. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-pump.js.map +1 -1
  128. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-state.d.ts.map +1 -1
  129. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.d.ts.map +1 -1
  130. package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.d.ts.map +1 -1
  131. package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.js +4 -1
  132. package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.js.map +1 -1
  133. package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.js.map +1 -1
  134. package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-attempt.d.ts.map +1 -1
  135. package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-types.d.ts.map +1 -1
  136. package/dist/core/extensions/builtin/claude-sdk-oauth/settings.js.map +1 -1
  137. package/dist/core/extensions/builtin/claude-sdk-oauth/stream-protocol.d.ts +1 -1
  138. package/dist/core/extensions/builtin/claude-sdk-oauth/tool-watch.js.map +1 -1
  139. package/dist/core/extensions/builtin/claude-sdk-oauth/tools.d.ts.map +1 -1
  140. package/dist/core/extensions/builtin/compaction/context-reduction.js.map +1 -1
  141. package/dist/core/extensions/builtin/compaction/deterministic-fallback.js.map +1 -1
  142. package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
  143. package/dist/core/extensions/builtin/compaction/lane-policy.js.map +1 -1
  144. package/dist/core/extensions/builtin/compaction/log.js.map +1 -1
  145. package/dist/core/extensions/builtin/compaction/model-usability-budget.d.ts.map +1 -1
  146. package/dist/core/extensions/builtin/compaction/openai-remote-convert.js.map +1 -1
  147. package/dist/core/extensions/builtin/compaction/openai-remote.js.map +1 -1
  148. package/dist/core/extensions/builtin/compaction/overflow-retry.d.ts.map +1 -1
  149. package/dist/core/extensions/builtin/compaction/resume-admission.d.ts +7 -0
  150. package/dist/core/extensions/builtin/compaction/resume-admission.d.ts.map +1 -0
  151. package/dist/core/extensions/builtin/compaction/resume-admission.js +7 -0
  152. package/dist/core/extensions/builtin/compaction/resume-admission.js.map +1 -0
  153. package/dist/core/extensions/builtin/compaction/resume-slice.d.ts +23 -0
  154. package/dist/core/extensions/builtin/compaction/resume-slice.d.ts.map +1 -0
  155. package/dist/core/extensions/builtin/compaction/resume-slice.js +99 -0
  156. package/dist/core/extensions/builtin/compaction/resume-slice.js.map +1 -0
  157. package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
  158. package/dist/core/extensions/builtin/compaction/summarization-retry.js.map +1 -1
  159. package/dist/core/extensions/builtin/config-reload/index.d.ts.map +1 -1
  160. package/dist/core/extensions/builtin/config-reload/index.js.map +1 -1
  161. package/dist/core/extensions/builtin/config-reload/log.js.map +1 -1
  162. package/dist/core/extensions/builtin/config-reload/protocol.d.ts.map +1 -1
  163. package/dist/core/extensions/builtin/config-reload/reload-deferral.d.ts.map +1 -1
  164. package/dist/core/extensions/builtin/config-reload/watch-engine.d.ts.map +1 -1
  165. package/dist/core/extensions/builtin/config-reload/watch-event-source.js.map +1 -1
  166. package/dist/core/extensions/builtin/cursor-cli-oauth/account-command.js.map +1 -1
  167. package/dist/core/extensions/builtin/cursor-cli-oauth/accounts.d.ts.map +1 -1
  168. package/dist/core/extensions/builtin/cursor-cli-oauth/affinity.d.ts.map +1 -1
  169. package/dist/core/extensions/builtin/cursor-cli-oauth/affinity.js.map +1 -1
  170. package/dist/core/extensions/builtin/cursor-cli-oauth/diagnostics.d.ts.map +1 -1
  171. package/dist/core/extensions/builtin/cursor-cli-oauth/diagnostics.js.map +1 -1
  172. package/dist/core/extensions/builtin/cursor-cli-oauth/executable.d.ts.map +1 -1
  173. package/dist/core/extensions/builtin/cursor-cli-oauth/executable.js.map +1 -1
  174. package/dist/core/extensions/builtin/cursor-cli-oauth/failover.d.ts.map +1 -1
  175. package/dist/core/extensions/builtin/cursor-cli-oauth/guardrails.d.ts.map +1 -1
  176. package/dist/core/extensions/builtin/cursor-cli-oauth/guardrails.js.map +1 -1
  177. package/dist/core/extensions/builtin/cursor-cli-oauth/index.js.map +1 -1
  178. package/dist/core/extensions/builtin/cursor-cli-oauth/oauth-login.js.map +1 -1
  179. package/dist/core/extensions/builtin/cursor-cli-oauth/session-router.d.ts.map +1 -1
  180. package/dist/core/extensions/builtin/cursor-cli-oauth/session-router.js.map +1 -1
  181. package/dist/core/extensions/builtin/cursor-cli-oauth/stream-parser.d.ts.map +1 -1
  182. package/dist/core/extensions/builtin/cursor-cli-oauth/stream-parser.js.map +1 -1
  183. package/dist/core/extensions/builtin/cursor-cli-oauth/stream.js.map +1 -1
  184. package/dist/core/extensions/builtin/cursor-cli-oauth/transport.d.ts.map +1 -1
  185. package/dist/core/extensions/builtin/goal/cache-warm-renderer.js.map +1 -1
  186. package/dist/core/extensions/builtin/goal/command-registration.js.map +1 -1
  187. package/dist/core/extensions/builtin/goal/direct-input-lifecycle.d.ts.map +1 -1
  188. package/dist/core/extensions/builtin/goal/elapsed-ticker.d.ts.map +1 -1
  189. package/dist/core/extensions/builtin/goal/errors.d.ts.map +1 -1
  190. package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts.map +1 -1
  191. package/dist/core/extensions/builtin/goal/monitor-continuation.js +57 -4
  192. package/dist/core/extensions/builtin/goal/monitor-continuation.js.map +1 -1
  193. package/dist/core/extensions/builtin/goal/persistence.js.map +1 -1
  194. package/dist/core/extensions/builtin/goal/prompt.d.ts.map +1 -1
  195. package/dist/core/extensions/builtin/goal/prompt.js +9 -6
  196. package/dist/core/extensions/builtin/goal/prompt.js.map +1 -1
  197. package/dist/core/extensions/builtin/goal/store.js.map +1 -1
  198. package/dist/core/extensions/builtin/goal/tool-registration.js +1 -1
  199. package/dist/core/extensions/builtin/goal/tool-registration.js.map +1 -1
  200. package/dist/core/extensions/builtin/goal/turn-usage.d.ts.map +1 -1
  201. package/dist/core/extensions/builtin/goal/types.d.ts.map +1 -1
  202. package/dist/core/extensions/builtin/goal/ui.js.map +1 -1
  203. package/dist/core/extensions/builtin/goal/wait-progress.js.map +1 -1
  204. package/dist/core/extensions/builtin/goal/wait-ticker.d.ts.map +1 -1
  205. package/dist/core/extensions/builtin/gpt-account.d.ts.map +1 -1
  206. package/dist/core/extensions/builtin/gpt-account.js +1 -0
  207. package/dist/core/extensions/builtin/gpt-account.js.map +1 -1
  208. package/dist/core/extensions/builtin/gpt-apply-patch/apply.js.map +1 -1
  209. package/dist/core/extensions/builtin/gpt-apply-patch/errors.d.ts.map +1 -1
  210. package/dist/core/extensions/builtin/gpt-apply-patch/extension.d.ts.map +1 -1
  211. package/dist/core/extensions/builtin/gpt-apply-patch/preview-format.js.map +1 -1
  212. package/dist/core/extensions/builtin/gpt-apply-patch/preview.js.map +1 -1
  213. package/dist/core/extensions/builtin/gpt-apply-patch/streaming-parser.d.ts.map +1 -1
  214. package/dist/core/extensions/builtin/gpt-apply-patch/tool.js.map +1 -1
  215. package/dist/core/extensions/builtin/help/panel.d.ts.map +1 -1
  216. package/dist/core/extensions/builtin/history-search/index.js.map +1 -1
  217. package/dist/core/extensions/builtin/history-search/overlay.d.ts.map +1 -1
  218. package/dist/core/extensions/builtin/hooks/command-runner.js.map +1 -1
  219. package/dist/core/extensions/builtin/hooks/dispatcher.js.map +1 -1
  220. package/dist/core/extensions/builtin/hooks/plugin-loader.js.map +1 -1
  221. package/dist/core/extensions/builtin/hooks/tool-adapter.js.map +1 -1
  222. package/dist/core/extensions/builtin/hooks/trust-storage.d.ts.map +1 -1
  223. package/dist/core/extensions/builtin/hooks/trust.js.map +1 -1
  224. package/dist/core/extensions/builtin/hooks/types.d.ts.map +1 -1
  225. package/dist/core/extensions/builtin/imagegen/index.js.map +1 -1
  226. package/dist/core/extensions/builtin/imagegen/params.d.ts +45 -0
  227. package/dist/core/extensions/builtin/imagegen/params.d.ts.map +1 -0
  228. package/dist/core/extensions/builtin/imagegen/params.js +81 -0
  229. package/dist/core/extensions/builtin/imagegen/params.js.map +1 -0
  230. package/dist/core/extensions/builtin/imagegen/paths.d.ts +10 -4
  231. package/dist/core/extensions/builtin/imagegen/paths.d.ts.map +1 -1
  232. package/dist/core/extensions/builtin/imagegen/paths.js +43 -10
  233. package/dist/core/extensions/builtin/imagegen/paths.js.map +1 -1
  234. package/dist/core/extensions/builtin/imagegen/reference-images.d.ts +20 -0
  235. package/dist/core/extensions/builtin/imagegen/reference-images.d.ts.map +1 -0
  236. package/dist/core/extensions/builtin/imagegen/reference-images.js +70 -0
  237. package/dist/core/extensions/builtin/imagegen/reference-images.js.map +1 -0
  238. package/dist/core/extensions/builtin/imagegen/skill/SKILL.md +58 -33
  239. package/dist/core/extensions/builtin/imagegen/tool.d.ts +15 -19
  240. package/dist/core/extensions/builtin/imagegen/tool.d.ts.map +1 -1
  241. package/dist/core/extensions/builtin/imagegen/tool.js +74 -52
  242. package/dist/core/extensions/builtin/imagegen/tool.js.map +1 -1
  243. package/dist/core/extensions/builtin/index.d.ts.map +1 -1
  244. package/dist/core/extensions/builtin/index.js +2 -0
  245. package/dist/core/extensions/builtin/index.js.map +1 -1
  246. package/dist/core/extensions/builtin/look-at/model-selector.d.ts.map +1 -1
  247. package/dist/core/extensions/builtin/look-at/runner.js.map +1 -1
  248. package/dist/core/extensions/builtin/loop/command.js.map +1 -1
  249. package/dist/core/extensions/builtin/loop/cron-planner.js.map +1 -1
  250. package/dist/core/extensions/builtin/loop/index.d.ts.map +1 -1
  251. package/dist/core/extensions/builtin/loop/index.js.map +1 -1
  252. package/dist/core/extensions/builtin/loop/loopfile.d.ts.map +1 -1
  253. package/dist/core/extensions/builtin/loop/scheduler.js.map +1 -1
  254. package/dist/core/extensions/builtin/loop/status.d.ts.map +1 -1
  255. package/dist/core/extensions/builtin/loop/store.d.ts.map +1 -1
  256. package/dist/core/extensions/builtin/loop/types.d.ts.map +1 -1
  257. package/dist/core/extensions/builtin/loop-guard/detectors.d.ts.map +1 -1
  258. package/dist/core/extensions/builtin/loop-guard/escalation.d.ts.map +1 -1
  259. package/dist/core/extensions/builtin/loop-guard/escalation.js.map +1 -1
  260. package/dist/core/extensions/builtin/loop-guard/index.js.map +1 -1
  261. package/dist/core/extensions/builtin/loop-guard/notice.js.map +1 -1
  262. package/dist/core/extensions/builtin/loop-guard/renderer.js.map +1 -1
  263. package/dist/core/extensions/builtin/loop-guard/tracker.d.ts.map +1 -1
  264. package/dist/core/extensions/builtin/mcp/active-set.js.map +1 -1
  265. package/dist/core/extensions/builtin/mcp/auth/callback.d.ts.map +1 -1
  266. package/dist/core/extensions/builtin/mcp/auth/oauth-errors.d.ts.map +1 -1
  267. package/dist/core/extensions/builtin/mcp/auth/oauth-errors.js.map +1 -1
  268. package/dist/core/extensions/builtin/mcp/auth/oauth-provider.d.ts.map +1 -1
  269. package/dist/core/extensions/builtin/mcp/auth/oauth-refresh.d.ts.map +1 -1
  270. package/dist/core/extensions/builtin/mcp/auth/oauth-refresh.js.map +1 -1
  271. package/dist/core/extensions/builtin/mcp/auth/oauth.js.map +1 -1
  272. package/dist/core/extensions/builtin/mcp/auth/token-store.d.ts.map +1 -1
  273. package/dist/core/extensions/builtin/mcp/catalog.js.map +1 -1
  274. package/dist/core/extensions/builtin/mcp/config-schema.d.ts +28 -28
  275. package/dist/core/extensions/builtin/mcp/config.d.ts.map +1 -1
  276. package/dist/core/extensions/builtin/mcp/connection.d.ts.map +1 -1
  277. package/dist/core/extensions/builtin/mcp/elicitation.d.ts.map +1 -1
  278. package/dist/core/extensions/builtin/mcp/elicitation.js.map +1 -1
  279. package/dist/core/extensions/builtin/mcp/errors.d.ts.map +1 -1
  280. package/dist/core/extensions/builtin/mcp/errors.js.map +1 -1
  281. package/dist/core/extensions/builtin/mcp/expose/register.js.map +1 -1
  282. package/dist/core/extensions/builtin/mcp/expose/session.js.map +1 -1
  283. package/dist/core/extensions/builtin/mcp/guard/output-guard.d.ts.map +1 -1
  284. package/dist/core/extensions/builtin/mcp/guard/output-guard.js.map +1 -1
  285. package/dist/core/extensions/builtin/mcp/log.js.map +1 -1
  286. package/dist/core/extensions/builtin/mcp/reconnect.d.ts.map +1 -1
  287. package/dist/core/extensions/builtin/mcp/service-register.js.map +1 -1
  288. package/dist/core/extensions/builtin/mcp/service.d.ts.map +1 -1
  289. package/dist/core/extensions/builtin/mcp/service.js.map +1 -1
  290. package/dist/core/extensions/builtin/nested-agents-md/core/errors.d.ts.map +1 -1
  291. package/dist/core/extensions/builtin/nested-agents-md/core/injection-cache.d.ts.map +1 -1
  292. package/dist/core/extensions/builtin/nested-agents-md/core/types.d.ts.map +1 -1
  293. package/dist/core/extensions/builtin/oauth-login-interaction.d.ts +13 -6
  294. package/dist/core/extensions/builtin/oauth-login-interaction.d.ts.map +1 -1
  295. package/dist/core/extensions/builtin/oauth-login-interaction.js +43 -19
  296. package/dist/core/extensions/builtin/oauth-login-interaction.js.map +1 -1
  297. package/dist/core/extensions/builtin/openai-image-gen/inject.d.ts +5 -3
  298. package/dist/core/extensions/builtin/openai-image-gen/inject.d.ts.map +1 -1
  299. package/dist/core/extensions/builtin/openai-image-gen/inject.js +7 -4
  300. package/dist/core/extensions/builtin/openai-image-gen/inject.js.map +1 -1
  301. package/dist/core/extensions/builtin/permission-system/arity.d.ts.map +1 -1
  302. package/dist/core/extensions/builtin/permission-system/parsers.d.ts.map +1 -1
  303. package/dist/core/extensions/builtin/permission-system/prompt.js.map +1 -1
  304. package/dist/core/extensions/builtin/permission-system/service.d.ts.map +1 -1
  305. package/dist/core/extensions/builtin/permission-system/service.js.map +1 -1
  306. package/dist/core/extensions/builtin/permission-system/types.d.ts.map +1 -1
  307. package/dist/core/extensions/builtin/permission-system/wildcard.d.ts.map +1 -1
  308. package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.js +1 -1
  309. package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.js.map +1 -1
  310. package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.js +1 -1
  311. package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.js.map +1 -1
  312. package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.js +1 -1
  313. package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.js.map +1 -1
  314. package/dist/core/extensions/builtin/prompt-preset/execution-tooling.d.ts.map +1 -1
  315. package/dist/core/extensions/builtin/prompt-preset/glm-5.d.ts +1 -1
  316. package/dist/core/extensions/builtin/prompt-preset/glm-5.d.ts.map +1 -1
  317. package/dist/core/extensions/builtin/prompt-preset/glm-5.js +1 -1
  318. package/dist/core/extensions/builtin/prompt-preset/glm-5.js.map +1 -1
  319. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.d.ts.map +1 -1
  320. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js +1 -1
  321. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js.map +1 -1
  322. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.d.ts +4 -4
  323. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.d.ts.map +1 -1
  324. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.js +4 -4
  325. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.js.map +1 -1
  326. package/dist/core/extensions/builtin/prompt-preset/kimi-k3.js +1 -1
  327. package/dist/core/extensions/builtin/prompt-preset/kimi-k3.js.map +1 -1
  328. package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
  329. package/dist/core/extensions/builtin/rule-activation/renderer.js.map +1 -1
  330. package/dist/core/extensions/builtin/rules/commands.js.map +1 -1
  331. package/dist/core/extensions/builtin/rules/config.js.map +1 -1
  332. package/dist/core/extensions/builtin/rules/rules/errors.d.ts.map +1 -1
  333. package/dist/core/extensions/builtin/rules/rules/project-root.js.map +1 -1
  334. package/dist/core/extensions/builtin/rules/ui/dynamic-border.d.ts.map +1 -1
  335. package/dist/core/extensions/builtin/rules/ui/rules-banner.d.ts.map +1 -1
  336. package/dist/core/extensions/builtin/terminal/extension.d.ts.map +1 -1
  337. package/dist/core/extensions/builtin/terminal/manager.d.ts.map +1 -1
  338. package/dist/core/extensions/builtin/terminal/manager.js.map +1 -1
  339. package/dist/core/extensions/builtin/terminal/monitor-notify.d.ts.map +1 -1
  340. package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts.map +1 -1
  341. package/dist/core/extensions/builtin/terminal/monitor-status-ticker.d.ts.map +1 -1
  342. package/dist/core/extensions/builtin/terminal/notify.d.ts.map +1 -1
  343. package/dist/core/extensions/builtin/terminal/restore.d.ts.map +1 -1
  344. package/dist/core/extensions/builtin/terminal/runtime-session.d.ts.map +1 -1
  345. package/dist/core/extensions/builtin/terminal/session-bundle.d.ts.map +1 -1
  346. package/dist/core/extensions/builtin/terminal/terminal-manifest.d.ts.map +1 -1
  347. package/dist/core/extensions/builtin/terminal/tools/render.d.ts.map +1 -1
  348. package/dist/core/extensions/builtin/todotools/index.js.map +1 -1
  349. package/dist/core/extensions/builtin/todotools/normalize.js.map +1 -1
  350. package/dist/core/extensions/builtin/todotools/todo-operations.js.map +1 -1
  351. package/dist/core/extensions/builtin/todotools/todo-widget-component.d.ts.map +1 -1
  352. package/dist/core/extensions/builtin/todotools/todo-widget-component.js.map +1 -1
  353. package/dist/core/extensions/builtin/todotools/tools/todo.js.map +1 -1
  354. package/dist/core/extensions/builtin/tool-search/native-search.d.ts.map +1 -1
  355. package/dist/core/extensions/builtin/tool-search/service.d.ts.map +1 -1
  356. package/dist/core/extensions/builtin/tool-search/service.js.map +1 -1
  357. package/dist/core/extensions/builtin/ttsr/detectors/leak-context.d.ts.map +1 -1
  358. package/dist/core/extensions/builtin/ttsr/detectors/token-grammar.d.ts.map +1 -1
  359. package/dist/core/extensions/builtin/ttsr/manager.d.ts.map +1 -1
  360. package/dist/core/extensions/builtin/ttsr/message-update.js.map +1 -1
  361. package/dist/core/extensions/builtin/ttsr/repetitive-turns-lane.d.ts.map +1 -1
  362. package/dist/core/extensions/builtin/ttsr/stream-utils.d.ts.map +1 -1
  363. package/dist/core/extensions/builtin/ttsr/watch.d.ts.map +1 -1
  364. package/dist/core/extensions/builtin/webfetch/webfetch/errors.d.ts.map +1 -1
  365. package/dist/core/extensions/builtin/webfetch/webfetch/tool.d.ts +1 -1
  366. package/dist/core/extensions/builtin/websearch/websearch/native.js.map +1 -1
  367. package/dist/core/extensions/loader.d.ts +2 -1
  368. package/dist/core/extensions/loader.d.ts.map +1 -1
  369. package/dist/core/extensions/loader.js +17 -8
  370. package/dist/core/extensions/loader.js.map +1 -1
  371. package/dist/core/extensions/notice/box.d.ts.map +1 -1
  372. package/dist/core/extensions/notice/box.js +13 -5
  373. package/dist/core/extensions/notice/box.js.map +1 -1
  374. package/dist/core/extensions/runner.d.ts +11 -0
  375. package/dist/core/extensions/runner.d.ts.map +1 -1
  376. package/dist/core/extensions/runner.js +23 -0
  377. package/dist/core/extensions/runner.js.map +1 -1
  378. package/dist/core/extensions/types.d.ts +76 -1
  379. package/dist/core/extensions/types.d.ts.map +1 -1
  380. package/dist/core/extensions/types.js.map +1 -1
  381. package/dist/core/footer-data-provider.d.ts.map +1 -1
  382. package/dist/core/footer-data-provider.js.map +1 -1
  383. package/dist/core/http-dispatcher.d.ts.map +1 -1
  384. package/dist/core/http-dispatcher.js.map +1 -1
  385. package/dist/core/keybindings.d.ts +182 -177
  386. package/dist/core/keybindings.d.ts.map +1 -1
  387. package/dist/core/keybindings.js +5 -0
  388. package/dist/core/keybindings.js.map +1 -1
  389. package/dist/core/lockfile-policy.d.ts.map +1 -1
  390. package/dist/core/messages.js.map +1 -1
  391. package/dist/core/model-config-schema.d.ts +150 -150
  392. package/dist/core/model-config-schema.d.ts.map +1 -1
  393. package/dist/core/model-config.d.ts.map +1 -1
  394. package/dist/core/model-config.js.map +1 -1
  395. package/dist/core/model-registry.d.ts.map +1 -1
  396. package/dist/core/model-registry.js.map +1 -1
  397. package/dist/core/model-resolver.d.ts.map +1 -1
  398. package/dist/core/model-resolver.js +1 -0
  399. package/dist/core/model-resolver.js.map +1 -1
  400. package/dist/core/model-runtime.d.ts.map +1 -1
  401. package/dist/core/model-runtime.js.map +1 -1
  402. package/dist/core/models-store.d.ts.map +1 -1
  403. package/dist/core/models-store.js.map +1 -1
  404. package/dist/core/package-manager.d.ts.map +1 -1
  405. package/dist/core/provider-display-names.d.ts.map +1 -1
  406. package/dist/core/provider-display-names.js +1 -0
  407. package/dist/core/provider-display-names.js.map +1 -1
  408. package/dist/core/remote-catalog-provider.js.map +1 -1
  409. package/dist/core/resource-loader.d.ts +2 -0
  410. package/dist/core/resource-loader.d.ts.map +1 -1
  411. package/dist/core/resource-loader.js +11 -7
  412. package/dist/core/resource-loader.js.map +1 -1
  413. package/dist/core/retry-fallback/controller.d.ts.map +1 -1
  414. package/dist/core/retry-fallback/cooldown.d.ts.map +1 -1
  415. package/dist/core/retry-fallback/cooldown.js.map +1 -1
  416. package/dist/core/retry-fallback/expansion.js.map +1 -1
  417. package/dist/core/retry-fallback/log.js.map +1 -1
  418. package/dist/core/retry-fallback/probe-scheduler.d.ts.map +1 -1
  419. package/dist/core/runtime-credentials.d.ts.map +1 -1
  420. package/dist/core/sdk.d.ts.map +1 -1
  421. package/dist/core/sdk.js +24 -1
  422. package/dist/core/sdk.js.map +1 -1
  423. package/dist/core/session-activity.d.ts.map +1 -1
  424. package/dist/core/session-cwd.d.ts.map +1 -1
  425. package/dist/core/session-log.js.map +1 -1
  426. package/dist/core/session-manager.d.ts.map +1 -1
  427. package/dist/core/session-manager.js.map +1 -1
  428. package/dist/core/session-resident-store.d.ts.map +1 -1
  429. package/dist/core/session-sidecar-store.d.ts.map +1 -1
  430. package/dist/core/session-summary-lru.d.ts.map +1 -1
  431. package/dist/core/session-work-barrier.d.ts.map +1 -1
  432. package/dist/core/settings-manager.d.ts +6 -1
  433. package/dist/core/settings-manager.d.ts.map +1 -1
  434. package/dist/core/settings-manager.js +14 -0
  435. package/dist/core/settings-manager.js.map +1 -1
  436. package/dist/core/settings-shapes.d.ts +7 -0
  437. package/dist/core/settings-shapes.d.ts.map +1 -1
  438. package/dist/core/settings-shapes.js +3 -1
  439. package/dist/core/settings-shapes.js.map +1 -1
  440. package/dist/core/telemetry.js.map +1 -1
  441. package/dist/core/timings.js.map +1 -1
  442. package/dist/core/tools/bash.d.ts.map +1 -1
  443. package/dist/core/tools/bounded-realpath.js.map +1 -1
  444. package/dist/core/tools/edit.d.ts.map +1 -1
  445. package/dist/core/tools/find.d.ts.map +1 -1
  446. package/dist/core/tools/find.js.map +1 -1
  447. package/dist/core/tools/grep.d.ts.map +1 -1
  448. package/dist/core/tools/ls.d.ts.map +1 -1
  449. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  450. package/dist/core/tools/output-accumulator.js.map +1 -1
  451. package/dist/core/tools/powershell.d.ts.map +1 -1
  452. package/dist/core/tools/read-classifiers.d.ts +17 -0
  453. package/dist/core/tools/read-classifiers.d.ts.map +1 -0
  454. package/dist/core/tools/read-classifiers.js +26 -0
  455. package/dist/core/tools/read-classifiers.js.map +1 -0
  456. package/dist/core/tools/read.d.ts +5 -1
  457. package/dist/core/tools/read.d.ts.map +1 -1
  458. package/dist/core/tools/read.js +21 -1
  459. package/dist/core/tools/read.js.map +1 -1
  460. package/dist/core/tools/tail-window.d.ts.map +1 -1
  461. package/dist/core/tools/truncate.js.map +1 -1
  462. package/dist/core/tools/write-result.js.map +1 -1
  463. package/dist/core/tools/write.d.ts.map +1 -1
  464. package/dist/core/trust-manager.d.ts.map +1 -1
  465. package/dist/extensions/llama/client.d.ts.map +1 -1
  466. package/dist/extensions/llama/client.js.map +1 -1
  467. package/dist/extensions/llama/huggingface.d.ts.map +1 -1
  468. package/dist/extensions/llama/huggingface.js.map +1 -1
  469. package/dist/extensions/llama/provider.js.map +1 -1
  470. package/dist/from-source-config-guard.js.map +1 -1
  471. package/dist/index.d.ts +1 -0
  472. package/dist/index.d.ts.map +1 -1
  473. package/dist/index.js +1 -0
  474. package/dist/index.js.map +1 -1
  475. package/dist/main.d.ts.map +1 -1
  476. package/dist/main.js +4 -0
  477. package/dist/main.js.map +1 -1
  478. package/dist/modes/app-server/daemon/occupancy.d.ts.map +1 -1
  479. package/dist/modes/app-server/daemon/process.d.ts.map +1 -1
  480. package/dist/modes/app-server/daemon/process.js.map +1 -1
  481. package/dist/modes/app-server/daemon.js.map +1 -1
  482. package/dist/modes/app-server/protocol/collaboration-mode.d.ts.map +1 -1
  483. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputAnswer.d.ts +7 -0
  484. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputAnswer.d.ts.map +1 -0
  485. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputAnswer.js +4 -0
  486. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputAnswer.js.map +1 -0
  487. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputOption.d.ts +8 -0
  488. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputOption.d.ts.map +1 -0
  489. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputOption.js +4 -0
  490. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputOption.js.map +1 -0
  491. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputParams.d.ts +12 -0
  492. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputParams.d.ts.map +1 -0
  493. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputParams.js +4 -0
  494. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputParams.js.map +1 -0
  495. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputQuestion.d.ts +13 -0
  496. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputQuestion.d.ts.map +1 -0
  497. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputQuestion.js +4 -0
  498. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputQuestion.js.map +1 -0
  499. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputResponse.d.ts +10 -0
  500. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputResponse.d.ts.map +1 -0
  501. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputResponse.js +4 -0
  502. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputResponse.js.map +1 -0
  503. package/dist/modes/app-server/protocol/index.d.ts +2 -0
  504. package/dist/modes/app-server/protocol/index.d.ts.map +1 -1
  505. package/dist/modes/app-server/protocol/index.js.map +1 -1
  506. package/dist/modes/app-server/protocol/methods.d.ts +1 -0
  507. package/dist/modes/app-server/protocol/methods.d.ts.map +1 -1
  508. package/dist/modes/app-server/protocol/methods.js +1 -0
  509. package/dist/modes/app-server/protocol/methods.js.map +1 -1
  510. package/dist/modes/app-server/rpc/errors.d.ts.map +1 -1
  511. package/dist/modes/app-server/runtime.d.ts.map +1 -1
  512. package/dist/modes/app-server/runtime.js +22 -6
  513. package/dist/modes/app-server/runtime.js.map +1 -1
  514. package/dist/modes/app-server/search/fuzzy-files.js.map +1 -1
  515. package/dist/modes/app-server/search/fuzzy-search-service.d.ts.map +1 -1
  516. package/dist/modes/app-server/server/account.js.map +1 -1
  517. package/dist/modes/app-server/server/approval-bridge.d.ts.map +1 -1
  518. package/dist/modes/app-server/server/approval-types.d.ts.map +1 -1
  519. package/dist/modes/app-server/server/approval-ui-context.d.ts +2 -1
  520. package/dist/modes/app-server/server/approval-ui-context.d.ts.map +1 -1
  521. package/dist/modes/app-server/server/approval-ui-context.js +9 -1
  522. package/dist/modes/app-server/server/approval-ui-context.js.map +1 -1
  523. package/dist/modes/app-server/server/catalogs.js.map +1 -1
  524. package/dist/modes/app-server/server/config.js.map +1 -1
  525. package/dist/modes/app-server/server/connection.d.ts.map +1 -1
  526. package/dist/modes/app-server/server/models.js.map +1 -1
  527. package/dist/modes/app-server/server/notifications.d.ts.map +1 -1
  528. package/dist/modes/app-server/server/notifications.js.map +1 -1
  529. package/dist/modes/app-server/server/server-core.d.ts.map +1 -1
  530. package/dist/modes/app-server/server/server-core.js.map +1 -1
  531. package/dist/modes/app-server/server/skills.js.map +1 -1
  532. package/dist/modes/app-server/server/user-input-bridge.d.ts +16 -0
  533. package/dist/modes/app-server/server/user-input-bridge.d.ts.map +1 -0
  534. package/dist/modes/app-server/server/user-input-bridge.js +142 -0
  535. package/dist/modes/app-server/server/user-input-bridge.js.map +1 -0
  536. package/dist/modes/app-server/server/user-input-types.d.ts +43 -0
  537. package/dist/modes/app-server/server/user-input-types.d.ts.map +1 -0
  538. package/dist/modes/app-server/server/user-input-types.js +51 -0
  539. package/dist/modes/app-server/server/user-input-types.js.map +1 -0
  540. package/dist/modes/app-server/threads/archive-state.d.ts.map +1 -1
  541. package/dist/modes/app-server/threads/handlers.js.map +1 -1
  542. package/dist/modes/app-server/threads/mcp-wire-status.d.ts.map +1 -1
  543. package/dist/modes/app-server/threads/metadata-state.d.ts.map +1 -1
  544. package/dist/modes/app-server/threads/projection-file-changes.js.map +1 -1
  545. package/dist/modes/app-server/threads/projection-message-items.d.ts.map +1 -1
  546. package/dist/modes/app-server/threads/projection-turn-diff.d.ts.map +1 -1
  547. package/dist/modes/app-server/threads/projection-web-search.js.map +1 -1
  548. package/dist/modes/app-server/threads/projection.d.ts.map +1 -1
  549. package/dist/modes/app-server/threads/registry.d.ts.map +1 -1
  550. package/dist/modes/app-server/threads/registry.js.map +1 -1
  551. package/dist/modes/app-server/threads/search-cache.d.ts.map +1 -1
  552. package/dist/modes/app-server/threads/turn-log.d.ts.map +1 -1
  553. package/dist/modes/app-server/threads/turn-runtime.d.ts.map +1 -1
  554. package/dist/modes/app-server/threads/turn-runtime.js.map +1 -1
  555. package/dist/modes/app-server/threads/turns.js.map +1 -1
  556. package/dist/modes/app-server/threads/wire-thread.js.map +1 -1
  557. package/dist/modes/app-server/transports/unix-socket.d.ts.map +1 -1
  558. package/dist/modes/app-server/transports/unix-socket.js.map +1 -1
  559. package/dist/modes/app-server/transports/websocket.d.ts.map +1 -1
  560. package/dist/modes/app-server/turn-adapter.d.ts +3 -3
  561. package/dist/modes/app-server/turn-adapter.d.ts.map +1 -1
  562. package/dist/modes/app-server/turn-adapter.js +36 -5
  563. package/dist/modes/app-server/turn-adapter.js.map +1 -1
  564. package/dist/modes/interactive/compaction-queue-transfer.js.map +1 -1
  565. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  566. package/dist/modes/interactive/components/armin.js.map +1 -1
  567. package/dist/modes/interactive/components/ask-user-async-widget.d.ts +39 -0
  568. package/dist/modes/interactive/components/ask-user-async-widget.d.ts.map +1 -0
  569. package/dist/modes/interactive/components/ask-user-async-widget.js +82 -0
  570. package/dist/modes/interactive/components/ask-user-async-widget.js.map +1 -0
  571. package/dist/modes/interactive/components/ask-user-question-keys.d.ts +21 -0
  572. package/dist/modes/interactive/components/ask-user-question-keys.d.ts.map +1 -0
  573. package/dist/modes/interactive/components/ask-user-question-keys.js +115 -0
  574. package/dist/modes/interactive/components/ask-user-question-keys.js.map +1 -0
  575. package/dist/modes/interactive/components/ask-user-question-render.d.ts +17 -0
  576. package/dist/modes/interactive/components/ask-user-question-render.d.ts.map +1 -0
  577. package/dist/modes/interactive/components/ask-user-question-render.js +75 -0
  578. package/dist/modes/interactive/components/ask-user-question-render.js.map +1 -0
  579. package/dist/modes/interactive/components/ask-user-question-state.d.ts +52 -0
  580. package/dist/modes/interactive/components/ask-user-question-state.d.ts.map +1 -0
  581. package/dist/modes/interactive/components/ask-user-question-state.js +134 -0
  582. package/dist/modes/interactive/components/ask-user-question-state.js.map +1 -0
  583. package/dist/modes/interactive/components/ask-user-question.d.ts +50 -0
  584. package/dist/modes/interactive/components/ask-user-question.d.ts.map +1 -0
  585. package/dist/modes/interactive/components/ask-user-question.js +148 -0
  586. package/dist/modes/interactive/components/ask-user-question.js.map +1 -0
  587. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  588. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  589. package/dist/modes/interactive/components/assistant-render-descriptors.js.map +1 -1
  590. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  591. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  592. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  593. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  594. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  595. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  596. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  597. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  598. package/dist/modes/interactive/components/continuity-notice.d.ts.map +1 -1
  599. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  600. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  601. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  602. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  603. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  604. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  605. package/dist/modes/interactive/components/diff.js.map +1 -1
  606. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  607. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  608. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  609. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  610. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  611. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  612. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  613. package/dist/modes/interactive/components/favorite-models-selector.d.ts.map +1 -1
  614. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  615. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  616. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  617. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  618. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  619. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  620. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  621. package/dist/modes/interactive/components/progressive-transcript-container.d.ts.map +1 -1
  622. package/dist/modes/interactive/components/render-signature.js.map +1 -1
  623. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  624. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  625. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  626. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  627. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  628. package/dist/modes/interactive/components/shortcut-overlay.d.ts.map +1 -1
  629. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  630. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  631. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  632. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  633. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  634. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  635. package/dist/modes/interactive/components/tool-execution-images.d.ts.map +1 -1
  636. package/dist/modes/interactive/components/tool-execution-renderer.d.ts.map +1 -1
  637. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  638. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  639. package/dist/modes/interactive/components/tool-renderer-boundary.d.ts.map +1 -1
  640. package/dist/modes/interactive/components/tree-selector.d.ts +4 -0
  641. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  642. package/dist/modes/interactive/components/tree-selector.js +17 -0
  643. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  644. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
  645. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  646. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  647. package/dist/modes/interactive/components/user-message.js.map +1 -1
  648. package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
  649. package/dist/modes/interactive/grok/chrome.d.ts.map +1 -1
  650. package/dist/modes/interactive/grok/footer.d.ts.map +1 -1
  651. package/dist/modes/interactive/grok/input-card.d.ts.map +1 -1
  652. package/dist/modes/interactive/grok/palette.d.ts.map +1 -1
  653. package/dist/modes/interactive/grok/tool-row.d.ts.map +1 -1
  654. package/dist/modes/interactive/grok/welcome-card.d.ts.map +1 -1
  655. package/dist/modes/interactive/interactive-host-runtime.d.ts +6 -0
  656. package/dist/modes/interactive/interactive-host-runtime.d.ts.map +1 -1
  657. package/dist/modes/interactive/interactive-host-runtime.js +32 -3
  658. package/dist/modes/interactive/interactive-host-runtime.js.map +1 -1
  659. package/dist/modes/interactive/interactive-mode.d.ts +35 -0
  660. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  661. package/dist/modes/interactive/interactive-mode.js +413 -100
  662. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  663. package/dist/modes/interactive/login-outcome.d.ts +20 -0
  664. package/dist/modes/interactive/login-outcome.d.ts.map +1 -0
  665. package/dist/modes/interactive/login-outcome.js +35 -0
  666. package/dist/modes/interactive/login-outcome.js.map +1 -0
  667. package/dist/modes/interactive/startup-tools.js.map +1 -1
  668. package/dist/modes/interactive/streaming-reveal-content.d.ts.map +1 -1
  669. package/dist/modes/interactive/streaming-reveal-content.js.map +1 -1
  670. package/dist/modes/interactive/streaming-reveal.d.ts.map +1 -1
  671. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  672. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  673. package/dist/modes/interactive/theme/theme.js.map +1 -1
  674. package/dist/modes/interactive/tips/catalog/input-tips.d.ts +7 -7
  675. package/dist/modes/interactive/tips/catalog/input-tips.d.ts.map +1 -1
  676. package/dist/modes/interactive/tips/catalog/input-tips.js +5 -0
  677. package/dist/modes/interactive/tips/catalog/input-tips.js.map +1 -1
  678. package/dist/modes/interactive/tips/catalog/model-tips.d.ts +1 -1
  679. package/dist/modes/interactive/tips/catalog/workspace-tips.d.ts +1 -1
  680. package/dist/modes/interactive/tips/scheduler.js.map +1 -1
  681. package/dist/modes/interactive/tips/working-tip.d.ts.map +1 -1
  682. package/dist/modes/interactive/tool-args-reveal.d.ts.map +1 -1
  683. package/dist/modes/interactive/tool-result-reveal.d.ts.map +1 -1
  684. package/dist/modes/print-mode.d.ts.map +1 -1
  685. package/dist/modes/print-mode.js +8 -0
  686. package/dist/modes/print-mode.js.map +1 -1
  687. package/dist/modes/provider-native-rendering.d.ts.map +1 -1
  688. package/dist/modes/provider-native-rendering.js +35 -0
  689. package/dist/modes/provider-native-rendering.js.map +1 -1
  690. package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
  691. package/dist/modes/rpc/connection-handler.js +72 -1
  692. package/dist/modes/rpc/connection-handler.js.map +1 -1
  693. package/dist/modes/rpc/connection-question-bridge.d.ts +18 -0
  694. package/dist/modes/rpc/connection-question-bridge.d.ts.map +1 -0
  695. package/dist/modes/rpc/connection-question-bridge.js +156 -0
  696. package/dist/modes/rpc/connection-question-bridge.js.map +1 -0
  697. package/dist/modes/rpc/custom-capability.d.ts +2 -0
  698. package/dist/modes/rpc/custom-capability.d.ts.map +1 -1
  699. package/dist/modes/rpc/custom-capability.js +2 -0
  700. package/dist/modes/rpc/custom-capability.js.map +1 -1
  701. package/dist/modes/rpc/event-output-buffer.js.map +1 -1
  702. package/dist/modes/rpc/host-ensure.js.map +1 -1
  703. package/dist/modes/rpc/host-lifecycle.d.ts.map +1 -1
  704. package/dist/modes/rpc/host-lifecycle.js.map +1 -1
  705. package/dist/modes/rpc/host-watchdog.js.map +1 -1
  706. package/dist/modes/rpc/jsonl.js.map +1 -1
  707. package/dist/modes/rpc/multi-session-host.js.map +1 -1
  708. package/dist/modes/rpc/ownership-safe-lock.d.ts.map +1 -1
  709. package/dist/modes/rpc/ownership-safe-lock.js.map +1 -1
  710. package/dist/modes/rpc/rpc-client.d.ts +20 -1
  711. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  712. package/dist/modes/rpc/rpc-client.js +35 -3
  713. package/dist/modes/rpc/rpc-client.js.map +1 -1
  714. package/dist/modes/rpc/rpc-input-validation.js.map +1 -1
  715. package/dist/modes/rpc/rpc-types.d.ts +103 -3
  716. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  717. package/dist/modes/rpc/rpc-types.js +6 -0
  718. package/dist/modes/rpc/rpc-types.js.map +1 -1
  719. package/dist/modes/rpc/session-binding.js.map +1 -1
  720. package/dist/modes/rpc/session-command-router.d.ts +4 -4
  721. package/dist/modes/rpc/session-command-router.d.ts.map +1 -1
  722. package/dist/modes/rpc/session-command-router.js +14 -8
  723. package/dist/modes/rpc/session-command-router.js.map +1 -1
  724. package/dist/modes/rpc/session-event-fanout.d.ts +2 -0
  725. package/dist/modes/rpc/session-event-fanout.d.ts.map +1 -1
  726. package/dist/modes/rpc/session-event-fanout.js +25 -1
  727. package/dist/modes/rpc/session-event-fanout.js.map +1 -1
  728. package/dist/modes/rpc/session-event-writer.d.ts +7 -1
  729. package/dist/modes/rpc/session-event-writer.d.ts.map +1 -1
  730. package/dist/modes/rpc/session-event-writer.js +17 -4
  731. package/dist/modes/rpc/session-event-writer.js.map +1 -1
  732. package/dist/modes/rpc/session-extension-ui-requests.d.ts.map +1 -1
  733. package/dist/modes/rpc/session-registry.d.ts.map +1 -1
  734. package/dist/modes/rpc/session-registry.js +11 -1
  735. package/dist/modes/rpc/session-registry.js.map +1 -1
  736. package/dist/modes/rpc/session-worker-client.d.ts.map +1 -1
  737. package/dist/modes/rpc/session-worker-client.js.map +1 -1
  738. package/dist/modes/rpc/session-worker-protocol.d.ts.map +1 -1
  739. package/dist/modes/rpc/session-worker-requests.d.ts.map +1 -1
  740. package/dist/modes/rpc/session-worker-requests.js +1 -1
  741. package/dist/modes/rpc/session-worker-requests.js.map +1 -1
  742. package/dist/modes/rpc/session-worker.js +10 -2
  743. package/dist/modes/rpc/session-worker.js.map +1 -1
  744. package/dist/modes/rpc/socket-event-fanout.d.ts +14 -1
  745. package/dist/modes/rpc/socket-event-fanout.d.ts.map +1 -1
  746. package/dist/modes/rpc/socket-event-fanout.js +48 -2
  747. package/dist/modes/rpc/socket-event-fanout.js.map +1 -1
  748. package/dist/modes/rpc/socket-ownership.js.map +1 -1
  749. package/dist/modes/rpc/worker-session-registry.d.ts.map +1 -1
  750. package/dist/modes/rpc/worker-session-registry.js +2 -1
  751. package/dist/modes/rpc/worker-session-registry.js.map +1 -1
  752. package/dist/package-manager-cli.js.map +1 -1
  753. package/dist/self-update-bootstrap.js.map +1 -1
  754. package/dist/utils/ansi.js.map +1 -1
  755. package/dist/utils/clipboard-image.js.map +1 -1
  756. package/dist/utils/clipboard-native.js.map +1 -1
  757. package/dist/utils/clipboard.js.map +1 -1
  758. package/dist/utils/exif-orientation.js.map +1 -1
  759. package/dist/utils/frontmatter.d.ts.map +1 -1
  760. package/dist/utils/image-resize.js.map +1 -1
  761. package/dist/utils/management-http.js.map +1 -1
  762. package/dist/utils/paths.js.map +1 -1
  763. package/dist/utils/photon.js.map +1 -1
  764. package/dist/utils/pi-user-agent.js.map +1 -1
  765. package/dist/utils/shell.d.ts.map +1 -1
  766. package/dist/utils/shell.js.map +1 -1
  767. package/dist/utils/syntax-highlight.js.map +1 -1
  768. package/dist/utils/version-check.js.map +1 -1
  769. package/docs/app-server.md +14 -0
  770. package/docs/extensions.md +28 -1
  771. package/docs/keybindings.md +1 -0
  772. package/docs/providers.md +1 -0
  773. package/docs/rpc.md +95 -3
  774. package/docs/settings.md +18 -0
  775. package/docs/skills.md +1 -1
  776. package/docs/tui.md +6 -0
  777. package/docs/usage.md +2 -1
  778. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +30 -0
  779. package/node_modules/@code-yeongyu/senpi-codemode/README.md +17 -2
  780. package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
  781. package/node_modules/@code-yeongyu/senpi-codemode/src/config/settings.ts +35 -15
  782. package/node_modules/@code-yeongyu/senpi-codemode/src/index.ts +13 -2
  783. package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt-template.ts +76 -0
  784. package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt.ts +6 -77
  785. package/node_modules/@code-yeongyu/senpi-codemode/src/timeouts/run-budget.ts +107 -0
  786. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-deadlines.ts +76 -0
  787. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-execution.ts +25 -14
  788. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-contract.ts +4 -0
  789. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-manager.ts +47 -40
  790. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-notification.ts +2 -0
  791. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-snapshot.ts +5 -0
  792. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool-options.ts +8 -3
  793. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool.ts +17 -187
  794. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/run-eval-cell.ts +189 -0
  795. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/types.ts +66 -56
  796. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  797. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +1 -1
  798. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  799. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts.map +1 -1
  800. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js.map +1 -1
  801. package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.d.ts.map +1 -1
  802. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts.map +1 -1
  803. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js.map +1 -1
  804. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js.map +1 -1
  805. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
  806. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
  807. package/node_modules/@earendil-works/pi-agent-core/dist/harness/events.d.ts.map +1 -1
  808. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.js.map +1 -1
  809. package/node_modules/@earendil-works/pi-agent-core/dist/harness/prompt-templates.js.map +1 -1
  810. package/node_modules/@earendil-works/pi-agent-core/dist/harness/reducer.d.ts.map +1 -1
  811. package/node_modules/@earendil-works/pi-agent-core/dist/harness/reducer.js.map +1 -1
  812. package/node_modules/@earendil-works/pi-agent-core/dist/harness/result.d.ts.map +1 -1
  813. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/context.js.map +1 -1
  814. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/errors.d.ts.map +1 -1
  815. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/repo.d.ts.map +1 -1
  816. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/repo.js.map +1 -1
  817. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/storage.d.ts.map +1 -1
  818. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/storage.js.map +1 -1
  819. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory.d.ts.map +1 -1
  820. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory.js.map +1 -1
  821. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts.map +1 -1
  822. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js.map +1 -1
  823. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/state.d.ts.map +1 -1
  824. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/state.js.map +1 -1
  825. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/conformance.js.map +1 -1
  826. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/types.d.ts.map +1 -1
  827. package/node_modules/@earendil-works/pi-agent-core/dist/harness/telemetry.d.ts +36 -36
  828. package/node_modules/@earendil-works/pi-agent-core/dist/harness/telemetry.d.ts.map +1 -1
  829. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts.map +1 -1
  830. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.js.map +1 -1
  831. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.d.ts.map +1 -1
  832. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.js.map +1 -1
  833. package/node_modules/@earendil-works/pi-agent-core/dist/search/scanning.js.map +1 -1
  834. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +5 -0
  835. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
  836. package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
  837. package/node_modules/@earendil-works/pi-agent-core/package.json +4 -4
  838. package/node_modules/@earendil-works/pi-ai/README.md +1 -0
  839. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts +3 -1
  840. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts.map +1 -1
  841. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +6 -2
  842. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
  843. package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js.map +1 -1
  844. package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js.map +1 -1
  845. package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.lazy.js.map +1 -1
  846. package/node_modules/@earendil-works/pi-ai/dist/api/context-room.d.ts.map +1 -1
  847. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/gen/agent_pb.d.ts.map +1 -1
  848. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/measure.js.map +1 -1
  849. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/stream-retry.d.ts.map +1 -1
  850. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js.map +1 -1
  851. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.lazy.js.map +1 -1
  852. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.js.map +1 -1
  853. package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.js.map +1 -1
  854. package/node_modules/@earendil-works/pi-ai/dist/api/google-shared.js.map +1 -1
  855. package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.js.map +1 -1
  856. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js.map +1 -1
  857. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.d.ts.map +1 -1
  858. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +5 -0
  859. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
  860. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-edit.d.ts +4 -0
  861. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-edit.d.ts.map +1 -0
  862. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-edit.js +15 -0
  863. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-edit.js.map +1 -0
  864. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-params.d.ts +60 -0
  865. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-params.d.ts.map +1 -0
  866. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-params.js +93 -0
  867. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-params.js.map +1 -0
  868. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-result.d.ts +12 -0
  869. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-result.d.ts.map +1 -0
  870. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-result.js +96 -0
  871. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-result.js.map +1 -0
  872. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images.d.ts +3 -6
  873. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images.d.ts.map +1 -1
  874. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images.js +26 -119
  875. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images.js.map +1 -1
  876. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js.map +1 -1
  877. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
  878. package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.d.ts.map +1 -1
  879. package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.js.map +1 -1
  880. package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js.map +1 -1
  881. package/node_modules/@earendil-works/pi-ai/dist/api/warm-prompt-cache.js.map +1 -1
  882. package/node_modules/@earendil-works/pi-ai/dist/auth/credential-store.d.ts.map +1 -1
  883. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.d.ts.map +1 -1
  884. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.js.map +1 -1
  885. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openai-codex.js.map +1 -1
  886. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth-refresh.d.ts +47 -0
  887. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth-refresh.d.ts.map +1 -0
  888. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth-refresh.js +126 -0
  889. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth-refresh.js.map +1 -0
  890. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/failover.d.ts.map +1 -1
  891. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/select.d.ts.map +1 -1
  892. package/node_modules/@earendil-works/pi-ai/dist/auth/refresh-credential.d.ts +12 -0
  893. package/node_modules/@earendil-works/pi-ai/dist/auth/refresh-credential.d.ts.map +1 -0
  894. package/node_modules/@earendil-works/pi-ai/dist/auth/refresh-credential.js +44 -0
  895. package/node_modules/@earendil-works/pi-ai/dist/auth/refresh-credential.js.map +1 -0
  896. package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.d.ts +2 -0
  897. package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.d.ts.map +1 -1
  898. package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js +26 -35
  899. package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js.map +1 -1
  900. package/node_modules/@earendil-works/pi-ai/dist/compat.js.map +1 -1
  901. package/node_modules/@earendil-works/pi-ai/dist/cursor/model-capabilities.js.map +1 -1
  902. package/node_modules/@earendil-works/pi-ai/dist/cursor/selection-descriptor.js.map +1 -1
  903. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.d.ts.map +1 -1
  904. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js +1 -0
  905. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js.map +1 -1
  906. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts +99 -66
  907. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts.map +1 -1
  908. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +34 -1
  909. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js.map +1 -1
  910. package/node_modules/@earendil-works/pi-ai/dist/images.d.ts +1 -0
  911. package/node_modules/@earendil-works/pi-ai/dist/images.d.ts.map +1 -1
  912. package/node_modules/@earendil-works/pi-ai/dist/images.js +1 -0
  913. package/node_modules/@earendil-works/pi-ai/dist/images.js.map +1 -1
  914. package/node_modules/@earendil-works/pi-ai/dist/models-store.d.ts.map +1 -1
  915. package/node_modules/@earendil-works/pi-ai/dist/models.d.ts.map +1 -1
  916. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +2 -0
  917. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
  918. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +2 -0
  919. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
  920. package/node_modules/@earendil-works/pi-ai/dist/models.js +3 -28
  921. package/node_modules/@earendil-works/pi-ai/dist/models.js.map +1 -1
  922. package/node_modules/@earendil-works/pi-ai/dist/node/provider-scope.d.ts.map +1 -1
  923. package/node_modules/@earendil-works/pi-ai/dist/providers/all.d.ts.map +1 -1
  924. package/node_modules/@earendil-works/pi-ai/dist/providers/all.js +2 -0
  925. package/node_modules/@earendil-works/pi-ai/dist/providers/all.js.map +1 -1
  926. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  927. package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
  928. package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -1
  929. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
  930. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  931. package/node_modules/@earendil-works/pi-ai/dist/providers/data/venice.json +1 -0
  932. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  933. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.js.map +1 -1
  934. package/node_modules/@earendil-works/pi-ai/dist/providers/ollama.js.map +1 -1
  935. package/node_modules/@earendil-works/pi-ai/dist/providers/radius.js.map +1 -1
  936. package/node_modules/@earendil-works/pi-ai/dist/providers/venice.d.ts +3 -0
  937. package/node_modules/@earendil-works/pi-ai/dist/providers/venice.d.ts.map +1 -0
  938. package/node_modules/@earendil-works/pi-ai/dist/providers/venice.js +15 -0
  939. package/node_modules/@earendil-works/pi-ai/dist/providers/venice.js.map +1 -0
  940. package/node_modules/@earendil-works/pi-ai/dist/providers/venice.models.d.ts +4 -0
  941. package/node_modules/@earendil-works/pi-ai/dist/providers/venice.models.d.ts.map +1 -0
  942. package/node_modules/@earendil-works/pi-ai/dist/providers/venice.models.js +6 -0
  943. package/node_modules/@earendil-works/pi-ai/dist/providers/venice.models.js.map +1 -0
  944. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/context-transformer.js.map +1 -1
  945. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/recovery-wrapper-state.d.ts.map +1 -1
  946. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/kimi-xtml/parse.js.map +1 -1
  947. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-content-lifecycle.d.ts.map +1 -1
  948. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-event-stream.d.ts.map +1 -1
  949. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-native-projection.d.ts.map +1 -1
  950. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-native-projection.js.map +1 -1
  951. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-stream-terminal.d.ts.map +1 -1
  952. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-stream-wrapper.js.map +1 -1
  953. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-text-projection.d.ts.map +1 -1
  954. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-text-projection.js.map +1 -1
  955. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-thinking-projection.d.ts.map +1 -1
  956. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-wrapper-shared.d.ts.map +1 -1
  957. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-wrapper-shared.js.map +1 -1
  958. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-wrapper.js.map +1 -1
  959. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +20 -3
  960. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  961. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  962. package/node_modules/@earendil-works/pi-ai/dist/utils/deferred-tools.js.map +1 -1
  963. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.d.ts.map +1 -1
  964. package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.d.ts +3 -1
  965. package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.d.ts.map +1 -1
  966. package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.js.map +1 -1
  967. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.js.map +1 -1
  968. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js.map +1 -1
  969. package/node_modules/@earendil-works/pi-ai/dist/utils/validation.js.map +1 -1
  970. package/node_modules/@earendil-works/pi-ai/package.json +3 -3
  971. package/node_modules/@earendil-works/pi-pty/dist/loader.d.ts.map +1 -1
  972. package/node_modules/@earendil-works/pi-pty/dist/loader.js.map +1 -1
  973. package/node_modules/@earendil-works/pi-pty/dist/pipe-fallback.d.ts.map +1 -1
  974. package/node_modules/@earendil-works/pi-pty/dist/pipe-fallback.js.map +1 -1
  975. package/node_modules/@earendil-works/pi-pty/dist/quarantine.js.map +1 -1
  976. package/node_modules/@earendil-works/pi-pty/dist/registry-types.d.ts.map +1 -1
  977. package/node_modules/@earendil-works/pi-pty/dist/registry.d.ts.map +1 -1
  978. package/node_modules/@earendil-works/pi-pty/dist/registry.js.map +1 -1
  979. package/node_modules/@earendil-works/pi-pty/dist/screen.d.ts.map +1 -1
  980. package/node_modules/@earendil-works/pi-pty/dist/screen.js.map +1 -1
  981. package/node_modules/@earendil-works/pi-pty/dist/session-bun.js.map +1 -1
  982. package/node_modules/@earendil-works/pi-pty/dist/session.d.ts.map +1 -1
  983. package/node_modules/@earendil-works/pi-pty/dist/session.js.map +1 -1
  984. package/node_modules/@earendil-works/pi-pty/package.json +2 -2
  985. package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
  986. package/node_modules/@earendil-works/pi-tui/dist/alt-screen-search.d.ts.map +1 -1
  987. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts.map +1 -1
  988. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js.map +1 -1
  989. package/node_modules/@earendil-works/pi-tui/dist/components/alt-screen-flash.d.ts.map +1 -1
  990. package/node_modules/@earendil-works/pi-tui/dist/components/box.d.ts.map +1 -1
  991. package/node_modules/@earendil-works/pi-tui/dist/components/cancellable-loader.d.ts.map +1 -1
  992. package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts.map +1 -1
  993. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
  994. package/node_modules/@earendil-works/pi-tui/dist/components/h-stack.d.ts.map +1 -1
  995. package/node_modules/@earendil-works/pi-tui/dist/components/h-stack.js.map +1 -1
  996. package/node_modules/@earendil-works/pi-tui/dist/components/image.d.ts.map +1 -1
  997. package/node_modules/@earendil-works/pi-tui/dist/components/image.js.map +1 -1
  998. package/node_modules/@earendil-works/pi-tui/dist/components/input.d.ts.map +1 -1
  999. package/node_modules/@earendil-works/pi-tui/dist/components/latex.d.ts.map +1 -1
  1000. package/node_modules/@earendil-works/pi-tui/dist/components/loader.d.ts.map +1 -1
  1001. package/node_modules/@earendil-works/pi-tui/dist/components/loader.js.map +1 -1
  1002. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.d.ts.map +1 -1
  1003. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js.map +1 -1
  1004. package/node_modules/@earendil-works/pi-tui/dist/components/scroll-view.d.ts.map +1 -1
  1005. package/node_modules/@earendil-works/pi-tui/dist/components/scroll-view.js.map +1 -1
  1006. package/node_modules/@earendil-works/pi-tui/dist/components/select-list.d.ts.map +1 -1
  1007. package/node_modules/@earendil-works/pi-tui/dist/components/select-list.js.map +1 -1
  1008. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.d.ts.map +1 -1
  1009. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.js.map +1 -1
  1010. package/node_modules/@earendil-works/pi-tui/dist/components/spacer.d.ts.map +1 -1
  1011. package/node_modules/@earendil-works/pi-tui/dist/components/spacer.js.map +1 -1
  1012. package/node_modules/@earendil-works/pi-tui/dist/components/stack.d.ts.map +1 -1
  1013. package/node_modules/@earendil-works/pi-tui/dist/components/stack.js.map +1 -1
  1014. package/node_modules/@earendil-works/pi-tui/dist/components/text.d.ts.map +1 -1
  1015. package/node_modules/@earendil-works/pi-tui/dist/components/text.js.map +1 -1
  1016. package/node_modules/@earendil-works/pi-tui/dist/components/truncated-text.d.ts.map +1 -1
  1017. package/node_modules/@earendil-works/pi-tui/dist/components/truncated-text.js.map +1 -1
  1018. package/node_modules/@earendil-works/pi-tui/dist/components/v-stack.d.ts.map +1 -1
  1019. package/node_modules/@earendil-works/pi-tui/dist/components/v-stack.js.map +1 -1
  1020. package/node_modules/@earendil-works/pi-tui/dist/image-markers.d.ts.map +1 -1
  1021. package/node_modules/@earendil-works/pi-tui/dist/index.js.map +1 -1
  1022. package/node_modules/@earendil-works/pi-tui/dist/keybindings.d.ts.map +1 -1
  1023. package/node_modules/@earendil-works/pi-tui/dist/keybindings.js.map +1 -1
  1024. package/node_modules/@earendil-works/pi-tui/dist/keys.d.ts.map +1 -1
  1025. package/node_modules/@earendil-works/pi-tui/dist/keys.js.map +1 -1
  1026. package/node_modules/@earendil-works/pi-tui/dist/kill-ring.d.ts.map +1 -1
  1027. package/node_modules/@earendil-works/pi-tui/dist/mux.js.map +1 -1
  1028. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js.map +1 -1
  1029. package/node_modules/@earendil-works/pi-tui/dist/native-module-path.js.map +1 -1
  1030. package/node_modules/@earendil-works/pi-tui/dist/paste-markers.d.ts.map +1 -1
  1031. package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
  1032. package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.js.map +1 -1
  1033. package/node_modules/@earendil-works/pi-tui/dist/terminal-capabilities.js.map +1 -1
  1034. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js.map +1 -1
  1035. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
  1036. package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
  1037. package/node_modules/@earendil-works/pi-tui/dist/tmux-image-probe.js.map +1 -1
  1038. package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.d.ts.map +1 -1
  1039. package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.js.map +1 -1
  1040. package/node_modules/@earendil-works/pi-tui/dist/tui-main-screen.d.ts.map +1 -1
  1041. package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts.map +1 -1
  1042. package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
  1043. package/node_modules/@earendil-works/pi-tui/dist/undo-stack.d.ts.map +1 -1
  1044. package/node_modules/@earendil-works/pi-tui/dist/utils.js.map +1 -1
  1045. package/node_modules/@earendil-works/pi-tui/package.json +2 -2
  1046. package/node_modules/css-tree/cjs/data-patch.cjs +853 -5
  1047. package/node_modules/css-tree/cjs/data.cjs +13598 -3
  1048. package/node_modules/css-tree/cjs/version.cjs +1 -3
  1049. package/node_modules/css-tree/lib/data-patch.js +853 -4
  1050. package/node_modules/css-tree/lib/data.js +13598 -5
  1051. package/node_modules/css-tree/lib/version.js +1 -5
  1052. package/package.json +8 -8
  1053. package/vendor/pi-client/client.d.ts.map +1 -1
  1054. package/vendor/pi-client/client.js.map +1 -1
  1055. package/vendor/pi-client/connection.d.ts.map +1 -1
  1056. package/vendor/pi-client/connection.js.map +1 -1
  1057. package/vendor/pi-client/errors.d.ts.map +1 -1
  1058. package/vendor/pi-client/session-handle.d.ts.map +1 -1
  1059. package/vendor/pi-client/state.d.ts.map +1 -1
  1060. package/vendor/pi-protocol/cbor/decoder.js.map +1 -1
  1061. package/vendor/pi-protocol/cbor/options.d.ts.map +1 -1
  1062. package/vendor/pi-protocol/codec.d.ts.map +1 -1
  1063. package/vendor/pi-protocol/codec.js.map +1 -1
  1064. package/vendor/pi-protocol/framing.d.ts.map +1 -1
  1065. package/vendor/pi-protocol/schemas.d.ts +678 -678
@@ -1 +1 @@
1
- {"version":3,"file":"watch-event-source.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/config-reload/watch-event-source.ts"],"names":[],"mappings":"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","sourcesContent":["import { Worker } from \"node:worker_threads\";\nimport { watchWithErrorHandler } from \"../../../../utils/fs-watch.ts\";\nimport type { WatchEventListener, WatchEventSource } from \"./watch-engine.ts\";\n\nexport interface RecursiveWatchWorker {\n\ton(event: \"message\", listener: (message: unknown) => void): this;\n\ton(event: \"error\", listener: (error: Error) => void): this;\n\tpostMessage(message: unknown): void;\n\tterminate(): Promise<number>;\n}\n\nexport type RecursiveWatchWorkerFactory = () => RecursiveWatchWorker;\n\nexport type FsWatchEventSourceOptions = {\n\treadonly platform?: NodeJS.Platform;\n\treadonly createRecursiveWorker?: RecursiveWatchWorkerFactory;\n};\n\ntype RecursiveWatchMessage =\n\t| { readonly kind: \"event\"; readonly id: number; readonly eventType: string; readonly filename: string | null }\n\t| { readonly kind: \"error\"; readonly id: number; readonly message: string };\n\nconst RECURSIVE_WATCH_WORKER_SOURCE = `\nconst { watch } = require(\"node:fs\");\nconst { parentPort } = require(\"node:worker_threads\");\n\nif (!parentPort) throw new Error(\"Recursive watch worker requires a parent port\");\n\nconst watchers = new Map();\nparentPort.on(\"message\", (message) => {\n\tif (message.kind === \"unwatch\") {\n\t\twatchers.get(message.id)?.close();\n\t\twatchers.delete(message.id);\n\t\treturn;\n\t}\n\tif (message.kind !== \"watch\") return;\n\ttry {\n\t\tconst watcher = watch(\n\t\t\tmessage.path,\n\t\t\t{ recursive: message.recursive !== false, encoding: \"utf8\" },\n\t\t\t(eventType, filename) => {\n\t\t\t\tparentPort.postMessage({\n\t\t\t\t\tkind: \"event\",\n\t\t\t\t\tid: message.id,\n\t\t\t\t\teventType,\n\t\t\t\t\tfilename: typeof filename === \"string\" ? filename : null,\n\t\t\t\t});\n\t\t\t},\n\t\t);\n\t\twatcher.on(\"error\", (error) => {\n\t\t\tparentPort.postMessage({\n\t\t\t\tkind: \"error\",\n\t\t\t\tid: message.id,\n\t\t\t\tmessage: error instanceof Error ? error.message : String(error),\n\t\t\t});\n\t\t});\n\t\twatchers.set(message.id, watcher);\n\t} catch (error) {\n\t\tparentPort.postMessage({\n\t\t\tkind: \"error\",\n\t\t\tid: message.id,\n\t\t\tmessage: error instanceof Error ? error.message : String(error),\n\t\t});\n\t}\n});\n`;\n\nfunction createRecursiveWatchWorker(): RecursiveWatchWorker {\n\treturn new Worker(RECURSIVE_WATCH_WORKER_SOURCE, {\n\t\teval: true,\n\t});\n}\n\nfunction isRecursiveWatchMessage(message: unknown): message is RecursiveWatchMessage {\n\tif (typeof message !== \"object\" || message === null || !(\"kind\" in message)) return false;\n\tif (!(\"id\" in message) || typeof message.id !== \"number\") return false;\n\tif (message.kind === \"error\") return \"message\" in message && typeof message.message === \"string\";\n\treturn (\n\t\tmessage.kind === \"event\" &&\n\t\t\"eventType\" in message &&\n\t\ttypeof message.eventType === \"string\" &&\n\t\t\"filename\" in message &&\n\t\t(message.filename === null || typeof message.filename === \"string\")\n\t);\n}\n\n/**\n * Platforms whose fs.watch handles are expensive to create and tear down on the\n * interactive main thread: inotify tree walks on Linux, FSEvents stream rendezvous on\n * macOS. Non-recursive per-directory watches pay the same FSEvents setup latency —\n * measured 2.7-8.0s per watch-engine target under system load — so every watch is\n * offloaded, not only recursive ones.\n */\nconst WORKER_OFFLOADED_WATCH_PLATFORMS: ReadonlySet<NodeJS.Platform> = new Set([\"linux\", \"darwin\"]);\n\n/** Production event source. Watch setup and teardown run off the interactive main thread. */\nexport function createFsWatchEventSource(\n\tonError: (error: unknown, path: string) => void = () => {},\n\toptions: FsWatchEventSourceOptions = {},\n): WatchEventSource {\n\tconst recursiveSubscriptions = new Map<\n\t\tnumber,\n\t\t{ readonly path: string; readonly listener: WatchEventListener; readonly recursive: boolean }\n\t>();\n\tlet recursiveWorker: RecursiveWatchWorker | undefined;\n\tlet nextSubscriptionId = 1;\n\n\tconst ensureRecursiveWorker = (): RecursiveWatchWorker => {\n\t\tif (recursiveWorker) return recursiveWorker;\n\t\tconst worker = (options.createRecursiveWorker ?? createRecursiveWatchWorker)();\n\t\tworker.on(\"message\", (message) => {\n\t\t\tif (!isRecursiveWatchMessage(message)) return;\n\t\t\tconst subscription = recursiveSubscriptions.get(message.id);\n\t\t\tif (!subscription) return;\n\t\t\tif (message.kind === \"event\") {\n\t\t\t\tsubscription.listener(message.eventType, message.filename);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tonError(new Error(message.message), subscription.path);\n\t\t});\n\t\tworker.on(\"error\", (error) => {\n\t\t\tfor (const subscription of recursiveSubscriptions.values()) onError(error, subscription.path);\n\t\t\t// A worker that raised an uncaught error is dead; keeping it would leave every\n\t\t\t// live subscription silent. Drop it and move the survivors to a fresh worker.\n\t\t\tif (recursiveWorker !== worker) return;\n\t\t\trecursiveWorker = undefined;\n\t\t\tif (recursiveSubscriptions.size === 0) return;\n\t\t\tconst replacement = ensureRecursiveWorker();\n\t\t\tfor (const [id, subscription] of recursiveSubscriptions) {\n\t\t\t\treplacement.postMessage({ kind: \"watch\", id, path: subscription.path, recursive: subscription.recursive });\n\t\t\t}\n\t\t});\n\t\trecursiveWorker = worker;\n\t\treturn worker;\n\t};\n\n\treturn (path, listener, watchOptions) => {\n\t\tif (WORKER_OFFLOADED_WATCH_PLATFORMS.has(options.platform ?? process.platform)) {\n\t\t\tconst id = nextSubscriptionId++;\n\t\t\tconst recursive = watchOptions?.recursive ?? false;\n\t\t\tensureRecursiveWorker().postMessage({ kind: \"watch\", id, path, recursive });\n\t\t\trecursiveSubscriptions.set(id, { path, listener, recursive });\n\t\t\treturn () => {\n\t\t\t\tif (!recursiveSubscriptions.delete(id)) return;\n\t\t\t\t// Resolve at unsubscribe time: the worker may have been replaced after a crash.\n\t\t\t\tconst worker = recursiveWorker;\n\t\t\t\tif (!worker) return;\n\t\t\t\tif (recursiveSubscriptions.size > 0) {\n\t\t\t\t\tworker.postMessage({ kind: \"unwatch\", id });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\trecursiveWorker = undefined;\n\t\t\t\tvoid worker.terminate().catch((error: unknown) => onError(error, path));\n\t\t\t};\n\t\t}\n\n\t\tconst watcher = watchWithErrorHandler(\n\t\t\tpath,\n\t\t\tlistener,\n\t\t\t() => onError(new Error(`fs.watch failed for ${path}`), path),\n\t\t\t{ recursive: watchOptions?.recursive ?? false },\n\t\t);\n\t\treturn () => watcher?.close();\n\t};\n}\n"]}
1
+ {"version":3,"file":"watch-event-source.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/config-reload/watch-event-source.ts"],"names":[],"mappings":"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","sourcesContent":["import { Worker } from \"node:worker_threads\";\nimport { watchWithErrorHandler } from \"../../../../utils/fs-watch.ts\";\nimport type { WatchEventListener, WatchEventSource } from \"./watch-engine.ts\";\n\nexport interface RecursiveWatchWorker {\n\ton(event: \"message\", listener: (message: unknown) => void): this;\n\ton(event: \"error\", listener: (error: Error) => void): this;\n\tpostMessage(message: unknown): void;\n\tterminate(): Promise<number>;\n}\n\nexport type RecursiveWatchWorkerFactory = () => RecursiveWatchWorker;\n\nexport type FsWatchEventSourceOptions = {\n\treadonly platform?: NodeJS.Platform;\n\treadonly createRecursiveWorker?: RecursiveWatchWorkerFactory;\n};\n\ntype RecursiveWatchMessage =\n\t| { readonly kind: \"event\"; readonly id: number; readonly eventType: string; readonly filename: string | null }\n\t| { readonly kind: \"error\"; readonly id: number; readonly message: string };\n\nconst RECURSIVE_WATCH_WORKER_SOURCE = `\nconst { watch } = require(\"node:fs\");\nconst { parentPort } = require(\"node:worker_threads\");\n\nif (!parentPort) throw new Error(\"Recursive watch worker requires a parent port\");\n\nconst watchers = new Map();\nparentPort.on(\"message\", (message) => {\n\tif (message.kind === \"unwatch\") {\n\t\twatchers.get(message.id)?.close();\n\t\twatchers.delete(message.id);\n\t\treturn;\n\t}\n\tif (message.kind !== \"watch\") return;\n\ttry {\n\t\tconst watcher = watch(\n\t\t\tmessage.path,\n\t\t\t{ recursive: message.recursive !== false, encoding: \"utf8\" },\n\t\t\t(eventType, filename) => {\n\t\t\t\tparentPort.postMessage({\n\t\t\t\t\tkind: \"event\",\n\t\t\t\t\tid: message.id,\n\t\t\t\t\teventType,\n\t\t\t\t\tfilename: typeof filename === \"string\" ? filename : null,\n\t\t\t\t});\n\t\t\t},\n\t\t);\n\t\twatcher.on(\"error\", (error) => {\n\t\t\tparentPort.postMessage({\n\t\t\t\tkind: \"error\",\n\t\t\t\tid: message.id,\n\t\t\t\tmessage: error instanceof Error ? error.message : String(error),\n\t\t\t});\n\t\t});\n\t\twatchers.set(message.id, watcher);\n\t} catch (error) {\n\t\tparentPort.postMessage({\n\t\t\tkind: \"error\",\n\t\t\tid: message.id,\n\t\t\tmessage: error instanceof Error ? error.message : String(error),\n\t\t});\n\t}\n});\n`;\n\nfunction createRecursiveWatchWorker(): RecursiveWatchWorker {\n\treturn new Worker(RECURSIVE_WATCH_WORKER_SOURCE, {\n\t\teval: true,\n\t});\n}\n\nfunction isRecursiveWatchMessage(message: unknown): message is RecursiveWatchMessage {\n\tif (typeof message !== \"object\" || message === null || !(\"kind\" in message)) return false;\n\tif (!(\"id\" in message) || typeof message.id !== \"number\") return false;\n\tif (message.kind === \"error\") return \"message\" in message && typeof message.message === \"string\";\n\treturn (\n\t\tmessage.kind === \"event\" &&\n\t\t\"eventType\" in message &&\n\t\ttypeof message.eventType === \"string\" &&\n\t\t\"filename\" in message &&\n\t\t(message.filename === null || typeof message.filename === \"string\")\n\t);\n}\n\n/**\n * Platforms whose fs.watch handles are expensive to create and tear down on the\n * interactive main thread: inotify tree walks on Linux, FSEvents stream rendezvous on\n * macOS. Non-recursive per-directory watches pay the same FSEvents setup latency —\n * measured 2.7-8.0s per watch-engine target under system load — so every watch is\n * offloaded, not only recursive ones.\n */\nconst WORKER_OFFLOADED_WATCH_PLATFORMS: ReadonlySet<NodeJS.Platform> = new Set([\"linux\", \"darwin\"]);\n\n/** Production event source. Watch setup and teardown run off the interactive main thread. */\nexport function createFsWatchEventSource(\n\tonError: (error: unknown, path: string) => void = () => {},\n\toptions: FsWatchEventSourceOptions = {},\n): WatchEventSource {\n\tconst recursiveSubscriptions = new Map<\n\t\tnumber,\n\t\t{ readonly path: string; readonly listener: WatchEventListener; readonly recursive: boolean }\n\t>();\n\tlet recursiveWorker: RecursiveWatchWorker | undefined;\n\tlet nextSubscriptionId = 1;\n\n\tconst ensureRecursiveWorker = (): RecursiveWatchWorker => {\n\t\tif (recursiveWorker) return recursiveWorker;\n\t\tconst worker = (options.createRecursiveWorker ?? createRecursiveWatchWorker)();\n\t\tworker.on(\"message\", (message) => {\n\t\t\tif (!isRecursiveWatchMessage(message)) return;\n\t\t\tconst subscription = recursiveSubscriptions.get(message.id);\n\t\t\tif (!subscription) return;\n\t\t\tif (message.kind === \"event\") {\n\t\t\t\tsubscription.listener(message.eventType, message.filename);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tonError(new Error(message.message), subscription.path);\n\t\t});\n\t\tworker.on(\"error\", (error) => {\n\t\t\tfor (const subscription of recursiveSubscriptions.values()) onError(error, subscription.path);\n\t\t\t// A worker that raised an uncaught error is dead; keeping it would leave every\n\t\t\t// live subscription silent. Drop it and move the survivors to a fresh worker.\n\t\t\tif (recursiveWorker !== worker) return;\n\t\t\trecursiveWorker = undefined;\n\t\t\tif (recursiveSubscriptions.size === 0) return;\n\t\t\tconst replacement = ensureRecursiveWorker();\n\t\t\tfor (const [id, subscription] of recursiveSubscriptions) {\n\t\t\t\treplacement.postMessage({ kind: \"watch\", id, path: subscription.path, recursive: subscription.recursive });\n\t\t\t}\n\t\t});\n\t\trecursiveWorker = worker;\n\t\treturn worker;\n\t};\n\n\treturn (path, listener, watchOptions) => {\n\t\tif (WORKER_OFFLOADED_WATCH_PLATFORMS.has(options.platform ?? process.platform)) {\n\t\t\tconst id = nextSubscriptionId++;\n\t\t\tconst recursive = watchOptions?.recursive ?? false;\n\t\t\tensureRecursiveWorker().postMessage({ kind: \"watch\", id, path, recursive });\n\t\t\trecursiveSubscriptions.set(id, { path, listener, recursive });\n\t\t\treturn () => {\n\t\t\t\tif (!recursiveSubscriptions.delete(id)) return;\n\t\t\t\t// Resolve at unsubscribe time: the worker may have been replaced after a crash.\n\t\t\t\tconst worker = recursiveWorker;\n\t\t\t\tif (!worker) return;\n\t\t\t\tif (recursiveSubscriptions.size > 0) {\n\t\t\t\t\tworker.postMessage({ kind: \"unwatch\", id });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\trecursiveWorker = undefined;\n\t\t\t\tvoid worker.terminate().catch((error: unknown) => onError(error, path));\n\t\t\t};\n\t\t}\n\n\t\tconst watcher = watchWithErrorHandler(\n\t\t\tpath,\n\t\t\tlistener,\n\t\t\t() => onError(new Error(`fs.watch failed for ${path}`), path),\n\t\t\t{ recursive: watchOptions?.recursive ?? false },\n\t\t);\n\t\treturn () => watcher?.close();\n\t};\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"account-command.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/account-command.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Credential } from \"@earendil-works/pi-ai\";\nimport type { ExtensionAPI, ExtensionCommandContext } from \"../../types.ts\";\nimport { emitProviderAccountsChanged } from \"../claude-sdk-oauth/account-events.ts\";\nimport {\n\ttype CursorCliAccountSlot,\n\ttype CursorCliOauthCredential,\n\temptyCredential,\n\tlistAccounts,\n\tpinAccount,\n\tremoveAccount,\n} from \"./accounts.ts\";\nimport { selectAccount } from \"./affinity.ts\";\nimport {\n\ttype CursorCliGenerationGuard,\n\tcollectCursorCliStatus,\n\tNATIVE_CURSOR_PROVIDER_ID,\n\tregisterCursorCliShutdownSafety,\n\trenderCursorCliStatus,\n} from \"./diagnostics.ts\";\nimport {\n\tCURSOR_CLI_OAUTH_PROVIDER_ID,\n\tconfirmCursorCliNoApprovalAcknowledgement,\n\timportLocalCursorCredential,\n\timportNativeCursorCredential,\n\ttype LocalCursorImportDeps,\n} from \"./oauth-login.ts\";\nimport { type CursorCliSessionRouter, cursorCliSessionRouter } from \"./session-router.ts\";\nimport {\n\ttype CursorCliOauthProviderSettings,\n\tloadCursorCliOauthProviderSettingsFromDisk,\n\tpersistCursorCliNoApprovalAcknowledgement,\n\tpersistCursorCliOauthEnabled,\n} from \"./settings.ts\";\n\n/** Injectable seams; every default resolves real on-disk state at invocation time. */\nexport type CursorCliAccountCommandDeps = {\n\treadonly loadSettings?: (cwd: string) => CursorCliOauthProviderSettings;\n\treadonly router?: CursorCliSessionRouter;\n\treadonly resolveExecutable?: (settings: CursorCliOauthProviderSettings) => string;\n\treadonly probeVersion?: (executable: string) => Promise<string>;\n\treadonly readNativeCredential?: () => Credential | undefined | Promise<Credential | undefined>;\n\treadonly importCredential?: typeof importLocalCursorCredential;\n\treadonly importNativeCredential?: typeof importNativeCursorCredential;\n\treadonly importDeps?: LocalCursorImportDeps;\n\t/** Acknowledgement persistence seam; the default read-modify-writes the global settings file. */\n\treadonly persistAcknowledgement?: (cwd: string, acknowledgedAt: string) => void;\n\t/** Enablement persistence seam; explicit login/import actions activate the fallback lane. */\n\treadonly persistEnabled?: (cwd: string, enabled: boolean) => void;\n\treadonly now?: () => number;\n\treadonly generation?: CursorCliGenerationGuard;\n};\n\nconst USAGE =\n\t\"Usage: /cursor-account [list | add | remove <name> | pin <name> | unpin | import [local | native] | acknowledge | status]\";\n\nfunction asCursorCredential(value: Credential | undefined): CursorCliOauthCredential {\n\treturn value !== undefined && value.type === \"oauth\" ? (value as CursorCliOauthCredential) : emptyCredential();\n}\n\nfunction parseArgs(rawArgs: string): string[] {\n\treturn rawArgs.trim().split(/\\s+/).filter(Boolean);\n}\n\nfunction slotStatus(slot: CursorCliAccountSlot, now: number): string {\n\tif (slot.blockReason === \"auth_error\") return \"blocked until re-login\";\n\tif (slot.blockedUntil !== undefined && slot.blockedUntil > now) {\n\t\treturn `blocked until ${new Date(slot.blockedUntil).toISOString()} (${slot.blockReason ?? \"rate_limit\"})`;\n\t}\n\treturn \"available\";\n}\n\nfunction authEventMessage(event: unknown): string {\n\tif (event === null || typeof event !== \"object\") return \"Cursor CLI (OAuth) authentication update.\";\n\tconst value = event as Record<string, unknown>;\n\tif (value.type === \"auth_url\" && typeof value.url === \"string\") {\n\t\treturn `Open this URL to authorize Cursor CLI (OAuth):\\n${value.url}`;\n\t}\n\tif (value.type === \"device_code\" && typeof value.verificationUri === \"string\") {\n\t\treturn `Open this URL to authorize Cursor CLI (OAuth):\\n${value.verificationUri}`;\n\t}\n\treturn typeof value.message === \"string\" ? value.message : \"Cursor CLI (OAuth) authentication update.\";\n}\n\n/**\n * Registers `/cursor-account` plus the reload/shutdown teardown for this\n * extension generation: the command reads account state fresh from the\n * credential store on every invocation, and every deferred continuation is\n * fenced so a retired generation is never touched after a reload.\n */\nexport function registerCursorCliAccountCommand(pi: ExtensionAPI, deps: CursorCliAccountCommandDeps = {}): void {\n\tconst loadSettings = deps.loadSettings ?? ((cwd: string) => loadCursorCliOauthProviderSettingsFromDisk(cwd));\n\tconst now = deps.now ?? Date.now;\n\t// One guard per registration: a reload rebuilds the extension and gets a\n\t// fresh fence, while the child registry stays process-wide.\n\tconst generation = registerCursorCliShutdownSafety(pi, { generation: deps.generation });\n\n\tpi.registerCommand(\"cursor-account\", {\n\t\tdescription: \"List and manage Cursor CLI (OAuth) accounts.\",\n\t\targumentHint: \"[list | add | remove <name> | pin <name> | unpin | import | acknowledge | status]\",\n\t\thandler: async (rawArgs: string, ctx: ExtensionCommandContext): Promise<void> => {\n\t\t\ttry {\n\t\t\t\tconst args = parseArgs(rawArgs);\n\t\t\t\tconst action = args[0] ?? \"list\";\n\t\t\t\tif (action === \"list\") {\n\t\t\t\t\tshowAccounts(ctx, loadSettings(ctx.cwd), generation, now);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (action === \"add\") {\n\t\t\t\t\tawait addAccount(ctx);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (action === \"remove\") {\n\t\t\t\t\tawait removeNamedAccount(ctx, args[1]);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (action === \"pin\" && args[1] !== undefined) {\n\t\t\t\t\tawait pinNamedAccount(ctx, args[1]);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (action === \"unpin\") {\n\t\t\t\t\tawait unpinAccount(ctx);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (action === \"import\") {\n\t\t\t\t\tconst source = args[1] ?? \"local\";\n\t\t\t\t\tif (source !== \"local\" && source !== \"native\") {\n\t\t\t\t\t\tctx.ui.notify(USAGE, \"error\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tawait importAccount(ctx, deps, source);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (action === \"acknowledge\") {\n\t\t\t\t\tawait acknowledgeNoApproval(ctx, deps, generation);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (action === \"status\") {\n\t\t\t\t\tawait showStatus(ctx, deps, { loadSettings, generation, now });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tctx.ui.notify(USAGE, \"error\");\n\t\t\t} catch (error) {\n\t\t\t\tctx.ui.notify(error instanceof Error ? error.message : String(error), \"error\");\n\t\t\t}\n\t\t},\n\t});\n}\n\nfunction showAccounts(\n\tctx: ExtensionCommandContext,\n\tsettings: CursorCliOauthProviderSettings,\n\tgeneration: CursorCliGenerationGuard,\n\tnow: () => number,\n): void {\n\tconst credential = asCursorCredential(ctx.modelRegistry.authStorage.get(CURSOR_CLI_OAUTH_PROVIDER_ID));\n\tconst accounts = listAccounts(credential);\n\tconst pinned = settings.pinnedAccount ?? credential.pinned;\n\tconst pinSource = settings.pinnedAccount !== undefined ? \"settings\" : \"stored\";\n\tlet affinityPick: string | undefined;\n\tlet affinityError: string | undefined;\n\tif (accounts.length > 0) {\n\t\ttry {\n\t\t\taffinityPick = selectAccount(accounts, {\n\t\t\t\tsessionId: ctx.sessionManager.getSessionId(),\n\t\t\t\tpinnedAccount: pinned,\n\t\t\t\tnow: now(),\n\t\t\t}).name;\n\t\t} catch (error) {\n\t\t\taffinityError = error instanceof Error ? error.message : String(error);\n\t\t}\n\t}\n\tconst lines = [\"Cursor CLI (OAuth) accounts:\"];\n\tif (accounts.length === 0) lines.push(\" (none)\");\n\tfor (const account of accounts) {\n\t\tconst states = [account.name, account.source, slotStatus(account, now())];\n\t\tif (account.name === pinned) states.push(\"pinned\");\n\t\tif (account.name === affinityPick) states.push(\"affinity pick\");\n\t\tlines.push(` ${states.join(\" | \")}`);\n\t}\n\tlines.push(`Pinned account: ${pinned === undefined ? \"none\" : `${pinned} (${pinSource})`}`);\n\tlines.push(`Affinity pick: ${affinityPick ?? (affinityError ? `unavailable - ${affinityError}` : \"none\")}`);\n\tgeneration.runFencedSync(ctx, () => ctx.ui.notify(lines.join(\"\\n\"), \"info\"));\n}\n\nasync function addAccount(ctx: ExtensionCommandContext): Promise<void> {\n\tif (!ctx.hasUI) {\n\t\tctx.ui.notify(\"/cursor-account add requires an interactive UI.\", \"error\");\n\t\treturn;\n\t}\n\ttry {\n\t\tawait ctx.modelRegistry.modelRuntime.login(CURSOR_CLI_OAUTH_PROVIDER_ID, \"oauth\", {\n\t\t\tsignal: ctx.signal,\n\t\t\tprompt: async (prompt: { message: string }) => {\n\t\t\t\tconst answer = await ctx.ui.input(prompt.message);\n\t\t\t\tif (answer === undefined) throw new Error(\"Login cancelled\");\n\t\t\t\treturn answer;\n\t\t\t},\n\t\t\tnotify: (event: unknown) => ctx.ui.notify(authEventMessage(event), \"info\"),\n\t\t});\n\t\temitProviderAccountsChanged(CURSOR_CLI_OAUTH_PROVIDER_ID);\n\t\tctx.ui.notify(\"Cursor CLI (OAuth) account added.\", \"info\");\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tif (message !== \"Login cancelled\") {\n\t\t\tctx.ui.notify(`Failed to add Cursor CLI (OAuth) account: ${message}`, \"error\");\n\t\t}\n\t}\n}\n\nasync function removeNamedAccount(ctx: ExtensionCommandContext, name: string | undefined): Promise<void> {\n\tif (!name) {\n\t\tctx.ui.notify(\"Usage: /cursor-account remove <name>\", \"error\");\n\t\treturn;\n\t}\n\tlet removed = false;\n\ttry {\n\t\tawait ctx.modelRegistry.authStorage.modify(CURSOR_CLI_OAUTH_PROVIDER_ID, async (current) => {\n\t\t\tconst credential = asCursorCredential(current);\n\t\t\tif (!listAccounts(credential).some((account) => account.name === name)) return current;\n\t\t\tremoved = true;\n\t\t\treturn removeAccount(credential, name);\n\t\t});\n\t} catch (error) {\n\t\tctx.ui.notify(error instanceof Error ? error.message : String(error), \"error\");\n\t\treturn;\n\t}\n\tif (!removed) {\n\t\tctx.ui.notify(`Cursor CLI (OAuth) account '${name}' does not exist.`, \"error\");\n\t\treturn;\n\t}\n\temitProviderAccountsChanged(CURSOR_CLI_OAUTH_PROVIDER_ID);\n\tctx.ui.notify(`Removed Cursor CLI (OAuth) account: ${name}.`, \"info\");\n}\n\nasync function pinNamedAccount(ctx: ExtensionCommandContext, name: string): Promise<void> {\n\ttry {\n\t\tawait ctx.modelRegistry.authStorage.modify(CURSOR_CLI_OAUTH_PROVIDER_ID, async (current) => {\n\t\t\tconst credential = asCursorCredential(current);\n\t\t\tif (!listAccounts(credential).some((account) => account.name === name)) {\n\t\t\t\tthrow new Error(`Cursor CLI (OAuth) account '${name}' does not exist.`);\n\t\t\t}\n\t\t\treturn pinAccount(credential, name);\n\t\t});\n\t} catch (error) {\n\t\tctx.ui.notify(error instanceof Error ? error.message : String(error), \"error\");\n\t\treturn;\n\t}\n\temitProviderAccountsChanged(CURSOR_CLI_OAUTH_PROVIDER_ID);\n\tctx.ui.notify(`Pinned Cursor CLI (OAuth) account: ${name}.`, \"info\");\n}\n\nasync function unpinAccount(ctx: ExtensionCommandContext): Promise<void> {\n\tlet hadPin = false;\n\ttry {\n\t\tawait ctx.modelRegistry.authStorage.modify(CURSOR_CLI_OAUTH_PROVIDER_ID, async (current) => {\n\t\t\tconst credential = asCursorCredential(current);\n\t\t\tif (credential.pinned === undefined) return current;\n\t\t\thadPin = true;\n\t\t\tconst { pinned: _pinned, ...unpinned } = credential;\n\t\t\treturn unpinned;\n\t\t});\n\t} catch (error) {\n\t\tctx.ui.notify(error instanceof Error ? error.message : String(error), \"error\");\n\t\treturn;\n\t}\n\tif (!hadPin) {\n\t\tctx.ui.notify(\"No stored Cursor CLI (OAuth) account pin is set.\", \"info\");\n\t\treturn;\n\t}\n\temitProviderAccountsChanged(CURSOR_CLI_OAUTH_PROVIDER_ID);\n\tctx.ui.notify(\"Unpinned Cursor CLI (OAuth) account.\", \"info\");\n}\n\nasync function importAccount(\n\tctx: ExtensionCommandContext,\n\tdeps: CursorCliAccountCommandDeps,\n\tsource: \"local\" | \"native\",\n): Promise<void> {\n\tconst importCredential = deps.importCredential ?? importLocalCursorCredential;\n\tconst importNativeCredential = deps.importNativeCredential ?? importNativeCursorCredential;\n\tconst importDeps: LocalCursorImportDeps = { ...deps.importDeps };\n\tif (importDeps.onPrompt === undefined && ctx.hasUI) {\n\t\timportDeps.onPrompt = async (prompt: { message: string }) => {\n\t\t\tconst answer = await ctx.ui.input(prompt.message);\n\t\t\tif (answer === undefined) throw new Error(\"Import cancelled\");\n\t\t\treturn answer;\n\t\t};\n\t}\n\tlet importedName: string | undefined;\n\ttry {\n\t\tawait ctx.modelRegistry.authStorage.modify(CURSOR_CLI_OAUTH_PROVIDER_ID, async (current) => {\n\t\t\tconst before = asCursorCredential(current);\n\t\t\tconst updated =\n\t\t\t\tsource === \"native\"\n\t\t\t\t\t? await importNativeCredential(\n\t\t\t\t\t\t\tbefore,\n\t\t\t\t\t\t\tdeps.readNativeCredential ?? (() => ctx.modelRegistry.authStorage.get(NATIVE_CURSOR_PROVIDER_ID)),\n\t\t\t\t\t\t)\n\t\t\t\t\t: await importCredential(before, importDeps);\n\t\t\tconst existing = new Set(listAccounts(before).map((account) => account.name));\n\t\t\timportedName = listAccounts(updated).find((account) => !existing.has(account.name))?.name;\n\t\t\treturn updated;\n\t\t});\n\t} catch (error) {\n\t\tctx.ui.notify(\n\t\t\t`Failed to import local Cursor credential: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\"error\",\n\t\t);\n\t\treturn;\n\t}\n\tconst persistEnabled = deps.persistEnabled ?? persistCursorCliOauthEnabled;\n\ttry {\n\t\tpersistEnabled(ctx.cwd, true);\n\t\tawait ctx.modelRegistry.modelRuntime.refresh({\n\t\t\tallowNetwork: false,\n\t\t\tproviders: [CURSOR_CLI_OAUTH_PROVIDER_ID],\n\t\t});\n\t} catch (error) {\n\t\tctx.ui.notify(\n\t\t\t`Imported ${source === \"native\" ? \"native \" : \"\"}Cursor credential, but provider activation failed: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\"warning\",\n\t\t);\n\t\treturn;\n\t}\n\temitProviderAccountsChanged(CURSOR_CLI_OAUTH_PROVIDER_ID);\n\tctx.ui.notify(\n\t\t`Imported ${source === \"native\" ? \"native \" : \"local \"}Cursor credential as '${importedName ?? \"a new account\"}' (copied into this provider's store).`,\n\t\t\"info\",\n\t);\n}\n\nasync function acknowledgeNoApproval(\n\tctx: ExtensionCommandContext,\n\tdeps: CursorCliAccountCommandDeps,\n\tgeneration: CursorCliGenerationGuard,\n): Promise<void> {\n\tif (!ctx.hasUI) {\n\t\tctx.ui.notify(\"/cursor-account acknowledge requires an interactive UI.\", \"error\");\n\t\treturn;\n\t}\n\tconst persist = deps.persistAcknowledgement ?? persistCursorCliNoApprovalAcknowledgement;\n\tconst acknowledgedAt = await confirmCursorCliNoApprovalAcknowledgement(\n\t\tasync (ask) => (await ctx.ui.input(ask.message)) ?? \"\",\n\t\t() => new Date((deps.now ?? Date.now)()),\n\t);\n\tif (acknowledgedAt === undefined) {\n\t\tgeneration.runFencedSync(ctx, () =>\n\t\t\tctx.ui.notify(\n\t\t\t\t\"No acknowledgement written: unattended Cursor CLI execution stays off until you acknowledge.\",\n\t\t\t\t\"info\",\n\t\t\t),\n\t\t);\n\t\treturn;\n\t}\n\tpersist(ctx.cwd, acknowledgedAt);\n\tgeneration.runFencedSync(ctx, () =>\n\t\tctx.ui.notify(`Acknowledged unattended Cursor CLI tool execution at ${acknowledgedAt}.`, \"info\"),\n\t);\n}\n\nasync function showStatus(\n\tctx: ExtensionCommandContext,\n\tdeps: CursorCliAccountCommandDeps,\n\tbound: {\n\t\tloadSettings: (cwd: string) => CursorCliOauthProviderSettings;\n\t\tgeneration: CursorCliGenerationGuard;\n\t\tnow: () => number;\n\t},\n): Promise<void> {\n\t// Context reads happen before any await; the render continuation is fenced\n\t// so a reload during the version probe can never touch a retired context.\n\tconst sessionId = ctx.sessionManager.getSessionId();\n\tconst report = await collectCursorCliStatus({\n\t\tsessionId,\n\t\tsettings: bound.loadSettings(ctx.cwd),\n\t\treadCredential: () => ctx.modelRegistry.authStorage.get(CURSOR_CLI_OAUTH_PROVIDER_ID),\n\t\treadNativeCredential:\n\t\t\tdeps.readNativeCredential ?? (() => ctx.modelRegistry.authStorage.get(NATIVE_CURSOR_PROVIDER_ID)),\n\t\trouter: deps.router ?? cursorCliSessionRouter,\n\t\tresolveExecutable: deps.resolveExecutable,\n\t\tprobeVersion: deps.probeVersion,\n\t\tnow: bound.now,\n\t});\n\tbound.generation.runFencedSync(ctx, () => ctx.ui.notify(renderCursorCliStatus(report), \"info\"));\n}\n"]}
1
+ {"version":3,"file":"account-command.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/account-command.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Credential } from \"@earendil-works/pi-ai\";\nimport type { ExtensionAPI, ExtensionCommandContext } from \"../../types.ts\";\nimport { emitProviderAccountsChanged } from \"../claude-sdk-oauth/account-events.ts\";\nimport {\n\ttype CursorCliAccountSlot,\n\ttype CursorCliOauthCredential,\n\temptyCredential,\n\tlistAccounts,\n\tpinAccount,\n\tremoveAccount,\n} from \"./accounts.ts\";\nimport { selectAccount } from \"./affinity.ts\";\nimport {\n\ttype CursorCliGenerationGuard,\n\tcollectCursorCliStatus,\n\tNATIVE_CURSOR_PROVIDER_ID,\n\tregisterCursorCliShutdownSafety,\n\trenderCursorCliStatus,\n} from \"./diagnostics.ts\";\nimport {\n\tCURSOR_CLI_OAUTH_PROVIDER_ID,\n\tconfirmCursorCliNoApprovalAcknowledgement,\n\timportLocalCursorCredential,\n\timportNativeCursorCredential,\n\ttype LocalCursorImportDeps,\n} from \"./oauth-login.ts\";\nimport { type CursorCliSessionRouter, cursorCliSessionRouter } from \"./session-router.ts\";\nimport {\n\ttype CursorCliOauthProviderSettings,\n\tloadCursorCliOauthProviderSettingsFromDisk,\n\tpersistCursorCliNoApprovalAcknowledgement,\n\tpersistCursorCliOauthEnabled,\n} from \"./settings.ts\";\n\n/** Injectable seams; every default resolves real on-disk state at invocation time. */\nexport type CursorCliAccountCommandDeps = {\n\treadonly loadSettings?: (cwd: string) => CursorCliOauthProviderSettings;\n\treadonly router?: CursorCliSessionRouter;\n\treadonly resolveExecutable?: (settings: CursorCliOauthProviderSettings) => string;\n\treadonly probeVersion?: (executable: string) => Promise<string>;\n\treadonly readNativeCredential?: () => Credential | undefined | Promise<Credential | undefined>;\n\treadonly importCredential?: typeof importLocalCursorCredential;\n\treadonly importNativeCredential?: typeof importNativeCursorCredential;\n\treadonly importDeps?: LocalCursorImportDeps;\n\t/** Acknowledgement persistence seam; the default read-modify-writes the global settings file. */\n\treadonly persistAcknowledgement?: (cwd: string, acknowledgedAt: string) => void;\n\t/** Enablement persistence seam; explicit login/import actions activate the fallback lane. */\n\treadonly persistEnabled?: (cwd: string, enabled: boolean) => void;\n\treadonly now?: () => number;\n\treadonly generation?: CursorCliGenerationGuard;\n};\n\nconst USAGE =\n\t\"Usage: /cursor-account [list | add | remove <name> | pin <name> | unpin | import [local | native] | acknowledge | status]\";\n\nfunction asCursorCredential(value: Credential | undefined): CursorCliOauthCredential {\n\treturn value !== undefined && value.type === \"oauth\" ? (value as CursorCliOauthCredential) : emptyCredential();\n}\n\nfunction parseArgs(rawArgs: string): string[] {\n\treturn rawArgs.trim().split(/\\s+/).filter(Boolean);\n}\n\nfunction slotStatus(slot: CursorCliAccountSlot, now: number): string {\n\tif (slot.blockReason === \"auth_error\") return \"blocked until re-login\";\n\tif (slot.blockedUntil !== undefined && slot.blockedUntil > now) {\n\t\treturn `blocked until ${new Date(slot.blockedUntil).toISOString()} (${slot.blockReason ?? \"rate_limit\"})`;\n\t}\n\treturn \"available\";\n}\n\nfunction authEventMessage(event: unknown): string {\n\tif (event === null || typeof event !== \"object\") return \"Cursor CLI (OAuth) authentication update.\";\n\tconst value = event as Record<string, unknown>;\n\tif (value.type === \"auth_url\" && typeof value.url === \"string\") {\n\t\treturn `Open this URL to authorize Cursor CLI (OAuth):\\n${value.url}`;\n\t}\n\tif (value.type === \"device_code\" && typeof value.verificationUri === \"string\") {\n\t\treturn `Open this URL to authorize Cursor CLI (OAuth):\\n${value.verificationUri}`;\n\t}\n\treturn typeof value.message === \"string\" ? value.message : \"Cursor CLI (OAuth) authentication update.\";\n}\n\n/**\n * Registers `/cursor-account` plus the reload/shutdown teardown for this\n * extension generation: the command reads account state fresh from the\n * credential store on every invocation, and every deferred continuation is\n * fenced so a retired generation is never touched after a reload.\n */\nexport function registerCursorCliAccountCommand(pi: ExtensionAPI, deps: CursorCliAccountCommandDeps = {}): void {\n\tconst loadSettings = deps.loadSettings ?? ((cwd: string) => loadCursorCliOauthProviderSettingsFromDisk(cwd));\n\tconst now = deps.now ?? Date.now;\n\t// One guard per registration: a reload rebuilds the extension and gets a\n\t// fresh fence, while the child registry stays process-wide.\n\tconst generation = registerCursorCliShutdownSafety(pi, { generation: deps.generation });\n\n\tpi.registerCommand(\"cursor-account\", {\n\t\tdescription: \"List and manage Cursor CLI (OAuth) accounts.\",\n\t\targumentHint: \"[list | add | remove <name> | pin <name> | unpin | import | acknowledge | status]\",\n\t\thandler: async (rawArgs: string, ctx: ExtensionCommandContext): Promise<void> => {\n\t\t\ttry {\n\t\t\t\tconst args = parseArgs(rawArgs);\n\t\t\t\tconst action = args[0] ?? \"list\";\n\t\t\t\tif (action === \"list\") {\n\t\t\t\t\tshowAccounts(ctx, loadSettings(ctx.cwd), generation, now);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (action === \"add\") {\n\t\t\t\t\tawait addAccount(ctx);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (action === \"remove\") {\n\t\t\t\t\tawait removeNamedAccount(ctx, args[1]);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (action === \"pin\" && args[1] !== undefined) {\n\t\t\t\t\tawait pinNamedAccount(ctx, args[1]);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (action === \"unpin\") {\n\t\t\t\t\tawait unpinAccount(ctx);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (action === \"import\") {\n\t\t\t\t\tconst source = args[1] ?? \"local\";\n\t\t\t\t\tif (source !== \"local\" && source !== \"native\") {\n\t\t\t\t\t\tctx.ui.notify(USAGE, \"error\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tawait importAccount(ctx, deps, source);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (action === \"acknowledge\") {\n\t\t\t\t\tawait acknowledgeNoApproval(ctx, deps, generation);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (action === \"status\") {\n\t\t\t\t\tawait showStatus(ctx, deps, { loadSettings, generation, now });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tctx.ui.notify(USAGE, \"error\");\n\t\t\t} catch (error) {\n\t\t\t\tctx.ui.notify(error instanceof Error ? error.message : String(error), \"error\");\n\t\t\t}\n\t\t},\n\t});\n}\n\nfunction showAccounts(\n\tctx: ExtensionCommandContext,\n\tsettings: CursorCliOauthProviderSettings,\n\tgeneration: CursorCliGenerationGuard,\n\tnow: () => number,\n): void {\n\tconst credential = asCursorCredential(ctx.modelRegistry.authStorage.get(CURSOR_CLI_OAUTH_PROVIDER_ID));\n\tconst accounts = listAccounts(credential);\n\tconst pinned = settings.pinnedAccount ?? credential.pinned;\n\tconst pinSource = settings.pinnedAccount !== undefined ? \"settings\" : \"stored\";\n\tlet affinityPick: string | undefined;\n\tlet affinityError: string | undefined;\n\tif (accounts.length > 0) {\n\t\ttry {\n\t\t\taffinityPick = selectAccount(accounts, {\n\t\t\t\tsessionId: ctx.sessionManager.getSessionId(),\n\t\t\t\tpinnedAccount: pinned,\n\t\t\t\tnow: now(),\n\t\t\t}).name;\n\t\t} catch (error) {\n\t\t\taffinityError = error instanceof Error ? error.message : String(error);\n\t\t}\n\t}\n\tconst lines = [\"Cursor CLI (OAuth) accounts:\"];\n\tif (accounts.length === 0) lines.push(\" (none)\");\n\tfor (const account of accounts) {\n\t\tconst states = [account.name, account.source, slotStatus(account, now())];\n\t\tif (account.name === pinned) states.push(\"pinned\");\n\t\tif (account.name === affinityPick) states.push(\"affinity pick\");\n\t\tlines.push(` ${states.join(\" | \")}`);\n\t}\n\tlines.push(`Pinned account: ${pinned === undefined ? \"none\" : `${pinned} (${pinSource})`}`);\n\tlines.push(`Affinity pick: ${affinityPick ?? (affinityError ? `unavailable - ${affinityError}` : \"none\")}`);\n\tgeneration.runFencedSync(ctx, () => ctx.ui.notify(lines.join(\"\\n\"), \"info\"));\n}\n\nasync function addAccount(ctx: ExtensionCommandContext): Promise<void> {\n\tif (!ctx.hasUI) {\n\t\tctx.ui.notify(\"/cursor-account add requires an interactive UI.\", \"error\");\n\t\treturn;\n\t}\n\ttry {\n\t\tawait ctx.modelRegistry.modelRuntime.login(CURSOR_CLI_OAUTH_PROVIDER_ID, \"oauth\", {\n\t\t\tsignal: ctx.signal,\n\t\t\tprompt: async (prompt: { message: string }) => {\n\t\t\t\tconst answer = await ctx.ui.input(prompt.message);\n\t\t\t\tif (answer === undefined) throw new Error(\"Login cancelled\");\n\t\t\t\treturn answer;\n\t\t\t},\n\t\t\tnotify: (event: unknown) => ctx.ui.notify(authEventMessage(event), \"info\"),\n\t\t});\n\t\temitProviderAccountsChanged(CURSOR_CLI_OAUTH_PROVIDER_ID);\n\t\tctx.ui.notify(\"Cursor CLI (OAuth) account added.\", \"info\");\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tif (message !== \"Login cancelled\") {\n\t\t\tctx.ui.notify(`Failed to add Cursor CLI (OAuth) account: ${message}`, \"error\");\n\t\t}\n\t}\n}\n\nasync function removeNamedAccount(ctx: ExtensionCommandContext, name: string | undefined): Promise<void> {\n\tif (!name) {\n\t\tctx.ui.notify(\"Usage: /cursor-account remove <name>\", \"error\");\n\t\treturn;\n\t}\n\tlet removed = false;\n\ttry {\n\t\tawait ctx.modelRegistry.authStorage.modify(CURSOR_CLI_OAUTH_PROVIDER_ID, async (current) => {\n\t\t\tconst credential = asCursorCredential(current);\n\t\t\tif (!listAccounts(credential).some((account) => account.name === name)) return current;\n\t\t\tremoved = true;\n\t\t\treturn removeAccount(credential, name);\n\t\t});\n\t} catch (error) {\n\t\tctx.ui.notify(error instanceof Error ? error.message : String(error), \"error\");\n\t\treturn;\n\t}\n\tif (!removed) {\n\t\tctx.ui.notify(`Cursor CLI (OAuth) account '${name}' does not exist.`, \"error\");\n\t\treturn;\n\t}\n\temitProviderAccountsChanged(CURSOR_CLI_OAUTH_PROVIDER_ID);\n\tctx.ui.notify(`Removed Cursor CLI (OAuth) account: ${name}.`, \"info\");\n}\n\nasync function pinNamedAccount(ctx: ExtensionCommandContext, name: string): Promise<void> {\n\ttry {\n\t\tawait ctx.modelRegistry.authStorage.modify(CURSOR_CLI_OAUTH_PROVIDER_ID, async (current) => {\n\t\t\tconst credential = asCursorCredential(current);\n\t\t\tif (!listAccounts(credential).some((account) => account.name === name)) {\n\t\t\t\tthrow new Error(`Cursor CLI (OAuth) account '${name}' does not exist.`);\n\t\t\t}\n\t\t\treturn pinAccount(credential, name);\n\t\t});\n\t} catch (error) {\n\t\tctx.ui.notify(error instanceof Error ? error.message : String(error), \"error\");\n\t\treturn;\n\t}\n\temitProviderAccountsChanged(CURSOR_CLI_OAUTH_PROVIDER_ID);\n\tctx.ui.notify(`Pinned Cursor CLI (OAuth) account: ${name}.`, \"info\");\n}\n\nasync function unpinAccount(ctx: ExtensionCommandContext): Promise<void> {\n\tlet hadPin = false;\n\ttry {\n\t\tawait ctx.modelRegistry.authStorage.modify(CURSOR_CLI_OAUTH_PROVIDER_ID, async (current) => {\n\t\t\tconst credential = asCursorCredential(current);\n\t\t\tif (credential.pinned === undefined) return current;\n\t\t\thadPin = true;\n\t\t\tconst { pinned: _pinned, ...unpinned } = credential;\n\t\t\treturn unpinned;\n\t\t});\n\t} catch (error) {\n\t\tctx.ui.notify(error instanceof Error ? error.message : String(error), \"error\");\n\t\treturn;\n\t}\n\tif (!hadPin) {\n\t\tctx.ui.notify(\"No stored Cursor CLI (OAuth) account pin is set.\", \"info\");\n\t\treturn;\n\t}\n\temitProviderAccountsChanged(CURSOR_CLI_OAUTH_PROVIDER_ID);\n\tctx.ui.notify(\"Unpinned Cursor CLI (OAuth) account.\", \"info\");\n}\n\nasync function importAccount(\n\tctx: ExtensionCommandContext,\n\tdeps: CursorCliAccountCommandDeps,\n\tsource: \"local\" | \"native\",\n): Promise<void> {\n\tconst importCredential = deps.importCredential ?? importLocalCursorCredential;\n\tconst importNativeCredential = deps.importNativeCredential ?? importNativeCursorCredential;\n\tconst importDeps: LocalCursorImportDeps = { ...deps.importDeps };\n\tif (importDeps.onPrompt === undefined && ctx.hasUI) {\n\t\timportDeps.onPrompt = async (prompt: { message: string }) => {\n\t\t\tconst answer = await ctx.ui.input(prompt.message);\n\t\t\tif (answer === undefined) throw new Error(\"Import cancelled\");\n\t\t\treturn answer;\n\t\t};\n\t}\n\tlet importedName: string | undefined;\n\ttry {\n\t\tawait ctx.modelRegistry.authStorage.modify(CURSOR_CLI_OAUTH_PROVIDER_ID, async (current) => {\n\t\t\tconst before = asCursorCredential(current);\n\t\t\tconst updated =\n\t\t\t\tsource === \"native\"\n\t\t\t\t\t? await importNativeCredential(\n\t\t\t\t\t\t\tbefore,\n\t\t\t\t\t\t\tdeps.readNativeCredential ?? (() => ctx.modelRegistry.authStorage.get(NATIVE_CURSOR_PROVIDER_ID)),\n\t\t\t\t\t\t)\n\t\t\t\t\t: await importCredential(before, importDeps);\n\t\t\tconst existing = new Set(listAccounts(before).map((account) => account.name));\n\t\t\timportedName = listAccounts(updated).find((account) => !existing.has(account.name))?.name;\n\t\t\treturn updated;\n\t\t});\n\t} catch (error) {\n\t\tctx.ui.notify(\n\t\t\t`Failed to import local Cursor credential: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\"error\",\n\t\t);\n\t\treturn;\n\t}\n\tconst persistEnabled = deps.persistEnabled ?? persistCursorCliOauthEnabled;\n\ttry {\n\t\tpersistEnabled(ctx.cwd, true);\n\t\tawait ctx.modelRegistry.modelRuntime.refresh({\n\t\t\tallowNetwork: false,\n\t\t\tproviders: [CURSOR_CLI_OAUTH_PROVIDER_ID],\n\t\t});\n\t} catch (error) {\n\t\tctx.ui.notify(\n\t\t\t`Imported ${source === \"native\" ? \"native \" : \"\"}Cursor credential, but provider activation failed: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\"warning\",\n\t\t);\n\t\treturn;\n\t}\n\temitProviderAccountsChanged(CURSOR_CLI_OAUTH_PROVIDER_ID);\n\tctx.ui.notify(\n\t\t`Imported ${source === \"native\" ? \"native \" : \"local \"}Cursor credential as '${importedName ?? \"a new account\"}' (copied into this provider's store).`,\n\t\t\"info\",\n\t);\n}\n\nasync function acknowledgeNoApproval(\n\tctx: ExtensionCommandContext,\n\tdeps: CursorCliAccountCommandDeps,\n\tgeneration: CursorCliGenerationGuard,\n): Promise<void> {\n\tif (!ctx.hasUI) {\n\t\tctx.ui.notify(\"/cursor-account acknowledge requires an interactive UI.\", \"error\");\n\t\treturn;\n\t}\n\tconst persist = deps.persistAcknowledgement ?? persistCursorCliNoApprovalAcknowledgement;\n\tconst acknowledgedAt = await confirmCursorCliNoApprovalAcknowledgement(\n\t\tasync (ask) => (await ctx.ui.input(ask.message)) ?? \"\",\n\t\t() => new Date((deps.now ?? Date.now)()),\n\t);\n\tif (acknowledgedAt === undefined) {\n\t\tgeneration.runFencedSync(ctx, () =>\n\t\t\tctx.ui.notify(\n\t\t\t\t\"No acknowledgement written: unattended Cursor CLI execution stays off until you acknowledge.\",\n\t\t\t\t\"info\",\n\t\t\t),\n\t\t);\n\t\treturn;\n\t}\n\tpersist(ctx.cwd, acknowledgedAt);\n\tgeneration.runFencedSync(ctx, () =>\n\t\tctx.ui.notify(`Acknowledged unattended Cursor CLI tool execution at ${acknowledgedAt}.`, \"info\"),\n\t);\n}\n\nasync function showStatus(\n\tctx: ExtensionCommandContext,\n\tdeps: CursorCliAccountCommandDeps,\n\tbound: {\n\t\tloadSettings: (cwd: string) => CursorCliOauthProviderSettings;\n\t\tgeneration: CursorCliGenerationGuard;\n\t\tnow: () => number;\n\t},\n): Promise<void> {\n\t// Context reads happen before any await; the render continuation is fenced\n\t// so a reload during the version probe can never touch a retired context.\n\tconst sessionId = ctx.sessionManager.getSessionId();\n\tconst report = await collectCursorCliStatus({\n\t\tsessionId,\n\t\tsettings: bound.loadSettings(ctx.cwd),\n\t\treadCredential: () => ctx.modelRegistry.authStorage.get(CURSOR_CLI_OAUTH_PROVIDER_ID),\n\t\treadNativeCredential:\n\t\t\tdeps.readNativeCredential ?? (() => ctx.modelRegistry.authStorage.get(NATIVE_CURSOR_PROVIDER_ID)),\n\t\trouter: deps.router ?? cursorCliSessionRouter,\n\t\tresolveExecutable: deps.resolveExecutable,\n\t\tprobeVersion: deps.probeVersion,\n\t\tnow: bound.now,\n\t});\n\tbound.generation.runFencedSync(ctx, () => ctx.ui.notify(renderCursorCliStatus(report), \"info\"));\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/accounts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE1F,MAAM,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,YAAY,GAAG,YAAY,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,YAAY,GAAG,YAAY,CAAA;CAAE,CAAC,CAAC;AAEtH,MAAM,MAAM,wBAAwB,GAAG,eAAe,GAAG;IACxD,QAAQ,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,kBAAkB,CAAC;CAC/B,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;;CAIxB,CAAC;AAEX,wBAAgB,eAAe,IAAI,wBAAwB,CAE1D;AAMD,wBAAgB,YAAY,CAAC,UAAU,EAAE,wBAAwB,GAAG,oBAAoB,EAAE,CAEzF;AAID,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMzD;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,wBAAwB,EAAE,IAAI,EAAE,oBAAoB,GAAG,wBAAwB,CAUrH;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM,GAAG,wBAAwB,CAS1G;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM,GAAG,wBAAwB,CAGvG;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,wBAAwB,GAAG,IAAI,CAQlF;AAED,MAAM,MAAM,sBAAsB,GAAG,CACpC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,WAAW,KACf,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEnE,wBAAsB,WAAW,CAChC,KAAK,EAAE,eAAe,EACtB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,sBAAsB,EACjC,MAAM,EAAE,WAAW,GACjB,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAoBjC"}
1
+ {"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/accounts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE1F,MAAM,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,YAAY,GAAG,YAAY,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,YAAY,GAAG,YAAY,CAAA;CAAE,CAAC,CAAC;AAEtH,MAAM,MAAM,wBAAwB,GAAG,eAAe,GAAG;IACxD,QAAQ,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,kBAAkB,CAAC;CAC/B,CAAC;AAEF,eAAO,MAAM,qBAAqB;aACjC,MAAM,EAAE,0BAA0B;aAClC,OAAO,EAAE,0BAA0B;aACnC,OAAO,EAAE,aAAiB;CACjB,CAAC;AAEX,wBAAgB,eAAe,IAAI,wBAAwB,CAE1D;AAMD,wBAAgB,YAAY,CAAC,UAAU,EAAE,wBAAwB,GAAG,oBAAoB,EAAE,CAEzF;AAID,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMzD;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,wBAAwB,EAAE,IAAI,EAAE,oBAAoB,GAAG,wBAAwB,CAUrH;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM,GAAG,wBAAwB,CAS1G;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM,GAAG,wBAAwB,CAGvG;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,wBAAwB,GAAG,IAAI,CAQlF;AAED,MAAM,MAAM,sBAAsB,GAAG,CACpC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,WAAW,KACf,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEnE,wBAAsB,WAAW,CAChC,KAAK,EAAE,eAAe,EACtB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,sBAAsB,EACjC,MAAM,EAAE,WAAW,GACjB,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAoBjC"}
@@ -1 +1 @@
1
- {"version":3,"file":"affinity.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/affinity.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,2BAA2B,6BAA6B,CAAC;AAEtE,MAAM,MAAM,yBAAyB,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,qBAAa,6BAA8B,SAAQ,KAAK;IACvD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;gBAElC,gBAAgB,EAAE,MAAM,GAAG,SAAS;CAShD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,aAAa,GAAG,WAAW,CAAC,GAAG,MAAM,CAExG;AAMD,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,CAAC,SAAS,yBAAyB,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE,CAK7G;AAMD,qGAAqG;AACrG,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,yBAAyB,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,EAAE,GAAG,SAAa,GAAG,CAAC,EAAE,CAQrH;AAsBD,6FAA6F;AAC7F,wBAAgB,aAAa,CAAC,CAAC,SAAS,yBAAyB,EAChE,QAAQ,EAAE,SAAS,CAAC,EAAE,EACtB,OAAO,GAAE,qBAA0B,GACjC,CAAC,CASH"}
1
+ {"version":3,"file":"affinity.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/affinity.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,2BAA2B,6BAA6B,CAAC;AAEtE,MAAM,MAAM,yBAAyB,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,qBAAa,6BAA8B,SAAQ,KAAK;IACvD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IAE9C,YAAY,gBAAgB,EAAE,MAAM,GAAG,SAAS,EAQ/C;CACD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,aAAa,GAAG,WAAW,CAAC,GAAG,MAAM,CAExG;AAMD,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,CAAC,SAAS,yBAAyB,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE,CAK7G;AAMD,qGAAqG;AACrG,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,yBAAyB,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,EAAE,GAAG,SAAa,GAAG,CAAC,EAAE,CAQrH;AAsBD,6FAA6F;AAC7F,wBAAgB,aAAa,CAAC,CAAC,SAAS,yBAAyB,EAChE,QAAQ,EAAE,SAAS,CAAC,EAAE,EACtB,OAAO,GAAE,qBAA0B,GACjC,CAAC,CASH"}
@@ -1 +1 @@
1
- {"version":3,"file":"affinity.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/affinity.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\n\nexport const DEFAULT_CURSOR_AFFINITY_KEY = \"cursor-cli-oauth-default\";\n\nexport type CursorAffinityAccountSlot = {\n\tname: string;\n\tblockedUntil?: number;\n\tblockReason?: string;\n};\n\nexport type CursorAffinityOptions = {\n\taffinityKey?: string;\n\tsessionId?: string;\n\tpinnedAccount?: string;\n\tnow?: number;\n};\n\nexport class AllCursorAccountsBlockedError extends Error {\n\treadonly soonestUnblockAt: number | undefined;\n\n\tconstructor(soonestUnblockAt: number | undefined) {\n\t\tsuper(\n\t\t\tsoonestUnblockAt === undefined\n\t\t\t\t? \"All Cursor CLI OAuth accounts are blocked until re-login.\"\n\t\t\t\t: `All Cursor CLI OAuth accounts are blocked until ${new Date(soonestUnblockAt).toISOString()}.`,\n\t\t);\n\t\tthis.name = \"AllCursorAccountsBlockedError\";\n\t\tthis.soonestUnblockAt = soonestUnblockAt;\n\t}\n}\n\nexport function getAffinityKey(options: Pick<CursorAffinityOptions, \"affinityKey\" | \"sessionId\">): string {\n\treturn options.affinityKey ?? options.sessionId ?? DEFAULT_CURSOR_AFFINITY_KEY;\n}\n\nfunction score(key: string, accountName: string): bigint {\n\treturn createHash(\"sha256\").update(`${key}\\0${accountName}`).digest().readBigUInt64BE(0);\n}\n\n/** Orders accounts by descending highest-random-weight score for the session key. */\nexport function rendezvousOrder<T extends CursorAffinityAccountSlot>(key: string, accounts: readonly T[]): T[] {\n\treturn [...accounts]\n\t\t.map((account) => ({ account, score: score(key, account.name) }))\n\t\t.sort((left, right) => (right.score > left.score ? 1 : right.score < left.score ? -1 : 0))\n\t\t.map(({ account }) => account);\n}\n\nfunction isBlocked(account: CursorAffinityAccountSlot, now: number): boolean {\n\treturn account.blockReason === \"auth_error\" || (account.blockedUntil !== undefined && account.blockedUntil > now);\n}\n\n/** Clears elapsed temporary blocks while retaining auth failures until the account logs in again. */\nexport function clearExpiredBlocks<T extends CursorAffinityAccountSlot>(accounts: readonly T[], now = Date.now()): T[] {\n\treturn accounts.map((account) => {\n\t\tif (account.blockReason !== \"auth_error\" && account.blockedUntil !== undefined && account.blockedUntil <= now) {\n\t\t\tconst { blockedUntil: _blockedUntil, blockReason: _blockReason, ...available } = account;\n\t\t\treturn available as T;\n\t\t}\n\t\treturn account;\n\t});\n}\n\nfunction selectUnblocked<T extends CursorAffinityAccountSlot>(\n\taccounts: readonly T[],\n\toptions: CursorAffinityOptions,\n\tnow: number,\n): T | undefined {\n\tconst pinned =\n\t\toptions.pinnedAccount === undefined\n\t\t\t? undefined\n\t\t\t: accounts.find((account) => account.name === options.pinnedAccount);\n\tif (pinned && !isBlocked(pinned, now)) return pinned;\n\treturn rendezvousOrder(getAffinityKey(options), accounts).find((account) => !isBlocked(account, now));\n}\n\nfunction soonestUnblockAt(accounts: readonly CursorAffinityAccountSlot[], now: number): number | undefined {\n\tconst candidates = accounts\n\t\t.map((account) => account.blockedUntil)\n\t\t.filter((value): value is number => value !== undefined && value > now);\n\treturn candidates.length === 0 ? undefined : Math.min(...candidates);\n}\n\n/** Selects the pinned account or the first available account in session-stable HRW order. */\nexport function selectAccount<T extends CursorAffinityAccountSlot>(\n\taccounts: readonly T[],\n\toptions: CursorAffinityOptions = {},\n): T {\n\tconst now = options.now ?? Date.now();\n\tconst selected = selectUnblocked(accounts, options, now);\n\tif (selected) return selected;\n\n\tconst cleared = clearExpiredBlocks(accounts, now);\n\tconst afterClear = selectUnblocked(cleared, options, now);\n\tif (afterClear) return afterClear;\n\tthrow new AllCursorAccountsBlockedError(soonestUnblockAt(accounts, now));\n}\n"]}
1
+ {"version":3,"file":"affinity.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/affinity.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\n\nexport const DEFAULT_CURSOR_AFFINITY_KEY = \"cursor-cli-oauth-default\";\n\nexport type CursorAffinityAccountSlot = {\n\tname: string;\n\tblockedUntil?: number;\n\tblockReason?: string;\n};\n\nexport type CursorAffinityOptions = {\n\taffinityKey?: string;\n\tsessionId?: string;\n\tpinnedAccount?: string;\n\tnow?: number;\n};\n\nexport class AllCursorAccountsBlockedError extends Error {\n\treadonly soonestUnblockAt: number | undefined;\n\n\tconstructor(soonestUnblockAt: number | undefined) {\n\t\tsuper(\n\t\t\tsoonestUnblockAt === undefined\n\t\t\t\t? \"All Cursor CLI OAuth accounts are blocked until re-login.\"\n\t\t\t\t: `All Cursor CLI OAuth accounts are blocked until ${new Date(soonestUnblockAt).toISOString()}.`,\n\t\t);\n\t\tthis.name = \"AllCursorAccountsBlockedError\";\n\t\tthis.soonestUnblockAt = soonestUnblockAt;\n\t}\n}\n\nexport function getAffinityKey(options: Pick<CursorAffinityOptions, \"affinityKey\" | \"sessionId\">): string {\n\treturn options.affinityKey ?? options.sessionId ?? DEFAULT_CURSOR_AFFINITY_KEY;\n}\n\nfunction score(key: string, accountName: string): bigint {\n\treturn createHash(\"sha256\").update(`${key}\\0${accountName}`).digest().readBigUInt64BE(0);\n}\n\n/** Orders accounts by descending highest-random-weight score for the session key. */\nexport function rendezvousOrder<T extends CursorAffinityAccountSlot>(key: string, accounts: readonly T[]): T[] {\n\treturn [...accounts]\n\t\t.map((account) => ({ account, score: score(key, account.name) }))\n\t\t.sort((left, right) => (right.score > left.score ? 1 : right.score < left.score ? -1 : 0))\n\t\t.map(({ account }) => account);\n}\n\nfunction isBlocked(account: CursorAffinityAccountSlot, now: number): boolean {\n\treturn account.blockReason === \"auth_error\" || (account.blockedUntil !== undefined && account.blockedUntil > now);\n}\n\n/** Clears elapsed temporary blocks while retaining auth failures until the account logs in again. */\nexport function clearExpiredBlocks<T extends CursorAffinityAccountSlot>(accounts: readonly T[], now = Date.now()): T[] {\n\treturn accounts.map((account) => {\n\t\tif (account.blockReason !== \"auth_error\" && account.blockedUntil !== undefined && account.blockedUntil <= now) {\n\t\t\tconst { blockedUntil: _blockedUntil, blockReason: _blockReason, ...available } = account;\n\t\t\treturn available as T;\n\t\t}\n\t\treturn account;\n\t});\n}\n\nfunction selectUnblocked<T extends CursorAffinityAccountSlot>(\n\taccounts: readonly T[],\n\toptions: CursorAffinityOptions,\n\tnow: number,\n): T | undefined {\n\tconst pinned =\n\t\toptions.pinnedAccount === undefined\n\t\t\t? undefined\n\t\t\t: accounts.find((account) => account.name === options.pinnedAccount);\n\tif (pinned && !isBlocked(pinned, now)) return pinned;\n\treturn rendezvousOrder(getAffinityKey(options), accounts).find((account) => !isBlocked(account, now));\n}\n\nfunction soonestUnblockAt(accounts: readonly CursorAffinityAccountSlot[], now: number): number | undefined {\n\tconst candidates = accounts\n\t\t.map((account) => account.blockedUntil)\n\t\t.filter((value): value is number => value !== undefined && value > now);\n\treturn candidates.length === 0 ? undefined : Math.min(...candidates);\n}\n\n/** Selects the pinned account or the first available account in session-stable HRW order. */\nexport function selectAccount<T extends CursorAffinityAccountSlot>(\n\taccounts: readonly T[],\n\toptions: CursorAffinityOptions = {},\n): T {\n\tconst now = options.now ?? Date.now();\n\tconst selected = selectUnblocked(accounts, options, now);\n\tif (selected) return selected;\n\n\tconst cleared = clearExpiredBlocks(accounts, now);\n\tconst afterClear = selectUnblocked(cleared, options, now);\n\tif (afterClear) return afterClear;\n\tthrow new AllCursorAccountsBlockedError(soonestUnblockAt(accounts, now));\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/diagnostics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EACX,YAAY,EACZ,gBAAgB,EAGhB,MAAM,gBAAgB,CAAC;AASxB,OAAO,EAAE,KAAK,sBAAsB,EAA0B,MAAM,qBAAqB,CAAC;AAC1F,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAEN,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAE5B,MAAM,gBAAgB,CAAC;AAExB,uGAAuG;AACvG,eAAO,MAAM,qCAAqC,eAAe,CAAC;AAClE,qFAAqF;AACrF,eAAO,MAAM,sBAAsB,eAAe,CAAC;AACnD,wFAAwF;AACxF,eAAO,MAAM,+BAA+B,UAAU,CAAC;AACvD,iGAAiG;AACjG,eAAO,MAAM,yBAAyB,WAAW,CAAC;AAMlD,MAAM,MAAM,oBAAoB,GAAG;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAAC;IAC7C,iFAAiF;IACjF,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IACnC,QAAQ,CAAC,IAAI,EAAE,OAAO,sBAAsB,CAAC;IAC7C,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,OAAO,+BAA+B,CAAC;IAC9D,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;IACxC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,QAAQ,CAAC,YAAY,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACvD,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,8BAA8B,CAAC;IAClD,QAAQ,CAAC,cAAc,EAAE,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;IACxF,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;IAC/F,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAC;IACzC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,8BAA8B,KAAK,MAAM,CAAC;IAClF,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC5B,CAAC;AAUF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAI/G;AAED,kGAAkG;AAClG,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAU3F;AAkBD;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA8DtG;AAED,oEAAoE;AACpE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CA4C3E;AAMD,MAAM,MAAM,sBAAsB,CAAC,CAAC,IACjC;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,MAAM,MAAM,6BAA6B,CAAC,CAAC,IAAI;IAC9C,iGAAiG;IACjG,IAAI,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,IAAI,IAAI,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;AAErF;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAOxE;AAED,qGAAqG;AACrG,qBAAa,wBAAwB;IACpC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4C;IACnE,OAAO,CAAC,eAAe,CAAuC;IAE9D,SAAS,IAAI,OAAO,CAEnB;IAED,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAI3B;IAED,SAAS,CAAC,QAAQ,EAAE,wBAAwB,GAAG,IAAI,CAElD;IAED,kGAAkG;IAClG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,IAAI,CAKnE;IAED,gEAAgE;IAChE,kBAAkB,IAAI,MAAM,CAK3B;IAED;;;OAGG;IACG,SAAS,CAAC,CAAC,EAChB,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAC7C,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAOpC;IAED,oGAAoG;IACpG,aAAa,CAAC,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,IAAI,GAAG;QAAE,GAAG,EAAE,OAAO,CAAA;KAAE,CAQvE;IAED,KAAK,CAAC,CAAC,EACN,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAC/C,OAAO,SAAI,GACT,6BAA6B,CAAC,CAAC,CAAC,CAmBlC;IAED,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,aAAa;CAGrB;AAkBD;;;;GAIG;AACH,qBAAa,sBAAsB;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4C;IAErE,KAAK,CAAC,MAAM,EAAE,wBAAwB,GAAG,wBAAwB,CAOhE;IAED,QAAQ,IAAI,MAAM,EAAE,CAEnB;IAED,qGAAqG;IACrG,OAAO,CAAC,OAAO,GAAE,MAAkC,GAAG,MAAM,EAAE,CAuB7D;CACD;AAED,uGAAuG;AACvG,eAAO,MAAM,sBAAsB,wBAA+B,CAAC;AAEnE,gGAAgG;AAChG,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,uBAAuB,EAC9B,QAAQ,GAAE,sBAA+C,GACvD,wBAAwB,CAE1B;AAED,MAAM,MAAM,2BAA2B,GAAG;IACzC,QAAQ,CAAC,UAAU,CAAC,EAAE,wBAAwB,CAAC;IAC/C,QAAQ,CAAC,QAAQ,CAAC,EAAE,sBAAsB,CAAC;CAC3C,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAC9C,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,EAC5B,IAAI,GAAE,2BAAgC,GACpC,wBAAwB,CAe1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/diagnostics.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Credential } from \"@earendil-works/pi-ai\";\nimport type {\n\tExtensionAPI,\n\tExtensionContext,\n\tSessionExtensionsRemovedEvent,\n\tSessionShutdownEvent,\n} from \"../../types.ts\";\nimport { type CursorCliAccountSlot, type CursorCliOauthCredential, emptyCredential, listAccounts } from \"./accounts.ts\";\nimport { selectAccount } from \"./affinity.ts\";\nimport {\n\tCursorAgentNotInstalledError,\n\tdefaultCursorAgentExecutableDeps,\n\tprobeCursorAgentVersion,\n\tresolveCursorAgentExecutable,\n} from \"./executable.ts\";\nimport { type CursorCliSessionRouter, cursorCliSessionRouter } from \"./session-router.ts\";\nimport type { CursorCliOauthProviderSettings } from \"./settings.ts\";\nimport {\n\tCURSOR_CLI_ABORT_GRACE_MS,\n\ttype CursorCliTransportHandle,\n\ttype CursorCliTransportInput,\n\tspawnCursorCli,\n} from \"./transport.ts\";\n\n/** Minimum known-good cursor-agent version; below it senpi warns once per session but never blocks. */\nexport const CURSOR_CLI_MINIMUM_KNOWN_GOOD_VERSION = \"2026.08.11\";\n/** This lane always authenticates through per-account sandboxed HOME file stores. */\nexport const CURSOR_CLI_STATUS_LANE = \"file-store\";\n/** senpi never delegates compaction on this lane, so it is always the context owner. */\nexport const CURSOR_CLI_STATUS_CONTEXT_OWNER = \"senpi\";\n/** The native Cursor provider id; the recommended default when both providers are configured. */\nexport const NATIVE_CURSOR_PROVIDER_ID = \"cursor\";\n\n// ============================================================================\n// Status diagnostics\n// ============================================================================\n\nexport type CursorCliBlockWindow = {\n\treadonly account: string;\n\treadonly reason: \"rate_limit\" | \"auth_error\";\n\t/** Expiry timestamp; undefined means blocked until the account logs in again. */\n\treadonly blockedUntil: number | undefined;\n};\n\nexport type CursorCliStatusReport = {\n\treadonly lane: typeof CURSOR_CLI_STATUS_LANE;\n\treadonly selectedAccount: string | undefined;\n\treadonly pinnedAccount: string | undefined;\n\treadonly chatId: string | undefined;\n\treadonly lastModel: string | undefined;\n\treadonly contextOwner: typeof CURSOR_CLI_STATUS_CONTEXT_OWNER;\n\treadonly executablePath: string | undefined;\n\treadonly executableVersion: string | undefined;\n\treadonly minimumKnownGoodVersion: string;\n\treadonly belowMinimumKnownGood: boolean;\n\treadonly executableProblem: string | undefined;\n\treadonly blockWindows: readonly CursorCliBlockWindow[];\n\treadonly accountNames: readonly string[];\n\treadonly nativeCursorConfigured: boolean;\n};\n\nexport type CursorCliStatusDeps = {\n\treadonly sessionId: string;\n\treadonly settings: CursorCliOauthProviderSettings;\n\treadonly readCredential: () => Credential | undefined | Promise<Credential | undefined>;\n\treadonly readNativeCredential?: () => Credential | undefined | Promise<Credential | undefined>;\n\treadonly router?: CursorCliSessionRouter;\n\treadonly resolveExecutable?: (settings: CursorCliOauthProviderSettings) => string;\n\treadonly probeVersion?: (executable: string) => Promise<string>;\n\treadonly now?: () => number;\n};\n\nfunction asCursorCredential(value: Credential | undefined): CursorCliOauthCredential {\n\treturn value !== undefined && value.type === \"oauth\" ? (value as CursorCliOauthCredential) : emptyCredential();\n}\n\nfunction isUsableOAuthCredential(value: Credential | undefined): boolean {\n\treturn value !== undefined && value.type === \"oauth\" && typeof value.access === \"string\" && value.access.length > 0;\n}\n\nexport function parseCursorCliVersion(version: string): { year: number; month: number; day: number } | undefined {\n\tconst match = /^v?(\\d{1,4})\\.(\\d{1,2})\\.(\\d{1,2})/.exec(version.trim());\n\tif (!match) return undefined;\n\treturn { year: Number(match[1]), month: Number(match[2]), day: Number(match[3]) };\n}\n\n/** Compares two `YYYY.MM.DD[-suffix]` version strings; undefined when either cannot be parsed. */\nexport function compareCursorCliVersions(version: string, floor: string): number | undefined {\n\tconst parsed = parseCursorCliVersion(version);\n\tconst baseline = parseCursorCliVersion(floor);\n\tif (parsed === undefined || baseline === undefined) return undefined;\n\tconst left = [parsed.year, parsed.month, parsed.day] as const;\n\tconst right = [baseline.year, baseline.month, baseline.day] as const;\n\tfor (let index = 0; index < 3; index += 1) {\n\t\tif (left[index] !== right[index]) return left[index] < right[index] ? -1 : 1;\n\t}\n\treturn 0;\n}\n\nfunction blockWindowFor(account: CursorCliAccountSlot, now: number): CursorCliBlockWindow | undefined {\n\tif (account.blockReason === \"auth_error\") {\n\t\treturn { account: account.name, reason: \"auth_error\", blockedUntil: undefined };\n\t}\n\tif (account.blockedUntil !== undefined && account.blockedUntil > now) {\n\t\treturn { account: account.name, reason: \"rate_limit\", blockedUntil: account.blockedUntil };\n\t}\n\treturn undefined;\n}\n\nconst defaultResolveExecutable = (settings: CursorCliOauthProviderSettings): string =>\n\tresolveCursorAgentExecutable({\n\t\t...defaultCursorAgentExecutableDeps(),\n\t\tsettings: { executablePath: settings.executablePath },\n\t});\n\n/**\n * Collects the status snapshot. Account data is read fresh from the credential\n * store on every call - never memoized - so the rendered state always matches\n * the store even after concurrent logins, removals, or failover blocks. Only\n * account names and metadata are extracted; tokens never enter the report.\n */\nexport async function collectCursorCliStatus(deps: CursorCliStatusDeps): Promise<CursorCliStatusReport> {\n\tconst now = deps.now ?? Date.now;\n\tconst credential = asCursorCredential(await deps.readCredential());\n\tconst accounts = listAccounts(credential);\n\tconst pinnedAccount = deps.settings.pinnedAccount ?? credential.pinned;\n\tconst record = (deps.router ?? cursorCliSessionRouter).getRecord(deps.sessionId);\n\n\tlet selectedAccount = record?.accountName;\n\tif (selectedAccount === undefined && accounts.length > 0) {\n\t\ttry {\n\t\t\tselectedAccount = selectAccount(accounts, {\n\t\t\t\tsessionId: deps.sessionId,\n\t\t\t\tpinnedAccount,\n\t\t\t\tnow: now(),\n\t\t\t}).name;\n\t\t} catch {\n\t\t\t// Every account is blocked; report no selection instead of failing status.\n\t\t}\n\t}\n\n\tlet executablePath: string | undefined;\n\tlet executableProblem: string | undefined;\n\ttry {\n\t\texecutablePath = (deps.resolveExecutable ?? defaultResolveExecutable)(deps.settings);\n\t} catch (error) {\n\t\texecutableProblem = error instanceof Error ? error.message : String(error);\n\t\tif (!(error instanceof CursorAgentNotInstalledError)) executablePath = undefined;\n\t}\n\n\tlet executableVersion: string | undefined;\n\tif (executablePath !== undefined) {\n\t\ttry {\n\t\t\texecutableVersion = await (deps.probeVersion ?? probeCursorAgentVersion)(executablePath);\n\t\t} catch {\n\t\t\t// Version unknown; the floor warning only applies to parseable versions.\n\t\t}\n\t}\n\tconst comparison =\n\t\texecutableVersion === undefined\n\t\t\t? undefined\n\t\t\t: compareCursorCliVersions(executableVersion, CURSOR_CLI_MINIMUM_KNOWN_GOOD_VERSION);\n\n\tconst nativeCredential = deps.readNativeCredential === undefined ? undefined : await deps.readNativeCredential();\n\n\treturn {\n\t\tlane: CURSOR_CLI_STATUS_LANE,\n\t\tselectedAccount,\n\t\tpinnedAccount,\n\t\tchatId: record?.chatId,\n\t\tlastModel: record?.lastModel,\n\t\tcontextOwner: CURSOR_CLI_STATUS_CONTEXT_OWNER,\n\t\texecutablePath,\n\t\texecutableVersion,\n\t\tminimumKnownGoodVersion: CURSOR_CLI_MINIMUM_KNOWN_GOOD_VERSION,\n\t\tbelowMinimumKnownGood: comparison !== undefined && comparison < 0,\n\t\texecutableProblem,\n\t\tblockWindows: accounts\n\t\t\t.map((account) => blockWindowFor(account, now()))\n\t\t\t.filter((window): window is CursorCliBlockWindow => window !== undefined),\n\t\taccountNames: accounts.map((account) => account.name),\n\t\tnativeCursorConfigured: isUsableOAuthCredential(nativeCredential),\n\t};\n}\n\n/** Pure renderer: names and metadata only, never token material. */\nexport function renderCursorCliStatus(report: CursorCliStatusReport): string {\n\tconst lines: string[] = [\"Cursor CLI (OAuth) status:\"];\n\tlines.push(` Auth lane: ${report.lane}`);\n\tlines.push(` Context owner: ${report.contextOwner}`);\n\tlines.push(\n\t\t` Selected account: ${\n\t\t\treport.selectedAccount === undefined\n\t\t\t\t? \"none\"\n\t\t\t\t: report.selectedAccount === report.pinnedAccount\n\t\t\t\t\t? `${report.selectedAccount} (pinned)`\n\t\t\t\t\t: report.selectedAccount\n\t\t}`,\n\t);\n\tlines.push(` Chat id: ${report.chatId ?? \"none (no turns yet on this session)\"}`);\n\tlines.push(` Last model: ${report.lastModel ?? \"none\"}`);\n\tif (report.executableProblem !== undefined) {\n\t\tlines.push(` Executable: not installed - ${report.executableProblem}`);\n\t} else {\n\t\tlines.push(` Executable: ${report.executablePath ?? \"not installed\"}`);\n\t}\n\tif (report.executableVersion !== undefined) lines.push(` Version: ${report.executableVersion}`);\n\tif (report.belowMinimumKnownGood) {\n\t\tlines.push(\n\t\t\t` WARNING: cursor-agent ${report.executableVersion} is below the minimum known-good ${report.minimumKnownGoodVersion}; upgrade recommended`,\n\t\t);\n\t}\n\tif (report.blockWindows.length === 0) {\n\t\tlines.push(\" Block windows: none\");\n\t} else {\n\t\tlines.push(\" Block windows:\");\n\t\tfor (const window of report.blockWindows) {\n\t\t\tlines.push(\n\t\t\t\twindow.blockedUntil === undefined\n\t\t\t\t\t? ` ${window.account}: ${window.reason}, until re-login`\n\t\t\t\t\t: ` ${window.account}: ${window.reason}, expires ${new Date(window.blockedUntil).toISOString()}`,\n\t\t\t);\n\t\t}\n\t}\n\tif (report.nativeCursorConfigured) {\n\t\tlines.push(\n\t\t\t` Recommended default: the native '${NATIVE_CURSOR_PROVIDER_ID}' provider is configured; use this Cursor CLI (OAuth) lane as the fallback when the native path misbehaves.`,\n\t\t);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\n// ============================================================================\n// Reload / shutdown safety (senpi #866 regression class)\n// ============================================================================\n\nexport type CursorCliFencedOutcome<T> =\n\t| { readonly status: \"completed\"; readonly value: T }\n\t| { readonly status: \"dropped\"; readonly reason: string };\n\nexport type CursorCliDeferredContinuation<T> = {\n\t/** Runs the continuation through the fence, even if its timer was cancelled or already fired. */\n\tfire(): Promise<CursorCliFencedOutcome<T>>;\n\tcancel(): void;\n};\n\nexport type CursorCliDroppedReporter = (description: string, reason: string) => void;\n\n/**\n * A reload retires this extension generation (`AgentSession.reload()` then\n * invalidates the old runner) while timers and promise continuations captured\n * by it are still armed; every `ExtensionContext` getter then throws\n * \"stale extension generation after reload\". The context carries no liveness\n * flag, so a retired generation is only observable by probing a getter.\n */\nexport function isCursorCliContextRetired(ctx: ExtensionContext): boolean {\n\ttry {\n\t\tctx.isIdle();\n\t\treturn false;\n\t} catch {\n\t\treturn true;\n\t}\n}\n\n/** Per-registration generation fence; one per extension registration (a reload builds a new one). */\nexport class CursorCliGenerationGuard {\n\tprivate retired = false;\n\tprivate retirementReason: string | undefined;\n\tprivate readonly timers = new Set<ReturnType<typeof setTimeout>>();\n\tprivate droppedReporter: CursorCliDroppedReporter | undefined;\n\n\tisRetired(): boolean {\n\t\treturn this.retired;\n\t}\n\n\tretire(reason: string): void {\n\t\tif (this.retired) return;\n\t\tthis.retired = true;\n\t\tthis.retirementReason = `extension generation retired (${reason})`;\n\t}\n\n\tonDropped(reporter: CursorCliDroppedReporter): void {\n\t\tthis.droppedReporter = reporter;\n\t}\n\n\t/** Arms a timer the shutdown path cancels; arming after retirement is a no-op by construction. */\n\tsetTrackedTimeout(callback: () => void, delayMs: number): () => void {\n\t\tconst timer = this.armTracked(callback, delayMs);\n\t\treturn () => {\n\t\t\tif (timer !== undefined) this.cancelTimer(timer);\n\t\t};\n\t}\n\n\t/** Cancels every armed timer; returns how many were pending. */\n\tclearTrackedTimers(): number {\n\t\tconst pending = this.timers.size;\n\t\tfor (const timer of this.timers) clearTimeout(timer);\n\t\tthis.timers.clear();\n\t\treturn pending;\n\t}\n\n\t/**\n\t * Runs a deferred continuation behind the generation fence. A dropped\n\t * continuation is reported, never silently presented as completed.\n\t */\n\tasync runFenced<T>(\n\t\tctx: ExtensionContext,\n\t\twork: (ctx: ExtensionContext) => Promise<T> | T,\n\t): Promise<CursorCliFencedOutcome<T>> {\n\t\tconst blockedReason = this.retirementReasonFor(ctx);\n\t\tif (blockedReason !== undefined) {\n\t\t\tthis.reportDropped(\"deferred continuation\", blockedReason);\n\t\t\treturn { status: \"dropped\", reason: blockedReason };\n\t\t}\n\t\treturn { status: \"completed\", value: await work(ctx) };\n\t}\n\n\t/** Synchronous variant for continuations that only touch the context once, after an outer await. */\n\trunFencedSync(ctx: ExtensionContext, work: () => void): { ran: boolean } {\n\t\tconst blockedReason = this.retirementReasonFor(ctx);\n\t\tif (blockedReason !== undefined) {\n\t\t\tthis.reportDropped(\"deferred continuation\", blockedReason);\n\t\t\treturn { ran: false };\n\t\t}\n\t\twork();\n\t\treturn { ran: true };\n\t}\n\n\tdefer<T>(\n\t\tctx: ExtensionContext,\n\t\twork: (ctx: ExtensionContext) => Promise<T> | T,\n\t\tdelayMs = 0,\n\t): CursorCliDeferredContinuation<T> {\n\t\tconst fire = (): Promise<CursorCliFencedOutcome<T>> => this.runFenced(ctx, work);\n\t\tconst timer = this.armTracked(() => {\n\t\t\t// The timer path has no caller to receive a rejection (senpi #866 crash\n\t\t\t// class), so a post-fence failure is reported instead of escaping to the\n\t\t\t// timer queue.\n\t\t\tvoid fire().catch((error: unknown) => {\n\t\t\t\tthis.reportDropped(\n\t\t\t\t\t\"deferred continuation\",\n\t\t\t\t\t`failed after the retirement check: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t);\n\t\t\t});\n\t\t}, delayMs);\n\t\treturn {\n\t\t\tfire,\n\t\t\tcancel: () => {\n\t\t\t\tif (timer !== undefined) this.cancelTimer(timer);\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate armTracked(callback: () => void, delayMs: number): ReturnType<typeof setTimeout> | undefined {\n\t\tif (this.retired) return undefined;\n\t\tconst timer = setTimeout(() => {\n\t\t\tthis.timers.delete(timer);\n\t\t\tcallback();\n\t\t}, delayMs);\n\t\tthis.timers.add(timer);\n\t\treturn timer;\n\t}\n\n\tprivate cancelTimer(timer: ReturnType<typeof setTimeout>): void {\n\t\tclearTimeout(timer);\n\t\tthis.timers.delete(timer);\n\t}\n\n\tprivate retirementReasonFor(ctx: ExtensionContext): string | undefined {\n\t\tif (this.retired) return this.retirementReason ?? \"extension generation retired\";\n\t\tif (isCursorCliContextRetired(ctx)) return \"extension context retired by reload\";\n\t\treturn undefined;\n\t}\n\n\tprivate reportDropped(description: string, reason: string): void {\n\t\tthis.droppedReporter?.(description, reason);\n\t}\n}\n\n/** Process-group kill on the tracked pid, mirroring transport.ts's mechanism (never name matching). */\nfunction killCursorCliProcessGroup(pid: number, signal: NodeJS.Signals): void {\n\ttry {\n\t\tif (process.platform === \"win32\") process.kill(pid, signal);\n\t\telse process.kill(-pid, signal);\n\t} catch (error) {\n\t\tif ((error as NodeJS.ErrnoException).code !== \"ESRCH\") throw error;\n\t}\n}\n\ntype TrackedCursorCliChild = {\n\treadonly pid: number;\n\treadonly abort: () => void;\n\tkilled: boolean;\n};\n\n/**\n * Registry of live children this extension spawned. Entries leave the registry\n * when their transport run settles, so `killAll` only ever signals live\n * process groups and is idempotent across repeated interruptions.\n */\nexport class CursorCliChildRegistry {\n\tprivate readonly children = new Map<number, TrackedCursorCliChild>();\n\n\ttrack(handle: CursorCliTransportHandle): CursorCliTransportHandle {\n\t\tthis.children.set(handle.pid, { pid: handle.pid, abort: () => handle.abort(), killed: false });\n\t\tvoid handle.completed.then(\n\t\t\t() => this.children.delete(handle.pid),\n\t\t\t() => this.children.delete(handle.pid),\n\t\t);\n\t\treturn handle;\n\t}\n\n\tlivePids(): number[] {\n\t\treturn [...this.children.keys()];\n\t}\n\n\t/** SIGTERMs every tracked process group with a SIGKILL escalation; returns the pids it signalled. */\n\tkillAll(graceMs: number = CURSOR_CLI_ABORT_GRACE_MS): number[] {\n\t\tconst signalled: number[] = [];\n\t\tfor (const entry of this.children.values()) {\n\t\t\tif (entry.killed) continue;\n\t\t\tentry.killed = true;\n\t\t\tsignalled.push(entry.pid);\n\t\t\t// Teardown must never throw into the shutdown event loop; individual\n\t\t\t// failures are contained per child, and the SIGKILL escalation below\n\t\t\t// still runs for that pid.\n\t\t\ttry {\n\t\t\t\tentry.abort();\n\t\t\t} catch {\n\t\t\t\t// Deliberate: shutdown stays idempotent even if one child misbehaves.\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tkillCursorCliProcessGroup(entry.pid, \"SIGTERM\");\n\t\t\t} catch {\n\t\t\t\t// Deliberate: see above.\n\t\t\t}\n\t\t\tconst escalation = setTimeout(() => killCursorCliProcessGroup(entry.pid, \"SIGKILL\"), graceMs);\n\t\t\tescalation.unref?.();\n\t\t}\n\t\treturn signalled;\n\t}\n}\n\n/** Shared registry; child pids are process-wide resources, so one registry serves every generation. */\nexport const cursorCliChildRegistry = new CursorCliChildRegistry();\n\n/** Spawns one cursor-agent run through the transport and registers it for shutdown teardown. */\nexport function spawnCursorCliTracked(\n\tinput: CursorCliTransportInput,\n\tregistry: CursorCliChildRegistry = cursorCliChildRegistry,\n): CursorCliTransportHandle {\n\treturn registry.track(spawnCursorCli(input));\n}\n\nexport type CursorCliShutdownSafetyDeps = {\n\treadonly generation?: CursorCliGenerationGuard;\n\treadonly registry?: CursorCliChildRegistry;\n};\n\n/**\n * Installs the `session_shutdown`/`session_extensions_removed` teardown: kill\n * every tracked child's process group, cancel the generation's pending timers,\n * and retire the generation so every deferred continuation is fenced. Safe to\n * fire repeatedly; a retired generation is never resurrected (a reload builds a\n * new registration with a fresh guard).\n */\nexport function registerCursorCliShutdownSafety(\n\tpi: Pick<ExtensionAPI, \"on\">,\n\tdeps: CursorCliShutdownSafetyDeps = {},\n): CursorCliGenerationGuard {\n\tconst generation = deps.generation ?? new CursorCliGenerationGuard();\n\tconst registry = deps.registry ?? cursorCliChildRegistry;\n\tconst teardown = (reason: string): void => {\n\t\tregistry.killAll();\n\t\tgeneration.clearTrackedTimers();\n\t\tgeneration.retire(reason);\n\t};\n\tpi.on(\"session_shutdown\", (event: SessionShutdownEvent) => {\n\t\tteardown(event.reason);\n\t});\n\tpi.on(\"session_extensions_removed\", (event: SessionExtensionsRemovedEvent) => {\n\t\tteardown(event.reason);\n\t});\n\treturn generation;\n}\n"]}
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/diagnostics.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Credential } from \"@earendil-works/pi-ai\";\nimport type {\n\tExtensionAPI,\n\tExtensionContext,\n\tSessionExtensionsRemovedEvent,\n\tSessionShutdownEvent,\n} from \"../../types.ts\";\nimport { type CursorCliAccountSlot, type CursorCliOauthCredential, emptyCredential, listAccounts } from \"./accounts.ts\";\nimport { selectAccount } from \"./affinity.ts\";\nimport {\n\tCursorAgentNotInstalledError,\n\tdefaultCursorAgentExecutableDeps,\n\tprobeCursorAgentVersion,\n\tresolveCursorAgentExecutable,\n} from \"./executable.ts\";\nimport { type CursorCliSessionRouter, cursorCliSessionRouter } from \"./session-router.ts\";\nimport type { CursorCliOauthProviderSettings } from \"./settings.ts\";\nimport {\n\tCURSOR_CLI_ABORT_GRACE_MS,\n\ttype CursorCliTransportHandle,\n\ttype CursorCliTransportInput,\n\tspawnCursorCli,\n} from \"./transport.ts\";\n\n/** Minimum known-good cursor-agent version; below it senpi warns once per session but never blocks. */\nexport const CURSOR_CLI_MINIMUM_KNOWN_GOOD_VERSION = \"2026.08.11\";\n/** This lane always authenticates through per-account sandboxed HOME file stores. */\nexport const CURSOR_CLI_STATUS_LANE = \"file-store\";\n/** senpi never delegates compaction on this lane, so it is always the context owner. */\nexport const CURSOR_CLI_STATUS_CONTEXT_OWNER = \"senpi\";\n/** The native Cursor provider id; the recommended default when both providers are configured. */\nexport const NATIVE_CURSOR_PROVIDER_ID = \"cursor\";\n\n// ============================================================================\n// Status diagnostics\n// ============================================================================\n\nexport type CursorCliBlockWindow = {\n\treadonly account: string;\n\treadonly reason: \"rate_limit\" | \"auth_error\";\n\t/** Expiry timestamp; undefined means blocked until the account logs in again. */\n\treadonly blockedUntil: number | undefined;\n};\n\nexport type CursorCliStatusReport = {\n\treadonly lane: typeof CURSOR_CLI_STATUS_LANE;\n\treadonly selectedAccount: string | undefined;\n\treadonly pinnedAccount: string | undefined;\n\treadonly chatId: string | undefined;\n\treadonly lastModel: string | undefined;\n\treadonly contextOwner: typeof CURSOR_CLI_STATUS_CONTEXT_OWNER;\n\treadonly executablePath: string | undefined;\n\treadonly executableVersion: string | undefined;\n\treadonly minimumKnownGoodVersion: string;\n\treadonly belowMinimumKnownGood: boolean;\n\treadonly executableProblem: string | undefined;\n\treadonly blockWindows: readonly CursorCliBlockWindow[];\n\treadonly accountNames: readonly string[];\n\treadonly nativeCursorConfigured: boolean;\n};\n\nexport type CursorCliStatusDeps = {\n\treadonly sessionId: string;\n\treadonly settings: CursorCliOauthProviderSettings;\n\treadonly readCredential: () => Credential | undefined | Promise<Credential | undefined>;\n\treadonly readNativeCredential?: () => Credential | undefined | Promise<Credential | undefined>;\n\treadonly router?: CursorCliSessionRouter;\n\treadonly resolveExecutable?: (settings: CursorCliOauthProviderSettings) => string;\n\treadonly probeVersion?: (executable: string) => Promise<string>;\n\treadonly now?: () => number;\n};\n\nfunction asCursorCredential(value: Credential | undefined): CursorCliOauthCredential {\n\treturn value !== undefined && value.type === \"oauth\" ? (value as CursorCliOauthCredential) : emptyCredential();\n}\n\nfunction isUsableOAuthCredential(value: Credential | undefined): boolean {\n\treturn value !== undefined && value.type === \"oauth\" && typeof value.access === \"string\" && value.access.length > 0;\n}\n\nexport function parseCursorCliVersion(version: string): { year: number; month: number; day: number } | undefined {\n\tconst match = /^v?(\\d{1,4})\\.(\\d{1,2})\\.(\\d{1,2})/.exec(version.trim());\n\tif (!match) return undefined;\n\treturn { year: Number(match[1]), month: Number(match[2]), day: Number(match[3]) };\n}\n\n/** Compares two `YYYY.MM.DD[-suffix]` version strings; undefined when either cannot be parsed. */\nexport function compareCursorCliVersions(version: string, floor: string): number | undefined {\n\tconst parsed = parseCursorCliVersion(version);\n\tconst baseline = parseCursorCliVersion(floor);\n\tif (parsed === undefined || baseline === undefined) return undefined;\n\tconst left = [parsed.year, parsed.month, parsed.day] as const;\n\tconst right = [baseline.year, baseline.month, baseline.day] as const;\n\tfor (let index = 0; index < 3; index += 1) {\n\t\tif (left[index] !== right[index]) return left[index] < right[index] ? -1 : 1;\n\t}\n\treturn 0;\n}\n\nfunction blockWindowFor(account: CursorCliAccountSlot, now: number): CursorCliBlockWindow | undefined {\n\tif (account.blockReason === \"auth_error\") {\n\t\treturn { account: account.name, reason: \"auth_error\", blockedUntil: undefined };\n\t}\n\tif (account.blockedUntil !== undefined && account.blockedUntil > now) {\n\t\treturn { account: account.name, reason: \"rate_limit\", blockedUntil: account.blockedUntil };\n\t}\n\treturn undefined;\n}\n\nconst defaultResolveExecutable = (settings: CursorCliOauthProviderSettings): string =>\n\tresolveCursorAgentExecutable({\n\t\t...defaultCursorAgentExecutableDeps(),\n\t\tsettings: { executablePath: settings.executablePath },\n\t});\n\n/**\n * Collects the status snapshot. Account data is read fresh from the credential\n * store on every call - never memoized - so the rendered state always matches\n * the store even after concurrent logins, removals, or failover blocks. Only\n * account names and metadata are extracted; tokens never enter the report.\n */\nexport async function collectCursorCliStatus(deps: CursorCliStatusDeps): Promise<CursorCliStatusReport> {\n\tconst now = deps.now ?? Date.now;\n\tconst credential = asCursorCredential(await deps.readCredential());\n\tconst accounts = listAccounts(credential);\n\tconst pinnedAccount = deps.settings.pinnedAccount ?? credential.pinned;\n\tconst record = (deps.router ?? cursorCliSessionRouter).getRecord(deps.sessionId);\n\n\tlet selectedAccount = record?.accountName;\n\tif (selectedAccount === undefined && accounts.length > 0) {\n\t\ttry {\n\t\t\tselectedAccount = selectAccount(accounts, {\n\t\t\t\tsessionId: deps.sessionId,\n\t\t\t\tpinnedAccount,\n\t\t\t\tnow: now(),\n\t\t\t}).name;\n\t\t} catch {\n\t\t\t// Every account is blocked; report no selection instead of failing status.\n\t\t}\n\t}\n\n\tlet executablePath: string | undefined;\n\tlet executableProblem: string | undefined;\n\ttry {\n\t\texecutablePath = (deps.resolveExecutable ?? defaultResolveExecutable)(deps.settings);\n\t} catch (error) {\n\t\texecutableProblem = error instanceof Error ? error.message : String(error);\n\t\tif (!(error instanceof CursorAgentNotInstalledError)) executablePath = undefined;\n\t}\n\n\tlet executableVersion: string | undefined;\n\tif (executablePath !== undefined) {\n\t\ttry {\n\t\t\texecutableVersion = await (deps.probeVersion ?? probeCursorAgentVersion)(executablePath);\n\t\t} catch {\n\t\t\t// Version unknown; the floor warning only applies to parseable versions.\n\t\t}\n\t}\n\tconst comparison =\n\t\texecutableVersion === undefined\n\t\t\t? undefined\n\t\t\t: compareCursorCliVersions(executableVersion, CURSOR_CLI_MINIMUM_KNOWN_GOOD_VERSION);\n\n\tconst nativeCredential = deps.readNativeCredential === undefined ? undefined : await deps.readNativeCredential();\n\n\treturn {\n\t\tlane: CURSOR_CLI_STATUS_LANE,\n\t\tselectedAccount,\n\t\tpinnedAccount,\n\t\tchatId: record?.chatId,\n\t\tlastModel: record?.lastModel,\n\t\tcontextOwner: CURSOR_CLI_STATUS_CONTEXT_OWNER,\n\t\texecutablePath,\n\t\texecutableVersion,\n\t\tminimumKnownGoodVersion: CURSOR_CLI_MINIMUM_KNOWN_GOOD_VERSION,\n\t\tbelowMinimumKnownGood: comparison !== undefined && comparison < 0,\n\t\texecutableProblem,\n\t\tblockWindows: accounts\n\t\t\t.map((account) => blockWindowFor(account, now()))\n\t\t\t.filter((window): window is CursorCliBlockWindow => window !== undefined),\n\t\taccountNames: accounts.map((account) => account.name),\n\t\tnativeCursorConfigured: isUsableOAuthCredential(nativeCredential),\n\t};\n}\n\n/** Pure renderer: names and metadata only, never token material. */\nexport function renderCursorCliStatus(report: CursorCliStatusReport): string {\n\tconst lines: string[] = [\"Cursor CLI (OAuth) status:\"];\n\tlines.push(` Auth lane: ${report.lane}`);\n\tlines.push(` Context owner: ${report.contextOwner}`);\n\tlines.push(\n\t\t` Selected account: ${\n\t\t\treport.selectedAccount === undefined\n\t\t\t\t? \"none\"\n\t\t\t\t: report.selectedAccount === report.pinnedAccount\n\t\t\t\t\t? `${report.selectedAccount} (pinned)`\n\t\t\t\t\t: report.selectedAccount\n\t\t}`,\n\t);\n\tlines.push(` Chat id: ${report.chatId ?? \"none (no turns yet on this session)\"}`);\n\tlines.push(` Last model: ${report.lastModel ?? \"none\"}`);\n\tif (report.executableProblem !== undefined) {\n\t\tlines.push(` Executable: not installed - ${report.executableProblem}`);\n\t} else {\n\t\tlines.push(` Executable: ${report.executablePath ?? \"not installed\"}`);\n\t}\n\tif (report.executableVersion !== undefined) lines.push(` Version: ${report.executableVersion}`);\n\tif (report.belowMinimumKnownGood) {\n\t\tlines.push(\n\t\t\t` WARNING: cursor-agent ${report.executableVersion} is below the minimum known-good ${report.minimumKnownGoodVersion}; upgrade recommended`,\n\t\t);\n\t}\n\tif (report.blockWindows.length === 0) {\n\t\tlines.push(\" Block windows: none\");\n\t} else {\n\t\tlines.push(\" Block windows:\");\n\t\tfor (const window of report.blockWindows) {\n\t\t\tlines.push(\n\t\t\t\twindow.blockedUntil === undefined\n\t\t\t\t\t? ` ${window.account}: ${window.reason}, until re-login`\n\t\t\t\t\t: ` ${window.account}: ${window.reason}, expires ${new Date(window.blockedUntil).toISOString()}`,\n\t\t\t);\n\t\t}\n\t}\n\tif (report.nativeCursorConfigured) {\n\t\tlines.push(\n\t\t\t` Recommended default: the native '${NATIVE_CURSOR_PROVIDER_ID}' provider is configured; use this Cursor CLI (OAuth) lane as the fallback when the native path misbehaves.`,\n\t\t);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\n// ============================================================================\n// Reload / shutdown safety (senpi #866 regression class)\n// ============================================================================\n\nexport type CursorCliFencedOutcome<T> =\n\t| { readonly status: \"completed\"; readonly value: T }\n\t| { readonly status: \"dropped\"; readonly reason: string };\n\nexport type CursorCliDeferredContinuation<T> = {\n\t/** Runs the continuation through the fence, even if its timer was cancelled or already fired. */\n\tfire(): Promise<CursorCliFencedOutcome<T>>;\n\tcancel(): void;\n};\n\nexport type CursorCliDroppedReporter = (description: string, reason: string) => void;\n\n/**\n * A reload retires this extension generation (`AgentSession.reload()` then\n * invalidates the old runner) while timers and promise continuations captured\n * by it are still armed; every `ExtensionContext` getter then throws\n * \"stale extension generation after reload\". The context carries no liveness\n * flag, so a retired generation is only observable by probing a getter.\n */\nexport function isCursorCliContextRetired(ctx: ExtensionContext): boolean {\n\ttry {\n\t\tctx.isIdle();\n\t\treturn false;\n\t} catch {\n\t\treturn true;\n\t}\n}\n\n/** Per-registration generation fence; one per extension registration (a reload builds a new one). */\nexport class CursorCliGenerationGuard {\n\tprivate retired = false;\n\tprivate retirementReason: string | undefined;\n\tprivate readonly timers = new Set<ReturnType<typeof setTimeout>>();\n\tprivate droppedReporter: CursorCliDroppedReporter | undefined;\n\n\tisRetired(): boolean {\n\t\treturn this.retired;\n\t}\n\n\tretire(reason: string): void {\n\t\tif (this.retired) return;\n\t\tthis.retired = true;\n\t\tthis.retirementReason = `extension generation retired (${reason})`;\n\t}\n\n\tonDropped(reporter: CursorCliDroppedReporter): void {\n\t\tthis.droppedReporter = reporter;\n\t}\n\n\t/** Arms a timer the shutdown path cancels; arming after retirement is a no-op by construction. */\n\tsetTrackedTimeout(callback: () => void, delayMs: number): () => void {\n\t\tconst timer = this.armTracked(callback, delayMs);\n\t\treturn () => {\n\t\t\tif (timer !== undefined) this.cancelTimer(timer);\n\t\t};\n\t}\n\n\t/** Cancels every armed timer; returns how many were pending. */\n\tclearTrackedTimers(): number {\n\t\tconst pending = this.timers.size;\n\t\tfor (const timer of this.timers) clearTimeout(timer);\n\t\tthis.timers.clear();\n\t\treturn pending;\n\t}\n\n\t/**\n\t * Runs a deferred continuation behind the generation fence. A dropped\n\t * continuation is reported, never silently presented as completed.\n\t */\n\tasync runFenced<T>(\n\t\tctx: ExtensionContext,\n\t\twork: (ctx: ExtensionContext) => Promise<T> | T,\n\t): Promise<CursorCliFencedOutcome<T>> {\n\t\tconst blockedReason = this.retirementReasonFor(ctx);\n\t\tif (blockedReason !== undefined) {\n\t\t\tthis.reportDropped(\"deferred continuation\", blockedReason);\n\t\t\treturn { status: \"dropped\", reason: blockedReason };\n\t\t}\n\t\treturn { status: \"completed\", value: await work(ctx) };\n\t}\n\n\t/** Synchronous variant for continuations that only touch the context once, after an outer await. */\n\trunFencedSync(ctx: ExtensionContext, work: () => void): { ran: boolean } {\n\t\tconst blockedReason = this.retirementReasonFor(ctx);\n\t\tif (blockedReason !== undefined) {\n\t\t\tthis.reportDropped(\"deferred continuation\", blockedReason);\n\t\t\treturn { ran: false };\n\t\t}\n\t\twork();\n\t\treturn { ran: true };\n\t}\n\n\tdefer<T>(\n\t\tctx: ExtensionContext,\n\t\twork: (ctx: ExtensionContext) => Promise<T> | T,\n\t\tdelayMs = 0,\n\t): CursorCliDeferredContinuation<T> {\n\t\tconst fire = (): Promise<CursorCliFencedOutcome<T>> => this.runFenced(ctx, work);\n\t\tconst timer = this.armTracked(() => {\n\t\t\t// The timer path has no caller to receive a rejection (senpi #866 crash\n\t\t\t// class), so a post-fence failure is reported instead of escaping to the\n\t\t\t// timer queue.\n\t\t\tvoid fire().catch((error: unknown) => {\n\t\t\t\tthis.reportDropped(\n\t\t\t\t\t\"deferred continuation\",\n\t\t\t\t\t`failed after the retirement check: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t);\n\t\t\t});\n\t\t}, delayMs);\n\t\treturn {\n\t\t\tfire,\n\t\t\tcancel: () => {\n\t\t\t\tif (timer !== undefined) this.cancelTimer(timer);\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate armTracked(callback: () => void, delayMs: number): ReturnType<typeof setTimeout> | undefined {\n\t\tif (this.retired) return undefined;\n\t\tconst timer = setTimeout(() => {\n\t\t\tthis.timers.delete(timer);\n\t\t\tcallback();\n\t\t}, delayMs);\n\t\tthis.timers.add(timer);\n\t\treturn timer;\n\t}\n\n\tprivate cancelTimer(timer: ReturnType<typeof setTimeout>): void {\n\t\tclearTimeout(timer);\n\t\tthis.timers.delete(timer);\n\t}\n\n\tprivate retirementReasonFor(ctx: ExtensionContext): string | undefined {\n\t\tif (this.retired) return this.retirementReason ?? \"extension generation retired\";\n\t\tif (isCursorCliContextRetired(ctx)) return \"extension context retired by reload\";\n\t\treturn undefined;\n\t}\n\n\tprivate reportDropped(description: string, reason: string): void {\n\t\tthis.droppedReporter?.(description, reason);\n\t}\n}\n\n/** Process-group kill on the tracked pid, mirroring transport.ts's mechanism (never name matching). */\nfunction killCursorCliProcessGroup(pid: number, signal: NodeJS.Signals): void {\n\ttry {\n\t\tif (process.platform === \"win32\") process.kill(pid, signal);\n\t\telse process.kill(-pid, signal);\n\t} catch (error) {\n\t\tif ((error as NodeJS.ErrnoException).code !== \"ESRCH\") throw error;\n\t}\n}\n\ntype TrackedCursorCliChild = {\n\treadonly pid: number;\n\treadonly abort: () => void;\n\tkilled: boolean;\n};\n\n/**\n * Registry of live children this extension spawned. Entries leave the registry\n * when their transport run settles, so `killAll` only ever signals live\n * process groups and is idempotent across repeated interruptions.\n */\nexport class CursorCliChildRegistry {\n\tprivate readonly children = new Map<number, TrackedCursorCliChild>();\n\n\ttrack(handle: CursorCliTransportHandle): CursorCliTransportHandle {\n\t\tthis.children.set(handle.pid, { pid: handle.pid, abort: () => handle.abort(), killed: false });\n\t\tvoid handle.completed.then(\n\t\t\t() => this.children.delete(handle.pid),\n\t\t\t() => this.children.delete(handle.pid),\n\t\t);\n\t\treturn handle;\n\t}\n\n\tlivePids(): number[] {\n\t\treturn [...this.children.keys()];\n\t}\n\n\t/** SIGTERMs every tracked process group with a SIGKILL escalation; returns the pids it signalled. */\n\tkillAll(graceMs: number = CURSOR_CLI_ABORT_GRACE_MS): number[] {\n\t\tconst signalled: number[] = [];\n\t\tfor (const entry of this.children.values()) {\n\t\t\tif (entry.killed) continue;\n\t\t\tentry.killed = true;\n\t\t\tsignalled.push(entry.pid);\n\t\t\t// Teardown must never throw into the shutdown event loop; individual\n\t\t\t// failures are contained per child, and the SIGKILL escalation below\n\t\t\t// still runs for that pid.\n\t\t\ttry {\n\t\t\t\tentry.abort();\n\t\t\t} catch {\n\t\t\t\t// Deliberate: shutdown stays idempotent even if one child misbehaves.\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tkillCursorCliProcessGroup(entry.pid, \"SIGTERM\");\n\t\t\t} catch {\n\t\t\t\t// Deliberate: see above.\n\t\t\t}\n\t\t\tconst escalation = setTimeout(() => killCursorCliProcessGroup(entry.pid, \"SIGKILL\"), graceMs);\n\t\t\tescalation.unref?.();\n\t\t}\n\t\treturn signalled;\n\t}\n}\n\n/** Shared registry; child pids are process-wide resources, so one registry serves every generation. */\nexport const cursorCliChildRegistry = new CursorCliChildRegistry();\n\n/** Spawns one cursor-agent run through the transport and registers it for shutdown teardown. */\nexport function spawnCursorCliTracked(\n\tinput: CursorCliTransportInput,\n\tregistry: CursorCliChildRegistry = cursorCliChildRegistry,\n): CursorCliTransportHandle {\n\treturn registry.track(spawnCursorCli(input));\n}\n\nexport type CursorCliShutdownSafetyDeps = {\n\treadonly generation?: CursorCliGenerationGuard;\n\treadonly registry?: CursorCliChildRegistry;\n};\n\n/**\n * Installs the `session_shutdown`/`session_extensions_removed` teardown: kill\n * every tracked child's process group, cancel the generation's pending timers,\n * and retire the generation so every deferred continuation is fenced. Safe to\n * fire repeatedly; a retired generation is never resurrected (a reload builds a\n * new registration with a fresh guard).\n */\nexport function registerCursorCliShutdownSafety(\n\tpi: Pick<ExtensionAPI, \"on\">,\n\tdeps: CursorCliShutdownSafetyDeps = {},\n): CursorCliGenerationGuard {\n\tconst generation = deps.generation ?? new CursorCliGenerationGuard();\n\tconst registry = deps.registry ?? cursorCliChildRegistry;\n\tconst teardown = (reason: string): void => {\n\t\tregistry.killAll();\n\t\tgeneration.clearTrackedTimers();\n\t\tgeneration.retire(reason);\n\t};\n\tpi.on(\"session_shutdown\", (event: SessionShutdownEvent) => {\n\t\tteardown(event.reason);\n\t});\n\tpi.on(\"session_extensions_removed\", (event: SessionExtensionsRemovedEvent) => {\n\t\tteardown(event.reason);\n\t});\n\treturn generation;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"executable.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/executable.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,yBAAyB,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACvC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IACjD,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,yBAAyB,EAAE,CAAC;CAClE,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;AAEjG,MAAM,MAAM,gBAAgB,GAAG;IAC9B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,oBAAoB,KAAK,IAAI,CAAC;CAC/G,CAAC;AAEF,qBAAa,4BAA6B,SAAQ,KAAK;IACtD,QAAQ,CAAC,IAAI,oBAAoB;;CASjC;AA6CD,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,yBAAyB,GAAG,MAAM,CAkBpF;AAUD,wBAAgB,uBAAuB,CACtC,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,gBAA0C,GAC9C,OAAO,CAAC,MAAM,CAAC,CAUjB;AAED,wBAAgB,gCAAgC,IAAI,yBAAyB,CAqB5E"}
1
+ {"version":3,"file":"executable.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/executable.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,yBAAyB,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACvC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IACjD,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,yBAAyB,EAAE,CAAC;CAClE,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;AAEjG,MAAM,MAAM,gBAAgB,GAAG;IAC9B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,oBAAoB,KAAK,IAAI,CAAC;CAC/G,CAAC;AAEF,qBAAa,4BAA6B,SAAQ,KAAK;IACtD,QAAQ,CAAC,IAAI,oBAAoB;IAEjC,cAMC;CACD;AA6CD,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,yBAAyB,GAAG,MAAM,CAkBpF;AAUD,wBAAgB,uBAAuB,CACtC,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,gBAA0C,GAC9C,OAAO,CAAC,MAAM,CAAC,CAUjB;AAED,wBAAgB,gCAAgC,IAAI,yBAAyB,CAqB5E"}
@@ -1 +1 @@
1
- {"version":3,"file":"executable.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/executable.ts"],"names":[],"mappings":"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","sourcesContent":["import { execFile as nodeExecFile } from \"node:child_process\";\nimport { accessSync, constants, readdirSync, statSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { delimiter, join } from \"node:path\";\n\nexport type CursorAgentDirectoryEntry = {\n\tname: string;\n\tisDirectory: boolean;\n};\n\nexport type CursorAgentExecutableDeps = {\n\tenv: (name: string) => string | undefined;\n\tsettings: { executablePath?: string };\n\thomeDirectory: string;\n\tpathDelimiter: string;\n\tisExecutableFile: (candidate: string) => boolean;\n\treadDirectory: (directory: string) => CursorAgentDirectoryEntry[];\n};\n\nexport type VersionProbeOptions = {\n\tencoding: \"utf8\";\n\ttimeout: number;\n};\n\nexport type VersionProbeCallback = (error: Error | null, stdout: string, stderr: string) => void;\n\nexport type VersionProbeDeps = {\n\texecFile: (file: string, args: string[], options: VersionProbeOptions, callback: VersionProbeCallback) => void;\n};\n\nexport class CursorAgentNotInstalledError extends Error {\n\treadonly kind = \"binary_missing\";\n\n\tconstructor() {\n\t\tsuper(\n\t\t\t\"Cursor CLI is not installed. Install it with `curl https://cursor.com/install -fsS | bash`, \" +\n\t\t\t\t\"then ensure ~/.local/bin is on your PATH.\",\n\t\t);\n\t\tthis.name = \"CursorAgentNotInstalledError\";\n\t}\n}\n\nfunction executableCandidate(candidate: string | undefined, deps: CursorAgentExecutableDeps): string | undefined {\n\tif (!candidate) return undefined;\n\ttry {\n\t\treturn deps.isExecutableFile(candidate) ? candidate : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction resolveFromPath(deps: CursorAgentExecutableDeps): string | undefined {\n\tconst pathValue = deps.env(\"PATH\");\n\tif (!pathValue) return undefined;\n\n\tfor (const directory of pathValue.split(deps.pathDelimiter)) {\n\t\tif (!directory) continue;\n\t\tconst candidate = executableCandidate(join(directory, \"cursor-agent\"), deps);\n\t\tif (candidate) return candidate;\n\t}\n\treturn undefined;\n}\n\nfunction resolveFromInstalledVersions(deps: CursorAgentExecutableDeps): string | undefined {\n\tconst versionsDirectory = join(deps.homeDirectory, \".local\", \"share\", \"cursor-agent\", \"versions\");\n\tlet entries: CursorAgentDirectoryEntry[];\n\ttry {\n\t\tentries = deps.readDirectory(versionsDirectory);\n\t} catch {\n\t\treturn undefined;\n\t}\n\n\tconst directoryNames = entries\n\t\t.filter((entry) => entry.isDirectory)\n\t\t.map((entry) => entry.name)\n\t\t.sort()\n\t\t.reverse();\n\n\tfor (const directoryName of directoryNames) {\n\t\tconst candidate = executableCandidate(join(versionsDirectory, directoryName, \"cursor-agent\"), deps);\n\t\tif (candidate) return candidate;\n\t}\n\treturn undefined;\n}\n\nexport function resolveCursorAgentExecutable(deps: CursorAgentExecutableDeps): string {\n\tconst orderedCandidates = [\n\t\tdeps.env(\"SENPI_CURSOR_CLI_OAUTH_EXECUTABLE\"),\n\t\tdeps.env(\"CURSOR_AGENT_EXECUTABLE\"),\n\t\tdeps.settings.executablePath,\n\t];\n\tfor (const candidate of orderedCandidates) {\n\t\tconst executable = executableCandidate(candidate, deps);\n\t\tif (executable) return executable;\n\t}\n\n\tconst pathExecutable = resolveFromPath(deps);\n\tif (pathExecutable) return pathExecutable;\n\n\tconst installedExecutable = resolveFromInstalledVersions(deps);\n\tif (installedExecutable) return installedExecutable;\n\n\tthrow new CursorAgentNotInstalledError();\n}\n\nconst defaultVersionProbeDeps: VersionProbeDeps = {\n\texecFile: (file, args, options, callback) => {\n\t\tnodeExecFile(file, args, options, (error, stdout, stderr) => {\n\t\t\tcallback(error, stdout, stderr);\n\t\t});\n\t},\n};\n\nexport function probeCursorAgentVersion(\n\texecutable: string,\n\tdeps: VersionProbeDeps = defaultVersionProbeDeps,\n): Promise<string> {\n\treturn new Promise((resolve, reject) => {\n\t\tdeps.execFile(executable, [\"--version\"], { encoding: \"utf8\", timeout: 10_000 }, (error, stdout) => {\n\t\t\tif (error) {\n\t\t\t\treject(error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresolve(stdout.trim());\n\t\t});\n\t});\n}\n\nexport function defaultCursorAgentExecutableDeps(): CursorAgentExecutableDeps {\n\treturn {\n\t\tenv: (name) => process.env[name],\n\t\tsettings: {},\n\t\thomeDirectory: homedir(),\n\t\tpathDelimiter: delimiter,\n\t\tisExecutableFile: (candidate) => {\n\t\t\ttry {\n\t\t\t\tif (!statSync(candidate).isFile()) return false;\n\t\t\t\taccessSync(candidate, constants.X_OK);\n\t\t\t\treturn true;\n\t\t\t} catch {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\treadDirectory: (directory) =>\n\t\t\treaddirSync(directory, { withFileTypes: true }).map((entry) => ({\n\t\t\t\tname: entry.name,\n\t\t\t\tisDirectory: entry.isDirectory(),\n\t\t\t})),\n\t};\n}\n"]}
1
+ {"version":3,"file":"executable.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/executable.ts"],"names":[],"mappings":"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","sourcesContent":["import { execFile as nodeExecFile } from \"node:child_process\";\nimport { accessSync, constants, readdirSync, statSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { delimiter, join } from \"node:path\";\n\nexport type CursorAgentDirectoryEntry = {\n\tname: string;\n\tisDirectory: boolean;\n};\n\nexport type CursorAgentExecutableDeps = {\n\tenv: (name: string) => string | undefined;\n\tsettings: { executablePath?: string };\n\thomeDirectory: string;\n\tpathDelimiter: string;\n\tisExecutableFile: (candidate: string) => boolean;\n\treadDirectory: (directory: string) => CursorAgentDirectoryEntry[];\n};\n\nexport type VersionProbeOptions = {\n\tencoding: \"utf8\";\n\ttimeout: number;\n};\n\nexport type VersionProbeCallback = (error: Error | null, stdout: string, stderr: string) => void;\n\nexport type VersionProbeDeps = {\n\texecFile: (file: string, args: string[], options: VersionProbeOptions, callback: VersionProbeCallback) => void;\n};\n\nexport class CursorAgentNotInstalledError extends Error {\n\treadonly kind = \"binary_missing\";\n\n\tconstructor() {\n\t\tsuper(\n\t\t\t\"Cursor CLI is not installed. Install it with `curl https://cursor.com/install -fsS | bash`, \" +\n\t\t\t\t\"then ensure ~/.local/bin is on your PATH.\",\n\t\t);\n\t\tthis.name = \"CursorAgentNotInstalledError\";\n\t}\n}\n\nfunction executableCandidate(candidate: string | undefined, deps: CursorAgentExecutableDeps): string | undefined {\n\tif (!candidate) return undefined;\n\ttry {\n\t\treturn deps.isExecutableFile(candidate) ? candidate : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction resolveFromPath(deps: CursorAgentExecutableDeps): string | undefined {\n\tconst pathValue = deps.env(\"PATH\");\n\tif (!pathValue) return undefined;\n\n\tfor (const directory of pathValue.split(deps.pathDelimiter)) {\n\t\tif (!directory) continue;\n\t\tconst candidate = executableCandidate(join(directory, \"cursor-agent\"), deps);\n\t\tif (candidate) return candidate;\n\t}\n\treturn undefined;\n}\n\nfunction resolveFromInstalledVersions(deps: CursorAgentExecutableDeps): string | undefined {\n\tconst versionsDirectory = join(deps.homeDirectory, \".local\", \"share\", \"cursor-agent\", \"versions\");\n\tlet entries: CursorAgentDirectoryEntry[];\n\ttry {\n\t\tentries = deps.readDirectory(versionsDirectory);\n\t} catch {\n\t\treturn undefined;\n\t}\n\n\tconst directoryNames = entries\n\t\t.filter((entry) => entry.isDirectory)\n\t\t.map((entry) => entry.name)\n\t\t.sort()\n\t\t.reverse();\n\n\tfor (const directoryName of directoryNames) {\n\t\tconst candidate = executableCandidate(join(versionsDirectory, directoryName, \"cursor-agent\"), deps);\n\t\tif (candidate) return candidate;\n\t}\n\treturn undefined;\n}\n\nexport function resolveCursorAgentExecutable(deps: CursorAgentExecutableDeps): string {\n\tconst orderedCandidates = [\n\t\tdeps.env(\"SENPI_CURSOR_CLI_OAUTH_EXECUTABLE\"),\n\t\tdeps.env(\"CURSOR_AGENT_EXECUTABLE\"),\n\t\tdeps.settings.executablePath,\n\t];\n\tfor (const candidate of orderedCandidates) {\n\t\tconst executable = executableCandidate(candidate, deps);\n\t\tif (executable) return executable;\n\t}\n\n\tconst pathExecutable = resolveFromPath(deps);\n\tif (pathExecutable) return pathExecutable;\n\n\tconst installedExecutable = resolveFromInstalledVersions(deps);\n\tif (installedExecutable) return installedExecutable;\n\n\tthrow new CursorAgentNotInstalledError();\n}\n\nconst defaultVersionProbeDeps: VersionProbeDeps = {\n\texecFile: (file, args, options, callback) => {\n\t\tnodeExecFile(file, args, options, (error, stdout, stderr) => {\n\t\t\tcallback(error, stdout, stderr);\n\t\t});\n\t},\n};\n\nexport function probeCursorAgentVersion(\n\texecutable: string,\n\tdeps: VersionProbeDeps = defaultVersionProbeDeps,\n): Promise<string> {\n\treturn new Promise((resolve, reject) => {\n\t\tdeps.execFile(executable, [\"--version\"], { encoding: \"utf8\", timeout: 10_000 }, (error, stdout) => {\n\t\t\tif (error) {\n\t\t\t\treject(error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresolve(stdout.trim());\n\t\t});\n\t});\n}\n\nexport function defaultCursorAgentExecutableDeps(): CursorAgentExecutableDeps {\n\treturn {\n\t\tenv: (name) => process.env[name],\n\t\tsettings: {},\n\t\thomeDirectory: homedir(),\n\t\tpathDelimiter: delimiter,\n\t\tisExecutableFile: (candidate) => {\n\t\t\ttry {\n\t\t\t\tif (!statSync(candidate).isFile()) return false;\n\t\t\t\taccessSync(candidate, constants.X_OK);\n\t\t\t\treturn true;\n\t\t\t} catch {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\treadDirectory: (directory) =>\n\t\t\treaddirSync(directory, { withFileTypes: true }).map((entry) => ({\n\t\t\t\tname: entry.name,\n\t\t\t\tisDirectory: entry.isDirectory(),\n\t\t\t})),\n\t};\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"failover.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/failover.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,KAAK,oBAAoB,EAA+C,MAAM,eAAe,CAAC;AACvG,OAAO,EAAE,KAAK,qBAAqB,EAAiB,MAAM,eAAe,CAAC;AAC1E,OAAO,EACN,KAAK,4BAA4B,EACjC,KAAK,mBAAmB,EAIxB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,uBAAuB,GAAG;IACrC,IAAI,EAAE,wBAAwB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,uBAAuB,EAAE,KAAK,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACrC,0FAA0F;IAC1F,SAAS,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,wBAAwB,CAAC,MAAM,IAAI;IAC9C,KAAK,EAAE,eAAe,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACjC,UAAU,EAAE,CACX,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,uBAAuB,KAC5B,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,4BAA4B,CAAC;IACxE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,mBAAmB,GAAG,SAAS,CAAC;IACpE,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;CACrD,CAAC;AAEF,qBAAa,sBAAuB,SAAQ,KAAK;IAChD,QAAQ,CAAC,cAAc,EAAE,4BAA4B,CAAC;IACtD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,4BAA4B,EAAE,OAAO,CAAC;gBAEnC,cAAc,EAAE,4BAA4B,EAAE,QAAQ,EAAE,OAAO,EAAE,4BAA4B,EAAE,OAAO;CAOlH;AAyHD;;;;GAIG;AACH,wBAAuB,oBAAoB,CAAC,MAAM,EACjD,OAAO,EAAE,wBAAwB,CAAC,MAAM,CAAC,GACvC,cAAc,CAAC,MAAM,GAAG,uBAAuB,CAAC,CAmClD"}
1
+ {"version":3,"file":"failover.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/failover.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,KAAK,oBAAoB,EAA+C,MAAM,eAAe,CAAC;AACvG,OAAO,EAAE,KAAK,qBAAqB,EAAiB,MAAM,eAAe,CAAC;AAC1E,OAAO,EACN,KAAK,4BAA4B,EACjC,KAAK,mBAAmB,EAIxB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,uBAAuB,GAAG;IACrC,IAAI,EAAE,wBAAwB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,uBAAuB,EAAE,KAAK,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACrC,0FAA0F;IAC1F,SAAS,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,wBAAwB,CAAC,MAAM,IAAI;IAC9C,KAAK,EAAE,eAAe,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACjC,UAAU,EAAE,CACX,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,uBAAuB,KAC5B,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,4BAA4B,CAAC;IACxE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,mBAAmB,GAAG,SAAS,CAAC;IACpE,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;CACrD,CAAC;AAEF,qBAAa,sBAAuB,SAAQ,KAAK;IAChD,QAAQ,CAAC,cAAc,EAAE,4BAA4B,CAAC;IACtD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,4BAA4B,EAAE,OAAO,CAAC;IAE/C,YAAY,cAAc,EAAE,4BAA4B,EAAE,QAAQ,EAAE,OAAO,EAAE,4BAA4B,EAAE,OAAO,EAMjH;CACD;AAyHD;;;;GAIG;AACH,wBAAuB,oBAAoB,CAAC,MAAM,EACjD,OAAO,EAAE,wBAAwB,CAAC,MAAM,CAAC,GACvC,cAAc,CAAC,MAAM,GAAG,uBAAuB,CAAC,CAmClD"}
@@ -1 +1 @@
1
- {"version":3,"file":"guardrails.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/guardrails.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"guardrails.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/guardrails.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"guardrails.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/guardrails.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { type CursorCliOauthExecutionMode, createCursorCliOauthSandboxModeValidator } from \"./settings.ts\";\n\n/**\n * Guardrails for unattended Cursor CLI execution.\n *\n * The Cursor CLI runs its own tools the moment `--force` is on the argv, so\n * that decision is never implicit: it requires the explicit\n * `noApprovalAcknowledgedAt` acknowledgement, plan mode never forces, and a\n * disabled force merely warns. Command denylists ride along through the\n * per-account HOME's `cli-config.json`, strictly in the probe-proven shape\n * (task 2: `permissions.deny` with exact full-command `Shell(...)` entries).\n */\n\n/** Sandbox modes the installed CLI accepts (task 2 probe: allowed choices are exactly these). */\nexport const CURSOR_CLI_OAUTH_SANDBOX_MODES: readonly [\"enabled\", \"disabled\"] = [\"enabled\", \"disabled\"];\n\nexport const CURSOR_CLI_OAUTH_NO_APPROVAL_EXPLANATION =\n\t\"The Cursor CLI executes its own tools autonomously: with --force there is no senpi approval, no senpi sandboxing, and no tool-level audit for what it runs.\";\n\nexport const CURSOR_CLI_OAUTH_ACKNOWLEDGEMENT_STEP =\n\t'Set \"cursorCliOauthProvider.noApprovalAcknowledgedAt\" to the current ISO-8601 timestamp (for example \"2026-08-17T12:00:00.000Z\") in senpi settings to acknowledge this once.';\n\n/** One warning per session when force is disabled in agent mode (contracts block, task 18). */\nexport const CURSOR_CLI_OAUTH_FORCE_DISABLED_WARNING =\n\t'cursor-cli-oauth: forceExecution is disabled in agent mode, so the Cursor CLI will auto-reject every tool call; set executionMode to \"plan\" for planning turns that do not need execution.';\n\nexport type CursorCliGuardrailWarningCode =\n\t| \"force_execution_disabled\"\n\t| \"sandbox_mode_ignored\"\n\t| \"deny_command_rejected\";\n\nexport type CursorCliGuardrailWarning = {\n\treadonly kind: \"warning\";\n\treadonly code: CursorCliGuardrailWarningCode;\n\treadonly message: string;\n};\n\nexport type CursorCliExecutionRefusal = {\n\treadonly kind: \"refusal\";\n\treadonly code: \"no_approval_acknowledgement_required\";\n\treadonly message: string;\n\treadonly acknowledgementStep: string;\n};\n\nexport type CursorCliGuardrailSession = {\n\t/** Every warning emitted so far in this session; one-time gates live here. */\n\treadonly warnings: readonly CursorCliGuardrailWarning[];\n\t/** Emit a warning once per deduplication key; returns whether it was emitted. */\n\twarn(code: CursorCliGuardrailWarningCode, message: string, key?: string): boolean;\n\t/** Validate a sandbox mode against the probe-proven allowlist, warning once per rejected value. */\n\tvalidateSandboxMode(value: string | undefined): string | undefined;\n};\n\nexport function createCursorCliGuardrailSession(): CursorCliGuardrailSession {\n\tconst warnings: CursorCliGuardrailWarning[] = [];\n\tconst emitted = new Set<string>();\n\tconst warn = (code: CursorCliGuardrailWarningCode, message: string, key: string = code): boolean => {\n\t\tif (emitted.has(key)) return false;\n\t\temitted.add(key);\n\t\twarnings.push({ kind: \"warning\", code, message });\n\t\treturn true;\n\t};\n\tconst validateSandboxMode = createCursorCliOauthSandboxModeValidator(\n\t\tnew Set(CURSOR_CLI_OAUTH_SANDBOX_MODES),\n\t\t(message) => {\n\t\t\twarn(\"sandbox_mode_ignored\", message, `sandbox_mode_ignored:${message}`);\n\t\t},\n\t);\n\treturn {\n\t\twarnings,\n\t\twarn,\n\t\tvalidateSandboxMode,\n\t};\n}\n\nexport type CursorCliExecutionPolicyInput = {\n\treadonly forceExecution: boolean;\n\treadonly noApprovalAcknowledgedAt: string | undefined;\n\treadonly executionMode: CursorCliOauthExecutionMode;\n\treadonly sandboxMode: string | undefined;\n};\n\nexport type CursorCliExecutionDecision =\n\t| { readonly status: \"refused\"; readonly refusal: CursorCliExecutionRefusal }\n\t| {\n\t\t\treadonly status: \"allowed\";\n\t\t\treadonly force: boolean;\n\t\t\treadonly executionMode: CursorCliOauthExecutionMode;\n\t\t\treadonly sandboxMode: string | undefined;\n\t\t\treadonly denyCommands: readonly string[];\n\t\t\t/** Warnings accumulated in the session so far (not only this decision). */\n\t\t\treadonly warnings: readonly CursorCliGuardrailWarning[];\n\t };\n\n/** Typed refusal for an unacknowledged force attempt; never confused with a warning. */\nexport class CursorCliExecutionRefusalError extends Error {\n\treadonly code = \"no_approval_acknowledgement_required\" as const;\n\treadonly refusal: CursorCliExecutionRefusal;\n\n\tconstructor(refusal: CursorCliExecutionRefusal) {\n\t\tsuper(refusal.message);\n\t\tthis.name = \"CursorCliExecutionRefusalError\";\n\t\tthis.refusal = refusal;\n\t}\n}\n\n/** Glob breadth is unproven (task 2 probed exact full commands only), so glob-bearing entries are dropped. */\nconst GLOB_METACHARACTERS = /[*?[]/u;\n\nexport function sanitizeCursorCliDenyCommands(\n\tentries: readonly string[],\n\twarn?: (message: string) => void,\n): readonly string[] {\n\tconst kept: string[] = [];\n\tfor (const entry of entries) {\n\t\tconst command = entry.trim();\n\t\tif (command.length === 0) {\n\t\t\twarn?.(\"Ignoring an empty Cursor CLI deny command entry (exact full commands only)\");\n\t\t\tcontinue;\n\t\t}\n\t\tif (GLOB_METACHARACTERS.test(command)) {\n\t\t\twarn?.(\n\t\t\t\t`Ignoring glob-bearing Cursor CLI deny command (exact full commands only; glob support is unproven): ${command}`,\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tkept.push(command);\n\t}\n\treturn kept;\n}\n\n/**\n * Decide whether a turn may run unattended.\n *\n * - `--force` is emitted only in agent mode, only when force is requested, and\n * only after `noApprovalAcknowledgedAt` is set; otherwise the decision is a\n * typed refusal naming the acknowledgement step.\n * - Plan mode never emits `--force` (the CLI only plans), so it needs no\n * acknowledgement.\n * - Force disabled in agent mode is allowed but warns once per session.\n * - Unproven sandbox modes are ignored with one warning per distinct value.\n */\n/**\n * True while the settings guarantee an unattended agent-mode refusal: force is\n * requested outside plan mode but `noApprovalAcknowledgedAt` was never set.\n * Shared by the execution policy and the fallback-eligibility hook so the two\n * can never disagree about when the lane refuses.\n */\nexport function cursorCliForceRefusalPending(\n\tinput: Pick<CursorCliExecutionPolicyInput, \"forceExecution\" | \"noApprovalAcknowledgedAt\" | \"executionMode\">,\n): boolean {\n\treturn input.executionMode !== \"plan\" && input.forceExecution && input.noApprovalAcknowledgedAt === undefined;\n}\n\nexport function resolveCursorCliExecutionPolicy(\n\tinput: CursorCliExecutionPolicyInput,\n\tsession: CursorCliGuardrailSession,\n\tdenyCommands: readonly string[] = [],\n): CursorCliExecutionDecision {\n\tconst planMode = input.executionMode === \"plan\";\n\tconst wantsForce = !planMode && input.forceExecution;\n\tif (cursorCliForceRefusalPending(input)) {\n\t\tconst refusal: CursorCliExecutionRefusal = {\n\t\t\tkind: \"refusal\",\n\t\t\tcode: \"no_approval_acknowledgement_required\",\n\t\t\tmessage: `${CURSOR_CLI_OAUTH_NO_APPROVAL_EXPLANATION} ${CURSOR_CLI_OAUTH_ACKNOWLEDGEMENT_STEP}`,\n\t\t\tacknowledgementStep: CURSOR_CLI_OAUTH_ACKNOWLEDGEMENT_STEP,\n\t\t};\n\t\treturn { status: \"refused\", refusal };\n\t}\n\tif (!planMode && !input.forceExecution) {\n\t\tsession.warn(\"force_execution_disabled\", CURSOR_CLI_OAUTH_FORCE_DISABLED_WARNING);\n\t}\n\tconst sandboxMode = session.validateSandboxMode(input.sandboxMode);\n\tconst sanitizedDenyCommands = sanitizeCursorCliDenyCommands(denyCommands, (message) => {\n\t\tsession.warn(\"deny_command_rejected\", message, `deny_command_rejected:${message}`);\n\t});\n\treturn {\n\t\tstatus: \"allowed\",\n\t\tforce: wantsForce,\n\t\texecutionMode: input.executionMode,\n\t\tsandboxMode,\n\t\tdenyCommands: sanitizedDenyCommands,\n\t\twarnings: [...session.warnings],\n\t};\n}\n\nconst CLI_CONFIG_RELATIVE_PATH = join(\".cursor\", \"cli-config.json\");\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction shellDenyEntry(command: string): string {\n\treturn `Shell(${command})`;\n}\n\n/**\n * Pre-spawn hook: (re-)apply the deny list to the sandbox HOME's\n * `cli-config.json`.\n *\n * The CLI rewrites this file during every invocation (task 2 observed its own\n * keys appearing and `cli-config.json.bad` sidecars for malformed content), so\n * this must run immediately before each spawn, composing with the home-store\n * prepare pass that re-writes `auth.json` on the same cadence. Writes only the\n * probe-proven shape (`permissions.deny` with exact `Shell(<full command>)`\n * entries) and preserves every CLI-owned key already present. Writes nothing\n * when no deny commands are configured.\n */\nexport function applyCursorCliDenyConfig(home: string, denyCommands: readonly string[]): void {\n\tif (denyCommands.length === 0) return;\n\tconst configPath = join(home, CLI_CONFIG_RELATIVE_PATH);\n\tlet existing: Record<string, unknown> = {};\n\tif (existsSync(configPath)) {\n\t\ttry {\n\t\t\tconst parsed: unknown = JSON.parse(readFileSync(configPath, \"utf8\"));\n\t\t\tif (isRecord(parsed)) existing = parsed;\n\t\t} catch {\n\t\t\t// The CLI quarantines unparseable config as cli-config.json.bad and\n\t\t\t// proceeds with defaults; start from the proven minimal shape.\n\t\t}\n\t}\n\tconst permissions = isRecord(existing.permissions) ? { ...existing.permissions } : {};\n\tconst config: Record<string, unknown> = {\n\t\t...existing,\n\t\tpermissions: { ...permissions, deny: denyCommands.map(shellDenyEntry) },\n\t};\n\twriteFileSync(configPath, `${JSON.stringify(config, null, \"\\t\")}\\n`, \"utf8\");\n}\n"]}
1
+ {"version":3,"file":"guardrails.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/guardrails.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAoC,wCAAwC,EAAE,MAAM,eAAe,CAAC;AAE3G;;;;;;;;;GASG;AAEH,iGAAiG;AACjG,MAAM,CAAC,MAAM,8BAA8B,GAAqC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAExG,MAAM,CAAC,MAAM,wCAAwC,GACpD,6JAA6J,CAAC;AAE/J,MAAM,CAAC,MAAM,qCAAqC,GACjD,8KAA8K,CAAC;AAEhL,+FAA+F;AAC/F,MAAM,CAAC,MAAM,uCAAuC,GACnD,4LAA4L,CAAC;AA6B9L,MAAM,UAAU,+BAA+B;IAC9C,MAAM,QAAQ,GAAgC,EAAE,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,IAAI,GAAG,CAAC,IAAmC,EAAE,OAAe,EAAE,GAAG,GAAW,IAAI,EAAW,EAAE;QAClG,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACb,CAAC,CAAC;IACF,MAAM,mBAAmB,GAAG,wCAAwC,CACnE,IAAI,GAAG,CAAC,8BAA8B,CAAC,EACvC,CAAC,OAAO,EAAE,EAAE;QACX,IAAI,CAAC,sBAAsB,EAAE,OAAO,EAAE,wBAAwB,OAAO,EAAE,CAAC,CAAC;IAC1E,CAAC,CACD,CAAC;IACF,OAAO;QACN,QAAQ;QACR,IAAI;QACJ,mBAAmB;KACnB,CAAC;AACH,CAAC;AAqBD,wFAAwF;AACxF,MAAM,OAAO,8BAA+B,SAAQ,KAAK;IAIxD,YAAY,OAAkC;QAC7C,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAJf,SAAI,GAAG,sCAA+C,CAAC;QAK/D,IAAI,CAAC,IAAI,GAAG,gCAAgC,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;CACD;AAED,8GAA8G;AAC9G,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AAErC,MAAM,UAAU,6BAA6B,CAC5C,OAA0B,EAC1B,IAAgC;IAEhC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,IAAI,EAAE,CAAC,4EAA4E,CAAC,CAAC;YACrF,SAAS;QACV,CAAC;QACD,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,IAAI,EAAE,CACL,uGAAuG,OAAO,EAAE,CAChH,CAAC;YACF,SAAS;QACV,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;;;;;;;GAUG;AACH;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAC3C,KAA2G;IAE3G,OAAO,KAAK,CAAC,aAAa,KAAK,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,wBAAwB,KAAK,SAAS,CAAC;AAC/G,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC9C,KAAoC,EACpC,OAAkC,EAClC,YAAY,GAAsB,EAAE;IAEpC,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,KAAK,MAAM,CAAC;IAChD,MAAM,UAAU,GAAG,CAAC,QAAQ,IAAI,KAAK,CAAC,cAAc,CAAC;IACrD,IAAI,4BAA4B,CAAC,KAAK,CAAC,EAAE,CAAC;QACzC,MAAM,OAAO,GAA8B;YAC1C,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,sCAAsC;YAC5C,OAAO,EAAE,GAAG,wCAAwC,IAAI,qCAAqC,EAAE;YAC/F,mBAAmB,EAAE,qCAAqC;SAC1D,CAAC;QACF,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;IACvC,CAAC;IACD,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,0BAA0B,EAAE,uCAAuC,CAAC,CAAC;IACnF,CAAC;IACD,MAAM,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACnE,MAAM,qBAAqB,GAAG,6BAA6B,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE;QACrF,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,OAAO,EAAE,yBAAyB,OAAO,EAAE,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IACH,OAAO;QACN,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,UAAU;QACjB,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,WAAW;QACX,YAAY,EAAE,qBAAqB;QACnC,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;KAC/B,CAAC;AACH,CAAC;AAED,MAAM,wBAAwB,GAAG,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAEpE,SAAS,QAAQ,CAAC,KAAc;IAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,cAAc,CAAC,OAAe;IACtC,OAAO,SAAS,OAAO,GAAG,CAAC;AAC5B,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAY,EAAE,YAA+B;IACrF,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACtC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;IACxD,IAAI,QAAQ,GAA4B,EAAE,CAAC;IAC3C,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACJ,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;YACrE,IAAI,QAAQ,CAAC,MAAM,CAAC;gBAAE,QAAQ,GAAG,MAAM,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACR,oEAAoE;YACpE,+DAA+D;QAChE,CAAC;IACF,CAAC;IACD,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtF,MAAM,MAAM,GAA4B;QACvC,GAAG,QAAQ;QACX,WAAW,EAAE,EAAE,GAAG,WAAW,EAAE,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE;KACvE,CAAC;IACF,aAAa,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC9E,CAAC","sourcesContent":["import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { type CursorCliOauthExecutionMode, createCursorCliOauthSandboxModeValidator } from \"./settings.ts\";\n\n/**\n * Guardrails for unattended Cursor CLI execution.\n *\n * The Cursor CLI runs its own tools the moment `--force` is on the argv, so\n * that decision is never implicit: it requires the explicit\n * `noApprovalAcknowledgedAt` acknowledgement, plan mode never forces, and a\n * disabled force merely warns. Command denylists ride along through the\n * per-account HOME's `cli-config.json`, strictly in the probe-proven shape\n * (task 2: `permissions.deny` with exact full-command `Shell(...)` entries).\n */\n\n/** Sandbox modes the installed CLI accepts (task 2 probe: allowed choices are exactly these). */\nexport const CURSOR_CLI_OAUTH_SANDBOX_MODES: readonly [\"enabled\", \"disabled\"] = [\"enabled\", \"disabled\"];\n\nexport const CURSOR_CLI_OAUTH_NO_APPROVAL_EXPLANATION =\n\t\"The Cursor CLI executes its own tools autonomously: with --force there is no senpi approval, no senpi sandboxing, and no tool-level audit for what it runs.\";\n\nexport const CURSOR_CLI_OAUTH_ACKNOWLEDGEMENT_STEP =\n\t'Set \"cursorCliOauthProvider.noApprovalAcknowledgedAt\" to the current ISO-8601 timestamp (for example \"2026-08-17T12:00:00.000Z\") in senpi settings to acknowledge this once.';\n\n/** One warning per session when force is disabled in agent mode (contracts block, task 18). */\nexport const CURSOR_CLI_OAUTH_FORCE_DISABLED_WARNING =\n\t'cursor-cli-oauth: forceExecution is disabled in agent mode, so the Cursor CLI will auto-reject every tool call; set executionMode to \"plan\" for planning turns that do not need execution.';\n\nexport type CursorCliGuardrailWarningCode =\n\t| \"force_execution_disabled\"\n\t| \"sandbox_mode_ignored\"\n\t| \"deny_command_rejected\";\n\nexport type CursorCliGuardrailWarning = {\n\treadonly kind: \"warning\";\n\treadonly code: CursorCliGuardrailWarningCode;\n\treadonly message: string;\n};\n\nexport type CursorCliExecutionRefusal = {\n\treadonly kind: \"refusal\";\n\treadonly code: \"no_approval_acknowledgement_required\";\n\treadonly message: string;\n\treadonly acknowledgementStep: string;\n};\n\nexport type CursorCliGuardrailSession = {\n\t/** Every warning emitted so far in this session; one-time gates live here. */\n\treadonly warnings: readonly CursorCliGuardrailWarning[];\n\t/** Emit a warning once per deduplication key; returns whether it was emitted. */\n\twarn(code: CursorCliGuardrailWarningCode, message: string, key?: string): boolean;\n\t/** Validate a sandbox mode against the probe-proven allowlist, warning once per rejected value. */\n\tvalidateSandboxMode(value: string | undefined): string | undefined;\n};\n\nexport function createCursorCliGuardrailSession(): CursorCliGuardrailSession {\n\tconst warnings: CursorCliGuardrailWarning[] = [];\n\tconst emitted = new Set<string>();\n\tconst warn = (code: CursorCliGuardrailWarningCode, message: string, key: string = code): boolean => {\n\t\tif (emitted.has(key)) return false;\n\t\temitted.add(key);\n\t\twarnings.push({ kind: \"warning\", code, message });\n\t\treturn true;\n\t};\n\tconst validateSandboxMode = createCursorCliOauthSandboxModeValidator(\n\t\tnew Set(CURSOR_CLI_OAUTH_SANDBOX_MODES),\n\t\t(message) => {\n\t\t\twarn(\"sandbox_mode_ignored\", message, `sandbox_mode_ignored:${message}`);\n\t\t},\n\t);\n\treturn {\n\t\twarnings,\n\t\twarn,\n\t\tvalidateSandboxMode,\n\t};\n}\n\nexport type CursorCliExecutionPolicyInput = {\n\treadonly forceExecution: boolean;\n\treadonly noApprovalAcknowledgedAt: string | undefined;\n\treadonly executionMode: CursorCliOauthExecutionMode;\n\treadonly sandboxMode: string | undefined;\n};\n\nexport type CursorCliExecutionDecision =\n\t| { readonly status: \"refused\"; readonly refusal: CursorCliExecutionRefusal }\n\t| {\n\t\t\treadonly status: \"allowed\";\n\t\t\treadonly force: boolean;\n\t\t\treadonly executionMode: CursorCliOauthExecutionMode;\n\t\t\treadonly sandboxMode: string | undefined;\n\t\t\treadonly denyCommands: readonly string[];\n\t\t\t/** Warnings accumulated in the session so far (not only this decision). */\n\t\t\treadonly warnings: readonly CursorCliGuardrailWarning[];\n\t };\n\n/** Typed refusal for an unacknowledged force attempt; never confused with a warning. */\nexport class CursorCliExecutionRefusalError extends Error {\n\treadonly code = \"no_approval_acknowledgement_required\" as const;\n\treadonly refusal: CursorCliExecutionRefusal;\n\n\tconstructor(refusal: CursorCliExecutionRefusal) {\n\t\tsuper(refusal.message);\n\t\tthis.name = \"CursorCliExecutionRefusalError\";\n\t\tthis.refusal = refusal;\n\t}\n}\n\n/** Glob breadth is unproven (task 2 probed exact full commands only), so glob-bearing entries are dropped. */\nconst GLOB_METACHARACTERS = /[*?[]/u;\n\nexport function sanitizeCursorCliDenyCommands(\n\tentries: readonly string[],\n\twarn?: (message: string) => void,\n): readonly string[] {\n\tconst kept: string[] = [];\n\tfor (const entry of entries) {\n\t\tconst command = entry.trim();\n\t\tif (command.length === 0) {\n\t\t\twarn?.(\"Ignoring an empty Cursor CLI deny command entry (exact full commands only)\");\n\t\t\tcontinue;\n\t\t}\n\t\tif (GLOB_METACHARACTERS.test(command)) {\n\t\t\twarn?.(\n\t\t\t\t`Ignoring glob-bearing Cursor CLI deny command (exact full commands only; glob support is unproven): ${command}`,\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tkept.push(command);\n\t}\n\treturn kept;\n}\n\n/**\n * Decide whether a turn may run unattended.\n *\n * - `--force` is emitted only in agent mode, only when force is requested, and\n * only after `noApprovalAcknowledgedAt` is set; otherwise the decision is a\n * typed refusal naming the acknowledgement step.\n * - Plan mode never emits `--force` (the CLI only plans), so it needs no\n * acknowledgement.\n * - Force disabled in agent mode is allowed but warns once per session.\n * - Unproven sandbox modes are ignored with one warning per distinct value.\n */\n/**\n * True while the settings guarantee an unattended agent-mode refusal: force is\n * requested outside plan mode but `noApprovalAcknowledgedAt` was never set.\n * Shared by the execution policy and the fallback-eligibility hook so the two\n * can never disagree about when the lane refuses.\n */\nexport function cursorCliForceRefusalPending(\n\tinput: Pick<CursorCliExecutionPolicyInput, \"forceExecution\" | \"noApprovalAcknowledgedAt\" | \"executionMode\">,\n): boolean {\n\treturn input.executionMode !== \"plan\" && input.forceExecution && input.noApprovalAcknowledgedAt === undefined;\n}\n\nexport function resolveCursorCliExecutionPolicy(\n\tinput: CursorCliExecutionPolicyInput,\n\tsession: CursorCliGuardrailSession,\n\tdenyCommands: readonly string[] = [],\n): CursorCliExecutionDecision {\n\tconst planMode = input.executionMode === \"plan\";\n\tconst wantsForce = !planMode && input.forceExecution;\n\tif (cursorCliForceRefusalPending(input)) {\n\t\tconst refusal: CursorCliExecutionRefusal = {\n\t\t\tkind: \"refusal\",\n\t\t\tcode: \"no_approval_acknowledgement_required\",\n\t\t\tmessage: `${CURSOR_CLI_OAUTH_NO_APPROVAL_EXPLANATION} ${CURSOR_CLI_OAUTH_ACKNOWLEDGEMENT_STEP}`,\n\t\t\tacknowledgementStep: CURSOR_CLI_OAUTH_ACKNOWLEDGEMENT_STEP,\n\t\t};\n\t\treturn { status: \"refused\", refusal };\n\t}\n\tif (!planMode && !input.forceExecution) {\n\t\tsession.warn(\"force_execution_disabled\", CURSOR_CLI_OAUTH_FORCE_DISABLED_WARNING);\n\t}\n\tconst sandboxMode = session.validateSandboxMode(input.sandboxMode);\n\tconst sanitizedDenyCommands = sanitizeCursorCliDenyCommands(denyCommands, (message) => {\n\t\tsession.warn(\"deny_command_rejected\", message, `deny_command_rejected:${message}`);\n\t});\n\treturn {\n\t\tstatus: \"allowed\",\n\t\tforce: wantsForce,\n\t\texecutionMode: input.executionMode,\n\t\tsandboxMode,\n\t\tdenyCommands: sanitizedDenyCommands,\n\t\twarnings: [...session.warnings],\n\t};\n}\n\nconst CLI_CONFIG_RELATIVE_PATH = join(\".cursor\", \"cli-config.json\");\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction shellDenyEntry(command: string): string {\n\treturn `Shell(${command})`;\n}\n\n/**\n * Pre-spawn hook: (re-)apply the deny list to the sandbox HOME's\n * `cli-config.json`.\n *\n * The CLI rewrites this file during every invocation (task 2 observed its own\n * keys appearing and `cli-config.json.bad` sidecars for malformed content), so\n * this must run immediately before each spawn, composing with the home-store\n * prepare pass that re-writes `auth.json` on the same cadence. Writes only the\n * probe-proven shape (`permissions.deny` with exact `Shell(<full command>)`\n * entries) and preserves every CLI-owned key already present. Writes nothing\n * when no deny commands are configured.\n */\nexport function applyCursorCliDenyConfig(home: string, denyCommands: readonly string[]): void {\n\tif (denyCommands.length === 0) return;\n\tconst configPath = join(home, CLI_CONFIG_RELATIVE_PATH);\n\tlet existing: Record<string, unknown> = {};\n\tif (existsSync(configPath)) {\n\t\ttry {\n\t\t\tconst parsed: unknown = JSON.parse(readFileSync(configPath, \"utf8\"));\n\t\t\tif (isRecord(parsed)) existing = parsed;\n\t\t} catch {\n\t\t\t// The CLI quarantines unparseable config as cli-config.json.bad and\n\t\t\t// proceeds with defaults; start from the proven minimal shape.\n\t\t}\n\t}\n\tconst permissions = isRecord(existing.permissions) ? { ...existing.permissions } : {};\n\tconst config: Record<string, unknown> = {\n\t\t...existing,\n\t\tpermissions: { ...permissions, deny: denyCommands.map(shellDenyEntry) },\n\t};\n\twriteFileSync(configPath, `${JSON.stringify(config, null, \"\\t\")}\\n`, \"utf8\");\n}\n"]}