opencodekit 0.15.0 → 0.15.2
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/dist/index.js +367 -31
- package/dist/template/.opencode/README.md +1 -1
- package/dist/template/.opencode/agent/vision.md +4 -4
- package/dist/template/.opencode/command/agent-browser.md +21 -0
- package/dist/template/.opencode/command/complete-next-task.md +77 -0
- package/dist/template/.opencode/command/create.md +38 -3
- package/dist/template/.opencode/command/design-audit.md +1 -1
- package/dist/template/.opencode/command/design.md +1 -1
- package/dist/template/.opencode/command/finish.md +8 -0
- package/dist/template/.opencode/command/frontend-design.md +21 -0
- package/dist/template/.opencode/command/index-knowledge.md +25 -0
- package/dist/template/.opencode/command/init.md +6 -0
- package/dist/template/.opencode/command/opensrc.md +58 -0
- package/dist/template/.opencode/command/skill-create.md +3 -3
- package/dist/template/.opencode/command/skill-optimize.md +2 -2
- package/dist/template/.opencode/command/start.md +15 -6
- package/dist/template/.opencode/command/ui-review.md +1 -1
- package/dist/template/.opencode/memory/_templates/prd.md +50 -14
- package/dist/template/.opencode/opencode.json +143 -159
- package/dist/template/.opencode/package.json +1 -1
- package/dist/template/.opencode/skill/accessibility-audit/SKILL.md +1 -1
- package/dist/template/.opencode/skill/agent-browser/SKILL.md +376 -0
- package/dist/template/.opencode/skill/design-system-audit/SKILL.md +1 -1
- package/dist/template/.opencode/skill/frontend-design/SKILL.md +155 -0
- package/dist/template/.opencode/skill/frontend-design/references/animation/motion-advanced.md +224 -0
- package/dist/template/.opencode/skill/frontend-design/references/animation/motion-core.md +171 -0
- package/dist/template/.opencode/skill/frontend-design/references/canvas/execution.md +90 -0
- package/dist/template/.opencode/skill/frontend-design/references/canvas/philosophy.md +94 -0
- package/dist/template/.opencode/skill/frontend-design/references/shadcn/accessibility.md +132 -0
- package/dist/template/.opencode/skill/frontend-design/references/shadcn/core-components.md +153 -0
- package/dist/template/.opencode/skill/frontend-design/references/shadcn/form-components.md +158 -0
- package/dist/template/.opencode/skill/frontend-design/references/shadcn/setup.md +69 -0
- package/dist/template/.opencode/skill/frontend-design/references/shadcn/theming.md +152 -0
- package/dist/template/.opencode/skill/frontend-design/references/tailwind/responsive.md +112 -0
- package/dist/template/.opencode/skill/frontend-design/references/tailwind/utilities-layout.md +134 -0
- package/dist/template/.opencode/skill/frontend-design/references/tailwind/utilities-styling.md +165 -0
- package/dist/template/.opencode/skill/frontend-design/references/tailwind/v4-config.md +147 -0
- package/dist/template/.opencode/skill/frontend-design/references/tailwind/v4-features.md +128 -0
- package/dist/template/.opencode/skill/index-knowledge/SKILL.md +358 -0
- package/dist/template/.opencode/skill/mockup-to-code/SKILL.md +1 -1
- package/dist/template/.opencode/skill/opensrc/SKILL.md +115 -0
- package/dist/template/.opencode/skill/opensrc/references/architecture.md +176 -0
- package/dist/template/.opencode/skill/opensrc/references/cli-usage.md +176 -0
- package/dist/template/.opencode/skill/opensrc/references/registry-support.md +137 -0
- package/dist/template/.opencode/skill/prd/SKILL.md +212 -0
- package/dist/template/.opencode/skill/prd-task/SKILL.md +128 -0
- package/dist/template/.opencode/skill/prd-task/references/prd-schema.json +28 -0
- package/dist/template/.opencode/skill/skill-creator/SKILL.md +155 -0
- package/dist/template/.opencode/skill/ui-ux-research/SKILL.md +1 -1
- package/dist/template/.opencode/skill/visual-analysis/SKILL.md +1 -1
- package/package.json +1 -1
- package/dist/template/.opencode/skill/frontend-aesthetics/SKILL.md +0 -117
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# opensrc CLI Reference
|
|
2
|
+
|
|
3
|
+
## Contents
|
|
4
|
+
- Fetch command (default)
|
|
5
|
+
- List command
|
|
6
|
+
- Remove command
|
|
7
|
+
- Clean command
|
|
8
|
+
- Global options
|
|
9
|
+
|
|
10
|
+
## Fetch Command (Default)
|
|
11
|
+
|
|
12
|
+
Fetch source for packages/repos.
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
opensrc [packages...] [options]
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### Package Formats
|
|
19
|
+
|
|
20
|
+
| Format | Example | Description |
|
|
21
|
+
|--------|---------|-------------|
|
|
22
|
+
| `<name>` | `zod` | npm package (latest or installed version) |
|
|
23
|
+
| `<name>@<version>` | `zod@3.22.0` | npm package at specific version |
|
|
24
|
+
| `npm:<name>` | `npm:react` | Explicit npm prefix |
|
|
25
|
+
| `pypi:<name>` | `pypi:requests` | Python package from PyPI |
|
|
26
|
+
| `pip:<name>` | `pip:flask` | Alias for pypi: |
|
|
27
|
+
| `crates:<name>` | `crates:serde` | Rust crate from crates.io |
|
|
28
|
+
| `cargo:<name>` | `cargo:tokio` | Alias for crates: |
|
|
29
|
+
|
|
30
|
+
### Repository Formats
|
|
31
|
+
|
|
32
|
+
| Format | Example |
|
|
33
|
+
|--------|---------|
|
|
34
|
+
| `owner/repo` | `vercel/ai` |
|
|
35
|
+
| `owner/repo@ref` | `vercel/ai@v1.0.0` |
|
|
36
|
+
| `owner/repo#ref` | `vercel/ai#main` |
|
|
37
|
+
| `github:owner/repo` | `github:facebook/react` |
|
|
38
|
+
| `gitlab:owner/repo` | `gitlab:inkscape/inkscape` |
|
|
39
|
+
| `https://github.com/...` | Full URL |
|
|
40
|
+
|
|
41
|
+
### Options
|
|
42
|
+
|
|
43
|
+
| Option | Description |
|
|
44
|
+
|--------|-------------|
|
|
45
|
+
| `--cwd <path>` | Working directory (default: cwd) |
|
|
46
|
+
| `--modify` | Allow file modifications (skip prompt) |
|
|
47
|
+
| `--modify=false` | Deny file modifications (skip prompt) |
|
|
48
|
+
|
|
49
|
+
### Examples
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# Single package
|
|
53
|
+
opensrc zod
|
|
54
|
+
|
|
55
|
+
# Multiple packages
|
|
56
|
+
opensrc react react-dom next
|
|
57
|
+
|
|
58
|
+
# Mixed registries
|
|
59
|
+
opensrc zod pypi:requests crates:serde
|
|
60
|
+
|
|
61
|
+
# Specific versions
|
|
62
|
+
opensrc zod@3.22.0
|
|
63
|
+
opensrc pypi:requests==2.31.0
|
|
64
|
+
|
|
65
|
+
# GitHub repos
|
|
66
|
+
opensrc vercel/ai
|
|
67
|
+
opensrc facebook/react@v18.2.0
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## List Command
|
|
71
|
+
|
|
72
|
+
List all fetched sources.
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
opensrc list [options]
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Options
|
|
79
|
+
|
|
80
|
+
| Option | Description |
|
|
81
|
+
|--------|-------------|
|
|
82
|
+
| `--json` | Output as JSON |
|
|
83
|
+
| `--cwd <path>` | Working directory |
|
|
84
|
+
|
|
85
|
+
### Output
|
|
86
|
+
|
|
87
|
+
Groups by registry (npm, PyPI, crates.io) and repos:
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
npm Packages:
|
|
91
|
+
|
|
92
|
+
zod@3.22.0
|
|
93
|
+
Path: opensrc/repos/github.com/colinhacks/zod
|
|
94
|
+
Fetched: Jan 10, 2025
|
|
95
|
+
|
|
96
|
+
Repositories:
|
|
97
|
+
|
|
98
|
+
github.com/vercel/ai@main
|
|
99
|
+
Path: opensrc/repos/github.com/vercel/ai
|
|
100
|
+
Fetched: Jan 10, 2025
|
|
101
|
+
|
|
102
|
+
Total: 1 package(s) (1 npm), 1 repo(s)
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Remove Command
|
|
106
|
+
|
|
107
|
+
Remove specific sources.
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
opensrc remove <packages...> [options]
|
|
111
|
+
opensrc rm <packages...> # alias
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Options
|
|
115
|
+
|
|
116
|
+
| Option | Description |
|
|
117
|
+
|--------|-------------|
|
|
118
|
+
| `--cwd <path>` | Working directory |
|
|
119
|
+
|
|
120
|
+
### Examples
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
opensrc remove zod
|
|
124
|
+
opensrc rm pypi:requests
|
|
125
|
+
opensrc remove vercel/ai
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Clean Command
|
|
129
|
+
|
|
130
|
+
Remove all sources by category.
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
opensrc clean [options]
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Options
|
|
137
|
+
|
|
138
|
+
| Option | Description |
|
|
139
|
+
|--------|-------------|
|
|
140
|
+
| `--packages` | Only remove packages (all registries) |
|
|
141
|
+
| `--repos` | Only remove repos |
|
|
142
|
+
| `--npm` | Only remove npm packages |
|
|
143
|
+
| `--pypi` | Only remove PyPI packages |
|
|
144
|
+
| `--crates` | Only remove crates.io packages |
|
|
145
|
+
| `--cwd <path>` | Working directory |
|
|
146
|
+
|
|
147
|
+
### Examples
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
opensrc clean # Remove everything
|
|
151
|
+
opensrc clean --packages # Remove all packages, keep repos
|
|
152
|
+
opensrc clean --npm # Remove only npm packages
|
|
153
|
+
opensrc clean --repos # Remove only repos
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## File Modifications
|
|
157
|
+
|
|
158
|
+
On first run, prompts to modify:
|
|
159
|
+
|
|
160
|
+
1. **`.gitignore`** - Adds `opensrc/` entry
|
|
161
|
+
2. **`tsconfig.json`** - Adds `opensrc/` to exclude array
|
|
162
|
+
3. **`AGENTS.md`** - Adds source code reference section
|
|
163
|
+
|
|
164
|
+
Choice saved to `opensrc/settings.json`.
|
|
165
|
+
|
|
166
|
+
### AGENTS.md Section
|
|
167
|
+
|
|
168
|
+
Adds guidance for AI agents:
|
|
169
|
+
|
|
170
|
+
```markdown
|
|
171
|
+
<!-- opensrc:start -->
|
|
172
|
+
## Source Code Reference
|
|
173
|
+
Source code for dependencies is available in `opensrc/`...
|
|
174
|
+
See `opensrc/sources.json` for the list of available packages.
|
|
175
|
+
<!-- opensrc:end -->
|
|
176
|
+
```
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# Registry Support
|
|
2
|
+
|
|
3
|
+
## Contents
|
|
4
|
+
- npm (Node.js)
|
|
5
|
+
- PyPI (Python)
|
|
6
|
+
- crates.io (Rust)
|
|
7
|
+
- Repository hosts
|
|
8
|
+
|
|
9
|
+
## npm (Node.js)
|
|
10
|
+
|
|
11
|
+
**Prefixes:** `npm:` (or none - default)
|
|
12
|
+
|
|
13
|
+
**API:** `https://registry.npmjs.org/{package}`
|
|
14
|
+
|
|
15
|
+
### Version Detection
|
|
16
|
+
|
|
17
|
+
Auto-detects installed version from (in order):
|
|
18
|
+
1. `node_modules/{pkg}/package.json`
|
|
19
|
+
2. `package-lock.json` (npm v6 and v7+ formats)
|
|
20
|
+
3. `pnpm-lock.yaml`
|
|
21
|
+
4. `yarn.lock`
|
|
22
|
+
5. `package.json` dependencies (strips `^`, `~`, etc.)
|
|
23
|
+
|
|
24
|
+
### Spec Parsing
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
zod → name: zod, version: (detected or latest)
|
|
28
|
+
zod@3.22.0 → name: zod, version: 3.22.0
|
|
29
|
+
@babel/core → name: @babel/core (scoped)
|
|
30
|
+
@babel/core@7.0.0 → name: @babel/core, version: 7.0.0
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Repo URL Extraction
|
|
34
|
+
|
|
35
|
+
From `repository` field, normalizes:
|
|
36
|
+
- `git+https://...` → `https://...`
|
|
37
|
+
- `git://...` → `https://...`
|
|
38
|
+
- `git+ssh://git@...` → `https://...`
|
|
39
|
+
- Removes `.git` suffix
|
|
40
|
+
- Handles `github:owner/repo` shorthand
|
|
41
|
+
|
|
42
|
+
### Monorepo Support
|
|
43
|
+
|
|
44
|
+
Uses `repository.directory` field for packages in monorepos.
|
|
45
|
+
Path becomes: `repos/{host}/{owner}/{repo}/{directory}`
|
|
46
|
+
|
|
47
|
+
## PyPI (Python)
|
|
48
|
+
|
|
49
|
+
**Prefixes:** `pypi:`, `pip:`, `python:`
|
|
50
|
+
|
|
51
|
+
**API:** `https://pypi.org/pypi/{package}/json`
|
|
52
|
+
|
|
53
|
+
### Spec Parsing
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
requests → name: requests
|
|
57
|
+
requests==2.31.0 → name: requests, version: 2.31.0
|
|
58
|
+
requests@2.31.0 → name: requests, version: 2.31.0
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Repo URL Extraction
|
|
62
|
+
|
|
63
|
+
Checks `project_urls` in order:
|
|
64
|
+
1. `Source`, `Source Code`
|
|
65
|
+
2. `Repository`, `GitHub`
|
|
66
|
+
3. `Code`, `Homepage`
|
|
67
|
+
|
|
68
|
+
Falls back to `home_page` if it's a git URL.
|
|
69
|
+
|
|
70
|
+
## crates.io (Rust)
|
|
71
|
+
|
|
72
|
+
**Prefixes:** `crates:`, `cargo:`, `rust:`
|
|
73
|
+
|
|
74
|
+
**API:** `https://crates.io/api/v1/crates/{crate}`
|
|
75
|
+
|
|
76
|
+
### Spec Parsing
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
serde → name: serde
|
|
80
|
+
serde@1.0.0 → name: serde, version: 1.0.0
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Repo URL Extraction
|
|
84
|
+
|
|
85
|
+
Uses `repository` field, falls back to `homepage` if it's a git URL.
|
|
86
|
+
|
|
87
|
+
## Repository Hosts
|
|
88
|
+
|
|
89
|
+
### GitHub
|
|
90
|
+
|
|
91
|
+
**API:** `https://api.github.com/repos/{owner}/{repo}`
|
|
92
|
+
|
|
93
|
+
Resolves default branch, constructs clone URL.
|
|
94
|
+
|
|
95
|
+
**Rate limiting:** 60 req/hour unauthenticated. Error on 403.
|
|
96
|
+
|
|
97
|
+
### GitLab
|
|
98
|
+
|
|
99
|
+
**API:** `https://gitlab.com/api/v4/projects/{owner}%2F{repo}`
|
|
100
|
+
|
|
101
|
+
Resolves default branch, constructs clone URL.
|
|
102
|
+
|
|
103
|
+
### Bitbucket
|
|
104
|
+
|
|
105
|
+
Supported for parsing (`bitbucket:owner/repo`), but no API resolution.
|
|
106
|
+
Assumes `main` as default branch.
|
|
107
|
+
|
|
108
|
+
## Repo Spec Formats
|
|
109
|
+
|
|
110
|
+
| Format | Example | Host |
|
|
111
|
+
|--------|---------|------|
|
|
112
|
+
| `owner/repo` | `vercel/ai` | github.com |
|
|
113
|
+
| `github:owner/repo` | `github:facebook/react` | github.com |
|
|
114
|
+
| `gitlab:owner/repo` | `gitlab:inkscape/inkscape` | gitlab.com |
|
|
115
|
+
| `bitbucket:owner/repo` | `bitbucket:atlassian/python-bitbucket` | bitbucket.org |
|
|
116
|
+
| `host/owner/repo` | `gitlab.com/owner/repo` | (from URL) |
|
|
117
|
+
| Full URL | `https://github.com/...` | (from URL) |
|
|
118
|
+
|
|
119
|
+
## Ref Specifications
|
|
120
|
+
|
|
121
|
+
Append to repo spec:
|
|
122
|
+
|
|
123
|
+
| Suffix | Example | Meaning |
|
|
124
|
+
|--------|---------|---------|
|
|
125
|
+
| `@ref` | `owner/repo@v1.0.0` | Tag, branch, or commit |
|
|
126
|
+
| `#ref` | `owner/repo#main` | Branch (alternative syntax) |
|
|
127
|
+
|
|
128
|
+
URL paths also supported: `https://github.com/owner/repo/tree/branch`
|
|
129
|
+
|
|
130
|
+
## Git Tag Patterns
|
|
131
|
+
|
|
132
|
+
When cloning packages, tries tags in order:
|
|
133
|
+
1. `v{version}` - Most common (e.g., `v3.22.0`)
|
|
134
|
+
2. `{version}` - No prefix (e.g., `3.22.0`)
|
|
135
|
+
3. Default branch - Fallback with warning
|
|
136
|
+
|
|
137
|
+
Uses `--depth 1 --single-branch` for efficient cloning.
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: prd
|
|
3
|
+
description: Create Product Requirements Documents (PRDs) that define the end state of a feature. Use when planning new features, migrations, or refactors. Generates structured PRDs with acceptance criteria.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# PRD Creation Skill
|
|
7
|
+
|
|
8
|
+
Create Product Requirements Documents suitable for RFC review by Principal Engineers, Designers, and Product Owners.
|
|
9
|
+
|
|
10
|
+
The PRD describes WHAT to build and WHY, not HOW or in WHAT ORDER.
|
|
11
|
+
|
|
12
|
+
## Beads-Native Output (Recommended)
|
|
13
|
+
|
|
14
|
+
When you are working on a Beads task (you have a bead id like `bd-...`), the PRD should live with the task artifacts:
|
|
15
|
+
|
|
16
|
+
- Write PRD to: `.beads/artifacts/<bead-id>/prd.md`
|
|
17
|
+
|
|
18
|
+
This keeps requirements + execution tasks colocated with the bead.
|
|
19
|
+
|
|
20
|
+
If no bead id exists, fall back to writing `prd-<feature-name>.md` in the project root.
|
|
21
|
+
|
|
22
|
+
## Workflow
|
|
23
|
+
|
|
24
|
+
1. Confirm if the user has an existing bead id.
|
|
25
|
+
- If yes: use `.beads/artifacts/<bead-id>/prd.md`
|
|
26
|
+
- If no: write `prd-<feature-name>.md` in project root
|
|
27
|
+
2. Ask clarifying questions (5–7 max).
|
|
28
|
+
3. Explore codebase patterns and constraints.
|
|
29
|
+
4. Write a PRD that includes a machine-convertible `## Tasks` section (see below).
|
|
30
|
+
|
|
31
|
+
## Clarifying Questions
|
|
32
|
+
|
|
33
|
+
### Problem & Motivation
|
|
34
|
+
|
|
35
|
+
- What problem does this solve? Who experiences it?
|
|
36
|
+
- What's the cost of NOT solving this? (user pain, revenue, tech debt)
|
|
37
|
+
- Why now? What triggered this work?
|
|
38
|
+
|
|
39
|
+
### Users & Stakeholders
|
|
40
|
+
|
|
41
|
+
- Who are the primary users? Secondary users?
|
|
42
|
+
|
|
43
|
+
### End State & Success
|
|
44
|
+
|
|
45
|
+
- What does "done" look like? How will users interact with it?
|
|
46
|
+
|
|
47
|
+
### Scope & Boundaries
|
|
48
|
+
|
|
49
|
+
- What's explicitly OUT of scope?
|
|
50
|
+
- What's deferred to future iterations?
|
|
51
|
+
- Are there adjacent features that must NOT be affected?
|
|
52
|
+
|
|
53
|
+
### Constraints & Requirements
|
|
54
|
+
|
|
55
|
+
- Performance requirements?
|
|
56
|
+
- Security requirements? (auth, data sensitivity, compliance)
|
|
57
|
+
- Compatibility requirements? (browsers, versions, APIs)
|
|
58
|
+
- Accessibility requirements? (WCAG level, screen readers)
|
|
59
|
+
|
|
60
|
+
### Risks & Dependencies
|
|
61
|
+
|
|
62
|
+
- What could go wrong? Technical risks?
|
|
63
|
+
- External service dependencies?
|
|
64
|
+
- What decisions are still open/contentious?
|
|
65
|
+
|
|
66
|
+
## Output Format
|
|
67
|
+
|
|
68
|
+
Write a PRD in markdown using this structure.
|
|
69
|
+
|
|
70
|
+
IMPORTANT: include a `## Tasks` section that `prd-task` can convert.
|
|
71
|
+
|
|
72
|
+
```markdown
|
|
73
|
+
# PRD: <Feature Name>
|
|
74
|
+
|
|
75
|
+
**Bead:** <bd-...>
|
|
76
|
+
**Date:** <YYYY-MM-DD>
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Problem Statement
|
|
81
|
+
|
|
82
|
+
### What problem are we solving?
|
|
83
|
+
|
|
84
|
+
Clear description of the problem. Include user impact and business impact.
|
|
85
|
+
|
|
86
|
+
### Why now?
|
|
87
|
+
|
|
88
|
+
What triggered this work? Cost of inaction?
|
|
89
|
+
|
|
90
|
+
### Who is affected?
|
|
91
|
+
|
|
92
|
+
- **Primary users:** Description
|
|
93
|
+
- **Secondary users:** Description
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Proposed Solution
|
|
98
|
+
|
|
99
|
+
### Overview
|
|
100
|
+
|
|
101
|
+
One paragraph describing what this feature does when complete.
|
|
102
|
+
|
|
103
|
+
### User Experience (if applicable)
|
|
104
|
+
|
|
105
|
+
How will users interact with this feature? Include user flows for primary scenarios.
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## End State
|
|
110
|
+
|
|
111
|
+
When this PRD is complete, the following will be true:
|
|
112
|
+
|
|
113
|
+
- [ ] Capability 1 exists and works
|
|
114
|
+
- [ ] Capability 2 exists and works
|
|
115
|
+
- [ ] All acceptance criteria pass
|
|
116
|
+
- [ ] Tests cover the new functionality
|
|
117
|
+
- [ ] Documentation is updated
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Success Metrics
|
|
122
|
+
|
|
123
|
+
### Quantitative
|
|
124
|
+
|
|
125
|
+
| Metric | Current | Target | Measurement Method |
|
|
126
|
+
| -------- | ------- | ------ | ------------------ |
|
|
127
|
+
| Metric 1 | X | Y | How measured |
|
|
128
|
+
|
|
129
|
+
### Qualitative
|
|
130
|
+
|
|
131
|
+
- User feedback criteria
|
|
132
|
+
- Team/process improvements expected
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Acceptance Criteria
|
|
137
|
+
|
|
138
|
+
### Feature: <Name>
|
|
139
|
+
|
|
140
|
+
- [ ] Criterion 1
|
|
141
|
+
- [ ] Criterion 2
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Technical Context
|
|
146
|
+
|
|
147
|
+
### Existing Patterns
|
|
148
|
+
|
|
149
|
+
- Pattern 1: `src/path/to/example.ts` - Why relevant
|
|
150
|
+
|
|
151
|
+
### Key Files
|
|
152
|
+
|
|
153
|
+
- `src/relevant/file.ts` - Description of relevance
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Risks & Mitigations
|
|
158
|
+
|
|
159
|
+
| Risk | Likelihood | Impact | Mitigation |
|
|
160
|
+
| ------ | ------------ | ------------ | --------------- |
|
|
161
|
+
| Risk 1 | High/Med/Low | High/Med/Low | How to mitigate |
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Non-Goals (v1)
|
|
166
|
+
|
|
167
|
+
Explicitly out of scope:
|
|
168
|
+
|
|
169
|
+
- Thing we're not building - why deferred
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Tasks
|
|
174
|
+
|
|
175
|
+
Each task must be written like:
|
|
176
|
+
|
|
177
|
+
### <Task Title> [category]
|
|
178
|
+
|
|
179
|
+
One sentence describing the end state.
|
|
180
|
+
|
|
181
|
+
**Verification:**
|
|
182
|
+
|
|
183
|
+
- A command or manual check that proves it works
|
|
184
|
+
- Another check
|
|
185
|
+
|
|
186
|
+
Example:
|
|
187
|
+
|
|
188
|
+
### Registration API [api]
|
|
189
|
+
|
|
190
|
+
Users can register with email/password.
|
|
191
|
+
|
|
192
|
+
**Verification:**
|
|
193
|
+
|
|
194
|
+
- `curl -X POST /api/auth/register ...` returns 201
|
|
195
|
+
- Duplicate email returns 409
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## Open Questions
|
|
200
|
+
|
|
201
|
+
| Question | Owner | Due Date | Status |
|
|
202
|
+
| ---------- | ----- | -------- | ------------- |
|
|
203
|
+
| Question 1 | Name | Date | Open/Resolved |
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## Key Principles
|
|
207
|
+
|
|
208
|
+
- Problem Before Solution
|
|
209
|
+
- Define End State, Not Process
|
|
210
|
+
- Technical Context Enables Autonomy
|
|
211
|
+
- Non-Goals Prevent Scope Creep
|
|
212
|
+
- Risks & Alternatives Show Rigor
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: prd-task
|
|
3
|
+
description: Convert a Beads PRD markdown file to executable JSON tasks for autonomous execution. Use after writing `.beads/artifacts/<bead-id>/prd.md`.
|
|
4
|
+
references:
|
|
5
|
+
- references/prd-schema.json
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# PRD Task Skill (Beads-Native)
|
|
9
|
+
|
|
10
|
+
Convert a markdown PRD into executable JSON format for autonomous task completion.
|
|
11
|
+
|
|
12
|
+
The PRD defines the **end state** via tasks with verification steps. The agent decides HOW to get there.
|
|
13
|
+
|
|
14
|
+
## Beads-Native File Locations (Recommended)
|
|
15
|
+
|
|
16
|
+
This template uses Beads artifacts (no `.opencode/state`).
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
.beads/artifacts/<bead-id>/
|
|
20
|
+
├── prd.md # PRD created by `prd` skill
|
|
21
|
+
├── prd.json # Generated task list with passes field
|
|
22
|
+
└── progress.txt # Cross-iteration memory (append-only)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Workflow
|
|
26
|
+
|
|
27
|
+
1. Input: bead id (`bd-...`).
|
|
28
|
+
2. Read `.beads/artifacts/<bead-id>/prd.md`.
|
|
29
|
+
3. Extract tasks from `## Tasks`.
|
|
30
|
+
4. Write `.beads/artifacts/<bead-id>/prd.json`.
|
|
31
|
+
5. Ensure `.beads/artifacts/<bead-id>/progress.txt` exists (create if missing).
|
|
32
|
+
|
|
33
|
+
## Input Format
|
|
34
|
+
|
|
35
|
+
`prd-task` expects a `## Tasks` section with tasks of the form:
|
|
36
|
+
|
|
37
|
+
```markdown
|
|
38
|
+
## Tasks
|
|
39
|
+
|
|
40
|
+
### User Registration [functional]
|
|
41
|
+
|
|
42
|
+
User can register with email and password.
|
|
43
|
+
|
|
44
|
+
**Verification:**
|
|
45
|
+
|
|
46
|
+
- POST /api/auth/register with valid email/password
|
|
47
|
+
- Verify 201 response with user object
|
|
48
|
+
- Attempt duplicate email, verify 409
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Output Format
|
|
52
|
+
|
|
53
|
+
Write JSON to `.beads/artifacts/<bead-id>/prd.json`.
|
|
54
|
+
|
|
55
|
+
```json
|
|
56
|
+
{
|
|
57
|
+
"beadId": "bd-...",
|
|
58
|
+
"prdName": "<optional-slug>",
|
|
59
|
+
"tasks": [
|
|
60
|
+
{
|
|
61
|
+
"id": "functional-1",
|
|
62
|
+
"category": "functional",
|
|
63
|
+
"description": "User can register with email and password",
|
|
64
|
+
"steps": [
|
|
65
|
+
"POST /api/auth/register with valid email/password",
|
|
66
|
+
"Verify 201 response with user object",
|
|
67
|
+
"Attempt duplicate email, verify 409"
|
|
68
|
+
],
|
|
69
|
+
"passes": false
|
|
70
|
+
}
|
|
71
|
+
]
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Task Schema
|
|
76
|
+
|
|
77
|
+
See `references/prd-schema.json`.
|
|
78
|
+
|
|
79
|
+
## Conversion Rules
|
|
80
|
+
|
|
81
|
+
### Tasks from Markdown
|
|
82
|
+
|
|
83
|
+
- Each `### Title [category]` becomes a task
|
|
84
|
+
- Generate `id` as `<category>-<number>` (e.g., `api-1`, `db-2`) or a descriptive slug
|
|
85
|
+
- Text after title becomes `description`
|
|
86
|
+
- Items under `**Verification:**` become `steps`
|
|
87
|
+
- `passes` always starts `false`
|
|
88
|
+
|
|
89
|
+
### Steps Are Verification
|
|
90
|
+
|
|
91
|
+
Steps must be written as **verification steps**, not implementation instructions.
|
|
92
|
+
|
|
93
|
+
Bad: "Add a controller and write a service"
|
|
94
|
+
Good: "POST /api/foo returns 201" / "bun test passes"
|
|
95
|
+
|
|
96
|
+
## Progress File
|
|
97
|
+
|
|
98
|
+
If `.beads/artifacts/<bead-id>/progress.txt` does not exist, create it with:
|
|
99
|
+
|
|
100
|
+
```markdown
|
|
101
|
+
# Progress Log
|
|
102
|
+
|
|
103
|
+
Bead: <bead-id>
|
|
104
|
+
Started: <YYYY-MM-DD>
|
|
105
|
+
|
|
106
|
+
## Codebase Patterns
|
|
107
|
+
|
|
108
|
+
<!-- Consolidate reusable patterns here -->
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
<!-- Task logs below - APPEND ONLY -->
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## After Conversion
|
|
116
|
+
|
|
117
|
+
Tell the user:
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
PRD converted:
|
|
121
|
+
- .beads/artifacts/<bead-id>/prd.md
|
|
122
|
+
- .beads/artifacts/<bead-id>/prd.json
|
|
123
|
+
- .beads/artifacts/<bead-id>/progress.txt
|
|
124
|
+
|
|
125
|
+
Next:
|
|
126
|
+
/start <bead-id>
|
|
127
|
+
/complete-next-task <bead-id>
|
|
128
|
+
```
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"beadId": "bd-abc123",
|
|
3
|
+
"prdName": "user-authentication",
|
|
4
|
+
"tasks": [
|
|
5
|
+
{
|
|
6
|
+
"id": "functional-1",
|
|
7
|
+
"category": "functional",
|
|
8
|
+
"description": "User can register with email and password",
|
|
9
|
+
"steps": [
|
|
10
|
+
"POST /api/auth/register with valid email/password",
|
|
11
|
+
"Verify 201 response with user object",
|
|
12
|
+
"Verify password is not in response",
|
|
13
|
+
"Attempt duplicate email, verify 409 response",
|
|
14
|
+
"Attempt invalid email, verify 400 response"
|
|
15
|
+
],
|
|
16
|
+
"passes": false
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
"context": {
|
|
20
|
+
"patterns": [
|
|
21
|
+
"API routes: src/routes/items.ts",
|
|
22
|
+
"Validation: src/lib/validate.ts",
|
|
23
|
+
"DB queries: src/db/queries/"
|
|
24
|
+
],
|
|
25
|
+
"keyFiles": ["src/db/schema.ts", "src/routes/index.ts"],
|
|
26
|
+
"nonGoals": ["OAuth/social login", "Password reset", "Email verification"]
|
|
27
|
+
}
|
|
28
|
+
}
|