@burdenoff/fe-libs 2026.928.2 → 2026.929.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 (142) hide show
  1. package/dist/shared/assistant/adminModeSendGate.d.ts +6 -5
  2. package/dist/shared/assistant/adminModeSendGate.d.ts.map +1 -1
  3. package/dist/shared/assistant/adminModeSendGate.js +11 -11
  4. package/dist/shared/assistant/api.d.ts +291 -28
  5. package/dist/shared/assistant/api.d.ts.map +1 -1
  6. package/dist/shared/assistant/api.js +351 -147
  7. package/dist/shared/assistant/autoRouting.d.ts +11 -3
  8. package/dist/shared/assistant/autoRouting.d.ts.map +1 -1
  9. package/dist/shared/assistant/autoRouting.js +7 -7
  10. package/dist/shared/assistant/capabilities.d.ts +28 -0
  11. package/dist/shared/assistant/capabilities.d.ts.map +1 -1
  12. package/dist/shared/assistant/capabilities.js +19 -10
  13. package/dist/shared/assistant/conversation.d.ts +24 -2
  14. package/dist/shared/assistant/conversation.d.ts.map +1 -1
  15. package/dist/shared/assistant/createSandboxAssistantTransport.d.ts.map +1 -1
  16. package/dist/shared/assistant/createSandboxAssistantTransport.js +67 -54
  17. package/dist/shared/assistant/history/historyList.js +1 -1
  18. package/dist/shared/assistant/history/historyMapping.d.ts.map +1 -1
  19. package/dist/shared/assistant/history/historyMapping.js +5 -1
  20. package/dist/shared/assistant/history/historyResume.js +7 -7
  21. package/dist/shared/assistant/i18nManifest.d.ts +53 -0
  22. package/dist/shared/assistant/i18nManifest.d.ts.map +1 -1
  23. package/dist/shared/assistant/i18nManifest.js +75 -16
  24. package/dist/shared/assistant/index.d.ts +15 -0
  25. package/dist/shared/assistant/index.d.ts.map +1 -1
  26. package/dist/shared/assistant/modeCapabilities.js +1 -1
  27. package/dist/shared/assistant/operations.d.ts +22 -0
  28. package/dist/shared/assistant/operations.d.ts.map +1 -1
  29. package/dist/shared/assistant/operations.js +2 -2
  30. package/dist/shared/assistant/prewarm.d.ts +7 -0
  31. package/dist/shared/assistant/prewarm.d.ts.map +1 -1
  32. package/dist/shared/assistant/prewarm.js +1 -1
  33. package/dist/shared/assistant/product.d.ts +80 -2
  34. package/dist/shared/assistant/product.d.ts.map +1 -1
  35. package/dist/shared/assistant/product.js +10 -6
  36. package/dist/shared/assistant/proposalWriteRules.d.ts +40 -0
  37. package/dist/shared/assistant/proposalWriteRules.d.ts.map +1 -0
  38. package/dist/shared/assistant/proposalWriteRules.js +14 -0
  39. package/dist/shared/assistant/store.d.ts +17 -0
  40. package/dist/shared/assistant/store.d.ts.map +1 -1
  41. package/dist/shared/assistant/store.js +50 -43
  42. package/dist/shared/assistant/turnOutcome.d.ts +34 -2
  43. package/dist/shared/assistant/turnOutcome.d.ts.map +1 -1
  44. package/dist/shared/assistant/turnOutcome.js +28 -17
  45. package/dist/shared/assistant/turnOutcomeCopy.d.ts +29 -7
  46. package/dist/shared/assistant/turnOutcomeCopy.d.ts.map +1 -1
  47. package/dist/shared/assistant/turnOutcomeCopy.js +18 -6
  48. package/dist/shared/assistant/types.d.ts +5 -1
  49. package/dist/shared/assistant/types.d.ts.map +1 -1
  50. package/dist/shared/assistant/ui/AssistantApiCallsConsentDialog.js +4 -4
  51. package/dist/shared/assistant/ui/AssistantChatArea.d.ts.map +1 -1
  52. package/dist/shared/assistant/ui/AssistantChatArea.js +989 -718
  53. package/dist/shared/assistant/ui/AssistantConversationList.js +6 -6
  54. package/dist/shared/assistant/ui/AssistantLanguageMenu.js +6 -6
  55. package/dist/shared/assistant/ui/AssistantMessageItem.d.ts +8 -1
  56. package/dist/shared/assistant/ui/AssistantMessageItem.d.ts.map +1 -1
  57. package/dist/shared/assistant/ui/AssistantMessageItem.js +77 -76
  58. package/dist/shared/assistant/ui/AssistantMessageList.d.ts +13 -1
  59. package/dist/shared/assistant/ui/AssistantMessageList.d.ts.map +1 -1
  60. package/dist/shared/assistant/ui/AssistantMessageList.js +15 -13
  61. package/dist/shared/assistant/ui/AssistantReplyLanguageSelector.js +5 -5
  62. package/dist/shared/assistant/ui/AssistantSpeechProvider.js +209 -209
  63. package/dist/shared/assistant/ui/AssistantWriteConfirmDialog.d.ts +62 -0
  64. package/dist/shared/assistant/ui/AssistantWriteConfirmDialog.d.ts.map +1 -0
  65. package/dist/shared/assistant/ui/AssistantWriteConfirmDialog.js +253 -0
  66. package/dist/shared/assistant/ui/AssistantWriteProposalCard.d.ts +72 -0
  67. package/dist/shared/assistant/ui/AssistantWriteProposalCard.d.ts.map +1 -0
  68. package/dist/shared/assistant/ui/AssistantWriteProposalCard.js +439 -0
  69. package/dist/shared/assistant/ui/AssistantWriteProposalSlot.d.ts +40 -0
  70. package/dist/shared/assistant/ui/AssistantWriteProposalSlot.d.ts.map +1 -0
  71. package/dist/shared/assistant/ui/AssistantWriteProposalSlot.js +35 -0
  72. package/dist/shared/assistant/ui/composer/AssistantComposer.js +8 -8
  73. package/dist/shared/assistant/ui/useVoiceSession.d.ts +28 -0
  74. package/dist/shared/assistant/ui/useVoiceSession.d.ts.map +1 -1
  75. package/dist/shared/assistant/ui/useVoiceSession.js +159 -110
  76. package/dist/shared/assistant/ui/useWriteProposalConfirm.d.ts +61 -0
  77. package/dist/shared/assistant/ui/useWriteProposalConfirm.d.ts.map +1 -0
  78. package/dist/shared/assistant/ui/useWriteProposalConfirm.js +109 -0
  79. package/dist/shared/assistant/ui/useWriteProposals.d.ts +102 -0
  80. package/dist/shared/assistant/ui/useWriteProposals.d.ts.map +1 -0
  81. package/dist/shared/assistant/ui/useWriteProposals.js +230 -0
  82. package/dist/shared/assistant/ui/voice/AssistantVoiceSession.d.ts +17 -1
  83. package/dist/shared/assistant/ui/voice/AssistantVoiceSession.d.ts.map +1 -1
  84. package/dist/shared/assistant/ui/voice/AssistantVoiceSession.js +141 -109
  85. package/dist/shared/assistant/ui/writeProposalPresentation.d.ts +76 -0
  86. package/dist/shared/assistant/ui/writeProposalPresentation.d.ts.map +1 -0
  87. package/dist/shared/assistant/ui/writeProposalPresentation.js +110 -0
  88. package/dist/shared/assistant/usageReporting.d.ts +108 -0
  89. package/dist/shared/assistant/usageReporting.d.ts.map +1 -0
  90. package/dist/shared/assistant/usageReporting.js +155 -0
  91. package/dist/shared/assistant/useAssistantApiAccess.d.ts +49 -14
  92. package/dist/shared/assistant/useAssistantApiAccess.d.ts.map +1 -1
  93. package/dist/shared/assistant/useAssistantApiAccess.js +43 -25
  94. package/dist/shared/assistant/useAssistantHeartbeat.d.ts.map +1 -1
  95. package/dist/shared/assistant/useAssistantHeartbeat.js +5 -5
  96. package/dist/shared/assistant/useWorkspaceWriteAccess.d.ts +5 -6
  97. package/dist/shared/assistant/useWorkspaceWriteAccess.d.ts.map +1 -1
  98. package/dist/shared/assistant/voice/voiceSession.d.ts +46 -0
  99. package/dist/shared/assistant/voice/voiceSession.d.ts.map +1 -1
  100. package/dist/shared/assistant/voice/voiceSession.js +35 -2
  101. package/dist/shared/assistant/writeConfirmSeam.d.ts +32 -0
  102. package/dist/shared/assistant/writeConfirmSeam.d.ts.map +1 -0
  103. package/dist/shared/assistant/writeConfirmSeam.js +23 -0
  104. package/dist/shared/assistant/writeModeConsent.d.ts +16 -8
  105. package/dist/shared/assistant/writeModeConsent.d.ts.map +1 -1
  106. package/dist/shared/assistant/writeModeConsent.js +2 -2
  107. package/dist/shared/assistant/writeProposalDiscovery.d.ts +123 -0
  108. package/dist/shared/assistant/writeProposalDiscovery.d.ts.map +1 -0
  109. package/dist/shared/assistant/writeProposalDiscovery.js +210 -0
  110. package/dist/shared/assistant/writeProposalErrorCopy.d.ts +135 -0
  111. package/dist/shared/assistant/writeProposalErrorCopy.d.ts.map +1 -0
  112. package/dist/shared/assistant/writeProposalErrorCopy.js +135 -0
  113. package/dist/shared/assistant/writeProposalVoice.d.ts +133 -0
  114. package/dist/shared/assistant/writeProposalVoice.d.ts.map +1 -0
  115. package/dist/shared/assistant/writeProposalVoice.js +66 -0
  116. package/dist/shared/assistant/writeProposals.d.ts +268 -0
  117. package/dist/shared/assistant/writeProposals.d.ts.map +1 -0
  118. package/dist/shared/assistant/writeProposals.js +445 -0
  119. package/dist/shared/assistant/writeReplyBinder.d.ts +166 -0
  120. package/dist/shared/assistant/writeReplyBinder.d.ts.map +1 -0
  121. package/dist/shared/assistant/writeReplyBinder.js +233 -0
  122. package/dist/shared/assistant/writeReplySend.d.ts +110 -0
  123. package/dist/shared/assistant/writeReplySend.d.ts.map +1 -0
  124. package/dist/shared/assistant/writeReplySend.js +93 -0
  125. package/dist/shared/graphql/fetch.d.ts +12 -1
  126. package/dist/shared/graphql/fetch.d.ts.map +1 -1
  127. package/dist/shared/graphql/fetch.js +101 -80
  128. package/dist/shared/providers/shell/ActiveContextProvider.d.ts.map +1 -1
  129. package/dist/shared/providers/shell/ActiveContextProvider.js +28 -26
  130. package/dist/shared/providers/shell/PersonaSurfaceProvider.d.ts.map +1 -1
  131. package/dist/shared/providers/shell/PersonaSurfaceProvider.js +165 -193
  132. package/dist/shared/providers/shell/personaSurfaceRemote.d.ts +8 -2
  133. package/dist/shared/providers/shell/personaSurfaceRemote.d.ts.map +1 -1
  134. package/dist/shared/providers/shell/personaSurfaceRemote.js +37 -15
  135. package/dist/shared/providers/shell/useRemoteNavPreferences.d.ts +30 -0
  136. package/dist/shared/providers/shell/useRemoteNavPreferences.d.ts.map +1 -0
  137. package/dist/shared/providers/shell/useRemoteNavPreferences.js +43 -0
  138. package/dist/shared-assistant.js +167 -152
  139. package/dist/ui/modal-shell.d.ts +14 -1
  140. package/dist/ui/modal-shell.d.ts.map +1 -1
  141. package/dist/ui/modal-shell.js +8 -6
  142. package/package.json +2 -2
