From 83401d842761f933bb27ba74ab1dcaff950a65f2 Mon Sep 17 00:00:00 2001 From: Explero <502024240091@smail.nju.edu.cn> Date: Wed, 15 Jul 2026 16:22:31 +0800 Subject: [PATCH 1/2] ci: isolate Pages deployment concurrency --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 2d67dfa..30c158e 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -25,7 +25,7 @@ permissions: id-token: write concurrency: - group: pages + group: pages-${{ github.event_name == 'push' && 'deploy' || github.ref }} cancel-in-progress: true jobs: From 81b37b3cc5b71404792b480f9a47869e7bc17747 Mon Sep 17 00:00:00 2001 From: Explero <502024240091@smail.nju.edu.cn> Date: Wed, 15 Jul 2026 17:22:53 +0800 Subject: [PATCH 2/2] feat: rename distribution to Research Trellis --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- .github/workflows/ci.yml | 26 +++++----- .github/workflows/publish.yml | 2 +- .lintstagedrc | 2 +- CONTRIBUTING.md | 2 +- CONTRIBUTING_CN.md | 2 +- README.md | 52 +++++++++++-------- docs/hermes_deployment_preflight.md | 10 ++-- ...es_trellis_research_transformation_plan.md | 10 ++-- docs/manual/01-overview.md | 10 ++-- docs/manual/02-installation.md | 36 ++++++++----- docs/manual/03-first-research-task.md | 8 +-- docs/manual/04-how-it-works.md | 8 +-- docs/manual/05-project-setup.md | 16 +++--- docs/manual/06-tasks-and-planning.md | 6 +-- docs/manual/07-spec-and-context.md | 6 +-- docs/manual/08-hermes-records.md | 6 +-- docs/manual/09-experiments.md | 6 +-- docs/manual/10-runs-and-replay.md | 6 +-- docs/manual/11-metrics-and-comparison.md | 6 +-- docs/manual/12-reports-and-claims.md | 6 +-- docs/manual/13-workers-and-gates.md | 6 +-- docs/manual/14-workflows-and-platforms.md | 18 +++---- docs/manual/15-channel-and-memory.md | 26 +++++----- .../16-update-recovery-and-uninstall.md | 18 +++---- docs/manual/README.md | 6 +-- docs/manual/appendix-a-cli-reference.md | 26 +++++----- docs/manual/appendix-b-directory-reference.md | 6 +-- .../appendix-c-configuration-reference.md | 6 +-- docs/manual/appendix-d-record-schema.md | 6 +-- docs/manual/appendix-e-troubleshooting.md | 10 ++-- docs/manual/appendix-f-feature-status.md | 10 ++-- docs/manual/sources.md | 24 ++++----- marketplace/workflows/native/workflow.md | 4 +- mkdocs.yml | 12 ++--- package.json | 31 +++++------ packages/cli/README.md | 52 +++++++++++-------- packages/cli/package.json | 13 +++-- packages/cli/scripts/bump-versions.js | 4 +- .../cli/scripts/check-manifest-continuity.js | 4 +- packages/cli/scripts/create-manifest.js | 2 +- packages/cli/scripts/hermes-preflight.js | 14 ++--- packages/cli/scripts/release-preflight.js | 2 +- packages/cli/scripts/release.js | 2 +- packages/cli/src/cli/index.ts | 17 +++--- .../src/commands/channel/adapters/codex.ts | 2 +- packages/cli/src/commands/channel/context.ts | 2 +- packages/cli/src/commands/channel/create.ts | 2 +- packages/cli/src/commands/channel/index.ts | 2 +- packages/cli/src/commands/channel/list.ts | 2 +- packages/cli/src/commands/channel/rm.ts | 4 +- packages/cli/src/commands/channel/send.ts | 2 +- packages/cli/src/commands/channel/spawn.ts | 2 +- .../cli/src/commands/channel/store/events.ts | 8 +-- .../cli/src/commands/channel/store/filter.ts | 4 +- .../cli/src/commands/channel/store/schema.ts | 10 ++-- .../commands/channel/store/thread-state.ts | 6 +-- .../cli/src/commands/channel/supervisor.ts | 8 +-- .../src/commands/channel/supervisor/inbox.ts | 2 +- .../commands/channel/supervisor/warning.ts | 2 +- packages/cli/src/commands/channel/threads.ts | 4 +- packages/cli/src/commands/channel/title.ts | 2 +- packages/cli/src/commands/init.ts | 38 +++++++++----- packages/cli/src/commands/mem.ts | 20 +++---- packages/cli/src/commands/uninstall.ts | 4 +- packages/cli/src/commands/update.ts | 18 ++++--- packages/cli/src/commands/upgrade.ts | 12 +++-- packages/cli/src/commands/workflow.ts | 8 +-- packages/cli/src/configurators/index.ts | 2 +- packages/cli/src/configurators/opencode.ts | 2 +- .../migrations/manifests/0.6.0-beta.31.json | 9 ++++ .../src/templates/codex/skills/start/SKILL.md | 2 +- .../bundled-skills/trellis-meta/SKILL.md | 8 +-- .../references/customize-local/overview.md | 6 +-- .../local-architecture/generated-files.md | 6 +-- .../references/local-architecture/overview.md | 2 +- .../platform-files/hooks-and-settings.md | 2 +- .../references/platform-files/platform-map.md | 2 +- .../src/templates/common/commands/start.md | 2 +- .../templates/copilot/prompts/start.prompt.md | 2 +- packages/cli/src/templates/markdown/agents.md | 2 +- .../guides/code-reuse-thinking-guide.md.txt | 6 +-- .../guides/cross-layer-thinking-guide.md.txt | 2 +- .../cross-platform-thinking-guide.md.txt | 2 +- .../cli/src/templates/shared-hooks/index.ts | 2 +- .../cli/src/templates/trellis/config.yaml | 2 +- .../trellis/scripts/common/session_context.py | 10 ++-- .../cli/src/templates/trellis/workflow.md | 4 +- packages/cli/src/types/migration.ts | 2 +- packages/cli/src/utils/cwd-guard.ts | 4 +- packages/cli/src/utils/file-writer.ts | 2 +- packages/cli/src/utils/manifest-prune.ts | 4 +- packages/cli/src/utils/task-json.ts | 6 +-- packages/cli/src/utils/template-hash.ts | 4 +- packages/cli/src/utils/uninstall-scrubbers.ts | 2 +- packages/cli/src/utils/workflow-resolver.ts | 4 +- ...t-uninstall-overdelete.integration.test.ts | 2 +- .../cli/test/commands/mem-helpers.test.ts | 4 +- .../cli/test/commands/mem-integration.test.ts | 4 +- .../test/commands/release-preflight.test.ts | 2 +- .../test/commands/update-internals.test.ts | 2 +- packages/cli/test/commands/upgrade.test.ts | 20 +++---- .../commands/workflow.integration.test.ts | 18 +++---- packages/cli/test/registry-invariants.test.ts | 4 +- packages/cli/test/regression.test.ts | 27 ++++++---- .../cli/test/scripts/hermes-preflight.test.ts | 2 +- .../cli/test/templates/hermes-runtime.test.ts | 2 +- .../cli/test/templates/shared-hooks.test.ts | 4 +- packages/core/package.json | 8 +-- packages/core/src/index.ts | 4 +- packages/core/src/mem/index.ts | 6 +-- packages/core/src/mem/internal/jsonl.ts | 2 +- packages/core/src/mem/types.ts | 2 +- pnpm-lock.yaml | 2 +- 114 files changed, 496 insertions(+), 433 deletions(-) create mode 100644 packages/cli/src/migrations/manifests/0.6.0-beta.31.json diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 9385f62..d2bd660 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -20,7 +20,7 @@ body: id: version attributes: label: Trellis Version - description: Output of `trellis --version` + description: Output of `research-trellis --version` validations: required: true - type: input diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bca2a1a..1c778d9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -36,7 +36,7 @@ jobs: run: pnpm build - name: Hermes preflight - run: pnpm --filter trellis-hermes hermes:preflight + run: pnpm --filter research-trellis hermes:preflight - name: Pack publish artifacts run: node packages/cli/scripts/release-preflight.js pack-publish-artifacts @@ -83,11 +83,13 @@ jobs: cd "${smoke_dir}" npm install --ignore-scripts "${tarballs[@]}" - expected_version="$(node -p "require('./node_modules/trellis-hermes/package.json').version")" - core_version="$(node -p "require('./node_modules/trellis-hermes-core/package.json').version")" + expected_version="$(node -p "require('./node_modules/research-trellis/package.json').version")" + core_version="$(node -p "require('./node_modules/research-trellis-core/package.json').version")" test "${core_version}" = "${expected_version}" + test "$(./node_modules/.bin/research-trellis --version)" = "${expected_version}" test "$(./node_modules/.bin/trellis --version)" = "${expected_version}" test "$(./node_modules/.bin/tl --version)" = "${expected_version}" + ./node_modules/.bin/research-trellis --help >/dev/null ./node_modules/.bin/trellis --help >/dev/null ./node_modules/.bin/tl --help >/dev/null @@ -95,14 +97,14 @@ jobs: import fs from "node:fs"; import path from "node:path"; - const cliRoot = path.join(process.cwd(), "node_modules/trellis-hermes"); + const cliRoot = path.join(process.cwd(), "node_modules/research-trellis"); const cliPackage = JSON.parse( fs.readFileSync(path.join(cliRoot, "package.json"), "utf8"), ); - const coreDependency = cliPackage.dependencies?.["trellis-hermes-core"]; + const coreDependency = cliPackage.dependencies?.["research-trellis-core"]; if (coreDependency !== cliPackage.version) { throw new Error( - `trellis-hermes depends on trellis-hermes-core@${coreDependency}, expected exact ${cliPackage.version}`, + `research-trellis depends on research-trellis-core@${coreDependency}, expected exact ${cliPackage.version}`, ); } @@ -123,12 +125,12 @@ jobs: } const specifiers = [ - "trellis-hermes", - "trellis-hermes-core", - "trellis-hermes-core/channel", - "trellis-hermes-core/mem", - "trellis-hermes-core/task", - "trellis-hermes-core/testing", + "research-trellis", + "research-trellis-core", + "research-trellis-core/channel", + "research-trellis-core/mem", + "research-trellis-core/task", + "research-trellis-core/testing", ]; await Promise.all(specifiers.map((specifier) => import(specifier))); NODE diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 19e0e75..3c735e4 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -50,7 +50,7 @@ jobs: pnpm lint pnpm test pnpm build - pnpm --filter trellis-hermes hermes:preflight + pnpm --filter research-trellis hermes:preflight node packages/cli/scripts/release-preflight.js check-versions --require-tag node packages/cli/scripts/release-preflight.js verify-packed-cli diff --git a/.lintstagedrc b/.lintstagedrc index 26fe9aa..543b7be 100644 --- a/.lintstagedrc +++ b/.lintstagedrc @@ -1,3 +1,3 @@ { - "packages/cli/src/**/*.ts": ["pnpm --filter trellis-hgl exec eslint --fix", "pnpm --filter trellis-hgl exec prettier --write"] + "packages/cli/src/**/*.ts": ["pnpm --filter research-trellis exec eslint --fix", "pnpm --filter research-trellis exec prettier --write"] } diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5547fe6..c79ab2d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -9,7 +9,7 @@ Thanks for your interest in contributing to Trellis! This document provides guid Before creating a bug report, please check [existing issues](https://github.com/mindfold-ai/Trellis/issues) to avoid duplicates. When reporting a bug, include: -- Trellis version (`trellis --version`) +- Research Trellis version (`research-trellis --version`) - Node.js version (`node --version`) - Operating system - Steps to reproduce diff --git a/CONTRIBUTING_CN.md b/CONTRIBUTING_CN.md index 42d3484..a85389d 100644 --- a/CONTRIBUTING_CN.md +++ b/CONTRIBUTING_CN.md @@ -9,7 +9,7 @@ 提交 Bug 前,请先查看 [已有 Issues](https://github.com/mindfold-ai/Trellis/issues) 避免重复。 报告 Bug 时请包含: -- Trellis 版本 (`trellis --version`) +- Research Trellis 版本 (`research-trellis --version`) - Node.js 版本 (`node --version`) - 操作系统 - 复现步骤 diff --git a/README.md b/README.md index f908a33..4eb57ad 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ -# Trellis-Hermes +# Research Trellis 面向科研项目的 `Trellis`(原版 Trellis)实验性改造分支。 -[![CI](https://github.com/Explero/Trellis-Hermes/actions/workflows/ci.yml/badge.svg)](https://github.com/Explero/Trellis-Hermes/actions/workflows/ci.yml) +[![CI](https://github.com/Explero/research-trellis/actions/workflows/ci.yml/badge.svg)](https://github.com/Explero/research-trellis/actions/workflows/ci.yml) [![License: AGPL-3.0-or-later](https://img.shields.io/badge/license-AGPL--3.0--or--later-16a34a.svg?style=flat-square)](LICENSE) 这个仓库是在原版 `Trellis`(原版项目)基础上改造出来的科研实验分支,不是上游官方版本,也不代表上游项目立场。它更接近一个科研项目里的工作流工具实验:在原版 Trellis 的任务、规范、平台接入基础上,加入更强的 `Hermes`(科研工作流)记录、门禁和子代理协作约束。 当前状态:可以放进低风险真实科研项目里试部署;不建议直接用于不可回滚的关键项目。 -当前 npm 发布包为 `trellis-hermes`(CLI 包)和 `trellis-hermes-core`(核心包)。 +从 `0.6.0-beta.31`(测试版)开始,项目使用 `research-trellis`(CLI 包)和 `research-trellis-core`(核心包),与上游原版名称明确区分。旧包 `trellis-hermes` 和 `trellis-hermes-core` 停留在 `0.6.0-beta.30`(旧测试版),仅用于已有安装迁移。 ## 上游来源与修改声明 @@ -17,14 +17,14 @@ 为了避免混淆,这里先说明几个边界: -- `Trellis-Hermes`(科研改造版)不是上游 `Trellis`(原版项目)的官方发布版本; +- `Research Trellis`(科研改造版)不是上游 `Trellis`(原版项目)的官方发布版本; - 仓库中的原始 Trellis 代码、模板、文档结构和许可证声明应继续归属于其原始作者和贡献者; - 本仓库新增和改动的部分主要围绕 `Hermes`(科研工作流)、记录门禁、子代理治理、科研计划变更记录和发布前预检; - 如果后续公开发布到 `npm`(包平台)或 `GitHub`(代码托管平台),应继续保留上游来源、许可证和修改说明。 ## 这是什么 -`Trellis-Hermes`(科研改造版)是一个本地开发工具,用来把 AI 协作开发过程里的关键动作落到仓库文件中: +`Research Trellis`(科研改造版)是一个本地开发工具,用来把 AI 协作开发过程里的关键动作落到仓库文件中: - 需求、设计、实现计划和检查记录放进 `.trellis/tasks/`; - 项目规范和工作流规则放进 `.trellis/spec/` 与 `.trellis/workflow.md`; @@ -42,7 +42,7 @@ pnpm install --frozen-lockfile pnpm lint pnpm test pnpm build -pnpm --filter trellis-hermes hermes:preflight +pnpm --filter research-trellis hermes:preflight ``` 这些检查覆盖: @@ -64,18 +64,18 @@ pnpm --filter trellis-hermes hermes:preflight pnpm lint pnpm test pnpm build -pnpm --filter trellis-hermes hermes:preflight +pnpm --filter research-trellis hermes:preflight node packages/cli/scripts/release-preflight.js check-versions --require-tag node packages/cli/scripts/release-preflight.js verify-packed-cli ``` -检查通过后,它会先发布 `trellis-hermes-core`(核心包),再发布 `trellis-hermes`(CLI 包),最后从 npm registry 验证两个包是否可见。 +检查通过后,它会先发布 `research-trellis-core`(核心包),再发布 `research-trellis`(CLI 包),最后从 npm registry 验证两个包是否可见。 发布前还需要在 `npm`(包平台)侧完成: -- 创建或认领 `trellis-hermes-core` 与 `trellis-hermes` 两个包; +- 创建或认领 `research-trellis-core` 与 `research-trellis` 两个包; - 给两个包配置 `trusted publishing`(可信发布); -- `Owner`(所有者)填写 `Explero`,`Repository`(仓库)填写 `Trellis-Hermes`; +- `Owner`(所有者)填写 `Explero`,`Repository`(仓库)填写 `research-trellis`; - `Workflow filename`(流程文件名)填写 `publish.yml`; - `Environment`(环境)填写 `npm-production`。 @@ -94,18 +94,28 @@ node packages/cli/scripts/release-preflight.js verify-packed-cli ## 从源码试用 -普通试用可安装已发布的测试版: +新包发布后,可固定安装本次测试版: ```bash -npm install -g trellis-hermes@0.6.0-beta.30 -trellis --version +npm install -g research-trellis@0.6.0-beta.31 +research-trellis --version +``` + +原有 `trellis` 与 `tl` 命令继续可用,便于已有脚本迁移;新文档统一使用 `research-trellis` 作为主命令。 + +已经安装旧包时,发布后按下面的方式迁移: + +```bash +npm uninstall -g trellis-hermes +npm install -g research-trellis@0.6.0-beta.31 +research-trellis --version ``` 需要修改或审阅实现时,再从 GitHub 源码运行: ```bash -git clone git@github.com:Explero/Trellis-Hermes.git -cd Trellis-Hermes +git clone git@github.com:Explero/research-trellis.git +cd research-trellis corepack enable pnpm install --frozen-lockfile pnpm build @@ -117,14 +127,14 @@ pnpm build cd /path/to/your/research-project git status git add . -git commit -m "chore: checkpoint before Trellis-Hermes trial" -node /path/to/Trellis-Hermes/packages/cli/bin/trellis.js init -u your-name --claude +git commit -m "chore: checkpoint before Research Trellis trial" +node /path/to/research-trellis/packages/cli/bin/trellis.js init -u your-name --claude ``` 如果项目里已经有 Trellis,可以先用 `update`(更新)而不是重新初始化: ```bash -node /path/to/Trellis-Hermes/packages/cli/bin/trellis.js update +node /path/to/research-trellis/packages/cli/bin/trellis.js update ``` 执行前请先看清楚提示,涉及覆盖文件时不要盲目确认。 @@ -135,7 +145,7 @@ node /path/to/Trellis-Hermes/packages/cli/bin/trellis.js update ```text 准备一个干净 git checkpoint -→ 初始化或更新 Trellis-Hermes +→ 初始化或更新 Research Trellis → 用自然语言提出一个小任务 → 让 AI 创建任务并补齐 planning → 检查 .trellis/tasks/ 下的 prd/design/implement 产物 @@ -187,7 +197,7 @@ node /path/to/Trellis-Hermes/packages/cli/bin/trellis.js update 这个项目基于原版 `Trellis`(原版 AI coding 工作流工具)继续改造,仍然保留: -- `trellis init` / `trellis update`; +- `research-trellis init` / `research-trellis update`; - `.trellis/spec/` 项目规范; - `.trellis/tasks/` 任务系统; - 多平台接入模板; @@ -239,7 +249,7 @@ node /path/to/Trellis-Hermes/packages/cli/bin/trellis.js update pnpm lint pnpm test pnpm build -pnpm --filter trellis-hermes hermes:preflight +pnpm --filter research-trellis hermes:preflight ``` 如果改动涉及 Hermes 模板、hook 或任务流,优先补充对应测试,再看 GitHub Actions 结果。 diff --git a/docs/hermes_deployment_preflight.md b/docs/hermes_deployment_preflight.md index 64b43b9..90baf7c 100644 --- a/docs/hermes_deployment_preflight.md +++ b/docs/hermes_deployment_preflight.md @@ -8,16 +8,16 @@ 1. 先运行 quick gate: ```bash -pnpm --filter trellis-hermes hermes:preflight -- --quick +pnpm --filter research-trellis hermes:preflight -- --quick ``` 2. 发布前补跑完整验证: ```bash -pnpm --filter trellis-hermes exec vitest run test/templates/hermes-runtime.test.ts test/templates/trellis.test.ts test/templates/claude.test.ts test/templates/codex.test.ts test/templates/shared-hooks.test.ts -PYTHONPYCACHEPREFIX=/tmp/trellis-hermes-pycache python3 -m py_compile packages/cli/src/templates/trellis/scripts/hermes/*.py packages/cli/src/templates/shared-hooks/hermes-runtime-guard.py -pnpm --filter trellis-hermes typecheck -pnpm --filter trellis-hermes build +pnpm --filter research-trellis exec vitest run test/templates/hermes-runtime.test.ts test/templates/trellis.test.ts test/templates/claude.test.ts test/templates/codex.test.ts test/templates/shared-hooks.test.ts +PYTHONPYCACHEPREFIX=/tmp/research-trellis-pycache python3 -m py_compile packages/cli/src/templates/trellis/scripts/hermes/*.py packages/cli/src/templates/shared-hooks/hermes-runtime-guard.py +pnpm --filter research-trellis typecheck +pnpm --filter research-trellis build ``` 3. 若 Python 编译后出现 `__pycache__` 或 `.pyc` 在模板目录内,不能发布;用 `gio trash` 或 `trash` 清理后重跑 preflight。 diff --git a/docs/hermes_trellis_research_transformation_plan.md b/docs/hermes_trellis_research_transformation_plan.md index 9359a9a..857170c 100644 --- a/docs/hermes_trellis_research_transformation_plan.md +++ b/docs/hermes_trellis_research_transformation_plan.md @@ -327,11 +327,11 @@ P6 部署前安全 gate: 最终验证记录: -- [x] `pnpm --filter trellis-hermes exec vitest run test/templates/hermes-runtime.test.ts test/templates/trellis.test.ts test/templates/claude.test.ts test/templates/codex.test.ts test/templates/shared-hooks.test.ts`:5 个文件、135 个测试通过。 -- [x] `PYTHONPYCACHEPREFIX=/tmp/trellis-hermes-final-pycache python3 -m py_compile packages/cli/src/templates/trellis/scripts/hermes/*.py packages/cli/src/templates/shared-hooks/hermes-runtime-guard.py`:通过。 -- [x] `pnpm --filter trellis-hermes test`:44 个文件、1259 个测试通过。 -- [x] `pnpm --filter trellis-hermes typecheck`:通过。 -- [x] `pnpm --filter trellis-hermes build`:通过。 +- [x] `pnpm --filter research-trellis exec vitest run test/templates/hermes-runtime.test.ts test/templates/trellis.test.ts test/templates/claude.test.ts test/templates/codex.test.ts test/templates/shared-hooks.test.ts`:5 个文件、135 个测试通过。 +- [x] `PYTHONPYCACHEPREFIX=/tmp/research-trellis-final-pycache python3 -m py_compile packages/cli/src/templates/trellis/scripts/hermes/*.py packages/cli/src/templates/shared-hooks/hermes-runtime-guard.py`:通过。 +- [x] `pnpm --filter research-trellis test`:44 个文件、1259 个测试通过。 +- [x] `pnpm --filter research-trellis typecheck`:通过。 +- [x] `pnpm --filter research-trellis build`:通过。 - [x] 模板目录无 `__pycache__` / `.pyc` 缓存污染。 ## 6. 完成定义 diff --git a/docs/manual/01-overview.md b/docs/manual/01-overview.md index 8f720cf..f38178d 100644 --- a/docs/manual/01-overview.md +++ b/docs/manual/01-overview.md @@ -2,7 +2,7 @@ ## 目标 -理解 `Trellis-Hermes`(科研改造版)解决什么问题、与上游的关系,以及当前版本不能提供什么。 +理解 `Research Trellis`(科研改造版)解决什么问题、与上游的关系,以及当前版本不能提供什么。 ## 适用范围 @@ -11,7 +11,7 @@ ## 前置条件 - 能管理目标项目中的文件和提交。 -- 接受当前版本为 `0.6.0-beta.30`(测试版)。 +- 接受当前版本为 `0.6.0-beta.31`(测试版)。 - 不把它当作安全隔离工具或自动科研结论系统。 ## 操作步骤 @@ -43,9 +43,9 @@ ## 验证记录 -- 日期:2026-07-14。 -- 版本:`0.6.0-beta.30`(测试版)。 -- 基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`(当前基准)。 +- 日期:2026-07-15。 +- 版本:`0.6.0-beta.31`(测试版)。 +- 更名前基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`。 - 命令:`rg -n "AGPL|Hermes|未实现" README.md docs/manual/appendix-f-feature-status.md`(静态核对)。 - 结果:项目定位、上游归属、实验性与未实现边界已对齐。 - 未验证项:生产环境安全性和长期真实科研负载。 diff --git a/docs/manual/02-installation.md b/docs/manual/02-installation.md index f0e1182..5c41a14 100644 --- a/docs/manual/02-installation.md +++ b/docs/manual/02-installation.md @@ -6,7 +6,7 @@ ## 适用范围 -适用于 `Ubuntu 24.04`(Ubuntu 24.04 操作系统)和相近的本地开发环境。当前包已发布到 `npm`(Node 包平台),也可以从源码运行。 +适用于 `Ubuntu 24.04`(Ubuntu 24.04 操作系统)和相近的本地开发环境。新包发布前应从源码运行;发布后可从 `npm`(Node 包平台)安装。 ## 前置条件 @@ -25,36 +25,44 @@ python3 --version git --version ``` -推荐固定安装本手册验证过的测试版: +新包发布后,推荐固定安装本手册对应的测试版: ```bash -npm install --global trellis-hermes@0.6.0-beta.30 -trellis --version -trellis --help +npm install --global research-trellis@0.6.0-beta.31 +research-trellis --version +research-trellis --help ``` 如不希望全局安装,可临时执行: ```bash -npm exec --yes --package trellis-hermes@0.6.0-beta.30 -- trellis --version +npm exec --yes --package research-trellis@0.6.0-beta.31 -- research-trellis --version +``` + +已经安装旧包时,先卸载旧名称,再安装新包: + +```bash +npm uninstall --global trellis-hermes +npm install --global research-trellis@0.6.0-beta.31 +research-trellis --version ``` 需要核对或修改源码时,使用源码方式: ```bash -git clone https://github.com/Explero/Trellis-Hermes.git -cd Trellis-Hermes +git clone https://github.com/Explero/research-trellis.git +cd research-trellis corepack enable pnpm install --frozen-lockfile pnpm build node packages/cli/bin/trellis.js --version ``` -源码命令不会自动变成全局 `trellis`(命令);后续应继续使用 `node /绝对路径/packages/cli/bin/trellis.js`(源码入口),或另行全局安装。 +源码命令不会自动变成全局 `research-trellis`(命令);后续应继续使用 `node /绝对路径/packages/cli/bin/trellis.js`(源码入口),或在新包发布后另行全局安装。 ## 预期结果 -版本命令输出 `0.6.0-beta.30`,帮助中能看到 `init`(初始化)、`update`(更新)、`workflow`(工作流)、`channel`(协作频道)和 `mem`(会话记忆)等命令。 +版本命令输出 `0.6.0-beta.31`,帮助中能看到 `init`(初始化)、`update`(更新)、`workflow`(工作流)、`channel`(协作频道)和 `mem`(会话记忆)等命令。 ## 失败恢复 @@ -65,11 +73,11 @@ node packages/cli/bin/trellis.js --version ## 验证记录 -- 日期:2026-07-14。 -- 版本:`0.6.0-beta.30`(测试版)。 -- 基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`(当前基准)。 +- 日期:2026-07-15。 +- 版本:`0.6.0-beta.31`(测试版)。 +- 更名前基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`。 - 命令:`node -p "require('./packages/cli/package.json').version"`(包版本核对)。 -- 结果:源码包版本为 `0.6.0-beta.30`(测试版),运行时要求与包配置一致。 +- 结果:源码包版本为 `0.6.0-beta.31`(测试版),运行时要求与包配置一致。 - 未验证项:本轮未重新进行全局安装,也未实时查询 `npm`(Node 包平台)标签。 ## 来源 diff --git a/docs/manual/03-first-research-task.md b/docs/manual/03-first-research-task.md index 9ee7fa5..4e6d62d 100644 --- a/docs/manual/03-first-research-task.md +++ b/docs/manual/03-first-research-task.md @@ -20,7 +20,7 @@ ```bash git status --short -trellis init -y -u "$USER" --codex --no-monorepo +research-trellis init -y -u "$USER" --codex --no-monorepo ``` 2. 检查生成结果和启动任务: @@ -75,9 +75,9 @@ python3 ./.trellis/scripts/task.py current --source ## 验证记录 -- 日期:2026-07-14。 -- 版本:`0.6.0-beta.30`(测试版)。 -- 基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`(当前基准)。 +- 日期:2026-07-15。 +- 版本:`0.6.0-beta.31`(测试版)。 +- 更名前基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`。 - 命令:`rg -n "experiment.py|task.py start|--codex" packages/cli/src packages/cli/test`(实现与测试核对)。 - 结果:初始化、任务创建、实验校验和启动步骤与当前入口一致。 - 未验证项:本轮未在新建的外部科研项目中手工执行整组示例。 diff --git a/docs/manual/04-how-it-works.md b/docs/manual/04-how-it-works.md index c199354..f68f489 100644 --- a/docs/manual/04-how-it-works.md +++ b/docs/manual/04-how-it-works.md @@ -17,7 +17,7 @@ 按五层结构检查当前项目: -1. `CLI`(命令行界面)层:`trellis init`(初始化)复制模板,`trellis update`(更新)比较模板哈希,`workflow`(工作流)切换流程文件。 +1. `CLI`(命令行界面)层:`research-trellis init`(初始化)复制模板,`research-trellis update`(更新)比较模板哈希,`workflow`(工作流)切换流程文件。 2. 项目层:`.trellis/spec/`(项目规范)和 `.trellis/workflow.md`(工作流说明)保存长期规则。 3. 任务层:`.trellis/tasks//`(任务目录)保存需求、设计、实施计划和代理上下文清单。 4. 平台层:技能、代理和钩子读取当前会话身份、活动任务及上下文清单,再把信息交给人工智能工具。 @@ -57,9 +57,9 @@ ## 验证记录 -- 日期:2026-07-14。 -- 版本:`0.6.0-beta.30`(测试版)。 -- 基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`(当前基准)。 +- 日期:2026-07-15。 +- 版本:`0.6.0-beta.31`(测试版)。 +- 更名前基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`。 - 命令:`rg -n "state_machine|approval-gate|task.py" packages/cli/src/templates`(协议与实现核对)。 - 结果:任务生命周期有实现支持;科研状态文件已准确标为协议模板。 - 未验证项:没有通用运行时状态迁移引擎可供端到端验证。 diff --git a/docs/manual/05-project-setup.md b/docs/manual/05-project-setup.md index aa25d53..034eab0 100644 --- a/docs/manual/05-project-setup.md +++ b/docs/manual/05-project-setup.md @@ -19,13 +19,13 @@ 1. 先查看当前版本支持的平台参数: ```bash -trellis init --help +research-trellis init --help ``` 2. 单仓库、非交互初始化示例: ```bash -trellis init -y -u "$USER" --codex --no-monorepo +research-trellis init -y -u "$USER" --codex --no-monorepo ``` `-y`(自动确认)在冲突时采用跳过模式;只有显式 `--force`(强制覆盖)才会覆盖已有文件。 @@ -43,7 +43,7 @@ trellis init -y -u "$USER" --codex --no-monorepo 3. 多包仓库可以让命令自动检测,也可以显式要求检测: ```bash -trellis init -u "$USER" --codex --monorepo +research-trellis init -u "$USER" --codex --monorepo ``` 当前实现会识别 `pnpm-workspace.yaml`(pnpm 工作区配置)、`package.json`(Node 包配置)、`Cargo.toml`(Rust 工作区配置)、`go.work`(Go 工作区配置)、`pyproject.toml`(Python 项目配置)、子模块和并列仓库。检测成功后,包信息写入 `.trellis/config.yaml`(项目配置)。 @@ -51,8 +51,8 @@ trellis init -u "$USER" --codex --monorepo 4. 已经存在 `.trellis/`(工作流目录)时,增加平台或开发者身份: ```bash -trellis init --claude -trellis init -u "$USER" +research-trellis init --claude +research-trellis init -u "$USER" ``` 5. 完成后检查: @@ -78,9 +78,9 @@ python3 ./.trellis/scripts/task.py list ## 验证记录 -- 日期:2026-07-14。 -- 版本:`0.6.0-beta.30`(测试版)。 -- 基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`(当前基准)。 +- 日期:2026-07-15。 +- 版本:`0.6.0-beta.31`(测试版)。 +- 更名前基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`。 - 命令:`rg -n "options.yes|registry|selectedTemplate" packages/cli/src/commands/init.ts packages/cli/test/commands/init.integration.test.ts`(分支核对)。 - 结果:默认、交互、指定模板、自定义源和 `-y`(自动确认)的失败行为已分开记录。 - 未验证项:本轮未连接真实外部模板源注入网络故障。 diff --git a/docs/manual/06-tasks-and-planning.md b/docs/manual/06-tasks-and-planning.md index 075df3e..6a5e675 100644 --- a/docs/manual/06-tasks-and-planning.md +++ b/docs/manual/06-tasks-and-planning.md @@ -79,9 +79,9 @@ python3 ./.trellis/scripts/hermes/validate.py --task "$TASK" --kind plan_change ## 验证记录 -- 日期:2026-07-14。 -- 版本:`0.6.0-beta.30`(测试版)。 -- 基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`(当前基准)。 +- 日期:2026-07-15。 +- 版本:`0.6.0-beta.31`(测试版)。 +- 更名前基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`。 - 命令:`rg -n "plan_change|decision_state|supersedes" packages/cli/src/templates/trellis/scripts/hermes packages/cli/test/templates/hermes-runtime.test.ts`(变更协议核对)。 - 结果:提出、审阅、接受或拒绝、替代和校验流程已补全,并明示了结构校验边界。 - 未验证项:审阅者身份、决定链语义和证据存在性仍需外部流程保证。 diff --git a/docs/manual/07-spec-and-context.md b/docs/manual/07-spec-and-context.md index 5d93b5a..0bfda74 100644 --- a/docs/manual/07-spec-and-context.md +++ b/docs/manual/07-spec-and-context.md @@ -56,9 +56,9 @@ python3 ./.trellis/scripts/task.py validate "$TASK" ## 验证记录 -- 日期:2026-07-14。 -- 版本:`0.6.0-beta.30`(测试版)。 -- 基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`(当前基准)。 +- 日期:2026-07-15。 +- 版本:`0.6.0-beta.31`(测试版)。 +- 更名前基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`。 - 命令:`rg -n "implement.jsonl|check.jsonl|context" packages/cli/src/templates/trellis/scripts packages/cli/test`(上下文实现核对)。 - 结果:上下文清单、重复检查和平台读取路径与当前模板一致。 - 未验证项:各平台主机对注入内容的实际消费情况。 diff --git a/docs/manual/08-hermes-records.md b/docs/manual/08-hermes-records.md index 714b4b2..91c7ffe 100644 --- a/docs/manual/08-hermes-records.md +++ b/docs/manual/08-hermes-records.md @@ -71,9 +71,9 @@ python3 ./.trellis/scripts/hermes/validate.py --task "$TASK" --kind evidence ## 验证记录 -- 日期:2026-07-14。 -- 版本:`0.6.0-beta.30`(测试版)。 -- 基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`(当前基准)。 +- 日期:2026-07-15。 +- 版本:`0.6.0-beta.31`(测试版)。 +- 更名前基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`。 - 命令:`rg -n "validate_artifact_file|artifact_ref_errors|has_symlink_component" packages/cli/src/templates/trellis/scripts/hermes/runtime.py`(路径与引用边界核对)。 - 结果:示例已改为先创建产物和摘要,再写产物与证据账本;路径检查范围已明示。 - 未验证项:产物路径不是符号链接隔离或操作系统级安全边界。 diff --git a/docs/manual/09-experiments.md b/docs/manual/09-experiments.md index 9c36f99..3eb1462 100644 --- a/docs/manual/09-experiments.md +++ b/docs/manual/09-experiments.md @@ -73,9 +73,9 @@ python3 ./.trellis/scripts/hermes/experiment.py validate --task "$TASK" ## 验证记录 -- 日期:2026-07-14。 -- 版本:`0.6.0-beta.30`(测试版)。 -- 基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`(当前基准)。 +- 日期:2026-07-15。 +- 版本:`0.6.0-beta.31`(测试版)。 +- 更名前基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`。 - 命令:`rg -n -m 1 "allowed_commands|sandbox" packages/cli/src/templates/trellis/scripts/hermes packages/cli/test/templates/hermes-runtime.test.ts`(实现与测试核对)。 - 结果:命令允许列表、隔离模式和对应测试均可定位。 - 未验证项:本轮未启动真实容器或外部隔离环境。 diff --git a/docs/manual/10-runs-and-replay.md b/docs/manual/10-runs-and-replay.md index 7799fd6..c020012 100644 --- a/docs/manual/10-runs-and-replay.md +++ b/docs/manual/10-runs-and-replay.md @@ -64,9 +64,9 @@ python3 ./.trellis/scripts/hermes/runner.py replay --task "$TASK" --run-id "$RUN ## 验证记录 -- 日期:2026-07-14。 -- 版本:`0.6.0-beta.30`(测试版)。 -- 基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`(当前基准)。 +- 日期:2026-07-15。 +- 版本:`0.6.0-beta.31`(测试版)。 +- 更名前基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`。 - 命令:`rg -n -m 1 "run_manifest|replay" packages/cli/src/templates/trellis/scripts/hermes packages/cli/test/templates/hermes-runtime.test.ts`(运行清单与复查核对)。 - 结果:运行清单、输出摘要和复查失败分支均有实现与测试依据。 - 未验证项:本轮未手工执行文中的完整任务卡、运行和复查示例。 diff --git a/docs/manual/11-metrics-and-comparison.md b/docs/manual/11-metrics-and-comparison.md index 352bbab..b55fa07 100644 --- a/docs/manual/11-metrics-and-comparison.md +++ b/docs/manual/11-metrics-and-comparison.md @@ -76,9 +76,9 @@ python3 ./.trellis/scripts/hermes/report.py quality-gate --task "$TASK" ## 验证记录 -- 日期:2026-07-14。 -- 版本:`0.6.0-beta.30`(测试版)。 -- 基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`(当前基准)。 +- 日期:2026-07-15。 +- 版本:`0.6.0-beta.31`(测试版)。 +- 更名前基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`。 - 命令:`rg -n -m 1 "quality-gate|evidence_refs|claim_refs" packages/cli/src/templates/trellis/scripts/hermes packages/cli/test/templates/hermes-runtime.test.ts`(门禁和引用核对)。 - 结果:质量门禁已有账本编号存在性检查以及有效、缺失引用测试。 - 未验证项:文中完整命令示例未在外部项目手工执行。 diff --git a/docs/manual/12-reports-and-claims.md b/docs/manual/12-reports-and-claims.md index 0a32fb3..12d2934 100644 --- a/docs/manual/12-reports-and-claims.md +++ b/docs/manual/12-reports-and-claims.md @@ -68,9 +68,9 @@ python3 ./.trellis/scripts/hermes/report.py approval-gate --task "$TASK" --claim ## 验证记录 -- 日期:2026-07-14。 -- 版本:`0.6.0-beta.30`(测试版)。 -- 基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`(当前基准)。 +- 日期:2026-07-15。 +- 版本:`0.6.0-beta.31`(测试版)。 +- 更名前基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`。 - 命令:`rg -n -m 1 "claim-review|approval-gate" packages/cli/src/templates/trellis/scripts/hermes packages/cli/test/templates/hermes-runtime.test.ts`(主张与审批边界核对)。 - 结果:主张审查和审批门禁入口可定位,报告与人工批准保持分离。 - 未验证项:本轮未进行真实人工审批,也未验证外部身份系统。 diff --git a/docs/manual/13-workers-and-gates.md b/docs/manual/13-workers-and-gates.md index f3d6624..ca4b9c9 100644 --- a/docs/manual/13-workers-and-gates.md +++ b/docs/manual/13-workers-and-gates.md @@ -69,9 +69,9 @@ python3 ./.trellis/scripts/hermes/jobs.py resume --task "$TASK" --job-id "$JOB" ## 验证记录 -- 日期:2026-07-14。 -- 版本:`0.6.0-beta.30`(测试版)。 -- 基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`(当前基准)。 +- 日期:2026-07-15。 +- 版本:`0.6.0-beta.31`(测试版)。 +- 更名前基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`。 - 命令:`rg -n -m 1 "PreToolUse|Stop" packages/cli/src/templates/{claude,codex,shared-hooks} packages/cli/test`(钩子与门禁核对)。 - 结果:`Claude Code`(Claude 代码工具)和 `Codex`(代码代理)的门禁注册、主代理防火墙和结束检查测试均可定位。 - 未验证项:平台主机是否实际触发钩子仍取决于安装版本和用户配置。 diff --git a/docs/manual/14-workflows-and-platforms.md b/docs/manual/14-workflows-and-platforms.md index 1f82614..d00287e 100644 --- a/docs/manual/14-workflows-and-platforms.md +++ b/docs/manual/14-workflows-and-platforms.md @@ -19,7 +19,7 @@ 1. 查看正式命令支持的平台: ```bash -trellis init --help +research-trellis init --help ``` 当前提供 `Claude Code`(Claude 代码工具)、`Cursor`(Cursor 编辑器)、`OpenCode`(开放代码工具)、`Codex`(代码代理平台)、`Kilo CLI`(Kilo 命令行工具)、`Kiro Code`(Kiro 代码工具)、`Gemini CLI`(Gemini 命令行工具)、`Antigravity`(Antigravity 工作流)、`Windsurf`(Windsurf 编辑器)、`Qoder`(Qoder 工具)、`CodeBuddy`(CodeBuddy 工具)、`GitHub Copilot`(GitHub 编程助手)、`Factory Droid`(Factory Droid 工具)和 `Pi Agent`(Pi 代理)模板。 @@ -29,7 +29,7 @@ trellis init --help 2. 初始化时显式选择平台: ```bash -trellis init -y -u "$USER" --claude --codex --no-monorepo +research-trellis init -y -u "$USER" --claude --codex --no-monorepo ``` 不指定平台且使用 `-y`(自动确认)时,当前默认选择 `Claude Code`(Claude 代码工具)和 `Cursor`(Cursor 编辑器)。 @@ -37,7 +37,7 @@ trellis init -y -u "$USER" --claude --codex --no-monorepo 3. 查看工作流模板: ```bash -trellis workflow --list +research-trellis workflow --list ``` 当前列表包含内置 `native`(默认工作流),以及市场中的 `tdd`(测试驱动工作流)和 `channel-driven-subagent-dispatch`(频道驱动子代理工作流)。市场模板需要网络,内容来源可能随市场更新。 @@ -45,14 +45,14 @@ trellis workflow --list 4. 安全预览另一个工作流,不替换当前文件: ```bash -trellis workflow --template tdd --create-new +research-trellis workflow --template tdd --create-new diff -u .trellis/workflow.md .trellis/workflow.md.new ``` 确认后再执行替换: ```bash -trellis workflow --template tdd --force +research-trellis workflow --template tdd --force ``` 5. `Codex`(代码代理平台)缺省为 `sub-agent`(子代理)调度,与 `PreToolUse`(工具使用前)的主代理只读门禁保持一致。需要钩子时,在用户级 `~/.codex/config.toml`(Codex 用户配置)启用: @@ -97,13 +97,13 @@ trust_level = "trusted" - 只是 `workflow --list`(工作流列表)时市场失败:列表仍保留内置 `native`(默认工作流)并显示警告。显式选择市场模板时,索引或文件下载失败会终止,不会静默改用 `native`(默认工作流)。 - 工作流有本地修改:优先生成 `.new`(新副本)比较,不要直接 `--force`(强制替换)。 - 平台没有自动注入:核对上表是否支持钩子、钩子是否启用,以及初始化是否真的选择了该平台;不支持自动注入的平台应按派发协议手动读取。 -- 添加平台时已有配置:重复运行 `trellis init --平台参数`(平台初始化)会跳过已配置平台。 +- 添加平台时已有配置:重复运行 `research-trellis init --平台参数`(平台初始化)会跳过已配置平台。 ## 验证记录 -- 日期:2026-07-14。 -- 版本:`0.6.0-beta.30`(测试版)。 -- 基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`(当前基准)。 +- 日期:2026-07-15。 +- 版本:`0.6.0-beta.31`(测试版)。 +- 更名前基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`。 - 命令:`rg -n -m 1 "dispatch_mode|agentCapable|hasHooks" packages/cli/src packages/cli/test`(平台能力核对)。 - 结果:14 个平台的上下文注入、子代理、门禁和启用条件已与注册表及钩子配置对齐。 - 未验证项:本轮未启动 14 种平台主机,也未访问远程工作流市场。 diff --git a/docs/manual/15-channel-and-memory.md b/docs/manual/15-channel-and-memory.md index 7247967..75fad03 100644 --- a/docs/manual/15-channel-and-memory.md +++ b/docs/manual/15-channel-and-memory.md @@ -19,10 +19,10 @@ 1. 创建项目范围聊天频道并发送消息: ```bash -trellis channel create research-sync --scope project --description "研究任务协作" -trellis channel send research-sync --scope project --as main "请核对当前证据清单" -trellis channel messages research-sync --scope project --last 20 -trellis channel list --scope project +research-trellis channel create research-sync --scope project --description "研究任务协作" +research-trellis channel send research-sync --scope project --as main "请核对当前证据清单" +research-trellis channel messages research-sync --scope project --last 20 +research-trellis channel list --scope project ``` 频道事件保存在用户目录下的 `.trellis/channels/`(频道存储),项目范围会按当前目录分桶,不写入项目的任务记录。 @@ -30,9 +30,9 @@ trellis channel list --scope project 2. 需要工作代理时,可启动当前仅支持的 `claude`(Claude 提供方)或 `codex`(Codex 提供方): ```bash -trellis channel spawn research-sync --scope project --provider codex --as evaluator --cwd "$PWD" -trellis channel send research-sync --scope project --as main --to evaluator "检查固定指标的证据引用" -trellis channel wait research-sync --scope project --as main --from evaluator --kind done --timeout 5m +research-trellis channel spawn research-sync --scope project --provider codex --as evaluator --cwd "$PWD" +research-trellis channel send research-sync --scope project --as main --to evaluator "检查固定指标的证据引用" +research-trellis channel wait research-sync --scope project --as main --from evaluator --kind done --timeout 5m ``` `spawn`(启动工作代理)会创建后台监督进程。工作完成后用 `channel kill`(停止工作代理)结束仍在运行的进程;删除频道前先看[命令参考](appendix-a-cli-reference.md)。 @@ -40,9 +40,9 @@ trellis channel wait research-sync --scope project --as main --from evaluator -- 3. 查看会话记忆命令: ```bash -trellis mem help -trellis mem projects --json -trellis mem search "固定指标" --platform codex --cwd "$PWD" --limit 10 +research-trellis mem help +research-trellis mem projects --json +research-trellis mem search "固定指标" --platform codex --cwd "$PWD" --limit 10 ``` 默认只搜索当前项目;`--global`(全局搜索)会扩大到所有项目,应注意本地隐私。`extract`(提取)和 `context`(上下文)可进一步查看命中的对话。 @@ -63,9 +63,9 @@ trellis mem search "固定指标" --platform codex --cwd "$PWD" --limit 10 ## 验证记录 -- 日期:2026-07-14。 -- 版本:`0.6.0-beta.30`(测试版)。 -- 基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`(当前基准)。 +- 日期:2026-07-15。 +- 版本:`0.6.0-beta.31`(测试版)。 +- 更名前基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`。 - 命令:`rg -n -m 1 "OpenCode|channel|mem" packages/cli/src/commands packages/core/src packages/cli/test packages/core/test`(频道与会话读取核对)。 - 结果:频道、会话读取和 `OpenCode`(开放代码工具)未实现分支均有当前代码与测试依据。 - 未验证项:本轮未登录真实 `Claude`(Claude 工具)或 `Codex`(代码代理)会话账户。 diff --git a/docs/manual/16-update-recovery-and-uninstall.md b/docs/manual/16-update-recovery-and-uninstall.md index 4e593ea..2bdd6a7 100644 --- a/docs/manual/16-update-recovery-and-uninstall.md +++ b/docs/manual/16-update-recovery-and-uninstall.md @@ -19,15 +19,15 @@ 1. 先升级预览全局命令,不实际安装: ```bash -trellis upgrade --dry-run +research-trellis upgrade --dry-run ``` -实际升级会运行 `npm install -g trellis-hermes@latest`(安装最新全局包)。需要可复现环境时,应安装明确版本。 +实际升级会运行 `npm install -g research-trellis@latest`(安装最新全局包)。需要可复现环境时,应安装明确版本。 2. 预览当前项目模板更新: ```bash -trellis update --dry-run +research-trellis update --dry-run ``` 更新器会区分未修改模板、用户修改模板和用户数据。当前实现明确保留 `.trellis/workspace/`(工作日志)、`.trellis/tasks/`(任务)、`.trellis/spec/`(规范)和开发者身份。 @@ -35,7 +35,7 @@ trellis update --dry-run 3. 对冲突选择处理方式: ```bash -trellis update --create-new +research-trellis update --create-new ``` 该方式把有变化的模板写成 `.new`(新副本)供比较。`--skip-all`(全部跳过)保留本地文件,`--force`(强制覆盖)覆盖变化文件,`--migrate`(应用迁移)才执行待处理的重命名或删除。降级默认被拒绝,除非显式 `--allow-downgrade`(允许降级)。 @@ -45,13 +45,13 @@ trellis update --create-new 5. 卸载前只做预览: ```bash -trellis uninstall --dry-run +research-trellis uninstall --dry-run ``` 预览会列出受管理的平台文件,并明确包含整个 `.trellis/`(工作流目录),其中的任务、记录和运行数据都会被删除。只有完成外部备份并确认列表后,才考虑: ```bash -trellis uninstall --yes +research-trellis uninstall --yes ``` ## 预期结果 @@ -68,9 +68,9 @@ trellis uninstall --yes ## 验证记录 -- 日期:2026-07-14。 -- 版本:`0.6.0-beta.30`(测试版)。 -- 基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`(当前基准)。 +- 日期:2026-07-15。 +- 版本:`0.6.0-beta.31`(测试版)。 +- 更名前基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`。 - 命令:`rg -n -m 1 "dry-run|create-new|allow-downgrade" packages/cli/src/commands packages/cli/test/commands`(更新与恢复核对)。 - 结果:预览、冲突副本、降级拒绝和卸载预览分支均可定位。 - 未验证项:本轮未在临时项目手工执行更新、升级或卸载预览。 diff --git a/docs/manual/README.md b/docs/manual/README.md index 430b4c1..fb11d1e 100644 --- a/docs/manual/README.md +++ b/docs/manual/README.md @@ -1,6 +1,6 @@ -# Trellis-Hermes 中文手册 +# Research Trellis 中文手册 -这套手册面向第一次把 `Trellis-Hermes`(科研改造版)放进真实科研项目的人。当前仓库版本为 `0.6.0-beta.30`(测试版);它基于 `mindfold-ai/Trellis`(上游项目)修改,不是上游官方版本,也不代表上游立场。 +这套手册面向第一次把 `Research Trellis`(科研改造版)放进真实科研项目的人。当前仓库版本为 `0.6.0-beta.31`(测试版);它基于 `mindfold-ai/Trellis`(上游项目)修改,不是上游官方版本,也不代表上游立场。 ## 最短上手路径 @@ -13,7 +13,7 @@ ```bash git status --short -trellis init -y -u "$USER" --codex --no-monorepo +research-trellis init -y -u "$USER" --codex --no-monorepo python3 ./.trellis/scripts/task.py list ``` diff --git a/docs/manual/appendix-a-cli-reference.md b/docs/manual/appendix-a-cli-reference.md index 749179d..97f36b4 100644 --- a/docs/manual/appendix-a-cli-reference.md +++ b/docs/manual/appendix-a-cli-reference.md @@ -6,7 +6,7 @@ ## 适用范围 -适用于 `0.6.0-beta.30`(测试版)。 +适用于 `0.6.0-beta.31`(测试版)。 ## 前置条件 @@ -18,13 +18,13 @@ | 命令 | 用途 | 副作用 | | --- | --- | --- | -| `trellis init`(初始化) | 生成工作流与平台文件 | 写文件 | -| `trellis update --dry-run`(更新预览) | 比较项目模板 | 无 | -| `trellis upgrade --dry-run`(升级预览) | 显示全局升级命令 | 无 | -| `trellis workflow --list`(工作流列表) | 列出工作流 | 可能访问网络 | -| `trellis uninstall --dry-run`(卸载预览) | 列出删除范围 | 无 | -| `trellis channel --help`(频道帮助) | 查看频道子命令 | 无 | -| `trellis mem help`(记忆帮助) | 查看会话检索子命令 | 无 | +| `research-trellis init`(初始化) | 生成工作流与平台文件 | 写文件 | +| `research-trellis update --dry-run`(更新预览) | 比较项目模板 | 无 | +| `research-trellis upgrade --dry-run`(升级预览) | 显示全局升级命令 | 无 | +| `research-trellis workflow --list`(工作流列表) | 列出工作流 | 可能访问网络 | +| `research-trellis uninstall --dry-run`(卸载预览) | 列出删除范围 | 无 | +| `research-trellis channel --help`(频道帮助) | 查看频道子命令 | 无 | +| `research-trellis mem help`(记忆帮助) | 查看会话检索子命令 | 无 | 任务命令: @@ -53,7 +53,7 @@ python3 ./.trellis/scripts/hermes/report.py quality-gate --task "$TASK" python3 ./.trellis/scripts/hermes/jobs.py check --task "$TASK" ``` -高风险入口包括 `trellis init --force`(强制初始化)、`trellis update --force`(强制更新)、`trellis uninstall --yes`(确认卸载)、`trellis channel rm`(删除频道)和 `task.py archive`(归档任务,默认可能提交)。 +高风险入口包括 `research-trellis init --force`(强制初始化)、`research-trellis update --force`(强制更新)、`research-trellis uninstall --yes`(确认卸载)、`research-trellis channel rm`(删除频道)和 `task.py archive`(归档任务,默认可能提交)。 ## 预期结果 @@ -61,13 +61,13 @@ python3 ./.trellis/scripts/hermes/jobs.py check --task "$TASK" ## 失败恢复 -命令不识别时先检查 `trellis --version`(版本);项目脚本不存在时重新检查初始化是否完成。 +命令不识别时先检查 `research-trellis --version`(版本);项目脚本不存在时重新检查初始化是否完成。 ## 验证记录 -- 日期:2026-07-14。 -- 版本:`0.6.0-beta.30`(测试版)。 -- 基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`(当前基准)。 +- 日期:2026-07-15。 +- 版本:`0.6.0-beta.31`(测试版)。 +- 更名前基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`。 - 命令:`rg -n -m 1 "\.command\(|task.py|hermes/" packages/cli/src/cli packages/cli/src/templates/trellis/scripts`(常用入口核对)。 - 结果:本页列出的主命令、任务脚本和科研脚本入口均可定位。 - 未验证项:本页明确不是全量参数参考,本轮也未逐个执行所有帮助命令。 diff --git a/docs/manual/appendix-b-directory-reference.md b/docs/manual/appendix-b-directory-reference.md index d5b3567..c0a871e 100644 --- a/docs/manual/appendix-b-directory-reference.md +++ b/docs/manual/appendix-b-directory-reference.md @@ -49,9 +49,9 @@ ## 验证记录 -- 日期:2026-07-14。 -- 版本:`0.6.0-beta.30`(测试版)。 -- 基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`(当前基准)。 +- 日期:2026-07-15。 +- 版本:`0.6.0-beta.31`(测试版)。 +- 更名前基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`。 - 命令:`rg -n -m 1 "tasks|hermes|workflow" packages/cli/src/constants packages/cli/src/configurators packages/cli/src/templates/trellis`(目录来源核对)。 - 结果:项目、任务和科研记录目录均与当前常量及模板对齐。 - 未验证项:本轮未在新初始化项目中重新生成完整文件树。 diff --git a/docs/manual/appendix-c-configuration-reference.md b/docs/manual/appendix-c-configuration-reference.md index ebc5c1b..9f8fcee 100644 --- a/docs/manual/appendix-c-configuration-reference.md +++ b/docs/manual/appendix-c-configuration-reference.md @@ -43,9 +43,9 @@ python3 ./.trellis/scripts/hermes/experiment.py validate --task "$TASK" ## 验证记录 -- 日期:2026-07-14。 -- 版本:`0.6.0-beta.30`(测试版)。 -- 基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`(当前基准)。 +- 日期:2026-07-15。 +- 版本:`0.6.0-beta.31`(测试版)。 +- 更名前基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`。 - 命令:`rg -n -m 1 "dispatch_mode|session_auto_commit|allowed_commands" packages/cli/src/templates/trellis`(配置模板核对)。 - 结果:会话、`Codex`(代码代理)调度和实验命令配置均可定位,默认子代理语义已对齐。 - 未验证项:生命周期钩子中的用户自定义命令需在具体项目单独验证。 diff --git a/docs/manual/appendix-d-record-schema.md b/docs/manual/appendix-d-record-schema.md index 0e619e4..79a3222 100644 --- a/docs/manual/appendix-d-record-schema.md +++ b/docs/manual/appendix-d-record-schema.md @@ -48,9 +48,9 @@ python3 ./.trellis/scripts/hermes/validate.py --task "$TASK" --kind claim ## 验证记录 -- 日期:2026-07-14。 -- 版本:`0.6.0-beta.30`(测试版)。 -- 基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`(当前基准)。 +- 日期:2026-07-15。 +- 版本:`0.6.0-beta.31`(测试版)。 +- 更名前基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`。 - 命令:`rg -n -m 1 "REQUIRED_FIELDS|PLAN_CHANGE_DECISION_STATES" packages/cli/src/templates/trellis/scripts/hermes/runtime.py`(记录结构核对)。 - 结果:必填字段表和计划变更决定值与运行时定义一致;`recordbus.md`(记录总线说明)已标为全局协议路径。 - 未验证项:自定义扩展字段不在本页的必填字段清单中。 diff --git a/docs/manual/appendix-e-troubleshooting.md b/docs/manual/appendix-e-troubleshooting.md index ea8ae07..2af8798 100644 --- a/docs/manual/appendix-e-troubleshooting.md +++ b/docs/manual/appendix-e-troubleshooting.md @@ -25,12 +25,12 @@ | 质量门禁缺少统计字段 | 见[指标与比较](11-metrics-and-comparison.md)中的当前限制 | | 审批门禁失败 | 等待真实 `human/root`(人工根权限)批准记录 | | 记忆搜索提示 OpenCode 不可用 | 当前未实现,不是本地故障 | -| 更新有冲突 | 使用 `trellis update --create-new`(生成新副本)比较 | +| 更新有冲突 | 使用 `research-trellis update --create-new`(生成新副本)比较 | 进一步检查: ```bash -trellis --version +research-trellis --version python3 ./.trellis/scripts/task.py current --source python3 ./.trellis/scripts/task.py list ``` @@ -45,9 +45,9 @@ python3 ./.trellis/scripts/task.py list ## 验证记录 -- 日期:2026-07-14。 -- 版本:`0.6.0-beta.30`(测试版)。 -- 基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`(当前基准)。 +- 日期:2026-07-15。 +- 版本:`0.6.0-beta.31`(测试版)。 +- 更名前基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`。 - 命令:`rg -n -m 1 "quality gate|missing evidence|approval" packages/cli/src/templates/trellis/scripts/hermes packages/cli/test/templates/hermes-runtime.test.ts`(失败关闭分支核对)。 - 结果:质量门禁、缺失证据和审批失败分支都有实现或测试依据。 - 未验证项:本页不包含所有平台主机和网络环境的故障组合。 diff --git a/docs/manual/appendix-f-feature-status.md b/docs/manual/appendix-f-feature-status.md index 79d5e1b..e0e100b 100644 --- a/docs/manual/appendix-f-feature-status.md +++ b/docs/manual/appendix-f-feature-status.md @@ -6,7 +6,7 @@ ## 适用范围 -适用于 `0.6.0-beta.30`(测试版),后续版本应重新核对。 +适用于 `0.6.0-beta.31`(测试版),后续版本应重新核对。 ## 前置条件 @@ -47,7 +47,7 @@ - 项目和两个发布包的 `SPDX`(许可证标识)以及根说明统一使用 `AGPL-3.0-or-later`(AGPL 第 3 版或任何后续版本),与上游 `COPYRIGHT`(版权声明)中“version 3 or any later version”(第 3 版或任何后续版本)的授权口径一致。 - 根目录 `LICENSE`(许可证原文)和 `COPYRIGHT`(版权声明)必须随分发内容保留;发布预检只核对元数据与说明的一致性,不改写或缩减上游权利文本。 - 发布修改版时应明确标注修改事实和日期,保留上游版权信息,并提供许可证要求的对应源码获取方式。 -- `trellis-hermes`(CLI 包)和 `trellis-hermes-core`(核心包)的打包清单都必须包含 `LICENSE`(许可证)和 `COPYRIGHT`(版权声明);发布预检会对缺失文件失败关闭,不改写上游权利文本。 +- `research-trellis`(CLI 包)和 `research-trellis-core`(核心包)的打包清单都必须包含 `LICENSE`(许可证)和 `COPYRIGHT`(版权声明);发布预检会对缺失文件失败关闭,不改写上游权利文本。 ## 预期结果 @@ -59,9 +59,9 @@ ## 验证记录 -- 日期:2026-07-14。 -- 版本:`0.6.0-beta.30`(测试版)。 -- 基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`(当前基)。 +- 日期:2026-07-15。 +- 版本:`0.6.0-beta.31`(测试版)。 +- 更名前基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`。 - 命令:`node packages/cli/scripts/release-preflight.js check-licenses`(许可证元数据与权利说明一致性检查);`rg -n -m 1 "COPYRIGHT|LICENSE|files" packages/cli/package.json packages/core/package.json packages/cli/scripts/release-preflight.js`(打包权利文件核对)。 - 结果:项目和两个包的 `SPDX`(许可证标识)均为 `AGPL-3.0-or-later`(AGPL 第 3 版或任何后续版本);两个包均声明 `LICENSE`(许可证)和 `COPYRIGHT`(版权声明),发布预检也将其列为必需文件。 - 未验证项:许可证对特定分发或部署场景的适用性仍需维护者或法律专业人员确认。 diff --git a/docs/manual/sources.md b/docs/manual/sources.md index e4fde52..30cd699 100644 --- a/docs/manual/sources.md +++ b/docs/manual/sources.md @@ -14,18 +14,18 @@ ## 操作步骤 -- **S1**:[根说明](https://github.com/Explero/Trellis-Hermes/blob/main/README.md):项目定位、上游关系、试用建议和安全边界。 -- **S2**:[根包配置](https://github.com/Explero/Trellis-Hermes/blob/main/package.json)、[命令包配置](https://github.com/Explero/Trellis-Hermes/blob/main/packages/cli/package.json)、[核心包配置](https://github.com/Explero/Trellis-Hermes/blob/main/packages/core/package.json):版本、依赖、脚本和运行时要求。 -- **S3**:[命令入口](https://github.com/Explero/Trellis-Hermes/blob/main/packages/cli/src/cli/index.ts):正式主命令与参数;另以各命令 `--help`(帮助)实测核对。 -- **S4**:[初始化实现](https://github.com/Explero/Trellis-Hermes/blob/main/packages/cli/src/commands/init.ts)、[更新实现](https://github.com/Explero/Trellis-Hermes/blob/main/packages/cli/src/commands/update.ts)、[卸载实现](https://github.com/Explero/Trellis-Hermes/blob/main/packages/cli/src/commands/uninstall.ts)、[工作流实现](https://github.com/Explero/Trellis-Hermes/blob/main/packages/cli/src/commands/workflow.ts)。 -- **S5**:[工作流结构生成](https://github.com/Explero/Trellis-Hermes/blob/main/packages/cli/src/configurators/workflow.ts)和 `packages/cli/src/templates/`(初始化模板目录)。 -- **S6**:[任务脚本](https://github.com/Explero/Trellis-Hermes/blob/main/packages/cli/src/templates/trellis/scripts/task.py)及其 `common/`(公共脚本目录)。 +- **S1**:[根说明](https://github.com/Explero/research-trellis/blob/main/README.md):项目定位、上游关系、试用建议和安全边界。 +- **S2**:[根包配置](https://github.com/Explero/research-trellis/blob/main/package.json)、[命令包配置](https://github.com/Explero/research-trellis/blob/main/packages/cli/package.json)、[核心包配置](https://github.com/Explero/research-trellis/blob/main/packages/core/package.json):版本、依赖、脚本和运行时要求。 +- **S3**:[命令入口](https://github.com/Explero/research-trellis/blob/main/packages/cli/src/cli/index.ts):正式主命令与参数;另以各命令 `--help`(帮助)实测核对。 +- **S4**:[初始化实现](https://github.com/Explero/research-trellis/blob/main/packages/cli/src/commands/init.ts)、[更新实现](https://github.com/Explero/research-trellis/blob/main/packages/cli/src/commands/update.ts)、[卸载实现](https://github.com/Explero/research-trellis/blob/main/packages/cli/src/commands/uninstall.ts)、[工作流实现](https://github.com/Explero/research-trellis/blob/main/packages/cli/src/commands/workflow.ts)。 +- **S5**:[工作流结构生成](https://github.com/Explero/research-trellis/blob/main/packages/cli/src/configurators/workflow.ts)和 `packages/cli/src/templates/`(初始化模板目录)。 +- **S6**:[任务脚本](https://github.com/Explero/research-trellis/blob/main/packages/cli/src/templates/trellis/scripts/task.py)及其 `common/`(公共脚本目录)。 - **S7**:`packages/cli/src/templates/trellis/hermes/`(科研配置、状态机、协议、角色和报告模板)。 - **S8**:`packages/cli/src/templates/trellis/scripts/hermes/`(科研记录、校验、运行、报告、服务和恢复脚本)。 -- **S9**:[平台注册表](https://github.com/Explero/Trellis-Hermes/blob/main/packages/cli/src/types/ai-tools.ts)及平台配置器、技能、代理和钩子模板。 +- **S9**:[平台注册表](https://github.com/Explero/research-trellis/blob/main/packages/cli/src/types/ai-tools.ts)及平台配置器、技能、代理和钩子模板。 - **S10**:`packages/cli/src/commands/channel/`(频道命令)和 `packages/core/src/channel/`(频道核心)。 -- **S11**:[会话记忆命令](https://github.com/Explero/Trellis-Hermes/blob/main/packages/cli/src/commands/mem.ts)和 `packages/core/src/mem/`(会话记忆核心)。 -- **S12**:`packages/cli/test/`(命令与模板测试)、`packages/core/test/`(核心测试)和[科研预检脚本](https://github.com/Explero/Trellis-Hermes/blob/main/packages/cli/scripts/hermes-preflight.js)。 +- **S11**:[会话记忆命令](https://github.com/Explero/research-trellis/blob/main/packages/cli/src/commands/mem.ts)和 `packages/core/src/mem/`(会话记忆核心)。 +- **S12**:`packages/cli/test/`(命令与模板测试)、`packages/core/test/`(核心测试)和[科研预检脚本](https://github.com/Explero/research-trellis/blob/main/packages/cli/scripts/hermes-preflight.js)。 - **S13**:[上游官方中文手册](https://docs.trytrellis.app/zh):参考“概览、安装、首个任务、工作原理、日常使用、高级内容、附录”的教学顺序;访问日期为 2026-07-14。本手册不是该网站的官方翻译或镜像,科研功能仍以 S1 至 S12 为准。 ## 预期结果 @@ -38,9 +38,9 @@ ## 验证记录 -- 日期:2026-07-14。 -- 版本:`0.6.0-beta.30`(测试版)。 -- 基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`(当前基准)。 +- 日期:2026-07-15。 +- 版本:`0.6.0-beta.31`(测试版)。 +- 更名前基准提交:`9f7dc8497b4782878d6fa7ac3b63eba5bde507df`。 - 命令:`rg -n -m 1 "^## |^# " docs/manual/*.md`(手册结构核对)。 - 结果:所有手册页的标题结构可读,来源索引仍指向当前仓库文件。 - 未验证项:本轮未重新访问所有外部网址,外部来源的可用性不在本记录中声称。 diff --git a/marketplace/workflows/native/workflow.md b/marketplace/workflows/native/workflow.md index 7e3dfeb..7ce7c0a 100644 --- a/marketplace/workflows/native/workflow.md +++ b/marketplace/workflows/native/workflow.md @@ -124,7 +124,7 @@ python3 ./.trellis/scripts/get_context.py --mode phase --step # 读取某 编辑检查清单: - 你修改某个 [workflow-state:STATUS] 块时,也要同步检查该 phase 下所有 `[required · once]` 步骤是否一致 - - 修改后运行 `trellis update`,把新的 block 内容推送到下游用户项目(按块托管替换) + - 修改后运行 `research-trellis update`,把新的 block 内容推送到下游用户项目(按块托管替换) - 完整运行时约定见: .trellis/spec/cli/backend/workflow-state-contract.md --> @@ -733,7 +733,7 @@ AI 会驱动一次按批次组织的提交,让 `/finish-work` 后续能在干 ### Changing the per-turn prompt text -直接编辑对应 `[workflow-state:STATUS]` block 的内容即可。编辑后,若你是模板维护者,运行 `trellis update`;若你是在定制自己的项目,重启 AI 会话即可 —— 无需改脚本。 +直接编辑对应 `[workflow-state:STATUS]` block 的内容即可。编辑后,若你是模板维护者,运行 `research-trellis update`;若你是在定制自己的项目,重启 AI 会话即可 —— 无需改脚本。 ### Adding a custom status diff --git a/mkdocs.yml b/mkdocs.yml index 02c8416..a827331 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,8 +1,8 @@ -site_name: Trellis-Hermes 中文手册 -site_description: Trellis-Hermes 科研工作流的安装、使用、审计与维护手册 -site_url: https://explero.github.io/Trellis-Hermes/ -repo_url: https://github.com/Explero/Trellis-Hermes -repo_name: Explero/Trellis-Hermes +site_name: Research Trellis 中文手册 +site_description: Research Trellis 科研工作流的安装、使用、审计与维护手册 +site_url: https://explero.github.io/research-trellis/ +repo_url: https://github.com/Explero/research-trellis +repo_name: Explero/research-trellis edit_uri: edit/main/docs/manual/ docs_dir: docs/manual @@ -59,7 +59,7 @@ markdown_extensions: extra_css: - stylesheets/extra.css -copyright: Copyright 2026 Trellis-Hermes contributors. Based on mindfold-ai/Trellis. +copyright: Copyright 2026 Research Trellis contributors. Based on mindfold-ai/Trellis. nav: - 首页: README.md diff --git a/package.json b/package.json index 345d760..de89c9e 100644 --- a/package.json +++ b/package.json @@ -1,26 +1,27 @@ { + "name": "research-trellis-workspace", "private": true, "license": "AGPL-3.0-or-later", "packageManager": "pnpm@10.32.1", "scripts": { "prepare": "husky", - "build": "pnpm --filter trellis-hermes-core build && pnpm --filter trellis-hermes build", - "build:core": "pnpm --filter trellis-hermes-core build", - "build:cli": "pnpm --filter trellis-hermes build", - "test": "pnpm --filter trellis-hermes-core test && pnpm run test:cli", - "test:core": "pnpm --filter trellis-hermes-core test", - "test:cli": "pnpm --filter trellis-hermes-core build && pnpm --filter trellis-hermes test", - "lint": "pnpm --filter trellis-hermes-core lint && pnpm --filter trellis-hermes lint", - "typecheck": "pnpm --filter trellis-hermes-core build && pnpm --filter trellis-hermes typecheck", - "release": "pnpm --filter trellis-hermes release", - "release:minor": "pnpm --filter trellis-hermes release:minor", - "release:major": "pnpm --filter trellis-hermes release:major", - "release:beta": "pnpm --filter trellis-hermes release:beta", - "release:rc": "pnpm --filter trellis-hermes release:rc", - "release:promote": "pnpm --filter trellis-hermes release:promote", + "build": "pnpm --filter research-trellis-core build && pnpm --filter research-trellis build", + "build:core": "pnpm --filter research-trellis-core build", + "build:cli": "pnpm --filter research-trellis build", + "test": "pnpm --filter research-trellis-core test && pnpm run test:cli", + "test:core": "pnpm --filter research-trellis-core test", + "test:cli": "pnpm --filter research-trellis-core build && pnpm --filter research-trellis test", + "lint": "pnpm --filter research-trellis-core lint && pnpm --filter research-trellis lint", + "typecheck": "pnpm --filter research-trellis-core build && pnpm --filter research-trellis typecheck", + "release": "pnpm --filter research-trellis release", + "release:minor": "pnpm --filter research-trellis release:minor", + "release:major": "pnpm --filter research-trellis release:major", + "release:beta": "pnpm --filter research-trellis release:beta", + "release:rc": "pnpm --filter research-trellis release:rc", + "release:promote": "pnpm --filter research-trellis release:promote", "release:check": "node packages/cli/scripts/release-preflight.js check-versions", "release:plan": "node packages/cli/scripts/release-preflight.js publish-plan", - "hermes:preflight": "pnpm --filter trellis-hermes hermes:preflight" + "hermes:preflight": "pnpm --filter research-trellis hermes:preflight" }, "devDependencies": { "husky": "^9.1.7", diff --git a/packages/cli/README.md b/packages/cli/README.md index f908a33..4eb57ad 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -1,15 +1,15 @@ -# Trellis-Hermes +# Research Trellis 面向科研项目的 `Trellis`(原版 Trellis)实验性改造分支。 -[![CI](https://github.com/Explero/Trellis-Hermes/actions/workflows/ci.yml/badge.svg)](https://github.com/Explero/Trellis-Hermes/actions/workflows/ci.yml) +[![CI](https://github.com/Explero/research-trellis/actions/workflows/ci.yml/badge.svg)](https://github.com/Explero/research-trellis/actions/workflows/ci.yml) [![License: AGPL-3.0-or-later](https://img.shields.io/badge/license-AGPL--3.0--or--later-16a34a.svg?style=flat-square)](LICENSE) 这个仓库是在原版 `Trellis`(原版项目)基础上改造出来的科研实验分支,不是上游官方版本,也不代表上游项目立场。它更接近一个科研项目里的工作流工具实验:在原版 Trellis 的任务、规范、平台接入基础上,加入更强的 `Hermes`(科研工作流)记录、门禁和子代理协作约束。 当前状态:可以放进低风险真实科研项目里试部署;不建议直接用于不可回滚的关键项目。 -当前 npm 发布包为 `trellis-hermes`(CLI 包)和 `trellis-hermes-core`(核心包)。 +从 `0.6.0-beta.31`(测试版)开始,项目使用 `research-trellis`(CLI 包)和 `research-trellis-core`(核心包),与上游原版名称明确区分。旧包 `trellis-hermes` 和 `trellis-hermes-core` 停留在 `0.6.0-beta.30`(旧测试版),仅用于已有安装迁移。 ## 上游来源与修改声明 @@ -17,14 +17,14 @@ 为了避免混淆,这里先说明几个边界: -- `Trellis-Hermes`(科研改造版)不是上游 `Trellis`(原版项目)的官方发布版本; +- `Research Trellis`(科研改造版)不是上游 `Trellis`(原版项目)的官方发布版本; - 仓库中的原始 Trellis 代码、模板、文档结构和许可证声明应继续归属于其原始作者和贡献者; - 本仓库新增和改动的部分主要围绕 `Hermes`(科研工作流)、记录门禁、子代理治理、科研计划变更记录和发布前预检; - 如果后续公开发布到 `npm`(包平台)或 `GitHub`(代码托管平台),应继续保留上游来源、许可证和修改说明。 ## 这是什么 -`Trellis-Hermes`(科研改造版)是一个本地开发工具,用来把 AI 协作开发过程里的关键动作落到仓库文件中: +`Research Trellis`(科研改造版)是一个本地开发工具,用来把 AI 协作开发过程里的关键动作落到仓库文件中: - 需求、设计、实现计划和检查记录放进 `.trellis/tasks/`; - 项目规范和工作流规则放进 `.trellis/spec/` 与 `.trellis/workflow.md`; @@ -42,7 +42,7 @@ pnpm install --frozen-lockfile pnpm lint pnpm test pnpm build -pnpm --filter trellis-hermes hermes:preflight +pnpm --filter research-trellis hermes:preflight ``` 这些检查覆盖: @@ -64,18 +64,18 @@ pnpm --filter trellis-hermes hermes:preflight pnpm lint pnpm test pnpm build -pnpm --filter trellis-hermes hermes:preflight +pnpm --filter research-trellis hermes:preflight node packages/cli/scripts/release-preflight.js check-versions --require-tag node packages/cli/scripts/release-preflight.js verify-packed-cli ``` -检查通过后,它会先发布 `trellis-hermes-core`(核心包),再发布 `trellis-hermes`(CLI 包),最后从 npm registry 验证两个包是否可见。 +检查通过后,它会先发布 `research-trellis-core`(核心包),再发布 `research-trellis`(CLI 包),最后从 npm registry 验证两个包是否可见。 发布前还需要在 `npm`(包平台)侧完成: -- 创建或认领 `trellis-hermes-core` 与 `trellis-hermes` 两个包; +- 创建或认领 `research-trellis-core` 与 `research-trellis` 两个包; - 给两个包配置 `trusted publishing`(可信发布); -- `Owner`(所有者)填写 `Explero`,`Repository`(仓库)填写 `Trellis-Hermes`; +- `Owner`(所有者)填写 `Explero`,`Repository`(仓库)填写 `research-trellis`; - `Workflow filename`(流程文件名)填写 `publish.yml`; - `Environment`(环境)填写 `npm-production`。 @@ -94,18 +94,28 @@ node packages/cli/scripts/release-preflight.js verify-packed-cli ## 从源码试用 -普通试用可安装已发布的测试版: +新包发布后,可固定安装本次测试版: ```bash -npm install -g trellis-hermes@0.6.0-beta.30 -trellis --version +npm install -g research-trellis@0.6.0-beta.31 +research-trellis --version +``` + +原有 `trellis` 与 `tl` 命令继续可用,便于已有脚本迁移;新文档统一使用 `research-trellis` 作为主命令。 + +已经安装旧包时,发布后按下面的方式迁移: + +```bash +npm uninstall -g trellis-hermes +npm install -g research-trellis@0.6.0-beta.31 +research-trellis --version ``` 需要修改或审阅实现时,再从 GitHub 源码运行: ```bash -git clone git@github.com:Explero/Trellis-Hermes.git -cd Trellis-Hermes +git clone git@github.com:Explero/research-trellis.git +cd research-trellis corepack enable pnpm install --frozen-lockfile pnpm build @@ -117,14 +127,14 @@ pnpm build cd /path/to/your/research-project git status git add . -git commit -m "chore: checkpoint before Trellis-Hermes trial" -node /path/to/Trellis-Hermes/packages/cli/bin/trellis.js init -u your-name --claude +git commit -m "chore: checkpoint before Research Trellis trial" +node /path/to/research-trellis/packages/cli/bin/trellis.js init -u your-name --claude ``` 如果项目里已经有 Trellis,可以先用 `update`(更新)而不是重新初始化: ```bash -node /path/to/Trellis-Hermes/packages/cli/bin/trellis.js update +node /path/to/research-trellis/packages/cli/bin/trellis.js update ``` 执行前请先看清楚提示,涉及覆盖文件时不要盲目确认。 @@ -135,7 +145,7 @@ node /path/to/Trellis-Hermes/packages/cli/bin/trellis.js update ```text 准备一个干净 git checkpoint -→ 初始化或更新 Trellis-Hermes +→ 初始化或更新 Research Trellis → 用自然语言提出一个小任务 → 让 AI 创建任务并补齐 planning → 检查 .trellis/tasks/ 下的 prd/design/implement 产物 @@ -187,7 +197,7 @@ node /path/to/Trellis-Hermes/packages/cli/bin/trellis.js update 这个项目基于原版 `Trellis`(原版 AI coding 工作流工具)继续改造,仍然保留: -- `trellis init` / `trellis update`; +- `research-trellis init` / `research-trellis update`; - `.trellis/spec/` 项目规范; - `.trellis/tasks/` 任务系统; - 多平台接入模板; @@ -239,7 +249,7 @@ node /path/to/Trellis-Hermes/packages/cli/bin/trellis.js update pnpm lint pnpm test pnpm build -pnpm --filter trellis-hermes hermes:preflight +pnpm --filter research-trellis hermes:preflight ``` 如果改动涉及 Hermes 模板、hook 或任务流,优先补充对应测试,再看 GitHub Actions 结果。 diff --git a/packages/cli/package.json b/packages/cli/package.json index c24c800..1b249ed 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,11 +1,12 @@ { - "name": "trellis-hermes", - "version": "0.6.0-beta.30", - "description": "AI capabilities grow like ivy — Trellis provides the structure to guide them along a disciplined path", + "name": "research-trellis", + "version": "0.6.0-beta.31", + "description": "Auditable AI-assisted research workflow tooling built on Trellis", "type": "module", "main": "./dist/index.js", "types": "./dist/index.d.ts", "bin": { + "research-trellis": "bin/trellis.js", "trellis": "bin/trellis.js", "tl": "bin/trellis.js" }, @@ -50,6 +51,8 @@ "developer-tools", "agent", "memory", + "research", + "reproducibility", "trellis" ], "author": "Explero", @@ -59,7 +62,7 @@ ], "license": "AGPL-3.0-or-later", "dependencies": { - "trellis-hermes-core": "workspace:*", + "research-trellis-core": "workspace:*", "chalk": "^5.3.0", "commander": "^12.1.0", "figlet": "^1.9.4", @@ -93,6 +96,6 @@ ], "repository": { "type": "git", - "url": "git+https://github.com/Explero/Trellis-Hermes.git" + "url": "git+https://github.com/Explero/research-trellis.git" } } diff --git a/packages/cli/scripts/bump-versions.js b/packages/cli/scripts/bump-versions.js index f065df7..c9197d8 100644 --- a/packages/cli/scripts/bump-versions.js +++ b/packages/cli/scripts/bump-versions.js @@ -1,6 +1,6 @@ #!/usr/bin/env node /** - * Bump trellis-hermes and trellis-hermes-core to the same next + * Bump research-trellis and research-trellis-core to the same next * version. Replaces the per-package `pnpm version --no-git-tag-version` * calls in the release scripts so the two packages can never drift. * @@ -122,7 +122,7 @@ function main() { writeJSON(CLI_PKG, cli); // Human message to stderr so stdout stays a clean machine-readable value. process.stderr.write( - `${GREEN}ok${RESET} bumped trellis-hermes and trellis-hermes-core (${type}) -> ${next}\n`, + `${GREEN}ok${RESET} bumped research-trellis and research-trellis-core (${type}) -> ${next}\n`, ); process.stdout.write(next + "\n"); } diff --git a/packages/cli/scripts/check-manifest-continuity.js b/packages/cli/scripts/check-manifest-continuity.js index 16b3fef..692962e 100644 --- a/packages/cli/scripts/check-manifest-continuity.js +++ b/packages/cli/scripts/check-manifest-continuity.js @@ -9,7 +9,7 @@ * bucket of migrations. * * This guard runs before `pnpm version` bumps on every release track: - * 1. Query npm for all published versions of trellis-hermes + * 1. Query npm for all published versions of research-trellis * 2. Diff against local `src/migrations/manifests/*.json` * 3. Fail non-zero if any npm version lacks a local manifest * @@ -31,7 +31,7 @@ import { fileURLToPath } from "node:url"; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const MANIFESTS_DIR = path.join(__dirname, "../src/migrations/manifests"); -const PACKAGE_NAME = "trellis-hermes"; +const PACKAGE_NAME = "research-trellis"; /** * Historical npm versions whose manifests are permanently missing from the diff --git a/packages/cli/scripts/create-manifest.js b/packages/cli/scripts/create-manifest.js index 370fabd..464bb82 100644 --- a/packages/cli/scripts/create-manifest.js +++ b/packages/cli/scripts/create-manifest.js @@ -44,7 +44,7 @@ import { fileURLToPath } from "node:url"; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const MANIFESTS_DIR = path.join(__dirname, "../src/migrations/manifests"); -const PACKAGE_NAME = "trellis-hermes"; +const PACKAGE_NAME = "research-trellis"; /** * Check whether `version` is already published on npm. Returns false on network diff --git a/packages/cli/scripts/hermes-preflight.js b/packages/cli/scripts/hermes-preflight.js index dd3a6fc..d5a8223 100644 --- a/packages/cli/scripts/hermes-preflight.js +++ b/packages/cli/scripts/hermes-preflight.js @@ -217,7 +217,7 @@ export function checkPythonCompile(repoRoot = DEFAULT_REPO_ROOT) { if (pythonFiles.length === 0) { return result("Python compile", false, ["no Python template files found"]); } - const pycache = fs.mkdtempSync(path.join(os.tmpdir(), "trellis-hermes-pycache-")); + const pycache = fs.mkdtempSync(path.join(os.tmpdir(), "research-trellis-pycache-")); try { const run = spawnSync("python3", ["-m", "py_compile", ...pythonFiles], { cwd: repoRoot, @@ -311,30 +311,30 @@ export function runPreflight(options = {}) { if (quick) { checks.push( result("Template tests", true, [ - `${YELLOW}quick mode${RESET}: skipped; run pnpm --filter trellis-hermes exec vitest run test/templates/hermes-runtime.test.ts test/templates/trellis.test.ts test/templates/claude.test.ts test/templates/codex.test.ts test/templates/shared-hooks.test.ts`, + `${YELLOW}quick mode${RESET}: skipped; run pnpm --filter research-trellis exec vitest run test/templates/hermes-runtime.test.ts test/templates/trellis.test.ts test/templates/claude.test.ts test/templates/codex.test.ts test/templates/shared-hooks.test.ts`, ]), result("Typecheck", true, [ - `${YELLOW}quick mode${RESET}: skipped; run pnpm --filter trellis-hermes typecheck`, + `${YELLOW}quick mode${RESET}: skipped; run pnpm --filter research-trellis typecheck`, ]), result("Build", true, [ - `${YELLOW}quick mode${RESET}: skipped; run pnpm --filter trellis-hermes build`, + `${YELLOW}quick mode${RESET}: skipped; run pnpm --filter research-trellis build`, ]), ); } else { checks.push( runCommandCheck("Template tests", repoRoot, "pnpm", [ "--filter", - "trellis-hermes", + "research-trellis", ...TEMPLATE_TEST_ARGS, ]), runCommandCheck("Typecheck", repoRoot, "pnpm", [ "--filter", - "trellis-hermes", + "research-trellis", "typecheck", ]), runCommandCheck("Build", repoRoot, "pnpm", [ "--filter", - "trellis-hermes", + "research-trellis", "build", ]), ); diff --git a/packages/cli/scripts/release-preflight.js b/packages/cli/scripts/release-preflight.js index e796d94..0d802a3 100644 --- a/packages/cli/scripts/release-preflight.js +++ b/packages/cli/scripts/release-preflight.js @@ -299,7 +299,7 @@ function preparePackedCli() { } function verifyHermesPythonTemplates({ quiet = false } = {}) { - const tmp = fs.mkdtempSync(path.join(os.tmpdir(), "trellis-hermes-pycompile-")); + const tmp = fs.mkdtempSync(path.join(os.tmpdir(), "research-trellis-pycompile-")); try { const files = HERMES_PYTHON_TEMPLATE_FILES.map((file) => path.join(REPO_ROOT, file)); for (const file of files) { diff --git a/packages/cli/scripts/release.js b/packages/cli/scripts/release.js index 1b44534..354e937 100644 --- a/packages/cli/scripts/release.js +++ b/packages/cli/scripts/release.js @@ -99,7 +99,7 @@ function main() { run("node scripts/check-manifest-continuity.js"); docsGuard(type); - run("pnpm --filter trellis-hermes-core test"); + run("pnpm --filter research-trellis-core test"); run("pnpm test"); stageReleaseChanges(); diff --git a/packages/cli/src/cli/index.ts b/packages/cli/src/cli/index.ts index 44e15cc..fa1414b 100644 --- a/packages/cli/src/cli/index.ts +++ b/packages/cli/src/cli/index.ts @@ -35,10 +35,10 @@ function checkForUpdates(cwd: string): void { // CLI is newer than project - update available console.log( chalk.yellow( - `\n⚠️ Trellis update available: ${projectVersion} → ${cliVersion}`, + `\n⚠️ Research Trellis update available: ${projectVersion} → ${cliVersion}`, ), ); - console.log(chalk.gray(` Run: trellis update\n`)); + console.log(chalk.gray(` Run: research-trellis update\n`)); } else if (comparison < 0) { // CLI is older than project - CLI needs updating console.log( @@ -46,7 +46,7 @@ function checkForUpdates(cwd: string): void { `\n⚠️ Your CLI (${cliVersion}) is older than project (${projectVersion})`, ), ); - console.log(chalk.gray(` Run: trellis upgrade\n`)); + console.log(chalk.gray(` Run: research-trellis upgrade\n`)); } } @@ -59,7 +59,7 @@ if (fs.existsSync(path.join(cwd, DIR_NAMES.WORKFLOW))) { const program = new Command(); program - .name("trellis") + .name("research-trellis") .description( "AI-assisted development workflow framework for Cursor, Claude Code and more", ) @@ -160,11 +160,8 @@ program program .command("upgrade") - .description("Upgrade the global Trellis CLI package") - .option( - "--tag ", - "npm dist-tag or version to install (default: latest)", - ) + .description("Upgrade the global Research Trellis CLI package") + .option("--tag ", "npm dist-tag or version to install (default: latest)") .option("--dry-run", "Print the install command without running it") .action(async (options: Record) => { try { @@ -212,7 +209,7 @@ program program .command("mem") .description( - "Search/recall AI conversation history across Claude Code, Codex, OpenCode (run 'trellis mem help' for subcommands and flags)", + "Search/recall AI conversation history across Claude Code, Codex, OpenCode (run 'research-trellis mem help' for subcommands and flags)", ) .allowUnknownOption(true) .helpOption(false) diff --git a/packages/cli/src/commands/channel/adapters/codex.ts b/packages/cli/src/commands/channel/adapters/codex.ts index 157860a..d4d02f3 100644 --- a/packages/cli/src/commands/channel/adapters/codex.ts +++ b/packages/cli/src/commands/channel/adapters/codex.ts @@ -157,7 +157,7 @@ function handleServerRequest(msg: JsonRpcInbound): ParseResult { if (msg.method === "mcpServer/elicitation/request") { // MVP: auto-allow MCP tool calls. The channel worker spawn is already - // trusted by whoever ran `trellis channel spawn`; permission boundary + // trusted by whoever ran `research-trellis channel spawn`; permission boundary // is at the spawn call, not per-MCP-call. result = { action: "accept", content: {} }; const params = (msg.params ?? {}) as Record; diff --git a/packages/cli/src/commands/channel/context.ts b/packages/cli/src/commands/channel/context.ts index e0286cf..939d95c 100644 --- a/packages/cli/src/commands/channel/context.ts +++ b/packages/cli/src/commands/channel/context.ts @@ -7,7 +7,7 @@ import { listChannelContext, listThreadContext, type ChannelScope, -} from "trellis-hermes-core/channel"; +} from "research-trellis-core/channel"; import { parseChannelScope } from "./store/schema.js"; diff --git a/packages/cli/src/commands/channel/create.ts b/packages/cli/src/commands/channel/create.ts index 003f072..c331bc6 100644 --- a/packages/cli/src/commands/channel/create.ts +++ b/packages/cli/src/commands/channel/create.ts @@ -4,7 +4,7 @@ import { resolveChannelRef, type ChannelScope, type ChannelType, -} from "trellis-hermes-core/channel"; +} from "research-trellis-core/channel"; import { parseChannelScope, diff --git a/packages/cli/src/commands/channel/index.ts b/packages/cli/src/commands/channel/index.ts index c3bef32..092b9cf 100644 --- a/packages/cli/src/commands/channel/index.ts +++ b/packages/cli/src/commands/channel/index.ts @@ -26,7 +26,7 @@ import { channelTitleClear, channelTitleSet } from "./title.js"; import { runSupervisor } from "./supervisor.js"; import { channelWait, parseDuration } from "./wait.js"; import { parseCsv } from "./store/schema.js"; -import { parseInboxPolicy } from "trellis-hermes-core/channel"; +import { parseInboxPolicy } from "research-trellis-core/channel"; export function registerChannelCommand(program: Command): void { const channel = program diff --git a/packages/cli/src/commands/channel/list.ts b/packages/cli/src/commands/channel/list.ts index 0ffc279..921d949 100644 --- a/packages/cli/src/commands/channel/list.ts +++ b/packages/cli/src/commands/channel/list.ts @@ -1,5 +1,5 @@ /** - * `trellis channel list` — table summary of all channels in `~/.trellis/channels/`. + * `research-trellis channel list` — table summary of all channels in `~/.trellis/channels/`. * * Columns: name, created (ts), workers (alive/total), last activity, task. * Sorted by most recent activity first. diff --git a/packages/cli/src/commands/channel/rm.ts b/packages/cli/src/commands/channel/rm.ts index 357955a..43763ed 100644 --- a/packages/cli/src/commands/channel/rm.ts +++ b/packages/cli/src/commands/channel/rm.ts @@ -1,8 +1,8 @@ /** - * `trellis channel rm ` — kill any live workers, then remove the + * `research-trellis channel rm ` — kill any live workers, then remove the * channel directory under `~/.trellis/channels/`. * - * `trellis channel prune [--all | --idle | --empty]` — bulk + * `research-trellis channel prune [--all | --idle | --empty]` — bulk * cleanup matching criteria. */ diff --git a/packages/cli/src/commands/channel/send.ts b/packages/cli/src/commands/channel/send.ts index 4a6ea45..4a60eb6 100644 --- a/packages/cli/src/commands/channel/send.ts +++ b/packages/cli/src/commands/channel/send.ts @@ -2,7 +2,7 @@ import { parseDeliveryMode, sendMessage as coreSendMessage, type ChannelScope, -} from "trellis-hermes-core/channel"; +} from "research-trellis-core/channel"; import { parseChannelScope, parseCsv } from "./store/schema.js"; import { resolveChannelTextBody } from "./text-body.js"; diff --git a/packages/cli/src/commands/channel/spawn.ts b/packages/cli/src/commands/channel/spawn.ts index 21a54e4..6f4b1b1 100644 --- a/packages/cli/src/commands/channel/spawn.ts +++ b/packages/cli/src/commands/channel/spawn.ts @@ -3,7 +3,7 @@ import fs from "node:fs"; import path from "node:path"; import { fileURLToPath } from "node:url"; -import type { InboxPolicy } from "trellis-hermes-core/channel"; +import type { InboxPolicy } from "research-trellis-core/channel"; import { loadAgent } from "./agent-loader.js"; import type { Provider } from "./adapters/index.js"; diff --git a/packages/cli/src/commands/channel/store/events.ts b/packages/cli/src/commands/channel/store/events.ts index 52752a7..2455fb1 100644 --- a/packages/cli/src/commands/channel/store/events.ts +++ b/packages/cli/src/commands/channel/store/events.ts @@ -1,7 +1,7 @@ /** * Channel events local module. * - * Canonical types and reducers come from `trellis-hermes-core`. + * Canonical types and reducers come from `research-trellis-core`. * The legacy local `appendEvent` / `readLastSeq` primitives remain * here for CLI runtime callers (supervisor / spawn / kill) that still * write directly to the JSONL during the Phase 5 supervisor migration. @@ -19,7 +19,7 @@ import { reduceChannelMetadata, type ChannelEvent, type ChannelMetadata, -} from "trellis-hermes-core/channel"; +} from "research-trellis-core/channel"; import { withLock } from "./lock.js"; import { eventsPath, channelDir, lockPath } from "./paths.js"; @@ -33,7 +33,7 @@ export { isContextEvent, isChannelMetadataEvent, reduceChannelMetadata, -} from "trellis-hermes-core/channel"; +} from "research-trellis-core/channel"; export type { ChannelEvent, @@ -49,7 +49,7 @@ export type { ErrorChannelEvent, ProgressChannelEvent, SupervisorWarningChannelEvent, -} from "trellis-hermes-core/channel"; +} from "research-trellis-core/channel"; export async function ensureChannelDir( name: string, diff --git a/packages/cli/src/commands/channel/store/filter.ts b/packages/cli/src/commands/channel/store/filter.ts index 7913013..749c97b 100644 --- a/packages/cli/src/commands/channel/store/filter.ts +++ b/packages/cli/src/commands/channel/store/filter.ts @@ -1,6 +1,6 @@ export { MEANINGFUL_EVENT_KINDS, matchesEventFilter, -} from "trellis-hermes-core/channel"; +} from "research-trellis-core/channel"; -export type { ChannelEventFilter } from "trellis-hermes-core/channel"; +export type { ChannelEventFilter } from "research-trellis-core/channel"; diff --git a/packages/cli/src/commands/channel/store/schema.ts b/packages/cli/src/commands/channel/store/schema.ts index ddccae5..80303b2 100644 --- a/packages/cli/src/commands/channel/store/schema.ts +++ b/packages/cli/src/commands/channel/store/schema.ts @@ -1,7 +1,7 @@ /** * Channel schema re-exports. * - * Canonical source: `trellis-hermes-core/channel`. This module is + * Canonical source: `research-trellis-core/channel`. This module is * kept as a thin pass-through during the supervisor/wait migration so * CLI runtime code (supervisor, spawn, kill, wait) can continue to * import from a stable local path while command files migrate to the @@ -19,7 +19,7 @@ export { asStringArray, asContextEntries, buildContextEntries, -} from "trellis-hermes-core/channel"; +} from "research-trellis-core/channel"; export type { ChannelScope, @@ -31,10 +31,10 @@ export type { RawContextEntry, ThreadAction, EventOrigin, -} from "trellis-hermes-core/channel"; +} from "research-trellis-core/channel"; -import { buildContextEntries } from "trellis-hermes-core/channel"; -import type { ContextEntry } from "trellis-hermes-core/channel"; +import { buildContextEntries } from "research-trellis-core/channel"; +import type { ContextEntry } from "research-trellis-core/channel"; /** * CSV parser kept colocated with the schema for CLI command files that diff --git a/packages/cli/src/commands/channel/store/thread-state.ts b/packages/cli/src/commands/channel/store/thread-state.ts index f672987..c5e87b3 100644 --- a/packages/cli/src/commands/channel/store/thread-state.ts +++ b/packages/cli/src/commands/channel/store/thread-state.ts @@ -2,14 +2,14 @@ export { reduceThreads, buildThreadAliasResolver, collectThreadTimeline, -} from "trellis-hermes-core/channel"; +} from "research-trellis-core/channel"; export type { ThreadState, ThreadAliasResolver, -} from "trellis-hermes-core/channel"; +} from "research-trellis-core/channel"; -import type { ThreadState } from "trellis-hermes-core/channel"; +import type { ThreadState } from "research-trellis-core/channel"; export function formatThreadBoard(states: ThreadState[]): string[] { if (states.length === 0) return ["(no threads)"]; diff --git a/packages/cli/src/commands/channel/supervisor.ts b/packages/cli/src/commands/channel/supervisor.ts index 04433f9..1b5d0b8 100644 --- a/packages/cli/src/commands/channel/supervisor.ts +++ b/packages/cli/src/commands/channel/supervisor.ts @@ -2,7 +2,7 @@ * Supervisor process: owns a single worker (claude or codex) and bridges * worker ↔ channel events.jsonl. * - * Run as: `trellis channel __supervisor ` + * Run as: `research-trellis channel __supervisor ` * * Three concurrent loops: * 1. stdout reader — parse worker stdout → adapter → append events @@ -20,7 +20,7 @@ import type { Readable, Writable } from "node:stream"; import { DEFAULT_INBOX_POLICY, type InboxPolicy, -} from "trellis-hermes-core/channel"; +} from "research-trellis-core/channel"; import { getAdapter, type Provider } from "./adapters/index.js"; import { appendEvent } from "./store/events.js"; @@ -69,7 +69,7 @@ type Child = ChildProcessByStdio; const SHUTDOWN_GRACE_MS = 3000; /** - * Entry point invoked by `trellis channel __supervisor `. + * Entry point invoked by `research-trellis channel __supervisor `. */ export async function runSupervisor( channelName: string, @@ -78,7 +78,7 @@ export async function runSupervisor( ): Promise { const config = readConfig(configPath); - // Self-pid file lets `trellis channel kill` find us. + // Self-pid file lets `research-trellis channel kill` find us. const project = process.env.TRELLIS_CHANNEL_PROJECT; fs.writeFileSync( workerFile(channelName, workerName, "pid", project), diff --git a/packages/cli/src/commands/channel/supervisor/inbox.ts b/packages/cli/src/commands/channel/supervisor/inbox.ts index a297b30..fd2c982 100644 --- a/packages/cli/src/commands/channel/supervisor/inbox.ts +++ b/packages/cli/src/commands/channel/supervisor/inbox.ts @@ -17,7 +17,7 @@ import { DEFAULT_INBOX_POLICY, matchesInboxPolicy, type InboxPolicy, -} from "trellis-hermes-core/channel"; +} from "research-trellis-core/channel"; import type { WorkerAdapter } from "../adapters/index.js"; import { appendEvent } from "../store/events.js"; diff --git a/packages/cli/src/commands/channel/supervisor/warning.ts b/packages/cli/src/commands/channel/supervisor/warning.ts index 1586eb0..413b235 100644 --- a/packages/cli/src/commands/channel/supervisor/warning.ts +++ b/packages/cli/src/commands/channel/supervisor/warning.ts @@ -3,7 +3,7 @@ * * Emits a one-shot `supervisor_warning` channel event when the worker * is approaching its lifetime timeout, so observers (dispatchers / - * `trellis channel messages`) can see the impending kill without + * `research-trellis channel messages`) can see the impending kill without * having to poll. The event is observability-only — it never replaces * the eventual `killed` / `done` / `error` terminal event, and is * not part of the meaningful-event set so plain `wait` does not wake diff --git a/packages/cli/src/commands/channel/threads.ts b/packages/cli/src/commands/channel/threads.ts index 8fa32ab..1e56433 100644 --- a/packages/cli/src/commands/channel/threads.ts +++ b/packages/cli/src/commands/channel/threads.ts @@ -8,7 +8,7 @@ import { type ChannelScope, type ContextChannelEvent, type ThreadChannelEvent, -} from "trellis-hermes-core/channel"; +} from "research-trellis-core/channel"; import { parseChannelScope, @@ -64,7 +64,7 @@ export async function channelThreadPost( const parsed = parseThreadAction(opts.action); if (parsed === "rename") { throw new Error( - "Use `trellis channel thread rename ` instead of `post rename`.", + "Use `research-trellis channel thread rename ` instead of `post rename`.", ); } const action = parsed as Exclude; diff --git a/packages/cli/src/commands/channel/title.ts b/packages/cli/src/commands/channel/title.ts index fd2321e..18edd4b 100644 --- a/packages/cli/src/commands/channel/title.ts +++ b/packages/cli/src/commands/channel/title.ts @@ -2,7 +2,7 @@ import { clearChannelTitle, setChannelTitle, type ChannelScope, -} from "trellis-hermes-core/channel"; +} from "research-trellis-core/channel"; import { parseChannelScope } from "./store/schema.js"; diff --git a/packages/cli/src/commands/init.ts b/packages/cli/src/commands/init.ts index df71994..3460821 100644 --- a/packages/cli/src/commands/init.ts +++ b/packages/cli/src/commands/init.ts @@ -140,7 +140,7 @@ export function requireSupportedPython(command: string): string { * Windows: `python` is the usual python.org installer choice, but Microsoft * Store ships `python3`, and the `py` launcher is `py -3`. We try all three * before giving up — fixes #236 where users with only `python3` (not - * `python`) had `trellis init` fail outright. + * `python`) had `research-trellis init` fail outright. * * Non-Windows: `python3` is canonical; `python` is a fallback for systems * where Python 3 is the only Python and is named `python` (some Arch @@ -315,7 +315,11 @@ function writeTaskSkeleton( } function readCurrentDeveloperName(cwd: string): string | null { - const developerFile = path.join(cwd, DIR_NAMES.WORKFLOW, FILE_NAMES.DEVELOPER); + const developerFile = path.join( + cwd, + DIR_NAMES.WORKFLOW, + FILE_NAMES.DEVELOPER, + ); if (!fs.existsSync(developerFile)) { return null; } @@ -418,7 +422,7 @@ function getBootstrapPrdContent( **你(AI)正在执行这个任务,开发者不会直接阅读这个文件。** -开发者刚刚第一次在这个项目里运行了 \`trellis init\`。 +开发者刚刚第一次在这个项目里运行了 \`research-trellis init\`。 现在 \`.trellis/\` 已创建,里面包含待补全的 spec 脚手架,这个启动任务也已经 出现在 \`.trellis/tasks/\` 下。当他们准备处理它时,应当在提供 Trellis 会话身份 的会话里启动这个任务。 @@ -603,7 +607,7 @@ function getBootstrapTaskJson( assignee: developer, createdAt: today, relatedFiles, - notes: `First-time setup task created by trellis init (${projectType} project)`, + notes: `First-time setup task created by research-trellis init (${projectType} project)`, }); } @@ -646,7 +650,7 @@ function getJoinerTaskJson(developer: string, taskName: string): TaskJson { assignee: developer, createdAt: today, notes: - "Generated by trellis init for a new developer joining an existing Trellis project", + "Generated by research-trellis init for a new developer joining an existing Trellis project", }); } @@ -660,7 +664,7 @@ function getJoinerPrdContent(developer: string, pythonCmd: string): string { **你(AI)正在执行这个任务,开发者不会直接阅读这个文件。** -\`${developer}\` 刚在一个全新 clone 上运行了 \`trellis init\`,看到了 “Developer +\`${developer}\` 刚在一个全新 clone 上运行了 \`research-trellis init\`,看到了 “Developer initialized” 提示,接下来会开始在聊天里向你提问。这个入项任务已经位于 \`.trellis/tasks/\` 下;当他们准备处理它时,应当在提供 Trellis 会话身份的会话中启动。 @@ -738,7 +742,7 @@ ${pythonCmd} ./.trellis/scripts/task.py archive 00-join-${slug} ## 建议开场白 -“欢迎!这次 \`trellis init\` 已经让我可以带你完成这个项目的入项引导。我可以先讲工作流, +“欢迎!这次 \`research-trellis init\` 已经让我可以带你完成这个项目的入项引导。我可以先讲工作流, 也可以先讲底层运行机制、团队 spec,或者直接看你现在关心的问题——你想从哪一块开始?” `; } @@ -938,7 +942,10 @@ async function handleReinit( ); } - if (developerInitialized && getConfiguredPlatforms(cwd).has("claude-code")) { + if ( + developerInitialized && + getConfiguredPlatforms(cwd).has("claude-code") + ) { try { ensureInitialTrellisSwitch(cwd, devName); } catch { @@ -1058,7 +1065,7 @@ interface InitAnswers { export async function init(options: InitOptions): Promise { // Refuse to run in $HOME — running here would scoop platform runtime data // (Claude/Codex/OpenCode session histories etc.) into the trellis hash - // manifest, and a subsequent `trellis uninstall` would wipe it. + // manifest, and a subsequent `research-trellis uninstall` would wipe it. if (isCwdHomedir() && !homedirBypassEnabled()) { console.error(chalk.red(homedirGuardMessage("init"))); process.exit(1); @@ -1730,8 +1737,8 @@ export async function init(options: InitOptions): Promise { console.log(chalk.yellow(` ${result.message}`)); console.log(chalk.gray(" Falling back to blank templates...")); const retryCmd = registry - ? `trellis init --registry ${registry.gigetSource} --template ${selectedTemplate}` - : `trellis init --template ${selectedTemplate}`; + ? `research-trellis init --registry ${registry.gigetSource} --template ${selectedTemplate}` + : `research-trellis init --template ${selectedTemplate}`; console.log(chalk.gray(` You can retry later: ${retryCmd}`)); } } else if (registry && fetchedTemplates.length === 0) { @@ -1784,7 +1791,7 @@ export async function init(options: InitOptions): Promise { console.log(chalk.gray(" Falling back to blank templates...")); console.log( chalk.gray( - ` You can retry later: trellis init --registry ${registry.gigetSource}`, + ` You can retry later: research-trellis init --registry ${registry.gigetSource}`, ), ); } @@ -1877,7 +1884,7 @@ export async function init(options: InitOptions): Promise { } // Non-native workflow is user-managed local content. Drop the - // `.trellis/workflow.md` hash entry so `trellis update` classifies it as + // `.trellis/workflow.md` hash entry so `research-trellis update` classifies it as // modified and does not silently restore native bytes. See design.md // "Durable-state contract". if (workflowMdOverride !== undefined && workflowId !== NATIVE_WORKFLOW_ID) { @@ -1898,7 +1905,10 @@ export async function init(options: InitOptions): Promise { // Silent failure - user can run init_developer.py manually } - if (developerInitialized && getConfiguredPlatforms(cwd).has("claude-code")) { + if ( + developerInitialized && + getConfiguredPlatforms(cwd).has("claude-code") + ) { try { ensureInitialTrellisSwitch(cwd, developerName); } catch { diff --git a/packages/cli/src/commands/mem.ts b/packages/cli/src/commands/mem.ts index 5ea8f4e..f3d877c 100644 --- a/packages/cli/src/commands/mem.ts +++ b/packages/cli/src/commands/mem.ts @@ -1,5 +1,5 @@ /** - * mem.ts — CLI wrapper over `trellis-hermes-core/mem`. + * mem.ts — CLI wrapper over `research-trellis-core/mem`. * * The reusable retrieval / context-extraction logic lives in core; this file * owns only CLI concerns: argument parsing, terminal rendering, the OpenCode @@ -12,7 +12,7 @@ * extract dump cleaned dialogue (use --grep KW to filter turns) * projects list active project cwds (AI-routing entry point) * - * Run `trellis mem help` for the full flag reference. + * Run `research-trellis mem help` for the full flag reference. */ import * as os from "node:os"; @@ -25,14 +25,14 @@ import { MemSessionNotFoundError, readMemContext, searchMemSessions, -} from "trellis-hermes-core/mem"; +} from "research-trellis-core/mem"; import type { MemFilter, MemPhase, MemSessionInfo, MemSourceFilter, MemSourceKind, -} from "trellis-hermes-core/mem"; +} from "research-trellis-core/mem"; // ---------- argv ---------- @@ -454,7 +454,7 @@ function cmdExtract(argv: Argv): void { } function cmdHelp(): void { - console.log(`trellis mem — list/search Claude/Codex/OpenCode sessions + console.log(`research-trellis mem — list/search Claude/Codex/OpenCode sessions commands: list list sessions (default if no command) @@ -484,11 +484,11 @@ flags: --help, -h show this help examples: - trellis mem list - trellis mem list --global --platform claude --since 2026-04-01 - trellis mem search "session insight" --global - trellis mem extract 5842592d --grep memory - trellis mem extract 5842592d --phase brainstorm + research-trellis mem list + research-trellis mem list --global --platform claude --since 2026-04-01 + research-trellis mem search "session insight" --global + research-trellis mem extract 5842592d --grep memory + research-trellis mem extract 5842592d --phase brainstorm `); } diff --git a/packages/cli/src/commands/uninstall.ts b/packages/cli/src/commands/uninstall.ts index 27bb5bd..a067902 100644 --- a/packages/cli/src/commands/uninstall.ts +++ b/packages/cli/src/commands/uninstall.ts @@ -1,5 +1,5 @@ /** - * `trellis uninstall` — remove every file written by `trellis init` / `update` + * `research-trellis uninstall` — remove every file written by `research-trellis init` / `update` * from the current project, plus the `.trellis/` directory itself. * * The single source of truth for "what trellis wrote" is @@ -443,7 +443,7 @@ export async function uninstall(options: UninstallOptions = {}): Promise { if (!options.yes) { // Make sure stdin is in a usable state for the prompt; in scripted // environments that closed stdin, inquirer would otherwise raise. We - // honor the same UX as `trellis update` (which also fails closed in + // honor the same UX as `research-trellis update` (which also fails closed in // that case). if (!process.stdin.isTTY) { console.error( diff --git a/packages/cli/src/commands/update.ts b/packages/cli/src/commands/update.ts index bcd13e6..622b7af 100644 --- a/packages/cli/src/commands/update.ts +++ b/packages/cli/src/commands/update.ts @@ -1715,7 +1715,7 @@ export async function update(options: UpdateOptions): Promise { // Check if Trellis is initialized if (!fs.existsSync(path.join(cwd, DIR_NAMES.WORKFLOW))) { console.log(chalk.red("Error: Trellis not initialized in this directory.")); - console.log(chalk.gray("Run 'trellis init' first.")); + console.log(chalk.gray("Run 'research-trellis init' first.")); return; } @@ -1753,7 +1753,7 @@ export async function update(options: UpdateOptions): Promise { `⚠️ Your CLI (${cliVersion}) is behind npm (${latestNpmVersion}).`, ), ); - console.log(chalk.yellow(` Run: trellis upgrade\n`)); + console.log(chalk.yellow(` Run: research-trellis upgrade\n`)); } // Check for downgrade situation @@ -1767,9 +1767,11 @@ export async function update(options: UpdateOptions): Promise { if (!options.allowDowngrade) { console.log(chalk.gray("Solutions:")); - console.log(chalk.gray(` 1. Update your CLI: trellis upgrade`)); + console.log(chalk.gray(` 1. Update your CLI: research-trellis upgrade`)); console.log( - chalk.gray(` 2. Force downgrade: trellis update --allow-downgrade\n`), + chalk.gray( + ` 2. Force downgrade: research-trellis update --allow-downgrade\n`, + ), ); return; } @@ -1792,7 +1794,7 @@ export async function update(options: UpdateOptions): Promise { if (isUnknownVersion) { console.log( chalk.yellow( - "⚠️ No version file found. Skipping migrations — run trellis init to fix.", + "⚠️ No version file found. Skipping migrations — run research-trellis init to fix.", ), ); console.log(chalk.gray(" Template updates will still be applied.")); @@ -1817,7 +1819,7 @@ export async function update(options: UpdateOptions): Promise { // Self-heal poisoned manifests: prune entries that no current platform // configurator owns. This silently removes user-owned paths that early - // buggy versions of `trellis init` over-hashed (e.g. .codex/sessions/*). + // buggy versions of `research-trellis init` over-hashed (e.g. .codex/sessions/*). // Include codex in known-platforms when codexUpgradeNeeded so legacy Codex // markers under .agents/skills/ survive into the upgrade flow. { @@ -1957,7 +1959,7 @@ export async function update(options: UpdateOptions): Promise { ), ); console.log(""); - console.log(chalk.yellow(` Run: trellis update --migrate`)); + console.log(chalk.yellow(` Run: research-trellis update --migrate`)); console.log(""); console.log( chalk.gray( @@ -2448,7 +2450,7 @@ export async function update(options: UpdateOptions): Promise { prdContent += `**From Version**: ${projectVersion}\n`; prdContent += `**To Version**: ${cliVersion}\n`; prdContent += `**Assignee**: ${currentDeveloper}\n\n`; - prdContent += `## Status\n\n- [ ] Review migration guide\n- [ ] Update custom files\n- [ ] Run \`trellis update --migrate\`\n- [ ] Test workflows\n\n`; + prdContent += `## Status\n\n- [ ] Review migration guide\n- [ ] Update custom files\n- [ ] Run \`research-trellis update --migrate\`\n- [ ] Test workflows\n\n`; for (const { version, diff --git a/packages/cli/src/commands/upgrade.ts b/packages/cli/src/commands/upgrade.ts index e26bbd1..8806714 100644 --- a/packages/cli/src/commands/upgrade.ts +++ b/packages/cli/src/commands/upgrade.ts @@ -55,7 +55,9 @@ export function resolveUpgradeTag( function binaryCheckCommand( platform: NodeJS.Platform = process.platform, ): string { - return platform === "win32" ? "where trellis" : "which trellis"; + return platform === "win32" + ? "where research-trellis" + : "which research-trellis"; } export function buildUpgradeCommand( @@ -98,7 +100,7 @@ function troubleshooting(plan: UpgradeCommandPlan): string { "Troubleshooting:", `- Manual command: ${plan.displayCommand}`, "- Check npm global prefix and PATH: npm config get prefix", - `- Check which Trellis binary your shell resolves: ${plan.binaryCheckCommand}`, + `- Check which Research Trellis binary your shell resolves: ${plan.binaryCheckCommand}`, "- If this is a permissions error, fix your Node/npm install or npm prefix; Trellis does not run sudo.", "- If npm reports an existing binary or locked file, resolve that npm error manually; Trellis does not run --force.", ].join("\n"); @@ -110,7 +112,7 @@ export async function upgrade( ): Promise { const plan = buildUpgradeCommand(options); - console.log(chalk.cyan(`Upgrading Trellis CLI to ${plan.target}`)); + console.log(chalk.cyan(`Upgrading Research Trellis CLI to ${plan.target}`)); console.log(chalk.gray(`Run: ${plan.displayCommand}`)); if (options.dryRun) { @@ -140,7 +142,7 @@ export async function upgrade( ); } - console.log(chalk.green("\n✓ Trellis CLI upgrade completed")); - console.log(chalk.gray("Run: trellis --version")); + console.log(chalk.green("\n✓ Research Trellis CLI upgrade completed")); + console.log(chalk.gray("Run: research-trellis --version")); console.log(chalk.gray(`Run: ${plan.binaryCheckCommand}`)); } diff --git a/packages/cli/src/commands/workflow.ts b/packages/cli/src/commands/workflow.ts index 331fd22..582a6e7 100644 --- a/packages/cli/src/commands/workflow.ts +++ b/packages/cli/src/commands/workflow.ts @@ -1,11 +1,11 @@ /** - * `trellis workflow` command — list and switch the active `.trellis/workflow.md`. + * `research-trellis workflow` command — list and switch the active `.trellis/workflow.md`. * * Behavior contracts: * * - Hash boundary: after writing native content, refresh the * `.trellis/workflow.md` entry in `.template-hashes.json`. After writing - * any non-native content, remove that entry. This prevents `trellis update` + * any non-native content, remove that entry. This prevents `research-trellis update` * from silently restoring native bytes over a user-selected variant * (see design.md "Durable-state contract"). * @@ -150,7 +150,7 @@ function applyHashContract(cwd: string, templateId: string): void { updateHashes(cwd, files); } else { // Non-native workflow is user-managed local content. Drop the hash entry - // so `trellis update` treats it as modified and does not silently restore + // so `research-trellis update` treats it as modified and does not silently restore // native bytes. removeHash(cwd, relPath); } @@ -243,7 +243,7 @@ export async function runWorkflowCommand( const cwd = process.cwd(); if (!fs.existsSync(path.join(cwd, DIR_NAMES.WORKFLOW))) { throw new WorkflowCommandError( - "No .trellis/ directory found. Run `trellis init` first.", + "No .trellis/ directory found. Run `research-trellis init` first.", ); } diff --git a/packages/cli/src/configurators/index.ts b/packages/cli/src/configurators/index.ts index f9f94c5..b1d400a 100644 --- a/packages/cli/src/configurators/index.ts +++ b/packages/cli/src/configurators/index.ts @@ -222,7 +222,7 @@ const PLATFORM_FUNCTIONS: Record = { )) { files.set(filePath, content); } - // Mirror configureCodex's extra trellis-start write so `trellis update` + // Mirror configureCodex's extra trellis-start write so `research-trellis update` // picks up the file (was missing pre-0.5.7 — upgrade path silently // dropped the skill). const trellisStart = resolveCodexTrellisStartSkill(ctx); diff --git a/packages/cli/src/configurators/opencode.ts b/packages/cli/src/configurators/opencode.ts index ea96955..4460e0a 100644 --- a/packages/cli/src/configurators/opencode.ts +++ b/packages/cli/src/configurators/opencode.ts @@ -77,7 +77,7 @@ function walkOpenCodeTemplateDir(): Map { } /** - * Collect all opencode template files that `trellis update` should track. + * Collect all opencode template files that `research-trellis update` should track. * * Must stay in sync with `configureOpenCode`: both paths produce the same * `Map`. If they drift, update will spuriously flag newly diff --git a/packages/cli/src/migrations/manifests/0.6.0-beta.31.json b/packages/cli/src/migrations/manifests/0.6.0-beta.31.json new file mode 100644 index 0000000..3a18eb0 --- /dev/null +++ b/packages/cli/src/migrations/manifests/0.6.0-beta.31.json @@ -0,0 +1,9 @@ +{ + "version": "0.6.0-beta.31", + "description": "项目更名为 Research Trellis,并启用新的 npm 包名与兼容命令。", + "breaking": true, + "recommendMigrate": false, + "changelog": "**项目更名:**\n- feat(brand): 项目、GitHub 仓库和在线手册统一更名为 Research Trellis。\n- feat(release): CLI 包改为 `research-trellis`,核心包改为 `research-trellis-core`。\n- feat(cli): 新增 `research-trellis` 主命令,并继续保留 `trellis` 与 `tl` 兼容命令。\n\n**迁移说明:**\n- 已安装旧包的用户需要卸载 `trellis-hermes`,再安装 `research-trellis`。\n- 项目内 `.trellis/` 数据格式和已有任务记录不需要迁移。", + "migrations": [], + "notes": "包名变更属于安装和导入层面的破坏性变化;项目内数据格式不变,不需要运行文件迁移。" +} diff --git a/packages/cli/src/templates/codex/skills/start/SKILL.md b/packages/cli/src/templates/codex/skills/start/SKILL.md index 4114bec..c256e9c 100644 --- a/packages/cli/src/templates/codex/skills/start/SKILL.md +++ b/packages/cli/src/templates/codex/skills/start/SKILL.md @@ -16,7 +16,7 @@ Identity, git status, current task, active tasks, journal location. {{PYTHON_CMD}} ./.trellis/scripts/get_context.py ``` -If this output includes a line beginning `Trellis update available:`, copy the full line verbatim when summarizing session context. Do not shorten operational command hints. +If this output includes a line beginning `Research Trellis update available:`, copy the full line verbatim when summarizing session context. Do not shorten operational command hints. ## Step 2: Workflow overview Compact Phase Index, request triage rules, planning artifact contract, and the step-detail command. diff --git a/packages/cli/src/templates/common/bundled-skills/trellis-meta/SKILL.md b/packages/cli/src/templates/common/bundled-skills/trellis-meta/SKILL.md index 9cffdf2..2d295eb 100644 --- a/packages/cli/src/templates/common/bundled-skills/trellis-meta/SKILL.md +++ b/packages/cli/src/templates/common/bundled-skills/trellis-meta/SKILL.md @@ -1,11 +1,11 @@ --- name: trellis-meta -description: "Understand and customize the local Trellis architecture inside a user project. Use when modifying .trellis plus platform hooks, settings, agents, skills, commands, prompts, or workflows generated by trellis init." +description: "Understand and customize the local Trellis architecture inside a user project. Use when modifying .trellis plus platform hooks, settings, agents, skills, commands, prompts, or workflows generated by research-trellis init." --- # Trellis Meta -This skill is for local Trellis users who have already run `trellis init` in a project. After reading it, an AI should understand the Trellis architecture, operating model, and customization entry points inside that user project, then modify the generated `.trellis/` and platform directory files according to the user's request. +This skill is for local Trellis users who have already run `research-trellis init` in a project. After reading it, an AI should understand the Trellis architecture, operating model, and customization entry points inside that user project, then modify the generated `.trellis/` and platform directory files according to the user's request. The default operating scope is local files in the user project: @@ -27,7 +27,7 @@ Do not assume the user has the Trellis source repository. Do not default to modi ### Local Architecture - `references/local-architecture/overview.md`: The three-layer local Trellis architecture and customization principles. -- `references/local-architecture/generated-files.md`: Files generated by `trellis init` and their customization boundaries. +- `references/local-architecture/generated-files.md`: Files generated by `research-trellis init` and their customization boundaries. - `references/local-architecture/workflow.md`: Phases, routing, and workflow-state blocks in `.trellis/workflow.md`. - `references/local-architecture/task-system.md`: Task directories, active tasks, JSONL context, and task runtime. - `references/local-architecture/spec-system.md`: How `.trellis/spec/` is organized and injected. @@ -67,7 +67,7 @@ Do not assume the user has the Trellis source repository. Do not default to modi ## Do Not - Do not treat Trellis upstream source code as the default target for local customization. -- Do not modify the global npm install directory or `node_modules/trellis-hermes` to implement project needs. +- Do not modify the global npm install directory or `node_modules/research-trellis` to implement project needs. - Do not overwrite user-modified local files with default templates. - Do not put team-private project rules into the public `trellis-meta`; put project rules in `.trellis/spec/` or a project-local skill. - Do not describe removed historical mechanisms as current Trellis behavior. diff --git a/packages/cli/src/templates/common/bundled-skills/trellis-meta/references/customize-local/overview.md b/packages/cli/src/templates/common/bundled-skills/trellis-meta/references/customize-local/overview.md index 9c8f5ac..1023aa1 100644 --- a/packages/cli/src/templates/common/bundled-skills/trellis-meta/references/customize-local/overview.md +++ b/packages/cli/src/templates/common/bundled-skills/trellis-meta/references/customize-local/overview.md @@ -1,6 +1,6 @@ # Local Customization Overview -This directory is for local AI working in a user project where Trellis was installed through npm and `trellis init` has already been run. The AI should modify generated `.trellis/` and platform directories inside the project, not Trellis CLI upstream source code. +This directory is for local AI working in a user project where Trellis was installed through npm and `research-trellis init` has already been run. The AI should modify generated `.trellis/` and platform directories inside the project, not Trellis CLI upstream source code. ## First Determine What The User Actually Wants To Change @@ -38,7 +38,7 @@ This directory is for local AI working in a user project where Trellis was insta ## Things Not To Do By Default - Do not edit the global npm install directory. -- Do not edit `node_modules/trellis-hermes`. +- Do not edit `node_modules/research-trellis`. - Do not assume the user has the Trellis GitHub repository. - Do not overwrite local files already modified by the user with default templates. - Do not put team project rules into public `trellis-meta`; project rules belong in `.trellis/spec/` or a local skill. @@ -50,6 +50,6 @@ Switch to an upstream source-code perspective only when the user explicitly expr - "I want to open a PR to Trellis" - "I want to change npm package publish contents" - "I want to fork Trellis" -- "I want to modify the generation logic for `trellis init/update`" +- "I want to modify the generation logic for `research-trellis init/update`" Otherwise, default to modifying local Trellis files inside the user project. diff --git a/packages/cli/src/templates/common/bundled-skills/trellis-meta/references/local-architecture/generated-files.md b/packages/cli/src/templates/common/bundled-skills/trellis-meta/references/local-architecture/generated-files.md index ac50669..8119170 100644 --- a/packages/cli/src/templates/common/bundled-skills/trellis-meta/references/local-architecture/generated-files.md +++ b/packages/cli/src/templates/common/bundled-skills/trellis-meta/references/local-architecture/generated-files.md @@ -1,6 +1,6 @@ # Local Files Generated After Init -`trellis init` writes the Trellis runtime into the user project. Later, `trellis update` tries to update Trellis-managed template files, but it uses `.trellis/.template-hashes.json` to determine which files have already been modified by the user. +`research-trellis init` writes the Trellis runtime into the user project. Later, `research-trellis update` tries to update Trellis-managed template files, but it uses `.trellis/.template-hashes.json` to determine which files have already been modified by the user. This page only describes files that are visible and editable inside the user project. @@ -49,7 +49,7 @@ When modifying a platform directory, also confirm whether `.trellis/workflow.md` ## Meaning Of Template Hashes -`.trellis/.template-hashes.json` records the content hash from the last time Trellis wrote a template file. `trellis update` uses it to distinguish three cases: +`.trellis/.template-hashes.json` records the content hash from the last time Trellis wrote a template file. `research-trellis update` uses it to distinguish three cases: | Case | Update behavior | | --- | --- | @@ -72,7 +72,7 @@ Editable by default: Do not edit by default: - Global npm install directory -- `node_modules/trellis-hermes` +- `node_modules/research-trellis` - Trellis GitHub repository source code - Concrete state files under `.trellis/.runtime/**` - Hash contents inside `.trellis/.template-hashes.json` diff --git a/packages/cli/src/templates/common/bundled-skills/trellis-meta/references/local-architecture/overview.md b/packages/cli/src/templates/common/bundled-skills/trellis-meta/references/local-architecture/overview.md index 99c7f73..241b6c9 100644 --- a/packages/cli/src/templates/common/bundled-skills/trellis-meta/references/local-architecture/overview.md +++ b/packages/cli/src/templates/common/bundled-skills/trellis-meta/references/local-architecture/overview.md @@ -1,6 +1,6 @@ # Local Trellis Architecture Overview -`trellis-meta` is for user projects that have already run `trellis init`. The user's machine usually has only the npm-installed `trellis` command plus the Trellis files generated inside the project; it may not have the Trellis CLI source code. +`trellis-meta` is for user projects that have already run `research-trellis init`. The user's machine usually has only the npm-installed `trellis` command plus the Trellis files generated inside the project; it may not have the Trellis CLI source code. Therefore, when an AI uses this skill, the default customization target is local files inside the user project: diff --git a/packages/cli/src/templates/common/bundled-skills/trellis-meta/references/platform-files/hooks-and-settings.md b/packages/cli/src/templates/common/bundled-skills/trellis-meta/references/platform-files/hooks-and-settings.md index 94156a8..f9faef1 100644 --- a/packages/cli/src/templates/common/bundled-skills/trellis-meta/references/platform-files/hooks-and-settings.md +++ b/packages/cli/src/templates/common/bundled-skills/trellis-meta/references/platform-files/hooks-and-settings.md @@ -28,7 +28,7 @@ Common files: | Factory Droid | `.factory/settings.json` | | Pi Agent | `.pi/settings.json`, `.pi/extensions/trellis/` | -Whether these files exist in a project depends on which `trellis init --` flags the user ran. +Whether these files exist in a project depends on which `research-trellis init --` flags the user ran. ## Hook Script Types diff --git a/packages/cli/src/templates/common/bundled-skills/trellis-meta/references/platform-files/platform-map.md b/packages/cli/src/templates/common/bundled-skills/trellis-meta/references/platform-files/platform-map.md index b5576f4..51830da 100644 --- a/packages/cli/src/templates/common/bundled-skills/trellis-meta/references/platform-files/platform-map.md +++ b/packages/cli/src/templates/common/bundled-skills/trellis-meta/references/platform-files/platform-map.md @@ -1,6 +1,6 @@ # Platform File Map -This page lists common Trellis file locations in a user project by platform. Whether a platform directory exists in an actual project depends on which `trellis init --` commands the user ran. +This page lists common Trellis file locations in a user project by platform. Whether a platform directory exists in an actual project depends on which `research-trellis init --` commands the user ran. ## Matrix diff --git a/packages/cli/src/templates/common/commands/start.md b/packages/cli/src/templates/common/commands/start.md index a74b87e..15c4c74 100644 --- a/packages/cli/src/templates/common/commands/start.md +++ b/packages/cli/src/templates/common/commands/start.md @@ -11,7 +11,7 @@ Identity, git status, current task, active tasks, journal location. {{PYTHON_CMD}} ./.trellis/scripts/get_context.py ``` -If this output includes a line beginning `Trellis update available:`, copy the full line verbatim when summarizing session context. Do not shorten operational command hints. +If this output includes a line beginning `Research Trellis update available:`, copy the full line verbatim when summarizing session context. Do not shorten operational command hints. ## Step 2: Workflow overview Compact Phase Index, request triage rules, planning artifact contract, and the step-detail command. diff --git a/packages/cli/src/templates/copilot/prompts/start.prompt.md b/packages/cli/src/templates/copilot/prompts/start.prompt.md index 1b16aa6..28f38ad 100644 --- a/packages/cli/src/templates/copilot/prompts/start.prompt.md +++ b/packages/cli/src/templates/copilot/prompts/start.prompt.md @@ -15,7 +15,7 @@ Identity, git status, current task, active tasks, journal location. {{PYTHON_CMD}} ./.trellis/scripts/get_context.py ``` -If this output includes a line beginning `Trellis update available:`, copy the full line verbatim when summarizing session context. Do not shorten operational command hints. +If this output includes a line beginning `Research Trellis update available:`, copy the full line verbatim when summarizing session context. Do not shorten operational command hints. ## Step 2: Workflow overview Phase Index + skill routing table + DO-NOT-skip rules. diff --git a/packages/cli/src/templates/markdown/agents.md b/packages/cli/src/templates/markdown/agents.md index c9c4c66..3c9cc1f 100644 --- a/packages/cli/src/templates/markdown/agents.md +++ b/packages/cli/src/templates/markdown/agents.md @@ -16,6 +16,6 @@ If you're using Codex or another agent-capable tool, additional project-scoped h - `.agents/skills/` — reusable Trellis skills - `.codex/agents/` — optional custom subagents -Managed by Trellis. Edits outside this block are preserved; edits inside may be overwritten by a future `trellis update`. +Managed by Trellis. Edits outside this block are preserved; edits inside may be overwritten by a future `research-trellis update`. diff --git a/packages/cli/src/templates/markdown/spec/guides/code-reuse-thinking-guide.md.txt b/packages/cli/src/templates/markdown/spec/guides/code-reuse-thinking-guide.md.txt index bb789e9..1793d16 100644 --- a/packages/cli/src/templates/markdown/spec/guides/code-reuse-thinking-guide.md.txt +++ b/packages/cli/src/templates/markdown/spec/guides/code-reuse-thinking-guide.md.txt @@ -186,7 +186,7 @@ def cli_name(self) -> str: - **If asymmetry is unavoidable**: Add a regression test that compares outputs from both mechanisms - When migrating directory structures, search for ALL code paths that reference the old structure -**Real example**: `trellis update` had a manual `files.set()` list for 11 scripts that `getAllScripts()` already tracked. Fix: replaced the manual list with a `for..of getAllScripts()` loop. See `update.ts` refactor in v0.4.0-beta.3. +**Real example**: `research-trellis update` had a manual `files.set()` list for 11 scripts that `getAllScripts()` already tracked. Fix: replaced the manual list with a `for..of getAllScripts()` loop. See `update.ts` refactor in v0.4.0-beta.3. --- @@ -201,9 +201,9 @@ When adding new files to `src/templates/trellis/scripts/`: That's it. `commands/update.ts` uses `getAllScripts()` directly — no manual sync needed. -**Why this matters**: Without registration in `getAllScripts()`, `trellis update` won't sync the file to user projects. Bug fixes and features won't propagate. +**Why this matters**: Without registration in `getAllScripts()`, `research-trellis update` won't sync the file to user projects. Bug fixes and features won't propagate. -**History**: Before v0.4.0-beta.3, `update.ts` had its own hand-maintained file list that frequently fell out of sync with `getAllScripts()`. This caused 11 Python files to be silently skipped during `trellis update`. The fix was to eliminate the duplicate list and use `getAllScripts()` as the single source of truth. +**History**: Before v0.4.0-beta.3, `update.ts` had its own hand-maintained file list that frequently fell out of sync with `getAllScripts()`. This caused 11 Python files to be silently skipped during `research-trellis update`. The fix was to eliminate the duplicate list and use `getAllScripts()` as the single source of truth. ### Quick Checklist for New Scripts diff --git a/packages/cli/src/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt b/packages/cli/src/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt index 1508c37..bb150cf 100644 --- a/packages/cli/src/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt +++ b/packages/cli/src/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt @@ -187,7 +187,7 @@ audit for beta markers against the root release tree. **Real-world example**: Codex inline mode changed workflow platform markers from `[Codex]` / `[Kilo, Antigravity, Windsurf]` to `[codex-sub-agent]` / `[codex-inline, Kilo, Antigravity, Windsurf]`. Fresh init was correct, but -`trellis update` only merged `[workflow-state:*]` blocks and preserved stale +`research-trellis update` only merged `[workflow-state:*]` blocks and preserved stale markers outside those blocks. Result: upgraded projects got new hook scripts but old workflow routing, so `get_context.py --mode phase --platform codex` could return empty Phase 2.1 detail. diff --git a/packages/cli/src/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt b/packages/cli/src/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt index 32339c8..9597e22 100644 --- a/packages/cli/src/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +++ b/packages/cli/src/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt @@ -279,7 +279,7 @@ make the intended decision. Otherwise a transient sandbox/network failure hides the hint for the rest of the session. **Rule 2**: If a local command can provide the needed value, try it with a short -timeout and captured output. For example, `trellis --version` already runs the +timeout and captured output. For example, `research-trellis --version` already runs the CLI's version comparison logic and can support an actionable update prompt without duplicating npm registry parsing. diff --git a/packages/cli/src/templates/shared-hooks/index.ts b/packages/cli/src/templates/shared-hooks/index.ts index bea1f18..2836152 100644 --- a/packages/cli/src/templates/shared-hooks/index.ts +++ b/packages/cli/src/templates/shared-hooks/index.ts @@ -45,7 +45,7 @@ export type SharedHookPlatform = /** * Which shared hooks each platform actually invokes. Single source of truth * for shared-hook distribution — both `writeSharedHooks` (runtime install) - * and `collectSharedHooks` (`trellis update` diff) read from this table. + * and `collectSharedHooks` (`research-trellis update` diff) read from this table. * * Routing rules encoded here: * - `session-start.py` — shipped by every platform with a SessionStart diff --git a/packages/cli/src/templates/trellis/config.yaml b/packages/cli/src/templates/trellis/config.yaml index f5e1733..220ed96 100644 --- a/packages/cli/src/templates/trellis/config.yaml +++ b/packages/cli/src/templates/trellis/config.yaml @@ -55,7 +55,7 @@ max_journal_lines: 2000 #------------------------------------------------------------------------------- # Declare packages for monorepo projects. -# Trellis auto-detects workspaces during `trellis init`, but you can also +# Trellis auto-detects workspaces during `research-trellis init`, but you can also # configure them manually here. # # packages: diff --git a/packages/cli/src/templates/trellis/scripts/common/session_context.py b/packages/cli/src/templates/trellis/scripts/common/session_context.py index ba07c06..344ff70 100644 --- a/packages/cli/src/templates/trellis/scripts/common/session_context.py +++ b/packages/cli/src/templates/trellis/scripts/common/session_context.py @@ -44,7 +44,7 @@ # Helpers # ============================================================================= -_PACKAGE_NAME = "trellis-hermes" +_PACKAGE_NAME = "research-trellis" _UPDATE_CHECK_TIMEOUT_SECONDS = 1.0 _VERSION_RE = re.compile( r"^\s*(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:-([0-9A-Za-z.-]+))?\s*$" @@ -277,7 +277,7 @@ def _read_project_version(repo_root: Path) -> str | None: def _fetch_trellis_version_output() -> str | None: try: result = subprocess.run( - ["trellis", "--version"], + ["research-trellis", "--version"], capture_output=True, text=True, encoding="utf-8", @@ -295,7 +295,7 @@ def _fetch_trellis_version_output() -> str | None: def _extract_available_update_version(output: str) -> str | None: update_match = re.search( - r"Trellis update available:\s*" + r"(?:Research )?Trellis update available:\s*" r"(?P\S+)\s*(?:→|->)\s*(?P\S+)", output, ) @@ -411,8 +411,8 @@ def _get_update_hint(repo_root: Path) -> str | None: return None return ( - f"Trellis update available: {current_version} -> {latest_version}, " - "run trellis upgrade" + f"Research Trellis update available: {current_version} -> {latest_version}, " + "run research-trellis upgrade" ) diff --git a/packages/cli/src/templates/trellis/workflow.md b/packages/cli/src/templates/trellis/workflow.md index 7e3dfeb..7ce7c0a 100644 --- a/packages/cli/src/templates/trellis/workflow.md +++ b/packages/cli/src/templates/trellis/workflow.md @@ -124,7 +124,7 @@ python3 ./.trellis/scripts/get_context.py --mode phase --step # 读取某 编辑检查清单: - 你修改某个 [workflow-state:STATUS] 块时,也要同步检查该 phase 下所有 `[required · once]` 步骤是否一致 - - 修改后运行 `trellis update`,把新的 block 内容推送到下游用户项目(按块托管替换) + - 修改后运行 `research-trellis update`,把新的 block 内容推送到下游用户项目(按块托管替换) - 完整运行时约定见: .trellis/spec/cli/backend/workflow-state-contract.md --> @@ -733,7 +733,7 @@ AI 会驱动一次按批次组织的提交,让 `/finish-work` 后续能在干 ### Changing the per-turn prompt text -直接编辑对应 `[workflow-state:STATUS]` block 的内容即可。编辑后,若你是模板维护者,运行 `trellis update`;若你是在定制自己的项目,重启 AI 会话即可 —— 无需改脚本。 +直接编辑对应 `[workflow-state:STATUS]` block 的内容即可。编辑后,若你是模板维护者,运行 `research-trellis update`;若你是在定制自己的项目,重启 AI 会话即可 —— 无需改脚本。 ### Adding a custom status diff --git a/packages/cli/src/types/migration.ts b/packages/cli/src/types/migration.ts index 7938a71..fb48a9d 100644 --- a/packages/cli/src/types/migration.ts +++ b/packages/cli/src/types/migration.ts @@ -31,7 +31,7 @@ export interface MigrationItem { /** * A new top-level config.yaml section introduced by this release. * - * Used by `trellis update` to append the section to existing user config files + * Used by `research-trellis update` to append the section to existing user config files * that pre-date the release, without overwriting their other customizations. * Append is gated on `sentinel`: if the user file already contains the sentinel * substring (live or commented), the section is treated as already present. diff --git a/packages/cli/src/utils/cwd-guard.ts b/packages/cli/src/utils/cwd-guard.ts index 8173815..5f81084 100644 --- a/packages/cli/src/utils/cwd-guard.ts +++ b/packages/cli/src/utils/cwd-guard.ts @@ -1,7 +1,7 @@ /** * Homedir guard for destructive commands (init, uninstall). * - * Running `trellis init` / `trellis uninstall` in `$HOME` is catastrophic: + * Running `research-trellis init` / `research-trellis uninstall` in `$HOME` is catastrophic: * platforms like Claude Code, Codex, OpenCode all store global runtime data * (`.claude/projects//*.jsonl` chat history, `.codex/sessions/`, * `.opencode/` caches, etc.) directly in the user's home directory. If @@ -44,7 +44,7 @@ export function isCwdHomedir(): boolean { } /** - * Error message printed by both `trellis init` and `trellis uninstall` when + * Error message printed by both `research-trellis init` and `research-trellis uninstall` when * the homedir guard trips. */ export function homedirGuardMessage(commandName: "init" | "uninstall"): string { diff --git a/packages/cli/src/utils/file-writer.ts b/packages/cli/src/utils/file-writer.ts index eba4243..8f80e93 100644 --- a/packages/cli/src/utils/file-writer.ts +++ b/packages/cli/src/utils/file-writer.ts @@ -29,7 +29,7 @@ export function getWriteMode(): WriteMode { // --------------------------------------------------------------------------- // Write recording // -// `trellis init` uses recording to capture exactly which files were actually +// `research-trellis init` uses recording to capture exactly which files were actually // written this run (vs skipped because they already existed). The captured // set is what `.template-hashes.json` should contain — NOT a blind directory // walk of `.codex/` / `.claude/` / etc, which would include user-owned files diff --git a/packages/cli/src/utils/manifest-prune.ts b/packages/cli/src/utils/manifest-prune.ts index e79ed12..a6863fe 100644 --- a/packages/cli/src/utils/manifest-prune.ts +++ b/packages/cli/src/utils/manifest-prune.ts @@ -9,12 +9,12 @@ * * `pruneOrphanManifestKeys` removes any manifest entry that no current * platform configurator owns. The two entry points that consume it are - * `trellis update` (before migration classification) and `trellis uninstall` + * `research-trellis update` (before migration classification) and `research-trellis uninstall` * (before plan building). Together they ensure existing poisoned manifests * self-correct on the next routine command. * * Rules: - * - `.trellis/*` entries are ALWAYS kept. `trellis uninstall` removes + * - `.trellis/*` entries are ALWAYS kept. `research-trellis uninstall` removes * `.trellis/` wholesale via `fs.rmSync(..., { recursive: true })`, so * manifest accuracy there doesn't affect uninstall data-loss. `update` * also relies on these entries to detect user-modified workflow files. diff --git a/packages/cli/src/utils/task-json.ts b/packages/cli/src/utils/task-json.ts index d89a848..e98f28f 100644 --- a/packages/cli/src/utils/task-json.ts +++ b/packages/cli/src/utils/task-json.ts @@ -1,17 +1,17 @@ /** * Canonical task.json shape — single source of truth shared by all TS * writers. The canonical types and factory now live in the - * `trellis-hermes-core` task API; this module re-exports them under + * `research-trellis-core` task API; this module re-exports them under * the legacy `TaskJson` / `emptyTaskJson` names for CLI call sites. * * New code should prefer `TrellisTaskRecord` / `emptyTaskRecord` from - * `trellis-hermes-core/task` directly. + * `research-trellis-core/task` directly. */ import { emptyTaskRecord, type TrellisTaskRecord, -} from "trellis-hermes-core/task"; +} from "research-trellis-core/task"; export type TaskJson = TrellisTaskRecord; diff --git a/packages/cli/src/utils/template-hash.ts b/packages/cli/src/utils/template-hash.ts index 9e15316..4e4b6e3 100644 --- a/packages/cli/src/utils/template-hash.ts +++ b/packages/cli/src/utils/template-hash.ts @@ -349,7 +349,7 @@ export interface InitializeHashesOptions { * * `.trellis/` is still walked recursively (with `EXCLUDE_FROM_HASH`) because * uninstall removes `.trellis/` wholesale via `rm -rf` regardless of manifest - * content — accuracy there doesn't affect data-loss, only `trellis update` + * content — accuracy there doesn't affect data-loss, only `research-trellis update` * 3-way-merge fidelity (preserved by the existing walk). * * @returns Number of files hashed in the final manifest. @@ -380,7 +380,7 @@ export function initializeHashes( } // .trellis/ workflow tree: still walked recursively. Accuracy here is for - // `trellis update`'s 3-way merge of workflow.md / config.yaml / scripts; + // `research-trellis update`'s 3-way merge of workflow.md / config.yaml / scripts; // uninstall removes .trellis/ wholesale so it does not matter for the // data-loss bug this contract addresses. const files = collectFiles(cwd, ".trellis"); diff --git a/packages/cli/src/utils/uninstall-scrubbers.ts b/packages/cli/src/utils/uninstall-scrubbers.ts index 4e8bd2f..e654bfe 100644 --- a/packages/cli/src/utils/uninstall-scrubbers.ts +++ b/packages/cli/src/utils/uninstall-scrubbers.ts @@ -1,5 +1,5 @@ /** - * Scrubbers for structured config files during `trellis uninstall`. + * Scrubbers for structured config files during `research-trellis uninstall`. * * Each scrubber takes the file content (and any context it needs) and returns * `{ content, fullyEmpty }`: diff --git a/packages/cli/src/utils/workflow-resolver.ts b/packages/cli/src/utils/workflow-resolver.ts index ea4c0c9..709d6a3 100644 --- a/packages/cli/src/utils/workflow-resolver.ts +++ b/packages/cli/src/utils/workflow-resolver.ts @@ -1,7 +1,7 @@ /** * Workflow template resolver. * - * Centralizes how `trellis init --workflow` and `trellis workflow` discover and + * Centralizes how `research-trellis init --workflow` and `research-trellis workflow` discover and * fetch workflow.md content. Reuses `template-fetcher` helpers for registry * parsing, index probing, and git/http transport. The `native` workflow is a * virtual entry resolved directly from the bundled `workflowMdTemplate` to @@ -32,7 +32,7 @@ import { * The id used to refer to the bundled native workflow. * * Treated as Trellis-managed for hash-tracking: when this id is selected by - * `init --workflow` or `trellis workflow`, `.trellis/workflow.md` stays in + * `init --workflow` or `research-trellis workflow`, `.trellis/workflow.md` stays in * `.template-hashes.json`. Any other id is user-managed local workflow and * must be removed from the hash file (the durable-state contract in * design.md "Durable-state contract"). diff --git a/packages/cli/test/commands/init-uninstall-overdelete.integration.test.ts b/packages/cli/test/commands/init-uninstall-overdelete.integration.test.ts index a1c8a16..3aa385b 100644 --- a/packages/cli/test/commands/init-uninstall-overdelete.integration.test.ts +++ b/packages/cli/test/commands/init-uninstall-overdelete.integration.test.ts @@ -193,7 +193,7 @@ describe("init + uninstall: manifest accuracy + homedir guard", () => { it("#R3.2 uninstall self-heals + preserves user file even without prior update", async () => { // Most catastrophic path: user has poisoned manifest from old install - // and runs `trellis uninstall` directly. Prune must fire before plan + // and runs `research-trellis uninstall` directly. Prune must fire before plan // build, otherwise the user file gets unlinked. await init({ yes: true, claude: true, force: true }); diff --git a/packages/cli/test/commands/mem-helpers.test.ts b/packages/cli/test/commands/mem-helpers.test.ts index 39a3509..8189739 100644 --- a/packages/cli/test/commands/mem-helpers.test.ts +++ b/packages/cli/test/commands/mem-helpers.test.ts @@ -1,8 +1,8 @@ /** - * Tier-1 unit tests for the `trellis mem` CLI-layer helpers. + * Tier-1 unit tests for the `research-trellis mem` CLI-layer helpers. * * The reusable retrieval / search / cleaning primitives moved to - * `trellis-hermes-core/mem` and are covered by `packages/core/test/mem/*`. + * `research-trellis-core/mem` and are covered by `packages/core/test/mem/*`. * What remains here is CLI-only: argv parsing, flag → core-filter translation, * and terminal formatting. */ diff --git a/packages/cli/test/commands/mem-integration.test.ts b/packages/cli/test/commands/mem-integration.test.ts index 88fdd22..320bca9 100644 --- a/packages/cli/test/commands/mem-integration.test.ts +++ b/packages/cli/test/commands/mem-integration.test.ts @@ -22,7 +22,7 @@ import { } from "vitest"; import * as nodeFs from "node:fs"; import * as nodePath from "node:path"; -import { listMemProjects } from "trellis-hermes-core/mem"; +import { listMemProjects } from "research-trellis-core/mem"; const { fakeHome } = vi.hoisted(() => { // eslint-disable-next-line @typescript-eslint/no-require-imports @@ -539,7 +539,7 @@ describe("runMem subcommand integration", () => { it("help command prints usage", () => { runMem(["help"]); - expect(logs.join("\n")).toContain("trellis mem"); + expect(logs.join("\n")).toContain("research-trellis mem"); }); it("unknown command exits non-zero with 'unknown command' error", () => { diff --git a/packages/cli/test/commands/release-preflight.test.ts b/packages/cli/test/commands/release-preflight.test.ts index d0ce65d..4f493bb 100644 --- a/packages/cli/test/commands/release-preflight.test.ts +++ b/packages/cli/test/commands/release-preflight.test.ts @@ -365,7 +365,7 @@ describe("release-preflight check-versions", () => { expect(out).toContain("Hermes Python templates compile"); const pycachePrefix = fs.readFileSync(pycachePrefixPath, "utf-8"); - expect(pycachePrefix).toContain("trellis-hermes-pycompile-"); + expect(pycachePrefix).toContain("research-trellis-pycompile-"); expect(pycachePrefix).not.toContain("packages/cli/src/templates"); } finally { fs.rmSync(pycachePrefixPath, { force: true }); diff --git a/packages/cli/test/commands/update-internals.test.ts b/packages/cli/test/commands/update-internals.test.ts index 6c588de..b161abe 100644 --- a/packages/cli/test/commands/update-internals.test.ts +++ b/packages/cli/test/commands/update-internals.test.ts @@ -271,7 +271,7 @@ describe("shouldExcludeFromBackup", () => { // after normalization, otherwise Trellis's native worktree protection // silently fails on Windows and `collectAllFiles` descends into nested // full project copies (observed in the field: stack-overflow crash on - // `trellis update --migrate`, late April 2026). + // `research-trellis update --migrate`, late April 2026). it.each([ ".trellis\\trellis-worktrees\\feat-x\\src\\main.ts", ".claude\\worktrees\\feat-x\\src\\main.ts", diff --git a/packages/cli/test/commands/upgrade.test.ts b/packages/cli/test/commands/upgrade.test.ts index c58df9b..e40001e 100644 --- a/packages/cli/test/commands/upgrade.test.ts +++ b/packages/cli/test/commands/upgrade.test.ts @@ -36,12 +36,12 @@ describe("upgrade command", () => { buildUpgradeCommand({ tag: "beta" }, "0.5.12", "darwin"), ).toMatchObject({ command: "npm", - args: ["install", "-g", "trellis-hermes@beta"], + args: ["install", "-g", "research-trellis@beta"], spawnOptions: { stdio: "inherit", shell: false }, - displayCommand: "npm install -g trellis-hermes@beta", - target: "trellis-hermes@beta", + displayCommand: "npm install -g research-trellis@beta", + target: "research-trellis@beta", tag: "beta", - binaryCheckCommand: "which trellis", + binaryCheckCommand: "which research-trellis", }); }); @@ -50,12 +50,12 @@ describe("upgrade command", () => { buildUpgradeCommand({ tag: "beta" }, "0.5.12", "win32"), ).toMatchObject({ command: "cmd.exe", - args: ["/d", "/s", "/c", "npm install -g trellis-hermes@beta"], + args: ["/d", "/s", "/c", "npm install -g research-trellis@beta"], spawnOptions: { stdio: "inherit", shell: false }, - displayCommand: "npm install -g trellis-hermes@beta", - target: "trellis-hermes@beta", + displayCommand: "npm install -g research-trellis@beta", + target: "research-trellis@beta", tag: "beta", - binaryCheckCommand: "where trellis", + binaryCheckCommand: "where research-trellis", }); }); @@ -67,7 +67,7 @@ describe("upgrade command", () => { expect(runner).not.toHaveBeenCalled(); expect(log).toHaveBeenCalledWith( - expect.stringContaining("Run: npm install -g trellis-hermes@latest"), + expect.stringContaining("Run: npm install -g research-trellis@latest"), ); log.mockRestore(); @@ -86,7 +86,7 @@ describe("upgrade command", () => { plan.spawnOptions, ); expect(log).toHaveBeenCalledWith( - expect.stringContaining("trellis --version"), + expect.stringContaining("research-trellis --version"), ); expect(log).toHaveBeenCalledWith( expect.stringContaining(plan.binaryCheckCommand), diff --git a/packages/cli/test/commands/workflow.integration.test.ts b/packages/cli/test/commands/workflow.integration.test.ts index 1d98fe0..bc242e1 100644 --- a/packages/cli/test/commands/workflow.integration.test.ts +++ b/packages/cli/test/commands/workflow.integration.test.ts @@ -1,12 +1,12 @@ /** - * Integration tests for `trellis workflow` and the init/update hash boundary + * Integration tests for `research-trellis workflow` and the init/update hash boundary * for non-native workflow selection. * * Coverage: - * - `trellis workflow --template native`: writes bundled content, keeps hash. - * - `trellis workflow --template tdd`: writes marketplace content, removes hash. - * - `trellis init --workflow tdd`: marketplace content is written, hash removed. - * - `trellis update` after switch to tdd does NOT silently restore native. + * - `research-trellis workflow --template native`: writes bundled content, keeps hash. + * - `research-trellis workflow --template tdd`: writes marketplace content, removes hash. + * - `research-trellis init --workflow tdd`: marketplace content is written, hash removed. + * - `research-trellis update` after switch to tdd does NOT silently restore native. * - Non-interactive modified workflow.md fails without --force / --create-new. * - `--create-new` writes `.new` and leaves workflow.md + hash untouched. */ @@ -83,7 +83,7 @@ function stubMarketplaceFetch(): void { ); } -describe("trellis workflow integration", () => { +describe("research-trellis workflow integration", () => { let tmpDir: string; beforeEach(() => { @@ -172,7 +172,7 @@ describe("trellis workflow integration", () => { ).rejects.toThrow(/workflow template/i); }); - it("trellis workflow --template native refreshes hash after switching from tdd", async () => { + it("research-trellis workflow --template native refreshes hash after switching from tdd", async () => { stubMarketplaceFetch(); await init({ yes: true, workflow: "tdd" } as Record); expect( @@ -192,7 +192,7 @@ describe("trellis workflow integration", () => { expect(loadHashes(tmpDir)[PATHS.WORKFLOW_GUIDE_FILE]).toBeTruthy(); }); - it("trellis workflow --template tdd writes marketplace content and removes the hash", async () => { + it("research-trellis workflow --template tdd writes marketplace content and removes the hash", async () => { stubMarketplaceFetch(); await init({ yes: true }); expect(loadHashes(tmpDir)[PATHS.WORKFLOW_GUIDE_FILE]).toBeTruthy(); @@ -281,7 +281,7 @@ describe("trellis workflow integration", () => { expect(loadHashes(tmpDir)[PATHS.WORKFLOW_GUIDE_FILE]).toBe(originalHash); }); - it("trellis update after switching to tdd does not silently restore native workflow", async () => { + it("research-trellis update after switching to tdd does not silently restore native workflow", async () => { stubMarketplaceFetch(); await init({ yes: true }); await runWorkflowCommand({ template: "tdd" }); diff --git a/packages/cli/test/registry-invariants.test.ts b/packages/cli/test/registry-invariants.test.ts index 6f50a8a..3759c2e 100644 --- a/packages/cli/test/registry-invariants.test.ts +++ b/packages/cli/test/registry-invariants.test.ts @@ -104,7 +104,7 @@ describe("release metadata invariants", () => { }; expect(packageJson.repository?.url).toBe( - "git+https://github.com/Explero/Trellis-Hermes.git", + "git+https://github.com/Explero/research-trellis.git", ); } }); @@ -113,7 +113,7 @@ describe("release metadata invariants", () => { const readme = fs.readFileSync(path.join(repoRoot, "README.md"), "utf-8"); expect(readme).not.toContain("Trellis-Herbivore"); - expect(readme).toContain("Trellis-Hermes"); + expect(readme).toContain("Research Trellis"); }); }); diff --git a/packages/cli/test/regression.test.ts b/packages/cli/test/regression.test.ts index f33cba9..0a95676 100644 --- a/packages/cli/test/regression.test.ts +++ b/packages/cli/test/regression.test.ts @@ -96,7 +96,7 @@ describe("regression: workflow archive without commit", () => { }); }); -describe("regression: package rename to trellis-hermes", () => { +describe("regression: package rename to research-trellis", () => { it("[rename] CLI package template metadata is publish-safe for npm bin links", () => { const packageJsonPath = path.resolve( fileURLToPath(new URL("../package.json", import.meta.url)), @@ -105,8 +105,9 @@ describe("regression: package rename to trellis-hermes", () => { fs.readFileSync(packageJsonPath, "utf-8"), ) as { name: string; bin?: Record }; - expect(packageJson.name).toBe("trellis-hermes"); + expect(packageJson.name).toBe("research-trellis"); expect(packageJson.bin).toMatchObject({ + "research-trellis": "bin/trellis.js", trellis: "bin/trellis.js", tl: "bin/trellis.js", }); @@ -966,14 +967,16 @@ describe("regression: agent-session Trellis update hint", () => { return match?.[0] ?? ""; } - it("shows a concise update hint when trellis --version reports a newer version", () => { + it("shows a concise update hint when legacy version output reports a newer version", () => { const output = runContextWithTrellisOutput( "0.5.0", "Trellis update available: 0.5.0 → 0.5.9\nRun: trellis update\n0.5.9", ); - expect(output).toContain("Trellis update available: 0.5.0 -> 0.5.9"); - expect(output).toContain("run trellis upgrade"); + expect(output).toContain( + "Research Trellis update available: 0.5.0 -> 0.5.9", + ); + expect(output).toContain("run research-trellis upgrade"); expect(output).toContain("SESSION CONTEXT"); }); @@ -1010,20 +1013,26 @@ describe("regression: agent-session Trellis update hint", () => { const output = runContextWithTrellisOutput("0.5.0", "0.5.9"); - expect(output).toContain("Trellis update available: 0.5.0 -> 0.5.9"); + expect(output).toContain( + "Research Trellis update available: 0.5.0 -> 0.5.9", + ); }); - it("uses the final trellis --version token when no update line is present", () => { + it("uses the final research-trellis --version token when no update line is present", () => { const output = runContextWithTrellisOutput("0.5.0", "0.5.9"); - expect(output).toContain("Trellis update available: 0.5.0 -> 0.5.9"); + expect(output).toContain( + "Research Trellis update available: 0.5.0 -> 0.5.9", + ); }); it("only attempts the default text update hint once per session", () => { const first = runContextWithTrellisOutput("0.5.0", "0.5.9"); const second = runContextWithTrellisOutput("0.5.0", "0.5.9"); - expect(first).toContain("Trellis update available: 0.5.0 -> 0.5.9"); + expect(first).toContain( + "Research Trellis update available: 0.5.0 -> 0.5.9", + ); expect(second).not.toContain("Trellis update available"); expect( fs.existsSync( diff --git a/packages/cli/test/scripts/hermes-preflight.test.ts b/packages/cli/test/scripts/hermes-preflight.test.ts index 6e43a8b..e0ed553 100644 --- a/packages/cli/test/scripts/hermes-preflight.test.ts +++ b/packages/cli/test/scripts/hermes-preflight.test.ts @@ -18,7 +18,7 @@ const scriptPath = path.join( ); function withTempRoot(run: (root: string) => T): T { - const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "trellis-hermes-preflight-")); + const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "research-trellis-preflight-")); try { return run(tmpDir); } finally { diff --git a/packages/cli/test/templates/hermes-runtime.test.ts b/packages/cli/test/templates/hermes-runtime.test.ts index fe1ecaa..fcb6c99 100644 --- a/packages/cli/test/templates/hermes-runtime.test.ts +++ b/packages/cli/test/templates/hermes-runtime.test.ts @@ -219,7 +219,7 @@ describe("Hermes runtime scripts", () => { } beforeEach(() => { - tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "trellis-hermes-runtime-")); + tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "research-trellis-runtime-")); fs.mkdirSync(path.join(tmpDir, ".trellis", "tasks", "01-test", "hermes"), { recursive: true, }); diff --git a/packages/cli/test/templates/shared-hooks.test.ts b/packages/cli/test/templates/shared-hooks.test.ts index 98b4f72..5ede282 100644 --- a/packages/cli/test/templates/shared-hooks.test.ts +++ b/packages/cli/test/templates/shared-hooks.test.ts @@ -301,7 +301,7 @@ function runHermesRuntimeGuard( throw new Error("hermes-runtime-guard.py template missing"); } const scriptDir = fs.mkdtempSync( - path.join(os.tmpdir(), "trellis-hermes-guard-"), + path.join(os.tmpdir(), "research-trellis-guard-"), ); const scriptPath = path.join(scriptDir, "hermes-runtime-guard.py"); fs.writeFileSync(scriptPath, hook.content); @@ -1128,7 +1128,7 @@ describe.skipIf(!hasPython())("hermes runtime guard hook", () => { const taskName = "06-04-hermes-runtime"; beforeEach(() => { - tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "trellis-hermes-hook-")); + tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "research-trellis-hook-")); repoRoot = path.join(tmpDir, "repo"); setupMainRepo(repoRoot, taskName, "# prd\n"); setSessionActiveTask(repoRoot, taskName); diff --git a/packages/core/package.json b/packages/core/package.json index 241c231..f5cde5d 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,7 +1,7 @@ { - "name": "trellis-hermes-core", - "version": "0.6.0-beta.30", - "description": "Trellis core SDK — channel and task domain primitives consumed by the Trellis CLI and downstream Node services", + "name": "research-trellis-core", + "version": "0.6.0-beta.31", + "description": "Research Trellis core SDK for channels, tasks, memory, and auditable research records", "type": "module", "main": "./dist/index.js", "types": "./dist/index.d.ts", @@ -83,6 +83,6 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/Explero/Trellis-Hermes.git" + "url": "git+https://github.com/Explero/research-trellis.git" } } diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 4850573..db1d0a2 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1,6 +1,6 @@ // Root barrel — re-exports the channel and task public APIs so callers -// can `import { ... } from "trellis-hermes-core"`. Sub-path -// imports (`trellis-hermes-core/channel`, `/task`) remain the +// can `import { ... } from "research-trellis-core"`. Sub-path +// imports (`research-trellis-core/channel`, `/task`) remain the // recommended form for tree-shake-friendly consumption. export * from "./channel/index.js"; diff --git a/packages/core/src/mem/index.ts b/packages/core/src/mem/index.ts index 36d31d4..5336ae6 100644 --- a/packages/core/src/mem/index.ts +++ b/packages/core/src/mem/index.ts @@ -1,12 +1,12 @@ /** - * Public surface for `trellis-hermes-core/mem` — reusable retrieval and + * Public surface for `research-trellis-core/mem` — reusable retrieval and * dialogue-context extraction over persisted Claude Code / Codex / OpenCode * sessions. * * This subpackage is intentionally NOT re-exported from the root - * `trellis-hermes-core` barrel. Import it explicitly: + * `research-trellis-core` barrel. Import it explicitly: * - * import { searchMemSessions } from "trellis-hermes-core/mem"; + * import { searchMemSessions } from "research-trellis-core/mem"; * * v1 scope: persisted-session search and context extraction only. It does not * read channel / forum / thread event logs and has no cursor / pagination. diff --git a/packages/core/src/mem/internal/jsonl.ts b/packages/core/src/mem/internal/jsonl.ts index 2f4f7e5..0c6bc77 100644 --- a/packages/core/src/mem/internal/jsonl.ts +++ b/packages/core/src/mem/internal/jsonl.ts @@ -1,7 +1,7 @@ /** * Streaming JSONL / JSON readers for the persisted-session adapters. * - * Zero-dependency on purpose — `trellis-hermes-core` does not depend on + * Zero-dependency on purpose — `research-trellis-core` does not depend on * `zod`. The original CLI implementation validated every line against a Zod * schema; the external session formats were all declared `.loose()` with every * field `.optional()`, so the only thing the schema actually rejected was a diff --git a/packages/core/src/mem/types.ts b/packages/core/src/mem/types.ts index b0f325d..9bd2fe9 100644 --- a/packages/core/src/mem/types.ts +++ b/packages/core/src/mem/types.ts @@ -1,5 +1,5 @@ /** - * Public input / output types for `trellis-hermes-core/mem`. + * Public input / output types for `research-trellis-core/mem`. * * This model serves persisted AI-session retrieval and dialogue-context * extraction only. It is intentionally separate from the channel event schema: diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7907921..3fb0123 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,7 +32,7 @@ importers: inquirer: specifier: ^9.3.7 version: 9.3.8(@types/node@20.19.28) - trellis-hermes-core: + research-trellis-core: specifier: workspace:* version: link:../core undici: