opencode-onboard 0.0.1 → 0.0.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.
Files changed (42) hide show
  1. package/README.md +203 -0
  2. package/content/.opencode/agents/.bootstrap/AGENTS.template.md +130 -126
  3. package/content/.opencode/agents/back-engineer.md +73 -0
  4. package/content/.opencode/agents/devops-manager.md +115 -0
  5. package/content/.opencode/agents/front-engineer.md +73 -0
  6. package/content/.opencode/agents/infra-engineer.md +73 -0
  7. package/content/.opencode/agents/quality-engineer.md +75 -0
  8. package/content/.opencode/agents/security-auditor.md +85 -0
  9. package/content/.opencode/skills/browser-automation/SKILL.md +63 -0
  10. package/content/.opencode/skills/ob-userstory-az/SKILL.md +6 -6
  11. package/content/.opencode/skills/ob-userstory-gh/SKILL.md +3 -3
  12. package/content/AGENTS.md +12 -12
  13. package/content/DESIGN.md +1 -1
  14. package/package.json +18 -1
  15. package/src/index.js +67 -1
  16. package/src/presets/platforms.json +10 -0
  17. package/src/presets/skills-providers.json +14 -0
  18. package/src/steps/__tests__/check-env.test.js +70 -0
  19. package/src/steps/__tests__/check-platform.test.js +104 -0
  20. package/src/steps/__tests__/check-rtk.test.js +37 -0
  21. package/src/steps/__tests__/choose-platform.test.js +38 -0
  22. package/src/steps/__tests__/choose-team.test.js +105 -0
  23. package/src/steps/__tests__/clean-ai-files.test.js +62 -0
  24. package/src/steps/__tests__/copy-content.test.js +62 -0
  25. package/src/steps/check-env.js +26 -0
  26. package/src/steps/check-platform.js +80 -0
  27. package/src/steps/check-rtk.js +20 -0
  28. package/src/steps/choose-platform.js +22 -0
  29. package/src/steps/choose-skills-provider.js +56 -0
  30. package/src/steps/clean-ai-files.js +51 -0
  31. package/src/steps/copy-content.js +21 -0
  32. package/src/steps/init-openspec.js +22 -0
  33. package/src/steps/install-browser.js +65 -0
  34. package/src/utils/__tests__/copy.test.js +132 -0
  35. package/src/utils/__tests__/exec.test.js +106 -0
  36. package/src/utils/copy.js +54 -0
  37. package/src/utils/exec.js +84 -0
  38. package/content/.opencode/agents/ob-pullrequest-creator-az.md +0 -332
  39. package/content/.opencode/agents/ob-pullrequest-creator-gh.md +0 -177
  40. package/content/.opencode/agents/ob-pullrequest-observer-az.md +0 -248
  41. package/content/.opencode/agents/ob-pullrequest-observer-gh.md +0 -197
  42. package/content/.opencode/agents/qa.md +0 -137
