@code-yeongyu/senpi 2026.8.16 → 2026.8.18

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 (628) hide show
  1. package/CHANGELOG.md +74 -0
  2. package/dist/bun/cli.js +1 -0
  3. package/dist/bun/cli.js.map +1 -1
  4. package/dist/bun/register-cursor-agent.d.ts +2 -0
  5. package/dist/bun/register-cursor-agent.d.ts.map +1 -0
  6. package/dist/bun/register-cursor-agent.js +4 -0
  7. package/dist/bun/register-cursor-agent.js.map +1 -0
  8. package/dist/core/agent-session-services.js +2 -2
  9. package/dist/core/agent-session-services.js.map +1 -1
  10. package/dist/core/agent-session.d.ts +48 -5
  11. package/dist/core/agent-session.d.ts.map +1 -1
  12. package/dist/core/agent-session.js +239 -61
  13. package/dist/core/agent-session.js.map +1 -1
  14. package/dist/core/cursor-exec-bridge-session.d.ts +11 -0
  15. package/dist/core/cursor-exec-bridge-session.d.ts.map +1 -0
  16. package/dist/core/cursor-exec-bridge-session.js +17 -0
  17. package/dist/core/cursor-exec-bridge-session.js.map +1 -0
  18. package/dist/core/cursor-exec-bridge.d.ts +52 -0
  19. package/dist/core/cursor-exec-bridge.d.ts.map +1 -0
  20. package/dist/core/cursor-exec-bridge.js +196 -0
  21. package/dist/core/cursor-exec-bridge.js.map +1 -0
  22. package/dist/core/extensions/builtin/cursor-cli-oauth/account-command.d.ts +31 -0
  23. package/dist/core/extensions/builtin/cursor-cli-oauth/account-command.d.ts.map +1 -0
  24. package/dist/core/extensions/builtin/cursor-cli-oauth/account-command.js +298 -0
  25. package/dist/core/extensions/builtin/cursor-cli-oauth/account-command.js.map +1 -0
  26. package/dist/core/extensions/builtin/cursor-cli-oauth/accounts.d.ts +38 -0
  27. package/dist/core/extensions/builtin/cursor-cli-oauth/accounts.d.ts.map +1 -0
  28. package/dist/core/extensions/builtin/cursor-cli-oauth/accounts.js +75 -0
  29. package/dist/core/extensions/builtin/cursor-cli-oauth/accounts.js.map +1 -0
  30. package/dist/core/extensions/builtin/cursor-cli-oauth/affinity.d.ts +24 -0
  31. package/dist/core/extensions/builtin/cursor-cli-oauth/affinity.d.ts.map +1 -0
  32. package/dist/core/extensions/builtin/cursor-cli-oauth/affinity.js +64 -0
  33. package/dist/core/extensions/builtin/cursor-cli-oauth/affinity.js.map +1 -0
  34. package/dist/core/extensions/builtin/cursor-cli-oauth/diagnostics.d.ts +139 -0
  35. package/dist/core/extensions/builtin/cursor-cli-oauth/diagnostics.d.ts.map +1 -0
  36. package/dist/core/extensions/builtin/cursor-cli-oauth/diagnostics.js +362 -0
  37. package/dist/core/extensions/builtin/cursor-cli-oauth/diagnostics.js.map +1 -0
  38. package/dist/core/extensions/builtin/cursor-cli-oauth/errors.d.ts +19 -0
  39. package/dist/core/extensions/builtin/cursor-cli-oauth/errors.d.ts.map +1 -0
  40. package/dist/core/extensions/builtin/cursor-cli-oauth/errors.js +122 -0
  41. package/dist/core/extensions/builtin/cursor-cli-oauth/errors.js.map +1 -0
  42. package/dist/core/extensions/builtin/cursor-cli-oauth/executable.d.ts +30 -0
  43. package/dist/core/extensions/builtin/cursor-cli-oauth/executable.d.ts.map +1 -0
  44. package/dist/core/extensions/builtin/cursor-cli-oauth/executable.js +117 -0
  45. package/dist/core/extensions/builtin/cursor-cli-oauth/executable.js.map +1 -0
  46. package/dist/core/extensions/builtin/cursor-cli-oauth/failover.d.ts +39 -0
  47. package/dist/core/extensions/builtin/cursor-cli-oauth/failover.d.ts.map +1 -0
  48. package/dist/core/extensions/builtin/cursor-cli-oauth/failover.js +155 -0
  49. package/dist/core/extensions/builtin/cursor-cli-oauth/failover.js.map +1 -0
  50. package/dist/core/extensions/builtin/cursor-cli-oauth/guardrails.d.ts +89 -0
  51. package/dist/core/extensions/builtin/cursor-cli-oauth/guardrails.d.ts.map +1 -0
  52. package/dist/core/extensions/builtin/cursor-cli-oauth/guardrails.js +147 -0
  53. package/dist/core/extensions/builtin/cursor-cli-oauth/guardrails.js.map +1 -0
  54. package/dist/core/extensions/builtin/cursor-cli-oauth/home-store.d.ts +20 -0
  55. package/dist/core/extensions/builtin/cursor-cli-oauth/home-store.d.ts.map +1 -0
  56. package/dist/core/extensions/builtin/cursor-cli-oauth/home-store.js +99 -0
  57. package/dist/core/extensions/builtin/cursor-cli-oauth/home-store.js.map +1 -0
  58. package/dist/core/extensions/builtin/cursor-cli-oauth/index.d.ts +25 -0
  59. package/dist/core/extensions/builtin/cursor-cli-oauth/index.d.ts.map +1 -0
  60. package/dist/core/extensions/builtin/cursor-cli-oauth/index.js +69 -0
  61. package/dist/core/extensions/builtin/cursor-cli-oauth/index.js.map +1 -0
  62. package/dist/core/extensions/builtin/cursor-cli-oauth/models.d.ts +27 -0
  63. package/dist/core/extensions/builtin/cursor-cli-oauth/models.d.ts.map +1 -0
  64. package/dist/core/extensions/builtin/cursor-cli-oauth/models.js +242 -0
  65. package/dist/core/extensions/builtin/cursor-cli-oauth/models.js.map +1 -0
  66. package/dist/core/extensions/builtin/cursor-cli-oauth/oauth-login.d.ts +77 -0
  67. package/dist/core/extensions/builtin/cursor-cli-oauth/oauth-login.d.ts.map +1 -0
  68. package/dist/core/extensions/builtin/cursor-cli-oauth/oauth-login.js +361 -0
  69. package/dist/core/extensions/builtin/cursor-cli-oauth/oauth-login.js.map +1 -0
  70. package/dist/core/extensions/builtin/cursor-cli-oauth/session-router.d.ts +94 -0
  71. package/dist/core/extensions/builtin/cursor-cli-oauth/session-router.d.ts.map +1 -0
  72. package/dist/core/extensions/builtin/cursor-cli-oauth/session-router.js +248 -0
  73. package/dist/core/extensions/builtin/cursor-cli-oauth/session-router.js.map +1 -0
  74. package/dist/core/extensions/builtin/cursor-cli-oauth/settings.d.ts +37 -0
  75. package/dist/core/extensions/builtin/cursor-cli-oauth/settings.d.ts.map +1 -0
  76. package/dist/core/extensions/builtin/cursor-cli-oauth/settings.js +196 -0
  77. package/dist/core/extensions/builtin/cursor-cli-oauth/settings.js.map +1 -0
  78. package/dist/core/extensions/builtin/cursor-cli-oauth/spawn-args.d.ts +11 -0
  79. package/dist/core/extensions/builtin/cursor-cli-oauth/spawn-args.d.ts.map +1 -0
  80. package/dist/core/extensions/builtin/cursor-cli-oauth/spawn-args.js +17 -0
  81. package/dist/core/extensions/builtin/cursor-cli-oauth/spawn-args.js.map +1 -0
  82. package/dist/core/extensions/builtin/cursor-cli-oauth/stream-parser.d.ts +104 -0
  83. package/dist/core/extensions/builtin/cursor-cli-oauth/stream-parser.d.ts.map +1 -0
  84. package/dist/core/extensions/builtin/cursor-cli-oauth/stream-parser.js +301 -0
  85. package/dist/core/extensions/builtin/cursor-cli-oauth/stream-parser.js.map +1 -0
  86. package/dist/core/extensions/builtin/cursor-cli-oauth/stream.d.ts +26 -0
  87. package/dist/core/extensions/builtin/cursor-cli-oauth/stream.d.ts.map +1 -0
  88. package/dist/core/extensions/builtin/cursor-cli-oauth/stream.js +587 -0
  89. package/dist/core/extensions/builtin/cursor-cli-oauth/stream.js.map +1 -0
  90. package/dist/core/extensions/builtin/cursor-cli-oauth/transport.d.ts +43 -0
  91. package/dist/core/extensions/builtin/cursor-cli-oauth/transport.d.ts.map +1 -0
  92. package/dist/core/extensions/builtin/cursor-cli-oauth/transport.js +196 -0
  93. package/dist/core/extensions/builtin/cursor-cli-oauth/transport.js.map +1 -0
  94. package/dist/core/extensions/builtin/goal/channel-state-subscriptions.d.ts +9 -0
  95. package/dist/core/extensions/builtin/goal/channel-state-subscriptions.d.ts.map +1 -0
  96. package/dist/core/extensions/builtin/goal/channel-state-subscriptions.js +18 -0
  97. package/dist/core/extensions/builtin/goal/channel-state-subscriptions.js.map +1 -0
  98. package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts.map +1 -1
  99. package/dist/core/extensions/builtin/goal/monitor-continuation.js +10 -9
  100. package/dist/core/extensions/builtin/goal/monitor-continuation.js.map +1 -1
  101. package/dist/core/extensions/builtin/index.d.ts.map +1 -1
  102. package/dist/core/extensions/builtin/index.js +5 -2
  103. package/dist/core/extensions/builtin/index.js.map +1 -1
  104. package/dist/core/extensions/builtin/loop-guard/detectors.d.ts.map +1 -1
  105. package/dist/core/extensions/builtin/loop-guard/detectors.js +21 -3
  106. package/dist/core/extensions/builtin/loop-guard/detectors.js.map +1 -1
  107. package/dist/core/extensions/builtin/loop-guard/escalation.d.ts +24 -0
  108. package/dist/core/extensions/builtin/loop-guard/escalation.d.ts.map +1 -0
  109. package/dist/core/extensions/builtin/loop-guard/escalation.js +77 -0
  110. package/dist/core/extensions/builtin/loop-guard/escalation.js.map +1 -0
  111. package/dist/core/extensions/builtin/loop-guard/index.d.ts.map +1 -1
  112. package/dist/core/extensions/builtin/loop-guard/index.js +98 -3
  113. package/dist/core/extensions/builtin/loop-guard/index.js.map +1 -1
  114. package/dist/core/extensions/builtin/loop-guard/notice.d.ts +9 -0
  115. package/dist/core/extensions/builtin/loop-guard/notice.d.ts.map +1 -1
  116. package/dist/core/extensions/builtin/loop-guard/notice.js +17 -0
  117. package/dist/core/extensions/builtin/loop-guard/notice.js.map +1 -1
  118. package/dist/core/extensions/builtin/loop-guard/policy.d.ts +4 -0
  119. package/dist/core/extensions/builtin/loop-guard/policy.d.ts.map +1 -1
  120. package/dist/core/extensions/builtin/loop-guard/policy.js +4 -0
  121. package/dist/core/extensions/builtin/loop-guard/policy.js.map +1 -1
  122. package/dist/core/extensions/builtin/loop-guard/renderer.d.ts +2 -0
  123. package/dist/core/extensions/builtin/loop-guard/renderer.d.ts.map +1 -1
  124. package/dist/core/extensions/builtin/loop-guard/renderer.js +11 -0
  125. package/dist/core/extensions/builtin/loop-guard/renderer.js.map +1 -1
  126. package/dist/core/extensions/builtin/loop-guard/tracker.d.ts +1 -1
  127. package/dist/core/extensions/builtin/loop-guard/tracker.d.ts.map +1 -1
  128. package/dist/core/extensions/builtin/loop-guard/tracker.js +3 -1
  129. package/dist/core/extensions/builtin/loop-guard/tracker.js.map +1 -1
  130. package/dist/core/extensions/builtin/monitor-state-event.d.ts +6 -0
  131. package/dist/core/extensions/builtin/monitor-state-event.d.ts.map +1 -1
  132. package/dist/core/extensions/builtin/monitor-state-event.js +10 -0
  133. package/dist/core/extensions/builtin/monitor-state-event.js.map +1 -1
  134. package/dist/core/model-resolver.js +1 -1
  135. package/dist/core/model-resolver.js.map +1 -1
  136. package/dist/core/model-runtime.d.ts +7 -2
  137. package/dist/core/model-runtime.d.ts.map +1 -1
  138. package/dist/core/model-runtime.js +14 -2
  139. package/dist/core/model-runtime.js.map +1 -1
  140. package/dist/core/prompt-templates.d.ts +5 -0
  141. package/dist/core/prompt-templates.d.ts.map +1 -1
  142. package/dist/core/prompt-templates.js +8 -9
  143. package/dist/core/prompt-templates.js.map +1 -1
  144. package/dist/core/provider-display-names.d.ts.map +1 -1
  145. package/dist/core/provider-display-names.js +1 -0
  146. package/dist/core/provider-display-names.js.map +1 -1
  147. package/dist/core/sdk.d.ts.map +1 -1
  148. package/dist/core/sdk.js +6 -0
  149. package/dist/core/sdk.js.map +1 -1
  150. package/dist/modes/interactive/editor-paste-transfer.d.ts +10 -0
  151. package/dist/modes/interactive/editor-paste-transfer.d.ts.map +1 -1
  152. package/dist/modes/interactive/editor-paste-transfer.js +16 -0
  153. package/dist/modes/interactive/editor-paste-transfer.js.map +1 -1
  154. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  155. package/dist/modes/interactive/interactive-mode.js +13 -7
  156. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  157. package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
  158. package/dist/modes/rpc/connection-handler.js +32 -27
  159. package/dist/modes/rpc/connection-handler.js.map +1 -1
  160. package/dist/modes/rpc/jsonl.d.ts +6 -1
  161. package/dist/modes/rpc/jsonl.d.ts.map +1 -1
  162. package/dist/modes/rpc/jsonl.js +47 -14
  163. package/dist/modes/rpc/jsonl.js.map +1 -1
  164. package/dist/modes/rpc/multi-session-host.d.ts.map +1 -1
  165. package/dist/modes/rpc/multi-session-host.js +26 -4
  166. package/dist/modes/rpc/multi-session-host.js.map +1 -1
  167. package/dist/modes/rpc/rpc-command-invocation.d.ts +5 -0
  168. package/dist/modes/rpc/rpc-command-invocation.d.ts.map +1 -0
  169. package/dist/modes/rpc/rpc-command-invocation.js +2 -0
  170. package/dist/modes/rpc/rpc-command-invocation.js.map +1 -0
  171. package/dist/modes/rpc/rpc-command-surface.d.ts +49 -0
  172. package/dist/modes/rpc/rpc-command-surface.d.ts.map +1 -0
  173. package/dist/modes/rpc/rpc-command-surface.js +40 -0
  174. package/dist/modes/rpc/rpc-command-surface.js.map +1 -0
  175. package/dist/modes/rpc/rpc-input-validation.d.ts +4 -0
  176. package/dist/modes/rpc/rpc-input-validation.d.ts.map +1 -0
  177. package/dist/modes/rpc/rpc-input-validation.js +20 -0
  178. package/dist/modes/rpc/rpc-input-validation.js.map +1 -0
  179. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  180. package/dist/modes/rpc/rpc-mode.js +12 -1
  181. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  182. package/dist/modes/rpc/rpc-types.d.ts +12 -12
  183. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  184. package/dist/modes/rpc/rpc-types.js.map +1 -1
  185. package/docs/providers.md +52 -1
  186. package/docs/rpc.md +78 -6
  187. package/docs/skills.md +14 -3
  188. package/node_modules/@bufbuild/protobuf/README.md +44 -0
  189. package/node_modules/@bufbuild/protobuf/dist/commonjs/clone.d.ts +6 -0
  190. package/node_modules/@bufbuild/protobuf/dist/commonjs/clone.js +66 -0
  191. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/boot.d.ts +1 -0
  192. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/boot.js +18 -0
  193. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/enum.d.ts +10 -0
  194. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/enum.js +31 -0
  195. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/extension.d.ts +9 -0
  196. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/extension.js +28 -0
  197. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/file.d.ts +1 -0
  198. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/file.js +18 -0
  199. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/index.d.ts +10 -0
  200. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/index.js +39 -0
  201. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/message.d.ts +10 -0
  202. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/message.js +24 -0
  203. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/service.d.ts +8 -0
  204. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/service.js +27 -0
  205. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/symbols.d.ts +140 -0
  206. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/symbols.js +43 -0
  207. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/types.d.ts +79 -0
  208. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/types.js +15 -0
  209. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/boot.d.ts +63 -0
  210. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/boot.js +105 -0
  211. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/embed.d.ts +43 -0
  212. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/embed.js +244 -0
  213. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/enum.d.ts +29 -0
  214. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/enum.js +58 -0
  215. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/extension.d.ts +9 -0
  216. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/extension.js +28 -0
  217. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/file.d.ts +7 -0
  218. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/file.js +35 -0
  219. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/index.d.ts +10 -0
  220. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/index.js +39 -0
  221. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/message.d.ts +15 -0
  222. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/message.js +24 -0
  223. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/restore-json-names.d.ts +5 -0
  224. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/restore-json-names.js +29 -0
  225. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/scalar.d.ts +9 -0
  226. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/scalar.js +67 -0
  227. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/service.d.ts +8 -0
  228. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/service.js +27 -0
  229. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/symbols.d.ts +145 -0
  230. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/symbols.js +74 -0
  231. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/types.d.ts +85 -0
  232. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/types.js +15 -0
  233. package/node_modules/@bufbuild/protobuf/dist/commonjs/create.d.ts +9 -0
  234. package/node_modules/@bufbuild/protobuf/dist/commonjs/create.js +259 -0
  235. package/node_modules/@bufbuild/protobuf/dist/commonjs/descriptors.d.ts +634 -0
  236. package/node_modules/@bufbuild/protobuf/dist/commonjs/descriptors.js +53 -0
  237. package/node_modules/@bufbuild/protobuf/dist/commonjs/equals.d.ts +46 -0
  238. package/node_modules/@bufbuild/protobuf/dist/commonjs/equals.js +209 -0
  239. package/node_modules/@bufbuild/protobuf/dist/commonjs/extensions.d.ts +60 -0
  240. package/node_modules/@bufbuild/protobuf/dist/commonjs/extensions.js +168 -0
  241. package/node_modules/@bufbuild/protobuf/dist/commonjs/fields.d.ts +23 -0
  242. package/node_modules/@bufbuild/protobuf/dist/commonjs/fields.js +45 -0
  243. package/node_modules/@bufbuild/protobuf/dist/commonjs/from-binary.d.ts +48 -0
  244. package/node_modules/@bufbuild/protobuf/dist/commonjs/from-binary.js +247 -0
  245. package/node_modules/@bufbuild/protobuf/dist/commonjs/from-json.d.ts +73 -0
  246. package/node_modules/@bufbuild/protobuf/dist/commonjs/from-json.js +739 -0
  247. package/node_modules/@bufbuild/protobuf/dist/commonjs/index.d.ts +19 -0
  248. package/node_modules/@bufbuild/protobuf/dist/commonjs/index.js +55 -0
  249. package/node_modules/@bufbuild/protobuf/dist/commonjs/is-message.d.ts +7 -0
  250. package/node_modules/@bufbuild/protobuf/dist/commonjs/is-message.js +33 -0
  251. package/node_modules/@bufbuild/protobuf/dist/commonjs/json-value.d.ts +16 -0
  252. package/node_modules/@bufbuild/protobuf/dist/commonjs/json-value.js +15 -0
  253. package/node_modules/@bufbuild/protobuf/dist/commonjs/merge.d.ts +13 -0
  254. package/node_modules/@bufbuild/protobuf/dist/commonjs/merge.js +70 -0
  255. package/node_modules/@bufbuild/protobuf/dist/commonjs/package.json +4 -0
  256. package/node_modules/@bufbuild/protobuf/dist/commonjs/proto-int64.d.ts +98 -0
  257. package/node_modules/@bufbuild/protobuf/dist/commonjs/proto-int64.js +131 -0
  258. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/error.d.ts +9 -0
  259. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/error.js +36 -0
  260. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/guard.d.ts +20 -0
  261. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/guard.js +78 -0
  262. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/index.d.ts +8 -0
  263. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/index.js +41 -0
  264. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/names.d.ts +30 -0
  265. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/names.js +115 -0
  266. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/nested-types.d.ts +35 -0
  267. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/nested-types.js +110 -0
  268. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/path.d.ts +107 -0
  269. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/path.js +376 -0
  270. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect-check.d.ts +19 -0
  271. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect-check.js +268 -0
  272. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect-types.d.ts +217 -0
  273. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect-types.js +16 -0
  274. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect.d.ts +43 -0
  275. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect.js +546 -0
  276. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/scalar.d.ts +43 -0
  277. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/scalar.js +129 -0
  278. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/unsafe.d.ts +39 -0
  279. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/unsafe.js +149 -0
  280. package/node_modules/@bufbuild/protobuf/dist/commonjs/registry.d.ts +98 -0
  281. package/node_modules/@bufbuild/protobuf/dist/commonjs/registry.js +945 -0
  282. package/node_modules/@bufbuild/protobuf/dist/commonjs/to-binary.d.ts +24 -0
  283. package/node_modules/@bufbuild/protobuf/dist/commonjs/to-binary.js +199 -0
  284. package/node_modules/@bufbuild/protobuf/dist/commonjs/to-json.d.ts +67 -0
  285. package/node_modules/@bufbuild/protobuf/dist/commonjs/to-json.js +391 -0
  286. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/from-text.d.ts +35 -0
  287. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/from-text.js +684 -0
  288. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/index.d.ts +4 -0
  289. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/index.js +21 -0
  290. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/is-group-like.d.ts +19 -0
  291. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/is-group-like.js +47 -0
  292. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/reader.d.ts +91 -0
  293. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/reader.js +481 -0
  294. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/to-text.d.ts +34 -0
  295. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/to-text.js +358 -0
  296. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/writer.d.ts +76 -0
  297. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/writer.js +220 -0
  298. package/node_modules/@bufbuild/protobuf/dist/commonjs/types.d.ts +135 -0
  299. package/node_modules/@bufbuild/protobuf/dist/commonjs/types.js +15 -0
  300. package/node_modules/@bufbuild/protobuf/dist/commonjs/unknown-enum.d.ts +10 -0
  301. package/node_modules/@bufbuild/protobuf/dist/commonjs/unknown-enum.js +26 -0
  302. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/base64-encoding.d.ts +23 -0
  303. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/base64-encoding.js +156 -0
  304. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/binary-encoding.d.ts +268 -0
  305. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/binary-encoding.js +530 -0
  306. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/index.d.ts +5 -0
  307. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/index.js +34 -0
  308. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/size-delimited.d.ts +69 -0
  309. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/size-delimited.js +191 -0
  310. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/text-encoding.d.ts +28 -0
  311. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/text-encoding.js +61 -0
  312. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/text-format.d.ts +13 -0
  313. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/text-format.js +199 -0
  314. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/varint.d.ts +70 -0
  315. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/varint.js +322 -0
  316. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/any.d.ts +38 -0
  317. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/any.js +75 -0
  318. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/duration.d.ts +9 -0
  319. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/duration.js +39 -0
  320. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/any_pb.d.ts +238 -0
  321. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/any_pb.js +27 -0
  322. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/api_pb.d.ts +537 -0
  323. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/api_pb.js +39 -0
  324. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +490 -0
  325. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/compiler/plugin_pb.js +68 -0
  326. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/cpp_features_pb.d.ts +91 -0
  327. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/cpp_features_pb.js +60 -0
  328. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/descriptor_pb.d.ts +4143 -0
  329. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/descriptor_pb.js +892 -0
  330. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/duration_pb.d.ts +161 -0
  331. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/duration_pb.js +27 -0
  332. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/empty_pb.d.ts +39 -0
  333. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/empty_pb.js +27 -0
  334. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/field_mask_pb.d.ts +424 -0
  335. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/field_mask_pb.js +27 -0
  336. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/go_features_pb.d.ts +189 -0
  337. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/go_features_pb.js +126 -0
  338. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/java_features_pb.d.ts +194 -0
  339. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/java_features_pb.js +106 -0
  340. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/source_context_pb.d.ts +43 -0
  341. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/source_context_pb.js +27 -0
  342. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/struct_pb.d.ts +195 -0
  343. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/struct_pb.js +59 -0
  344. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/timestamp_pb.d.ts +222 -0
  345. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/timestamp_pb.js +27 -0
  346. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/type_pb.d.ts +722 -0
  347. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/type_pb.js +242 -0
  348. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/wrappers_pb.d.ts +330 -0
  349. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/wrappers_pb.js +67 -0
  350. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/index.d.ts +19 -0
  351. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/index.js +48 -0
  352. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/timestamp.d.ts +21 -0
  353. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/timestamp.js +57 -0
  354. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/wrappers.d.ts +25 -0
  355. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/wrappers.js +66 -0
  356. package/node_modules/@bufbuild/protobuf/dist/esm/clone.d.ts +6 -0
  357. package/node_modules/@bufbuild/protobuf/dist/esm/clone.js +63 -0
  358. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/boot.d.ts +1 -0
  359. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/boot.js +14 -0
  360. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/enum.d.ts +10 -0
  361. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/enum.js +26 -0
  362. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/extension.d.ts +9 -0
  363. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/extension.js +25 -0
  364. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/file.d.ts +1 -0
  365. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/file.js +14 -0
  366. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/index.d.ts +10 -0
  367. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/index.js +23 -0
  368. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/message.d.ts +10 -0
  369. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/message.js +21 -0
  370. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/service.d.ts +8 -0
  371. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/service.js +24 -0
  372. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/symbols.d.ts +140 -0
  373. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/symbols.js +40 -0
  374. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/types.d.ts +79 -0
  375. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/types.js +14 -0
  376. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/boot.d.ts +63 -0
  377. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/boot.js +101 -0
  378. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/embed.d.ts +43 -0
  379. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/embed.js +239 -0
  380. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/enum.d.ts +29 -0
  381. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/enum.js +53 -0
  382. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/extension.d.ts +9 -0
  383. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/extension.js +25 -0
  384. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/file.d.ts +7 -0
  385. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/file.js +32 -0
  386. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/index.d.ts +10 -0
  387. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/index.js +23 -0
  388. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/message.d.ts +15 -0
  389. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/message.js +21 -0
  390. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/restore-json-names.d.ts +5 -0
  391. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/restore-json-names.js +26 -0
  392. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/scalar.d.ts +9 -0
  393. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/scalar.js +63 -0
  394. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/service.d.ts +8 -0
  395. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/service.js +24 -0
  396. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/symbols.d.ts +145 -0
  397. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/symbols.js +71 -0
  398. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/types.d.ts +85 -0
  399. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/types.js +14 -0
  400. package/node_modules/@bufbuild/protobuf/dist/esm/create.d.ts +9 -0
  401. package/node_modules/@bufbuild/protobuf/dist/esm/create.js +256 -0
  402. package/node_modules/@bufbuild/protobuf/dist/esm/descriptors.d.ts +634 -0
  403. package/node_modules/@bufbuild/protobuf/dist/esm/descriptors.js +50 -0
  404. package/node_modules/@bufbuild/protobuf/dist/esm/equals.d.ts +46 -0
  405. package/node_modules/@bufbuild/protobuf/dist/esm/equals.js +206 -0
  406. package/node_modules/@bufbuild/protobuf/dist/esm/extensions.d.ts +60 -0
  407. package/node_modules/@bufbuild/protobuf/dist/esm/extensions.js +159 -0
  408. package/node_modules/@bufbuild/protobuf/dist/esm/fields.d.ts +23 -0
  409. package/node_modules/@bufbuild/protobuf/dist/esm/fields.js +41 -0
  410. package/node_modules/@bufbuild/protobuf/dist/esm/from-binary.d.ts +48 -0
  411. package/node_modules/@bufbuild/protobuf/dist/esm/from-binary.js +241 -0
  412. package/node_modules/@bufbuild/protobuf/dist/esm/from-json.d.ts +73 -0
  413. package/node_modules/@bufbuild/protobuf/dist/esm/from-json.js +731 -0
  414. package/node_modules/@bufbuild/protobuf/dist/esm/index.d.ts +19 -0
  415. package/node_modules/@bufbuild/protobuf/dist/esm/index.js +29 -0
  416. package/node_modules/@bufbuild/protobuf/dist/esm/is-message.d.ts +7 -0
  417. package/node_modules/@bufbuild/protobuf/dist/esm/is-message.js +30 -0
  418. package/node_modules/@bufbuild/protobuf/dist/esm/json-value.d.ts +16 -0
  419. package/node_modules/@bufbuild/protobuf/dist/esm/json-value.js +14 -0
  420. package/node_modules/@bufbuild/protobuf/dist/esm/merge.d.ts +13 -0
  421. package/node_modules/@bufbuild/protobuf/dist/esm/merge.js +67 -0
  422. package/node_modules/@bufbuild/protobuf/dist/esm/package.json +4 -0
  423. package/node_modules/@bufbuild/protobuf/dist/esm/proto-int64.d.ts +98 -0
  424. package/node_modules/@bufbuild/protobuf/dist/esm/proto-int64.js +128 -0
  425. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/error.d.ts +9 -0
  426. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/error.js +31 -0
  427. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/guard.d.ts +20 -0
  428. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/guard.js +71 -0
  429. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/index.d.ts +8 -0
  430. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/index.js +21 -0
  431. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/names.d.ts +30 -0
  432. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/names.js +109 -0
  433. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/nested-types.d.ts +35 -0
  434. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/nested-types.js +105 -0
  435. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/path.d.ts +107 -0
  436. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/path.js +369 -0
  437. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-check.d.ts +19 -0
  438. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-check.js +262 -0
  439. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-types.d.ts +217 -0
  440. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-types.js +14 -0
  441. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect.d.ts +43 -0
  442. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect.js +541 -0
  443. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/scalar.d.ts +43 -0
  444. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/scalar.js +124 -0
  445. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/unsafe.d.ts +39 -0
  446. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/unsafe.js +140 -0
  447. package/node_modules/@bufbuild/protobuf/dist/esm/registry.d.ts +98 -0
  448. package/node_modules/@bufbuild/protobuf/dist/esm/registry.js +939 -0
  449. package/node_modules/@bufbuild/protobuf/dist/esm/to-binary.d.ts +24 -0
  450. package/node_modules/@bufbuild/protobuf/dist/esm/to-binary.js +195 -0
  451. package/node_modules/@bufbuild/protobuf/dist/esm/to-json.d.ts +67 -0
  452. package/node_modules/@bufbuild/protobuf/dist/esm/to-json.js +386 -0
  453. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/from-text.d.ts +35 -0
  454. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/from-text.js +680 -0
  455. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/index.d.ts +4 -0
  456. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/index.js +15 -0
  457. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/is-group-like.d.ts +19 -0
  458. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/is-group-like.js +44 -0
  459. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/reader.d.ts +91 -0
  460. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/reader.js +477 -0
  461. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/to-text.d.ts +34 -0
  462. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/to-text.js +355 -0
  463. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/writer.d.ts +76 -0
  464. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/writer.js +214 -0
  465. package/node_modules/@bufbuild/protobuf/dist/esm/types.d.ts +135 -0
  466. package/node_modules/@bufbuild/protobuf/dist/esm/types.js +14 -0
  467. package/node_modules/@bufbuild/protobuf/dist/esm/unknown-enum.d.ts +10 -0
  468. package/node_modules/@bufbuild/protobuf/dist/esm/unknown-enum.js +23 -0
  469. package/node_modules/@bufbuild/protobuf/dist/esm/wire/base64-encoding.d.ts +23 -0
  470. package/node_modules/@bufbuild/protobuf/dist/esm/wire/base64-encoding.js +152 -0
  471. package/node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.d.ts +268 -0
  472. package/node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.js +525 -0
  473. package/node_modules/@bufbuild/protobuf/dist/esm/wire/index.d.ts +5 -0
  474. package/node_modules/@bufbuild/protobuf/dist/esm/wire/index.js +18 -0
  475. package/node_modules/@bufbuild/protobuf/dist/esm/wire/size-delimited.d.ts +69 -0
  476. package/node_modules/@bufbuild/protobuf/dist/esm/wire/size-delimited.js +186 -0
  477. package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.d.ts +28 -0
  478. package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.js +57 -0
  479. package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-format.d.ts +13 -0
  480. package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-format.js +195 -0
  481. package/node_modules/@bufbuild/protobuf/dist/esm/wire/varint.d.ts +70 -0
  482. package/node_modules/@bufbuild/protobuf/dist/esm/wire/varint.js +313 -0
  483. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/any.d.ts +38 -0
  484. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/any.js +69 -0
  485. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/duration.d.ts +9 -0
  486. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/duration.js +35 -0
  487. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/any_pb.d.ts +238 -0
  488. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/any_pb.js +24 -0
  489. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/api_pb.d.ts +537 -0
  490. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/api_pb.js +36 -0
  491. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +490 -0
  492. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.js +65 -0
  493. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/cpp_features_pb.d.ts +91 -0
  494. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/cpp_features_pb.js +57 -0
  495. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/descriptor_pb.d.ts +4143 -0
  496. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js +888 -0
  497. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/duration_pb.d.ts +161 -0
  498. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/duration_pb.js +24 -0
  499. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/empty_pb.d.ts +39 -0
  500. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/empty_pb.js +24 -0
  501. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/field_mask_pb.d.ts +424 -0
  502. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/field_mask_pb.js +24 -0
  503. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/go_features_pb.d.ts +189 -0
  504. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/go_features_pb.js +123 -0
  505. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/java_features_pb.d.ts +194 -0
  506. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/java_features_pb.js +103 -0
  507. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/source_context_pb.d.ts +43 -0
  508. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/source_context_pb.js +24 -0
  509. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/struct_pb.d.ts +195 -0
  510. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/struct_pb.js +56 -0
  511. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/timestamp_pb.d.ts +222 -0
  512. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/timestamp_pb.js +24 -0
  513. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/type_pb.d.ts +722 -0
  514. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/type_pb.js +239 -0
  515. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/wrappers_pb.d.ts +330 -0
  516. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/wrappers_pb.js +64 -0
  517. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/index.d.ts +19 -0
  518. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/index.js +32 -0
  519. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/timestamp.d.ts +21 -0
  520. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/timestamp.js +50 -0
  521. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/wrappers.d.ts +25 -0
  522. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/wrappers.js +61 -0
  523. package/node_modules/@bufbuild/protobuf/package.json +147 -0
  524. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +26 -0
  525. package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
  526. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-runtime.ts +2 -0
  527. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/render.ts +43 -6
  528. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/types.ts +4 -0
  529. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  530. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +59 -17
  531. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  532. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts +14 -0
  533. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts.map +1 -1
  534. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js +14 -0
  535. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js.map +1 -1
  536. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +12 -1
  537. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
  538. package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
  539. package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
  540. package/node_modules/@earendil-works/pi-ai/README.md +3 -2
  541. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/deterministic-id.d.ts +17 -0
  542. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/deterministic-id.d.ts.map +1 -0
  543. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/deterministic-id.js +14 -0
  544. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/deterministic-id.js.map +1 -0
  545. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/exec-lifecycle.d.ts +13 -0
  546. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/exec-lifecycle.d.ts.map +1 -0
  547. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/exec-lifecycle.js +33 -0
  548. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/exec-lifecycle.js.map +1 -0
  549. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/exec-modern.d.ts +79 -0
  550. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/exec-modern.d.ts.map +1 -0
  551. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/exec-modern.js +360 -0
  552. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/exec-modern.js.map +1 -0
  553. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/gen/agent_pb.d.ts +16797 -0
  554. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/gen/agent_pb.d.ts.map +1 -0
  555. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/gen/agent_pb.js +3828 -0
  556. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/gen/agent_pb.js.map +1 -0
  557. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/pi-args.d.ts +55 -0
  558. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/pi-args.d.ts.map +1 -0
  559. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/pi-args.js +76 -0
  560. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/pi-args.js.map +1 -0
  561. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/types.d.ts +116 -0
  562. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/types.d.ts.map +1 -0
  563. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/types.js +16 -0
  564. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/types.js.map +1 -0
  565. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts +191 -0
  566. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts.map +1 -0
  567. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js +3316 -0
  568. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js.map +1 -0
  569. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.lazy.d.ts +29 -0
  570. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.lazy.d.ts.map +1 -0
  571. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.lazy.js +33 -0
  572. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.lazy.js.map +1 -0
  573. package/node_modules/@earendil-works/pi-ai/dist/compat.d.ts +1 -0
  574. package/node_modules/@earendil-works/pi-ai/dist/compat.d.ts.map +1 -1
  575. package/node_modules/@earendil-works/pi-ai/dist/compat.js +3 -0
  576. package/node_modules/@earendil-works/pi-ai/dist/compat.js.map +1 -1
  577. package/node_modules/@earendil-works/pi-ai/dist/cursor-agent-provider.d.ts +11 -0
  578. package/node_modules/@earendil-works/pi-ai/dist/cursor-agent-provider.d.ts.map +1 -0
  579. package/node_modules/@earendil-works/pi-ai/dist/cursor-agent-provider.js +11 -0
  580. package/node_modules/@earendil-works/pi-ai/dist/cursor-agent-provider.js.map +1 -0
  581. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +3 -0
  582. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
  583. package/node_modules/@earendil-works/pi-ai/dist/index.js +2 -0
  584. package/node_modules/@earendil-works/pi-ai/dist/index.js.map +1 -1
  585. package/node_modules/@earendil-works/pi-ai/dist/model.d.ts +6 -1
  586. package/node_modules/@earendil-works/pi-ai/dist/model.d.ts.map +1 -1
  587. package/node_modules/@earendil-works/pi-ai/dist/model.js.map +1 -1
  588. package/node_modules/@earendil-works/pi-ai/dist/providers/cursor.d.ts +6 -9
  589. package/node_modules/@earendil-works/pi-ai/dist/providers/cursor.d.ts.map +1 -1
  590. package/node_modules/@earendil-works/pi-ai/dist/providers/cursor.js +42 -9
  591. package/node_modules/@earendil-works/pi-ai/dist/providers/cursor.js.map +1 -1
  592. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  593. package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
  594. package/node_modules/@earendil-works/pi-ai/dist/providers/data/baseten.json +1 -1
  595. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cerebras.json +1 -1
  596. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +1 -1
  597. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-workers-ai.json +1 -1
  598. package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -1
  599. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai-codex.json +1 -1
  600. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  601. package/node_modules/@earendil-works/pi-ai/dist/providers/data/together.json +1 -1
  602. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  603. package/node_modules/@earendil-works/pi-ai/dist/providers/data/xai.json +1 -1
  604. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +3 -1
  605. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  606. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  607. package/node_modules/@earendil-works/pi-ai/dist/utils/block-symbols.d.ts +57 -0
  608. package/node_modules/@earendil-works/pi-ai/dist/utils/block-symbols.d.ts.map +1 -0
  609. package/node_modules/@earendil-works/pi-ai/dist/utils/block-symbols.js +57 -0
  610. package/node_modules/@earendil-works/pi-ai/dist/utils/block-symbols.js.map +1 -0
  611. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.d.ts +10 -0
  612. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.d.ts.map +1 -1
  613. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.js +22 -0
  614. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.js.map +1 -1
  615. package/node_modules/@earendil-works/pi-ai/package.json +3 -2
  616. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  617. package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
  618. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts.map +1 -1
  619. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js +21 -0
  620. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js.map +1 -1
  621. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +1 -1
  622. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
  623. package/node_modules/@earendil-works/pi-tui/dist/dollar-invocation-autocomplete.d.ts +9 -0
  624. package/node_modules/@earendil-works/pi-tui/dist/dollar-invocation-autocomplete.d.ts.map +1 -0
  625. package/node_modules/@earendil-works/pi-tui/dist/dollar-invocation-autocomplete.js +82 -0
  626. package/node_modules/@earendil-works/pi-tui/dist/dollar-invocation-autocomplete.js.map +1 -0
  627. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  628. package/package.json +11 -8
