# AI 创建 Skill 直连链路 Implementation Plan

> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.

**Goal:** 把 AI 创建 Skill 改成配置运行时直连，并在运行完成后通过唯一确认卡一键创建并立即发布。

**Architecture:** 前端删除创建规划、评测、修订和 harness 状态机，保留 SSE 对话与单一发布动作。后端 create mode 只负责选择配置的智能体/运行时、透传对话和收集结果，不再编译或校验固定 Skill 包结构。

**Tech Stack:** React 18、Vite、Hono、Node.js test runner、SQLite、SSE

---

### Task 1: 固化直连前端路由

**Files:**
- Modify: `src/services/createSkillChatRouting.test.js`
- Modify: `src/pages/CreateSkillChat.jsx`

**Step 1: Write the failing test**

新增源码级测试，断言创建页不再引用 clarification、evaluate、revise、harness，并断言发送路径固定调用 `doSendToAI(t, { mode: 'create' })`，生成结束后创建单一 publish 卡。

**Step 2: Run test to verify it fails**

Run: `node --test src/services/createSkillChatRouting.test.js`

Expected: FAIL，旧页面仍包含 clarification、evaluation 和 harness 路由。

**Step 3: Write minimal implementation**

精简 `CreateSkillChat.jsx`：删除创建规划、评测、修订和风险接受分支；每次发送直接进入 create 运行时；运行成功后追加唯一的 `publish` 卡。

**Step 4: Run test to verify it passes**

Run: `node --test src/services/createSkillChatRouting.test.js`

Expected: PASS。

### Task 2: 删除前端 harness

**Files:**
- Delete: `src/services/skillPackageHarness.js`
- Delete: `src/services/skillPackageHarness.test.js`
- Modify: `src/services/skillUploadPlan.js`
- Modify: `src/services/skillUploadPlan.test.js`

**Step 1: Write the failing test**

修改上传计划测试，断言返回值只整理名称、描述、文件和发布必需字段，不再返回 `harness`、`generationHarness`，质量问题不阻止 `canUpload`。

**Step 2: Run test to verify it fails**

Run: `node --test src/services/skillUploadPlan.test.js`

Expected: FAIL，旧实现仍运行 harness。

**Step 3: Write minimal implementation**

删除 harness import、执行与缺失字段注入；删除 harness 文件及专属测试。

**Step 4: Run test to verify it passes**

Run: `node --test src/services/skillUploadPlan.test.js`

Expected: PASS。

### Task 3: 后端 create mode 直连运行时

**Files:**
- Modify: `cf-worker/src/routes/skill-run-creator-contract.test.js`
- Modify: `cf-worker/src/routes/skill-run-spec-compiler.test.js`
- Modify: `cf-worker/src/routes/skill-run.js`
- Modify: `cf-worker/src/runtime/qoder-cloud-agent.test.js`
- Modify: `cf-worker/src/runtime/qoder-cloud-agent.js`

**Step 1: Write the failing test**

断言 create-mode 不强制 `write_file`，不会因运行时只返回文本且不生成标准文件失败；QODER prompt 不包含 `skill.spec.json` 固定交付约束。

**Step 2: Run test to verify it fails**

Run: `node --test cf-worker/src/routes/skill-run-creator-contract.test.js cf-worker/src/routes/skill-run-spec-compiler.test.js cf-worker/src/runtime/qoder-cloud-agent.test.js`

Expected: FAIL，旧后端仍强制 spec 和标准三件套。

**Step 3: Write minimal implementation**

创建模式只使用配置智能体的 prompt/挂载 Skill 作为上下文；删除 spec 编译、标准包快照和缺失文件异常；AgentRun 不再强制 tool choice；QODER prompt 改为直接执行并返回结果。

**Step 4: Run test to verify it passes**

Run: `node --test cf-worker/src/routes/skill-run-creator-contract.test.js cf-worker/src/routes/skill-run-spec-compiler.test.js cf-worker/src/runtime/qoder-cloud-agent.test.js`

Expected: PASS。

### Task 4: 一键创建并立即发布

**Files:**
- Modify: `src/services/createSkillChatRouting.test.js`
- Modify: `src/pages/CreateSkillChat.jsx`

**Step 1: Write the failing test**

断言最终卡按钮文案为“一键创建并立即发布 Skill”，执行时先创建 Skill，再调用 `updateSkillApi(id, { status: 'published' })`；只有文本时使用文本创建，生成文件存在时直接无 harness 打包。

**Step 2: Run test to verify it fails**

Run: `node --test src/services/createSkillChatRouting.test.js`

Expected: FAIL，旧流程分成上传、评测和发布多张卡。

**Step 3: Write minimal implementation**

实现单一发布动作；流程节点缺失时打开节点选择器并在选择后恢复发布；成功后展示已发布结果并结束链路。

**Step 4: Run test to verify it passes**

Run: `node --test src/services/createSkillChatRouting.test.js`

Expected: PASS。

### Task 5: 回归验证

**Files:**
- Test: `src/services/*.test.js`
- Test: `cf-worker/src/runtime/*.test.js`
- Test: `cf-worker/src/routes/skill-run-*.test.js`

**Step 1: Run focused tests**

Run: `node --test src/services/createSkillChatRouting.test.js src/services/skillUploadPlan.test.js cf-worker/src/runtime/qoder-cloud-agent.test.js cf-worker/src/routes/skill-run-creator-contract.test.js cf-worker/src/routes/skill-run-spec-compiler.test.js`

Expected: PASS。

**Step 2: Run project build**

Run: `npm run build`

Expected: PASS，无未使用 import 或 JSX 编译错误。

**Step 3: Run relevant backend regression**

Run: `node --test cf-worker/src/routes/skill-run-*.test.js cf-worker/src/runtime/*.test.js`

Expected: PASS；与已存在环境依赖有关的失败需单独说明。
