@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.
- package/LICENSE +21 -0
- package/README.md +114 -2
- package/dist/audio.d.ts +121 -0
- package/dist/audio.d.ts.map +1 -0
- package/dist/audio.js +377 -0
- package/dist/audio.js.map +1 -0
- package/dist/chart.d.ts +15 -0
- package/dist/chart.d.ts.map +1 -0
- package/dist/chart.js +58 -0
- package/dist/chart.js.map +1 -0
- package/dist/client.d.ts +226 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +358 -0
- package/dist/client.js.map +1 -0
- package/dist/commands.d.ts +70 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +295 -0
- package/dist/commands.js.map +1 -0
- package/dist/debug.d.ts +17 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +29 -0
- package/dist/debug.js.map +1 -0
- package/dist/declarations.d.ts +160 -0
- package/dist/declarations.d.ts.map +1 -0
- package/dist/declarations.js +171 -0
- package/dist/declarations.js.map +1 -0
- package/dist/highlight.d.ts +77 -0
- package/dist/highlight.d.ts.map +1 -0
- package/dist/highlight.js +233 -0
- package/dist/highlight.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/mihe.d.ts +343 -0
- package/dist/mihe.d.ts.map +1 -0
- package/dist/mihe.iife.min.js +206 -0
- package/dist/mihe.iife.min.js.map +7 -0
- package/dist/mihe.js +720 -0
- package/dist/mihe.js.map +1 -0
- package/dist/mihe.min.js +206 -0
- package/dist/mihe.min.js.map +7 -0
- package/dist/store.d.ts +175 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +208 -0
- package/dist/store.js.map +1 -0
- package/dist/voice.d.ts +192 -0
- package/dist/voice.d.ts.map +1 -0
- package/dist/voice.js +443 -0
- package/dist/voice.js.map +1 -0
- package/dist/widget/card.d.ts +15 -0
- package/dist/widget/card.d.ts.map +1 -0
- package/dist/widget/card.js +28 -0
- package/dist/widget/card.js.map +1 -0
- package/dist/widget/dom.d.ts +24 -0
- package/dist/widget/dom.d.ts.map +1 -0
- package/dist/widget/dom.js +49 -0
- package/dist/widget/dom.js.map +1 -0
- package/dist/widget/element.d.ts +88 -0
- package/dist/widget/element.d.ts.map +1 -0
- package/dist/widget/element.js +285 -0
- package/dist/widget/element.js.map +1 -0
- package/dist/widget/format.d.ts +24 -0
- package/dist/widget/format.d.ts.map +1 -0
- package/dist/widget/format.js +64 -0
- package/dist/widget/format.js.map +1 -0
- package/dist/widget/icons.d.ts +5 -0
- package/dist/widget/icons.d.ts.map +1 -0
- package/dist/widget/icons.js +19 -0
- package/dist/widget/icons.js.map +1 -0
- package/dist/widget/launcher.d.ts +13 -0
- package/dist/widget/launcher.d.ts.map +1 -0
- package/dist/widget/launcher.js +27 -0
- package/dist/widget/launcher.js.map +1 -0
- package/dist/widget/mark.d.ts +10 -0
- package/dist/widget/mark.d.ts.map +1 -0
- package/dist/widget/mark.js +20 -0
- package/dist/widget/mark.js.map +1 -0
- package/dist/widget/orb.d.ts +91 -0
- package/dist/widget/orb.d.ts.map +1 -0
- package/dist/widget/orb.js +497 -0
- package/dist/widget/orb.js.map +1 -0
- package/dist/widget/panel.d.ts +40 -0
- package/dist/widget/panel.d.ts.map +1 -0
- package/dist/widget/panel.js +239 -0
- package/dist/widget/panel.js.map +1 -0
- package/dist/widget/styles.d.ts +22 -0
- package/dist/widget/styles.d.ts.map +1 -0
- package/dist/widget/styles.js +181 -0
- package/dist/widget/styles.js.map +1 -0
- 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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"}
|