@agent-native/dispatch 0.8.17 → 0.8.18
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/create-workspace-resource-grant.js +1 -1
- package/dist/actions/create-workspace-resource-grant.js.map +1 -1
- package/dist/actions/create-workspace-resource.js +5 -7
- package/dist/actions/create-workspace-resource.js.map +1 -1
- package/dist/actions/grant-workspace-resources-to-app.js +1 -1
- package/dist/actions/grant-workspace-resources-to-app.js.map +1 -1
- package/dist/actions/list-workspace-resource-grants.js +1 -1
- package/dist/actions/list-workspace-resource-grants.js.map +1 -1
- package/dist/actions/list-workspace-resource-options.js +1 -1
- package/dist/actions/list-workspace-resource-options.js.map +1 -1
- package/dist/actions/list-workspace-resources.js +2 -2
- package/dist/actions/list-workspace-resources.js.map +1 -1
- package/dist/components/create-app-popover.js.map +1 -1
- package/dist/db/schema.js +2 -2
- package/dist/db/schema.js.map +1 -1
- package/dist/routes/pages/workspace.d.ts.map +1 -1
- package/dist/routes/pages/workspace.js +18 -5
- package/dist/routes/pages/workspace.js.map +1 -1
- package/dist/server/lib/workspace-resources-store.d.ts +2 -1
- package/dist/server/lib/workspace-resources-store.d.ts.map +1 -1
- package/dist/server/lib/workspace-resources-store.js +7 -1
- package/dist/server/lib/workspace-resources-store.js.map +1 -1
- package/dist/server/plugins/integrations.js +2 -2
- package/dist/server/plugins/integrations.js.map +1 -1
- package/package.json +1 -1
- package/src/actions/create-workspace-resource-grant.ts +1 -1
- package/src/actions/create-workspace-resource.ts +7 -7
- package/src/actions/grant-workspace-resources-to-app.ts +1 -1
- package/src/actions/list-workspace-resource-grants.ts +1 -1
- package/src/actions/list-workspace-resource-options.ts +1 -1
- package/src/actions/list-workspace-resources.ts +2 -2
- package/src/components/create-app-popover.tsx +1 -1
- package/src/db/schema.ts +2 -2
- package/src/routes/pages/workspace.tsx +41 -7
- package/src/server/lib/workspace-resources-store.spec.ts +2 -0
- package/src/server/lib/workspace-resources-store.ts +13 -5
- package/src/server/plugins/integrations.ts +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../src/routes/pages/workspace.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useState, type ReactNode } from \"react\";\nimport { useActionMutation, useActionQuery } from \"@agent-native/core/client\";\nimport { toast } from \"sonner\";\nimport {\n IconAlertCircle,\n IconBook,\n IconChevronDown,\n IconChevronRight,\n IconCircleCheck,\n IconCode,\n IconEdit,\n IconFileText,\n IconPlus,\n IconTrash,\n IconUser,\n IconX,\n} from \"@tabler/icons-react\";\nimport { DispatchShell } from \"@/components/dispatch-shell\";\nimport {\n ImpactPreview,\n workspaceResourceMutationMessage,\n} from \"@/components/workspace-resource-impact-preview\";\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 { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\n\nexport function meta() {\n return [{ title: \"Workspace 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} 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 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 workspace resource</DialogTitle>\n <DialogDescription>\n Updates apply immediately anywhere this workspace resource is\n inherited. 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 workspace resource</DialogTitle>\n <DialogDescription>\n Create a skill, instruction, agent profile, or reference resource\n that can be shared across 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 </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 : \"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.\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 : \"# 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 \"skill\" | \"instruction\" | \"agent\" | \"knowledge\",\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 border 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 border 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 { data: resources, isLoading } = useActionQuery(\n \"list-workspace-resources\",\n {},\n );\n const { data: grants } = useActionQuery(\"list-workspace-resource-grants\", {});\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\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\n key={index}\n className=\"rounded-lg border bg-card px-5 py-4 space-y-2\"\n >\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=\"Workspace Resources\"\n description=\"Manage inherited workspace skills, guardrail instructions, agent profiles, and reference resources. All-app resources are available to every app without syncing.\"\n >\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 <GlobalContextSection resources={resources || []} />\n\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 {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 </TabsList>\n\n <TabsContent value=\"skills\" className=\"mt-4\">\n <ResourceList\n items={skills}\n emptyText=\"No workspace 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 workspace 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 workspace agents yet. Add a reusable agent 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 </Tabs>\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 { useEffect, useState, type ReactNode } from \"react\";\nimport { useActionMutation, useActionQuery } from \"@agent-native/core/client\";\nimport { toast } from \"sonner\";\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 { DispatchShell } from \"@/components/dispatch-shell\";\nimport {\n ImpactPreview,\n workspaceResourceMutationMessage,\n} from \"@/components/workspace-resource-impact-preview\";\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 { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\n\nexport function meta() {\n return [{ title: \"Workspace 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 workspace resource</DialogTitle>\n <DialogDescription>\n Updates apply immediately anywhere this workspace resource is\n inherited. 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 workspace resource</DialogTitle>\n <DialogDescription>\n Create a skill, instruction, agent profile, reference resource, or\n MCP server that can be shared across 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 border 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 border 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 { data: resources, isLoading } = useActionQuery(\n \"list-workspace-resources\",\n {},\n );\n const { data: grants } = useActionQuery(\"list-workspace-resource-grants\", {});\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\n key={index}\n className=\"rounded-lg border bg-card px-5 py-4 space-y-2\"\n >\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=\"Workspace Resources\"\n description=\"Manage inherited workspace skills, guardrail instructions, agent profiles, reference resources, and MCP servers. All-app resources are available to every app without syncing.\"\n >\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 <GlobalContextSection resources={resources || []} />\n\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 {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 workspace 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 workspace 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 workspace agents yet. Add a reusable agent 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 workspace MCP servers yet. Add an HTTP MCP server to share external tools across apps.\"\n />\n </TabsContent>\n </Tabs>\n </DispatchShell>\n );\n}\n"]}
|
|
@@ -10,7 +10,7 @@ export interface WorkspaceResourceCtx {
|
|
|
10
10
|
orgId: string | null;
|
|
11
11
|
}
|
|
12
12
|
export declare function requireWorkspaceResourceCtx(): WorkspaceResourceCtx;
|
|
13
|
-
export type WorkspaceResourceKind = "skill" | "instruction" | "agent" | "knowledge";
|
|
13
|
+
export type WorkspaceResourceKind = "skill" | "instruction" | "agent" | "knowledge" | "mcp-server";
|
|
14
14
|
export type WorkspaceResourceScope = "all" | "selected";
|
|
15
15
|
export interface WorkspaceResourceInput {
|
|
16
16
|
kind: WorkspaceResourceKind;
|
|
@@ -351,6 +351,7 @@ export declare function listWorkspaceResourcesOverview(): Promise<{
|
|
|
351
351
|
instructionCount: number;
|
|
352
352
|
agentCount: number;
|
|
353
353
|
knowledgeCount: number;
|
|
354
|
+
mcpServerCount: number;
|
|
354
355
|
totalResources: number;
|
|
355
356
|
activeGrantCount: number;
|
|
356
357
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-resources-store.d.ts","sourceRoot":"","sources":["../../../src/server/lib/workspace-resources-store.ts"],"names":[],"mappings":"AAGA,OAAO,EASL,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,YAAY,EAClB,MAAM,oCAAoC,CAAC;AAiB5C;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAgB,2BAA2B,IAAI,oBAAoB,CAGlE;AA0ID,MAAM,MAAM,qBAAqB,GAC7B,OAAO,GACP,aAAa,GACb,OAAO,GACP,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"workspace-resources-store.d.ts","sourceRoot":"","sources":["../../../src/server/lib/workspace-resources-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -677,7 +677,6 @@ export async function getWorkspaceResourceEffectiveContext(input) {
|
|
|
677
677
|
if (row?.scope === "all") {
|
|
678
678
|
await materializeGlobalResource(row);
|
|
679
679
|
}
|
|
680
|
-
const coreContext = await resourceEffectiveContext(userEmail, path);
|
|
681
680
|
const resource = row ? workspaceResourceOption(row) : null;
|
|
682
681
|
const activeGrant = resource?.scope === "selected" && appId
|
|
683
682
|
? (await listResourceGrants({ resourceId: resource.id, appId })).find((grant) => grant.status === "active")
|
|
@@ -687,6 +686,11 @@ export async function getWorkspaceResourceEffectiveContext(input) {
|
|
|
687
686
|
appId,
|
|
688
687
|
activeGrantId: activeGrant?.id ?? null,
|
|
689
688
|
});
|
|
689
|
+
const resolveEffectiveContext = resourceEffectiveContext;
|
|
690
|
+
const coreContext = await resolveEffectiveContext(userEmail, path, {
|
|
691
|
+
workspaceAppId: appId,
|
|
692
|
+
orgId: ctx.orgId,
|
|
693
|
+
});
|
|
690
694
|
return {
|
|
691
695
|
appId,
|
|
692
696
|
userEmail,
|
|
@@ -972,12 +976,14 @@ export async function listWorkspaceResourcesOverview() {
|
|
|
972
976
|
const instructions = resources.filter((r) => r.kind === "instruction");
|
|
973
977
|
const agents = resources.filter((r) => r.kind === "agent");
|
|
974
978
|
const knowledge = resources.filter((r) => r.kind === "knowledge");
|
|
979
|
+
const mcpServers = resources.filter((r) => r.kind === "mcp-server");
|
|
975
980
|
const activeGrants = grants.filter((g) => g.status === "active");
|
|
976
981
|
return {
|
|
977
982
|
skillCount: skills.length,
|
|
978
983
|
instructionCount: instructions.length,
|
|
979
984
|
agentCount: agents.length,
|
|
980
985
|
knowledgeCount: knowledge.length,
|
|
986
|
+
mcpServerCount: mcpServers.length,
|
|
981
987
|
totalResources: resources.length,
|
|
982
988
|
activeGrantCount: activeGrants.length,
|
|
983
989
|
};
|