tanmiworkbase
v0.1.0
Published
Workspace orchestration base toolkit.
Readme
TanmiWorkBase
TanmiWorkBase 是一个工作空间编排基础仓库。
它的职责只有三类:
- 定义工作空间的结构化规范
- 提供初始化与校验所需的模板
- 提供最小命令行工具,用于创建、检查、解释工作空间
它当前不承载以下能力:
- 不承载业务仓库源码
- 不承载运行时服务
- 不承载任务调度、状态机、页面界面、插件系统
- 不承载跨机器同步能力
四层结构
- 根级:
<workspace-root> - 项目级:
<workspace-root>/<project> - 需求级:
<workspace-root>/<project>/<index> - 仓库级:
<workspace-root>/<project>/<index>/<store>
当前定位
第一版先聚焦三件事:
- 规范文件与模板文件的组织方式
- 工作空间配置文件的字段草案
- 最小 CLI 骨架与后续实现边界
仓库结构
TanmiWorkBase/
├── AGENTS.md
├── CLAUDE.md
├── README.md
├── pyproject.toml
├── docs/
├── examples/
├── schemas/
├── src/
├── templates/
└── tests/首批命令草案
setupinit-projectinit-indexvalidatesynccmdcollapseexpandinspectgenerate-agentsdoctor
当前状态
本仓库目前处于实施草稿阶段。
请优先阅读以下文件:
docs/architecture.mddocs/implementation-draft.mdschemas/templates/examples/config-templates/
NPM 安装入口
本仓库准备以公开 NPM 包 tanmiworkbase 发布。NPM 包提供命令入口,实际运行现有 Python CLI。
安装方式:
npm install -g tanmiworkbase安装后可使用两个等价命令:
tanmiworkbase --help
wb --help运行要求:
- 本机需要安装 Python 3.11 或更高版本
- 本机需要安装 Node.js 18 或更高版本
- NPM 包会把命令参数透传给
tanmi_work_base.cli - 执行发布前检查需要本机安装
uv
发布前检查:
npm run test
npm run pack:check
npm run publish:check可直接编辑的 JSON 模板
如果你希望直接对着完整 JSON 改,不看 .j2 模板,可以优先修改这里:
examples/config-templates/workspace.config.template.jsonexamples/config-templates/project.config.template.jsonexamples/config-templates/index.config.template.json
这三份文件是“完整可编辑样板”,面向人阅读和修改。
templates/ 下的 .j2 文件仍然保留给工具生成使用。
当前字段口径已经收敛为:
- 三类配置都必须显式写
schemaVersion: "0.1" - 根级与项目级统一使用
description - 项目级
defaultStores保存项目默认仓库信息 storeType采用受控自由字符串,推荐值写在模板与文档中commands统一使用prepare、run、build、release四组数组- 需求级
stores默认只写覆盖项;如果是项目级未声明的临时仓库,则写完整定义
配置事实源分工:
schemas/是配置契约的唯一规则源examples/config-templates/是最新完整模板源README.md与docs/负责解释规则与使用方式tests/负责检查 schema、模板、样例和 CLI 输出是否一致
说明字段写法约定:
- 根级与项目级
description只写定位、长期协作关系和默认链路摘要 - 需求级
purpose只写本次需求的目标、联调对象和预期结果 - 具体命令写入
commands - 仓库、分支与 clone 策略写入
defaultStores或stores - 特殊限制写入
relations或extraRules
commands 当前边界约定:
commands是结构化动作清单,不是自动执行授权- 默认不会自动执行任何
commands - 人工可以通过
wb cmd run显式执行配置中登记的命令 prepare、run、build、release统一保留为人工决策动作- 任何 Git 写操作、发布动作、外部系统写操作都不属于默认可代劳范围
当前 CLI 的第一版实现进度:
setup:已实现第一版根级初始化init-project:已实现第一版项目级骨架初始化init-index:已实现第一版需求级骨架初始化validate:已实现inspect:已实现sync:已实现第一版静态同步cmd:已实现人工命令查看与执行collapse:已实现需求级声明仓库收起expand:已实现需求级声明仓库展开generate-agents:已实现第一版托管区块生成doctor:已实现第一版诊断汇总
setup 当前只做:
- 生成
.workspace-meta/workspace.config.json - 生成根级
README.md,用于长期维护说明与配置入口 - 通过
generate-agents生成根级 AI 入口文件;AGENTS.md是主维护入口,CLAUDE.md通过托管区块引用同级AGENTS.md - 已有冲突文件时直接失败,不覆盖现有内容
- 可选参数:
--description
setup 第一版安全初始化策略:
- 只初始化当前目录,不自动创建父目录
- 根级目标文件只要发生冲突就直接失败
- 不覆盖现有
README.md、AGENTS.md、CLAUDE.md、workspace.config.json - 不合并已有内容,也不自动清理现场
init-project 当前只做:
- 在 workspace 根级下创建
<projectId>/project.config.json - 在项目级目录创建项目级 AI 入口文件
- 输出完整的项目级后续引导
- 默认使用
projectId作为displayName - 需求目录仍由后续
init-index创建 - 可选参数:
--display-name、--description
补充说明:
init-project第一版生成的是待补充模板- 因为
defaultStores初始为空,刚生成的项目配置在补齐前可能无法通过完整语义校验 - 项目级 AI 入口文件的托管区块会在后续执行
generate-agents时按当前状态自动收缩 - 补
defaultStores时,需要逐仓确认clonePolicy - 拉取仓库时执行
sync获取当次提示;详细策略说明由wb guide clone-policy承载
init-index 当前只做:
- 在项目级目录下创建
<indexId>/index.config.json - 自动继承上层
projectId - 立即生成需求级 AI 入口文件
- 输出完整的需求级后续引导
- 第一版不再生成独立的
index.notes.md,也不创建仓库目录 - 可选参数:
--purpose
补充说明:
init-index第一版生成的是待补充模板- 因为
stores初始为空,刚生成的需求配置在补齐前可能无法通过完整语义校验 - 需求级待办与补充说明已经并入
AGENTS.md,后续执行generate-agents时会按当前状态自动收缩 - 如果
stores里新增完整仓库定义,也需要逐仓确认clonePolicy
sync 当前只做:
- 归一到需求级目录
- 基于当前配置与现场输出结构化同步计划
- 在
--apply时创建缺失的空目录 - 不自动处理复杂 Git 状态、分支收敛或命令执行
sync --json 当前固定输出:
- 顶层字段:
targetPath、level、normalizedIndexRoot、applyRequested、canApply、valid、validation、actions、errors、warnings、appliedPaths actions[*]字段:action、storeId、dirName、source、path、note、expectedBranch、remote、storeType、clonePolicy、commands、commandSummary、commandPlan、nextStepscommands与commandPlan用于展示动作细节,供 AI 或人工决定是否执行nextSteps用于表达当前仓库的建议后续动作,不表示工具会直接代劳
cmd 人工执行约定:
wb cmd list可在项目级、需求级、仓库级查看命令- 项目级只查看默认仓库命令,不直接执行
- 需求级执行格式:
wb cmd run <storeId> <stage> <name> - 仓库级执行格式:
wb cmd run <stage> <name>,也可显式写完整参数 stage只允许prepare、run、build、release- 默认执行前需要人工确认;
--yes可以跳过确认 release阶段默认需要输入release yes才继续
collapse / expand 仓库收起与展开约定:
- 只处理需求级
index.config.json中声明的代码仓库 - 非代码仓库内容保留在原位置,例如调试输出、日志、临时文档和资源目录
- 默认只预览;加
--apply后才会写入状态、生成补丁并移动仓库目录 - 状态文件写入
<index>/.workspace-meta/repo-collapse/ - 收起前会筛查未提交文件;单个文件不超过 2KB 的代码修改保存到
changes.patch - 单个文件超过 2KB 时不进入 patch;需要保留的文件按确认文件独立保存到
large-files/ - 超过 2KB 且明显属于依赖、构建产物、缓存、内嵌 Git 或 ignored 资源的内容默认不保存,预览与状态中只记录统计结果
- 超过 2KB 且不能自动判断用途的文件会阻止执行,需要先填写
--screening-decisions确认保存或忽略,并为保存项标注功能 - 存在本地提交且不能确认远端可恢复时,保存
local.bundle - 收起后自动刷新需求级 AI 入口文件,在
AGENTS.md中加入generated.repo-collapse恢复提示 - 展开时按
remote与clonePolicy重新克隆,再导入 bundle、应用 patch、复制独立大文件 - 展开目标目录已经存在时直接停止,避免覆盖本地内容
collapse 预览判断约定:
valid=true只表示工具具备执行条件,不等于业务上建议立即执行- 文本输出和 JSON 输出都只面向执行判断,不输出完整文件级明细
decision.recommendedAction表示下一步建议,例如先查看提示再执行summary汇总仓库数量、阻断数量、提示数量、干净仓库数量和存在修改的仓库数量size.estimatedFreedBytes表示收起仓库目录后预计释放的空间restorePlan.head表示展开时会恢复到收起前的提交,即使远端分支之后继续前进changeScreening.thresholdBytes=2048表示单文件 patch 上限changeScreening.summary汇总进入 patch、独立保存、默认忽略和待确认的文件数量与大小changeScreening.decisionTemplate是大文件确认模板;保存项需要填写functionLabelexcludedSummary汇总 ignored 内容数量、大小与分类,默认不保存依赖目录、构建产物、缓存和 ignored 资源excludedSummary.manualReviewRequired=true表示 ignored 内容中存在资源二进制等需要确认的内容unmanagedEntries表示需求级目录中不会被处理的非仓库内容或未声明仓库- ignored 内容不进入
changes.patch;恢复后依赖项目自己的依赖安装、资源下载或构建命令重新生成 git.dirtyEntries、git.excludedEntries、changeScreening.entries不属于对外输出契约;工具内部只在生成补丁和确认模板时使用这些临时明细
collapse / expand 常用命令:
- 预览全部声明仓库:
wb collapse <index> - 预览单个仓库:
wb collapse <index> --store <storeId> - 输出大文件确认模板:
wb collapse <index> --store <storeId> --json - 实际收起单个仓库:
wb collapse <index> --store <storeId> --apply - 带大文件确认执行:
wb collapse <index> --store <storeId> --apply --screening-decisions <json-file> - 从仓库目录预览:
wb collapse <store> - 预览恢复:
wb expand <index> --store <storeId> - 实际恢复:
wb expand <index> --store <storeId> --apply
版本不匹配时的迁移提示约定:
- 报错必须明确指出当前支持的
schemaVersion - 报错必须直接给出对应层级的完整模板路径
- 报错必须明确提示“不要只改
schemaVersion” - 报错必须明确提示“先按模板重建当前文件骨架,再迁移旧配置中的有效业务内容”
- 迁移时优先保留说明文字、仓库定义、分支覆盖、特殊规则等业务信息,不沿用旧版本结构字段
generate-agents 当前只做:
workspace入口生成工作空间根级 AI 入口文件project入口生成项目级 AI 入口文件index/store入口统一生成需求级 AI 入口文件- 如果发现旧的
project.notes.md或index.notes.md,会先迁移可识别的人工内容;确认没有未识别托管区块后再删除旧文件 AGENTS.md只更新generated.*托管区块,自动保留或补齐manual.*区块- 需求级
AGENTS.md自动保留或补齐working.*区块,用于记录当前需求的重点信息与最小进行态 CLAUDE.md只更新generated.claude-instruct托管区块,通过@AGENTS.md引用同级主入口
generate-agents 第一版固定托管区块:
generated.workspace-summarygenerated.project-summarygenerated.project-guidancegenerated.index-summarygenerated.index-guidancegenerated.repo-collapsegenerated.claude-instructmanual.notesworking.key-notesworking.progress
doctor 当前只做:
- 汇总
validate的错误与警告 - 汇总
inspect的现场摘要 - 在需求级或仓库级附带
sync的 dry-run 预览 - 给出当前目录的建议下一步
根级配置位置
根级工作空间配置统一放在:
<workspace-root>/.workspace-meta/workspace.config.json
第一版根级 .workspace-meta/ 的稳定文件固定为:
workspace.config.json
AI 入口托管区块
AGENTS.md 的自动生成部分统一采用托管区块语法:
<--- TANMIWORKBASE:generated.workspace-summary --->
...
<--- /TANMIWORKBASE:generated.workspace-summary --->需求级使用 generated.index-summary,人工补充内容应写在 manual.* 区块中,工具不会覆盖。
需求级还会使用两个 working.* 区块:
working.key-notes:记录当前需求中已经确认、反复查找、容易理解错或会影响后续判断的重点信息working.progress:记录当前仍需继续处理的事项,使用树形 Markdown 任务列表维护最小进行态
working.* 区块由 AI 与人工维护正文,工具只负责创建、补齐和保留。结构化事实仍以 index.config.json 为准;阶段完成并验证后,应删除 working.progress 中对应待办分支。
CLAUDE.md 使用 generated.claude-instruct 区块引用同级 AGENTS.md:
<--- TANMIWORKBASE:generated.claude-instruct --->
@AGENTS.md
<--- /TANMIWORKBASE:generated.claude-instruct --->CLAUDE.md 中托管区块以外的人工内容会保留。
版本迁移命令约定:
- 第一版不提供单独的版本迁移命令
- 版本不匹配时统一走校验报错与模板重建引导
