feat(knowledge): 支持模块级技术画像与双读

This commit is contained in:
zhiye.sun
2026-09-03 17:13:14 +08:00
parent 018bc2e914
commit 5e465faa7b
7 changed files with 26 additions and 11 deletions
+4 -1
View File
@@ -30,7 +30,10 @@
"plugins/doc", "plugins/doc",
"plugins/git", "plugins/git",
"plugins/knowledge", "plugins/knowledge",
"plugins/skill" "plugins/skill",
"plugins/profile",
"plugins/java",
"plugins/python"
] ]
}, },
"dependencies": { "dependencies": {
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "knowledge", "name": "knowledge",
"version": "0.5.0", "version": "0.6.0",
"description": "项目初始化、任务交接、复盘与知识沉淀工作流。", "description": "项目初始化、任务交接、复盘与知识沉淀工作流。",
"author": { "author": {
"name": "CraftKit" "name": "CraftKit"
+4 -4
View File
@@ -5,7 +5,7 @@ description: 初始化或更新项目的 AGENTS.md 与 .craftkit 项目资料;
# 项目初始化 # 项目初始化
建立可持续维护的项目上下文,使后续 Agent 能识别项目用途、技术栈、代码边界、内部依赖标识和适用规范。只初始化 Agent 与知识资料,不默认生成业务代码。 建立可持续维护的项目上下文,使后续 Agent 能识别项目用途、模块级技术栈、代码边界、内部依赖标识和适用规范。只初始化 Agent 与知识资料,不默认生成业务代码。
## 选择模式 ## 选择模式
@@ -21,15 +21,15 @@ description: 初始化或更新项目的 AGENTS.md 与 .craftkit 项目资料;
1. 确认项目根目录、初始化模式和参考材料范围。 1. 确认项目根目录、初始化模式和参考材料范围。
2. 扫描当前项目;只在用户授权的路径中扫描参考项目。 2. 扫描当前项目;只在用户授权的路径中扫描参考项目。
3. 展示自动识别的信息、证据、冲突和待确认项。 3. 展示自动识别的信息、证据、冲突和待确认项;读取已有画像时兼容 Schema 1 和 Schema 2。
4. 通过简短提问补齐无法可靠推断的项目用途、包名、框架、精确版本、公共 profile、内部依赖和约束;前端项目还需确认组件库、组件根、文档入口及参考项目范围。禁止默认最新版本。 4. 通过简短提问补齐无法可靠推断的项目用途、包名、框架、精确版本、公共 profile、内部依赖和约束;前端项目还需确认组件库、组件根、文档入口及参考项目范围。禁止默认最新版本。
5. 展示拟创建或修改的文件及关键内容,取得确认后再写入。 5. 展示拟创建或修改的文件及关键内容,取得确认后再写入;Schema 1 升级必须展示完整字段差异。
6. 从 [assets](assets/project.json) 中选择模板,生成或合并 `AGENTS.md`、`.craftkit/project.json`、目录说明、嵌套忽略规则、必要索引和 `.craftkit/standards/document-maintenance.md`;存在前端能力时同时准备 `.craftkit/standards/frontend/components.md` 的最小索引。 6. 从 [assets](assets/project.json) 中选择模板,生成或合并 `AGENTS.md`、`.craftkit/project.json`、目录说明、嵌套忽略规则、必要索引和 `.craftkit/standards/document-maintenance.md`;存在前端能力时同时准备 `.craftkit/standards/frontend/components.md` 的最小索引。
7. 已有文件必须先完整读取并做保守合并;不明确的用户章节和字段原样保留,不直接覆盖。 7. 已有文件必须先完整读取并做保守合并;不明确的用户章节和字段原样保留,不直接覆盖。
8. 初始化后验证 JSON、索引链接、文档维护规范,以及 `.craftkit/local/`、`.craftkit/cache/` 的 Git 忽略状态;按[文档目录配置](references/project-config.md#文档目录)验证过程、共享设计、归档路径和生命周期策略,不创建示例任务或业务文档。 8. 初始化后验证 JSON、索引链接、文档维护规范,以及 `.craftkit/local/`、`.craftkit/cache/` 的 Git 忽略状态;按[文档目录配置](references/project-config.md#文档目录)验证过程、共享设计、归档路径和生命周期策略,不创建示例任务或业务文档。
9. 使用 `guidance` 对一个真实项目问题执行检索验证;未安装该 Skill 时改用相同的入口顺序手工验证。 9. 使用 `guidance` 对一个真实项目问题执行检索验证;未安装该 Skill 时改用相同的入口顺序手工验证。
框架版本写入 `technology.frameworks`。成熟项目优先从构建清单和锁文件探测;空项目根据用户选择或参考项目建议填写。只有公共 profile 已真实存在且版本范围匹配时才写入 `profile`,否则保留为空并记录待确认事项。 Schema 1 的框架版本继续从 `technology.frameworks` 读取。Schema 2 保留顶层兼容概要,并把精确语言、框架、版本和证据写入 `modules[].technology`。`preferredProfiles` 只记录用户确认的项目偏好,不表示当前机器已经安装插件;运行时发现结果不得写入共享画像。
前端组件信息写入 `frontend`。成熟项目从依赖清单、锁文件、组件目录、类型和现有调用提取;空项目根据用户已确认的技术选型或授权参考提议填写。未知组件库或版本保持为空,不根据框架名称自行猜测。 前端组件信息写入 `frontend`。成熟项目从依赖清单、锁文件、组件目录、类型和现有调用提取;空项目根据用户已确认的技术选型或授权参考提议填写。未知组件库或版本保持为空,不根据框架名称自行猜测。
@@ -1,9 +1,10 @@
{ {
"schemaVersion": 1, "schemaVersion": 2,
"initialization": { "mode": "new", "references": [] }, "initialization": { "mode": "new", "references": [] },
"project": { "name": "", "description": "", "type": "other" }, "project": { "name": "", "description": "", "type": "other" },
"technology": { "languages": [], "frameworks": [], "buildTools": [], "databases": [] }, "technology": { "languages": [], "frameworks": [], "buildTools": [], "databases": [] },
"code": { "sourceRoots": [], "packageRoots": [], "modules": [] }, "code": { "sourceRoots": [], "packageRoots": [], "modules": [] },
"modules": [],
"dependencies": { "internal": [], "public": [] }, "dependencies": { "internal": [], "public": [] },
"frontend": { "frontend": {
"framework": "", "framework": "",
@@ -15,6 +15,16 @@
- `guidance` 指向 `.craftkit/` 内的索引入口。 - `guidance` 指向 `.craftkit/` 内的索引入口。
- `initialization.references` 记录参考项目名称、用途、允许提炼范围和可共享的相对位置。 - `initialization.references` 记录参考项目名称、用途、允许提炼范围和可共享的相对位置。
## Schema 兼容
- Schema 1 没有顶层 `modules` 时,将顶层技术栈和 `code` 边界作为根模块候选,不自动改写文件。
- Schema 2 保留顶层 `technology` 原有字段类型,增加 `modules[].technology` 表达模块级精确信息。
- `modules[].technology.preferredProfiles` 是项目确认的偏好,不表示当前机器已安装对应插件。
- 插件发现、匹配状态和本机路径属于运行时信息,只存在于任务上下文或 `.craftkit/local/`。
- 所有读取方完成 Schema 1/2 双读后,`init` 才能在用户确认差异后写入 Schema 2。
模块根使用项目相对正斜线路径。目标路径命中多个模块时采用最长根;同长度重复根视为配置冲突。
## 文档目录 ## 文档目录
| 字段 | 默认值 | 用途 | | 字段 | 默认值 | 用途 |
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "skill", "name": "skill",
"version": "0.2.2", "version": "0.3.0",
"description": "项目规范检索与维护工具。", "description": "项目规范检索与维护工具。",
"author": { "author": {
"name": "CraftKit" "name": "CraftKit"
+4 -3
View File
@@ -12,10 +12,11 @@ description: 检索当前项目的 AGENTS.md、.craftkit 项目资料和 CraftKi
1. 确定任务涉及的目录、文件类型和主题。 1. 确定任务涉及的目录、文件类型和主题。
2. 读取从项目根到目标目录沿途适用的 `AGENTS.md`,距离目标更近的文件约束更具体。 2. 读取从项目根到目标目录沿途适用的 `AGENTS.md`,距离目标更近的文件约束更具体。
3. 若存在 `.craftkit/project.json`,读取其中的项目类型、技术栈、代码边界和规范入口。 3. 若存在 `.craftkit/project.json`,读取其中的项目类型、技术栈、代码边界和规范入口。
4. 涉及框架时按[版本 Profile 路由](references/profile-routing.md)确定当前项目版本;普通开发只加载当前 profile,升级或版本比较才加载源、目标两个 profile。 4. 涉及技术栈时先按目标路径确定模块,再按[版本 Profile 路由](references/profile-routing.md)确定当前版本;Schema 1 或没有模块时使用顶层技术栈作为根模块候选。
5. 按需读取 `.craftkit/agents/index.md`、`.craftkit/standards/index.md`、`.craftkit/knowledge/index.md`;涉及需求、设计、规范或知识时同时读取命中的文档维护规则,只继续读取索引命中的域、路由和正文。 5. 按需读取 `.craftkit/agents/index.md`、`.craftkit/standards/index.md`、`.craftkit/knowledge/index.md`;涉及需求、设计、规范或知识时同时读取命中的文档维护规则,只继续读取索引命中的域、路由和正文。
6. 项目资料未覆盖主题时,读取[公共基线索引](references/guidance/index.md),只加载当前任务需要的规则。 6. 当前会话发现对应语言提供方时,由提供方读取自身 Profile 资料;未发现时报告 `missing`,不扫描插件缓存。
7. 索引缺失或没有命中时,才在相应目录做受控关键词搜索;不得先递归加载整个知识库。 7. 项目资料和已发现的技术提供方均未覆盖主题时,读取[公共基线索引](references/guidance/index.md),只加载当前任务需要的规则。
8. 索引缺失或没有命中时,才在相应目录做受控关键词搜索;不得先递归加载整个知识库。
目录布局和优先级的详细说明见[检索布局](references/layout.md)。 目录布局和优先级的详细说明见[检索布局](references/layout.md)。