@agent-native/core 0.4.5 → 0.5.0-dev.b51eaae

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 (479) hide show
  1. package/dist/a2a/client.d.ts +7 -0
  2. package/dist/a2a/client.d.ts.map +1 -1
  3. package/dist/a2a/client.js +24 -3
  4. package/dist/a2a/client.js.map +1 -1
  5. package/dist/a2a/handlers.d.ts +6 -3
  6. package/dist/a2a/handlers.d.ts.map +1 -1
  7. package/dist/a2a/handlers.js +45 -39
  8. package/dist/a2a/handlers.js.map +1 -1
  9. package/dist/a2a/index.d.ts +1 -1
  10. package/dist/a2a/index.d.ts.map +1 -1
  11. package/dist/a2a/index.js +2 -2
  12. package/dist/a2a/index.js.map +1 -1
  13. package/dist/a2a/server.d.ts +7 -2
  14. package/dist/a2a/server.d.ts.map +1 -1
  15. package/dist/a2a/server.js +54 -14
  16. package/dist/a2a/server.js.map +1 -1
  17. package/dist/a2a/task-store.d.ts +6 -6
  18. package/dist/a2a/task-store.d.ts.map +1 -1
  19. package/dist/a2a/task-store.js +102 -42
  20. package/dist/a2a/task-store.js.map +1 -1
  21. package/dist/a2a/types.d.ts +2 -0
  22. package/dist/a2a/types.d.ts.map +1 -1
  23. package/dist/action.d.ts +46 -0
  24. package/dist/action.d.ts.map +1 -0
  25. package/dist/action.js +35 -0
  26. package/dist/action.js.map +1 -0
  27. package/dist/adapters/sync/file-sync.js +1 -1
  28. package/dist/agent/index.d.ts +2 -2
  29. package/dist/agent/index.d.ts.map +1 -1
  30. package/dist/agent/index.js.map +1 -1
  31. package/dist/agent/production-agent.d.ts +22 -6
  32. package/dist/agent/production-agent.d.ts.map +1 -1
  33. package/dist/agent/production-agent.js +336 -123
  34. package/dist/agent/production-agent.js.map +1 -1
  35. package/dist/agent/run-manager.d.ts +43 -0
  36. package/dist/agent/run-manager.d.ts.map +1 -0
  37. package/dist/agent/run-manager.js +358 -0
  38. package/dist/agent/run-manager.js.map +1 -0
  39. package/dist/agent/run-store.d.ts +26 -0
  40. package/dist/agent/run-store.d.ts.map +1 -0
  41. package/dist/agent/run-store.js +145 -0
  42. package/dist/agent/run-store.js.map +1 -0
  43. package/dist/agent/thread-data-builder.d.ts +30 -0
  44. package/dist/agent/thread-data-builder.d.ts.map +1 -0
  45. package/dist/agent/thread-data-builder.js +88 -0
  46. package/dist/agent/thread-data-builder.js.map +1 -0
  47. package/dist/agent/types.d.ts +52 -1
  48. package/dist/agent/types.d.ts.map +1 -1
  49. package/dist/application-state/emitter.d.ts +3 -2
  50. package/dist/application-state/emitter.d.ts.map +1 -1
  51. package/dist/application-state/emitter.js +14 -4
  52. package/dist/application-state/emitter.js.map +1 -1
  53. package/dist/application-state/handlers.d.ts.map +1 -1
  54. package/dist/application-state/handlers.js +13 -16
  55. package/dist/application-state/handlers.js.map +1 -1
  56. package/dist/application-state/script-helpers.d.ts +1 -1
  57. package/dist/application-state/script-helpers.d.ts.map +1 -1
  58. package/dist/application-state/script-helpers.js +15 -5
  59. package/dist/application-state/script-helpers.js.map +1 -1
  60. package/dist/application-state/store.d.ts +4 -3
  61. package/dist/application-state/store.d.ts.map +1 -1
  62. package/dist/application-state/store.js +31 -59
  63. package/dist/application-state/store.js.map +1 -1
  64. package/dist/chat-threads/emitter.d.ts +9 -0
  65. package/dist/chat-threads/emitter.d.ts.map +1 -0
  66. package/dist/chat-threads/emitter.js +14 -0
  67. package/dist/chat-threads/emitter.js.map +1 -0
  68. package/dist/chat-threads/store.d.ts +28 -0
  69. package/dist/chat-threads/store.d.ts.map +1 -0
  70. package/dist/chat-threads/store.js +124 -0
  71. package/dist/chat-threads/store.js.map +1 -0
  72. package/dist/cli/create.d.ts.map +1 -1
  73. package/dist/cli/create.js +4 -18
  74. package/dist/cli/create.js.map +1 -1
  75. package/dist/cli/index.js +30 -3
  76. package/dist/cli/index.js.map +1 -1
  77. package/dist/cli/setup-agents.d.ts +11 -0
  78. package/dist/cli/setup-agents.d.ts.map +1 -0
  79. package/dist/cli/setup-agents.js +123 -0
  80. package/dist/cli/setup-agents.js.map +1 -0
  81. package/dist/client/AgentPanel.d.ts +9 -2
  82. package/dist/client/AgentPanel.d.ts.map +1 -1
  83. package/dist/client/AgentPanel.js +466 -29
  84. package/dist/client/AgentPanel.js.map +1 -1
  85. package/dist/client/AssistantChat.d.ts +25 -3
  86. package/dist/client/AssistantChat.d.ts.map +1 -1
  87. package/dist/client/AssistantChat.js +613 -83
  88. package/dist/client/AssistantChat.js.map +1 -1
  89. package/dist/client/ClientOnly.d.ts +14 -0
  90. package/dist/client/ClientOnly.d.ts.map +1 -0
  91. package/dist/client/ClientOnly.js +17 -0
  92. package/dist/client/ClientOnly.js.map +1 -0
  93. package/dist/client/CommandMenu.d.ts +71 -0
  94. package/dist/client/CommandMenu.d.ts.map +1 -0
  95. package/dist/client/CommandMenu.js +257 -0
  96. package/dist/client/CommandMenu.js.map +1 -0
  97. package/dist/client/DefaultSpinner.d.ts +7 -0
  98. package/dist/client/DefaultSpinner.d.ts.map +1 -0
  99. package/dist/client/DefaultSpinner.js +28 -0
  100. package/dist/client/DefaultSpinner.js.map +1 -0
  101. package/dist/client/MultiTabAssistantChat.d.ts +34 -2
  102. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  103. package/dist/client/MultiTabAssistantChat.js +346 -57
  104. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  105. package/dist/client/PoweredByBadge.d.ts.map +1 -1
  106. package/dist/client/PoweredByBadge.js +2 -1
  107. package/dist/client/PoweredByBadge.js.map +1 -1
  108. package/dist/client/active-run-state.d.ts +10 -0
  109. package/dist/client/active-run-state.d.ts.map +1 -0
  110. package/dist/client/active-run-state.js +32 -0
  111. package/dist/client/active-run-state.js.map +1 -0
  112. package/dist/client/agent-chat-adapter.d.ts +2 -1
  113. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  114. package/dist/client/agent-chat-adapter.js +83 -129
  115. package/dist/client/agent-chat-adapter.js.map +1 -1
  116. package/dist/client/agent-chat.js +2 -2
  117. package/dist/client/agent-chat.js.map +1 -1
  118. package/dist/client/components/ApiKeySettings.d.ts +2 -2
  119. package/dist/client/components/ApiKeySettings.js +4 -4
  120. package/dist/client/components/ApiKeySettings.js.map +1 -1
  121. package/dist/client/components/CodeRequiredDialog.d.ts.map +1 -1
  122. package/dist/client/components/CodeRequiredDialog.js +4 -3
  123. package/dist/client/components/CodeRequiredDialog.js.map +1 -1
  124. package/dist/client/composer/MentionPopover.d.ts +26 -0
  125. package/dist/client/composer/MentionPopover.d.ts.map +1 -0
  126. package/dist/client/composer/MentionPopover.js +130 -0
  127. package/dist/client/composer/MentionPopover.js.map +1 -0
  128. package/dist/client/composer/TiptapComposer.d.ts +19 -0
  129. package/dist/client/composer/TiptapComposer.d.ts.map +1 -0
  130. package/dist/client/composer/TiptapComposer.js +415 -0
  131. package/dist/client/composer/TiptapComposer.js.map +1 -0
  132. package/dist/client/composer/extensions/FileReference.d.ts +3 -0
  133. package/dist/client/composer/extensions/FileReference.d.ts.map +1 -0
  134. package/dist/client/composer/extensions/FileReference.js +36 -0
  135. package/dist/client/composer/extensions/FileReference.js.map +1 -0
  136. package/dist/client/composer/extensions/MentionReference.d.ts +3 -0
  137. package/dist/client/composer/extensions/MentionReference.d.ts.map +1 -0
  138. package/dist/client/composer/extensions/MentionReference.js +63 -0
  139. package/dist/client/composer/extensions/MentionReference.js.map +1 -0
  140. package/dist/client/composer/extensions/SkillReference.d.ts +3 -0
  141. package/dist/client/composer/extensions/SkillReference.d.ts.map +1 -0
  142. package/dist/client/composer/extensions/SkillReference.js +40 -0
  143. package/dist/client/composer/extensions/SkillReference.js.map +1 -0
  144. package/dist/client/composer/index.d.ts +8 -0
  145. package/dist/client/composer/index.d.ts.map +1 -0
  146. package/dist/client/composer/index.js +7 -0
  147. package/dist/client/composer/index.js.map +1 -0
  148. package/dist/client/composer/types.d.ts +32 -0
  149. package/dist/client/composer/types.d.ts.map +1 -0
  150. package/dist/client/composer/types.js +2 -0
  151. package/dist/client/composer/types.js.map +1 -0
  152. package/dist/client/composer/use-file-search.d.ts +6 -0
  153. package/dist/client/composer/use-file-search.d.ts.map +1 -0
  154. package/dist/client/composer/use-file-search.js +40 -0
  155. package/dist/client/composer/use-file-search.js.map +1 -0
  156. package/dist/client/composer/use-mention-search.d.ts +6 -0
  157. package/dist/client/composer/use-mention-search.d.ts.map +1 -0
  158. package/dist/client/composer/use-mention-search.js +39 -0
  159. package/dist/client/composer/use-mention-search.js.map +1 -0
  160. package/dist/client/composer/use-skills.d.ts +7 -0
  161. package/dist/client/composer/use-skills.d.ts.map +1 -0
  162. package/dist/client/composer/use-skills.js +38 -0
  163. package/dist/client/composer/use-skills.js.map +1 -0
  164. package/dist/client/index.d.ts +9 -4
  165. package/dist/client/index.d.ts.map +1 -1
  166. package/dist/client/index.js +8 -3
  167. package/dist/client/index.js.map +1 -1
  168. package/dist/client/resources/ResourceEditor.d.ts +7 -0
  169. package/dist/client/resources/ResourceEditor.d.ts.map +1 -0
  170. package/dist/client/resources/ResourceEditor.js +851 -0
  171. package/dist/client/resources/ResourceEditor.js.map +1 -0
  172. package/dist/client/resources/ResourceTree.d.ts +13 -0
  173. package/dist/client/resources/ResourceTree.d.ts.map +1 -0
  174. package/dist/client/resources/ResourceTree.js +122 -0
  175. package/dist/client/resources/ResourceTree.js.map +1 -0
  176. package/dist/client/resources/ResourcesPanel.d.ts +2 -0
  177. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -0
  178. package/dist/client/resources/ResourcesPanel.js +341 -0
  179. package/dist/client/resources/ResourcesPanel.js.map +1 -0
  180. package/dist/client/resources/index.d.ts +5 -0
  181. package/dist/client/resources/index.d.ts.map +1 -0
  182. package/dist/client/resources/index.js +5 -0
  183. package/dist/client/resources/index.js.map +1 -0
  184. package/dist/client/resources/use-resources.d.ts +45 -0
  185. package/dist/client/resources/use-resources.d.ts.map +1 -0
  186. package/dist/client/resources/use-resources.js +102 -0
  187. package/dist/client/resources/use-resources.js.map +1 -0
  188. package/dist/client/sse-event-processor.d.ts +50 -0
  189. package/dist/client/sse-event-processor.d.ts.map +1 -0
  190. package/dist/client/sse-event-processor.js +267 -0
  191. package/dist/client/sse-event-processor.js.map +1 -0
  192. package/dist/client/terminal/AgentTerminal.d.ts +1 -1
  193. package/dist/client/terminal/AgentTerminal.d.ts.map +1 -1
  194. package/dist/client/terminal/AgentTerminal.js +11 -6
  195. package/dist/client/terminal/AgentTerminal.js.map +1 -1
  196. package/dist/client/use-agent-chat.d.ts +1 -1
  197. package/dist/client/use-agent-chat.d.ts.map +1 -1
  198. package/dist/client/use-agent-chat.js +3 -3
  199. package/dist/client/use-agent-chat.js.map +1 -1
  200. package/dist/client/use-chat-threads.d.ts +36 -0
  201. package/dist/client/use-chat-threads.d.ts.map +1 -0
  202. package/dist/client/use-chat-threads.js +175 -0
  203. package/dist/client/use-chat-threads.js.map +1 -0
  204. package/dist/client/use-db-sync.d.ts +35 -0
  205. package/dist/client/use-db-sync.d.ts.map +1 -0
  206. package/dist/client/use-db-sync.js +74 -0
  207. package/dist/client/use-db-sync.js.map +1 -0
  208. package/dist/client/use-dev-mode.d.ts +4 -2
  209. package/dist/client/use-dev-mode.d.ts.map +1 -1
  210. package/dist/client/use-dev-mode.js +39 -12
  211. package/dist/client/use-dev-mode.js.map +1 -1
  212. package/dist/client/use-file-sync-status.d.ts +1 -1
  213. package/dist/client/use-file-sync-status.js +3 -3
  214. package/dist/client/use-file-sync-status.js.map +1 -1
  215. package/dist/client/use-session.d.ts +1 -1
  216. package/dist/client/use-session.js +2 -2
  217. package/dist/client/use-session.js.map +1 -1
  218. package/dist/client/useProductionAgent.d.ts +1 -1
  219. package/dist/client/useProductionAgent.d.ts.map +1 -1
  220. package/dist/client/useProductionAgent.js +38 -3
  221. package/dist/client/useProductionAgent.js.map +1 -1
  222. package/dist/credentials/index.d.ts +18 -0
  223. package/dist/credentials/index.d.ts.map +1 -0
  224. package/dist/credentials/index.js +32 -0
  225. package/dist/credentials/index.js.map +1 -0
  226. package/dist/db/client.d.ts +35 -0
  227. package/dist/db/client.d.ts.map +1 -0
  228. package/dist/db/client.js +248 -0
  229. package/dist/db/client.js.map +1 -0
  230. package/dist/db/create-get-db.d.ts.map +1 -1
  231. package/dist/db/create-get-db.js +103 -16
  232. package/dist/db/create-get-db.js.map +1 -1
  233. package/dist/db/index.d.ts +10 -6
  234. package/dist/db/index.d.ts.map +1 -1
  235. package/dist/db/index.js +10 -4
  236. package/dist/db/index.js.map +1 -1
  237. package/dist/db/migrations.d.ts.map +1 -1
  238. package/dist/db/migrations.js +31 -30
  239. package/dist/db/migrations.js.map +1 -1
  240. package/dist/db/schema.d.ts +45 -0
  241. package/dist/db/schema.d.ts.map +1 -0
  242. package/dist/db/schema.js +61 -0
  243. package/dist/db/schema.js.map +1 -0
  244. package/dist/deploy/build.js +35 -6
  245. package/dist/deploy/build.js.map +1 -1
  246. package/dist/deploy/route-discovery.d.ts +9 -0
  247. package/dist/deploy/route-discovery.d.ts.map +1 -1
  248. package/dist/deploy/route-discovery.js +30 -1
  249. package/dist/deploy/route-discovery.js.map +1 -1
  250. package/dist/index.browser.d.ts +1 -1
  251. package/dist/index.browser.d.ts.map +1 -1
  252. package/dist/index.browser.js +1 -1
  253. package/dist/index.browser.js.map +1 -1
  254. package/dist/index.d.ts +3 -2
  255. package/dist/index.d.ts.map +1 -1
  256. package/dist/index.js +2 -1
  257. package/dist/index.js.map +1 -1
  258. package/dist/oauth-tokens/store.d.ts.map +1 -1
  259. package/dist/oauth-tokens/store.js +43 -81
  260. package/dist/oauth-tokens/store.js.map +1 -1
  261. package/dist/resources/emitter.d.ts +13 -0
  262. package/dist/resources/emitter.d.ts.map +1 -0
  263. package/dist/resources/emitter.js +32 -0
  264. package/dist/resources/emitter.js.map +1 -0
  265. package/dist/resources/handlers.d.ts +45 -0
  266. package/dist/resources/handlers.d.ts.map +1 -0
  267. package/dist/resources/handlers.js +219 -0
  268. package/dist/resources/handlers.js.map +1 -0
  269. package/dist/resources/index.d.ts +5 -0
  270. package/dist/resources/index.d.ts.map +1 -0
  271. package/dist/resources/index.js +5 -0
  272. package/dist/resources/index.js.map +1 -0
  273. package/dist/resources/script-helpers.d.ts +24 -0
  274. package/dist/resources/script-helpers.d.ts.map +1 -0
  275. package/dist/resources/script-helpers.js +36 -0
  276. package/dist/resources/script-helpers.js.map +1 -0
  277. package/dist/resources/store.d.ts +35 -0
  278. package/dist/resources/store.d.ts.map +1 -0
  279. package/dist/resources/store.js +453 -0
  280. package/dist/resources/store.js.map +1 -0
  281. package/dist/scripts/call-agent.d.ts +5 -0
  282. package/dist/scripts/call-agent.d.ts.map +1 -0
  283. package/dist/scripts/call-agent.js +107 -0
  284. package/dist/scripts/call-agent.js.map +1 -0
  285. package/dist/scripts/core-scripts.d.ts.map +1 -1
  286. package/dist/scripts/core-scripts.js +2 -0
  287. package/dist/scripts/core-scripts.js.map +1 -1
  288. package/dist/scripts/db/exec.d.ts +6 -2
  289. package/dist/scripts/db/exec.d.ts.map +1 -1
  290. package/dist/scripts/db/exec.js +127 -36
  291. package/dist/scripts/db/exec.js.map +1 -1
  292. package/dist/scripts/db/query.d.ts +7 -2
  293. package/dist/scripts/db/query.d.ts.map +1 -1
  294. package/dist/scripts/db/query.js +89 -45
  295. package/dist/scripts/db/query.js.map +1 -1
  296. package/dist/scripts/db/schema.d.ts +2 -2
  297. package/dist/scripts/db/schema.d.ts.map +1 -1
  298. package/dist/scripts/db/schema.js +145 -6
  299. package/dist/scripts/db/schema.js.map +1 -1
  300. package/dist/scripts/db/scoping.d.ts +36 -0
  301. package/dist/scripts/db/scoping.d.ts.map +1 -0
  302. package/dist/scripts/db/scoping.js +198 -0
  303. package/dist/scripts/db/scoping.js.map +1 -0
  304. package/dist/scripts/dev/index.d.ts +2 -2
  305. package/dist/scripts/dev/index.js +1 -1
  306. package/dist/scripts/dev/list-files.d.ts +2 -2
  307. package/dist/scripts/dev/read-file.d.ts +2 -2
  308. package/dist/scripts/dev/read-file.js +1 -1
  309. package/dist/scripts/dev/read-file.js.map +1 -1
  310. package/dist/scripts/dev/search-files.d.ts +2 -2
  311. package/dist/scripts/dev/search-files.js +1 -1
  312. package/dist/scripts/dev/search-files.js.map +1 -1
  313. package/dist/scripts/dev/shell.d.ts +2 -2
  314. package/dist/scripts/dev/shell.js +1 -1
  315. package/dist/scripts/dev/shell.js.map +1 -1
  316. package/dist/scripts/dev/write-file.d.ts +2 -2
  317. package/dist/scripts/dev/write-file.js +1 -1
  318. package/dist/scripts/dev/write-file.js.map +1 -1
  319. package/dist/scripts/resources/delete.d.ts +10 -0
  320. package/dist/scripts/resources/delete.d.ts.map +1 -0
  321. package/dist/scripts/resources/delete.js +38 -0
  322. package/dist/scripts/resources/delete.js.map +1 -0
  323. package/dist/scripts/resources/index.d.ts +2 -0
  324. package/dist/scripts/resources/index.d.ts.map +1 -0
  325. package/dist/scripts/resources/index.js +8 -0
  326. package/dist/scripts/resources/index.js.map +1 -0
  327. package/dist/scripts/resources/list.d.ts +10 -0
  328. package/dist/scripts/resources/list.d.ts.map +1 -0
  329. package/dist/scripts/resources/list.js +57 -0
  330. package/dist/scripts/resources/list.js.map +1 -0
  331. package/dist/scripts/resources/migrate-learnings.d.ts +10 -0
  332. package/dist/scripts/resources/migrate-learnings.d.ts.map +1 -0
  333. package/dist/scripts/resources/migrate-learnings.js +23 -0
  334. package/dist/scripts/resources/migrate-learnings.js.map +1 -0
  335. package/dist/scripts/resources/read.d.ts +10 -0
  336. package/dist/scripts/resources/read.d.ts.map +1 -0
  337. package/dist/scripts/resources/read.js +59 -0
  338. package/dist/scripts/resources/read.js.map +1 -0
  339. package/dist/scripts/resources/write.d.ts +10 -0
  340. package/dist/scripts/resources/write.d.ts.map +1 -0
  341. package/dist/scripts/resources/write.js +67 -0
  342. package/dist/scripts/resources/write.js.map +1 -0
  343. package/dist/scripts/runner.d.ts +7 -7
  344. package/dist/scripts/runner.d.ts.map +1 -1
  345. package/dist/scripts/runner.js +68 -27
  346. package/dist/scripts/runner.js.map +1 -1
  347. package/dist/scripts/utils.d.ts +4 -1
  348. package/dist/scripts/utils.d.ts.map +1 -1
  349. package/dist/scripts/utils.js +5 -3
  350. package/dist/scripts/utils.js.map +1 -1
  351. package/dist/server/action-discovery.d.ts +40 -0
  352. package/dist/server/action-discovery.d.ts.map +1 -0
  353. package/dist/server/action-discovery.js +189 -0
  354. package/dist/server/action-discovery.js.map +1 -0
  355. package/dist/server/agent-chat-plugin.d.ts +12 -23
  356. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  357. package/dist/server/agent-chat-plugin.js +1087 -36
  358. package/dist/server/agent-chat-plugin.js.map +1 -1
  359. package/dist/server/agent-discovery.d.ts +16 -0
  360. package/dist/server/agent-discovery.d.ts.map +1 -0
  361. package/dist/server/agent-discovery.js +136 -0
  362. package/dist/server/agent-discovery.js.map +1 -0
  363. package/dist/server/auth-plugin.d.ts +5 -0
  364. package/dist/server/auth-plugin.d.ts.map +1 -1
  365. package/dist/server/auth-plugin.js +12 -1
  366. package/dist/server/auth-plugin.js.map +1 -1
  367. package/dist/server/auth.d.ts +3 -1
  368. package/dist/server/auth.d.ts.map +1 -1
  369. package/dist/server/auth.js +576 -117
  370. package/dist/server/auth.js.map +1 -1
  371. package/dist/server/core-routes-plugin.d.ts +57 -0
  372. package/dist/server/core-routes-plugin.d.ts.map +1 -0
  373. package/dist/server/core-routes-plugin.js +125 -0
  374. package/dist/server/core-routes-plugin.js.map +1 -0
  375. package/dist/server/create-server.d.ts +4 -4
  376. package/dist/server/create-server.d.ts.map +1 -1
  377. package/dist/server/create-server.js +5 -5
  378. package/dist/server/create-server.js.map +1 -1
  379. package/dist/server/default-watcher.d.ts +9 -3
  380. package/dist/server/default-watcher.d.ts.map +1 -1
  381. package/dist/server/default-watcher.js +26 -6
  382. package/dist/server/default-watcher.js.map +1 -1
  383. package/dist/server/google-auth-plugin.js +3 -3
  384. package/dist/server/google-auth-plugin.js.map +1 -1
  385. package/dist/server/google-oauth.d.ts +72 -0
  386. package/dist/server/google-oauth.d.ts.map +1 -0
  387. package/dist/server/google-oauth.js +187 -0
  388. package/dist/server/google-oauth.js.map +1 -0
  389. package/dist/server/index.d.ts +9 -2
  390. package/dist/server/index.d.ts.map +1 -1
  391. package/dist/server/index.js +8 -1
  392. package/dist/server/index.js.map +1 -1
  393. package/dist/server/oauth-helpers.d.ts +16 -0
  394. package/dist/server/oauth-helpers.d.ts.map +1 -0
  395. package/dist/server/oauth-helpers.js +25 -0
  396. package/dist/server/oauth-helpers.js.map +1 -0
  397. package/dist/server/poll.d.ts +40 -0
  398. package/dist/server/poll.d.ts.map +1 -0
  399. package/dist/server/poll.js +49 -0
  400. package/dist/server/poll.js.map +1 -0
  401. package/dist/server/resources-plugin.d.ts +27 -0
  402. package/dist/server/resources-plugin.d.ts.map +1 -0
  403. package/dist/server/resources-plugin.js +74 -0
  404. package/dist/server/resources-plugin.js.map +1 -0
  405. package/dist/server/script-discovery.d.ts +6 -0
  406. package/dist/server/script-discovery.d.ts.map +1 -0
  407. package/dist/server/script-discovery.js +6 -0
  408. package/dist/server/script-discovery.js.map +1 -0
  409. package/dist/server/sse.d.ts +1 -1
  410. package/dist/server/sse.js +1 -1
  411. package/dist/settings/handlers.d.ts +3 -3
  412. package/dist/settings/handlers.d.ts.map +1 -1
  413. package/dist/settings/handlers.js +8 -6
  414. package/dist/settings/handlers.js.map +1 -1
  415. package/dist/settings/index.d.ts +1 -1
  416. package/dist/settings/index.d.ts.map +1 -1
  417. package/dist/settings/index.js.map +1 -1
  418. package/dist/settings/store.d.ts +6 -2
  419. package/dist/settings/store.d.ts.map +1 -1
  420. package/dist/settings/store.js +26 -63
  421. package/dist/settings/store.js.map +1 -1
  422. package/dist/settings/user-settings.d.ts +3 -2
  423. package/dist/settings/user-settings.d.ts.map +1 -1
  424. package/dist/settings/user-settings.js +5 -5
  425. package/dist/settings/user-settings.js.map +1 -1
  426. package/dist/tailwind.preset.d.ts +7 -6
  427. package/dist/tailwind.preset.d.ts.map +1 -1
  428. package/dist/tailwind.preset.js +18 -1
  429. package/dist/tailwind.preset.js.map +1 -1
  430. package/dist/terminal/cli-registry.d.ts +1 -1
  431. package/dist/terminal/cli-registry.js +3 -3
  432. package/dist/terminal/cli-registry.js.map +1 -1
  433. package/dist/terminal/pty-server.d.ts.map +1 -1
  434. package/dist/terminal/pty-server.js +65 -11
  435. package/dist/terminal/pty-server.js.map +1 -1
  436. package/dist/terminal/terminal-plugin.d.ts +2 -2
  437. package/dist/terminal/terminal-plugin.d.ts.map +1 -1
  438. package/dist/terminal/terminal-plugin.js +27 -21
  439. package/dist/terminal/terminal-plugin.js.map +1 -1
  440. package/dist/vite/client.d.ts.map +1 -1
  441. package/dist/vite/client.js +114 -8
  442. package/dist/vite/client.js.map +1 -1
  443. package/dist/vite/dev-api-server.d.ts +1 -1
  444. package/dist/vite/dev-api-server.d.ts.map +1 -1
  445. package/dist/vite/dev-api-server.js +105 -22
  446. package/dist/vite/dev-api-server.js.map +1 -1
  447. package/package.json +22 -6
  448. package/src/templates/default/.agents/skills/actions/SKILL.md +136 -0
  449. package/src/templates/default/.agents/skills/create-skill/SKILL.md +1 -1
  450. package/src/templates/default/.agents/skills/delegate-to-agent/SKILL.md +1 -1
  451. package/src/templates/default/.agents/skills/files-as-database/SKILL.md +2 -2
  452. package/src/templates/default/.agents/skills/real-time-sync/SKILL.md +112 -0
  453. package/src/templates/default/AGENTS.md +56 -164
  454. package/src/templates/default/DEVELOPING.md +117 -0
  455. package/src/templates/default/{scripts → actions}/hello.ts +1 -1
  456. package/src/templates/default/actions/navigate.ts +53 -0
  457. package/src/templates/default/actions/view-screen.ts +39 -0
  458. package/src/templates/default/app/global.css +2 -2
  459. package/src/templates/default/app/root.tsx +19 -16
  460. package/src/templates/default/app/routes/_index.tsx +1 -1
  461. package/src/templates/default/package.json +4 -0
  462. package/src/templates/default/server/plugins/.gitkeep +0 -0
  463. package/dist/a2a/middleware.d.ts +0 -3
  464. package/dist/a2a/middleware.d.ts.map +0 -1
  465. package/dist/a2a/middleware.js +0 -36
  466. package/dist/a2a/middleware.js.map +0 -1
  467. package/dist/client/use-file-watcher.d.ts +0 -23
  468. package/dist/client/use-file-watcher.d.ts.map +0 -1
  469. package/dist/client/use-file-watcher.js +0 -50
  470. package/dist/client/use-file-watcher.js.map +0 -1
  471. package/src/templates/default/.agents/skills/scripts/SKILL.md +0 -121
  472. package/src/templates/default/.agents/skills/sse-file-watcher/SKILL.md +0 -80
  473. package/src/templates/default/server/plugins/agent-chat.ts +0 -1
  474. package/src/templates/default/server/plugins/auth.ts +0 -1
  475. package/src/templates/default/server/plugins/file-sync.ts +0 -1
  476. package/src/templates/default/server/plugins/terminal.ts +0 -1
  477. package/src/templates/default/server/routes/api/events.get.ts +0 -3
  478. package/src/templates/default/server/routes/api/file-sync/status.get.ts +0 -4
  479. /package/src/templates/default/{scripts → actions}/run.ts +0 -0
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  /**
3
3
  * AgentPanel — unified agent component with chat and CLI terminal modes.
4
4
  *
@@ -21,17 +21,44 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
21
21
  * // Full page
22
22
  * <AgentPanel className="h-screen" />
23
23
  */
