@agent-native/core 0.4.2 → 0.4.4

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 (254) hide show
  1. package/dist/agent/production-agent.d.ts.map +1 -1
  2. package/dist/agent/production-agent.js +9 -3
  3. package/dist/agent/production-agent.js.map +1 -1
  4. package/dist/agent/types.d.ts +2 -0
  5. package/dist/agent/types.d.ts.map +1 -1
  6. package/dist/application-state/emitter.d.ts +10 -0
  7. package/dist/application-state/emitter.d.ts.map +1 -0
  8. package/dist/application-state/emitter.js +18 -0
  9. package/dist/application-state/emitter.js.map +1 -0
  10. package/dist/application-state/handlers.d.ts +20 -0
  11. package/dist/application-state/handlers.d.ts.map +1 -0
  12. package/dist/application-state/handlers.js +94 -0
  13. package/dist/application-state/handlers.js.map +1 -0
  14. package/dist/application-state/index.d.ts +5 -0
  15. package/dist/application-state/index.d.ts.map +1 -0
  16. package/dist/application-state/index.js +9 -0
  17. package/dist/application-state/index.js.map +1 -0
  18. package/dist/application-state/script-helpers.d.ts +17 -0
  19. package/dist/application-state/script-helpers.d.ts.map +1 -0
  20. package/dist/application-state/script-helpers.js +28 -0
  21. package/dist/application-state/script-helpers.js.map +1 -0
  22. package/dist/application-state/store.d.ts +9 -0
  23. package/dist/application-state/store.d.ts.map +1 -0
  24. package/dist/application-state/store.js +93 -0
  25. package/dist/application-state/store.js.map +1 -0
  26. package/dist/cli/create.d.ts.map +1 -1
  27. package/dist/cli/create.js +38 -24
  28. package/dist/cli/create.js.map +1 -1
  29. package/dist/client/AgentPanel.d.ts +53 -0
  30. package/dist/client/AgentPanel.d.ts.map +1 -0
  31. package/dist/client/AgentPanel.js +70 -0
  32. package/dist/client/AgentPanel.js.map +1 -0
  33. package/dist/client/AssistantChat.d.ts +27 -0
  34. package/dist/client/AssistantChat.d.ts.map +1 -0
  35. package/dist/client/AssistantChat.js +165 -0
  36. package/dist/client/AssistantChat.js.map +1 -0
  37. package/dist/client/ErrorBoundary.d.ts +4 -0
  38. package/dist/client/ErrorBoundary.d.ts.map +1 -0
  39. package/dist/client/ErrorBoundary.js +22 -0
  40. package/dist/client/ErrorBoundary.js.map +1 -0
  41. package/dist/client/MultiTabAssistantChat.d.ts +4 -0
  42. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -0
  43. package/dist/client/MultiTabAssistantChat.js +125 -0
  44. package/dist/client/MultiTabAssistantChat.js.map +1 -0
  45. package/dist/client/ProductionAgentPanel.d.ts +3 -7
  46. package/dist/client/ProductionAgentPanel.d.ts.map +1 -1
  47. package/dist/client/ProductionAgentPanel.js +3 -118
  48. package/dist/client/ProductionAgentPanel.js.map +1 -1
  49. package/dist/client/agent-chat-adapter.d.ts +10 -0
  50. package/dist/client/agent-chat-adapter.d.ts.map +1 -0
  51. package/dist/client/agent-chat-adapter.js +235 -0
  52. package/dist/client/agent-chat-adapter.js.map +1 -0
  53. package/dist/client/agent-chat.d.ts +9 -1
  54. package/dist/client/agent-chat.d.ts.map +1 -1
  55. package/dist/client/agent-chat.js +11 -1
  56. package/dist/client/agent-chat.js.map +1 -1
  57. package/dist/client/index.d.ts +8 -2
  58. package/dist/client/index.d.ts.map +1 -1
  59. package/dist/client/index.js +9 -2
  60. package/dist/client/index.js.map +1 -1
  61. package/dist/client/terminal/AgentTerminal.d.ts +35 -0
  62. package/dist/client/terminal/AgentTerminal.d.ts.map +1 -0
  63. package/dist/client/terminal/AgentTerminal.js +346 -0
  64. package/dist/client/terminal/AgentTerminal.js.map +1 -0
  65. package/dist/client/terminal/index.d.ts +7 -0
  66. package/dist/client/terminal/index.d.ts.map +1 -0
  67. package/dist/client/terminal/index.js +7 -0
  68. package/dist/client/terminal/index.js.map +1 -0
  69. package/dist/client/use-agent-chat.d.ts +1 -1
  70. package/dist/client/use-agent-chat.d.ts.map +1 -1
  71. package/dist/client/use-agent-chat.js +1 -1
  72. package/dist/client/use-agent-chat.js.map +1 -1
  73. package/dist/client/useProductionAgent.d.ts +6 -1
  74. package/dist/client/useProductionAgent.d.ts.map +1 -1
  75. package/dist/client/useProductionAgent.js +4 -2
  76. package/dist/client/useProductionAgent.js.map +1 -1
  77. package/dist/db/create-get-db.d.ts +3 -0
  78. package/dist/db/create-get-db.d.ts.map +1 -0
  79. package/dist/db/create-get-db.js +18 -0
  80. package/dist/db/create-get-db.js.map +1 -0
  81. package/dist/db/index.d.ts +2 -0
  82. package/dist/db/index.d.ts.map +1 -1
  83. package/dist/db/index.js +2 -0
  84. package/dist/db/index.js.map +1 -1
  85. package/dist/db/migrations.d.ts +7 -0
  86. package/dist/db/migrations.d.ts.map +1 -0
  87. package/dist/db/migrations.js +35 -0
  88. package/dist/db/migrations.js.map +1 -0
  89. package/dist/index.d.ts +2 -0
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +2 -0
  92. package/dist/index.js.map +1 -1
  93. package/dist/oauth-tokens/index.d.ts +2 -0
  94. package/dist/oauth-tokens/index.d.ts.map +1 -0
  95. package/dist/oauth-tokens/index.js +2 -0
  96. package/dist/oauth-tokens/index.js.map +1 -0
  97. package/dist/oauth-tokens/store.d.ts +9 -0
  98. package/dist/oauth-tokens/store.d.ts.map +1 -0
  99. package/dist/oauth-tokens/store.js +90 -0
  100. package/dist/oauth-tokens/store.js.map +1 -0
  101. package/dist/scripts/db/exec.d.ts.map +1 -1
  102. package/dist/scripts/db/exec.js +31 -16
  103. package/dist/scripts/db/exec.js.map +1 -1
  104. package/dist/scripts/db/query.d.ts.map +1 -1
  105. package/dist/scripts/db/query.js +24 -8
  106. package/dist/scripts/db/query.js.map +1 -1
  107. package/dist/scripts/db/schema.d.ts.map +1 -1
  108. package/dist/scripts/db/schema.js +56 -28
  109. package/dist/scripts/db/schema.js.map +1 -1
  110. package/dist/scripts/dev/index.d.ts +15 -0
  111. package/dist/scripts/dev/index.d.ts.map +1 -0
  112. package/dist/scripts/dev/index.js +118 -0
  113. package/dist/scripts/dev/index.js.map +1 -0
  114. package/dist/scripts/dev/list-files.d.ts +5 -0
  115. package/dist/scripts/dev/list-files.d.ts.map +1 -0
  116. package/dist/scripts/dev/list-files.js +102 -0
  117. package/dist/scripts/dev/list-files.js.map +1 -0
  118. package/dist/scripts/dev/read-file.d.ts +5 -0
  119. package/dist/scripts/dev/read-file.d.ts.map +1 -0
  120. package/dist/scripts/dev/read-file.js +68 -0
  121. package/dist/scripts/dev/read-file.js.map +1 -0
  122. package/dist/scripts/dev/search-files.d.ts +5 -0
  123. package/dist/scripts/dev/search-files.d.ts.map +1 -0
  124. package/dist/scripts/dev/search-files.js +133 -0
  125. package/dist/scripts/dev/search-files.js.map +1 -0
  126. package/dist/scripts/dev/shell.d.ts +5 -0
  127. package/dist/scripts/dev/shell.d.ts.map +1 -0
  128. package/dist/scripts/dev/shell.js +65 -0
  129. package/dist/scripts/dev/shell.js.map +1 -0
  130. package/dist/scripts/dev/write-file.d.ts +5 -0
  131. package/dist/scripts/dev/write-file.d.ts.map +1 -0
  132. package/dist/scripts/dev/write-file.js +50 -0
  133. package/dist/scripts/dev/write-file.js.map +1 -0
  134. package/dist/scripts/index.d.ts +1 -0
  135. package/dist/scripts/index.d.ts.map +1 -1
  136. package/dist/scripts/index.js +1 -0
  137. package/dist/scripts/index.js.map +1 -1
  138. package/dist/server/agent-chat-plugin.d.ts +43 -0
  139. package/dist/server/agent-chat-plugin.d.ts.map +1 -0
  140. package/dist/server/agent-chat-plugin.js +92 -0
  141. package/dist/server/agent-chat-plugin.js.map +1 -0
  142. package/dist/server/auth-plugin.d.ts +6 -0
  143. package/dist/server/auth-plugin.d.ts.map +1 -0
  144. package/dist/server/auth-plugin.js +8 -0
  145. package/dist/server/auth-plugin.js.map +1 -0
  146. package/dist/server/auth.d.ts +18 -2
  147. package/dist/server/auth.d.ts.map +1 -1
  148. package/dist/server/auth.js +103 -46
  149. package/dist/server/auth.js.map +1 -1
  150. package/dist/server/create-server.d.ts +7 -0
  151. package/dist/server/create-server.d.ts.map +1 -1
  152. package/dist/server/create-server.js +7 -1
  153. package/dist/server/create-server.js.map +1 -1
  154. package/dist/server/default-watcher.d.ts +17 -0
  155. package/dist/server/default-watcher.d.ts.map +1 -0
  156. package/dist/server/default-watcher.js +37 -0
  157. package/dist/server/default-watcher.js.map +1 -0
  158. package/dist/server/file-sync-plugin.d.ts +7 -0
  159. package/dist/server/file-sync-plugin.d.ts.map +1 -0
  160. package/dist/server/file-sync-plugin.js +38 -0
  161. package/dist/server/file-sync-plugin.js.map +1 -0
  162. package/dist/server/google-auth-plugin.d.ts +22 -0
  163. package/dist/server/google-auth-plugin.d.ts.map +1 -0
  164. package/dist/server/google-auth-plugin.js +122 -0
  165. package/dist/server/google-auth-plugin.js.map +1 -0
  166. package/dist/server/index.d.ts +9 -2
  167. package/dist/server/index.d.ts.map +1 -1
  168. package/dist/server/index.js +9 -2
  169. package/dist/server/index.js.map +1 -1
  170. package/dist/server/sse.d.ts +9 -4
  171. package/dist/server/sse.d.ts.map +1 -1
  172. package/dist/server/sse.js +19 -12
  173. package/dist/server/sse.js.map +1 -1
  174. package/dist/settings/handlers.d.ts +9 -0
  175. package/dist/settings/handlers.d.ts.map +1 -0
  176. package/dist/settings/handlers.js +29 -0
  177. package/dist/settings/handlers.js.map +1 -0
  178. package/dist/settings/index.d.ts +5 -0
  179. package/dist/settings/index.d.ts.map +1 -0
  180. package/dist/settings/index.js +9 -0
  181. package/dist/settings/index.js.map +1 -0
  182. package/dist/settings/script-helpers.d.ts +9 -0
  183. package/dist/settings/script-helpers.d.ts.map +1 -0
  184. package/dist/settings/script-helpers.js +16 -0
  185. package/dist/settings/script-helpers.js.map +1 -0
  186. package/dist/settings/store.d.ts +7 -0
  187. package/dist/settings/store.d.ts.map +1 -0
  188. package/dist/settings/store.js +88 -0
  189. package/dist/settings/store.js.map +1 -0
  190. package/dist/settings/user-settings.d.ts +21 -0
  191. package/dist/settings/user-settings.d.ts.map +1 -0
  192. package/dist/settings/user-settings.js +35 -0
  193. package/dist/settings/user-settings.js.map +1 -0
  194. package/dist/tailwind.preset.js +1 -1
  195. package/dist/tailwind.preset.js.map +1 -1
  196. package/dist/terminal/cli-registry.d.ts +16 -0
  197. package/dist/terminal/cli-registry.d.ts.map +1 -0
  198. package/dist/terminal/cli-registry.js +42 -0
  199. package/dist/terminal/cli-registry.js.map +1 -0
  200. package/dist/terminal/index.d.ts +9 -0
  201. package/dist/terminal/index.d.ts.map +1 -0
  202. package/dist/terminal/index.js +9 -0
  203. package/dist/terminal/index.js.map +1 -0
  204. package/dist/terminal/pty-server.d.ts +31 -0
  205. package/dist/terminal/pty-server.d.ts.map +1 -0
  206. package/dist/terminal/pty-server.js +252 -0
  207. package/dist/terminal/pty-server.js.map +1 -0
  208. package/dist/terminal/terminal-plugin.d.ts +23 -0
  209. package/dist/terminal/terminal-plugin.d.ts.map +1 -0
  210. package/dist/terminal/terminal-plugin.js +90 -0
  211. package/dist/terminal/terminal-plugin.js.map +1 -0
  212. package/dist/vite/client.d.ts.map +1 -1
  213. package/dist/vite/client.js +19 -1
  214. package/dist/vite/client.js.map +1 -1
  215. package/dist/vite/dev-api-server.d.ts.map +1 -1
  216. package/dist/vite/dev-api-server.js +12 -0
  217. package/dist/vite/dev-api-server.js.map +1 -1
  218. package/package.json +50 -4
  219. package/src/templates/default/.agents/skills/create-skill/SKILL.md +1 -1
  220. package/src/templates/default/.agents/skills/delegate-to-agent/SKILL.md +3 -3
  221. package/src/templates/default/.agents/skills/files-as-database/SKILL.md +82 -63
  222. package/src/templates/default/.agents/skills/frontend-design/SKILL.md +2 -2
  223. package/src/templates/default/.agents/skills/scripts/SKILL.md +20 -17
  224. package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +2 -2
  225. package/src/templates/default/.agents/skills/sse-file-watcher/SKILL.md +49 -64
  226. package/src/templates/default/.ignore +0 -0
  227. package/src/templates/default/AGENTS.md +30 -55
  228. package/src/templates/default/app/global.css +95 -0
  229. package/src/templates/default/{client → app}/root.tsx +22 -9
  230. package/src/templates/default/app/routes/_index.tsx +62 -0
  231. package/src/templates/default/application-state/.gitkeep +0 -0
  232. package/src/templates/default/components.json +1 -1
  233. package/src/templates/default/data/sync-config.json +1 -0
  234. package/src/templates/default/package.json +2 -1
  235. package/src/templates/default/react-router.config.ts +1 -1
  236. package/src/templates/default/scripts/run.ts +1 -8
  237. package/src/templates/default/server/plugins/agent-chat.ts +1 -0
  238. package/src/templates/default/server/plugins/auth.ts +1 -5
  239. package/src/templates/default/server/plugins/file-sync.ts +1 -39
  240. package/src/templates/default/server/plugins/terminal.ts +1 -0
  241. package/src/templates/default/server/routes/api/events.get.ts +2 -6
  242. package/src/templates/default/server/routes/api/file-sync/status.get.ts +2 -11
  243. package/src/templates/default/tailwind.config.ts +1 -1
  244. package/src/templates/default/tsconfig.json +1 -1
  245. package/tsconfig.base.json +2 -2
  246. package/src/templates/default/client/App.tsx +0 -56
  247. package/src/templates/default/client/global.css +0 -75
  248. package/src/templates/default/client/routes/_index.tsx +0 -19
  249. package/src/templates/default/server/lib/watcher.ts +0 -21
  250. /package/src/templates/default/{client → app}/entry.client.tsx +0 -0
  251. /package/src/templates/default/{client → app}/entry.server.tsx +0 -0
  252. /package/src/templates/default/{client → app}/lib/utils.ts +0 -0
  253. /package/src/templates/default/{client → app}/routes.ts +0 -0
  254. /package/src/templates/default/{client → app}/vite-env.d.ts +0 -0
