@yottameta/yotta-dev-mcp 0.1.1 → 0.2.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 +28 -0
- package/README.md +60 -4
- package/README.zh-CN.md +52 -3
- package/SKILL.md +19 -5
- package/package.json +5 -4
- package/references/adapters.md +69 -0
- package/references/architecture-contract.md +256 -0
- package/references/tools.md +147 -1
- package/scripts/dev_adapters.py +609 -0
- package/scripts/dev_architecture.py +379 -0
- package/scripts/dev_common.py +144 -0
- package/scripts/dev_contract.py +830 -0
- package/scripts/dev_engine.py +258 -134
- package/scripts/dev_impact.py +556 -0
- package/scripts/dev_model.py +435 -0
- package/scripts/dev_selftest.py +534 -0
- package/scripts/dev_verify.py +450 -0
- package/scripts/yotta_dev_mcp.py +234 -5
- package/server.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v0.2.0 (2026-09-25)
|
|
4
|
+
|
|
5
|
+
- 新增 `system_model`:模块、依赖、入口、测试映射、配置与数据归属的确定性系统模型,
|
|
6
|
+
附带 `.yotta/architecture.json` 契约分层。
|
|
7
|
+
- 新增 `architecture_review`:按契约评审依赖规则、边界可见性与数据归属,
|
|
8
|
+
每条产出 file / line / severity 证据;critical / high 判 FAIL,medium / low 只告警,
|
|
9
|
+
无法判定的部分进 UNKNOWN,声明的不变量一律进 `unverified_claims`。
|
|
10
|
+
- 新增 `impact_analysis`:从 changed_files / unified diff / 目标符号生成变更影响锥,
|
|
11
|
+
含直接消费者、受影响层与边界、数据存储、不变量、映射测试、可解释风险分级与回滚探针。
|
|
12
|
+
- 新增 `verify_change`:L0-L5 验证阶梯与确定性证据账本;L0 / L1 默认运行,
|
|
13
|
+
L2-L4 必须同时有 `.yotta/verification.json` 白名单声明与 `allow_execute=true`,
|
|
14
|
+
L5 人工复核始终留在 `unverified_claims`;账本以 output hash 与 ledger digest 复算。
|
|
15
|
+
- 新增 `self_test`:检查必需文件、版本五件、协议工具 schema / engine dispatch 漂移、
|
|
16
|
+
写入与执行闸门是否 fail-closed,并用 seeded defect 与 mutation control 反证验证器会红。
|
|
17
|
+
- 新增 `run_adapter`:探测或显式运行项目已安装的 import-linter /
|
|
18
|
+
dependency-cruiser / Repomix;固定 argv、项目内 cwd、有界输出与 hash,
|
|
19
|
+
缺工具 / 缺配置 / 超时 / 非法输出一律返回 UNKNOWN,且不自动安装、不下载、不访问远端。
|
|
20
|
+
- 新增架构契约(版本 1):分层、依赖规则、边界、数据归属、不变量、风险权重;
|
|
21
|
+
校验输出 code / severity / JSON pointer / evidence。
|
|
22
|
+
- 新增可选验证策略(版本 1):只允许白名单 runner、仓库内相对 cwd 与显式执行;
|
|
23
|
+
拒绝任意命令、绝对路径与越界 cwd。
|
|
24
|
+
- 结论只给 `PASS` / `FAIL` / `UNKNOWN`;缺证据项写入 `unknowns`,未执行的验证级别
|
|
25
|
+
写入 `unverified_claims`;模型带稳定 `model_digest`。
|
|
26
|
+
- 引擎按共享层拆分:`dev_common` / `dev_model` / `dev_architecture` /
|
|
27
|
+
`dev_impact` / `dev_verify` / `dev_selftest` / `dev_adapters`;`dev_engine`
|
|
28
|
+
保留原公开函数与 dispatch 作为稳定门面。
|
|
29
|
+
- 原 12 个工具行为不变;新增的六个工具离线、零依赖(适配器只在用户已安装时调用),默认只读。
|
|
30
|
+
|
|
3
31
|
## v0.1.1 (2026-09-25)
|
|
4
32
|
|
|
5
33
|
- 品牌改名:对外显示名统一为「元开(yotta-dev-mcp)」,不再把功能描述「开发能力 MCP」当产品名。
|
package/README.md
CHANGED
|
@@ -9,6 +9,12 @@ Deterministic local development tools exposed over a stdio MCP server.
|
|
|
9
9
|
| Tool | Purpose |
|
|
10
10
|
|---|---|
|
|
11
11
|
| `repo_map` | Map modules, imports and entrypoints in a repository. |
|
|
12
|
+
| `system_model` | Build a system model with layer data from the architecture contract. |
|
|
13
|
+
| `architecture_review` | Review dependency rules, boundaries and data ownership with evidence. |
|
|
14
|
+
| `impact_analysis` | Build the change impact cone with tests, blast radius and rollback probes. |
|
|
15
|
+
| `verify_change` | Run the L0-L5 verification ladder and return an evidence ledger. |
|
|
16
|
+
| `self_test` | Check files, versions, tool contracts, write gates and seeded-defect counterexamples. |
|
|
17
|
+
| `run_adapter` | Probe or explicitly run optional import-linter / dependency-cruiser / Repomix adapters. |
|
|
12
18
|
| `find_code` | Locate symbols and text with bounded results. |
|
|
13
19
|
| `compress_output` | Compress long logs while keeping errors and head/tail context. |
|
|
14
20
|
| `review_code` | Apply deterministic review rules with file, line and evidence. |
|
|
@@ -21,9 +27,48 @@ Deterministic local development tools exposed over a stdio MCP server.
|
|
|
21
27
|
| `scaffold_skill` | Plan or create a minimal skill scaffold; dry-run by default. |
|
|
22
28
|
| `workflow_state` | Read `.workflow` and optionally append an explicit log entry. |
|
|
23
29
|
|
|
24
|
-
|
|
25
|
-
`
|
|
26
|
-
|
|
30
|
+
Tools are read-only by default; `run_checks`, the L2-L4 policy checks in
|
|
31
|
+
`verify_change`, the test subset in `self_test`, and `run_adapter` with
|
|
32
|
+
`action=run` require `allow_execute=true`. `scaffold_skill` / `workflow_state`
|
|
33
|
+
require `apply=true` before writing. Python 3.8+ standard library is sufficient;
|
|
34
|
+
no network access is required.
|
|
35
|
+
|
|
36
|
+
### Architecture contract
|
|
37
|
+
|
|
38
|
+
`system_model` reads an optional `.yotta/architecture.json` (version 1) that declares
|
|
39
|
+
layers, dependency rules, boundaries, data ownership, invariants and risk weights. The
|
|
40
|
+
result reports `PASS`, `FAIL` or `UNKNOWN`, lists every unknown that still needs
|
|
41
|
+
evidence, and keeps verification levels that were not executed in `unverified_claims`.
|
|
42
|
+
`architecture_review` then checks that contract: dependency rules, boundary visibility
|
|
43
|
+
and data ownership each produce findings with file, line and severity. `critical` and
|
|
44
|
+
`high` findings fail the review, `medium` and `low` stay advisory, and anything that
|
|
45
|
+
cannot be decided from the model becomes `UNKNOWN` instead of a silent pass.
|
|
46
|
+
|
|
47
|
+
`impact_analysis` starts from `changed_files`, a unified diff or target symbols and
|
|
48
|
+
walks reverse dependencies into a bounded cone: direct consumers, affected layers,
|
|
49
|
+
boundaries, data stores, invariants, mapped tests, an explainable blast radius and
|
|
50
|
+
rollback probes. It executes nothing.
|
|
51
|
+
|
|
52
|
+
`verify_change` runs the post-change ladder: L0 syntax and contract schema, L1
|
|
53
|
+
architecture checks inside the impact cone, L2-L4 whitelisted checks declared in
|
|
54
|
+
`.yotta/verification.json` with explicit `allow_execute=true`, and L5 independent
|
|
55
|
+
review kept as unverified work. Ledger entries carry a claim, status, evidence,
|
|
56
|
+
check name and output hash so the result can be recomputed; skipped levels are never
|
|
57
|
+
written as passing.
|
|
58
|
+
|
|
59
|
+
`self_test` checks the integrity of yotta-dev-mcp itself: required files, version
|
|
60
|
+
alignment across package / SKILL / CHANGELOG / server / engine, protocol tool schema
|
|
61
|
+
drift, fail-closed write gates, and seeded-defect plus mutation controls that prove
|
|
62
|
+
the verifier turns red or unknown. The test suite is not executed by default.
|
|
63
|
+
|
|
64
|
+
`run_adapter` is an optional enhancement layer. `action=list` only probes the
|
|
65
|
+
project-local `node_modules/.bin`, project virtualenvs and `PATH`; `action=run`
|
|
66
|
+
requires `allow_execute=true` and runs one fixed adapter command. Missing tools,
|
|
67
|
+
missing config, invalid output and timeouts return `UNKNOWN` with a next step.
|
|
68
|
+
No package is installed or downloaded, and adapter results do not silently change
|
|
69
|
+
the status of the core architecture tools. Details: `references/adapters.md`.
|
|
70
|
+
|
|
71
|
+
Schema, glob rules, finding codes and cone fields: `references/architecture-contract.md`.
|
|
27
72
|
|
|
28
73
|
## Install
|
|
29
74
|
|
|
@@ -60,6 +105,14 @@ The engine can also be used without MCP:
|
|
|
60
105
|
|
|
61
106
|
```bash
|
|
62
107
|
python scripts/dev_engine.py repo-map .
|
|
108
|
+
python scripts/dev_engine.py system-model .
|
|
109
|
+
python scripts/dev_engine.py architecture-review .
|
|
110
|
+
python scripts/dev_engine.py impact-analysis . --changed src/core/store.py
|
|
111
|
+
python scripts/dev_engine.py verify-change . --changed src/core/store.py
|
|
112
|
+
python scripts/dev_engine.py verify-change . --changed src/core/store.py --level L2 --allow-execute
|
|
113
|
+
python scripts/dev_engine.py self-test .
|
|
114
|
+
python scripts/dev_engine.py adapter . --action list
|
|
115
|
+
python scripts/dev_engine.py adapter . --action run --adapter dependency-cruiser --allow-execute
|
|
63
116
|
python scripts/dev_engine.py find-code . "helper"
|
|
64
117
|
python scripts/dev_engine.py review-code .
|
|
65
118
|
python scripts/dev_engine.py mcp-doctor
|
|
@@ -73,4 +126,7 @@ python scripts/dev_engine.py mcp-doctor
|
|
|
73
126
|
|
|
74
127
|
## Current version
|
|
75
128
|
|
|
76
|
-
`0.
|
|
129
|
+
`0.2.0` (2026-09-25) adds `system_model`, `architecture_review`,
|
|
130
|
+
`impact_analysis`, `verify_change`, `self_test`, `run_adapter`, and the
|
|
131
|
+
`.yotta/architecture.json` plus optional `.yotta/verification.json` contracts on
|
|
132
|
+
top of the twelve deterministic tools.
|
package/README.zh-CN.md
CHANGED
|
@@ -9,6 +9,12 @@
|
|
|
9
9
|
| 工具 | 用途 |
|
|
10
10
|
|---|---|
|
|
11
11
|
| `repo_map` | 代码库模块、导入关系与入口点地图。 |
|
|
12
|
+
| `system_model` | 系统模型:模块、依赖、入口、测试映射、配置与数据归属,附带契约分层。 |
|
|
13
|
+
| `architecture_review` | 按契约评审依赖规则、边界可见性与数据归属,逐条给出证据。 |
|
|
14
|
+
| `impact_analysis` | 变更影响锥:消费者、受影响层与存储、映射测试、风险分级与回滚探针。 |
|
|
15
|
+
| `verify_change` | L0-L5 验证阶梯与证据账本;未执行级别保留在 `unverified_claims`。 |
|
|
16
|
+
| `self_test` | 文件、版本、工具契约、写闸门与 seeded defect / mutation 反证自测。 |
|
|
17
|
+
| `run_adapter` | 探测或显式运行 import-linter / dependency-cruiser / Repomix 可选适配器。 |
|
|
12
18
|
| `find_code` | 符号与文本定位,结果有数量上限。 |
|
|
13
19
|
| `compress_output` | 压缩长日志,保留错误、错误栈和首尾上下文。 |
|
|
14
20
|
| `review_code` | 规则化代码评审,输出文件、行号、证据与建议。 |
|
|
@@ -21,8 +27,40 @@
|
|
|
21
27
|
| `scaffold_skill` | 规划或生成最小技能脚手架,默认 dry-run。 |
|
|
22
28
|
| `workflow_state` | 读取 `.workflow`,可选显式追加快照日志。 |
|
|
23
29
|
|
|
24
|
-
|
|
25
|
-
`
|
|
30
|
+
默认只读;`run_checks`、`verify_change` 的 L2-L4 策略检查、`self_test` 的测试子集,
|
|
31
|
+
以及 `run_adapter` 的 `action=run` 必须显式 `allow_execute=true`,
|
|
32
|
+
`scaffold_skill` / `workflow_state` 必须显式 `apply=true` 才写入。
|
|
33
|
+
核心只用 Python 3.8+ 标准库,默认不联网。
|
|
34
|
+
|
|
35
|
+
### 架构契约
|
|
36
|
+
|
|
37
|
+
`system_model` 读取可选的 `.yotta/architecture.json`(版本 1),其中声明分层、依赖规则、
|
|
38
|
+
边界、数据归属、不变量与风险权重。结果只给 `PASS` / `FAIL` / `UNKNOWN`,把还缺证据的
|
|
39
|
+
未知项列进 `unknowns`,未执行的验证级别保留在 `unverified_claims`。schema、glob 规则与
|
|
40
|
+
错误码见 `references/architecture-contract.md`。
|
|
41
|
+
|
|
42
|
+
`architecture_review` 在这份契约上做评审:依赖规则、边界可见性与数据归属逐条产出
|
|
43
|
+
文件、行号与严重级;`critical` / `high` 判 FAIL,`medium` / `low` 只告警,
|
|
44
|
+
模型无法判定的部分进 `UNKNOWN`,不会被静默放行。
|
|
45
|
+
|
|
46
|
+
`impact_analysis` 从 `changed_files`、unified diff 或目标符号出发,沿反向依赖走出一棵
|
|
47
|
+
有上限的影响锥:直接消费者、受影响层与边界、数据存储、不变量、映射测试、
|
|
48
|
+
可解释的风险分级与回滚探针;全程不执行任何命令。
|
|
49
|
+
|
|
50
|
+
`verify_change` 在改动后跑同一份模型:L0 检查语法与契约 schema,L1 检查影响锥内架构规则,
|
|
51
|
+
L2-L4 只执行 `.yotta/verification.json` 中声明的白名单检查且必须显式 `allow_execute=true`,
|
|
52
|
+
L5 独立复核始终保留在未验证项。账本中的每个结论都带 claim、status、evidence、check 与
|
|
53
|
+
output hash,便于复算;未跑级别不会被写成“已通过”。
|
|
54
|
+
|
|
55
|
+
`self_test` 对元开自身做完整性检查:必需文件、版本五件、协议工具 schema 与引擎
|
|
56
|
+
dispatch 是否漂移、写 / 执行闸门是否仍 fail-closed,并用临时仓库里的 seeded defect
|
|
57
|
+
与 mutation control 证明验证器会变红或变 UNKNOWN。测试子集默认不跑。
|
|
58
|
+
|
|
59
|
+
`run_adapter` 是可选增强层:`action=list` 只探测项目 `node_modules/.bin`、
|
|
60
|
+
项目虚拟环境和 `PATH`;`action=run` 必须显式 `allow_execute=true`,且只运行固定
|
|
61
|
+
适配器命令。缺工具、缺配置、非法输出或超时都返回 `UNKNOWN` 并给出下一步;
|
|
62
|
+
不安装、不下载,适配器结果也不会悄悄改写核心架构工具的状态。详见
|
|
63
|
+
`references/adapters.md`。
|
|
26
64
|
|
|
27
65
|
## 安装
|
|
28
66
|
|
|
@@ -55,6 +93,14 @@ bash <技能目录>/yotta-dev-mcp/install.sh --agent codex
|
|
|
55
93
|
|
|
56
94
|
```bash
|
|
57
95
|
python scripts/dev_engine.py repo-map .
|
|
96
|
+
python scripts/dev_engine.py system-model .
|
|
97
|
+
python scripts/dev_engine.py architecture-review .
|
|
98
|
+
python scripts/dev_engine.py impact-analysis . --changed src/core/store.py
|
|
99
|
+
python scripts/dev_engine.py verify-change . --changed src/core/store.py
|
|
100
|
+
python scripts/dev_engine.py verify-change . --changed src/core/store.py --level L2 --allow-execute
|
|
101
|
+
python scripts/dev_engine.py self-test .
|
|
102
|
+
python scripts/dev_engine.py adapter . --action list
|
|
103
|
+
python scripts/dev_engine.py adapter . --action run --adapter dependency-cruiser --allow-execute
|
|
58
104
|
python scripts/dev_engine.py find-code . "helper"
|
|
59
105
|
python scripts/dev_engine.py review-code .
|
|
60
106
|
python scripts/dev_engine.py mcp-doctor
|
|
@@ -68,4 +114,7 @@ python scripts/dev_engine.py mcp-doctor
|
|
|
68
114
|
|
|
69
115
|
## 当前版本
|
|
70
116
|
|
|
71
|
-
`0.
|
|
117
|
+
`0.2.0`(2026-09-25)在原有十二个确定性工具之上新增 `system_model`、
|
|
118
|
+
`architecture_review`、`impact_analysis`、`verify_change`、`self_test`、
|
|
119
|
+
`run_adapter`,以及 `.yotta/architecture.json` 与可选
|
|
120
|
+
`.yotta/verification.json` 契约(版本 1)。
|
package/SKILL.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: yotta-dev-mcp
|
|
3
|
-
description: 元开(yotta-dev-mcp)—— 本地、确定性的开发工具 MCP,把只读默认的开发能力暴露为 stdio MCP server:repo_map / find_code / compress_output / review_code / review_diff / mcp_doctor / scan_secrets / scan_dependencies / check_publish_readiness / run_checks / scaffold_skill / workflow_state。触发:让 AI
|
|
4
|
-
version: 0.
|
|
3
|
+
description: 元开(yotta-dev-mcp)—— 本地、确定性的开发工具 MCP,把只读默认的开发能力暴露为 stdio MCP server:repo_map / system_model / architecture_review / impact_analysis / verify_change / self_test / run_adapter / find_code / compress_output / review_code / review_diff / mcp_doctor / scan_secrets / scan_dependencies / check_publish_readiness / run_checks / scaffold_skill / workflow_state。触发:让 AI 在陌生项目里先做结构盘点、构建系统模型或架构契约(.yotta/architecture.json)、按契约评审架构、分析改动影响锥与回归面、按验证阶梯产出证据账本、对元开自身做完整性 / 反证自测、探测或显式运行 import-linter / dependency-cruiser / Repomix 可选适配器、定位代码、评审改动、扫描密钥/依赖、检查发布就绪、运行白名单检查、生成脚手架或读取 .workflow 状态时;或用户说 元开 / 开发能力 MCP / yotta-dev-mcp / 代码库地图 / 系统模型 / 架构契约 / 架构评审 / 影响分析 / 验证账本 / 反证自测 / 代码评审 MCP / 适配器 等。边界:Python 3.8+ 标准库、离线默认;除 run_checks(显式 allow_execute)、verify_change 的 L2-L4 策略检查(显式 allow_execute)与 self_test 的测试子集(显式 allow_execute)、run_adapter 的 action=run(显式 allow_execute)、scaffold_skill / workflow_state 的显式 apply 外均为只读;不上传源码、不自动修改、不提交、不联网查询包是否存在、不自动安装或下载适配器。
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
license: MIT
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -13,6 +13,12 @@ license: MIT
|
|
|
13
13
|
## 何时使用
|
|
14
14
|
|
|
15
15
|
- 接手陌生项目:先 `repo_map` 看模块、依赖和入口,再 `find_code` 定位。
|
|
16
|
+
- 架构与影响分析:先写 `.yotta/architecture.json`,再用 `system_model` 拿分层、依赖、测试映射与 `UNKNOWN` 清单。
|
|
17
|
+
- 契约评审:用 `architecture_review` 查依赖规则、边界可见性与数据归属,每条给证据与严重级。
|
|
18
|
+
- 改动前评估:用 `impact_analysis` 从改动文件 / diff / 目标符号走出影响锥、映射测试与回滚探针。
|
|
19
|
+
- 改动后验证:用 `verify_change` 跑 L0 / L1 默认检查,按需结合 `.yotta/verification.json` 与 `allow_execute=true` 执行 L2-L4 白名单检查,产出可复算账本。
|
|
20
|
+
- 自身完整性:用 `self_test` 检查文件、版本、工具契约、写闸门与 seeded defect / mutation 反证。
|
|
21
|
+
- 可选增强:用 `run_adapter` 先 `action=list` 探测 import-linter / dependency-cruiser / Repomix,再按需 `action=run` + `allow_execute=true`;缺工具或配置返回 UNKNOWN,不自动安装、不自动下载。
|
|
16
22
|
- 评审改动:`review_diff` 只看新增行;`review_code` 对文件或仓库做规则检查。
|
|
17
23
|
- 长日志 / 长命令输出:`compress_output` 保错误、错误栈和首尾上下文。
|
|
18
24
|
- 本机排查:`mcp_doctor` 只读检查技能目录和 MCP JSON 配置。
|
|
@@ -40,6 +46,12 @@ python scripts/yotta_dev_mcp.py
|
|
|
40
46
|
| 工具 | 用途 | 写入 |
|
|
41
47
|
|---|---|---|
|
|
42
48
|
| `repo_map` | 模块、导入、入口点地图 | 否 |
|
|
49
|
+
| `system_model` | 系统模型:模块、依赖、入口、测试映射、配置与数据归属;附带契约分层,输出 PASS / FAIL / UNKNOWN | 否 |
|
|
50
|
+
| `architecture_review` | 按契约评审依赖规则、边界可见性与数据归属;critical / high 判 FAIL,medium / low 只告警 | 否 |
|
|
51
|
+
| `impact_analysis` | 变更影响锥:直接消费者、受影响层 / 边界 / 存储 / 不变量、映射测试、风险分级与回滚探针 | 否 |
|
|
52
|
+
| `verify_change` | L0-L5 验证阶梯与证据账本:L0 / L1 默认,L2-L4 需策略声明 + 显式执行,L5 始终留在未验证项 | 仅显式 allow_execute 的 L2-L4 |
|
|
53
|
+
| `self_test` | 文件 / 版本 / 工具契约 / 写闸门 / seeded defect 与 mutation 反证自测 | 仅显式 allow_execute 的测试子集 |
|
|
54
|
+
| `run_adapter` | 探测或显式运行 import-linter / dependency-cruiser / Repomix;固定 argv、项目内 cwd、有界输出与哈希 | 仅 action=run + 显式 allow_execute |
|
|
43
55
|
| `find_code` | 符号 / 文本定位,结果有上限 | 否 |
|
|
44
56
|
| `compress_output` | 保留错误与首尾的长输出压缩 | 否 |
|
|
45
57
|
| `review_code` | 规则化代码评审,带行号与建议 | 否 |
|
|
@@ -52,16 +64,18 @@ python scripts/yotta_dev_mcp.py
|
|
|
52
64
|
| `scaffold_skill` | 生成最小技能脚手架,默认 dry-run | 仅显式 apply |
|
|
53
65
|
| `workflow_state` | 读取 `.workflow`,可选显式追加日志 | 仅显式 apply |
|
|
54
66
|
|
|
55
|
-
详细契约见 `references/tools.md`。
|
|
67
|
+
详细契约见 `references/tools.md`;架构契约、评审语义与影响锥字段见 `references/architecture-contract.md`。
|
|
56
68
|
|
|
57
69
|
## 边界
|
|
58
70
|
|
|
59
|
-
-
|
|
60
|
-
- `
|
|
71
|
+
- 会执行项目代码的工具默认关闭:`run_checks`、`verify_change` 的 L2-L4 策略检查、`self_test` 的测试子集都必须显式 `allow_execute=true`,且只运行白名单检查或已声明的策略检查。
|
|
72
|
+
- 外部适配器只在用户已安装时接入:`run_adapter` 不安装、不下载、不访问远端、不接收任意命令参数;工具缺失或配置缺失一律返回 `UNKNOWN` 并给出 next_step。
|
|
73
|
+
- `scaffold_skill` / `workflow_state` 默认只预览,显式 `apply=true` 才写入;脚手架拒绝覆盖已有非空目录,状态写入使用原子替换并为被覆盖文件保留 `.bak`。
|
|
61
74
|
- 不联网,不查询包是否存在于公共仓库。
|
|
62
75
|
- 不读取或修改 YottaCode 仓库。
|
|
63
76
|
- 结论是确定性静态判断,不替代人工评审与最终决策。
|
|
64
77
|
|
|
65
78
|
## 当前版本
|
|
66
79
|
|
|
80
|
+
- v0.2.0(2026-09-25):新增 `system_model`、`architecture_review`、`impact_analysis`、`verify_change`、`self_test`、`run_adapter`,以及 `.yotta/architecture.json` 与可选 `.yotta/verification.json` 契约(版本 1);工具总数 18,原 12 个工具行为不变。
|
|
67
81
|
- v0.1.1:品牌显示名统一为「元开」;功能与 12 个工具不变。
|
package/package.json
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yottameta/yotta-dev-mcp",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "YuanKai (yotta-dev-mcp) - deterministic local development tools exposed over stdio MCP: repo_map, find_code, compress_output, review_code, review_diff, mcp_doctor, scan_secrets, scan_dependencies, check_publish_readiness, run_checks, scaffold_skill and workflow_state. Python 3.8+ standard library, offline by default; writes and command execution require explicit flags.",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "YuanKai (yotta-dev-mcp) - deterministic local development tools exposed over stdio MCP: repo_map, system_model, architecture_review, impact_analysis, verify_change, self_test, run_adapter, find_code, compress_output, review_code, review_diff, mcp_doctor, scan_secrets, scan_dependencies, check_publish_readiness, run_checks, scaffold_skill and workflow_state. Reads an optional .yotta/architecture.json contract plus .yotta/verification.json policy for architecture reviews, change impact cones and the L0-L5 evidence ledger. Optional explicit adapters integrate import-linter, dependency-cruiser and Repomix without auto-install or network access. Python 3.8+ standard library, offline by default; writes and command execution require explicit flags.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"agent-skills",
|
|
8
8
|
"yottaskills",
|
|
9
9
|
"mcp",
|
|
10
10
|
"developer-tools",
|
|
11
|
-
"code-review"
|
|
11
|
+
"code-review",
|
|
12
|
+
"verification"
|
|
12
13
|
],
|
|
13
14
|
"files": [
|
|
14
15
|
"SKILL.md",
|
|
@@ -40,7 +41,7 @@
|
|
|
40
41
|
"yotta-dev-mcp-install": "bin/install.js"
|
|
41
42
|
},
|
|
42
43
|
"scripts": {
|
|
43
|
-
"test": "python scripts/test_dev_engine.py && python scripts/test_yotta_dev_mcp.py"
|
|
44
|
+
"test": "python scripts/test_dev_contract.py && python scripts/test_dev_adapters.py && python scripts/test_dev_engine.py && python scripts/test_yotta_dev_mcp.py"
|
|
44
45
|
},
|
|
45
46
|
"engines": {
|
|
46
47
|
"node": ">=18"
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Optional external adapters
|
|
2
|
+
|
|
3
|
+
`run_adapter` probes and explicitly runs mature third-party tools that the user
|
|
4
|
+
already installed. The core engine stays Python-standard-library-only; adapters
|
|
5
|
+
are optional evidence sources, never a required dependency.
|
|
6
|
+
|
|
7
|
+
## Adapter matrix
|
|
8
|
+
|
|
9
|
+
| Adapter | License | What it adds | Required config |
|
|
10
|
+
|---|---|---|---|
|
|
11
|
+
| `import-linter` | BSD-2-Clause | Python import boundaries and layered contracts | `.importlinter`, `setup.cfg`, `tox.ini` or `pyproject.toml` |
|
|
12
|
+
| `dependency-cruiser` | MIT | JavaScript / TypeScript dependency rules | `.dependency-cruiser.js` / `.cjs` / `.mjs` / `.json` |
|
|
13
|
+
| `repomix` | MIT | Repository packing and context budget enforcement | optional `repomix.config.json` |
|
|
14
|
+
|
|
15
|
+
## Commands
|
|
16
|
+
|
|
17
|
+
`action=list` only inspects the project-local `node_modules/.bin`, project
|
|
18
|
+
virtualenv directories and `PATH`. It does not execute anything. Each adapter
|
|
19
|
+
entry reports `available`, `ready`, `executable`, `executable_source`, `config`
|
|
20
|
+
and a reason when it is not ready.
|
|
21
|
+
|
|
22
|
+
`action=run` requires `allow_execute=true` and exactly one adapter. The command
|
|
23
|
+
arguments are fixed by the adapter implementation:
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
lint-imports --config <detected-config>
|
|
27
|
+
depcruise --config <detected-config> --output-type json --progress none --exclude node_modules <target>
|
|
28
|
+
repomix --stdout --style xml --quiet --no-git-sort-by-changes [--token-budget N] <target>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
No adapter accepts arbitrary arguments, shell strings, remote repositories or
|
|
32
|
+
package installation. Repomix never receives `--remote` or
|
|
33
|
+
`--no-security-check`.
|
|
34
|
+
|
|
35
|
+
## Output
|
|
36
|
+
|
|
37
|
+
The run result contains:
|
|
38
|
+
|
|
39
|
+
- `status`: `PASS`, `FAIL` or `UNKNOWN`;
|
|
40
|
+
- `adapter`: detected executable, source, config and version;
|
|
41
|
+
- `command`: fixed argv, relative cwd, exit code, timeout flag and output hash;
|
|
42
|
+
- `findings`: normalized adapter violations with rule, severity, path and target;
|
|
43
|
+
- `content`: Repomix-only packed text metadata and bounded text;
|
|
44
|
+
- `next_step`: what to install, configure or rerun when the result is not PASS.
|
|
45
|
+
|
|
46
|
+
Missing tools, missing required config, invalid JSON output, timeouts and
|
|
47
|
+
non-whitelisted execution all degrade to `UNKNOWN`. Adapter findings are
|
|
48
|
+
reported separately; they do not silently change the status of
|
|
49
|
+
`system_model`, `architecture_review`, `impact_analysis` or `verify_change`.
|
|
50
|
+
|
|
51
|
+
## Safety boundary
|
|
52
|
+
|
|
53
|
+
Adapters are local-only and deterministic under the same repository state:
|
|
54
|
+
|
|
55
|
+
- executable discovery is limited to the project `node_modules/.bin`, project
|
|
56
|
+
virtualenvs and `PATH`;
|
|
57
|
+
- execution uses a fixed argv with `shell=False`;
|
|
58
|
+
- the working directory and target must stay inside the repository;
|
|
59
|
+
- output is bounded, hashed and never contains wall-clock timestamps;
|
|
60
|
+
- no package is installed, downloaded or updated by this tool.
|
|
61
|
+
|
|
62
|
+
## Command line
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
python scripts/dev_engine.py adapter . --action list
|
|
66
|
+
python scripts/dev_engine.py adapter . --action run --adapter import-linter --allow-execute
|
|
67
|
+
python scripts/dev_engine.py adapter . --action run --adapter dependency-cruiser --allow-execute
|
|
68
|
+
python scripts/dev_engine.py adapter . --action run --adapter repomix --allow-execute --token-budget 50000
|
|
69
|
+
```
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
# Architecture contract and system model
|
|
2
|
+
|
|
3
|
+
`system_model` builds a deterministic model of a local repository and attaches
|
|
4
|
+
layer data from an optional architecture contract. Everything runs offline with
|
|
5
|
+
the Python standard library; no file is written.
|
|
6
|
+
|
|
7
|
+
## Contract file
|
|
8
|
+
|
|
9
|
+
Path: `.yotta/architecture.json`. Plain JSON, version `1`.
|
|
10
|
+
|
|
11
|
+
```json
|
|
12
|
+
{
|
|
13
|
+
"version": 1,
|
|
14
|
+
"project": "demo",
|
|
15
|
+
"layers": [
|
|
16
|
+
{"id": "core", "title": "Core", "paths": ["src/core/**"], "risk": "high"},
|
|
17
|
+
{"id": "api", "paths": ["src/api/**"]},
|
|
18
|
+
{"id": "ui", "paths": ["src/ui/**"]}
|
|
19
|
+
],
|
|
20
|
+
"rules": [
|
|
21
|
+
{
|
|
22
|
+
"id": "core-no-ui",
|
|
23
|
+
"type": "forbid-dependency",
|
|
24
|
+
"from": "core",
|
|
25
|
+
"to": "ui",
|
|
26
|
+
"severity": "high",
|
|
27
|
+
"claim": "core must not import ui"
|
|
28
|
+
}
|
|
29
|
+
],
|
|
30
|
+
"boundaries": [
|
|
31
|
+
{"id": "public-api", "layer": "api", "paths": ["src/api/public/**"], "visibility": "public"}
|
|
32
|
+
],
|
|
33
|
+
"data_ownership": [
|
|
34
|
+
{"store": "memory-db", "owner": "core", "paths": ["var/memory/**"], "kind": "sqlite"}
|
|
35
|
+
],
|
|
36
|
+
"invariants": [
|
|
37
|
+
{"id": "no-plaintext-secrets", "claim": "secrets are never stored in plaintext",
|
|
38
|
+
"severity": "high", "check": "static"}
|
|
39
|
+
],
|
|
40
|
+
"risk_weights": {"core": 3, "api": 2, "ui": 1}
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Fields
|
|
45
|
+
|
|
46
|
+
| Field | Required | Notes |
|
|
47
|
+
|---|---|---|
|
|
48
|
+
| `version` | yes | Must be `1`. |
|
|
49
|
+
| `project` | no | Free-form name. |
|
|
50
|
+
| `layers` | yes | Layer id, optional title/description, `paths` globs, optional `risk`. |
|
|
51
|
+
| `rules` | no | `forbid-dependency` (`to` is one layer) or `allow-dependency` (`to` is a layer list). `from`, `to`, `severity` and `claim` describe the invariant. |
|
|
52
|
+
| `boundaries` | no | Layer id plus globs; `visibility` is `public`, `internal` or `private`. |
|
|
53
|
+
| `data_ownership` | no | Store id, owning layer, globs and optional `kind`. |
|
|
54
|
+
| `invariants` | no | id plus a non-empty `claim`; `check` is `static`, `command` or `manual`. |
|
|
55
|
+
| `risk_weights` | no | Layer id to a number between 0 and 5. |
|
|
56
|
+
|
|
57
|
+
Ids match `[a-z0-9][a-z0-9._-]{0,63}`. Paths are repository-relative POSIX
|
|
58
|
+
globs and must not be absolute or contain `..`.
|
|
59
|
+
|
|
60
|
+
### Glob rules
|
|
61
|
+
|
|
62
|
+
`*` stays inside one path segment, `**` crosses segments, `?` matches one
|
|
63
|
+
character, and a trailing `/` means the whole directory (`pkg/` equals
|
|
64
|
+
`pkg/**`). Matching is case-sensitive. Layers are evaluated in declaration
|
|
65
|
+
order and the first match wins; a module that matches several layers is
|
|
66
|
+
reported as `layer-overlap`.
|
|
67
|
+
|
|
68
|
+
### Validation findings
|
|
69
|
+
|
|
70
|
+
Every finding carries `code`, `severity`, `message`, a JSON `pointer`, the
|
|
71
|
+
contract `path` and short `evidence`. Severity `critical` or `high` makes the
|
|
72
|
+
contract `FAIL`; `medium` and `low` are advisory.
|
|
73
|
+
|
|
74
|
+
| Code | Meaning |
|
|
75
|
+
|---|---|
|
|
76
|
+
| `contract-invalid-json` | The file is not valid JSON. |
|
|
77
|
+
| `contract-not-object` | The root value is not a JSON object. |
|
|
78
|
+
| `contract-unsupported-version` | `version` is missing or not `1`. |
|
|
79
|
+
| `contract-invalid-layer` / `contract-duplicate-layer` | Layer shape or ids are wrong. |
|
|
80
|
+
| `contract-layer-without-paths` | A layer declares no globs. |
|
|
81
|
+
| `contract-invalid-path` | A glob is absolute, escapes the root, or is empty. |
|
|
82
|
+
| `contract-invalid-rule` / `contract-duplicate-rule` | Rule shape, type or ids are wrong. |
|
|
83
|
+
| `contract-invalid-severity` / `contract-invalid-risk` | Enum values are outside the allowed set. |
|
|
84
|
+
| `contract-unknown-layer-ref` | A rule, boundary, store or risk weight points at a missing layer. |
|
|
85
|
+
| `contract-invalid-boundary` / `contract-invalid-store` / `contract-invalid-invariant` | Section entries are malformed. |
|
|
86
|
+
| `contract-unknown-key` | Unknown top-level key; reported as a warning and ignored. |
|
|
87
|
+
|
|
88
|
+
## system_model output
|
|
89
|
+
|
|
90
|
+
| Key | Content |
|
|
91
|
+
|---|---|
|
|
92
|
+
| `status` | `PASS`, `FAIL` (contract has blocking findings) or `UNKNOWN` (something still needs evidence). |
|
|
93
|
+
| `contract` | Path, presence, validity, version, layer and rule ids, findings. |
|
|
94
|
+
| `model.modules` | Repository-relative module id, language, line count and resolved layer. |
|
|
95
|
+
| `model.layers` | Declared layers with the modules that match them. |
|
|
96
|
+
| `model.imports` | `source`, `target`, `kind`, `line` and the raw specifier. |
|
|
97
|
+
| `model.entrypoints` | Files that look like executable entrypoints. |
|
|
98
|
+
| `model.tests` | Test files and the internal modules they import. |
|
|
99
|
+
| `model.configs` | Configuration files with a coarse kind. |
|
|
100
|
+
| `model.data_stores` | Declared stores (with owner and owner modules) and detected local database files. |
|
|
101
|
+
| `unknowns` | `contract-missing`, `contract-invalid`, `unassigned-module`, `layer-overlap`, `unresolved-import`. |
|
|
102
|
+
| `unverified_claims` | Verification levels that were not executed, with the reason. |
|
|
103
|
+
| `evidence` | Bounded, sorted evidence lines for the findings above. |
|
|
104
|
+
| `truncated` | True when the file limit cut the scan short. |
|
|
105
|
+
| `model_digest` | `sha256:` digest of the model, stable across runs on the same tree. |
|
|
106
|
+
|
|
107
|
+
Import kinds: `internal` (another source module), `internal-file` (a
|
|
108
|
+
repository file that is not source, such as `package.json`), `external`
|
|
109
|
+
(outside the repository) and `unresolved` (a relative path that does not
|
|
110
|
+
exist; also listed under `unknowns`).
|
|
111
|
+
|
|
112
|
+
`system_model` never asserts that a change is safe. Levels `L1` and above stay
|
|
113
|
+
listed in `unverified_claims` until a dedicated check runs them.
|
|
114
|
+
|
|
115
|
+
## architecture_review
|
|
116
|
+
|
|
117
|
+
`architecture_review` evaluates the same contract against the same system model and
|
|
118
|
+
returns every finding with file, line and severity. Per-item status is `PASS`,
|
|
119
|
+
`WARN` (advisory findings only), `FAIL` or `UNKNOWN`.
|
|
120
|
+
|
|
121
|
+
| Code | Meaning | Severity |
|
|
122
|
+
|---|---|---|
|
|
123
|
+
| `rule-forbid-dependency` | a module in the rule's `from` layer imports the forbidden `to` layer | the rule's severity |
|
|
124
|
+
| `rule-allow-dependency` | a module in the rule's `from` layer imports a layer outside `to` | the rule's severity |
|
|
125
|
+
| `boundary-visibility` | a module imports a protected boundary it may not reach | `high` for `private`, `medium` for `internal` |
|
|
126
|
+
| `data-ownership-mismatch` | a module inside the store paths is not in the owner layer | `medium` |
|
|
127
|
+
| `data-store-access-outside-owner` | a module outside the owner layer references the store path | `medium` |
|
|
128
|
+
|
|
129
|
+
Boundary visibility decides who may import the protected modules:
|
|
130
|
+
|
|
131
|
+
- `public` - any layer may import them; the declaration is recorded and never a finding.
|
|
132
|
+
- `internal` - only modules of the same layer may import them.
|
|
133
|
+
- `private` - only modules inside the boundary globs may import them.
|
|
134
|
+
|
|
135
|
+
Data ownership is checked in two ways: modules that live inside a store's paths but
|
|
136
|
+
belong to another layer, and modules outside the owner layer that reference the
|
|
137
|
+
store path literal (the part before the first wildcard).
|
|
138
|
+
|
|
139
|
+
Invariants are never reported as passing. `static`, `command` and `manual` checks
|
|
140
|
+
all land in `unverified_claims` with the reason, so a review can be `PASS` while
|
|
141
|
+
still stating what it did not verify.
|
|
142
|
+
|
|
143
|
+
The overall status is `FAIL` when the contract has blocking findings or any
|
|
144
|
+
violation reaches `critical` / `high`; `UNKNOWN` when the contract is missing or
|
|
145
|
+
anything stays undecided; otherwise `PASS` (advisory findings may still be listed).
|
|
146
|
+
|
|
147
|
+
### Unknown kinds
|
|
148
|
+
|
|
149
|
+
| Kind | Meaning |
|
|
150
|
+
|---|---|
|
|
151
|
+
| `contract-missing` / `contract-invalid` | no usable contract was found. |
|
|
152
|
+
| `model-truncated` | the file limit cut the scan short. |
|
|
153
|
+
| `unassigned-module` / `layer-overlap` | a module has no layer or matches several. |
|
|
154
|
+
| `unresolved-import` | a relative import does not resolve. |
|
|
155
|
+
| `rule-target-unassigned` | the rule's source layer matches, but the target module has no layer. |
|
|
156
|
+
| `boundary-no-modules` | the boundary globs match no module. |
|
|
157
|
+
| `boundary-importer-unassigned` | the importer has no layer, so visibility is undecided. |
|
|
158
|
+
|
|
159
|
+
## impact_analysis
|
|
160
|
+
|
|
161
|
+
`impact_analysis` starts from changed files, a unified diff or target symbols and
|
|
162
|
+
walks reverse dependencies (internal imports and repository-file imports) into a
|
|
163
|
+
bounded cone. Each node carries `depth`, `via`, `line`, `layer` and `is_test`.
|
|
164
|
+
|
|
165
|
+
Alongside the cone it reports direct consumers, affected layers, boundaries, data
|
|
166
|
+
stores, invariants scoped to the changed paths, tests mapped to the cone, the
|
|
167
|
+
architecture violations that fall inside the cone, rollback probes and an
|
|
168
|
+
explainable blast radius.
|
|
169
|
+
|
|
170
|
+
| Blast radius factor | Weight | When |
|
|
171
|
+
|---|---|---|
|
|
172
|
+
| `layer-risk` | 0-5 | highest declared risk weight or risk level of affected layers |
|
|
173
|
+
| `layer-count` | +1 / +2 | 3-4 layers / 5 or more layers are affected |
|
|
174
|
+
| `cone-depth` | +1 | the consumer chain reaches depth 2 or more |
|
|
175
|
+
| `public-boundary` | +1 | a public boundary is inside the cone |
|
|
176
|
+
| `data-store` | +1 per store, capped at 2 | declared or detected stores are touched |
|
|
177
|
+
| `architecture-violation` | +2 / +3 | a `high` / `critical` violation is inside the cone |
|
|
178
|
+
|
|
179
|
+
`level` maps the capped score (10 max): 9-10 `critical`, 6-8 `high`, 3-5 `medium`,
|
|
180
|
+
otherwise `low`. `score` is the raw sum of the weights and `reasons` lists every
|
|
181
|
+
factor with its detail, so the number can be recomputed by hand.
|
|
182
|
+
|
|
183
|
+
Rollback probes are derived, not invented: `data-store` (affected stores),
|
|
184
|
+
`entrypoint` (non-test entrypoints in the cone, capped at 5), `tests` (mapped test
|
|
185
|
+
files), `invariant` (declared `command` checks) and `model` (fallback when the cone
|
|
186
|
+
has no anchor). Test files that only guard on `__main__` are covered by the test
|
|
187
|
+
probe and are not reported as startup entrypoints.
|
|
188
|
+
|
|
189
|
+
## verification policy
|
|
190
|
+
|
|
191
|
+
`.yotta/verification.json` is optional. It declares the L2-L4 checks that
|
|
192
|
+
`verify_change` may execute, plus manual work that must stay unverified. It never
|
|
193
|
+
holds shell strings: `kind` must be one of the whitelisted runners already supported
|
|
194
|
+
by `run_checks`.
|
|
195
|
+
|
|
196
|
+
```json
|
|
197
|
+
{
|
|
198
|
+
"version": 1,
|
|
199
|
+
"checks": [
|
|
200
|
+
{
|
|
201
|
+
"id": "unit-tests",
|
|
202
|
+
"level": "L2",
|
|
203
|
+
"kind": "python-unittest",
|
|
204
|
+
"cwd": ".",
|
|
205
|
+
"timeout": 120,
|
|
206
|
+
"required": true,
|
|
207
|
+
"claim": "the unit suite passes"
|
|
208
|
+
}
|
|
209
|
+
],
|
|
210
|
+
"manual": [
|
|
211
|
+
{"id": "independent-review", "claim": "a second person reviews the change"}
|
|
212
|
+
]
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
| Field | Required | Notes |
|
|
217
|
+
|---|---|---|
|
|
218
|
+
| `version` | yes | Must be `1`. |
|
|
219
|
+
| `checks` | no | Array of L2-L4 checks. |
|
|
220
|
+
| `checks[].id` | yes | Unique slug matching the same id rule as the architecture contract. |
|
|
221
|
+
| `checks[].level` | yes | `L2`, `L3` or `L4`. |
|
|
222
|
+
| `checks[].kind` | yes | `python-unittest`, `pytest`, `python-compile`, `npm-test` or `npm-lint`. |
|
|
223
|
+
| `checks[].cwd` | no | Repository-relative directory, default `.`; absolute paths and `..` are rejected. |
|
|
224
|
+
| `checks[].timeout` | no | 1-600 seconds, default 120. |
|
|
225
|
+
| `checks[].required` | no | Default `true`; a required check that did not run keeps the overall result `UNKNOWN`. |
|
|
226
|
+
| `checks[].claim` | no | Human-readable claim recorded in the ledger. |
|
|
227
|
+
| `manual[].id` / `manual[].claim` | yes | Manual claims that are always reported as unverified. |
|
|
228
|
+
|
|
229
|
+
Verification findings use the same evidence shape as the architecture contract:
|
|
230
|
+
`code`, `severity`, `message`, JSON `pointer`, `path` and short `evidence`.
|
|
231
|
+
Blocking codes include `verification-invalid-json`,
|
|
232
|
+
`verification-unsupported-version`, `verification-invalid-id`,
|
|
233
|
+
`verification-duplicate-check`, `verification-invalid-level`,
|
|
234
|
+
`verification-invalid-kind`, `verification-invalid-cwd`,
|
|
235
|
+
`verification-invalid-timeout` and `verification-invalid-manual`.
|
|
236
|
+
|
|
237
|
+
`verify_change` runs L0/L1 in-process. L2-L4 execute only when the caller passes
|
|
238
|
+
`allow_execute=true`; L5 is always manual. A `PASS` means every required claim has
|
|
239
|
+
evidence. Unrun or manual claims remain in `unverified_claims` and are never written
|
|
240
|
+
as passing.
|
|
241
|
+
|
|
242
|
+
## Command line
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
python scripts/dev_engine.py system-model .
|
|
246
|
+
python scripts/dev_engine.py system-model . --contract config/architecture.json
|
|
247
|
+
python scripts/dev_engine.py architecture-review .
|
|
248
|
+
python scripts/dev_engine.py impact-analysis . --changed src/core/store.py
|
|
249
|
+
python scripts/dev_engine.py impact-analysis . --diff-file change.patch --depth 2
|
|
250
|
+
python scripts/dev_engine.py impact-analysis . --symbol save
|
|
251
|
+
python scripts/dev_engine.py verify-change . --changed src/core/store.py
|
|
252
|
+
python scripts/dev_engine.py verify-change . --changed src/core/store.py --level L2 --allow-execute
|
|
253
|
+
python scripts/dev_engine.py self-test .
|
|
254
|
+
python scripts/dev_engine.py adapter . --action list
|
|
255
|
+
python scripts/dev_engine.py adapter . --action run --adapter import-linter --allow-execute
|
|
256
|
+
```
|