dsh-config-manager 0.1.76 → 0.1.78
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/lib/adapters/plugin-data-declared.d.ts +12 -0
- package/lib/adapters/plugin-data-declared.js +57 -0
- package/lib/adapters/plugin-data.d.ts +4 -6
- package/lib/adapters/plugin-data.js +8 -36
- package/lib/adapters/plugins.d.ts +16 -0
- package/lib/adapters/plugins.js +223 -16
- package/lib/client.d.ts +104 -9
- package/lib/client.js +1800 -718
- package/lib/core/analyzer.js +3 -1
- package/lib/core/backup.d.ts +9 -0
- package/lib/core/backup.js +16 -1
- package/lib/core/messages.d.ts +11 -0
- package/lib/core/messages.js +22 -0
- package/lib/core/plugin-cli.d.ts +26 -0
- package/lib/core/plugin-cli.js +62 -2
- package/lib/core/rollback-attribution.d.ts +81 -0
- package/lib/core/rollback-attribution.js +236 -0
- package/lib/core/rollback-merge.d.ts +22 -0
- package/lib/core/rollback-merge.js +203 -0
- package/lib/core/rollback-point.d.ts +114 -0
- package/lib/core/rollback-point.js +534 -17
- package/lib/core/types.d.ts +28 -0
- package/lib/index.d.ts +26 -3
- package/lib/index.js +129 -16
- package/lib/routes/recovery.js +11 -0
- package/lib/schema/section-registry.js +5 -5
- package/lib/schema/types.d.ts +14 -0
- package/lib/ui/badge-tone.d.ts +16 -0
- package/lib/ui/badge-tone.js +20 -0
- package/lib/ui/i18n.d.ts +4 -4
- package/lib/ui/i18n.js +8 -8
- package/lib/ui/rollback-view.d.ts +95 -0
- package/lib/ui/rollback-view.js +55 -0
- package/lib/ui/selection-model.d.ts +140 -1
- package/lib/ui/selection-model.js +241 -9
- package/package.json +1 -1
- package/src/adapters/plugin-data-declared.ts +60 -0
- package/src/adapters/plugin-data.ts +7 -33
- package/src/adapters/plugins.test.ts +162 -0
- package/src/adapters/plugins.ts +236 -17
- package/src/adapters/units.test.ts +26 -0
- package/src/client/chat/ChatEntryView.tsx +147 -46
- package/src/client/chat/chat-entry-view.test.ts +277 -1
- package/src/client/chat/chat-entry-view.ts +98 -4
- package/src/client/chat/chat-node-registration.ts +71 -0
- package/src/client/chat/chat-slots.ts +30 -12
- package/src/client/common/ContentPicker.tsx +581 -175
- package/src/client/common/host-primitives.ts +64 -1
- package/src/client/common/ui.tsx +17 -3
- package/src/client/config-manager.module.css +630 -397
- package/src/client/css-scale-guard.test.ts +41 -3
- package/src/client/css-token-guard.test.ts +10 -4
- package/src/client/export/ExportView.tsx +2 -0
- package/src/client/index.ts +15 -3
- package/src/client/locales.ts +54 -10
- package/src/client/recovery/RollbackCard.tsx +56 -2
- package/src/client/recovery/RollbackDiffPane.tsx +5 -0
- package/src/client/recovery/RollbackFileChanges.tsx +46 -2
- package/src/client/recovery/recovery-locales.ts +22 -0
- package/src/client/recovery/rollback-file-changes.test.ts +1 -1
- package/src/core/analyzer.ts +3 -1
- package/src/core/backup.ts +16 -1
- package/src/core/messages.ts +22 -0
- package/src/core/plugin-cli.fs.test.ts +65 -3
- package/src/core/plugin-cli.ts +55 -2
- package/src/core/rollback-attribution.test.ts +120 -0
- package/src/core/rollback-attribution.ts +267 -0
- package/src/core/rollback-merge.test.ts +133 -0
- package/src/core/rollback-merge.ts +213 -0
- package/src/core/rollback-point.test.ts +412 -0
- package/src/core/rollback-point.ts +560 -20
- package/src/core/types.ts +29 -0
- package/src/index.facade.test.ts +60 -0
- package/src/index.ts +133 -19
- package/src/routes/recovery.ts +11 -0
- package/src/schema/section-registry.ts +5 -5
- package/src/schema/types.ts +14 -0
- package/src/ui/badge-tone.test.ts +23 -0
- package/src/ui/badge-tone.ts +27 -0
- package/src/ui/i18n.ts +8 -8
- package/src/ui/rollback-view.test.ts +27 -0
- package/src/ui/rollback-view.ts +139 -0
- package/src/ui/selection-model.test.ts +240 -2
- package/src/ui/selection-model.ts +349 -1
|
@@ -10,6 +10,10 @@
|
|
|
10
10
|
* 所以:只在**真要画 / 真要投影的那一刻**取,拿不到就回落本地实现。
|
|
11
11
|
*
|
|
12
12
|
* 该包因此不进 bundle:源码里只有 `require` 调用,白名单登记在 `src/utils/bundle-scan.ts`。
|
|
13
|
+
*
|
|
14
|
+
* 当前消费面(三样,全部「拿不到就回落本地实现」):
|
|
15
|
+
* ① `FileTypeIcon` —— 文件类型图标;② `projectUserText` —— 用户正文投影;
|
|
16
|
+
* ③ `Tag` —— 只读状态标签(2026-10-17 对齐原生:四态徽章直接吃原生调色板)。
|
|
13
17
|
* 三态缓存:undefined = 还没试过;null = 试过了,这台宿主没有;对象 = 拿到了。
|
|
14
18
|
*/
|
|
15
19
|
import type { ComponentType, ReactNode } from 'react'
|
|
@@ -36,10 +40,45 @@ export type DshUserTextProjector = (
|
|
|
36
40
|
references?: { openFile?: unknown; openSkill?: unknown },
|
|
37
41
|
) => ReactNode
|
|
38
42
|
|
|
39
|
-
/**
|
|
43
|
+
/**
|
|
44
|
+
* 宿主 `Tag` 的入参面(只声明我们传的字段):tone 选调色板,children 是已翻译文案。
|
|
45
|
+
* 与 ui-primitives 的 Tag.d.ts 逐字同形;className 也透传(我们一般不用)。
|
|
46
|
+
*/
|
|
47
|
+
export interface DshTagProps {
|
|
48
|
+
tone?: 'outline' | 'solid' | 'neutral' | 'quiet' | 'success' | 'info' | 'warning' | 'danger'
|
|
49
|
+
className?: string
|
|
50
|
+
children?: ReactNode
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* 宿主图标组件的入参面(只声明我们传的字段):
|
|
55
|
+
* ui-primitives 的图标都是 `(props) => svg` 的普通组件,`size` 缺省 16、`strokeWidth` 由
|
|
56
|
+
* Artwork 决定(`…OutlineRegular` = 1px 描边),颜色走 `currentColor`。
|
|
57
|
+
*/
|
|
58
|
+
export interface DshIconProps {
|
|
59
|
+
/** 边长(px;宿主缺省 16)。 */
|
|
60
|
+
size?: number
|
|
61
|
+
/** 追加类名(宿主组件自己的类名照旧生效)。 */
|
|
62
|
+
className?: string
|
|
63
|
+
/** 描边宽度(我们一般不动,留给宿主 Artwork 的档位)。 */
|
|
64
|
+
strokeWidth?: number
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* 我们真的用到的宿主图标 —— **闭集**:名字逐字对齐 ui-primitives 的导出,
|
|
69
|
+
* 只列这三个(复制 / 已复制 / 回退),别把整张 328 个图标的表搬进来。
|
|
70
|
+
*/
|
|
71
|
+
export type DshIconName = 'IconCopyOutlineRegular' | 'IconCheckOutlineRegular' | 'IconRefreshOutlineRegular'
|
|
72
|
+
|
|
73
|
+
/** 宿主原语包里我们消费的那几个导出(其余一律不碰)。 */
|
|
40
74
|
interface HostPrimitivesFace {
|
|
41
75
|
FileTypeIcon?: unknown
|
|
42
76
|
projectUserText?: unknown
|
|
77
|
+
Tag?: unknown
|
|
78
|
+
/** 图标(闭集,见 {@link DshIconName})。 */
|
|
79
|
+
IconCopyOutlineRegular?: unknown
|
|
80
|
+
IconCheckOutlineRegular?: unknown
|
|
81
|
+
IconRefreshOutlineRegular?: unknown
|
|
43
82
|
}
|
|
44
83
|
|
|
45
84
|
let cached: HostPrimitivesFace | null | undefined
|
|
@@ -66,6 +105,30 @@ export function hostFileTypeIcon(): ComponentType<DshFileTypeIconProps> | null {
|
|
|
66
105
|
return null
|
|
67
106
|
}
|
|
68
107
|
|
|
108
|
+
/**
|
|
109
|
+
* DSH 自带的只读标签(徽章):与宿主同一颗组件、同一套调色板,拿不到回 null
|
|
110
|
+
* (调用方回落本仓库的 `.badge[data-kind]` 样式)。
|
|
111
|
+
*/
|
|
112
|
+
export function hostTag(): ComponentType<DshTagProps> | null {
|
|
113
|
+
const tag = hostPrimitives()?.Tag
|
|
114
|
+
if (typeof tag === 'function' || typeof tag === 'object') return tag as ComponentType<DshTagProps>
|
|
115
|
+
return null
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* DSH 自带的图标组件(按导出名取;拿不到回 null ⇒ 调用方回落本仓库的图标)。
|
|
120
|
+
*
|
|
121
|
+
* 为什么按名字取而不是顶层 import:与 FileTypeIcon / projectUserText 同一条纪律(老宿主没有
|
|
122
|
+
* 这份模块表,顶层 import 会把整个浏览器半打挂);**为什么要用宿主图标**(2026-10-17 用户要求):
|
|
123
|
+
* 复制按钮在 DSH 里是 `IconCopyOutlineRegular → IconCheckOutlineRegular` 的**瞬时切换**(无形变动画),
|
|
124
|
+
* 回退用 `IconRefreshOutlineRegular` —— 与动作行同框时字形、描边、视觉重量才与原生一致。
|
|
125
|
+
*/
|
|
126
|
+
export function hostIcon(name: DshIconName): ComponentType<DshIconProps> | null {
|
|
127
|
+
const icon = hostPrimitives()?.[name]
|
|
128
|
+
if (typeof icon === 'function' || typeof icon === 'object') return icon as ComponentType<DshIconProps>
|
|
129
|
+
return null
|
|
130
|
+
}
|
|
131
|
+
|
|
69
132
|
/** DSH 自带的用户正文投影(把会话引用/斜杠名渲染成 chip;拿不到回 null)。 */
|
|
70
133
|
export function hostUserTextProjector(): DshUserTextProjector | null {
|
|
71
134
|
const project = hostPrimitives()?.projectUserText
|
package/src/client/common/ui.tsx
CHANGED
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import type { ChangeEvent, CSSProperties, ReactNode } from 'react'
|
|
14
14
|
import { ExpandChevron } from './Icon.tsx'
|
|
15
|
+
import { badgeTone, type BadgeKind } from '../../ui/badge-tone.ts'
|
|
16
|
+
import { hostTag } from './host-primitives.ts'
|
|
15
17
|
import css from '../config-manager.module.css'
|
|
16
18
|
|
|
17
19
|
/* ---------------- Button ---------------- */
|
|
@@ -185,7 +187,7 @@ export function StatusDot({ kind = 'idle', pulse }: StatusDotProps) {
|
|
|
185
187
|
|
|
186
188
|
/* ---------------- Badge ---------------- */
|
|
187
189
|
|
|
188
|
-
export type BadgeKind
|
|
190
|
+
export type { BadgeKind }
|
|
189
191
|
|
|
190
192
|
export interface BadgeProps {
|
|
191
193
|
kind?: BadgeKind
|
|
@@ -194,9 +196,21 @@ export interface BadgeProps {
|
|
|
194
196
|
title?: string
|
|
195
197
|
}
|
|
196
198
|
|
|
197
|
-
/**
|
|
199
|
+
/**
|
|
200
|
+
* 状态徽章(info=业务色 / ok=成功 / warn=警告 / error=错误)。
|
|
201
|
+
*
|
|
202
|
+
* **优先复用宿主的 `Tag`**(DSH 原生只读标签,与设置页/插件清单里那枚同源):四态映射到
|
|
203
|
+
* 原生调色板的 success / info / warning / danger(映射表在 `src/ui/badge-tone.ts`,可单测)。
|
|
204
|
+
* 拿不到原生包(老宿主)时回落本仓库的 `.badge[data-kind]` —— 两条路径的语义由**同一张表**给出。
|
|
205
|
+
* 原生 Tag 没有 title 入参:需要悬停提示时套一层 inline-flex 的 wrapper,不改变布局。
|
|
206
|
+
*/
|
|
198
207
|
export function Badge({ kind = 'info', children, title }: BadgeProps) {
|
|
199
|
-
|
|
208
|
+
const DshTag = hostTag()
|
|
209
|
+
if (DshTag !== null) {
|
|
210
|
+
const tag = <DshTag tone={badgeTone(kind)}>{children}</DshTag>
|
|
211
|
+
return title === undefined ? tag : <span className={css.badgeHost} title={title}>{tag}</span>
|
|
212
|
+
}
|
|
213
|
+
return <span className={css.badge} data-kind={kind} title={title}>{children}</span>
|
|
200
214
|
}
|
|
201
215
|
|
|
202
216
|
/* ---------------- Banner ---------------- */
|