Skip to content

feat(skills): 支持项目级 Skills(project > global)并补充来源层级透传#480

Merged
phantom5099 merged 1 commit into1024XEngineer:mainfrom
Cai-Tang-www:feat/skills-project-overlay
Apr 27, 2026
Merged

feat(skills): 支持项目级 Skills(project > global)并补充来源层级透传#480
phantom5099 merged 1 commit into1024XEngineer:mainfrom
Cai-Tang-www:feat/skills-project-overlay

Conversation

@Cai-Tang-www
Copy link
Copy Markdown
Collaborator

背景

当前 Skills 仅依赖全局目录,项目内难以固化团队工作流;同时同名 skill 的覆盖关系缺少可观测信息。

变更内容

1) 多源加载与优先级

  • 新增 MultiSourceLoader,按顺序加载多个 source。
  • 启动时按 project -> global 组装 loader:
    • 项目层:<workdir>/.neocode/skills
    • 全局层:~/.neocode/skills(保留 ~/.codex/skills fallback)
  • 同 ID 冲突采用固定策略:project > global
  • 同一来源内重复 ID 仍保留现有 fail-closed(交由 registry 产出重复 issue)。

2) 来源层级元数据

  • 在 skills Source 增加 Layerproject|global|builtin,兼容空值)。
  • Gateway 契约新增 skill.source.layer 字段,并完成 bridge / remote adapter 双向透传。

3) TUI 可观测性

  • /skills 列表的 source 输出升级为 layer/kind(如 project/localglobal/local),便于排查覆盖关系。

4) 容错修复

  • 修复多源加载器的容错:单个 source 非 root-not-found 错误不再中断整体加载。
  • 该类错误降级为 IssueRefreshFailed,并继续加载其他 source(避免项目层异常拖垮全局层)。

5) 文档同步

  • 更新 skills 设计文档与中英文用户文档,明确项目优先全局。
  • 更新 gateway RPC 文档,补充 source.layer 字段说明与示例。

测试

已执行并通过:

  • go test ./internal/skills -count=1
  • go test ./internal/app -run BuildSkillsRegistry -count=1
  • go test ./internal/tui/core/app -run Skill -count=1
  • go test ./internal/gateway ./internal/cli ./internal/tui/services -run Skill -count=1

影响评估

  • 不改变 /skill use/skill off、会话激活/恢复语义。
  • 不改变权限模型(skills 仍不授予工具权限)。
  • 该 PR仍按当前主链路行为工作:skills registry 在 runtime 启动时注入。

@chatgpt-codex-connector
Copy link
Copy Markdown

Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits.
Credits must be used to enable repository wide code reviews.

Copy link
Copy Markdown

@fennoai fennoai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Completed 4 review passes (code quality, performance, security, documentation accuracy).

Summary:

  • 1 low-severity finding on maintainability/documentation accuracy.
  • No performance or security issues found in the changed code.

Comment thread internal/skills/multi_loader.go
@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 27, 2026

Codecov Report

❌ Patch coverage is 88.33333% with 14 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
internal/skills/multi_loader.go 79.31% 7 Missing and 5 partials ⚠️
internal/tui/core/app/skills_commands.go 81.81% 2 Missing ⚠️

📢 Thoughts on this report? Let us know!


merged := Snapshot{
Skills: make([]Skill, 0),
Issues: make([]LoadIssue, 0),
Copy link
Copy Markdown

@fennoai fennoai Bot Apr 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

回复说明

这里的 issue 不是 GitHub Issue,而是 skills.LoadIssue(加载期问题记录)。
internal/skills/multi_loader.go:38Issues: make([]LoadIssue, 0) 指的是 Snapshot.Issues 聚合容器,用于收集技能加载过程中的非致命问题(例如 IssueRefreshFailed、解析告警等),供后续 registry/调用方可观测。

补充:PR 描述里未明确写出的改动

  1. buildSkillsRegistry 签名已变更为接收 workdir,并拆出 resolveWorkspaceSkillsRoot / resolveGlobalSkillsRoot 两个解析函数(internal/app/bootstrap.go)。
  2. 新增 SourceLayer 的合法性校验并放入 Descriptor.Validate(),同时显式兼容空值以兼容旧数据(internal/skills/types.go)。
  3. LocalLoader 新增统一构造路径:NewLocalLoaderWithSourceLayer + newLocalLoader + normalizeSourceLayer,并把 layer 写入解析结果 Source.Layerinternal/skills/loader.go)。
  4. 多源场景下“全部 source 都非 root-not-found 失败”时,MultiSourceLoader.Load 返回 nil error + Issues(而非直接报错),该行为由新增测试覆盖(internal/skills/multi_loader_test.go)。
  5. /skills 展示不只是 layer/kind,还包含回退策略:layer+kind、仅 layer、仅 kind 的兜底拼装逻辑(internal/tui/core/app/skills_commands.go)。
  6. 补了专项覆盖测试:SourceLayer.ValidateDescriptor 的非法 layer 分支、bootstrap 的“项目覆盖全局/工作区缺失回退全局”分支等(internal/skills/coverage_test.gointernal/app/bootstrap_test.go)。

本次处理结果

  • 已完成:解释触发评论中的 issue 指代,并补充 PR 未提及的关键修改点。
  • 未执行:未做代码改动、未推送新提交(本次为评审问答)。

View job run

@phantom5099
Copy link
Copy Markdown
Collaborator

我看有提到兼容旧数据中缺少layer来源的情况,这一点是否需要修正,还是应该兼容即可

@Cai-Tang-www
Copy link
Copy Markdown
Collaborator Author

?

@Cai-Tang-www
Copy link
Copy Markdown
Collaborator Author

layer不是回退,增强字段来的,issue那个注释问题不用管,你们也不看
layer是空置字段后续增强用的,留着不影响,没兼容

@phantom5099
Copy link
Copy Markdown
Collaborator

layer不是回退,增强字段来的,issue那个注释问题不用管,你们也不看 layer是空置字段后续增强用的,留着不影响,没兼容

ok

@phantom5099 phantom5099 merged commit 595c79e into 1024XEngineer:main Apr 27, 2026
3 checks passed
@Cai-Tang-www Cai-Tang-www deleted the feat/skills-project-overlay branch April 28, 2026 11:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants