@hachej/boring-workspace 0.1.63 → 0.1.64

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/dist/testing.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { jsx as Ba } from "react/jsx-runtime";
2
2
  import * as Pa from "react";
3
3
  import { createElement as is, useMemo as wn, useLayoutEffect as us, isValidElement as ss, cloneElement as ds, useSyncExternalStore as Gi } from "react";
4
- import { i as cs, O as fs, x as ps, v as ms } from "./WorkspaceProvider-U4izhS84.js";
4
+ import { i as cs, O as fs, x as ps, v as ms } from "./WorkspaceProvider-CEZUOy1M.js";
5
5
  import * as bs from "react-dom/test-utils";
6
6
  import ka from "react-dom";
7
7
  import * as xn from "react-dom/client";
@@ -2048,6 +2048,13 @@
2048
2048
  margin-block-end: calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)));
2049
2049
  }
2050
2050
  }
2051
+ .space-y-1\.5 {
2052
+ :where(& > :not(:last-child)) {
2053
+ --tw-space-y-reverse: 0;
2054
+ margin-block-start: calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));
2055
+ margin-block-end: calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)));
2056
+ }
2057
+ }
2051
2058
  .space-y-2 {
2052
2059
  :where(& > :not(:last-child)) {
2053
2060
  --tw-space-y-reverse: 0;
@@ -2393,6 +2400,12 @@
2393
2400
  background-color: color-mix(in oklab, var(--boring-muted) 40%, transparent);
2394
2401
  }
2395
2402
  }
2403
+ .bg-muted\/45 {
2404
+ background-color: var(--boring-muted);
2405
+ @supports (color: color-mix(in lab, red, red)) {
2406
+ background-color: color-mix(in oklab, var(--boring-muted) 45%, transparent);
2407
+ }
2408
+ }
2396
2409
  .bg-muted\/50 {
2397
2410
  background-color: var(--boring-muted);
2398
2411
  @supports (color: color-mix(in lab, red, red)) {
@@ -3586,6 +3599,16 @@
3586
3599
  opacity: 60%;
3587
3600
  }
3588
3601
  }