@@ -1,121 +1,6 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useState, useRef, useEffect, useCallback } from "react";
3
- import { useProductionAgent } from "./useProductionAgent.js";
4
- import { cn } from "./utils.js";
5
- // Only show the agent panel in production builds
6
- // Vite replaces import.meta.env.PROD at build time; in SSR/Node contexts it defaults to false
7
- const IS_PROD = typeof import.meta !== "undefined" &&
8
- typeof import.meta.env !== "undefined" &&
9
- import.meta.env.PROD === true;
10
- // ─── Icons ─────────────────────────────────────────────────────────────────
11
- function MailIcon({ className }) {
12
- return (_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 1.75, strokeLinecap: "round", strokeLinejoin: "round", className: className, children: [_jsx("rect", { x: "2", y: "4", width: "20", height: "16", rx: "2" }), _jsx("path", { d: "m2 7 10 7 10-7" })] }));
13
- }
14
- function AgentIcon({ className }) {
15
- return (_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 1.75, strokeLinecap: "round", strokeLinejoin: "round", className: className, children: [_jsx("path", { d: "M12 2a6 6 0 0 1 6 6v2a6 6 0 0 1-12 0V8a6 6 0 0 1 6-6z" }), _jsx("path", { d: "M9 22v-2a3 3 0 0 1 6 0v2" }), _jsx("path", { d: "M2 18a10 10 0 0 1 20 0" })] }));
16
- }
17
- function SendIcon({ className }) {
18
- return (_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 1.75, strokeLinecap: "round", strokeLinejoin: "round", className: className, children: [_jsx("path", { d: "m22 2-7 20-4-9-9-4 20-7z" }), _jsx("path", { d: "M22 2 11 13" })] }));
19
- }
20
- function TrashIcon({ className }) {
21
- return (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 1.75, strokeLinecap: "round", strokeLinejoin: "round", className: className, children: _jsx("path", { d: "M3 6h18M8 6V4h8v2M19 6l-1 14H6L5 6" }) }));
22
- }
23
- // ─── Tool call display ──────────────────────────────────────────────────────
24
- function ToolCallBubble({ tool, input, result, }) {
25
- const args = Object.entries(input)
26
- .map(([k, v]) => `${k}=${v}`)
27
- .join(", ");
28
- const pending = result === undefined;
29
- return (_jsxs("div", { className: cn("flex items-start gap-2 rounded-lg px-3 py-2 text-[12px] font-mono", pending
30
- ? "bg-amber-500/10 text-amber-400/80"
31
- : "bg-white/5 text-white/40"), children: [_jsx("span", { className: "shrink-0 mt-0.5", children: pending ? (_jsx("svg", { className: "h-3 w-3 animate-spin", viewBox: "0 0 24 24", fill: "none", children: _jsx("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "3", strokeDasharray: "31 62" }) })) : (_jsx("svg", { className: "h-3 w-3", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, children: _jsx("path", { d: "M20 7 9 18l-5-5", strokeLinecap: "round", strokeLinejoin: "round" }) })) }), _jsxs("span", { className: "min-w-0", children: [_jsx("span", { className: "text-white/60", children: tool }), args && _jsxs("span", { className: "text-white/30 ml-1", children: ["(", args, ")"] })] })] }));
32
- }
33
- // ─── Message bubble ─────────────────────────────────────────────────────────
34
- function MessageBubble({ msg }) {
35
- const isUser = msg.role === "user";
36
- return (_jsxs("div", { className: cn("flex flex-col gap-1", isUser ? "items-end" : "items-start"), children: [!isUser && msg.toolCalls && msg.toolCalls.length > 0 && (_jsx("div", { className: "flex flex-col gap-1 w-full max-w-[85%]", children: msg.toolCalls.map((tc, i) => (_jsx(ToolCallBubble, { tool: tc.tool, input: tc.input, result: tc.result }, i))) })), msg.content && (_jsx("div", { className: cn("max-w-[85%] rounded-2xl px-3.5 py-2.5 text-[14px] leading-relaxed whitespace-pre-wrap break-words", isUser
37
- ? "bg-white text-black rounded-br-sm"
38
- : "bg-white/10 text-white/90 rounded-bl-sm"), children: msg.content }))] }));
39
- }
40
- // ─── Thinking indicator ─────────────────────────────────────────────────────
41
- function ThinkingIndicator() {
42
- return (_jsx("div", { className: "flex items-start", children: _jsx("div", { className: "rounded-2xl rounded-bl-sm bg-white/10 px-4 py-3", children: _jsx("div", { className: "flex gap-1", children: [0, 1, 2].map((i) => (_jsx("span", { className: "h-1.5 w-1.5 rounded-full bg-white/40 animate-bounce", style: { animationDelay: `${i * 0.15}s` } }, i))) }) }) }));
43
- }
44
- function AgentChatView({ messages, isGenerating, sendMessage, clearHistory, }) {
45
- const [input, setInput] = useState("");
46
- const scrollRef = useRef(null);
47
- const inputRef = useRef(null);
48
- // Auto-scroll on new messages
49
- useEffect(() => {
50
- const el = scrollRef.current;
51
- if (el)
52
- el.scrollTop = el.scrollHeight;
53
- }, [messages, isGenerating]);
54
- const handleSend = useCallback(() => {
55
- const text = input.trim();
56
- if (!text || isGenerating)
57
- return;
58
- setInput("");
59
- sendMessage(text);
60
- }, [input, isGenerating, sendMessage]);
61
- const handleKeyDown = useCallback((e) => {
62
- if (e.key === "Enter" && !e.shiftKey) {
63
- e.preventDefault();
64
- handleSend();
65
- }
66
- }, [handleSend]);
67
- // Auto-resize textarea
68
- useEffect(() => {
69
- const el = inputRef.current;
70
- if (!el)
71
- return;
72
- el.style.height = "auto";
73
- el.style.height = `${Math.min(el.scrollHeight, 120)}px`;
74
- }, [input]);
75
- return (_jsxs("div", { className: "flex flex-1 flex-col overflow-hidden bg-black", children: [_jsxs("div", { className: "flex h-11 shrink-0 items-center justify-between border-b border-white/8 px-4", children: [_jsx("span", { className: "text-[13px] font-medium text-white/60", children: "Agent" }), messages.length > 0 && (_jsxs("button", { onClick: clearHistory, className: "flex items-center gap-1.5 rounded-md px-2 py-1 text-[12px] text-white/30 hover:text-white/60 hover:bg-white/5 transition-colors", title: "Clear conversation", children: [_jsx(TrashIcon, { className: "h-3.5 w-3.5" }), "Clear"] }))] }), _jsxs("div", { ref: scrollRef, className: "flex flex-1 flex-col gap-3 overflow-y-auto px-4 py-4", children: [messages.length === 0 && (_jsxs("div", { className: "flex flex-1 flex-col items-center justify-center gap-3 py-12", children: [_jsx("div", { className: "h-10 w-10 rounded-full bg-white/5 flex items-center justify-center", children: _jsx(AgentIcon, { className: "h-5 w-5 text-white/30" }) }), _jsx("p", { className: "text-[13px] text-white/30 text-center max-w-[200px]", children: "Ask me anything about your emails" }), _jsx("div", { className: "flex flex-col gap-1.5 w-full max-w-[260px]", children: [
76
- "What's in my inbox?",
77
- "Summarize my unread emails",
78
- "Archive emails from last week",
79
- ].map((suggestion) => (_jsx("button", { onClick: () => sendMessage(suggestion), className: "w-full rounded-xl border border-white/8 px-3 py-2 text-left text-[12.5px] text-white/40 hover:bg-white/5 hover:text-white/60 transition-colors", children: suggestion }, suggestion))) })] })), messages.map((msg) => (_jsx(MessageBubble, { msg: msg }, msg.id))), isGenerating &&
80
- messages[messages.length - 1]?.role !== "assistant" && (_jsx(ThinkingIndicator, {}))] }), _jsx("div", { className: "shrink-0 border-t border-white/8 px-3 py-3", children: _jsxs("div", { className: "flex items-end gap-2 rounded-2xl border border-white/10 bg-white/5 px-3 py-2", children: [_jsx("textarea", { ref: inputRef, value: input, onChange: (e) => setInput(e.target.value), onKeyDown: handleKeyDown, placeholder: "Message agent...", rows: 1, className: "flex-1 resize-none bg-transparent text-[14px] text-white placeholder:text-white/25 outline-none leading-relaxed min-h-[24px]", style: { maxHeight: 120 } }), _jsx("button", { onClick: handleSend, disabled: !input.trim() || isGenerating, className: cn("shrink-0 flex h-7 w-7 items-center justify-center rounded-full transition-all", input.trim() && !isGenerating
81
- ? "bg-white text-black"
82
- : "bg-white/10 text-white/20"), children: _jsx(SendIcon, { className: "h-3.5 w-3.5" }) })] }) })] }));
83
- }
84
- // ─── Bottom tab bar ─────────────────────────────────────────────────────────
85
- function BottomTabBar({ activeTab, onChange, hasUnread, }) {
86
- return (_jsxs("div", { className: "flex h-14 shrink-0 items-stretch border-t border-border/50 bg-card", children: [_jsxs("button", { onClick: () => onChange("mail"), className: cn("flex flex-1 flex-col items-center justify-center gap-0.5 transition-colors", activeTab === "mail"
87
- ? "text-foreground"
88
- : "text-muted-foreground/50 hover:text-muted-foreground"), children: [_jsx(MailIcon, { className: "h-5 w-5" }), _jsx("span", { className: "text-[10px] font-medium tracking-wide", children: "Mail" })] }), _jsxs("button", { onClick: () => onChange("agent"), className: cn("relative flex flex-1 flex-col items-center justify-center gap-0.5 transition-colors", activeTab === "agent"
89
- ? "text-foreground"
90
- : "text-muted-foreground/50 hover:text-muted-foreground"), children: [_jsx(AgentIcon, { className: "h-5 w-5" }), _jsx("span", { className: "text-[10px] font-medium tracking-wide", children: "Agent" }), hasUnread && activeTab !== "agent" && (_jsx("span", { className: "absolute top-2 right-[calc(50%-10px)] h-1.5 w-1.5 rounded-full bg-blue-400" }))] })] }));
91
- }
92
1
  /**
93
- * Wraps app content with a mobile-style bottom tab bar (Mail / Agent).
94
- * In development (`!import.meta.env.PROD`), renders children unchanged.
2
+ * @deprecated Use AgentSidebar and AgentToggleButton from "./AgentPanel.js" instead.
3
+ * This file re-exports for backward compatibility.
95
4
  */
96
- export function ProductionAgentPanel({ children }) {
97
- const [activeTab, setActiveTab] = useState("mail");
98
- const [hasAgentActivity, setHasAgentActivity] = useState(false);
99
- // Hoist agent state here so it survives tab switches
100
- const agent = useProductionAgent();
101
- useEffect(() => {
102
- if (!IS_PROD)
103
- return;
104
- const handler = (e) => {
105
- const detail = e.detail;
106
- if (detail?.running)
107
- setHasAgentActivity(true);
108
- };
109
- window.addEventListener("builder.fusion.chatRunning", handler);
110
- return () => window.removeEventListener("builder.fusion.chatRunning", handler);
111
- }, []);
112
- if (!IS_PROD) {
113
- return _jsx(_Fragment, { children: children });
114
- }
115
- return (_jsxs("div", { className: "flex flex-1 flex-col overflow-hidden", children: [_jsx("div", { className: cn("flex flex-1 overflow-hidden", activeTab !== "mail" && "hidden"), children: children }), _jsx("div", { className: cn("flex flex-1 overflow-hidden flex-col", activeTab !== "agent" && "hidden"), children: _jsx(AgentChatView, { ...agent }) }), _jsx(BottomTabBar, { activeTab: activeTab, onChange: (tab) => {
116
- setActiveTab(tab);
117
- if (tab === "agent")
118
- setHasAgentActivity(false);
119
- }, hasUnread: hasAgentActivity })] }));
120
- }
5
+ export { AgentSidebar as ProductionAgentPanel, AgentToggleButton, } from "./AgentPanel.js";
121
6
  //# sourceMappingURL=ProductionAgentPanel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProductionAgentPanel.js","sourceRoot":"","sources":["../../src/client/ProductionAgentPanel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProductionAgentPanel.js","sourceRoot":"","sources":["../../src/client/ProductionAgentPanel.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,YAAY,IAAI,oBAAoB,EACpC,iBAAiB,GAElB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { ChatModelAdapter } from "@assistant-ui/react";
2
+ /**
3
+ * Creates a ChatModelAdapter that connects to the agent-native
4
+ * `/api/agent-chat` SSE endpoint.
5
+ */
6
+ export declare function createAgentChatAdapter(options?: {
7
+ apiUrl?: string;
8
+ tabId?: string;
9
+ }): ChatModelAdapter;
10
+ //# sourceMappingURL=agent-chat-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-chat-adapter.d.ts","sourceRoot":"","sources":["../../src/client/agent-chat-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAsB,MAAM,qBAAqB,CAAC;AAahF;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,gBAAgB,CAwPnB"}
@@ -0,0 +1,235 @@
1
+ /**
2
+ * Creates a ChatModelAdapter that connects to the agent-native
3
+ * `/api/agent-chat` SSE endpoint.
4
+ */
5
+ export function createAgentChatAdapter(options) {
6
+ const apiUrl = options?.apiUrl ?? "/api/agent-chat";
7
+ const tabId = options?.tabId;
8
+ return {
9
+ async *run({ messages, abortSignal }) {
10
+ // Extract latest user message and build history from prior messages
11
+ let lastUserMsg;
12
+ for (let i = messages.length - 1; i >= 0; i--) {
13
+ if (messages[i].role === "user") {
14
+ lastUserMsg = messages[i];
15
+ break;
16
+ }
17
+ }
18
+ const messageText = lastUserMsg?.content
19
+ .filter((p) => p.type === "text")
20
+ .map((p) => p.text)
21
+ .join("\n") ?? "";
22
+ const history = messages
23
+ .slice(0, -1) // exclude the latest user message
24
+ .filter((m) => m.role === "user" || m.role === "assistant")
25
+ .map((m) => ({
26
+ role: m.role,
27
+ content: m.content
28
+ .filter((p) => p.type === "text")
29
+ .map((p) => p.text)
30
+ .join("\n"),
31
+ }))
32
+ .filter((m) => m.content.trim());
33
+ // Signal that generation is starting
34
+ if (typeof window !== "undefined") {
35
+ window.dispatchEvent(new CustomEvent("builder.fusion.chatRunning", {
36
+ detail: { isRunning: true, tabId },
37
+ }));
38
+ }
39
+ // Accumulate content parts across the entire agentic loop
40
+ const content = [];
41
+ let toolCallCounter = 0;
42
+ try {
43
+ const res = await fetch(apiUrl, {
44
+ method: "POST",
45
+ headers: { "Content-Type": "application/json" },
46
+ body: JSON.stringify({ message: messageText, history }),
47
+ signal: abortSignal,
48
+ });
49
+ if (!res.ok) {
50
+ // Try to read error body for better messages
51
+ let errorText = `Server error: ${res.status}`;
52
+ try {
53
+ const body = await res.text();
54
+ if (body.includes("apiKey") ||
55
+ body.includes("authToken") ||
56
+ body.includes("ANTHROPIC_API_KEY") ||
57
+ body.includes("authentication")) {
58
+ // Show inline setup UI instead of raw error
59
+ if (typeof window !== "undefined") {
60
+ window.dispatchEvent(new Event("agent-chat:missing-api-key"));
61
+ }
62
+ content.push({ type: "text", text: "" });
63
+ yield {
64
+ content: [...content],
65
+ status: {
66
+ type: "incomplete",
67
+ reason: "error",
68
+ },
69
+ };
70
+ return;
71
+ }
72
+ else if (body.includes("Cannot find any path")) {
73
+ errorText =
74
+ "Agent chat endpoint not found. Make sure the agent-chat plugin is loaded in server/plugins/.";
75
+ }
76
+ else if (body) {
77
+ errorText = body.length > 200 ? body.slice(0, 200) + "..." : body;
78
+ }
79
+ }
80
+ catch { }
81
+ throw new Error(errorText);
82
+ }
83
+ if (!res.body) {
84
+ throw new Error("No response body");
85
+ }
86
+ const reader = res.body.getReader();
87
+ const decoder = new TextDecoder();
88
+ let buf = "";
89
+ while (true) {
90
+ const { done, value } = await reader.read();
91
+ if (done)
92
+ break;
93
+ buf += decoder.decode(value, { stream: true });
94
+ const lines = buf.split("\n");
95
+ buf = lines.pop() ?? "";
96
+ for (const line of lines) {
97
+ if (!line.startsWith("data: "))
98
+ continue;
99
+ const raw = line.slice(6).trim();
100
+ if (!raw)
101
+ continue;
102
+ let ev;
103
+ try {
104
+ ev = JSON.parse(raw);
105
+ }
106
+ catch {
107
+ continue;
108
+ }
109
+ if (ev.type === "text") {
110
+ // Find or create a text part to append to
111
+ const lastPart = content[content.length - 1];
112
+ if (lastPart && lastPart.type === "text") {
113
+ lastPart.text += ev.text ?? "";
114
+ }
115
+ else {
116
+ content.push({ type: "text", text: ev.text ?? "" });
117
+ }
118
+ yield { content: [...content] };
119
+ }
120
+ else if (ev.type === "tool_start") {
121
+ const toolCallId = `tc_${++toolCallCounter}`;
122
+ const args = (ev.input ?? {});
123
+ content.push({
124
+ type: "tool-call",
125
+ toolCallId,
126
+ toolName: ev.tool ?? "unknown",
127
+ argsText: JSON.stringify(args),
128
+ args,
129
+ });
130
+ yield { content: [...content] };
131
+ }
132
+ else if (ev.type === "tool_done") {
133
+ // Find the last tool call with the matching name and update its result
134
+ for (let i = content.length - 1; i >= 0; i--) {
135
+ const part = content[i];
136
+ if (part.type === "tool-call" &&
137
+ part.toolName === ev.tool &&
138
+ part.result === undefined) {
139
+ part.result = ev.result ?? "";
140
+ break;
141
+ }
142
+ }
143
+ yield { content: [...content] };
144
+ }
145
+ else if (ev.type === "missing_api_key") {
146
+ // Dispatch event for the UI to show inline setup
147
+ if (typeof window !== "undefined") {
148
+ window.dispatchEvent(new Event("agent-chat:missing-api-key"));
149
+ }
150
+ content.push({
151
+ type: "text",
152
+ text: "",
153
+ });
154
+ yield {
155
+ content: [...content],
156
+ status: {
157
+ type: "incomplete",
158
+ reason: "error",
159
+ },
160
+ };
161
+ return;
162
+ }
163
+ else if (ev.type === "error") {
164
+ // Check if this is an auth-related error from the SDK
165
+ const errMsg = ev.error ?? "Unknown error";
166
+ if (errMsg.includes("apiKey") ||
167
+ errMsg.includes("authToken") ||
168
+ errMsg.includes("ANTHROPIC_API_KEY") ||
169
+ errMsg.includes("authentication")) {
170
+ if (typeof window !== "undefined") {
171
+ window.dispatchEvent(new Event("agent-chat:missing-api-key"));
172
+ }
173
+ content.push({ type: "text", text: "" });
174
+ yield {
175
+ content: [...content],
176
+ status: {
177
+ type: "incomplete",
178
+ reason: "error",
179
+ },
180
+ };
181
+ return;
182
+ }
183
+ // Add error as text content
184
+ content.push({
185
+ type: "text",
186
+ text: `Error: ${errMsg}`,
187
+ });
188
+ yield {
189
+ content: [...content],
190
+ status: {
191
+ type: "incomplete",
192
+ reason: "error",
193
+ },
194
+ };
195
+ return;
196
+ }
197
+ else if (ev.type === "done") {
198
+ // Final yield
199
+ yield { content: [...content] };
200
+ return;
201
+ }
202
+ }
203
+ }
204
+ // Stream ended without explicit done event
205
+ if (content.length > 0) {
206
+ yield { content: [...content] };
207
+ }
208
+ }
209
+ catch (err) {
210
+ if (err instanceof Error && err.name === "AbortError") {
211
+ return;
212
+ }
213
+ content.push({
214
+ type: "text",
215
+ text: "Something went wrong. Please try again.",
216
+ });
217
+ yield {
218
+ content: [...content],
219
+ status: {
220
+ type: "incomplete",
221
+ reason: "error",
222
+ },
223
+ };
224
+ }
225
+ finally {
226
+ if (typeof window !== "undefined") {
227
+ window.dispatchEvent(new CustomEvent("builder.fusion.chatRunning", {
228
+ detail: { isRunning: false, tabId },
229
+ }));
230
+ }
231
+ }
232
+ },
233
+ };
234
+ }
235
+ //# sourceMappingURL=agent-chat-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-chat-adapter.js","sourceRoot":"","sources":["../../src/client/agent-chat-adapter.ts"],"names":[],"mappings":"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"}
@@ -19,9 +19,17 @@ export interface AgentChatMessage {
19
19
  referenceImagePaths?: string[];
20
20
  /** Optional uploaded reference images */
21
21
  uploadedReferenceImages?: string[];
22
+ /** Stable tab identifier — auto-generated if omitted */
23
+ tabId?: string;
22
24
  }
25
+ /** Generate a unique tab ID */
26
+ export declare function generateTabId(): string;
23
27
  /**
24
28
  * Send a message to the agent chat via postMessage.
25
29
  */
26
- export declare function sendToAgentChat(opts: AgentChatMessage): void;
30
+ /**
31
+ * Send a message to the agent chat via postMessage.
32
+ * Returns the stable tabId for tracking this chat run.
33
+ */
34
+ export declare function sendToAgentChat(opts: AgentChatMessage): string;
27
35
  //# sourceMappingURL=agent-chat.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-chat.d.ts","sourceRoot":"","sources":["../../src/client/agent-chat.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,yCAAyC;IACzC,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;CACpC;AAoBD;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAQ5D"}
1
+ {"version":3,"file":"agent-chat.d.ts","sourceRoot":"","sources":["../../src/client/agent-chat.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,yCAAyC;IACzC,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;IACnC,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAoBD,+BAA+B;AAC/B,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAU9D"}
@@ -18,15 +18,25 @@ if (typeof window !== "undefined") {
18
18
  }
19
19
  });
20
20
  }
21
+ /** Generate a unique tab ID */
22
+ export function generateTabId() {
23
+ return `chat-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
24
+ }
25
+ /**
26
+ * Send a message to the agent chat via postMessage.
27
+ */
21
28
  /**
22
29
  * Send a message to the agent chat via postMessage.
30
+ * Returns the stable tabId for tracking this chat run.
23
31
  */
24
32
  export function sendToAgentChat(opts) {
33
+ const tabId = opts.tabId ?? generateTabId();
25
34
  const payload = {
26
35
  type: AGENT_CHAT_MESSAGE_TYPE,
27
- data: opts,
36
+ data: { ...opts, tabId },
28
37
  };
29
38
  const target = window.parent !== window ? window.parent : window;
30
39
  target.postMessage(payload, "*");
40
+ return tabId;
31
41
  }
32
42
  //# sourceMappingURL=agent-chat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-chat.js","sourceRoot":"","sources":["../../src/client/agent-chat.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmBH,MAAM,uBAAuB,GAAG,oBAAoB,CAAC;AAErD;;;GAGG;AACH,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IAClC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;QAC3C,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,4BAA4B,EAAE,CAAC;YACtD,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,4BAA4B,EAAE;gBAC5C,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM;aAC1B,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAsB;IACpD,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,uBAAuB;QAC7B,IAAI,EAAE,IAAI;KACX,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IACjE,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"agent-chat.js","sourceRoot":"","sources":["../../src/client/agent-chat.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqBH,MAAM,uBAAuB,GAAG,oBAAoB,CAAC;AAErD;;;GAGG;AACH,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IAClC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;QAC3C,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,4BAA4B,EAAE,CAAC;YACtD,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,4BAA4B,EAAE;gBAC5C,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM;aAC1B,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,aAAa;IAC3B,OAAO,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACxE,CAAC;AAED;;GAEG;AACH;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAsB;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,aAAa,EAAE,CAAC;IAC5C,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,uBAAuB;QAC7B,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE;KACzB,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IACjE,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,4 +1,4 @@
1
- export { sendToAgentChat, type AgentChatMessage } from "./agent-chat.js";
1
+ export { sendToAgentChat, generateTabId, type AgentChatMessage, } from "./agent-chat.js";
2
2
  export { useAgentChatGenerating } from "./use-agent-chat.js";
3
3
  export { useFileWatcher } from "./use-file-watcher.js";
4
4
  export { useFileSyncStatus } from "./use-file-sync-status.js";
@@ -6,8 +6,14 @@ export { cn } from "./utils.js";
6
6
  export { ApiKeySettings } from "./components/ApiKeySettings.js";
7
7
  export { useSession, type AuthSession } from "./use-session.js";
8
8
  export { sendToHarness, onHarnessMessage, requestUserInfo, getHarnessOrigin, getCallbackOrigin, enterStyleEditing, enterTextEditing, exitSelectionMode, type UserInfo, } from "./harness.js";
9
- export { useProductionAgent, type ProductionAgentMessage, type UseProductionAgentResult, } from "./useProductionAgent.js";
9
+ export { AssistantChat, type AssistantChatProps, type AssistantChatHandle, } from "./AssistantChat.js";
10
+ export { MultiTabAssistantChat, type MultiTabAssistantChatProps, } from "./MultiTabAssistantChat.js";
11
+ export { createAgentChatAdapter } from "./agent-chat-adapter.js";
12
+ export { AgentPanel, AgentSidebar, AgentToggleButton, type AgentPanelProps, type AgentSidebarProps, } from "./AgentPanel.js";
10
13
  export { ProductionAgentPanel, type ProductionAgentPanelProps, } from "./ProductionAgentPanel.js";
14
+ export { useProductionAgent, type ProductionAgentMessage, type UseProductionAgentOptions, type UseProductionAgentResult, } from "./useProductionAgent.js";
11
15
  export { Turnstile, type TurnstileProps } from "./Turnstile.js";
12
16
  export { PoweredByBadge, type PoweredByBadgeProps } from "./PoweredByBadge.js";
17
+ export { ErrorBoundary } from "./ErrorBoundary.js";
18
+ export { AgentTerminal, type AgentTerminalProps } from "./terminal/index.js";
13
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,QAAQ,GACd,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,kBAAkB,EAClB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,GAC9B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,GAC/B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,aAAa,EACb,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,QAAQ,GACd,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,GACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,qBAAqB,EACrB,KAAK,0BAA0B,GAChC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EACL,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,GAC/B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,kBAAkB,EAClB,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,GAC9B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,4 +1,4 @@
1
- export { sendToAgentChat } from "./agent-chat.js";
1
+ export { sendToAgentChat, generateTabId, } from "./agent-chat.js";
2
2
  export { useAgentChatGenerating } from "./use-agent-chat.js";
3
3
  export { useFileWatcher } from "./use-file-watcher.js";
4
4
  export { useFileSyncStatus } from "./use-file-sync-status.js";
@@ -6,8 +6,15 @@ export { cn } from "./utils.js";
6
6
  export { ApiKeySettings } from "./components/ApiKeySettings.js";
7
7
  export { useSession } from "./use-session.js";
8
8
  export { sendToHarness, onHarnessMessage, requestUserInfo, getHarnessOrigin, getCallbackOrigin, enterStyleEditing, enterTextEditing, exitSelectionMode, } from "./harness.js";
9
- export { useProductionAgent, } from "./useProductionAgent.js";
9
+ export { AssistantChat, } from "./AssistantChat.js";
10
+ export { MultiTabAssistantChat, } from "./MultiTabAssistantChat.js";
11
+ export { createAgentChatAdapter } from "./agent-chat-adapter.js";
12
+ export { AgentPanel, AgentSidebar, AgentToggleButton, } from "./AgentPanel.js";
13
+ // Deprecated — use AgentSidebar + AgentToggleButton instead
10
14
  export { ProductionAgentPanel, } from "./ProductionAgentPanel.js";
15
+ export { useProductionAgent, } from "./useProductionAgent.js";
11
16
  export { Turnstile } from "./Turnstile.js";
12
17
  export { PoweredByBadge } from "./PoweredByBadge.js";
18
+ export { ErrorBoundary } from "./ErrorBoundary.js";
19
+ export { AgentTerminal } from "./terminal/index.js";
13
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAyB,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAoB,MAAM,kBAAkB,CAAC;AAChE,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,GAElB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,kBAAkB,GAGnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,oBAAoB,GAErB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,cAAc,EAA4B,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,aAAa,GAEd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAoB,MAAM,kBAAkB,CAAC;AAChE,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,GAElB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,aAAa,GAGd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,qBAAqB,GAEtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EACL,UAAU,EACV,YAAY,EACZ,iBAAiB,GAGlB,MAAM,iBAAiB,CAAC;AACzB,4DAA4D;AAC5D,OAAO,EACL,oBAAoB,GAErB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,kBAAkB,GAInB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,cAAc,EAA4B,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAA2B,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * AgentTerminal — Embeddable CLI terminal component
3
+ *
4
+ * Renders an xterm.js terminal connected to a PTY WebSocket server.
5
+ * When running inside a harness, renders nothing (the harness manages the terminal).
6
+ *
7
+ * Usage:
8
+ * import { AgentTerminal } from "@agent-native/core/terminal";
9
+ * <AgentTerminal className="w-full h-[400px]" />
10
+ */
11
+ import { type CSSProperties } from "react";
12
+ export interface AgentTerminalProps {
13
+ /** CLI command to run. Default: 'claude' */
14
+ command?: string;
15
+ /** Additional CLI flags */
16
+ flags?: string;
17
+ /** Custom WebSocket URL (overrides auto-discovery) */
18
+ wsUrl?: string;
19
+ /** Hide when running inside harness. Default: true */
20
+ hideInHarness?: boolean;
21
+ /** Terminal theme overrides */
22
+ theme?: Record<string, string>;
23
+ /** Font size. Default: 12 */
24
+ fontSize?: number;
25
+ /** CSS class for the container */
26
+ className?: string;
27
+ /** Inline styles for the container */
28
+ style?: CSSProperties;
29
+ /** Callback when connection state changes */
30
+ onConnectionChange?: (connected: boolean) => void;
31
+ /** Callback when agent running state changes */
32
+ onAgentRunningChange?: (running: boolean) => void;
33
+ }
34
+ export declare function AgentTerminal({ command, flags, wsUrl: wsUrlProp, hideInHarness, theme, fontSize, className, style, onConnectionChange, onAgentRunningChange, }: AgentTerminalProps): import("react/jsx-runtime").JSX.Element;
35
+ //# sourceMappingURL=AgentTerminal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentTerminal.d.ts","sourceRoot":"","sources":["../../../src/client/terminal/AgentTerminal.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAc,EAKZ,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AAGf,MAAM,WAAW,kBAAkB;IACjC,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,6CAA6C;IAC7C,kBAAkB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD,gDAAgD;IAChD,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACnD;AA6ED,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,KAAK,EACL,KAAK,EAAE,SAAS,EAChB,aAAoB,EACpB,KAAK,EACL,QAAa,EACb,SAAS,EACT,KAAK,EACL,kBAAkB,EAClB,oBAAoB,GACrB,EAAE,kBAAkB,2CAwTpB"}