@wisdomgarden/torque-knowledge 0.1.2 → 1.0.3
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/README.md +37 -7
- package/dist/.meta.json +2 -2
- package/dist/components.db +0 -0
- package/dist/torque-components.md +51 -50
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
|
|
13
13
|
| 文件 | 给谁 | 是什么 |
|
|
14
14
|
| --- | --- | --- |
|
|
15
|
-
| `dist/torque-components.md` | **diting**(`lms-web` 的 CI code review) | 选型决策树 +
|
|
16
|
-
| `dist/components.db` | **`lms-web` 的本地 MCP** | SQLite
|
|
15
|
+
| `dist/torque-components.md` | **diting**(`lms-web` 的 CI code review) | 选型决策树 + 可用组件清单 + 硬约束 + 禁止事项。**只有清单和策略,没有组件细节** —— 细节查 `components.db`。带 diting 认的 frontmatter(单行 `keywords` / `globs`),解包进它的 `rule_dirs` 就能被召回 |
|
|
16
|
+
| `dist/components.db` | **`lms-web` 的本地 MCP** + **diting** | SQLite 组件目录,MCP `search_component()` 和 diting `query_ui_components` 共同的数据源。44 个组件的导出名、英文描述、keywords 和完整 props |
|
|
17
17
|
| `dist/.meta.json` | CI / 下游漂移检测 | `{ knowledge, torque, generatedAt }` —— 这份知识是哪个版本、描述的又是哪个 torque 版本 |
|
|
18
18
|
|
|
19
19
|
## 版本与 `@wisdomgarden/torque` 相互独立
|
|
@@ -50,7 +50,7 @@ src/handwritten/*.md ← 人工提炼的正文片段
|
|
|
50
50
|
└──> scripts/gen.mjs ──> dist/
|
|
51
51
|
```
|
|
52
52
|
|
|
53
|
-
机械的部分(扫源码、解析 props、产 db
|
|
53
|
+
机械的部分(扫源码、解析 props、产 db 和组件清单)在 `gen.mjs` 里,每次 `pnpm build`
|
|
54
54
|
都跑。需要判断力的部分(读懂 readme 提炼选型/约束、复核英文描述)在
|
|
55
55
|
`.claude/skills/torque-knowledge/` 这个 skill 里。
|
|
56
56
|
|
|
@@ -73,13 +73,43 @@ node scripts/check-changes.mjs # 有变化就顺便重新生成
|
|
|
73
73
|
|
|
74
74
|
- **组件清单从 barrel 推,不要 `readdir`。** `components/sticky-box.tsx` 是裸文件、
|
|
75
75
|
没有目录也没有 readme,但公开导出 `StickyBox`;`_inner/` 则不该暴露。barrel 两个问题都没有。
|
|
76
|
-
- **`components.db` 的 schema
|
|
77
|
-
|
|
76
|
+
- **`components.db` 的 schema 是硬契约,而且有两个消费端。** `lms-web` 的 MCP 和 diting 的
|
|
77
|
+
`query_ui_components` 都按字段名取值,改了名两边都静默返回 `undefined`,不会报错。
|
|
78
|
+
**表名 `components` 也是契约** —— diting 不认文件名,它在 `rule_dirs` 下逐个 SQLite
|
|
79
|
+
文件试探「有没有 `components` 表」来发现这份目录,所以文件名能改、表名不能。
|
|
78
80
|
- **db 保持默认的 `DELETE` journal 模式,不要设 WAL。** WAL 标记会持久化进 db header,
|
|
79
81
|
产物在只读目录下会直接打不开。
|
|
82
|
+
- **md 只放「有什么」和「怎么选」,组件细节一律留给 `components.db`。** 清单里只有
|
|
83
|
+
组件名和导出名,没有描述 —— 用途、完整 props、readme 里的注意事项都按需查 db。
|
|
84
|
+
两条界线:
|
|
85
|
+
- **不能砍到只剩组件名。** kebab → Pascal 有一串不规则的(`form-wrapper` →
|
|
86
|
+
`FormItemWrapper`、`provider` → `UiProvider`、`tab` → `Tabs`、`message` →
|
|
87
|
+
`messages`),而且好几个组件导出多个名字。少了导出名,模型要么多查一次 db
|
|
88
|
+
才能写 `import`,要么猜错一个标识符。这一列 1 KB,买的是「不用查就能正确导入」。
|
|
89
|
+
- **也不能整节砍掉。** 模型不知道有什么就不会去查 —— 「不知道自己不知道」。
|
|
90
|
+
这份文件的全部意义就是防止它自己造一个组件或直接用 mantine 原生的。
|
|
91
|
+
- **要明说「一次能查多个」。** 清单没有描述,模型选型时手上是一串候选,逐个查就是
|
|
92
|
+
逐个 round trip。这句话不绑参数形态(空格分隔还是数组由两端实现决定),只说能力。
|
|
93
|
+
|
|
80
94
|
- **`torque-components.md` 的 frontmatter 是 diting 的硬契约**:`keywords` / `globs`
|
|
81
|
-
必须单行逗号分隔(它用 `^keywords:\s*(.*?)$` 解析,多行 YAML
|
|
82
|
-
|
|
95
|
+
必须单行逗号分隔(它用 `^keywords:\s*(.*?)$` 解析,多行 YAML 数组会静默变成空)。
|
|
96
|
+
- **不设 `alwaysApply: true`,但这份 md 事实上每次 review 都全量注入。** 别以为
|
|
97
|
+
`alwaysApply: false` 拦住了什么。召回是 **keywords 驱动**的,而且是对**整个 diff**
|
|
98
|
+
做子串匹配 —— `rule_loader.py` 的 `load_matched_rules` 把「改动文件路径 + 完整 diff」
|
|
99
|
+
拼成一个 `search_text`,然后 `if kw in search_text_lower`。我们的 keywords 里有
|
|
100
|
+
`ui` / `text` / `tab`,而 `build` 含 `ui`、`context` 含 `text`、`table` 含 `tab` ——
|
|
101
|
+
任何非空 diff 基本必中。而 keywords 一命中就 `continue`,`globs` 那条路径根本走不到。
|
|
102
|
+
`globs` 本身也很宽,只是宽得没那么彻底:`_match_glob` 把 `**/*` 压成 `*` 再交给
|
|
103
|
+
Python `fnmatch`,而 `fnmatch` 的 `*` 是匹配 `/` 的,所以 `globs: src/**/*.{tsx,ts}`
|
|
104
|
+
等于「路径里含 `src/` 的任何 `.ts`/`.tsx`」—— lms-web 有 5974 个这样的文件,另有
|
|
105
|
+
296 个在 `testing/` 下(那些只有 keywords 能召回)。
|
|
106
|
+
全量注入本身是可以接受的(组件选型规则本来就该对每个 tsx 生效,14.5 KB 不是大头),
|
|
107
|
+
**但想收敛只能剪 keywords,收窄 `globs` 一个字节都省不下来。** 而剪掉 `ui` / `component`
|
|
108
|
+
这类泛词,模型主动 `search_project_rules` 时的召回也跟着掉 —— 同一个旋钮的两个方向,
|
|
109
|
+
所以现状是刻意的选择,不是疏漏。
|
|
110
|
+
- **别在 `.md` 里写某一端专有的工具名**(`search_component()` 之类)。这份 md 是给
|
|
111
|
+
diting 读的,而那个名字只存在于 lms-web 的 MCP,diting 里没有;写了模型会照着调,
|
|
112
|
+
拿一个 "tool not found" 白烧一轮探索预算。指数据文件(`components.db`)两端都成立。
|
|
83
113
|
- **`gen.mjs` 不写回 `src/fallback.json`。** 缺 entry 就报错退出,由人补。
|
|
84
114
|
写回会让 `pnpm build` 变成改动被追踪源文件的操作。
|
|
85
115
|
- **不要给这个包加 npm 依赖。** 它会被解包进 CI 环境,只用 Node 内置模块。
|
package/dist/.meta.json
CHANGED
package/dist/components.db
CHANGED
|
Binary file
|
|
@@ -6,7 +6,7 @@ keywords: torque, component, ui, mantine, layout, button, icon-button, link-butt
|
|
|
6
6
|
|
|
7
7
|
# Torque UI 组件库
|
|
8
8
|
|
|
9
|
-
> 由 `@wisdomgarden/torque-knowledge@0.
|
|
9
|
+
> 由 `@wisdomgarden/torque-knowledge@1.0.3` 生成,对应 `@wisdomgarden/torque@0.1.2`。
|
|
10
10
|
> 不要手改 —— 它是 npm 包解包出来的,下次装依赖就被覆盖。
|
|
11
11
|
|
|
12
12
|
## 导入方式
|
|
@@ -64,57 +64,58 @@ Server Component 序列化不了。
|
|
|
64
64
|
Client Component 都安全。Mantine 的 `component={ReactComponent}` 只能在 Client
|
|
65
65
|
Component 里用(函数跨 Server/Client 边界无法序列化)。
|
|
66
66
|
|
|
67
|
-
##
|
|
67
|
+
## 可用组件清单
|
|
68
68
|
|
|
69
69
|
全部从 `@wisdomgarden/torque`(lms-web 侧是 `@/ui/base`)导出。
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
|
74
|
-
|
|
|
75
|
-
|
|
|
76
|
-
|
|
|
77
|
-
| link-
|
|
78
|
-
|
|
|
79
|
-
|
|
|
80
|
-
|
|
|
81
|
-
|
|
|
82
|
-
|
|
|
83
|
-
|
|
|
84
|
-
|
|
|
85
|
-
|
|
|
86
|
-
|
|
|
87
|
-
|
|
|
88
|
-
|
|
|
89
|
-
|
|
|
90
|
-
|
|
|
91
|
-
| table
|
|
92
|
-
|
|
|
93
|
-
| tree
|
|
94
|
-
|
|
|
95
|
-
|
|
|
96
|
-
|
|
|
97
|
-
|
|
|
98
|
-
|
|
|
99
|
-
|
|
|
100
|
-
|
|
|
101
|
-
| text-
|
|
102
|
-
|
|
|
103
|
-
|
|
|
104
|
-
|
|
|
105
|
-
|
|
|
106
|
-
|
|
|
107
|
-
|
|
|
108
|
-
|
|
|
109
|
-
|
|
|
110
|
-
|
|
|
111
|
-
|
|
|
112
|
-
|
|
|
113
|
-
|
|
|
114
|
-
|
|
|
115
|
-
|
|
|
116
|
-
|
|
|
117
|
-
|
|
|
70
|
+
**下面只有清单,没有细节。** 每个组件的用途、完整 props、readme 里的注意事项都在组件目录 `components.db` 里 —— 选型和写 props 之前,用你当前环境提供的组件查询工具查一下,不要靠名字猜。
|
|
71
|
+
**一次可以查多个组件。** 把这一轮要用到的候选一起传进去、一趟全拿回来,不要一个一个查。
|
|
72
|
+
|
|
73
|
+
| 组件 | 导出名 |
|
|
74
|
+
| --- | --- |
|
|
75
|
+
| button | `Button` |
|
|
76
|
+
| icon-button | `IconButton` |
|
|
77
|
+
| link-button | `LinkButton` |
|
|
78
|
+
| link-icon-button | `LinkIconButton` |
|
|
79
|
+
| tooltip | `Tooltip` |
|
|
80
|
+
| popover | `Popover`, `PopoverTarget`, `PopoverDropdown` |
|
|
81
|
+
| drawer | `Drawer`, `DrawerManager`, `drawers` |
|
|
82
|
+
| bottom-drawer | `BottomDrawer` |
|
|
83
|
+
| modal | `Modal` |
|
|
84
|
+
| menu | `Menu` |
|
|
85
|
+
| message | `messages` |
|
|
86
|
+
| notifications | `notifications`, `Notification` |
|
|
87
|
+
| alert | `Alert`, `AlertSkeleton` |
|
|
88
|
+
| sticky-box | `StickyBox` |
|
|
89
|
+
| tag | `Tag` |
|
|
90
|
+
| tab | `Tabs`, `TabsTab`, `TabsList`, `TabsPanel` |
|
|
91
|
+
| table | `Table`, `TableSkeleton` |
|
|
92
|
+
| table-pagination | `TablePagination`, `Pagination`, `getPaginationRange` |
|
|
93
|
+
| tree | `Tree` |
|
|
94
|
+
| tree-select | `TreeSelect` |
|
|
95
|
+
| virtualized-tree-select | `VirtualizedTreeSelect` |
|
|
96
|
+
| date-picker | `DatePicker`, `TimePicker`, `DateTimePicker`, `DateRangePicker` |
|
|
97
|
+
| filter | `Filter`, `IconFilter`, `MultiFilter` |
|
|
98
|
+
| data-filter | `DataFilter` |
|
|
99
|
+
| base-input | `BaseInput`, `BaseInputTarget`, `BaseInputWrapper` |
|
|
100
|
+
| form-wrapper | `FormItemWrapper`, `FormItemWrapperDefaultsProvider`, `useFormItemWrapperDefaults` |
|
|
101
|
+
| text-input | `TextInput` |
|
|
102
|
+
| text-area | `TextArea` |
|
|
103
|
+
| number-input | `NumberInput` |
|
|
104
|
+
| password-input | `PasswordInput` |
|
|
105
|
+
| checkbox | `Checkbox` |
|
|
106
|
+
| radio | `Radio` |
|
|
107
|
+
| switch | `Switch`, `SwitchGroup` |
|
|
108
|
+
| select | `Select` |
|
|
109
|
+
| multi-select | `MultiSelect` |
|
|
110
|
+
| combobox | `Combobox`, `useCombobox`, `useComboboxContext` |
|
|
111
|
+
| box | `Box` |
|
|
112
|
+
| text | `Text` |
|
|
113
|
+
| flex | `Flex` |
|
|
114
|
+
| group | `Group` |
|
|
115
|
+
| stack | `Stack` |
|
|
116
|
+
| paper | `Paper` |
|
|
117
|
+
| unstyled-button | `UnstyledButton` |
|
|
118
|
+
| provider | `UiProvider`, `UiContext`, `DefaultUiLink`, `useLocale` |
|
|
118
119
|
|
|
119
120
|
## 硬约束
|
|
120
121
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wisdomgarden/torque-knowledge",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Machine-readable knowledge artifact for @wisdomgarden/torque — component catalog (SQLite) and AI coding rules (Markdown). Consumed by CI code review and local AI tooling, not by application runtime.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|