@agent-native/dispatch 0.31.24 → 0.31.25-nightly-20260826192357

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 (35) hide show
  1. package/dist/actions/create-browser-chat-session.js +1 -1
  2. package/dist/actions/create-browser-chat-session.js.map +1 -1
  3. package/dist/actions/get-agent-thread-debug.js +1 -1
  4. package/dist/actions/get-agent-thread-debug.js.map +1 -1
  5. package/dist/components/dispatch-shell.d.ts +3 -4
  6. package/dist/components/dispatch-shell.d.ts.map +1 -1
  7. package/dist/components/dispatch-shell.js +3 -4
  8. package/dist/components/dispatch-shell.js.map +1 -1
  9. package/dist/components/layout/Layout.d.ts.map +1 -1
  10. package/dist/components/layout/Layout.js +28 -10
  11. package/dist/components/layout/Layout.js.map +1 -1
  12. package/dist/server/lib/app-creation-store.js +1 -1
  13. package/dist/server/lib/app-creation-store.js.map +1 -1
  14. package/dist/server/lib/curated-workspace-templates.js +1 -1
  15. package/dist/server/lib/curated-workspace-templates.js.map +1 -1
  16. package/dist/server/lib/dispatch-integrations.js +2 -2
  17. package/dist/server/lib/dispatch-integrations.js.map +1 -1
  18. package/dist/server/lib/mcp-gateway.d.ts.map +1 -1
  19. package/dist/server/lib/mcp-gateway.js +12 -2
  20. package/dist/server/lib/mcp-gateway.js.map +1 -1
  21. package/dist/server/lib/onboarding-steps.js +1 -1
  22. package/dist/server/lib/onboarding-steps.js.map +1 -1
  23. package/package.json +4 -4
  24. package/src/actions/create-browser-chat-session.spec.ts +1 -1
  25. package/src/actions/create-browser-chat-session.ts +1 -1
  26. package/src/actions/get-agent-thread-debug.ts +1 -1
  27. package/src/components/dispatch-shell.tsx +3 -4
  28. package/src/components/layout/Layout.app-chat.spec.ts +16 -0
  29. package/src/components/layout/Layout.tsx +65 -13
  30. package/src/server/lib/app-creation-store.ts +1 -1
  31. package/src/server/lib/curated-workspace-templates.ts +1 -1
  32. package/src/server/lib/dispatch-integrations.spec.ts +1 -1
  33. package/src/server/lib/dispatch-integrations.ts +2 -2
  34. package/src/server/lib/mcp-gateway.ts +23 -9
  35. package/src/server/lib/onboarding-steps.ts +1 -1
