@kortix/sdk 0.9.98

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 (618) hide show
  1. package/README.md +313 -0
  2. package/dist/files/client.d.ts +96 -0
  3. package/dist/files/client.d.ts.map +1 -0
  4. package/dist/files/client.js +346 -0
  5. package/dist/files/client.js.map +1 -0
  6. package/dist/files/types.d.ts +82 -0
  7. package/dist/files/types.d.ts.map +1 -0
  8. package/dist/files/types.js +6 -0
  9. package/dist/files/types.js.map +1 -0
  10. package/dist/index.d.ts +119 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +93 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/kortix.d.ts +897 -0
  15. package/dist/kortix.d.ts.map +1 -0
  16. package/dist/kortix.js +772 -0
  17. package/dist/kortix.js.map +1 -0
  18. package/dist/opencode/client.d.ts +89 -0
  19. package/dist/opencode/client.d.ts.map +1 -0
  20. package/dist/opencode/client.js +191 -0
  21. package/dist/opencode/client.js.map +1 -0
  22. package/dist/opencode/env.d.ts +13 -0
  23. package/dist/opencode/env.d.ts.map +1 -0
  24. package/dist/opencode/env.js +63 -0
  25. package/dist/opencode/env.js.map +1 -0
  26. package/dist/opencode/kortix-master.d.ts +487 -0
  27. package/dist/opencode/kortix-master.d.ts.map +1 -0
  28. package/dist/opencode/kortix-master.js +313 -0
  29. package/dist/opencode/kortix-master.js.map +1 -0
  30. package/dist/opencode/triggers.d.ts +6 -0
  31. package/dist/opencode/triggers.d.ts.map +1 -0
  32. package/dist/opencode/triggers.js +34 -0
  33. package/dist/opencode/triggers.js.map +1 -0
  34. package/dist/platform/api/errors.d.ts +106 -0
  35. package/dist/platform/api/errors.d.ts.map +1 -0
  36. package/dist/platform/api/errors.js +137 -0
  37. package/dist/platform/api/errors.js.map +1 -0
  38. package/dist/platform/api-client.d.ts +35 -0
  39. package/dist/platform/api-client.d.ts.map +1 -0
  40. package/dist/platform/api-client.js +279 -0
  41. package/dist/platform/api-client.js.map +1 -0
  42. package/dist/platform/auth-core.d.ts +60 -0
  43. package/dist/platform/auth-core.d.ts.map +1 -0
  44. package/dist/platform/auth-core.js +104 -0
  45. package/dist/platform/auth-core.js.map +1 -0
  46. package/dist/platform/auth.d.ts +88 -0
  47. package/dist/platform/auth.d.ts.map +1 -0
  48. package/dist/platform/auth.js +161 -0
  49. package/dist/platform/auth.js.map +1 -0
  50. package/dist/platform/config-node.d.ts +33 -0
  51. package/dist/platform/config-node.d.ts.map +1 -0
  52. package/dist/platform/config-node.js +63 -0
  53. package/dist/platform/config-node.js.map +1 -0
  54. package/dist/platform/config.d.ts +77 -0
  55. package/dist/platform/config.d.ts.map +1 -0
  56. package/dist/platform/config.js +62 -0
  57. package/dist/platform/config.js.map +1 -0
  58. package/dist/platform/feature-flags.d.ts +25 -0
  59. package/dist/platform/feature-flags.d.ts.map +1 -0
  60. package/dist/platform/feature-flags.js +114 -0
  61. package/dist/platform/feature-flags.js.map +1 -0
  62. package/dist/platform/fresh-sessions.d.ts +4 -0
  63. package/dist/platform/fresh-sessions.d.ts.map +1 -0
  64. package/dist/platform/fresh-sessions.js +22 -0
  65. package/dist/platform/fresh-sessions.js.map +1 -0
  66. package/dist/platform/instance-routes.d.ts +17 -0
  67. package/dist/platform/instance-routes.d.ts.map +1 -0
  68. package/dist/platform/instance-routes.js +105 -0
  69. package/dist/platform/instance-routes.js.map +1 -0
  70. package/dist/platform/logger.d.ts +20 -0
  71. package/dist/platform/logger.d.ts.map +1 -0
  72. package/dist/platform/logger.js +44 -0
  73. package/dist/platform/logger.js.map +1 -0
  74. package/dist/platform/opencode-errors.d.ts +20 -0
  75. package/dist/platform/opencode-errors.d.ts.map +1 -0
  76. package/dist/platform/opencode-errors.js +71 -0
  77. package/dist/platform/opencode-errors.js.map +1 -0
  78. package/dist/platform/platform-client/backups.d.ts +22 -0
  79. package/dist/platform/platform-client/backups.d.ts.map +1 -0
  80. package/dist/platform/platform-client/backups.js +16 -0
  81. package/dist/platform/platform-client/backups.js.map +1 -0
  82. package/dist/platform/platform-client/index.d.ts +21 -0
  83. package/dist/platform/platform-client/index.d.ts.map +1 -0
  84. package/dist/platform/platform-client/index.js +21 -0
  85. package/dist/platform/platform-client/index.js.map +1 -0
  86. package/dist/platform/platform-client/instance-admin.d.ts +67 -0
  87. package/dist/platform/platform-client/instance-admin.d.ts.map +1 -0
  88. package/dist/platform/platform-client/instance-admin.js +59 -0
  89. package/dist/platform/platform-client/instance-admin.js.map +1 -0
  90. package/dist/platform/platform-client/invites.d.ts +35 -0
  91. package/dist/platform/platform-client/invites.d.ts.map +1 -0
  92. package/dist/platform/platform-client/invites.js +25 -0
  93. package/dist/platform/platform-client/invites.js.map +1 -0
  94. package/dist/platform/platform-client/lifecycle.d.ts +78 -0
  95. package/dist/platform/platform-client/lifecycle.d.ts.map +1 -0
  96. package/dist/platform/platform-client/lifecycle.js +151 -0
  97. package/dist/platform/platform-client/lifecycle.js.map +1 -0
  98. package/dist/platform/platform-client/members.d.ts +81 -0
  99. package/dist/platform/platform-client/members.d.ts.map +1 -0
  100. package/dist/platform/platform-client/members.js +59 -0
  101. package/dist/platform/platform-client/members.js.map +1 -0
  102. package/dist/platform/platform-client/shared.d.ts +44 -0
  103. package/dist/platform/platform-client/shared.d.ts.map +1 -0
  104. package/dist/platform/platform-client/shared.js +177 -0
  105. package/dist/platform/platform-client/shared.js.map +1 -0
  106. package/dist/platform/platform-client/ssh.d.ts +29 -0
  107. package/dist/platform/platform-client/ssh.d.ts.map +1 -0
  108. package/dist/platform/platform-client/ssh.js +14 -0
  109. package/dist/platform/platform-client/ssh.js.map +1 -0
  110. package/dist/platform/platform-client/types.d.ts +56 -0
  111. package/dist/platform/platform-client/types.d.ts.map +1 -0
  112. package/dist/platform/platform-client/types.js +19 -0
  113. package/dist/platform/platform-client/types.js.map +1 -0
  114. package/dist/platform/platform-client/updates.d.ts +117 -0
  115. package/dist/platform/platform-client/updates.d.ts.map +1 -0
  116. package/dist/platform/platform-client/updates.js +97 -0
  117. package/dist/platform/platform-client/updates.js.map +1 -0
  118. package/dist/platform/platform-client/urls.d.ts +18 -0
  119. package/dist/platform/platform-client/urls.d.ts.map +1 -0
  120. package/dist/platform/platform-client/urls.js +31 -0
  121. package/dist/platform/platform-client/urls.js.map +1 -0
  122. package/dist/platform/projects-client/access.d.ts +273 -0
  123. package/dist/platform/projects-client/access.d.ts.map +1 -0
  124. package/dist/platform/projects-client/access.js +89 -0
  125. package/dist/platform/projects-client/access.js.map +1 -0
  126. package/dist/platform/projects-client/accounts.d.ts +184 -0
  127. package/dist/platform/projects-client/accounts.d.ts.map +1 -0
  128. package/dist/platform/projects-client/accounts.js +78 -0
  129. package/dist/platform/projects-client/accounts.js.map +1 -0
  130. package/dist/platform/projects-client/agent-config.d.ts +58 -0
  131. package/dist/platform/projects-client/agent-config.d.ts.map +1 -0
  132. package/dist/platform/projects-client/agent-config.js +9 -0
  133. package/dist/platform/projects-client/agent-config.js.map +1 -0
  134. package/dist/platform/projects-client/agent-scope.d.ts +12 -0
  135. package/dist/platform/projects-client/agent-scope.d.ts.map +1 -0
  136. package/dist/platform/projects-client/agent-scope.js +6 -0
  137. package/dist/platform/projects-client/agent-scope.js.map +1 -0
  138. package/dist/platform/projects-client/apps.d.ts +98 -0
  139. package/dist/platform/projects-client/apps.d.ts.map +1 -0
  140. package/dist/platform/projects-client/apps.js +29 -0
  141. package/dist/platform/projects-client/apps.js.map +1 -0
  142. package/dist/platform/projects-client/audit.d.ts +85 -0
  143. package/dist/platform/projects-client/audit.d.ts.map +1 -0
  144. package/dist/platform/projects-client/audit.js +51 -0
  145. package/dist/platform/projects-client/audit.js.map +1 -0
  146. package/dist/platform/projects-client/billing.d.ts +336 -0
  147. package/dist/platform/projects-client/billing.d.ts.map +1 -0
  148. package/dist/platform/projects-client/billing.js +260 -0
  149. package/dist/platform/projects-client/billing.js.map +1 -0
  150. package/dist/platform/projects-client/change-requests.d.ts +119 -0
  151. package/dist/platform/projects-client/change-requests.d.ts.map +1 -0
  152. package/dist/platform/projects-client/change-requests.js +56 -0
  153. package/dist/platform/projects-client/change-requests.js.map +1 -0
  154. package/dist/platform/projects-client/channels.d.ts +135 -0
  155. package/dist/platform/projects-client/channels.d.ts.map +1 -0
  156. package/dist/platform/projects-client/channels.js +103 -0
  157. package/dist/platform/projects-client/channels.js.map +1 -0
  158. package/dist/platform/projects-client/connectors.d.ts +148 -0
  159. package/dist/platform/projects-client/connectors.d.ts.map +1 -0
  160. package/dist/platform/projects-client/connectors.js +66 -0
  161. package/dist/platform/projects-client/connectors.js.map +1 -0
  162. package/dist/platform/projects-client/files.d.ts +37 -0
  163. package/dist/platform/projects-client/files.d.ts.map +1 -0
  164. package/dist/platform/projects-client/files.js +58 -0
  165. package/dist/platform/projects-client/files.js.map +1 -0
  166. package/dist/platform/projects-client/gateway.d.ts +177 -0
  167. package/dist/platform/projects-client/gateway.d.ts.map +1 -0
  168. package/dist/platform/projects-client/gateway.js +59 -0
  169. package/dist/platform/projects-client/gateway.js.map +1 -0
  170. package/dist/platform/projects-client/git-history.d.ts +74 -0
  171. package/dist/platform/projects-client/git-history.d.ts.map +1 -0
  172. package/dist/platform/projects-client/git-history.js +40 -0
  173. package/dist/platform/projects-client/git-history.js.map +1 -0
  174. package/dist/platform/projects-client/github.d.ts +62 -0
  175. package/dist/platform/projects-client/github.d.ts.map +1 -0
  176. package/dist/platform/projects-client/github.js +30 -0
  177. package/dist/platform/projects-client/github.js.map +1 -0
  178. package/dist/platform/projects-client/index.d.ts +32 -0
  179. package/dist/platform/projects-client/index.d.ts.map +1 -0
  180. package/dist/platform/projects-client/index.js +34 -0
  181. package/dist/platform/projects-client/index.js.map +1 -0
  182. package/dist/platform/projects-client/marketplace-catalog.d.ts +76 -0
  183. package/dist/platform/projects-client/marketplace-catalog.d.ts.map +1 -0
  184. package/dist/platform/projects-client/marketplace-catalog.js +48 -0
  185. package/dist/platform/projects-client/marketplace-catalog.js.map +1 -0
  186. package/dist/platform/projects-client/marketplace.d.ts +80 -0
  187. package/dist/platform/projects-client/marketplace.d.ts.map +1 -0
  188. package/dist/platform/projects-client/marketplace.js +52 -0
  189. package/dist/platform/projects-client/marketplace.js.map +1 -0
  190. package/dist/platform/projects-client/model-defaults.d.ts +36 -0
  191. package/dist/platform/projects-client/model-defaults.d.ts.map +1 -0
  192. package/dist/platform/projects-client/model-defaults.js +16 -0
  193. package/dist/platform/projects-client/model-defaults.js.map +1 -0
  194. package/dist/platform/projects-client/policies.d.ts +21 -0
  195. package/dist/platform/projects-client/policies.d.ts.map +1 -0
  196. package/dist/platform/projects-client/policies.js +10 -0
  197. package/dist/platform/projects-client/policies.js.map +1 -0
  198. package/dist/platform/projects-client/projects.d.ts +235 -0
  199. package/dist/platform/projects-client/projects.d.ts.map +1 -0
  200. package/dist/platform/projects-client/projects.js +161 -0
  201. package/dist/platform/projects-client/projects.js.map +1 -0
  202. package/dist/platform/projects-client/public-session-shares.d.ts +52 -0
  203. package/dist/platform/projects-client/public-session-shares.d.ts.map +1 -0
  204. package/dist/platform/projects-client/public-session-shares.js +54 -0
  205. package/dist/platform/projects-client/public-session-shares.js.map +1 -0
  206. package/dist/platform/projects-client/review.d.ts +57 -0
  207. package/dist/platform/projects-client/review.d.ts.map +1 -0
  208. package/dist/platform/projects-client/review.js +28 -0
  209. package/dist/platform/projects-client/review.js.map +1 -0
  210. package/dist/platform/projects-client/sandbox-shares.d.ts +25 -0
  211. package/dist/platform/projects-client/sandbox-shares.d.ts.map +1 -0
  212. package/dist/platform/projects-client/sandbox-shares.js +29 -0
  213. package/dist/platform/projects-client/sandbox-shares.js.map +1 -0
  214. package/dist/platform/projects-client/sandbox.d.ts +123 -0
  215. package/dist/platform/projects-client/sandbox.d.ts.map +1 -0
  216. package/dist/platform/projects-client/sandbox.js +45 -0
  217. package/dist/platform/projects-client/sandbox.js.map +1 -0
  218. package/dist/platform/projects-client/secrets.d.ts +122 -0
  219. package/dist/platform/projects-client/secrets.d.ts.map +1 -0
  220. package/dist/platform/projects-client/secrets.js +34 -0
  221. package/dist/platform/projects-client/secrets.js.map +1 -0
  222. package/dist/platform/projects-client/session-sandbox.d.ts +61 -0
  223. package/dist/platform/projects-client/session-sandbox.d.ts.map +1 -0
  224. package/dist/platform/projects-client/session-sandbox.js +82 -0
  225. package/dist/platform/projects-client/session-sandbox.js.map +1 -0
  226. package/dist/platform/projects-client/sessions.d.ts +216 -0
  227. package/dist/platform/projects-client/sessions.d.ts.map +1 -0
  228. package/dist/platform/projects-client/sessions.js +74 -0
  229. package/dist/platform/projects-client/sessions.js.map +1 -0
  230. package/dist/platform/projects-client/setup-links.d.ts +35 -0
  231. package/dist/platform/projects-client/setup-links.d.ts.map +1 -0
  232. package/dist/platform/projects-client/setup-links.js +24 -0
  233. package/dist/platform/projects-client/setup-links.js.map +1 -0
  234. package/dist/platform/projects-client/shared.d.ts +66 -0
  235. package/dist/platform/projects-client/shared.d.ts.map +1 -0
  236. package/dist/platform/projects-client/shared.js +44 -0
  237. package/dist/platform/projects-client/shared.js.map +1 -0
  238. package/dist/platform/projects-client/tokens.d.ts +77 -0
  239. package/dist/platform/projects-client/tokens.d.ts.map +1 -0
  240. package/dist/platform/projects-client/tokens.js +43 -0
  241. package/dist/platform/projects-client/tokens.js.map +1 -0
  242. package/dist/platform/projects-client/transcription.d.ts +5 -0
  243. package/dist/platform/projects-client/transcription.d.ts.map +1 -0
  244. package/dist/platform/projects-client/transcription.js +14 -0
  245. package/dist/platform/projects-client/transcription.js.map +1 -0
  246. package/dist/platform/projects-client/triggers.d.ts +102 -0
  247. package/dist/platform/projects-client/triggers.d.ts.map +1 -0
  248. package/dist/platform/projects-client/triggers.js +27 -0
  249. package/dist/platform/projects-client/triggers.js.map +1 -0
  250. package/dist/platform/session-id.d.ts +9 -0
  251. package/dist/platform/session-id.d.ts.map +1 -0
  252. package/dist/platform/session-id.js +23 -0
  253. package/dist/platform/session-id.js.map +1 -0
  254. package/dist/platform/storage/managed-storage.d.ts +97 -0
  255. package/dist/platform/storage/managed-storage.d.ts.map +1 -0
  256. package/dist/platform/storage/managed-storage.js +271 -0
  257. package/dist/platform/storage/managed-storage.js.map +1 -0
  258. package/dist/platform/strings.d.ts +12 -0
  259. package/dist/platform/strings.d.ts.map +1 -0
  260. package/dist/platform/strings.js +17 -0
  261. package/dist/platform/strings.js.map +1 -0
  262. package/dist/platform/ui.d.ts +11 -0
  263. package/dist/platform/ui.d.ts.map +1 -0
  264. package/dist/platform/ui.js +22 -0
  265. package/dist/platform/ui.js.map +1 -0
  266. package/dist/react/chat/index.d.ts +3 -0
  267. package/dist/react/chat/index.d.ts.map +1 -0
  268. package/dist/react/chat/index.js +7 -0
  269. package/dist/react/chat/index.js.map +1 -0
  270. package/dist/react/chat/render-parts.d.ts +39 -0
  271. package/dist/react/chat/render-parts.d.ts.map +1 -0
  272. package/dist/react/chat/render-parts.js +34 -0
  273. package/dist/react/chat/render-parts.js.map +1 -0
  274. package/dist/react/chat/use-chat-turns.d.ts +19 -0
  275. package/dist/react/chat/use-chat-turns.d.ts.map +1 -0
  276. package/dist/react/chat/use-chat-turns.js +27 -0
  277. package/dist/react/chat/use-chat-turns.js.map +1 -0
  278. package/dist/react/file-keys.d.ts +18 -0
  279. package/dist/react/file-keys.d.ts.map +1 -0
  280. package/dist/react/file-keys.js +18 -0
  281. package/dist/react/file-keys.js.map +1 -0
  282. package/dist/react/index.d.ts +12 -0
  283. package/dist/react/index.d.ts.map +1 -0
  284. package/dist/react/index.js +49 -0
  285. package/dist/react/index.js.map +1 -0
  286. package/dist/react/model-flatten.d.ts +33 -0
  287. package/dist/react/model-flatten.d.ts.map +1 -0
  288. package/dist/react/model-flatten.js +59 -0
  289. package/dist/react/model-flatten.js.map +1 -0
  290. package/dist/react/opencode.d.ts +43 -0
  291. package/dist/react/opencode.d.ts.map +1 -0
  292. package/dist/react/opencode.js +100 -0
  293. package/dist/react/opencode.js.map +1 -0
  294. package/dist/react/prefetch-session-start.d.ts +10 -0
  295. package/dist/react/prefetch-session-start.d.ts.map +1 -0
  296. package/dist/react/prefetch-session-start.js +17 -0
  297. package/dist/react/prefetch-session-start.js.map +1 -0
  298. package/dist/react/provider-refresh.d.ts +7 -0
  299. package/dist/react/provider-refresh.d.ts.map +1 -0
  300. package/dist/react/provider-refresh.js +28 -0
  301. package/dist/react/provider-refresh.js.map +1 -0
  302. package/dist/react/provider-selection.d.ts +31 -0
  303. package/dist/react/provider-selection.d.ts.map +1 -0
  304. package/dist/react/provider-selection.js +135 -0
  305. package/dist/react/provider-selection.js.map +1 -0
  306. package/dist/react/route-project.d.ts +7 -0
  307. package/dist/react/route-project.d.ts.map +1 -0
  308. package/dist/react/route-project.js +19 -0
  309. package/dist/react/route-project.js.map +1 -0
  310. package/dist/react/session-start-stash.d.ts +56 -0
  311. package/dist/react/session-start-stash.d.ts.map +1 -0
  312. package/dist/react/session-start-stash.js +202 -0
  313. package/dist/react/session-start-stash.js.map +1 -0
  314. package/dist/react/use-canonical-opencode-session.d.ts +35 -0
  315. package/dist/react/use-canonical-opencode-session.d.ts.map +1 -0
  316. package/dist/react/use-canonical-opencode-session.js +52 -0
  317. package/dist/react/use-canonical-opencode-session.js.map +1 -0
  318. package/dist/react/use-change-requests.d.ts +321 -0
  319. package/dist/react/use-change-requests.d.ts.map +1 -0
  320. package/dist/react/use-change-requests.js +43 -0
  321. package/dist/react/use-change-requests.js.map +1 -0
  322. package/dist/react/use-current-runtime.d.ts +8 -0
  323. package/dist/react/use-current-runtime.d.ts.map +1 -0
  324. package/dist/react/use-current-runtime.js +12 -0
  325. package/dist/react/use-current-runtime.js.map +1 -0
  326. package/dist/react/use-gateway-catalog-sync.d.ts +2 -0
  327. package/dist/react/use-gateway-catalog-sync.d.ts.map +1 -0
  328. package/dist/react/use-gateway-catalog-sync.js +39 -0
  329. package/dist/react/use-gateway-catalog-sync.js.map +1 -0
  330. package/dist/react/use-kortix-master.d.ts +384 -0
  331. package/dist/react/use-kortix-master.d.ts.map +1 -0
  332. package/dist/react/use-kortix-master.js +958 -0
  333. package/dist/react/use-kortix-master.js.map +1 -0
  334. package/dist/react/use-model-store.d.ts +71 -0
  335. package/dist/react/use-model-store.d.ts.map +1 -0
  336. package/dist/react/use-model-store.js +411 -0
  337. package/dist/react/use-model-store.js.map +1 -0
  338. package/dist/react/use-opencode-config.d.ts +15 -0
  339. package/dist/react/use-opencode-config.d.ts.map +1 -0
  340. package/dist/react/use-opencode-config.js +79 -0
  341. package/dist/react/use-opencode-config.js.map +1 -0
  342. package/dist/react/use-opencode-events/diagnostics.d.ts +11 -0
  343. package/dist/react/use-opencode-events/diagnostics.d.ts.map +1 -0
  344. package/dist/react/use-opencode-events/diagnostics.js +58 -0
  345. package/dist/react/use-opencode-events/diagnostics.js.map +1 -0
  346. package/dist/react/use-opencode-events/handle-event.d.ts +20 -0
  347. package/dist/react/use-opencode-events/handle-event.d.ts.map +1 -0
  348. package/dist/react/use-opencode-events/handle-event.js +450 -0
  349. package/dist/react/use-opencode-events/handle-event.js.map +1 -0
  350. package/dist/react/use-opencode-events/helpers.d.ts +30 -0
  351. package/dist/react/use-opencode-events/helpers.d.ts.map +1 -0
  352. package/dist/react/use-opencode-events/helpers.js +93 -0
  353. package/dist/react/use-opencode-events/helpers.js.map +1 -0
  354. package/dist/react/use-opencode-events/index.d.ts +25 -0
  355. package/dist/react/use-opencode-events/index.d.ts.map +1 -0
  356. package/dist/react/use-opencode-events/index.js +242 -0
  357. package/dist/react/use-opencode-events/index.js.map +1 -0
  358. package/dist/react/use-opencode-events/types.d.ts +10 -0
  359. package/dist/react/use-opencode-events/types.d.ts.map +1 -0
  360. package/dist/react/use-opencode-events/types.js +2 -0
  361. package/dist/react/use-opencode-events/types.js.map +1 -0
  362. package/dist/react/use-opencode-events/use-event-stream-refs.d.ts +22 -0
  363. package/dist/react/use-opencode-events/use-event-stream-refs.d.ts.map +1 -0
  364. package/dist/react/use-opencode-events/use-event-stream-refs.js +158 -0
  365. package/dist/react/use-opencode-events/use-event-stream-refs.js.map +1 -0
  366. package/dist/react/use-opencode-local.d.ts +139 -0
  367. package/dist/react/use-opencode-local.d.ts.map +1 -0
  368. package/dist/react/use-opencode-local.js +484 -0
  369. package/dist/react/use-opencode-local.js.map +1 -0
  370. package/dist/react/use-opencode-mcp.d.ts +34 -0
  371. package/dist/react/use-opencode-mcp.d.ts.map +1 -0
  372. package/dist/react/use-opencode-mcp.js +190 -0
  373. package/dist/react/use-opencode-mcp.js.map +1 -0
  374. package/dist/react/use-opencode-pty.d.ts +30 -0
  375. package/dist/react/use-opencode-pty.d.ts.map +1 -0
  376. package/dist/react/use-opencode-pty.js +126 -0
  377. package/dist/react/use-opencode-pty.js.map +1 -0
  378. package/dist/react/use-opencode-sessions/agents.d.ts +14 -0
  379. package/dist/react/use-opencode-sessions/agents.d.ts.map +1 -0
  380. package/dist/react/use-opencode-sessions/agents.js +82 -0
  381. package/dist/react/use-opencode-sessions/agents.js.map +1 -0
  382. package/dist/react/use-opencode-sessions/commands.d.ts +8 -0
  383. package/dist/react/use-opencode-sessions/commands.d.ts.map +1 -0
  384. package/dist/react/use-opencode-sessions/commands.js +46 -0
  385. package/dist/react/use-opencode-sessions/commands.js.map +1 -0
  386. package/dist/react/use-opencode-sessions/files.d.ts +2 -0
  387. package/dist/react/use-opencode-sessions/files.d.ts.map +1 -0
  388. package/dist/react/use-opencode-sessions/files.js +181 -0
  389. package/dist/react/use-opencode-sessions/files.js.map +1 -0
  390. package/dist/react/use-opencode-sessions/index.d.ts +15 -0
  391. package/dist/react/use-opencode-sessions/index.d.ts.map +1 -0
  392. package/dist/react/use-opencode-sessions/index.js +21 -0
  393. package/dist/react/use-opencode-sessions/index.js.map +1 -0
  394. package/dist/react/use-opencode-sessions/keys.d.ts +94 -0
  395. package/dist/react/use-opencode-sessions/keys.d.ts.map +1 -0
  396. package/dist/react/use-opencode-sessions/keys.js +39 -0
  397. package/dist/react/use-opencode-sessions/keys.js.map +1 -0
  398. package/dist/react/use-opencode-sessions/mcp.d.ts +3 -0
  399. package/dist/react/use-opencode-sessions/mcp.d.ts.map +1 -0
  400. package/dist/react/use-opencode-sessions/mcp.js +23 -0
  401. package/dist/react/use-opencode-sessions/mcp.js.map +1 -0
  402. package/dist/react/use-opencode-sessions/messages.d.ts +75 -0
  403. package/dist/react/use-opencode-sessions/messages.d.ts.map +1 -0
  404. package/dist/react/use-opencode-sessions/messages.js +319 -0
  405. package/dist/react/use-opencode-sessions/messages.js.map +1 -0
  406. package/dist/react/use-opencode-sessions/parts.d.ts +23 -0
  407. package/dist/react/use-opencode-sessions/parts.d.ts.map +1 -0
  408. package/dist/react/use-opencode-sessions/parts.js +49 -0
  409. package/dist/react/use-opencode-sessions/parts.js.map +1 -0
  410. package/dist/react/use-opencode-sessions/permissions.d.ts +17 -0
  411. package/dist/react/use-opencode-sessions/permissions.d.ts.map +1 -0
  412. package/dist/react/use-opencode-sessions/permissions.js +66 -0
  413. package/dist/react/use-opencode-sessions/permissions.js.map +1 -0
  414. package/dist/react/use-opencode-sessions/projects.d.ts +5 -0
  415. package/dist/react/use-opencode-sessions/projects.d.ts.map +1 -0
  416. package/dist/react/use-opencode-sessions/projects.js +54 -0
  417. package/dist/react/use-opencode-sessions/projects.js.map +1 -0
  418. package/dist/react/use-opencode-sessions/providers.d.ts +10 -0
  419. package/dist/react/use-opencode-sessions/providers.d.ts.map +1 -0
  420. package/dist/react/use-opencode-sessions/providers.js +98 -0
  421. package/dist/react/use-opencode-sessions/providers.js.map +1 -0
  422. package/dist/react/use-opencode-sessions/sessions.d.ts +35 -0
  423. package/dist/react/use-opencode-sessions/sessions.d.ts.map +1 -0
  424. package/dist/react/use-opencode-sessions/sessions.js +380 -0
  425. package/dist/react/use-opencode-sessions/sessions.js.map +1 -0
  426. package/dist/react/use-opencode-sessions/shared.d.ts +43 -0
  427. package/dist/react/use-opencode-sessions/shared.d.ts.map +1 -0
  428. package/dist/react/use-opencode-sessions/shared.js +109 -0
  429. package/dist/react/use-opencode-sessions/shared.js.map +1 -0
  430. package/dist/react/use-opencode-sessions/sharing.d.ts +4 -0
  431. package/dist/react/use-opencode-sessions/sharing.d.ts.map +1 -0
  432. package/dist/react/use-opencode-sessions/sharing.js +57 -0
  433. package/dist/react/use-opencode-sessions/sharing.js.map +1 -0
  434. package/dist/react/use-opencode-sessions/tools.d.ts +5 -0
  435. package/dist/react/use-opencode-sessions/tools.d.ts.map +1 -0
  436. package/dist/react/use-opencode-sessions/tools.js +54 -0
  437. package/dist/react/use-opencode-sessions/tools.js.map +1 -0
  438. package/dist/react/use-permission-self-heal.d.ts +45 -0
  439. package/dist/react/use-permission-self-heal.d.ts.map +1 -0
  440. package/dist/react/use-permission-self-heal.js +144 -0
  441. package/dist/react/use-permission-self-heal.js.map +1 -0
  442. package/dist/react/use-project-config.d.ts +11 -0
  443. package/dist/react/use-project-config.d.ts.map +1 -0
  444. package/dist/react/use-project-config.js +22 -0
  445. package/dist/react/use-project-config.js.map +1 -0
  446. package/dist/react/use-project-models.d.ts +11 -0
  447. package/dist/react/use-project-models.d.ts.map +1 -0
  448. package/dist/react/use-project-models.js +25 -0
  449. package/dist/react/use-project-models.js.map +1 -0
  450. package/dist/react/use-project-secrets.d.ts +265 -0
  451. package/dist/react/use-project-secrets.d.ts.map +1 -0
  452. package/dist/react/use-project-secrets.js +41 -0
  453. package/dist/react/use-project-secrets.js.map +1 -0
  454. package/dist/react/use-project-triggers.d.ts +228 -0
  455. package/dist/react/use-project-triggers.d.ts.map +1 -0
  456. package/dist/react/use-project-triggers.js +42 -0
  457. package/dist/react/use-project-triggers.js.map +1 -0
  458. package/dist/react/use-question-self-heal.d.ts +36 -0
  459. package/dist/react/use-question-self-heal.d.ts.map +1 -0
  460. package/dist/react/use-question-self-heal.js +95 -0
  461. package/dist/react/use-question-self-heal.js.map +1 -0
  462. package/dist/react/use-runtime-phase.d.ts +9 -0
  463. package/dist/react/use-runtime-phase.d.ts.map +1 -0
  464. package/dist/react/use-runtime-phase.js +20 -0
  465. package/dist/react/use-runtime-phase.js.map +1 -0
  466. package/dist/react/use-runtime-reconnect.d.ts +90 -0
  467. package/dist/react/use-runtime-reconnect.d.ts.map +1 -0
  468. package/dist/react/use-runtime-reconnect.js +234 -0
  469. package/dist/react/use-runtime-reconnect.js.map +1 -0
  470. package/dist/react/use-session-picks.d.ts +17 -0
  471. package/dist/react/use-session-picks.d.ts.map +1 -0
  472. package/dist/react/use-session-picks.js +36 -0
  473. package/dist/react/use-session-picks.js.map +1 -0
  474. package/dist/react/use-session-prefetch.d.ts +18 -0
  475. package/dist/react/use-session-prefetch.d.ts.map +1 -0
  476. package/dist/react/use-session-prefetch.js +84 -0
  477. package/dist/react/use-session-prefetch.js.map +1 -0
  478. package/dist/react/use-session-send.d.ts +183 -0
  479. package/dist/react/use-session-send.d.ts.map +1 -0
  480. package/dist/react/use-session-send.js +287 -0
  481. package/dist/react/use-session-send.js.map +1 -0
  482. package/dist/react/use-session-sync.d.ts +24 -0
  483. package/dist/react/use-session-sync.d.ts.map +1 -0
  484. package/dist/react/use-session-sync.js +375 -0
  485. package/dist/react/use-session-sync.js.map +1 -0
  486. package/dist/react/use-session.d.ts +171 -0
  487. package/dist/react/use-session.d.ts.map +1 -0
  488. package/dist/react/use-session.js +396 -0
  489. package/dist/react/use-session.js.map +1 -0
  490. package/dist/react/use-visible-agents.d.ts +22 -0
  491. package/dist/react/use-visible-agents.d.ts.map +1 -0
  492. package/dist/react/use-visible-agents.js +45 -0
  493. package/dist/react/use-visible-agents.js.map +1 -0
  494. package/dist/server.d.ts +55 -0
  495. package/dist/server.d.ts.map +1 -0
  496. package/dist/server.js +122 -0
  497. package/dist/server.js.map +1 -0
  498. package/dist/session/health.d.ts +49 -0
  499. package/dist/session/health.d.ts.map +1 -0
  500. package/dist/session/health.js +57 -0
  501. package/dist/session/health.js.map +1 -0
  502. package/dist/session/index.d.ts +19 -0
  503. package/dist/session/index.d.ts.map +1 -0
  504. package/dist/session/index.js +19 -0
  505. package/dist/session/index.js.map +1 -0
  506. package/dist/session/preview.d.ts +24 -0
  507. package/dist/session/preview.d.ts.map +1 -0
  508. package/dist/session/preview.js +85 -0
  509. package/dist/session/preview.js.map +1 -0
  510. package/dist/session/url.d.ts +160 -0
  511. package/dist/session/url.d.ts.map +1 -0
  512. package/dist/session/url.js +522 -0
  513. package/dist/session/url.js.map +1 -0
  514. package/dist/state/chat-events.d.ts +141 -0
  515. package/dist/state/chat-events.d.ts.map +1 -0
  516. package/dist/state/chat-events.js +135 -0
  517. package/dist/state/chat-events.js.map +1 -0
  518. package/dist/state/current-runtime.d.ts +44 -0
  519. package/dist/state/current-runtime.d.ts.map +1 -0
  520. package/dist/state/current-runtime.js +44 -0
  521. package/dist/state/current-runtime.js.map +1 -0
  522. package/dist/state/diagnostics-store.d.ts +114 -0
  523. package/dist/state/diagnostics-store.d.ts.map +1 -0
  524. package/dist/state/diagnostics-store.js +319 -0
  525. package/dist/state/diagnostics-store.js.map +1 -0
  526. package/dist/state/event-stream.d.ts +134 -0
  527. package/dist/state/event-stream.d.ts.map +1 -0
  528. package/dist/state/event-stream.js +424 -0
  529. package/dist/state/event-stream.js.map +1 -0
  530. package/dist/state/idb-sync-cache.d.ts +18 -0
  531. package/dist/state/idb-sync-cache.d.ts.map +1 -0
  532. package/dist/state/idb-sync-cache.js +209 -0
  533. package/dist/state/idb-sync-cache.js.map +1 -0
  534. package/dist/state/opencode-compaction-store.d.ts +10 -0
  535. package/dist/state/opencode-compaction-store.d.ts.map +1 -0
  536. package/dist/state/opencode-compaction-store.js +32 -0
  537. package/dist/state/opencode-compaction-store.js.map +1 -0
  538. package/dist/state/opencode-pending-store.d.ts +19 -0
  539. package/dist/state/opencode-pending-store.d.ts.map +1 -0
  540. package/dist/state/opencode-pending-store.js +76 -0
  541. package/dist/state/opencode-pending-store.js.map +1 -0
  542. package/dist/state/sandbox-connection-store.d.ts +62 -0
  543. package/dist/state/sandbox-connection-store.d.ts.map +1 -0
  544. package/dist/state/sandbox-connection-store.js +290 -0
  545. package/dist/state/sandbox-connection-store.js.map +1 -0
  546. package/dist/state/server-store/active.d.ts +49 -0
  547. package/dist/state/server-store/active.d.ts.map +1 -0
  548. package/dist/state/server-store/active.js +76 -0
  549. package/dist/state/server-store/active.js.map +1 -0
  550. package/dist/state/server-store/types.d.ts +12 -0
  551. package/dist/state/server-store/types.d.ts.map +1 -0
  552. package/dist/state/server-store/types.js +2 -0
  553. package/dist/state/server-store/types.js.map +1 -0
  554. package/dist/state/server-store/url-helpers.d.ts +33 -0
  555. package/dist/state/server-store/url-helpers.d.ts.map +1 -0
  556. package/dist/state/server-store/url-helpers.js +55 -0
  557. package/dist/state/server-store/url-helpers.js.map +1 -0
  558. package/dist/state/server-store.d.ts +18 -0
  559. package/dist/state/server-store.d.ts.map +1 -0
  560. package/dist/state/server-store.js +23 -0
  561. package/dist/state/server-store.js.map +1 -0
  562. package/dist/state/session-runtime-registry.d.ts +49 -0
  563. package/dist/state/session-runtime-registry.d.ts.map +1 -0
  564. package/dist/state/session-runtime-registry.js +85 -0
  565. package/dist/state/session-runtime-registry.js.map +1 -0
  566. package/dist/state/sync-store/ascending-id.d.ts +2 -0
  567. package/dist/state/sync-store/ascending-id.d.ts.map +1 -0
  568. package/dist/state/sync-store/ascending-id.js +21 -0
  569. package/dist/state/sync-store/ascending-id.js.map +1 -0
  570. package/dist/state/sync-store/binary.d.ts +7 -0
  571. package/dist/state/sync-store/binary.d.ts.map +1 -0
  572. package/dist/state/sync-store/binary.js +21 -0
  573. package/dist/state/sync-store/binary.js.map +1 -0
  574. package/dist/state/sync-store/stream-cache.d.ts +2 -0
  575. package/dist/state/sync-store/stream-cache.d.ts.map +1 -0
  576. package/dist/state/sync-store/stream-cache.js +29 -0
  577. package/dist/state/sync-store/stream-cache.js.map +1 -0
  578. package/dist/state/sync-store/types.d.ts +29 -0
  579. package/dist/state/sync-store/types.d.ts.map +1 -0
  580. package/dist/state/sync-store/types.js +2 -0
  581. package/dist/state/sync-store/types.js.map +1 -0
  582. package/dist/state/sync-store.d.ts +39 -0
  583. package/dist/state/sync-store.d.ts.map +1 -0
  584. package/dist/state/sync-store.js +692 -0
  585. package/dist/state/sync-store.js.map +1 -0
  586. package/dist/state/tab-store.d.ts +91 -0
  587. package/dist/state/tab-store.d.ts.map +1 -0
  588. package/dist/state/tab-store.js +369 -0
  589. package/dist/state/tab-store.js.map +1 -0
  590. package/dist/transcript.d.ts +40 -0
  591. package/dist/transcript.d.ts.map +1 -0
  592. package/dist/transcript.js +126 -0
  593. package/dist/transcript.js.map +1 -0
  594. package/dist/turns/classify.d.ts +166 -0
  595. package/dist/turns/classify.d.ts.map +1 -0
  596. package/dist/turns/classify.js +259 -0
  597. package/dist/turns/classify.js.map +1 -0
  598. package/dist/turns/errors.d.ts +11 -0
  599. package/dist/turns/errors.d.ts.map +1 -0
  600. package/dist/turns/errors.js +85 -0
  601. package/dist/turns/errors.js.map +1 -0
  602. package/dist/turns/index.d.ts +264 -0
  603. package/dist/turns/index.d.ts.map +1 -0
  604. package/dist/turns/index.js +1243 -0
  605. package/dist/turns/index.js.map +1 -0
  606. package/dist/turns/tool-registry.d.ts +33 -0
  607. package/dist/turns/tool-registry.d.ts.map +1 -0
  608. package/dist/turns/tool-registry.js +108 -0
  609. package/dist/turns/tool-registry.js.map +1 -0
  610. package/dist/turns/types.d.ts +125 -0
  611. package/dist/turns/types.d.ts.map +1 -0
  612. package/dist/turns/types.js +12 -0
  613. package/dist/turns/types.js.map +1 -0
  614. package/dist/turns/view-model.d.ts +127 -0
  615. package/dist/turns/view-model.d.ts.map +1 -0
  616. package/dist/turns/view-model.js +401 -0
  617. package/dist/turns/view-model.js.map +1 -0
  618. package/package.json +155 -0
