@athenaintel/react 0.53.0 → 0.54.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 (137) hide show
  1. package/README.md +24 -1
  2. package/dist/agent-runtime/src/call-recap.cjs +2 -3
  3. package/dist/agent-runtime/src/call-recap.cjs.map +1 -1
  4. package/dist/agent-runtime/src/call-recap.d.ts +1 -2
  5. package/dist/agent-runtime/src/call-recap.js +1 -2
  6. package/dist/agent-runtime/src/call-recap.js.map +1 -1
  7. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs +7 -3
  8. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -1
  9. package/dist/agent-runtime/src/deep-agent-transport-recipe.d.ts +10 -2
  10. package/dist/agent-runtime/src/deep-agent-transport-recipe.js +8 -4
  11. package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -1
  12. package/dist/agent-runtime/src/desktop-handoff.d.ts +7 -0
  13. package/dist/agent-runtime/src/dictation-session.d.ts +158 -0
  14. package/dist/agent-runtime/src/edit-command.cjs +6 -0
  15. package/dist/agent-runtime/src/edit-command.cjs.map +1 -1
  16. package/dist/agent-runtime/src/edit-command.d.ts +8 -0
  17. package/dist/agent-runtime/src/edit-command.js +6 -0
  18. package/dist/agent-runtime/src/edit-command.js.map +1 -1
  19. package/dist/agent-runtime/src/generated/runconfig-contract.cjs +6 -0
  20. package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -1
  21. package/dist/agent-runtime/src/generated/runconfig-contract.d.ts +13 -0
  22. package/dist/agent-runtime/src/generated/runconfig-contract.js +6 -0
  23. package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -1
  24. package/dist/agent-runtime/src/index.d.ts +6 -6
  25. package/dist/agent-runtime/src/message-window.cjs +111 -7
  26. package/dist/agent-runtime/src/message-window.cjs.map +1 -1
  27. package/dist/agent-runtime/src/message-window.d.ts +66 -6
  28. package/dist/agent-runtime/src/message-window.js +112 -8
  29. package/dist/agent-runtime/src/message-window.js.map +1 -1
  30. package/dist/agent-runtime/src/offline-status.cjs.map +1 -1
  31. package/dist/agent-runtime/src/offline-status.d.ts +33 -0
  32. package/dist/agent-runtime/src/offline-status.js.map +1 -1
  33. package/dist/agent-runtime/src/runtime.d.ts +4 -3
  34. package/dist/agent-runtime/src/subagent-transcripts.cjs +23 -1
  35. package/dist/agent-runtime/src/subagent-transcripts.cjs.map +1 -1
  36. package/dist/agent-runtime/src/subagent-transcripts.js +25 -3
  37. package/dist/agent-runtime/src/subagent-transcripts.js.map +1 -1
  38. package/dist/agent-runtime/src/subagents.cjs +112 -0
  39. package/dist/agent-runtime/src/subagents.cjs.map +1 -1
  40. package/dist/agent-runtime/src/subagents.d.ts +103 -0
  41. package/dist/agent-runtime/src/subagents.js +113 -1
  42. package/dist/agent-runtime/src/subagents.js.map +1 -1
  43. package/dist/agent-runtime/src/thread-handoff-protocol.d.ts +37 -9
  44. package/dist/agent-runtime/src/thread-handoff.d.ts +1 -1
  45. package/dist/agent-runtime/src/tool-metadata.cjs +8 -0
  46. package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -1
  47. package/dist/agent-runtime/src/tool-metadata.js +8 -0
  48. package/dist/agent-runtime/src/tool-metadata.js.map +1 -1
  49. package/dist/agent-runtime/src/use-deep-agent-thread.cjs +6 -0
  50. package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -1
  51. package/dist/agent-runtime/src/use-deep-agent-thread.js +7 -1
  52. package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -1
  53. package/dist/agent-runtime/src/use-deep-agent-window-sync.cjs +39 -10
  54. package/dist/agent-runtime/src/use-deep-agent-window-sync.cjs.map +1 -1
  55. package/dist/agent-runtime/src/use-deep-agent-window-sync.d.ts +14 -4
  56. package/dist/agent-runtime/src/use-deep-agent-window-sync.js +41 -12
  57. package/dist/agent-runtime/src/use-deep-agent-window-sync.js.map +1 -1
  58. package/dist/agent-runtime/src/use-thread-handoff-flow.d.ts +5 -9
  59. package/dist/agent-runtime/src/voice-presentation.cjs +34 -0
  60. package/dist/agent-runtime/src/voice-presentation.cjs.map +1 -1
  61. package/dist/agent-runtime/src/voice-presentation.d.ts +35 -0
  62. package/dist/agent-runtime/src/voice-presentation.js +34 -0
  63. package/dist/agent-runtime/src/voice-presentation.js.map +1 -1
  64. package/dist/assets/AthenaAssetEmbed.cjs +4 -2
  65. package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
  66. package/dist/assets/AthenaAssetEmbed.d.ts +17 -8
  67. package/dist/assets/AthenaAssetEmbed.js +4 -2
  68. package/dist/assets/AthenaAssetEmbed.js.map +1 -1
  69. package/dist/assets/use-asset-embed.cjs.map +1 -1
  70. package/dist/assets/use-asset-embed.d.ts +7 -5
  71. package/dist/assets/use-asset-embed.js.map +1 -1
  72. package/dist/auth/account-identity.cjs +69 -0
  73. package/dist/auth/account-identity.cjs.map +1 -0
  74. package/dist/auth/account-identity.d.ts +57 -0
  75. package/dist/auth/account-identity.js +69 -0
  76. package/dist/auth/account-identity.js.map +1 -0
  77. package/dist/chat/AthenaChat.cjs +1 -1
  78. package/dist/chat/AthenaChat.cjs.map +1 -1
  79. package/dist/chat/AthenaChat.js +1 -1
  80. package/dist/chat/AthenaChat.js.map +1 -1
  81. package/dist/chat/super-grouping/toolkit-map.cjs +1 -0
  82. package/dist/chat/super-grouping/toolkit-map.cjs.map +1 -1
  83. package/dist/chat/super-grouping/toolkit-map.js +1 -0
  84. package/dist/chat/super-grouping/toolkit-map.js.map +1 -1
  85. package/dist/chat/use-statewire-approval-request.cjs +5 -5
  86. package/dist/chat/use-statewire-approval-request.cjs.map +1 -1
  87. package/dist/chat/use-statewire-approval-request.d.ts +7 -0
  88. package/dist/chat/use-statewire-approval-request.js +5 -5
  89. package/dist/chat/use-statewire-approval-request.js.map +1 -1
  90. package/dist/chat-ui/mentions/use-account-workspace-id.cjs +18 -58
  91. package/dist/chat-ui/mentions/use-account-workspace-id.cjs.map +1 -1
  92. package/dist/chat-ui/mentions/use-account-workspace-id.js +18 -58
  93. package/dist/chat-ui/mentions/use-account-workspace-id.js.map +1 -1
  94. package/dist/chat-ui/messages/voice-delegation-card.cjs +93 -25
  95. package/dist/chat-ui/messages/voice-delegation-card.cjs.map +1 -1
  96. package/dist/chat-ui/messages/voice-delegation-card.d.ts +16 -7
  97. package/dist/chat-ui/messages/voice-delegation-card.js +95 -27
  98. package/dist/chat-ui/messages/voice-delegation-card.js.map +1 -1
  99. package/dist/chat-ui/thread/handoff-cursor.cjs +30 -5
  100. package/dist/chat-ui/thread/handoff-cursor.cjs.map +1 -1
  101. package/dist/chat-ui/thread/handoff-cursor.d.ts +13 -5
  102. package/dist/chat-ui/thread/handoff-cursor.js +32 -7
  103. package/dist/chat-ui/thread/handoff-cursor.js.map +1 -1
  104. package/dist/collab/client.cjs +94 -6
  105. package/dist/collab/client.cjs.map +1 -1
  106. package/dist/collab/client.d.ts +27 -0
  107. package/dist/collab/client.js +94 -6
  108. package/dist/collab/client.js.map +1 -1
  109. package/dist/collab/index.d.ts +1 -1
  110. package/dist/keryx-http/src/initial-sync.cjs +121 -0
  111. package/dist/keryx-http/src/initial-sync.cjs.map +1 -0
  112. package/dist/keryx-http/src/initial-sync.d.ts +77 -0
  113. package/dist/keryx-http/src/initial-sync.js +104 -0
  114. package/dist/keryx-http/src/initial-sync.js.map +1 -0
  115. package/dist/keryx-http/src/unconfirmed-update-attributions.cjs +8 -0
  116. package/dist/keryx-http/src/unconfirmed-update-attributions.cjs.map +1 -1
  117. package/dist/keryx-http/src/unconfirmed-update-attributions.d.ts +6 -0
  118. package/dist/keryx-http/src/unconfirmed-update-attributions.js +8 -0
  119. package/dist/keryx-http/src/unconfirmed-update-attributions.js.map +1 -1
  120. package/dist/react/package.json.cjs +1 -1
  121. package/dist/react/package.json.js +1 -1
  122. package/dist/styles.css +1 -1
  123. package/dist/threads/api.cjs +1 -2
  124. package/dist/threads/api.cjs.map +1 -1
  125. package/dist/threads/api.d.ts +3 -2
  126. package/dist/threads/api.js +1 -2
  127. package/dist/threads/api.js.map +1 -1
  128. package/dist/threads/statewire-thread-list.cjs +5 -7
  129. package/dist/threads/statewire-thread-list.cjs.map +1 -1
  130. package/dist/threads/statewire-thread-list.js +7 -9
  131. package/dist/threads/statewire-thread-list.js.map +1 -1
  132. package/dist/tools/subagent-task-tool-ui.cjs +15 -5
  133. package/dist/tools/subagent-task-tool-ui.cjs.map +1 -1
  134. package/dist/tools/subagent-task-tool-ui.d.ts +5 -4
  135. package/dist/tools/subagent-task-tool-ui.js +16 -6
  136. package/dist/tools/subagent-task-tool-ui.js.map +1 -1
  137. package/package.json +2 -2
