@agent-native/dispatch 0.25.1 → 0.27.0

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 (30) hide show
  1. package/dist/actions/provider-api-register.d.ts +14 -14
  2. package/dist/components/create-app-popover.d.ts +7 -2
  3. package/dist/components/create-app-popover.d.ts.map +1 -1
  4. package/dist/components/create-app-popover.js +4 -3
  5. package/dist/components/create-app-popover.js.map +1 -1
  6. package/dist/components/index.d.ts +1 -0
  7. package/dist/components/index.d.ts.map +1 -1
  8. package/dist/components/index.js +1 -0
  9. package/dist/components/index.js.map +1 -1
  10. package/dist/components/layout/Layout.d.ts.map +1 -1
  11. package/dist/components/layout/Layout.js +42 -2
  12. package/dist/components/layout/Layout.js.map +1 -1
  13. package/dist/components/simple-agents-panel.d.ts +4 -1
  14. package/dist/components/simple-agents-panel.d.ts.map +1 -1
  15. package/dist/components/simple-agents-panel.js +46 -13
  16. package/dist/components/simple-agents-panel.js.map +1 -1
  17. package/dist/components/workspace-app-host.d.ts +3 -1
  18. package/dist/components/workspace-app-host.d.ts.map +1 -1
  19. package/dist/components/workspace-app-host.js +87 -5
  20. package/dist/components/workspace-app-host.js.map +1 -1
  21. package/package.json +3 -3
  22. package/src/components/create-app-popover.spec.tsx +9 -1
  23. package/src/components/create-app-popover.tsx +9 -1
  24. package/src/components/index.ts +1 -0
  25. package/src/components/layout/Layout.app-chat.spec.ts +22 -0
  26. package/src/components/layout/Layout.tsx +72 -3
  27. package/src/components/simple-agents-panel.spec.tsx +81 -1
  28. package/src/components/simple-agents-panel.tsx +156 -71
  29. package/src/components/workspace-app-host.spec.tsx +57 -0
  30. package/src/components/workspace-app-host.tsx +139 -3
