@agent-native/core 0.15.13 → 0.16.0

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 (411) hide show
  1. package/README.md +37 -0
  2. package/dist/agent/app-model-defaults.d.ts +37 -0
  3. package/dist/agent/app-model-defaults.d.ts.map +1 -0
  4. package/dist/agent/app-model-defaults.js +136 -0
  5. package/dist/agent/app-model-defaults.js.map +1 -0
  6. package/dist/agent/engine/registry.d.ts +12 -7
  7. package/dist/agent/engine/registry.d.ts.map +1 -1
  8. package/dist/agent/engine/registry.js +28 -8
  9. package/dist/agent/engine/registry.js.map +1 -1
  10. package/dist/agent/production-agent.d.ts +2 -0
  11. package/dist/agent/production-agent.d.ts.map +1 -1
  12. package/dist/agent/production-agent.js +3 -1
  13. package/dist/agent/production-agent.js.map +1 -1
  14. package/dist/browser-sessions/actions.d.ts +7 -0
  15. package/dist/browser-sessions/actions.d.ts.map +1 -0
  16. package/dist/browser-sessions/actions.js +223 -0
  17. package/dist/browser-sessions/actions.js.map +1 -0
  18. package/dist/browser-sessions/routes.d.ts +7 -0
  19. package/dist/browser-sessions/routes.d.ts.map +1 -0
  20. package/dist/browser-sessions/routes.js +159 -0
  21. package/dist/browser-sessions/routes.js.map +1 -0
  22. package/dist/browser-sessions/store.d.ts +33 -0
  23. package/dist/browser-sessions/store.d.ts.map +1 -0
  24. package/dist/browser-sessions/store.js +506 -0
  25. package/dist/browser-sessions/store.js.map +1 -0
  26. package/dist/browser-sessions/types.d.ts +68 -0
  27. package/dist/browser-sessions/types.d.ts.map +1 -0
  28. package/dist/browser-sessions/types.js +2 -0
  29. package/dist/browser-sessions/types.js.map +1 -0
  30. package/dist/cli/code-agent-commands.d.ts +36 -0
  31. package/dist/cli/code-agent-commands.d.ts.map +1 -0
  32. package/dist/cli/code-agent-commands.js +192 -0
  33. package/dist/cli/code-agent-commands.js.map +1 -0
  34. package/dist/cli/code-agent-connector.d.ts +17 -0
  35. package/dist/cli/code-agent-connector.d.ts.map +1 -0
  36. package/dist/cli/code-agent-connector.js +724 -0
  37. package/dist/cli/code-agent-connector.js.map +1 -0
  38. package/dist/cli/code-agent-executor.d.ts +31 -0
  39. package/dist/cli/code-agent-executor.d.ts.map +1 -0
  40. package/dist/cli/code-agent-executor.js +921 -0
  41. package/dist/cli/code-agent-executor.js.map +1 -0
  42. package/dist/cli/code-agent-runs.d.ts +102 -0
  43. package/dist/cli/code-agent-runs.d.ts.map +1 -0
  44. package/dist/cli/code-agent-runs.js +277 -0
  45. package/dist/cli/code-agent-runs.js.map +1 -0
  46. package/dist/cli/code.d.ts +66 -0
  47. package/dist/cli/code.d.ts.map +1 -0
  48. package/dist/cli/code.js +1306 -0
  49. package/dist/cli/code.js.map +1 -0
  50. package/dist/cli/create.d.ts +2 -1
  51. package/dist/cli/create.d.ts.map +1 -1
  52. package/dist/cli/create.js +11 -1
  53. package/dist/cli/create.js.map +1 -1
  54. package/dist/cli/index.js +26 -1
  55. package/dist/cli/index.js.map +1 -1
  56. package/dist/cli/migrate.d.ts +27 -0
  57. package/dist/cli/migrate.d.ts.map +1 -1
  58. package/dist/cli/migrate.js +1328 -20
  59. package/dist/cli/migrate.js.map +1 -1
  60. package/dist/cli/templates-meta.d.ts.map +1 -1
  61. package/dist/cli/templates-meta.js +26 -2
  62. package/dist/cli/templates-meta.js.map +1 -1
  63. package/dist/cli/workspacify.d.ts +2 -0
  64. package/dist/cli/workspacify.d.ts.map +1 -1
  65. package/dist/cli/workspacify.js +2 -1
  66. package/dist/cli/workspacify.js.map +1 -1
  67. package/dist/client/AgentNative.d.ts +32 -0
  68. package/dist/client/AgentNative.d.ts.map +1 -0
  69. package/dist/client/AgentNative.js +79 -0
  70. package/dist/client/AgentNative.js.map +1 -0
  71. package/dist/client/AgentNativeEmbedded.d.ts +47 -0
  72. package/dist/client/AgentNativeEmbedded.d.ts.map +1 -0
  73. package/dist/client/AgentNativeEmbedded.js +148 -0
  74. package/dist/client/AgentNativeEmbedded.js.map +1 -0
  75. package/dist/client/AgentNativeFrame.d.ts +25 -0
  76. package/dist/client/AgentNativeFrame.d.ts.map +1 -0
  77. package/dist/client/AgentNativeFrame.js +68 -0
  78. package/dist/client/AgentNativeFrame.js.map +1 -0
  79. package/dist/client/AgentPanel.d.ts +19 -2
  80. package/dist/client/AgentPanel.d.ts.map +1 -1
  81. package/dist/client/AgentPanel.js +15 -4
  82. package/dist/client/AgentPanel.js.map +1 -1
  83. package/dist/client/AssistantChat.d.ts +1 -1
  84. package/dist/client/AssistantChat.d.ts.map +1 -1
  85. package/dist/client/AssistantChat.js +79 -48
  86. package/dist/client/AssistantChat.js.map +1 -1
  87. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  88. package/dist/client/MultiTabAssistantChat.js +2 -1
  89. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  90. package/dist/client/NewWorkspaceAppFlow.d.ts.map +1 -1
  91. package/dist/client/NewWorkspaceAppFlow.js +3 -2
  92. package/dist/client/NewWorkspaceAppFlow.js.map +1 -1
  93. package/dist/client/browser-session-bridge.d.ts +44 -0
  94. package/dist/client/browser-session-bridge.d.ts.map +1 -0
  95. package/dist/client/browser-session-bridge.js +339 -0
  96. package/dist/client/browser-session-bridge.js.map +1 -0
  97. package/dist/client/client-action.d.ts +7 -0
  98. package/dist/client/client-action.d.ts.map +1 -0
  99. package/dist/client/client-action.js +4 -0
  100. package/dist/client/client-action.js.map +1 -0
  101. package/dist/client/components/ui/tooltip.d.ts.map +1 -1
  102. package/dist/client/components/ui/tooltip.js +1 -1
  103. package/dist/client/components/ui/tooltip.js.map +1 -1
  104. package/dist/client/composer/AgentComposerFrame.d.ts +17 -0
  105. package/dist/client/composer/AgentComposerFrame.d.ts.map +1 -0
  106. package/dist/client/composer/AgentComposerFrame.js +14 -0
  107. package/dist/client/composer/AgentComposerFrame.js.map +1 -0
  108. package/dist/client/composer/MentionPopover.d.ts.map +1 -1
  109. package/dist/client/composer/MentionPopover.js +2 -2
  110. package/dist/client/composer/MentionPopover.js.map +1 -1
  111. package/dist/client/composer/PromptComposer.d.ts +35 -2
  112. package/dist/client/composer/PromptComposer.d.ts.map +1 -1
  113. package/dist/client/composer/PromptComposer.js +31 -17
  114. package/dist/client/composer/PromptComposer.js.map +1 -1
  115. package/dist/client/composer/TiptapComposer.d.ts +20 -2
  116. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  117. package/dist/client/composer/TiptapComposer.js +112 -22
  118. package/dist/client/composer/TiptapComposer.js.map +1 -1
  119. package/dist/client/composer/index.d.ts +3 -2
  120. package/dist/client/composer/index.d.ts.map +1 -1
  121. package/dist/client/composer/index.js +1 -0
  122. package/dist/client/composer/index.js.map +1 -1
  123. package/dist/client/composer/types.d.ts +1 -0
  124. package/dist/client/composer/types.d.ts.map +1 -1
  125. package/dist/client/composer/types.js.map +1 -1
  126. package/dist/client/extensions/AgentNativeExtensionFrame.d.ts +58 -0
  127. package/dist/client/extensions/AgentNativeExtensionFrame.d.ts.map +1 -0
  128. package/dist/client/extensions/AgentNativeExtensionFrame.e2e-host.d.ts +2 -0
  129. package/dist/client/extensions/AgentNativeExtensionFrame.e2e-host.d.ts.map +1 -0
  130. package/dist/client/extensions/AgentNativeExtensionFrame.e2e-host.js +110 -0
  131. package/dist/client/extensions/AgentNativeExtensionFrame.e2e-host.js.map +1 -0
  132. package/dist/client/extensions/AgentNativeExtensionFrame.js +354 -0
  133. package/dist/client/extensions/AgentNativeExtensionFrame.js.map +1 -0
  134. package/dist/client/extensions/AgentNativeExtensionFrame.spec.d.ts +2 -0
  135. package/dist/client/extensions/AgentNativeExtensionFrame.spec.d.ts.map +1 -0
  136. package/dist/client/extensions/AgentNativeExtensionFrame.spec.js +68 -0
  137. package/dist/client/extensions/AgentNativeExtensionFrame.spec.js.map +1 -0
  138. package/dist/client/extensions/agent-native-extension-runtime.d.ts +69 -0
  139. package/dist/client/extensions/agent-native-extension-runtime.d.ts.map +1 -0
  140. package/dist/client/extensions/agent-native-extension-runtime.js +348 -0
  141. package/dist/client/extensions/agent-native-extension-runtime.js.map +1 -0
  142. package/dist/client/extensions/index.d.ts +2 -0
  143. package/dist/client/extensions/index.d.ts.map +1 -1
  144. package/dist/client/extensions/index.js +2 -0
  145. package/dist/client/extensions/index.js.map +1 -1
  146. package/dist/client/extensions/portable-extension.d.ts +86 -0
  147. package/dist/client/extensions/portable-extension.d.ts.map +1 -0
  148. package/dist/client/extensions/portable-extension.js +480 -0
  149. package/dist/client/extensions/portable-extension.js.map +1 -0
  150. package/dist/client/host-bridge.d.ts +266 -0
  151. package/dist/client/host-bridge.d.ts.map +1 -0
  152. package/dist/client/host-bridge.js +745 -0
  153. package/dist/client/host-bridge.js.map +1 -0
  154. package/dist/client/host-tools.d.ts +40 -0
  155. package/dist/client/host-tools.d.ts.map +1 -0
  156. package/dist/client/host-tools.js +94 -0
  157. package/dist/client/host-tools.js.map +1 -0
  158. package/dist/client/index.d.ts +13 -2
  159. package/dist/client/index.d.ts.map +1 -1
  160. package/dist/client/index.js +11 -2
  161. package/dist/client/index.js.map +1 -1
  162. package/dist/client/resources/BuiltinCapabilityDetail.d.ts +10 -0
  163. package/dist/client/resources/BuiltinCapabilityDetail.d.ts.map +1 -0
  164. package/dist/client/resources/BuiltinCapabilityDetail.js +51 -0
  165. package/dist/client/resources/BuiltinCapabilityDetail.js.map +1 -0
  166. package/dist/client/resources/ResourceEditor.d.ts +3 -1
  167. package/dist/client/resources/ResourceEditor.d.ts.map +1 -1
  168. package/dist/client/resources/ResourceEditor.js +40 -17
  169. package/dist/client/resources/ResourceEditor.js.map +1 -1
  170. package/dist/client/resources/ResourceTree.d.ts.map +1 -1
  171. package/dist/client/resources/ResourceTree.js +23 -2
  172. package/dist/client/resources/ResourceTree.js.map +1 -1
  173. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  174. package/dist/client/resources/ResourcesPanel.js +77 -17
  175. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  176. package/dist/client/resources/index.d.ts +1 -0
  177. package/dist/client/resources/index.d.ts.map +1 -1
  178. package/dist/client/resources/index.js +1 -0
  179. package/dist/client/resources/index.js.map +1 -1
  180. package/dist/client/resources/use-builtin-capabilities.d.ts +62 -0
  181. package/dist/client/resources/use-builtin-capabilities.d.ts.map +1 -0
  182. package/dist/client/resources/use-builtin-capabilities.js +54 -0
  183. package/dist/client/resources/use-builtin-capabilities.js.map +1 -0
  184. package/dist/client/resources/use-resources.d.ts +30 -2
  185. package/dist/client/resources/use-resources.d.ts.map +1 -1
  186. package/dist/client/resources/use-resources.js +42 -1
  187. package/dist/client/resources/use-resources.js.map +1 -1
  188. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  189. package/dist/client/settings/SettingsPanel.js +151 -2
  190. package/dist/client/settings/SettingsPanel.js.map +1 -1
  191. package/dist/client/use-chat-models.d.ts.map +1 -1
  192. package/dist/client/use-chat-models.js +20 -0
  193. package/dist/client/use-chat-models.js.map +1 -1
  194. package/dist/client/use-chat-threads.d.ts.map +1 -1
  195. package/dist/client/use-chat-threads.js +46 -2
  196. package/dist/client/use-chat-threads.js.map +1 -1
  197. package/dist/client/use-chat-threads.spec.js +77 -0
  198. package/dist/client/use-chat-threads.spec.js.map +1 -1
  199. package/dist/code-agents/index.d.ts +4 -0
  200. package/dist/code-agents/index.d.ts.map +1 -0
  201. package/dist/code-agents/index.js +4 -0
  202. package/dist/code-agents/index.js.map +1 -0
  203. package/dist/connections/catalog.d.ts +134 -0
  204. package/dist/connections/catalog.d.ts.map +1 -0
  205. package/dist/connections/catalog.js +180 -0
  206. package/dist/connections/catalog.js.map +1 -0
  207. package/dist/connections/index.d.ts +2 -0
  208. package/dist/connections/index.d.ts.map +1 -0
  209. package/dist/connections/index.js +2 -0
  210. package/dist/connections/index.js.map +1 -0
  211. package/dist/extensions/change-marker.d.ts +10 -0
  212. package/dist/extensions/change-marker.d.ts.map +1 -0
  213. package/dist/extensions/change-marker.js +42 -0
  214. package/dist/extensions/change-marker.js.map +1 -0
  215. package/dist/extensions/routes.d.ts.map +1 -1
  216. package/dist/extensions/routes.js +1 -7
  217. package/dist/extensions/routes.js.map +1 -1
  218. package/dist/extensions/schema.d.ts +1 -0
  219. package/dist/extensions/schema.d.ts.map +1 -1
  220. package/dist/extensions/schema.js +1 -0
  221. package/dist/extensions/schema.js.map +1 -1
  222. package/dist/extensions/slots/routes.js +1 -1
  223. package/dist/extensions/slots/routes.js.map +1 -1
  224. package/dist/extensions/store.d.ts +3 -0
  225. package/dist/extensions/store.d.ts.map +1 -1
  226. package/dist/extensions/store.js +112 -4
  227. package/dist/extensions/store.js.map +1 -1
  228. package/dist/index.d.ts +4 -1
  229. package/dist/index.d.ts.map +1 -1
  230. package/dist/index.js +6 -1
  231. package/dist/index.js.map +1 -1
  232. package/dist/integrations/adapters/telegram.d.ts.map +1 -1
  233. package/dist/integrations/adapters/telegram.js +1 -0
  234. package/dist/integrations/adapters/telegram.js.map +1 -1
  235. package/dist/integrations/index.d.ts +5 -1
  236. package/dist/integrations/index.d.ts.map +1 -1
  237. package/dist/integrations/index.js +4 -1
  238. package/dist/integrations/index.js.map +1 -1
  239. package/dist/integrations/plugin.d.ts +8 -0
  240. package/dist/integrations/plugin.d.ts.map +1 -1
  241. package/dist/integrations/plugin.js +760 -32
  242. package/dist/integrations/plugin.js.map +1 -1
  243. package/dist/integrations/remote-commands-store.d.ts +36 -0
  244. package/dist/integrations/remote-commands-store.d.ts.map +1 -0
  245. package/dist/integrations/remote-commands-store.js +273 -0
  246. package/dist/integrations/remote-commands-store.js.map +1 -0
  247. package/dist/integrations/remote-devices-store.d.ts +43 -0
  248. package/dist/integrations/remote-devices-store.d.ts.map +1 -0
  249. package/dist/integrations/remote-devices-store.js +315 -0
  250. package/dist/integrations/remote-devices-store.js.map +1 -0
  251. package/dist/integrations/remote-push-store.d.ts +37 -0
  252. package/dist/integrations/remote-push-store.d.ts.map +1 -0
  253. package/dist/integrations/remote-push-store.js +299 -0
  254. package/dist/integrations/remote-push-store.js.map +1 -0
  255. package/dist/integrations/remote-retry-job.d.ts +7 -0
  256. package/dist/integrations/remote-retry-job.d.ts.map +1 -0
  257. package/dist/integrations/remote-retry-job.js +45 -0
  258. package/dist/integrations/remote-retry-job.js.map +1 -0
  259. package/dist/integrations/remote-run-events-store.d.ts +18 -0
  260. package/dist/integrations/remote-run-events-store.d.ts.map +1 -0
  261. package/dist/integrations/remote-run-events-store.js +82 -0
  262. package/dist/integrations/remote-run-events-store.js.map +1 -0
  263. package/dist/integrations/remote-types.d.ts +101 -0
  264. package/dist/integrations/remote-types.d.ts.map +1 -0
  265. package/dist/integrations/remote-types.js +2 -0
  266. package/dist/integrations/remote-types.js.map +1 -0
  267. package/dist/integrations/webhook-handler.d.ts +2 -0
  268. package/dist/integrations/webhook-handler.d.ts.map +1 -1
  269. package/dist/integrations/webhook-handler.js +4 -1
  270. package/dist/integrations/webhook-handler.js.map +1 -1
  271. package/dist/jobs/scheduler.d.ts +4 -2
  272. package/dist/jobs/scheduler.d.ts.map +1 -1
  273. package/dist/jobs/scheduler.js +9 -3
  274. package/dist/jobs/scheduler.js.map +1 -1
  275. package/dist/mcp-client/builtin-capabilities.d.ts +20 -0
  276. package/dist/mcp-client/builtin-capabilities.d.ts.map +1 -0
  277. package/dist/mcp-client/builtin-capabilities.js +75 -0
  278. package/dist/mcp-client/builtin-capabilities.js.map +1 -0
  279. package/dist/mcp-client/builtin-store.d.ts +10 -0
  280. package/dist/mcp-client/builtin-store.d.ts.map +1 -0
  281. package/dist/mcp-client/builtin-store.js +55 -0
  282. package/dist/mcp-client/builtin-store.js.map +1 -0
  283. package/dist/mcp-client/index.d.ts +3 -1
  284. package/dist/mcp-client/index.d.ts.map +1 -1
  285. package/dist/mcp-client/index.js +3 -1
  286. package/dist/mcp-client/index.js.map +1 -1
  287. package/dist/mcp-client/routes.d.ts +28 -0
  288. package/dist/mcp-client/routes.d.ts.map +1 -1
  289. package/dist/mcp-client/routes.js +195 -1
  290. package/dist/mcp-client/routes.js.map +1 -1
  291. package/dist/org/context.d.ts.map +1 -1
  292. package/dist/org/context.js +34 -0
  293. package/dist/org/context.js.map +1 -1
  294. package/dist/resources/handlers.d.ts +4 -0
  295. package/dist/resources/handlers.d.ts.map +1 -1
  296. package/dist/resources/handlers.js +46 -7
  297. package/dist/resources/handlers.js.map +1 -1
  298. package/dist/resources/script-helpers.d.ts +8 -1
  299. package/dist/resources/script-helpers.d.ts.map +1 -1
  300. package/dist/resources/script-helpers.js +18 -8
  301. package/dist/resources/script-helpers.js.map +1 -1
  302. package/dist/resources/store.d.ts +19 -0
  303. package/dist/resources/store.d.ts.map +1 -1
  304. package/dist/resources/store.js +86 -3
  305. package/dist/resources/store.js.map +1 -1
  306. package/dist/scripts/agent-engines/list-agent-engines.d.ts +1 -1
  307. package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
  308. package/dist/scripts/agent-engines/list-agent-engines.js +18 -7
  309. package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
  310. package/dist/scripts/agent-engines/manage-agent-engine.d.ts.map +1 -1
  311. package/dist/scripts/agent-engines/manage-agent-engine.js +100 -7
  312. package/dist/scripts/agent-engines/manage-agent-engine.js.map +1 -1
  313. package/dist/scripts/resources/delete.d.ts.map +1 -1
  314. package/dist/scripts/resources/delete.js +4 -1
  315. package/dist/scripts/resources/delete.js.map +1 -1
  316. package/dist/scripts/resources/effective.d.ts +11 -0
  317. package/dist/scripts/resources/effective.d.ts.map +1 -0
  318. package/dist/scripts/resources/effective.js +54 -0
  319. package/dist/scripts/resources/effective.js.map +1 -0
  320. package/dist/scripts/resources/index.d.ts.map +1 -1
  321. package/dist/scripts/resources/index.js +1 -0
  322. package/dist/scripts/resources/index.js.map +1 -1
  323. package/dist/scripts/resources/list.d.ts +1 -1
  324. package/dist/scripts/resources/list.d.ts.map +1 -1
  325. package/dist/scripts/resources/list.js +17 -5
  326. package/dist/scripts/resources/list.js.map +1 -1
  327. package/dist/scripts/resources/read.d.ts +1 -1
  328. package/dist/scripts/resources/read.d.ts.map +1 -1
  329. package/dist/scripts/resources/read.js +20 -5
  330. package/dist/scripts/resources/read.js.map +1 -1
  331. package/dist/scripts/resources/write.d.ts.map +1 -1
  332. package/dist/scripts/resources/write.js +4 -1
  333. package/dist/scripts/resources/write.js.map +1 -1
  334. package/dist/scripts/runner.d.ts +11 -1
  335. package/dist/scripts/runner.d.ts.map +1 -1
  336. package/dist/scripts/runner.js +75 -27
  337. package/dist/scripts/runner.js.map +1 -1
  338. package/dist/server/action-discovery.d.ts.map +1 -1
  339. package/dist/server/action-discovery.js +5 -0
  340. package/dist/server/action-discovery.js.map +1 -1
  341. package/dist/server/agent-chat-plugin.d.ts +24 -0
  342. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  343. package/dist/server/agent-chat-plugin.js +608 -54
  344. package/dist/server/agent-chat-plugin.js.map +1 -1
  345. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  346. package/dist/server/core-routes-plugin.js +2 -0
  347. package/dist/server/core-routes-plugin.js.map +1 -1
  348. package/dist/server/embedded.d.ts +72 -0
  349. package/dist/server/embedded.d.ts.map +1 -0
  350. package/dist/server/embedded.js +119 -0
  351. package/dist/server/embedded.js.map +1 -0
  352. package/dist/server/index.d.ts +8 -1
  353. package/dist/server/index.d.ts.map +1 -1
  354. package/dist/server/index.js +7 -1
  355. package/dist/server/index.js.map +1 -1
  356. package/dist/server/poll.d.ts.map +1 -1
  357. package/dist/server/poll.js +184 -13
  358. package/dist/server/poll.js.map +1 -1
  359. package/dist/server/resources-plugin.d.ts.map +1 -1
  360. package/dist/server/resources-plugin.js +11 -2
  361. package/dist/server/resources-plugin.js.map +1 -1
  362. package/dist/sharing/actions/extension-change.d.ts +4 -0
  363. package/dist/sharing/actions/extension-change.d.ts.map +1 -0
  364. package/dist/sharing/actions/extension-change.js +13 -0
  365. package/dist/sharing/actions/extension-change.js.map +1 -0
  366. package/dist/sharing/actions/set-resource-visibility.d.ts.map +1 -1
  367. package/dist/sharing/actions/set-resource-visibility.js +3 -0
  368. package/dist/sharing/actions/set-resource-visibility.js.map +1 -1
  369. package/dist/sharing/actions/share-resource.d.ts.map +1 -1
  370. package/dist/sharing/actions/share-resource.js +4 -0
  371. package/dist/sharing/actions/share-resource.js.map +1 -1
  372. package/dist/sharing/actions/unshare-resource.d.ts.map +1 -1
  373. package/dist/sharing/actions/unshare-resource.js +3 -0
  374. package/dist/sharing/actions/unshare-resource.js.map +1 -1
  375. package/dist/templates/default/AGENTS.md +3 -3
  376. package/dist/templates/workspace-core/AGENTS.md +7 -0
  377. package/dist/templates/workspace-root/AGENTS.md +7 -0
  378. package/dist/templates/workspace-root/README.md +25 -0
  379. package/dist/triggers/dispatcher.d.ts +3 -1
  380. package/dist/triggers/dispatcher.d.ts.map +1 -1
  381. package/dist/triggers/dispatcher.js +9 -3
  382. package/dist/triggers/dispatcher.js.map +1 -1
  383. package/dist/workspace-connections/index.d.ts +2 -0
  384. package/dist/workspace-connections/index.d.ts.map +1 -0
  385. package/dist/workspace-connections/index.js +2 -0
  386. package/dist/workspace-connections/index.js.map +1 -0
  387. package/dist/workspace-connections/store.d.ts +229 -0
  388. package/dist/workspace-connections/store.d.ts.map +1 -0
  389. package/dist/workspace-connections/store.js +938 -0
  390. package/dist/workspace-connections/store.js.map +1 -0
  391. package/docs/content/agent-teams.md +6 -0
  392. package/docs/content/cloneable-saas.md +1 -0
  393. package/docs/content/code-agents-ui.md +261 -0
  394. package/docs/content/dispatch.md +40 -3
  395. package/docs/content/embedding-sdk.md +459 -0
  396. package/docs/content/faq.md +1 -0
  397. package/docs/content/getting-started.md +1 -0
  398. package/docs/content/mcp-clients.md +41 -3
  399. package/docs/content/migration-workbench.md +237 -54
  400. package/docs/content/multi-app-workspace.md +41 -0
  401. package/docs/content/multi-tenancy.md +1 -1
  402. package/docs/content/template-brain.md +418 -0
  403. package/docs/content/template-dispatch.md +30 -0
  404. package/docs/content/workspace-connections.md +509 -0
  405. package/docs/content/workspace-management.md +12 -12
  406. package/docs/content/workspace.md +180 -40
  407. package/package.json +7 -2
  408. package/src/templates/default/AGENTS.md +3 -3
  409. package/src/templates/workspace-core/AGENTS.md +7 -0
  410. package/src/templates/workspace-root/AGENTS.md +7 -0
  411. package/src/templates/workspace-root/README.md +25 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ResourceTree.js","sourceRoot":"","sources":["../../../src/client/resources/ResourceTree.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState, useRef, useCallback } from \"react\";\nimport {\n IconChevronRight,\n IconChevronDown,\n IconFolder,\n IconFileText,\n IconFileCode,\n IconPhoto,\n IconFile,\n IconPlus,\n IconTrash,\n IconMessageChatbot,\n IconPlugConnected,\n IconBulb,\n IconClockHour3,\n IconLoader2,\n} from \"@tabler/icons-react\";\nimport { cn } from \"../utils.js\";\nimport type { TreeNode, ResourceMeta, JobMetadata } from \"./use-resources.js\";\nimport type { McpServer } from \"./use-mcp-servers.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\n\nfunction StatusDot({\n className,\n tooltip,\n}: {\n className: string;\n tooltip: string;\n}) {\n return (\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n aria-label={tooltip}\n className={cn(\"ml-1 inline-block h-1.5 w-1.5 shrink-0\", className)}\n />\n </TooltipTrigger>\n <TooltipContent>{tooltip}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\n// ─── Helpers ────────────────────────────────────────────────────────────────\n\nfunction getFileIcon(node: TreeNode): React.ReactNode {\n if (node.kind === \"agent\") {\n return (\n <IconMessageChatbot className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n );\n }\n if (node.kind === \"remote-agent\" || node.kind === \"mcp-server\") {\n return (\n <IconPlugConnected className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n );\n }\n if (node.kind === \"skill\") {\n return <IconBulb className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />;\n }\n if (node.kind === \"job\") {\n return (\n <IconClockHour3 className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n );\n }\n const name = node.name;\n const ext = name.split(\".\").pop()?.toLowerCase() ?? \"\";\n const iconClass = \"h-3.5 w-3.5 shrink-0 text-muted-foreground\";\n if (ext === \"md\" || ext === \"mdx\")\n return <IconFileText className={iconClass} />;\n if (\n [\"ts\", \"tsx\", \"js\", \"jsx\", \"json\", \"css\", \"html\", \"py\", \"sh\"].includes(ext)\n )\n return <IconFileCode className={iconClass} />;\n if ([\"png\", \"jpg\", \"jpeg\", \"gif\", \"svg\", \"webp\", \"ico\"].includes(ext))\n return <IconPhoto className={iconClass} />;\n return <IconFile className={iconClass} />;\n}\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport interface ResourceTreeProps {\n tree: TreeNode[];\n selectedId: string | null;\n onSelect: (resource: ResourceMeta) => void;\n onCreateFile: (parentPath: string, name: string) => void;\n onCreateFolder: (parentPath: string, name: string) => void;\n onDelete: (id: string) => void;\n onRename: (id: string, newPath: string) => void;\n onDrop: (files: FileList) => void;\n /** Section title displayed as heading */\n title?: string;\n /** Tooltip for the section heading */\n titleTooltip?: string;\n /** Whether this section's tree is still loading */\n isLoading?: boolean;\n /** Resource id currently being deleted (shows spinner + muted row) */\n deletingId?: string | null;\n /** When true, hide create/delete/rename/upload affordances. Files stay readable. */\n readOnly?: boolean;\n /** Optional hint shown next to the heading (e.g. \"Read only\") */\n headingHint?: React.ReactNode;\n}\n\ninterface CreatingState {\n parentPath: string;\n type: \"file\" | \"folder\";\n}\n\nfunction McpStatusDot({ server }: { server: McpServer }) {\n const status = server.status ?? { state: \"unknown\" as const };\n if (status.state === \"connected\") {\n return (\n <StatusDot\n className=\"rounded-full bg-green-500\"\n tooltip={`Connected — ${status.toolCount} tool${status.toolCount === 1 ? \"\" : \"s\"}`}\n />\n );\n }\n if (status.state === \"error\") {\n return (\n <StatusDot\n className=\"rounded-full bg-red-500\"\n tooltip={`Error: ${status.error}`}\n />\n );\n }\n return (\n <StatusDot\n className=\"rounded-full bg-muted-foreground/40\"\n tooltip=\"Connecting…\"\n />\n );\n}\n\nfunction JobStatusDot({ meta }: { meta: JobMetadata }) {\n if (!meta.enabled) {\n return (\n <StatusDot\n className=\"rounded-full bg-muted-foreground/40\"\n tooltip=\"Disabled\"\n />\n );\n }\n if (meta.lastStatus === \"running\") {\n return (\n <StatusDot\n className=\"rounded-full bg-blue-500 animate-pulse\"\n tooltip=\"Running\"\n />\n );\n }\n if (meta.lastStatus === \"error\") {\n return (\n <StatusDot\n className=\"rounded-full bg-red-500\"\n tooltip=\"Last run failed\"\n />\n );\n }\n if (meta.lastStatus === \"success\") {\n return (\n <StatusDot\n className=\"rounded-full bg-green-500\"\n tooltip=\"Last run succeeded\"\n />\n );\n }\n return (\n <StatusDot\n className=\"rounded-full bg-amber-500\"\n tooltip=\"Scheduled (not yet run)\"\n />\n );\n}\n\n// ─── TreeNodeRow ────────────────────────────────────────────────────────────\n\nfunction TreeNodeRow({\n node,\n depth,\n expanded,\n selectedId,\n deletingId,\n readOnly,\n onToggle,\n onSelect,\n onDelete,\n onStartCreate,\n}: {\n node: TreeNode;\n depth: number;\n expanded: Set<string>;\n selectedId: string | null;\n deletingId?: string | null;\n readOnly?: boolean;\n onToggle: (path: string) => void;\n onSelect: (resource: ResourceMeta) => void;\n onDelete: (id: string) => void;\n onStartCreate: (parentPath: string, type: \"file\" | \"folder\") => void;\n}) {\n const isFolder = node.type === \"folder\";\n const isExpanded = expanded.has(node.path);\n const isSelected = node.resource?.id === selectedId;\n const isDeleting = !!node.resource && node.resource.id === deletingId;\n const [confirmingDelete, setConfirmingDelete] = useState(false);\n\n return (\n <div>\n <div\n className={cn(\n \"group/row flex items-center gap-1 rounded-md px-1.5 py-1 select-none\",\n isDeleting ? \"pointer-events-none opacity-40\" : \"cursor-pointer\",\n isSelected\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-foreground\",\n )}\n style={{ paddingLeft: depth * 16 + 6 }}\n onClick={() => {\n if (isDeleting) return;\n if (isFolder) {\n onToggle(node.path);\n } else if (node.resource) {\n onSelect(node.resource);\n }\n }}\n onMouseLeave={() => setConfirmingDelete(false)}\n >\n {isFolder ? (\n isExpanded ? (\n <IconChevronDown className=\"h-3 w-3 shrink-0\" />\n ) : (\n <IconChevronRight className=\"h-3 w-3 shrink-0\" />\n )\n ) : (\n <span className=\"w-3 shrink-0\" />\n )}\n {isFolder ? (\n <IconFolder className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n ) : (\n getFileIcon(node)\n )}\n <span className=\"min-w-0 truncate text-[12px] leading-none\">\n {node.name}\n </span>\n {node.jobMeta && <JobStatusDot meta={node.jobMeta} />}\n {node.mcpServerMeta && <McpStatusDot server={node.mcpServerMeta} />}\n {!readOnly && (\n <div\n className={cn(\n \"ml-auto flex shrink-0 items-center gap-0.5 opacity-0 group-hover/row:opacity-100\",\n confirmingDelete && \"opacity-100\",\n )}\n >\n <TooltipProvider delayDuration={200}>\n {isFolder && (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={(e) => {\n e.stopPropagation();\n onStartCreate(node.path, \"file\");\n }}\n aria-label=\"New file\"\n className=\"flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50\"\n >\n <IconPlus className=\"h-3 w-3\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>New file</TooltipContent>\n </Tooltip>\n )}\n {node.resource &&\n (isDeleting ? (\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n aria-label=\"Deleting…\"\n className=\"flex h-5 w-5 items-center justify-center rounded text-muted-foreground\"\n >\n <IconLoader2 className=\"h-3 w-3 animate-spin\" />\n </span>\n </TooltipTrigger>\n <TooltipContent>Deleting…</TooltipContent>\n </Tooltip>\n ) : (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={(e) => {\n e.stopPropagation();\n if (confirmingDelete) {\n onDelete(node.resource!.id);\n setConfirmingDelete(false);\n } else {\n setConfirmingDelete(true);\n }\n }}\n aria-label={\n confirmingDelete ? \"Confirm delete\" : \"Delete\"\n }\n className={cn(\n \"flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-destructive hover:bg-accent/50\",\n confirmingDelete &&\n \"bg-destructive/10 text-destructive\",\n )}\n >\n <IconTrash className=\"h-3 w-3\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>\n {confirmingDelete ? \"Click again to delete\" : \"Delete\"}\n </TooltipContent>\n </Tooltip>\n ))}\n </TooltipProvider>\n </div>\n )}\n </div>\n {isFolder && isExpanded && node.children && (\n <div>\n {node.children.map((child) => (\n <TreeNodeRow\n key={child.resource?.id ?? child.path}\n node={child}\n depth={depth + 1}\n expanded={expanded}\n selectedId={selectedId}\n deletingId={deletingId}\n readOnly={readOnly}\n onToggle={onToggle}\n onSelect={onSelect}\n onDelete={onDelete}\n onStartCreate={onStartCreate}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n\n// ─── InlineInput ────────────────────────────────────────────────────────────\n\nfunction InlineInput({\n depth,\n onConfirm,\n onCancel,\n}: {\n depth: number;\n onConfirm: (name: string) => void;\n onCancel: () => void;\n}) {\n const inputRef = useRef<HTMLInputElement>(null);\n const [value, setValue] = useState(\"\");\n\n React.useEffect(() => {\n inputRef.current?.focus();\n }, []);\n\n return (\n <div\n className=\"flex items-center gap-1 px-1.5 py-0.5\"\n style={{ paddingLeft: depth * 16 + 6 + 16 }}\n >\n <IconFile className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n <input\n ref={inputRef}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && value.trim()) {\n onConfirm(value.trim());\n } else if (e.key === \"Escape\") {\n onCancel();\n }\n }}\n onBlur={() => {\n if (value.trim()) {\n onConfirm(value.trim());\n } else {\n onCancel();\n }\n }}\n className=\"min-w-0 flex-1 bg-transparent text-[12px] leading-none text-foreground outline-none placeholder:text-muted-foreground/50\"\n placeholder=\"filename.md\"\n />\n </div>\n );\n}\n\n// ─── ResourceTree ───────────────────────────────────────────────────────────\n\nexport function ResourceTree({\n tree,\n selectedId,\n onSelect,\n onCreateFile,\n onCreateFolder,\n onDelete,\n onDrop,\n title = \"Files\",\n titleTooltip,\n isLoading = false,\n deletingId = null,\n readOnly = false,\n headingHint,\n}: ResourceTreeProps) {\n const [expanded, setExpanded] = useState<Set<string>>(() => new Set());\n const [creating, setCreating] = useState<CreatingState | null>(null);\n const [dragOver, setDragOver] = useState(false);\n\n const toggleExpand = useCallback((path: string) => {\n setExpanded((prev) => {\n const next = new Set(prev);\n if (next.has(path)) {\n next.delete(path);\n } else {\n next.add(path);\n }\n return next;\n });\n }, []);\n\n const handleStartCreate = useCallback(\n (parentPath: string, type: \"file\" | \"folder\") => {\n setCreating({ parentPath, type });\n // auto-expand the parent folder\n setExpanded((prev) => {\n const next = new Set(prev);\n next.add(parentPath);\n return next;\n });\n },\n [],\n );\n\n const handleConfirmCreate = useCallback(\n (name: string) => {\n if (!creating) return;\n if (creating.type === \"file\") {\n onCreateFile(creating.parentPath, name);\n } else {\n onCreateFolder(creating.parentPath, name);\n }\n setCreating(null);\n },\n [creating, onCreateFile, onCreateFolder],\n );\n\n const handleCancelCreate = useCallback(() => {\n setCreating(null);\n }, []);\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setDragOver(true);\n }, []);\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setDragOver(false);\n }, []);\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setDragOver(false);\n if (readOnly) return;\n if (e.dataTransfer.files.length > 0) {\n onDrop(e.dataTransfer.files);\n }\n },\n [onDrop, readOnly],\n );\n\n return (\n <div\n className={cn(\n \"p-1\",\n dragOver && !readOnly && \"ring-1 ring-inset ring-accent\",\n )}\n onDragOver={readOnly ? undefined : handleDragOver}\n onDragLeave={readOnly ? undefined : handleDragLeave}\n onDrop={readOnly ? undefined : handleDrop}\n >\n {/* Section heading */}\n <div className=\"group/root flex items-center justify-between px-1.5 py-1\">\n <TooltipProvider delayDuration={200}>\n {titleTooltip ? (\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"flex items-center gap-1.5 text-[11px] font-medium uppercase tracking-wide text-muted-foreground/60\">\n {title}\n {headingHint && (\n <span className=\"text-[10px] font-normal normal-case tracking-normal text-muted-foreground/50\">\n {headingHint}\n </span>\n )}\n </span>\n </TooltipTrigger>\n <TooltipContent>{titleTooltip}</TooltipContent>\n </Tooltip>\n ) : (\n <span className=\"flex items-center gap-1.5 text-[11px] font-medium uppercase tracking-wide text-muted-foreground/60\">\n {title}\n {headingHint && (\n <span className=\"text-[10px] font-normal normal-case tracking-normal text-muted-foreground/50\">\n {headingHint}\n </span>\n )}\n </span>\n )}\n {!readOnly && (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => handleStartCreate(\"\", \"file\")}\n aria-label=\"New file\"\n className=\"flex h-5 w-5 items-center justify-center rounded text-muted-foreground/50 opacity-0 group-hover/root:opacity-100 hover:text-foreground hover:bg-accent/50\"\n >\n <IconPlus className=\"h-3 w-3\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>New file</TooltipContent>\n </Tooltip>\n )}\n </TooltipProvider>\n </div>\n\n {tree.map((node) => (\n <TreeNodeRow\n key={node.resource?.id ?? node.path}\n node={node}\n depth={0}\n expanded={expanded}\n selectedId={selectedId}\n deletingId={deletingId}\n readOnly={readOnly}\n onToggle={toggleExpand}\n onSelect={onSelect}\n onDelete={onDelete}\n onStartCreate={handleStartCreate}\n />\n ))}\n\n {isLoading && tree.length === 0 && (\n <div className=\"px-1 py-1\">\n {Array.from({ length: 3 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-2 px-1.5 py-1\">\n <div\n className=\"h-3.5 w-3.5 rounded bg-muted-foreground/10 animate-pulse\"\n style={{ animationDelay: `${i * 75}ms` }}\n />\n <div\n className=\"h-3 rounded bg-muted-foreground/10 animate-pulse\"\n style={{\n width: `${50 + ((i * 37) % 40)}%`,\n animationDelay: `${i * 75}ms`,\n }}\n />\n </div>\n ))}\n </div>\n )}\n\n {/* Inline input for root-level creation */}\n {creating && creating.parentPath === \"\" && (\n <InlineInput\n depth={0}\n onConfirm={handleConfirmCreate}\n onCancel={handleCancelCreate}\n />\n )}\n\n {/* Inline input for folder-level creation */}\n {creating && creating.parentPath !== \"\" && (\n <InlineInput\n depth={creating.parentPath.split(\"/\").filter(Boolean).length}\n onConfirm={handleConfirmCreate}\n onCancel={handleCancelCreate}\n />\n )}\n\n {tree.length === 0 && !creating && !isLoading && (\n <div className=\"px-2 py-1\">\n <p className=\"text-[11px] text-muted-foreground/40\">No files yet</p>\n </div>\n )}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"ResourceTree.js","sourceRoot":"","sources":["../../../src/client/resources/ResourceTree.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState, useRef, useCallback } from \"react\";\nimport {\n IconChevronRight,\n IconChevronDown,\n IconFolder,\n IconFileText,\n IconFileCode,\n IconPhoto,\n IconFile,\n IconPlus,\n IconTrash,\n IconMessageChatbot,\n IconPlugConnected,\n IconBrowser,\n IconDeviceDesktop,\n IconBulb,\n IconClockHour3,\n IconLoader2,\n} from \"@tabler/icons-react\";\nimport { cn } from \"../utils.js\";\nimport type { TreeNode, ResourceMeta, JobMetadata } from \"./use-resources.js\";\nimport type { McpServer } from \"./use-mcp-servers.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\n\nfunction StatusDot({\n className,\n tooltip,\n}: {\n className: string;\n tooltip: string;\n}) {\n return (\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n aria-label={tooltip}\n className={cn(\"ml-1 inline-block h-1.5 w-1.5 shrink-0\", className)}\n />\n </TooltipTrigger>\n <TooltipContent>{tooltip}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\n// ─── Helpers ────────────────────────────────────────────────────────────────\n\nfunction getFileIcon(node: TreeNode): React.ReactNode {\n if (node.kind === \"agent\") {\n return (\n <IconMessageChatbot className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n );\n }\n if (node.kind === \"remote-agent\" || node.kind === \"mcp-server\") {\n return (\n <IconPlugConnected className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n );\n }\n if (node.kind === \"mcp-builtin\") {\n return node.mcpBuiltinMeta?.exclusiveGroup === \"browser\" ? (\n <IconBrowser className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n ) : (\n <IconDeviceDesktop className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n );\n }\n if (node.kind === \"skill\") {\n return <IconBulb className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />;\n }\n if (node.kind === \"job\") {\n return (\n <IconClockHour3 className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n );\n }\n const name = node.name;\n const ext = name.split(\".\").pop()?.toLowerCase() ?? \"\";\n const iconClass = \"h-3.5 w-3.5 shrink-0 text-muted-foreground\";\n if (ext === \"md\" || ext === \"mdx\")\n return <IconFileText className={iconClass} />;\n if (\n [\"ts\", \"tsx\", \"js\", \"jsx\", \"json\", \"css\", \"html\", \"py\", \"sh\"].includes(ext)\n )\n return <IconFileCode className={iconClass} />;\n if ([\"png\", \"jpg\", \"jpeg\", \"gif\", \"svg\", \"webp\", \"ico\"].includes(ext))\n return <IconPhoto className={iconClass} />;\n return <IconFile className={iconClass} />;\n}\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport interface ResourceTreeProps {\n tree: TreeNode[];\n selectedId: string | null;\n onSelect: (resource: ResourceMeta) => void;\n onCreateFile: (parentPath: string, name: string) => void;\n onCreateFolder: (parentPath: string, name: string) => void;\n onDelete: (id: string) => void;\n onRename: (id: string, newPath: string) => void;\n onDrop: (files: FileList) => void;\n /** Section title displayed as heading */\n title?: string;\n /** Tooltip for the section heading */\n titleTooltip?: string;\n /** Whether this section's tree is still loading */\n isLoading?: boolean;\n /** Resource id currently being deleted (shows spinner + muted row) */\n deletingId?: string | null;\n /** When true, hide create/delete/rename/upload affordances. Files stay readable. */\n readOnly?: boolean;\n /** Optional hint shown next to the heading (e.g. \"Read only\") */\n headingHint?: React.ReactNode;\n}\n\ninterface CreatingState {\n parentPath: string;\n type: \"file\" | \"folder\";\n}\n\nfunction McpStatusDot({ server }: { server: McpServer }) {\n const status = server.status ?? { state: \"unknown\" as const };\n if (status.state === \"connected\") {\n return (\n <StatusDot\n className=\"rounded-full bg-green-500\"\n tooltip={`Connected — ${status.toolCount} tool${status.toolCount === 1 ? \"\" : \"s\"}`}\n />\n );\n }\n if (status.state === \"error\") {\n return (\n <StatusDot\n className=\"rounded-full bg-red-500\"\n tooltip={`Error: ${status.error}`}\n />\n );\n }\n return (\n <StatusDot\n className=\"rounded-full bg-muted-foreground/40\"\n tooltip=\"Connecting…\"\n />\n );\n}\n\nfunction BuiltinStatusDot({ node }: { node: TreeNode }) {\n const meta = node.mcpBuiltinMeta;\n if (!meta?.available) {\n return (\n <StatusDot\n className=\"rounded-full bg-muted-foreground/30\"\n tooltip={meta?.unavailableReason ?? \"Not available on this host\"}\n />\n );\n }\n if (!meta.scopeEnabled) {\n return (\n <StatusDot\n className=\"rounded-full bg-muted-foreground/40\"\n tooltip=\"Disabled\"\n />\n );\n }\n const status = meta.status?.[meta.scope];\n if (status?.state === \"connected\") {\n return (\n <StatusDot\n className=\"rounded-full bg-green-500\"\n tooltip={`Connected — ${status.toolCount} tool${status.toolCount === 1 ? \"\" : \"s\"}`}\n />\n );\n }\n if (status?.state === \"error\") {\n return (\n <StatusDot\n className=\"rounded-full bg-red-500\"\n tooltip={`Error: ${status.error}`}\n />\n );\n }\n return <StatusDot className=\"rounded-full bg-amber-500\" tooltip=\"Enabled\" />;\n}\n\nfunction JobStatusDot({ meta }: { meta: JobMetadata }) {\n if (!meta.enabled) {\n return (\n <StatusDot\n className=\"rounded-full bg-muted-foreground/40\"\n tooltip=\"Disabled\"\n />\n );\n }\n if (meta.lastStatus === \"running\") {\n return (\n <StatusDot\n className=\"rounded-full bg-blue-500 animate-pulse\"\n tooltip=\"Running\"\n />\n );\n }\n if (meta.lastStatus === \"error\") {\n return (\n <StatusDot\n className=\"rounded-full bg-red-500\"\n tooltip=\"Last run failed\"\n />\n );\n }\n if (meta.lastStatus === \"success\") {\n return (\n <StatusDot\n className=\"rounded-full bg-green-500\"\n tooltip=\"Last run succeeded\"\n />\n );\n }\n return (\n <StatusDot\n className=\"rounded-full bg-amber-500\"\n tooltip=\"Scheduled (not yet run)\"\n />\n );\n}\n\n// ─── TreeNodeRow ────────────────────────────────────────────────────────────\n\nfunction TreeNodeRow({\n node,\n depth,\n expanded,\n selectedId,\n deletingId,\n readOnly,\n onToggle,\n onSelect,\n onDelete,\n onStartCreate,\n}: {\n node: TreeNode;\n depth: number;\n expanded: Set<string>;\n selectedId: string | null;\n deletingId?: string | null;\n readOnly?: boolean;\n onToggle: (path: string) => void;\n onSelect: (resource: ResourceMeta) => void;\n onDelete: (id: string) => void;\n onStartCreate: (parentPath: string, type: \"file\" | \"folder\") => void;\n}) {\n const isFolder = node.type === \"folder\";\n const isExpanded = expanded.has(node.path);\n const isSelected = node.resource?.id === selectedId;\n const isDeleting = !!node.resource && node.resource.id === deletingId;\n const [confirmingDelete, setConfirmingDelete] = useState(false);\n\n return (\n <div>\n <div\n className={cn(\n \"group/row flex items-center gap-1 rounded-md px-1.5 py-1 select-none\",\n isDeleting ? \"pointer-events-none opacity-40\" : \"cursor-pointer\",\n isSelected\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-foreground\",\n )}\n style={{ paddingLeft: depth * 16 + 6 }}\n onClick={() => {\n if (isDeleting) return;\n if (isFolder) {\n onToggle(node.path);\n } else if (node.resource) {\n onSelect(node.resource);\n }\n }}\n onMouseLeave={() => setConfirmingDelete(false)}\n >\n {isFolder ? (\n isExpanded ? (\n <IconChevronDown className=\"h-3 w-3 shrink-0\" />\n ) : (\n <IconChevronRight className=\"h-3 w-3 shrink-0\" />\n )\n ) : (\n <span className=\"w-3 shrink-0\" />\n )}\n {isFolder ? (\n <IconFolder className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n ) : (\n getFileIcon(node)\n )}\n <span className=\"min-w-0 truncate text-[12px] leading-none\">\n {node.name}\n </span>\n {node.jobMeta && <JobStatusDot meta={node.jobMeta} />}\n {node.mcpServerMeta && <McpStatusDot server={node.mcpServerMeta} />}\n {node.mcpBuiltinMeta && <BuiltinStatusDot node={node} />}\n {!readOnly && (\n <div\n className={cn(\n \"ml-auto flex shrink-0 items-center gap-0.5 opacity-0 group-hover/row:opacity-100\",\n confirmingDelete && \"opacity-100\",\n )}\n >\n <TooltipProvider delayDuration={200}>\n {isFolder && (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={(e) => {\n e.stopPropagation();\n onStartCreate(node.path, \"file\");\n }}\n aria-label=\"New file\"\n className=\"flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50\"\n >\n <IconPlus className=\"h-3 w-3\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>New file</TooltipContent>\n </Tooltip>\n )}\n {node.resource &&\n node.kind !== \"mcp-builtin\" &&\n (isDeleting ? (\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n aria-label=\"Deleting…\"\n className=\"flex h-5 w-5 items-center justify-center rounded text-muted-foreground\"\n >\n <IconLoader2 className=\"h-3 w-3 animate-spin\" />\n </span>\n </TooltipTrigger>\n <TooltipContent>Deleting…</TooltipContent>\n </Tooltip>\n ) : (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={(e) => {\n e.stopPropagation();\n if (confirmingDelete) {\n onDelete(node.resource!.id);\n setConfirmingDelete(false);\n } else {\n setConfirmingDelete(true);\n }\n }}\n aria-label={\n confirmingDelete ? \"Confirm delete\" : \"Delete\"\n }\n className={cn(\n \"flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-destructive hover:bg-accent/50\",\n confirmingDelete &&\n \"bg-destructive/10 text-destructive\",\n )}\n >\n <IconTrash className=\"h-3 w-3\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>\n {confirmingDelete ? \"Click again to delete\" : \"Delete\"}\n </TooltipContent>\n </Tooltip>\n ))}\n </TooltipProvider>\n </div>\n )}\n </div>\n {isFolder && isExpanded && node.children && (\n <div>\n {node.children.map((child) => (\n <TreeNodeRow\n key={child.resource?.id ?? child.path}\n node={child}\n depth={depth + 1}\n expanded={expanded}\n selectedId={selectedId}\n deletingId={deletingId}\n readOnly={readOnly}\n onToggle={onToggle}\n onSelect={onSelect}\n onDelete={onDelete}\n onStartCreate={onStartCreate}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n\n// ─── InlineInput ────────────────────────────────────────────────────────────\n\nfunction InlineInput({\n depth,\n onConfirm,\n onCancel,\n}: {\n depth: number;\n onConfirm: (name: string) => void;\n onCancel: () => void;\n}) {\n const inputRef = useRef<HTMLInputElement>(null);\n const [value, setValue] = useState(\"\");\n\n React.useEffect(() => {\n inputRef.current?.focus();\n }, []);\n\n return (\n <div\n className=\"flex items-center gap-1 px-1.5 py-0.5\"\n style={{ paddingLeft: depth * 16 + 6 + 16 }}\n >\n <IconFile className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n <input\n ref={inputRef}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && value.trim()) {\n onConfirm(value.trim());\n } else if (e.key === \"Escape\") {\n onCancel();\n }\n }}\n onBlur={() => {\n if (value.trim()) {\n onConfirm(value.trim());\n } else {\n onCancel();\n }\n }}\n className=\"min-w-0 flex-1 bg-transparent text-[12px] leading-none text-foreground outline-none placeholder:text-muted-foreground/50\"\n placeholder=\"filename.md\"\n />\n </div>\n );\n}\n\n// ─── ResourceTree ───────────────────────────────────────────────────────────\n\nexport function ResourceTree({\n tree,\n selectedId,\n onSelect,\n onCreateFile,\n onCreateFolder,\n onDelete,\n onDrop,\n title = \"Files\",\n titleTooltip,\n isLoading = false,\n deletingId = null,\n readOnly = false,\n headingHint,\n}: ResourceTreeProps) {\n const [expanded, setExpanded] = useState<Set<string>>(() => new Set());\n const [creating, setCreating] = useState<CreatingState | null>(null);\n const [dragOver, setDragOver] = useState(false);\n\n const toggleExpand = useCallback((path: string) => {\n setExpanded((prev) => {\n const next = new Set(prev);\n if (next.has(path)) {\n next.delete(path);\n } else {\n next.add(path);\n }\n return next;\n });\n }, []);\n\n const handleStartCreate = useCallback(\n (parentPath: string, type: \"file\" | \"folder\") => {\n setCreating({ parentPath, type });\n // auto-expand the parent folder\n setExpanded((prev) => {\n const next = new Set(prev);\n next.add(parentPath);\n return next;\n });\n },\n [],\n );\n\n const handleConfirmCreate = useCallback(\n (name: string) => {\n if (!creating) return;\n if (creating.type === \"file\") {\n onCreateFile(creating.parentPath, name);\n } else {\n onCreateFolder(creating.parentPath, name);\n }\n setCreating(null);\n },\n [creating, onCreateFile, onCreateFolder],\n );\n\n const handleCancelCreate = useCallback(() => {\n setCreating(null);\n }, []);\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setDragOver(true);\n }, []);\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setDragOver(false);\n }, []);\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setDragOver(false);\n if (readOnly) return;\n if (e.dataTransfer.files.length > 0) {\n onDrop(e.dataTransfer.files);\n }\n },\n [onDrop, readOnly],\n );\n\n return (\n <div\n className={cn(\n \"p-1\",\n dragOver && !readOnly && \"ring-1 ring-inset ring-accent\",\n )}\n onDragOver={readOnly ? undefined : handleDragOver}\n onDragLeave={readOnly ? undefined : handleDragLeave}\n onDrop={readOnly ? undefined : handleDrop}\n >\n {/* Section heading */}\n <div className=\"group/root flex items-center justify-between px-1.5 py-1\">\n <TooltipProvider delayDuration={200}>\n {titleTooltip ? (\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"flex items-center gap-1.5 text-[11px] font-medium uppercase tracking-wide text-muted-foreground/60\">\n {title}\n {headingHint && (\n <span className=\"text-[10px] font-normal normal-case tracking-normal text-muted-foreground/50\">\n {headingHint}\n </span>\n )}\n </span>\n </TooltipTrigger>\n <TooltipContent>{titleTooltip}</TooltipContent>\n </Tooltip>\n ) : (\n <span className=\"flex items-center gap-1.5 text-[11px] font-medium uppercase tracking-wide text-muted-foreground/60\">\n {title}\n {headingHint && (\n <span className=\"text-[10px] font-normal normal-case tracking-normal text-muted-foreground/50\">\n {headingHint}\n </span>\n )}\n </span>\n )}\n {!readOnly && (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => handleStartCreate(\"\", \"file\")}\n aria-label=\"New file\"\n className=\"flex h-5 w-5 items-center justify-center rounded text-muted-foreground/50 opacity-0 group-hover/root:opacity-100 hover:text-foreground hover:bg-accent/50\"\n >\n <IconPlus className=\"h-3 w-3\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>New file</TooltipContent>\n </Tooltip>\n )}\n </TooltipProvider>\n </div>\n\n {tree.map((node) => (\n <TreeNodeRow\n key={node.resource?.id ?? node.path}\n node={node}\n depth={0}\n expanded={expanded}\n selectedId={selectedId}\n deletingId={deletingId}\n readOnly={readOnly}\n onToggle={toggleExpand}\n onSelect={onSelect}\n onDelete={onDelete}\n onStartCreate={handleStartCreate}\n />\n ))}\n\n {isLoading && tree.length === 0 && (\n <div className=\"px-1 py-1\">\n {Array.from({ length: 3 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-2 px-1.5 py-1\">\n <div\n className=\"h-3.5 w-3.5 rounded bg-muted-foreground/10 animate-pulse\"\n style={{ animationDelay: `${i * 75}ms` }}\n />\n <div\n className=\"h-3 rounded bg-muted-foreground/10 animate-pulse\"\n style={{\n width: `${50 + ((i * 37) % 40)}%`,\n animationDelay: `${i * 75}ms`,\n }}\n />\n </div>\n ))}\n </div>\n )}\n\n {/* Inline input for root-level creation */}\n {creating && creating.parentPath === \"\" && (\n <InlineInput\n depth={0}\n onConfirm={handleConfirmCreate}\n onCancel={handleCancelCreate}\n />\n )}\n\n {/* Inline input for folder-level creation */}\n {creating && creating.parentPath !== \"\" && (\n <InlineInput\n depth={creating.parentPath.split(\"/\").filter(Boolean).length}\n onConfirm={handleConfirmCreate}\n onCancel={handleCancelCreate}\n />\n )}\n\n {tree.length === 0 && !creating && !isLoading && (\n <div className=\"px-2 py-1\">\n <p className=\"text-[11px] text-muted-foreground/40\">No files yet</p>\n </div>\n )}\n </div>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ResourcesPanel.d.ts","sourceRoot":"","sources":["../../../src/client/resources/ResourcesPanel.tsx"],"names":[],"mappings":"AA08BA,wBAAgB,cAAc,4CA6lB7B"}
