@fungi.computer/tourtois 0.1.0 → 0.2.1
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 +19 -0
- package/dist/AppAccessConsent.d.ts +6 -1
- package/dist/AppAccessConsent.js +4 -5
- package/dist/AppDesktopSettings.d.ts +2 -2
- package/dist/AppPane.d.ts +11 -4
- package/dist/AppPane.js +50 -10
- package/dist/AppWorkbench.d.ts +1 -1
- package/dist/AppWorkbench.js +10 -5
- package/dist/AvatarPreview.d.ts +8 -1
- package/dist/AvatarPreview.js +9 -1
- package/dist/Keys.d.ts +42 -121
- package/dist/Keys.js +200 -157
- package/dist/OysterComputers.d.ts +22 -0
- package/dist/OysterComputers.js +177 -0
- package/dist/SettingsNavigation.d.ts +1 -1
- package/dist/SettingsNavigation.js +1 -1
- package/dist/SystemSettings.d.ts +2 -2
- package/dist/SystemSettings.js +1 -1
- package/dist/TeamDesktop.d.ts +1 -1
- package/dist/app-authority.d.ts +37 -37
- package/dist/app-authority.js +1 -1
- package/dist/app-directory-reconciliation.js +7 -2
- package/dist/app-directory.d.ts +6 -5
- package/dist/app-directory.js +4 -1
- package/dist/app-launch.d.ts +1 -1
- package/dist/app-launch.js +6 -3
- package/dist/app-menus.d.ts +1 -1
- package/dist/app-surface.d.ts +2 -1
- package/dist/app-windows.d.ts +5 -2
- package/dist/app-windows.js +1 -1
- package/dist/command-dialogs.d.ts +1 -1
- package/dist/command-dialogs.js +4 -4
- package/dist/desktop/Desktop.d.ts +1 -1
- package/dist/desktop/consent.d.ts +1 -1
- package/dist/desktop/consent.js +1 -1
- package/dist/desktop/row-gill.d.ts +1 -1
- package/dist/oyster-platform-controls.d.ts +1 -1
- package/dist/oyster-platform-controls.js +64 -23
- package/dist/platform-controls.d.ts +6 -5
- package/dist/platform-controls.js +3 -3
- package/dist/queries.d.ts +4 -0
- package/dist/queries.js +4 -0
- package/dist/shell-commands.d.ts +1 -1
- package/dist/shell-commands.js +4 -4
- package/dist/shell-host.d.ts +7 -9
- package/dist/shell-host.js +36 -10
- package/dist/shell-module.d.ts +1 -1
- package/dist/shell.d.ts +1 -1
- package/dist/shell.js +5 -9
- package/dist/useAppWindowManager.d.ts +4 -1
- package/dist/useAppWindowManager.js +3 -0
- package/package.json +39 -18
package/dist/queries.js
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
/** Keep host and isolated-workbench reads in distinct cache entries. */
|
|
2
2
|
export const tourtoisQueryKeys = {
|
|
3
|
+
oysterComputers: (teamId) => ["tourtois", "oyster-computers", teamId],
|
|
4
|
+
oysterComputerPage: (teamId, offset) => [...tourtoisQueryKeys.oysterComputers(teamId), offset],
|
|
5
|
+
oysterSelectedComputer: (teamId) => ["tourtois", "oyster-selected-computer", teamId],
|
|
6
|
+
oysterInternetAccess: (teamId, computerId) => ["tourtois", "oyster-internet-access", teamId, computerId],
|
|
3
7
|
hostSettings: (workspaceId) => ["tourtois", "host-settings", workspaceId],
|
|
4
8
|
workbench: () => ["tourtois", "workbench"],
|
|
5
9
|
workbenchComputers: (teamId) => ["tourtois", "workbench-computers", teamId],
|
package/dist/shell-commands.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CommandDialogs, type ShellCommandState } from "./command-dialogs.js";
|
|
2
|
-
import { type ShellActions } from "@fungi.computer/
|
|
2
|
+
import { type ShellActions } from "@fungi.computer/nacre/commands";
|
|
3
3
|
import type { TourtoisAppSurfaceHost } from "./app-surface.js";
|
|
4
4
|
/** The Back hint for this platform, e.g. "Back (Ctrl K, then [)". */
|
|
5
5
|
export declare function backHint(): string;
|
package/dist/shell-commands.js
CHANGED
|
@@ -2,13 +2,13 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { CommandDialogs } from "./command-dialogs.js";
|
|
3
3
|
import { useLayer } from "@fungi.computer/maosaico";
|
|
4
4
|
import { Sigil, isSigilName } from "@fungi.computer/sigils";
|
|
5
|
-
import { backBinding, shellCommands, } from "@fungi.computer/
|
|
5
|
+
import { backBinding, shellCommands, } from "@fungi.computer/nacre/commands";
|
|
6
6
|
import { useEffect, useMemo, useRef, useState, useSyncExternalStore, } from "react";
|
|
7
7
|
import { AppIcon } from "./app-icon.js";
|
|
8
|
-
import { installShellKeys } from "@fungi.computer/
|
|
8
|
+
import { installShellKeys } from "@fungi.computer/nacre/keys";
|
|
9
9
|
/** The Back hint for this platform, e.g. "Back (Ctrl K, then [)". */
|
|
10
10
|
export function backHint() {
|
|
11
|
-
const key = backBinding.slice("<leader>
|
|
11
|
+
const key = backBinding.slice("<leader>".length);
|
|
12
12
|
return `Back (${isMac() ? "⌘K" : "Ctrl K"}, then ${key})`;
|
|
13
13
|
}
|
|
14
14
|
const emptySnapshot = Object.freeze({
|
|
@@ -73,7 +73,7 @@ export function useShellCommands(host, actions) {
|
|
|
73
73
|
category: "Window",
|
|
74
74
|
description: "Hide visible Apps, or restore the Apps hidden by Show desktop.",
|
|
75
75
|
projections: {
|
|
76
|
-
bindings: { values: ["<leader>
|
|
76
|
+
bindings: { values: ["<leader>d"], order: 8 },
|
|
77
77
|
palette: { order: 18 },
|
|
78
78
|
help: { order: 8 },
|
|
79
79
|
},
|
package/dist/shell-host.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { type TeamWorkbenchHostHandle, type WorkbenchPlatformDestination, type WorkbenchGillRequest, type WorkbenchGillWatch } from "@fungi.computer/
|
|
1
|
+
import { type TeamWorkbenchHostHandle, type WorkbenchPlatformDestination, type WorkbenchGillRequest, type WorkbenchGillWatch } from "@fungi.computer/nacre/workbench";
|
|
2
2
|
import { type PlatformControls } from "./platform-controls.js";
|
|
3
3
|
import type { GillReply } from "@fungi.computer/gills";
|
|
4
4
|
import type { MemberAvatar } from "@fungi.computer/sprite-zdog/avatar";
|
|
5
5
|
import * as z from "zod";
|
|
6
6
|
import { type AppOpenInput } from "@fungi.computer/agar/apps";
|
|
7
7
|
import type { TourtoisAppSurfaceHost } from "./app-surface.js";
|
|
8
|
-
import { type WorkbenchDirectory } from "@fungi.computer/
|
|
8
|
+
import { workbenchComputerDirectorySchema, type WorkbenchDirectory } from "@fungi.computer/nacre/workbench-directory";
|
|
9
9
|
declare const teamIdentitySchema: z.ZodObject<{
|
|
10
10
|
team: z.ZodObject<{
|
|
11
11
|
teamId: z.ZodString;
|
|
@@ -14,14 +14,12 @@ declare const teamIdentitySchema: z.ZodObject<{
|
|
|
14
14
|
}, z.core.$strict>;
|
|
15
15
|
}, z.core.$strict>;
|
|
16
16
|
export type TeamIdentity = z.output<typeof teamIdentitySchema>["team"];
|
|
17
|
-
declare const workbenchComputerDirectorySchema: z.ZodObject<{
|
|
18
|
-
nextOffset: z.ZodNullable<z.ZodNumber>;
|
|
19
|
-
computers: z.ZodArray<z.ZodObject<{
|
|
20
|
-
name: z.ZodString;
|
|
21
|
-
computerId: z.ZodString;
|
|
22
|
-
}, z.core.$strip>>;
|
|
23
|
-
}, z.core.$strict>;
|
|
24
17
|
export type TeamComputerPage = z.output<typeof workbenchComputerDirectorySchema>;
|
|
18
|
+
/** The complete inventory offered to the shell's Computer picker. */
|
|
19
|
+
export declare function readWorkbenchComputers(workbench: Pick<TourtoisShell, "computers">, signal: AbortSignal): Promise<{
|
|
20
|
+
computerId: string;
|
|
21
|
+
name: string;
|
|
22
|
+
}[]>;
|
|
25
23
|
/**
|
|
26
24
|
* The trusted shell's view of its host: Team/Computer/App directory reads,
|
|
27
25
|
* child-App mounting and host-offered platform destinations. The host
|
package/dist/shell-host.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { APP_NAVIGATION_TITLE_MAX, parseAppStatusItems, APP_NAVIGATION_CRUMBS_MAX, APP_NAVIGATION_LABEL_MAX, APP_NAVIGATION_MENU_MAX, APP_NAVIGATION_PRIMARY_MAX, APP_NAVIGATION_SIBLINGS_MAX, APP_NAVIGATION_STATUS_MAX, } from "@fungi.computer/agar";
|
|
2
|
-
import {
|
|
3
|
-
import { createAppSurfaceCommandHost } from "@fungi.computer/
|
|
2
|
+
import {} from "@fungi.computer/nacre/workbench";
|
|
3
|
+
import { createAppSurfaceCommandHost } from "@fungi.computer/nacre/command-host";
|
|
4
4
|
import * as Schema from "effect/Schema";
|
|
5
5
|
import {} from "./platform-controls.js";
|
|
6
6
|
import { parseMemberAvatar } from "./member-avatar.js";
|
|
7
7
|
import * as z from "zod";
|
|
8
8
|
import { appOpenInputSchema, } from "@fungi.computer/agar/apps";
|
|
9
|
-
import { workbenchDirectorySchema, } from "@fungi.computer/
|
|
9
|
+
import { workbenchDirectorySchema, workbenchComputerDirectorySchema, } from "@fungi.computer/nacre/workbench-directory";
|
|
10
10
|
const teamIdentitySchema = z.strictObject({
|
|
11
11
|
team: z.strictObject({
|
|
12
12
|
teamId: z.string().min(1),
|
|
@@ -14,9 +14,26 @@ const teamIdentitySchema = z.strictObject({
|
|
|
14
14
|
handle: z.string().min(1),
|
|
15
15
|
}),
|
|
16
16
|
});
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
/** The complete inventory offered to the shell's Computer picker. */
|
|
18
|
+
export async function readWorkbenchComputers(workbench, signal) {
|
|
19
|
+
const computers = [];
|
|
20
|
+
const assertActive = () => {
|
|
21
|
+
if (signal.aborted)
|
|
22
|
+
throw new DOMException("", "AbortError");
|
|
23
|
+
};
|
|
24
|
+
let offset = 0;
|
|
25
|
+
for (;;) {
|
|
26
|
+
assertActive();
|
|
27
|
+
const page = await workbench.computers({ limit: 100, offset });
|
|
28
|
+
assertActive();
|
|
29
|
+
computers.push(...page.computers);
|
|
30
|
+
if (page.nextOffset === null)
|
|
31
|
+
return computers;
|
|
32
|
+
if (page.nextOffset <= offset)
|
|
33
|
+
throw new Error("Computer directory pagination did not advance.");
|
|
34
|
+
offset = page.nextOffset;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
20
37
|
const platformDestinationsSchema = z
|
|
21
38
|
.array(z.strictObject({
|
|
22
39
|
id: z.string().min(1).max(64),
|
|
@@ -29,6 +46,7 @@ const relayCommands = (maximum) => z
|
|
|
29
46
|
.array(z.strictObject({
|
|
30
47
|
id: relayId,
|
|
31
48
|
label: relayLabel,
|
|
49
|
+
icon: z.literal("play").optional(),
|
|
32
50
|
variant: z.enum(["primary", "outline", "ghost"]).optional(),
|
|
33
51
|
tone: z.literal("destructive").optional(),
|
|
34
52
|
disabled: z.boolean().optional(),
|
|
@@ -55,6 +73,7 @@ const navigationRelaySchema = z
|
|
|
55
73
|
.array(z.strictObject({
|
|
56
74
|
id: relayId,
|
|
57
75
|
label: relayLabel,
|
|
76
|
+
presentation: z.literal("bead").optional(),
|
|
58
77
|
tone: z
|
|
59
78
|
.enum(["neutral", "info", "warning", "success", "error"])
|
|
60
79
|
.optional(),
|
|
@@ -89,6 +108,8 @@ function parseNavigationRelay(value) {
|
|
|
89
108
|
}
|
|
90
109
|
function commandOf(command) {
|
|
91
110
|
let copy = { id: command.id, label: command.label };
|
|
111
|
+
if (command.icon !== undefined)
|
|
112
|
+
copy = { ...copy, icon: command.icon };
|
|
92
113
|
if (command.variant !== undefined)
|
|
93
114
|
copy = { ...copy, variant: command.variant };
|
|
94
115
|
if (command.tone !== undefined)
|
|
@@ -98,8 +119,12 @@ function commandOf(command) {
|
|
|
98
119
|
return copy;
|
|
99
120
|
}
|
|
100
121
|
function statusOf(item) {
|
|
101
|
-
|
|
102
|
-
|
|
122
|
+
let copy = { id: item.id, label: item.label };
|
|
123
|
+
if (item.presentation !== undefined)
|
|
124
|
+
copy = { ...copy, presentation: item.presentation };
|
|
125
|
+
if (item.tone !== undefined)
|
|
126
|
+
copy = { ...copy, tone: item.tone };
|
|
127
|
+
return copy;
|
|
103
128
|
}
|
|
104
129
|
function childLaunch(launch) {
|
|
105
130
|
return {
|
|
@@ -116,7 +141,7 @@ export function createTourtoisShell(workbench) {
|
|
|
116
141
|
// One Whistle graph for Tourtois's own shell commands and every mounted
|
|
117
142
|
// child's Release-validated commands, so the menu bar and Cmd-K follow focus.
|
|
118
143
|
const commands = createAppSurfaceCommandHost();
|
|
119
|
-
const mount = async (container, launch, signal, { onAgentSessionSelection, onComputerChoice, onNavigation, onAppOpen, onAppRole, onSelectionChanged, onNavigationState, onStatusItems, onFocus, }) => {
|
|
144
|
+
const mount = async (container, launch, signal, { onAgentSessionSelection, onDeliveryPending, onComputerChoice, onNavigation, onAppOpen, onAppRole, onSelectionChanged, onNavigationState, onStatusItems, onFocus, }) => {
|
|
120
145
|
const commandMount = commands.mount(launch.surfaceId, launch.commands);
|
|
121
146
|
let resolveHandle = () => undefined;
|
|
122
147
|
const handleReady = new Promise((resolve) => {
|
|
@@ -124,6 +149,7 @@ export function createTourtoisShell(workbench) {
|
|
|
124
149
|
});
|
|
125
150
|
let contribution;
|
|
126
151
|
const events = {
|
|
152
|
+
...(onDeliveryPending && { onDeliveryPending }),
|
|
127
153
|
...(onComputerChoice && { onComputerChoice }),
|
|
128
154
|
onAgentSessionSelection: (selection) => onAgentSessionSelection(selection),
|
|
129
155
|
...(onNavigation && { onNavigation }),
|
|
@@ -177,7 +203,7 @@ export function createTourtoisShell(workbench) {
|
|
|
177
203
|
try {
|
|
178
204
|
// The child's frame lives in this window's own slot, so the browser
|
|
179
205
|
// moves, clips and stacks it with the window.
|
|
180
|
-
handle = await workbench.mount(container, childLaunch(launch), events);
|
|
206
|
+
handle = await workbench.mount(container, childLaunch(launch), events, signal);
|
|
181
207
|
}
|
|
182
208
|
catch (error) {
|
|
183
209
|
commandMount.dispose();
|
package/dist/shell-module.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MountPlatformControls, MountShell } from "@fungi.computer/
|
|
1
|
+
import type { MountPlatformControls, MountShell } from "@fungi.computer/nacre/shell-module";
|
|
2
2
|
/**
|
|
3
3
|
* This Release's shell module, emitted as `shell.js` beside `index.html`.
|
|
4
4
|
* A host imports it from its own origin after first paint; Tourtois's code
|
package/dist/shell.d.ts
CHANGED
package/dist/shell.js
CHANGED
|
@@ -10,7 +10,7 @@ import { QueryClientProvider, useQuery, useQueryClient, } from "@tanstack/react-
|
|
|
10
10
|
import { TeamTourtois } from "./TeamDesktop.js";
|
|
11
11
|
import { AppSurfaceHostProvider } from "./app-surface.js";
|
|
12
12
|
import { accountAvatarQuery, MemberAvatarSource } from "./member-avatar.js";
|
|
13
|
-
import { createTourtoisShell } from "./shell-host.js";
|
|
13
|
+
import { createTourtoisShell, readWorkbenchComputers } from "./shell-host.js";
|
|
14
14
|
function CanonicalStatus({ message }) {
|
|
15
15
|
return (_jsx("main", { className: "tourtois-shell tourtois-team-desktop", "data-tourtois-shell": true, children: _jsx("p", { className: "tourtois-directory-status", role: "status", children: message }) }));
|
|
16
16
|
}
|
|
@@ -52,13 +52,7 @@ function MountedTourtois({ shell, }) {
|
|
|
52
52
|
return _jsx(CanonicalStatus, { message: "This Team dashboard is unavailable." });
|
|
53
53
|
if (!connection)
|
|
54
54
|
return _jsx(CanonicalStatus, { message: "Connecting\u2026" });
|
|
55
|
-
return (_jsx(AppSurfaceHostProvider, { value: connection.workbench.host, children: _jsx(MemberAvatarSource, { read: () => connection.workbench.memberAvatar(), children: _jsx(TeamTourtois, { teamId: connection.team.teamId, teamName: connection.team.name, computersReader: (signal) => connection.workbench
|
|
56
|
-
.computers({ limit: 100, offset: 0 })
|
|
57
|
-
.then((page) => {
|
|
58
|
-
if (signal.aborted)
|
|
59
|
-
throw new DOMException("", "AbortError");
|
|
60
|
-
return page.computers;
|
|
61
|
-
}), directoryReader: () => connection.workbench.directory(), takeAppOpenRequest: () => connection.workbench.takeAppOpenRequest(), platform: connection.workbench.platform, desktopStorage: shell.storage, desktopMethods: shell.methods, gills: connection.workbench, settingsLaunchers: settingsLaunchers.filter((launcher) => connection.sections === null ||
|
|
55
|
+
return (_jsx(AppSurfaceHostProvider, { value: connection.workbench.host, children: _jsx(MemberAvatarSource, { read: () => connection.workbench.memberAvatar(), children: _jsx(TeamTourtois, { teamId: connection.team.teamId, teamName: connection.team.name, computersReader: (signal) => readWorkbenchComputers(connection.workbench, signal), directoryReader: () => connection.workbench.directory(), takeAppOpenRequest: () => connection.workbench.takeAppOpenRequest(), platform: connection.workbench.platform, desktopStorage: shell.storage, desktopMethods: shell.methods, gills: connection.workbench, settingsLaunchers: settingsLaunchers.filter((launcher) => connection.sections === null ||
|
|
62
56
|
connection.sections.includes(launcher.location.category)), systemMenuItems: connection.destinations.map(({ id, label }) => (_jsx(DropdownMenuItem, { onSelect: () => {
|
|
63
57
|
void connection.workbench
|
|
64
58
|
.openPlatformDestination(id)
|
|
@@ -74,7 +68,9 @@ function MountedTourtois({ shell, }) {
|
|
|
74
68
|
*/
|
|
75
69
|
export const mountShell = (root, shell) => {
|
|
76
70
|
const queryClient = createQueryClient();
|
|
77
|
-
|
|
71
|
+
// The Release bundles its own React runtime. Keep its useId values distinct
|
|
72
|
+
// from the embedding host's labels, controls and portalled overlays.
|
|
73
|
+
const reactRoot = createRoot(root, { identifierPrefix: "tourtois-shell-" });
|
|
78
74
|
reactRoot.render(_jsx(QueryClientProvider, { client: queryClient, children: _jsx(MountedTourtois, { shell: shell }) }));
|
|
79
75
|
return Promise.resolve(() => {
|
|
80
76
|
reactRoot.unmount();
|
|
@@ -309,7 +309,7 @@ export declare function useAppWindowManager(host: TourtoisAppSurfaceHost | null,
|
|
|
309
309
|
}>[];
|
|
310
310
|
}>;
|
|
311
311
|
container: HTMLElement;
|
|
312
|
-
status: import("@fungi.computer/
|
|
312
|
+
status: import("@fungi.computer/nacre/window-manager").WindowStatus;
|
|
313
313
|
generation: number;
|
|
314
314
|
error?: unknown;
|
|
315
315
|
cleanupError?: unknown;
|
|
@@ -327,6 +327,7 @@ export declare function useAppWindowManager(host: TourtoisAppSurfaceHost | null,
|
|
|
327
327
|
primary?: readonly Readonly<{
|
|
328
328
|
id: string;
|
|
329
329
|
label: string;
|
|
330
|
+
icon?: "play";
|
|
330
331
|
variant?: "primary" | "outline" | "ghost";
|
|
331
332
|
tone?: "destructive";
|
|
332
333
|
disabled?: boolean;
|
|
@@ -334,6 +335,7 @@ export declare function useAppWindowManager(host: TourtoisAppSurfaceHost | null,
|
|
|
334
335
|
menu?: readonly Readonly<{
|
|
335
336
|
id: string;
|
|
336
337
|
label: string;
|
|
338
|
+
icon?: "play";
|
|
337
339
|
variant?: "primary" | "outline" | "ghost";
|
|
338
340
|
tone?: "destructive";
|
|
339
341
|
disabled?: boolean;
|
|
@@ -341,6 +343,7 @@ export declare function useAppWindowManager(host: TourtoisAppSurfaceHost | null,
|
|
|
341
343
|
status?: readonly Readonly<{
|
|
342
344
|
id: string;
|
|
343
345
|
label: string;
|
|
346
|
+
presentation?: "bead";
|
|
344
347
|
tone?: "neutral" | "info" | "warning" | "success" | "error";
|
|
345
348
|
}>[];
|
|
346
349
|
}> | null;
|
|
@@ -10,6 +10,9 @@ export function useAppWindowManager(host, teamId, events) {
|
|
|
10
10
|
if (!host)
|
|
11
11
|
throw new Error("App host unavailable");
|
|
12
12
|
return await host.mount(container, launch, signal, {
|
|
13
|
+
...(projectionEvents.onDeliveryPending && {
|
|
14
|
+
onDeliveryPending: projectionEvents.onDeliveryPending,
|
|
15
|
+
}),
|
|
13
16
|
onAgentSessionSelection: (selection) => {
|
|
14
17
|
if (!host.reportAgentSessionSelection)
|
|
15
18
|
return Promise.reject(new Error("Hub Agent browser host unavailable"));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fungi.computer/tourtois",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"author": "Levi <levi@technomancy.dev>",
|
|
5
5
|
"description": "Tourtois: the trusted desktop shell for Oyster and Fungi, with host-supplied Settings sections",
|
|
6
6
|
"type": "module",
|
|
@@ -69,19 +69,19 @@
|
|
|
69
69
|
"LICENSE"
|
|
70
70
|
],
|
|
71
71
|
"dependencies": {
|
|
72
|
-
"@fungi.computer/agar": "0.
|
|
73
|
-
"@fungi.computer/cairn": "0.0
|
|
74
|
-
"@fungi.computer/caps": "0.
|
|
75
|
-
"@fungi.computer/
|
|
76
|
-
"@fungi.computer/
|
|
77
|
-
"@fungi.computer/
|
|
78
|
-
"@fungi.computer/parakeet": "0.1
|
|
79
|
-
"@fungi.computer/puffball": "0.
|
|
80
|
-
"@fungi.computer/shiitake": "0.
|
|
81
|
-
"@fungi.computer/sigils": "0.
|
|
82
|
-
"@fungi.computer/sprite": "0.
|
|
83
|
-
"@fungi.computer/sprite-zdog": "0.
|
|
84
|
-
"@fungi.computer/whistle": "0.0
|
|
72
|
+
"@fungi.computer/agar": "0.3.0",
|
|
73
|
+
"@fungi.computer/cairn": "0.1.0",
|
|
74
|
+
"@fungi.computer/caps": "0.2.0",
|
|
75
|
+
"@fungi.computer/ear-tag": "0.1.0",
|
|
76
|
+
"@fungi.computer/gills": "0.2.0",
|
|
77
|
+
"@fungi.computer/maosaico": "0.1.0",
|
|
78
|
+
"@fungi.computer/parakeet": "0.2.1",
|
|
79
|
+
"@fungi.computer/puffball": "0.2.0",
|
|
80
|
+
"@fungi.computer/shiitake": "0.3.1",
|
|
81
|
+
"@fungi.computer/sigils": "0.2.0",
|
|
82
|
+
"@fungi.computer/sprite": "0.2.0",
|
|
83
|
+
"@fungi.computer/sprite-zdog": "0.2.0",
|
|
84
|
+
"@fungi.computer/whistle": "0.1.0",
|
|
85
85
|
"@tanstack/history": "1.162.1",
|
|
86
86
|
"@tanstack/react-form": "1.33.2",
|
|
87
87
|
"@tanstack/react-query": "5.102.8",
|
|
@@ -91,15 +91,17 @@
|
|
|
91
91
|
"effect": "4.0.2",
|
|
92
92
|
"lucide-react": "0.460.0",
|
|
93
93
|
"react-dom": "18.3.1",
|
|
94
|
-
"zod": "4.4.3"
|
|
94
|
+
"zod": "4.4.3",
|
|
95
|
+
"@fungi.computer/nacre": "0.0.1"
|
|
95
96
|
},
|
|
96
97
|
"peerDependencies": {
|
|
97
98
|
"react": "^18.3.1 || ^19.2.0"
|
|
98
99
|
},
|
|
99
100
|
"devDependencies": {
|
|
101
|
+
"@fungi.computer/oyster": "0.3.2",
|
|
100
102
|
"@cloudflare/workers-types": "5.20260828.1",
|
|
101
|
-
"@fungi.computer/forage": "0.
|
|
102
|
-
"@fungi.computer/mycelium": "0.1
|
|
103
|
+
"@fungi.computer/forage": "0.2.0",
|
|
104
|
+
"@fungi.computer/mycelium": "0.2.1",
|
|
103
105
|
"@ladle/react": "5.1.1",
|
|
104
106
|
"@types/react": "18.3.3",
|
|
105
107
|
"@vitejs/plugin-react": "6.1.1",
|
|
@@ -165,7 +167,25 @@
|
|
|
165
167
|
"packageStylesheets": [
|
|
166
168
|
"@fungi.computer/caps",
|
|
167
169
|
"@fungi.computer/parakeet"
|
|
168
|
-
]
|
|
170
|
+
],
|
|
171
|
+
"entry": "index.html",
|
|
172
|
+
"maxOutputBytes": 67108864,
|
|
173
|
+
"backend": {
|
|
174
|
+
"entry": "backend/index.ts",
|
|
175
|
+
"exportName": "Tourtois",
|
|
176
|
+
"compatibilityDate": "2026-09-04",
|
|
177
|
+
"runtime": {
|
|
178
|
+
"kind": "durable-facet",
|
|
179
|
+
"stateSchema": 1
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
"assetBase": "./",
|
|
183
|
+
"assets": {
|
|
184
|
+
"maxManifestBytes": 1048576,
|
|
185
|
+
"maxObjects": 1024,
|
|
186
|
+
"maxObjectBytes": 16777216,
|
|
187
|
+
"maxTotalBytes": 67108864
|
|
188
|
+
}
|
|
169
189
|
}
|
|
170
190
|
},
|
|
171
191
|
"license": "MIT",
|
|
@@ -211,6 +231,7 @@
|
|
|
211
231
|
"workbench": "ladle serve --host 127.0.0.1 --port 61001",
|
|
212
232
|
"workbench:build": "ladle build --outDir ../../.botanical/tourtois-ladle",
|
|
213
233
|
"test:overlay-layering": "node test/overlay-layering.browser.mjs",
|
|
234
|
+
"test:window-new-version": "node test/window-new-version.browser.mjs",
|
|
214
235
|
"test:workbench": "node test/workbench.browser.mjs && node test/desktop-gills.browser.mjs && node test/app-directory-isolation.browser.mjs && node test/workflows-launcher-icon.browser.mjs && node test/landing-bugs.browser.mjs && node test/desktop-under-windows.browser.mjs && node test/show-desktop.browser.mjs && node test/window-stack.browser.mjs && node test/region-layers.browser.mjs && node test/window-chrome-back.browser.mjs && node test/app-bar-menu.browser.mjs && node test/launcher-gill.browser.mjs && node test/desktop-storage.browser.mjs && node test/desktop-method-editing.browser.mjs && node test/phone-desktop.browser.mjs && node test/phone-layout.browser.mjs && node test/phone-app-switcher.browser.mjs && node test/computer-choice.browser.mjs",
|
|
215
236
|
"test": "pnpm run test:unit && pnpm run test:merge",
|
|
216
237
|
"test:settings-icons": "node --import tsx ../../tooling/repository/scripts/workbench-proofs.mjs --output ../../.botanical/tourtois-ladle --origin-env TOURTOIS_WORKBENCH_URL test/settings-icons.browser.mjs",
|