@@ -0,0 +1,57 @@
1
+ import { type QueryClient, type UseQueryResult } from '@tanstack/react-query';
2
+ import { type CredentialResolver } from '../runtime/credential-renewal';
3
+ import type { AthenaStatewireTokenGetter } from '../runtime/statewire-auth-headers';
4
+ import { type AccountIdentity } from '../threads/api';
5
+ /**
6
+ * The credential an identity read is sent with, as its key names it: never
7
+ * the secret itself.
8
+ */
9
+ export interface AccountIdentityCredential {
10
+ /** Agora's API base the read goes to. */
11
+ backendUrl: string;
12
+ /** The signed-in person (`AthenaAuthContext`'s user id), when one is. */
13
+ principal: string | undefined;
14
+ apiKey: string | undefined;
15
+ /** The token the host holds now. A renewal for the same person and scope keeps the key. */
16
+ heldToken: string | null | undefined;
17
+ /** The provider's token getter (`config.getToken`), by identity. */
18
+ tokenGetter: AthenaStatewireTokenGetter | undefined;
19
+ }
20
+ /** What one read presents, resolved when it is sent; `force` renews a refused token. */
21
+ export interface AccountIdentityAuth {
22
+ apiKey?: string;
23
+ token?: string | null;
24
+ }
25
+ /**
26
+ * The one key a credential's identity is read under, whoever reads it: the
27
+ * backend, the signed-in person, the API key's fingerprint, the provider's
28
+ * token getter, who the held token acts as and which workspace it is scoped
29
+ * to, and the provider's credential identity epoch
30
+ * (`useAthenaCredentialIdentityEpoch`), which moves once the getter has handed
31
+ * out a token that acts as someone else.
32
+ */
33
+ export declare function accountIdentityQueryKey(credential: AccountIdentityCredential, identityEpoch: number): readonly unknown[];
34
+ /**
35
+ * The credential's agora identity (`GET /api/v0/me`): one read per credential,
36
+ * through the query cache, shared by every reader of it. `AthenaChat` (its
37
+ * mentions workspace and the viewer behind its answer labels) and the session
38
+ * list (the conversation index it attaches to) read it here under one key
39
+ * (`accountIdentityQueryKey`), so a page with both sends one request. Never a
40
+ * process-wide map: the key names the credential and never the secret. A
41
+ * renewal for the same person and scope keeps the answer; an API-key switch, a
42
+ * held token scoped to another workspace, or a getter now signing in someone
43
+ * else, reads `/me` again under a new key, never a cached answer for the
44
+ * previous credential. The epoch follows the person, not the scope: a getter
45
+ * that alone hands out the same person's token for another workspace is read
46
+ * again once the answer goes stale.
47
+ *
48
+ * `resolveAuth` presents the credential the key names, so whichever reader
49
+ * sends the request, the answer is the same. `enabled` is the reader's own.
50
+ * `queryClient` defaults to the one in context.
51
+ */
52
+ export declare function useAccountIdentityQuery({ credential, resolveAuth, enabled, queryClient, }: {
53
+ credential: AccountIdentityCredential;
54
+ resolveAuth: CredentialResolver<AccountIdentityAuth>;
55
+ enabled: boolean;
56
+ queryClient?: QueryClient;
57
+ }): UseQueryResult<AccountIdentity>;
@@ -0,0 +1,69 @@
1
+ import { useQuery } from "@tanstack/react-query";
2
+ import { keyPartFingerprint } from "../lib/use-athena-rest-query.js";
3
+ import { withCredentialRenewal } from "../runtime/credential-renewal.js";
4
+ import { fetchAccountIdentity } from "../threads/api.js";
5
+ import { useAthenaCredentialIdentityEpoch } from "./AthenaCredentialSourceContext.js";
6
+ import { jwtSubject, jwtScope } from "./credential-source.js";
7
+ const tokenGetterIds = /* @__PURE__ */ new WeakMap();
8
+ let lastTokenGetterId = 0;
9
+ function tokenGetterId(getToken) {
10
+ if (getToken === void 0) return "";
11
+ let id = tokenGetterIds.get(getToken);
12
+ if (id === void 0) {
13
+ lastTokenGetterId += 1;
14
+ id = lastTokenGetterId;
15
+ tokenGetterIds.set(getToken, id);
16
+ }
17
+ return `getter:${id}`;
18
+ }
19
+ function heldTokenIdentity(token) {
20
+ if (!token) return "";
21
+ const subject = jwtSubject(token);
22
+ if (subject === null) return `token:${keyPartFingerprint(token)}`;
23
+ const scope = jwtScope(token);
24
+ return scope === null ? `sub:${keyPartFingerprint(subject)}` : `sub:${keyPartFingerprint(subject)}|scope:${keyPartFingerprint(scope)}`;
25
+ }
26
+ function accountIdentityQueryKey(credential, identityEpoch) {
27
+ return [
28
+ "athena-sdk",
29
+ "account",
30
+ credential.backendUrl,
31
+ credential.principal ?? "",
32
+ credential.apiKey ? keyPartFingerprint(credential.apiKey) : "",
33
+ tokenGetterId(credential.tokenGetter),
34
+ heldTokenIdentity(credential.heldToken),
35
+ identityEpoch
36
+ ];
37
+ }
38
+ const NO_RETRY_STATUSES = /* @__PURE__ */ new Set([401, 403, 404, 405, 409]);
39
+ function retryTransient(failureCount, error) {
40
+ const status = Reflect.get(error, "status");
41
+ if (typeof status === "number" && NO_RETRY_STATUSES.has(status)) return false;
42
+ return failureCount < 2;
43
+ }
44
+ function useAccountIdentityQuery({
45
+ credential,
46
+ resolveAuth,
47
+ enabled,
48
+ queryClient
49
+ }) {
50
+ const identityEpoch = useAthenaCredentialIdentityEpoch();
51
+ return useQuery(
52
+ {
53
+ queryKey: accountIdentityQueryKey(credential, identityEpoch),
54
+ queryFn: ({ signal }) => withCredentialRenewal(
55
+ resolveAuth,
56
+ (auth) => fetchAccountIdentity(credential.backendUrl, auth, { signal })
57
+ ),
58
+ enabled,
59
+ retry: retryTransient,
60
+ staleTime: 6e4
61
+ },
62
+ queryClient
63
+ );
64
+ }
65
+ export {
66
+ accountIdentityQueryKey,
67
+ useAccountIdentityQuery
68
+ };
69
+ //# sourceMappingURL=account-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-identity.js","sources":["../../src/auth/account-identity.ts"],"sourcesContent":["import { type QueryClient, type UseQueryResult, useQuery } from '@tanstack/react-query';\nimport { keyPartFingerprint } from '../lib/use-athena-rest-query';\nimport { type CredentialResolver, withCredentialRenewal } from '../runtime/credential-renewal';\nimport type { AthenaStatewireTokenGetter } from '../runtime/statewire-auth-headers';\nimport { type AccountIdentity, fetchAccountIdentity } from '../threads/api';\nimport { useAthenaCredentialIdentityEpoch } from './AthenaCredentialSourceContext';\nimport { jwtScope, jwtSubject } from './credential-source';\n\n/**\n * The credential an identity read is sent with, as its key names it: never\n * the secret itself.\n */\nexport interface AccountIdentityCredential {\n /** Agora's API base the read goes to. */\n backendUrl: string;\n /** The signed-in person (`AthenaAuthContext`'s user id), when one is. */\n principal: string | undefined;\n apiKey: string | undefined;\n /** The token the host holds now. A renewal for the same person and scope keeps the key. */\n heldToken: string | null | undefined;\n /** The provider's token getter (`config.getToken`), by identity. */\n tokenGetter: AthenaStatewireTokenGetter | undefined;\n}\n\n/** What one read presents, resolved when it is sent; `force` renews a refused token. */\nexport interface AccountIdentityAuth {\n apiKey?: string;\n token?: string | null;\n}\n\n/** One id per token getter, so the key can name a getter without holding it. */\nconst tokenGetterIds = new WeakMap<AthenaStatewireTokenGetter, number>();\nlet lastTokenGetterId = 0;\n\nfunction tokenGetterId(getToken: AthenaStatewireTokenGetter | undefined): string {\n if (getToken === undefined) return '';\n let id = tokenGetterIds.get(getToken);\n if (id === undefined) {\n lastTokenGetterId += 1;\n id = lastTokenGetterId;\n tokenGetterIds.set(getToken, id);\n }\n return `getter:${id}`;\n}\n\n/**\n * Who a held token acts as, and where, without the token: its JWT subject and\n * the claims scoping it to a workspace or org (`jwtScope`), or the token\n * itself when it is opaque, fingerprinted. A renewal for the same person and\n * scope keeps it, so a rotation is not a new identity; the same person's token\n * scoped to another workspace is.\n */\nfunction heldTokenIdentity(token: string | null | undefined): string {\n if (!token) return '';\n const subject = jwtSubject(token);\n if (subject === null) return `token:${keyPartFingerprint(token)}`;\n const scope = jwtScope(token);\n return scope === null\n ? `sub:${keyPartFingerprint(subject)}`\n : `sub:${keyPartFingerprint(subject)}|scope:${keyPartFingerprint(scope)}`;\n}\n\n/**\n * The one key a credential's identity is read under, whoever reads it: the\n * backend, the signed-in person, the API key's fingerprint, the provider's\n * token getter, who the held token acts as and which workspace it is scoped\n * to, and the provider's credential identity epoch\n * (`useAthenaCredentialIdentityEpoch`), which moves once the getter has handed\n * out a token that acts as someone else.\n */\nexport function accountIdentityQueryKey(\n credential: AccountIdentityCredential,\n identityEpoch: number,\n): readonly unknown[] {\n return [\n 'athena-sdk',\n 'account',\n credential.backendUrl,\n credential.principal ?? '',\n credential.apiKey ? keyPartFingerprint(credential.apiKey) : '',\n tokenGetterId(credential.tokenGetter),\n heldTokenIdentity(credential.heldToken),\n identityEpoch,\n ];\n}\n\n/** A refusal, or a route an older agora lacks, answers the same way again. */\nconst NO_RETRY_STATUSES: ReadonlySet<number> = new Set([401, 403, 404, 405, 409]);\n\n/** Retry a transient failure twice; never a refused credential. */\nfunction retryTransient(failureCount: number, error: Error): boolean {\n const status: unknown = Reflect.get(error, 'status');\n if (typeof status === 'number' && NO_RETRY_STATUSES.has(status)) return false;\n return failureCount < 2;\n}\n\n/**\n * The credential's agora identity (`GET /api/v0/me`): one read per credential,\n * through the query cache, shared by every reader of it. `AthenaChat` (its\n * mentions workspace and the viewer behind its answer labels) and the session\n * list (the conversation index it attaches to) read it here under one key\n * (`accountIdentityQueryKey`), so a page with both sends one request. Never a\n * process-wide map: the key names the credential and never the secret. A\n * renewal for the same person and scope keeps the answer; an API-key switch, a\n * held token scoped to another workspace, or a getter now signing in someone\n * else, reads `/me` again under a new key, never a cached answer for the\n * previous credential. The epoch follows the person, not the scope: a getter\n * that alone hands out the same person's token for another workspace is read\n * again once the answer goes stale.\n *\n * `resolveAuth` presents the credential the key names, so whichever reader\n * sends the request, the answer is the same. `enabled` is the reader's own.\n * `queryClient` defaults to the one in context.\n */\nexport function useAccountIdentityQuery({\n credential,\n resolveAuth,\n enabled,\n queryClient,\n}: {\n credential: AccountIdentityCredential;\n resolveAuth: CredentialResolver<AccountIdentityAuth>;\n enabled: boolean;\n queryClient?: QueryClient;\n}): UseQueryResult<AccountIdentity> {\n const identityEpoch = useAthenaCredentialIdentityEpoch();\n return useQuery(\n {\n queryKey: accountIdentityQueryKey(credential, identityEpoch),\n queryFn: ({ signal }) =>\n withCredentialRenewal(resolveAuth, (auth) =>\n fetchAccountIdentity(credential.backendUrl, auth, { signal }),\n ),\n enabled,\n retry: retryTransient,\n staleTime: 60_000,\n },\n queryClient,\n );\n}\n"],"names":[],"mappings":";;;;;;AA+BA,MAAM,qCAAqB,QAAA;AAC3B,IAAI,oBAAoB;AAExB,SAAS,cAAc,UAA0D;AAC/E,MAAI,aAAa,OAAW,QAAO;AACnC,MAAI,KAAK,eAAe,IAAI,QAAQ;AACpC,MAAI,OAAO,QAAW;AACpB,yBAAqB;AACrB,SAAK;AACL,mBAAe,IAAI,UAAU,EAAE;AAAA,EACjC;AACA,SAAO,UAAU,EAAE;AACrB;AASA,SAAS,kBAAkB,OAA0C;AACnE,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,UAAU,WAAW,KAAK;AAChC,MAAI,YAAY,KAAM,QAAO,SAAS,mBAAmB,KAAK,CAAC;AAC/D,QAAM,QAAQ,SAAS,KAAK;AAC5B,SAAO,UAAU,OACb,OAAO,mBAAmB,OAAO,CAAC,KAClC,OAAO,mBAAmB,OAAO,CAAC,UAAU,mBAAmB,KAAK,CAAC;AAC3E;AAUO,SAAS,wBACd,YACA,eACoB;AACpB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,WAAW,aAAa;AAAA,IACxB,WAAW,SAAS,mBAAmB,WAAW,MAAM,IAAI;AAAA,IAC5D,cAAc,WAAW,WAAW;AAAA,IACpC,kBAAkB,WAAW,SAAS;AAAA,IACtC;AAAA,EAAA;AAEJ;AAGA,MAAM,wCAA6C,IAAI,CAAC,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAGhF,SAAS,eAAe,cAAsB,OAAuB;AACnE,QAAM,SAAkB,QAAQ,IAAI,OAAO,QAAQ;AACnD,MAAI,OAAO,WAAW,YAAY,kBAAkB,IAAI,MAAM,EAAG,QAAO;AACxE,SAAO,eAAe;AACxB;AAoBO,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKoC;AAClC,QAAM,gBAAgB,iCAAA;AACtB,SAAO;AAAA,IACL;AAAA,MACE,UAAU,wBAAwB,YAAY,aAAa;AAAA,MAC3D,SAAS,CAAC,EAAE,OAAA,MACV;AAAA,QAAsB;AAAA,QAAa,CAAC,SAClC,qBAAqB,WAAW,YAAY,MAAM,EAAE,QAAQ;AAAA,MAAA;AAAA,MAEhE;AAAA,MACA,OAAO;AAAA,MACP,WAAW;AAAA,IAAA;AAAA,IAEb;AAAA,EAAA;AAEJ;"}
@@ -1253,7 +1253,7 @@ const AthenaUserMessage = ({
1253
1253
  children: [
1254
1254
  /* @__PURE__ */ jsxRuntime.jsx(MessageDaySeparator, {}),
1255
1255
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 max-w-[75%] flex-col items-end gap-1", children: [
1256
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "aui-user-message-content wrap-break-word rounded-2xl bg-muted/70 px-4 py-2.5 text-foreground", children: /* @__PURE__ */ jsxRuntime.jsx(messageImages.MessageImageGallery, { children: /* @__PURE__ */ jsxRuntime.jsx(react.MessagePrimitive.Parts, { components: partComponents }) }) }),
1256
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "aui-user-message-content wrap-break-word min-w-0 max-w-full rounded-2xl bg-muted/70 px-4 py-2.5 text-foreground", children: /* @__PURE__ */ jsxRuntime.jsx(messageImages.MessageImageGallery, { children: /* @__PURE__ */ jsxRuntime.jsx(react.MessagePrimitive.Parts, { components: partComponents }) }) }),
1257
1257
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "aui-user-message-footer -mr-1 flex items-center gap-1", children: [
1258
1258
  /* @__PURE__ */ jsxRuntime.jsx(MessageTimestamp, { className: "mr-1 group-hover/aui-user-message:opacity-100" }),
1259
1259
  /* @__PURE__ */ jsxRuntime.jsx(messageComponents.BranchPicker, {}),