24
- import { useState, useEffect, lazy, Suspense } from "react";
25
- import { AssistantChat } from "./AssistantChat.js";
24
+ import ReactDOM from "react-dom";
25
+ import { useState, useEffect, useRef, useCallback, lazy, Suspense, startTransition, } from "react";
26
+ import * as SelectPrimitive from "@radix-ui/react-select";
27
+ import * as TooltipPrimitive from "@radix-ui/react-tooltip";
28
+ import { IconMessage, IconTerminal2, IconSettings, IconLayoutSidebarRightCollapse, IconChevronDown, IconCheck, IconPlus, IconFolder, IconX, IconPencil, IconDotsVertical, IconHistory, } from "@tabler/icons-react";
29
+ import { MultiTabAssistantChat, } from "./MultiTabAssistantChat.js";
30
+ import { useDevMode } from "./use-dev-mode.js";
26
31
  import { cn } from "./utils.js";
27
32
  // Lazy-load AgentTerminal to avoid bundling xterm.js when not needed
28
33
  const AgentTerminal = lazy(() => import("./terminal/index.js").then((m) => ({ default: m.AgentTerminal })));
34
+ // Lazy-load ResourcesPanel to avoid bundling when not needed
35
+ const ResourcesPanel = lazy(() => import("./resources/ResourcesPanel.js").then((m) => ({
36
+ default: m.ResourcesPanel,
37
+ })));
29
38
  const CLI_STORAGE_KEY = "agent-native-cli-command";
