{"_id":"@aispea/taskforge","_rev":"4-72e29324d35120df714cc36887c65779","name":"@aispea/taskforge","dist-tags":{"latest":"0.1.3"},"versions":{"0.1.0":{"name":"@aispea/taskforge","version":"0.1.0","keywords":["task","taskforge","worktree","git-worktree","cli","workflow","developer-tools","devops"],"author":{"name":"AiSpea"},"license":"MIT","_id":"@aispea/taskforge@0.1.0","maintainers":[{"name":"zyxyxz","email":"zhouyixu05@gmail.com"}],"homepage":"https://github.com/AiSpea/TaskForge#readme","bugs":{"url":"https://github.com/AiSpea/TaskForge/issues"},"bin":{"tf":"bin/taskforge.js","taskforge":"bin/taskforge.js"},"dist":{"shasum":"bcf5799fd25bb304857cfb4ae7c06109fb50ca4c","tarball":"https://registry.npmjs.org/@aispea/taskforge/-/taskforge-0.1.0.tgz","fileCount":7,"integrity":"sha512-WXjSKXhNQzfA3MY2oX1ocZ/hD+xD2pJfpLjZsbr+teo3d4BoXE7TKCkK6GszcL1AAhlhG2ROM+HijOF+pqgd+w==","signatures":[{"sig":"MEYCIQDEBSq4fFKxK55dezCBKBtR0VcOu4nnJNDYlavoo8mnpAIhANqSatMamefrHxMYXx+aT6qG28m5Y5rnHMiIgTJRn0lN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":98118},"type":"module","engines":{"node":">=18"},"gitHead":"a3822ea7c66a75d2189d725bf4f1b40e547598bd","scripts":{"lint":"node --check bin/taskforge.js src/taskforge-core.js src/taskforge-ui.js","test":"node --test","build":"npm run lint","prepare":"npm run build"},"_npmUser":{"name":"zyxyxz","email":"zhouyixu05@gmail.com"},"repository":{"url":"git+https://github.com/AiSpea/TaskForge.git","type":"git"},"_npmVersion":"11.12.1","description":"Task-first CLI for Git worktree workflows and task-based development.","directories":{},"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/taskforge_0.1.0_1776272344937_0.3649472727252496","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@aispea/taskforge","version":"0.1.1","keywords":["task","taskforge","worktree","git-worktree","cli","workflow","developer-tools","devops"],"author":{"name":"AiSpea"},"license":"MIT","_id":"@aispea/taskforge@0.1.1","maintainers":[{"name":"zyxyxz","email":"zhouyixu05@gmail.com"}],"homepage":"https://github.com/AiSpea/TaskForge#readme","bugs":{"url":"https://github.com/AiSpea/TaskForge/issues"},"bin":{"tf":"bin/taskforge.js","taskforge":"bin/taskforge.js"},"dist":{"shasum":"56c1130997c0b0ec363c77fc33f0360c2a558468","tarball":"https://registry.npmjs.org/@aispea/taskforge/-/taskforge-0.1.1.tgz","fileCount":7,"integrity":"sha512-a+VWfWU+o3jtu4MSrYcfpCHVCtrjrQIiUxdCq71lg0IKOke/2fuwv3cfg0RTPTeNdv4nMVY///P/neYiYH9X+Q==","signatures":[{"sig":"MEUCIEL1hn10/CmY1G25URNfzNPTcVF1Gn9KRgU7p2nJCMhHAiEApm1k2SOu1HeexiQssco3KkELjgoF72Hj65emiyBF3Ks=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108107},"type":"module","engines":{"node":">=18"},"gitHead":"3dd986fe7a3d70232b3c7020b069ebe145f89575","scripts":{"lint":"node --check bin/taskforge.js src/taskforge-core.js src/taskforge-ui.js","test":"node --test","build":"npm run lint","prepare":"npm run build"},"_npmUser":{"name":"zyxyxz","email":"zhouyixu05@gmail.com"},"repository":{"url":"git+https://github.com/AiSpea/TaskForge.git","type":"git"},"_npmVersion":"11.12.1","description":"Task-first CLI for Git worktree workflows and task-based development.","directories":{},"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/taskforge_0.1.1_1776275147719_0.2983655853567906","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@aispea/taskforge","version":"0.1.2","keywords":["task","taskforge","worktree","git-worktree","cli","workflow","developer-tools","devops"],"author":{"name":"AiSpea"},"license":"MIT","_id":"@aispea/taskforge@0.1.2","maintainers":[{"name":"zyxyxz","email":"zhouyixu05@gmail.com"}],"homepage":"https://github.com/AiSpea/TaskForge#readme","bugs":{"url":"https://github.com/AiSpea/TaskForge/issues"},"bin":{"tf":"bin/taskforge.js","taskforge":"bin/taskforge.js"},"dist":{"shasum":"b762ce8f706755b857dca4728a746659f245e329","tarball":"https://registry.npmjs.org/@aispea/taskforge/-/taskforge-0.1.2.tgz","fileCount":7,"integrity":"sha512-Z2BjS1J6DjJHk/I1zrTZz0jsmZz+jJW+ZxFLyT6uFUhzzL5D86+6tguRO/Nveoa6rtyK6tNnEeHZ1V2DUZgL/w==","signatures":[{"sig":"MEYCIQCOBW//0t/cN+cx35c64oBy9qKC/2a/fI7XUD4u8uE4rwIhAOixJ4bpkBRWEVFJ+bhbBZoRbiyvihNg5aOnps40396T","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":117799},"type":"module","engines":{"node":">=18"},"gitHead":"3dd986fe7a3d70232b3c7020b069ebe145f89575","scripts":{"lint":"node --check bin/taskforge.js src/taskforge-core.js src/taskforge-ui.js","test":"node --test","build":"npm run lint","prepare":"npm run build"},"_npmUser":{"name":"zyxyxz","email":"zhouyixu05@gmail.com"},"repository":{"url":"git+https://github.com/AiSpea/TaskForge.git","type":"git"},"_npmVersion":"11.12.1","description":"Task-first CLI for Git worktree workflows and task-based development.","directories":{},"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/taskforge_0.1.2_1776309940946_0.2804365901404102","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@aispea/taskforge","version":"0.1.3","description":"Task-first CLI for Git worktree workflows and task-based development.","type":"module","repository":{"type":"git","url":"git+https://github.com/AiSpea/TaskForge.git"},"homepage":"https://github.com/AiSpea/TaskForge#readme","bugs":{"url":"https://github.com/AiSpea/TaskForge/issues"},"publishConfig":{"access":"public"},"bin":{"taskforge":"bin/taskforge.js","tf":"bin/taskforge.js"},"scripts":{"test":"node --test","lint":"node --check bin/taskforge.js src/taskforge-core.js src/taskforge-ui.js","build":"npm run lint","prepare":"npm run build"},"keywords":["task","taskforge","worktree","git-worktree","cli","workflow","developer-tools","devops"],"author":{"name":"AiSpea"},"license":"MIT","engines":{"node":">=18"},"gitHead":"1a733d2fe7e560d482818e52801eca4ac4700ecd","_id":"@aispea/taskforge@0.1.3","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-gr5EsHyu7IBJAIDjdJRpR05zvX/LBpwco8LCS53vhKQ+ZmZuv8ujFU39fveSFYkVKmRxWibxJ3PYcCZQNrOigA==","shasum":"ad44b8b8d75ce6a17659bff524873d662b80c573","tarball":"https://registry.npmjs.org/@aispea/taskforge/-/taskforge-0.1.3.tgz","fileCount":7,"unpackedSize":124086,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIG/bC/JpzxJWGjIcuXv9dsswCKVhAv+RHvjpdlMVw+EuAiEAwZxL4YRbtvyFgvRxjS/Rl6n+Zs6uqywAp1ZKqGv+ePw="}]},"_npmUser":{"name":"zyxyxz","email":"zhouyixu05@gmail.com"},"directories":{},"maintainers":[{"name":"zyxyxz","email":"zhouyixu05@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/taskforge_0.1.3_1776327901262_0.8841598921085918"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-15T16:59:04.821Z","modified":"2026-04-16T08:25:01.533Z","0.1.0":"2026-04-15T16:59:05.083Z","0.1.1":"2026-04-15T17:45:47.879Z","0.1.2":"2026-04-16T03:25:41.084Z","0.1.3":"2026-04-16T08:25:01.388Z"},"bugs":{"url":"https://github.com/AiSpea/TaskForge/issues"},"author":{"name":"AiSpea"},"license":"MIT","homepage":"https://github.com/AiSpea/TaskForge#readme","keywords":["task","taskforge","worktree","git-worktree","cli","workflow","developer-tools","devops"],"repository":{"type":"git","url":"git+https://github.com/AiSpea/TaskForge.git"},"description":"Task-first CLI for Git worktree workflows and task-based development.","maintainers":[{"name":"zyxyxz","email":"zhouyixu05@gmail.com"}],"readme":"# TaskForge\n\n> Task-driven development system for modern teams and AI agents\n>\n> 面向任务的开发工作区编排工具，基于 Git worktree、环境管理与服务运行时编排。\n\nTaskForge turns this workflow:\n\n```text\nTask -> Branch -> Worktree -> Env -> Service\n```\n\n把任务从“分支操作”升级为一套团队可执行、可扩展、可自动化的开发系统。\n\n## 什么是 TaskForge？\n\nTaskForge 是一个基于 `git worktree` 的任务驱动开发工具。\n\n它把每个开发任务映射为一个独立、可运行、可管理的工作空间，并统一处理分支、目录、环境变量、端口分配与服务生命周期。\n\n相比把分支当成核心单元，TaskForge 更强调“任务”才是开发协作的真实对象。\n\n## 解决什么问题？\n\n在实际团队开发中，常见的问题包括：\n\n- 来回 `git checkout`，上下文频繁切换\n- 本地环境互相踩端口、踩数据、踩缓存\n- 分支很多，但没有清晰的任务映射关系\n- 每个人的本地环境不一致，问题难以复现\n- AI Agent 无法在不稳定的执行环境里可靠工作\n\nTaskForge 的目标，是让团队用一套标准化流程去创建、运行、查看和清理任务级工作区。\n\n## 核心能力\n\n- 任务驱动开发：每个任务对应一个独立 worktree\n- 并行开发：不再依赖来回切换分支\n- 统一环境管理：统一处理 env、ports、db 等运行资源\n- 可控隔离策略：共享与隔离可以按任务风险灵活配置\n- 团队协作标准化：所有操作统一走 CLI\n- AI Agent 友好：天然适合作为 Agent 的任务执行底座\n\n## 文档索引\n\n- `README.md`：当前 CLI、项目背景与 MVP 能力说明\n\n## 核心理念\n\n### 1. Task First（任务优先）\n\n```text\n一个任务 = 一个分支 = 一个 worktree\n```\n\n每个任务都拥有自己的执行空间，与其他进行中的任务保持解耦。\n\n### 2. Shared + Isolated（共享 + 可控隔离）\n\nTaskForge 的策略不是一味隔离，而是共享安全资源、隔离高风险资源。\n\n| 资源 | 默认策略 |\n| --- | --- |\n| Python / Node | 共享 |\n| Redis / DB 实例 | 共享 |\n| 数据库数据 | 可共享 / 可隔离 |\n| 端口 | 隔离 |\n| 代码目录 | 隔离 |\n\n### 3. CLI as Entry（统一入口）\n\n所有任务操作统一通过 CLI 入口完成：\n\n```bash\ntaskforge ...\n```\n\n这让团队行为更一致，也更方便自动化和后续平台化。\n\n## 安装\n\n发布到 npm 后，可以全局安装：\n\n```bash\nnpm install -g @aispea/taskforge\n```\n\n安装完成后，实际使用的命令仍然是：\n\n```bash\ntaskforge\ntf\n```\n\n也可以直接通过 `npx` 使用：\n\n```bash\nnpx @aispea/taskforge init\n```\n\n开发时也可以直接全局 link，并使用短命令：\n\n```bash\nnpm link\ntf help\n```\n\n## 快速开始\n\n### 1. 初始化项目\n\n在项目根目录执行：\n\n```bash\ntaskforge init\n```\n\n`taskforge init` 现在会确保项目被初始化为一个可用的 git 仓库，并自动创建\n可作为 worktree 基线的初始提交；TaskForge 后续的任务创建、提交、合并都基于\n这个 git/worktree 工作流。\n\n### 2. 创建任务工作区\n\n```bash\ntf create task-101-login --assignee zhangsan\n```\n\n执行后会自动完成：\n\n- 创建分支 `task-101-login`\n- 创建 worktree：`myapp-worktrees/task-101-login`\n- 分配独立端口，例如 `3101` 和 `8101`\n- 生成 `.env.local`\n- 注册任务元信息\n\n### 3. 启动开发环境\n\n```bash\ntf up task-101-login\n```\n\n典型行为包括：\n\n- 进入对应 worktree\n- 加载 `.env.local`\n- 启动 frontend / backend 服务\n- 使用该任务专属端口运行环境\n\n### 4. 查看当前状态\n\n```bash\ntf status\n```\n\n示例输出：\n\n```text\nTASK              USER       PORTS        DB        STATUS     WORKFLOW\ntask-101-login    zhangsan   3101/8101    shared    running    in_progress\ntask-102-admin    lisi       3102/8102    isolated  stopped    review_requested\n```\n\n### 5. 删除任务\n\n```bash\ntf remove task-101-login\n```\n\n## 工作区结构\n\n假设项目位于：\n\n```text\n/opt/aispea/myapp\n```\n\nTaskForge 会将工作区组织为：\n\n```text\n/opt/aispea/\n|- myapp/                   # 原始仓库\n|- .taskforge/              # 项目级状态与任务元数据\n`- myapp-worktrees/         # 所有任务工作区\n   |- task-101-login/\n   |- task-102-admin/\n   `- ...\n```\n\n## 配置系统\n\nTaskForge 的项目配置目录为 `.taskforge/`：\n\n```text\n.taskforge/\n|- config.json\n`- tasks/\n```\n\n跨 worktree 的命令自动发现文件：\n\n```text\nworktree/.taskforge/worktree.json\n```\n\n示例 `config.json`：\n\n```yaml\nproject:\n  name: myapp\n  root: /opt/aispea/myapp\n\npaths:\n  main_worktree: /opt/aispea/myapp\n  worktree_root: /opt/aispea/myapp-worktrees\n\ngit:\n  base_branch: main\n\nports:\n  frontend_start: 3100\n  backend_start: 8100\n\nenv:\n  shared_python: true\n  shared_node: true\n\ndatabase:\n  mode: shared\n  engine: postgres\n  host: 127.0.0.1\n  port: 5432\n  user: dev\n  password: xxx\n  shared_db_name: myapp_dev\n  isolated_db_prefix: myapp_task_\n\nresource_profiles:\n  shared:\n    db: shared\n    redis_prefix: false\n\n  safe:\n    db: isolated\n    redis_prefix: true\n\n  full:\n    db: isolated\n    redis_prefix: true\n```\n\n生命周期命令：\n\n```json\n{\n  \"lifecycle\": {\n    \"package_manager\": \"pnpm\",\n    \"after_create\": [\n      {\n        \"name\": \"install dependencies\",\n        \"command\": \"pnpm install --prefer-offline\",\n        \"cwd\": \".\",\n        \"enabled\": true,\n        \"interactive\": false\n      }\n    ],\n    \"before_develop\": [],\n    \"on_develop\": []\n  }\n}\n```\n\n说明：\n\n- `after_create`：任务 worktree 创建完成后运行，适合 `pnpm install --prefer-offline`。\n- `before_develop`：在 dashboard 选择“开始开发”后、进入 shell 前运行，适合依赖检查或代码生成。\n- `on_develop`：进入开发前可选执行交互命令，适合项目自定义启动脚本。\n- `taskforge init` 会尝试识别 `pnpm-lock.yaml` / `package-lock.json` / `yarn.lock`，并写入推荐 lifecycle 配置。\n\n## 数据库策略\n\nTaskForge 同时支持共享数据库和隔离数据库两种模式。\n\n### 默认模式：共享数据库\n\n适合绝大多数日常开发场景：\n\n```bash\ntaskforge task create task-101-login --db shared\n```\n\n所有任务共用同一个数据库，例如：\n\n```text\nmyapp_dev\n```\n\n### 隔离模式：独立数据库\n\n适合 migration、数据修复、高风险任务等场景：\n\n```bash\ntaskforge task create task-102-migration --db isolated\n```\n\n系统可以自动生成独立数据库名，例如：\n\n```text\nmyapp_task_101\n```\n\n### 推荐策略\n\n| 场景 | 模式 |\n| --- | --- |\n| 日常开发 | `shared` |\n| Migration | `isolated` |\n| 数据处理任务 | `isolated` |\n| 高风险改动 | `isolated` |\n\n## Resource Profile（资源策略）\n\nResource Profile 用来定义任务创建时的资源隔离等级。\n\n创建任务时可以直接指定：\n\n```bash\ntaskforge task create task-102-migration --resource-profile safe\n```\n\n内置 profile：\n\n| Profile | 行为 |\n| --- | --- |\n| `shared` | 共享 DB，共享 Redis |\n| `safe` | DB 隔离，Redis key prefix 隔离 |\n| `full` | DB 隔离，Redis 隔离，对象存储隔离 |\n\n## 命令总览\n\n### 任务管理\n\n```bash\ntaskforge task create\ntaskforge task list\ntaskforge task show\ntaskforge task remove\ntaskforge task status set <name> <todo|in_progress|review_requested|changes_requested|approved|merge_conflicted|merged|done|archived>\ntaskforge task submit <name> [--message <message>]\ntaskforge task commit <name> [--message <message>]\ntaskforge task merge <name> [--stash-dirty|--commit-dirty] [--use-codex-on-conflict]\ntaskforge task path <name>\ntaskforge describe <name>\ntaskforge projects list\ntaskforge projects show <name|path>\ntaskforge projects remove <name|path>\ntaskforge projects prune\n\n# shortcuts\ntf create\ntf list\ntf show\ntf remove\ntf path\ntf submit\ntf commit\ntf merge\ntf info\n```\n\n简化规则：\n\n- `tf` 是 `taskforge` 的短别名。\n- 在项目根目录、`.taskforge/`、具体 task worktree、以及整个 `*-worktrees/` 目录里，TaskForge 都会自动识别当前 project。\n- 在项目相关目录执行 `tf list`，默认等价于 `tf task list`。\n- 在 task worktree 内执行 `tf describe` / `tf up` / `tf down` 时，如果省略任务名，会优先使用当前 worktree 对应的 task。\n- 在 task worktree 内执行 `tf submit` / `tf commit` 时，如果省略任务名，也会优先使用当前 worktree 对应的 task。\n- 直接执行 `tf` 默认进入 `tf info` 控制台。\n- `tf show` / `tf describe` / `tf projects show` 默认输出人类可读视图，`--json` 才输出机器可读 JSON。\n- `tf projects` 默认等价于 `tf projects list`。\n- 在主项目目录执行 `tf merge` 且不带任务名时，如果在 TTY 中，会弹出一个可上下键选择的 merge task 列表。\n- 如果主项目有未提交改动，`tf merge` 会在交互式终端提示你选择：\n  - stash 当前改动后继续 merge\n  - 先提交当前改动再继续 merge\n  - 取消操作\n\n提交流程：\n\n- `tf submit`：推荐的任务提交流程；会把任务推进到 `review_requested`\n  - 始终执行真实 `git add` / `git commit`\n- `tf commit`：兼容旧习惯，等价于 `tf submit`\n- `tf merge <task>`：把任务推进到 `merged`\n  - 会在主项目目录把 task 分支 merge 回 base branch\n- `tf merge`：在交互式终端中可直接选择一个候选任务进行合并\n- `tf merge --stash-dirty <task>`：发现主项目有未提交改动时，先自动 stash 再 merge\n- `tf merge --commit-dirty <task> [--dirty-message \"...\"]`：发现主项目有未提交改动时，先自动提交主项目改动再 merge\n- 如果 merge 过程中发生冲突，任务会被标记为 `merge_conflicted`\n- 在交互式终端中，发生冲突时会提示是否调用 Codex 协助解决冲突并自动继续 merge\n- 也可以直接使用 `tf merge --use-codex-on-conflict <task>` 在冲突时自动调用 Codex\n- `create` / `submit` / `merge` / `up` / `down` / `restart` 成功后，CLI 会直接给出推荐下一步，降低第一次使用时的摸索成本\n\n### 任务工作状态\n\n```bash\ntaskforge up <task>\ntaskforge down <task>\ntaskforge restart <task>\ntaskforge describe <task>\ntf up <task>\ntf down <task>\ntf restart <task>\ntf describe <task>\n```\n\n当前版本里，这一组命令只管理任务的工作状态，而不是托管真实服务进程：\n\n- `up/down/restart`：更新任务当前工作状态，便于团队查看谁在处理中\n- `describe`：查看任务详情，包括状态、分支、worktree、端口和数据库模式\n- 如果后续要接真实服务管理，建议作为独立扩展层，而不是当前核心模型的一部分\n\n### 状态与排障\n\n```bash\ntaskforge status\ntaskforge doctor\ntf status\ntf info\ntf doctor\n```\n\n其中：\n\n- `tf info` 会展示当前 project 的主目录、worktree root、任务数量、当前所在位置等信息。\n- 在交互式终端里，`tf info` 默认会进入一个轻量 dashboard，可以用上下键浏览当前列表，按 `p` 在 task / project 视图之间切换，按 `h` 查看帮助，按 `Esc` 退出。\n- 在 dashboard 里，选中 task 后可以直接按 `Enter` 进入动作菜单；动作菜单支持开始开发、开始/停止、提交、撤回提交、合并、删除和查看路径。\n- 选择“开始开发”并确认后，TaskForge 会加载任务环境，打开一个位于该 worktree 的交互式 shell；退出 shell 后会回到原终端。\n- `tf status` / `tf list` / `tf projects list` 会优先使用彩色表格输出。\n- 当你身处某个 task worktree 时，`tf list` / `tf status` 会高亮当前 task；`tf projects list` 会标出当前 project。\n\n### 初始化与定位\n\n```bash\ntaskforge init [path-or-root]\ntaskforge init --root <path>\n```\n\n说明：\n\n- `taskforge init` 默认在当前目录初始化项目，并确保当前目录成为 git 仓库。\n- `taskforge init <path>` 或 `taskforge init --root <path>` 可在目标项目目录初始化并自动创建 `path/myapp-worktrees`。\n- 在 `worktree` 目录内执行 `taskforge task show/taskforge task list/taskforge up` 时，会自动回跳到对应项目上下文，不需要手工切回主目录。\n- 在整个 `myapp-worktrees/` 目录中执行 `tf list` / `tf info` / `tf status` 时，也会自动识别到对应项目。\n- `taskforge projects list` 会读取 `~/.taskforge/projects.json`（可通过 `TASKFORGE_HOME` 覆盖）查看当前主机上已注册项目。\n\n## 团队协作规范\n\n推荐：\n\n- 每个任务使用一个独立 worktree\n- 主工作区只负责 merge 与集成\n- 默认共享环境，按风险决定是否隔离\n- migration 和高风险任务使用独立数据库\n- 所有任务操作统一通过 CLI 执行\n\n避免：\n\n- 在主目录直接做功能开发\n- 一个 worktree 承载多个任务\n- 长期不清理无效 worktree\n- 随意删除共享数据库\n- 不通过 TaskForge 创建任务分支\n\n## AI Agent 支持\n\nTaskForge 天然适配以下工作流：\n\n```text\nTask -> Worktree -> Agent -> Commit -> Review\n```\n\n未来可以继续扩展为：\n\n- 自动创建任务\n- 自动执行代码生成\n- 自动提交 PR\n- 自动 review\n\n## 架构定位\n\nTaskForge 的定位是开发任务执行层（Execution Layer）。\n\n它可以作为：\n\n- AI 编程系统的底座\n- 多 Agent 编排的执行环境\n- 团队本地开发的任务操作系统\n\n## Roadmap\n\n- [ ] Web UI 控制台\n- [ ] AI Agent 集成\n- [ ] 自动 review\n- [ ] CI/CD 集成\n- [ ] 云端任务调度\n- [ ] 任务模板与脚手架\n- [ ] 任务配置编辑命令（如 assignee / profile / env）\n- [ ] 批量操作与更强的项目级工作流 UX\n\n## 一句话总结\n\n> TaskForge = 把开发从“分支操作”升级为“任务执行系统”\n\n## License\n\nMIT\n\n## 作者\n\nCyberTronics / AiSpea\n\n## 任务开发记录（MVP）\n\n已完成的实现（当前版本）:\n\n- `taskforge init`：初始化 `.taskforge` 目录与配置。\n- `taskforge task create <name>`：创建任务记录，分配前端/后端端口。\n- `taskforge task list` / `taskforge task show <name>`：查看任务信息（含 WORKFLOW）。\n- `taskforge task remove <name>`：移除任务记录与工作区。\n- `taskforge task status set <name> <state>`：更新任务状态（如 review_requested / approved）。\n- `taskforge task submit <name>`：推荐提交流程；提交并推进到 `review_requested`。\n- `taskforge task commit <name>`：兼容旧命令，等价于 `taskforge task submit <name>`。\n- `taskforge task merge <name>`：在主项目合并指定任务，并把状态推进到 `merged`。\n- `taskforge up|down|restart <name>`：更新任务工作状态，便于协作视图统一。\n- `taskforge describe <name>`：查看任务详情。\n- `taskforge status`：展示任务端口、运行状态与流程状态。\n- `tf`：`taskforge` 的全局短别名。\n- `tf info`：查看当前项目总览；TTY 中默认进入可上下键浏览的 dashboard。\n- `tf list/show/create/remove/path/submit/commit/merge`：常用 task 子命令快捷入口。\n- 彩色表格输出：`status` / `list` / `projects list` 默认使用更清晰的终端表格。\n- `taskforge doctor`：环境健康检查。\n- `taskforge projects list/show`：全局查看当前主机注册项目，支持在任意目录查询。\n- `taskforge projects remove`：从全局注册表移除项目。\n- `taskforge projects prune`：清理失效项目记录（缺少 `config.json` 或目录不存在）。\n- `taskforge task path <name>`：显示任务对应 worktree 的绝对路径。\n- `taskforge task list --json` / `projects list --json` / `status --json`：机器友好输出。\n\n## 发布到 npm\n\n项目已具备 npm 打包能力（`bin/taskforge` + `package.json`）。当前打包与测试命令：\n\n```bash\nnpm run lint      # 语法检查\nnpm test         # 本地测试\nnpm pack         # 生成发布包（dry 包检查）\nnpm publish --dry-run  # 模拟发布到 npm\n```\n\n正式发布前请满足：\n\n1. 已登录 npm（`npm whoami` 成功）。\n2. 配置期望的发布名称（当前配置名为 `@aispea/taskforge`）。\n3. 准备好 `README`、版本号与 `LICENSE`。\n","readmeFilename":"README.md"}