@agent-native/dispatch 0.24.0 → 0.24.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions/provider-api-register.d.ts +12 -12
- package/dist/components/admin-navigation.d.ts.map +1 -1
- package/dist/components/admin-navigation.js +21 -5
- package/dist/components/admin-navigation.js.map +1 -1
- package/dist/components/agents-panel.d.ts.map +1 -1
- package/dist/components/agents-panel.js +7 -2
- package/dist/components/agents-panel.js.map +1 -1
- package/dist/components/app-list-row.d.ts +1 -1
- package/dist/components/app-list-row.d.ts.map +1 -1
- package/dist/components/app-list-row.js +1 -1
- package/dist/components/app-list-row.js.map +1 -1
- package/dist/components/app-open-actions.d.ts +1 -17
- package/dist/components/app-open-actions.d.ts.map +1 -1
- package/dist/components/app-open-actions.js +1 -20
- package/dist/components/app-open-actions.js.map +1 -1
- package/dist/components/app-row-settings.d.ts +6 -0
- package/dist/components/app-row-settings.d.ts.map +1 -0
- package/dist/components/app-row-settings.js +11 -0
- package/dist/components/app-row-settings.js.map +1 -0
- package/dist/components/automation-run-history-dialog.d.ts.map +1 -1
- package/dist/components/automation-run-history-dialog.js +3 -2
- package/dist/components/automation-run-history-dialog.js.map +1 -1
- package/dist/components/connected-app-card.d.ts.map +1 -1
- package/dist/components/connected-app-card.js +1 -1
- package/dist/components/connected-app-card.js.map +1 -1
- package/dist/components/create-app-popover.js +2 -2
- package/dist/components/create-app-popover.js.map +1 -1
- package/dist/components/dispatch-control-plane.d.ts.map +1 -1
- package/dist/components/dispatch-control-plane.js +23 -7
- package/dist/components/dispatch-control-plane.js.map +1 -1
- package/dist/components/dispatch-shell.d.ts.map +1 -1
- package/dist/components/dispatch-shell.js +5 -1
- package/dist/components/dispatch-shell.js.map +1 -1
- package/dist/components/docs-link.d.ts +16 -0
- package/dist/components/docs-link.d.ts.map +1 -0
- package/dist/components/docs-link.js +34 -0
- package/dist/components/docs-link.js.map +1 -0
- package/dist/components/layout/Layout.d.ts +1 -0
- package/dist/components/layout/Layout.d.ts.map +1 -1
- package/dist/components/layout/Layout.js +37 -28
- package/dist/components/layout/Layout.js.map +1 -1
- package/dist/components/messaging-setup-panel.d.ts.map +1 -1
- package/dist/components/messaging-setup-panel.js +3 -2
- package/dist/components/messaging-setup-panel.js.map +1 -1
- package/dist/components/usage-alerts-panel.d.ts +11 -0
- package/dist/components/usage-alerts-panel.d.ts.map +1 -0
- package/dist/components/usage-alerts-panel.js +125 -0
- package/dist/components/usage-alerts-panel.js.map +1 -0
- package/dist/components/workspace-app-card.d.ts +3 -1
- package/dist/components/workspace-app-card.d.ts.map +1 -1
- package/dist/components/workspace-app-card.js +70 -29
- package/dist/components/workspace-app-card.js.map +1 -1
- package/dist/components/workspace-app-search.d.ts +10 -0
- package/dist/components/workspace-app-search.d.ts.map +1 -0
- package/dist/components/workspace-app-search.js +27 -0
- package/dist/components/workspace-app-search.js.map +1 -0
- package/dist/components/workspace-resource-effective-stack.d.ts.map +1 -1
- package/dist/components/workspace-resource-effective-stack.js +3 -2
- package/dist/components/workspace-resource-effective-stack.js.map +1 -1
- package/dist/components/workspace-template-card.d.ts.map +1 -1
- package/dist/components/workspace-template-card.js +2 -1
- package/dist/components/workspace-template-card.js.map +1 -1
- package/dist/lib/workspace-app-layout.d.ts +19 -0
- package/dist/lib/workspace-app-layout.d.ts.map +1 -0
- package/dist/lib/workspace-app-layout.js +75 -0
- package/dist/lib/workspace-app-layout.js.map +1 -0
- package/dist/lib/workspace-apps.d.ts +10 -0
- package/dist/lib/workspace-apps.d.ts.map +1 -1
- package/dist/lib/workspace-apps.js +59 -0
- package/dist/lib/workspace-apps.js.map +1 -1
- package/dist/lib/workspace-apps.test.js +18 -1
- package/dist/lib/workspace-apps.test.js.map +1 -1
- package/dist/routes/pages/$appId.d.ts.map +1 -1
- package/dist/routes/pages/$appId.js +4 -2
- package/dist/routes/pages/$appId.js.map +1 -1
- package/dist/routes/pages/agents.d.ts.map +1 -1
- package/dist/routes/pages/agents.js +2 -3
- package/dist/routes/pages/agents.js.map +1 -1
- package/dist/routes/pages/apps.$appId.d.ts.map +1 -1
- package/dist/routes/pages/apps.$appId.js +8 -3
- package/dist/routes/pages/apps.$appId.js.map +1 -1
- package/dist/routes/pages/apps.d.ts.map +1 -1
- package/dist/routes/pages/apps.js +31 -16
- package/dist/routes/pages/apps.js.map +1 -1
- package/dist/routes/pages/audit.d.ts.map +1 -1
- package/dist/routes/pages/audit.js +2 -1
- package/dist/routes/pages/audit.js.map +1 -1
- package/dist/routes/pages/dreams.d.ts.map +1 -1
- package/dist/routes/pages/dreams.js +14 -18
- package/dist/routes/pages/dreams.js.map +1 -1
- package/dist/routes/pages/integrations.d.ts.map +1 -1
- package/dist/routes/pages/integrations.js +51 -14
- package/dist/routes/pages/integrations.js.map +1 -1
- package/dist/routes/pages/metrics.d.ts.map +1 -1
- package/dist/routes/pages/metrics.js +4 -1
- package/dist/routes/pages/metrics.js.map +1 -1
- package/dist/routes/pages/operations.js +1 -1
- package/dist/routes/pages/operations.js.map +1 -1
- package/dist/routes/pages/settings.d.ts.map +1 -1
- package/dist/routes/pages/settings.js +7 -2
- package/dist/routes/pages/settings.js.map +1 -1
- package/dist/routes/pages/thread-debug.d.ts.map +1 -1
- package/dist/routes/pages/thread-debug.js +5 -8
- package/dist/routes/pages/thread-debug.js.map +1 -1
- package/dist/routes/pages/vault.d.ts.map +1 -1
- package/dist/routes/pages/vault.js +1 -1
- package/dist/routes/pages/vault.js.map +1 -1
- package/dist/routes/pages/workspace.d.ts.map +1 -1
- package/dist/routes/pages/workspace.js +13 -10
- package/dist/routes/pages/workspace.js.map +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +3 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/lib/app-creation-store.d.ts.map +1 -1
- package/dist/server/lib/app-creation-store.js +12 -52
- package/dist/server/lib/app-creation-store.js.map +1 -1
- package/dist/shared/app-roles.d.ts +9 -0
- package/dist/shared/app-roles.d.ts.map +1 -0
- package/dist/shared/app-roles.js +7 -0
- package/dist/shared/app-roles.js.map +1 -0
- package/package.json +4 -3
- package/src/components/admin-navigation.tsx +57 -11
- package/src/components/agents-panel.tsx +54 -29
- package/src/components/app-list-row.tsx +1 -2
- package/src/components/app-open-actions.tsx +5 -114
- package/src/components/app-row-settings.tsx +54 -0
- package/src/components/automation-run-history-dialog.tsx +8 -4
- package/src/components/connected-app-card.tsx +0 -1
- package/src/components/create-app-popover.spec.tsx +1 -1
- package/src/components/create-app-popover.tsx +2 -2
- package/src/components/dispatch-control-plane.spec.tsx +36 -2
- package/src/components/dispatch-control-plane.tsx +83 -27
- package/src/components/dispatch-shell.tsx +7 -1
- package/src/components/docs-link.tsx +52 -0
- package/src/components/layout/Layout.spec.tsx +10 -0
- package/src/components/layout/Layout.tsx +50 -23
- package/src/components/messaging-setup-panel.tsx +10 -3
- package/src/components/usage-alerts-panel.tsx +445 -0
- package/src/components/workspace-app-card.spec.tsx +130 -9
- package/src/components/workspace-app-card.tsx +128 -71
- package/src/components/workspace-app-search.tsx +96 -0
- package/src/components/workspace-resource-effective-stack.tsx +10 -5
- package/src/components/workspace-template-card.spec.tsx +52 -23
- package/src/components/workspace-template-card.tsx +7 -10
- package/src/lib/workspace-app-layout.spec.ts +47 -0
- package/src/lib/workspace-app-layout.ts +121 -0
- package/src/lib/workspace-apps.test.ts +45 -1
- package/src/lib/workspace-apps.ts +72 -0
- package/src/routes/pages/$appId.tsx +3 -6
- package/src/routes/pages/agents.tsx +6 -3
- package/src/routes/pages/apps.$appId.tsx +6 -6
- package/src/routes/pages/apps.tsx +116 -62
- package/src/routes/pages/audit.tsx +28 -8
- package/src/routes/pages/dreams.tsx +92 -142
- package/src/routes/pages/integrations.tsx +147 -68
- package/src/routes/pages/metrics.tsx +8 -0
- package/src/routes/pages/operations.tsx +2 -2
- package/src/routes/pages/settings.tsx +14 -9
- package/src/routes/pages/thread-debug.tsx +18 -36
- package/src/routes/pages/vault.tsx +7 -2
- package/src/routes/pages/workspace.tsx +92 -56
- package/src/server/index.ts +4 -0
- package/src/server/lib/app-creation-store.spec.ts +90 -43
- package/src/server/lib/app-creation-store.ts +15 -61
- package/src/shared/app-roles.ts +8 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../src/routes/pages/workspace.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n useActionMutation,\n useActionQuery,\n} from \"@agent-native/core/client/hooks\";\nimport {\n IconAlertCircle,\n IconBook,\n IconChevronDown,\n IconChevronRight,\n IconCircleCheck,\n IconCode,\n IconEdit,\n IconFileText,\n IconPlus,\n IconPlugConnected,\n IconTrash,\n IconUser,\n IconX,\n} from \"@tabler/icons-react\";\nimport { useEffect, useState, type ReactNode } from \"react\";\nimport { toast } from \"sonner\";\n\nimport { ActionQueryError } from \"../../components/action-query-error\";\nimport { DispatchShell } from \"../../components/dispatch-shell\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"../../components/ui/alert-dialog\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"../../components/ui/dialog\";\nimport { Input } from \"../../components/ui/input\";\nimport { Label } from \"../../components/ui/label\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../components/ui/select\";\nimport { Skeleton } from \"../../components/ui/skeleton\";\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"../../components/ui/tabs\";\nimport { Textarea } from \"../../components/ui/textarea\";\nimport {\n ImpactPreview,\n workspaceResourceMutationMessage,\n} from \"../../components/workspace-resource-impact-preview\";\n\nexport function meta() {\n return [{ title: \"Agent Resources — Dispatch\" }];\n}\n\nconst KIND_CONFIG = {\n skill: {\n label: \"Skill\",\n icon: IconCode,\n pathPrefix: \"skills/\",\n description:\n \"Agent skills - on-demand guidance available across workspace apps\",\n },\n instruction: {\n label: \"Instruction\",\n icon: IconBook,\n pathPrefix: \"instructions/\",\n description: \"Global instructions - guardrails loaded by every app agent\",\n },\n agent: {\n label: \"Agent\",\n icon: IconUser,\n pathPrefix: \"agents/\",\n description:\n \"Reusable agent profiles - specialist agents shared across apps\",\n },\n knowledge: {\n label: \"Knowledge\",\n icon: IconFileText,\n pathPrefix: \"context/\",\n description:\n \"Reference resources - brand, positioning, persona, and domain context\",\n },\n \"mcp-server\": {\n label: \"MCP Server\",\n icon: IconPlugConnected,\n pathPrefix: \"mcp-servers/\",\n description:\n \"HTTP MCP servers - external tools centrally granted to app agents\",\n },\n} as const;\n\nconst STARTER_GLOBAL_CONTEXT = [\n {\n path: \"context/company.md\",\n label: \"Company\",\n kind: \"knowledge\",\n description: \"Company facts, ICP, products, and canonical links\",\n },\n {\n path: \"context/brand.md\",\n label: \"Brand\",\n kind: \"knowledge\",\n description: \"Voice, visual identity, naming, and style rules\",\n },\n {\n path: \"context/messaging.md\",\n label: \"Messaging\",\n kind: \"knowledge\",\n description: \"Positioning, value props, proof points, and objections\",\n },\n {\n path: \"instructions/guardrails.md\",\n label: \"Guardrails\",\n kind: \"instruction\",\n description: \"Always-on rules loaded by every app agent\",\n },\n {\n path: \"skills/company-voice/SKILL.md\",\n label: \"Company Voice\",\n kind: \"skill\",\n description: \"On-demand guidance for customer-facing writing\",\n },\n] as const;\n\nfunction resourceSlug(value: string): string {\n return value\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\n\nfunction defaultResourcePath(kind: string, name: string): string {\n const slug = resourceSlug(name) || \"example\";\n if (kind === \"skill\") return `skills/${slug}/SKILL.md`;\n if (kind === \"instruction\") return `instructions/${slug}.md`;\n if (kind === \"agent\") return `agents/${slug}.md`;\n if (kind === \"knowledge\") return `context/${slug}.md`;\n if (kind === \"mcp-server\") return `mcp-servers/${slug}.json`;\n return `${slug}.md`;\n}\n\nfunction isAutoLoadedInstruction(resource: any): boolean {\n return (\n resource.kind === \"instruction\" &&\n (resource.path === \"AGENTS.md\" ||\n String(resource.path).startsWith(\"instructions/\"))\n );\n}\n\nfunction formatTimestamp(value?: number | null): string {\n if (!value) return \"Not present\";\n return new Date(value).toLocaleString();\n}\n\nfunction availabilityLabel(value?: string): string {\n switch (value) {\n case \"all-apps\":\n return \"Inherited by all apps\";\n case \"selected-granted\":\n return \"Granted to selected app\";\n case \"selected-not-granted\":\n return \"Not granted to this app\";\n case \"selected-no-app\":\n return \"Select an app to check grant\";\n case \"path-not-managed\":\n return \"Path is not a Dispatch resource\";\n default:\n return \"Checking availability\";\n }\n}\n\nfunction layerState(layer: any): {\n label: string;\n className: string;\n} {\n if (layer.effective) {\n return {\n label: \"Active\",\n className: \"border-green-500/30 bg-green-500/10 text-green-700\",\n };\n }\n if (layer.overridden) {\n return {\n label: \"Overridden\",\n className: \"border-amber-500/30 bg-amber-500/10 text-amber-700\",\n };\n }\n return {\n label: \"Missing\",\n className: \"text-muted-foreground\",\n };\n}\n\nfunction EditResourceDialog({\n resource,\n trigger,\n}: {\n resource: any;\n trigger?: ReactNode;\n}) {\n const [open, setOpen] = useState(false);\n const [name, setName] = useState(resource.name || \"\");\n const [description, setDescription] = useState(resource.description || \"\");\n const [content, setContent] = useState(resource.content || \"\");\n const [scope, setScope] = useState(resource.scope || \"all\");\n\n useEffect(() => {\n if (!open) return;\n setName(resource.name || \"\");\n setDescription(resource.description || \"\");\n setContent(resource.content || \"\");\n setScope(resource.scope || \"all\");\n }, [open, resource]);\n\n const update = useActionMutation(\"update-workspace-resource\", {\n onSuccess: (result: any) => {\n toast.success(\n workspaceResourceMutationMessage(result, \"Resource updated\"),\n );\n setOpen(false);\n },\n onError: (err) => toast.error(String(err)),\n });\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogTrigger asChild>\n {trigger || (\n <Button variant=\"outline\" size=\"sm\">\n <IconEdit size={14} className=\"mr-1.5\" />\n Edit\n </Button>\n )}\n </DialogTrigger>\n <DialogContent className=\"max-w-2xl\">\n <DialogHeader>\n <DialogTitle>Edit agent resource</DialogTitle>\n <DialogDescription>\n Updates apply immediately anywhere this agent resource is inherited.\n App shared or personal resources can override it locally.\n </DialogDescription>\n </DialogHeader>\n <div className=\"space-y-4 py-2\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <Label>Name</Label>\n <Input value={name} onChange={(e) => setName(e.target.value)} />\n </div>\n <div className=\"space-y-2\">\n <Label>Scope</Label>\n <Select value={scope} onValueChange={setScope}>\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">All apps</SelectItem>\n <SelectItem value=\"selected\">Selected apps only</SelectItem>\n </SelectContent>\n </Select>\n </div>\n </div>\n <div className=\"space-y-2\">\n <Label>Path</Label>\n <Input\n value={resource.path}\n disabled\n className=\"font-mono text-sm\"\n />\n </div>\n <div className=\"space-y-2\">\n <Label>Description</Label>\n <Input\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n />\n </div>\n <div className=\"space-y-2\">\n <Label>Content</Label>\n <Textarea\n value={content}\n onChange={(e) => setContent(e.target.value)}\n rows={14}\n className=\"font-mono text-sm\"\n />\n </div>\n <ImpactPreview\n operation=\"update\"\n resourceId={resource.id}\n scope={scope as \"all\" | \"selected\"}\n enabled={open}\n />\n </div>\n <DialogFooter>\n <Button\n onClick={() =>\n update.mutate({\n id: resource.id,\n name,\n description,\n content,\n scope: scope as \"all\" | \"selected\",\n })\n }\n disabled={!name.trim() || update.isPending}\n >\n {update.isPending ? \"Saving...\" : \"Save changes\"}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction AddResourceDialog() {\n const [open, setOpen] = useState(false);\n const [kind, setKind] = useState<string>(\"skill\");\n const [name, setName] = useState(\"\");\n const [description, setDescription] = useState(\"\");\n const [path, setPath] = useState(\"\");\n const [content, setContent] = useState(\"\");\n const [scope, setScope] = useState<string>(\"all\");\n\n const create = useActionMutation(\"create-workspace-resource\", {\n onSuccess: (result: any) => {\n toast.success(\n workspaceResourceMutationMessage(result, \"Resource created\"),\n );\n setOpen(false);\n setKind(\"skill\");\n setName(\"\");\n setDescription(\"\");\n setPath(\"\");\n setContent(\"\");\n setScope(\"all\");\n },\n onError: (err) => toast.error(String(err)),\n });\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogTrigger asChild>\n <Button>\n <IconPlus size={16} className=\"mr-1.5\" />\n Add resource\n </Button>\n </DialogTrigger>\n <DialogContent className=\"max-w-2xl\">\n <DialogHeader>\n <DialogTitle>Add agent resource</DialogTitle>\n <DialogDescription>\n Create an agent resource—a skill, instruction, agent profile,\n reference resource, or MCP server—that can be shared across\n workspace apps.\n </DialogDescription>\n </DialogHeader>\n <div className=\"space-y-4 py-2\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <Label>Kind</Label>\n <Select value={kind} onValueChange={setKind}>\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"skill\">Skill</SelectItem>\n <SelectItem value=\"instruction\">Instruction</SelectItem>\n <SelectItem value=\"agent\">Agent</SelectItem>\n <SelectItem value=\"knowledge\">Knowledge pack</SelectItem>\n <SelectItem value=\"mcp-server\">MCP server</SelectItem>\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-2\">\n <Label>Scope</Label>\n <Select value={scope} onValueChange={setScope}>\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">All apps</SelectItem>\n <SelectItem value=\"selected\">Selected apps only</SelectItem>\n </SelectContent>\n </Select>\n </div>\n </div>\n <div className=\"space-y-2\">\n <Label>Name</Label>\n <Input\n placeholder={\n kind === \"skill\"\n ? \"Frontend Designer\"\n : kind === \"agent\"\n ? \"Research Specialist\"\n : kind === \"knowledge\"\n ? \"Core GTM Messaging\"\n : kind === \"mcp-server\"\n ? \"Zapier MCP\"\n : \"Code Style Guide\"\n }\n value={name}\n onChange={(e) => setName(e.target.value)}\n />\n </div>\n <div className=\"space-y-2\">\n <Label>Path</Label>\n <Input\n placeholder={defaultResourcePath(kind, name)}\n value={path}\n onChange={(e) => setPath(e.target.value)}\n className=\"font-mono text-sm\"\n />\n <p className=\"text-xs text-muted-foreground\">\n Skills use skills/name/SKILL.md. Guardrails in AGENTS.md or\n instructions/ auto-load in app chat. Reference resources in\n context/ are indexed so agents can read them when relevant. MCP\n server resources use mcp-servers/name.json and are loaded as HTTP\n MCP tools.\n </p>\n </div>\n <div className=\"space-y-2\">\n <Label>Description (optional)</Label>\n <Input\n placeholder=\"Short description of what this resource does\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n />\n </div>\n <div className=\"space-y-2\">\n <Label>Content</Label>\n <Textarea\n placeholder={\n kind === \"skill\"\n ? \"---\\nname: my-skill\\ndescription: What this skill teaches\\n---\\n\\n# My Skill\\n\\n...\"\n : kind === \"agent\"\n ? \"---\\nname: Research Specialist\\ndescription: Handles research tasks\\n---\\n\\n# Instructions\\n\\n...\"\n : kind === \"knowledge\"\n ? \"# Core GTM Messaging\\n\\n## Positioning\\n\\n## ICP\\n\\n## Proof points\\n\\n## Source\\n\\n\"\n : kind === \"mcp-server\"\n ? '{\\n \"type\": \"http\",\\n \"url\": \"https://example.com/mcp\",\\n \"headers\": {\\n \"Authorization\": \"Bearer ${keys.MCP_SERVER_TOKEN}\"\\n },\\n \"description\": \"Shared MCP tools for workspace apps\"\\n}\\n'\n : \"# Instructions\\n\\nAlways-on guardrails for agents across apps...\"\n }\n value={content}\n onChange={(e) => setContent(e.target.value)}\n rows={12}\n className=\"font-mono text-sm\"\n />\n </div>\n <ImpactPreview\n operation=\"create\"\n path={path || defaultResourcePath(kind, name)}\n scope={scope as \"all\" | \"selected\"}\n enabled={open && Boolean(name.trim())}\n />\n </div>\n <DialogFooter>\n <Button\n onClick={() =>\n create.mutate({\n kind: kind as\n | \"skill\"\n | \"instruction\"\n | \"agent\"\n | \"knowledge\"\n | \"mcp-server\",\n name,\n description: description || undefined,\n path: path || defaultResourcePath(kind, name),\n content,\n scope: scope as \"all\" | \"selected\",\n })\n }\n disabled={!name || !content || create.isPending}\n >\n {create.isPending ? \"Creating...\" : \"Create resource\"}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction GrantDialog({\n resourceId,\n resourceName,\n}: {\n resourceId: string;\n resourceName: string;\n}) {\n const [open, setOpen] = useState(false);\n const [appId, setAppId] = useState(\"\");\n const { data: catalog } = useActionQuery(\"list-integrations-catalog\", {});\n\n const grant = useActionMutation(\"create-workspace-resource-grant\", {\n onSuccess: () => {\n toast.success(`Granted to ${appId}`);\n setOpen(false);\n setAppId(\"\");\n },\n onError: (err) => toast.error(String(err)),\n });\n\n const apps = (catalog || []).map((a: any) => ({\n id: a.appId,\n name: a.appName,\n }));\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogTrigger asChild>\n <Button variant=\"outline\" size=\"sm\">\n <IconPlus size={14} className=\"mr-1\" />\n Grant\n </Button>\n </DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Grant \"{resourceName}\" to an app</DialogTitle>\n <DialogDescription>\n Choose which app should receive this resource.\n </DialogDescription>\n </DialogHeader>\n <div className=\"py-2\">\n <Select value={appId} onValueChange={setAppId}>\n <SelectTrigger>\n <SelectValue placeholder=\"Select an app...\" />\n </SelectTrigger>\n <SelectContent>\n {apps.map((app: any) => (\n <SelectItem key={app.id} value={app.id}>\n {app.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <DialogFooter>\n <Button\n onClick={() => grant.mutate({ resourceId, appId })}\n disabled={!appId || grant.isPending}\n >\n {grant.isPending ? \"Granting...\" : \"Grant access\"}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction EffectiveContextPreview({ resource }: { resource: any }) {\n const [appId, setAppId] = useState(\"__any__\");\n const [userEmail, setUserEmail] = useState(\"\");\n const selectedAppId = appId === \"__any__\" ? undefined : appId;\n const normalizedUserEmail = userEmail.trim() || undefined;\n const { data: apps } = useActionQuery(\"list-workspace-apps\", {\n includeAgentCards: false,\n });\n const { data: context, isLoading } = useActionQuery(\n \"get-workspace-resource-effective-context\",\n {\n resourceId: resource.id,\n appId: selectedAppId,\n userEmail: normalizedUserEmail,\n },\n );\n\n const visibleApps = ((apps || []) as any[]).filter(\n (app) => !app.isDispatch && app.status !== \"pending\",\n );\n const layers = ((context as any)?.layers || []) as any[];\n const active = (context as any)?.effectiveResource;\n const availability = (context as any)?.availability;\n\n return (\n <div className=\"rounded-lg border bg-background p-3\">\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <h4 className=\"text-xs font-semibold uppercase text-muted-foreground\">\n Effective in app\n </h4>\n <p className=\"mt-1 text-xs leading-relaxed text-muted-foreground\">\n Preview the runtime stack for this path: workspace default,\n organization/app override, then personal override.\n </p>\n </div>\n <Badge variant=\"outline\">{availabilityLabel(availability)}</Badge>\n </div>\n\n <div className=\"mt-3 grid gap-3 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor={`resource-app-${resource.id}`}>App</Label>\n <Select value={appId} onValueChange={setAppId}>\n <SelectTrigger id={`resource-app-${resource.id}`}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"__any__\">Any app</SelectItem>\n {visibleApps.map((app) => (\n <SelectItem key={app.id} value={app.id}>\n {app.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor={`resource-user-${resource.id}`}>User email</Label>\n <Input\n id={`resource-user-${resource.id}`}\n value={userEmail}\n onChange={(event) => setUserEmail(event.target.value)}\n placeholder=\"Current Dispatch user\"\n />\n </div>\n </div>\n\n {resource.scope === \"selected\" ? (\n <div className=\"mt-3 rounded-md border border-amber-500/30 bg-amber-500/10 px-3 py-2 text-xs leading-relaxed text-amber-800 dark:text-amber-200\">\n Selected resources are app-specific exceptions. Use All apps for\n company-wide context that should be inherited everywhere without copy\n or sync.\n </div>\n ) : null}\n\n {isLoading ? (\n <div className=\"mt-3 grid gap-2 md:grid-cols-3\">\n {Array.from({ length: 3 }).map((_, index) => (\n <Skeleton key={index} className=\"h-28 rounded-lg\" />\n ))}\n </div>\n ) : (\n <div className=\"mt-3 grid gap-2 md:grid-cols-3\">\n {layers.map((layer) => {\n const state = layerState(layer);\n return (\n <div key={layer.scope} className=\"rounded-lg border p-3\">\n <div className=\"flex items-start justify-between gap-2\">\n <span className=\"text-sm font-medium text-foreground\">\n {layer.label}\n </span>\n <Badge variant=\"outline\" className={state.className}>\n {state.label}\n </Badge>\n </div>\n <div className=\"mt-2 truncate font-mono text-[11px] text-muted-foreground\">\n {layer.owner}\n </div>\n {layer.resource ? (\n <div className=\"mt-2 space-y-1 text-xs text-muted-foreground\">\n <div className=\"truncate font-mono\">\n {layer.resource.path}\n </div>\n <div>{formatTimestamp(layer.resource.updatedAt)}</div>\n </div>\n ) : (\n <p className=\"mt-2 text-xs text-muted-foreground\">\n No resource exists at this layer.\n </p>\n )}\n </div>\n );\n })}\n </div>\n )}\n\n <div className=\"mt-3 rounded-md bg-muted/40 px-3 py-2 text-xs text-muted-foreground\">\n {active ? (\n <>\n Active file:{\" \"}\n <span className=\"font-mono text-foreground\">\n {active.owner}/{active.path}\n </span>\n </>\n ) : (\n \"No active resource exists for this path yet.\"\n )}\n </div>\n </div>\n );\n}\n\nfunction ResourceRow({ resource, grants }: { resource: any; grants: any[] }) {\n const [expanded, setExpanded] = useState(false);\n\n const deleteResource = useActionMutation(\"delete-workspace-resource\", {\n onSuccess: (result: any) =>\n toast.success(\n workspaceResourceMutationMessage(result, \"Resource deleted\"),\n ),\n onError: (err) => toast.error(String(err)),\n });\n const revokeGrant = useActionMutation(\"revoke-workspace-resource-grant\", {\n onSuccess: () => toast.success(\"Grant revoked\"),\n onError: (err) => toast.error(String(err)),\n });\n\n const kindInfo = KIND_CONFIG[resource.kind as keyof typeof KIND_CONFIG];\n const KindIcon = kindInfo?.icon || IconCode;\n const activeGrants = grants.filter((g) => g.status === \"active\");\n\n return (\n <div className=\"rounded-lg bg-card\">\n <button\n type=\"button\"\n className=\"flex w-full items-center gap-3 px-4 py-3 text-left cursor-pointer\"\n onClick={() => setExpanded(!expanded)}\n >\n {expanded ? (\n <IconChevronDown size={16} className=\"text-muted-foreground\" />\n ) : (\n <IconChevronRight size={16} className=\"text-muted-foreground\" />\n )}\n <KindIcon size={16} className=\"text-muted-foreground\" />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium text-foreground\">\n {resource.name}\n </span>\n <Badge variant=\"secondary\" className=\"text-xs\">\n {kindInfo?.label || resource.kind}\n </Badge>\n <Badge\n variant=\"outline\"\n className={\n resource.scope === \"all\"\n ? \"text-xs bg-green-500/10 text-green-700 dark:text-green-400\"\n : \"text-xs\"\n }\n >\n {resource.scope === \"all\" ? \"All apps\" : \"Selected\"}\n </Badge>\n {isAutoLoadedInstruction(resource) && (\n <Badge variant=\"outline\" className=\"text-xs\">\n Auto-loaded\n </Badge>\n )}\n </div>\n <div className=\"mt-0.5 font-mono text-xs text-muted-foreground\">\n {resource.path}\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n {resource.scope === \"selected\" && (\n <Badge variant=\"outline\" className=\"text-xs\">\n {activeGrants.length} grant\n {activeGrants.length !== 1 ? \"s\" : \"\"}\n </Badge>\n )}\n </div>\n </button>\n\n {expanded && (\n <div className=\"border-t px-4 py-3 space-y-3\">\n {resource.description && (\n <p className=\"text-sm text-muted-foreground\">\n {resource.description}\n </p>\n )}\n\n <div className=\"rounded-lg border bg-muted/30 p-3\">\n <pre className=\"whitespace-pre-wrap text-xs font-mono text-foreground max-h-64 overflow-y-auto\">\n {resource.content}\n </pre>\n </div>\n\n <EffectiveContextPreview resource={resource} />\n\n {resource.scope === \"selected\" && (\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs font-medium text-foreground\">\n Grants\n </span>\n <GrantDialog\n resourceId={resource.id}\n resourceName={resource.name}\n />\n </div>\n {activeGrants.length > 0 ? (\n <div className=\"space-y-1.5\">\n {activeGrants.map((grant: any) => (\n <div\n key={grant.id}\n className=\"flex items-center justify-between rounded-lg border px-3 py-2\"\n >\n <div>\n <span className=\"text-sm font-medium text-foreground\">\n {grant.appId}\n </span>\n <span className=\"ml-2 text-xs text-muted-foreground\">\n selected grant\n </span>\n </div>\n <div className=\"flex gap-1.5\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() =>\n revokeGrant.mutate({ grantId: grant.id })\n }\n disabled={revokeGrant.isPending}\n >\n <IconX size={14} />\n </Button>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <div className=\"rounded-lg border border-dashed px-3 py-4 text-center text-xs text-muted-foreground\">\n No grants yet. Grant this resource to specific apps.\n </div>\n )}\n </div>\n )}\n\n <div className=\"flex justify-between border-t pt-3\">\n <div className=\"text-xs text-muted-foreground\">\n Created by {resource.createdBy} ·{\" \"}\n {new Date(resource.createdAt).toLocaleString()}\n </div>\n <div className=\"flex gap-2\">\n <EditResourceDialog resource={resource} />\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <Button\n variant=\"destructive\"\n size=\"sm\"\n disabled={deleteResource.isPending}\n >\n <IconTrash size={14} className=\"mr-1\" />\n Delete\n </Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Delete this resource?</AlertDialogTitle>\n <AlertDialogDescription>\n Removing \"{resource.name}\" revokes all of its grants and\n removes inherited workspace access immediately. This\n cannot be undone.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <ImpactPreview\n operation=\"delete\"\n resourceId={resource.id}\n enabled\n />\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction\n onClick={() => deleteResource.mutate({ id: resource.id })}\n >\n Delete resource\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nfunction GlobalContextSection({ resources }: { resources: any[] }) {\n const byPath = new Map(\n resources.map((resource) => [resource.path, resource]),\n );\n const missingPaths = STARTER_GLOBAL_CONTEXT.filter(\n (item) => !byPath.has(item.path),\n ).map((item) => item.path);\n const presentCount = STARTER_GLOBAL_CONTEXT.length - missingPaths.length;\n const restoreStarter = useActionMutation(\n \"restore-starter-workspace-resources\",\n {\n onSuccess: (result: any) => {\n const restored = result?.restored?.length ?? 0;\n const existing = result?.existing?.length ?? 0;\n toast.success(\n restored > 0\n ? `Restored ${restored} starter resource${restored === 1 ? \"\" : \"s\"}`\n : `Starter resources already present (${existing})`,\n );\n },\n onError: (err) => toast.error(String(err)),\n },\n );\n\n return (\n <section className=\"space-y-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <div>\n <h2 className=\"text-sm font-semibold text-foreground\">\n Global context\n </h2>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n Starter resources every workspace can use for company facts, brand,\n messaging, guardrails, and voice.\n </p>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n All-app resources live once at workspace scope and are inherited by\n every app agent at runtime.\n </p>\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n {missingPaths.length > 0 ? (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => restoreStarter.mutate({ paths: missingPaths })}\n disabled={restoreStarter.isPending}\n >\n <IconPlus size={14} className=\"mr-1.5\" />\n {restoreStarter.isPending ? \"Restoring...\" : \"Restore missing\"}\n </Button>\n ) : null}\n <Badge variant=\"outline\">\n {presentCount}/{STARTER_GLOBAL_CONTEXT.length} ready\n </Badge>\n </div>\n </div>\n <div className=\"grid gap-3 md:grid-cols-2 xl:grid-cols-5\">\n {STARTER_GLOBAL_CONTEXT.map((item) => {\n const resource = byPath.get(item.path);\n const exists = !!resource;\n const global = resource?.scope === \"all\";\n return (\n <div key={item.path} className=\"rounded-lg bg-card p-4\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2\">\n {exists ? (\n <IconCircleCheck\n size={15}\n className=\"shrink-0 text-green-600 dark:text-green-400\"\n />\n ) : (\n <IconAlertCircle\n size={15}\n className=\"shrink-0 text-amber-600 dark:text-amber-400\"\n />\n )}\n <h3 className=\"truncate text-sm font-medium text-foreground\">\n {item.label}\n </h3>\n </div>\n <p className=\"mt-1 line-clamp-2 text-xs text-muted-foreground\">\n {item.description}\n </p>\n </div>\n {resource ? (\n <EditResourceDialog\n resource={resource}\n trigger={\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 px-2\">\n <span className=\"sr-only\">Edit {item.label}</span>\n <IconEdit size={14} />\n </Button>\n }\n />\n ) : (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 px-2\"\n onClick={() =>\n restoreStarter.mutate({ paths: [item.path] })\n }\n disabled={restoreStarter.isPending}\n aria-label={`Restore ${item.label}`}\n >\n <IconPlus size={14} />\n </Button>\n )}\n </div>\n <div className=\"mt-3 space-y-2\">\n <div className=\"truncate font-mono text-[11px] text-muted-foreground\">\n {item.path}\n </div>\n <div className=\"flex flex-wrap gap-1.5\">\n <Badge variant={exists ? \"secondary\" : \"outline\"}>\n {exists ? \"Present\" : \"Missing\"}\n </Badge>\n {exists ? (\n <Badge variant=\"outline\">\n {global ? \"All apps\" : \"Selected\"}\n </Badge>\n ) : null}\n {resource && isAutoLoadedInstruction(resource) ? (\n <Badge variant=\"outline\">Auto-loaded</Badge>\n ) : null}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </section>\n );\n}\n\nexport default function WorkspaceRoute() {\n const resourcesQuery = useActionQuery(\"list-workspace-resources\", {});\n const grantsQuery = useActionQuery(\"list-workspace-resource-grants\", {});\n const { data: resources, isLoading } = resourcesQuery;\n const { data: grants } = grantsQuery;\n\n const grantsByResource = (grants || []).reduce(\n (acc: Record<string, any[]>, g: any) => {\n if (!acc[g.resourceId]) acc[g.resourceId] = [];\n acc[g.resourceId].push(g);\n return acc;\n },\n {} as Record<string, any[]>,\n );\n\n const skills = (resources || []).filter((r: any) => r.kind === \"skill\");\n const instructions = (resources || []).filter(\n (r: any) => r.kind === \"instruction\",\n );\n const agents = (resources || []).filter((r: any) => r.kind === \"agent\");\n const knowledge = (resources || []).filter(\n (r: any) => r.kind === \"knowledge\",\n );\n const mcpServers = (resources || []).filter(\n (r: any) => r.kind === \"mcp-server\",\n );\n\n function ResourceList({\n items,\n emptyText,\n }: {\n items: any[];\n emptyText: string;\n }) {\n if (isLoading && (resources ?? []).length === 0) {\n return (\n <div className=\"space-y-3\">\n {Array.from({ length: 3 }).map((_, index) => (\n <div key={index} className=\"rounded-lg bg-card px-5 py-4 space-y-2\">\n <Skeleton className=\"h-4 w-1/3\" />\n <Skeleton className=\"h-3 w-2/3\" />\n </div>\n ))}\n </div>\n );\n }\n if (items.length === 0) {\n return (\n <div className=\"rounded-lg border border-dashed px-6 py-12 text-center text-sm text-muted-foreground\">\n {emptyText}\n </div>\n );\n }\n return (\n <div className=\"space-y-3\">\n {items.map((resource: any) => (\n <ResourceRow\n key={resource.id}\n resource={resource}\n grants={grantsByResource[resource.id] || []}\n />\n ))}\n </div>\n );\n }\n\n return (\n <DispatchShell\n title=\"Agent Resources\"\n description=\"Manage inherited skills, guardrail instructions, agent profiles, reference resources, and MCP servers. All-app resources are available to every app without syncing.\"\n >\n {resourcesQuery.isError || grantsQuery.isError ? (\n <ActionQueryError\n error={resourcesQuery.error ?? grantsQuery.error}\n onRetry={() => {\n void resourcesQuery.refetch();\n void grantsQuery.refetch();\n }}\n />\n ) : null}\n <div className=\"flex items-center justify-between\">\n <div className=\"text-sm text-muted-foreground\">\n {isLoading ? (\n <Skeleton className=\"h-4 w-24\" />\n ) : (\n `${resources?.length || 0} resource${(resources?.length || 0) !== 1 ? \"s\" : \"\"}`\n )}\n </div>\n <div className=\"flex gap-2\">\n <AddResourceDialog />\n </div>\n </div>\n\n {!resourcesQuery.isError ? (\n <GlobalContextSection resources={resources || []} />\n ) : null}\n\n {!resourcesQuery.isError && !grantsQuery.isError ? (\n <Tabs defaultValue=\"skills\">\n <TabsList>\n <TabsTrigger value=\"skills\">\n Skills {skills.length > 0 && `(${skills.length})`}\n </TabsTrigger>\n <TabsTrigger value=\"instructions\">\n Instructions{\" \"}\n {instructions.length > 0 && `(${instructions.length})`}\n </TabsTrigger>\n <TabsTrigger value=\"agents\">\n Agents {agents.length > 0 && `(${agents.length})`}\n </TabsTrigger>\n <TabsTrigger value=\"knowledge\">\n Knowledge {knowledge.length > 0 && `(${knowledge.length})`}\n </TabsTrigger>\n <TabsTrigger value=\"mcp\">\n MCP {mcpServers.length > 0 && `(${mcpServers.length})`}\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"skills\" className=\"mt-4\">\n <ResourceList\n items={skills}\n emptyText=\"No skills yet. Add a skill to share agent guidance across apps.\"\n />\n </TabsContent>\n\n <TabsContent value=\"instructions\" className=\"mt-4\">\n <ResourceList\n items={instructions}\n emptyText=\"No instructions yet. Add instructions to set behavioral rules across apps.\"\n />\n </TabsContent>\n\n <TabsContent value=\"agents\" className=\"mt-4\">\n <ResourceList\n items={agents}\n emptyText=\"No agent profiles yet. Add a reusable profile to share specialist agents across apps.\"\n />\n </TabsContent>\n\n <TabsContent value=\"knowledge\" className=\"mt-4\">\n <ResourceList\n items={knowledge}\n emptyText=\"No knowledge packs yet. Add GTM, product, or domain context that apps can reuse.\"\n />\n </TabsContent>\n\n <TabsContent value=\"mcp\" className=\"mt-4\">\n <ResourceList\n items={mcpServers}\n emptyText=\"No MCP servers yet. Add an HTTP MCP server to share external tools across apps.\"\n />\n </TabsContent>\n </Tabs>\n ) : null}\n </DispatchShell>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../src/routes/pages/workspace.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n useActionMutation,\n useActionQuery,\n} from \"@agent-native/core/client/hooks\";\nimport {\n IconAlertCircle,\n IconBook,\n IconChevronDown,\n IconChevronRight,\n IconCircleCheck,\n IconCode,\n IconEdit,\n IconFileText,\n IconPlus,\n IconPlugConnected,\n IconTrash,\n IconUser,\n IconX,\n} from \"@tabler/icons-react\";\nimport { useEffect, useState, type ReactNode } from \"react\";\nimport { toast } from \"sonner\";\n\nimport { ActionQueryError } from \"../../components/action-query-error\";\nimport { DispatchShell } from \"../../components/dispatch-shell\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"../../components/ui/alert-dialog\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"../../components/ui/dialog\";\nimport { Input } from \"../../components/ui/input\";\nimport { Label } from \"../../components/ui/label\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../components/ui/select\";\nimport { Skeleton } from \"../../components/ui/skeleton\";\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"../../components/ui/tabs\";\nimport { Textarea } from \"../../components/ui/textarea\";\nimport {\n ImpactPreview,\n workspaceResourceMutationMessage,\n} from \"../../components/workspace-resource-impact-preview\";\n\nexport function meta() {\n return [{ title: \"Resources — Dispatch\" }];\n}\n\nconst KIND_CONFIG = {\n skill: {\n label: \"Skill\",\n icon: IconCode,\n pathPrefix: \"skills/\",\n description:\n \"Agent skills - on-demand guidance available across workspace apps\",\n },\n instruction: {\n label: \"Instruction\",\n icon: IconBook,\n pathPrefix: \"instructions/\",\n description: \"Global instructions - guardrails loaded by every app agent\",\n },\n agent: {\n label: \"Agent\",\n icon: IconUser,\n pathPrefix: \"agents/\",\n description:\n \"Reusable agent profiles - specialist agents shared across apps\",\n },\n knowledge: {\n label: \"Knowledge\",\n icon: IconFileText,\n pathPrefix: \"context/\",\n description:\n \"Reference resources - brand, positioning, persona, and domain context\",\n },\n \"mcp-server\": {\n label: \"MCP Server\",\n icon: IconPlugConnected,\n pathPrefix: \"mcp-servers/\",\n description:\n \"HTTP MCP servers - external tools centrally granted to app agents\",\n },\n} as const;\n\nconst STARTER_GLOBAL_CONTEXT = [\n {\n path: \"context/company.md\",\n label: \"Company\",\n kind: \"knowledge\",\n description: \"Company facts, ICP, products, and canonical links\",\n },\n {\n path: \"context/brand.md\",\n label: \"Brand\",\n kind: \"knowledge\",\n description: \"Voice, visual identity, naming, and style rules\",\n },\n {\n path: \"context/messaging.md\",\n label: \"Messaging\",\n kind: \"knowledge\",\n description: \"Positioning, value props, proof points, and objections\",\n },\n {\n path: \"instructions/guardrails.md\",\n label: \"Guardrails\",\n kind: \"instruction\",\n description: \"Always-on rules loaded by every app agent\",\n },\n {\n path: \"skills/company-voice/SKILL.md\",\n label: \"Company Voice\",\n kind: \"skill\",\n description: \"On-demand guidance for customer-facing writing\",\n },\n] as const;\n\nfunction resourceSlug(value: string): string {\n return value\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\n\nfunction defaultResourcePath(kind: string, name: string): string {\n const slug = resourceSlug(name) || \"example\";\n if (kind === \"skill\") return `skills/${slug}/SKILL.md`;\n if (kind === \"instruction\") return `instructions/${slug}.md`;\n if (kind === \"agent\") return `agents/${slug}.md`;\n if (kind === \"knowledge\") return `context/${slug}.md`;\n if (kind === \"mcp-server\") return `mcp-servers/${slug}.json`;\n return `${slug}.md`;\n}\n\nfunction isAutoLoadedInstruction(resource: any): boolean {\n return (\n resource.kind === \"instruction\" &&\n (resource.path === \"AGENTS.md\" ||\n String(resource.path).startsWith(\"instructions/\"))\n );\n}\n\nfunction formatTimestamp(value?: number | null): string {\n if (!value) return \"Not present\";\n return new Date(value).toLocaleString();\n}\n\nfunction availabilityLabel(value?: string): string {\n switch (value) {\n case \"all-apps\":\n return \"Inherited by all apps\";\n case \"selected-granted\":\n return \"Granted to selected app\";\n case \"selected-not-granted\":\n return \"Not granted to this app\";\n case \"selected-no-app\":\n return \"Select an app to check grant\";\n case \"path-not-managed\":\n return \"Path is not a Dispatch resource\";\n default:\n return \"Checking availability\";\n }\n}\n\nfunction layerState(layer: any): {\n label: string;\n className: string;\n} {\n if (layer.effective) {\n return {\n label: \"Active\",\n className: \"border-green-500/30 bg-green-500/10 text-green-700\",\n };\n }\n if (layer.overridden) {\n return {\n label: \"Overridden\",\n className: \"border-amber-500/30 bg-amber-500/10 text-amber-700\",\n };\n }\n return {\n label: \"Missing\",\n className: \"text-muted-foreground\",\n };\n}\n\nfunction EditResourceDialog({\n resource,\n trigger,\n}: {\n resource: any;\n trigger?: ReactNode;\n}) {\n const [open, setOpen] = useState(false);\n const [name, setName] = useState(resource.name || \"\");\n const [description, setDescription] = useState(resource.description || \"\");\n const [content, setContent] = useState(resource.content || \"\");\n const [scope, setScope] = useState(resource.scope || \"all\");\n\n useEffect(() => {\n if (!open) return;\n setName(resource.name || \"\");\n setDescription(resource.description || \"\");\n setContent(resource.content || \"\");\n setScope(resource.scope || \"all\");\n }, [open, resource]);\n\n const update = useActionMutation(\"update-workspace-resource\", {\n onSuccess: (result: any) => {\n toast.success(\n workspaceResourceMutationMessage(result, \"Resource updated\"),\n );\n setOpen(false);\n },\n onError: (err) => toast.error(String(err)),\n });\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogTrigger asChild>\n {trigger || (\n <Button variant=\"outline\" size=\"sm\">\n <IconEdit size={14} className=\"mr-1.5\" />\n Edit\n </Button>\n )}\n </DialogTrigger>\n <DialogContent className=\"max-w-2xl\">\n <DialogHeader>\n <DialogTitle>Edit agent resource</DialogTitle>\n <DialogDescription>\n Updates apply immediately anywhere this agent resource is inherited.\n App shared or personal resources can override it locally.\n </DialogDescription>\n </DialogHeader>\n <div className=\"space-y-4 py-2\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <Label>Name</Label>\n <Input value={name} onChange={(e) => setName(e.target.value)} />\n </div>\n <div className=\"space-y-2\">\n <Label>Scope</Label>\n <Select value={scope} onValueChange={setScope}>\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">All apps</SelectItem>\n <SelectItem value=\"selected\">Selected apps only</SelectItem>\n </SelectContent>\n </Select>\n </div>\n </div>\n <div className=\"space-y-2\">\n <Label>Path</Label>\n <Input\n value={resource.path}\n disabled\n className=\"font-mono text-sm\"\n />\n </div>\n <div className=\"space-y-2\">\n <Label>Description</Label>\n <Input\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n />\n </div>\n <div className=\"space-y-2\">\n <Label>Content</Label>\n <Textarea\n value={content}\n onChange={(e) => setContent(e.target.value)}\n rows={14}\n className=\"font-mono text-sm\"\n />\n </div>\n <ImpactPreview\n operation=\"update\"\n resourceId={resource.id}\n scope={scope as \"all\" | \"selected\"}\n enabled={open}\n />\n </div>\n <DialogFooter>\n <Button\n onClick={() =>\n update.mutate({\n id: resource.id,\n name,\n description,\n content,\n scope: scope as \"all\" | \"selected\",\n })\n }\n disabled={!name.trim() || update.isPending}\n >\n {update.isPending ? \"Saving...\" : \"Save changes\"}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction AddResourceDialog() {\n const [open, setOpen] = useState(false);\n const [kind, setKind] = useState<string>(\"skill\");\n const [name, setName] = useState(\"\");\n const [description, setDescription] = useState(\"\");\n const [path, setPath] = useState(\"\");\n const [content, setContent] = useState(\"\");\n const [scope, setScope] = useState<string>(\"all\");\n\n const create = useActionMutation(\"create-workspace-resource\", {\n onSuccess: (result: any) => {\n toast.success(\n workspaceResourceMutationMessage(result, \"Resource created\"),\n );\n setOpen(false);\n setKind(\"skill\");\n setName(\"\");\n setDescription(\"\");\n setPath(\"\");\n setContent(\"\");\n setScope(\"all\");\n },\n onError: (err) => toast.error(String(err)),\n });\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogTrigger asChild>\n <Button>\n <IconPlus size={16} className=\"mr-1.5\" />\n Add resource\n </Button>\n </DialogTrigger>\n <DialogContent className=\"max-w-2xl\">\n <DialogHeader>\n <DialogTitle>Add agent resource</DialogTitle>\n <DialogDescription>\n Create an agent resource—a skill, instruction, agent profile,\n reference resource, or MCP server—that can be shared across\n workspace apps.\n </DialogDescription>\n </DialogHeader>\n <div className=\"space-y-4 py-2\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <Label>Kind</Label>\n <Select value={kind} onValueChange={setKind}>\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"skill\">Skill</SelectItem>\n <SelectItem value=\"instruction\">Instruction</SelectItem>\n <SelectItem value=\"agent\">Agent</SelectItem>\n <SelectItem value=\"knowledge\">Knowledge pack</SelectItem>\n <SelectItem value=\"mcp-server\">MCP server</SelectItem>\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-2\">\n <Label>Scope</Label>\n <Select value={scope} onValueChange={setScope}>\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">All apps</SelectItem>\n <SelectItem value=\"selected\">Selected apps only</SelectItem>\n </SelectContent>\n </Select>\n </div>\n </div>\n <div className=\"space-y-2\">\n <Label>Name</Label>\n <Input\n placeholder={\n kind === \"skill\"\n ? \"Frontend Designer\"\n : kind === \"agent\"\n ? \"Research Specialist\"\n : kind === \"knowledge\"\n ? \"Core GTM Messaging\"\n : kind === \"mcp-server\"\n ? \"Zapier MCP\"\n : \"Code Style Guide\"\n }\n value={name}\n onChange={(e) => setName(e.target.value)}\n />\n </div>\n <div className=\"space-y-2\">\n <Label>Path</Label>\n <Input\n placeholder={defaultResourcePath(kind, name)}\n value={path}\n onChange={(e) => setPath(e.target.value)}\n className=\"font-mono text-sm\"\n />\n <p className=\"text-xs text-muted-foreground\">\n Skills use skills/name/SKILL.md. Guardrails in AGENTS.md or\n instructions/ auto-load in app chat. Reference resources in\n context/ are indexed so agents can read them when relevant. MCP\n server resources use mcp-servers/name.json and are loaded as HTTP\n MCP tools.\n </p>\n </div>\n <div className=\"space-y-2\">\n <Label>Description (optional)</Label>\n <Input\n placeholder=\"Short description of what this resource does\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n />\n </div>\n <div className=\"space-y-2\">\n <Label>Content</Label>\n <Textarea\n placeholder={\n kind === \"skill\"\n ? \"---\\nname: my-skill\\ndescription: What this skill teaches\\n---\\n\\n# My Skill\\n\\n...\"\n : kind === \"agent\"\n ? \"---\\nname: Research Specialist\\ndescription: Handles research tasks\\n---\\n\\n# Instructions\\n\\n...\"\n : kind === \"knowledge\"\n ? \"# Core GTM Messaging\\n\\n## Positioning\\n\\n## ICP\\n\\n## Proof points\\n\\n## Source\\n\\n\"\n : kind === \"mcp-server\"\n ? '{\\n \"type\": \"http\",\\n \"url\": \"https://example.com/mcp\",\\n \"headers\": {\\n \"Authorization\": \"Bearer ${keys.MCP_SERVER_TOKEN}\"\\n },\\n \"description\": \"Shared MCP tools for workspace apps\"\\n}\\n'\n : \"# Instructions\\n\\nAlways-on guardrails for agents across apps...\"\n }\n value={content}\n onChange={(e) => setContent(e.target.value)}\n rows={12}\n className=\"font-mono text-sm\"\n />\n </div>\n <ImpactPreview\n operation=\"create\"\n path={path || defaultResourcePath(kind, name)}\n scope={scope as \"all\" | \"selected\"}\n enabled={open && Boolean(name.trim())}\n />\n </div>\n <DialogFooter>\n <Button\n onClick={() =>\n create.mutate({\n kind: kind as\n | \"skill\"\n | \"instruction\"\n | \"agent\"\n | \"knowledge\"\n | \"mcp-server\",\n name,\n description: description || undefined,\n path: path || defaultResourcePath(kind, name),\n content,\n scope: scope as \"all\" | \"selected\",\n })\n }\n disabled={!name || !content || create.isPending}\n >\n {create.isPending ? \"Creating...\" : \"Create resource\"}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction GrantDialog({\n resourceId,\n resourceName,\n}: {\n resourceId: string;\n resourceName: string;\n}) {\n const [open, setOpen] = useState(false);\n const [appId, setAppId] = useState(\"\");\n const { data: catalog } = useActionQuery(\"list-integrations-catalog\", {});\n\n const grant = useActionMutation(\"create-workspace-resource-grant\", {\n onSuccess: () => {\n toast.success(`Granted to ${appId}`);\n setOpen(false);\n setAppId(\"\");\n },\n onError: (err) => toast.error(String(err)),\n });\n\n const apps = (catalog || []).map((a: any) => ({\n id: a.appId,\n name: a.appName,\n }));\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogTrigger asChild>\n <Button variant=\"outline\" size=\"sm\">\n <IconPlus size={14} className=\"mr-1\" />\n Grant\n </Button>\n </DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Grant \"{resourceName}\" to an app</DialogTitle>\n <DialogDescription>\n Choose which app should receive this resource.\n </DialogDescription>\n </DialogHeader>\n <div className=\"py-2\">\n <Select value={appId} onValueChange={setAppId}>\n <SelectTrigger>\n <SelectValue placeholder=\"Select an app...\" />\n </SelectTrigger>\n <SelectContent>\n {apps.map((app: any) => (\n <SelectItem key={app.id} value={app.id}>\n {app.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <DialogFooter>\n <Button\n onClick={() => grant.mutate({ resourceId, appId })}\n disabled={!appId || grant.isPending}\n >\n {grant.isPending ? \"Granting...\" : \"Grant access\"}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction EffectiveContextPreview({ resource }: { resource: any }) {\n const [appId, setAppId] = useState(\"__any__\");\n const [userEmail, setUserEmail] = useState(\"\");\n const selectedAppId = appId === \"__any__\" ? undefined : appId;\n const normalizedUserEmail = userEmail.trim() || undefined;\n const { data: apps } = useActionQuery(\"list-workspace-apps\", {\n includeAgentCards: false,\n });\n const { data: context, isLoading } = useActionQuery(\n \"get-workspace-resource-effective-context\",\n {\n resourceId: resource.id,\n appId: selectedAppId,\n userEmail: normalizedUserEmail,\n },\n );\n\n const visibleApps = ((apps || []) as any[]).filter(\n (app) => !app.isDispatch && app.status !== \"pending\",\n );\n const layers = ((context as any)?.layers || []) as any[];\n const active = (context as any)?.effectiveResource;\n const availability = (context as any)?.availability;\n\n return (\n <div className=\"rounded-lg border bg-background p-3\">\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <h4 className=\"text-xs font-semibold uppercase text-muted-foreground\">\n Effective in app\n </h4>\n <p className=\"mt-1 text-xs leading-relaxed text-muted-foreground\">\n Preview the runtime stack for this path: workspace default,\n organization/app override, then personal override.\n </p>\n </div>\n {isLoading ? (\n <Skeleton className=\"h-6 w-24 rounded-full\" />\n ) : (\n <Badge variant=\"outline\">{availabilityLabel(availability)}</Badge>\n )}\n </div>\n\n <div className=\"mt-3 grid gap-3 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor={`resource-app-${resource.id}`}>App</Label>\n <Select value={appId} onValueChange={setAppId}>\n <SelectTrigger id={`resource-app-${resource.id}`}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"__any__\">Any app</SelectItem>\n {visibleApps.map((app) => (\n <SelectItem key={app.id} value={app.id}>\n {app.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor={`resource-user-${resource.id}`}>User email</Label>\n <Input\n id={`resource-user-${resource.id}`}\n value={userEmail}\n onChange={(event) => setUserEmail(event.target.value)}\n placeholder=\"Current Dispatch user\"\n />\n </div>\n </div>\n\n {resource.scope === \"selected\" ? (\n <div className=\"mt-3 rounded-md border border-amber-500/30 bg-amber-500/10 px-3 py-2 text-xs leading-relaxed text-amber-800 dark:text-amber-200\">\n Selected resources are app-specific exceptions. Use All apps for\n company-wide context that should be inherited everywhere without copy\n or sync.\n </div>\n ) : null}\n\n {isLoading ? (\n <div className=\"mt-3 grid gap-2 md:grid-cols-3\">\n {Array.from({ length: 3 }).map((_, index) => (\n <Skeleton key={index} className=\"h-28 rounded-lg\" />\n ))}\n </div>\n ) : (\n <div className=\"mt-3 grid gap-2 md:grid-cols-3\">\n {layers.map((layer) => {\n const state = layerState(layer);\n return (\n <div key={layer.scope} className=\"rounded-lg border p-3\">\n <div className=\"flex items-start justify-between gap-2\">\n <span className=\"text-sm font-medium text-foreground\">\n {layer.label}\n </span>\n <Badge variant=\"outline\" className={state.className}>\n {state.label}\n </Badge>\n </div>\n <div className=\"mt-2 truncate font-mono text-[11px] text-muted-foreground\">\n {layer.owner}\n </div>\n {layer.resource ? (\n <div className=\"mt-2 space-y-1 text-xs text-muted-foreground\">\n <div className=\"truncate font-mono\">\n {layer.resource.path}\n </div>\n <div>{formatTimestamp(layer.resource.updatedAt)}</div>\n </div>\n ) : (\n <p className=\"mt-2 text-xs text-muted-foreground\">\n No resource exists at this layer.\n </p>\n )}\n </div>\n );\n })}\n </div>\n )}\n\n <div className=\"mt-3 rounded-md bg-muted/40 px-3 py-2 text-xs text-muted-foreground\">\n {active ? (\n <>\n Active file:{\" \"}\n <span className=\"font-mono text-foreground\">\n {active.owner}/{active.path}\n </span>\n </>\n ) : (\n \"No active resource exists for this path yet.\"\n )}\n </div>\n </div>\n );\n}\n\nfunction ResourceRow({ resource, grants }: { resource: any; grants: any[] }) {\n const [expanded, setExpanded] = useState(false);\n\n const deleteResource = useActionMutation(\"delete-workspace-resource\", {\n onSuccess: (result: any) =>\n toast.success(\n workspaceResourceMutationMessage(result, \"Resource deleted\"),\n ),\n onError: (err) => toast.error(String(err)),\n });\n const revokeGrant = useActionMutation(\"revoke-workspace-resource-grant\", {\n onSuccess: () => toast.success(\"Grant revoked\"),\n onError: (err) => toast.error(String(err)),\n });\n\n const kindInfo = KIND_CONFIG[resource.kind as keyof typeof KIND_CONFIG];\n const KindIcon = kindInfo?.icon || IconCode;\n const activeGrants = grants.filter((g) => g.status === \"active\");\n\n return (\n <div className=\"rounded-lg bg-card\">\n <button\n type=\"button\"\n className=\"flex w-full items-center gap-3 px-4 py-3 text-left cursor-pointer\"\n onClick={() => setExpanded(!expanded)}\n >\n {expanded ? (\n <IconChevronDown size={16} className=\"text-muted-foreground\" />\n ) : (\n <IconChevronRight size={16} className=\"text-muted-foreground\" />\n )}\n <KindIcon size={16} className=\"text-muted-foreground\" />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium text-foreground\">\n {resource.name}\n </span>\n <Badge variant=\"secondary\" className=\"text-xs\">\n {kindInfo?.label || resource.kind}\n </Badge>\n <Badge\n variant=\"outline\"\n className={\n resource.scope === \"all\"\n ? \"text-xs bg-green-500/10 text-green-700 dark:text-green-400\"\n : \"text-xs\"\n }\n >\n {resource.scope === \"all\" ? \"All apps\" : \"Selected\"}\n </Badge>\n {isAutoLoadedInstruction(resource) && (\n <Badge variant=\"outline\" className=\"text-xs\">\n Auto-loaded\n </Badge>\n )}\n </div>\n <div className=\"mt-0.5 font-mono text-xs text-muted-foreground\">\n {resource.path}\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n {resource.scope === \"selected\" && (\n <Badge variant=\"outline\" className=\"text-xs\">\n {activeGrants.length} grant\n {activeGrants.length !== 1 ? \"s\" : \"\"}\n </Badge>\n )}\n </div>\n </button>\n\n {expanded && (\n <div className=\"border-t px-4 py-3 space-y-3\">\n {resource.description && (\n <p className=\"text-sm text-muted-foreground\">\n {resource.description}\n </p>\n )}\n\n <div className=\"rounded-lg border bg-muted/30 p-3\">\n <pre className=\"whitespace-pre-wrap text-xs font-mono text-foreground max-h-64 overflow-y-auto\">\n {resource.content}\n </pre>\n </div>\n\n <EffectiveContextPreview resource={resource} />\n\n {resource.scope === \"selected\" && (\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs font-medium text-foreground\">\n Grants\n </span>\n <GrantDialog\n resourceId={resource.id}\n resourceName={resource.name}\n />\n </div>\n {activeGrants.length > 0 ? (\n <div className=\"space-y-1.5\">\n {activeGrants.map((grant: any) => (\n <div\n key={grant.id}\n className=\"flex items-center justify-between rounded-lg border px-3 py-2\"\n >\n <div>\n <span className=\"text-sm font-medium text-foreground\">\n {grant.appId}\n </span>\n <span className=\"ml-2 text-xs text-muted-foreground\">\n selected grant\n </span>\n </div>\n <div className=\"flex gap-1.5\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() =>\n revokeGrant.mutate({ grantId: grant.id })\n }\n disabled={revokeGrant.isPending}\n >\n <IconX size={14} />\n </Button>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <div className=\"rounded-lg border border-dashed px-3 py-4 text-center text-xs text-muted-foreground\">\n No grants yet. Grant this resource to specific apps.\n </div>\n )}\n </div>\n )}\n\n <div className=\"flex justify-between border-t pt-3\">\n <div className=\"text-xs text-muted-foreground\">\n Created by {resource.createdBy} ·{\" \"}\n {new Date(resource.createdAt).toLocaleString()}\n </div>\n <div className=\"flex gap-2\">\n <EditResourceDialog resource={resource} />\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <Button\n variant=\"destructive\"\n size=\"sm\"\n disabled={deleteResource.isPending}\n >\n <IconTrash size={14} className=\"mr-1\" />\n Delete\n </Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Delete this resource?</AlertDialogTitle>\n <AlertDialogDescription>\n Removing \"{resource.name}\" revokes all of its grants and\n removes inherited workspace access immediately. This\n cannot be undone.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <ImpactPreview\n operation=\"delete\"\n resourceId={resource.id}\n enabled\n />\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction\n onClick={() => deleteResource.mutate({ id: resource.id })}\n >\n Delete resource\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nfunction GlobalContextSection({\n resources,\n isLoading,\n}: {\n resources: any[];\n isLoading: boolean;\n}) {\n const restoreStarter = useActionMutation(\n \"restore-starter-workspace-resources\",\n {\n onSuccess: (result: any) => {\n const restored = result?.restored?.length ?? 0;\n const existing = result?.existing?.length ?? 0;\n toast.success(\n restored > 0\n ? `Restored ${restored} starter resource${restored === 1 ? \"\" : \"s\"}`\n : `Starter resources already present (${existing})`,\n );\n },\n onError: (err) => toast.error(String(err)),\n },\n );\n\n if (isLoading && resources.length === 0) {\n return (\n <section className=\"space-y-3\">\n <div>\n <Skeleton className=\"h-4 w-28\" />\n <Skeleton className=\"mt-2 h-3 w-full max-w-xl\" />\n <Skeleton className=\"mt-1.5 h-3 w-2/3 max-w-lg\" />\n </div>\n <div className=\"overflow-hidden rounded-lg bg-card\">\n {Array.from({ length: STARTER_GLOBAL_CONTEXT.length }).map(\n (_, index) => (\n <div\n key={index}\n className=\"flex items-center gap-3 border-t px-4 py-3 first:border-t-0\"\n >\n <Skeleton className=\"size-4 rounded-full\" />\n <div className=\"min-w-0 flex-1 space-y-1.5\">\n <Skeleton className=\"h-4 w-28\" />\n <Skeleton className=\"h-3 w-64 max-w-full\" />\n <Skeleton className=\"h-3 w-40 max-w-full\" />\n </div>\n <Skeleton className=\"h-6 w-16 rounded-full\" />\n </div>\n ),\n )}\n </div>\n </section>\n );\n }\n\n const byPath = new Map(\n resources.map((resource) => [resource.path, resource]),\n );\n const missingPaths = STARTER_GLOBAL_CONTEXT.filter(\n (item) => !byPath.has(item.path),\n ).map((item) => item.path);\n const presentCount = STARTER_GLOBAL_CONTEXT.length - missingPaths.length;\n\n return (\n <section className=\"space-y-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <div>\n <h2 className=\"text-sm font-semibold text-foreground\">\n Global context\n </h2>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n Starter resources every workspace can use for company facts, brand,\n messaging, guardrails, and voice.\n </p>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n All-app resources live once at workspace scope and are inherited by\n every app agent at runtime.\n </p>\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n {missingPaths.length > 0 ? (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => restoreStarter.mutate({ paths: missingPaths })}\n disabled={restoreStarter.isPending}\n >\n <IconPlus size={14} className=\"mr-1.5\" />\n {restoreStarter.isPending ? \"Restoring...\" : \"Restore missing\"}\n </Button>\n ) : null}\n <Badge variant=\"outline\">\n {presentCount}/{STARTER_GLOBAL_CONTEXT.length} ready\n </Badge>\n </div>\n </div>\n <div className=\"overflow-hidden rounded-lg bg-card\">\n {STARTER_GLOBAL_CONTEXT.map((item) => {\n const resource = byPath.get(item.path);\n const exists = !!resource;\n const global = resource?.scope === \"all\";\n return (\n <div\n key={item.path}\n className=\"flex flex-wrap items-center gap-3 border-t px-4 py-3 first:border-t-0\"\n >\n {exists ? (\n <IconCircleCheck size={16} className=\"shrink-0 text-primary\" />\n ) : (\n <IconAlertCircle\n size={16}\n className=\"shrink-0 text-amber-600 dark:text-amber-400\"\n />\n )}\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate text-sm font-medium text-foreground\">\n {item.label}\n </div>\n <div className=\"mt-0.5 truncate text-xs text-muted-foreground\">\n {item.description}\n </div>\n <div className=\"mt-1 truncate font-mono text-[11px] text-muted-foreground/80\">\n {item.path}\n </div>\n </div>\n <div className=\"flex items-center gap-1.5\">\n {exists ? (\n <Badge variant=\"outline\">\n {global ? \"All apps\" : \"Selected\"}\n </Badge>\n ) : null}\n {resource && isAutoLoadedInstruction(resource) ? (\n <Badge variant=\"outline\">Auto-loaded</Badge>\n ) : null}\n {resource ? (\n <EditResourceDialog\n resource={resource}\n trigger={\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 px-2\">\n <span className=\"sr-only\">Edit {item.label}</span>\n <IconEdit size={14} />\n </Button>\n }\n />\n ) : (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 px-2\"\n onClick={() =>\n restoreStarter.mutate({ paths: [item.path] })\n }\n disabled={restoreStarter.isPending}\n aria-label={`Restore ${item.label}`}\n >\n <IconPlus size={14} />\n </Button>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </section>\n );\n}\n\nexport default function WorkspaceRoute() {\n const resourcesQuery = useActionQuery(\"list-workspace-resources\", {});\n const grantsQuery = useActionQuery(\"list-workspace-resource-grants\", {});\n const { data: resources, isLoading } = resourcesQuery;\n const { data: grants } = grantsQuery;\n\n const grantsByResource = (grants || []).reduce(\n (acc: Record<string, any[]>, g: any) => {\n if (!acc[g.resourceId]) acc[g.resourceId] = [];\n acc[g.resourceId].push(g);\n return acc;\n },\n {} as Record<string, any[]>,\n );\n\n const skills = (resources || []).filter((r: any) => r.kind === \"skill\");\n const instructions = (resources || []).filter(\n (r: any) => r.kind === \"instruction\",\n );\n const agents = (resources || []).filter((r: any) => r.kind === \"agent\");\n const knowledge = (resources || []).filter(\n (r: any) => r.kind === \"knowledge\",\n );\n const mcpServers = (resources || []).filter(\n (r: any) => r.kind === \"mcp-server\",\n );\n\n function ResourceList({\n items,\n emptyText,\n }: {\n items: any[];\n emptyText: string;\n }) {\n if (isLoading && (resources ?? []).length === 0) {\n return (\n <div className=\"space-y-3\">\n {Array.from({ length: 3 }).map((_, index) => (\n <div key={index} className=\"rounded-lg bg-card px-5 py-4 space-y-2\">\n <Skeleton className=\"h-4 w-1/3\" />\n <Skeleton className=\"h-3 w-2/3\" />\n </div>\n ))}\n </div>\n );\n }\n if (items.length === 0) {\n return (\n <div className=\"rounded-lg border border-dashed px-6 py-12 text-center text-sm text-muted-foreground\">\n {emptyText}\n </div>\n );\n }\n return (\n <div className=\"space-y-3\">\n {items.map((resource: any) => (\n <ResourceRow\n key={resource.id}\n resource={resource}\n grants={grantsByResource[resource.id] || []}\n />\n ))}\n </div>\n );\n }\n\n return (\n <DispatchShell\n title=\"Resources\"\n description=\"Manage inherited skills, guardrail instructions, agent profiles, reference resources, and MCP servers. All-app resources are available to every app without syncing.\"\n >\n {resourcesQuery.isError || grantsQuery.isError ? (\n <ActionQueryError\n error={resourcesQuery.error ?? grantsQuery.error}\n onRetry={() => {\n void resourcesQuery.refetch();\n void grantsQuery.refetch();\n }}\n />\n ) : null}\n <div className=\"flex items-center justify-between\">\n <div className=\"text-sm text-muted-foreground\">\n {isLoading ? (\n <Skeleton className=\"h-4 w-24\" />\n ) : (\n `${resources?.length || 0} resource${(resources?.length || 0) !== 1 ? \"s\" : \"\"}`\n )}\n </div>\n <div className=\"flex gap-2\">\n <AddResourceDialog />\n </div>\n </div>\n\n {!resourcesQuery.isError && !grantsQuery.isError ? (\n <Tabs defaultValue=\"skills\">\n <TabsList>\n <TabsTrigger value=\"context\">Global context</TabsTrigger>\n <TabsTrigger value=\"skills\">\n Skills {skills.length > 0 && `(${skills.length})`}\n </TabsTrigger>\n <TabsTrigger value=\"instructions\">\n Instructions{\" \"}\n {instructions.length > 0 && `(${instructions.length})`}\n </TabsTrigger>\n <TabsTrigger value=\"agents\">\n Agents {agents.length > 0 && `(${agents.length})`}\n </TabsTrigger>\n <TabsTrigger value=\"knowledge\">\n Knowledge {knowledge.length > 0 && `(${knowledge.length})`}\n </TabsTrigger>\n <TabsTrigger value=\"mcp\">\n MCP {mcpServers.length > 0 && `(${mcpServers.length})`}\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"context\" className=\"mt-4\">\n <GlobalContextSection\n resources={resources || []}\n isLoading={isLoading}\n />\n </TabsContent>\n\n <TabsContent value=\"skills\" className=\"mt-4\">\n <ResourceList\n items={skills}\n emptyText=\"No skills yet. Add a skill to share agent guidance across apps.\"\n />\n </TabsContent>\n\n <TabsContent value=\"instructions\" className=\"mt-4\">\n <ResourceList\n items={instructions}\n emptyText=\"No instructions yet. Add instructions to set behavioral rules across apps.\"\n />\n </TabsContent>\n\n <TabsContent value=\"agents\" className=\"mt-4\">\n <ResourceList\n items={agents}\n emptyText=\"No agent profiles yet. Add a reusable profile to share specialist agents across apps.\"\n />\n </TabsContent>\n\n <TabsContent value=\"knowledge\" className=\"mt-4\">\n <ResourceList\n items={knowledge}\n emptyText=\"No knowledge packs yet. Add GTM, product, or domain context that apps can reuse.\"\n />\n </TabsContent>\n\n <TabsContent value=\"mcp\" className=\"mt-4\">\n <ResourceList\n items={mcpServers}\n emptyText=\"No MCP servers yet. Add an HTTP MCP server to share external tools across apps.\"\n />\n </TabsContent>\n </Tabs>\n ) : null}\n </DispatchShell>\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAyBnD,wBAAgB,iBAAiB,IAAI,cAAc,CAElD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,aAAa,CAAC,MAAM,GAAE,cAAmB,GAAG,cAAc,CAKzE;AAED,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EACL,OAAO,IAAI,gBAAgB,EAC3B,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAE/E,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/server/index.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
import { defineAppRoles } from "@agent-native/core/org";
|
|
1
2
|
import { registerPackageActions, } from "@agent-native/core/server";
|
|
2
3
|
import { dispatchActions } from "../actions/index.js";
|
|
4
|
+
import { dispatchAccessDescriptor } from "../shared/app-roles.js";
|
|
5
|
+
defineAppRoles(dispatchAccessDescriptor);
|
|
3
6
|
/**
|
|
4
7
|
* Register dispatch's package-contributed actions on import. The framework's
|
|
5
8
|
* `autoDiscoverActions` merges these in after the consumer's local `actions/`
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,GAEvB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EACL,sBAAsB,GAEvB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAElE,cAAc,CAAC,wBAAwB,CAAC,CAAC;AAEzC;;;;;;;;;GASG;AACH,sBAAsB,CAAC,eAAe,CAAC,CAAC;AAExC;;;;;GAKG;AACH,IAAI,YAAY,GAAmB,EAAE,CAAC;AAEtC,MAAM,UAAU,iBAAiB;IAC/B,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,aAAa,CAAC,MAAM,GAAmB,EAAE;IACvD,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,QAAQ,EAAE,EAAE;QAClB,KAAK,QAAQ,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EACL,OAAO,IAAI,gBAAgB,EAC3B,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,0BAA0B,CAAC","sourcesContent":["import { defineAppRoles } from \"@agent-native/core/org\";\nimport {\n registerPackageActions,\n type NitroPluginDef,\n} from \"@agent-native/core/server\";\n\nimport { dispatchActions } from \"../actions/index.js\";\nimport type { DispatchConfig } from \"../config.js\";\nimport { dispatchAccessDescriptor } from \"../shared/app-roles.js\";\n\ndefineAppRoles(dispatchAccessDescriptor);\n\n/**\n * Register dispatch's package-contributed actions on import. The framework's\n * `autoDiscoverActions` merges these in after the consumer's local `actions/`\n * directory, so consumers can still override any single action by dropping\n * a same-named file in their own `actions/`.\n *\n * Side-effect import — placing it at module top means `import \"@agent-native/\n * dispatch/server\"` is enough to wire up actions, even before `setupDispatch`\n * is called.\n */\nregisterPackageActions(dispatchActions);\n\n/**\n * Internal config singleton — actions and plugins read from this so the\n * consumer's `setupDispatch(config)` call configures the whole package.\n *\n * Stored as a frozen snapshot to avoid accidental mid-request mutation.\n */\nlet activeConfig: DispatchConfig = {};\n\nexport function getDispatchConfig(): DispatchConfig {\n return activeConfig;\n}\n\n/**\n * Wire dispatch into a Nitro server. Returns a Nitro plugin that stamps the\n * active config so the named-export plugins below pick it up at request time.\n *\n * Typical consumer wiring (one config-stamp plugin + four re-exported\n * plugins, each in its own `server/plugins/<name>.ts` file so Nitro\n * auto-loads them):\n *\n * ```ts\n * // server/plugins/setup-dispatch.ts\n * import { setupDispatch } from \"@agent-native/dispatch/server\";\n * export default setupDispatch({ auth: { googleOnly: true } });\n *\n * // server/plugins/auth.ts\n * export { dispatchAuthPlugin as default } from \"@agent-native/dispatch/server\";\n *\n * // server/plugins/integrations.ts\n * export { dispatchIntegrationsPlugin as default } from \"@agent-native/dispatch/server\";\n *\n * // server/plugins/agent-chat.ts\n * export { dispatchAgentChatPlugin as default } from \"@agent-native/dispatch/server\";\n *\n * // server/plugins/db.ts\n * export { dispatchDbPlugin as default } from \"@agent-native/dispatch/server\";\n *\n * // server/plugins/core-routes.ts\n * export { dispatchCoreRoutesPlugin as default } from \"@agent-native/dispatch/server\";\n * ```\n *\n * The plugins read from the same `getDispatchConfig()` singleton this\n * function stamps, so plugin module-load order does not matter — they\n * resolve config when their plugin function runs, not at import time.\n */\nexport function setupDispatch(config: DispatchConfig = {}): NitroPluginDef {\n activeConfig = Object.freeze({ ...config });\n return (nitroApp) => {\n void nitroApp;\n };\n}\n\nexport { default as dispatchAuthPlugin } from \"./plugins/auth.js\";\nexport { default as dispatchIntegrationsPlugin } from \"./plugins/integrations.js\";\nexport { default as dispatchAgentChatPlugin } from \"./plugins/agent-chat.js\";\nexport {\n default as dispatchDbPlugin,\n runDispatchMigrations,\n} from \"./plugins/db.js\";\nexport { default as dispatchCoreRoutesPlugin } from \"./plugins/core-routes.js\";\n\nexport type { DispatchConfig } from \"../config.js\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-creation-store.d.ts","sourceRoot":"","sources":["../../../src/server/lib/app-creation-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app-creation-store.d.ts","sourceRoot":"","sources":["../../../src/server/lib/app-creation-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,7 @@ import fs from "node:fs";
|
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
import { getDbExec } from "@agent-native/core/db";
|
|
6
|
-
import {
|
|
7
|
-
import { ensureBuilderProject, getBuilderBranchProjectId, getRequestContext, isIntegrationCallerRequest, resolveBuilderBranchProjectId, resolveBuilderCredentialsDetailed, runBuilderAgent, } from "@agent-native/core/server";
|
|
6
|
+
import { ensureBuilderProject, getBuilderBranchProjectId, getRequestContext, isIntegrationCallerRequest, resolveBuilderCredentialsDetailed, runBuilderAgent, } from "@agent-native/core/server";
|
|
8
7
|
import { getSetting, putSetting } from "@agent-native/core/settings";
|
|
9
8
|
import { assertValidWorkspaceAppId } from "@agent-native/core/shared";
|
|
10
9
|
import { identityKeyForIncoming } from "./dispatch-integrations.js";
|
|
@@ -12,8 +11,6 @@ import { currentOrgId, currentOwnerEmail, recordAudit, resolveLinkedOwner, } fro
|
|
|
12
11
|
import { createRequest, listSecretOptions } from "./vault-store.js";
|
|
13
12
|
import { grantWorkspaceResourcesToApp, listWorkspaceResourceOptions, } from "./workspace-resources-store.js";
|
|
14
13
|
const SETTINGS_KEY = "dispatch-app-creation-settings";
|
|
15
|
-
const BUILDER_BRANCH_PROJECT_SECRET_KEY = "BUILDER_BRANCH_PROJECT_ID";
|
|
16
|
-
const BUILDER_BRANCH_PROJECT_SECRET_DESCRIPTION = "Builder project for cloud code-change branches (set in Dispatch)";
|
|
17
14
|
const BUILDER_WORKSPACE_REPO_URL_ENV = "AGENT_NATIVE_WORKSPACE_REPO_URL";
|
|
18
15
|
const DEFAULT_BUILDER_WORKSPACE_REPO_URL = "https://github.com/BuilderIO/builder-agent-native-workspace";
|
|
19
16
|
const DEFAULT_BUILDER_WORKSPACE_PROJECT_NAME = "Agent-Native Workspace";
|
|
@@ -33,6 +30,7 @@ const AUTONOMOUS_WORKSPACE_APP_CREATION_CONTRACT = [
|
|
|
33
30
|
"Autonomous Builder handoff contract:",
|
|
34
31
|
"- This is a background implementation run launched by the turn-into-app workflow. Treat the source brief and latest user request as authorization to build the app now; do not return a proposal or wait for another turn.",
|
|
35
32
|
"- Do not ask the user questions during the initial build and do not invoke a clarification, guided-question, or choice flow for a non-blocking decision.",
|
|
33
|
+
"- If the confirmed source brief describes a spreadsheet source-review or input/output confirmation surface, implement that review UI as part of the first-run app experience and seed it with the bounded candidates and mapping; keep the background build autonomous and do not send a question back from the Builder run.",
|
|
36
34
|
"- When the source or a tool presents a recommended option, choose it and continue. When no recommendation is present, choose the most direct, conservative default supported by the source and normal Agent-Native conventions.",
|
|
37
35
|
"- Resolve product, visual, copy, layout, route, data-model, dependency, and integration choices yourself. If an input is missing, use an empty state or clearly labeled representative sample so the workflow is demonstrable; never invent private facts or credentials.",
|
|
38
36
|
"- Treat the source brief's unknowns and follow-up items as assumptions to record in the app README or a visible Assumptions / Review section, not as questions to send back to the user.",
|
|
@@ -42,6 +40,7 @@ const AUTONOMOUS_WORKSPACE_APP_CREATION_CONTRACT = [
|
|
|
42
40
|
].join("\n");
|
|
43
41
|
const pendingBuilderProjectProvisioning = new Map();
|
|
44
42
|
class AppCreationSettingsAuthorizationError extends Error {
|
|
43
|
+
statusCode = 403;
|
|
45
44
|
constructor() {
|
|
46
45
|
super(APP_CREATION_SETTINGS_AUTHORIZATION_MESSAGE);
|
|
47
46
|
this.name = "AppCreationSettingsAuthorizationError";
|
|
@@ -109,13 +108,6 @@ function scopedSettingsKey() {
|
|
|
109
108
|
return `${SETTINGS_KEY}:org:${orgId}`;
|
|
110
109
|
return `${SETTINGS_KEY}:user:${currentOwnerEmail()}`;
|
|
111
110
|
}
|
|
112
|
-
function builderProjectSecretTarget() {
|
|
113
|
-
const orgId = currentOrgId();
|
|
114
|
-
if (orgId)
|
|
115
|
-
return { scope: "org", scopeId: orgId };
|
|
116
|
-
const email = currentOwnerEmail();
|
|
117
|
-
return email ? { scope: "workspace", scopeId: `solo:${email}` } : null;
|
|
118
|
-
}
|
|
119
111
|
function workspaceAppMetadataSettingsKey() {
|
|
120
112
|
const orgId = currentOrgId();
|
|
121
113
|
if (orgId)
|
|
@@ -1215,22 +1207,22 @@ function runScaffoldCli(input) {
|
|
|
1215
1207
|
}
|
|
1216
1208
|
export async function getAppCreationSettings() {
|
|
1217
1209
|
const envBuilderProjectId = getEnvBuilderProjectId();
|
|
1218
|
-
const resolvedBuilderProjectId = await resolveBuilderBranchProjectId();
|
|
1219
1210
|
const raw = await readSettingsRecord();
|
|
1211
|
+
const hasSavedBuilderProjectId = Object.prototype.hasOwnProperty.call(raw, "builderProjectId");
|
|
1220
1212
|
const savedBuilderProjectId = typeof raw?.builderProjectId === "string" && raw.builderProjectId.trim()
|
|
1221
1213
|
? raw.builderProjectId.trim()
|
|
1222
1214
|
: null;
|
|
1223
|
-
const builderProjectId = envBuilderProjectId || savedBuilderProjectId;
|
|
1224
1215
|
const enableBuilder = process.env.ENABLE_BUILDER === "true" || process.env.ENABLE_BUILDER === "1";
|
|
1225
|
-
const effectiveBuilderProjectId =
|
|
1226
|
-
|
|
1227
|
-
|
|
1216
|
+
const effectiveBuilderProjectId = hasSavedBuilderProjectId
|
|
1217
|
+
? savedBuilderProjectId
|
|
1218
|
+
: envBuilderProjectId ||
|
|
1219
|
+
(enableBuilder ? getBuilderBranchProjectId() : null);
|
|
1228
1220
|
return {
|
|
1229
1221
|
builderProjectId: effectiveBuilderProjectId,
|
|
1230
|
-
builderProjectIdSource:
|
|
1231
|
-
? "
|
|
1232
|
-
:
|
|
1233
|
-
? "
|
|
1222
|
+
builderProjectIdSource: hasSavedBuilderProjectId
|
|
1223
|
+
? "dispatch"
|
|
1224
|
+
: envBuilderProjectId
|
|
1225
|
+
? "env"
|
|
1234
1226
|
: effectiveBuilderProjectId
|
|
1235
1227
|
? "default"
|
|
1236
1228
|
: "unset",
|
|
@@ -1245,19 +1237,9 @@ function builderWorkspaceRepoUrl() {
|
|
|
1245
1237
|
}
|
|
1246
1238
|
async function persistProvisionedBuilderProjectId(builderProjectId) {
|
|
1247
1239
|
const raw = await readSettingsRecord();
|
|
1248
|
-
const secretTarget = builderProjectSecretTarget();
|
|
1249
1240
|
// This is an internal consequence of an authorized app-creation request,
|
|
1250
1241
|
// not a user-controlled settings update. Persist the project before the
|
|
1251
1242
|
// branch run so later members reuse the same Builder project.
|
|
1252
|
-
if (secretTarget) {
|
|
1253
|
-
await writeAppSecret({
|
|
1254
|
-
key: BUILDER_BRANCH_PROJECT_SECRET_KEY,
|
|
1255
|
-
scope: secretTarget.scope,
|
|
1256
|
-
scopeId: secretTarget.scopeId,
|
|
1257
|
-
value: builderProjectId,
|
|
1258
|
-
description: BUILDER_BRANCH_PROJECT_SECRET_DESCRIPTION,
|
|
1259
|
-
});
|
|
1260
|
-
}
|
|
1261
1243
|
await putSetting(scopedSettingsKey(), { ...raw, builderProjectId });
|
|
1262
1244
|
await recordAudit({
|
|
1263
1245
|
action: "settings.updated",
|
|
@@ -1302,28 +1284,6 @@ export async function setAppCreationSettings(input) {
|
|
|
1302
1284
|
await assertCanManageAppCreationSettings();
|
|
1303
1285
|
const builderProjectId = input.builderProjectId?.trim() || null;
|
|
1304
1286
|
const raw = await readSettingsRecord();
|
|
1305
|
-
// The credential store, not this settings row, is what
|
|
1306
|
-
// `resolveBuilderBranchProjectId()` reads. Write it first: a saved setting
|
|
1307
|
-
// whose secret never landed reports the project as configured while cloud
|
|
1308
|
-
// code changes stay silently disabled.
|
|
1309
|
-
const secretTarget = builderProjectSecretTarget();
|
|
1310
|
-
if (secretTarget) {
|
|
1311
|
-
const ref = {
|
|
1312
|
-
key: BUILDER_BRANCH_PROJECT_SECRET_KEY,
|
|
1313
|
-
scope: secretTarget.scope,
|
|
1314
|
-
scopeId: secretTarget.scopeId,
|
|
1315
|
-
};
|
|
1316
|
-
if (builderProjectId) {
|
|
1317
|
-
await writeAppSecret({
|
|
1318
|
-
...ref,
|
|
1319
|
-
value: builderProjectId,
|
|
1320
|
-
description: BUILDER_BRANCH_PROJECT_SECRET_DESCRIPTION,
|
|
1321
|
-
});
|
|
1322
|
-
}
|
|
1323
|
-
else {
|
|
1324
|
-
await deleteAppSecret(ref);
|
|
1325
|
-
}
|
|
1326
|
-
}
|
|
1327
1287
|
await putSetting(scopedSettingsKey(), { ...raw, builderProjectId });
|
|
1328
1288
|
await recordAudit({
|
|
1329
1289
|
action: "settings.updated",
|