@agent-native/core 0.15.12 → 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 +27 -3
  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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentNativeExtensionFrame.js","sourceRoot":"","sources":["../../../src/client/extensions/AgentNativeExtensionFrame.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type IframeHTMLAttributes,\n} from \"react\";\nimport {\n createAgentNativeHostBridge,\n type AgentNativeClientAction,\n type AgentNativeClientActions,\n type AgentNativeHostAuth,\n type AgentNativeHostBridge,\n type AgentNativeHostBridgeEvent,\n type AgentNativeHostCommandHandler,\n type AgentNativeHostCommandHandlers,\n type AgentNativeHostContext,\n type AgentNativeHostContextGetter,\n type AgentNativeHostSession,\n} from \"../host-bridge.js\";\nimport {\n AGENT_NATIVE_EXTENSION_MESSAGE_TYPES,\n buildAgentNativeExtensionHtml,\n createLocalStorageAgentNativeExtensionStorage,\n getAgentNativeExtensionManifest,\n isAgentNativeExtensionAllowedInSlot,\n normalizeAgentNativeExtensionSandbox,\n type AgentNativeExtensionDefinition,\n type AgentNativeExtensionStorage,\n type AgentNativeExtensionStorageContext,\n type AgentNativeExtensionStorageOptions,\n type AgentNativeExtensionStorageScope,\n} from \"./portable-extension.js\";\n\nexport type AgentNativeExtensionPermissionList =\n | readonly string[]\n | ((\n extension: AgentNativeExtensionDefinition,\n ) => readonly string[] | undefined)\n | undefined;\n\nexport type AgentNativeExtensionStorageScopeList =\n | readonly AgentNativeExtensionStorageScope[]\n | ((\n extension: AgentNativeExtensionDefinition,\n ) => readonly AgentNativeExtensionStorageScope[] | undefined)\n | undefined;\n\nexport interface AgentNativeExtensionFrameProps extends Omit<\n IframeHTMLAttributes<HTMLIFrameElement>,\n \"src\" | \"srcDoc\"\n> {\n extension: AgentNativeExtensionDefinition;\n /** Stable slot identifier, for example `customer-detail.sidebar`. */\n slotId?: string;\n /** Context pushed into `window.slotContext` and merged into host context. */\n context?: Record<string, unknown> | null;\n /** Live actions exposed to the extension through `appAction()` and `agentNative.action()`. */\n actions?: AgentNativeClientActions;\n /** Page/app context exposed through `agentNative.context()`. */\n getContext?: AgentNativeHostContextGetter;\n /** Host commands exposed through `agentNative.command()` and `agentNative.refresh()`. */\n commands?: AgentNativeHostCommandHandlers;\n /** Host-enforced action allowlist. Defaults to extension manifest requestedActions. */\n allowedActions?: AgentNativeExtensionPermissionList;\n /** Host-enforced command allowlist. Defaults to extension manifest requestedCommands. */\n allowedCommands?: AgentNativeExtensionPermissionList;\n auth?: AgentNativeHostAuth;\n session?: string | Partial<AgentNativeHostSession>;\n /** Storage adapter used by `extensionData.*`. Defaults to browser localStorage. */\n storage?: AgentNativeExtensionStorage | false;\n /** Host-enforced storage scope allowlist. Defaults to extension manifest storageScopes. */\n allowedStorageScopes?: AgentNativeExtensionStorageScopeList;\n storageNamespace?: string;\n storageContext?: Omit<\n AgentNativeExtensionStorageContext,\n \"extensionId\" | \"slotId\"\n >;\n themeCss?: string;\n isDark?: boolean;\n autoHeight?: boolean;\n initialHeight?: number;\n onBridgeEvent?: (event: AgentNativeHostBridgeEvent) => void;\n onBridgeReady?: (bridge: AgentNativeHostBridge) => void;\n onStorageError?: (\n error: Error,\n request: AgentNativeExtensionStorageRequest,\n ) => void;\n}\n\nexport interface AgentNativeExtensionSlotProps extends Omit<\n AgentNativeExtensionFrameProps,\n \"extension\" | \"className\" | \"style\" | \"children\"\n> {\n id: string;\n extensions: AgentNativeExtensionDefinition[];\n className?: string;\n extensionClassName?: string;\n extensionStyle?: CSSProperties;\n empty?: React.ReactNode;\n showEmptyAffordance?: boolean;\n}\n\ninterface AgentNativeExtensionStorageRequest {\n requestId: string;\n op: \"list\" | \"get\" | \"set\" | \"remove\";\n collection: string;\n id?: string;\n data?: unknown;\n options?: AgentNativeExtensionStorageOptions;\n}\n\nconst defaultFrameStyle: CSSProperties = {\n border: 0,\n display: \"block\",\n width: \"100%\",\n};\n\nconst BUILT_IN_COMMAND_NAMES = [\n \"navigate\",\n \"refreshData\",\n \"refresh-data\",\n \"remountView\",\n \"remount-view\",\n \"hardReload\",\n \"hard-reload\",\n \"openResource\",\n \"open-resource\",\n \"requestApproval\",\n \"request-approval\",\n];\n\nconst COMMAND_ALIASES: Record<string, readonly string[]> = {\n refreshData: [\"refreshData\", \"refresh-data\"],\n \"refresh-data\": [\"refreshData\", \"refresh-data\"],\n remountView: [\"remountView\", \"remount-view\"],\n \"remount-view\": [\"remountView\", \"remount-view\"],\n hardReload: [\"hardReload\", \"hard-reload\"],\n \"hard-reload\": [\"hardReload\", \"hard-reload\"],\n openResource: [\"openResource\", \"open-resource\"],\n \"open-resource\": [\"openResource\", \"open-resource\"],\n requestApproval: [\"requestApproval\", \"request-approval\"],\n \"request-approval\": [\"requestApproval\", \"request-approval\"],\n};\n\nfunction setForwardedRef<T>(ref: React.ForwardedRef<T>, value: T | null) {\n if (typeof ref === \"function\") ref(value);\n else if (ref) ref.current = value;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction safeError(error: unknown): Error {\n return error instanceof Error ? error : new Error(String(error));\n}\n\nfunction safeStringify(value: unknown): string {\n try {\n return JSON.stringify(value ?? {});\n } catch {\n return \"{}\";\n }\n}\n\nfunction resolvePermissionList(\n value: AgentNativeExtensionPermissionList,\n extension: AgentNativeExtensionDefinition,\n fallback: readonly string[] | undefined,\n): readonly string[] | undefined {\n if (typeof value === \"function\") return value(extension);\n if (Array.isArray(value)) return value;\n return fallback;\n}\n\nfunction resolveStorageScopeList(\n value: AgentNativeExtensionStorageScopeList,\n extension: AgentNativeExtensionDefinition,\n fallback: readonly AgentNativeExtensionStorageScope[] | undefined,\n): readonly AgentNativeExtensionStorageScope[] | undefined {\n if (typeof value === \"function\") return value(extension);\n if (Array.isArray(value)) return value;\n return fallback;\n}\n\nfunction toPermissionSet(\n value: readonly string[] | undefined,\n): Set<string> | null {\n return value ? new Set(value) : null;\n}\n\nfunction commandPermissionSet(\n value: readonly string[] | undefined,\n): Set<string> | null {\n if (!value) return null;\n const expanded = new Set<string>();\n for (const command of value) {\n expanded.add(command);\n for (const alias of COMMAND_ALIASES[command] ?? []) expanded.add(alias);\n }\n return expanded;\n}\n\nasync function resolveActions(\n actions: AgentNativeClientActions | undefined,\n): Promise<AgentNativeClientAction[]> {\n const resolved = typeof actions === \"function\" ? await actions() : actions;\n return Array.isArray(resolved) ? resolved : [];\n}\n\nfunction scopeExtensionActions(\n actions: AgentNativeClientActions | undefined,\n allowedNames: Set<string> | null,\n): AgentNativeClientActions | undefined {\n if (!actions || !allowedNames) return actions;\n return async () =>\n (await resolveActions(actions)).filter((action) =>\n allowedNames.has(action.name),\n );\n}\n\nfunction blockedCommand(command: string): AgentNativeHostCommandHandler {\n return () => {\n throw new Error(\n `Extension is not allowed to call host command \"${command}\"`,\n );\n };\n}\n\nfunction scopeExtensionCommands(\n commands: AgentNativeHostCommandHandlers | undefined,\n allowedNames: Set<string> | null,\n): AgentNativeHostCommandHandlers | undefined {\n if (!allowedNames) return commands;\n\n const scoped: AgentNativeHostCommandHandlers = {};\n for (const command of BUILT_IN_COMMAND_NAMES) {\n if (!allowedNames.has(command)) scoped[command] = blockedCommand(command);\n }\n\n for (const [command, handler] of Object.entries(commands ?? {})) {\n scoped[command] = allowedNames.has(command)\n ? handler\n : blockedCommand(command);\n }\n\n return scoped;\n}\n\nfunction normalizeStorageRequest(\n value: unknown,\n): AgentNativeExtensionStorageRequest | null {\n if (!isRecord(value)) return null;\n const requestId = typeof value.requestId === \"string\" ? value.requestId : \"\";\n const op =\n value.op === \"list\" ||\n value.op === \"get\" ||\n value.op === \"set\" ||\n value.op === \"remove\"\n ? value.op\n : null;\n const collection =\n typeof value.collection === \"string\" ? value.collection.trim() : \"\";\n const id = typeof value.id === \"string\" ? value.id : undefined;\n const options = isRecord(value.options)\n ? (value.options as AgentNativeExtensionStorageOptions)\n : undefined;\n\n if (!requestId || !op || !collection) return null;\n if ((op === \"get\" || op === \"set\" || op === \"remove\") && !id) {\n return null;\n }\n\n return {\n requestId,\n op,\n collection,\n id,\n data: value.data,\n options,\n };\n}\n\nfunction mergeExtensionContext(\n base: AgentNativeHostContext | undefined,\n extension: AgentNativeExtensionDefinition,\n slotId: string | undefined,\n slotContext: Record<string, unknown> | null | undefined,\n): AgentNativeHostContext {\n return {\n ...(base ?? {}),\n extension: {\n id: extension.id,\n name: extension.name,\n description: extension.description,\n },\n slot: slotId\n ? {\n id: slotId,\n context: slotContext ?? {},\n }\n : undefined,\n data: {\n ...(base?.data ?? {}),\n extension: {\n id: extension.id,\n name: extension.name,\n },\n slotContext: slotContext ?? {},\n },\n };\n}\n\nexport const AgentNativeExtensionFrame = forwardRef<\n HTMLIFrameElement,\n AgentNativeExtensionFrameProps\n>(function AgentNativeExtensionFrame(\n {\n extension,\n slotId,\n context,\n actions,\n getContext,\n commands,\n allowedActions,\n allowedCommands,\n auth,\n session,\n storage,\n allowedStorageScopes,\n storageNamespace = \"default\",\n storageContext,\n themeCss,\n isDark,\n autoHeight = true,\n initialHeight = 120,\n onBridgeEvent,\n onBridgeReady,\n onStorageError,\n title,\n sandbox,\n allow = \"clipboard-read; clipboard-write\",\n referrerPolicy = \"no-referrer\",\n style,\n onLoad,\n ...iframeProps\n },\n forwardedRef,\n) {\n const iframeRef = useRef<HTMLIFrameElement | null>(null);\n const bridgeRef = useRef<AgentNativeHostBridge | null>(null);\n const [height, setHeight] = useState(initialHeight);\n const localStorageAdapter = useMemo(\n () => createLocalStorageAgentNativeExtensionStorage(storageNamespace),\n [storageNamespace],\n );\n const storageAdapter = storage === undefined ? localStorageAdapter : storage;\n const contextJson = safeStringify(context);\n const sandboxValue = useMemo(\n () => normalizeAgentNativeExtensionSandbox(sandbox),\n [sandbox],\n );\n const sessionValue =\n session ?? `extension:${extension.id}:${slotId ?? \"standalone\"}`;\n const manifest = useMemo(\n () => getAgentNativeExtensionManifest(extension),\n [extension],\n );\n const actionAllowlist = useMemo(\n () =>\n toPermissionSet(\n resolvePermissionList(\n allowedActions,\n extension,\n manifest.requestedActions,\n ),\n ),\n [allowedActions, extension, manifest.requestedActions],\n );\n const commandAllowlist = useMemo(\n () =>\n commandPermissionSet(\n resolvePermissionList(\n allowedCommands,\n extension,\n manifest.requestedCommands,\n ),\n ),\n [allowedCommands, extension, manifest.requestedCommands],\n );\n const storageScopeAllowlist = useMemo(() => {\n const scopes = resolveStorageScopeList(\n allowedStorageScopes,\n extension,\n manifest.storageScopes,\n );\n return scopes ? new Set(scopes) : null;\n }, [allowedStorageScopes, extension, manifest.storageScopes]);\n const scopedActions = useMemo(\n () => scopeExtensionActions(actions, actionAllowlist),\n [actions, actionAllowlist],\n );\n const scopedCommands = useMemo(\n () => scopeExtensionCommands(commands, commandAllowlist),\n [commands, commandAllowlist],\n );\n\n const getMergedContext = useCallback(async () => {\n const base = getContext ? await getContext() : {};\n return mergeExtensionContext(base, extension, slotId, context);\n }, [contextJson, extension, getContext, slotId]);\n\n const srcDoc = useMemo(\n () =>\n buildAgentNativeExtensionHtml({\n extensionId: extension.id,\n title: title ?? extension.name,\n content: extension.content,\n slotId,\n slotContext: context,\n themeCss,\n isDark,\n }),\n [\n contextJson,\n extension.content,\n extension.id,\n extension.name,\n isDark,\n slotId,\n themeCss,\n title,\n ],\n );\n\n const postSlotContext = useCallback(() => {\n iframeRef.current?.contentWindow?.postMessage(\n {\n type: AGENT_NATIVE_EXTENSION_MESSAGE_TYPES.SLOT_CONTEXT,\n extensionId: extension.id,\n slotId,\n context: context ?? {},\n },\n \"*\",\n );\n }, [contextJson, extension.id, slotId]);\n\n useEffect(() => {\n const bridge = createAgentNativeHostBridge({\n session: sessionValue,\n getContext: getMergedContext,\n commands: scopedCommands,\n actions: scopedActions,\n auth,\n onEvent: onBridgeEvent,\n targetWindow: iframeRef.current?.contentWindow ?? null,\n }).start();\n bridgeRef.current = bridge;\n onBridgeReady?.(bridge);\n return () => {\n bridge.stop();\n if (bridgeRef.current === bridge) bridgeRef.current = null;\n };\n }, [\n actions,\n auth,\n getMergedContext,\n onBridgeEvent,\n onBridgeReady,\n sessionValue,\n scopedActions,\n scopedCommands,\n ]);\n\n useEffect(() => {\n postSlotContext();\n void bridgeRef.current?.refreshContext();\n }, [postSlotContext]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n const respond = (requestId: string, payload: Record<string, unknown>) => {\n iframeRef.current?.contentWindow?.postMessage(\n {\n type: AGENT_NATIVE_EXTENSION_MESSAGE_TYPES.STORAGE_RESPONSE,\n requestId,\n ...payload,\n },\n \"*\",\n );\n };\n\n const handleStorageRequest = async (\n request: AgentNativeExtensionStorageRequest,\n ) => {\n try {\n if (!storageAdapter) {\n throw new Error(\"No extension storage adapter is registered\");\n }\n const requestContext: AgentNativeExtensionStorageContext = {\n ...(storageContext ?? {}),\n extensionId: extension.id,\n slotId,\n };\n const { op, collection, id, data, options } = request;\n const requestedScope =\n typeof options?.scope === \"string\"\n ? options.scope\n : (requestContext.scope ?? \"user\");\n if (\n storageScopeAllowlist &&\n !storageScopeAllowlist.has(requestedScope)\n ) {\n throw new Error(\n `Extension is not allowed to use storage scope \"${requestedScope}\"`,\n );\n }\n const result =\n op === \"list\"\n ? await storageAdapter.list(collection, options, requestContext)\n : op === \"get\"\n ? await storageAdapter.get(\n collection,\n id as string,\n options,\n requestContext,\n )\n : op === \"set\"\n ? await storageAdapter.set(\n collection,\n id as string,\n data,\n options,\n requestContext,\n )\n : await storageAdapter.remove(\n collection,\n id as string,\n options,\n requestContext,\n );\n respond(request.requestId, { ok: true, result });\n } catch (error) {\n const err = safeError(error);\n onStorageError?.(err, request);\n respond(request.requestId, { ok: false, error: err.message });\n }\n };\n\n function onMessage(event: MessageEvent) {\n if (event.source !== iframeRef.current?.contentWindow) return;\n const message = event.data;\n if (!isRecord(message)) return;\n\n if (message.type === AGENT_NATIVE_EXTENSION_MESSAGE_TYPES.RESIZE) {\n if (!autoHeight) return;\n const nextHeight = Number(message.height);\n if (Number.isFinite(nextHeight) && nextHeight > 0) {\n setHeight(Math.ceil(nextHeight));\n }\n return;\n }\n\n if (\n message.type !== AGENT_NATIVE_EXTENSION_MESSAGE_TYPES.STORAGE_REQUEST\n ) {\n return;\n }\n\n const request = normalizeStorageRequest(message);\n if (!request) {\n const requestId =\n typeof message.requestId === \"string\" ? message.requestId : \"\";\n if (requestId) {\n respond(requestId, {\n ok: false,\n error: \"Invalid extension storage request\",\n });\n }\n return;\n }\n\n void handleStorageRequest(request);\n }\n\n window.addEventListener(\"message\", onMessage);\n return () => window.removeEventListener(\"message\", onMessage);\n }, [\n autoHeight,\n extension.id,\n onStorageError,\n slotId,\n storageAdapter,\n storageContext,\n storageScopeAllowlist,\n ]);\n\n return (\n <iframe\n {...iframeProps}\n key={`${extension.id}:${extension.updatedAt ?? \"\"}`}\n ref={(node) => {\n iframeRef.current = node;\n setForwardedRef(forwardedRef, node);\n bridgeRef.current?.setTargetWindow(node?.contentWindow ?? null);\n }}\n title={title ?? extension.name}\n srcDoc={srcDoc}\n sandbox={sandboxValue}\n allow={allow}\n referrerPolicy={referrerPolicy}\n style={{\n ...defaultFrameStyle,\n height: autoHeight ? height : \"100%\",\n ...style,\n }}\n onLoad={(event) => {\n bridgeRef.current?.setTargetWindow(\n event.currentTarget.contentWindow ?? null,\n );\n postSlotContext();\n void bridgeRef.current?.sendInit();\n onLoad?.(event);\n }}\n />\n );\n});\n\nexport function AgentNativeExtensionSlot({\n id,\n extensions,\n context,\n actions,\n getContext,\n commands,\n allowedActions,\n allowedCommands,\n auth,\n session,\n storage,\n allowedStorageScopes,\n storageNamespace,\n storageContext,\n themeCss,\n isDark,\n autoHeight,\n initialHeight,\n onBridgeEvent,\n onBridgeReady,\n onStorageError,\n className,\n extensionClassName,\n extensionStyle,\n empty = null,\n showEmptyAffordance = false,\n ...iframeProps\n}: AgentNativeExtensionSlotProps) {\n const slotExtensions = extensions.filter((extension) =>\n isAgentNativeExtensionAllowedInSlot(extension, id),\n );\n\n if (slotExtensions.length === 0) {\n if (!showEmptyAffordance) return null;\n return <div className={className}>{empty}</div>;\n }\n\n return (\n <div className={className}>\n {slotExtensions.map((extension) => (\n <AgentNativeExtensionFrame\n {...iframeProps}\n key={extension.id}\n extension={extension}\n slotId={id}\n context={context}\n actions={actions}\n getContext={getContext}\n commands={commands}\n allowedActions={allowedActions}\n allowedCommands={allowedCommands}\n auth={auth}\n session={session}\n storage={storage}\n allowedStorageScopes={allowedStorageScopes}\n storageNamespace={storageNamespace}\n storageContext={storageContext}\n themeCss={themeCss}\n isDark={isDark}\n autoHeight={autoHeight}\n initialHeight={initialHeight}\n onBridgeEvent={onBridgeEvent}\n onBridgeReady={onBridgeReady}\n onStorageError={onStorageError}\n className={extensionClassName}\n style={extensionStyle}\n />\n ))}\n </div>\n );\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=AgentNativeExtensionFrame.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentNativeExtensionFrame.spec.d.ts","sourceRoot":"","sources":["../../../src/client/extensions/AgentNativeExtensionFrame.spec.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,68 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // @vitest-environment happy-dom
3
+ import { act } from "react";
4
+ import { createRoot } from "react-dom/client";
5
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
6
+ import { AgentNativeExtensionFrame, AgentNativeExtensionSlot, } from "./AgentNativeExtensionFrame.js";
7
+ describe("AgentNativeExtensionFrame", () => {
8
+ let container;
9
+ let root;
10
+ beforeEach(() => {
11
+ vi.stubGlobal("IS_REACT_ACT_ENVIRONMENT", true);
12
+ container = document.createElement("div");
13
+ root = createRoot(container);
14
+ });
15
+ afterEach(() => {
16
+ act(() => root.unmount());
17
+ container.remove();
18
+ vi.unstubAllGlobals();
19
+ });
20
+ it("renders extension content into a sandboxed srcdoc iframe", async () => {
21
+ await act(async () => {
22
+ root.render(_jsx(AgentNativeExtensionFrame, { extension: {
23
+ id: "ext-1",
24
+ name: "Customer panel",
25
+ content: "<section>Customer health</section>",
26
+ }, sandbox: "allow-scripts allow-same-origin allow-popups" }));
27
+ });
28
+ const iframe = container.querySelector("iframe");
29
+ expect(iframe).toBeTruthy();
30
+ expect(iframe?.getAttribute("sandbox")).toBe("allow-scripts allow-popups");
31
+ expect(iframe?.getAttribute("srcdoc")).toContain("<section>Customer health</section>");
32
+ });
33
+ it("renders one iframe per extension in a portable slot", async () => {
34
+ await act(async () => {
35
+ root.render(_jsx(AgentNativeExtensionSlot, { id: "crm.sidebar", extensions: [
36
+ { id: "ext-1", name: "One", content: "<p>One</p>" },
37
+ { id: "ext-2", name: "Two", content: "<p>Two</p>" },
38
+ ], context: { customerId: "cus_123" } }));
39
+ });
40
+ const frames = Array.from(container.querySelectorAll("iframe"));
41
+ expect(frames).toHaveLength(2);
42
+ expect(frames[0].getAttribute("srcdoc")).toContain("cus_123");
43
+ expect(frames[1].getAttribute("srcdoc")).toContain("<p>Two</p>");
44
+ });
45
+ it("does not render extensions into slots outside their manifest", async () => {
46
+ await act(async () => {
47
+ root.render(_jsx(AgentNativeExtensionSlot, { id: "crm.sidebar", extensions: [
48
+ {
49
+ id: "ext-1",
50
+ name: "Allowed",
51
+ content: "<p>Allowed</p>",
52
+ manifest: { slots: ["crm.sidebar"] },
53
+ },
54
+ {
55
+ id: "ext-2",
56
+ name: "Blocked",
57
+ content: "<p>Blocked</p>",
58
+ manifest: { slots: ["billing.sidebar"] },
59
+ },
60
+ ] }));
61
+ });
62
+ const frames = Array.from(container.querySelectorAll("iframe"));
63
+ expect(frames).toHaveLength(1);
64
+ expect(frames[0].getAttribute("srcdoc")).toContain("<p>Allowed</p>");
65
+ expect(frames[0].getAttribute("srcdoc")).not.toContain("<p>Blocked</p>");
66
+ });
67
+ });
68
+ //# sourceMappingURL=AgentNativeExtensionFrame.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentNativeExtensionFrame.spec.js","sourceRoot":"","sources":["../../../src/client/extensions/AgentNativeExtensionFrame.spec.tsx"],"names":[],"mappings":"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","sourcesContent":["// @vitest-environment happy-dom\nimport React, { act } from \"react\";\nimport { createRoot, type Root } from \"react-dom/client\";\nimport { afterEach, beforeEach, describe, expect, it, vi } from \"vitest\";\nimport {\n AgentNativeExtensionFrame,\n AgentNativeExtensionSlot,\n} from \"./AgentNativeExtensionFrame.js\";\n\ndescribe(\"AgentNativeExtensionFrame\", () => {\n let container: HTMLDivElement;\n let root: Root;\n\n beforeEach(() => {\n vi.stubGlobal(\"IS_REACT_ACT_ENVIRONMENT\", true);\n container = document.createElement(\"div\");\n root = createRoot(container);\n });\n\n afterEach(() => {\n act(() => root.unmount());\n container.remove();\n vi.unstubAllGlobals();\n });\n\n it(\"renders extension content into a sandboxed srcdoc iframe\", async () => {\n await act(async () => {\n root.render(\n <AgentNativeExtensionFrame\n extension={{\n id: \"ext-1\",\n name: \"Customer panel\",\n content: \"<section>Customer health</section>\",\n }}\n sandbox=\"allow-scripts allow-same-origin allow-popups\"\n />,\n );\n });\n\n const iframe = container.querySelector(\"iframe\");\n expect(iframe).toBeTruthy();\n expect(iframe?.getAttribute(\"sandbox\")).toBe(\"allow-scripts allow-popups\");\n expect(iframe?.getAttribute(\"srcdoc\")).toContain(\n \"<section>Customer health</section>\",\n );\n });\n\n it(\"renders one iframe per extension in a portable slot\", async () => {\n await act(async () => {\n root.render(\n <AgentNativeExtensionSlot\n id=\"crm.sidebar\"\n extensions={[\n { id: \"ext-1\", name: \"One\", content: \"<p>One</p>\" },\n { id: \"ext-2\", name: \"Two\", content: \"<p>Two</p>\" },\n ]}\n context={{ customerId: \"cus_123\" }}\n />,\n );\n });\n\n const frames = Array.from(container.querySelectorAll(\"iframe\"));\n expect(frames).toHaveLength(2);\n expect(frames[0].getAttribute(\"srcdoc\")).toContain(\"cus_123\");\n expect(frames[1].getAttribute(\"srcdoc\")).toContain(\"<p>Two</p>\");\n });\n\n it(\"does not render extensions into slots outside their manifest\", async () => {\n await act(async () => {\n root.render(\n <AgentNativeExtensionSlot\n id=\"crm.sidebar\"\n extensions={[\n {\n id: \"ext-1\",\n name: \"Allowed\",\n content: \"<p>Allowed</p>\",\n manifest: { slots: [\"crm.sidebar\"] },\n },\n {\n id: \"ext-2\",\n name: \"Blocked\",\n content: \"<p>Blocked</p>\",\n manifest: { slots: [\"billing.sidebar\"] },\n },\n ]}\n />,\n );\n });\n\n const frames = Array.from(container.querySelectorAll(\"iframe\"));\n expect(frames).toHaveLength(1);\n expect(frames[0].getAttribute(\"srcdoc\")).toContain(\"<p>Allowed</p>\");\n expect(frames[0].getAttribute(\"srcdoc\")).not.toContain(\"<p>Blocked</p>\");\n });\n});\n"]}
@@ -0,0 +1,69 @@
1
+ export declare const AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES: {
2
+ readonly REQUEST: "agentNative.extension.storage";
3
+ readonly RESPONSE: "agentNative.extension.storageResult";
4
+ readonly SLOT_CONTEXT: "agentNative.extension.slotContext";
5
+ readonly RESIZE: "agentNative.extension.resize";
6
+ };
7
+ export type AgentNativeExtensionStorageScope = "user" | "org";
8
+ export type AgentNativeExtensionStorageOperation = "list" | "get" | "set" | "remove";
9
+ export interface AgentNativeExtensionDefinition {
10
+ id: string;
11
+ name: string;
12
+ description?: string;
13
+ content: string;
14
+ updatedAt?: string;
15
+ }
16
+ export interface AgentNativeExtensionStorageRequest {
17
+ operation: AgentNativeExtensionStorageOperation;
18
+ extensionId: string;
19
+ collection: string;
20
+ id?: string;
21
+ data?: unknown;
22
+ scope?: AgentNativeExtensionStorageScope;
23
+ limit?: number;
24
+ }
25
+ export interface AgentNativeExtensionStorageContext {
26
+ extensionId: string;
27
+ slotId?: string;
28
+ slotContext?: Record<string, unknown> | null;
29
+ }
30
+ export interface AgentNativeExtensionDataRow {
31
+ id: string;
32
+ extensionId: string;
33
+ collection: string;
34
+ data: unknown;
35
+ scope: AgentNativeExtensionStorageScope;
36
+ createdAt: string;
37
+ updatedAt: string;
38
+ }
39
+ export interface AgentNativeExtensionStorage {
40
+ list(collection: string, options: {
41
+ scope?: AgentNativeExtensionStorageScope | "all";
42
+ limit?: number;
43
+ context: AgentNativeExtensionStorageContext;
44
+ }): Promise<AgentNativeExtensionDataRow[]>;
45
+ get(collection: string, id: string, options: {
46
+ scope?: AgentNativeExtensionStorageScope;
47
+ context: AgentNativeExtensionStorageContext;
48
+ }): Promise<AgentNativeExtensionDataRow | null>;
49
+ set(collection: string, id: string, data: unknown, options: {
50
+ scope?: AgentNativeExtensionStorageScope;
51
+ context: AgentNativeExtensionStorageContext;
52
+ }): Promise<AgentNativeExtensionDataRow>;
53
+ remove(collection: string, id: string, options: {
54
+ scope?: AgentNativeExtensionStorageScope;
55
+ context: AgentNativeExtensionStorageContext;
56
+ }): Promise<{
57
+ ok: true;
58
+ }>;
59
+ }
60
+ export interface BuildAgentNativeExtensionHtmlOptions {
61
+ extensionId: string;
62
+ content: string;
63
+ title?: string;
64
+ dark?: boolean;
65
+ themeCss?: string;
66
+ }
67
+ export declare function buildAgentNativeExtensionHtml(options: BuildAgentNativeExtensionHtmlOptions): string;
68
+ export declare function createLocalStorageAgentNativeExtensionStorage(namespace?: string): AgentNativeExtensionStorage;
69
+ //# sourceMappingURL=agent-native-extension-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-native-extension-runtime.d.ts","sourceRoot":"","sources":["../../../src/client/extensions/agent-native-extension-runtime.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,4CAA4C;;;;;CAK/C,CAAC;AAEX,MAAM,MAAM,gCAAgC,GAAG,MAAM,GAAG,KAAK,CAAC;AAE9D,MAAM,MAAM,oCAAoC,GAC5C,MAAM,GACN,KAAK,GACL,KAAK,GACL,QAAQ,CAAC;AAEb,MAAM,WAAW,8BAA8B;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kCAAkC;IACjD,SAAS,EAAE,oCAAoC,CAAC;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,gCAAgC,CAAC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kCAAkC;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC9C;AAED,MAAM,WAAW,2BAA2B;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,gCAAgC,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,CACF,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;QACP,KAAK,CAAC,EAAE,gCAAgC,GAAG,KAAK,CAAC;QACjD,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,kCAAkC,CAAC;KAC7C,GACA,OAAO,CAAC,2BAA2B,EAAE,CAAC,CAAC;IAC1C,GAAG,CACD,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE;QACP,KAAK,CAAC,EAAE,gCAAgC,CAAC;QACzC,OAAO,EAAE,kCAAkC,CAAC;KAC7C,GACA,OAAO,CAAC,2BAA2B,GAAG,IAAI,CAAC,CAAC;IAC/C,GAAG,CACD,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,EACb,OAAO,EAAE;QACP,KAAK,CAAC,EAAE,gCAAgC,CAAC;QACzC,OAAO,EAAE,kCAAkC,CAAC;KAC7C,GACA,OAAO,CAAC,2BAA2B,CAAC,CAAC;IACxC,MAAM,CACJ,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE;QACP,KAAK,CAAC,EAAE,gCAAgC,CAAC;QACzC,OAAO,EAAE,kCAAkC,CAAC;KAC7C,GACA,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,oCAAoC;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAmDD,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,oCAAoC,GAC5C,MAAM,CAoOR;AAyDD,wBAAgB,6CAA6C,CAC3D,SAAS,SAAY,GACpB,2BAA2B,CA6D7B"}
@@ -0,0 +1,348 @@
1
+ import { EXTENSION_IFRAME_META_CSP } from "../../extensions/html-shell.js";
2
+ export const AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES = {
3
+ REQUEST: "agentNative.extension.storage",
4
+ RESPONSE: "agentNative.extension.storageResult",
5
+ SLOT_CONTEXT: "agentNative.extension.slotContext",
6
+ RESIZE: "agentNative.extension.resize",
7
+ };
8
+ function escapeHtml(value) {
9
+ return value
10
+ .replace(/&/g, "&amp;")
11
+ .replace(/</g, "&lt;")
12
+ .replace(/>/g, "&gt;")
13
+ .replace(/"/g, "&quot;");
14
+ }
15
+ function safeJson(value) {
16
+ return JSON.stringify(value).replace(/</g, "\\u003c");
17
+ }
18
+ const defaultThemeCss = `
19
+ :root {
20
+ color-scheme: light;
21
+ --background: 0 0% 100%;
22
+ --foreground: 222.2 84% 4.9%;
23
+ --muted: 210 40% 96.1%;
24
+ --muted-foreground: 215.4 16.3% 46.9%;
25
+ --border: 214.3 31.8% 91.4%;
26
+ --primary: 221.2 83.2% 53.3%;
27
+ --primary-foreground: 210 40% 98%;
28
+ --destructive: 0 84.2% 60.2%;
29
+ --destructive-foreground: 210 40% 98%;
30
+ }
31
+ .dark {
32
+ color-scheme: dark;
33
+ --background: 222.2 84% 4.9%;
34
+ --foreground: 210 40% 98%;
35
+ --muted: 217.2 32.6% 17.5%;
36
+ --muted-foreground: 215 20.2% 65.1%;
37
+ --border: 217.2 32.6% 17.5%;
38
+ --primary: 217.2 91.2% 59.8%;
39
+ --primary-foreground: 222.2 47.4% 11.2%;
40
+ --destructive: 0 62.8% 30.6%;
41
+ --destructive-foreground: 210 40% 98%;
42
+ }
43
+ html, body {
44
+ margin: 0;
45
+ min-height: 100%;
46
+ background: transparent;
47
+ color: hsl(var(--foreground));
48
+ font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
49
+ }
50
+ body {
51
+ padding: 0;
52
+ }
53
+ `;
54
+ export function buildAgentNativeExtensionHtml(options) {
55
+ const extensionId = safeJson(options.extensionId);
56
+ const storageRequestType = safeJson(AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES.REQUEST);
57
+ const storageResponseType = safeJson(AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES.RESPONSE);
58
+ const slotContextType = safeJson(AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES.SLOT_CONTEXT);
59
+ const resizeType = safeJson(AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES.RESIZE);
60
+ const themeCss = `${defaultThemeCss}\n${options.themeCss ?? ""}`;
61
+ return `<!doctype html>
62
+ <html lang="en"${options.dark ? ' class="dark"' : ""}>
63
+ <head>
64
+ <meta charset="utf-8" />
65
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
66
+ <meta http-equiv="Content-Security-Policy" content="${EXTENSION_IFRAME_META_CSP}" />
67
+ <title>${escapeHtml(options.title ?? "Agent Native extension")}</title>
68
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
69
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
70
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300..700&display=swap" rel="stylesheet" />
71
+ <script
72
+ src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4.2.4"
73
+ integrity="sha384-yNSZBFvuOWcmww494a9+1zNuvgUGEXoWkein7cxP8wHUTi3iXCU4vJ7hr3tzBCml"
74
+ crossorigin="anonymous"
75
+ ></script>
76
+ <script
77
+ defer
78
+ src="https://cdn.jsdelivr.net/npm/alpinejs@3.15.11/dist/cdn.min.js"
79
+ integrity="sha384-WPtu0YHhJ3arcykfnv1JgUffWDSKRnqnDeTpJUbOc2os2moEmLkIdaeR0trPN4be"
80
+ crossorigin="anonymous"
81
+ ></script>
82
+ <style>${themeCss}</style>
83
+ <style type="text/tailwindcss">
84
+ @custom-variant dark (&:where(.dark, .dark *));
85
+ @theme {
86
+ --color-background: hsl(var(--background));
87
+ --color-foreground: hsl(var(--foreground));
88
+ --color-muted: hsl(var(--muted));
89
+ --color-muted-foreground: hsl(var(--muted-foreground));
90
+ --color-border: hsl(var(--border));
91
+ --color-primary: hsl(var(--primary));
92
+ --color-primary-foreground: hsl(var(--primary-foreground));
93
+ --color-destructive: hsl(var(--destructive));
94
+ --color-destructive-foreground: hsl(var(--destructive-foreground));
95
+ }
96
+ </style>
97
+ <script>
98
+ (function() {
99
+ var extensionId = ${extensionId};
100
+ var pending = {};
101
+ var seq = 0;
102
+ var slotContext = {};
103
+ var HOST = {
104
+ READY: "agentNative.host.ready",
105
+ GET_CONTEXT: "agentNative.host.getContext",
106
+ CONTEXT: "agentNative.host.context",
107
+ LIST_ACTIONS: "agentNative.host.listActions",
108
+ ACTIONS: "agentNative.host.actions",
109
+ RUN_ACTION: "agentNative.host.runAction",
110
+ ACTION_RESULT: "agentNative.host.actionResult",
111
+ COMMAND: "agentNative.host.command",
112
+ COMMAND_RESULT: "agentNative.host.commandResult"
113
+ };
114
+ var STORAGE_REQUEST = ${storageRequestType};
115
+ var STORAGE_RESPONSE = ${storageResponseType};
116
+ var SLOT_CONTEXT = ${slotContextType};
117
+ var RESIZE = ${resizeType};
118
+
119
+ function nextId(prefix) {
120
+ seq += 1;
121
+ return prefix + "-" + Date.now() + "-" + seq;
122
+ }
123
+
124
+ function request(type, responseType, payload, timeoutMs) {
125
+ return new Promise(function(resolve, reject) {
126
+ var requestId = nextId("extension");
127
+ var timer = setTimeout(function() {
128
+ delete pending[requestId];
129
+ reject(new Error("Extension host request timed out"));
130
+ }, timeoutMs || 30000);
131
+ pending[requestId] = {
132
+ responseType: responseType,
133
+ resolve: resolve,
134
+ reject: reject,
135
+ timer: timer
136
+ };
137
+ window.parent.postMessage(Object.assign({ type: type, requestId: requestId }, payload || {}), "*");
138
+ });
139
+ }
140
+
141
+ window.addEventListener("message", function(event) {
142
+ if (event.source !== window.parent) return;
143
+ var message = event.data || {};
144
+ if (message.type === SLOT_CONTEXT) {
145
+ slotContext = message.context || {};
146
+ window.slotContext = slotContext;
147
+ window.agentNative.slotContext = slotContext;
148
+ return;
149
+ }
150
+ var item = pending[message.requestId];
151
+ if (!item || message.type !== item.responseType) return;
152
+ clearTimeout(item.timer);
153
+ delete pending[message.requestId];
154
+ if (message.ok === false || message.error) {
155
+ item.reject(new Error(message.error || "Extension host request failed"));
156
+ return;
157
+ }
158
+ item.resolve(message);
159
+ });
160
+
161
+ function storage(operation, payload) {
162
+ return request(STORAGE_REQUEST, STORAGE_RESPONSE, Object.assign({
163
+ operation: operation,
164
+ extensionId: extensionId
165
+ }, payload || {})).then(function(message) {
166
+ return message.result;
167
+ });
168
+ }
169
+
170
+ var api = {
171
+ extensionId: extensionId,
172
+ slotContext: slotContext,
173
+ context: function() {
174
+ return request(HOST.GET_CONTEXT, HOST.CONTEXT).then(function(message) {
175
+ return message.context || {};
176
+ });
177
+ },
178
+ listActions: function() {
179
+ return request(HOST.LIST_ACTIONS, HOST.ACTIONS).then(function(message) {
180
+ return message.actions || [];
181
+ });
182
+ },
183
+ action: function(name, args) {
184
+ return request(HOST.RUN_ACTION, HOST.ACTION_RESULT, {
185
+ name: name,
186
+ args: args || {}
187
+ }).then(function(message) {
188
+ return message.result;
189
+ });
190
+ },
191
+ command: function(command, payload) {
192
+ return request(HOST.COMMAND, HOST.COMMAND_RESULT, {
193
+ command: command,
194
+ payload: payload
195
+ }).then(function(message) {
196
+ return message.result;
197
+ });
198
+ },
199
+ refresh: function(payload) {
200
+ return api.command("refreshData", payload);
201
+ },
202
+ data: {
203
+ list: function(collection, opts) {
204
+ opts = opts || {};
205
+ return storage("list", {
206
+ collection: collection,
207
+ scope: opts.scope,
208
+ limit: opts.limit
209
+ });
210
+ },
211
+ get: function(collection, id, opts) {
212
+ opts = opts || {};
213
+ return storage("get", {
214
+ collection: collection,
215
+ id: id,
216
+ scope: opts.scope
217
+ });
218
+ },
219
+ set: function(collection, id, data, opts) {
220
+ opts = opts || {};
221
+ return storage("set", {
222
+ collection: collection,
223
+ id: id,
224
+ data: data,
225
+ scope: opts.scope
226
+ });
227
+ },
228
+ remove: function(collection, id, opts) {
229
+ opts = opts || {};
230
+ return storage("remove", {
231
+ collection: collection,
232
+ id: id,
233
+ scope: opts.scope
234
+ });
235
+ }
236
+ }
237
+ };
238
+
239
+ window.agentNative = api;
240
+ window.appAction = api.action;
241
+ window.extensionData = api.data;
242
+ window.extensionId = extensionId;
243
+ window.slotContext = slotContext;
244
+ window.toolData = api.data;
245
+ window.toolId = extensionId;
246
+
247
+ function reportSize() {
248
+ var height = Math.max(
249
+ document.documentElement ? document.documentElement.scrollHeight : 0,
250
+ document.body ? document.body.scrollHeight : 0
251
+ );
252
+ window.parent.postMessage({ type: RESIZE, height: height }, "*");
253
+ }
254
+ if (typeof ResizeObserver !== "undefined") {
255
+ window.addEventListener("DOMContentLoaded", function() {
256
+ var observer = new ResizeObserver(reportSize);
257
+ observer.observe(document.body);
258
+ reportSize();
259
+ });
260
+ } else {
261
+ window.addEventListener("load", reportSize);
262
+ setInterval(reportSize, 1000);
263
+ }
264
+
265
+ window.parent.postMessage({ type: HOST.READY, requestId: nextId("ready") }, "*");
266
+ })();
267
+ </script>
268
+ </head>
269
+ <body>
270
+ ${options.content}
271
+ </body>
272
+ </html>`;
273
+ }
274
+ function storageKey(namespace, context, collection, scope) {
275
+ return [
276
+ "agent-native-extension-data",
277
+ namespace,
278
+ context.extensionId,
279
+ scope,
280
+ collection,
281
+ ]
282
+ .map(encodeURIComponent)
283
+ .join(":");
284
+ }
285
+ function readCollection(namespace, context, collection, scope) {
286
+ if (typeof localStorage === "undefined")
287
+ return {};
288
+ const raw = localStorage.getItem(storageKey(namespace, context, collection, scope));
289
+ if (!raw)
290
+ return {};
291
+ try {
292
+ return JSON.parse(raw);
293
+ }
294
+ catch {
295
+ return {};
296
+ }
297
+ }
298
+ function writeCollection(namespace, context, collection, scope, rows) {
299
+ if (typeof localStorage === "undefined")
300
+ return;
301
+ localStorage.setItem(storageKey(namespace, context, collection, scope), JSON.stringify(rows));
302
+ }
303
+ function normalizeScope(scope) {
304
+ return scope === "org" ? "org" : "user";
305
+ }
306
+ export function createLocalStorageAgentNativeExtensionStorage(namespace = "default") {
307
+ return {
308
+ async list(collection, options) {
309
+ const scopes = options.scope === "all"
310
+ ? ["user", "org"]
311
+ : [normalizeScope(options.scope)];
312
+ const rows = scopes.flatMap((scope) => Object.values(readCollection(namespace, options.context, collection, scope)));
313
+ return rows
314
+ .sort((a, b) => b.updatedAt.localeCompare(a.updatedAt))
315
+ .slice(0, options.limit ?? 100);
316
+ },
317
+ async get(collection, id, options) {
318
+ const scope = normalizeScope(options.scope);
319
+ const rows = readCollection(namespace, options.context, collection, scope);
320
+ return rows[id] ?? null;
321
+ },
322
+ async set(collection, id, data, options) {
323
+ const scope = normalizeScope(options.scope);
324
+ const rows = readCollection(namespace, options.context, collection, scope);
325
+ const now = new Date().toISOString();
326
+ const row = {
327
+ id,
328
+ extensionId: options.context.extensionId,
329
+ collection,
330
+ data,
331
+ scope,
332
+ createdAt: rows[id]?.createdAt ?? now,
333
+ updatedAt: now,
334
+ };
335
+ rows[id] = row;
336
+ writeCollection(namespace, options.context, collection, scope, rows);
337
+ return row;
338
+ },
339
+ async remove(collection, id, options) {
340
+ const scope = normalizeScope(options.scope);
341
+ const rows = readCollection(namespace, options.context, collection, scope);
342
+ delete rows[id];
343
+ writeCollection(namespace, options.context, collection, scope, rows);
344
+ return { ok: true };
345
+ },
346
+ };
347
+ }
348
+ //# sourceMappingURL=agent-native-extension-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-native-extension-runtime.js","sourceRoot":"","sources":["../../../src/client/extensions/agent-native-extension-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { EXTENSION_IFRAME_META_CSP } from \"../../extensions/html-shell.js\";\n\nexport const AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES = {\n REQUEST: \"agentNative.extension.storage\",\n RESPONSE: \"agentNative.extension.storageResult\",\n SLOT_CONTEXT: \"agentNative.extension.slotContext\",\n RESIZE: \"agentNative.extension.resize\",\n} as const;\n\nexport type AgentNativeExtensionStorageScope = \"user\" | \"org\";\n\nexport type AgentNativeExtensionStorageOperation =\n | \"list\"\n | \"get\"\n | \"set\"\n | \"remove\";\n\nexport interface AgentNativeExtensionDefinition {\n id: string;\n name: string;\n description?: string;\n content: string;\n updatedAt?: string;\n}\n\nexport interface AgentNativeExtensionStorageRequest {\n operation: AgentNativeExtensionStorageOperation;\n extensionId: string;\n collection: string;\n id?: string;\n data?: unknown;\n scope?: AgentNativeExtensionStorageScope;\n limit?: number;\n}\n\nexport interface AgentNativeExtensionStorageContext {\n extensionId: string;\n slotId?: string;\n slotContext?: Record<string, unknown> | null;\n}\n\nexport interface AgentNativeExtensionDataRow {\n id: string;\n extensionId: string;\n collection: string;\n data: unknown;\n scope: AgentNativeExtensionStorageScope;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface AgentNativeExtensionStorage {\n list(\n collection: string,\n options: {\n scope?: AgentNativeExtensionStorageScope | \"all\";\n limit?: number;\n context: AgentNativeExtensionStorageContext;\n },\n ): Promise<AgentNativeExtensionDataRow[]>;\n get(\n collection: string,\n id: string,\n options: {\n scope?: AgentNativeExtensionStorageScope;\n context: AgentNativeExtensionStorageContext;\n },\n ): Promise<AgentNativeExtensionDataRow | null>;\n set(\n collection: string,\n id: string,\n data: unknown,\n options: {\n scope?: AgentNativeExtensionStorageScope;\n context: AgentNativeExtensionStorageContext;\n },\n ): Promise<AgentNativeExtensionDataRow>;\n remove(\n collection: string,\n id: string,\n options: {\n scope?: AgentNativeExtensionStorageScope;\n context: AgentNativeExtensionStorageContext;\n },\n ): Promise<{ ok: true }>;\n}\n\nexport interface BuildAgentNativeExtensionHtmlOptions {\n extensionId: string;\n content: string;\n title?: string;\n dark?: boolean;\n themeCss?: string;\n}\n\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\");\n}\n\nfunction safeJson(value: unknown): string {\n return JSON.stringify(value).replace(/</g, \"\\\\u003c\");\n}\n\nconst defaultThemeCss = `\n:root {\n color-scheme: light;\n --background: 0 0% 100%;\n --foreground: 222.2 84% 4.9%;\n --muted: 210 40% 96.1%;\n --muted-foreground: 215.4 16.3% 46.9%;\n --border: 214.3 31.8% 91.4%;\n --primary: 221.2 83.2% 53.3%;\n --primary-foreground: 210 40% 98%;\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 210 40% 98%;\n}\n.dark {\n color-scheme: dark;\n --background: 222.2 84% 4.9%;\n --foreground: 210 40% 98%;\n --muted: 217.2 32.6% 17.5%;\n --muted-foreground: 215 20.2% 65.1%;\n --border: 217.2 32.6% 17.5%;\n --primary: 217.2 91.2% 59.8%;\n --primary-foreground: 222.2 47.4% 11.2%;\n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 210 40% 98%;\n}\nhtml, body {\n margin: 0;\n min-height: 100%;\n background: transparent;\n color: hsl(var(--foreground));\n font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n}\nbody {\n padding: 0;\n}\n`;\n\nexport function buildAgentNativeExtensionHtml(\n options: BuildAgentNativeExtensionHtmlOptions,\n): string {\n const extensionId = safeJson(options.extensionId);\n const storageRequestType = safeJson(\n AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES.REQUEST,\n );\n const storageResponseType = safeJson(\n AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES.RESPONSE,\n );\n const slotContextType = safeJson(\n AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES.SLOT_CONTEXT,\n );\n const resizeType = safeJson(\n AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES.RESIZE,\n );\n const themeCss = `${defaultThemeCss}\\n${options.themeCss ?? \"\"}`;\n\n return `<!doctype html>\n<html lang=\"en\"${options.dark ? ' class=\"dark\"' : \"\"}>\n<head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <meta http-equiv=\"Content-Security-Policy\" content=\"${EXTENSION_IFRAME_META_CSP}\" />\n <title>${escapeHtml(options.title ?? \"Agent Native extension\")}</title>\n <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n <link href=\"https://fonts.googleapis.com/css2?family=Inter:wght@300..700&display=swap\" rel=\"stylesheet\" />\n <script\n src=\"https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4.2.4\"\n integrity=\"sha384-yNSZBFvuOWcmww494a9+1zNuvgUGEXoWkein7cxP8wHUTi3iXCU4vJ7hr3tzBCml\"\n crossorigin=\"anonymous\"\n ></script>\n <script\n defer\n src=\"https://cdn.jsdelivr.net/npm/alpinejs@3.15.11/dist/cdn.min.js\"\n integrity=\"sha384-WPtu0YHhJ3arcykfnv1JgUffWDSKRnqnDeTpJUbOc2os2moEmLkIdaeR0trPN4be\"\n crossorigin=\"anonymous\"\n ></script>\n <style>${themeCss}</style>\n <style type=\"text/tailwindcss\">\n @custom-variant dark (&:where(.dark, .dark *));\n @theme {\n --color-background: hsl(var(--background));\n --color-foreground: hsl(var(--foreground));\n --color-muted: hsl(var(--muted));\n --color-muted-foreground: hsl(var(--muted-foreground));\n --color-border: hsl(var(--border));\n --color-primary: hsl(var(--primary));\n --color-primary-foreground: hsl(var(--primary-foreground));\n --color-destructive: hsl(var(--destructive));\n --color-destructive-foreground: hsl(var(--destructive-foreground));\n }\n </style>\n <script>\n (function() {\n var extensionId = ${extensionId};\n var pending = {};\n var seq = 0;\n var slotContext = {};\n var HOST = {\n READY: \"agentNative.host.ready\",\n GET_CONTEXT: \"agentNative.host.getContext\",\n CONTEXT: \"agentNative.host.context\",\n LIST_ACTIONS: \"agentNative.host.listActions\",\n ACTIONS: \"agentNative.host.actions\",\n RUN_ACTION: \"agentNative.host.runAction\",\n ACTION_RESULT: \"agentNative.host.actionResult\",\n COMMAND: \"agentNative.host.command\",\n COMMAND_RESULT: \"agentNative.host.commandResult\"\n };\n var STORAGE_REQUEST = ${storageRequestType};\n var STORAGE_RESPONSE = ${storageResponseType};\n var SLOT_CONTEXT = ${slotContextType};\n var RESIZE = ${resizeType};\n\n function nextId(prefix) {\n seq += 1;\n return prefix + \"-\" + Date.now() + \"-\" + seq;\n }\n\n function request(type, responseType, payload, timeoutMs) {\n return new Promise(function(resolve, reject) {\n var requestId = nextId(\"extension\");\n var timer = setTimeout(function() {\n delete pending[requestId];\n reject(new Error(\"Extension host request timed out\"));\n }, timeoutMs || 30000);\n pending[requestId] = {\n responseType: responseType,\n resolve: resolve,\n reject: reject,\n timer: timer\n };\n window.parent.postMessage(Object.assign({ type: type, requestId: requestId }, payload || {}), \"*\");\n });\n }\n\n window.addEventListener(\"message\", function(event) {\n if (event.source !== window.parent) return;\n var message = event.data || {};\n if (message.type === SLOT_CONTEXT) {\n slotContext = message.context || {};\n window.slotContext = slotContext;\n window.agentNative.slotContext = slotContext;\n return;\n }\n var item = pending[message.requestId];\n if (!item || message.type !== item.responseType) return;\n clearTimeout(item.timer);\n delete pending[message.requestId];\n if (message.ok === false || message.error) {\n item.reject(new Error(message.error || \"Extension host request failed\"));\n return;\n }\n item.resolve(message);\n });\n\n function storage(operation, payload) {\n return request(STORAGE_REQUEST, STORAGE_RESPONSE, Object.assign({\n operation: operation,\n extensionId: extensionId\n }, payload || {})).then(function(message) {\n return message.result;\n });\n }\n\n var api = {\n extensionId: extensionId,\n slotContext: slotContext,\n context: function() {\n return request(HOST.GET_CONTEXT, HOST.CONTEXT).then(function(message) {\n return message.context || {};\n });\n },\n listActions: function() {\n return request(HOST.LIST_ACTIONS, HOST.ACTIONS).then(function(message) {\n return message.actions || [];\n });\n },\n action: function(name, args) {\n return request(HOST.RUN_ACTION, HOST.ACTION_RESULT, {\n name: name,\n args: args || {}\n }).then(function(message) {\n return message.result;\n });\n },\n command: function(command, payload) {\n return request(HOST.COMMAND, HOST.COMMAND_RESULT, {\n command: command,\n payload: payload\n }).then(function(message) {\n return message.result;\n });\n },\n refresh: function(payload) {\n return api.command(\"refreshData\", payload);\n },\n data: {\n list: function(collection, opts) {\n opts = opts || {};\n return storage(\"list\", {\n collection: collection,\n scope: opts.scope,\n limit: opts.limit\n });\n },\n get: function(collection, id, opts) {\n opts = opts || {};\n return storage(\"get\", {\n collection: collection,\n id: id,\n scope: opts.scope\n });\n },\n set: function(collection, id, data, opts) {\n opts = opts || {};\n return storage(\"set\", {\n collection: collection,\n id: id,\n data: data,\n scope: opts.scope\n });\n },\n remove: function(collection, id, opts) {\n opts = opts || {};\n return storage(\"remove\", {\n collection: collection,\n id: id,\n scope: opts.scope\n });\n }\n }\n };\n\n window.agentNative = api;\n window.appAction = api.action;\n window.extensionData = api.data;\n window.extensionId = extensionId;\n window.slotContext = slotContext;\n window.toolData = api.data;\n window.toolId = extensionId;\n\n function reportSize() {\n var height = Math.max(\n document.documentElement ? document.documentElement.scrollHeight : 0,\n document.body ? document.body.scrollHeight : 0\n );\n window.parent.postMessage({ type: RESIZE, height: height }, \"*\");\n }\n if (typeof ResizeObserver !== \"undefined\") {\n window.addEventListener(\"DOMContentLoaded\", function() {\n var observer = new ResizeObserver(reportSize);\n observer.observe(document.body);\n reportSize();\n });\n } else {\n window.addEventListener(\"load\", reportSize);\n setInterval(reportSize, 1000);\n }\n\n window.parent.postMessage({ type: HOST.READY, requestId: nextId(\"ready\") }, \"*\");\n })();\n </script>\n</head>\n<body>\n${options.content}\n</body>\n</html>`;\n}\n\nfunction storageKey(\n namespace: string,\n context: AgentNativeExtensionStorageContext,\n collection: string,\n scope: AgentNativeExtensionStorageScope,\n): string {\n return [\n \"agent-native-extension-data\",\n namespace,\n context.extensionId,\n scope,\n collection,\n ]\n .map(encodeURIComponent)\n .join(\":\");\n}\n\nfunction readCollection(\n namespace: string,\n context: AgentNativeExtensionStorageContext,\n collection: string,\n scope: AgentNativeExtensionStorageScope,\n): Record<string, AgentNativeExtensionDataRow> {\n if (typeof localStorage === \"undefined\") return {};\n const raw = localStorage.getItem(\n storageKey(namespace, context, collection, scope),\n );\n if (!raw) return {};\n try {\n return JSON.parse(raw) as Record<string, AgentNativeExtensionDataRow>;\n } catch {\n return {};\n }\n}\n\nfunction writeCollection(\n namespace: string,\n context: AgentNativeExtensionStorageContext,\n collection: string,\n scope: AgentNativeExtensionStorageScope,\n rows: Record<string, AgentNativeExtensionDataRow>,\n): void {\n if (typeof localStorage === \"undefined\") return;\n localStorage.setItem(\n storageKey(namespace, context, collection, scope),\n JSON.stringify(rows),\n );\n}\n\nfunction normalizeScope(\n scope: AgentNativeExtensionStorageScope | undefined,\n): AgentNativeExtensionStorageScope {\n return scope === \"org\" ? \"org\" : \"user\";\n}\n\nexport function createLocalStorageAgentNativeExtensionStorage(\n namespace = \"default\",\n): AgentNativeExtensionStorage {\n return {\n async list(collection, options) {\n const scopes =\n options.scope === \"all\"\n ? ([\"user\", \"org\"] as const)\n : ([normalizeScope(options.scope)] as const);\n const rows = scopes.flatMap((scope) =>\n Object.values(\n readCollection(namespace, options.context, collection, scope),\n ),\n );\n return rows\n .sort((a, b) => b.updatedAt.localeCompare(a.updatedAt))\n .slice(0, options.limit ?? 100);\n },\n async get(collection, id, options) {\n const scope = normalizeScope(options.scope);\n const rows = readCollection(\n namespace,\n options.context,\n collection,\n scope,\n );\n return rows[id] ?? null;\n },\n async set(collection, id, data, options) {\n const scope = normalizeScope(options.scope);\n const rows = readCollection(\n namespace,\n options.context,\n collection,\n scope,\n );\n const now = new Date().toISOString();\n const row: AgentNativeExtensionDataRow = {\n id,\n extensionId: options.context.extensionId,\n collection,\n data,\n scope,\n createdAt: rows[id]?.createdAt ?? now,\n updatedAt: now,\n };\n rows[id] = row;\n writeCollection(namespace, options.context, collection, scope, rows);\n return row;\n },\n async remove(collection, id, options) {\n const scope = normalizeScope(options.scope);\n const rows = readCollection(\n namespace,\n options.context,\n collection,\n scope,\n );\n delete rows[id];\n writeCollection(namespace, options.context, collection, scope, rows);\n return { ok: true };\n },\n };\n}\n"]}