@fungi.computer/parakeet 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.md +45 -6
  2. package/dist/account-commands.js +3 -11
  3. package/dist/commands/advertised.d.ts +3 -1
  4. package/dist/commands/advertised.js +89 -4
  5. package/dist/commands/interactions.d.ts +22 -7
  6. package/dist/commands/interactions.js +41 -17
  7. package/dist/commands/slash.js +3 -5
  8. package/dist/commands/use-slash-commands.js +2 -2
  9. package/dist/components/AgentHead.d.ts +2 -0
  10. package/dist/components/AgentHead.js +5 -4
  11. package/dist/components/ChatComposer.d.ts +3 -1
  12. package/dist/components/ChatComposer.js +79 -15
  13. package/dist/components/ChatMessage.d.ts +4 -0
  14. package/dist/components/ChatMessage.js +6 -2
  15. package/dist/components/ClientRows.js +2 -2
  16. package/dist/components/InteractionPanel.d.ts +2 -4
  17. package/dist/components/InteractionPanel.js +2 -2
  18. package/dist/components/TimelineItem.d.ts +2 -0
  19. package/dist/components/TimelineItem.js +31 -7
  20. package/dist/conversation-opening.d.ts +47 -0
  21. package/dist/conversation-opening.js +173 -0
  22. package/dist/conversation.d.ts +47 -3
  23. package/dist/conversation.js +584 -86
  24. package/dist/core/author-labels.d.ts +2 -0
  25. package/dist/core/build-timeline.d.ts +4 -2
  26. package/dist/core/build-timeline.js +46 -7
  27. package/dist/core/client-actions.js +6 -3
  28. package/dist/core/client-timeline.d.ts +9 -2
  29. package/dist/core/client-timeline.js +15 -4
  30. package/dist/core/draft-storage.d.ts +63 -0
  31. package/dist/core/draft-storage.js +50 -0
  32. package/dist/core/model-identity.d.ts +2 -0
  33. package/dist/core/model-identity.js +6 -0
  34. package/dist/core/queued-recall.d.ts +35 -0
  35. package/dist/core/queued-recall.js +138 -0
  36. package/dist/core/session-projection.js +17 -0
  37. package/dist/core/session-query.d.ts +54 -11
  38. package/dist/core/session-query.js +38 -12
  39. package/dist/core/tool-groups.d.ts +1 -1
  40. package/dist/core/tool-groups.js +3 -1
  41. package/dist/core/tool-view.js +2 -1
  42. package/dist/core/use-timeline-item-key.d.ts +8 -0
  43. package/dist/core/use-timeline-item-key.js +29 -0
  44. package/dist/headless.d.ts +6 -4
  45. package/dist/headless.js +1 -1
  46. package/dist/index.d.ts +2 -2
  47. package/dist/index.js +1 -1
  48. package/dist/model-commands.js +64 -39
  49. package/dist/parakeet.js +17 -18
  50. package/dist/session-commands.d.ts +0 -9
  51. package/dist/session-commands.js +39 -68
  52. package/dist/session.d.ts +1 -1
  53. package/dist/store/types.d.ts +10 -4
  54. package/dist/styles.css +27 -12
  55. package/docs/api/commands/slash.md +24 -21
  56. package/docs/api/headless.md +375 -232
  57. package/docs/api/index.md +157 -45
  58. package/package.json +16 -10
  59. package/src/styles.css +0 -9
package/docs/api/index.md CHANGED
@@ -26,11 +26,10 @@ What the head is doing: at rest, working something out, or talking.
26
26
  type InteractionPanelProps = Readonly<{
27
27
  host: WhistleInteractionHost;
28
28
  onClose?: () => void;
29
- onRetry?: () => void;
30
29
  }>;
31
30
  ```
32
31
 
33
- The interaction to draw and the page's close and retry callbacks.
32
+ The interaction to draw and the page's close callback.
34
33
 
35
34
  ---
36
35
 
@@ -96,8 +95,11 @@ Conversation activity presented by Parakeet.
96
95
 
97
96
  ```ts
