sh3-core 0.15.4 → 0.16.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/dist/BrandSlot.svelte +9 -9
- package/dist/{Shell.svelte → Sh3.svelte} +65 -65
- package/dist/Sh3.svelte.d.ts +5 -0
- package/dist/__test__/render.js +1 -1
- package/dist/actions/ActionPanel.svelte +3 -3
- package/dist/actions/CommandPalette.svelte +2 -2
- package/dist/actions/MenuBar.svelte +1 -1
- package/dist/actions/MenuBar.test.js +1 -1
- package/dist/actions/MenuButton.svelte +3 -3
- package/dist/actions/dispatcher.svelte.js +1 -1
- package/dist/actions/listActive.js +1 -1
- package/dist/actions/listeners.js +6 -6
- package/dist/actions/selection.svelte.d.ts +2 -2
- package/dist/actions/selection.svelte.js +4 -4
- package/dist/actions/selection.test.js +1 -1
- package/dist/actions/{shellActions.test.js → sh3Actions.test.js} +14 -14
- package/dist/actions/state.svelte.d.ts +3 -3
- package/dist/actions/state.svelte.js +3 -3
- package/dist/actions/syncMountedViewIds.test.js +1 -1
- package/dist/actions/types.d.ts +1 -1
- package/dist/api.d.ts +5 -5
- package/dist/api.js +7 -7
- package/dist/app/admin/ApiKeysView.svelte +9 -9
- package/dist/app/admin/AuthSettingsView.svelte +6 -6
- package/dist/app/admin/SystemView.svelte +12 -12
- package/dist/app/admin/UsersView.svelte +8 -8
- package/dist/app/store/AppUpdateAvailableModal.svelte +14 -14
- package/dist/app/store/PermissionConfirmModal.svelte +20 -20
- package/dist/app/store/StoreView.svelte +51 -51
- package/dist/app/store/UninstallAppDialog.svelte +14 -14
- package/dist/app/store/storeShard.svelte.js +1 -1
- package/dist/app/store/verbs.js +1 -1
- package/dist/apps/lifecycle.d.ts +1 -1
- package/dist/apps/lifecycle.js +4 -4
- package/dist/apps/lifecycle.test.js +5 -5
- package/dist/apps/registry.svelte.d.ts +2 -2
- package/dist/apps/registry.svelte.js +3 -3
- package/dist/apps/types.d.ts +1 -1
- package/dist/auth/GuestBanner.svelte +19 -19
- package/dist/auth/SignInWall.svelte +17 -17
- package/dist/auth/auth.svelte.d.ts +1 -1
- package/dist/auth/auth.svelte.js +1 -1
- package/dist/boot/satellitePayload.js +1 -1
- package/dist/build.d.ts +27 -0
- package/dist/build.js +59 -1
- package/dist/build.test.js +31 -0
- package/dist/color/api.d.ts +1 -1
- package/dist/color/api.js +1 -1
- package/dist/color/{shell-api.js → sh3-api.js} +3 -3
- package/dist/conflicts/ConflictModal.svelte +1 -1
- package/dist/conflicts/ConflictModal.svelte.d.ts +1 -1
- package/dist/conflicts/DetailView.svelte +19 -19
- package/dist/conflicts/PromptView.svelte +9 -9
- package/dist/conflicts/adapter-documents.js +1 -1
- package/dist/conflicts/api.d.ts +1 -1
- package/dist/conflicts/api.js +2 -2
- package/dist/conflicts/renderer-registry.js +1 -1
- package/dist/conflicts/renderers/MetaOnlyRenderer.svelte +8 -8
- package/dist/conflicts/renderers/TextDiffRenderer.svelte +15 -15
- package/dist/conflicts/renderers/index.js +1 -1
- package/dist/conflicts/resolve-primitive.js +1 -1
- package/dist/conflicts/{shell-api.js → sh3-api.js} +2 -2
- package/dist/contributions/registry.js +1 -1
- package/dist/createShell.d.ts +2 -2
- package/dist/createShell.js +6 -6
- package/dist/host-entry.d.ts +1 -1
- package/dist/host-entry.js +2 -2
- package/dist/host.js +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/keys/ConsentDialog.svelte +15 -15
- package/dist/keys/consent.svelte.d.ts +2 -2
- package/dist/keys/consent.svelte.js +3 -3
- package/dist/keys/revocation-bus.svelte.d.ts +3 -3
- package/dist/keys/revocation-bus.svelte.js +3 -3
- package/dist/layout/DragPreview.svelte +9 -9
- package/dist/layout/LayoutRenderer.browser.test.js +2 -2
- package/dist/layout/LayoutRenderer.svelte +4 -4
- package/dist/layout/SlotContainer.svelte +12 -12
- package/dist/layout/SlotDropZone.svelte +2 -2
- package/dist/layout/inspection.d.ts +1 -1
- package/dist/layout/inspection.js +1 -1
- package/dist/layout/store.svelte.js +3 -3
- package/dist/layout/types.d.ts +1 -1
- package/dist/layouts-shard/LayoutSaveModal.svelte +20 -20
- package/dist/layouts-shard/LayoutsSection.svelte +11 -11
- package/dist/layouts-shard/filter.test.js +3 -3
- package/dist/layouts-shard/layoutsApi.test.js +3 -3
- package/dist/layouts-shard/layoutsShard.svelte.test.js +7 -7
- package/dist/migrations/mode-id-rename.js +2 -2
- package/dist/overlays/ConfirmDialog.svelte +8 -8
- package/dist/overlays/EntityAppearanceModal.svelte +19 -19
- package/dist/overlays/FloatFrame.svelte +20 -20
- package/dist/overlays/FloatLayer.svelte +1 -1
- package/dist/overlays/ModalFrame.svelte +5 -5
- package/dist/overlays/PopupFrame.svelte +4 -4
- package/dist/overlays/ToastItem.svelte +12 -12
- package/dist/overlays/float.d.ts +2 -2
- package/dist/overlays/float.js +3 -3
- package/dist/overlays/float.test.js +6 -6
- package/dist/overlays/modal.js +1 -1
- package/dist/overlays/modal.test.js +2 -2
- package/dist/overlays/parentHost.js +2 -2
- package/dist/overlays/parentHost.test.js +5 -5
- package/dist/overlays/popup.js +2 -2
- package/dist/overlays/popup.test.js +2 -2
- package/dist/overlays/roots.js +4 -4
- package/dist/overlays/toast.js +1 -1
- package/dist/overlays/types.js +3 -3
- package/dist/primitives/Button.svelte +16 -16
- package/dist/primitives/Collapsible.svelte +11 -11
- package/dist/primitives/ResizableSplitter.svelte +10 -10
- package/dist/primitives/TabbedPanel.svelte +19 -19
- package/dist/primitives/base.css +57 -57
- package/dist/primitives/widgets/ColorSwatch.svelte +15 -15
- package/dist/primitives/widgets/ColorSwatch.svelte.test.js +4 -4
- package/dist/primitives/widgets/Field.svelte +20 -20
- package/dist/primitives/widgets/FilePicker.svelte +13 -13
- package/dist/primitives/widgets/IconPicker.svelte +14 -14
- package/dist/primitives/widgets/IconToggleGroup.svelte +14 -14
- package/dist/primitives/widgets/NumberInput.svelte +17 -17
- package/dist/primitives/widgets/PickerList.svelte +17 -17
- package/dist/primitives/widgets/RangeSlider.svelte +16 -16
- package/dist/primitives/widgets/Segmented.svelte +16 -16
- package/dist/primitives/widgets/Select.svelte +14 -14
- package/dist/primitives/widgets/Select.svelte.test.js +2 -2
- package/dist/primitives/widgets/Slider.svelte +20 -20
- package/dist/primitives/widgets/SliderGroup.svelte +2 -2
- package/dist/primitives/widgets/Textarea.svelte +13 -13
- package/dist/primitives/widgets/_select-listbox.svelte +15 -15
- package/dist/projects/session-state.svelte.js +1 -1
- package/dist/projects-shard/DeleteProjectDialog.svelte +12 -12
- package/dist/projects-shard/ProjectManage.svelte +25 -25
- package/dist/projects-shard/ProjectsSection.svelte +12 -12
- package/dist/registry/installer.d.ts +2 -2
- package/dist/registry/installer.js +2 -2
- package/dist/registry/loader.js +1 -1
- package/dist/registry/permission-descriptions.js +2 -2
- package/dist/registry/permission-descriptions.test.js +1 -1
- package/dist/runtime/runVerb-shell.test.js +2 -2
- package/dist/runtime/runVerb.js +4 -4
- package/dist/runtime/runVerb.test.js +4 -4
- package/dist/satellite/SatelliteShell.svelte +2 -2
- package/dist/{shell → sh3}/views/KeysAndPeers.svelte +7 -7
- package/dist/sh3Api/headless.d.ts +4 -0
- package/dist/{shell-shard/shellApi.js → sh3Api/headless.js} +5 -5
- package/dist/{shell-shard/shellApi.svelte.test.js → sh3Api/headless.svelte.test.js} +11 -11
- package/dist/{shellApi → sh3Api}/window.js +2 -2
- package/dist/{shellApi → sh3Api}/window.test.js +1 -1
- package/dist/{shellRuntime.svelte.d.ts → sh3Runtime.svelte.d.ts} +11 -11
- package/dist/{shellRuntime.svelte.js → sh3Runtime.svelte.js} +10 -10
- package/dist/sh3Runtime.svelte.test.d.ts +1 -0
- package/dist/{shellRuntime.svelte.test.js → sh3Runtime.svelte.test.js} +10 -10
- package/dist/sh3core-shard/AppInfoView.svelte +19 -19
- package/dist/sh3core-shard/{ShellHome.svelte → Sh3Home.svelte} +82 -82
- package/dist/sh3core-shard/Sh3Home.svelte.d.ts +3 -0
- package/dist/sh3core-shard/{ShellTitle.svelte → Sh3Title.svelte} +11 -11
- package/dist/sh3core-shard/Sh3Title.svelte.d.ts +3 -0
- package/dist/sh3core-shard/appActions.js +3 -3
- package/dist/sh3core-shard/sh3coreShard.svelte.js +7 -7
- package/dist/shards/activate.svelte.d.ts +1 -1
- package/dist/shards/activate.svelte.js +6 -6
- package/dist/shards/types.d.ts +5 -5
- package/dist/shards/types.js +2 -2
- package/dist/shell-shard/CommandLine.svelte +7 -7
- package/dist/shell-shard/InputLine.svelte +3 -3
- package/dist/shell-shard/ScrollbackView.svelte +2 -2
- package/dist/shell-shard/Terminal.svelte +5 -5
- package/dist/shell-shard/Terminal.svelte.d.ts +2 -2
- package/dist/shell-shard/dispatch-custom.test.js +2 -2
- package/dist/shell-shard/dispatch-gating.test.js +2 -2
- package/dist/shell-shard/dispatch-invoke.test.js +2 -2
- package/dist/shell-shard/dispatch-to-terminal.js +1 -1
- package/dist/shell-shard/dispatch.d.ts +2 -2
- package/dist/shell-shard/dispatch.js +2 -2
- package/dist/shell-shard/entries/PromptEntry.svelte +4 -4
- package/dist/shell-shard/entries/StatusEntry.svelte +4 -4
- package/dist/shell-shard/entries/TextEntry.svelte +3 -3
- package/dist/shell-shard/locateSlot.test.js +9 -9
- package/dist/shell-shard/manifest.js +2 -2
- package/dist/shell-shard/registry.d.ts +2 -2
- package/dist/shell-shard/rich/AppCard.svelte +1 -1
- package/dist/shell-shard/rich/AppsTable.svelte +1 -1
- package/dist/shell-shard/rich/HelpTable.svelte +1 -1
- package/dist/shell-shard/rich/HistoryList.svelte +1 -1
- package/dist/shell-shard/rich/ViewsTable.svelte +1 -1
- package/dist/shell-shard/rich/ZoneTree.svelte +2 -2
- package/dist/shell-shard/shellShard.svelte.d.ts +1 -1
- package/dist/shell-shard/shellShard.svelte.js +8 -8
- package/dist/shell-shard/terminal-dispatch.test.js +2 -2
- package/dist/shell-shard/toolbar/Toolbar.svelte +4 -4
- package/dist/shell-shard/toolbar/Toolbar.svelte.d.ts +2 -2
- package/dist/shell-shard/toolbar/slots/BusySlot.svelte +2 -2
- package/dist/shell-shard/toolbar/slots/FocusLockSlot.svelte +2 -2
- package/dist/shell-shard/toolbar/slots/ModeSlot.svelte +1 -1
- package/dist/shell-shard/toolbar/slots/TargetShardSlot.svelte +1 -1
- package/dist/shell-shard/toolbar/slots.d.ts +3 -3
- package/dist/shell-shard/verbs/apps.js +3 -3
- package/dist/shell-shard/verbs/help.js +1 -1
- package/dist/shell-shard/verbs/help.svelte.test.js +1 -1
- package/dist/shell-shard/verbs/history.js +1 -1
- package/dist/shell-shard/verbs/mode.js +2 -2
- package/dist/shell-shard/verbs/mode.test.js +2 -2
- package/dist/shell-shard/verbs/shards.js +1 -1
- package/dist/shell-shard/verbs/views.js +8 -8
- package/dist/shell-shard/verbs/zones.js +2 -2
- package/dist/state/zones.svelte.d.ts +2 -2
- package/dist/state/zones.svelte.js +4 -4
- package/dist/theme.d.ts +3 -3
- package/dist/theme.js +5 -5
- package/dist/tokens.css +68 -68
- package/dist/verbs/types.d.ts +5 -5
- package/dist/verbs/types.js +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/dist/Shell.svelte.d.ts +0 -5
- package/dist/sh3core-shard/ShellHome.svelte.d.ts +0 -3
- package/dist/sh3core-shard/ShellTitle.svelte.d.ts +0 -3
- package/dist/shell-shard/shellApi.d.ts +0 -4
- /package/dist/actions/{shellActions.test.d.ts → sh3Actions.test.d.ts} +0 -0
- /package/dist/{shell-shard/shellApi.svelte.test.d.ts → build.test.d.ts} +0 -0
- /package/dist/color/{shell-api.d.ts → sh3-api.d.ts} +0 -0
- /package/dist/conflicts/{shell-api.d.ts → sh3-api.d.ts} +0 -0
- /package/dist/{shell → sh3}/views/KeysAndPeers.svelte.d.ts +0 -0
- /package/dist/{shellApi/window.test.d.ts → sh3Api/headless.svelte.test.d.ts} +0 -0
- /package/dist/{shellApi → sh3Api}/window.d.ts +0 -0
- /package/dist/{shellRuntime.svelte.test.d.ts → sh3Api/window.test.d.ts} +0 -0
|
@@ -152,8 +152,8 @@
|
|
|
152
152
|
display: flex;
|
|
153
153
|
flex-direction: column;
|
|
154
154
|
font: inherit;
|
|
155
|
-
color: var(--
|
|
156
|
-
background: var(--
|
|
155
|
+
color: var(--sh3-fg);
|
|
156
|
+
background: var(--sh3-bg);
|
|
157
157
|
}
|
|
158
158
|
.body {
|
|
159
159
|
flex: 1;
|
|
@@ -161,8 +161,8 @@
|
|
|
161
161
|
padding: 16px 16px 8px;
|
|
162
162
|
}
|
|
163
163
|
h2 { margin: 0 0 8px; font-size: 16px; }
|
|
164
|
-
.project-id { font-size: 12px; color: var(--
|
|
165
|
-
.project-id code { font-family: var(--
|
|
164
|
+
.project-id { font-size: 12px; color: var(--sh3-fg-muted); margin: 0 0 16px; }
|
|
165
|
+
.project-id code { font-family: var(--sh3-font-mono, monospace); }
|
|
166
166
|
.field {
|
|
167
167
|
display: flex;
|
|
168
168
|
flex-direction: column;
|
|
@@ -170,50 +170,50 @@
|
|
|
170
170
|
margin-bottom: 12px;
|
|
171
171
|
font-size: 13px;
|
|
172
172
|
}
|
|
173
|
-
.field span { color: var(--
|
|
174
|
-
.hint { font-size: 11px; color: var(--
|
|
173
|
+
.field span { color: var(--sh3-fg-muted); }
|
|
174
|
+
.hint { font-size: 11px; color: var(--sh3-fg-muted); }
|
|
175
175
|
.hint code {
|
|
176
|
-
font-family: var(--
|
|
177
|
-
color: var(--
|
|
178
|
-
background: var(--
|
|
176
|
+
font-family: var(--sh3-font-mono, monospace);
|
|
177
|
+
color: var(--sh3-fg);
|
|
178
|
+
background: var(--sh3-bg-elevated);
|
|
179
179
|
padding: 0 4px;
|
|
180
|
-
border-radius: var(--
|
|
180
|
+
border-radius: var(--sh3-radius-sm, 3px);
|
|
181
181
|
}
|
|
182
182
|
.field input,
|
|
183
183
|
.field textarea {
|
|
184
|
-
background: var(--
|
|
185
|
-
color: var(--
|
|
186
|
-
border: 1px solid var(--
|
|
187
|
-
border-radius: var(--
|
|
184
|
+
background: var(--sh3-bg-elevated);
|
|
185
|
+
color: var(--sh3-fg);
|
|
186
|
+
border: 1px solid var(--sh3-border);
|
|
187
|
+
border-radius: var(--sh3-radius-sm, 3px);
|
|
188
188
|
padding: 6px 8px;
|
|
189
189
|
font: inherit;
|
|
190
190
|
font-size: 13px;
|
|
191
191
|
}
|
|
192
192
|
.field textarea { resize: vertical; min-height: 60px; }
|
|
193
|
-
.error { color: var(--
|
|
193
|
+
.error { color: var(--sh3-error, #c33); font-size: 13px; margin: 0 0 8px; }
|
|
194
194
|
.actions {
|
|
195
195
|
display: flex;
|
|
196
196
|
gap: 8px;
|
|
197
197
|
padding: 12px 16px;
|
|
198
|
-
border-top: 1px solid var(--
|
|
199
|
-
background: var(--
|
|
198
|
+
border-top: 1px solid var(--sh3-border);
|
|
199
|
+
background: var(--sh3-bg);
|
|
200
200
|
flex: 0 0 auto;
|
|
201
201
|
}
|
|
202
202
|
.actions button {
|
|
203
|
-
background: var(--
|
|
204
|
-
color: var(--
|
|
205
|
-
border: 1px solid var(--
|
|
206
|
-
border-radius: var(--
|
|
203
|
+
background: var(--sh3-bg-elevated);
|
|
204
|
+
color: var(--sh3-fg);
|
|
205
|
+
border: 1px solid var(--sh3-border);
|
|
206
|
+
border-radius: var(--sh3-radius-sm, 3px);
|
|
207
207
|
padding: 6px 14px;
|
|
208
208
|
font: inherit;
|
|
209
209
|
cursor: pointer;
|
|
210
210
|
}
|
|
211
|
-
.actions button:hover { border-color: var(--
|
|
211
|
+
.actions button:hover { border-color: var(--sh3-accent); }
|
|
212
212
|
.actions button.primary {
|
|
213
|
-
background: var(--
|
|
213
|
+
background: var(--sh3-accent);
|
|
214
214
|
color: #fff;
|
|
215
|
-
border-color: var(--
|
|
215
|
+
border-color: var(--sh3-accent);
|
|
216
216
|
}
|
|
217
|
-
.actions button.danger { margin-left: auto; color: var(--
|
|
217
|
+
.actions button.danger { margin-left: auto; color: var(--sh3-error, #c33); }
|
|
218
218
|
.actions button:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
219
219
|
</style>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
/*
|
|
3
|
-
* Projects section for
|
|
3
|
+
* Projects section for Sh3Home.
|
|
4
4
|
*
|
|
5
5
|
* Renders the list of projects the current user is a member of as
|
|
6
6
|
* selectable cards. Selecting a project sets sessionState.activeProjectId
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
font-weight: 600;
|
|
70
70
|
text-transform: uppercase;
|
|
71
71
|
letter-spacing: 0.06em;
|
|
72
|
-
color: var(--
|
|
72
|
+
color: var(--sh3-fg-subtle);
|
|
73
73
|
margin: 0 0 12px;
|
|
74
74
|
}
|
|
75
75
|
.projects-grid {
|
|
@@ -84,9 +84,9 @@
|
|
|
84
84
|
align-items: flex-start;
|
|
85
85
|
gap: 4px;
|
|
86
86
|
padding: 12px 14px;
|
|
87
|
-
background: var(--
|
|
88
|
-
border: 1px solid var(--
|
|
89
|
-
border-radius: var(--
|
|
87
|
+
background: var(--sh3-grad-bg-elevated, var(--sh3-bg-elevated));
|
|
88
|
+
border: 1px solid var(--sh3-border);
|
|
89
|
+
border-radius: var(--sh3-radius-md);
|
|
90
90
|
cursor: pointer;
|
|
91
91
|
text-align: left;
|
|
92
92
|
color: inherit;
|
|
@@ -100,21 +100,21 @@
|
|
|
100
100
|
right: 6px;
|
|
101
101
|
background: transparent;
|
|
102
102
|
border: 0;
|
|
103
|
-
color: var(--
|
|
103
|
+
color: var(--sh3-fg-muted);
|
|
104
104
|
cursor: pointer;
|
|
105
105
|
padding: 2px 6px;
|
|
106
106
|
font-size: 14px;
|
|
107
|
-
border-radius: var(--
|
|
107
|
+
border-radius: var(--sh3-radius-sm, 3px);
|
|
108
108
|
}
|
|
109
|
-
.project-card-edit:hover { color: var(--
|
|
109
|
+
.project-card-edit:hover { color: var(--sh3-fg); background: var(--sh3-bg-elevated); }
|
|
110
110
|
.project-card:hover {
|
|
111
|
-
border-color: var(--
|
|
111
|
+
border-color: var(--sh3-accent);
|
|
112
112
|
transform: translateY(-1px);
|
|
113
113
|
}
|
|
114
114
|
.project-card.active {
|
|
115
|
-
border-color: var(--
|
|
116
|
-
box-shadow: 0 0 0 2px color-mix(in srgb, var(--
|
|
115
|
+
border-color: var(--sh3-accent);
|
|
116
|
+
box-shadow: 0 0 0 2px color-mix(in srgb, var(--sh3-accent) 40%, transparent);
|
|
117
117
|
}
|
|
118
118
|
.project-name { font-weight: 600; font-size: 13px; }
|
|
119
|
-
.project-meta { font-size: 11px; color: var(--
|
|
119
|
+
.project-meta { font-size: 11px; color: var(--sh3-fg-muted); }
|
|
120
120
|
</style>
|
|
@@ -53,7 +53,7 @@ export declare function listInstalledPackages(): Promise<InstalledPackage[]>;
|
|
|
53
53
|
* Load all installed packages from IndexedDB and register them.
|
|
54
54
|
*
|
|
55
55
|
* Called once at boot by `bootstrap()`, before any glob-discovered shards
|
|
56
|
-
* or the
|
|
57
|
-
* as warnings but do not prevent the
|
|
56
|
+
* or the sh3 shard are registered. Individual package failures are logged
|
|
57
|
+
* as warnings but do not prevent the sh3 from booting.
|
|
58
58
|
*/
|
|
59
59
|
export declare function loadInstalledPackages(): Promise<void>;
|
|
@@ -163,8 +163,8 @@ export async function listInstalledPackages() {
|
|
|
163
163
|
* Load all installed packages from IndexedDB and register them.
|
|
164
164
|
*
|
|
165
165
|
* Called once at boot by `bootstrap()`, before any glob-discovered shards
|
|
166
|
-
* or the
|
|
167
|
-
* as warnings but do not prevent the
|
|
166
|
+
* or the sh3 shard are registered. Individual package failures are logged
|
|
167
|
+
* as warnings but do not prevent the sh3 from booting.
|
|
168
168
|
*/
|
|
169
169
|
export async function loadInstalledPackages() {
|
|
170
170
|
let packages;
|
package/dist/registry/loader.js
CHANGED
|
@@ -60,7 +60,7 @@ const shimUrls = {
|
|
|
60
60
|
// `svelte/internal/disclose-version` is a side-effect-only import (no exports).
|
|
61
61
|
// Create an empty shim so the import doesn't fail.
|
|
62
62
|
shimUrls['svelte/internal/disclose-version'] = URL.createObjectURL(new Blob([''], { type: 'application/javascript' }));
|
|
63
|
-
// `sh3/tokens.css` — design tokens are already loaded by the host
|
|
63
|
+
// `sh3/tokens.css` — design tokens are already loaded by the host sh3.
|
|
64
64
|
// Bundles that import this path get a no-op so the import doesn't fail.
|
|
65
65
|
shimUrls['sh3-core/tokens.css'] = URL.createObjectURL(new Blob([''], { type: 'application/javascript' }));
|
|
66
66
|
// ---- bare specifier rewriting ----------------------------------------------
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
export const PERMISSION_DESCRIPTIONS = {
|
|
10
10
|
'state:manage': {
|
|
11
|
-
title: 'Manage
|
|
11
|
+
title: 'Manage sh3 state zones',
|
|
12
12
|
description: 'Read and write state zones belonging to other shards.',
|
|
13
13
|
},
|
|
14
14
|
'documents:browse': {
|
|
@@ -37,7 +37,7 @@ export const PERMISSION_DESCRIPTIONS = {
|
|
|
37
37
|
},
|
|
38
38
|
'keys:mint': {
|
|
39
39
|
title: 'Mint API keys',
|
|
40
|
-
description: 'Issue long-lived access tokens for this
|
|
40
|
+
description: 'Issue long-lived access tokens for this sh3.',
|
|
41
41
|
},
|
|
42
42
|
};
|
|
43
43
|
export function describePermission(id) {
|
|
@@ -3,7 +3,7 @@ import { describePermission, extractBundlePermissions, PERMISSION_DESCRIPTIONS,
|
|
|
3
3
|
describe('describePermission', () => {
|
|
4
4
|
it('returns the registered entry for a known permission id', () => {
|
|
5
5
|
const result = describePermission('state:manage');
|
|
6
|
-
expect(result.title).toBe('Manage
|
|
6
|
+
expect(result.title).toBe('Manage sh3 state zones');
|
|
7
7
|
expect(result.description).toContain('state zones');
|
|
8
8
|
});
|
|
9
9
|
it('covers every permission advertised in the module registry', () => {
|
|
@@ -95,7 +95,7 @@ describe('shell-shard programmatic verbs (integration)', () => {
|
|
|
95
95
|
throw new Error('unreachable');
|
|
96
96
|
expect(entry.text).toMatch(/no active app/);
|
|
97
97
|
});
|
|
98
|
-
it('shards emits a rich entry containing the active
|
|
98
|
+
it('shards emits a rich entry containing the active sh3 shard', async () => {
|
|
99
99
|
const out = await runVerbProgrammatic('shell', 'shards', []);
|
|
100
100
|
const entry = out.scrollback[0];
|
|
101
101
|
expect(entry.kind).toBe('rich');
|
|
@@ -140,7 +140,7 @@ describe('shell-shard programmatic verbs (integration)', () => {
|
|
|
140
140
|
expect(entry.level).toBe('warn');
|
|
141
141
|
});
|
|
142
142
|
it('zone with shardId+zoneName emits a rich entry exposing data.value', async () => {
|
|
143
|
-
const out = await runVerbProgrammatic('shell', 'zone', ['
|
|
143
|
+
const out = await runVerbProgrammatic('shell', 'zone', ['sh3', 'workspace']);
|
|
144
144
|
const entry = out.scrollback[0];
|
|
145
145
|
expect(entry.kind).toBe('rich');
|
|
146
146
|
if (entry.kind !== 'rich')
|
package/dist/runtime/runVerb.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* runVerbProgrammatic — programmatic verb dispatch with synthesized VerbContext.
|
|
3
3
|
*
|
|
4
4
|
* Used by `ctx.runVerb(...)` (see shards/activate.svelte.ts). Builds a
|
|
5
|
-
* sink scrollback that captures entries into an array, a headless
|
|
5
|
+
* sink scrollback that captures entries into an array, a headless Sh3Api
|
|
6
6
|
* (no terminal-bound state), a stub SessionClient, and a real TenantFsClient.
|
|
7
7
|
* Verbs that opt in via `programmatic: true` run against this synthesized
|
|
8
8
|
* context; non-programmatic verbs are rejected.
|
|
@@ -13,11 +13,11 @@
|
|
|
13
13
|
* fire-and-forget semantics).
|
|
14
14
|
*
|
|
15
15
|
* Resolution: prefixed names (`'sh3-store:install'`) look up directly;
|
|
16
|
-
* unprefixed
|
|
16
|
+
* unprefixed sh3 names (`'apps'`) resolve against shardId 'sh3'.
|
|
17
17
|
*/
|
|
18
18
|
import { activeShards } from '../shards/activate.svelte';
|
|
19
19
|
import { getVerb, listVerbsWithShard } from '../shards/registry';
|
|
20
|
-
import {
|
|
20
|
+
import { makeSh3ApiHeadless } from '../sh3Api/headless';
|
|
21
21
|
import { Scrollback } from '../shell-shard/scrollback.svelte';
|
|
22
22
|
import { SessionClient } from '../shell-shard/session-client.svelte';
|
|
23
23
|
import { TenantFsClient } from '../shell-shard/tenant-fs-client';
|
|
@@ -53,7 +53,7 @@ export async function runVerbProgrammatic(shardId, name, args, opts) {
|
|
|
53
53
|
async function buildProgrammaticContext(b) {
|
|
54
54
|
var _a, _b;
|
|
55
55
|
const ctx = {
|
|
56
|
-
|
|
56
|
+
sh3: makeSh3ApiHeadless(),
|
|
57
57
|
scrollback: b.sinkScrollback,
|
|
58
58
|
session: makeStubSession(),
|
|
59
59
|
cwd: '/',
|
|
@@ -129,18 +129,18 @@ describe('runVerbProgrammatic', () => {
|
|
|
129
129
|
await activateShard('tester');
|
|
130
130
|
await expect(runVerbProgrammatic('tester', 'tester:boom', [])).rejects.toThrow('kaboom');
|
|
131
131
|
});
|
|
132
|
-
it('exposes vctx.
|
|
132
|
+
it('exposes vctx.sh3.dispatchToTerminal that returns no-active-context', async () => {
|
|
133
133
|
let observed = undefined;
|
|
134
134
|
registerShard({
|
|
135
135
|
manifest: { id: 'tester', label: 'T', version: '0.0.0', views: [] },
|
|
136
136
|
activate(ctx) {
|
|
137
|
-
ctx.registerVerb(makeVerb('peek-
|
|
138
|
-
observed = vctx.
|
|
137
|
+
ctx.registerVerb(makeVerb('peek-sh3', true, async (vctx) => {
|
|
138
|
+
observed = vctx.sh3.dispatchToTerminal('foo');
|
|
139
139
|
}));
|
|
140
140
|
},
|
|
141
141
|
});
|
|
142
142
|
await activateShard('tester');
|
|
143
|
-
await runVerbProgrammatic('tester', 'tester:peek-
|
|
143
|
+
await runVerbProgrammatic('tester', 'tester:peek-sh3', []);
|
|
144
144
|
expect(observed).toMatchObject({
|
|
145
145
|
ok: false,
|
|
146
146
|
error: 'no-active-context',
|
|
@@ -94,17 +94,17 @@
|
|
|
94
94
|
</div>
|
|
95
95
|
|
|
96
96
|
<style>
|
|
97
|
-
.keys-peers { padding: 24px; font-family: system-ui, sans-serif; color: var(--
|
|
97
|
+
.keys-peers { padding: 24px; font-family: system-ui, sans-serif; color: var(--sh3-fg); }
|
|
98
98
|
.keys-peers-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; }
|
|
99
99
|
.keys-peers-header h2 { margin: 0; font-size: 18px; }
|
|
100
100
|
.keys-peers-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
|
|
101
|
-
.keys-peers-item { display: flex; justify-content: space-between; align-items: flex-start; padding: 12px 16px; background: var(--
|
|
101
|
+
.keys-peers-item { display: flex; justify-content: space-between; align-items: flex-start; padding: 12px 16px; background: var(--sh3-bg-elevated, #252540); border: 1px solid var(--sh3-border, #3a3a5c); border-radius: var(--sh3-radius, 6px); gap: 12px; }
|
|
102
102
|
.keys-peers-info { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
|
|
103
103
|
.keys-peers-label { font-weight: 600; }
|
|
104
|
-
.keys-peers-meta { font-size: 11px; color: var(--
|
|
104
|
+
.keys-peers-meta { font-size: 11px; color: var(--sh3-fg-subtle); }
|
|
105
105
|
.keys-peers-actions { display: flex; gap: 6px; flex-shrink: 0; align-items: flex-start; padding-top: 2px; }
|
|
106
|
-
.keys-peers-btn-danger { background: transparent; color: var(--
|
|
107
|
-
.keys-peers-btn-secondary { background: transparent; color: var(--
|
|
108
|
-
.keys-peers-muted { color: var(--
|
|
109
|
-
.keys-peers-error { color: var(--
|
|
106
|
+
.keys-peers-btn-danger { background: transparent; color: var(--sh3-error, #d32f2f); border: 1px solid var(--sh3-error, #d32f2f); font-size: 12px; padding: 4px 10px; border-radius: var(--sh3-radius, 6px); cursor: pointer; }
|
|
107
|
+
.keys-peers-btn-secondary { background: transparent; color: var(--sh3-fg-subtle); border: 1px solid var(--sh3-border, #3a3a5c); font-size: 12px; padding: 4px 10px; border-radius: var(--sh3-radius, 6px); cursor: pointer; }
|
|
108
|
+
.keys-peers-muted { color: var(--sh3-fg-muted); font-style: italic; }
|
|
109
|
+
.keys-peers-error { color: var(--sh3-error, #d32f2f); font-size: 13px; }
|
|
110
110
|
</style>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Headless
|
|
2
|
+
* Headless Sh3Api factory.
|
|
3
3
|
*
|
|
4
4
|
* Built only from framework primitives (apps registry, layout inspection,
|
|
5
5
|
* auth, float manager). No Svelte component imports — safe to load from
|
|
@@ -15,7 +15,7 @@ import { registeredShards, listStandaloneViews } from '../shards/activate.svelte
|
|
|
15
15
|
import { inspectActiveLayout, focusView, closeTab, popoutView, dockFloat, dockIntoActiveLayout, locateSlot as locateSlotInActiveLayout, } from '../layout/inspection';
|
|
16
16
|
import { floatManager } from '../overlays/float';
|
|
17
17
|
import { getUser, isAdmin } from '../auth/index';
|
|
18
|
-
import { makeDispatchToTerminal } from '
|
|
18
|
+
import { makeDispatchToTerminal } from '../shell-shard/dispatch-to-terminal';
|
|
19
19
|
const KNOWN_ZONES = ['ephemeral', 'session', 'workspace', 'user'];
|
|
20
20
|
function collectTabEntries(node) {
|
|
21
21
|
if (node.type === 'tabs') {
|
|
@@ -29,7 +29,7 @@ function collectTabEntries(node) {
|
|
|
29
29
|
}
|
|
30
30
|
return [];
|
|
31
31
|
}
|
|
32
|
-
export function
|
|
32
|
+
export function makeSh3ApiHeadless(zones) {
|
|
33
33
|
return {
|
|
34
34
|
listApps() {
|
|
35
35
|
return listRegisteredApps().map((m) => ({ id: m.id, label: m.label }));
|
|
@@ -168,6 +168,6 @@ export function makeShellApiHeadless(zones) {
|
|
|
168
168
|
dispatchToTerminal: makeDispatchToTerminal({ headless: true }),
|
|
169
169
|
};
|
|
170
170
|
}
|
|
171
|
-
export function
|
|
172
|
-
return
|
|
171
|
+
export function makeSh3ApiForTest() {
|
|
172
|
+
return makeSh3ApiHeadless();
|
|
173
173
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import {
|
|
2
|
+
import { makeSh3ApiHeadless } from './headless';
|
|
3
3
|
function makeMockZoneManager() {
|
|
4
4
|
const data = {
|
|
5
5
|
ephemeral: {},
|
|
@@ -14,46 +14,46 @@ function makeMockZoneManager() {
|
|
|
14
14
|
clearAll: () => { },
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
|
-
describe('
|
|
17
|
+
describe('sh3Api listZones', () => {
|
|
18
18
|
it('returns empty when no ZoneManager provided (stub mode)', () => {
|
|
19
|
-
const api =
|
|
19
|
+
const api = makeSh3ApiHeadless();
|
|
20
20
|
expect(api.listZones()).toEqual([]);
|
|
21
21
|
});
|
|
22
22
|
it('returns one row per shard with the zones it has data in', () => {
|
|
23
23
|
var _a, _b;
|
|
24
|
-
const api =
|
|
24
|
+
const api = makeSh3ApiHeadless(makeMockZoneManager());
|
|
25
25
|
const rows = api.listZones();
|
|
26
26
|
const byShard = new Map(rows.map((r) => [r.shardId, r.zones]));
|
|
27
27
|
expect((_a = byShard.get('shard-a')) === null || _a === void 0 ? void 0 : _a.sort()).toEqual(['session', 'workspace']);
|
|
28
28
|
expect((_b = byShard.get('shard-b')) === null || _b === void 0 ? void 0 : _b.sort()).toEqual(['user', 'workspace']);
|
|
29
29
|
});
|
|
30
30
|
it('filters by shardId when provided', () => {
|
|
31
|
-
const api =
|
|
31
|
+
const api = makeSh3ApiHeadless(makeMockZoneManager());
|
|
32
32
|
const rows = api.listZones('shard-a');
|
|
33
33
|
expect(rows).toHaveLength(1);
|
|
34
34
|
expect(rows[0].shardId).toBe('shard-a');
|
|
35
35
|
expect(rows[0].zones.sort()).toEqual(['session', 'workspace']);
|
|
36
36
|
});
|
|
37
37
|
it('returns empty array for unknown shardId', () => {
|
|
38
|
-
const api =
|
|
38
|
+
const api = makeSh3ApiHeadless(makeMockZoneManager());
|
|
39
39
|
expect(api.listZones('not-a-shard')).toEqual([]);
|
|
40
40
|
});
|
|
41
41
|
});
|
|
42
|
-
describe('
|
|
42
|
+
describe('sh3Api readZone', () => {
|
|
43
43
|
it('returns null when no ZoneManager provided', () => {
|
|
44
|
-
const api =
|
|
44
|
+
const api = makeSh3ApiHeadless();
|
|
45
45
|
expect(api.readZone('shard-a', 'workspace')).toBe(null);
|
|
46
46
|
});
|
|
47
47
|
it('returns peeked value via ZoneManager', () => {
|
|
48
|
-
const api =
|
|
48
|
+
const api = makeSh3ApiHeadless(makeMockZoneManager());
|
|
49
49
|
expect(api.readZone('shard-a', 'workspace')).toEqual({ bar: 2 });
|
|
50
50
|
});
|
|
51
51
|
it('returns null for unknown zone name', () => {
|
|
52
|
-
const api =
|
|
52
|
+
const api = makeSh3ApiHeadless(makeMockZoneManager());
|
|
53
53
|
expect(api.readZone('shard-a', 'bogus')).toBe(null);
|
|
54
54
|
});
|
|
55
55
|
it('returns null for missing shard entry', () => {
|
|
56
|
-
const api =
|
|
56
|
+
const api = makeSh3ApiHeadless(makeMockZoneManager());
|
|
57
57
|
expect(api.readZone('not-a-shard', 'workspace')).toBe(null);
|
|
58
58
|
});
|
|
59
59
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
*
|
|
2
|
+
* sh3.window — host-side facade for spawning satellite windows.
|
|
3
3
|
*
|
|
4
4
|
* Under Tauri, `spawnSatellite` invokes the `sh3_spawn_satellite` Rust
|
|
5
5
|
* command which opens a native WebviewWindow pointed at the embedded
|
|
@@ -24,7 +24,7 @@ function nextLabel() {
|
|
|
24
24
|
export async function spawnSatellite(payload, opts = {}) {
|
|
25
25
|
var _a, _b, _c, _d;
|
|
26
26
|
if (!isTauri()) {
|
|
27
|
-
console.warn('[sh3]
|
|
27
|
+
console.warn('[sh3] sh3.window.spawn called outside Tauri — no-op');
|
|
28
28
|
return '';
|
|
29
29
|
}
|
|
30
30
|
const { invoke } = await import('@tauri-apps/api/core');
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
2
|
import { spawnSatellite } from './window';
|
|
3
|
-
describe('
|
|
3
|
+
describe('sh3.window.spawn (non-Tauri)', () => {
|
|
4
4
|
beforeEach(() => {
|
|
5
5
|
delete globalThis.__TAURI_INTERNALS__;
|
|
6
6
|
});
|
|
@@ -11,14 +11,14 @@ import { type OpenContextMenuOpts, type OpenPaletteOpts } from './actions/listen
|
|
|
11
11
|
import type { ActiveActionDescriptor } from './actions/types';
|
|
12
12
|
import { type DispatchToTerminalResult } from './shell-shard/dispatch-to-terminal';
|
|
13
13
|
/**
|
|
14
|
-
* The process-wide
|
|
14
|
+
* The process-wide sh3 singleton exposed to shards and the sh3's own
|
|
15
15
|
* internal code. Provides state zone creation and overlay managers.
|
|
16
16
|
* Shards receive a pre-bound version via `ShardContext` rather than
|
|
17
|
-
* accessing `
|
|
17
|
+
* accessing `sh3` directly.
|
|
18
18
|
*/
|
|
19
|
-
export interface
|
|
19
|
+
export interface Sh3 {
|
|
20
20
|
/**
|
|
21
|
-
* Declare the state zones a shard (or the
|
|
21
|
+
* Declare the state zones a shard (or the sh3 itself) wants to use.
|
|
22
22
|
* Returns a live reactive object per declared zone. Persistent zones
|
|
23
23
|
* are hydrated from the backend before the call returns.
|
|
24
24
|
*/
|
|
@@ -33,12 +33,12 @@ export interface Shell {
|
|
|
33
33
|
float: FloatManager;
|
|
34
34
|
/** Named layout presets per app. See overlays/presets.ts. */
|
|
35
35
|
presets: PresetManager;
|
|
36
|
-
/** Conflict manager view.
|
|
36
|
+
/** Conflict manager view. Sh3-owned modal for conflict arbitration. */
|
|
37
37
|
conflicts: ConflictsApi;
|
|
38
38
|
/** Color picker. Falls back to native <input type="color"> when no picker shard is contributed. */
|
|
39
39
|
color: ColorApi;
|
|
40
40
|
/** Actions facade — rebind keys, query bindings, open menus/palette. */
|
|
41
|
-
actions:
|
|
41
|
+
actions: Sh3ActionsApi;
|
|
42
42
|
/**
|
|
43
43
|
* Dispatch `line` through a Terminal view's normal submit path. Used by
|
|
44
44
|
* views outside a verb context (floating pickers, dialogs) to drive a
|
|
@@ -46,7 +46,7 @@ export interface Shell {
|
|
|
46
46
|
* focused → sole → fail. Returns synchronously with the routing outcome;
|
|
47
47
|
* the dispatch itself runs fire-and-forget.
|
|
48
48
|
*
|
|
49
|
-
* Mirrors `
|
|
49
|
+
* Mirrors `Sh3Api.dispatchToTerminal` (the verb-side surface). Both
|
|
50
50
|
* read the same module-scoped registry of live Terminal.svelte instances.
|
|
51
51
|
*/
|
|
52
52
|
dispatchToTerminal(line: string): DispatchToTerminalResult;
|
|
@@ -55,7 +55,7 @@ export interface Shell {
|
|
|
55
55
|
* API for managing action bindings and triggering menus/palette
|
|
56
56
|
* programmatically (e.g. from a future settings UI shard).
|
|
57
57
|
*/
|
|
58
|
-
export interface
|
|
58
|
+
export interface Sh3ActionsApi {
|
|
59
59
|
/** Persist a custom shortcut for an action and refresh live state if the app is active. */
|
|
60
60
|
rebind(appId: string, actionId: string, shortcut: string | null): Promise<void>;
|
|
61
61
|
/** Remove a custom shortcut override and refresh live state if the app is active. */
|
|
@@ -72,7 +72,7 @@ export interface ShellActionsApi {
|
|
|
72
72
|
* order. See {@link ActiveActionDescriptor}.
|
|
73
73
|
*
|
|
74
74
|
* Non-reactive: returns a fresh array on each call. Subscribe via
|
|
75
|
-
* {@link
|
|
75
|
+
* {@link Sh3ActionsApi.onActiveChange} to re-call when the active
|
|
76
76
|
* set or shortcuts change.
|
|
77
77
|
*/
|
|
78
78
|
listActive(): ActiveActionDescriptor[];
|
|
@@ -83,5 +83,5 @@ export interface ShellActionsApi {
|
|
|
83
83
|
*/
|
|
84
84
|
onActiveChange(cb: () => void): () => void;
|
|
85
85
|
}
|
|
86
|
-
/** The process-wide
|
|
87
|
-
export declare const
|
|
86
|
+
/** The process-wide sh3 instance. Framework-internal code uses this directly; shards receive a scoped view via `ShardContext`. */
|
|
87
|
+
export declare const sh3: Sh3;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
*
|
|
2
|
+
* sh3 — the framework-facing entry point passed to shards.
|
|
3
3
|
*
|
|
4
4
|
* Conceptually this is the object a shard receives from its activation
|
|
5
5
|
* callback; it exposes the APIs the shard is allowed to touch.
|
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
* Phase 4: registerView (lives on ShardContext, not here).
|
|
9
9
|
* Phase 5: modal / popup / toast overlay managers.
|
|
10
10
|
*
|
|
11
|
-
* For now `
|
|
12
|
-
* exists in a fuller form, per-shard
|
|
11
|
+
* For now `sh3` is a module-level singleton. Once the shard lifecycle
|
|
12
|
+
* exists in a fuller form, per-shard sh3 instances will be constructed per
|
|
13
13
|
* activation with the shardId baked in, so shards no longer need to pass
|
|
14
14
|
* their own id to `state`. Overlay managers stay process-wide because
|
|
15
|
-
* the layer stack is a
|
|
15
|
+
* the layer stack is a sh3-global resource.
|
|
16
16
|
*/
|
|
17
17
|
import { createStateZones } from './state/zones.svelte';
|
|
18
18
|
import { modalManager } from './overlays/modal';
|
|
@@ -20,15 +20,15 @@ import { popupManager } from './overlays/popup';
|
|
|
20
20
|
import { toastManager } from './overlays/toast';
|
|
21
21
|
import { floatManager } from './overlays/float';
|
|
22
22
|
import { presetManager } from './overlays/presets';
|
|
23
|
-
import { conflictsApi } from './conflicts/
|
|
24
|
-
import { colorApi } from './color/
|
|
23
|
+
import { conflictsApi } from './conflicts/sh3-api';
|
|
24
|
+
import { colorApi } from './color/sh3-api';
|
|
25
25
|
import { loadUserBindings, saveUserBinding } from './actions/bindings-store';
|
|
26
26
|
import { openContextMenu as listenersOpenContextMenu, openPalette as listenersOpenPalette, } from './actions/listeners';
|
|
27
27
|
import { setUserBindings, getLiveDispatcherState, onActiveChange as onActiveChangeState, __notifyActiveChange, } from './actions/state.svelte';
|
|
28
28
|
import { listActions, onActionsChange } from './actions/registry';
|
|
29
29
|
import { listActiveFromEntries } from './actions/listActive';
|
|
30
30
|
import { makeDispatchToTerminal } from './shell-shard/dispatch-to-terminal';
|
|
31
|
-
const
|
|
31
|
+
const sh3Actions = {
|
|
32
32
|
async rebind(appId, actionId, shortcut) {
|
|
33
33
|
await saveUserBinding(appId, actionId, shortcut);
|
|
34
34
|
const current = getLiveDispatcherState();
|
|
@@ -65,8 +65,8 @@ const shellActions = {
|
|
|
65
65
|
};
|
|
66
66
|
},
|
|
67
67
|
};
|
|
68
|
-
/** The process-wide
|
|
69
|
-
export const
|
|
68
|
+
/** The process-wide sh3 instance. Framework-internal code uses this directly; shards receive a scoped view via `ShardContext`. */
|
|
69
|
+
export const sh3 = {
|
|
70
70
|
state: createStateZones,
|
|
71
71
|
modal: modalManager,
|
|
72
72
|
popup: popupManager,
|
|
@@ -75,6 +75,6 @@ export const shell = {
|
|
|
75
75
|
presets: presetManager,
|
|
76
76
|
conflicts: conflictsApi,
|
|
77
77
|
color: colorApi,
|
|
78
|
-
actions:
|
|
78
|
+
actions: sh3Actions,
|
|
79
79
|
dispatchToTerminal: makeDispatchToTerminal({ headless: false }),
|
|
80
80
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|