@agent-native/core 0.4.2 → 0.4.3

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
@@ -0,0 +1,70 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * AgentPanel — unified agent component with chat and CLI terminal modes.
4
+ *
5
+ * A self-contained panel with no layout opinions — drop it into a sidebar,
6
+ * popover, dialog, full page, or any container. It fills its parent via
7
+ * flex and min-h-0.
8
+ *
9
+ * Features:
10
+ * - Chat mode: assistant-ui powered chat with tool calls
11
+ * - CLI mode: embedded xterm.js terminal (dev mode only)
12
+ * - Toggle between modes via header buttons
13
+ *
14
+ * Usage:
15
+ * // In a sidebar
16
+ * <div style={{ width: 380 }}><AgentPanel /></div>
17
+ *
18
+ * // In a popover
19
+ * <Popover><AgentPanel suggestions={[...]} /></Popover>
20
+ *
21
+ * // Full page
22
+ * <AgentPanel className="h-screen" />
23
+ */
24
+ import { useState, useEffect, lazy, Suspense } from "react";
25
+ import { AssistantChat } from "./AssistantChat.js";
26
+ import { cn } from "./utils.js";
27
+ // Lazy-load AgentTerminal to avoid bundling xterm.js when not needed
28
+ const AgentTerminal = lazy(() => import("./terminal/index.js").then((m) => ({ default: m.AgentTerminal })));
29
+ // Detect dev mode at build time (Vite replaces this)
30
+ const IS_DEV = typeof import.meta !== "undefined" &&
31
+ typeof import.meta.env !== "undefined" &&
32
+ import.meta.env.DEV === true;
33
+ // ─── Icons ──────────────────────────────────────────────────────────────────
34
+ function ChatBubbleIcon({ className }) {
35
+ return (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 1.75, strokeLinecap: "round", strokeLinejoin: "round", className: className, children: _jsx("path", { d: "M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z" }) }));
36
+ }
37
+ function TerminalIcon({ className }) {
38
+ return (_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 1.75, strokeLinecap: "round", strokeLinejoin: "round", className: className, children: [_jsx("polyline", { points: "4 17 10 11 4 5" }), _jsx("line", { x1: "12", y1: "19", x2: "20", y2: "19" })] }));
39
+ }
40
+ export function AgentPanel({ defaultMode = "chat", className, apiUrl, emptyStateText, suggestions, showHeader = true, }) {
41
+ const [mode, setMode] = useState(defaultMode);
42
+ return (_jsxs("div", { className: cn("flex flex-1 flex-col h-full min-h-0", className), children: [showHeader && (_jsxs("div", { className: "flex h-11 shrink-0 items-center justify-between border-b border-border px-4", children: [_jsx("span", { className: "text-[13px] font-medium text-muted-foreground", children: "Agent" }), _jsxs("div", { className: "flex items-center gap-0.5", children: [_jsxs("button", { onClick: () => setMode("chat"), className: cn("flex items-center gap-1 px-2 py-1 rounded-md text-[12px]", mode === "chat"
43
+ ? "bg-accent text-foreground"
44
+ : "text-muted-foreground hover:text-foreground hover:bg-accent/50"), title: "Chat mode", children: [_jsx(ChatBubbleIcon, { className: "h-3.5 w-3.5" }), "Chat"] }), IS_DEV && (_jsxs("button", { onClick: () => setMode("cli"), className: cn("flex items-center gap-1 px-2 py-1 rounded-md text-[12px]", mode === "cli"
45
+ ? "bg-accent text-foreground"
46
+ : "text-muted-foreground hover:text-foreground hover:bg-accent/50"), title: "CLI terminal mode", children: [_jsx(TerminalIcon, { className: "h-3.5 w-3.5" }), "CLI"] }))] })] })), _jsx("div", { className: cn("flex-1 flex flex-col min-h-0", mode !== "chat" && "hidden"), children: _jsx(AssistantChat, { apiUrl: apiUrl, showHeader: false, showDevHint: IS_DEV, emptyStateText: emptyStateText, suggestions: suggestions, onSwitchToCli: IS_DEV ? () => setMode("cli") : undefined }) }), IS_DEV && mode === "cli" && (_jsx("div", { className: "flex-1 min-h-0", children: _jsx(Suspense, { fallback: _jsx("div", { className: "flex items-center justify-center h-full text-muted-foreground text-sm", children: "Loading terminal..." }), children: _jsx(AgentTerminal, { hideInHarness: false, className: "h-full", style: { background: "transparent" } }) }) }))] }));
47
+ }
48
+ /**
49
+ * Wraps app content with a toggleable agent sidebar.
50
+ * Use AgentToggleButton in your header to open/close it.
51
+ */
52
+ export function AgentSidebar({ children, emptyStateText = "How can I help you?", suggestions, sidebarWidth = 380, }) {
53
+ const [open, setOpen] = useState(false);
54
+ useEffect(() => {
55
+ const handler = () => {
56
+ setOpen((prev) => !prev);
57
+ };
58
+ window.addEventListener("agent-panel:toggle", handler);
59
+ return () => window.removeEventListener("agent-panel:toggle", handler);
60
+ }, []);
61
+ return (_jsxs("div", { className: "flex flex-1 overflow-hidden", children: [_jsx("div", { className: "flex flex-1 flex-col overflow-hidden min-w-0", children: children }), open && (_jsx("div", { className: "flex flex-col border-l border-border shrink-0 overflow-hidden agent-sidebar-panel", style: { width: sidebarWidth }, children: _jsx(AgentPanel, { emptyStateText: emptyStateText, suggestions: suggestions }) }))] }));
62
+ }
63
+ /**
64
+ * Button to toggle the agent sidebar. Place this in your app's header/toolbar.
65
+ * Dispatches a custom event that AgentSidebar listens for.
66
+ */
67
+ export function AgentToggleButton({ className }) {
68
+ return (_jsx("button", { onClick: () => window.dispatchEvent(new Event("agent-panel:toggle")), className: cn("flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50", className), title: "Toggle agent", children: _jsx(ChatBubbleIcon, { className: "h-4 w-4" }) }));
69
+ }
70
+ //# sourceMappingURL=AgentPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentPanel.js","sourceRoot":"","sources":["../../src/client/AgentPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import React from "react";
2
+ export interface AssistantChatHandle {
3
+ /** Programmatically send a message into this chat */
4
+ sendMessage(text: string): void;
5
+ /** Whether the chat is currently running */
6
+ isRunning(): boolean;
7
+ }
8
+ export interface AssistantChatProps {
9
+ /** API endpoint URL. Default: "/api/agent-chat" */
10
+ apiUrl?: string;
11
+ /** Stable tab identifier passed to the adapter for event correlation */
12
+ tabId?: string;
13
+ /** Placeholder text for empty state */
14
+ emptyStateText?: string;
15
+ /** Suggestion prompts shown when no messages */
16
+ suggestions?: string[];
17
+ /** Whether to show the header bar. Default: true */
18
+ showHeader?: boolean;
19
+ /** CSS class for the outer container */
20
+ className?: string;
21
+ /** Whether to show the "Use CLI" hint in dev mode. Default: true */
22
+ showDevHint?: boolean;
23
+ /** Callback when user clicks "Use CLI" button */
24
+ onSwitchToCli?: () => void;
25
+ }
26
+ export declare const AssistantChat: React.ForwardRefExoticComponent<AssistantChatProps & React.RefAttributes<AssistantChatHandle>>;
27
+ //# sourceMappingURL=AssistantChat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssistantChat.d.ts","sourceRoot":"","sources":["../../src/client/AssistantChat.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AA6Yf,MAAM,WAAW,mBAAmB;IAClC,qDAAqD;IACrD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,4CAA4C;IAC5C,SAAS,IAAI,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,oDAAoD;IACpD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;CAC5B;AAmLD,eAAO,MAAM,aAAa,gGAiBxB,CAAC"}
@@ -0,0 +1,165 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useState, useRef, useEffect, useCallback, useMemo, forwardRef, useImperativeHandle, } from "react";
3
+ import { AssistantRuntimeProvider, useLocalRuntime, useThreadRuntime, useThread, useMessageRuntime, ThreadPrimitive, ComposerPrimitive, MessagePrimitive, } from "@assistant-ui/react";
4
+ import { createAgentChatAdapter } from "./agent-chat-adapter.js";
5
+ import { cn } from "./utils.js";
6
+ // ─── Icons ──────────────────────────────────────────────────────────────────
7
+ function SparklesIcon({ className }) {
8
+ 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: "M12 3l1.912 5.813a2 2 0 0 0 1.275 1.275L21 12l-5.813 1.912a2 2 0 0 0-1.275 1.275L12 21l-1.912-5.813a2 2 0 0 0-1.275-1.275L3 12l5.813-1.912a2 2 0 0 0 1.275-1.275L12 3z" }) }));
9
+ }
10
+ function SendIcon({ className }) {
11
+ 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: "M5 12h14M12 5l7 7-7 7" }) }));
12
+ }
13
+ function StopIcon({ className }) {
14
+ return (_jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", className: className, children: _jsx("rect", { x: "6", y: "6", width: "12", height: "12", rx: "2" }) }));
15
+ }
16
+ function CheckIcon({ className }) {
17
+ return (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", className: className, children: _jsx("path", { d: "M20 6L9 17l-5-5" }) }));
18
+ }
19
+ function ChevronDownIcon({ className }) {
20
+ 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: "m6 9 6 6 6-6" }) }));
21
+ }
22
+ function ArrowDownIcon({ className }) {
23
+ 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: "M12 5v14M19 12l-7 7-7-7" }) }));
24
+ }
25
+ function CopyIcon({ className }) {
26
+ 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: "9", y: "9", width: "13", height: "13", rx: "2", ry: "2" }), _jsx("path", { d: "M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" })] }));
27
+ }
28
+ // ─── Tool Call Fallback ─────────────────────────────────────────────────────
29
+ function ToolCallFallback({ toolName, args, result, }) {
30
+ const [expanded, setExpanded] = useState(false);
31
+ const isRunning = result === undefined;
32
+ const argsStr = Object.entries(args)
33
+ .map(([k, v]) => `${k}=${typeof v === "string" ? v : JSON.stringify(v)}`)
34
+ .join(", ");
35
+ return (_jsxs("div", { className: "my-1", children: [_jsxs("button", { onClick: () => setExpanded(!expanded), className: cn("flex items-center gap-2 rounded-md px-2.5 py-1.5 text-xs font-mono w-full text-left", isRunning
36
+ ? "bg-amber-500/10 text-amber-400"
37
+ : "bg-muted text-muted-foreground hover:bg-accent"), children: [_jsx("span", { className: "shrink-0", children: isRunning ? (_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(CheckIcon, { className: "h-3 w-3 text-emerald-500" })) }), _jsxs("span", { className: "truncate", children: [_jsx("span", { className: "font-medium", children: toolName }), argsStr && _jsxs("span", { className: "opacity-60 ml-1", children: ["(", argsStr, ")"] })] }), !isRunning && (_jsx(ChevronDownIcon, { className: cn("ml-auto h-3 w-3 shrink-0 opacity-40", expanded && "rotate-180") }))] }), expanded && result !== undefined && (_jsx("div", { className: "mt-1 rounded-md bg-muted/50 px-3 py-2 text-xs font-mono text-muted-foreground whitespace-pre-wrap break-all max-h-48 overflow-y-auto", children: typeof result === "string"
38
+ ? result
39
+ : JSON.stringify(result, null, 2) }))] }));
40
+ }
41
+ // ─── Message Components ─────────────────────────────────────────────────────
42
+ function UserMessage() {
43
+ return (_jsx("div", { className: "flex justify-end", children: _jsx("div", { className: "max-w-[85%] rounded-lg bg-accent text-foreground px-3 py-2 text-sm leading-relaxed whitespace-pre-wrap break-words", children: _jsx(MessagePrimitive.Parts, { components: {
44
+ Text: ({ text }) => _jsx(_Fragment, { children: text }),
45
+ } }) }) }));
46
+ }
47
+ function AssistantMessage() {
48
+ const [copied, setCopied] = useState(false);
49
+ const messageRuntime = useMessageRuntime();
50
+ const handleCopy = useCallback(() => {
51
+ const msg = messageRuntime.getState();
52
+ const text = msg.content
53
+ .filter((p) => p.type === "text")
54
+ .map((p) => p.text)
55
+ .join("\n");
56
+ navigator.clipboard.writeText(text);
57
+ setCopied(true);
58
+ setTimeout(() => setCopied(false), 2000);
59
+ }, [messageRuntime]);
60
+ return (_jsxs("div", { className: "group relative", children: [_jsx("div", { className: "max-w-[95%] text-sm leading-relaxed text-foreground", children: _jsx(MessagePrimitive.Parts, { components: {
61
+ Text: ({ text }) => (_jsx("div", { className: "whitespace-pre-wrap break-words", children: text })),
62
+ tools: {
63
+ Fallback: ToolCallFallback,
64
+ },
65
+ } }) }), _jsx("div", { className: "mt-1 flex items-center gap-0.5 opacity-0 group-hover:opacity-100", children: _jsx("button", { onClick: handleCopy, className: "flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground hover:bg-accent hover:text-foreground", children: copied ? (_jsx(CheckIcon, { className: "h-3.5 w-3.5" })) : (_jsx(CopyIcon, { className: "h-3.5 w-3.5" })) }) })] }));
66
+ }
67
+ // ─── Thinking Indicator ─────────────────────────────────────────────────────
68
+ function ThinkingIndicator() {
69
+ return (_jsxs("div", { className: "flex items-center gap-1.5 text-muted-foreground py-2", 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-current opacity-40 animate-bounce", style: { animationDelay: `${i * 0.15}s` } }, i))) }), _jsx("span", { className: "text-xs", children: "Thinking..." })] }));
70
+ }
71
+ // ─── API Key Setup Card ─────────────────────────────────────────────────────
72
+ function ApiKeySetupCard({ apiUrl }) {
73
+ const [apiKey, setApiKey] = useState("");
74
+ const [saving, setSaving] = useState(false);
75
+ const [saved, setSaved] = useState(false);
76
+ const [error, setError] = useState(null);
77
+ const handleSave = async () => {
78
+ if (!apiKey.trim())
79
+ return;
80
+ setSaving(true);
81
+ setError(null);
82
+ try {
83
+ const res = await fetch(`${apiUrl}/save-key`, {
84
+ method: "POST",
85
+ headers: { "Content-Type": "application/json" },
86
+ body: JSON.stringify({ key: apiKey.trim() }),
87
+ });
88
+ if (!res.ok) {
89
+ const data = await res.json().catch(() => ({}));
90
+ throw new Error(data.error || "Failed to save");
91
+ }
92
+ setSaved(true);
93
+ setTimeout(() => window.location.reload(), 1000);
94
+ }
95
+ catch (err) {
96
+ setError(err instanceof Error ? err.message : "Failed to save");
97
+ }
98
+ finally {
99
+ setSaving(false);
100
+ }
101
+ };
102
+ if (saved) {
103
+ return (_jsx("div", { className: "mx-4 my-6 rounded-lg border border-emerald-500/30 bg-emerald-500/5 p-4", children: _jsxs("div", { className: "flex items-center gap-2 text-sm text-emerald-400", children: [_jsx(CheckIcon, { className: "h-4 w-4" }), "API key saved. Reloading..."] }) }));
104
+ }
105
+ return (_jsxs("div", { className: "mx-4 my-6 rounded-lg border border-border bg-card p-5", children: [_jsxs("div", { className: "flex items-center gap-3 mb-3", children: [_jsx("div", { className: "flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-muted", children: _jsx(SparklesIcon, { className: "h-4.5 w-4.5 text-muted-foreground" }) }), _jsxs("div", { children: [_jsx("h3", { className: "text-sm font-medium text-foreground", children: "Connect your AI" }), _jsx("p", { className: "text-xs text-muted-foreground mt-0.5", children: "Add an Anthropic API key to enable the agent" })] })] }), _jsxs("div", { className: "space-y-3", children: [_jsxs("div", { className: "rounded-md bg-muted/50 px-3 py-2.5 text-xs text-muted-foreground leading-relaxed", children: [_jsxs("p", { children: ["1. Go to", " ", _jsx("a", { href: "https://console.anthropic.com/settings/keys", target: "_blank", rel: "noopener noreferrer", className: "underline text-foreground/80 hover:text-foreground", children: "console.anthropic.com/settings/keys" })] }), _jsx("p", { className: "mt-1", children: "2. Create a new API key and paste it below" })] }), _jsx("input", { type: "password", value: apiKey, onChange: (e) => {
106
+ setApiKey(e.target.value);
107
+ setError(null);
108
+ }, onKeyDown: (e) => {
109
+ if (e.key === "Enter")
110
+ handleSave();
111
+ }, placeholder: "sk-ant-...", className: "w-full rounded-md border border-input bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground/50 outline-none focus:ring-1 focus:ring-ring", autoComplete: "off" }), error && _jsx("p", { className: "text-xs text-destructive", children: error }), _jsx("button", { onClick: handleSave, disabled: saving || !apiKey.trim(), className: "w-full rounded-md bg-primary px-3 py-2 text-sm font-medium text-primary-foreground hover:opacity-90 disabled:opacity-40 disabled:cursor-not-allowed", children: saving ? "Saving..." : "Save API key" })] })] }));
112
+ }
113
+ // ─── Main Component ─────────────────────────────────────────────────────────
114
+ // ─── Terminal Icon ──────────────────────────────────────────────────────────
115
+ function TerminalIcon({ className }) {
116
+ return (_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 1.75, strokeLinecap: "round", strokeLinejoin: "round", className: className, children: [_jsx("polyline", { points: "4 17 10 11 4 5" }), _jsx("line", { x1: "12", y1: "19", x2: "20", y2: "19" })] }));
117
+ }
118
+ const AssistantChatInner = forwardRef(function AssistantChatInner({ emptyStateText, suggestions, showHeader = true, showDevHint = true, onSwitchToCli, className, apiUrl = "/api/agent-chat", }, ref) {
119
+ const scrollRef = useRef(null);
120
+ const thread = useThread();
121
+ const threadRuntime = useThreadRuntime();
122
+ const isRunning = thread.isRunning;
123
+ const messages = thread.messages;
124
+ const [missingApiKey, setMissingApiKey] = useState(false);
125
+ // Listen for missing API key events from the adapter
126
+ useEffect(() => {
127
+ const handler = () => setMissingApiKey(true);
128
+ window.addEventListener("agent-chat:missing-api-key", handler);
129
+ return () => window.removeEventListener("agent-chat:missing-api-key", handler);
130
+ }, []);
131
+ // Expose imperative handle
132
+ useImperativeHandle(ref, () => ({
133
+ sendMessage(text) {
134
+ threadRuntime.append({
135
+ role: "user",
136
+ content: [{ type: "text", text }],
137
+ });
138
+ },
139
+ isRunning() {
140
+ return thread.isRunning;
141
+ },
142
+ }), [threadRuntime, thread.isRunning]);
143
+ // Auto-scroll on new messages
144
+ useEffect(() => {
145
+ const el = scrollRef.current;
146
+ if (el) {
147
+ el.scrollTop = el.scrollHeight;
148
+ }
149
+ }, [messages, isRunning]);
150
+ return (_jsxs("div", { className: cn("flex flex-1 flex-col h-full min-h-0 text-foreground", className), children: [showHeader && (_jsxs("div", { className: "flex h-11 shrink-0 items-center justify-between border-b border-border px-4", children: [_jsx("span", { className: "text-[13px] font-medium text-muted-foreground", children: "Agent" }), _jsxs("div", { className: "flex items-center gap-1", children: [onSwitchToCli && (_jsxs("button", { onClick: onSwitchToCli, className: "flex items-center gap-1 text-[12px] text-muted-foreground hover:text-foreground px-2 py-1 rounded-md hover:bg-accent", title: "Switch to CLI", children: [_jsx(TerminalIcon, { className: "h-3.5 w-3.5" }), "CLI"] })), messages.length > 0 && (_jsx("button", { onClick: () => window.location.reload(), className: "text-[12px] text-muted-foreground hover:text-foreground px-2 py-1 rounded-md hover:bg-accent", children: "Clear" }))] })] })), _jsx("div", { ref: scrollRef, className: "flex-1 overflow-y-auto min-h-0", children: missingApiKey ? (_jsx("div", { className: "flex flex-col items-center justify-center h-full px-2", children: _jsx(ApiKeySetupCard, { apiUrl: apiUrl }) })) : messages.length === 0 ? (_jsxs("div", { className: "flex flex-col items-center justify-center gap-4 py-16 px-4 h-full", children: [_jsx("div", { className: "flex h-10 w-10 items-center justify-center rounded-full bg-muted", children: _jsx(SparklesIcon, { className: "h-5 w-5 text-muted-foreground" }) }), _jsx("p", { className: "text-sm text-muted-foreground text-center max-w-[240px]", children: emptyStateText ?? "How can I help you?" }), suggestions && suggestions.length > 0 && (_jsx("div", { className: "flex flex-col gap-1.5 w-full max-w-[280px]", children: suggestions.map((suggestion) => (_jsx("button", { onClick: () => {
151
+ threadRuntime.append({
152
+ role: "user",
153
+ content: [{ type: "text", text: suggestion }],
154
+ });
155
+ }, className: "w-full rounded-lg border border-border px-3 py-2 text-left text-[13px] text-muted-foreground hover:bg-accent hover:text-foreground", children: suggestion }, suggestion))) })), showDevHint && onSwitchToCli && (_jsxs("p", { className: "text-xs text-muted-foreground/60 text-center max-w-[260px] mt-2", children: ["In dev mode you can also use the", " ", _jsx("button", { onClick: onSwitchToCli, className: "underline hover:text-muted-foreground", children: "CLI terminal" }), " ", "for full Claude Code capabilities."] }))] })) : (_jsxs("div", { className: "flex flex-col gap-4 px-4 py-4", children: [_jsx(ThreadPrimitive.Messages, { components: {
156
+ UserMessage,
157
+ AssistantMessage,
158
+ } }), isRunning && _jsx(ThinkingIndicator, {})] })) }), _jsx("div", { className: "shrink-0 border-t border-border px-3 py-3", children: _jsxs(ComposerPrimitive.Root, { className: "flex items-center gap-2 rounded-lg border border-input bg-background px-3 py-2 focus-within:ring-1 focus-within:ring-ring", children: [_jsx(ComposerPrimitive.Input, { placeholder: "Message agent...", submitMode: "enter", cancelOnEscape: true, className: "flex-1 resize-none bg-transparent text-sm text-foreground placeholder:text-muted-foreground outline-none leading-relaxed min-h-[24px] max-h-[120px]", rows: 1 }), isRunning ? (_jsx(ComposerPrimitive.Cancel, { asChild: true, children: _jsx("button", { className: "shrink-0 flex h-8 w-8 items-center justify-center rounded-md bg-destructive text-destructive-foreground hover:opacity-90", children: _jsx(StopIcon, { className: "h-3.5 w-3.5" }) }) })) : (_jsx(ComposerPrimitive.Send, { asChild: true, children: _jsx("button", { className: "shrink-0 flex h-8 w-8 items-center justify-center rounded-md bg-primary text-primary-foreground hover:opacity-90 disabled:opacity-30 disabled:cursor-not-allowed", children: _jsx(SendIcon, { className: "h-3.5 w-3.5" }) }) }))] }) })] }));
159
+ });
160
+ export const AssistantChat = forwardRef(function AssistantChat({ apiUrl, tabId, ...props }, ref) {
161
+ const adapter = useMemo(() => createAgentChatAdapter({ apiUrl, tabId }), [apiUrl, tabId]);
162
+ const runtime = useLocalRuntime(adapter);
163
+ return (_jsx(AssistantRuntimeProvider, { runtime: runtime, children: _jsx(ThreadPrimitive.Root, { className: "flex flex-1 flex-col h-full min-h-0", children: _jsx(AssistantChatInner, { ref: ref, ...props, apiUrl: apiUrl }) }) }));
164
+ });
165
+ //# sourceMappingURL=AssistantChat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssistantChat.js","sourceRoot":"","sources":["../../src/client/AssistantChat.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function ErrorBoundary({ error }: {
2
+ error: unknown;
3
+ }): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=ErrorBoundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorBoundary.d.ts","sourceRoot":"","sources":["../../src/client/ErrorBoundary.tsx"],"names":[],"mappings":"AAEA,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,2CAiC1D"}
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { isRouteErrorResponse } from "react-router";
3
+ export function ErrorBoundary({ error }) {
4
+ let message = "Oops!";
5
+ let details = "An unexpected error occurred.";
6
+ let stack;
7
+ if (isRouteErrorResponse(error)) {
8
+ message = error.status === 404 ? "404" : "Error";
9
+ details =
10
+ error.status === 404
11
+ ? "The requested page could not be found."
12
+ : error.statusText || details;
13
+ }
14
+ else if (typeof process !== "undefined" &&
15
+ process.env.NODE_ENV !== "production" &&
16
+ error instanceof Error) {
17
+ details = error.message;
18
+ stack = error.stack;
19
+ }
20
+ return (_jsx("main", { className: "flex items-center justify-center min-h-screen p-4", children: _jsxs("div", { className: "text-center", children: [_jsx("h1", { className: "text-4xl font-bold mb-2", children: message }), _jsx("p", { className: "text-muted-foreground", children: details }), stack && (_jsx("pre", { className: "mt-4 text-left text-xs overflow-auto max-w-lg mx-auto p-4 bg-muted rounded", children: _jsx("code", { children: stack }) }))] }) }));
21
+ }
22
+ //# sourceMappingURL=ErrorBoundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorBoundary.js","sourceRoot":"","sources":["../../src/client/ErrorBoundary.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,UAAU,aAAa,CAAC,EAAE,KAAK,EAAsB;IACzD,IAAI,OAAO,GAAG,OAAO,CAAC;IACtB,IAAI,OAAO,GAAG,+BAA+B,CAAC;IAC9C,IAAI,KAAyB,CAAC;IAE9B,IAAI,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,GAAG,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;QACjD,OAAO;YACL,KAAK,CAAC,MAAM,KAAK,GAAG;gBAClB,CAAC,CAAC,wCAAwC;gBAC1C,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,OAAO,CAAC;IACpC,CAAC;SAAM,IACL,OAAO,OAAO,KAAK,WAAW;QAC9B,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;QACrC,KAAK,YAAY,KAAK,EACtB,CAAC;QACD,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QACxB,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,OAAO,CACL,eAAM,SAAS,EAAC,mDAAmD,YACjE,eAAK,SAAS,EAAC,aAAa,aAC1B,aAAI,SAAS,EAAC,yBAAyB,YAAE,OAAO,GAAM,EACtD,YAAG,SAAS,EAAC,uBAAuB,YAAE,OAAO,GAAK,EACjD,KAAK,IAAI,CACR,cAAK,SAAS,EAAC,4EAA4E,YACzF,yBAAO,KAAK,GAAQ,GAChB,CACP,IACG,GACD,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type AssistantChatProps } from "./AssistantChat.js";
2
+ export type MultiTabAssistantChatProps = Omit<AssistantChatProps, "tabId">;
3
+ export declare function MultiTabAssistantChat(props: MultiTabAssistantChatProps): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=MultiTabAssistantChat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiTabAssistantChat.d.ts","sourceRoot":"","sources":["../../src/client/MultiTabAssistantChat.tsx"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,oBAAoB,CAAC;AA0C5B,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;AAE3E,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,0BAA0B,2CA6JtE"}
@@ -0,0 +1,125 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useRef, useEffect, useCallback } from "react";
3
+ import { AssistantChat, } from "./AssistantChat.js";
4
+ import { generateTabId } from "./agent-chat.js";
5
+ import { getHarnessOrigin } from "./harness.js";
6
+ // ─── Inline Icons ───────────────────────────────────────────────────────────
7
+ function IconX({ size = 10 }) {
8
+ return (_jsx("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.5, strokeLinecap: "round", strokeLinejoin: "round", children: _jsx("path", { d: "M18 6L6 18M6 6l12 12" }) }));
9
+ }
10
+ let labelCounter = 0;
11
+ function createChatTab() {
12
+ return {
13
+ id: generateTabId(),
14
+ label: String(++labelCounter),
15
+ status: "idle",
16
+ };
17
+ }
18
+ export function MultiTabAssistantChat(props) {
19
+ const [tabs, setTabs] = useState(() => [createChatTab()]);
20
+ const [activeTabId, setActiveTabId] = useState(() => tabs[0].id);
21
+ const activeTabIdRef = useRef(activeTabId);
22
+ activeTabIdRef.current = activeTabId;
23
+ const chatRefs = useRef(new Map());
24
+ const pendingSends = useRef(new Map());
25
+ // Listen for builder.submitChat postMessages
26
+ useEffect(() => {
27
+ const handler = (event) => {
28
+ // Only accept messages from same origin or known harness
29
+ if (event.origin !== window.location.origin &&
30
+ event.origin !== getHarnessOrigin()) {
31
+ return;
32
+ }
33
+ if (event.data?.type !== "builder.submitChat")
34
+ return;
35
+ const message = event.data.data?.message;
36
+ if (!message)
37
+ return;
38
+ const currentTabId = activeTabIdRef.current;
39
+ const activeRef = chatRefs.current.get(currentTabId);
40
+ const running = activeRef?.isRunning() ?? false;
41
+ if (!running) {
42
+ // Send to the current active tab
43
+ if (activeRef) {
44
+ activeRef.sendMessage(message);
45
+ }
46
+ else {
47
+ // Ref not yet mounted — queue it
48
+ pendingSends.current.set(currentTabId, message);
49
+ }
50
+ }
51
+ else {
52
+ // Active tab is busy — create a new tab
53
+ const tab = createChatTab();
54
+ pendingSends.current.set(tab.id, message);
55
+ setTabs((prev) => [...prev, tab]);
56
+ setActiveTabId(tab.id);
57
+ }
58
+ };
59
+ window.addEventListener("message", handler);
60
+ return () => window.removeEventListener("message", handler);
61
+ }, []); // stable — uses refs instead of state
62
+ // Process pending sends when refs mount
63
+ useEffect(() => {
64
+ for (const [tabId, message] of pendingSends.current) {
65
+ const ref = chatRefs.current.get(tabId);
66
+ if (ref) {
67
+ // Small delay to let the runtime initialise
68
+ setTimeout(() => ref.sendMessage(message), 50);
69
+ pendingSends.current.delete(tabId);
70
+ }
71
+ }
72
+ }, [tabs]);
73
+ // Listen for chatRunning completion events
74
+ useEffect(() => {
75
+ const handler = (e) => {
76
+ const detail = e.detail;
77
+ if (!detail)
78
+ return;
79
+ const { isRunning, tabId } = detail;
80
+ if (!tabId)
81
+ return;
82
+ setTabs((prev) => prev.map((t) => {
83
+ if (t.id !== tabId)
84
+ return t;
85
+ if (isRunning === false)
86
+ return { ...t, status: "completed" };
87
+ if (isRunning === true)
88
+ return { ...t, status: "running" };
89
+ return t;
90
+ }));
91
+ };
92
+ window.addEventListener("builder.fusion.chatRunning", handler);
93
+ return () => window.removeEventListener("builder.fusion.chatRunning", handler);
94
+ }, []);
95
+ const closeTab = useCallback((tabId) => {
96
+ setTabs((prev) => {
97
+ if (prev.length <= 1)
98
+ return prev;
99
+ const idx = prev.findIndex((t) => t.id === tabId);
100
+ const next = prev.filter((t) => t.id !== tabId);
101
+ if (tabId === activeTabId) {
102
+ const newIdx = Math.min(idx, next.length - 1);
103
+ setActiveTabId(next[newIdx].id);
104
+ }
105
+ return next;
106
+ });
107
+ chatRefs.current.delete(tabId);
108
+ pendingSends.current.delete(tabId);
109
+ }, [activeTabId]);
110
+ const showTabs = tabs.length > 1;
111
+ return (_jsxs("div", { className: "flex flex-1 flex-col h-full min-h-0", children: [showTabs && (_jsx("div", { className: "flex items-center gap-0.5 px-2 py-1 border-b border-border shrink-0", children: tabs.map((tab) => (_jsxs("button", { onClick: () => setActiveTabId(tab.id), className: `flex items-center gap-1 px-2.5 py-1 rounded text-[11px] font-medium transition-colors ${tab.id === activeTabId
112
+ ? "bg-accent text-foreground"
113
+ : "text-muted-foreground hover:text-foreground hover:bg-accent/50"}`, children: [_jsx("span", { children: tab.label }), tab.status === "completed" && (_jsx("span", { className: "w-2 h-2 rounded-full bg-blue-500 shrink-0" })), tabs.length > 1 && (_jsx("span", { role: "button", onClick: (e) => {
114
+ e.stopPropagation();
115
+ closeTab(tab.id);
116
+ }, className: "text-muted-foreground/50 hover:text-muted-foreground ml-0.5", children: _jsx(IconX, { size: 10 }) }))] }, tab.id))) })), tabs.map((tab) => (_jsx("div", { className: "flex-1 min-h-0", style: { display: tab.id === activeTabId ? "flex" : "none" }, children: _jsx(AssistantChat, { ref: (handle) => {
117
+ if (handle) {
118
+ chatRefs.current.set(tab.id, handle);
119
+ }
120
+ else {
121
+ chatRefs.current.delete(tab.id);
122
+ }
123
+ }, tabId: tab.id, ...props }) }, tab.id)))] }));
124
+ }
125
+ //# sourceMappingURL=MultiTabAssistantChat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiTabAssistantChat.js","sourceRoot":"","sources":["../../src/client/MultiTabAssistantChat.tsx"],"names":[],"mappings":"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"}
@@ -1,10 +1,6 @@
1
- import React from "react";
2
- export interface ProductionAgentPanelProps {
3
- children: React.ReactNode;
4
- }
5
1
  /**
6
- * Wraps app content with a mobile-style bottom tab bar (Mail / Agent).
7
- * 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.
8
4
  */
9
- export declare function ProductionAgentPanel({ children }: ProductionAgentPanelProps): import("react/jsx-runtime").JSX.Element;
5
+ export { AgentSidebar as ProductionAgentPanel, AgentToggleButton, type AgentSidebarProps as ProductionAgentPanelProps, } from "./AgentPanel.js";
10
6
  //# sourceMappingURL=ProductionAgentPanel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProductionAgentPanel.d.ts","sourceRoot":"","sources":["../../src/client/ProductionAgentPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAkYxE,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,QAAQ,EAAE,EAAE,yBAAyB,2CAqD3E"}
1
+ {"version":3,"file":"ProductionAgentPanel.d.ts","sourceRoot":"","sources":["../../src/client/ProductionAgentPanel.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,YAAY,IAAI,oBAAoB,EACpC,iBAAiB,EACjB,KAAK,iBAAiB,IAAI,yBAAyB,GACpD,MAAM,iBAAiB,CAAC"}