@agent-native/core 0.4.4 → 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 (509) 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 +326 -107
  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 -38
  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 +42 -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 +14 -3
  82. package/dist/client/AgentPanel.d.ts.map +1 -1
  83. package/dist/client/AgentPanel.js +492 -21
  84. package/dist/client/AgentPanel.js.map +1 -1
  85. package/dist/client/AssistantChat.d.ts +27 -3
  86. package/dist/client/AssistantChat.d.ts.map +1 -1
  87. package/dist/client/AssistantChat.js +639 -57
  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 -67
  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.d.ts +2 -0
  117. package/dist/client/agent-chat.d.ts.map +1 -1
  118. package/dist/client/agent-chat.js +2 -2
  119. package/dist/client/agent-chat.js.map +1 -1
  120. package/dist/client/analytics.d.ts +16 -0
  121. package/dist/client/analytics.d.ts.map +1 -0
  122. package/dist/client/analytics.js +17 -0
  123. package/dist/client/analytics.js.map +1 -0
  124. package/dist/client/components/ApiKeySettings.d.ts +2 -2
  125. package/dist/client/components/ApiKeySettings.js +4 -4
  126. package/dist/client/components/ApiKeySettings.js.map +1 -1
  127. package/dist/client/components/CodeRequiredDialog.d.ts +13 -0
  128. package/dist/client/components/CodeRequiredDialog.d.ts.map +1 -0
  129. package/dist/client/components/CodeRequiredDialog.js +160 -0
  130. package/dist/client/components/CodeRequiredDialog.js.map +1 -0
  131. package/dist/client/composer/MentionPopover.d.ts +26 -0
  132. package/dist/client/composer/MentionPopover.d.ts.map +1 -0
  133. package/dist/client/composer/MentionPopover.js +130 -0
  134. package/dist/client/composer/MentionPopover.js.map +1 -0
  135. package/dist/client/composer/TiptapComposer.d.ts +19 -0
  136. package/dist/client/composer/TiptapComposer.d.ts.map +1 -0
  137. package/dist/client/composer/TiptapComposer.js +415 -0
  138. package/dist/client/composer/TiptapComposer.js.map +1 -0
  139. package/dist/client/composer/extensions/FileReference.d.ts +3 -0
  140. package/dist/client/composer/extensions/FileReference.d.ts.map +1 -0
  141. package/dist/client/composer/extensions/FileReference.js +36 -0
  142. package/dist/client/composer/extensions/FileReference.js.map +1 -0
  143. package/dist/client/composer/extensions/MentionReference.d.ts +3 -0
  144. package/dist/client/composer/extensions/MentionReference.d.ts.map +1 -0
  145. package/dist/client/composer/extensions/MentionReference.js +63 -0
  146. package/dist/client/composer/extensions/MentionReference.js.map +1 -0
  147. package/dist/client/composer/extensions/SkillReference.d.ts +3 -0
  148. package/dist/client/composer/extensions/SkillReference.d.ts.map +1 -0
  149. package/dist/client/composer/extensions/SkillReference.js +40 -0
  150. package/dist/client/composer/extensions/SkillReference.js.map +1 -0
  151. package/dist/client/composer/index.d.ts +8 -0
  152. package/dist/client/composer/index.d.ts.map +1 -0
  153. package/dist/client/composer/index.js +7 -0
  154. package/dist/client/composer/index.js.map +1 -0
  155. package/dist/client/composer/types.d.ts +32 -0
  156. package/dist/client/composer/types.d.ts.map +1 -0
  157. package/dist/client/composer/types.js +2 -0
  158. package/dist/client/composer/types.js.map +1 -0
  159. package/dist/client/composer/use-file-search.d.ts +6 -0
  160. package/dist/client/composer/use-file-search.d.ts.map +1 -0
  161. package/dist/client/composer/use-file-search.js +40 -0
  162. package/dist/client/composer/use-file-search.js.map +1 -0
  163. package/dist/client/composer/use-mention-search.d.ts +6 -0
  164. package/dist/client/composer/use-mention-search.d.ts.map +1 -0
  165. package/dist/client/composer/use-mention-search.js +39 -0
  166. package/dist/client/composer/use-mention-search.js.map +1 -0
  167. package/dist/client/composer/use-skills.d.ts +7 -0
  168. package/dist/client/composer/use-skills.d.ts.map +1 -0
  169. package/dist/client/composer/use-skills.js +38 -0
  170. package/dist/client/composer/use-skills.js.map +1 -0
  171. package/dist/client/index.d.ts +13 -4
  172. package/dist/client/index.d.ts.map +1 -1
  173. package/dist/client/index.js +12 -3
  174. package/dist/client/index.js.map +1 -1
  175. package/dist/client/resources/ResourceEditor.d.ts +7 -0
  176. package/dist/client/resources/ResourceEditor.d.ts.map +1 -0
  177. package/dist/client/resources/ResourceEditor.js +851 -0
  178. package/dist/client/resources/ResourceEditor.js.map +1 -0
  179. package/dist/client/resources/ResourceTree.d.ts +13 -0
  180. package/dist/client/resources/ResourceTree.d.ts.map +1 -0
  181. package/dist/client/resources/ResourceTree.js +122 -0
  182. package/dist/client/resources/ResourceTree.js.map +1 -0
  183. package/dist/client/resources/ResourcesPanel.d.ts +2 -0
  184. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -0
  185. package/dist/client/resources/ResourcesPanel.js +341 -0
  186. package/dist/client/resources/ResourcesPanel.js.map +1 -0
  187. package/dist/client/resources/index.d.ts +5 -0
  188. package/dist/client/resources/index.d.ts.map +1 -0
  189. package/dist/client/resources/index.js +5 -0
  190. package/dist/client/resources/index.js.map +1 -0
  191. package/dist/client/resources/use-resources.d.ts +45 -0
  192. package/dist/client/resources/use-resources.d.ts.map +1 -0
  193. package/dist/client/resources/use-resources.js +102 -0
  194. package/dist/client/resources/use-resources.js.map +1 -0
  195. package/dist/client/sse-event-processor.d.ts +50 -0
  196. package/dist/client/sse-event-processor.d.ts.map +1 -0
  197. package/dist/client/sse-event-processor.js +267 -0
  198. package/dist/client/sse-event-processor.js.map +1 -0
  199. package/dist/client/terminal/AgentTerminal.d.ts +1 -1
  200. package/dist/client/terminal/AgentTerminal.d.ts.map +1 -1
  201. package/dist/client/terminal/AgentTerminal.js +12 -7
  202. package/dist/client/terminal/AgentTerminal.js.map +1 -1
  203. package/dist/client/use-agent-chat.d.ts +1 -1
  204. package/dist/client/use-agent-chat.d.ts.map +1 -1
  205. package/dist/client/use-agent-chat.js +3 -3
  206. package/dist/client/use-agent-chat.js.map +1 -1
  207. package/dist/client/use-chat-threads.d.ts +36 -0
  208. package/dist/client/use-chat-threads.d.ts.map +1 -0
  209. package/dist/client/use-chat-threads.js +175 -0
  210. package/dist/client/use-chat-threads.js.map +1 -0
  211. package/dist/client/use-db-sync.d.ts +35 -0
  212. package/dist/client/use-db-sync.d.ts.map +1 -0
  213. package/dist/client/use-db-sync.js +74 -0
  214. package/dist/client/use-db-sync.js.map +1 -0
  215. package/dist/client/use-dev-mode.d.ts +11 -0
  216. package/dist/client/use-dev-mode.d.ts.map +1 -0
  217. package/dist/client/use-dev-mode.js +71 -0
  218. package/dist/client/use-dev-mode.js.map +1 -0
  219. package/dist/client/use-file-sync-status.d.ts +1 -1
  220. package/dist/client/use-file-sync-status.js +3 -3
  221. package/dist/client/use-file-sync-status.js.map +1 -1
  222. package/dist/client/use-send-to-agent-chat.d.ts +17 -0
  223. package/dist/client/use-send-to-agent-chat.d.ts.map +1 -0
  224. package/dist/client/use-send-to-agent-chat.js +40 -0
  225. package/dist/client/use-send-to-agent-chat.js.map +1 -0
  226. package/dist/client/use-session.d.ts +1 -1
  227. package/dist/client/use-session.d.ts.map +1 -1
  228. package/dist/client/use-session.js +13 -4
  229. package/dist/client/use-session.js.map +1 -1
  230. package/dist/client/useProductionAgent.d.ts +1 -1
  231. package/dist/client/useProductionAgent.d.ts.map +1 -1
  232. package/dist/client/useProductionAgent.js +38 -3
  233. package/dist/client/useProductionAgent.js.map +1 -1
  234. package/dist/credentials/index.d.ts +18 -0
  235. package/dist/credentials/index.d.ts.map +1 -0
  236. package/dist/credentials/index.js +32 -0
  237. package/dist/credentials/index.js.map +1 -0
  238. package/dist/db/client.d.ts +35 -0
  239. package/dist/db/client.d.ts.map +1 -0
  240. package/dist/db/client.js +248 -0
  241. package/dist/db/client.js.map +1 -0
  242. package/dist/db/create-get-db.d.ts.map +1 -1
  243. package/dist/db/create-get-db.js +108 -12
  244. package/dist/db/create-get-db.js.map +1 -1
  245. package/dist/db/index.d.ts +10 -6
  246. package/dist/db/index.d.ts.map +1 -1
  247. package/dist/db/index.js +10 -4
  248. package/dist/db/index.js.map +1 -1
  249. package/dist/db/migrations.d.ts.map +1 -1
  250. package/dist/db/migrations.js +52 -21
  251. package/dist/db/migrations.js.map +1 -1
  252. package/dist/db/schema.d.ts +45 -0
  253. package/dist/db/schema.d.ts.map +1 -0
  254. package/dist/db/schema.js +61 -0
  255. package/dist/db/schema.js.map +1 -0
  256. package/dist/deploy/build.d.ts +16 -0
  257. package/dist/deploy/build.d.ts.map +1 -0
  258. package/dist/deploy/build.js +453 -0
  259. package/dist/deploy/build.js.map +1 -0
  260. package/dist/deploy/route-discovery.d.ts +43 -0
  261. package/dist/deploy/route-discovery.d.ts.map +1 -0
  262. package/dist/deploy/route-discovery.js +115 -0
  263. package/dist/deploy/route-discovery.js.map +1 -0
  264. package/dist/index.browser.d.ts +1 -1
  265. package/dist/index.browser.d.ts.map +1 -1
  266. package/dist/index.browser.js +1 -1
  267. package/dist/index.browser.js.map +1 -1
  268. package/dist/index.d.ts +3 -2
  269. package/dist/index.d.ts.map +1 -1
  270. package/dist/index.js +2 -1
  271. package/dist/index.js.map +1 -1
  272. package/dist/oauth-tokens/index.d.ts +1 -1
  273. package/dist/oauth-tokens/index.d.ts.map +1 -1
  274. package/dist/oauth-tokens/index.js +1 -1
  275. package/dist/oauth-tokens/index.js.map +1 -1
  276. package/dist/oauth-tokens/store.d.ts +18 -1
  277. package/dist/oauth-tokens/store.d.ts.map +1 -1
  278. package/dist/oauth-tokens/store.js +81 -40
  279. package/dist/oauth-tokens/store.js.map +1 -1
  280. package/dist/resources/emitter.d.ts +13 -0
  281. package/dist/resources/emitter.d.ts.map +1 -0
  282. package/dist/resources/emitter.js +32 -0
  283. package/dist/resources/emitter.js.map +1 -0
  284. package/dist/resources/handlers.d.ts +45 -0
  285. package/dist/resources/handlers.d.ts.map +1 -0
  286. package/dist/resources/handlers.js +219 -0
  287. package/dist/resources/handlers.js.map +1 -0
  288. package/dist/resources/index.d.ts +5 -0
  289. package/dist/resources/index.d.ts.map +1 -0
  290. package/dist/resources/index.js +5 -0
  291. package/dist/resources/index.js.map +1 -0
  292. package/dist/resources/script-helpers.d.ts +24 -0
  293. package/dist/resources/script-helpers.d.ts.map +1 -0
  294. package/dist/resources/script-helpers.js +36 -0
  295. package/dist/resources/script-helpers.js.map +1 -0
  296. package/dist/resources/store.d.ts +35 -0
  297. package/dist/resources/store.d.ts.map +1 -0
  298. package/dist/resources/store.js +453 -0
  299. package/dist/resources/store.js.map +1 -0
  300. package/dist/scripts/call-agent.d.ts +5 -0
  301. package/dist/scripts/call-agent.d.ts.map +1 -0
  302. package/dist/scripts/call-agent.js +107 -0
  303. package/dist/scripts/call-agent.js.map +1 -0
  304. package/dist/scripts/core-scripts.d.ts.map +1 -1
  305. package/dist/scripts/core-scripts.js +2 -0
  306. package/dist/scripts/core-scripts.js.map +1 -1
  307. package/dist/scripts/db/exec.d.ts +6 -2
  308. package/dist/scripts/db/exec.d.ts.map +1 -1
  309. package/dist/scripts/db/exec.js +127 -36
  310. package/dist/scripts/db/exec.js.map +1 -1
  311. package/dist/scripts/db/query.d.ts +7 -2
  312. package/dist/scripts/db/query.d.ts.map +1 -1
  313. package/dist/scripts/db/query.js +89 -45
  314. package/dist/scripts/db/query.js.map +1 -1
  315. package/dist/scripts/db/schema.d.ts +2 -2
  316. package/dist/scripts/db/schema.d.ts.map +1 -1
  317. package/dist/scripts/db/schema.js +145 -6
  318. package/dist/scripts/db/schema.js.map +1 -1
  319. package/dist/scripts/db/scoping.d.ts +36 -0
  320. package/dist/scripts/db/scoping.d.ts.map +1 -0
  321. package/dist/scripts/db/scoping.js +198 -0
  322. package/dist/scripts/db/scoping.js.map +1 -0
  323. package/dist/scripts/dev/index.d.ts +2 -2
  324. package/dist/scripts/dev/index.js +1 -1
  325. package/dist/scripts/dev/list-files.d.ts +2 -2
  326. package/dist/scripts/dev/read-file.d.ts +2 -2
  327. package/dist/scripts/dev/read-file.js +1 -1
  328. package/dist/scripts/dev/read-file.js.map +1 -1
  329. package/dist/scripts/dev/search-files.d.ts +2 -2
  330. package/dist/scripts/dev/search-files.js +1 -1
  331. package/dist/scripts/dev/search-files.js.map +1 -1
  332. package/dist/scripts/dev/shell.d.ts +2 -2
  333. package/dist/scripts/dev/shell.js +1 -1
  334. package/dist/scripts/dev/shell.js.map +1 -1
  335. package/dist/scripts/dev/write-file.d.ts +2 -2
  336. package/dist/scripts/dev/write-file.js +1 -1
  337. package/dist/scripts/dev/write-file.js.map +1 -1
  338. package/dist/scripts/resources/delete.d.ts +10 -0
  339. package/dist/scripts/resources/delete.d.ts.map +1 -0
  340. package/dist/scripts/resources/delete.js +38 -0
  341. package/dist/scripts/resources/delete.js.map +1 -0
  342. package/dist/scripts/resources/index.d.ts +2 -0
  343. package/dist/scripts/resources/index.d.ts.map +1 -0
  344. package/dist/scripts/resources/index.js +8 -0
  345. package/dist/scripts/resources/index.js.map +1 -0
  346. package/dist/scripts/resources/list.d.ts +10 -0
  347. package/dist/scripts/resources/list.d.ts.map +1 -0
  348. package/dist/scripts/resources/list.js +57 -0
  349. package/dist/scripts/resources/list.js.map +1 -0
  350. package/dist/scripts/resources/migrate-learnings.d.ts +10 -0
  351. package/dist/scripts/resources/migrate-learnings.d.ts.map +1 -0
  352. package/dist/scripts/resources/migrate-learnings.js +23 -0
  353. package/dist/scripts/resources/migrate-learnings.js.map +1 -0
  354. package/dist/scripts/resources/read.d.ts +10 -0
  355. package/dist/scripts/resources/read.d.ts.map +1 -0
  356. package/dist/scripts/resources/read.js +59 -0
  357. package/dist/scripts/resources/read.js.map +1 -0
  358. package/dist/scripts/resources/write.d.ts +10 -0
  359. package/dist/scripts/resources/write.d.ts.map +1 -0
  360. package/dist/scripts/resources/write.js +67 -0
  361. package/dist/scripts/resources/write.js.map +1 -0
  362. package/dist/scripts/runner.d.ts +7 -7
  363. package/dist/scripts/runner.d.ts.map +1 -1
  364. package/dist/scripts/runner.js +68 -27
  365. package/dist/scripts/runner.js.map +1 -1
  366. package/dist/scripts/utils.d.ts +4 -1
  367. package/dist/scripts/utils.d.ts.map +1 -1
  368. package/dist/scripts/utils.js +5 -3
  369. package/dist/scripts/utils.js.map +1 -1
  370. package/dist/server/action-discovery.d.ts +40 -0
  371. package/dist/server/action-discovery.d.ts.map +1 -0
  372. package/dist/server/action-discovery.js +189 -0
  373. package/dist/server/action-discovery.js.map +1 -0
  374. package/dist/server/agent-chat-plugin.d.ts +12 -23
  375. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  376. package/dist/server/agent-chat-plugin.js +1102 -39
  377. package/dist/server/agent-chat-plugin.js.map +1 -1
  378. package/dist/server/agent-discovery.d.ts +16 -0
  379. package/dist/server/agent-discovery.d.ts.map +1 -0
  380. package/dist/server/agent-discovery.js +136 -0
  381. package/dist/server/agent-discovery.js.map +1 -0
  382. package/dist/server/analytics.d.ts +19 -0
  383. package/dist/server/analytics.d.ts.map +1 -0
  384. package/dist/server/analytics.js +61 -0
  385. package/dist/server/analytics.js.map +1 -0
  386. package/dist/server/auth-plugin.d.ts +5 -0
  387. package/dist/server/auth-plugin.d.ts.map +1 -1
  388. package/dist/server/auth-plugin.js +12 -1
  389. package/dist/server/auth-plugin.js.map +1 -1
  390. package/dist/server/auth.d.ts +3 -1
  391. package/dist/server/auth.d.ts.map +1 -1
  392. package/dist/server/auth.js +598 -104
  393. package/dist/server/auth.js.map +1 -1
  394. package/dist/server/core-routes-plugin.d.ts +57 -0
  395. package/dist/server/core-routes-plugin.d.ts.map +1 -0
  396. package/dist/server/core-routes-plugin.js +125 -0
  397. package/dist/server/core-routes-plugin.js.map +1 -0
  398. package/dist/server/create-server.d.ts +4 -4
  399. package/dist/server/create-server.d.ts.map +1 -1
  400. package/dist/server/create-server.js +5 -5
  401. package/dist/server/create-server.js.map +1 -1
  402. package/dist/server/default-watcher.d.ts +9 -3
  403. package/dist/server/default-watcher.d.ts.map +1 -1
  404. package/dist/server/default-watcher.js +26 -6
  405. package/dist/server/default-watcher.js.map +1 -1
  406. package/dist/server/google-auth-plugin.d.ts.map +1 -1
  407. package/dist/server/google-auth-plugin.js +4 -3
  408. package/dist/server/google-auth-plugin.js.map +1 -1
  409. package/dist/server/google-oauth.d.ts +72 -0
  410. package/dist/server/google-oauth.d.ts.map +1 -0
  411. package/dist/server/google-oauth.js +187 -0
  412. package/dist/server/google-oauth.js.map +1 -0
  413. package/dist/server/index.d.ts +10 -2
  414. package/dist/server/index.d.ts.map +1 -1
  415. package/dist/server/index.js +9 -1
  416. package/dist/server/index.js.map +1 -1
  417. package/dist/server/oauth-helpers.d.ts +16 -0
  418. package/dist/server/oauth-helpers.d.ts.map +1 -0
  419. package/dist/server/oauth-helpers.js +25 -0
  420. package/dist/server/oauth-helpers.js.map +1 -0
  421. package/dist/server/poll.d.ts +40 -0
  422. package/dist/server/poll.d.ts.map +1 -0
  423. package/dist/server/poll.js +49 -0
  424. package/dist/server/poll.js.map +1 -0
  425. package/dist/server/resources-plugin.d.ts +27 -0
  426. package/dist/server/resources-plugin.d.ts.map +1 -0
  427. package/dist/server/resources-plugin.js +74 -0
  428. package/dist/server/resources-plugin.js.map +1 -0
  429. package/dist/server/script-discovery.d.ts +6 -0
  430. package/dist/server/script-discovery.d.ts.map +1 -0
  431. package/dist/server/script-discovery.js +6 -0
  432. package/dist/server/script-discovery.js.map +1 -0
  433. package/dist/server/sse.d.ts +1 -1
  434. package/dist/server/sse.js +1 -1
  435. package/dist/settings/handlers.d.ts +3 -3
  436. package/dist/settings/handlers.d.ts.map +1 -1
  437. package/dist/settings/handlers.js +8 -6
  438. package/dist/settings/handlers.js.map +1 -1
  439. package/dist/settings/index.d.ts +1 -1
  440. package/dist/settings/index.d.ts.map +1 -1
  441. package/dist/settings/index.js.map +1 -1
  442. package/dist/settings/store.d.ts +6 -2
  443. package/dist/settings/store.d.ts.map +1 -1
  444. package/dist/settings/store.js +26 -36
  445. package/dist/settings/store.js.map +1 -1
  446. package/dist/settings/user-settings.d.ts +6 -10
  447. package/dist/settings/user-settings.d.ts.map +1 -1
  448. package/dist/settings/user-settings.js +9 -18
  449. package/dist/settings/user-settings.js.map +1 -1
  450. package/dist/tailwind.preset.d.ts +7 -6
  451. package/dist/tailwind.preset.d.ts.map +1 -1
  452. package/dist/tailwind.preset.js +18 -1
  453. package/dist/tailwind.preset.js.map +1 -1
  454. package/dist/terminal/cli-registry.d.ts +3 -1
  455. package/dist/terminal/cli-registry.d.ts.map +1 -1
  456. package/dist/terminal/cli-registry.js +10 -5
  457. package/dist/terminal/cli-registry.js.map +1 -1
  458. package/dist/terminal/pty-server.d.ts.map +1 -1
  459. package/dist/terminal/pty-server.js +65 -11
  460. package/dist/terminal/pty-server.js.map +1 -1
  461. package/dist/terminal/terminal-plugin.d.ts +2 -2
  462. package/dist/terminal/terminal-plugin.d.ts.map +1 -1
  463. package/dist/terminal/terminal-plugin.js +27 -8
  464. package/dist/terminal/terminal-plugin.js.map +1 -1
  465. package/dist/vite/client.d.ts.map +1 -1
  466. package/dist/vite/client.js +114 -8
  467. package/dist/vite/client.js.map +1 -1
  468. package/dist/vite/dev-api-server.d.ts +1 -1
  469. package/dist/vite/dev-api-server.d.ts.map +1 -1
  470. package/dist/vite/dev-api-server.js +105 -22
  471. package/dist/vite/dev-api-server.js.map +1 -1
  472. package/package.json +23 -7
  473. package/src/templates/default/.agents/skills/actions/SKILL.md +136 -0
  474. package/src/templates/default/.agents/skills/create-skill/SKILL.md +1 -1
  475. package/src/templates/default/.agents/skills/delegate-to-agent/SKILL.md +1 -1
  476. package/src/templates/default/.agents/skills/files-as-database/SKILL.md +2 -2
  477. package/src/templates/default/.agents/skills/real-time-sync/SKILL.md +112 -0
  478. package/src/templates/default/AGENTS.md +56 -164
  479. package/src/templates/default/DEVELOPING.md +117 -0
  480. package/src/templates/default/{scripts → actions}/hello.ts +1 -1
  481. package/src/templates/default/actions/navigate.ts +53 -0
  482. package/src/templates/default/actions/view-screen.ts +39 -0
  483. package/src/templates/default/app/entry.server.tsx +2 -1
  484. package/src/templates/default/app/global.css +2 -2
  485. package/src/templates/default/app/root.tsx +27 -15
  486. package/src/templates/default/app/routes/_index.tsx +1 -1
  487. package/src/templates/default/package.json +4 -0
  488. package/src/templates/default/public/icon-180.svg +4 -0
  489. package/src/templates/default/public/icon-192.svg +4 -0
  490. package/src/templates/default/public/icon-512.svg +4 -0
  491. package/src/templates/default/public/manifest.json +13 -0
  492. package/src/templates/default/server/plugins/.gitkeep +0 -0
  493. package/dist/a2a/middleware.d.ts +0 -3
  494. package/dist/a2a/middleware.d.ts.map +0 -1
  495. package/dist/a2a/middleware.js +0 -36
  496. package/dist/a2a/middleware.js.map +0 -1
  497. package/dist/client/use-file-watcher.d.ts +0 -23
  498. package/dist/client/use-file-watcher.d.ts.map +0 -1
  499. package/dist/client/use-file-watcher.js +0 -50
  500. package/dist/client/use-file-watcher.js.map +0 -1
  501. package/src/templates/default/.agents/skills/scripts/SKILL.md +0 -121
  502. package/src/templates/default/.agents/skills/sse-file-watcher/SKILL.md +0 -80
  503. package/src/templates/default/server/plugins/agent-chat.ts +0 -1
  504. package/src/templates/default/server/plugins/auth.ts +0 -1
  505. package/src/templates/default/server/plugins/file-sync.ts +0 -1
  506. package/src/templates/default/server/plugins/terminal.ts +0 -1
  507. package/src/templates/default/server/routes/api/events.get.ts +0 -3
  508. package/src/templates/default/server/routes/api/file-sync/status.get.ts +0 -4
  509. /package/src/templates/default/{scripts → actions}/run.ts +0 -0
