@feng0531/dsh-code-review 0.38.0 → 0.40.0
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/CHANGELOG.md +41 -409
- package/CORE-ALIGNMENT-TASKS.md +47 -0
- package/CORE-SOURCE-INVENTORY.md +168 -0
- package/DEVELOPMENT.md +52 -0
- package/README.md +76 -145
- package/RELEASE-NOTES.md +23 -0
- package/index.mjs +1 -1
- package/package.json +2 -2
- package/src/dependency-chain.mjs +44 -0
- package/src/snapshot.mjs +14 -5
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# 参考源码对照
|
|
2
|
+
|
|
3
|
+
供维护者核查实现依据。使用方法见 [README](README.md),开发优先级见 [能力清单](CORE-ALIGNMENT-TASKS.md)。
|
|
4
|
+
|
|
5
|
+
参考版本固定为 alibaba/open-code-review 提交 2d67596c961f80436deb2afa643efa2b1725d34c,不随上游最新分支变化。
|
|
6
|
+
|
|
7
|
+
## 对照结论
|
|
8
|
+
|
|
9
|
+
已阅读核心审查模块、54 篇语言规则,以及相关的 Git 命令、路径、模型和覆盖状态依赖。**阅读完成不等于实现完成。**
|
|
10
|
+
|
|
11
|
+
| 参考模块 | 当前对应能力 | 仍需补齐 |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| agent、delegate | 风险规划、分组、窗口、综合、多次审查、失败回退 | 剩余预算组合与完整场景验收 |
|
|
14
|
+
| llmloop | 模型循环、有限检索、候选反证、明确结束状态 | 真实模型质量验证 |
|
|
15
|
+
| tool | 批准快照内的文件查找、搜索、读取和证据校验 | 必要语义调用方、定义、别名与实例上下文 |
|
|
16
|
+
| config/rules | 语言和文件用途检查提示、显式项目规则 | 剩余专用指导及路径选择验收 |
|
|
17
|
+
| diff、gitcmd、pathutil | 只读变更、固定历史对象、路径保护、命令限额 | 不照搬实时无界读取 |
|
|
18
|
+
| model、session/manifest | 覆盖状态、未完成原因、失败与取消区别 | 组合场景的整体一致性验收 |
|
|
19
|
+
|
|
20
|
+
## 有意不同的实现
|
|
21
|
+
|
|
22
|
+
- 本插件沿用当前 DSH Agent 的模型和权限,不建立单独模型、费用或管理平台。
|
|
23
|
+
- 审查前固定源码,执行前重新核验;不让模型读取任意实时工作区。
|
|
24
|
+
- 检索最多读取 200 行,且只限批准来源;不照搬参考的任意路径或正则搜索。
|
|
25
|
+
- 默认一次审查,可选三次,不照搬参考默认次数和对话继承方式。
|
|
26
|
+
- 历史重命名按删除和新增表达;区间比较使用明确端点,不自动计算合并基点。
|
|
27
|
+
- 参考中的风格偏好、无条件性能建议和错误绝对规则不作为缺陷标准。
|
|
28
|
+
|
|
29
|
+
## 语言指导的剩余工作
|
|
30
|
+
|
|
31
|
+
| 类型 | 剩余重点 |
|
|
32
|
+
|---|---|
|
|
33
|
+
| F#、R、Elm、Haskell、Julia、Nim、OCaml | 仍以通用指导为主;需处理各语言的资源、求值、数据与运行契约 |
|
|
34
|
+
| Rego、Jsonnet、Nix | 策略未定义值、对象合并、构建依赖和具体运行版本 |
|
|
35
|
+
| Solidity、Vyper | 部署版本、存储布局、重入、外部调用与实际消费者 |
|
|
36
|
+
| Verilog/SystemVerilog、VHDL | 调度、位宽、有符号值、时钟跨域和目标工具支持 |
|
|
37
|
+
| Zig | 分配器、异常清理、借用寿命和构建模式 |
|
|
38
|
+
| PO/POT、MyBatis 映射文件 | 文本身份、占位符、复数规则、绑定值与动态 SQL |
|
|
39
|
+
| JS/TS/React | hook、异步清理、渲染副作用的实际缺陷与反证 |
|
|
40
|
+
| Go、Python、Rust | 版本前提、并发、宏求值和调用契约细化 |
|
|
41
|
+
| Objective-C、Swift、MATLAB、ArkTS、PHP、Kotlin、Java、C/C++ | 大类指导已有;部分生命周期、并发、版本和调用场景需具体测试 |
|
|
42
|
+
| 模板、依赖清单、基础设施 | 转义方式、引擎版本、消费者与部署约束,不按文件名推定行为 |
|
|
43
|
+
|
|
44
|
+
Protobuf、Thrift、Cap’n Proto、GraphQL、Prisma 的专用指导已交付。不把协议检查提示当作解析器、迁移执行结果或缺陷证据。
|
|
45
|
+
|
|
46
|
+
## 固定参考文件索引
|
|
47
|
+
|
|
48
|
+
下表仅记录查证来源。分类代码的含义:A1=源码对照,A2=调度与预算,A3=审查次数;B1=调用方,B2=旧版本上下文,B3=定义;C2=输出格式,C3=大输入;D1=语言指导,E1=整体验收。
|
|
49
|
+
|
|
50
|
+
| 参考文件 | 阅读状态 | 分类 |
|
|
51
|
+
|---|---|---|
|
|
52
|
+
|[agent/agent.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/agent/agent.go)|已阅读|A1|
|
|
53
|
+
|[agent/estimate.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/agent/estimate.go)|已阅读|A1|
|
|
54
|
+
|[agent/grouping.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/agent/grouping.go)|已阅读|A1|
|
|
55
|
+
|[agent/identity.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/agent/identity.go)|已阅读|A1|
|
|
56
|
+
|[agent/preview.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/agent/preview.go)|已阅读|A1|
|
|
57
|
+
|[agent/selection.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/agent/selection.go)|已阅读|A1|
|
|
58
|
+
|[agent/util.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/agent/util.go)|已阅读|A1|
|
|
59
|
+
|[delegate/format.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/delegate/format.go)|已阅读|A1|
|
|
60
|
+
|[delegate/rulegroup.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/delegate/rulegroup.go)|已阅读|A1|
|
|
61
|
+
|[llmloop/compression.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/llmloop/compression.go)|已阅读|A1|
|
|
62
|
+
|[llmloop/loop.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/llmloop/loop.go)|已阅读|A1|
|
|
63
|
+
|[llmloop/pool.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/llmloop/pool.go)|已阅读|A1|
|
|
64
|
+
|[llmloop/tool_args_json.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/llmloop/tool_args_json.go)|已阅读|A1|
|
|
65
|
+
|[llmloop/tool_failure_streak.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/llmloop/tool_failure_streak.go)|已阅读|A1|
|
|
66
|
+
|[tool/code_comment.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/tool/code_comment.go)|已阅读|A1|
|
|
67
|
+
|[tool/code_search.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/tool/code_search.go)|已阅读|A1|
|
|
68
|
+
|[tool/comment_args_repair.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/tool/comment_args_repair.go)|已阅读|A1|
|
|
69
|
+
|[tool/comment_collector.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/tool/comment_collector.go)|已阅读|A1|
|
|
70
|
+
|[tool/definitions.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/tool/definitions.go)|已阅读|A1|
|
|
71
|
+
|[tool/file_find.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/tool/file_find.go)|已阅读|A1|
|
|
72
|
+
|[tool/file_read.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/tool/file_read.go)|已阅读|A1|
|
|
73
|
+
|[tool/file_read_diff.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/tool/file_read_diff.go)|已阅读|A1|
|
|
74
|
+
|[tool/filereader.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/tool/filereader.go)|已阅读|A1|
|
|
75
|
+
|[tool/response_message.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/tool/response_message.go)|已阅读|A1|
|
|
76
|
+
|[tool/stub.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/tool/stub.go)|已阅读|A1|
|
|
77
|
+
|[diff/git.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/diff/git.go)|已阅读|A1|
|
|
78
|
+
|[diff/gitignore.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/diff/gitignore.go)|已阅读|A1|
|
|
79
|
+
|[diff/hunk.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/diff/hunk.go)|已阅读|A1|
|
|
80
|
+
|[diff/parser.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/diff/parser.go)|已阅读|A1|
|
|
81
|
+
|[diff/quotedpath.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/diff/quotedpath.go)|已阅读|A1|
|
|
82
|
+
|[diff/relocation.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/diff/relocation.go)|已阅读|A1|
|
|
83
|
+
|[diff/resolver.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/diff/resolver.go)|已阅读|A1|
|
|
84
|
+
|[diff/workspace_file.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/diff/workspace_file.go)|已阅读|A1|
|
|
85
|
+
|[config/allowlist/allowed_ext.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/allowlist/allowed_ext.go)|已阅读|A1|
|
|
86
|
+
|[config/allowlist/default_exclude_patterns.json](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/allowlist/default_exclude_patterns.json)|已阅读|A1|
|
|
87
|
+
|[config/allowlist/default_secret_patterns.json](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/allowlist/default_secret_patterns.json)|已阅读|A1|
|
|
88
|
+
|[config/allowlist/secret_path.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/allowlist/secret_path.go)|已阅读|A1|
|
|
89
|
+
|[config/allowlist/supported_file_types.json](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/allowlist/supported_file_types.json)|已阅读|A1|
|
|
90
|
+
|[config/rules/sniffer.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/sniffer.go)|已阅读|A1|
|
|
91
|
+
|[config/rules/system_rules.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/system_rules.go)|已阅读|A1|
|
|
92
|
+
|[config/rules/system_rules.json](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/system_rules.json)|已阅读|A1|
|
|
93
|
+
|[config/template/effort.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/template/effort.go)|已阅读|A1|
|
|
94
|
+
|[config/template/scan_template.json](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/template/scan_template.json)|已阅读|A1|
|
|
95
|
+
|[config/template/task_template.json](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/template/task_template.json)|已阅读|A1|
|
|
96
|
+
|[config/template/template.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/template/template.go)|已阅读|A1|
|
|
97
|
+
|[config/testconnection/task.json](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/testconnection/task.json)|已阅读|A1|
|
|
98
|
+
|[config/testconnection/testconnection.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/testconnection/testconnection.go)|已阅读|A1|
|
|
99
|
+
|[config/toolsconfig/tools.json](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/toolsconfig/tools.json)|已阅读|A1|
|
|
100
|
+
|[config/toolsconfig/toolsconfig.go](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/toolsconfig/toolsconfig.go)|已阅读|A1|
|
|
101
|
+
|[config/template/prompts/grouping_task_system.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/template/prompts/grouping_task_system.md)|已阅读|A1|
|
|
102
|
+
|[config/template/prompts/grouping_task_user.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/template/prompts/grouping_task_user.md)|已阅读|A1|
|
|
103
|
+
|[config/template/prompts/main_task_system.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/template/prompts/main_task_system.md)|已阅读|A1|
|
|
104
|
+
|[config/template/prompts/main_task_user.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/template/prompts/main_task_user.md)|已阅读|A1|
|
|
105
|
+
|[config/template/prompts/memory_compression_task_system.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/template/prompts/memory_compression_task_system.md)|已阅读|A1|
|
|
106
|
+
|[config/template/prompts/memory_compression_task_user.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/template/prompts/memory_compression_task_user.md)|已阅读|A1|
|
|
107
|
+
|[config/template/prompts/plan_task_system.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/template/prompts/plan_task_system.md)|已阅读|A1|
|
|
108
|
+
|[config/template/prompts/plan_task_user.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/template/prompts/plan_task_user.md)|已阅读|A1|
|
|
109
|
+
|[config/template/prompts/re_location_task_system.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/template/prompts/re_location_task_system.md)|已阅读|A1|
|
|
110
|
+
|[config/template/prompts/re_location_task_user.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/template/prompts/re_location_task_user.md)|已阅读|A1|
|
|
111
|
+
|[config/template/prompts/review_filter_task_system.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/template/prompts/review_filter_task_system.md)|已阅读|A1|
|
|
112
|
+
|[config/template/prompts/review_filter_task_user.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/template/prompts/review_filter_task_user.md)|已阅读|A1|
|
|
113
|
+
|[config/rules/rule_docs/arkts.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/arkts.md)|已阅读|D1|
|
|
114
|
+
|[config/rules/rule_docs/astro.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/astro.md)|已阅读|D1|
|
|
115
|
+
|[config/rules/rule_docs/bicep.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/bicep.md)|已阅读|D1|
|
|
116
|
+
|[config/rules/rule_docs/build_gradle.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/build_gradle.md)|已阅读|D1|
|
|
117
|
+
|[config/rules/rule_docs/c.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/c.md)|已阅读|D1|
|
|
118
|
+
|[config/rules/rule_docs/capnp.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/capnp.md)|已阅读|D1|
|
|
119
|
+
|[config/rules/rule_docs/cargo_toml.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/cargo_toml.md)|已阅读|D1|
|
|
120
|
+
|[config/rules/rule_docs/composer_json.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/composer_json.md)|已阅读|D1|
|
|
121
|
+
|[config/rules/rule_docs/cpp.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/cpp.md)|已阅读|D1|
|
|
122
|
+
|[config/rules/rule_docs/default.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/default.md)|已阅读|D1|
|
|
123
|
+
|[config/rules/rule_docs/elm.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/elm.md)|已阅读|D1|
|
|
124
|
+
|[config/rules/rule_docs/freemarker.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/freemarker.md)|已阅读|D1|
|
|
125
|
+
|[config/rules/rule_docs/fsharp.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/fsharp.md)|已阅读|D1|
|
|
126
|
+
|[config/rules/rule_docs/github_config.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/github_config.md)|已阅读|D1|
|
|
127
|
+
|[config/rules/rule_docs/github_workflows.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/github_workflows.md)|已阅读|D1|
|
|
128
|
+
|[config/rules/rule_docs/go.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/go.md)|已阅读|D1|
|
|
129
|
+
|[config/rules/rule_docs/graphql.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/graphql.md)|已阅读|D1|
|
|
130
|
+
|[config/rules/rule_docs/handlebars_mustache.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/handlebars_mustache.md)|已阅读|D1|
|
|
131
|
+
|[config/rules/rule_docs/haskell.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/haskell.md)|已阅读|D1|
|
|
132
|
+
|[config/rules/rule_docs/java.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/java.md)|已阅读|D1|
|
|
133
|
+
|[config/rules/rule_docs/jinja.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/jinja.md)|已阅读|D1|
|
|
134
|
+
|[config/rules/rule_docs/json.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/json.md)|已阅读|D1|
|
|
135
|
+
|[config/rules/rule_docs/jsonnet.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/jsonnet.md)|已阅读|D1|
|
|
136
|
+
|[config/rules/rule_docs/julia.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/julia.md)|已阅读|D1|
|
|
137
|
+
|[config/rules/rule_docs/kotlin.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/kotlin.md)|已阅读|D1|
|
|
138
|
+
|[config/rules/rule_docs/mapper_dao_xml.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/mapper_dao_xml.md)|已阅读|D1|
|
|
139
|
+
|[config/rules/rule_docs/matlab.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/matlab.md)|已阅读|D1|
|
|
140
|
+
|[config/rules/rule_docs/nim.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/nim.md)|已阅读|D1|
|
|
141
|
+
|[config/rules/rule_docs/nix.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/nix.md)|已阅读|D1|
|
|
142
|
+
|[config/rules/rule_docs/objc.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/objc.md)|已阅读|D1|
|
|
143
|
+
|[config/rules/rule_docs/ocaml.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/ocaml.md)|已阅读|D1|
|
|
144
|
+
|[config/rules/rule_docs/package_json.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/package_json.md)|已阅读|D1|
|
|
145
|
+
|[config/rules/rule_docs/php.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/php.md)|已阅读|D1|
|
|
146
|
+
|[config/rules/rule_docs/po.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/po.md)|已阅读|D1|
|
|
147
|
+
|[config/rules/rule_docs/pom_xml.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/pom_xml.md)|已阅读|D1|
|
|
148
|
+
|[config/rules/rule_docs/pot.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/pot.md)|已阅读|D1|
|
|
149
|
+
|[config/rules/rule_docs/prisma.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/prisma.md)|已阅读|D1|
|
|
150
|
+
|[config/rules/rule_docs/properties.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/properties.md)|已阅读|D1|
|
|
151
|
+
|[config/rules/rule_docs/protobuf.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/protobuf.md)|已阅读|D1|
|
|
152
|
+
|[config/rules/rule_docs/pug.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/pug.md)|已阅读|D1|
|
|
153
|
+
|[config/rules/rule_docs/python.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/python.md)|已阅读|D1|
|
|
154
|
+
|[config/rules/rule_docs/r.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/r.md)|已阅读|D1|
|
|
155
|
+
|[config/rules/rule_docs/rego.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/rego.md)|已阅读|D1|
|
|
156
|
+
|[config/rules/rule_docs/rust.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/rust.md)|已阅读|D1|
|
|
157
|
+
|[config/rules/rule_docs/solidity.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/solidity.md)|已阅读|D1|
|
|
158
|
+
|[config/rules/rule_docs/swift.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/swift.md)|已阅读|D1|
|
|
159
|
+
|[config/rules/rule_docs/terraform.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/terraform.md)|已阅读|D1|
|
|
160
|
+
|[config/rules/rule_docs/thrift.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/thrift.md)|已阅读|D1|
|
|
161
|
+
|[config/rules/rule_docs/ts_js_tsx_jsx.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/ts_js_tsx_jsx.md)|已阅读|D1|
|
|
162
|
+
|[config/rules/rule_docs/verilog.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/verilog.md)|已阅读|D1|
|
|
163
|
+
|[config/rules/rule_docs/vhdl.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/vhdl.md)|已阅读|D1|
|
|
164
|
+
|[config/rules/rule_docs/vyper.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/vyper.md)|已阅读|D1|
|
|
165
|
+
|[config/rules/rule_docs/yaml.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/yaml.md)|已阅读|D1|
|
|
166
|
+
|[config/rules/rule_docs/zig.md](https://github.com/alibaba/open-code-review/blob/2d67596c961f80436deb2afa643efa2b1725d34c/internal/config/rules/rule_docs/zig.md)|已阅读|D1|
|
|
167
|
+
|
|
168
|
+
相关依赖还包括 internal/gitcmd、internal/pathutil、internal/model 和 internal/session/manifest.go。会话存储、历史管理、自动修复及独立扫描平台不在本项目范围内。
|
package/DEVELOPMENT.md
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# 开发与发布指南
|
|
2
|
+
|
|
3
|
+
本文供维护者使用。安装与日常审查见 [README](README.md)。
|
|
4
|
+
|
|
5
|
+
## 本地验证
|
|
6
|
+
|
|
7
|
+
要求 Node.js 22+、Git、SVN 和 svnadmin。测试只在临时目录创建样本仓库,不修改业务仓库。
|
|
8
|
+
|
|
9
|
+
npm ci --ignore-scripts
|
|
10
|
+
npm test
|
|
11
|
+
node scripts/host-smoke.mjs <DSH-checkout>
|
|
12
|
+
|
|
13
|
+
宿主检查加载真实 DSH 工具运行时,但使用受控模型响应,不是 GUI 安装或真实模型质量测试。Windows SVN 需要支持 UTF-8 路径;CI 使用临时工具,不修改用户安装。
|
|
14
|
+
|
|
15
|
+
## 审查预算
|
|
16
|
+
|
|
17
|
+
除 README 中的文件和输入上限外:
|
|
18
|
+
|
|
19
|
+
- 每个主文件的模型与检索阶段共享默认 120 秒;关联综合沿用相关主文件的生命周期,不因切换阶段重新计时。
|
|
20
|
+
- 每阶段最多三轮检索;全局最多 50 次读取请求,返回内容累计 256 KiB,单次最多 64 KiB,读取最多 200 行。
|
|
21
|
+
- Git 工作区依赖链最多三层、512 个精确路径查询、20 个候选、手动入口与自动依赖共享 1 MiB 正文;文件读取与最终复核共享 30 秒。
|
|
22
|
+
- 引用方发现最多四个不重叠的非根目录;128 个候选正文共 1 MiB,目录索引最多 256 条/64 KiB,竞争路径最多 512 个。发现与复核共享 30 秒。
|
|
23
|
+
|
|
24
|
+
达到上限必须阻断或说明未完成,不能静默扩大范围、丢弃证据或重新计时。
|
|
25
|
+
|
|
26
|
+
## 正式发布
|
|
27
|
+
|
|
28
|
+
1. 修改版本号与锁文件;更新 [变更记录](CHANGELOG.md) 和 [发布说明](RELEASE-NOTES.md)。
|
|
29
|
+
2. 完成测试、差异检查和独立安装验证后,提交、推送,并创建对应 vX.Y.Z 标签。标签一旦进入发布流程就不再移动。
|
|
30
|
+
3. 等待标签 CI 的 Ubuntu/Windows × Node.js 22/24 四组测试全部成功。
|
|
31
|
+
4. 在 Actions 的 CI 工作流选择该标签,设置 publish: true,仅触发一次正式发布。
|
|
32
|
+
5. 发布任务打包一次、验证安装、保存安装包,再发布 npm。随后下载 npm 实际安装包,检查它与保存的原包是否一致。
|
|
33
|
+
6. 核验通过后,把同一安装包与 SHA256SUMS.txt 附到 GitHub Release,并使用发布说明作为正文。
|
|
34
|
+
7. 下载 Release 的实际附件,与原包逐字节比较,核验 SHA-256、SHA-512 及校验清单。
|
|
35
|
+
|
|
36
|
+
需要仓库 Secret NPM_AUTOMATION_TOKEN。普通标签测试不会发布,普通分支推送也不会触发这套 CI。
|
|
37
|
+
|
|
38
|
+
## npm 已成功,但 Release 失败怎么办
|
|
39
|
+
|
|
40
|
+
**不要再次 npm publish,不要重新打包,不要移动标签。**
|
|
41
|
+
|
|
42
|
+
先检查原发布任务中的保存工件和日志。注册表元数据存在不代表安装包已经可下载;等待实际安装包可读,并与原包核验。恢复工作流只能下载原运行的安装包、验证固定提交及校验值,然后补建 Release。
|
|
43
|
+
|
|
44
|
+
若原包缺失或实际字节不一致,不得宣称该版本正式交付。
|
|
45
|
+
|
|
46
|
+
## 文档写作约定
|
|
47
|
+
|
|
48
|
+
- 使用者文档先回答用途、操作和结果,不从内部字段或测试编号开始。
|
|
49
|
+
- 新术语首次出现就解释。状态名保留英文时,同时写出中文含义。
|
|
50
|
+
- 变更记录写用户能感受到的变化;流水线日志和长哈希不是功能介绍。
|
|
51
|
+
- 能力清单区分实现、验证与发布,不能把“读过参考源码”写成“功能已完成”。
|
|
52
|
+
- 不保留逐轮过程记录,不把小样本观察说成总体质量成绩。
|
package/README.md
CHANGED
|
@@ -1,185 +1,116 @@
|
|
|
1
1
|
# DSH Code Review
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
DSH 的只读代码审查插件。它比较 Git 或 SVN 中的代码变更,使用当前 Agent 的模型分析问题,并返回带文件位置、证据和复核结果的中文报告。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**不会修改代码、自动修复、提交、回滚或发布业务项目。模型报告仍需人工判断。**
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Git历史预览新增oldContextPaths:最多20个显式仓库相对文件,与contextPaths/自动上下文共享20槽、256KiB每blob及4MiB快照。仅从baseline普通Git blob捕获,不checkout/fetch/读取工作树;根提交无baseline拒绝,working/SVN明确拒绝。旧侧条目携带oldRevision/oldBlobOid/oldHash,仅进入context-old;oldOnly表示仅批准旧侧,不证明target路径不存在。所选变更复用原changed-old,不重复上下文;excluded/blocked变更、链接/submodule、凭据路径不能重新进入。预览显示身份元数据、不显示正文,确认执行才按宿主正常权限发送。主审/综合/复核按侧提示,计入原输入预算,旧证据不能冒充新侧回归证明。
|
|
10
|
-
|
|
11
|
-
预览可选callerScopePaths,最多4个非根、非重叠相对目录,支持Git/SVN工作区及Git固定commit/range两侧对象。SVN仅离线normal普通节点,校验祖先与文件URL链/wcroot/UUID及属性,拒绝switched/external/special/keywords;竞争路径含本地未跟踪项但不授其正文。历史两侧共用30秒、128正文/1MiB、256记录/64KiB、512竞争探针/1MiB,blob版本/OID/hash及非匹配身份绑定;不读取工作树。预览读取目录内tracked JS/TS/C-family候选正文(含非匹配),仅匹配引用方作为上下文发送模型;128扫描文件/1MiB正文/256索引记录/64KiB索引/512竞争路径探针,发现与重核共享30秒,复核累计2MiB,仍共享20上下文及4MiB快照。绑定所有扫描hash、索引及竞争探针;execute重新捕获。SVN目录深度<=32、索引256条/64KiB、探针512条/1MiB;与Git工作区同共享30秒/正文128条1MiB/复核2MiB,缺正文/超限fail-closed;历史root无旧侧,删除仅旧侧导航,oldOnly上下文复用不新增new授权。字面引用仅导航,不证明函数调用或完整覆盖,报告保留partial限制。
|
|
12
|
-
|
|
13
|
-
最终报告记录业务需求hash/bytes用于溯源,不重复需求正文;真实Git当前/历史捕获及服务预览执行预算集成已验收。
|
|
14
|
-
|
|
15
|
-
预览可选businessRequirement(16KiB UTF8),显示正文与hash并绑定快照;规划、生成和复核用作不可信约束数据,计输入预算,不作为权限或缺陷证据。
|
|
16
|
-
|
|
17
|
-
风险计划失败时在原预算内回退不带计划的主审查,保留fallback原因与partial限制;不重试无效计划,取消/超时/调用耗尽仍阻断。
|
|
18
|
-
|
|
19
|
-
风险计划sourceIds会记录本批生成读取片段/未读状态;未读产生partial覆盖限制。search/find不算读,读过片段也不证明条件已核查或缺陷成立,不自动添加调用。
|
|
20
|
-
|
|
21
|
-
Git自动直接依赖上下文仅查询从已捕获源码导出的最多512路径索引探针,不列整个tracked树;累计索引1MiB并在结束核对同探针指纹。SVN沿用原索引限额,此项不冒充SVN等价。
|
|
22
|
-
|
|
23
|
-
凭据路径硬排除:.env及其后缀(.env.example/.env.sample/.env.template例外)、.ssh目录、SSH私钥及.netrc/_netrc/.npmrc/.pypirc/.dockercfg,大小写无关;显式选择不可绕过,上下文/规则同样拒绝。仅路径策略,不保证普通文件无秘密。
|
|
24
|
-
|
|
25
|
-
检索支持find批准catalog路径字面子串查找,返回来源身份/版本侧/hash;仅导航不证明正文已读,不搜索仓库外路径。当前持续任务见[核心对照任务](CORE-ALIGNMENT-TASKS.md)。
|
|
26
|
-
|
|
27
|
-
模型快照字面search可带sourceIds,1至20个已批准catalog身份筛选文件/版本。未指定保留全快照搜索;未知或重复身份整批拒绝,不增加快照外读取。
|
|
28
|
-
|
|
29
|
-
C#自动上下文支持窄语法同目录Type.cs静态零参调用探针,需file-scoped namespace且无using/dynamic/注释字符串/同名其他引用;捕获后定义提示再校验命名空间。不是编译器解析,不全仓寻找类型。
|
|
30
|
-
|
|
31
|
-
历史捕获用diff-tree精确端点变更元数据,不前置完整枚举文件树;显式上下文/规则和直接导入依赖按字面非递归路径查询。自动依赖最多512个待查路径,仍保留200变更/20上下文/4MiB快照限制,大树小提交不因无关文件元数据超限。
|
|
32
|
-
|
|
33
|
-
历史自动上下文导航旧侧import/include:未修改依赖保留两侧普通blob及版本;已批准删除依赖复用原changed-old,不重复捕获或占用上下文槽。excluded/blocked删除不恢复,目标链接不赋予新侧权限。新增上下文仍共享20槽、blob字节及4MiB快照限额,自动来源边界其余场景待验收;导航不证明调用者覆盖或符号绑定。
|
|
34
|
-
|
|
35
|
-
单提交审查直接读取原始commit头的父节点,不受浅克隆遍历边界影响;缺失父树明确失败且不自动fetch,不能把非根提交当空旧侧。
|
|
36
|
-
|
|
37
|
-
Git历史审查预览传 `commit`(相对唯一父提交,根提交空旧侧;merge需区间),或 `baseRevision` 与 `targetRevision`(精确端点树差异,非merge-base);两类互斥。预览/报告显示解析对象ID,执行复捕获hash验证引用变化。历史显式/自动直接导入上下文只捕获目标提交树普通blob,默认20总量且排除变更不能再进入;历史显式规则同样只从目标树blob捕获,最多4个md/txt、UTF-8、每个16KiB/合计32KiB,不混工作树,SVN不冒充此语义。
|
|
38
|
-
|
|
39
|
-
工具对错误行锚可进行一次同文件同侧唯一完整原文纠正,须重叠原引用精确编辑;原候选/状态保留JSON,Markdown提示。纠正后仍校验窗口、跨文件编辑及生成读取证据,不增调用、不猜歧义或跨文件迁移,不证明缺陷或因果。
|
|
40
|
-
|
|
41
|
-
可在预览传入 `autoContext: true`,显式选择有界Git/SVN直接import/include上下文捕获;默认关闭。候选、阻塞、截断及实际路径在预览可见,正文仅在确认后发送,执行重新验证快照。仅当前侧导航非历史/调用图,SVN使用离线正常节点索引支持同样导航;不会自动引入未跟踪或排除变更。,包含有界覆盖预检、显式项目规则及候选证据与反证复核;发布状态以 npm 和 GitHub Release 为准。已通过真实临时 Git/SVN 仓库测试,以及隔离进程中的真实 DSH ToolRuntime 注册验证。当前开发会话的实际预览已返回0.6.0的plan/rules字段,空变更预览与默认关闭外发已验证;已进行经宿主审批的六次小规模真实试跑,累计12次模型调用;四组合成正负例与历史修复对照符合预期,历史引入方向检出候选但引用复核未完成(partial)。不是独立盲测或整体质量证明。详情见 [试跑结果](evaluation/PILOT-RESULTS.md)。
|
|
42
|
-
|
|
43
|
-
## 工作区下多个子仓库(0.11.0)
|
|
44
|
-
|
|
45
|
-
当会话目录不是仓库而其子目录含Git/SVN仓库时,预览可指定 `repositoryPath`,例如会话位于工作区根时传 `{ "repositoryPath": "c3animation" }`。该参数必须是工作区相对路径(正斜杠),指向明确仓库根;不能使用绝对路径、上级路径或链接目录。文件、上下文、规则路径仍相对此次选定仓库。多个子仓库分别预览和执行,不混用快照;execute只接收previewId,不能另改目标。省略参数保持原行为。使用此参数需宿主安装0.11.0或更新版本;仓库发布不会自动更新当前宿主。
|
|
46
|
-
|
|
47
|
-
## 完整文件权限与审批策略
|
|
48
|
-
|
|
49
|
-
0.17.0起注册工具沿用DSH正常工具执行权限,不再主动调用approval.request,不要求额外allowModelSending开关。宿主工具权限控制入口调用;完整权限下不再因插件重复审批而失败。不修改宿主策略,不把never解释为allowed-once。
|
|
50
|
-
|
|
51
|
-
## C++关联与审批诊断(0.16.0)
|
|
52
|
-
|
|
53
|
-
批准文件中的同目录唯一头/实现命名与字面量引号include进入现有关联分组,最多4文件的综合仍共享原读取/调用/生命周期预算。显式context注释保留from/to与include原行,current内容不冒充old历史。无需扫描新文件或执行编译器;系统include、构建搜索路径、条件宏和不支持文本不解析,同目录命名不证明绑定。
|
|
54
|
-
|
|
55
|
-
主输入提供每侧最多20条零参独立调用原位置,含 `worker.join()`、`debugger->Close()`、`Allocator::Shutdown()` 等语法导航;标记未解析,不证明宏展开、重载选择、动态分派或执行顺序,也不表示全部调用覆盖。其他源码须批准范围内read获取。线程退出/调试器关闭/分配器生命周期合成缺陷与safe反例仅验证明确抽象契约及离线证据协议,不是编译或真实模型质量成绩。
|
|
56
|
-
|
|
57
|
-
0.16.x的独立外发审批已在0.17.0移除;仍保留预览确认及快照/范围/只读校验。未执行或失败仍不是审核通过。
|
|
58
|
-
|
|
59
|
-
## C#显式上下文位置线索(0.15.0)
|
|
60
|
-
|
|
61
|
-
仅注释已批准.cs context,不增加读取或覆盖。支持file-scoped同namespace、静态class、public static零参void/int/bool/string方法与独立Type.Method()语法;保留调用/类型/方法原始行号。目标括号须平衡、方法直属类型;重载、同名竞争者(包括不支持语法)、局部遮蔽、using/partial/继承或动态等不推定绑定。有字符串/注释/预处理等不支持文本保守不生成线索,不影响普通源码审查。当前context明确不是old历史内容。不执行编译器、工程或用户源码,不冒充C++适配、语义绑定或可达性证明,线索不足仍须模型说明证据限制。
|
|
62
|
-
|
|
63
|
-
## 批准快照内跨文件综合(0.14.0)
|
|
64
|
-
|
|
65
|
-
关联组最多4个批准主文件、至少2个文本变化时追加跨文件综合。目录保留完整精确编辑原位置,不作为源码证据;每条发现须引用至少2文件的 `interaction.editRefs:[{fileId,editId}]`,主attribution与主引用一致,原锚重叠主编辑,每个引用编辑至少一非空侧须本综合生成read完整覆盖。共享批准reader/全局调用额度,嵌入组最后主文件原超时,不重置生命周期;预检包含额外初始调用,检索复核另计。interactions独立记录pending/completed/blocked,跨组和未完成明确限制。不合并多文件候选,不自动扩文件/仓库。源码/规则/context仍不可信。真实模型样本未跑,安全反例空输出模拟不代表模型查准率;拒绝审批表示未审查不是通过。
|
|
66
|
-
|
|
67
|
-
## 静态调用绑定线索(0.13.0)
|
|
68
|
-
|
|
69
|
-
批准JS/TS源码中的命名相对import及别名、简单独立调用,可补充到同侧直接 `export function` 声明的原始行号线索。组输入 `bindingRelations` 及显式上下文注释保留导入/调用/声明位置;不新增读取、组成员或审查覆盖。局部名其他出现(参数/声明/赋值/逃逸)、目标名额外出现、重复导出、重导出或不支持语法保守不生成绑定线索;绑定不确定不阻止普通源码审查。不是通用模块解析、语义绑定或可达性/因果证明。输入预算不足沿用原有关联回退,不截断规则或上下文。
|
|
70
|
-
|
|
71
|
-
## 跨窗口综合分析(0.12.0)
|
|
72
|
-
|
|
73
|
-
主文件需要多批精确窗口时,在局部分析后追加一次有界综合检查。完整原始窗口目录不充当源码;综合发现必须引用至少两个不同窗口的编辑,每个引用编辑至少一个非空旧/新侧必须在本综合生成阶段被批准read完整覆盖(不能借用前批/复核审计或search)。使用原定位及证据复核,不截断规则/context。共享原每文件超时和全局调用/读取额度;预检minimumCalls包含综合初始请求,后续检索复核另计。synthesisStatus独立记录pending/completed/blocked,局部窗口完成不表示综合完成;输入超限或预算耗尽不冒算覆盖。读取覆盖及模型分析仍不证明跨路径正确性或因果事实,真实模型质量未新增验证。
|
|
74
|
-
|
|
75
|
-
## 修改前后对照复核(0.11.0)
|
|
76
|
-
|
|
77
|
-
复核可返回 `regression`:`introduced`(模型判断本次引入)、`preexisting`(模型判断原有问题)、`uncertain`(对照不足)。前两者必须引用候选主文件旧新两侧的已精确校验证据,索引指向本候选复核 `evidence` 数组;空源或缺少任一侧时不能虚构支持。旧协议缺省标为 `unassessed`,关闭复核同样明确未评估。报告保留全部候选并展示分类、理由及 `regressionCoverage`;模型支持但对照不足进入限制。分类及引用有效不等于因果事实成立,也不宣称真实模型质量提升已获验证。去重隔离分类/理由/证据索引冲突,uncertain及unassessed不折叠。
|
|
78
|
-
|
|
79
|
-
## 保守重复报告归组(0.10.0)
|
|
80
|
-
|
|
81
|
-
结构化报告保留全部原始 `findings`,附加 `findingGroups` 中的零基发现索引。仅当归因引用有效、复核支持、整套精确证据及标题、触发条件、影响、建议、前后行为和解释一致时归组,不按标题相似、证据部分重叠或传递关系合并。Markdown精简重复说明,仍展示各处定位/原文/变更引用,完整候选与复核证据保留在JSON。不新增模型调用,不证明根因事实,不合并不确定/反驳/未完成发现。
|
|
82
|
-
|
|
83
|
-
## 证据引用编号(0.7.0)
|
|
84
|
-
|
|
85
|
-
复核阶段的批准行段读取会返回宿主生成的 `receiptId`;模型可用 `{receiptId}` 引用该次读取,避免重新抄写哈希、换行和原文。仍兼容原六字段完整证据。编号仅在本次复核有效,不允许附带字段覆盖证据,不扩展文件权限。宿主解析后仍重新读取批准快照、精确校验并计入共享预算;编号元数据也占用输出额度。报告保留完整证据而非临时编号。无效引用仍明确标记复核未完成,不自动重试,不证明因果或真实审核质量。
|
|
86
|
-
|
|
87
|
-
## 项目规则(0.5.0)
|
|
88
|
-
|
|
89
|
-
`code_review_preview` 可传 `rulePaths: ["review-rules.md"]`,只读显式选入的仓库相对路径;不会自动搜索父目录、加载远程规则或执行 include。仅接受 UTF-8 `.md`/`.txt`,最多4个、单个16 KiB、合计32 KiB。规则还占用快照和模型输入预算,超限不静默截断。
|
|
7
|
+
## 安装
|
|
90
8
|
|
|
91
|
-
|
|
9
|
+
环境要求:Node.js 22 或更新版本,以及目标仓库使用的 Git 或 SVN 命令行工具。插件依赖 DSH 的工具和模型服务,不能脱离 DSH 单独运行。
|
|
92
10
|
|
|
93
|
-
|
|
11
|
+
在 DSH 中通过插件管理器安装并启用,或使用:
|
|
94
12
|
|
|
95
|
-
|
|
13
|
+
dsh plugin add https://github.com/f-e-n-g-0531/dsh-code-review.git
|
|
96
14
|
|
|
97
|
-
|
|
15
|
+
升级后确认当前 DSH 进程已经加载新版本。仓库发布新版本不会自动更新正在运行的 DSH;本项目也不会自动修改已有 profile 或重启宿主。
|
|
98
16
|
|
|
99
|
-
|
|
17
|
+
> 许可限制:本项目采用非商业源码公开许可证。公司内部商业项目、收费服务及商业交付需要另行取得书面授权。详见 [LICENSE](LICENSE)。
|
|
100
18
|
|
|
101
|
-
##
|
|
19
|
+
## 第一次使用
|
|
102
20
|
|
|
103
|
-
|
|
104
|
-
- DSH 提供 tools、llm 服务;当前已核对宿主 API,尚未承诺稳定跨版本兼容。
|
|
105
|
-
- Windows SVN 必须支持 UTF-8 路径;CI 对临时 SVN 工具设置 UTF-8 manifest,不修改用户安装的 SVN。
|
|
21
|
+
在目标仓库的 DSH Agent 会话中,可以这样提出请求:
|
|
106
22
|
|
|
107
|
-
|
|
23
|
+
> 审查 src/api.ts 和 src/client.ts 的改动。先展示审查范围和模型目的地,确认后再执行。不要修改代码。
|
|
108
24
|
|
|
109
|
-
|
|
25
|
+
插件提供两个工具:
|
|
110
26
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
```
|
|
27
|
+
1. **code_review_preview**:读取本地变更,列出审查文件、额外上下文、排除原因和模型目的地。此步骤不调用模型。
|
|
28
|
+
2. **code_review_execute**:接收预览返回的 previewId 和 confirmed: true。执行前重新检查文件;只有预览仍有效且宿主允许执行时,才把批准内容发送给当前 Agent 模型。
|
|
114
29
|
|
|
115
|
-
|
|
30
|
+
调用示例:
|
|
116
31
|
|
|
117
|
-
|
|
32
|
+
{"selectedPaths":["src/api.ts","src/client.ts"],"autoContext":true}
|
|
118
33
|
|
|
119
|
-
|
|
34
|
+
执行参数为:
|
|
120
35
|
|
|
121
|
-
|
|
122
|
-
2. 可用 `selectedPaths` 精确选择变更文件;未跟踪文件必须显式选入。`contextPaths` 提供仓库相对路径的额外上下文。
|
|
123
|
-
3. 展示预览中的仓库范围、文件、排除原因及模型提供方。调用 `code_review_execute`,传入 `previewId` 和 `confirmed: true`。
|
|
124
|
-
4. DSH 正常工具权限机制决定是否调用执行入口;插件不另发审批请求,不读取never当作授权。执行会把预览快照发送至当前Agent模型,confirmed仅确认预览,不修改宿主权限。
|
|
125
|
-
5. 返回 `json`(结构化报告字符串)及 `markdown`(中文报告)。文件、模型或目录变化时需重新预览。
|
|
36
|
+
{"previewId":"预览返回的ID","confirmed":true}
|
|
126
37
|
|
|
127
|
-
|
|
38
|
+
执行返回中文 Markdown 报告,以及 JSON 格式的结构化报告。代码、会话目录或模型路由变化后,需要重新预览。
|
|
128
39
|
|
|
129
|
-
##
|
|
40
|
+
## 可以审查什么
|
|
130
41
|
|
|
131
|
-
|
|
42
|
+
| 场景 | 支持情况 |
|
|
43
|
+
|---|---|
|
|
44
|
+
| Git 工作区 | HEAD 与工作区的净变化,包含暂存和未暂存改动;没有单独的 staged/unstaged 模式 |
|
|
45
|
+
| Git 单个提交 | 使用 commit 参数;与唯一父提交比较,根提交与空旧版本比较。合并提交请使用区间模式 |
|
|
46
|
+
| Git 两个版本 | 使用 baseRevision 和 targetRevision;比较两个版本的文件树,不自动计算合并基点 |
|
|
47
|
+
| SVN 工作副本 | 本地 BASE 与工作副本比较,不连接远端;不支持 SVN 历史区间审查 |
|
|
48
|
+
| 多个子仓库 | 用 repositoryPath 指定会话工作区中的一个仓库根目录;每个仓库分别预览和执行 |
|
|
132
49
|
|
|
133
|
-
|
|
50
|
+
未跟踪文件必须通过 selectedPaths 显式选入。省略 selectedPaths 时,审查范围是仓库根目录的变更,不只是当前子目录。
|
|
134
51
|
|
|
135
|
-
|
|
52
|
+
## 常用参数
|
|
136
53
|
|
|
137
|
-
|
|
54
|
+
所有文件路径都相对于本次选定的仓库,使用正斜杠;不要使用绝对路径、上级路径或链接目录。
|
|
138
55
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
-
|
|
147
|
-
-
|
|
148
|
-
|
|
56
|
+
| 参数 | 用途 | 示例 |
|
|
57
|
+
|---|---|---|
|
|
58
|
+
| selectedPaths | 只审查选中的变更文件 | ["src/api.ts"] |
|
|
59
|
+
| repositoryPath | 指定工作区内的子仓库 | "project-a" |
|
|
60
|
+
| contextPaths | 手动加入理解代码所需的文件 | ["src/types.ts"] |
|
|
61
|
+
| autoContext | 从变更及手动上下文寻找依赖;Git 工作区最多沿三层依赖链读取 | true |
|
|
62
|
+
| callerScopePaths | 在指定目录中寻找引用变更文件的代码 | ["src/clients"] |
|
|
63
|
+
| oldContextPaths | Git 历史审查中,只加入旧版本的上下文 | ["src/removed-helper.ts"] |
|
|
64
|
+
| rulePaths | 加入项目审查规则,最多四个 UTF-8 Markdown 或文本文件 | ["review-rules.md"] |
|
|
65
|
+
| businessRequirement | 提供业务要求;不是缺陷证据,也不会增加读取权限 | "请求失败时必须释放连接" |
|
|
66
|
+
| reviewRounds | 独立审查次数,1~3,默认 1;会增加模型调用量 | 2 |
|
|
149
67
|
|
|
150
|
-
|
|
68
|
+
commit 与 baseRevision/targetRevision 不能同时使用。oldContextPaths 只能用于 Git 历史审查。
|
|
151
69
|
|
|
152
|
-
|
|
70
|
+
自动上下文和引用方发现是保守的文本导航,不是编译器分析。动态导入、宏、重载、继承和实例方法可能无法解析;找到引用不等于证明函数实际被调用。Git 历史与 SVN 的自动依赖捕获目前仍限于直接依赖。
|
|
153
71
|
|
|
154
|
-
|
|
72
|
+
## 如何读报告
|
|
155
73
|
|
|
156
|
-
|
|
74
|
+
先看**覆盖情况和限制**,再看问题列表:
|
|
157
75
|
|
|
158
|
-
|
|
76
|
+
- completed:相应阶段完成,不表示代码绝对正确。
|
|
77
|
+
- partial:只完成部分工作;检查未完成文件、证据不足或预算限制。
|
|
78
|
+
- failed:审查执行失败,不是“审核通过”。
|
|
79
|
+
- cancelled:审查被取消。
|
|
159
80
|
|
|
160
|
-
|
|
161
|
-
npm ci --ignore-scripts
|
|
162
|
-
npm test
|
|
163
|
-
node scripts/host-smoke.mjs <DSH-checkout>
|
|
164
|
-
```
|
|
81
|
+
每个候选问题会保留位置、触发条件、影响和复核结果。复核可能支持、反驳、无法确定或未完成;被反驳的候选不会悄悄删除。程序会核对引用的位置和原文,但这不能代替人工判断缺陷是否成立。
|
|
165
82
|
|
|
166
|
-
|
|
83
|
+
额外上下文被读取,不等于它已作为主文件完成审查。没有发现问题,也不证明代码没有缺陷。
|
|
167
84
|
|
|
168
|
-
|
|
85
|
+
## 数据与安全
|
|
169
86
|
|
|
170
|
-
|
|
87
|
+
- 预览会在本地读取选定变更和上下文;确认执行后,这些内容可能发送给当前模型提供方。发送前请检查范围。
|
|
88
|
+
- 插件沿用 DSH 正常工具权限,不额外发起一套审批;confirmed 只确认预览,不能绕过宿主权限。
|
|
89
|
+
- 不执行项目代码、构建脚本或模型生成的 shell 命令。模型只能在批准的快照中查找、搜索和读取。
|
|
90
|
+
- 常见凭据路径会被排除,但普通源码也可能含秘密。路径过滤不能代替人工检查。
|
|
91
|
+
- 二进制、不能解码的文件、链接和超限内容会被阻断,不会自动截断后假装完成。
|
|
92
|
+
- SVN 的复制、替换、切换目录、外部工作副本、冲突及部分属性状态不受支持。含 svn:keywords 的文件也会被阻断,以免把关键字展开当作代码变化。
|
|
171
93
|
|
|
172
|
-
|
|
173
|
-
2. 确认包名 `@feng0531/dsh-code-review` 的所有权、版本号和分发许可;更新版本及锁文件,提交并推送同名 `vX.Y.Z` 标签。
|
|
174
|
-
3. 在 Actions → CI → Run workflow 选择该标签,设置 `publish: true`。四组测试全部通过后才进入发布任务。
|
|
175
|
-
4. 打包一次,在临时目录安装检查,然后先发布 npm,核对 registry 的 SHA-512 完整性,再用同一 tgz 和 SHA256SUMS.txt 创建 GitHub Release。
|
|
94
|
+
## 默认规模限制
|
|
176
95
|
|
|
177
|
-
|
|
96
|
+
| 项目 | 默认上限 |
|
|
97
|
+
|---|---|
|
|
98
|
+
| 变更文件 | 200 个 |
|
|
99
|
+
| 单文件 | 256 KiB |
|
|
100
|
+
| 全部快照 | 4 MiB |
|
|
101
|
+
| 额外上下文 | 共 20 个文件,手动与自动来源共享 |
|
|
102
|
+
| 单次模型输入 | 约 96 KiB |
|
|
103
|
+
| 一次审查的模型调用 | 100 次,多个审查阶段共享 |
|
|
178
104
|
|
|
179
|
-
|
|
105
|
+
大变更可以按保留原始行号的差异窗口分批分析;不能容纳的部分会明确标为未完成。详细读取、时间和发现预算见 [开发与发布指南](DEVELOPMENT.md)。
|
|
180
106
|
|
|
181
|
-
|
|
107
|
+
## 文档导航
|
|
182
108
|
|
|
183
|
-
|
|
109
|
+
- [版本变化](CHANGELOG.md):各版对使用者有何影响。
|
|
110
|
+
- [本次发布说明](RELEASE-NOTES.md):新版本内容、升级注意事项及限制。
|
|
111
|
+
- [开发与发布指南](DEVELOPMENT.md):测试、打包、发布和失败恢复。
|
|
112
|
+
- [核心能力对照](CORE-ALIGNMENT-TASKS.md):已具备能力与尚未完成的差距。
|
|
113
|
+
- [参考源码对照](CORE-SOURCE-INVENTORY.md):维护者使用的固定参考来源。
|
|
114
|
+
- [评测说明](https://github.com/f-e-n-g-0531/dsh-code-review/blob/main/evaluation/README.md):样本、试跑观察及其证据限制。
|
|
184
115
|
|
|
185
|
-
|
|
116
|
+
最新安装包与正式版本以 [npm](https://www.npmjs.com/package/@feng0531/dsh-code-review) 和 [GitHub Releases](https://github.com/f-e-n-g-0531/dsh-code-review/releases) 为准。发布与安装成功不代表真实模型的误报率或漏报率已经得到证明。
|
package/RELEASE-NOTES.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# v0.40.0 发布说明
|
|
2
|
+
|
|
3
|
+
## 新增:沿手动上下文取得必要实现
|
|
4
|
+
|
|
5
|
+
在 Git 工作区同时设置 contextPaths 和 autoContext: true 时,自动上下文现在也从手动选定的文件出发。若该文件导入或转发其他实现,插件最多沿三层静态依赖取得正文,帮助理解变更所需的类型与实现。
|
|
6
|
+
|
|
7
|
+
不启用 autoContext 时,手动上下文仍只包含指定文件。无需新增参数。
|
|
8
|
+
|
|
9
|
+
## 范围与限制
|
|
10
|
+
|
|
11
|
+
- 手动文件和自动依赖共享 20 个上下文名额。
|
|
12
|
+
- 手动入口正文和自动依赖共享 1 MiB 来源上限;单文件不超过 256 KiB。
|
|
13
|
+
- 依赖查询、入口检查及执行前重新采集沿用有限范围和时间上限。
|
|
14
|
+
- 自动依赖必须来自 Git 跟踪路径;不会重新纳入排除的变更。
|
|
15
|
+
- 文件在预览后发生变化时,必须重新预览,不能沿旧快照发送。
|
|
16
|
+
|
|
17
|
+
这是保守的文本导航,不是完整符号解析。Git 历史和 SVN 的链式上下文尚未完成,动态调用和实例绑定仍可能无法解析。
|
|
18
|
+
|
|
19
|
+
## 验证
|
|
20
|
+
|
|
21
|
+
真实 Git 和受控模型测试覆盖手动入口、启用开关、上下文数量、正文预算、未跟踪依赖、排除变更和过期拒绝。正式发布还须通过全量回归、独立安装及四组 CI。测试证明流程边界,不证明模型检出率。
|
|
22
|
+
|
|
23
|
+
使用方法见 [README](README.md),发布步骤见 [开发指南](DEVELOPMENT.md)。
|
package/index.mjs
CHANGED
|
@@ -12,7 +12,7 @@ export function apply(ctx, config = {}) {
|
|
|
12
12
|
};
|
|
13
13
|
ctx.tools.register({
|
|
14
14
|
name: 'code_review_preview', description: 'Preview Git/SVN working-copy or Git commit/range review scope and model destination without sending source to a model. repositoryPath selects an explicit child repository relative to session workspace; file paths are repository-relative. Preview each repository separately. Show the preview before execution.',
|
|
15
|
-
parameters: { type: 'object', additionalProperties: false, properties: { reviewRounds: { type: 'integer', minimum: 1, maximum: 3, description: 'Explicit independent review passes, default 1. Preview discloses extra sends; later passes omit the first risk plan. Shares existing timeout, call and retrieval budgets, not provider reasoning effort. Bound to this preview; execute cannot override.' }, oldContextPaths: { type: 'array', maxItems: 20, items: { type: 'string' }, description: 'Explicit Git historical baseline-only blob context paths. Shares 20 context slots. No target text is inferred; selected old changes reuse their original identity, excluded changes cannot reenter. Unsupported on working reviews and SVN.' }, callerScopePaths: { type: 'array', minItems: 1, maxItems: 4, items: { type: 'string' }, description: 'Explicit non-root repository-relative directories for bounded tracked literal reverse import/include discovery. Git/SVN working review or Git fixed commit/range review. SVN uses offline normal nodes, rejects unsafe ancestor states and special/keyword properties. Historical sides share scan budgets and use object blobs only. Preview reads candidate bodies, including nonmatches; only captured matching context is sent. Navigation only, not complete caller coverage.' }, businessRequirement: { type: 'string', maxLength: 16384, description: 'Optional business constraint text up to 16KiB UTF8; untrusted data, not evidence or permission. Bound to preview and sent in review phases.' }, commit: { type: 'string', description: 'Git commit versus sole parent; root empty, merge requires range.' }, baseRevision: { type: 'string', description: 'Git old endpoint; requires targetRevision, mutually exclusive with commit.' }, targetRevision: { type: 'string', description: 'Git new endpoint, exact tree endpoints not merge-base. Explicit context uses target tree with available baseline provenance; oldContextPaths is baseline-only. Historical caller discovery scans fixed sides; explicit rules use target-tree blobs.' }, repositoryPath: { type: 'string', description: 'Workspace-relative explicit child Git/SVN repository root, forward slashes; omit for current repository.' }, selectedPaths: { type: 'array', items: { type: 'string' }, maxItems: 200 }, autoContext: { type: 'boolean', description: 'Opt in to
|
|
15
|
+
parameters: { type: 'object', additionalProperties: false, properties: { reviewRounds: { type: 'integer', minimum: 1, maximum: 3, description: 'Explicit independent review passes, default 1. Preview discloses extra sends; later passes omit the first risk plan. Shares existing timeout, call and retrieval budgets, not provider reasoning effort. Bound to this preview; execute cannot override.' }, oldContextPaths: { type: 'array', maxItems: 20, items: { type: 'string' }, description: 'Explicit Git historical baseline-only blob context paths. Shares 20 context slots. No target text is inferred; selected old changes reuse their original identity, excluded changes cannot reenter. Unsupported on working reviews and SVN.' }, callerScopePaths: { type: 'array', minItems: 1, maxItems: 4, items: { type: 'string' }, description: 'Explicit non-root repository-relative directories for bounded tracked literal reverse import/include discovery. Git/SVN working review or Git fixed commit/range review. SVN uses offline normal nodes, rejects unsafe ancestor states and special/keyword properties. Historical sides share scan budgets and use object blobs only. Preview reads candidate bodies, including nonmatches; only captured matching context is sent. Navigation only, not complete caller coverage.' }, businessRequirement: { type: 'string', maxLength: 16384, description: 'Optional business constraint text up to 16KiB UTF8; untrusted data, not evidence or permission. Bound to preview and sent in review phases.' }, commit: { type: 'string', description: 'Git commit versus sole parent; root empty, merge requires range.' }, baseRevision: { type: 'string', description: 'Git old endpoint; requires targetRevision, mutually exclusive with commit.' }, targetRevision: { type: 'string', description: 'Git new endpoint, exact tree endpoints not merge-base. Explicit context uses target tree with available baseline provenance; oldContextPaths is baseline-only. Historical caller discovery scans fixed sides; explicit rules use target-tree blobs.' }, repositoryPath: { type: 'string', description: 'Workspace-relative explicit child Git/SVN repository root, forward slashes; omit for current repository.' }, selectedPaths: { type: 'array', items: { type: 'string' }, maxItems: 200 }, autoContext: { type: 'boolean', description: 'Opt in to tracked literal import/include context shown in preview. Working Git follows changed and explicitly selected context sources at most 3 dependency layers under shared 512 exact probes, 20 candidates/context slots, 1MiB source and 30s verification budget. SVN and Git history remain direct navigation. Not semantic binding or complete definitions.' }, contextPaths: { type: 'array', items: { type: 'string' }, maxItems: 20 }, rulePaths: { type: 'array', items: { type: 'string' }, maxItems: 4 } } },
|
|
16
16
|
output,
|
|
17
17
|
async execute(args, exec) { const preview = await service.preview(args, exec); return { json: JSON.stringify(preview), markdown: '' }; },
|
|
18
18
|
});
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@feng0531/dsh-code-review",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.40.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"publishConfig": { "access": "public", "registry": "https://registry.npmjs.org/" },
|
|
7
7
|
"main": "./index.mjs",
|
|
8
8
|
"exports": { ".": "./index.mjs", "./package.json": "./package.json", "./locale/*.json": "./locale/*.json" },
|
|
9
|
-
"files": ["index.mjs", "cordis.patch.yml", "src/", "locale/", "README.md", "CHANGELOG.md", "LICENSE", "LICENSES/"],
|
|
9
|
+
"files": ["index.mjs", "cordis.patch.yml", "src/", "locale/", "README.md", "CHANGELOG.md", "RELEASE-NOTES.md", "DEVELOPMENT.md", "CORE-ALIGNMENT-TASKS.md", "CORE-SOURCE-INVENTORY.md", "LICENSE", "LICENSES/"],
|
|
10
10
|
"dsh": { "bundle": { "patch": "./cordis.patch.yml" } },
|
|
11
11
|
"repository": { "type": "git", "url": "https://github.com/f-e-n-g-0531/dsh-code-review.git" },
|
|
12
12
|
"type": "module",
|