@@ -0,0 +1,109 @@
1
+ import { ScopedCache } from '../../platform/storage/managed-storage.js';
2
+ import { getCurrentRuntimeSandboxId } from '../../state/current-runtime.js';
3
+ // ============================================================================
4
+ // Query Keys
5
+ // ============================================================================
6
+ /**
7
+ * Active sandbox/server id, used to scope per-sandbox caches.
8
+ *
9
+ * Each project session is its OWN sandbox (session_id == sandbox_id), but the
10
+ * OpenCode SDK client + caches are global. Without scoping, switching from
11
+ * session A to B would show A's data under B — which is why the code used to
12
+ * NUKE the entire opencode cache on every switch. That nuke is exactly what
13
+ * made returning to an already-open session "reload".
14
+ *
15
+ * By appending the server id to per-sandbox cache keys, every sandbox's data
16
+ * coexists in the cache, so returning to a warm session is instant and we no
17
+ * longer need to tear anything down. Appended at the END so existing prefix
18
+ * matches (e.g. invalidate `['opencode','sessions']`) still hit.
19
+ *
20
+ * `session(id)` / `messages(id)` stay global: opencode session ids are unique
21
+ * per sandbox, so they never collide across sandboxes.
22
+ */
23
+ export function activeServerKey() {
24
+ try {
25
+ return getCurrentRuntimeSandboxId() ?? 'none';
26
+ }
27
+ catch {
28
+ return 'none';
29
+ }
30
+ }
31
+ // ============================================================================
32
+ // Helper: unwrap SDK response (data / error)
33
+ // ============================================================================
34
+ export function unwrap(result) {
35
+ if (result.error) {
36
+ const err = result.error;
37
+ const status = result.response?.status;
38
+ // Try to extract the most specific error message from the SDK response.
39
+ // `error` is genuinely `unknown` here — its shape varies by which SDK
40
+ // call produced it (typed error unions differ per endpoint) — so this
41
+ // duck-types defensively instead of assuming a shape.
42
+ const errRec = err && typeof err === 'object' ? err : undefined;
43
+ const dataRec = errRec?.data && typeof errRec.data === 'object' ? errRec.data : undefined;
44
+ const msg = dataRec?.message ||
45
+ errRec?.message ||
46
+ errRec?.error ||
47
+ (typeof err === 'string' ? err : null) ||
48
+ (typeof err === 'object' ? JSON.stringify(err) : null) ||
49
+ (status ? `Server returned ${status}` : 'SDK request failed');
50
+ throw new Error(String(msg));
51
+ }
52
+ return result.data;
53
+ }
54
+ // ============================================================================
55
+ // Session Hooks
56
+ // ============================================================================
57
+ // localStorage placeholder caches are per-sandbox too — scope by active server
58
+ // id so re-opening a warm session paints its OWN last data, never the previous
59
+ // sandbox's. Scoping lives in the helpers so every call site inherits it.
60
+ //
61
+ // These are backed by ScopedCache, which caps each family to its N
62
+ // most-recently-used scopes. That cap is the whole point: the default scope is
63
+ // the EPHEMERAL per-sandbox server id, so without a cap every new session would
64
+ // leak a fresh `kortix_cache_*:<serverId>` blob forever and eventually blow the
65
+ // localStorage quota (which then crashes whatever store writes next). The cache
66
+ // is disposable — a miss just refetches — so small caps are safe.
67
+ export const LS_SESSIONS = 'kortix_cache_sessions';
68
+ export const LS_AGENTS = 'kortix_cache_agents';
69
+ export const LS_COMMANDS = 'kortix_cache_commands';
70
+ export const LS_PROVIDERS = 'kortix_cache_providers';
71
+ // Session/command lists are keyed per ephemeral sandbox — keep only the few
72
+ // most-recent sandboxes warm. Agents are keyed per directory (+ global), which
73
+ // is a small, stable space, so it gets more headroom. Providers are global.
74
+ const sessionsCache = new ScopedCache(LS_SESSIONS, 4);
75
+ const agentsCache = new ScopedCache(LS_AGENTS, 8);
76
+ const commandsCache = new ScopedCache(LS_COMMANDS, 4);
77
+ const providersCache = new ScopedCache(LS_PROVIDERS, 2);
78
+ const cacheByFamily = {
79
+ [LS_SESSIONS]: sessionsCache,
80
+ [LS_AGENTS]: agentsCache,
81
+ [LS_COMMANDS]: commandsCache,
82
+ [LS_PROVIDERS]: providersCache,
83
+ };
84
+ export function getLSCache(family, scope) {
85
+ return cacheByFamily[family]?.get(scope ?? activeServerKey());
86
+ }
87
+ export function setLSCache(family, value, scope) {
88
+ cacheByFamily[family]?.set(scope ?? activeServerKey(), value);
89
+ }
90
+ const PROJECT_SESSION_UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
91
+ export function canQueryOpenCodeSession(sessionId) {
92
+ return !!sessionId && !PROJECT_SESSION_UUID_RE.test(sessionId);
93
+ }
94
+ export function clearProjectProviderCache(projectId) {
95
+ providersCache.remove(`proj:${projectId}:native`);
96
+ providersCache.remove(`proj:${projectId}:gateway`);
97
+ }
98
+ /**
99
+ * Stable cache scope for data that does NOT vary per sandbox. The default
100
+ * scope is the ephemeral per-sandbox server id, which is correct for
101
+ * session-specific data (session lists collide across sandboxes) but wrong for
102
+ * platform/project-level data like the model list and the agent roster: those
103
+ * are identical across every sandbox, yet a per-server key guarantees a cache
104
+ * MISS on every brand-new session (new sandbox → new server id → never seen).
105
+ * Keying them here instead lets a fresh session paint its pickers from cache on
106
+ * the first frame, before the sandbox is even up — killing the visible pop-in.
107
+ */
108
+ export const CACHE_SCOPE_GLOBAL = 'global';
109
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/react/use-opencode-sessions/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAQzE,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC;QACH,OAAO,0BAA0B,EAAE,IAAI,MAAM,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,6CAA6C;AAC7C,+EAA+E;AAE/E,MAAM,UAAU,MAAM,CAAI,MAA0D;IAClF,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;QACzB,MAAM,MAAM,GAAI,MAAM,CAAC,QAAiC,EAAE,MAAM,CAAC;QACjE,wEAAwE;QACxE,sEAAsE;QACtE,sEAAsE;QACtE,sDAAsD;QACtD,MAAM,MAAM,GAAG,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAE,GAA+B,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7F,MAAM,OAAO,GACX,MAAM,EAAE,IAAI,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,MAAM,CAAC,IAAgC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzG,MAAM,GAAG,GACP,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,OAAO;YACf,MAAM,EAAE,KAAK;YACb,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YACtC,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACtD,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,MAAM,CAAC,IAAS,CAAC;AAC1B,CAAC;AAED,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E,+EAA+E;AAC/E,+EAA+E;AAC/E,0EAA0E;AAC1E,EAAE;AACF,mEAAmE;AACnE,+EAA+E;AAC/E,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,kEAAkE;AAClE,MAAM,CAAC,MAAM,WAAW,GAAG,uBAAuB,CAAC;AACnD,MAAM,CAAC,MAAM,SAAS,GAAG,qBAAqB,CAAC;AAC/C,MAAM,CAAC,MAAM,WAAW,GAAG,uBAAuB,CAAC;AACnD,MAAM,CAAC,MAAM,YAAY,GAAG,wBAAwB,CAAC;AAErD,4EAA4E;AAC5E,+EAA+E;AAC/E,4EAA4E;AAC5E,MAAM,aAAa,GAAG,IAAI,WAAW,CAAY,WAAW,EAAE,CAAC,CAAC,CAAC;AACjE,MAAM,WAAW,GAAG,IAAI,WAAW,CAAU,SAAS,EAAE,CAAC,CAAC,CAAC;AAC3D,MAAM,aAAa,GAAG,IAAI,WAAW,CAAY,WAAW,EAAE,CAAC,CAAC,CAAC;AACjE,MAAM,cAAc,GAAG,IAAI,WAAW,CAA0B,YAAY,EAAE,CAAC,CAAC,CAAC;AAEjF,MAAM,aAAa,GAAyC;IAC1D,CAAC,WAAW,CAAC,EAAE,aAAa;IAC5B,CAAC,SAAS,CAAC,EAAE,WAAW;IACxB,CAAC,WAAW,CAAC,EAAE,aAAa;IAC5B,CAAC,YAAY,CAAC,EAAE,cAAc;CAC/B,CAAC;AAEF,MAAM,UAAU,UAAU,CAAI,MAAc,EAAE,KAAc;IAC1D,OAAO,aAAa,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,eAAe,EAAE,CAAkB,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,KAAc,EAAE,KAAc;IACvE,aAAa,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,eAAe,EAAE,EAAE,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,uBAAuB,GAC3B,4EAA4E,CAAC;AAE/E,MAAM,UAAU,uBAAuB,CAAC,SAAoC;IAC1E,OAAO,CAAC,CAAC,SAAS,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,SAAiB;IACzD,cAAc,CAAC,MAAM,CAAC,QAAQ,SAAS,SAAS,CAAC,CAAC;IAClD,cAAc,CAAC,MAAM,CAAC,QAAQ,SAAS,UAAU,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Session } from '@opencode-ai/sdk/v2/client';
2
+ export declare function useShareSession(): import("@tanstack/react-query").UseMutationResult<Session, Error, string, unknown>;
3
+ export declare function useUnshareSession(): import("@tanstack/react-query").UseMutationResult<Session, Error, string, unknown>;
4
+ //# sourceMappingURL=sharing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sharing.d.ts","sourceRoot":"","sources":["../../../src/react/use-opencode-sessions/sharing.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAQ1D,wBAAgB,eAAe,uFAsB9B;AAED,wBAAgB,iBAAiB,uFAsBhC"}
@@ -0,0 +1,57 @@
1
+ 'use client';
2
+ import { useMutation, useQueryClient } from '@tanstack/react-query';
3
+ import { getClient } from '../../opencode/client.js';
4
+ import { opencodeKeys } from './keys.js';
5
+ import { unwrap } from './shared.js';
6
+ // ============================================================================
7
+ // Share / Unshare Hooks
8
+ // ============================================================================
9
+ export function useShareSession() {
10
+ const queryClient = useQueryClient();
11
+ return useMutation({
12
+ mutationFn: async (sessionId) => {
13
+ const client = getClient();
14
+ const result = await client.session.share({ sessionID: sessionId });
15
+ return unwrap(result);
16
+ },
17
+ onSuccess: (updatedSession) => {
18
+ // Surgically update cache with share info
19
+ queryClient.setQueryData(opencodeKeys.session(updatedSession.id), updatedSession);
20
+ queryClient.setQueryData(opencodeKeys.sessions(), (old) => {
21
+ if (!old)
22
+ return old;
23
+ const idx = old.findIndex((s) => s.id === updatedSession.id);
24
+ if (idx < 0)
25
+ return old;
26
+ const next = [...old];
27
+ next[idx] = updatedSession;
28
+ return next;
29
+ });
30
+ },
31
+ });
32
+ }
33
+ export function useUnshareSession() {
34
+ const queryClient = useQueryClient();
35
+ return useMutation({
36
+ mutationFn: async (sessionId) => {
37
+ const client = getClient();
38
+ const result = await client.session.unshare({ sessionID: sessionId });
39
+ return unwrap(result);
40
+ },
41
+ onSuccess: (updatedSession) => {
42
+ // Surgically update cache with unshare info
43
+ queryClient.setQueryData(opencodeKeys.session(updatedSession.id), updatedSession);
44
+ queryClient.setQueryData(opencodeKeys.sessions(), (old) => {
45
+ if (!old)
46
+ return old;
47
+ const idx = old.findIndex((s) => s.id === updatedSession.id);
48
+ if (idx < 0)
49
+ return old;
50
+ const next = [...old];
51
+ next[idx] = updatedSession;
52
+ return next;
53
+ });
54
+ },
55
+ });
56
+ }
57
+ //# sourceMappingURL=sharing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sharing.js","sourceRoot":"","sources":["../../../src/react/use-opencode-sessions/sharing.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E,MAAM,UAAU,eAAe;IAC7B,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,OAAO,WAAW,CAAC;QACjB,UAAU,EAAE,KAAK,EAAE,SAAiB,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YACpE,OAAO,MAAM,CAAC,MAAM,CAAY,CAAC;QACnC,CAAC;QACD,SAAS,EAAE,CAAC,cAAc,EAAE,EAAE;YAC5B,0CAA0C;YAC1C,WAAW,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;YAClF,WAAW,CAAC,YAAY,CAAY,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;gBACnE,IAAI,CAAC,GAAG;oBAAE,OAAO,GAAG,CAAC;gBACrB,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,cAAc,CAAC,EAAE,CAAC,CAAC;gBAC7D,IAAI,GAAG,GAAG,CAAC;oBAAE,OAAO,GAAG,CAAC;gBACxB,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;gBACtB,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC;gBAC3B,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,OAAO,WAAW,CAAC;QACjB,UAAU,EAAE,KAAK,EAAE,SAAiB,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YACtE,OAAO,MAAM,CAAC,MAAM,CAAY,CAAC;QACnC,CAAC;QACD,SAAS,EAAE,CAAC,cAAc,EAAE,EAAE;YAC5B,4CAA4C;YAC5C,WAAW,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;YAClF,WAAW,CAAC,YAAY,CAAY,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;gBACnE,IAAI,CAAC,GAAG;oBAAE,OAAO,GAAG,CAAC;gBACrB,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,cAAc,CAAC,EAAE,CAAC,CAAC;gBAC7D,IAAI,GAAG,GAAG,CAAC;oBAAE,OAAO,GAAG,CAAC;gBACxB,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;gBACtB,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC;gBAC3B,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Skill, ToolListItem } from './keys.js';
2
+ export declare function useOpenCodeToolIds(): import("@tanstack/react-query").UseQueryResult<NoInfer<string[]>, Error>;
3
+ export declare function useOpenCodeTools(providerID: string, modelID: string): import("@tanstack/react-query").UseQueryResult<NoInfer<ToolListItem[]>, Error>;
4
+ export declare function useOpenCodeSkills(): import("@tanstack/react-query").UseQueryResult<NoInfer<Skill[]>, Error>;
5
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/react/use-opencode-sessions/tools.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAOlD,wBAAgB,kBAAkB,6EAajC;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,kFAanE;AAMD,wBAAgB,iBAAiB,4EAahC"}
@@ -0,0 +1,54 @@
1
+ 'use client';
2
+ import { useQuery } from '@tanstack/react-query';
3
+ import { getClient } from '../../opencode/client.js';
4
+ import { opencodeKeys, useOpenCodeRuntimeReady } from './keys.js';
5
+ import { unwrap } from './shared.js';
6
+ // ============================================================================
7
+ // Tool Hooks
8
+ // ============================================================================
9
+ export function useOpenCodeToolIds() {
10
+ const runtimeReady = useOpenCodeRuntimeReady();
11
+ return useQuery({
12
+ queryKey: opencodeKeys.toolIds(),
13
+ queryFn: async () => {
14
+ const client = getClient();
15
+ const result = await client.tool.ids();
16
+ return unwrap(result);
17
+ },
18
+ enabled: runtimeReady,
19
+ staleTime: Infinity,
20
+ gcTime: 10 * 60 * 1000,
21
+ });
22
+ }
23
+ export function useOpenCodeTools(providerID, modelID) {
24
+ const runtimeReady = useOpenCodeRuntimeReady();
25
+ return useQuery({
26
+ queryKey: opencodeKeys.tools(providerID, modelID),
27
+ queryFn: async () => {
28
+ const client = getClient();
29
+ const result = await client.tool.list({ provider: providerID, model: modelID });
30
+ return unwrap(result);
31
+ },
32
+ enabled: runtimeReady && !!providerID && !!modelID,
33
+ staleTime: Infinity,
34
+ gcTime: 10 * 60 * 1000,
35
+ });
36
+ }
37
+ // ============================================================================
38
+ // Skill Hooks
39
+ // ============================================================================
40
+ export function useOpenCodeSkills() {
41
+ const runtimeReady = useOpenCodeRuntimeReady();
42
+ return useQuery({
43
+ queryKey: opencodeKeys.skills(),
44
+ queryFn: async () => {
45
+ const client = getClient();
46
+ const result = await client.app.skills();
47
+ return unwrap(result);
48
+ },
49
+ enabled: runtimeReady,
50
+ staleTime: Infinity,
51
+ gcTime: 10 * 60 * 1000,
52
+ });
53
+ }
54
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/react/use-opencode-sessions/tools.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,QAAQ,CAAC;AAE/D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E,MAAM,UAAU,kBAAkB;IAChC,MAAM,YAAY,GAAG,uBAAuB,EAAE,CAAC;IAC/C,OAAO,QAAQ,CAAW;QACxB,QAAQ,EAAE,YAAY,CAAC,OAAO,EAAE;QAChC,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACvC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,EAAE,YAAY;QACrB,SAAS,EAAE,QAAQ;QACnB,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;KACvB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,UAAkB,EAAE,OAAe;IAClE,MAAM,YAAY,GAAG,uBAAuB,EAAE,CAAC;IAC/C,OAAO,QAAQ,CAAiB;QAC9B,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC;QACjD,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YAChF,OAAO,MAAM,CAAC,MAAM,CAAmB,CAAC;QAC1C,CAAC;QACD,OAAO,EAAE,YAAY,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,OAAO;QAClD,SAAS,EAAE,QAAQ;QACnB,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;KACvB,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E,MAAM,UAAU,iBAAiB;IAC/B,MAAM,YAAY,GAAG,uBAAuB,EAAE,CAAC;IAC/C,OAAO,QAAQ,CAAU;QACvB,QAAQ,EAAE,YAAY,CAAC,MAAM,EAAE;QAC/B,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YACzC,OAAO,MAAM,CAAC,MAAM,CAAY,CAAC;QACnC,CAAC;QACD,OAAO,EAAE,YAAY;QACrB,SAAS,EAAE,QAAQ;QACnB,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;KACvB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,45 @@
1
+ import type { MessageWithPartsLike } from '../turns/types.js';
2
+ /**
3
+ * Classify tool parts that could be blocked on an unanswered permission ask.
4
+ * Unlike questions (their own `question` tool), a permission can gate ANY tool
5
+ * (bash, edit, write, …), so the signal is fuzzier — two shapes qualify:
6
+ *
7
+ * - `pending` with non-empty input: args are fully streamed but execution never
8
+ * started. Transiently true for every tool for a frame or two, durably true
9
+ * for one blocked on a permission ask. (`pending` with EMPTY input is the
10
+ * known "session ended abruptly" stale shape — ignored.)
11
+ * - `running` for a long time: covers opencode versions/tools where a blocked
12
+ * part reports `running`. Fuzzy on purpose — a long bash command looks the
13
+ * same — so callers poll this shape on a much slower cadence.
14
+ *
15
+ * Returns which shapes are present so the hook can pick a poll cadence.
16
+ */
17
+ export declare function findPermissionBlockedCandidate(messages: MessageWithPartsLike[] | undefined, now: number): {
18
+ pendingWithInput: boolean;
19
+ staleRunning: boolean;
20
+ };
21
+ /** True when any non-question tool part is still running/pending — the cheap
22
+ * render-time gate that keeps the poll effect mounted at all. */
23
+ export declare function hasActiveNonQuestionTool(messages: MessageWithPartsLike[] | undefined): boolean;
24
+ export interface UsePermissionSelfHealOptions {
25
+ /** Gate the whole poll — e.g. only while this session's tab/view is active.
26
+ * Default true. */
27
+ enabled?: boolean;
28
+ }
29
+ /**
30
+ * Self-heals a missed `permission.asked` SSE event — the permission twin of
31
+ * `useQuestionSelfHeal`, closing the gap where a dropped frame leaves the agent
32
+ * silently blocked on an ask the user never sees (the "have to type `continue`
33
+ * to unwedge it" failure).
34
+ *
35
+ * Because a permission can gate any tool, the trigger is fuzzier than the
36
+ * question hook's, so the cadence is shape-dependent (see
37
+ * `findPermissionBlockedCandidate`): a `pending`-with-input part re-checks
38
+ * `permission.list()` every ~2s like the question hook; a merely long-`running`
39
+ * part — which a legitimate slow bash command also produces — is probed at most
40
+ * every 15s so an active session never gets hammered. The poll stops the moment
41
+ * a pending permission shows up (from this poll or the SSE event finally
42
+ * arriving) or the tool part settles.
43
+ */
44
+ export declare function usePermissionSelfHeal(sessionId: string, messages: MessageWithPartsLike[] | undefined, options?: UsePermissionSelfHealOptions): void;
45
+ //# sourceMappingURL=use-permission-self-heal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-permission-self-heal.d.ts","sourceRoot":"","sources":["../../src/react/use-permission-self-heal.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAgB,MAAM,gBAAgB,CAAC;AAMzE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,oBAAoB,EAAE,GAAG,SAAS,EAC5C,GAAG,EAAE,MAAM,GACV;IAAE,gBAAgB,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,CAyBtD;AAED;iEACiE;AACjE,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,SAAS,GAAG,OAAO,CAW9F;AAED,MAAM,WAAW,4BAA4B;IAC3C;uBACmB;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,oBAAoB,EAAE,GAAG,SAAS,EAC5C,OAAO,GAAE,4BAAiC,GACzC,IAAI,CAiEN"}
@@ -0,0 +1,144 @@
1
+ 'use client';
2
+ import { useEffect, useMemo, useRef } from 'react';
3
+ import { getClient } from '../opencode/client.js';
4
+ import { useOpenCodePendingStore } from '../state/opencode-pending-store.js';
5
+ /** A tool stuck in `running` this long with nothing pending is suspicious —
6
+ * long enough that ordinary tool startup never trips it. */
7
+ const STALE_RUNNING_MS = 10_000;
8
+ /**
9
+ * Classify tool parts that could be blocked on an unanswered permission ask.
10
+ * Unlike questions (their own `question` tool), a permission can gate ANY tool
11
+ * (bash, edit, write, …), so the signal is fuzzier — two shapes qualify:
12
+ *
13
+ * - `pending` with non-empty input: args are fully streamed but execution never
14
+ * started. Transiently true for every tool for a frame or two, durably true
15
+ * for one blocked on a permission ask. (`pending` with EMPTY input is the
16
+ * known "session ended abruptly" stale shape — ignored.)
17
+ * - `running` for a long time: covers opencode versions/tools where a blocked
18
+ * part reports `running`. Fuzzy on purpose — a long bash command looks the
19
+ * same — so callers poll this shape on a much slower cadence.
20
+ *
21
+ * Returns which shapes are present so the hook can pick a poll cadence.
22
+ */
23
+ export function findPermissionBlockedCandidate(messages, now) {
24
+ let pendingWithInput = false;
25
+ let staleRunning = false;
26
+ if (!messages)
27
+ return { pendingWithInput, staleRunning };
28
+ for (const m of messages) {
29
+ if (m.info.role !== 'assistant')
30
+ continue;
31
+ for (const p of m.parts) {
32
+ if (p.type !== 'tool')
33
+ continue;
34
+ const tool = p;
35
+ // Questions have their own self-heal (`useQuestionSelfHeal`).
36
+ if (tool.tool === 'question')
37
+ continue;
38
+ const state = tool.state;
39
+ if (state.status === 'pending' && Object.keys(state.input ?? {}).length > 0) {
40
+ pendingWithInput = true;
41
+ }
42
+ else if (state.status === 'running') {
43
+ const start = state.time?.start;
44
+ if (typeof start === 'number' && now - start > STALE_RUNNING_MS)
45
+ staleRunning = true;
46
+ }
47
+ }
48
+ }
49
+ return { pendingWithInput, staleRunning };
50
+ }
51
+ /** True when any non-question tool part is still running/pending — the cheap
52
+ * render-time gate that keeps the poll effect mounted at all. */
53
+ export function hasActiveNonQuestionTool(messages) {
54
+ if (!messages)
55
+ return false;
56
+ return messages.some((m) => {
57
+ if (m.info.role !== 'assistant')
58
+ return false;
59
+ return m.parts.some((p) => {
60
+ if (p.type !== 'tool')
61
+ return false;
62
+ const tool = p;
63
+ if (tool.tool === 'question')
64
+ return false;
65
+ return tool.state.status === 'running' || tool.state.status === 'pending';
66
+ });
67
+ });
68
+ }
69
+ /**
70
+ * Self-heals a missed `permission.asked` SSE event — the permission twin of
71
+ * `useQuestionSelfHeal`, closing the gap where a dropped frame leaves the agent
72
+ * silently blocked on an ask the user never sees (the "have to type `continue`
73
+ * to unwedge it" failure).
74
+ *
75
+ * Because a permission can gate any tool, the trigger is fuzzier than the
76
+ * question hook's, so the cadence is shape-dependent (see
77
+ * `findPermissionBlockedCandidate`): a `pending`-with-input part re-checks
78
+ * `permission.list()` every ~2s like the question hook; a merely long-`running`
79
+ * part — which a legitimate slow bash command also produces — is probed at most
80
+ * every 15s so an active session never gets hammered. The poll stops the moment
81
+ * a pending permission shows up (from this poll or the SSE event finally
82
+ * arriving) or the tool part settles.
83
+ */
84
+ export function usePermissionSelfHeal(sessionId, messages, options = {}) {
85
+ const { enabled = true } = options;
86
+ const addPermission = useOpenCodePendingStore((s) => s.addPermission);
87
+ const pendingCount = useOpenCodePendingStore((s) => Object.values(s.permissions).filter((p) => p.sessionID === sessionId).length);
88
+ const active = useMemo(() => hasActiveNonQuestionTool(messages), [messages]);
89
+ const messagesRef = useRef(messages);
90
+ messagesRef.current = messages;
91
+ const inFlightRef = useRef(false);
92
+ const lastAtRef = useRef(0);
93
+ useEffect(() => {
94
+ if (!enabled || !active || pendingCount > 0)
95
+ return;
96
+ let cancelled = false;
97
+ const hydrate = () => {
98
+ if (inFlightRef.current || cancelled)
99
+ return;
100
+ const now = Date.now();
101
+ // Evaluate the blocked-candidate shapes at poll time, not render time —
102
+ // a part silently aging past the stale threshold produces no re-render.
103
+ const { pendingWithInput, staleRunning } = findPermissionBlockedCandidate(messagesRef.current, now);
104
+ if (!pendingWithInput && !staleRunning)
105
+ return;
106
+ const minGap = pendingWithInput ? 1_500 : 15_000;
107
+ if (now - lastAtRef.current < minGap)
108
+ return;
109
+ // Acquire the client lazily: during the sandbox-loading window
110
+ // getClient() throws "Server URL not ready". Skip this tick and let the
111
+ // interval retry once the runtime URL is pinned — never throw here.
112
+ let client;
113
+ try {
114
+ client = getClient();
115
+ }
116
+ catch {
117
+ return;
118
+ }
119
+ inFlightRef.current = true;
120
+ lastAtRef.current = now;
121
+ void client.permission
122
+ .list()
123
+ .then((res) => {
124
+ if (!res.data || cancelled)
125
+ return;
126
+ res.data.forEach((p) => {
127
+ if (!p?.id)
128
+ return;
129
+ addPermission(p);
130
+ });
131
+ })
132
+ .finally(() => {
133
+ inFlightRef.current = false;
134
+ });
135
+ };
136
+ hydrate();
137
+ const timer = setInterval(hydrate, 2_000);
138
+ return () => {
139
+ cancelled = true;
140
+ clearInterval(timer);
141
+ };
142
+ }, [enabled, active, pendingCount, addPermission]);
143
+ }
144
+ //# sourceMappingURL=use-permission-self-heal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-permission-self-heal.js","sourceRoot":"","sources":["../../src/react/use-permission-self-heal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { type ProjectConfigSummary } from '../platform/projects-client/index.js';
2
+ /**
3
+ * Server-side project config — the single source of truth for everything a user
4
+ * selects AROUND a session: agents, commands, skills, the default agent, and env
5
+ * requirements. Fetched from the Kortix server (project detail), so it works
6
+ * before any sandbox runtime exists. This is the canonical home for the
7
+ * "capabilities, not runtime state" split — `useVisibleAgents({ projectId })`
8
+ * and `useProjectModels(projectId)` are the per-surface siblings.
9
+ */
10
+ export declare function useProjectConfig(projectId: string | null | undefined): ProjectConfigSummary | undefined;
11
+ //# sourceMappingURL=use-project-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-project-config.d.ts","sourceRoot":"","sources":["../../src/react/use-project-config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,oBAAoB,EAAoB,MAAM,6BAA6B,CAAC;AAE1F;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACnC,oBAAoB,GAAG,SAAS,CASlC"}
@@ -0,0 +1,22 @@
1
+ 'use client';
2
+ import { useQuery } from '@tanstack/react-query';
3
+ import { getProjectDetail } from '../platform/projects-client/index.js';
4
+ /**
5
+ * Server-side project config — the single source of truth for everything a user
6
+ * selects AROUND a session: agents, commands, skills, the default agent, and env
7
+ * requirements. Fetched from the Kortix server (project detail), so it works
8
+ * before any sandbox runtime exists. This is the canonical home for the
9
+ * "capabilities, not runtime state" split — `useVisibleAgents({ projectId })`
10
+ * and `useProjectModels(projectId)` are the per-surface siblings.
11
+ */
12
+ export function useProjectConfig(projectId) {
13
+ const { data } = useQuery({
14
+ queryKey: ['project-config', projectId],
15
+ queryFn: async () => (await getProjectDetail(projectId)).config,
16
+ enabled: !!projectId,
17
+ staleTime: 30_000,
18
+ retry: false,
19
+ });
20
+ return data;
21
+ }
22
+ //# sourceMappingURL=use-project-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-project-config.js","sourceRoot":"","sources":["../../src/react/use-project-config.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAA6B,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE1F;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAoC;IAEpC,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;QACxB,QAAQ,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC;QACvC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,gBAAgB,CAAC,SAAmB,CAAC,CAAC,CAAC,MAAM;QACzE,OAAO,EAAE,CAAC,CAAC,SAAS;QACpB,SAAS,EAAE,MAAM;QACjB,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type FlatModel } from './model-flatten.js';
2
+ /**
3
+ * Server-side model list for a project — the model parallel to
4
+ * `useVisibleAgents({ projectId })`. Reads the project's gateway catalog
5
+ * (`GET /projects/:id/llm-catalog`) and flattens it to `FlatModel[]` with correct
6
+ * provider/model ids. Works BEFORE any sandbox runtime exists, so a "new session"
7
+ * screen can show + pre-select a model, and the in-session picker shares the same
8
+ * source — no runtime round-trip, no gateway-vs-BYOK key guessing.
9
+ */
10
+ export declare function useProjectModels(projectId: string | null | undefined): FlatModel[];
11
+ //# sourceMappingURL=use-project-models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-project-models.d.ts","sourceRoot":"","sources":["../../src/react/use-project-models.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,SAAS,EAAiB,MAAM,iBAAiB,CAAC;AAGhE;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,EAAE,CASlF"}
@@ -0,0 +1,25 @@
1
+ 'use client';
2
+ import { useQuery } from '@tanstack/react-query';
3
+ import { useMemo } from 'react';
4
+ import { getProjectLlmCatalog } from '../platform/projects-client/index.js';
5
+ import { flattenModels } from './model-flatten.js';
6
+ import { projectLlmCatalogToProviderList } from './provider-selection.js';
7
+ /**
8
+ * Server-side model list for a project — the model parallel to
9
+ * `useVisibleAgents({ projectId })`. Reads the project's gateway catalog
10
+ * (`GET /projects/:id/llm-catalog`) and flattens it to `FlatModel[]` with correct
11
+ * provider/model ids. Works BEFORE any sandbox runtime exists, so a "new session"
12
+ * screen can show + pre-select a model, and the in-session picker shares the same
13
+ * source — no runtime round-trip, no gateway-vs-BYOK key guessing.
14
+ */
15
+ export function useProjectModels(projectId) {
16
+ const { data } = useQuery({
17
+ queryKey: ['project-llm-catalog', projectId],
18
+ queryFn: () => getProjectLlmCatalog(projectId),
19
+ enabled: !!projectId,
20
+ staleTime: 30_000,
21
+ retry: false,
22
+ });
23
+ return useMemo(() => (data ? flattenModels(projectLlmCatalogToProviderList(data)) : []), [data]);
24
+ }
25
+ //# sourceMappingURL=use-project-models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-project-models.js","sourceRoot":"","sources":["../../src/react/use-project-models.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAkB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AAEvE;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAoC;IACnE,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;QACxB,QAAQ,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC;QAC5C,OAAO,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,SAAmB,CAAC;QACxD,OAAO,EAAE,CAAC,CAAC,SAAS;QACpB,SAAS,EAAE,MAAM;QACjB,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;IACH,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,+BAA+B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACnG,CAAC"}