@@ -1 +1 @@
1
- {"version":3,"file":"simple-agents-panel.js","sourceRoot":"","sources":["../../src/components/simple-agents-panel.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n navigateWithAgentChatViewTransition,\n sendToAgentChat,\n} from \"@agent-native/core/client/agent-chat\";\nimport {\n useActionMutation,\n useActionQuery,\n} from \"@agent-native/core/client/hooks\";\nimport { parseCustomAgentProfile } from \"@agent-native/core/resources/metadata\";\nimport {\n IconAdjustmentsHorizontal,\n IconChevronDown,\n IconEdit,\n IconFileImport,\n IconFolder,\n IconLayoutGrid,\n IconMessageCircle,\n IconPlugConnected,\n IconPlus,\n IconTrash,\n IconUpload,\n IconUser,\n} from \"@tabler/icons-react\";\nimport {\n useEffect,\n useRef,\n useState,\n type ChangeEvent,\n type ReactNode,\n} from \"react\";\nimport { useNavigate } from \"react-router\";\nimport { toast } from \"sonner\";\n\nimport {\n buildSimpleAgentContent,\n slugifyAgentName,\n} from \"../lib/simple-agent-profile.js\";\nimport { ActionQueryError } from \"./action-query-error\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"./ui/alert-dialog\";\nimport { Badge } from \"./ui/badge\";\nimport { Button } from \"./ui/button\";\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"./ui/collapsible\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"./ui/dialog\";\nimport { Input } from \"./ui/input\";\nimport { Label } from \"./ui/label\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./ui/select\";\nimport { Skeleton } from \"./ui/skeleton\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"./ui/tabs\";\nimport { Textarea } from \"./ui/textarea\";\n\ninterface WorkspaceAgentResource {\n id: string;\n name: string;\n description: string | null;\n path: string;\n content: string;\n scope: \"all\" | \"selected\";\n updatedAt: number;\n}\n\ninterface AgentPackFileResource extends WorkspaceAgentResource {\n kind: \"agent-file\" | \"skill\";\n}\n\ninterface AgentPackResponse {\n profile: WorkspaceAgentResource;\n root: string;\n files: AgentPackFileResource[];\n}\n\ninterface AgentPackFileInput {\n path: string;\n content: string;\n}\n\nexport function isPendingWorkspaceResourceApproval(result: unknown) {\n if (!result || typeof result !== \"object\") return false;\n const mutation = result as { status?: unknown; changeType?: unknown };\n return (\n mutation.status === \"pending\" &&\n typeof mutation.changeType === \"string\" &&\n mutation.changeType.startsWith(\"workspace-resource.\")\n );\n}\n\nexport function handleAgentPackMutationSuccess(\n result: unknown,\n options: {\n appliedMessage: string;\n approvalMessage: string;\n onApplied: () => void;\n notify?: (message: string) => void;\n },\n) {\n const notify = options.notify || ((message) => toast.success(message));\n if (isPendingWorkspaceResourceApproval(result)) {\n notify(options.approvalMessage);\n return;\n }\n notify(options.appliedMessage);\n options.onApplied();\n}\n\ninterface AgentEditorProps {\n resource?: WorkspaceAgentResource;\n trigger?: ReactNode;\n onSaved?: () => void;\n}\n\nfunction profileFields(resource?: WorkspaceAgentResource) {\n if (!resource) {\n return {\n name: \"\",\n description: \"\",\n instructions: \"# Role\\n\\nDescribe how this agent should work.\\n\",\n model: \"inherit\",\n tools: \"inherit\",\n scope: \"all\" as const,\n };\n }\n\n const profile = parseCustomAgentProfile(resource.content, resource.path);\n return {\n name: profile?.name || resource.name,\n description: profile?.description || resource.description || \"\",\n instructions: profile?.instructions || resource.content,\n model: profile?.model || \"inherit\",\n tools: profile?.tools || \"inherit\",\n scope: resource.scope,\n };\n}\n\nfunction AgentEditorDialog({ resource, trigger, onSaved }: AgentEditorProps) {\n const isEditing = Boolean(resource);\n const [open, setOpen] = useState(false);\n const [name, setName] = useState(\"\");\n const [description, setDescription] = useState(\"\");\n const [instructions, setInstructions] = useState(\"\");\n const [model, setModel] = useState(\"inherit\");\n const [tools, setTools] = useState(\"inherit\");\n const [scope, setScope] = useState<\"all\" | \"selected\">(\"all\");\n const [advancedOpen, setAdvancedOpen] = useState(false);\n\n useEffect(() => {\n if (!open) return;\n const fields = profileFields(resource);\n setName(fields.name);\n setDescription(fields.description);\n setInstructions(fields.instructions);\n setModel(fields.model);\n setTools(fields.tools);\n setScope(fields.scope);\n setAdvancedOpen(fields.model !== \"inherit\" || fields.tools !== \"inherit\");\n }, [open, resource]);\n\n const create = useActionMutation(\"create-workspace-resource\", {\n onSuccess: () => {\n toast.success(\"Agent created\");\n setOpen(false);\n onSaved?.();\n },\n onError: (error) => toast.error(error.message),\n });\n const update = useActionMutation(\"update-workspace-resource\", {\n onSuccess: () => {\n toast.success(\"Agent updated\");\n setOpen(false);\n onSaved?.();\n },\n onError: (error) => toast.error(error.message),\n });\n\n const pending = create.isPending || update.isPending;\n const canSave = Boolean(name.trim() && instructions.trim() && !pending);\n\n function save() {\n const content = buildSimpleAgentContent({\n name,\n description,\n model,\n tools,\n instructions,\n });\n if (resource) {\n update.mutate({\n id: resource.id,\n name: name.trim(),\n description: description.trim(),\n content,\n scope,\n });\n return;\n }\n create.mutate({\n kind: \"agent\",\n name: name.trim(),\n description: description.trim() || undefined,\n path: `agents/${slugifyAgentName(name)}.md`,\n content,\n scope,\n });\n }\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogTrigger asChild>\n {trigger || (\n <Button>\n <IconPlus size={16} />\n Create agent\n </Button>\n )}\n </DialogTrigger>\n <DialogContent className=\"max-w-2xl\">\n <DialogHeader>\n <DialogTitle>\n {isEditing ? \"Manage agent\" : \"Create agent\"}\n </DialogTitle>\n <DialogDescription className=\"sr-only\">\n {isEditing\n ? \"Update this reusable agent profile.\"\n : \"Create a reusable agent profile.\"}\n </DialogDescription>\n </DialogHeader>\n <div className=\"flex flex-col gap-4 py-2\">\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"simple-agent-name\">Name</Label>\n <Input\n id=\"simple-agent-name\"\n value={name}\n onChange={(event) => setName(event.target.value)}\n placeholder=\"User Research\"\n />\n </div>\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"simple-agent-scope\">Availability</Label>\n <Select\n value={scope}\n onValueChange={(value: \"all\" | \"selected\") => setScope(value)}\n >\n <SelectTrigger id=\"simple-agent-scope\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">All apps</SelectItem>\n <SelectItem value=\"selected\">Selected apps</SelectItem>\n </SelectContent>\n </Select>\n </div>\n </div>\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"simple-agent-description\">Description</Label>\n <Input\n id=\"simple-agent-description\"\n value={description}\n onChange={(event) => setDescription(event.target.value)}\n placeholder=\"Synthesizes user research into clear insights\"\n />\n </div>\n <Collapsible open={advancedOpen} onOpenChange={setAdvancedOpen}>\n <CollapsibleTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"group -ml-2 gap-1.5 text-muted-foreground\"\n >\n <IconAdjustmentsHorizontal size={15} />\n Advanced\n <IconChevronDown\n className=\"transition-transform group-data-[state=open]:rotate-180\"\n size={15}\n />\n </Button>\n </CollapsibleTrigger>\n <CollapsibleContent className=\"pt-3\">\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"simple-agent-model\">Model</Label>\n <Input\n id=\"simple-agent-model\"\n value={model}\n onChange={(event) => setModel(event.target.value)}\n placeholder=\"inherit\"\n />\n </div>\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"simple-agent-tools\">Tools</Label>\n <Input\n id=\"simple-agent-tools\"\n value={tools}\n onChange={(event) => setTools(event.target.value)}\n placeholder=\"inherit\"\n />\n </div>\n </div>\n </CollapsibleContent>\n </Collapsible>\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"simple-agent-instructions\">Instructions</Label>\n <Textarea\n id=\"simple-agent-instructions\"\n value={instructions}\n onChange={(event) => setInstructions(event.target.value)}\n rows={12}\n className=\"font-mono text-sm\"\n placeholder=\"# Role\\n\\nDescribe how this agent should work.\"\n />\n </div>\n </div>\n <DialogFooter>\n <Button onClick={save} disabled={!canSave}>\n {pending\n ? \"Saving...\"\n : isEditing\n ? \"Save changes\"\n : \"Create agent\"}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction AgentPackDialog({\n resource,\n onChanged,\n trigger,\n}: {\n resource: WorkspaceAgentResource;\n onChanged?: () => void;\n trigger?: ReactNode;\n}) {\n const [open, setOpen] = useState(false);\n const [selectedId, setSelectedId] = useState(resource.id);\n const [content, setContent] = useState(resource.content);\n const [addOpen, setAddOpen] = useState(false);\n const [newPath, setNewPath] = useState(\"\");\n const [newKind, setNewKind] = useState<\"agent-file\" | \"skill\">(\"agent-file\");\n const [newContent, setNewContent] = useState(\"\");\n const query = useActionQuery<AgentPackResponse>(\n \"list-agent-pack\",\n { agentId: resource.id },\n { enabled: open },\n );\n const update = useActionMutation(\"update-workspace-resource\", {\n onSuccess: (result) => {\n handleAgentPackMutationSuccess(result, {\n appliedMessage: \"Pack file updated\",\n approvalMessage: \"Pack file update queued for approval\",\n onApplied: () => {\n void query.refetch();\n onChanged?.();\n },\n });\n },\n onError: (error) => toast.error(error.message),\n });\n const create = useActionMutation(\"create-workspace-resource\", {\n onSuccess: (result) => {\n handleAgentPackMutationSuccess(result, {\n appliedMessage: \"Pack file added\",\n approvalMessage: \"Pack file addition queued for approval\",\n onApplied: () => {\n setAddOpen(false);\n setNewPath(\"\");\n setNewContent(\"\");\n void query.refetch();\n onChanged?.();\n },\n });\n },\n onError: (error) => toast.error(error.message),\n });\n const remove = useActionMutation(\"delete-workspace-resource\", {\n onSuccess: () => {\n toast.success(\"Pack file removed\");\n setSelectedId(resource.id);\n void query.refetch();\n onChanged?.();\n },\n onError: (error) => toast.error(error.message),\n });\n\n const files = query.data\n ? [{ ...query.data.profile, kind: \"agent\" as const }, ...query.data.files]\n : [];\n const selected = files.find((file) => file.id === selectedId) ?? files[0];\n\n useEffect(() => {\n if (!open) return;\n setSelectedId(resource.id);\n }, [open, resource.id]);\n\n useEffect(() => {\n if (!selected) return;\n setSelectedId(selected.id);\n setContent(selected.content);\n }, [selected?.id, selected?.content]);\n\n function addFile() {\n const relativePath = newPath.trim().replaceAll(\"\\\\\", \"/\");\n if (\n !relativePath ||\n relativePath.startsWith(\"/\") ||\n relativePath.includes(\"..\") ||\n relativePath.split(\"/\").some((part) => !part || part === \".\")\n ) {\n toast.error(\"Use a relative pack path without ..\");\n return;\n }\n const packPath =\n newKind === \"skill\" && !relativePath.startsWith(\"skills/\")\n ? `skills/${relativePath}`\n : relativePath;\n const name = packPath.split(\"/\").pop() || packPath;\n create.mutate({\n kind: newKind,\n name,\n path: `${query.data?.root || `agents/${slugifyAgentName(resource.name)}`}/${packPath}`,\n content: newContent,\n scope: resource.scope,\n });\n }\n\n return (\n <Dialog\n open={open}\n onOpenChange={(nextOpen) => {\n setOpen(nextOpen);\n if (!nextOpen) setAddOpen(false);\n }}\n >\n <DialogTrigger asChild>\n {trigger || (\n <Button variant=\"ghost\" size=\"sm\">\n <IconFolder size={15} />\n Pack\n </Button>\n )}\n </DialogTrigger>\n <DialogContent className=\"max-w-4xl\">\n <DialogHeader>\n <DialogTitle>Agent pack</DialogTitle>\n <DialogDescription className=\"sr-only\">\n Edit the profile, reference files, context, and skills that belong\n to this agent.\n </DialogDescription>\n </DialogHeader>\n <div className=\"grid min-h-0 gap-4 md:grid-cols-[220px_minmax(0,1fr)]\">\n <div className=\"flex min-w-0 flex-col gap-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-xs font-medium text-muted-foreground\">\n Files\n </span>\n <Dialog open={addOpen} onOpenChange={setAddOpen}>\n <DialogTrigger asChild>\n <Button variant=\"outline\" size=\"sm\">\n <IconPlus size={14} />\n Add\n </Button>\n </DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Add pack file</DialogTitle>\n <DialogDescription className=\"sr-only\">\n Add a text reference or agent-owned skill to this pack.\n </DialogDescription>\n </DialogHeader>\n <div className=\"flex flex-col gap-4 py-2\">\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"agent-pack-file-path\">Path</Label>\n <Input\n id=\"agent-pack-file-path\"\n value={newPath}\n onChange={(event) => setNewPath(event.target.value)}\n placeholder=\"context/brief.md\"\n />\n </div>\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"agent-pack-file-kind\">Type</Label>\n <Select\n value={newKind}\n onValueChange={(value: \"agent-file\" | \"skill\") =>\n setNewKind(value)\n }\n >\n <SelectTrigger id=\"agent-pack-file-kind\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"agent-file\">\n Reference file\n </SelectItem>\n <SelectItem value=\"skill\">Skill</SelectItem>\n </SelectContent>\n </Select>\n </div>\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"agent-pack-file-content\">Content</Label>\n <Textarea\n id=\"agent-pack-file-content\"\n value={newContent}\n onChange={(event) => setNewContent(event.target.value)}\n rows={8}\n className=\"font-mono text-sm\"\n />\n </div>\n </div>\n <DialogFooter>\n <Button\n onClick={addFile}\n disabled={!newPath.trim() || create.isPending}\n >\n {create.isPending ? \"Adding...\" : \"Add file\"}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </div>\n {query.isLoading ? (\n <Skeleton className=\"h-24 w-full\" />\n ) : (\n <div className=\"flex flex-col gap-1\">\n {files.map((file) => (\n <Button\n key={file.id}\n type=\"button\"\n variant={selected?.id === file.id ? \"secondary\" : \"ghost\"}\n className=\"h-auto w-full justify-start px-2 py-2 text-left\"\n onClick={() => setSelectedId(file.id)}\n >\n <span className=\"min-w-0 truncate text-xs\">\n {file.path.replace(`${query.data?.root || \"\"}/`, \"\")}\n </span>\n </Button>\n ))}\n </div>\n )}\n </div>\n <div className=\"flex min-w-0 flex-col gap-3\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-medium\">\n {selected?.path || \"Select a file\"}\n </div>\n {selected && selected.kind !== \"agent\" ? (\n <Badge variant=\"outline\">\n {selected.kind === \"skill\" ? \"Skill\" : \"Reference\"}\n </Badge>\n ) : null}\n </div>\n <div className=\"flex items-center gap-1\">\n {selected && selected.kind !== \"agent\" ? (\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <Button variant=\"ghost\" size=\"sm\">\n <IconTrash size={15} />\n Remove\n </Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>\n Remove this pack file?\n </AlertDialogTitle>\n <AlertDialogDescription>\n The file will no longer be available to this agent.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction\n onClick={() => remove.mutate({ id: selected.id })}\n disabled={remove.isPending}\n >\n Remove\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n ) : null}\n <Button\n size=\"sm\"\n onClick={() =>\n selected && update.mutate({ id: selected.id, content })\n }\n disabled={\n !selected ||\n update.isPending ||\n content === selected.content\n }\n >\n {update.isPending ? \"Saving...\" : \"Save file\"}\n </Button>\n </div>\n </div>\n <Textarea\n value={content}\n onChange={(event) => setContent(event.target.value)}\n disabled={!selected}\n rows={18}\n className=\"min-h-[360px] font-mono text-sm\"\n />\n </div>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction ImportAgentDialog({ onImported }: { onImported?: () => void }) {\n const [open, setOpen] = useState(false);\n const [mode, setMode] = useState<\"file\" | \"folder\" | \"endpoint\">(\"file\");\n const [source, setSource] = useState(\"\");\n const [fileName, setFileName] = useState(\"\");\n const [scope, setScope] = useState<\"all\" | \"selected\">(\"all\");\n const [url, setUrl] = useState(\"\");\n const [endpointName, setEndpointName] = useState(\"\");\n const [endpointDescription, setEndpointDescription] = useState(\"\");\n const [packFiles, setPackFiles] = useState<AgentPackFileInput[]>([]);\n const [packName, setPackName] = useState(\"\");\n const [packWarnings, setPackWarnings] = useState<string[]>([]);\n const fileRef = useRef<HTMLInputElement>(null);\n const folderRef = useRef<HTMLInputElement>(null);\n\n const importAgent = useActionMutation(\"import-agent\", {\n onSuccess: (result: { status: string; warnings?: string[] }) => {\n toast.success(\n result.status === \"unchanged\"\n ? \"Agent already imported\"\n : \"Agent imported\",\n );\n if (result.warnings?.length) {\n toast.info(result.warnings.join(\" \"));\n }\n setOpen(false);\n onImported?.();\n },\n onError: (error) => toast.error(error.message),\n });\n const connect = useActionMutation(\"connect-external-agent\", {\n onSuccess: () => {\n toast.success(\"Agent connected\");\n setOpen(false);\n onImported?.();\n },\n onError: (error) => toast.error(error.message),\n });\n const importPack = useActionMutation(\"import-agent-pack\", {\n onSuccess: (result: { status: string; warnings?: string[] }) => {\n toast.success(\n result.status === \"pending-approval\"\n ? \"Pack sent for approval\"\n : result.status === \"unchanged\"\n ? \"Agent pack already imported\"\n : \"Agent pack imported\",\n );\n if (result.warnings?.length) toast.info(result.warnings.join(\" \"));\n setOpen(false);\n onImported?.();\n },\n onError: (error) => toast.error(error.message),\n });\n\n useEffect(() => {\n if (!folderRef.current) return;\n folderRef.current.setAttribute(\"webkitdirectory\", \"\");\n folderRef.current.setAttribute(\"directory\", \"\");\n }, [mode, open]);\n\n function reset() {\n setMode(\"file\");\n setSource(\"\");\n setFileName(\"\");\n setScope(\"all\");\n setUrl(\"\");\n setEndpointName(\"\");\n setEndpointDescription(\"\");\n setPackFiles([]);\n setPackName(\"\");\n setPackWarnings([]);\n }\n\n async function handleFile(event: ChangeEvent<HTMLInputElement>) {\n const file = event.target.files?.[0];\n if (!file) return;\n setFileName(file.name);\n setSource(await file.text());\n }\n\n async function handleFolder(event: ChangeEvent<HTMLInputElement>) {\n const selectedFiles = Array.from(event.target.files ?? []);\n if (selectedFiles.length === 0) return;\n const warnings: string[] = [];\n const textExtensions =\n /\\.(md|markdown|txt|json|yaml|yml|csv|html|xml|toml|ts|tsx|js|mjs|py|sh)$/i;\n const pack = await Promise.all(\n selectedFiles.map(async (file) => {\n const path =\n (file as File & { webkitRelativePath?: string }).webkitRelativePath ||\n file.name;\n if (!textExtensions.test(path)) {\n warnings.push(`Skipped non-text file: ${path}`);\n return null;\n }\n return { path, content: await file.text() };\n }),\n );\n const files = pack.filter((file): file is AgentPackFileInput =>\n Boolean(file),\n );\n setPackFiles(files);\n setPackName(files[0]?.path.split(\"/\")[0] || \"Selected folder\");\n setPackWarnings(warnings);\n }\n\n return (\n <Dialog\n open={open}\n onOpenChange={(nextOpen) => {\n setOpen(nextOpen);\n if (!nextOpen) reset();\n }}\n >\n <DialogTrigger asChild>\n <Button variant=\"outline\">\n <IconFileImport size={16} />\n Import or connect\n </Button>\n </DialogTrigger>\n <DialogContent className=\"max-w-2xl\">\n <DialogHeader>\n <DialogTitle>Import an agent</DialogTitle>\n <DialogDescription className=\"sr-only\">\n Import a Claude or JSON agent definition, or connect an external\n agent endpoint.\n </DialogDescription>\n </DialogHeader>\n <Tabs\n value={mode}\n onValueChange={(value) =>\n setMode(value as \"file\" | \"folder\" | \"endpoint\")\n }\n >\n <TabsList className=\"w-full justify-start\">\n <TabsTrigger value=\"file\">Agent file</TabsTrigger>\n <TabsTrigger value=\"folder\">Agent folder</TabsTrigger>\n <TabsTrigger value=\"endpoint\">Connect endpoint</TabsTrigger>\n </TabsList>\n <TabsContent value=\"file\" className=\"flex flex-col gap-4 py-4\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => fileRef.current?.click()}\n >\n <IconUpload size={16} />\n Choose file\n </Button>\n <input\n ref={fileRef}\n type=\"file\"\n accept=\".md,.markdown,.json,.txt\"\n className=\"hidden\"\n onChange={(event) => void handleFile(event)}\n />\n <span className=\"text-xs text-muted-foreground\">\n {fileName || \"Claude .md or JSON agent definition\"}\n </span>\n </div>\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"import-agent-source\">Definition</Label>\n <Textarea\n id=\"import-agent-source\"\n value={source}\n onChange={(event) => setSource(event.target.value)}\n rows={12}\n className=\"font-mono text-sm\"\n placeholder=\"Paste a Claude-style agent file or a JSON definition\"\n />\n </div>\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"import-agent-scope\">Availability</Label>\n <Select\n value={scope}\n onValueChange={(value: \"all\" | \"selected\") => setScope(value)}\n >\n <SelectTrigger id=\"import-agent-scope\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">All apps</SelectItem>\n <SelectItem value=\"selected\">Selected apps</SelectItem>\n </SelectContent>\n </Select>\n </div>\n <DialogFooter>\n <Button\n onClick={() =>\n importAgent.mutate({\n source,\n fileName: fileName || undefined,\n scope,\n })\n }\n disabled={!source.trim() || importAgent.isPending}\n >\n {importAgent.isPending ? \"Importing...\" : \"Import agent\"}\n </Button>\n </DialogFooter>\n </TabsContent>\n <TabsContent value=\"folder\" className=\"flex flex-col gap-4 py-4\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => folderRef.current?.click()}\n >\n <IconFolder size={16} />\n Choose folder\n </Button>\n <input\n ref={folderRef}\n type=\"file\"\n multiple\n className=\"hidden\"\n onChange={(event) => void handleFolder(event)}\n />\n <span className=\"text-xs text-muted-foreground\">\n {packName\n ? `${packName} · ${packFiles.length} files`\n : \"Claude Project or Cowork-style folder\"}\n </span>\n </div>\n {packWarnings.length > 0 ? (\n <div className=\"rounded-lg border border-amber-500/30 bg-amber-500/5 px-3 py-2 text-xs text-amber-800 dark:text-amber-200\">\n {packWarnings.join(\" \")}\n </div>\n ) : null}\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"import-agent-pack-scope\">Availability</Label>\n <Select\n value={scope}\n onValueChange={(value: \"all\" | \"selected\") => setScope(value)}\n >\n <SelectTrigger id=\"import-agent-pack-scope\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">All apps</SelectItem>\n <SelectItem value=\"selected\">Selected apps</SelectItem>\n </SelectContent>\n </Select>\n </div>\n <DialogFooter>\n <Button\n onClick={() => importPack.mutate({ files: packFiles, scope })}\n disabled={packFiles.length === 0 || importPack.isPending}\n >\n {importPack.isPending ? \"Importing...\" : \"Import agent pack\"}\n </Button>\n </DialogFooter>\n </TabsContent>\n <TabsContent value=\"endpoint\" className=\"flex flex-col gap-4 py-4\">\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"external-agent-url\">Endpoint URL</Label>\n <Input\n id=\"external-agent-url\"\n value={url}\n onChange={(event) => setUrl(event.target.value)}\n placeholder=\"https://agent.example.com\"\n />\n </div>\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"external-agent-name\">Name</Label>\n <Input\n id=\"external-agent-name\"\n value={endpointName}\n onChange={(event) => setEndpointName(event.target.value)}\n placeholder=\"Research partner\"\n />\n </div>\n <div className=\"flex flex-col gap-2\">\n <Label>Availability</Label>\n <div className=\"flex h-10 items-center\">\n <Badge variant=\"secondary\">Workspace</Badge>\n </div>\n </div>\n </div>\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"external-agent-description\">Description</Label>\n <Input\n id=\"external-agent-description\"\n value={endpointDescription}\n onChange={(event) => setEndpointDescription(event.target.value)}\n placeholder=\"Optional\"\n />\n </div>\n <p className=\"text-xs text-muted-foreground\">\n Dispatch stores the public endpoint only. Authenticate it after\n connecting.\n </p>\n <DialogFooter>\n <Button\n onClick={() =>\n connect.mutate({\n url,\n name: endpointName || undefined,\n description: endpointDescription || undefined,\n scope: \"shared\",\n })\n }\n disabled={!url.trim() || connect.isPending}\n >\n <IconPlugConnected size={16} />\n {connect.isPending ? \"Connecting...\" : \"Connect agent\"}\n </Button>\n </DialogFooter>\n </TabsContent>\n </Tabs>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction DeleteAgentButton({\n resource,\n onDeleted,\n}: {\n resource: WorkspaceAgentResource;\n onDeleted?: () => void;\n}) {\n const remove = useActionMutation(\"delete-workspace-resource\", {\n onSuccess: () => {\n toast.success(\"Agent removed\");\n onDeleted?.();\n },\n onError: (error) => toast.error(error.message),\n });\n\n return (\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={`Remove ${resource.name}`}\n >\n <IconTrash size={16} />\n </Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Remove {resource.name}?</AlertDialogTitle>\n <AlertDialogDescription>\n This removes the reusable profile from the workspace apps.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction\n onClick={() => remove.mutate({ id: resource.id })}\n disabled={remove.isPending}\n >\n Remove\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n );\n}\n\nfunction AgentRow({\n resource,\n onDeleted,\n onSaved,\n}: {\n resource: WorkspaceAgentResource;\n onDeleted?: () => void;\n onSaved?: () => void;\n}) {\n const navigate = useNavigate();\n const packQuery = useActionQuery<AgentPackResponse>(\n \"list-agent-pack\",\n { agentId: resource.id },\n { enabled: false },\n );\n const promote = useActionMutation<\n AgentAppCreationResult,\n AgentAppCreationInput\n >(\"start-workspace-app-creation\", {\n onSuccess: (result) => {\n if (result.mode === \"local-agent\") {\n sendToAgentChat({\n message: result.prompt ?? result.message,\n submit: true,\n type: \"code\",\n newTab: true,\n reuseEmptyTab: true,\n });\n toast.success(\"Sent to the local agent\");\n return;\n }\n if (result.mode === \"builder\") {\n toast.success(\"App build started\", {\n description: result.message,\n action: result.url\n ? {\n label: \"Open in Builder\",\n onClick: () =>\n window.open(result.url, \"_blank\", \"noopener,noreferrer\"),\n }\n : undefined,\n });\n return;\n }\n toast.error(result.message);\n },\n onError: (error) => toast.error(error.message),\n });\n\n function chat() {\n navigateWithAgentChatViewTransition(\n navigate,\n `/chat?agent=${encodeURIComponent(resource.path)}`,\n );\n }\n\n async function buildApp() {\n const pack = await packQuery.refetch();\n if (pack.error || !pack.data) {\n toast.error(pack.error?.message || \"Could not load the agent pack\");\n return;\n }\n promote.mutate({\n appId: slugifyAgentName(resource.name),\n description: resource.description || undefined,\n prompt: `Turn the \"${resource.name}\" workspace agent into a focused workspace app. Preserve its role and instructions, make the app its usable face, and keep the original reusable agent profile available.`,\n resourceIds: [resource.id, ...pack.data.files.map((file) => file.id)],\n });\n }\n\n return (\n <div className=\"flex items-start gap-3 rounded-xl border bg-card px-4 py-3\">\n <div className=\"flex size-9 shrink-0 items-center justify-center rounded-lg bg-primary/10 text-primary\">\n <IconUser size={18} />\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"text-sm font-medium text-foreground\">\n {resource.name}\n </span>\n <Badge variant=\"outline\">\n {resource.scope === \"all\" ? \"All apps\" : \"Selected apps\"}\n </Badge>\n </div>\n {resource.description ? (\n <div className=\"mt-1 text-sm text-muted-foreground\">\n {resource.description}\n </div>\n ) : null}\n <div className=\"mt-1 font-mono text-[11px] text-muted-foreground/70\">\n {resource.path}\n </div>\n </div>\n <div className=\"flex shrink-0 flex-wrap items-center justify-end gap-1\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={chat}\n aria-label={`Chat with ${resource.name}`}\n >\n <IconMessageCircle size={15} />\n Chat\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => void buildApp()}\n disabled={promote.isPending}\n aria-label={`Build an app for ${resource.name}`}\n >\n <IconLayoutGrid size={15} />\n {promote.isPending ? \"Starting...\" : \"Build app\"}\n </Button>\n <AgentPackDialog\n resource={resource}\n onChanged={onSaved}\n trigger={\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={`Manage files for ${resource.name}`}\n >\n <IconFolder size={16} />\n </Button>\n }\n />\n <AgentEditorDialog\n resource={resource}\n onSaved={onSaved}\n trigger={\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={`Edit ${resource.name}`}\n >\n <IconEdit size={16} />\n </Button>\n }\n />\n <DeleteAgentButton resource={resource} onDeleted={onDeleted} />\n </div>\n </div>\n );\n}\n\ninterface AgentAppCreationInput {\n appId: string;\n description?: string;\n prompt: string;\n resourceIds: string[];\n}\n\ninterface AgentAppCreationResult {\n mode: \"builder\" | \"local-agent\" | \"builder-unavailable\" | \"coming-soon\";\n message: string;\n prompt?: string;\n url?: string;\n}\n\nexport function SimpleAgentsPanel() {\n const query = useActionQuery<WorkspaceAgentResource[]>(\n \"list-workspace-resources\",\n { kind: \"agent\" },\n );\n const agents = query.data ?? [];\n\n if (query.isError) {\n return (\n <ActionQueryError\n error={query.error}\n onRetry={() => void query.refetch()}\n />\n );\n }\n\n return (\n <section className=\"flex flex-col gap-4\">\n <div className=\"flex flex-wrap items-center justify-end gap-2\">\n <ImportAgentDialog onImported={() => void query.refetch()} />\n <AgentEditorDialog onSaved={() => void query.refetch()} />\n </div>\n {query.isLoading && agents.length === 0 ? (\n <div className=\"flex flex-col gap-3\">\n {[0, 1, 2].map((item) => (\n <div key={item} className=\"rounded-xl border bg-card px-4 py-3\">\n <Skeleton className=\"h-4 w-1/3\" />\n <Skeleton className=\"mt-2 h-3 w-2/3\" />\n </div>\n ))}\n </div>\n ) : agents.length > 0 ? (\n <div className=\"flex flex-col gap-2\">\n {agents.map((agent) => (\n <AgentRow\n key={agent.id}\n resource={agent}\n onDeleted={() => void query.refetch()}\n onSaved={() => void query.refetch()}\n />\n ))}\n </div>\n ) : (\n <div className=\"rounded-xl border border-dashed px-6 py-14 text-center\">\n <div className=\"text-sm font-medium text-foreground\">\n No agents yet\n </div>\n <div className=\"mt-4 flex flex-wrap justify-center gap-2\">\n <AgentEditorDialog\n onSaved={() => void query.refetch()}\n trigger={\n <Button>\n <IconPlus size={16} />\n Create an agent\n </Button>\n }\n />\n <ImportAgentDialog onImported={() => void query.refetch()} />\n </div>\n </div>\n )}\n </section>\n );\n}\n"]}
1
+ {"version":3,"file":"simple-agents-panel.js","sourceRoot":"","sources":["../../src/components/simple-agents-panel.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n navigateWithAgentChatViewTransition,\n sendToAgentChat,\n} from \"@agent-native/core/client/agent-chat\";\nimport {\n useActionMutation,\n useActionQuery,\n} from \"@agent-native/core/client/hooks\";\nimport { parseCustomAgentProfile } from \"@agent-native/core/resources/metadata\";\nimport {\n IconAdjustmentsHorizontal,\n IconChevronDown,\n IconDotsVertical,\n IconEdit,\n IconFileImport,\n IconFolder,\n IconLayoutGrid,\n IconMessageCircle,\n IconPlugConnected,\n IconPlus,\n IconTrash,\n IconUpload,\n} from \"@tabler/icons-react\";\nimport {\n useEffect,\n useRef,\n useState,\n type ChangeEvent,\n type ReactNode,\n} from \"react\";\nimport { useNavigate } from \"react-router\";\nimport { toast } from \"sonner\";\n\nimport {\n buildSimpleAgentContent,\n slugifyAgentName,\n} from \"../lib/simple-agent-profile.js\";\nimport { ActionQueryError } from \"./action-query-error\";\nimport { AppIcon } from \"./app-icon\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"./ui/alert-dialog\";\nimport { Badge } from \"./ui/badge\";\nimport { Button } from \"./ui/button\";\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"./ui/collapsible\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"./ui/dialog\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"./ui/dropdown-menu\";\nimport { Input } from \"./ui/input\";\nimport { Label } from \"./ui/label\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./ui/select\";\nimport { Skeleton } from \"./ui/skeleton\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"./ui/tabs\";\nimport { Textarea } from \"./ui/textarea\";\n\ninterface WorkspaceAgentResource {\n id: string;\n name: string;\n description: string | null;\n path: string;\n content: string;\n scope: \"all\" | \"selected\";\n updatedAt: number;\n}\n\ninterface AgentPackFileResource extends WorkspaceAgentResource {\n kind: \"agent-file\" | \"skill\";\n}\n\ninterface AgentPackResponse {\n profile: WorkspaceAgentResource;\n root: string;\n files: AgentPackFileResource[];\n}\n\ninterface AgentPackFileInput {\n path: string;\n content: string;\n}\n\nconst AGENT_ICON_KEYS = [\n \"brain\",\n \"users\",\n \"filetext\",\n \"chartbar\",\n \"route\",\n \"listcheck\",\n \"code\",\n \"messagecircle\",\n] as const;\n\nfunction agentIconKey(resource: Pick<WorkspaceAgentResource, \"id\" | \"name\">) {\n let hash = 0;\n for (const character of `${resource.id}:${resource.name}`) {\n hash = (hash * 31 + character.charCodeAt(0)) | 0;\n }\n return AGENT_ICON_KEYS[Math.abs(hash) % AGENT_ICON_KEYS.length];\n}\n\nexport function isPendingWorkspaceResourceApproval(result: unknown) {\n if (!result || typeof result !== \"object\") return false;\n const mutation = result as { status?: unknown; changeType?: unknown };\n return (\n mutation.status === \"pending\" &&\n typeof mutation.changeType === \"string\" &&\n mutation.changeType.startsWith(\"workspace-resource.\")\n );\n}\n\nexport function handleAgentPackMutationSuccess(\n result: unknown,\n options: {\n appliedMessage: string;\n approvalMessage: string;\n onApplied: () => void;\n notify?: (message: string) => void;\n },\n) {\n const notify = options.notify || ((message) => toast.success(message));\n if (isPendingWorkspaceResourceApproval(result)) {\n notify(options.approvalMessage);\n return;\n }\n notify(options.appliedMessage);\n options.onApplied();\n}\n\ninterface AgentEditorProps {\n resource?: WorkspaceAgentResource;\n trigger?: ReactNode;\n onSaved?: () => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nfunction profileFields(resource?: WorkspaceAgentResource) {\n if (!resource) {\n return {\n name: \"\",\n description: \"\",\n instructions: \"# Role\\n\\nDescribe how this agent should work.\\n\",\n model: \"inherit\",\n tools: \"inherit\",\n scope: \"all\" as const,\n };\n }\n\n const profile = parseCustomAgentProfile(resource.content, resource.path);\n return {\n name: profile?.name || resource.name,\n description: profile?.description || resource.description || \"\",\n instructions: profile?.instructions || resource.content,\n model: profile?.model || \"inherit\",\n tools: profile?.tools || \"inherit\",\n scope: resource.scope,\n };\n}\n\nfunction AgentEditorDialog({\n resource,\n trigger,\n onSaved,\n open: controlledOpen,\n onOpenChange: controlledOnOpenChange,\n}: AgentEditorProps) {\n const isEditing = Boolean(resource);\n const [uncontrolledOpen, setUncontrolledOpen] = useState(false);\n const open = controlledOpen ?? uncontrolledOpen;\n const setOpen = controlledOnOpenChange ?? setUncontrolledOpen;\n const [name, setName] = useState(\"\");\n const [description, setDescription] = useState(\"\");\n const [instructions, setInstructions] = useState(\"\");\n const [model, setModel] = useState(\"inherit\");\n const [tools, setTools] = useState(\"inherit\");\n const [scope, setScope] = useState<\"all\" | \"selected\">(\"all\");\n const [advancedOpen, setAdvancedOpen] = useState(false);\n\n useEffect(() => {\n if (!open) return;\n const fields = profileFields(resource);\n setName(fields.name);\n setDescription(fields.description);\n setInstructions(fields.instructions);\n setModel(fields.model);\n setTools(fields.tools);\n setScope(fields.scope);\n setAdvancedOpen(fields.model !== \"inherit\" || fields.tools !== \"inherit\");\n }, [open, resource]);\n\n const create = useActionMutation(\"create-workspace-resource\", {\n onSuccess: () => {\n toast.success(\"Agent created\");\n setOpen(false);\n onSaved?.();\n },\n onError: (error) => toast.error(error.message),\n });\n const update = useActionMutation(\"update-workspace-resource\", {\n onSuccess: () => {\n toast.success(\"Agent updated\");\n setOpen(false);\n onSaved?.();\n },\n onError: (error) => toast.error(error.message),\n });\n\n const pending = create.isPending || update.isPending;\n const canSave = Boolean(name.trim() && instructions.trim() && !pending);\n\n function save() {\n const content = buildSimpleAgentContent({\n name,\n description,\n model,\n tools,\n instructions,\n });\n if (resource) {\n update.mutate({\n id: resource.id,\n name: name.trim(),\n description: description.trim(),\n content,\n scope,\n });\n return;\n }\n create.mutate({\n kind: \"agent\",\n name: name.trim(),\n description: description.trim() || undefined,\n path: `agents/${slugifyAgentName(name)}.md`,\n content,\n scope,\n });\n }\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n {trigger ? (\n <DialogTrigger asChild>{trigger}</DialogTrigger>\n ) : controlledOpen === undefined ? (\n <DialogTrigger asChild>\n <Button size=\"sm\">\n <IconPlus size={16} />\n Create agent\n </Button>\n </DialogTrigger>\n ) : null}\n <DialogContent className=\"max-w-2xl\">\n <DialogHeader>\n <DialogTitle>\n {isEditing ? \"Manage agent\" : \"Create agent\"}\n </DialogTitle>\n <DialogDescription className=\"sr-only\">\n {isEditing\n ? \"Update this reusable agent profile.\"\n : \"Create a reusable agent profile.\"}\n </DialogDescription>\n </DialogHeader>\n <div className=\"flex flex-col gap-4 py-2\">\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"simple-agent-name\">Name</Label>\n <Input\n id=\"simple-agent-name\"\n value={name}\n onChange={(event) => setName(event.target.value)}\n placeholder=\"User Research\"\n />\n </div>\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"simple-agent-scope\">Availability</Label>\n <Select\n value={scope}\n onValueChange={(value: \"all\" | \"selected\") => setScope(value)}\n >\n <SelectTrigger id=\"simple-agent-scope\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">All apps</SelectItem>\n <SelectItem value=\"selected\">Selected apps</SelectItem>\n </SelectContent>\n </Select>\n </div>\n </div>\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"simple-agent-description\">Description</Label>\n <Input\n id=\"simple-agent-description\"\n value={description}\n onChange={(event) => setDescription(event.target.value)}\n placeholder=\"Synthesizes user research into clear insights\"\n />\n </div>\n <Collapsible open={advancedOpen} onOpenChange={setAdvancedOpen}>\n <CollapsibleTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"group -ml-2 gap-1.5 text-muted-foreground\"\n >\n <IconAdjustmentsHorizontal size={15} />\n Advanced\n <IconChevronDown\n className=\"transition-transform group-data-[state=open]:rotate-180\"\n size={15}\n />\n </Button>\n </CollapsibleTrigger>\n <CollapsibleContent className=\"pt-3\">\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"simple-agent-model\">Model</Label>\n <Input\n id=\"simple-agent-model\"\n value={model}\n onChange={(event) => setModel(event.target.value)}\n placeholder=\"inherit\"\n />\n </div>\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"simple-agent-tools\">Tools</Label>\n <Input\n id=\"simple-agent-tools\"\n value={tools}\n onChange={(event) => setTools(event.target.value)}\n placeholder=\"inherit\"\n />\n </div>\n </div>\n </CollapsibleContent>\n </Collapsible>\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"simple-agent-instructions\">Instructions</Label>\n <Textarea\n id=\"simple-agent-instructions\"\n value={instructions}\n onChange={(event) => setInstructions(event.target.value)}\n rows={12}\n className=\"font-mono text-sm\"\n placeholder=\"# Role\\n\\nDescribe how this agent should work.\"\n />\n </div>\n </div>\n <DialogFooter>\n <Button onClick={save} disabled={!canSave}>\n {pending\n ? \"Saving...\"\n : isEditing\n ? \"Save changes\"\n : \"Create agent\"}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction AgentPackDialog({\n resource,\n onChanged,\n trigger,\n open: controlledOpen,\n onOpenChange: controlledOnOpenChange,\n}: {\n resource: WorkspaceAgentResource;\n onChanged?: () => void;\n trigger?: ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(false);\n const open = controlledOpen ?? uncontrolledOpen;\n const setOpen = controlledOnOpenChange ?? setUncontrolledOpen;\n const [selectedId, setSelectedId] = useState(resource.id);\n const [content, setContent] = useState(resource.content);\n const [addOpen, setAddOpen] = useState(false);\n const [newPath, setNewPath] = useState(\"\");\n const [newKind, setNewKind] = useState<\"agent-file\" | \"skill\">(\"agent-file\");\n const [newContent, setNewContent] = useState(\"\");\n const query = useActionQuery<AgentPackResponse>(\n \"list-agent-pack\",\n { agentId: resource.id },\n { enabled: open },\n );\n const update = useActionMutation(\"update-workspace-resource\", {\n onSuccess: (result) => {\n handleAgentPackMutationSuccess(result, {\n appliedMessage: \"Pack file updated\",\n approvalMessage: \"Pack file update queued for approval\",\n onApplied: () => {\n void query.refetch();\n onChanged?.();\n },\n });\n },\n onError: (error) => toast.error(error.message),\n });\n const create = useActionMutation(\"create-workspace-resource\", {\n onSuccess: (result) => {\n handleAgentPackMutationSuccess(result, {\n appliedMessage: \"Pack file added\",\n approvalMessage: \"Pack file addition queued for approval\",\n onApplied: () => {\n setAddOpen(false);\n setNewPath(\"\");\n setNewContent(\"\");\n void query.refetch();\n onChanged?.();\n },\n });\n },\n onError: (error) => toast.error(error.message),\n });\n const remove = useActionMutation(\"delete-workspace-resource\", {\n onSuccess: () => {\n toast.success(\"Pack file removed\");\n setSelectedId(resource.id);\n void query.refetch();\n onChanged?.();\n },\n onError: (error) => toast.error(error.message),\n });\n\n const files = query.data\n ? [{ ...query.data.profile, kind: \"agent\" as const }, ...query.data.files]\n : [];\n const selected = files.find((file) => file.id === selectedId) ?? files[0];\n\n useEffect(() => {\n if (!open) return;\n setSelectedId(resource.id);\n }, [open, resource.id]);\n\n useEffect(() => {\n if (!selected) return;\n setSelectedId(selected.id);\n setContent(selected.content);\n }, [selected?.id, selected?.content]);\n\n function addFile() {\n const relativePath = newPath.trim().replaceAll(\"\\\\\", \"/\");\n if (\n !relativePath ||\n relativePath.startsWith(\"/\") ||\n relativePath.includes(\"..\") ||\n relativePath.split(\"/\").some((part) => !part || part === \".\")\n ) {\n toast.error(\"Use a relative pack path without ..\");\n return;\n }\n const packPath =\n newKind === \"skill\" && !relativePath.startsWith(\"skills/\")\n ? `skills/${relativePath}`\n : relativePath;\n const name = packPath.split(\"/\").pop() || packPath;\n create.mutate({\n kind: newKind,\n name,\n path: `${query.data?.root || `agents/${slugifyAgentName(resource.name)}`}/${packPath}`,\n content: newContent,\n scope: resource.scope,\n });\n }\n\n return (\n <Dialog\n open={open}\n onOpenChange={(nextOpen) => {\n setOpen(nextOpen);\n if (!nextOpen) setAddOpen(false);\n }}\n >\n {trigger ? (\n <DialogTrigger asChild>{trigger}</DialogTrigger>\n ) : controlledOpen === undefined ? (\n <DialogTrigger asChild>\n <Button variant=\"ghost\" size=\"sm\">\n <IconFolder size={15} />\n Pack\n </Button>\n </DialogTrigger>\n ) : null}\n <DialogContent className=\"max-w-4xl\">\n <DialogHeader>\n <DialogTitle>Agent pack</DialogTitle>\n <DialogDescription className=\"sr-only\">\n Edit the profile, reference files, context, and skills that belong\n to this agent.\n </DialogDescription>\n </DialogHeader>\n <div className=\"grid min-h-0 gap-4 md:grid-cols-[220px_minmax(0,1fr)]\">\n <div className=\"flex min-w-0 flex-col gap-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-xs font-medium text-muted-foreground\">\n Files\n </span>\n <Dialog open={addOpen} onOpenChange={setAddOpen}>\n <DialogTrigger asChild>\n <Button variant=\"outline\" size=\"sm\">\n <IconPlus size={14} />\n Add\n </Button>\n </DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Add pack file</DialogTitle>\n <DialogDescription className=\"sr-only\">\n Add a text reference or agent-owned skill to this pack.\n </DialogDescription>\n </DialogHeader>\n <div className=\"flex flex-col gap-4 py-2\">\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"agent-pack-file-path\">Path</Label>\n <Input\n id=\"agent-pack-file-path\"\n value={newPath}\n onChange={(event) => setNewPath(event.target.value)}\n placeholder=\"context/brief.md\"\n />\n </div>\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"agent-pack-file-kind\">Type</Label>\n <Select\n value={newKind}\n onValueChange={(value: \"agent-file\" | \"skill\") =>\n setNewKind(value)\n }\n >\n <SelectTrigger id=\"agent-pack-file-kind\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"agent-file\">\n Reference file\n </SelectItem>\n <SelectItem value=\"skill\">Skill</SelectItem>\n </SelectContent>\n </Select>\n </div>\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"agent-pack-file-content\">Content</Label>\n <Textarea\n id=\"agent-pack-file-content\"\n value={newContent}\n onChange={(event) => setNewContent(event.target.value)}\n rows={8}\n className=\"font-mono text-sm\"\n />\n </div>\n </div>\n <DialogFooter>\n <Button\n onClick={addFile}\n disabled={!newPath.trim() || create.isPending}\n >\n {create.isPending ? \"Adding...\" : \"Add file\"}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </div>\n {query.isLoading ? (\n <Skeleton className=\"h-24 w-full\" />\n ) : (\n <div className=\"flex flex-col gap-1\">\n {files.map((file) => (\n <Button\n key={file.id}\n type=\"button\"\n variant={selected?.id === file.id ? \"secondary\" : \"ghost\"}\n className=\"h-auto w-full justify-start px-2 py-2 text-left\"\n onClick={() => setSelectedId(file.id)}\n >\n <span className=\"min-w-0 truncate text-xs\">\n {file.path.replace(`${query.data?.root || \"\"}/`, \"\")}\n </span>\n </Button>\n ))}\n </div>\n )}\n </div>\n <div className=\"flex min-w-0 flex-col gap-3\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-medium\">\n {selected?.path || \"Select a file\"}\n </div>\n {selected && selected.kind !== \"agent\" ? (\n <Badge variant=\"outline\">\n {selected.kind === \"skill\" ? \"Skill\" : \"Reference\"}\n </Badge>\n ) : null}\n </div>\n <div className=\"flex items-center gap-1\">\n {selected && selected.kind !== \"agent\" ? (\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <Button variant=\"ghost\" size=\"sm\">\n <IconTrash size={15} />\n Remove\n </Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>\n Remove this pack file?\n </AlertDialogTitle>\n <AlertDialogDescription>\n The file will no longer be available to this agent.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction\n onClick={() => remove.mutate({ id: selected.id })}\n disabled={remove.isPending}\n >\n Remove\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n ) : null}\n <Button\n size=\"sm\"\n onClick={() =>\n selected && update.mutate({ id: selected.id, content })\n }\n disabled={\n !selected ||\n update.isPending ||\n content === selected.content\n }\n >\n {update.isPending ? \"Saving...\" : \"Save file\"}\n </Button>\n </div>\n </div>\n <Textarea\n value={content}\n onChange={(event) => setContent(event.target.value)}\n disabled={!selected}\n rows={18}\n className=\"min-h-[360px] font-mono text-sm\"\n />\n </div>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction ImportAgentDialog({ onImported }: { onImported?: () => void }) {\n const [open, setOpen] = useState(false);\n const [mode, setMode] = useState<\"file\" | \"folder\" | \"endpoint\">(\"file\");\n const [source, setSource] = useState(\"\");\n const [fileName, setFileName] = useState(\"\");\n const [scope, setScope] = useState<\"all\" | \"selected\">(\"all\");\n const [url, setUrl] = useState(\"\");\n const [endpointName, setEndpointName] = useState(\"\");\n const [endpointDescription, setEndpointDescription] = useState(\"\");\n const [packFiles, setPackFiles] = useState<AgentPackFileInput[]>([]);\n const [packName, setPackName] = useState(\"\");\n const [packWarnings, setPackWarnings] = useState<string[]>([]);\n const fileRef = useRef<HTMLInputElement>(null);\n const folderRef = useRef<HTMLInputElement>(null);\n\n const importAgent = useActionMutation(\"import-agent\", {\n onSuccess: (result: { status: string; warnings?: string[] }) => {\n toast.success(\n result.status === \"unchanged\"\n ? \"Agent already imported\"\n : \"Agent imported\",\n );\n if (result.warnings?.length) {\n toast.info(result.warnings.join(\" \"));\n }\n setOpen(false);\n onImported?.();\n },\n onError: (error) => toast.error(error.message),\n });\n const connect = useActionMutation(\"connect-external-agent\", {\n onSuccess: () => {\n toast.success(\"Agent connected\");\n setOpen(false);\n onImported?.();\n },\n onError: (error) => toast.error(error.message),\n });\n const importPack = useActionMutation(\"import-agent-pack\", {\n onSuccess: (result: { status: string; warnings?: string[] }) => {\n toast.success(\n result.status === \"pending-approval\"\n ? \"Pack sent for approval\"\n : result.status === \"unchanged\"\n ? \"Agent pack already imported\"\n : \"Agent pack imported\",\n );\n if (result.warnings?.length) toast.info(result.warnings.join(\" \"));\n setOpen(false);\n onImported?.();\n },\n onError: (error) => toast.error(error.message),\n });\n\n useEffect(() => {\n if (!folderRef.current) return;\n folderRef.current.setAttribute(\"webkitdirectory\", \"\");\n folderRef.current.setAttribute(\"directory\", \"\");\n }, [mode, open]);\n\n function reset() {\n setMode(\"file\");\n setSource(\"\");\n setFileName(\"\");\n setScope(\"all\");\n setUrl(\"\");\n setEndpointName(\"\");\n setEndpointDescription(\"\");\n setPackFiles([]);\n setPackName(\"\");\n setPackWarnings([]);\n }\n\n async function handleFile(event: ChangeEvent<HTMLInputElement>) {\n const file = event.target.files?.[0];\n if (!file) return;\n setFileName(file.name);\n setSource(await file.text());\n }\n\n async function handleFolder(event: ChangeEvent<HTMLInputElement>) {\n const selectedFiles = Array.from(event.target.files ?? []);\n if (selectedFiles.length === 0) return;\n const warnings: string[] = [];\n const textExtensions =\n /\\.(md|markdown|txt|json|yaml|yml|csv|html|xml|toml|ts|tsx|js|mjs|py|sh)$/i;\n const pack = await Promise.all(\n selectedFiles.map(async (file) => {\n const path =\n (file as File & { webkitRelativePath?: string }).webkitRelativePath ||\n file.name;\n if (!textExtensions.test(path)) {\n warnings.push(`Skipped non-text file: ${path}`);\n return null;\n }\n return { path, content: await file.text() };\n }),\n );\n const files = pack.filter((file): file is AgentPackFileInput =>\n Boolean(file),\n );\n setPackFiles(files);\n setPackName(files[0]?.path.split(\"/\")[0] || \"Selected folder\");\n setPackWarnings(warnings);\n }\n\n return (\n <Dialog\n open={open}\n onOpenChange={(nextOpen) => {\n setOpen(nextOpen);\n if (!nextOpen) reset();\n }}\n >\n <DialogTrigger asChild>\n <Button variant=\"outline\" size=\"sm\">\n <IconFileImport size={16} />\n Import or connect\n </Button>\n </DialogTrigger>\n <DialogContent className=\"max-w-2xl\">\n <DialogHeader>\n <DialogTitle>Import an agent</DialogTitle>\n <DialogDescription className=\"sr-only\">\n Import a Claude or JSON agent definition, or connect an external\n agent endpoint.\n </DialogDescription>\n </DialogHeader>\n <Tabs\n value={mode}\n onValueChange={(value) =>\n setMode(value as \"file\" | \"folder\" | \"endpoint\")\n }\n >\n <TabsList className=\"w-full justify-start\">\n <TabsTrigger value=\"file\">Agent file</TabsTrigger>\n <TabsTrigger value=\"folder\">Agent folder</TabsTrigger>\n <TabsTrigger value=\"endpoint\">Connect endpoint</TabsTrigger>\n </TabsList>\n <TabsContent value=\"file\" className=\"flex flex-col gap-4 py-4\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => fileRef.current?.click()}\n >\n <IconUpload size={16} />\n Choose file\n </Button>\n <input\n ref={fileRef}\n type=\"file\"\n accept=\".md,.markdown,.json,.txt\"\n className=\"hidden\"\n onChange={(event) => void handleFile(event)}\n />\n <span className=\"text-xs text-muted-foreground\">\n {fileName || \"Claude .md or JSON agent definition\"}\n </span>\n </div>\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"import-agent-source\">Definition</Label>\n <Textarea\n id=\"import-agent-source\"\n value={source}\n onChange={(event) => setSource(event.target.value)}\n rows={12}\n className=\"font-mono text-sm\"\n placeholder=\"Paste a Claude-style agent file or a JSON definition\"\n />\n </div>\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"import-agent-scope\">Availability</Label>\n <Select\n value={scope}\n onValueChange={(value: \"all\" | \"selected\") => setScope(value)}\n >\n <SelectTrigger id=\"import-agent-scope\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">All apps</SelectItem>\n <SelectItem value=\"selected\">Selected apps</SelectItem>\n </SelectContent>\n </Select>\n </div>\n <DialogFooter>\n <Button\n onClick={() =>\n importAgent.mutate({\n source,\n fileName: fileName || undefined,\n scope,\n })\n }\n disabled={!source.trim() || importAgent.isPending}\n >\n {importAgent.isPending ? \"Importing...\" : \"Import agent\"}\n </Button>\n </DialogFooter>\n </TabsContent>\n <TabsContent value=\"folder\" className=\"flex flex-col gap-4 py-4\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => folderRef.current?.click()}\n >\n <IconFolder size={16} />\n Choose folder\n </Button>\n <input\n ref={folderRef}\n type=\"file\"\n multiple\n className=\"hidden\"\n onChange={(event) => void handleFolder(event)}\n />\n <span className=\"text-xs text-muted-foreground\">\n {packName\n ? `${packName} · ${packFiles.length} files`\n : \"Claude Project or Cowork-style folder\"}\n </span>\n </div>\n {packWarnings.length > 0 ? (\n <div className=\"rounded-lg border border-amber-500/30 bg-amber-500/5 px-3 py-2 text-xs text-amber-800 dark:text-amber-200\">\n {packWarnings.join(\" \")}\n </div>\n ) : null}\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"import-agent-pack-scope\">Availability</Label>\n <Select\n value={scope}\n onValueChange={(value: \"all\" | \"selected\") => setScope(value)}\n >\n <SelectTrigger id=\"import-agent-pack-scope\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">All apps</SelectItem>\n <SelectItem value=\"selected\">Selected apps</SelectItem>\n </SelectContent>\n </Select>\n </div>\n <DialogFooter>\n <Button\n onClick={() => importPack.mutate({ files: packFiles, scope })}\n disabled={packFiles.length === 0 || importPack.isPending}\n >\n {importPack.isPending ? \"Importing...\" : \"Import agent pack\"}\n </Button>\n </DialogFooter>\n </TabsContent>\n <TabsContent value=\"endpoint\" className=\"flex flex-col gap-4 py-4\">\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"external-agent-url\">Endpoint URL</Label>\n <Input\n id=\"external-agent-url\"\n value={url}\n onChange={(event) => setUrl(event.target.value)}\n placeholder=\"https://agent.example.com\"\n />\n </div>\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"external-agent-name\">Name</Label>\n <Input\n id=\"external-agent-name\"\n value={endpointName}\n onChange={(event) => setEndpointName(event.target.value)}\n placeholder=\"Research partner\"\n />\n </div>\n <div className=\"flex flex-col gap-2\">\n <Label>Availability</Label>\n <div className=\"flex h-10 items-center\">\n <Badge variant=\"secondary\">Workspace</Badge>\n </div>\n </div>\n </div>\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"external-agent-description\">Description</Label>\n <Input\n id=\"external-agent-description\"\n value={endpointDescription}\n onChange={(event) => setEndpointDescription(event.target.value)}\n placeholder=\"Optional\"\n />\n </div>\n <p className=\"text-xs text-muted-foreground\">\n Dispatch stores the public endpoint only. Authenticate it after\n connecting.\n </p>\n <DialogFooter>\n <Button\n onClick={() =>\n connect.mutate({\n url,\n name: endpointName || undefined,\n description: endpointDescription || undefined,\n scope: \"shared\",\n })\n }\n disabled={!url.trim() || connect.isPending}\n >\n <IconPlugConnected size={16} />\n {connect.isPending ? \"Connecting...\" : \"Connect agent\"}\n </Button>\n </DialogFooter>\n </TabsContent>\n </Tabs>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction DeleteAgentButton({\n resource,\n onDeleted,\n open: controlledOpen,\n onOpenChange: controlledOnOpenChange,\n}: {\n resource: WorkspaceAgentResource;\n onDeleted?: () => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(false);\n const open = controlledOpen ?? uncontrolledOpen;\n const setOpen = controlledOnOpenChange ?? setUncontrolledOpen;\n const remove = useActionMutation(\"delete-workspace-resource\", {\n onSuccess: () => {\n toast.success(\"Agent removed\");\n onDeleted?.();\n },\n onError: (error) => toast.error(error.message),\n });\n\n return (\n <AlertDialog open={open} onOpenChange={setOpen}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Remove {resource.name}?</AlertDialogTitle>\n <AlertDialogDescription>\n This removes the reusable profile from the workspace apps.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction\n onClick={() => remove.mutate({ id: resource.id })}\n disabled={remove.isPending}\n >\n Remove\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n );\n}\n\nfunction AgentRow({\n resource,\n onDeleted,\n onSaved,\n}: {\n resource: WorkspaceAgentResource;\n onDeleted?: () => void;\n onSaved?: () => void;\n}) {\n const navigate = useNavigate();\n const [packOpen, setPackOpen] = useState(false);\n const [editorOpen, setEditorOpen] = useState(false);\n const [deleteOpen, setDeleteOpen] = useState(false);\n const packQuery = useActionQuery<AgentPackResponse>(\n \"list-agent-pack\",\n { agentId: resource.id },\n { enabled: false },\n );\n const promote = useActionMutation<\n AgentAppCreationResult,\n AgentAppCreationInput\n >(\"start-workspace-app-creation\", {\n onSuccess: (result) => {\n if (result.mode === \"local-agent\") {\n sendToAgentChat({\n message: result.prompt ?? result.message,\n submit: true,\n type: \"code\",\n newTab: true,\n reuseEmptyTab: true,\n });\n toast.success(\"Sent to the local agent\");\n return;\n }\n if (result.mode === \"builder\") {\n toast.success(\"App build started\", {\n description: result.message,\n action: result.url\n ? {\n label: \"Open in Builder\",\n onClick: () =>\n window.open(result.url, \"_blank\", \"noopener,noreferrer\"),\n }\n : undefined,\n });\n return;\n }\n toast.error(result.message);\n },\n onError: (error) => toast.error(error.message),\n });\n\n function chat() {\n navigateWithAgentChatViewTransition(\n navigate,\n `/chat?agent=${encodeURIComponent(resource.path)}`,\n );\n }\n\n async function buildApp() {\n const pack = await packQuery.refetch();\n if (pack.error || !pack.data) {\n toast.error(pack.error?.message || \"Could not load the agent pack\");\n return;\n }\n promote.mutate({\n appId: slugifyAgentName(resource.name),\n description: resource.description || undefined,\n prompt: `Turn the \"${resource.name}\" workspace agent into a focused workspace app. Preserve its role and instructions, make the app its usable face, and keep the original reusable agent profile available.`,\n resourceIds: [resource.id, ...pack.data.files.map((file) => file.id)],\n });\n }\n\n return (\n <div className=\"flex min-w-0 items-start gap-3 rounded-2xl border bg-card px-4 py-4\">\n <AppIcon\n id={resource.id}\n name={resource.name}\n icon={agentIconKey(resource)}\n size=\"sm\"\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"text-sm font-medium text-foreground\">\n {resource.name}\n </span>\n <Badge variant=\"outline\">\n {resource.scope === \"all\" ? \"All apps\" : \"Selected apps\"}\n </Badge>\n </div>\n {resource.description ? (\n <div className=\"mt-1 text-sm text-muted-foreground\">\n {resource.description}\n </div>\n ) : null}\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={chat}\n aria-label={`Chat with ${resource.name}`}\n >\n <IconMessageCircle size={15} />\n Chat\n </Button>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={`More actions for ${resource.name}`}\n title=\"More actions\"\n >\n <IconDotsVertical size={16} />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-48\">\n <DropdownMenuItem\n onSelect={() => {\n void buildApp();\n }}\n disabled={promote.isPending}\n >\n <IconLayoutGrid className=\"me-2 size-4\" />\n {promote.isPending ? \"Starting...\" : \"Build app\"}\n </DropdownMenuItem>\n <DropdownMenuItem onSelect={() => setPackOpen(true)}>\n <IconFolder className=\"me-2 size-4\" />\n Manage files\n </DropdownMenuItem>\n <DropdownMenuItem onSelect={() => setEditorOpen(true)}>\n <IconEdit className=\"me-2 size-4\" />\n Edit\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n className=\"text-destructive focus:text-destructive\"\n onSelect={() => setDeleteOpen(true)}\n >\n <IconTrash className=\"me-2 size-4\" />\n Remove\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n <AgentPackDialog\n resource={resource}\n onChanged={onSaved}\n open={packOpen}\n onOpenChange={setPackOpen}\n />\n <AgentEditorDialog\n resource={resource}\n onSaved={onSaved}\n open={editorOpen}\n onOpenChange={setEditorOpen}\n />\n <DeleteAgentButton\n resource={resource}\n onDeleted={onDeleted}\n open={deleteOpen}\n onOpenChange={setDeleteOpen}\n />\n </div>\n </div>\n );\n}\n\ninterface AgentAppCreationInput {\n appId: string;\n description?: string;\n prompt: string;\n resourceIds: string[];\n}\n\ninterface AgentAppCreationResult {\n mode: \"builder\" | \"local-agent\" | \"builder-unavailable\" | \"coming-soon\";\n message: string;\n prompt?: string;\n url?: string;\n}\n\nexport function SimpleAgentsPanel({\n title,\n}: {\n title?: ReactNode;\n} = {}) {\n const query = useActionQuery<WorkspaceAgentResource[]>(\n \"list-workspace-resources\",\n { kind: \"agent\" },\n );\n const agents = query.data ?? [];\n const refreshAgents = () => void query.refetch();\n const importAction = <ImportAgentDialog onImported={refreshAgents} />;\n\n if (query.isError) {\n return (\n <ActionQueryError\n error={query.error}\n onRetry={() => void query.refetch()}\n />\n );\n }\n\n return (\n <section className=\"flex flex-col gap-4\">\n {title || agents.length > 0 ? (\n <div\n className={`flex flex-wrap items-center gap-3 ${title ? \"justify-between\" : \"justify-end\"}`}\n >\n {title ? (\n <h2 className=\"text-base font-medium text-foreground\">{title}</h2>\n ) : null}\n {agents.length > 0 ? (\n <div className=\"flex flex-wrap items-center justify-end gap-2\">\n {importAction}\n <AgentEditorDialog onSaved={refreshAgents} />\n </div>\n ) : null}\n </div>\n ) : null}\n {query.isLoading && agents.length === 0 ? (\n <div className=\"grid gap-3 md:grid-cols-2\">\n {[0, 1, 2].map((item) => (\n <div key={item} className=\"rounded-2xl border bg-card px-4 py-4\">\n <Skeleton className=\"h-4 w-1/3\" />\n <Skeleton className=\"mt-2 h-3 w-2/3\" />\n </div>\n ))}\n </div>\n ) : agents.length > 0 ? (\n <div className=\"grid gap-3 md:grid-cols-2\">\n {agents.map((agent) => (\n <AgentRow\n key={agent.id}\n resource={agent}\n onDeleted={() => void query.refetch()}\n onSaved={() => void query.refetch()}\n />\n ))}\n </div>\n ) : (\n <div className=\"rounded-2xl border border-dashed bg-card px-4 py-12 text-center\">\n <div className=\"text-sm font-medium text-foreground\">\n No agents yet\n </div>\n <div className=\"mt-4 flex flex-wrap justify-center gap-2\">\n <AgentEditorDialog\n onSaved={refreshAgents}\n trigger={\n <Button size=\"sm\">\n <IconPlus size={16} />\n Create an agent\n </Button>\n }\n />\n {importAction}\n </div>\n </div>\n )}\n </section>\n );\n}\n"]}
@@ -16,9 +16,11 @@ interface WorkspaceAppFrameProps {
16
16
  app: WorkspaceAppFrameApp;
17
17
  /** Chat-first app tabs use their own route while standalone hosts use app metadata. */
18
18
  embedPath?: string;
19
+ /** Chat-first app surfaces own the parent chat rail around the iframe. */
20
+ chatSidebar?: boolean;
19
21
  copy?: ChatFirstCopy;
20
22
  }
