@agent-native/dispatch 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/README.md +1 -1
  2. package/dist/actions/create-pylon-ticket.d.ts +3 -0
  3. package/dist/actions/create-pylon-ticket.d.ts.map +1 -0
  4. package/dist/actions/create-pylon-ticket.js +94 -0
  5. package/dist/actions/create-pylon-ticket.js.map +1 -0
  6. package/dist/actions/create-vault-grant.js +1 -1
  7. package/dist/actions/create-vault-grant.js.map +1 -1
  8. package/dist/actions/create-vault-secret.d.ts.map +1 -1
  9. package/dist/actions/create-vault-secret.js +4 -3
  10. package/dist/actions/create-vault-secret.js.map +1 -1
  11. package/dist/actions/get-vault-access-settings.d.ts +3 -0
  12. package/dist/actions/get-vault-access-settings.d.ts.map +1 -0
  13. package/dist/actions/get-vault-access-settings.js +10 -0
  14. package/dist/actions/get-vault-access-settings.js.map +1 -0
  15. package/dist/actions/grant-vault-secrets-to-app.js +1 -1
  16. package/dist/actions/grant-vault-secrets-to-app.js.map +1 -1
  17. package/dist/actions/index.d.ts.map +1 -1
  18. package/dist/actions/index.js +8 -0
  19. package/dist/actions/index.js.map +1 -1
  20. package/dist/actions/list-integrations-catalog.js +1 -1
  21. package/dist/actions/list-integrations-catalog.js.map +1 -1
  22. package/dist/actions/list-vault-grants.js +1 -1
  23. package/dist/actions/list-vault-grants.js.map +1 -1
  24. package/dist/actions/list-workspace-apps.d.ts.map +1 -1
  25. package/dist/actions/list-workspace-apps.js +5 -1
  26. package/dist/actions/list-workspace-apps.js.map +1 -1
  27. package/dist/actions/set-vault-access-settings.d.ts +3 -0
  28. package/dist/actions/set-vault-access-settings.d.ts.map +1 -0
  29. package/dist/actions/set-vault-access-settings.js +13 -0
  30. package/dist/actions/set-vault-access-settings.js.map +1 -0
  31. package/dist/actions/start-workspace-app-creation.d.ts.map +1 -1
  32. package/dist/actions/start-workspace-app-creation.js +6 -0
  33. package/dist/actions/start-workspace-app-creation.js.map +1 -1
  34. package/dist/actions/sync-vault-to-app.js +1 -1
  35. package/dist/actions/sync-vault-to-app.js.map +1 -1
  36. package/dist/actions/update-workspace-app-metadata.d.ts +3 -0
  37. package/dist/actions/update-workspace-app-metadata.d.ts.map +1 -0
  38. package/dist/actions/update-workspace-app-metadata.js +30 -0
  39. package/dist/actions/update-workspace-app-metadata.js.map +1 -0
  40. package/dist/actions/view-screen.d.ts.map +1 -1
  41. package/dist/actions/view-screen.js +4 -2
  42. package/dist/actions/view-screen.js.map +1 -1
  43. package/dist/components/app-keys-popover.d.ts.map +1 -1
  44. package/dist/components/app-keys-popover.js +17 -5
  45. package/dist/components/app-keys-popover.js.map +1 -1
  46. package/dist/components/create-app-popover.d.ts.map +1 -1
  47. package/dist/components/create-app-popover.js +38 -14
  48. package/dist/components/create-app-popover.js.map +1 -1
  49. package/dist/components/dispatch-shell.d.ts +4 -4
  50. package/dist/components/dispatch-shell.d.ts.map +1 -1
  51. package/dist/components/dispatch-shell.js +6 -6
  52. package/dist/components/dispatch-shell.js.map +1 -1
  53. package/dist/components/layout/Layout.d.ts.map +1 -1
  54. package/dist/components/layout/Layout.js +10 -3
  55. package/dist/components/layout/Layout.js.map +1 -1
  56. package/dist/components/messaging-setup-panel.d.ts.map +1 -1
  57. package/dist/components/messaging-setup-panel.js +2 -2
  58. package/dist/components/messaging-setup-panel.js.map +1 -1
  59. package/dist/components/workspace-app-card.d.ts.map +1 -1
  60. package/dist/components/workspace-app-card.js +41 -2
  61. package/dist/components/workspace-app-card.js.map +1 -1
  62. package/dist/hooks/use-navigation-state.js +12 -5
  63. package/dist/hooks/use-navigation-state.js.map +1 -1
  64. package/dist/lib/catch-all-target.d.ts +2 -0
  65. package/dist/lib/catch-all-target.d.ts.map +1 -0
  66. package/dist/lib/catch-all-target.js +95 -0
  67. package/dist/lib/catch-all-target.js.map +1 -0
  68. package/dist/lib/workspace-apps.d.ts +9 -0
  69. package/dist/lib/workspace-apps.d.ts.map +1 -1
  70. package/dist/lib/workspace-apps.js.map +1 -1
  71. package/dist/routes/pages/$appId.d.ts +2 -24
  72. package/dist/routes/pages/$appId.d.ts.map +1 -1
  73. package/dist/routes/pages/$appId.js +42 -8
  74. package/dist/routes/pages/$appId.js.map +1 -1
  75. package/dist/routes/pages/approval.d.ts.map +1 -1
  76. package/dist/routes/pages/approval.js +2 -1
  77. package/dist/routes/pages/approval.js.map +1 -1
  78. package/dist/routes/pages/apps.$appId.d.ts.map +1 -1
  79. package/dist/routes/pages/apps.$appId.js +2 -1
  80. package/dist/routes/pages/apps.$appId.js.map +1 -1
  81. package/dist/routes/pages/integrations.d.ts.map +1 -1
  82. package/dist/routes/pages/integrations.js +20 -15
  83. package/dist/routes/pages/integrations.js.map +1 -1
  84. package/dist/routes/pages/new-app.js +1 -1
  85. package/dist/routes/pages/new-app.js.map +1 -1
  86. package/dist/routes/pages/overview.d.ts.map +1 -1
  87. package/dist/routes/pages/overview.js +14 -1
  88. package/dist/routes/pages/overview.js.map +1 -1
  89. package/dist/routes/pages/vault.d.ts.map +1 -1
  90. package/dist/routes/pages/vault.js +25 -6
  91. package/dist/routes/pages/vault.js.map +1 -1
  92. package/dist/routes/pages/workspace.d.ts.map +1 -1
  93. package/dist/routes/pages/workspace.js +5 -3
  94. package/dist/routes/pages/workspace.js.map +1 -1
  95. package/dist/server/lib/app-creation-store.d.ts +13 -0
  96. package/dist/server/lib/app-creation-store.d.ts.map +1 -1
  97. package/dist/server/lib/app-creation-store.js +295 -9
  98. package/dist/server/lib/app-creation-store.js.map +1 -1
  99. package/dist/server/lib/env-config.d.ts.map +1 -1
  100. package/dist/server/lib/env-config.js +5 -0
  101. package/dist/server/lib/env-config.js.map +1 -1
  102. package/dist/server/lib/onboarding-steps.d.ts +12 -0
  103. package/dist/server/lib/onboarding-steps.d.ts.map +1 -0
  104. package/dist/server/lib/onboarding-steps.js +47 -0
  105. package/dist/server/lib/onboarding-steps.js.map +1 -0
  106. package/dist/server/lib/vault-store.d.ts +55 -0
  107. package/dist/server/lib/vault-store.d.ts.map +1 -1
  108. package/dist/server/lib/vault-store.js +210 -41
  109. package/dist/server/lib/vault-store.js.map +1 -1
  110. package/dist/server/plugins/agent-chat.d.ts.map +1 -1
  111. package/dist/server/plugins/agent-chat.js +2 -1
  112. package/dist/server/plugins/agent-chat.js.map +1 -1
  113. package/dist/server/plugins/core-routes.d.ts.map +1 -1
  114. package/dist/server/plugins/core-routes.js +4 -0
  115. package/dist/server/plugins/core-routes.js.map +1 -1
  116. package/dist/server/plugins/integrations.js +2 -2
  117. package/dist/server/plugins/integrations.js.map +1 -1
  118. package/package.json +13 -11
  119. package/src/actions/create-pylon-ticket.ts +109 -0
  120. package/src/actions/create-vault-grant.ts +1 -1
  121. package/src/actions/create-vault-secret.ts +4 -3
  122. package/src/actions/get-vault-access-settings.ts +11 -0
  123. package/src/actions/grant-vault-secrets-to-app.ts +1 -1
  124. package/src/actions/index.ts +8 -0
  125. package/src/actions/list-integrations-catalog.ts +1 -1
  126. package/src/actions/list-vault-grants.ts +1 -1
  127. package/src/actions/list-workspace-apps.ts +5 -1
  128. package/src/actions/set-vault-access-settings.ts +16 -0
  129. package/src/actions/start-workspace-app-creation.ts +8 -0
  130. package/src/actions/sync-vault-to-app.ts +1 -1
  131. package/src/actions/update-workspace-app-metadata.ts +32 -0
  132. package/src/actions/view-screen.ts +4 -1
  133. package/src/components/app-keys-popover.tsx +38 -8
  134. package/src/components/create-app-popover.tsx +47 -14
  135. package/src/components/dispatch-shell.tsx +16 -15
  136. package/src/components/layout/Layout.tsx +11 -5
  137. package/src/components/messaging-setup-panel.tsx +54 -39
  138. package/src/components/workspace-app-card.tsx +102 -0
  139. package/src/hooks/use-navigation-state.ts +10 -4
  140. package/src/lib/catch-all-target.spec.ts +218 -0
  141. package/src/lib/catch-all-target.ts +99 -0
  142. package/src/lib/workspace-apps.ts +9 -0
  143. package/src/routes/pages/$appId.tsx +45 -7
  144. package/src/routes/pages/approval.tsx +33 -3
  145. package/src/routes/pages/apps.$appId.tsx +6 -1
  146. package/src/routes/pages/integrations.tsx +57 -18
  147. package/src/routes/pages/new-app.tsx +1 -1
  148. package/src/routes/pages/overview.tsx +69 -29
  149. package/src/routes/pages/vault.tsx +101 -21
  150. package/src/routes/pages/workspace.tsx +21 -3
  151. package/src/server/lib/app-creation-store.spec.ts +61 -2
  152. package/src/server/lib/app-creation-store.ts +386 -11
  153. package/src/server/lib/env-config.ts +5 -0
  154. package/src/server/lib/onboarding-steps.ts +49 -0
  155. package/src/server/lib/vault-store.spec.ts +69 -0
  156. package/src/server/lib/vault-store.ts +266 -49
  157. package/src/server/plugins/agent-chat.ts +2 -1
  158. package/src/server/plugins/core-routes.ts +5 -0
  159. package/src/server/plugins/integrations.ts +2 -2