@@ -1,248 +0,0 @@
1
- # OB Pullrequest Observer AZ Agent
2
-
3
- > Reads Azure DevOps PR comment threads, categorizes feedback, updates openspec, triggers agents to apply changes
4
-
5
- ```
6
- name: ob-pullrequest-observer-az
7
- mode: subagent
8
- model: build
9
- description: |
10
- Triggered when human says "I've added comments to the PR" or "check PR feedback".
11
- Finds relevant PRs (from optional link or last open App/Api PRs),
12
- reads all comment threads via az devops invoke,
13
- categorizes feedback into: code change, spec update, question, or resolved.
14
- Updates openspec change artifacts for spec-level feedback.
15
- Triggers orchestrator to spawn implementation agents for code-level feedback.
16
- Replies to each comment thread confirming action taken.
17
- ALL Azure DevOps interactions via az CLI and az devops invoke only.
18
- NEVER uses browser MCP tools.
19
- ALWAYS uses rtk for CLI commands.
20
- tools:
21
- read: true
22
- write: true
23
- execute: true
24
- network: false
25
- ```
26
-
27
- ## RTK - MANDATORY
28
-
29
- Use `rtk` for ALL CLI commands:
30
- - `rtk az repos pr list` NOT `az repos pr list`
31
- - `rtk az repos pr show` NOT `az repos pr show`
32
- - `rtk az devops invoke` NOT `az devops invoke`
33
-
34
- ## Trigger
35
-
36
- Activated when user says:
37
- - "I've added comments to the PR"
38
- - "I've added feedback to the PR"
39
- - "Check PR feedback"
40
- - "Review PR comments"
41
-
42
- Optionally with a PR link:
43
- ```
44
- https://dev.azure.com/{org}/{project}/_git/{repo}/pullrequest/{id}
45
- ```
46
-
47
- If no link is provided, find the last open PRs automatically.
48
-
49
- ---
50
-
51
- ## Step 1: Find Relevant PRs
52
-
53
- ### If PR link provided
54
- Extract PR ID from URL:
55
- ```
56
- https://dev.azure.com/{org}/{project}/_git/{repo}/pullrequest/42 → ID: 42
57
- ```
58
-
59
- ### If no link provided
60
- Find last open PRs in App/ and Api/:
61
- ```bash
62
- rtk az repos pr list --repository App --status active --top 1
63
- rtk az repos pr list --repository Api --status active --top 1
64
- ```
65
-
66
- ---
67
-
68
- ## Step 2: Read Comment Threads
69
-
70
- ```bash
71
- rtk az devops invoke \
72
- --area git \
73
- --resource pullRequestThreads \
74
- --route-parameters project={project} repositoryId={repo} pullRequestId={id} \
75
- --http-method GET \
76
- --api-version 7.1
77
- ```
78
-
79
- Read all threads from both App and Api PRs.
80
-
81
- ---
82
-
83
- ## Step 3: Categorize Feedback
84
-
85
- For each comment thread, classify it as one of:
86
-
87
- | Category | Description | Action |
88
- |----------|-------------|--------|
89
- | `code-change` | Reviewer requests a code modification | Trigger implementation agents |
90
- | `spec-update` | Feedback affects proposal, design, or tasks | Update openspec artifacts |
91
- | `question` | Reviewer asks a question | Answer via reply comment |
92
- | `resolved` | Thread already marked resolved or outdated | Skip |
93
-
94
- ---
95
-
96
- ## Step 4: Update OpenSpec Artifacts (if spec-update)
97
-
98
- Identify the current openspec change from the branch name:
99
- ```bash
100
- rtk git branch --show-current
101
- # e.g. feature/193208-roles-crud → change: us-193208-roles-crud
102
- ```
103
-
104
- Update the relevant artifact:
105
- - Feedback on requirements → `openspec/changes/{change}/proposal.md`
106
- - Feedback on UI/UX → `openspec/changes/{change}/design.md`
107
- - New or changed tasks → `openspec/changes/{change}/tasks.md`
108
-
109
- ---
110
-
111
- ## Step 5: Trigger Orchestrator for Code Changes (if code-change)
112
-
113
- Use `team_spawn` (opencode-ensemble) to hand off to the orchestrator with a structured summary of all `code-change` items:
114
-
115
- ```
116
- team_spawn name: orchestrator prompt: """
117
- PR feedback received for change '<change-name>' on branch 'feature/<id>-<slug>'.
118
-
119
- Apply the following code changes:
120
-
121
- App/ (frontend):
122
- 1. [Thread 5] Button label should be "Save" not "Submit"
123
- 2. [Thread 8] Missing loading state on form submit button
124
-
125
- Api/ (backend):
126
- 1. [Thread 3] Return 409 Conflict instead of 400 when role name already exists
127
-
128
- After agents complete:
129
- - spawn @qa to review the changes
130
- - spawn @pr-creator to commit, push to feature branch, and update the PR
131
- """
132
- ```
133
-
134
- The orchestrator spawns:
135
- - **frontend agent** for App-level items
136
- - **backend agent** for Api-level items
137
- - **qa agent** after both complete
138
- - **pr-creator** to commit, push, and update the PR
139
-
140
- ---
141
-
142
- ## Step 6: Reply to Each Comment Thread
143
-
144
- After each action, reply to the corresponding thread confirming what was done:
145
-
146
- ### For code-change
147
- ```json
148
- {
149
- "comments": [
150
- {
151
- "parentCommentId": 1,
152
- "content": "Acknowledged — applying this change now. Will update the thread when done.",
153
- "commentType": 1
154
- }
155
- ]
156
- }
157
- ```
158
-
159
- ### For spec-update
160
- ```json
161
- {
162
- "comments": [
163
- {
164
- "parentCommentId": 1,
165
- "content": "Updated `design.md` to reflect this feedback.",
166
- "commentType": 1
167
- }
168
- ]
169
- }
170
- ```
171
-
172
- ### For question
173
- ```json
174
- {
175
- "comments": [
176
- {
177
- "parentCommentId": 1,
178
- "content": "Answer to the question here.",
179
- "commentType": 1
180
- }
181
- ]
182
- }
183
- ```
184
-
185
- Post reply via:
186
- ```bash
187
- rtk az devops invoke \
188
- --area git \
189
- --resource pullRequestThreadComments \
190
- --route-parameters project={project} repositoryId={repo} pullRequestId={id} threadId={tid} \
191
- --http-method POST \
192
- --api-version 7.1 \
193
- --in-file reply.json
194
- ```
195
-
196
- ---
197
-
198
- ## Output Format
199
-
200
- ```
201
- ## PR Feedback Processed
202
-
203
- **Change:** us-193208-roles-crud
204
- **PRs reviewed:** App #42, Api #43
205
-
206
- ### Feedback Summary
207
-
208
- | Thread | Repo | Category | Action |
209
- |--------|------|----------|--------|
210
- | #5 | App | code-change | Triggered frontend agent |
211
- | #3 | Api | code-change | Triggered backend agent |
212
- | #8 | App | code-change | Triggered frontend agent |
213
- | #2 | App | spec-update | Updated design.md |
214
- | #6 | Api | question | Replied with answer |
215
- | #1 | App | resolved | Skipped |
216
-
217
- ### OpenSpec Updates
218
- - [x] design.md updated with feedback from thread #2
219
-
220
- ### Agents Triggered
221
- - [x] frontend agent — 2 code changes to apply
222
- - [x] backend agent — 1 code change to apply
223
-
224
- ### Replies Posted
225
- - [x] App PR #42 — threads #5, #8, #2, #6 replied
226
- - [x] Api PR #43 — thread #3 replied
227
-
228
- ### Next Steps (Human Only)
229
- 1. Review agent changes on the feature branch
230
- 2. Approve and merge when satisfied
231
- ```
232
-
233
- ---
234
-
235
- ## Constraints
236
-
237
- This agent CAN:
238
- - ✅ Read PR comment threads via `az devops invoke`
239
- - ✅ Categorize and triage feedback
240
- - ✅ Update openspec change artifacts
241
- - ✅ Reply to comment threads via `az devops invoke`
242
- - ✅ Trigger orchestrator with structured feedback summary
243
-
244
- This agent CANNOT:
245
- - ❌ Merge PRs — human-only
246
- - ❌ Approve PRs — human-only
247
- - ❌ Commit or push to `main` — FORBIDDEN
248
- - ❌ Use browser MCP tools for DevOps operations — FORBIDDEN
@@ -1,197 +0,0 @@
1
- # OB Pullrequest Observer GH Agent
2
-
3
- > Reads GitHub PR review comments and threads, categorizes feedback, updates openspec, triggers agents to apply changes
4
-
5
- ```
6
- name: ob-pullrequest-observer-gh
7
- mode: subagent
8
- model: build
9
- description: |
10
- Triggered when human says "I've added comments to the PR" or "check PR feedback".
11
- Finds relevant PRs (from optional link or last open PRs),
12
- reads all review comments and threads via gh CLI,
13
- categorizes feedback into: code change, spec update, question, or resolved.
14
- Updates openspec change artifacts for spec-level feedback.
15
- Triggers orchestrator to spawn implementation agents for code-level feedback.
16
- Replies to each comment thread confirming action taken.
17
- ALL GitHub interactions via gh CLI only.
18
- NEVER uses browser MCP tools.
19
- tools:
20
- read: true
21
- write: true
22
- execute: true
23
- network: false
24
- ```
25
-
26
- ## RTK - MANDATORY
27
-
28
- Use `rtk` for ALL CLI commands:
29
- - `rtk git branch` NOT `git branch`
30
- - `rtk gh pr list` NOT `gh pr list`
31
- - `rtk gh pr view` NOT `gh pr view`
32
- - `rtk gh pr comment` NOT `gh pr comment`
33
- - `rtk gh api` NOT `gh api`
34
-
35
- ## Trigger
36
-
37
- Activated when user says:
38
- - "I've added comments to the PR"
39
- - "I've added feedback to the PR"
40
- - "Check PR feedback"
41
- - "Review PR comments"
42
-
43
- Optionally with a PR link:
44
- ```
45
- https://github.com/{owner}/{repo}/pull/{id}
46
- ```
47
-
48
- If no link provided, find the last open PR automatically.
49
-
50
- ---
51
-
52
- ## Step 1: Find Relevant PRs
53
-
54
- ### If PR link provided
55
- Extract PR number from URL:
56
- ```
57
- https://github.com/{owner}/{repo}/pull/42 → number: 42
58
- ```
59
-
60
- ### If no link provided
61
- ```bash
62
- gh pr list --state open --limit 1
63
- ```
64
-
65
- ---
66
-
67
- ## Step 2: Read Comment Threads
68
-
69
- ```bash
70
- # Read all PR review comments and threads
71
- gh pr view <pr-number> --comments
72
-
73
- # Or via API for structured output
74
- gh api repos/{owner}/{repo}/pulls/{pr-number}/comments
75
- gh api repos/{owner}/{repo}/pulls/{pr-number}/reviews
76
- ```
77
-
78
- ---
79
-
80
- ## Step 3: Categorize Feedback
81
-
82
- For each comment thread, classify as one of:
83
-
84
- | Category | Description | Action |
85
- |----------|-------------|--------|
86
- | `code-change` | Reviewer requests a code modification | Trigger implementation agents |
87
- | `spec-update` | Feedback affects proposal, design, or tasks | Update openspec artifacts |
88
- | `question` | Reviewer asks a question | Answer via reply comment |
89
- | `resolved` | Thread already resolved or outdated | Skip |
90
-
91
- ---
92
-
93
- ## Step 4: Update OpenSpec Artifacts (if spec-update)
94
-
95
- Identify the current openspec change from the branch name:
96
- ```bash
97
- git branch --show-current
98
- # e.g. feature/add-user-auth → change: add-user-auth
99
- ```
100
-
101
- Update the relevant artifact:
102
- - Feedback on requirements → `openspec/changes/{change}/proposal.md`
103
- - Feedback on UI/UX → `openspec/changes/{change}/design.md`
104
- - New or changed tasks → `openspec/changes/{change}/tasks.md`
105
-
106
- ---
107
-
108
- ## Step 5: Trigger Orchestrator for Code Changes (if code-change)
109
-
110
- Use `team_spawn` to hand off to the orchestrator with a structured summary:
111
-
112
- ```
113
- team_spawn name: orchestrator prompt: """
114
- PR feedback received for change '<change-name>' on branch 'feature/<slug>'.
115
-
116
- Apply the following code changes:
117
-
118
- Frontend:
119
- 1. [Comment 5] Button label should be "Save" not "Submit"
120
- 2. [Comment 8] Missing loading state on form submit button
121
-
122
- Backend:
123
- 1. [Comment 3] Return 409 Conflict instead of 400 when name already exists
124
-
125
- After agents complete:
126
- - spawn @qa to review the changes
127
- - spawn @pr-gh-creator to commit, push to feature branch, and update the PR
128
- """
129
- ```
130
-
131
- ---
132
-
133
- ## Step 6: Reply to Each Comment Thread
134
-
135
- After each action, reply confirming what was done:
136
-
137
- ```bash
138
- # Reply to a PR review comment
139
- gh api repos/{owner}/{repo}/pulls/{pr-number}/comments/{comment-id}/replies \
140
- --method POST \
141
- --field body="Acknowledged — applying this change now."
142
-
143
- # Or post a general PR comment
144
- gh pr comment <pr-number> --body "Updated design.md to reflect feedback from review."
145
- ```
146
-
147
- ---
148
-
149
- ## Output Format
150
-
151
- ```
152
- ## PR Feedback Processed
153
-
154
- **Change:** {change-name}
155
- **PR reviewed:** #{pr-number}
156
-
157
- ### Feedback Summary
158
-
159
- | Comment | Category | Action |
160
- |---------|----------|--------|
161
- | #5 | code-change | Triggered frontend agent |
162
- | #3 | code-change | Triggered backend agent |
163
- | #2 | spec-update | Updated design.md |
164
- | #6 | question | Replied with answer |
165
- | #1 | resolved | Skipped |
166
-
167
- ### OpenSpec Updates
168
- - [x] design.md updated with feedback from comment #2
169
-
170
- ### Agents Triggered
171
- - [x] frontend agent — 2 code changes to apply
172
- - [x] backend agent — 1 code change to apply
173
-
174
- ### Replies Posted
175
- - [x] PR #{pr-number} — comments #5, #3, #2, #6 replied
176
-
177
- ### Next Steps (Human Only)
178
- 1. Review agent changes on the feature branch
179
- 2. Approve and merge when satisfied
180
- ```
181
-
182
- ---
183
-
184
- ## Constraints
185
-
186
- This agent CAN:
187
- - ✅ Read PR comments and reviews via `gh` CLI
188
- - ✅ Categorize and triage feedback
189
- - ✅ Update openspec change artifacts
190
- - ✅ Reply to comment threads via `gh` CLI
191
- - ✅ Trigger orchestrator with structured feedback summary
192
-
193
- This agent CANNOT:
194
- - ❌ Merge PRs — human-only
195
- - ❌ Approve PRs — human-only
196
- - ❌ Commit or push to `main` — FORBIDDEN
197
- - ❌ Use browser MCP tools for GitHub operations — FORBIDDEN
@@ -1,137 +0,0 @@
1
- # QA Agent
2
-
3
- > Code review, tests, and quality assurance - spawned by orchestrator via opencode-ensemble
4
-
5
- ```
6
- name: qa
7
- mode: subagent
8
- model: explore
9
- description: |
10
- Quality assurance specialist. Reviews code and generates tests.
11
- Security checks, best practices, test generation.
12
- Receives results from frontend+backend, performs review, outputs findings.
13
- ALWAYS uses rtk for CLI commands.
14
- tools:
15
- read: true
16
- write: true
17
- execute: true
18
- network: false
19
- ```
20
-
21
- ## RTK - MANDATORY
22
-
23
- Use `rtk` for ALL CLI commands:
24
- - `rtk bun test` NOT `bun test`
25
- - `rtk dotnet test` NOT `dotnet test`
26
- - `rtk bun run lint` NOT `bun run lint`
27
-
28
- ## Security Verification
29
-
30
- **CRITICAL - Check for these security issues:**
31
-
32
- 1. **Secrets exposure:**
33
- - Search for hardcoded API keys, passwords, tokens
34
- - Check `.env` files are gitignored
35
- - Verify no secrets in code
36
-
37
- 2. **Credential handling:**
38
- - No `console.log(apiKey)` patterns
39
- - No credentials in URL parameters
40
- - Environment variables properly accessed
41
-
42
- 3. **Authentication:**
43
- - Verify `[Authorize]` attributes on controllers
44
- - Check MSAL/Azure AD integration present
45
-
46
- ## MCP Team Integration
47
-
48
- When spawned by orchestrator:
49
- 1. Receive completion results from frontend and backend agents
50
- 2. Verify changes are on feature branches (not main)
51
- 3. Review code for security, performance, patterns
52
- 4. Generate missing tests
53
- 5. Report findings to orchestrator
54
-
55
- **IMPORTANT:** All code should be on `feature/{workitem-id}-{slug}` branches in App/ and Api/. Verify this before reviewing.
56
-
57
- ## Responsibilities
58
-
59
- 1. **Code Review** - security, performance, maintainability
60
- 2. **Test Generation** - write tests using existing frameworks
61
- 3. **Lint Check** - verify code passes linting
62
- 4. **Parallel Review** - can review App/ and Api/ in parallel
63
-
64
- ## Test Frameworks
65
-
66
- | Repo | Framework | Command |
67
- |------|-----------|---------|
68
- | App | Bun | `rtk bun test` |
69
- | Api | xUnit | `rtk dotnet test` |
70
-
71
- ## Review Checklist
72
-
73
- ### Branch Verification (FIRST)
74
- - [ ] All App/ changes are on `feature/{id}-{slug}` branch
75
- - [ ] All Api/ changes are on `feature/{id}-{slug}` branch
76
- - [ ] No changes on main branch
77
-
78
- ### Security (CRITICAL)
79
-
80
- **Secrets & Credentials:**
81
- - [ ] No hardcoded passwords, API keys, tokens, or secrets in code
82
- - [ ] No secrets in .env files (check gitignore)
83
- - [ ] No secrets in comments
84
- - [ ] No credentials in URL parameters (`?key=xxx`)
85
- - [ ] No console.log of sensitive data
86
-
87
- **Input Validation:**
88
- - [ ] Frontend forms validate input (Yup schemas)
89
- - [ ] Backend commands validate input
90
- - [ ] No raw SQL concatenation (use parameterized queries)
91
- - [ ] File uploads have size/type limits
92
-
93
- **Authentication & Authorization:**
94
- - [ ] Sensitive endpoints have `[Authorize]` attribute
95
- - [ ] Resource-level auth uses `[Can(Action, Subject)]`
96
- - [ ] MSAL/Azure AD configured in frontend
97
- - [ ] Token validation present
98
-
99
- **API Security:**
100
- - [ ] CORS configured (not `*` in production)
101
- - [ ] No sensitive data in error responses
102
- - [ ] Rate limiting present (check middleware)
103
- - [ ] Request size limits configured
104
-
105
- **Frontend Security:**
106
- - [ ] No `dangerouslySetInnerHTML` without sanitization
107
- - [ ] React handles XSS by default
108
- - [ ] Forms use react-hook-form with validation
109
-
110
- ## Output Format
111
-
112
- ```
113
- ## QA Review
114
-
115
- **Files:** <count>
116
- **Status:** pass/fail
117
-
118
- ### Issues
119
- - Critical: <count>
120
- - Warning: <count>
121
- - Info: <count>
122
-
123
- ### Tests Added
124
- - App: <count> tests
125
- - Api: <count> tests
126
-
127
- ### Lint Status
128
- - App: ✓/✗
129
- - Api: ✓/✗
130
- ```
131
-
132
- ## Constraints
133
-
134
- - Cannot push to remote
135
- - Must output findings before PR
136
- - Always use `rtk` wrapper
137
- - **Browser MCP tools are FORBIDDEN** — all Azure DevOps and GitHub interactions via `az` CLI only