@fungi.computer/parakeet 0.0.1 → 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.
- package/README.md +45 -6
- package/dist/account-commands.js +3 -11
- package/dist/commands/advertised.d.ts +3 -1
- package/dist/commands/advertised.js +89 -4
- package/dist/commands/builtins.js +1 -1
- package/dist/commands/interactions.d.ts +22 -7
- package/dist/commands/interactions.js +41 -17
- package/dist/commands/run.d.ts +3 -2
- package/dist/commands/run.js +5 -2
- package/dist/commands/slash.d.ts +2 -0
- package/dist/commands/slash.js +13 -7
- package/dist/commands/use-slash-commands.js +4 -4
- package/dist/components/AgentHead.d.ts +9 -12
- package/dist/components/AgentHead.js +12 -44
- package/dist/components/ChatComposer.d.ts +3 -1
- package/dist/components/ChatComposer.js +79 -15
- package/dist/components/ChatMessage.d.ts +4 -0
- package/dist/components/ChatMessage.js +6 -2
- package/dist/components/ClientRows.js +2 -2
- package/dist/components/InteractionPanel.d.ts +2 -4
- package/dist/components/InteractionPanel.js +2 -2
- package/dist/components/ShiitakeAvatar.d.ts +7 -5
- package/dist/components/ShiitakeAvatar.js +6 -4
- package/dist/components/TimelineItem.d.ts +2 -0
- package/dist/components/TimelineItem.js +31 -7
- package/dist/components/avatar-presentation.d.ts +7 -14
- package/dist/components/avatar-presentation.js +6 -13
- package/dist/conversation-opening.d.ts +47 -0
- package/dist/conversation-opening.js +173 -0
- package/dist/conversation.d.ts +50 -5
- package/dist/conversation.js +587 -87
- package/dist/core/author-labels.d.ts +2 -0
- package/dist/core/build-timeline.d.ts +4 -2
- package/dist/core/build-timeline.js +46 -7
- package/dist/core/client-actions.js +6 -3
- package/dist/core/client-timeline.d.ts +9 -2
- package/dist/core/client-timeline.js +15 -4
- package/dist/core/draft-storage.d.ts +63 -0
- package/dist/core/draft-storage.js +50 -0
- package/dist/core/model-identity.d.ts +2 -0
- package/dist/core/model-identity.js +6 -0
- package/dist/core/queued-recall.d.ts +35 -0
- package/dist/core/queued-recall.js +138 -0
- package/dist/core/session-projection.js +17 -0
- package/dist/core/session-query.d.ts +54 -11
- package/dist/core/session-query.js +38 -12
- package/dist/core/tool-groups.d.ts +1 -1
- package/dist/core/tool-groups.js +3 -1
- package/dist/core/tool-view.d.ts +1 -1
- package/dist/core/tool-view.js +3 -2
- package/dist/core/use-timeline-item-key.d.ts +8 -0
- package/dist/core/use-timeline-item-key.js +29 -0
- package/dist/headless.d.ts +6 -4
- package/dist/headless.js +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/model-commands.js +65 -40
- package/dist/parakeet.js +17 -18
- package/dist/provider-choices.js +10 -7
- package/dist/session-commands.d.ts +0 -9
- package/dist/session-commands.js +39 -68
- package/dist/session.d.ts +1 -1
- package/dist/store/types.d.ts +10 -4
- package/dist/styles.css +105 -117
- package/docs/api/commands/slash.md +24 -21
- package/docs/api/headless.md +375 -232
- package/docs/api/index.md +168 -60
- package/package.json +16 -10
- package/src/styles.css +4 -9
- package/dist/components/still-frame-cache.d.ts +0 -16
- package/dist/components/still-frame-cache.js +0 -63
package/dist/provider-choices.js
CHANGED
|
@@ -18,13 +18,16 @@ export function providerChoices(providers, access, popularProviderIds, screen) {
|
|
|
18
18
|
.map((provider) => {
|
|
19
19
|
const methods = provider.methods.map((method) => method.kind === "api_key" ? "API key" : "Subscription");
|
|
20
20
|
const credential = signedIn.get(provider.id);
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
21
|
+
// Fungi's sign-in is the Fungi account; its Team pays, not a subscription.
|
|
22
|
+
const description = provider.id === "fungi"
|
|
23
|
+
? "Fungi account"
|
|
24
|
+
: methods.length > 0
|
|
25
|
+
? methods.join(" or ")
|
|
26
|
+
: credential?.type === "oauth"
|
|
27
|
+
? "Subscription"
|
|
28
|
+
: credential?.type === "api_key"
|
|
29
|
+
? "API key"
|
|
30
|
+
: undefined;
|
|
28
31
|
const choice = {
|
|
29
32
|
value: provider.id,
|
|
30
33
|
label: provider.name,
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { CancelResult } from "@fungi.computer/shiitake/client";
|
|
2
1
|
import type { ParakeetSessionCommand } from "./session.js";
|
|
3
2
|
import type { WhistleRuntime } from "@fungi.computer/whistle";
|
|
4
3
|
import { buildDurableTimeline } from "./core/build-timeline.js";
|
|
@@ -18,10 +17,6 @@ export type SessionCommandSession = Readonly<{
|
|
|
18
17
|
}>[];
|
|
19
18
|
}>;
|
|
20
19
|
}> & SessionViewFacts>;
|
|
21
|
-
cancel?: ((input: Readonly<{
|
|
22
|
-
commandId: string;
|
|
23
|
-
onlyIfPending?: boolean;
|
|
24
|
-
}>) => Promise<CancelResult>) | undefined;
|
|
25
20
|
/** Execute a type-discriminated Session command, including `fork`. */
|
|
26
21
|
command: ParakeetSessionCommand;
|
|
27
22
|
}>;
|
|
@@ -35,10 +30,6 @@ export type ParakeetSessionCommandOptions = Readonly<{
|
|
|
35
30
|
sessionResume?: (() => void | Promise<void>) | undefined;
|
|
36
31
|
/** Whether this host currently supports saved-Session selection. */
|
|
37
32
|
sessionResumeAvailable: boolean;
|
|
38
|
-
/** Restore an owner-withdrawn queued prompt into the host composer. */
|
|
39
|
-
onEditQueued?: (text: string) => void;
|
|
40
|
-
/** Refuse withdrawal while the host has a draft that must be preserved. */
|
|
41
|
-
canEditQueued?: () => boolean;
|
|
42
33
|
/** Navigate to the Session a fork just created. */
|
|
43
34
|
onForked?: ((sessionId: string) => void | Promise<void>) | undefined;
|
|
44
35
|
/** Whether this host currently supports navigating to a forked Session. */
|
package/dist/session-commands.js
CHANGED
|
@@ -5,10 +5,7 @@ import { buildDurableTimeline } from "./core/build-timeline.js";
|
|
|
5
5
|
import { sessionActivityStatus, sessionViewState, } from "./core/session-view-state.js";
|
|
6
6
|
/** A choice prompt holds at most 256 options; the default read already bounds this. */
|
|
7
7
|
const maxForkOptions = 200;
|
|
8
|
-
const queueArguments = z.
|
|
9
|
-
z.strictObject({ action: z.literal("list") }),
|
|
10
|
-
z.strictObject({ action: z.literal("editLast") }),
|
|
11
|
-
]);
|
|
8
|
+
const queueArguments = z.strictObject({ action: z.literal("list") });
|
|
12
9
|
const queueArgumentsSchema = z
|
|
13
10
|
.record(z.string(), z.json())
|
|
14
11
|
.parse(structuredClone(z.toJSONSchema(queueArguments)));
|
|
@@ -63,18 +60,13 @@ export function contributeSessionCommands(commands, session, options) {
|
|
|
63
60
|
aliases: ["queue"],
|
|
64
61
|
order: 3,
|
|
65
62
|
arguments: {
|
|
66
|
-
hint: "list
|
|
63
|
+
hint: "list",
|
|
67
64
|
words: [
|
|
68
65
|
{
|
|
69
66
|
word: "list",
|
|
70
67
|
description: "List accepted queued prompts",
|
|
71
68
|
arguments: { action: "list" },
|
|
72
69
|
},
|
|
73
|
-
{
|
|
74
|
-
word: "edit-last",
|
|
75
|
-
description: "Return the last queued prompt to the composer",
|
|
76
|
-
arguments: { action: "editLast" },
|
|
77
|
-
},
|
|
78
70
|
],
|
|
79
71
|
},
|
|
80
72
|
},
|
|
@@ -83,43 +75,19 @@ export function contributeSessionCommands(commands, session, options) {
|
|
|
83
75
|
handler: async ({ arguments: rawArguments, interaction, }) => {
|
|
84
76
|
const args = queueArguments.safeParse(rawArguments ?? { action: "list" });
|
|
85
77
|
if (!args.success)
|
|
86
|
-
throw new Error("/queue requires list
|
|
78
|
+
throw new Error("/queue requires list.");
|
|
87
79
|
const snapshot = await session.read();
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
:
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
].join("\n"));
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
if (snapshot.pending.hasMore === true)
|
|
103
|
-
throw new Error("The queue view is incomplete; refresh it before editing the last prompt.");
|
|
104
|
-
const prompt = [...snapshot.pending.prompts]
|
|
105
|
-
.reverse()
|
|
106
|
-
.find((candidate) => candidate.delivery === "followUp");
|
|
107
|
-
if (prompt === undefined)
|
|
108
|
-
throw new Error("There is no queued follow-up to edit.");
|
|
109
|
-
if (session.cancel === undefined)
|
|
110
|
-
throw new Error("Queue editing is unavailable in this host.");
|
|
111
|
-
if (options.onEditQueued === undefined)
|
|
112
|
-
throw new Error("Editing queued prompts is unavailable in this host.");
|
|
113
|
-
if (options.canEditQueued?.() === false)
|
|
114
|
-
throw new Error("Clear or submit the current draft before editing a queued prompt.");
|
|
115
|
-
const withdrawn = await session.cancel({
|
|
116
|
-
commandId: prompt.commandId,
|
|
117
|
-
onlyIfPending: true,
|
|
118
|
-
});
|
|
119
|
-
if (withdrawn.status === "too_late")
|
|
120
|
-
throw new Error("That queued prompt has already started; it can no longer be edited.");
|
|
121
|
-
options.onEditQueued(prompt.text);
|
|
122
|
-
tell(interaction, "Queued prompt returned to the composer for editing.");
|
|
80
|
+
const prompts = snapshot.pending.prompts;
|
|
81
|
+
const settled = snapshot.terminals.map((terminal) => `${terminal.outcome} · ${terminal.commandId}`);
|
|
82
|
+
tell(interaction, prompts.length === 0 && settled.length === 0
|
|
83
|
+
? "No queued prompts."
|
|
84
|
+
: [
|
|
85
|
+
...prompts.map((prompt, index) => `${String(index + 1)}. queued · accepted: ${prompt.text}`),
|
|
86
|
+
...settled,
|
|
87
|
+
...(snapshot.pending.hasMore === true
|
|
88
|
+
? ["More accepted prompts are waiting outside this view."]
|
|
89
|
+
: []),
|
|
90
|
+
].join("\n"));
|
|
123
91
|
},
|
|
124
92
|
},
|
|
125
93
|
{
|
|
@@ -150,7 +118,8 @@ export function contributeSessionCommands(commands, session, options) {
|
|
|
150
118
|
slash: { aliases: ["fork"], order: 7 },
|
|
151
119
|
},
|
|
152
120
|
handler: async ({ interaction }) => {
|
|
153
|
-
|
|
121
|
+
const onForked = options.onForked;
|
|
122
|
+
if (!options.forkAvailable || onForked === undefined) {
|
|
154
123
|
unavailable("/fork");
|
|
155
124
|
return;
|
|
156
125
|
}
|
|
@@ -171,23 +140,25 @@ export function contributeSessionCommands(commands, session, options) {
|
|
|
171
140
|
label: item.text.slice(0, 100) || "(empty message)",
|
|
172
141
|
})),
|
|
173
142
|
});
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
}
|
|
178
|
-
catch (error) {
|
|
179
|
-
if (error instanceof ShiitakeError) {
|
|
180
|
-
if (error.boundary === "runtime" && error.cause === "conflict")
|
|
181
|
-
throw new Error("Wait for the current run to finish, then fork.", { cause: error });
|
|
182
|
-
if (error.boundary === "store" && error.cause === "unavailable")
|
|
183
|
-
throw new Error("That message is no longer available to fork from.", { cause: error });
|
|
184
|
-
if (error.boundary === "runtime" && error.cause === "rejected")
|
|
185
|
-
throw new Error("This Session is bound to a channel and cannot be forked.", { cause: error });
|
|
143
|
+
const forked = await interaction.run(async () => {
|
|
144
|
+
try {
|
|
145
|
+
return await session.command({ type: "fork", entryId: answer });
|
|
186
146
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
147
|
+
catch (error) {
|
|
148
|
+
if (error instanceof ShiitakeError) {
|
|
149
|
+
if (error.boundary === "runtime" && error.cause === "conflict")
|
|
150
|
+
throw new Error("Wait for the current run to finish, then fork.", { cause: error });
|
|
151
|
+
if (error.boundary === "store" && error.cause === "unavailable")
|
|
152
|
+
throw new Error("That message is no longer available to fork from.", { cause: error });
|
|
153
|
+
if (error.boundary === "runtime" && error.cause === "rejected")
|
|
154
|
+
throw new Error("This Session is bound to a channel and cannot be forked.", { cause: error });
|
|
155
|
+
}
|
|
156
|
+
throw error;
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
await interaction.run(async () => {
|
|
160
|
+
await onForked(forked.sessionId);
|
|
161
|
+
});
|
|
191
162
|
},
|
|
192
163
|
},
|
|
193
164
|
{
|
|
@@ -207,7 +178,7 @@ export function contributeSessionCommands(commands, session, options) {
|
|
|
207
178
|
},
|
|
208
179
|
},
|
|
209
180
|
},
|
|
210
|
-
handler: async ({ arguments: input
|
|
181
|
+
handler: async ({ arguments: input }) => {
|
|
211
182
|
const parsed = compactArguments.safeParse(input);
|
|
212
183
|
if (!parsed.success)
|
|
213
184
|
throw new Error("Use /compact, or /compact <what to focus on>.");
|
|
@@ -218,7 +189,7 @@ export function contributeSessionCommands(commands, session, options) {
|
|
|
218
189
|
await session.command(instructions.length === 0
|
|
219
190
|
? { type: "compact", requestId: nanoid() }
|
|
220
191
|
: { type: "compact", requestId: nanoid(), instructions });
|
|
221
|
-
return
|
|
192
|
+
return "Compaction queued; it runs after any current work.";
|
|
222
193
|
},
|
|
223
194
|
},
|
|
224
195
|
{
|
|
@@ -238,7 +209,7 @@ export function contributeSessionCommands(commands, session, options) {
|
|
|
238
209
|
},
|
|
239
210
|
},
|
|
240
211
|
},
|
|
241
|
-
handler: async ({ arguments: input
|
|
212
|
+
handler: async ({ arguments: input }) => {
|
|
242
213
|
const parsed = nameArguments.safeParse(input);
|
|
243
214
|
if (!parsed.success)
|
|
244
215
|
throw new Error("Use /name <title>, or /name to clear it.");
|
|
@@ -248,9 +219,9 @@ export function contributeSessionCommands(commands, session, options) {
|
|
|
248
219
|
const title = text.length === 0 ? null : text;
|
|
249
220
|
await session.command({ type: "title", title });
|
|
250
221
|
await options.onTitled?.(title);
|
|
251
|
-
return
|
|
222
|
+
return title === null
|
|
252
223
|
? "Conversation title cleared; it follows the first prompt again."
|
|
253
|
-
: `Conversation named "${title}"
|
|
224
|
+
: `Conversation named "${title}".`;
|
|
254
225
|
},
|
|
255
226
|
},
|
|
256
227
|
],
|
package/dist/session.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ export type ParakeetSessionCommand = {
|
|
|
18
18
|
(input: SessionCommand): Promise<ParakeetPromptResult | CancelResult | ForkedSession | undefined>;
|
|
19
19
|
};
|
|
20
20
|
/** The exact Shiitake operations consumed by the retained conversation UI. */
|
|
21
|
-
export type ParakeetSession = Readonly<Pick<ShiitakeSession, "address" | "extension" | "read" | "watch"> & {
|
|
21
|
+
export type ParakeetSession = Readonly<Pick<ShiitakeSession, "address" | "extension" | "read" | "watch" | "withdraw" | "latestPending"> & {
|
|
22
22
|
/** Submit commands through this Session's admitted owner boundary. */
|
|
23
23
|
command: ParakeetSessionCommand;
|
|
24
24
|
}>;
|
package/dist/store/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ParakeetAuthor } from "../core/author-labels.js";
|
|
2
|
-
import type { PromptDelivery, SessionCompactionTrigger, SessionMessage } from "@fungi.computer/shiitake/client";
|
|
2
|
+
import type { PromptDelivery, PromptCommand, SessionCompactionTrigger, SessionMessage } from "@fungi.computer/shiitake/client";
|
|
3
3
|
import type { ToolArguments } from "../core/tool-contract.js";
|
|
4
4
|
import type { ToolCallView } from "../core/tool-view.js";
|
|
5
5
|
/** Exact Pi tool result joined to its tool call by the timeline projection. */
|
|
@@ -46,6 +46,8 @@ export type LocalPromptAdmission = Readonly<{
|
|
|
46
46
|
commandId?: string;
|
|
47
47
|
/** Prompt content sent to the Session. */
|
|
48
48
|
content: string;
|
|
49
|
+
/** Full image payload retained with an optimistic or recalled prompt. */
|
|
50
|
+
images?: PromptCommand["images"];
|
|
49
51
|
/** Existing Session delivery intent. */
|
|
50
52
|
delivery: PromptDelivery;
|
|
51
53
|
/** Current local admission result. */
|
|
@@ -91,6 +93,8 @@ export type ToolItem = Readonly<{
|
|
|
91
93
|
name: string;
|
|
92
94
|
/** Exact joined Pi tool result, when one has completed. */
|
|
93
95
|
result?: ToolResultMessage;
|
|
96
|
+
/** Application display payload, separate from the model result. */
|
|
97
|
+
data?: SessionMessage["data"];
|
|
94
98
|
/** Timestamp of the assistant message that issued the call. */
|
|
95
99
|
startedAt?: number;
|
|
96
100
|
/** Owner-confirmed activity or result; unknown when neither is available. */
|
|
@@ -152,9 +156,11 @@ export type CompactionNoticeItem = Readonly<{
|
|
|
152
156
|
at: number;
|
|
153
157
|
/** What started it: the user, the context threshold, or an overflow. */
|
|
154
158
|
trigger: SessionCompactionTrigger;
|
|
155
|
-
/** What the compaction did: nothing to summarize, or a
|
|
156
|
-
|
|
157
|
-
|
|
159
|
+
/** What the compaction did: nothing to summarize, a failure, or a summary
|
|
160
|
+
* dropped because its head no longer fit the context (stale) or because
|
|
161
|
+
* placing it would have left the context over the limit (insufficient). */
|
|
162
|
+
result: "nothing_to_compact" | "failed" | "stale" | "insufficient";
|
|
163
|
+
/** A failure's bounded reason; null otherwise. */
|
|
158
164
|
diagnostic: string | null;
|
|
159
165
|
}>;
|
|
160
166
|
/** Stable row grammar rendered by Parakeet's timeline. */
|
package/dist/styles.css
CHANGED
|
@@ -4476,6 +4476,9 @@
|
|
|
4476
4476
|
}
|
|
4477
4477
|
}
|
|
4478
4478
|
}
|
|
4479
|
+
.isolate {
|
|
4480
|
+
isolation: isolate;
|
|
4481
|
+
}
|
|
4479
4482
|
.stack {
|
|
4480
4483
|
@layer daisyui.l1.l2.l3 {
|
|
4481
4484
|
display: inline-grid;
|
|
@@ -5743,9 +5746,6 @@
|
|
|
5743
5746
|
.mb-1 {
|
|
5744
5747
|
margin-bottom: calc(var(--spacing) * 1);
|
|
5745
5748
|
}
|
|
5746
|
-
.mb-xs {
|
|
5747
|
-
margin-bottom: var(--spacing-xs);
|
|
5748
|
-
}
|
|
5749
5749
|
.ml-2 {
|
|
5750
5750
|
margin-left: calc(var(--spacing) * 2);
|
|
5751
5751
|
}
|
|
@@ -6081,9 +6081,6 @@
|
|
|
6081
6081
|
.h-0 {
|
|
6082
6082
|
height: calc(var(--spacing) * 0);
|
|
6083
6083
|
}
|
|
6084
|
-
.h-4 {
|
|
6085
|
-
height: calc(var(--spacing) * 4);
|
|
6086
|
-
}
|
|
6087
6084
|
.h-8 {
|
|
6088
6085
|
height: calc(var(--spacing) * 8);
|
|
6089
6086
|
}
|
|
@@ -6143,6 +6140,9 @@
|
|
|
6143
6140
|
.w-0 {
|
|
6144
6141
|
width: calc(var(--spacing) * 0);
|
|
6145
6142
|
}
|
|
6143
|
+
.w-3 {
|
|
6144
|
+
width: calc(var(--spacing) * 3);
|
|
6145
|
+
}
|
|
6146
6146
|
.w-8 {
|
|
6147
6147
|
width: calc(var(--spacing) * 8);
|
|
6148
6148
|
}
|
|
@@ -6152,12 +6152,6 @@
|
|
|
6152
6152
|
.w-12 {
|
|
6153
6153
|
width: calc(var(--spacing) * 12);
|
|
6154
6154
|
}
|
|
6155
|
-
.w-20 {
|
|
6156
|
-
width: calc(var(--spacing) * 20);
|
|
6157
|
-
}
|
|
6158
|
-
.w-\[calc\(100\%-1rem\)\] {
|
|
6159
|
-
width: calc(100% - 1rem);
|
|
6160
|
-
}
|
|
6161
6155
|
.w-\[min\(32rem\,calc\(100vw-2rem\)\)\] {
|
|
6162
6156
|
width: min(32rem, calc(100vw - 2rem));
|
|
6163
6157
|
}
|
|
@@ -6203,6 +6197,9 @@
|
|
|
6203
6197
|
.flex-shrink-0 {
|
|
6204
6198
|
flex-shrink: 0;
|
|
6205
6199
|
}
|
|
6200
|
+
.shrink {
|
|
6201
|
+
flex-shrink: 1;
|
|
6202
|
+
}
|
|
6206
6203
|
.shrink-0 {
|
|
6207
6204
|
flex-shrink: 0;
|
|
6208
6205
|
}
|
|
@@ -6360,9 +6357,6 @@
|
|
|
6360
6357
|
.self-stretch {
|
|
6361
6358
|
align-self: stretch;
|
|
6362
6359
|
}
|
|
6363
|
-
.justify-self-end {
|
|
6364
|
-
justify-self: flex-end;
|
|
6365
|
-
}
|
|
6366
6360
|
.truncate {
|
|
6367
6361
|
overflow: hidden;
|
|
6368
6362
|
text-overflow: ellipsis;
|
|
@@ -6578,9 +6572,6 @@
|
|
|
6578
6572
|
.p-lg {
|
|
6579
6573
|
padding: var(--spacing-lg);
|
|
6580
6574
|
}
|
|
6581
|
-
.p-lg\! {
|
|
6582
|
-
padding: var(--spacing-lg) !important;
|
|
6583
|
-
}
|
|
6584
6575
|
.p-md {
|
|
6585
6576
|
padding: var(--spacing-md);
|
|
6586
6577
|
}
|
|
@@ -6590,9 +6581,6 @@
|
|
|
6590
6581
|
.p-xs {
|
|
6591
6582
|
padding: var(--spacing-xs);
|
|
6592
6583
|
}
|
|
6593
|
-
.p-xs\! {
|
|
6594
|
-
padding: var(--spacing-xs) !important;
|
|
6595
|
-
}
|
|
6596
6584
|
.caps-stat-compact {
|
|
6597
6585
|
& > .stat {
|
|
6598
6586
|
padding-block: var(--spacing-xs);
|
|
@@ -6608,9 +6596,6 @@
|
|
|
6608
6596
|
.px-3 {
|
|
6609
6597
|
padding-inline: calc(var(--spacing) * 3);
|
|
6610
6598
|
}
|
|
6611
|
-
.px-lg {
|
|
6612
|
-
padding-inline: var(--spacing-lg);
|
|
6613
|
-
}
|
|
6614
6599
|
.px-md {
|
|
6615
6600
|
padding-inline: var(--spacing-md);
|
|
6616
6601
|
}
|
|
@@ -6644,15 +6629,6 @@
|
|
|
6644
6629
|
.py-xs {
|
|
6645
6630
|
padding-block: var(--spacing-xs);
|
|
6646
6631
|
}
|
|
6647
|
-
.ps-md {
|
|
6648
|
-
padding-inline-start: var(--spacing-md);
|
|
6649
|
-
}
|
|
6650
|
-
.ps-xs {
|
|
6651
|
-
padding-inline-start: var(--spacing-xs);
|
|
6652
|
-
}
|
|
6653
|
-
.pe-sm {
|
|
6654
|
-
padding-inline-end: var(--spacing-sm);
|
|
6655
|
-
}
|
|
6656
6632
|
.pt-1\.5 {
|
|
6657
6633
|
padding-top: calc(var(--spacing) * 1.5);
|
|
6658
6634
|
}
|
|
@@ -6990,6 +6966,9 @@
|
|
|
6990
6966
|
.opacity-55 {
|
|
6991
6967
|
opacity: 55%;
|
|
6992
6968
|
}
|
|
6969
|
+
.opacity-60 {
|
|
6970
|
+
opacity: 60%;
|
|
6971
|
+
}
|
|
6993
6972
|
.opacity-70 {
|
|
6994
6973
|
opacity: 70%;
|
|
6995
6974
|
}
|
|
@@ -7056,9 +7035,6 @@
|
|
|
7056
7035
|
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
|
|
7057
7036
|
transition-duration: var(--tw-duration, var(--default-transition-duration));
|
|
7058
7037
|
}
|
|
7059
|
-
.transition-none {
|
|
7060
|
-
transition-property: none;
|
|
7061
|
-
}
|
|
7062
7038
|
.ease-in {
|
|
7063
7039
|
--tw-ease: var(--ease-in);
|
|
7064
7040
|
transition-timing-function: var(--ease-in);
|
|
@@ -7324,20 +7300,6 @@
|
|
|
7324
7300
|
}
|
|
7325
7301
|
}
|
|
7326
7302
|
}
|
|
7327
|
-
.hover\:gap-md {
|
|
7328
|
-
&:hover {
|
|
7329
|
-
@media (hover: hover) {
|
|
7330
|
-
gap: var(--spacing-md);
|
|
7331
|
-
}
|
|
7332
|
-
}
|
|
7333
|
-
}
|
|
7334
|
-
.hover\:gap-sm {
|
|
7335
|
-
&:hover {
|
|
7336
|
-
@media (hover: hover) {
|
|
7337
|
-
gap: var(--spacing-sm);
|
|
7338
|
-
}
|
|
7339
|
-
}
|
|
7340
|
-
}
|
|
7341
7303
|
.hover\:bg-base-200 {
|
|
7342
7304
|
&:hover {
|
|
7343
7305
|
@media (hover: hover) {
|
|
@@ -7373,11 +7335,6 @@
|
|
|
7373
7335
|
}
|
|
7374
7336
|
}
|
|
7375
7337
|
}
|
|
7376
|
-
.focus\:gap-xs {
|
|
7377
|
-
&:focus {
|
|
7378
|
-
gap: var(--spacing-xs);
|
|
7379
|
-
}
|
|
7380
|
-
}
|
|
7381
7338
|
.focus\:\!outline-none {
|
|
7382
7339
|
&:focus {
|
|
7383
7340
|
--tw-outline-style: none !important;
|
|
@@ -7538,16 +7495,6 @@
|
|
|
7538
7495
|
}
|
|
7539
7496
|
}
|
|
7540
7497
|
}
|
|
7541
|
-
.data-\[open\]\:bg-base-200 {
|
|
7542
|
-
&[data-open] {
|
|
7543
|
-
background-color: var(--color-base-200);
|
|
7544
|
-
}
|
|
7545
|
-
}
|
|
7546
|
-
.data-\[open\]\:bg-base-300 {
|
|
7547
|
-
&[data-open] {
|
|
7548
|
-
background-color: var(--color-base-300);
|
|
7549
|
-
}
|
|
7550
|
-
}
|
|
7551
7498
|
.motion-reduce\:transition-none {
|
|
7552
7499
|
@media (prefers-reduced-motion: reduce) {
|
|
7553
7500
|
transition-property: none;
|
|
@@ -7568,16 +7515,6 @@
|
|
|
7568
7515
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
7569
7516
|
}
|
|
7570
7517
|
}
|
|
7571
|
-
.md\:px-lg {
|
|
7572
|
-
@media (width >= 48rem) {
|
|
7573
|
-
padding-inline: var(--spacing-lg);
|
|
7574
|
-
}
|
|
7575
|
-
}
|
|
7576
|
-
.md\:px-xs {
|
|
7577
|
-
@media (width >= 48rem) {
|
|
7578
|
-
padding-inline: var(--spacing-xs);
|
|
7579
|
-
}
|
|
7580
|
-
}
|
|
7581
7518
|
.md\:btn-xs {
|
|
7582
7519
|
@media (width >= 48rem) {
|
|
7583
7520
|
@layer daisyui.l1.l2 {
|
|
@@ -9262,37 +9199,6 @@
|
|
|
9262
9199
|
font-family: var(--font-mono);
|
|
9263
9200
|
line-height: 1;
|
|
9264
9201
|
}
|
|
9265
|
-
.caps-led {
|
|
9266
|
-
display: inline-flex;
|
|
9267
|
-
align-items: center;
|
|
9268
|
-
gap: var(--spacing-xs);
|
|
9269
|
-
color: var(--marginalia-ink);
|
|
9270
|
-
font-size: 0.75rem;
|
|
9271
|
-
}
|
|
9272
|
-
.caps-led-bead {
|
|
9273
|
-
width: 0.625rem;
|
|
9274
|
-
height: 0.625rem;
|
|
9275
|
-
flex: none;
|
|
9276
|
-
border: var(--card-rule-width) solid var(--card-rule);
|
|
9277
|
-
border-radius: var(--radius-selector);
|
|
9278
|
-
background: var(--caps-led-color);
|
|
9279
|
-
box-shadow: 0 0 0 var(--card-rule-width) var(--caps-led-color);
|
|
9280
|
-
@supports (color: color-mix(in lab, red, red)) {
|
|
9281
|
-
box-shadow: 0 0 0 var(--card-rule-width) color-mix(in srgb, var(--caps-led-color) 36%, transparent);
|
|
9282
|
-
}
|
|
9283
|
-
}
|
|
9284
|
-
.caps-led[data-tone="spore"] {
|
|
9285
|
-
--caps-led-color: var(--growth-spore);
|
|
9286
|
-
}
|
|
9287
|
-
.caps-led[data-tone="mycelium"] {
|
|
9288
|
-
--caps-led-color: var(--growth-mycelium);
|
|
9289
|
-
}
|
|
9290
|
-
.caps-led[data-tone="fruiting"] {
|
|
9291
|
-
--caps-led-color: var(--growth-fruiting);
|
|
9292
|
-
}
|
|
9293
|
-
.caps-led[data-active="false"] {
|
|
9294
|
-
--caps-led-color: var(--marginalia-ink);
|
|
9295
|
-
}
|
|
9296
9202
|
.caps-cartridge-label {
|
|
9297
9203
|
display: grid;
|
|
9298
9204
|
justify-items: center;
|
|
@@ -14185,6 +14091,98 @@
|
|
|
14185
14091
|
min-height: 44px;
|
|
14186
14092
|
}
|
|
14187
14093
|
}
|
|
14094
|
+
.caps-window-header > .caps-window-icon {
|
|
14095
|
+
margin-inline: var(--spacing-md) calc(var(--spacing-sm) - var(--spacing-2xs));
|
|
14096
|
+
}
|
|
14097
|
+
.caps-window-crumbs {
|
|
14098
|
+
display: flex;
|
|
14099
|
+
align-items: center;
|
|
14100
|
+
min-width: 0;
|
|
14101
|
+
flex-shrink: 1;
|
|
14102
|
+
font-family: var(--caps-label-font, inherit);
|
|
14103
|
+
font-size: 11px;
|
|
14104
|
+
font-weight: 500;
|
|
14105
|
+
}
|
|
14106
|
+
.caps-window-crumb-item[data-caps-crumb-position="current"] {
|
|
14107
|
+
font-weight: 600;
|
|
14108
|
+
}
|
|
14109
|
+
.caps-window-crumb-item {
|
|
14110
|
+
display: flex;
|
|
14111
|
+
align-items: center;
|
|
14112
|
+
min-width: 0;
|
|
14113
|
+
}
|
|
14114
|
+
.caps-window-crumb-separator {
|
|
14115
|
+
padding-inline: var(--spacing-2xs);
|
|
14116
|
+
color: currentColor;
|
|
14117
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
14118
|
+
color: color-mix(in srgb, currentColor 50%, transparent);
|
|
14119
|
+
}
|
|
14120
|
+
}
|
|
14121
|
+
.caps-window-crumb {
|
|
14122
|
+
min-width: 0;
|
|
14123
|
+
font-size: inherit;
|
|
14124
|
+
font-weight: inherit;
|
|
14125
|
+
gap: var(--spacing-2xs);
|
|
14126
|
+
}
|
|
14127
|
+
.caps-window-crumb-label {
|
|
14128
|
+
overflow: hidden;
|
|
14129
|
+
text-overflow: ellipsis;
|
|
14130
|
+
white-space: nowrap;
|
|
14131
|
+
}
|
|
14132
|
+
.caps-window-crumb-item[data-caps-crumb-position="current"] .caps-window-crumb {
|
|
14133
|
+
padding-inline: var(--spacing-xs);
|
|
14134
|
+
}
|
|
14135
|
+
.caps-window-crumbs:has(+ .caps-window-title) {
|
|
14136
|
+
max-width: 70%;
|
|
14137
|
+
}
|
|
14138
|
+
.caps-window-statuses {
|
|
14139
|
+
display: flex;
|
|
14140
|
+
align-items: center;
|
|
14141
|
+
gap: var(--spacing-sm);
|
|
14142
|
+
flex-shrink: 0;
|
|
14143
|
+
padding-inline-end: var(--spacing-sm);
|
|
14144
|
+
font-size: 11px;
|
|
14145
|
+
color: currentColor;
|
|
14146
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
14147
|
+
color: color-mix(in srgb, currentColor 65%, transparent);
|
|
14148
|
+
}
|
|
14149
|
+
}
|
|
14150
|
+
.caps-window-commands {
|
|
14151
|
+
display: flex;
|
|
14152
|
+
align-items: center;
|
|
14153
|
+
gap: var(--spacing-2xs);
|
|
14154
|
+
flex-shrink: 0;
|
|
14155
|
+
}
|
|
14156
|
+
@media (max-width: 640px) {
|
|
14157
|
+
.caps-window-header:has(.caps-window-crumbs) {
|
|
14158
|
+
flex-wrap: wrap;
|
|
14159
|
+
}
|
|
14160
|
+
.caps-window-crumbs {
|
|
14161
|
+
min-width: min-content;
|
|
14162
|
+
flex-shrink: 0;
|
|
14163
|
+
}
|
|
14164
|
+
.caps-window-crumb-item {
|
|
14165
|
+
flex-shrink: 0;
|
|
14166
|
+
}
|
|
14167
|
+
.caps-window-statuses {
|
|
14168
|
+
gap: var(--spacing-2xs);
|
|
14169
|
+
padding-inline-end: var(--spacing-2xs);
|
|
14170
|
+
}
|
|
14171
|
+
.caps-window-status > span {
|
|
14172
|
+
position: absolute;
|
|
14173
|
+
width: 1px;
|
|
14174
|
+
height: 1px;
|
|
14175
|
+
overflow: hidden;
|
|
14176
|
+
clip-path: inset(50%);
|
|
14177
|
+
white-space: nowrap;
|
|
14178
|
+
}
|
|
14179
|
+
.caps-window-crumb-item[data-caps-crumb-position="ancestor"] {
|
|
14180
|
+
display: none;
|
|
14181
|
+
}
|
|
14182
|
+
.caps-window-crumb-item[data-caps-crumb-position="parent"] .caps-window-crumb-separator {
|
|
14183
|
+
display: none;
|
|
14184
|
+
}
|
|
14185
|
+
}
|
|
14188
14186
|
.caps-window-body {
|
|
14189
14187
|
flex: 1;
|
|
14190
14188
|
min-height: 0;
|
|
@@ -14518,6 +14516,7 @@
|
|
|
14518
14516
|
display: block;
|
|
14519
14517
|
flex: none;
|
|
14520
14518
|
overflow: visible;
|
|
14519
|
+
pointer-events: none;
|
|
14521
14520
|
transition: color var(--stipe-motion-normal) ease;
|
|
14522
14521
|
}
|
|
14523
14522
|
.caps-status-mark {
|
|
@@ -15222,9 +15221,6 @@
|
|
|
15222
15221
|
font-size: var(--text-xs);
|
|
15223
15222
|
white-space: nowrap;
|
|
15224
15223
|
}
|
|
15225
|
-
.caps-status-compact .caps-status-bead {
|
|
15226
|
-
transform: scale(0.6);
|
|
15227
|
-
}
|
|
15228
15224
|
.caps-action-row-trailing {
|
|
15229
15225
|
display: flex;
|
|
15230
15226
|
width: 6rem;
|
|
@@ -18137,14 +18133,6 @@
|
|
|
18137
18133
|
.chat-composer .parakeet-command-notice[data-tone="success"] {
|
|
18138
18134
|
color: var(--color-success);
|
|
18139
18135
|
}
|
|
18140
|
-
.chat-composer .parakeet-key-hints {
|
|
18141
|
-
margin: 0;
|
|
18142
|
-
padding: 0 0.75rem 0.25rem;
|
|
18143
|
-
background: var(--color-base-200);
|
|
18144
|
-
font-family: var(--font-sans);
|
|
18145
|
-
font-size: 0.6rem;
|
|
18146
|
-
color: var(--stipe-fg-muted);
|
|
18147
|
-
}
|
|
18148
18136
|
.chat-composer .footer-divider {
|
|
18149
18137
|
width: 3px;
|
|
18150
18138
|
height: 3px;
|