feat: faqi - 来源限定实现初审与158资源分流 (#113)

* feat: faqi - 声明来源初审维护依赖

* feat: faqi - 落盘来源限定实现初审与资源分流

以唯一本体及原资源YAML为语义和事实源,新增19个实现选区初审、13入口、158原ID分流与只读清单。
补来源用途、入口归属、严格输入、生成所有权及宽表预算验证;父仓库来源绑定已发布的同树修订。

Docs sync: 根README/AGENTS及metadata/scripts/tools所属文档、Make目标同步。
验证:相关5组通过;功法协议7组与总表4组通过;本轮make test一次exit2,既有Mathing镜像360/355及digest不符。
不新增本体节点、功法评级、独立批准、运行/效果/许可事实;不执行被审程序。
This commit is contained in:
tradecatlabs
2026-10-09 19:35:19 +08:00
committed by GitHub
parent 0a7fdf4ca5
commit fe16b4c563
15 changed files with 3015 additions and 5 deletions
+13 -3
View File
@@ -9,7 +9,7 @@
### 允许的操作
- 读取、修改顶层文档:`README.md`、`AGENTS.md`、`CONTRIBUTING.md` 等
- 读取、修改 `docs/`、`prompts/`、`skills/`、`tools/config/`、`tools/external/` 下的文档与代码
- 执行 `make lint`、`make check-links`、`make check-details`、`make check-doc-structure`、`make check-directory-docs`、`make check-metadata`、`make check-gongfa`、`make test-gongfa`、`make sync-gongfa-catalog`、`make check-gongfa-catalog`、`make test-gongfa-catalog`、`make check-ai-citation`、`make check-research-raw`、`make check-source-facts`、`make check-wiki`、`make fetch-research-raw`、`make sync-doc-toc`、prompts-library 转换工具
- 执行 `make lint`、`make check-links`、`make check-details`、`make check-doc-structure`、`make check-directory-docs`、`make check-metadata`、`make check-gongfa`、`make test-gongfa`、`make sync-gongfa-catalog`、`make check-gongfa-catalog`、`make test-gongfa-catalog`、`make sync-faqi-catalog`、`make check-faqi-catalog`、`make test-faqi-catalog`、`make check-ai-citation`、`make check-research-raw`、`make check-source-facts`、`make check-wiki`、`make fetch-research-raw`、`make sync-doc-toc`、prompts-library 转换工具
- 新增/修改提示词、技能、文档
- 提交符合规范的 commit
@@ -74,6 +74,9 @@ git push origin develop
| `make sync-gongfa-catalog` | 从当前登记与仓内候选历史快照重建同一总表 | Python3.10+、scripts/requirements-gongfa.txt |
| `make check-gongfa-catalog` | 只读校验总表来源SHA、覆盖及Markdown/Excel一致性 | 同上;不写原文或评级 |
| `make test-gongfa-catalog` | 验证总表维护行为并保存隔离工件 | 同上;不证明功法效果 |
| `make sync-faqi-catalog` | 重建法器来源初审与资源分流的只读清单 | Python3.10+、Git、scripts/requirements-faqi.txt、固定submodule |
| `make check-faqi-catalog` | 只读校验法器JSON、来源Git/SHA、覆盖与清单一致性 | 同上;不执行工具或批准效果 |
| `make test-faqi-catalog` | 验证法器维护消费与拒绝行为,保留隔离工件 | 同上;不证明身份语义、许可或能力 |
| `make check-ai-citation` | 校验 llms 与 AI 引用语料路径、锚点和规范仓库身份 | Python 3 |
| `make check-external-resources` | 校验本地外部资源注册表字段、分类统计、ID 与链接形态 | Python 3、PyYAML |
| `make check-research-raw` | 校验研究域 raw 原始事实层、Git 工作树、来源清单和核心材料文件 | Python 3、Git |
@@ -86,7 +89,8 @@ git push origin develop
| `cd tools/prompts-library && python3 main.py` | 提示词格式转换 | `pip install -r tools/prompts-library/requirements.txt` |
### Python 依赖来源
- 功法检查独立依赖:`scripts/requirements-gongfa.txt`;在现有虚拟环境安装,其他脚本最低版本不变。
- 功法检查独立依赖:`scripts/requirements-gongfa.txt`;在现有虚拟环境安装。
- 法器维护独立依赖:`scripts/requirements-faqi.txt`;Python3.10+,复用jsonschema、PyYAML、tabulate及测试用markdown-it-py;其他脚本最低版本不变。
- prompts-library 主入口依赖:`tools/prompts-library/requirements.txt`
- prompts-library Google API / JSONL 辅助脚本依赖:`tools/prompts-library/scripts/requirements.txt`
@@ -203,6 +207,7 @@ git push origin develop
├── tools/ # 工具、本地配置与外部仓库
│ ├── README.md # tools 目录说明
│ ├── AGENTS.md # tools 目录规则
│ ├── faqi-catalog.md # 法器初审的只读生成消费者
│ ├── config/ # 工具与开发配置(含 Codex CLI)
│ ├── prompts-library/ # Excel ↔ Markdown 互转工具
│ ├── chat-vault/ # AI 聊天记录保存工具
@@ -220,6 +225,8 @@ git push origin develop
│ ├── taxonomy.yml # 分类体系
│ ├── glossary.yml # 术语表
│ ├── redirects.yml # 重命名/迁移映射
│ ├── faqi.json # 来源限定初审与资源逐ID分流
│ ├── faqi.schema.json # 初审声明边界,不复制类型树
│ └── gongfa/ # 功法登记、冻结来源、评级历史与单一总表(Markdown/Excel)
│
├── .github/ # GitHub 配置
@@ -251,6 +258,9 @@ git push origin develop
- `scripts/check-doc-structure.py` - docs README 标准块顺序、目录入口和重复锚点检查脚本,供 `make check-doc-structure` 与 CI 使用
- `scripts/check-directory-docs.py` - 仓库自有目录 README/AGENTS 覆盖检查脚本,供 `make check-directory-docs` 与 CI 使用
- `scripts/check-metadata.py` - metadata 路径与锚点检查脚本,供 `make check-metadata` 与 CI 使用
- `metadata/faqi.json` / `faqi.schema.json` - 法器来源限定初审与字段契约,引用已有类型;不承接资源原事实、第二本体树、账户/部署/运行或品级。
- `tools/faqi-catalog.md` - 从初审JSON与原资源YAML生成的只读清单;源码初审不等于完整包语义、独立审查、许可或效果证明。
- `scripts/sync-faqi-catalog.py` / `test-faqi-catalog.py` - 离线校验来源、入口、覆盖与视图,保留隔离工件;不执行被审程序或联网补证。
- `metadata/gongfa/registry.json` - 活跃功法登记、等级、规则、来源、内容版本、人工初评及正式评级历史的唯一可编辑数据源;类型语义仍归本体主文;新范围追加批次
- `metadata/gongfa/catalog.md` / `catalog.xlsx` - 同一全部功法总表的两种生成视图,聚合当前登记与已分类候选历史材料;不手改、不自动注册/去重/评级
- `metadata/gongfa/catalog-sources.json` - 仅索引仓内不可变候选快照的路径/SHA/范围;历史材料不是第二可编辑登记,不依赖个人目录或临时工件
@@ -399,7 +409,7 @@ make test
3. **Documentation Standard**: 用户文档使用中文;代码/文件名使用英文
4. **Skills**: 每个技能有独立的 `SKILL.md`
5. **Quality Gates**: `make test` 执行 Markdown lint、本地相对链接/锚点检查、折叠块结构检查、docs 结构检查、metadata 路径检查、AI 引用一致性检查、外部源事实镜像检查与现代企业架构 starter kit 检查;三个 `research/vibe-*` 目录按源事实镜像边界维护,仓库级格式检查跳过镜像内容。
功法登记/总表检查和相关测试纳入本地`make test`;GitHub Actions选定目标未改,不冒称新增远端覆盖。
功法登记/总表与法器初审检查、相关测试纳入本地`make test`;GitHub Actions选定目标未改,不冒称新增远端覆盖。
## Development Workflow
+14 -1
View File
@@ -3,6 +3,7 @@
.PHONY: help lint check-links check-details check-doc-structure check-directory-docs check-metadata check-gongfa test-gongfa check-ai-citation check-external-resources check-research-raw check-source-facts check-wiki fetch-research-raw sync-doc-toc build test clean clean-deps
.PHONY: sync-gongfa-catalog check-gongfa-catalog test-gongfa-catalog
.PHONY: sync-faqi-catalog check-faqi-catalog test-faqi-catalog
MARKDOWNLINT = npx --yes markdownlint-cli@0.48.0
@@ -22,6 +23,9 @@ help:
@echo " sync-gongfa-catalog - 从当前登记与仓内候选快照重建唯一总表"
@echo " check-gongfa-catalog - 只读校验总表覆盖、源摘要与Markdown/Excel一致性"
@echo " test-gongfa-catalog - 验证总表维护行为并保留隔离工件"
@echo " sync-faqi-catalog - 重建法器来源初审与资源分流的只读清单"
@echo " check-faqi-catalog - 校验法器JSON、Git/SHA、覆盖与只读清单"
@echo " test-faqi-catalog - 验证法器清单维护并保留隔离工件"
@echo " check-ai-citation - Check AI citation paths, anchors, and repository identity"
@echo " check-external-resources - Check local external resources registry"
@echo " check-research-raw - Check research raw fact snapshots and repository clones"
@@ -76,6 +80,15 @@ check-gongfa-catalog:
test-gongfa-catalog:
@python3 scripts/test-gongfa-catalog.py
sync-faqi-catalog:
@python3 scripts/sync-faqi-catalog.py --write
check-faqi-catalog:
@python3 scripts/sync-faqi-catalog.py --check
test-faqi-catalog:
@python3 scripts/test-faqi-catalog.py
check-ai-citation:
@echo "Checking AI citation paths, anchors, and repository identity..."
@python3 scripts/check-ai-citation.py
@@ -108,7 +121,7 @@ sync-doc-toc:
build:
@echo "No build step: this repository is a documentation and knowledge-base project."
test: lint check-links check-details check-doc-structure check-directory-docs check-metadata check-gongfa test-gongfa check-gongfa-catalog test-gongfa-catalog check-ai-citation check-external-resources check-research-raw check-source-facts
test: lint check-links check-details check-doc-structure check-directory-docs check-metadata check-gongfa test-gongfa check-gongfa-catalog test-gongfa-catalog check-faqi-catalog test-faqi-catalog check-ai-citation check-external-resources check-research-raw check-source-facts
@echo "Quality gates complete."
clean: clean-deps
+4
View File
@@ -58,6 +58,7 @@
逐条身份、内容版本、冻结来源与已有意见查看[功法登记](metadata/gongfa/README.md)及上方总表。
文集归并不等于全部内容已经逐条登记;已有初评也不等于正式效果验证。
程序内容及外部资源所指的初审见[法器清单](tools/faqi-catalog.md);源码核定不等于运行、许可或效果验证。
</details>
@@ -406,8 +407,11 @@ pip install -r tools/prompts-library/scripts/requirements.txt
│ ├── auto-tmux/ # tmux 自动化脚本、pane 巡检、救援与多终端协作
│ └── claude-official-skills/ # Claude 官方 skills 软链接入口
├── tools/ # 辅助工具、外部仓库与工具配置
│ └── faqi-catalog.md # 法器来源初审与外部资源分流的只读视图
├── scripts/ # 自动化脚本
├── metadata/ # 机器可读索引与限定子域数据
│ ├── faqi.json # 法器来源限定初审,不含品级或运行批准
│ ├── faqi.schema.json # 初审字段契约,复用唯一BFO树
│ └── gongfa/ # 功法登记、来源快照与单一总表(Markdown/Excel)
├── assets/ # 静态资产、外部资源注册表与 AI 引用资产
│
+11
View File
@@ -23,10 +23,21 @@
- 候选来源保留旧编者意见并明确未登记;不同限定内容和同名条目不自动合并或继承品级。
- 更新后运行`make sync-gongfa-catalog`、`make check-gongfa-catalog`及`make test-gongfa-catalog`,不手改生成视图。
## 法器来源初审
- `faqi.json`唯一拥有来源限定实现初审、选区用途与资源逐ID分流;字段契约为`faqi.schema.json`,不是正式身份/效果或运行登记。
- 类型只引用唯一本体;原资源ID、名称、地址、状态、验证状态和风险仍归`assets/external-resources/`分类YAML,不复制为第二登记。
- 程序内容与Skill规约、配置、模型、载体、副本、地址、账号、部署及一次运行按真实所指区分,不按目录/后缀、同名、多入口机械合并或新增身份。
- 来源用途是人工初审标注,Schema/后缀/SHA不能证明语义正确;独立审查、运行、效果、许可与品级声明固定未批准。
- 固定来源修订、原字节SHA与一基半开选区;新内容/版本重新核身份,不继承旧能力,不覆盖旧Git来源事实。
- `tools/faqi-catalog.md`只读生成;运行`make sync-faqi-catalog`、`make check-faqi-catalog`、`make test-faqi-catalog`,保留真实工件。
## 验证
```bash
make check-metadata
make check-faqi-catalog
make test-faqi-catalog
make check-gongfa
make test-gongfa
make test
+10 -1
View File
@@ -8,17 +8,26 @@
- `taxonomy.yml`:知识库分类、阅读路径和关键文档入口。
- `glossary.yml`:项目术语表。
- `redirects.yml`:已经不存在的历史路径到当前入口的映射,供维护和 AI 上下文使用。
- [faqi.json](faqi.json):来源限定的法器实现初审及外部资源逐ID分流的唯一可编辑判定;原资源事实仍归分类YAML。
- [faqi.schema.json](faqi.schema.json):首批程序内容初审的字段与声明边界,不复制本体父链或维护能力、许可、品级。
- [法器清单](../tools/faqi-catalog.md):上述初审与原资源事实的生成视图;不手改,不把候选自动晋升为已核程序。
- [gongfa/](gongfa/README.md):功法JSON核心、限定内容、四阶十二级、人工分类/初评、冻结来源与正式评级历史。
- [功法总表](gongfa/catalog.md)/[Excel完整视图](gongfa/catalog.xlsx):当前登记与已分类来源候选的同一总视图;聚合数量由生成器维护,不复制分批表。
## 使用
功法检查需要Python3.10+及`python3 -m pip install -r scripts/requirements-gongfa.txt`;其他脚本依赖不变。
功法检查需要Python3.10+及`python3 -m pip install -r scripts/requirements-gongfa.txt`。
法器维护需要Python3.10+、Git与`scripts/requirements-faqi.txt`;submodule须按父仓库固定指针初始化。
更新法器来源或实现内容须核身份/版本,保留旧Git修订及旧记录,不把同名、副本、声明版本或源码变化自动当能力升级。
独立语义、运行、效果和许可批准不在此初审格式内;未经相应证据,不修改声明边界。
修改目录、锚点、阅读路径或关键入口后,必须同步更新本目录,并运行:
```bash
make check-metadata
make sync-faqi-catalog
make check-faqi-catalog
make test-faqi-catalog
make check-gongfa
make test-gongfa
make sync-gongfa-catalog
+1219
View File
File diff suppressed because it is too large Load Diff
+92
View File
@@ -0,0 +1,92 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "法器来源限定初审与资源分流",
"description": "只引用唯一BFO树。记录程序内容而非运行/效果/许可批准;外部条目ID引用原YAML,不复制资源事实。",
"type": "object",
"additionalProperties": false,
"required": ["format_version", "kind", "reviewed_at", "source_revision", "ontology", "limits", "sources", "objects", "local_entries", "external_sources", "external_reviews", "resource_notes", "local_resource_links", "relations", "references"],
"properties": {
"format_version": {"const": 1},
"kind": {"const": "faqi-initial-source-review"},
"reviewed_at": {"type": "string", "maxLength": 40},
"source_revision": {"$ref": "#/$defs/revision"},
"ontology": {
"type": "object", "additionalProperties": false, "required": ["path", "sha256"],
"properties": {"path": {"const": "docs/gongfa/cultivation-ontology-taxonomy.md"}, "sha256": {"$ref": "#/$defs/sha256"}}
},
"limits": {
"type": "object", "additionalProperties": false,
"required": ["independent_review", "runtime_verified", "effectiveness_verified", "license_approved", "grades_assigned"],
"properties": {"independent_review": {"const": false}, "runtime_verified": {"const": false}, "effectiveness_verified": {"const": false}, "license_approved": {"const": false}, "grades_assigned": {"const": false}}
},
"sources": {"type": "array", "minItems": 1, "maxItems": 128, "items": {"$ref": "#/$defs/source"}},
"objects": {"type": "array", "minItems": 1, "maxItems": 512, "items": {"$ref": "#/$defs/tool"}},
"local_entries": {"type": "array", "minItems": 1, "maxItems": 128, "items": {"$ref": "#/$defs/local"}},
"external_sources": {
"type": "array", "minItems": 3, "maxItems": 3,
"items": {"type": "object", "additionalProperties": false, "required": ["path", "sha256"], "properties": {
"path": {"enum": ["assets/external-resources/tools-platforms.yml", "assets/external-resources/repo-rules-scaffolds.yml", "assets/external-resources/network-payment-services.yml"]},
"sha256": {"$ref": "#/$defs/sha256"}
}}
},
"external_reviews": {
"type": "array", "minItems": 1, "maxItems": 7,
"items": {"type": "object", "additionalProperties": false, "required": ["decision", "rationale", "resource_ids"], "properties": {
"decision": {"enum": ["software_candidate", "hosted_entry_candidate", "excluded_content", "excluded_model", "pending_identity", "related_local_source", "restricted_service_pending"]},
"rationale": {"$ref": "#/$defs/text"},
"resource_ids": {"type": "array", "minItems": 1, "maxItems": 4096, "uniqueItems": true, "items": {"$ref": "#/$defs/id"}}
}}
},
"resource_notes": {"type": "object", "maxProperties": 4096, "propertyNames": {"$ref": "#/$defs/id"}, "additionalProperties": {"$ref": "#/$defs/text"}},
"local_resource_links": {"type": "object", "maxProperties": 4096, "propertyNames": {"$ref": "#/$defs/id"}, "additionalProperties": {"$ref": "#/$defs/id"}},
"relations": {
"type": "array", "maxItems": 512,
"items": {"type": "object", "additionalProperties": false, "required": ["subject", "predicate", "target_label", "related_object_id", "evidence", "boundary"], "properties": {
"subject": {"$ref": "#/$defs/id"}, "predicate": {"const": "requires"}, "target_label": {"$ref": "#/$defs/text"},
"related_object_id": {"type": ["string", "null"]}, "evidence": {"$ref": "#/$defs/id"}, "boundary": {"$ref": "#/$defs/text"}
}}
},
"references": {
"type": "array", "maxItems": 128,
"items": {"type": "object", "additionalProperties": false, "required": ["path", "state", "target", "related_object_id", "boundary"], "properties": {
"path": {"$ref": "#/$defs/path"}, "state": {"enum": ["symlink", "empty-placeholder"]},
"target": {"type": ["string", "null"]}, "related_object_id": {"type": ["string", "null"]}, "boundary": {"$ref": "#/$defs/text"}
}}
}
},
"$defs": {
"id": {"type": "string", "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"},
"sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
"revision": {"type": "string", "pattern": "^[a-f0-9]{40}$"},
"text": {"type": "string", "minLength": 1, "maxLength": 2400, "pattern": "^[^\u0000-\u001f\u007f]+$"},
"path": {"type": "string", "minLength": 1, "maxLength": 240, "pattern": "^[A-Za-z0-9_./ -]+$"},
"ids": {"type": "array", "maxItems": 128, "uniqueItems": true, "items": {"$ref": "#/$defs/id"}},
"source": {
"type": "object", "additionalProperties": false, "required": ["id", "purpose", "path", "repository", "revision", "sha256", "lines", "selection_sha256"],
"properties": {
"id": {"$ref": "#/$defs/id"},
"purpose": {"enum": ["implementation", "support"], "description": "选区的人工初审用途,不凭后缀推断程序。支持来源未自动获准充当主实现。"},
"path": {"$ref": "#/$defs/path"},
"repository": {"enum": [".", "tools/external/tmux", "tools/external/.tmux", "tools/external/Skill_Seekers-development", "tools/external/claude-official-skills"]},
"revision": {"$ref": "#/$defs/revision"}, "sha256": {"$ref": "#/$defs/sha256"},
"lines": {"type": "array", "minItems": 2, "maxItems": 2, "items": {"type": "integer", "minimum": 1, "maximum": 100000}},
"selection_sha256": {"$ref": "#/$defs/sha256"}
}
},
"tool": {
"type": "object", "additionalProperties": false, "required": ["id", "name", "type_id", "implementation", "support", "boundary", "declared_version"],
"properties": {
"id": {"$ref": "#/$defs/id"}, "name": {"$ref": "#/$defs/text"}, "type_id": {"const": "software-artifact"},
"implementation": {"$ref": "#/$defs/id"}, "support": {"$ref": "#/$defs/ids"}, "boundary": {"$ref": "#/$defs/text"},
"declared_version": {"type": ["string", "null"], "maxLength": 80}
}
},
"local": {
"type": "object", "additionalProperties": false, "required": ["path", "objects", "sources", "boundary", "pending"],
"properties": {
"path": {"$ref": "#/$defs/path"}, "objects": {"$ref": "#/$defs/ids"}, "sources": {"$ref": "#/$defs/ids"},
"boundary": {"$ref": "#/$defs/text"}, "pending": {"type": "array", "maxItems": 32, "items": {"$ref": "#/$defs/text"}}
}
}
}
}
+9
View File
@@ -32,6 +32,15 @@
- `test-gongfa-catalog.py`保留输入、命令/日志和结果;检查来源绑定/表示一致性,不证明效果或独立语义批准。
- 注册库仍唯一拥有活跃登记/正式评级;候选历史快照只作来源事实,迁移入库后才考虑退役该来源视图。
## 法器初审维护
- `sync-faqi-catalog.py`复用jsonschema/PyYAML/tabulate,读取初审JSON与原资源YAML,只维护`tools/faqi-catalog.md`;不自动分类、联网、执行工具或写原登记。
- 字段、来源用途、入口/身份与输出边界变化先补真实行为测试;初审不是独立语义、许可证、部署/运行或效果证明,不套功法品级。
- 固定Git/submodule修订、完整字节SHA与一基半开选区;来源/输入/输出软链接、未知字段、漏/重资源、越界/超限与并行漂移非零失败。
- 生成标记、输入/目标前后复核与单文件原子替换只保护本工具输出,不声称多文件事务或跨写者强CAS;失败保留工件,不清理别人文件。
- `test-faqi-catalog.py`复用MarkdownIt消费真实Markdown,独立字面量和失败输入核原样文字、安全隔离与所有权;不mock核心或运行被审工具。
- 依赖独立声明于`requirements-faqi.txt`;本地`make test`纳入维护验证,CI选定目标未改,不冒称远端覆盖。
## 验证
```bash
+35
View File
@@ -14,6 +14,9 @@
- `sync-gongfa-catalog.py`:当前登记+仓内冻结候选的单一总表生成与只读检查,不改品级、主登记或功法身份。
- `test-gongfa-catalog.py`:总表覆盖、版本/纠正范围、离线可移植性、Excel文本安全与陈旧视图的行为测试。
- `requirements-gongfa.txt`:功法检查和总表脚本的独立依赖清单,Python3.10+,不影响其他脚本。
- `sync-faqi-catalog.py`:法器来源初审JSON、固定Git/SHA/选区、身份/入口及资源覆盖校验与只读清单生成,不推断类型或执行被审工具。
- `test-faqi-catalog.py`:真实CLI消费与拒绝行为、代码表保真/注入隔离、重复生成及输出所有权验证;保留输入、退出码和JUnit。
- `requirements-faqi.txt`:法器维护与测试的固定依赖,复用已安装成熟库,不安装被审工具依赖。
- `check-ai-citation.py`:`llms.txt` 与 AI 引用语料的路径、锚点和规范仓库身份检查脚本。
- `check-external-resources.py`:本地外部资源注册表字段、分类统计、ID 与链接形态检查脚本。
- `check-research-raw.py`:研究域 raw 原始事实层、Git 工作树、来源清单和核心材料文件检查脚本。
@@ -56,3 +59,35 @@ make test-gongfa-catalog
`test-gongfa-catalog.py --artifacts /tmp/新的目录`保留隔离输入、CLI命令/日志及结果,拒绝覆盖已有证据目录。
候选快照记录之前的编者意见,不作为第二可编辑登记;正文、分类、品级或选区更新必须另存来源版本。
内容新版本不继承旧初评;显式纠正链选有效意见,不同情境仍并列保留,不按最新时间或最高档裁决。
## 法器来源初审清单
```bash
python3 -m pip install -r scripts/requirements-faqi.txt
make sync-faqi-catalog
make check-faqi-catalog
make test-faqi-catalog
```
维护需Python3.10+、Git及按当前父仓库固定指针初始化的submodule;集成测试使用Linux/WSL的`resource`限制异常宽表内存。
字段判定只编辑[metadata/faqi.json](../metadata/faqi.json),原名称、ID、风险和验证状态只读自原资源YAML;
类型只引用本体,输出[tools/faqi-catalog.md](../tools/faqi-catalog.md)不承接正文或第二本体树。
依赖来源及最低/固定版本:
- [jsonschema 4.26.0](https://pypi.org/project/jsonschema/4.26.0/):复用Draft2020-12字段校验,不自研Schema解释器。
- [PyYAML 6.0.3](https://pypi.org/project/PyYAML/6.0.3/):安全读取原资源YAML,拒重复键和别名展开。
- [tabulate 0.9.0](https://pypi.org/project/tabulate/0.9.0/):生成可复制的psql原样代码表。
- [markdown-it-py 3.0.0](https://pypi.org/project/markdown-it-py/3.0.0/):测试用真实Markdown解析验证转义边界,不mock维护核心。
默认/`--check`只读;`--write`仅写带生成标记的视图,先校验全部来源、上限与输入/目标摘要,再单文件原子替换。
文件/生成视图输入上限2 MiB,最多128来源、512实现、每分类4096资源行;固定Git命令预算20秒。
格式化前保守核代码表列宽×行数预算,不让一条长名称扩大整表、耗尽内存后才拒绝;不截断原文。
原文选区按一基半开区间和原UTF-8字节SHA核,不清洗或执行HTML/代码/提示词。
首批父仓库修订绑定已发布主线的历史提交,不依赖本地未推送提交;历史Git对象须可读,浅克隆不保证来源可回放。
重复内容身份、入口错配、缺失资源ID、越界/凭据/日志/数据库来源、未知字段与NaN均非零失败。
路径/来源/指针变更先重新核证;并行修改采用前后摘要及指针复核,不声称多文件事务或跨写者强CAS。
`test-faqi-catalog.py --artifacts /tmp/新的目录`保存真实输入、命令/退出码、日志、result.json和JUnit,拒绝覆盖已有证据目录。
仅此初审与维护测试纳入本地`make test`;GitHub Actions选定目标未改,不声称远端运行了法器测试。
程序源码存在、Schema及消费通过不证明语义真、效果、安全、许可证或独立审查;不按功法十二级给法器赋级。
+6
View File
@@ -0,0 +1,6 @@
# 法器离线初审与只读视图;复用现有成熟依赖,不安装/运行被审工具。
jsonschema==4.26.0
PyYAML==6.0.3
tabulate==0.9.0
# 测试复用真实Markdown解析器,验证代码表保真与注入隔离。
markdown-it-py==3.0.0
+383
View File
@@ -0,0 +1,383 @@
#!/usr/bin/env python3
"""校验来源限定的法器初审,生成单一只读视图;不推断类别或执行被审工具。"""
import argparse
import configparser
import datetime
import hashlib
import html
import json
import os
from pathlib import Path, PurePosixPath
import re
import subprocess
import sys
import tempfile
from urllib.parse import quote, urlsplit
import jsonschema
from tabulate import tabulate
import yaml
ROOT = Path(__file__).resolve().parents[1]
MARKER = "<!-- generated: sync-faqi-catalog.py -->"
MAX_BYTES = 2 * 1024 * 1024
DECISIONS = {
"software_candidate": "软件实现候选",
"hosted_entry_candidate": "托管入口候选",
"excluded_content": "排除:资料/规约内容",
"excluded_model": "排除:模型名称所指",
"pending_identity": "待核:对象身份",
"related_local_source": "关联已审本地来源",
"restricted_service_pending": "待核:受限服务所指",
}
class ContractError(Exception):
pass
def require(condition, message):
if not condition:
raise ContractError(message)
def digest(raw):
return hashlib.sha256(raw).hexdigest()
def bounded_read(path):
require(path.is_file(), f"输入文件不存在:{path}")
with path.open("rb") as stream:
raw = stream.read(MAX_BYTES + 1)
require(len(raw) <= MAX_BYTES, f"输入超过2 MiB:{path}")
return raw
def unique_pairs(pairs):
result = {}
for key, value in pairs:
require(key not in result, "JSON含重复键")
result[key] = value
return result
def invalid_constant(_):
raise ContractError("不是严格JSON数值")
def load_json(raw):
return json.loads(raw.decode("utf-8"), object_pairs_hook=unique_pairs, parse_constant=invalid_constant)
def safe_path(root, value, *, alias=False):
parts = PurePosixPath(value)
require(not parts.is_absolute() and ".." not in parts.parts and "\\" not in value,
"来源路径越界")
require(parts.as_posix() == value and parts.parts, "来源路径不是规范相对路径")
lowered = [p.lower() for p in parts.parts]
require(not any(p in {".git", ".history", ".venv", "output", "logs", "node_modules"} or
p.startswith(".env") or p in {"auth.json", "credentials.json", "credentials.toml"} or
p.endswith((".db", ".sqlite", ".sqlite3", ".pem", ".key")) for p in lowered),
"拒绝凭据、历史、日志或数据库来源")
path = root / value
for parent in [path, *path.parents]:
if parent == root:
break
require(not parent.is_symlink() or (alias and parent == path), "来源含未授权软链接")
require(path.resolve().is_relative_to(root), "来源软链接越界")
return path
def git_output(repository, *args):
process = subprocess.run(["git", "--no-replace-objects", "-C", str(repository), *args],
capture_output=True, timeout=20)
require(process.returncode == 0, "固定Git来源不可读取;请核对修订与submodule初始化")
return process.stdout
def git_blob(repository, revision, path):
spec = revision + ":" + path
size = int(git_output(repository, "cat-file", "-s", spec).strip())
require(size <= MAX_BYTES, "Git来源超过2 MiB")
return git_output(repository, "show", spec)
class UniqueYamlLoader(yaml.SafeLoader):
def compose_node(self, parent, index):
require(not self.check_event(yaml.AliasEvent), "资源YAML不接受别名展开")
return super().compose_node(parent, index)
def construct_mapping(self, node, deep=False):
result = {}
for key_node, value_node in node.value:
key = self.construct_object(key_node, deep=deep)
require(isinstance(key, str) and key not in result, "资源YAML含非文本或重复键")
result[key] = self.construct_object(value_node, deep=deep)
return result
def indexed(items, key, label):
values = {item[key]: item for item in items}
require(len(values) == len(items), f"{label}重复")
return values
def validate(root, input_path):
raw = bounded_read(input_path)
data = load_json(raw)
schema_path = safe_path(root, "metadata/faqi.schema.json")
schema_raw = bounded_read(schema_path)
schema = load_json(schema_raw)
validator = jsonschema.Draft202012Validator(schema)
errors = list(validator.iter_errors(data))
require(not errors, "法器JSON不符合Schema,定位:" + ("/".join(map(str, errors[0].absolute_path)) if errors else ""))
time = datetime.datetime.fromisoformat(data["reviewed_at"])
require(time.tzinfo is not None, "初审时间须含时区")
bindings = {input_path: digest(raw), schema_path: digest(schema_raw)}
ontology_path = safe_path(root, data["ontology"]["path"])
ontology_raw = bounded_read(ontology_path)
require(digest(ontology_raw) == data["ontology"]["sha256"], "本体来源SHA不符,不能静默沿用初审")
bindings[ontology_path] = digest(ontology_raw)
ontology = ontology_raw.decode("utf-8")
type_ids = set(re.findall(r"^\| `([^`]+)` \|", ontology, re.MULTILINE))
sources = indexed(data["sources"], "id", "来源ID")
objects = indexed(data["objects"], "id", "法器实现ID")
footprints = set()
for source in sources.values():
path = safe_path(root, source["path"])
require(source["path"].startswith(("tools/", "skills/")), "实现/说明来源不属于批准工具范围")
require(path.suffix in {".py", ".sh", ".c", ".lua", ".html", ".md", ".toml", ".conf"} or path.name == "README",
"来源不是公开代码、配置或说明")
repository = root if source["repository"] == "." else safe_path(root, source["repository"])
require(path.is_relative_to(repository), "来源文件不属于声明仓库")
relative = path.relative_to(repository).as_posix()
if repository == root:
require(source["revision"] == data["source_revision"], "父仓库来源修订错配")
else:
tree = git_output(root, "ls-tree", data["source_revision"], "--", source["repository"]).decode().split()
require(len(tree) >= 3 and tree[0] == "160000" and tree[2] == source["revision"], "submodule来源与父仓库指针错配")
require(git_output(repository, "rev-parse", "HEAD").decode().strip() == source["revision"], "submodule工作树修订漂移")
body = git_blob(repository, source["revision"], relative)
current = bounded_read(path)
require(body == current and digest(body) == source["sha256"], f"来源文件/SHA漂移:{source['id']}")
lines = body.decode("utf-8").splitlines(keepends=True)
start, end = source["lines"]
require(1 <= start < end <= len(lines) + 1, f"来源半开选区越界:{source['id']}")
selected = "".join(lines[start - 1:end - 1]).encode("utf-8")
require(digest(selected) == source["selection_sha256"], f"选区SHA不符:{source['id']}")
bindings[path] = digest(current)
for obj in objects.values():
require(obj["type_id"] in type_ids, "引用了不存在的本体类")
require(obj["implementation"] in sources and set(obj["support"]) <= sources.keys(), "法器引用了未知来源")
source = sources[obj["implementation"]]
require(source["purpose"] == "implementation", "实现来源未被初审标注为程序实现选区")
# 首批以独立程序/脚本/页面内容为单位;CLI/MCP和副本不据入口重复登记。
footprint = source["sha256"]
require(footprint not in footprints, "同一程序内容被复制为多个身份")
footprints.add(footprint)
local = indexed(data["local_entries"], "path", "本地入口")
covered = set()
for entry in local.values():
require(safe_path(root, entry["path"]).is_dir(), "本地入口不是现存目录")
require(set(entry["objects"]) <= objects.keys() and set(entry["sources"]) <= sources.keys(), "本地入口引用未知对象/来源")
for oid in entry["objects"]:
require(sources[objects[oid]["implementation"]]["path"].startswith(entry["path"] + "/"), "实现与本地入口所指错配")
covered.update(entry["objects"])
require(covered == objects.keys(), "法器实现未被本地入口覆盖")
resources = {}
external_sources = indexed(data["external_sources"], "path", "外部来源")
for value in external_sources.values():
path = safe_path(root, value["path"])
body = bounded_read(path)
require(digest(body) == value["sha256"], "外部资源源SHA漂移;必须按新原文重审")
content = yaml.load(body.decode("utf-8"), Loader=UniqueYamlLoader)
require(isinstance(content, dict) and isinstance(content.get("resources"), list), "资源来源形态错误")
require(len(content["resources"]) <= 4096, "资源数量超过4096")
for index, row in enumerate(content["resources"]):
require(isinstance(row, dict) and isinstance(row.get("id"), str), "资源行缺少ID")
require(row["id"] not in resources, "原资源ID重复")
resources[row["id"]] = {"row": row, "defaults": content.get("defaults", {}), "source": value["path"], "selector": f"/resources/{index}"}
bindings[path] = digest(body)
decisions = {}
for review in data["external_reviews"]:
for rid in review["resource_ids"]:
require(rid not in decisions, "同一外部资源被多次分流")
decisions[rid] = review
require(decisions.keys() == resources.keys(), "外部资源覆盖缺失或含未批准新增ID")
require(set(data["resource_notes"]) <= resources.keys(), "附注引用未知资源")
related = {rid for rid, review in decisions.items() if review["decision"] == "related_local_source"}
require(data["local_resource_links"].keys() == related, "本地来源关联缺失或范围扩大")
modules_path = safe_path(root, ".gitmodules")
module_bytes = bounded_read(modules_path)
require(module_bytes == git_blob(root, data["source_revision"], ".gitmodules"), "submodule注册文件漂移")
bindings[modules_path] = digest(module_bytes)
config = configparser.RawConfigParser(); config.read_string(module_bytes.decode("utf-8"))
module_urls = {config[s]["path"]: config[s]["url"] for s in config.sections()}
for rid, oid in data["local_resource_links"].items():
require(oid in objects, "来源关联引用未知法器")
source = sources[objects[oid]["implementation"]]
require(source["repository"] in module_urls, "来源关联不是已绑定的submodule")
url = resources[rid]["row"].get("link", {}).get("url", "")
def repo_url(value):
parsed = urlsplit(value)
require(parsed.scheme == "https" and parsed.hostname == "github.com" and not parsed.username and not parsed.query and not parsed.fragment,
"来源关联不是规范GitHub仓库地址")
return parsed.path.rstrip("/").removesuffix(".git").lower()
require(repo_url(url) == repo_url(module_urls[source["repository"]]), "资源行与本地仓库不是同一来源")
for relation in data["relations"]:
require(relation["subject"] in objects and relation["evidence"] in sources, "依赖关系缺对象/来源")
require(relation["related_object_id"] is None or relation["related_object_id"] in objects, "依赖参照未知对象")
require("`requires`" in ontology, "依赖谓词不在本体现有关系词表")
indexed(data["references"], "path", "引用入口")
for reference in data["references"]:
path = safe_path(root, reference["path"], alias=True)
original = git_blob(root, data["source_revision"], reference["path"])
if reference["state"] == "empty-placeholder":
require(not path.is_symlink() and bounded_read(path) == original == b"" and reference["target"] is None and reference["related_object_id"] is None,
"空占位文件被伪称来源链接")
bindings[path] = digest(b"")
else:
require(path.is_symlink() and os.readlink(path) == reference["target"] and original.decode("utf-8") == reference["target"], "软链接状态或目标漂移")
require(reference["related_object_id"] is None or reference["related_object_id"] in objects, "引用入口关联未知对象")
# 符号链接绑定的是路径,不是目录内容或另一件软件身份。
return data, sources, objects, resources, decisions, bindings
def text(value):
escaped = html.escape(str(value), quote=False)
return escaped.replace("`", "&#96;").replace("[", "&#91;").replace("]", "&#93;").replace("|", "&#124;")
def table(rows, headers):
# 固定宽度表会把一个长名称扩散到每行;先用UTF-8字节做保守预算,避免格式化后才发现膨胀。
widths = [len(str(h).encode("utf-8")) for h in headers]
height = 5
for row in rows:
height += max([1, *[len(str(value).splitlines()) for value in row]])
for index, value in enumerate(row):
widths[index] = max(widths[index], len(str(value).encode("utf-8")))
require((sum(widths) + 3 * len(headers) + 1) * height + 20 <= MAX_BYTES,
"代码表列宽与行数超过2 MiB预算,不能静默截断")
# 原生代码表会隔离HTML/Markdown;在这里转义会把 >= 等原文字面改坏。
return "```text\n" + tabulate(rows, headers=headers, tablefmt="psql", disable_numparse=True) + "\n```\n"
def render(data, sources, objects, resources, decisions):
out = [MARKER, "# 法器清单与资源初审", "",
"来源限定的静态初审,不是效果、可用性、许可证或独立语义批准。仅修改[法器初审数据](../metadata/faqi.json),不手改此视图。",
"类型与关系复用[唯一本体](../docs/gongfa/cultivation-ontology-taxonomy.md#唯一分类树),不维护第二主树,不套功法四阶十二级。", "",
"## 总体概览", "", f"初审时间:{data['reviewed_at']};父仓库来源修订:`{data['source_revision']}`。",
f"本地入口 {len(data['local_entries'])} 个,来源限定法器实现初审 {len(objects)} 条,外部资源逐行分流 {len(resources)} 条;不是按目录或资源行计算独立产品数。",
"程序源码修订和下表声明版本不等于已核发布版、已安装版本或已部署入口;同内容副本、多入口不重复登记。", "",
table([[DECISIONS[r['decision']], len(r['resource_ids'])] for r in data['external_reviews']], ["外部分流状态", "资源行数"]),
"## 本地来源限定法器", "",
"以下记录只指选定来源的程序指令内容;不同内容实现是否属于同一产品/派生版本,仍须另有演化证据。用途不作为主父。", "",
table([[o['id'], o['name'], o['type_id'], o['implementation']] for o in objects.values()], ["实现ID", "名称", "已有类型ID", "实现来源ID"])]
for obj in objects.values():
source = sources[obj['implementation']]
out += [f"### {obj['id']}", "", f"{text(obj['name'])}:{text(obj['boundary'])}",
f"实现来源 `{source['id']}`,佐证来源 `{', '.join(obj['support'])}`;声明版本:{text(obj['declared_version'] or '未核/无明确发布版本声明')}。", ""]
out += [f"## {len(data['local_entries'])}个本地入口的分离结果", ""]
for entry in data['local_entries']:
out += [f"### {text(entry['path'])}", "", f"纳入实现:`{', '.join(entry['objects']) or '无'}`。{text(entry['boundary'])}",
f"佐证来源:`{', '.join(entry['sources'])}`。"]
out += [f"- 待核:{text(p)}" for p in entry['pending']]
out += [""]
out += ["## 静态依赖与引用入口", "",
"`requires`只记录源码/说明声明的依赖;相关本地实现ID是源码参照,不证明运行时加载了该版本,更不证明实际使用、符合协议或已获权限。", "",
table([[r['subject'], r['predicate'], r['target_label'], r['related_object_id'] or '未知', r['evidence']] for r in data['relations']], ["主体实现", "谓词", "依赖所指", "相关来源实现", "证据ID"])]
for r in data['relations']:
out += [f"- `{r['subject']}`:{text(r['boundary'])}"]
out += [""]
for r in data['references']:
out += [f"- `{r['path']}`:`{r['state']}`;目标 `{r['target'] or '无'}`。{text(r['boundary'])}"]
out += ["", f"## {len(resources)}条外部资源逐行分流", "",
"名称、原ID、状态、验证状态与风险只读自原YAML。`active`与`imported-unverified`不证明可用、许可或推荐。",
"未核远端实现/版本的候选不登记为本地法器;模型名称所指与聊天平台分开。资料排除仅针对当前条目所指,不断言整个仓库没有程序。",
"同名或同网址只产生重复入口核查线索,不自动合并软件身份;网络/金融分流不授权开户、交易、账户读取或实际网络操作。", ""]
for group in data['external_reviews']:
out += [f"### {DECISIONS[group['decision']]}", "", text(group['rationale']), ""]
rows = []
for rid in group['resource_ids']:
source = resources[rid]; row = source['row']
rows.append([rid, row['name'], row['status'], row.get('verification_status', source['defaults'].get('verification_status', 'unknown')), ', '.join(row.get('risk_flags', [])) or '无'])
out += [table(rows, ["原资源ID", "名称", "原状态", "原验证状态", "原风险标记"])]
for rid in group['resource_ids']:
source = resources[rid]
details = data['resource_notes'].get(rid, '')
related = data['local_resource_links'].get(rid)
if related:
details += f" 对应本地来源参照 {related};不把未版本化的仓库URL等同该固定源码版本。"
out += [f"- `{rid}`:[原始资源行](../{source['source']}) `{source['selector']}`。{text(details)}"]
out += [""]
out += ["## 来源与选区", "", "选区是一基半开区间 `[start,end)`;SHA-256对应固定Git blob的完整字节与选区原字节,不归一化或复制源码。",
"校验还核当前文件字节及submodule指针;源码存在和指针匹配不等于完整仓库语义、许可证或能力已审。", ""]
for source in sources.values():
out += [f"### {source['id']}", "", f"[来源文件](../{quote(source['path'], safe='/.-_')}):`{source['path']}`。",
f"- 初审用途:`{source['purpose']}`(人工标注,不是自动语义批准)。",
f"- 仓库:`{source['repository']}`;Git修订:`{source['revision']}`。",
f"- 完整文件SHA-256:`{source['sha256']}`。",
f"- 选区:`[{source['lines'][0]},{source['lines'][1]})`;SHA-256:`{source['selection_sha256']}`。", ""]
out += ["## 维护与未完成事项", "", "```bash", "make sync-faqi-catalog", "make check-faqi-catalog", "make test-faqi-catalog", "```", "",
"检查复用jsonschema/PyYAML,表格复用tabulate;来源、ID、选区、范围或只读视图漂移均失败,不联网补证或静默升级。",
"此初审不维护等级、账户、设备、部署或运行证据。独立语义审查、运行/效果/许可核验、产品同一/版本演化及未逐模块展开的复合包仍待核。", ""]
return "\n".join(out).encode("utf-8")
def unchanged(bindings, root, data):
for path, expected in bindings.items():
require(digest(bounded_read(path)) == expected, "输入被并行修改;不提交旧视图")
for ref in data["references"]:
path = safe_path(root, ref["path"], alias=True)
if ref["state"] == "symlink":
require(path.is_symlink() and os.readlink(path) == ref["target"], "来源链接被并行修改")
repositories = {s["repository"]: s["revision"] for s in data["sources"] if s["repository"] != "."}
for repository, revision in repositories.items():
index = git_output(root, "ls-files", "--stage", "--", repository).decode().split()
require(len(index) >= 3 and index[0] == "160000" and index[1] == revision, "当前submodule索引指针漂移")
require(git_output(root / repository, "rev-parse", "HEAD").decode().strip() == revision, "submodule修订被并行修改")
def main():
parser = argparse.ArgumentParser(description="法器初审来源校验与只读视图维护,不执行被审程序")
parser.add_argument("--root", type=Path, default=ROOT)
parser.add_argument("--input", type=Path)
parser.add_argument("--view", type=Path)
mode = parser.add_mutually_exclusive_group()
mode.add_argument("--check", action="store_true")
mode.add_argument("--write", action="store_true")
args = parser.parse_args()
root = args.root.resolve()
input_path = args.input.absolute() if args.input else root / "metadata/faqi.json"
view = args.view.absolute() if args.view else root / "tools/faqi-catalog.md"
try:
require(not input_path.is_symlink() and input_path.parent.resolve() == input_path.parent and
not view.is_symlink() and view.parent.resolve() == view.parent, "输入/输出含软链接")
data, sources, objects, resources, decisions, bindings = validate(root, input_path)
rendered = render(data, sources, objects, resources, decisions)
require(len(rendered) <= MAX_BYTES, "生成视图超过2 MiB")
before = bounded_read(view) if view.exists() else None
unchanged(bindings, root, data)
if args.write:
require(before is None or before.startswith(MARKER.encode()), "拒绝覆盖非本工具生成的文件")
view.parent.mkdir(parents=True, exist_ok=True)
with tempfile.NamedTemporaryFile(dir=view.parent, prefix=".faqi-catalog-", suffix=".tmp", delete=False) as stream:
temporary = Path(stream.name); stream.write(rendered); stream.flush(); os.fsync(stream.fileno())
unchanged(bindings, root, data)
require(not view.is_symlink() and (bounded_read(view) if view.exists() else None) == before, "目标被并行修改;保留临时文件,不覆盖")
os.replace(temporary, view)
else:
require(before == rendered, "法器视图缺失/陈旧或手改;运行make sync-faqi-catalog")
unchanged(bindings, root, data)
print(json.dumps({"status": "valid-initial-source-review", "objects": len(objects), "local_entries": len(data['local_entries']),
"external_resources": len(resources), "view_sha256": digest(rendered), **data['limits']}, ensure_ascii=False))
return 0
except (ContractError, OSError, ValueError, KeyError, TypeError, RecursionError, subprocess.TimeoutExpired, yaml.YAMLError, jsonschema.exceptions.SchemaError) as error:
# 不回显输入对象或Git异常中的潜在敏感值;错误只定位契约位置。
message = str(error) if isinstance(error, ContractError) else type(error).__name__
print("FAQI_CATALOG_ERRORS\n" + message, file=sys.stderr)
return 1
if __name__ == "__main__":
sys.exit(main())
+237
View File
@@ -0,0 +1,237 @@
#!/usr/bin/env python3
"""以真实离线CLI消费首批法器清单;保留输入、输出和JUnit,不执行被审工具。"""
import argparse
import copy
import hashlib
import json
import os
import resource
from pathlib import Path
import subprocess
import sys
import tempfile
import unittest
import xml.etree.ElementTree as ET
from markdown_it import MarkdownIt
ROOT = Path(__file__).resolve().parents[1]
ARTIFACTS = None
class FaqiCatalogTest(unittest.TestCase):
def invoke(self, label, *args, memory_limit=None):
command = [sys.executable, str(ROOT / "scripts/sync-faqi-catalog.py"), *map(str, args)]
def bound_memory():
resource.setrlimit(resource.RLIMIT_AS, (memory_limit, memory_limit))
result = subprocess.run(command, cwd=ROOT, capture_output=True, timeout=45,
preexec_fn=bound_memory if memory_limit else None)
(ARTIFACTS / (label + ".json")).write_text(json.dumps({
"command": command, "exit_code": result.returncode,
"stdout": result.stdout.decode(), "stderr": result.stderr.decode(),
}, ensure_ascii=False, indent=2), encoding="utf-8")
return result
def input_copy(self, label, data):
path = ARTIFACTS / (label + "-input.json")
path.write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
return path
def test_current_source_review_is_consumable(self):
result = self.invoke("current", "--check")
self.assertEqual(0, result.returncode, result.stderr.decode())
report = json.loads(result.stdout)
self.assertEqual((19, 13, 158), (
report["objects"], report["local_entries"], report["external_resources"]))
self.assertFalse(report["independent_review"])
self.assertFalse(report["runtime_verified"])
data = json.loads((ROOT / "metadata/faqi.json").read_text(encoding="utf-8"))
# 首批父仓库来源必须在已发布主线可达,不能依赖仅本地存在的提交。
published = subprocess.run(["git", "merge-base", "--is-ancestor", data["source_revision"], "refs/remotes/origin/develop"], cwd=ROOT, capture_output=True, timeout=20)
self.assertEqual(0, published.returncode, "父仓库来源不在已发布主线历史可达")
objects = {o["id"]: o for o in data["objects"]}
purposes = {s["id"]: s.get("purpose") for s in data["sources"]}
# 用途来自实际读过的实现/说明选区,而非由对象引用反推。
self.assertEqual("support", purposes["S01"])
for sid in ("S02", "S04", "S06", "S08", "S09", "S10", "S12", "S16", "S18", "S21", "S23", "S25", "S26", "S27", "S28", "S29", "S32", "S34", "S36"):
self.assertEqual("implementation", purposes[sid])
# 期望来自实现选区与本体:可执行配置不是CLI本体,技能说明不是脚本。
for name in ("faqi-tmux", "faqi-oh-my-tmux", "faqi-my-nvim-lua",
"faqi-codex-config-installer", "faqi-auto-tmux"):
self.assertEqual("software-artifact", objects[name]["type_id"])
self.assertNotIn("faqi-codex-cli", objects)
decisions = {rid: r["decision"] for r in data["external_reviews"] for rid in r["resource_ids"]}
self.assertEqual("excluded_model", decisions["tools-platforms-claude-opus-4-6-f751380c"])
self.assertEqual("excluded_content", decisions["tools-platforms-prompt-jsonl-8e9b2066"])
self.assertEqual("pending_identity", decisions["tools-platforms-zsh-d6d24951"])
self.assertEqual("restricted_service_pending", decisions["network-payment-services-bybit-81d32c91"])
self.assertEqual("related_local_source", decisions["repo-rules-scaffolds-tmux-9f36981a"])
aliases = {a["path"]: a for a in data["references"]}
for path in ("skills/auto-tmux/assets/tmux-src", "skills/auto-tmux/assets/oh-my-tmux"):
self.assertEqual("empty-placeholder", aliases[path]["state"])
self.assertIsNone(aliases[path]["related_object_id"])
def test_rejects_unsupported_identity_and_source_claims_without_writing(self):
original = json.loads((ROOT / "metadata/faqi.json").read_text(encoding="utf-8"))
changed = copy.deepcopy(original)
changed["objects"].append({**changed["objects"][0], "id": "faqi-duplicate-cli-mcp"})
cases = [("same-content-two-identities", changed)]
changed = copy.deepcopy(original); changed["objects"][0]["type_id"] = "model-artifact"
cases.append(("model-as-tool", changed))
changed = copy.deepcopy(original); changed["limits"]["runtime_verified"] = True
cases.append(("invented-runtime", changed))
changed = copy.deepcopy(original); changed["sources"][0]["sha256"] = "0" * 64
cases.append(("source-drift", changed))
changed = copy.deepcopy(original); changed["sources"][0]["lines"] = [1, 999999]
cases.append(("selection-overrun", changed))
changed = copy.deepcopy(original); changed["sources"][0]["path"] = "../../outside.py"
cases.append(("path-escape", changed))
changed = copy.deepcopy(original); changed["sources"][0]["path"] = "tools/config/.codex/auth.json"
cases.append(("credential-source", changed))
changed = copy.deepcopy(original); changed["external_reviews"][0]["resource_ids"].pop()
cases.append(("missing-resource", changed))
changed = copy.deepcopy(original); changed["objects"][0]["grade"] = "天阶高级"
cases.append(("grade-injection", changed))
changed = copy.deepcopy(original); changed["objects"][0]["implementation"] = changed["sources"][0]["id"]
cases.append(("description-as-implementation", changed))
changed = copy.deepcopy(original)
changed["local_entries"][0]["objects"], changed["local_entries"][1]["objects"] = changed["local_entries"][1]["objects"], changed["local_entries"][0]["objects"]
cases.append(("wrong-entry-identity", changed))
changed = copy.deepcopy(original); changed["sources"][1]["purpose"] = "support"
cases.append(("unsupported-source-purpose", changed))
changed = copy.deepcopy(original); changed["sources"][1]["selection_sha256"] = "0" * 64
cases.append(("selection-drift", changed))
changed = copy.deepcopy(original); changed["objects"][0]["name"] = "程序\n```\n<script>"
cases.append(("control-character-injection", changed))
changed = copy.deepcopy(original); changed["references"][2]["state"] = "symlink"
cases.append(("placeholder-as-link", changed))
for label, data in cases:
with self.subTest(label=label):
view = ARTIFACTS / (label + ".md")
result = self.invoke(label, "--input", self.input_copy(label, data), "--view", view, "--write")
self.assertNotEqual(0, result.returncode)
self.assertIn("FAQI_CATALOG_ERRORS", result.stderr.decode())
self.assertFalse(view.exists())
def test_repeatable_view_escaping_and_ownership(self):
data = json.loads((ROOT / "metadata/faqi.json").read_text(encoding="utf-8"))
data["objects"][0]["name"] = '<script>unexpected</script> ``` [link](javascript:void(0)) |'
input_path = self.input_copy("escaped", data)
view = ARTIFACTS / "safe-view.md"
self.assertEqual(0, self.invoke("write-first", "--input", input_path, "--view", view, "--write").returncode)
first = view.read_bytes()
parser = MarkdownIt("commonmark")
markup = parser.render(first.decode())
self.assertNotIn("<script>", markup)
self.assertNotIn('href="javascript:', markup)
tables = "\n".join(t.content for t in parser.parse(first.decode()) if t.type == "fence")
# psql代码表是原样文本:HTML转义不能把依赖版本和原名称改成字面实体。
self.assertIn("tmux>=2.6及awk/perl/grep/sed", tables)
self.assertIn(data["objects"][0]["name"], tables)
self.assertEqual(0, self.invoke("write-repeat", "--input", input_path, "--view", view, "--write").returncode)
self.assertEqual(first, view.read_bytes())
self.assertEqual(0, self.invoke("check-repeat", "--input", input_path, "--view", view, "--check").returncode)
view.write_bytes(first + b"\nmanual-drift\n")
self.assertNotEqual(0, self.invoke("stale-view", "--input", input_path, "--view", view, "--check").returncode)
plain = ARTIFACTS / "not-owned.md"; plain.write_text("必须保留的人工文档\n", encoding="utf-8")
self.assertNotEqual(0, self.invoke("reject-non-owned", "--input", input_path, "--view", plain, "--write").returncode)
self.assertEqual("必须保留的人工文档\n", plain.read_text(encoding="utf-8"))
link = ARTIFACTS / "symlink.md"; link.symlink_to(plain)
self.assertNotEqual(0, self.invoke("reject-output-link", "--input", input_path, "--view", link, "--write").returncode)
self.assertEqual("必须保留的人工文档\n", plain.read_text(encoding="utf-8"))
alias = ARTIFACTS / "input-parent-alias"; alias.symlink_to(ARTIFACTS, target_is_directory=True)
forbidden = ARTIFACTS / "parent-link-view.md"
result = self.invoke("reject-input-parent-link", "--input", alias / input_path.name, "--view", forbidden, "--write")
self.assertNotEqual(0, result.returncode)
self.assertFalse(forbidden.exists())
def test_wide_resource_table_fails_within_budget_without_writing(self):
# 真实隔离Git/YAML输入;一条长名称使列宽×行数放大,不能先耗尽内存再检查输出。
root = ARTIFACTS / "wide-table-fixture"; root.mkdir()
(root / "metadata").mkdir(); (root / "tools/fixture").mkdir(parents=True)
(root / "docs/gongfa").mkdir(parents=True)
(root / "assets/external-resources").mkdir(parents=True)
for path in ("metadata/faqi.schema.json", "docs/gongfa/cultivation-ontology-taxonomy.md"):
(root / path).write_bytes((ROOT / path).read_bytes())
body = b"def identity(value):\n return value\n"
(root / "tools/fixture/main.py").write_bytes(body)
(root / ".gitmodules").write_bytes(b"")
for index, command in enumerate((
["git", "init", "--quiet", str(root)],
["git", "-C", str(root), "add", ".gitmodules", "tools/fixture/main.py"],
["git", "-C", str(root), "-c", "user.name=tradecatlabs", "-c", "user.email=288998340+tradecatlabs@users.noreply.github.com", "commit", "--quiet", "--no-gpg-sign", "-m", "test: isolated source fixture"],
)):
result = subprocess.run(command, capture_output=True, timeout=20, env={**os.environ, "GIT_AUTHOR_DATE": "2026-10-09T00:00:00+00:00", "GIT_COMMITTER_DATE": "2026-10-09T00:00:00+00:00"})
(ARTIFACTS / f"fixture-git-{index}.json").write_text(json.dumps({"command": command, "exit_code": result.returncode, "stdout": result.stdout.decode(), "stderr": result.stderr.decode()}, ensure_ascii=False), encoding="utf-8")
self.assertEqual(0, result.returncode, result.stderr.decode())
revision = subprocess.check_output(["git", "-C", str(root), "rev-parse", "HEAD"], timeout=20).decode().strip()
data = json.loads((ROOT / "metadata/faqi.json").read_text(encoding="utf-8"))
data["source_revision"] = revision
source = {"id": "S01", "purpose": "implementation", "path": "tools/fixture/main.py", "repository": ".", "revision": revision, "sha256": hashlib.sha256(body).hexdigest(), "lines": [1, 3], "selection_sha256": hashlib.sha256(body).hexdigest()}
data["sources"] = [source]
data["objects"] = [{**data["objects"][0], "id": "faqi-fixture", "implementation": "S01", "support": []}]
data["local_entries"] = [{"path": "tools/fixture", "objects": ["faqi-fixture"], "sources": ["S01"], "boundary": "隔离来源形态夹具,不证明工具能力", "pending": []}]
ids = []
for file_index, source in enumerate(data["external_sources"]):
rows = []
for index in range(512 if file_index == 0 else 1):
rid = f"fixture-{file_index}-{index}"; ids.append(rid)
name = "x" * (512 * 1024) if file_index == index == 0 else "短名称"
rows.append({"id": rid, "name": name, "status": "active"})
raw = json.dumps({"defaults": {"verification_status": "imported-unverified"}, "resources": rows}, ensure_ascii=False).encode()
self.assertLess(len(raw), 2 * 1024 * 1024)
(root / source["path"]).write_bytes(raw); source["sha256"] = hashlib.sha256(raw).hexdigest()
data["external_reviews"] = [{"decision": "software_candidate", "rationale": "隔离资源宽表夹具,不作语义初审", "resource_ids": ids}]
data["resource_notes"] = {}; data["local_resource_links"] = {}; data["references"] = []; data["relations"] = []
view = ARTIFACTS / "budget-view.md"
result = self.invoke("wide-table-budget", "--root", root, "--input", self.input_copy("wide-table", data), "--view", view, "--write", memory_limit=192 * 1024 * 1024)
self.assertNotEqual(0, result.returncode)
self.assertIn("FAQI_CATALOG_ERRORS", result.stderr.decode())
self.assertFalse(view.exists())
def test_strict_json(self):
original = (ROOT / "metadata/faqi.json").read_text(encoding="utf-8")
for label, text in (
("duplicate-json-key", original.replace('{', '{"format_version": 1,', 1)),
("non-json-number", original.replace('"format_version": 1', '"format_version": NaN', 1)),
("oversized-json", original + " " * (2 * 1024 * 1024 + 1)),
("non-json-infinity", original.replace('"format_version": 1', '"format_version": Infinity', 1)),
):
with self.subTest(label=label):
path = ARTIFACTS / (label + "-input.json"); path.write_text(text, encoding="utf-8")
result = self.invoke(label, "--input", path, "--check")
self.assertNotEqual(0, result.returncode)
self.assertIn("FAQI_CATALOG_ERRORS", result.stderr.decode())
def main():
global ARTIFACTS
parser = argparse.ArgumentParser(description="法器初审清单离线CLI行为验证,保留隔离工件")
parser.add_argument("--artifacts", type=Path)
parser.add_argument("--current-only", action="store_true")
args = parser.parse_args()
if args.artifacts:
ARTIFACTS = args.artifacts.resolve(); ARTIFACTS.mkdir(parents=True, exist_ok=False)
else:
ARTIFACTS = Path(tempfile.mkdtemp(prefix="faqi-catalog-test-"))
suite = unittest.TestSuite([FaqiCatalogTest("test_current_source_review_is_consumable")]) if args.current_only else unittest.defaultTestLoader.loadTestsFromTestCase(FaqiCatalogTest)
test_ids = [test.id() for test in suite]
result = unittest.TextTestRunner(verbosity=2).run(suite)
summary = {"tests": result.testsRun, "failures": len(result.failures), "errors": len(result.errors),
"passed": result.wasSuccessful(), "independent_review": False, "reviewed_tools_executed": False,
"artifact_directory": str(ARTIFACTS)}
(ARTIFACTS / "result.json").write_text(json.dumps(summary, ensure_ascii=False, indent=2), encoding="utf-8")
junit = ET.Element("testsuite", name="faqi-catalog", tests=str(result.testsRun), failures=str(len(result.failures)), errors=str(len(result.errors)))
for test_id in test_ids:
case = ET.SubElement(junit, "testcase", name=test_id)
for kind, issues in (("failure", result.failures), ("error", result.errors)):
for test, trace in issues:
if test.id() == test_id or test.id().startswith(test_id + " "):
ET.SubElement(case, kind).text = trace
ET.ElementTree(junit).write(ARTIFACTS / "junit.xml", encoding="utf-8", xml_declaration=True)
print(json.dumps(summary, ensure_ascii=False))
return 0 if result.wasSuccessful() else 1
if __name__ == "__main__":
sys.exit(main())
+3
View File
@@ -8,6 +8,7 @@
- `tools/prompts-library/`:提示词 Excel、Markdown、JSONL 转换工具。
- `tools/chat-vault/`:AI 聊天记录保存工具。
- `tools/external/`:第三方工具、外部仓库和 Git submodule。
- `faqi-catalog.md`:法器来源限定初审与资源分流的只读生成清单;数据归`metadata/faqi.json`,资源原事实与类型仍归各自唯一所有者。
## 约束
@@ -15,3 +16,5 @@
- 不在工具配置中提交真实密钥、Token 或个人凭证。
- 修改工具行为时,同步更新对应 README、AGENTS 和根目录命令说明。
- 外部源码目录除非任务明确要求,否则不要顺手格式化或批量替换。
- 法器清单不手改;按`make sync-faqi-catalog`生成,随后`make check-faqi-catalog`与`make test-faqi-catalog`验证,不搬移源码或执行被审程序。
- 初审不是工具品级、完整包语义、运行/效果、许可或独立身份批准;文件/入口/副本/版本/产品关系分别核,不按名称或目录计独立法器。
+14
View File
@@ -8,3 +8,17 @@
- `tools/chat-vault/`:AI 聊天记录保存工具。
- `tools/external/`:外部仓库、第三方工具与 submodule。
- `tools/config/`:Codex 等工具配置。
- [faqi-catalog.md](faqi-catalog.md):法器来源限定初审及外部资源分流的只读清单;来源与判定归[metadata/faqi.json](../metadata/faqi.json),类型归唯一本体,原资源字段仍归资源YAML。
## 法器清单维护
```bash
make sync-faqi-catalog
make check-faqi-catalog
make test-faqi-catalog
```
不搬移源码、Skill或配置;按程序指令内容、方法/规约、模型、载体、地址及运行实际所指分离。
脚本、Lua或嵌入shell的配置可具有程序所指,不因所在目录或后缀一律排除;纯配置、Skill说明与软件实现不强行合并。
清单只证明所列固定来源的初审记录,不证明独立产品数、运行正确、许可证、可用性或效果,法器不套功法品级。
新增来源/内容变化先核身份与版本;视图仅由维护脚本生成,不把临时报告或个人目录作为长期数据源。
+965
View File
@@ -0,0 +1,965 @@
<!-- generated: sync-faqi-catalog.py -->
# 法器清单与资源初审
来源限定的静态初审,不是效果、可用性、许可证或独立语义批准。仅修改[法器初审数据](../metadata/faqi.json),不手改此视图。
类型与关系复用[唯一本体](../docs/gongfa/cultivation-ontology-taxonomy.md#唯一分类树),不维护第二主树,不套功法四阶十二级。
## 总体概览
初审时间:2026-10-09T07:15:02.009544+00:00;父仓库来源修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
本地入口 13 个,来源限定法器实现初审 19 条,外部资源逐行分流 158 条;不是按目录或资源行计算独立产品数。
程序源码修订和下表声明版本不等于已核发布版、已安装版本或已部署入口;同内容副本、多入口不重复登记。
```text
+---------------------+------------+
| 外部分流状态 | 资源行数 |
|---------------------+------------|
| 软件实现候选 | 67 |
| 托管入口候选 | 22 |
| 排除:资料/规约内容 | 38 |
| 排除:模型名称所指 | 4 |
| 待核:对象身份 | 22 |
| 关联已审本地来源 | 2 |
| 待核:受限服务所指 | 3 |
+---------------------+------------+
```
## 本地来源限定法器
以下记录只指选定来源的程序指令内容;不同内容实现是否属于同一产品/派生版本,仍须另有演化证据。用途不作为主父。
```text
+-----------------------------+-----------------------------------+-------------------+--------------+
| 实现ID | 名称 | 已有类型ID | 实现来源ID |
|-----------------------------+-----------------------------------+-------------------+--------------|
| faqi-prompt-converter | 提示词格式转换程序 | software-artifact | S02 |
| faqi-chat-vault | Chat Vault同步与查询程序 | software-artifact | S04 |
| faqi-codex-config-installer | Codex配置安装与恢复脚本 | software-artifact | S06 |
| faqi-auto-skill-create | auto-skill模板生成脚本 | software-artifact | S08 |
| faqi-auto-skill-validate | auto-skill结构校验脚本 | software-artifact | S09 |
| faqi-skill-seekers-adapter | Skill Seekers本地运行适配脚本 | software-artifact | S10 |
| faqi-auto-tmux | auto-tmux命令封装程序 | software-artifact | S12 |
| faqi-skill-seekers | Skill Seekers程序 | software-artifact | S16 |
| faqi-oh-my-tmux | oh-my-tmux可执行配置程序 | software-artifact | S18 |
| faqi-tmux | tmux终端复用程序 | software-artifact | S21 |
| faqi-claude-skill-init | 官方Skill初始化脚本 | software-artifact | S23 |
| faqi-html-epub-css | EPUB CSS清理网页程序 | software-artifact | S25 |
| faqi-html-markdown-text | Markdown预览与文本导出网页程序 | software-artifact | S26 |
| faqi-html-task-card | 任务卡片PNG导出网页程序 | software-artifact | S27 |
| faqi-html-xhs-card | 小红书内容卡片PNG导出网页程序 | software-artifact | S28 |
| faqi-html-markdown-sync-png | Markdown同步预览与PNG导出网页程序 | software-artifact | S29 |
| faqi-my-nvim-lua | my-nvim的LazyVim引导配置程序 | software-artifact | S32 |
| faqi-mc-player-transfer | Minecraft基岩版角色迁移程序 | software-artifact | S34 |
| faqi-xhs-zip-pdf | 小红书图片ZIP转PDF程序 | software-artifact | S36 |
+-----------------------------+-----------------------------------+-------------------+--------------+
```
### faqi-prompt-converter
提示词格式转换程序:指main.py及其转换实现所表达的程序内容;Excel、Markdown和JSONL是输入/输出,不随转换模式复制工具身份。未验证转换正确性。
实现来源 `S02`,佐证来源 `S01`;声明版本:未核/无明确发布版本声明。
### faqi-chat-vault
Chat Vault同步与查询程序:所指为同步/查询/导出程序,不是数据库、会话、消息或一次同步;模块顶层会ensure_venv,import和--help也不能视为无副作用,未启动或读取聊天数据。
实现来源 `S04`,佐证来源 `S03`;声明版本:未核/无明确发布版本声明。
### faqi-codex-config-installer
Codex配置安装与恢复脚本:纳入安装脚本的程序指令;不是Codex CLI实现,不包含账号授权,safe/power配置、全局指令文本另作规约内容。备份/覆盖能力尚未运行验证。
实现来源 `S06`,佐证来源 `S05`;声明版本:未核/无明确发布版本声明。
### faqi-auto-skill-create
auto-skill模板生成脚本:指渲染Skill模板与建立目录的程序,不是生成出的Skill内容或整个元技能。--force可覆盖目标,未执行。
实现来源 `S08`,佐证来源 `S07`;声明版本:未核/无明确发布版本声明。
### faqi-auto-skill-validate
auto-skill结构校验脚本:指frontmatter和结构校验程序;成功结构检查不证明Skill语义、执行正确或效果。
实现来源 `S09`,佐证来源 `S07`;声明版本:未核/无明确发布版本声明。
### faqi-skill-seekers-adapter
Skill Seekers本地运行适配脚本:设置venv/PYTHONPATH并exec上游CLI的本地适配程序。指令内容不同于上游核心,不能把封装当同一副本,也不因同一用途合并其他生成脚本。
实现来源 `S10`,佐证来源 `S07`;声明版本:未核/无明确发布版本声明。
### faqi-auto-tmux
auto-tmux命令封装程序:指统一操控脚本,不是SKILL.md、tmux二进制、session/pane或某次操作;支持多命令不增加身份。未发送按键、创建会话或读取pane。
实现来源 `S12`,佐证来源 `S11`;声明版本:未核/无明确发布版本声明。
### faqi-skill-seekers
Skill Seekers程序:指固定submodule修订的软件实现;多个CLI入口及可选MCP模块不机械复制产品身份。3.5.1仅为pyproject源码声明,不是已核发布或运行版。
实现来源 `S16`,佐证来源 `S14, S15`;声明版本:3.5.1(仅源码声明)。
### faqi-oh-my-tmux
oh-my-tmux可执行配置程序:配置文件含run、cut&#124;sh调用链及可执行shell指令,按实际程序内容归software-artifact,不能仅因.conf后缀归纯规约;不是tmux本身。
实现来源 `S18`,佐证来源 `S17, S19`;声明版本:未核/无明确发布版本声明。
### faqi-tmux
tmux终端复用程序:指固定源码修订的程序内容,不是物理终端、pane、socket地址或一次会话。Git describe的邻近tag不作为已核发布版本。
实现来源 `S21`,佐证来源 `S20`;声明版本:未核/无明确发布版本声明。
### faqi-claude-skill-init
官方Skill初始化脚本:只纳入skill-creator下生成目录/模板的独立Python程序,不把官方Skill集合、自然语言方法、模板或其他全部辅助脚本称作同一程序。
实现来源 `S23`,佐证来源 `S22`;声明版本:未核/无明确发布版本声明。
### faqi-html-epub-css
EPUB CSS清理网页程序:HTML内JavaScript负责读取、改写CSS和重新打包;是浏览器程序内容,不是纯文章。需JSZip等外部脚本,未启动浏览器或处理书籍。
实现来源 `S25`,佐证来源 `S24`;声明版本:未核/无明确发布版本声明。
### faqi-html-markdown-text
Markdown预览与文本导出网页程序:指marked驱动的预览/复制/文本导出实现;源码sanitize:false且innerHTML,不能把预览声明当安全处理不可信Markdown的证据。
实现来源 `S26`,佐证来源 `S24`;声明版本:未核/无明确发布版本声明。
### faqi-html-task-card
任务卡片PNG导出网页程序:指html2canvas驱动的任务卡片导出实现;卡片内容、导出图片和一次生成过程不等于程序。
实现来源 `S27`,佐证来源 `S24`;声明版本:未核/无明确发布版本声明。
### faqi-html-xhs-card
小红书内容卡片PNG导出网页程序:指可编辑内容卡片的PNG导出实现;不是图文资料或抓取客户端,未核依赖/CDN可用性。
实现来源 `S28`,佐证来源 `S24`;声明版本:未核/无明确发布版本声明。
### faqi-html-markdown-sync-png
Markdown同步预览与PNG导出网页程序:文件名带1.0,但实际title与指令所指为Markdown同步预览/调整宽度/PNG导出;不凭文件名当小红书产品版本。与其他页面内容不同,产品同一/前驱关系未批准。
实现来源 `S29`,佐证来源 `S24`;声明版本:未核/无明确发布版本声明。
### faqi-my-nvim-lua
my-nvim的LazyVim引导配置程序:Lua含git clone、异常分支、setup等可执行指令,不是纯参数表;是Neovim/LazyVim配置程序,不是Neovim实现。README v0.11.5指宿主Neovim,不作为配置版本。
实现来源 `S32`,佐证来源 `S30, S31`;声明版本:未核/无明确发布版本声明。
### faqi-mc-player-transfer
Minecraft基岩版角色迁移程序:extract/import是同一程序的两种任务;存档、角色数据和一次迁移不是程序。涉及读写存档,未运行,不把备份提示当恢复成功证据。
实现来源 `S34`,佐证来源 `S33`;声明版本:未核/无明确发布版本声明。
### faqi-xhs-zip-pdf
小红书图片ZIP转PDF程序:纳入排序、合并与PDF写出程序;源码会extractall、清理固定temp_extract目录并在成功路径删除原ZIP。属于数据损失/路径处理风险,未执行或证明安全。
实现来源 `S36`,佐证来源 `S35`;声明版本:未核/无明确发布版本声明。
## 13个本地入口的分离结果
### tools/prompts-library
纳入实现:`faqi-prompt-converter`。纳入程序,不把提示词资产或生成目录当工具实现。
佐证来源:`S01, S02`。
### tools/chat-vault
纳入实现:`faqi-chat-vault`。程序与SQLite记录、日志、会话实体及存储载体分开。
佐证来源:`S03, S04`。
- 待核:运行效果、隐私边界与真正同步权限未核;README“只读”声明不证明数据安全。
### tools/config/.codex
纳入实现:`faqi-codex-config-installer`。配置与AGENTS文本不等于CLI;脚本本身有独立程序所指。
佐证来源:`S05, S06`。
- 待核:Codex实际程序、已安装版本、权限及账户不由本目录证明。
### skills/auto-skill
纳入实现:`faqi-auto-skill-create, faqi-auto-skill-validate, faqi-skill-seekers-adapter`。Skill说明/规约与三个独立入口脚本分离,不把整Skill包登记成一件软件。
佐证来源:`S07, S08, S09, S10`。
- 待核:其他辅助模块未逐模块登记,不能将本次选区称为全包能力审查。
### skills/auto-tmux
纳入实现:`faqi-auto-tmux`。Skill方法/规约、执行脚本、被依赖程序及运行入口分别指认。
佐证来源:`S11, S12, S13`。
- 待核:两个assets引用实际上是零字节普通占位文件,不是README声称的软链接;本次记录缺口,不冒称已修复或上游源码可经此引用到达。
- 待核:蜂群附属脚本不逐一登记,不启动蜂群,也不将蜂群状态/日志算软件。
### tools/external/Skill_Seekers-development
纳入实现:`faqi-skill-seekers`。源码内容与仓库载体、接口规范、抓取过程、输入资料和生成Skill分开。
佐证来源:`S14, S15, S16`。
- 待核:CLI与MCP各实现的完整对应关系、许可/可用性与外部I/O权限未作完整审查。
### tools/external/.tmux
纳入实现:`faqi-oh-my-tmux`。配置数据与嵌入程序按实际所指区分;本条纳入可执行配置程序,未安装或source配置。
佐证来源:`S17, S18, S19`。
- 待核:源码含条件性kill-server;纳入不等于可安全对当前会话执行。
### tools/external/tmux
纳入实现:`faqi-tmux`。tmux程序与配置、操控封装、终端会话和显示记录分开。
佐证来源:`S20, S21`。
### tools/external/claude-official-skills
纳入实现:`faqi-claude-skill-init`。集合入口不等于法器身份;指令内容与脚本实现分别判断。
佐证来源:`S22, S23`。
- 待核:README明确部分文档Skill仅source-available,不能把整个集合称为同一开源许可证;本次不批准再分发/商用许可。
- 待核:其余辅助脚本未逐模块展开。
### tools/external/html-tools-main
纳入实现:`faqi-html-epub-css, faqi-html-markdown-text, faqi-html-task-card, faqi-html-xhs-card, faqi-html-markdown-sync-png`。五个页面确有不同JavaScript实现,登记来源限定内容记录,不按HTML目录或README宣传登记一件全能工具。
佐证来源:`S24, S25, S26, S27, S28, S29`。
- 待核:两个Markdown相关实现以及文件名“1.0”的产品同一/版本演化仍待核,不自动合并或填predecessor。
- 待核:README的index.html/tools/示意与当前目录实际平铺不同;“无需额外依赖”不等于无需网络/CDN脚本。
### tools/external/my-nvim
纳入实现:`faqi-my-nvim-lua`。配置程序、宿主Neovim、LazyVim依赖与说明宣传各有自己的所指。
佐证来源:`S30, S31, S32`。
- 待核:配置会尝试克隆插件并启用更新检查;未运行,未核实际依赖锁定或README“全面测试”主张。
### tools/external/MCPlayerTransfer
纳入实现:`faqi-mc-player-transfer`。纳入迁移程序,角色数据与存档载体排除于程序身份。
佐证来源:`S33, S34`。
### tools/external/XHS-image-to-PDF-conversion
纳入实现:`faqi-xhs-zip-pdf`。ZIP/PDF为输入/输出制品,原ZIP删除不是工具身份或效果证明。
佐证来源:`S35, S36`。
- 待核:不可逆删除、解压路径与部分失败恢复须先隔离验证,不能直接用真实资料运行。
## 静态依赖与引用入口
`requires`只记录源码/说明声明的依赖;相关本地实现ID是源码参照,不证明运行时加载了该版本,更不证明实际使用、符合协议或已获权限。
```text
+----------------------------+----------+------------------------------------+--------------------+----------+
| 主体实现 | 谓词 | 依赖所指 | 相关来源实现 | 证据ID |
|----------------------------+----------+------------------------------------+--------------------+----------|
| faqi-auto-tmux | requires | tmux程序(运行版本未知) | faqi-tmux | S13 |
| faqi-oh-my-tmux | requires | tmux>=2.6及awk/perl/grep/sed | faqi-tmux | S17 |
| faqi-skill-seekers-adapter | requires | 链接源码中的skill_seekers.cli.main | faqi-skill-seekers | S10 |
| faqi-my-nvim-lua | requires | Neovim运行环境、lazy.nvim和LazyVim | 未知 | S32 |
+----------------------------+----------+------------------------------------+--------------------+----------+
```
- `faqi-auto-tmux`:脚本调用PATH中的tmux;本地上游源码仅作相关参照,不证明实际安装二进制来自该修订。
- `faqi-oh-my-tmux`:README声明版本下限,不将配置修订误写成tmux版本,也不保证当前环境满足依赖。
- `faqi-skill-seekers-adapter`:源码路径确由软链接指到选定submodule;这是静态加载意图,venv实际依赖、Python解析和运行结果未核。
- `faqi-my-nvim-lua`:不把配置包当Neovim;源码可联网克隆/更新插件,实际宿主与依赖版本未绑定。
- `skills/auto-skill/scripts/Skill_Seekers-development`:`symlink`;目标 `../../../tools/external/Skill_Seekers-development`。同一仓库源码的引用入口,不新增法器副本;封装脚本另有指令内容。
- `skills/claude-official-skills`:`symlink`;目标 `../tools/external/claude-official-skills`。指向Skill集合而非一件软件,不能再因引用入口登记整集合。
- `skills/auto-tmux/assets/oh-my-tmux`:`empty-placeholder`;目标 `无`。实际Git模式100644、0字节;README称软链接,但此路径不能提供上游来源到达证据。
- `skills/auto-tmux/assets/tmux-src`:`empty-placeholder`;目标 `无`。实际Git模式100644、0字节;独立tmux源码已按真实submodule审,不把占位文件算副本。
## 158条外部资源逐行分流
名称、原ID、状态、验证状态与风险只读自原YAML。`active`与`imported-unverified`不证明可用、许可或推荐。
未核远端实现/版本的候选不登记为本地法器;模型名称所指与聊天平台分开。资料排除仅针对当前条目所指,不断言整个仓库没有程序。
同名或同网址只产生重复入口核查线索,不自动合并软件身份;网络/金融分流不授权开户、交易、账户读取或实际网络操作。
### 软件实现候选
原行明确描述程序、编辑器、CLI、插件、库或生成工具,保留软件实现候选;只有名称/介绍地址,未核具体实现、版本、许可证或能力,不直接赋型/登记。
```text
+-----------------------------------------------------+-----------------------+--------------+---------------------+--------------+
| 原资源ID | 名称 | 原状态 | 原验证状态 | 原风险标记 |
|-----------------------------------------------------+-----------------------+--------------+---------------------+--------------|
| tools-platforms-codex-cli-362bc20a | Codex CLI | active | imported-unverified | 无 |
| tools-platforms-droid-1b66f6e0 | Droid | active | imported-unverified | 无 |
| tools-platforms-docusaurus-09c54423 | Docusaurus | active | imported-unverified | 无 |
| tools-platforms-vitepress-da10a919 | VitePress | active | imported-unverified | 无 |
| tools-platforms-lazyvim-2f22a781 | LazyVim | active | imported-unverified | 无 |
| tools-platforms-neovim-a8b85739 | Neovim | active | imported-unverified | 无 |
| tools-platforms-pearai-0683754c | PearAI | active | imported-unverified | 无 |
| tools-platforms-vs-code-e8f2d385 | VS Code | active | imported-unverified | 无 |
| tools-platforms-void-b1594346 | Void | active | imported-unverified | 无 |
| tools-platforms-django-e05156b6 | Django | active | imported-unverified | 无 |
| tools-platforms-excalidraw-02ba0cb2 | Excalidraw | active | imported-unverified | 无 |
| tools-platforms-mermaid-cc6f6e7e | Mermaid | active | imported-unverified | 无 |
| tools-platforms-dbeaver-aa2fc821 | DBeaver | active | imported-unverified | 无 |
| tools-platforms-tableplus-9950f31a | TablePlus | active | imported-unverified | 无 |
| tools-platforms-warp-14bec77a | Warp | active | imported-unverified | 无 |
| tools-platforms-claude-code-11b1e88d | Claude Code | active | imported-unverified | 无 |
| tools-platforms-opencode-ada070db | OpenCode | active | imported-unverified | 无 |
| tools-platforms-gemini-cli-d077e5cc | Gemini CLI | active | imported-unverified | 无 |
| tools-platforms-gemini-cli-row40-d077e5cc | Gemini CLI | active | imported-unverified | 无 |
| tools-platforms-qwen-cli-a1b92a34 | Qwen CLI | active | imported-unverified | 无 |
| tools-platforms-bito-0c0619b5 | Bito | active | imported-unverified | 无 |
| tools-platforms-codeium-668488a9 | Codeium | active | imported-unverified | 无 |
| tools-platforms-continue-edb7b3bf | Continue | active | imported-unverified | 无 |
| tools-platforms-cursor-8ebf3977 | Cursor | active | imported-unverified | 无 |
| tools-platforms-zed-07b4820e | Zed | active | imported-unverified | 无 |
| tools-platforms-chatgpt-exporter-a03efe97 | ChatGPT Exporter | active | imported-unverified | 无 |
| repo-rules-scaffolds-autogen-fc00be5e | autogen | active | imported-unverified | 无 |
| repo-rules-scaffolds-browser-use-268f0f95 | browser-use | active | imported-unverified | 无 |
| repo-rules-scaffolds-crewai-d9a56566 | crewai | active | imported-unverified | 无 |
| repo-rules-scaffolds-dspy-d8bdba82 | dspy | active | imported-unverified | 无 |
| repo-rules-scaffolds-langchain-089a07ab | langchain | active | imported-unverified | 无 |
| repo-rules-scaffolds-pydantic-ai-cb69369e | pydantic-ai | active | imported-unverified | 无 |
| repo-rules-scaffolds-smolagents-790ade5e | smolagents | active | imported-unverified | 无 |
| repo-rules-scaffolds-aider-adccc23a | aider | active | imported-unverified | 无 |
| repo-rules-scaffolds-claude-code-ef1ef8b6 | claude-code | active | imported-unverified | 无 |
| repo-rules-scaffolds-cline-644a6623 | cline | active | imported-unverified | 无 |
| repo-rules-scaffolds-continue-d5516851 | continue | active | imported-unverified | 无 |
| repo-rules-scaffolds-gemini-cli-be45a9ce | gemini-cli | active | imported-unverified | 无 |
| repo-rules-scaffolds-gpt-engineer-eaa2e8a8 | gpt-engineer | active | imported-unverified | 无 |
| repo-rules-scaffolds-oh-my-opencode-0348827b | oh-my-opencode | active | imported-unverified | 无 |
| repo-rules-scaffolds-open-interpreter-a514262e | open-interpreter | active | imported-unverified | 无 |
| repo-rules-scaffolds-opencode-e1b762af | opencode | active | imported-unverified | 无 |
| repo-rules-scaffolds-spec-kit-a9a40ae2 | spec-kit | active | imported-unverified | 无 |
| repo-rules-scaffolds-avante-nvim-29a0c49f | avante.nvim | active | imported-unverified | 无 |
| repo-rules-scaffolds-codecompanion-nvim-a6f68dc2 | codecompanion.nvim | active | imported-unverified | 无 |
| repo-rules-scaffolds-codeium-b0b85053 | codeium | active | imported-unverified | 无 |
| repo-rules-scaffolds-copilot-vim-c06b7933 | copilot.vim | active | imported-unverified | 无 |
| repo-rules-scaffolds-gitingest-ee7a3f76 | gitingest | active | imported-unverified | 无 |
| repo-rules-scaffolds-jan-c4cdcb50 | jan | active | imported-unverified | 无 |
| repo-rules-scaffolds-lmstudio-8b9fe81d | lmstudio | active | imported-unverified | 无 |
| repo-rules-scaffolds-localai-ea1fbd8b | localai | active | imported-unverified | 无 |
| repo-rules-scaffolds-ollama-33222b83 | ollama | active | imported-unverified | 无 |
| repo-rules-scaffolds-repomix-5aa70b79 | repomix | active | imported-unverified | 无 |
| repo-rules-scaffolds-text-generation-webui-8ec0aebb | text-generation-webui | active | imported-unverified | 无 |
| repo-rules-scaffolds-anythingllm-a3e8a5fc | AnythingLLM | active | imported-unverified | 无 |
| repo-rules-scaffolds-dify-4f89d10f | Dify | active | imported-unverified | 无 |
| repo-rules-scaffolds-privategpt-c615ca94 | PrivateGPT | active | imported-unverified | 无 |
| repo-rules-scaffolds-quivr-5cc2ab96 | Quivr | active | imported-unverified | 无 |
| repo-rules-scaffolds-ragflow-c92a0918 | RAGFlow | active | imported-unverified | 无 |
| repo-rules-scaffolds-devdocs-62126dcb | DevDocs | active | imported-unverified | 无 |
| repo-rules-scaffolds-create-next-app-1bebc93a | create-next-app | active | imported-unverified | 无 |
| repo-rules-scaffolds-create-t3-app-daf8fe4b | create-t3-app | active | imported-unverified | 无 |
| repo-rules-scaffolds-shadcn-ui-d7cf613e | shadcn/ui | active | imported-unverified | 无 |
| repo-rules-scaffolds-vite-3e45b462 | vite | active | imported-unverified | 无 |
| repo-rules-scaffolds-codex-e3c8be51 | openai/codex | active | imported-unverified | 无 |
| repo-rules-scaffolds-roo-code-36e77dcc | RooCodeInc/Roo-Code | needs-review | imported-unverified | 无 |
| network-payment-services-flclash-a974428b | FlClash | active | imported-unverified | 无 |
+-----------------------------------------------------+-----------------------+--------------+---------------------+--------------+
```
- `tools-platforms-codex-cli-362bc20a`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/0`。描述混有“最强模型”、CLI、配置与旧地址;只保留CLI候选,不使用宣传赋级,本地Codex安装脚本不等于CLI。
- `tools-platforms-droid-1b66f6e0`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/5`。
- `tools-platforms-docusaurus-09c54423`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/13`。
- `tools-platforms-vitepress-da10a919`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/15`。
- `tools-platforms-lazyvim-2f22a781`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/17`。
- `tools-platforms-neovim-a8b85739`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/18`。
- `tools-platforms-pearai-0683754c`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/19`。
- `tools-platforms-vs-code-e8f2d385`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/20`。
- `tools-platforms-void-b1594346`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/21`。
- `tools-platforms-django-e05156b6`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/22`。
- `tools-platforms-excalidraw-02ba0cb2`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/23`。
- `tools-platforms-mermaid-cc6f6e7e`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/24`。
- `tools-platforms-dbeaver-aa2fc821`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/26`。
- `tools-platforms-tableplus-9950f31a`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/27`。
- `tools-platforms-warp-14bec77a`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/28`。
- `tools-platforms-claude-code-11b1e88d`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/30`。
- `tools-platforms-opencode-ada070db`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/32`。官网品牌与另行opencode-ai/opencode仓库不能凭同名自动合并,需核来源与演化。
- `tools-platforms-gemini-cli-d077e5cc`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/31`。与另一Gemini CLI行指同一官网,属于重复介绍线索,不把两个资源ID登记为两程序。
- `tools-platforms-gemini-cli-row40-d077e5cc`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/38`。与前一Gemini CLI行同名同网址,原ID仍保留;还需与GitHub实现核具体版本。
- `tools-platforms-qwen-cli-a1b92a34`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/39`。
- `tools-platforms-bito-0c0619b5`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/41`。
- `tools-platforms-codeium-668488a9`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/42`。
- `tools-platforms-continue-edb7b3bf`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/43`。
- `tools-platforms-cursor-8ebf3977`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/59`。
- `tools-platforms-zed-07b4820e`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/62`。
- `tools-platforms-chatgpt-exporter-a03efe97`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/68`。
- `repo-rules-scaffolds-autogen-fc00be5e`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/5`。
- `repo-rules-scaffolds-browser-use-268f0f95`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/6`。
- `repo-rules-scaffolds-crewai-d9a56566`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/7`。
- `repo-rules-scaffolds-dspy-d8bdba82`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/8`。
- `repo-rules-scaffolds-langchain-089a07ab`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/9`。
- `repo-rules-scaffolds-pydantic-ai-cb69369e`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/10`。
- `repo-rules-scaffolds-smolagents-790ade5e`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/11`。
- `repo-rules-scaffolds-aider-adccc23a`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/12`。
- `repo-rules-scaffolds-claude-code-ef1ef8b6`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/13`。
- `repo-rules-scaffolds-cline-644a6623`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/14`。
- `repo-rules-scaffolds-continue-d5516851`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/15`。
- `repo-rules-scaffolds-gemini-cli-be45a9ce`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/16`。
- `repo-rules-scaffolds-gpt-engineer-eaa2e8a8`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/17`。
- `repo-rules-scaffolds-oh-my-opencode-0348827b`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/18`。
- `repo-rules-scaffolds-open-interpreter-a514262e`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/19`。
- `repo-rules-scaffolds-opencode-e1b762af`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/20`。仓库URL为opencode-ai/opencode;不据名称与opencode.ai官网或其他研究来源认定同一实现。
- `repo-rules-scaffolds-spec-kit-a9a40ae2`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/21`。
- `repo-rules-scaffolds-avante-nvim-29a0c49f`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/24`。
- `repo-rules-scaffolds-codecompanion-nvim-a6f68dc2`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/25`。
- `repo-rules-scaffolds-codeium-b0b85053`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/26`。此行指codeium.vim插件,不能与Codeium平台或Windsurf品牌合并。
- `repo-rules-scaffolds-copilot-vim-c06b7933`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/27`。
- `repo-rules-scaffolds-gitingest-ee7a3f76`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/41`。
- `repo-rules-scaffolds-jan-c4cdcb50`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/42`。
- `repo-rules-scaffolds-lmstudio-8b9fe81d`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/43`。
- `repo-rules-scaffolds-localai-ea1fbd8b`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/44`。
- `repo-rules-scaffolds-ollama-33222b83`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/45`。
- `repo-rules-scaffolds-repomix-5aa70b79`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/46`。
- `repo-rules-scaffolds-text-generation-webui-8ec0aebb`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/47`。
- `repo-rules-scaffolds-anythingllm-a3e8a5fc`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/55`。
- `repo-rules-scaffolds-dify-4f89d10f`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/56`。
- `repo-rules-scaffolds-privategpt-c615ca94`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/57`。
- `repo-rules-scaffolds-quivr-5cc2ab96`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/58`。
- `repo-rules-scaffolds-ragflow-c92a0918`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/59`。
- `repo-rules-scaffolds-devdocs-62126dcb`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/60`。
- `repo-rules-scaffolds-create-next-app-1bebc93a`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/65`。链接是CLI文档,文档不是程序;条目所指的生成器实现仍需版本核查。
- `repo-rules-scaffolds-create-t3-app-daf8fe4b`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/66`。
- `repo-rules-scaffolds-shadcn-ui-d7cf613e`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/68`。
- `repo-rules-scaffolds-vite-3e45b462`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/69`。
- `repo-rules-scaffolds-codex-e3c8be51`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/81`。
- `repo-rules-scaffolds-roo-code-36e77dcc`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/82`。原描述称archive且status=needs-review;仅保留源码候选,不冒称当前可用或已核归档状态。
- `network-payment-services-flclash-a974428b`:[原始资源行](../assets/external-resources/network-payment-services.yml) `/resources/1`。源码候选仅指代理客户端内容,不授权代理连接或实际网络配置。
### 托管入口候选
按原行服务功能与网址保留托管入口候选;网址不是实现、部署或设备证据,平台/模型/账号/实际调用仍需分离,未访问账户或核部署版本。
```text
+----------------------------------------------+----------------+----------+---------------------+--------------+
| 原资源ID | 名称 | 原状态 | 原验证状态 | 原风险标记 |
|----------------------------------------------+----------------+----------+---------------------+--------------|
| tools-platforms-apps-script-e6b8bbbb | Apps Script | active | imported-unverified | 无 |
| tools-platforms-google-sheets-32b827b0 | Google Sheets | active | imported-unverified | 无 |
| tools-platforms-mintlify-0f0b6833 | Mintlify | active | imported-unverified | 无 |
| tools-platforms-mermaid-chart-302f49f0 | Mermaid Chart | active | imported-unverified | 无 |
| tools-platforms-zread-6c1ee1d6 | Zread | active | imported-unverified | 无 |
| tools-platforms-notebooklm-e1b56ba1 | NotebookLM | active | imported-unverified | 无 |
| tools-platforms-kimi-53c18eae | Kimi | active | imported-unverified | 无 |
| tools-platforms-chatglm-cn-ebc410ba | 智谱清言 | active | imported-unverified | 无 |
| tools-platforms-www-doubao-com-b4d6c78b | 豆包 | active | imported-unverified | 无 |
| tools-platforms-tongyi-aliyun-com-a528848f | 通义千问 | active | imported-unverified | 无 |
| tools-platforms-ai-studio-2cd869be | AI Studio | active | imported-unverified | 无 |
| tools-platforms-antigravity-528a772a | antigravity | active | imported-unverified | 无 |
| tools-platforms-chatgpt-935111f5 | ChatGPT | active | imported-unverified | 无 |
| tools-platforms-claude-13dd5e3a | Claude | active | imported-unverified | 无 |
| tools-platforms-gemini-dc8a36f7 | Gemini | active | imported-unverified | 无 |
| tools-platforms-bolt-new-06379d16 | Bolt.new | active | imported-unverified | 无 |
| tools-platforms-devin-f5a69caf | Devin | active | imported-unverified | 无 |
| tools-platforms-lovable-5eb584a1 | Lovable | active | imported-unverified | 无 |
| tools-platforms-replit-agent-bbd1c2ac | Replit Agent | active | imported-unverified | 无 |
| tools-platforms-v0-by-vercel-fe818ef0 | v0 by Vercel | active | imported-unverified | 无 |
| repo-rules-scaffolds-github-e755441d | GitHub | active | imported-unverified | 无 |
| repo-rules-scaffolds-github-copilot-102fb5f8 | GitHub Copilot | active | imported-unverified | 无 |
+----------------------------------------------+----------------+----------+---------------------+--------------+
```
- `tools-platforms-apps-script-e6b8bbbb`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/2`。
- `tools-platforms-google-sheets-32b827b0`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/8`。
- `tools-platforms-mintlify-0f0b6833`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/14`。
- `tools-platforms-mermaid-chart-302f49f0`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/10`。
- `tools-platforms-zread-6c1ee1d6`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/16`。
- `tools-platforms-notebooklm-e1b56ba1`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/25`。
- `tools-platforms-kimi-53c18eae`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/33`。仅保留平台网址候选;Kimi K2.5能力描述与服务实现/实际加载模型未核。
- `tools-platforms-chatglm-cn-ebc410ba`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/34`。平台与GLM-4描述不作为同一对象/版本证据。
- `tools-platforms-www-doubao-com-b4d6c78b`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/35`。模型与聊天客户端品牌并置,当前只保留网页入口候选。
- `tools-platforms-tongyi-aliyun-com-a528848f`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/36`。Qwen模型、聊天服务及免费额度声明分别核,不继承“免费”或能力主张。
- `tools-platforms-ai-studio-2cd869be`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/37`。AI Studio入口、Gemini模型与免费额度不是同一实体。
- `tools-platforms-antigravity-528a772a`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/40`。
- `tools-platforms-chatgpt-935111f5`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/45`。保留对话入口候选,不据GPT-5.1/支持Codex描述批准具体模型或CLI版本。
- `tools-platforms-claude-13dd5e3a`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/46`。保留平台入口候选,不沿用Opus4.6能力/Artifacts宣传为实现效果。
- `tools-platforms-gemini-dc8a36f7`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/47`。模型名、免费额度与长上下文宣传未核,网页入口与模型内容分开。
- `tools-platforms-bolt-new-06379d16`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/63`。
- `tools-platforms-devin-f5a69caf`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/64`。
- `tools-platforms-lovable-5eb584a1`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/65`。
- `tools-platforms-replit-agent-bbd1c2ac`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/66`。
- `tools-platforms-v0-by-vercel-fe818ef0`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/67`。
- `repo-rules-scaffolds-github-e755441d`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/2`。
- `repo-rules-scaffolds-github-copilot-102fb5f8`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/71`。订阅/服务入口与copilot.vim插件、模型或免费资格分别核,原免费描述未核。
### 排除:资料/规约内容
当前条目所指为知识、教程、索引、规则、提示词或模板内容,不作为法器程序登记;不删除原资源,也不断言整个仓库没有程序,其内具体实现须另选来源。
```text
+---------------------------------------------------------------------+----------------------------------------+--------------+---------------------+------------------------+
| 原资源ID | 名称 | 原状态 | 原验证状态 | 原风险标记 |
|---------------------------------------------------------------------+----------------------------------------+--------------+---------------------+------------------------|
| tools-platforms-prompt-jsonl-8e9b2066 | prompt_jsonl | needs-review | imported-unverified | non-url-locator |
| tools-platforms-bilibili-23287176 | Bilibili | active | imported-unverified | 无 |
| tools-platforms-z-library-31b0d982 | Z-Library | active | imported-unverified | access-legality-review |
| repo-rules-scaffolds-vibe-coding-e16848e0 | Vibe Coding 指南 | active | imported-unverified | 无 |
| repo-rules-scaffolds-github-com-e0a40b2e | 开发者基础知识库 | active | imported-unverified | 无 |
| repo-rules-scaffolds-mcaf-47f07717 | MCAF | active | imported-unverified | 无 |
| repo-rules-scaffolds-github-topics-bcc7e192 | GitHub Topics | active | imported-unverified | 无 |
| repo-rules-scaffolds-github-trending-d46be94c | GitHub Trending | active | imported-unverified | 无 |
| repo-rules-scaffolds-awesome-mcp-servers-d91d6430 | awesome-mcp-servers | active | imported-unverified | 无 |
| repo-rules-scaffolds-2025-ai-engineer-reading-list-70f4fbd3 | 2025 AI Engineer Reading List | active | imported-unverified | 无 |
| repo-rules-scaffolds-ai-547bb859 | AI 编程最佳实践 | active | imported-unverified | 无 |
| repo-rules-scaffolds-ai-engineering-d04a5b40 | ai-engineering | active | imported-unverified | 无 |
| repo-rules-scaffolds-awesome-explorables-2cedba5b | awesome-explorables | active | imported-unverified | 无 |
| repo-rules-scaffolds-awesome-llm-02e83378 | awesome-llm | active | imported-unverified | 无 |
| repo-rules-scaffolds-generative-ai-for-beginners-3b1db321 | generative-ai-for-beginners | active | imported-unverified | 无 |
| repo-rules-scaffolds-llm-course-9227aca8 | llm-course | active | imported-unverified | 无 |
| repo-rules-scaffolds-lovable-for-beginners-38de2782 | lovable-for-beginners | active | imported-unverified | 无 |
| repo-rules-scaffolds-prompt-engineering-guide-5130a915 | prompt-engineering-guide | active | imported-unverified | 无 |
| repo-rules-scaffolds-vibe-vibe-c80a5961 | vibe-vibe | active | imported-unverified | 无 |
| repo-rules-scaffolds-awesome-chatgpt-prompts-ebaf3df7 | awesome-chatgpt-prompts | active | imported-unverified | 无 |
| repo-rules-scaffolds-awesome-chatgpt-prompts-zh-966cbb5b | awesome-chatgpt-prompts-zh | active | imported-unverified | 无 |
| repo-rules-scaffolds-claude-code-system-prompts-3f0438e1 | claude-code-system-prompts | active | imported-unverified | 无 |
| repo-rules-scaffolds-system-prompts-and-models-of-ai-tools-8290b642 | system-prompts-and-models-of-ai-tools | active | imported-unverified | 无 |
| repo-rules-scaffolds-awesome-cursorrules-7f259f16 | awesome-cursorrules | active | imported-unverified | 无 |
| repo-rules-scaffolds-cursor-directory-807839d9 | cursor.directory | active | imported-unverified | 无 |
| repo-rules-scaffolds-dotcursorrules-ad20d456 | dotcursorrules | active | imported-unverified | 无 |
| repo-rules-scaffolds-langgpt-d6b7fb87 | LangGPT | active | imported-unverified | 无 |
| repo-rules-scaffolds-awesome-chatgpt-prompts-4c4b8064 | Awesome ChatGPT Prompts | active | imported-unverified | 无 |
| repo-rules-scaffolds-system-prompts-b5948bc8 | System Prompts 仓库 | active | imported-unverified | 无 |
| repo-rules-scaffolds-easy-vibe-3c217e96 | datawhalechina/easy-vibe | active | imported-unverified | 无 |
| repo-rules-scaffolds-ai-guide-c12bbbfd | liyupi/ai-guide | active | imported-unverified | 无 |
| repo-rules-scaffolds-vibe-coding-guide-cf65840a | wendy7756/vibe-coding-guide | active | imported-unverified | 无 |
| repo-rules-scaffolds-ai-coding-c221421b | Daotin/ai-coding | active | imported-unverified | 无 |
| repo-rules-scaffolds-vibe-coding-skill-a5e7c42d | earyantLe/vibe-coding-skill | active | imported-unverified | 无 |
| repo-rules-scaffolds-awesome-vibe-coding-e5ab67eb | filipecalegario/awesome-vibe-coding | active | imported-unverified | 无 |
| repo-rules-scaffolds-awesome-vibe-coding-e3ea2b5b | ai-for-developers/awesome-vibe-coding | active | imported-unverified | 无 |
| repo-rules-scaffolds-claude-code-best-practice-01224898 | shanraisshan/claude-code-best-practice | active | imported-unverified | 无 |
| repo-rules-scaffolds-awesome-claude-code-5e3406a1 | hesreallyhim/awesome-claude-code | active | imported-unverified | 无 |
+---------------------------------------------------------------------+----------------------------------------+--------------+---------------------+------------------------+
```
- `tools-platforms-prompt-jsonl-8e9b2066`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/1`。
- `tools-platforms-bilibili-23287176`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/3`。
- `tools-platforms-z-library-31b0d982`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/12`。按本条“电子书资源”所指排除程序登记;保留access-legality-review,不批准访问/下载或许可。
- `repo-rules-scaffolds-vibe-coding-e16848e0`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/0`。
- `repo-rules-scaffolds-github-com-e0a40b2e`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/3`。
- `repo-rules-scaffolds-mcaf-47f07717`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/4`。
- `repo-rules-scaffolds-github-topics-bcc7e192`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/22`。
- `repo-rules-scaffolds-github-trending-d46be94c`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/23`。
- `repo-rules-scaffolds-awesome-mcp-servers-d91d6430`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/28`。
- `repo-rules-scaffolds-2025-ai-engineer-reading-list-70f4fbd3`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/30`。
- `repo-rules-scaffolds-ai-547bb859`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/31`。
- `repo-rules-scaffolds-ai-engineering-d04a5b40`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/32`。
- `repo-rules-scaffolds-awesome-explorables-2cedba5b`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/34`。
- `repo-rules-scaffolds-awesome-llm-02e83378`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/35`。
- `repo-rules-scaffolds-generative-ai-for-beginners-3b1db321`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/36`。
- `repo-rules-scaffolds-llm-course-9227aca8`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/37`。
- `repo-rules-scaffolds-lovable-for-beginners-38de2782`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/38`。
- `repo-rules-scaffolds-prompt-engineering-guide-5130a915`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/39`。
- `repo-rules-scaffolds-vibe-vibe-c80a5961`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/40`。
- `repo-rules-scaffolds-awesome-chatgpt-prompts-ebaf3df7`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/48`。与另一f/awesome-chatgpt-prompts行是重复来源线索;保原两ID,不登记两个工具。
- `repo-rules-scaffolds-awesome-chatgpt-prompts-zh-966cbb5b`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/49`。
- `repo-rules-scaffolds-claude-code-system-prompts-3f0438e1`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/50`。
- `repo-rules-scaffolds-system-prompts-and-models-of-ai-tools-8290b642`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/51`。
- `repo-rules-scaffolds-awesome-cursorrules-7f259f16`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/52`。
- `repo-rules-scaffolds-cursor-directory-807839d9`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/53`。
- `repo-rules-scaffolds-dotcursorrules-ad20d456`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/54`。
- `repo-rules-scaffolds-langgpt-d6b7fb87`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/61`。
- `repo-rules-scaffolds-awesome-chatgpt-prompts-4c4b8064`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/63`。原description=null;仅依原名称和仓库路径关联提示词合集线索,不补造产品能力。
- `repo-rules-scaffolds-system-prompts-b5948bc8`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/64`。原description=null;与另一同URL条目关联提示词来源线索,不声称模型参数或工具实现。
- `repo-rules-scaffolds-easy-vibe-3c217e96`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/72`。
- `repo-rules-scaffolds-ai-guide-c12bbbfd`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/73`。
- `repo-rules-scaffolds-vibe-coding-guide-cf65840a`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/74`。
- `repo-rules-scaffolds-ai-coding-c221421b`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/75`。
- `repo-rules-scaffolds-vibe-coding-skill-a5e7c42d`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/76`。
- `repo-rules-scaffolds-awesome-vibe-coding-e5ab67eb`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/79`。
- `repo-rules-scaffolds-awesome-vibe-coding-e3ea2b5b`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/80`。
- `repo-rules-scaffolds-claude-code-best-practice-01224898`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/83`。
- `repo-rules-scaffolds-awesome-claude-code-5e3406a1`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/84`。
### 排除:模型名称所指
当前名义所指是模型名称/版本,不当作法器程序;未取得参数/结构版本证据,不批准model-artifact实例,所附平台URL不证明模型与服务同一。
```text
+------------------------------------------+-----------------+--------------+---------------------+--------------+
| 原资源ID | 名称 | 原状态 | 原验证状态 | 原风险标记 |
|------------------------------------------+-----------------+--------------+---------------------+--------------|
| tools-platforms-claude-opus-4-6-f751380c | Claude Opus 4.6 | active | imported-unverified | 无 |
| tools-platforms-gpt-5-1-codex-1ad522a5 | GPT-5.1 Codex | needs-review | imported-unverified | missing-link |
| tools-platforms-gemini-2-5-pro-0661c69f | Gemini 2.5 Pro | needs-review | imported-unverified | missing-link |
| tools-platforms-dall-e-3-26dc583b | DALL-E 3 | active | imported-unverified | 无 |
+------------------------------------------+-----------------+--------------+---------------------+--------------+
```
- `tools-platforms-claude-opus-4-6-f751380c`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/4`。claude.ai平台不是Opus参数内容或具体模型版本的验证证据。
- `tools-platforms-gpt-5-1-codex-1ad522a5`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/6`。
- `tools-platforms-gemini-2-5-pro-0661c69f`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/7`。
- `tools-platforms-dall-e-3-26dc583b`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/48`。名称指模型,但网址是chatgpt.com;图像模型与其调用平台必须分离。
### 待核:对象身份
信息不足、对象名/目标不一致或复合包未展开,保留待核;不凭品牌、后缀、Skill/仓库包装复制软件身份,先明确具体模块、入口及版本。
```text
+----------------------------------------------------+--------------------------+--------------+---------------------+--------------+
| 原资源ID | 名称 | 原状态 | 原验证状态 | 原风险标记 |
|----------------------------------------------------+--------------------------+--------------+---------------------+--------------|
| tools-platforms-local-history-2b05b2c1 | Local History | needs-review | imported-unverified | missing-link |
| tools-platforms-partial-diff-4787875c | Partial Diff | needs-review | imported-unverified | missing-link |
| tools-platforms-zsh-d6d24951 | zsh | active | imported-unverified | 无 |
| tools-platforms-tabnine-0b2c09aa | Tabnine | active | imported-unverified | 无 |
| tools-platforms-elevenlabs-5a58d635 | ElevenLabs | active | imported-unverified | 无 |
| tools-platforms-ideogram-efb6a3b8 | Ideogram | active | imported-unverified | 无 |
| tools-platforms-kling-253d44f3 | Kling | active | imported-unverified | 无 |
| tools-platforms-leonardo-ai-26816634 | Leonardo AI | active | imported-unverified | 无 |
| tools-platforms-meshy-549051bc | Meshy | active | imported-unverified | 无 |
| tools-platforms-midjourney-976ad67d | Midjourney | active | imported-unverified | 无 |
| tools-platforms-runway-6c8ab136 | Runway | active | imported-unverified | 无 |
| tools-platforms-sora-3b1d49f7 | Sora | active | imported-unverified | 无 |
| tools-platforms-suno-fb9344c5 | Suno | active | imported-unverified | 无 |
| tools-platforms-udio-0d39f909 | Udio | active | imported-unverified | 无 |
| tools-platforms-kiro-47d2b0fc | Kiro | active | imported-unverified | 无 |
| tools-platforms-windsurf-fdd489a7 | Windsurf | active | imported-unverified | 无 |
| repo-rules-scaffolds-scientific-skills-0f3f6b96 | scientific-skills | active | imported-unverified | 无 |
| repo-rules-scaffolds-mcp-servers-5d60dee4 | mcp-servers | active | imported-unverified | 无 |
| repo-rules-scaffolds-ai-for-grant-writing-0a634380 | ai-for-grant-writing | active | imported-unverified | 无 |
| repo-rules-scaffolds-fastapi-template-c97cc061 | fastapi-template | active | imported-unverified | 无 |
| repo-rules-scaffolds-ai-coding-lab-6dc927c2 | luzhenqian/ai-coding-lab | active | imported-unverified | 无 |
| repo-rules-scaffolds-cs146s-cn-eaea3651 | ShouZhengAI/CS146S_CN | active | imported-unverified | 无 |
+----------------------------------------------------+--------------------------+--------------+---------------------+--------------+
```
- `tools-platforms-local-history-2b05b2c1`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/9`。缺链接;同名插件可能有多个实现,需厂商/仓库和版本。
- `tools-platforms-partial-diff-4787875c`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/11`。缺链接;需补具体插件来源,保留missing-link与needs-review。
- `tools-platforms-zsh-d6d24951`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/29`。名称是zsh,但网址指ohmyz.sh;Shell程序与配置框架需消歧,不按标题选择软件身份。
- `tools-platforms-tabnine-0b2c09aa`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/44`。
- `tools-platforms-elevenlabs-5a58d635`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/49`。
- `tools-platforms-ideogram-efb6a3b8`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/50`。
- `tools-platforms-kling-253d44f3`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/51`。
- `tools-platforms-leonardo-ai-26816634`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/52`。
- `tools-platforms-meshy-549051bc`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/53`。
- `tools-platforms-midjourney-976ad67d`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/54`。
- `tools-platforms-runway-6c8ab136`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/55`。
- `tools-platforms-sora-3b1d49f7`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/56`。
- `tools-platforms-suno-fb9344c5`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/57`。
- `tools-platforms-udio-0d39f909`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/58`。
- `tools-platforms-kiro-47d2b0fc`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/60`。
- `tools-platforms-windsurf-fdd489a7`:[原始资源行](../assets/external-resources/tools-platforms.yml) `/resources/61`。
- `repo-rules-scaffolds-scientific-skills-0f3f6b96`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/1`。Skill集合可能包含方法与脚本,需逐实际内容选区;集合自身不直接注册成一件软件。
- `repo-rules-scaffolds-mcp-servers-5d60dee4`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/29`。服务器集合需按独立实现选区,不把MCP协议、多个示例、部署和整仓库作同一实例。
- `repo-rules-scaffolds-ai-for-grant-writing-0a634380`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/33`。
- `repo-rules-scaffolds-fastapi-template-c97cc061`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/67`。模板可能包含可执行应用或生成器,须分清模板内容、应用源码与新生成实例。
- `repo-rules-scaffolds-ai-coding-lab-6dc927c2`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/77`。项目实战复合仓库包含多种项目类型,不能把教程或整个仓库纳为一程序。
- `repo-rules-scaffolds-cs146s-cn-eaea3651`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/78`。课程、作业与工具混合,需明确具体程序选区。
### 关联已审本地来源
原仓库网址与已审本地submodule来源对应,仅建立来源参照,不新增重复法器;不把未版本化仓库入口等同本次固定源码版本。
```text
+--------------------------------------+---------------+----------+---------------------+--------------+
| 原资源ID | 名称 | 原状态 | 原验证状态 | 原风险标记 |
|--------------------------------------+---------------+----------+---------------------+--------------|
| repo-rules-scaffolds-skills-cd973130 | Skills 制作器 | active | imported-unverified | 无 |
| repo-rules-scaffolds-tmux-9f36981a | tmux | active | imported-unverified | 无 |
+--------------------------------------+---------------+----------+---------------------+--------------+
```
- `repo-rules-scaffolds-skills-cd973130`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/62`。 对应本地来源参照 faqi-skill-seekers;不把未版本化的仓库URL等同该固定源码版本。
- `repo-rules-scaffolds-tmux-9f36981a`:[原始资源行](../assets/external-resources/repo-rules-scaffolds.yml) `/resources/70`。 对应本地来源参照 faqi-tmux;不把未版本化的仓库URL等同该固定源码版本。
### 待核:受限服务所指
网络/金融服务品牌、推广入口或账号产品所指待核;保留全部风险与原状态,不批准交易、注册、权限、设备或运行实例。
```text
+-----------------------------------------------------+--------------+----------+---------------------+-----------------------------------------------------+
| 原资源ID | 名称 | 原状态 | 原验证状态 | 原风险标记 |
|-----------------------------------------------------+--------------+----------+---------------------+-----------------------------------------------------|
| network-payment-services-www-bsmkweb-com-0960fe59 | 币安支付 | active | imported-unverified | referral-or-tracking-link, financial-service-review |
| network-payment-services-xn-9kqz23b19z-com-a271e5a7 | 网络服务 | active | imported-unverified | referral-or-tracking-link |
| network-payment-services-bybit-81d32c91 | Bybit 虚拟卡 | active | imported-unverified | referral-or-tracking-link, financial-service-review |
+-----------------------------------------------------+--------------+----------+---------------------+-----------------------------------------------------+
```
- `network-payment-services-www-bsmkweb-com-0960fe59`:[原始资源行](../assets/external-resources/network-payment-services.yml) `/resources/0`。资源自称“币安支付”,网址为bsmkweb.com并带ref;品牌/网址所指一致性未核,不据名称认定官方服务。
- `network-payment-services-xn-9kqz23b19z-com-a271e5a7`:[原始资源行](../assets/external-resources/network-payment-services.yml) `/resources/2`。注册推广入口只有泛化云服务说明,实际服务、提供方与合规边界待核。
- `network-payment-services-bybit-81d32c91`:[原始资源行](../assets/external-resources/network-payment-services.yml) `/resources/3`。卡产品/账户/支付过程与网站或程序内容分开,不触发开户或支付。
## 来源与选区
选区是一基半开区间 `[start,end)`;SHA-256对应固定Git blob的完整字节与选区原字节,不归一化或复制源码。
校验还核当前文件字节及submodule指针;源码存在和指针匹配不等于完整仓库语义、许可证或能力已审。
### S01
[来源文件](../tools/prompts-library/README.md):`tools/prompts-library/README.md`。
- 初审用途:`support`(人工标注,不是自动语义批准)。
- 仓库:`.`;Git修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
- 完整文件SHA-256:`4c2d5f97a6cfa67e033e166676d12eeaab6a562fa83c39b0f2474ae2afbcdae2`。
- 选区:`[1,95)`;SHA-256:`4c2d5f97a6cfa67e033e166676d12eeaab6a562fa83c39b0f2474ae2afbcdae2`。
### S02
[来源文件](../tools/prompts-library/main.py):`tools/prompts-library/main.py`。
- 初审用途:`implementation`(人工标注,不是自动语义批准)。
- 仓库:`.`;Git修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
- 完整文件SHA-256:`ed0113d3ecbe9c9d4ca48ee7dde2c76c9a6fd1f54a1ae890fd3689d617347691`。
- 选区:`[625,689)`;SHA-256:`757b82c3bba30f1d62359c39f7c110d425463326e854acef2de085f14d90cf6d`。
### S03
[来源文件](../tools/chat-vault/README.md):`tools/chat-vault/README.md`。
- 初审用途:`support`(人工标注,不是自动语义批准)。
- 仓库:`.`;Git修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
- 完整文件SHA-256:`938ddcce3ba06fad18a05d072cfc47cb8427064c72745f557e4b782de8a2c753`。
- 选区:`[1,104)`;SHA-256:`deecf873b9392e27cbae073fd6f75fcb1865af9d6461232dd517ba945cafa3d1`。
### S04
[来源文件](../tools/chat-vault/services/chat-vault/src/main.py):`tools/chat-vault/services/chat-vault/src/main.py`。
- 初审用途:`implementation`(人工标注,不是自动语义批准)。
- 仓库:`.`;Git修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
- 完整文件SHA-256:`561c611909714d358f9968c45078f037bd46cdb037969d598cfed27d94affd72`。
- 选区:`[65,107)`;SHA-256:`43279c5004b34ef3de79da4dd5c103e741f0a9ed47683e7c262a79bd35f8b551`。
### S05
[来源文件](../tools/config/.codex/README.md):`tools/config/.codex/README.md`。
- 初审用途:`support`(人工标注,不是自动语义批准)。
- 仓库:`.`;Git修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
- 完整文件SHA-256:`4cd23bbafa069d8bd651e9997951ac99252cf13310d1c9fda14dcf01de818a53`。
- 选区:`[1,78)`;SHA-256:`b290d2842b0290ee9701e41c046634d2cd90684c0c53d1e97e3781a05d695e87`。
### S06
[来源文件](../tools/config/.codex/install.sh):`tools/config/.codex/install.sh`。
- 初审用途:`implementation`(人工标注,不是自动语义批准)。
- 仓库:`.`;Git修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
- 完整文件SHA-256:`a2ba28d5a48d46aa7d508408519be117f8726c8d66e632d8736deab9175b04a4`。
- 选区:`[43,100)`;SHA-256:`99ccf88c8d5ec6f7b7eda53fc4fd3af29a0ca08d9eef74ad3283cdf649d6a7cf`。
### S07
[来源文件](../skills/auto-skill/README.md):`skills/auto-skill/README.md`。
- 初审用途:`support`(人工标注,不是自动语义批准)。
- 仓库:`.`;Git修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
- 完整文件SHA-256:`2fd869316c0469d9c4079cd9a19c41698b501bca6ddd2b6cc03617e3f96218f0`。
- 选区:`[1,21)`;SHA-256:`2fd869316c0469d9c4079cd9a19c41698b501bca6ddd2b6cc03617e3f96218f0`。
### S08
[来源文件](../skills/auto-skill/scripts/create-skill.sh):`skills/auto-skill/scripts/create-skill.sh`。
- 初审用途:`implementation`(人工标注,不是自动语义批准)。
- 仓库:`.`;Git修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
- 完整文件SHA-256:`3eb16d2f24cc2af3e7d7a0f4175e06b0258504795d079ba0920be9dd75f2f7fc`。
- 选区:`[80,182)`;SHA-256:`e769660515ada48debbd022fdfb85ec934b4d3413cf3501e06ef075b6d36b1a4`。
### S09
[来源文件](../skills/auto-skill/scripts/validate-skill.sh):`skills/auto-skill/scripts/validate-skill.sh`。
- 初审用途:`implementation`(人工标注,不是自动语义批准)。
- 仓库:`.`;Git修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
- 完整文件SHA-256:`deb5cf2529a93c87c8b7323b55ffc6d7798e6b59652351ba795340ac8c0061c9`。
- 选区:`[67,160)`;SHA-256:`dbd460af6a32307709a11281c7b90925b9fd9820128eb04881c80c020a99f0dc`。
### S10
[来源文件](../skills/auto-skill/scripts/skill-seekers.sh):`skills/auto-skill/scripts/skill-seekers.sh`。
- 初审用途:`implementation`(人工标注,不是自动语义批准)。
- 仓库:`.`;Git修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
- 完整文件SHA-256:`fdbf73b1faa1a0f445663b5c7c1c9792bbfb6dcdf5f5308198503e14ea0c64dc`。
- 选区:`[28,66)`;SHA-256:`f678142dddda161372feb5c5af96bbbf5e1b3e76b9e2c7dc905a4d1ba18070f2`。
### S11
[来源文件](../skills/auto-tmux/README.md):`skills/auto-tmux/README.md`。
- 初审用途:`support`(人工标注,不是自动语义批准)。
- 仓库:`.`;Git修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
- 完整文件SHA-256:`d21ca4f1c4adb6a799a76f7a7446b1ebca70d2402f73e80600cda1c2a6d24c25`。
- 选区:`[1,18)`;SHA-256:`0c0e46b950949789a6b85addd85f3a9ec0b2945e6a44134f82c7b46acc59b308`。
### S12
[来源文件](../skills/auto-tmux/scripts/auto-tmux.sh):`skills/auto-tmux/scripts/auto-tmux.sh`。
- 初审用途:`implementation`(人工标注,不是自动语义批准)。
- 仓库:`.`;Git修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
- 完整文件SHA-256:`f473fddada7a7f5fd85afe94deccd16e2aba26195423dc87afbac176315b6567`。
- 选区:`[701,725)`;SHA-256:`701db6430b20faa4bf2477001f584b15a1dea31e6c4a9d32747be343988dd3c2`。
### S13
[来源文件](../skills/auto-tmux/scripts/auto-tmux.sh):`skills/auto-tmux/scripts/auto-tmux.sh`。
- 初审用途:`support`(人工标注,不是自动语义批准)。
- 仓库:`.`;Git修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
- 完整文件SHA-256:`f473fddada7a7f5fd85afe94deccd16e2aba26195423dc87afbac176315b6567`。
- 选区:`[65,95)`;SHA-256:`a745cc41ed28208894954fccadc603a2f11e4e7888bd9df4f85d1dc0c84ca564`。
### S14
[来源文件](../tools/external/Skill_Seekers-development/pyproject.toml):`tools/external/Skill_Seekers-development/pyproject.toml`。
- 初审用途:`support`(人工标注,不是自动语义批准)。
- 仓库:`tools/external/Skill_Seekers-development`;Git修订:`26638b248279a3b001b651475e0f28975f5ff069`。
- 完整文件SHA-256:`40820d20d8f56c1dc24c8f432141fa438d54473acbfecfa716fc9d188cbc8294`。
- 选区:`[1,15)`;SHA-256:`8fc8e7df82f18edc826b13f63f097661c1f40b19d2e7ab576e25854b453919e3`。
### S15
[来源文件](../tools/external/Skill_Seekers-development/pyproject.toml):`tools/external/Skill_Seekers-development/pyproject.toml`。
- 初审用途:`support`(人工标注,不是自动语义批准)。
- 仓库:`tools/external/Skill_Seekers-development`;Git修订:`26638b248279a3b001b651475e0f28975f5ff069`。
- 完整文件SHA-256:`40820d20d8f56c1dc24c8f432141fa438d54473acbfecfa716fc9d188cbc8294`。
- 选区:`[301,327)`;SHA-256:`ac6771e334ffad6fe8cb4934797de797375c87d4c33a16afff72de8d1642893f`。
### S16
[来源文件](../tools/external/Skill_Seekers-development/src/skill_seekers/cli/main.py):`tools/external/Skill_Seekers-development/src/skill_seekers/cli/main.py`。
- 初审用途:`implementation`(人工标注,不是自动语义批准)。
- 仓库:`tools/external/Skill_Seekers-development`;Git修订:`26638b248279a3b001b651475e0f28975f5ff069`。
- 完整文件SHA-256:`8c02660dacd304f51fe8c4a9685d3f6d5324a7eef7779b6baa7325827bf01985`。
- 选区:`[39,116)`;SHA-256:`60fba27fbe444499a1e95b5dc69edc8b0d34d6c26a30039dcbf9d9205ffdfb14`。
### S17
[来源文件](../tools/external/.tmux/README.md):`tools/external/.tmux/README.md`。
- 初审用途:`support`(人工标注,不是自动语义批准)。
- 仓库:`tools/external/.tmux`;Git修订:`87dcd13a28aeb5f18baee630e24b3f5765ae3a4f`。
- 完整文件SHA-256:`10b0cca6bb2a4ab7af39d76d27f51b91ca1df4dead015315400041695c9471e7`。
- 选区:`[9,78)`;SHA-256:`243d5ab2936723c61f781dd6906e61de92cceea6069e570ca107b6c19236aeb7`。
### S18
[来源文件](../tools/external/.tmux/.tmux.conf):`tools/external/.tmux/.tmux.conf`。
- 初审用途:`implementation`(人工标注,不是自动语义批准)。
- 仓库:`tools/external/.tmux`;Git修订:`87dcd13a28aeb5f18baee630e24b3f5765ae3a4f`。
- 完整文件SHA-256:`6807d44735b7b11e64c4488a0c3fdcbd2809cc73efedcc349d098e80a690aeeb`。
- 选区:`[150,190)`;SHA-256:`e39dd4f98da410b88e110772d21d1eb14d3bfb6e2c6e8c36e2cb19129d9c98f8`。
### S19
[来源文件](../tools/external/.tmux/.tmux.conf):`tools/external/.tmux/.tmux.conf`。
- 初审用途:`support`(人工标注,不是自动语义批准)。
- 仓库:`tools/external/.tmux`;Git修订:`87dcd13a28aeb5f18baee630e24b3f5765ae3a4f`。
- 完整文件SHA-256:`6807d44735b7b11e64c4488a0c3fdcbd2809cc73efedcc349d098e80a690aeeb`。
- 选区:`[1829,1891)`;SHA-256:`3065f39bd62e8cb3bb4095dfaf9784840368d5760137ad01d3f96eb55ede68a1`。
### S20
[来源文件](../tools/external/tmux/README):`tools/external/tmux/README`。
- 初审用途:`support`(人工标注,不是自动语义批准)。
- 仓库:`tools/external/tmux`;Git修订:`615c27c11789948df2db09e113e882f82dfb3e1c`。
- 完整文件SHA-256:`9fb75e6c7f10c25b73e41b8214336d0dc2acfbe4c99984514ccaf7327192d53e`。
- 选区:`[1,20)`;SHA-256:`68e51dd5a0148fa1d22f5c7565d3da74dc6619207d1c5238658d5fd873c63e5b`。
### S21
[来源文件](../tools/external/tmux/tmux.c):`tools/external/tmux/tmux.c`。
- 初审用途:`implementation`(人工标注,不是自动语义批准)。
- 仓库:`tools/external/tmux`;Git修订:`615c27c11789948df2db09e113e882f82dfb3e1c`。
- 完整文件SHA-256:`58a9bef0d1d424fd2e2a79c6d998dab96aab81ee771b7c2653928451f3bf11a8`。
- 选区:`[350,492)`;SHA-256:`cd3c886c9a155f70dcddaeec88b4a86253c565b2e18753327f83446d92a7e8f4`。
### S22
[来源文件](../tools/external/claude-official-skills/README.md):`tools/external/claude-official-skills/README.md`。
- 初审用途:`support`(人工标注,不是自动语义批准)。
- 仓库:`tools/external/claude-official-skills`;Git修订:`1ed29a03dc852d30fa6ef2ca53a67dc2c2c2c563`。
- 完整文件SHA-256:`d7c5c2f9b248c7c0b31f093cf22b9a7407f5b093c8ca9ebe75a5b6845b02b76e`。
- 选区:`[1,28)`;SHA-256:`672c572d34a077a534754b7311d19db68a8402c86fe64e35be5e80da3ae7453a`。
### S23
[来源文件](../tools/external/claude-official-skills/skills/skill-creator/scripts/init_skill.py):`tools/external/claude-official-skills/skills/skill-creator/scripts/init_skill.py`。
- 初审用途:`implementation`(人工标注,不是自动语义批准)。
- 仓库:`tools/external/claude-official-skills`;Git修订:`1ed29a03dc852d30fa6ef2ca53a67dc2c2c2c563`。
- 完整文件SHA-256:`cf12790f1d4958799281920d599f56aea38fb5c26e2812a61dd740bf3d4b6b99`。
- 选区:`[194,304)`;SHA-256:`f3ef6ff82946a9596d5cacfc1ed0405765187e5ffec5a4ede6c15f5e8dd248dd`。
### S24
[来源文件](../tools/external/html-tools-main/README.md):`tools/external/html-tools-main/README.md`。
- 初审用途:`support`(人工标注,不是自动语义批准)。
- 仓库:`.`;Git修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
- 完整文件SHA-256:`6aeb3fbdd0ad484f15b44b8c0e26caa7228cede0a659292893617d19d99b6df3`。
- 选区:`[1,18)`;SHA-256:`c58731ae7c6b900a386e03571782503c366959db1a623c21c7de2a08fc04442d`。
### S25
[来源文件](../tools/external/html-tools-main/clean_epub_css.html):`tools/external/html-tools-main/clean_epub_css.html`。
- 初审用途:`implementation`(人工标注,不是自动语义批准)。
- 仓库:`.`;Git修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
- 完整文件SHA-256:`1716a7ea5f4bf4837bc044c9c164e58b3dbb04d492f677b7766b506edd1c0d2a`。
- 选区:`[317,405)`;SHA-256:`4d07dac2850cbf4860f628b5c26d52976aea9cc8dd981851da5141dc7b18a7cb`。
### S26
[来源文件](../tools/external/html-tools-main/markdown-bianjiqi.html):`tools/external/html-tools-main/markdown-bianjiqi.html`。
- 初审用途:`implementation`(人工标注,不是自动语义批准)。
- 仓库:`.`;Git修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
- 完整文件SHA-256:`e4c76015749bf42e898412ec7b8e1229c847575ef740bcf6900311d7212dc61e`。
- 选区:`[181,260)`;SHA-256:`cbc5a64c27eefb0801c95a87cbf4ed0a149e25000a41e53e3387eb274ca40894`。
### S27
[来源文件](../tools/external/html-tools-main/task%20card%20generator.html):`tools/external/html-tools-main/task card generator.html`。
- 初审用途:`implementation`(人工标注,不是自动语义批准)。
- 仓库:`.`;Git修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
- 完整文件SHA-256:`0eba89d2f674bb0bc26690c4e406f99b7a2bcd40ecd838c1c19e1f970f7b5670`。
- 选区:`[217,284)`;SHA-256:`8b710f5b6f6b1c1f0fcaafead15e6f63e5800684a1c8ae49dad6a7681659eb19`。
### S28
[来源文件](../tools/external/html-tools-main/xhs%20graphic%20production.html):`tools/external/html-tools-main/xhs graphic production.html`。
- 初审用途:`implementation`(人工标注,不是自动语义批准)。
- 仓库:`.`;Git修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
- 完整文件SHA-256:`1835e29563d4cf7f01cb9cf837d3f57d1b2e48304cc202e1061240bccf6e7e0e`。
- 选区:`[96,147)`;SHA-256:`52b9c7a45cd3d5c8409ee1cde59c31296b608e35c0d668c2833bd7b35639a0f8`。
### S29
[来源文件](../tools/external/html-tools-main/xhs%20graphic%20production%20-%201.0.html):`tools/external/html-tools-main/xhs graphic production - 1.0.html`。
- 初审用途:`implementation`(人工标注,不是自动语义批准)。
- 仓库:`.`;Git修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
- 完整文件SHA-256:`14a60fa5cc9fa3b7a8beac146277c1ef15729eb5e18cd7889fbcf498d5d1411a`。
- 选区:`[177,312)`;SHA-256:`abe37a7bfbc4b1035be0ff037decbc49b6f336a59e8b8e5501e810d721f45ab9`。
### S30
[来源文件](../tools/external/my-nvim/README.md):`tools/external/my-nvim/README.md`。
- 初审用途:`support`(人工标注,不是自动语义批准)。
- 仓库:`.`;Git修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
- 完整文件SHA-256:`905c3a248d5208f001f3eb6924beaf768454c70cdbc4c41cf67e906dba7ca8c0`。
- 选区:`[1,36)`;SHA-256:`5476e2380b6412a4d29ce37ad4ded76cd39bc5928e5cf716d98749f3ae8a31ea`。
### S31
[来源文件](../tools/external/my-nvim/nvim-config/init.lua):`tools/external/my-nvim/nvim-config/init.lua`。
- 初审用途:`support`(人工标注,不是自动语义批准)。
- 仓库:`.`;Git修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
- 完整文件SHA-256:`3b2d6e9976a515b7c8df08ed7c7f61a5751e9c08a6ff5579d621b87312c9e2c6`。
- 选区:`[1,3)`;SHA-256:`3b2d6e9976a515b7c8df08ed7c7f61a5751e9c08a6ff5579d621b87312c9e2c6`。
### S32
[来源文件](../tools/external/my-nvim/nvim-config/lua/config/lazy.lua):`tools/external/my-nvim/nvim-config/lua/config/lazy.lua`。
- 初审用途:`implementation`(人工标注,不是自动语义批准)。
- 仓库:`.`;Git修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
- 完整文件SHA-256:`5fd03a47dc423a46b7c141149d35ba20cbbd96eb2c90f48f74dbff94c202802e`。
- 选区:`[1,56)`;SHA-256:`5fd03a47dc423a46b7c141149d35ba20cbbd96eb2c90f48f74dbff94c202802e`。
### S33
[来源文件](../tools/external/MCPlayerTransfer/README.md):`tools/external/MCPlayerTransfer/README.md`。
- 初审用途:`support`(人工标注,不是自动语义批准)。
- 仓库:`.`;Git修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
- 完整文件SHA-256:`f48b3081530011171ee6761115613c5eb7811a9ec3059cdec53e3b50c632f0e3`。
- 选区:`[1,47)`;SHA-256:`939c69119628dd9eea9c16461c41428db4e5faf6d7c9ab4024e7a2f8ffa0bce9`。
### S34
[来源文件](../tools/external/MCPlayerTransfer/main.py):`tools/external/MCPlayerTransfer/main.py`。
- 初审用途:`implementation`(人工标注,不是自动语义批准)。
- 仓库:`.`;Git修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
- 完整文件SHA-256:`11bfdb47774247c32ad8cd0de441d56a13a17e9c12bcb3e2d9e81895958e1450`。
- 选区:`[1,51)`;SHA-256:`11bfdb47774247c32ad8cd0de441d56a13a17e9c12bcb3e2d9e81895958e1450`。
### S35
[来源文件](../tools/external/XHS-image-to-PDF-conversion/README.md):`tools/external/XHS-image-to-PDF-conversion/README.md`。
- 初审用途:`support`(人工标注,不是自动语义批准)。
- 仓库:`.`;Git修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
- 完整文件SHA-256:`19f65c7b6afe56c57789a30d1aed3c214051474fd21ea97f1ec10cc1ec774f13`。
- 选区:`[21,51)`;SHA-256:`271e08cdfc793b500025c6d2f7d8e768a1ba6f5a03fe86b86f1aee5c5a2517de`。
### S36
[来源文件](../tools/external/XHS-image-to-PDF-conversion/pdf.py):`tools/external/XHS-image-to-PDF-conversion/pdf.py`。
- 初审用途:`implementation`(人工标注,不是自动语义批准)。
- 仓库:`.`;Git修订:`0a7fdf4ca54d2bb327dcdfc13e816da57ee9c4c2`。
- 完整文件SHA-256:`ee045272a0ba361676c1ee908758e7316e96438774716c79472fb05cc5055539`。
- 选区:`[17,120)`;SHA-256:`4b4eb47d3545b5bcba80384c1aa81cee4d973d006736ea7a664f69ef9b759e70`。
## 维护与未完成事项
```bash
make sync-faqi-catalog
make check-faqi-catalog
make test-faqi-catalog
```
检查复用jsonschema/PyYAML,表格复用tabulate;来源、ID、选区、范围或只读视图漂移均失败,不联网补证或静默升级。
此初审不维护等级、账户、设备、部署或运行证据。独立语义审查、运行/效果/许可核验、产品同一/版本演化及未逐模块展开的复合包仍待核。