@agent-native/core 0.7.49 → 0.7.51

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 (70) hide show
  1. package/dist/a2a/agent-card.d.ts.map +1 -1
  2. package/dist/a2a/agent-card.js +21 -16
  3. package/dist/a2a/agent-card.js.map +1 -1
  4. package/dist/a2a/auth-policy.d.ts +10 -0
  5. package/dist/a2a/auth-policy.d.ts.map +1 -0
  6. package/dist/a2a/auth-policy.js +34 -0
  7. package/dist/a2a/auth-policy.js.map +1 -0
  8. package/dist/a2a/client.d.ts +6 -2
  9. package/dist/a2a/client.d.ts.map +1 -1
  10. package/dist/a2a/client.js +9 -4
  11. package/dist/a2a/client.js.map +1 -1
  12. package/dist/a2a/handlers.d.ts.map +1 -1
  13. package/dist/a2a/handlers.js +5 -4
  14. package/dist/a2a/handlers.js.map +1 -1
  15. package/dist/a2a/index.d.ts +1 -0
  16. package/dist/a2a/index.d.ts.map +1 -1
  17. package/dist/a2a/index.js +1 -0
  18. package/dist/a2a/index.js.map +1 -1
  19. package/dist/a2a/response-text.d.ts +4 -1
  20. package/dist/a2a/response-text.d.ts.map +1 -1
  21. package/dist/a2a/response-text.js +3 -2
  22. package/dist/a2a/response-text.js.map +1 -1
  23. package/dist/a2a/server.d.ts.map +1 -1
  24. package/dist/a2a/server.js +44 -29
  25. package/dist/a2a/server.js.map +1 -1
  26. package/dist/client/resources/ResourceEditor.d.ts.map +1 -1
  27. package/dist/client/resources/ResourceEditor.js +2 -4
  28. package/dist/client/resources/ResourceEditor.js.map +1 -1
  29. package/dist/client/settings/AgentsSection.d.ts.map +1 -1
  30. package/dist/client/settings/AgentsSection.js +4 -6
  31. package/dist/client/settings/AgentsSection.js.map +1 -1
  32. package/dist/deploy/build.d.ts.map +1 -1
  33. package/dist/deploy/build.js +8 -0
  34. package/dist/deploy/build.js.map +1 -1
  35. package/dist/deploy/route-discovery.d.ts.map +1 -1
  36. package/dist/deploy/route-discovery.js +11 -2
  37. package/dist/deploy/route-discovery.js.map +1 -1
  38. package/dist/integrations/a2a-continuation-processor.d.ts.map +1 -1
  39. package/dist/integrations/a2a-continuation-processor.js +39 -13
  40. package/dist/integrations/a2a-continuation-processor.js.map +1 -1
  41. package/dist/integrations/a2a-continuations-store.d.ts +2 -1
  42. package/dist/integrations/a2a-continuations-store.d.ts.map +1 -1
  43. package/dist/integrations/a2a-continuations-store.js +33 -4
  44. package/dist/integrations/a2a-continuations-store.js.map +1 -1
  45. package/dist/integrations/webhook-handler.js +4 -3
  46. package/dist/integrations/webhook-handler.js.map +1 -1
  47. package/dist/resources/handlers.d.ts.map +1 -1
  48. package/dist/resources/handlers.js +2 -3
  49. package/dist/resources/handlers.js.map +1 -1
  50. package/dist/resources/metadata.d.ts +5 -0
  51. package/dist/resources/metadata.d.ts.map +1 -1
  52. package/dist/resources/metadata.js +17 -2
  53. package/dist/resources/metadata.js.map +1 -1
  54. package/dist/resources/store.d.ts.map +1 -1
  55. package/dist/resources/store.js +2 -1
  56. package/dist/resources/store.js.map +1 -1
  57. package/dist/scripts/call-agent.d.ts.map +1 -1
  58. package/dist/scripts/call-agent.js +9 -4
  59. package/dist/scripts/call-agent.js.map +1 -1
  60. package/dist/server/agent-discovery.d.ts.map +1 -1
  61. package/dist/server/agent-discovery.js +7 -4
  62. package/dist/server/agent-discovery.js.map +1 -1
  63. package/dist/server/auth.d.ts.map +1 -1
  64. package/dist/server/auth.js +6 -0
  65. package/dist/server/auth.js.map +1 -1
  66. package/dist/vite/index.d.ts +1 -1
  67. package/dist/vite/index.d.ts.map +1 -1
  68. package/dist/vite/index.js +1 -1
  69. package/dist/vite/index.js.map +1 -1
  70. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AgentsSection.js","sourceRoot":"","sources":["../../../src/client/settings/AgentsSection.tsx"],"names":[],"mappings":"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","sourcesContent":["import { agentNativePath } from \"../api-path.js\";\nimport { useState, useEffect, useRef, useCallback } from \"react\";\nimport {\n IconPlus,\n IconPencil,\n IconTrash,\n IconCheck,\n IconX,\n} from \"@tabler/icons-react\";\n\ninterface AgentInfo {\n id: string;\n path: string;\n name: string;\n url: string;\n description?: string;\n}\n\nfunction AgentEditPopover({\n agent,\n onSave,\n onDelete,\n onClose,\n}: {\n agent: AgentInfo;\n onSave: (agent: AgentInfo) => void;\n onDelete: (id: string) => void;\n onClose: () => void;\n}) {\n const [name, setName] = useState(agent.name);\n const [url, setUrl] = useState(agent.url);\n const [description, setDescription] = useState(agent.description ?? \"\");\n const popoverRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n function handleClick(e: MouseEvent) {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(e.target as Node)\n ) {\n onClose();\n }\n }\n document.addEventListener(\"mousedown\", handleClick);\n return () => document.removeEventListener(\"mousedown\", handleClick);\n }, [onClose]);\n\n const handleSave = () => {\n if (!name.trim() || !url.trim()) return;\n onSave({\n ...agent,\n name: name.trim(),\n url: url.trim(),\n description: description.trim() || undefined,\n });\n };\n\n return (\n <div\n ref={popoverRef}\n className=\"absolute right-0 top-full z-50 mt-1 w-64 rounded-lg border border-border bg-popover p-2.5 shadow-lg\"\n >\n <div className=\"flex flex-col gap-1.5\">\n <input\n value={name}\n onChange={(e) => setName(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleSave();\n if (e.key === \"Escape\") onClose();\n }}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Name\"\n />\n <input\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleSave();\n if (e.key === \"Escape\") onClose();\n }}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"URL (e.g. http://localhost:8085)\"\n />\n <input\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleSave();\n if (e.key === \"Escape\") onClose();\n }}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Description (optional)\"\n />\n <div className=\"flex items-center justify-between pt-0.5\">\n <button\n onClick={() => onDelete(agent.id)}\n className=\"flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] text-red-400 hover:bg-red-900/20\"\n >\n <IconTrash size={10} />\n Remove\n </button>\n <div className=\"flex gap-1\">\n <button\n onClick={onClose}\n className=\"rounded px-2 py-0.5 text-[10px] text-muted-foreground hover:text-foreground\"\n >\n Cancel\n </button>\n <button\n onClick={handleSave}\n disabled={!name.trim() || !url.trim()}\n className=\"rounded bg-accent px-2 py-0.5 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40\"\n >\n Save\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction AgentAddPopover({\n onAdd,\n onClose,\n}: {\n onAdd: (name: string, url: string, description: string) => void;\n onClose: () => void;\n}) {\n const [name, setName] = useState(\"\");\n const [url, setUrl] = useState(\"\");\n const [description, setDescription] = useState(\"\");\n const nameRef = useRef<HTMLInputElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const t = setTimeout(() => nameRef.current?.focus(), 50);\n return () => clearTimeout(t);\n }, []);\n\n useEffect(() => {\n function handleClick(e: MouseEvent) {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(e.target as Node)\n ) {\n onClose();\n }\n }\n document.addEventListener(\"mousedown\", handleClick);\n return () => document.removeEventListener(\"mousedown\", handleClick);\n }, [onClose]);\n\n const handleAdd = () => {\n if (!name.trim() || !url.trim()) return;\n onAdd(name.trim(), url.trim(), description.trim());\n };\n\n return (\n <div\n ref={popoverRef}\n className=\"absolute right-0 top-full z-50 mt-1 w-64 rounded-lg border border-border bg-popover p-2.5 shadow-lg\"\n >\n <div className=\"flex flex-col gap-1.5\">\n <input\n ref={nameRef}\n value={name}\n onChange={(e) => setName(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleAdd();\n if (e.key === \"Escape\") onClose();\n }}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Name\"\n />\n <input\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleAdd();\n if (e.key === \"Escape\") onClose();\n }}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"URL (e.g. http://localhost:8085)\"\n />\n <input\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleAdd();\n if (e.key === \"Escape\") onClose();\n }}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Description (optional)\"\n />\n <div className=\"flex justify-end gap-1 pt-0.5\">\n <button\n onClick={onClose}\n className=\"rounded px-2 py-0.5 text-[10px] text-muted-foreground hover:text-foreground\"\n >\n Cancel\n </button>\n <button\n onClick={handleAdd}\n disabled={!name.trim() || !url.trim()}\n className=\"rounded bg-accent px-2 py-0.5 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40\"\n >\n Add\n </button>\n </div>\n </div>\n </div>\n );\n}\n\nexport function AgentsSection() {\n const [agents, setAgents] = useState<AgentInfo[]>([]);\n const [loading, setLoading] = useState(true);\n const [editingAgent, setEditingAgent] = useState<string | null>(null);\n const [showAdd, setShowAdd] = useState(false);\n\n const fetchAgents = useCallback(async () => {\n try {\n const res = await fetch(\n agentNativePath(\"/_agent-native/resources?scope=all\"),\n );\n if (!res.ok) return;\n const data = await res.json();\n const agentResources = (data.resources ?? []).filter(\n (r: { path: string }) =>\n r.path.startsWith(\"remote-agents/\") && r.path.endsWith(\".json\"),\n );\n const parsed = await Promise.all(\n agentResources.map(async (r: { id: string; path: string }) => {\n try {\n const detail = await fetch(\n agentNativePath(`/_agent-native/resources/${r.id}`),\n );\n if (!detail.ok) return null;\n const d = await detail.json();\n const config = JSON.parse(d.content);\n return {\n id: r.id,\n path: r.path,\n name: config.name,\n url: config.url,\n description: config.description,\n };\n } catch {\n return null;\n }\n }),\n );\n setAgents(parsed.filter(Boolean));\n } finally {\n setLoading(false);\n }\n }, []);\n\n useEffect(() => {\n fetchAgents();\n }, [fetchAgents]);\n\n const handleAdd = async (name: string, url: string, description: string) => {\n const id = name.toLowerCase().replace(/[^a-z0-9-]/g, \"-\");\n const agentJson = JSON.stringify(\n {\n id,\n name,\n description: description || undefined,\n url,\n color: \"#6B7280\",\n },\n null,\n 2,\n );\n\n try {\n const res = await fetch(agentNativePath(\"/_agent-native/resources\"), {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n path: `remote-agents/${id}.json`,\n content: agentJson,\n shared: true,\n }),\n });\n if (res.ok) {\n setShowAdd(false);\n fetchAgents();\n }\n } catch {}\n };\n\n const handleSave = async (agent: AgentInfo) => {\n const agentJson = JSON.stringify(\n {\n id: agent.path\n .replace(\"remote-agents/\", \"\")\n .replace(\"agents/\", \"\")\n .replace(\".json\", \"\"),\n name: agent.name,\n description: agent.description || undefined,\n url: agent.url,\n color: \"#6B7280\",\n },\n null,\n 2,\n );\n\n try {\n const res = await fetch(\n agentNativePath(`/_agent-native/resources/${agent.id}`),\n {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ content: agentJson }),\n },\n );\n if (res.ok) {\n setEditingAgent(null);\n fetchAgents();\n }\n } catch {}\n };\n\n const handleDelete = async (agentId: string) => {\n try {\n const res = await fetch(\n agentNativePath(`/_agent-native/resources/${agentId}`),\n {\n method: \"DELETE\",\n headers: { \"Content-Type\": \"application/json\" },\n },\n );\n if (res.ok) {\n setEditingAgent(null);\n fetchAgents();\n }\n } catch {}\n };\n\n return (\n <div>\n {/* Header with + button */}\n <div className=\"flex items-center justify-between mb-2\">\n <div className=\"text-[10px] text-muted-foreground\">\n @-mention agents in chat to delegate tasks via A2A.\n </div>\n <div className=\"relative\">\n <button\n onClick={() => {\n setShowAdd(!showAdd);\n setEditingAgent(null);\n }}\n className=\"flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50\"\n title=\"Add agent\"\n >\n {showAdd ? <IconX size={12} /> : <IconPlus size={12} />}\n </button>\n {showAdd && (\n <AgentAddPopover\n onAdd={handleAdd}\n onClose={() => setShowAdd(false)}\n />\n )}\n </div>\n </div>\n\n {/* Agent list */}\n {loading ? (\n <div className=\"space-y-1.5\">\n <div className=\"h-6 w-full rounded bg-muted/50 animate-pulse\" />\n <div className=\"h-6 w-3/4 rounded bg-muted/50 animate-pulse\" />\n </div>\n ) : agents.length === 0 ? (\n <button\n onClick={() => setShowAdd(true)}\n className=\"flex w-full items-center gap-1.5 rounded-md px-2 py-1.5 text-[11px] text-muted-foreground hover:text-foreground hover:bg-accent/30\"\n >\n <IconPlus size={12} className=\"shrink-0\" />\n Add agent\n </button>\n ) : (\n <div className=\"flex flex-col gap-0.5\">\n {agents.map((agent) => (\n <div key={agent.id} className=\"group relative\">\n <div className=\"flex w-full items-center gap-2 rounded-md px-2 py-1.5 hover:bg-accent/30\">\n <span className=\"text-[11px] font-medium text-foreground truncate shrink-0\">\n {agent.name}\n </span>\n <span className=\"flex-1 text-[10px] text-muted-foreground/60 truncate text-right\">\n {agent.url}\n </span>\n <button\n onClick={() => {\n setEditingAgent(\n editingAgent === agent.id ? null : agent.id,\n );\n setShowAdd(false);\n }}\n className=\"shrink-0 rounded p-0.5 text-muted-foreground opacity-0 group-hover:opacity-100 hover:text-foreground hover:bg-accent/50\"\n title=\"Edit agent\"\n >\n <IconPencil size={11} />\n </button>\n </div>\n {editingAgent === agent.id && (\n <AgentEditPopover\n agent={agent}\n onSave={handleSave}\n onDelete={handleDelete}\n onClose={() => setEditingAgent(null)}\n />\n )}\n </div>\n ))}\n <button\n onClick={() => {\n setShowAdd(true);\n setEditingAgent(null);\n }}\n className=\"flex w-full items-center gap-1.5 rounded-md px-2 py-1.5 text-[11px] text-muted-foreground hover:text-foreground hover:bg-accent/30\"\n >\n <IconPlus size={12} className=\"shrink-0\" />\n Add agent\n </button>\n </div>\n )}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"AgentsSection.js","sourceRoot":"","sources":["../../../src/client/settings/AgentsSection.tsx"],"names":[],"mappings":"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","sourcesContent":["import { agentNativePath } from \"../api-path.js\";\nimport {\n getRemoteAgentIdFromPath,\n isRemoteAgentPath,\n remoteAgentResourcePath,\n} from \"../../resources/metadata.js\";\nimport { useState, useEffect, useRef, useCallback } from \"react\";\nimport {\n IconPlus,\n IconPencil,\n IconTrash,\n IconCheck,\n IconX,\n} from \"@tabler/icons-react\";\n\ninterface AgentInfo {\n id: string;\n path: string;\n name: string;\n url: string;\n description?: string;\n}\n\nfunction AgentEditPopover({\n agent,\n onSave,\n onDelete,\n onClose,\n}: {\n agent: AgentInfo;\n onSave: (agent: AgentInfo) => void;\n onDelete: (id: string) => void;\n onClose: () => void;\n}) {\n const [name, setName] = useState(agent.name);\n const [url, setUrl] = useState(agent.url);\n const [description, setDescription] = useState(agent.description ?? \"\");\n const popoverRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n function handleClick(e: MouseEvent) {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(e.target as Node)\n ) {\n onClose();\n }\n }\n document.addEventListener(\"mousedown\", handleClick);\n return () => document.removeEventListener(\"mousedown\", handleClick);\n }, [onClose]);\n\n const handleSave = () => {\n if (!name.trim() || !url.trim()) return;\n onSave({\n ...agent,\n name: name.trim(),\n url: url.trim(),\n description: description.trim() || undefined,\n });\n };\n\n return (\n <div\n ref={popoverRef}\n className=\"absolute right-0 top-full z-50 mt-1 w-64 rounded-lg border border-border bg-popover p-2.5 shadow-lg\"\n >\n <div className=\"flex flex-col gap-1.5\">\n <input\n value={name}\n onChange={(e) => setName(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleSave();\n if (e.key === \"Escape\") onClose();\n }}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Name\"\n />\n <input\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleSave();\n if (e.key === \"Escape\") onClose();\n }}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"URL (e.g. http://localhost:8085)\"\n />\n <input\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleSave();\n if (e.key === \"Escape\") onClose();\n }}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Description (optional)\"\n />\n <div className=\"flex items-center justify-between pt-0.5\">\n <button\n onClick={() => onDelete(agent.id)}\n className=\"flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] text-red-400 hover:bg-red-900/20\"\n >\n <IconTrash size={10} />\n Remove\n </button>\n <div className=\"flex gap-1\">\n <button\n onClick={onClose}\n className=\"rounded px-2 py-0.5 text-[10px] text-muted-foreground hover:text-foreground\"\n >\n Cancel\n </button>\n <button\n onClick={handleSave}\n disabled={!name.trim() || !url.trim()}\n className=\"rounded bg-accent px-2 py-0.5 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40\"\n >\n Save\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction AgentAddPopover({\n onAdd,\n onClose,\n}: {\n onAdd: (name: string, url: string, description: string) => void;\n onClose: () => void;\n}) {\n const [name, setName] = useState(\"\");\n const [url, setUrl] = useState(\"\");\n const [description, setDescription] = useState(\"\");\n const nameRef = useRef<HTMLInputElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const t = setTimeout(() => nameRef.current?.focus(), 50);\n return () => clearTimeout(t);\n }, []);\n\n useEffect(() => {\n function handleClick(e: MouseEvent) {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(e.target as Node)\n ) {\n onClose();\n }\n }\n document.addEventListener(\"mousedown\", handleClick);\n return () => document.removeEventListener(\"mousedown\", handleClick);\n }, [onClose]);\n\n const handleAdd = () => {\n if (!name.trim() || !url.trim()) return;\n onAdd(name.trim(), url.trim(), description.trim());\n };\n\n return (\n <div\n ref={popoverRef}\n className=\"absolute right-0 top-full z-50 mt-1 w-64 rounded-lg border border-border bg-popover p-2.5 shadow-lg\"\n >\n <div className=\"flex flex-col gap-1.5\">\n <input\n ref={nameRef}\n value={name}\n onChange={(e) => setName(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleAdd();\n if (e.key === \"Escape\") onClose();\n }}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Name\"\n />\n <input\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleAdd();\n if (e.key === \"Escape\") onClose();\n }}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"URL (e.g. http://localhost:8085)\"\n />\n <input\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleAdd();\n if (e.key === \"Escape\") onClose();\n }}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Description (optional)\"\n />\n <div className=\"flex justify-end gap-1 pt-0.5\">\n <button\n onClick={onClose}\n className=\"rounded px-2 py-0.5 text-[10px] text-muted-foreground hover:text-foreground\"\n >\n Cancel\n </button>\n <button\n onClick={handleAdd}\n disabled={!name.trim() || !url.trim()}\n className=\"rounded bg-accent px-2 py-0.5 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40\"\n >\n Add\n </button>\n </div>\n </div>\n </div>\n );\n}\n\nexport function AgentsSection() {\n const [agents, setAgents] = useState<AgentInfo[]>([]);\n const [loading, setLoading] = useState(true);\n const [editingAgent, setEditingAgent] = useState<string | null>(null);\n const [showAdd, setShowAdd] = useState(false);\n\n const fetchAgents = useCallback(async () => {\n try {\n const res = await fetch(\n agentNativePath(\"/_agent-native/resources?scope=all\"),\n );\n if (!res.ok) return;\n const data = await res.json();\n const agentResources = (data.resources ?? []).filter(\n (r: { path: string }) => isRemoteAgentPath(r.path),\n );\n const parsed = await Promise.all(\n agentResources.map(async (r: { id: string; path: string }) => {\n try {\n const detail = await fetch(\n agentNativePath(`/_agent-native/resources/${r.id}`),\n );\n if (!detail.ok) return null;\n const d = await detail.json();\n const config = JSON.parse(d.content);\n return {\n id: r.id,\n path: r.path,\n name: config.name,\n url: config.url,\n description: config.description,\n };\n } catch {\n return null;\n }\n }),\n );\n setAgents(parsed.filter(Boolean));\n } finally {\n setLoading(false);\n }\n }, []);\n\n useEffect(() => {\n fetchAgents();\n }, [fetchAgents]);\n\n const handleAdd = async (name: string, url: string, description: string) => {\n const id = name.toLowerCase().replace(/[^a-z0-9-]/g, \"-\");\n const agentJson = JSON.stringify(\n {\n id,\n name,\n description: description || undefined,\n url,\n color: \"#6B7280\",\n },\n null,\n 2,\n );\n\n try {\n const res = await fetch(agentNativePath(\"/_agent-native/resources\"), {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n path: remoteAgentResourcePath(id),\n content: agentJson,\n shared: true,\n }),\n });\n if (res.ok) {\n setShowAdd(false);\n fetchAgents();\n }\n } catch {}\n };\n\n const handleSave = async (agent: AgentInfo) => {\n const agentJson = JSON.stringify(\n {\n id: getRemoteAgentIdFromPath(agent.path),\n name: agent.name,\n description: agent.description || undefined,\n url: agent.url,\n color: \"#6B7280\",\n },\n null,\n 2,\n );\n\n try {\n const res = await fetch(\n agentNativePath(`/_agent-native/resources/${agent.id}`),\n {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ content: agentJson }),\n },\n );\n if (res.ok) {\n setEditingAgent(null);\n fetchAgents();\n }\n } catch {}\n };\n\n const handleDelete = async (agentId: string) => {\n try {\n const res = await fetch(\n agentNativePath(`/_agent-native/resources/${agentId}`),\n {\n method: \"DELETE\",\n headers: { \"Content-Type\": \"application/json\" },\n },\n );\n if (res.ok) {\n setEditingAgent(null);\n fetchAgents();\n }\n } catch {}\n };\n\n return (\n <div>\n {/* Header with + button */}\n <div className=\"flex items-center justify-between mb-2\">\n <div className=\"text-[10px] text-muted-foreground\">\n @-mention agents in chat to delegate tasks via A2A.\n </div>\n <div className=\"relative\">\n <button\n onClick={() => {\n setShowAdd(!showAdd);\n setEditingAgent(null);\n }}\n className=\"flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50\"\n title=\"Add agent\"\n >\n {showAdd ? <IconX size={12} /> : <IconPlus size={12} />}\n </button>\n {showAdd && (\n <AgentAddPopover\n onAdd={handleAdd}\n onClose={() => setShowAdd(false)}\n />\n )}\n </div>\n </div>\n\n {/* Agent list */}\n {loading ? (\n <div className=\"space-y-1.5\">\n <div className=\"h-6 w-full rounded bg-muted/50 animate-pulse\" />\n <div className=\"h-6 w-3/4 rounded bg-muted/50 animate-pulse\" />\n </div>\n ) : agents.length === 0 ? (\n <button\n onClick={() => setShowAdd(true)}\n className=\"flex w-full items-center gap-1.5 rounded-md px-2 py-1.5 text-[11px] text-muted-foreground hover:text-foreground hover:bg-accent/30\"\n >\n <IconPlus size={12} className=\"shrink-0\" />\n Add agent\n </button>\n ) : (\n <div className=\"flex flex-col gap-0.5\">\n {agents.map((agent) => (\n <div key={agent.id} className=\"group relative\">\n <div className=\"flex w-full items-center gap-2 rounded-md px-2 py-1.5 hover:bg-accent/30\">\n <span className=\"text-[11px] font-medium text-foreground truncate shrink-0\">\n {agent.name}\n </span>\n <span className=\"flex-1 text-[10px] text-muted-foreground/60 truncate text-right\">\n {agent.url}\n </span>\n <button\n onClick={() => {\n setEditingAgent(\n editingAgent === agent.id ? null : agent.id,\n );\n setShowAdd(false);\n }}\n className=\"shrink-0 rounded p-0.5 text-muted-foreground opacity-0 group-hover:opacity-100 hover:text-foreground hover:bg-accent/50\"\n title=\"Edit agent\"\n >\n <IconPencil size={11} />\n </button>\n </div>\n {editingAgent === agent.id && (\n <AgentEditPopover\n agent={agent}\n onSave={handleSave}\n onDelete={handleDelete}\n onClose={() => setEditingAgent(null)}\n />\n )}\n </div>\n ))}\n <button\n onClick={() => {\n setShowAdd(true);\n setEditingAgent(null);\n }}\n className=\"flex w-full items-center gap-1.5 rounded-md px-2 py-1.5 text-[11px] text-muted-foreground hover:text-foreground hover:bg-accent/30\"\n >\n <IconPlus size={12} className=\"shrink-0\" />\n Add agent\n </button>\n </div>\n )}\n </div>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/deploy/build.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG;AAOH,OAAO,EAML,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAC;AAwB7B;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,eAAe,EAAE,EACzB,WAAW,EAAE,MAAM,EAAE,EACrB,kBAAkB,GAAE,MAAM,EAAO,EACjC,OAAO,GAAE,gBAAgB,EAAO,EAChC,aAAa,GAAE,oBAAoB,GAAG,IAAW,GAChD,MAAM,CAkVR;AA+WD,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAE9C"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/deploy/build.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG;AAOH,OAAO,EAML,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAC;AAyB7B;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,eAAe,EAAE,EACzB,WAAW,EAAE,MAAM,EAAE,EACrB,kBAAkB,GAAE,MAAM,EAAO,EACjC,OAAO,GAAE,gBAAgB,EAAO,EAChC,aAAa,GAAE,oBAAoB,GAAG,IAAW,GAChD,MAAM,CAkVR;AAiXD,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAE9C"}
@@ -19,6 +19,7 @@ import { createRequire } from "module";
19
19
  import { fileURLToPath } from "url";
20
20
  import { discoverApiRoutes, discoverPlugins, discoverActionFiles, getMissingDefaultPlugins, DEFAULT_PLUGIN_REGISTRY, } from "./route-discovery.js";
21
21
  import { getWorkspaceCoreExports, } from "./workspace-core.js";
22
+ import { generateActionRegistryForProject } from "../vite/action-types-plugin.js";
22
23
  const cwd = process.cwd();
23
24
  const preset = process.env.NITRO_PRESET || "node";
24
25
  function normalizeConfiguredAppBasePath() {
@@ -374,6 +375,7 @@ export default {
374
375
  * assets/ (static client assets)
375
376
  */
376
377
  async function buildCloudflarePages() {
378
+ generateActionRegistryForProject(cwd);
377
379
  const buildDir = path.join(cwd, "build");
378
380
  const clientDir = path.join(buildDir, "client");
379
381
  const serverDir = path.join(buildDir, "server");
@@ -912,6 +914,12 @@ function createDanglingOptionalDepStubs() {
912
914
  async function buildWithNitro() {
913
915
  console.log(`[deploy] Building for preset "${preset}" via Nitro...`);
914
916
  const appBasePath = normalizeConfiguredAppBasePath();
917
+ // Nitro runs its own server build after the React Router/Vite build. The
918
+ // template's agent-chat plugin imports .generated/actions-registry.ts so the
919
+ // serverless bundle has static imports for every domain action. Regenerate
920
+ // here as well so deploy builds are not coupled to a previous Vite run or to
921
+ // ignored local .generated files being present.
922
+ generateActionRegistryForProject(cwd);
915
923
  // Work around pnpm + nitro:externals (nf3) bug where dangling symlinks for
916
924
  // platform-specific optional deps cause realpath ENOENT during file tracing.
917
925
  createDanglingOptionalDepStubs();