@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.
- package/dist/actions/create-browser-chat-session.js +1 -1
- package/dist/actions/create-browser-chat-session.js.map +1 -1
- package/dist/actions/get-agent-thread-debug.js +1 -1
- package/dist/actions/get-agent-thread-debug.js.map +1 -1
- package/dist/components/dispatch-shell.d.ts +3 -4
- package/dist/components/dispatch-shell.d.ts.map +1 -1
- package/dist/components/dispatch-shell.js +3 -4
- package/dist/components/dispatch-shell.js.map +1 -1
- package/dist/components/layout/Layout.d.ts.map +1 -1
- package/dist/components/layout/Layout.js +28 -10
- package/dist/components/layout/Layout.js.map +1 -1
- package/dist/server/lib/app-creation-store.js +1 -1
- package/dist/server/lib/app-creation-store.js.map +1 -1
- package/dist/server/lib/curated-workspace-templates.js +1 -1
- package/dist/server/lib/curated-workspace-templates.js.map +1 -1
- package/dist/server/lib/dispatch-integrations.js +2 -2
- package/dist/server/lib/dispatch-integrations.js.map +1 -1
- package/dist/server/lib/mcp-gateway.d.ts.map +1 -1
- package/dist/server/lib/mcp-gateway.js +12 -2
- package/dist/server/lib/mcp-gateway.js.map +1 -1
- package/dist/server/lib/onboarding-steps.js +1 -1
- package/dist/server/lib/onboarding-steps.js.map +1 -1
- package/package.json +4 -4
- package/src/actions/create-browser-chat-session.spec.ts +1 -1
- package/src/actions/create-browser-chat-session.ts +1 -1
- package/src/actions/get-agent-thread-debug.ts +1 -1
- package/src/components/dispatch-shell.tsx +3 -4
- package/src/components/layout/Layout.app-chat.spec.ts +16 -0
- package/src/components/layout/Layout.tsx +65 -13
- package/src/server/lib/app-creation-store.ts +1 -1
- package/src/server/lib/curated-workspace-templates.ts +1 -1
- package/src/server/lib/dispatch-integrations.spec.ts +1 -1
- package/src/server/lib/dispatch-integrations.ts +2 -2
- package/src/server/lib/mcp-gateway.ts +23 -9
- 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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
4
|
-
* description popover)
|
|
5
|
-
*
|
|
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
|
|
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
|
|
10
|
-
* description popover)
|
|
11
|
-
*
|
|
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
|
|
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":"AAAA,OAAO,
|
|
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
|
-
//
|
|
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
|
|
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: [
|
|
1286
|
-
? "
|
|
1287
|
-
: "overflow-y-auto"), 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);
|