@@ -0,0 +1,233 @@
1
+ //#region src/shared/assistant/writeReplyBinder.ts
2
+ var e = Object.freeze({
3
+ useButton: Object.freeze({
4
+ key: "writeProposal.useButton",
5
+ fallback: "To make this change, press its confirm button. A reply on its own doesn't confirm it."
6
+ }),
7
+ whichOne: Object.freeze({
8
+ key: "writeProposal.whichOne",
9
+ fallback: "I have {{count}} changes ready. Press the confirm button on the one you want. A reply on its own doesn't confirm any of them."
10
+ }),
11
+ replyCannotRun: Object.freeze({
12
+ key: "writeProposal.replyCannotRun",
13
+ fallback: "A reply can't run a change from this session. You can review or cancel it on its card; running changes from the assistant becomes available once secure confirmation is enabled."
14
+ }),
15
+ cancelled: Object.freeze({
16
+ key: "writeProposal.cancelled",
17
+ fallback: "Cancelled."
18
+ })
19
+ }), t = [
20
+ "yes",
21
+ "yeah",
22
+ "yep",
23
+ "yup",
24
+ "ok",
25
+ "okay",
26
+ "sure",
27
+ "confirm",
28
+ "approve",
29
+ "do it",
30
+ "go ahead",
31
+ "please do",
32
+ "yes please",
33
+ "sounds good",
34
+ "thats right"
35
+ ], n = [
36
+ "no",
37
+ "nope",
38
+ "nah",
39
+ "dont",
40
+ "do not",
41
+ "cancel",
42
+ "stop",
43
+ "never mind",
44
+ "nevermind",
45
+ "not now",
46
+ "forget it",
47
+ "wait",
48
+ "hold on"
49
+ ], r = [
50
+ "please",
51
+ "thanks",
52
+ "thank you"
53
+ ], i = 4, a = Object.freeze({
54
+ affirm: Object.freeze([...t]),
55
+ negative: Object.freeze([...n]),
56
+ courtesy: Object.freeze([...r]),
57
+ maxAffirmTokens: i
58
+ }), o = new Set(t), s = new Set(n), c = new Set(r), l = new Set([...n, ...r]), u = Math.max(...[
59
+ ...t,
60
+ ...n,
61
+ ...r
62
+ ].map((e) => e.split(" ").length)), d = /[\p{L}\p{N}]+(?:['‘’ʼ`][\p{L}\p{N}]+)*/gu, f = /['‘’ʼ`]/g, p = /[,;:.!?…–—\n]|(?:^|\s)-+(?:\s|$)/u, m = /^[\s,;:.!?…–—-]+/u;
63
+ function h(e) {
64
+ let t = [...e.matchAll(d)].map((e) => {
65
+ let t = e.index ?? 0;
66
+ return {
67
+ word: e[0].toLowerCase().replace(f, ""),
68
+ start: t,
69
+ end: t + e[0].length
70
+ };
71
+ });
72
+ return t.map((n, r) => {
73
+ let i = t[r + 1];
74
+ return {
75
+ ...n,
76
+ closesClause: i === void 0 || p.test(e.slice(n.end, i.start))
77
+ };
78
+ });
79
+ }
80
+ function g(e, t, n, r) {
81
+ for (let i = Math.min(u, n - t); i > 0; i--) if (r.has(e.slice(t, t + i).join(" "))) return i;
82
+ return 0;
83
+ }
84
+ function _(e, t, n, r) {
85
+ for (let i = Math.min(u, n - t); i > 0; i--) if (r.has(e.slice(n - i, n).join(" "))) return i;
86
+ return 0;
87
+ }
88
+ function v(e, t, n) {
89
+ if (n <= t || n - t > i) return !1;
90
+ for (let r = t; r < n;) {
91
+ let t = g(e, r, n, o);
92
+ if (t === 0) return !1;
93
+ r += t;
94
+ }
95
+ return !0;
96
+ }
97
+ function y(e) {
98
+ return typeof e == "string" && /^en(?:[-_][A-Za-z0-9]{1,8})*$/i.test(e.trim());
99
+ }
100
+ var b = (e, t = null) => ({
101
+ cls: e,
102
+ remainder: t
103
+ });
104
+ function x(e, t) {
105
+ if (typeof e != "string" || !y(t)) return b("other");
106
+ let n = e.normalize("NFKC"), r = h(n), i = r.map((e) => e.word), a = i.length;
107
+ for (;;) {
108
+ let e = _(i, 0, a, c);
109
+ if (e === 0 || e >= a) break;
110
+ a -= e;
111
+ }
112
+ let u = +(i[0] === "please" && a > 1);
113
+ if (v(i, 0, a) || v(i, u, a)) return b("affirm");
114
+ let d = g(i, u, a, s);
115
+ if (d > 0) {
116
+ let e = u + d - 1, t = u + d;
117
+ for (; t < a;) {
118
+ let n = g(i, t, a, l);
119
+ if (n === 0) break;
120
+ let o = r[t + n - 1];
121
+ if (t + n < a && !o.closesClause) break;
122
+ e = t + n - 1, t += n;
123
+ }
124
+ if (t >= a || !r[e].closesClause || v(i, t, a)) return b("decline");
125
+ let o = n.slice(r[e].end).replace(m, "").trim();
126
+ return o ? b("decline_redirect", o) : b("decline");
127
+ }
128
+ return g(i, u, a, o) > 0 || g(i, 0, a, o) > 0 ? b("affirm_with_change") : b("other");
129
+ }
130
+ function S(e, t) {
131
+ return x(e, t).cls;
132
+ }
133
+ var C = new Set(["typed", "spoken"]);
134
+ function w(e) {
135
+ return C.has(e);
136
+ }
137
+ function T(e) {
138
+ return e === "affirm" ? "affirm" : e === "decline" || e === "decline_redirect" ? "decline" : "other";
139
+ }
140
+ var E = () => ({ from: "utterance" });
141
+ function D(t) {
142
+ let { cls: n, origin: r, localUiMatch: i } = t;
143
+ if (!w(r)) return {
144
+ action: "forward",
145
+ text: E(),
146
+ declineAll: null,
147
+ writeReply: null,
148
+ voiceLine: null
149
+ };
150
+ let a = Number.isFinite(t.liveCount) && t.liveCount > 0 ? Math.floor(t.liveCount) : 0, o = {
151
+ kind: T(n),
152
+ origin: r
153
+ };
154
+ if (a === 0) return n === "affirm" ? {
155
+ action: "forward",
156
+ text: E(),
157
+ declineAll: null,
158
+ writeReply: o,
159
+ voiceLine: null
160
+ } : {
161
+ action: "normal",
162
+ writeReply: o
163
+ };
164
+ switch (n) {
165
+ case "affirm": return {
166
+ action: "local_reply",
167
+ line: t.execution === "enabled" ? a === 1 ? e.useButton : e.whichOne : e.replyCannotRun,
168
+ values: { count: a }
169
+ };
170
+ case "affirm_with_change": return {
171
+ action: "forward",
172
+ text: E(),
173
+ declineAll: "corrected",
174
+ writeReply: o,
175
+ voiceLine: null
176
+ };
177
+ case "decline": return {
178
+ action: "forward",
179
+ text: E(),
180
+ declineAll: "user_declined",
181
+ writeReply: o,
182
+ voiceLine: e.cancelled
183
+ };
184
+ case "decline_redirect": {
185
+ let n = t.remainder?.trim() ?? "";
186
+ if (!n) return {
187
+ action: "forward",
188
+ text: E(),
189
+ declineAll: "user_declined",
190
+ writeReply: o,
191
+ voiceLine: e.cancelled
192
+ };
193
+ let r = {
194
+ from: "remainder",
195
+ value: n
196
+ };
197
+ return i ? {
198
+ action: "local",
199
+ text: r,
200
+ declineAll: "redirected"
201
+ } : {
202
+ action: "forward",
203
+ text: r,
204
+ declineAll: "redirected",
205
+ writeReply: o,
206
+ voiceLine: null
207
+ };
208
+ }
209
+ case "other": return i ? {
210
+ action: "local",
211
+ text: E(),
212
+ declineAll: null
213
+ } : {
214
+ action: "forward",
215
+ text: E(),
216
+ declineAll: null,
217
+ writeReply: o,
218
+ voiceLine: null
219
+ };
220
+ default: return {
221
+ action: "forward",
222
+ text: E(),
223
+ declineAll: null,
224
+ writeReply: {
225
+ kind: "other",
226
+ origin: r
227
+ },
228
+ voiceLine: null
229
+ };
230
+ }
231
+ }
232
+ //#endregion
233
+ export { e as WRITE_REPLY_COPY, a as WRITE_REPLY_LEXICON, x as analyseWriteReply, S as classifyWriteReply, D as decideWriteReply, w as isUserOriginatedWriteReply };
@@ -0,0 +1,110 @@
1
+ import { WriteReplyDeclineReason, WriteReplyLine, WriteReplyTag } from './writeReplyBinder';
2
+ import { SandboxWriteCapabilities, WriteExecutionState } from './writeProposals';
3
+ /** Where a person's own reply came from. */
4
+ export type WriteReplyPersonOrigin = "typed" | "spoken";
5
+ /**
6
+ * What a bound send carries on its way to the model, once the binder has run.
7
+ * The send path re-enters with it and never binds the same send twice.
8
+ */
9
+ export interface WriteReplyBound {
10
+ /** The prompt's `writeReply` (sent only to a proposal-v1 sandbox). */
11
+ writeReply: WriteReplyTag | null;
12
+ /**
13
+ * What the MODEL is sent: the whole reply, or — after a redirecting decline
14
+ * — the request that followed it ("No, open billing" → "open billing"). The
15
+ * thread shows what the person said either way.
16
+ */
17
+ promptText: string;
18
+ /** Whether the ordinary local UI commands may still claim it. */
19
+ localCommands: boolean;
20
+ }
21
+ /** The conversation's waiting changes, as the panel last read them. */
22
+ export interface WriteReplyLiveState {
23
+ /** PENDING proposals: waiting for a decision. */
24
+ count: number;
25
+ /**
26
+ * `enabled` when at least one of them offers its confirm button; otherwise
27
+ * `fenced`, so a "yes" is never pointed at a button that is not there.
28
+ */
29
+ execution: WriteExecutionState;
30
+ }
31
+ export type WriteReplyPlan =
32
+ /** Answer in the panel. Nothing is sent, nothing is declined. */
33
+ {
34
+ kind: "local_reply";
35
+ line: WriteReplyLine;
36
+ values: {
37
+ count: number;
38
+ };
39
+ }
40
+ /**
41
+ * Await `declineAll` when set, then run the UI command matched on
42
+ * `commandText`. When it cannot run here, `fallback` is sent instead.
43
+ */
44
+ | {
45
+ kind: "local";
46
+ commandText: string;
47
+ declineAll: WriteReplyDeclineReason | null;
48
+ fallback: WriteReplyBound;
49
+ }
50
+ /** Await `declineAll` when set, then send `bound`. */
51
+ | {
52
+ kind: "send";
53
+ declineAll: WriteReplyDeclineReason | null;
54
+ bound: WriteReplyBound;
55
+ };
56
+ export interface WriteReplyPlanInput {
57
+ /** What the person typed or said, as they said it. */
58
+ text: string;
59
+ /** The language it was typed or said in. Only English binds. */
60
+ locale: string | null | undefined;
61
+ origin: WriteReplyPersonOrigin;
62
+ hasAttachments: boolean;
63
+ live: WriteReplyLiveState;
64
+ /** Does a local UI command match this text? (`matchLocalUiCommand`) */
65
+ matchesLocalCommand: (text: string) => boolean;
66
+ }
67
+ /**
68
+ * The plan for a person's reply. Pure: every effect is the caller's, and the
69
+ * caller awaits `declineAll` before it sends or runs anything.
70
+ */
71
+ export declare function planWriteReply(input: WriteReplyPlanInput): WriteReplyPlan;
72
+ /** One proposal the panel holds, as far as the binder needs it. */
73
+ export interface WriteReplyHeldProposal {
74
+ status: string;
75
+ /** The issuing sandbox. */
76
+ sandboxId: string;
77
+ /** Whether its card offers the confirm button now. */
78
+ offersConfirm: boolean;
79
+ }
80
+ /**
81
+ * The live state of a conversation's proposals: how many are pending, and
82
+ * whether any of their cards offers its confirm button.
83
+ */
84
+ export declare function writeReplyLiveState(held: readonly WriteReplyHeldProposal[]): WriteReplyLiveState;
85
+ /**
86
+ * How long the send path waits for a reply's declines before the reply goes
87
+ * on anyway. A decline is one proxied call; a sandbox that does not answer
88
+ * must not freeze the panel with the person's words unsent. What is sent after
89
+ * the wait is still safe: the sandbox's sweep supersedes whatever waited on
90
+ * any prompt, and a decline landing late is a no-op on a proposal already
91
+ * superseded.
92
+ */
93
+ export declare const WRITE_REPLY_DECLINE_WAIT_MS = 8000;
94
+ export interface WriteReplyTimers {
95
+ set: (run: () => void, ms: number) => unknown;
96
+ clear: (handle: unknown) => void;
97
+ }
98
+ /**
99
+ * Resolves `settled` once every promise has settled (fulfilled or rejected),
100
+ * or `timed_out` after `ms`, whichever comes first. Never rejects.
101
+ */
102
+ export declare function settleWithin(work: readonly Promise<unknown>[], ms: number, timers?: WriteReplyTimers): Promise<"settled" | "timed_out">;
103
+ /**
104
+ * The sandbox's write mode for a prompt, from its own `/health`. Proposal
105
+ * instructions need the v1 protocol as well as the mode, the same test as
106
+ * `writeProposalsEnabledFor`: a sandbox with only one of them keeps the legacy
107
+ * card, so its prompt must stay legacy too.
108
+ */
109
+ export declare function promptWriteApproval(capabilities: SandboxWriteCapabilities | null | undefined): "legacy" | "proposal-v1";
110
+ //# sourceMappingURL=writeReplySend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writeReplySend.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/writeReplySend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EAGL,KAAK,uBAAuB,EAC5B,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAE1B,4CAA4C;AAC5C,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAExD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,UAAU,EAAE,aAAa,GAAG,IAAI,CAAC;IACjC;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,uEAAuE;AACvE,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,SAAS,EAAE,mBAAmB,CAAC;CAChC;AAED,MAAM,MAAM,cAAc;AACxB,iEAAiE;AAC/D;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3B;AACH;;;GAGG;GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC3C,QAAQ,EAAE,eAAe,CAAC;CAC3B;AACH,sDAAsD;GACpD;IACE,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC3C,KAAK,EAAE,eAAe,CAAC;CACxB,CAAC;AAEN,MAAM,WAAW,mBAAmB;IAClC,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,cAAc,EAAE,OAAO,CAAC;IACxB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,uEAAuE;IACvE,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CAChD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,cAAc,CA8EzE;AAED,mEAAmE;AACnE,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,SAAS,sBAAsB,EAAE,GACtC,mBAAmB,CAQrB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,OAAQ,CAAC;AAEjD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAClC;AAOD;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,SAAS,OAAO,CAAC,OAAO,CAAC,EAAE,EACjC,EAAE,EAAE,MAAM,EACV,MAAM,GAAE,gBAAiC,GACxC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,CAelC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,wBAAwB,GAAG,IAAI,GAAG,SAAS,GACxD,QAAQ,GAAG,aAAa,CAK1B"}
@@ -0,0 +1,93 @@
1
+ import { analyseWriteReply as e, decideWriteReply as t } from "./writeReplyBinder.js";
2
+ //#region src/shared/assistant/writeReplySend.ts
3
+ function n(n) {
4
+ let { text: r, origin: i } = n, a = n.hasAttachments ? {
5
+ cls: "other",
6
+ remainder: null
7
+ } : e(r, n.locale), o = a.cls === "decline_redirect" && a.remainder ? a.remainder : r, s = !n.hasAttachments && n.matchesLocalCommand(o), c = t({
8
+ cls: a.cls,
9
+ liveCount: n.live.count,
10
+ origin: i,
11
+ localUiMatch: s,
12
+ remainder: a.remainder,
13
+ execution: n.live.execution
14
+ });
15
+ switch (c.action) {
16
+ case "local_reply": return {
17
+ kind: "local_reply",
18
+ line: c.line,
19
+ values: c.values
20
+ };
21
+ case "normal": return {
22
+ kind: "send",
23
+ declineAll: null,
24
+ bound: {
25
+ writeReply: c.writeReply,
26
+ promptText: r,
27
+ localCommands: !0
28
+ }
29
+ };
30
+ case "local": {
31
+ let e = c.text.from === "remainder" ? c.text.value : r;
32
+ return c.declineAll === null ? {
33
+ kind: "send",
34
+ declineAll: null,
35
+ bound: {
36
+ writeReply: {
37
+ kind: "other",
38
+ origin: i
39
+ },
40
+ promptText: r,
41
+ localCommands: !0
42
+ }
43
+ } : {
44
+ kind: "local",
45
+ commandText: e,
46
+ declineAll: c.declineAll,
47
+ fallback: {
48
+ writeReply: {
49
+ kind: "decline",
50
+ origin: i
51
+ },
52
+ promptText: e,
53
+ localCommands: !1
54
+ }
55
+ };
56
+ }
57
+ case "forward": return {
58
+ kind: "send",
59
+ declineAll: c.declineAll,
60
+ bound: {
61
+ writeReply: c.writeReply,
62
+ promptText: c.text.from === "remainder" ? c.text.value : r,
63
+ localCommands: !1
64
+ }
65
+ };
66
+ }
67
+ }
68
+ function r(e) {
69
+ let t = e.filter((e) => e.status === "pending");
70
+ return {
71
+ count: t.length,
72
+ execution: t.some((e) => e.offersConfirm) ? "enabled" : "fenced"
73
+ };
74
+ }
75
+ var i = 8e3, a = {
76
+ set: (e, t) => setTimeout(e, t),
77
+ clear: (e) => clearTimeout(e)
78
+ };
79
+ function o(e, t, n = a) {
80
+ return new Promise((r) => {
81
+ let i = !1, a = n.set(() => {
82
+ i || (i = !0, r("timed_out"));
83
+ }, t);
84
+ Promise.allSettled(e).then(() => {
85
+ i || (i = !0, n.clear(a), r("settled"));
86
+ });
87
+ });
88
+ }
89
+ function s(e) {
90
+ return e?.proposals === !0 && e.writeApprovalMode === "proposal-v1" ? "proposal-v1" : "legacy";
91
+ }
92
+ //#endregion
93
+ export { i as WRITE_REPLY_DECLINE_WAIT_MS, n as planWriteReply, s as promptWriteApproval, o as settleWithin, r as writeReplyLiveState };
@@ -44,7 +44,13 @@ export interface GraphQLFetchOptions {
44
44
  baseUrl?: string;
45
45
  /** Additional headers to merge (overrides auto-detected values) */
46
46
  extraHeaders?: Record<string, string>;
47
- /** AbortSignal for cancellation */
47
+ /**
48
+ * AbortSignal for cancellation. An aborted request is never sent: it is
49
+ * refused before a workspace token is minted, and dropped from the batching
50
+ * queue if it is still waiting there (BOFF-8094). React Query passes one to
51
+ * every `queryFn` and aborts it when the query key changes, so a request
52
+ * built for the previous workspace cannot leave after a workspace switch.
53
+ */
48
54
  signal?: AbortSignal;
49
55
  /**
50
56
  * Send with fetch `keepalive`, so the request outlives the page — for a
@@ -135,6 +141,11 @@ export declare function ensureWorkspaceToken(options: {
135
141
  organizationId?: string;
136
142
  projectId?: string;
137
143
  locale?: string;
144
+ /**
145
+ * Stops THIS caller waiting (it gets `null`). The mint itself is shared by
146
+ * every caller asking for the same context, so one caller's abort never
147
+ * cancels it for the others (BOFF-8094).
148
+ */
138
149
  signal?: AbortSignal;
139
150
  currentQuery: string;
140
151
  }): Promise<string | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/shared/graphql/fetch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/shared/graphql/fetch.ts"],"names":[],"mappings":"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"}