@fungi.computer/parakeet 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 (115) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +186 -2
  3. package/dist/account-commands.d.ts +102 -0
  4. package/dist/account-commands.js +239 -0
  5. package/dist/agent-head.d.ts +4 -0
  6. package/dist/agent-head.js +2 -0
  7. package/dist/client-contributions.d.ts +20 -0
  8. package/dist/client-contributions.js +41 -0
  9. package/dist/commands/advertised.d.ts +23 -0
  10. package/dist/commands/advertised.js +72 -0
  11. package/dist/commands/builtins.d.ts +14 -0
  12. package/dist/commands/builtins.js +91 -0
  13. package/dist/commands/hints.d.ts +36 -0
  14. package/dist/commands/hints.js +64 -0
  15. package/dist/commands/interactions.d.ts +55 -0
  16. package/dist/commands/interactions.js +101 -0
  17. package/dist/commands/run.d.ts +12 -0
  18. package/dist/commands/run.js +64 -0
  19. package/dist/commands/slash.d.ts +126 -0
  20. package/dist/commands/slash.js +190 -0
  21. package/dist/commands/use-slash-commands.d.ts +57 -0
  22. package/dist/commands/use-slash-commands.js +207 -0
  23. package/dist/components/AgentHead.d.ts +22 -0
  24. package/dist/components/AgentHead.js +20 -0
  25. package/dist/components/ChatComposer.d.ts +43 -0
  26. package/dist/components/ChatComposer.js +209 -0
  27. package/dist/components/ChatMessage.d.ts +8 -0
  28. package/dist/components/ChatMessage.js +16 -0
  29. package/dist/components/ClientRows.d.ts +11 -0
  30. package/dist/components/ClientRows.js +46 -0
  31. package/dist/components/CodeBlock.d.ts +11 -0
  32. package/dist/components/CodeBlock.js +38 -0
  33. package/dist/components/InteractionPanel.d.ts +15 -0
  34. package/dist/components/InteractionPanel.js +42 -0
  35. package/dist/components/MarkdownRenderer.d.ts +6 -0
  36. package/dist/components/MarkdownRenderer.js +48 -0
  37. package/dist/components/RunFailureNotice.d.ts +7 -0
  38. package/dist/components/RunFailureNotice.js +13 -0
  39. package/dist/components/ShiitakeAvatar.d.ts +21 -0
  40. package/dist/components/ShiitakeAvatar.js +22 -0
  41. package/dist/components/SlashMenu.d.ts +8 -0
  42. package/dist/components/SlashMenu.js +50 -0
  43. package/dist/components/ThinkingBlock.d.ts +3 -0
  44. package/dist/components/ThinkingBlock.js +18 -0
  45. package/dist/components/TimelineItem.d.ts +15 -0
  46. package/dist/components/TimelineItem.js +35 -0
  47. package/dist/components/ToolGroup.d.ts +12 -0
  48. package/dist/components/ToolGroup.js +90 -0
  49. package/dist/components/WaitingNotice.d.ts +7 -0
  50. package/dist/components/WaitingNotice.js +8 -0
  51. package/dist/components/avatar-presentation.d.ts +16 -0
  52. package/dist/components/avatar-presentation.js +9 -0
  53. package/dist/components/sprite-service.d.ts +2 -0
  54. package/dist/components/sprite-service.js +9 -0
  55. package/dist/conversation.d.ts +165 -0
  56. package/dist/conversation.js +762 -0
  57. package/dist/core/assistant-visibility.d.ts +3 -0
  58. package/dist/core/assistant-visibility.js +4 -0
  59. package/dist/core/author-labels.d.ts +16 -0
  60. package/dist/core/author-labels.js +16 -0
  61. package/dist/core/build-timeline.d.ts +36 -0
  62. package/dist/core/build-timeline.js +328 -0
  63. package/dist/core/client-actions.d.ts +35 -0
  64. package/dist/core/client-actions.js +128 -0
  65. package/dist/core/client-contributions.d.ts +24 -0
  66. package/dist/core/client-contributions.js +115 -0
  67. package/dist/core/client-timeline.d.ts +33 -0
  68. package/dist/core/client-timeline.js +72 -0
  69. package/dist/core/format-context.d.ts +11 -0
  70. package/dist/core/format-context.js +20 -0
  71. package/dist/core/format-tokens.d.ts +2 -0
  72. package/dist/core/format-tokens.js +6 -0
  73. package/dist/core/model-identity.d.ts +3 -0
  74. package/dist/core/model-identity.js +7 -0
  75. package/dist/core/session-projection.d.ts +11 -0
  76. package/dist/core/session-projection.js +191 -0
  77. package/dist/core/session-query.d.ts +118 -0
  78. package/dist/core/session-query.js +187 -0
  79. package/dist/core/session-view-state.d.ts +66 -0
  80. package/dist/core/session-view-state.js +114 -0
  81. package/dist/core/tool-contract.d.ts +15 -0
  82. package/dist/core/tool-contract.js +3 -0
  83. package/dist/core/tool-groups.d.ts +36 -0
  84. package/dist/core/tool-groups.js +151 -0
  85. package/dist/core/tool-view.d.ts +182 -0
  86. package/dist/core/tool-view.js +618 -0
  87. package/dist/headless.d.ts +28 -0
  88. package/dist/headless.js +24 -0
  89. package/dist/index.d.ts +9 -0
  90. package/dist/index.js +4 -0
  91. package/dist/lib/failure.d.ts +2 -0
  92. package/dist/lib/failure.js +9 -0
  93. package/dist/markdown.d.ts +3 -0
  94. package/dist/markdown.js +6 -0
  95. package/dist/model-commands.d.ts +44 -0
  96. package/dist/model-commands.js +232 -0
  97. package/dist/parakeet.d.ts +77 -0
  98. package/dist/parakeet.js +276 -0
  99. package/dist/provider-choices.d.ts +8 -0
  100. package/dist/provider-choices.js +46 -0
  101. package/dist/reload-command.d.ts +43 -0
  102. package/dist/reload-command.js +72 -0
  103. package/dist/session-commands.d.ts +53 -0
  104. package/dist/session-commands.js +259 -0
  105. package/dist/session.d.ts +24 -0
  106. package/dist/session.js +1 -0
  107. package/dist/store/types.d.ts +163 -0
  108. package/dist/store/types.js +1 -0
  109. package/dist/styles.css +19129 -0
  110. package/docs/api/README.md +15 -0
  111. package/docs/api/commands/slash.md +321 -0
  112. package/docs/api/headless.md +2510 -0
  113. package/docs/api/index.md +1249 -0
  114. package/package.json +79 -3
  115. package/src/styles.css +272 -0
