@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,218 @@
|
|
|
1
|
+
# SDS v2.0 技能注册表
|
|
2
|
+
# 包含所有按需加载技能的元数据
|
|
3
|
+
|
|
4
|
+
skills:
|
|
5
|
+
# 测试场景包
|
|
6
|
+
visual-verification-gate:
|
|
7
|
+
id: "visual-verification-gate"
|
|
8
|
+
version: "2.0.0"
|
|
9
|
+
source: "superpowers"
|
|
10
|
+
trigger_conditions:
|
|
11
|
+
- type: file_content
|
|
12
|
+
contains_any: ["screenshot", "visual", "UI", "截图", "界面"]
|
|
13
|
+
dependencies: []
|
|
14
|
+
size: "medium"
|
|
15
|
+
cache_ttl: "7d"
|
|
16
|
+
|
|
17
|
+
accessibility-audit:
|
|
18
|
+
id: "accessibility-audit"
|
|
19
|
+
version: "2.0.0"
|
|
20
|
+
source: "superpowers"
|
|
21
|
+
trigger_conditions:
|
|
22
|
+
- type: file_content
|
|
23
|
+
contains_any: ["a11y", "accessibility", "aria", "无障碍"]
|
|
24
|
+
dependencies: []
|
|
25
|
+
size: "medium"
|
|
26
|
+
cache_ttl: "7d"
|
|
27
|
+
|
|
28
|
+
# 性能场景包
|
|
29
|
+
performance-budget:
|
|
30
|
+
id: "performance-budget"
|
|
31
|
+
version: "2.0.0"
|
|
32
|
+
source: "superpowers"
|
|
33
|
+
trigger_conditions:
|
|
34
|
+
- type: file_content
|
|
35
|
+
contains_any: ["performance", "lighthouse", "性能", "LCP", "FCP"]
|
|
36
|
+
dependencies: []
|
|
37
|
+
size: "medium"
|
|
38
|
+
cache_ttl: "7d"
|
|
39
|
+
|
|
40
|
+
# 安全场景包
|
|
41
|
+
security-hardening:
|
|
42
|
+
id: "security-hardening"
|
|
43
|
+
version: "2.0.0"
|
|
44
|
+
source: "superpowers"
|
|
45
|
+
trigger_conditions:
|
|
46
|
+
- type: risk_marker
|
|
47
|
+
markers: ["auth", "token", "password", "认证", "密码"]
|
|
48
|
+
dependencies: []
|
|
49
|
+
size: "medium"
|
|
50
|
+
cache_ttl: "7d"
|
|
51
|
+
|
|
52
|
+
# 数据库场景包
|
|
53
|
+
database-migration:
|
|
54
|
+
id: "database-migration"
|
|
55
|
+
version: "2.0.0"
|
|
56
|
+
source: "superpowers"
|
|
57
|
+
trigger_conditions:
|
|
58
|
+
- type: file_content
|
|
59
|
+
contains_any: ["migration", "schema", "数据库", "迁移"]
|
|
60
|
+
dependencies: []
|
|
61
|
+
size: "medium"
|
|
62
|
+
cache_ttl: "7d"
|
|
63
|
+
|
|
64
|
+
# API 场景包
|
|
65
|
+
api-design:
|
|
66
|
+
id: "api-design"
|
|
67
|
+
version: "2.0.0"
|
|
68
|
+
source: "superpowers"
|
|
69
|
+
trigger_conditions:
|
|
70
|
+
- type: file_content
|
|
71
|
+
contains_any: ["endpoint", "REST", "GraphQL", "API", "接口"]
|
|
72
|
+
dependencies: []
|
|
73
|
+
size: "medium"
|
|
74
|
+
cache_ttl: "7d"
|
|
75
|
+
|
|
76
|
+
# 前端场景包
|
|
77
|
+
component-design:
|
|
78
|
+
id: "component-design"
|
|
79
|
+
version: "2.0.0"
|
|
80
|
+
source: "superpowers"
|
|
81
|
+
trigger_conditions:
|
|
82
|
+
- type: file_content
|
|
83
|
+
contains_any: ["component", "React", "Vue", "组件"]
|
|
84
|
+
dependencies: []
|
|
85
|
+
size: "medium"
|
|
86
|
+
cache_ttl: "7d"
|
|
87
|
+
|
|
88
|
+
# DevOps 场景包
|
|
89
|
+
ci-cd-pipeline:
|
|
90
|
+
id: "ci-cd-pipeline"
|
|
91
|
+
version: "2.0.0"
|
|
92
|
+
source: "superpowers"
|
|
93
|
+
trigger_conditions:
|
|
94
|
+
- type: file_content
|
|
95
|
+
contains_any: ["CI", "CD", "pipeline", "deploy", "部署"]
|
|
96
|
+
dependencies: []
|
|
97
|
+
size: "medium"
|
|
98
|
+
cache_ttl: "7d"
|
|
99
|
+
|
|
100
|
+
# 文档场景包
|
|
101
|
+
documentation-generator:
|
|
102
|
+
id: "documentation-generator"
|
|
103
|
+
version: "2.0.0"
|
|
104
|
+
source: "superpowers"
|
|
105
|
+
trigger_conditions:
|
|
106
|
+
- type: file_content
|
|
107
|
+
contains_any: ["README", "docs", "documentation", "文档"]
|
|
108
|
+
dependencies: []
|
|
109
|
+
size: "medium"
|
|
110
|
+
cache_ttl: "7d"
|
|
111
|
+
|
|
112
|
+
# 调试场景包
|
|
113
|
+
error-diagnosis:
|
|
114
|
+
id: "error-diagnosis"
|
|
115
|
+
version: "2.0.0"
|
|
116
|
+
source: "superpowers"
|
|
117
|
+
trigger_conditions:
|
|
118
|
+
- type: file_content
|
|
119
|
+
contains_any: ["error", "exception", "bug", "错误", "异常"]
|
|
120
|
+
dependencies: []
|
|
121
|
+
size: "medium"
|
|
122
|
+
cache_ttl: "7d"
|
|
123
|
+
|
|
124
|
+
# 重构场景包
|
|
125
|
+
refactoring-assistant:
|
|
126
|
+
id: "refactoring-assistant"
|
|
127
|
+
version: "2.0.0"
|
|
128
|
+
source: "superpowers"
|
|
129
|
+
trigger_conditions:
|
|
130
|
+
- type: file_content
|
|
131
|
+
contains_any: ["refactor", "重构", "technical debt", "技术债"]
|
|
132
|
+
dependencies: []
|
|
133
|
+
size: "medium"
|
|
134
|
+
cache_ttl: "7d"
|
|
135
|
+
|
|
136
|
+
# 代码审查场景包
|
|
137
|
+
code-review-automation:
|
|
138
|
+
id: "code-review-automation"
|
|
139
|
+
version: "2.0.0"
|
|
140
|
+
source: "superpowers"
|
|
141
|
+
trigger_conditions:
|
|
142
|
+
- type: file_content
|
|
143
|
+
contains_any: ["review", "PR", "pull request", "审查"]
|
|
144
|
+
dependencies: []
|
|
145
|
+
size: "medium"
|
|
146
|
+
cache_ttl: "7d"
|
|
147
|
+
|
|
148
|
+
# 测试生成场景包
|
|
149
|
+
test-generator:
|
|
150
|
+
id: "test-generator"
|
|
151
|
+
version: "2.0.0"
|
|
152
|
+
source: "superpowers"
|
|
153
|
+
trigger_conditions:
|
|
154
|
+
- type: file_content
|
|
155
|
+
contains_any: ["test", "spec", "测试", "单元测试"]
|
|
156
|
+
dependencies: []
|
|
157
|
+
size: "medium"
|
|
158
|
+
cache_ttl: "7d"
|
|
159
|
+
|
|
160
|
+
# Git 场景包
|
|
161
|
+
git-workflow-assistant:
|
|
162
|
+
id: "git-workflow-assistant"
|
|
163
|
+
version: "2.0.0"
|
|
164
|
+
source: "superpowers"
|
|
165
|
+
trigger_conditions:
|
|
166
|
+
- type: file_content
|
|
167
|
+
contains_any: ["merge", "rebase", "branch", "分支", "合并"]
|
|
168
|
+
dependencies: []
|
|
169
|
+
size: "medium"
|
|
170
|
+
cache_ttl: "7d"
|
|
171
|
+
|
|
172
|
+
# 依赖管理场景包
|
|
173
|
+
dependency-audit:
|
|
174
|
+
id: "dependency-audit"
|
|
175
|
+
version: "2.0.0"
|
|
176
|
+
source: "superpowers"
|
|
177
|
+
trigger_conditions:
|
|
178
|
+
- type: file_content
|
|
179
|
+
contains_any: ["dependency", "package", "依赖", "npm", "pip"]
|
|
180
|
+
dependencies: []
|
|
181
|
+
size: "medium"
|
|
182
|
+
cache_ttl: "7d"
|
|
183
|
+
|
|
184
|
+
# 国际化场景包
|
|
185
|
+
i18n-support:
|
|
186
|
+
id: "i18n-support"
|
|
187
|
+
version: "2.0.0"
|
|
188
|
+
source: "superpowers"
|
|
189
|
+
trigger_conditions:
|
|
190
|
+
- type: file_content
|
|
191
|
+
contains_any: ["i18n", "locale", "translation", "国际化", "翻译"]
|
|
192
|
+
dependencies: []
|
|
193
|
+
size: "medium"
|
|
194
|
+
cache_ttl: "7d"
|
|
195
|
+
|
|
196
|
+
# 配置管理场景包
|
|
197
|
+
config-management:
|
|
198
|
+
id: "config-management"
|
|
199
|
+
version: "2.0.0"
|
|
200
|
+
source: "superpowers"
|
|
201
|
+
trigger_conditions:
|
|
202
|
+
- type: file_content
|
|
203
|
+
contains_any: ["config", "env", "environment", "配置", "环境变量"]
|
|
204
|
+
dependencies: []
|
|
205
|
+
size: "medium"
|
|
206
|
+
cache_ttl: "7d"
|
|
207
|
+
|
|
208
|
+
# 日志场景包
|
|
209
|
+
logging-observability:
|
|
210
|
+
id: "logging-observability"
|
|
211
|
+
version: "2.0.0"
|
|
212
|
+
source: "superpowers"
|
|
213
|
+
trigger_conditions:
|
|
214
|
+
- type: file_content
|
|
215
|
+
contains_any: ["log", "trace", "monitor", "日志", "监控"]
|
|
216
|
+
dependencies: []
|
|
217
|
+
size: "medium"
|
|
218
|
+
cache_ttl: "7d"
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: brainstorming
|
|
3
|
+
description: "在任何创造性工作之前必须使用此技能——创建功能、构建组件、添加功能或修改行为。在实现之前先探索用户意图、需求和设计。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Brainstorming: 将想法转化为设计
|
|
7
|
+
|
|
8
|
+
通过自然的协作对话,帮助将想法转化为完整的设计和规格说明。
|
|
9
|
+
|
|
10
|
+
## 触发条件(同时满足才触发)
|
|
11
|
+
|
|
12
|
+
**触发**:
|
|
13
|
+
- 用户明确要求实现一个新功能、创建新组件、添加新特性
|
|
14
|
+
- 用户说"我要实现/做一个/添加..."等开发需求
|
|
15
|
+
- 之前阶段的输出(opsx:explore/existing-code-caveman)已完成,准备进行需求分析
|
|
16
|
+
|
|
17
|
+
**不触发**:
|
|
18
|
+
- ❌ 问候、闲聊、概念问答
|
|
19
|
+
- ❌ 技术咨询、调试问题、代码审查请求
|
|
20
|
+
- ❌ 用户只是问项目情况或阅读代码
|
|
21
|
+
|
|
22
|
+
首先了解当前项目的上下文,然后逐一提问来完善想法。一旦你理解了要构建的内容,就展示设计方案并获得用户批准。
|
|
23
|
+
|
|
24
|
+
<HARD-GATE>
|
|
25
|
+
在你展示设计方案并获得用户批准之前,不要调用任何实现技能、编写任何代码、搭建任何项目或采取任何实现行动。这适用于所有项目,无论看起来多简单。
|
|
26
|
+
</HARD-GATE>
|
|
27
|
+
|
|
28
|
+
## 反模式:"这个太简单了,不需要设计"
|
|
29
|
+
|
|
30
|
+
每个项目都要经过这个流程。一个待办事项列表、一个单函数工具、一个配置变更——全都需要。"简单"的项目恰恰是未经检验的假设造成最多浪费的地方。设计可以很简短(对于真正简单的项目几句话就够了),但你必须展示出来并获得批准。
|
|
31
|
+
|
|
32
|
+
## 检查清单
|
|
33
|
+
|
|
34
|
+
你必须为以下每个条目创建任务,并按顺序完成:
|
|
35
|
+
|
|
36
|
+
1. **探索项目上下文** — 检查文件、文档、最近的 commit
|
|
37
|
+
2. **提供视觉伴侣**(如果主题涉及视觉问题)— 这是一条独立的消息,不要与澄清问题合并。参见下方的"视觉伴侣"部分。
|
|
38
|
+
3. **提出澄清问题** — 每次一个,了解目的/约束/成功标准
|
|
39
|
+
4. **提出 2-3 种方案** — 附带权衡分析和你的推荐
|
|
40
|
+
5. **展示设计** — 按复杂度分节展示,每节展示后获得用户批准
|
|
41
|
+
6. **编写设计文档** — 保存到 `openspec/changes/<name>/brainstorming.md`(V2 OpenSpec 工作流)
|
|
42
|
+
7. **spec_review — 调度子代理审查规格** — 使用 `spec-document-reviewer-prompt.md` 模板调度审查子代理
|
|
43
|
+
8. **用户审查书面规格** — 在继续之前请用户审查规格文件
|
|
44
|
+
9. **生成 4 份工件** — 用户批准设计后,直接执行 opsx:propose 逻辑生成 proposal.md / design.md / specs.md / tasks.md 到 `openspec/changes/<name>/`
|
|
45
|
+
10. **过渡到实现** — 调用 writing-plans 技能创建实现计划
|
|
46
|
+
|
|
47
|
+
## 流程图
|
|
48
|
+
|
|
49
|
+
```dot
|
|
50
|
+
digraph brainstorming {
|
|
51
|
+
"探索项目上下文" [shape=box];
|
|
52
|
+
"有视觉相关问题?" [shape=diamond];
|
|
53
|
+
"提供视觉伴侣\n(独立消息,不含其他内容)" [shape=box];
|
|
54
|
+
"提出澄清问题" [shape=box];
|
|
55
|
+
"提出 2-3 种方案" [shape=box];
|
|
56
|
+
"分节展示设计" [shape=box];
|
|
57
|
+
"用户批准设计?" [shape=diamond];
|
|
58
|
+
"编写设计文档" [shape=box];
|
|
59
|
+
"spec_review\n(调度子代理审查)" [shape=box];
|
|
60
|
+
"spec_review 通过?" [shape=diamond];
|
|
61
|
+
"用户审查规格?" [shape=diamond];
|
|
62
|
+
"调用 writing-plans 技能" [shape=doublecircle];
|
|
63
|
+
|
|
64
|
+
"探索项目上下文" -> "有视觉相关问题?";
|
|
65
|
+
"有视觉相关问题?" -> "提供视觉伴侣\n(独立消息,不含其他内容)" [label="是"];
|
|
66
|
+
"有视觉相关问题?" -> "提出澄清问题" [label="否"];
|
|
67
|
+
"提供视觉伴侣\n(独立消息,不含其他内容)" -> "提出澄清问题";
|
|
68
|
+
"提出澄清问题" -> "提出 2-3 种方案";
|
|
69
|
+
"提出 2-3 种方案" -> "分节展示设计";
|
|
70
|
+
"分节展示设计" -> "用户批准设计?";
|
|
71
|
+
"用户批准设计?" -> "分节展示设计" [label="否,修改"];
|
|
72
|
+
"用户批准设计?" -> "编写设计文档" [label="是"];
|
|
73
|
+
"编写设计文档" -> "spec_review\n(调度子代理审查)";
|
|
74
|
+
"spec_review\n(调度子代理审查)" -> "spec_review 通过?";
|
|
75
|
+
"spec_review 通过?" -> "编写设计文档" [label="发现问题,修复"];
|
|
76
|
+
"spec_review 通过?" -> "用户审查规格?" [label="通过"];
|
|
77
|
+
"用户审查规格?" -> "编写设计文档" [label="要求修改"];
|
|
78
|
+
"用户审查规格?" -> "调用 opsx:propose 生成 4 份工件" [label="批准"];
|
|
79
|
+
"调用 opsx:propose 生成 4 份工件" -> "调用 writing-plans 技能";
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**终止状态是调用 opsx:propose 生成 4 份工件,然后调用 writing-plans。** 不要跳过 opsx:propose 直接到 writing-plans。
|
|
84
|
+
|
|
85
|
+
## 流程详述
|
|
86
|
+
|
|
87
|
+
**理解想法:**
|
|
88
|
+
|
|
89
|
+
- 首先查看当前项目状态(文件、文档、最近的 commit)
|
|
90
|
+
- 在提出详细问题之前,先评估范围:如果需求描述了多个独立子系统(例如"构建一个包含聊天、文件存储、计费和分析的平台"),立即指出这一点。不要花时间用问题去细化一个需要先拆分的项目。
|
|
91
|
+
- 如果项目规模过大,单个规格说明无法覆盖,帮助用户分解为子项目:有哪些独立的部分,它们之间有什么关系,应该按什么顺序构建?然后通过正常的设计流程进行第一个子项目的头脑风暴。每个子项目都有自己的规格 → 计划 → 实现周期。
|
|
92
|
+
- 对于范围适当的项目,每次提一个问题来完善想法
|
|
93
|
+
- 尽量使用选择题,开放式问题也可以
|
|
94
|
+
- 每条消息只提一个问题——如果一个主题需要更多探索,拆分成多个问题
|
|
95
|
+
- 重点理解:目的、约束、成功标准
|
|
96
|
+
|
|
97
|
+
**探索方案:**
|
|
98
|
+
|
|
99
|
+
- 提出 2-3 种不同的方案及其权衡
|
|
100
|
+
- 以对话的方式展示选项,附上你的推荐和理由
|
|
101
|
+
- 先展示你推荐的方案并解释原因
|
|
102
|
+
|
|
103
|
+
**展示设计:**
|
|
104
|
+
|
|
105
|
+
- 一旦你认为理解了要构建的内容,就展示设计
|
|
106
|
+
- 每个部分的篇幅与其复杂度匹配:简单的几句话,复杂的最多 200-300 字
|
|
107
|
+
- 每个部分展示后询问是否正确
|
|
108
|
+
- 涵盖:架构、组件、数据流、错误处理、测试
|
|
109
|
+
- 随时准备回头澄清不明确的地方
|
|
110
|
+
|
|
111
|
+
**面向隔离和清晰的设计:**
|
|
112
|
+
|
|
113
|
+
- 将系统拆分为更小的单元,每个单元有一个明确的职责,通过定义良好的接口通信,可以独立理解和测试
|
|
114
|
+
- 对于每个单元,你应该能回答:它做什么,如何使用,它依赖什么?
|
|
115
|
+
- 别人能否不看内部实现就理解一个单元的功能?你能否在不影响调用者的情况下修改内部实现?如果不能,边界需要调整。
|
|
116
|
+
- 更小、边界清晰的单元也更便于你工作——你对能一次放入上下文的代码推理得更好,文件越专注你的编辑越可靠。当文件变大时,这通常意味着它承担了过多职责。
|
|
117
|
+
|
|
118
|
+
**在现有代码库中工作:**
|
|
119
|
+
|
|
120
|
+
- 在提出更改之前先探索现有结构。遵循现有模式。
|
|
121
|
+
- 如果现有代码存在影响当前工作的问题(例如文件过大、边界不清、职责纠缠),在设计中包含有针对性的改进——就像一个优秀的开发者在工作中改进经手的代码一样。
|
|
122
|
+
- 不要提议无关的重构。专注于服务当前目标的事情。
|
|
123
|
+
|
|
124
|
+
## 设计之后
|
|
125
|
+
|
|
126
|
+
**文档:**
|
|
127
|
+
|
|
128
|
+
- **规格必须包含「目标文件结构」章节**:列出每个新增/修改文件的路径、职责和预估行数。单文件不超过 300 行、单函数不超过 50 行。如果某个文件预估超出,必须在 spec 阶段就拆分方案。
|
|
129
|
+
- 将验证通过的设计(规格说明)写入 `openspec/changes/<name>/brainstorming.md`
|
|
130
|
+
- (V2 OpenSpec 工作流,用户对规格位置的偏好优先于此默认值)
|
|
131
|
+
|
|
132
|
+
**spec_review — 调度子代理审查:**
|
|
133
|
+
编写规格文档后,使用 `spec-document-reviewer-prompt.md` 模板调度一个子代理来审查规格:
|
|
134
|
+
|
|
135
|
+
1. 将规格文档路径传入 `spec-document-reviewer-prompt.md` 中的 `[SPEC_FILE_PATH]` 占位符
|
|
136
|
+
2. 调度审查子代理(使用 spawn_agent)
|
|
137
|
+
3. 如果审查通过(状态:通过)→ 继续用户审查关卡
|
|
138
|
+
4. 如果审查发现问题(状态:发现问题)→ 根据问题修复规格文档,然后重新运行 spec_review
|
|
139
|
+
|
|
140
|
+
**用户审查关卡:**
|
|
141
|
+
spec_review 通过后,请用户在继续之前审查书面规格:
|
|
142
|
+
|
|
143
|
+
> "规格已编写。请审查一下,如果在我们开始编写实现计划之前你想做任何修改,请告诉我。"
|
|
144
|
+
|
|
145
|
+
等待用户回复。如果他们要求修改,做出修改并重新运行 spec_review。只有在用户批准后才继续。
|
|
146
|
+
|
|
147
|
+
**生成 4 份工件:**
|
|
148
|
+
|
|
149
|
+
- 调用 `opsx:propose` 技能生成 proposal.md、design.md、specs.md、tasks.md 四份标准化工件
|
|
150
|
+
- 这些工件定义变更的范围、技术方案、验收标准和执行任务
|
|
151
|
+
|
|
152
|
+
**实现:**
|
|
153
|
+
|
|
154
|
+
- 调用 writing-plans 技能创建详细的实现计划
|
|
155
|
+
- 执行顺序:brainstorming → opsx:propose(4 份工件)→ writing-plans → opsx:apply
|
|
156
|
+
|
|
157
|
+
## 核心原则
|
|
158
|
+
|
|
159
|
+
- **每次一个问题** — 不要同时抛出多个问题
|
|
160
|
+
- **优先选择题** — 在可能的情况下比开放式问题更容易回答
|
|
161
|
+
- **严格遵循 YAGNI** — 从所有设计中移除不必要的功能
|
|
162
|
+
- **探索替代方案** — 在做决定之前始终提出 2-3 种方案
|
|
163
|
+
- **增量验证** — 展示设计,获得批准后再继续
|
|
164
|
+
- **保持灵活** — 有不明确的地方就回头澄清
|
|
165
|
+
|
|
166
|
+
## 视觉伴侣
|
|
167
|
+
|
|
168
|
+
一个基于浏览器的伴侣工具,用于在头脑风暴过程中展示原型、图表和视觉选项。它是一个工具——不是一种模式。接受伴侣意味着它可用于适合视觉呈现的问题;并不意味着每个问题都要通过浏览器。
|
|
169
|
+
|
|
170
|
+
**提供伴侣:** 当你预计后续问题会涉及视觉内容(原型、布局、图表)时,提供一次以获得同意:
|
|
171
|
+
> "我们接下来讨论的一些内容,如果能在浏览器中展示给你看可能会更直观。我可以在讨论过程中为你制作原型、图表、对比图和其他视觉材料。这个功能还比较新,可能会消耗较多 token。要试试吗?(需要打开一个本地 URL)"
|
|
172
|
+
|
|
173
|
+
**此提议必须是一条独立的消息。** 不要将它与澄清问题、上下文摘要或任何其他内容合并。消息中应该只包含上述提议,没有其他内容。等待用户回复后再继续。如果他们拒绝,继续纯文本的头脑风暴。
|
|
174
|
+
|
|
175
|
+
**逐问题决策:** 即使用户接受了,也要对每个问题单独决定是使用浏览器还是终端。判断标准:**用户看到它是否比读到它更容易理解?**
|
|
176
|
+
|
|
177
|
+
- **使用浏览器** 展示本身就是视觉的内容——原型、线框图、布局对比、架构图、并排视觉设计
|
|
178
|
+
- **使用终端** 展示文本内容——需求问题、概念选择、权衡列表、A/B/C/D 文字选项、范围决策
|
|
179
|
+
|
|
180
|
+
关于 UI 主题的问题不一定是视觉问题。"在这个上下文中个性化是什么意思?"是一个概念问题——使用终端。"哪种向导布局更好?"是一个视觉问题——使用浏览器。
|
|
181
|
+
|
|
182
|
+
如果他们同意使用伴侣,在继续之前阅读详细指南:`skills/brainstorming/visual-companion.md`
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## 图谱查询接口
|
|
187
|
+
|
|
188
|
+
在需求分析阶段,可以使用图谱查询接口来更好地理解现有代码库,从而做出更准确的设计决策。
|
|
189
|
+
|
|
190
|
+
### 使用场景
|
|
191
|
+
|
|
192
|
+
1. **探索现有功能**:了解项目中已有哪些功能模块
|
|
193
|
+
2. **分析依赖关系**:查看模块间的依赖关系,避免设计冲突
|
|
194
|
+
3. **识别影响范围**:评估新功能对现有代码的影响
|
|
195
|
+
4. **发现技术债务**:识别需要重构的代码区域
|
|
196
|
+
|
|
197
|
+
### 常用查询
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
# 查询项目概览
|
|
201
|
+
sds graph status
|
|
202
|
+
|
|
203
|
+
# 查询所有模块
|
|
204
|
+
sds graph query --sql "SELECT DISTINCT SUBSTR(path, 1, INSTR(path, '/') - 1) as module FROM files WHERE path LIKE '%/%'"
|
|
205
|
+
|
|
206
|
+
# 查询入口文件
|
|
207
|
+
sds graph query --template entry-points
|
|
208
|
+
|
|
209
|
+
# 查询特定模块的文件
|
|
210
|
+
sds graph query --sql "SELECT path, lang, lines FROM files WHERE path LIKE 'src/auth/%'"
|
|
211
|
+
|
|
212
|
+
# 查询函数调用关系
|
|
213
|
+
sds graph query --sql "
|
|
214
|
+
SELECT
|
|
215
|
+
f1.path as caller_file,
|
|
216
|
+
s1.name as caller_function,
|
|
217
|
+
f2.path as callee_file,
|
|
218
|
+
s2.name as callee_function
|
|
219
|
+
FROM call_graph cg
|
|
220
|
+
JOIN files f1 ON cg.caller_file_id = f1.id
|
|
221
|
+
JOIN symbols s1 ON cg.caller_symbol_id = s1.id
|
|
222
|
+
JOIN files f2 ON cg.callee_file_id = f2.id
|
|
223
|
+
JOIN symbols s2 ON cg.callee_symbol_id = s2.id
|
|
224
|
+
WHERE cg.relation_type = 'call'
|
|
225
|
+
AND f1.path LIKE 'src/auth/%'
|
|
226
|
+
LIMIT 20
|
|
227
|
+
"
|
|
228
|
+
|
|
229
|
+
# 查询循环依赖
|
|
230
|
+
sds graph query --template circular-deps
|
|
231
|
+
|
|
232
|
+
# 查询死代码
|
|
233
|
+
sds graph query --template dead-code
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### 最佳实践
|
|
237
|
+
|
|
238
|
+
1. **在需求分析前执行**:先运行 `sds graph status` 了解项目概况
|
|
239
|
+
2. **针对相关模块查询**:只查询与新功能相关的模块,避免信息过载
|
|
240
|
+
3. **结合语义图谱**:如果已运行 `sds graph enhance`,可以获取更丰富的语义信息
|
|
241
|
+
4. **记录关键发现**:将重要的架构约束记录到设计文档中
|
|
242
|
+
|
|
243
|
+
### 示例流程
|
|
244
|
+
|
|
245
|
+
```
|
|
246
|
+
1. 用户: "我想添加一个用户认证功能"
|
|
247
|
+
|
|
248
|
+
2. AI:
|
|
249
|
+
- 运行 `sds graph status` 了解项目概况
|
|
250
|
+
- 运行 `sds graph query --template entry-points` 查看入口文件
|
|
251
|
+
- 运行 `sds graph query --sql "SELECT * FROM files WHERE path LIKE '%auth%'"` 查看现有认证相关代码
|
|
252
|
+
- 运行 `sds graph query --template circular-deps` 检查是否有循环依赖
|
|
253
|
+
|
|
254
|
+
3. 基于查询结果,AI 可以:
|
|
255
|
+
- 了解项目的技术栈和架构模式
|
|
256
|
+
- 识别现有的认证相关代码
|
|
257
|
+
- 评估新功能对现有代码的影响
|
|
258
|
+
- 提出更准确的设计方案
|
|
259
|
+
```
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<title>Superpowers Brainstorming</title>
|
|
6
|
+
<style>
|
|
7
|
+
/*
|
|
8
|
+
* BRAINSTORM COMPANION FRAME TEMPLATE
|
|
9
|
+
*
|
|
10
|
+
* This template provides a consistent frame with:
|
|
11
|
+
* - OS-aware light/dark theming
|
|
12
|
+
* - Fixed header and selection indicator bar
|
|
13
|
+
* - Scrollable main content area
|
|
14
|
+
* - CSS helpers for common UI patterns
|
|
15
|
+
*
|
|
16
|
+
* Content is injected via placeholder comment in #claude-content.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
* { box-sizing: border-box; margin: 0; padding: 0; }
|
|
20
|
+
html, body { height: 100%; overflow: hidden; }
|
|
21
|
+
|
|
22
|
+
/* ===== THEME VARIABLES ===== */
|
|
23
|
+
:root {
|
|
24
|
+
--bg-primary: #f5f5f7;
|
|
25
|
+
--bg-secondary: #ffffff;
|
|
26
|
+
--bg-tertiary: #e5e5e7;
|
|
27
|
+
--border: #d1d1d6;
|
|
28
|
+
--text-primary: #1d1d1f;
|
|
29
|
+
--text-secondary: #86868b;
|
|
30
|
+
--text-tertiary: #aeaeb2;
|
|
31
|
+
--accent: #0071e3;
|
|
32
|
+
--accent-hover: #0077ed;
|
|
33
|
+
--success: #34c759;
|
|
34
|
+
--warning: #ff9f0a;
|
|
35
|
+
--error: #ff3b30;
|
|
36
|
+
--selected-bg: #e8f4fd;
|
|
37
|
+
--selected-border: #0071e3;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@media (prefers-color-scheme: dark) {
|
|
41
|
+
:root {
|
|
42
|
+
--bg-primary: #1d1d1f;
|
|
43
|
+
--bg-secondary: #2d2d2f;
|
|
44
|
+
--bg-tertiary: #3d3d3f;
|
|
45
|
+
--border: #424245;
|
|
46
|
+
--text-primary: #f5f5f7;
|
|
47
|
+
--text-secondary: #86868b;
|
|
48
|
+
--text-tertiary: #636366;
|
|
49
|
+
--accent: #0a84ff;
|
|
50
|
+
--accent-hover: #409cff;
|
|
51
|
+
--selected-bg: rgba(10, 132, 255, 0.15);
|
|
52
|
+
--selected-border: #0a84ff;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
body {
|
|
57
|
+
font-family: system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
|
|
58
|
+
background: var(--bg-primary);
|
|
59
|
+
color: var(--text-primary);
|
|
60
|
+
display: flex;
|
|
61
|
+
flex-direction: column;
|
|
62
|
+
line-height: 1.5;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/* ===== FRAME STRUCTURE ===== */
|
|
66
|
+
.header {
|
|
67
|
+
background: var(--bg-secondary);
|
|
68
|
+
padding: 0.5rem 1.5rem;
|
|
69
|
+
display: flex;
|
|
70
|
+
justify-content: space-between;
|
|
71
|
+
align-items: center;
|
|
72
|
+
border-bottom: 1px solid var(--border);
|
|
73
|
+
flex-shrink: 0;
|
|
74
|
+
}
|
|
75
|
+
.header h1 { font-size: 0.85rem; font-weight: 500; color: var(--text-secondary); }
|
|
76
|
+
.header .status { font-size: 0.7rem; color: var(--success); display: flex; align-items: center; gap: 0.4rem; }
|
|
77
|
+
.header .status::before { content: ''; width: 6px; height: 6px; background: var(--success); border-radius: 50%; }
|
|
78
|
+
|
|
79
|
+
.main { flex: 1; overflow-y: auto; }
|
|
80
|
+
#claude-content { padding: 2rem; min-height: 100%; }
|
|
81
|
+
|
|
82
|
+
.indicator-bar {
|
|
83
|
+
background: var(--bg-secondary);
|
|
84
|
+
border-top: 1px solid var(--border);
|
|
85
|
+
padding: 0.5rem 1.5rem;
|
|
86
|
+
flex-shrink: 0;
|
|
87
|
+
text-align: center;
|
|
88
|
+
}
|
|
89
|
+
.indicator-bar span {
|
|
90
|
+
font-size: 0.75rem;
|
|
91
|
+
color: var(--text-secondary);
|
|
92
|
+
}
|
|
93
|
+
.indicator-bar .selected-text {
|
|
94
|
+
color: var(--accent);
|
|
95
|
+
font-weight: 500;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/* ===== TYPOGRAPHY ===== */
|
|
99
|
+
h2 { font-size: 1.5rem; font-weight: 600; margin-bottom: 0.5rem; }
|
|
100
|
+
h3 { font-size: 1.1rem; font-weight: 600; margin-bottom: 0.25rem; }
|
|
101
|
+
.subtitle { color: var(--text-secondary); margin-bottom: 1.5rem; }
|
|
102
|
+
.section { margin-bottom: 2rem; }
|
|
103
|
+
.label { font-size: 0.7rem; color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 0.5rem; }
|
|
104
|
+
|
|
105
|
+
/* ===== OPTIONS (for A/B/C choices) ===== */
|
|
106
|
+
.options { display: flex; flex-direction: column; gap: 0.75rem; }
|
|
107
|
+
.option {
|
|
108
|
+
background: var(--bg-secondary);
|
|
109
|
+
border: 2px solid var(--border);
|
|
110
|
+
border-radius: 12px;
|
|
111
|
+
padding: 1rem 1.25rem;
|
|
112
|
+
cursor: pointer;
|
|
113
|
+
transition: all 0.15s ease;
|
|
114
|
+
display: flex;
|
|
115
|
+
align-items: flex-start;
|
|
116
|
+
gap: 1rem;
|
|
117
|
+
}
|
|
118
|
+
.option:hover { border-color: var(--accent); }
|
|
119
|
+
.option.selected { background: var(--selected-bg); border-color: var(--selected-border); }
|
|
120
|
+
.option .letter {
|
|
121
|
+
background: var(--bg-tertiary);
|
|
122
|
+
color: var(--text-secondary);
|
|
123
|
+
width: 1.75rem; height: 1.75rem;
|
|
124
|
+
border-radius: 6px;
|
|
125
|
+
display: flex; align-items: center; justify-content: center;
|
|
126
|
+
font-weight: 600; font-size: 0.85rem; flex-shrink: 0;
|
|
127
|
+
}
|
|
128
|
+
.option.selected .letter { background: var(--accent); color: white; }
|
|
129
|
+
.option .content { flex: 1; }
|
|
130
|
+
.option .content h3 { font-size: 0.95rem; margin-bottom: 0.15rem; }
|
|
131
|
+
.option .content p { color: var(--text-secondary); font-size: 0.85rem; margin: 0; }
|
|
132
|
+
|
|
133
|
+
/* ===== CARDS (for showing designs/mockups) ===== */
|
|
134
|
+
.cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 1rem; }
|
|
135
|
+
.card {
|
|
136
|
+
background: var(--bg-secondary);
|
|
137
|
+
border: 1px solid var(--border);
|
|
138
|
+
border-radius: 12px;
|
|
139
|
+
overflow: hidden;
|
|
140
|
+
cursor: pointer;
|
|
141
|
+
transition: all 0.15s ease;
|
|
142
|
+
}
|
|
143
|
+
.card:hover { border-color: var(--accent); transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0,0,0,0.1); }
|
|
144
|
+
.card.selected { border-color: var(--selected-border); border-width: 2px; }
|
|
145
|
+
.card-image { background: var(--bg-tertiary); aspect-ratio: 16/10; display: flex; align-items: center; justify-content: center; }
|
|
146
|
+
.card-body { padding: 1rem; }
|
|
147
|
+
.card-body h3 { margin-bottom: 0.25rem; }
|
|
148
|
+
.card-body p { color: var(--text-secondary); font-size: 0.85rem; }
|
|
149
|
+
|
|
150
|
+
/* ===== MOCKUP CONTAINER ===== */
|
|
151
|
+
.mockup {
|
|
152
|
+
background: var(--bg-secondary);
|
|
153
|
+
border: 1px solid var(--border);
|
|
154
|
+
border-radius: 12px;
|
|
155
|
+
overflow: hidden;
|
|
156
|
+
margin-bottom: 1.5rem;
|
|
157
|
+
}
|
|
158
|
+
.mockup-header {
|
|
159
|
+
background: var(--bg-tertiary);
|
|
160
|
+
padding: 0.5rem 1rem;
|
|
161
|
+
font-size: 0.75rem;
|
|
162
|
+
color: var(--text-secondary);
|
|
163
|
+
border-bottom: 1px solid var(--border);
|
|
164
|
+
}
|
|
165
|
+
.mockup-body { padding: 1.5rem; }
|
|
166
|
+
|
|
167
|
+
/* ===== SPLIT VIEW (side-by-side comparison) ===== */
|
|
168
|
+
.split { display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem; }
|
|
169
|
+
@media (max-width: 700px) { .split { grid-template-columns: 1fr; } }
|
|
170
|
+
|
|
171
|
+
/* ===== PROS/CONS ===== */
|
|
172
|
+
.pros-cons { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin: 1rem 0; }
|
|
173
|
+
.pros, .cons { background: var(--bg-secondary); border-radius: 8px; padding: 1rem; }
|
|
174
|
+
.pros h4 { color: var(--success); font-size: 0.85rem; margin-bottom: 0.5rem; }
|
|
175
|
+
.cons h4 { color: var(--error); font-size: 0.85rem; margin-bottom: 0.5rem; }
|
|
176
|
+
.pros ul, .cons ul { margin-left: 1.25rem; font-size: 0.85rem; color: var(--text-secondary); }
|
|
177
|
+
.pros li, .cons li { margin-bottom: 0.25rem; }
|
|
178
|
+
|
|
179
|
+
/* ===== PLACEHOLDER (for mockup areas) ===== */
|
|
180
|
+
.placeholder {
|
|
181
|
+
background: var(--bg-tertiary);
|
|
182
|
+
border: 2px dashed var(--border);
|
|
183
|
+
border-radius: 8px;
|
|
184
|
+
padding: 2rem;
|
|
185
|
+
text-align: center;
|
|
186
|
+
color: var(--text-tertiary);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/* ===== INLINE MOCKUP ELEMENTS ===== */
|
|
190
|
+
.mock-nav { background: var(--accent); color: white; padding: 0.75rem 1rem; display: flex; gap: 1.5rem; font-size: 0.9rem; }
|
|
191
|
+
.mock-sidebar { background: var(--bg-tertiary); padding: 1rem; min-width: 180px; }
|
|
192
|
+
.mock-content { padding: 1.5rem; flex: 1; }
|
|
193
|
+
.mock-button { background: var(--accent); color: white; border: none; padding: 0.5rem 1rem; border-radius: 6px; font-size: 0.85rem; }
|
|
194
|
+
.mock-input { background: var(--bg-primary); border: 1px solid var(--border); border-radius: 6px; padding: 0.5rem; width: 100%; }
|
|
195
|
+
</style>
|
|
196
|
+
</head>
|
|
197
|
+
<body>
|
|
198
|
+
<div class="header">
|
|
199
|
+
<h1><a href="https://github.com/obra/superpowers" style="color: inherit; text-decoration: none;">Superpowers Brainstorming</a></h1>
|
|
200
|
+
<div class="status">Connected</div>
|
|
201
|
+
</div>
|
|
202
|
+
|
|
203
|
+
<div class="main">
|
|
204
|
+
<div id="claude-content">
|
|
205
|
+
<!-- CONTENT -->
|
|
206
|
+
</div>
|
|
207
|
+
</div>
|
|
208
|
+
|
|
209
|
+
<div class="indicator-bar">
|
|
210
|
+
<span id="indicator-text">Click an option above, then return to the terminal</span>
|
|
211
|
+
</div>
|
|
212
|
+
|
|
213
|
+
</body>
|
|
214
|
+
</html>
|