@burdenoff/fe-libs 2026.926.4 → 2026.927.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 (121) hide show
  1. package/dist/chrome/ProductPickerSheet.d.ts.map +1 -1
  2. package/dist/chrome/ProductPickerSheet.js +45 -44
  3. package/dist/chrome/ProductSwitcher.d.ts.map +1 -1
  4. package/dist/chrome/ProductSwitcher.js +83 -82
  5. package/dist/shared/assistant/conversation.d.ts +91 -3
  6. package/dist/shared/assistant/conversation.d.ts.map +1 -1
  7. package/dist/shared/assistant/gatewayClient.d.ts +15 -0
  8. package/dist/shared/assistant/gatewayClient.d.ts.map +1 -1
  9. package/dist/shared/assistant/gatewayClient.js +1 -1
  10. package/dist/shared/assistant/guardedStorage.d.ts +4 -2
  11. package/dist/shared/assistant/guardedStorage.d.ts.map +1 -1
  12. package/dist/shared/assistant/guardedStorage.js +1 -1
  13. package/dist/shared/assistant/history/historyApi.d.ts +38 -0
  14. package/dist/shared/assistant/history/historyApi.d.ts.map +1 -0
  15. package/dist/shared/assistant/history/historyApi.js +153 -0
  16. package/dist/shared/assistant/history/historyEngine.d.ts +96 -0
  17. package/dist/shared/assistant/history/historyEngine.d.ts.map +1 -0
  18. package/dist/shared/assistant/history/historyEngine.js +774 -0
  19. package/dist/shared/assistant/history/historyErrors.d.ts +72 -0
  20. package/dist/shared/assistant/history/historyErrors.d.ts.map +1 -0
  21. package/dist/shared/assistant/history/historyErrors.js +74 -0
  22. package/dist/shared/assistant/history/historyList.d.ts +115 -0
  23. package/dist/shared/assistant/history/historyList.d.ts.map +1 -0
  24. package/dist/shared/assistant/history/historyList.js +116 -0
  25. package/dist/shared/assistant/history/historyMapping.d.ts +65 -0
  26. package/dist/shared/assistant/history/historyMapping.d.ts.map +1 -0
  27. package/dist/shared/assistant/history/historyMapping.js +383 -0
  28. package/dist/shared/assistant/history/historyMerge.d.ts +65 -0
  29. package/dist/shared/assistant/history/historyMerge.d.ts.map +1 -0
  30. package/dist/shared/assistant/history/historyMerge.js +97 -0
  31. package/dist/shared/assistant/history/historyOperations.d.ts +24 -0
  32. package/dist/shared/assistant/history/historyOperations.d.ts.map +1 -0
  33. package/dist/shared/assistant/history/historyOperations.js +125 -0
  34. package/dist/shared/assistant/history/historyResume.d.ts +56 -0
  35. package/dist/shared/assistant/history/historyResume.d.ts.map +1 -0
  36. package/dist/shared/assistant/history/historyResume.js +55 -0
  37. package/dist/shared/assistant/history/historyStatus.d.ts +76 -0
  38. package/dist/shared/assistant/history/historyStatus.d.ts.map +1 -0
  39. package/dist/shared/assistant/history/historyStatus.js +47 -0
  40. package/dist/shared/assistant/history/historyStore.d.ts +192 -0
  41. package/dist/shared/assistant/history/historyStore.d.ts.map +1 -0
  42. package/dist/shared/assistant/history/historyStore.js +503 -0
  43. package/dist/shared/assistant/history/historyTimestamps.d.ts +11 -0
  44. package/dist/shared/assistant/history/historyTimestamps.d.ts.map +1 -0
  45. package/dist/shared/assistant/history/historyTimestamps.js +9 -0
  46. package/dist/shared/assistant/history/historyTypes.d.ts +256 -0
  47. package/dist/shared/assistant/history/historyTypes.d.ts.map +1 -0
  48. package/dist/shared/assistant/history/historyTypes.js +20 -0
  49. package/dist/shared/assistant/history/profileBoundStorage.d.ts +36 -0
  50. package/dist/shared/assistant/history/profileBoundStorage.d.ts.map +1 -0
  51. package/dist/shared/assistant/history/profileBoundStorage.js +74 -0
  52. package/dist/shared/assistant/history/stampRegistry.d.ts +84 -0
  53. package/dist/shared/assistant/history/stampRegistry.d.ts.map +1 -0
  54. package/dist/shared/assistant/history/stampRegistry.js +58 -0
  55. package/dist/shared/assistant/history/useAssistantServerHistory.d.ts +18 -0
  56. package/dist/shared/assistant/history/useAssistantServerHistory.d.ts.map +1 -0
  57. package/dist/shared/assistant/history/useAssistantServerHistory.js +12 -0
  58. package/dist/shared/assistant/i18nManifest.d.ts +18 -0
  59. package/dist/shared/assistant/i18nManifest.d.ts.map +1 -1
  60. package/dist/shared/assistant/i18nManifest.js +18 -0
  61. package/dist/shared/assistant/index.d.ts +16 -0
  62. package/dist/shared/assistant/index.d.ts.map +1 -1
  63. package/dist/shared/assistant/liveTurns.d.ts +7 -0
  64. package/dist/shared/assistant/liveTurns.d.ts.map +1 -1
  65. package/dist/shared/assistant/liveTurns.js +35 -32
  66. package/dist/shared/assistant/spokenTurns.d.ts +20 -0
  67. package/dist/shared/assistant/spokenTurns.d.ts.map +1 -1
  68. package/dist/shared/assistant/spokenTurns.js +13 -8
  69. package/dist/shared/assistant/store.d.ts +35 -1
  70. package/dist/shared/assistant/store.d.ts.map +1 -1
  71. package/dist/shared/assistant/store.js +93 -24
  72. package/dist/shared/assistant/ui/AIAssistantPanel.d.ts +16 -0
  73. package/dist/shared/assistant/ui/AIAssistantPanel.d.ts.map +1 -1
  74. package/dist/shared/assistant/ui/AIAssistantPanel.js +63 -60
  75. package/dist/shared/assistant/ui/AssistantChatArea.d.ts.map +1 -1
  76. package/dist/shared/assistant/ui/AssistantChatArea.js +730 -672
  77. package/dist/shared/assistant/ui/AssistantConversationList.d.ts +17 -0
  78. package/dist/shared/assistant/ui/AssistantConversationList.d.ts.map +1 -1
  79. package/dist/shared/assistant/ui/AssistantConversationList.js +252 -145
  80. package/dist/shared/assistant/ui/AssistantHistoryNotices.d.ts +36 -0
  81. package/dist/shared/assistant/ui/AssistantHistoryNotices.d.ts.map +1 -0
  82. package/dist/shared/assistant/ui/AssistantHistoryNotices.js +103 -0
  83. package/dist/shared/assistant/ui/AssistantOverlay.d.ts +4 -0
  84. package/dist/shared/assistant/ui/AssistantOverlay.d.ts.map +1 -1
  85. package/dist/shared/assistant/ui/AssistantOverlay.js +97 -94
  86. package/dist/shared/assistant/ui/AssistantSpokenTurnsNotice.d.ts +5 -3
  87. package/dist/shared/assistant/ui/AssistantSpokenTurnsNotice.d.ts.map +1 -1
  88. package/dist/shared/assistant/ui/composer/AssistantComposer.d.ts +6 -0
  89. package/dist/shared/assistant/ui/composer/AssistantComposer.d.ts.map +1 -1
  90. package/dist/shared/assistant/ui/composer/AssistantComposer.js +54 -54
  91. package/dist/shared/assistant/ui/voice/VoiceTranscriptDrawer.d.ts +9 -0
  92. package/dist/shared/assistant/ui/voice/VoiceTranscriptDrawer.d.ts.map +1 -1
  93. package/dist/shared/assistant/ui/voice/VoiceTranscriptDrawer.js +37 -32
  94. package/dist/shared/assistant/voice/turnVisibility.d.ts +7 -5
  95. package/dist/shared/assistant/voice/turnVisibility.d.ts.map +1 -1
  96. package/dist/shared/assistant/voice/voiceTranscript.d.ts +3 -2
  97. package/dist/shared/assistant/voice/voiceTranscript.d.ts.map +1 -1
  98. package/dist/shared/config/index.d.ts +3 -1
  99. package/dist/shared/config/index.d.ts.map +1 -1
  100. package/dist/shared/config/productSlug.d.ts +36 -0
  101. package/dist/shared/config/productSlug.d.ts.map +1 -0
  102. package/dist/shared/config/productSlug.js +23 -0
  103. package/dist/shared/config/products.d.ts +8 -1
  104. package/dist/shared/config/products.d.ts.map +1 -1
  105. package/dist/shared/config/products.js +21 -14
  106. package/dist/shared/hooks/shell/useProducts.d.ts +8 -0
  107. package/dist/shared/hooks/shell/useProducts.d.ts.map +1 -1
  108. package/dist/shared/hooks/shell/useProducts.js +46 -42
  109. package/dist/shared/providers/AppShellProvider.d.ts.map +1 -1
  110. package/dist/shared/providers/AppShellProvider.js +228 -227
  111. package/dist/shared/providers/shell/ThemeProvider.d.ts +1 -1
  112. package/dist/shared/providers/shell/ThemeProvider.d.ts.map +1 -1
  113. package/dist/shared/providers/shell/ThemeProvider.js +58 -57
  114. package/dist/shared/providers/shell/brandAttribute.d.ts +11 -0
  115. package/dist/shared/providers/shell/brandAttribute.d.ts.map +1 -0
  116. package/dist/shared/providers/shell/brandAttribute.js +7 -0
  117. package/dist/shared-assistant.js +153 -137
  118. package/dist/shared-config.js +11 -10
  119. package/dist/shared.js +121 -120
  120. package/package.json +2 -2
  121. package/src/vite/types.ts +4 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ProductPickerSheet.d.ts","sourceRoot":"","sources":["../../src/chrome/ProductPickerSheet.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAO3C,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAkCD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAC9C;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,uBAAuB,CAuH1D,CAAC"}