@@ -47,6 +47,7 @@ import {
47
47
  } from "@/components/ui/select";
48
48
  import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
49
49
  import { Textarea } from "@/components/ui/textarea";
50
+ import { Skeleton } from "@/components/ui/skeleton";
50
51
 
51
52
  export function meta() {
52
53
  return [{ title: "Workspace Resources — Dispatch" }];
@@ -528,6 +529,21 @@ export default function WorkspaceRoute() {
528
529
  items: any[];
529
530
  emptyText: string;
530
531
  }) {
532
+ if (isLoading && (resources ?? []).length === 0) {
533
+ return (
534
+ <div className="space-y-3">
535
+ {Array.from({ length: 3 }).map((_, index) => (
536
+ <div
537
+ key={index}
538
+ className="rounded-2xl border bg-card px-5 py-4 space-y-2"
539
+ >
540
+ <Skeleton className="h-4 w-1/3" />
541
+ <Skeleton className="h-3 w-2/3" />
542
+ </div>
543
+ ))}
544
+ </div>
545
+ );
546
+ }
531
547
  if (items.length === 0) {
532
548
  return (
533
549
  <div className="rounded-2xl border border-dashed px-6 py-12 text-center text-sm text-muted-foreground">
@@ -555,9 +571,11 @@ export default function WorkspaceRoute() {
555
571
  >
556
572
  <div className="flex items-center justify-between">
557
573
  <div className="text-sm text-muted-foreground">
558
- {isLoading
559
- ? "Loading..."
560
- : `${resources?.length || 0} resource${(resources?.length || 0) !== 1 ? "s" : ""}`}
574
+ {isLoading ? (
575
+ <Skeleton className="h-4 w-24" />
576
+ ) : (
577
+ `${resources?.length || 0} resource${(resources?.length || 0) !== 1 ? "s" : ""}`
578
+ )}
561
579
  </div>
562
580
  <div className="flex gap-2">
563
581
  <Button
@@ -1,6 +1,9 @@
1
1
  import { afterEach, describe, expect, it, vi } from "vitest";
2
2
  import { runWithRequestContext } from "@agent-native/core/server";
3
- import { listWorkspaceApps } from "./app-creation-store.js";
3
+ import {
4
+ generateWorkspaceAppDescription,
5
+ listWorkspaceApps,
6
+ } from "./app-creation-store.js";
4
7
 
5
8
  const originalFetch = globalThis.fetch;
6
9
 
@@ -21,7 +24,15 @@ describe("listWorkspaceApps", () => {
21
24
  name: "Agent-Native Dispatch",
22
25
  path: "/dispatch",
23
26
  },
24
- { id: "todo", name: "Todo", path: "/todo" },
27
+ {
28
+ id: "todo",
29
+ name: "Todo",
30
+ description: "Tracks personal tasks and follow-ups",
31
+ path: "/todo",
32
+ audience: "public",
33
+ publicPaths: ["/"],
34
+ protectedPaths: ["/admin"],
35
+ },
25
36
  ],
26
37
  }),
27
38
  { headers: { "content-type": "application/json" } },
@@ -47,5 +58,53 @@ describe("listWorkspaceApps", () => {
47
58
  }),
48
59
  );
49
60
  expect(apps.map((app) => app.id)).toEqual(["dispatch", "todo"]);
61
+ expect(apps.find((app) => app.id === "todo")?.description).toBe(
62
+ "Tracks personal tasks and follow-ups",
63
+ );
64
+ expect(apps.find((app) => app.id === "todo")?.audience).toBe("public");
65
+ expect(apps.find((app) => app.id === "todo")?.publicPaths).toEqual(["/"]);
66
+ expect(apps.find((app) => app.id === "todo")?.protectedPaths).toEqual([
67
+ "/admin",
68
+ ]);
69
+ });
70
+
71
+ it("filters workspace apps by audience", async () => {
72
+ vi.stubEnv(
73
+ "AGENT_NATIVE_WORKSPACE_APPS_JSON",
74
+ JSON.stringify([
75
+ {
76
+ id: "dispatch",
77
+ name: "Dispatch",
78
+ path: "/dispatch",
79
+ audience: "internal",
80
+ },
81
+ {
82
+ id: "portal",
83
+ name: "Portal",
84
+ path: "/portal",
85
+ audience: "public",
86
+ },
87
+ ]),
88
+ );
89
+
90
+ const apps = await runWithRequestContext(
91
+ { userEmail: "dev@example.test" },
92
+ () =>
93
+ listWorkspaceApps({
94
+ includeAgentCards: false,
95
+ audience: "public",
96
+ }),
97
+ );
98
+
99
+ expect(apps.map((app) => app.id)).toEqual(["portal"]);
100
+ });
101
+
102
+ it("generates a concise seed description from an app prompt", () => {
103
+ expect(
104
+ generateWorkspaceAppDescription(
105
+ "Build me an app that tracks customer onboarding risks and handoffs",
106
+ "customer-onboarding",
107
+ ),
108
+ ).toBe("Tracks customer onboarding risks and handoffs.");
50
109
  });
51
110
  });