1
+ {"version":3,"file":"ResourcesPanel.d.ts","sourceRoot":"","sources":["../../../src/client/resources/ResourcesPanel.tsx"],"names":[],"mappings":"AA8hCA,wBAAgB,cAAc,4CA+qB7B"}
@@ -8,9 +8,11 @@ import { PromptComposer } from "../composer/PromptComposer.js";
8
8
  import { ResourceTree } from "./ResourceTree.js";
9
9
  import { ResourceEditor } from "./ResourceEditor.js";
10
10
  import { serializeFrontmatter } from "../../resources/metadata.js";
11
- import { useResourceTree, useResource, useCreateResource, useUpdateResource, useDeleteResource, useUploadResource, withMcpServersFolder, withAgentScratchFolder, } from "./use-resources.js";
11
+ import { useResourceTree, useResource, useEffectiveResourceContext, useCreateResource, useUpdateResource, useDeleteResource, useUploadResource, withMcpServersFolder, withAgentScratchFolder, } from "./use-resources.js";
12
12
  import { formatMcpServerError, getMcpUrlValidationError, useMcpServers, useCreateMcpServer, useDeleteMcpServer, testMcpServerUrl, parseMcpVirtualId, } from "./use-mcp-servers.js";
13
13
  import { McpServerDetail } from "./McpServerDetail.js";
