@agent-native/core 0.7.19 → 0.7.20

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 (258) 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 +200 -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/onboarding/OnboardingPanel.d.ts.map +1 -1
  85. package/dist/client/onboarding/OnboardingPanel.js +88 -6
  86. package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
  87. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  88. package/dist/client/settings/SettingsPanel.js +145 -9
  89. package/dist/client/settings/SettingsPanel.js.map +1 -1
  90. package/dist/client/settings/useBuilderStatus.d.ts +13 -0
  91. package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
  92. package/dist/client/settings/useBuilderStatus.js +50 -9
  93. package/dist/client/settings/useBuilderStatus.js.map +1 -1
  94. package/dist/client/sse-event-processor.d.ts +3 -0
  95. package/dist/client/sse-event-processor.d.ts.map +1 -1
  96. package/dist/client/sse-event-processor.js +88 -7
  97. package/dist/client/sse-event-processor.js.map +1 -1
  98. package/dist/client/tools/ToolsListPage.d.ts.map +1 -1
  99. package/dist/client/tools/ToolsListPage.js +16 -1
  100. package/dist/client/tools/ToolsListPage.js.map +1 -1
  101. package/dist/client/tools/ToolsSidebarSection.d.ts.map +1 -1
  102. package/dist/client/tools/ToolsSidebarSection.js +63 -8
  103. package/dist/client/tools/ToolsSidebarSection.js.map +1 -1
  104. package/dist/client/tools/tool-order.d.ts +7 -0
  105. package/dist/client/tools/tool-order.d.ts.map +1 -0
  106. package/dist/client/tools/tool-order.js +47 -0
  107. package/dist/client/tools/tool-order.js.map +1 -0
  108. package/dist/client/transcription/BuilderTranscriptionCta.d.ts.map +1 -1
  109. package/dist/client/transcription/BuilderTranscriptionCta.js +71 -6
  110. package/dist/client/transcription/BuilderTranscriptionCta.js.map +1 -1
  111. package/dist/client/use-send-to-agent-chat.d.ts.map +1 -1
  112. package/dist/client/use-send-to-agent-chat.js +11 -3
  113. package/dist/client/use-send-to-agent-chat.js.map +1 -1
  114. package/dist/client/useProductionAgent.d.ts.map +1 -1
  115. package/dist/client/useProductionAgent.js +1 -1
  116. package/dist/client/useProductionAgent.js.map +1 -1
  117. package/dist/db/client.d.ts.map +1 -1
  118. package/dist/db/client.js +5 -1
  119. package/dist/db/client.js.map +1 -1
  120. package/dist/deploy/build.d.ts +1 -0
  121. package/dist/deploy/build.d.ts.map +1 -1
  122. package/dist/deploy/build.js +4 -1
  123. package/dist/deploy/build.js.map +1 -1
  124. package/dist/oauth-tokens/index.d.ts +1 -1
  125. package/dist/oauth-tokens/index.d.ts.map +1 -1
  126. package/dist/oauth-tokens/index.js +1 -1
  127. package/dist/oauth-tokens/index.js.map +1 -1
  128. package/dist/oauth-tokens/store.d.ts.map +1 -1
  129. package/dist/oauth-tokens/store.js +6 -0
  130. package/dist/oauth-tokens/store.js.map +1 -1
  131. package/dist/observability/store.d.ts.map +1 -1
  132. package/dist/observability/store.js +19 -19
  133. package/dist/observability/store.js.map +1 -1
  134. package/dist/onboarding/default-steps.d.ts.map +1 -1
  135. package/dist/onboarding/default-steps.js +95 -61
  136. package/dist/onboarding/default-steps.js.map +1 -1
  137. package/dist/onboarding/plugin.d.ts.map +1 -1
  138. package/dist/onboarding/plugin.js +17 -8
  139. package/dist/onboarding/plugin.js.map +1 -1
  140. package/dist/org/migrations.js +2 -2
  141. package/dist/org/migrations.js.map +1 -1
  142. package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
  143. package/dist/scripts/agent-engines/list-agent-engines.js +2 -3
  144. package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
  145. package/dist/scripts/db/exec.d.ts +2 -1
  146. package/dist/scripts/db/exec.d.ts.map +1 -1
  147. package/dist/scripts/db/exec.js +264 -61
  148. package/dist/scripts/db/exec.js.map +1 -1
  149. package/dist/scripts/db/schema.d.ts.map +1 -1
  150. package/dist/scripts/db/schema.js +16 -4
  151. package/dist/scripts/db/schema.js.map +1 -1
  152. package/dist/scripts/dev/index.d.ts.map +1 -1
  153. package/dist/scripts/dev/index.js +36 -11
  154. package/dist/scripts/dev/index.js.map +1 -1
  155. package/dist/scripts/manage-agent-loop-settings.d.ts +7 -0
  156. package/dist/scripts/manage-agent-loop-settings.d.ts.map +1 -0
  157. package/dist/scripts/manage-agent-loop-settings.js +63 -0
  158. package/dist/scripts/manage-agent-loop-settings.js.map +1 -0
  159. package/dist/scripts/runner.d.ts.map +1 -1
  160. package/dist/scripts/runner.js +11 -0
  161. package/dist/scripts/runner.js.map +1 -1
  162. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  163. package/dist/server/agent-chat-plugin.js +60 -18
  164. package/dist/server/agent-chat-plugin.js.map +1 -1
  165. package/dist/server/app-url.d.ts +5 -4
  166. package/dist/server/app-url.d.ts.map +1 -1
  167. package/dist/server/app-url.js +8 -4
  168. package/dist/server/app-url.js.map +1 -1
  169. package/dist/server/auth.d.ts +8 -0
  170. package/dist/server/auth.d.ts.map +1 -1
  171. package/dist/server/auth.js +82 -29
  172. package/dist/server/auth.js.map +1 -1
  173. package/dist/server/better-auth-instance.d.ts.map +1 -1
  174. package/dist/server/better-auth-instance.js +16 -5
  175. package/dist/server/better-auth-instance.js.map +1 -1
  176. package/dist/server/builder-browser.d.ts +12 -0
  177. package/dist/server/builder-browser.d.ts.map +1 -1
  178. package/dist/server/builder-browser.js +36 -4
  179. package/dist/server/builder-browser.js.map +1 -1
  180. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  181. package/dist/server/core-routes-plugin.js +350 -53
  182. package/dist/server/core-routes-plugin.js.map +1 -1
  183. package/dist/server/credential-provider.d.ts +21 -3
  184. package/dist/server/credential-provider.d.ts.map +1 -1
  185. package/dist/server/credential-provider.js +51 -21
  186. package/dist/server/credential-provider.js.map +1 -1
  187. package/dist/server/google-oauth.d.ts +3 -0
  188. package/dist/server/google-oauth.d.ts.map +1 -1
  189. package/dist/server/google-oauth.js +27 -3
  190. package/dist/server/google-oauth.js.map +1 -1
  191. package/dist/server/index.d.ts +4 -3
  192. package/dist/server/index.d.ts.map +1 -1
  193. package/dist/server/index.js +4 -3
  194. package/dist/server/index.js.map +1 -1
  195. package/dist/server/schema-prompt.d.ts.map +1 -1
  196. package/dist/server/schema-prompt.js +2 -1
  197. package/dist/server/schema-prompt.js.map +1 -1
  198. package/dist/server/security-headers.d.ts +3 -0
  199. package/dist/server/security-headers.d.ts.map +1 -1
  200. package/dist/server/security-headers.js +7 -1
  201. package/dist/server/security-headers.js.map +1 -1
  202. package/dist/server/ssr-handler.d.ts.map +1 -1
  203. package/dist/server/ssr-handler.js +24 -4
  204. package/dist/server/ssr-handler.js.map +1 -1
  205. package/dist/templates/default/_gitignore +5 -1
  206. package/dist/templates/default/app/root.tsx +1 -0
  207. package/dist/templates/default/public/favicon.svg +3 -3
  208. package/dist/templates/default/public/icon-180.svg +3 -3
  209. package/dist/templates/default/public/icon-192.svg +3 -3
  210. package/dist/templates/default/public/icon-512.svg +3 -3
  211. package/dist/templates/workspace-core/AGENTS.md +23 -7
  212. package/dist/templates/workspace-core/package.json +2 -1
  213. package/dist/templates/workspace-core/src/credentials.ts +22 -11
  214. package/dist/templates/workspace-root/.env.example +7 -0
  215. package/dist/templates/workspace-root/README.md +6 -3
  216. package/dist/templates/workspace-root/_gitignore +3 -0
  217. package/dist/templates/workspace-root/package.json +3 -1
  218. package/dist/templates/workspace-root/scripts/workspace-dev.ts +410 -0
  219. package/dist/tools/actions.d.ts.map +1 -1
  220. package/dist/tools/actions.js +2 -0
  221. package/dist/tools/actions.js.map +1 -1
  222. package/dist/tools/html-shell.d.ts.map +1 -1
  223. package/dist/tools/html-shell.js +13 -1
  224. package/dist/tools/html-shell.js.map +1 -1
  225. package/dist/tools/store.d.ts.map +1 -1
  226. package/dist/tools/store.js +10 -10
  227. package/dist/tools/store.js.map +1 -1
  228. package/dist/tracking/providers.d.ts +1 -0
  229. package/dist/tracking/providers.d.ts.map +1 -1
  230. package/dist/tracking/providers.js +72 -0
  231. package/dist/tracking/providers.js.map +1 -1
  232. package/dist/vite/action-types-plugin.d.ts.map +1 -1
  233. package/dist/vite/action-types-plugin.js +106 -9
  234. package/dist/vite/action-types-plugin.js.map +1 -1
  235. package/dist/vite/client.d.ts.map +1 -1
  236. package/dist/vite/client.js +67 -2
  237. package/dist/vite/client.js.map +1 -1
  238. package/docs/content/authentication.md +17 -13
  239. package/docs/content/deployment.md +11 -11
  240. package/docs/content/mcp-clients.md +2 -2
  241. package/docs/content/onboarding.md +32 -30
  242. package/docs/content/security.md +1 -1
  243. package/docs/content/tools.md +4 -0
  244. package/package.json +2 -2
  245. package/src/templates/default/_gitignore +5 -1
  246. package/src/templates/default/app/root.tsx +1 -0
  247. package/src/templates/default/public/favicon.svg +3 -3
  248. package/src/templates/default/public/icon-180.svg +3 -3
  249. package/src/templates/default/public/icon-192.svg +3 -3
  250. package/src/templates/default/public/icon-512.svg +3 -3
  251. package/src/templates/workspace-core/AGENTS.md +23 -7
  252. package/src/templates/workspace-core/package.json +2 -1
  253. package/src/templates/workspace-core/src/credentials.ts +22 -11
  254. package/src/templates/workspace-root/.env.example +7 -0
  255. package/src/templates/workspace-root/README.md +6 -3
  256. package/src/templates/workspace-root/_gitignore +3 -0
  257. package/src/templates/workspace-root/package.json +3 -1
  258. package/src/templates/workspace-root/scripts/workspace-dev.ts +410 -0
