@code-yeongyu/senpi 2026.8.16 → 2026.8.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (628) hide show
  1. package/CHANGELOG.md +74 -0
  2. package/dist/bun/cli.js +1 -0
  3. package/dist/bun/cli.js.map +1 -1
  4. package/dist/bun/register-cursor-agent.d.ts +2 -0
  5. package/dist/bun/register-cursor-agent.d.ts.map +1 -0
  6. package/dist/bun/register-cursor-agent.js +4 -0
  7. package/dist/bun/register-cursor-agent.js.map +1 -0
  8. package/dist/core/agent-session-services.js +2 -2
  9. package/dist/core/agent-session-services.js.map +1 -1
  10. package/dist/core/agent-session.d.ts +48 -5
  11. package/dist/core/agent-session.d.ts.map +1 -1
  12. package/dist/core/agent-session.js +239 -61
  13. package/dist/core/agent-session.js.map +1 -1
  14. package/dist/core/cursor-exec-bridge-session.d.ts +11 -0
  15. package/dist/core/cursor-exec-bridge-session.d.ts.map +1 -0
  16. package/dist/core/cursor-exec-bridge-session.js +17 -0
  17. package/dist/core/cursor-exec-bridge-session.js.map +1 -0
  18. package/dist/core/cursor-exec-bridge.d.ts +52 -0
  19. package/dist/core/cursor-exec-bridge.d.ts.map +1 -0
  20. package/dist/core/cursor-exec-bridge.js +196 -0
  21. package/dist/core/cursor-exec-bridge.js.map +1 -0
  22. package/dist/core/extensions/builtin/cursor-cli-oauth/account-command.d.ts +31 -0
  23. package/dist/core/extensions/builtin/cursor-cli-oauth/account-command.d.ts.map +1 -0
  24. package/dist/core/extensions/builtin/cursor-cli-oauth/account-command.js +298 -0
  25. package/dist/core/extensions/builtin/cursor-cli-oauth/account-command.js.map +1 -0
  26. package/dist/core/extensions/builtin/cursor-cli-oauth/accounts.d.ts +38 -0
  27. package/dist/core/extensions/builtin/cursor-cli-oauth/accounts.d.ts.map +1 -0
  28. package/dist/core/extensions/builtin/cursor-cli-oauth/accounts.js +75 -0
  29. package/dist/core/extensions/builtin/cursor-cli-oauth/accounts.js.map +1 -0
  30. package/dist/core/extensions/builtin/cursor-cli-oauth/affinity.d.ts +24 -0
  31. package/dist/core/extensions/builtin/cursor-cli-oauth/affinity.d.ts.map +1 -0
  32. package/dist/core/extensions/builtin/cursor-cli-oauth/affinity.js +64 -0
  33. package/dist/core/extensions/builtin/cursor-cli-oauth/affinity.js.map +1 -0
  34. package/dist/core/extensions/builtin/cursor-cli-oauth/diagnostics.d.ts +139 -0
  35. package/dist/core/extensions/builtin/cursor-cli-oauth/diagnostics.d.ts.map +1 -0
  36. package/dist/core/extensions/builtin/cursor-cli-oauth/diagnostics.js +362 -0
  37. package/dist/core/extensions/builtin/cursor-cli-oauth/diagnostics.js.map +1 -0
  38. package/dist/core/extensions/builtin/cursor-cli-oauth/errors.d.ts +19 -0
  39. package/dist/core/extensions/builtin/cursor-cli-oauth/errors.d.ts.map +1 -0
  40. package/dist/core/extensions/builtin/cursor-cli-oauth/errors.js +122 -0
  41. package/dist/core/extensions/builtin/cursor-cli-oauth/errors.js.map +1 -0
  42. package/dist/core/extensions/builtin/cursor-cli-oauth/executable.d.ts +30 -0
  43. package/dist/core/extensions/builtin/cursor-cli-oauth/executable.d.ts.map +1 -0
  44. package/dist/core/extensions/builtin/cursor-cli-oauth/executable.js +117 -0
  45. package/dist/core/extensions/builtin/cursor-cli-oauth/executable.js.map +1 -0
  46. package/dist/core/extensions/builtin/cursor-cli-oauth/failover.d.ts +39 -0
  47. package/dist/core/extensions/builtin/cursor-cli-oauth/failover.d.ts.map +1 -0
  48. package/dist/core/extensions/builtin/cursor-cli-oauth/failover.js +155 -0
  49. package/dist/core/extensions/builtin/cursor-cli-oauth/failover.js.map +1 -0
  50. package/dist/core/extensions/builtin/cursor-cli-oauth/guardrails.d.ts +89 -0
  51. package/dist/core/extensions/builtin/cursor-cli-oauth/guardrails.d.ts.map +1 -0
  52. package/dist/core/extensions/builtin/cursor-cli-oauth/guardrails.js +147 -0
  53. package/dist/core/extensions/builtin/cursor-cli-oauth/guardrails.js.map +1 -0
  54. package/dist/core/extensions/builtin/cursor-cli-oauth/home-store.d.ts +20 -0
  55. package/dist/core/extensions/builtin/cursor-cli-oauth/home-store.d.ts.map +1 -0
  56. package/dist/core/extensions/builtin/cursor-cli-oauth/home-store.js +99 -0
  57. package/dist/core/extensions/builtin/cursor-cli-oauth/home-store.js.map +1 -0
  58. package/dist/core/extensions/builtin/cursor-cli-oauth/index.d.ts +25 -0
  59. package/dist/core/extensions/builtin/cursor-cli-oauth/index.d.ts.map +1 -0
  60. package/dist/core/extensions/builtin/cursor-cli-oauth/index.js +69 -0
  61. package/dist/core/extensions/builtin/cursor-cli-oauth/index.js.map +1 -0
  62. package/dist/core/extensions/builtin/cursor-cli-oauth/models.d.ts +27 -0
  63. package/dist/core/extensions/builtin/cursor-cli-oauth/models.d.ts.map +1 -0
  64. package/dist/core/extensions/builtin/cursor-cli-oauth/models.js +242 -0
  65. package/dist/core/extensions/builtin/cursor-cli-oauth/models.js.map +1 -0
  66. package/dist/core/extensions/builtin/cursor-cli-oauth/oauth-login.d.ts +77 -0
  67. package/dist/core/extensions/builtin/cursor-cli-oauth/oauth-login.d.ts.map +1 -0
  68. package/dist/core/extensions/builtin/cursor-cli-oauth/oauth-login.js +361 -0
  69. package/dist/core/extensions/builtin/cursor-cli-oauth/oauth-login.js.map +1 -0
  70. package/dist/core/extensions/builtin/cursor-cli-oauth/session-router.d.ts +94 -0
  71. package/dist/core/extensions/builtin/cursor-cli-oauth/session-router.d.ts.map +1 -0
  72. package/dist/core/extensions/builtin/cursor-cli-oauth/session-router.js +248 -0
  73. package/dist/core/extensions/builtin/cursor-cli-oauth/session-router.js.map +1 -0
  74. package/dist/core/extensions/builtin/cursor-cli-oauth/settings.d.ts +37 -0
  75. package/dist/core/extensions/builtin/cursor-cli-oauth/settings.d.ts.map +1 -0
  76. package/dist/core/extensions/builtin/cursor-cli-oauth/settings.js +196 -0
  77. package/dist/core/extensions/builtin/cursor-cli-oauth/settings.js.map +1 -0
  78. package/dist/core/extensions/builtin/cursor-cli-oauth/spawn-args.d.ts +11 -0
  79. package/dist/core/extensions/builtin/cursor-cli-oauth/spawn-args.d.ts.map +1 -0
  80. package/dist/core/extensions/builtin/cursor-cli-oauth/spawn-args.js +17 -0
  81. package/dist/core/extensions/builtin/cursor-cli-oauth/spawn-args.js.map +1 -0
  82. package/dist/core/extensions/builtin/cursor-cli-oauth/stream-parser.d.ts +104 -0
  83. package/dist/core/extensions/builtin/cursor-cli-oauth/stream-parser.d.ts.map +1 -0
  84. package/dist/core/extensions/builtin/cursor-cli-oauth/stream-parser.js +301 -0
  85. package/dist/core/extensions/builtin/cursor-cli-oauth/stream-parser.js.map +1 -0
  86. package/dist/core/extensions/builtin/cursor-cli-oauth/stream.d.ts +26 -0
  87. package/dist/core/extensions/builtin/cursor-cli-oauth/stream.d.ts.map +1 -0
  88. package/dist/core/extensions/builtin/cursor-cli-oauth/stream.js +587 -0
  89. package/dist/core/extensions/builtin/cursor-cli-oauth/stream.js.map +1 -0
  90. package/dist/core/extensions/builtin/cursor-cli-oauth/transport.d.ts +43 -0
  91. package/dist/core/extensions/builtin/cursor-cli-oauth/transport.d.ts.map +1 -0
  92. package/dist/core/extensions/builtin/cursor-cli-oauth/transport.js +196 -0
  93. package/dist/core/extensions/builtin/cursor-cli-oauth/transport.js.map +1 -0
  94. package/dist/core/extensions/builtin/goal/channel-state-subscriptions.d.ts +9 -0
  95. package/dist/core/extensions/builtin/goal/channel-state-subscriptions.d.ts.map +1 -0
  96. package/dist/core/extensions/builtin/goal/channel-state-subscriptions.js +18 -0
  97. package/dist/core/extensions/builtin/goal/channel-state-subscriptions.js.map +1 -0
  98. package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts.map +1 -1
  99. package/dist/core/extensions/builtin/goal/monitor-continuation.js +10 -9
  100. package/dist/core/extensions/builtin/goal/monitor-continuation.js.map +1 -1
  101. package/dist/core/extensions/builtin/index.d.ts.map +1 -1
  102. package/dist/core/extensions/builtin/index.js +5 -2
  103. package/dist/core/extensions/builtin/index.js.map +1 -1
  104. package/dist/core/extensions/builtin/loop-guard/detectors.d.ts.map +1 -1
  105. package/dist/core/extensions/builtin/loop-guard/detectors.js +21 -3
  106. package/dist/core/extensions/builtin/loop-guard/detectors.js.map +1 -1
  107. package/dist/core/extensions/builtin/loop-guard/escalation.d.ts +24 -0
  108. package/dist/core/extensions/builtin/loop-guard/escalation.d.ts.map +1 -0
  109. package/dist/core/extensions/builtin/loop-guard/escalation.js +77 -0
  110. package/dist/core/extensions/builtin/loop-guard/escalation.js.map +1 -0
  111. package/dist/core/extensions/builtin/loop-guard/index.d.ts.map +1 -1
  112. package/dist/core/extensions/builtin/loop-guard/index.js +98 -3
  113. package/dist/core/extensions/builtin/loop-guard/index.js.map +1 -1
  114. package/dist/core/extensions/builtin/loop-guard/notice.d.ts +9 -0
  115. package/dist/core/extensions/builtin/loop-guard/notice.d.ts.map +1 -1
  116. package/dist/core/extensions/builtin/loop-guard/notice.js +17 -0
  117. package/dist/core/extensions/builtin/loop-guard/notice.js.map +1 -1
  118. package/dist/core/extensions/builtin/loop-guard/policy.d.ts +4 -0
  119. package/dist/core/extensions/builtin/loop-guard/policy.d.ts.map +1 -1
  120. package/dist/core/extensions/builtin/loop-guard/policy.js +4 -0
  121. package/dist/core/extensions/builtin/loop-guard/policy.js.map +1 -1
  122. package/dist/core/extensions/builtin/loop-guard/renderer.d.ts +2 -0
  123. package/dist/core/extensions/builtin/loop-guard/renderer.d.ts.map +1 -1
  124. package/dist/core/extensions/builtin/loop-guard/renderer.js +11 -0
  125. package/dist/core/extensions/builtin/loop-guard/renderer.js.map +1 -1
  126. package/dist/core/extensions/builtin/loop-guard/tracker.d.ts +1 -1
  127. package/dist/core/extensions/builtin/loop-guard/tracker.d.ts.map +1 -1
  128. package/dist/core/extensions/builtin/loop-guard/tracker.js +3 -1
  129. package/dist/core/extensions/builtin/loop-guard/tracker.js.map +1 -1
  130. package/dist/core/extensions/builtin/monitor-state-event.d.ts +6 -0
  131. package/dist/core/extensions/builtin/monitor-state-event.d.ts.map +1 -1
  132. package/dist/core/extensions/builtin/monitor-state-event.js +10 -0
  133. package/dist/core/extensions/builtin/monitor-state-event.js.map +1 -1
  134. package/dist/core/model-resolver.js +1 -1
  135. package/dist/core/model-resolver.js.map +1 -1
  136. package/dist/core/model-runtime.d.ts +7 -2
  137. package/dist/core/model-runtime.d.ts.map +1 -1
  138. package/dist/core/model-runtime.js +14 -2
  139. package/dist/core/model-runtime.js.map +1 -1
  140. package/dist/core/prompt-templates.d.ts +5 -0
  141. package/dist/core/prompt-templates.d.ts.map +1 -1
  142. package/dist/core/prompt-templates.js +8 -9
  143. package/dist/core/prompt-templates.js.map +1 -1
  144. package/dist/core/provider-display-names.d.ts.map +1 -1
  145. package/dist/core/provider-display-names.js +1 -0
  146. package/dist/core/provider-display-names.js.map +1 -1
  147. package/dist/core/sdk.d.ts.map +1 -1
  148. package/dist/core/sdk.js +6 -0
  149. package/dist/core/sdk.js.map +1 -1
  150. package/dist/modes/interactive/editor-paste-transfer.d.ts +10 -0
  151. package/dist/modes/interactive/editor-paste-transfer.d.ts.map +1 -1
  152. package/dist/modes/interactive/editor-paste-transfer.js +16 -0
  153. package/dist/modes/interactive/editor-paste-transfer.js.map +1 -1
  154. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  155. package/dist/modes/interactive/interactive-mode.js +13 -7
  156. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  157. package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
  158. package/dist/modes/rpc/connection-handler.js +32 -27
  159. package/dist/modes/rpc/connection-handler.js.map +1 -1
  160. package/dist/modes/rpc/jsonl.d.ts +6 -1
  161. package/dist/modes/rpc/jsonl.d.ts.map +1 -1
  162. package/dist/modes/rpc/jsonl.js +47 -14
  163. package/dist/modes/rpc/jsonl.js.map +1 -1
  164. package/dist/modes/rpc/multi-session-host.d.ts.map +1 -1
  165. package/dist/modes/rpc/multi-session-host.js +26 -4
  166. package/dist/modes/rpc/multi-session-host.js.map +1 -1
  167. package/dist/modes/rpc/rpc-command-invocation.d.ts +5 -0
  168. package/dist/modes/rpc/rpc-command-invocation.d.ts.map +1 -0
  169. package/dist/modes/rpc/rpc-command-invocation.js +2 -0
  170. package/dist/modes/rpc/rpc-command-invocation.js.map +1 -0
  171. package/dist/modes/rpc/rpc-command-surface.d.ts +49 -0
  172. package/dist/modes/rpc/rpc-command-surface.d.ts.map +1 -0
  173. package/dist/modes/rpc/rpc-command-surface.js +40 -0
  174. package/dist/modes/rpc/rpc-command-surface.js.map +1 -0
  175. package/dist/modes/rpc/rpc-input-validation.d.ts +4 -0
  176. package/dist/modes/rpc/rpc-input-validation.d.ts.map +1 -0
  177. package/dist/modes/rpc/rpc-input-validation.js +20 -0
  178. package/dist/modes/rpc/rpc-input-validation.js.map +1 -0
  179. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  180. package/dist/modes/rpc/rpc-mode.js +12 -1
  181. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  182. package/dist/modes/rpc/rpc-types.d.ts +12 -12
  183. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  184. package/dist/modes/rpc/rpc-types.js.map +1 -1
  185. package/docs/providers.md +52 -1
  186. package/docs/rpc.md +78 -6
  187. package/docs/skills.md +14 -3
  188. package/node_modules/@bufbuild/protobuf/README.md +44 -0
  189. package/node_modules/@bufbuild/protobuf/dist/commonjs/clone.d.ts +6 -0
  190. package/node_modules/@bufbuild/protobuf/dist/commonjs/clone.js +66 -0
  191. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/boot.d.ts +1 -0
  192. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/boot.js +18 -0
  193. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/enum.d.ts +10 -0
  194. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/enum.js +31 -0
  195. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/extension.d.ts +9 -0
  196. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/extension.js +28 -0
  197. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/file.d.ts +1 -0
  198. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/file.js +18 -0
  199. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/index.d.ts +10 -0
  200. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/index.js +39 -0
  201. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/message.d.ts +10 -0
  202. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/message.js +24 -0
  203. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/service.d.ts +8 -0
  204. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/service.js +27 -0
  205. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/symbols.d.ts +140 -0
  206. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/symbols.js +43 -0
  207. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/types.d.ts +79 -0
  208. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/types.js +15 -0
  209. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/boot.d.ts +63 -0
  210. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/boot.js +105 -0
  211. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/embed.d.ts +43 -0
  212. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/embed.js +244 -0
  213. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/enum.d.ts +29 -0
  214. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/enum.js +58 -0
  215. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/extension.d.ts +9 -0
  216. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/extension.js +28 -0
  217. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/file.d.ts +7 -0
  218. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/file.js +35 -0
  219. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/index.d.ts +10 -0
  220. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/index.js +39 -0
  221. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/message.d.ts +15 -0
  222. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/message.js +24 -0
  223. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/restore-json-names.d.ts +5 -0
  224. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/restore-json-names.js +29 -0
  225. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/scalar.d.ts +9 -0
  226. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/scalar.js +67 -0
  227. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/service.d.ts +8 -0
  228. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/service.js +27 -0
  229. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/symbols.d.ts +145 -0
  230. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/symbols.js +74 -0
  231. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/types.d.ts +85 -0
  232. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/types.js +15 -0
  233. package/node_modules/@bufbuild/protobuf/dist/commonjs/create.d.ts +9 -0
  234. package/node_modules/@bufbuild/protobuf/dist/commonjs/create.js +259 -0
  235. package/node_modules/@bufbuild/protobuf/dist/commonjs/descriptors.d.ts +634 -0
  236. package/node_modules/@bufbuild/protobuf/dist/commonjs/descriptors.js +53 -0
  237. package/node_modules/@bufbuild/protobuf/dist/commonjs/equals.d.ts +46 -0
  238. package/node_modules/@bufbuild/protobuf/dist/commonjs/equals.js +209 -0
  239. package/node_modules/@bufbuild/protobuf/dist/commonjs/extensions.d.ts +60 -0
  240. package/node_modules/@bufbuild/protobuf/dist/commonjs/extensions.js +168 -0
  241. package/node_modules/@bufbuild/protobuf/dist/commonjs/fields.d.ts +23 -0
  242. package/node_modules/@bufbuild/protobuf/dist/commonjs/fields.js +45 -0
  243. package/node_modules/@bufbuild/protobuf/dist/commonjs/from-binary.d.ts +48 -0
  244. package/node_modules/@bufbuild/protobuf/dist/commonjs/from-binary.js +247 -0
  245. package/node_modules/@bufbuild/protobuf/dist/commonjs/from-json.d.ts +73 -0
  246. package/node_modules/@bufbuild/protobuf/dist/commonjs/from-json.js +739 -0
  247. package/node_modules/@bufbuild/protobuf/dist/commonjs/index.d.ts +19 -0
  248. package/node_modules/@bufbuild/protobuf/dist/commonjs/index.js +55 -0
  249. package/node_modules/@bufbuild/protobuf/dist/commonjs/is-message.d.ts +7 -0
  250. package/node_modules/@bufbuild/protobuf/dist/commonjs/is-message.js +33 -0
  251. package/node_modules/@bufbuild/protobuf/dist/commonjs/json-value.d.ts +16 -0
  252. package/node_modules/@bufbuild/protobuf/dist/commonjs/json-value.js +15 -0
  253. package/node_modules/@bufbuild/protobuf/dist/commonjs/merge.d.ts +13 -0
  254. package/node_modules/@bufbuild/protobuf/dist/commonjs/merge.js +70 -0
  255. package/node_modules/@bufbuild/protobuf/dist/commonjs/package.json +4 -0
  256. package/node_modules/@bufbuild/protobuf/dist/commonjs/proto-int64.d.ts +98 -0
  257. package/node_modules/@bufbuild/protobuf/dist/commonjs/proto-int64.js +131 -0
  258. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/error.d.ts +9 -0
  259. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/error.js +36 -0
  260. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/guard.d.ts +20 -0
  261. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/guard.js +78 -0
  262. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/index.d.ts +8 -0
  263. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/index.js +41 -0
  264. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/names.d.ts +30 -0
  265. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/names.js +115 -0
  266. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/nested-types.d.ts +35 -0
  267. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/nested-types.js +110 -0
  268. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/path.d.ts +107 -0
  269. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/path.js +376 -0
  270. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect-check.d.ts +19 -0
  271. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect-check.js +268 -0
  272. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect-types.d.ts +217 -0
  273. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect-types.js +16 -0
  274. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect.d.ts +43 -0
  275. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect.js +546 -0
  276. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/scalar.d.ts +43 -0
  277. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/scalar.js +129 -0
  278. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/unsafe.d.ts +39 -0
  279. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/unsafe.js +149 -0
  280. package/node_modules/@bufbuild/protobuf/dist/commonjs/registry.d.ts +98 -0
  281. package/node_modules/@bufbuild/protobuf/dist/commonjs/registry.js +945 -0
  282. package/node_modules/@bufbuild/protobuf/dist/commonjs/to-binary.d.ts +24 -0
  283. package/node_modules/@bufbuild/protobuf/dist/commonjs/to-binary.js +199 -0
  284. package/node_modules/@bufbuild/protobuf/dist/commonjs/to-json.d.ts +67 -0
  285. package/node_modules/@bufbuild/protobuf/dist/commonjs/to-json.js +391 -0
  286. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/from-text.d.ts +35 -0
  287. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/from-text.js +684 -0
  288. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/index.d.ts +4 -0
  289. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/index.js +21 -0
  290. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/is-group-like.d.ts +19 -0
  291. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/is-group-like.js +47 -0
  292. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/reader.d.ts +91 -0
  293. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/reader.js +481 -0
  294. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/to-text.d.ts +34 -0
  295. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/to-text.js +358 -0
  296. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/writer.d.ts +76 -0
  297. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/writer.js +220 -0
  298. package/node_modules/@bufbuild/protobuf/dist/commonjs/types.d.ts +135 -0
  299. package/node_modules/@bufbuild/protobuf/dist/commonjs/types.js +15 -0
  300. package/node_modules/@bufbuild/protobuf/dist/commonjs/unknown-enum.d.ts +10 -0
  301. package/node_modules/@bufbuild/protobuf/dist/commonjs/unknown-enum.js +26 -0
  302. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/base64-encoding.d.ts +23 -0
  303. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/base64-encoding.js +156 -0
  304. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/binary-encoding.d.ts +268 -0
  305. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/binary-encoding.js +530 -0
  306. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/index.d.ts +5 -0
  307. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/index.js +34 -0
  308. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/size-delimited.d.ts +69 -0
  309. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/size-delimited.js +191 -0
  310. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/text-encoding.d.ts +28 -0
  311. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/text-encoding.js +61 -0
  312. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/text-format.d.ts +13 -0
  313. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/text-format.js +199 -0
  314. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/varint.d.ts +70 -0
  315. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/varint.js +322 -0
  316. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/any.d.ts +38 -0
  317. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/any.js +75 -0
  318. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/duration.d.ts +9 -0
  319. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/duration.js +39 -0
  320. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/any_pb.d.ts +238 -0
  321. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/any_pb.js +27 -0
  322. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/api_pb.d.ts +537 -0
  323. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/api_pb.js +39 -0
  324. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +490 -0
  325. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/compiler/plugin_pb.js +68 -0
  326. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/cpp_features_pb.d.ts +91 -0
  327. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/cpp_features_pb.js +60 -0
  328. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/descriptor_pb.d.ts +4143 -0
  329. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/descriptor_pb.js +892 -0
  330. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/duration_pb.d.ts +161 -0
  331. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/duration_pb.js +27 -0
  332. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/empty_pb.d.ts +39 -0
  333. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/empty_pb.js +27 -0
  334. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/field_mask_pb.d.ts +424 -0
  335. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/field_mask_pb.js +27 -0
  336. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/go_features_pb.d.ts +189 -0
  337. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/go_features_pb.js +126 -0
  338. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/java_features_pb.d.ts +194 -0
  339. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/java_features_pb.js +106 -0
  340. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/source_context_pb.d.ts +43 -0
  341. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/source_context_pb.js +27 -0
  342. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/struct_pb.d.ts +195 -0
  343. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/struct_pb.js +59 -0
  344. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/timestamp_pb.d.ts +222 -0
  345. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/timestamp_pb.js +27 -0
  346. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/type_pb.d.ts +722 -0
  347. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/type_pb.js +242 -0
  348. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/wrappers_pb.d.ts +330 -0
  349. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/wrappers_pb.js +67 -0
  350. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/index.d.ts +19 -0
  351. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/index.js +48 -0
  352. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/timestamp.d.ts +21 -0
  353. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/timestamp.js +57 -0
  354. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/wrappers.d.ts +25 -0
  355. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/wrappers.js +66 -0
  356. package/node_modules/@bufbuild/protobuf/dist/esm/clone.d.ts +6 -0
  357. package/node_modules/@bufbuild/protobuf/dist/esm/clone.js +63 -0
  358. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/boot.d.ts +1 -0
  359. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/boot.js +14 -0
  360. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/enum.d.ts +10 -0
  361. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/enum.js +26 -0
  362. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/extension.d.ts +9 -0
  363. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/extension.js +25 -0
  364. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/file.d.ts +1 -0
  365. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/file.js +14 -0
  366. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/index.d.ts +10 -0
  367. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/index.js +23 -0
  368. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/message.d.ts +10 -0
  369. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/message.js +21 -0
  370. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/service.d.ts +8 -0
  371. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/service.js +24 -0
  372. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/symbols.d.ts +140 -0
  373. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/symbols.js +40 -0
  374. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/types.d.ts +79 -0
  375. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/types.js +14 -0
  376. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/boot.d.ts +63 -0
  377. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/boot.js +101 -0
  378. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/embed.d.ts +43 -0
  379. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/embed.js +239 -0
  380. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/enum.d.ts +29 -0
  381. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/enum.js +53 -0
  382. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/extension.d.ts +9 -0
  383. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/extension.js +25 -0
  384. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/file.d.ts +7 -0
  385. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/file.js +32 -0
  386. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/index.d.ts +10 -0
  387. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/index.js +23 -0
  388. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/message.d.ts +15 -0
  389. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/message.js +21 -0
  390. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/restore-json-names.d.ts +5 -0
  391. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/restore-json-names.js +26 -0
  392. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/scalar.d.ts +9 -0
  393. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/scalar.js +63 -0
  394. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/service.d.ts +8 -0
  395. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/service.js +24 -0
  396. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/symbols.d.ts +145 -0
  397. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/symbols.js +71 -0
  398. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/types.d.ts +85 -0
  399. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/types.js +14 -0
  400. package/node_modules/@bufbuild/protobuf/dist/esm/create.d.ts +9 -0
  401. package/node_modules/@bufbuild/protobuf/dist/esm/create.js +256 -0
  402. package/node_modules/@bufbuild/protobuf/dist/esm/descriptors.d.ts +634 -0
  403. package/node_modules/@bufbuild/protobuf/dist/esm/descriptors.js +50 -0
  404. package/node_modules/@bufbuild/protobuf/dist/esm/equals.d.ts +46 -0
  405. package/node_modules/@bufbuild/protobuf/dist/esm/equals.js +206 -0
  406. package/node_modules/@bufbuild/protobuf/dist/esm/extensions.d.ts +60 -0
  407. package/node_modules/@bufbuild/protobuf/dist/esm/extensions.js +159 -0
  408. package/node_modules/@bufbuild/protobuf/dist/esm/fields.d.ts +23 -0
  409. package/node_modules/@bufbuild/protobuf/dist/esm/fields.js +41 -0
  410. package/node_modules/@bufbuild/protobuf/dist/esm/from-binary.d.ts +48 -0
  411. package/node_modules/@bufbuild/protobuf/dist/esm/from-binary.js +241 -0
  412. package/node_modules/@bufbuild/protobuf/dist/esm/from-json.d.ts +73 -0
  413. package/node_modules/@bufbuild/protobuf/dist/esm/from-json.js +731 -0
  414. package/node_modules/@bufbuild/protobuf/dist/esm/index.d.ts +19 -0
  415. package/node_modules/@bufbuild/protobuf/dist/esm/index.js +29 -0
  416. package/node_modules/@bufbuild/protobuf/dist/esm/is-message.d.ts +7 -0
  417. package/node_modules/@bufbuild/protobuf/dist/esm/is-message.js +30 -0
  418. package/node_modules/@bufbuild/protobuf/dist/esm/json-value.d.ts +16 -0
  419. package/node_modules/@bufbuild/protobuf/dist/esm/json-value.js +14 -0
  420. package/node_modules/@bufbuild/protobuf/dist/esm/merge.d.ts +13 -0
  421. package/node_modules/@bufbuild/protobuf/dist/esm/merge.js +67 -0
  422. package/node_modules/@bufbuild/protobuf/dist/esm/package.json +4 -0
  423. package/node_modules/@bufbuild/protobuf/dist/esm/proto-int64.d.ts +98 -0
  424. package/node_modules/@bufbuild/protobuf/dist/esm/proto-int64.js +128 -0
  425. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/error.d.ts +9 -0
  426. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/error.js +31 -0
  427. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/guard.d.ts +20 -0
  428. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/guard.js +71 -0
  429. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/index.d.ts +8 -0
  430. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/index.js +21 -0
  431. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/names.d.ts +30 -0
  432. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/names.js +109 -0
  433. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/nested-types.d.ts +35 -0
  434. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/nested-types.js +105 -0
  435. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/path.d.ts +107 -0
  436. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/path.js +369 -0
  437. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-check.d.ts +19 -0
  438. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-check.js +262 -0
  439. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-types.d.ts +217 -0
  440. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-types.js +14 -0
  441. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect.d.ts +43 -0
  442. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect.js +541 -0
  443. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/scalar.d.ts +43 -0
  444. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/scalar.js +124 -0
  445. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/unsafe.d.ts +39 -0
  446. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/unsafe.js +140 -0
  447. package/node_modules/@bufbuild/protobuf/dist/esm/registry.d.ts +98 -0
  448. package/node_modules/@bufbuild/protobuf/dist/esm/registry.js +939 -0
  449. package/node_modules/@bufbuild/protobuf/dist/esm/to-binary.d.ts +24 -0
  450. package/node_modules/@bufbuild/protobuf/dist/esm/to-binary.js +195 -0
  451. package/node_modules/@bufbuild/protobuf/dist/esm/to-json.d.ts +67 -0
  452. package/node_modules/@bufbuild/protobuf/dist/esm/to-json.js +386 -0
  453. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/from-text.d.ts +35 -0
  454. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/from-text.js +680 -0
  455. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/index.d.ts +4 -0
  456. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/index.js +15 -0
  457. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/is-group-like.d.ts +19 -0
  458. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/is-group-like.js +44 -0
  459. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/reader.d.ts +91 -0
  460. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/reader.js +477 -0
  461. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/to-text.d.ts +34 -0
  462. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/to-text.js +355 -0
  463. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/writer.d.ts +76 -0
  464. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/writer.js +214 -0
  465. package/node_modules/@bufbuild/protobuf/dist/esm/types.d.ts +135 -0
  466. package/node_modules/@bufbuild/protobuf/dist/esm/types.js +14 -0
  467. package/node_modules/@bufbuild/protobuf/dist/esm/unknown-enum.d.ts +10 -0
  468. package/node_modules/@bufbuild/protobuf/dist/esm/unknown-enum.js +23 -0
  469. package/node_modules/@bufbuild/protobuf/dist/esm/wire/base64-encoding.d.ts +23 -0
  470. package/node_modules/@bufbuild/protobuf/dist/esm/wire/base64-encoding.js +152 -0
  471. package/node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.d.ts +268 -0
  472. package/node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.js +525 -0
  473. package/node_modules/@bufbuild/protobuf/dist/esm/wire/index.d.ts +5 -0
  474. package/node_modules/@bufbuild/protobuf/dist/esm/wire/index.js +18 -0
  475. package/node_modules/@bufbuild/protobuf/dist/esm/wire/size-delimited.d.ts +69 -0
  476. package/node_modules/@bufbuild/protobuf/dist/esm/wire/size-delimited.js +186 -0
  477. package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.d.ts +28 -0
  478. package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.js +57 -0
  479. package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-format.d.ts +13 -0
  480. package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-format.js +195 -0
  481. package/node_modules/@bufbuild/protobuf/dist/esm/wire/varint.d.ts +70 -0
  482. package/node_modules/@bufbuild/protobuf/dist/esm/wire/varint.js +313 -0
  483. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/any.d.ts +38 -0
  484. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/any.js +69 -0
  485. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/duration.d.ts +9 -0
  486. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/duration.js +35 -0
  487. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/any_pb.d.ts +238 -0
  488. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/any_pb.js +24 -0
  489. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/api_pb.d.ts +537 -0
  490. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/api_pb.js +36 -0
  491. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +490 -0
  492. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.js +65 -0
  493. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/cpp_features_pb.d.ts +91 -0
  494. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/cpp_features_pb.js +57 -0
  495. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/descriptor_pb.d.ts +4143 -0
  496. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js +888 -0
  497. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/duration_pb.d.ts +161 -0
  498. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/duration_pb.js +24 -0
  499. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/empty_pb.d.ts +39 -0
  500. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/empty_pb.js +24 -0
  501. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/field_mask_pb.d.ts +424 -0
  502. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/field_mask_pb.js +24 -0
  503. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/go_features_pb.d.ts +189 -0
  504. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/go_features_pb.js +123 -0
  505. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/java_features_pb.d.ts +194 -0
  506. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/java_features_pb.js +103 -0
  507. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/source_context_pb.d.ts +43 -0
  508. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/source_context_pb.js +24 -0
  509. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/struct_pb.d.ts +195 -0
  510. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/struct_pb.js +56 -0
  511. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/timestamp_pb.d.ts +222 -0
  512. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/timestamp_pb.js +24 -0
  513. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/type_pb.d.ts +722 -0
  514. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/type_pb.js +239 -0
  515. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/wrappers_pb.d.ts +330 -0
  516. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/wrappers_pb.js +64 -0
  517. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/index.d.ts +19 -0
  518. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/index.js +32 -0
  519. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/timestamp.d.ts +21 -0
  520. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/timestamp.js +50 -0
  521. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/wrappers.d.ts +25 -0
  522. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/wrappers.js +61 -0
  523. package/node_modules/@bufbuild/protobuf/package.json +147 -0
  524. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +26 -0
  525. package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
  526. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-runtime.ts +2 -0
  527. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/render.ts +43 -6
  528. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/types.ts +4 -0
  529. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  530. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +59 -17
  531. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  532. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts +14 -0
  533. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts.map +1 -1
  534. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js +14 -0
  535. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js.map +1 -1
  536. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +12 -1
  537. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
  538. package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
  539. package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
  540. package/node_modules/@earendil-works/pi-ai/README.md +3 -2
  541. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/deterministic-id.d.ts +17 -0
  542. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/deterministic-id.d.ts.map +1 -0
  543. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/deterministic-id.js +14 -0
  544. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/deterministic-id.js.map +1 -0
  545. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/exec-lifecycle.d.ts +13 -0
  546. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/exec-lifecycle.d.ts.map +1 -0
  547. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/exec-lifecycle.js +33 -0
  548. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/exec-lifecycle.js.map +1 -0
  549. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/exec-modern.d.ts +79 -0
  550. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/exec-modern.d.ts.map +1 -0
  551. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/exec-modern.js +360 -0
  552. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/exec-modern.js.map +1 -0
  553. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/gen/agent_pb.d.ts +16797 -0
  554. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/gen/agent_pb.d.ts.map +1 -0
  555. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/gen/agent_pb.js +3828 -0
  556. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/gen/agent_pb.js.map +1 -0
  557. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/pi-args.d.ts +55 -0
  558. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/pi-args.d.ts.map +1 -0
  559. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/pi-args.js +76 -0
  560. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/pi-args.js.map +1 -0
  561. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/types.d.ts +116 -0
  562. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/types.d.ts.map +1 -0
  563. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/types.js +16 -0
  564. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/types.js.map +1 -0
  565. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts +191 -0
  566. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts.map +1 -0
  567. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js +3316 -0
  568. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js.map +1 -0
  569. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.lazy.d.ts +29 -0
  570. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.lazy.d.ts.map +1 -0
  571. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.lazy.js +33 -0
  572. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.lazy.js.map +1 -0
  573. package/node_modules/@earendil-works/pi-ai/dist/compat.d.ts +1 -0
  574. package/node_modules/@earendil-works/pi-ai/dist/compat.d.ts.map +1 -1
  575. package/node_modules/@earendil-works/pi-ai/dist/compat.js +3 -0
  576. package/node_modules/@earendil-works/pi-ai/dist/compat.js.map +1 -1
  577. package/node_modules/@earendil-works/pi-ai/dist/cursor-agent-provider.d.ts +11 -0
  578. package/node_modules/@earendil-works/pi-ai/dist/cursor-agent-provider.d.ts.map +1 -0
  579. package/node_modules/@earendil-works/pi-ai/dist/cursor-agent-provider.js +11 -0
  580. package/node_modules/@earendil-works/pi-ai/dist/cursor-agent-provider.js.map +1 -0
  581. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +3 -0
  582. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
  583. package/node_modules/@earendil-works/pi-ai/dist/index.js +2 -0
  584. package/node_modules/@earendil-works/pi-ai/dist/index.js.map +1 -1
  585. package/node_modules/@earendil-works/pi-ai/dist/model.d.ts +6 -1
  586. package/node_modules/@earendil-works/pi-ai/dist/model.d.ts.map +1 -1
  587. package/node_modules/@earendil-works/pi-ai/dist/model.js.map +1 -1
  588. package/node_modules/@earendil-works/pi-ai/dist/providers/cursor.d.ts +6 -9
  589. package/node_modules/@earendil-works/pi-ai/dist/providers/cursor.d.ts.map +1 -1
  590. package/node_modules/@earendil-works/pi-ai/dist/providers/cursor.js +42 -9
  591. package/node_modules/@earendil-works/pi-ai/dist/providers/cursor.js.map +1 -1
  592. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  593. package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
  594. package/node_modules/@earendil-works/pi-ai/dist/providers/data/baseten.json +1 -1
  595. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cerebras.json +1 -1
  596. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +1 -1
  597. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-workers-ai.json +1 -1
  598. package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -1
  599. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai-codex.json +1 -1
  600. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  601. package/node_modules/@earendil-works/pi-ai/dist/providers/data/together.json +1 -1
  602. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  603. package/node_modules/@earendil-works/pi-ai/dist/providers/data/xai.json +1 -1
  604. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +3 -1
  605. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  606. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  607. package/node_modules/@earendil-works/pi-ai/dist/utils/block-symbols.d.ts +57 -0
  608. package/node_modules/@earendil-works/pi-ai/dist/utils/block-symbols.d.ts.map +1 -0
  609. package/node_modules/@earendil-works/pi-ai/dist/utils/block-symbols.js +57 -0
  610. package/node_modules/@earendil-works/pi-ai/dist/utils/block-symbols.js.map +1 -0
  611. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.d.ts +10 -0
  612. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.d.ts.map +1 -1
  613. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.js +22 -0
  614. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.js.map +1 -1
  615. package/node_modules/@earendil-works/pi-ai/package.json +3 -2
  616. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  617. package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
  618. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts.map +1 -1
  619. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js +21 -0
  620. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js.map +1 -1
  621. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +1 -1
  622. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
  623. package/node_modules/@earendil-works/pi-tui/dist/dollar-invocation-autocomplete.d.ts +9 -0
  624. package/node_modules/@earendil-works/pi-tui/dist/dollar-invocation-autocomplete.d.ts.map +1 -0
  625. package/node_modules/@earendil-works/pi-tui/dist/dollar-invocation-autocomplete.js +82 -0
  626. package/node_modules/@earendil-works/pi-tui/dist/dollar-invocation-autocomplete.js.map +1 -0
  627. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  628. package/package.json +11 -8
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardrails.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/guardrails.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { createCursorCliOauthSandboxModeValidator } from "./settings.js";
4
+ /**
5
+ * Guardrails for unattended Cursor CLI execution.
6
+ *
7
+ * The Cursor CLI runs its own tools the moment `--force` is on the argv, so
8
+ * that decision is never implicit: it requires the explicit
9
+ * `noApprovalAcknowledgedAt` acknowledgement, plan mode never forces, and a
10
+ * disabled force merely warns. Command denylists ride along through the
11
+ * per-account HOME's `cli-config.json`, strictly in the probe-proven shape
12
+ * (task 2: `permissions.deny` with exact full-command `Shell(...)` entries).
13
+ */
14
+ /** Sandbox modes the installed CLI accepts (task 2 probe: allowed choices are exactly these). */
15
+ export const CURSOR_CLI_OAUTH_SANDBOX_MODES = ["enabled", "disabled"];
16
+ export const CURSOR_CLI_OAUTH_NO_APPROVAL_EXPLANATION = "The Cursor CLI executes its own tools autonomously: with --force there is no senpi approval, no senpi sandboxing, and no tool-level audit for what it runs.";
17
+ export const CURSOR_CLI_OAUTH_ACKNOWLEDGEMENT_STEP = 'Set "cursorCliOauthProvider.noApprovalAcknowledgedAt" to the current ISO-8601 timestamp (for example "2026-08-17T12:00:00.000Z") in senpi settings to acknowledge this once.';
18
+ /** One warning per session when force is disabled in agent mode (contracts block, task 18). */
19
+ export const CURSOR_CLI_OAUTH_FORCE_DISABLED_WARNING = 'cursor-cli-oauth: forceExecution is disabled in agent mode, so the Cursor CLI will auto-reject every tool call; set executionMode to "plan" for planning turns that do not need execution.';
20
+ export function createCursorCliGuardrailSession() {
21
+ const warnings = [];
22
+ const emitted = new Set();
23
+ const warn = (code, message, key = code) => {
24
+ if (emitted.has(key))
25
+ return false;
26
+ emitted.add(key);
27
+ warnings.push({ kind: "warning", code, message });
28
+ return true;
29
+ };
30
+ const validateSandboxMode = createCursorCliOauthSandboxModeValidator(new Set(CURSOR_CLI_OAUTH_SANDBOX_MODES), (message) => {
31
+ warn("sandbox_mode_ignored", message, `sandbox_mode_ignored:${message}`);
32
+ });
33
+ return {
34
+ warnings,
35
+ warn,
36
+ validateSandboxMode,
37
+ };
38
+ }
39
+ /** Typed refusal for an unacknowledged force attempt; never confused with a warning. */
40
+ export class CursorCliExecutionRefusalError extends Error {
41
+ constructor(refusal) {
42
+ super(refusal.message);
43
+ this.code = "no_approval_acknowledgement_required";
44
+ this.name = "CursorCliExecutionRefusalError";
45
+ this.refusal = refusal;
46
+ }
47
+ }
48
+ /** Glob breadth is unproven (task 2 probed exact full commands only), so glob-bearing entries are dropped. */
49
+ const GLOB_METACHARACTERS = /[*?[]/u;
50
+ export function sanitizeCursorCliDenyCommands(entries, warn) {
51
+ const kept = [];
52
+ for (const entry of entries) {
53
+ const command = entry.trim();
54
+ if (command.length === 0) {
55
+ warn?.("Ignoring an empty Cursor CLI deny command entry (exact full commands only)");
56
+ continue;
57
+ }
58
+ if (GLOB_METACHARACTERS.test(command)) {
59
+ warn?.(`Ignoring glob-bearing Cursor CLI deny command (exact full commands only; glob support is unproven): ${command}`);
60
+ continue;
61
+ }
62
+ kept.push(command);
63
+ }
64
+ return kept;
65
+ }
66
+ /**
67
+ * Decide whether a turn may run unattended.
68
+ *
69
+ * - `--force` is emitted only in agent mode, only when force is requested, and
70
+ * only after `noApprovalAcknowledgedAt` is set; otherwise the decision is a
71
+ * typed refusal naming the acknowledgement step.
72
+ * - Plan mode never emits `--force` (the CLI only plans), so it needs no
73
+ * acknowledgement.
74
+ * - Force disabled in agent mode is allowed but warns once per session.
75
+ * - Unproven sandbox modes are ignored with one warning per distinct value.
76
+ */
77
+ export function resolveCursorCliExecutionPolicy(input, session, denyCommands = []) {
78
+ const planMode = input.executionMode === "plan";
79
+ const wantsForce = !planMode && input.forceExecution;
80
+ if (wantsForce && input.noApprovalAcknowledgedAt === undefined) {
81
+ const refusal = {
82
+ kind: "refusal",
83
+ code: "no_approval_acknowledgement_required",
84
+ message: `${CURSOR_CLI_OAUTH_NO_APPROVAL_EXPLANATION} ${CURSOR_CLI_OAUTH_ACKNOWLEDGEMENT_STEP}`,
85
+ acknowledgementStep: CURSOR_CLI_OAUTH_ACKNOWLEDGEMENT_STEP,
86
+ };
87
+ return { status: "refused", refusal };
88
+ }
89
+ if (!planMode && !input.forceExecution) {
90
+ session.warn("force_execution_disabled", CURSOR_CLI_OAUTH_FORCE_DISABLED_WARNING);
91
+ }
92
+ const sandboxMode = session.validateSandboxMode(input.sandboxMode);
93
+ const sanitizedDenyCommands = sanitizeCursorCliDenyCommands(denyCommands, (message) => {
94
+ session.warn("deny_command_rejected", message, `deny_command_rejected:${message}`);
95
+ });
96
+ return {
97
+ status: "allowed",
98
+ force: wantsForce,
99
+ executionMode: input.executionMode,
100
+ sandboxMode,
101
+ denyCommands: sanitizedDenyCommands,
102
+ warnings: [...session.warnings],
103
+ };
104
+ }
105
+ const CLI_CONFIG_RELATIVE_PATH = join(".cursor", "cli-config.json");
106
+ function isRecord(value) {
107
+ return typeof value === "object" && value !== null && !Array.isArray(value);
108
+ }
109
+ function shellDenyEntry(command) {
110
+ return `Shell(${command})`;
111
+ }
112
+ /**
113
+ * Pre-spawn hook: (re-)apply the deny list to the sandbox HOME's
114
+ * `cli-config.json`.
115
+ *
116
+ * The CLI rewrites this file during every invocation (task 2 observed its own
117
+ * keys appearing and `cli-config.json.bad` sidecars for malformed content), so
118
+ * this must run immediately before each spawn, composing with the home-store
119
+ * prepare pass that re-writes `auth.json` on the same cadence. Writes only the
120
+ * probe-proven shape (`permissions.deny` with exact `Shell(<full command>)`
121
+ * entries) and preserves every CLI-owned key already present. Writes nothing
122
+ * when no deny commands are configured.
123
+ */
124
+ export function applyCursorCliDenyConfig(home, denyCommands) {
125
+ if (denyCommands.length === 0)
126
+ return;
127
+ const configPath = join(home, CLI_CONFIG_RELATIVE_PATH);
128
+ let existing = {};
129
+ if (existsSync(configPath)) {
130
+ try {
131
+ const parsed = JSON.parse(readFileSync(configPath, "utf8"));
132
+ if (isRecord(parsed))
133
+ existing = parsed;
134
+ }
135
+ catch {
136
+ // The CLI quarantines unparseable config as cli-config.json.bad and
137
+ // proceeds with defaults; start from the proven minimal shape.
138
+ }
139
+ }
140
+ const permissions = isRecord(existing.permissions) ? { ...existing.permissions } : {};
141
+ const config = {
142
+ ...existing,
143
+ permissions: { ...permissions, deny: denyCommands.map(shellDenyEntry) },
144
+ };
145
+ writeFileSync(configPath, `${JSON.stringify(config, null, "\t")}\n`, "utf8");
146
+ }
147
+ //# sourceMappingURL=guardrails.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardrails.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/guardrails.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { type CursorCliOauthExecutionMode, createCursorCliOauthSandboxModeValidator } from \"./settings.ts\";\n\n/**\n * Guardrails for unattended Cursor CLI execution.\n *\n * The Cursor CLI runs its own tools the moment `--force` is on the argv, so\n * that decision is never implicit: it requires the explicit\n * `noApprovalAcknowledgedAt` acknowledgement, plan mode never forces, and a\n * disabled force merely warns. Command denylists ride along through the\n * per-account HOME's `cli-config.json`, strictly in the probe-proven shape\n * (task 2: `permissions.deny` with exact full-command `Shell(...)` entries).\n */\n\n/** Sandbox modes the installed CLI accepts (task 2 probe: allowed choices are exactly these). */\nexport const CURSOR_CLI_OAUTH_SANDBOX_MODES: readonly [\"enabled\", \"disabled\"] = [\"enabled\", \"disabled\"];\n\nexport const CURSOR_CLI_OAUTH_NO_APPROVAL_EXPLANATION =\n\t\"The Cursor CLI executes its own tools autonomously: with --force there is no senpi approval, no senpi sandboxing, and no tool-level audit for what it runs.\";\n\nexport const CURSOR_CLI_OAUTH_ACKNOWLEDGEMENT_STEP =\n\t'Set \"cursorCliOauthProvider.noApprovalAcknowledgedAt\" to the current ISO-8601 timestamp (for example \"2026-08-17T12:00:00.000Z\") in senpi settings to acknowledge this once.';\n\n/** One warning per session when force is disabled in agent mode (contracts block, task 18). */\nexport const CURSOR_CLI_OAUTH_FORCE_DISABLED_WARNING =\n\t'cursor-cli-oauth: forceExecution is disabled in agent mode, so the Cursor CLI will auto-reject every tool call; set executionMode to \"plan\" for planning turns that do not need execution.';\n\nexport type CursorCliGuardrailWarningCode =\n\t| \"force_execution_disabled\"\n\t| \"sandbox_mode_ignored\"\n\t| \"deny_command_rejected\";\n\nexport type CursorCliGuardrailWarning = {\n\treadonly kind: \"warning\";\n\treadonly code: CursorCliGuardrailWarningCode;\n\treadonly message: string;\n};\n\nexport type CursorCliExecutionRefusal = {\n\treadonly kind: \"refusal\";\n\treadonly code: \"no_approval_acknowledgement_required\";\n\treadonly message: string;\n\treadonly acknowledgementStep: string;\n};\n\nexport type CursorCliGuardrailSession = {\n\t/** Every warning emitted so far in this session; one-time gates live here. */\n\treadonly warnings: readonly CursorCliGuardrailWarning[];\n\t/** Emit a warning once per deduplication key; returns whether it was emitted. */\n\twarn(code: CursorCliGuardrailWarningCode, message: string, key?: string): boolean;\n\t/** Validate a sandbox mode against the probe-proven allowlist, warning once per rejected value. */\n\tvalidateSandboxMode(value: string | undefined): string | undefined;\n};\n\nexport function createCursorCliGuardrailSession(): CursorCliGuardrailSession {\n\tconst warnings: CursorCliGuardrailWarning[] = [];\n\tconst emitted = new Set<string>();\n\tconst warn = (code: CursorCliGuardrailWarningCode, message: string, key: string = code): boolean => {\n\t\tif (emitted.has(key)) return false;\n\t\temitted.add(key);\n\t\twarnings.push({ kind: \"warning\", code, message });\n\t\treturn true;\n\t};\n\tconst validateSandboxMode = createCursorCliOauthSandboxModeValidator(\n\t\tnew Set(CURSOR_CLI_OAUTH_SANDBOX_MODES),\n\t\t(message) => {\n\t\t\twarn(\"sandbox_mode_ignored\", message, `sandbox_mode_ignored:${message}`);\n\t\t},\n\t);\n\treturn {\n\t\twarnings,\n\t\twarn,\n\t\tvalidateSandboxMode,\n\t};\n}\n\nexport type CursorCliExecutionPolicyInput = {\n\treadonly forceExecution: boolean;\n\treadonly noApprovalAcknowledgedAt: string | undefined;\n\treadonly executionMode: CursorCliOauthExecutionMode;\n\treadonly sandboxMode: string | undefined;\n};\n\nexport type CursorCliExecutionDecision =\n\t| { readonly status: \"refused\"; readonly refusal: CursorCliExecutionRefusal }\n\t| {\n\t\t\treadonly status: \"allowed\";\n\t\t\treadonly force: boolean;\n\t\t\treadonly executionMode: CursorCliOauthExecutionMode;\n\t\t\treadonly sandboxMode: string | undefined;\n\t\t\treadonly denyCommands: readonly string[];\n\t\t\t/** Warnings accumulated in the session so far (not only this decision). */\n\t\t\treadonly warnings: readonly CursorCliGuardrailWarning[];\n\t };\n\n/** Typed refusal for an unacknowledged force attempt; never confused with a warning. */\nexport class CursorCliExecutionRefusalError extends Error {\n\treadonly code = \"no_approval_acknowledgement_required\" as const;\n\treadonly refusal: CursorCliExecutionRefusal;\n\n\tconstructor(refusal: CursorCliExecutionRefusal) {\n\t\tsuper(refusal.message);\n\t\tthis.name = \"CursorCliExecutionRefusalError\";\n\t\tthis.refusal = refusal;\n\t}\n}\n\n/** Glob breadth is unproven (task 2 probed exact full commands only), so glob-bearing entries are dropped. */\nconst GLOB_METACHARACTERS = /[*?[]/u;\n\nexport function sanitizeCursorCliDenyCommands(\n\tentries: readonly string[],\n\twarn?: (message: string) => void,\n): readonly string[] {\n\tconst kept: string[] = [];\n\tfor (const entry of entries) {\n\t\tconst command = entry.trim();\n\t\tif (command.length === 0) {\n\t\t\twarn?.(\"Ignoring an empty Cursor CLI deny command entry (exact full commands only)\");\n\t\t\tcontinue;\n\t\t}\n\t\tif (GLOB_METACHARACTERS.test(command)) {\n\t\t\twarn?.(\n\t\t\t\t`Ignoring glob-bearing Cursor CLI deny command (exact full commands only; glob support is unproven): ${command}`,\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tkept.push(command);\n\t}\n\treturn kept;\n}\n\n/**\n * Decide whether a turn may run unattended.\n *\n * - `--force` is emitted only in agent mode, only when force is requested, and\n * only after `noApprovalAcknowledgedAt` is set; otherwise the decision is a\n * typed refusal naming the acknowledgement step.\n * - Plan mode never emits `--force` (the CLI only plans), so it needs no\n * acknowledgement.\n * - Force disabled in agent mode is allowed but warns once per session.\n * - Unproven sandbox modes are ignored with one warning per distinct value.\n */\nexport function resolveCursorCliExecutionPolicy(\n\tinput: CursorCliExecutionPolicyInput,\n\tsession: CursorCliGuardrailSession,\n\tdenyCommands: readonly string[] = [],\n): CursorCliExecutionDecision {\n\tconst planMode = input.executionMode === \"plan\";\n\tconst wantsForce = !planMode && input.forceExecution;\n\tif (wantsForce && input.noApprovalAcknowledgedAt === undefined) {\n\t\tconst refusal: CursorCliExecutionRefusal = {\n\t\t\tkind: \"refusal\",\n\t\t\tcode: \"no_approval_acknowledgement_required\",\n\t\t\tmessage: `${CURSOR_CLI_OAUTH_NO_APPROVAL_EXPLANATION} ${CURSOR_CLI_OAUTH_ACKNOWLEDGEMENT_STEP}`,\n\t\t\tacknowledgementStep: CURSOR_CLI_OAUTH_ACKNOWLEDGEMENT_STEP,\n\t\t};\n\t\treturn { status: \"refused\", refusal };\n\t}\n\tif (!planMode && !input.forceExecution) {\n\t\tsession.warn(\"force_execution_disabled\", CURSOR_CLI_OAUTH_FORCE_DISABLED_WARNING);\n\t}\n\tconst sandboxMode = session.validateSandboxMode(input.sandboxMode);\n\tconst sanitizedDenyCommands = sanitizeCursorCliDenyCommands(denyCommands, (message) => {\n\t\tsession.warn(\"deny_command_rejected\", message, `deny_command_rejected:${message}`);\n\t});\n\treturn {\n\t\tstatus: \"allowed\",\n\t\tforce: wantsForce,\n\t\texecutionMode: input.executionMode,\n\t\tsandboxMode,\n\t\tdenyCommands: sanitizedDenyCommands,\n\t\twarnings: [...session.warnings],\n\t};\n}\n\nconst CLI_CONFIG_RELATIVE_PATH = join(\".cursor\", \"cli-config.json\");\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction shellDenyEntry(command: string): string {\n\treturn `Shell(${command})`;\n}\n\n/**\n * Pre-spawn hook: (re-)apply the deny list to the sandbox HOME's\n * `cli-config.json`.\n *\n * The CLI rewrites this file during every invocation (task 2 observed its own\n * keys appearing and `cli-config.json.bad` sidecars for malformed content), so\n * this must run immediately before each spawn, composing with the home-store\n * prepare pass that re-writes `auth.json` on the same cadence. Writes only the\n * probe-proven shape (`permissions.deny` with exact `Shell(<full command>)`\n * entries) and preserves every CLI-owned key already present. Writes nothing\n * when no deny commands are configured.\n */\nexport function applyCursorCliDenyConfig(home: string, denyCommands: readonly string[]): void {\n\tif (denyCommands.length === 0) return;\n\tconst configPath = join(home, CLI_CONFIG_RELATIVE_PATH);\n\tlet existing: Record<string, unknown> = {};\n\tif (existsSync(configPath)) {\n\t\ttry {\n\t\t\tconst parsed: unknown = JSON.parse(readFileSync(configPath, \"utf8\"));\n\t\t\tif (isRecord(parsed)) existing = parsed;\n\t\t} catch {\n\t\t\t// The CLI quarantines unparseable config as cli-config.json.bad and\n\t\t\t// proceeds with defaults; start from the proven minimal shape.\n\t\t}\n\t}\n\tconst permissions = isRecord(existing.permissions) ? { ...existing.permissions } : {};\n\tconst config: Record<string, unknown> = {\n\t\t...existing,\n\t\tpermissions: { ...permissions, deny: denyCommands.map(shellDenyEntry) },\n\t};\n\twriteFileSync(configPath, `${JSON.stringify(config, null, \"\\t\")}\\n`, \"utf8\");\n}\n"]}
@@ -0,0 +1,20 @@
1
+ import { type CursorCliAccountSlot } from "./accounts.ts";
2
+ export type CursorAccountHomeLogger = (line: string) => void;
3
+ export type CursorAccountHomeRunContext = {
4
+ home: string;
5
+ authPath: string;
6
+ };
7
+ export type CursorAccountHomeRunResult<T> = {
8
+ result: T;
9
+ slot: CursorCliAccountSlot;
10
+ home: string;
11
+ };
12
+ /**
13
+ * Runs one Cursor CLI invocation inside a durable per-account HOME.
14
+ *
15
+ * The credential is deliberately rewritten immediately before `run` because
16
+ * cursor-agent may modify other files under `.cursor` during an invocation.
17
+ * Nothing in the HOME is removed after the run, preserving CLI chat history.
18
+ */
19
+ export declare function runInCursorAccountHome<T>(agentDir: string, slot: CursorCliAccountSlot, run: (context: CursorAccountHomeRunContext) => Promise<T>, log?: CursorAccountHomeLogger): Promise<CursorAccountHomeRunResult<T>>;
20
+ //# sourceMappingURL=home-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"home-store.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/home-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0B,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAKlF,MAAM,MAAM,uBAAuB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAE7D,MAAM,MAAM,2BAA2B,GAAG;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,0BAA0B,CAAC,CAAC,IAAI;IAC3C,MAAM,EAAE,CAAC,CAAC;IACV,IAAI,EAAE,oBAAoB,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;CACb,CAAC;AAqHF;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,CAAC,EAC7C,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,oBAAoB,EAC1B,GAAG,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,OAAO,CAAC,CAAC,CAAC,EACzD,GAAG,CAAC,EAAE,uBAAuB,GAC3B,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAMxC"}
@@ -0,0 +1,99 @@
1
+ import { chmodSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { isAbsolute, relative, resolve, sep } from "node:path";
3
+ import { assertValidAccountName } from "./accounts.js";
4
+ const PRIVATE_DIRECTORY_MODE = 0o700;
5
+ const PRIVATE_FILE_MODE = 0o600;
6
+ function isRecord(value) {
7
+ return typeof value === "object" && value !== null && !Array.isArray(value);
8
+ }
9
+ function isInside(root, candidate) {
10
+ const pathFromRoot = relative(root, candidate);
11
+ return (pathFromRoot !== "" && !isAbsolute(pathFromRoot) && pathFromRoot !== ".." && !pathFromRoot.startsWith(`..${sep}`));
12
+ }
13
+ function accountPaths(agentDir, accountName) {
14
+ assertValidAccountName(accountName);
15
+ const extensionRoot = resolve(agentDir, "cursor-cli-oauth");
16
+ const accountsRoot = resolve(extensionRoot, "accounts");
17
+ const slotRoot = resolve(accountsRoot, accountName);
18
+ const home = resolve(slotRoot, "home");
19
+ if (!isInside(accountsRoot, slotRoot) || !isInside(accountsRoot, home)) {
20
+ throw new Error(`Cursor account HOME for '${accountName}' escapes the accounts root`);
21
+ }
22
+ const cursorDirectory = resolve(home, ".cursor");
23
+ if (!isInside(home, cursorDirectory)) {
24
+ throw new Error(`Cursor credential directory for '${accountName}' escapes its HOME`);
25
+ }
26
+ return {
27
+ home,
28
+ authPath: resolve(cursorDirectory, "auth.json"),
29
+ directories: [extensionRoot, accountsRoot, slotRoot, home, cursorDirectory],
30
+ };
31
+ }
32
+ function ensurePrivateDirectories(directories) {
33
+ for (const directory of directories) {
34
+ mkdirSync(directory, { recursive: true, mode: PRIVATE_DIRECTORY_MODE });
35
+ chmodSync(directory, PRIVATE_DIRECTORY_MODE);
36
+ }
37
+ }
38
+ function serializeCredential(slot) {
39
+ const credential = {
40
+ accessToken: slot.access,
41
+ refreshToken: slot.refresh,
42
+ apiKey: null,
43
+ bedrockCredentials: null,
44
+ };
45
+ return JSON.stringify(credential);
46
+ }
47
+ function parseCredential(contents) {
48
+ let parsed;
49
+ try {
50
+ parsed = JSON.parse(contents);
51
+ }
52
+ catch {
53
+ throw new Error("Invalid Cursor credential: auth.json is not valid JSON");
54
+ }
55
+ if (!isRecord(parsed) ||
56
+ typeof parsed.accessToken !== "string" ||
57
+ parsed.accessToken.length === 0 ||
58
+ typeof parsed.refreshToken !== "string" ||
59
+ parsed.refreshToken.length === 0 ||
60
+ parsed.apiKey !== null ||
61
+ parsed.bedrockCredentials !== null) {
62
+ throw new Error("Invalid Cursor credential: auth.json does not match the file-store contract");
63
+ }
64
+ return {
65
+ accessToken: parsed.accessToken,
66
+ refreshToken: parsed.refreshToken,
67
+ apiKey: null,
68
+ bedrockCredentials: null,
69
+ };
70
+ }
71
+ function prepareAccountHome(paths, slot, log) {
72
+ ensurePrivateDirectories(paths.directories);
73
+ writeFileSync(paths.authPath, serializeCredential(slot), {
74
+ encoding: "utf8",
75
+ mode: PRIVATE_FILE_MODE,
76
+ });
77
+ chmodSync(paths.authPath, PRIVATE_FILE_MODE);
78
+ log?.(`cursor_cli_oauth_credential_written accessBytes=${Buffer.byteLength(slot.access, "utf8")} refreshBytes=${Buffer.byteLength(slot.refresh, "utf8")}`);
79
+ }
80
+ function readBackSlot(paths, slot, log) {
81
+ const credential = parseCredential(readFileSync(paths.authPath, "utf8"));
82
+ log?.(`cursor_cli_oauth_credential_read accessBytes=${Buffer.byteLength(credential.accessToken, "utf8")} refreshBytes=${Buffer.byteLength(credential.refreshToken, "utf8")} rotated=${credential.refreshToken !== slot.refresh}`);
83
+ return credential.refreshToken === slot.refresh ? slot : { ...slot, refresh: credential.refreshToken };
84
+ }
85
+ /**
86
+ * Runs one Cursor CLI invocation inside a durable per-account HOME.
87
+ *
88
+ * The credential is deliberately rewritten immediately before `run` because
89
+ * cursor-agent may modify other files under `.cursor` during an invocation.
90
+ * Nothing in the HOME is removed after the run, preserving CLI chat history.
91
+ */
92
+ export async function runInCursorAccountHome(agentDir, slot, run, log) {
93
+ const paths = accountPaths(agentDir, slot.name);
94
+ prepareAccountHome(paths, slot, log);
95
+ const result = await run({ home: paths.home, authPath: paths.authPath });
96
+ const updatedSlot = readBackSlot(paths, slot, log);
97
+ return { result, slot: updatedSlot, home: paths.home };
98
+ }
99
+ //# sourceMappingURL=home-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"home-store.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/home-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { chmodSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { isAbsolute, relative, resolve, sep } from \"node:path\";\nimport { assertValidAccountName, type CursorCliAccountSlot } from \"./accounts.ts\";\n\nconst PRIVATE_DIRECTORY_MODE = 0o700;\nconst PRIVATE_FILE_MODE = 0o600;\n\nexport type CursorAccountHomeLogger = (line: string) => void;\n\nexport type CursorAccountHomeRunContext = {\n\thome: string;\n\tauthPath: string;\n};\n\nexport type CursorAccountHomeRunResult<T> = {\n\tresult: T;\n\tslot: CursorCliAccountSlot;\n\thome: string;\n};\n\ntype CursorFileCredential = {\n\taccessToken: string;\n\trefreshToken: string;\n\tapiKey: null;\n\tbedrockCredentials: null;\n};\n\ntype CursorAccountPaths = CursorAccountHomeRunContext & {\n\tdirectories: readonly string[];\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isInside(root: string, candidate: string): boolean {\n\tconst pathFromRoot = relative(root, candidate);\n\treturn (\n\t\tpathFromRoot !== \"\" && !isAbsolute(pathFromRoot) && pathFromRoot !== \"..\" && !pathFromRoot.startsWith(`..${sep}`)\n\t);\n}\n\nfunction accountPaths(agentDir: string, accountName: string): CursorAccountPaths {\n\tassertValidAccountName(accountName);\n\n\tconst extensionRoot = resolve(agentDir, \"cursor-cli-oauth\");\n\tconst accountsRoot = resolve(extensionRoot, \"accounts\");\n\tconst slotRoot = resolve(accountsRoot, accountName);\n\tconst home = resolve(slotRoot, \"home\");\n\tif (!isInside(accountsRoot, slotRoot) || !isInside(accountsRoot, home)) {\n\t\tthrow new Error(`Cursor account HOME for '${accountName}' escapes the accounts root`);\n\t}\n\tconst cursorDirectory = resolve(home, \".cursor\");\n\tif (!isInside(home, cursorDirectory)) {\n\t\tthrow new Error(`Cursor credential directory for '${accountName}' escapes its HOME`);\n\t}\n\n\treturn {\n\t\thome,\n\t\tauthPath: resolve(cursorDirectory, \"auth.json\"),\n\t\tdirectories: [extensionRoot, accountsRoot, slotRoot, home, cursorDirectory],\n\t};\n}\n\nfunction ensurePrivateDirectories(directories: readonly string[]): void {\n\tfor (const directory of directories) {\n\t\tmkdirSync(directory, { recursive: true, mode: PRIVATE_DIRECTORY_MODE });\n\t\tchmodSync(directory, PRIVATE_DIRECTORY_MODE);\n\t}\n}\n\nfunction serializeCredential(slot: CursorCliAccountSlot): string {\n\tconst credential: CursorFileCredential = {\n\t\taccessToken: slot.access,\n\t\trefreshToken: slot.refresh,\n\t\tapiKey: null,\n\t\tbedrockCredentials: null,\n\t};\n\treturn JSON.stringify(credential);\n}\n\nfunction parseCredential(contents: string): CursorFileCredential {\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(contents);\n\t} catch {\n\t\tthrow new Error(\"Invalid Cursor credential: auth.json is not valid JSON\");\n\t}\n\tif (\n\t\t!isRecord(parsed) ||\n\t\ttypeof parsed.accessToken !== \"string\" ||\n\t\tparsed.accessToken.length === 0 ||\n\t\ttypeof parsed.refreshToken !== \"string\" ||\n\t\tparsed.refreshToken.length === 0 ||\n\t\tparsed.apiKey !== null ||\n\t\tparsed.bedrockCredentials !== null\n\t) {\n\t\tthrow new Error(\"Invalid Cursor credential: auth.json does not match the file-store contract\");\n\t}\n\treturn {\n\t\taccessToken: parsed.accessToken,\n\t\trefreshToken: parsed.refreshToken,\n\t\tapiKey: null,\n\t\tbedrockCredentials: null,\n\t};\n}\n\nfunction prepareAccountHome(\n\tpaths: CursorAccountPaths,\n\tslot: CursorCliAccountSlot,\n\tlog?: CursorAccountHomeLogger,\n): void {\n\tensurePrivateDirectories(paths.directories);\n\twriteFileSync(paths.authPath, serializeCredential(slot), {\n\t\tencoding: \"utf8\",\n\t\tmode: PRIVATE_FILE_MODE,\n\t});\n\tchmodSync(paths.authPath, PRIVATE_FILE_MODE);\n\tlog?.(\n\t\t`cursor_cli_oauth_credential_written accessBytes=${Buffer.byteLength(slot.access, \"utf8\")} refreshBytes=${Buffer.byteLength(slot.refresh, \"utf8\")}`,\n\t);\n}\n\nfunction readBackSlot(\n\tpaths: CursorAccountPaths,\n\tslot: CursorCliAccountSlot,\n\tlog?: CursorAccountHomeLogger,\n): CursorCliAccountSlot {\n\tconst credential = parseCredential(readFileSync(paths.authPath, \"utf8\"));\n\tlog?.(\n\t\t`cursor_cli_oauth_credential_read accessBytes=${Buffer.byteLength(credential.accessToken, \"utf8\")} refreshBytes=${Buffer.byteLength(credential.refreshToken, \"utf8\")} rotated=${credential.refreshToken !== slot.refresh}`,\n\t);\n\treturn credential.refreshToken === slot.refresh ? slot : { ...slot, refresh: credential.refreshToken };\n}\n\n/**\n * Runs one Cursor CLI invocation inside a durable per-account HOME.\n *\n * The credential is deliberately rewritten immediately before `run` because\n * cursor-agent may modify other files under `.cursor` during an invocation.\n * Nothing in the HOME is removed after the run, preserving CLI chat history.\n */\nexport async function runInCursorAccountHome<T>(\n\tagentDir: string,\n\tslot: CursorCliAccountSlot,\n\trun: (context: CursorAccountHomeRunContext) => Promise<T>,\n\tlog?: CursorAccountHomeLogger,\n): Promise<CursorAccountHomeRunResult<T>> {\n\tconst paths = accountPaths(agentDir, slot.name);\n\tprepareAccountHome(paths, slot, log);\n\tconst result = await run({ home: paths.home, authPath: paths.authPath });\n\tconst updatedSlot = readBackSlot(paths, slot, log);\n\treturn { result, slot: updatedSlot, home: paths.home };\n}\n"]}
@@ -0,0 +1,25 @@
1
+ import type { Credential, CredentialStore } from "@earendil-works/pi-ai";
2
+ import type { ExtensionAPI } from "../../types.ts";
3
+ import { type CursorCliOauthProviderSettings } from "./settings.ts";
4
+ export { CURSOR_CLI_OAUTH_PROVIDER_ID } from "./oauth-login.ts";
5
+ export type { CursorCliStreamDeps } from "./stream.ts";
6
+ /** Injectable seams; every default resolves real on-disk state. */
7
+ export type CursorCliOauthExtensionDeps = {
8
+ readonly cwd?: string;
9
+ readonly agentDir?: string;
10
+ readonly store?: CredentialStore;
11
+ readonly readCurrent?: () => Promise<Credential | undefined>;
12
+ readonly loadSettings?: (cwd: string) => CursorCliOauthProviderSettings;
13
+ readonly resolveExecutable?: (settings: {
14
+ executablePath?: string;
15
+ }) => string;
16
+ };
17
+ /**
18
+ * Registers the cursor-cli-oauth provider lane. Registration is unconditional:
19
+ * the provider ships with the offline model fallback and reports availability
20
+ * through the oauth `check`, so a missing cursor-agent binary never hides the
21
+ * lane - it only makes `check` name the install guidance.
22
+ */
23
+ export declare function registerCursorCliOauthExtension(pi: ExtensionAPI, deps?: CursorCliOauthExtensionDeps): void;
24
+ export default function cursorCliOauthExtension(pi: ExtensionAPI): void;
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGzE,OAAO,KAAK,EAAE,YAAY,EAAuB,MAAM,gBAAgB,CAAC;AAKxE,OAAO,EACN,KAAK,8BAA8B,EAInC,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAChE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,mEAAmE;AACnE,MAAM,MAAM,2BAA2B,GAAG;IACzC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;IAC7D,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,8BAA8B,CAAC;IACxE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC;CAC/E,CAAC;AAKF;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,GAAE,2BAAgC,GAAG,IAAI,CAmD9G;AAED,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAEtE"}
@@ -0,0 +1,69 @@
1
+ import { getAgentDir } from "../../../../config.js";
2
+ import { AuthStorage } from "../../../auth-storage.js";
3
+ import { registerCursorCliAccountCommand } from "./account-command.js";
4
+ import { defaultCursorAgentExecutableDeps, resolveCursorAgentExecutable } from "./executable.js";
5
+ import { resolveCursorCliModelCatalog, STATIC_CURSOR_CLI_MODELS } from "./models.js";
6
+ import { CURSOR_CLI_OAUTH_PROVIDER_ID, createCursorCliOauthConfig } from "./oauth-login.js";
7
+ import { loadCursorCliOauthProviderSettingsFromDisk, persistCursorCliNoApprovalAcknowledgement, persistCursorCliOauthEnabled, } from "./settings.js";
8
+ import { streamCursorCliOauth } from "./stream.js";
9
+ export { CURSOR_CLI_OAUTH_PROVIDER_ID } from "./oauth-login.js";
10
+ const defaultResolveExecutable = (settings) => resolveCursorAgentExecutable({ ...defaultCursorAgentExecutableDeps(), settings });
11
+ /**
12
+ * Registers the cursor-cli-oauth provider lane. Registration is unconditional:
13
+ * the provider ships with the offline model fallback and reports availability
14
+ * through the oauth `check`, so a missing cursor-agent binary never hides the
15
+ * lane - it only makes `check` name the install guidance.
16
+ */
17
+ export function registerCursorCliOauthExtension(pi, deps = {}) {
18
+ const cwd = deps.cwd ?? process.cwd();
19
+ const agentDir = deps.agentDir ?? getAgentDir();
20
+ const store = deps.store ?? AuthStorage.create();
21
+ const readCurrent = deps.readCurrent ?? (async () => store.read(CURSOR_CLI_OAUTH_PROVIDER_ID));
22
+ const loadSettings = deps.loadSettings ?? loadCursorCliOauthProviderSettingsFromDisk;
23
+ const resolveExecutable = deps.resolveExecutable ?? defaultResolveExecutable;
24
+ // Todo 21: /cursor-account command plus the reload/shutdown teardown for
25
+ // this extension generation (minimal additive wiring).
26
+ registerCursorCliAccountCommand(pi);
27
+ const register = (models) => {
28
+ pi.registerProvider(CURSOR_CLI_OAUTH_PROVIDER_ID, {
29
+ baseUrl: CURSOR_CLI_OAUTH_PROVIDER_ID,
30
+ api: CURSOR_CLI_OAUTH_PROVIDER_ID,
31
+ models: models.map((entry) => ({ ...entry })),
32
+ // Settings, accounts, and the executable are re-resolved inside every
33
+ // turn; nothing captured here outlives a settings or credential change.
34
+ streamSimple: (model, context, options) => streamCursorCliOauth(model, context, options, { cwd, agentDir, store }),
35
+ oauth: createCursorCliOauthConfig({
36
+ readCurrent,
37
+ readSettings: () => loadSettings(cwd),
38
+ resolveExecutable,
39
+ persistAcknowledgement: (acknowledgedAt) => persistCursorCliNoApprovalAcknowledgement(cwd, acknowledgedAt),
40
+ persistEnabled: (enabled) => persistCursorCliOauthEnabled(cwd, enabled),
41
+ }),
42
+ });
43
+ };
44
+ // Register immediately with the offline fallback so a missing, hanging, or
45
+ // broken cursor-agent can never delay or block provider registration; the
46
+ // probe-backed catalog replaces it once resolved.
47
+ register(STATIC_CURSOR_CLI_MODELS);
48
+ const settings = loadSettings(cwd);
49
+ void resolveCursorCliModelCatalog({
50
+ agentDir,
51
+ settings: {
52
+ modelCatalogTtlHours: settings.modelCatalogTtlHours,
53
+ executablePath: settings.executablePath,
54
+ },
55
+ deps: { resolveExecutable: () => resolveExecutable({ executablePath: settings.executablePath }) },
56
+ })
57
+ .then((models) => {
58
+ const resolved = models.map((entry) => entry.id).join("\n");
59
+ if (resolved !== STATIC_CURSOR_CLI_MODELS.map((entry) => entry.id).join("\n"))
60
+ register(models);
61
+ })
62
+ .catch(() => {
63
+ // The loader degrades to the static fallback itself; keep the registered fallback.
64
+ });
65
+ }
66
+ export default function cursorCliOauthExtension(pi) {
67
+ registerCursorCliOauthExtension(pi);
68
+ }
69
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Credential, CredentialStore } from \"@earendil-works/pi-ai\";\nimport { getAgentDir } from \"../../../../config.ts\";\nimport { AuthStorage } from \"../../../auth-storage.ts\";\nimport type { ExtensionAPI, ProviderModelConfig } from \"../../types.ts\";\nimport { registerCursorCliAccountCommand } from \"./account-command.ts\";\nimport { defaultCursorAgentExecutableDeps, resolveCursorAgentExecutable } from \"./executable.ts\";\nimport { resolveCursorCliModelCatalog, STATIC_CURSOR_CLI_MODELS } from \"./models.ts\";\nimport { CURSOR_CLI_OAUTH_PROVIDER_ID, createCursorCliOauthConfig } from \"./oauth-login.ts\";\nimport {\n\ttype CursorCliOauthProviderSettings,\n\tloadCursorCliOauthProviderSettingsFromDisk,\n\tpersistCursorCliNoApprovalAcknowledgement,\n\tpersistCursorCliOauthEnabled,\n} from \"./settings.ts\";\nimport { streamCursorCliOauth } from \"./stream.ts\";\n\nexport { CURSOR_CLI_OAUTH_PROVIDER_ID } from \"./oauth-login.ts\";\nexport type { CursorCliStreamDeps } from \"./stream.ts\";\n\n/** Injectable seams; every default resolves real on-disk state. */\nexport type CursorCliOauthExtensionDeps = {\n\treadonly cwd?: string;\n\treadonly agentDir?: string;\n\treadonly store?: CredentialStore;\n\treadonly readCurrent?: () => Promise<Credential | undefined>;\n\treadonly loadSettings?: (cwd: string) => CursorCliOauthProviderSettings;\n\treadonly resolveExecutable?: (settings: { executablePath?: string }) => string;\n};\n\nconst defaultResolveExecutable = (settings: { executablePath?: string }): string =>\n\tresolveCursorAgentExecutable({ ...defaultCursorAgentExecutableDeps(), settings });\n\n/**\n * Registers the cursor-cli-oauth provider lane. Registration is unconditional:\n * the provider ships with the offline model fallback and reports availability\n * through the oauth `check`, so a missing cursor-agent binary never hides the\n * lane - it only makes `check` name the install guidance.\n */\nexport function registerCursorCliOauthExtension(pi: ExtensionAPI, deps: CursorCliOauthExtensionDeps = {}): void {\n\tconst cwd = deps.cwd ?? process.cwd();\n\tconst agentDir = deps.agentDir ?? getAgentDir();\n\tconst store = deps.store ?? AuthStorage.create();\n\tconst readCurrent = deps.readCurrent ?? (async () => store.read(CURSOR_CLI_OAUTH_PROVIDER_ID));\n\tconst loadSettings = deps.loadSettings ?? loadCursorCliOauthProviderSettingsFromDisk;\n\tconst resolveExecutable = deps.resolveExecutable ?? defaultResolveExecutable;\n\n\t// Todo 21: /cursor-account command plus the reload/shutdown teardown for\n\t// this extension generation (minimal additive wiring).\n\tregisterCursorCliAccountCommand(pi);\n\n\tconst register = (models: readonly ProviderModelConfig[]): void => {\n\t\tpi.registerProvider(CURSOR_CLI_OAUTH_PROVIDER_ID, {\n\t\t\tbaseUrl: CURSOR_CLI_OAUTH_PROVIDER_ID,\n\t\t\tapi: CURSOR_CLI_OAUTH_PROVIDER_ID,\n\t\t\tmodels: models.map((entry) => ({ ...entry })),\n\t\t\t// Settings, accounts, and the executable are re-resolved inside every\n\t\t\t// turn; nothing captured here outlives a settings or credential change.\n\t\t\tstreamSimple: (model, context, options) =>\n\t\t\t\tstreamCursorCliOauth(model, context, options, { cwd, agentDir, store }),\n\t\t\toauth: createCursorCliOauthConfig({\n\t\t\t\treadCurrent,\n\t\t\t\treadSettings: () => loadSettings(cwd),\n\t\t\t\tresolveExecutable,\n\t\t\t\tpersistAcknowledgement: (acknowledgedAt) => persistCursorCliNoApprovalAcknowledgement(cwd, acknowledgedAt),\n\t\t\t\tpersistEnabled: (enabled) => persistCursorCliOauthEnabled(cwd, enabled),\n\t\t\t}),\n\t\t});\n\t};\n\n\t// Register immediately with the offline fallback so a missing, hanging, or\n\t// broken cursor-agent can never delay or block provider registration; the\n\t// probe-backed catalog replaces it once resolved.\n\tregister(STATIC_CURSOR_CLI_MODELS);\n\tconst settings = loadSettings(cwd);\n\tvoid resolveCursorCliModelCatalog({\n\t\tagentDir,\n\t\tsettings: {\n\t\t\tmodelCatalogTtlHours: settings.modelCatalogTtlHours,\n\t\t\texecutablePath: settings.executablePath,\n\t\t},\n\t\tdeps: { resolveExecutable: () => resolveExecutable({ executablePath: settings.executablePath }) },\n\t})\n\t\t.then((models) => {\n\t\t\tconst resolved = models.map((entry) => entry.id).join(\"\\n\");\n\t\t\tif (resolved !== STATIC_CURSOR_CLI_MODELS.map((entry) => entry.id).join(\"\\n\")) register(models);\n\t\t})\n\t\t.catch(() => {\n\t\t\t// The loader degrades to the static fallback itself; keep the registered fallback.\n\t\t});\n}\n\nexport default function cursorCliOauthExtension(pi: ExtensionAPI): void {\n\tregisterCursorCliOauthExtension(pi);\n}\n"]}
@@ -0,0 +1,27 @@
1
+ import type { ProviderModelConfig } from "../../types.ts";
2
+ export type CursorCliModelCatalogSettings = {
3
+ readonly modelCatalogTtlHours?: number;
4
+ readonly executablePath?: string;
5
+ };
6
+ export type CursorCliModelCatalogDeps = {
7
+ now: () => number;
8
+ resolveExecutable: () => string;
9
+ runProbe: (executable: string, stdoutPath: string, timeoutMs: number) => Promise<void>;
10
+ makeTemporaryDirectory: (prefix: string) => Promise<string>;
11
+ readTextFile: (path: string) => Promise<string>;
12
+ makeDirectory: (path: string) => Promise<void>;
13
+ writeTextFile: (path: string, contents: string) => Promise<void>;
14
+ renameFile: (from: string, to: string) => Promise<void>;
15
+ removeDirectory: (path: string) => Promise<void>;
16
+ };
17
+ export type ResolveCursorCliModelCatalogOptions = {
18
+ readonly agentDir: string;
19
+ readonly settings?: CursorCliModelCatalogSettings;
20
+ readonly deps?: Partial<CursorCliModelCatalogDeps>;
21
+ };
22
+ export declare const STATIC_CURSOR_CLI_MODELS: readonly ProviderModelConfig[];
23
+ /** Parse the complete `cursor-agent models` listing into extension provider entries. */
24
+ export declare function parseCursorAgentModelsListing(listing: string): ProviderModelConfig[];
25
+ /** Resolve a cached or probed catalog, always degrading to the exact offline fallback. */
26
+ export declare function resolveCursorCliModelCatalog(options: ResolveCursorCliModelCatalogOptions): Promise<readonly ProviderModelConfig[]>;
27
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/cursor-cli-oauth/models.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAW1D,MAAM,MAAM,6BAA6B,GAAG;IAC3C,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACvC,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,MAAM,CAAC;IAChC,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvF,sBAAsB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5D,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,mCAAmC,GAAG;IACjD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,6BAA6B,CAAC;IAClD,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;CACnD,CAAC;AAqDF,eAAO,MAAM,wBAAwB,EAAE,SAAS,mBAAmB,EAElE,CAAC;AAEF,wFAAwF;AACxF,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAiBpF;AA6ID,0FAA0F;AAC1F,wBAAsB,4BAA4B,CACjD,OAAO,EAAE,mCAAmC,GAC1C,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC,CAkCzC"}