@agent-native/dispatch 0.2.10 → 0.2.12
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.js +4 -4
- package/dist/actions/create-workspace-resource.js.map +1 -1
- package/dist/actions/grant-workspace-resources-to-app.d.ts +3 -0
- package/dist/actions/grant-workspace-resources-to-app.d.ts.map +1 -0
- package/dist/actions/grant-workspace-resources-to-app.js +15 -0
- package/dist/actions/grant-workspace-resources-to-app.js.map +1 -0
- package/dist/actions/index.d.ts.map +1 -1
- package/dist/actions/index.js +4 -0
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/list-workspace-resource-options.d.ts +3 -0
- package/dist/actions/list-workspace-resource-options.d.ts.map +1 -0
- package/dist/actions/list-workspace-resource-options.js +15 -0
- package/dist/actions/list-workspace-resource-options.js.map +1 -0
- package/dist/actions/list-workspace-resources.js +2 -2
- package/dist/actions/list-workspace-resources.js.map +1 -1
- package/dist/actions/start-workspace-app-creation.d.ts.map +1 -1
- package/dist/actions/start-workspace-app-creation.js +5 -0
- package/dist/actions/start-workspace-app-creation.js.map +1 -1
- package/dist/actions/view-screen.d.ts.map +1 -1
- package/dist/actions/view-screen.js +4 -0
- package/dist/actions/view-screen.js.map +1 -1
- package/dist/components/create-app-popover.d.ts +1 -1
- package/dist/components/create-app-popover.d.ts.map +1 -1
- package/dist/components/create-app-popover.js +63 -20
- 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/overview.d.ts.map +1 -1
- package/dist/routes/pages/overview.js +6 -6
- package/dist/routes/pages/overview.js.map +1 -1
- package/dist/routes/pages/workspace.d.ts.map +1 -1
- package/dist/routes/pages/workspace.js +17 -6
- package/dist/routes/pages/workspace.js.map +1 -1
- package/dist/server/lib/app-creation-store.d.ts +1 -0
- package/dist/server/lib/app-creation-store.d.ts.map +1 -1
- package/dist/server/lib/app-creation-store.js +33 -0
- package/dist/server/lib/app-creation-store.js.map +1 -1
- package/dist/server/lib/workspace-resources-store.d.ts +29 -1
- package/dist/server/lib/workspace-resources-store.d.ts.map +1 -1
- package/dist/server/lib/workspace-resources-store.js +46 -0
- package/dist/server/lib/workspace-resources-store.js.map +1 -1
- package/package.json +2 -3
- package/src/actions/create-workspace-resource.ts +4 -4
- package/src/actions/grant-workspace-resources-to-app.ts +16 -0
- package/src/actions/index.ts +4 -0
- package/src/actions/list-workspace-resource-options.ts +16 -0
- package/src/actions/list-workspace-resources.ts +2 -2
- package/src/actions/start-workspace-app-creation.ts +7 -0
- package/src/actions/view-screen.ts +4 -0
- package/src/components/create-app-popover.tsx +152 -21
- package/src/db/schema.ts +2 -2
- package/src/routes/pages/overview.tsx +21 -19
- package/src/routes/pages/workspace.tsx +31 -5
- package/src/server/lib/app-creation-store.ts +49 -0
- package/src/server/lib/workspace-resources-store.ts +75 -1
|
@@ -2,16 +2,16 @@ import { defineAction } from "@agent-native/core";
|
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { createWorkspaceResource } from "../server/lib/workspace-resources-store.js";
|
|
4
4
|
export default defineAction({
|
|
5
|
-
description: 'Create a workspace-wide skill, instruction, or
|
|
5
|
+
description: 'Create a workspace-wide skill, instruction, agent profile, or knowledge pack. Set scope to "all" to push to every app, or "selected" to grant per-app.',
|
|
6
6
|
schema: z.object({
|
|
7
7
|
kind: z
|
|
8
|
-
.enum(["skill", "instruction", "agent"])
|
|
9
|
-
.describe("Resource kind: skill, instruction, or
|
|
8
|
+
.enum(["skill", "instruction", "agent", "knowledge"])
|
|
9
|
+
.describe("Resource kind: skill, instruction, agent, or knowledge"),
|
|
10
10
|
name: z.string().describe("Human-readable name"),
|
|
11
11
|
description: z.string().optional().describe("Short description"),
|
|
12
12
|
path: z
|
|
13
13
|
.string()
|
|
14
|
-
.describe('Resource path, e.g. "skills/designer.md", "agents/researcher.md", or "remote-agents/researcher.json"'),
|
|
14
|
+
.describe('Resource path, e.g. "skills/designer.md", "agents/researcher.md", "context/gtm-messaging.md", or "remote-agents/researcher.json"'),
|
|
15
15
|
content: z
|
|
16
16
|
.string()
|
|
17
17
|
.describe("Full resource content (markdown or remote-agent JSON)"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-workspace-resource.js","sourceRoot":"","sources":["../../src/actions/create-workspace-resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AAErF,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"create-workspace-resource.js","sourceRoot":"","sources":["../../src/actions/create-workspace-resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AAErF,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,wJAAwJ;IAC1J,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,IAAI,EAAE,CAAC;aACJ,IAAI,CAAC,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;aACpD,QAAQ,CAAC,wDAAwD,CAAC;QACrE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAChD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAChE,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,QAAQ,CACP,kIAAkI,CACnI;QACH,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,QAAQ,CAAC,uDAAuD,CAAC;QACpE,KAAK,EAAE,CAAC;aACL,IAAI,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;aACzB,QAAQ,CACP,wEAAwE,CACzE;KACJ,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC;CACnD,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core\";\nimport { z } from \"zod\";\nimport { createWorkspaceResource } from \"../server/lib/workspace-resources-store.js\";\n\nexport default defineAction({\n description:\n 'Create a workspace-wide skill, instruction, agent profile, or knowledge pack. Set scope to \"all\" to push to every app, or \"selected\" to grant per-app.',\n schema: z.object({\n kind: z\n .enum([\"skill\", \"instruction\", \"agent\", \"knowledge\"])\n .describe(\"Resource kind: skill, instruction, agent, or knowledge\"),\n name: z.string().describe(\"Human-readable name\"),\n description: z.string().optional().describe(\"Short description\"),\n path: z\n .string()\n .describe(\n 'Resource path, e.g. \"skills/designer.md\", \"agents/researcher.md\", \"context/gtm-messaging.md\", or \"remote-agents/researcher.json\"',\n ),\n content: z\n .string()\n .describe(\"Full resource content (markdown or remote-agent JSON)\"),\n scope: z\n .enum([\"all\", \"selected\"])\n .describe(\n '\"all\" = push to every app, \"selected\" = only apps with explicit grants',\n ),\n }),\n run: async (args) => createWorkspaceResource(args),\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grant-workspace-resources-to-app.d.ts","sourceRoot":"","sources":["../../src/actions/grant-workspace-resources-to-app.ts"],"names":[],"mappings":";AAIA,wBAWG"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { defineAction } from "@agent-native/core";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { grantWorkspaceResourcesToApp } from "../server/lib/workspace-resources-store.js";
|
|
4
|
+
export default defineAction({
|
|
5
|
+
description: "Grant several selected workspace resources or knowledge packs to an app, skipping existing active grants.",
|
|
6
|
+
schema: z.object({
|
|
7
|
+
appId: z.string().describe("App ID receiving the resources"),
|
|
8
|
+
resourceIds: z
|
|
9
|
+
.array(z.string())
|
|
10
|
+
.max(100)
|
|
11
|
+
.describe("Workspace resource IDs to grant"),
|
|
12
|
+
}),
|
|
13
|
+
run: async (args) => grantWorkspaceResourcesToApp(args),
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=grant-workspace-resources-to-app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grant-workspace-resources-to-app.js","sourceRoot":"","sources":["../../src/actions/grant-workspace-resources-to-app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,4BAA4B,EAAE,MAAM,4CAA4C,CAAC;AAE1F,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,2GAA2G;IAC7G,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QAC5D,WAAW,EAAE,CAAC;aACX,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,GAAG,CAAC,GAAG,CAAC;aACR,QAAQ,CAAC,iCAAiC,CAAC;KAC/C,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,4BAA4B,CAAC,IAAI,CAAC;CACxD,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core\";\nimport { z } from \"zod\";\nimport { grantWorkspaceResourcesToApp } from \"../server/lib/workspace-resources-store.js\";\n\nexport default defineAction({\n description:\n \"Grant several selected workspace resources or knowledge packs to an app, skipping existing active grants.\",\n schema: z.object({\n appId: z.string().describe(\"App ID receiving the resources\"),\n resourceIds: z\n .array(z.string())\n .max(100)\n .describe(\"Workspace resource IDs to grant\"),\n }),\n run: async (args) => grantWorkspaceResourcesToApp(args),\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAmD7D;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAkDvD,CAAC"}
|
package/dist/actions/index.js
CHANGED
|
@@ -12,6 +12,7 @@ import denyVaultRequest from "./deny-vault-request.js";
|
|
|
12
12
|
import getAppCreationSettings from "./get-app-creation-settings.js";
|
|
13
13
|
import getDispatchSettings from "./get-dispatch-settings.js";
|
|
14
14
|
import getWorkspaceInfo from "./get-workspace-info.js";
|
|
15
|
+
import grantWorkspaceResourcesToApp from "./grant-workspace-resources-to-app.js";
|
|
15
16
|
import grantVaultSecretsToApp from "./grant-vault-secrets-to-app.js";
|
|
16
17
|
import listConnectedAgents from "./list-connected-agents.js";
|
|
17
18
|
import listDestinations from "./list-destinations.js";
|
|
@@ -27,6 +28,7 @@ import listVaultRequests from "./list-vault-requests.js";
|
|
|
27
28
|
import listVaultSecretOptions from "./list-vault-secret-options.js";
|
|
28
29
|
import listVaultSecrets from "./list-vault-secrets.js";
|
|
29
30
|
import listWorkspaceApps from "./list-workspace-apps.js";
|
|
31
|
+
import listWorkspaceResourceOptions from "./list-workspace-resource-options.js";
|
|
30
32
|
import listWorkspaceResourceGrants from "./list-workspace-resource-grants.js";
|
|
31
33
|
import listWorkspaceResources from "./list-workspace-resources.js";
|
|
32
34
|
import navigate from "./navigate.js";
|
|
@@ -66,6 +68,7 @@ export const dispatchActions = {
|
|
|
66
68
|
"get-app-creation-settings": getAppCreationSettings,
|
|
67
69
|
"get-dispatch-settings": getDispatchSettings,
|
|
68
70
|
"get-workspace-info": getWorkspaceInfo,
|
|
71
|
+
"grant-workspace-resources-to-app": grantWorkspaceResourcesToApp,
|
|
69
72
|
"grant-vault-secrets-to-app": grantVaultSecretsToApp,
|
|
70
73
|
"list-connected-agents": listConnectedAgents,
|
|
71
74
|
"list-destinations": listDestinations,
|
|
@@ -81,6 +84,7 @@ export const dispatchActions = {
|
|
|
81
84
|
"list-vault-secret-options": listVaultSecretOptions,
|
|
82
85
|
"list-vault-secrets": listVaultSecrets,
|
|
83
86
|
"list-workspace-apps": listWorkspaceApps,
|
|
87
|
+
"list-workspace-resource-options": listWorkspaceResourceOptions,
|
|
84
88
|
"list-workspace-resource-grants": listWorkspaceResourceGrants,
|
|
85
89
|
"list-workspace-resources": listWorkspaceResources,
|
|
86
90
|
navigate: navigate,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ActionEntry } from \"@agent-native/core/server\";\nimport approveDispatchChange from \"./approve-dispatch-change.js\";\nimport approveVaultRequest from \"./approve-vault-request.js\";\nimport createLinkToken from \"./create-link-token.js\";\nimport createVaultGrant from \"./create-vault-grant.js\";\nimport createVaultSecret from \"./create-vault-secret.js\";\nimport createWorkspaceResourceGrant from \"./create-workspace-resource-grant.js\";\nimport createWorkspaceResource from \"./create-workspace-resource.js\";\nimport deleteDestination from \"./delete-destination.js\";\nimport deleteVaultSecret from \"./delete-vault-secret.js\";\nimport deleteWorkspaceResource from \"./delete-workspace-resource.js\";\nimport denyVaultRequest from \"./deny-vault-request.js\";\nimport getAppCreationSettings from \"./get-app-creation-settings.js\";\nimport getDispatchSettings from \"./get-dispatch-settings.js\";\nimport getWorkspaceInfo from \"./get-workspace-info.js\";\nimport grantVaultSecretsToApp from \"./grant-vault-secrets-to-app.js\";\nimport listConnectedAgents from \"./list-connected-agents.js\";\nimport listDestinations from \"./list-destinations.js\";\nimport listDispatchApprovals from \"./list-dispatch-approvals.js\";\nimport listDispatchAudit from \"./list-dispatch-audit.js\";\nimport listDispatchOverview from \"./list-dispatch-overview.js\";\nimport listDispatchUsageMetrics from \"./list-dispatch-usage-metrics.js\";\nimport listIntegrationsCatalog from \"./list-integrations-catalog.js\";\nimport listLinkedIdentities from \"./list-linked-identities.js\";\nimport listVaultAudit from \"./list-vault-audit.js\";\nimport listVaultGrants from \"./list-vault-grants.js\";\nimport listVaultRequests from \"./list-vault-requests.js\";\nimport listVaultSecretOptions from \"./list-vault-secret-options.js\";\nimport listVaultSecrets from \"./list-vault-secrets.js\";\nimport listWorkspaceApps from \"./list-workspace-apps.js\";\nimport listWorkspaceResourceGrants from \"./list-workspace-resource-grants.js\";\nimport listWorkspaceResources from \"./list-workspace-resources.js\";\nimport navigate from \"./navigate.js\";\nimport rejectDispatchChange from \"./reject-dispatch-change.js\";\nimport requestVaultSecret from \"./request-vault-secret.js\";\nimport revokeVaultGrant from \"./revoke-vault-grant.js\";\nimport revokeWorkspaceResourceGrant from \"./revoke-workspace-resource-grant.js\";\nimport sendPlatformMessage from \"./send-platform-message.js\";\nimport setAppCreationSettings from \"./set-app-creation-settings.js\";\nimport setDispatchApprovalPolicy from \"./set-dispatch-approval-policy.js\";\nimport startWorkspaceAppCreation from \"./start-workspace-app-creation.js\";\nimport syncVaultToApp from \"./sync-vault-to-app.js\";\nimport syncWorkspaceResourcesToAll from \"./sync-workspace-resources-to-all.js\";\nimport syncWorkspaceResourcesToApp from \"./sync-workspace-resources-to-app.js\";\nimport updateVaultSecret from \"./update-vault-secret.js\";\nimport updateWorkspaceResource from \"./update-workspace-resource.js\";\nimport upsertDestination from \"./upsert-destination.js\";\nimport viewScreen from \"./view-screen.js\";\n\n/**\n * Dispatch's actions registered as a flat name→entry map. Imported by\n * `@agent-native/dispatch/server`'s side-effect block, which calls\n * `registerPackageActions(dispatchActions)` so the framework's action\n * loader picks them up.\n */\nexport const dispatchActions: Record<string, ActionEntry> = {\n \"approve-dispatch-change\": approveDispatchChange,\n \"approve-vault-request\": approveVaultRequest,\n \"create-link-token\": createLinkToken,\n \"create-vault-grant\": createVaultGrant,\n \"create-vault-secret\": createVaultSecret,\n \"create-workspace-resource-grant\": createWorkspaceResourceGrant,\n \"create-workspace-resource\": createWorkspaceResource,\n \"delete-destination\": deleteDestination,\n \"delete-vault-secret\": deleteVaultSecret,\n \"delete-workspace-resource\": deleteWorkspaceResource,\n \"deny-vault-request\": denyVaultRequest,\n \"get-app-creation-settings\": getAppCreationSettings,\n \"get-dispatch-settings\": getDispatchSettings,\n \"get-workspace-info\": getWorkspaceInfo,\n \"grant-vault-secrets-to-app\": grantVaultSecretsToApp,\n \"list-connected-agents\": listConnectedAgents,\n \"list-destinations\": listDestinations,\n \"list-dispatch-approvals\": listDispatchApprovals,\n \"list-dispatch-audit\": listDispatchAudit,\n \"list-dispatch-overview\": listDispatchOverview,\n \"list-dispatch-usage-metrics\": listDispatchUsageMetrics,\n \"list-integrations-catalog\": listIntegrationsCatalog,\n \"list-linked-identities\": listLinkedIdentities,\n \"list-vault-audit\": listVaultAudit,\n \"list-vault-grants\": listVaultGrants,\n \"list-vault-requests\": listVaultRequests,\n \"list-vault-secret-options\": listVaultSecretOptions,\n \"list-vault-secrets\": listVaultSecrets,\n \"list-workspace-apps\": listWorkspaceApps,\n \"list-workspace-resource-grants\": listWorkspaceResourceGrants,\n \"list-workspace-resources\": listWorkspaceResources,\n navigate: navigate,\n \"reject-dispatch-change\": rejectDispatchChange,\n \"request-vault-secret\": requestVaultSecret,\n \"revoke-vault-grant\": revokeVaultGrant,\n \"revoke-workspace-resource-grant\": revokeWorkspaceResourceGrant,\n \"send-platform-message\": sendPlatformMessage,\n \"set-app-creation-settings\": setAppCreationSettings,\n \"set-dispatch-approval-policy\": setDispatchApprovalPolicy,\n \"start-workspace-app-creation\": startWorkspaceAppCreation,\n \"sync-vault-to-app\": syncVaultToApp,\n \"sync-workspace-resources-to-all\": syncWorkspaceResourcesToAll,\n \"sync-workspace-resources-to-app\": syncWorkspaceResourcesToApp,\n \"update-vault-secret\": updateVaultSecret,\n \"update-workspace-resource\": updateWorkspaceResource,\n \"upsert-destination\": upsertDestination,\n \"view-screen\": viewScreen,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ActionEntry } from \"@agent-native/core/server\";\nimport approveDispatchChange from \"./approve-dispatch-change.js\";\nimport approveVaultRequest from \"./approve-vault-request.js\";\nimport createLinkToken from \"./create-link-token.js\";\nimport createVaultGrant from \"./create-vault-grant.js\";\nimport createVaultSecret from \"./create-vault-secret.js\";\nimport createWorkspaceResourceGrant from \"./create-workspace-resource-grant.js\";\nimport createWorkspaceResource from \"./create-workspace-resource.js\";\nimport deleteDestination from \"./delete-destination.js\";\nimport deleteVaultSecret from \"./delete-vault-secret.js\";\nimport deleteWorkspaceResource from \"./delete-workspace-resource.js\";\nimport denyVaultRequest from \"./deny-vault-request.js\";\nimport getAppCreationSettings from \"./get-app-creation-settings.js\";\nimport getDispatchSettings from \"./get-dispatch-settings.js\";\nimport getWorkspaceInfo from \"./get-workspace-info.js\";\nimport grantWorkspaceResourcesToApp from \"./grant-workspace-resources-to-app.js\";\nimport grantVaultSecretsToApp from \"./grant-vault-secrets-to-app.js\";\nimport listConnectedAgents from \"./list-connected-agents.js\";\nimport listDestinations from \"./list-destinations.js\";\nimport listDispatchApprovals from \"./list-dispatch-approvals.js\";\nimport listDispatchAudit from \"./list-dispatch-audit.js\";\nimport listDispatchOverview from \"./list-dispatch-overview.js\";\nimport listDispatchUsageMetrics from \"./list-dispatch-usage-metrics.js\";\nimport listIntegrationsCatalog from \"./list-integrations-catalog.js\";\nimport listLinkedIdentities from \"./list-linked-identities.js\";\nimport listVaultAudit from \"./list-vault-audit.js\";\nimport listVaultGrants from \"./list-vault-grants.js\";\nimport listVaultRequests from \"./list-vault-requests.js\";\nimport listVaultSecretOptions from \"./list-vault-secret-options.js\";\nimport listVaultSecrets from \"./list-vault-secrets.js\";\nimport listWorkspaceApps from \"./list-workspace-apps.js\";\nimport listWorkspaceResourceOptions from \"./list-workspace-resource-options.js\";\nimport listWorkspaceResourceGrants from \"./list-workspace-resource-grants.js\";\nimport listWorkspaceResources from \"./list-workspace-resources.js\";\nimport navigate from \"./navigate.js\";\nimport rejectDispatchChange from \"./reject-dispatch-change.js\";\nimport requestVaultSecret from \"./request-vault-secret.js\";\nimport revokeVaultGrant from \"./revoke-vault-grant.js\";\nimport revokeWorkspaceResourceGrant from \"./revoke-workspace-resource-grant.js\";\nimport sendPlatformMessage from \"./send-platform-message.js\";\nimport setAppCreationSettings from \"./set-app-creation-settings.js\";\nimport setDispatchApprovalPolicy from \"./set-dispatch-approval-policy.js\";\nimport startWorkspaceAppCreation from \"./start-workspace-app-creation.js\";\nimport syncVaultToApp from \"./sync-vault-to-app.js\";\nimport syncWorkspaceResourcesToAll from \"./sync-workspace-resources-to-all.js\";\nimport syncWorkspaceResourcesToApp from \"./sync-workspace-resources-to-app.js\";\nimport updateVaultSecret from \"./update-vault-secret.js\";\nimport updateWorkspaceResource from \"./update-workspace-resource.js\";\nimport upsertDestination from \"./upsert-destination.js\";\nimport viewScreen from \"./view-screen.js\";\n\n/**\n * Dispatch's actions registered as a flat name→entry map. Imported by\n * `@agent-native/dispatch/server`'s side-effect block, which calls\n * `registerPackageActions(dispatchActions)` so the framework's action\n * loader picks them up.\n */\nexport const dispatchActions: Record<string, ActionEntry> = {\n \"approve-dispatch-change\": approveDispatchChange,\n \"approve-vault-request\": approveVaultRequest,\n \"create-link-token\": createLinkToken,\n \"create-vault-grant\": createVaultGrant,\n \"create-vault-secret\": createVaultSecret,\n \"create-workspace-resource-grant\": createWorkspaceResourceGrant,\n \"create-workspace-resource\": createWorkspaceResource,\n \"delete-destination\": deleteDestination,\n \"delete-vault-secret\": deleteVaultSecret,\n \"delete-workspace-resource\": deleteWorkspaceResource,\n \"deny-vault-request\": denyVaultRequest,\n \"get-app-creation-settings\": getAppCreationSettings,\n \"get-dispatch-settings\": getDispatchSettings,\n \"get-workspace-info\": getWorkspaceInfo,\n \"grant-workspace-resources-to-app\": grantWorkspaceResourcesToApp,\n \"grant-vault-secrets-to-app\": grantVaultSecretsToApp,\n \"list-connected-agents\": listConnectedAgents,\n \"list-destinations\": listDestinations,\n \"list-dispatch-approvals\": listDispatchApprovals,\n \"list-dispatch-audit\": listDispatchAudit,\n \"list-dispatch-overview\": listDispatchOverview,\n \"list-dispatch-usage-metrics\": listDispatchUsageMetrics,\n \"list-integrations-catalog\": listIntegrationsCatalog,\n \"list-linked-identities\": listLinkedIdentities,\n \"list-vault-audit\": listVaultAudit,\n \"list-vault-grants\": listVaultGrants,\n \"list-vault-requests\": listVaultRequests,\n \"list-vault-secret-options\": listVaultSecretOptions,\n \"list-vault-secrets\": listVaultSecrets,\n \"list-workspace-apps\": listWorkspaceApps,\n \"list-workspace-resource-options\": listWorkspaceResourceOptions,\n \"list-workspace-resource-grants\": listWorkspaceResourceGrants,\n \"list-workspace-resources\": listWorkspaceResources,\n navigate: navigate,\n \"reject-dispatch-change\": rejectDispatchChange,\n \"request-vault-secret\": requestVaultSecret,\n \"revoke-vault-grant\": revokeVaultGrant,\n \"revoke-workspace-resource-grant\": revokeWorkspaceResourceGrant,\n \"send-platform-message\": sendPlatformMessage,\n \"set-app-creation-settings\": setAppCreationSettings,\n \"set-dispatch-approval-policy\": setDispatchApprovalPolicy,\n \"start-workspace-app-creation\": startWorkspaceAppCreation,\n \"sync-vault-to-app\": syncVaultToApp,\n \"sync-workspace-resources-to-all\": syncWorkspaceResourcesToAll,\n \"sync-workspace-resources-to-app\": syncWorkspaceResourcesToApp,\n \"update-vault-secret\": updateVaultSecret,\n \"update-workspace-resource\": updateWorkspaceResource,\n \"upsert-destination\": upsertDestination,\n \"view-screen\": viewScreen,\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-workspace-resource-options.d.ts","sourceRoot":"","sources":["../../src/actions/list-workspace-resource-options.ts"],"names":[],"mappings":";AAIA,wBAWG"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { defineAction } from "@agent-native/core";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { listWorkspaceResourceOptions } from "../server/lib/workspace-resources-store.js";
|
|
4
|
+
export default defineAction({
|
|
5
|
+
description: "List lightweight workspace resource options for selectors, without returning full content.",
|
|
6
|
+
schema: z.object({
|
|
7
|
+
kind: z
|
|
8
|
+
.enum(["skill", "instruction", "agent", "knowledge"])
|
|
9
|
+
.optional()
|
|
10
|
+
.describe("Filter by resource kind"),
|
|
11
|
+
}),
|
|
12
|
+
http: { method: "GET" },
|
|
13
|
+
run: async (args) => listWorkspaceResourceOptions(args),
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=list-workspace-resource-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-workspace-resource-options.js","sourceRoot":"","sources":["../../src/actions/list-workspace-resource-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,4BAA4B,EAAE,MAAM,4CAA4C,CAAC;AAE1F,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,4FAA4F;IAC9F,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,IAAI,EAAE,CAAC;aACJ,IAAI,CAAC,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;aACpD,QAAQ,EAAE;aACV,QAAQ,CAAC,yBAAyB,CAAC;KACvC,CAAC;IACF,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;IACvB,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,4BAA4B,CAAC,IAAI,CAAC;CACxD,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core\";\nimport { z } from \"zod\";\nimport { listWorkspaceResourceOptions } from \"../server/lib/workspace-resources-store.js\";\n\nexport default defineAction({\n description:\n \"List lightweight workspace resource options for selectors, without returning full content.\",\n schema: z.object({\n kind: z\n .enum([\"skill\", \"instruction\", \"agent\", \"knowledge\"])\n .optional()\n .describe(\"Filter by resource kind\"),\n }),\n http: { method: \"GET\" },\n run: async (args) => listWorkspaceResourceOptions(args),\n});\n"]}
|
|
@@ -2,10 +2,10 @@ import { defineAction } from "@agent-native/core";
|
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { listWorkspaceResources } from "../server/lib/workspace-resources-store.js";
|
|
4
4
|
export default defineAction({
|
|
5
|
-
description: "List all workspace-wide resources (skills, instructions, agents) that can be shared across apps.",
|
|
5
|
+
description: "List all workspace-wide resources (skills, instructions, agents, and knowledge packs) that can be shared across apps.",
|
|
6
6
|
schema: z.object({
|
|
7
7
|
kind: z
|
|
8
|
-
.enum(["skill", "instruction", "agent"])
|
|
8
|
+
.enum(["skill", "instruction", "agent", "knowledge"])
|
|
9
9
|
.optional()
|
|
10
10
|
.describe("Filter by resource kind"),
|
|
11
11
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-workspace-resources.js","sourceRoot":"","sources":["../../src/actions/list-workspace-resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AAEpF,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"list-workspace-resources.js","sourceRoot":"","sources":["../../src/actions/list-workspace-resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AAEpF,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,uHAAuH;IACzH,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,IAAI,EAAE,CAAC;aACJ,IAAI,CAAC,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;aACpD,QAAQ,EAAE;aACV,QAAQ,CAAC,yBAAyB,CAAC;KACvC,CAAC;IACF,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;IACvB,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC;CAClD,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core\";\nimport { z } from \"zod\";\nimport { listWorkspaceResources } from \"../server/lib/workspace-resources-store.js\";\n\nexport default defineAction({\n description:\n \"List all workspace-wide resources (skills, instructions, agents, and knowledge packs) that can be shared across apps.\",\n schema: z.object({\n kind: z\n .enum([\"skill\", \"instruction\", \"agent\", \"knowledge\"])\n .optional()\n .describe(\"Filter by resource kind\"),\n }),\n http: { method: \"GET\" },\n run: async (args) => listWorkspaceResources(args),\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start-workspace-app-creation.d.ts","sourceRoot":"","sources":["../../src/actions/start-workspace-app-creation.ts"],"names":[],"mappings":";AAKA,
|
|
1
|
+
{"version":3,"file":"start-workspace-app-creation.d.ts","sourceRoot":"","sources":["../../src/actions/start-workspace-app-creation.ts"],"names":[],"mappings":";AAKA,wBAkCG"}
|
|
@@ -25,6 +25,11 @@ export default defineAction({
|
|
|
25
25
|
.max(100)
|
|
26
26
|
.optional()
|
|
27
27
|
.describe("Dispatch vault secret IDs to grant to the app"),
|
|
28
|
+
resourceIds: z
|
|
29
|
+
.array(z.string())
|
|
30
|
+
.max(100)
|
|
31
|
+
.optional()
|
|
32
|
+
.describe("Dispatch workspace resource IDs or knowledge packs to grant to the app"),
|
|
28
33
|
}),
|
|
29
34
|
run: async (args) => startWorkspaceAppCreation(args),
|
|
30
35
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start-workspace-app-creation.js","sourceRoot":"","sources":["../../src/actions/start-workspace-app-creation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAEhF,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,qUAAqU;IACvU,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QACrE,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,GAAG,CAAC,EAAE,CAAC;aACP,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,gCAAgC,CAAC,KAAK,CAAC,EAAE;YAC3D,OAAO,EACL,yEAAyE;SAC5E,CAAC;aACD,QAAQ,EAAE;aACV,QAAQ,EAAE;aACV,QAAQ,CAAC,+BAA+B,CAAC;QAC5C,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,EAAE;aACV,QAAQ,CAAC,wBAAwB,CAAC;QACrC,SAAS,EAAE,CAAC;aACT,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,GAAG,CAAC,GAAG,CAAC;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,+CAA+C,CAAC;
|
|
1
|
+
{"version":3,"file":"start-workspace-app-creation.js","sourceRoot":"","sources":["../../src/actions/start-workspace-app-creation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAEhF,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,qUAAqU;IACvU,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QACrE,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,GAAG,CAAC,EAAE,CAAC;aACP,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,gCAAgC,CAAC,KAAK,CAAC,EAAE;YAC3D,OAAO,EACL,yEAAyE;SAC5E,CAAC;aACD,QAAQ,EAAE;aACV,QAAQ,EAAE;aACV,QAAQ,CAAC,+BAA+B,CAAC;QAC5C,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,EAAE;aACV,QAAQ,CAAC,wBAAwB,CAAC;QACrC,SAAS,EAAE,CAAC;aACT,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,GAAG,CAAC,GAAG,CAAC;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,+CAA+C,CAAC;QAC5D,WAAW,EAAE,CAAC;aACX,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,GAAG,CAAC,GAAG,CAAC;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,wEAAwE,CACzE;KACJ,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC;CACrD,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core\";\nimport { getWorkspaceAppIdValidationError } from \"@agent-native/core/shared\";\nimport { z } from \"zod\";\nimport { startWorkspaceAppCreation } from \"../server/lib/app-creation-store.js\";\n\nexport default defineAction({\n description:\n \"Start creating a new workspace app from Dispatch when the request truly needs its own app. In local dev this returns a code-agent prompt; in production it creates a Builder branch when a Builder project is configured. The result must be a separate workspace app under apps/<app-id>, not a new route or file in apps/starter.\",\n schema: z.object({\n prompt: z.string().min(1).describe(\"The user's app creation request\"),\n appId: z\n .string()\n .max(64)\n .refine((appId) => !getWorkspaceAppIdValidationError(appId), {\n message:\n \"Use a non-reserved app id with lowercase letters, numbers, and hyphens.\",\n })\n .optional()\n .nullable()\n .describe(\"Desired workspace app id/path\"),\n template: z\n .string()\n .optional()\n .nullable()\n .describe(\"Template to start from\"),\n secretIds: z\n .array(z.string())\n .max(100)\n .optional()\n .describe(\"Dispatch vault secret IDs to grant to the app\"),\n resourceIds: z\n .array(z.string())\n .max(100)\n .optional()\n .describe(\n \"Dispatch workspace resource IDs or knowledge packs to grant to the app\",\n ),\n }),\n run: async (args) => startWorkspaceAppCreation(args),\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-screen.d.ts","sourceRoot":"","sources":["../../src/actions/view-screen.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;;
|
|
1
|
+
{"version":3,"file":"view-screen.d.ts","sourceRoot":"","sources":["../../src/actions/view-screen.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;;AAgBH,wBA6EG"}
|
|
@@ -13,6 +13,7 @@ import { listOverview } from "../server/lib/dispatch-store.js";
|
|
|
13
13
|
import { listVaultOverview, listSecrets, listGrants, listRequests, } from "../server/lib/vault-store.js";
|
|
14
14
|
import { listWorkspaceApps } from "../server/lib/app-creation-store.js";
|
|
15
15
|
import { listDispatchUsageMetrics } from "../server/lib/usage-metrics-store.js";
|
|
16
|
+
import { listWorkspaceResourceOptions } from "../server/lib/workspace-resources-store.js";
|
|
16
17
|
export default defineAction({
|
|
17
18
|
description: "See what the user is currently looking at in the dispatch UI, including navigation state and a compact operational summary.",
|
|
18
19
|
schema: z.object({}),
|
|
@@ -79,6 +80,9 @@ export default defineAction({
|
|
|
79
80
|
.map((g) => ({ secretId: g.secretId, appId: g.appId }));
|
|
80
81
|
screen.vaultPendingRequests = requests;
|
|
81
82
|
}
|
|
83
|
+
if (navigation?.view === "workspace" || navigation?.view === "new-app") {
|
|
84
|
+
screen.workspaceResources = await listWorkspaceResourceOptions();
|
|
85
|
+
}
|
|
82
86
|
if (Object.keys(screen).length === 0) {
|
|
83
87
|
return "No application state found. Is the app running?";
|
|
84
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-screen.js","sourceRoot":"","sources":["../../src/actions/view-screen.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,UAAU,EACV,YAAY,GACb,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"view-screen.js","sourceRoot":"","sources":["../../src/actions/view-screen.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * See what the user is currently looking at on screen.\n *\n * Reads and returns the current navigation state from application state.\n *\n * Usage:\n * pnpm action view-screen\n */\n\nimport { defineAction } from \"@agent-native/core\";\nimport { readAppState } from \"@agent-native/core/application-state\";\nimport { z } from \"zod\";\nimport { listOverview } from \"../server/lib/dispatch-store.js\";\nimport {\n listVaultOverview,\n listSecrets,\n listGrants,\n listRequests,\n} from \"../server/lib/vault-store.js\";\nimport { listWorkspaceApps } from \"../server/lib/app-creation-store.js\";\nimport { listDispatchUsageMetrics } from \"../server/lib/usage-metrics-store.js\";\nimport { listWorkspaceResourceOptions } from \"../server/lib/workspace-resources-store.js\";\n\nexport default defineAction({\n description:\n \"See what the user is currently looking at in the dispatch UI, including navigation state and a compact operational summary.\",\n schema: z.object({}),\n http: false,\n run: async () => {\n const [navigation, overview, vaultOverview] = await Promise.all([\n readAppState(\"navigation\"),\n listOverview(),\n listVaultOverview(),\n ]);\n\n const screen: Record<string, unknown> = {\n counts: { ...overview.counts, ...vaultOverview },\n approvalPolicy: overview.settings,\n };\n if (navigation) screen.navigation = navigation;\n if (navigation?.view === \"overview\") {\n screen.recentAudit = overview.recentAudit.slice(0, 5);\n screen.recentApprovals = overview.recentApprovals.slice(0, 5);\n }\n if (navigation?.view === \"destinations\") {\n screen.recentDestinations = overview.recentDestinations;\n }\n if (\n navigation?.view === \"overview\" ||\n navigation?.view === \"metrics\" ||\n navigation?.view === \"apps\" ||\n navigation?.view === \"new-app\"\n ) {\n screen.workspaceApps = await listWorkspaceApps({\n includeAgentCards: true,\n });\n }\n if (navigation?.view === \"metrics\") {\n try {\n const metrics = await listDispatchUsageMetrics({ sinceDays: 30 });\n screen.usageMetrics = {\n billing: metrics.billing,\n totals: metrics.totals,\n byApp: metrics.byApp.slice(0, 8),\n byUser: metrics.byUser.slice(0, 8),\n appAccess: metrics.appAccess\n .filter((app) => !app.isDispatch)\n .slice(0, 8),\n };\n } catch (error) {\n screen.usageMetricsError =\n error instanceof Error ? error.message : String(error);\n }\n }\n if (navigation?.view === \"vault\" || navigation?.view === \"new-app\") {\n const [secrets, grants, requests] = await Promise.all([\n listSecrets(),\n listGrants(),\n listRequests({ status: \"pending\" }),\n ]);\n screen.vaultSecrets = secrets.map((s) => ({\n id: s.id,\n name: s.name,\n credentialKey: s.credentialKey,\n provider: s.provider,\n }));\n screen.vaultActiveGrants = grants\n .filter((g) => g.status === \"active\")\n .map((g) => ({ secretId: g.secretId, appId: g.appId }));\n screen.vaultPendingRequests = requests;\n }\n if (navigation?.view === \"workspace\" || navigation?.view === \"new-app\") {\n screen.workspaceResources = await listWorkspaceResourceOptions();\n }\n\n if (Object.keys(screen).length === 0) {\n return \"No application state found. Is the app running?\";\n }\n return JSON.stringify(screen, null, 2);\n },\n});\n"]}
|
|
@@ -11,7 +11,7 @@ interface CreateAppPopoverProps {
|
|
|
11
11
|
align?: "start" | "center" | "end";
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
14
|
-
* Inline two-step app-creation flow: prompt → optional
|
|
14
|
+
* Inline two-step app-creation flow: prompt → optional access picker → submit.
|
|
15
15
|
* Used both in the popover form and in the dedicated `/new-app` page so the
|
|
16
16
|
* same UX shows up everywhere a teammate kicks off a new workspace app.
|
|
17
17
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-app-popover.d.ts","sourceRoot":"","sources":["../../src/components/create-app-popover.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"create-app-popover.d.ts","sourceRoot":"","sources":["../../src/components/create-app-popover.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AA8CrE,UAAU,qBAAqB;IAC7B;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;CACpC;AA6FD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,SAAc,GACf,EAAE;IACD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CAgXA;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,KAAgB,GACjB,EAAE,qBAAqB,2CA0BvB"}
|
|
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
2
2
|
import { useEffect, useMemo, useState } from "react";
|
|
3
3
|
import { PromptComposer, agentNativePath, appBasePath, isInBuilderFrame, sendToAgentChat, useDevMode, } from "@agent-native/core/client";
|
|
4
4
|
import { getWorkspaceAppIdValidationError } from "@agent-native/core/shared";
|
|
5
|
-
import { IconArrowLeft, IconArrowUpRight, IconCheck, IconChevronDown, IconKey, IconLoader2, IconPlus, } from "@tabler/icons-react";
|
|
5
|
+
import { IconArrowLeft, IconArrowUpRight, IconBook, IconCheck, IconChevronDown, IconFileText, IconKey, IconLoader2, IconPlus, } from "@tabler/icons-react";
|
|
6
6
|
import { Popover, PopoverContent, PopoverTrigger, } from "../components/ui/popover.js";
|
|
7
7
|
import { Button } from "../components/ui/button.js";
|
|
8
8
|
function slugify(value) {
|
|
@@ -25,6 +25,11 @@ function buildAppCreationPrompt(input) {
|
|
|
25
25
|
const grantRequest = keyList
|
|
26
26
|
? `Requested Dispatch vault key grants for this app: ${keyList}`
|
|
27
27
|
: `Requested Dispatch vault key grants for this app: none`;
|
|
28
|
+
const resourceList = input.selectedResources.length
|
|
29
|
+
? input.selectedResources
|
|
30
|
+
.map((resource) => `- ${resource.name} (${resource.kind}, ${resource.path})`)
|
|
31
|
+
.join("\n")
|
|
32
|
+
: "none";
|
|
28
33
|
return [
|
|
29
34
|
`Create a new agent-native app in this workspace.`,
|
|
30
35
|
`This is a new workspace app request, not a feature request for the current app.`,
|
|
@@ -32,6 +37,7 @@ function buildAppCreationPrompt(input) {
|
|
|
32
37
|
`Suggested app name: ${input.appId} (you may adjust the slug if it conflicts)`,
|
|
33
38
|
`User prompt: ${input.prompt.trim()}`,
|
|
34
39
|
grantRequest,
|
|
40
|
+
`Requested Dispatch workspace resources for this app:\n${resourceList}`,
|
|
35
41
|
``,
|
|
36
42
|
`Pick a starter template that fits the user's prompt — analytics, calendar, content, design, dispatch, forms, mail, slides, clips, or starter when none of the others fit.`,
|
|
37
43
|
`Use the workspace app layout: create it under apps/${input.appId}, mount it at /${input.appId}, keep it on the shared workspace database/hosting model, and avoid table-name collisions by namespacing any new domain tables to the app.`,
|
|
@@ -42,6 +48,9 @@ function buildAppCreationPrompt(input) {
|
|
|
42
48
|
keyList
|
|
43
49
|
? `After the app exists, grant the selected Dispatch vault keys to appId "${input.appId}" and sync them once the app server is available. Treat these as requested grants, not active grants before creation succeeds.`
|
|
44
50
|
: `Do not grant any Dispatch vault keys unless the user asks later.`,
|
|
51
|
+
input.selectedResources.length
|
|
52
|
+
? `After the app exists, grant the selected Dispatch workspace resources to appId "${input.appId}" and sync them once the app server is available. Add a short note to apps/${input.appId}/AGENTS.md telling the app agent to read relevant shared resources under context/ or the selected resource paths before doing GTM/domain work.`
|
|
53
|
+
: `Do not grant any Dispatch workspace resources unless the user asks later.`,
|
|
45
54
|
``,
|
|
46
55
|
`App readiness requirements before handing off:`,
|
|
47
56
|
`- Ensure apps/${input.appId}/package.json exists; Dispatch discovers workspace apps from apps/<app-id>/package.json, not a separate app registry.`,
|
|
@@ -73,7 +82,7 @@ function actionUrl(basePath, action) {
|
|
|
73
82
|
return `${normalized}${path}`;
|
|
74
83
|
}
|
|
75
84
|
/**
|
|
76
|
-
* Inline two-step app-creation flow: prompt → optional
|
|
85
|
+
* Inline two-step app-creation flow: prompt → optional access picker → submit.
|
|
77
86
|
* Used both in the popover form and in the dedicated `/new-app` page so the
|
|
78
87
|
* same UX shows up everywhere a teammate kicks off a new workspace app.
|
|
79
88
|
*/
|
|
@@ -81,15 +90,17 @@ export function CreateAppFlow({ onClose, className = "", }) {
|
|
|
81
90
|
const [step, setStep] = useState("prompt");
|
|
82
91
|
const [prompt, setPrompt] = useState("");
|
|
83
92
|
const [selectedSecretIds, setSelectedSecretIds] = useState([]);
|
|
93
|
+
const [selectedResourceIds, setSelectedResourceIds] = useState([]);
|
|
84
94
|
const [secrets, setSecrets] = useState([]);
|
|
95
|
+
const [resources, setResources] = useState([]);
|
|
85
96
|
const [secretsError, setSecretsError] = useState(null);
|
|
97
|
+
const [resourcesError, setResourcesError] = useState(null);
|
|
86
98
|
const [statusMessage, setStatusMessage] = useState(null);
|
|
87
99
|
const [branchUrl, setBranchUrl] = useState(null);
|
|
88
100
|
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
89
101
|
const { isDevMode } = useDevMode();
|
|
90
102
|
const basePath = useMemo(() => defaultDispatchBasePath(), []);
|
|
91
|
-
// Fetch
|
|
92
|
-
// taps "Choose keys" — no spinner, no pause between steps.
|
|
103
|
+
// Fetch access options eagerly so step 2 has them ready immediately.
|
|
93
104
|
useEffect(() => {
|
|
94
105
|
let cancelled = false;
|
|
95
106
|
fetchJson(actionUrl(basePath, "list-vault-secret-options"))
|
|
@@ -105,18 +116,39 @@ export function CreateAppFlow({ onClose, className = "", }) {
|
|
|
105
116
|
setSecrets([]);
|
|
106
117
|
setSecretsError(err?.message || "Could not load Dispatch keys");
|
|
107
118
|
});
|
|
119
|
+
fetchJson(actionUrl(basePath, "list-workspace-resource-options"))
|
|
120
|
+
.then((data) => {
|
|
121
|
+
if (cancelled)
|
|
122
|
+
return;
|
|
123
|
+
setResources(Array.isArray(data) ? data : []);
|
|
124
|
+
setResourcesError(null);
|
|
125
|
+
})
|
|
126
|
+
.catch((err) => {
|
|
127
|
+
if (cancelled)
|
|
128
|
+
return;
|
|
129
|
+
setResources([]);
|
|
130
|
+
setResourcesError(err?.message || "Could not load Dispatch resources");
|
|
131
|
+
});
|
|
108
132
|
return () => {
|
|
109
133
|
cancelled = true;
|
|
110
134
|
};
|
|
111
135
|
}, [basePath]);
|
|
112
136
|
const selectedSecrets = useMemo(() => secrets.filter((s) => selectedSecretIds.includes(s.id)), [secrets, selectedSecretIds]);
|
|
137
|
+
const selectedResources = useMemo(() => resources.filter((r) => selectedResourceIds.includes(r.id)), [resources, selectedResourceIds]);
|
|
113
138
|
const selectedSecretLabel = selectedSecretIds.length === 0
|
|
114
139
|
? "no keys"
|
|
115
140
|
: `${selectedSecretIds.length} key${selectedSecretIds.length === 1 ? "" : "s"}`;
|
|
141
|
+
const selectedResourceLabel = selectedResourceIds.length === 0
|
|
142
|
+
? "no resources"
|
|
143
|
+
: `${selectedResourceIds.length} resource${selectedResourceIds.length === 1 ? "" : "s"}`;
|
|
144
|
+
const selectedAccessLabel = [selectedSecretLabel, selectedResourceLabel].join(" · ");
|
|
116
145
|
function toggleSecret(id) {
|
|
117
146
|
setSelectedSecretIds((cur) => cur.includes(id) ? cur.filter((x) => x !== id) : [...cur, id]);
|
|
118
147
|
}
|
|
119
|
-
|
|
148
|
+
function toggleResource(id) {
|
|
149
|
+
setSelectedResourceIds((cur) => cur.includes(id) ? cur.filter((x) => x !== id) : [...cur, id]);
|
|
150
|
+
}
|
|
151
|
+
async function submit(rawPrompt) {
|
|
120
152
|
const trimmed = rawPrompt.trim();
|
|
121
153
|
if (!trimmed || isSubmitting)
|
|
122
154
|
return;
|
|
@@ -129,7 +161,8 @@ export function CreateAppFlow({ onClose, className = "", }) {
|
|
|
129
161
|
const message = buildAppCreationPrompt({
|
|
130
162
|
appId,
|
|
131
163
|
prompt: trimmed,
|
|
132
|
-
selectedKeys,
|
|
164
|
+
selectedKeys: selectedSecrets.map((s) => s.credentialKey),
|
|
165
|
+
selectedResources,
|
|
133
166
|
});
|
|
134
167
|
setIsSubmitting(true);
|
|
135
168
|
setStatusMessage(null);
|
|
@@ -152,7 +185,8 @@ export function CreateAppFlow({ onClose, className = "", }) {
|
|
|
152
185
|
body: JSON.stringify({
|
|
153
186
|
prompt: trimmed,
|
|
154
187
|
appId,
|
|
155
|
-
secretIds:
|
|
188
|
+
secretIds: selectedSecretIds.length > 0 ? selectedSecretIds : [],
|
|
189
|
+
resourceIds: selectedResourceIds.length > 0 ? selectedResourceIds : [],
|
|
156
190
|
}),
|
|
157
191
|
});
|
|
158
192
|
if (result?.mode === "builder") {
|
|
@@ -172,20 +206,29 @@ export function CreateAppFlow({ onClose, className = "", }) {
|
|
|
172
206
|
setIsSubmitting(false);
|
|
173
207
|
}
|
|
174
208
|
}
|
|
175
|
-
const
|
|
176
|
-
return (_jsxs("div", { className: `flex flex-col gap-3 ${className}`, children: [step === "prompt" ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center justify-between gap-2 px-1", children: [_jsx("p", { className: "text-sm font-semibold text-foreground", children: "Create app" }), _jsxs("button", { type: "button", onClick: () => setStep("
|
|
209
|
+
const submitWithSelectedAccess = () => submit(prompt);
|
|
210
|
+
return (_jsxs("div", { className: `flex flex-col gap-3 ${className}`, children: [step === "prompt" ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center justify-between gap-2 px-1", children: [_jsx("p", { className: "text-sm font-semibold text-foreground", children: "Create app" }), _jsxs("button", { type: "button", onClick: () => setStep("access"), className: "inline-flex cursor-pointer items-center gap-1 rounded-md border border-border bg-background/40 px-2 py-1 text-[11px] text-muted-foreground hover:text-foreground hover:bg-accent/50", children: [_jsx(IconKey, { size: 11 }), selectedAccessLabel] })] }), _jsx(PromptComposer, { autoFocus: true, disabled: isSubmitting, placeholder: "Describe the app your teammate should be able to use...", draftScope: "dispatch:create-app", onSubmit: (text) => {
|
|
177
211
|
setPrompt(text);
|
|
178
|
-
submit(text
|
|
179
|
-
} })] })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center justify-between gap-2 px-1", children: [_jsxs("button", { type: "button", onClick: () => setStep("prompt"), className: "inline-flex cursor-pointer items-center gap-1 text-xs text-muted-foreground hover:text-foreground", children: [_jsx(IconArrowLeft, { size: 12 }), "Back"] }),
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
212
|
+
submit(text);
|
|
213
|
+
} })] })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center justify-between gap-2 px-1", children: [_jsxs("button", { type: "button", onClick: () => setStep("prompt"), className: "inline-flex cursor-pointer items-center gap-1 text-xs text-muted-foreground hover:text-foreground", children: [_jsx(IconArrowLeft, { size: 12 }), "Back"] }), _jsx("span", { className: "text-[11px] text-muted-foreground/70", children: selectedAccessLabel })] }), _jsxs("div", { className: "max-h-[180px] space-y-2 overflow-y-auto rounded-md border border-border bg-card p-2", children: [_jsxs("div", { className: "flex items-center gap-1.5 px-1 pb-1 text-[11px] font-medium text-muted-foreground", children: [_jsx(IconKey, { size: 12 }), "Dispatch keys"] }), secretsError ? (_jsx("p", { className: "rounded-md border border-dashed border-border px-3 py-3 text-xs text-muted-foreground", children: secretsError })) : secrets.length === 0 ? (_jsx("p", { className: "rounded-md border border-dashed border-border px-3 py-3 text-xs text-muted-foreground", children: "No Dispatch vault keys found yet." })) : (secrets.map((secret) => {
|
|
214
|
+
const selected = selectedSecretIds.includes(secret.id);
|
|
215
|
+
return (_jsxs("div", { className: `group rounded-md border text-sm ${selected
|
|
216
|
+
? "border-primary/45 bg-primary/5"
|
|
217
|
+
: "border-border hover:border-muted-foreground/40 hover:bg-accent/35"}`, children: [_jsxs("button", { type: "button", "aria-pressed": selected, onClick: () => toggleSecret(secret.id), className: "flex w-full cursor-pointer items-start gap-3 rounded-md px-3 py-2 text-left", children: [_jsx("span", { className: `mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded border ${selected
|
|
218
|
+
? "border-primary/60 bg-primary/10 text-primary"
|
|
219
|
+
: "border-muted-foreground/35 text-transparent"}`, children: selected ? _jsx(IconCheck, { className: "h-3 w-3" }) : null }), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsx("span", { className: "block truncate font-medium", children: secret.credentialKey }), _jsx("span", { className: "block truncate text-xs text-muted-foreground/70", children: selected
|
|
220
|
+
? "Will be requested for this app"
|
|
221
|
+
: "Click to request" })] })] }), (secret.provider || secret.name) && (_jsxs("details", { className: "group/details border-t border-border/60 px-3 py-1.5 text-xs text-muted-foreground/75", children: [_jsxs("summary", { className: "flex cursor-pointer list-none items-center gap-1.5 text-[11px] hover:text-muted-foreground [&::-webkit-details-marker]:hidden", children: [_jsx(IconChevronDown, { className: "h-3 w-3 transition-transform group-open/details:rotate-180" }), "Details"] }), _jsxs("div", { className: "mt-1.5 space-y-1 pb-0.5 pl-4", children: [_jsxs("div", { className: "truncate", children: ["Provider: ", secret.provider || "Not specified"] }), _jsxs("div", { className: "truncate", children: ["Name: ", secret.name] })] })] }))] }, secret.id));
|
|
222
|
+
}))] }), _jsxs("div", { className: "max-h-[180px] space-y-2 overflow-y-auto rounded-md border border-border bg-card p-2", children: [_jsxs("div", { className: "flex items-center gap-1.5 px-1 pb-1 text-[11px] font-medium text-muted-foreground", children: [_jsx(IconBook, { size: 12 }), "Resource packs"] }), resourcesError ? (_jsx("p", { className: "rounded-md border border-dashed border-border px-3 py-3 text-xs text-muted-foreground", children: resourcesError })) : resources.length === 0 ? (_jsx("p", { className: "rounded-md border border-dashed border-border px-3 py-3 text-xs text-muted-foreground", children: "No Dispatch resource packs found yet." })) : (resources.map((resource) => {
|
|
223
|
+
const selected = selectedResourceIds.includes(resource.id);
|
|
224
|
+
return (_jsxs("div", { className: `group rounded-md border text-sm ${selected
|
|
225
|
+
? "border-primary/45 bg-primary/5"
|
|
226
|
+
: "border-border hover:border-muted-foreground/40 hover:bg-accent/35"}`, children: [_jsxs("button", { type: "button", "aria-pressed": selected, onClick: () => toggleResource(resource.id), className: "flex w-full cursor-pointer items-start gap-3 rounded-md px-3 py-2 text-left", children: [_jsx("span", { className: `mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded border ${selected
|
|
227
|
+
? "border-primary/60 bg-primary/10 text-primary"
|
|
228
|
+
: "border-muted-foreground/35 text-transparent"}`, children: selected ? _jsx(IconCheck, { className: "h-3 w-3" }) : null }), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsxs("span", { className: "flex min-w-0 items-center gap-1.5", children: [_jsx(IconFileText, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground/70" }), _jsx("span", { className: "block truncate font-medium", children: resource.name })] }), _jsxs("span", { className: "block truncate text-xs text-muted-foreground/70", children: [resource.kind, " \u00B7 ", resource.path] })] })] }), _jsxs("details", { className: "group/details border-t border-border/60 px-3 py-1.5 text-xs text-muted-foreground/75", children: [_jsxs("summary", { className: "flex cursor-pointer list-none items-center gap-1.5 text-[11px] hover:text-muted-foreground [&::-webkit-details-marker]:hidden", children: [_jsx(IconChevronDown, { className: "h-3 w-3 transition-transform group-open/details:rotate-180" }), "Details"] }), _jsxs("div", { className: "mt-1.5 space-y-1 pb-0.5 pl-4", children: [_jsxs("div", { className: "truncate", children: ["Scope:", " ", resource.scope === "all"
|
|
229
|
+
? "All apps"
|
|
230
|
+
: "Selected apps"] }), resource.description ? (_jsx("div", { className: "line-clamp-2", children: resource.description })) : null] })] })] }, resource.id));
|
|
231
|
+
}))] }), _jsx("div", { className: "flex items-center justify-end gap-2", children: _jsxs(Button, { type: "button", size: "sm", onClick: submitWithSelectedAccess, disabled: !prompt.trim() || isSubmitting, children: [isSubmitting ? (_jsx(IconLoader2, { className: "h-3.5 w-3.5 animate-spin" })) : (_jsx(IconPlus, { className: "h-3.5 w-3.5" })), "Create app"] }) }), !prompt.trim() ? (_jsx("p", { className: "px-1 text-[11px] text-muted-foreground/70", children: "Add a prompt on the previous step before creating the app." })) : null] })), statusMessage ? (_jsxs("div", { className: "rounded-md border border-border bg-muted/40 px-3 py-2 text-xs text-muted-foreground", children: [statusMessage, branchUrl ? (_jsxs("a", { href: branchUrl, target: "_blank", rel: "noreferrer", className: "ml-2 inline-flex items-center gap-1 font-medium text-foreground underline", children: ["Open branch ", _jsx(IconArrowUpRight, { className: "h-3 w-3" })] })) : null] })) : null] }));
|
|
189
232
|
}
|
|
190
233
|
export function CreateAppPopover({ trigger, align = "center", }) {
|
|
191
234
|
const [open, setOpen] = useState(false);
|