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