30
- const CLI_DEFAULT = "fusion";
39
+ const CLI_DEFAULT = "builder";
40
+ const EXEC_MODE_KEY = "agent-native-exec-mode";
41
+ const AGENT_PANEL_FONT_FAMILY = 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif';
42
+ const AGENT_PANEL_ROOT_STYLE = {
43
+ fontFamily: AGENT_PANEL_FONT_FAMILY,
44
+ fontSize: 13,
45
+ lineHeight: 1.2,
46
+ };
47
+ const AGENT_PANEL_HEADER_CLASS = "relative z-[240] flex h-11 shrink-0 items-center justify-between gap-2 border-b border-border";
48
+ const AGENT_PANEL_HEADER_STYLE = {
49
+ paddingLeft: 12,
50
+ paddingRight: 8,
51
+ };
52
+ const AGENT_PANEL_CONTROL_STYLE = {
53
+ fontSize: 12,
54
+ lineHeight: 1,
55
+ };
31
56
  function useAvailableClis() {
32
57
  const [clis, setClis] = useState([]);
33
58
  useEffect(() => {
34
- fetch("/api/available-clis")
59
+ // Try to fetch available CLIs — endpoint is provided by the terminal plugin.
60
+ // Returns 404 gracefully when the plugin isn't loaded.
61
+ fetch("/_agent-native/available-clis")
35
62
  .then((r) => (r.ok ? r.json() : []))
36
63
  .then((data) => setClis(data))
37
64
  .catch(() => { });
@@ -39,12 +66,15 @@ function useAvailableClis() {
39
66
  return clis;
40
67
  }
41
68
  function useCliSelection() {
42
- const [selected, setSelected] = useState(() => {
43
- if (typeof localStorage !== "undefined") {
44
- return localStorage.getItem(CLI_STORAGE_KEY) || CLI_DEFAULT;
69
+ const [selected, setSelected] = useState(CLI_DEFAULT);
70
+ useEffect(() => {
71
+ try {
72
+ const saved = localStorage.getItem(CLI_STORAGE_KEY);
73
+ if (saved)
74
+ setSelected(saved);
45
75
  }
46
- return CLI_DEFAULT;
47
- });
76
+ catch { }
77
+ }, []);
48
78
  const select = (cmd) => {
49
79
  setSelected(cmd);
50
80
  try {
@@ -58,47 +88,454 @@ function useCliSelection() {
58
88
  const IS_DEV = typeof import.meta !== "undefined" &&
59
89
  typeof import.meta.env !== "undefined" &&
60
90
  import.meta.env.DEV === true;
61
- // ─── Icons ──────────────────────────────────────────────────────────────────
62
- function ChatBubbleIcon({ className }) {
63
- return (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 1.75, strokeLinecap: "round", strokeLinejoin: "round", className: className, children: _jsx("path", { d: "M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z" }) }));
91
+ function SettingsSelect({ label, value, options, onValueChange, }) {
92
+ const selected = options.find((option) => option.value === value);
93
+ return (_jsxs("div", { className: "space-y-1.5", children: [_jsx("p", { className: "text-[12px] font-medium text-foreground", children: label }), _jsxs(SelectPrimitive.Root, { value: value, onValueChange: onValueChange, children: [_jsxs(SelectPrimitive.Trigger, { className: "flex h-9 w-full items-center justify-between rounded-md border border-border bg-background px-3 text-left text-[12px] text-foreground outline-none transition-colors hover:bg-accent/40 data-[placeholder]:text-muted-foreground", "aria-label": label, style: AGENT_PANEL_CONTROL_STYLE, children: [_jsx(SelectPrimitive.Value, { children: selected?.label ?? value }), _jsx(SelectPrimitive.Icon, { asChild: true, children: _jsx(IconChevronDown, { size: 14, className: "text-muted-foreground" }) })] }), _jsx(SelectPrimitive.Portal, { children: _jsx(SelectPrimitive.Content, { position: "popper", sideOffset: 6, className: "z-[9999] w-[var(--radix-select-trigger-width)] overflow-hidden rounded-lg border border-border bg-popover shadow-lg", children: _jsx(SelectPrimitive.Viewport, { className: "p-1", children: options.map((option) => (_jsxs(SelectPrimitive.Item, { value: option.value, className: "relative flex w-full cursor-pointer select-none items-start gap-2 rounded-md px-8 py-2.5 text-[12px] outline-none data-[highlighted]:bg-accent/60 data-[state=checked]:bg-accent/40", style: AGENT_PANEL_CONTROL_STYLE, children: [_jsx("span", { className: "absolute left-2 top-2.5 flex h-4 w-4 items-center justify-center text-muted-foreground", children: _jsx(SelectPrimitive.ItemIndicator, { children: _jsx(IconCheck, { size: 14 }) }) }), _jsxs("div", { className: "flex min-w-0 flex-col", children: [_jsx(SelectPrimitive.ItemText, { children: _jsx("span", { className: "text-foreground", children: option.label }) }), option.description ? (_jsx("span", { className: "mt-0.5 text-[11px] leading-relaxed text-muted-foreground", children: option.description })) : null] })] }, option.value))) }) }) })] })] }));
64
94
  }
65
- function TerminalIcon({ className }) {
66
- return (_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 1.75, strokeLinecap: "round", strokeLinejoin: "round", className: className, children: [_jsx("polyline", { points: "4 17 10 11 4 5" }), _jsx("line", { x1: "12", y1: "19", x2: "20", y2: "19" })] }));
95
+ function IconTooltip({ content, children, }) {
96
+ return (_jsx(TooltipPrimitive.Provider, { delayDuration: 250, children: _jsxs(TooltipPrimitive.Root, { children: [_jsx(TooltipPrimitive.Trigger, { asChild: true, children: children }), _jsx(TooltipPrimitive.Portal, { children: _jsxs(TooltipPrimitive.Content, { side: "bottom", sideOffset: 8, className: "z-[230] overflow-hidden rounded-md border border-border bg-popover px-2 py-1 text-[11px] text-foreground shadow-md", children: [content, _jsx(TooltipPrimitive.Arrow, { className: "fill-popover" })] }) })] }) }));
67
97
  }
68
- export function AgentPanel({ defaultMode = "chat", className, apiUrl, emptyStateText, suggestions, showHeader = true, }) {
69
- const [mode, setMode] = useState(defaultMode);
98
+ // ─── Agent Settings Popover ──────────────────────────────────────────────────
99
+ function AgentSettingsPopover({ isDevMode, onToggle, }) {
100
+ const [open, setOpen] = useState(false);
101
+ const popoverRef = useRef(null);
102
+ const buttonRef = useRef(null);
103
+ // Close on outside click
104
+ useEffect(() => {
105
+ if (!open)
106
+ return;
107
+ function handleClick(e) {
108
+ const target = e.target;
109
+ // Ignore clicks inside the popover itself or its trigger button
110
+ if (popoverRef.current?.contains(target))
111
+ return;
112
+ if (buttonRef.current?.contains(target))
113
+ return;
114
+ // Ignore clicks inside portaled Radix Select content (rendered outside the popover DOM)
115
+ if (target.closest?.("[data-radix-popper-content-wrapper], [data-radix-select-viewport], [role='listbox']"))
116
+ return;
117
+ setOpen(false);
118
+ }
119
+ document.addEventListener("mousedown", handleClick);
120
+ return () => document.removeEventListener("mousedown", handleClick);
121
+ }, [open]);
122
+ // Close on Escape
123
+ useEffect(() => {
124
+ if (!open)
125
+ return;
126
+ function handleKey(e) {
127
+ if (e.key === "Escape")
128
+ setOpen(false);
129
+ }
130
+ document.addEventListener("keydown", handleKey);
131
+ return () => document.removeEventListener("keydown", handleKey);
132
+ }, [open]);
133
+ const environmentOptions = [
134
+ {
135
+ value: "production",
136
+ label: "Production",
137
+ description: "Restricted to app tools only.",
138
+ },
139
+ {
140
+ value: "development",
141
+ label: "Development",
142
+ description: "Full access to code editing, shell, and files.",
143
+ },
144
+ ];
145
+ // Compute fixed position from the button so the popover escapes all
146
+ // stacking contexts (the CLI terminal otherwise paints over it).
147
+ const [pos, setPos] = useState(null);
148
+ useEffect(() => {
149
+ if (!open || !buttonRef.current)
150
+ return;
151
+ const rect = buttonRef.current.getBoundingClientRect();
152
+ setPos({
153
+ top: rect.bottom + 6,
154
+ right: window.innerWidth - rect.right,
155
+ });
156
+ }, [open]);
157
+ return (_jsxs("div", { className: "relative", children: [_jsx("button", { ref: buttonRef, onClick: () => setOpen(!open), className: cn("flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50", open && "bg-accent/50 text-foreground"), title: "Agent settings", children: _jsx(IconSettings, { size: 14 }) }), open &&
158
+ pos &&
159
+ ReactDOM.createPortal(_jsx("div", { ref: popoverRef, className: "fixed z-[9990] w-72 rounded-lg border border-border bg-popover shadow-md animate-in fade-in-0 zoom-in-95 duration-100", style: { top: pos.top, right: pos.right }, children: _jsx("div", { className: "space-y-3 p-3", children: _jsx(SettingsSelect, { label: "Environment", value: isDevMode ? "development" : "production", options: environmentOptions, onValueChange: (next) => {
160
+ const nextIsDev = next === "development";
161
+ if (nextIsDev !== isDevMode)
162
+ onToggle();
163
+ } }) }) }), document.body)] }));
164
+ }
165
+ function useClientOnly() {
166
+ const [mounted, setMounted] = useState(false);
167
+ useEffect(() => setMounted(true), []);
168
+ return mounted;
169
+ }
170
+ export function AgentPanel({ defaultMode = "chat", className, apiUrl, emptyStateText, suggestions, showHeader = true, onCollapse, }) {
171
+ const mounted = useClientOnly();
172
+ const [execMode, setExecMode] = useState(() => {
173
+ try {
174
+ const saved = localStorage.getItem(EXEC_MODE_KEY);
175
+ if (saved === "build" || saved === "plan")
176
+ return saved;
177
+ }
178
+ catch { }
179
+ return "build";
180
+ });
181
+ const switchExecMode = useCallback((next) => {
182
+ setExecMode(next);
183
+ try {
184
+ localStorage.setItem(EXEC_MODE_KEY, next);
185
+ }
186
+ catch { }
187
+ window.dispatchEvent(new CustomEvent("agent-panel:exec-mode-change", {
188
+ detail: { mode: next },
189
+ }));
190
+ }, []);
191
+ const [mode, setMode] = useState(() => {
192
+ try {
193
+ const saved = localStorage.getItem("agent-native-panel-mode");
194
+ if (saved === "chat" || saved === "cli" || saved === "resources")
195
+ return saved;
196
+ }
197
+ catch { }
198
+ return defaultMode;
199
+ });
200
+ useEffect(() => {
201
+ try {
202
+ localStorage.setItem("agent-native-panel-mode", mode);
203
+ }
204
+ catch { }
205
+ }, [mode]);
206
+ const switchMode = useCallback((m) => {
207
+ startTransition(() => setMode(m));
208
+ }, []);
209
+ // CLI terminal tabs (ephemeral — not persisted to SQL)
210
+ const [cliTabs, setCliTabs] = useState(["cli-1"]);
211
+ const [activeCliTab, setActiveCliTab] = useState("cli-1");
212
+ const cliCounter = useRef(1);
213
+ const addCliTab = useCallback(() => {
214
+ const id = `cli-${++cliCounter.current}`;
215
+ setCliTabs((prev) => [...prev, id]);
216
+ setActiveCliTab(id);
217
+ }, []);
218
+ const closeCliTab = useCallback((id) => {
219
+ setCliTabs((prev) => {
220
+ if (prev.length <= 1)
221
+ return prev;
222
+ const next = prev.filter((t) => t !== id);
223
+ if (id === activeCliTab) {
224
+ const idx = prev.indexOf(id);
225
+ setActiveCliTab(next[Math.min(idx, next.length - 1)]);
226
+ }
227
+ return next;
228
+ });
229
+ }, [activeCliTab]);
230
+ const closeOtherCliTabs = useCallback((id) => {
231
+ setCliTabs([id]);
232
+ setActiveCliTab(id);
233
+ }, []);
234
+ const closeAllCliTabs = useCallback(() => {
235
+ const id = `cli-${++cliCounter.current}`;
236
+ setCliTabs([id]);
237
+ setActiveCliTab(id);
238
+ }, []);
70
239
  const availableClis = useAvailableClis();
71
240
  const [selectedCli, selectCli] = useCliSelection();
72
241
  const selectedLabel = availableClis.find((c) => c.command === selectedCli)?.label || selectedCli;
73
- return (_jsxs("div", { className: cn("flex flex-1 flex-col h-full min-h-0", className), children: [showHeader && (_jsxs("div", { className: "flex h-11 shrink-0 items-center justify-between border-b border-border px-4", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsxs("button", { onClick: () => setMode("chat"), className: cn("flex items-center gap-1 px-2 py-1 rounded-md text-[12px]", mode === "chat"
242
+ const { isDevMode, canToggle, setDevMode } = useDevMode(apiUrl);
243
+ const isLocalhost = mounted &&
244
+ typeof window !== "undefined" &&
245
+ (window.location.hostname === "localhost" ||
246
+ window.location.hostname === "127.0.0.1" ||
247
+ window.location.hostname === "::1");
248
+ const showDevToggle = canToggle && isLocalhost;
249
+ const renderModeButtons = useCallback((activeMode) => (_jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [_jsxs("button", { onClick: () => switchMode("chat"), className: cn("flex items-center gap-1 rounded-md px-2 py-1 text-[12px] leading-none", activeMode === "chat"
250
+ ? "bg-accent text-foreground"
251
+ : "text-muted-foreground hover:bg-accent/50 hover:text-foreground"), title: "Chat mode", style: AGENT_PANEL_CONTROL_STYLE, children: [_jsx(IconMessage, { size: 14 }), "Chat"] }), isDevMode && (_jsxs("button", { onClick: () => switchMode("cli"), className: cn("flex items-center gap-1 rounded-md px-2 py-1 text-[12px] leading-none", activeMode === "cli"
252
+ ? "bg-accent text-foreground"
253
+ : "text-muted-foreground hover:bg-accent/50 hover:text-foreground"), title: "CLI terminal mode", style: AGENT_PANEL_CONTROL_STYLE, children: [_jsx(IconTerminal2, { size: 14 }), "CLI"] })), _jsxs("button", { onClick: () => switchMode("resources"), className: cn("flex items-center gap-1 rounded-md px-2 py-1 text-[12px] leading-none", activeMode === "resources"
254
+ ? "bg-accent text-foreground"
255
+ : "text-muted-foreground hover:bg-accent/50 hover:text-foreground"), title: "Files & resources", style: AGENT_PANEL_CONTROL_STYLE, children: [_jsx(IconFolder, { size: 14 }), "Files"] })] })), [isDevMode]);
256
+ const renderHeaderActions = useCallback(() => (_jsxs("div", { className: "flex shrink-0 items-center gap-1.5", children: [showDevToggle && (_jsx(IconTooltip, { content: "Agent settings", children: _jsx("div", { children: _jsx(AgentSettingsPopover, { isDevMode: isDevMode, onToggle: () => setDevMode(!isDevMode) }) }) })), onCollapse && (_jsx(IconTooltip, { content: "Collapse sidebar", children: _jsx("button", { onClick: onCollapse, className: "flex h-6 w-6 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50", children: _jsx(IconLayoutSidebarRightCollapse, { size: 14 }) }) }))] })), [isDevMode, onCollapse, setDevMode, showDevToggle]);
257
+ const [tabMenuOpen, setTabMenuOpen] = useState(null);
258
+ const [cliPickerOpen, setCliPickerOpen] = useState(false);
259
+ // Ref callback: scroll the active tab into view in the overflow container.
260
+ // Manually calculates scroll position to avoid scrollIntoView moving outer containers.
261
+ const activeTabRefCb = useCallback((el) => {
262
+ if (!el)
263
+ return;
264
+ const container = el.parentElement;
265
+ if (!container)
266
+ return;
267
+ // Use rAF so layout is settled after React commit
268
+ requestAnimationFrame(() => {
269
+ const tabLeft = el.offsetLeft;
270
+ const tabRight = tabLeft + el.offsetWidth;
271
+ const scrollLeft = container.scrollLeft;
272
+ const viewWidth = container.clientWidth;
273
+ if (tabLeft < scrollLeft) {
274
+ container.scrollLeft = tabLeft;
275
+ }
276
+ else if (tabRight > scrollLeft + viewWidth) {
277
+ container.scrollLeft = tabRight - viewWidth;
278
+ }
279
+ });
280
+ }, []);
281
+ const renderChatHeader = useCallback(({ tabs, activeTabId, setActiveTabId, addTab, closeTab, closeOtherTabs, closeAllTabs, showHistory, toggleHistory, }) => (_jsxs("div", { className: "flex flex-col shrink-0", children: [_jsxs("div", { className: AGENT_PANEL_HEADER_CLASS, style: AGENT_PANEL_HEADER_STYLE, children: [_jsx("div", { className: "flex min-w-0 flex-1 items-center gap-1 overflow-hidden", children: renderModeButtons(mode) }), _jsx("div", { className: "flex items-center gap-0.5", children: renderHeaderActions() })] }), (mode === "chat" || mode === "cli") && (_jsxs("div", { className: "flex items-center px-1 py-1 border-b border-border gap-0.5", children: [_jsx("div", { className: "flex items-center gap-0.5 min-w-0 overflow-x-auto scrollbar-none flex-1", children: mode === "chat"
282
+ ? tabs.map((tab) => (_jsxs("div", { role: "button", tabIndex: 0, ref: tab.id === activeTabId ? activeTabRefCb : undefined, onClick: () => setActiveTabId(tab.id), className: cn("agent-tab relative flex shrink-0 items-center gap-1 rounded-md px-2.5 py-1.5 text-[11px] font-medium cursor-pointer max-w-[150px]", tab.id === activeTabId
74
283
  ? "bg-accent text-foreground"
75
- : "text-muted-foreground hover:text-foreground hover:bg-accent/50"), title: "Chat mode", children: [_jsx(ChatBubbleIcon, { className: "h-3.5 w-3.5" }), "Chat"] }), IS_DEV && (_jsxs("button", { onClick: () => setMode("cli"), className: cn("flex items-center gap-1 px-2 py-1 rounded-md text-[12px]", mode === "cli"
284
+ : "text-muted-foreground hover:bg-accent hover:text-foreground"), children: [_jsx("span", { className: "truncate pr-1", children: tab.label }), tab.status === "running" && (_jsx("span", { className: "h-1.5 w-1.5 shrink-0 rounded-full bg-muted-foreground/50 animate-pulse" })), tabs.length > 1 && (_jsx("button", { type: "button", onClick: (e) => {
285
+ e.stopPropagation();
286
+ closeTab(tab.id);
287
+ }, className: "agent-tab-close flex items-center justify-end text-muted-foreground hover:text-foreground", style: {
288
+ position: "absolute",
289
+ right: 0,
290
+ top: 0,
291
+ bottom: 0,
292
+ width: 28,
293
+ paddingRight: 6,
294
+ borderRadius: "0 6px 6px 0",
295
+ background: "linear-gradient(to right, transparent, hsl(var(--accent)) 40%)",
296
+ }, children: _jsx(IconX, { size: 10 }) }))] }, tab.id)))
297
+ : cliTabs.map((id, i) => (_jsxs("div", { role: "button", tabIndex: 0, ref: id === activeCliTab ? activeTabRefCb : undefined, onClick: () => setActiveCliTab(id), className: cn("agent-tab relative flex shrink-0 items-center gap-1 rounded-md px-2.5 py-1.5 text-[11px] font-medium cursor-pointer", id === activeCliTab
76
298
  ? "bg-accent text-foreground"
77
- : "text-muted-foreground hover:text-foreground hover:bg-accent/50"), title: "CLI terminal mode", children: [_jsx(TerminalIcon, { className: "h-3.5 w-3.5" }), "CLI"] }))] }), IS_DEV && availableClis.length > 0 && (_jsx("select", { value: selectedCli, onChange: (e) => selectCli(e.target.value), className: "text-[12px] text-muted-foreground bg-transparent border border-border rounded px-1.5 py-0.5 outline-none hover:text-foreground cursor-pointer", title: "Select AI CLI", children: availableClis.map((cli) => (_jsx("option", { value: cli.command, children: cli.label }, cli.command))) }))] })), _jsx("div", { className: cn("flex-1 flex flex-col min-h-0", mode !== "chat" && "hidden"), children: _jsx(AssistantChat, { apiUrl: apiUrl, showHeader: false, showDevHint: IS_DEV, emptyStateText: emptyStateText, suggestions: suggestions, onSwitchToCli: IS_DEV ? () => setMode("cli") : undefined }) }), IS_DEV && mode === "cli" && (_jsx("div", { className: "flex-1 min-h-0", children: _jsx(Suspense, { fallback: _jsx("div", { className: "flex items-center justify-center h-full text-muted-foreground text-sm", children: "Loading terminal..." }), children: _jsx(AgentTerminal, { command: selectedCli, hideInHarness: false, className: "h-full", style: { background: "transparent" } }) }) }))] }));
299
+ : "text-muted-foreground hover:bg-accent hover:text-foreground"), children: [_jsxs("span", { children: ["Terminal ", i + 1] }), cliTabs.length > 1 && (_jsx("button", { type: "button", onClick: (e) => {
300
+ e.stopPropagation();
301
+ closeCliTab(id);
302
+ }, className: "agent-tab-close flex items-center justify-end text-muted-foreground hover:text-foreground", style: {
303
+ position: "absolute",
304
+ right: 0,
305
+ top: 0,
306
+ bottom: 0,
307
+ width: 28,
308
+ paddingRight: 6,
309
+ borderRadius: "0 6px 6px 0",
310
+ background: "linear-gradient(to right, transparent, hsl(var(--accent)) 40%)",
311
+ }, children: _jsx(IconX, { size: 10 }) }))] }, id))) }), _jsxs("div", { className: "flex items-center gap-0.5 shrink-0 ml-auto", children: [mode === "chat" && (_jsxs(_Fragment, { children: [_jsx(IconTooltip, { content: "New chat", children: _jsx("button", { onClick: addTab, className: "flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50", children: _jsx(IconPlus, { size: 14 }) }) }), toggleHistory && (_jsx(IconTooltip, { content: "Chat history", children: _jsx("button", { onClick: toggleHistory, className: cn("flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50", showHistory && "bg-accent text-foreground"), children: _jsx(IconHistory, { size: 14 }) }) })), _jsxs("div", { className: "relative", children: [_jsx(IconTooltip, { content: "Tab options", children: _jsx("button", { onClick: () => setTabMenuOpen(tabMenuOpen === "__chat_global"
312
+ ? null
313
+ : "__chat_global"), className: cn("flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50", tabMenuOpen === "__chat_global" &&
314
+ "bg-accent text-foreground"), children: _jsx(IconDotsVertical, { size: 14 }) }) }), tabMenuOpen === "__chat_global" && (_jsxs(_Fragment, { children: [_jsx("div", { className: "fixed inset-0 z-40", onClick: () => setTabMenuOpen(null) }), _jsxs("div", { className: "absolute right-0 top-full mt-1 z-50 w-44 rounded-md border border-border bg-popover py-1 shadow-lg", children: [_jsxs("button", { className: "flex w-full items-center justify-between px-3 py-1.5 text-xs text-foreground hover:bg-accent", onClick: () => {
315
+ closeTab(activeTabId);
316
+ setTabMenuOpen(null);
317
+ }, children: ["Close Tab", _jsxs("kbd", { className: "text-[10px] text-muted-foreground", children: ["\u2318", "W"] })] }), _jsx("button", { className: "flex w-full items-center px-3 py-1.5 text-xs text-foreground hover:bg-accent", onClick: () => {
318
+ closeOtherTabs(activeTabId);
319
+ setTabMenuOpen(null);
320
+ }, children: "Close Other Tabs" }), _jsx("button", { className: "flex w-full items-center px-3 py-1.5 text-xs text-foreground hover:bg-accent", onClick: () => {
321
+ closeAllTabs();
322
+ setTabMenuOpen(null);
323
+ }, children: "Close All Tabs" })] })] }))] })] })), mode === "cli" && (_jsxs(_Fragment, { children: [_jsx(IconTooltip, { content: "New terminal", children: _jsx("button", { onClick: addCliTab, className: "flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50", children: _jsx(IconPlus, { size: 14 }) }) }), availableClis.length > 0 && (_jsxs("div", { className: "relative", children: [_jsx(IconTooltip, { content: `CLI: ${selectedLabel}`, children: _jsx("button", { onClick: () => setCliPickerOpen(!cliPickerOpen), className: cn("flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50", cliPickerOpen && "bg-accent text-foreground"), children: _jsx(IconSettings, { size: 14 }) }) }), cliPickerOpen && (_jsxs(_Fragment, { children: [_jsx("div", { className: "fixed inset-0 z-40", onClick: () => setCliPickerOpen(false) }), _jsx("div", { className: "absolute right-0 top-full mt-1 z-50 w-48 rounded-md border border-border bg-popover py-1 shadow-lg", children: availableClis.map((cli) => (_jsxs("button", { className: cn("flex w-full items-center gap-2 px-3 py-1.5 text-xs hover:bg-accent", cli.command === selectedCli
324
+ ? "text-foreground font-medium"
325
+ : "text-muted-foreground"), onClick: () => {
326
+ selectCli(cli.command);
327
+ setCliPickerOpen(false);
328
+ }, children: [cli.command === selectedCli && (_jsx(IconCheck, { size: 12, className: "shrink-0" })), _jsx("span", { className: cli.command !== selectedCli ? "ml-5" : "", children: cli.label })] }, cli.command))) })] }))] })), _jsxs("div", { className: "relative", children: [_jsx(IconTooltip, { content: "Tab options", children: _jsx("button", { onClick: () => setTabMenuOpen(tabMenuOpen === "__cli_global"
329
+ ? null
330
+ : "__cli_global"), className: cn("flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50", tabMenuOpen === "__cli_global" &&
331
+ "bg-accent text-foreground"), children: _jsx(IconDotsVertical, { size: 14 }) }) }), tabMenuOpen === "__cli_global" && (_jsxs(_Fragment, { children: [_jsx("div", { className: "fixed inset-0 z-40", onClick: () => setTabMenuOpen(null) }), _jsxs("div", { className: "absolute right-0 top-full mt-1 z-50 w-44 rounded-md border border-border bg-popover py-1 shadow-lg", children: [_jsxs("button", { className: "flex w-full items-center justify-between px-3 py-1.5 text-xs text-foreground hover:bg-accent", onClick: () => {
332
+ closeCliTab(activeCliTab);
333
+ setTabMenuOpen(null);
334
+ }, children: ["Close Tab", _jsxs("kbd", { className: "text-[10px] text-muted-foreground", children: ["\u2318", "W"] })] }), _jsx("button", { className: "flex w-full items-center px-3 py-1.5 text-xs text-foreground hover:bg-accent", onClick: () => {
335
+ closeOtherCliTabs(activeCliTab);
336
+ setTabMenuOpen(null);
337
+ }, children: "Close Other Tabs" }), _jsx("button", { className: "flex w-full items-center px-3 py-1.5 text-xs text-foreground hover:bg-accent", onClick: () => {
338
+ closeAllCliTabs();
339
+ setTabMenuOpen(null);
340
+ }, children: "Close All Tabs" })] })] }))] })] }))] })] }))] })), [
341
+ mode,
342
+ renderHeaderActions,
343
+ renderModeButtons,
344
+ cliTabs,
345
+ activeCliTab,
346
+ addCliTab,
347
+ closeCliTab,
348
+ closeOtherCliTabs,
349
+ closeAllCliTabs,
350
+ tabMenuOpen,
351
+ availableClis,
352
+ selectedCli,
353
+ selectedLabel,
354
+ selectCli,
355
+ cliPickerOpen,
356
+ ]);
357
+ return (_jsxs("div", { className: cn("agent-panel-root flex flex-1 flex-col min-h-0 h-full text-[13px] leading-[1.2] antialiased", className), style: AGENT_PANEL_ROOT_STYLE, children: [_jsx("style", { dangerouslySetInnerHTML: {
358
+ __html: ".agent-tab-close{opacity:0}.agent-tab:hover .agent-tab-close{opacity:1}",
359
+ } }), _jsx("div", { className: cn("flex flex-col min-h-0", mode === "chat" ? "flex-1" : "shrink-0"), children: mounted && (_jsx(MultiTabAssistantChat, { apiUrl: apiUrl, showHeader: false, renderHeader: showHeader ? renderChatHeader : undefined, renderOverlay: undefined, contentHidden: mode !== "chat", emptyStateText: emptyStateText, suggestions: suggestions, onSwitchToCli: isDevMode ? () => switchMode("cli") : undefined, composerSlot: _jsxs("div", { className: "shrink-0 px-3 pt-1.5 pb-0 flex items-center justify-between gap-2", children: [execMode === "plan" ? (_jsxs("div", { className: "flex items-center gap-1.5 text-[11px] text-amber-700 dark:text-amber-400 min-w-0 truncate", children: [_jsx(IconPencil, { size: 12, className: "shrink-0" }), _jsx("span", { className: "truncate", children: "Plan mode \u2014 will plan before executing" })] })) : (_jsx("div", {})), _jsxs("div", { className: "flex shrink-0 items-center rounded-md border border-border overflow-hidden", style: AGENT_PANEL_CONTROL_STYLE, children: [_jsx("button", { onClick: () => switchExecMode("build"), className: cn("px-2 py-1 text-[11px] leading-none", execMode === "build"
360
+ ? "bg-accent text-foreground"
361
+ : "text-muted-foreground hover:bg-accent/50 hover:text-foreground"), title: "Build mode \u2014 agent executes immediately", children: "Build" }), _jsx("button", { onClick: () => switchExecMode("plan"), className: cn("px-2 py-1 text-[11px] leading-none", execMode === "plan"
362
+ ? "bg-amber-500/20 text-amber-700 dark:text-amber-400"
363
+ : "text-muted-foreground hover:bg-accent/50 hover:text-foreground"), title: "Plan mode \u2014 agent plans before executing", children: "Plan" })] })] }) })) }), isDevMode &&
364
+ cliTabs.map((id) => (_jsx("div", { className: cn("min-h-0 relative", mode === "cli" ? "flex-1" : "hidden"), style: {
365
+ display: mode === "cli" && id === activeCliTab ? undefined : "none",
366
+ }, children: _jsx(Suspense, { fallback: _jsx("div", { className: "flex items-center justify-center h-full text-muted-foreground text-sm", children: "Loading terminal..." }), children: _jsx(AgentTerminal, { command: selectedCli, hideInHarness: false, className: "h-full", style: { background: "transparent" } }) }) }, id))), mode === "resources" && (_jsx("div", { className: "flex-1 min-h-0", children: _jsx(Suspense, { fallback: _jsx("div", { className: "flex h-full flex-col min-h-0", children: _jsx("div", { className: "flex shrink-0 items-center justify-between border-b border-border px-2 py-1.5", children: _jsxs("div", { className: "flex items-center gap-1", children: [_jsx("div", { className: "h-5 w-16 rounded bg-muted animate-pulse" }), _jsx("div", { className: "h-5 w-14 rounded bg-muted animate-pulse" })] }) }) }), children: _jsx(ResourcesPanel, {}) }) }))] }));
367
+ }
368
+ // ─── Resize handle ──────────────────────────────────────────────────────────
369
+ const SIDEBAR_STORAGE_KEY = "agent-native-sidebar-width";
370
+ const SIDEBAR_OPEN_KEY = "agent-native-sidebar-open";
371
+ const SIDEBAR_MIN = 280;
372
+ const SIDEBAR_MAX = 700;
373
+ function ResizeHandle({ position, onDrag, }) {
374
+ const ref = useRef(null);
375
+ const dragging = useRef(false);
376
+ const lastX = useRef(0);
377
+ const onDragRef = useRef(onDrag);
378
+ onDragRef.current = onDrag;
379
+ const GRAB_ZONE = 5; // px on each side of the border
380
+ // All drag logic runs via document-level listeners so the 1px-wide
381
+ // element doesn't need to capture pointer events itself.
382
+ useEffect(() => {
383
+ const el = ref.current;
384
+ if (!el)
385
+ return;
386
+ let cursorActive = false;
387
+ function onMouseDown(e) {
388
+ const rect = el.getBoundingClientRect();
389
+ const dist = Math.abs(e.clientX - (rect.left + rect.width / 2));
390
+ if (dist > GRAB_ZONE)
391
+ return;
392
+ e.preventDefault();
393
+ dragging.current = true;
394
+ lastX.current = e.clientX;
395
+ document.body.style.cursor = "col-resize";
396
+ document.body.style.userSelect = "none";
397
+ }
398
+ function onMouseMove(e) {
399
+ if (dragging.current) {
400
+ const delta = e.clientX - lastX.current;
401
+ lastX.current = e.clientX;
402
+ onDragRef.current(position === "left" ? delta : -delta);
403
+ return;
404
+ }
405
+ // Hover cursor
406
+ const rect = el.getBoundingClientRect();
407
+ const dist = Math.abs(e.clientX - (rect.left + rect.width / 2));
408
+ const near = dist <= GRAB_ZONE;
409
+ if (near && !cursorActive) {
410
+ cursorActive = true;
411
+ document.body.style.cursor = "col-resize";
412
+ }
413
+ else if (!near && cursorActive) {
414
+ cursorActive = false;
415
+ document.body.style.cursor = "";
416
+ }
417
+ }
418
+ function onMouseUp() {
419
+ if (!dragging.current)
420
+ return;
421
+ dragging.current = false;
422
+ document.body.style.cursor = "";
423
+ document.body.style.userSelect = "";
424
+ }
425
+ document.addEventListener("mousedown", onMouseDown);
426
+ document.addEventListener("mousemove", onMouseMove);
427
+ document.addEventListener("mouseup", onMouseUp);
428
+ return () => {
429
+ document.removeEventListener("mousedown", onMouseDown);
430
+ document.removeEventListener("mousemove", onMouseMove);
431
+ document.removeEventListener("mouseup", onMouseUp);
432
+ if (cursorActive)
433
+ document.body.style.cursor = "";
434
+ };
435
+ }, [position]);
436
+ return (_jsx("div", { ref: ref, className: cn("relative z-20 shrink-0 w-px touch-none select-none transition-colors", "bg-border hover:bg-accent active:bg-accent"), style: { cursor: "col-resize" } }));
78
437
  }
79
438
  /**
80
439
  * Wraps app content with a toggleable agent sidebar.
81
440
  * Use AgentToggleButton in your header to open/close it.
82
441
  */
83
442
  export function AgentSidebar({ children, emptyStateText = "How can I help you?", suggestions, sidebarWidth = 380, position = "right", defaultOpen = false, }) {
84
- const [open, setOpen] = useState(defaultOpen);
443
+ const [open, setOpen] = useState(() => {
444
+ try {
445
+ const saved = localStorage.getItem(SIDEBAR_OPEN_KEY);
446
+ if (saved !== null)
447
+ return saved === "true";
448
+ }
449
+ catch { }
450
+ return defaultOpen;
451
+ });
452
+ const [width, setWidth] = useState(sidebarWidth);
85
453
  useEffect(() => {
86
- const handler = () => {
87
- setOpen((prev) => !prev);
454
+ try {
455
+ const saved = localStorage.getItem(SIDEBAR_STORAGE_KEY);
456
+ if (saved) {
457
+ const n = parseInt(saved, 10);
458
+ if (n >= SIDEBAR_MIN && n <= SIDEBAR_MAX)
459
+ setWidth(n);
460
+ }
461
+ }
462
+ catch { }
463
+ }, []);
464
+ const setOpenPersisted = useCallback((next) => {
465
+ setOpen((prev) => {
466
+ const value = typeof next === "function" ? next(prev) : next;
467
+ try {
468
+ localStorage.setItem(SIDEBAR_OPEN_KEY, String(value));
469
+ }
470
+ catch { }
471
+ return value;
472
+ });
473
+ }, []);
474
+ useEffect(() => {
475
+ const toggleHandler = () => {
476
+ setOpenPersisted((prev) => !prev);
477
+ };
478
+ const openHandler = () => {
479
+ setOpenPersisted(true);
480
+ };
481
+ window.addEventListener("agent-panel:toggle", toggleHandler);
482
+ window.addEventListener("agent-panel:open", openHandler);
483
+ return () => {
484
+ window.removeEventListener("agent-panel:toggle", toggleHandler);
485
+ window.removeEventListener("agent-panel:open", openHandler);
486
+ };
487
+ }, [setOpenPersisted]);
488
+ // Cmd+I / Ctrl+I to focus the agent chat
489
+ useEffect(() => {
490
+ const handleKeyDown = (e) => {
491
+ if ((e.metaKey || e.ctrlKey) && e.key === "i") {
492
+ e.preventDefault();
493
+ focusAgentChat();
494
+ }
88
495
  };
89
- window.addEventListener("agent-panel:toggle", handler);
90
- return () => window.removeEventListener("agent-panel:toggle", handler);
496
+ document.addEventListener("keydown", handleKeyDown);
497
+ return () => document.removeEventListener("keydown", handleKeyDown);
498
+ }, []);
499
+ const handleDrag = useCallback((delta) => {
500
+ setWidth((prev) => {
501
+ const next = Math.min(SIDEBAR_MAX, Math.max(SIDEBAR_MIN, prev + delta));
502
+ try {
503
+ localStorage.setItem(SIDEBAR_STORAGE_KEY, String(next));
504
+ }
505
+ catch { }
506
+ return next;
507
+ });
91
508
  }, []);
92
509
  const isLeft = position === "left";
93
- const borderClass = isLeft ? "border-r" : "border-l";
94
- const sidebar = open ? (_jsx("div", { className: `flex flex-col ${borderClass} border-border shrink-0 overflow-hidden agent-sidebar-panel`, style: { width: sidebarWidth }, children: _jsx(AgentPanel, { emptyStateText: emptyStateText, suggestions: suggestions }) })) : null;
95
- return (_jsxs("div", { className: "flex flex-1 overflow-hidden", children: [isLeft && sidebar, _jsx("div", { className: "flex flex-1 flex-col overflow-hidden min-w-0", children: children }), !isLeft && sidebar] }));
510
+ const sidebar = (_jsxs(_Fragment, { children: [isLeft ? null : _jsx(ResizeHandle, { position: position, onDrag: handleDrag }), _jsx("div", { className: "agent-sidebar-panel flex shrink-0 flex-col overflow-hidden text-[13px] leading-[1.2] antialiased", style: { ...AGENT_PANEL_ROOT_STYLE, width, maxHeight: "100vh" }, children: _jsx(AgentPanel, { emptyStateText: emptyStateText, suggestions: suggestions, onCollapse: () => setOpenPersisted(false) }) }), isLeft ? _jsx(ResizeHandle, { position: position, onDrag: handleDrag }) : null] }));
511
+ return (_jsxs("div", { className: "flex min-w-0 flex-1 overflow-hidden", children: [isLeft && open ? sidebar : null, _jsx("div", { className: "flex flex-1 flex-col overflow-hidden min-w-0", children: children }), !isLeft && open ? sidebar : null] }));
512
+ }
513
+ /**
514
+ * Focus the agent chat composer input.
515
+ * Opens the sidebar if closed, then focuses the text input.
516
+ */
517
+ export function focusAgentChat() {
518
+ window.dispatchEvent(new Event("agent-panel:open"));
519
+ // Wait for sidebar to render, then focus the composer
520
+ requestAnimationFrame(() => {
521
+ const panel = document.querySelector(".agent-sidebar-panel");
522
+ if (!panel)
523
+ return;
524
+ const prosemirror = panel.querySelector(".ProseMirror");
525
+ if (prosemirror) {
526
+ prosemirror.focus();
527
+ return;
528
+ }
529
+ const textarea = panel.querySelector("textarea");
530
+ if (textarea)
531
+ textarea.focus();
532
+ });
96
533
  }
97
534
  /**
98
535
  * Button to toggle the agent sidebar. Place this in your app's header/toolbar.
99
536
  * Dispatches a custom event that AgentSidebar listens for.
100
537
  */
101
538
  export function AgentToggleButton({ className }) {
102
- return (_jsx("button", { onClick: () => window.dispatchEvent(new Event("agent-panel:toggle")), className: cn("flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50", className), title: "Toggle agent", children: _jsx(ChatBubbleIcon, { className: "h-4 w-4" }) }));
539
+ return (_jsx("button", { onClick: () => window.dispatchEvent(new Event("agent-panel:toggle")), className: cn("flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50", className), title: "Toggle agent", children: _jsx(IconMessage, { size: 16 }) }));
103
540
  }
104
541
  //# sourceMappingURL=AgentPanel.js.map