@burdenoff/microfe-vibecontrols 2026.530.2 → 2026.530.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/components/agent-manager/AgentManagerBookmarksDrawer.js +1 -1
  2. package/dist/components/agent-manager/AgentManagerBookmarksDrawer.js.map +1 -1
  3. package/dist/components/agent-manager/AgentManagerInputArea.js +82 -84
  4. package/dist/components/agent-manager/AgentManagerInputArea.js.map +1 -1
  5. package/dist/components/agents/AgentForm.js +264 -278
  6. package/dist/components/agents/AgentForm.js.map +1 -1
  7. package/dist/components/agents/ConnectionLogPanel.js +18 -18
  8. package/dist/components/agents/ConnectionLogPanel.js.map +1 -1
  9. package/dist/components/docs/DocsEditPanel.js +1 -1
  10. package/dist/components/docs/DocsEditPanel.js.map +1 -1
  11. package/dist/components/docs/DocsFullScreenViewer.js +1 -1
  12. package/dist/components/docs/DocsFullScreenViewer.js.map +1 -1
  13. package/dist/components/docs/DocsPreviewPanel.js +2 -2
  14. package/dist/components/docs/DocsPreviewPanel.js.map +1 -1
  15. package/dist/components/docs/DocsRevisionHistory.js +2 -2
  16. package/dist/components/docs/DocsRevisionHistory.js.map +1 -1
  17. package/dist/components/docs/DocsSettingsPanel.js +5 -5
  18. package/dist/components/docs/DocsSettingsPanel.js.map +1 -1
  19. package/dist/components/docs/DocsTabPanel.js +1 -1
  20. package/dist/components/docs/DocsTabPanel.js.map +1 -1
  21. package/dist/components/plugins/AddTabDialog.js +2 -2
  22. package/dist/components/plugins/AddTabDialog.js.map +1 -1
  23. package/dist/components/plugins/PluginIframeMount.js +1 -1
  24. package/dist/components/plugins/PluginIframeMount.js.map +1 -1
  25. package/dist/components/sessions/TerminalPanel.js +424 -378
  26. package/dist/components/sessions/TerminalPanel.js.map +1 -1
  27. package/dist/components/shared/EntityTagPicker.js +1 -1
  28. package/dist/components/shared/EntityTagPicker.js.map +1 -1
  29. package/dist/pages/PluginStandalonePage.js +2 -2
  30. package/dist/pages/PluginStandalonePage.js.map +1 -1
  31. package/dist/pages/SharedSessionPage.js +8 -8
  32. package/dist/pages/SharedSessionPage.js.map +1 -1
  33. package/dist/pages/ai/AIBookmarksPage.js +1 -1
  34. package/dist/pages/ai/AIBookmarksPage.js.map +1 -1
  35. package/dist/pages/tunnels/DomainsTab.js +2 -2
  36. package/dist/pages/tunnels/DomainsTab.js.map +1 -1
  37. package/dist/pages/tunnels/tabs/TunnelDomainsTab.js +1 -1
  38. package/dist/pages/tunnels/tabs/TunnelDomainsTab.js.map +1 -1
  39. package/dist/services/schedulerApi.js +15 -37
  40. package/dist/services/schedulerApi.js.map +1 -1
  41. package/package.json +1 -1
@@ -143,7 +143,7 @@ var v = ({ open: g, onClose: v, sessionId: y, messages: b, onJump: x }) => {
143
143
  onClick: () => void I(e.id),
144
144
  className: "p-1 rounded hover:bg-bg-sunken transition-colors",
145
145
  "aria-label": C("vibecontrols.agentManager.messageItem.removeBookmark", "Remove bookmark"),
146
- children: /* @__PURE__ */ m(d, { className: "size-3.5 text-status-danger-text" })
146
+ children: /* @__PURE__ */ m(d, { className: "size-3.5 text-status-error-text" })
147
147
  })
148
148
  ]
149
149
  })]
