@manta-eu/react 0.4.0 → 0.5.1

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 (96) hide show
  1. package/README.md +1 -0
  2. package/dist/components/chat-view/Chat.d.ts +27 -1
  3. package/dist/components/chat-view/Chat.d.ts.map +1 -1
  4. package/dist/components/chat-view/Chat.js +76 -18
  5. package/dist/components/chat-view/Chat.js.map +1 -1
  6. package/dist/components/embedded-chat/index.d.ts +1 -1
  7. package/dist/components/embedded-chat/index.d.ts.map +1 -1
  8. package/dist/components/embedded-chat/index.js +1 -1
  9. package/dist/components/embedded-chat/index.js.map +1 -1
  10. package/dist/components/layouts/Sidebar.d.ts.map +1 -1
  11. package/dist/components/layouts/Sidebar.js +4 -2
  12. package/dist/components/layouts/Sidebar.js.map +1 -1
  13. package/dist/components/planning/ActioningView.d.ts.map +1 -1
  14. package/dist/components/planning/ActioningView.js +1 -1
  15. package/dist/components/planning/ActioningView.js.map +1 -1
  16. package/dist/components/planning/ExecutionTopBar.d.ts +1 -0
  17. package/dist/components/planning/ExecutionTopBar.d.ts.map +1 -1
  18. package/dist/components/planning/ExecutionTopBar.js +3 -2
  19. package/dist/components/planning/ExecutionTopBar.js.map +1 -1
  20. package/dist/components/planning/plan-detail-utils.d.ts +1 -0
  21. package/dist/components/planning/plan-detail-utils.d.ts.map +1 -1
  22. package/dist/components/planning/plan-detail-utils.js +5 -2
  23. package/dist/components/planning/plan-detail-utils.js.map +1 -1
  24. package/dist/components/sidebar/nav-user.js +1 -1
  25. package/dist/components/sidebar/nav-user.js.map +1 -1
  26. package/dist/components/tool-invocation-card/ToolOutputRenderer.d.ts.map +1 -1
  27. package/dist/components/tool-invocation-card/ToolOutputRenderer.js +5 -2
  28. package/dist/components/tool-invocation-card/ToolOutputRenderer.js.map +1 -1
  29. package/dist/explain-fact/rule-presentation.d.ts.map +1 -1
  30. package/dist/explain-fact/rule-presentation.js +1 -6
  31. package/dist/explain-fact/rule-presentation.js.map +1 -1
  32. package/dist/explain-fact/tree-model.d.ts +2 -1
  33. package/dist/explain-fact/tree-model.d.ts.map +1 -1
  34. package/dist/explain-fact/tree-model.js +17 -2
  35. package/dist/explain-fact/tree-model.js.map +1 -1
  36. package/dist/hooks/use-connection-problems.d.ts.map +1 -1
  37. package/dist/hooks/use-manual-actions.js +1 -1
  38. package/dist/hooks/use-manual-actions.js.map +1 -1
  39. package/dist/hooks/useAuth.d.ts +1 -0
  40. package/dist/hooks/useAuth.d.ts.map +1 -1
  41. package/dist/hooks/useAuth.js +2 -1
  42. package/dist/hooks/useAuth.js.map +1 -1
  43. package/dist/hooks/useValidateActionPlan.d.ts.map +1 -1
  44. package/dist/lib/chat-types.d.ts +17 -0
  45. package/dist/lib/chat-types.d.ts.map +1 -1
  46. package/dist/lib/chat-types.js.map +1 -1
  47. package/dist/lib/datastore-route-table.d.ts +1 -0
  48. package/dist/lib/datastore-route-table.d.ts.map +1 -1
  49. package/dist/lib/datastore-route-table.js +1 -0
  50. package/dist/lib/datastore-route-table.js.map +1 -1
  51. package/dist/providers/AuthContext.d.ts +1 -0
  52. package/dist/providers/AuthContext.d.ts.map +1 -1
  53. package/dist/providers/AuthContext.js.map +1 -1
  54. package/dist/providers/ChatManagerProvider.d.ts +7 -0
  55. package/dist/providers/ChatManagerProvider.d.ts.map +1 -1
  56. package/dist/providers/ChatManagerProvider.js +129 -16
  57. package/dist/providers/ChatManagerProvider.js.map +1 -1
  58. package/dist/providers/chat-connection-context.d.ts +4 -1
  59. package/dist/providers/chat-connection-context.d.ts.map +1 -1
  60. package/dist/providers/chat-connection-context.js.map +1 -1
  61. package/dist/providers/chat-connection-lifecycle.d.ts +1 -0
  62. package/dist/providers/chat-connection-lifecycle.d.ts.map +1 -1
  63. package/dist/providers/chat-connection-lifecycle.js.map +1 -1
  64. package/dist/providers/chat-socket-auth.d.ts +3 -1
  65. package/dist/providers/chat-socket-auth.d.ts.map +1 -1
  66. package/dist/providers/chat-socket-auth.js +27 -9
  67. package/dist/providers/chat-socket-auth.js.map +1 -1
  68. package/dist/providers/chat-startup-timing.d.ts +14 -0
  69. package/dist/providers/chat-startup-timing.d.ts.map +1 -0
  70. package/dist/providers/chat-startup-timing.js +72 -0
  71. package/dist/providers/chat-startup-timing.js.map +1 -0
  72. package/dist/routes/plans/components/ActionPlansTableColumns.d.ts.map +1 -1
  73. package/dist/routes/plans/components/ActionPlansTableColumns.js +3 -3
  74. package/dist/routes/plans/components/ActionPlansTableColumns.js.map +1 -1
  75. package/package.json +7 -7
  76. package/src/components/chat-view/Chat.tsx +122 -20
  77. package/src/components/embedded-chat/index.tsx +9 -2
  78. package/src/components/layouts/Sidebar.tsx +3 -2
  79. package/src/components/planning/ActioningView.tsx +1 -0
  80. package/src/components/planning/ExecutionTopBar.tsx +14 -2
  81. package/src/components/planning/plan-detail-utils.tsx +6 -2
  82. package/src/components/sidebar/nav-user.tsx +1 -1
  83. package/src/components/tool-invocation-card/ToolOutputRenderer.tsx +5 -2
  84. package/src/explain-fact/rule-presentation.ts +1 -6
  85. package/src/explain-fact/tree-model.ts +23 -1
  86. package/src/hooks/use-manual-actions.ts +1 -1
  87. package/src/hooks/useAuth.ts +3 -1
  88. package/src/lib/chat-types.ts +18 -0
  89. package/src/lib/datastore-route-table.ts +2 -0
  90. package/src/providers/AuthContext.ts +1 -0
  91. package/src/providers/ChatManagerProvider.tsx +166 -15
  92. package/src/providers/chat-connection-context.ts +4 -0
  93. package/src/providers/chat-connection-lifecycle.ts +1 -0
  94. package/src/providers/chat-socket-auth.ts +31 -12
  95. package/src/providers/chat-startup-timing.ts +89 -0
  96. package/src/routes/plans/components/ActionPlansTableColumns.tsx +3 -2
