@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,79 @@
1
+ 'use client';
2
+ import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
3
+ import { getClient } from '../opencode/client.js';
4
+ import { useOpenCodeRuntimeReady } from './use-opencode-sessions/keys.js';
5
+ export const configKeys = {
6
+ all: ['opencode', 'config'],
7
+ };
8
+ function unwrap(result) {
9
+ if (result.error) {
10
+ // `error`'s shape varies per endpoint's typed error union — duck-type
11
+ // defensively via `unknown` rather than assume a shape.
12
+ const err = result.error;
13
+ const errRec = err && typeof err === 'object' ? err : undefined;
14
+ const dataRec = errRec?.data && typeof errRec.data === 'object' ? errRec.data : undefined;
15
+ const message = dataRec?.message ?? errRec?.message;
16
+ throw new Error(typeof message === 'string' ? message : 'Request failed');
17
+ }
18
+ return result.data;
19
+ }
20
+ export function useOpenCodeConfig() {
21
+ const runtimeReady = useOpenCodeRuntimeReady();
22
+ return useQuery({
23
+ queryKey: configKeys.all,
24
+ queryFn: async () => {
25
+ const client = getClient();
26
+ const result = await client.global.config.get();
27
+ return unwrap(result);
28
+ },
29
+ enabled: runtimeReady,
30
+ staleTime: Infinity,
31
+ gcTime: 10 * 60 * 1000,
32
+ });
33
+ }
34
+ export function useUpdateOpenCodeConfig() {
35
+ const queryClient = useQueryClient();
36
+ return useMutation({
37
+ mutationFn: async (config) => {
38
+ const client = getClient();
39
+ // The SDK's `update` param type wants a full `Config`, but the server
40
+ // accepts (and this hook always sends) a partial merge patch.
41
+ const result = await client.global.config.update({ config: config });
42
+ return unwrap(result);
43
+ },
44
+ onMutate: async (config) => {
45
+ // Cancel in-flight refetches so they don't overwrite optimistic update
46
+ await queryClient.cancelQueries({ queryKey: configKeys.all });
47
+ const previous = queryClient.getQueryData(configKeys.all);
48
+ if (previous) {
49
+ // Optimistically merge the draft into the cached config
50
+ queryClient.setQueryData(configKeys.all, {
51
+ ...previous,
52
+ ...config,
53
+ permission: typeof config.permission !== 'undefined'
54
+ ? config.permission
55
+ : previous.permission,
56
+ });
57
+ }
58
+ return { previous };
59
+ },
60
+ onError: (_err, _config, context) => {
61
+ // Roll back to previous cache on failure
62
+ if (context?.previous) {
63
+ queryClient.setQueryData(configKeys.all, context.previous);
64
+ }
65
+ },
66
+ onSettled: () => {
67
+ // Refetch to get the authoritative server state — only if mounted
68
+ queryClient.refetchQueries({ queryKey: configKeys.all, type: 'active' });
69
+ },
70
+ });
71
+ }
72
+ /**
73
+ * @deprecated No longer needed — server persists config correctly.
74
+ * Kept as no-op for existing call sites.
75
+ */
76
+ export function clearConfigOverrides() {
77
+ // no-op — localStorage overrides removed
78
+ }
79
+ //# sourceMappingURL=use-opencode-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-opencode-config.js","sourceRoot":"","sources":["../../src/react/use-opencode-config.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAIvE,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,GAAG,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAU;CACrC,CAAC;AAEF,SAAS,MAAM,CAAI,MAAqC;IACtD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,sEAAsE;QACtE,wDAAwD;QACxD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;QACzB,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,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,OAAO,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,MAAM,CAAC,IAAS,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,MAAM,YAAY,GAAG,uBAAuB,EAAE,CAAC;IAC/C,OAAO,QAAQ,CAAS;QACtB,QAAQ,EAAE,UAAU,CAAC,GAAG;QACxB,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YAChD,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,uBAAuB;IACrC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,OAAO,WAAW,CAAC;QACjB,UAAU,EAAE,KAAK,EAAE,MAAuB,EAAE,EAAE;YAC5C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,sEAAsE;YACtE,8DAA8D;YAC9D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAgB,EAAE,CAAC,CAAC;YAC/E,OAAO,MAAM,CAAC,MAAM,CAAW,CAAC;QAClC,CAAC;QACD,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACzB,uEAAuE;YACvE,MAAM,WAAW,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;YAC9D,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAS,UAAU,CAAC,GAAG,CAAC,CAAC;YAClE,IAAI,QAAQ,EAAE,CAAC;gBACb,wDAAwD;gBACxD,WAAW,CAAC,YAAY,CAAS,UAAU,CAAC,GAAG,EAAE;oBAC/C,GAAG,QAAQ;oBACX,GAAG,MAAM;oBACT,UAAU,EAAE,OAAO,MAAM,CAAC,UAAU,KAAK,WAAW;wBAClD,CAAC,CAAC,MAAM,CAAC,UAAU;wBACnB,CAAC,CAAC,QAAQ,CAAC,UAAU;iBACd,CAAC,CAAC;YACf,CAAC;YACD,OAAO,EAAE,QAAQ,EAAE,CAAC;QACtB,CAAC;QACD,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;YAClC,yCAAyC;YACzC,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;gBACtB,WAAW,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QACD,SAAS,EAAE,GAAG,EAAE;YACd,kEAAkE;YAClE,WAAW,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3E,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,yCAAyC;AAC3C,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Part } from '@opencode-ai/sdk/v2/client';
2
+ import type { RefObject } from 'react';
3
+ import type { NormalizeDiagnosticPaths } from './types.js';
4
+ /**
5
+ * Extract diagnostics carried by a `message.part.updated` part — both the
6
+ * primary tool-output text path and the legacy `metadata.diagnostics` fallback —
7
+ * and push them into the diagnostics store. Paths are normalized from absolute
8
+ * sandbox paths to project-relative via the supplied ref.
9
+ */
10
+ export declare function applyPartDiagnostics(part: Part, normalizeDiagnosticPaths: RefObject<NormalizeDiagnosticPaths>): void;
11
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../../src/react/use-opencode-events/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAExD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,IAAI,EACV,wBAAwB,EAAE,SAAS,CAAC,wBAAwB,CAAC,GAC5D,IAAI,CAmDN"}
@@ -0,0 +1,58 @@
1
+ import { parseDiagnosticsFromToolOutput, useDiagnosticsStore, } from '../../state/diagnostics-store.js';
2
+ /**
3
+ * Extract diagnostics carried by a `message.part.updated` part — both the
4
+ * primary tool-output text path and the legacy `metadata.diagnostics` fallback —
5
+ * and push them into the diagnostics store. Paths are normalized from absolute
6
+ * sandbox paths to project-relative via the supplied ref.
7
+ */
8
+ export function applyPartDiagnostics(part, normalizeDiagnosticPaths) {
9
+ // Only `ToolPart` carries `.state` — every other `Part` variant doesn't.
10
+ const partState = part.type === 'tool' ? part.state : undefined;
11
+ // --- Primary path: parse diagnostics from tool output text ---
12
+ // The OpenCode backend embeds diagnostics as plain text inside
13
+ // <file_diagnostics> / <project_diagnostics> XML tags in the
14
+ // tool's text output (e.g. after write, edit, diagnostics tools).
15
+ if (partState?.status === 'completed' && partState.output) {
16
+ const output = partState.output;
17
+ if (output.includes('<file_diagnostics>') || output.includes('<project_diagnostics>')) {
18
+ const parsed = parseDiagnosticsFromToolOutput(output);
19
+ const fileCount = Object.keys(parsed).length;
20
+ if (fileCount > 0) {
21
+ // Normalize absolute sandbox paths to project-relative
22
+ const normalized = normalizeDiagnosticPaths.current(parsed);
23
+ // Convert LspDiagnostic[] to RawDiagnostic[] format for the store
24
+ const asRaw = {};
25
+ for (const [file, diags] of Object.entries(normalized)) {
26
+ asRaw[file] = diags.map((d) => ({
27
+ range: {
28
+ start: { line: d.line, character: d.column },
29
+ },
30
+ severity: d.severity,
31
+ message: d.message,
32
+ source: d.source,
33
+ }));
34
+ }
35
+ useDiagnosticsStore.getState().setFromLspEvent(asRaw);
36
+ }
37
+ }
38
+ }
39
+ // --- Fallback: check metadata.diagnostics (legacy / fork path) ---
40
+ // `metadata` isn't on `ToolStatePending` — narrow it away first.
41
+ const partMeta = partState && partState.status !== 'pending' ? partState.metadata : undefined;
42
+ if (partMeta?.diagnostics && typeof partMeta.diagnostics === 'object') {
43
+ const diagsByFile = partMeta.diagnostics;
44
+ const validEntries = {};
45
+ let hasValid = false;
46
+ for (const [file, diags] of Object.entries(diagsByFile)) {
47
+ if (Array.isArray(diags) && diags.length > 0) {
48
+ validEntries[file] = diags;
49
+ hasValid = true;
50
+ }
51
+ }
52
+ if (hasValid) {
53
+ const normalized = normalizeDiagnosticPaths.current(validEntries);
54
+ useDiagnosticsStore.getState().setFromLspEvent(normalized);
55
+ }
56
+ }
57
+ }
58
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../../src/react/use-opencode-events/diagnostics.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,8BAA8B,EAC9B,mBAAmB,GAEpB,MAAM,+BAA+B,CAAC;AAGvC;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAU,EACV,wBAA6D;IAE7D,yEAAyE;IACzE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAEhE,gEAAgE;IAChE,+DAA+D;IAC/D,6DAA6D;IAC7D,kEAAkE;IAClE,IAAI,SAAS,EAAE,MAAM,KAAK,WAAW,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QAChC,IAAI,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;YACtF,MAAM,MAAM,GAAG,8BAA8B,CAAC,MAAM,CAAC,CAAC;YACtD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;YAC7C,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;gBAClB,uDAAuD;gBACvD,MAAM,UAAU,GAAG,wBAAwB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC5D,kEAAkE;gBAClE,MAAM,KAAK,GAAoC,EAAE,CAAC;gBAClD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;oBACvD,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBAC9B,KAAK,EAAE;4BACL,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;yBAC7C;wBACD,QAAQ,EAAE,CAAC,CAAC,QAAQ;wBACpB,OAAO,EAAE,CAAC,CAAC,OAAO;wBAClB,MAAM,EAAE,CAAC,CAAC,MAAM;qBACjB,CAAC,CAAC,CAAC;gBACN,CAAC;gBACD,mBAAmB,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;IACH,CAAC;IAED,oEAAoE;IACpE,iEAAiE;IACjE,MAAM,QAAQ,GAAG,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9F,IAAI,QAAQ,EAAE,WAAW,IAAI,OAAO,QAAQ,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QACtE,MAAM,WAAW,GAAG,QAAQ,CAAC,WAA8C,CAAC;QAC5E,MAAM,YAAY,GAAoC,EAAE,CAAC;QACzD,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YACxD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7C,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;gBAC3B,QAAQ,GAAG,IAAI,CAAC;YAClB,CAAC;QACH,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,UAAU,GAAG,wBAAwB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAClE,mBAAmB,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { type QueryClient } from '@tanstack/react-query';
2
+ import type { Event as OpenCodeSdkEvent, PermissionRequest, QuestionRequest } from '@opencode-ai/sdk/v2/client';
3
+ import type { RefObject } from 'react';
4
+ import { getClient } from '../../opencode/client.js';
5
+ import type { NormalizeDiagnosticPaths, OpenCodeEvent } from './types.js';
6
+ /** Builds the SSE event handler; all closure dependencies are injected. */
7
+ export declare function createEventHandler(deps: {
8
+ queryClient: QueryClient;
9
+ client: ReturnType<typeof getClient>;
10
+ applySyncEvent: (event: OpenCodeSdkEvent) => void;
11
+ stopCompaction: (sessionID: string) => void;
12
+ addPermission: (req: PermissionRequest) => void;
13
+ removePermission: (requestId: string) => void;
14
+ addQuestion: (req: QuestionRequest) => void;
15
+ removeQuestion: (requestId: string) => void;
16
+ normalizeDiagnosticPaths: RefObject<NormalizeDiagnosticPaths>;
17
+ markSessionAbortedLocally: RefObject<(sessionID: string, message?: string) => void>;
18
+ fetchLspDiagnosticsDebounced: RefObject<() => void>;
19
+ }): (event: OpenCodeEvent) => void;
20
+ //# sourceMappingURL=handle-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle-event.d.ts","sourceRoot":"","sources":["../../../src/react/use-opencode-events/handle-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EACV,KAAK,IAAI,gBAAgB,EACzB,iBAAiB,EACjB,eAAe,EAChB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAUvC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAYlD,OAAO,KAAK,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEvE,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;IACrC,cAAc,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAClD,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,aAAa,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAChD,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,WAAW,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;IAC5C,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,wBAAwB,EAAE,SAAS,CAAC,wBAAwB,CAAC,CAAC;IAC9D,yBAAyB,EAAE,SAAS,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC;IACpF,4BAA4B,EAAE,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC;CACrD,WA0B6B,aAAa,UA8b1C"}
@@ -0,0 +1,450 @@
1
+ import { infoToast, notifyPermissionRequest, notifyQuestion, notifySessionError, notifyTaskComplete, } from '../../platform/ui.js';
2
+ import { deleteSessionFromIDB, saveSessionToIDB } from '../../state/idb-sync-cache.js';
3
+ import { useSyncStore } from '../../state/sync-store.js';
4
+ import { getClient } from '../../opencode/client.js';
5
+ import { fileContentKeys, fileListKeys, gitStatusKeys } from '../file-keys.js';
6
+ import { ptyKeys } from '../use-opencode-pty.js';
7
+ import { opencodeKeys } from '../use-opencode-sessions/index.js';
8
+ import { applyPartDiagnostics } from './diagnostics.js';
9
+ import { asStringOrUndefined, looksLikeAbortError, readSessionInfo, refetchKortixSessionMirrors, scheduleProjectMetadataRefetch, } from './helpers.js';
10
+ /** Builds the SSE event handler; all closure dependencies are injected. */
11
+ export function createEventHandler(deps) {
12
+ const { queryClient, client, applySyncEvent, stopCompaction, addPermission, removePermission, addQuestion, removeQuestion, normalizeDiagnosticPaths, markSessionAbortedLocally, fetchLspDiagnosticsDebounced, } = deps;
13
+ // Helper: look up a session title from the React Query cache for notifications
14
+ function getSessionTitle(sessionID) {
15
+ const sessions = queryClient.getQueryData(opencodeKeys.sessions());
16
+ if (sessions) {
17
+ const s = sessions.find((s) => s.id === sessionID);
18
+ if (s?.title)
19
+ return s.title;
20
+ }
21
+ const session = queryClient.getQueryData(opencodeKeys.session(sessionID));
22
+ return session?.title || undefined;
23
+ }
24
+ function handleEvent(event) {
25
+ // Sync store is the SINGLE source of truth for messages & parts.
26
+ // This matches OpenCode's architecture where the SolidJS store is
27
+ // the only place message/part data lives.
28
+ //
29
+ // `event` also carries the frontend-synthesized `lsp.client.diagnostics`
30
+ // member (see `OpenCodeEvent`), which isn't a real wire event and doesn't
31
+ // match any `applyEvent` case (falls through to its `default`) — the
32
+ // assertion below just widens past that one extra union member.
33
+ applySyncEvent(event);
34
+ switch (event.type) {
35
+ // ---- Message events — handled by sync store only ----
36
+ case 'message.updated':
37
+ case 'message.removed':
38
+ break;
39
+ case 'message.part.updated': {
40
+ // Extract diagnostics from tool output and/or metadata
41
+ applyPartDiagnostics(event.properties.part, normalizeDiagnosticPaths);
42
+ break;
43
+ }
44
+ case 'message.part.removed':
45
+ break;
46
+ // ---- Session lifecycle — surgical cache mutations (zero HTTP) ----
47
+ //
48
+ // IMPORTANT: Return the old array reference when nothing changed.
49
+ // Creating new arrays on every SSE event causes cascading re-renders
50
+ // in all session list consumers, which triggers a Radix UI compose-refs
51
+ // infinite loop (Maximum update depth exceeded).
52
+ case 'session.created': {
53
+ const info = readSessionInfo(event);
54
+ if (info) {
55
+ queryClient.setQueryData(opencodeKeys.sessions(), (old) => {
56
+ if (!old)
57
+ return [info];
58
+ const exists = old.findIndex((s) => s.id === info.id);
59
+ if (exists >= 0) {
60
+ // Already exists — check if actually changed
61
+ if (old[exists].time.updated === info.time.updated)
62
+ return old;
63
+ const next = [...old];
64
+ next[exists] = info;
65
+ return next.sort((a, b) => b.time.updated - a.time.updated);
66
+ }
67
+ return [info, ...old].sort((a, b) => b.time.updated - a.time.updated);
68
+ });
69
+ queryClient.setQueryData(opencodeKeys.session(info.id), info);
70
+ refetchKortixSessionMirrors(queryClient);
71
+ }
72
+ break;
73
+ }
74
+ case 'session.updated': {
75
+ const info = readSessionInfo(event);
76
+ if (info) {
77
+ // OpenCode auto-titles after the first message via session.updated.
78
+ // Capture the previous title before local cache mutation so we only
79
+ // force the server-owned mirror read when the title actually changed.
80
+ const prevTitle = queryClient
81
+ .getQueryData(opencodeKeys.sessions())
82
+ ?.find((s) => s.id === info.id)?.title ??
83
+ queryClient.getQueryData(opencodeKeys.session(info.id))?.title ??
84
+ null;
85
+ const titleChanged = !!info.title && info.title !== prevTitle;
86
+ // Only update individual session cache (cheap, targeted)
87
+ queryClient.setQueryData(opencodeKeys.session(info.id), info);
88
+ // Update session list only if the session actually changed
89
+ queryClient.setQueryData(opencodeKeys.sessions(), (old) => {
90
+ if (!old)
91
+ return old;
92
+ const idx = old.findIndex((s) => s.id === info.id);
93
+ if (idx < 0)
94
+ return old;
95
+ // Shallow check: skip only if BOTH the timestamp and the title are
96
+ // unchanged. Title alone can flip (opencode auto-titles) without a
97
+ // perceptible time bump, and dropping that would keep the tab stale.
98
+ if (old[idx].time.updated === info.time.updated &&
99
+ old[idx].title === info.title)
100
+ return old;
101
+ const next = [...old];
102
+ next[idx] = info;
103
+ return next.sort((a, b) => b.time.updated - a.time.updated);
104
+ });
105
+ if (titleChanged)
106
+ refetchKortixSessionMirrors(queryClient);
107
+ }
108
+ break;
109
+ }
110
+ case 'session.deleted': {
111
+ const info = readSessionInfo(event);
112
+ if (info) {
113
+ queryClient.setQueryData(opencodeKeys.sessions(), (old) => {
114
+ if (!old)
115
+ return old;
116
+ const found = old.some((s) => s.id === info.id);
117
+ if (!found)
118
+ return old;
119
+ return old.filter((s) => s.id !== info.id);
120
+ });
121
+ queryClient.removeQueries({ queryKey: opencodeKeys.session(info.id) });
122
+ queryClient.removeQueries({ queryKey: opencodeKeys.messages(info.id) });
123
+ deleteSessionFromIDB(info.id);
124
+ }
125
+ break;
126
+ }
127
+ case 'session.compacted': {
128
+ const sessionID = event.properties.sessionID;
129
+ if (sessionID) {
130
+ stopCompaction(sessionID);
131
+ const client = getClient();
132
+ client.session
133
+ .messages({ sessionID })
134
+ .then((res) => {
135
+ if (res.data) {
136
+ useSyncStore.getState().hydrate(sessionID, res.data);
137
+ const s = useSyncStore.getState();
138
+ const msgs = s.messages[sessionID] ?? [];
139
+ if (msgs.length > 0)
140
+ saveSessionToIDB(sessionID, msgs, s.parts);
141
+ }
142
+ })
143
+ .catch(() => { });
144
+ // Refetch the individual session to clear time.compacting
145
+ // (targeted refetch, not full session list invalidation)
146
+ client.session
147
+ .get({ sessionID })
148
+ .then((res) => {
149
+ if (res.data) {
150
+ const session = res.data;
151
+ queryClient.setQueryData(opencodeKeys.session(sessionID), session);
152
+ // Also update in session list
153
+ queryClient.setQueryData(opencodeKeys.sessions(), (old) => {
154
+ if (!old)
155
+ return old;
156
+ const idx = old.findIndex((s) => s.id === sessionID);
157
+ if (idx < 0)
158
+ return old;
159
+ const next = [...old];
160
+ next[idx] = session;
161
+ return next;
162
+ });
163
+ }
164
+ })
165
+ .catch(() => { });
166
+ }
167
+ break;
168
+ }
169
+ // ---- Session status ----
170
+ case 'session.status': {
171
+ const { sessionID, status } = event.properties;
172
+ if (sessionID && status) {
173
+ // Detect busy/retry → idle transition BEFORE updating the store
174
+ // (coalescing can drop intermediate busy events, so we check here)
175
+ const prevStatus = useSyncStore.getState().sessionStatus[sessionID];
176
+ if (status.type === 'idle' && prevStatus && prevStatus.type !== 'idle') {
177
+ notifyTaskComplete(sessionID, getSessionTitle(sessionID));
178
+ // Agent finished editing files — refresh the Changes panel.
179
+ // Nothing else invalidates git status for agent-driven edits,
180
+ // so without this the panel shows stale diff state.
181
+ queryClient.invalidateQueries({ queryKey: gitStatusKeys.all, type: 'active' });
182
+ queryClient.invalidateQueries({ queryKey: fileListKeys.all, type: 'active' });
183
+ }
184
+ }
185
+ break;
186
+ }
187
+ case 'session.idle': {
188
+ const sessionID = event.properties.sessionID;
189
+ if (sessionID) {
190
+ const prevStatus = useSyncStore.getState().sessionStatus[sessionID];
191
+ if (prevStatus && prevStatus.type !== 'idle') {
192
+ notifyTaskComplete(sessionID, getSessionTitle(sessionID));
193
+ // Agent finished editing files — refresh the Changes panel.
194
+ // Nothing else invalidates git status for agent-driven edits,
195
+ // so without this the panel shows stale diff state.
196
+ queryClient.invalidateQueries({ queryKey: gitStatusKeys.all, type: 'active' });
197
+ queryClient.invalidateQueries({ queryKey: fileListKeys.all, type: 'active' });
198
+ // Persist final session state to IDB when streaming completes
199
+ const s = useSyncStore.getState();
200
+ const msgs = s.messages[sessionID] ?? [];
201
+ if (msgs.length > 0)
202
+ saveSessionToIDB(sessionID, msgs, s.parts);
203
+ }
204
+ }
205
+ break;
206
+ }
207
+ // ---- Session errors ----
208
+ case 'session.error': {
209
+ const props = event.properties;
210
+ if (props.sessionID && props.error) {
211
+ const sessionID = props.sessionID;
212
+ const error = props.error;
213
+ stopCompaction(sessionID);
214
+ // Fire browser notification
215
+ const rawMessage = error.data.message;
216
+ const errorTitle = error.name ||
217
+ (typeof rawMessage === 'string' ? rawMessage : undefined) ||
218
+ 'An error occurred';
219
+ notifySessionError(sessionID, errorTitle, getSessionTitle(sessionID));
220
+ // Patch the error onto the last assistant message in cache.
221
+ // This is critical because:
222
+ // 1. session.error arrives BEFORE message.updated with .error
223
+ // 2. Some error paths (model-not-found, agent-not-found) never
224
+ // emit message.updated with .error at all
225
+ // 3. Polling can race and overwrite the error from message.updated
226
+ const key = opencodeKeys.messages(sessionID);
227
+ queryClient.cancelQueries({ queryKey: key });
228
+ queryClient.setQueryData(key, (old) => {
229
+ if (!old || old.length === 0)
230
+ return old;
231
+ // Find the last assistant message and patch error onto it
232
+ for (let i = old.length - 1; i >= 0; i--) {
233
+ const info = old[i].info;
234
+ if (info.role === 'assistant') {
235
+ if (info.error)
236
+ return old; // already has error
237
+ const updated = [...old];
238
+ updated[i] = {
239
+ ...old[i],
240
+ info: { ...info, error },
241
+ };
242
+ return updated;
243
+ }
244
+ }
245
+ return old;
246
+ });
247
+ // Fetch real messages from the server to bring in
248
+ // authoritative data. In error paths the server may never
249
+ // send message.updated for the user message, leaving the
250
+ // optimistic duplicate. After hydrating server data,
251
+ // clear any optimistic messages (now superseded by real
252
+ // ones) to prevent double user bubbles.
253
+ //
254
+ // EXCEPTION: On abort, skip the fetch+hydrate — the server
255
+ // may not have persisted the partial assistant response yet,
256
+ // so hydrating would wipe the streamed content the user saw.
257
+ // The error is already patched onto the message above.
258
+ const isAbortError = looksLikeAbortError(error);
259
+ if (!isAbortError) {
260
+ client.session
261
+ .messages({ sessionID })
262
+ .then((res) => {
263
+ if (!res.data)
264
+ return;
265
+ useSyncStore.getState().hydrate(sessionID, res.data);
266
+ useSyncStore.getState().clearOptimisticMessages(sessionID);
267
+ const s = useSyncStore.getState();
268
+ const msgs = s.messages[sessionID] ?? [];
269
+ if (msgs.length > 0)
270
+ saveSessionToIDB(sessionID, msgs, s.parts);
271
+ })
272
+ .catch(() => { });
273
+ }
274
+ else {
275
+ // Still clear optimistic messages on abort — the real
276
+ // user message should have arrived via SSE by now.
277
+ useSyncStore.getState().clearOptimisticMessages(sessionID);
278
+ }
279
+ }
280
+ break;
281
+ }
282
+ // ---- Permissions ----
283
+ case 'permission.asked': {
284
+ const props = event.properties;
285
+ if (props.id && props.sessionID) {
286
+ addPermission(props);
287
+ // Fire browser notification for permission requests. `tool` (when
288
+ // present) is `{messageID, callID}`, not a name — some historical
289
+ // wire shapes carried a bare string `type` field instead, which the
290
+ // current SDK types no longer declare. Duck-type both defensively
291
+ // rather than assume either is a string.
292
+ const rawProps = props;
293
+ const toolName = asStringOrUndefined(rawProps.tool) ?? asStringOrUndefined(rawProps.type) ?? 'a tool';
294
+ notifyPermissionRequest(props.sessionID, toolName, getSessionTitle(props.sessionID));
295
+ }
296
+ break;
297
+ }
298
+ case 'permission.replied': {
299
+ const requestID = event.properties.requestID;
300
+ if (requestID)
301
+ removePermission(requestID);
302
+ break;
303
+ }
304
+ // ---- Questions ----
305
+ case 'question.asked': {
306
+ const props = event.properties;
307
+ if (props.id && props.sessionID) {
308
+ addQuestion(props);
309
+ // Fire browser notification for questions needing user input
310
+ const questionText = props.questions[0]?.question ||
311
+ props.questions[0]?.header ||
312
+ 'Kortix needs your input';
313
+ notifyQuestion(props.sessionID, questionText, getSessionTitle(props.sessionID));
314
+ }
315
+ break;
316
+ }
317
+ case 'question.replied':
318
+ case 'question.rejected': {
319
+ const requestID = event.properties.requestID;
320
+ if (requestID)
321
+ removeQuestion(requestID);
322
+ break;
323
+ }
324
+ // ---- Session diff ----
325
+ case 'session.diff': {
326
+ const props = event.properties;
327
+ if (props.sessionID) {
328
+ queryClient.setQueryData(['opencode', 'session-diff', props.sessionID], props.diff);
329
+ }
330
+ break;
331
+ }
332
+ // ---- Todo updated ----
333
+ case 'todo.updated': {
334
+ const props = event.properties;
335
+ if (props.sessionID) {
336
+ queryClient.setQueryData(['opencode', 'session-todo', props.sessionID], props.todos);
337
+ }
338
+ break;
339
+ }
340
+ // ---- VCS branch ----
341
+ case 'vcs.branch.updated': {
342
+ const props = event.properties;
343
+ queryClient.setQueryData(['opencode', 'vcs'], {
344
+ branch: props.branch,
345
+ });
346
+ break;
347
+ }
348
+ // ---- Server disposed ----
349
+ case 'server.instance.disposed': {
350
+ for (const [sessionID, status] of Object.entries(useSyncStore.getState().sessionStatus)) {
351
+ if (status?.type !== 'idle') {
352
+ markSessionAbortedLocally.current(sessionID, 'The operation was aborted because the server instance was disposed.');
353
+ }
354
+ }
355
+ // Instance dispose means the server rescanned skills, agents,
356
+ // tools, and commands. Invalidate all cached app metadata so
357
+ // the UI picks up newly installed marketplace components or
358
+ // agent-created skills/agents immediately.
359
+ queryClient.invalidateQueries({ queryKey: opencodeKeys.sessions(), type: 'active' });
360
+ queryClient.invalidateQueries({ queryKey: opencodeKeys.mcpStatus(), type: 'active' });
361
+ queryClient.invalidateQueries({ queryKey: opencodeKeys.skills(), type: 'active' });
362
+ queryClient.invalidateQueries({ queryKey: opencodeKeys.agents(), type: 'active' });
363
+ queryClient.invalidateQueries({ queryKey: opencodeKeys.toolIds(), type: 'active' });
364
+ queryClient.invalidateQueries({ queryKey: opencodeKeys.commands(), type: 'active' });
365
+ break;
366
+ }
367
+ // ---- LSP updated ----
368
+ case 'lsp.updated': {
369
+ queryClient.invalidateQueries({ queryKey: ['opencode', 'lsp'], type: 'active' });
370
+ // A new LSP client connected — fetch diagnostics after a short
371
+ // delay to give the language server time to produce initial results.
372
+ fetchLspDiagnosticsDebounced.current();
373
+ break;
374
+ }
375
+ // ---- LSP client diagnostics (per-file notification) ----
376
+ case 'lsp.client.diagnostics': {
377
+ // This event signals diagnostics changed for a specific file.
378
+ // The event only carries { serverID, path } — actual diagnostic
379
+ // data must be fetched from the /lsp/diagnostics endpoint.
380
+ fetchLspDiagnosticsDebounced.current();
381
+ break;
382
+ }
383
+ // ---- MCP tools changed ----
384
+ case 'mcp.tools.changed': {
385
+ // MCP server tools were added/removed/changed — refresh status + tool lists.
386
+ // Only refetch if queries are actively mounted (type: 'active').
387
+ queryClient.refetchQueries({ queryKey: opencodeKeys.mcpStatus(), type: 'active' });
388
+ queryClient.refetchQueries({ queryKey: opencodeKeys.toolIds(), type: 'active' });
389
+ break;
390
+ }
391
+ // ---- PTY events ----
392
+ case 'pty.created':
393
+ case 'pty.updated':
394
+ case 'pty.exited':
395
+ case 'pty.deleted': {
396
+ queryClient.invalidateQueries({ queryKey: ptyKeys.listPrefix(), type: 'active' });
397
+ break;
398
+ }
399
+ // ---- Worktree events — disabled for now ----
400
+ case 'worktree.ready': {
401
+ queryClient.invalidateQueries({ queryKey: opencodeKeys.worktrees(), type: 'active' });
402
+ queryClient.invalidateQueries({ queryKey: opencodeKeys.projects(), type: 'active' });
403
+ break;
404
+ }
405
+ case 'worktree.failed': {
406
+ queryClient.invalidateQueries({ queryKey: opencodeKeys.worktrees(), type: 'active' });
407
+ break;
408
+ }
409
+ // ---- Project updated ----
410
+ case 'project.updated': {
411
+ // Targeted refetch — project data is small and changes rarely,
412
+ // but OpenCode can emit bursts while tools are running. Coalesce
413
+ // these so a burst cannot spam /project/current.
414
+ scheduleProjectMetadataRefetch(queryClient);
415
+ break;
416
+ }
417
+ // ---- File edited (outside agent, e.g. user edits in editor) ----
418
+ case 'file.edited': {
419
+ const fileProps = event.properties;
420
+ queryClient.invalidateQueries({ queryKey: fileListKeys.all, type: 'active' });
421
+ queryClient.invalidateQueries({ queryKey: gitStatusKeys.all, type: 'active' });
422
+ if (fileProps.file) {
423
+ queryClient.invalidateQueries({ queryKey: fileContentKeys.all, type: 'active' });
424
+ }
425
+ break;
426
+ }
427
+ // ---- Installation events ----
428
+ case 'installation.updated': {
429
+ const installProps = event.properties;
430
+ const versionStr = installProps.version ? ` (v${installProps.version})` : '';
431
+ infoToast(`Installation updated${versionStr}. Restart to apply changes.`, {
432
+ duration: 10_000,
433
+ });
434
+ break;
435
+ }
436
+ case 'installation.update-available': {
437
+ const updateProps = event.properties;
438
+ const versionLabel = updateProps.version ? `v${updateProps.version}` : 'A new version';
439
+ infoToast(`${versionLabel} is available. Update when you're ready.`, {
440
+ duration: 15_000,
441
+ });
442
+ break;
443
+ }
444
+ default:
445
+ break;
446
+ }
447
+ }
448
+ return handleEvent;
449
+ }
450
+ //# sourceMappingURL=handle-event.js.map