98
97
  type TimelineController = Readonly<{
98
+ cancelQueued: (commandId) => Promise<void>;
99
+ cancellingQueued: boolean;
99
100
  settled: readonly ParakeetTimelineItem[];
100
101
  tail: readonly ParakeetTimelineItem[];
102
+ positionAnchors: ReadonlyMap<number, string | null>;
101
103
  commandAnchors: ReadonlyMap<string, string>;
102
104
  queued: SessionPendingPrompts;
103
105
  pendingHasMore: boolean;
@@ -117,12 +119,33 @@ Stable history and replaceable work rendered by a conversation client.
117
119
 
118
120
  ---
119
121
 
122
+ ### ParakeetDraftCheckpoint
123
+
124
+ ```ts
125
+ type ParakeetDraftCheckpoint =
126
+ | Readonly<{
127
+ status: "saved";
128
+ }>
129
+ | Readonly<{
130
+ status: "failed";
131
+ reason: string;
132
+ }>;
133
+ ```
134
+
135
+ A host may proceed with restart only after the current journal committed.
136
+
137
+ ---
138
+
120
139
  ### ComposerController
121
140
 
122
141
  ```ts
123
142
  type ComposerController = Readonly<{
124
143
  cancel: () => Promise<void>;
125
144
  draft: string;
145
+ images: PromptCommand["images"];
146
+ recallState: QueuedRecallState;
147
+ recall: () => Promise<QueuedRecallOutcome>;
148
+ checkpointDraft: () => ParakeetDraftCheckpoint;
126
149
  failure: "admission" | "failed" | "cancelled" | "interrupted" | undefined;
127
150
  admissionError: "queue_full" | undefined;
128
151
  retry: () => void;
@@ -160,6 +183,7 @@ Session activity, observation, and Agent-lifetime controls.
160
183
  type ParakeetAuthor = Readonly<{
161
184
  id: string;
162
185
  name: string;
186
+ kind?: "agent";
163
187
  }>;
164
188
  ```
165
189
 
@@ -188,6 +212,60 @@ Parakeet never interprets metadata itself.
188
212
 
189
213
  ---
190
214
 
215
+ ### ParakeetDraftIdentity
216
+
217
+ ```ts
218
+ type ParakeetDraftIdentity = Readonly<{
219
+ agentId: string;
220
+ sessionId: string;
221
+ }>;
222
+ ```
223
+
224
+ Durable owner identity, independent of the current service endpoint.
225
+
226
+ ---
227
+
228
+ ### ParakeetDraftStorage
229
+
230
+ ```ts
231
+ type ParakeetDraftStorage = Readonly<{
232
+ getItem: (key) => string | null;
233
+ setItem: (key, value) => void;
234
+ }>;
235
+ ```
236
+
237
+ Hosts must commit a replacement before returning, or throw without changing it.
238
+
239
+ ---
240
+
241
+ ### QueuedRecallState
242
+
243
+ ```ts
244
+ type QueuedRecallState =
245
+ | Readonly<{
246
+ kind: "idle" | "recalling" | "restored";
247
+ }>
248
+ | Readonly<{
249
+ kind: "too_late" | "uncertain";
250
+ message: string;
251
+ }>;
252
+ ```
253
+
254
+ Ephemeral composer reservation, never an admission journal or queue.
255
+
256
+ ---
257
+
258
+ ### QueuedRecallOutcome
259
+
260
+ ```ts
261
+ type QueuedRecallOutcome =
262
+ "ignored" | "empty" | "restored" | "too_late" | "uncertain";
263
+ ```
264
+
265
+ Result of one recall gesture; an empty queue permits local input history.
266
+
267
+ ---
268
+
191
269
  ### ParakeetToolArguments
192
270
 
193
271
  ```ts
@@ -481,15 +559,18 @@ type ParakeetSessionCommand = {
481
559
  status: "accepted";
482
560
  commandId: string;
483
561
  }>
562
+ | Readonly<{
563
+ status: "recorded";
564
+ }>
484
565
  | Readonly<{
485
566
  status: "too_late";
486
567
  commandId: string;
487
568
  }>
488
569
  | Readonly<{
489
- sessionId: string;
570
+ status: "unknown";
490
571
  }>
491
572
  | Readonly<{
492
- status: "recorded";
573
+ sessionId: string;
493
574
  }>
494
575
  | undefined
495
576
  >;
@@ -508,9 +589,9 @@ Admit Agent work or record a prompt held for a human reply.
508
589
 
509
590
  ##### Parameters
510
591
 
511
- | Parameter | Type |
512
- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
513
- | `input` | \| \{ `delivery`: `"followUp"` \| `"steer"`; `requestId`: `string`; `type`: `"prompt"`; `text`: `string`; `images?`: readonly `object`[]; \} \| \{ `type`: `"compact"`; `requestId`: `string`; `instructions?`: `string`; \} |
592
+ | Parameter | Type |
593
+ | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
594
+ | `input` | \| \{ `delivery`: `Schema.Literals`\<readonly \[`"steer"`, `"followUp"`\]\>; `requestId`: `Schema.String`; `type`: `Schema.Literal`\<`"prompt"`\>; `text`: `Schema.String`; `images?`: `Schema.optionalKey`\<`Schema.$Array`\<`Schema.Struct`\<\{ `type`: `Schema.Literal`\<`"image"`\>; `data`: `Schema.String`; `mimeType`: `Schema.String`; \}\>\>\>; \} \| \{ `type`: `Schema.Literal`\<`"compact"`\>; `requestId`: `Schema.String`; `instructions?`: `Schema.optionalKey`\<`Schema.String`\>; \} |
514
595
 
515
596
  ##### Returns
516
597
 
@@ -526,12 +607,12 @@ Cancel the named queued or running command.
526
607
 
527
608
  ##### Parameters
528
609
 
529
- | Parameter | Type |
530
- | ---------------------- | ----------------------------------------------------------------------------- |
531
- | `input` | \{ `commandId`: `string`; `onlyIfPending?`: `boolean`; `type`: `"cancel"`; \} |
532
- | `input.commandId` | `string` |
533
- | `input.onlyIfPending?` | `boolean` |
534
- | `input.type` | `"cancel"` |
610
+ | Parameter | Type |
611
+ | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
612
+ | `input` | \{ `commandId`: `Schema.String`; `onlyIfPending?`: `Schema.optional`\<`Schema.Boolean`\>; `type`: `Schema.Literal`\<`"cancel"`\>; \} |
613
+ | `input.commandId` | `Schema.String` |
614
+ | `input.onlyIfPending?` | `Schema.optional`\<`Schema.Boolean`\> |
615
+ | `input.type` | `Schema.Literal`\<`"cancel"`\> |
535
616
 
536
617
  ##### Returns
537
618
 
@@ -547,9 +628,9 @@ Forward an owner-supported Session control command.
547
628
 
548
629
  ##### Parameters
549
630
 
550
- | Parameter | Type |
551
- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
552
- | `input` | \| \{ `type`: `"abort"`; \} \| \{ `type`: `"branch"`; `entryId`: `string`; \} \| \{ `type`: `"operator"`; `requestId`: `string`; `author`: `"operator"` \| `"party"`; `text`: `string`; \} \| \{ `type`: `"title"`; `title`: `string` \| `null`; \} |
631
+ | Parameter | Type |
632
+ | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
633
+ | `input` | \| \{ `type`: `Schema.Literal`\<`"branch"`\>; `entryId`: `Schema.String`; \} \| \{ `type`: `Schema.Literal`\<`"operator"`\>; `requestId`: `Schema.String`; `author`: `Schema.Literals`\<readonly \[`"operator"`, `"party"`\]\>; `text`: `Schema.String`; \} \| \{ `type`: `Schema.Literal`\<`"title"`\>; `title`: `Schema.NullOr`\<`Schema.String`\>; \} \| \{ `type`: `Schema.Literal`\<`"abort"`\>; \} |
553
634
 
554
635
  ##### Returns
555
636
 
@@ -567,11 +648,11 @@ Return the owner-issued address of a forked Session.
567
648
 
568
649
  ##### Parameters
569
650
 
570
- | Parameter | Type |
571
- | --------------- | -------------------------------------------- |
572
- | `input` | \{ `type`: `"fork"`; `entryId`: `string`; \} |
573
- | `input.type` | `"fork"` |
574
- | `input.entryId` | `string` |
651
+ | Parameter | Type |
652
+ | --------------- | ----------------------------------------------------------------------- |
653
+ | `input` | \{ `type`: `Schema.Literal`\<`"fork"`\>; `entryId`: `Schema.String`; \} |
654
+ | `input.type` | `Schema.Literal`\<`"fork"`\> |
655
+ | `input.entryId` | `Schema.String` |
575
656
 
576
657
  ##### Returns
577
658
 
@@ -584,16 +665,19 @@ Return the owner-issued address of a forked Session.
584
665
  | Readonly<{
585
666
  status: "accepted";
586
667
  commandId: string;
668
+ }>
669
+ | Readonly<{
670
+ status: "recorded";
587
671
  }>
588
672
  | Readonly<{
589
673
  status: "too_late";
590
674
  commandId: string;
591
675
  }>
592
676
  | Readonly<{
593
- sessionId: string;
677
+ status: "unknown";
594
678
  }>
595
679
  | Readonly<{
596
- status: "recorded";
680
+ sessionId: string;
597
681
  }>
598
682
  | undefined>;
599
683
  ```
@@ -602,16 +686,16 @@ Dispatch a typed command without inventing an admission result.
602
686
 
603
687
  ##### Parameters
604
688
 
605
- | Parameter | Type |
606
- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
607
- | `input` | \| \{ `delivery`: `"followUp"` \| `"steer"`; `requestId`: `string`; `type`: `"prompt"`; `text`: `string`; `images?`: readonly `object`[]; \} \| \{ `type`: `"abort"`; \} \| \{ `commandId`: `string`; `onlyIfPending?`: `boolean`; `type`: `"cancel"`; \} \| \{ `type`: `"branch"`; `entryId`: `string`; \} \| \{ `type`: `"fork"`; `entryId`: `string`; \} \| \{ `type`: `"operator"`; `requestId`: `string`; `author`: `"operator"` \| `"party"`; `text`: `string`; \} \| \{ `type`: `"compact"`; `requestId`: `string`; `instructions?`: `string`; \} \| \{ `type`: `"title"`; `title`: `string` \| `null`; \} |
689
+ | Parameter | Type |
690
+ | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
691
+ | `input` | \| \{ `delivery`: `Schema.Literals`\<readonly \[`"steer"`, `"followUp"`\]\>; `requestId`: `Schema.String`; `type`: `Schema.Literal`\<`"prompt"`\>; `text`: `Schema.String`; `images?`: `Schema.optionalKey`\<`Schema.$Array`\<`Schema.Struct`\<\{ `type`: `Schema.Literal`\<`"image"`\>; `data`: `Schema.String`; `mimeType`: `Schema.String`; \}\>\>\>; \} \| \{ `type`: `Schema.Literal`\<`"abort"`\>; \} \| \{ `commandId`: `Schema.String`; `onlyIfPending?`: `Schema.optional`\<`Schema.Boolean`\>; `type`: `Schema.Literal`\<`"cancel"`\>; \} \| \{ `type`: `Schema.Literal`\<`"branch"`\>; `entryId`: `Schema.String`; \} \| \{ `type`: `Schema.Literal`\<`"fork"`\>; `entryId`: `Schema.String`; \} \| \{ `type`: `Schema.Literal`\<`"operator"`\>; `requestId`: `Schema.String`; `author`: `Schema.Literals`\<readonly \[`"operator"`, `"party"`\]\>; `text`: `Schema.String`; \} \| \{ `type`: `Schema.Literal`\<`"compact"`\>; `requestId`: `Schema.String`; `instructions?`: `Schema.optionalKey`\<`Schema.String`\>; \} \| \{ `type`: `Schema.Literal`\<`"title"`\>; `title`: `Schema.NullOr`\<`Schema.String`\>; \} |
608
692
 
609
693
  ##### Returns
610
694
 
611
695
  `Promise`\< \| `Readonly`\<\{ `status`: `"accepted"`; `commandId`: `string`;
612
- \}\> \| `Readonly`\<\{ `status`: `"too_late"`; `commandId`: `string`; \}\> \|
613
- `Readonly`\<\{ `sessionId`: `string`; \}\> \| `Readonly`\<\{ `status`:
614
- `"recorded"`; \}\> \| `undefined`\>
696
+ \}\> \| `Readonly`\<\{ `status`: `"recorded"`; \}\> \| `Readonly`\<\{ `status`:
697
+ `"too_late"`; `commandId`: `string`; \}\> \| `Readonly`\<\{ `status`:
698
+ `"unknown"`; \}\> \| `Readonly`\<\{ `sessionId`: `string`; \}\> \| `undefined`\>
615
699
 
