Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
e199b42
sync: cat-cafe fa16e769 → clowder-ai (2026-06-22) (#994)
zts212653 Jun 22, 2026
a425bc2
fix(api): add MiniMax-M3 context window fallback
ldn9596 Jun 22, 2026
0a44e46
fix(api): add OpenRouter MiniMax-M3 slug alias
zts212653 Jun 22, 2026
7baff10
fix(runtime): recover from platform lockfile drift (#978)
mindfn Jun 22, 2026
7ddef68
fix(runtime): preserve install exit code + align lockfile-class regex…
zts212653 Jun 22, 2026
57bcef5
fix(weixin): stabilize fallback message ids (#958)
mindfn Jun 22, 2026
4241932
feat(F237): Prompt Injection Visibility — Phase 1 (Checkpoints A–D)
mindfn Jun 22, 2026
f9a733f
fix: make opencode follow thread workspace (#1001)
ldn9596 Jun 23, 2026
db822c0
fix: batch fix #991 + #966 + #992 + #995 + #1002 + Skill tab UI consi…
mindfn Jun 23, 2026
7d48f18
fix(desktop): prevent macOS launch from mounted DMG volume (#986)
Josh-Jing Jun 23, 2026
8be7cc6
fix: scope OpenCode resume sessions by workspace
zts212653 Jun 24, 2026
bae13c5
fix(codex): preserve sandbox mode on resume (#1014)
snvtac Jun 25, 2026
c9d1003
sync: cat-cafe 3ca74e0371d4 → clowder-ai (manifest v3)
zts212653 Jun 25, 2026
29f9a7c
Merge pull request #1020 from zts212653/sync/cat-cafe-3ca74e03-v2
zts212653 Jun 25, 2026
d05f19b
fix: 统一 Node 版本文档为 >=24 <26 + Windows 安装器 pnpm 进度 spinner (#1022)
labulalala Jun 25, 2026
99740be
fix(web): use browsed directory when creating thread (#1010)
CharlieZhao95 Jun 25, 2026
43c14e4
feat(signals): add first-party signals plugin manifest (step 1/10, is…
bouillipx Jun 26, 2026
5e73d99
feat(signals): auto-enable plugin scheduler
bouillipx Jun 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
14 changes: 14 additions & 0 deletions .dir-exceptions.json
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,20 @@
"reason": "F235 RedisCommunityIssueDraftStore 加入后 redis/ 达 25 files;与 ports/(26) 同源——每个 store port 一个 Redis impl。需在 F23 follow-up 中按 proposal/community/session 子域拆分。",
"expiresAt": "2026-06-30",
"ticket": "F23-followup"
},
{
"path": "packages/api/src/domains/community",
"owner": "opus",
"reason": "F168 Phase D D-PR1 新增 3 files(RedisNarratorDedupStore / community-closure-checklist / community-route-recommendation)后达 25 files。D-PR2 reconciler 可能再加 2-3 个;Phase D 结束后按 closure/reconciler/narrator 子域拆分。",
"expiresAt": "2026-07-15",
"ticket": "F168"
},
{
"path": "packages/api/src/domains/cats/services/stores/redis-keys",
"owner": "opus",
"reason": "redis-keys 27 files;每个 store 一个专属 key-builder 模块,与 stores/ports 和 stores/redis 同源增长。待 F23 follow-up 按 proposal/community/session 子域拆分。",
"expiresAt": "2026-07-15",
"ticket": "F23-followup"
}
]
}
35 changes: 33 additions & 2 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,20 @@ EMBED_MODE=off
# EMBED_PORT=9880
# EMBED_URL=http://127.0.0.1:9880

# ── Optional: Feishu 飞书(可选)────────────────────────────
# Chat with cats from Feishu/Lark. Requires a Feishu app.
# 在飞书里和猫猫聊天,需要创建飞书应用。

# FEISHU_APP_ID=cli_xxx
# FEISHU_APP_SECRET=xxx
# FEISHU_VERIFICATION_TOKEN=xxx

# ── Optional: Telegram(可选)───────────────────────────────
# Chat with cats from Telegram. Create a bot via @BotFather.
# 在 Telegram 里和猫猫聊天,通过 @BotFather 创建 bot。

# TELEGRAM_BOT_TOKEN=123456:ABC-DEF...

# ── Optional: GitHub PR Review Notifications(可选)─────────
# Polls IMAP for GitHub review emails and routes to chat.
# 轮询 IMAP 邮箱获取 GitHub review 邮件通知。
Expand All @@ -126,9 +140,26 @@ EMBED_MODE=off
# GITHUB_REVIEW_IMAP_HOST=imap.qq.com
# GITHUB_REVIEW_IMAP_PORT=993
# GITHUB_MCP_PAT=ghp_...
# GITHUB_WEBHOOK_SECRET=<shared-secret>

# ── Optional: GitHub Repo Inbox Webhook(可选)───────────────
# Receive GitHub repo webhook events in a configured inbox thread.
# 接收 GitHub 仓库 webhook 事件并路由到指定 inbox thread。

# GITHUB_WEBHOOK_SECRET=change-me
# GITHUB_REPO_ALLOWLIST=owner/repo
# GITHUB_REPO_INBOX_CAT_ID=codex
# GITHUB_REPO_INBOX_CAT_ID=opus

# ── Optional: WeCom 企业微信(可选)─────────────────────────
# Chat with cats from WeCom/WeChat Work.
# 在企业微信里和猫猫聊天。

# WECOM_BOT_ID=xxx
# WECOM_BOT_SECRET=xxx
# WECOM_CORP_ID=xxx
# WECOM_AGENT_ID=xxx
# WECOM_AGENT_SECRET=xxx
# WECOM_TOKEN=xxx
# WECOM_ENCODING_AES_KEY=xxx

# ── Telemetry 遥测(可选)───────────────────────────────────
# HMAC salt for pseudonymizing IDs in external telemetry (Sentry, etc.).
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build-mac-dmg.yml
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ jobs:
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 22
node-version: 24
cache: pnpm

- name: Build macOS DMG (${{ matrix.arch }})
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build-windows-desktop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ jobs:
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 22
node-version: 24
cache: pnpm

- name: Install Inno Setup
Expand Down
11 changes: 8 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ jobs:
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 20
node-version: 24
cache: pnpm
- run: pnpm install --frozen-lockfile
- run: pnpm check
Expand All @@ -42,7 +42,7 @@ jobs:
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 20
node-version: 24
cache: pnpm
- run: pnpm install --frozen-lockfile
- run: pnpm --filter @cat-cafe/shared build
Expand All @@ -57,11 +57,16 @@ jobs:
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 20
node-version: 24
cache: pnpm
- run: pnpm install --frozen-lockfile
- run: pnpm --filter @cat-cafe/shared build
- run: pnpm --filter @cat-cafe/api run test:public
env:
GIT_AUTHOR_NAME: CI Runner
GIT_AUTHOR_EMAIL: ci@clowder-ai.dev
GIT_COMMITTER_NAME: CI Runner
GIT_COMMITTER_EMAIL: ci@clowder-ai.dev

dir-size:
name: Directory Size Guard
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/windows-smoke.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ jobs:
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 20
node-version: 24
cache: pnpm
- run: pnpm install --frozen-lockfile
- run: pnpm --filter @cat-cafe/shared build
Expand Down
12 changes: 11 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,13 @@ node_modules/
# Build outputs
dist/
docs/.doc-index.json

# Runtime-written sentinel queue (MarkerQueue auto-writes ephemeral yaml here).
# Source: packages/api/src/domains/memory/MarkerQueue.ts. Content is callback
# id / sentinel — not meant for git history. Reported by hook as "未提交" but
#猫不该 commit. (47 sweep 2026-06-17)
docs/markers/

# Feature index — derived from docs/features/*.md, NO live consumer (runtime builds
# its index from the docs directly; opensource sync regenerates it fresh). ADR-011
# lists it as optional/never-completed. Decommitted to kill merge-order staleness
Expand All @@ -26,8 +33,11 @@ packages/web/public/vendor/
.env.local
.env.*.local

# Local overlay files (#603 .local convention)
# Local overlay files (#603 .local convention, F225 prompt templates)
*.local.md
*.local.md.bak
*.local.yaml
*.local.yaml.bak
*.local-override.md

# IDE & AI tools
Expand Down
8 changes: 4 additions & 4 deletions .sync-provenance.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
{
"source_commit_sha": "0a275da699b63a8006bc4720f9b272de1cc39d3e",
"target_head_sha": "8845a42c5e87e75f3ef837d7ab43500d39ec9130",
"source_commit_sha": "3ca74e0371d4a6a6697b1e9aa9b538ed12410662",
"target_head_sha": "bae13c5477cb49ff0be829f6691ad8ac4cf02673",
"release_tag": null,
"source_snapshot_tag": null,
"manifest_version": 3,
"included_file_count": 4488,
"included_file_count": 4958,
"excluded_file_count": 14,
"transform_count": 34,
"secret_scan_result": "clean",
"synced_at": "2026-06-17T07:02:08Z"
"synced_at": "2026-06-25T07:49:52Z"
}
2 changes: 1 addition & 1 deletion README.ja-JP.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ Clowder はモデル非依存です。各エージェント CLI / adapter は統

### オプション B:ソースセットアップ

**前提条件:** [Node.js 20+](https://nodejs.org/) · [pnpm 9+](https://pnpm.io/) · [Redis 7+](https://redis.io/) *(オプション — スキップする場合は `--memory`)* · Git
**前提条件:** [Node.js 24+](https://nodejs.org/) · [pnpm 9+](https://pnpm.io/) · [Redis 7+](https://redis.io/) *(オプション — スキップする場合は `--memory`)* · Git

```bash
# 1. クローン
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ The desktop installer bundles the app runtime, portable Node.js, and Redis, so r

### Option B: Source Setup

**Prerequisites:** [Node.js 20+](https://nodejs.org/) · [pnpm 9+](https://pnpm.io/) · [Redis 7+](https://redis.io/) *(optional — use `--memory` to skip)* · Git
**Prerequisites:** [Node.js 24+](https://nodejs.org/) · [pnpm 9+](https://pnpm.io/) · [Redis 7+](https://redis.io/) *(optional — use `--memory` to skip)* · Git

```bash
# 1. Clone
Expand Down
2 changes: 1 addition & 1 deletion README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ Clowder 不绑定模型。当前支持的 Agent CLI / adapter:

### 方式 B:源码安装

**前置要求:** [Node.js 20+](https://nodejs.org/) · [pnpm 9+](https://pnpm.io/) · [Redis 7+](https://redis.io/) *(可选 — 用 `--memory` 跳过)* · Git
**前置要求:** [Node.js 24+](https://nodejs.org/) · [pnpm 9+](https://pnpm.io/) · [Redis 7+](https://redis.io/) *(可选 — 用 `--memory` 跳过)* · Git

```bash
# 1. 克隆
Expand Down
10 changes: 5 additions & 5 deletions SETUP.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

| Tool | Version | Install |
|------|---------|---------|
| **Node.js** | >= 20.0.0 | [nodejs.org](https://nodejs.org/) |
| **Node.js** | >= 24.0.0 | [nodejs.org](https://nodejs.org/) |
| **pnpm** | >= 9.0.0 | `npm install -g pnpm` |
| **Redis** | >= 7.0 | `brew install redis` (macOS) or [redis.io](https://redis.io/download/) — *optional: use `--memory` flag to skip* |
| **Git** | any recent | Comes with most systems |
Expand Down Expand Up @@ -81,9 +81,10 @@ your-projects/
| `pnpm stop` | Stop background daemon |
| `pnpm start:status` | Check if daemon is running |
| `pnpm runtime:init` | Only create the runtime worktree (no start) |
| `pnpm runtime:sync` | Only sync worktree to origin/main (no start) |
| `pnpm runtime:status` | Show worktree path, branch, HEAD, ahead/behind |

> Runtime contract (ADR-039 passive frozen): `pnpm start` is the single entry; sync+build+restart are folded into one command. There is no standalone sync — that was removed to prevent stale-dist crashes (see ADR-039).

First run creates `../cat-cafe-runtime` automatically. Subsequent runs do a fast-forward sync then start.

> **Custom runtime path:** Set `CAT_CAFE_RUNTIME_DIR` to use a different location: `CAT_CAFE_RUNTIME_DIR=../my-clowder-runtime pnpm start`
Expand Down Expand Up @@ -498,10 +499,9 @@ pnpm stop # Stop background daemon
pnpm start:status # Check if daemon is running
# View logs: tail -f cat-cafe-daemon.log

# === Runtime Worktree ===
# === Runtime Worktree (ADR-039 passive frozen) ===
pnpm runtime:init # Create runtime worktree (first time only)
pnpm runtime:sync # Sync worktree to origin/main
pnpm runtime:start # Sync + start from worktree
pnpm runtime:start # Single entry: sync + build + start (no standalone sync)
pnpm runtime:status # Show worktree status

# === Build & Test ===
Expand Down
10 changes: 5 additions & 5 deletions SETUP.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

| 工具 | 版本 | 安装方式 |
|------|------|---------|
| **Node.js** | >= 20.0.0 | [nodejs.org](https://nodejs.org/) |
| **Node.js** | >= 24.0.0 | [nodejs.org](https://nodejs.org/) |
| **pnpm** | >= 9.0.0 | `npm install -g pnpm` |
| **Redis** | >= 7.0 | `brew install redis`(macOS)或 [redis.io](https://redis.io/download/) — *可选:用 `--memory` 标志跳过* |
| **Git** | 任意近期版本 | 大多数系统自带 |
Expand Down Expand Up @@ -81,9 +81,10 @@ your-projects/
| `pnpm stop` | 停止后台 daemon |
| `pnpm start:status` | 查看 daemon 是否在运行 |
| `pnpm runtime:init` | 只创建运行时 worktree(不启动) |
| `pnpm runtime:sync` | 只同步 worktree 到 origin/main(不启动) |
| `pnpm runtime:status` | 显示 worktree 路径、分支、HEAD、ahead/behind |

> 运行时契约(ADR-039 被动冻结):`pnpm start` 是单一入口,sync+build+restart 一次完成。已移除独立 sync 命令以防止 stale-dist 崩溃(详见 ADR-039)。

首次运行自动创建 `../cat-cafe-runtime`。后续运行做 fast-forward 同步后启动。

> **自定义运行时路径:** 设置 `CAT_CAFE_RUNTIME_DIR` 使用不同位置:`CAT_CAFE_RUNTIME_DIR=../my-clowder-runtime pnpm start`
Expand Down Expand Up @@ -498,10 +499,9 @@ pnpm stop # 停止后台 daemon
pnpm start:status # 查看 daemon 是否在运行
# 查看日志: tail -f cat-cafe-daemon.log

# === 运行时 Worktree ===
# === 运行时 Worktree (ADR-039 被动冻结) ===
pnpm runtime:init # 创建运行时 worktree(仅首次)
pnpm runtime:sync # 同步 worktree 到 origin/main
pnpm runtime:start # 同步 + 从 worktree 启动
pnpm runtime:start # 单一入口:sync + build + start(无独立 sync)
pnpm runtime:status # 查看 worktree 状态

# === 构建和测试 ===
Expand Down
18 changes: 18 additions & 0 deletions assets/brand-dictionary.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,18 @@ path_policies:
risk: P1
reason: "Desktop app product identity, installer metadata, and support paths differ by repo."

- pattern: "cat-cafe-skills/refs/gpt-pro-custom-instructions.md"
outbound: pass-through
inbound: pass-through
risk: P3
reason: "F247 B1a — verbatim L0 prompt fed to cloud-side ChatGPT Pro (砚砚 Pro). Internal persona injection text; never sync to opensource clowder-ai (no cloud-cat counterpart there). Pass-through exempts from brand guard."

- pattern: "cat-cafe-skills/refs/chatgpt-cloud-onboarding-guide.md"
outbound: pass-through
inbound: pass-through
risk: P3
reason: "F247 B1a — internal SOP for onboarding cloud-side ChatGPT Pro (砚砚 Pro) to cat-cafe. House-rules document with named-cat routing semantics; never sync to opensource. Pass-through exempts from brand guard."

- pattern: "cat-cafe-skills/**"
outbound: sanitize
inbound: manual-port
Expand All @@ -279,6 +291,12 @@ path_policies:
risk: P1
reason: "Localized READMEs are generated from README.opensource sources."

- pattern: "docs/ops/opensource-intake-ledger.json"
outbound: pass-through
inbound: pass-through
risk: P3
reason: "Intake ledger tracks clowder-ai PR absorption; naturally contains cross-repo brand references (repo name, PR titles). pass-through exempts from brand guard (pre-commit) and intake classification (not a managed sync root — never reaches clowder-ai). F238 follow-up from #943/#944/#899."

- pattern: "docs/**"
outbound: sanitize
inbound: manual-port
Expand Down
3 changes: 3 additions & 0 deletions assets/prompt-templates/a2a-ball-check.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<!-- @segment D8 — A2A ball ownership rules -->

A2A 球权检查:@ = 球权转移(行首 @句柄,句中无效)。收到 @ 但对方说"我在动" → 矛盾,push back + 立刻接/退/升(诊断≠解决,说完不@=球还在地上)。收了球却说"你等着/你别动" → 球权死锁,禁止——做不了就退回或升级。球权只有第一人称:只能声明自己持球,不能声明别人持球——没有 @ 或 hold_ball 动作,球权就没转移。
21 changes: 21 additions & 0 deletions assets/prompt-templates/c1-mcp-callback.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<!-- @segment C1 — MCP Callback Instructions -->
<!-- Variables: EXAMPLE_HANDLE -->
<!-- Condition: Native MCP unavailable AND not Antigravity provider -->

## 协作方式

### @队友
另起一行写 `@猫名`(行中间无效),并在同一段写动作请求。多只猫各占一行。
动作词示例:`请确认/请处理/请决策/请看一下`。
同族多分身时用**唯一句柄**(如 `{{EXAMPLE_HANDLE}}`)。
✅ 正确:`{{EXAMPLE_HANDLE}} 请确认这个安排`
❌ 错误:为了 @ 队友去调 post-message

### HTTP 回调(异步)
凭证: `$CAT_CAFE_INVOCATION_ID` + `$CAT_CAFE_CALLBACK_TOKEN`
可用工具: post-message / register-pr-tracking / thread-context / list-threads / feat-index / list-tasks / pending-mentions / create-task / update-task / create-rich-block / search-evidence / reflect / retain-memory / request-permission / submit-game-action
跨 thread: cross-post-message + `threadId`
检索消息: thread-context + `catId`/`keyword`
检索 feature: feat-index + `featId`/`query`
完整用法: GET `$CAT_CAFE_API_URL/api/callbacks/instructions`
富消息规范: GET `$CAT_CAFE_API_URL/api/callbacks/rich-block-rules`
5 changes: 5 additions & 0 deletions assets/prompt-templates/d1-identity-anchor.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<!-- @segment D1 — Identity 锚点 -->
<!-- Variables: DISPLAY_NAME, NICKNAME_PART, CAT_ID, RUNTIME_MODEL -->
<!-- Condition: always injected -->

Identity: {{DISPLAY_NAME}}{{NICKNAME_PART}} (@{{CAT_ID}}, model={{RUNTIME_MODEL}})
5 changes: 5 additions & 0 deletions assets/prompt-templates/d10-critique-tag.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<!-- @segment D10 — 思维标签 -->
<!-- Variables: (none) -->
<!-- Condition: promptTags includes 'critique' -->

思维方式:批判性分析。挑战假设,找出漏洞,提出反例。
5 changes: 5 additions & 0 deletions assets/prompt-templates/d11-skill-trigger.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<!-- @segment D11 — Skill 触发 -->
<!-- Variables: SKILL_NAME -->
<!-- Condition: promptTags includes 'skill:' prefix -->

⚡ Signal-triggered action → load skill: {{SKILL_NAME}}
5 changes: 5 additions & 0 deletions assets/prompt-templates/d12-active-participant.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<!-- @segment D12 — 活跃参与者 -->
<!-- Variables: ACTIVE_LABEL -->
<!-- Condition: activeParticipants has recent non-self entry -->

最近活跃:{{ACTIVE_LABEL}}
5 changes: 5 additions & 0 deletions assets/prompt-templates/d13-routing-policy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<!-- @segment D13 — 路由策略 -->
<!-- Variables: ROUTING_PARTS -->
<!-- Condition: routingPolicy.v === 1 && has active scopes -->

Routing: {{ROUTING_PARTS}}
5 changes: 5 additions & 0 deletions assets/prompt-templates/d14-sop-stage.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<!-- @segment D14 — SOP 阶段提示 -->
<!-- Variables: FEATURE_ID, STAGE, SUGGESTED_SKILL, SOURCE_PART -->
<!-- Condition: context.sopStageHint exists -->

SOP: {{FEATURE_ID}} stage={{STAGE}} → load skill: {{SUGGESTED_SKILL}}{{SOURCE_PART}}
5 changes: 5 additions & 0 deletions assets/prompt-templates/d15-voice-off.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<!-- @segment D15 — Voice 模式 (OFF) -->
<!-- Variables: none -->
<!-- Condition: context.voiceMode !== true -->

Voice Mode OFF: 不强制发语音。默认用文字回复。你仍然可以发 audio rich block,但仅在co-creator明确要求语音时才发。
6 changes: 6 additions & 0 deletions assets/prompt-templates/d15-voice-on.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<!-- @segment D15 — Voice 模式 (ON) -->
<!-- Variables: none -->
<!-- Condition: context.voiceMode === true -->

Voice Mode ON: co-creator在语音陪伴模式。
- 默认用 audio rich block;代码/表格/长内容用文字并附语音摘要
6 changes: 6 additions & 0 deletions assets/prompt-templates/d16-bootcamp.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<!-- @segment D16 — Bootcamp 模式 -->
<!-- Variables: THREAD_PART, PHASE, LEAD_CAT_PART, TASK_PART, MEMBERS_PART -->
<!-- Condition: context.bootcampState exists -->

🎓 Bootcamp Mode:{{THREAD_PART}} phase={{PHASE}}{{LEAD_CAT_PART}}{{TASK_PART}}{{MEMBERS_PART}}
→ Load bootcamp-guide skill and act per current phase.
5 changes: 5 additions & 0 deletions assets/prompt-templates/d17-guide-candidate.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<!-- @segment D17 — Guide 候选 -->
<!-- Variables: GUIDE_PROMPT_LINES -->
<!-- Condition: context.guideCandidate exists -->

{{GUIDE_PROMPT_LINES}}
Loading