@burdenoff/fe-libs 2026.1009.2 → 2026.1010.2

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 (58) hide show
  1. package/dist/shared/assistant/appControls/grammar.js +48 -41
  2. package/dist/shared/assistant/appControls/languages.d.ts +2 -0
  3. package/dist/shared/assistant/appControls/languages.js +8 -5
  4. package/dist/shared/assistant/index.d.ts +18 -0
  5. package/dist/shared/assistant/localUiCommands.d.ts +33 -0
  6. package/dist/shared/assistant/localUiCommands.js +159 -88
  7. package/dist/shared/assistant/localeCommands/active.d.ts +19 -0
  8. package/dist/shared/assistant/localeCommands/active.js +25 -0
  9. package/dist/shared/assistant/localeCommands/assent.d.ts +25 -0
  10. package/dist/shared/assistant/localeCommands/assent.js +78 -0
  11. package/dist/shared/assistant/localeCommands/engine.d.ts +89 -0
  12. package/dist/shared/assistant/localeCommands/engine.js +351 -0
  13. package/dist/shared/assistant/localeCommands/evaluate.d.ts +77 -0
  14. package/dist/shared/assistant/localeCommands/evaluate.js +180 -0
  15. package/dist/shared/assistant/localeCommands/fold.d.ts +17 -0
  16. package/dist/shared/assistant/localeCommands/fold.js +66 -0
  17. package/dist/shared/assistant/localeCommands/frames.d.ts +23 -0
  18. package/dist/shared/assistant/localeCommands/frames.js +150 -0
  19. package/dist/shared/assistant/localeCommands/gate.d.ts +37 -0
  20. package/dist/shared/assistant/localeCommands/gate.js +137 -0
  21. package/dist/shared/assistant/localeCommands/languageNames.d.ts +11 -0
  22. package/dist/shared/assistant/localeCommands/languageNames.js +53 -0
  23. package/dist/shared/assistant/localeCommands/nameForms.d.ts +21 -0
  24. package/dist/shared/assistant/localeCommands/nameForms.js +44 -0
  25. package/dist/shared/assistant/localeCommands/normalise.d.ts +49 -0
  26. package/dist/shared/assistant/localeCommands/normalise.js +87 -0
  27. package/dist/shared/assistant/localeCommands/symbols.d.ts +8 -0
  28. package/dist/shared/assistant/localeCommands/symbols.js +6 -0
  29. package/dist/shared/assistant/localeCommands/tables/ar.d.ts +10 -0
  30. package/dist/shared/assistant/localeCommands/tables/ar.js +343 -0
  31. package/dist/shared/assistant/localeCommands/tables/en.d.ts +12 -0
  32. package/dist/shared/assistant/localeCommands/tables/en.js +28 -0
  33. package/dist/shared/assistant/localeCommands/tables/es.d.ts +7 -0
  34. package/dist/shared/assistant/localeCommands/tables/es.js +356 -0
  35. package/dist/shared/assistant/localeCommands/tables/hi.d.ts +9 -0
  36. package/dist/shared/assistant/localeCommands/tables/hi.js +495 -0
  37. package/dist/shared/assistant/localeCommands/tables/ta.d.ts +10 -0
  38. package/dist/shared/assistant/localeCommands/tables/ta.js +429 -0
  39. package/dist/shared/assistant/localeCommands/tables/zh.d.ts +9 -0
  40. package/dist/shared/assistant/localeCommands/tables/zh.js +402 -0
  41. package/dist/shared/assistant/localeCommands/types.d.ts +172 -0
  42. package/dist/shared/assistant/localeCommands/types.js +19 -0
  43. package/dist/shared/assistant/ui/AssistantChatArea.js +1340 -1330
  44. package/dist/shared/assistant/uiActions/linkContext.d.ts +20 -1
  45. package/dist/shared/assistant/uiActions/linkContext.js +39 -21
  46. package/dist/shared/assistant/uiActions/offerYesOnSurface.d.ts +6 -0
  47. package/dist/shared/assistant/uiActions/offerYesOnSurface.js +1 -1
  48. package/dist/shared/assistant/writeReplyBinder.d.ts +1 -1
  49. package/dist/shared/assistant/writeReplySend.d.ts +16 -0
  50. package/dist/shared/assistant/writeReplySend.js +23 -1
  51. package/dist/shared/graphql/client.d.ts +20 -0
  52. package/dist/shared/graphql/client.js +196 -191
  53. package/dist/shared/graphql/retryPolicy.d.ts +27 -0
  54. package/dist/shared/graphql/retryPolicy.js +10 -0
  55. package/dist/shared/utils/apollo.d.ts +6 -2
  56. package/dist/shared/utils/apollo.js +26 -25
  57. package/dist/shared-assistant.js +55 -37
  58. package/package.json +2 -2
