sh3-core 0.22.5 → 0.23.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/api.d.ts +1 -1
  2. package/dist/api.js +1 -1
  3. package/dist/app/admin/adminApp.js +2 -0
  4. package/dist/app/admin/adminShard.svelte.js +1 -0
  5. package/dist/app/store/storeApp.js +3 -1
  6. package/dist/app/store/storeShard.svelte.js +1 -0
  7. package/dist/app-appearance/appearanceShard.svelte.js +1 -0
  8. package/dist/apps/lifecycle.js +22 -10
  9. package/dist/apps/lifecycle.test.js +53 -1
  10. package/dist/apps/types.d.ts +9 -0
  11. package/dist/chrome/CompactChrome.svelte +11 -7
  12. package/dist/createShell.js +40 -0
  13. package/dist/documents/picker-api.test.js +40 -0
  14. package/dist/documents/picker-primitive.d.ts +39 -1
  15. package/dist/documents/picker-primitive.js +5 -4
  16. package/dist/host.js +30 -7
  17. package/dist/layout/slotHostPool.svelte.d.ts +11 -0
  18. package/dist/layout/slotHostPool.svelte.js +41 -17
  19. package/dist/layout/slotHostPool.test.js +45 -1
  20. package/dist/layouts-shard/layoutsShard.svelte.js +1 -0
  21. package/dist/overlays/OverlayRoots.svelte +15 -4
  22. package/dist/overlays/__test__/OverlayBindHarness.svelte +20 -0
  23. package/dist/overlays/__test__/OverlayBindHarness.svelte.d.ts +3 -0
  24. package/dist/overlays/float-compact-bind.svelte.test.d.ts +1 -0
  25. package/dist/overlays/float-compact-bind.svelte.test.js +51 -0
  26. package/dist/overlays/modal.js +3 -0
  27. package/dist/overlays/modal.test.js +45 -0
  28. package/dist/overlays/types.d.ts +9 -0
  29. package/dist/primitives/widgets/ShardPicker.svelte +38 -0
  30. package/dist/primitives/widgets/ShardPicker.svelte.d.ts +9 -0
  31. package/dist/primitives/widgets/_DocumentBrowser.svelte +11 -3
  32. package/dist/primitives/widgets/_DocumentBrowser.svelte.d.ts +2 -0
  33. package/dist/projects/scope-gate.d.ts +4 -0
  34. package/dist/projects/scope-gate.js +51 -0
  35. package/dist/projects/scope-gate.test.d.ts +1 -0
  36. package/dist/projects/scope-gate.test.js +92 -0
  37. package/dist/projects-shard/ProjectManage.svelte +42 -2
  38. package/dist/projects-shard/ProjectManage.svelte.test.js +10 -9
  39. package/dist/projects-shard/projectsApi.d.ts +3 -2
  40. package/dist/projects-shard/projectsApi.test.js +1 -1
  41. package/dist/projects-shard/projectsShard.svelte.js +1 -0
  42. package/dist/runtime/runVerb.d.ts +9 -0
  43. package/dist/runtime/runVerb.js +4 -4
  44. package/dist/runtime/runVerb.test.js +29 -0
  45. package/dist/sh3Api/headless.d.ts +7 -0
  46. package/dist/sh3Api/headless.js +3 -1
  47. package/dist/sh3Api/headless.svelte.test.js +42 -0
  48. package/dist/sh3core-shard/Sh3Home.svelte +3 -3
  49. package/dist/sh3core-shard/sh3coreShard.svelte.js +1 -0
  50. package/dist/shards/lifecycle.svelte.d.ts +8 -2
  51. package/dist/shards/lifecycle.svelte.js +65 -7
  52. package/dist/shards/lifecycle.test.js +110 -1
  53. package/dist/shards/types.d.ts +13 -0
  54. package/dist/shell-shard/Terminal.svelte +1 -4
  55. package/dist/shell-shard/Terminal.svelte.d.ts +0 -2
  56. package/dist/shell-shard/dispatch.d.ts +0 -2
  57. package/dist/shell-shard/dispatch.js +0 -2
  58. package/dist/shell-shard/display-cwd.test.js +4 -4
  59. package/dist/shell-shard/manifest.js +1 -0
  60. package/dist/shell-shard/shellShard.svelte.d.ts +1 -1
  61. package/dist/shell-shard/shellShard.svelte.js +9 -4
  62. package/dist/shell-shard/verbs/cat.js +3 -3
  63. package/dist/shell-shard/verbs/cat.test.js +1 -2
  64. package/dist/shell-shard/verbs/ls.js +2 -2
  65. package/dist/shell-shard/verbs/ls.test.js +1 -2
  66. package/dist/shell-shard/verbs/mkdir.js +3 -3
  67. package/dist/shell-shard/verbs/mkdir.test.js +1 -2
  68. package/dist/shell-shard/verbs/mv.js +3 -3
  69. package/dist/shell-shard/verbs/mv.test.js +1 -2
  70. package/dist/shell-shard/verbs/rm.js +3 -3
  71. package/dist/shell-shard/verbs/rm.test.js +1 -2
  72. package/dist/shell-shard/verbs/xfer.js +5 -5
  73. package/dist/shell-shard/verbs/xfer.test.js +2 -2
  74. package/dist/verbs/types.d.ts +10 -2
  75. package/dist/version.d.ts +1 -1
  76. package/dist/version.js +1 -1
  77. package/package.json +1 -1