@@ -1 +1 @@
1
- {"version":3,"file":"TiptapComposer.js","sourceRoot":"","sources":["../../../src/client/composer/TiptapComposer.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {\n useState,\n useRef,\n useEffect,\n useCallback,\n useImperativeHandle,\n useMemo,\n} from \"react\";\nimport {\n ComposerPrimitive,\n useComposer,\n useComposerRuntime,\n} from \"@assistant-ui/react\";\nimport { useEditor, EditorContent } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport { FileReference } from \"./extensions/FileReference.js\";\nimport { SkillReference } from \"./extensions/SkillReference.js\";\nimport { MentionReference } from \"./extensions/MentionReference.js\";\nimport { MentionPopover, type MentionPopoverRef } from \"./MentionPopover.js\";\nimport { useMentionSearch } from \"./use-mention-search.js\";\nimport { useSkills } from \"./use-skills.js\";\nimport {\n IconArrowUp,\n IconPlus,\n IconCheck,\n IconChevronDown,\n IconBulb,\n IconClock,\n IconBolt,\n IconTool,\n IconX,\n} from \"@tabler/icons-react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport type {\n MentionItem,\n SkillResult,\n Reference,\n SlashCommand,\n ComposerMode,\n} from \"./types.js\";\nimport { useVoiceDictation } from \"./useVoiceDictation.js\";\nimport { VoiceButton, VoiceRecordingOverlay } from \"./VoiceButton.js\";\nimport { ComposerPlusMenu } from \"./ComposerPlusMenu.js\";\nimport { sendToAgentChat } from \"../agent-chat.js\";\nimport { getComposerDraftKey } from \"./draft-key.js\";\n\nexport interface TiptapComposerHandle {\n focus(): void;\n}\n\nconst BUILT_IN_COMMANDS: SlashCommand[] = [\n { name: \"clear\", description: \"Start a new chat\", icon: \"clear\" },\n { name: \"new\", description: \"Start a new chat\", icon: \"new\" },\n { name: \"history\", description: \"Browse chat history\", icon: \"history\" },\n { name: \"help\", description: \"Show available commands\", icon: \"help\" },\n];\n\nconst COMPOSER_MODE_CONFIGS: Record<\n ComposerMode,\n {\n label: string;\n icon: React.ComponentType<{ className?: string }>;\n placeholder: string;\n messagePrefix: string;\n getContext: (prompt: string) => string;\n beforeSend?: () => void;\n }\n> = {\n skill: {\n label: \"Create Skill\",\n icon: IconBulb,\n placeholder: \"Describe the skill you want to create...\",\n messagePrefix: \"Create a skill: \",\n getContext: (prompt) =>\n `The user wants to create an agent skill. Their description: \"${prompt}\"\n\nFollow the create-skill pattern to build this. Before writing:\n\n1. **Determine the skill name** — derive a hyphen-case name from the description (e.g. \"code review\" → \"code-review\")\n2. **Determine the skill type** — Pattern (architectural rule), Workflow (step-by-step), or Generator (scaffolding)\n3. **Write the skill** as a personal resource at path \"skills/<name>.md\" using resource-write\n\nThe skill file MUST have YAML frontmatter with name and description (under 40 words), then markdown with:\n- Clear rule/purpose statement\n- Why this skill exists\n- How to follow it (with code examples where helpful)\n- Common violations to avoid\n- Related skills\n\nAfter creating, update the shared AGENTS.md resource to reference the new skill in its skills table.\n\nKeep the skill concise (under 500 lines) and actionable.`,\n },\n job: {\n label: \"Scheduled Task\",\n icon: IconClock,\n placeholder: \"Describe what should happen and when...\",\n messagePrefix: \"Create a recurring job: \",\n getContext: (prompt) =>\n `The user wants to create a recurring job. Their description: \"${prompt}\"\n\nUse the manage-jobs tool with action \"create\" to create this. You need to:\n1. Derive a hyphen-case name from the description\n2. Convert the schedule to a cron expression (e.g., \"every weekday at 9am\" → \"0 9 * * 1-5\")\n3. Write clear, self-contained instructions for what the agent should do each time the job runs\n4. Create it in personal scope\n\nThe job will run automatically on the schedule. Make the instructions specific — include which actions to call and what to do with results.`,\n },\n automation: {\n label: \"Create Automation\",\n icon: IconBolt,\n placeholder: \"Describe what you want to automate...\",\n messagePrefix: \"Create an automation: \",\n beforeSend: () => {\n window.dispatchEvent(\n new CustomEvent(\"agent-panel:set-mode\", {\n detail: { mode: \"chat\" },\n }),\n );\n },\n getContext: (prompt) =>\n `The user wants to create a new automation. Scope: personal. Their description: \"${prompt}\"\n\nUse manage-automations with action=define to create it. Ask clarifying questions if needed about what event to trigger on, conditions, and what actions to take.`,\n },\n tool: {\n label: \"Create Tool\",\n icon: IconTool,\n placeholder: \"Describe the interactive tool you want to build...\",\n messagePrefix: \"Create a tool: \",\n getContext: (prompt) =>\n `The user wants to create an interactive tool (mini app). Their description: \"${prompt}\"\n\nUse the create-tool action with Alpine.js HTML content. The tool runs as a sandboxed iframe with Tailwind CSS.\n\nAfter creating the tool, navigate the user to it with set-url-path using pathname \"/tools/<id>\".\n\nMake the tool functional and visually polished. Tools can use toolFetch() for external API calls, appAction()/appFetch() for app operations, toolData for tool-specific persistence, and dbQuery()/dbExec() only for existing app tables.`,\n },\n};\n\nfunction ComposerModeChip({\n mode,\n onRemove,\n}: {\n mode: ComposerMode;\n onRemove: () => void;\n}) {\n const config = COMPOSER_MODE_CONFIGS[mode];\n const Icon = config.icon;\n return (\n <span className=\"inline-flex items-center gap-1 rounded-md border border-border bg-muted/50 px-1.5 py-0.5 text-xs font-medium text-foreground\">\n <Icon className=\"h-3 w-3 text-muted-foreground\" />\n {config.label}\n <button\n type=\"button\"\n onClick={onRemove}\n className=\"ml-0.5 rounded-sm text-muted-foreground hover:text-foreground cursor-pointer\"\n >\n <IconX className=\"h-3 w-3\" />\n </button>\n </span>\n );\n}\n\ntype ExecMode = \"build\" | \"plan\";\n\ninterface TiptapComposerProps {\n placeholder?: string;\n disabled?: boolean;\n focusRef?: React.Ref<TiptapComposerHandle>;\n /** When provided, called instead of composerRuntime.send(). Used for queue mode. */\n onSubmit?: (text: string, references: Reference[]) => void;\n /** Custom action button (e.g. stop button) to render instead of the default send button. */\n actionButton?: React.ReactNode;\n /** Extra button to render alongside the default send button (e.g. stop while running). */\n extraActionButton?: React.ReactNode;\n /** Custom attachment button to render instead of ComposerPrimitive.AddAttachment. */\n attachButton?: React.ReactNode;\n /** Called when a slash command (e.g. /clear, /help) is executed */\n onSlashCommand?: (command: string) => void;\n /** Current execution mode (build/plan) */\n execMode?: ExecMode;\n /** Callback to change execution mode */\n onExecModeChange?: (mode: ExecMode) => void;\n /** Show the microphone button for voice dictation. Default true. */\n voiceEnabled?: boolean;\n /** Selected model override for this conversation */\n selectedModel?: string;\n /** Available models grouped by provider */\n availableModels?: Array<{\n engine: string;\n label: string;\n models: string[];\n configured: boolean;\n }>;\n /** Callback when user picks a model */\n onModelChange?: (model: string, engine: string) => void;\n /** Stable scope for persisted drafts, usually the active thread or tab id. */\n draftScope?: string;\n}\n\nfunction ModeSelector({\n mode,\n onChange,\n}: {\n mode: ExecMode;\n onChange: (mode: ExecMode) => void;\n}) {\n const [open, setOpen] = useState(false);\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Trigger asChild>\n <button\n type=\"button\"\n 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\"\n >\n {mode === \"build\" ? \"Act\" : \"Plan\"}\n <IconChevronDown className=\"h-3 w-3 opacity-60\" />\n </button>\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n side=\"top\"\n align=\"end\"\n sideOffset={6}\n className=\"w-60 rounded-lg border border-border bg-popover shadow-lg z-50 py-1 animate-in fade-in-0 zoom-in-95\"\n style={{ fontSize: 13 }}\n >\n <button\n type=\"button\"\n onClick={() => {\n onChange(\"build\");\n setOpen(false);\n }}\n className=\"flex w-full items-center gap-3 px-3 py-2 hover:bg-accent/50 text-left\"\n >\n <div className=\"flex-1 min-w-0\">\n <span className=\"font-medium text-foreground text-[13px]\">\n Act\n </span>\n <p className=\"text-[11px] text-muted-foreground mt-0.5\">\n Generate and make edits directly\n </p>\n </div>\n {mode === \"build\" && (\n <IconCheck className=\"h-3.5 w-3.5 shrink-0 text-blue-500\" />\n )}\n </button>\n <button\n type=\"button\"\n onClick={() => {\n onChange(\"plan\");\n setOpen(false);\n }}\n className=\"flex w-full items-center gap-3 px-3 py-2 hover:bg-accent/50 text-left\"\n >\n <div className=\"flex-1 min-w-0\">\n <span className=\"font-medium text-foreground text-[13px]\">\n Plan\n </span>\n <p className=\"text-[11px] text-muted-foreground mt-0.5\">\n Collaborate on an approach before taking action\n </p>\n </div>\n {mode === \"plan\" && (\n <IconCheck className=\"h-3.5 w-3.5 shrink-0 text-blue-500\" />\n )}\n </button>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n}\n\nconst FRIENDLY_MODEL_NAMES: Record<string, string> = {\n \"grok-code-fast\": \"Grok Code Fast\",\n \"qwen3-coder\": \"Qwen3 Coder\",\n \"kimi-k2-5\": \"Kimi K2.5\",\n \"deepseek-v3-1\": \"DeepSeek v3.1\",\n};\n\nfunction friendlyModelName(model: string): string {\n if (FRIENDLY_MODEL_NAMES[model]) return FRIENDLY_MODEL_NAMES[model];\n // Claude: claude-{tier}-{major}-{minor}[-dateYYYYMMDD] → Tier Major.Minor\n const claude = model.match(\n /^claude-(opus|sonnet|haiku)-(\\d+)-(\\d+)(?:-\\d{8,})?$/,\n );\n if (claude) {\n const tier = claude[1][0].toUpperCase() + claude[1].slice(1);\n return `${tier} ${claude[2]}.${claude[3]}`;\n }\n // GPT: gpt-{major}-{minor}[-suffix] or gpt-{major}.{minor}[-suffix]\n if (model.startsWith(\"gpt-\")) {\n const rest = model.slice(4);\n const gpt = rest.match(/^(\\d+)[.-](\\d+)(?:[.-](.+))?$/);\n if (gpt) {\n const suffix = gpt[3]\n ? \" \" +\n gpt[3]\n .split(\"-\")\n .map((s) => s[0].toUpperCase() + s.slice(1))\n .join(\" \")\n : \"\";\n return `GPT-${gpt[1]}.${gpt[2]}${suffix}`;\n }\n return `GPT-${rest}`;\n }\n if (/^o\\d/.test(model)) return model;\n // Gemini: gemini-{major}-{minor}-{variant}[-preview] → Gemini Major.Minor Variant\n const geminiVersioned = model.match(\n /^gemini-(\\d+)-(\\d+)-(.+?)(?:-preview)?$/,\n );\n if (geminiVersioned) {\n const variant = geminiVersioned[3]\n .split(\"-\")\n .map((s) => s[0].toUpperCase() + s.slice(1))\n .join(\" \");\n return `Gemini ${geminiVersioned[1]}.${geminiVersioned[2]} ${variant}`;\n }\n // Gemini: gemini-{version.parts}[-preview] → Gemini Version Parts\n const gemini = model.match(/^gemini-(.+?)(?:-preview)?$/);\n if (gemini) {\n const parts = gemini[1]\n .split(\"-\")\n .map((s) => s[0].toUpperCase() + s.slice(1))\n .join(\" \");\n return `Gemini ${parts}`;\n }\n return model;\n}\n\n/**\n * Deduplicate models to only the latest version per family.\n * e.g. [opus-4-7, opus-4-6, opus-4-5] → [opus-4-7]\n */\nfunction latestModelsOnly(models: string[]): string[] {\n const seen = new Set<string>();\n return models.filter((m) => {\n // Claude: family = tier (opus/sonnet/haiku)\n const claude = m.match(/^claude-(opus|sonnet|haiku)-/);\n if (claude) {\n if (seen.has(claude[1])) return false;\n seen.add(claude[1]);\n return true;\n }\n // GPT: family = gpt-{major} (e.g. gpt-5.4 and gpt-5.4-mini are different)\n // OpenAI reasoning: each is its own family\n // Gemini: family = gemini-{major} + variant\n const gemini = m.match(/^gemini-(\\d+(?:\\.\\d+)?)-(.+?)(?:-preview)?$/);\n if (gemini) {\n const family = gemini[2]; // flash, pro, etc.\n if (seen.has(`gemini-${family}`)) return false;\n seen.add(`gemini-${family}`);\n return true;\n }\n return true;\n });\n}\n\nfunction ModelSelector({\n model,\n engines,\n onChange,\n}: {\n model: string;\n engines: Array<{\n engine: string;\n label: string;\n models: string[];\n configured: boolean;\n }>;\n onChange: (model: string, engine: string) => void;\n}) {\n const [open, setOpen] = useState(false);\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Trigger asChild>\n <button\n type=\"button\"\n 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\"\n >\n {friendlyModelName(model)}\n <IconChevronDown className=\"h-3 w-3 opacity-60\" />\n </button>\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n side=\"top\"\n align=\"end\"\n sideOffset={6}\n className=\"w-64 max-h-72 overflow-y-auto rounded-lg border border-border bg-popover shadow-lg z-50 py-1 animate-in fade-in-0 zoom-in-95\"\n style={{ fontSize: 13 }}\n >\n {engines.map((group) => {\n const models = latestModelsOnly(group.models);\n return (\n <div key={group.engine}>\n <div className=\"flex items-center gap-2 px-3 py-1.5\">\n <span className=\"text-[11px] font-medium text-muted-foreground uppercase tracking-wide\">\n {group.label}\n </span>\n {!group.configured && (\n <button\n type=\"button\"\n className=\"text-[10px] text-muted-foreground/60 hover:text-foreground cursor-pointer\"\n onClick={() => {\n window.dispatchEvent(\n new CustomEvent(\"agent-panel:open-settings\"),\n );\n setOpen(false);\n }}\n >\n needs API key\n </button>\n )}\n </div>\n {models.map((m) => (\n <button\n key={m}\n type=\"button\"\n onClick={() => {\n if (!group.configured) {\n window.dispatchEvent(\n new CustomEvent(\"agent-panel:open-settings\"),\n );\n setOpen(false);\n return;\n }\n onChange(m, group.engine);\n setOpen(false);\n }}\n className={`flex w-full items-center gap-3 px-3 py-1.5 text-left ${\n group.configured\n ? \"hover:bg-accent/50\"\n : \"opacity-40 cursor-default\"\n }`}\n >\n <span className=\"flex-1 min-w-0 text-[13px] text-foreground truncate\">\n {friendlyModelName(m)}\n </span>\n {m === model && group.configured && (\n <IconCheck className=\"h-3.5 w-3.5 shrink-0 text-blue-500\" />\n )}\n </button>\n ))}\n </div>\n );\n })}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n}\n\ntype PopoverState = {\n type: \"@\" | \"/\";\n position: { top: number; left: number };\n startPos: number;\n query: string;\n} | null;\n\nexport function TiptapComposer({\n placeholder = \"Message agent...\",\n disabled = false,\n focusRef,\n onSubmit,\n actionButton,\n extraActionButton,\n attachButton,\n onSlashCommand,\n execMode,\n onExecModeChange,\n voiceEnabled = true,\n selectedModel,\n availableModels,\n onModelChange,\n draftScope,\n}: TiptapComposerProps) {\n const [popover, setPopover] = useState<PopoverState>(null);\n const popoverRef = useRef<MentionPopoverRef>(null);\n const composerRuntime = useComposerRuntime();\n const [editorHasText, setEditorHasText] = useState(false);\n const composerText = useComposer((state) => state.text);\n const canSend = editorHasText && !disabled;\n const [composerMode, setComposerMode] = useState<ComposerMode | null>(null);\n const composerModeRef = useRef<ComposerMode | null>(null);\n const isMac =\n typeof navigator !== \"undefined\" &&\n /Mac|iPhone|iPad/.test(navigator.userAgent);\n\n // Refs for values accessed in handleKeyDown (ProseMirror doesn't re-bind)\n const popoverStateRef = useRef<PopoverState>(null);\n const execModeRef = useRef(execMode);\n execModeRef.current = execMode;\n const onExecModeChangeRef = useRef(onExecModeChange);\n onExecModeChangeRef.current = onExecModeChange;\n\n const { items: mentionItems, isLoading: mentionsLoading } = useMentionSearch(\n popover?.type === \"@\" ? popover.query : \"\",\n popover?.type === \"@\",\n );\n\n const {\n skills,\n hint,\n isLoading: skillsLoading,\n } = useSkills(popover?.type === \"/\");\n\n const filteredCommands = useMemo(() => {\n if (!popover || popover.type !== \"/\") return BUILT_IN_COMMANDS;\n const q = popover.query.toLowerCase();\n if (!q) return BUILT_IN_COMMANDS;\n return BUILT_IN_COMMANDS.filter(\n (c) =>\n c.name.toLowerCase().includes(q) ||\n c.description.toLowerCase().includes(q),\n );\n }, [popover]);\n\n const filteredSkills = useMemo(() => {\n if (!popover || popover.type !== \"/\") return skills;\n const q = popover.query.toLowerCase();\n if (!q) return skills;\n return skills.filter(\n (s) =>\n s.name.toLowerCase().includes(q) ||\n s.description?.toLowerCase().includes(q),\n );\n }, [skills, popover]);\n\n // Keep refs in sync with state\n const mentionItemsRef = useRef(mentionItems);\n mentionItemsRef.current = mentionItems;\n const filteredCommandsRef = useRef(filteredCommands);\n filteredCommandsRef.current = filteredCommands;\n const filteredSkillsRef = useRef(filteredSkills);\n filteredSkillsRef.current = filteredSkills;\n const onSlashCommandRef = useRef(onSlashCommand);\n onSlashCommandRef.current = onSlashCommand;\n\n const closePopover = useCallback(() => {\n setPopover(null);\n popoverStateRef.current = null;\n }, []);\n\n // Persist draft to localStorage so hot-reloads don't lose the prompt\n const draftKey = getComposerDraftKey(draftScope);\n const draftTimerRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n // Tiptap reads extension config once at init; ref keeps runtime prop\n // changes visible to Placeholder's function form.\n const placeholderRef = useRef(placeholder);\n useEffect(() => {\n placeholderRef.current = composerMode\n ? COMPOSER_MODE_CONFIGS[composerMode].placeholder\n : placeholder;\n }, [placeholder, composerMode]);\n\n const editor = useEditor({\n extensions: [\n StarterKit.configure({\n heading: false,\n horizontalRule: false,\n bulletList: false,\n orderedList: false,\n listItem: false,\n blockquote: false,\n codeBlock: false,\n strike: false,\n italic: false,\n bold: false,\n code: false,\n }),\n Placeholder.configure({\n placeholder: () => placeholderRef.current,\n emptyEditorClass: \"is-editor-empty\",\n showOnlyCurrent: false,\n }),\n FileReference,\n SkillReference,\n MentionReference,\n ],\n editable: !disabled,\n onCreate: ({ editor: ed }) => {\n // Restore draft on mount\n try {\n const saved = localStorage.getItem(draftKey);\n if (saved) {\n ed.commands.setContent(saved);\n ed.commands.focus(\"end\");\n setEditorHasText(ed.state.doc.textContent.trim().length > 0);\n }\n } catch {}\n },\n onUpdate: ({ editor: ed }) => {\n // Drive the send button's enabled state from the actual editor contents;\n // the composer runtime is only synced on submit, so its isEmpty lags.\n let hasContent = ed.state.doc.textContent.trim().length > 0;\n if (!hasContent) {\n ed.state.doc.descendants((node: any) => {\n if (\n node.type.name === \"mentionReference\" ||\n node.type.name === \"fileReference\" ||\n node.type.name === \"skillReference\"\n ) {\n hasContent = true;\n return false;\n }\n return true;\n });\n }\n setEditorHasText(hasContent);\n\n // Debounce-save draft to localStorage\n clearTimeout(draftTimerRef.current);\n draftTimerRef.current = setTimeout(() => {\n try {\n const html = ed.getHTML();\n const isEmpty = !ed.state.doc.textContent.trim();\n if (isEmpty) {\n localStorage.removeItem(draftKey);\n } else {\n localStorage.setItem(draftKey, html);\n }\n } catch {}\n }, 300);\n },\n editorProps: {\n attributes: {\n class:\n \"flex-1 resize-none bg-transparent text-sm text-foreground outline-none leading-[1.625rem] min-h-[3.25rem] max-h-[10rem] overflow-y-auto\",\n },\n handlePaste: (_view, event) => {\n const files = Array.from(event.clipboardData?.files ?? []).filter(\n (file) => file.type.startsWith(\"image/\"),\n );\n if (files.length === 0) return false;\n\n event.preventDefault();\n void Promise.all(\n files.map((file) => {\n // SimpleImageAttachmentAdapter uses file.name as the attachment id.\n // Clipboard images (e.g. screenshots) are typically all named\n // \"image.png\", so a second paste would replace the first instead of\n // appending. Prepend a unique token so each paste gets a distinct id.\n const uniqueName = `${Date.now()}-${Math.random().toString(36).slice(2)}-${file.name}`;\n return composerRuntime.addAttachment(\n new File([file], uniqueName, { type: file.type }),\n );\n }),\n ).catch((error) => {\n console.error(\"Error adding pasted attachment:\", error);\n });\n return true;\n },\n handleKeyDown: (view, event) => {\n const pop = popoverStateRef.current;\n\n // Handle popover keyboard nav\n if (pop) {\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n popoverRef.current?.moveUp();\n return true;\n }\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n popoverRef.current?.moveDown();\n return true;\n }\n if (event.key === \"Enter\") {\n event.preventDefault();\n const idx = popoverRef.current?.getSelectedIndex() ?? 0;\n const currentCommands = filteredCommandsRef.current;\n const currentSkills = filteredSkillsRef.current;\n if (pop.type === \"@\") {\n const item = popoverRef.current?.getSelectedMention();\n if (item) selectMention(view, pop, item);\n } else if (pop.type === \"/\") {\n const cmd = popoverRef.current?.getSelectedCommand();\n if (cmd) {\n executeCommand(view, pop, cmd);\n } else {\n const skillIdx = idx - currentCommands.length;\n if (currentSkills[skillIdx]) {\n selectSkill(view, pop, currentSkills[skillIdx]);\n }\n }\n }\n return true;\n }\n if (event.key === \"Escape\") {\n event.preventDefault();\n popoverStateRef.current = null;\n setPopover(null);\n return true;\n }\n if (event.key === \" \" && pop.query === \"\") {\n popoverStateRef.current = null;\n setPopover(null);\n return false;\n }\n }\n\n // Backspace removes composer mode chip when editor is empty\n if (event.key === \"Backspace\" && composerModeRef.current) {\n const { from, to } = view.state.selection;\n if (\n view.state.doc.textContent.trim() === \"\" &&\n from === to &&\n from <= 1\n ) {\n setComposerMode(null);\n composerModeRef.current = null;\n return true;\n }\n }\n\n // Shift+Tab toggles build/plan mode\n if (event.key === \"Tab\" && event.shiftKey) {\n event.preventDefault();\n const current = execModeRef.current;\n const cb = onExecModeChangeRef.current;\n if (current && cb) {\n cb(current === \"build\" ? \"plan\" : \"build\");\n }\n return true;\n }\n\n // Submit on Enter (Shift+Enter for newline)\n if (\n event.key === \"Enter\" &&\n !event.shiftKey &&\n !event.metaKey &&\n !event.ctrlKey\n ) {\n event.preventDefault();\n submitComposer();\n return true;\n }\n\n // Detect @ trigger — only when preceded by start-of-text, space, or newline\n // (not after alphanumeric chars, which would indicate an email address)\n if (event.key === \"@\") {\n const { from } = view.state.selection;\n const textBefore = view.state.doc.textBetween(\n Math.max(0, from - 1),\n from,\n );\n if (from === 1 || textBefore === \"\" || /\\s/.test(textBefore)) {\n const coords = view.coordsAtPos(from);\n setTimeout(() => {\n const state: PopoverState = {\n type: \"@\",\n position: { top: coords.top, left: coords.left },\n startPos: view.state.selection.from,\n query: \"\",\n };\n popoverStateRef.current = state;\n setPopover(state);\n }, 0);\n }\n return false;\n }\n\n // Detect / trigger (only at start of line or after whitespace)\n if (event.key === \"/\") {\n const { from } = view.state.selection;\n const textBefore = view.state.doc.textBetween(\n Math.max(0, from - 1),\n from,\n );\n if (from === 1 || textBefore === \"\" || /\\s/.test(textBefore)) {\n const coords = view.coordsAtPos(from);\n setTimeout(() => {\n const state: PopoverState = {\n type: \"/\",\n position: { top: coords.top, left: coords.left },\n startPos: view.state.selection.from,\n query: \"\",\n };\n popoverStateRef.current = state;\n setPopover(state);\n }, 0);\n }\n return false;\n }\n\n return false;\n },\n },\n });\n\n useImperativeHandle(focusRef, () => ({\n focus() {\n editor?.commands.focus(\"end\");\n },\n }));\n\n const handleSelectMode = useCallback(\n (mode: ComposerMode) => {\n setComposerMode(mode);\n composerModeRef.current = mode;\n setTimeout(() => editor?.commands.focus(\"end\"), 50);\n },\n [editor],\n );\n\n // --- Live voice transcription: text appears in the editor as the user speaks ---\n const voiceAnchorRef = useRef<number | null>(null);\n const prevVoiceInsertRef = useRef(\"\");\n\n const handleLiveUpdate = useCallback(\n (finalText: string, interimText: string) => {\n const ed = editor;\n if (!ed) return;\n\n if (voiceAnchorRef.current == null) {\n const { from } = ed.state.selection;\n const prevChar =\n from > 1 ? ed.state.doc.textBetween(from - 1, from) : \"\";\n if (prevChar && !/\\s/.test(prevChar)) {\n ed.chain().insertContent(\" \").run();\n }\n voiceAnchorRef.current = ed.state.selection.from;\n prevVoiceInsertRef.current = \"\";\n }\n\n const anchor = voiceAnchorRef.current;\n const prevLen = prevVoiceInsertRef.current.length;\n const newText = finalText + interimText;\n\n if (newText === prevVoiceInsertRef.current) return;\n\n ed.chain()\n .deleteRange({ from: anchor, to: anchor + prevLen })\n .insertContentAt(anchor, newText)\n .run();\n\n prevVoiceInsertRef.current = newText;\n },\n [editor],\n );\n\n const insertTranscript = useCallback(\n (text: string) => {\n const ed = editor;\n if (!ed) return;\n\n const anchor = voiceAnchorRef.current;\n if (anchor != null) {\n const prevLen = prevVoiceInsertRef.current.length;\n if (text) {\n ed.chain()\n .focus()\n .deleteRange({ from: anchor, to: anchor + prevLen })\n .insertContentAt(anchor, text + \" \")\n .run();\n } else if (prevLen > 0) {\n ed.chain()\n .deleteRange({ from: anchor, to: anchor + prevLen })\n .run();\n }\n voiceAnchorRef.current = null;\n prevVoiceInsertRef.current = \"\";\n } else if (text) {\n const { from } = ed.state.selection;\n const prevChar =\n from > 1 ? ed.state.doc.textBetween(from - 1, from) : \"\";\n const needsLead = prevChar && !/\\s/.test(prevChar);\n ed.chain()\n .focus()\n .insertContent((needsLead ? \" \" : \"\") + text + \" \")\n .run();\n }\n },\n [editor],\n );\n\n const voice = useVoiceDictation({\n onTranscript: insertTranscript,\n onLiveUpdate: handleLiveUpdate,\n });\n\n // Clean up live text if voice session ends without a final transcript (cancel/error)\n useEffect(() => {\n if (voice.state === \"idle\" && voiceAnchorRef.current != null) {\n const anchor = voiceAnchorRef.current;\n const prevLen = prevVoiceInsertRef.current.length;\n if (editor && prevLen > 0) {\n editor\n .chain()\n .deleteRange({ from: anchor, to: anchor + prevLen })\n .run();\n }\n voiceAnchorRef.current = null;\n prevVoiceInsertRef.current = \"\";\n }\n }, [voice.state, editor]);\n\n // Global shortcut: Cmd/Ctrl + Shift + M toggles dictation. Escape cancels\n // while recording. Scoped to avoid firing when focus is outside the app.\n useEffect(() => {\n if (!voiceEnabled || !voice.supported) return;\n const handler = (e: KeyboardEvent) => {\n const isToggleCombo =\n e.key.toLowerCase() === \"m\" &&\n e.shiftKey &&\n (e.metaKey || e.ctrlKey) &&\n !e.altKey;\n if (isToggleCombo) {\n e.preventDefault();\n if (voice.state === \"recording\" || voice.state === \"starting\") {\n voice.stop();\n } else if (voice.state !== \"transcribing\") {\n void voice.start();\n }\n return;\n }\n if (\n e.key === \"Escape\" &&\n (voice.state === \"recording\" || voice.state === \"starting\")\n ) {\n e.preventDefault();\n voice.cancel();\n }\n };\n window.addEventListener(\"keydown\", handler);\n return () => window.removeEventListener(\"keydown\", handler);\n }, [voiceEnabled, voice]);\n\n const extractComposerPayload = useCallback(() => {\n const ed = editor;\n if (!ed) {\n return { text: \"\", references: [] as Reference[] };\n }\n\n const references: Reference[] = [];\n\n // Build text that preserves @mentions (getText() strips them).\n // Walk the document and reconstruct with @name for mention/file/skill nodes.\n const textParts: string[] = [];\n ed.state.doc.descendants((node: any) => {\n if (node.isText) {\n textParts.push(node.text);\n } else if (node.type.name === \"mentionReference\") {\n textParts.push(`@[${node.attrs.label}|${node.attrs.icon || \"file\"}]`);\n } else if (node.type.name === \"fileReference\") {\n const label = node.attrs.path?.split(\"/\").pop() || node.attrs.path;\n textParts.push(`@[${label}|file]`);\n } else if (node.type.name === \"skillReference\") {\n textParts.push(`/${node.attrs.name}`);\n } else if (node.type.name === \"hardBreak\") {\n textParts.push(\"\\n\");\n } else if (\n node.type.name === \"paragraph\" &&\n textParts.length > 0 &&\n textParts[textParts.length - 1] !== \"\\n\"\n ) {\n textParts.push(\"\\n\");\n }\n });\n const text = textParts.join(\"\").trim();\n\n ed.state.doc.descendants((node: any) => {\n if (node.type.name === \"fileReference\") {\n // Legacy support\n references.push({\n type: \"file\",\n path: node.attrs.path,\n name: node.attrs.path?.split(\"/\").pop() || node.attrs.path,\n source: node.attrs.source || \"codebase\",\n });\n } else if (node.type.name === \"mentionReference\") {\n const refType = node.attrs.refType;\n references.push({\n type:\n refType === \"file\"\n ? \"file\"\n : refType === \"agent\"\n ? \"agent\"\n : refType === \"custom-agent\"\n ? \"custom-agent\"\n : \"mention\",\n path: node.attrs.refPath || \"\",\n name: node.attrs.label,\n source: node.attrs.source,\n refType: node.attrs.refType,\n refId: node.attrs.refId,\n });\n } else if (node.type.name === \"skillReference\") {\n references.push({\n type: \"skill\",\n path: node.attrs.path,\n name: node.attrs.name,\n source: node.attrs.source || \"codebase\",\n });\n }\n });\n\n return { text, references };\n }, [editor]);\n\n const syncComposerState = useCallback(() => {\n const { text, references } = extractComposerPayload();\n composerRuntime.setText(text);\n composerRuntime.setRunConfig(\n references.length > 0 ? { custom: { references } } : {},\n );\n return { text, references };\n }, [composerRuntime, extractComposerPayload]);\n\n const submitComposer = useCallback(() => {\n const ed = editor;\n if (!ed) return;\n\n const { text, references } = syncComposerState();\n if (!text.trim() && references.length === 0) return;\n\n // Intercept slash commands typed directly (e.g. \"/clear\" + Enter)\n const trimmed = text.trim();\n if (trimmed.startsWith(\"/\") && references.length === 0) {\n const cmdName = trimmed.slice(1).toLowerCase();\n const matched = BUILT_IN_COMMANDS.find((c) => c.name === cmdName);\n if (matched) {\n ed.commands.clearContent();\n try {\n localStorage.removeItem(draftKey);\n } catch {}\n closePopover();\n onSlashCommandRef.current?.(matched.name);\n return;\n }\n }\n\n // Composer mode: send with context via agent chat bridge\n if (composerMode) {\n const config = COMPOSER_MODE_CONFIGS[composerMode];\n config.beforeSend?.();\n sendToAgentChat({\n message: `${config.messagePrefix}${trimmed}`,\n context: config.getContext(trimmed),\n submit: true,\n });\n ed.commands.clearContent();\n setEditorHasText(false);\n setComposerMode(null);\n composerModeRef.current = null;\n try {\n localStorage.removeItem(draftKey);\n } catch {}\n closePopover();\n return;\n }\n\n if (onSubmit) {\n onSubmit(text, references);\n } else {\n composerRuntime.send();\n }\n ed.commands.clearContent();\n setEditorHasText(false);\n try {\n localStorage.removeItem(draftKey);\n } catch {}\n closePopover();\n }, [\n closePopover,\n composerMode,\n composerRuntime,\n editor,\n onSubmit,\n syncComposerState,\n ]);\n\n // Helper functions that operate on the editor view directly\n // These are called from handleKeyDown which can't use React state\n function selectMention(\n view: any,\n pop: NonNullable<PopoverState>,\n item: MentionItem,\n ) {\n const ed = editor;\n if (!ed) return;\n const currentPos = ed.state.selection.from;\n // startPos is after the trigger char, so -1 to include the @ or /\n const deleteFrom = Math.max(0, pop.startPos - 1);\n ed.chain()\n .focus()\n .deleteRange({ from: deleteFrom, to: currentPos })\n .insertContent({\n type: \"mentionReference\",\n attrs: {\n label: item.label,\n icon: item.icon || \"file\",\n source: item.source,\n refType: item.refType,\n refId: item.refId || null,\n refPath: item.refPath || null,\n },\n })\n .insertContent(\" \")\n .run();\n popoverStateRef.current = null;\n setPopover(null);\n }\n\n function executeCommand(\n view: any,\n pop: NonNullable<PopoverState>,\n command: SlashCommand,\n ) {\n const ed = editor;\n if (!ed) return;\n const currentPos = ed.state.selection.from;\n const deleteFrom = Math.max(0, pop.startPos - 1);\n ed.chain().focus().deleteRange({ from: deleteFrom, to: currentPos }).run();\n popoverStateRef.current = null;\n setPopover(null);\n onSlashCommandRef.current?.(command.name);\n }\n\n function selectSkill(\n view: any,\n pop: NonNullable<PopoverState>,\n skill: SkillResult,\n ) {\n const ed = editor;\n if (!ed) return;\n const currentPos = ed.state.selection.from;\n const deleteFrom = Math.max(0, pop.startPos - 1);\n ed.chain()\n .focus()\n .deleteRange({ from: deleteFrom, to: currentPos })\n .insertContent({\n type: \"skillReference\",\n attrs: { name: skill.name, path: skill.path, source: skill.source },\n })\n .insertContent(\" \")\n .run();\n popoverStateRef.current = null;\n setPopover(null);\n }\n\n // Popover select handlers for click-based selection (from MentionPopover)\n const handleSelectMention = useCallback(\n (item: MentionItem) => {\n if (!editor || !popover) return;\n const currentPos = editor.state.selection.from;\n const deleteFrom = Math.max(0, popover.startPos - 1);\n editor\n .chain()\n .focus()\n .deleteRange({ from: deleteFrom, to: currentPos })\n .insertContent({\n type: \"mentionReference\",\n attrs: {\n label: item.label,\n icon: item.icon || \"file\",\n source: item.source,\n refType: item.refType,\n refId: item.refId || null,\n refPath: item.refPath || null,\n },\n })\n .insertContent(\" \")\n .run();\n closePopover();\n },\n [editor, popover, closePopover],\n );\n\n const handleSelectCommand = useCallback(\n (command: SlashCommand) => {\n if (!editor || !popover) return;\n const currentPos = editor.state.selection.from;\n const deleteFrom = Math.max(0, popover.startPos - 1);\n editor\n .chain()\n .focus()\n .deleteRange({ from: deleteFrom, to: currentPos })\n .run();\n closePopover();\n onSlashCommand?.(command.name);\n },\n [editor, popover, closePopover, onSlashCommand],\n );\n\n const handleSelectSkill = useCallback(\n (skill: SkillResult) => {\n if (!editor || !popover) return;\n const currentPos = editor.state.selection.from;\n const deleteFrom = Math.max(0, popover.startPos - 1);\n editor\n .chain()\n .focus()\n .deleteRange({ from: deleteFrom, to: currentPos })\n .insertContent({\n type: \"skillReference\",\n attrs: { name: skill.name, path: skill.path, source: skill.source },\n })\n .insertContent(\" \")\n .run();\n closePopover();\n },\n [editor, popover, closePopover],\n );\n\n // Track query text as user types after trigger\n useEffect(() => {\n if (!editor || !popover) return;\n\n const updateHandler = () => {\n syncComposerState();\n\n const pop = popoverStateRef.current;\n if (!pop) return;\n const { from } = editor.state.selection;\n const { startPos, type } = pop;\n\n if (from < startPos) {\n closePopover();\n return;\n }\n\n const text = editor.state.doc.textBetween(startPos, from);\n\n // Verify the trigger character is still there\n if (startPos > 0) {\n const triggerChar = editor.state.doc.textBetween(\n startPos - 1,\n startPos,\n );\n if (\n (type === \"@\" && triggerChar !== \"@\") ||\n (type === \"/\" && triggerChar !== \"/\")\n ) {\n closePopover();\n return;\n }\n }\n\n const updated = { ...pop, query: text };\n popoverStateRef.current = updated;\n setPopover(updated);\n };\n\n editor.on(\"update\", updateHandler);\n editor.on(\"selectionUpdate\", updateHandler);\n return () => {\n editor.off(\"update\", updateHandler);\n editor.off(\"selectionUpdate\", updateHandler);\n };\n }, [editor, popover, closePopover, syncComposerState]);\n\n useEffect(() => {\n if (!editor) return;\n if (composerText !== \"\") return;\n if (editor.isEmpty) return;\n editor.commands.clearContent();\n }, [composerText, editor]);\n\n // Tiptap only reads `editable` at init; prop changes need setEditable.\n useEffect(() => {\n if (!editor) return;\n editor.setEditable(!disabled);\n if (disabled) editor.commands.blur();\n }, [editor, disabled]);\n\n return (\n <>\n <style>{`\n .aui-composer .ProseMirror p.is-editor-empty:first-child::before {\n content: attr(data-placeholder);\n color: var(--color-muted-foreground);\n opacity: 0.5;\n float: left;\n height: 0;\n pointer-events: none;\n }\n `}</style>\n {composerMode && (\n <div className=\"px-2.5 pt-2 pb-0\">\n <ComposerModeChip\n mode={composerMode}\n onRemove={() => {\n setComposerMode(null);\n composerModeRef.current = null;\n editor?.commands.focus(\"end\");\n }}\n />\n </div>\n )}\n <div className={composerMode ? \"px-2 pt-1 pb-1\" : \"px-2 pt-2 pb-1\"}>\n <EditorContent\n editor={editor}\n className=\"aui-composer flex-1 min-w-0 [&_.ProseMirror]:outline-none [&_.ProseMirror_p]:m-0 px-0.5\"\n />\n </div>\n {voiceEnabled && <VoiceRecordingOverlay voice={voice} />}\n <div className=\"flex items-center gap-1 px-2 py-1.5\">\n {attachButton ?? <ComposerPlusMenu onSelectMode={handleSelectMode} />}\n <div className=\"flex-1\" />\n {actionButton ?? (\n <>\n {selectedModel && availableModels && onModelChange && (\n <ModelSelector\n model={selectedModel}\n engines={availableModels}\n onChange={onModelChange}\n />\n )}\n {execMode && onExecModeChange && (\n <ModeSelector mode={execMode} onChange={onExecModeChange} />\n )}\n {voiceEnabled && (\n <VoiceButton voice={voice} isMac={isMac} disabled={disabled} />\n )}\n {extraActionButton}\n <button\n type=\"button\"\n onClick={submitComposer}\n disabled={!canSend}\n className=\"shrink-0 flex h-7 w-7 items-center justify-center rounded-md bg-primary text-primary-foreground hover:opacity-90 disabled:opacity-30 disabled:cursor-not-allowed\"\n title=\"Send message\"\n >\n <IconArrowUp className=\"h-3.5 w-3.5\" />\n </button>\n </>\n )}\n </div>\n <MentionPopover\n ref={popoverRef}\n type={popover?.type ?? \"@\"}\n position={popover?.position ?? null}\n mentionItems={mentionItems}\n skills={filteredSkills}\n commands={filteredCommands}\n hint={hint}\n isLoading={popover?.type === \"@\" ? mentionsLoading : skillsLoading}\n query={popover?.query ?? \"\"}\n onSelectMention={handleSelectMention}\n onSelectSkill={handleSelectSkill}\n onSelectCommand={handleSelectCommand}\n onClose={closePopover}\n />\n </>\n );\n}\n"]}
1
+ {"version":3,"file":"TiptapComposer.js","sourceRoot":"","sources":["../../../src/client/composer/TiptapComposer.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {\n useState,\n useRef,\n useEffect,\n useCallback,\n useImperativeHandle,\n useMemo,\n} from \"react\";\nimport {\n ComposerPrimitive,\n useComposer,\n useComposerRuntime,\n} from \"@assistant-ui/react\";\nimport { useEditor, EditorContent } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport { FileReference } from \"./extensions/FileReference.js\";\nimport { SkillReference } from \"./extensions/SkillReference.js\";\nimport { MentionReference } from \"./extensions/MentionReference.js\";\nimport { MentionPopover, type MentionPopoverRef } from \"./MentionPopover.js\";\nimport { useMentionSearch } from \"./use-mention-search.js\";\nimport { useSkills } from \"./use-skills.js\";\nimport {\n IconArrowUp,\n IconPlus,\n IconCheck,\n IconChevronDown,\n IconBulb,\n IconClock,\n IconBolt,\n IconTool,\n IconX,\n IconClipboardList,\n IconPencil,\n} from \"@tabler/icons-react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport type {\n MentionItem,\n SkillResult,\n Reference,\n SlashCommand,\n ComposerMode,\n} from \"./types.js\";\nimport { useVoiceDictation } from \"./useVoiceDictation.js\";\nimport { VoiceButton, VoiceRecordingOverlay } from \"./VoiceButton.js\";\nimport { ComposerPlusMenu } from \"./ComposerPlusMenu.js\";\nimport { sendToAgentChat } from \"../agent-chat.js\";\nimport { getComposerDraftKey } from \"./draft-key.js\";\n\nexport interface TiptapComposerHandle {\n focus(): void;\n}\n\nconst BUILT_IN_COMMANDS: SlashCommand[] = [\n { name: \"clear\", description: \"Start a new chat\", icon: \"clear\" },\n { name: \"new\", description: \"Start a new chat\", icon: \"new\" },\n { name: \"history\", description: \"Browse chat history\", icon: \"history\" },\n { name: \"plan\", description: \"Switch to read-only planning\", icon: \"plan\" },\n { name: \"act\", description: \"Switch back to acting\", icon: \"act\" },\n { name: \"help\", description: \"Show available commands\", icon: \"help\" },\n];\n\nconst COMPOSER_MODE_CONFIGS: Record<\n ComposerMode,\n {\n label: string;\n icon: React.ComponentType<{ className?: string }>;\n placeholder: string;\n messagePrefix: string;\n getContext: (prompt: string) => string;\n beforeSend?: () => void;\n }\n> = {\n skill: {\n label: \"Create Skill\",\n icon: IconBulb,\n placeholder: \"Describe the skill you want to create...\",\n messagePrefix: \"Create a skill: \",\n getContext: (prompt) =>\n `The user wants to create an agent skill. Their description: \"${prompt}\"\n\nFollow the create-skill pattern to build this. Before writing:\n\n1. **Determine the skill name** — derive a hyphen-case name from the description (e.g. \"code review\" → \"code-review\")\n2. **Determine the skill type** — Pattern (architectural rule), Workflow (step-by-step), or Generator (scaffolding)\n3. **Write the skill** as a personal resource at path \"skills/<name>.md\" using resource-write\n\nThe skill file MUST have YAML frontmatter with name and description (under 40 words), then markdown with:\n- Clear rule/purpose statement\n- Why this skill exists\n- How to follow it (with code examples where helpful)\n- Common violations to avoid\n- Related skills\n\nAfter creating, update the shared AGENTS.md resource to reference the new skill in its skills table.\n\nKeep the skill concise (under 500 lines) and actionable.`,\n },\n job: {\n label: \"Scheduled Task\",\n icon: IconClock,\n placeholder: \"Describe what should happen and when...\",\n messagePrefix: \"Create a recurring job: \",\n getContext: (prompt) =>\n `The user wants to create a recurring job. Their description: \"${prompt}\"\n\nUse the manage-jobs tool with action \"create\" to create this. You need to:\n1. Derive a hyphen-case name from the description\n2. Convert the schedule to a cron expression (e.g., \"every weekday at 9am\" → \"0 9 * * 1-5\")\n3. Write clear, self-contained instructions for what the agent should do each time the job runs\n4. Create it in personal scope\n\nThe job will run automatically on the schedule. Make the instructions specific — include which actions to call and what to do with results.`,\n },\n automation: {\n label: \"Create Automation\",\n icon: IconBolt,\n placeholder: \"Describe what you want to automate...\",\n messagePrefix: \"Create an automation: \",\n beforeSend: () => {\n window.dispatchEvent(\n new CustomEvent(\"agent-panel:set-mode\", {\n detail: { mode: \"chat\" },\n }),\n );\n },\n getContext: (prompt) =>\n `The user wants to create a new automation. Scope: personal. Their description: \"${prompt}\"\n\nUse manage-automations with action=define to create it. Ask clarifying questions if needed about what event to trigger on, conditions, and what actions to take.`,\n },\n tool: {\n label: \"Create Tool\",\n icon: IconTool,\n placeholder: \"Describe the interactive tool you want to build...\",\n messagePrefix: \"Create a tool: \",\n getContext: (prompt) =>\n `The user wants to create an interactive tool (mini app). Their description: \"${prompt}\"\n\nUse 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.\n\nAfter creating the tool, navigate the user to it with set-url-path using pathname \"/tools/<id>\".\n\nMake the tool functional and visually polished. Tools can use toolFetch() for external API calls, appAction()/appFetch() for app operations, toolData for tool-specific persistence, and dbQuery()/dbExec() only for existing app tables.`,\n },\n};\n\nfunction ComposerModeChip({\n mode,\n onRemove,\n}: {\n mode: ComposerMode;\n onRemove: () => void;\n}) {\n const config = COMPOSER_MODE_CONFIGS[mode];\n const Icon = config.icon;\n return (\n <span className=\"inline-flex items-center gap-1 rounded-md border border-border bg-muted/50 px-1.5 py-0.5 text-xs font-medium text-foreground\">\n <Icon className=\"h-3 w-3 text-muted-foreground\" />\n {config.label}\n <button\n type=\"button\"\n onClick={onRemove}\n className=\"ml-0.5 rounded-sm text-muted-foreground hover:text-foreground cursor-pointer\"\n >\n <IconX className=\"h-3 w-3\" />\n </button>\n </span>\n );\n}\n\ntype ExecMode = \"build\" | \"plan\";\n\ninterface TiptapComposerProps {\n placeholder?: string;\n disabled?: boolean;\n focusRef?: React.Ref<TiptapComposerHandle>;\n /** When provided, called instead of composerRuntime.send(). Used for queue mode. */\n onSubmit?: (text: string, references: Reference[]) => void;\n /** Custom action button (e.g. stop button) to render instead of the default send button. */\n actionButton?: React.ReactNode;\n /** Extra button to render alongside the default send button (e.g. stop while running). */\n extraActionButton?: React.ReactNode;\n /** Custom attachment button to render instead of ComposerPrimitive.AddAttachment. */\n attachButton?: React.ReactNode;\n /** Called when a slash command (e.g. /clear, /help) is executed */\n onSlashCommand?: (command: string) => void;\n /** Current execution mode (build/plan) */\n execMode?: ExecMode;\n /** Callback to change execution mode */\n onExecModeChange?: (mode: ExecMode) => void;\n /** Show the microphone button for voice dictation. Default true. */\n voiceEnabled?: boolean;\n /** Selected model override for this conversation */\n selectedModel?: string;\n /** Available models grouped by provider */\n availableModels?: Array<{\n engine: string;\n label: string;\n models: string[];\n configured: boolean;\n }>;\n /** Callback when user picks a model */\n onModelChange?: (model: string, engine: string) => void;\n /** Stable scope for persisted drafts, usually the active thread or tab id. */\n draftScope?: string;\n}\n\nfunction ModeSelector({\n mode,\n onChange,\n}: {\n mode: ExecMode;\n onChange: (mode: ExecMode) => void;\n}) {\n const [open, setOpen] = useState(false);\n const ActiveIcon = mode === \"build\" ? IconPencil : IconClipboardList;\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Trigger asChild>\n <button\n type=\"button\"\n aria-label={mode === \"build\" ? \"Act mode\" : \"Plan mode\"}\n title=\"Shift+Tab toggles Act and Plan\"\n className={`shrink-0 flex items-center gap-1 rounded-md px-2 py-1 text-[12px] font-medium hover:bg-accent/50 ${\n mode === \"plan\"\n ? \"text-amber-700 dark:text-amber-300\"\n : \"text-muted-foreground hover:text-foreground\"\n }`}\n >\n <ActiveIcon className=\"h-3.5 w-3.5\" />\n {mode === \"build\" ? \"Act\" : \"Plan\"}\n <IconChevronDown className=\"h-3 w-3 opacity-60\" />\n </button>\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n side=\"top\"\n align=\"end\"\n sideOffset={6}\n className=\"w-60 rounded-lg border border-border bg-popover shadow-lg z-50 py-1 animate-in fade-in-0 zoom-in-95\"\n style={{ fontSize: 13 }}\n >\n <button\n type=\"button\"\n onClick={() => {\n onChange(\"build\");\n setOpen(false);\n }}\n className=\"flex w-full items-center gap-3 px-3 py-2 hover:bg-accent/50 text-left\"\n >\n <IconPencil className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n <div className=\"flex-1 min-w-0\">\n <span className=\"font-medium text-foreground text-[13px]\">\n Act\n </span>\n <p className=\"text-[11px] text-muted-foreground mt-0.5\">\n Use tools and make approved changes\n </p>\n </div>\n {mode === \"build\" && (\n <IconCheck className=\"h-3.5 w-3.5 shrink-0 text-blue-500\" />\n )}\n </button>\n <button\n type=\"button\"\n onClick={() => {\n onChange(\"plan\");\n setOpen(false);\n }}\n className=\"flex w-full items-center gap-3 px-3 py-2 hover:bg-accent/50 text-left\"\n >\n <IconClipboardList className=\"h-4 w-4 shrink-0 text-amber-600 dark:text-amber-300\" />\n <div className=\"flex-1 min-w-0\">\n <span className=\"font-medium text-foreground text-[13px]\">\n Plan\n </span>\n <p className=\"text-[11px] text-muted-foreground mt-0.5\">\n Read-only research and approval first\n </p>\n </div>\n {mode === \"plan\" && (\n <IconCheck className=\"h-3.5 w-3.5 shrink-0 text-blue-500\" />\n )}\n </button>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n}\n\nconst FRIENDLY_MODEL_NAMES: Record<string, string> = {\n \"grok-code-fast\": \"Grok Code Fast\",\n \"qwen3-coder\": \"Qwen3 Coder\",\n \"kimi-k2-5\": \"Kimi K2.5\",\n \"deepseek-v3-1\": \"DeepSeek v3.1\",\n};\n\nfunction friendlyModelName(model: string): string {\n if (FRIENDLY_MODEL_NAMES[model]) return FRIENDLY_MODEL_NAMES[model];\n // Claude: claude-{tier}-{major}-{minor}[-dateYYYYMMDD] → Tier Major.Minor\n const claude = model.match(\n /^claude-(opus|sonnet|haiku)-(\\d+)-(\\d+)(?:-\\d{8,})?$/,\n );\n if (claude) {\n const tier = claude[1][0].toUpperCase() + claude[1].slice(1);\n return `${tier} ${claude[2]}.${claude[3]}`;\n }\n // GPT: gpt-{major}-{minor}[-suffix] or gpt-{major}.{minor}[-suffix]\n if (model.startsWith(\"gpt-\")) {\n const rest = model.slice(4);\n const gpt = rest.match(/^(\\d+)[.-](\\d+)(?:[.-](.+))?$/);\n if (gpt) {\n const suffix = gpt[3]\n ? \" \" +\n gpt[3]\n .split(\"-\")\n .map((s) => s[0].toUpperCase() + s.slice(1))\n .join(\" \")\n : \"\";\n return `GPT-${gpt[1]}.${gpt[2]}${suffix}`;\n }\n return `GPT-${rest}`;\n }\n if (/^o\\d/.test(model)) return model;\n // Gemini: gemini-{major}-{minor}-{variant}[-preview] → Gemini Major.Minor Variant\n const geminiVersioned = model.match(\n /^gemini-(\\d+)-(\\d+)-(.+?)(?:-preview)?$/,\n );\n if (geminiVersioned) {\n const variant = geminiVersioned[3]\n .split(\"-\")\n .map((s) => s[0].toUpperCase() + s.slice(1))\n .join(\" \");\n return `Gemini ${geminiVersioned[1]}.${geminiVersioned[2]} ${variant}`;\n }\n // Gemini: gemini-{version.parts}[-preview] → Gemini Version Parts\n const gemini = model.match(/^gemini-(.+?)(?:-preview)?$/);\n if (gemini) {\n const parts = gemini[1]\n .split(\"-\")\n .map((s) => s[0].toUpperCase() + s.slice(1))\n .join(\" \");\n return `Gemini ${parts}`;\n }\n return model;\n}\n\n/**\n * Deduplicate models to only the latest version per family.\n * e.g. [opus-4-7, opus-4-6, opus-4-5] → [opus-4-7]\n */\nfunction latestModelsOnly(models: string[]): string[] {\n const seen = new Set<string>();\n return models.filter((m) => {\n // Claude: family = tier (opus/sonnet/haiku)\n const claude = m.match(/^claude-(opus|sonnet|haiku)-/);\n if (claude) {\n if (seen.has(claude[1])) return false;\n seen.add(claude[1]);\n return true;\n }\n // GPT: family = gpt-{major} (e.g. gpt-5.4 and gpt-5.4-mini are different)\n // OpenAI reasoning: each is its own family\n // Gemini: family = gemini-{major} + variant\n const gemini = m.match(/^gemini-(\\d+(?:\\.\\d+)?)-(.+?)(?:-preview)?$/);\n if (gemini) {\n const family = gemini[2]; // flash, pro, etc.\n if (seen.has(`gemini-${family}`)) return false;\n seen.add(`gemini-${family}`);\n return true;\n }\n return true;\n });\n}\n\nfunction ModelSelector({\n model,\n engines,\n onChange,\n}: {\n model: string;\n engines: Array<{\n engine: string;\n label: string;\n models: string[];\n configured: boolean;\n }>;\n onChange: (model: string, engine: string) => void;\n}) {\n const [open, setOpen] = useState(false);\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Trigger asChild>\n <button\n type=\"button\"\n 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\"\n >\n {friendlyModelName(model)}\n <IconChevronDown className=\"h-3 w-3 opacity-60\" />\n </button>\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n side=\"top\"\n align=\"end\"\n sideOffset={6}\n className=\"w-64 max-h-72 overflow-y-auto rounded-lg border border-border bg-popover shadow-lg z-50 py-1 animate-in fade-in-0 zoom-in-95\"\n style={{ fontSize: 13 }}\n >\n {engines.map((group) => {\n const models = latestModelsOnly(group.models);\n return (\n <div key={group.engine}>\n <div className=\"flex items-center gap-2 px-3 py-1.5\">\n <span className=\"text-[11px] font-medium text-muted-foreground uppercase tracking-wide\">\n {group.label}\n </span>\n {!group.configured && (\n <button\n type=\"button\"\n className=\"text-[10px] text-muted-foreground/60 hover:text-foreground cursor-pointer\"\n onClick={() => {\n window.dispatchEvent(\n new CustomEvent(\"agent-panel:open-settings\"),\n );\n setOpen(false);\n }}\n >\n needs API key\n </button>\n )}\n </div>\n {models.map((m) => (\n <button\n key={m}\n type=\"button\"\n onClick={() => {\n if (!group.configured) {\n window.dispatchEvent(\n new CustomEvent(\"agent-panel:open-settings\"),\n );\n setOpen(false);\n return;\n }\n onChange(m, group.engine);\n setOpen(false);\n }}\n className={`flex w-full items-center gap-3 px-3 py-1.5 text-left ${\n group.configured\n ? \"hover:bg-accent/50\"\n : \"opacity-40 cursor-default\"\n }`}\n >\n <span className=\"flex-1 min-w-0 text-[13px] text-foreground truncate\">\n {friendlyModelName(m)}\n </span>\n {m === model && group.configured && (\n <IconCheck className=\"h-3.5 w-3.5 shrink-0 text-blue-500\" />\n )}\n </button>\n ))}\n </div>\n );\n })}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n}\n\ntype PopoverState = {\n type: \"@\" | \"/\";\n position: { top: number; left: number };\n startPos: number;\n query: string;\n} | null;\n\nexport function TiptapComposer({\n placeholder = \"Message agent...\",\n disabled = false,\n focusRef,\n onSubmit,\n actionButton,\n extraActionButton,\n attachButton,\n onSlashCommand,\n execMode,\n onExecModeChange,\n voiceEnabled = true,\n selectedModel,\n availableModels,\n onModelChange,\n draftScope,\n}: TiptapComposerProps) {\n const [popover, setPopover] = useState<PopoverState>(null);\n const popoverRef = useRef<MentionPopoverRef>(null);\n const composerRuntime = useComposerRuntime();\n const [editorHasText, setEditorHasText] = useState(false);\n const composerText = useComposer((state) => state.text);\n const canSend = editorHasText && !disabled;\n const [composerMode, setComposerMode] = useState<ComposerMode | null>(null);\n const composerModeRef = useRef<ComposerMode | null>(null);\n const isMac =\n typeof navigator !== \"undefined\" &&\n /Mac|iPhone|iPad/.test(navigator.userAgent);\n\n // Refs for values accessed in handleKeyDown (ProseMirror doesn't re-bind)\n const popoverStateRef = useRef<PopoverState>(null);\n const execModeRef = useRef(execMode);\n execModeRef.current = execMode;\n const onExecModeChangeRef = useRef(onExecModeChange);\n onExecModeChangeRef.current = onExecModeChange;\n\n const { items: mentionItems, isLoading: mentionsLoading } = useMentionSearch(\n popover?.type === \"@\" ? popover.query : \"\",\n popover?.type === \"@\",\n );\n\n const {\n skills,\n hint,\n isLoading: skillsLoading,\n } = useSkills(popover?.type === \"/\");\n\n const filteredCommands = useMemo(() => {\n if (!popover || popover.type !== \"/\") return BUILT_IN_COMMANDS;\n const q = popover.query.toLowerCase();\n if (!q) return BUILT_IN_COMMANDS;\n return BUILT_IN_COMMANDS.filter(\n (c) =>\n c.name.toLowerCase().includes(q) ||\n c.description.toLowerCase().includes(q),\n );\n }, [popover]);\n\n const filteredSkills = useMemo(() => {\n if (!popover || popover.type !== \"/\") return skills;\n const q = popover.query.toLowerCase();\n if (!q) return skills;\n return skills.filter(\n (s) =>\n s.name.toLowerCase().includes(q) ||\n s.description?.toLowerCase().includes(q),\n );\n }, [skills, popover]);\n\n // Keep refs in sync with state\n const mentionItemsRef = useRef(mentionItems);\n mentionItemsRef.current = mentionItems;\n const filteredCommandsRef = useRef(filteredCommands);\n filteredCommandsRef.current = filteredCommands;\n const filteredSkillsRef = useRef(filteredSkills);\n filteredSkillsRef.current = filteredSkills;\n const onSlashCommandRef = useRef(onSlashCommand);\n onSlashCommandRef.current = onSlashCommand;\n\n const closePopover = useCallback(() => {\n setPopover(null);\n popoverStateRef.current = null;\n }, []);\n\n // Persist draft to localStorage so hot-reloads don't lose the prompt\n const draftKey = getComposerDraftKey(draftScope);\n const draftTimerRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n // Tiptap reads extension config once at init; ref keeps runtime prop\n // changes visible to Placeholder's function form.\n const placeholderRef = useRef(placeholder);\n useEffect(() => {\n placeholderRef.current = composerMode\n ? COMPOSER_MODE_CONFIGS[composerMode].placeholder\n : placeholder;\n }, [placeholder, composerMode]);\n\n const editor = useEditor({\n extensions: [\n StarterKit.configure({\n heading: false,\n horizontalRule: false,\n bulletList: false,\n orderedList: false,\n listItem: false,\n blockquote: false,\n codeBlock: false,\n strike: false,\n italic: false,\n bold: false,\n code: false,\n }),\n Placeholder.configure({\n placeholder: () => placeholderRef.current,\n emptyEditorClass: \"is-editor-empty\",\n showOnlyCurrent: false,\n }),\n FileReference,\n SkillReference,\n MentionReference,\n ],\n editable: !disabled,\n onCreate: ({ editor: ed }) => {\n // Restore draft on mount\n try {\n const saved = localStorage.getItem(draftKey);\n if (saved) {\n ed.commands.setContent(saved);\n ed.commands.focus(\"end\");\n setEditorHasText(ed.state.doc.textContent.trim().length > 0);\n }\n } catch {}\n },\n onUpdate: ({ editor: ed }) => {\n // Drive the send button's enabled state from the actual editor contents;\n // the composer runtime is only synced on submit, so its isEmpty lags.\n let hasContent = ed.state.doc.textContent.trim().length > 0;\n if (!hasContent) {\n ed.state.doc.descendants((node: any) => {\n if (\n node.type.name === \"mentionReference\" ||\n node.type.name === \"fileReference\" ||\n node.type.name === \"skillReference\"\n ) {\n hasContent = true;\n return false;\n }\n return true;\n });\n }\n setEditorHasText(hasContent);\n\n // Debounce-save draft to localStorage\n clearTimeout(draftTimerRef.current);\n draftTimerRef.current = setTimeout(() => {\n try {\n const html = ed.getHTML();\n const isEmpty = !ed.state.doc.textContent.trim();\n if (isEmpty) {\n localStorage.removeItem(draftKey);\n } else {\n localStorage.setItem(draftKey, html);\n }\n } catch {}\n }, 300);\n },\n editorProps: {\n attributes: {\n class:\n \"flex-1 resize-none bg-transparent text-sm text-foreground outline-none leading-[1.625rem] min-h-[3.25rem] max-h-[10rem] overflow-y-auto\",\n },\n handlePaste: (_view, event) => {\n const files = Array.from(event.clipboardData?.files ?? []).filter(\n (file) => file.type.startsWith(\"image/\"),\n );\n if (files.length === 0) return false;\n\n event.preventDefault();\n void Promise.all(\n files.map((file) => {\n // SimpleImageAttachmentAdapter uses file.name as the attachment id.\n // Clipboard images (e.g. screenshots) are typically all named\n // \"image.png\", so a second paste would replace the first instead of\n // appending. Prepend a unique token so each paste gets a distinct id.\n const uniqueName = `${Date.now()}-${Math.random().toString(36).slice(2)}-${file.name}`;\n return composerRuntime.addAttachment(\n new File([file], uniqueName, { type: file.type }),\n );\n }),\n ).catch((error) => {\n console.error(\"Error adding pasted attachment:\", error);\n });\n return true;\n },\n handleKeyDown: (view, event) => {\n const pop = popoverStateRef.current;\n\n // Handle popover keyboard nav\n if (pop) {\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n popoverRef.current?.moveUp();\n return true;\n }\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n popoverRef.current?.moveDown();\n return true;\n }\n if (event.key === \"Enter\") {\n event.preventDefault();\n const idx = popoverRef.current?.getSelectedIndex() ?? 0;\n const currentCommands = filteredCommandsRef.current;\n const currentSkills = filteredSkillsRef.current;\n if (pop.type === \"@\") {\n const item = popoverRef.current?.getSelectedMention();\n if (item) selectMention(view, pop, item);\n } else if (pop.type === \"/\") {\n const cmd = popoverRef.current?.getSelectedCommand();\n if (cmd) {\n executeCommand(view, pop, cmd);\n } else {\n const skillIdx = idx - currentCommands.length;\n if (currentSkills[skillIdx]) {\n selectSkill(view, pop, currentSkills[skillIdx]);\n }\n }\n }\n return true;\n }\n if (event.key === \"Escape\") {\n event.preventDefault();\n popoverStateRef.current = null;\n setPopover(null);\n return true;\n }\n if (event.key === \" \" && pop.query === \"\") {\n popoverStateRef.current = null;\n setPopover(null);\n return false;\n }\n }\n\n // Backspace removes composer mode chip when editor is empty\n if (event.key === \"Backspace\" && composerModeRef.current) {\n const { from, to } = view.state.selection;\n if (\n view.state.doc.textContent.trim() === \"\" &&\n from === to &&\n from <= 1\n ) {\n setComposerMode(null);\n composerModeRef.current = null;\n return true;\n }\n }\n\n // Shift+Tab toggles Act/Plan mode\n if (event.key === \"Tab\" && event.shiftKey) {\n event.preventDefault();\n const current = execModeRef.current;\n const cb = onExecModeChangeRef.current;\n if (current && cb) {\n cb(current === \"build\" ? \"plan\" : \"build\");\n }\n return true;\n }\n\n // Submit on Enter (Shift+Enter for newline)\n if (\n event.key === \"Enter\" &&\n !event.shiftKey &&\n !event.metaKey &&\n !event.ctrlKey\n ) {\n event.preventDefault();\n submitComposer();\n return true;\n }\n\n // Detect @ trigger — only when preceded by start-of-text, space, or newline\n // (not after alphanumeric chars, which would indicate an email address)\n if (event.key === \"@\") {\n const { from } = view.state.selection;\n const textBefore = view.state.doc.textBetween(\n Math.max(0, from - 1),\n from,\n );\n if (from === 1 || textBefore === \"\" || /\\s/.test(textBefore)) {\n const coords = view.coordsAtPos(from);\n setTimeout(() => {\n const state: PopoverState = {\n type: \"@\",\n position: { top: coords.top, left: coords.left },\n startPos: view.state.selection.from,\n query: \"\",\n };\n popoverStateRef.current = state;\n setPopover(state);\n }, 0);\n }\n return false;\n }\n\n // Detect / trigger (only at start of line or after whitespace)\n if (event.key === \"/\") {\n const { from } = view.state.selection;\n const textBefore = view.state.doc.textBetween(\n Math.max(0, from - 1),\n from,\n );\n if (from === 1 || textBefore === \"\" || /\\s/.test(textBefore)) {\n const coords = view.coordsAtPos(from);\n setTimeout(() => {\n const state: PopoverState = {\n type: \"/\",\n position: { top: coords.top, left: coords.left },\n startPos: view.state.selection.from,\n query: \"\",\n };\n popoverStateRef.current = state;\n setPopover(state);\n }, 0);\n }\n return false;\n }\n\n return false;\n },\n },\n });\n\n useImperativeHandle(focusRef, () => ({\n focus() {\n editor?.commands.focus(\"end\");\n },\n }));\n\n const handleSelectMode = useCallback(\n (mode: ComposerMode) => {\n setComposerMode(mode);\n composerModeRef.current = mode;\n setTimeout(() => editor?.commands.focus(\"end\"), 50);\n },\n [editor],\n );\n\n // --- Live voice transcription: text appears in the editor as the user speaks ---\n const voiceAnchorRef = useRef<number | null>(null);\n const prevVoiceInsertRef = useRef(\"\");\n\n const handleLiveUpdate = useCallback(\n (finalText: string, interimText: string) => {\n const ed = editor;\n if (!ed) return;\n\n if (voiceAnchorRef.current == null) {\n const { from } = ed.state.selection;\n const prevChar =\n from > 1 ? ed.state.doc.textBetween(from - 1, from) : \"\";\n if (prevChar && !/\\s/.test(prevChar)) {\n ed.chain().insertContent(\" \").run();\n }\n voiceAnchorRef.current = ed.state.selection.from;\n prevVoiceInsertRef.current = \"\";\n }\n\n const anchor = voiceAnchorRef.current;\n const prevLen = prevVoiceInsertRef.current.length;\n const newText = finalText + interimText;\n\n if (newText === prevVoiceInsertRef.current) return;\n\n ed.chain()\n .deleteRange({ from: anchor, to: anchor + prevLen })\n .insertContentAt(anchor, newText)\n .run();\n\n prevVoiceInsertRef.current = newText;\n },\n [editor],\n );\n\n const insertTranscript = useCallback(\n (text: string) => {\n const ed = editor;\n if (!ed) return;\n\n const anchor = voiceAnchorRef.current;\n if (anchor != null) {\n const prevLen = prevVoiceInsertRef.current.length;\n if (text) {\n ed.chain()\n .focus()\n .deleteRange({ from: anchor, to: anchor + prevLen })\n .insertContentAt(anchor, text + \" \")\n .run();\n } else if (prevLen > 0) {\n ed.chain()\n .deleteRange({ from: anchor, to: anchor + prevLen })\n .run();\n }\n voiceAnchorRef.current = null;\n prevVoiceInsertRef.current = \"\";\n } else if (text) {\n const { from } = ed.state.selection;\n const prevChar =\n from > 1 ? ed.state.doc.textBetween(from - 1, from) : \"\";\n const needsLead = prevChar && !/\\s/.test(prevChar);\n ed.chain()\n .focus()\n .insertContent((needsLead ? \" \" : \"\") + text + \" \")\n .run();\n }\n },\n [editor],\n );\n\n const voice = useVoiceDictation({\n onTranscript: insertTranscript,\n onLiveUpdate: handleLiveUpdate,\n });\n\n // Clean up live text if voice session ends without a final transcript (cancel/error)\n useEffect(() => {\n if (voice.state === \"idle\" && voiceAnchorRef.current != null) {\n const anchor = voiceAnchorRef.current;\n const prevLen = prevVoiceInsertRef.current.length;\n if (editor && prevLen > 0) {\n editor\n .chain()\n .deleteRange({ from: anchor, to: anchor + prevLen })\n .run();\n }\n voiceAnchorRef.current = null;\n prevVoiceInsertRef.current = \"\";\n }\n }, [voice.state, editor]);\n\n // Global shortcut: Cmd/Ctrl + Shift + M toggles dictation. Escape cancels\n // while recording. Scoped to avoid firing when focus is outside the app.\n useEffect(() => {\n if (!voiceEnabled || !voice.supported) return;\n const handler = (e: KeyboardEvent) => {\n const isToggleCombo =\n e.key.toLowerCase() === \"m\" &&\n e.shiftKey &&\n (e.metaKey || e.ctrlKey) &&\n !e.altKey;\n if (isToggleCombo) {\n e.preventDefault();\n if (voice.state === \"recording\" || voice.state === \"starting\") {\n voice.stop();\n } else if (voice.state !== \"transcribing\") {\n void voice.start();\n }\n return;\n }\n if (\n e.key === \"Escape\" &&\n (voice.state === \"recording\" || voice.state === \"starting\")\n ) {\n e.preventDefault();\n voice.cancel();\n }\n };\n window.addEventListener(\"keydown\", handler);\n return () => window.removeEventListener(\"keydown\", handler);\n }, [voiceEnabled, voice]);\n\n const extractComposerPayload = useCallback(() => {\n const ed = editor;\n if (!ed) {\n return { text: \"\", references: [] as Reference[] };\n }\n\n const references: Reference[] = [];\n\n // Build text that preserves @mentions (getText() strips them).\n // Walk the document and reconstruct with @name for mention/file/skill nodes.\n const textParts: string[] = [];\n ed.state.doc.descendants((node: any) => {\n if (node.isText) {\n textParts.push(node.text);\n } else if (node.type.name === \"mentionReference\") {\n textParts.push(`@[${node.attrs.label}|${node.attrs.icon || \"file\"}]`);\n } else if (node.type.name === \"fileReference\") {\n const label = node.attrs.path?.split(\"/\").pop() || node.attrs.path;\n textParts.push(`@[${label}|file]`);\n } else if (node.type.name === \"skillReference\") {\n textParts.push(`/${node.attrs.name}`);\n } else if (node.type.name === \"hardBreak\") {\n textParts.push(\"\\n\");\n } else if (\n node.type.name === \"paragraph\" &&\n textParts.length > 0 &&\n textParts[textParts.length - 1] !== \"\\n\"\n ) {\n textParts.push(\"\\n\");\n }\n });\n const text = textParts.join(\"\").trim();\n\n ed.state.doc.descendants((node: any) => {\n if (node.type.name === \"fileReference\") {\n // Legacy support\n references.push({\n type: \"file\",\n path: node.attrs.path,\n name: node.attrs.path?.split(\"/\").pop() || node.attrs.path,\n source: node.attrs.source || \"codebase\",\n });\n } else if (node.type.name === \"mentionReference\") {\n const refType = node.attrs.refType;\n references.push({\n type:\n refType === \"file\"\n ? \"file\"\n : refType === \"agent\"\n ? \"agent\"\n : refType === \"custom-agent\"\n ? \"custom-agent\"\n : \"mention\",\n path: node.attrs.refPath || \"\",\n name: node.attrs.label,\n source: node.attrs.source,\n refType: node.attrs.refType,\n refId: node.attrs.refId,\n });\n } else if (node.type.name === \"skillReference\") {\n references.push({\n type: \"skill\",\n path: node.attrs.path,\n name: node.attrs.name,\n source: node.attrs.source || \"codebase\",\n });\n }\n });\n\n return { text, references };\n }, [editor]);\n\n const syncComposerState = useCallback(() => {\n const { text, references } = extractComposerPayload();\n composerRuntime.setText(text);\n composerRuntime.setRunConfig(\n references.length > 0 ? { custom: { references } } : {},\n );\n return { text, references };\n }, [composerRuntime, extractComposerPayload]);\n\n const submitComposer = useCallback(() => {\n const ed = editor;\n if (!ed) return;\n\n const { text, references } = syncComposerState();\n if (!text.trim() && references.length === 0) return;\n\n // Intercept slash commands typed directly (e.g. \"/clear\" + Enter)\n const trimmed = text.trim();\n if (trimmed.startsWith(\"/\") && references.length === 0) {\n const cmdName = trimmed.slice(1).toLowerCase();\n const matched = BUILT_IN_COMMANDS.find((c) => c.name === cmdName);\n if (matched) {\n ed.commands.clearContent();\n try {\n localStorage.removeItem(draftKey);\n } catch {}\n closePopover();\n onSlashCommandRef.current?.(matched.name);\n return;\n }\n }\n\n // Composer mode: send with context via agent chat bridge\n if (composerMode) {\n const config = COMPOSER_MODE_CONFIGS[composerMode];\n config.beforeSend?.();\n sendToAgentChat({\n message: `${config.messagePrefix}${trimmed}`,\n context: config.getContext(trimmed),\n submit: true,\n });\n ed.commands.clearContent();\n setEditorHasText(false);\n setComposerMode(null);\n composerModeRef.current = null;\n try {\n localStorage.removeItem(draftKey);\n } catch {}\n closePopover();\n return;\n }\n\n if (onSubmit) {\n onSubmit(text, references);\n } else {\n composerRuntime.send();\n }\n ed.commands.clearContent();\n setEditorHasText(false);\n try {\n localStorage.removeItem(draftKey);\n } catch {}\n closePopover();\n }, [\n closePopover,\n composerMode,\n composerRuntime,\n editor,\n onSubmit,\n syncComposerState,\n ]);\n\n // Helper functions that operate on the editor view directly\n // These are called from handleKeyDown which can't use React state\n function selectMention(\n view: any,\n pop: NonNullable<PopoverState>,\n item: MentionItem,\n ) {\n const ed = editor;\n if (!ed) return;\n const currentPos = ed.state.selection.from;\n // startPos is after the trigger char, so -1 to include the @ or /\n const deleteFrom = Math.max(0, pop.startPos - 1);\n ed.chain()\n .focus()\n .deleteRange({ from: deleteFrom, to: currentPos })\n .insertContent({\n type: \"mentionReference\",\n attrs: {\n label: item.label,\n icon: item.icon || \"file\",\n source: item.source,\n refType: item.refType,\n refId: item.refId || null,\n refPath: item.refPath || null,\n },\n })\n .insertContent(\" \")\n .run();\n popoverStateRef.current = null;\n setPopover(null);\n }\n\n function executeCommand(\n view: any,\n pop: NonNullable<PopoverState>,\n command: SlashCommand,\n ) {\n const ed = editor;\n if (!ed) return;\n const currentPos = ed.state.selection.from;\n const deleteFrom = Math.max(0, pop.startPos - 1);\n ed.chain().focus().deleteRange({ from: deleteFrom, to: currentPos }).run();\n popoverStateRef.current = null;\n setPopover(null);\n onSlashCommandRef.current?.(command.name);\n }\n\n function selectSkill(\n view: any,\n pop: NonNullable<PopoverState>,\n skill: SkillResult,\n ) {\n const ed = editor;\n if (!ed) return;\n const currentPos = ed.state.selection.from;\n const deleteFrom = Math.max(0, pop.startPos - 1);\n ed.chain()\n .focus()\n .deleteRange({ from: deleteFrom, to: currentPos })\n .insertContent({\n type: \"skillReference\",\n attrs: { name: skill.name, path: skill.path, source: skill.source },\n })\n .insertContent(\" \")\n .run();\n popoverStateRef.current = null;\n setPopover(null);\n }\n\n // Popover select handlers for click-based selection (from MentionPopover)\n const handleSelectMention = useCallback(\n (item: MentionItem) => {\n if (!editor || !popover) return;\n const currentPos = editor.state.selection.from;\n const deleteFrom = Math.max(0, popover.startPos - 1);\n editor\n .chain()\n .focus()\n .deleteRange({ from: deleteFrom, to: currentPos })\n .insertContent({\n type: \"mentionReference\",\n attrs: {\n label: item.label,\n icon: item.icon || \"file\",\n source: item.source,\n refType: item.refType,\n refId: item.refId || null,\n refPath: item.refPath || null,\n },\n })\n .insertContent(\" \")\n .run();\n closePopover();\n },\n [editor, popover, closePopover],\n );\n\n const handleSelectCommand = useCallback(\n (command: SlashCommand) => {\n if (!editor || !popover) return;\n const currentPos = editor.state.selection.from;\n const deleteFrom = Math.max(0, popover.startPos - 1);\n editor\n .chain()\n .focus()\n .deleteRange({ from: deleteFrom, to: currentPos })\n .run();\n closePopover();\n onSlashCommand?.(command.name);\n },\n [editor, popover, closePopover, onSlashCommand],\n );\n\n const handleSelectSkill = useCallback(\n (skill: SkillResult) => {\n if (!editor || !popover) return;\n const currentPos = editor.state.selection.from;\n const deleteFrom = Math.max(0, popover.startPos - 1);\n editor\n .chain()\n .focus()\n .deleteRange({ from: deleteFrom, to: currentPos })\n .insertContent({\n type: \"skillReference\",\n attrs: { name: skill.name, path: skill.path, source: skill.source },\n })\n .insertContent(\" \")\n .run();\n closePopover();\n },\n [editor, popover, closePopover],\n );\n\n // Track query text as user types after trigger\n useEffect(() => {\n if (!editor || !popover) return;\n\n const updateHandler = () => {\n syncComposerState();\n\n const pop = popoverStateRef.current;\n if (!pop) return;\n const { from } = editor.state.selection;\n const { startPos, type } = pop;\n\n if (from < startPos) {\n closePopover();\n return;\n }\n\n const text = editor.state.doc.textBetween(startPos, from);\n\n // Verify the trigger character is still there\n if (startPos > 0) {\n const triggerChar = editor.state.doc.textBetween(\n startPos - 1,\n startPos,\n );\n if (\n (type === \"@\" && triggerChar !== \"@\") ||\n (type === \"/\" && triggerChar !== \"/\")\n ) {\n closePopover();\n return;\n }\n }\n\n const updated = { ...pop, query: text };\n popoverStateRef.current = updated;\n setPopover(updated);\n };\n\n editor.on(\"update\", updateHandler);\n editor.on(\"selectionUpdate\", updateHandler);\n return () => {\n editor.off(\"update\", updateHandler);\n editor.off(\"selectionUpdate\", updateHandler);\n };\n }, [editor, popover, closePopover, syncComposerState]);\n\n useEffect(() => {\n if (!editor) return;\n if (composerText !== \"\") return;\n if (editor.isEmpty) return;\n editor.commands.clearContent();\n }, [composerText, editor]);\n\n // Tiptap only reads `editable` at init; prop changes need setEditable.\n useEffect(() => {\n if (!editor) return;\n editor.setEditable(!disabled);\n if (disabled) editor.commands.blur();\n }, [editor, disabled]);\n\n return (\n <>\n <style>{`\n .aui-composer .ProseMirror p.is-editor-empty:first-child::before {\n content: attr(data-placeholder);\n color: var(--color-muted-foreground);\n opacity: 0.5;\n float: left;\n height: 0;\n pointer-events: none;\n }\n `}</style>\n {composerMode && (\n <div className=\"px-2.5 pt-2 pb-0\">\n <ComposerModeChip\n mode={composerMode}\n onRemove={() => {\n setComposerMode(null);\n composerModeRef.current = null;\n editor?.commands.focus(\"end\");\n }}\n />\n </div>\n )}\n <div className={composerMode ? \"px-2 pt-1 pb-1\" : \"px-2 pt-2 pb-1\"}>\n <EditorContent\n editor={editor}\n className=\"aui-composer flex-1 min-w-0 [&_.ProseMirror]:outline-none [&_.ProseMirror_p]:m-0 px-0.5\"\n />\n </div>\n {voiceEnabled && <VoiceRecordingOverlay voice={voice} />}\n <div className=\"flex items-center gap-1 px-2 py-1.5\">\n {attachButton ?? <ComposerPlusMenu onSelectMode={handleSelectMode} />}\n <div className=\"flex-1\" />\n {actionButton ?? (\n <>\n {selectedModel && availableModels && onModelChange && (\n <ModelSelector\n model={selectedModel}\n engines={availableModels}\n onChange={onModelChange}\n />\n )}\n {execMode && onExecModeChange && (\n <ModeSelector mode={execMode} onChange={onExecModeChange} />\n )}\n {voiceEnabled && (\n <VoiceButton voice={voice} isMac={isMac} disabled={disabled} />\n )}\n {extraActionButton}\n <button\n type=\"button\"\n onClick={submitComposer}\n disabled={!canSend}\n className=\"shrink-0 flex h-7 w-7 items-center justify-center rounded-md bg-primary text-primary-foreground hover:opacity-90 disabled:opacity-30 disabled:cursor-not-allowed\"\n title=\"Send message\"\n >\n <IconArrowUp className=\"h-3.5 w-3.5\" />\n </button>\n </>\n )}\n </div>\n <MentionPopover\n ref={popoverRef}\n type={popover?.type ?? \"@\"}\n position={popover?.position ?? null}\n mentionItems={mentionItems}\n skills={filteredSkills}\n commands={filteredCommands}\n hint={hint}\n isLoading={popover?.type === \"@\" ? mentionsLoading : skillsLoading}\n query={popover?.query ?? \"\"}\n onSelectMention={handleSelectMention}\n onSelectSkill={handleSelectSkill}\n onSelectCommand={handleSelectCommand}\n onClose={closePopover}\n />\n </>\n );\n}\n"]}
@@ -1,2 +1,21 @@
1
- export declare function formatChatErrorText(errorMessage: string, upgradeUrl?: string): string;
1
+ /**
2
+ * Append a Builder CTA markdown link to gateway errors that users can fix
3
+ * outside the app. Used by both
4
+ * chat SSE consumers (`sse-event-processor.ts` and `useProductionAgent.ts`)
5
+ * to keep the copy in lockstep.
6
+ *
7
+ * `upgradeUrl` comes from the gateway response body and ends up interpolated
8
+ * into markdown, so we validate it's a plain https URL with no characters
9
+ * that would escape the `[...](url)` link target. Only `)` and whitespace
10
+ * terminate the link target — `(`, `<`, `>` are fine inside it — so the
11
+ * regex stays narrow; `buildUpgradeUrl` emits org-name URLs that may
12
+ * contain `(` (e.g. `Acme%20(staging)`) and we don't want to reject them.
13
+ */
14
+ export declare const BUILDER_SPACE_SETTINGS_URL = "https://builder.io/account/space";
15
+ export declare function formatChatErrorText(errorMessage: string, upgradeUrl?: string, errorCode?: string): string;
16
+ export interface NormalizedChatError {
17
+ message: string;
18
+ details?: string;
19
+ }
20
+ export declare function normalizeChatError(errorMessage: string): NormalizedChatError;
2
21
  //# sourceMappingURL=error-format.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"error-format.d.ts","sourceRoot":"","sources":["../../src/client/error-format.ts"],"names":[],"mappings":"AAuBA,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAKR"}