@@ -50,7 +50,7 @@ export default defineAction({
50
50
  const remote = await createRemoteDevice({
51
51
  ownerEmail,
52
52
  orgId: requestContext?.orgId ?? null,
53
- label: "Agent Native for Chrome",
53
+ label: "Agent-Native for Chrome",
54
54
  platform: "chrome-extension",
55
55
  metadata: {
56
56
  browserExtension: { extensionId },
@@ -1 +1 @@
1
- {"version":3,"file":"create-browser-chat-session.js","sourceRoot":"","sources":["../../src/actions/create-browser-chat-session.ts"],"names":[],"mappings":"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","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { createRemoteDevice } from \"@agent-native/core/integrations\";\nimport {\n buildEmbedStartPath,\n createEmbedSessionTicket,\n getRequestContext,\n getRequestUserEmail,\n withConfiguredAppBasePath,\n} from \"@agent-native/core/server\";\nimport { z } from \"zod\";\n\nimport {\n BROWSER_CHAT_NONCE_QUERY_PARAM,\n BROWSER_CHAT_PARENT_ORIGIN_QUERY_PARAM,\n browserChatExtensionIdSchema,\n browserChatNonceSchema,\n} from \"../lib/browser-chat-protocol.js\";\nimport { isBrowserExtensionIdAllowed } from \"../server/lib/browser-extension-allowlist.js\";\n\nexport default defineAction({\n description:\n \"Create a one-time authenticated Dispatch browser-chat embed session for an approved Agent-Native Chrome extension.\",\n schema: z\n .object({\n nonce: browserChatNonceSchema,\n extensionId: browserChatExtensionIdSchema,\n })\n .strict(),\n readOnly: false,\n parallelSafe: true,\n agentTool: false,\n toolCallable: false,\n run: async ({ nonce, extensionId }) => {\n const ownerEmail = getRequestUserEmail()?.trim();\n if (!ownerEmail) {\n throw new Error(\n \"Sign in to Dispatch before connecting the browser extension.\",\n );\n }\n\n const requestContext = getRequestContext();\n const { browserExtensionIds } = await import(\"../server/index.js\").then(\n (module) => module.getDispatchConfig(),\n );\n if (\n !isBrowserExtensionIdAllowed({\n extensionId,\n configIds: browserExtensionIds,\n nodeEnv: process.env.NODE_ENV,\n requestOrigin: requestContext?.requestOrigin,\n })\n ) {\n throw new Error(\n \"This browser extension is not allowed to connect to Dispatch.\",\n );\n }\n\n const parentOrigin = `chrome-extension://${extensionId}`;\n const requestOrigin = requestContext?.requestOrigin;\n if (!requestOrigin) {\n throw new Error(\"Dispatch could not resolve its browser relay URL.\");\n }\n const query = new URLSearchParams({\n [BROWSER_CHAT_NONCE_QUERY_PARAM]: nonce,\n [BROWSER_CHAT_PARENT_ORIGIN_QUERY_PARAM]: parentOrigin,\n });\n const session = await createEmbedSessionTicket({\n ownerEmail,\n orgId: requestContext?.orgId ?? null,\n targetPath: `/browser-chat?${query}`,\n scope: \"browser-chat\",\n ttlSeconds: 60,\n });\n const remote = await createRemoteDevice({\n ownerEmail,\n orgId: requestContext?.orgId ?? null,\n label: \"Agent Native for Chrome\",\n platform: \"chrome-extension\",\n metadata: {\n browserExtension: { extensionId },\n computerCapabilities: {\n browser: {\n observe: true,\n control: true,\n provider: \"agent-native-chrome-extension\",\n },\n },\n },\n });\n\n return {\n startPath: buildEmbedStartPath(session.ticket),\n expiresAt: session.expiresAt,\n parentOrigin,\n remoteDevice: { id: remote.device.id, token: remote.token },\n relayBaseUrl: withConfiguredAppBasePath(requestOrigin),\n };\n },\n});\n"]}
1
+ {"version":3,"file":"create-browser-chat-session.js","sourceRoot":"","sources":["../../src/actions/create-browser-chat-session.ts"],"names":[],"mappings":"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","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { createRemoteDevice } from \"@agent-native/core/integrations\";\nimport {\n buildEmbedStartPath,\n createEmbedSessionTicket,\n getRequestContext,\n getRequestUserEmail,\n withConfiguredAppBasePath,\n} from \"@agent-native/core/server\";\nimport { z } from \"zod\";\n\nimport {\n BROWSER_CHAT_NONCE_QUERY_PARAM,\n BROWSER_CHAT_PARENT_ORIGIN_QUERY_PARAM,\n browserChatExtensionIdSchema,\n browserChatNonceSchema,\n} from \"../lib/browser-chat-protocol.js\";\nimport { isBrowserExtensionIdAllowed } from \"../server/lib/browser-extension-allowlist.js\";\n\nexport default defineAction({\n description:\n \"Create a one-time authenticated Dispatch browser-chat embed session for an approved Agent-Native Chrome extension.\",\n schema: z\n .object({\n nonce: browserChatNonceSchema,\n extensionId: browserChatExtensionIdSchema,\n })\n .strict(),\n readOnly: false,\n parallelSafe: true,\n agentTool: false,\n toolCallable: false,\n run: async ({ nonce, extensionId }) => {\n const ownerEmail = getRequestUserEmail()?.trim();\n if (!ownerEmail) {\n throw new Error(\n \"Sign in to Dispatch before connecting the browser extension.\",\n );\n }\n\n const requestContext = getRequestContext();\n const { browserExtensionIds } = await import(\"../server/index.js\").then(\n (module) => module.getDispatchConfig(),\n );\n if (\n !isBrowserExtensionIdAllowed({\n extensionId,\n configIds: browserExtensionIds,\n nodeEnv: process.env.NODE_ENV,\n requestOrigin: requestContext?.requestOrigin,\n })\n ) {\n throw new Error(\n \"This browser extension is not allowed to connect to Dispatch.\",\n );\n }\n\n const parentOrigin = `chrome-extension://${extensionId}`;\n const requestOrigin = requestContext?.requestOrigin;\n if (!requestOrigin) {\n throw new Error(\"Dispatch could not resolve its browser relay URL.\");\n }\n const query = new URLSearchParams({\n [BROWSER_CHAT_NONCE_QUERY_PARAM]: nonce,\n [BROWSER_CHAT_PARENT_ORIGIN_QUERY_PARAM]: parentOrigin,\n });\n const session = await createEmbedSessionTicket({\n ownerEmail,\n orgId: requestContext?.orgId ?? null,\n targetPath: `/browser-chat?${query}`,\n scope: \"browser-chat\",\n ttlSeconds: 60,\n });\n const remote = await createRemoteDevice({\n ownerEmail,\n orgId: requestContext?.orgId ?? null,\n label: \"Agent-Native for Chrome\",\n platform: \"chrome-extension\",\n metadata: {\n browserExtension: { extensionId },\n computerCapabilities: {\n browser: {\n observe: true,\n control: true,\n provider: \"agent-native-chrome-extension\",\n },\n },\n },\n });\n\n return {\n startPath: buildEmbedStartPath(session.ticket),\n expiresAt: session.expiresAt,\n parentOrigin,\n remoteDevice: { id: remote.device.id, token: remote.token },\n relayBaseUrl: withConfiguredAppBasePath(requestOrigin),\n };\n },\n});\n"]}
@@ -18,7 +18,7 @@ export default defineAction({
18
18
  .string()
19
19
  .min(1)
20
20
  .optional()
21
- .describe("Copied Agent Native request/run ID, usually shown as run-..., to resolve to its owning chat thread."),
21
+ .describe("Copied Agent-Native request/run ID, usually shown as run-..., to resolve to its owning chat thread."),
22
22
  ownerEmail: z
23
23
  .string()
24
24
  .optional()
@@ -1 +1 @@
1
- {"version":3,"file":"get-agent-thread-debug.js","sourceRoot":"","sources":["../../src/actions/get-agent-thread-debug.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE1E,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,mMAAmM;IACrM,MAAM,EAAE,CAAC;SACN,MAAM,CAAC;QACN,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,OAAO,CAAC,SAAS,CAAC;aAClB,QAAQ,CAAC,wDAAwD,CAAC;QACrE,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,EAAE;aACV,QAAQ,CAAC,kCAAkC,CAAC;QAC/C,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,EAAE;aACV,QAAQ,CACP,qGAAqG,CACtG;QACH,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,0DAA0D,CAAC;QACvE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3D,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;QAChE,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;KACrE,CAAC;SACD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;QACzD,OAAO,EAAE,mCAAmC;KAC7C,CAAC;IACJ,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;IACvB,QAAQ,EAAE,IAAI;IACd,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC;CACjD,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport { getAgentThreadDebug } from \"../server/lib/thread-debug-store.js\";\n\nexport default defineAction({\n description:\n \"Get a full read-only debug snapshot by chat thread ID or copied request/run ID, including persisted messages, raw thread_data, run events, traces, feedback, evals, and checkpoints when present.\",\n schema: z\n .object({\n sourceId: z\n .string()\n .default(\"current\")\n .describe(\"Thread debug source id from list-agent-thread-sources.\"),\n threadId: z\n .string()\n .min(1)\n .optional()\n .describe(\"Agent chat thread ID to inspect.\"),\n runId: z\n .string()\n .min(1)\n .optional()\n .describe(\n \"Copied Agent Native request/run ID, usually shown as run-..., to resolve to its owning chat thread.\",\n ),\n ownerEmail: z\n .string()\n .optional()\n .describe(\"Optional owner email scope for admin cross-user lookups.\"),\n maxRuns: z.coerce.number().int().min(1).max(50).default(20),\n maxEvents: z.coerce.number().int().min(1).max(2000).default(600),\n maxTraceSpans: z.coerce.number().int().min(1).max(2000).default(500),\n })\n .refine((input) => Boolean(input.threadId || input.runId), {\n message: \"Provide either threadId or runId.\",\n }),\n http: { method: \"GET\" },\n readOnly: true,\n run: async (input) => getAgentThreadDebug(input),\n});\n"]}
1
+ {"version":3,"file":"get-agent-thread-debug.js","sourceRoot":"","sources":["../../src/actions/get-agent-thread-debug.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE1E,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,mMAAmM;IACrM,MAAM,EAAE,CAAC;SACN,MAAM,CAAC;QACN,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,OAAO,CAAC,SAAS,CAAC;aAClB,QAAQ,CAAC,wDAAwD,CAAC;QACrE,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,EAAE;aACV,QAAQ,CAAC,kCAAkC,CAAC;QAC/C,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,EAAE;aACV,QAAQ,CACP,qGAAqG,CACtG;QACH,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,0DAA0D,CAAC;QACvE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3D,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;QAChE,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;KACrE,CAAC;SACD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;QACzD,OAAO,EAAE,mCAAmC;KAC7C,CAAC;IACJ,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;IACvB,QAAQ,EAAE,IAAI;IACd,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC;CACjD,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport { getAgentThreadDebug } from \"../server/lib/thread-debug-store.js\";\n\nexport default defineAction({\n description:\n \"Get a full read-only debug snapshot by chat thread ID or copied request/run ID, including persisted messages, raw thread_data, run events, traces, feedback, evals, and checkpoints when present.\",\n schema: z\n .object({\n sourceId: z\n .string()\n .default(\"current\")\n .describe(\"Thread debug source id from list-agent-thread-sources.\"),\n threadId: z\n .string()\n .min(1)\n .optional()\n .describe(\"Agent chat thread ID to inspect.\"),\n runId: z\n .string()\n .min(1)\n .optional()\n .describe(\n \"Copied Agent-Native request/run ID, usually shown as run-..., to resolve to its owning chat thread.\",\n ),\n ownerEmail: z\n .string()\n .optional()\n .describe(\"Optional owner email scope for admin cross-user lookups.\"),\n maxRuns: z.coerce.number().int().min(1).max(50).default(20),\n maxEvents: z.coerce.number().int().min(1).max(2000).default(600),\n maxTraceSpans: z.coerce.number().int().min(1).max(2000).default(500),\n })\n .refine((input) => Boolean(input.threadId || input.runId), {\n message: \"Provide either threadId or runId.\",\n }),\n http: { method: \"GET\" },\n readOnly: true,\n run: async (input) => getAgentThreadDebug(input),\n});\n"]}
@@ -1,9 +1,8 @@
1
1
  import { type ReactNode } from "react";
2
2
  /**
3
- * DispatchShell renders the per-page title (with an optional click-to-open
4
- * description popover) into the global header via the HeaderActions store.
5
- * The actual chrome (sidebar, AgentSidebar, header bar with AgentToggleButton)
6
- * is provided by `Layout` mounted in `root.tsx`.
3
+ * DispatchShell registers the per-page title (with an optional click-to-open
4
+ * description popover) with the HeaderActions store for layouts that expose
5
+ * that metadata.
7
6
  */
8
7
  export declare function DispatchShell({ title, description, children, }: {
9
8
  title: string;
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch-shell.d.ts","sourceRoot":"","sources":["../../src/components/dispatch-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAOvC;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,WAAW,EACX,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB,mDAmCA"}
1
+ {"version":3,"file":"dispatch-shell.d.ts","sourceRoot":"","sources":["../../src/components/dispatch-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAOvC;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,WAAW,EACX,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB,mDAmCA"}
@@ -6,10 +6,9 @@ import { dispatchDocsHrefForPath, DocsLink } from "./docs-link.js";
6
6
  import { useSetPageTitle } from "./layout/HeaderActions.js";
7
7
  import { Popover, PopoverContent, PopoverTrigger } from "./ui/popover.js";
8
8
  /**
9
- * DispatchShell renders the per-page title (with an optional click-to-open
10
- * description popover) into the global header via the HeaderActions store.
11
- * The actual chrome (sidebar, AgentSidebar, header bar with AgentToggleButton)
12
- * is provided by `Layout` mounted in `root.tsx`.
9
+ * DispatchShell registers the per-page title (with an optional click-to-open
10
+ * description popover) with the HeaderActions store for layouts that expose
11
+ * that metadata.
13
12
  */
14
13
  export function DispatchShell({ title, description, children, }) {
15
14
  const t = useT();
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch-shell.js","sourceRoot":"","sources":["../../src/components/dispatch-shell.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEvE;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,KAAK,EACL,WAAW,EACX,QAAQ,GAKT;IACC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IACjB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,uBAAuB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5D,eAAe,CACb,eAAK,SAAS,EAAC,iCAAiC,aAC9C,aAAI,SAAS,EAAC,+DAA+D,YAC1E,KAAK,GACH,EACJ,QAAQ,CAAC,CAAC,CAAC,CACV,KAAC,QAAQ,IAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,KAAK,gBAAgB,GAAI,CACnE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAChB,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,0IAA0I,gBACxI,CAAC,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,CAAC,YAEtD,KAAC,cAAc,IAAC,SAAS,EAAC,aAAa,GAAG,GACnC,GACM,EACjB,KAAC,cAAc,IACb,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,OAAO,EACb,SAAS,EAAC,kCAAkC,YAE3C,WAAW,GACG,IACT,CACX,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;IAEF,OAAO,4BAAG,QAAQ,GAAI,CAAC;AACzB,CAAC","sourcesContent":["import { useT } from \"@agent-native/core/client/i18n\";\nimport { IconInfoCircle } from \"@tabler/icons-react\";\nimport { type ReactNode } from \"react\";\nimport { useLocation } from \"react-router\";\n\nimport { dispatchDocsHrefForPath, DocsLink } from \"./docs-link\";\nimport { useSetPageTitle } from \"./layout/HeaderActions\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./ui/popover\";\n\n/**\n * DispatchShell renders the per-page title (with an optional click-to-open\n * description popover) into the global header via the HeaderActions store.\n * The actual chrome (sidebar, AgentSidebar, header bar with AgentToggleButton)\n * is provided by `Layout` mounted in `root.tsx`.\n */\nexport function DispatchShell({\n title,\n description,\n children,\n}: {\n title: string;\n description?: string;\n children: ReactNode;\n}) {\n const t = useT();\n const location = useLocation();\n const docsHref = dispatchDocsHrefForPath(location.pathname);\n useSetPageTitle(\n <div className=\"flex items-center gap-2 min-w-0\">\n <h1 className=\"text-lg font-semibold tracking-tight truncate text-foreground\">\n {title}\n </h1>\n {docsHref ? (\n <DocsLink href={docsHref} label={`Open ${title} documentation`} />\n ) : description ? (\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"inline-flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground/70 hover:bg-accent hover:text-foreground cursor-pointer\"\n aria-label={t(\"dispatch.sidebar.aboutPage\", { title })}\n >\n <IconInfoCircle className=\"h-3.5 w-3.5\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n side=\"bottom\"\n align=\"start\"\n className=\"max-w-72 text-xs leading-relaxed\"\n >\n {description}\n </PopoverContent>\n </Popover>\n ) : null}\n </div>,\n );\n\n return <>{children}</>;\n}\n"]}
1
+ {"version":3,"file":"dispatch-shell.js","sourceRoot":"","sources":["../../src/components/dispatch-shell.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEvE;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,KAAK,EACL,WAAW,EACX,QAAQ,GAKT;IACC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IACjB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,uBAAuB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5D,eAAe,CACb,eAAK,SAAS,EAAC,iCAAiC,aAC9C,aAAI,SAAS,EAAC,+DAA+D,YAC1E,KAAK,GACH,EACJ,QAAQ,CAAC,CAAC,CAAC,CACV,KAAC,QAAQ,IAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,KAAK,gBAAgB,GAAI,CACnE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAChB,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,0IAA0I,gBACxI,CAAC,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,CAAC,YAEtD,KAAC,cAAc,IAAC,SAAS,EAAC,aAAa,GAAG,GACnC,GACM,EACjB,KAAC,cAAc,IACb,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,OAAO,EACb,SAAS,EAAC,kCAAkC,YAE3C,WAAW,GACG,IACT,CACX,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;IAEF,OAAO,4BAAG,QAAQ,GAAI,CAAC;AACzB,CAAC","sourcesContent":["import { useT } from \"@agent-native/core/client/i18n\";\nimport { IconInfoCircle } from \"@tabler/icons-react\";\nimport { type ReactNode } from \"react\";\nimport { useLocation } from \"react-router\";\n\nimport { dispatchDocsHrefForPath, DocsLink } from \"./docs-link\";\nimport { useSetPageTitle } from \"./layout/HeaderActions\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./ui/popover\";\n\n/**\n * DispatchShell registers the per-page title (with an optional click-to-open\n * description popover) with the HeaderActions store for layouts that expose\n * that metadata.\n */\nexport function DispatchShell({\n title,\n description,\n children,\n}: {\n title: string;\n description?: string;\n children: ReactNode;\n}) {\n const t = useT();\n const location = useLocation();\n const docsHref = dispatchDocsHrefForPath(location.pathname);\n useSetPageTitle(\n <div className=\"flex items-center gap-2 min-w-0\">\n <h1 className=\"text-lg font-semibold tracking-tight truncate text-foreground\">\n {title}\n </h1>\n {docsHref ? (\n <DocsLink href={docsHref} label={`Open ${title} documentation`} />\n ) : description ? (\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"inline-flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground/70 hover:bg-accent hover:text-foreground cursor-pointer\"\n aria-label={t(\"dispatch.sidebar.aboutPage\", { title })}\n >\n <IconInfoCircle className=\"h-3.5 w-3.5\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n side=\"bottom\"\n align=\"start\"\n className=\"max-w-72 text-xs leading-relaxed\"\n >\n {description}\n </PopoverContent>\n </Popover>\n ) : null}\n </div>,\n );\n\n return <>{children}</>;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Layout.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Layout.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Layout.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Layout.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { CHAT_FIRST_MODE_CHANGED_EVENT, AgentChatSurface, chatFirstSurfaceTabId, AgentSidebar, ChatFirstSurfacePanelToggle, closeChatFirstSessionWatch, emitChatFirstSessionWatch, getChatFirstSurfaceTabsStore, focusAgentChat, navigateWithAgentChatViewTransition, readChatFirstAppLayout, readChatFirstMode, resolveChatFirstBrowserTarget, resolveChatFirstAppTarget, subscribeChatFirstOpenBrowser, subscribeChatFirstOpenApp, useChatFirstSessionWatch, useChatFirstSurfacePanel, useChatFirstSurfaceResize, useChatFirstSurfaceTabs, useAgentChatHomeHandoff, useAgentChatHomeHandoffLinks, useChatThreads, } from "@agent-native/core/client/agent-chat";
2
+ import { CHAT_FIRST_MODE_CHANGED_EVENT, AgentChatSurface, AgentToggleButton, chatFirstSurfaceTabId, AgentSidebar, ChatFirstSurfacePanelToggle, closeChatFirstSessionWatch, emitChatFirstSessionWatch, getChatFirstSurfaceTabsStore, focusAgentChat, navigateWithAgentChatViewTransition, readChatFirstAppLayout, readChatFirstMode, resolveChatFirstBrowserTarget, resolveChatFirstAppTarget, subscribeChatFirstOpenBrowser, subscribeChatFirstOpenApp, useChatFirstSessionWatch, useChatFirstSurfacePanel, useChatFirstSurfaceResize, useChatFirstSurfaceTabs, useAgentChatHomeHandoff, useAgentChatHomeHandoffLinks, useChatThreads, } from "@agent-native/core/client/agent-chat";
3
3
  import { appBasePath, appPath } from "@agent-native/core/client/api-path";
4
4
  import { readClientAppState, writeClientAppState, } from "@agent-native/core/client/application-state";
5
5
  import { ChatFirstAgentsPane, ChatFirstAppPane, ChatFirstAppsRail, ChatFirstBrowserPane, ChatFirstChatHistory, ChatFirstPrimaryNavigation, ChatFirstSessionWatchPane, ChatFirstSurfacePanel, ChatFirstSurfaceContent, ChatFirstSurfaceTabs, defaultChatFirstCopy, } from "@agent-native/core/client/chat-first";
@@ -8,10 +8,11 @@ import { useActionQuery } from "@agent-native/core/client/hooks";
8
8
  import { useT } from "@agent-native/core/client/i18n";
9
9
  import { openCommandMenu } from "@agent-native/core/client/navigation";
10
10
  import { InvitationBanner, OrgSwitcher } from "@agent-native/core/client/org";
11
+ import { RunsTray } from "@agent-native/core/client/progress";
11
12
  import { FeedbackButton } from "@agent-native/core/client/ui";
12
13
  import { SidebarFooterActions } from "@agent-native/toolkit/app-shell";
13
14
  import { ChatHistoryRail, } from "@agent-native/toolkit/chat-history";
14
- import { IconApps, IconBrandSlack, IconBrandTelegram, IconCopy, IconEye, IconHierarchy2, IconMessageQuestion, IconBroadcast, IconLayoutSidebarLeftCollapse, IconLayoutSidebarLeftExpand, IconSettings, IconShield, IconSearch, IconWorld, IconDeviceDesktop, IconPlus, } from "@tabler/icons-react";
15
+ import { IconApps, IconBrandSlack, IconBrandTelegram, IconCopy, IconEye, IconHierarchy2, IconMessageQuestion, IconBroadcast, IconLayoutSidebar, IconLayoutSidebarLeftCollapse, IconLayoutSidebarLeftExpand, IconSettings, IconShield, IconSearch, IconWorld, IconDeviceDesktop, IconPlus, } from "@tabler/icons-react";
15
16
  import { createContext, useEffect, useMemo, useRef, useState, useContext, useCallback, } from "react";
16
17
  import { Link, useLocation, useNavigate } from "react-router";
17
18
  import { toast } from "sonner";
@@ -21,12 +22,13 @@ import { isDispatchWorkspaceAppId, isPathMountedWorkspaceApp, isWorkspaceAppVisi
21
22
  import { CHAT_FIRST_PANE_STATE_KEY } from "../../shared/chat-first-pane.js";
22
23
  import { AppIcon } from "../app-icon.js";
23
24
  import { CreateAppPopover } from "../create-app-popover.js";
25
+ import { Button } from "../ui/button.js";
24
26
  import { Sheet, SheetContent, SheetDescription, SheetTitle } from "../ui/sheet.js";
25
27
  import { Skeleton } from "../ui/skeleton.js";
26
28
  import { Tooltip, TooltipContent, TooltipTrigger } from "../ui/tooltip.js";
27
29
  import { WorkspaceAppChatRail, WorkspaceAppFrame, WorkspaceAppKeepAlive, } from "../workspace-app-host.js";
28
30
  import { Header } from "./Header.js";
29
- import { HeaderActionsProvider } from "./HeaderActions.js";
31
+ import { HeaderActionsProvider, useHeaderActions, useHeaderTitle, } from "./HeaderActions.js";
30
32
  export { buildChatFirstEmbedSessionInput } from "../workspace-app-host.js";
31
33
  const PRIMARY_NAV_ITEMS = [
32
34
  {
@@ -86,9 +88,8 @@ const DispatchExtensionsContext = createContext(undefined);
86
88
  export function useDispatchExtensions() {
87
89
  return useContext(DispatchExtensionsContext);
88
90
  }
89
- // Routes whose page renders its own toolbar.
90
- // Layout still mounts the sidebar + AgentSidebar, but skips its own Header so
91
- // there's no double-header.
91
+ // Routes whose page renders its own toolbar. Layout skips its sticky chat
92
+ // control so there's no duplicate page chrome.
92
93
  function pageOwnsToolbar(pathname) {
93
94
  if (pathname === "/tools" || pathname.startsWith("/tools/"))
94
95
  return true;
@@ -642,6 +643,8 @@ export function Layout({ children, extensions, agentPageHref, }) {
642
643
  const t = useT();
643
644
  const location = useLocation();
644
645
  const navigate = useNavigate();
646
+ const pageTitle = useHeaderTitle();
647
+ const headerActions = useHeaderActions();
645
648
  const [mobileOpen, setMobileOpen] = useState(false);
646
649
  // Drives renderChatFirstSurfaceTab's app-tab chatSidebar decision below —
647
650
  // the chat-first surface panel is already a full-screen overlay at this
@@ -1272,19 +1275,34 @@ export function Layout({ children, extensions, agentPageHref, }) {
1272
1275
  if (isWorkspaceAppHostRoute) {
1273
1276
  return (_jsx(DispatchExtensionsContext.Provider, { value: extensions, children: _jsx(HeaderActionsProvider, { children: _jsx("div", { "data-dispatch-workspace-app-chrome-less": true, className: "h-screen w-full overflow-hidden bg-background", children: children }) }) }));
1274
1277
  }
1275
- const showHeader = !isChatRoute && !pageOwnsToolbar(localPathname);
1278
+ const showAgentControls = !isChatRoute && !pageOwnsToolbar(localPathname);
1276
1279
  function openAskAgentFullscreen() {
1277
1280
  focusAgentChat();
1278
1281
  navigateWithAgentChatViewTransition(navigate, dispatchNavLinkTarget("/chat"));
1279
1282
  }
1283
+ function openRunThread(threadId) {
1284
+ navigate("/chat", {
1285
+ state: {
1286
+ dispatchThread: {
1287
+ id: `${Date.now()}-${threadId}`,
1288
+ threadId,
1289
+ },
1290
+ },
1291
+ });
1292
+ window.requestAnimationFrame(() => {
1293
+ window.dispatchEvent(new CustomEvent("agent-chat:open-thread", {
1294
+ detail: { threadId },
1295
+ }));
1296
+ });
1297
+ }
1280
1298
  const sidebarSuggestions = [
1281
1299
  t("dispatch.sidebar.suggestionBuildApp"),
1282
1300
  t("dispatch.sidebar.suggestionRouteSlack"),
1283
1301
  t("dispatch.sidebar.suggestionGrantKey"),
1284
1302
  ];
1285
- const appContent = (_jsxs("div", { className: "relative flex h-full min-w-0 flex-1 flex-col overflow-hidden", children: [showHeader ? _jsx(Header, { onOpenMobile: () => setMobileOpen(true) }) : null, _jsx(InvitationBanner, {}), isChatRoute && chatFirstMode && chatFirstHasActiveChat ? (_jsx(ChatFirstSurfacePanelToggle, { open: chatFirstSurfacePanel.open, onToggle: chatFirstSurfacePanel.toggle, className: CHAT_FIRST_SURFACE_PANEL_TOGGLE_CLASS_NAME })) : null, isChatRoute && chatFirstMode && chatFirstNotice ? (_jsxs("div", { className: "dispatch-chat-first-notice", role: "status", "aria-live": "polite", children: [_jsx("span", { children: chatFirstNotice }), _jsx("button", { type: "button", onClick: () => setChatFirstNotice(null), "aria-label": "Dismiss app notice", children: "Dismiss" })] })) : null, _jsx("main", { className: cn("flex-1", isChatRoute || isWorkspaceAppRoute
1286
- ? "min-h-0 overflow-hidden"
1287
- : "overflow-y-auto"), children: showHeader ? (_jsx("div", { className: "mx-auto max-w-7xl space-y-10 px-4 py-6 sm:px-6", children: children })) : (children) })] }));
1303
+ const appContent = (_jsxs("div", { className: "relative flex h-full min-h-0 min-w-0 flex-1 flex-col overflow-hidden", children: [_jsx(InvitationBanner, {}), isChatRoute && chatFirstMode && chatFirstHasActiveChat ? (_jsx(ChatFirstSurfacePanelToggle, { open: chatFirstSurfacePanel.open, onToggle: chatFirstSurfacePanel.toggle, className: CHAT_FIRST_SURFACE_PANEL_TOGGLE_CLASS_NAME })) : null, isChatRoute && chatFirstMode && chatFirstNotice ? (_jsxs("div", { className: "dispatch-chat-first-notice", role: "status", "aria-live": "polite", children: [_jsx("span", { children: chatFirstNotice }), _jsx("button", { type: "button", onClick: () => setChatFirstNotice(null), "aria-label": "Dismiss app notice", children: "Dismiss" })] })) : null, _jsx("main", { className: cn("min-h-0 flex-1", isChatRoute || isWorkspaceAppRoute
1304
+ ? "overflow-hidden"
1305
+ : "overflow-y-auto"), children: showAgentControls ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "pointer-events-none sticky top-0 z-10 flex justify-end px-4 pt-2 lg:px-6", children: [_jsx(Button, { variant: "ghost", size: "icon", className: "pointer-events-auto absolute start-4 top-2 h-8 w-8 lg:hidden", onClick: () => setMobileOpen(true), "aria-label": "Open navigation", children: _jsx(IconLayoutSidebar, { className: "h-4 w-4" }) }), _jsxs("div", { className: "pointer-events-auto flex items-center gap-1", children: [_jsx(RunsTray, { limit: 8, onOpenThread: openRunThread }), _jsx(AgentToggleButton, { className: "h-8 w-8 rounded-md bg-background/80 hover:bg-accent" })] })] }), _jsxs("div", { className: "mx-auto max-w-7xl space-y-10 px-4 py-6 sm:px-6", children: [localPathname !== "/overview" && (pageTitle || headerActions) ? (_jsxs("div", { className: "flex min-w-0 items-center justify-between gap-3", children: [_jsx("div", { className: "min-w-0 flex-1", children: pageTitle }), headerActions ? (_jsx("div", { className: "flex shrink-0 items-center gap-2", children: headerActions })) : null] })) : null, children] })] })) : (children) })] }));
1288
1306
  const chatFirstSurfaceTabsBar = activeChatFirstSurfaceTab?.kind === "app" ? null : (_jsx(ChatFirstSurfaceTabs, { tabs: chatFirstSurfaceTabs.tabs, activeTabId: chatFirstSurfaceTabs.activeTabId, onActivate: activateChatFirstSurfaceTab, onClose: closeChatFirstSurfaceTab, onCloseOthers: (tab) => {
1289
1307
  activateChatFirstSurfaceTab(tab);
1290
1308
  chatFirstSurfaceTabsStore.closeOthers(tab.id);