3602
+ .aria-pressed\:bg-muted {
3603
+ &[aria-pressed="true"] {
3604
+ background-color: var(--boring-muted);
3605
+ }
3606
+ }
3607
+ .aria-pressed\:text-foreground {
3608
+ &[aria-pressed="true"] {
3609
+ color: var(--boring-foreground);
3610
+ }
3611
+ }
3589
3612
  .aria-selected\:bg-\[color\:oklch\(from_var\(--accent\)_l_c_h\/0\.10\)\] {
3590
3613
  &[aria-selected="true"] {
3591
3614
  background-color: oklch(from var(--accent) l c h/0.10);
@@ -390,6 +390,8 @@ export declare interface ChatLayoutProps {
390
390
  center?: string;
391
391
  centerParams?: Record<string, unknown>;
392
392
  chatPanes?: ChatPaneDescriptor[];
393
+ /** Optional host actions rendered in the active chat pane header. */
394
+ chatTopActions?: ReactNode;
393
395
  activeChatPaneId?: string | null;
394
396
  onActiveChatPaneChange?: (id: string) => void;
395
397
  onCloseChatPane?: (id: string) => void;
@@ -733,7 +735,7 @@ declare class FetchClient {
733
735
  private retryBaseMs;
734
736
  constructor(opts: FetchClientOptions);
735
737
  private request;
736
- getTree(path: string, signal?: AbortSignal): Promise<FileEntry[]>;
738
+ getTree(path: string, signal?: AbortSignal, filesystem?: string): Promise<FileEntry[]>;
737
739
  getFile(path: string, signal?: AbortSignal, filesystem?: string): Promise<FileContent>;
738
740
  /**
739
741
  * Write file content. When `expectedMtimeMs` is supplied, the server
@@ -800,6 +802,8 @@ declare class FileConflictError extends Error {
800
802
 
801
803
  declare interface FileContent {
802
804
  content: string;
805
+ /** Access granted by the resolved filesystem binding, when the server exposes it. */
806
+ access?: "readonly" | "readwrite";
803
807
  /**
804
808
  * Server-stat'd modification time. Used as the OCC baseline for the
805
809
  * next write — the client sends it back as `expectedMtimeMs` so the
@@ -934,7 +938,7 @@ export declare interface FileTreeNode {
934
938
  * `<FileTreeView>`. Drop into a dockview registry as-is, or compose
935
939
  * `FileTreeView` directly when you want different chrome/search UX.
936
940
  */
937
- export declare function FileTreePane({ params, rootDir, searchQuery: controlledSearchQuery, panelApi, bridge, api, chromeless, className, }: FileTreePaneProps): JSX.Element;
941
+ export declare function FileTreePane({ params, rootDir, searchQuery: controlledSearchQuery, panelApi, bridge, api, chromeless, filesystem, access, roots, className, }: FileTreePaneProps): JSX.Element;
938
942
 
939
943
  declare interface FileTreePaneParams extends LeftTabParams {
940
944
  rootDir?: string;
@@ -942,6 +946,9 @@ declare interface FileTreePaneParams extends LeftTabParams {
942
946
  query?: string;
943
947
  bridge?: unknown;
944
948
  chromeless?: boolean;
949
+ filesystem?: FilesystemId;
950
+ access?: "readonly" | "readwrite";
951
+ roots?: FileTreeRootConfig[];
945
952
  revealFileTreeRequest?: {
946
953
  path: string;
947
954
  seq: number;
@@ -954,6 +961,9 @@ export declare interface FileTreePaneProps extends Partial<PaneProps<FileTreePan
954
961
  panelApi?: DockviewPanelApi;
955
962
  bridge?: FileTreeBridge;
956
963
  chromeless?: boolean;
964
+ filesystem?: FilesystemId;
965
+ access?: "readonly" | "readwrite";
966
+ roots?: FileTreeRootConfig[];
957
967
  className?: string;
958
968
  }
959
969
 
@@ -982,6 +992,14 @@ export declare interface FileTreeProps {
982
992
  className?: string;
983
993
  }
984
994
 
995
+ declare interface FileTreeRootConfig {
996
+ filesystem: FilesystemId;
997
+ label: string;
998
+ rootDir?: string;
999
+ access?: "readonly" | "readwrite";
1000
+ searchPlaceholder?: string;
1001
+ }
1002
+
985
1003
  /**
986
1004
  * File tree with the full workbench actions: tracks container height,
987
1005
  * routes selects through `bridge.openFile`, and provides a right-click
@@ -993,7 +1011,7 @@ export declare interface FileTreeProps {
993
1011
  * want a "Files" panel; `WorkbenchLeftPane` uses this primitive directly to
994
1012
  * share its search input with the Data tab.
995
1013
  */
996
- export declare function FileTreeView({ rootDir, searchQuery, bridge, revealFileTreeRequest, ignoreNames, className, }: FileTreeViewProps): JSX.Element;
1014
+ export declare function FileTreeView({ rootDir, searchQuery, bridge, revealFileTreeRequest, filesystem, access, ignoreNames, className, }: FileTreeViewProps): JSX.Element;
997
1015
 
998
1016
  export declare interface FileTreeViewProps {
999
1017
  rootDir?: string;
@@ -1004,6 +1022,8 @@ export declare interface FileTreeViewProps {
1004
1022
  path: string;
1005
1023
  seq: number;
1006
1024
  } | null;
1025
+ filesystem?: FilesystemId;
1026
+ access?: "readonly" | "readwrite";
1007
1027
  /**
1008
1028
  * Names (or regex patterns) to hide from the tree. Defaults to
1009
1029
  * `DEFAULT_TREE_IGNORE` (node_modules, .git, dist, …). Pass `[]` to
@@ -1083,7 +1103,7 @@ export declare interface LeftTabParams {
1083
1103
  } | null;
1084
1104
  }
1085
1105
 
1086
- export declare function MarkdownEditor({ content, onChange, readOnly, placeholder, className, documentPath, }: MarkdownEditorProps): JSX.Element;
1106
+ export declare function MarkdownEditor({ content, onChange, readOnly, placeholder, className, documentPath, filesystem: rawFilesystem, }: MarkdownEditorProps): JSX.Element;
1087
1107
 
1088
1108
  export declare function MarkdownEditorPane({ params, api, className }: MarkdownEditorPaneProps): JSX.Element;
1089
1109
 
@@ -1101,6 +1121,8 @@ export declare interface MarkdownEditorProps {
1101
1121
  className?: string;
1102
1122
  /** Workspace-relative markdown file path, used to make uploaded image links relative. */
1103
1123
  documentPath?: string;
1124
+ /** Filesystem identity for relative markdown links/assets. Defaults to user. */
1125
+ filesystem?: FilesystemId;
1104
1126
  }
1105
1127
 
1106
1128
  export declare const MAX_PANELS = 50;
@@ -1140,7 +1162,9 @@ export declare function onFilesystemChanged(handler: (payload: FilesystemEventMe
1140
1162
  path: string;
1141
1163
  }) => void): () => void;
1142
1164
 
1143
- export declare type OpenArtifactHandler = (path: string) => void;
1165
+ export declare type OpenArtifactHandler = (path: string, options?: {
1166
+ filesystem?: FilesystemId;
1167
+ }) => void;
1144
1168
 
1145
1169
  export declare const openFileSchema: z.ZodObject<{
1146
1170
  path: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
@@ -1892,6 +1916,7 @@ export declare interface UseFilePaneReturn {
1892
1916
  error: Error | null;
1893
1917
  content: string | null;
1894
1918
  isDirty: boolean;
1919
+ isReadonly: boolean;
1895
1920
  conflict: FileConflictError | null;
1896
1921
  onReloadFromServer: () => Promise<void>;
1897
1922
  onOverwrite: () => Promise<void>;
@@ -2137,8 +2162,9 @@ export declare interface WorkspaceBridgeContextValue {
2137
2162
 
2138
2163
  export declare type WorkspaceChatPanelComponent = ComponentType<any>;
2139
2164
 
2140
- export declare interface WorkspaceChatPanelProps extends PiChatPanelProps<WorkspaceAttentionBlocker> {
2165
+ export declare interface WorkspaceChatPanelProps extends Omit<PiChatPanelProps<WorkspaceAttentionBlocker>, "onOpenArtifact"> {
2141
2166
  sessionId: string;
2167
+ onOpenArtifact?: OpenArtifactHandler;
2142
2168
  /** Endpoint base for agent → visible-workbench UI commands. */
2143
2169
  bridgeEndpoint?: string | null;
2144
2170
  /** Imperative handle getter for the visible workbench surface. */
package/dist/workspace.js CHANGED
@@ -1,16 +1,16 @@
1
1
  var X = Object.defineProperty;
2
2
  var Q = (e, t, a) => t in e ? X(e, t, { enumerable: !0, configurable: !0, writable: !0, value: a }) : e[t] = a;
3
3
  var T = (e, t, a) => Q(e, typeof t != "symbol" ? t + "" : t, a);
4
- import { u as D, p as Y, a as Z, b as ee, D as te } from "./WorkspaceProvider-U4izhS84.js";
5
- import { A as qe, C as Je, c as Ve, d as Ge, e as Xe, f as Qe, F as Ye, g as Ze, M as et, h as tt, P as at, i as rt, j as nt, k as st, l as ot, R as it, S as lt, m as ct, n as dt, T as ut, U as pt, W as mt, o as ft, q as ht, r as gt, s as yt, t as bt, v as kt, w as St, x as vt, y as Pt, z as xt, B as wt, E as Ct, G as Et, H as Nt, I as Rt, J as Tt, K as Ot, L as It, N as Wt, O as Ft, Q as Lt, V as Mt, X as Bt, Y as Kt, Z as _t, _ as Dt, $ as At, a0 as $t, a1 as jt, a2 as zt, a3 as Ht, a4 as Ut, a5 as qt, a6 as Jt, a7 as Vt, a8 as Gt, a9 as Xt, aa as Qt, ab as Yt, ac as Zt, ad as ea, ae as ta, af as aa, ag as ra, ah as na, ai as sa, aj as oa, ak as ia, al as la, am as ca, an as da, ao as ua, ap as pa, aq as ma, ar as fa, as as ha, at as ga, au as ya, av as ba, aw as ka, ax as Sa, ay as va, az as Pa, aA as xa, aB as wa, aC as Ca, aD as Ea, aE as Na, aF as Ra, aG as Ta, aH as Oa, aI as Ia, aJ as Wa, aK as Fa, aL as La, aM as Ma } from "./WorkspaceProvider-U4izhS84.js";
4
+ import { u as D, p as Y, a as Z, b as ee, D as te } from "./WorkspaceProvider-CEZUOy1M.js";
5
+ import { A as qe, C as Je, c as Ve, d as Ge, e as Xe, f as Qe, F as Ye, g as Ze, M as et, h as tt, P as at, i as rt, j as nt, k as st, l as ot, R as it, S as lt, m as ct, n as dt, T as ut, U as pt, W as mt, o as ft, q as ht, r as gt, s as yt, t as bt, v as kt, w as St, x as vt, y as Pt, z as xt, B as wt, E as Ct, G as Et, H as Nt, I as Rt, J as Tt, K as Ot, L as It, N as Wt, O as Ft, Q as Lt, V as Mt, X as Bt, Y as Kt, Z as _t, _ as Dt, $ as At, a0 as $t, a1 as jt, a2 as zt, a3 as Ht, a4 as Ut, a5 as qt, a6 as Jt, a7 as Vt, a8 as Gt, a9 as Xt, aa as Qt, ab as Yt, ac as Zt, ad as ea, ae as ta, af as aa, ag as ra, ah as na, ai as sa, aj as oa, ak as ia, al as la, am as ca, an as da, ao as ua, ap as pa, aq as ma, ar as fa, as as ha, at as ga, au as ya, av as ba, aw as ka, ax as Sa, ay as va, az as Pa, aA as xa, aB as wa, aC as Ca, aD as Ea, aE as Na, aF as Ra, aG as Ta, aH as Oa, aI as Ia, aJ as Wa, aK as Fa, aL as La, aM as Ma } from "./WorkspaceProvider-CEZUOy1M.js";
6
6
  import { c as C } from "./utils-B6yFEsav.js";
7
- import { C as Ka, T as _a, W as Da, b as Aa } from "./WorkspaceLoadingState-y087Q6ek.js";
7
+ import { C as Ka, T as _a, W as Da, b as Aa } from "./WorkspaceLoadingState-D4SB2awA.js";
8
8
  import { jsx as r, jsxs as g, Fragment as ae } from "react/jsx-runtime";
9
9
  import { Button as x, Sheet as re, SheetContent as ne, SheetHeader as se, SheetTitle as oe, SheetDescription as ie, EmptyState as le, Kbd as O, ErrorState as ce, IconButton as I } from "@hachej/boring-ui-kit";
10
10
  import { Toaster as ja, dismissToast as za, toast as Ha } from "@hachej/boring-ui-kit";
11
11
  import { useSyncExternalStore as A, useState as E, useEffect as v, useRef as w, useCallback as y, useMemo as P, Suspense as de, Component as ue } from "react";
12
- import { FileTree as qa } from "./FileTree-CUvn5K86.js";
13
- import { MarkdownEditor as Va } from "./MarkdownEditor-5f4lhBqc.js";
12
+ import { FileTree as qa } from "./FileTree-DjhAzlg3.js";
13
+ import { MarkdownEditor as Va } from "./MarkdownEditor-CeN7n6mw.js";
14
14
  import { MenuIcon as pe, PanelLeftIcon as M, PinIcon as me, CheckIcon as fe, CopyIcon as he } from "lucide-react";
15
15
  function Me() {
16
16
  const e = D();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hachej/boring-workspace",
3
- "version": "0.1.63",
3
+ "version": "0.1.64",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "Workspace UI, plugin, and bridge package for composing chat, files, catalogs, editors, and app-specific panes.",
@@ -139,9 +139,9 @@
139
139
  "tailwind-merge": "^2.0.0",
140
140
  "zod": "^3.23.0",
141
141
  "zustand": "^5.0.0",
142
- "@hachej/boring-agent": "0.1.63",
143
- "@hachej/boring-ui-kit": "0.1.63",
144
- "@hachej/boring-ui-plugin-cli": "0.1.63"
142
+ "@hachej/boring-agent": "0.1.64",
143
+ "@hachej/boring-ui-plugin-cli": "0.1.64",
144
+ "@hachej/boring-ui-kit": "0.1.64"
145
145
  },
146
146
  "devDependencies": {
147
147
  "@tailwindcss/postcss": "^4.0.0",