@agent-native/core 0.7.19 → 0.7.21

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 (263) hide show
  1. package/README.md +1 -1
  2. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  3. package/dist/agent/engine/builder-engine.js +45 -2
  4. package/dist/agent/engine/builder-engine.js.map +1 -1
  5. package/dist/agent/loop-settings.d.ts +37 -0
  6. package/dist/agent/loop-settings.d.ts.map +1 -0
  7. package/dist/agent/loop-settings.js +127 -0
  8. package/dist/agent/loop-settings.js.map +1 -0
  9. package/dist/agent/production-agent.d.ts +8 -0
  10. package/dist/agent/production-agent.d.ts.map +1 -1
  11. package/dist/agent/production-agent.js +268 -29
  12. package/dist/agent/production-agent.js.map +1 -1
  13. package/dist/agent/run-manager.d.ts.map +1 -1
  14. package/dist/agent/run-manager.js +76 -3
  15. package/dist/agent/run-manager.js.map +1 -1
  16. package/dist/agent/run-store.d.ts +1 -1
  17. package/dist/agent/run-store.d.ts.map +1 -1
  18. package/dist/agent/run-store.js +65 -2
  19. package/dist/agent/run-store.js.map +1 -1
  20. package/dist/agent/thread-data-builder.d.ts +3 -0
  21. package/dist/agent/thread-data-builder.d.ts.map +1 -1
  22. package/dist/agent/thread-data-builder.js +52 -10
  23. package/dist/agent/thread-data-builder.js.map +1 -1
  24. package/dist/agent/tool-search.d.ts +37 -0
  25. package/dist/agent/tool-search.d.ts.map +1 -0
  26. package/dist/agent/tool-search.js +201 -0
  27. package/dist/agent/tool-search.js.map +1 -0
  28. package/dist/agent/types.d.ts +8 -1
  29. package/dist/agent/types.d.ts.map +1 -1
  30. package/dist/agent/types.js.map +1 -1
  31. package/dist/cli/create.d.ts.map +1 -1
  32. package/dist/cli/create.js +44 -9
  33. package/dist/cli/create.js.map +1 -1
  34. package/dist/cli/workspacify.d.ts +2 -0
  35. package/dist/cli/workspacify.d.ts.map +1 -1
  36. package/dist/cli/workspacify.js +34 -1
  37. package/dist/cli/workspacify.js.map +1 -1
  38. package/dist/client/AssistantChat.d.ts.map +1 -1
  39. package/dist/client/AssistantChat.js +277 -18
  40. package/dist/client/AssistantChat.js.map +1 -1
  41. package/dist/client/ConnectBuilderCard.d.ts.map +1 -1
  42. package/dist/client/ConnectBuilderCard.js +1 -1
  43. package/dist/client/ConnectBuilderCard.js.map +1 -1
  44. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  45. package/dist/client/MultiTabAssistantChat.js +14 -6
  46. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  47. package/dist/client/NewWorkspaceAppFlow.d.ts +14 -0
  48. package/dist/client/NewWorkspaceAppFlow.d.ts.map +1 -0
  49. package/dist/client/NewWorkspaceAppFlow.js +198 -0
  50. package/dist/client/NewWorkspaceAppFlow.js.map +1 -0
  51. package/dist/client/PoweredByBadge.d.ts +10 -1
  52. package/dist/client/PoweredByBadge.d.ts.map +1 -1
  53. package/dist/client/PoweredByBadge.js +120 -8
  54. package/dist/client/PoweredByBadge.js.map +1 -1
  55. package/dist/client/agent-chat-adapter.d.ts +3 -5
  56. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  57. package/dist/client/agent-chat-adapter.js +26 -19
  58. package/dist/client/agent-chat-adapter.js.map +1 -1
  59. package/dist/client/agent-chat.d.ts.map +1 -1
  60. package/dist/client/agent-chat.js +15 -3
  61. package/dist/client/agent-chat.js.map +1 -1
  62. package/dist/client/analytics.d.ts +1 -1
  63. package/dist/client/analytics.d.ts.map +1 -1
  64. package/dist/client/analytics.js +141 -1
  65. package/dist/client/analytics.js.map +1 -1
  66. package/dist/client/builder-frame.d.ts +10 -0
  67. package/dist/client/builder-frame.d.ts.map +1 -0
  68. package/dist/client/builder-frame.js +94 -0
  69. package/dist/client/builder-frame.js.map +1 -0
  70. package/dist/client/composer/MentionPopover.d.ts.map +1 -1
  71. package/dist/client/composer/MentionPopover.js +5 -1
  72. package/dist/client/composer/MentionPopover.js.map +1 -1
  73. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  74. package/dist/client/composer/TiptapComposer.js +11 -6
  75. package/dist/client/composer/TiptapComposer.js.map +1 -1
  76. package/dist/client/error-format.d.ts +20 -1
  77. package/dist/client/error-format.d.ts.map +1 -1
  78. package/dist/client/error-format.js +53 -5
  79. package/dist/client/error-format.js.map +1 -1
  80. package/dist/client/index.d.ts +3 -1
  81. package/dist/client/index.d.ts.map +1 -1
  82. package/dist/client/index.js +3 -1
  83. package/dist/client/index.js.map +1 -1
  84. package/dist/client/notifications/NotificationsBell.d.ts.map +1 -1
  85. package/dist/client/notifications/NotificationsBell.js +28 -1
  86. package/dist/client/notifications/NotificationsBell.js.map +1 -1
  87. package/dist/client/onboarding/OnboardingPanel.d.ts.map +1 -1
  88. package/dist/client/onboarding/OnboardingPanel.js +88 -6
  89. package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
  90. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  91. package/dist/client/settings/SettingsPanel.js +145 -9
  92. package/dist/client/settings/SettingsPanel.js.map +1 -1
  93. package/dist/client/settings/useBuilderStatus.d.ts +13 -0
  94. package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
  95. package/dist/client/settings/useBuilderStatus.js +50 -9
  96. package/dist/client/settings/useBuilderStatus.js.map +1 -1
  97. package/dist/client/sse-event-processor.d.ts +3 -0
  98. package/dist/client/sse-event-processor.d.ts.map +1 -1
  99. package/dist/client/sse-event-processor.js +88 -7
  100. package/dist/client/sse-event-processor.js.map +1 -1
  101. package/dist/client/tools/ToolsListPage.d.ts.map +1 -1
  102. package/dist/client/tools/ToolsListPage.js +16 -1
  103. package/dist/client/tools/ToolsListPage.js.map +1 -1
  104. package/dist/client/tools/ToolsSidebarSection.d.ts.map +1 -1
  105. package/dist/client/tools/ToolsSidebarSection.js +63 -8
  106. package/dist/client/tools/ToolsSidebarSection.js.map +1 -1
  107. package/dist/client/tools/tool-order.d.ts +7 -0
  108. package/dist/client/tools/tool-order.d.ts.map +1 -0
  109. package/dist/client/tools/tool-order.js +47 -0
  110. package/dist/client/tools/tool-order.js.map +1 -0
  111. package/dist/client/transcription/BuilderTranscriptionCta.d.ts.map +1 -1
  112. package/dist/client/transcription/BuilderTranscriptionCta.js +71 -6
  113. package/dist/client/transcription/BuilderTranscriptionCta.js.map +1 -1
  114. package/dist/client/use-send-to-agent-chat.d.ts.map +1 -1
  115. package/dist/client/use-send-to-agent-chat.js +11 -3
  116. package/dist/client/use-send-to-agent-chat.js.map +1 -1
  117. package/dist/client/useProductionAgent.d.ts.map +1 -1
  118. package/dist/client/useProductionAgent.js +1 -1
  119. package/dist/client/useProductionAgent.js.map +1 -1
  120. package/dist/db/client.d.ts.map +1 -1
  121. package/dist/db/client.js +5 -1
  122. package/dist/db/client.js.map +1 -1
  123. package/dist/deploy/build.d.ts +1 -0
  124. package/dist/deploy/build.d.ts.map +1 -1
  125. package/dist/deploy/build.js +4 -1
  126. package/dist/deploy/build.js.map +1 -1
  127. package/dist/oauth-tokens/index.d.ts +1 -1
  128. package/dist/oauth-tokens/index.d.ts.map +1 -1
  129. package/dist/oauth-tokens/index.js +1 -1
  130. package/dist/oauth-tokens/index.js.map +1 -1
  131. package/dist/oauth-tokens/store.d.ts.map +1 -1
  132. package/dist/oauth-tokens/store.js +6 -0
  133. package/dist/oauth-tokens/store.js.map +1 -1
  134. package/dist/observability/store.d.ts.map +1 -1
  135. package/dist/observability/store.js +19 -19
  136. package/dist/observability/store.js.map +1 -1
  137. package/dist/onboarding/default-steps.d.ts.map +1 -1
  138. package/dist/onboarding/default-steps.js +95 -61
  139. package/dist/onboarding/default-steps.js.map +1 -1
  140. package/dist/onboarding/plugin.d.ts.map +1 -1
  141. package/dist/onboarding/plugin.js +17 -8
  142. package/dist/onboarding/plugin.js.map +1 -1
  143. package/dist/org/migrations.js +2 -2
  144. package/dist/org/migrations.js.map +1 -1
  145. package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
  146. package/dist/scripts/agent-engines/list-agent-engines.js +2 -3
  147. package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
  148. package/dist/scripts/db/exec.d.ts +2 -1
  149. package/dist/scripts/db/exec.d.ts.map +1 -1
  150. package/dist/scripts/db/exec.js +264 -61
  151. package/dist/scripts/db/exec.js.map +1 -1
  152. package/dist/scripts/db/schema.d.ts.map +1 -1
  153. package/dist/scripts/db/schema.js +16 -4
  154. package/dist/scripts/db/schema.js.map +1 -1
  155. package/dist/scripts/dev/index.d.ts.map +1 -1
  156. package/dist/scripts/dev/index.js +36 -11
  157. package/dist/scripts/dev/index.js.map +1 -1
  158. package/dist/scripts/manage-agent-loop-settings.d.ts +7 -0
  159. package/dist/scripts/manage-agent-loop-settings.d.ts.map +1 -0
  160. package/dist/scripts/manage-agent-loop-settings.js +63 -0
  161. package/dist/scripts/manage-agent-loop-settings.js.map +1 -0
  162. package/dist/scripts/runner.d.ts.map +1 -1
  163. package/dist/scripts/runner.js +11 -0
  164. package/dist/scripts/runner.js.map +1 -1
  165. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  166. package/dist/server/agent-chat-plugin.js +60 -18
  167. package/dist/server/agent-chat-plugin.js.map +1 -1
  168. package/dist/server/app-url.d.ts +5 -4
  169. package/dist/server/app-url.d.ts.map +1 -1
  170. package/dist/server/app-url.js +8 -4
  171. package/dist/server/app-url.js.map +1 -1
  172. package/dist/server/auth.d.ts +8 -0
  173. package/dist/server/auth.d.ts.map +1 -1
  174. package/dist/server/auth.js +82 -29
  175. package/dist/server/auth.js.map +1 -1
  176. package/dist/server/better-auth-instance.d.ts.map +1 -1
  177. package/dist/server/better-auth-instance.js +16 -5
  178. package/dist/server/better-auth-instance.js.map +1 -1
  179. package/dist/server/builder-browser.d.ts +12 -0
  180. package/dist/server/builder-browser.d.ts.map +1 -1
  181. package/dist/server/builder-browser.js +36 -4
  182. package/dist/server/builder-browser.js.map +1 -1
  183. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  184. package/dist/server/core-routes-plugin.js +350 -53
  185. package/dist/server/core-routes-plugin.js.map +1 -1
  186. package/dist/server/credential-provider.d.ts +21 -3
  187. package/dist/server/credential-provider.d.ts.map +1 -1
  188. package/dist/server/credential-provider.js +51 -21
  189. package/dist/server/credential-provider.js.map +1 -1
  190. package/dist/server/google-oauth.d.ts +3 -0
  191. package/dist/server/google-oauth.d.ts.map +1 -1
  192. package/dist/server/google-oauth.js +27 -3
  193. package/dist/server/google-oauth.js.map +1 -1
  194. package/dist/server/index.d.ts +4 -3
  195. package/dist/server/index.d.ts.map +1 -1
  196. package/dist/server/index.js +4 -3
  197. package/dist/server/index.js.map +1 -1
  198. package/dist/server/onboarding-html.js +2 -2
  199. package/dist/server/onboarding-html.js.map +1 -1
  200. package/dist/server/schema-prompt.d.ts.map +1 -1
  201. package/dist/server/schema-prompt.js +2 -1
  202. package/dist/server/schema-prompt.js.map +1 -1
  203. package/dist/server/security-headers.d.ts +3 -0
  204. package/dist/server/security-headers.d.ts.map +1 -1
  205. package/dist/server/security-headers.js +7 -1
  206. package/dist/server/security-headers.js.map +1 -1
  207. package/dist/server/ssr-handler.d.ts.map +1 -1
  208. package/dist/server/ssr-handler.js +31 -6
  209. package/dist/server/ssr-handler.js.map +1 -1
  210. package/dist/templates/default/_gitignore +5 -1
  211. package/dist/templates/default/app/root.tsx +1 -0
  212. package/dist/templates/default/public/favicon.svg +3 -3
  213. package/dist/templates/default/public/icon-180.svg +3 -3
  214. package/dist/templates/default/public/icon-192.svg +3 -3
  215. package/dist/templates/default/public/icon-512.svg +3 -3
  216. package/dist/templates/workspace-core/AGENTS.md +23 -7
  217. package/dist/templates/workspace-core/package.json +2 -1
  218. package/dist/templates/workspace-core/src/credentials.ts +22 -11
  219. package/dist/templates/workspace-root/.env.example +7 -0
  220. package/dist/templates/workspace-root/README.md +6 -3
  221. package/dist/templates/workspace-root/_gitignore +3 -0
  222. package/dist/templates/workspace-root/package.json +3 -1
  223. package/dist/templates/workspace-root/scripts/workspace-dev.ts +375 -0
  224. package/dist/tools/actions.d.ts.map +1 -1
  225. package/dist/tools/actions.js +2 -0
  226. package/dist/tools/actions.js.map +1 -1
  227. package/dist/tools/html-shell.d.ts.map +1 -1
  228. package/dist/tools/html-shell.js +13 -1
  229. package/dist/tools/html-shell.js.map +1 -1
  230. package/dist/tools/store.d.ts.map +1 -1
  231. package/dist/tools/store.js +10 -10
  232. package/dist/tools/store.js.map +1 -1
  233. package/dist/tracking/providers.d.ts +1 -0
  234. package/dist/tracking/providers.d.ts.map +1 -1
  235. package/dist/tracking/providers.js +72 -0
  236. package/dist/tracking/providers.js.map +1 -1
  237. package/dist/vite/action-types-plugin.d.ts.map +1 -1
  238. package/dist/vite/action-types-plugin.js +106 -9
  239. package/dist/vite/action-types-plugin.js.map +1 -1
  240. package/dist/vite/client.d.ts.map +1 -1
  241. package/dist/vite/client.js +62 -1
  242. package/dist/vite/client.js.map +1 -1
  243. package/docs/content/authentication.md +17 -13
  244. package/docs/content/deployment.md +11 -11
  245. package/docs/content/mcp-clients.md +2 -2
  246. package/docs/content/onboarding.md +32 -30
  247. package/docs/content/security.md +1 -1
  248. package/docs/content/tools.md +4 -0
  249. package/package.json +2 -2
  250. package/src/templates/default/_gitignore +5 -1
  251. package/src/templates/default/app/root.tsx +1 -0
  252. package/src/templates/default/public/favicon.svg +3 -3
  253. package/src/templates/default/public/icon-180.svg +3 -3
  254. package/src/templates/default/public/icon-192.svg +3 -3
  255. package/src/templates/default/public/icon-512.svg +3 -3
  256. package/src/templates/workspace-core/AGENTS.md +23 -7
  257. package/src/templates/workspace-core/package.json +2 -1
  258. package/src/templates/workspace-core/src/credentials.ts +22 -11
  259. package/src/templates/workspace-root/.env.example +7 -0
  260. package/src/templates/workspace-root/README.md +6 -3
  261. package/src/templates/workspace-root/_gitignore +3 -0
  262. package/src/templates/workspace-root/package.json +3 -1
  263. package/src/templates/workspace-root/scripts/workspace-dev.ts +375 -0