@@ -0,0 +1,851 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useRef, useEffect, useCallback, useMemo, } from "react";
3
+ import { useEditor, EditorContent } from "@tiptap/react";
4
+ import StarterKit from "@tiptap/starter-kit";
5
+ import Placeholder from "@tiptap/extension-placeholder";
6
+ import Link from "@tiptap/extension-link";
7
+ import { Markdown } from "tiptap-markdown";
8
+ import { cn } from "../utils.js";
9
+ const CONTROL_STYLE = { fontSize: 12, lineHeight: 1 };
10
+ const VIEW_PREF_KEY = "resource-editor-view";
11
+ function getViewPref() {
12
+ try {
13
+ const v = localStorage.getItem(VIEW_PREF_KEY);
14
+ if (v === "code")
15
+ return "code";
16
+ }
17
+ catch { }
18
+ return "visual";
19
+ }
20
+ function setViewPref(v) {
21
+ try {
22
+ localStorage.setItem(VIEW_PREF_KEY, v);
23
+ }
24
+ catch { }
25
+ }
26
+ function parseFrontmatter(content) {
27
+ const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/);
28
+ if (!match)
29
+ return { frontmatter: null, body: content };
30
+ const raw = match[0];
31
+ const yamlBlock = match[1];
32
+ const body = content.slice(raw.length);
33
+ // Parse simple key: value pairs (handles multiline >- syntax)
34
+ const fields = [];
35
+ const lines = yamlBlock.split("\n");
36
+ let i = 0;
37
+ while (i < lines.length) {
38
+ const line = lines[i];
39
+ const kvMatch = line.match(/^(\w[\w-]*):\s*(.*)/);
40
+ if (kvMatch) {
41
+ let value = kvMatch[2].trim();
42
+ // Handle YAML multiline indicators (>- or |)
43
+ if (value === ">-" || value === ">" || value === "|" || value === "|-") {
44
+ const multiLines = [];
45
+ i++;
46
+ while (i < lines.length && /^\s+/.test(lines[i])) {
47
+ multiLines.push(lines[i].trim());
48
+ i++;
49
+ }
50
+ value = multiLines.join(" ");
51
+ }
52
+ else {
53
+ i++;
54
+ }
55
+ fields.push({ key: kvMatch[1], value });
56
+ }
57
+ else {
58
+ i++;
59
+ }
60
+ }
61
+ return { frontmatter: { raw, fields }, body };
62
+ }
63
+ function serializeFrontmatter(fields) {
64
+ const lines = fields.map(({ key, value }) => {
65
+ // Use multiline >- for long descriptions
66
+ if (key === "description" && value.length > 60) {
67
+ const words = value.split(" ");
68
+ const wrapped = [];
69
+ let line = "";
70
+ for (const w of words) {
71
+ if (line && line.length + w.length + 1 > 72) {
72
+ wrapped.push(" " + line);
73
+ line = w;
74
+ }
75
+ else {
76
+ line = line ? line + " " + w : w;
77
+ }
78
+ }
79
+ if (line)
80
+ wrapped.push(" " + line);
81
+ return `${key}: >-\n${wrapped.join("\n")}`;
82
+ }
83
+ return `${key}: ${value}`;
84
+ });
85
+ return "---\n" + lines.join("\n") + "\n---\n";
86
+ }
87
+ const FM_INPUT_STYLE = {
88
+ background: "transparent",
89
+ border: "none",
90
+ outline: "none",
91
+ color: "inherit",
92
+ fontSize: "inherit",
93
+ fontFamily: "inherit",
94
+ width: "100%",
95
+ padding: 0,
96
+ };
97
+ function FrontmatterBar({ frontmatter, onChange, }) {
98
+ const getField = (key) => frontmatter.fields.find((f) => f.key === key)?.value ?? "";
99
+ const updateField = (key, value) => {
100
+ const exists = frontmatter.fields.some((f) => f.key === key);
101
+ const newFields = exists
102
+ ? frontmatter.fields.map((f) => (f.key === key ? { ...f, value } : f))
103
+ : [...frontmatter.fields, { key, value }];
104
+ const updated = {
105
+ ...frontmatter,
106
+ raw: serializeFrontmatter(newFields),
107
+ fields: newFields,
108
+ };
109
+ onChange(updated);
110
+ };
111
+ const name = getField("name");
112
+ const description = getField("description");
113
+ const isUserInvocable = getField("user-invocable") === "true";
114
+ return (_jsxs("div", { style: {
115
+ padding: "8px 12px",
116
+ marginBottom: 8,
117
+ borderRadius: 6,
118
+ background: "hsl(var(--muted) / 0.5)",
119
+ border: "1px solid hsl(var(--border) / 0.5)",
120
+ fontSize: 12,
121
+ lineHeight: 1.5,
122
+ color: "hsl(var(--muted-foreground))",
123
+ }, children: [_jsxs("div", { style: { display: "flex", alignItems: "center", gap: 6 }, children: [_jsx("input", { value: name, onChange: (e) => updateField("name", e.target.value), placeholder: "Skill name", style: {
124
+ ...FM_INPUT_STYLE,
125
+ fontWeight: 600,
126
+ color: "hsl(var(--foreground))",
127
+ fontSize: 13,
128
+ flex: 1,
129
+ } }), _jsxs("label", { style: {
130
+ display: "flex",
131
+ alignItems: "center",
132
+ gap: 4,
133
+ fontSize: 10,
134
+ cursor: "pointer",
135
+ whiteSpace: "nowrap",
136
+ userSelect: "none",
137
+ padding: "1px 5px",
138
+ borderRadius: 3,
139
+ background: isUserInvocable
140
+ ? "hsl(var(--primary) / 0.15)"
141
+ : "transparent",
142
+ color: isUserInvocable
143
+ ? "hsl(var(--primary))"
144
+ : "hsl(var(--muted-foreground))",
145
+ border: isUserInvocable ? "none" : "1px dashed hsl(var(--border))",
146
+ fontWeight: 500,
147
+ }, children: [_jsx("input", { type: "checkbox", checked: isUserInvocable, onChange: (e) => updateField("user-invocable", e.target.checked ? "true" : "false"), style: { display: "none" } }), "/", name || "command"] })] }), _jsx("input", { value: description, onChange: (e) => updateField("description", e.target.value), placeholder: "Description \u2014 what this skill does", style: {
148
+ ...FM_INPUT_STYLE,
149
+ marginTop: 2,
150
+ opacity: 0.8,
151
+ color: "hsl(var(--muted-foreground))",
152
+ } })] }));
153
+ }
154
+ const slashCommands = [
155
+ {
156
+ title: "Text",
157
+ description: "Plain text",
158
+ icon: "T",
159
+ action: (editor) => editor.chain().focus().setParagraph().run(),
160
+ },
161
+ {
162
+ title: "Heading 1",
163
+ description: "Large heading",
164
+ icon: "H1",
165
+ action: (editor) => editor.chain().focus().toggleHeading({ level: 1 }).run(),
166
+ },
167
+ {
168
+ title: "Heading 2",
169
+ description: "Medium heading",
170
+ icon: "H2",
171
+ action: (editor) => editor.chain().focus().toggleHeading({ level: 2 }).run(),
172
+ },
173
+ {
174
+ title: "Heading 3",
175
+ description: "Small heading",
176
+ icon: "H3",
177
+ action: (editor) => editor.chain().focus().toggleHeading({ level: 3 }).run(),
178
+ },
179
+ {
180
+ title: "Bullet List",
181
+ description: "Unordered list",
182
+ icon: "•",
183
+ action: (editor) => editor.chain().focus().toggleBulletList().run(),
184
+ },
185
+ {
186
+ title: "Numbered List",
187
+ description: "Ordered list",
188
+ icon: "1.",
189
+ action: (editor) => editor.chain().focus().toggleOrderedList().run(),
190
+ },
191
+ {
192
+ title: "Code Block",
193
+ description: "Code snippet",
194
+ icon: "<>",
195
+ action: (editor) => editor.chain().focus().toggleCodeBlock().run(),
196
+ },
197
+ {
198
+ title: "Quote",
199
+ description: "Block quote",
200
+ icon: '"',
201
+ action: (editor) => editor.chain().focus().toggleBlockquote().run(),
202
+ },
203
+ {
204
+ title: "Divider",
205
+ description: "Horizontal rule",
206
+ icon: "—",
207
+ action: (editor) => editor.chain().focus().setHorizontalRule().run(),
208
+ },
209
+ ];
210
+ function SlashMenu({ editor }) {
211
+ const [isOpen, setIsOpen] = useState(false);
212
+ const [query, setQuery] = useState("");
213
+ const [selectedIndex, setSelectedIndex] = useState(0);
214
+ const [position, setPosition] = useState(null);
215
+ const slashPosRef = useRef(null);
216
+ const menuRef = useRef(null);
217
+ const filteredCommands = useMemo(() => slashCommands.filter((cmd) => cmd.title.toLowerCase().includes(query.toLowerCase()) ||
218
+ cmd.description.toLowerCase().includes(query.toLowerCase())), [query]);
219
+ const executeCommand = useCallback((cmd) => {
220
+ if (slashPosRef.current !== null) {
221
+ const { from } = editor.state.selection;
222
+ editor
223
+ .chain()
224
+ .focus()
225
+ .deleteRange({ from: slashPosRef.current, to: from })
226
+ .run();
227
+ }
228
+ cmd.action(editor);
229
+ setIsOpen(false);
230
+ setQuery("");
231
+ slashPosRef.current = null;
232
+ }, [editor]);
233
+ useEffect(() => {
234
+ if (!editor)
235
+ return;
236
+ const handleKeyDown = (e) => {
237
+ if (!isOpen)
238
+ return;
239
+ if (e.key === "ArrowDown") {
240
+ e.preventDefault();
241
+ setSelectedIndex((i) => (i + 1) % filteredCommands.length);
242
+ }
243
+ else if (e.key === "ArrowUp") {
244
+ e.preventDefault();
245
+ setSelectedIndex((i) => (i - 1 + filteredCommands.length) % filteredCommands.length);
246
+ }
247
+ else if (e.key === "Enter") {
248
+ e.preventDefault();
249
+ if (filteredCommands[selectedIndex]) {
250
+ executeCommand(filteredCommands[selectedIndex]);
251
+ }
252
+ }
253
+ else if (e.key === "Escape") {
254
+ setIsOpen(false);
255
+ setQuery("");
256
+ slashPosRef.current = null;
257
+ }
258
+ };
259
+ document.addEventListener("keydown", handleKeyDown, true);
260
+ return () => document.removeEventListener("keydown", handleKeyDown, true);
261
+ }, [isOpen, selectedIndex, filteredCommands, executeCommand, editor]);
262
+ useEffect(() => {
263
+ if (!editor)
264
+ return;
265
+ const handleTransaction = () => {
266
+ const { state } = editor;
267
+ const { from } = state.selection;
268
+ const textBefore = state.doc.textBetween(Math.max(0, from - 20), from, "\n");
269
+ const slashMatch = textBefore.match(/\/([a-zA-Z0-9]*)$/);
270
+ if (slashMatch) {
271
+ const slashStart = from - slashMatch[0].length;
272
+ slashPosRef.current = slashStart;
273
+ setQuery(slashMatch[1]);
274
+ setSelectedIndex(0);
275
+ const coords = editor.view.coordsAtPos(from);
276
+ // Estimate menu height (~320px max) and check if it fits below
277
+ const menuHeight = 320;
278
+ const spaceBelow = window.innerHeight - coords.bottom;
279
+ const flipUp = spaceBelow < menuHeight && coords.top > menuHeight;
280
+ setPosition({
281
+ top: flipUp ? coords.top : coords.bottom + 4,
282
+ left: Math.min(coords.left, window.innerWidth - 240),
283
+ flipUp,
284
+ });
285
+ setIsOpen(true);
286
+ }
287
+ else {
288
+ if (isOpen) {
289
+ setIsOpen(false);
290
+ setQuery("");
291
+ slashPosRef.current = null;
292
+ }
293
+ }
294
+ };
295
+ editor.on("transaction", handleTransaction);
296
+ return () => {
297
+ editor.off("transaction", handleTransaction);
298
+ };
299
+ }, [editor, isOpen]);
300
+ if (!isOpen || !position || filteredCommands.length === 0)
301
+ return null;
302
+ return (_jsx("div", { ref: menuRef, style: {
303
+ position: "fixed",
304
+ ...(position.flipUp
305
+ ? { bottom: window.innerHeight - position.top + 4 }
306
+ : { top: position.top }),
307
+ left: position.left,
308
+ zIndex: 9999,
309
+ }, className: "re-slash-menu", children: _jsxs("div", { className: "py-1", children: [_jsx("div", { style: {
310
+ padding: "4px 10px",
311
+ fontSize: 10,
312
+ fontWeight: 600,
313
+ textTransform: "uppercase",
314
+ letterSpacing: "0.06em",
315
+ opacity: 0.5,
316
+ }, children: "Blocks" }), filteredCommands.map((cmd, i) => (_jsxs("button", { onClick: () => executeCommand(cmd), onMouseEnter: () => setSelectedIndex(i), className: cn("re-slash-item", i === selectedIndex && "re-slash-item--active"), children: [_jsx("span", { className: "re-slash-icon", children: cmd.icon }), _jsxs("span", { children: [_jsx("span", { className: "re-slash-title", children: cmd.title }), _jsx("span", { className: "re-slash-desc", children: cmd.description })] })] }, cmd.title)))] }) }));
317
+ }
318
+ // --- Inline Bubble Toolbar ---
319
+ function InlineBubbleToolbar({ editor }) {
320
+ const [visible, setVisible] = useState(false);
321
+ const [coords, setCoords] = useState({ top: 0, left: 0 });
322
+ const [showLinkInput, setShowLinkInput] = useState(false);
323
+ const [linkUrl, setLinkUrl] = useState("");
324
+ const toolbarRef = useRef(null);
325
+ useEffect(() => {
326
+ if (!editor)
327
+ return;
328
+ const update = () => {
329
+ const { from, to } = editor.state.selection;
330
+ if (from === to || !editor.isFocused) {
331
+ setVisible(false);
332
+ return;
333
+ }
334
+ const domSelection = window.getSelection();
335
+ if (!domSelection || domSelection.rangeCount === 0) {
336
+ setVisible(false);
337
+ return;
338
+ }
339
+ const range = domSelection.getRangeAt(0);
340
+ const rect = range.getBoundingClientRect();
341
+ if (rect.width === 0) {
342
+ setVisible(false);
343
+ return;
344
+ }
345
+ // Use fixed positioning with viewport coordinates
346
+ setCoords({
347
+ top: rect.top - 8,
348
+ left: rect.left + rect.width / 2,
349
+ });
350
+ setVisible(true);
351
+ };
352
+ editor.on("selectionUpdate", update);
353
+ const onBlur = () => {
354
+ // Delay so clicks on toolbar buttons register before hiding
355
+ setTimeout(() => {
356
+ if (!editor.isFocused)
357
+ setVisible(false);
358
+ }, 150);
359
+ };
360
+ editor.on("blur", onBlur);
361
+ return () => {
362
+ editor.off("selectionUpdate", update);
363
+ editor.off("blur", onBlur);
364
+ };
365
+ }, [editor]);
366
+ const handleSetLink = () => {
367
+ if (linkUrl.trim()) {
368
+ editor
369
+ .chain()
370
+ .focus()
371
+ .extendMarkRange("link")
372
+ .setLink({ href: linkUrl.trim() })
373
+ .run();
374
+ }
375
+ else {
376
+ editor.chain().focus().extendMarkRange("link").unsetLink().run();
377
+ }
378
+ setShowLinkInput(false);
379
+ setLinkUrl("");
380
+ };
381
+ const toggleLink = () => {
382
+ if (editor.isActive("link")) {
383
+ editor.chain().focus().unsetLink().run();
384
+ return;
385
+ }
386
+ const previousUrl = editor.getAttributes("link").href || "";
387
+ setLinkUrl(previousUrl);
388
+ setShowLinkInput(true);
389
+ };
390
+ const items = [
391
+ {
392
+ label: "B",
393
+ title: "Bold",
394
+ action: () => editor.chain().focus().toggleBold().run(),
395
+ isActive: () => editor.isActive("bold"),
396
+ style: { fontWeight: 700 },
397
+ },
398
+ {
399
+ label: "I",
400
+ title: "Italic",
401
+ action: () => editor.chain().focus().toggleItalic().run(),
402
+ isActive: () => editor.isActive("italic"),
403
+ style: { fontStyle: "italic" },
404
+ },
405
+ {
406
+ label: "S",
407
+ title: "Strikethrough",
408
+ action: () => editor.chain().focus().toggleStrike().run(),
409
+ isActive: () => editor.isActive("strike"),
410
+ style: { textDecoration: "line-through" },
411
+ },
412
+ {
413
+ label: "<>",
414
+ title: "Code",
415
+ action: () => editor.chain().focus().toggleCode().run(),
416
+ isActive: () => editor.isActive("code"),
417
+ style: { fontFamily: "monospace", fontSize: 11 },
418
+ },
419
+ { type: "divider" },
420
+ {
421
+ label: "H1",
422
+ title: "Heading 1",
423
+ action: () => editor.chain().focus().toggleHeading({ level: 1 }).run(),
424
+ isActive: () => editor.isActive("heading", { level: 1 }),
425
+ },
426
+ {
427
+ label: "H2",
428
+ title: "Heading 2",
429
+ action: () => editor.chain().focus().toggleHeading({ level: 2 }).run(),
430
+ isActive: () => editor.isActive("heading", { level: 2 }),
431
+ },
432
+ {
433
+ label: "H3",
434
+ title: "Heading 3",
435
+ action: () => editor.chain().focus().toggleHeading({ level: 3 }).run(),
436
+ isActive: () => editor.isActive("heading", { level: 3 }),
437
+ },
438
+ { type: "divider" },
439
+ {
440
+ label: "🔗",
441
+ title: "Link",
442
+ action: toggleLink,
443
+ isActive: () => editor.isActive("link"),
444
+ },
445
+ ];
446
+ if (!visible)
447
+ return null;
448
+ return (_jsx("div", { ref: toolbarRef, className: "re-bubble-toolbar", onMouseDown: (e) => e.preventDefault(), style: {
449
+ position: "fixed",
450
+ top: coords.top,
451
+ left: coords.left,
452
+ transform: "translate(-50%, -100%)",
453
+ zIndex: 9999,
454
+ }, children: showLinkInput ? (_jsxs("div", { style: { display: "flex", alignItems: "center", gap: 4, padding: 4 }, onMouseDown: (e) => e.preventDefault(), children: [_jsx("input", { autoFocus: true, type: "url", placeholder: "Paste link...", value: linkUrl, onChange: (e) => setLinkUrl(e.target.value), onKeyDown: (e) => {
455
+ if (e.key === "Enter")
456
+ handleSetLink();
457
+ if (e.key === "Escape") {
458
+ setShowLinkInput(false);
459
+ setLinkUrl("");
460
+ }
461
+ }, style: {
462
+ background: "transparent",
463
+ border: "none",
464
+ outline: "none",
465
+ color: "white",
466
+ fontSize: 12,
467
+ width: 160,
468
+ padding: "2px 4px",
469
+ } }), _jsx("button", { onClick: handleSetLink, style: {
470
+ fontSize: 11,
471
+ color: "#60a5fa",
472
+ padding: "2px 6px",
473
+ fontWeight: 500,
474
+ background: "none",
475
+ border: "none",
476
+ cursor: "pointer",
477
+ }, children: "Apply" })] })) : (_jsx("div", { style: { display: "flex", alignItems: "center", gap: 2 }, onMouseDown: (e) => e.preventDefault(), children: items.map((item, i) => {
478
+ if ("type" in item && item.type === "divider") {
479
+ return (_jsx("div", { style: {
480
+ width: 1,
481
+ height: 16,
482
+ background: "rgba(255,255,255,0.2)",
483
+ margin: "0 2px",
484
+ } }, `d-${i}`));
485
+ }
486
+ const { label, title, action, isActive, style } = item;
487
+ return (_jsx("button", { onClick: action, title: title, className: cn("re-bubble-btn", isActive() && "re-bubble-btn--active"), style: style, children: label }, title));
488
+ }) })) }));
489
+ }
490
+ // --- Visual Markdown Editor ---
491
+ function VisualMarkdownEditor({ content, onChange, resourceId, }) {
492
+ const isSettingContent = useRef(false);
493
+ const onChangeRef = useRef(onChange);
494
+ onChangeRef.current = onChange;
495
+ // Parse frontmatter — strip it from tiptap content, re-prepend on save
496
+ const parsed = useMemo(() => parseFrontmatter(content), [content]);
497
+ const frontmatterRef = useRef(parsed.frontmatter);
498
+ frontmatterRef.current = parsed.frontmatter;
499
+ const editor = useEditor({
500
+ extensions: [
501
+ StarterKit.configure({
502
+ heading: { levels: [1, 2, 3] },
503
+ codeBlock: {},
504
+ dropcursor: { color: "hsl(var(--ring))", width: 2 },
505
+ }),
506
+ Placeholder.configure({
507
+ placeholder: ({ node }) => {
508
+ if (node.type.name === "heading") {
509
+ const level = node.attrs.level;
510
+ if (level === 1)
511
+ return "Heading 1";
512
+ if (level === 2)
513
+ return "Heading 2";
514
+ return "Heading 3";
515
+ }
516
+ return "Type '/' for commands...";
517
+ },
518
+ showOnlyWhenEditable: true,
519
+ showOnlyCurrent: true,
520
+ }),
521
+ Link.configure({
522
+ openOnClick: false,
523
+ HTMLAttributes: { class: "re-link" },
524
+ }),
525
+ Markdown.configure({
526
+ html: true,
527
+ transformPastedText: true,
528
+ transformCopiedText: true,
529
+ }),
530
+ ],
531
+ content: parsed.body,
532
+ editorProps: {
533
+ attributes: {
534
+ class: "re-prose",
535
+ },
536
+ },
537
+ onUpdate: ({ editor }) => {
538
+ if (isSettingContent.current)
539
+ return;
540
+ try {
541
+ const md = editor.storage.markdown.getMarkdown();
542
+ // Re-prepend frontmatter if it existed
543
+ const fm = frontmatterRef.current;
544
+ const full = fm ? fm.raw + md : md;
545
+ onChangeRef.current(full);
546
+ }
547
+ catch (err) {
548
+ console.error("Markdown serialization error:", err);
549
+ }
550
+ },
551
+ });
552
+ useEffect(() => {
553
+ if (!editor || editor.isDestroyed)
554
+ return;
555
+ const currentMd = editor.storage.markdown.getMarkdown();
556
+ if (currentMd !== parsed.body) {
557
+ if (editor.isFocused)
558
+ return;
559
+ isSettingContent.current = true;
560
+ editor.commands.setContent(parsed.body);
561
+ isSettingContent.current = false;
562
+ }
563
+ }, [parsed.body, editor]);
564
+ useEffect(() => {
565
+ return () => {
566
+ editor?.destroy();
567
+ };
568
+ }, [editor]);
569
+ if (!editor)
570
+ return null;
571
+ const handleWrapperClick = (e) => {
572
+ // If the click was on the wrapper (empty area), not on editor content, focus at end
573
+ const target = e.target;
574
+ if (target.classList.contains("re-editor-clickable") ||
575
+ target.classList.contains("re-editor-wrapper")) {
576
+ editor.chain().focus("end").run();
577
+ }
578
+ };
579
+ return (_jsxs("div", { className: "re-editor-wrapper re-editor-clickable", onClick: handleWrapperClick, style: { position: "relative", minHeight: "100%", cursor: "text" }, children: [parsed.frontmatter && (_jsx(FrontmatterBar, { frontmatter: parsed.frontmatter, onChange: (updated) => {
580
+ frontmatterRef.current = updated;
581
+ // Get current body and combine with updated frontmatter
582
+ try {
583
+ const md = editor.storage.markdown.getMarkdown();
584
+ onChangeRef.current(updated.raw + md);
585
+ }
586
+ catch {
587
+ // fallback
588
+ }
589
+ } })), _jsx(InlineBubbleToolbar, { editor: editor }), _jsx(SlashMenu, { editor: editor }), _jsx(EditorContent, { editor: editor })] }));
590
+ }
591
+ // --- Main ResourceEditor ---
592
+ export function ResourceEditor({ resource, onSave }) {
593
+ const [content, setContent] = useState(resource.content);
594
+ const [view, setView] = useState(getViewPref);
595
+ const [saveStatus, setSaveStatus] = useState("idle");
596
+ const debounceRef = useRef(null);
597
+ const prevIdRef = useRef(resource.id);
598
+ // Reset content when resource changes
599
+ useEffect(() => {
600
+ if (prevIdRef.current !== resource.id) {
601
+ setContent(resource.content);
602
+ setSaveStatus("idle");
603
+ prevIdRef.current = resource.id;
604
+ }
605
+ }, [resource.id, resource.content]);
606
+ const handleChange = useCallback((newContent) => {
607
+ setContent(newContent);
608
+ setSaveStatus("idle");
609
+ if (debounceRef.current)
610
+ clearTimeout(debounceRef.current);
611
+ debounceRef.current = setTimeout(() => {
612
+ setSaveStatus("saving");
613
+ onSave(newContent);
614
+ setTimeout(() => setSaveStatus("saved"), 300);
615
+ }, 1000);
616
+ }, [onSave]);
617
+ const switchView = useCallback((v) => {
618
+ setView(v);
619
+ setViewPref(v);
620
+ }, []);
621
+ // Cleanup debounce on unmount
622
+ useEffect(() => {
623
+ return () => {
624
+ if (debounceRef.current)
625
+ clearTimeout(debounceRef.current);
626
+ };
627
+ }, []);
628
+ const isMarkdown = resource.mimeType === "text/markdown" || resource.path.endsWith(".md");
629
+ const isImage = resource.mimeType.startsWith("image/");
630
+ // Image preview
631
+ if (isImage) {
632
+ return (_jsx("div", { className: "flex h-full flex-col", children: _jsx("div", { className: "flex flex-1 items-center justify-center overflow-auto p-4", children: _jsx("img", { src: `/_agent-native/resources/${resource.id}?raw`, alt: resource.path, className: "max-h-full max-w-full object-contain" }) }) }));
633
+ }
634
+ // Markdown files get visual/code toggle
635
+ if (isMarkdown) {
636
+ return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsx("style", { children: editorStyles }), _jsxs("div", { className: "flex items-center justify-between border-b border-border px-3 py-2", children: [_jsxs("div", { className: "flex items-center gap-1", children: [_jsx("button", { onClick: () => switchView("visual"), className: cn("rounded-md px-2 py-1.5 text-[12px] leading-none", view === "visual"
637
+ ? "bg-accent text-foreground"
638
+ : "text-muted-foreground hover:bg-accent/50 hover:text-foreground"), style: CONTROL_STYLE, children: "Visual" }), _jsx("button", { onClick: () => switchView("code"), className: cn("rounded-md px-2 py-1.5 text-[12px] leading-none", view === "code"
639
+ ? "bg-accent text-foreground"
640
+ : "text-muted-foreground hover:bg-accent/50 hover:text-foreground"), style: CONTROL_STYLE, children: "Code" })] }), _jsx("span", { className: "text-[11px] text-muted-foreground/60", children: saveStatus === "saving"
641
+ ? "Saving..."
642
+ : saveStatus === "saved"
643
+ ? "Saved"
644
+ : "" })] }), view === "visual" ? (_jsx("div", { className: "flex-1 min-h-0 overflow-y-auto p-3", children: _jsx(VisualMarkdownEditor, { content: content, onChange: handleChange, resourceId: resource.id }) }, resource.id + "-visual")) : (_jsx("textarea", { value: content, onChange: (e) => handleChange(e.target.value), className: "flex-1 min-h-0 resize-none bg-transparent p-3 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50", style: {
645
+ fontFamily: 'ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace',
646
+ lineHeight: 1.6,
647
+ }, spellCheck: false }))] }));
648
+ }
649
+ // Non-markdown text files: plain textarea
650
+ return (_jsx("div", { className: "flex h-full flex-col", children: _jsx("textarea", { value: content, onChange: (e) => handleChange(e.target.value), className: "flex-1 min-h-0 resize-none bg-transparent p-3 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50", style: {
651
+ fontFamily: 'ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace',
652
+ lineHeight: 1.6,
653
+ }, spellCheck: false }) }));
654
+ }
655
+ // --- Scoped editor styles (injected inline so no external CSS needed) ---
656
+ const editorStyles = `
657
+ /* Prose styling for the visual editor */
658
+ .re-prose {
659
+ outline: none;
660
+ color: hsl(var(--foreground));
661
+ line-height: 1.65;
662
+ font-size: 13px;
663
+ min-height: 100%;
664
+ }
665
+ .re-prose > *:first-child { margin-top: 0; }
666
+
667
+ .re-prose h1 {
668
+ font-size: 1.5em;
669
+ font-weight: 700;
670
+ margin: 1em 0 0.25em;
671
+ line-height: 1.25;
672
+ }
673
+ .re-prose h2 {
674
+ font-size: 1.25em;
675
+ font-weight: 600;
676
+ margin: 0.8em 0 0.2em;
677
+ line-height: 1.3;
678
+ }
679
+ .re-prose h3 {
680
+ font-size: 1.1em;
681
+ font-weight: 600;
682
+ margin: 0.6em 0 0.15em;
683
+ line-height: 1.35;
684
+ }
685
+ .re-prose p {
686
+ margin: 0.35em 0;
687
+ min-height: 1.65em;
688
+ }
689
+ .re-prose ul {
690
+ list-style-type: disc;
691
+ padding-left: 1.4em;
692
+ margin: 0.2em 0;
693
+ }
694
+ .re-prose ol {
695
+ list-style-type: decimal;
696
+ padding-left: 1.4em;
697
+ margin: 0.2em 0;
698
+ }
699
+ .re-prose li { margin: 0.05em 0; }
700
+ .re-prose li p { margin: 0; }
701
+
702
+ .re-prose blockquote {
703
+ border-left: 2px solid hsl(var(--border));
704
+ padding-left: 0.8em;
705
+ margin: 0.3em 0;
706
+ color: hsl(var(--muted-foreground));
707
+ }
708
+ .re-prose code {
709
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
710
+ font-size: 0.88em;
711
+ background: hsl(var(--muted));
712
+ padding: 0.1em 0.3em;
713
+ border-radius: 3px;
714
+ }
715
+ .re-prose pre {
716
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
717
+ font-size: 12px;
718
+ background: hsl(var(--muted));
719
+ border-radius: 4px;
720
+ padding: 0.7em 0.9em;
721
+ margin: 0.3em 0;
722
+ overflow-x: auto;
723
+ line-height: 1.5;
724
+ }
725
+ .re-prose pre code {
726
+ background: none;
727
+ padding: 0;
728
+ border: none;
729
+ font-size: inherit;
730
+ }
731
+ .re-prose hr {
732
+ border: none;
733
+ border-top: 1px solid hsl(var(--border));
734
+ margin: 1em 0;
735
+ }
736
+ .re-prose strong { font-weight: 600; }
737
+ .re-prose em { font-style: italic; }
738
+ .re-prose s { text-decoration: line-through; }
739
+
740
+ .re-link {
741
+ color: hsl(var(--foreground));
742
+ text-decoration: underline;
743
+ text-underline-offset: 2px;
744
+ text-decoration-color: hsl(var(--muted-foreground));
745
+ cursor: pointer;
746
+ }
747
+ .re-link:hover {
748
+ text-decoration-color: hsl(var(--foreground));
749
+ }
750
+
751
+ /* Placeholder */
752
+ .re-prose p.is-editor-empty:first-child::before,
753
+ .re-prose p.is-empty::before,
754
+ .re-prose h1.is-empty::before,
755
+ .re-prose h2.is-empty::before,
756
+ .re-prose h3.is-empty::before {
757
+ content: attr(data-placeholder);
758
+ float: left;
759
+ color: hsl(var(--muted-foreground));
760
+ opacity: 0.5;
761
+ pointer-events: none;
762
+ height: 0;
763
+ }
764
+
765
+ /* Selection */
766
+ .re-prose ::selection {
767
+ background: hsl(210 100% 52% / 0.2);
768
+ }
769
+
770
+ /* Bubble toolbar */
771
+ .re-bubble-toolbar {
772
+ display: flex;
773
+ align-items: center;
774
+ background: hsl(0 0% 15%);
775
+ border-radius: 6px;
776
+ padding: 3px;
777
+ box-shadow: 0 4px 16px rgb(0 0 0 / 0.25), 0 0 0 1px rgb(255 255 255 / 0.06);
778
+ }
779
+ .re-bubble-btn {
780
+ padding: 3px 6px;
781
+ border-radius: 4px;
782
+ font-size: 12px;
783
+ color: rgba(255,255,255,0.75);
784
+ background: none;
785
+ border: none;
786
+ cursor: pointer;
787
+ line-height: 1;
788
+ }
789
+ .re-bubble-btn:hover {
790
+ background: rgba(255,255,255,0.12);
791
+ color: white;
792
+ }
793
+ .re-bubble-btn--active {
794
+ background: rgba(255,255,255,0.18);
795
+ color: white;
796
+ }
797
+
798
+ /* Slash command menu */
799
+ .re-slash-menu {
800
+ background: hsl(var(--popover));
801
+ border: 1px solid hsl(var(--border));
802
+ border-radius: 6px;
803
+ box-shadow: 0 4px 20px rgb(0 0 0 / 0.12), 0 0 0 1px rgb(0 0 0 / 0.04);
804
+ min-width: 220px;
805
+ max-height: 320px;
806
+ overflow-y: auto;
807
+ color: hsl(var(--foreground));
808
+ }
809
+ .re-slash-item {
810
+ width: 100%;
811
+ display: flex;
812
+ align-items: center;
813
+ gap: 8px;
814
+ padding: 6px 10px;
815
+ text-align: left;
816
+ background: none;
817
+ border: none;
818
+ cursor: pointer;
819
+ color: hsl(var(--foreground));
820
+ font-size: 13px;
821
+ }
822
+ .re-slash-item:hover,
823
+ .re-slash-item--active {
824
+ background: hsl(var(--accent));
825
+ }
826
+ .re-slash-icon {
827
+ display: flex;
828
+ align-items: center;
829
+ justify-content: center;
830
+ width: 28px;
831
+ height: 28px;
832
+ border-radius: 4px;
833
+ border: 1px solid hsl(var(--border));
834
+ background: hsl(var(--background));
835
+ font-size: 12px;
836
+ font-weight: 600;
837
+ color: hsl(var(--muted-foreground));
838
+ flex-shrink: 0;
839
+ }
840
+ .re-slash-title {
841
+ display: block;
842
+ font-weight: 500;
843
+ font-size: 13px;
844
+ }
845
+ .re-slash-desc {
846
+ display: block;
847
+ font-size: 11px;
848
+ color: hsl(var(--muted-foreground));
849
+ }
850
+ `;
851
+ //# sourceMappingURL=ResourceEditor.js.map