@mihe-dev/js 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +114 -2
  3. package/dist/audio.d.ts +121 -0
  4. package/dist/audio.d.ts.map +1 -0
  5. package/dist/audio.js +377 -0
  6. package/dist/audio.js.map +1 -0
  7. package/dist/chart.d.ts +15 -0
  8. package/dist/chart.d.ts.map +1 -0
  9. package/dist/chart.js +58 -0
  10. package/dist/chart.js.map +1 -0
  11. package/dist/client.d.ts +226 -0
  12. package/dist/client.d.ts.map +1 -0
  13. package/dist/client.js +358 -0
  14. package/dist/client.js.map +1 -0
  15. package/dist/commands.d.ts +70 -0
  16. package/dist/commands.d.ts.map +1 -0
  17. package/dist/commands.js +295 -0
  18. package/dist/commands.js.map +1 -0
  19. package/dist/debug.d.ts +17 -0
  20. package/dist/debug.d.ts.map +1 -0
  21. package/dist/debug.js +29 -0
  22. package/dist/debug.js.map +1 -0
  23. package/dist/declarations.d.ts +160 -0
  24. package/dist/declarations.d.ts.map +1 -0
  25. package/dist/declarations.js +171 -0
  26. package/dist/declarations.js.map +1 -0
  27. package/dist/highlight.d.ts +77 -0
  28. package/dist/highlight.d.ts.map +1 -0
  29. package/dist/highlight.js +233 -0
  30. package/dist/highlight.js.map +1 -0
  31. package/dist/index.d.ts +39 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +31 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/mihe.d.ts +343 -0
  36. package/dist/mihe.d.ts.map +1 -0
  37. package/dist/mihe.iife.min.js +206 -0
  38. package/dist/mihe.iife.min.js.map +7 -0
  39. package/dist/mihe.js +720 -0
  40. package/dist/mihe.js.map +1 -0
  41. package/dist/mihe.min.js +206 -0
  42. package/dist/mihe.min.js.map +7 -0
  43. package/dist/store.d.ts +175 -0
  44. package/dist/store.d.ts.map +1 -0
  45. package/dist/store.js +208 -0
  46. package/dist/store.js.map +1 -0
  47. package/dist/voice.d.ts +192 -0
  48. package/dist/voice.d.ts.map +1 -0
  49. package/dist/voice.js +443 -0
  50. package/dist/voice.js.map +1 -0
  51. package/dist/widget/card.d.ts +15 -0
  52. package/dist/widget/card.d.ts.map +1 -0
  53. package/dist/widget/card.js +28 -0
  54. package/dist/widget/card.js.map +1 -0
  55. package/dist/widget/dom.d.ts +24 -0
  56. package/dist/widget/dom.d.ts.map +1 -0
  57. package/dist/widget/dom.js +49 -0
  58. package/dist/widget/dom.js.map +1 -0
  59. package/dist/widget/element.d.ts +88 -0
  60. package/dist/widget/element.d.ts.map +1 -0
  61. package/dist/widget/element.js +285 -0
  62. package/dist/widget/element.js.map +1 -0
  63. package/dist/widget/format.d.ts +24 -0
  64. package/dist/widget/format.d.ts.map +1 -0
  65. package/dist/widget/format.js +64 -0
  66. package/dist/widget/format.js.map +1 -0
  67. package/dist/widget/icons.d.ts +5 -0
  68. package/dist/widget/icons.d.ts.map +1 -0
  69. package/dist/widget/icons.js +19 -0
  70. package/dist/widget/icons.js.map +1 -0
  71. package/dist/widget/launcher.d.ts +13 -0
  72. package/dist/widget/launcher.d.ts.map +1 -0
  73. package/dist/widget/launcher.js +27 -0
  74. package/dist/widget/launcher.js.map +1 -0
  75. package/dist/widget/mark.d.ts +10 -0
  76. package/dist/widget/mark.d.ts.map +1 -0
  77. package/dist/widget/mark.js +20 -0
  78. package/dist/widget/mark.js.map +1 -0
  79. package/dist/widget/orb.d.ts +91 -0
  80. package/dist/widget/orb.d.ts.map +1 -0
  81. package/dist/widget/orb.js +497 -0
  82. package/dist/widget/orb.js.map +1 -0
  83. package/dist/widget/panel.d.ts +40 -0
  84. package/dist/widget/panel.d.ts.map +1 -0
  85. package/dist/widget/panel.js +239 -0
  86. package/dist/widget/panel.js.map +1 -0
  87. package/dist/widget/styles.d.ts +22 -0
  88. package/dist/widget/styles.d.ts.map +1 -0
  89. package/dist/widget/styles.js +181 -0
  90. package/dist/widget/styles.js.map +1 -0
  91. package/package.json +43 -4
