@code-yeongyu/senpi 2026.8.16 → 2026.8.17

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 (625) hide show
  1. package/CHANGELOG.md +51 -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 +28 -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 +278 -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 +67 -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 +73 -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 +330 -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 +35 -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 +186 -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.js +2 -2
  155. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  156. package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
  157. package/dist/modes/rpc/connection-handler.js +32 -27
  158. package/dist/modes/rpc/connection-handler.js.map +1 -1
  159. package/dist/modes/rpc/jsonl.d.ts +6 -1
  160. package/dist/modes/rpc/jsonl.d.ts.map +1 -1
  161. package/dist/modes/rpc/jsonl.js +47 -14
  162. package/dist/modes/rpc/jsonl.js.map +1 -1
  163. package/dist/modes/rpc/multi-session-host.d.ts.map +1 -1
  164. package/dist/modes/rpc/multi-session-host.js +26 -4
  165. package/dist/modes/rpc/multi-session-host.js.map +1 -1
  166. package/dist/modes/rpc/rpc-command-invocation.d.ts +5 -0
  167. package/dist/modes/rpc/rpc-command-invocation.d.ts.map +1 -0
  168. package/dist/modes/rpc/rpc-command-invocation.js +2 -0
  169. package/dist/modes/rpc/rpc-command-invocation.js.map +1 -0
  170. package/dist/modes/rpc/rpc-command-surface.d.ts +49 -0
  171. package/dist/modes/rpc/rpc-command-surface.d.ts.map +1 -0
  172. package/dist/modes/rpc/rpc-command-surface.js +40 -0
  173. package/dist/modes/rpc/rpc-command-surface.js.map +1 -0
  174. package/dist/modes/rpc/rpc-input-validation.d.ts +4 -0
  175. package/dist/modes/rpc/rpc-input-validation.d.ts.map +1 -0
  176. package/dist/modes/rpc/rpc-input-validation.js +20 -0
  177. package/dist/modes/rpc/rpc-input-validation.js.map +1 -0
  178. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  179. package/dist/modes/rpc/rpc-mode.js +12 -1
  180. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  181. package/dist/modes/rpc/rpc-types.d.ts +12 -12
  182. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  183. package/dist/modes/rpc/rpc-types.js.map +1 -1
  184. package/docs/providers.md +50 -1
  185. package/docs/rpc.md +78 -6
  186. package/docs/skills.md +14 -3
  187. package/node_modules/@bufbuild/protobuf/README.md +44 -0
  188. package/node_modules/@bufbuild/protobuf/dist/commonjs/clone.d.ts +6 -0
  189. package/node_modules/@bufbuild/protobuf/dist/commonjs/clone.js +66 -0
  190. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/boot.d.ts +1 -0
  191. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/boot.js +18 -0
  192. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/enum.d.ts +10 -0
  193. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/enum.js +31 -0
  194. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/extension.d.ts +9 -0
  195. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/extension.js +28 -0
  196. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/file.d.ts +1 -0
  197. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/file.js +18 -0
  198. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/index.d.ts +10 -0
  199. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/index.js +39 -0
  200. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/message.d.ts +10 -0
  201. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/message.js +24 -0
  202. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/service.d.ts +8 -0
  203. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/service.js +27 -0
  204. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/symbols.d.ts +140 -0
  205. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/symbols.js +43 -0
  206. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/types.d.ts +79 -0
  207. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/types.js +15 -0
  208. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/boot.d.ts +63 -0
  209. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/boot.js +105 -0
  210. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/embed.d.ts +43 -0
  211. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/embed.js +244 -0
  212. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/enum.d.ts +29 -0
  213. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/enum.js +58 -0
  214. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/extension.d.ts +9 -0
  215. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/extension.js +28 -0
  216. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/file.d.ts +7 -0
  217. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/file.js +35 -0
  218. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/index.d.ts +10 -0
  219. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/index.js +39 -0
  220. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/message.d.ts +15 -0
  221. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/message.js +24 -0
  222. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/restore-json-names.d.ts +5 -0
  223. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/restore-json-names.js +29 -0
  224. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/scalar.d.ts +9 -0
  225. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/scalar.js +67 -0
  226. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/service.d.ts +8 -0
  227. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/service.js +27 -0
  228. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/symbols.d.ts +145 -0
  229. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/symbols.js +74 -0
  230. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/types.d.ts +85 -0
  231. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/types.js +15 -0
  232. package/node_modules/@bufbuild/protobuf/dist/commonjs/create.d.ts +9 -0
  233. package/node_modules/@bufbuild/protobuf/dist/commonjs/create.js +259 -0
  234. package/node_modules/@bufbuild/protobuf/dist/commonjs/descriptors.d.ts +634 -0
  235. package/node_modules/@bufbuild/protobuf/dist/commonjs/descriptors.js +53 -0
  236. package/node_modules/@bufbuild/protobuf/dist/commonjs/equals.d.ts +46 -0
  237. package/node_modules/@bufbuild/protobuf/dist/commonjs/equals.js +209 -0
  238. package/node_modules/@bufbuild/protobuf/dist/commonjs/extensions.d.ts +60 -0
  239. package/node_modules/@bufbuild/protobuf/dist/commonjs/extensions.js +168 -0
  240. package/node_modules/@bufbuild/protobuf/dist/commonjs/fields.d.ts +23 -0
  241. package/node_modules/@bufbuild/protobuf/dist/commonjs/fields.js +45 -0
  242. package/node_modules/@bufbuild/protobuf/dist/commonjs/from-binary.d.ts +48 -0
  243. package/node_modules/@bufbuild/protobuf/dist/commonjs/from-binary.js +247 -0
  244. package/node_modules/@bufbuild/protobuf/dist/commonjs/from-json.d.ts +73 -0
  245. package/node_modules/@bufbuild/protobuf/dist/commonjs/from-json.js +739 -0
  246. package/node_modules/@bufbuild/protobuf/dist/commonjs/index.d.ts +19 -0
  247. package/node_modules/@bufbuild/protobuf/dist/commonjs/index.js +55 -0
  248. package/node_modules/@bufbuild/protobuf/dist/commonjs/is-message.d.ts +7 -0
  249. package/node_modules/@bufbuild/protobuf/dist/commonjs/is-message.js +33 -0
  250. package/node_modules/@bufbuild/protobuf/dist/commonjs/json-value.d.ts +16 -0
  251. package/node_modules/@bufbuild/protobuf/dist/commonjs/json-value.js +15 -0
  252. package/node_modules/@bufbuild/protobuf/dist/commonjs/merge.d.ts +13 -0
  253. package/node_modules/@bufbuild/protobuf/dist/commonjs/merge.js +70 -0
  254. package/node_modules/@bufbuild/protobuf/dist/commonjs/package.json +4 -0
  255. package/node_modules/@bufbuild/protobuf/dist/commonjs/proto-int64.d.ts +98 -0
  256. package/node_modules/@bufbuild/protobuf/dist/commonjs/proto-int64.js +131 -0
  257. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/error.d.ts +9 -0
  258. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/error.js +36 -0
  259. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/guard.d.ts +20 -0
  260. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/guard.js +78 -0
  261. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/index.d.ts +8 -0
  262. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/index.js +41 -0
  263. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/names.d.ts +30 -0
  264. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/names.js +115 -0
  265. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/nested-types.d.ts +35 -0
  266. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/nested-types.js +110 -0
  267. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/path.d.ts +107 -0
  268. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/path.js +376 -0
  269. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect-check.d.ts +19 -0
  270. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect-check.js +268 -0
  271. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect-types.d.ts +217 -0
  272. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect-types.js +16 -0
  273. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect.d.ts +43 -0
  274. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect.js +546 -0
  275. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/scalar.d.ts +43 -0
  276. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/scalar.js +129 -0
  277. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/unsafe.d.ts +39 -0
  278. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/unsafe.js +149 -0
  279. package/node_modules/@bufbuild/protobuf/dist/commonjs/registry.d.ts +98 -0
  280. package/node_modules/@bufbuild/protobuf/dist/commonjs/registry.js +945 -0
  281. package/node_modules/@bufbuild/protobuf/dist/commonjs/to-binary.d.ts +24 -0
  282. package/node_modules/@bufbuild/protobuf/dist/commonjs/to-binary.js +199 -0
  283. package/node_modules/@bufbuild/protobuf/dist/commonjs/to-json.d.ts +67 -0
  284. package/node_modules/@bufbuild/protobuf/dist/commonjs/to-json.js +391 -0
  285. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/from-text.d.ts +35 -0
  286. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/from-text.js +684 -0
  287. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/index.d.ts +4 -0
  288. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/index.js +21 -0
  289. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/is-group-like.d.ts +19 -0
  290. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/is-group-like.js +47 -0
  291. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/reader.d.ts +91 -0
  292. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/reader.js +481 -0
  293. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/to-text.d.ts +34 -0
  294. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/to-text.js +358 -0
  295. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/writer.d.ts +76 -0
  296. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/writer.js +220 -0
  297. package/node_modules/@bufbuild/protobuf/dist/commonjs/types.d.ts +135 -0
  298. package/node_modules/@bufbuild/protobuf/dist/commonjs/types.js +15 -0
  299. package/node_modules/@bufbuild/protobuf/dist/commonjs/unknown-enum.d.ts +10 -0
  300. package/node_modules/@bufbuild/protobuf/dist/commonjs/unknown-enum.js +26 -0
  301. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/base64-encoding.d.ts +23 -0
  302. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/base64-encoding.js +156 -0
  303. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/binary-encoding.d.ts +268 -0
  304. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/binary-encoding.js +530 -0
  305. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/index.d.ts +5 -0
  306. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/index.js +34 -0
  307. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/size-delimited.d.ts +69 -0
  308. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/size-delimited.js +191 -0
  309. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/text-encoding.d.ts +28 -0
  310. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/text-encoding.js +61 -0
  311. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/text-format.d.ts +13 -0
  312. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/text-format.js +199 -0
  313. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/varint.d.ts +70 -0
  314. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/varint.js +322 -0
  315. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/any.d.ts +38 -0
  316. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/any.js +75 -0
  317. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/duration.d.ts +9 -0
  318. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/duration.js +39 -0
  319. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/any_pb.d.ts +238 -0
  320. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/any_pb.js +27 -0
  321. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/api_pb.d.ts +537 -0
  322. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/api_pb.js +39 -0
  323. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +490 -0
  324. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/compiler/plugin_pb.js +68 -0
  325. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/cpp_features_pb.d.ts +91 -0
  326. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/cpp_features_pb.js +60 -0
  327. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/descriptor_pb.d.ts +4143 -0
  328. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/descriptor_pb.js +892 -0
  329. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/duration_pb.d.ts +161 -0
  330. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/duration_pb.js +27 -0
  331. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/empty_pb.d.ts +39 -0
  332. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/empty_pb.js +27 -0
  333. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/field_mask_pb.d.ts +424 -0
  334. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/field_mask_pb.js +27 -0
  335. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/go_features_pb.d.ts +189 -0
  336. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/go_features_pb.js +126 -0
  337. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/java_features_pb.d.ts +194 -0
  338. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/java_features_pb.js +106 -0
  339. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/source_context_pb.d.ts +43 -0
  340. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/source_context_pb.js +27 -0
  341. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/struct_pb.d.ts +195 -0
  342. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/struct_pb.js +59 -0
  343. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/timestamp_pb.d.ts +222 -0
  344. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/timestamp_pb.js +27 -0
  345. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/type_pb.d.ts +722 -0
  346. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/type_pb.js +242 -0
  347. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/wrappers_pb.d.ts +330 -0
  348. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/wrappers_pb.js +67 -0
  349. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/index.d.ts +19 -0
  350. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/index.js +48 -0
  351. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/timestamp.d.ts +21 -0
  352. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/timestamp.js +57 -0
  353. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/wrappers.d.ts +25 -0
  354. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/wrappers.js +66 -0
  355. package/node_modules/@bufbuild/protobuf/dist/esm/clone.d.ts +6 -0
  356. package/node_modules/@bufbuild/protobuf/dist/esm/clone.js +63 -0
  357. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/boot.d.ts +1 -0
  358. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/boot.js +14 -0
  359. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/enum.d.ts +10 -0
  360. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/enum.js +26 -0
  361. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/extension.d.ts +9 -0
  362. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/extension.js +25 -0
  363. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/file.d.ts +1 -0
  364. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/file.js +14 -0
  365. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/index.d.ts +10 -0
  366. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/index.js +23 -0
  367. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/message.d.ts +10 -0
  368. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/message.js +21 -0
  369. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/service.d.ts +8 -0
  370. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/service.js +24 -0
  371. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/symbols.d.ts +140 -0
  372. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/symbols.js +40 -0
  373. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/types.d.ts +79 -0
  374. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/types.js +14 -0
  375. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/boot.d.ts +63 -0
  376. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/boot.js +101 -0
  377. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/embed.d.ts +43 -0
  378. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/embed.js +239 -0
  379. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/enum.d.ts +29 -0
  380. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/enum.js +53 -0
  381. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/extension.d.ts +9 -0
  382. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/extension.js +25 -0
  383. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/file.d.ts +7 -0
  384. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/file.js +32 -0
  385. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/index.d.ts +10 -0
  386. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/index.js +23 -0
  387. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/message.d.ts +15 -0
  388. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/message.js +21 -0
  389. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/restore-json-names.d.ts +5 -0
  390. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/restore-json-names.js +26 -0
  391. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/scalar.d.ts +9 -0
  392. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/scalar.js +63 -0
  393. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/service.d.ts +8 -0
  394. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/service.js +24 -0
  395. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/symbols.d.ts +145 -0
  396. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/symbols.js +71 -0
  397. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/types.d.ts +85 -0
  398. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/types.js +14 -0
  399. package/node_modules/@bufbuild/protobuf/dist/esm/create.d.ts +9 -0
  400. package/node_modules/@bufbuild/protobuf/dist/esm/create.js +256 -0
  401. package/node_modules/@bufbuild/protobuf/dist/esm/descriptors.d.ts +634 -0
  402. package/node_modules/@bufbuild/protobuf/dist/esm/descriptors.js +50 -0
  403. package/node_modules/@bufbuild/protobuf/dist/esm/equals.d.ts +46 -0
  404. package/node_modules/@bufbuild/protobuf/dist/esm/equals.js +206 -0
  405. package/node_modules/@bufbuild/protobuf/dist/esm/extensions.d.ts +60 -0
  406. package/node_modules/@bufbuild/protobuf/dist/esm/extensions.js +159 -0
  407. package/node_modules/@bufbuild/protobuf/dist/esm/fields.d.ts +23 -0
  408. package/node_modules/@bufbuild/protobuf/dist/esm/fields.js +41 -0
  409. package/node_modules/@bufbuild/protobuf/dist/esm/from-binary.d.ts +48 -0
  410. package/node_modules/@bufbuild/protobuf/dist/esm/from-binary.js +241 -0
  411. package/node_modules/@bufbuild/protobuf/dist/esm/from-json.d.ts +73 -0
  412. package/node_modules/@bufbuild/protobuf/dist/esm/from-json.js +731 -0
  413. package/node_modules/@bufbuild/protobuf/dist/esm/index.d.ts +19 -0
  414. package/node_modules/@bufbuild/protobuf/dist/esm/index.js +29 -0
  415. package/node_modules/@bufbuild/protobuf/dist/esm/is-message.d.ts +7 -0
  416. package/node_modules/@bufbuild/protobuf/dist/esm/is-message.js +30 -0
  417. package/node_modules/@bufbuild/protobuf/dist/esm/json-value.d.ts +16 -0
  418. package/node_modules/@bufbuild/protobuf/dist/esm/json-value.js +14 -0
  419. package/node_modules/@bufbuild/protobuf/dist/esm/merge.d.ts +13 -0
  420. package/node_modules/@bufbuild/protobuf/dist/esm/merge.js +67 -0
  421. package/node_modules/@bufbuild/protobuf/dist/esm/package.json +4 -0
  422. package/node_modules/@bufbuild/protobuf/dist/esm/proto-int64.d.ts +98 -0
  423. package/node_modules/@bufbuild/protobuf/dist/esm/proto-int64.js +128 -0
  424. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/error.d.ts +9 -0
  425. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/error.js +31 -0
  426. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/guard.d.ts +20 -0
  427. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/guard.js +71 -0
  428. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/index.d.ts +8 -0
  429. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/index.js +21 -0
  430. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/names.d.ts +30 -0
  431. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/names.js +109 -0
  432. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/nested-types.d.ts +35 -0
  433. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/nested-types.js +105 -0
  434. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/path.d.ts +107 -0
  435. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/path.js +369 -0
  436. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-check.d.ts +19 -0
  437. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-check.js +262 -0
  438. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-types.d.ts +217 -0
  439. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-types.js +14 -0
  440. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect.d.ts +43 -0
  441. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect.js +541 -0
  442. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/scalar.d.ts +43 -0
  443. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/scalar.js +124 -0
  444. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/unsafe.d.ts +39 -0
  445. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/unsafe.js +140 -0
  446. package/node_modules/@bufbuild/protobuf/dist/esm/registry.d.ts +98 -0
  447. package/node_modules/@bufbuild/protobuf/dist/esm/registry.js +939 -0
  448. package/node_modules/@bufbuild/protobuf/dist/esm/to-binary.d.ts +24 -0
  449. package/node_modules/@bufbuild/protobuf/dist/esm/to-binary.js +195 -0
  450. package/node_modules/@bufbuild/protobuf/dist/esm/to-json.d.ts +67 -0
  451. package/node_modules/@bufbuild/protobuf/dist/esm/to-json.js +386 -0
  452. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/from-text.d.ts +35 -0
  453. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/from-text.js +680 -0
  454. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/index.d.ts +4 -0
  455. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/index.js +15 -0
  456. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/is-group-like.d.ts +19 -0
  457. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/is-group-like.js +44 -0
  458. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/reader.d.ts +91 -0
  459. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/reader.js +477 -0
  460. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/to-text.d.ts +34 -0
  461. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/to-text.js +355 -0
  462. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/writer.d.ts +76 -0
  463. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/writer.js +214 -0
  464. package/node_modules/@bufbuild/protobuf/dist/esm/types.d.ts +135 -0
  465. package/node_modules/@bufbuild/protobuf/dist/esm/types.js +14 -0
  466. package/node_modules/@bufbuild/protobuf/dist/esm/unknown-enum.d.ts +10 -0
  467. package/node_modules/@bufbuild/protobuf/dist/esm/unknown-enum.js +23 -0
  468. package/node_modules/@bufbuild/protobuf/dist/esm/wire/base64-encoding.d.ts +23 -0
  469. package/node_modules/@bufbuild/protobuf/dist/esm/wire/base64-encoding.js +152 -0
  470. package/node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.d.ts +268 -0
  471. package/node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.js +525 -0
  472. package/node_modules/@bufbuild/protobuf/dist/esm/wire/index.d.ts +5 -0
  473. package/node_modules/@bufbuild/protobuf/dist/esm/wire/index.js +18 -0
  474. package/node_modules/@bufbuild/protobuf/dist/esm/wire/size-delimited.d.ts +69 -0
  475. package/node_modules/@bufbuild/protobuf/dist/esm/wire/size-delimited.js +186 -0
  476. package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.d.ts +28 -0
  477. package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.js +57 -0
  478. package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-format.d.ts +13 -0
  479. package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-format.js +195 -0
  480. package/node_modules/@bufbuild/protobuf/dist/esm/wire/varint.d.ts +70 -0
  481. package/node_modules/@bufbuild/protobuf/dist/esm/wire/varint.js +313 -0
  482. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/any.d.ts +38 -0
  483. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/any.js +69 -0
  484. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/duration.d.ts +9 -0
  485. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/duration.js +35 -0
  486. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/any_pb.d.ts +238 -0
  487. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/any_pb.js +24 -0
  488. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/api_pb.d.ts +537 -0
  489. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/api_pb.js +36 -0
  490. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +490 -0
  491. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.js +65 -0
  492. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/cpp_features_pb.d.ts +91 -0
  493. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/cpp_features_pb.js +57 -0
  494. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/descriptor_pb.d.ts +4143 -0
  495. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js +888 -0
  496. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/duration_pb.d.ts +161 -0
  497. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/duration_pb.js +24 -0
  498. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/empty_pb.d.ts +39 -0
  499. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/empty_pb.js +24 -0
  500. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/field_mask_pb.d.ts +424 -0
  501. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/field_mask_pb.js +24 -0
  502. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/go_features_pb.d.ts +189 -0
  503. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/go_features_pb.js +123 -0
  504. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/java_features_pb.d.ts +194 -0
  505. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/java_features_pb.js +103 -0
  506. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/source_context_pb.d.ts +43 -0
  507. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/source_context_pb.js +24 -0
  508. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/struct_pb.d.ts +195 -0
  509. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/struct_pb.js +56 -0
  510. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/timestamp_pb.d.ts +222 -0
  511. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/timestamp_pb.js +24 -0
  512. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/type_pb.d.ts +722 -0
  513. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/type_pb.js +239 -0
  514. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/wrappers_pb.d.ts +330 -0
  515. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/wrappers_pb.js +64 -0
  516. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/index.d.ts +19 -0
  517. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/index.js +32 -0
  518. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/timestamp.d.ts +21 -0
  519. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/timestamp.js +50 -0
  520. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/wrappers.d.ts +25 -0
  521. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/wrappers.js +61 -0
  522. package/node_modules/@bufbuild/protobuf/package.json +147 -0
  523. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +14 -0
  524. package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
  525. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-runtime.ts +2 -0
  526. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/render.ts +43 -6
  527. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/types.ts +4 -0
  528. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  529. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +59 -17
  530. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  531. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts +14 -0
  532. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts.map +1 -1
  533. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js +14 -0
  534. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js.map +1 -1
  535. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +12 -1
  536. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
  537. package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
  538. package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
  539. package/node_modules/@earendil-works/pi-ai/README.md +3 -2
  540. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/deterministic-id.d.ts +17 -0
  541. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/deterministic-id.d.ts.map +1 -0
  542. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/deterministic-id.js +14 -0
  543. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/deterministic-id.js.map +1 -0
  544. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/exec-lifecycle.d.ts +13 -0
  545. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/exec-lifecycle.d.ts.map +1 -0
  546. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/exec-lifecycle.js +33 -0
  547. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/exec-lifecycle.js.map +1 -0
  548. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/exec-modern.d.ts +79 -0
  549. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/exec-modern.d.ts.map +1 -0
  550. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/exec-modern.js +360 -0
  551. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/exec-modern.js.map +1 -0
  552. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/gen/agent_pb.d.ts +16797 -0
  553. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/gen/agent_pb.d.ts.map +1 -0
  554. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/gen/agent_pb.js +3828 -0
  555. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/gen/agent_pb.js.map +1 -0
  556. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/pi-args.d.ts +55 -0
  557. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/pi-args.d.ts.map +1 -0
  558. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/pi-args.js +76 -0
  559. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/pi-args.js.map +1 -0
  560. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/types.d.ts +116 -0
  561. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/types.d.ts.map +1 -0
  562. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/types.js +16 -0
  563. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/types.js.map +1 -0
  564. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts +191 -0
  565. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts.map +1 -0
  566. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js +3316 -0
  567. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js.map +1 -0
  568. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.lazy.d.ts +29 -0
  569. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.lazy.d.ts.map +1 -0
  570. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.lazy.js +33 -0
  571. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.lazy.js.map +1 -0
  572. package/node_modules/@earendil-works/pi-ai/dist/compat.d.ts +1 -0
  573. package/node_modules/@earendil-works/pi-ai/dist/compat.d.ts.map +1 -1
  574. package/node_modules/@earendil-works/pi-ai/dist/compat.js +3 -0
  575. package/node_modules/@earendil-works/pi-ai/dist/compat.js.map +1 -1
  576. package/node_modules/@earendil-works/pi-ai/dist/cursor-agent-provider.d.ts +11 -0
  577. package/node_modules/@earendil-works/pi-ai/dist/cursor-agent-provider.d.ts.map +1 -0
  578. package/node_modules/@earendil-works/pi-ai/dist/cursor-agent-provider.js +11 -0
  579. package/node_modules/@earendil-works/pi-ai/dist/cursor-agent-provider.js.map +1 -0
  580. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +3 -0
  581. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
  582. package/node_modules/@earendil-works/pi-ai/dist/index.js +2 -0
  583. package/node_modules/@earendil-works/pi-ai/dist/index.js.map +1 -1
  584. package/node_modules/@earendil-works/pi-ai/dist/model.d.ts +6 -1
  585. package/node_modules/@earendil-works/pi-ai/dist/model.d.ts.map +1 -1
  586. package/node_modules/@earendil-works/pi-ai/dist/model.js.map +1 -1
  587. package/node_modules/@earendil-works/pi-ai/dist/providers/cursor.d.ts +6 -9
  588. package/node_modules/@earendil-works/pi-ai/dist/providers/cursor.d.ts.map +1 -1
  589. package/node_modules/@earendil-works/pi-ai/dist/providers/cursor.js +42 -9
  590. package/node_modules/@earendil-works/pi-ai/dist/providers/cursor.js.map +1 -1
  591. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  592. package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
  593. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cerebras.json +1 -1
  594. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +1 -1
  595. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-workers-ai.json +1 -1
  596. package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -1
  597. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai-codex.json +1 -1
  598. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  599. package/node_modules/@earendil-works/pi-ai/dist/providers/data/together.json +1 -1
  600. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  601. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +3 -1
  602. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  603. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  604. package/node_modules/@earendil-works/pi-ai/dist/utils/block-symbols.d.ts +57 -0
  605. package/node_modules/@earendil-works/pi-ai/dist/utils/block-symbols.d.ts.map +1 -0
  606. package/node_modules/@earendil-works/pi-ai/dist/utils/block-symbols.js +57 -0
  607. package/node_modules/@earendil-works/pi-ai/dist/utils/block-symbols.js.map +1 -0
  608. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.d.ts +10 -0
  609. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.d.ts.map +1 -1
  610. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.js +22 -0
  611. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.js.map +1 -1
  612. package/node_modules/@earendil-works/pi-ai/package.json +3 -2
  613. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  614. package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
  615. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts.map +1 -1
  616. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js +21 -0
  617. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js.map +1 -1
  618. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +1 -1
  619. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
  620. package/node_modules/@earendil-works/pi-tui/dist/dollar-invocation-autocomplete.d.ts +9 -0
  621. package/node_modules/@earendil-works/pi-tui/dist/dollar-invocation-autocomplete.d.ts.map +1 -0
  622. package/node_modules/@earendil-works/pi-tui/dist/dollar-invocation-autocomplete.js +82 -0
  623. package/node_modules/@earendil-works/pi-tui/dist/dollar-invocation-autocomplete.js.map +1 -0
  624. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  625. package/package.json +11 -8
