@elench/shell 0.1.8 → 0.1.10

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.
@@ -0,0 +1,194 @@
1
+ import { type ReactNode } from "react";
2
+ import type { ShellTab, ShellTabTarget, ShellTabTone } from "./lib/shell/types.js";
3
+ import { type ShellApiRequestInit } from "./lib/shell/api.js";
4
+ type Value<T> = T | ((ctx: ShellViewContext) => T);
5
+ export type ShellTransport = <T>(path: string, init?: ShellApiRequestInit) => Promise<T>;
6
+ export type ShellResourceDefinition = {
7
+ path: Value<string>;
8
+ init?: Value<ShellApiRequestInit | undefined>;
9
+ enabled?: Value<boolean>;
10
+ staleTime?: number;
11
+ };
12
+ export type ShellCommandDefinition<TInput = unknown, TOutput = unknown> = {
13
+ path: Value<string>;
14
+ init?: Value<ShellApiRequestInit | undefined>;
15
+ body?: (input: TInput, ctx: ShellViewContext) => unknown;
16
+ invalidates?: string[];
17
+ onSuccess?: (output: TOutput, input: TInput, helpers: ShellCommandHelpers) => void;
18
+ };
19
+ export type ShellCommandHelpers = {
20
+ closeTab: (id: string) => void;
21
+ invalidate: (ids: string[]) => void;
22
+ openTab: (tab: ShellWorkbenchTab, options?: {
23
+ preview?: boolean;
24
+ }) => void;
25
+ pinTab: (id: string) => void;
26
+ };
27
+ export type ShellResourceState<T = unknown> = {
28
+ data: T | undefined;
29
+ error: Error | null;
30
+ isError: boolean;
31
+ isLoading: boolean;
32
+ isPending: boolean;
33
+ refetch: () => void;
34
+ };
35
+ export type ShellCommandState<TInput = unknown, TOutput = unknown> = {
36
+ data: TOutput | undefined;
37
+ error: Error | null;
38
+ isError: boolean;
39
+ isPending: boolean;
40
+ run: (input: TInput) => void;
41
+ runAsync: (input: TInput) => Promise<TOutput>;
42
+ };
43
+ export type ShellViewContext = {
44
+ app: ShellWorkbenchAppDefinition;
45
+ commands: Record<string, ShellCommandState>;
46
+ resources: Record<string, ShellResourceState>;
47
+ section: ShellWorkbenchSectionDefinition;
48
+ tab: ShellWorkbenchTab;
49
+ };
50
+ export type ShellWorkbenchTab<TTarget extends ShellTabTarget = ShellTabTarget> = ShellTab & {
51
+ sectionId: string;
52
+ title: string;
53
+ target: TTarget;
54
+ };
55
+ export type ShellTabInput<TTarget extends ShellTabTarget = ShellTabTarget> = {
56
+ id: string;
57
+ title: string;
58
+ description?: string;
59
+ target: TTarget;
60
+ tone?: ShellTabTone;
61
+ };
62
+ export type ShellSidebarItemDefinition = {
63
+ tab: ShellWorkbenchTab;
64
+ icon?: ReactNode;
65
+ openMode?: "preview" | "pinned";
66
+ };
67
+ export type ShellSidebarSectionDefinition = {
68
+ title: string;
69
+ items: ShellSidebarItemDefinition[];
70
+ };
71
+ export type ShellSidebarNewDefinition = {
72
+ noun: string;
73
+ tab: ShellWorkbenchTab;
74
+ };
75
+ export type ShellWorkbenchSectionDefinition = {
76
+ id: string;
77
+ label: string;
78
+ icon: ReactNode;
79
+ sidebar?: {
80
+ newItem?: ShellSidebarNewDefinition;
81
+ sections?: ShellSidebarSectionDefinition[];
82
+ };
83
+ status?: Value<ReactNode>;
84
+ tabs: ShellWorkbenchTab[];
85
+ view: Value<ShellViewNode>;
86
+ inspector?: Value<ShellInspectorField[]>;
87
+ };
88
+ export type ShellWorkbenchAppDefinition = {
89
+ id: string;
90
+ title: string;
91
+ apiBase?: string;
92
+ resources?: Record<string, ShellResourceDefinition>;
93
+ commands?: Record<string, ShellCommandDefinition>;
94
+ sections: ShellWorkbenchSectionDefinition[];
95
+ storageNamespace?: string;
96
+ };
97
+ export type ShellMetricDefinition = {
98
+ title: string;
99
+ value: ReactNode;
100
+ description?: ReactNode;
101
+ };
102
+ export type ShellRowStatus = "healthy" | "degraded" | "failed" | "unknown";
103
+ export type ShellRowDefinition = {
104
+ title: ReactNode;
105
+ detail?: ReactNode;
106
+ meta?: ReactNode;
107
+ status?: ShellRowStatus;
108
+ };
109
+ export type ShellInspectorField = {
110
+ label: string;
111
+ value: ReactNode;
112
+ };
113
+ export type ShellViewNode = {
114
+ type: "page";
115
+ title: ReactNode;
116
+ description?: ReactNode;
117
+ eyebrow?: ReactNode;
118
+ actions?: ShellViewNode[];
119
+ children?: ShellViewNode[];
120
+ } | {
121
+ type: "metrics";
122
+ items: ShellMetricDefinition[];
123
+ } | {
124
+ type: "columns";
125
+ children: ShellViewNode[];
126
+ } | {
127
+ type: "stack";
128
+ children: ShellViewNode[];
129
+ } | {
130
+ type: "section";
131
+ title: string;
132
+ children: ShellViewNode[];
133
+ } | {
134
+ type: "rows";
135
+ rows: ShellRowDefinition[];
136
+ empty?: {
137
+ title: string;
138
+ description: string;
139
+ };
140
+ } | {
141
+ type: "code";
142
+ content: string;
143
+ } | {
144
+ type: "empty";
145
+ title: string;
146
+ description: string;
147
+ } | {
148
+ type: "loading";
149
+ label?: string;
150
+ } | {
151
+ type: "error";
152
+ title: string;
153
+ description: string;
154
+ retry?: () => void;
155
+ } | {
156
+ type: "button";
157
+ label: string;
158
+ icon?: ReactNode;
159
+ command: string;
160
+ input?: unknown;
161
+ } | {
162
+ type: "refresh";
163
+ label?: string;
164
+ icon?: ReactNode;
165
+ resources: string[];
166
+ } | {
167
+ type: "open-resource-form";
168
+ command: string;
169
+ fieldLabel: string;
170
+ buttonLabel: string;
171
+ defaultValue?: string;
172
+ } | {
173
+ type: "conversation";
174
+ command: string;
175
+ defaultMessage?: string;
176
+ emptyTitle: string;
177
+ emptyDescription: string;
178
+ side?: ShellViewNode[];
179
+ output?: (result: unknown) => string;
180
+ };
181
+ export declare function defineWorkbenchTab<TTarget extends ShellTabTarget>(sectionId: string, tab: ShellTabInput<TTarget>): ShellWorkbenchTab<TTarget>;
182
+ export declare function defineWorkbenchApp(app: ShellWorkbenchAppDefinition): ShellWorkbenchAppDefinition;
183
+ export declare function ShellWorkbench({ app, initialSectionId, transport, }: {
184
+ app: ShellWorkbenchAppDefinition;
185
+ initialSectionId?: string;
186
+ transport?: ShellTransport;
187
+ }): import("react/jsx-runtime").JSX.Element;
188
+ export declare function ShellErrorBoundaryView({ error, onRetry, title, }: {
189
+ error: Error;
190
+ onRetry: () => void;
191
+ title?: string;
192
+ }): import("react/jsx-runtime").JSX.Element;
193
+ export {};
194
+ //# sourceMappingURL=workbench.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbench.d.ts","sourceRoot":"","sources":["../src/workbench.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,378 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { createContext, startTransition, useContext, useEffect, useMemo, useState, } from "react";
4
+ import { QueryCache, QueryClient, QueryClientProvider, useQueries, useQueryClient, } from "@tanstack/react-query";
5
+ import { RefreshCcwIcon } from "lucide-react";
6
+ import { AppShell } from "./components/shell/app-shell.js";
7
+ import { SidebarActionRow } from "./components/shell/primitives/sidebar-action-row.js";
8
+ import { SidebarFrame } from "./components/shell/primitives/sidebar-frame.js";
9
+ import { SidebarNewButton } from "./components/shell/primitives/sidebar-new-button.js";
10
+ import { SidebarSection } from "./components/shell/primitives/sidebar-section.js";
11
+ import { WorkspaceFormHeader, WorkspacePageFrame, } from "./components/shell/primitives/workspace-page.js";
12
+ import { InspectorField, InspectorValue, } from "./components/shell/primitives/inspector-panel.js";
13
+ import { ThemeProvider } from "./hooks/use-theme.js";
14
+ import { useShellRegistry } from "./hooks/shell/shell-registry-provider.js";
15
+ import { useShellStore } from "./hooks/shell/use-shell-store.js";
16
+ import { createShellApiClient, } from "./lib/shell/api.js";
17
+ import { logger } from "./lib/infra/logger.js";
18
+ import { Button } from "./components/ui/button.js";
19
+ import { Input } from "./components/ui/input.js";
20
+ import { Textarea } from "./components/ui/textarea.js";
21
+ import { TooltipProvider } from "./components/ui/tooltip.js";
22
+ import { EmptyState, ErrorState, LoadingState, } from "./components/system/async-state.js";
23
+ import { StatusDot } from "./components/system/status.js";
24
+ import { cn } from "./lib/utils.js";
25
+ const queryLog = logger.named("query");
26
+ const WorkbenchContext = createContext(null);
27
+ function read(value, ctx) {
28
+ return typeof value === "function"
29
+ ? value(ctx)
30
+ : value;
31
+ }
32
+ export function defineWorkbenchTab(sectionId, tab) {
33
+ return {
34
+ ...tab,
35
+ sectionId,
36
+ mode: sectionId,
37
+ label: tab.title,
38
+ };
39
+ }
40
+ export function defineWorkbenchApp(app) {
41
+ if (app.sections.length === 0) {
42
+ throw new Error("Shell apps must define at least one section.");
43
+ }
44
+ const sectionIds = app.sections.map((section) => section.id);
45
+ if (new Set(sectionIds).size !== sectionIds.length) {
46
+ throw new Error("Shell sections must have unique ids.");
47
+ }
48
+ return app;
49
+ }
50
+ function createQueryClient() {
51
+ return new QueryClient({
52
+ queryCache: new QueryCache({
53
+ onError: (error, query) => {
54
+ queryLog
55
+ .event("query.error")
56
+ .setError(error)
57
+ .set("queryKey", JSON.stringify(query.queryKey))
58
+ .send();
59
+ },
60
+ }),
61
+ defaultOptions: {
62
+ queries: {
63
+ staleTime: 30000,
64
+ retry: 2,
65
+ refetchOnWindowFocus: true,
66
+ },
67
+ },
68
+ });
69
+ }
70
+ export function ShellWorkbench({ app, initialSectionId, transport, }) {
71
+ const [queryClient] = useState(createQueryClient);
72
+ const runtime = useMemo(() => ({ app, transport }), [app, transport]);
73
+ return (_jsx(QueryClientProvider, { client: queryClient, children: _jsx(ThemeProvider, { children: _jsx(TooltipProvider, { delayDuration: 150, children: _jsx(WorkbenchContext.Provider, { value: runtime, children: _jsx(AppShell, { appTitle: app.title, initialActiveMode: initialSectionId ?? app.sections[0]?.id, workspaces: app.sections.map((section) => toWorkspace(app, section)), children: _jsx(CompactWorkspace, {}) }) }) }) }) }));
74
+ }
75
+ export function ShellErrorBoundaryView({ error, onRetry, title = "Something went wrong", }) {
76
+ return (_jsx(ErrorState, { title: title, description: error.message, action: _jsx(Button, { size: "sm", onClick: onRetry, children: "Try again" }), className: "min-h-[60vh]" }));
77
+ }
78
+ function useWorkbenchRuntime() {
79
+ const runtime = useContext(WorkbenchContext);
80
+ if (!runtime)
81
+ throw new Error("Shell workbench context is not available.");
82
+ return runtime;
83
+ }
84
+ function useApiFetch(app, transport) {
85
+ return useMemo(() => transport ?? createShellApiClient({ baseUrl: app.apiBase }), [app.apiBase, transport]);
86
+ }
87
+ function useWorkbenchContext(section, tab) {
88
+ const { app, transport } = useWorkbenchRuntime();
89
+ const apiFetch = useApiFetch(app, transport);
90
+ const queryClient = useQueryClient();
91
+ const store = useShellStore();
92
+ const [commandSnapshots, setCommandSnapshots] = useState({});
93
+ const resourceEntries = Object.entries(app.resources ?? {});
94
+ const resourceSpecs = resourceEntries.map(([id, resource]) => {
95
+ const emptyCtx = {
96
+ app,
97
+ commands: {},
98
+ resources: {},
99
+ section,
100
+ tab,
101
+ };
102
+ const path = read(resource.path, emptyCtx);
103
+ const enabled = resource.enabled ? read(resource.enabled, emptyCtx) : true;
104
+ const init = resource.init ? read(resource.init, emptyCtx) : undefined;
105
+ return { enabled, id, init, path, resource };
106
+ });
107
+ const resourceQueries = useQueries({
108
+ queries: resourceSpecs.map(({ enabled, id, init, path, resource }) => ({
109
+ queryKey: [app.id, "resource", id, path, init?.method ?? "GET"],
110
+ queryFn: () => apiFetch(path, init),
111
+ enabled,
112
+ staleTime: resource.staleTime,
113
+ })),
114
+ });
115
+ const resources = Object.fromEntries(resourceSpecs.map(({ id }, index) => {
116
+ const query = resourceQueries[index];
117
+ return [
118
+ id,
119
+ {
120
+ data: query.data,
121
+ error: query.error,
122
+ isError: query.isError,
123
+ isLoading: query.isLoading,
124
+ isPending: query.isPending,
125
+ refetch: () => void query.refetch(),
126
+ },
127
+ ];
128
+ }));
129
+ const helpers = {
130
+ closeTab: (id) => store.closeTab(id, { source: "app_shell" }),
131
+ invalidate: (ids) => {
132
+ for (const id of ids) {
133
+ void queryClient.invalidateQueries({
134
+ predicate: (query) => query.queryKey[0] === app.id &&
135
+ query.queryKey[1] === "resource" &&
136
+ (ids.length === 0 || query.queryKey[2] === id),
137
+ });
138
+ }
139
+ },
140
+ openTab: (nextTab, options) => {
141
+ store.setActiveMode(nextTab.sectionId, { source: "app_shell" });
142
+ store.openTab(toInternalTab(nextTab), {
143
+ source: "app_shell",
144
+ preview: options?.preview,
145
+ });
146
+ },
147
+ pinTab: (id) => store.pinTab(id, { source: "app_shell" }),
148
+ };
149
+ const commands = Object.fromEntries(Object.entries(app.commands ?? {}).map(([id, command]) => {
150
+ const snapshot = commandSnapshots[id] ?? {
151
+ data: undefined,
152
+ error: null,
153
+ isError: false,
154
+ isPending: false,
155
+ };
156
+ const runAsync = async (input) => {
157
+ setCommandSnapshots((current) => ({
158
+ ...current,
159
+ [id]: {
160
+ data: current[id]?.data,
161
+ error: null,
162
+ isError: false,
163
+ isPending: true,
164
+ },
165
+ }));
166
+ try {
167
+ const ctx = {
168
+ app,
169
+ commands: {},
170
+ resources,
171
+ section,
172
+ tab,
173
+ };
174
+ const path = read(command.path, ctx);
175
+ const init = command.init ? read(command.init, ctx) : undefined;
176
+ const body = command.body ? command.body(input, ctx) : input;
177
+ const output = await apiFetch(path, {
178
+ method: "POST",
179
+ ...init,
180
+ ...(body == null ? {} : { json: body }),
181
+ });
182
+ setCommandSnapshots((current) => ({
183
+ ...current,
184
+ [id]: {
185
+ data: output,
186
+ error: null,
187
+ isError: false,
188
+ isPending: false,
189
+ },
190
+ }));
191
+ helpers.invalidate(command.invalidates ?? Object.keys(app.resources ?? {}));
192
+ command.onSuccess?.(output, input, helpers);
193
+ return output;
194
+ }
195
+ catch (error) {
196
+ const nextError = error instanceof Error ? error : new Error(String(error));
197
+ setCommandSnapshots((current) => ({
198
+ ...current,
199
+ [id]: {
200
+ data: current[id]?.data,
201
+ error: nextError,
202
+ isError: true,
203
+ isPending: false,
204
+ },
205
+ }));
206
+ throw nextError;
207
+ }
208
+ };
209
+ return [
210
+ id,
211
+ {
212
+ data: snapshot.data,
213
+ error: snapshot.error,
214
+ isError: snapshot.isError,
215
+ isPending: snapshot.isPending,
216
+ run: (input) => {
217
+ void runAsync(input);
218
+ },
219
+ runAsync,
220
+ },
221
+ ];
222
+ }));
223
+ return { app, commands, resources, section, tab };
224
+ }
225
+ function toInternalTab(tab) {
226
+ return {
227
+ ...tab,
228
+ mode: tab.sectionId,
229
+ label: tab.title,
230
+ };
231
+ }
232
+ function toWorkspace(app, section) {
233
+ const Sidebar = () => _jsx(WorkbenchSidebar, { section: section });
234
+ const Workspace = ({ tab }) => {
235
+ if (!tab)
236
+ return _jsx("div", { "aria-label": "No open tab", className: "h-full" });
237
+ return (_jsx(WorkbenchTab, { section: section, tab: ensureWorkbenchTab(section, tab) }));
238
+ };
239
+ const Inspector = section.inspector
240
+ ? ({ tab }) => {
241
+ if (!tab) {
242
+ return _jsx(EmptyState, { title: "No tab selected", description: "" });
243
+ }
244
+ return (_jsx(WorkbenchInspector, { section: section, tab: ensureWorkbenchTab(section, tab) }));
245
+ }
246
+ : undefined;
247
+ return {
248
+ mode: section.id,
249
+ label: section.label,
250
+ icon: section.icon,
251
+ Sidebar,
252
+ Workspace,
253
+ Inspector,
254
+ };
255
+ }
256
+ function ensureWorkbenchTab(section, tab) {
257
+ const known = section.tabs.find((candidate) => candidate.id === tab.id);
258
+ return {
259
+ ...tab,
260
+ sectionId: tab.sectionId ?? tab.mode,
261
+ title: tab.title ?? tab.label,
262
+ target: tab.target,
263
+ ...(known ?? {}),
264
+ };
265
+ }
266
+ function WorkbenchSidebar({ section, }) {
267
+ const store = useShellStore();
268
+ const activeTabId = useShellStore((state) => state.activeTabId);
269
+ const sidebar = section.sidebar;
270
+ const open = (tab, preview) => {
271
+ store.setActiveMode(section.id, { source: "sidebar" });
272
+ store.openTab(toInternalTab(tab), { source: "sidebar", preview });
273
+ };
274
+ return (_jsxs(SidebarFrame, { title: section.label, children: [sidebar?.newItem ? (_jsx(SidebarNewButton, { noun: sidebar.newItem.noun, onClick: () => open(sidebar.newItem.tab, true) })) : null, sidebar?.sections?.map((group) => (_jsx(SidebarSection, { title: group.title, children: group.items.map((item) => (_jsx(SidebarActionRow, { active: activeTabId === item.tab.id, "aria-selected": activeTabId === item.tab.id, description: item.tab.description, icon: item.icon, onClick: () => open(item.tab, (item.openMode ?? "preview") === "preview"), onDoubleClick: () => store.pinTab(item.tab.id, { source: "sidebar" }), role: "tab", title: item.tab.title }, item.tab.id))) }, group.title)))] }));
275
+ }
276
+ function WorkbenchTab({ section, tab, }) {
277
+ const ctx = useWorkbenchContext(section, tab);
278
+ return _jsx(_Fragment, { children: renderNode(read(section.view, ctx), ctx) });
279
+ }
280
+ function WorkbenchInspector({ section, tab, }) {
281
+ const ctx = useWorkbenchContext(section, tab);
282
+ const fields = section.inspector ? read(section.inspector, ctx) : [];
283
+ return (_jsx("div", { className: "space-y-2", children: fields.map((field) => (_jsx(InspectorField, { label: field.label, value: _jsx(InspectorValue, { children: field.value }) }, field.label))) }));
284
+ }
285
+ function renderNode(node, ctx) {
286
+ switch (node.type) {
287
+ case "page":
288
+ return (_jsxs(WorkspacePageFrame, { width: "full", children: [_jsx(WorkspaceFormHeader, { actions: node.actions?.map((action, index) => (_jsx("span", { children: renderNode(action, ctx) }, index))), description: node.description, eyebrow: node.eyebrow, title: String(node.title) }), _jsx("div", { className: "space-y-6", children: node.children?.map((child, index) => (_jsx("div", { children: renderNode(child, ctx) }, index))) })] }));
289
+ case "metrics":
290
+ return (_jsx("div", { className: "grid gap-3 md:grid-cols-2 xl:grid-cols-4", children: node.items.map((item) => (_jsx(Metric, { ...item }, item.title))) }));
291
+ case "columns":
292
+ return (_jsx("div", { className: "grid gap-5 xl:grid-cols-[minmax(0,1fr)_minmax(20rem,0.7fr)]", children: node.children.map((child, index) => (_jsx("div", { children: renderNode(child, ctx) }, index))) }));
293
+ case "stack":
294
+ return (_jsx("div", { className: "space-y-5", children: node.children.map((child, index) => (_jsx("div", { children: renderNode(child, ctx) }, index))) }));
295
+ case "section":
296
+ return (_jsxs("section", { children: [_jsx("h2", { className: "mb-3 text-[13px] font-semibold text-fg", children: node.title }), _jsx("div", { className: "space-y-3", children: node.children.map((child, index) => (_jsx("div", { children: renderNode(child, ctx) }, index))) })] }));
297
+ case "rows":
298
+ return node.rows.length > 0 ? (_jsx("div", { className: "space-y-2", children: node.rows.map((row, index) => (_jsx(DataRow, { ...row }, index))) })) : node.empty ? (_jsx(EmptyState, { title: node.empty.title, description: node.empty.description, className: "min-h-[14rem]" })) : null;
299
+ case "code":
300
+ return (_jsx("pre", { className: "max-h-[32rem] min-h-[22rem] overflow-auto rounded-[10px] border border-border bg-bg-card p-4 font-mono text-[12px] leading-5 text-fg", children: node.content }));
301
+ case "empty":
302
+ return _jsx(EmptyState, { title: node.title, description: node.description });
303
+ case "loading":
304
+ return _jsx(LoadingState, { label: node.label });
305
+ case "error":
306
+ return (_jsx(ErrorState, { title: node.title, description: node.description, action: node.retry ? (_jsxs(Button, { size: "sm", variant: "outline", onClick: node.retry, children: [_jsx(RefreshCcwIcon, { className: "size-3.5" }), "Retry"] })) : undefined }));
307
+ case "button": {
308
+ const command = ctx.commands[node.command];
309
+ return (_jsxs(Button, { disabled: command?.isPending, onClick: () => command?.run(node.input), children: [node.icon, command?.isPending ? "Working..." : node.label] }));
310
+ }
311
+ case "refresh":
312
+ return (_jsxs(Button, { size: "sm", variant: "outline", onClick: () => node.resources.forEach((resourceId) => ctx.resources[resourceId]?.refetch()), children: [node.icon, node.label ?? "Refresh"] }));
313
+ case "open-resource-form":
314
+ return _jsx(OpenResourceForm, { node: node, ctx: ctx });
315
+ case "conversation":
316
+ return _jsx(Conversation, { node: node, ctx: ctx });
317
+ }
318
+ }
319
+ function Metric({ description, title, value }) {
320
+ return (_jsxs("div", { className: "rounded-[10px] border border-border bg-bg-card px-4 py-[14px]", children: [_jsx("p", { className: "mb-1.5 text-[11px] font-medium tracking-[0.06em] text-fg-tertiary uppercase", children: title }), _jsx("p", { className: "font-mono text-[22px] leading-[1.2] font-semibold text-fg", children: value }), description ? (_jsx("p", { className: "mt-1 text-[11.5px] text-fg-tertiary", children: description })) : null] }));
321
+ }
322
+ function DataRow({ detail, meta, status, title }) {
323
+ return (_jsxs("div", { className: "rounded-[10px] border border-border bg-bg-card px-4 py-3", children: [_jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-2 text-[12px] font-medium text-fg", children: [_jsx(StatusDot, { status: status ?? "unknown", className: "shrink-0" }), _jsx("span", { className: "truncate", children: title })] }), meta ? (_jsx("div", { className: "shrink-0 text-[11px] text-fg-tertiary", children: meta })) : null] }), detail ? (_jsx("div", { className: "mt-1 truncate text-[11px] text-fg-tertiary", children: detail })) : null] }));
324
+ }
325
+ function OpenResourceForm({ ctx, node, }) {
326
+ const [value, setValue] = useState(node.defaultValue ?? "");
327
+ const command = ctx.commands[node.command];
328
+ return (_jsxs("div", { className: "max-w-xl space-y-3", children: [_jsx(Input, { "aria-label": node.fieldLabel, onChange: (event) => setValue(event.target.value), value: value }), _jsx(Button, { className: "w-full", disabled: command?.isPending || value.trim().length === 0, onClick: () => command?.run(value), children: command?.isPending ? "Opening..." : node.buttonLabel }), command?.isError ? (_jsx("div", { className: "rounded-md border border-destructive/30 bg-destructive/8 px-3 py-2 text-[12px] text-fg", children: command.error?.message ?? "Command failed." })) : null] }));
329
+ }
330
+ function Conversation({ ctx, node, }) {
331
+ const command = ctx.commands[node.command];
332
+ const defaultMessage = node.defaultMessage ?? "";
333
+ const [message, setMessage] = useState(defaultMessage);
334
+ const [turns, setTurns] = useState([]);
335
+ useEffect(() => {
336
+ if (message === defaultMessage)
337
+ return;
338
+ if (message.trim().length === 0)
339
+ return;
340
+ useShellStore.getState().pinTab(ctx.tab.id, { source: "app_shell" });
341
+ }, [ctx.tab.id, defaultMessage, message]);
342
+ const submit = () => {
343
+ const nextMessage = message.trim();
344
+ if (!nextMessage || !command)
345
+ return;
346
+ setTurns((current) => [...current, { role: "user", content: nextMessage }]);
347
+ command
348
+ .runAsync({ message: nextMessage })
349
+ .then((result) => {
350
+ const output = node.output
351
+ ? node.output(result)
352
+ : typeof result === "string"
353
+ ? result
354
+ : JSON.stringify(result, null, 2);
355
+ setTurns((current) => [
356
+ ...current,
357
+ { role: "assistant", content: output || "No output." },
358
+ ]);
359
+ startTransition(() => useShellStore.getState().pinTab(ctx.tab.id));
360
+ })
361
+ .catch((error) => {
362
+ setTurns((current) => [
363
+ ...current,
364
+ { role: "assistant", content: error.message },
365
+ ]);
366
+ });
367
+ };
368
+ return (_jsxs("div", { className: "grid min-h-[34rem] gap-4 lg:grid-cols-[minmax(0,1fr)_320px]", children: [_jsxs("div", { className: "flex min-h-0 flex-col rounded-[10px] border border-border bg-bg-card", children: [_jsx("div", { className: "min-h-0 flex-1 overflow-y-auto p-4", children: turns.length === 0 && !command?.data ? (_jsx(EmptyState, { title: node.emptyTitle, description: node.emptyDescription, className: "min-h-[22rem]" })) : (_jsx("div", { className: "space-y-3", children: turns.map((turn, index) => (_jsxs("div", { className: cn("rounded-lg border px-3 py-2 text-[13px] leading-6", turn.role === "user"
369
+ ? "border-primary/25 bg-primary/8"
370
+ : "border-border bg-bg-elevated"), children: [_jsx("div", { className: "mb-1 text-[11px] font-semibold tracking-[0.06em] text-fg-tertiary uppercase", children: turn.role }), _jsx("pre", { className: "whitespace-pre-wrap font-sans text-fg", children: turn.content })] }, `${turn.role}-${index}`))) })) }), _jsxs("div", { className: "border-t border-border p-3", children: [_jsx(Textarea, { className: "min-h-24 resize-none", onChange: (event) => setMessage(event.target.value), value: message }), _jsx("div", { className: "mt-3 flex items-center justify-end gap-3", children: _jsx(Button, { disabled: command?.isPending || message.trim().length === 0, onClick: submit, children: "Send" }) })] })] }), node.side ? (_jsx("div", { className: "space-y-3", children: node.side.map((child, index) => (_jsx("div", { children: renderNode(child, ctx) }, index))) })) : null] }));
371
+ }
372
+ function CompactWorkspace() {
373
+ const { activeTabWorkspace, activeModeWorkspace, activeTab } = useShellRegistry();
374
+ const Workspace = activeTabWorkspace?.Workspace ?? activeModeWorkspace?.Workspace ?? null;
375
+ const tab = activeTabWorkspace ? activeTab : null;
376
+ return Workspace ? _jsx(Workspace, { tab: tab }) : null;
377
+ }
378
+ //# sourceMappingURL=workbench.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbench.js","sourceRoot":"","sources":["../src/workbench.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@elench/shell",
3
- "version": "0.1.8",
4
- "description": "The Avocado-derived Elench desktop shell packaged behind a public domain API.",
3
+ "version": "0.1.10",
4
+ "description": "Reusable Elench desktop shell packaged behind a public domain API.",
5
5
  "type": "module",
6
6
  "private": false,
7
7
  "sideEffects": [
@@ -20,6 +20,7 @@
20
20
  },
21
21
  "scripts": {
22
22
  "build": "rm -rf dist && tsc -p tsconfig.json && cp src/styles.css dist/styles.css && node scripts/rewrite-dist-imports.mjs",
23
+ "prepack": "npm run build",
23
24
  "typecheck": "tsc -p tsconfig.json --noEmit",
24
25
  "test": "vitest run --config vitest.config.ts"
25
26
  },
@@ -29,6 +30,7 @@
29
30
  "react-dom": "^19.0.0"
30
31
  },
31
32
  "dependencies": {
33
+ "@tanstack/react-query": "^5.97.0",
32
34
  "class-variance-authority": "^0.7.1",
33
35
  "clsx": "^2.1.1",
34
36
  "cmdk": "^1.1.1",