@roki-h5/create-roki-app 0.1.3 → 0.1.5
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/package.json +5 -1
- package/templates/h5/.agents/skills/brainstorming/SKILL.md +159 -0
- package/templates/h5/.agents/skills/brainstorming/scripts/frame-template.html +213 -0
- package/templates/h5/.agents/skills/brainstorming/scripts/helper.js +167 -0
- package/templates/h5/.agents/skills/brainstorming/scripts/server.cjs +723 -0
- package/templates/h5/.agents/skills/brainstorming/scripts/start-server.sh +209 -0
- package/templates/h5/.agents/skills/brainstorming/scripts/stop-server.sh +120 -0
- package/templates/h5/.agents/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
- package/templates/h5/.agents/skills/brainstorming/visual-companion.md +298 -0
- package/templates/h5/.agents/skills/systematic-debugging/CREATION-LOG.md +119 -0
- package/templates/h5/.agents/skills/systematic-debugging/SKILL.md +296 -0
- package/templates/h5/.agents/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/templates/h5/.agents/skills/systematic-debugging/condition-based-waiting.md +115 -0
- package/templates/h5/.agents/skills/systematic-debugging/defense-in-depth.md +122 -0
- package/templates/h5/.agents/skills/systematic-debugging/find-polluter.sh +63 -0
- package/templates/h5/.agents/skills/systematic-debugging/root-cause-tracing.md +169 -0
- package/templates/h5/.agents/skills/systematic-debugging/test-academic.md +14 -0
- package/templates/h5/.agents/skills/systematic-debugging/test-pressure-1.md +58 -0
- package/templates/h5/.agents/skills/systematic-debugging/test-pressure-2.md +68 -0
- package/templates/h5/.agents/skills/systematic-debugging/test-pressure-3.md +69 -0
- package/templates/h5/.agents/skills/test-driven-development/SKILL.md +371 -0
- package/templates/h5/.agents/skills/test-driven-development/testing-anti-patterns.md +299 -0
- package/templates/h5/.agents/skills/writing-plans/SKILL.md +174 -0
- package/templates/h5/.agents/skills/writing-plans/plan-document-reviewer-prompt.md +49 -0
- package/templates/h5/docs/agent-skills.md +136 -0
- package/templates/h5/index.html +2 -0
- package/templates/h5/public/favicon.ico +0 -0
- package/templates/h5/public/favicon.png +0 -0
- package/templates/h5/scripts/version.js +1 -1
- package/templates/h5/skills-lock.json +29 -0
- package/templates/h5/src/assets/images/home/logo-poweroff.png +0 -0
- package/templates/h5/src/assets/images/home/logo-working.png +0 -0
- package/templates/h5/src/assets/images/logo.png +0 -0
- package/templates/h5/src/assets/styles/atomic/flex.css +60 -0
- package/templates/h5/src/assets/styles/atomic/index.css +4 -0
- package/templates/h5/src/assets/styles/atomic/layout.css +64 -0
- package/templates/h5/src/assets/styles/atomic/spacing.css +97 -0
- package/templates/h5/src/assets/styles/atomic/text.css +133 -0
- package/templates/h5/src/assets/styles/main.css +26 -1
- package/templates/h5/src/assets/styles/variables.css +19 -0
- package/templates/h5/src/components/WelcomeInfo.vue +2 -5
- package/templates/h5/src/main.ts +2 -2
- package/templates/h5/src/stores/app.ts +110 -0
- package/templates/h5/src/stores/index.ts +5 -108
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: writing-plans
|
|
3
|
+
description: Use when you have a spec or requirements for a multi-step task, before touching code
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Writing Plans
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Write comprehensive implementation plans assuming the engineer has zero context for our codebase and questionable taste. Document everything they need to know: which files to touch for each task, code, testing, docs they might need to check, how to test it. Give them the whole plan as bite-sized tasks. DRY. YAGNI. TDD. Frequent commits.
|
|
11
|
+
|
|
12
|
+
Assume they are a skilled developer, but know almost nothing about our toolset or problem domain. Assume they don't know good test design very well.
|
|
13
|
+
|
|
14
|
+
**Announce at start:** "I'm using the writing-plans skill to create the implementation plan."
|
|
15
|
+
|
|
16
|
+
**Context:** If working in an isolated worktree, it should have been created via the `superpowers:using-git-worktrees` skill at execution time.
|
|
17
|
+
|
|
18
|
+
**Save plans to:** `docs/superpowers/plans/YYYY-MM-DD-<feature-name>.md`
|
|
19
|
+
- (User preferences for plan location override this default)
|
|
20
|
+
|
|
21
|
+
## Scope Check
|
|
22
|
+
|
|
23
|
+
If the spec covers multiple independent subsystems, it should have been broken into sub-project specs during brainstorming. If it wasn't, suggest breaking this into separate plans — one per subsystem. Each plan should produce working, testable software on its own.
|
|
24
|
+
|
|
25
|
+
## File Structure
|
|
26
|
+
|
|
27
|
+
Before defining tasks, map out which files will be created or modified and what each one is responsible for. This is where decomposition decisions get locked in.
|
|
28
|
+
|
|
29
|
+
- Design units with clear boundaries and well-defined interfaces. Each file should have one clear responsibility.
|
|
30
|
+
- You reason best about code you can hold in context at once, and your edits are more reliable when files are focused. Prefer smaller, focused files over large ones that do too much.
|
|
31
|
+
- Files that change together should live together. Split by responsibility, not by technical layer.
|
|
32
|
+
- In existing codebases, follow established patterns. If the codebase uses large files, don't unilaterally restructure - but if a file you're modifying has grown unwieldy, including a split in the plan is reasonable.
|
|
33
|
+
|
|
34
|
+
This structure informs the task decomposition. Each task should produce self-contained changes that make sense independently.
|
|
35
|
+
|
|
36
|
+
## Task Right-Sizing
|
|
37
|
+
|
|
38
|
+
A task is the smallest unit that carries its own test cycle and is worth a
|
|
39
|
+
fresh reviewer's gate. When drawing task boundaries: fold setup,
|
|
40
|
+
configuration, scaffolding, and documentation steps into the task whose
|
|
41
|
+
deliverable needs them; split only where a reviewer could meaningfully
|
|
42
|
+
reject one task while approving its neighbor. Each task ends with an
|
|
43
|
+
independently testable deliverable.
|
|
44
|
+
|
|
45
|
+
## Bite-Sized Task Granularity
|
|
46
|
+
|
|
47
|
+
**Each step is one action (2-5 minutes):**
|
|
48
|
+
- "Write the failing test" - step
|
|
49
|
+
- "Run it to make sure it fails" - step
|
|
50
|
+
- "Implement the minimal code to make the test pass" - step
|
|
51
|
+
- "Run the tests and make sure they pass" - step
|
|
52
|
+
- "Commit" - step
|
|
53
|
+
|
|
54
|
+
## Plan Document Header
|
|
55
|
+
|
|
56
|
+
**Every plan MUST start with this header:**
|
|
57
|
+
|
|
58
|
+
```markdown
|
|
59
|
+
# [Feature Name] Implementation Plan
|
|
60
|
+
|
|
61
|
+
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
|
62
|
+
|
|
63
|
+
**Goal:** [One sentence describing what this builds]
|
|
64
|
+
|
|
65
|
+
**Architecture:** [2-3 sentences about approach]
|
|
66
|
+
|
|
67
|
+
**Tech Stack:** [Key technologies/libraries]
|
|
68
|
+
|
|
69
|
+
## Global Constraints
|
|
70
|
+
|
|
71
|
+
[The spec's project-wide requirements — version floors, dependency limits,
|
|
72
|
+
naming and copy rules, platform requirements — one line each, with exact
|
|
73
|
+
values copied verbatim from the spec. Every task's requirements implicitly
|
|
74
|
+
include this section.]
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Task Structure
|
|
80
|
+
|
|
81
|
+
````markdown
|
|
82
|
+
### Task N: [Component Name]
|
|
83
|
+
|
|
84
|
+
**Files:**
|
|
85
|
+
- Create: `exact/path/to/file.py`
|
|
86
|
+
- Modify: `exact/path/to/existing.py:123-145`
|
|
87
|
+
- Test: `tests/exact/path/to/test.py`
|
|
88
|
+
|
|
89
|
+
**Interfaces:**
|
|
90
|
+
- Consumes: [what this task uses from earlier tasks — exact signatures]
|
|
91
|
+
- Produces: [what later tasks rely on — exact function names, parameter
|
|
92
|
+
and return types. A task's implementer sees only their own task; this
|
|
93
|
+
block is how they learn the names and types neighboring tasks use.]
|
|
94
|
+
|
|
95
|
+
- [ ] **Step 1: Write the failing test**
|
|
96
|
+
|
|
97
|
+
```python
|
|
98
|
+
def test_specific_behavior():
|
|
99
|
+
result = function(input)
|
|
100
|
+
assert result == expected
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
- [ ] **Step 2: Run test to verify it fails**
|
|
104
|
+
|
|
105
|
+
Run: `pytest tests/path/test.py::test_name -v`
|
|
106
|
+
Expected: FAIL with "function not defined"
|
|
107
|
+
|
|
108
|
+
- [ ] **Step 3: Write minimal implementation**
|
|
109
|
+
|
|
110
|
+
```python
|
|
111
|
+
def function(input):
|
|
112
|
+
return expected
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
- [ ] **Step 4: Run test to verify it passes**
|
|
116
|
+
|
|
117
|
+
Run: `pytest tests/path/test.py::test_name -v`
|
|
118
|
+
Expected: PASS
|
|
119
|
+
|
|
120
|
+
- [ ] **Step 5: Commit**
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
git add tests/path/test.py src/path/file.py
|
|
124
|
+
git commit -m "feat: add specific feature"
|
|
125
|
+
```
|
|
126
|
+
````
|
|
127
|
+
|
|
128
|
+
## No Placeholders
|
|
129
|
+
|
|
130
|
+
Every step must contain the actual content an engineer needs. These are **plan failures** — never write them:
|
|
131
|
+
- "TBD", "TODO", "implement later", "fill in details"
|
|
132
|
+
- "Add appropriate error handling" / "add validation" / "handle edge cases"
|
|
133
|
+
- "Write tests for the above" (without actual test code)
|
|
134
|
+
- "Similar to Task N" (repeat the code — the engineer may be reading tasks out of order)
|
|
135
|
+
- Steps that describe what to do without showing how (code blocks required for code steps)
|
|
136
|
+
- References to types, functions, or methods not defined in any task
|
|
137
|
+
|
|
138
|
+
## Remember
|
|
139
|
+
- Exact file paths always
|
|
140
|
+
- Complete code in every step — if a step changes code, show the code
|
|
141
|
+
- Exact commands with expected output
|
|
142
|
+
- DRY, YAGNI, TDD, frequent commits
|
|
143
|
+
|
|
144
|
+
## Self-Review
|
|
145
|
+
|
|
146
|
+
After writing the complete plan, look at the spec with fresh eyes and check the plan against it. This is a checklist you run yourself — not a subagent dispatch.
|
|
147
|
+
|
|
148
|
+
**1. Spec coverage:** Skim each section/requirement in the spec. Can you point to a task that implements it? List any gaps.
|
|
149
|
+
|
|
150
|
+
**2. Placeholder scan:** Search your plan for red flags — any of the patterns from the "No Placeholders" section above. Fix them.
|
|
151
|
+
|
|
152
|
+
**3. Type consistency:** Do the types, method signatures, and property names you used in later tasks match what you defined in earlier tasks? A function called `clearLayers()` in Task 3 but `clearFullLayers()` in Task 7 is a bug.
|
|
153
|
+
|
|
154
|
+
If you find issues, fix them inline. No need to re-review — just fix and move on. If you find a spec requirement with no task, add the task.
|
|
155
|
+
|
|
156
|
+
## Execution Handoff
|
|
157
|
+
|
|
158
|
+
After saving the plan, offer execution choice:
|
|
159
|
+
|
|
160
|
+
**"Plan complete and saved to `docs/superpowers/plans/<filename>.md`. Two execution options:**
|
|
161
|
+
|
|
162
|
+
**1. Subagent-Driven (recommended)** - I dispatch a fresh subagent per task, review between tasks, fast iteration
|
|
163
|
+
|
|
164
|
+
**2. Inline Execution** - Execute tasks in this session using executing-plans, batch execution with checkpoints
|
|
165
|
+
|
|
166
|
+
**Which approach?"**
|
|
167
|
+
|
|
168
|
+
**If Subagent-Driven chosen:**
|
|
169
|
+
- **REQUIRED SUB-SKILL:** Use superpowers:subagent-driven-development
|
|
170
|
+
- Fresh subagent per task + two-stage review
|
|
171
|
+
|
|
172
|
+
**If Inline Execution chosen:**
|
|
173
|
+
- **REQUIRED SUB-SKILL:** Use superpowers:executing-plans
|
|
174
|
+
- Batch execution with checkpoints for review
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Plan Document Reviewer Prompt Template
|
|
2
|
+
|
|
3
|
+
Use this template when dispatching a plan document reviewer subagent.
|
|
4
|
+
|
|
5
|
+
**Purpose:** Verify the plan is complete, matches the spec, and has proper task decomposition.
|
|
6
|
+
|
|
7
|
+
**Dispatch after:** The complete plan is written.
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
Subagent (general-purpose):
|
|
11
|
+
description: "Review plan document"
|
|
12
|
+
prompt: |
|
|
13
|
+
You are a plan document reviewer. Verify this plan is complete and ready for implementation.
|
|
14
|
+
|
|
15
|
+
**Plan to review:** [PLAN_FILE_PATH]
|
|
16
|
+
**Spec for reference:** [SPEC_FILE_PATH]
|
|
17
|
+
|
|
18
|
+
## What to Check
|
|
19
|
+
|
|
20
|
+
| Category | What to Look For |
|
|
21
|
+
|----------|------------------|
|
|
22
|
+
| Completeness | TODOs, placeholders, incomplete tasks, missing steps |
|
|
23
|
+
| Spec Alignment | Plan covers spec requirements, no major scope creep |
|
|
24
|
+
| Task Decomposition | Tasks have clear boundaries, steps are actionable |
|
|
25
|
+
| Buildability | Could an engineer follow this plan without getting stuck? |
|
|
26
|
+
|
|
27
|
+
## Calibration
|
|
28
|
+
|
|
29
|
+
**Only flag issues that would cause real problems during implementation.**
|
|
30
|
+
An implementer building the wrong thing or getting stuck is an issue.
|
|
31
|
+
Minor wording, stylistic preferences, and "nice to have" suggestions are not.
|
|
32
|
+
|
|
33
|
+
Approve unless there are serious gaps — missing requirements from the spec,
|
|
34
|
+
contradictory steps, placeholder content, or tasks so vague they can't be acted on.
|
|
35
|
+
|
|
36
|
+
## Output Format
|
|
37
|
+
|
|
38
|
+
## Plan Review
|
|
39
|
+
|
|
40
|
+
**Status:** Approved | Issues Found
|
|
41
|
+
|
|
42
|
+
**Issues (if any):**
|
|
43
|
+
- [Task X, Step Y]: [specific issue] - [why it matters for implementation]
|
|
44
|
+
|
|
45
|
+
**Recommendations (advisory, do not block approval):**
|
|
46
|
+
- [suggestions for improvement]
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**Reviewer returns:** Status, Issues (if any), Recommendations
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# Agent Skills 使用说明
|
|
2
|
+
|
|
3
|
+
本脚手架预置了来自 [obra/superpowers](https://github.com/obra/superpowers) 的 4 个 Cursor Agent Skills,位于:
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
.agents/skills/
|
|
7
|
+
├── brainstorming/
|
|
8
|
+
├── systematic-debugging/
|
|
9
|
+
├── test-driven-development/
|
|
10
|
+
└── writing-plans/
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
`skills-lock.json` 记录安装来源与版本哈希,便于团队用 `npx skills experimental_install` 恢复或更新。
|
|
14
|
+
|
|
15
|
+
## Skills 不会每次对话都执行
|
|
16
|
+
|
|
17
|
+
开启新对话时,Agent **不会**把 4 个 skill 全文跑一遍,只会看到一份 **技能目录**(名称 + `description` 摘要)。
|
|
18
|
+
|
|
19
|
+
只有当任务与某个 skill 的 `description` 匹配,或你 **主动点名**(`@brainstorming`、在对话里说「按 TDD 做」等)时,Agent 才会读取对应 `SKILL.md` 并按其中流程执行。
|
|
20
|
+
|
|
21
|
+
## 推荐工作流
|
|
22
|
+
|
|
23
|
+
典型功能开发顺序:
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
brainstorming → writing-plans → test-driven-development
|
|
27
|
+
↑
|
|
28
|
+
systematic-debugging(遇 bug / 测试失败时插入)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
| 顺序 | Skill | 作用 |
|
|
32
|
+
|------|-------|------|
|
|
33
|
+
| 1 | `brainstorming` | 动手写代码前,澄清需求、对比方案、产出设计并获你确认 |
|
|
34
|
+
| 2 | `writing-plans` | 设计通过后,拆成可执行的多步实现计划 |
|
|
35
|
+
| 3 | `test-driven-development` | 按计划实现时,先写测试再写实现 |
|
|
36
|
+
| — | `systematic-debugging` | 出现 bug、测试失败、异常行为时,先根因分析再改代码 |
|
|
37
|
+
|
|
38
|
+
## 各 Skill 何时会被 Agent 调用
|
|
39
|
+
|
|
40
|
+
### 1. brainstorming
|
|
41
|
+
|
|
42
|
+
**自动触发场景**(Agent 根据 description 判断):
|
|
43
|
+
|
|
44
|
+
- 新建功能、页面、组件
|
|
45
|
+
- 修改现有行为或交互
|
|
46
|
+
- 需求不清晰、有多种实现路径
|
|
47
|
+
- 任何「创造性」开发任务
|
|
48
|
+
|
|
49
|
+
**核心约束**:在呈现设计并获得你批准之前,**不得**直接写实现代码(skill 内 HARD-GATE)。
|
|
50
|
+
|
|
51
|
+
**你可主动说**:
|
|
52
|
+
|
|
53
|
+
- 「先 brainstorm 一下登录页方案」
|
|
54
|
+
- `@brainstorming 帮我设计设备列表页`
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
### 2. writing-plans
|
|
59
|
+
|
|
60
|
+
**自动触发场景**:
|
|
61
|
+
|
|
62
|
+
- 已有需求说明或设计文档
|
|
63
|
+
- 多文件、多步骤的中大型任务
|
|
64
|
+
- brainstorming 结束、准备开工前
|
|
65
|
+
|
|
66
|
+
**产出**:分步骤的实现计划(改哪些文件、如何验证、提交粒度等)。
|
|
67
|
+
|
|
68
|
+
**你可主动说**:
|
|
69
|
+
|
|
70
|
+
- 「根据刚才的设计写实现计划」
|
|
71
|
+
- `@writing-plans`
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
### 3. test-driven-development
|
|
76
|
+
|
|
77
|
+
**自动触发场景**:
|
|
78
|
+
|
|
79
|
+
- 开始实现某个功能或 bugfix
|
|
80
|
+
- 对话中提到 TDD、先写测试
|
|
81
|
+
- writing-plans 进入编码阶段
|
|
82
|
+
|
|
83
|
+
**核心约束**:先写失败测试 → 写最少实现让测试通过 → 重构。
|
|
84
|
+
|
|
85
|
+
**你可主动说**:
|
|
86
|
+
|
|
87
|
+
- 「用 TDD 实现这个 API 封装」
|
|
88
|
+
- `@test-driven-development`
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
### 4. systematic-debugging
|
|
93
|
+
|
|
94
|
+
**自动触发场景**:
|
|
95
|
+
|
|
96
|
+
- 运行报错、测试失败
|
|
97
|
+
- 线上/本地行为与预期不符
|
|
98
|
+
- 准备「试一把修复」之前
|
|
99
|
+
|
|
100
|
+
**核心约束**:先定位根因、复现路径,再提出修复;避免无依据地改代码。
|
|
101
|
+
|
|
102
|
+
**你可主动说**:
|
|
103
|
+
|
|
104
|
+
- 「系统排查一下 welcome 接口 401」
|
|
105
|
+
- `@systematic-debugging`
|
|
106
|
+
|
|
107
|
+
## 如何手动指定 Skill
|
|
108
|
+
|
|
109
|
+
| 方式 | 示例 |
|
|
110
|
+
|------|------|
|
|
111
|
+
| `@` 引用 | 在 Cursor 输入 `@brainstorming` |
|
|
112
|
+
| 自然语言 | 「按 superpowers 的 brainstorming 流程来」 |
|
|
113
|
+
| 明确阶段 | 「先不要写代码,走 brainstorming」 |
|
|
114
|
+
|
|
115
|
+
## 安装与更新(维护者)
|
|
116
|
+
|
|
117
|
+
在**已生成项目**或**本模板目录**中:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
# 安装单个 skill
|
|
121
|
+
npx skills add https://github.com/obra/superpowers --skill brainstorming --agent cursor -y --copy
|
|
122
|
+
|
|
123
|
+
# 从 lock 恢复
|
|
124
|
+
npx skills experimental_install
|
|
125
|
+
|
|
126
|
+
# 查看已安装
|
|
127
|
+
npx skills ls
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
脚手架生成项目时会复制 `.agents/skills/` 与 `skills-lock.json`,团队成员打开项目即可使用,无需每人重新安装。
|
|
131
|
+
|
|
132
|
+
## 注意事项
|
|
133
|
+
|
|
134
|
+
1. **不是每个小改动都要走全套**:改 typo、调样式等可直接说明;复杂功能建议走 brainstorming → plans → TDD。
|
|
135
|
+
2. **Skills 会占用上下文**:被选中时才会加载完整 `SKILL.md`;目录摘要常驻,但开销很小。
|
|
136
|
+
3. **来源与许可**:Skills 来自第三方仓库 [obra/superpowers](https://github.com/obra/superpowers),升级前请阅读其变更说明。
|
package/templates/h5/index.html
CHANGED
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
<meta name="mobile-web-app-capable" content="yes" />
|
|
11
11
|
<meta name="format-detection" content="telephone=no" />
|
|
12
12
|
<meta name="apple-touch-fullscreen" content="yes" />
|
|
13
|
+
<link rel="icon" type="image/png" href="/favicon.png" />
|
|
14
|
+
<link rel="icon" href="/favicon.ico" sizes="any" />
|
|
13
15
|
<title>%VITE_APP_TITLE%</title>
|
|
14
16
|
</head>
|
|
15
17
|
<body>
|
|
Binary file
|
|
Binary file
|
|
@@ -5,7 +5,7 @@ import { fileURLToPath } from 'node:url'
|
|
|
5
5
|
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
|
6
6
|
|
|
7
7
|
const packagePath = path.resolve(__dirname, '../package.json')
|
|
8
|
-
const pkg = JSON.parse(fs.readFileSync(packagePath, 'utf8'))
|
|
8
|
+
const pkg = JSON.parse(fs.readFileSync(packagePath, 'utf8'))
|
|
9
9
|
|
|
10
10
|
const [major, minor, patch] = pkg.version.split('.').map(Number)
|
|
11
11
|
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"skills": {
|
|
4
|
+
"brainstorming": {
|
|
5
|
+
"source": "obra/superpowers",
|
|
6
|
+
"sourceType": "github",
|
|
7
|
+
"skillPath": "skills/brainstorming/SKILL.md",
|
|
8
|
+
"computedHash": "26a8eb33d548f0c4ead9e7bc13a90c3853398d30345c651245a61a12b869f130"
|
|
9
|
+
},
|
|
10
|
+
"systematic-debugging": {
|
|
11
|
+
"source": "obra/superpowers",
|
|
12
|
+
"sourceType": "github",
|
|
13
|
+
"skillPath": "skills/systematic-debugging/SKILL.md",
|
|
14
|
+
"computedHash": "792a368e074981d7e3138edb439e138489b2ac247cd1e5739fab52af680fb17b"
|
|
15
|
+
},
|
|
16
|
+
"test-driven-development": {
|
|
17
|
+
"source": "obra/superpowers",
|
|
18
|
+
"sourceType": "github",
|
|
19
|
+
"skillPath": "skills/test-driven-development/SKILL.md",
|
|
20
|
+
"computedHash": "eee144aea35d783296d178017e9fe843c6d16cc8b240e106f5e50910f6caf329"
|
|
21
|
+
},
|
|
22
|
+
"writing-plans": {
|
|
23
|
+
"source": "obra/superpowers",
|
|
24
|
+
"sourceType": "github",
|
|
25
|
+
"skillPath": "skills/writing-plans/SKILL.md",
|
|
26
|
+
"computedHash": "b73b59d43c34c3fc225bfae419c458bb216af80df25fc0c545dfa7fd2a161722"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
.flex {
|
|
2
|
+
display: flex;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.inline-flex {
|
|
6
|
+
display: inline-flex;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.flex-col {
|
|
10
|
+
flex-direction: column;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.flex-row {
|
|
14
|
+
flex-direction: row;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.flex-wrap {
|
|
18
|
+
flex-wrap: wrap;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.flex-1 {
|
|
22
|
+
flex: 1 1 0%;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.flex-shrink-0 {
|
|
26
|
+
flex-shrink: 0;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.flex-center {
|
|
30
|
+
align-items: center;
|
|
31
|
+
justify-content: center;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.items-center {
|
|
35
|
+
align-items: center;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.items-start {
|
|
39
|
+
align-items: flex-start;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.items-end {
|
|
43
|
+
align-items: flex-end;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.justify-center {
|
|
47
|
+
justify-content: center;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.justify-between {
|
|
51
|
+
justify-content: space-between;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.justify-end {
|
|
55
|
+
justify-content: flex-end;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.justify-start {
|
|
59
|
+
justify-content: flex-start;
|
|
60
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
.block {
|
|
2
|
+
display: block;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.inline-block {
|
|
6
|
+
display: inline-block;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.hidden {
|
|
10
|
+
display: none !important;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.w-full {
|
|
14
|
+
width: 100%;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.h-full {
|
|
18
|
+
height: 100%;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.min-h-full {
|
|
22
|
+
min-height: 100%;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.relative {
|
|
26
|
+
position: relative;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.absolute {
|
|
30
|
+
position: absolute;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.fixed {
|
|
34
|
+
position: fixed;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.overflow-hidden {
|
|
38
|
+
overflow: hidden;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.overflow-auto {
|
|
42
|
+
overflow: auto;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.rounded-8 {
|
|
46
|
+
border-radius: 8px;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.rounded-12 {
|
|
50
|
+
border-radius: 12px;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.border {
|
|
54
|
+
border: 1px solid var(--color-border);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.border-t {
|
|
58
|
+
border-top: 1px solid var(--color-divider);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.safe-bottom {
|
|
62
|
+
padding-bottom: constant(safe-area-inset-bottom);
|
|
63
|
+
padding-bottom: env(safe-area-inset-bottom);
|
|
64
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
.m-0 {
|
|
2
|
+
margin: 0;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.m-8 {
|
|
6
|
+
margin: 8px;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.m-12 {
|
|
10
|
+
margin: 12px;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.m-16 {
|
|
14
|
+
margin: 16px;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.m-24 {
|
|
18
|
+
margin: 24px;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.m-t-8 {
|
|
22
|
+
margin-top: 8px;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.m-t-12 {
|
|
26
|
+
margin-top: 12px;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.m-t-16 {
|
|
30
|
+
margin-top: 16px;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.m-t-24 {
|
|
34
|
+
margin-top: 24px;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.m-b-8 {
|
|
38
|
+
margin-bottom: 8px;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.m-b-12 {
|
|
42
|
+
margin-bottom: 12px;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.m-b-16 {
|
|
46
|
+
margin-bottom: 16px;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.m-b-24 {
|
|
50
|
+
margin-bottom: 24px;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.m-l-8 {
|
|
54
|
+
margin-left: 8px;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.m-l-12 {
|
|
58
|
+
margin-left: 12px;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.m-r-8 {
|
|
62
|
+
margin-right: 8px;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.m-r-12 {
|
|
66
|
+
margin-right: 12px;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.p-0 {
|
|
70
|
+
padding: 0;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.p-8 {
|
|
74
|
+
padding: 8px;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.p-12 {
|
|
78
|
+
padding: 12px;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.p-16 {
|
|
82
|
+
padding: 16px;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.p-24 {
|
|
86
|
+
padding: 24px;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.p-x-16 {
|
|
90
|
+
padding-left: 16px;
|
|
91
|
+
padding-right: 16px;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.p-y-12 {
|
|
95
|
+
padding-top: 12px;
|
|
96
|
+
padding-bottom: 12px;
|
|
97
|
+
}
|