1
+ {"version":3,"file":"ProductPickerSheet.d.ts","sourceRoot":"","sources":["../../src/chrome/ProductPickerSheet.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQ3C,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAkCD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAC9C;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,uBAAuB,CAuH1D,CAAC"}
@@ -1,110 +1,111 @@
1
- import { Sheet as e, SheetContent as t, SheetHeader as n, SheetTitle as r } from "../ui/sheet.js";
2
- import { filterProducts as i, resolveProductLogo as a } from "./ProductSwitcher.js";
3
- import { useMemo as o, useState as s } from "react";
4
- import { jsx as c, jsxs as l } from "react/jsx-runtime";
1
+ import { isSameProductSlug as e } from "../shared/config/productSlug.js";
2
+ import { Sheet as t, SheetContent as n, SheetHeader as r, SheetTitle as i } from "../ui/sheet.js";
3
+ import { filterProducts as a, resolveProductLogo as o } from "./ProductSwitcher.js";
4
+ import { useMemo as s, useState as c } from "react";
5
+ import { jsx as l, jsxs as u } from "react/jsx-runtime";
5
6
  //#region src/chrome/ProductPickerSheet.tsx
6
- var u = 6, d = ({ product: e }) => {
7
- let [t, n] = s(!1), r = a(e);
8
- return r && !t ? /* @__PURE__ */ c("div", {
7
+ var d = 6, f = ({ product: e }) => {
8
+ let [t, n] = c(!1), r = o(e);
9
+ return r && !t ? /* @__PURE__ */ l("div", {
9
10
  className: "size-10 rounded-lg bg-white p-1 ring-1 ring-border-default dark:ring-border-strong flex items-center justify-center flex-shrink-0 overflow-hidden",
10
- children: /* @__PURE__ */ c("img", {
11
+ children: /* @__PURE__ */ l("img", {
11
12
  src: r,
12
13
  alt: e.name,
13
14
  className: "size-full object-contain",
14
15
  onError: () => n(!0)
15
16
  })
16
- }) : e.icon ? /* @__PURE__ */ c("div", {
17
+ }) : e.icon ? /* @__PURE__ */ l("div", {
17
18
  className: "size-10 rounded-lg bg-[var(--color-accent-soft)] flex items-center justify-center flex-shrink-0",
18
19
  children: e.icon
19
- }) : /* @__PURE__ */ c("div", {
20
+ }) : /* @__PURE__ */ l("div", {
20
21
  className: "size-10 rounded-lg bg-action-primary-bg flex items-center justify-center flex-shrink-0",
21
- children: /* @__PURE__ */ c("span", {
22
+ children: /* @__PURE__ */ l("span", {
22
23
  className: "text-action-primary-text font-bold text-sm",
23
24
  children: e.name.substring(0, 2).toUpperCase()
24
25
  })
25
26
  });
26
- }, f = ({ open: a, onOpenChange: f, products: p, currentProductId: m, onProductChange: h }) => {
27
- let [g, _] = s(""), v = p.length > u, y = o(() => i(p, g), [p, g]), b = (e) => {
28
- h && h(e), f(!1);
27
+ }, p = ({ open: o, onOpenChange: p, products: m, currentProductId: h, onProductChange: g }) => {
28
+ let [_, v] = c(""), y = m.length > d, b = s(() => a(m, _), [m, _]), x = (e) => {
29
+ g && g(e), p(!1);
29
30
  };
30
- return /* @__PURE__ */ c(e, {
31
- open: a,
31
+ return /* @__PURE__ */ l(t, {
32
+ open: o,
32
33
  onOpenChange: (e) => {
33
- e || _(""), f(e);
34
+ e || v(""), p(e);
34
35
  },
35
- children: /* @__PURE__ */ l(t, {
36
+ children: /* @__PURE__ */ u(n, {
36
37
  side: "bottom",
37
38
  className: "h-[60vh] flex flex-col p-0",
38
39
  children: [
39
- /* @__PURE__ */ c(n, {
40
+ /* @__PURE__ */ l(r, {
40
41
  className: "px-4 pt-4 pb-2 border-b border-border-subtle",
41
- children: /* @__PURE__ */ c(r, {
42
+ children: /* @__PURE__ */ l(i, {
42
43
  className: "text-text-primary",
43
44
  children: "Switch Product"
44
45
  })
45
46
  }),
46
- v && /* @__PURE__ */ l("div", {
47
+ y && /* @__PURE__ */ u("div", {
47
48
  className: "relative px-4 py-2 border-b border-border-subtle",
48
- children: [/* @__PURE__ */ c("svg", {
49
+ children: [/* @__PURE__ */ l("svg", {
49
50
  className: "pointer-events-none absolute left-7 top-1/2 -translate-y-1/2 size-4 text-text-muted",
50
51
  fill: "none",
51
52
  stroke: "currentColor",
52
53
  viewBox: "0 0 24 24",
53
- children: /* @__PURE__ */ c("path", {
54
+ children: /* @__PURE__ */ l("path", {
54
55
  strokeLinecap: "round",
55
56
  strokeLinejoin: "round",
56
57
  strokeWidth: 2,
57
58
  d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"
58
59
  })
59
- }), /* @__PURE__ */ c("input", {
60
+ }), /* @__PURE__ */ l("input", {
60
61
  type: "text",
61
- value: g,
62
- onChange: (e) => _(e.target.value),
62
+ value: _,
63
+ onChange: (e) => v(e.target.value),
63
64
  placeholder: "Search products…",
64
65
  "aria-label": "Search products",
65
66
  className: "w-full rounded-md border border-border-subtle bg-bg-surface py-2.5 pl-9 pr-3 text-sm text-text-primary placeholder:text-text-muted focus:border-transparent focus:outline-none focus:ring-2 focus:ring-[var(--color-action-primary-border)]"
66
67
  })]
67
68
  }),
68
- /* @__PURE__ */ l("div", {
69
+ /* @__PURE__ */ u("div", {
69
70
  className: "flex-1 overflow-y-auto py-2",
70
- children: [y.length === 0 && /* @__PURE__ */ l("p", {
71
+ children: [b.length === 0 && /* @__PURE__ */ u("p", {
71
72
  className: "px-4 py-6 text-center text-body-sm text-text-muted",
72
73
  children: [
73
74
  "No products match “",
74
- g,
75
+ _,
75
76
  "”"
76
77
  ]
77
- }), y.map((e) => /* @__PURE__ */ l("button", {
78
- onClick: () => b(e),
79
- className: `w-full flex items-center gap-4 px-4 py-3.5 text-body-sm transition-colors ${e.id === m ? "bg-[var(--color-accent-soft)]" : "hover:bg-bg-sunken"}`,
78
+ }), b.map((t) => /* @__PURE__ */ u("button", {
79
+ onClick: () => x(t),
80
+ className: `w-full flex items-center gap-4 px-4 py-3.5 text-body-sm transition-colors ${e(t.id, h) ? "bg-[var(--color-accent-soft)]" : "hover:bg-bg-sunken"}`,
80
81
  children: [
81
- /* @__PURE__ */ c(d, { product: e }),
82
- /* @__PURE__ */ l("div", {
82
+ /* @__PURE__ */ l(f, { product: t }),
83
+ /* @__PURE__ */ u("div", {
83
84
  className: "flex-1 text-left min-w-0",
84
- children: [/* @__PURE__ */ c("p", {
85
+ children: [/* @__PURE__ */ l("p", {
85
86
  className: "font-medium text-text-primary",
86
- children: e.name
87
- }), e.description && /* @__PURE__ */ c("p", {
87
+ children: t.name
88
+ }), t.description && /* @__PURE__ */ l("p", {
88
89
  className: "text-xs text-text-secondary truncate",
89
- children: e.description
90
+ children: t.description
90
91
  })]
91
92
  }),
92
- e.id === m && /* @__PURE__ */ c("svg", {
93
+ e(t.id, h) && /* @__PURE__ */ l("svg", {
93
94
  className: "size-5 text-action-primary-bg flex-shrink-0",
94
95
  fill: "currentColor",
95
96
  viewBox: "0 0 20 20",
96
- children: /* @__PURE__ */ c("path", {
97
+ children: /* @__PURE__ */ l("path", {
97
98
  fillRule: "evenodd",
98
99
  d: "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z",
99
100
  clipRule: "evenodd"
100
101
  })
101
102
  }),
102
- e.url && e.id !== m && /* @__PURE__ */ c("svg", {
103
+ t.url && !e(t.id, h) && /* @__PURE__ */ l("svg", {
103
104
  className: "size-4 text-text-muted flex-shrink-0",
104
105
  fill: "none",
105
106
  stroke: "currentColor",
106
107
  viewBox: "0 0 24 24",
107
- children: /* @__PURE__ */ c("path", {
108
+ children: /* @__PURE__ */ l("path", {
108
109
  strokeLinecap: "round",
109
110
  strokeLinejoin: "round",
110
111
  strokeWidth: 2,
@@ -112,11 +113,11 @@ var u = 6, d = ({ product: e }) => {
112
113
  })
113
114
  })
114
115
  ]
115
- }, e.id))]
116
+ }, t.id))]
116
117
  })
117
118
  ]
118
119
  })
119
120
  });
120
121
  };
121
122
  //#endregion
122
- export { f as ProductPickerSheet };
123
+ export { p as ProductPickerSheet };
@@ -1 +1 @@
1
- {"version":3,"file":"ProductSwitcher.d.ts","sourceRoot":"","sources":["../../src/chrome/ProductSwitcher.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAWhC,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,MAAM,GAAG,SAAS,CAKrB;AA0CD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EACzF,QAAQ,EAAE,CAAC,EAAE,EACb,KAAK,EAAE,MAAM,GACZ,CAAC,EAAE,CASL;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,OAAO,EAAE,EACnB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,GAAG,SAAS,CAOrB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,4CAA4C;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CAgNpD,CAAC"}
1
+ {"version":3,"file":"ProductSwitcher.d.ts","sourceRoot":"","sources":["../../src/chrome/ProductSwitcher.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAYhC,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,MAAM,GAAG,SAAS,CAKrB;AA0CD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EACzF,QAAQ,EAAE,CAAC,EAAE,EACb,KAAK,EAAE,MAAM,GACZ,CAAC,EAAE,CASL;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,OAAO,EAAE,EACnB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,GAAG,SAAS,CAOrB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,4CAA4C;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CAgNpD,CAAC"}
@@ -1,82 +1,83 @@
1
- import { getProductsWithUrls as e } from "../shared/config/products.js";
2
- import { useShellLabel as t } from "../shared/providers/shell/useShellLabel.js";
3
- import { useEffect as n, useMemo as r, useRef as i, useState as a } from "react";
4
- import { jsx as o, jsxs as s } from "react/jsx-runtime";
1
+ import { isSameProductSlug as e } from "../shared/config/productSlug.js";
2
+ import { getProductsWithUrls as t } from "../shared/config/products.js";
3
+ import { useShellLabel as n } from "../shared/providers/shell/useShellLabel.js";
4
+ import { useEffect as r, useMemo as i, useRef as a, useState as o } from "react";
5
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
5
6
  //#region src/chrome/ProductSwitcher.tsx
6
- var c = 6;
7
- function l(e) {
7
+ var l = 6;
8
+ function u(e) {
8
9
  if (e?.logoUrl) return e.logoUrl;
9
10
  let t = e?.url;
10
11
  if (!(!t || t === "#")) return `${t.replace(/\/+$/, "")}/icons/icon.svg`;
11
12
  }
12
- var u = ({ product: e, sizeClass: t, textClass: n }) => {
13
- let [r, i] = a(!1), s = l(e), c = !!s && !r;
14
- return /* @__PURE__ */ o("div", {
13
+ var d = ({ product: e, sizeClass: t, textClass: n }) => {
14
+ let [r, i] = o(!1), a = u(e), c = !!a && !r;
15
+ return /* @__PURE__ */ s("div", {
15
16
  className: `${t} rounded-md flex items-center justify-center flex-shrink-0 overflow-hidden ${c ? "bg-white p-0.5 ring-1 ring-border-default dark:ring-border-strong" : `text-text-inverse font-semibold ${n}`}`,
16
17
  style: c ? void 0 : { backgroundColor: e?.color || "var(--color-action-primary-bg)" },
17
- children: c ? /* @__PURE__ */ o("img", {
18
- src: s,
18
+ children: c ? /* @__PURE__ */ s("img", {
19
+ src: a,
19
20
  alt: e?.name ?? "",
20
21
  className: "size-full object-contain",
21
22
  onError: () => i(!0)
22
23
  }) : e?.icon || e?.name.charAt(0)
23
24
  });
24
25
  };
25
- function d(e, t) {
26
+ function f(e, t) {
26
27
  let n = t.trim().toLowerCase();
27
28
  return n ? e.filter((e) => e.name.toLowerCase().includes(n) || e.id.toLowerCase().includes(n) || (e.description ? e.description.toLowerCase().includes(n) : !1)) : e;
28
29
  }
29
- function f(t, n) {
30
- return t.find((e) => e.id === n) || (n ? e().find((e) => e.id === n) || {
31
- id: n,
32
- name: n,
30
+ function p(n, r) {
31
+ return n.find((t) => e(t.id, r)) || (r ? t().find((t) => e(t.id, r)) || {
32
+ id: r,
33
+ name: r,
33
34
  url: "#"
34
- } : t[0]);
35
+ } : n[0]);
35
36
  }
36
- var p = ({ products: e, currentProductId: l, onProductChange: p, compact: m = !1 }) => {
37
- let h = t(), [g, _] = a(!1), [v, y] = a(""), b = i(null), x = i(null), S = f(e, l), C = e.length > c, w = r(() => d(e, v), [e, v]);
38
- n(() => {
37
+ var m = ({ products: t, currentProductId: u, onProductChange: m, compact: h = !1 }) => {
38
+ let g = n(), [_, v] = o(!1), [y, b] = o(""), x = a(null), S = a(null), C = p(t, u), w = t.length > l, T = i(() => f(t, y), [t, y]);
39
+ r(() => {
39
40
  let e = (e) => {
40
- b.current && !b.current.contains(e.target) && _(!1);
41
+ x.current && !x.current.contains(e.target) && v(!1);
41
42
  };
42
- if (g) return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
43
- }, [g]), n(() => {
44
- if (!g) {
45
- y("");
43
+ if (_) return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
44
+ }, [_]), r(() => {
45
+ if (!_) {
46
+ b("");
46
47
  return;
47
48
  }
48
- if (C) {
49
- let e = setTimeout(() => x.current?.focus(), 60);
49
+ if (w) {
50
+ let e = setTimeout(() => S.current?.focus(), 60);
50
51
  return () => clearTimeout(e);
51
52
  }
52
- }, [g, C]);
53
- let T = (e) => {
54
- e.comingSoon || (p ? p(e) : window.location.href = e.url, _(!1));
53
+ }, [_, w]);
54
+ let E = (e) => {
55
+ e.comingSoon || (m ? m(e) : window.location.href = e.url, v(!1));
55
56
  };
56
- return /* @__PURE__ */ s("div", {
57
+ return /* @__PURE__ */ c("div", {
57
58
  className: "relative",
58
- ref: b,
59
- children: [/* @__PURE__ */ s("button", {
60
- onClick: () => _(!g),
61
- className: `flex items-center gap-2 px-3 py-2 rounded-button hover:bg-bg-sunken transition-colors ${g ? "bg-bg-sunken" : ""}`,
62
- "aria-label": h("productSwitcher.title", "Switch product"),
63
- "aria-expanded": g,
59
+ ref: x,
60
+ children: [/* @__PURE__ */ c("button", {
61
+ onClick: () => v(!_),
62
+ className: `flex items-center gap-2 px-3 py-2 rounded-button hover:bg-bg-sunken transition-colors ${_ ? "bg-bg-sunken" : ""}`,
63
+ "aria-label": g("productSwitcher.title", "Switch product"),
64
+ "aria-expanded": _,
64
65
  children: [
65
- /* @__PURE__ */ o(u, {
66
- product: S,
66
+ /* @__PURE__ */ s(d, {
67
+ product: C,
67
68
  sizeClass: "size-6",
68
69
  textClass: "text-xs"
69
70
  }),
70
- !m && /* @__PURE__ */ o("span", {
71
+ !h && /* @__PURE__ */ s("span", {
71
72
  className: "text-body-sm font-medium text-text-primary",
72
- children: S?.name
73
+ children: C?.name
73
74
  }),
74
- !m && /* @__PURE__ */ o("svg", {
75
- className: `w-4 h-4 text-text-secondary transition-transform ${g ? "rotate-180" : ""}`,
75
+ !h && /* @__PURE__ */ s("svg", {
76
+ className: `w-4 h-4 text-text-secondary transition-transform ${_ ? "rotate-180" : ""}`,
76
77
  fill: "none",
77
78
  stroke: "currentColor",
78
79
  viewBox: "0 0 24 24",
79
- children: /* @__PURE__ */ o("path", {
80
+ children: /* @__PURE__ */ s("path", {
80
81
  strokeLinecap: "round",
81
82
  strokeLinejoin: "round",
82
83
  strokeWidth: 2,
@@ -84,54 +85,54 @@ var p = ({ products: e, currentProductId: l, onProductChange: p, compact: m = !1
84
85
  })
85
86
  })
86
87
  ]
87
- }), g && /* @__PURE__ */ s("div", {
88
+ }), _ && /* @__PURE__ */ c("div", {
88
89
  className: "absolute right-0 mt-2 w-[calc(100vw-1.5rem)] sm:w-72 max-w-72 bg-bg-elevated border border-border-subtle rounded-card shadow-[var(--shadow-elevation-4)] z-50 py-2 overflow-hidden animate-in fade-in-0 zoom-in-95 slide-in-from-top-2 duration-200",
89
90
  children: [
90
- /* @__PURE__ */ o("div", {
91
+ /* @__PURE__ */ s("div", {
91
92
  className: "px-4 py-2 border-b border-border-subtle",
92
- children: /* @__PURE__ */ o("p", {
93
+ children: /* @__PURE__ */ s("p", {
93
94
  className: "text-[11px] font-medium text-text-muted uppercase tracking-wider",
94
- children: h("productSwitcher.title", "Switch Product")
95
+ children: g("productSwitcher.title", "Switch Product")
95
96
  })
96
97
  }),
97
- C && /* @__PURE__ */ s("div", {
98
+ w && /* @__PURE__ */ c("div", {
98
99
  className: "relative px-3 py-2 border-b border-border-subtle",
99
100
  children: [
100
- /* @__PURE__ */ o("svg", {
101
+ /* @__PURE__ */ s("svg", {
101
102
  className: "pointer-events-none absolute left-6 top-1/2 -translate-y-1/2 size-4 text-text-muted",
102
103
  fill: "none",
103
104
  stroke: "currentColor",
104
105
  viewBox: "0 0 24 24",
105
- children: /* @__PURE__ */ o("path", {
106
+ children: /* @__PURE__ */ s("path", {
106
107
  strokeLinecap: "round",
107
108
  strokeLinejoin: "round",
108
109
  strokeWidth: 2,
109
110
  d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"
110
111
  })
111
112
  }),
112
- /* @__PURE__ */ o("input", {
113
- ref: x,
113
+ /* @__PURE__ */ s("input", {
114
+ ref: S,
114
115
  type: "text",
115
- value: v,
116
- onChange: (e) => y(e.target.value),
116
+ value: y,
117
+ onChange: (e) => b(e.target.value),
117
118
  onKeyDown: (e) => {
118
- e.key === "Escape" && (v ? (e.stopPropagation(), y("")) : _(!1));
119
+ e.key === "Escape" && (y ? (e.stopPropagation(), b("")) : v(!1));
119
120
  },
120
- placeholder: h("productSwitcher.searchPlaceholder", "Search products…"),
121
- "aria-label": h("productSwitcher.searchAria", "Search products"),
121
+ placeholder: g("productSwitcher.searchPlaceholder", "Search products…"),
122
+ "aria-label": g("productSwitcher.searchAria", "Search products"),
122
123
  className: "w-full rounded-md border border-border-subtle bg-bg-surface py-2 pl-9 pr-8 text-sm text-text-primary placeholder:text-text-muted transition-all duration-200 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-[var(--color-action-primary-border)]"
123
124
  }),
124
- v && /* @__PURE__ */ o("button", {
125
+ y && /* @__PURE__ */ s("button", {
125
126
  type: "button",
126
- onClick: () => y(""),
127
- "aria-label": h("common.clearSearch", "Clear search"),
127
+ onClick: () => b(""),
128
+ "aria-label": g("common.clearSearch", "Clear search"),
128
129
  className: "absolute right-5 top-1/2 -translate-y-1/2 rounded-button p-1 text-text-muted transition-colors hover:bg-bg-sunken hover:text-text-primary",
129
- children: /* @__PURE__ */ o("svg", {
130
+ children: /* @__PURE__ */ s("svg", {
130
131
  className: "size-4",
131
132
  fill: "none",
132
133
  stroke: "currentColor",
133
134
  viewBox: "0 0 24 24",
134
- children: /* @__PURE__ */ o("path", {
135
+ children: /* @__PURE__ */ s("path", {
135
136
  strokeLinecap: "round",
136
137
  strokeLinejoin: "round",
137
138
  strokeWidth: 2,
@@ -141,50 +142,50 @@ var p = ({ products: e, currentProductId: l, onProductChange: p, compact: m = !1
141
142
  })
142
143
  ]
143
144
  }),
144
- /* @__PURE__ */ s("div", {
145
+ /* @__PURE__ */ c("div", {
145
146
  className: "py-1 max-h-96 overflow-y-auto",
146
- children: [w.length === 0 && /* @__PURE__ */ s("p", {
147
+ children: [T.length === 0 && /* @__PURE__ */ c("p", {
147
148
  className: "px-4 py-6 text-center text-body-sm text-text-muted",
148
149
  children: [
149
150
  "No products match “",
150
- v,
151
+ y,
151
152
  "”"
152
153
  ]
153
- }), w.map((e) => /* @__PURE__ */ s("button", {
154
- onClick: () => T(e),
155
- disabled: e.comingSoon,
156
- "aria-disabled": e.comingSoon,
157
- title: e.comingSoon ? h("productSwitcher.soon", "Soon") : e.name,
158
- className: `w-full flex items-center gap-3 px-4 py-2.5 text-body-sm transition-colors ${e.comingSoon ? "text-text-muted cursor-not-allowed opacity-60" : e.id === l ? "bg-[var(--color-accent-soft)] text-text-primary font-medium" : "text-text-primary hover:bg-bg-sunken"}`,
154
+ }), T.map((t) => /* @__PURE__ */ c("button", {
155
+ onClick: () => E(t),
156
+ disabled: t.comingSoon,
157
+ "aria-disabled": t.comingSoon,
158
+ title: t.comingSoon ? g("productSwitcher.soon", "Soon") : t.name,
159
+ className: `w-full flex items-center gap-3 px-4 py-2.5 text-body-sm transition-colors ${t.comingSoon ? "text-text-muted cursor-not-allowed opacity-60" : e(t.id, u) ? "bg-[var(--color-accent-soft)] text-text-primary font-medium" : "text-text-primary hover:bg-bg-sunken"}`,
159
160
  children: [
160
- /* @__PURE__ */ o(u, {
161
- product: e,
161
+ /* @__PURE__ */ s(d, {
162
+ product: t,
162
163
  sizeClass: "size-8",
163
164
  textClass: "text-sm"
164
165
  }),
165
- /* @__PURE__ */ o("span", {
166
+ /* @__PURE__ */ s("span", {
166
167
  className: "flex-1 text-left leading-tight",
167
- children: e.name
168
+ children: t.name
168
169
  }),
169
- e.comingSoon ? /* @__PURE__ */ o("span", {
170
+ t.comingSoon ? /* @__PURE__ */ s("span", {
170
171
  className: "shrink-0 whitespace-nowrap rounded-full border border-border-subtle bg-bg-sunken px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-text-secondary",
171
- children: h("productSwitcher.soon", "Soon")
172
- }) : e.id === l && /* @__PURE__ */ o("svg", {
172
+ children: g("productSwitcher.soon", "Soon")
173
+ }) : e(t.id, u) && /* @__PURE__ */ s("svg", {
173
174
  className: "size-5 text-action-primary-bg",
174
175
  fill: "currentColor",
175
176
  viewBox: "0 0 20 20",
176
- children: /* @__PURE__ */ o("path", {
177
+ children: /* @__PURE__ */ s("path", {
177
178
  fillRule: "evenodd",
178
179
  d: "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z",
179
180
  clipRule: "evenodd"
180
181
  })
181
182
  })
182
183
  ]
183
- }, e.id))]
184
+ }, t.id))]
184
185
  })
185
186
  ]
186
187
  })]
187
188
  });
188
189
  };
189
190
  //#endregion
190
- export { p as ProductSwitcher, d as filterProducts, l as resolveProductLogo };
191
+ export { m as ProductSwitcher, f as filterProducts, u as resolveProductLogo };
@@ -79,9 +79,11 @@ export interface AssistantMessageMetadata {
79
79
  * report, "I see the same chat in the normal conversation tab, both are
80
80
  * separate, don't confuse".
81
81
  *
82
- * Stamped at send time and persisted, so the distinction survives a reload —
83
- * the chat transcript is never rehydrated from the backend, so the store is
84
- * the only source of truth for what the panel shows.
82
+ * Stamped at send time and persisted, so the distinction survives a reload.
83
+ * ★ BOFF-7335: a conversation read back from server history enters the store
84
+ * ONLY through `fromHistoryEntry` (history/historyMapping), which rebuilds
85
+ * this marker from the saved entry — `voice: true` with or without a session
86
+ * id — so a spoken turn reopened on any device is still spoken, never typed.
85
87
  */
86
88
  voice?: boolean;
87
89
  /**
@@ -149,8 +151,38 @@ export interface AssistantMessageMetadata {
149
151
  * error: the turn still closed as a normal answer.
150
152
  */
151
153
  incomplete?: true;
154
+ /**
155
+ * ★ BOFF-7335: the SAVED copy of this message was cut to fit the gateway's
156
+ * request limit (the local copy is always complete). Only ever set on a
157
+ * message read back from server history.
158
+ */
159
+ truncated?: true;
160
+ /**
161
+ * ★ BOFF-7335: structured records of what a turn proposed or did — a generic
162
+ * slot, deliberately not the approval schema. A record is history, never an
163
+ * instruction: nothing re-runs, re-approves or re-sends it on reopen, and a
164
+ * record still `proposed` when it is read back is shown as `expired`.
165
+ */
166
+ records?: readonly AssistantHistoryRecord[];
152
167
  [key: string]: unknown;
153
168
  }
169
+ /** Where a recorded action stands. `proposed` never survives a reload (it reads back as `expired`). */
170
+ export type AssistantHistoryRecordStatus = "proposed" | "applied" | "failed" | "expired" | "cancelled";
171
+ /**
172
+ * One structured record on a message (BOFF-7335). `kind` is namespaced by the
173
+ * feature that writes it (`[a-z][a-z0-9._-]*`) and `version` versions its
174
+ * `data`, so a later feature can add records without a schema change on either
175
+ * side — and without this file knowing anything about approvals.
176
+ */
177
+ export interface AssistantHistoryRecord {
178
+ kind: string;
179
+ version: number;
180
+ status?: AssistantHistoryRecordStatus;
181
+ summary?: string;
182
+ data?: Record<string, unknown>;
183
+ /** ISO time the record was written. */
184
+ at?: string;
185
+ }
154
186
  export interface Message {
155
187
  id: string;
156
188
  role: "user" | "assistant" | "system";
@@ -161,7 +193,20 @@ export interface Message {
161
193
  output: number;
162
194
  };
163
195
  metadata?: AssistantMessageMetadata;
196
+ /**
197
+ * ★ BOFF-7335: where this message stands with server history — `pending`
198
+ * once it is queued to be saved, `saved` once the server has it (or it was
199
+ * read from the server). Absent: device-only, or history is off.
200
+ *
201
+ * Top-level, never inside `metadata`: `patchMessage` REPLACES metadata, so a
202
+ * flag kept there would be erased by the next reply update.
203
+ */
204
+ historyState?: MessageHistoryState;
205
+ /** ★ BOFF-7335: the message's position in the saved conversation (1..n), once known. */
206
+ historySeq?: number;
164
207
  }
208
+ /** See `Message.historyState`. */
209
+ export type MessageHistoryState = "pending" | "saved";
165
210
  export interface Conversation {
166
211
  id: string;
167
212
  title: string;
@@ -198,6 +243,49 @@ export interface Conversation {
198
243
  * ★ `mode` stays the transport value either way: Auto never sends as itself.
199
244
  */
200
245
  routedBy?: ConversationRouting;
246
+ /**
247
+ * ★ BOFF-7335: this conversation is backed by server history. Absent means
248
+ * DEVICE-ONLY — every conversation created before history was switched on,
249
+ * or while the product had not opted in, or while no account or workspace
250
+ * was known. A device-only conversation is never uploaded later.
251
+ */
252
+ sync?: ConversationSyncStamp;
253
+ }
254
+ /**
255
+ * The server-history stamp on a conversation (BOFF-7335).
256
+ *
257
+ * ★★ The owner — product, workspace, actor — is fixed when the conversation is
258
+ * created and never changes. A turn is saved only while all three match the
259
+ * active scope, so a conversation can never be written into another
260
+ * workspace's or another account's history.
261
+ *
262
+ * ★ Every field is optional to older builds: they spread conversations and
263
+ * messages in every action and in `partialize`, so a product rolled back to an
264
+ * earlier fe-libs keeps this stamp intact instead of stripping it.
265
+ */
266
+ export interface ConversationSyncStamp {
267
+ v: 1;
268
+ product: string;
269
+ workspaceId: string;
270
+ actorId: string;
271
+ /** `created` on this device · `remote` read from the server · `legacy` saved before v2 (read-only). */
272
+ origin: "created" | "remote" | "legacy";
273
+ /** The server's own id, once known. */
274
+ serverId?: string;
275
+ /** The server revision of the conversation last applied here. */
276
+ revision?: number;
277
+ /** The highest CONTIGUOUS server `seq` held locally. */
278
+ lastSeq?: number;
279
+ /** Older messages exist on the server than are held here. */
280
+ hasOlder?: true;
281
+ /** Where "Show earlier messages" continues from. */
282
+ olderCursor?: string;
283
+ /** Renamed on this device: the server's title never overwrites it (renames are not synced). */
284
+ titleLocked?: true;
285
+ /** Why the latest turns are not being saved. */
286
+ blocked?: "quota" | "invalid" | "scope";
287
+ /** When it was last opened here (ISO), for cache eviction. */
288
+ openedAt?: string;
201
289
  }
202
290
  /**
203
291
  * How a conversation came by its mode. See `Conversation.routedBy` and
@@ -1 +1 @@
1
- {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/conversation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/conversation.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,21 @@ import { AssistantSandboxAuthContext } from './types';
15
15
  */
16
16
  export { isQuotaExhaustedError } from './quota';
17
17
  export declare function buildSandboxContextInput(workspaceId: string, authContext?: AssistantSandboxAuthContext): Record<string, unknown>;
18
+ /**
19
+ * ONE attempt, no retry — the caller owns retry.
20
+ *
21
+ * ★ Exported for server history (BOFF-7335), whose engine retries with its own
22
+ * backoff and classifier and must never be retried blindly underneath: a
23
+ * blind resend of a save that did land is harmless (saves are idempotent), but
24
+ * a hidden retry loop hides how long the gateway was actually down.
25
+ */
26
+ export declare function executeAssistantGraphQLOnce<TData>(params: {
27
+ query: string;
28
+ operationName: string;
29
+ variables: Record<string, unknown>;
30
+ workspaceId: string;
31
+ authContext?: AssistantSandboxAuthContext;
32
+ }): Promise<TData>;
18
33
  export declare function executeSandboxGraphQL<TData>(params: {
19
34
  query: string;
20
35
  operationName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"gatewayClient.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/gatewayClient.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAe3D;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEhD,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,2BAA2B,GACxC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAOzB;AAuCD,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,2BAA2B,CAAC;CAC3C,GAAG,OAAO,CAAC,KAAK,CAAC,CAyBjB"}
1
+ {"version":3,"file":"gatewayClient.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/gatewayClient.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAe3D;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEhD,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,2BAA2B,GACxC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAOzB;AAED;;;;;;;GAOG;AACH,wBAAsB,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,2BAA2B,CAAC;CAC3C,GAAG,OAAO,CAAC,KAAK,CAAC,CA6BjB;AAED,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,2BAA2B,CAAC;CAC3C,GAAG,OAAO,CAAC,KAAK,CAAC,CAyBjB"}