21
- export declare function WorkspaceAppFrame({ app, embedPath, copy, }: WorkspaceAppFrameProps): import("node_modules/@types/react").JSX.Element;
23
+ export declare function WorkspaceAppFrame({ app, embedPath, chatSidebar, copy, }: WorkspaceAppFrameProps): import("node_modules/@types/react").JSX.Element;
22
24
  export declare function WorkspaceAppHost({ appId }: {
23
25
  appId?: string;
24
26
  }): import("node_modules/@types/react").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-app-host.d.ts","sourceRoot":"","sources":["../../src/components/workspace-app-host.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,sCAAsC,CAAC;AA6B9C,UAAU,iBAAiB;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,CAAC;CACnB;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,iBAAiB,CAEnB;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,UAAU,sBAAsB;IAC9B,GAAG,EAAE,oBAAoB,CAAC;IAC1B,uFAAuF;IACvF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,GAAG,EACH,SAAS,EACT,IAA2B,GAC5B,EAAE,sBAAsB,mDA2HxB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,mDAwH7D;AAID,wBAAgB,qBAAqB,CAAC,EACpC,WAAW,GACZ,EAAE;IACD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,mDAwCA"}
1
+ {"version":3,"file":"workspace-app-host.d.ts","sourceRoot":"","sources":["../../src/components/workspace-app-host.tsx"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,sCAAsC,CAAC;AAmC9C,UAAU,iBAAiB;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,CAAC;CACnB;AAoCD,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,iBAAiB,CAEnB;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,UAAU,sBAAsB;IAC9B,GAAG,EAAE,oBAAoB,CAAC;IAC1B,uFAAuF;IACvF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,GAAG,EACH,SAAS,EACT,WAAmB,EACnB,IAA2B,GAC5B,EAAE,sBAAsB,mDAuNxB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,mDAwH7D;AAID,wBAAgB,qBAAqB,CAAC,EACpC,WAAW,GACZ,EAAE;IACD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,mDAwCA"}
@@ -1,11 +1,13 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { AgentSidebar } from "@agent-native/core/client/agent-chat";
2
3
  import { ChatFirstAppPane, defaultChatFirstCopy, } from "@agent-native/core/client/chat-first";
3
4
  import { useFeatureFlag } from "@agent-native/core/client/feature-flags";
4
5
  import { useActionMutation, useActionQuery, } from "@agent-native/core/client/hooks";
5
6
  import { useT } from "@agent-native/core/client/i18n";
6
7
  import { withBuilderUtmTrackingParams } from "@agent-native/core/shared/builder-link-tracking";
7
- import { IconArrowLeft, IconClockHour4 } from "@tabler/icons-react";
8
- import { useEffect, useMemo, useRef, useState } from "react";
8
+ import { IconArrowLeft, IconArrowUpRight, IconClockHour4, IconLock, } from "@tabler/icons-react";
9
+ import { useTheme } from "next-themes";
10
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
9
11
  import { Link } from "react-router";
10
12
  import { isEmbedSessionExpiredMessage } from "../lib/embed-session-recovery.js";
11
13
  import { workspaceAppDirectHref, workspaceAppEmbedTarget, workspaceAppHref, } from "../lib/workspace-apps.js";
@@ -14,14 +16,67 @@ import { ActionQueryError } from "./action-query-error.js";
14
16
  import { Badge } from "./ui/badge.js";
15
17
  import { Button } from "./ui/button.js";
16
18
  import { Skeleton } from "./ui/skeleton.js";
19
+ function resolveWorkspaceAppAuthState(rawUrl) {
20
+ if (!rawUrl)
21
+ return "unknown";
22
+ try {
23
+ const lastSegment = new URL(rawUrl, window.location.origin).pathname
24
+ .split("/")
25
+ .filter(Boolean)
26
+ .at(-1)
27
+ ?.toLowerCase();
28
+ if (lastSegment === "sign-in" ||
29
+ lastSegment === "login" ||
30
+ lastSegment === "signup") {
31
+ return "unauthenticated";
32
+ }
33
+ return "authenticated";
34
+ }
35
+ catch {
36
+ return "unknown";
37
+ }
38
+ }
39
+ function buildWorkspaceAppThemeUpdate(theme) {
40
+ return {
41
+ type: "agent-native-theme-update",
42
+ theme,
43
+ isDark: theme === "dark",
44
+ };
45
+ }
17
46
  export function buildChatFirstEmbedSessionInput(appId, path) {
18
47
  return { app: appId, path, chrome: "minimal" };
19
48
  }
20
- export function WorkspaceAppFrame({ app, embedPath, copy = defaultChatFirstCopy, }) {
49
+ export function WorkspaceAppFrame({ app, embedPath, chatSidebar = false, copy = defaultChatFirstCopy, }) {
50
+ const { resolvedTheme } = useTheme();
51
+ const theme = resolvedTheme === "dark" || resolvedTheme === "light"
52
+ ? resolvedTheme
53
+ : typeof document !== "undefined" &&
54
+ document.documentElement.classList.contains("dark")
55
+ ? "dark"
56
+ : "light";
21
57
  const [embedUrl, setEmbedUrl] = useState(null);
22
58
  const [embedError, setEmbedError] = useState(null);
23
59
  const [embedAttempt, setEmbedAttempt] = useState(0);
60
+ const [authState, setAuthState] = useState("unknown");
24
61
  const embedFrameRef = useRef(null);
62
+ const postThemeToFrame = useCallback(() => {
63
+ embedFrameRef.current?.contentWindow?.postMessage(buildWorkspaceAppThemeUpdate(theme), "*");
64
+ }, [theme]);
65
+ const handleFrameLoad = useCallback(() => {
66
+ postThemeToFrame();
67
+ const frame = embedFrameRef.current;
68
+ let frameUrl = embedUrl;
69
+ try {
70
+ frameUrl = frame?.contentWindow?.location.href ?? frameUrl;
71
+ // coercion-ok: Cross-origin frames cannot expose location; their auth state arrives by message.
72
+ }
73
+ catch {
74
+ // Cross-origin app frames report their auth state through postMessage.
75
+ }
76
+ const nextAuthState = resolveWorkspaceAppAuthState(frameUrl);
77
+ if (nextAuthState !== "unknown")
78
+ setAuthState(nextAuthState);
79
+ }, [embedUrl, postThemeToFrame]);
25
80
  const workspaceSsoEnabled = useFeatureFlag(DISPATCH_WORKSPACE_SSO_FLAG.key);
26
81
  const createEmbedSession = useActionMutation("create_embed_session", {
27
82
  skipActionQueryInvalidation: true,
@@ -53,6 +108,7 @@ export function WorkspaceAppFrame({ app, embedPath, copy = defaultChatFirstCopy,
53
108
  let cancelled = false;
54
109
  setEmbedUrl(null);
55
110
  setEmbedError(null);
111
+ setAuthState("unknown");
56
112
  const createSession = workspaceSsoEnabled
57
113
  ? createWorkspaceSsoEmbedSession
58
114
  : createEmbedSession;
@@ -92,13 +148,39 @@ export function WorkspaceAppFrame({ app, embedPath, copy = defaultChatFirstCopy,
92
148
  window.addEventListener("message", handleEmbedSessionExpired);
93
149
  return () => window.removeEventListener("message", handleEmbedSessionExpired);
94
150
  }, [embedUrl]);
95
- return (_jsx(ChatFirstAppPane, { app: app, status: embedUrl
151
+ useEffect(() => {
152
+ const handleAuthState = (event) => {
153
+ const frame = embedFrameRef.current;
154
+ if (!frame || event.source !== frame.contentWindow)
155
+ return;
156
+ if (event.data?.type !== "agentNative.authState")
157
+ return;
158
+ const status = event.data.data?.status;
159
+ if (status === "authenticated" || status === "unauthenticated") {
160
+ setAuthState(status);
161
+ }
162
+ };
163
+ window.addEventListener("message", handleAuthState);
164
+ return () => window.removeEventListener("message", handleAuthState);
165
+ }, []);
166
+ useEffect(() => {
167
+ postThemeToFrame();
168
+ }, [embedUrl, postThemeToFrame]);
169
+ const appPane = (_jsx(ChatFirstAppPane, { app: app, status: embedUrl
96
170
  ? "ready"
97
171
  : embedError
98
172
  ? "error"
99
173
  : embedInput
100
174
  ? "loading"
101
- : "unresolved", embedUrl: embedUrl, errorMessage: embedError?.message, onRetry: embedInput ? () => setEmbedAttempt((attempt) => attempt + 1) : undefined, renderEmbed: ({ url, title }) => (_jsx("iframe", { "data-dispatch-workspace-app-frame": true, src: url, title: title ?? app.name, ref: embedFrameRef, referrerPolicy: "no-referrer", allow: "clipboard-read; clipboard-write", className: "h-full w-full border-0 bg-background" }, url + ":" + embedAttempt)), copy: copy }));
175
+ : "unresolved", embedUrl: embedUrl, errorMessage: embedError?.message, onRetry: embedInput ? () => setEmbedAttempt((attempt) => attempt + 1) : undefined, renderEmbed: ({ url, title }) => (_jsx("iframe", { "data-dispatch-workspace-app-frame": true, src: url, title: title ?? app.name, ref: embedFrameRef, onLoad: handleFrameLoad, referrerPolicy: "no-referrer", allow: "clipboard-read; clipboard-write", className: "h-full w-full border-0 bg-background" }, url + ":" + embedAttempt)), copy: copy }));
176
+ if (!chatSidebar)
177
+ return appPane;
178
+ return (_jsx(AgentSidebar, { position: "left", defaultOpen: true, openStorageKey: "dispatch-app-chat", storageKey: `dispatch-app-chat:${app.id}`, scope: {
179
+ type: "workspace-app",
180
+ id: app.id,
181
+ label: app.name,
182
+ contextKey: `workspace-app:${app.id}`,
183
+ }, agentChatSurface: "app", showTabBar: true, suppressInlineOpenApp: true, dynamicSuggestions: false, suggestions: [], emptyStateText: `Ask about ${app.name}`, composerSlot: authState === "unauthenticated" ? (_jsx("div", { className: "flex shrink-0 items-center px-3 pb-1", children: _jsxs("button", { type: "button", "data-dispatch-app-sign-in": true, "aria-label": `Sign in to ${app.name} on the right`, title: `Sign in to ${app.name} on the right`, onClick: () => embedFrameRef.current?.focus(), className: "inline-flex h-6 shrink-0 items-center gap-1 rounded-full border border-border/70 bg-background/60 px-2 text-[11px] font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-foreground", children: [_jsx(IconLock, { size: 12, stroke: 1.8 }), _jsx("span", { children: "Sign in on the right" }), _jsx(IconArrowUpRight, { size: 12, stroke: 1.8 })] }) })) : null, children: appPane }));
102
184
  }
103
185
  export function WorkspaceAppHost({ appId }) {
104
186
  const t = useT();