616
700
  ---
617
701
 
@@ -619,7 +703,11 @@ Dispatch a typed command without inventing an admission result.
619
703
 
620
704
  ```ts
621
705
  type ParakeetSession = Readonly<
622
- Pick<ShiitakeSession, "address" | "extension" | "read" | "watch"> & object
706
+ Pick<
707
+ ShiitakeSession,
708
+ "address" | "extension" | "read" | "watch" | "withdraw" | "latestPending"
709
+ > &
710
+ object
623
711
  >;
624
712
  ```
625
713
 
@@ -681,6 +769,7 @@ type ParakeetToolItem = Readonly<{
681
769
  kind: "tool";
682
770
  name: string;
683
771
  result?: ToolResultMessage;
772
+ data?: SessionMessage["data"];
684
773
  startedAt?: number;
685
774
  status: "completed" | "error" | "running" | "unknown";
686
775
  }>;
@@ -728,7 +817,7 @@ type ParakeetTimelineItem =
728
817
  kind: "compaction_notice";
729
818
  at: number;
730
819
  trigger: SessionCompactionTrigger;
731
- result: "failed" | "nothing_to_compact";
820
+ result: "failed" | "nothing_to_compact" | "stale" | "insufficient";
732
821
  diagnostic: string | null;
733
822
  }
