@trench-craft/sds 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +522 -0
- package/README.md +566 -0
- package/dist/bin/sds.d.ts +3 -0
- package/dist/bin/sds.d.ts.map +1 -0
- package/dist/bin/sds.js +50 -0
- package/dist/bin/sds.js.map +1 -0
- package/dist/src/__tests__/cli.test.d.ts +2 -0
- package/dist/src/__tests__/cli.test.d.ts.map +1 -0
- package/dist/src/__tests__/cli.test.js +37 -0
- package/dist/src/__tests__/cli.test.js.map +1 -0
- package/dist/src/__tests__/e2e.test.d.ts +5 -0
- package/dist/src/__tests__/e2e.test.d.ts.map +1 -0
- package/dist/src/__tests__/e2e.test.js +143 -0
- package/dist/src/__tests__/e2e.test.js.map +1 -0
- package/dist/src/__tests__/graph.test.d.ts +5 -0
- package/dist/src/__tests__/graph.test.d.ts.map +1 -0
- package/dist/src/__tests__/graph.test.js +423 -0
- package/dist/src/__tests__/graph.test.js.map +1 -0
- package/dist/src/__tests__/openspec.test.d.ts +5 -0
- package/dist/src/__tests__/openspec.test.d.ts.map +1 -0
- package/dist/src/__tests__/openspec.test.js +172 -0
- package/dist/src/__tests__/openspec.test.js.map +1 -0
- package/dist/src/commands/apply.d.ts +4 -0
- package/dist/src/commands/apply.d.ts.map +1 -0
- package/dist/src/commands/apply.js +14 -0
- package/dist/src/commands/apply.js.map +1 -0
- package/dist/src/commands/archive.d.ts +4 -0
- package/dist/src/commands/archive.d.ts.map +1 -0
- package/dist/src/commands/archive.js +20 -0
- package/dist/src/commands/archive.js.map +1 -0
- package/dist/src/commands/cache.d.ts +4 -0
- package/dist/src/commands/cache.d.ts.map +1 -0
- package/dist/src/commands/cache.js +31 -0
- package/dist/src/commands/cache.js.map +1 -0
- package/dist/src/commands/config.d.ts +4 -0
- package/dist/src/commands/config.d.ts.map +1 -0
- package/dist/src/commands/config.js +29 -0
- package/dist/src/commands/config.js.map +1 -0
- package/dist/src/commands/e2e.d.ts +4 -0
- package/dist/src/commands/e2e.d.ts.map +1 -0
- package/dist/src/commands/e2e.js +65 -0
- package/dist/src/commands/e2e.js.map +1 -0
- package/dist/src/commands/graph.d.ts +4 -0
- package/dist/src/commands/graph.d.ts.map +1 -0
- package/dist/src/commands/graph.js +783 -0
- package/dist/src/commands/graph.js.map +1 -0
- package/dist/src/commands/init.d.ts +4 -0
- package/dist/src/commands/init.d.ts.map +1 -0
- package/dist/src/commands/init.js +15 -0
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/commands/project.d.ts +4 -0
- package/dist/src/commands/project.d.ts.map +1 -0
- package/dist/src/commands/project.js +6 -0
- package/dist/src/commands/project.js.map +1 -0
- package/dist/src/commands/propose.d.ts +4 -0
- package/dist/src/commands/propose.d.ts.map +1 -0
- package/dist/src/commands/propose.js +26 -0
- package/dist/src/commands/propose.js.map +1 -0
- package/dist/src/commands/registry.d.ts +4 -0
- package/dist/src/commands/registry.d.ts.map +1 -0
- package/dist/src/commands/registry.js +6 -0
- package/dist/src/commands/registry.js.map +1 -0
- package/dist/src/commands/skills-install.d.ts +4 -0
- package/dist/src/commands/skills-install.d.ts.map +1 -0
- package/dist/src/commands/skills-install.js +158 -0
- package/dist/src/commands/skills-install.js.map +1 -0
- package/dist/src/commands/skills.d.ts +4 -0
- package/dist/src/commands/skills.d.ts.map +1 -0
- package/dist/src/commands/skills.js +19 -0
- package/dist/src/commands/skills.js.map +1 -0
- package/dist/src/commands/verify.d.ts +4 -0
- package/dist/src/commands/verify.d.ts.map +1 -0
- package/dist/src/commands/verify.js +31 -0
- package/dist/src/commands/verify.js.map +1 -0
- package/dist/src/core/engine.d.ts +33 -0
- package/dist/src/core/engine.d.ts.map +1 -0
- package/dist/src/core/engine.js +87 -0
- package/dist/src/core/engine.js.map +1 -0
- package/dist/src/core/engine.test.d.ts +2 -0
- package/dist/src/core/engine.test.d.ts.map +1 -0
- package/dist/src/core/engine.test.js +13 -0
- package/dist/src/core/engine.test.js.map +1 -0
- package/dist/src/core/session-state.d.ts +18 -0
- package/dist/src/core/session-state.d.ts.map +1 -0
- package/dist/src/core/session-state.js +55 -0
- package/dist/src/core/session-state.js.map +1 -0
- package/dist/src/core/session-state.test.d.ts +2 -0
- package/dist/src/core/session-state.test.d.ts.map +1 -0
- package/dist/src/core/session-state.test.js +90 -0
- package/dist/src/core/session-state.test.js.map +1 -0
- package/dist/src/core/subagent-timeout.d.ts +18 -0
- package/dist/src/core/subagent-timeout.d.ts.map +1 -0
- package/dist/src/core/subagent-timeout.js +61 -0
- package/dist/src/core/subagent-timeout.js.map +1 -0
- package/dist/src/core/subagent-timeout.test.d.ts +2 -0
- package/dist/src/core/subagent-timeout.test.d.ts.map +1 -0
- package/dist/src/core/subagent-timeout.test.js +57 -0
- package/dist/src/core/subagent-timeout.test.js.map +1 -0
- package/dist/src/core/task-sync.d.ts +19 -0
- package/dist/src/core/task-sync.d.ts.map +1 -0
- package/dist/src/core/task-sync.js +62 -0
- package/dist/src/core/task-sync.js.map +1 -0
- package/dist/src/core/task-sync.test.d.ts +2 -0
- package/dist/src/core/task-sync.test.d.ts.map +1 -0
- package/dist/src/core/task-sync.test.js +84 -0
- package/dist/src/core/task-sync.test.js.map +1 -0
- package/dist/src/graph/advanced-performance.d.ts +137 -0
- package/dist/src/graph/advanced-performance.d.ts.map +1 -0
- package/dist/src/graph/advanced-performance.js +375 -0
- package/dist/src/graph/advanced-performance.js.map +1 -0
- package/dist/src/graph/database.d.ts +79 -0
- package/dist/src/graph/database.d.ts.map +1 -0
- package/dist/src/graph/database.js +305 -0
- package/dist/src/graph/database.js.map +1 -0
- package/dist/src/graph/engine.d.ts +43 -0
- package/dist/src/graph/engine.d.ts.map +1 -0
- package/dist/src/graph/engine.js +334 -0
- package/dist/src/graph/engine.js.map +1 -0
- package/dist/src/graph/exporter.d.ts +56 -0
- package/dist/src/graph/exporter.d.ts.map +1 -0
- package/dist/src/graph/exporter.js +273 -0
- package/dist/src/graph/exporter.js.map +1 -0
- package/dist/src/graph/index.d.ts +21 -0
- package/dist/src/graph/index.d.ts.map +1 -0
- package/dist/src/graph/index.js +14 -0
- package/dist/src/graph/index.js.map +1 -0
- package/dist/src/graph/layouts.d.ts +77 -0
- package/dist/src/graph/layouts.d.ts.map +1 -0
- package/dist/src/graph/layouts.js +368 -0
- package/dist/src/graph/layouts.js.map +1 -0
- package/dist/src/graph/parser.d.ts +47 -0
- package/dist/src/graph/parser.d.ts.map +1 -0
- package/dist/src/graph/parser.js +228 -0
- package/dist/src/graph/parser.js.map +1 -0
- package/dist/src/graph/performance.d.ts +90 -0
- package/dist/src/graph/performance.d.ts.map +1 -0
- package/dist/src/graph/performance.js +275 -0
- package/dist/src/graph/performance.js.map +1 -0
- package/dist/src/graph/semantic.d.ts +151 -0
- package/dist/src/graph/semantic.d.ts.map +1 -0
- package/dist/src/graph/semantic.js +402 -0
- package/dist/src/graph/semantic.js.map +1 -0
- package/dist/src/graph/types.d.ts +114 -0
- package/dist/src/graph/types.d.ts.map +1 -0
- package/dist/src/graph/types.js +5 -0
- package/dist/src/graph/types.js.map +1 -0
- package/dist/src/graph/visualizer.d.ts +50 -0
- package/dist/src/graph/visualizer.d.ts.map +1 -0
- package/dist/src/graph/visualizer.js +869 -0
- package/dist/src/graph/visualizer.js.map +1 -0
- package/dist/src/openspec/apply.d.ts +16 -0
- package/dist/src/openspec/apply.d.ts.map +1 -0
- package/dist/src/openspec/apply.js +140 -0
- package/dist/src/openspec/apply.js.map +1 -0
- package/dist/src/openspec/archive.d.ts +3 -0
- package/dist/src/openspec/archive.d.ts.map +1 -0
- package/dist/src/openspec/archive.js +17 -0
- package/dist/src/openspec/archive.js.map +1 -0
- package/dist/src/openspec/e2e-generate.d.ts +39 -0
- package/dist/src/openspec/e2e-generate.d.ts.map +1 -0
- package/dist/src/openspec/e2e-generate.js +315 -0
- package/dist/src/openspec/e2e-generate.js.map +1 -0
- package/dist/src/openspec/e2e-runner.d.ts +32 -0
- package/dist/src/openspec/e2e-runner.d.ts.map +1 -0
- package/dist/src/openspec/e2e-runner.js +208 -0
- package/dist/src/openspec/e2e-runner.js.map +1 -0
- package/dist/src/openspec/explore.d.ts +3 -0
- package/dist/src/openspec/explore.d.ts.map +1 -0
- package/dist/src/openspec/explore.js +20 -0
- package/dist/src/openspec/explore.js.map +1 -0
- package/dist/src/openspec/propose.d.ts +8 -0
- package/dist/src/openspec/propose.d.ts.map +1 -0
- package/dist/src/openspec/propose.js +124 -0
- package/dist/src/openspec/propose.js.map +1 -0
- package/dist/src/openspec/verify.d.ts +13 -0
- package/dist/src/openspec/verify.d.ts.map +1 -0
- package/dist/src/openspec/verify.js +156 -0
- package/dist/src/openspec/verify.js.map +1 -0
- package/dist/src/platform/claudecode.d.ts +2 -0
- package/dist/src/platform/claudecode.d.ts.map +1 -0
- package/dist/src/platform/claudecode.js +7 -0
- package/dist/src/platform/claudecode.js.map +1 -0
- package/dist/src/platform/codex.d.ts +2 -0
- package/dist/src/platform/codex.d.ts.map +1 -0
- package/dist/src/platform/codex.js +7 -0
- package/dist/src/platform/codex.js.map +1 -0
- package/dist/src/platform/opencode.d.ts +2 -0
- package/dist/src/platform/opencode.d.ts.map +1 -0
- package/dist/src/platform/opencode.js +7 -0
- package/dist/src/platform/opencode.js.map +1 -0
- package/dist/src/platform/router.d.ts +13 -0
- package/dist/src/platform/router.d.ts.map +1 -0
- package/dist/src/platform/router.js +57 -0
- package/dist/src/platform/router.js.map +1 -0
- package/dist/src/skills/cache.d.ts +16 -0
- package/dist/src/skills/cache.d.ts.map +1 -0
- package/dist/src/skills/cache.js +53 -0
- package/dist/src/skills/cache.js.map +1 -0
- package/dist/src/skills/discovery.d.ts +12 -0
- package/dist/src/skills/discovery.d.ts.map +1 -0
- package/dist/src/skills/discovery.js +61 -0
- package/dist/src/skills/discovery.js.map +1 -0
- package/dist/src/skills/loader.d.ts +12 -0
- package/dist/src/skills/loader.d.ts.map +1 -0
- package/dist/src/skills/loader.js +69 -0
- package/dist/src/skills/loader.js.map +1 -0
- package/dist/src/skills/registry.d.ts +23 -0
- package/dist/src/skills/registry.d.ts.map +1 -0
- package/dist/src/skills/registry.js +68 -0
- package/dist/src/skills/registry.js.map +1 -0
- package/dist/src/utils/fs.d.ts +5 -0
- package/dist/src/utils/fs.d.ts.map +1 -0
- package/dist/src/utils/fs.js +23 -0
- package/dist/src/utils/fs.js.map +1 -0
- package/dist/src/utils/logger.d.ts +7 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +8 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/yaml.d.ts +3 -0
- package/dist/src/utils/yaml.d.ts.map +1 -0
- package/dist/src/utils/yaml.js +8 -0
- package/dist/src/utils/yaml.js.map +1 -0
- package/package.json +62 -0
- package/registry/skills-registry.yaml +218 -0
- package/skills/core/brainstorming/SKILL.md +259 -0
- package/skills/core/brainstorming/scripts/frame-template.html +214 -0
- package/skills/core/brainstorming/scripts/helper.js +88 -0
- package/skills/core/brainstorming/scripts/server.cjs +338 -0
- package/skills/core/brainstorming/scripts/start-server.sh +153 -0
- package/skills/core/brainstorming/scripts/stop-server.sh +55 -0
- package/skills/core/brainstorming/skill.yaml +12 -0
- package/skills/core/brainstorming/spec-document-reviewer-prompt.md +48 -0
- package/skills/core/brainstorming/visual-companion.md +286 -0
- package/skills/core/claude-code-core/SKILL.md +164 -0
- package/skills/core/claude-code-core/skill.yaml +14 -0
- package/skills/core/claude-code-prompt/SKILL.md +283 -0
- package/skills/core/claude-code-prompt/skill.yaml +14 -0
- package/skills/core/claude-code-subagent/SKILL.md +168 -0
- package/skills/core/claude-code-subagent/skill.yaml +14 -0
- package/skills/core/e2e-generate/SKILL.md +147 -0
- package/skills/core/e2e-generate/skill.yaml +12 -0
- package/skills/core/ecc-agents-md-router/SKILL.md +90 -0
- package/skills/core/ecc-agents-md-router/skill.yaml +12 -0
- package/skills/core/ecc-context-injector/SKILL.md +69 -0
- package/skills/core/ecc-context-injector/skill.yaml +12 -0
- package/skills/core/existing-code-caveman/SKILL.md +340 -0
- package/skills/core/existing-code-caveman/skill.yaml +12 -0
- package/skills/core/opsx-apply/SKILL.md +121 -0
- package/skills/core/opsx-apply/skill.yaml +12 -0
- package/skills/core/opsx-archive/SKILL.md +83 -0
- package/skills/core/opsx-archive/skill.yaml +12 -0
- package/skills/core/opsx-explore/SKILL.md +101 -0
- package/skills/core/opsx-explore/skill.yaml +12 -0
- package/skills/core/opsx-propose/SKILL.md +131 -0
- package/skills/core/opsx-propose/skill.yaml +16 -0
- package/skills/core/opsx-verify/SKILL.md +109 -0
- package/skills/core/opsx-verify/skill.yaml +12 -0
- package/skills/core/subagent-driven-development/SKILL.md +157 -0
- package/skills/core/subagent-driven-development/code-quality-reviewer-prompt.md +64 -0
- package/skills/core/subagent-driven-development/implementer-prompt.md +122 -0
- package/skills/core/subagent-driven-development/skill.yaml +12 -0
- package/skills/core/subagent-driven-development/spec-reviewer-prompt.md +61 -0
- package/skills/core/writing-plans/SKILL.md +268 -0
- package/skills/core/writing-plans/plan-document-reviewer-prompt.md +63 -0
- package/skills/core/writing-plans/skill.yaml +12 -0
- package/skills/locale/chinese-code-review/SKILL.md +17 -0
- package/skills/locale/chinese-code-review/skill.yaml +16 -0
- package/skills/locale/chinese-commit-conventions/SKILL.md +17 -0
- package/skills/locale/chinese-commit-conventions/skill.yaml +16 -0
- package/skills/locale/chinese-documentation/SKILL.md +17 -0
- package/skills/locale/chinese-documentation/skill.yaml +16 -0
- package/skills/locale/chinese-git-workflow/SKILL.md +17 -0
- package/skills/locale/chinese-git-workflow/skill.yaml +16 -0
- package/templates/agents-md.md +42 -0
- package/templates/claude-md.md +44 -0
- package/templates/codex-md.md +49 -0
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
# 视觉伴侣指南
|
|
2
|
+
|
|
3
|
+
基于浏览器的视觉头脑风暴伴侣,用于展示原型、图表和选项。
|
|
4
|
+
|
|
5
|
+
## 何时使用
|
|
6
|
+
|
|
7
|
+
逐问题决定,而非按会话决定。判断标准:**用户看到它是否比读到它更容易理解?**
|
|
8
|
+
|
|
9
|
+
**使用浏览器** 当内容本身是视觉的:
|
|
10
|
+
|
|
11
|
+
- **UI 原型** — 线框图、布局、导航结构、组件设计
|
|
12
|
+
- **架构图** — 系统组件、数据流、关系图
|
|
13
|
+
- **并排视觉对比** — 对比两种布局、两种配色方案、两种设计方向
|
|
14
|
+
- **设计细节打磨** — 当问题涉及外观感受、间距、视觉层次
|
|
15
|
+
- **空间关系** — 状态机、流程图、实体关系图
|
|
16
|
+
|
|
17
|
+
**使用终端** 当内容是文字或表格的:
|
|
18
|
+
|
|
19
|
+
- **需求和范围问题** — "X 是什么意思?"、"哪些功能在范围内?"
|
|
20
|
+
- **概念性 A/B/C 选择** — 在用文字描述的方案之间做选择
|
|
21
|
+
- **权衡列表** — 优缺点、对比表
|
|
22
|
+
- **技术决策** — API 设计、数据建模、架构方案选择
|
|
23
|
+
- **澄清问题** — 任何回答是文字而非视觉偏好的问题
|
|
24
|
+
|
|
25
|
+
关于 UI 主题的问题不一定是视觉问题。"你想要什么样的向导?"是概念性的——使用终端。"这些向导布局中哪个感觉对?"是视觉性的——使用浏览器。
|
|
26
|
+
|
|
27
|
+
## 工作原理
|
|
28
|
+
|
|
29
|
+
服务器监视一个目录中的 HTML 文件,将最新的文件提供给浏览器。你写入 HTML 内容,用户在浏览器中看到它,并可以点击选择选项。选择结果被记录到一个 `.events` 文件中,你在下一轮会话中读取它。
|
|
30
|
+
|
|
31
|
+
**内容片段 vs 完整文档:** 如果你的 HTML 文件以 `<!DOCTYPE` 或 `<html` 开头,服务器会原样提供(仅注入辅助脚本)。否则,服务器会自动将你的内容包裹在框架模板中——添加头部、CSS 主题、选择指示器和所有交互基础设施。**默认写内容片段即可。** 只有当你需要完全控制页面时才写完整文档。
|
|
32
|
+
|
|
33
|
+
## 启动会话
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# 启动服务器并持久化(原型保存到项目中)
|
|
37
|
+
scripts/start-server.sh --project-dir /path/to/project
|
|
38
|
+
|
|
39
|
+
# 返回:{"type":"server-started","port":52341,"url":"http://localhost:52341",
|
|
40
|
+
# "screen_dir":"/path/to/project/.superpowers/brainstorm/12345-1706000000"}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
保存响应中的 `screen_dir`。告诉用户打开该 URL。
|
|
44
|
+
|
|
45
|
+
**查找连接信息:** 服务器将其启动 JSON 写入 `$SCREEN_DIR/.server-info`。如果你在后台启动了服务器且没有捕获 stdout,读取该文件以获取 URL 和端口。使用 `--project-dir` 时,检查 `<project>/.superpowers/brainstorm/` 获取会话目录。
|
|
46
|
+
|
|
47
|
+
**注意:** 传入项目根目录作为 `--project-dir`,这样原型会持久化在 `.superpowers/brainstorm/` 中,不会因服务器重启而丢失。不传的话,文件会保存到 `/tmp` 并在清理时被删除。提醒用户将 `.superpowers/` 添加到 `.gitignore`(如果尚未添加)。
|
|
48
|
+
|
|
49
|
+
**按平台启动服务器:**
|
|
50
|
+
|
|
51
|
+
**Claude Code (macOS / Linux):**
|
|
52
|
+
```bash
|
|
53
|
+
# 默认模式即可——脚本会自动将服务器放到后台
|
|
54
|
+
scripts/start-server.sh --project-dir /path/to/project
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Claude Code (Windows):**
|
|
58
|
+
```bash
|
|
59
|
+
# Windows 会自动检测并使用前台模式,这会阻塞工具调用。
|
|
60
|
+
# 在 Bash 工具调用上设置 run_in_background: true,
|
|
61
|
+
# 让服务器在会话轮次之间存活。
|
|
62
|
+
scripts/start-server.sh --project-dir /path/to/project
|
|
63
|
+
```
|
|
64
|
+
通过 Bash 工具调用时,设置 `run_in_background: true`。然后在下一轮读取 `$SCREEN_DIR/.server-info` 获取 URL 和端口。
|
|
65
|
+
|
|
66
|
+
**Codex:**
|
|
67
|
+
```bash
|
|
68
|
+
# Codex 会回收后台进程。脚本会自动检测 CODEX_CI 并
|
|
69
|
+
# 切换到前台模式。正常运行即可——不需要额外标志。
|
|
70
|
+
scripts/start-server.sh --project-dir /path/to/project
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Gemini CLI:**
|
|
74
|
+
```bash
|
|
75
|
+
# 使用 --foreground 并在 shell 工具调用上设置 is_background: true,
|
|
76
|
+
# 让进程在轮次之间存活
|
|
77
|
+
scripts/start-server.sh --project-dir /path/to/project --foreground
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**其他环境:** 服务器必须在会话轮次之间持续在后台运行。如果你的环境会回收分离的进程,使用 `--foreground` 并通过平台的后台执行机制启动命令。
|
|
81
|
+
|
|
82
|
+
如果浏览器无法访问该 URL(在远程/容器化环境中常见),绑定一个非回环主机:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
scripts/start-server.sh \
|
|
86
|
+
--project-dir /path/to/project \
|
|
87
|
+
--host 0.0.0.0 \
|
|
88
|
+
--url-host localhost
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
使用 `--url-host` 控制返回的 URL JSON 中显示的主机名。
|
|
92
|
+
|
|
93
|
+
## 工作循环
|
|
94
|
+
|
|
95
|
+
1. **检查服务器存活**,然后**将 HTML 写入** `screen_dir` 中的新文件:
|
|
96
|
+
- 每次写入前,检查 `$SCREEN_DIR/.server-info` 是否存在。如果不存在(或 `.server-stopped` 存在),服务器已关闭——在继续之前用 `start-server.sh` 重启。服务器在 30 分钟无活动后会自动退出。
|
|
97
|
+
- 使用语义化文件名:`platform.html`、`visual-style.html`、`layout.html`
|
|
98
|
+
- **绝不复用文件名** — 每个屏幕用一个新文件
|
|
99
|
+
- 使用 Write 工具 — **绝不使用 cat/heredoc**(会在终端产生噪音)
|
|
100
|
+
- 服务器自动提供最新的文件
|
|
101
|
+
|
|
102
|
+
2. **告诉用户预期内容并结束你的回合:**
|
|
103
|
+
- 每一步都提醒他们 URL(不仅仅是第一次)
|
|
104
|
+
- 简要文字说明屏幕上的内容(例如"展示了 3 个首页布局选项")
|
|
105
|
+
- 请他们在终端中回复:"看一下,告诉我你的想法。如果你愿意,可以点击选择一个选项。"
|
|
106
|
+
|
|
107
|
+
3. **在你的下一轮** — 用户在终端回复后:
|
|
108
|
+
- 如果存在 `$SCREEN_DIR/.events`,读取它——其中包含用户的浏览器交互(点击、选择),格式为 JSON 行
|
|
109
|
+
- 将终端文字和事件合并以获得完整信息
|
|
110
|
+
- 终端消息是主要反馈;`.events` 提供结构化的交互数据
|
|
111
|
+
|
|
112
|
+
4. **迭代或推进** — 如果反馈要求修改当前屏幕,写入新文件(例如 `layout-v2.html`)。只有当前步骤验证通过后才进入下一个问题。
|
|
113
|
+
|
|
114
|
+
5. **回到终端时卸载** — 当下一步不需要浏览器时(例如澄清问题、权衡讨论),推送一个等待屏幕以清除过时内容:
|
|
115
|
+
|
|
116
|
+
```html
|
|
117
|
+
<!-- 文件名:waiting.html(或 waiting-2.html 等)-->
|
|
118
|
+
<div style="display:flex;align-items:center;justify-content:center;min-height:60vh">
|
|
119
|
+
<p class="subtitle">在终端中继续...</p>
|
|
120
|
+
</div>
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
这样可以防止用户盯着一个已经解决的选择,而对话已经继续了。当下一个视觉问题出现时,照常推送新的内容文件。
|
|
124
|
+
|
|
125
|
+
6. 重复直到完成。
|
|
126
|
+
|
|
127
|
+
## 编写内容片段
|
|
128
|
+
|
|
129
|
+
只写放在页面内部的内容。服务器会自动用框架模板包裹它(头部、主题 CSS、选择指示器和所有交互基础设施)。
|
|
130
|
+
|
|
131
|
+
**最简示例:**
|
|
132
|
+
|
|
133
|
+
```html
|
|
134
|
+
<h2>哪种布局更好?</h2>
|
|
135
|
+
<p class="subtitle">考虑可读性和视觉层次</p>
|
|
136
|
+
|
|
137
|
+
<div class="options">
|
|
138
|
+
<div class="option" data-choice="a" onclick="toggleSelect(this)">
|
|
139
|
+
<div class="letter">A</div>
|
|
140
|
+
<div class="content">
|
|
141
|
+
<h3>单栏</h3>
|
|
142
|
+
<p>简洁、专注的阅读体验</p>
|
|
143
|
+
</div>
|
|
144
|
+
</div>
|
|
145
|
+
<div class="option" data-choice="b" onclick="toggleSelect(this)">
|
|
146
|
+
<div class="letter">B</div>
|
|
147
|
+
<div class="content">
|
|
148
|
+
<h3>双栏</h3>
|
|
149
|
+
<p>侧边栏导航加主内容区</p>
|
|
150
|
+
</div>
|
|
151
|
+
</div>
|
|
152
|
+
</div>
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
就这些。不需要 `<html>`,不需要 CSS,不需要 `<script>` 标签。服务器会提供这一切。
|
|
156
|
+
|
|
157
|
+
## 可用的 CSS 类
|
|
158
|
+
|
|
159
|
+
框架模板为你的内容提供以下 CSS 类:
|
|
160
|
+
|
|
161
|
+
### 选项(A/B/C 选择)
|
|
162
|
+
|
|
163
|
+
```html
|
|
164
|
+
<div class="options">
|
|
165
|
+
<div class="option" data-choice="a" onclick="toggleSelect(this)">
|
|
166
|
+
<div class="letter">A</div>
|
|
167
|
+
<div class="content">
|
|
168
|
+
<h3>标题</h3>
|
|
169
|
+
<p>描述</p>
|
|
170
|
+
</div>
|
|
171
|
+
</div>
|
|
172
|
+
</div>
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**多选:** 在容器上添加 `data-multiselect` 让用户选择多个选项。每次点击切换选中状态。指示栏显示数量。
|
|
176
|
+
|
|
177
|
+
```html
|
|
178
|
+
<div class="options" data-multiselect>
|
|
179
|
+
<!-- 相同的选项标记——用户可以选择/取消选择多个 -->
|
|
180
|
+
</div>
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### 卡片(视觉设计)
|
|
184
|
+
|
|
185
|
+
```html
|
|
186
|
+
<div class="cards">
|
|
187
|
+
<div class="card" data-choice="design1" onclick="toggleSelect(this)">
|
|
188
|
+
<div class="card-image"><!-- 原型内容 --></div>
|
|
189
|
+
<div class="card-body">
|
|
190
|
+
<h3>名称</h3>
|
|
191
|
+
<p>描述</p>
|
|
192
|
+
</div>
|
|
193
|
+
</div>
|
|
194
|
+
</div>
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### 原型容器
|
|
198
|
+
|
|
199
|
+
```html
|
|
200
|
+
<div class="mockup">
|
|
201
|
+
<div class="mockup-header">预览:仪表盘布局</div>
|
|
202
|
+
<div class="mockup-body"><!-- 你的原型 HTML --></div>
|
|
203
|
+
</div>
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### 分屏视图(并排)
|
|
207
|
+
|
|
208
|
+
```html
|
|
209
|
+
<div class="split">
|
|
210
|
+
<div class="mockup"><!-- 左侧 --></div>
|
|
211
|
+
<div class="mockup"><!-- 右侧 --></div>
|
|
212
|
+
</div>
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### 优缺点
|
|
216
|
+
|
|
217
|
+
```html
|
|
218
|
+
<div class="pros-cons">
|
|
219
|
+
<div class="pros"><h4>优点</h4><ul><li>好处</li></ul></div>
|
|
220
|
+
<div class="cons"><h4>缺点</h4><ul><li>不足</li></ul></div>
|
|
221
|
+
</div>
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### 模拟元素(线框图构建块)
|
|
225
|
+
|
|
226
|
+
```html
|
|
227
|
+
<div class="mock-nav">Logo | 首页 | 关于 | 联系我们</div>
|
|
228
|
+
<div style="display: flex;">
|
|
229
|
+
<div class="mock-sidebar">导航</div>
|
|
230
|
+
<div class="mock-content">主内容区域</div>
|
|
231
|
+
</div>
|
|
232
|
+
<button class="mock-button">操作按钮</button>
|
|
233
|
+
<input class="mock-input" placeholder="输入框">
|
|
234
|
+
<div class="placeholder">占位区域</div>
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### 排版和区块
|
|
238
|
+
|
|
239
|
+
- `h2` — 页面标题
|
|
240
|
+
- `h3` — 章节标题
|
|
241
|
+
- `.subtitle` — 标题下方的辅助文字
|
|
242
|
+
- `.section` — 带底部边距的内容块
|
|
243
|
+
- `.label` — 小号大写标签文字
|
|
244
|
+
|
|
245
|
+
## 浏览器事件格式
|
|
246
|
+
|
|
247
|
+
当用户在浏览器中点击选项时,交互记录会保存到 `$SCREEN_DIR/.events`(每行一个 JSON 对象)。推送新屏幕时文件会自动清空。
|
|
248
|
+
|
|
249
|
+
```jsonl
|
|
250
|
+
{"type":"click","choice":"a","text":"选项 A - 简单布局","timestamp":1706000101}
|
|
251
|
+
{"type":"click","choice":"c","text":"选项 C - 复杂网格","timestamp":1706000108}
|
|
252
|
+
{"type":"click","choice":"b","text":"选项 B - 混合方案","timestamp":1706000115}
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
完整的事件流展示了用户的探索路径——他们可能在确定之前点击了多个选项。最后一个 `choice` 事件通常是最终选择,但点击模式可以揭示犹豫或值得询问的偏好。
|
|
256
|
+
|
|
257
|
+
如果 `.events` 不存在,说明用户没有与浏览器交互——仅使用他们的终端文字。
|
|
258
|
+
|
|
259
|
+
## 设计技巧
|
|
260
|
+
|
|
261
|
+
- **保真度匹配问题** — 布局问题用线框图,细节打磨问题用精细设计
|
|
262
|
+
- **在每个页面上解释问题** — "哪种布局看起来更专业?"而不仅仅是"选一个"
|
|
263
|
+
- **推进前先迭代** — 如果反馈修改了当前屏幕,写入新版本
|
|
264
|
+
- 每个屏幕最多 **2-4 个选项**
|
|
265
|
+
- **必要时使用真实内容** — 对于摄影作品集,使用实际图片(Unsplash)。占位内容会掩盖设计问题。
|
|
266
|
+
- **保持原型简洁** — 专注于布局和结构,而非像素级精确的设计
|
|
267
|
+
|
|
268
|
+
## 文件命名
|
|
269
|
+
|
|
270
|
+
- 使用语义化名称:`platform.html`、`visual-style.html`、`layout.html`
|
|
271
|
+
- 绝不复用文件名——每个屏幕必须是新文件
|
|
272
|
+
- 迭代版本:添加版本后缀如 `layout-v2.html`、`layout-v3.html`
|
|
273
|
+
- 服务器按修改时间提供最新文件
|
|
274
|
+
|
|
275
|
+
## 清理
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
scripts/stop-server.sh $SCREEN_DIR
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
如果会话使用了 `--project-dir`,原型文件会持久化在 `.superpowers/brainstorm/` 中以供日后参考。只有 `/tmp` 会话会在停止时被删除。
|
|
282
|
+
|
|
283
|
+
## 参考
|
|
284
|
+
|
|
285
|
+
- 框架模板(CSS 参考):`scripts/frame-template.html`
|
|
286
|
+
- 辅助脚本(客户端):`scripts/helper.js`
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: "claude-code:core"
|
|
3
|
+
name: "core-engine"
|
|
4
|
+
description: "文件系统访问、Git 操作、命令执行。基础设施技能,不主动拦截用户消息。"
|
|
5
|
+
category: "core"
|
|
6
|
+
phase: "always"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Claude Code 运行时引擎
|
|
10
|
+
|
|
11
|
+
本技能提供 Claude Code 的核心运行时能力,包括文件系统访问、Git 操作和命令执行。
|
|
12
|
+
|
|
13
|
+
## 核心能力
|
|
14
|
+
|
|
15
|
+
### 文件系统操作
|
|
16
|
+
|
|
17
|
+
Claude Code 提供以下文件系统工具:
|
|
18
|
+
|
|
19
|
+
- **Read**: 读取文件内容,支持文本和图片文件
|
|
20
|
+
- **Write**: 写入文件内容(覆盖现有文件)
|
|
21
|
+
- **Edit**: 精确替换文件中的字符串
|
|
22
|
+
- **Bash**: 执行 shell 命令(包括文件操作命令如 `ls`、`find`、`mkdir` 等)
|
|
23
|
+
|
|
24
|
+
**最佳实践:**
|
|
25
|
+
|
|
26
|
+
1. **读取前不写入** - 使用 Write 工具前必须先用 Read 工具读取文件
|
|
27
|
+
2. **精确编辑** - 优先使用 Edit 工具而非 Write,因为它只发送差异
|
|
28
|
+
3. **绝对路径** - 始终使用绝对路径,避免相对路径导致的歧义
|
|
29
|
+
4. **目录检查** - 创建文件前先用 `ls` 确认父目录存在
|
|
30
|
+
|
|
31
|
+
### Git 操作
|
|
32
|
+
|
|
33
|
+
Claude Code 通过 Bash 工具执行 Git 命令,遵循严格的安全协议:
|
|
34
|
+
|
|
35
|
+
**Git 安全协议:**
|
|
36
|
+
|
|
37
|
+
1. **绝不更新 git 配置** - 不修改用户级别的 git 设置
|
|
38
|
+
2. **绝不执行破坏性命令** - 除非用户明确要求,否则不执行:
|
|
39
|
+
- `git push --force`
|
|
40
|
+
- `git reset --hard`
|
|
41
|
+
- `git checkout .`
|
|
42
|
+
- `git clean -f`
|
|
43
|
+
- `git branch -D`
|
|
44
|
+
3. **创建新提交而非修改** - 优先 `git commit` 而非 `git commit --amend`
|
|
45
|
+
4. **绝不跳过钩子** - 不使用 `--no-verify` 或 `--no-gpg-sign`
|
|
46
|
+
5. **绝不强制推送到主分支** - 警告用户如果请求推送到 main/master
|
|
47
|
+
|
|
48
|
+
**提交流程:**
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
# 1. 检查状态
|
|
52
|
+
git status
|
|
53
|
+
git diff
|
|
54
|
+
git log --oneline -5
|
|
55
|
+
|
|
56
|
+
# 2. 分析变更并草拟提交消息
|
|
57
|
+
|
|
58
|
+
# 3. 暂存文件(优先按名称添加,避免 git add -A)
|
|
59
|
+
git add file1.ts file2.ts
|
|
60
|
+
|
|
61
|
+
# 4. 创建提交
|
|
62
|
+
git commit -m "$(cat <<'EOF'
|
|
63
|
+
提交消息。
|
|
64
|
+
|
|
65
|
+
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
|
66
|
+
EOF
|
|
67
|
+
)"
|
|
68
|
+
|
|
69
|
+
# 5. 验证
|
|
70
|
+
git status
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### 命令执行
|
|
74
|
+
|
|
75
|
+
使用 Bash 工具执行命令时的注意事项:
|
|
76
|
+
|
|
77
|
+
**超时设置:**
|
|
78
|
+
- 默认超时:120 秒(2 分钟)
|
|
79
|
+
- 最大超时:600000 毫秒(10 分钟)
|
|
80
|
+
- 长时间运行的任务使用 `run_in_background` 参数
|
|
81
|
+
|
|
82
|
+
**并行执行:**
|
|
83
|
+
- 独立命令可以并行执行(多个 Bash 调用)
|
|
84
|
+
- 有依赖的命令使用 `&&` 链接
|
|
85
|
+
- 仅在不关心失败顺序时使用 `;`
|
|
86
|
+
|
|
87
|
+
**避免的命令:**
|
|
88
|
+
- 不要使用 `cat`、`head`、`tail`、`sed`、`awk`、`echo`(使用专用工具代替)
|
|
89
|
+
- 不要使用 `sleep` 循环重试失败的命令
|
|
90
|
+
- 不要不必要的 `sleep` 命令
|
|
91
|
+
|
|
92
|
+
**安全考虑:**
|
|
93
|
+
- 避免命令注入(使用参数化而非字符串拼接)
|
|
94
|
+
- 不要在提交中包含敏感文件(.env、credentials.json)
|
|
95
|
+
- 使用 `allowed_domains` 和 `blocked_domains` 过滤网络请求
|
|
96
|
+
|
|
97
|
+
## 工具映射
|
|
98
|
+
|
|
99
|
+
不同平台使用不同的工具名称。Claude Code 的标准工具:
|
|
100
|
+
|
|
101
|
+
| 工具 | 用途 |
|
|
102
|
+
|------|------|
|
|
103
|
+
| Read | 读取文件 |
|
|
104
|
+
| Write | 写入文件 |
|
|
105
|
+
| Edit | 编辑文件 |
|
|
106
|
+
| Bash | 执行命令 |
|
|
107
|
+
| WebFetch | 获取网页内容 |
|
|
108
|
+
| WebSearch | 网络搜索 |
|
|
109
|
+
|
|
110
|
+
非 Claude Code 平台请参考:
|
|
111
|
+
- `references/copilot-tools.md` (Copilot CLI)
|
|
112
|
+
- `references/hermes-tools.md` (Hermes Agent)
|
|
113
|
+
- `references/codex-tools.md` (Codex)
|
|
114
|
+
|
|
115
|
+
## 常见模式
|
|
116
|
+
|
|
117
|
+
### 探索代码库
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
# 查找文件
|
|
121
|
+
find . -name "*.ts" -type f
|
|
122
|
+
|
|
123
|
+
# 搜索内容
|
|
124
|
+
grep -r "function名" --include="*.ts"
|
|
125
|
+
|
|
126
|
+
# 查看目录结构
|
|
127
|
+
ls -la src/
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### 安装依赖
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
# 使用国内镜像(中国用户)
|
|
134
|
+
npm install --registry https://registry.npmmirror.com
|
|
135
|
+
|
|
136
|
+
# 或设置全局镜像
|
|
137
|
+
npm config set registry https://registry.npmmirror.com
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### 运行测试
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
# Node.js 项目
|
|
144
|
+
npm test
|
|
145
|
+
|
|
146
|
+
# 指定测试文件
|
|
147
|
+
npm test -- --testPathPattern="filename"
|
|
148
|
+
|
|
149
|
+
# 覆盖率报告
|
|
150
|
+
npm test -- --coverage
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## 红线
|
|
154
|
+
|
|
155
|
+
这些行为必须避免:
|
|
156
|
+
|
|
157
|
+
| 错误行为 | 正确做法 |
|
|
158
|
+
|---------|---------|
|
|
159
|
+
| 使用相对路径 | 始终使用绝对路径 |
|
|
160
|
+
| 跳过 Read 直接 Write | 先 Read 再 Write |
|
|
161
|
+
| 使用 git add -A | 按文件名精确添加 |
|
|
162
|
+
| 忽略命令超时 | 设置合理的超时时间 |
|
|
163
|
+
| 硬编码敏感信息 | 使用环境变量或配置文件 |
|
|
164
|
+
| 不检查就声称成功 | 运行验证命令确认结果 |
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# skill.yaml
|
|
2
|
+
id: "claude-code:core"
|
|
3
|
+
version: "2.0.0"
|
|
4
|
+
name: "core-engine"
|
|
5
|
+
description: "文件系统访问、Git 操作、命令执行"
|
|
6
|
+
category: "core"
|
|
7
|
+
phase: "always"
|
|
8
|
+
source: "claude-code"
|
|
9
|
+
trigger_conditions: []
|
|
10
|
+
dependencies: []
|
|
11
|
+
inputs: []
|
|
12
|
+
outputs: []
|
|
13
|
+
size: "small"
|
|
14
|
+
cache_ttl: "30d"
|