@@ -16,15 +16,15 @@ function c(e, t) {
16
16
  for (let e of i.matchAll(r)) a = e[0];
17
17
  return a ?? t;
18
18
  }
19
- var l = 60, u = /^(?:log ?out|sign ?out|(?:log|sign) (?:me )?out(?: of (?:the |my |this )?(?:app|application|account|session))?)$/, d = "(?:workspace|workspaces|context|contexts|organi[sz]ation|organi[sz]ations|org|project)", f = "(?:switcher|selector|picker|menu|dropdown|list)", p = /^(?:another|other|a different|different|a new|new|a|the|another one|other one)$/, m = RegExp(`^${i} ${r}(?:notification|notifications) (?:panel|bell|centre|center|menu|tray|drawer|list)$`), h = RegExp(`^${i} ${r}(?:notification )?bell$`), g = RegExp(`^${i} ${r}notifications?$`), _ = RegExp(`^${i} ${r}(?:help (?:menu|panel|dialog|dialogue|centre|center)|keyboard shortcuts|keyboard help|shortcuts)$`), v = RegExp(`^${i} ${r}help$`), y = RegExp(`^(?:open|show|start|use|pull up|bring up) ${r}(?:global |app )search(?: (?:bar|box|dialog|dialogue|panel))?$|^(?:open|show|start|use|pull up|bring up) ${r}search (?:bar|box|dialog|dialogue|panel)$`), b = /^(?:open|start|use|pull up|bring up) (?:(?:the|my) )?search$/, x = [
19
+ var l = 60, u = /^(?:log ?out|sign ?out|(?:log|sign) (?:me )?out(?: of (?:the |my |this )?(?:app|application|account|session))?)$/, d = "(?:workspace|workspaces|context|contexts|organi[sz]ation|organi[sz]ations|org|project)", f = "(?:switcher|selector|picker|menu|dropdown|list)", p = /^(?:another|other|a different|different|a new|new|a|the|another one|other one)$/, m = RegExp(`^${i} ${r}(?:notification|notifications) (?:panel|bell|centre|center|menu|tray|drawer|list)$`), h = RegExp(`^${i} ${r}(?:notification )?bell$`), ee = RegExp(`^${i} ${r}notifications?$`), g = RegExp(`^${i} ${r}(?:help (?:menu|panel|dialog|dialogue|centre|center)|keyboard shortcuts|keyboard help|shortcuts)$`), _ = RegExp(`^${i} ${r}help$`), v = RegExp(`^(?:open|show|start|use|pull up|bring up) ${r}(?:global |app )search(?: (?:bar|box|dialog|dialogue|panel))?$|^(?:open|show|start|use|pull up|bring up) ${r}search (?:bar|box|dialog|dialogue|panel)$`), y = /^(?:open|start|use|pull up|bring up) (?:(?:the|my) )?search$/, b = [
20
20
  /^(?:open|start|use|pull up|bring up) (?:(?:the|my) )?(?:global |app )?search (?:for|with) (.+)$/,
21
21
  /^(?:global search|search everything|search everywhere|search globally|search the app|search all|search across the app) (?:for )?(.+)$/,
22
22
  /^search (?:the app|everything|everywhere|globally|all|across the app) for (.+)$/
23
- ], S = "(?:side ?bar|side menu|side navigation|side nav|navigation (?:bar|menu|panel|drawer)|nav (?:bar|menu|panel|drawer)|left (?:menu|sidebar|panel))", C = RegExp(`^(?:collapse|close|hide|minimi[sz]e|shrink|fold) ${r}${S}$`), w = RegExp(`^(?:expand|open|show|reveal|unhide|bring up|widen|unfold) ${r}${S}$`), T = "(?: (?:group|section|menu|folder|submenu|sub menu|list|dropdown))?", E = RegExp(`^(expand|unfold|open up|open|show) ${r}(.+?)${T}$`), D = RegExp(`^(collapse|fold up|close|hide) ${r}(.+?)${T}$`), O = [
23
+ ], x = "(?:side ?bar|side menu|side navigation|side nav|navigation (?:bar|menu|panel|drawer)|nav (?:bar|menu|panel|drawer)|left (?:menu|sidebar|panel))", S = RegExp(`^(?:collapse|close|hide|minimi[sz]e|shrink|fold) ${r}${x}$`), C = RegExp(`^(?:expand|open|show|reveal|unhide|bring up|widen|unfold) ${r}${x}$`), w = "(?: (?:group|section|menu|folder|submenu|sub menu|list|dropdown))?", T = RegExp(`^(expand|unfold|open up|open|show) ${r}(.+?)${w}$`), E = RegExp(`^(collapse|fold up|close|hide) ${r}(.+?)${w}$`), D = [
24
24
  RegExp(`^(?:change|switch|set|update|turn|put|make)(?: over)? ${r}(?:(?:app|ui|user interface|interface|screen|display|site|system|menu|application) )?language (?:to|into|as|over to) (.+)$`),
25
25
  RegExp(`^(?:switch|change|set|put|turn) ${r}(?:app|ui|user interface|interface|screen|display|site|application|menus?) (?:language )?(?:to|into) (.+)$`),
26
26
  RegExp(`^(?:show|display|use|run) ${r}(?:app|ui|user interface|interface|screen|display|site|application)(?: menus?)? in (.+)$`)
27
- ], k = RegExp(`^${i} ${r}(?:(?:assistant|ai|conversation|conversations|chat) history|history of (?:my )?(?:conversations|chats)|(?:past|previous|old|earlier) conversations)$`), A = RegExp(`^${i} ${r}history$`), j = RegExp(`^${i} ${r}(?:voice|spoken|speech) transcript$`), M = RegExp(`^${i} ${r}transcript$`), ee = RegExp(`^${i} ${r}(?:ai|assistant) preview(?: panel| pane| surface)?$`), N = RegExp(`^${i} ${r}preview(?: panel| pane)?$`), P = RegExp(`^(?:close|hide|dismiss) ${r}(?:ai|assistant) preview(?: panel| pane| surface)?$`), F = RegExp(`^(?:close|hide) ${r}preview(?: panel| pane)?$`), I = /^(?:(?:start|begin|open) (?:a |an |another )?(?:new |fresh |blank )?conversation|new conversation|(?:start|begin) (?:a )?(?:new|fresh) conversation with you)$/, L = [RegExp(`^(?:go to|open|show|show me|switch to|select|view|change to|move to|take me to|bring up) ${r}(.+) tab$`), /^(?:switch|change|move) tabs? to (.+)$/], R = "(?:filter|narrow|limit)(?: down)?", z = [RegExp(`^${R}(?: ${r}(?:page|list|table|results|items|rows|view))? (?:by|to|for|on) ${r}(.+)$`)], B = [/^(?:show|display|list|keep) only (.+)$/, /^only (?:show|display|list|keep) (.+)$/], V = [
27
+ ], O = RegExp(`^(?:switch|change)(?: over)? to ${r}(.+)$`), k = RegExp(`^${i} ${r}(?:(?:assistant|ai|conversation|conversations|chat) history|history of (?:my )?(?:conversations|chats)|(?:past|previous|old|earlier) conversations)$`), A = RegExp(`^${i} ${r}history$`), j = RegExp(`^${i} ${r}(?:voice|spoken|speech) transcript$`), M = RegExp(`^${i} ${r}transcript$`), N = RegExp(`^${i} ${r}(?:ai|assistant) preview(?: panel| pane| surface)?$`), P = RegExp(`^${i} ${r}preview(?: panel| pane)?$`), F = RegExp(`^(?:close|hide|dismiss) ${r}(?:ai|assistant) preview(?: panel| pane| surface)?$`), te = RegExp(`^(?:close|hide) ${r}preview(?: panel| pane)?$`), I = /^(?:(?:start|begin|open) (?:a |an |another )?(?:new |fresh |blank )?conversation|new conversation|(?:start|begin) (?:a )?(?:new|fresh) conversation with you)$/, L = [RegExp(`^(?:go to|open|show|show me|switch to|select|view|change to|move to|take me to|bring up) ${r}(.+) tab$`), /^(?:switch|change|move) tabs? to (.+)$/], R = "(?:filter|narrow|limit)(?: down)?", z = [RegExp(`^${R}(?: ${r}(?:page|list|table|results|items|rows|view))? (?:by|to|for|on) ${r}(.+)$`)], B = [/^(?:show|display|list|keep) only (.+)$/, /^only (?:show|display|list|keep) (.+)$/], V = [
28
28
  RegExp(`^(?:set|change|switch|put|make) ${r}(.+?) filter (?:to|as|on) (.+)$`),
29
29
  RegExp(`^${R} ${r}(.+?) (?:by|to|for|on) (.+)$`),
30
30
  RegExp(`^(?:use|apply) ${r}(.+?) filter (?:of|with|for|set to) (.+)$`)
@@ -62,60 +62,60 @@ function $(e) {
62
62
  let t = e.replace(/\b(?:please|pls)$/, "").trim();
63
63
  return !t || t.length > l ? null : t;
64
64
  }
65
- function te(s, l, S) {
66
- let T = S.registered;
65
+ function ne(s, l, x) {
66
+ let w = x.registered;
67
67
  if (X.test(s)) return null;
68
- if (T["account.logout"] && u.test(s)) return a({ control: "account.logout" });
69
- if (T["header.workspace"] || T["header.context"]) {
68
+ if (w["account.logout"] && u.test(s)) return a({ control: "account.logout" });
69
+ if (w["header.workspace"] || w["header.context"]) {
70
70
  let e = RegExp(`^(?:switch|change|move|go|jump|hop)(?: over)? to ${r}(.+?) ${d}$`).exec(s) ?? RegExp(`^(?:switch|change|move) ${r}${d} (?:to|over to) ${r}(.+)$`).exec(s);
71
- if (e && T["header.workspace"]) {
71
+ if (e && w["header.workspace"]) {
72
72
  let t = (e[1] ?? "").trim();
73
73
  if (t && !p.test(t)) return a({
74
74
  control: "header.workspace",
75
75
  target: t
76
76
  });
77
- if (T["header.context"]) return a({ control: "header.context" });
77
+ if (w["header.context"]) return a({ control: "header.context" });
78
78
  }
79
- if (T["header.context"] && (RegExp(`^${i} ${r}${d} ${f}$`).test(s) || RegExp(`^(?:switch|change) ${r}${d}$`).test(s))) return a({ control: "header.context" });
79
+ if (w["header.context"] && (RegExp(`^${i} ${r}${d} ${f}$`).test(s) || RegExp(`^(?:switch|change) ${r}${d}$`).test(s))) return a({ control: "header.context" });
80
80
  }
81
- if (T["header.notifications"]) {
81
+ if (w["header.notifications"]) {
82
82
  if (m.test(s) || h.test(s)) return a({ control: "header.notifications" });
83
- if (g.test(s)) return o({ control: "header.notifications" });
83
+ if (ee.test(s)) return o({ control: "header.notifications" });
84
84
  }
85
- if (T["header.help"]) {
86
- if (_.test(s)) return a({ control: "header.help" });
87
- if (v.test(s)) return o({ control: "header.help" });
85
+ if (w["header.help"]) {
86
+ if (g.test(s)) return a({ control: "header.help" });
87
+ if (_.test(s)) return o({ control: "header.help" });
88
88
  }
89
- if (T["header.search"]) {
90
- for (let e of x) {
89
+ if (w["header.search"]) {
90
+ for (let e of b) {
91
91
  let t = e.exec(s), n = t ? $(t[1] ?? "") : null;
92
92
  if (n) return a({
93
93
  control: "header.search",
94
94
  query: c(l, n)
95
95
  });
96
96
  }
97
- if (y.test(s)) return a({
97
+ if (v.test(s)) return a({
98
98
  control: "header.search",
99
99
  query: null
100
100
  });
101
- if (b.test(s)) return o({
101
+ if (y.test(s)) return o({
102
102
  control: "header.search",
103
103
  query: null
104
104
  });
105
105
  }
106
- if (T.sidebar) {
107
- if (C.test(s)) return a({
106
+ if (w.sidebar) {
107
+ if (S.test(s)) return a({
108
108
  control: "sidebar",
109
109
  collapsed: !0
110
110
  });
111
- if (w.test(s)) return a({
111
+ if (C.test(s)) return a({
112
112
  control: "sidebar",
113
113
  collapsed: !1
114
114
  });
115
- let e = E.exec(s), t = e ? null : D.exec(s), r = e ?? t;
116
- if (r && S.sidebarEntries.length > 0) {
115
+ let e = T.exec(s), t = e ? null : E.exec(s), r = e ?? t;
116
+ if (r && x.sidebarEntries.length > 0) {
117
117
  let t = (r[2] ?? "").trim(), i = r[1] ?? "";
118
- if (t && n(t, S.sidebarEntries).kind !== "none") return {
118
+ if (t && n(t, x.sidebarEntries).kind !== "none") return {
119
119
  request: {
120
120
  control: "sidebar.entry",
121
121
  name: t,
@@ -125,31 +125,38 @@ function te(s, l, S) {
125
125
  };
126
126
  }
127
127
  }
128
- if (T.language) for (let e of O) {
129
- let n = e.exec(s);
130
- if (!n) continue;
131
- let r = t(n[1] ?? "");
132
- if (r) return a({
128
+ if (w.language) {
129
+ for (let e of D) {
130
+ let n = e.exec(s);
131
+ if (!n) continue;
132
+ let r = t(n[1] ?? "");
133
+ if (r) return a({
134
+ control: "language",
135
+ code: r
136
+ });
137
+ }
138
+ let e = O.exec(s), n = e ? t(e[1] ?? "") : null;
139
+ if (n) return o({
133
140
  control: "language",
134
- code: r
141
+ code: n
135
142
  });
136
143
  }
137
- if (T["assistant.history"]) {
144
+ if (w["assistant.history"]) {
138
145
  if (k.test(s)) return a({ control: "assistant.history" });
139
146
  if (A.test(s)) return o({ control: "assistant.history" });
140
147
  }
141
- if (T["assistant.transcript"]) {
148
+ if (w["assistant.transcript"]) {
142
149
  if (j.test(s)) return a({ control: "assistant.transcript" });
143
150
  if (M.test(s)) return o({ control: "assistant.transcript" });
144
151
  }
145
- if (T["assistant.preview"]) {
146
- if (ee.test(s)) return a({ control: "assistant.preview" });
147
- if (N.test(s)) return o({ control: "assistant.preview" });
148
- if (P.test(s)) return a({ control: "assistant.preview.close" });
149
- if (F.test(s)) return o({ control: "assistant.preview.close" });
152
+ if (w["assistant.preview"]) {
153
+ if (N.test(s)) return a({ control: "assistant.preview" });
154
+ if (P.test(s)) return o({ control: "assistant.preview" });
155
+ if (F.test(s)) return a({ control: "assistant.preview.close" });
156
+ if (te.test(s)) return o({ control: "assistant.preview.close" });
150
157
  }
151
- if (T["assistant.conversation.new"] && I.test(s)) return a({ control: "assistant.conversation.new" });
152
- let R = S.page;
158
+ if (w["assistant.conversation.new"] && I.test(s)) return a({ control: "assistant.conversation.new" });
159
+ let R = x.page;
153
160
  if (!R) return null;
154
161
  if (R.tabs.length > 0) {
155
162
  let e = Z(L, s), t = e ? (e[1] ?? "").trim() : "";
@@ -235,4 +242,4 @@ function te(s, l, S) {
235
242
  return null;
236
243
  }
237
244
  //#endregion
238
- export { te as matchAppControl, c as queryAsSaid };
245
+ export { ne as matchAppControl, c as queryAsSaid };
@@ -1,4 +1,6 @@
1
1
  import { UiLanguageCode } from './types';
2
+ /** The words the table gives for one UI language (the English name, its own name). */
3
+ export declare function uiLanguageWords(code: UiLanguageCode): readonly string[];
2
4
  /** The UI language a phrase names ("Hindi", "the Tamil language"), or null. */
3
5
  export declare function uiLanguageFromWords(said: string): UiLanguageCode | null;
4
6
  /** The English name of a UI language, for saying that an app does not offer it. */
@@ -33,11 +33,14 @@ var t = {
33
33
  ]
34
34
  }, n = /* @__PURE__ */ new Map();
35
35
  for (let [r, i] of Object.entries(t)) for (let t of i) n.set(e(t), r);
36
- function r(t) {
36
+ function r(e) {
37
+ return t[e];
38
+ }
39
+ function i(t) {
37
40
  let r = e(t).replace(/^(?:the|a) /, "").replace(/ language$/, "").trim();
38
41
  return n.get(r) ?? null;
39
42
  }
40
- var i = {
43
+ var a = {
41
44
  en: "English",
42
45
  ar: "Arabic",
43
46
  es: "Spanish",
@@ -45,8 +48,8 @@ var i = {
45
48
  ta: "Tamil",
46
49
  zh: "Chinese"
47
50
  };
48
- function a(e) {
49
- return i[e];
51
+ function o(e) {
52
+ return a[e];
50
53
  }
51
54
  //#endregion
52
- export { a as uiLanguageEnglishName, r as uiLanguageFromWords };
55
+ export { o as uiLanguageEnglishName, i as uiLanguageFromWords, r as uiLanguageWords };
@@ -237,6 +237,24 @@ export * from './turnTimingReport';
237
237
  export * from './turnTimingReporter';
238
238
  export * from './prewarm';
239
239
  export * from './localUiCommands';
240
+ export * from './localeCommands/types';
241
+ export * from './localeCommands/fold';
242
+ export * from './localeCommands/frames';
243
+ export * from './localeCommands/gate';
244
+ export * from './localeCommands/symbols';
245
+ export * from './localeCommands/nameForms';
246
+ export * from './localeCommands/normalise';
247
+ export * from './localeCommands/active';
248
+ export * from './localeCommands/languageNames';
249
+ export * from './localeCommands/assent';
250
+ export * from './localeCommands/engine';
251
+ export * from './localeCommands/evaluate';
252
+ export * from './localeCommands/tables/hi';
253
+ export * from './localeCommands/tables/ta';
254
+ export * from './localeCommands/tables/ar';
255
+ export * from './localeCommands/tables/es';
256
+ export * from './localeCommands/tables/zh';
257
+ export * from './localeCommands/tables/en';
240
258
  export * from './localUiCommandCopy';
241
259
  export * from './uiActions/navigationOutcome';
242
260
  export * from './uiActions/backStack';
@@ -1,4 +1,5 @@
1
1
  import { AppControlRequest } from './appControls/grammar';
2
+ import { CommandManifest } from './localeCommands/types';
2
3
  import { ControlSnapshot } from './appControls/snapshot';
3
4
  import { AssistantEntityRoute } from './uiActions/entityRoutes';
4
5
  import { NavigationContext, PendingChoice } from './uiActions/linkContext';
@@ -168,6 +169,28 @@ export interface LocalUiCommandOptions {
168
169
  * as the editors' adoption, with a seam test that pins both.
169
170
  */
170
171
  leaveGuard?: boolean;
172
+ /**
173
+ * ★ BOFF-8867 (multilingual commands): the app's UI language, when it differs
174
+ * from `locale` (a spoken sentence is judged by the input language; the app
175
+ * and the assistant's input language are BOTH read by the per-language
176
+ * tables). Absent: `locale`.
177
+ */
178
+ uiLocale?: string;
179
+ /** ★ BOFF-8867: the assistant's input language (what the recogniser listens for). */
180
+ inputLocale?: string;
181
+ /**
182
+ * ★ BOFF-8867: narrow the languages with a table to these primary subtags
183
+ * (`hi`, `ta`, `ar`, `es`, `zh`). Absent: every language the manifest turned on.
184
+ */
185
+ commandLocales?: readonly string[];
186
+ /**
187
+ * ★ BOFF-8867: INTERNAL — the manifest of what is switched on. Products never
188
+ * set it; the evaluation harness and the tests do. Absent: the shipped
189
+ * manifest (`COMMAND_MANIFEST`), which turns on only what passed the blind
190
+ * gate. A manifest a product writes itself can only NARROW the shipped one
191
+ * (`effectiveManifest`): a cell the shipped manifest has off stays off.
192
+ */
193
+ commandManifest?: CommandManifest;
171
194
  }
172
195
  /**
173
196
  * What only the panel knows at the moment of sending. Optional, so every
@@ -193,8 +216,18 @@ export interface LocalUiCommandContext {
193
216
  /**
194
217
  * The command this whole utterance is, or null to send it to the model.
195
218
  * `destinations` is what the person can see in the app's navigation.
219
+ *
220
+ * ★ BOFF-8867: the English grammar runs FIRST and byte for byte; only when it
221
+ * finds nothing is the per-language engine (`localeCommands`) consulted, and
222
+ * only for what the manifest has switched on.
196
223
  */
197
224
  export declare function matchLocalUiCommand(text: string, destinations: readonly LocalDestination[], options?: LocalUiCommandOptions, context?: LocalUiCommandContext): LocalUiCommand | null;
225
+ /**
226
+ * ★ BOFF-8060 / BOFF-8867: could this sentence be "take me there" or a pick —
227
+ * in English or in an active language? The panel builds the offered-navigation
228
+ * context (a parse of the newest reply) only for such a sentence.
229
+ */
230
+ export declare function mayBeNavigationFollowUp(text: string, options?: LocalUiCommandOptions): boolean;
198
231
  /** The most pages one clarification offers. */
199
232
  export declare const LINKED_CHOICE_MAX = 4;
200
233
  /** The shape of a navigation entry this needs (`VisibleNavItem` fits it). */