734
823
  | ParakeetToolGroupItem
@@ -773,19 +862,19 @@ Stable row grammar rendered by Parakeet's timeline.
773
862
  kind: "compaction_notice";
774
863
  at: number;
775
864
  trigger: SessionCompactionTrigger;
776
- result: "failed" | "nothing_to_compact";
865
+ result: "failed" | "nothing_to_compact" | "stale" | "insufficient";
777
866
  diagnostic: string | null;
778
867
  }
779
868
  ```
780
869
 
781
- | Name | Type | Description |
782
- | ------------ | ------------------------------------ | ----------------------------------------------------------------- |
783
- | `id` | `string` | Stable rendered-item identity, from the durable notice entry. |
784
- | `kind` | `"compaction_notice"` | Compaction-notice timeline discriminator. |
785
- | `at` | `number` | When it was recorded, in milliseconds since the epoch. |
786
- | `trigger` | `SessionCompactionTrigger` | What started it: the user, the context threshold, or an overflow. |
787
- | `result` | `"failed"` \| `"nothing_to_compact"` | What the compaction did: nothing to summarize, or a failure. |
788
- | `diagnostic` | `string` \| `null` | A failure's bounded reason; null for "nothing to compact". |
870
+ | Name | Type | Description |
871
+ | ------------ | --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
872
+ | `id` | `string` | Stable rendered-item identity, from the durable notice entry. |
873
+ | `kind` | `"compaction_notice"` | Compaction-notice timeline discriminator. |
874
+ | `at` | `number` | When it was recorded, in milliseconds since the epoch. |
875
+ | `trigger` | `SessionCompactionTrigger` | What started it: the user, the context threshold, or an overflow. |
876
+ | `result` | `"failed"` \| `"nothing_to_compact"` \| `"stale"` \| `"insufficient"` | What the compaction did: nothing to summarize, a failure, or a summary dropped because its head no longer fit the context (stale) or because placing it would have left the context over the limit (insufficient). |
877
+ | `diagnostic` | `string` \| `null` | A failure's bounded reason; null otherwise. |
789
878
 
790
879
  ---
791
880
 
@@ -801,6 +890,7 @@ Stable row grammar rendered by Parakeet's timeline.
801
890
 
802
891
  ```ts
