@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,396 @@
1
+ 'use client';
2
+ /**
3
+ * useSession — the ONE hook a host needs to open a session and stream a chat.
4
+ *
5
+ * Everything sandbox-shaped is internal: it drives `/start` (server long-poll),
6
+ * points the runtime at the session's sandbox, opens the SSE stream, resolves the
7
+ * canonical OpenCode id, and syncs messages — exposing one `phase`
8
+ * (starting|ready|error) plus messages/send/abort/questions/permissions and the
9
+ * server-side capabilities (models/agents/commands/picks). The host imports
10
+ * `createKortix` + `useSession` and NOTHING else runtime-related: no server-store,
11
+ * no `switchToSessionSandboxAsync`, no health poller, no event-stream provider.
12
+ *
13
+ * Readiness comes from the SERVER (`stage==='ready'` is only returned after the
14
+ * daemon answered), seeded into the connection store on switch — so there is NO
15
+ * client health poller, and the first turn streams immediately.
16
+ *
17
+ * Call this ONCE per session view (like a provider): it owns the SSE subscription
18
+ * and the `/start` poll for `(projectId, sessionId)`.
19
+ */
20
+ import { useQuery } from '@tanstack/react-query';
21
+ import { useEffect, useMemo, useRef, useState } from 'react';
22
+ import { RuntimeNotReadyError } from '../opencode/client.js';
23
+ import { useOpenCodePendingStore } from '../state/opencode-pending-store.js';
24
+ import { setOpenCodeHealth, setSandboxStatus, } from '../state/sandbox-connection-store.js';
25
+ import { getSandboxUrlForExternalId } from '../state/server-store.js';
26
+ import { setCurrentRuntime } from '../state/current-runtime.js';
27
+ import { isSessionStartError, sessionStartKey, startProjectSession, } from '../platform/projects-client/index.js';
28
+ import { isSessionFresh } from '../platform/fresh-sessions.js';
29
+ import { BillingError, parseBillingError } from '../platform/api/errors.js';
30
+ import { formatOpenCodeRuntimeError } from '../platform/opencode-errors.js';
31
+ import { useCanonicalOpenCodeSession } from './use-canonical-opencode-session.js';
32
+ import { useOpenCodeEventStream } from './use-opencode-events/index.js';
33
+ import { useProjectConfig } from './use-project-config.js';
34
+ import { useProjectModels } from './use-project-models.js';
35
+ import { useQuestionSelfHeal } from './use-question-self-heal.js';
36
+ import { useRuntimePhase } from './use-runtime-phase.js';
37
+ import { clearStartStash, readStartStash } from './session-start-stash.js';
38
+ import { useSessionPicks } from './use-session-picks.js';
39
+ import { useSessionSync } from './use-session-sync.js';
40
+ import { useVisibleAgents } from './use-visible-agents.js';
41
+ import { rejectQuestion as rejectQuestionApi, replyToPermission, replyToQuestion, useAbortOpenCodeSession, useExecuteOpenCodeCommand, useSendOpenCodeMessage, } from './use-opencode-sessions/index.js';
42
+ // Grace window for the optimistic create-vs-start race: how long /start keeps
43
+ // retrying a 404 for a freshly-minted session before treating it as terminal.
44
+ // ~12 × 800ms ≈ 9.6s, comfortably past the sub-second create POST.
45
+ const FRESH_START_404_RETRIES = 12;
46
+ const FRESH_START_404_RETRY_DELAY_MS = 800;
47
+ /**
48
+ * Whether the `/start` poll should retry. A 404 on a freshly-minted session is
49
+ * the optimistic create-vs-start race (the create POST hasn't landed yet), so
50
+ * retry it for the grace window; a 404 on any other (non-fresh) session is a
51
+ * genuinely-missing/no-access session and is terminal at once. Other terminal
52
+ * SessionStartErrors never retry; transient transport failures retry a few times.
53
+ */
54
+ export function shouldRetrySessionStart(failureCount, error, sessionId) {
55
+ if (isSessionStartError(error) && error.status === 404 && isSessionFresh(sessionId)) {
56
+ return failureCount < FRESH_START_404_RETRIES;
57
+ }
58
+ return !isSessionStartError(error) && failureCount < 3;
59
+ }
60
+ // `getClient()` (packages/sdk/src/opencode/client.ts) throws a
61
+ // `RuntimeNotReadyError` with this exact message when the sandbox url hasn't
62
+ // been resolved yet (session still starting). The string match is kept as a
63
+ // fallback for callers that re-wrap the original error (losing the
64
+ // `instanceof` chain) but still preserve its message.
65
+ const RUNTIME_NOT_READY_MARKER = 'Server URL not ready';
66
+ /** Classify a thrown/rejected error from a send or a permission/question reply
67
+ * into a `KortixSendError`. Pure — safe to unit test without a runtime. */
68
+ export function classifySendError(error) {
69
+ if (error instanceof RuntimeNotReadyError ||
70
+ (error instanceof Error && error.message.includes(RUNTIME_NOT_READY_MARKER))) {
71
+ return {
72
+ kind: 'runtime-not-ready',
73
+ message: 'The session runtime is still starting — try again in a moment.',
74
+ cause: error,
75
+ };
76
+ }
77
+ if (error && typeof error === 'object') {
78
+ const parsed = parseBillingError(error);
79
+ if (parsed instanceof BillingError) {
80
+ return { kind: 'billing', message: parsed.message, billing: parsed, cause: error };
81
+ }
82
+ }
83
+ const formatted = formatOpenCodeRuntimeError(error);
84
+ return { kind: 'runtime-error', message: formatted.message, cause: error };
85
+ }
86
+ const IDLE_SEND_STATE = { pending: null, sendError: null };
87
+ /** New state when a send is kicked off — always clears any previous error. */
88
+ export function sendStateOnStart(text) {
89
+ return { pending: text, sendError: null };
90
+ }
91
+ /** New state when a send fails — drops the optimistic message and classifies
92
+ * the error. */
93
+ export function sendStateOnError(error) {
94
+ return { pending: null, sendError: classifySendError(error) };
95
+ }
96
+ // ─────────────────────────────────────────────────────────────────────────────
97
+ // Permission/question replies. Standalone (not closures over hook state) since
98
+ // they only need the global runtime client + the global pending store — both
99
+ // singletons — so they double as the implementation AND a directly testable,
100
+ // hook-free surface.
101
+ // ─────────────────────────────────────────────────────────────────────────────
102
+ /**
103
+ * Answer an agent question through the session's runtime and drop it from
104
+ * local pending state — but only once the server has actually accepted the
105
+ * reply. On failure the question stays pending and a `KortixSendError` is
106
+ * thrown.
107
+ */
108
+ export async function answerQuestion(requestId, answers) {
109
+ try {
110
+ await replyToQuestion(requestId, answers);
111
+ }
112
+ catch (error) {
113
+ throw classifySendError(error);
114
+ }
115
+ useOpenCodePendingStore.getState().removeQuestion(requestId);
116
+ }
117
+ /** Reject an agent question through the session's runtime (see `answerQuestion`). */
118
+ export async function rejectQuestion(requestId) {
119
+ try {
120
+ await rejectQuestionApi(requestId);
121
+ }
122
+ catch (error) {
123
+ throw classifySendError(error);
124
+ }
125
+ useOpenCodePendingStore.getState().removeQuestion(requestId);
126
+ }
127
+ /** Answer an agent permission request through the session's runtime (see `answerQuestion`). */
128
+ export async function answerPermission(requestId, reply, message) {
129
+ try {
130
+ await replyToPermission(requestId, reply, message);
131
+ }
132
+ catch (error) {
133
+ throw classifySendError(error);
134
+ }
135
+ useOpenCodePendingStore.getState().removePermission(requestId);
136
+ }
137
+ /** Stable, empty chat state — used when `chatEngine: false` so the hook's
138
+ * public chat fields stay type-stable (empty arrays/idle status, never
139
+ * `undefined`) instead of leaking whatever an unmounted-in-spirit
140
+ * `useSessionSync('')` call happens to return. */
141
+ const DISABLED_CHAT_ENGINE_SYNC = {
142
+ messages: [],
143
+ status: { type: 'idle' },
144
+ isBusy: false,
145
+ isLoading: false,
146
+ diffs: [],
147
+ todos: [],
148
+ };
149
+ export function useSession(projectId, sessionId, options = {}) {
150
+ const { waitMs = 15_000, replayStartStash = true, enabled = true, chatEngine = true, } = options;
151
+ // 1. Drive /start until the runtime is ready (the server long-polls each tick).
152
+ const start = useQuery({
153
+ queryKey: sessionStartKey(projectId, sessionId),
154
+ queryFn: () => startProjectSession(projectId, sessionId, waitMs),
155
+ enabled: enabled && !!projectId && !!sessionId,
156
+ retry: (failureCount, error) => shouldRetrySessionStart(failureCount, error, sessionId),
157
+ retryDelay: (failureCount, error) => isSessionStartError(error) && error.status === 404
158
+ ? FRESH_START_404_RETRY_DELAY_MS
159
+ : Math.min(1000 * 2 ** failureCount, 5000),
160
+ refetchInterval: (q) => {
161
+ if (isSessionStartError(q.state.error))
162
+ return false;
163
+ const stage = q.state.data?.stage;
164
+ return stage === 'ready' || stage === 'failed' || stage === 'stopped' ? false : 1500;
165
+ },
166
+ });
167
+ const startData = start.data ?? null;
168
+ const startError = isSessionStartError(start.error) ? start.error : null;
169
+ const stage = startData?.stage ?? null;
170
+ const sandbox = startData?.sandbox ?? null;
171
+ const startReady = stage === 'ready';
172
+ const terminal = stage === 'failed' || stage === 'stopped';
173
+ // 2. Point the SDK's runtime at this session's sandbox once ready. Track WHICH
174
+ // sandbox we switched to (not a bare bool) so navigating between sessions (this
175
+ // hook instance is reused) re-gates instead of binding the new session to the
176
+ // previous sandbox. One active session at a time is the supported model, so the
177
+ // whole chat path (SSE, sync, send) rides this single global switch — there is no
178
+ // separate per-session client to keep in sync.
179
+ const [switchedSandboxId, setSwitchedSandboxId] = useState(null);
180
+ useEffect(() => {
181
+ if (!startReady || !sandbox?.external_id || switchedSandboxId === sandbox.sandbox_id)
182
+ return;
183
+ // Point the app's runtime at THIS session's box — no global "switch", just set
184
+ // the current runtime url. Every read (getClient, the SSE stream, files/
185
+ // terminal/git) resolves through it. `stage==='ready'` is server-proven, so the
186
+ // health effect below seeds connected+healthy with no client poll.
187
+ setCurrentRuntime(getSandboxUrlForExternalId(sandbox.external_id), sandbox.external_id, sandbox.sandbox_id);
188
+ setSwitchedSandboxId(sandbox.sandbox_id);
189
+ }, [startReady, sandbox, switchedSandboxId]);
190
+ // Clear the current runtime when this session view unmounts.
191
+ useEffect(() => () => setCurrentRuntime(null), []);
192
+ const switched = startReady && !!sandbox && switchedSandboxId === sandbox.sandbox_id;
193
+ // 3. Keep the connection store healthy from server-truth while switched, with NO
194
+ // poller. If the box later dies mid-session the SSE's own disconnect/heartbeat
195
+ // handling drives recovery (no steady-state health loop to halt — the old
196
+ // first-load bug is structurally gone).
197
+ useEffect(() => {
198
+ if (!switched)
199
+ return;
200
+ setSandboxStatus('connected');
201
+ setOpenCodeHealth(true);
202
+ }, [switched]);
203
+ // 4. Open the live SSE stream. This was a provider component (OpenCodeEvent
204
+ // StreamProvider); calling the underlying hook here means the host mounts
205
+ // nothing. It self-gates on the connection store's healthy flag (seeded above).
206
+ useOpenCodeEventStream();
207
+ // 5. Resolve the canonical OpenCode root id (server-owned; /start hands it over)
208
+ // and sync messages off it.
209
+ const { rootSessionId } = useCanonicalOpenCodeSession({
210
+ projectId,
211
+ sessionId,
212
+ pinFromStart: startData?.opencode_session_id ?? null,
213
+ });
214
+ const ocSessionId = rootSessionId ?? '';
215
+ // Always call the hook (rules-of-hooks) so it stays in the same position
216
+ // every render, but starve it with an empty session id when the chat engine
217
+ // is off — `useSessionSync('')` fetches/polls nothing (its effects no-op on
218
+ // a falsy/non-canonical session id) — and use a fixed, type-stable empty
219
+ // result instead of whatever it happens to return for that starved call.
220
+ const rawSync = useSessionSync(chatEngine ? ocSessionId : '');
221
+ const sync = chatEngine ? rawSync : DISABLED_CHAT_ENGINE_SYNC;
222
+ const runtimePhase = useRuntimePhase();
223
+ // 5b. Self-heal a missed `question.asked` SSE event (a `question` tool part
224
+ // rendering as running with nothing in the pending store) — see
225
+ // `useQuestionSelfHeal` for why this is distinct from the SSE reconnect-gap
226
+ // hydration in `useOpenCodeEventStream`. Disabled entirely when `chatEngine`
227
+ // is off — see that option's jsdoc: a host mounting its own chat surface
228
+ // already runs its own copy of this poller for the same session.
229
+ useQuestionSelfHeal(ocSessionId, sync.messages, { enabled: chatEngine && !!ocSessionId });
230
+ // 6. Interactive prompts live in the pending store (the SSE writes them there,
231
+ // keyed by request id carrying sessionID). useSessionSync does NOT surface them.
232
+ const questionMap = useOpenCodePendingStore((s) => s.questions);
233
+ const permissionMap = useOpenCodePendingStore((s) => s.permissions);
234
+ const removeQuestion = useOpenCodePendingStore((s) => s.removeQuestion);
235
+ const removePermission = useOpenCodePendingStore((s) => s.removePermission);
236
+ const questions = useMemo(() => Object.values(questionMap).filter((q) => q.sessionID === ocSessionId), [questionMap, ocSessionId]);
237
+ const permissions = useMemo(() => Object.values(permissionMap).filter((p) => p.sessionID === ocSessionId), [permissionMap, ocSessionId]);
238
+ // 7. Server-side capabilities + per-session picks (all pre-runtime — no sandbox).
239
+ const models = useProjectModels(projectId);
240
+ const agents = useVisibleAgents({ projectId });
241
+ const config = useProjectConfig(projectId);
242
+ const picks = useSessionPicks(sessionId);
243
+ // 8. Mutations.
244
+ const sendMutation = useSendOpenCodeMessage();
245
+ const abortMutation = useAbortOpenCodeSession();
246
+ const commandMutation = useExecuteOpenCodeCommand();
247
+ // 9. Optimistic send: show the user's message instantly until a NEW user message
248
+ // lands (count grows) — robust to server-normalized text where a text-equality
249
+ // match would clear too early or never (wedging the composer). 30s backstop.
250
+ const userMsgCount = useMemo(() => sync.messages.filter((m) => m.info.role === 'user').length, [sync.messages]);
251
+ const [sendState, setSendState] = useState(IDLE_SEND_STATE);
252
+ const pending = sendState.pending;
253
+ const pendingBaseCount = useRef(0);
254
+ useEffect(() => {
255
+ if (pending && userMsgCount > pendingBaseCount.current) {
256
+ setSendState((s) => (s.pending ? { ...s, pending: null } : s));
257
+ }
258
+ }, [userMsgCount, pending]);
259
+ useEffect(() => {
260
+ if (!pending)
261
+ return;
262
+ const t = setTimeout(() => setSendState((s) => (s.pending ? { ...s, pending: null } : s)), 30_000);
263
+ return () => clearTimeout(t);
264
+ }, [pending]);
265
+ const send = (text, override) => {
266
+ if (!ocSessionId)
267
+ return;
268
+ pendingBaseCount.current = userMsgCount;
269
+ setSendState(sendStateOnStart(text));
270
+ const model = override?.model ?? picks.model;
271
+ const agent = override?.agent ?? picks.agent;
272
+ const variant = override?.variant;
273
+ const opts = {
274
+ ...(model ? { model } : {}),
275
+ ...(agent ? { agent } : {}),
276
+ ...(variant ? { variant } : {}),
277
+ };
278
+ sendMutation.mutate({
279
+ sessionId: ocSessionId,
280
+ parts: [{ type: 'text', text }],
281
+ ...(Object.keys(opts).length ? { options: opts } : {}),
282
+ }, { onError: (err) => setSendState(sendStateOnError(err)) });
283
+ };
284
+ // Run a project slash-command (server-side `/command`), distinct from a prompt.
285
+ const runCommand = (command, args) => {
286
+ if (!ocSessionId)
287
+ return;
288
+ commandMutation.mutate({ sessionId: ocSessionId, command, args });
289
+ };
290
+ // The one true cancel: abort the run AND drop any pending prompt + open prompts.
291
+ const cancel = () => {
292
+ if (ocSessionId)
293
+ abortMutation.mutate(ocSessionId);
294
+ questions.forEach((q) => removeQuestion(q.id));
295
+ permissions.forEach((p) => removePermission(p.id));
296
+ setSendState(IDLE_SEND_STATE);
297
+ };
298
+ const phase = terminal || startError ? 'error' : switched ? 'ready' : 'starting';
299
+ // 10. Replay the new-session hand-off once ready + thread empty (exactly once).
300
+ // Force-disabled when `chatEngine` is off: this reads `sync.isLoading`/
301
+ // `sync.messages`, which are the fixed empty stand-ins above when the chat
302
+ // engine isn't mounted, so it could never correctly gate on thread-empty —
303
+ // a host that disables the chat engine already owns its own hand-off.
304
+ const startedRef = useRef(false);
305
+ useEffect(() => {
306
+ if (!replayStartStash || !chatEngine)
307
+ return;
308
+ if (startedRef.current || phase !== 'ready' || sync.isLoading)
309
+ return;
310
+ const stash = readStartStash(sessionId);
311
+ if (!stash)
312
+ return;
313
+ startedRef.current = true;
314
+ clearStartStash(sessionId);
315
+ if (sync.messages.length > 0)
316
+ return;
317
+ if (stash.model)
318
+ picks.setModel(stash.model);
319
+ if (stash.agent)
320
+ picks.setAgent(stash.agent);
321
+ send(stash.prompt, { model: stash.model, agent: stash.agent, variant: stash.variant });
322
+ // eslint-disable-next-line react-hooks/exhaustive-deps
323
+ }, [phase, sync.isLoading, sync.messages.length, sessionId, replayStartStash, chatEngine]);
324
+ return {
325
+ projectId,
326
+ sessionId,
327
+ /** Canonical OpenCode root id, or null while resolving. */
328
+ opencodeSessionId: rootSessionId ?? null,
329
+ // live data
330
+ messages: sync.messages,
331
+ status: sync.status,
332
+ questions,
333
+ permissions,
334
+ diffs: sync.diffs,
335
+ todos: sync.todos,
336
+ // lifecycle
337
+ phase,
338
+ /** Raw /start stage (provisioning|starting|ready|stopped|failed), for boot UI. */
339
+ stage,
340
+ /** The serialized session_sandboxes row from /start (status, metadata, ids), or null. */
341
+ sandbox,
342
+ /** True once the runtime is switched in and ready (equivalent to phase==='ready'). */
343
+ switched,
344
+ /** Whether polling /start again can still make progress (false = terminal). */
345
+ retriable: startData?.retriable ?? false,
346
+ /** Terminal /start failure, for hosts to render instead of spinning forever. */
347
+ startError,
348
+ /** Granular boot phase (connecting|booting|ready|unreachable) for detailed UI. */
349
+ runtimePhase,
350
+ isBusy: sync.isBusy || !!pending,
351
+ isLoading: sync.isLoading,
352
+ isError: terminal || !!startError,
353
+ /** Whether there are open interactive prompts (questions/permissions). */
354
+ hasPending: questions.length > 0 || permissions.length > 0,
355
+ /** Latest /start reason (e.g. 'runtime_waking'), surfaced for boot/error UI. */
356
+ reason: startData?.reason ?? null,
357
+ /** Pending optimistic message text, or null. */
358
+ pending,
359
+ /** True while the current `send` mutation is in flight. */
360
+ isSending: sendMutation.isPending,
361
+ /** Last `send` failure, typed (billing / runtime-not-ready / runtime-error),
362
+ * or null. Reset on every new `send` call. */
363
+ sendError: sendState.sendError,
364
+ // server-side capabilities (pre-runtime)
365
+ models,
366
+ agents,
367
+ defaultAgent: config?.open_code_default_agent ?? null,
368
+ commands: config?.commands ?? [],
369
+ picks,
370
+ // actions
371
+ send,
372
+ cancel,
373
+ runCommand,
374
+ /** Answer an agent question through the server and drop it from pending
375
+ * state on success; throws a `KortixSendError` and leaves it pending on
376
+ * failure. */
377
+ answerQuestion,
378
+ /** Reject an agent question through the server (see `answerQuestion`). */
379
+ rejectQuestion,
380
+ /** Answer an agent permission request through the server (see `answerQuestion`). */
381
+ answerPermission,
382
+ /** @deprecated Drops the question from local state WITHOUT replying to the
383
+ * server — the agent run stays blocked waiting on it. Use `answerQuestion`
384
+ * / `rejectQuestion` instead. */
385
+ removeQuestion,
386
+ /** @deprecated Drops the permission request from local state WITHOUT
387
+ * replying to the server — the agent run stays blocked waiting on it. Use
388
+ * `answerPermission` instead. */
389
+ removePermission,
390
+ /** Force a re-poll of /start (e.g. a Retry button on the boot screen). */
391
+ retry: () => {
392
+ void start.refetch();
393
+ },
394
+ };
395
+ }
396
+ //# sourceMappingURL=use-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-session.js","sourceRoot":"","sources":["../../src/react/use-session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { Agent } from '@opencode-ai/sdk/v2/client';
2
+ /**
3
+ * Returns only visible agents (non-hidden, non-subagent).
4
+ * Use this for agent selectors in UI where users pick which agent to use.
5
+ *
6
+ * Pass `projectId` for a SERVER-SIDE fetch (the project config is source of
7
+ * truth, works before any sandbox runtime exists) — preferred for selectors.
8
+ * Pass `directory` to scope the sandbox-runtime fetch to a project instead.
9
+ */
10
+ export declare function useVisibleAgents(options?: {
11
+ directory?: string;
12
+ projectId?: string | null;
13
+ }): Agent[];
14
+ /**
15
+ * Returns all visible agents including subagents.
16
+ * Use this when you need to show subagents too (e.g., advanced mode).
17
+ */
18
+ export declare function useAllVisibleAgents(options?: {
19
+ directory?: string;
20
+ projectId?: string | null;
21
+ }): Agent[];
22
+ //# sourceMappingURL=use-visible-agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-visible-agents.d.ts","sourceRoot":"","sources":["../../src/react/use-visible-agents.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAyBxD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,GAAG,KAAK,EAAE,CAMV;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,GAAG,KAAK,EAAE,CAMV"}
@@ -0,0 +1,45 @@
1
+ 'use client';
2
+ import { useMemo } from 'react';
3
+ import { useOpenCodeAgents } from './use-opencode-sessions/index.js';
4
+ import { featureFlags } from '../platform/feature-flags.js';
5
+ /**
6
+ * Project-only agents — surfaced only when the project paradigm is on.
7
+ *
8
+ * Just `project-manager`. The other agents (orchestrator, worker,
9
+ * project-maintainer) stay visible regardless of flag state — they're
10
+ * useful general-purpose roles, even when their preferred tools (task_*)
11
+ * aren't registered. The user reasons about the PM agent as the
12
+ * project-paradigm gate.
13
+ *
14
+ * `project-manager` is the per-project PM slug seeded by seedV2Project at
15
+ * /workspace/.opencode/agent/project-manager.md. The file persists on disk
16
+ * after a flag-on cycle even when the flag flips back off, so this picker
17
+ * filter is what keeps it out of the UI in default mode.
18
+ */
19
+ const PROJECT_ONLY_AGENTS = new Set(['project-manager']);
20
+ function hideProjectOnly(a) {
21
+ if (featureFlags.enableProjects)
22
+ return false;
23
+ return PROJECT_ONLY_AGENTS.has(a.name);
24
+ }
25
+ /**
26
+ * Returns only visible agents (non-hidden, non-subagent).
27
+ * Use this for agent selectors in UI where users pick which agent to use.
28
+ *
29
+ * Pass `projectId` for a SERVER-SIDE fetch (the project config is source of
30
+ * truth, works before any sandbox runtime exists) — preferred for selectors.
31
+ * Pass `directory` to scope the sandbox-runtime fetch to a project instead.
32
+ */
33
+ export function useVisibleAgents(options) {
34
+ const { data: agents = [] } = useOpenCodeAgents(options);
35
+ return useMemo(() => agents.filter((a) => !a.hidden && a.mode !== 'subagent' && !hideProjectOnly(a)), [agents]);
36
+ }
37
+ /**
38
+ * Returns all visible agents including subagents.
39
+ * Use this when you need to show subagents too (e.g., advanced mode).
40
+ */
41
+ export function useAllVisibleAgents(options) {
42
+ const { data: agents = [] } = useOpenCodeAgents(options);
43
+ return useMemo(() => agents.filter((a) => !a.hidden && !hideProjectOnly(a)), [agents]);
44
+ }
45
+ //# sourceMappingURL=use-visible-agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-visible-agents.js","sourceRoot":"","sources":["../../src/react/use-visible-agents.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD;;;;;;;;;;;;;GAaG;AACH,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAEzD,SAAS,eAAe,CAAC,CAAQ;IAC/B,IAAI,YAAY,CAAC,cAAc;QAAE,OAAO,KAAK,CAAC;IAC9C,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAGhC;IACC,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACzD,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EACrF,CAAC,MAAM,CAAC,CACT,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAGnC;IACC,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACzD,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAC5D,CAAC,MAAM,CAAC,CACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * `@kortix/sdk/server` — Node/Bun-only request-scoped config isolation for
3
+ * "Kortix as a Backend": a third-party server process that wraps Kortix on
4
+ * behalf of multiple end users/tenants concurrently.
5
+ *
6
+ * NEVER import this subpath from a browser bundle. It statically imports
7
+ * `config-node.ts`, which statically imports `node:async_hooks` — most
8
+ * browser bundlers choke if that appears anywhere in their graph. The root
9
+ * `@kortix/sdk` entry point and `@kortix/sdk/react` never import this file,
10
+ * so a web host's bundle is unaffected either way; this subpath exists
11
+ * specifically for the non-browser "backend" case.
12
+ *
13
+ * Why this exists: `configureKortix()`/`createKortix()` (the root `@kortix/sdk`
14
+ * seam) store the platform config — crucially, the bearer token getter — in a
15
+ * single process-wide module-global (see `platform/config.ts`). That's fine
16
+ * for a host with exactly one config for its whole lifetime (a browser tab, a
17
+ * CLI, a single-tenant server). It is UNSAFE for a server process handling
18
+ * concurrent requests on behalf of different users: two in-flight requests
19
+ * racing through `configureKortix()` with different tokens clobber each
20
+ * other — whichever call landed last wins for every other in-flight request
21
+ * (see the warning on `ServerTokenOptions` in
22
+ * `platform/projects-client/shared.ts`).
23
+ *
24
+ * `runWithKortix`/`createScopedKortix` fix that using Node's
25
+ * `AsyncLocalStorage`: the config passed to one call is visible ONLY inside
26
+ * that call's async continuation (every `await` inside it), correctly
27
+ * isolated from any other concurrent call in the same process.
28
+ */
29
+ import { type Kortix } from './kortix.js';
30
+ import { runWithKortix, getScopedConfig } from './platform/config-node.js';
31
+ import type { KortixPlatformConfig } from './platform/config.js';
32
+ export { runWithKortix, getScopedConfig };
33
+ /**
34
+ * Same shape as `createKortix(config)`, but every method call — including
35
+ * calls reached through `.project(id)`/`.session(pid, sid)` handles minted at
36
+ * call time — automatically runs inside `runWithKortix(config, ...)`. This
37
+ * handle never writes to (or is affected by) the process-global config
38
+ * singleton other `createKortix()`/`configureKortix()` callers in the same
39
+ * process share. Safe to construct one per incoming request in a multi-tenant
40
+ * server:
41
+ *
42
+ * import { createScopedKortix } from '@kortix/sdk/server';
43
+ *
44
+ * app.get('/projects', async (req, res) => {
45
+ * const kortix = createScopedKortix({ backendUrl, getToken: () => tokenFor(req) });
46
+ * res.json(await kortix.projects.list());
47
+ * });
48
+ *
49
+ * Two concurrent requests each calling `createScopedKortix` with a different
50
+ * token never see each other's config, even though both run in the same
51
+ * process — unlike two concurrent `createKortix()` calls, which share (and
52
+ * race on) the global singleton.
53
+ */
54
+ export declare function createScopedKortix(config: KortixPlatformConfig): Kortix;
55
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAa,aAAa,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC;AAqE1C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAGvE"}