@@ -1 +1 @@
1
- {"version":3,"file":"AgentManagerBookmarksDrawer.js","names":[],"sources":["../../../src/components/agent-manager/AgentManagerBookmarksDrawer.tsx"],"sourcesContent":["/**\n * Side drawer listing the current user's bookmarks for ONE chat session.\n *\n * Each row resolves its message body from the currently-loaded session\n * messages. When the bookmarked message is no longer in the session\n * (agent log pruning / rotation), the row degrades to a \"Message no\n * longer available\" affordance with a remove-only action.\n */\n\nimport { useState, type FC } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { Bookmark, X, ChevronRight, Pencil, Trash2, Check, ExternalLink } from 'lucide-react';\nimport { relativeTime } from '@/utils/relativeTime';\nimport {\n useDeleteAgentMessageBookmarkMutation,\n useMyAgentMessageBookmarksQuery,\n useUpdateAgentMessageBookmarkMutation,\n type AgentMessageBookmarkFieldsFragment,\n} from '../../generated/wspace-operations';\nimport type { AgentManagerMessage } from '@/types/agentManager';\nimport { useTr } from '../../shared/hooks/useTr';\n\ninterface AgentManagerBookmarksDrawerProps {\n open: boolean;\n onClose: () => void;\n sessionId: string;\n messages: AgentManagerMessage[];\n onJump: (messageId: string) => void;\n}\n\nconst PREVIEW_LEN = 80;\n\nfunction snippet(content: string): string {\n if (!content) return '';\n const trimmed = content.trim().replace(/\\s+/g, ' ');\n return trimmed.length > PREVIEW_LEN ? `${trimmed.slice(0, PREVIEW_LEN)}…` : trimmed;\n}\n\nexport const AgentManagerBookmarksDrawer: FC<AgentManagerBookmarksDrawerProps> = ({\n open,\n onClose,\n sessionId,\n messages,\n onJump,\n}) => {\n const navigate = useNavigate();\n const tr = useTr();\n const [editingId, setEditingId] = useState<string | null>(null);\n const [labelDraft, setLabelDraft] = useState('');\n\n const { data, loading } = useMyAgentMessageBookmarksQuery({\n variables: { filter: { sessionId } },\n skip: !open,\n fetchPolicy: 'cache-and-network',\n });\n\n const [updateMutation] = useUpdateAgentMessageBookmarkMutation({\n refetchQueries: ['MyAgentMessageBookmarks'],\n });\n const [deleteMutation] = useDeleteAgentMessageBookmarkMutation({\n refetchQueries: ['MyAgentMessageBookmarks'],\n });\n\n const bookmarks = data?.myAgentMessageBookmarks.items ?? [];\n const messageById = new Map(messages.map((m) => [m.id, m]));\n\n const startEdit = (id: string, current: string | null | undefined) => {\n setEditingId(id);\n setLabelDraft(current ?? '');\n };\n\n const saveEdit = async (id: string) => {\n await updateMutation({ variables: { id, input: { label: labelDraft || null } } });\n setEditingId(null);\n setLabelDraft('');\n };\n\n const removeBookmark = async (id: string) => {\n await deleteMutation({ variables: { id } });\n };\n\n if (!open) return null;\n\n return (\n <div className=\"fixed inset-0 z-40 flex\">\n <div className=\"flex-1 bg-bg-overlay/40\" onClick={onClose} aria-hidden />\n <aside\n className=\"w-full max-w-md h-full bg-bg-surface border-l border-border-default shadow-xl flex flex-col\"\n role=\"dialog\"\n aria-label={tr(\n 'vibecontrols.agentManager.bookmarksDrawer.title',\n 'Bookmarks in this session'\n )}\n data-testid=\"agent-manager-bookmarks-drawer\"\n >\n <header className=\"flex items-center justify-between px-4 py-3 border-b border-border-default flex-shrink-0\">\n <div className=\"flex items-center gap-2\">\n <Bookmark className=\"size-4 text-text-secondary\" />\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {tr('vibecontrols.agentManager.bookmarksDrawer.title', 'Bookmarks in this session')}\n </h3>\n </div>\n <button\n type=\"button\"\n onClick={onClose}\n className=\"p-1 rounded hover:bg-bg-sunken transition-colors\"\n aria-label={tr('vibecontrols.common.close', 'Close')}\n >\n <X className=\"size-4 text-text-secondary\" />\n </button>\n </header>\n\n <div className=\"flex-1 min-h-0 overflow-y-auto\">\n {loading && bookmarks.length === 0 && (\n <div className=\"px-4 py-6 text-xs text-text-tertiary\">\n {tr('vibecontrols.common.loading', 'Loading...')}\n </div>\n )}\n\n {!loading && bookmarks.length === 0 && (\n <div className=\"px-4 py-10 flex flex-col items-center text-center gap-2\">\n <Bookmark className=\"size-8 text-text-muted\" />\n <p className=\"text-sm font-medium text-text-primary\">\n {tr(\n 'vibecontrols.agentManager.bookmarksDrawer.empty',\n 'No bookmarks in this session yet'\n )}\n </p>\n <p className=\"text-xs text-text-secondary max-w-xs\">\n {tr(\n 'vibecontrols.agentManager.bookmarksDrawer.emptyHint',\n 'Click the bookmark icon on any message to save it for later.'\n )}\n </p>\n </div>\n )}\n\n <ul className=\"divide-y divide-border-subtle\">\n {bookmarks.map((bm: AgentMessageBookmarkFieldsFragment) => {\n const msg = messageById.get(bm.messageId);\n const isStale = !msg;\n const isEditing = editingId === bm.id;\n\n return (\n <li key={bm.id} className=\"px-4 py-3 hover:bg-bg-elevated/40 transition-colors\">\n <div className=\"flex items-start gap-2\">\n <div className=\"flex-1 min-w-0\">\n {isEditing ? (\n <input\n aria-label=\"control\"\n value={labelDraft}\n onChange={(e) => setLabelDraft(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') void saveEdit(bm.id);\n if (e.key === 'Escape') {\n setEditingId(null);\n setLabelDraft('');\n }\n }}\n placeholder={tr(\n 'vibecontrols.agentManager.bookmarksDrawer.labelPlaceholder',\n 'Add a label (optional)'\n )}\n className=\"w-full bg-bg-sunken border border-border-subtle rounded px-2 py-1 text-xs text-text-primary placeholder:text-text-tertiary focus:outline-none focus:border-action-primary-bg\"\n />\n ) : (\n <p className=\"text-sm font-medium text-text-primary truncate\">\n {bm.label ||\n (msg?.role === 'user'\n ? tr('vibecontrols.agentManager.bookmarksDrawer.fromUser', 'From you')\n : tr(\n 'vibecontrols.agentManager.bookmarksDrawer.fromAssistant',\n 'Assistant reply'\n ))}\n </p>\n )}\n\n {isStale ? (\n <p className=\"text-xs text-text-tertiary italic mt-1\">\n {tr(\n 'vibecontrols.agentManager.bookmarksDrawer.stale',\n 'Message no longer available'\n )}\n </p>\n ) : (\n <p className=\"text-xs text-text-secondary mt-1 line-clamp-2\">\n {snippet(msg.content)}\n </p>\n )}\n\n <p className=\"text-[10px] text-text-tertiary mt-1\">\n {relativeTime(bm.createdAt)}\n </p>\n </div>\n\n <div className=\"flex items-center gap-0.5 shrink-0\">\n {!isStale && !isEditing && (\n <button\n type=\"button\"\n onClick={() => {\n onJump(bm.messageId);\n onClose();\n }}\n className=\"p-1 rounded hover:bg-bg-sunken transition-colors\"\n title={tr(\n 'vibecontrols.agentManager.bookmarksDrawer.jump',\n 'Jump to message'\n )}\n aria-label={tr(\n 'vibecontrols.agentManager.bookmarksDrawer.jump',\n 'Jump to message'\n )}\n >\n <ChevronRight className=\"size-3.5 text-text-secondary\" />\n </button>\n )}\n\n {isEditing ? (\n <button\n type=\"button\"\n onClick={() => void saveEdit(bm.id)}\n className=\"p-1 rounded hover:bg-bg-sunken transition-colors\"\n aria-label={tr('vibecontrols.common.save', 'Save')}\n >\n <Check className=\"size-3.5 text-status-success-text\" />\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={() => startEdit(bm.id, bm.label)}\n className=\"p-1 rounded hover:bg-bg-sunken transition-colors\"\n aria-label={tr(\n 'vibecontrols.agentManager.bookmarksDrawer.editLabel',\n 'Edit label'\n )}\n >\n <Pencil className=\"size-3.5 text-text-secondary\" />\n </button>\n )}\n\n <button\n type=\"button\"\n onClick={() => void removeBookmark(bm.id)}\n className=\"p-1 rounded hover:bg-bg-sunken transition-colors\"\n aria-label={tr(\n 'vibecontrols.agentManager.messageItem.removeBookmark',\n 'Remove bookmark'\n )}\n >\n <Trash2 className=\"size-3.5 text-status-danger-text\" />\n </button>\n </div>\n </div>\n </li>\n );\n })}\n </ul>\n </div>\n\n <footer className=\"px-4 py-3 border-t border-border-default flex-shrink-0\">\n <button\n type=\"button\"\n onClick={() => {\n onClose();\n navigate('/vibecontrols/ai/bookmarks');\n }}\n className=\"inline-flex items-center gap-1.5 text-xs font-medium text-action-primary-text hover:underline\"\n >\n <ExternalLink className=\"size-3\" />\n {tr(\n 'vibecontrols.agentManager.bookmarksDrawer.seeAll',\n 'See all bookmarks across sessions'\n )}\n </button>\n </footer>\n </aside>\n </div>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"AgentManagerBookmarksDrawer.js","names":[],"sources":["../../../src/components/agent-manager/AgentManagerBookmarksDrawer.tsx"],"sourcesContent":["/**\n * Side drawer listing the current user's bookmarks for ONE chat session.\n *\n * Each row resolves its message body from the currently-loaded session\n * messages. When the bookmarked message is no longer in the session\n * (agent log pruning / rotation), the row degrades to a \"Message no\n * longer available\" affordance with a remove-only action.\n */\n\nimport { useState, type FC } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { Bookmark, X, ChevronRight, Pencil, Trash2, Check, ExternalLink } from 'lucide-react';\nimport { relativeTime } from '@/utils/relativeTime';\nimport {\n useDeleteAgentMessageBookmarkMutation,\n useMyAgentMessageBookmarksQuery,\n useUpdateAgentMessageBookmarkMutation,\n type AgentMessageBookmarkFieldsFragment,\n} from '../../generated/wspace-operations';\nimport type { AgentManagerMessage } from '@/types/agentManager';\nimport { useTr } from '../../shared/hooks/useTr';\n\ninterface AgentManagerBookmarksDrawerProps {\n open: boolean;\n onClose: () => void;\n sessionId: string;\n messages: AgentManagerMessage[];\n onJump: (messageId: string) => void;\n}\n\nconst PREVIEW_LEN = 80;\n\nfunction snippet(content: string): string {\n if (!content) return '';\n const trimmed = content.trim().replace(/\\s+/g, ' ');\n return trimmed.length > PREVIEW_LEN ? `${trimmed.slice(0, PREVIEW_LEN)}…` : trimmed;\n}\n\nexport const AgentManagerBookmarksDrawer: FC<AgentManagerBookmarksDrawerProps> = ({\n open,\n onClose,\n sessionId,\n messages,\n onJump,\n}) => {\n const navigate = useNavigate();\n const tr = useTr();\n const [editingId, setEditingId] = useState<string | null>(null);\n const [labelDraft, setLabelDraft] = useState('');\n\n const { data, loading } = useMyAgentMessageBookmarksQuery({\n variables: { filter: { sessionId } },\n skip: !open,\n fetchPolicy: 'cache-and-network',\n });\n\n const [updateMutation] = useUpdateAgentMessageBookmarkMutation({\n refetchQueries: ['MyAgentMessageBookmarks'],\n });\n const [deleteMutation] = useDeleteAgentMessageBookmarkMutation({\n refetchQueries: ['MyAgentMessageBookmarks'],\n });\n\n const bookmarks = data?.myAgentMessageBookmarks.items ?? [];\n const messageById = new Map(messages.map((m) => [m.id, m]));\n\n const startEdit = (id: string, current: string | null | undefined) => {\n setEditingId(id);\n setLabelDraft(current ?? '');\n };\n\n const saveEdit = async (id: string) => {\n await updateMutation({ variables: { id, input: { label: labelDraft || null } } });\n setEditingId(null);\n setLabelDraft('');\n };\n\n const removeBookmark = async (id: string) => {\n await deleteMutation({ variables: { id } });\n };\n\n if (!open) return null;\n\n return (\n <div className=\"fixed inset-0 z-40 flex\">\n <div className=\"flex-1 bg-bg-overlay/40\" onClick={onClose} aria-hidden />\n <aside\n className=\"w-full max-w-md h-full bg-bg-surface border-l border-border-default shadow-xl flex flex-col\"\n role=\"dialog\"\n aria-label={tr(\n 'vibecontrols.agentManager.bookmarksDrawer.title',\n 'Bookmarks in this session'\n )}\n data-testid=\"agent-manager-bookmarks-drawer\"\n >\n <header className=\"flex items-center justify-between px-4 py-3 border-b border-border-default flex-shrink-0\">\n <div className=\"flex items-center gap-2\">\n <Bookmark className=\"size-4 text-text-secondary\" />\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {tr('vibecontrols.agentManager.bookmarksDrawer.title', 'Bookmarks in this session')}\n </h3>\n </div>\n <button\n type=\"button\"\n onClick={onClose}\n className=\"p-1 rounded hover:bg-bg-sunken transition-colors\"\n aria-label={tr('vibecontrols.common.close', 'Close')}\n >\n <X className=\"size-4 text-text-secondary\" />\n </button>\n </header>\n\n <div className=\"flex-1 min-h-0 overflow-y-auto\">\n {loading && bookmarks.length === 0 && (\n <div className=\"px-4 py-6 text-xs text-text-tertiary\">\n {tr('vibecontrols.common.loading', 'Loading...')}\n </div>\n )}\n\n {!loading && bookmarks.length === 0 && (\n <div className=\"px-4 py-10 flex flex-col items-center text-center gap-2\">\n <Bookmark className=\"size-8 text-text-muted\" />\n <p className=\"text-sm font-medium text-text-primary\">\n {tr(\n 'vibecontrols.agentManager.bookmarksDrawer.empty',\n 'No bookmarks in this session yet'\n )}\n </p>\n <p className=\"text-xs text-text-secondary max-w-xs\">\n {tr(\n 'vibecontrols.agentManager.bookmarksDrawer.emptyHint',\n 'Click the bookmark icon on any message to save it for later.'\n )}\n </p>\n </div>\n )}\n\n <ul className=\"divide-y divide-border-subtle\">\n {bookmarks.map((bm: AgentMessageBookmarkFieldsFragment) => {\n const msg = messageById.get(bm.messageId);\n const isStale = !msg;\n const isEditing = editingId === bm.id;\n\n return (\n <li key={bm.id} className=\"px-4 py-3 hover:bg-bg-elevated/40 transition-colors\">\n <div className=\"flex items-start gap-2\">\n <div className=\"flex-1 min-w-0\">\n {isEditing ? (\n <input\n aria-label=\"control\"\n value={labelDraft}\n onChange={(e) => setLabelDraft(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') void saveEdit(bm.id);\n if (e.key === 'Escape') {\n setEditingId(null);\n setLabelDraft('');\n }\n }}\n placeholder={tr(\n 'vibecontrols.agentManager.bookmarksDrawer.labelPlaceholder',\n 'Add a label (optional)'\n )}\n className=\"w-full bg-bg-sunken border border-border-subtle rounded px-2 py-1 text-xs text-text-primary placeholder:text-text-tertiary focus:outline-none focus:border-action-primary-bg\"\n />\n ) : (\n <p className=\"text-sm font-medium text-text-primary truncate\">\n {bm.label ||\n (msg?.role === 'user'\n ? tr('vibecontrols.agentManager.bookmarksDrawer.fromUser', 'From you')\n : tr(\n 'vibecontrols.agentManager.bookmarksDrawer.fromAssistant',\n 'Assistant reply'\n ))}\n </p>\n )}\n\n {isStale ? (\n <p className=\"text-xs text-text-tertiary italic mt-1\">\n {tr(\n 'vibecontrols.agentManager.bookmarksDrawer.stale',\n 'Message no longer available'\n )}\n </p>\n ) : (\n <p className=\"text-xs text-text-secondary mt-1 line-clamp-2\">\n {snippet(msg.content)}\n </p>\n )}\n\n <p className=\"text-[10px] text-text-tertiary mt-1\">\n {relativeTime(bm.createdAt)}\n </p>\n </div>\n\n <div className=\"flex items-center gap-0.5 shrink-0\">\n {!isStale && !isEditing && (\n <button\n type=\"button\"\n onClick={() => {\n onJump(bm.messageId);\n onClose();\n }}\n className=\"p-1 rounded hover:bg-bg-sunken transition-colors\"\n title={tr(\n 'vibecontrols.agentManager.bookmarksDrawer.jump',\n 'Jump to message'\n )}\n aria-label={tr(\n 'vibecontrols.agentManager.bookmarksDrawer.jump',\n 'Jump to message'\n )}\n >\n <ChevronRight className=\"size-3.5 text-text-secondary\" />\n </button>\n )}\n\n {isEditing ? (\n <button\n type=\"button\"\n onClick={() => void saveEdit(bm.id)}\n className=\"p-1 rounded hover:bg-bg-sunken transition-colors\"\n aria-label={tr('vibecontrols.common.save', 'Save')}\n >\n <Check className=\"size-3.5 text-status-success-text\" />\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={() => startEdit(bm.id, bm.label)}\n className=\"p-1 rounded hover:bg-bg-sunken transition-colors\"\n aria-label={tr(\n 'vibecontrols.agentManager.bookmarksDrawer.editLabel',\n 'Edit label'\n )}\n >\n <Pencil className=\"size-3.5 text-text-secondary\" />\n </button>\n )}\n\n <button\n type=\"button\"\n onClick={() => void removeBookmark(bm.id)}\n className=\"p-1 rounded hover:bg-bg-sunken transition-colors\"\n aria-label={tr(\n 'vibecontrols.agentManager.messageItem.removeBookmark',\n 'Remove bookmark'\n )}\n >\n <Trash2 className=\"size-3.5 text-status-error-text\" />\n </button>\n </div>\n </div>\n </li>\n );\n })}\n </ul>\n </div>\n\n <footer className=\"px-4 py-3 border-t border-border-default flex-shrink-0\">\n <button\n type=\"button\"\n onClick={() => {\n onClose();\n navigate('/vibecontrols/ai/bookmarks');\n }}\n className=\"inline-flex items-center gap-1.5 text-xs font-medium text-action-primary-text hover:underline\"\n >\n <ExternalLink className=\"size-3\" />\n {tr(\n 'vibecontrols.agentManager.bookmarksDrawer.seeAll',\n 'See all bookmarks across sessions'\n )}\n </button>\n </footer>\n </aside>\n </div>\n );\n};\n"],"mappings":"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"}
@@ -14,11 +14,11 @@ import { VoiceToggle as ae } from "./controls/VoiceToggle.js";
14
14
  import { FileAttachButton as oe } from "./controls/FileAttachButton.js";
15
15
  import { createDropHandlers as se } from "./controls/createDropHandlers.js";
16
16
  import { ContextLevelToggle as ce } from "./controls/ContextLevelToggle.js";
17
- import { useCallback as s, useEffect as c, useMemo as l, useRef as le, useState as u } from "react";
18
- import { ArrowUp as ue, ChevronDown as de, Clock as fe, Square as pe, X as me } from "lucide-react";
19
- import { jsx as d, jsxs as f } from "react/jsx-runtime";
17
+ import { useCallback as s, useEffect as c, useMemo as l, useRef as u, useState as d } from "react";
18
+ import { ArrowUp as le, ChevronDown as ue, Clock as de, Square as fe, X as pe } from "lucide-react";
19
+ import { jsx as f, jsxs as p } from "react/jsx-runtime";
20
20
  //#region src/components/agent-manager/AgentManagerInputArea.tsx
21
- var p = [
21
+ var m = [
22
22
  {
23
23
  command: "/new",
24
24
  description: "Create new session"
@@ -56,7 +56,7 @@ var p = [
56
56
  command: "/help",
57
57
  description: "Show available commands"
58
58
  }
59
- ], m = [
59
+ ], h = [
60
60
  "claude",
61
61
  "codex",
62
62
  "gemini",
@@ -73,16 +73,16 @@ var p = [
73
73
  "pi",
74
74
  "aider",
75
75
  "plandex"
76
- ], h = ["sdk", "cli"];
77
- function g({ agentId: g, sessionId: _, onSend: v, onCancel: y, mcpServers: he = [], agentTunnelUrl: b }) {
78
- let [x, S] = u(""), [C, w] = u([]), [ge, T] = u(!1), [E, _e] = u(""), [D, O] = u(!1), [k, A] = u(!1), [j, M] = u(""), [ve, N] = u([]), P = e(), F = le(null), I = le(null);
76
+ ], g = ["sdk", "cli"];
77
+ function _({ agentId: _, sessionId: v, onSend: y, onCancel: b, mcpServers: me = [], agentTunnelUrl: he }) {
78
+ let [x, S] = d(""), [C, w] = d([]), [ge, T] = d(!1), [E, _e] = d(""), [D, O] = d(!1), [k, A] = d(!1), [j, M] = d(""), [ve, N] = d([]), P = e(), F = u(null), I = u(null);
79
79
  c(() => {
80
80
  F.current?.focus({ preventScroll: !0 });
81
81
  }, []);
82
- let L = i((e) => e.sessionStates[_]), R = i((e) => e.setSessionModel), z = i((e) => e.setSessionSdk), B = i((e) => e.setSessionMode), ye = i((e) => e.setSessionPermissionMode), be = i((e) => e.toggleVoice), xe = i((e) => e.toggleThinking), Se = i((e) => e.setSessionContextLevel), Ce = i((e) => e.setSessionVibe), we = i((e) => e.setSessionRootPath), V = i((e) => e.openSession), H = i((e) => e.addMessage), { vibes: Te, agents: U } = t(), { active: W } = n(l(() => U.find((e) => e.id === g) ?? null, [U, g])?.id ?? null), G = l(() => ({
83
- id: g,
82
+ let L = i((e) => e.sessionStates[v]), R = i((e) => e.setSessionModel), z = i((e) => e.setSessionSdk), B = i((e) => e.setSessionMode), ye = i((e) => e.setSessionPermissionMode), be = i((e) => e.toggleVoice), xe = i((e) => e.toggleThinking), Se = i((e) => e.setSessionContextLevel), Ce = i((e) => e.setSessionVibe), we = i((e) => e.setSessionRootPath), V = i((e) => e.openSession), H = i((e) => e.addMessage), { vibes: Te, agents: U } = t(), { active: W } = n(l(() => U.find((e) => e.id === _) ?? null, [U, _])?.id ?? null), G = l(() => ({
83
+ id: _,
84
84
  profile: W
85
- }), [g, W]), { isListening: K, transcript: q, startListening: Ee, stopListening: De } = te(), J = L?.status === "streaming", Y = x.trim().length > 0 && !J;
85
+ }), [_, W]), { isListening: K, transcript: q, startListening: Ee, stopListening: De } = te(), J = L?.status === "streaming", Y = x.trim().length > 0 && !J;
86
86
  c(() => {
87
87
  q && K && S((e) => e + (e ? " " : "") + q);
88
88
  }, [q, K]), c(() => {
@@ -97,7 +97,7 @@ function g({ agentId: g, sessionId: _, onSend: v, onCancel: y, mcpServers: he =
97
97
  }, [G]), c(() => {
98
98
  x.startsWith("/") && !x.includes(" ") ? (T(!0), _e(x.slice(1))) : T(!1);
99
99
  }, [x]);
100
- let Oe = l(() => p.filter((e) => e.command.toLowerCase().includes(`/${E.toLowerCase()}`)), [E]);
100
+ let Oe = l(() => m.filter((e) => e.command.toLowerCase().includes(`/${E.toLowerCase()}`)), [E]);
101
101
  c(() => {
102
102
  let e = F.current;
103
103
  e && (e.style.height = "auto", e.style.height = `${Math.min(e.scrollHeight, 200)}px`);
@@ -109,19 +109,18 @@ function g({ agentId: g, sessionId: _, onSend: v, onCancel: y, mcpServers: he =
109
109
  return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
110
110
  }, [D, k]);
111
111
  let X = s((e) => {
112
- H(_, {
112
+ H(v, {
113
113
  id: `sys-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`,
114
114
  role: "system",
115
115
  content: e,
116
116
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
117
117
  });
118
- }, [H, _]), ke = s(async () => {
119
- if (!(!x.trim() || !j || !b || !g)) try {
118
+ }, [H, v]), ke = s(async () => {
119
+ if (!(!x.trim() || !j || !_)) try {
120
120
  let e = await ne({
121
- sessionId: _,
122
- agentTunnelUrl: b,
121
+ sessionId: v,
123
122
  agentRef: {
124
- agentId: g,
123
+ agentId: _,
125
124
  profile: W ?? "default"
126
125
  },
127
126
  prompt: x.trim(),
@@ -134,9 +133,8 @@ function g({ agentId: g, sessionId: _, onSend: v, onCancel: y, mcpServers: he =
134
133
  }, [
135
134
  x,
136
135
  j,
137
- b,
136
+ v,
138
137
  _,
139
- g,
140
138
  W,
141
139
  X
142
140
  ]), Z = s((e) => {
@@ -149,32 +147,32 @@ function g({ agentId: g, sessionId: _, onSend: v, onCancel: y, mcpServers: he =
149
147
  X(r ? `Session renamed to "${r}".` : "Usage: /rename <name>");
150
148
  break;
151
149
  case "/model":
152
- r ? (R(_, r), X(`Model switched to "${r}".`)) : X("Usage: /model <model-name>");
150
+ r ? (R(v, r), X(`Model switched to "${r}".`)) : X("Usage: /model <model-name>");
153
151
  break;
154
152
  case "/sdk":
155
- if (r && m.includes(r)) {
153
+ if (r && h.includes(r)) {
156
154
  let e = r;
157
- z(_, e), ee(G, e, L?.model ?? "default").then((e) => R(_, e)).catch(() => R(_, L?.model ?? "default")), X(`SDK switched to "${r}".`);
158
- } else X(`Usage: /sdk <${m.join("|")}>`);
155
+ z(v, e), ee(G, e, L?.model ?? "default").then((e) => R(v, e)).catch(() => R(v, L?.model ?? "default")), X(`SDK switched to "${r}".`);
156
+ } else X(`Usage: /sdk <${h.join("|")}>`);
159
157
  break;
160
158
  case "/mode":
161
- r && h.includes(r) ? (B(_, r), X(`Mode switched to "${r}".`)) : X(`Usage: /mode <${h.join("|")}>`);
159
+ r && g.includes(r) ? (B(v, r), X(`Mode switched to "${r}".`)) : X(`Usage: /mode <${g.join("|")}>`);
162
160
  break;
163
161
  case "/export": {
164
162
  let e = r === "md" ? "md" : "json", t = L?.messages ?? [], n = e === "json" ? JSON.stringify(t, null, 2) : t.map((e) => `**${e.role}** (${e.timestamp ?? ""}):\n${e.content ?? ""}`).join("\n\n---\n\n"), i = new Blob([n], { type: e === "json" ? "application/json" : "text/markdown" }), a = URL.createObjectURL(i), o = document.createElement("a");
165
- o.href = a, o.download = `conversation-${_}.${e}`, o.click(), URL.revokeObjectURL(a), X(`Conversation exported as ${e}.`);
163
+ o.href = a, o.download = `conversation-${v}.${e}`, o.click(), URL.revokeObjectURL(a), X(`Conversation exported as ${e}.`);
166
164
  break;
167
165
  }
168
166
  case "/clear":
169
167
  X("Conversation cleared.");
170
168
  break;
171
169
  case "/help":
172
- X(`Available commands:\n${p.map((e) => ` ${e.command}${e.args ? " " + e.args : ""} - ${e.description}`).join("\n")}`);
170
+ X(`Available commands:\n${m.map((e) => ` ${e.command}${e.args ? " " + e.args : ""} - ${e.description}`).join("\n")}`);
173
171
  break;
174
172
  default: X(`Unknown command: ${n}. Type /help for available commands.`);
175
173
  }
176
174
  }, [
177
- _,
175
+ v,
178
176
  L?.messages,
179
177
  L?.model,
180
178
  V,
@@ -192,98 +190,98 @@ function g({ agentId: g, sessionId: _, onSend: v, onCancel: y, mcpServers: he =
192
190
  Z(e), S(""), w([]);
193
191
  return;
194
192
  }
195
- v(e, C.length > 0 ? C : void 0), S(""), w([]);
193
+ y(e, C.length > 0 ? C : void 0), S(""), w([]);
196
194
  }, [
197
195
  Y,
198
196
  x,
199
197
  C,
200
- v,
198
+ y,
201
199
  Z
202
200
  ]), je = s((e) => {
203
201
  e.key === "Enter" && !e.shiftKey && (e.preventDefault(), Q());
204
202
  }, [Q]), Me = s(() => {
205
- y?.();
206
- }, [y]), $ = s((e) => {
203
+ b?.();
204
+ }, [b]), $ = s((e) => {
207
205
  w((t) => [...t, ...e]);
208
206
  }, []), Ne = s((e) => {
209
207
  w((t) => t.filter((t, n) => n !== e));
210
208
  }, []), Pe = se($);
211
- return L ? /* @__PURE__ */ f("div", {
209
+ return L ? /* @__PURE__ */ p("div", {
212
210
  className: "relative z-30 border-t border-border-default bg-bg-surface",
213
211
  ...Pe,
214
212
  children: [
215
- ge && Oe.length > 0 && /* @__PURE__ */ d("div", {
213
+ ge && Oe.length > 0 && /* @__PURE__ */ f("div", {
216
214
  className: "absolute bottom-full left-0 right-0 mb-1 mx-3 bg-bg-elevated border border-border-default rounded-lg shadow-lg max-h-48 overflow-y-auto z-50",
217
- children: Oe.map((e) => /* @__PURE__ */ f("button", {
215
+ children: Oe.map((e) => /* @__PURE__ */ p("button", {
218
216
  type: "button",
219
217
  onClick: () => Ae(e),
220
218
  className: "flex items-center gap-2 w-full px-3 py-2 text-left hover:bg-bg-sunken transition-colors",
221
219
  children: [
222
- /* @__PURE__ */ d("span", {
220
+ /* @__PURE__ */ f("span", {
223
221
  className: "font-mono text-xs text-text-primary",
224
222
  children: e.command
225
223
  }),
226
- e.args && /* @__PURE__ */ d("span", {
224
+ e.args && /* @__PURE__ */ f("span", {
227
225
  className: "text-text-tertiary text-xs",
228
226
  children: e.args
229
227
  }),
230
- /* @__PURE__ */ d("span", {
228
+ /* @__PURE__ */ f("span", {
231
229
  className: "text-text-secondary text-xs ml-auto",
232
230
  children: e.description
233
231
  })
234
232
  ]
235
233
  }, e.command))
236
234
  }),
237
- C.length > 0 && /* @__PURE__ */ d("div", {
235
+ C.length > 0 && /* @__PURE__ */ f("div", {
238
236
  className: "flex items-center gap-2 px-3 pt-2 overflow-x-auto",
239
- children: C.map((e, t) => /* @__PURE__ */ f("div", {
237
+ children: C.map((e, t) => /* @__PURE__ */ p("div", {
240
238
  className: "flex items-center gap-1.5 px-2 py-1 rounded-md bg-bg-elevated border border-border-default text-xs text-text-secondary",
241
- children: [/* @__PURE__ */ d("span", {
239
+ children: [/* @__PURE__ */ f("span", {
242
240
  className: "truncate max-w-[120px]",
243
241
  children: e.name
244
- }), /* @__PURE__ */ d("button", {
242
+ }), /* @__PURE__ */ f("button", {
245
243
  type: "button",
246
244
  onClick: () => Ne(t),
247
245
  className: "p-0.5 rounded hover:bg-bg-sunken transition-colors flex-shrink-0",
248
- children: /* @__PURE__ */ d(me, { className: "size-3" })
246
+ children: /* @__PURE__ */ f(pe, { className: "size-3" })
249
247
  })]
250
248
  }, `${e.name}-${t}`))
251
249
  }),
252
- /* @__PURE__ */ f("div", {
250
+ /* @__PURE__ */ p("div", {
253
251
  className: "flex flex-wrap items-center gap-1 px-3 pt-2 pb-1 overflow-x-auto",
254
252
  children: [
255
- /* @__PURE__ */ d(o, {
253
+ /* @__PURE__ */ f(o, {
256
254
  sdk: L.sdk,
257
255
  mode: L.mode,
258
256
  providers: ve,
259
257
  onSdkChange: (e) => {
260
- z(_, e), ee(G, e, L.model ?? "default").then((e) => R(_, e)).catch(() => R(_, L.model ?? "default"));
258
+ z(v, e), ee(G, e, L.model ?? "default").then((e) => R(v, e)).catch(() => R(v, L.model ?? "default"));
261
259
  },
262
- onModeChange: (e) => B(_, e)
260
+ onModeChange: (e) => B(v, e)
263
261
  }),
264
- /* @__PURE__ */ d(a, {
262
+ /* @__PURE__ */ f(a, {
265
263
  value: L.model,
266
- onChange: (e) => R(_, e),
264
+ onChange: (e) => R(v, e),
267
265
  provider: L.sdk,
268
- agentId: g
266
+ agentId: _
269
267
  }),
270
- /* @__PURE__ */ d(re, {
268
+ /* @__PURE__ */ f(re, {
271
269
  value: L.permissionMode,
272
270
  mode: L.mode,
273
- onChange: (e) => ye(_, e)
271
+ onChange: (e) => ye(v, e)
274
272
  }),
275
- /* @__PURE__ */ d(ie, {
273
+ /* @__PURE__ */ f(ie, {
276
274
  selected: L.mcpServers,
277
- available: he,
275
+ available: me,
278
276
  onChange: () => {}
279
277
  }),
280
- /* @__PURE__ */ d(ce, {
278
+ /* @__PURE__ */ f(ce, {
281
279
  agentId: "",
282
- sessionId: _,
280
+ sessionId: v,
283
281
  contextLevel: L.contextLevel,
284
282
  rootPath: L.rootPath,
285
283
  onChange: (e, t, n) => {
286
- Se(_, e), we(_, t ?? null), Ce(_, n ?? null, t ?? null);
284
+ Se(v, e), we(v, t ?? null), Ce(v, n ?? null, t ?? null);
287
285
  },
288
286
  vibes: Te.map((e) => ({
289
287
  id: e.id,
@@ -291,25 +289,25 @@ function g({ agentId: g, sessionId: _, onSend: v, onCancel: y, mcpServers: he =
291
289
  path: e.path
292
290
  }))
293
291
  }),
294
- /* @__PURE__ */ d("div", { className: "flex-1" }),
295
- /* @__PURE__ */ d("button", {
292
+ /* @__PURE__ */ f("div", { className: "flex-1" }),
293
+ /* @__PURE__ */ f("button", {
296
294
  type: "button",
297
- onClick: () => xe(_),
295
+ onClick: () => xe(v),
298
296
  className: `p-1.5 rounded text-xs font-medium transition-colors ${L.showThinking ? "bg-action-primary-bg/10 text-action-primary-text" : "text-text-tertiary hover:text-text-secondary"}`,
299
297
  title: L.showThinking ? P("vibecontrols.agentManager.inputArea.hideThinking", "Hide thinking") : P("vibecontrols.agentManager.inputArea.showThinking", "Show thinking"),
300
298
  children: "Think"
301
299
  }),
302
- /* @__PURE__ */ f("button", {
300
+ /* @__PURE__ */ p("button", {
303
301
  type: "button",
304
302
  onClick: () => {
305
303
  let e = window.prompt("Context history limit (messages sent with each prompt):", String(L.contextHistoryLimit));
306
304
  if (e !== null) {
307
305
  let t = parseInt(e, 10);
308
306
  if (!isNaN(t) && t >= 0) {
309
- let e = i.getState().sessionStates[_];
307
+ let e = i.getState().sessionStates[v];
310
308
  e && i.setState((n) => ({ sessionStates: {
311
309
  ...n.sessionStates,
312
- [_]: {
310
+ [v]: {
313
311
  ...e,
314
312
  contextHistoryLimit: t
315
313
  }
@@ -321,19 +319,19 @@ function g({ agentId: g, sessionId: _, onSend: v, onCancel: y, mcpServers: he =
321
319
  title: `Context history: last ${L.contextHistoryLimit} messages sent with each prompt`,
322
320
  children: ["H:", L.contextHistoryLimit]
323
321
  }),
324
- /* @__PURE__ */ d(ae, {
322
+ /* @__PURE__ */ f(ae, {
325
323
  enabled: L.voiceEnabled,
326
324
  onToggle: () => {
327
- be(_), L.voiceEnabled ? De() : Ee();
325
+ be(v), L.voiceEnabled ? De() : Ee();
328
326
  },
329
327
  isListening: K
330
328
  }),
331
- /* @__PURE__ */ d(oe, { onFileSelect: $ })
329
+ /* @__PURE__ */ f(oe, { onFileSelect: $ })
332
330
  ]
333
331
  }),
334
- /* @__PURE__ */ f("div", {
332
+ /* @__PURE__ */ p("div", {
335
333
  className: "flex items-end gap-2 px-3 pb-3 pt-1",
336
- children: [/* @__PURE__ */ d("textarea", {
334
+ children: [/* @__PURE__ */ f("textarea", {
337
335
  "aria-label": "control",
338
336
  ref: F,
339
337
  value: x,
@@ -343,61 +341,61 @@ function g({ agentId: g, sessionId: _, onSend: v, onCancel: y, mcpServers: he =
343
341
  rows: 1,
344
342
  className: "flex-1 resize-none rounded-lg border border-border-default bg-bg-primary px-3 py-2 text-sm text-text-primary placeholder:text-text-tertiary focus:outline-none focus:border-border-strong transition-colors",
345
343
  disabled: J
346
- }), J ? /* @__PURE__ */ d("button", {
344
+ }), J ? /* @__PURE__ */ f("button", {
347
345
  type: "button",
348
346
  onClick: Me,
349
347
  className: "flex-shrink-0 p-2 rounded-lg bg-status-error-bg text-status-error-text hover:opacity-90 transition-opacity",
350
348
  title: P("vibecontrols.agentManager.inputArea.cancel", "Cancel"),
351
- children: /* @__PURE__ */ d(pe, { className: "size-4" })
352
- }) : /* @__PURE__ */ f("div", {
349
+ children: /* @__PURE__ */ f(fe, { className: "size-4" })
350
+ }) : /* @__PURE__ */ p("div", {
353
351
  className: "flex items-end flex-shrink-0 relative",
354
352
  ref: I,
355
353
  children: [
356
- /* @__PURE__ */ d("button", {
354
+ /* @__PURE__ */ f("button", {
357
355
  type: "button",
358
356
  onClick: Q,
359
357
  disabled: !Y,
360
358
  className: "p-2 rounded-l-lg bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg-hover disabled:opacity-40 disabled:cursor-not-allowed transition-colors",
361
359
  title: P("vibecontrols.agentManager.inputArea.send", "Send (Enter)"),
362
- children: /* @__PURE__ */ d(ue, { className: "size-4" })
360
+ children: /* @__PURE__ */ f(le, { className: "size-4" })
363
361
  }),
364
- /* @__PURE__ */ d("button", {
362
+ /* @__PURE__ */ f("button", {
365
363
  type: "button",
366
364
  onClick: () => O(!D),
367
365
  disabled: !Y,
368
366
  className: "ml-1 p-2 rounded-r-lg border-l border-action-primary-text/20 bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg-hover disabled:opacity-40 disabled:cursor-not-allowed transition-colors",
369
367
  title: P("vibecontrols.agentManager.inputArea.scheduleSend", "Schedule send"),
370
- children: /* @__PURE__ */ d(de, { className: "size-3" })
368
+ children: /* @__PURE__ */ f(ue, { className: "size-3" })
371
369
  }),
372
- D && /* @__PURE__ */ d("div", {
370
+ D && /* @__PURE__ */ f("div", {
373
371
  className: "absolute bottom-full right-0 mb-1 w-56 bg-bg-surface border border-border-default rounded-md shadow-lg py-1 z-50",
374
- children: k ? /* @__PURE__ */ f("div", {
372
+ children: k ? /* @__PURE__ */ p("div", {
375
373
  className: "px-3 py-2 space-y-2",
376
374
  children: [
377
- /* @__PURE__ */ d("label", {
375
+ /* @__PURE__ */ f("label", {
378
376
  className: "block text-[11px] font-medium text-text-secondary",
379
377
  children: P("vibecontrols.agentManager.inputArea.sendAt", "Send at:")
380
378
  }),
381
- /* @__PURE__ */ d("input", {
379
+ /* @__PURE__ */ f("input", {
382
380
  "aria-label": "control",
383
381
  type: "datetime-local",
384
382
  value: j,
385
383
  onChange: (e) => M(e.target.value),
386
384
  className: "w-full px-2 py-1 text-xs rounded border border-border-default bg-bg-primary text-text-primary focus:outline-none focus:border-border-strong"
387
385
  }),
388
- /* @__PURE__ */ d("button", {
386
+ /* @__PURE__ */ f("button", {
389
387
  type: "button",
390
388
  onClick: () => void ke(),
391
- disabled: !j || !b || !g,
389
+ disabled: !j || !_,
392
390
  className: "w-full px-2 py-1.5 text-xs font-medium rounded bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg-hover disabled:opacity-40 disabled:cursor-not-allowed transition-colors",
393
391
  children: P("vibecontrols.agentManager.inputArea.schedule", "Schedule")
394
392
  })
395
393
  ]
396
- }) : /* @__PURE__ */ f("button", {
394
+ }) : /* @__PURE__ */ p("button", {
397
395
  type: "button",
398
396
  onClick: () => A(!0),
399
397
  className: "flex items-center gap-2 w-full px-3 py-2 text-left text-xs text-text-primary hover:bg-bg-sunken transition-colors",
400
- children: [/* @__PURE__ */ d(fe, { className: "size-3.5 text-text-secondary" }), P("vibecontrols.agentManager.inputArea.scheduleSendEllipsis", "Schedule Send...")]
398
+ children: [/* @__PURE__ */ f(de, { className: "size-3.5 text-text-secondary" }), P("vibecontrols.agentManager.inputArea.scheduleSendEllipsis", "Schedule Send...")]
401
399
  })
402
400
  })
403
401
  ]
@@ -407,6 +405,6 @@ function g({ agentId: g, sessionId: _, onSend: v, onCancel: y, mcpServers: he =
407
405
  }) : null;
408
406
  }
409
407
  //#endregion
410
- export { g as AgentManagerInputArea };
408
+ export { _ as AgentManagerInputArea };
411
409
 
412
410
  //# sourceMappingURL=AgentManagerInputArea.js.map