803
892
  const AgentHead: NamedExoticComponent<{
893
+ timeMs?: number;
804
894
  activity?: AgentHeadActivity;
805
895
  avatar: {
806
896
  v: 1;
@@ -909,9 +999,9 @@ Own one renderer-neutral conversation scope over the existing query cache.
909
999
 
910
1000
  #### Parameters
911
1001
 
912
- | Parameter | Type |
913
- | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
914
- | `__namedParameters` | `Readonly`\<\{ `children`: `ReactNode`; `session`: [`ParakeetSession`](#parakeetsession); `clients?`: readonly `ClientEntryV1`[]; `interactionStore?`: [`ParakeetInteractions`](headless.md#parakeetinteractions); `authorOf?`: [`ParakeetAuthorOf`](#parakeetauthorof); \}\> |
1002
+ | Parameter | Type |
1003
+ | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1004
+ | `__namedParameters` | `Readonly`\<\{ `children`: `ReactNode`; `session`: [`ParakeetSession`](#parakeetsession); `clients?`: readonly `ClientEntryV1`[]; `interactionStore?`: [`ParakeetInteractions`](headless.md#parakeetinteractions); `onToast?`: (`toast`) => `void`; `draftStorage?`: [`ParakeetDraftStorage`](#parakeetdraftstorage); `draftIdentity?`: [`ParakeetDraftIdentity`](#parakeetdraftidentity); `authorOf?`: [`ParakeetAuthorOf`](#parakeetauthorof); \}\> |
915
1005
 
916
1006
  #### Returns
917
1007
 
@@ -1023,6 +1113,28 @@ The durable assistant's provider/model ids, shared by browser and terminal.
1023
1113
 
1024
1114
  ---
1025
1115
 
1116
+ ### formatModelWithLevel()
1117
+
1118
+ ```ts
1119
+ function formatModelWithLevel(model, level): string;
1120
+ ```
1121
+
1122
+ The model identity with its thinking level, "provider/model (level)"; no level,
1123
+ no suffix.
1124
+
1125
+ #### Parameters
1126
+
1127
+ | Parameter | Type |
1128
+ | --------- | --------------------------------- |
1129
+ | `model` | [`ParakeetModel`](#parakeetmodel) |
1130
+ | `level` | `string` \| `undefined` |
1131
+
1132
+ #### Returns
1133
+
1134
+ `string`
1135
+
1136
+ ---
1137
+
1026
1138
  ### toolGroupDefaultOpen()
1027
1139
 
1028
1140
  ```ts
@@ -1057,7 +1169,7 @@ function visibleToolCalls(
1057
1169
  activeVerb: string;
1058
1170
  label: string;
1059
1171
  paths: readonly string[];
1060
- status: "error" | "unknown" | "completed" | "running";
1172
+ status: "error" | "unknown" | "running" | "completed";
1061
1173
  durationMs?: number;
1062
1174
  exitCode?: number;
1063
1175
  error?: string;
@@ -1079,7 +1191,7 @@ Even a folded group shows recent calls, rather than hiding all tool work.
1079
1191
  readonly `Readonly`\<\{ `id`: `string`; `kind`:
1080
1192
  [`ParakeetToolKind`](#parakeettoolkind); `name`: `string`; `verb`: `string`;
1081
1193
  `activeVerb`: `string`; `label`: `string`; `paths`: readonly `string`[];
1082
- `status`: `"error"` \| `"unknown"` \| `"completed"` \| `"running"`;
1194
+ `status`: `"error"` \| `"unknown"` \| `"running"` \| `"completed"`;
1083
1195
  `durationMs?`: `number`; `exitCode?`: `number`; `error?`: `string`; `sections`:
1084
1196
  readonly [`ParakeetToolCallSection`](#parakeettoolcallsection)[]; \}\>[]
1085
1197
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fungi.computer/parakeet",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "author": "Levi <levi@technomancy.dev>",
5
5
  "private": false,
6
6
  "description": "Standalone React composer for a typed Shiitake Session",
@@ -19,6 +19,10 @@
19
19
  "types": "./dist/headless.d.ts",
20
20
  "import": "./dist/headless.js"
21
21
  },
22
+ "./conversation-opening": {
23
+ "types": "./dist/conversation-opening.d.ts",
24
+ "import": "./dist/conversation-opening.js"
25
+ },
22
26
  "./agent-head": {
23
27
  "types": "./dist/agent-head.d.ts",
24
28
  "import": "./dist/agent-head.js"
@@ -43,23 +47,25 @@
43
47
  "react-dom": "^18.2.0 || ^19.2.0"
44
48
  },
45
49
  "dependencies": {
46
- "@fungi.computer/cairn": "0.0.1",
47
- "@fungi.computer/caps": "0.1.0",
48
- "@fungi.computer/knapsack": "0.1.0",
49
- "@fungi.computer/shiitake": "0.2.0",
50
- "@fungi.computer/sigils": "0.1.0",
51
- "@fungi.computer/sprite": "0.1.0",
52
- "@fungi.computer/sprite-zdog": "0.1.0",
53
- "@fungi.computer/whistle": "0.0.2",
50
+ "@fungi.computer/agar": "0.3.0",
51
+ "@fungi.computer/cairn": "0.1.0",
52
+ "@fungi.computer/caps": "0.2.0",
53
+ "@fungi.computer/knapsack": "0.2.0",
54
+ "@fungi.computer/shiitake": "0.3.0",
55
+ "@fungi.computer/sigils": "0.2.0",
56
+ "@fungi.computer/sprite": "0.2.0",
57
+ "@fungi.computer/sprite-zdog": "0.2.0",
58
+ "@fungi.computer/whistle": "0.1.0",
54
59
  "@tanstack/markdown": "0.0.12",
55
60
  "@tanstack/react-virtual": "3.14.10",
56
61
  "diff": "8.0.4",
62
+ "eventsource": "5.1.1",
57
63
  "jotai": "2.20.3",
58
64
  "jotai-tanstack-query": "0.11.0",
59
65
  "lucide-react": "0.460.0",
60
66
  "strip-ansi": "7.2.0",
61
67
  "zod": "4.4.3",
62
- "@fungi.computer/gills": "0.1.0"
68
+ "@fungi.computer/gills": "0.2.0"
63
69
  },
64
70
  "dependenciesMeta": {
65
71
  "@fungi.computer/caps": {
package/src/styles.css CHANGED
@@ -113,15 +113,6 @@
113
113
  color: var(--color-success);
114
114
  }
115
115
 
116
- .chat-composer .parakeet-key-hints {
117
- margin: 0;
118
- padding: 0 0.75rem 0.25rem;
119
- background: var(--color-base-200);
120
- font-family: var(--font-sans);
121
- font-size: 0.6rem;
122
- color: var(--stipe-fg-muted);
123
- }
124
-
125
116
  .chat-composer .footer-divider {
126
117
  width: 3px;
127
118
  height: 3px;