@@ -0,0 +1,11 @@
1
+ import type { Agent, AgentTool, AgentToolCall, BeforeToolCallResult } from "@earendil-works/pi-agent-core";
2
+ type CursorBridgeAgent = Pick<Agent, "emitExternalEvent" | "signal">;
3
+ export interface CursorExecBridgeSession {
4
+ getRegisteredTool(name: string): AgentTool | undefined;
5
+ preflightToolCall(toolCall: AgentToolCall, args: unknown): Promise<BeforeToolCallResult | undefined>;
6
+ }
7
+ export declare function createSessionCursorExecBridge(sessionRef: {
8
+ current?: CursorExecBridgeSession;
9
+ }, getAgent: () => CursorBridgeAgent): import("@earendil-works/pi-ai").CursorExecHandlers;
10
+ export {};
11
+ //# sourceMappingURL=cursor-exec-bridge-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-exec-bridge-session.d.ts","sourceRoot":"","sources":["../../src/core/cursor-exec-bridge-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAc,SAAS,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAGvH,KAAK,iBAAiB,GAAG,IAAI,CAAC,KAAK,EAAE,mBAAmB,GAAG,QAAQ,CAAC,CAAC;AAErE,MAAM,WAAW,uBAAuB;IACvC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IACvD,iBAAiB,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAAC;CACrG;AAED,wBAAgB,6BAA6B,CAC5C,UAAU,EAAE;IAAE,OAAO,CAAC,EAAE,uBAAuB,CAAA;CAAE,EACjD,QAAQ,EAAE,MAAM,iBAAiB,sDAmBjC"}
@@ -0,0 +1,17 @@
1
+ import { createCursorExecBridge } from "./cursor-exec-bridge.js";
2
+ export function createSessionCursorExecBridge(sessionRef, getAgent) {
3
+ return createCursorExecBridge({
4
+ getTool: (name) => sessionRef.current?.getRegisteredTool(name),
5
+ preflightToolCall: async (event) => sessionRef.current?.preflightToolCall({
6
+ type: "toolCall",
7
+ id: event.toolCallId,
8
+ name: event.toolName,
9
+ arguments: event.input,
10
+ }, event.input),
11
+ emitEvent: (event) => {
12
+ void getAgent().emitExternalEvent(event);
13
+ },
14
+ getAbortSignal: () => getAgent().signal,
15
+ });
16
+ }
17
+ //# sourceMappingURL=cursor-exec-bridge-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-exec-bridge-session.js","sourceRoot":"","sources":["../../src/core/cursor-exec-bridge-session.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AASjE,MAAM,UAAU,6BAA6B,CAC5C,UAAiD,EACjD,QAAiC;IAEjC,OAAO,sBAAsB,CAAC;QAC7B,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC;QAC9D,iBAAiB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAClC,UAAU,CAAC,OAAO,EAAE,iBAAiB,CACpC;YACC,IAAI,EAAE,UAAU;YAChB,EAAE,EAAE,KAAK,CAAC,UAAU;YACpB,IAAI,EAAE,KAAK,CAAC,QAAQ;YACpB,SAAS,EAAE,KAAK,CAAC,KAAK;SACtB,EACD,KAAK,CAAC,KAAK,CACX;QACF,SAAS,EAAE,CAAC,KAAiB,EAAE,EAAE;YAChC,KAAK,QAAQ,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;QACD,cAAc,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM;KACvC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type { Agent, AgentEvent, AgentTool, AgentToolCall, BeforeToolCallResult } from \"@earendil-works/pi-agent-core\";\nimport { createCursorExecBridge } from \"./cursor-exec-bridge.ts\";\n\ntype CursorBridgeAgent = Pick<Agent, \"emitExternalEvent\" | \"signal\">;\n\nexport interface CursorExecBridgeSession {\n\tgetRegisteredTool(name: string): AgentTool | undefined;\n\tpreflightToolCall(toolCall: AgentToolCall, args: unknown): Promise<BeforeToolCallResult | undefined>;\n}\n\nexport function createSessionCursorExecBridge(\n\tsessionRef: { current?: CursorExecBridgeSession },\n\tgetAgent: () => CursorBridgeAgent,\n) {\n\treturn createCursorExecBridge({\n\t\tgetTool: (name) => sessionRef.current?.getRegisteredTool(name),\n\t\tpreflightToolCall: async (event) =>\n\t\t\tsessionRef.current?.preflightToolCall(\n\t\t\t\t{\n\t\t\t\t\ttype: \"toolCall\",\n\t\t\t\t\tid: event.toolCallId,\n\t\t\t\t\tname: event.toolName,\n\t\t\t\t\targuments: event.input,\n\t\t\t\t},\n\t\t\t\tevent.input,\n\t\t\t),\n\t\temitEvent: (event: AgentEvent) => {\n\t\t\tvoid getAgent().emitExternalEvent(event);\n\t\t},\n\t\tgetAbortSignal: () => getAgent().signal,\n\t});\n}\n"]}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Cursor exec-channel → local tool bridge.
3
+ *
4
+ * Cursor's agent protocol executes tools server-drivenly: mid-stream, the
5
+ * server sends exec frames and blocks until the client answers in band. The
6
+ * `cursor-agent` API dispatches those frames onto this bridge, which maps
7
+ * each frame's args onto the session's real tools (`read`, `bash`, `edit`,
8
+ * `write`, `grep`, `find`, `ls`, plus MCP/extension tools by name) and runs
9
+ * them through the same wrapped `AgentTool.execute` path model-issued calls
10
+ * use — so approvals, sandboxing, truncation, and rendering behavior stay
11
+ * identical.
12
+ *
13
+ * The arg translations here MUST mirror the display blocks the API
14
+ * synthesizes (`synthesizeCursorExecToolCall` call sites): the transcript
15
+ * shows one operation, so a different one must not run.
16
+ */
17
+ import type { AgentEvent, AgentTool } from "@earendil-works/pi-agent-core";
18
+ import { type CursorExecHandlers } from "@earendil-works/pi-ai";
19
+ import type { ToolCallEvent, ToolCallEventResult } from "./extensions/types.ts";
20
+ export interface CursorExecBridgeOptions {
21
+ /**
22
+ * Resolve an executable tool by name. Backed by the session's full tool
23
+ * registry (builtin + extension tools), not only the active set: Cursor
24
+ * drives its native tools (read/bash/grep/ls/write) over the exec channel
25
+ * regardless of which tools the request advertised.
26
+ */
27
+ getTool: (name: string) => AgentTool | undefined;
28
+ /**
29
+ * Surface tool lifecycle events to the host UI. Bridge-run tools bypass
30
+ * the agent loop's executor, so without these the live tool card for a
31
+ * synthesized call never resolves.
32
+ */
33
+ emitEvent?: (event: AgentEvent) => void;
34
+ /** Run the session's vetoable extension preflight before tool execution. */
35
+ preflightToolCall?: (event: ToolCallEvent) => Promise<ToolCallEventResult | undefined>;
36
+ /** Abort signal for in-flight bridge executions (the active run's signal). */
37
+ getAbortSignal?: () => AbortSignal | undefined;
38
+ }
39
+ /**
40
+ * Build the exec handlers passed to the `cursor-agent` API through the agent
41
+ * loop config. Handlers return bare `ToolResultMessage`s; the API derives the
42
+ * wire protobuf answer from them and pairs the transcript result.
43
+ *
44
+ * Deliberately absent handlers (the API answers with a typed refusal):
45
+ * - `delete`: senpi has no delete tool and the bridge must not mutate the
46
+ * filesystem outside the tool/approval path.
47
+ * - `diagnostics`: no LSP tool in this fork.
48
+ * - `mcpApprovalPreflight`: approval decisions cannot be resolved without an
49
+ * interactive prompt, so smart-mode probes are conservatively refused.
50
+ */
51
+ export declare function createCursorExecBridge(options: CursorExecBridgeOptions): CursorExecHandlers;
52
+ //# sourceMappingURL=cursor-exec-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-exec-bridge.d.ts","sourceRoot":"","sources":["../../src/core/cursor-exec-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAiB,MAAM,+BAA+B,CAAC;AAC1F,OAAO,EACN,KAAK,kBAAkB,EASvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEhF,MAAM,WAAW,uBAAuB;IACvC;;;;;OAKG;IACH,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,CAAC;IACjD;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACxC,4EAA4E;IAC5E,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAAC;IACvF,8EAA8E;IAC9E,cAAc,CAAC,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;CAC/C;AA4GD;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,GAAG,kBAAkB,CA0F3F"}
@@ -0,0 +1,196 @@
1
+ /**
2
+ * Cursor exec-channel → local tool bridge.
3
+ *
4
+ * Cursor's agent protocol executes tools server-drivenly: mid-stream, the
5
+ * server sends exec frames and blocks until the client answers in band. The
6
+ * `cursor-agent` API dispatches those frames onto this bridge, which maps
7
+ * each frame's args onto the session's real tools (`read`, `bash`, `edit`,
8
+ * `write`, `grep`, `find`, `ls`, plus MCP/extension tools by name) and runs
9
+ * them through the same wrapped `AgentTool.execute` path model-issued calls
10
+ * use — so approvals, sandboxing, truncation, and rendering behavior stay
11
+ * identical.
12
+ *
13
+ * The arg translations here MUST mirror the display blocks the API
14
+ * synthesizes (`synthesizeCursorExecToolCall` call sites): the transcript
15
+ * shows one operation, so a different one must not run.
16
+ */
17
+ import { composeCursorShellCommand, cursorPiLimit, cursorPiLsPath, cursorPiReadArgs, cursorPiTimeout, omitUndefinedCursorArgs, validateToolArguments, } from "@earendil-works/pi-ai";
18
+ function isRecord(value) {
19
+ return typeof value === "object" && value !== null && !Array.isArray(value);
20
+ }
21
+ function errorResult(toolCallId, toolName, text) {
22
+ return {
23
+ role: "toolResult",
24
+ toolCallId,
25
+ toolName,
26
+ content: [{ type: "text", text }],
27
+ isError: true,
28
+ timestamp: Date.now(),
29
+ };
30
+ }
31
+ function emptyResult(toolCallId, toolName) {
32
+ return {
33
+ role: "toolResult",
34
+ toolCallId,
35
+ toolName,
36
+ content: [{ type: "text", text: "" }],
37
+ isError: false,
38
+ timestamp: Date.now(),
39
+ };
40
+ }
41
+ async function executeTool(options, toolName, toolCallId, args) {
42
+ const tool = options.getTool(toolName);
43
+ if (!tool) {
44
+ return errorResult(toolCallId, toolName, `Tool "${toolName}" is not available in this session`);
45
+ }
46
+ // Exec-frame translators write forms like `path: args.path || undefined`;
47
+ // a present `undefined` fails schema validation on optional fields even
48
+ // though omitting the key is valid.
49
+ const cleanArgs = omitUndefinedCursorArgs(args);
50
+ const toolCall = {
51
+ type: "toolCall",
52
+ id: toolCallId,
53
+ name: toolName,
54
+ arguments: cleanArgs,
55
+ };
56
+ let params;
57
+ try {
58
+ params = validateToolArguments(tool, toolCall);
59
+ if (tool.prepareArguments) {
60
+ params = tool.prepareArguments(params);
61
+ }
62
+ }
63
+ catch (error) {
64
+ return errorResult(toolCallId, toolName, error instanceof Error ? error.message : String(error));
65
+ }
66
+ options.emitEvent?.({ type: "tool_execution_start", toolCallId, toolName, args: cleanArgs });
67
+ try {
68
+ if (!isRecord(params)) {
69
+ throw new Error(`Tool "${toolName}" prepared non-object arguments`);
70
+ }
71
+ const preflight = await options.preflightToolCall?.({
72
+ type: "tool_call",
73
+ toolCallId,
74
+ toolName,
75
+ input: params,
76
+ });
77
+ if (preflight?.block) {
78
+ const message = preflight.reason || "Tool execution was blocked";
79
+ options.emitEvent?.({
80
+ type: "tool_execution_end",
81
+ toolCallId,
82
+ toolName,
83
+ result: { content: [{ type: "text", text: message }], details: undefined },
84
+ isError: true,
85
+ });
86
+ return errorResult(toolCallId, toolName, message);
87
+ }
88
+ const result = await tool.execute(toolCallId, params, options.getAbortSignal?.(), undefined);
89
+ const toolResult = {
90
+ role: "toolResult",
91
+ toolCallId,
92
+ toolName,
93
+ content: result.content ?? [],
94
+ details: result.details,
95
+ usage: result.usage,
96
+ isError: false,
97
+ timestamp: Date.now(),
98
+ };
99
+ options.emitEvent?.({ type: "tool_execution_end", toolCallId, toolName, result, isError: false });
100
+ return toolResult;
101
+ }
102
+ catch (error) {
103
+ const message = error instanceof Error ? error.message : String(error);
104
+ options.emitEvent?.({
105
+ type: "tool_execution_end",
106
+ toolCallId,
107
+ toolName,
108
+ result: { content: [{ type: "text", text: message }], details: undefined },
109
+ isError: true,
110
+ });
111
+ return errorResult(toolCallId, toolName, message);
112
+ }
113
+ }
114
+ /**
115
+ * Build the exec handlers passed to the `cursor-agent` API through the agent
116
+ * loop config. Handlers return bare `ToolResultMessage`s; the API derives the
117
+ * wire protobuf answer from them and pairs the transcript result.
118
+ *
119
+ * Deliberately absent handlers (the API answers with a typed refusal):
120
+ * - `delete`: senpi has no delete tool and the bridge must not mutate the
121
+ * filesystem outside the tool/approval path.
122
+ * - `diagnostics`: no LSP tool in this fork.
123
+ * - `mcpApprovalPreflight`: approval decisions cannot be resolved without an
124
+ * interactive prompt, so smart-mode probes are conservatively refused.
125
+ */
126
+ export function createCursorExecBridge(options) {
127
+ return {
128
+ read: async (args) => executeTool(options, "read", args.toolCallId, {
129
+ path: args.path,
130
+ offset: args.offset,
131
+ limit: args.limit,
132
+ }),
133
+ ls: async (args) => executeTool(options, "ls", args.toolCallId, { path: cursorPiLsPath(args.path) }),
134
+ grep: async (args) => executeTool(options, "grep", args.toolCallId, {
135
+ pattern: args.pattern,
136
+ path: args.path || undefined,
137
+ glob: args.glob || undefined,
138
+ ignoreCase: args.caseInsensitive === true ? true : undefined,
139
+ }),
140
+ write: async (args) => executeTool(options, "write", args.toolCallId, {
141
+ path: args.path,
142
+ content: args.fileText ?? new TextDecoder().decode(args.fileBytes ?? new Uint8Array()),
143
+ }),
144
+ shell: async (args) => executeTool(options, "bash", args.toolCallId, {
145
+ command: composeCursorShellCommand(args.command, args.workingDirectory || undefined),
146
+ timeout: args.timeout && args.timeout > 0 ? args.timeout : undefined,
147
+ }),
148
+ mcp: async (call) => {
149
+ const toolName = call.toolName || call.name;
150
+ const tool = options.getTool(toolName);
151
+ if (!tool) {
152
+ return errorResult(call.toolCallId, toolName, `Tool "${toolName}" is not registered in this session`);
153
+ }
154
+ return executeTool(options, toolName, call.toolCallId, call.args);
155
+ },
156
+ piRead: async (call) => {
157
+ const readArgs = cursorPiReadArgs(call.args.path, call.args.offset, call.args.limit);
158
+ // A present `limit: 0` reads zero lines; answer with empty output
159
+ // without running the tool rather than degrading into a full read.
160
+ if (readArgs === null)
161
+ return emptyResult(call.toolCallId, "read");
162
+ return executeTool(options, "read", call.toolCallId, readArgs);
163
+ },
164
+ piBash: async (call) => executeTool(options, "bash", call.toolCallId, {
165
+ command: call.args.command,
166
+ timeout: cursorPiTimeout(call.args.timeout),
167
+ }),
168
+ piEdit: async (call) => executeTool(options, "edit", call.toolCallId, {
169
+ path: call.args.path,
170
+ edits: call.args.edits.map((edit) => ({ oldText: edit.oldText, newText: edit.newText })),
171
+ }),
172
+ piWrite: async (call) => executeTool(options, "write", call.toolCallId, {
173
+ path: call.args.path,
174
+ content: call.args.content,
175
+ }),
176
+ piGrep: async (call) => executeTool(options, "grep", call.toolCallId, {
177
+ pattern: call.args.pattern,
178
+ path: call.args.path || undefined,
179
+ glob: call.args.glob || undefined,
180
+ ignoreCase: call.args.ignoreCase === true ? true : undefined,
181
+ literal: call.args.literal === true ? true : undefined,
182
+ context: call.args.context,
183
+ limit: cursorPiLimit(call.args.limit),
184
+ }),
185
+ piFind: async (call) => executeTool(options, "find", call.toolCallId, {
186
+ pattern: call.args.pattern,
187
+ path: call.args.path || undefined,
188
+ limit: cursorPiLimit(call.args.limit),
189
+ }),
190
+ piLs: async (call) => executeTool(options, "ls", call.toolCallId, {
191
+ path: cursorPiLsPath(call.args.path),
192
+ limit: cursorPiLimit(call.args.limit),
193
+ }),
194
+ };
195
+ }
196
+ //# sourceMappingURL=cursor-exec-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-exec-bridge.js","sourceRoot":"","sources":["../../src/core/cursor-exec-bridge.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Cursor exec-channel → local tool bridge.\n *\n * Cursor's agent protocol executes tools server-drivenly: mid-stream, the\n * server sends exec frames and blocks until the client answers in band. The\n * `cursor-agent` API dispatches those frames onto this bridge, which maps\n * each frame's args onto the session's real tools (`read`, `bash`, `edit`,\n * `write`, `grep`, `find`, `ls`, plus MCP/extension tools by name) and runs\n * them through the same wrapped `AgentTool.execute` path model-issued calls\n * use — so approvals, sandboxing, truncation, and rendering behavior stay\n * identical.\n *\n * The arg translations here MUST mirror the display blocks the API\n * synthesizes (`synthesizeCursorExecToolCall` call sites): the transcript\n * shows one operation, so a different one must not run.\n */\n\nimport type { AgentEvent, AgentTool, AgentToolCall } from \"@earendil-works/pi-agent-core\";\nimport {\n\ttype CursorExecHandlers,\n\tcomposeCursorShellCommand,\n\tcursorPiLimit,\n\tcursorPiLsPath,\n\tcursorPiReadArgs,\n\tcursorPiTimeout,\n\tomitUndefinedCursorArgs,\n\ttype ToolResultMessage,\n\tvalidateToolArguments,\n} from \"@earendil-works/pi-ai\";\nimport type { ToolCallEvent, ToolCallEventResult } from \"./extensions/types.ts\";\n\nexport interface CursorExecBridgeOptions {\n\t/**\n\t * Resolve an executable tool by name. Backed by the session's full tool\n\t * registry (builtin + extension tools), not only the active set: Cursor\n\t * drives its native tools (read/bash/grep/ls/write) over the exec channel\n\t * regardless of which tools the request advertised.\n\t */\n\tgetTool: (name: string) => AgentTool | undefined;\n\t/**\n\t * Surface tool lifecycle events to the host UI. Bridge-run tools bypass\n\t * the agent loop's executor, so without these the live tool card for a\n\t * synthesized call never resolves.\n\t */\n\temitEvent?: (event: AgentEvent) => void;\n\t/** Run the session's vetoable extension preflight before tool execution. */\n\tpreflightToolCall?: (event: ToolCallEvent) => Promise<ToolCallEventResult | undefined>;\n\t/** Abort signal for in-flight bridge executions (the active run's signal). */\n\tgetAbortSignal?: () => AbortSignal | undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction errorResult(toolCallId: string, toolName: string, text: string): ToolResultMessage {\n\treturn {\n\t\trole: \"toolResult\",\n\t\ttoolCallId,\n\t\ttoolName,\n\t\tcontent: [{ type: \"text\", text }],\n\t\tisError: true,\n\t\ttimestamp: Date.now(),\n\t};\n}\n\nfunction emptyResult(toolCallId: string, toolName: string): ToolResultMessage {\n\treturn {\n\t\trole: \"toolResult\",\n\t\ttoolCallId,\n\t\ttoolName,\n\t\tcontent: [{ type: \"text\", text: \"\" }],\n\t\tisError: false,\n\t\ttimestamp: Date.now(),\n\t};\n}\n\nasync function executeTool(\n\toptions: CursorExecBridgeOptions,\n\ttoolName: string,\n\ttoolCallId: string,\n\targs: Record<string, unknown>,\n): Promise<ToolResultMessage> {\n\tconst tool = options.getTool(toolName);\n\tif (!tool) {\n\t\treturn errorResult(toolCallId, toolName, `Tool \"${toolName}\" is not available in this session`);\n\t}\n\n\t// Exec-frame translators write forms like `path: args.path || undefined`;\n\t// a present `undefined` fails schema validation on optional fields even\n\t// though omitting the key is valid.\n\tconst cleanArgs = omitUndefinedCursorArgs(args);\n\tconst toolCall: AgentToolCall = {\n\t\ttype: \"toolCall\",\n\t\tid: toolCallId,\n\t\tname: toolName,\n\t\targuments: cleanArgs,\n\t};\n\n\tlet params: unknown;\n\ttry {\n\t\tparams = validateToolArguments(tool, toolCall);\n\t\tif (tool.prepareArguments) {\n\t\t\tparams = tool.prepareArguments(params);\n\t\t}\n\t} catch (error) {\n\t\treturn errorResult(toolCallId, toolName, error instanceof Error ? error.message : String(error));\n\t}\n\n\toptions.emitEvent?.({ type: \"tool_execution_start\", toolCallId, toolName, args: cleanArgs });\n\ttry {\n\t\tif (!isRecord(params)) {\n\t\t\tthrow new Error(`Tool \"${toolName}\" prepared non-object arguments`);\n\t\t}\n\t\tconst preflight = await options.preflightToolCall?.({\n\t\t\ttype: \"tool_call\",\n\t\t\ttoolCallId,\n\t\t\ttoolName,\n\t\t\tinput: params,\n\t\t});\n\t\tif (preflight?.block) {\n\t\t\tconst message = preflight.reason || \"Tool execution was blocked\";\n\t\t\toptions.emitEvent?.({\n\t\t\t\ttype: \"tool_execution_end\",\n\t\t\t\ttoolCallId,\n\t\t\t\ttoolName,\n\t\t\t\tresult: { content: [{ type: \"text\", text: message }], details: undefined },\n\t\t\t\tisError: true,\n\t\t\t});\n\t\t\treturn errorResult(toolCallId, toolName, message);\n\t\t}\n\t\tconst result = await tool.execute(toolCallId, params, options.getAbortSignal?.(), undefined);\n\t\tconst toolResult: ToolResultMessage = {\n\t\t\trole: \"toolResult\",\n\t\t\ttoolCallId,\n\t\t\ttoolName,\n\t\t\tcontent: result.content ?? [],\n\t\t\tdetails: result.details,\n\t\t\tusage: result.usage,\n\t\t\tisError: false,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\toptions.emitEvent?.({ type: \"tool_execution_end\", toolCallId, toolName, result, isError: false });\n\t\treturn toolResult;\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\toptions.emitEvent?.({\n\t\t\ttype: \"tool_execution_end\",\n\t\t\ttoolCallId,\n\t\t\ttoolName,\n\t\t\tresult: { content: [{ type: \"text\", text: message }], details: undefined },\n\t\t\tisError: true,\n\t\t});\n\t\treturn errorResult(toolCallId, toolName, message);\n\t}\n}\n\n/**\n * Build the exec handlers passed to the `cursor-agent` API through the agent\n * loop config. Handlers return bare `ToolResultMessage`s; the API derives the\n * wire protobuf answer from them and pairs the transcript result.\n *\n * Deliberately absent handlers (the API answers with a typed refusal):\n * - `delete`: senpi has no delete tool and the bridge must not mutate the\n * filesystem outside the tool/approval path.\n * - `diagnostics`: no LSP tool in this fork.\n * - `mcpApprovalPreflight`: approval decisions cannot be resolved without an\n * interactive prompt, so smart-mode probes are conservatively refused.\n */\nexport function createCursorExecBridge(options: CursorExecBridgeOptions): CursorExecHandlers {\n\treturn {\n\t\tread: async (args) =>\n\t\t\texecuteTool(options, \"read\", args.toolCallId, {\n\t\t\t\tpath: args.path,\n\t\t\t\toffset: args.offset,\n\t\t\t\tlimit: args.limit,\n\t\t\t}),\n\n\t\tls: async (args) => executeTool(options, \"ls\", args.toolCallId, { path: cursorPiLsPath(args.path) }),\n\n\t\tgrep: async (args) =>\n\t\t\texecuteTool(options, \"grep\", args.toolCallId, {\n\t\t\t\tpattern: args.pattern,\n\t\t\t\tpath: args.path || undefined,\n\t\t\t\tglob: args.glob || undefined,\n\t\t\t\tignoreCase: args.caseInsensitive === true ? true : undefined,\n\t\t\t}),\n\n\t\twrite: async (args) =>\n\t\t\texecuteTool(options, \"write\", args.toolCallId, {\n\t\t\t\tpath: args.path,\n\t\t\t\tcontent: args.fileText ?? new TextDecoder().decode(args.fileBytes ?? new Uint8Array()),\n\t\t\t}),\n\n\t\tshell: async (args) =>\n\t\t\texecuteTool(options, \"bash\", args.toolCallId, {\n\t\t\t\tcommand: composeCursorShellCommand(args.command, args.workingDirectory || undefined),\n\t\t\t\ttimeout: args.timeout && args.timeout > 0 ? args.timeout : undefined,\n\t\t\t}),\n\n\t\tmcp: async (call) => {\n\t\t\tconst toolName = call.toolName || call.name;\n\t\t\tconst tool = options.getTool(toolName);\n\t\t\tif (!tool) {\n\t\t\t\treturn errorResult(call.toolCallId, toolName, `Tool \"${toolName}\" is not registered in this session`);\n\t\t\t}\n\t\t\treturn executeTool(options, toolName, call.toolCallId, call.args);\n\t\t},\n\n\t\tpiRead: async (call) => {\n\t\t\tconst readArgs = cursorPiReadArgs(call.args.path, call.args.offset, call.args.limit);\n\t\t\t// A present `limit: 0` reads zero lines; answer with empty output\n\t\t\t// without running the tool rather than degrading into a full read.\n\t\t\tif (readArgs === null) return emptyResult(call.toolCallId, \"read\");\n\t\t\treturn executeTool(options, \"read\", call.toolCallId, readArgs);\n\t\t},\n\n\t\tpiBash: async (call) =>\n\t\t\texecuteTool(options, \"bash\", call.toolCallId, {\n\t\t\t\tcommand: call.args.command,\n\t\t\t\ttimeout: cursorPiTimeout(call.args.timeout),\n\t\t\t}),\n\n\t\tpiEdit: async (call) =>\n\t\t\texecuteTool(options, \"edit\", call.toolCallId, {\n\t\t\t\tpath: call.args.path,\n\t\t\t\tedits: call.args.edits.map((edit) => ({ oldText: edit.oldText, newText: edit.newText })),\n\t\t\t}),\n\n\t\tpiWrite: async (call) =>\n\t\t\texecuteTool(options, \"write\", call.toolCallId, {\n\t\t\t\tpath: call.args.path,\n\t\t\t\tcontent: call.args.content,\n\t\t\t}),\n\n\t\tpiGrep: async (call) =>\n\t\t\texecuteTool(options, \"grep\", call.toolCallId, {\n\t\t\t\tpattern: call.args.pattern,\n\t\t\t\tpath: call.args.path || undefined,\n\t\t\t\tglob: call.args.glob || undefined,\n\t\t\t\tignoreCase: call.args.ignoreCase === true ? true : undefined,\n\t\t\t\tliteral: call.args.literal === true ? true : undefined,\n\t\t\t\tcontext: call.args.context,\n\t\t\t\tlimit: cursorPiLimit(call.args.limit),\n\t\t\t}),\n\n\t\tpiFind: async (call) =>\n\t\t\texecuteTool(options, \"find\", call.toolCallId, {\n\t\t\t\tpattern: call.args.pattern,\n\t\t\t\tpath: call.args.path || undefined,\n\t\t\t\tlimit: cursorPiLimit(call.args.limit),\n\t\t\t}),\n\n\t\tpiLs: async (call) =>\n\t\t\texecuteTool(options, \"ls\", call.toolCallId, {\n\t\t\t\tpath: cursorPiLsPath(call.args.path),\n\t\t\t\tlimit: cursorPiLimit(call.args.limit),\n\t\t\t}),\n\t};\n}\n"]}
@@ -0,0 +1,28 @@
1
+ import type { Credential } from "@earendil-works/pi-ai";
2
+ import type { ExtensionAPI } from "../../types.ts";
3
+ import { type CursorCliGenerationGuard } from "./diagnostics.ts";
4
+ import { importLocalCursorCredential, type LocalCursorImportDeps } from "./oauth-login.ts";
5
+ import { type CursorCliSessionRouter } from "./session-router.ts";
6
+ import { type CursorCliOauthProviderSettings } from "./settings.ts";
7
+ /** Injectable seams; every default resolves real on-disk state at invocation time. */
8
+ export type CursorCliAccountCommandDeps = {
9
+ readonly loadSettings?: (cwd: string) => CursorCliOauthProviderSettings;
10
+ readonly router?: CursorCliSessionRouter;
11
+ readonly resolveExecutable?: (settings: CursorCliOauthProviderSettings) => string;
12
+ readonly probeVersion?: (executable: string) => Promise<string>;
13
+ readonly readNativeCredential?: () => Credential | undefined | Promise<Credential | undefined>;
14
+ readonly importCredential?: typeof importLocalCursorCredential;
15
+ readonly importDeps?: LocalCursorImportDeps;
16
+ /** Acknowledgement persistence seam; the default read-modify-writes the global settings file. */
17
+ readonly persistAcknowledgement?: (cwd: string, acknowledgedAt: string) => void;
18
+ readonly now?: () => number;
19
+ readonly generation?: CursorCliGenerationGuard;
20
+ };
21
+ /**
22
+ * Registers `/cursor-account` plus the reload/shutdown teardown for this
23
+ * extension generation: the command reads account state fresh from the
24
+ * credential store on every invocation, and every deferred continuation is
25
+ * fenced so a retired generation is never touched after a reload.
26
+ */
27
+ export declare function registerCursorCliAccountCommand(pi: ExtensionAPI, deps?: CursorCliAccountCommandDeps): void;
28
+ //# sourceMappingURL=account-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-command.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/account-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAA2B,MAAM,gBAAgB,CAAC;AAW5E,OAAO,EACN,KAAK,wBAAwB,EAK7B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAGN,2BAA2B,EAC3B,KAAK,qBAAqB,EAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,KAAK,sBAAsB,EAA0B,MAAM,qBAAqB,CAAC;AAC1F,OAAO,EACN,KAAK,8BAA8B,EAGnC,MAAM,eAAe,CAAC;AAEvB,sFAAsF;AACtF,MAAM,MAAM,2BAA2B,GAAG;IACzC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,8BAA8B,CAAC;IACxE,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAC;IACzC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,8BAA8B,KAAK,MAAM,CAAC;IAClF,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;IAC/F,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,2BAA2B,CAAC;IAC/D,QAAQ,CAAC,UAAU,CAAC,EAAE,qBAAqB,CAAC;IAC5C,iGAAiG;IACjG,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;IAChF,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,wBAAwB,CAAC;CAC/C,CAAC;AAiCF;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,GAAE,2BAAgC,GAAG,IAAI,CAoD9G"}
@@ -0,0 +1,278 @@
1
+ import { emitProviderAccountsChanged } from "../claude-sdk-oauth/account-events.js";
2
+ import { emptyCredential, listAccounts, pinAccount, removeAccount, } from "./accounts.js";
3
+ import { selectAccount } from "./affinity.js";
4
+ import { collectCursorCliStatus, NATIVE_CURSOR_PROVIDER_ID, registerCursorCliShutdownSafety, renderCursorCliStatus, } from "./diagnostics.js";
5
+ import { CURSOR_CLI_OAUTH_PROVIDER_ID, confirmCursorCliNoApprovalAcknowledgement, importLocalCursorCredential, } from "./oauth-login.js";
6
+ import { cursorCliSessionRouter } from "./session-router.js";
7
+ import { loadCursorCliOauthProviderSettingsFromDisk, persistCursorCliNoApprovalAcknowledgement, } from "./settings.js";
8
+ const USAGE = "Usage: /cursor-account [list | add | remove <name> | pin <name> | unpin | import | acknowledge | status]";
9
+ function asCursorCredential(value) {
10
+ return value !== undefined && value.type === "oauth" ? value : emptyCredential();
11
+ }
12
+ function parseArgs(rawArgs) {
13
+ return rawArgs.trim().split(/\s+/).filter(Boolean);
14
+ }
15
+ function slotStatus(slot, now) {
16
+ if (slot.blockReason === "auth_error")
17
+ return "blocked until re-login";
18
+ if (slot.blockedUntil !== undefined && slot.blockedUntil > now) {
19
+ return `blocked until ${new Date(slot.blockedUntil).toISOString()} (${slot.blockReason ?? "rate_limit"})`;
20
+ }
21
+ return "available";
22
+ }
23
+ function authEventMessage(event) {
24
+ if (event === null || typeof event !== "object")
25
+ return "Cursor CLI (OAuth) authentication update.";
26
+ const value = event;
27
+ if (value.type === "auth_url" && typeof value.url === "string") {
28
+ return `Open this URL to authorize Cursor CLI (OAuth):\n${value.url}`;
29
+ }
30
+ if (value.type === "device_code" && typeof value.verificationUri === "string") {
31
+ return `Open this URL to authorize Cursor CLI (OAuth):\n${value.verificationUri}`;
32
+ }
33
+ return typeof value.message === "string" ? value.message : "Cursor CLI (OAuth) authentication update.";
34
+ }
35
+ /**
36
+ * Registers `/cursor-account` plus the reload/shutdown teardown for this
37
+ * extension generation: the command reads account state fresh from the
38
+ * credential store on every invocation, and every deferred continuation is
39
+ * fenced so a retired generation is never touched after a reload.
40
+ */
41
+ export function registerCursorCliAccountCommand(pi, deps = {}) {
42
+ const loadSettings = deps.loadSettings ?? ((cwd) => loadCursorCliOauthProviderSettingsFromDisk(cwd));
43
+ const now = deps.now ?? Date.now;
44
+ // One guard per registration: a reload rebuilds the extension and gets a
45
+ // fresh fence, while the child registry stays process-wide.
46
+ const generation = registerCursorCliShutdownSafety(pi, { generation: deps.generation });
47
+ pi.registerCommand("cursor-account", {
48
+ description: "List and manage Cursor CLI (OAuth) accounts.",
49
+ argumentHint: "[list | add | remove <name> | pin <name> | unpin | import | acknowledge | status]",
50
+ handler: async (rawArgs, ctx) => {
51
+ try {
52
+ const args = parseArgs(rawArgs);
53
+ const action = args[0] ?? "list";
54
+ if (action === "list") {
55
+ showAccounts(ctx, loadSettings(ctx.cwd), generation, now);
56
+ return;
57
+ }
58
+ if (action === "add") {
59
+ await addAccount(ctx);
60
+ return;
61
+ }
62
+ if (action === "remove") {
63
+ await removeNamedAccount(ctx, args[1]);
64
+ return;
65
+ }
66
+ if (action === "pin" && args[1] !== undefined) {
67
+ await pinNamedAccount(ctx, args[1]);
68
+ return;
69
+ }
70
+ if (action === "unpin") {
71
+ await unpinAccount(ctx);
72
+ return;
73
+ }
74
+ if (action === "import") {
75
+ await importAccount(ctx, deps);
76
+ return;
77
+ }
78
+ if (action === "acknowledge") {
79
+ await acknowledgeNoApproval(ctx, deps, generation);
80
+ return;
81
+ }
82
+ if (action === "status") {
83
+ await showStatus(ctx, deps, { loadSettings, generation, now });
84
+ return;
85
+ }
86
+ ctx.ui.notify(USAGE, "error");
87
+ }
88
+ catch (error) {
89
+ ctx.ui.notify(error instanceof Error ? error.message : String(error), "error");
90
+ }
91
+ },
92
+ });
93
+ }
94
+ function showAccounts(ctx, settings, generation, now) {
95
+ const credential = asCursorCredential(ctx.modelRegistry.authStorage.get(CURSOR_CLI_OAUTH_PROVIDER_ID));
96
+ const accounts = listAccounts(credential);
97
+ const pinned = settings.pinnedAccount ?? credential.pinned;
98
+ const pinSource = settings.pinnedAccount !== undefined ? "settings" : "stored";
99
+ let affinityPick;
100
+ let affinityError;
101
+ if (accounts.length > 0) {
102
+ try {
103
+ affinityPick = selectAccount(accounts, {
104
+ sessionId: ctx.sessionManager.getSessionId(),
105
+ pinnedAccount: pinned,
106
+ now: now(),
107
+ }).name;
108
+ }
109
+ catch (error) {
110
+ affinityError = error instanceof Error ? error.message : String(error);
111
+ }
112
+ }
113
+ const lines = ["Cursor CLI (OAuth) accounts:"];
114
+ if (accounts.length === 0)
115
+ lines.push(" (none)");
116
+ for (const account of accounts) {
117
+ const states = [account.name, account.source, slotStatus(account, now())];
118
+ if (account.name === pinned)
119
+ states.push("pinned");
120
+ if (account.name === affinityPick)
121
+ states.push("affinity pick");
122
+ lines.push(` ${states.join(" | ")}`);
123
+ }
124
+ lines.push(`Pinned account: ${pinned === undefined ? "none" : `${pinned} (${pinSource})`}`);
125
+ lines.push(`Affinity pick: ${affinityPick ?? (affinityError ? `unavailable - ${affinityError}` : "none")}`);
126
+ generation.runFencedSync(ctx, () => ctx.ui.notify(lines.join("\n"), "info"));
127
+ }
128
+ async function addAccount(ctx) {
129
+ if (!ctx.hasUI) {
130
+ ctx.ui.notify("/cursor-account add requires an interactive UI.", "error");
131
+ return;
132
+ }
133
+ try {
134
+ await ctx.modelRegistry.modelRuntime.login(CURSOR_CLI_OAUTH_PROVIDER_ID, "oauth", {
135
+ signal: ctx.signal,
136
+ prompt: async (prompt) => {
137
+ const answer = await ctx.ui.input(prompt.message);
138
+ if (answer === undefined)
139
+ throw new Error("Login cancelled");
140
+ return answer;
141
+ },
142
+ notify: (event) => ctx.ui.notify(authEventMessage(event), "info"),
143
+ });
144
+ emitProviderAccountsChanged(CURSOR_CLI_OAUTH_PROVIDER_ID);
145
+ ctx.ui.notify("Cursor CLI (OAuth) account added.", "info");
146
+ }
147
+ catch (error) {
148
+ const message = error instanceof Error ? error.message : String(error);
149
+ if (message !== "Login cancelled") {
150
+ ctx.ui.notify(`Failed to add Cursor CLI (OAuth) account: ${message}`, "error");
151
+ }
152
+ }
153
+ }
154
+ async function removeNamedAccount(ctx, name) {
155
+ if (!name) {
156
+ ctx.ui.notify("Usage: /cursor-account remove <name>", "error");
157
+ return;
158
+ }
159
+ let removed = false;
160
+ try {
161
+ await ctx.modelRegistry.authStorage.modify(CURSOR_CLI_OAUTH_PROVIDER_ID, async (current) => {
162
+ const credential = asCursorCredential(current);
163
+ if (!listAccounts(credential).some((account) => account.name === name))
164
+ return current;
165
+ removed = true;
166
+ return removeAccount(credential, name);
167
+ });
168
+ }
169
+ catch (error) {
170
+ ctx.ui.notify(error instanceof Error ? error.message : String(error), "error");
171
+ return;
172
+ }
173
+ if (!removed) {
174
+ ctx.ui.notify(`Cursor CLI (OAuth) account '${name}' does not exist.`, "error");
175
+ return;
176
+ }
177
+ emitProviderAccountsChanged(CURSOR_CLI_OAUTH_PROVIDER_ID);
178
+ ctx.ui.notify(`Removed Cursor CLI (OAuth) account: ${name}.`, "info");
179
+ }
180
+ async function pinNamedAccount(ctx, name) {
181
+ try {
182
+ await ctx.modelRegistry.authStorage.modify(CURSOR_CLI_OAUTH_PROVIDER_ID, async (current) => {
183
+ const credential = asCursorCredential(current);
184
+ if (!listAccounts(credential).some((account) => account.name === name)) {
185
+ throw new Error(`Cursor CLI (OAuth) account '${name}' does not exist.`);
186
+ }
187
+ return pinAccount(credential, name);
188
+ });
189
+ }
190
+ catch (error) {
191
+ ctx.ui.notify(error instanceof Error ? error.message : String(error), "error");
192
+ return;
193
+ }
194
+ emitProviderAccountsChanged(CURSOR_CLI_OAUTH_PROVIDER_ID);
195
+ ctx.ui.notify(`Pinned Cursor CLI (OAuth) account: ${name}.`, "info");
196
+ }
197
+ async function unpinAccount(ctx) {
198
+ let hadPin = false;
199
+ try {
200
+ await ctx.modelRegistry.authStorage.modify(CURSOR_CLI_OAUTH_PROVIDER_ID, async (current) => {
201
+ const credential = asCursorCredential(current);
202
+ if (credential.pinned === undefined)
203
+ return current;
204
+ hadPin = true;
205
+ const { pinned: _pinned, ...unpinned } = credential;
206
+ return unpinned;
207
+ });
208
+ }
209
+ catch (error) {
210
+ ctx.ui.notify(error instanceof Error ? error.message : String(error), "error");
211
+ return;
212
+ }
213
+ if (!hadPin) {
214
+ ctx.ui.notify("No stored Cursor CLI (OAuth) account pin is set.", "info");
215
+ return;
216
+ }
217
+ emitProviderAccountsChanged(CURSOR_CLI_OAUTH_PROVIDER_ID);
218
+ ctx.ui.notify("Unpinned Cursor CLI (OAuth) account.", "info");
219
+ }
220
+ async function importAccount(ctx, deps) {
221
+ const importCredential = deps.importCredential ?? importLocalCursorCredential;
222
+ const importDeps = { ...deps.importDeps };
223
+ if (importDeps.onPrompt === undefined && ctx.hasUI) {
224
+ importDeps.onPrompt = async (prompt) => {
225
+ const answer = await ctx.ui.input(prompt.message);
226
+ if (answer === undefined)
227
+ throw new Error("Import cancelled");
228
+ return answer;
229
+ };
230
+ }
231
+ let importedName;
232
+ try {
233
+ await ctx.modelRegistry.authStorage.modify(CURSOR_CLI_OAUTH_PROVIDER_ID, async (current) => {
234
+ const before = asCursorCredential(current);
235
+ const updated = await importCredential(before, importDeps);
236
+ const existing = new Set(listAccounts(before).map((account) => account.name));
237
+ importedName = listAccounts(updated).find((account) => !existing.has(account.name))?.name;
238
+ return updated;
239
+ });
240
+ }
241
+ catch (error) {
242
+ ctx.ui.notify(`Failed to import local Cursor credential: ${error instanceof Error ? error.message : String(error)}`, "error");
243
+ return;
244
+ }
245
+ emitProviderAccountsChanged(CURSOR_CLI_OAUTH_PROVIDER_ID);
246
+ ctx.ui.notify(`Imported local Cursor credential as '${importedName ?? "a new account"}' (copied into this provider's store).`, "info");
247
+ }
248
+ async function acknowledgeNoApproval(ctx, deps, generation) {
249
+ if (!ctx.hasUI) {
250
+ ctx.ui.notify("/cursor-account acknowledge requires an interactive UI.", "error");
251
+ return;
252
+ }
253
+ const persist = deps.persistAcknowledgement ?? persistCursorCliNoApprovalAcknowledgement;
254
+ const acknowledgedAt = await confirmCursorCliNoApprovalAcknowledgement(async (ask) => (await ctx.ui.input(ask.message)) ?? "", () => new Date((deps.now ?? Date.now)()));
255
+ if (acknowledgedAt === undefined) {
256
+ generation.runFencedSync(ctx, () => ctx.ui.notify("No acknowledgement written: unattended Cursor CLI execution stays off until you acknowledge.", "info"));
257
+ return;
258
+ }
259
+ persist(ctx.cwd, acknowledgedAt);
260
+ generation.runFencedSync(ctx, () => ctx.ui.notify(`Acknowledged unattended Cursor CLI tool execution at ${acknowledgedAt}.`, "info"));
261
+ }
262
+ async function showStatus(ctx, deps, bound) {
263
+ // Context reads happen before any await; the render continuation is fenced
264
+ // so a reload during the version probe can never touch a retired context.
265
+ const sessionId = ctx.sessionManager.getSessionId();
266
+ const report = await collectCursorCliStatus({
267
+ sessionId,
268
+ settings: bound.loadSettings(ctx.cwd),
269
+ readCredential: () => ctx.modelRegistry.authStorage.get(CURSOR_CLI_OAUTH_PROVIDER_ID),
270
+ readNativeCredential: deps.readNativeCredential ?? (() => ctx.modelRegistry.authStorage.get(NATIVE_CURSOR_PROVIDER_ID)),
271
+ router: deps.router ?? cursorCliSessionRouter,
272
+ resolveExecutable: deps.resolveExecutable,
273
+ probeVersion: deps.probeVersion,
274
+ now: bound.now,
275
+ });
276
+ bound.generation.runFencedSync(ctx, () => ctx.ui.notify(renderCursorCliStatus(report), "info"));
277
+ }
278
+ //# sourceMappingURL=account-command.js.map