@dsh-workbench/core 0.2.16 → 0.3.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.
Files changed (193) hide show
  1. package/README.md +6 -2
  2. package/bin/dsh-workbench +17 -15
  3. package/client.js +359 -64
  4. package/dist/client/client.body.js +359 -64
  5. package/dist/client/index.js +658 -2978
  6. package/dist/host/index.js +443 -385
  7. package/dist/types/app/client.d.ts +3 -0
  8. package/dist/types/app/layouts/rightbar/BoardGrid.d.ts +23 -0
  9. package/dist/types/app/layouts/rightbar/board-columns.d.ts +17 -4
  10. package/dist/types/app/layouts/rightbar/rightbar-width.d.ts +16 -0
  11. package/dist/types/app/layouts/rightbar/use-board-split.d.ts +8 -0
  12. package/dist/types/modules/panels/model/diy-report.d.ts +13 -2
  13. package/dist/types/shared/api/host/diy-workshop.d.ts +13 -0
  14. package/dist/types/shared/api/host/runtime-seed.d.ts +0 -2
  15. package/docs/HANDOFF.md +43 -10
  16. package/docs/OPERATIONS.md +52 -0
  17. package/package.json +4 -3
  18. package/preset/diy.patch.yml +3 -0
  19. package/scripts/seed-workshop.sh +461 -13
  20. package/skills/workbench-module-diy/BUILD.md +11 -7
  21. package/skills/workbench-module-diy/DATASOURCE.md +3 -4
  22. package/skills/workbench-module-diy/DESIGN.md +3 -4
  23. package/skills/workbench-module-diy/KIT.md +11 -12
  24. package/skills/workbench-module-diy/LINKAGE.md +6 -7
  25. package/skills/workbench-module-diy/PANEL.md +9 -10
  26. package/skills/workbench-module-diy/REVIEW.md +2 -3
  27. package/skills/workbench-module-diy/SKILL.md +2 -3
  28. package/skills/workbench-module-diy/TOOLING.md +3 -8
  29. package/skills/workbench-module-diy/TOOLS.md +4 -9
  30. package/skills/workbench-module-diy/WIRING.md +3 -3
  31. package/dist/types/app/layouts/__tests__/async-feedback.test.d.ts +0 -1
  32. package/dist/types/app/layouts/__tests__/kit-preview-nav.test.d.ts +0 -1
  33. package/dist/types/app/layouts/__tests__/panel-hint.test.d.ts +0 -1
  34. package/dist/types/app/layouts/__tests__/project-selection.test.d.ts +0 -1
  35. package/dist/types/app/layouts/env-gate/__tests__/force-plan.test.d.ts +0 -1
  36. package/dist/types/app/layouts/env-gate/__tests__/gate-deadline.test.d.ts +0 -1
  37. package/dist/types/app/layouts/env-gate/__tests__/gate-hidden.test.d.ts +0 -1
  38. package/dist/types/app/layouts/env-gate/__tests__/gate-mocks.test.d.ts +0 -1
  39. package/dist/types/app/layouts/env-gate/gate-mock.d.ts +0 -18
  40. package/dist/types/app/layouts/market/__tests__/add-module-mock.test.d.ts +0 -1
  41. package/dist/types/app/layouts/market/__tests__/add-module-stages.test.d.ts +0 -1
  42. package/dist/types/app/layouts/market/__tests__/add-module-text.test.d.ts +0 -1
  43. package/dist/types/app/layouts/market/add-module-mock.d.ts +0 -14
  44. package/dist/types/app/layouts/rightbar/BoardMockStrip.d.ts +0 -5
  45. package/dist/types/app/layouts/rightbar/__tests__/board-fact.test.d.ts +0 -1
  46. package/dist/types/app/layouts/rightbar/__tests__/board-mock.test.d.ts +0 -1
  47. package/dist/types/app/layouts/rightbar/__tests__/board-plan.test.d.ts +0 -1
  48. package/dist/types/app/layouts/rightbar/__tests__/board-selection.test.d.ts +0 -1
  49. package/dist/types/app/layouts/rightbar/__tests__/breadcrumbs.test.d.ts +0 -1
  50. package/dist/types/app/layouts/rightbar/__tests__/market-catalog.test.d.ts +0 -1
  51. package/dist/types/app/layouts/rightbar/__tests__/market-change.test.d.ts +0 -1
  52. package/dist/types/app/layouts/rightbar/__tests__/market-dots.test.d.ts +0 -1
  53. package/dist/types/app/layouts/rightbar/__tests__/market-freshness.test.d.ts +0 -1
  54. package/dist/types/app/layouts/rightbar/__tests__/market-hint-visible.test.d.ts +0 -1
  55. package/dist/types/app/layouts/rightbar/__tests__/market-installed.test.d.ts +0 -1
  56. package/dist/types/app/layouts/rightbar/__tests__/market-live.test.d.ts +0 -1
  57. package/dist/types/app/layouts/rightbar/__tests__/market-mock.test.d.ts +0 -1
  58. package/dist/types/app/layouts/rightbar/__tests__/market-order.test.d.ts +0 -1
  59. package/dist/types/app/layouts/rightbar/__tests__/market-row-icon.test.d.ts +0 -1
  60. package/dist/types/app/layouts/rightbar/__tests__/market-rows-libs.test.d.ts +0 -1
  61. package/dist/types/app/layouts/rightbar/__tests__/market-rows-plugins.test.d.ts +0 -1
  62. package/dist/types/app/layouts/rightbar/__tests__/market-rows.test.d.ts +0 -1
  63. package/dist/types/app/layouts/rightbar/__tests__/market-running-display.test.d.ts +0 -1
  64. package/dist/types/app/layouts/rightbar/__tests__/market-section-icon.test.d.ts +0 -1
  65. package/dist/types/app/layouts/rightbar/__tests__/market-settle.test.d.ts +0 -1
  66. package/dist/types/app/layouts/rightbar/__tests__/market-shared.test.d.ts +0 -1
  67. package/dist/types/app/layouts/rightbar/__tests__/market-state-rules.test.d.ts +0 -1
  68. package/dist/types/app/layouts/rightbar/__tests__/market-workbench-act.test.d.ts +0 -1
  69. package/dist/types/app/layouts/rightbar/__tests__/market-workbench.test.d.ts +0 -1
  70. package/dist/types/app/layouts/rightbar/__tests__/panel-dismiss.test.d.ts +0 -1
  71. package/dist/types/app/layouts/rightbar/__tests__/panel-drag-target.test.d.ts +0 -1
  72. package/dist/types/app/layouts/rightbar/__tests__/panel-mock.test.d.ts +0 -1
  73. package/dist/types/app/layouts/rightbar/__tests__/panel-plugin-rows.test.d.ts +0 -1
  74. package/dist/types/app/layouts/rightbar/__tests__/panel-scope-ui.test.d.ts +0 -1
  75. package/dist/types/app/layouts/rightbar/__tests__/panel-write.test.d.ts +0 -1
  76. package/dist/types/app/layouts/rightbar/__tests__/suite-world.test.d.ts +0 -1
  77. package/dist/types/app/layouts/rightbar/__tests__/use-panels.test.d.ts +0 -1
  78. package/dist/types/app/layouts/rightbar/board-mock.d.ts +0 -22
  79. package/dist/types/app/layouts/rightbar/kit-preview-controls.d.ts +0 -11
  80. package/dist/types/app/layouts/rightbar/kit-preview-frame.d.ts +0 -18
  81. package/dist/types/app/layouts/rightbar/kit-preview-hash.d.ts +0 -1
  82. package/dist/types/app/layouts/rightbar/kit-preview-rows.d.ts +0 -6
  83. package/dist/types/app/layouts/rightbar/kit-preview.d.ts +0 -3
  84. package/dist/types/app/layouts/rightbar/market-installed-mock.d.ts +0 -9
  85. package/dist/types/app/layouts/rightbar/market-mock-types.d.ts +0 -58
  86. package/dist/types/app/layouts/rightbar/market-mock.d.ts +0 -4
  87. package/dist/types/app/layouts/rightbar/panel-mock.d.ts +0 -27
  88. package/dist/types/app/layouts/sidebar/__tests__/current-workspace.test.d.ts +0 -1
  89. package/dist/types/app/layouts/sidebar/__tests__/debug-ui.test.d.ts +0 -1
  90. package/dist/types/app/layouts/sidebar/__tests__/session-pick.test.d.ts +0 -1
  91. package/dist/types/app/layouts/sidebar/__tests__/session-row-ui.test.d.ts +0 -1
  92. package/dist/types/app/layouts/sidebar/__tests__/workspace-groups.test.d.ts +0 -1
  93. package/dist/types/app/layouts/sidebar/__tests__/workspace-name.test.d.ts +0 -1
  94. package/dist/types/app/units/__tests__/fixture-unit-mock.test.d.ts +0 -1
  95. package/dist/types/app/units/__tests__/manifests.test.d.ts +0 -1
  96. package/dist/types/app/units/__tests__/registry.test.d.ts +0 -1
  97. package/dist/types/app/units/fixture-unit-mock.d.ts +0 -7
  98. package/dist/types/dev/MockStrip.d.ts +0 -15
  99. package/dist/types/dev/surface-types.d.ts +0 -53
  100. package/dist/types/dev/surface.d.ts +0 -2
  101. package/dist/types/dev/surface.stub.d.ts +0 -2
  102. package/dist/types/modules/panels/__tests__/approval.test.d.ts +0 -1
  103. package/dist/types/modules/panels/__tests__/config.test.d.ts +0 -1
  104. package/dist/types/modules/panels/__tests__/diy-harness.d.ts +0 -105
  105. package/dist/types/modules/panels/__tests__/diy-report.test.d.ts +0 -1
  106. package/dist/types/modules/panels/__tests__/diy-tools-health.test.d.ts +0 -1
  107. package/dist/types/modules/panels/__tests__/diy-tools-panel.test.d.ts +0 -1
  108. package/dist/types/modules/panels/__tests__/diy-tools-status.test.d.ts +0 -1
  109. package/dist/types/modules/panels/__tests__/diy-tools.test.d.ts +0 -1
  110. package/dist/types/modules/panels/__tests__/face.test.d.ts +0 -1
  111. package/dist/types/modules/panels/__tests__/market-bundle.test.d.ts +0 -1
  112. package/dist/types/modules/panels/__tests__/market-dependency.test.d.ts +0 -1
  113. package/dist/types/modules/panels/__tests__/market-dispatch.test.d.ts +0 -1
  114. package/dist/types/modules/panels/__tests__/market-env.test.d.ts +0 -1
  115. package/dist/types/modules/panels/__tests__/market-plugin.test.d.ts +0 -1
  116. package/dist/types/modules/panels/__tests__/market-registries.test.d.ts +0 -1
  117. package/dist/types/modules/panels/__tests__/market-route.test.d.ts +0 -1
  118. package/dist/types/modules/panels/__tests__/market-tools-harness.d.ts +0 -45
  119. package/dist/types/modules/panels/__tests__/market-tools.test.d.ts +0 -1
  120. package/dist/types/modules/panels/__tests__/market-update.test.d.ts +0 -1
  121. package/dist/types/modules/panels/__tests__/market-workbench-update.test.d.ts +0 -1
  122. package/dist/types/modules/panels/__tests__/market.test.d.ts +0 -1
  123. package/dist/types/modules/panels/__tests__/plugin-actions.test.d.ts +0 -1
  124. package/dist/types/modules/panels/__tests__/plugin-ledger.test.d.ts +0 -1
  125. package/dist/types/modules/panels/__tests__/plugin-panel-market-parity.test.d.ts +0 -1
  126. package/dist/types/modules/panels/__tests__/plugin-panel.test.d.ts +0 -1
  127. package/dist/types/modules/panels/__tests__/plugin-section.test.d.ts +0 -1
  128. package/dist/types/modules/panels/__tests__/plugin-tool-units-harness.d.ts +0 -69
  129. package/dist/types/modules/panels/__tests__/plugin-tool-units.test.d.ts +0 -1
  130. package/dist/types/modules/panels/__tests__/prefs.test.d.ts +0 -1
  131. package/dist/types/modules/panels/__tests__/routes.test.d.ts +0 -1
  132. package/dist/types/modules/panels/__tests__/scope-machine.test.d.ts +0 -1
  133. package/dist/types/modules/panels/__tests__/scope-support.d.ts +0 -51
  134. package/dist/types/modules/panels/__tests__/scope.test.d.ts +0 -1
  135. package/dist/types/modules/panels/__tests__/service-release.test.d.ts +0 -1
  136. package/dist/types/modules/panels/__tests__/service.test.d.ts +0 -1
  137. package/dist/types/modules/panels/__tests__/tools.test.d.ts +0 -1
  138. package/dist/types/shared/__tests__/host-import-barrel.test.d.ts +0 -1
  139. package/dist/types/shared/__tests__/i18n-keys.test.d.ts +0 -1
  140. package/dist/types/shared/api/__tests__/context-ref.test.d.ts +0 -1
  141. package/dist/types/shared/api/host/__tests__/approval-note-injection.test.d.ts +0 -1
  142. package/dist/types/shared/api/host/__tests__/capability-force.test.d.ts +0 -1
  143. package/dist/types/shared/api/host/__tests__/cli-error.test.d.ts +0 -1
  144. package/dist/types/shared/api/host/__tests__/config-sync.test.d.ts +0 -1
  145. package/dist/types/shared/api/host/__tests__/context-inject.test.d.ts +0 -1
  146. package/dist/types/shared/api/host/__tests__/data-root.test.d.ts +0 -1
  147. package/dist/types/shared/api/host/__tests__/diy-debug-act.test.d.ts +0 -1
  148. package/dist/types/shared/api/host/__tests__/events.test.d.ts +0 -1
  149. package/dist/types/shared/api/host/__tests__/fact-writes.test.d.ts +0 -1
  150. package/dist/types/shared/api/host/__tests__/facts.test.d.ts +0 -1
  151. package/dist/types/shared/api/host/__tests__/host-args.test.d.ts +0 -1
  152. package/dist/types/shared/api/host/__tests__/long-task.test.d.ts +0 -1
  153. package/dist/types/shared/api/host/__tests__/panel-state-route.test.d.ts +0 -1
  154. package/dist/types/shared/api/host/__tests__/plugin-catalog.test.d.ts +0 -1
  155. package/dist/types/shared/api/host/__tests__/plugin-login-hint.test.d.ts +0 -1
  156. package/dist/types/shared/api/host/__tests__/plugin-source.test.d.ts +0 -1
  157. package/dist/types/shared/api/host/__tests__/plugin-tools.test.d.ts +0 -1
  158. package/dist/types/shared/api/host/__tests__/png-fixtures.d.ts +0 -17
  159. package/dist/types/shared/api/host/__tests__/post-channels.test.d.ts +0 -1
  160. package/dist/types/shared/api/host/__tests__/preflight-fixtures.d.ts +0 -19
  161. package/dist/types/shared/api/host/__tests__/preflight-warm.test.d.ts +0 -1
  162. package/dist/types/shared/api/host/__tests__/preflight.test.d.ts +0 -1
  163. package/dist/types/shared/api/host/__tests__/probe-cache.test.d.ts +0 -1
  164. package/dist/types/shared/api/host/__tests__/probe-libs.test.d.ts +0 -1
  165. package/dist/types/shared/api/host/__tests__/probe-units-cache.test.d.ts +0 -1
  166. package/dist/types/shared/api/host/__tests__/probe-units-npm-source.test.d.ts +0 -1
  167. package/dist/types/shared/api/host/__tests__/probe-units-release.test.d.ts +0 -1
  168. package/dist/types/shared/api/host/__tests__/probe-units.test.d.ts +0 -1
  169. package/dist/types/shared/api/host/__tests__/probe-verdict.test.d.ts +0 -1
  170. package/dist/types/shared/api/host/__tests__/profile-registries.test.d.ts +0 -1
  171. package/dist/types/shared/api/host/__tests__/provision-dependency.test.d.ts +0 -1
  172. package/dist/types/shared/api/host/__tests__/registry-declaration.test.d.ts +0 -1
  173. package/dist/types/shared/api/host/__tests__/release.test.d.ts +0 -1
  174. package/dist/types/shared/api/host/__tests__/self-update.test.d.ts +0 -1
  175. package/dist/types/shared/api/host/__tests__/tool-approval.test.d.ts +0 -1
  176. package/dist/types/shared/api/host/__tests__/tool-kit.test.d.ts +0 -1
  177. package/dist/types/shared/api/host/__tests__/tool-scope.test.d.ts +0 -1
  178. package/dist/types/shared/api/host/__tests__/tool-surface.test.d.ts +0 -1
  179. package/dist/types/shared/api/host/__tests__/unit-face.test.d.ts +0 -1
  180. package/dist/types/shared/api/host/__tests__/unit-readiness.test.d.ts +0 -1
  181. package/dist/types/shared/api/host/__tests__/unit-registry.test.d.ts +0 -1
  182. package/dist/types/shared/api/host/__tests__/unit-roster-facts.test.d.ts +0 -1
  183. package/dist/types/shared/api/host/__tests__/value-handoff.test.d.ts +0 -1
  184. package/dist/types/shared/api/host/__tests__/version-range.test.d.ts +0 -1
  185. package/dist/types/shared/api/host/__tests__/workspace-store.test.d.ts +0 -1
  186. package/dist/types/shared/api/host/__tests__/write-result.test.d.ts +0 -1
  187. package/dist/types/shared/hooks/__tests__/mock-mode.test.d.ts +0 -1
  188. package/dist/types/shared/hooks/__tests__/use-api-resource.test.d.ts +0 -1
  189. package/dist/types/shared/hooks/__tests__/use-capabilities.test.d.ts +0 -1
  190. package/dist/types/shared/hooks/__tests__/use-visible-busy.test.d.ts +0 -1
  191. package/dist/types/shared/hooks/mock-mode.d.ts +0 -2
  192. package/dist/types/shared/hooks/use-fixture-pick.d.ts +0 -20
  193. /package/dist/types/app/{__tests__/workbench-styles.test.d.ts → layouts/rightbar/rightbar-width.test.d.ts} +0 -0