14
+ import { BuiltinCapabilityDetail } from "./BuiltinCapabilityDetail.js";
15
+ import { parseMcpBuiltinVirtualId, useBuiltinCapabilities, } from "./use-builtin-capabilities.js";
14
16
  import { useOrg } from "../org/hooks.js";
15
17
  import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "../components/ui/tooltip.js";
16
18
  import { Popover, PopoverContent, PopoverTrigger, } from "../components/ui/popover.js";
@@ -456,6 +458,31 @@ Create skill files under \`skills/<name>/SKILL.md\` to give the agent specialize
456
458
 
457
459
  Workspace resources are for files users intentionally add, edit, or manage. Agents may create hidden \`agent_scratch\` resources for temporary working notes, scripts, or intermediate results; only promote those files into workspace visibility when a user explicitly asks to keep them.
458
460
  `;
461
+ const WORKSPACE_RESOURCE_OWNER = "__workspace__";
462
+ const SHARED_RESOURCE_OWNER = "__shared__";
463
+ function EffectiveContextPanel({ context, isLoading, }) {
464
+ if (isLoading && !context) {
465
+ return (_jsx("div", { className: "border-b border-border bg-muted/20 px-3 py-2", children: _jsx("div", { className: "h-3 w-40 animate-pulse rounded bg-muted-foreground/10" }) }));
466
+ }
467
+ if (!context)
468
+ return null;
469
+ return (_jsxs("div", { className: "border-b border-border bg-muted/20 px-3 py-2", children: [_jsxs("div", { className: "mb-1 flex items-center justify-between gap-2", children: [_jsx("span", { className: "text-[11px] font-medium uppercase tracking-wide text-muted-foreground/70", children: "Effective context" }), _jsxs("span", { className: "truncate text-[11px] text-muted-foreground/60", children: ["Active: ", context.effectiveScope ?? "none"] })] }), _jsx("div", { className: "grid gap-1 sm:grid-cols-3", children: context.layers.map((layer) => {
470
+ const state = layer.effective
471
+ ? "Active"
472
+ : layer.overridden
473
+ ? "Overridden"
474
+ : layer.exists
475
+ ? "Available"
476
+ : "No file";
477
+ return (_jsxs("div", { className: cn("rounded-md border px-2 py-1.5", layer.effective
478
+ ? "border-foreground/20 bg-background"
479
+ : "border-border/70 bg-background/50"), children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsx("span", { className: "truncate text-[11px] font-medium text-foreground", children: layer.label }), _jsx("span", { className: cn("shrink-0 text-[10px]", layer.effective
480
+ ? "text-foreground"
481
+ : layer.overridden
482
+ ? "text-muted-foreground"
483
+ : "text-muted-foreground/60"), children: state })] }), _jsx("div", { className: "mt-0.5 truncate text-[10px] text-muted-foreground/60", children: layer.resource?.path ?? context.path })] }, layer.scope));
484
+ }) })] }));
485
+ }
459
486
  // BuilderBrowserCard moved to settings/BrowserSection.tsx