1
+ {"version":3,"file":"error-format.d.ts","sourceRoot":"","sources":["../../src/client/error-format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,0BAA0B,qCAAqC,CAAC;AAY7E,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAYR;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,mBAAmB,CA8B5E"}
@@ -1,6 +1,6 @@
1
1
  /**
2
- * Append an "Upgrade at builder.io" markdown link to an error message when
3
- * the Builder gateway returns a 402 quota/billing response. Used by both
2
+ * Append a Builder CTA markdown link to gateway errors that users can fix
3
+ * outside the app. Used by both
4
4
  * chat SSE consumers (`sse-event-processor.ts` and `useProductionAgent.ts`)
5
5
  * to keep the copy in lockstep.
6
6
  *
@@ -11,6 +11,7 @@
11
11
  * regex stays narrow; `buildUpgradeUrl` emits org-name URLs that may
12
12
  * contain `(` (e.g. `Acme%20(staging)`) and we don't want to reject them.
13
13
  */
14
+ export const BUILDER_SPACE_SETTINGS_URL = "https://builder.io/account/space";
14
15
  function isSafeUpgradeUrl(url) {
15
16
  try {
16
17
  const parsed = new URL(url);
@@ -22,10 +23,57 @@ function isSafeUpgradeUrl(url) {
22
23
  return false;
23
24
  }
24
25
  }
25
- export function formatChatErrorText(errorMessage, upgradeUrl) {
26
+ export function formatChatErrorText(errorMessage, upgradeUrl, errorCode) {
27
+ const normalized = normalizeChatError(errorMessage);
28
+ if (errorCode === "gateway_not_enabled" ||
29
+ /space has not enabled the LLM gateway/i.test(normalized.message)) {
30
+ return `Error: ${normalized.message}\n\n[Open Builder space settings](${BUILDER_SPACE_SETTINGS_URL})`;
31
+ }
26
32
  if (!upgradeUrl || !isSafeUpgradeUrl(upgradeUrl)) {
27
- return `Error: ${errorMessage}`;
33
+ return `Error: ${normalized.message}`;
34
+ }
35
+ return `Error: ${normalized.message}\n\n[Upgrade at builder.io](${upgradeUrl})`;
36
+ }
37
+ export function normalizeChatError(errorMessage) {
38
+ const raw = String(errorMessage || "Unknown error");
39
+ const looksHtml = /<html[\s>]|<body[\s>]|<head[\s>]/i.test(raw);
40
+ const text = looksHtml ? htmlToText(raw) : raw.trim();
41
+ if (/inactivity timeout/i.test(text)) {
42
+ return {
43
+ message: "The agent connection timed out before it could finish. You can continue from the partial work or retry.",
44
+ details: text,
45
+ };
28
46
  }
29
- return `Error: ${errorMessage}\n\n[Upgrade at builder.io](${upgradeUrl})`;
47
+ if (/Invalid request body:\s*tools\.\d+\.input_schema\.type/i.test(text)) {
48
+ return {
49
+ message: "A tool schema was invalid, so the model rejected the request before it started. The invalid tool can be skipped and the request retried.",
50
+ details: text,
51
+ };
52
+ }
53
+ if (looksHtml) {
54
+ return {
55
+ message: text.slice(0, 240) || "The provider returned an HTML error page.",
56
+ details: text,
57
+ };
58
+ }
59
+ return { message: text };
60
+ }
61
+ function htmlToText(html) {
62
+ return html
63
+ .replace(/<script[\s\S]*?<\/script>/gi, " ")
64
+ .replace(/<style[\s\S]*?<\/style>/gi, " ")
65
+ .replace(/<br\s*\/?>/gi, "\n")
66
+ .replace(/<\/(p|div|h1|h2|h3|li|tr)>/gi, "\n")
67
+ .replace(/<[^>]+>/g, " ")
68
+ .replace(/&nbsp;/gi, " ")
69
+ .replace(/&lt;/gi, "<")
70
+ .replace(/&gt;/gi, ">")
71
+ .replace(/&amp;/gi, "&")
72
+ .replace(/&quot;/gi, '"')
73
+ .replace(/&#39;/gi, "'")
74
+ .replace(/[ \t]+/g, " ")
75
+ .replace(/\n\s+/g, "\n")
76
+ .replace(/\n{3,}/g, "\n\n")
77
+ .trim();
30
78
  }
31
79
  //# sourceMappingURL=error-format.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"error-format.js","sourceRoot":"","sources":["../../src/client/error-format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,SAAS,gBAAgB,CAAC,GAAW;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC/C,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,YAAoB,EACpB,UAAmB;IAEnB,IAAI,CAAC,UAAU,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC;QACjD,OAAO,UAAU,YAAY,EAAE,CAAC;IAClC,CAAC;IACD,OAAO,UAAU,YAAY,+BAA+B,UAAU,GAAG,CAAC;AAC5E,CAAC","sourcesContent":["/**\n * Append an \"Upgrade at builder.io\" markdown link to an error message when\n * the Builder gateway returns a 402 quota/billing response. Used by both\n * chat SSE consumers (`sse-event-processor.ts` and `useProductionAgent.ts`)\n * to keep the copy in lockstep.\n *\n * `upgradeUrl` comes from the gateway response body and ends up interpolated\n * into markdown, so we validate it's a plain https URL with no characters\n * that would escape the `[...](url)` link target. Only `)` and whitespace\n * terminate the link target — `(`, `<`, `>` are fine inside it — so the\n * regex stays narrow; `buildUpgradeUrl` emits org-name URLs that may\n * contain `(` (e.g. `Acme%20(staging)`) and we don't want to reject them.\n */\nfunction isSafeUpgradeUrl(url: string): boolean {\n try {\n const parsed = new URL(url);\n if (parsed.protocol !== \"https:\") return false;\n return !/[\\s)]/.test(url);\n } catch {\n return false;\n }\n}\n\nexport function formatChatErrorText(\n errorMessage: string,\n upgradeUrl?: string,\n): string {\n if (!upgradeUrl || !isSafeUpgradeUrl(upgradeUrl)) {\n return `Error: ${errorMessage}`;\n }\n return `Error: ${errorMessage}\\n\\n[Upgrade at builder.io](${upgradeUrl})`;\n}\n"]}
1
+ {"version":3,"file":"error-format.js","sourceRoot":"","sources":["../../src/client/error-format.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Append a Builder CTA markdown link to gateway errors that users can fix\n * outside the app. Used by both\n * chat SSE consumers (`sse-event-processor.ts` and `useProductionAgent.ts`)\n * to keep the copy in lockstep.\n *\n * `upgradeUrl` comes from the gateway response body and ends up interpolated\n * into markdown, so we validate it's a plain https URL with no characters\n * that would escape the `[...](url)` link target. Only `)` and whitespace\n * terminate the link target — `(`, `<`, `>` are fine inside it — so the\n * regex stays narrow; `buildUpgradeUrl` emits org-name URLs that may\n * contain `(` (e.g. `Acme%20(staging)`) and we don't want to reject them.\n */\nexport const BUILDER_SPACE_SETTINGS_URL = \"https://builder.io/account/space\";\n\nfunction isSafeUpgradeUrl(url: string): boolean {\n try {\n const parsed = new URL(url);\n if (parsed.protocol !== \"https:\") return false;\n return !/[\\s)]/.test(url);\n } catch {\n return false;\n }\n}\n\nexport function formatChatErrorText(\n errorMessage: string,\n upgradeUrl?: string,\n errorCode?: string,\n): string {\n const normalized = normalizeChatError(errorMessage);\n if (\n errorCode === \"gateway_not_enabled\" ||\n /space has not enabled the LLM gateway/i.test(normalized.message)\n ) {\n return `Error: ${normalized.message}\\n\\n[Open Builder space settings](${BUILDER_SPACE_SETTINGS_URL})`;\n }\n if (!upgradeUrl || !isSafeUpgradeUrl(upgradeUrl)) {\n return `Error: ${normalized.message}`;\n }\n return `Error: ${normalized.message}\\n\\n[Upgrade at builder.io](${upgradeUrl})`;\n}\n\nexport interface NormalizedChatError {\n message: string;\n details?: string;\n}\n\nexport function normalizeChatError(errorMessage: string): NormalizedChatError {\n const raw = String(errorMessage || \"Unknown error\");\n const looksHtml = /<html[\\s>]|<body[\\s>]|<head[\\s>]/i.test(raw);\n const text = looksHtml ? htmlToText(raw) : raw.trim();\n\n if (/inactivity timeout/i.test(text)) {\n return {\n message:\n \"The agent connection timed out before it could finish. You can continue from the partial work or retry.\",\n details: text,\n };\n }\n\n if (/Invalid request body:\\s*tools\\.\\d+\\.input_schema\\.type/i.test(text)) {\n return {\n message:\n \"A tool schema was invalid, so the model rejected the request before it started. The invalid tool can be skipped and the request retried.\",\n details: text,\n };\n }\n\n if (looksHtml) {\n return {\n message:\n text.slice(0, 240) || \"The provider returned an HTML error page.\",\n details: text,\n };\n }\n\n return { message: text };\n}\n\nfunction htmlToText(html: string): string {\n return html\n .replace(/<script[\\s\\S]*?<\\/script>/gi, \" \")\n .replace(/<style[\\s\\S]*?<\\/style>/gi, \" \")\n .replace(/<br\\s*\\/?>/gi, \"\\n\")\n .replace(/<\\/(p|div|h1|h2|h3|li|tr)>/gi, \"\\n\")\n .replace(/<[^>]+>/g, \" \")\n .replace(/&nbsp;/gi, \" \")\n .replace(/&lt;/gi, \"<\")\n .replace(/&gt;/gi, \">\")\n .replace(/&amp;/gi, \"&\")\n .replace(/&quot;/gi, '\"')\n .replace(/&#39;/gi, \"'\")\n .replace(/[ \\t]+/g, \" \")\n .replace(/\\n\\s+/g, \"\\n\")\n .replace(/\\n{3,}/g, \"\\n\\n\")\n .trim();\n}\n"]}
@@ -11,6 +11,8 @@ export { cn } from "./utils.js";
11
11
  export { ApiKeySettings } from "./components/ApiKeySettings.js";
12
12
  export { useSession, type AuthSession } from "./use-session.js";
13
13
  export { sendToFrame, onFrameMessage, requestUserInfo, getFrameOrigin, getCallbackOrigin, isInFrame, enterStyleEditing, enterTextEditing, exitSelectionMode, type UserInfo, } from "./frame.js";
14
+ export { getBuilderParentOrigin, isInBuilderFrame, sendToBuilderChat, type BuilderChatMessage, } from "./builder-frame.js";
15
+ export { NewWorkspaceAppFlow, type NewWorkspaceAppFlowProps, type VaultSecretOption, } from "./NewWorkspaceAppFlow.js";
14
16
  export { AssistantChat, clearChatStorage, type AssistantChatProps, type AssistantChatHandle, } from "./AssistantChat.js";
15
17
  export { MultiTabAssistantChat, type MultiTabAssistantChatProps, type MultiTabAssistantChatHeaderProps, } from "./MultiTabAssistantChat.js";
16
18
  export { createAgentChatAdapter } from "./agent-chat-adapter.js";
@@ -19,7 +21,7 @@ export { AgentPanel, AgentSidebar, AgentToggleButton, focusAgentChat, type Agent
19
21
  export { ProductionAgentPanel, type ProductionAgentPanelProps, } from "./ProductionAgentPanel.js";
20
22
  export { useProductionAgent, type ProductionAgentMessage, type UseProductionAgentOptions, type UseProductionAgentResult, } from "./useProductionAgent.js";
21
23
  export { Turnstile, type TurnstileProps } from "./Turnstile.js";
22
- export { PoweredByBadge, type PoweredByBadgeProps } from "./PoweredByBadge.js";
24
+ export { OpenSourceBadge, PoweredByBadge, type OpenSourceBadgeProps, type PoweredByBadgeProps, } from "./PoweredByBadge.js";
23
25
  export { FeedbackButton, type FeedbackButtonProps } from "./FeedbackButton.js";
24
26
  export { ErrorBoundary } from "./ErrorBoundary.js";
25
27
  export { ClientOnly } from "./ClientOnly.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,8 @@ export { cn } from "./utils.js";
11
11
  export { ApiKeySettings } from "./components/ApiKeySettings.js";
12
12
  export { useSession } from "./use-session.js";
13
13
  export { sendToFrame, onFrameMessage, requestUserInfo, getFrameOrigin, getCallbackOrigin, isInFrame, enterStyleEditing, enterTextEditing, exitSelectionMode, } from "./frame.js";
14
+ export { getBuilderParentOrigin, isInBuilderFrame, sendToBuilderChat, } from "./builder-frame.js";
15
+ export { NewWorkspaceAppFlow, } from "./NewWorkspaceAppFlow.js";
14
16
  export { AssistantChat, clearChatStorage, } from "./AssistantChat.js";
15
17
  export { MultiTabAssistantChat, } from "./MultiTabAssistantChat.js";
16
18
  export { createAgentChatAdapter } from "./agent-chat-adapter.js";
@@ -20,7 +22,7 @@ export { AgentPanel, AgentSidebar, AgentToggleButton, focusAgentChat, } from "./
20
22
  export { ProductionAgentPanel, } from "./ProductionAgentPanel.js";
21
23
  export { useProductionAgent, } from "./useProductionAgent.js";
22
24
  export { Turnstile } from "./Turnstile.js";
23
- export { PoweredByBadge } from "./PoweredByBadge.js";
25
+ export { OpenSourceBadge, PoweredByBadge, } from "./PoweredByBadge.js";
24
26
  export { FeedbackButton } from "./FeedbackButton.js";
25
27
  export { ErrorBoundary } from "./ErrorBoundary.js";
26
28
  export { ClientOnly } from "./ClientOnly.js";