@@ -0,0 +1,139 @@
1
+ import type { Credential } from "@earendil-works/pi-ai";
2
+ import type { ExtensionAPI, ExtensionContext } from "../../types.ts";
3
+ import { type CursorCliSessionRouter } from "./session-router.ts";
4
+ import type { CursorCliOauthProviderSettings } from "./settings.ts";
5
+ import { type CursorCliTransportHandle, type CursorCliTransportInput } from "./transport.ts";
6
+ /** Minimum known-good cursor-agent version; below it senpi warns once per session but never blocks. */
7
+ export declare const CURSOR_CLI_MINIMUM_KNOWN_GOOD_VERSION = "2026.08.11";
8
+ /** This lane always authenticates through per-account sandboxed HOME file stores. */
9
+ export declare const CURSOR_CLI_STATUS_LANE = "file-store";
10
+ /** senpi never delegates compaction on this lane, so it is always the context owner. */
11
+ export declare const CURSOR_CLI_STATUS_CONTEXT_OWNER = "senpi";
12
+ /** The native Cursor provider id; the recommended default when both providers are configured. */
13
+ export declare const NATIVE_CURSOR_PROVIDER_ID = "cursor";
14
+ export type CursorCliBlockWindow = {
15
+ readonly account: string;
16
+ readonly reason: "rate_limit" | "auth_error";
17
+ /** Expiry timestamp; undefined means blocked until the account logs in again. */
18
+ readonly blockedUntil: number | undefined;
19
+ };
20
+ export type CursorCliStatusReport = {
21
+ readonly lane: typeof CURSOR_CLI_STATUS_LANE;
22
+ readonly selectedAccount: string | undefined;
23
+ readonly pinnedAccount: string | undefined;
24
+ readonly chatId: string | undefined;
25
+ readonly lastModel: string | undefined;
26
+ readonly contextOwner: typeof CURSOR_CLI_STATUS_CONTEXT_OWNER;
27
+ readonly executablePath: string | undefined;
28
+ readonly executableVersion: string | undefined;
29
+ readonly minimumKnownGoodVersion: string;
30
+ readonly belowMinimumKnownGood: boolean;
31
+ readonly executableProblem: string | undefined;
32
+ readonly blockWindows: readonly CursorCliBlockWindow[];
33
+ readonly accountNames: readonly string[];
34
+ readonly nativeCursorConfigured: boolean;
35
+ };
36
+ export type CursorCliStatusDeps = {
37
+ readonly sessionId: string;
38
+ readonly settings: CursorCliOauthProviderSettings;
39
+ readonly readCredential: () => Credential | undefined | Promise<Credential | undefined>;
40
+ readonly readNativeCredential?: () => Credential | undefined | Promise<Credential | undefined>;
41
+ readonly router?: CursorCliSessionRouter;
42
+ readonly resolveExecutable?: (settings: CursorCliOauthProviderSettings) => string;
43
+ readonly probeVersion?: (executable: string) => Promise<string>;
44
+ readonly now?: () => number;
45
+ };
46
+ export declare function parseCursorCliVersion(version: string): {
47
+ year: number;
48
+ month: number;
49
+ day: number;
50
+ } | undefined;
51
+ /** Compares two `YYYY.MM.DD[-suffix]` version strings; undefined when either cannot be parsed. */
52
+ export declare function compareCursorCliVersions(version: string, floor: string): number | undefined;
53
+ /**
54
+ * Collects the status snapshot. Account data is read fresh from the credential
55
+ * store on every call - never memoized - so the rendered state always matches
56
+ * the store even after concurrent logins, removals, or failover blocks. Only
57
+ * account names and metadata are extracted; tokens never enter the report.
58
+ */
59
+ export declare function collectCursorCliStatus(deps: CursorCliStatusDeps): Promise<CursorCliStatusReport>;
60
+ /** Pure renderer: names and metadata only, never token material. */
61
+ export declare function renderCursorCliStatus(report: CursorCliStatusReport): string;
62
+ export type CursorCliFencedOutcome<T> = {
63
+ readonly status: "completed";
64
+ readonly value: T;
65
+ } | {
66
+ readonly status: "dropped";
67
+ readonly reason: string;
68
+ };
69
+ export type CursorCliDeferredContinuation<T> = {
70
+ /** Runs the continuation through the fence, even if its timer was cancelled or already fired. */
71
+ fire(): Promise<CursorCliFencedOutcome<T>>;
72
+ cancel(): void;
73
+ };
74
+ export type CursorCliDroppedReporter = (description: string, reason: string) => void;
75
+ /**
76
+ * A reload retires this extension generation (`AgentSession.reload()` then
77
+ * invalidates the old runner) while timers and promise continuations captured
78
+ * by it are still armed; every `ExtensionContext` getter then throws
79
+ * "stale extension generation after reload". The context carries no liveness
80
+ * flag, so a retired generation is only observable by probing a getter.
81
+ */
82
+ export declare function isCursorCliContextRetired(ctx: ExtensionContext): boolean;
83
+ /** Per-registration generation fence; one per extension registration (a reload builds a new one). */
84
+ export declare class CursorCliGenerationGuard {
85
+ private retired;
86
+ private retirementReason;
87
+ private readonly timers;
88
+ private droppedReporter;
89
+ isRetired(): boolean;
90
+ retire(reason: string): void;
91
+ onDropped(reporter: CursorCliDroppedReporter): void;
92
+ /** Arms a timer the shutdown path cancels; arming after retirement is a no-op by construction. */
93
+ setTrackedTimeout(callback: () => void, delayMs: number): () => void;
94
+ /** Cancels every armed timer; returns how many were pending. */
95
+ clearTrackedTimers(): number;
96
+ /**
97
+ * Runs a deferred continuation behind the generation fence. A dropped
98
+ * continuation is reported, never silently presented as completed.
99
+ */
100
+ runFenced<T>(ctx: ExtensionContext, work: (ctx: ExtensionContext) => Promise<T> | T): Promise<CursorCliFencedOutcome<T>>;
101
+ /** Synchronous variant for continuations that only touch the context once, after an outer await. */
102
+ runFencedSync(ctx: ExtensionContext, work: () => void): {
103
+ ran: boolean;
104
+ };
105
+ defer<T>(ctx: ExtensionContext, work: (ctx: ExtensionContext) => Promise<T> | T, delayMs?: number): CursorCliDeferredContinuation<T>;
106
+ private armTracked;
107
+ private cancelTimer;
108
+ private retirementReasonFor;
109
+ private reportDropped;
110
+ }
111
+ /**
112
+ * Registry of live children this extension spawned. Entries leave the registry
113
+ * when their transport run settles, so `killAll` only ever signals live
114
+ * process groups and is idempotent across repeated interruptions.
115
+ */
116
+ export declare class CursorCliChildRegistry {
117
+ private readonly children;
118
+ track(handle: CursorCliTransportHandle): CursorCliTransportHandle;
119
+ livePids(): number[];
120
+ /** SIGTERMs every tracked process group with a SIGKILL escalation; returns the pids it signalled. */
121
+ killAll(graceMs?: number): number[];
122
+ }
123
+ /** Shared registry; child pids are process-wide resources, so one registry serves every generation. */
124
+ export declare const cursorCliChildRegistry: CursorCliChildRegistry;
125
+ /** Spawns one cursor-agent run through the transport and registers it for shutdown teardown. */
126
+ export declare function spawnCursorCliTracked(input: CursorCliTransportInput, registry?: CursorCliChildRegistry): CursorCliTransportHandle;
127
+ export type CursorCliShutdownSafetyDeps = {
128
+ readonly generation?: CursorCliGenerationGuard;
129
+ readonly registry?: CursorCliChildRegistry;
130
+ };
131
+ /**
132
+ * Installs the `session_shutdown`/`session_extensions_removed` teardown: kill
133
+ * every tracked child's process group, cancel the generation's pending timers,
134
+ * and retire the generation so every deferred continuation is fenced. Safe to
135
+ * fire repeatedly; a retired generation is never resurrected (a reload builds a
136
+ * new registration with a fresh guard).
137
+ */
138
+ export declare function registerCursorCliShutdownSafety(pi: Pick<ExtensionAPI, "on">, deps?: CursorCliShutdownSafetyDeps): CursorCliGenerationGuard;
139
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +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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"}
@@ -0,0 +1,362 @@
1
+ import { emptyCredential, listAccounts } from "./accounts.js";
2
+ import { selectAccount } from "./affinity.js";
3
+ import { CursorAgentNotInstalledError, defaultCursorAgentExecutableDeps, probeCursorAgentVersion, resolveCursorAgentExecutable, } from "./executable.js";
4
+ import { cursorCliSessionRouter } from "./session-router.js";
5
+ import { CURSOR_CLI_ABORT_GRACE_MS, spawnCursorCli, } from "./transport.js";
6
+ /** Minimum known-good cursor-agent version; below it senpi warns once per session but never blocks. */
7
+ export const CURSOR_CLI_MINIMUM_KNOWN_GOOD_VERSION = "2026.08.11";
8
+ /** This lane always authenticates through per-account sandboxed HOME file stores. */
9
+ export const CURSOR_CLI_STATUS_LANE = "file-store";
10
+ /** senpi never delegates compaction on this lane, so it is always the context owner. */
11
+ export const CURSOR_CLI_STATUS_CONTEXT_OWNER = "senpi";
12
+ /** The native Cursor provider id; the recommended default when both providers are configured. */
13
+ export const NATIVE_CURSOR_PROVIDER_ID = "cursor";
14
+ function asCursorCredential(value) {
15
+ return value !== undefined && value.type === "oauth" ? value : emptyCredential();
16
+ }
17
+ function isUsableOAuthCredential(value) {
18
+ return value !== undefined && value.type === "oauth" && typeof value.access === "string" && value.access.length > 0;
19
+ }
20
+ export function parseCursorCliVersion(version) {
21
+ const match = /^v?(\d{1,4})\.(\d{1,2})\.(\d{1,2})/.exec(version.trim());
22
+ if (!match)
23
+ return undefined;
24
+ return { year: Number(match[1]), month: Number(match[2]), day: Number(match[3]) };
25
+ }
26
+ /** Compares two `YYYY.MM.DD[-suffix]` version strings; undefined when either cannot be parsed. */
27
+ export function compareCursorCliVersions(version, floor) {
28
+ const parsed = parseCursorCliVersion(version);
29
+ const baseline = parseCursorCliVersion(floor);
30
+ if (parsed === undefined || baseline === undefined)
31
+ return undefined;
32
+ const left = [parsed.year, parsed.month, parsed.day];
33
+ const right = [baseline.year, baseline.month, baseline.day];
34
+ for (let index = 0; index < 3; index += 1) {
35
+ if (left[index] !== right[index])
36
+ return left[index] < right[index] ? -1 : 1;
37
+ }
38
+ return 0;
39
+ }
40
+ function blockWindowFor(account, now) {
41
+ if (account.blockReason === "auth_error") {
42
+ return { account: account.name, reason: "auth_error", blockedUntil: undefined };
43
+ }
44
+ if (account.blockedUntil !== undefined && account.blockedUntil > now) {
45
+ return { account: account.name, reason: "rate_limit", blockedUntil: account.blockedUntil };
46
+ }
47
+ return undefined;
48
+ }
49
+ const defaultResolveExecutable = (settings) => resolveCursorAgentExecutable({
50
+ ...defaultCursorAgentExecutableDeps(),
51
+ settings: { executablePath: settings.executablePath },
52
+ });
53
+ /**
54
+ * Collects the status snapshot. Account data is read fresh from the credential
55
+ * store on every call - never memoized - so the rendered state always matches
56
+ * the store even after concurrent logins, removals, or failover blocks. Only
57
+ * account names and metadata are extracted; tokens never enter the report.
58
+ */
59
+ export async function collectCursorCliStatus(deps) {
60
+ const now = deps.now ?? Date.now;
61
+ const credential = asCursorCredential(await deps.readCredential());
62
+ const accounts = listAccounts(credential);
63
+ const pinnedAccount = deps.settings.pinnedAccount ?? credential.pinned;
64
+ const record = (deps.router ?? cursorCliSessionRouter).getRecord(deps.sessionId);
65
+ let selectedAccount = record?.accountName;
66
+ if (selectedAccount === undefined && accounts.length > 0) {
67
+ try {
68
+ selectedAccount = selectAccount(accounts, {
69
+ sessionId: deps.sessionId,
70
+ pinnedAccount,
71
+ now: now(),
72
+ }).name;
73
+ }
74
+ catch {
75
+ // Every account is blocked; report no selection instead of failing status.
76
+ }
77
+ }
78
+ let executablePath;
79
+ let executableProblem;
80
+ try {
81
+ executablePath = (deps.resolveExecutable ?? defaultResolveExecutable)(deps.settings);
82
+ }
83
+ catch (error) {
84
+ executableProblem = error instanceof Error ? error.message : String(error);
85
+ if (!(error instanceof CursorAgentNotInstalledError))
86
+ executablePath = undefined;
87
+ }
88
+ let executableVersion;
89
+ if (executablePath !== undefined) {
90
+ try {
91
+ executableVersion = await (deps.probeVersion ?? probeCursorAgentVersion)(executablePath);
92
+ }
93
+ catch {
94
+ // Version unknown; the floor warning only applies to parseable versions.
95
+ }
96
+ }
97
+ const comparison = executableVersion === undefined
98
+ ? undefined
99
+ : compareCursorCliVersions(executableVersion, CURSOR_CLI_MINIMUM_KNOWN_GOOD_VERSION);
100
+ const nativeCredential = deps.readNativeCredential === undefined ? undefined : await deps.readNativeCredential();
101
+ return {
102
+ lane: CURSOR_CLI_STATUS_LANE,
103
+ selectedAccount,
104
+ pinnedAccount,
105
+ chatId: record?.chatId,
106
+ lastModel: record?.lastModel,
107
+ contextOwner: CURSOR_CLI_STATUS_CONTEXT_OWNER,
108
+ executablePath,
109
+ executableVersion,
110
+ minimumKnownGoodVersion: CURSOR_CLI_MINIMUM_KNOWN_GOOD_VERSION,
111
+ belowMinimumKnownGood: comparison !== undefined && comparison < 0,
112
+ executableProblem,
113
+ blockWindows: accounts
114
+ .map((account) => blockWindowFor(account, now()))
115
+ .filter((window) => window !== undefined),
116
+ accountNames: accounts.map((account) => account.name),
117
+ nativeCursorConfigured: isUsableOAuthCredential(nativeCredential),
118
+ };
119
+ }
120
+ /** Pure renderer: names and metadata only, never token material. */
121
+ export function renderCursorCliStatus(report) {
122
+ const lines = ["Cursor CLI (OAuth) status:"];
123
+ lines.push(` Auth lane: ${report.lane}`);
124
+ lines.push(` Context owner: ${report.contextOwner}`);
125
+ lines.push(` Selected account: ${report.selectedAccount === undefined
126
+ ? "none"
127
+ : report.selectedAccount === report.pinnedAccount
128
+ ? `${report.selectedAccount} (pinned)`
129
+ : report.selectedAccount}`);
130
+ lines.push(` Chat id: ${report.chatId ?? "none (no turns yet on this session)"}`);
131
+ lines.push(` Last model: ${report.lastModel ?? "none"}`);
132
+ if (report.executableProblem !== undefined) {
133
+ lines.push(` Executable: not installed - ${report.executableProblem}`);
134
+ }
135
+ else {
136
+ lines.push(` Executable: ${report.executablePath ?? "not installed"}`);
137
+ }
138
+ if (report.executableVersion !== undefined)
139
+ lines.push(` Version: ${report.executableVersion}`);
140
+ if (report.belowMinimumKnownGood) {
141
+ lines.push(` WARNING: cursor-agent ${report.executableVersion} is below the minimum known-good ${report.minimumKnownGoodVersion}; upgrade recommended`);
142
+ }
143
+ if (report.blockWindows.length === 0) {
144
+ lines.push(" Block windows: none");
145
+ }
146
+ else {
147
+ lines.push(" Block windows:");
148
+ for (const window of report.blockWindows) {
149
+ lines.push(window.blockedUntil === undefined
150
+ ? ` ${window.account}: ${window.reason}, until re-login`
151
+ : ` ${window.account}: ${window.reason}, expires ${new Date(window.blockedUntil).toISOString()}`);
152
+ }
153
+ }
154
+ if (report.nativeCursorConfigured) {
155
+ lines.push(` 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.`);
156
+ }
157
+ return lines.join("\n");
158
+ }
159
+ /**
160
+ * A reload retires this extension generation (`AgentSession.reload()` then
161
+ * invalidates the old runner) while timers and promise continuations captured
162
+ * by it are still armed; every `ExtensionContext` getter then throws
163
+ * "stale extension generation after reload". The context carries no liveness
164
+ * flag, so a retired generation is only observable by probing a getter.
165
+ */
166
+ export function isCursorCliContextRetired(ctx) {
167
+ try {
168
+ ctx.isIdle();
169
+ return false;
170
+ }
171
+ catch {
172
+ return true;
173
+ }
174
+ }
175
+ /** Per-registration generation fence; one per extension registration (a reload builds a new one). */
176
+ export class CursorCliGenerationGuard {
177
+ constructor() {
178
+ this.retired = false;
179
+ this.timers = new Set();
180
+ }
181
+ isRetired() {
182
+ return this.retired;
183
+ }
184
+ retire(reason) {
185
+ if (this.retired)
186
+ return;
187
+ this.retired = true;
188
+ this.retirementReason = `extension generation retired (${reason})`;
189
+ }
190
+ onDropped(reporter) {
191
+ this.droppedReporter = reporter;
192
+ }
193
+ /** Arms a timer the shutdown path cancels; arming after retirement is a no-op by construction. */
194
+ setTrackedTimeout(callback, delayMs) {
195
+ const timer = this.armTracked(callback, delayMs);
196
+ return () => {
197
+ if (timer !== undefined)
198
+ this.cancelTimer(timer);
199
+ };
200
+ }
201
+ /** Cancels every armed timer; returns how many were pending. */
202
+ clearTrackedTimers() {
203
+ const pending = this.timers.size;
204
+ for (const timer of this.timers)
205
+ clearTimeout(timer);
206
+ this.timers.clear();
207
+ return pending;
208
+ }
209
+ /**
210
+ * Runs a deferred continuation behind the generation fence. A dropped
211
+ * continuation is reported, never silently presented as completed.
212
+ */
213
+ async runFenced(ctx, work) {
214
+ const blockedReason = this.retirementReasonFor(ctx);
215
+ if (blockedReason !== undefined) {
216
+ this.reportDropped("deferred continuation", blockedReason);
217
+ return { status: "dropped", reason: blockedReason };
218
+ }
219
+ return { status: "completed", value: await work(ctx) };
220
+ }
221
+ /** Synchronous variant for continuations that only touch the context once, after an outer await. */
222
+ runFencedSync(ctx, work) {
223
+ const blockedReason = this.retirementReasonFor(ctx);
224
+ if (blockedReason !== undefined) {
225
+ this.reportDropped("deferred continuation", blockedReason);
226
+ return { ran: false };
227
+ }
228
+ work();
229
+ return { ran: true };
230
+ }
231
+ defer(ctx, work, delayMs = 0) {
232
+ const fire = () => this.runFenced(ctx, work);
233
+ const timer = this.armTracked(() => {
234
+ // The timer path has no caller to receive a rejection (senpi #866 crash
235
+ // class), so a post-fence failure is reported instead of escaping to the
236
+ // timer queue.
237
+ void fire().catch((error) => {
238
+ this.reportDropped("deferred continuation", `failed after the retirement check: ${error instanceof Error ? error.message : String(error)}`);
239
+ });
240
+ }, delayMs);
241
+ return {
242
+ fire,
243
+ cancel: () => {
244
+ if (timer !== undefined)
245
+ this.cancelTimer(timer);
246
+ },
247
+ };
248
+ }
249
+ armTracked(callback, delayMs) {
250
+ if (this.retired)
251
+ return undefined;
252
+ const timer = setTimeout(() => {
253
+ this.timers.delete(timer);
254
+ callback();
255
+ }, delayMs);
256
+ this.timers.add(timer);
257
+ return timer;
258
+ }
259
+ cancelTimer(timer) {
260
+ clearTimeout(timer);
261
+ this.timers.delete(timer);
262
+ }
263
+ retirementReasonFor(ctx) {
264
+ if (this.retired)
265
+ return this.retirementReason ?? "extension generation retired";
266
+ if (isCursorCliContextRetired(ctx))
267
+ return "extension context retired by reload";
268
+ return undefined;
269
+ }
270
+ reportDropped(description, reason) {
271
+ this.droppedReporter?.(description, reason);
272
+ }
273
+ }
274
+ /** Process-group kill on the tracked pid, mirroring transport.ts's mechanism (never name matching). */
275
+ function killCursorCliProcessGroup(pid, signal) {
276
+ try {
277
+ if (process.platform === "win32")
278
+ process.kill(pid, signal);
279
+ else
280
+ process.kill(-pid, signal);
281
+ }
282
+ catch (error) {
283
+ if (error.code !== "ESRCH")
284
+ throw error;
285
+ }
286
+ }
287
+ /**
288
+ * Registry of live children this extension spawned. Entries leave the registry
289
+ * when their transport run settles, so `killAll` only ever signals live
290
+ * process groups and is idempotent across repeated interruptions.
291
+ */
292
+ export class CursorCliChildRegistry {
293
+ constructor() {
294
+ this.children = new Map();
295
+ }
296
+ track(handle) {
297
+ this.children.set(handle.pid, { pid: handle.pid, abort: () => handle.abort(), killed: false });
298
+ void handle.completed.then(() => this.children.delete(handle.pid), () => this.children.delete(handle.pid));
299
+ return handle;
300
+ }
301
+ livePids() {
302
+ return [...this.children.keys()];
303
+ }
304
+ /** SIGTERMs every tracked process group with a SIGKILL escalation; returns the pids it signalled. */
305
+ killAll(graceMs = CURSOR_CLI_ABORT_GRACE_MS) {
306
+ const signalled = [];
307
+ for (const entry of this.children.values()) {
308
+ if (entry.killed)
309
+ continue;
310
+ entry.killed = true;
311
+ signalled.push(entry.pid);
312
+ // Teardown must never throw into the shutdown event loop; individual
313
+ // failures are contained per child, and the SIGKILL escalation below
314
+ // still runs for that pid.
315
+ try {
316
+ entry.abort();
317
+ }
318
+ catch {
319
+ // Deliberate: shutdown stays idempotent even if one child misbehaves.
320
+ }
321
+ try {
322
+ killCursorCliProcessGroup(entry.pid, "SIGTERM");
323
+ }
324
+ catch {
325
+ // Deliberate: see above.
326
+ }
327
+ const escalation = setTimeout(() => killCursorCliProcessGroup(entry.pid, "SIGKILL"), graceMs);
328
+ escalation.unref?.();
329
+ }
330
+ return signalled;
331
+ }
332
+ }
333
+ /** Shared registry; child pids are process-wide resources, so one registry serves every generation. */
334
+ export const cursorCliChildRegistry = new CursorCliChildRegistry();
335
+ /** Spawns one cursor-agent run through the transport and registers it for shutdown teardown. */
336
+ export function spawnCursorCliTracked(input, registry = cursorCliChildRegistry) {
337
+ return registry.track(spawnCursorCli(input));
338
+ }
339
+ /**
340
+ * Installs the `session_shutdown`/`session_extensions_removed` teardown: kill
341
+ * every tracked child's process group, cancel the generation's pending timers,
342
+ * and retire the generation so every deferred continuation is fenced. Safe to
343
+ * fire repeatedly; a retired generation is never resurrected (a reload builds a
344
+ * new registration with a fresh guard).
345
+ */
346
+ export function registerCursorCliShutdownSafety(pi, deps = {}) {
347
+ const generation = deps.generation ?? new CursorCliGenerationGuard();
348
+ const registry = deps.registry ?? cursorCliChildRegistry;
349
+ const teardown = (reason) => {
350
+ registry.killAll();
351
+ generation.clearTrackedTimers();
352
+ generation.retire(reason);
353
+ };
354
+ pi.on("session_shutdown", (event) => {
355
+ teardown(event.reason);
356
+ });
357
+ pi.on("session_extensions_removed", (event) => {
358
+ teardown(event.reason);
359
+ });
360
+ return generation;
361
+ }
362
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,19 @@
1
+ export type CursorCliErrorKind = "binary_missing" | "invalid_api_key" | "keychain_locked" | "invalid_model" | "rate_limit" | "auth_error" | "context_overflow" | "network" | "malformed_stream" | "other";
2
+ export type CursorCliErrorClassification = {
3
+ kind: CursorCliErrorKind;
4
+ retryable: boolean;
5
+ blockMs?: number;
6
+ };
7
+ export type CursorCliErrorInput = {
8
+ exitCode?: unknown;
9
+ stderr?: unknown;
10
+ resultEvent?: unknown;
11
+ thrown?: unknown;
12
+ };
13
+ export declare const DEFAULT_RATE_LIMIT_BLOCK_MS = 60000;
14
+ export declare const MAX_RATE_LIMIT_BLOCK_MS: number;
15
+ /** Add each probe-observed Cursor context failure as one exact line. */
16
+ export declare const CURSOR_CONTEXT_OVERFLOW_WORDINGS: readonly string[];
17
+ /** Classifies observed cursor-agent stderr, result events, and typed transport failures. */
18
+ export declare function classifyCursorCliError(input: CursorCliErrorInput | null | undefined): CursorCliErrorClassification;
19
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAC3B,gBAAgB,GAChB,iBAAiB,GACjB,iBAAiB,GACjB,eAAe,GACf,YAAY,GACZ,YAAY,GACZ,kBAAkB,GAClB,SAAS,GACT,kBAAkB,GAClB,OAAO,CAAC;AAEX,MAAM,MAAM,4BAA4B,GAAG;IAC1C,IAAI,EAAE,kBAAkB,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAClD,eAAO,MAAM,uBAAuB,QAAuB,CAAC;AAE5D,wEAAwE;AACxE,eAAO,MAAM,gCAAgC,EAAE,SAAS,MAAM,EAAO,CAAC;AAuFtE,4FAA4F;AAC5F,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,GAAG,4BAA4B,CA0ClH"}