@@ -0,0 +1,2510 @@
1
+ <!-- Generated by Botanical API docs (TypeDoc + typedoc-plugin-markdown). Do not edit. -->
2
+
3
+ [**@fungi.computer/parakeet**](README.md)
4
+
5
+ ---
6
+
7
+ [@fungi.computer/parakeet](README.md) / headless
8
+
9
+ # headless
10
+
11
+ ## Type Aliases
12
+
13
+ ### LoginMethodKind
14
+
15
+ ```ts
16
+ type LoginMethodKind = "api_key" | "subscription";
17
+ ```
18
+
19
+ How a person proves they may use a provider: an API key or their subscription
20
+ sign-in.
21
+
22
+ ---
23
+
24
+ ### LoginMethod
25
+
26
+ ```ts
27
+ type LoginMethod = Readonly<{
28
+ kind: LoginMethodKind;
29
+ label: string;
30
+ }>;
31
+ ```
32
+
33
+ One sign-in method a provider offers, labelled by its owner.
34
+
35
+ ---
36
+
37
+ ### LoginProvider
38
+
39
+ ```ts
40
+ type LoginProvider = Readonly<{
41
+ id: string;
42
+ name: string;
43
+ methods: readonly LoginMethod[];
44
+ }>;
45
+ ```
46
+
47
+ One model provider in the registry. Names come from data, never code.
48
+
49
+ ---
50
+
51
+ ### LoginHost
52
+
53
+ ```ts
54
+ type LoginHost = "local" | "hosted";
55
+ ```
56
+
57
+ Where the credential will be used: the person's machine or Fungi's servers.
58
+
59
+ ---
60
+
61
+ ### LoginScope
62
+
63
+ ```ts
64
+ type LoginScope = "user" | "team";
65
+ ```
66
+
67
+ Whose credential it is: one person, or a Team.
68
+
69
+ ---
70
+
71
+ ### LoginPolicy
72
+
73
+ ```ts
74
+ type LoginPolicy = Readonly<{
75
+ loginAllowed: (request) => boolean;
76
+ }>;
77
+ ```
78
+
79
+ The credential policy owner's decision, the same shape as
80
+ `@fungi.computer/veil/model-credentials` `loginAllowed`. Login offers only what
81
+ it permits.
82
+
83
+ ---
84
+
85
+ ### ProviderAccess
86
+
87
+ ```ts
88
+ type ProviderAccess = Readonly<{
89
+ providerId: string;
90
+ providerName: string;
91
+ type: "oauth" | "api_key";
92
+ }>;
93
+ ```
94
+
95
+ A configured provider reported by the credential owner, without secrets.
96
+
97
+ ---
98
+
99
+ ### AccountOwner
100
+
101
+ ```ts
102
+ type AccountOwner = Readonly<{
103
+ popularProviderIds: readonly string[];
104
+ access: (signal) => Promise<readonly ProviderAccess[]>;
105
+ providers: (signal) => Promise<readonly LoginProvider[]>;
106
+ login: (request, interaction) => Promise<void>;
107
+ logout: (providerId, interaction) => Promise<void>;
108
+ status: (signal) => Promise<string>;
109
+ }>;
110
+ ```
111
+
112
+ The credential owner behind the account commands.
113
+
114
+ ---
115
+
116
+ ### AccountCommandOptions
117
+
118
+ ```ts
119
+ type AccountCommandOptions = Readonly<{
120
+ sourceId: string;
121
+ namespace: string;
122
+ host: LoginHost;
123
+ scope: LoginScope;
124
+ policy: LoginPolicy;
125
+ }>;
126
+ ```
127
+
128
+ Contribution identity and the policy context for account commands.
129
+
130
+ ---
131
+
132
+ ### ModelAccountContext
133
+
134
+ ```ts
135
+ type ModelAccountContext = Pick<
136
+ AccountCommandOptions,
137
+ "policy" | "host" | "scope"
138
+ > &
139
+ Readonly<{
140
+ owner: AccountOwner;
141
+ }>;
142
+ ```
143
+
144
+ One account owner and its credential policy context for an interactive model
145
+ picker.
146
+
147
+ ---
148
+
149
+ ### AdvertisedCatalogError
150
+
151
+ ```ts
152
+ type AdvertisedCatalogError = Readonly<{
153
+ extensionId: string;
154
+ message: string;
155
+ }>;
156
+ ```
157
+
158
+ Why one advertised catalog could not become commands.
159
+
160
+ ---
161
+
162
+ ### AdvertisedCommands
163
+
164
+ ```ts
165
+ type AdvertisedCommands = Readonly<{
166
+ update: (slots) => readonly AdvertisedCatalogError[];
167
+ dispose: () => void;
168
+ }>;
169
+ ```
170
+
171
+ Live commands for every catalog a Session's extensions advertise.
172
+
173
+ ---
174
+
175
+ ### ParakeetBuiltinOptions
176
+
177
+ ```ts
178
+ type ParakeetBuiltinOptions = Readonly<{
179
+ clear: () => void;
180
+ showCommands?: () => void | Promise<void>;
181
+ }>;
182
+ ```
183
+
184
+ The few commands every Parakeet client has, whatever the backend offers.
185
+
186
+ ---
187
+
188
+ ### KeyHint
189
+
190
+ ```ts
191
+ type KeyHint = Readonly<{
192
+ keys: string;
193
+ label: string;
194
+ priority: number;
195
+ }>;
196
+ ```
197
+
198
+ One key hint: the keys, what they do, and how much it matters (0 first).
199
+
200
+ ---
201
+
202
+ ### ComposerKeys
203
+
204
+ ```ts
205
+ type ComposerKeys = Readonly<{
206
+ newline?: string;
207
+ scroll?: string;
208
+ queue?: string;
209
+ }>;
210
+ ```
211
+
212
+ The composer's physical keys, which differ slightly between renderers.
213
+
214
+ ---
215
+
216
+ ### ComposerHintContext
217
+
218
+ ```ts
219
+ type ComposerHintContext = Readonly<{
220
+ completion: SlashCompletion;
221
+ busy: boolean;
222
+ bindings: readonly KeyBindingRow[];
223
+ keys: ComposerKeys;
224
+ }>;
225
+ ```
226
+
227
+ What the composer is doing right now.
228
+
229
+ ---
230
+
231
+ ### ParakeetOpenInteraction
232
+
233
+ ```ts
234
+ type ParakeetOpenInteraction = Readonly<{
235
+ key: number;
236
+ host: WhistleInteractionHost;
237
+ retry: () => void;
238
+ }>;
239
+ ```
240
+
241
+ One interaction a renderer should draw as a dialog or panel.
242
+
243
+ ---
244
+
245
+ ### ParakeetNotice
246
+
247
+ ```ts
248
+ type ParakeetNotice = Readonly<{
249
+ tone: "info" | "success" | "error";
250
+ message: string;
251
+ }>;
252
+ ```
253
+
254
+ A one-line result shown beside the composer instead of a dialog.
255
+
256
+ ---
257
+
258
+ ### ParakeetInteractionState
259
+
260
+ ```ts
261
+ type ParakeetInteractionState = Readonly<{
262
+ open?: ParakeetOpenInteraction;
263
+ inspection?: Readonly<{
264
+ entryId: string;
265
+ rowId: string;
266
+ }>;
267
+ notice?: ParakeetNotice;
268
+ }>;
269
+ ```
270
+
271
+ Everything a renderer draws for command conversations.
272
+
273
+ ---
274
+
275
+ ### ParakeetInteractions
276
+
277
+ ```ts
278
+ type ParakeetInteractions = Readonly<{
279
+ snapshot: () => ParakeetInteractionState;
280
+ subscribe: (listener) => () => void;
281
+ close: () => void;
282
+ inspect: (inspection) => void;
283
+ report: (notice) => void;
284
+ attach: (present) => () => void;
285
+ lastEnd: () => WhistleInteractionEnd["status"] | undefined;
286
+ }>;
287
+ ```
288
+
289
+ Parakeet's command conversation store, shared by every renderer.
290
+
291
+ ---
292
+
293
+ ### SlashRuntime
294
+
295
+ ```ts
296
+ type SlashRuntime = Pick<WhistleRuntime, "snapshot" | "execute">;
297
+ ```
298
+
299
+ The Whistle surface a composer needs to run drafts.
300
+
301
+ ---
302
+
303
+ ### ParakeetCommandRuntime
304
+
305
+ ```ts
306
+ type ParakeetCommandRuntime = Pick<
307
+ WhistleRuntime,
308
+ "contribute" | "snapshot" | "subscribe" | "execute" | "present"
309
+ >;
310
+ ```
311
+
312
+ The Whistle runtime a Parakeet composer runs commands through.
313
+
314
+ ---
315
+
316
+ ### SlashCommandOptions
317
+
318
+ ```ts
319
+ type SlashCommandOptions = Readonly<{
320
+ enabled?: boolean;
321
+ commands: ParakeetCommandRuntime;
322
+ origin: WhistleExecutionOrigin;
323
+ keys: ComposerKeys;
324
+ busy: boolean;
325
+ interactionStore?: ParakeetInteractions;
326
+ showCommands?: () => void | Promise<void>;
327
+ }>;
328
+ ```
329
+
330
+ Inputs for one composer's command controller.
331
+
332
+ ---
333
+
334
+ ### SlashCommandController
335
+
336
+ ```ts
337
+ type SlashCommandController = Readonly<{
338
+ completion: SlashCompletion;
339
+ open: boolean;
340
+ selected: number;
341
+ hints: readonly KeyHint[];
342
+ interactions: ParakeetInteractionState;
343
+ store: ParakeetInteractions;
344
+ move: (delta) => boolean;
345
+ highlight: (index) => void;
346
+ complete: () => boolean;
347
+ dismiss: () => boolean;
348
+ submit: (delivery?) => void;
349
+ choose: (index) => void;
350
+ }>;
351
+ ```
352
+
353
+ Everything a renderer needs to draw and drive slash commands.
354
+
355
+ ---
356
+
357
+ ### ParakeetSessionViewState
358
+
359
+ ```ts
360
+ type ParakeetSessionViewState =
361
+ | ParakeetOwnerViewState
362
+ | Readonly<{
363
+ kind: "connecting";
364
+ }>
365
+ | Readonly<{
366
+ kind: "disconnected";
367
+ cause: string;
368
+ }>;
369
+ ```
370
+
371
+ Owner activity with the connection states shown while observation opens.
372
+
373
+ ---
374
+
375
+ ### ParakeetObservation
376
+
377
+ ```ts
378
+ type ParakeetObservation =
379
+ | Readonly<{
380
+ status: "connecting";
381
+ }>
382
+ | Readonly<{
383
+ status: "live";
384
+ }>
385
+ | Readonly<{
386
+ status: "unavailable";
387
+ reason: string;
388
+ }>;
389
+ ```
390
+
391
+ Health of the current Session observation.
392
+
393
+ ---
394
+
395
+ ### ParakeetReconnectOutcome
396
+
397
+ ```ts
398
+ type ParakeetReconnectOutcome =
399
+ | Readonly<{
400
+ kind: "nothing_to_reconnect";
401
+ state: "connected" | "connecting";
402
+ }>
403
+ | Readonly<{
404
+ kind: "reconnected";
405
+ }>
406
+ | Readonly<{
407
+ kind: "failed";
408
+ cause: string;
409
+ }>;
410
+ ```
411
+
412
+ Result of retrying the shared Session observation.
413
+
414
+ ---
415
+
416
+ ### ClientContribution
417
+
418
+ ```ts
419
+ type ClientContribution = Readonly<{
420
+ entryId: string;
421
+ value: ClientContributionV1;
422
+ }>;
423
+ ```
424
+
425
+ Decoded client data, still owned and ordered by its composition root.
426
+
427
+ ---
428
+
429
+ ### PlacedClientCell
430
+
431
+ ```ts
432
+ type PlacedClientCell = Readonly<{
433
+ entryId: string;
434
+ cell: ClientTimelineCellV1;
435
+ }>;
436
+ ```
437
+
438
+ A committed cell retains its producer namespace in every renderer.
439
+
440
+ ---
441
+
442
+ ### ParakeetOwnerViewState
443
+
444
+ ```ts
445
+ type ParakeetOwnerViewState =
446
+ | Readonly<{
447
+ kind: "idle" | "waiting_for_you" | "thinking" | "responding";
448
+ }>
449
+ | Readonly<{
450
+ kind: "cancelling";
451
+ }>
452
+ | Readonly<{
453
+ kind: "compacting";
454
+ trigger: SessionCompactionTrigger;
455
+ }>
456
+ | Readonly<{
457
+ kind: "queued";
458
+ queuedCommandId: string;
459
+ runningWork: AgentRunningWork | null;
460
+ }>
461
+ | Readonly<{
462
+ kind: "retrying";
463
+ attempt: number;
464
+ maxAttempts: number;
465
+ cause: string;
466
+ nextRetryAt: number;
467
+ }>
468
+ | Readonly<{
469
+ kind: "running_tool";
470
+ tool: string;
471
+ }>
472
+ | Readonly<{
473
+ kind: "error";
474
+ cause: string;
475
+ }>;
476
+ ```
477
+
478
+ What a person's readout of one Session says, decided from Shiitake's raw
479
+ activity facts. Shiitake publishes facts; this module owns their meaning.
480
+
481
+ ---
482
+
483
+ ### SessionViewFacts
484
+
485
+ ```ts
486
+ type SessionViewFacts = Pick<
487
+ SessionSnapshot,
488
+ "activity" | "terminals" | "progress"
489
+ >;
490
+ ```
491
+
492
+ The facts a view state is decided from.
493
+
494
+ ---
495
+
496
+ ### SessionActivityStatus
497
+
498
+ ```ts
499
+ type SessionActivityStatus =
500
+ "cancelling" | "idle" | "queued" | "retrying" | "streaming" | "thinking";
501
+ ```
502
+
503
+ Coarse activity of a Session, for composer gating.
504
+
505
+ ---
506
+
507
+ ### SessionModelChoice
508
+
509
+ ```ts
510
+ type SessionModelChoice = Readonly<{
511
+ providerId: string;
512
+ providerName: string;
513
+ id: string;
514
+ name: string;
515
+ reasoning: readonly NonNullable<ModelPreference["reasoning"]>[];
516
+ }>;
517
+ ```
518
+
519
+ A host's maintained catalog projection; no credentials or provider execution.
520
+
521
+ ---
522
+
523
+ ### SessionModelCommandOptions
524
+
525
+ ```ts
526
+ type SessionModelCommandOptions = Readonly<{
527
+ account: ModelAccountContext;
528
+ sourceId: string;
529
+ namespace: string;
530
+ models: readonly SessionModelChoice[];
531
+ refreshModels: (signal) => Promise<readonly SessionModelChoice[]>;
532
+ availability?: () => WhistleAvailability;
533
+ }>;
534
+ ```
535
+
536
+ Contribution identity, catalog and optional local model-picker presentation.
537
+
538
+ ---
539
+
540
+ ### ReloadSource
541
+
542
+ ```ts
543
+ type ReloadSource = Readonly<object &
544
+ | {
545
+ effect: "now";
546
+ reload: (signal) => Promise<void>;
547
+ }
548
+ | {
549
+ effect: "next_turn";
550
+ }
551
+ | {
552
+ effect: "unsupported";
553
+ reason: string;
554
+ }>;
555
+ ```
556
+
557
+ One category a host can account for in `/reload`, described by the owner that
558
+ already holds it. Nothing here caches, restarts or replaces anything: `now`
559
+ re-reads through the owner's own refresh, `next_turn` names a source the owner
560
+ already re-reads at the start of every turn, and `unsupported` names a category
561
+ with no safe re-read or replace lifecycle today.
562
+
563
+ ---
564
+
565
+ ### ReloadCommandOptions
566
+
567
+ ```ts
568
+ type ReloadCommandOptions = Readonly<{
569
+ sourceId: string;
570
+ namespace: string;
571
+ sources: () => readonly ReloadSource[];
572
+ }>;
573
+ ```
574
+
575
+ Where one `/reload` contribution comes from and what it can report.
576
+
577
+ ---
578
+
579
+ ### ParakeetSessionCommandOptions
580
+
581
+ ```ts
582
+ type ParakeetSessionCommandOptions = Readonly<{
583
+ sourceId: string;
584
+ namespace: string;
585
+ sessionResume?: () => void | Promise<void>;
586
+ sessionResumeAvailable: boolean;
587
+ onEditQueued?: (text) => void;
588
+ canEditQueued?: () => boolean;
589
+ onForked?: (sessionId) => void | Promise<void>;
590
+ forkAvailable: boolean;
591
+ onTitled?: (title) => void | Promise<void>;
592
+ }>;
593
+ ```
594
+
595
+ Shared Session actions with optional human presentation callbacks.
596
+
597
+ ## Variables
598
+
599
+ ### toolKindSigils
600
+
601
+ ```ts
602
+ const toolKindSigils: object;
603
+ ```
604
+
605
+ Shared artwork identity for browser and native tool rows.
606
+
607
+ #### Type Declaration
608
+
609
+ | Name | Type | Default value | Description |
610
+ | --------------------------------------- | ------------ | ------------- | ----------------------------- |
611
+ | <a id="property-code"></a> `code` | `"computer"` | `"computer"` | Artwork for code execution. |
612
+ | <a id="property-command"></a> `command` | `"run"` | `"run"` | Artwork for shell commands. |
613
+ | <a id="property-edit"></a> `edit` | `"write"` | `"write"` | Artwork for file edits. |
614
+ | <a id="property-other"></a> `other` | `"working"` | `"working"` | Artwork for other tool calls. |
615
+ | <a id="property-read"></a> `read` | `"read"` | `"read"` | Artwork for file reads. |
616
+ | <a id="property-search"></a> `search` | `"list"` | `"list"` | Artwork for search results. |
617
+
618
+ ## Functions
619
+
620
+ ### loginRegistry()
621
+
622
+ ```ts
623
+ function loginRegistry(
624
+ providers,
625
+ options,
626
+ ): readonly Readonly<{
627
+ id: string;
628
+ name: string;
629
+ methods: readonly Readonly<{
630
+ kind: LoginMethodKind;
631
+ label: string;
632
+ }>[];
633
+ }>[];
634
+ ```
635
+
636
+ The providers and methods one surface may offer, in display order.
637
+
638
+ #### Parameters
639
+
640
+ | Parameter | Type |
641
+ | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
642
+ | `providers` | readonly `Readonly`\<\{ `id`: `string`; `name`: `string`; `methods`: readonly `Readonly`\<\{ `kind`: [`LoginMethodKind`](#loginmethodkind); `label`: `string`; \}\>[]; \}\>[] |
643
+ | `options` | `Readonly`\<\{ `policy`: [`LoginPolicy`](#loginpolicy); `host`: [`LoginHost`](#loginhost); `scope`: [`LoginScope`](#loginscope); \}\> |
644
+
645
+ #### Returns
646
+
647
+ readonly `Readonly`\<\{ `id`: `string`; `name`: `string`; `methods`: readonly
648
+ `Readonly`\<\{ `kind`: [`LoginMethodKind`](#loginmethodkind); `label`: `string`;
649
+ \}\>[]; \}\>[]
650
+
651
+ ---
652
+
653
+ ### accountCommandDefinitions()
654
+
655
+ ```ts
656
+ function accountCommandDefinitions(owner, options): readonly Readonly<{
657
+ id: string;
658
+ title: string;
659
+ category: string;
660
+ description?: string;
661
+ projections?: {
662
+ bindings?: {
663
+ order?: number;
664
+ values: readonly string[];
665
+ };
666
+ agent?: {
667
+ keybind?: string;
668
+ order?: number;
669
+ };
670
+ help?: {
671
+ order?: number;
672
+ };
673
+ menu?: {
674
+ order?: number;
675
+ };
676
+ palette?: {
677
+ order?: number;
678
+ };
679
+ slash?: {
680
+ aliases: readonly string[];
681
+ order?: number;
682
+ arguments?: {
683
+ hint: string;
684
+ words?: readonly ...[];
685
+ text?: {
686
+ field: ...;
687
+ arguments: ...;
688
+ requestIdField?: ...;
689
+ };
690
+ };
691
+ };
692
+ };
693
+ action?: {
694
+ inputSchema?: {
695
+ [key: string]:
696
+ | string
697
+ | number
698
+ | boolean
699
+ | readonly string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | ... 4 more ... | null)[] | { ...; } | null)[] | { ...; } | null)[] | { ...; } | ...[]
700
+ | {
701
+ [key: string]: string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | ... 4 more ... | null)[] | { ...; } | null)[] | { ...; } | null)[] | { ...; } | ...;
702
+ }
703
+ | null;
704
+ };
705
+ outputSchema?: {
706
+ [key: string]:
707
+ | string
708
+ | number
709
+ | boolean
710
+ | readonly string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | ... 4 more ... | null)[] | { ...; } | null)[] | { ...; } | null)[] | { ...; } | ...[]
711
+ | {
712
+ [key: string]: string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | ... 4 more ... | null)[] | { ...; } | null)[] | { ...; } | null)[] | { ...; } | ...;
713
+ }
714
+ | null;
715
+ };
716
+ presentation?: | {
717
+ type: "action";
718
+ }
719
+ | {
720
+ type: "custom";
721
+ data: {
722
+ [key: string]:
723
+ | string
724
+ | number
725
+ | boolean
726
+ | readonly string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | ... 4 more ... | null)[] | { ...; } | null)[] | { ...; } | null)[] | { ...; } | ...[]
727
+ | {
728
+ [key: string]: string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | ... 4 more ... | null)[] | { ...; } | null)[] | { ...; } | null)[] | { ...; } | ...;
729
+ }
730
+ | null;
731
+ };
732
+ }
733
+ | {
734
+ type: "choice";
735
+ options: readonly object[];
736
+ }
737
+ | {
738
+ type: "form";
739
+ submitLabel?: string;
740
+ }
741
+ | {
742
+ type: "confirmation";
743
+ message: string;
744
+ confirmLabel?: string;
745
+ cancelLabel?: string;
746
+ };
747
+ };
748
+ availability?: () => WhistleAvailability;
749
+ handler: (input) => unknown;
750
+ }>[];
751
+ ```
752
+
753
+ Provider-agnostic account commands. Every question and status update is a
754
+ Whistle interaction, so any client that renders interactions renders login.
755
+
756
+ #### Parameters
757
+
758
+ | Parameter | Type |
759
+ | --------- | ------------------------------------------------- |
760
+ | `owner` | [`AccountOwner`](#accountowner) |
761
+ | `options` | [`AccountCommandOptions`](#accountcommandoptions) |
762
+
763
+ #### Returns
764
+
765
+ readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`;
766
+ `description?`: `string`; `projections?`: \{ `bindings?`: \{ `order?`: `number`;
767
+ `values`: readonly `string`[]; \}; `agent?`: \{ `keybind?`: `string`; `order?`:
768
+ `number`; \}; `help?`: \{ `order?`: `number`; \}; `menu?`: \{ `order?`:
769
+ `number`; \}; `palette?`: \{ `order?`: `number`; \}; `slash?`: \{ `aliases`:
770
+ readonly `string`[]; `order?`: `number`; `arguments?`: \{ `hint`: `string`;
771
+ `words?`: readonly ...[]; `text?`: \{ `field`: ...; `arguments`: ...;
772
+ `requestIdField?`: ...; \}; \}; \}; \}; `action?`: \{ `inputSchema?`: \{
773
+ \[`key`: `string`\]: \| `string` \| `number` \| `boolean` \| readonly string \|
774
+ number \| boolean \| readonly (string \| number \| boolean \| readonly (string
775
+ \| number \| boolean \| readonly (string \| number \| boolean \| readonly
776
+ (string \| number \| boolean \| readonly (string \| number \| boolean \|
777
+ readonly (string \| ... 4 more ... \| null)\[\] \| \{ ...; \} \| null)\[\] \| \{
778
+ ...; \} \| null)\[\] \| \{ ...; \} \| ...[] \| \{ \[`key`: `string`\]: string \|
779
+ number \| boolean \| readonly (string \| number \| boolean \| readonly (string
780
+ \| number \| boolean \| readonly (string \| number \| boolean \| readonly
781
+ (string \| number \| boolean \| readonly (string \| number \| boolean \|
782
+ readonly (string \| ... 4 more ... \| null)\[\] \| \{ ...; \} \| null)\[\] \| \{
783
+ ...; \} \| null)\[\] \| \{ ...; \} \| ...; \} \| `null`; \}; `outputSchema?`: \{
784
+ \[`key`: `string`\]: \| `string` \| `number` \| `boolean` \| readonly string \|
785
+ number \| boolean \| readonly (string \| number \| boolean \| readonly (string
786
+ \| number \| boolean \| readonly (string \| number \| boolean \| readonly
787
+ (string \| number \| boolean \| readonly (string \| number \| boolean \|
788
+ readonly (string \| ... 4 more ... \| null)\[\] \| \{ ...; \} \| null)\[\] \| \{
789
+ ...; \} \| null)\[\] \| \{ ...; \} \| ...[] \| \{ \[`key`: `string`\]: string \|
790
+ number \| boolean \| readonly (string \| number \| boolean \| readonly (string
791
+ \| number \| boolean \| readonly (string \| number \| boolean \| readonly
792
+ (string \| number \| boolean \| readonly (string \| number \| boolean \|
793
+ readonly (string \| ... 4 more ... \| null)\[\] \| \{ ...; \} \| null)\[\] \| \{
794
+ ...; \} \| null)\[\] \| \{ ...; \} \| ...; \} \| `null`; \}; `presentation?`: \|
795
+ \{ `type`: `"action"`; \} \| \{ `type`: `"custom"`; `data`: \{ \[`key`:
796
+ `string`\]: \| `string` \| `number` \| `boolean` \| readonly string \| number \|
797
+ boolean \| readonly (string \| number \| boolean \| readonly (string \| number
798
+ \| boolean \| readonly (string \| number \| boolean \| readonly (string \|
799
+ number \| boolean \| readonly (string \| number \| boolean \| readonly (string
800
+ \| ... 4 more ... \| null)\[\] \| \{ ...; \} \| null)\[\] \| \{ ...; \} \|
801
+ null)\[\] \| \{ ...; \} \| ...[] \| \{ \[`key`: `string`\]: string \| number \|
802
+ boolean \| readonly (string \| number \| boolean \| readonly (string \| number
803
+ \| boolean \| readonly (string \| number \| boolean \| readonly (string \|
804
+ number \| boolean \| readonly (string \| number \| boolean \| readonly (string
805
+ \| ... 4 more ... \| null)\[\] \| \{ ...; \} \| null)\[\] \| \{ ...; \} \|
806
+ null)\[\] \| \{ ...; \} \| ...; \} \| `null`; \}; \} \| \{ `type`: `"choice"`;
807
+ `options`: readonly `object`[]; \} \| \{ `type`: `"form"`; `submitLabel?`:
808
+ `string`; \} \| \{ `type`: `"confirmation"`; `message`: `string`;
809
+ `confirmLabel?`: `string`; `cancelLabel?`: `string`; \}; \}; `availability?`: ()
810
+ => `WhistleAvailability`; `handler`: (`input`) => `unknown`; \}\>[]
811
+
812
+ ---
813
+
814
+ ### contributeAccountCommands()
815
+
816
+ ```ts
817
+ function contributeAccountCommands(
818
+ runtime,
819
+ owner,
820
+ options,
821
+ ): WhistleContributionLease;
822
+ ```
823
+
824
+ Contribute the account commands as one lease.
825
+
826
+ #### Parameters
827
+
828
+ | Parameter | Type |
829
+ | --------- | ------------------------------------------------- |
830
+ | `runtime` | `Pick`\<`WhistleRuntime`, `"contribute"`\> |
831
+ | `owner` | [`AccountOwner`](#accountowner) |
832
+ | `options` | [`AccountCommandOptions`](#accountcommandoptions) |
833
+
834
+ #### Returns
835
+
836
+ `WhistleContributionLease`
837
+
838
+ ---
839
+
840
+ ### useClientActions()
841
+
842
+ ```ts
843
+ function useClientActions(commands): object;
844
+ ```
845
+
846
+ Ordinary advertised actions over the current admitted rows and observation.
847
+
848
+ #### Parameters
849
+
850
+ | Parameter | Type |
851
+ | ---------- | --------------------------------------------------- |
852
+ | `commands` | [`ParakeetCommandRuntime`](#parakeetcommandruntime) |
853
+
854
+ #### Returns
855
+
856
+ | Name | Type | Description |
857
+ | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- |
858
+ | `state` | `ReadonlyMap`\<\{ `id`: `string`; `label`: `string`; `input?`: \{ \[`key`: `string`\]: `Json`; \}; \}, `Readonly`\<\{ `pending`: `boolean`; `error?`: `string`; \}\>\> | Current Session-owned state of admitted action intents. |
859
+ | `enabled` | `boolean` | Observation is live and this Session's action owner is attached. |
860
+ | `execute()` | (`entryId`, `action`, `waiting`) => `Promise`\<`void`\> | Execute an admitted intent through its owning advertised command. |
861
+
862
+ ---
863
+
864
+ ### advertisedCommands()
865
+
866
+ ```ts
867
+ function advertisedCommands(runtime, session, onInspect?): AdvertisedCommands;
868
+ ```
869
+
870
+ Turn each running extension's advertised `whistle.catalog/v1` catalog into
871
+ Whistle commands that call that extension's own door. The client names no
872
+ command: a new extension's catalog appears as new commands.
873
+
874
+ #### Parameters
875
+
876
+ | Parameter | Type |
877
+ | ------------ | ---------------------------------------------------------------------- |
878
+ | `runtime` | `Pick`\<`WhistleRuntime`, `"contribute"`\> |
879
+ | `session` | `Pick`\<[`ParakeetSession`](index.md#parakeetsession), `"extension"`\> |
880
+ | `onInspect?` | (`entryId`, `commandId`) => `void` |
881
+
882
+ #### Returns
883
+
884
+ [`AdvertisedCommands`](#advertisedcommands)
885
+
886
+ ---
887
+
888
+ ### parakeetBuiltinCommands()
889
+
890
+ ```ts
891
+ function parakeetBuiltinCommands(runtime, options): readonly Readonly<{
892
+ id: string;
893
+ title: string;
894
+ category: string;
895
+ description?: string;
896
+ projections?: {
897
+ bindings?: {
898
+ order?: number;
899
+ values: readonly string[];
900
+ };
901
+ agent?: {
902
+ keybind?: string;
903
+ order?: number;
904
+ };
905
+ help?: {
906
+ order?: number;
907
+ };
908
+ menu?: {
909
+ order?: number;
910
+ };
911
+ palette?: {
912
+ order?: number;
913
+ };
914
+ slash?: {
915
+ aliases: readonly string[];
916
+ order?: number;
917
+ arguments?: {
918
+ hint: string;
919
+ words?: readonly ...[];
920
+ text?: {
921
+ field: ...;
922
+ arguments: ...;
923
+ requestIdField?: ...;
924
+ };
925
+ };
926
+ };
927
+ };
928
+ action?: {
929
+ inputSchema?: {
930
+ [key: string]:
931
+ | string
932
+ | number
933
+ | boolean
934
+ | readonly string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | ... 4 more ... | null)[] | { ...; } | null)[] | { ...; } | null)[] | { ...; } | ...[]
935
+ | {
936
+ [key: string]: string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | ... 4 more ... | null)[] | { ...; } | null)[] | { ...; } | null)[] | { ...; } | ...;
937
+ }
938
+ | null;
939
+ };
940
+ outputSchema?: {
941
+ [key: string]:
942
+ | string
943
+ | number
944
+ | boolean
945
+ | readonly string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | ... 4 more ... | null)[] | { ...; } | null)[] | { ...; } | null)[] | { ...; } | ...[]
946
+ | {
947
+ [key: string]: string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | ... 4 more ... | null)[] | { ...; } | null)[] | { ...; } | null)[] | { ...; } | ...;
948
+ }
949
+ | null;
950
+ };
951
+ presentation?: | {
952
+ type: "action";
953
+ }
954
+ | {
955
+ type: "custom";
956
+ data: {
957
+ [key: string]:
958
+ | string
959
+ | number
960
+ | boolean
961
+ | readonly string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | ... 4 more ... | null)[] | { ...; } | null)[] | { ...; } | null)[] | { ...; } | ...[]
962
+ | {
963
+ [key: string]: string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | ... 4 more ... | null)[] | { ...; } | null)[] | { ...; } | null)[] | { ...; } | ...;
964
+ }
965
+ | null;
966
+ };
967
+ }
968
+ | {
969
+ type: "choice";
970
+ options: readonly object[];
971
+ }
972
+ | {
973
+ type: "form";
974
+ submitLabel?: string;
975
+ }
976
+ | {
977
+ type: "confirmation";
978
+ message: string;
979
+ confirmLabel?: string;
980
+ cancelLabel?: string;
981
+ };
982
+ };
983
+ availability?: () => WhistleAvailability;
984
+ handler: (input) => unknown;
985
+ }>[];
986
+ ```
987
+
988
+ `/help` lists the live commands (built-in and advertised) and runs the one
989
+ chosen; `/keys` does the same for key bindings; `/clear` empties the composer.
990
+
991
+ #### Parameters
992
+
993
+ | Parameter | Type |
994
+ | --------- | ------------------------------------------------------- |
995
+ | `runtime` | `Pick`\<`WhistleRuntime`, `"snapshot"` \| `"execute"`\> |
996
+ | `options` | [`ParakeetBuiltinOptions`](#parakeetbuiltinoptions) |
997
+
998
+ #### Returns
999
+
1000
+ readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`;
1001
+ `description?`: `string`; `projections?`: \{ `bindings?`: \{ `order?`: `number`;
1002
+ `values`: readonly `string`[]; \}; `agent?`: \{ `keybind?`: `string`; `order?`:
1003
+ `number`; \}; `help?`: \{ `order?`: `number`; \}; `menu?`: \{ `order?`:
1004
+ `number`; \}; `palette?`: \{ `order?`: `number`; \}; `slash?`: \{ `aliases`:
1005
+ readonly `string`[]; `order?`: `number`; `arguments?`: \{ `hint`: `string`;
1006
+ `words?`: readonly ...[]; `text?`: \{ `field`: ...; `arguments`: ...;
1007
+ `requestIdField?`: ...; \}; \}; \}; \}; `action?`: \{ `inputSchema?`: \{
1008
+ \[`key`: `string`\]: \| `string` \| `number` \| `boolean` \| readonly string \|
1009
+ number \| boolean \| readonly (string \| number \| boolean \| readonly (string
1010
+ \| number \| boolean \| readonly (string \| number \| boolean \| readonly
1011
+ (string \| number \| boolean \| readonly (string \| number \| boolean \|
1012
+ readonly (string \| ... 4 more ... \| null)\[\] \| \{ ...; \} \| null)\[\] \| \{
1013
+ ...; \} \| null)\[\] \| \{ ...; \} \| ...[] \| \{ \[`key`: `string`\]: string \|
1014
+ number \| boolean \| readonly (string \| number \| boolean \| readonly (string
1015
+ \| number \| boolean \| readonly (string \| number \| boolean \| readonly
1016
+ (string \| number \| boolean \| readonly (string \| number \| boolean \|
1017
+ readonly (string \| ... 4 more ... \| null)\[\] \| \{ ...; \} \| null)\[\] \| \{
1018
+ ...; \} \| null)\[\] \| \{ ...; \} \| ...; \} \| `null`; \}; `outputSchema?`: \{
1019
+ \[`key`: `string`\]: \| `string` \| `number` \| `boolean` \| readonly string \|
1020
+ number \| boolean \| readonly (string \| number \| boolean \| readonly (string
1021
+ \| number \| boolean \| readonly (string \| number \| boolean \| readonly
1022
+ (string \| number \| boolean \| readonly (string \| number \| boolean \|
1023
+ readonly (string \| ... 4 more ... \| null)\[\] \| \{ ...; \} \| null)\[\] \| \{
1024
+ ...; \} \| null)\[\] \| \{ ...; \} \| ...[] \| \{ \[`key`: `string`\]: string \|
1025
+ number \| boolean \| readonly (string \| number \| boolean \| readonly (string
1026
+ \| number \| boolean \| readonly (string \| number \| boolean \| readonly
1027
+ (string \| number \| boolean \| readonly (string \| number \| boolean \|
1028
+ readonly (string \| ... 4 more ... \| null)\[\] \| \{ ...; \} \| null)\[\] \| \{
1029
+ ...; \} \| null)\[\] \| \{ ...; \} \| ...; \} \| `null`; \}; `presentation?`: \|
1030
+ \{ `type`: `"action"`; \} \| \{ `type`: `"custom"`; `data`: \{ \[`key`:
1031
+ `string`\]: \| `string` \| `number` \| `boolean` \| readonly string \| number \|
1032
+ boolean \| readonly (string \| number \| boolean \| readonly (string \| number
1033
+ \| boolean \| readonly (string \| number \| boolean \| readonly (string \|
1034
+ number \| boolean \| readonly (string \| number \| boolean \| readonly (string
1035
+ \| ... 4 more ... \| null)\[\] \| \{ ...; \} \| null)\[\] \| \{ ...; \} \|
1036
+ null)\[\] \| \{ ...; \} \| ...[] \| \{ \[`key`: `string`\]: string \| number \|
1037
+ boolean \| readonly (string \| number \| boolean \| readonly (string \| number
1038
+ \| boolean \| readonly (string \| number \| boolean \| readonly (string \|
1039
+ number \| boolean \| readonly (string \| number \| boolean \| readonly (string
1040
+ \| ... 4 more ... \| null)\[\] \| \{ ...; \} \| null)\[\] \| \{ ...; \} \|
1041
+ null)\[\] \| \{ ...; \} \| ...; \} \| `null`; \}; \} \| \{ `type`: `"choice"`;
1042
+ `options`: readonly `object`[]; \} \| \{ `type`: `"form"`; `submitLabel?`:
1043
+ `string`; \} \| \{ `type`: `"confirmation"`; `message`: `string`;
1044
+ `confirmLabel?`: `string`; `cancelLabel?`: `string`; \}; \}; `availability?`: ()
1045
+ => `WhistleAvailability`; `handler`: (`input`) => `unknown`; \}\>[]
1046
+
1047
+ ---
1048
+
1049
+ ### composerHints()
1050
+
1051
+ ```ts
1052
+ function composerHints(context): readonly Readonly<{
1053
+ keys: string;
1054
+ label: string;
1055
+ priority: number;
1056
+ }>[];
1057
+ ```
1058
+
1059
+ Hints for the current composer state, in display order.
1060
+
1061
+ #### Parameters
1062
+
1063
+ | Parameter | Type |
1064
+ | --------- | --------------------------------------------- |
1065
+ | `context` | [`ComposerHintContext`](#composerhintcontext) |
1066
+
1067
+ #### Returns
1068
+
1069
+ readonly `Readonly`\<\{ `keys`: `string`; `label`: `string`; `priority`:
1070
+ `number`; \}\>[]
1071
+
1072
+ ---
1073
+
1074
+ ### formatHints()
1075
+
1076
+ ```ts
1077
+ function formatHints(hints): string;
1078
+ ```
1079
+
1080
+ One line of hints.
1081
+
1082
+ #### Parameters
1083
+
1084
+ | Parameter | Type |
1085
+ | --------- | ----------------------------------------------------------------------------------------- |
1086
+ | `hints` | readonly `Readonly`\<\{ `keys`: `string`; `label`: `string`; `priority`: `number`; \}\>[] |
1087
+
1088
+ #### Returns
1089
+
1090
+ `string`
1091
+
1092
+ ---
1093
+
1094
+ ### fitHints()
1095
+
1096
+ ```ts
1097
+ function fitHints(
1098
+ hints,
1099
+ width,
1100
+ ): readonly Readonly<{
1101
+ keys: string;
1102
+ label: string;
1103
+ priority: number;
1104
+ }>[];
1105
+ ```
1106
+
1107
+ Keep the most important hints that fit `width` characters, in order.
1108
+
1109
+ #### Parameters
1110
+
1111
+ | Parameter | Type |
1112
+ | --------- | ----------------------------------------------------------------------------------------- |
1113
+ | `hints` | readonly `Readonly`\<\{ `keys`: `string`; `label`: `string`; `priority`: `number`; \}\>[] |
1114
+ | `width` | `number` |
1115
+
1116
+ #### Returns
1117
+
1118
+ readonly `Readonly`\<\{ `keys`: `string`; `label`: `string`; `priority`:
1119
+ `number`; \}\>[]
1120
+
1121
+ ---
1122
+
1123
+ ### createParakeetInteractions()
1124
+
1125
+ ```ts
1126
+ function createParakeetInteractions(): ParakeetInteractions;
1127
+ ```
1128
+
1129
+ Own how commands talk to the human. An interaction opens only when it asks a
1130
+ question, hands off to a URL or shows progress; a command that just reports a
1131
+ result leaves a one-line notice instead of a dialog.
1132
+
1133
+ #### Returns
1134
+
1135
+ [`ParakeetInteractions`](#parakeetinteractions)
1136
+
1137
+ ---
1138
+
1139
+ ### isCancelledOutcome()
1140
+
1141
+ ```ts
1142
+ function isCancelledOutcome(outcome): boolean;
1143
+ ```
1144
+
1145
+ Whether a handled command declined its input (for example a refused
1146
+ replacement).
1147
+
1148
+ #### Parameters
1149
+
1150
+ | Parameter | Type |
1151
+ | --------- | ------------------------- |
1152
+ | `outcome` | `WhistleExecutionOutcome` |
1153
+
1154
+ #### Returns
1155
+
1156
+ `boolean`
1157
+
1158
+ ---
1159
+
1160
+ ### runSlashDraft()
1161
+
1162
+ ```ts
1163
+ function runSlashDraft(
1164
+ draft,
1165
+ commands,
1166
+ send,
1167
+ origin,
1168
+ ): Promise<WhistleExecutionOutcome | undefined>;
1169
+ ```
1170
+
1171
+ Run one composer draft: a prompt goes to `send`, a `/command` runs through
1172
+ Whistle. A grammar that asks for a request id keeps the same id across retries
1173
+ of the same draft until the command is handled.
1174
+
1175
+ #### Parameters
1176
+
1177
+ | Parameter | Type |
1178
+ | ---------- | ------------------------------- |
1179
+ | `draft` | `string` |
1180
+ | `commands` | [`SlashRuntime`](#slashruntime) |
1181
+ | `send` | () => `void` |
1182
+ | `origin` | `WhistleExecutionOrigin` |
1183
+
1184
+ #### Returns
1185
+
1186
+ `Promise`\<`WhistleExecutionOutcome` \| `undefined`\>
1187
+
1188
+ ---
1189
+
1190
+ ### useSlashCommands()
1191
+
1192
+ ```ts
1193
+ function useSlashCommands(options): SlashCommandController;
1194
+ ```
1195
+
1196
+ The one slash-command controller behind every Parakeet composer. It owns the
1197
+ registry, completion, hints, execution and conversations; renderers only draw
1198
+ its state and forward keys.
1199
+
1200
+ #### Parameters
1201
+
1202
+ | Parameter | Type |
1203
+ | --------- | --------------------------------------------- |
1204
+ | `options` | [`SlashCommandOptions`](#slashcommandoptions) |
1205
+
1206
+ #### Returns
1207
+
1208
+ [`SlashCommandController`](#slashcommandcontroller)
1209
+
1210
+ ---
1211
+
1212
+ ### useParakeetSession()
1213
+
1214
+ ```ts
1215
+ function useParakeetSession(): ParakeetSession;
1216
+ ```
1217
+
1218
+ The Session this conversation observes.
1219
+
1220
+ #### Returns
1221
+
1222
+ [`ParakeetSession`](index.md#parakeetsession)
1223
+
1224
+ ---
1225
+
1226
+ ### useExtensionSlots()
1227
+
1228
+ ```ts
1229
+ function useExtensionSlots(): SessionExtensionSlots;
1230
+ ```
1231
+
1232
+ Read the Session's extension slots, including advertised command catalogs.
1233
+
1234
+ #### Returns
1235
+
1236
+ `SessionExtensionSlots`
1237
+
1238
+ ---
1239
+
1240
+ ### useClientContributions()
1241
+
1242
+ ```ts
1243
+ function useClientContributions(): readonly Readonly<{
1244
+ entryId: string;
1245
+ value: {
1246
+ chips: readonly object[];
1247
+ panel: readonly object[];
1248
+ timeline: {
1249
+ cells: readonly object[];
1250
+ omitted: number;
1251
+ };
1252
+ waiting: {
1253
+ summary: string;
1254
+ cancel: {
1255
+ id: string;
1256
+ label: string;
1257
+ input?: {
1258
+ [key: string]: Json;
1259
+ };
1260
+ };
1261
+ } | null;
1262
+ };
1263
+ }>[];
1264
+ ```
1265
+
1266
+ Presentation admitted once from the selected Session's already observed slots.
1267
+
1268
+ #### Returns
1269
+
1270
+ readonly `Readonly`\<\{ `entryId`: `string`; `value`: \{ `chips`: readonly
1271
+ `object`[]; `panel`: readonly `object`[]; `timeline`: \{ `cells`: readonly
1272
+ `object`[]; `omitted`: `number`; \}; `waiting`: \| \{ `summary`: `string`;
1273
+ `cancel`: \{ `id`: `string`; `label`: `string`; `input?`: \{ \[`key`:
1274
+ `string`\]: `Json`; \}; \}; \} \| `null`; \}; \}\>[]
1275
+
1276
+ ---
1277
+
1278
+ ### useParakeetInteractions()
1279
+
1280
+ ```ts
1281
+ function useParakeetInteractions(): ParakeetInteractions;
1282
+ ```
1283
+
1284
+ The selected Session's ordinary command interaction owner.
1285
+
1286
+ #### Returns
1287
+
1288
+ [`ParakeetInteractions`](#parakeetinteractions)
1289
+
1290
+ ---
1291
+
1292
+ ### assistantMessageVisible()
1293
+
1294
+ ```ts
1295
+ function assistantMessageVisible(item): boolean;
1296
+ ```
1297
+
1298
+ One rule for whether an assistant row has content either renderer shows.
1299
+
1300
+ #### Parameters
1301
+
1302
+ | Parameter | Type |
1303
+ | --------- | ----------------------------------------------------------------------- |
1304
+ | `item` | [`ParakeetAssistantMessageItem`](index.md#parakeetassistantmessageitem) |
1305
+
1306
+ #### Returns
1307
+
1308
+ `boolean`
1309
+
1310
+ ---
1311
+
1312
+ ### placeClientTimeline()
1313
+
1314
+ ```ts
1315
+ function placeClientTimeline(entries, anchors): object;
1316
+ ```
1317
+
1318
+ Page visibility follows real durable command anchors, never event time.
1319
+
1320
+ #### Parameters
1321
+
1322
+ | Parameter | Type |
1323
+ | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1324
+ | `entries` | readonly `Readonly`\<\{ `entryId`: `string`; `value`: \{ `chips`: readonly `object`[]; `panel`: readonly `object`[]; `timeline`: \{ `cells`: readonly `object`[]; `omitted`: `number`; \}; `waiting`: \| \{ `summary`: `string`; `cancel`: \{ `id`: `string`; `label`: `string`; `input?`: \{ \[`key`: `string`\]: `Json`; \}; \}; \} \| `null`; \}; \}\>[] |
1325
+ | `anchors` | `ReadonlyMap`\<`string`, `string`\> |
1326
+
1327
+ #### Returns
1328
+
1329
+ | Name | Type | Description |
1330
+ | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------- |
1331
+ | `after` | `Map`\<`string`, `Readonly`\<\{ `entryId`: `string`; `cell`: \{ `id`: `string`; `sequence`: `number`; `at`: `number`; `commandId`: `string` \| `null`; `rows`: readonly `object`[]; \}; \}\>[]\> | Loaded durable row IDs mapped to their following committed events. |
1332
+ | `unanchored` | `Readonly`\<\{ `entryId`: `string`; `cell`: \{ `id`: `string`; `sequence`: `number`; `at`: `number`; `commandId`: `string` \| `null`; `rows`: readonly `object`[]; \}; \}\>[] | Null-anchor events for the separate Extension changes section. |
1333
+ | `omitted` | `object`[] | Factual producer retention counts, independent of loaded message pages. |
1334
+
1335
+ ---
1336
+
1337
+ ### mergeTerminals()
1338
+
1339
+ ```ts
1340
+ function mergeTerminals(
1341
+ current,
1342
+ incoming,
1343
+ ): readonly Readonly<{
1344
+ commandId: string;
1345
+ outcome: "completed" | "failed" | "cancelled" | "interrupted";
1346
+ sequence: number;
1347
+ diagnostic: string | null;
1348
+ meta?: Json;
1349
+ }>[];
1350
+ ```
1351
+
1352
+ Preserve the first terminal for each command, in observed order.
1353
+
1354
+ #### Parameters
1355
+
1356
+ | Parameter | Type |
1357
+ | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1358
+ | `current` | readonly `Readonly`\<\{ `commandId`: `string`; `outcome`: `"completed"` \| `"failed"` \| `"cancelled"` \| `"interrupted"`; `sequence`: `number`; `diagnostic`: `string` \| `null`; `meta?`: `Json`; \}\>[] |
1359
+ | `incoming` | readonly `Readonly`\<\{ `commandId`: `string`; `outcome`: `"completed"` \| `"failed"` \| `"cancelled"` \| `"interrupted"`; `sequence`: `number`; `diagnostic`: `string` \| `null`; `meta?`: `Json`; \}\>[] |
1360
+
1361
+ #### Returns
1362
+
1363
+ readonly `Readonly`\<\{ `commandId`: `string`; `outcome`: `"completed"` \|
1364
+ `"failed"` \| `"cancelled"` \| `"interrupted"`; `sequence`: `number`;
1365
+ `diagnostic`: `string` \| `null`; `meta?`: `Json`; \}\>[]
1366
+
1367
+ ---
1368
+
1369
+ ### sessionQueryOptions()
1370
+
1371
+ ```ts
1372
+ function sessionQueryOptions(session): OmitKeyof<UseQueryOptions<Readonly<{
1373
+ observation: "live" | "connecting";
1374
+ snapshot: | Readonly<{
1375
+ sessionId: string;
1376
+ cursor: string | null;
1377
+ hasMore: boolean;
1378
+ oldestCursor?: string | null;
1379
+ messages: readonly Readonly<{
1380
+ meta?: ...;
1381
+ origin?: ...;
1382
+ id: ...;
1383
+ sequence: ...;
1384
+ commandId: ...;
1385
+ value: ...;
1386
+ }>[];
1387
+ terminals: readonly Readonly<{
1388
+ commandId: ...;
1389
+ outcome: ...;
1390
+ sequence: ...;
1391
+ diagnostic: ...;
1392
+ meta?: ...;
1393
+ }>[];
1394
+ compactions?: readonly Readonly<...>[];
1395
+ compactionNotices?: readonly Readonly<...>[];
1396
+ sandboxFailures?: readonly object[];
1397
+ pending: SessionPendingPrompts;
1398
+ activity: SessionActivity;
1399
+ progress: | Readonly<{
1400
+ messageId: ...;
1401
+ revision: ...;
1402
+ text: ...;
1403
+ thinking: ...;
1404
+ textTruncated: ...;
1405
+ thinkingTruncated: ...;
1406
+ }>
1407
+ | null;
1408
+ extensions: SessionExtensionSlots;
1409
+ attention: readonly object[];
1410
+ context?: Readonly<{
1411
+ tokens: ...;
1412
+ window: ...;
1413
+ }>;
1414
+ }>
1415
+ | undefined;
1416
+ latestPrompt: readonly [string, string] | undefined;
1417
+ }>, Error, Readonly<{
1418
+ observation: "live" | "connecting";
1419
+ snapshot: | Readonly<{
1420
+ sessionId: string;
1421
+ cursor: string | null;
1422
+ hasMore: boolean;
1423
+ oldestCursor?: string | null;
1424
+ messages: readonly Readonly<{
1425
+ meta?: ...;
1426
+ origin?: ...;
1427
+ id: ...;
1428
+ sequence: ...;
1429
+ commandId: ...;
1430
+ value: ...;
1431
+ }>[];
1432
+ terminals: readonly Readonly<{
1433
+ commandId: ...;
1434
+ outcome: ...;
1435
+ sequence: ...;
1436
+ diagnostic: ...;
1437
+ meta?: ...;
1438
+ }>[];
1439
+ compactions?: readonly Readonly<...>[];
1440
+ compactionNotices?: readonly Readonly<...>[];
1441
+ sandboxFailures?: readonly object[];
1442
+ pending: SessionPendingPrompts;
1443
+ activity: SessionActivity;
1444
+ progress: | Readonly<{
1445
+ messageId: ...;
1446
+ revision: ...;
1447
+ text: ...;
1448
+ thinking: ...;
1449
+ textTruncated: ...;
1450
+ thinkingTruncated: ...;
1451
+ }>
1452
+ | null;
1453
+ extensions: SessionExtensionSlots;
1454
+ attention: readonly object[];
1455
+ context?: Readonly<{
1456
+ tokens: ...;
1457
+ window: ...;
1458
+ }>;
1459
+ }>
1460
+ | undefined;
1461
+ latestPrompt: readonly [string, string] | undefined;
1462
+ }>, readonly ["shiitake-session", string]>, "queryFn"> & object & QueryKeyWithDataTag<readonly ["shiitake-session", string], Readonly<{
1463
+ observation: "live" | "connecting";
1464
+ snapshot: | Readonly<{
1465
+ sessionId: string;
1466
+ cursor: string | null;
1467
+ hasMore: boolean;
1468
+ oldestCursor?: string | null;
1469
+ messages: readonly Readonly<{
1470
+ meta?: ... | ...;
1471
+ origin?: ... | ...;
1472
+ id: string;
1473
+ sequence: number;
1474
+ commandId: ... | ...;
1475
+ value: Message;
1476
+ }>[];
1477
+ terminals: readonly Readonly<{
1478
+ commandId: string;
1479
+ outcome: ... | ... | ... | ...;
1480
+ sequence: number;
1481
+ diagnostic: ... | ...;
1482
+ meta?: ... | ...;
1483
+ }>[];
1484
+ compactions?: readonly Readonly<{
1485
+ id: ...;
1486
+ sequence: ...;
1487
+ at: ...;
1488
+ tokensBefore: ...;
1489
+ tokensAfter: ...;
1490
+ trigger: ...;
1491
+ }>[];
1492
+ compactionNotices?: readonly Readonly<{
1493
+ id: ...;
1494
+ sequence: ...;
1495
+ at: ...;
1496
+ trigger: ...;
1497
+ result: ...;
1498
+ diagnostic: ...;
1499
+ }>[];
1500
+ sandboxFailures?: readonly object[];
1501
+ pending: SessionPendingPrompts;
1502
+ activity: SessionActivity;
1503
+ progress: | Readonly<{
1504
+ messageId: string;
1505
+ revision: number;
1506
+ text: string;
1507
+ thinking: string;
1508
+ textTruncated: boolean;
1509
+ thinkingTruncated: boolean;
1510
+ }>
1511
+ | null;
1512
+ extensions: SessionExtensionSlots;
1513
+ attention: readonly object[];
1514
+ context?: Readonly<{
1515
+ tokens: number;
1516
+ window: ... | ...;
1517
+ }>;
1518
+ }>
1519
+ | undefined;
1520
+ latestPrompt: readonly [string, string] | undefined;
1521
+ }>, Error>;
1522
+ ```
1523
+
1524
+ One shared TanStack observation keyed by Shiitake's logical Session address.
1525
+
1526
+ #### Parameters
1527
+
1528
+ | Parameter | Type |
1529
+ | --------- | --------------------------------------------- |
1530
+ | `session` | [`ParakeetSession`](index.md#parakeetsession) |
1531
+
1532
+ #### Returns
1533
+
1534
+ `OmitKeyof`\<`UseQueryOptions`\<`Readonly`\<\{ `observation`: `"live"` \|
1535
+ `"connecting"`; `snapshot`: \| `Readonly`\<\{ `sessionId`: `string`; `cursor`:
1536
+ `string` \| `null`; `hasMore`: `boolean`; `oldestCursor?`: `string` \| `null`;
1537
+ `messages`: readonly `Readonly`\<\{ `meta?`: ...; `origin?`: ...; `id`: ...;
1538
+ `sequence`: ...; `commandId`: ...; `value`: ...; \}\>[]; `terminals`: readonly
1539
+ `Readonly`\<\{ `commandId`: ...; `outcome`: ...; `sequence`: ...; `diagnostic`:
1540
+ ...; `meta?`: ...; \}\>[]; `compactions?`: readonly `Readonly`\<...\>[];
1541
+ `compactionNotices?`: readonly `Readonly`\<...\>[]; `sandboxFailures?`: readonly
1542
+ `object`[]; `pending`: `SessionPendingPrompts`; `activity`: `SessionActivity`;
1543
+ `progress`: \| `Readonly`\<\{ `messageId`: ...; `revision`: ...; `text`: ...;
1544
+ `thinking`: ...; `textTruncated`: ...; `thinkingTruncated`: ...; \}\> \| `null`;
1545
+ `extensions`: `SessionExtensionSlots`; `attention`: readonly `object`[];
1546
+ `context?`: `Readonly`\<\{ `tokens`: ...; `window`: ...; \}\>; \}\> \|
1547
+ `undefined`; `latestPrompt`: readonly \[`string`, `string`\] \| `undefined`;
1548
+ \}\>, `Error`, `Readonly`\<\{ `observation`: `"live"` \| `"connecting"`;
1549
+ `snapshot`: \| `Readonly`\<\{ `sessionId`: `string`; `cursor`: `string` \|
1550
+ `null`; `hasMore`: `boolean`; `oldestCursor?`: `string` \| `null`; `messages`:
1551
+ readonly `Readonly`\<\{ `meta?`: ...; `origin?`: ...; `id`: ...; `sequence`:
1552
+ ...; `commandId`: ...; `value`: ...; \}\>[]; `terminals`: readonly
1553
+ `Readonly`\<\{ `commandId`: ...; `outcome`: ...; `sequence`: ...; `diagnostic`:
1554
+ ...; `meta?`: ...; \}\>[]; `compactions?`: readonly `Readonly`\<...\>[];
1555
+ `compactionNotices?`: readonly `Readonly`\<...\>[]; `sandboxFailures?`: readonly
1556
+ `object`[]; `pending`: `SessionPendingPrompts`; `activity`: `SessionActivity`;
1557
+ `progress`: \| `Readonly`\<\{ `messageId`: ...; `revision`: ...; `text`: ...;
1558
+ `thinking`: ...; `textTruncated`: ...; `thinkingTruncated`: ...; \}\> \| `null`;
1559
+ `extensions`: `SessionExtensionSlots`; `attention`: readonly `object`[];
1560
+ `context?`: `Readonly`\<\{ `tokens`: ...; `window`: ...; \}\>; \}\> \|
1561
+ `undefined`; `latestPrompt`: readonly \[`string`, `string`\] \| `undefined`;
1562
+ \}\>, readonly \[`"shiitake-session"`, `string`\]\>, `"queryFn"`\> & `object` &
1563
+ `QueryKeyWithDataTag`\<readonly \[`"shiitake-session"`, `string`\],
1564
+ `Readonly`\<\{ `observation`: `"live"` \| `"connecting"`; `snapshot`: \|
1565
+ `Readonly`\<\{ `sessionId`: `string`; `cursor`: `string` \| `null`; `hasMore`:
1566
+ `boolean`; `oldestCursor?`: `string` \| `null`; `messages`: readonly
1567
+ `Readonly`\<\{ `meta?`: ... \| ...; `origin?`: ... \| ...; `id`: `string`;
1568
+ `sequence`: `number`; `commandId`: ... \| ...; `value`: `Message`; \}\>[];
1569
+ `terminals`: readonly `Readonly`\<\{ `commandId`: `string`; `outcome`: ... \|
1570
+ ... \| ... \| ...; `sequence`: `number`; `diagnostic`: ... \| ...; `meta?`: ...
1571
+ \| ...; \}\>[]; `compactions?`: readonly `Readonly`\<\{ `id`: ...; `sequence`:
1572
+ ...; `at`: ...; `tokensBefore`: ...; `tokensAfter`: ...; `trigger`: ...; \}\>[];
1573
+ `compactionNotices?`: readonly `Readonly`\<\{ `id`: ...; `sequence`: ...; `at`:
1574
+ ...; `trigger`: ...; `result`: ...; `diagnostic`: ...; \}\>[];
1575
+ `sandboxFailures?`: readonly `object`[]; `pending`: `SessionPendingPrompts`;
1576
+ `activity`: `SessionActivity`; `progress`: \| `Readonly`\<\{ `messageId`:
1577
+ `string`; `revision`: `number`; `text`: `string`; `thinking`: `string`;
1578
+ `textTruncated`: `boolean`; `thinkingTruncated`: `boolean`; \}\> \| `null`;
1579
+ `extensions`: `SessionExtensionSlots`; `attention`: readonly `object`[];
1580
+ `context?`: `Readonly`\<\{ `tokens`: `number`; `window`: ... \| ...; \}\>; \}\>
1581
+ \| `undefined`; `latestPrompt`: readonly \[`string`, `string`\] \| `undefined`;
1582
+ \}\>, `Error`\>
1583
+
1584
+ ---
1585
+
1586
+ ### seedSessionQuery()
1587
+
1588
+ ```ts
1589
+ function seedSessionQuery(queryClient, session, snapshot): void;
1590
+ ```
1591
+
1592
+ Seed the shared observation with a bounded read before its watch mounts.
1593
+
1594
+ #### Parameters
1595
+
1596
+ | Parameter | Type |
1597
+ | ------------- | --------------------------------------------- |
1598
+ | `queryClient` | `QueryClient` |
1599
+ | `session` | [`ParakeetSession`](index.md#parakeetsession) |
1600
+ | `snapshot` | `SessionSnapshot` |
1601
+
1602
+ #### Returns
1603
+
1604
+ `void`
1605
+
1606
+ ---
1607
+
1608
+ ### subscribeSessionActivity()
1609
+
1610
+ ```ts
1611
+ function subscribeSessionActivity(queryClient, session, listener): () => void;
1612
+ ```
1613
+
1614
+ Borrow activity from the existing cache without starting another watch.
1615
+
1616
+ #### Parameters
1617
+
1618
+ | Parameter | Type |
1619
+ | ------------- | --------------------------------------------- |
1620
+ | `queryClient` | `QueryClient` |
1621
+ | `session` | [`ParakeetSession`](index.md#parakeetsession) |
1622
+ | `listener` | (`activity`) => `void` |
1623
+
1624
+ #### Returns
1625
+
1626
+ () => `void`
1627
+
1628
+ ---
1629
+
1630
+ ### sessionViewState()
1631
+
1632
+ ```ts
1633
+ function sessionViewState(facts): ParakeetOwnerViewState;
1634
+ ```
1635
+
1636
+ Decide a Session's view state from its activity, terminals and progress.
1637
+
1638
+ #### Parameters
1639
+
1640
+ | Parameter | Type |
1641
+ | --------- | --------------------------------------- |
1642
+ | `facts` | [`SessionViewFacts`](#sessionviewfacts) |
1643
+
1644
+ #### Returns
1645
+
1646
+ [`ParakeetOwnerViewState`](#parakeetownerviewstate)
1647
+
1648
+ ---
1649
+
1650
+ ### queuedSessionLabel()
1651
+
1652
+ ```ts
1653
+ function queuedSessionLabel(state): string;
1654
+ ```
1655
+
1656
+ Explain a queued Session using its owner's executor fact.
1657
+
1658
+ #### Parameters
1659
+
1660
+ | Parameter | Type |
1661
+ | --------- | ------------------------------------------------------------------------------------------- |
1662
+ | `state` | `Extract`\<[`ParakeetOwnerViewState`](#parakeetownerviewstate), \{ `kind`: `"queued"`; \}\> |
1663
+
1664
+ #### Returns
1665
+
1666
+ `string`
1667
+
1668
+ ---
1669
+
1670
+ ### sessionActivityStatus()
1671
+
1672
+ ```ts
1673
+ function sessionActivityStatus(view): SessionActivityStatus;
1674
+ ```
1675
+
1676
+ Coarse activity for a view state: what the composer gates on.
1677
+
1678
+ #### Parameters
1679
+
1680
+ | Parameter | Type |
1681
+ | --------- | --------------------------------------------------- |
1682
+ | `view` | [`ParakeetOwnerViewState`](#parakeetownerviewstate) |
1683
+
1684
+ #### Returns
1685
+
1686
+ [`SessionActivityStatus`](#sessionactivitystatus)
1687
+
1688
+ ---
1689
+
1690
+ ### toolStatusTone()
1691
+
1692
+ ```ts
1693
+ function toolStatusTone(status): "error" | "success" | "info" | "neutral";
1694
+ ```
1695
+
1696
+ Shared tool status meaning, used by the browser and native presentations.
1697
+
1698
+ #### Parameters
1699
+
1700
+ | Parameter | Type |
1701
+ | --------- | -------------------------------------------------------- |
1702
+ | `status` | `"error"` \| `"unknown"` \| `"completed"` \| `"running"` |
1703
+
1704
+ #### Returns
1705
+
1706
+ `"error"` \| `"success"` \| `"info"` \| `"neutral"`
1707
+
1708
+ ---
1709
+
1710
+ ### toolCallView()
1711
+
1712
+ ```ts
1713
+ function toolCallView(item): ParakeetToolCallView;
1714
+ ```
1715
+
1716
+ Build the renderer-neutral view of one call.
1717
+
1718
+ #### Parameters
1719
+
1720
+ | Parameter | Type |
1721
+ | --------- | ----------------------------------------------- |
1722
+ | `item` | [`ParakeetToolItem`](index.md#parakeettoolitem) |
1723
+
1724
+ #### Returns
1725
+
1726
+ [`ParakeetToolCallView`](index.md#parakeettoolcallview)
1727
+
1728
+ ---
1729
+
1730
+ ### sessionModelCommandDefinitions()
1731
+
1732
+ ```ts
1733
+ function sessionModelCommandDefinitions(session, options): readonly Readonly<{
1734
+ id: string;
1735
+ title: string;
1736
+ category: string;
1737
+ description?: string;
1738
+ projections?: {
1739
+ bindings?: {
1740
+ order?: number;
1741
+ values: readonly string[];
1742
+ };
1743
+ agent?: {
1744
+ keybind?: string;
1745
+ order?: number;
1746
+ };
1747
+ help?: {
1748
+ order?: number;
1749
+ };
1750
+ menu?: {
1751
+ order?: number;
1752
+ };
1753
+ palette?: {
1754
+ order?: number;
1755
+ };
1756
+ slash?: {
1757
+ aliases: readonly string[];
1758
+ order?: number;
1759
+ arguments?: {
1760
+ hint: string;
1761
+ words?: readonly ...[];
1762
+ text?: {
1763
+ field: ...;
1764
+ arguments: ...;
1765
+ requestIdField?: ...;
1766
+ };
1767
+ };
1768
+ };
1769
+ };
1770
+ action?: {
1771
+ inputSchema?: {
1772
+ [key: string]:
1773
+ | string
1774
+ | number
1775
+ | boolean
1776
+ | readonly string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | ... 4 more ... | null)[] | { ...; } | null)[] | { ...; } | null)[] | { ...; } | ...[]
1777
+ | {
1778
+ [key: string]: string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | ... 4 more ... | null)[] | { ...; } | null)[] | { ...; } | null)[] | { ...; } | ...;
1779
+ }
1780
+ | null;
1781
+ };
1782
+ outputSchema?: {
1783
+ [key: string]:
1784
+ | string
1785
+ | number
1786
+ | boolean
1787
+ | readonly string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | ... 4 more ... | null)[] | { ...; } | null)[] | { ...; } | null)[] | { ...; } | ...[]
1788
+ | {
1789
+ [key: string]: string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | ... 4 more ... | null)[] | { ...; } | null)[] | { ...; } | null)[] | { ...; } | ...;
1790
+ }
1791
+ | null;
1792
+ };
1793
+ presentation?: | {
1794
+ type: "action";
1795
+ }
1796
+ | {
1797
+ type: "custom";
1798
+ data: {
1799
+ [key: string]:
1800
+ | string
1801
+ | number
1802
+ | boolean
1803
+ | readonly string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | ... 4 more ... | null)[] | { ...; } | null)[] | { ...; } | null)[] | { ...; } | ...[]
1804
+ | {
1805
+ [key: string]: string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | ... 4 more ... | null)[] | { ...; } | null)[] | { ...; } | null)[] | { ...; } | ...;
1806
+ }
1807
+ | null;
1808
+ };
1809
+ }
1810
+ | {
1811
+ type: "choice";
1812
+ options: readonly object[];
1813
+ }
1814
+ | {
1815
+ type: "form";
1816
+ submitLabel?: string;
1817
+ }
1818
+ | {
1819
+ type: "confirmation";
1820
+ message: string;
1821
+ confirmLabel?: string;
1822
+ cancelLabel?: string;
1823
+ };
1824
+ };
1825
+ availability?: () => WhistleAvailability;
1826
+ handler: (input) => unknown;
1827
+ }>[];
1828
+ ```
1829
+
1830
+ Describe and invoke the ordinary model-preference owner from any client.
1831
+
1832
+ #### Parameters
1833
+
1834
+ | Parameter | Type |
1835
+ | --------- | ----------------------------------------------------------- |
1836
+ | `session` | `ModelPreferenceOwner` |
1837
+ | `options` | [`SessionModelCommandOptions`](#sessionmodelcommandoptions) |
1838
+
1839
+ #### Returns
1840
+
1841
+ readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`;
1842
+ `description?`: `string`; `projections?`: \{ `bindings?`: \{ `order?`: `number`;
1843
+ `values`: readonly `string`[]; \}; `agent?`: \{ `keybind?`: `string`; `order?`:
1844
+ `number`; \}; `help?`: \{ `order?`: `number`; \}; `menu?`: \{ `order?`:
1845
+ `number`; \}; `palette?`: \{ `order?`: `number`; \}; `slash?`: \{ `aliases`:
1846
+ readonly `string`[]; `order?`: `number`; `arguments?`: \{ `hint`: `string`;
1847
+ `words?`: readonly ...[]; `text?`: \{ `field`: ...; `arguments`: ...;
1848
+ `requestIdField?`: ...; \}; \}; \}; \}; `action?`: \{ `inputSchema?`: \{
1849
+ \[`key`: `string`\]: \| `string` \| `number` \| `boolean` \| readonly string \|
1850
+ number \| boolean \| readonly (string \| number \| boolean \| readonly (string
1851
+ \| number \| boolean \| readonly (string \| number \| boolean \| readonly
1852
+ (string \| number \| boolean \| readonly (string \| number \| boolean \|
1853
+ readonly (string \| ... 4 more ... \| null)\[\] \| \{ ...; \} \| null)\[\] \| \{
1854
+ ...; \} \| null)\[\] \| \{ ...; \} \| ...[] \| \{ \[`key`: `string`\]: string \|
1855
+ number \| boolean \| readonly (string \| number \| boolean \| readonly (string
1856
+ \| number \| boolean \| readonly (string \| number \| boolean \| readonly
1857
+ (string \| number \| boolean \| readonly (string \| number \| boolean \|
1858
+ readonly (string \| ... 4 more ... \| null)\[\] \| \{ ...; \} \| null)\[\] \| \{
1859
+ ...; \} \| null)\[\] \| \{ ...; \} \| ...; \} \| `null`; \}; `outputSchema?`: \{
1860
+ \[`key`: `string`\]: \| `string` \| `number` \| `boolean` \| readonly string \|
1861
+ number \| boolean \| readonly (string \| number \| boolean \| readonly (string
1862
+ \| number \| boolean \| readonly (string \| number \| boolean \| readonly
1863
+ (string \| number \| boolean \| readonly (string \| number \| boolean \|
1864
+ readonly (string \| ... 4 more ... \| null)\[\] \| \{ ...; \} \| null)\[\] \| \{
1865
+ ...; \} \| null)\[\] \| \{ ...; \} \| ...[] \| \{ \[`key`: `string`\]: string \|
1866
+ number \| boolean \| readonly (string \| number \| boolean \| readonly (string
1867
+ \| number \| boolean \| readonly (string \| number \| boolean \| readonly
1868
+ (string \| number \| boolean \| readonly (string \| number \| boolean \|
1869
+ readonly (string \| ... 4 more ... \| null)\[\] \| \{ ...; \} \| null)\[\] \| \{
1870
+ ...; \} \| null)\[\] \| \{ ...; \} \| ...; \} \| `null`; \}; `presentation?`: \|
1871
+ \{ `type`: `"action"`; \} \| \{ `type`: `"custom"`; `data`: \{ \[`key`:
1872
+ `string`\]: \| `string` \| `number` \| `boolean` \| readonly string \| number \|
1873
+ boolean \| readonly (string \| number \| boolean \| readonly (string \| number
1874
+ \| boolean \| readonly (string \| number \| boolean \| readonly (string \|
1875
+ number \| boolean \| readonly (string \| number \| boolean \| readonly (string
1876
+ \| ... 4 more ... \| null)\[\] \| \{ ...; \} \| null)\[\] \| \{ ...; \} \|
1877
+ null)\[\] \| \{ ...; \} \| ...[] \| \{ \[`key`: `string`\]: string \| number \|
1878
+ boolean \| readonly (string \| number \| boolean \| readonly (string \| number
1879
+ \| boolean \| readonly (string \| number \| boolean \| readonly (string \|
1880
+ number \| boolean \| readonly (string \| number \| boolean \| readonly (string
1881
+ \| ... 4 more ... \| null)\[\] \| \{ ...; \} \| null)\[\] \| \{ ...; \} \|
1882
+ null)\[\] \| \{ ...; \} \| ...; \} \| `null`; \}; \} \| \{ `type`: `"choice"`;
1883
+ `options`: readonly `object`[]; \} \| \{ `type`: `"form"`; `submitLabel?`:
1884
+ `string`; \} \| \{ `type`: `"confirmation"`; `message`: `string`;
1885
+ `confirmLabel?`: `string`; `cancelLabel?`: `string`; \}; \}; `availability?`: ()
1886
+ => `WhistleAvailability`; `handler`: (`input`) => `unknown`; \}\>[]
1887
+
1888
+ ---
1889
+
1890
+ ### contributeModelCommands()
1891
+
1892
+ ```ts
1893
+ function contributeModelCommands(
1894
+ commands,
1895
+ session,
1896
+ options,
1897
+ ): Readonly<{
1898
+ update: (commands) => void;
1899
+ dispose: () => void;
1900
+ }>;
1901
+ ```
1902
+
1903
+ Contribute one model action; owners may update its definitions through the
1904
+ lease.
1905
+
1906
+ #### Parameters
1907
+
1908
+ | Parameter | Type |
1909
+ | ---------- | ----------------------------------------------------------- |
1910
+ | `commands` | `Pick`\<`WhistleRuntime`, `"contribute"`\> |
1911
+ | `session` | `ModelPreferenceOwner` |
1912
+ | `options` | [`SessionModelCommandOptions`](#sessionmodelcommandoptions) |
1913
+
1914
+ #### Returns
1915
+
1916
+ `Readonly`\<\{ `update`: (`commands`) => `void`; `dispose`: () => `void`; \}\>
1917
+
1918
+ ---
1919
+
1920
+ ### providerChoices()
1921
+
1922
+ ```ts
1923
+ function providerChoices(
1924
+ providers,
1925
+ access,
1926
+ popularProviderIds,
1927
+ screen,
1928
+ ): readonly object[];
1929
+ ```
1930
+
1931
+ Group the existing registry or model providers without owning another catalog.
1932
+
1933
+ #### Parameters
1934
+
1935
+ | Parameter | Type |
1936
+ | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1937
+ | `providers` | readonly `Readonly`\<\{ `id`: `string`; `name`: `string`; `methods`: readonly `Readonly`\<\{ `kind`: [`LoginMethodKind`](#loginmethodkind); `label`: `string`; \}\>[]; \}\>[] |
1938
+ | `access` | readonly `Readonly`\<\{ `providerId`: `string`; `providerName`: `string`; `type`: `"oauth"` \| `"api_key"`; \}\>[] |
1939
+ | `popularProviderIds` | readonly `string`[] |
1940
+ | `screen` | `"login"` \| `"model"` |
1941
+
1942
+ #### Returns
1943
+
1944
+ readonly `object`[]
1945
+
1946
+ ---
1947
+
1948
+ ### reloadSources()
1949
+
1950
+ ```ts
1951
+ function reloadSources(sources, signal): Promise<string>;
1952
+ ```
1953
+
1954
+ Refresh what supports it and report every category honestly.
1955
+
1956
+ #### Parameters
1957
+
1958
+ | Parameter | Type |
1959
+ | --------- | ------------------------------------------ |
1960
+ | `sources` | readonly [`ReloadSource`](#reloadsource)[] |
1961
+ | `signal` | `AbortSignal` |
1962
+
1963
+ #### Returns
1964
+
1965
+ `Promise`\<`string`\>
1966
+
1967
+ ---
1968
+
1969
+ ### reloadCommandDefinitions()
1970
+
1971
+ ```ts
1972
+ function reloadCommandDefinitions(options): readonly Readonly<{
1973
+ id: string;
1974
+ title: string;
1975
+ category: string;
1976
+ description?: string;
1977
+ projections?: {
1978
+ bindings?: {
1979
+ order?: number;
1980
+ values: readonly string[];
1981
+ };
1982
+ agent?: {
1983
+ keybind?: string;
1984
+ order?: number;
1985
+ };
1986
+ help?: {
1987
+ order?: number;
1988
+ };
1989
+ menu?: {
1990
+ order?: number;
1991
+ };
1992
+ palette?: {
1993
+ order?: number;
1994
+ };
1995
+ slash?: {
1996
+ aliases: readonly string[];
1997
+ order?: number;
1998
+ arguments?: {
1999
+ hint: string;
2000
+ words?: readonly ...[];
2001
+ text?: {
2002
+ field: ...;
2003
+ arguments: ...;
2004
+ requestIdField?: ...;
2005
+ };
2006
+ };
2007
+ };
2008
+ };
2009
+ action?: {
2010
+ inputSchema?: {
2011
+ [key: string]:
2012
+ | string
2013
+ | number
2014
+ | boolean
2015
+ | readonly string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | ... 4 more ... | null)[] | { ...; } | null)[] | { ...; } | null)[] | { ...; } | ...[]
2016
+ | {
2017
+ [key: string]: string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | ... 4 more ... | null)[] | { ...; } | null)[] | { ...; } | null)[] | { ...; } | ...;
2018
+ }
2019
+ | null;
2020
+ };
2021
+ outputSchema?: {
2022
+ [key: string]:
2023
+ | string
2024
+ | number
2025
+ | boolean
2026
+ | readonly string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | ... 4 more ... | null)[] | { ...; } | null)[] | { ...; } | null)[] | { ...; } | ...[]
2027
+ | {
2028
+ [key: string]: string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | ... 4 more ... | null)[] | { ...; } | null)[] | { ...; } | null)[] | { ...; } | ...;
2029
+ }
2030
+ | null;
2031
+ };
2032
+ presentation?: | {
2033
+ type: "action";
2034
+ }
2035
+ | {
2036
+ type: "custom";
2037
+ data: {
2038
+ [key: string]:
2039
+ | string
2040
+ | number
2041
+ | boolean
2042
+ | readonly string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | ... 4 more ... | null)[] | { ...; } | null)[] | { ...; } | null)[] | { ...; } | ...[]
2043
+ | {
2044
+ [key: string]: string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | number | boolean | readonly (string | ... 4 more ... | null)[] | { ...; } | null)[] | { ...; } | null)[] | { ...; } | ...;
2045
+ }
2046
+ | null;
2047
+ };
2048
+ }
2049
+ | {
2050
+ type: "choice";
2051
+ options: readonly object[];
2052
+ }
2053
+ | {
2054
+ type: "form";
2055
+ submitLabel?: string;
2056
+ }
2057
+ | {
2058
+ type: "confirmation";
2059
+ message: string;
2060
+ confirmLabel?: string;
2061
+ cancelLabel?: string;
2062
+ };
2063
+ };
2064
+ availability?: () => WhistleAvailability;
2065
+ handler: (input) => unknown;
2066
+ }>[];
2067
+ ```
2068
+
2069
+ The shared `/reload` definition over host-described reload sources.
2070
+
2071
+ #### Parameters
2072
+
2073
+ | Parameter | Type |
2074
+ | --------- | ---------------------------------------------------------------------- |
2075
+ | `options` | `Pick`\<[`ReloadCommandOptions`](#reloadcommandoptions), `"sources"`\> |
2076
+
2077
+ #### Returns
2078
+
2079
+ readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`;
2080
+ `description?`: `string`; `projections?`: \{ `bindings?`: \{ `order?`: `number`;
2081
+ `values`: readonly `string`[]; \}; `agent?`: \{ `keybind?`: `string`; `order?`:
2082
+ `number`; \}; `help?`: \{ `order?`: `number`; \}; `menu?`: \{ `order?`:
2083
+ `number`; \}; `palette?`: \{ `order?`: `number`; \}; `slash?`: \{ `aliases`:
2084
+ readonly `string`[]; `order?`: `number`; `arguments?`: \{ `hint`: `string`;
2085
+ `words?`: readonly ...[]; `text?`: \{ `field`: ...; `arguments`: ...;
2086
+ `requestIdField?`: ...; \}; \}; \}; \}; `action?`: \{ `inputSchema?`: \{
2087
+ \[`key`: `string`\]: \| `string` \| `number` \| `boolean` \| readonly string \|
2088
+ number \| boolean \| readonly (string \| number \| boolean \| readonly (string
2089
+ \| number \| boolean \| readonly (string \| number \| boolean \| readonly
2090
+ (string \| number \| boolean \| readonly (string \| number \| boolean \|
2091
+ readonly (string \| ... 4 more ... \| null)\[\] \| \{ ...; \} \| null)\[\] \| \{
2092
+ ...; \} \| null)\[\] \| \{ ...; \} \| ...[] \| \{ \[`key`: `string`\]: string \|
2093
+ number \| boolean \| readonly (string \| number \| boolean \| readonly (string
2094
+ \| number \| boolean \| readonly (string \| number \| boolean \| readonly
2095
+ (string \| number \| boolean \| readonly (string \| number \| boolean \|
2096
+ readonly (string \| ... 4 more ... \| null)\[\] \| \{ ...; \} \| null)\[\] \| \{
2097
+ ...; \} \| null)\[\] \| \{ ...; \} \| ...; \} \| `null`; \}; `outputSchema?`: \{
2098
+ \[`key`: `string`\]: \| `string` \| `number` \| `boolean` \| readonly string \|
2099
+ number \| boolean \| readonly (string \| number \| boolean \| readonly (string
2100
+ \| number \| boolean \| readonly (string \| number \| boolean \| readonly
2101
+ (string \| number \| boolean \| readonly (string \| number \| boolean \|
2102
+ readonly (string \| ... 4 more ... \| null)\[\] \| \{ ...; \} \| null)\[\] \| \{
2103
+ ...; \} \| null)\[\] \| \{ ...; \} \| ...[] \| \{ \[`key`: `string`\]: string \|
2104
+ number \| boolean \| readonly (string \| number \| boolean \| readonly (string
2105
+ \| number \| boolean \| readonly (string \| number \| boolean \| readonly
2106
+ (string \| number \| boolean \| readonly (string \| number \| boolean \|
2107
+ readonly (string \| ... 4 more ... \| null)\[\] \| \{ ...; \} \| null)\[\] \| \{
2108
+ ...; \} \| null)\[\] \| \{ ...; \} \| ...; \} \| `null`; \}; `presentation?`: \|
2109
+ \{ `type`: `"action"`; \} \| \{ `type`: `"custom"`; `data`: \{ \[`key`:
2110
+ `string`\]: \| `string` \| `number` \| `boolean` \| readonly string \| number \|
2111
+ boolean \| readonly (string \| number \| boolean \| readonly (string \| number
2112
+ \| boolean \| readonly (string \| number \| boolean \| readonly (string \|
2113
+ number \| boolean \| readonly (string \| number \| boolean \| readonly (string
2114
+ \| ... 4 more ... \| null)\[\] \| \{ ...; \} \| null)\[\] \| \{ ...; \} \|
2115
+ null)\[\] \| \{ ...; \} \| ...[] \| \{ \[`key`: `string`\]: string \| number \|
2116
+ boolean \| readonly (string \| number \| boolean \| readonly (string \| number
2117
+ \| boolean \| readonly (string \| number \| boolean \| readonly (string \|
2118
+ number \| boolean \| readonly (string \| number \| boolean \| readonly (string
2119
+ \| ... 4 more ... \| null)\[\] \| \{ ...; \} \| null)\[\] \| \{ ...; \} \|
2120
+ null)\[\] \| \{ ...; \} \| ...; \} \| `null`; \}; \} \| \{ `type`: `"choice"`;
2121
+ `options`: readonly `object`[]; \} \| \{ `type`: `"form"`; `submitLabel?`:
2122
+ `string`; \} \| \{ `type`: `"confirmation"`; `message`: `string`;
2123
+ `confirmLabel?`: `string`; `cancelLabel?`: `string`; \}; \}; `availability?`: ()
2124
+ => `WhistleAvailability`; `handler`: (`input`) => `unknown`; \}\>[]
2125
+
2126
+ ---
2127
+
2128
+ ### contributeReloadCommand()
2129
+
2130
+ ```ts
2131
+ function contributeReloadCommand(
2132
+ commands,
2133
+ options,
2134
+ ): Readonly<{
2135
+ update: (commands) => void;
2136
+ dispose: () => void;
2137
+ }>;
2138
+ ```
2139
+
2140
+ Contribute `/reload` to one Whistle host.
2141
+
2142
+ #### Parameters
2143
+
2144
+ | Parameter | Type |
2145
+ | ---------- | ----------------------------------------------- |
2146
+ | `commands` | `Pick`\<`WhistleRuntime`, `"contribute"`\> |
2147
+ | `options` | [`ReloadCommandOptions`](#reloadcommandoptions) |
2148
+
2149
+ #### Returns
2150
+
2151
+ `Readonly`\<\{ `update`: (`commands`) => `void`; `dispose`: () => `void`; \}\>
2152
+
2153
+ ---
2154
+
2155
+ ### contributeSessionCommands()
2156
+
2157
+ ```ts
2158
+ function contributeSessionCommands(
2159
+ commands,
2160
+ session,
2161
+ options,
2162
+ ): Readonly<{
2163
+ update: (commands) => void;
2164
+ dispose: () => void;
2165
+ }>;
2166
+ ```
2167
+
2168
+ Contribute the shared Session command vocabulary to one Whistle host.
2169
+
2170
+ #### Parameters
2171
+
2172
+ | Parameter | Type |
2173
+ | ---------- | ----------------------------------------------------------------- |
2174
+ | `commands` | `Pick`\<`SessionCommandRuntime`, `"contribute"`\> |
2175
+ | `session` | `SessionCommandSession` |
2176
+ | `options` | [`ParakeetSessionCommandOptions`](#parakeetsessioncommandoptions) |
2177
+
2178
+ #### Returns
2179
+
2180
+ `Readonly`\<\{ `update`: (`commands`) => `void`; `dispose`: () => `void`; \}\>
2181
+
2182
+ ## References
2183
+
2184
+ ### formatModelIdentity
2185
+
2186
+ Re-exports [formatModelIdentity](index.md#formatmodelidentity)
2187
+
2188
+ ---
2189
+
2190
+ ### formatContextUsage
2191
+
2192
+ Re-exports [formatContextUsage](index.md#formatcontextusage)
2193
+
2194
+ ---
2195
+
2196
+ ### formatTokenCount
2197
+
2198
+ Re-exports [formatTokenCount](index.md#formattokencount)
2199
+
2200
+ ---
2201
+
2202
+ ### ParakeetProvider
2203
+
2204
+ Re-exports [ParakeetProvider](index.md#parakeetprovider)
2205
+
2206
+ ---
2207
+
2208
+ ### useComposer
2209
+
2210
+ Re-exports [useComposer](index.md#usecomposer)
2211
+
2212
+ ---
2213
+
2214
+ ### useStatus
2215
+
2216
+ Re-exports [useStatus](index.md#usestatus)
2217
+
2218
+ ---
2219
+
2220
+ ### useTimeline
2221
+
2222
+ Re-exports [useTimeline](index.md#usetimeline)
2223
+
2224
+ ---
2225
+
2226
+ ### ComposerController
2227
+
2228
+ Re-exports [ComposerController](index.md#composercontroller)
2229
+
2230
+ ---
2231
+
2232
+ ### ParakeetModel
2233
+
2234
+ Re-exports [ParakeetModel](index.md#parakeetmodel)
2235
+
2236
+ ---
2237
+
2238
+ ### ParakeetStatus
2239
+
2240
+ Re-exports [ParakeetStatus](index.md#parakeetstatus)
2241
+
2242
+ ---
2243
+
2244
+ ### ParakeetUsage
2245
+
2246
+ Re-exports [ParakeetUsage](index.md#parakeetusage)
2247
+
2248
+ ---
2249
+
2250
+ ### StatusController
2251
+
2252
+ Re-exports [StatusController](index.md#statuscontroller)
2253
+
2254
+ ---
2255
+
2256
+ ### TimelineController
2257
+
2258
+ Re-exports [TimelineController](index.md#timelinecontroller)
2259
+
2260
+ ---
2261
+
2262
+ ### completeSlash
2263
+
2264
+ Re-exports [completeSlash](commands/slash.md#completeslash)
2265
+
2266
+ ---
2267
+
2268
+ ### fuzzyMatch
2269
+
2270
+ Re-exports [fuzzyMatch](commands/slash.md#fuzzymatch-1)
2271
+
2272
+ ---
2273
+
2274
+ ### keyBindings
2275
+
2276
+ Re-exports [keyBindings](commands/slash.md#keybindings)
2277
+
2278
+ ---
2279
+
2280
+ ### keyLabel
2281
+
2282
+ Re-exports [keyLabel](commands/slash.md#keylabel)
2283
+
2284
+ ---
2285
+
2286
+ ### parseSlashDraft
2287
+
2288
+ Re-exports [parseSlashDraft](commands/slash.md#parseslashdraft)
2289
+
2290
+ ---
2291
+
2292
+ ### slashRegistry
2293
+
2294
+ Re-exports [slashRegistry](commands/slash.md#slashregistry)
2295
+
2296
+ ---
2297
+
2298
+ ### FuzzyMatch
2299
+
2300
+ Re-exports [FuzzyMatch](commands/slash.md#fuzzymatch)
2301
+
2302
+ ---
2303
+
2304
+ ### KeyBindingRow
2305
+
2306
+ Re-exports [KeyBindingRow](commands/slash.md#keybindingrow)
2307
+
2308
+ ---
2309
+
2310
+ ### SlashCommand
2311
+
2312
+ Re-exports [SlashCommand](commands/slash.md#slashcommand)
2313
+
2314
+ ---
2315
+
2316
+ ### SlashCommandItem
2317
+
2318
+ Re-exports [SlashCommandItem](commands/slash.md#slashcommanditem)
2319
+
2320
+ ---
2321
+
2322
+ ### SlashCompletion
2323
+
2324
+ Re-exports [SlashCompletion](commands/slash.md#slashcompletion)
2325
+
2326
+ ---
2327
+
2328
+ ### SlashParse
2329
+
2330
+ Re-exports [SlashParse](commands/slash.md#slashparse)
2331
+
2332
+ ---
2333
+
2334
+ ### SlashWordItem
2335
+
2336
+ Re-exports [SlashWordItem](commands/slash.md#slashworditem)
2337
+
2338
+ ---
2339
+
2340
+ ### ParakeetSession
2341
+
2342
+ Re-exports [ParakeetSession](index.md#parakeetsession)
2343
+
2344
+ ---
2345
+
2346
+ ### ParakeetSessionCommand
2347
+
2348
+ Re-exports [ParakeetSessionCommand](index.md#parakeetsessioncommand)
2349
+
2350
+ ---
2351
+
2352
+ ### ParakeetPromptResult
2353
+
2354
+ Re-exports [ParakeetPromptResult](index.md#parakeetpromptresult)
2355
+
2356
+ ---
2357
+
2358
+ ### ParakeetAssistantMessageItem
2359
+
2360
+ Re-exports [ParakeetAssistantMessageItem](index.md#parakeetassistantmessageitem)
2361
+
2362
+ ---
2363
+
2364
+ ### ParakeetTimelineItem
2365
+
2366
+ Re-exports [ParakeetTimelineItem](index.md#parakeettimelineitem)
2367
+
2368
+ ---
2369
+
2370
+ ### ParakeetToolGroupItem
2371
+
2372
+ Re-exports [ParakeetToolGroupItem](index.md#parakeettoolgroupitem)
2373
+
2374
+ ---
2375
+
2376
+ ### ParakeetToolItem
2377
+
2378
+ Re-exports [ParakeetToolItem](index.md#parakeettoolitem)
2379
+
2380
+ ---
2381
+
2382
+ ### ParakeetUserMessageItem
2383
+
2384
+ Re-exports [ParakeetUserMessageItem](index.md#parakeetusermessageitem)
2385
+
2386
+ ---
2387
+
2388
+ ### ParakeetToolArguments
2389
+
2390
+ Re-exports [ParakeetToolArguments](index.md#parakeettoolarguments)
2391
+
2392
+ ---
2393
+
2394
+ ### useMarkdown
2395
+
2396
+ Re-exports [useMarkdown](index.md#usemarkdown)
2397
+
2398
+ ---
2399
+
2400
+ ### formatToolDuration
2401
+
2402
+ Re-exports [formatToolDuration](index.md#formattoolduration)
2403
+
2404
+ ---
2405
+
2406
+ ### ParakeetToolCallSection
2407
+
2408
+ Re-exports [ParakeetToolCallSection](index.md#parakeettoolcallsection)
2409
+
2410
+ ---
2411
+
2412
+ ### ParakeetToolCallView
2413
+
2414
+ Re-exports [ParakeetToolCallView](index.md#parakeettoolcallview)
2415
+
2416
+ ---
2417
+
2418
+ ### ParakeetToolDiffFile
2419
+
2420
+ Re-exports [ParakeetToolDiffFile](index.md#parakeettooldifffile)
2421
+
2422
+ ---
2423
+
2424
+ ### ParakeetToolDiffHunk
2425
+
2426
+ Re-exports [ParakeetToolDiffHunk](index.md#parakeettooldiffhunk)
2427
+
2428
+ ---
2429
+
2430
+ ### ParakeetToolDiffLine
2431
+
2432
+ Re-exports [ParakeetToolDiffLine](index.md#parakeettooldiffline)
2433
+
2434
+ ---
2435
+
2436
+ ### ParakeetToolDiffRow
2437
+
2438
+ Re-exports [ParakeetToolDiffRow](index.md#parakeettooldiffrow)
2439
+
2440
+ ---
2441
+
2442
+ ### ParakeetToolExcerptLine
2443
+
2444
+ Re-exports [ParakeetToolExcerptLine](index.md#parakeettoolexcerptline)
2445
+
2446
+ ---
2447
+
2448
+ ### ParakeetToolKind
2449
+
2450
+ Re-exports [ParakeetToolKind](index.md#parakeettoolkind)
2451
+
2452
+ ---
2453
+
2454
+ ### ParakeetToolMatch
2455
+
2456
+ Re-exports [ParakeetToolMatch](index.md#parakeettoolmatch)
2457
+
2458
+ ---
2459
+
2460
+ ### ParakeetToolOutputLine
2461
+
2462
+ Re-exports [ParakeetToolOutputLine](index.md#parakeettooloutputline)
2463
+
2464
+ ---
2465
+
2466
+ ### disclosureOpen
2467
+
2468
+ Re-exports [disclosureOpen](index.md#disclosureopen)
2469
+
2470
+ ---
2471
+
2472
+ ### initialToolDisclosure
2473
+
2474
+ Re-exports [initialToolDisclosure](index.md#initialtooldisclosure)
2475
+
2476
+ ---
2477
+
2478
+ ### toggleAllDisclosure
2479
+
2480
+ Re-exports [toggleAllDisclosure](index.md#togglealldisclosure)
2481
+
2482
+ ---
2483
+
2484
+ ### toggleDisclosure
2485
+
2486
+ Re-exports [toggleDisclosure](index.md#toggledisclosure)
2487
+
2488
+ ---
2489
+
2490
+ ### toolCallDefaultOpen
2491
+
2492
+ Re-exports [toolCallDefaultOpen](index.md#toolcalldefaultopen)
2493
+
2494
+ ---
2495
+
2496
+ ### toolGroupDefaultOpen
2497
+
2498
+ Re-exports [toolGroupDefaultOpen](index.md#toolgroupdefaultopen)
2499
+
2500
+ ---
2501
+
2502
+ ### visibleToolCalls
2503
+
2504
+ Re-exports [visibleToolCalls](index.md#visibletoolcalls)
2505
+
2506
+ ---
2507
+
2508
+ ### ToolDisclosureState
2509
+
2510
+ Re-exports [ToolDisclosureState](index.md#tooldisclosurestate)