package/dist/mihe.d.ts ADDED
@@ -0,0 +1,343 @@
1
+ /**
2
+ * `Mihe` — the assistant without a framework (doc 08).
3
+ *
4
+ * The wiring between the store, the client and whatever UI draws it. It owns
5
+ * three responsibilities and nothing else:
6
+ *
7
+ * 1. Publish the screen context whenever the app's declaration changes.
8
+ * 2. Execute commands the runtime sends, and ack every one of them.
9
+ * 3. Hold the conversation the UI renders.
10
+ *
11
+ * State is an immutable snapshot, replaced on every change, so React's
12
+ * `useSyncExternalStore` reads it with no adapter: the React provider is a
13
+ * thin wrapper over this class, and the two cannot disagree about what a
14
+ * proposal or a voice event does.
15
+ */
16
+ import type { KnowledgeSourceRef, ProposalStatus, WidgetSettings } from "@mihe-dev/protocol";
17
+ import { type ConnectionState, type ProposalPayload } from "./client.js";
18
+ import { type AssistantChart, type AssistantTable, type AssistantTabs } from "./declarations.js";
19
+ import { AssistantStore, type ActionHandler, type ComponentDeclaration, type ScreenDeclaration } from "./store.js";
20
+ import { type VoiceState } from "./voice.js";
21
+ export declare const SDK_VERSION = "0.1.0";
22
+ /**
23
+ * DOM id of the assistant panel, so a custom trigger can point
24
+ * `aria-controls` at it.
25
+ */
26
+ export declare const ASSISTANT_PANEL_ID = "mihe-panel";
27
+ export interface ChatMessage {
28
+ id: string;
29
+ role: "user" | "assistant";
30
+ text: string;
31
+ /** True while the assistant is still streaming into this message. */
32
+ streaming?: boolean;
33
+ /**
34
+ * Documentation this answer drew on, if any.
35
+ *
36
+ * Worth surfacing rather than keeping for debugging: an answer a user can
37
+ * trace to a named section of their own handbook is one they can check, and
38
+ * "where did that come from?" is the first question anyone asks of an
39
+ * assistant that suddenly knows their internal policy.
40
+ */
41
+ sources?: KnowledgeSourceRef[];
42
+ }
43
+ /**
44
+ * The voice session, as the UI sees it.
45
+ *
46
+ * `available` is answered by the runtime rather than assumed: voice is a
47
+ * per-app setting with a real price attached, so a microphone button that
48
+ * appears and then fails on the first press is worse than no button. It stays
49
+ * false until the runtime has actually issued a permit.
50
+ */
51
+ export interface VoiceControls {
52
+ available: boolean;
53
+ state: VoiceState;
54
+ /** True while the session is hands-free rather than push-to-talk. */
55
+ handsFree: boolean;
56
+ /** The line currently being spoken, either side. Empty between utterances. */
57
+ caption: string;
58
+ /**
59
+ * Something about the session worth saying that is not a failure — the
60
+ * ceiling approaching, or a session that has just reached it.
61
+ *
62
+ * Separate from `lastError` so a host app's own UI can draw the two
63
+ * differently, which is the whole point: a session ending on time is the
64
+ * ordinary case, and putting it in the same red box as a dead provider tells
65
+ * the user their conversation broke when it did not.
66
+ */
67
+ notice: string | null;
68
+ /**
69
+ * Open the socket and the microphone. Must be called from a user gesture —
70
+ * both the permission prompt and iOS Safari's audio unlock require one.
71
+ *
72
+ * `handsFree` leaves the microphone open and lets the provider decide where
73
+ * utterances begin and end, so the user can interrupt mid-reply. The cost is
74
+ * that the assistant can hear itself; see `VoiceSessionOptions`.
75
+ */
76
+ start: (options?: {
77
+ handsFree?: boolean;
78
+ /**
79
+ * Open the conversation panel as the session starts, so what is said
80
+ * appears there as the session goes. True by default. The orb passes false, because it
81
+ * shows voice in itself and the point of it is that the page stays visible.
82
+ */
83
+ openPanel?: boolean;
84
+ }) => void;
85
+ stop: () => void;
86
+ /**
87
+ * Push-to-talk: press and release.
88
+ *
89
+ * `press({ hold: true })` captures without sending until `confirm()`, and
90
+ * `discard()` drops it: for a control where a press may turn into a drag.
91
+ * Releasing a held press confirms it.
92
+ */
93
+ press: (options?: {
94
+ hold?: boolean;
95
+ }) => void;
96
+ release: () => void;
97
+ confirm: () => void;
98
+ discard: () => void;
99
+ /**
100
+ * Follow how loud each side is, 0 to 1, as it happens. Returns the
101
+ * unsubscribe. Outside the state snapshot on purpose: it fires tens of
102
+ * times a second, and a listener should move an element directly, not
103
+ * re-render.
104
+ */
105
+ onLevel: (listener: (source: "user" | "assistant", level: number) => void) => () => void;
106
+ }
107
+ /** Everything a UI draws, as one immutable snapshot. */
108
+ export interface MiheState {
109
+ connection: ConnectionState;
110
+ messages: ChatMessage[];
111
+ /** Confirmation cards awaiting a decision. */
112
+ proposals: ProposalPayload[];
113
+ /** True from the moment a turn starts until it completes or fails. */
114
+ busy: boolean;
115
+ lastError: string | null;
116
+ /**
117
+ * Whether the assistant UI is showing.
118
+ *
119
+ * Held here rather than inside the widget so that anything in the host
120
+ * app — a nav button, a command palette, a keyboard shortcut, a plain div —
121
+ * can open the assistant.
122
+ */
123
+ isOpen: boolean;
124
+ /**
125
+ * What the assistant calls itself, from the app's settings in the dashboard.
126
+ * `null` until the handshake answers; a title passed in code still wins.
127
+ */
128
+ assistantName: string | null;
129
+ /**
130
+ * The customer's launcher icon, uploaded in the dashboard (amendment 58).
131
+ * `null` means draw the Mihe mark.
132
+ */
133
+ launcherIconUrl: string | null;
134
+ /**
135
+ * How the widget presents itself, from the app's settings in the dashboard
136
+ * (amendment 61). `null` until the handshake answers.
137
+ */
138
+ widgetSettings: WidgetSettings | null;
139
+ /** Realtime voice (doc 03). */
140
+ voice: VoiceControls;
141
+ }
142
+ export interface MiheOptions {
143
+ /** Runtime WebSocket URL. */
144
+ url: string;
145
+ /** The app's public key. Safe to ship in a browser bundle. */
146
+ publicKey: string;
147
+ /**
148
+ * Fetches a signed user token from the host app's own backend.
149
+ *
150
+ * This is the app's authority, not the browser's: the runtime reads the
151
+ * user's id and permissions from this token's verified claims and from
152
+ * nothing else, so a user cannot grant themselves access by editing
153
+ * anything on this side.
154
+ */
155
+ getUserToken: () => Promise<string>;
156
+ /**
157
+ * Route change handler. Wire this to your router — the default is a full
158
+ * page load, which works but throws away app state.
159
+ */
160
+ navigate?: (route: string) => void;
161
+ /**
162
+ * Open a registered dialog. Return `false` when the key is not one this
163
+ * app can open, so the assistant is told rather than reporting success for
164
+ * a form that never appeared.
165
+ */
166
+ openModal?: (modalKey: string) => void | boolean;
167
+ /**
168
+ * Called when a confirmed action finishes, whatever the outcome.
169
+ *
170
+ * Exists because the assistant changes data the host app is already
171
+ * displaying, and an app with a client-side cache has no way to know. The
172
+ * usual implementation is one line — refetch what the page shows — and
173
+ * without it a user watches an action succeed while the page goes on
174
+ * showing what was true before it.
175
+ */
176
+ onActionComplete?: (action: {
177
+ actionName: string;
178
+ status: ProposalStatus;
179
+ result?: unknown;
180
+ }) => void;
181
+ /**
182
+ * Log what each screen costs to the console: how many tokens one answer
183
+ * re-sends, and which tools make up most of it (amendment 67). Turn it on
184
+ * while building an integration; leave it off in production.
185
+ */
186
+ debug?: boolean;
187
+ }
188
+ /** Create the assistant and connect it. */
189
+ export declare function createMihe(options: MiheOptions): Mihe;
190
+ export declare class Mihe {
191
+ /** The app's declaration of itself. */
192
+ readonly store: AssistantStore;
193
+ private readonly highlighter;
194
+ private options;
195
+ private state;
196
+ private readonly listeners;
197
+ private client;
198
+ private voiceSession;
199
+ /**
200
+ * Set while the user is waiting on a permit they asked for.
201
+ *
202
+ * A token arriving with this false is one the runtime issued for a probe at
203
+ * connect time, and starting a session on it would turn the microphone on
204
+ * without anyone having asked.
205
+ */
206
+ private voiceRequested;
207
+ /** The mode asked for, read when the permit comes back. */
208
+ private requestedHandsFree;
209
+ /** Whether the session being requested should open the panel. */
210
+ private requestedOpenPanel;
211
+ private readonly levelListeners;
212
+ /** The route of the last screen context actually sent to the runtime. */
213
+ private publishedRoute;
214
+ /** The last screen context actually sent, for acks that check a view. */
215
+ private publishedScreen;
216
+ /** Whether that screen had finished loading its data when it was sent. */
217
+ private publishedSettled;
218
+ /** Navigate and set_view acks waiting for the screen to report in. */
219
+ private readonly screenWaiters;
220
+ private publishTimer;
221
+ private unsubscribeStore;
222
+ private readonly tabs;
223
+ private readonly tables;
224
+ private readonly charts;
225
+ private readonly actions;
226
+ private lastScreen;
227
+ constructor(options: MiheOptions);
228
+ /** The current state. The same object until something changes. */
229
+ getState: () => MiheState;
230
+ /** Called after every change of state. Returns the unsubscribe. */
231
+ subscribe: (listener: () => void) => (() => void);
232
+ /** Voice controls and state; the same as `getState().voice`. */
233
+ get voice(): VoiceControls;
234
+ private setState;
235
+ private setVoice;
236
+ private setMessages;
237
+ /**
238
+ * Replace options. Callbacks take effect at once; a new `url`, `publicKey`
239
+ * or `debug` reconnects, since each belongs to the session.
240
+ */
241
+ update(options: Partial<MiheOptions>): void;
242
+ /** Open the session. Called by `createMihe`; does nothing if connected. */
243
+ connect(): void;
244
+ /**
245
+ * Close the session, the voice session and any highlight. The
246
+ * conversation and the declarations stay, for a later `connect()`.
247
+ */
248
+ disconnect(): void;
249
+ /** Disconnect and drop every listener. The instance is done after this. */
250
+ destroy(): void;
251
+ send: (text: string) => void;
252
+ respondToProposal: (proposalId: string, confirmed: boolean) => void;
253
+ open: () => void;
254
+ close: () => void;
255
+ toggle: () => void;
256
+ /**
257
+ * A one-tap "ask this", for suggestion chips and help links:
258
+ * `chip.onclick = mihe.prompt("How do I add a product?")`.
259
+ */
260
+ prompt(text: string): () => void;
261
+ /**
262
+ * Declare the screen the user is on. Call it again when what the screen
263
+ * shows changes; call the returned function when the user leaves it.
264
+ *
265
+ * `visibleData` is what makes answers concrete — "you have 7 low-stock
266
+ * products" rather than "check your stock levels" — so include the summary
267
+ * values already on screen, and only those.
268
+ */
269
+ setScreen(screen: ScreenDeclaration): () => void;
270
+ /**
271
+ * Declare a component the assistant can talk about or point at. Marks
272
+ * `element` so it can be found; pass `null` for one that is described but
273
+ * cannot be highlighted.
274
+ */
275
+ registerComponent(element: Element | null, componentKey: string, meta: ComponentDeclaration): () => void;
276
+ /**
277
+ * Supply the code for an action the assistant may run in the browser.
278
+ *
279
+ * The action itself — its risk tier, permissions, and whether it needs
280
+ * confirmation — is configured in the dashboard, not here. Whatever the
281
+ * handler returns becomes the tool result the model sees, so return
282
+ * something descriptive. Throwing reports the failure honestly.
283
+ */
284
+ registerAction(name: string, handler: ActionHandler["handler"]): () => void;
285
+ private undoAction;
286
+ /**
287
+ * Let the assistant see which tab is open and switch to another. Pass the
288
+ * tab that is really showing as `value`, and call this again when it
289
+ * changes: a switch is not reported done until `value` matches.
290
+ */
291
+ registerTabs(tabs: AssistantTabs): () => void;
292
+ /**
293
+ * Let the assistant read a table. The rows are not sent with the screen;
294
+ * the model reads them when a question needs them, and only the declared
295
+ * columns ever leave the browser (amendment 67). Call it again when the
296
+ * rows change.
297
+ */
298
+ registerTable<Row>(table: AssistantTable<Row>): () => void;
299
+ /**
300
+ * Let the assistant explain a chart. Each series is summarised here, in
301
+ * the browser; the points are read when an exact value is wanted. Call it
302
+ * again when the data changes.
303
+ */
304
+ registerChart<Datum>(chart: AssistantChart<Datum>): () => void;
305
+ /**
306
+ * Add figures to the screen's `visibleData` under `key`: the stat cards
307
+ * inside a tab, a summary panel. Dropped when the screen changes.
308
+ */
309
+ setValues(key: string, values: Record<string, unknown>): () => void;
310
+ /**
311
+ * One declaration kind's register-update-undo, shared so tabs, tables and
312
+ * charts behave the same. The store's entry is re-registered only when the
313
+ * signature changes, or when the store no longer holds it because the
314
+ * screen changed underneath.
315
+ */
316
+ private declare;
317
+ /**
318
+ * Make an element open and close the assistant, keyboard and screen
319
+ * reader included: a `div` with only a click handler is invisible to both,
320
+ * and that is the most common way a custom trigger ships broken.
321
+ */
322
+ bindTrigger(element: HTMLElement): () => void;
323
+ private handleEvent;
324
+ private publish;
325
+ /**
326
+ * A navigate command cannot be acked until the destination has published
327
+ * its context, or the runtime's next step would still be reasoning about
328
+ * the screen the user just left. See `CommandContext.screenPublished`.
329
+ */
330
+ private awaitScreenPublished;
331
+ /**
332
+ * A set_view ack waits the same way, for the tab the app was asked to show
333
+ * to be the one the published screen reports. An app whose `onChange` did
334
+ * nothing is reported as a failure rather than a switch that did not
335
+ * happen.
336
+ */
337
+ private awaitViewPublished;
338
+ private startVoiceRequest;
339
+ private stopVoice;
340
+ private startVoice;
341
+ private handleVoiceEvent;
342
+ }
343
+ //# sourceMappingURL=mihe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mihe.d.ts","sourceRoot":"","sources":["../../../js/src/mihe.ts"],"names":[],"mappings":"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"}