@dsh-workbench/core 0.1.8 → 0.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client.js +983 -391
- package/dist/client/client.body.js +983 -391
- package/dist/client/index.js +984 -392
- package/dist/host/index.js +366 -106
- package/dist/types/app/client.d.ts +140 -12
- package/dist/types/app/layouts/env-gate/__tests__/gate-deadline.test.d.ts +1 -0
- package/dist/types/app/layouts/env-gate/gate-deadline.d.ts +4 -0
- package/dist/types/app/layouts/rightbar/MarketStates.d.ts +7 -0
- package/dist/types/app/layouts/rightbar/MarketView.d.ts +2 -1
- package/dist/types/app/layouts/rightbar/SharedSection.d.ts +11 -0
- package/dist/types/app/layouts/rightbar/__tests__/market-change.test.d.ts +1 -0
- package/dist/types/app/layouts/rightbar/__tests__/market-live.test.d.ts +1 -0
- package/dist/types/app/layouts/rightbar/__tests__/market-settle.test.d.ts +1 -0
- package/dist/types/app/layouts/rightbar/board-plan.d.ts +2 -0
- package/dist/types/app/layouts/rightbar/market-change.d.ts +4 -0
- package/dist/types/app/layouts/rightbar/market-rows.d.ts +3 -1
- package/dist/types/app/layouts/rightbar/market-settle.d.ts +2 -0
- package/dist/types/app/layouts/rightbar/market-view-text.d.ts +10 -0
- package/dist/types/app/layouts/sidebar/ProjectSwitcher.d.ts +2 -2
- package/dist/types/app/layouts/sidebar/Sidebar.d.ts +1 -1
- package/dist/types/app/layouts/sidebar/WorkspaceRenameDialog.d.ts +8 -0
- package/dist/types/app/layouts/sidebar/WorkspaceRowAction.d.ts +7 -0
- package/dist/types/app/layouts/sidebar/WorkspaceRowLabel.d.ts +8 -0
- package/dist/types/app/layouts/sidebar/WorkspaceSearchField.d.ts +9 -0
- package/dist/types/app/layouts/sidebar/__tests__/workspace-name.test.d.ts +1 -0
- package/dist/types/app/layouts/sidebar/workspace-items.d.ts +11 -0
- package/dist/types/app/layouts/sidebar/workspace-name.d.ts +16 -0
- package/dist/types/app/units/__tests__/registry.test.d.ts +1 -0
- package/dist/types/app/units/fixture-unit-mock.d.ts +3 -1
- package/dist/types/modules/panels/__tests__/market-registries.test.d.ts +1 -0
- package/dist/types/modules/panels/model/market.d.ts +2 -0
- package/dist/types/shared/api/host/__tests__/profile-registries.test.d.ts +1 -0
- package/dist/types/shared/api/host/mount-units.d.ts +13 -6
- package/dist/types/shared/api/host/profile-registries.d.ts +21 -0
- package/dist/types/shared/hooks/mock-mode.d.ts +1 -0
- package/docs/OPERATIONS.md +2 -0
- package/package.json +2 -2
|
@@ -14,6 +14,7 @@ export interface MarketViewProps {
|
|
|
14
14
|
readonly updates?: ModuleUpdateMap | undefined;
|
|
15
15
|
readonly installed?: readonly InstalledWorkbenchModule[] | undefined;
|
|
16
16
|
readonly installedRead?: boolean | undefined;
|
|
17
|
+
readonly settling?: ReadonlySet<string> | undefined;
|
|
17
18
|
readonly mock?: MarketMock | undefined;
|
|
18
19
|
}
|
|
19
|
-
export declare function MarketView({ t, manifests, capabilities, freshness, onChanged, updates, installed, installedRead, mock, }: MarketViewProps): JSX.Element;
|
|
20
|
+
export declare function MarketView({ t, manifests, capabilities, freshness, onChanged, updates, installed, installedRead, settling, mock, }: MarketViewProps): JSX.Element;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Translate } from '@dsh-workbench/shared';
|
|
2
|
+
import { type SharedRow } from './market-rows';
|
|
3
|
+
import { type Pending } from './market-view-text';
|
|
4
|
+
import type { MarketRowAction } from './market-rows';
|
|
5
|
+
export declare function SharedSection({ t, rows, pending, failureOf, act, }: {
|
|
6
|
+
readonly t: Translate;
|
|
7
|
+
readonly rows: readonly SharedRow[];
|
|
8
|
+
readonly pending: Pending | null;
|
|
9
|
+
readonly failureOf: (id: string) => string | null;
|
|
10
|
+
readonly act: (id: string, action: MarketRowAction) => Promise<void>;
|
|
11
|
+
}): JSX.Element | null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Translate } from '@dsh-workbench/shared';
|
|
2
|
+
import type { BundleChange } from '../../../shared/api/bundle-install';
|
|
3
|
+
export declare function changeOf(value: unknown): BundleChange | undefined;
|
|
4
|
+
export declare function changeFailure(change: BundleChange | undefined, t: Translate): string | undefined;
|
|
@@ -36,8 +36,10 @@ export interface InstalledWorkbenchModule {
|
|
|
36
36
|
readonly installed: string;
|
|
37
37
|
readonly latest?: string | undefined;
|
|
38
38
|
}
|
|
39
|
-
export declare function
|
|
39
|
+
export declare function mergeTitles(known: ReadonlyMap<string, string>, manifests: readonly UnitManifest[]): ReadonlyMap<string, string>;
|
|
40
|
+
export declare function installedRows(modules: readonly InstalledWorkbenchModule[], manifests: readonly UnitManifest[], listed: ReadonlySet<string>, known?: ReadonlyMap<string, string> | undefined): MarketRow[];
|
|
40
41
|
export declare function marketActions(row: MarketRow): MarketRowAction[];
|
|
42
|
+
export declare function liveManifests(manifests: readonly UnitManifest[], capabilities: CapabilityMap | null, installed: ReadonlySet<string> | null): readonly UnitManifest[];
|
|
41
43
|
export declare function marketHasUpdates(rows: readonly MarketRow[], shared?: readonly SharedRow[]): boolean;
|
|
42
44
|
export interface MarketSection {
|
|
43
45
|
readonly id: 'installed' | 'not-installed';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { MarketRowAction } from './market-rows';
|
|
2
|
+
export declare const PROGRESS_KEY: Readonly<Record<MarketRowAction, string>>;
|
|
3
|
+
export declare const ACTION_LABEL_KEY: Readonly<Record<MarketRowAction, string>>;
|
|
4
|
+
export interface Pending {
|
|
5
|
+
readonly id: string;
|
|
6
|
+
readonly action: MarketRowAction;
|
|
7
|
+
readonly titleKey?: string | undefined;
|
|
8
|
+
readonly pkg?: string | undefined;
|
|
9
|
+
readonly version?: string | undefined;
|
|
10
|
+
}
|
|
@@ -2,9 +2,9 @@ import type { Translate, WorkspaceView } from '@dsh-workbench/shared';
|
|
|
2
2
|
export interface ProjectSwitcherProps {
|
|
3
3
|
items: readonly WorkspaceView[];
|
|
4
4
|
current: WorkspaceView | null;
|
|
5
|
-
workspaceTitle: (title: string) => string;
|
|
6
5
|
onPick: (workspaceId: string) => void;
|
|
7
6
|
onAdd: () => void;
|
|
7
|
+
onRename: (workspaceId: string, title: string) => Promise<boolean>;
|
|
8
8
|
t: Translate;
|
|
9
9
|
}
|
|
10
|
-
export declare function ProjectSwitcher({ items, current,
|
|
10
|
+
export declare function ProjectSwitcher({ items, current, onPick, onAdd, onRename, t }: ProjectSwitcherProps): JSX.Element;
|
|
@@ -2,7 +2,7 @@ import type { PanelEntry, PanelInfo, RenderSlot, SessionStatusSnapshot, Sessions
|
|
|
2
2
|
export interface SidebarActions {
|
|
3
3
|
listPanels: () => PanelEntry[];
|
|
4
4
|
subscribePanels: (callback: () => void) => () => void;
|
|
5
|
-
|
|
5
|
+
renameWorkspace: (workspaceId: string, title: string) => Promise<boolean>;
|
|
6
6
|
openWorkspace: (workspaceId: string) => void;
|
|
7
7
|
createWorkspace: (path: string) => Promise<{
|
|
8
8
|
workspaceId?: string;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Translate, WorkspaceView } from '@dsh-workbench/shared';
|
|
2
|
+
export interface WorkspaceRenameDialogProps {
|
|
3
|
+
readonly workspace: WorkspaceView;
|
|
4
|
+
readonly t: Translate;
|
|
5
|
+
readonly onClose: () => void;
|
|
6
|
+
readonly onSubmit: (title: string) => Promise<boolean>;
|
|
7
|
+
}
|
|
8
|
+
export declare function WorkspaceRenameDialog({ workspace, t, onClose, onSubmit }: WorkspaceRenameDialogProps): JSX.Element;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Translate, WorkspaceView } from '@dsh-workbench/shared';
|
|
2
|
+
export interface WorkspaceRowActionProps {
|
|
3
|
+
readonly workspace: WorkspaceView;
|
|
4
|
+
readonly t: Translate;
|
|
5
|
+
readonly onEdit: () => void;
|
|
6
|
+
}
|
|
7
|
+
export declare function WorkspaceRowAction({ workspace, t, onEdit }: WorkspaceRowActionProps): JSX.Element;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ReactNode, WorkspaceView } from '@dsh-workbench/shared';
|
|
2
|
+
export interface WorkspaceRowLabelProps {
|
|
3
|
+
readonly workspace: WorkspaceView;
|
|
4
|
+
readonly current: boolean;
|
|
5
|
+
readonly action?: ReactNode;
|
|
6
|
+
readonly onHover?: (hovering: boolean) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare function WorkspaceRowLabel({ workspace, current, action, onHover }: WorkspaceRowLabelProps): JSX.Element;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Translate } from '@dsh-workbench/shared';
|
|
2
|
+
export interface WorkspaceSearchFieldProps {
|
|
3
|
+
readonly t: Translate;
|
|
4
|
+
readonly query: string;
|
|
5
|
+
readonly onQuery: (query: string) => void;
|
|
6
|
+
readonly onCursor: (step: 1 | -1) => void;
|
|
7
|
+
readonly onSubmit: () => void;
|
|
8
|
+
}
|
|
9
|
+
export declare function WorkspaceSearchField({ t, query, onQuery, onCursor, onSubmit, }: WorkspaceSearchFieldProps): JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Translate, WorkspaceView } from '@dsh-workbench/shared';
|
|
2
|
+
import type { MenuEntry } from '@deepseek-ai/dsh-client-ui-primitives';
|
|
3
|
+
export interface WorkspaceItemsOptions {
|
|
4
|
+
readonly results: readonly WorkspaceView[];
|
|
5
|
+
readonly currentId: string | null;
|
|
6
|
+
readonly hoverId: string | null;
|
|
7
|
+
readonly t: Translate;
|
|
8
|
+
readonly onHover: (workspaceId: string | null) => void;
|
|
9
|
+
readonly onEdit: (workspace: WorkspaceView) => void;
|
|
10
|
+
}
|
|
11
|
+
export declare function workspaceMenuItems(options: WorkspaceItemsOptions): MenuEntry[];
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const WORKSPACE_NAME_MAX = 20;
|
|
2
|
+
export declare const WORKSPACE_NAME_INPUT_MAX: number;
|
|
3
|
+
export interface WorkspaceDisplayName {
|
|
4
|
+
readonly dir: string;
|
|
5
|
+
readonly name: string;
|
|
6
|
+
}
|
|
7
|
+
interface Named {
|
|
8
|
+
readonly path: string;
|
|
9
|
+
readonly title: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function basenameOf(value: string): string;
|
|
12
|
+
export declare function displayNameOf(workspace: Named): WorkspaceDisplayName;
|
|
13
|
+
export declare function matchWorkspaces<T extends Named>(items: readonly T[], query: string): T[];
|
|
14
|
+
export declare function titleFor(workspace: Named, draft: string): string;
|
|
15
|
+
export declare function nameTooLong(draft: string): boolean;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { BoardModule, UnitClientFace, UnitManifest } from '@dsh-workbench/shared';
|
|
2
2
|
export declare const FIXTURE_UNIT_ID = "wb-fixture";
|
|
3
|
+
export declare const CRASH_UNIT_ID = "wb-fixture-crash";
|
|
3
4
|
export declare const FIXTURE_FACE: UnitClientFace;
|
|
5
|
+
export declare const CRASH_FACE: UnitClientFace;
|
|
4
6
|
export declare function fixtureRoster(roster: readonly UnitManifest[]): readonly UnitManifest[];
|
|
5
|
-
export declare function fixtureSeed(roster: readonly UnitManifest[], all: readonly BoardModule[]): readonly BoardModule[];
|
|
7
|
+
export declare function fixtureSeed(roster: readonly UnitManifest[], all: readonly BoardModule[], crash?: boolean): readonly BoardModule[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -3,6 +3,7 @@ import type { PluginSource, UnitManifest } from '@dsh-workbench/shared';
|
|
|
3
3
|
import type { BundleCancellation, BundleChange } from '../../../shared/api/bundle-install';
|
|
4
4
|
import type { BundleManager } from '../../../shared/api/host/bundle-manager';
|
|
5
5
|
import type { InstalledModule, ProfileModule } from '../../../shared/api/host/installed-module';
|
|
6
|
+
import { type RegistryNotebook } from '../../../shared/api/host/profile-registries';
|
|
6
7
|
import type { UnitCapability } from '../../../shared/api/host/probe-units';
|
|
7
8
|
import type { ProvisionAction } from '@dsh-workbench/shared/host';
|
|
8
9
|
import type { UnitMountDeps } from '@dsh-workbench/shared/host';
|
|
@@ -81,6 +82,7 @@ export declare function createMarketService(options: {
|
|
|
81
82
|
bundles?: BundleManager | undefined;
|
|
82
83
|
installed?: ((pkg: string) => InstalledModule) | undefined;
|
|
83
84
|
modules?: (() => readonly ProfileModule[]) | undefined;
|
|
85
|
+
registries?: RegistryNotebook | undefined;
|
|
84
86
|
logger?: {
|
|
85
87
|
info?(message: string): void;
|
|
86
88
|
warn?(message: string): void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -3,6 +3,10 @@ import type { UnitManifest } from '@dsh-workbench/shared/host';
|
|
|
3
3
|
import { type RouteTable } from '@dsh-workbench/shared/host';
|
|
4
4
|
import type { ContextRenderer, UnitHostFace, UnitMountDeps, UnitMountResult, UnitCall } from '@dsh-workbench/shared/host';
|
|
5
5
|
import { type UnitReadiness } from './unit-readiness';
|
|
6
|
+
export interface UnitFailure {
|
|
7
|
+
readonly id: string;
|
|
8
|
+
readonly reason: string;
|
|
9
|
+
}
|
|
6
10
|
export interface MountedUnit {
|
|
7
11
|
readonly face: UnitHostFace;
|
|
8
12
|
readonly result: UnitMountResult;
|
|
@@ -12,15 +16,11 @@ export interface UnitsPlan {
|
|
|
12
16
|
readonly mounted: readonly MountedUnit[];
|
|
13
17
|
readonly routes: RouteTable;
|
|
14
18
|
readonly gate: UnitMountResult['gate'];
|
|
15
|
-
readonly prefs: ReadonlyArray<{
|
|
16
|
-
readonly resource: string;
|
|
19
|
+
readonly prefs: ReadonlyArray<NamedEntry & {
|
|
17
20
|
readonly unit: string;
|
|
18
|
-
handle(payload: unknown): unknown;
|
|
19
21
|
}>;
|
|
20
|
-
readonly actions: ReadonlyArray<{
|
|
21
|
-
readonly resource: string;
|
|
22
|
+
readonly actions: ReadonlyArray<NamedEntry & {
|
|
22
23
|
readonly unit: string;
|
|
23
|
-
handle(payload: unknown): unknown;
|
|
24
24
|
}>;
|
|
25
25
|
readonly provision: UnitMountResult['provision'];
|
|
26
26
|
readonly contextRenderers: ReadonlyMap<string, ContextRenderer>;
|
|
@@ -31,9 +31,15 @@ export interface UnitsPlan {
|
|
|
31
31
|
readonly id: string;
|
|
32
32
|
readonly missing: readonly string[];
|
|
33
33
|
}>;
|
|
34
|
+
readonly failed: readonly UnitFailure[];
|
|
34
35
|
readonly warmReads: () => readonly (readonly string[])[];
|
|
35
36
|
readonly disposeLongTasks: () => void;
|
|
36
37
|
}
|
|
38
|
+
interface NamedEntry {
|
|
39
|
+
readonly resource: string;
|
|
40
|
+
handle(payload: unknown): unknown;
|
|
41
|
+
}
|
|
42
|
+
export declare function failureReasonOf(error: unknown): string;
|
|
37
43
|
export declare function mountUnits(faces: readonly UnitHostFace[], deps: {
|
|
38
44
|
ctx: DshHostContext;
|
|
39
45
|
logger?: {
|
|
@@ -50,3 +56,4 @@ export declare function mountUnits(faces: readonly UnitHostFace[], deps: {
|
|
|
50
56
|
readonly bump: (facts: readonly string[]) => void;
|
|
51
57
|
} | undefined;
|
|
52
58
|
}): UnitsPlan;
|
|
59
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { BundleChange } from '../bundle-install.js';
|
|
2
|
+
export interface RegistryEntry {
|
|
3
|
+
readonly scope: string;
|
|
4
|
+
readonly registry: string;
|
|
5
|
+
}
|
|
6
|
+
export interface RegistryNotebook {
|
|
7
|
+
sources(): readonly RegistryEntry[];
|
|
8
|
+
remember(entries: readonly RegistryEntry[]): readonly string[];
|
|
9
|
+
}
|
|
10
|
+
export declare const REGISTRY_MARKER = "# dsh-workbench \u5199\u7684\uFF1A\u8FD9\u4E00\u884C\u7684\u5305\u53EA\u5728\u8FD9\u4E2A\u6E90\u4E0A\uFF08dsh \u5378\u8F7D\u6CA1\u6709\u6E90\u53C2\u6570\uFF0Cpnpm \u5F97\u95EE\u5F97\u5230\uFF09";
|
|
11
|
+
export declare function scopeOf(pkg: string): string | null;
|
|
12
|
+
export declare function normalizeRegistry(url: string): string;
|
|
13
|
+
export declare function sameRegistry(a: string | null | undefined, b: string | null | undefined): boolean;
|
|
14
|
+
export declare function sourcesFromLockfile(text: string): readonly RegistryEntry[];
|
|
15
|
+
export interface RegistryConfigMerge {
|
|
16
|
+
readonly text: string;
|
|
17
|
+
readonly added: readonly string[];
|
|
18
|
+
}
|
|
19
|
+
export declare function mergeRegistryConfig(text: string, entries: readonly RegistryEntry[]): RegistryConfigMerge;
|
|
20
|
+
export declare function registryFailure(change: BundleChange): boolean;
|
|
21
|
+
export declare function createRegistryNotebook(dir: string | null): RegistryNotebook;
|
package/docs/OPERATIONS.md
CHANGED
|
@@ -103,6 +103,7 @@ WORKBENCH_PORT=3091 pnpm run dev # 换端口(监听与实例同一个端口
|
|
|
103
103
|
| API 凭据 | ❌ **有意共享** | `~/.dsh/.credentials.yaml`,两边同一把 key |
|
|
104
104
|
| opencli 运行时(CLI + 插件) | ✅ | `~/.dsh/workbench/opencli/`(`HOME` 指到 `…/home`,见 [ADR-0014](../../../docs/adr/0014-opencli-cost-has-one-owner.md) §2.2) |
|
|
105
105
|
| opencli **daemon** | ❌ **整机一个,隔离不了** | 端口 **19825 被扩展写死**(`background.js` 里 `DAEMON_PORT = 19825`;CLI 侧 `OPENCLI_DAEMON_PORT` 设非默认值直接报错)。所以本机的全局 opencli 与工作台的隔离运行时**抢同一个 daemon**:两边版本不一致时,谁的命令后跑谁就把 daemon 重启成自己那版 |
|
|
106
|
+
| profile 的 pnpm 源(私有 scope) | ⚠️ **由工作台写进去** | `<profile>/.npmrc` 里的 `@scope:registry=…`,前面带一行 `# dsh-workbench 写的…` 标记。**为什么在工作台这一侧写**:dsh 的卸载没有源参数(`runPnpm(['remove', name])`),pnpm 只能从 profile 的 `.npmrc` 链知道源;不写它,装私有源的模块能成、卸不了。规则与边界见 [ADR-0030](../../../docs/adr/0030-private-registries-live-in-the-profile-pnpm-config.md):只加不改、只写 scope 行、不碰 `~/.npmrc`。**删了会怎样**:下次从这个源装会再写回来;已经装着的那种,点卸载时撞 404 会自愈补回再重试一次 |
|
|
106
107
|
|
|
107
108
|
## 排障
|
|
108
109
|
|
|
@@ -113,6 +114,7 @@ WORKBENCH_PORT=3091 pnpm run dev # 换端口(监听与实例同一个端口
|
|
|
113
114
|
| 面板显示"这个项目不是 Coding 仓库" | 该工作区的 git `origin` 不指向 `e.coding.net`(或没有 origin) |
|
|
114
115
|
| 打开面板/按刷新要等 5–8 秒 | 正常:opencli 每次调用有**固定约 5 秒**开销(起浏览器会话;接口本身只要 ~260ms)。**没有缓存**——数据一律实时,列表 = 缺陷 + 状态目录两次调用(限并发 2,实测约 7 秒) |
|
|
115
116
|
| 改了源码没变化 | 忘了 `pnpm run build`,或没重启进程(宿主缓存已加载的包) |
|
|
117
|
+
| 市场页点「卸载」报 `没成功:… 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=` |
|
|
116
118
|
| 体检那屏「检测浏览器通道 · 没连上」,可面板照样能用 | 本机全局 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` |
|
|
117
119
|
| Settings 页报 `overridden by a home patch` | 想在 Settings 里改的行被 `$DSH_HOME/cordis.patch.yml` 或 `--patch` 覆盖了 |
|
|
118
120
|
| **别人机器上** `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 位) |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dsh-workbench/core",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.10",
|
|
4
4
|
"description": "个人工作台:Agent 工作台外壳(左栏 + 常驻对话 + 自研右侧数据面板)。",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"icon": "./icon.svg",
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
"access": "public"
|
|
79
79
|
},
|
|
80
80
|
"dependencies": {
|
|
81
|
-
"@dsh-workbench/shared": "0.1.
|
|
81
|
+
"@dsh-workbench/shared": "0.1.10"
|
|
82
82
|
},
|
|
83
83
|
"scripts": {
|
|
84
84
|
"build": "node scripts/build.mjs && node scripts/build-types.mjs",
|