@@ -1 +1 @@
1
- {"version":3,"file":"MentionPopover.js","sourceRoot":"","sources":["../../../src/client/composer/MentionPopover.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {\n useState,\n useEffect,\n useRef,\n useImperativeHandle,\n forwardRef,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n IconFile,\n IconFolder,\n IconStack2,\n IconFileText,\n IconCheckbox,\n IconMail,\n IconUser,\n IconPresentation,\n IconMessageChatbot,\n IconTrash,\n IconPlus,\n IconHelp,\n IconHistory,\n IconTerminal2,\n} from \"@tabler/icons-react\";\nimport type { MentionItem, SkillResult, SlashCommand } from \"./types.js\";\n\nexport interface MentionPopoverRef {\n moveUp: () => void;\n moveDown: () => void;\n getSelectedIndex: () => number;\n getSelectedMention: () => MentionItem | null;\n getSelectedCommand: () => SlashCommand | null;\n}\n\ninterface MentionPopoverProps {\n type: \"@\" | \"/\";\n position: { top: number; left: number } | null;\n mentionItems: MentionItem[];\n skills: SkillResult[];\n commands?: SlashCommand[];\n hint?: string;\n isLoading: boolean;\n query: string;\n onSelectMention: (item: MentionItem) => void;\n onSelectSkill: (skill: SkillResult) => void;\n onSelectCommand?: (command: SlashCommand) => void;\n onClose: () => void;\n}\n\nconst iconProps = { size: 14, className: \"shrink-0 text-muted-foreground\" };\n\nfunction MentionItemIcon({ icon }: { icon?: string }) {\n switch (icon) {\n case \"folder\":\n return <IconFolder {...iconProps} />;\n case \"document\":\n return <IconFileText {...iconProps} />;\n case \"form\":\n return <IconCheckbox {...iconProps} />;\n case \"email\":\n return <IconMail {...iconProps} />;\n case \"user\":\n return <IconUser {...iconProps} />;\n case \"deck\":\n return <IconPresentation {...iconProps} />;\n case \"agent\":\n return <IconMessageChatbot {...iconProps} />;\n case \"file\":\n return <IconFile {...iconProps} />;\n default:\n return <IconFile {...iconProps} />;\n }\n}\n\nfunction CommandIcon({ icon }: { icon?: string }) {\n switch (icon) {\n case \"clear\":\n return <IconTrash {...iconProps} />;\n case \"new\":\n return <IconPlus {...iconProps} />;\n case \"help\":\n return <IconHelp {...iconProps} />;\n case \"history\":\n return <IconHistory {...iconProps} />;\n default:\n return <IconTerminal2 {...iconProps} />;\n }\n}\n\nfunction HintWithLink({ hint }: { hint: string }) {\n // If hint contains a URL, split it and render the URL as a link\n const urlMatch = hint.match(/(https?:\\/\\/\\S+)/);\n if (!urlMatch) return <>{hint}</>;\n const before = hint.slice(0, urlMatch.index);\n const url = urlMatch[1];\n return (\n <>\n {before}\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"underline hover:text-foreground\"\n >\n Learn more\n </a>\n </>\n );\n}\n\nfunction LoadingSkeleton() {\n return (\n <div className=\"space-y-1 p-1\">\n {[1, 2, 3].map((i) => (\n <div key={i} className=\"flex items-center gap-2 rounded px-2 py-1.5\">\n <div className=\"h-3.5 w-3.5 rounded bg-muted animate-pulse\" />\n <div\n className=\"h-3 rounded bg-muted animate-pulse\"\n style={{ width: `${60 + i * 20}px` }}\n />\n </div>\n ))}\n </div>\n );\n}\n\nfunction LoadingSkeletonRow() {\n return (\n <div className=\"flex items-center gap-2 rounded px-2 py-1.5\">\n <div className=\"h-3.5 w-3.5 rounded bg-muted animate-pulse\" />\n <div className=\"h-3 w-24 rounded bg-muted animate-pulse\" />\n </div>\n );\n}\n\nexport const MentionPopover = forwardRef<\n MentionPopoverRef,\n MentionPopoverProps\n>(function MentionPopover(props, ref) {\n const {\n type,\n position,\n mentionItems,\n skills,\n commands = [],\n hint,\n isLoading,\n query,\n onSelectMention,\n onSelectSkill,\n onSelectCommand,\n onClose,\n } = props;\n\n const [selectedIndex, setSelectedIndex] = useState(0);\n const listRef = useRef<HTMLDivElement>(null);\n\n const itemCount =\n type === \"@\" ? mentionItems.length : commands.length + skills.length;\n\n // Group mention items by section for @ popover\n const groupedMentions = React.useMemo(() => {\n if (type !== \"@\") return [];\n const groups = new Map<string, MentionItem[]>();\n for (const item of mentionItems) {\n const section = item.section || \"Other\";\n if (!groups.has(section)) groups.set(section, []);\n groups.get(section)!.push(item);\n }\n // Sort: Agents first, then Connected Agents, then template-specific,\n // then Files, then Other\n const sorted: { section: string; items: MentionItem[] }[] = [];\n const knownSections = new Set([\n \"Agents\",\n \"Connected Agents\",\n \"Files\",\n \"Other\",\n ]);\n // Agents first\n if (groups.has(\"Agents\")) {\n sorted.push({ section: \"Agents\", items: groups.get(\"Agents\")! });\n groups.delete(\"Agents\");\n }\n if (groups.has(\"Connected Agents\")) {\n sorted.push({\n section: \"Connected Agents\",\n items: groups.get(\"Connected Agents\")!,\n });\n groups.delete(\"Connected Agents\");\n }\n // Template-specific sections (anything not in knownSections)\n for (const [section, items] of groups) {\n if (!knownSections.has(section)) {\n sorted.push({ section, items });\n }\n }\n // Files\n if (groups.has(\"Files\")) {\n sorted.push({ section: \"Files\", items: groups.get(\"Files\")! });\n }\n // Other\n if (groups.has(\"Other\")) {\n sorted.push({ section: \"Other\", items: groups.get(\"Other\")! });\n }\n return sorted;\n }, [type, mentionItems]);\n\n // Flat list of mention items in section order for keyboard index tracking\n const flatMentionItems = React.useMemo(() => {\n return groupedMentions.flatMap((g) => g.items);\n }, [groupedMentions]);\n\n // Reset selection when items change\n useEffect(() => {\n setSelectedIndex(0);\n }, [mentionItems, skills, query]);\n\n // Scroll selected item into view\n useEffect(() => {\n const container = listRef.current;\n if (!container) return;\n // Find the actual item element by data attribute\n const selected = container.querySelector(\n `[data-mention-index=\"${selectedIndex}\"]`,\n ) as HTMLElement | undefined;\n if (selected) {\n selected.scrollIntoView({ block: \"nearest\" });\n }\n }, [selectedIndex]);\n\n useImperativeHandle(ref, () => ({\n moveUp: () => {\n setSelectedIndex((prev) =>\n prev <= 0 ? Math.max(0, itemCount - 1) : prev - 1,\n );\n },\n moveDown: () => {\n setSelectedIndex((prev) => (prev >= itemCount - 1 ? 0 : prev + 1));\n },\n getSelectedIndex: () => selectedIndex,\n getSelectedMention: () => flatMentionItems[selectedIndex] ?? null,\n getSelectedCommand: () => {\n if (type !== \"/\" || selectedIndex >= commands.length) return null;\n return commands[selectedIndex] ?? null;\n },\n }));\n\n if (!position) return null;\n\n const content = (\n <>\n {/* Backdrop to capture outside clicks */}\n <div className=\"fixed inset-0 z-[9998]\" onClick={onClose} />\n <div\n className=\"fixed z-[9999] w-[320px] overflow-y-auto rounded-lg border border-border bg-popover shadow-lg\"\n style={{\n bottom: `calc(100vh - ${position.top}px + 4px)`,\n left: Math.max(8, Math.min(position.left, window.innerWidth - 336)),\n maxHeight: Math.min(320, position.top - 8),\n }}\n >\n {isLoading && itemCount === 0 ? (\n <LoadingSkeleton />\n ) : itemCount === 0 ? (\n <div className=\"px-3 py-4 text-center text-xs text-muted-foreground\">\n {type === \"@\" ? (\n query ? (\n \"No results found\"\n ) : (\n \"Type to search...\"\n )\n ) : hint ? (\n <HintWithLink hint={hint} />\n ) : (\n \"No skills available\"\n )}\n </div>\n ) : (\n <div ref={listRef} className=\"p-1\">\n {isLoading && <LoadingSkeletonRow />}\n {type === \"@\"\n ? (() => {\n let flatIndex = 0;\n return groupedMentions.map((group) => (\n <div key={group.section}>\n <div className=\"px-2 pt-2 pb-1 text-[10px] font-medium text-muted-foreground/70 uppercase tracking-wider\">\n {group.section}\n </div>\n {group.items.map((item) => {\n const idx = flatIndex++;\n return (\n <button\n key={item.id}\n data-mention-index={idx}\n className={`flex w-full items-center gap-2 rounded px-2 py-1.5 text-left text-sm ${\n idx === selectedIndex\n ? \"bg-accent text-accent-foreground\"\n : \"hover:bg-accent/50\"\n }`}\n onMouseEnter={() => setSelectedIndex(idx)}\n onClick={() => onSelectMention(item)}\n >\n <MentionItemIcon icon={item.icon} />\n <span className=\"truncate text-sm\">\n {item.label}\n </span>\n {item.description && (\n <span className=\"ml-auto shrink-0 truncate max-w-[160px] text-xs text-muted-foreground\">\n {item.description}\n </span>\n )}\n </button>\n );\n })}\n </div>\n ));\n })()\n : (() => {\n let idx = 0;\n return (\n <>\n {commands.length > 0 && (\n <div>\n <div className=\"px-2 pt-2 pb-1 text-[10px] font-medium text-muted-foreground/70 uppercase tracking-wider\">\n Commands\n </div>\n {commands.map((cmd) => {\n const i = idx++;\n return (\n <button\n key={cmd.name}\n data-mention-index={i}\n className={`flex w-full items-center gap-2 rounded px-2 py-1.5 text-left text-sm ${\n i === selectedIndex\n ? \"bg-accent text-accent-foreground\"\n : \"hover:bg-accent/50\"\n }`}\n onMouseEnter={() => setSelectedIndex(i)}\n onClick={() => onSelectCommand?.(cmd)}\n >\n <CommandIcon icon={cmd.icon} />\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm\">\n /{cmd.name}\n </span>\n {cmd.description && (\n <span className=\"block truncate text-xs text-muted-foreground\">\n {cmd.description}\n </span>\n )}\n </span>\n </button>\n );\n })}\n </div>\n )}\n {skills.length > 0 && (\n <div>\n {commands.length > 0 && (\n <div className=\"px-2 pt-2 pb-1 text-[10px] font-medium text-muted-foreground/70 uppercase tracking-wider\">\n Skills\n </div>\n )}\n {(skills as SkillResult[]).map((skill) => {\n const i = idx++;\n return (\n <button\n key={skill.path}\n data-mention-index={i}\n className={`flex w-full items-center gap-2 rounded px-2 py-1.5 text-left text-sm ${\n i === selectedIndex\n ? \"bg-accent text-accent-foreground\"\n : \"hover:bg-accent/50\"\n }`}\n onMouseEnter={() => setSelectedIndex(i)}\n onClick={() => onSelectSkill(skill)}\n >\n <IconStack2 {...iconProps} />\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm\">\n {skill.name}\n </span>\n {skill.description && (\n <span className=\"block truncate text-xs text-muted-foreground\">\n {skill.description}\n </span>\n )}\n </span>\n </button>\n );\n })}\n </div>\n )}\n </>\n );\n })()}\n </div>\n )}\n </div>\n </>\n );\n\n return createPortal(content, document.body);\n});\n"]}
1
+ {"version":3,"file":"MentionPopover.js","sourceRoot":"","sources":["../../../src/client/composer/MentionPopover.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EACZ,QAAQ,EACR,SAAS,EACT,MAAM,EACN,mBAAmB,EACnB,UAAU,GACX,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EACL,QAAQ,EACR,UAAU,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,UAAU,GACX,MAAM,qBAAqB,CAAC;AA0B7B,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,gCAAgC,EAAE,CAAC;AAE5E,SAAS,eAAe,CAAC,EAAE,IAAI,EAAqB;IAClD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,KAAC,UAAU,OAAK,SAAS,GAAI,CAAC;QACvC,KAAK,UAAU;YACb,OAAO,KAAC,YAAY,OAAK,SAAS,GAAI,CAAC;QACzC,KAAK,MAAM;YACT,OAAO,KAAC,YAAY,OAAK,SAAS,GAAI,CAAC;QACzC,KAAK,OAAO;YACV,OAAO,KAAC,QAAQ,OAAK,SAAS,GAAI,CAAC;QACrC,KAAK,MAAM;YACT,OAAO,KAAC,QAAQ,OAAK,SAAS,GAAI,CAAC;QACrC,KAAK,MAAM;YACT,OAAO,KAAC,gBAAgB,OAAK,SAAS,GAAI,CAAC;QAC7C,KAAK,OAAO;YACV,OAAO,KAAC,kBAAkB,OAAK,SAAS,GAAI,CAAC;QAC/C,KAAK,MAAM;YACT,OAAO,KAAC,QAAQ,OAAK,SAAS,GAAI,CAAC;QACrC;YACE,OAAO,KAAC,QAAQ,OAAK,SAAS,GAAI,CAAC;IACvC,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,IAAI,EAAqB;IAC9C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,KAAC,SAAS,OAAK,SAAS,GAAI,CAAC;QACtC,KAAK,KAAK;YACR,OAAO,KAAC,QAAQ,OAAK,SAAS,GAAI,CAAC;QACrC,KAAK,MAAM;YACT,OAAO,KAAC,QAAQ,OAAK,SAAS,GAAI,CAAC;QACrC,KAAK,SAAS;YACZ,OAAO,KAAC,WAAW,OAAK,SAAS,GAAI,CAAC;QACxC,KAAK,MAAM;YACT,OAAO,KAAC,iBAAiB,OAAK,SAAS,GAAI,CAAC;QAC9C,KAAK,KAAK;YACR,OAAO,KAAC,UAAU,OAAK,SAAS,GAAI,CAAC;QACvC;YACE,OAAO,KAAC,aAAa,OAAK,SAAS,GAAI,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,EAAE,IAAI,EAAoB;IAC9C,gEAAgE;IAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAChD,IAAI,CAAC,QAAQ;QAAE,OAAO,4BAAG,IAAI,GAAI,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,CACL,8BACG,MAAM,EACP,YACE,IAAI,EAAE,GAAG,EACT,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,SAAS,EAAC,iCAAiC,2BAGzC,IACH,CACJ,CAAC;AACJ,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,CACL,cAAK,SAAS,EAAC,eAAe,YAC3B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACpB,eAAa,SAAS,EAAC,6CAA6C,aAClE,cAAK,SAAS,EAAC,4CAA4C,GAAG,EAC9D,cACE,SAAS,EAAC,oCAAoC,EAC9C,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GACpC,KALM,CAAC,CAML,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,CACL,eAAK,SAAS,EAAC,6CAA6C,aAC1D,cAAK,SAAS,EAAC,4CAA4C,GAAG,EAC9D,cAAK,SAAS,EAAC,yCAAyC,GAAG,IACvD,CACP,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAGtC,SAAS,cAAc,CAAC,KAAK,EAAE,GAAG;IAClC,MAAM,EACJ,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,QAAQ,GAAG,EAAE,EACb,IAAI,EACJ,SAAS,EACT,KAAK,EACL,eAAe,EACf,aAAa,EACb,eAAe,EACf,OAAO,GACR,GAAG,KAAK,CAAC;IAEV,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAE7C,MAAM,SAAS,GACb,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAEvE,+CAA+C;IAC/C,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACzC,IAAI,IAAI,KAAK,GAAG;YAAE,OAAO,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;QAChD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAClD,MAAM,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,qEAAqE;QACrE,yBAAyB;QACzB,MAAM,MAAM,GAAgD,EAAE,CAAC;QAC/D,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;YAC5B,QAAQ;YACR,kBAAkB;YAClB,OAAO;YACP,OAAO;SACR,CAAC,CAAC;QACH,eAAe;QACf,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAE,EAAE,CAAC,CAAC;YACjE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,kBAAkB;gBAC3B,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAE;aACvC,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACpC,CAAC;QACD,6DAA6D;QAC7D,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YACtC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,QAAQ;QACR,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAE,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,QAAQ;QACR,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAE,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;IAEzB,0EAA0E;IAC1E,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAC1C,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,oCAAoC;IACpC,SAAS,CAAC,GAAG,EAAE;QACb,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAElC,iCAAiC;IACjC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;QAClC,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,iDAAiD;QACjD,MAAM,QAAQ,GAAG,SAAS,CAAC,aAAa,CACtC,wBAAwB,aAAa,IAAI,CACf,CAAC;QAC7B,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,EAAE;YACX,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CACxB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAClD,CAAC;QACJ,CAAC;QACD,QAAQ,EAAE,GAAG,EAAE;YACb,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,gBAAgB,EAAE,GAAG,EAAE,CAAC,aAAa;QACrC,kBAAkB,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,IAAI;QACjE,kBAAkB,EAAE,GAAG,EAAE;YACvB,IAAI,IAAI,KAAK,GAAG,IAAI,aAAa,IAAI,QAAQ,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YAClE,OAAO,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC;QACzC,CAAC;KACF,CAAC,CAAC,CAAC;IAEJ,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,MAAM,OAAO,GAAG,CACd,8BAEE,cAAK,SAAS,EAAC,wBAAwB,EAAC,OAAO,EAAE,OAAO,GAAI,EAC5D,cACE,SAAS,EAAC,+FAA+F,EACzG,KAAK,EAAE;oBACL,MAAM,EAAE,gBAAgB,QAAQ,CAAC,GAAG,WAAW;oBAC/C,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;oBACnE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC;iBAC3C,YAEA,SAAS,IAAI,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAC9B,KAAC,eAAe,KAAG,CACpB,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CACpB,cAAK,SAAS,EAAC,qDAAqD,YACjE,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CACd,KAAK,CAAC,CAAC,CAAC,CACN,kBAAkB,CACnB,CAAC,CAAC,CAAC,CACF,mBAAmB,CACpB,CACF,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACT,KAAC,YAAY,IAAC,IAAI,EAAE,IAAI,GAAI,CAC7B,CAAC,CAAC,CAAC,CACF,qBAAqB,CACtB,GACG,CACP,CAAC,CAAC,CAAC,CACF,eAAK,GAAG,EAAE,OAAO,EAAE,SAAS,EAAC,KAAK,aAC/B,SAAS,IAAI,KAAC,kBAAkB,KAAG,EACnC,IAAI,KAAK,GAAG;4BACX,CAAC,CAAC,CAAC,GAAG,EAAE;gCACJ,IAAI,SAAS,GAAG,CAAC,CAAC;gCAClB,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACpC,0BACE,cAAK,SAAS,EAAC,0FAA0F,YACtG,KAAK,CAAC,OAAO,GACV,EACL,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;4CACxB,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;4CACxB,OAAO,CACL,wCAEsB,GAAG,EACvB,SAAS,EAAE,wEACT,GAAG,KAAK,aAAa;oDACnB,CAAC,CAAC,kCAAkC;oDACpC,CAAC,CAAC,oBACN,EAAE,EACF,YAAY,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,EACzC,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,aAEpC,KAAC,eAAe,IAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAI,EACpC,eAAM,SAAS,EAAC,kBAAkB,YAC/B,IAAI,CAAC,KAAK,GACN,EACN,IAAI,CAAC,WAAW,IAAI,CACnB,eAAM,SAAS,EAAC,uEAAuE,YACpF,IAAI,CAAC,WAAW,GACZ,CACR,KAlBI,IAAI,CAAC,EAAE,CAmBL,CACV,CAAC;wCACJ,CAAC,CAAC,KA7BM,KAAK,CAAC,OAAO,CA8BjB,CACP,CAAC,CAAC;4BACL,CAAC,CAAC,EAAE;4BACN,CAAC,CAAC,CAAC,GAAG,EAAE;gCACJ,IAAI,GAAG,GAAG,CAAC,CAAC;gCACZ,OAAO,CACL,8BACG,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CACtB,0BACE,cAAK,SAAS,EAAC,0FAA0F,yBAEnG,EACL,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oDACpB,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC;oDAChB,OAAO,CACL,wCAEsB,CAAC,EACrB,SAAS,EAAE,wEACT,CAAC,KAAK,aAAa;4DACjB,CAAC,CAAC,kCAAkC;4DACpC,CAAC,CAAC,oBACN,EAAE,EACF,YAAY,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,EACvC,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,aAErC,KAAC,WAAW,IAAC,IAAI,EAAE,GAAG,CAAC,IAAI,GAAI,EAC/B,gBAAM,SAAS,EAAC,gBAAgB,aAC9B,gBAAM,SAAS,EAAC,wBAAwB,kBACpC,GAAG,CAAC,IAAI,IACL,EACN,GAAG,CAAC,WAAW,IAAI,CAClB,eAAM,SAAS,EAAC,8CAA8C,YAC3D,GAAG,CAAC,WAAW,GACX,CACR,IACI,KApBF,GAAG,CAAC,IAAI,CAqBN,CACV,CAAC;gDACJ,CAAC,CAAC,IACE,CACP,EACA,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CACpB,0BACG,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CACtB,cAAK,SAAS,EAAC,0FAA0F,uBAEnG,CACP,EACC,MAAwB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;oDACvC,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC;oDAChB,OAAO,CACL,wCAEsB,CAAC,EACrB,SAAS,EAAE,wEACT,CAAC,KAAK,aAAa;4DACjB,CAAC,CAAC,kCAAkC;4DACpC,CAAC,CAAC,oBACN,EAAE,EACF,YAAY,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,EACvC,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,aAEnC,KAAC,UAAU,OAAK,SAAS,GAAI,EAC7B,gBAAM,SAAS,EAAC,gBAAgB,aAC9B,eAAM,SAAS,EAAC,wBAAwB,YACrC,KAAK,CAAC,IAAI,GACN,EACN,KAAK,CAAC,WAAW,IAAI,CACpB,eAAM,SAAS,EAAC,8CAA8C,YAC3D,KAAK,CAAC,WAAW,GACb,CACR,IACI,KApBF,KAAK,CAAC,IAAI,CAqBR,CACV,CAAC;gDACJ,CAAC,CAAC,IACE,CACP,IACA,CACJ,CAAC;4BACJ,CAAC,CAAC,EAAE,IACJ,CACP,GACG,IACL,CACJ,CAAC;IAEF,OAAO,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC,CAAC,CAAC","sourcesContent":["import React, {\n useState,\n useEffect,\n useRef,\n useImperativeHandle,\n forwardRef,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n IconFile,\n IconFolder,\n IconStack2,\n IconFileText,\n IconCheckbox,\n IconMail,\n IconUser,\n IconPresentation,\n IconMessageChatbot,\n IconTrash,\n IconPlus,\n IconHelp,\n IconHistory,\n IconTerminal2,\n IconClipboardList,\n IconPencil,\n} from \"@tabler/icons-react\";\nimport type { MentionItem, SkillResult, SlashCommand } from \"./types.js\";\n\nexport interface MentionPopoverRef {\n moveUp: () => void;\n moveDown: () => void;\n getSelectedIndex: () => number;\n getSelectedMention: () => MentionItem | null;\n getSelectedCommand: () => SlashCommand | null;\n}\n\ninterface MentionPopoverProps {\n type: \"@\" | \"/\";\n position: { top: number; left: number } | null;\n mentionItems: MentionItem[];\n skills: SkillResult[];\n commands?: SlashCommand[];\n hint?: string;\n isLoading: boolean;\n query: string;\n onSelectMention: (item: MentionItem) => void;\n onSelectSkill: (skill: SkillResult) => void;\n onSelectCommand?: (command: SlashCommand) => void;\n onClose: () => void;\n}\n\nconst iconProps = { size: 14, className: \"shrink-0 text-muted-foreground\" };\n\nfunction MentionItemIcon({ icon }: { icon?: string }) {\n switch (icon) {\n case \"folder\":\n return <IconFolder {...iconProps} />;\n case \"document\":\n return <IconFileText {...iconProps} />;\n case \"form\":\n return <IconCheckbox {...iconProps} />;\n case \"email\":\n return <IconMail {...iconProps} />;\n case \"user\":\n return <IconUser {...iconProps} />;\n case \"deck\":\n return <IconPresentation {...iconProps} />;\n case \"agent\":\n return <IconMessageChatbot {...iconProps} />;\n case \"file\":\n return <IconFile {...iconProps} />;\n default:\n return <IconFile {...iconProps} />;\n }\n}\n\nfunction CommandIcon({ icon }: { icon?: string }) {\n switch (icon) {\n case \"clear\":\n return <IconTrash {...iconProps} />;\n case \"new\":\n return <IconPlus {...iconProps} />;\n case \"help\":\n return <IconHelp {...iconProps} />;\n case \"history\":\n return <IconHistory {...iconProps} />;\n case \"plan\":\n return <IconClipboardList {...iconProps} />;\n case \"act\":\n return <IconPencil {...iconProps} />;\n default:\n return <IconTerminal2 {...iconProps} />;\n }\n}\n\nfunction HintWithLink({ hint }: { hint: string }) {\n // If hint contains a URL, split it and render the URL as a link\n const urlMatch = hint.match(/(https?:\\/\\/\\S+)/);\n if (!urlMatch) return <>{hint}</>;\n const before = hint.slice(0, urlMatch.index);\n const url = urlMatch[1];\n return (\n <>\n {before}\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"underline hover:text-foreground\"\n >\n Learn more\n </a>\n </>\n );\n}\n\nfunction LoadingSkeleton() {\n return (\n <div className=\"space-y-1 p-1\">\n {[1, 2, 3].map((i) => (\n <div key={i} className=\"flex items-center gap-2 rounded px-2 py-1.5\">\n <div className=\"h-3.5 w-3.5 rounded bg-muted animate-pulse\" />\n <div\n className=\"h-3 rounded bg-muted animate-pulse\"\n style={{ width: `${60 + i * 20}px` }}\n />\n </div>\n ))}\n </div>\n );\n}\n\nfunction LoadingSkeletonRow() {\n return (\n <div className=\"flex items-center gap-2 rounded px-2 py-1.5\">\n <div className=\"h-3.5 w-3.5 rounded bg-muted animate-pulse\" />\n <div className=\"h-3 w-24 rounded bg-muted animate-pulse\" />\n </div>\n );\n}\n\nexport const MentionPopover = forwardRef<\n MentionPopoverRef,\n MentionPopoverProps\n>(function MentionPopover(props, ref) {\n const {\n type,\n position,\n mentionItems,\n skills,\n commands = [],\n hint,\n isLoading,\n query,\n onSelectMention,\n onSelectSkill,\n onSelectCommand,\n onClose,\n } = props;\n\n const [selectedIndex, setSelectedIndex] = useState(0);\n const listRef = useRef<HTMLDivElement>(null);\n\n const itemCount =\n type === \"@\" ? mentionItems.length : commands.length + skills.length;\n\n // Group mention items by section for @ popover\n const groupedMentions = React.useMemo(() => {\n if (type !== \"@\") return [];\n const groups = new Map<string, MentionItem[]>();\n for (const item of mentionItems) {\n const section = item.section || \"Other\";\n if (!groups.has(section)) groups.set(section, []);\n groups.get(section)!.push(item);\n }\n // Sort: Agents first, then Connected Agents, then template-specific,\n // then Files, then Other\n const sorted: { section: string; items: MentionItem[] }[] = [];\n const knownSections = new Set([\n \"Agents\",\n \"Connected Agents\",\n \"Files\",\n \"Other\",\n ]);\n // Agents first\n if (groups.has(\"Agents\")) {\n sorted.push({ section: \"Agents\", items: groups.get(\"Agents\")! });\n groups.delete(\"Agents\");\n }\n if (groups.has(\"Connected Agents\")) {\n sorted.push({\n section: \"Connected Agents\",\n items: groups.get(\"Connected Agents\")!,\n });\n groups.delete(\"Connected Agents\");\n }\n // Template-specific sections (anything not in knownSections)\n for (const [section, items] of groups) {\n if (!knownSections.has(section)) {\n sorted.push({ section, items });\n }\n }\n // Files\n if (groups.has(\"Files\")) {\n sorted.push({ section: \"Files\", items: groups.get(\"Files\")! });\n }\n // Other\n if (groups.has(\"Other\")) {\n sorted.push({ section: \"Other\", items: groups.get(\"Other\")! });\n }\n return sorted;\n }, [type, mentionItems]);\n\n // Flat list of mention items in section order for keyboard index tracking\n const flatMentionItems = React.useMemo(() => {\n return groupedMentions.flatMap((g) => g.items);\n }, [groupedMentions]);\n\n // Reset selection when items change\n useEffect(() => {\n setSelectedIndex(0);\n }, [mentionItems, skills, query]);\n\n // Scroll selected item into view\n useEffect(() => {\n const container = listRef.current;\n if (!container) return;\n // Find the actual item element by data attribute\n const selected = container.querySelector(\n `[data-mention-index=\"${selectedIndex}\"]`,\n ) as HTMLElement | undefined;\n if (selected) {\n selected.scrollIntoView({ block: \"nearest\" });\n }\n }, [selectedIndex]);\n\n useImperativeHandle(ref, () => ({\n moveUp: () => {\n setSelectedIndex((prev) =>\n prev <= 0 ? Math.max(0, itemCount - 1) : prev - 1,\n );\n },\n moveDown: () => {\n setSelectedIndex((prev) => (prev >= itemCount - 1 ? 0 : prev + 1));\n },\n getSelectedIndex: () => selectedIndex,\n getSelectedMention: () => flatMentionItems[selectedIndex] ?? null,\n getSelectedCommand: () => {\n if (type !== \"/\" || selectedIndex >= commands.length) return null;\n return commands[selectedIndex] ?? null;\n },\n }));\n\n if (!position) return null;\n\n const content = (\n <>\n {/* Backdrop to capture outside clicks */}\n <div className=\"fixed inset-0 z-[9998]\" onClick={onClose} />\n <div\n className=\"fixed z-[9999] w-[320px] overflow-y-auto rounded-lg border border-border bg-popover shadow-lg\"\n style={{\n bottom: `calc(100vh - ${position.top}px + 4px)`,\n left: Math.max(8, Math.min(position.left, window.innerWidth - 336)),\n maxHeight: Math.min(320, position.top - 8),\n }}\n >\n {isLoading && itemCount === 0 ? (\n <LoadingSkeleton />\n ) : itemCount === 0 ? (\n <div className=\"px-3 py-4 text-center text-xs text-muted-foreground\">\n {type === \"@\" ? (\n query ? (\n \"No results found\"\n ) : (\n \"Type to search...\"\n )\n ) : hint ? (\n <HintWithLink hint={hint} />\n ) : (\n \"No skills available\"\n )}\n </div>\n ) : (\n <div ref={listRef} className=\"p-1\">\n {isLoading && <LoadingSkeletonRow />}\n {type === \"@\"\n ? (() => {\n let flatIndex = 0;\n return groupedMentions.map((group) => (\n <div key={group.section}>\n <div className=\"px-2 pt-2 pb-1 text-[10px] font-medium text-muted-foreground/70 uppercase tracking-wider\">\n {group.section}\n </div>\n {group.items.map((item) => {\n const idx = flatIndex++;\n return (\n <button\n key={item.id}\n data-mention-index={idx}\n className={`flex w-full items-center gap-2 rounded px-2 py-1.5 text-left text-sm ${\n idx === selectedIndex\n ? \"bg-accent text-accent-foreground\"\n : \"hover:bg-accent/50\"\n }`}\n onMouseEnter={() => setSelectedIndex(idx)}\n onClick={() => onSelectMention(item)}\n >\n <MentionItemIcon icon={item.icon} />\n <span className=\"truncate text-sm\">\n {item.label}\n </span>\n {item.description && (\n <span className=\"ml-auto shrink-0 truncate max-w-[160px] text-xs text-muted-foreground\">\n {item.description}\n </span>\n )}\n </button>\n );\n })}\n </div>\n ));\n })()\n : (() => {\n let idx = 0;\n return (\n <>\n {commands.length > 0 && (\n <div>\n <div className=\"px-2 pt-2 pb-1 text-[10px] font-medium text-muted-foreground/70 uppercase tracking-wider\">\n Commands\n </div>\n {commands.map((cmd) => {\n const i = idx++;\n return (\n <button\n key={cmd.name}\n data-mention-index={i}\n className={`flex w-full items-center gap-2 rounded px-2 py-1.5 text-left text-sm ${\n i === selectedIndex\n ? \"bg-accent text-accent-foreground\"\n : \"hover:bg-accent/50\"\n }`}\n onMouseEnter={() => setSelectedIndex(i)}\n onClick={() => onSelectCommand?.(cmd)}\n >\n <CommandIcon icon={cmd.icon} />\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm\">\n /{cmd.name}\n </span>\n {cmd.description && (\n <span className=\"block truncate text-xs text-muted-foreground\">\n {cmd.description}\n </span>\n )}\n </span>\n </button>\n );\n })}\n </div>\n )}\n {skills.length > 0 && (\n <div>\n {commands.length > 0 && (\n <div className=\"px-2 pt-2 pb-1 text-[10px] font-medium text-muted-foreground/70 uppercase tracking-wider\">\n Skills\n </div>\n )}\n {(skills as SkillResult[]).map((skill) => {\n const i = idx++;\n return (\n <button\n key={skill.path}\n data-mention-index={i}\n className={`flex w-full items-center gap-2 rounded px-2 py-1.5 text-left text-sm ${\n i === selectedIndex\n ? \"bg-accent text-accent-foreground\"\n : \"hover:bg-accent/50\"\n }`}\n onMouseEnter={() => setSelectedIndex(i)}\n onClick={() => onSelectSkill(skill)}\n >\n <IconStack2 {...iconProps} />\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm\">\n {skill.name}\n </span>\n {skill.description && (\n <span className=\"block truncate text-xs text-muted-foreground\">\n {skill.description}\n </span>\n )}\n </span>\n </button>\n );\n })}\n </div>\n )}\n </>\n );\n })()}\n </div>\n )}\n </div>\n </>\n );\n\n return createPortal(content, document.body);\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TiptapComposer.d.ts","sourceRoot":"","sources":["../../../src/client/composer/TiptapComposer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAON,MAAM,OAAO,CAAC;AA2Bf,OAAO,KAAK,EAGV,SAAS,EAGV,MAAM,YAAY,CAAC;AAOpB,MAAM,WAAW,oBAAoB;IACnC,KAAK,IAAI,IAAI,CAAC;CACf;AAsHD,KAAK,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAEjC,UAAU,mBAAmB;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAC3C,oFAAoF;IACpF,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC;IAC3D,4FAA4F;IAC5F,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,0FAA0F;IAC1F,iBAAiB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACpC,qFAAqF;IACrF,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,mEAAmE;IACnE,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC5C,oEAAoE;IACpE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,eAAe,CAAC,EAAE,KAAK,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC,CAAC;IACH,uCAAuC;IACvC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxD,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAwQD,wBAAgB,cAAc,CAAC,EAC7B,WAAgC,EAChC,QAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,YAAmB,EACnB,aAAa,EACb,eAAe,EACf,aAAa,EACb,UAAU,GACX,EAAE,mBAAmB,2CAs2BrB"}
1
+ {"version":3,"file":"TiptapComposer.d.ts","sourceRoot":"","sources":["../../../src/client/composer/TiptapComposer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAON,MAAM,OAAO,CAAC;AA6Bf,OAAO,KAAK,EAGV,SAAS,EAGV,MAAM,YAAY,CAAC;AAOpB,MAAM,WAAW,oBAAoB;IACnC,KAAK,IAAI,IAAI,CAAC;CACf;AAwHD,KAAK,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAEjC,UAAU,mBAAmB;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAC3C,oFAAoF;IACpF,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC;IAC3D,4FAA4F;IAC5F,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,0FAA0F;IAC1F,iBAAiB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACpC,qFAAqF;IACrF,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,mEAAmE;IACnE,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC5C,oEAAoE;IACpE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,eAAe,CAAC,EAAE,KAAK,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC,CAAC;IACH,uCAAuC;IACvC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxD,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAkRD,wBAAgB,cAAc,CAAC,EAC7B,WAAgC,EAChC,QAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,YAAmB,EACnB,aAAa,EACb,eAAe,EACf,aAAa,EACb,UAAU,GACX,EAAE,mBAAmB,2CAs2BrB"}
@@ -10,7 +10,7 @@ import { MentionReference } from "./extensions/MentionReference.js";
10
10
  import { MentionPopover } from "./MentionPopover.js";
11
11
  import { useMentionSearch } from "./use-mention-search.js";
12
12
  import { useSkills } from "./use-skills.js";
13
- import { IconArrowUp, IconCheck, IconChevronDown, IconBulb, IconClock, IconBolt, IconTool, IconX, } from "@tabler/icons-react";
13
+ import { IconArrowUp, IconCheck, IconChevronDown, IconBulb, IconClock, IconBolt, IconTool, IconX, IconClipboardList, IconPencil, } from "@tabler/icons-react";
14
14
  import * as PopoverPrimitive from "@radix-ui/react-popover";
15
15
  import { useVoiceDictation } from "./useVoiceDictation.js";
16
16
  import { VoiceButton, VoiceRecordingOverlay } from "./VoiceButton.js";
@@ -21,6 +21,8 @@ const BUILT_IN_COMMANDS = [
21
21
  { name: "clear", description: "Start a new chat", icon: "clear" },
22
22
  { name: "new", description: "Start a new chat", icon: "new" },
23
23
  { name: "history", description: "Browse chat history", icon: "history" },
24
+ { name: "plan", description: "Switch to read-only planning", icon: "plan" },
25
+ { name: "act", description: "Switch back to acting", icon: "act" },
24
26
  { name: "help", description: "Show available commands", icon: "help" },
25
27
  ];
26
28
  const COMPOSER_MODE_CONFIGS = {
@@ -84,7 +86,7 @@ Use manage-automations with action=define to create it. Ask clarifying questions
84
86
  messagePrefix: "Create a tool: ",
85
87
  getContext: (prompt) => `The user wants to create an interactive tool (mini app). Their description: "${prompt}"
86
88
 
87
- Use the create-tool action with Alpine.js HTML content. The tool runs as a sandboxed iframe with Tailwind CSS.
89
+ Use the create-tool action with Alpine.js HTML content. The tool runs as a sandboxed iframe with Tailwind CSS and modest default canvas padding. For edge-to-edge layouts, put data-tool-layout="full-bleed" on the outermost element.
88
90
 
89
91
  After creating the tool, navigate the user to it with set-url-path using pathname "/tools/<id>".
90
92
 
@@ -98,13 +100,16 @@ function ComposerModeChip({ mode, onRemove, }) {
98
100
  }
99
101
  function ModeSelector({ mode, onChange, }) {
100
102
  const [open, setOpen] = useState(false);
101
- return (_jsxs(PopoverPrimitive.Root, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverPrimitive.Trigger, { asChild: true, children: _jsxs("button", { type: "button", className: "shrink-0 flex items-center gap-1 rounded-md px-2 py-1 text-[12px] font-medium text-muted-foreground hover:text-foreground hover:bg-accent/50", children: [mode === "build" ? "Act" : "Plan", _jsx(IconChevronDown, { className: "h-3 w-3 opacity-60" })] }) }), _jsx(PopoverPrimitive.Portal, { children: _jsxs(PopoverPrimitive.Content, { side: "top", align: "end", sideOffset: 6, className: "w-60 rounded-lg border border-border bg-popover shadow-lg z-50 py-1 animate-in fade-in-0 zoom-in-95", style: { fontSize: 13 }, children: [_jsxs("button", { type: "button", onClick: () => {
103
+ const ActiveIcon = mode === "build" ? IconPencil : IconClipboardList;
104
+ return (_jsxs(PopoverPrimitive.Root, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverPrimitive.Trigger, { asChild: true, children: _jsxs("button", { type: "button", "aria-label": mode === "build" ? "Act mode" : "Plan mode", title: "Shift+Tab toggles Act and Plan", className: `shrink-0 flex items-center gap-1 rounded-md px-2 py-1 text-[12px] font-medium hover:bg-accent/50 ${mode === "plan"
105
+ ? "text-amber-700 dark:text-amber-300"
106
+ : "text-muted-foreground hover:text-foreground"}`, children: [_jsx(ActiveIcon, { className: "h-3.5 w-3.5" }), mode === "build" ? "Act" : "Plan", _jsx(IconChevronDown, { className: "h-3 w-3 opacity-60" })] }) }), _jsx(PopoverPrimitive.Portal, { children: _jsxs(PopoverPrimitive.Content, { side: "top", align: "end", sideOffset: 6, className: "w-60 rounded-lg border border-border bg-popover shadow-lg z-50 py-1 animate-in fade-in-0 zoom-in-95", style: { fontSize: 13 }, children: [_jsxs("button", { type: "button", onClick: () => {
102
107
  onChange("build");
103
108
  setOpen(false);
104
- }, className: "flex w-full items-center gap-3 px-3 py-2 hover:bg-accent/50 text-left", children: [_jsxs("div", { className: "flex-1 min-w-0", children: [_jsx("span", { className: "font-medium text-foreground text-[13px]", children: "Act" }), _jsx("p", { className: "text-[11px] text-muted-foreground mt-0.5", children: "Generate and make edits directly" })] }), mode === "build" && (_jsx(IconCheck, { className: "h-3.5 w-3.5 shrink-0 text-blue-500" }))] }), _jsxs("button", { type: "button", onClick: () => {
109
+ }, className: "flex w-full items-center gap-3 px-3 py-2 hover:bg-accent/50 text-left", children: [_jsx(IconPencil, { className: "h-4 w-4 shrink-0 text-muted-foreground" }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsx("span", { className: "font-medium text-foreground text-[13px]", children: "Act" }), _jsx("p", { className: "text-[11px] text-muted-foreground mt-0.5", children: "Use tools and make approved changes" })] }), mode === "build" && (_jsx(IconCheck, { className: "h-3.5 w-3.5 shrink-0 text-blue-500" }))] }), _jsxs("button", { type: "button", onClick: () => {
105
110
  onChange("plan");
106
111
  setOpen(false);
107
- }, className: "flex w-full items-center gap-3 px-3 py-2 hover:bg-accent/50 text-left", children: [_jsxs("div", { className: "flex-1 min-w-0", children: [_jsx("span", { className: "font-medium text-foreground text-[13px]", children: "Plan" }), _jsx("p", { className: "text-[11px] text-muted-foreground mt-0.5", children: "Collaborate on an approach before taking action" })] }), mode === "plan" && (_jsx(IconCheck, { className: "h-3.5 w-3.5 shrink-0 text-blue-500" }))] })] }) })] }));
112
+ }, className: "flex w-full items-center gap-3 px-3 py-2 hover:bg-accent/50 text-left", children: [_jsx(IconClipboardList, { className: "h-4 w-4 shrink-0 text-amber-600 dark:text-amber-300" }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsx("span", { className: "font-medium text-foreground text-[13px]", children: "Plan" }), _jsx("p", { className: "text-[11px] text-muted-foreground mt-0.5", children: "Read-only research and approval first" })] }), mode === "plan" && (_jsx(IconCheck, { className: "h-3.5 w-3.5 shrink-0 text-blue-500" }))] })] }) })] }));
108
113
  }
109
114
  const FRIENDLY_MODEL_NAMES = {
110
115
  "grok-code-fast": "Grok Code Fast",
@@ -420,7 +425,7 @@ export function TiptapComposer({ placeholder = "Message agent...", disabled = fa
420
425
  return true;
421
426
  }
422
427
  }
423
- // Shift+Tab toggles build/plan mode
428
+ // Shift+Tab toggles Act/Plan mode
424
429
  if (event.key === "Tab" && event.shiftKey) {
425
430
  event.preventDefault();
426
431
  const current = execModeRef.current;