@@ -181,6 +181,7 @@ export declare const kit: {
181
181
  STORAGE_KEY_PROJECT: "dsh-workbench.project";
182
182
  STORAGE_KEY_RIGHTBAR: "dsh-workbench.rightbar.expanded";
183
183
  STORAGE_KEY_RIGHTBAR_COLUMN: "dsh-workbench.rightbar.column";
184
+ STORAGE_KEY_RIGHTBAR_WIDTH: "dsh-workbench.rightbar.width";
184
185
  RIGHTBAR_FULLSCREEN_WIDTH: 768;
185
186
  LOCALE_NS: "workbench";
186
187
  LOCALES: readonly ["zh", "en"];
@@ -1216,6 +1217,7 @@ export declare const kit: {
1216
1217
  STORAGE_KEY_PROJECT: "dsh-workbench.project";
1217
1218
  STORAGE_KEY_RIGHTBAR: "dsh-workbench.rightbar.expanded";
1218
1219
  STORAGE_KEY_RIGHTBAR_COLUMN: "dsh-workbench.rightbar.column";
1220
+ STORAGE_KEY_RIGHTBAR_WIDTH: "dsh-workbench.rightbar.width";
1219
1221
  RIGHTBAR_FULLSCREEN_WIDTH: 768;
1220
1222
  LOCALE_NS: "workbench";
1221
1223
  LOCALES: readonly ["zh", "en"];
@@ -2246,6 +2248,7 @@ export declare const kit: {
2246
2248
  STORAGE_KEY_PROJECT: "dsh-workbench.project";
2247
2249
  STORAGE_KEY_RIGHTBAR: "dsh-workbench.rightbar.expanded";
2248
2250
  STORAGE_KEY_RIGHTBAR_COLUMN: "dsh-workbench.rightbar.column";
2251
+ STORAGE_KEY_RIGHTBAR_WIDTH: "dsh-workbench.rightbar.width";
2249
2252
  RIGHTBAR_FULLSCREEN_WIDTH: 768;
2250
2253
  LOCALE_NS: "workbench";
2251
2254
  LOCALES: readonly ["zh", "en"];
@@ -0,0 +1,23 @@
1
+ import type { BoardModule, BoardModuleProps, ModuleSummary, PanelStep, SuiteWorld, Translate } from '@dsh-workbench/shared';
2
+ import type { BoardPlan } from './board-plan';
3
+ export declare function workspacePathOf(world: SuiteWorld): string;
4
+ export declare function ModuleHost({ module, step, panelToken, onPanelRefresh, onSummary, ...rest }: {
5
+ module: BoardModule;
6
+ step?: string;
7
+ panelToken: number;
8
+ onPanelRefresh: () => void;
9
+ } & Omit<BoardModuleProps, 'refreshToken' | 'onRefresh' | 'onSummary'> & {
10
+ onSummary: (id: string, summary: ModuleSummary) => void;
11
+ }): JSX.Element;
12
+ export declare function BoardGrid({ entries, panelWidth, world, panelToken, onPanelRefresh, onNavigate, onOpenMarket, onSummary, onCardFailure, t, }: {
13
+ entries: BoardPlan['modules'];
14
+ panelWidth: number;
15
+ world: SuiteWorld;
16
+ panelToken: number;
17
+ onPanelRefresh: () => void;
18
+ onNavigate: (step: PanelStep) => void;
19
+ onOpenMarket: () => void;
20
+ onSummary: (id: string, summary: ModuleSummary) => void;
21
+ onCardFailure: (unit: string, reason: string) => void;
22
+ t: Translate;
23
+ }): JSX.Element | null;
@@ -2,7 +2,20 @@ export declare const BOARD_COLUMN_MIN_WIDTH = 332;
2
2
  export declare const BOARD_COLUMN_GAP = 12;
3
3
  export declare const BOARD_PANEL_PADDING = 12;
4
4
  export declare const BOARD_COLUMNS_AT: number;
5
- export declare function boardFitsTwoColumns(panelWidth: number): boolean;
6
- export type BoardColumns<T> = readonly [readonly T[], readonly T[]];
7
- export declare function splitBoardColumns<T>(items: readonly T[]): BoardColumns<T>;
8
- export declare function boardColumnsOf<T>(items: readonly T[], twoColumns: boolean): readonly (readonly T[])[];
5
+ export declare const BOARD_SPLIT_SEARCH_LIMIT = 100000;
6
+ export declare const BOARD_SPLIT_MIN_GAIN = 32;
7
+ export declare const BOARD_SPLIT_QUIET_MS = 600;
8
+ export declare const BOARD_SPLIT_DEADLINE_MS = 3000;
9
+ export declare function boardColumnCount(panelWidth: number, itemCount: number): number;
10
+ export declare function roundRobinIndexes(count: number, columns: number): readonly number[];
11
+ export declare function roundRobinColumns<T>(items: readonly T[], columns: number): readonly (readonly T[])[];
12
+ export declare function boardImproves(current: readonly number[], candidate: readonly number[], heights: readonly number[], columns: number): boolean;
13
+ export declare function boardColumnIndexes(heights: readonly number[], columns: number): readonly number[];
14
+ export declare function boardAssignment(heights: readonly number[], columns: number): readonly number[];
15
+ export declare function boardColumnsByHeight<T>(items: readonly T[], heights: readonly number[], columns: number): readonly (readonly T[])[];
16
+ export interface BoardSlot {
17
+ readonly index: number;
18
+ readonly breakBefore: boolean;
19
+ readonly trailing: boolean;
20
+ }
21
+ export declare function boardLayout(assignment: readonly number[], columns: number): readonly BoardSlot[];
@@ -0,0 +1,16 @@
1
+ import type { DshLayoutPanels } from '@dsh-workbench/shared';
2
+ import { writeText } from '@dsh-workbench/shared';
3
+ export declare const RIGHTBAR_DEFAULT_WIDTH = 420;
4
+ export declare const RIGHTBAR_WIDTH_MAX = 4000;
5
+ export declare function parseRightbarWidth(raw: string | null): number | null;
6
+ export declare function readRightbarWidth(): number | null;
7
+ export declare function writeRightbarWidth(px: number, write?: typeof writeText): void;
8
+ export interface RightbarWidthMemory {
9
+ seed(px: number): void;
10
+ dispose(): void;
11
+ }
12
+ export declare function createRightbarWidthMemory(panels: DshLayoutPanels | undefined, write?: (px: number) => void): RightbarWidthMemory;
13
+ export declare function ensureRightbarWidthMemory(panels: DshLayoutPanels | undefined, write?: (px: number) => void): RightbarWidthMemory;
14
+ export declare function releaseRightbarWidthMemory(panels: DshLayoutPanels | undefined): void;
15
+ export declare function restoreRightbarWidth(panels: DshLayoutPanels | undefined, remembered?: number | null): void;
16
+ export declare function seedRightbarWidth(panels: DshLayoutPanels | undefined, remembered?: number | null): void;
@@ -0,0 +1,8 @@
1
+ import { type BoardSlot } from './board-columns';
2
+ export interface BoardSplit {
3
+ readonly root: {
4
+ current: HTMLDivElement | null;
5
+ };
6
+ readonly slots: readonly BoardSlot[] | null;
7
+ }
8
+ export declare function useBoardSplit(keys: readonly string[], columns: number): BoardSplit;
@@ -1,5 +1,14 @@
1
1
  import type { PanelUnitReport } from '@dsh-workbench/shared';
2
- import type { WorkshopModule } from '../../../shared/api/host/diy-workshop';
2
+ import { type WorkshopModule, type WorkshopSync, type WorkshopToolchain } from '../../../shared/api/host/diy-workshop';
3
+ export declare const SYNC_STALE_MINUTES = 15;
4
+ export declare const SYNC_STALE_MS: number;
5
+ export declare function syncNotice(input: {
6
+ readonly sync: WorkshopSync | undefined;
7
+ readonly shellVersion: string | undefined;
8
+ readonly toolchain: WorkshopToolchain | undefined;
9
+ readonly now?: number;
10
+ readonly windowMs?: number;
11
+ }): string | undefined;
3
12
  export interface SuiteHealth {
4
13
  readonly state: 'ok' | 'failed' | 'absent';
5
14
  readonly reason?: string;
@@ -59,5 +68,7 @@ export declare function statusOf(options: {
59
68
  readonly open: boolean;
60
69
  readonly health: SuiteHealth;
61
70
  }): ModuleStatus;
62
- export declare function renderStatus(packagesDir: string, lines: readonly ModuleStatus[]): string;
71
+ export declare function renderStatus(packagesDir: string, lines: readonly ModuleStatus[], options?: {
72
+ readonly shellVersion?: string;
73
+ }): string;
63
74
  export declare function renderList(packagesDir: string, modules: readonly WorkshopModule[]): string;
@@ -10,3 +10,16 @@ export declare function workshopPackagesDir(ctx: DshHostContext): string | null;
10
10
  export declare function insideWorkshop(root: string, target: string): boolean;
11
11
  export declare function workshopModules(packagesDir: string, installed?: readonly string[]): readonly WorkshopModule[];
12
12
  export declare function inWorkshopSession(ctx: DshHostContext, workspace: string | null): boolean;
13
+ export interface WorkshopSync {
14
+ readonly state: 'ok' | 'syncing' | 'failed';
15
+ readonly version: string;
16
+ readonly at: string;
17
+ readonly reason?: string;
18
+ }
19
+ export declare function workshopSyncOf(workshopRoot: string): WorkshopSync | undefined;
20
+ export interface WorkshopToolchain {
21
+ readonly core: string;
22
+ readonly moduleTools: string;
23
+ readonly shared: string;
24
+ }
25
+ export declare function workshopToolchainOf(workshopRoot: string): WorkshopToolchain | undefined;
@@ -1,6 +1,5 @@
1
1
  import { spawn } from 'node:child_process';
2
2
  import type { DshHostContext } from '@dsh-workbench/shared';
3
- export declare const WORKSHOP_SKILLS_DIR = "workbench-module-diy";
4
3
  export type SeedLog = (message: string) => void;
5
4
  export interface RuntimeSeedPaths {
6
5
  readonly root: string;
@@ -12,7 +11,6 @@ export interface RuntimeSeedPaths {
12
11
  readonly workshop: string;
13
12
  readonly workshopPackages: string;
14
13
  readonly workshopManifest: string;
15
- readonly skillsLink: string;
16
14
  }
17
15
  export interface RuntimeSeedOptions {
18
16
  readonly root: string;
package/docs/HANDOFF.md CHANGED
@@ -37,7 +37,11 @@
37
37
  DIY 工坊骨架、可写根)由**外壳自己**补齐 —— 不用跑 `setup`,也不用起第二个实例。
38
38
 
39
39
  差别(先跟对方说清):**会话 / 存储不分家**(接着用他原来那份)、**没有独立端口与进程**、
40
- **改外壳源码不热重载**、DIY 工坊依赖是首次启动在后台装的。
40
+ **改外壳源码不热重载**、DIY 工坊依赖是首次启动在后台装的。工坊的工具链(那三个
41
+ `@dsh-workbench/*`)此后**每次启动**都会与**正在跑的那份外壳**比一次(基准经 `DSH_WB_SHELL_ROOT`
42
+ 显式传入 —— 宿主给加载中那份、启动器给 profile 里那份),不同代就在后台增量同步到同代 ——
43
+ 升级外壳不用手动删工坊,**下一次启动**就对上了;同步不上时 `workbench_diy_status` 会说清
44
+ (差在哪、为什么、怎么修),日志在 `$DSH_HOME/workbench/seed.log`。
41
45
 
42
46
  ## 三、B:两步装(独立 profile,占 :3081)
43
47
 
@@ -99,6 +103,12 @@ Settings → 插件里把 `@dsh-workbench/core` 关掉后,工作台会**退化
99
103
  就一个字节不写)。为什么单列这一步:`dsh plugin add` 装完的登记**跳过已存在的依赖**,
100
104
  所以重跑 setup(包已在清单里)时它不会补 bundle —— 那一档是静默的(起得来、侧边栏
101
105
  没入口),现在启动器拿"选中"当硬门禁,这一步就是它给的修复命令。
106
+ 6. `scripts/seed-workshop.sh`(`seed-profile.sh:155-160` 调它)—— 建 / 补齐 **DIY 工坊**:
107
+ 骨架缺才建、依赖缺才装、写 `dsh-wb-module` 入口。**这一步不做代际对齐**:代际比对的基准是
108
+ "正在跑的那份外壳"(`DSH_WB_SHELL_ROOT`),而 `setup` 这趟 profile 里那份还没装 / 还是旧的,
109
+ 所以它**不设基准、这一轮不比对**。**重跑 `setup` 只建骨架 / 装依赖;工坊工具链对上正在跑的那一代
110
+ 发生在下一次启动**(启动器按 profile 里那份、宿主按加载中那份,同一个基准)—— 与 README 的
111
+ "升级要重启一次"一致,不必手动删工坊。
102
112
 
103
113
  **设置不在这一步继承**(这里以前快照 web 的 patch、并继承被它点名的依赖):新机器上
104
114
  `setup` 完的工作台**没有模型供应商**,第一次打开去 设置 → 「配置同步」拉一次即可 ——
@@ -202,6 +212,16 @@ manifest;彩排结束、以及「零上传」的失败,都会自动回滚。
202
212
  - **工作区不干净** → 默认拒(发布会把它们 `git add -A` 一起提交),`--allow-dirty` 才放行;
203
213
  - **目标版本必须高于当前版本**;目标版本若在源上**已完整存在**,直接拒(要补发用 `--resume`);
204
214
  - **npm 没登录** → 就地拉起 `npm login`;
215
+ - **发布产物里零夹具** → 发布构建**之后**、任何上传**之前**跑 `check:release-artifacts --shipped`
216
+ (`packages/workbench/scripts/check-release-artifacts.mjs`):逐份扫**真会进 tarball** 的那批文件
217
+ (`client.js` / `dist/client/*` / `dist/types/**` / `board.css`),内容里出现夹具标记、或文件名本身
218
+ 就是夹具(`dev/**`、`*-mock.*`、`__tests__/*.d.ts`…)就当场拒。这条闸审的是**包内那份**,所以它
219
+ 紧跟发布构建;它要是在构建之后报了红,先看它给的是哪一种 —— 产物**被别的进程重写**了(多半是
220
+ `pnpm run dev` 的 watcher:审计前后各记一次指纹,对不上就是它)还是**构建出来就脏**。
221
+ 它替掉了原先只看 `client.js`
222
+ 一个文件的那条单文件断言 —— 0.2.16 的 tarball 就是那么漏出去的(`dist/client/index.js` 是残留
223
+ 开发档、`dist/types/**` 带着整棵夹具树);来历、三条检查与代价见
224
+ [`../../../.scratch/dev-only-fixtures/spec.md`](../../../.scratch/dev-only-fixtures/spec.md) §9;
205
225
  - **彩排不过**(`publish --dry-run` 打不出包)→ 零上传退出。
206
226
 
207
227
  只能自己盯、脚本不查的两条:
@@ -220,21 +240,33 @@ manifest;彩排结束、以及「零上传」的失败,都会自动回滚。
220
240
  ## 八、版本与兼容(实话)
221
241
 
222
242
  `package.json` 的 `peerDependencies` 里**没有** `@deepseek-ai/dsh`,这是有意的:
223
- dsh 目前是 `0.1.7-rc.2`(预发布),声明范围会让版本不一致的人**装不上**;不声明则是
224
- "谁都能装,坏了当场知道"。
243
+ dsh 现在发的是预发布(npm 的 `next` 频道;本仓**验过的**是 `0.2.1-rc.2`,2026-10-18),
244
+ 声明范围会让版本不一致的人**装不上**;不声明则是"谁都能装,坏了当场知道"。
225
245
 
226
- 代价要清楚:工作台依赖 dsh 的两个注入面(`@deepseek-ai/dsh-client-ui-slots`、
227
- `@deepseek-ai/dsh-client-locale`,见 `dsh.client.inject`),这两个面在 dsh 升级时会动。
228
- 对方的 dsh 版本和上面验过的差得远时,**先在一台上验一次**再铺开。
246
+ 代价要清楚:工作台依赖 dsh 的注入面(`@deepseek-ai/dsh-client-ui-slots`、
247
+ `@deepseek-ai/dsh-client-locale`,见 `dsh.client.inject`)与一批**按名字取的服务**
248
+ (`pluginManager` / `profileContext` / `dshHomePath` / `tools` / `webServer` / `shell`),
249
+ 这些面在 dsh 升级时会动。对方的 dsh 版本和上面验过的差得远时,**先在一台上验一次**再铺开。
250
+ 每次升级要对账哪些面、上一次对账的结论,见
251
+ [`.scratch/dsh-0.2.1-rc.2/spec.md`](../../../.scratch/dsh-0.2.1-rc.2/spec.md)。
252
+
253
+ **devDependency 里的 `@deepseek-ai/dsh-client-ui-primitives` 跟着"验过的 dsh 版本"走**
254
+ ([ADR-0028 §4.1](../../../docs/adr/0028-workbench-ui-uses-dsh-primitives.md)):它只出类型,
255
+ 但类型比运行时旧一代,编译期就替不了你把关。当前两份都钉 `0.2.1-rc.2`
256
+ (`packages/workbench` / `packages/shared`;改完要跑一次 `pnpm install` 更新 `pnpm-lock.yaml`)。
229
257
 
230
258
  想改成"装的时候就拦住",在 `package.json` 里声明:
231
259
 
232
260
  ```json
233
- "peerDependencies": { "@deepseek-ai/dsh": "^0.1.7" }
261
+ "peerDependencies": { "@deepseek-ai/dsh": "^0.2.1-rc.2" }
234
262
  ```
235
263
 
236
- dsh 会用这条做**安装预检**(`evaluatePluginCompatibility`),不满足就拒绝安装,
264
+ dsh 会用这条做**安装预检**,不满足就拒绝安装,
237
265
  可用 `dsh plugin --profile workbench allow-version <包@版本> --dsh-version <版本> --accept-risk` 豁免。
266
+ **自 0.2.1-alpha.4 起预检先读包自己的 `engines.dsh`**:声明了它,上面这条 peer 就被整体忽略
267
+ (只有没有 `engines.dsh` 时才看 peer;`engines.dsh` 里写 `workspace:` 一律判不兼容,
268
+ `engines` 不是对象或 `engines.dsh` 不是字符串会让清单不可读并**直接拒绝**)。要支持一段 dsh 版本,
269
+ 写 `engines.dsh` 比写 peer 更直接。
238
270
 
239
271
  > `NPM_REGISTRY` 是**你们自己的**内网 npm 源地址(形如 `https://<源主机>/<路径>/`)。
240
272
  > 本仓不写它:开源包里不该出现任何内网地址。
@@ -258,8 +290,9 @@ pnpm release:dry # 同上,但 publish 只 dry-run:零上传,结束
258
290
  在同一版上都拉得到才算数([ADR-0043](../../../docs/adr/0043-version-prompt-waits-for-the-whole-release.md))。
259
291
  所以中断续跑那段窗口里、或镜像还没同步全时,市场**不会**提示更新 —— 铺齐后等 10 分钟,
260
292
  或让用户点市场页那颗「重新检查」即可(用户主动的时机一路 `force`,不等缓存);
261
- - **发什么** = pnpm 按各包 `files` / `.gitignore` 打包;**打包清单没人替你核**(见上一章
262
- 「只能自己盯」)。要看清单用 `dsh-wb-module publish`:它只 dry-run、打印清单,不发布。
293
+ - **发什么** = pnpm 按各包 `files` / `.gitignore` 打包;**清单里有没有漏文件仍然没人替你核**(见上一章
294
+ 「只能自己盯」)—— 现在机器核的只是**内容**:`check:release-artifacts --shipped` 盯着这批产物里
295
+ 零夹具。要看清单用 `dsh-wb-module publish`:它只 dry-run、打印清单,不发布。
263
296
 
264
297
  发布必须走 `pnpm publish`(不是 `npm publish`):只有 pnpm 会把 `workspace:*` 改写成真实版本,
265
298
  `npm pack` / `npm publish` 不会 —— 直接发别人装不上。
@@ -49,6 +49,8 @@
49
49
 
50
50
  差别:**会话 / 存储不隔离**(接着用你原来那份)、**没有独立端口与进程**、
51
51
  **改外壳源码不热重载**、DIY 工坊依赖是首次启动在后台装的(几百 MB,失败只落日志)。
52
+ 此后**每次启动**都会比对工坊里那三个 `@dsh-workbench/*` 与**正在跑的那份外壳**的版本,不同代就在后台**增量同步**
53
+ (见下面「工坊工具链怎么跟着外壳走」)。
52
54
 
53
55
  撤销:Plugins 页卸载 `@dsh-workbench/core`(配置与数据不清);`~/.dsh/workbench/**` 想清就手删。
54
56
 
@@ -158,6 +160,47 @@ WORKBENCH_PORT=3091 pnpm run dev # 换端口(监听与实例同一个端口
158
160
  现在的脚本追加前会先把那行单独的 `[]` 让位(`selfcheck` 有判据钉着)。如果你手上那份 profile 是旧脚本建出来的,
159
161
  手工把 `cordis.patch.yml` 里**单独一行**的 `[]` 删掉再起即可(其余内容不用动)。
160
162
 
163
+ ### 工坊工具链怎么跟着外壳走
164
+
165
+ 工坊(`$DSH_HOME/workbench/diy`)里那三个 `@dsh-workbench/*` 必须与**当前跑着的外壳**同代 ——
166
+ 不同代就是"指引是新的、判据与模板是旧的",报错会指着你的声明而不是指着版本。
167
+
168
+ - **判据**:工坊 `node_modules/@dsh-workbench/{core,module-tools,shared}/package.json` 里**实装**的
169
+ `version`,与**基准版本**(见下条)**全等**。不看 `package.json` 里写的范围,也不信 `pnpm` 的退出码 ——
170
+ 装完会按盘上那份复核实装版本,只有真的同代才写 `ok`。
171
+ - **基准 = 正在跑的那份外壳**,由调用者经 `DSH_WB_SHELL_ROOT` 显式传进来:
172
+ 宿主自举给**加载中的那份**(`packageRootOf(import.meta.url)`),启动器给 **profile 里那份**
173
+ `node_modules/@dsh-workbench/core`(只在它真能读出 `package.json` 时才给)。**谁都没传 → 这一轮不比对**
174
+ (不读工坊实装版本、不起同步、不写 `.sync.json`、不动工坊一个字节)。
175
+ ⚠️ **跑脚本的那份副本不算基准**:安装态下启动器与宿主是**两份物理副本**,谁后跑谁说了算会来回漂
176
+ —— 现在启动器那份落后**不会再**把工坊往回拽(实测那一次:启动器 0.3.0 / profile 0.3.1 / 工坊已跟到
177
+ 0.3.1,旧口径把工坊降级成 0.3.0,见 [ADR-0056](../../../docs/adr/0056-workshop-toolchain-follows-the-shell.md) 补记)。
178
+ - **触发**:每次启动都会比一次(`bin/dsh-workbench` 与宿主自举走的那条 `entry`)。
179
+ 无参那一趟(建骨架 / 重跑 `setup`)**只有带基准时才比** —— 启动器兜底建骨架时带,`setup` 那趟
180
+ **不设基准 → 空转**。所以**重跑 `setup` 不做代际对齐**,对齐发生在**下一次启动**工作台时
181
+ (与 README 的"升级要重启一次"一致)。比对是**便宜**的:只读四份 `package.json` 的版本。
182
+ - **不一致 → 后台自愈**:起一个 `nohup` 的 `seed-workshop.sh sync`,把工坊根的 `devDependency`
183
+ 范围与 `pnpm.overrides` 都对齐到基准那一代,再增量 `pnpm install`,跑完复核实装版本。
184
+ 启动路径不等它。
185
+ - **状态文件**:`$DSH_HOME/workbench/diy/.sync.json`(`state` / `version` / `at` / `reason`),四种态:
186
+ - `ok`:复核过、同代。⚠️ **`ok` 可能是旧版本的记录** —— 判据**永远是实装版本**,
187
+ `.sync.json` 只用于退避与说人话,别拿它当"装好了"的证据;
188
+ - `syncing`:正在后台同步;超过 15 分钟还停在这,`workbench_diy_status` 会说
189
+ 「⚠️ 工坊工具链上一次同步没走完(这条停在 <at>,超过 15 分钟了)」;
190
+ - `failed`:**这一轮没修好**(原因在 `reason` 里),`workbench_diy_status` 会直说
191
+ 「⚠️ 工坊工具链还是上一代(…;外壳已经是 <版本>):<原因>」并把修法一起给出来;
192
+ - 文件不在:还没有同步记录(首次 / 天然同代);**实装版本与外壳同代时不出声**,不同代时显示
193
+ 「⏳ 工坊工具链还是上一代(工坊里 <包> <版本>,外壳 <版本>)—— 下一轮工作台启动时会对齐到 <版本>;一直这样就看 `$DSH_HOME/workbench/seed.log`」。
194
+ - **去哪看**:日志在 `$DSH_HOME/workbench/seed.log`(每次同步都写:比对的实装版本、开始自愈、
195
+ `pnpm install` 的原话、复核结果);状态也可以直接问 agent:`workbench_diy_status`。
196
+ - **失败了怎么修**:先照状态里那条命令来 —— `cd "$DSH_HOME/workbench/diy" && pnpm install`;
197
+ 还是不行就把工坊目录删掉再重启一次工作台(骨架会自己重建;`packages/` 下你造的模块先留着或另存)。
198
+ 两句常见原因:PATH 上没有 `pnpm`(装好后 `cd <工坊> && pnpm install`)、
199
+ 工坊根 `package.json` 被手改坏了(修回一份合法 JSON)。
200
+ - **离线 / 装不动**:就停在旧一代,但**看得见**(`failed` + `reason` + 修法)。同一个外壳版本上失败过,
201
+ 一小时内不再重试(`SYNC_BACKOFF_SECONDS=3600`);外壳换了一代就是新问题,会重新试。
202
+ 自愈锁的过期判据是 15 分钟(`SYNC_LOCK_STALE_MINUTES=15`,持锁者崩了不会被永久锁死)。
203
+
161
204
  ## 排障
162
205
 
163
206
  | 症状 | 原因 |
@@ -167,8 +210,17 @@ WORKBENCH_PORT=3091 pnpm run dev # 换端口(监听与实例同一个端口
167
210
  | 面板显示"这个项目不是 Coding 仓库" | 该工作区的 git `origin` 不指向 `e.coding.net`(或没有 origin) |
168
211
  | 打开面板/按刷新要等 5–8 秒 | 正常:opencli 每次调用有**固定约 5 秒**开销(起浏览器会话;接口本身只要 ~260ms)。**没有缓存**——数据一律实时,列表 = 缺陷 + 状态目录两次调用(限并发 2,实测约 7 秒) |
169
212
  | 改了源码没变化 | 忘了 `pnpm run build`,或没刷新页面;改过 `vite.config.ts` 后没重启(正在跑的 watch 用的还是旧配置) |
213
+ | 跑门禁/发版时 `check:release-artifacts` 报「判据自己碰了包内产物」,或 `--shipped` 报一份莫名其妙的产物红 | 多半是**假红** —— 见下面「发版那条闸报红的三种假红」 |
170
214
  | 市场页点「卸载」报 `没成功:… ERR_PNPM_FETCH_404 GET https://registry.npmjs.org/@你的私有 scope/…` 之类 | 这个 profile 里的私有包不在 pnpm 默认源上,而 dsh 的卸载**不带源**。工作台会自己补上 `<profile>/.npmrc` 的 `@scope:registry=` 再重试一次([ADR-0030](../../../docs/adr/0030-private-registries-live-in-the-profile-pnpm-config.md));**还失败**说明那个包没有 scope(一行 scope 行表达不了),这时才需要人/agent 上手:`dsh plugin --profile <p> remove '<包名>' --config.registry=<那个源>`(`pnpm remove` 不认 `--registry=`),或者给 profile 自己配一行默认 `registry=` |
171
215
  | 体检那屏「检测浏览器通道 · 没连上」,可面板照样能用 | 本机全局 opencli 与隔离运行时版本不一致 ⇒ daemon 被顶成对方那版(`Stale daemon detected: daemon vX != CLI vY`)。下一条浏览器命令会自动把它重启回来,体检也会复检后改回「已连接」([ADR-0024](../../../docs/adr/0024-warm-the-sites-before-the-panel.md) §3.2.1)。**要彻底不抖**:让两边同版本 —— 把 `OPENCLI_PIN`(`src/shared/config/constants.ts`)对齐到 `opencli --version`,再 `npm i --prefix ~/.dsh/workbench/opencli/toolchain @jackwener/opencli@<那个版本> --cache ~/.dsh/workbench/opencli/npm-cache` |
172
216
  | Settings 页报 `overridden by a home patch` | 想在 Settings 里改的行被 `$DSH_HOME/cordis.patch.yml` 或 `--patch` 覆盖了 |
173
217
  | `./bin/dsh-workbench` 直接拒绝启动,说 `@dsh-workbench/core 不在 dsh.profile.bundles 里` | 包装着但**没被选中**(在 Settings → 插件里关过;或装到一半:`dsh plugin add` 的 pnpm 那半成功、装完的登记跳过了已存在的依赖)。这一档以前是静默的 —— 起得来、只是侧边栏没有工作台。现在拒绝启动是为了不给你一台"什么都对但没入口"的实例:跑它打印的那条 `./bin/dsh-workbench setup`(幂等,`seed-profile.sh ensure-selected` 会把这一项补回去) |
174
218
  | **别人机器上** `npx @dsh-workbench/core setup` 报 `scripts/seed-profile.sh: Permission denied`(或体检永远说"隔离运行时没装好") | 发出去的包里**随包脚本丢了 x 位**:`pnpm publish` 只给 `package.json#bin` 点名那条文件 755,其余一律 644(`npm pack` 会保留,而 `git` 里的 x 位不进 tarball —— 所以**本机永远复现不出来**)。0.1.6 的已知缺陷:应急 `chmod +x <包目录>/{scripts/seed-profile.sh,bin/opencli-isolated}`,正规解是升到 0.1.7(启动器与 `selfcheck` 已改成不吃 x 位) |
219
+
220
+ **发版那条闸(`check:release-artifacts`)报红的三种假红**:
221
+
222
+ | 来路 | 看到什么 |
223
+ |---|---|
224
+ | 环境里带着 `WB_STAGE_DIR`(判据内部的暂存开关) | 发布构建落进临时根、包内那份没动,而 `--shipped` 审的正是包内那份 ⇒ 假红。发版构建会**当场忽略它**并打一行说明;发版环境里别带它 |
225
+ | `pnpm run dev` 的 watcher 在审计中间重写产物 | 发版脚本点名「**被别的进程重写**」(审计前后各记一次指纹,对不上就是它);门禁那条会说"判据自己碰了包内产物"。先停 watcher 再跑 |
226
+ | 在开发树上直接跑 `--shipped` | 本来就红(包内那份是开发档):`--shipped` 的前提是**刚跑过发布构建**,判据会自述这一档。自查用默认档 —— 它建到临时根、不碰开发产物 |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dsh-workbench/core",
3
- "version": "0.2.16",
3
+ "version": "0.3.1",
4
4
  "description": "个人工作台:Agent 工作台外壳(左栏 + 常驻对话 + 自研右侧数据面板)。",
5
5
  "type": "module",
6
6
  "icon": "./icon.svg",
@@ -72,7 +72,7 @@
72
72
  },
73
73
  "devDependencies": {
74
74
  "@arch-guard/core": "^0.11.0",
75
- "@deepseek-ai/dsh-client-ui-primitives": "0.1.7-rc.2",
75
+ "@deepseek-ai/dsh-client-ui-primitives": "0.2.1-rc.2",
76
76
  "@types/node": "^24.19.0",
77
77
  "@types/react": "^19.3.0",
78
78
  "@vitest/coverage-v8": "^5.0.2",
@@ -87,7 +87,7 @@
87
87
  "access": "public"
88
88
  },
89
89
  "dependencies": {
90
- "@dsh-workbench/shared": "0.2.16"
90
+ "@dsh-workbench/shared": "0.3.1"
91
91
  },
92
92
  "scripts": {
93
93
  "build": "node scripts/build.mjs && node scripts/build-types.mjs",
@@ -97,6 +97,7 @@
97
97
  "arch": "arch-guard",
98
98
  "selfcheck": "node scripts/selfcheck.mjs",
99
99
  "check:runtimes": "node scripts/check-runtimes.mjs",
100
+ "check:release-artifacts": "node scripts/check-release-artifacts.mjs",
100
101
  "check": "pnpm -w run check",
101
102
  "test": "vitest run",
102
103
  "coverage": "vitest run --coverage",
@@ -124,6 +124,9 @@
124
124
  - id: tool-plugin-manager
125
125
  name: '@deepseek-ai/dsh-plugin-manager/tools'
126
126
  disabled: !!js "!ctx.get('profileContext')"
127
+ - id: tool-plugin-market
128
+ name: '@deepseek-ai/dsh-plugin-market/tools'
129
+ disabled: true
127
130
  - id: tool-cordis
128
131
  name: '@deepseek-ai/dsh-tool-cordis'
129
132
  - id: skill-filesystem