460
487
  export function ResourcesPanel() {
461
488
  const { data: org } = useOrg();
@@ -487,7 +514,9 @@ export function ResourcesPanel() {
487
514
  const personalTreeQuery = useResourceTree("personal", {
488
515
  includeAgentScratch: showAgentScratch,
489
516
  });
517
+ const workspaceTreeQuery = useResourceTree("workspace");
490
518
  const mcpServersQuery = useMcpServers();
519
+ const builtinCapabilitiesQuery = useBuiltinCapabilities();
491
520
  const createMcpServer = useCreateMcpServer();
492
521
  const deleteMcpServer = useDeleteMcpServer();
493
522
  // Merge MCP servers into each scope's tree as a virtual `mcp-servers/`
@@ -495,8 +524,13 @@ export function ResourcesPanel() {
495
524
  // table — the virtual ids carry the `mcp:<scope>:<id>` prefix that
496
525
  // `handleSelect` and `handleDelete` below recognize to route back to
497
526
  // the MCP endpoints.
498
- const personalTree = withAgentScratchFolder(withMcpServersFolder(personalTreeQuery.data ?? [], mcpServersQuery.data?.user ?? []), { show: showAgentScratch });
499
- const sharedTree = withAgentScratchFolder(withMcpServersFolder(sharedTreeQuery.data ?? [], mcpServersQuery.data?.org ?? []), { show: showAgentScratch });
527
+ const personalTree = withAgentScratchFolder(withMcpServersFolder(personalTreeQuery.data ?? [], mcpServersQuery.data?.user ?? [], {
528
+ builtins: (builtinCapabilitiesQuery.data?.capabilities ?? []).map((capability) => ({ capability, scope: "user" })),
529
+ }), { show: showAgentScratch });
530
+ const sharedTree = withAgentScratchFolder(withMcpServersFolder(sharedTreeQuery.data ?? [], mcpServersQuery.data?.org ?? [], {
531
+ builtins: (builtinCapabilitiesQuery.data?.capabilities ?? []).map((capability) => ({ capability, scope: "org" })),
532
+ }), { show: showAgentScratch });
533
+ const workspaceTree = workspaceTreeQuery.data ?? [];
500
534
  const orgRole = mcpServersQuery.data?.role ?? org?.role ?? null;
501
535
  const hasOrgForMcp = !!(mcpServersQuery.data?.orgId ?? org?.orgId);
502
536
  const canCreateOrgMcp = hasOrgForMcp && (orgRole === "owner" || orgRole === "admin");
@@ -514,6 +548,15 @@ export function ResourcesPanel() {
514
548
  : (mcpServersQuery.data?.org ?? []);
515
549
  return list.find((s) => s.id === parsed.serverId) ?? null;
516
550
  }, [selectedResourceId, mcpServersQuery.data]);
551
+ const selectedBuiltinCapability = React.useMemo(() => {
552
+ const parsed = selectedResourceId
553
+ ? parseMcpBuiltinVirtualId(selectedResourceId)
554
+ : null;
555
+ if (!parsed)
556
+ return null;
557
+ const capability = (builtinCapabilitiesQuery.data?.capabilities ?? []).find((item) => item.id === parsed.capabilityId);
558
+ return capability ? { capability, scope: parsed.scope } : null;
559
+ }, [selectedResourceId, builtinCapabilitiesQuery.data]);
517
560
  // Sync activeScope once the org role arrives (canEditOrg is resolved async).
518
561
  useEffect(() => {
519
562
  if (!canEditOrg && activeScope === "shared") {
@@ -522,13 +565,19 @@ export function ResourcesPanel() {
522
565
  }, [canEditOrg, activeScope]);
523
566
  // Virtual MCP ids aren't in the resources store — skip the fetch so
524
567
  // useResource doesn't 404-flash.
525
- const resourceQuery = useResource(selectedResourceId && !parseMcpVirtualId(selectedResourceId)
568
+ const resourceQuery = useResource(selectedResourceId &&
569
+ !parseMcpVirtualId(selectedResourceId) &&
570
+ !parseMcpBuiltinVirtualId(selectedResourceId)
526
571
  ? selectedResourceId
527
572
  : null);
573
+ const effectiveContextQuery = useEffectiveResourceContext(resourceQuery.data?.path ?? null);
528
574
  const createResource = useCreateResource();
529
575
  const updateResource = useUpdateResource();
530
576
  const deleteResource = useDeleteResource();
531
577
  const uploadResource = useUploadResource();
578
+ const selectedResourceReadOnly = !!resourceQuery.data &&
579
+ (resourceQuery.data.owner === WORKSPACE_RESOURCE_OWNER ||
580
+ (resourceQuery.data.owner === SHARED_RESOURCE_OWNER && !canEditOrg));
532
581
  // Ensure AGENTS.md exists in the organization scope when the panel opens.
533
582
  // The server also seeds it on table init; this is a safety net. Only attempt
534
583
  // for users who can write to organization resources — non-admins would just
@@ -551,7 +600,6 @@ export function ResourcesPanel() {
551
600
  }, [canEditOrg]);
552
601
  // Are we viewing a file (editor) or the tree?
553
602
  const isEditing = selectedResourceId !== null;
554
- const isMcpSelected = !!selectedMcpServer;
555
603
  const handleSelect = useCallback((resource) => {
556
604
  setSelectedResourceId(resource.id);
557
605
  }, []);
@@ -595,6 +643,8 @@ export function ResourcesPanel() {
595
643
  });
596
644
  return;
597
645
  }
646
+ if (parseMcpBuiltinVirtualId(id))
647
+ return;
598
648
  deleteResource.mutate(id);
599
649
  if (selectedResourceId === id) {
600
650
  setSelectedResourceId(null);
@@ -611,8 +661,10 @@ export function ResourcesPanel() {
611
661
  const handleSave = useCallback((content) => {
612
662
  if (!selectedResourceId)
613
663
  return;
664
+ if (selectedResourceReadOnly)
665
+ return;
614
666
  updateResource.mutate({ id: selectedResourceId, content });
615
- }, [updateResource, selectedResourceId]);
667
+ }, [updateResource, selectedResourceId, selectedResourceReadOnly]);
616
668
  const handleUploadFiles = useCallback((files) => {
617
669
  for (let i = 0; i < files.length; i++) {
618
670
  const file = files[i];
@@ -640,18 +692,20 @@ export function ResourcesPanel() {
640
692
  handleUploadFiles(e.dataTransfer.files);
641
693
  }
642
694
  }, [handleUploadFiles]);
643
- return (_jsxs("div", { className: cn("relative flex h-full flex-col min-h-0", dragOver && "ring-2 ring-inset ring-accent"), onDragOver: handleDragOver, onDragLeave: handleDragLeave, onDrop: handleDrop, children: [isEditing ? (_jsxs("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.5 min-w-0", children: [_jsx(TooltipProvider, { delayDuration: 200, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { onClick: handleBack, "aria-label": "Back to workspace", className: "flex h-6 w-6 shrink-0 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50", children: _jsx(IconArrowLeft, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: "Back to workspace" })] }) }), selectedMcpServer ? (_jsx(PathBreadcrumb, { path: `mcp-servers/${selectedMcpServer.name}.json` })) : resourceQuery.data ? (_jsx(PathBreadcrumb, { path: resourceQuery.data.path })) : null] }), _jsxs("div", { className: "flex items-center gap-1 shrink-0", children: [!selectedMcpServer && resourceQuery.data && (_jsx("span", { "aria-live": "polite", className: "mr-1 w-16 text-right text-[11px] text-muted-foreground/60", children: saveStatus === "saving"
644
- ? "Saving..."
645
- : saveStatus === "saved"
646
- ? "Saved"
647
- : "" })), !selectedMcpServer &&
695
+ return (_jsxs("div", { className: cn("relative flex h-full flex-col min-h-0", dragOver && "ring-2 ring-inset ring-accent"), onDragOver: handleDragOver, onDragLeave: handleDragLeave, onDrop: handleDrop, children: [isEditing ? (_jsxs("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.5 min-w-0", children: [_jsx(TooltipProvider, { delayDuration: 200, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { onClick: handleBack, "aria-label": "Back to workspace", className: "flex h-6 w-6 shrink-0 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50", children: _jsx(IconArrowLeft, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: "Back to workspace" })] }) }), selectedMcpServer ? (_jsx(PathBreadcrumb, { path: `mcp-servers/${selectedMcpServer.name}.json` })) : selectedBuiltinCapability ? (_jsx(PathBreadcrumb, { path: `mcp-servers/${selectedBuiltinCapability.capability.name}.json` })) : resourceQuery.data ? (_jsx(PathBreadcrumb, { path: resourceQuery.data.path })) : null] }), _jsxs("div", { className: "flex items-center gap-1 shrink-0", children: [!selectedMcpServer && resourceQuery.data && (_jsx("span", { "aria-live": "polite", className: "mr-1 w-16 text-right text-[11px] text-muted-foreground/60", children: selectedResourceReadOnly
696
+ ? "Read only"
697
+ : saveStatus === "saving"
698
+ ? "Saving..."
699
+ : saveStatus === "saved"
700
+ ? "Saved"
701
+ : "" })), !selectedMcpServer &&
648
702
  resourceQuery.data &&
649
703
  (resourceQuery.data.mimeType === "text/markdown" ||
650
704
  resourceQuery.data.path.endsWith(".md")) && (_jsx("div", { className: "flex items-center gap-0.5 mr-1", children: _jsxs(TooltipProvider, { delayDuration: 200, children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { onClick: () => setEditorView("visual"), "aria-label": "Visual editor", className: cn("flex h-6 w-6 items-center justify-center rounded-md", editorView === "visual"
651
705
  ? "bg-accent text-foreground"
652
706
  : "text-muted-foreground hover:text-foreground hover:bg-accent/50"), children: _jsx(IconEye, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: "Visual editor" })] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { onClick: () => setEditorView("code"), "aria-label": "Code editor", className: cn("flex h-6 w-6 items-center justify-center rounded-md", editorView === "code"
653
707
  ? "bg-accent text-foreground"
654
- : "text-muted-foreground hover:text-foreground hover:bg-accent/50"), children: _jsx(IconCode, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: "Code editor" })] })] }) })), _jsx(TooltipProvider, { delayDuration: 200, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { onClick: () => {
708
+ : "text-muted-foreground hover:text-foreground hover:bg-accent/50"), children: _jsx(IconCode, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: "Code editor" })] })] }) })), !selectedBuiltinCapability && !selectedResourceReadOnly && (_jsx(TooltipProvider, { delayDuration: 200, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { onClick: () => {
655
709
  if (!selectedResourceId)
656
710
  return;
657
711
  if (toolbarDeleteConfirmId === selectedResourceId) {
@@ -666,7 +720,7 @@ export function ResourcesPanel() {
666
720
  : "Delete resource", className: cn("flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-destructive hover:bg-accent/50", toolbarDeleteConfirmId === selectedResourceId &&
667
721
  "bg-destructive/10 text-destructive"), children: _jsx(IconTrash, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: toolbarDeleteConfirmId === selectedResourceId
668
722
  ? "Click again to delete"
669
- : "Delete resource" })] }) })] })] })) : (_jsxs("div", { className: "absolute top-1 right-1 z-10 flex items-center gap-1", children: [_jsx(CreateMenu, { scope: activeScope, onCreateFile: handleCreateFromToolbar, onCreateResource: handleCreateResourceFromToolbar, onCreateMcpServer: handleCreateMcpServer, canCreateOrgMcp: canCreateOrgMcp, hasOrg: hasOrgForMcp }), _jsx(TooltipProvider, { delayDuration: 200, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { onClick: () => fileInputRef.current?.click(), "aria-label": "Upload file", className: "flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50", children: _jsx(IconUpload, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: "Upload file" })] }) }), _jsx(TooltipProvider, { delayDuration: 200, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", onClick: () => setShowAgentScratch((value) => !value), "aria-label": showAgentScratch
723
+ : "Delete resource" })] }) }))] })] })) : (_jsxs("div", { className: "absolute top-1 right-1 z-10 flex items-center gap-1", children: [_jsx(CreateMenu, { scope: activeScope, onCreateFile: handleCreateFromToolbar, onCreateResource: handleCreateResourceFromToolbar, onCreateMcpServer: handleCreateMcpServer, canCreateOrgMcp: canCreateOrgMcp, hasOrg: hasOrgForMcp }), _jsx(TooltipProvider, { delayDuration: 200, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { onClick: () => fileInputRef.current?.click(), "aria-label": "Upload file", className: "flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50", children: _jsx(IconUpload, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: "Upload file" })] }) }), _jsx(TooltipProvider, { delayDuration: 200, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", onClick: () => setShowAgentScratch((value) => !value), "aria-label": showAgentScratch
670
724
  ? "Hide agent scratch files"
671
725
  : "Show agent scratch files", className: cn("flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50", showAgentScratch && "bg-accent/50 text-foreground"), children: _jsx(IconEye, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: showAgentScratch
672
726
  ? "Hide agent scratch files"
@@ -675,19 +729,25 @@ export function ResourcesPanel() {
675
729
  handleUploadFiles(e.target.files);
676
730
  e.target.value = "";
677
731
  }
678
- } })] })), _jsx("div", { className: "flex flex-1 flex-col min-h-0 overflow-hidden", children: isEditing ? (selectedMcpServer ? (_jsx("div", { className: "flex-1 min-h-0 overflow-hidden", children: _jsx(McpServerDetail, { server: selectedMcpServer }) })) : selectedResourceId && resourceQuery.data ? (_jsx("div", { className: "flex-1 min-h-0 overflow-hidden", children: _jsx(ResourceEditor, { resource: resourceQuery.data, onSave: handleSave, view: editorView, onViewChange: setEditorView, onSaveStatusChange: setSaveStatus, hideToolbar: true }) })) : resourceQuery.isError ? (_jsx("div", { className: "flex flex-1 items-center justify-center text-[12px] text-destructive/70", children: "Failed to load resource" })) : (_jsx("div", { className: "flex flex-1 items-center justify-center text-[12px] text-muted-foreground/50", children: "Loading..." }))) : (_jsxs("div", { className: "flex-1 min-h-0 overflow-y-auto", children: [!personalTreeQuery.isLoading &&
732
+ } })] })), _jsx("div", { className: "flex flex-1 flex-col min-h-0 overflow-hidden", children: isEditing ? (selectedMcpServer ? (_jsx("div", { className: "flex-1 min-h-0 overflow-hidden", children: _jsx(McpServerDetail, { server: selectedMcpServer }) })) : selectedBuiltinCapability ? (_jsx("div", { className: "flex-1 min-h-0 overflow-hidden", children: _jsx(BuiltinCapabilityDetail, { capability: selectedBuiltinCapability.capability, scope: selectedBuiltinCapability.scope, canEditOrg: canEditOrg }) })) : selectedResourceId && resourceQuery.data ? (_jsxs("div", { className: "flex flex-1 min-h-0 flex-col overflow-hidden", children: [_jsx(EffectiveContextPanel, { context: effectiveContextQuery.data, isLoading: effectiveContextQuery.isLoading }), _jsx(ResourceEditor, { resource: resourceQuery.data, onSave: handleSave, view: editorView, onViewChange: setEditorView, onSaveStatusChange: setSaveStatus, hideToolbar: true, readOnly: selectedResourceReadOnly })] })) : resourceQuery.isError ? (_jsx("div", { className: "flex flex-1 items-center justify-center text-[12px] text-destructive/70", children: "Failed to load resource" })) : (_jsx("div", { className: "flex flex-1 items-center justify-center text-[12px] text-muted-foreground/50", children: "Loading..." }))) : (_jsxs("div", { className: "flex-1 min-h-0 overflow-y-auto", children: [!personalTreeQuery.isLoading &&
679
733
  !sharedTreeQuery.isLoading &&
734
+ !workspaceTreeQuery.isLoading &&
735
+ workspaceTree.length === 0 &&
680
736
  (personalTreeQuery.data ?? []).length === 0 &&
681
- (sharedTreeQuery.data ?? []).length === 0 && (_jsxs("div", { className: "mx-2 mt-2 rounded-md border border-border bg-muted/30 p-2.5 text-[11px] text-muted-foreground", children: [_jsx("p", { className: "mb-1 font-medium text-foreground", children: "This is your Workspace" }), _jsx("p", { className: "mb-1.5 leading-snug", children: "Files the agent reads and writes \u2014 notes, instructions, skills, custom agents, scheduled jobs. They live in the database, so they persist across sessions and deploys." }), _jsxs("p", { className: "mb-2 leading-snug", children: [_jsx("span", { className: "text-foreground", children: "Personal" }), " is just for you.", " ", _jsx("span", { className: "text-foreground", children: "Organization" }), " is visible to everyone in your organization", org?.orgId ? " — only admins can edit." : "."] }), _jsxs("a", { href: WORKSPACE_DOCS_URL, target: "_blank", rel: "noopener noreferrer", className: "inline-flex items-center gap-1 text-foreground hover:underline", children: ["Learn more", _jsx(IconExternalLink, { className: "h-3 w-3" })] })] })), _jsx(ResourceTree, { tree: personalTree, isLoading: personalTreeQuery.isLoading, deletingId: deleteResource.isPending
737
+ (sharedTreeQuery.data ?? []).length === 0 && (_jsxs("div", { className: "mx-2 mt-2 rounded-md border border-border bg-muted/30 p-2.5 text-[11px] text-muted-foreground", children: [_jsx("p", { className: "mb-1 font-medium text-foreground", children: "This is your Workspace" }), _jsx("p", { className: "mb-1.5 leading-snug", children: "Files the agent reads and writes \u2014 notes, instructions, skills, custom agents, scheduled jobs, and inherited workspace context. They live in the database, so they persist across sessions and deploys." }), _jsxs("p", { className: "mb-2 leading-snug", children: [_jsx("span", { className: "text-foreground", children: "Workspace" }), " is inherited from Dispatch.", " ", _jsx("span", { className: "text-foreground", children: "Organization" }), " is visible to everyone in your organization", org?.orgId ? " — only admins can edit. " : ". ", _jsx("span", { className: "text-foreground", children: "Personal" }), " is just for you."] }), _jsxs("a", { href: WORKSPACE_DOCS_URL, target: "_blank", rel: "noopener noreferrer", className: "inline-flex items-center gap-1 text-foreground hover:underline", children: ["Learn more", _jsx(IconExternalLink, { className: "h-3 w-3" })] })] })), _jsx(ResourceTree, { tree: workspaceTree, isLoading: workspaceTreeQuery.isLoading, deletingId: deleteResource.isPending
682
738
  ? deleteResource.variables
683
739
  : deleteMcpServer.isPending
684
740
  ? `mcp:${deleteMcpServer.variables.scope}:${deleteMcpServer.variables.id}`
685
- : null, selectedId: selectedResourceId, onSelect: handleSelect, onCreateFile: (parentPath, name) => handleCreateFile(parentPath, name, "personal"), onCreateFolder: (parentPath, name) => handleCreateFolder(parentPath, name, "personal"), onDelete: handleDelete, onRename: handleRename, onDrop: handleUploadFiles, title: "Personal", titleTooltip: "Files visible only to you" }), _jsx(ResourceTree, { tree: sharedTree, isLoading: sharedTreeQuery.isLoading, deletingId: deleteResource.isPending
741
+ : null, selectedId: selectedResourceId, onSelect: handleSelect, onCreateFile: () => { }, onCreateFolder: () => { }, onDelete: () => { }, onRename: () => { }, onDrop: () => { }, title: "Workspace", titleTooltip: "Global resources inherited from Dispatch by every app. Read-only here.", readOnly: true, headingHint: "Inherited" }), _jsx(ResourceTree, { tree: sharedTree, isLoading: sharedTreeQuery.isLoading, deletingId: deleteResource.isPending
686
742
  ? deleteResource.variables
687
743
  : deleteMcpServer.isPending
688
744
  ? `mcp:${deleteMcpServer.variables.scope}:${deleteMcpServer.variables.id}`
689
745
  : null, selectedId: selectedResourceId, onSelect: handleSelect, onCreateFile: (parentPath, name) => handleCreateFile(parentPath, name, "shared"), onCreateFolder: (parentPath, name) => handleCreateFolder(parentPath, name, "shared"), onDelete: handleDelete, onRename: handleRename, onDrop: handleUploadFiles, title: "Organization", titleTooltip: canEditOrg
690
746
  ? "Files visible to everyone in your organization"
691
- : "Files visible to everyone in your organization. Read-only — only admins can edit.", readOnly: !canEditOrg, headingHint: !canEditOrg ? "Read only" : undefined })] })) })] }));
747
+ : "Files visible to everyone in your organization. Read-only — only admins can edit.", readOnly: !canEditOrg, headingHint: !canEditOrg ? "Read only" : undefined }), _jsx(ResourceTree, { tree: personalTree, isLoading: personalTreeQuery.isLoading, deletingId: deleteResource.isPending
748
+ ? deleteResource.variables
749
+ : deleteMcpServer.isPending
750
+ ? `mcp:${deleteMcpServer.variables.scope}:${deleteMcpServer.variables.id}`
751
+ : null, selectedId: selectedResourceId, onSelect: handleSelect, onCreateFile: (parentPath, name) => handleCreateFile(parentPath, name, "personal"), onCreateFolder: (parentPath, name) => handleCreateFolder(parentPath, name, "personal"), onDelete: handleDelete, onRename: handleRename, onDrop: handleUploadFiles, title: "Personal", titleTooltip: "Files visible only to you" })] })) })] }));
692
752
  }
693
753
  //# sourceMappingURL=ResourcesPanel.js.map