@@ -1 +1 @@
1
- {"version":3,"file":"chat-connection-lifecycle.js","sourceRoot":"","sources":["../../src/providers/chat-connection-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAKnC,MAAM,UAAU,yBAAyB,CAAC,KAGzC;IACC,IAAI,KAAK,CAAC,eAAe,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IAEpD,OAAO,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;SAC3B,UAAU,EAAmB;SAC7B,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC;SAC9C,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC;SAClC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC;SACxC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC;SAC1C,SAAS,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,KAIC,EACD,YAAqB;IAErB,OAAO,KAAK,CAAC,KAAK,CAAC;SAChB,UAAU,EAAyC;SACnD,IAAI,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC;SACpE,IAAI,CACH,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,eAAe,KAAK,IAAI,EACjD,GAAG,EAAE,CAAC,QAAQ,CACf;SACA,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAClE,CAAC;AAQD,MAAM,UAAU,gCAAgC;IAC9C,OAAO;QACL,cAAc,EAAE,WAAW,MAAM,CAAC,UAAU,EAAE,EAAE;KACjD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"chat-connection-lifecycle.js","sourceRoot":"","sources":["../../src/providers/chat-connection-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAKnC,MAAM,UAAU,yBAAyB,CAAC,KAGzC;IACC,IAAI,KAAK,CAAC,eAAe,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IAEpD,OAAO,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;SAC3B,UAAU,EAAmB;SAC7B,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC;SAC9C,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC;SAClC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC;SACxC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC;SAC1C,SAAS,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,KAIC,EACD,YAAqB;IAErB,OAAO,KAAK,CAAC,KAAK,CAAC;SAChB,UAAU,EAAyC;SACnD,IAAI,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC;SACpE,IAAI,CACH,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,eAAe,KAAK,IAAI,EACjD,GAAG,EAAE,CAAC,QAAQ,CACf;SACA,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAClE,CAAC;AASD,MAAM,UAAU,gCAAgC;IAC9C,OAAO;QACL,cAAc,EAAE,WAAW,MAAM,CAAC,UAAU,EAAE,EAAE;KACjD,CAAC;AACJ,CAAC"}
@@ -1,3 +1,4 @@
1
+ import type { ChatSocketAuthPhase } from "./chat-startup-timing.js";
1
2
  export type ChatSocketAuth = {
2
3
  query: Record<string, string>;
3
4
  credentials: "include";
@@ -7,11 +8,12 @@ export type ChatSocketAuth = {
7
8
  shouldReconnectOnClose: (event: CloseEvent) => boolean;
8
9
  credentials: "omit";
9
10
  };
11
+ export declare function isRequestedClose(event: CloseEvent): boolean;
10
12
  /**
11
13
  * A ticket is spent on its first connect, and partysocket would reconnect to the same URL, so the socket never
12
14
  * reconnects by itself: each connect waits for a new ticket, and a dropped socket asks for one.
13
15
  */
14
- export declare function useChatSocketAuth(datastoreQuery: Record<string, string>): ChatSocketAuth;
16
+ export declare function useChatSocketAuth(datastoreQuery: Record<string, string>, onPhase?: (phase: ChatSocketAuthPhase) => void): ChatSocketAuth;
15
17
  type ChatTokenRefreshAgent = {
16
18
  call: (method: string, args: unknown[]) => Promise<unknown>;
17
19
  };
@@ -1 +1 @@
1
- {"version":3,"file":"chat-socket-auth.d.ts","sourceRoot":"","sources":["../../src/providers/chat-socket-auth.ts"],"names":[],"mappings":"AAeA,MAAM,MAAM,cAAc,GACtB;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,WAAW,EAAE,SAAS,CAAA;CAAE,GACzD;IACE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,sBAAsB,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC;IACvD,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAeN;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,cAAc,CAgFxF;AAED,KAAK,qBAAqB,GAAG;IAAE,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC;AAG7F,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI,CAqBtE"}
1
+ {"version":3,"file":"chat-socket-auth.d.ts","sourceRoot":"","sources":["../../src/providers/chat-socket-auth.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAUjE,MAAM,MAAM,cAAc,GACtB;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,WAAW,EAAE,SAAS,CAAA;CAAE,GACzD;IACE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,sBAAsB,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC;IACvD,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAUN,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAG3D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACtC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,GAC7C,cAAc,CA+FhB;AAED,KAAK,qBAAqB,GAAG;IAAE,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC;AAG7F,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI,CAqBtE"}
@@ -1,9 +1,9 @@
1
- import { chatTicketPath, chatTicketQueryParam } from "@manta-eu/client/shared/chat-manager";
1
+ import { bearerFetch } from "@manta-eu/client";
2
+ import { chatModeQueryParam, chatTicketPath, chatTicketQueryParam } from "@manta-eu/client/shared/chat-manager";
2
3
  import { datastoreHeader, datastoreQueryParam } from "@manta-eu/client/shared/datastore-path";
3
4
  import { isPresent } from "@manta-eu/lib/present";
4
5
  import { isTerminalCloseEvent } from "agents/client";
5
6
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
6
- import { providerFetch } from "./manta-client-context.js";
7
7
  import { useMantaClient } from "./MantaClientProvider.js";
8
8
  const tokenRefreshCheckMs = 30_000;
9
9
  const reconnectDelaysMs = [0, 1_000, 2_000, 5_000, 10_000];
@@ -17,7 +17,7 @@ function ticketFrom(body) {
17
17
  return typeof body.ticket === "string" ? body.ticket : undefined;
18
18
  }
19
19
  // partysocket clears shouldReconnect before a close it was asked for: an unmount, or a socket being replaced.
20
- function isRequestedClose(event) {
20
+ export function isRequestedClose(event) {
21
21
  const target = event.target;
22
22
  return typeof target === "object" && target !== null && "shouldReconnect" in target && !target.shouldReconnect;
23
23
  }
@@ -25,12 +25,13 @@ function isRequestedClose(event) {
25
25
  * A ticket is spent on its first connect, and partysocket would reconnect to the same URL, so the socket never
26
26
  * reconnects by itself: each connect waits for a new ticket, and a dropped socket asks for one.
27
27
  */
28
- export function useChatSocketAuth(datastoreQuery) {
28
+ export function useChatSocketAuth(datastoreQuery, onPhase) {
29
29
  const client = useMantaClient();
30
30
  const { getAccessToken, mantaBaseUrl } = client;
31
- const authorizedFetch = providerFetch(client);
32
- const authorizedFetchRef = useRef(authorizedFetch);
33
- authorizedFetchRef.current = authorizedFetch;
31
+ const onPhaseRef = useRef(onPhase);
32
+ onPhaseRef.current = onPhase;
33
+ const getAccessTokenRef = useRef(getAccessToken);
34
+ getAccessTokenRef.current = getAccessToken;
34
35
  const hasAccessToken = getAccessToken !== undefined;
35
36
  const datastoreKey = JSON.stringify(datastoreQuery);
36
37
  const datastoreQueryRef = useRef(datastoreQuery);
@@ -55,8 +56,24 @@ export function useChatSocketAuth(datastoreQuery) {
55
56
  const delay = reconnectDelaysMs[Math.min(Math.max(drops.current.count - 1, 0), reconnectDelaysMs.length - 1)];
56
57
  const timer = setTimeout(() => {
57
58
  const query = datastoreQueryRef.current;
58
- authorizedFetchRef
59
- .current(new URL(`/${chatTicketPath}`, mantaBaseUrl), {
59
+ const getToken = getAccessTokenRef.current;
60
+ if (!getToken)
61
+ return;
62
+ let sends = 0;
63
+ const requestTicket = bearerFetch(getToken, async (input, init) => {
64
+ sends += 1;
65
+ onPhaseRef.current?.("ticket-requested");
66
+ const response = await fetch(input, init);
67
+ if (response.status === 401 && sends === 1)
68
+ onPhaseRef.current?.("token-requested");
69
+ return response;
70
+ });
71
+ const ticketUrl = new URL(`/${chatTicketPath}`, mantaBaseUrl);
72
+ const mode = query[chatModeQueryParam];
73
+ if (isPresent(mode))
74
+ ticketUrl.searchParams.set(chatModeQueryParam, mode);
75
+ onPhaseRef.current?.("token-requested");
76
+ requestTicket(ticketUrl, {
60
77
  method: "POST",
61
78
  headers: datastoreHeader(query[datastoreQueryParam]),
62
79
  })
@@ -72,6 +89,7 @@ export function useChatSocketAuth(datastoreQuery) {
72
89
  if (cancelled)
73
90
  return;
74
91
  ticketedAt.current = Date.now();
92
+ onPhaseRef.current?.("ticket-received");
75
93
  setTicketed({ datastoreKey, query: { ...query, [chatTicketQueryParam]: ticket } });
76
94
  })
77
95
  .catch((error) => {
@@ -1 +1 @@
1
- {"version":3,"file":"chat-socket-auth.js","sourceRoot":"","sources":["../../src/providers/chat-socket-auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-socket-auth.js","sourceRoot":"","sources":["../../src/providers/chat-socket-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { ChatStartupReport } from "../lib/chat-types.js";
2
+ export type ChatSocketAuthPhase = "token-requested" | "ticket-requested" | "ticket-received";
3
+ export type ChatViewStartupPhase = "chat-mounted" | "first-paint" | "interactive";
4
+ export type ChatStartupPhase = ChatSocketAuthPhase | "socket-enabled" | "socket-open" | ChatViewStartupPhase;
5
+ export type ChatStartupTimeline = {
6
+ startedAt: number;
7
+ marks: Partial<Record<ChatStartupPhase, number>>;
8
+ ticketAttempts: number;
9
+ socketAttempts: number;
10
+ };
11
+ export declare function createChatStartupTimeline(): ChatStartupTimeline;
12
+ export declare function markChatStartup(timeline: ChatStartupTimeline, phase: ChatStartupPhase): boolean;
13
+ export declare function chatStartupReport(timeline: ChatStartupTimeline, input: Pick<ChatStartupReport, "surface" | "mode" | "openIndex">): ChatStartupReport | undefined;
14
+ //# sourceMappingURL=chat-startup-timing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-startup-timing.d.ts","sourceRoot":"","sources":["../../src/providers/chat-startup-timing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,iBAAiB,CAAC;AAE7F,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG,aAAa,GAAG,aAAa,CAAC;AAElF,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,GAAG,gBAAgB,GAAG,aAAa,GAAG,oBAAoB,CAAC;AAE7G,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,wBAAgB,yBAAyB,IAAI,mBAAmB,CAE/D;AAmBD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,mBAAmB,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAiB/F;AAMD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,mBAAmB,EAC7B,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC,GAC/D,iBAAiB,GAAG,SAAS,CA0B/B"}
@@ -0,0 +1,72 @@
1
+ export function createChatStartupTimeline() {
2
+ return { startedAt: performance.now(), marks: {}, ticketAttempts: 0, socketAttempts: 0 };
3
+ }
4
+ const attemptEnds = {
5
+ "token-requested": "socket-open",
6
+ "ticket-requested": "socket-open",
7
+ "ticket-received": "socket-open",
8
+ "socket-enabled": "socket-open",
9
+ "chat-mounted": "interactive",
10
+ };
11
+ const measures = {
12
+ "ticket-requested": { name: "host-token", from: "token-requested" },
13
+ "ticket-received": { name: "ticket", from: "ticket-requested" },
14
+ "socket-open": { name: "socket", from: "socket-enabled" },
15
+ "chat-mounted": { name: "until-chat-mount", from: "start" },
16
+ "first-paint": { name: "until-first-paint", from: "chat-mounted" },
17
+ interactive: { name: "until-interactive", from: "chat-mounted" },
18
+ };
19
+ export function markChatStartup(timeline, phase) {
20
+ const attemptEnd = attemptEnds[phase];
21
+ if (timeline.marks[attemptEnd ?? phase] !== undefined)
22
+ return false;
23
+ const now = performance.now();
24
+ timeline.marks[phase] = now - timeline.startedAt;
25
+ if (phase === "chat-mounted")
26
+ delete timeline.marks["first-paint"];
27
+ if (phase === "token-requested")
28
+ timeline.ticketAttempts += 1;
29
+ if (phase === "socket-enabled")
30
+ timeline.socketAttempts += 1;
31
+ const measure = measures[phase];
32
+ const from = measure && (measure.from === "start" ? 0 : timeline.marks[measure.from]);
33
+ try {
34
+ performance.mark(`manta-chat:${phase}`);
35
+ if (measure && from !== undefined) {
36
+ performance.measure(`manta-chat:${measure.name}`, { start: timeline.startedAt + from, end: now });
37
+ }
38
+ }
39
+ catch { }
40
+ return true;
41
+ }
42
+ function elapsed(from, to) {
43
+ return Math.max(0, Math.round(to - from));
44
+ }
45
+ export function chatStartupReport(timeline, input) {
46
+ const { marks } = timeline;
47
+ const socketOpen = marks["socket-open"];
48
+ const chatMounted = marks["chat-mounted"];
49
+ const firstPaint = marks["first-paint"];
50
+ const interactive = marks.interactive;
51
+ if (socketOpen === undefined || chatMounted === undefined || firstPaint === undefined || interactive === undefined) {
52
+ return undefined;
53
+ }
54
+ const tokenRequested = marks["token-requested"];
55
+ const ticketRequested = marks["ticket-requested"];
56
+ const ticketReceived = marks["ticket-received"];
57
+ const ticketed = input.mode === "ticket" && ticketRequested !== undefined && ticketReceived !== undefined;
58
+ return {
59
+ ...input,
60
+ ...(ticketed && tokenRequested !== undefined ? { hostTokenMs: elapsed(tokenRequested, ticketRequested) } : {}),
61
+ ...(ticketed
62
+ ? { ticketMs: elapsed(ticketRequested, ticketReceived), ticketAttempts: Math.max(1, timeline.ticketAttempts) }
63
+ : {}),
64
+ socketMs: elapsed(marks["socket-enabled"] ?? 0, socketOpen),
65
+ socketAttempts: Math.max(1, timeline.socketAttempts),
66
+ chatMountMs: elapsed(0, chatMounted),
67
+ socketReadyAtOpen: socketOpen <= chatMounted,
68
+ firstPaintMs: elapsed(chatMounted, firstPaint),
69
+ interactiveMs: elapsed(chatMounted, interactive),
70
+ };
71
+ }
72
+ //# sourceMappingURL=chat-startup-timing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-startup-timing.js","sourceRoot":"","sources":["../../src/providers/chat-startup-timing.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ActionPlansTableColumns.d.ts","sourceRoot":"","sources":["../../../../src/routes/plans/components/ActionPlansTableColumns.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAkBvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5C,KAAK,8BAA8B,GAAG;IACpC,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACvC,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,SAAS,CAAC;IAC7D,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC,CAAC;AAyDF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,8BAA8B,GAAG,SAAS,CAAC,UAAU,CAAC,EAAE,CAuHxG"}
1
+ {"version":3,"file":"ActionPlansTableColumns.d.ts","sourceRoot":"","sources":["../../../../src/routes/plans/components/ActionPlansTableColumns.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAmBvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5C,KAAK,8BAA8B,GAAG;IACpC,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACvC,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,SAAS,CAAC;IAC7D,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC,CAAC;AAyDF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,8BAA8B,GAAG,SAAS,CAAC,UAAU,CAAC,EAAE,CAuHxG"}
@@ -11,7 +11,7 @@ import { actionPlanColumnIds, actionPlanColumnLabels } from "./actionPlansTableC
11
11
  import { Badge } from "#components/badge/index";
12
12
  import { Button } from "#components/button/index";
13
13
  import { Dropdown, DropdownContent, DropdownGroup, DropdownItem, DropdownTrigger } from "#components/dropdown/index";
14
- import { formatIntegration, IntegrationIcon, integrationToChannel, isTerminalActionPlanState, planStateVariant, statusLabel, } from "#components/planning/plan-detail-utils";
14
+ import { formatIntegration, IntegrationIcon, integrationToChannel, isTerminalActionPlanState, needsApproval, planStateVariant, statusLabel, } from "#components/planning/plan-detail-utils";
15
15
  import { Tooltip, TooltipContent, TooltipTrigger } from "#components/tooltip/index";
16
16
  import { getPendingManualActions } from "#lib/manual-actions";
17
17
  function getPlanName(plan) {
@@ -21,9 +21,9 @@ function planStateLabel(plan, pendingApprovalCount) {
21
21
  return match({
22
22
  state: plan.state,
23
23
  hasCurrentFacts: plan.hasCurrentFacts,
24
- hasPendingApproval: pendingApprovalCount > 0,
24
+ needsApproval: needsApproval(plan.state, pendingApprovalCount),
25
25
  })
26
- .with({ state: GQLActionPlanState.Running, hasPendingApproval: true }, () => "Needs approval")
26
+ .with({ needsApproval: true }, () => "Needs approval")
27
27
  .with({ state: GQLActionPlanState.Draft, hasCurrentFacts: false }, () => "Not currently executable")
28
28
  .with({ state: GQLActionPlanState.Draft }, () => "Ready to launch")
29
29
  .otherwise(({ state: matchedState }) => statusLabel(matchedState));
@@ -1 +1 @@
1
- {"version":3,"file":"ActionPlansTableColumns.js","sourceRoot":"","sources":["../../../../src/routes/plans/components/ActionPlansTableColumns.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AACrH,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,yBAAyB,EACzB,gBAAgB,EAChB,WAAW,GACZ,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAQ9D,SAAS,WAAW,CAAC,IAAgB;IACnC,OAAO,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,cAAc,CAAC,IAAgB,EAAE,oBAA4B;IACpE,OAAO,KAAK,CAAC;QACX,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,kBAAkB,EAAE,oBAAoB,GAAG,CAAC;KAC7C,CAAC;SACC,IAAI,CAAC,EAAE,KAAK,EAAE,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC;SAC7F,IAAI,CAAC,EAAE,KAAK,EAAE,kBAAkB,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,0BAA0B,CAAC;SACnG,IAAI,CAAC,EAAE,KAAK,EAAE,kBAAkB,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC;SAClE,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,WAAW,CAAC,IAAgB;IACnC,OAAO,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,CAAC;AACpG,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAgE;IACzF,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAE1C,OAAO,CACL,cACE,SAAS,EAAC,YAAY,EACtB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,KAAK,CAAC,eAAe,EAAE,CAAC;QAC1B,CAAC,YAED,MAAC,QAAQ,eACP,KAAC,eAAe,IAAC,OAAO,kBACtB,KAAC,MAAM,IAAC,OAAO,EAAC,UAAU,EAAC,QAAQ,QAAC,IAAI,EAAE,YAAY,gBAAa,SAAS,GAAG,GAC/D,EAClB,KAAC,eAAe,IAAC,KAAK,EAAC,KAAK,EAAC,SAAS,EAAC,MAAM,YAC3C,MAAC,aAAa,eACZ,KAAC,YAAY,IAAC,OAAO,kBACnB,MAAC,UAAU,IAAC,EAAE,EAAE,IAAI,aAClB,KAAC,GAAG,IAAC,IAAI,EAAE,EAAE,GAAI,YAEN,GACA,EACd,QAAQ,IAAI,OAAO,IAAI,CACtB,MAAC,YAAY,IAAC,QAAQ,EAAE,OAAO,aAC7B,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,GAAI,cAEV,CAChB,IACa,GACA,IACT,GACP,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,IAAoC;IAC7E,MAAM,EAAE,aAAa,EAAE,mBAAmB,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAE7D,OAAO,OAAO,CAA0B,GAAG,EAAE;QAC3C,SAAS,uBAAuB,CAAC,OAAe;YAC9C,OAAO,uBAAuB,CAAC,mBAAmB,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3E,CAAC;QAED,OAAO;YACL;gBACE,EAAE,EAAE,mBAAmB,CAAC,IAAI;gBAC5B,UAAU,EAAE,WAAW;gBACvB,YAAY,EAAE,KAAK;gBACnB,aAAa,EAAE,KAAK;gBACpB,MAAM,EAAE,sBAAsB,CAAC,mBAAmB,CAAC,IAAI,CAAC;gBACxD,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;oBAChB,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;oBAC1B,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACrC,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC/F,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;oBACnC,OAAO,CACL,eAAK,SAAS,EAAC,sEAAsE,aAClF,OAAO,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CACpC,KAAC,eAAe,IAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,GAAI,CAC1D,CAAC,CAAC,CAAC,CACF,eAAM,SAAS,EAAC,gGAAgG,YAC9G,KAAC,GAAG,IAAC,SAAS,EAAC,UAAU,GAAG,GACvB,CACR,EACD,eAAK,SAAS,EAAC,wCAAwC,aACrD,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,KAAC,UAAU,IAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAC,4BAA4B,YACzD,QAAQ,GACE,GACE,EACjB,KAAC,cAAc,cACb,YAAG,SAAS,EAAC,0BAA0B,YAAE,QAAQ,GAAK,GACvC,IACT,EACT,CAAC,IAAI,CAAC,eAAe,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CACrD,KAAC,KAAK,IAAC,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,SAAS,EAAC,UAAU,6BAE5C,CACT,IACG,IACF,CACP,CAAC;gBACJ,CAAC;aACF;YACD;gBACE,WAAW,EAAE,mBAAmB,CAAC,KAAK;gBACtC,YAAY,EAAE,KAAK;gBACnB,MAAM,EAAE,sBAAsB,CAAC,mBAAmB,CAAC,KAAK,CAAC;gBACzD,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;oBAChB,MAAM,oBAAoB,GAAG,uBAAuB,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAEvE,OAAO,CACL,eAAK,SAAS,EAAC,2BAA2B,aACxC,KAAC,KAAK,IAAC,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC,EAAE,IAAI,EAAC,IAAI,YAClF,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,oBAAoB,CAAC,GAC7C,EACP,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,CACtB,KAAC,KAAK,IAAC,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,wBAEvB,CACT,IACG,CACP,CAAC;gBACJ,CAAC;aACF;YACD;gBACE,WAAW,EAAE,mBAAmB,CAAC,SAAS;gBAC1C,MAAM,EAAE,sBAAsB,CAAC,mBAAmB,CAAC,SAAS,CAAC;gBAC7D,aAAa,EAAE,KAAK;gBACpB,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CACjB,eAAM,SAAS,EAAC,uBAAuB,YACpC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,GACjE,CACR;aACF;YACD;gBACE,WAAW,EAAE,mBAAmB,CAAC,SAAS;gBAC1C,MAAM,EAAE,sBAAsB,CAAC,mBAAmB,CAAC,SAAS,CAAC;gBAC7D,aAAa,EAAE,KAAK;gBACpB,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CACjB,eAAM,SAAS,EAAC,uBAAuB,YACpC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,GACjE,CACR;aACF;YACD;gBACE,EAAE,EAAE,mBAAmB,CAAC,gBAAgB;gBACxC,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC;gBACrD,MAAM,EAAE,sBAAsB,CAAC,mBAAmB,CAAC,gBAAgB,CAAC;gBACpE,aAAa,EAAE,KAAK;gBACpB,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,eAAM,SAAS,EAAC,uBAAuB,YAAE,uBAAuB,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAQ;aAC9G;YACD;gBACE,EAAE,EAAE,mBAAmB,CAAC,IAAI;gBAC5B,UAAU,EAAE,WAAW;gBACvB,MAAM,EAAE,sBAAsB,CAAC,mBAAmB,CAAC,IAAI,CAAC;gBACxD,aAAa,EAAE,KAAK;gBACpB,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,eAAM,SAAS,EAAC,uBAAuB,YAAE,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAQ;aAC9F;YACD;gBACE,EAAE,EAAE,mBAAmB,CAAC,OAAO;gBAC/B,YAAY,EAAE,KAAK;gBACnB,aAAa,EAAE,KAAK;gBACpB,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CACjB,KAAC,iBAAiB,IAChB,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EACrC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,eAAe,IAAI,yBAAyB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EACvF,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,GAC9D,CACH;aACF;SACF,CAAC;IACJ,CAAC,EAAE,CAAC,aAAa,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"ActionPlansTableColumns.js","sourceRoot":"","sources":["../../../../src/routes/plans/components/ActionPlansTableColumns.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@manta-eu/react",
3
- "version": "0.4.0",
3
+ "version": "0.5.1",
4
4
  "description": "The Manta design system, knowledge-graph UI and agent components",
5
5
  "homepage": "https://developers.manta.eu",
6
6
  "keywords": [
@@ -1134,12 +1134,12 @@
1134
1134
  "usehooks-ts": "^3.1.1",
1135
1135
  "zod": "^4.5.0",
1136
1136
  "zustand": "^5.0.2",
1137
- "@manta-eu/auth": "0.4.0",
1138
- "@manta-eu/client": "0.4.0",
1139
- "@manta-eu/lib": "0.4.0",
1140
- "@manta-eu/ldo": "0.4.0",
1141
- "@manta-eu/rdf-lib": "0.4.0",
1142
- "@manta-eu/datalog-parser": "0.4.0"
1137
+ "@manta-eu/client": "0.5.1",
1138
+ "@manta-eu/ldo": "0.5.1",
1139
+ "@manta-eu/rdf-lib": "0.5.1",
1140
+ "@manta-eu/auth": "0.5.1",
1141
+ "@manta-eu/datalog-parser": "0.5.1",
1142
+ "@manta-eu/lib": "0.5.1"
1143
1143
  },
1144
1144
  "peerDependencies": {
1145
1145
  "@ulb-darmstadt/shacl-form": "^2.1.1-rc1",
@@ -16,7 +16,7 @@ import { humanCount } from "@manta-eu/lib/humanize";
16
16
  import { isPresent } from "@manta-eu/lib/present";
17
17
  import type { ChatStatus, FileUIPart } from "ai";
18
18
  import { ArrowUp } from "lucide-react";
19
- import type { ReactNode } from "react";
19
+ import type { ChangeEvent, ReactNode, RefObject } from "react";
20
20
  import { Suspense, useCallback, useEffect, useMemo, useRef, useState } from "react";
21
21
  import { toast } from "sonner";
22
22
  import { match, P } from "ts-pattern";
@@ -78,9 +78,12 @@ export type ChatProps = {
78
78
  renderMenuItems?: (defaults: CopilotMenuDefaults) => ReactNode[];
79
79
  };
80
80
 
81
- function useChatTurnState() {
82
- const activeConversationId = useChatManagerConnection().activeConversation?.id;
81
+ export function useChatTurnState() {
82
+ const { activeConversation, pendingMessage } = useChatManagerConnection();
83
+ const activeConversationId = activeConversation?.id;
84
+ const pendingMessageId = pendingMessage?.id;
83
85
  const previousActiveConversationIdRef = useRef(activeConversationId);
86
+ const previousPendingMessageIdRef = useRef(pendingMessageId);
84
87
  const [thinkingSeconds, setThinkingSeconds] = useState(0);
85
88
  const [pendingAssistantTurn, setPendingAssistantTurn] = useState(false);
86
89
  const turnKeyRef = useRef(0);
@@ -101,6 +104,13 @@ function useChatTurnState() {
101
104
  }
102
105
  }, [activeConversationId, resetChatTurn]);
103
106
 
107
+ useEffect(() => {
108
+ const previousPendingMessageId = previousPendingMessageIdRef.current;
109
+ previousPendingMessageIdRef.current = pendingMessageId;
110
+
111
+ if (previousPendingMessageId && !pendingMessageId && !activeConversationId) resetChatTurn();
112
+ }, [activeConversationId, pendingMessageId, resetChatTurn]);
113
+
104
114
  return {
105
115
  activeTurnKey,
106
116
  pendingAssistantTurn,
@@ -115,9 +125,54 @@ function useChatTurnState() {
115
125
 
116
126
  type ChatTurnState = ReturnType<typeof useChatTurnState>;
117
127
 
128
+ export function useInitialPrompt(initialPrompt: string | undefined, submit: (prompt: string) => void) {
129
+ const { activeConversation, isConversationLoading } = useChatManagerConnection();
130
+ const sentRef = useRef<string | undefined>(undefined);
131
+
132
+ useEffect(() => {
133
+ if (!isPresent(initialPrompt) || sentRef.current === initialPrompt) return;
134
+ if (isConversationLoading || isPresent(activeConversation)) return;
135
+
136
+ sentRef.current = initialPrompt;
137
+ submit(initialPrompt);
138
+ }, [initialPrompt, isConversationLoading, activeConversation, submit]);
139
+ }
140
+
141
+ export type ComposerCarryOver = { conversationId: string | undefined; text: string };
142
+
143
+ /** The unsent text a remounted composer starts with: its own chat's, or that of the blank chat it just became. */
144
+ export function carriedComposerText(
145
+ carryOver: ComposerCarryOver,
146
+ conversationId: string | undefined,
147
+ hasPendingMessage: boolean,
148
+ ): string {
149
+ if (carryOver.conversationId === conversationId) return carryOver.text;
150
+ return carryOver.conversationId === undefined && hasPendingMessage ? carryOver.text : "";
151
+ }
152
+
153
+ function useComposerCarryOver(
154
+ carryOverRef: RefObject<ComposerCarryOver>,
155
+ conversationId: string | undefined,
156
+ hasPendingMessage: boolean,
157
+ ) {
158
+ const [initialText] = useState(() => carriedComposerText(carryOverRef.current, conversationId, hasPendingMessage));
159
+ const rememberText = useCallback(
160
+ (text: string) => {
161
+ carryOverRef.current = { conversationId, text };
162
+ },
163
+ [carryOverRef, conversationId],
164
+ );
165
+
166
+ useEffect(() => rememberText(initialText), [rememberText, initialText]);
167
+
168
+ return { initialText: isPresent(initialText) ? initialText : undefined, rememberText };
169
+ }
170
+
118
171
  export function Chat(props: ChatProps) {
119
172
  const turnState = useChatTurnState();
120
- const content = <ChatContent {...props} turnState={turnState} />;
173
+ // ChatContent remounts when a blank chat becomes a conversation; the composer's unsent text outlives it here.
174
+ const composerCarryOver = useRef<ComposerCarryOver>({ conversationId: undefined, text: "" });
175
+ const content = <ChatContent {...props} turnState={turnState} composerCarryOver={composerCarryOver} />;
121
176
 
122
177
  return <ActiveChatProvider>{props.isEmbedded ? <Suspense>{content}</Suspense> : content}</ActiveChatProvider>;
123
178
  }
@@ -170,7 +225,27 @@ export function getChatWelcomeContent(args: ChatWelcomeArgs): ChatWelcomeContent
170
225
  .exhaustive();
171
226
  }
172
227
 
173
- function ChatContent(props: ChatProps & { turnState: ChatTurnState }) {
228
+ export type ChatConnectingArgs = {
229
+ hasPendingMessage: boolean;
230
+ isConversationLoading: boolean;
231
+ isBlankChat: boolean;
232
+ hasMessages: boolean;
233
+ isSocketOpen: boolean;
234
+ isTranscriptSynced: boolean;
235
+ };
236
+
237
+ export function chatIsConnectingOrSyncing(args: ChatConnectingArgs): boolean {
238
+ if (args.hasPendingMessage) return false;
239
+ if (args.isConversationLoading) return true;
240
+ return !args.isBlankChat && !args.hasMessages && (!args.isSocketOpen || !args.isTranscriptSynced);
241
+ }
242
+
243
+ type ChatContentProps = ChatProps & {
244
+ turnState: ChatTurnState;
245
+ composerCarryOver: RefObject<ComposerCarryOver>;
246
+ };
247
+
248
+ function ChatContent(props: ChatContentProps) {
174
249
  const {
175
250
  datastore,
176
251
  user,
@@ -187,6 +262,7 @@ function ChatContent(props: ChatProps & { turnState: ChatTurnState }) {
187
262
  mark,
188
263
  renderMenuItems,
189
264
  turnState,
265
+ composerCarryOver,
190
266
  } = props;
191
267
 
192
268
  const assistantName = useAssistantName();
@@ -223,8 +299,8 @@ function ChatContent(props: ChatProps & { turnState: ChatTurnState }) {
223
299
  startNewChat,
224
300
  activeConversation,
225
301
  isConversationLoading,
226
- connectionState,
227
302
  sendNewConversationMessage,
303
+ markStartup,
228
304
  } = useChatManagerConnection();
229
305
  const activeChat = useActiveChatConnection();
230
306
  const agent = activeChat?.agent ?? managerAgent;
@@ -248,10 +324,14 @@ function ChatContent(props: ChatProps & { turnState: ChatTurnState }) {
248
324
  const hasPendingQuestionnaire =
249
325
  latestMessage?.role === "assistant" && latestMessage.parts.some(isPendingRequestUserInputPart);
250
326
  const isTranscriptSynced = activeChat?.isTranscriptSynced ?? !activeConversation?.id;
251
- const isConnectingOrSyncing =
252
- !hasPendingMessage &&
253
- (isConversationLoading ||
254
- (!isPresent(agentMessages) && (agent.readyState !== WebSocket.OPEN || !isTranscriptSynced)));
327
+ const isConnectingOrSyncing = chatIsConnectingOrSyncing({
328
+ hasPendingMessage,
329
+ isConversationLoading,
330
+ isBlankChat: !isPresent(activeConversation) && !isPresent(selectedContext),
331
+ hasMessages: isPresent(agentMessages),
332
+ isSocketOpen: agent.readyState === WebSocket.OPEN,
333
+ isTranscriptSynced,
334
+ });
255
335
  const isSessionConnecting = Boolean(activeConversation?.id) && (agent.readyState !== WebSocket.OPEN || !agentState);
256
336
 
257
337
  const addToolResult = chatData?.addToolResult;
@@ -279,7 +359,6 @@ function ChatContent(props: ChatProps & { turnState: ChatTurnState }) {
279
359
  .otherwise(({ status }) => status);
280
360
 
281
361
  const toolsUsedInSession = useRef(new Set<string>());
282
- const initialPromptSentRef = useRef<string | undefined>(undefined);
283
362
 
284
363
  const { uploadFiles, isUploading, progress: uploadProgress } = useChatUpload();
285
364
 
@@ -336,6 +415,22 @@ function ChatContent(props: ChatProps & { turnState: ChatTurnState }) {
336
415
  );
337
416
 
338
417
  const composerDraft = useComposerDraft(initialDraft, handleAgentSubmit);
418
+ const { initialText: carriedText, rememberText } = useComposerCarryOver(
419
+ composerCarryOver,
420
+ activeConversation?.id,
421
+ hasPendingMessage,
422
+ );
423
+ const submitComposer = useCallback(
424
+ (value: string, files: File[]) => {
425
+ rememberText("");
426
+ return composerDraft.onSubmit(value, files);
427
+ },
428
+ [composerDraft, rememberText],
429
+ );
430
+ const rememberComposerText = useCallback(
431
+ (event: ChangeEvent<HTMLTextAreaElement>) => rememberText(event.target.value),
432
+ [rememberText],
433
+ );
339
434
 
340
435
  const handleConversationStarterSubmit = useCallback(
341
436
  (value: string) => {
@@ -344,13 +439,7 @@ function ChatContent(props: ChatProps & { turnState: ChatTurnState }) {
344
439
  [handleAgentSubmit],
345
440
  );
346
441
 
347
- useEffect(() => {
348
- if (!isPresent(initialPrompt) || initialPromptSentRef.current === initialPrompt) return;
349
- if (connectionState !== "open" || isConversationLoading || isPresent(activeConversation)) return;
350
-
351
- initialPromptSentRef.current = initialPrompt;
352
- handleConversationStarterSubmit(initialPrompt);
353
- }, [initialPrompt, connectionState, isConversationLoading, activeConversation, handleConversationStarterSubmit]);
442
+ useInitialPrompt(initialPrompt, handleConversationStarterSubmit);
354
443
 
355
444
  const handleRetryTurn = useCallback(async () => {
356
445
  if (!chatData?.regenerate) return;
@@ -397,6 +486,18 @@ function ChatContent(props: ChatProps & { turnState: ChatTurnState }) {
397
486
  const pendingAssistantMessageId = activeTurnKey ?? latestMessage?.id;
398
487
  const needsPendingPlaceholder = isAwaitingAssistant && latestMessage?.role !== "assistant";
399
488
 
489
+ useEffect(() => {
490
+ markStartup("chat-mounted");
491
+ }, [markStartup]);
492
+
493
+ useEffect(() => {
494
+ if (!isConnectingOrSyncing) markStartup("first-paint");
495
+ }, [isConnectingOrSyncing, markStartup]);
496
+
497
+ useEffect(() => {
498
+ if (!isConnectingOrSyncing && !isComposerBusy) markStartup("interactive");
499
+ }, [isConnectingOrSyncing, isComposerBusy, markStartup]);
500
+
400
501
  const displayMessages = useMemo(() => {
401
502
  if (!needsPendingPlaceholder || !pendingAssistantMessageId) return agentMessages;
402
503
  const placeholder: ChatUIMessage = {
@@ -537,9 +638,9 @@ function ChatContent(props: ChatProps & { turnState: ChatTurnState }) {
537
638
 
538
639
  <ChatInput
539
640
  key={composerDraft.key}
540
- initialValue={composerDraft.initialValue}
641
+ initialValue={composerDraft.initialValue ?? carriedText}
541
642
  dropTargetRef={dropZoneRef}
542
- onSubmit={isComposerBusy ? undefined : composerDraft.onSubmit}
643
+ onSubmit={isComposerBusy ? undefined : submitComposer}
543
644
  onRejected={handleFilesRejected}
544
645
  topContent={<ChatInputFilePreview progress={uploadProgress} />}
545
646
  >
@@ -549,6 +650,7 @@ function ChatContent(props: ChatProps & { turnState: ChatTurnState }) {
549
650
  className="pl-5"
550
651
  autoFocus={shouldAutoFocusInput}
551
652
  disabled={hasPendingQuestionnaire}
653
+ onChange={rememberComposerText}
552
654
  data-chat-input
553
655
  />
554
656
  <ChatInputSubmit
@@ -13,7 +13,7 @@ import { KnowledgeGraphStateProvider } from "#providers/KnowledgeGraphStateProvi
13
13
  import { useMantaClient } from "#providers/MantaClientProvider";
14
14
  import { ActionPlansPage, PlanDetailRouteContent, useActionPlanRouteState } from "#routes/plans/index";
15
15
 
16
- export type { ChatDraft } from "#lib/chat-types";
16
+ export type { ChatDraft, ChatStartupReport } from "#lib/chat-types";
17
17
 
18
18
  export function EmbeddedChat(props: AuthenticatedChatProps) {
19
19
  const inRouter = useInRouterContext();
@@ -86,7 +86,14 @@ function EmbeddedContent(props: ResolvedChatProps) {
86
86
  }
87
87
 
88
88
  return (
89
- <ChatManagerProvider key={datastoreId} datastoreId={datastoreId} onSelectPlan={onSelectPlan}>
89
+ <ChatManagerProvider
90
+ key={`${datastoreId ?? ""}:${props.mode ?? "datastore"}`}
91
+ datastoreId={datastoreId}
92
+ mode={props.mode}
93
+ onSelectPlan={onSelectPlan}
94
+ surface="embedded"
95
+ onStartupTiming={props.onStartupTiming}
96
+ >
90
97
  <KnowledgeGraphStateProvider datastoreId={datastoreId}>
91
98
  <KnowledgeGraphStartupGate embedded>
92
99
  <Chat
@@ -107,6 +107,7 @@ export function Sidebar(props: SidebarProps) {
107
107
  const canManageTeam = authContext?.canManageTeam ?? false;
108
108
  const canManageCustomApps = authContext?.canManageCustomApps ?? false;
109
109
  const canDisconnectCustomApps = authContext?.canDisconnectCustomApps ?? false;
110
+ const hasProfilePage = authContext?.hasProfilePage ?? false;
110
111
  const canManageStreams = authContext?.canManageStreams ?? isOperator ?? false;
111
112
 
112
113
  const { state: sidebarState, isMobile, toggleSidebar, setOpenMobile } = useSidebar();
@@ -467,11 +468,11 @@ export function Sidebar(props: SidebarProps) {
467
468
  }
468
469
  onCloseAutoFocus={handleProfileMenuCloseAutoFocus}
469
470
  onNavigateToAccount={() => {
470
- // TODO: Implement account navigation when account page is available
471
+ if (hasProfilePage) pendingMenuNavigateRef.current = "/profile";
471
472
  }}
472
473
  onLogout={onLogout}
473
474
  >
474
- <DropdownGroup className="p-2">
475
+ <DropdownGroup className="px-2 pb-2">
475
476
  <ThemeSelectorDropdown />
476
477
  {canManageDatastores && (
477
478
  <ManageDatastoresMenuItem onSelect={() => (pendingMenuNavigateRef.current = "/datastores")} />
@@ -149,6 +149,7 @@ export function ActioningView(props: ActioningViewProps) {
149
149
  <ExecutionTopBar
150
150
  planName={planName}
151
151
  status={executionStatus}
152
+ pendingManualActionCount={pendingManualActionCount}
152
153
  workflowId={workflowId}
153
154
  triggerError={triggerError}
154
155
  onExecute={onExecute}