@@ -4,7 +4,6 @@ import type { TenantFsClient } from './tenant-fs-client';
4
4
  import type { ModeBuffer } from './mode-buffer.svelte';
5
5
  import type { ShellMode, ShellRole } from './modes/types';
6
6
  import type { ShellModeDescriptor } from './contract';
7
- import type { BrowseCapability } from '../documents/browse';
8
7
  export interface DispatchDeps {
9
8
  mode: () => ShellMode;
10
9
  /** Current shell role — used by invoke() role-gating. */
@@ -19,7 +18,6 @@ export interface DispatchDeps {
19
18
  session: SessionClient;
20
19
  sh3: Sh3Api;
21
20
  fs: TenantFsClient;
22
- docs?: BrowseCapability;
23
21
  cwd: () => string;
24
22
  /**
25
23
  * Acquire a busy indicator. Returns a clear handle. Calling clear()
@@ -39,7 +39,6 @@ export function makeDispatch(deps) {
39
39
  cwd: deps.cwd(),
40
40
  dispatch,
41
41
  fs: deps.fs,
42
- docs: deps.docs,
43
42
  }, resolution.args);
44
43
  return;
45
44
  }
@@ -108,7 +107,6 @@ export function makeDispatch(deps) {
108
107
  cwd: deps.cwd(),
109
108
  dispatch,
110
109
  fs: deps.fs,
111
- docs: deps.docs,
112
110
  }, resolution.args);
113
111
  }
114
112
  catch (err) {
@@ -2,19 +2,19 @@ import { describe, it, expect } from 'vitest';
2
2
  import { shortenCwd } from './display-cwd';
3
3
  describe('shortenCwd', () => {
4
4
  it('returns ~ when cwd equals tenant root', () => {
5
- expect(shortenCwd('/home/u/data/users/x/documents/shell', '/home/u/data/users/x/documents/shell')).toBe('~');
5
+ expect(shortenCwd('/home/u/data/docs/x', '/home/u/data/docs/x')).toBe('~');
6
6
  });
7
7
  it('substitutes ~ for tenant-root prefix (POSIX)', () => {
8
- expect(shortenCwd('/home/u/data/users/x/documents/shell/notes', '/home/u/data/users/x/documents/shell')).toBe('~/notes');
8
+ expect(shortenCwd('/home/u/data/docs/x/notes', '/home/u/data/docs/x')).toBe('~/notes');
9
9
  });
10
10
  it('substitutes ~ for tenant-root prefix (Windows)', () => {
11
- expect(shortenCwd('C:\\a\\b\\users\\x\\documents\\shell\\notes', 'C:\\a\\b\\users\\x\\documents\\shell')).toBe('~/notes');
11
+ expect(shortenCwd('C:\\a\\b\\docs\\x\\notes', 'C:\\a\\b\\docs\\x')).toBe('~/notes');
12
12
  });
13
13
  it('normalizes Windows backslashes to forward slashes after the tilde', () => {
14
14
  expect(shortenCwd('C:\\root\\a\\b\\c', 'C:\\root')).toBe('~/a/b/c');
15
15
  });
16
16
  it('returns the absolute cwd when outside the tenant root', () => {
17
- expect(shortenCwd('/tmp', '/home/u/data/users/x/documents/shell')).toBe('/tmp');
17
+ expect(shortenCwd('/tmp', '/home/u/data/docs/x')).toBe('/tmp');
18
18
  });
19
19
  it('does not match when cwd matches the tenant root prefix without a separator boundary', () => {
20
20
  // tenant=/foo, cwd=/foobar → must NOT shorten to ~bar
@@ -5,6 +5,7 @@ export const manifest = {
5
5
  id: 'shell',
6
6
  label: 'Sh3',
7
7
  version: VERSION,
8
+ kind: 'system',
8
9
  views: [{ id: 'shell:terminal', label: 'Sh3', standalone: true }],
9
10
  // serverBundle intentionally omitted — this shard is a framework built-in
10
11
  // and is statically mounted at sh3-server boot. The existing contract in
@@ -1,3 +1,3 @@
1
1
  import type { Shard } from '../api';
2
- export { makeSh3ApiHeadless, makeSh3ApiForTest } from '../sh3Api/headless';
2
+ export { makeSh3ApiForTest } from '../sh3Api/headless';
3
3
  export declare const shellShard: Shard;
@@ -20,18 +20,23 @@ import { mount, unmount } from 'svelte';
20
20
  import { manifest } from './manifest';
21
21
  import Terminal from './Terminal.svelte';
22
22
  import { registerV1Verbs } from './verbs';
23
- import { makeSh3ApiHeadless } from '../sh3Api/headless';
23
+ import { makeSh3Api } from '../sh3Api/headless';
24
24
  import { focusView } from '../layout/inspection';
25
25
  import { floatManager } from '../overlays/float';
26
26
  import { getUser, isAdmin } from '../auth/index';
27
27
  import { __bindZone, __unbindZone } from './buffer-zone-state.svelte';
28
28
  import { getAuthToken } from '../transport/authToken';
29
- export { makeSh3ApiHeadless, makeSh3ApiForTest } from '../sh3Api/headless';
29
+ export { makeSh3ApiForTest } from '../sh3Api/headless';
30
30
  export const shellShard = {
31
31
  manifest,
32
32
  register(ctx) {
33
33
  registerV1Verbs(ctx);
34
- const shell = makeSh3ApiHeadless(ctx.zones);
34
+ const shell = makeSh3Api({
35
+ callerKind: 'shard',
36
+ callerShardId: 'shell',
37
+ zones: ctx.zones,
38
+ docs: ctx.browse,
39
+ });
35
40
  // Bind the shell-shard's workspace zone — backs scrollback persistence
36
41
  // (SH8). BufferStore reads/writes through this proxy.
37
42
  const zone = ctx.state({
@@ -73,7 +78,7 @@ export const shellShard = {
73
78
  const role = isAdmin() ? 'admin' : 'user';
74
79
  const instance = mount(Terminal, {
75
80
  target: container,
76
- props: { shell, wsUrl, userId, role, contributions: ctx.contributions, docs: ctx.browse },
81
+ props: { shell, wsUrl, userId, role, contributions: ctx.contributions },
77
82
  });
78
83
  return {
79
84
  unmount() {
@@ -5,7 +5,7 @@ export const catVerb = {
5
5
  programmatic: true,
6
6
  async run(ctx, args) {
7
7
  const ts = Date.now();
8
- if (!ctx.docs) {
8
+ if (!ctx.sh3.docs) {
9
9
  ctx.scrollback.push({ kind: 'status', text: 'cat: document capability not available', level: 'error', ts });
10
10
  return;
11
11
  }
@@ -18,11 +18,11 @@ export const catVerb = {
18
18
  ctx.scrollback.push({ kind: 'status', text: `cat: invalid path '${args[0]}'`, level: 'error', ts });
19
19
  return;
20
20
  }
21
- if (!ctx.docs.readFrom) {
21
+ if (!ctx.sh3.docs.readFrom) {
22
22
  ctx.scrollback.push({ kind: 'status', text: 'cat: read permission not granted', level: 'error', ts });
23
23
  return;
24
24
  }
25
- const content = await ctx.docs.readFrom(parsed.shardId, parsed.path);
25
+ const content = await ctx.sh3.docs.readFrom(parsed.shardId, parsed.path);
26
26
  if (content === null) {
27
27
  ctx.scrollback.push({ kind: 'status', text: `cat: not found: ${args[0]}`, level: 'error', ts });
28
28
  return;
@@ -6,12 +6,11 @@ function makeDocs(overrides = {}) {
6
6
  function makeCtx(docs) {
7
7
  const pushed = [];
8
8
  const ctx = {
9
- sh3: {},
9
+ sh3: { docs },
10
10
  scrollback: { push: (e) => pushed.push(e) },
11
11
  session: {},
12
12
  cwd: '/',
13
13
  fs: {},
14
- docs,
15
14
  dispatch: async () => { },
16
15
  };
17
16
  return { ctx, pushed };
@@ -6,11 +6,11 @@ export const lsVerb = {
6
6
  async run(ctx, args) {
7
7
  var _a, _b, _c;
8
8
  const ts = Date.now();
9
- if (!ctx.docs) {
9
+ if (!ctx.sh3.docs) {
10
10
  ctx.scrollback.push({ kind: 'status', text: 'ls: document capability not available', level: 'error', ts });
11
11
  return;
12
12
  }
13
- const all = await ctx.docs.listDocuments();
13
+ const all = await ctx.sh3.docs.listDocuments();
14
14
  const arg = args[0];
15
15
  if (!arg) {
16
16
  // Group by shard, emit counts
@@ -6,12 +6,11 @@ function makeDocs(overrides = {}) {
6
6
  function makeCtx(docs) {
7
7
  const pushed = [];
8
8
  const ctx = {
9
- sh3: {},
9
+ sh3: { docs },
10
10
  scrollback: { push: (e) => pushed.push(e) },
11
11
  session: {},
12
12
  cwd: '/',
13
13
  fs: {},
14
- docs,
15
14
  dispatch: async () => { },
16
15
  };
17
16
  return { ctx, pushed };
@@ -5,7 +5,7 @@ export const mkdirVerb = {
5
5
  programmatic: true,
6
6
  async run(ctx, args) {
7
7
  const ts = Date.now();
8
- if (!ctx.docs) {
8
+ if (!ctx.sh3.docs) {
9
9
  ctx.scrollback.push({ kind: 'status', text: 'mkdir: document capability not available', level: 'error', ts });
10
10
  return;
11
11
  }
@@ -13,7 +13,7 @@ export const mkdirVerb = {
13
13
  ctx.scrollback.push({ kind: 'status', text: 'usage: mkdir <shardId>/<folder>', level: 'error', ts });
14
14
  return;
15
15
  }
16
- if (!ctx.docs.writeTo) {
16
+ if (!ctx.sh3.docs.writeTo) {
17
17
  ctx.scrollback.push({ kind: 'status', text: 'mkdir: write permission not granted', level: 'error', ts });
18
18
  return;
19
19
  }
@@ -24,7 +24,7 @@ export const mkdirVerb = {
24
24
  }
25
25
  // Materialise the folder with a sentinel file; backends treat paths as flat.
26
26
  const keepPath = parsed.path.replace(/\/$/, '') + '/.keep';
27
- await ctx.docs.writeTo(parsed.shardId, keepPath, '');
27
+ await ctx.sh3.docs.writeTo(parsed.shardId, keepPath, '');
28
28
  ctx.scrollback.push({ kind: 'status', text: `mkdir: created ${args[0]}`, level: 'info', ts });
29
29
  },
30
30
  };
@@ -6,12 +6,11 @@ function makeDocs(overrides = {}) {
6
6
  function makeCtx(docs) {
7
7
  const pushed = [];
8
8
  const ctx = {
9
- sh3: {},
9
+ sh3: { docs },
10
10
  scrollback: { push: (e) => pushed.push(e) },
11
11
  session: {},
12
12
  cwd: '/',
13
13
  fs: {},
14
- docs,
15
14
  dispatch: async () => { },
16
15
  };
17
16
  return { ctx, pushed };
@@ -5,7 +5,7 @@ export const mvVerb = {
5
5
  programmatic: true,
6
6
  async run(ctx, args) {
7
7
  const ts = Date.now();
8
- if (!ctx.docs) {
8
+ if (!ctx.sh3.docs) {
9
9
  ctx.scrollback.push({ kind: 'status', text: 'mv: document capability not available', level: 'error', ts });
10
10
  return;
11
11
  }
@@ -13,7 +13,7 @@ export const mvVerb = {
13
13
  ctx.scrollback.push({ kind: 'status', text: 'usage: mv <shardId>/<old> <shardId>/<new>', level: 'error', ts });
14
14
  return;
15
15
  }
16
- if (!ctx.docs.renameFrom) {
16
+ if (!ctx.sh3.docs.renameFrom) {
17
17
  ctx.scrollback.push({ kind: 'status', text: 'mv: write permission not granted', level: 'error', ts });
18
18
  return;
19
19
  }
@@ -27,7 +27,7 @@ export const mvVerb = {
27
27
  ctx.scrollback.push({ kind: 'status', text: 'mv: src and dst must be in the same shard (use xfer for cross-scope moves)', level: 'error', ts });
28
28
  return;
29
29
  }
30
- await ctx.docs.renameFrom(src.shardId, src.path, dst.path);
30
+ await ctx.sh3.docs.renameFrom(src.shardId, src.path, dst.path);
31
31
  ctx.scrollback.push({ kind: 'status', text: `mv: renamed ${args[0]} → ${args[1]}`, level: 'info', ts });
32
32
  },
33
33
  };
@@ -6,12 +6,11 @@ function makeDocs(overrides = {}) {
6
6
  function makeCtx(docs) {
7
7
  const pushed = [];
8
8
  const ctx = {
9
- sh3: {},
9
+ sh3: { docs },
10
10
  scrollback: { push: (e) => pushed.push(e) },
11
11
  session: {},
12
12
  cwd: '/',
13
13
  fs: {},
14
- docs,
15
14
  dispatch: async () => { },
16
15
  };
17
16
  return { ctx, pushed };
@@ -5,7 +5,7 @@ export const rmVerb = {
5
5
  programmatic: true,
6
6
  async run(ctx, args) {
7
7
  const ts = Date.now();
8
- if (!ctx.docs) {
8
+ if (!ctx.sh3.docs) {
9
9
  ctx.scrollback.push({ kind: 'status', text: 'rm: document capability not available', level: 'error', ts });
10
10
  return;
11
11
  }
@@ -13,7 +13,7 @@ export const rmVerb = {
13
13
  ctx.scrollback.push({ kind: 'status', text: 'usage: rm <shardId>/<path>', level: 'error', ts });
14
14
  return;
15
15
  }
16
- if (!ctx.docs.deleteFrom) {
16
+ if (!ctx.sh3.docs.deleteFrom) {
17
17
  ctx.scrollback.push({ kind: 'status', text: 'rm: write permission not granted', level: 'error', ts });
18
18
  return;
19
19
  }
@@ -22,7 +22,7 @@ export const rmVerb = {
22
22
  ctx.scrollback.push({ kind: 'status', text: `rm: invalid path '${args[0]}'`, level: 'error', ts });
23
23
  return;
24
24
  }
25
- await ctx.docs.deleteFrom(parsed.shardId, parsed.path);
25
+ await ctx.sh3.docs.deleteFrom(parsed.shardId, parsed.path);
26
26
  ctx.scrollback.push({ kind: 'status', text: `rm: deleted ${args[0]}`, level: 'info', ts });
27
27
  },
28
28
  };
@@ -6,12 +6,11 @@ function makeDocs(overrides = {}) {
6
6
  function makeCtx(docs) {
7
7
  const pushed = [];
8
8
  const ctx = {
9
- sh3: {},
9
+ sh3: { docs },
10
10
  scrollback: { push: (e) => pushed.push(e) },
11
11
  session: {},
12
12
  cwd: '/',
13
13
  fs: {},
14
- docs,
15
14
  dispatch: async () => { },
16
15
  };
17
16
  return { ctx, pushed };
@@ -11,11 +11,11 @@ export const xferVerb = {
11
11
  programmatic: true,
12
12
  async run(ctx, args) {
13
13
  const ts = Date.now();
14
- if (!ctx.docs) {
14
+ if (!ctx.sh3.docs) {
15
15
  ctx.scrollback.push({ kind: 'status', text: 'xfer: document capability not available', level: 'error', ts });
16
16
  return;
17
17
  }
18
- if (!ctx.docs.transferBetweenScopes) {
18
+ if (!ctx.sh3.docs.transferBetweenScopes) {
19
19
  ctx.scrollback.push({ kind: 'status', text: 'xfer: write permission not granted', level: 'error', ts });
20
20
  return;
21
21
  }
@@ -64,13 +64,13 @@ export const xferVerb = {
64
64
  ctx.scrollback.push({ kind: 'status', text: 'xfer: source and destination are the same', level: 'error', ts });
65
65
  return;
66
66
  }
67
- await ctx.docs.transferBetweenScopes(srcTenant, srcParsed.shardId, srcParsed.path, dstTenant, dstParsed.shardId, dstParsed.path, moveOpts);
67
+ await ctx.sh3.docs.transferBetweenScopes(srcTenant, srcParsed.shardId, srcParsed.path, dstTenant, dstParsed.shardId, dstParsed.path, moveOpts);
68
68
  const verb = copy ? 'copied' : 'moved';
69
69
  ctx.scrollback.push({ kind: 'status', text: `xfer: ${verb} ${positional[0]} → ${positional[1]}`, level: 'info', ts });
70
70
  return;
71
71
  }
72
72
  const prefix = srcParsed.path;
73
- const allDocs = await ctx.docs.listDocumentsIn(srcTenant);
73
+ const allDocs = await ctx.sh3.docs.listDocumentsIn(srcTenant);
74
74
  const matching = allDocs.filter((d) => d.shardId === srcParsed.shardId && (!prefix || d.path.startsWith(prefix)));
75
75
  if (matching.length === 0) {
76
76
  ctx.scrollback.push({ kind: 'status', text: `xfer: no documents found under ${positional[0]}`, level: 'info', ts });
@@ -78,7 +78,7 @@ export const xferVerb = {
78
78
  }
79
79
  let count = 0;
80
80
  for (const doc of matching) {
81
- await ctx.docs.transferBetweenScopes(srcTenant, doc.shardId, doc.path, dstTenant, dstParsed.shardId, doc.path, moveOpts);
81
+ await ctx.sh3.docs.transferBetweenScopes(srcTenant, doc.shardId, doc.path, dstTenant, dstParsed.shardId, doc.path, moveOpts);
82
82
  count++;
83
83
  }
84
84
  const verb = copy ? 'copied' : 'moved';
@@ -11,13 +11,13 @@ function makeSh3(scope) {
11
11
  }
12
12
  function makeCtx(docs, sh3) {
13
13
  const pushed = [];
14
+ const composedSh3 = Object.assign(Object.assign({}, (sh3 !== null && sh3 !== void 0 ? sh3 : {})), { docs });
14
15
  const ctx = {
15
- sh3: sh3 !== null && sh3 !== void 0 ? sh3 : {},
16
+ sh3: composedSh3,
16
17
  scrollback: { push: (e) => pushed.push(e) },
17
18
  session: {},
18
19
  cwd: '/',
19
20
  fs: {},
20
- docs,
21
21
  dispatch: async () => { },
22
22
  };
23
23
  return { ctx, pushed };
@@ -174,6 +174,16 @@ export interface Sh3Api {
174
174
  id: string;
175
175
  name: string;
176
176
  }>;
177
+ /**
178
+ * Tenant-wide document observation surface for the caller. Present iff
179
+ * the caller's manifest declares `documents:browse`. Read methods
180
+ * (`readFrom`, …) require `documents:read`; write methods (`writeTo`,
181
+ * `transferBetweenScopes`, …) require `documents:write`. Verbs that need
182
+ * documents — `xfer`, `cat`, `ls`, `mv`, `mkdir`, `rm` — read it from
183
+ * here so programmatic dispatch (runVerb / pipelines) inherits the
184
+ * caller's gating.
185
+ */
186
+ docs?: BrowseCapability;
177
187
  }
178
188
  export type { DispatchToTerminalResult } from '../shell-shard/dispatch-to-terminal';
179
189
  export interface VerbContext {
@@ -182,8 +192,6 @@ export interface VerbContext {
182
192
  session: SessionClient;
183
193
  cwd: string;
184
194
  fs: TenantFsClient;
185
- /** Document zone browse capability. Present when shell-shard has documents:browse permission. */
186
- docs?: BrowseCapability;
187
195
  /** Invoke another registered verb programmatically (used by rich-entry clicks). */
188
196
  dispatch(line: string): Promise<void>;
189
197
  /**
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  /** Auto-generated from package.json — do not edit manually. */
2
- export declare const VERSION = "0.22.5";
2
+ export declare const VERSION = "0.23.2";
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
1
  /** Auto-generated from package.json — do not edit manually. */
2
- export const VERSION = '0.22.5';
2
+ export const VERSION = '0.23.2';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sh3-core",
3
- "version": "0.22.5",
3
+ "version": "0.23.2",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"