bobs-workshop 3.1.1 → 3.1.4
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/tools/background-agent/manager.d.ts.map +1 -1
- package/dist/tools/background-agent/manager.js +39 -12
- package/dist/tools/manual/verify-manual.d.ts.map +1 -1
- package/dist/tools/manual/verify-manual.js +36 -6
- package/package.json +3 -2
- package/src/agents/alice.md +14 -14
- package/src/agents/bob-rev.md +13 -14
- package/src/agents/bob-send.md +14 -15
- package/src/agents/bob.md +12 -14
- package/src/agents/trace.md +2 -2
- package/src/skills/api-patterns/SKILL.md +15 -15
- package/src/skills/architecture/SKILL.md +4 -4
- package/src/skills/brainstorming/SKILL.md +18 -18
- package/src/skills/clean-code/SKILL.md +11 -11
- package/src/skills/code-review-checklist/SKILL.md +23 -23
- package/src/skills/database-design/SKILL.md +1 -1
- package/src/skills/exploration/SKILL.md +5 -5
- package/src/skills/performance/SKILL.md +1 -1
- package/src/skills/plan-writing/SKILL.md +6 -6
- package/src/skills/security/SKILL.md +13 -13
- package/src/skills/simplification/SKILL.md +2 -2
- package/src/skills/systematic-debugging/SKILL.md +6 -6
- package/src/skills/testing-patterns/SKILL.md +1 -1
- package/src/tools/background-agent/manager.ts +44 -12
- package/src/tools/manual/verify-manual.ts +44 -6
- package/src/skills/verification/SKILL.md +0 -286
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/tools/background-agent/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EAGZ,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/tools/background-agent/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EAGZ,MAAM,SAAS,CAAC;AAyCjB,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,eAAe,CAAC,CAAiC;IACzD,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkC;IAEzD,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,WAAW,GAAG,iBAAiB;IAOvD,OAAO;IAOD,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC;YAoC3C,SAAS;IAwGvB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI/C,WAAW,IAAI,cAAc,EAAE;IAI/B,eAAe,IAAI,cAAc,EAAE;IAInC,WAAW,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI;YAuClE,eAAe;YAmCf,wBAAwB;IAoCtC,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,WAAW;YAOL,gBAAgB;IAkI9B,QAAQ,IAAI,IAAI;CAmBjB"}
|
|
@@ -1,6 +1,36 @@
|
|
|
1
1
|
import { ConcurrencyManager } from "./concurrency";
|
|
2
2
|
const TASK_TTL_MS = 30 * 60 * 1000; // 30 minutes
|
|
3
3
|
const MIN_STABILITY_TIME_MS = 10 * 1000; // 10 seconds before stability detection
|
|
4
|
+
const MAX_SYSTEM_CONTENT_LENGTH = 50000; // Maximum characters for system prompt
|
|
5
|
+
const MAX_PROMPT_LENGTH = 10000; // Maximum characters for user prompt
|
|
6
|
+
/**
|
|
7
|
+
* Sanitize content for safe JSON transmission to kimi model
|
|
8
|
+
* Handles Unicode issues, control characters, and length limits
|
|
9
|
+
*/
|
|
10
|
+
function sanitizeForModel(content, maxLength = MAX_SYSTEM_CONTENT_LENGTH) {
|
|
11
|
+
if (!content)
|
|
12
|
+
return "";
|
|
13
|
+
// Step 1: Remove control characters (keep only \n, \r, \t)
|
|
14
|
+
let sanitized = content
|
|
15
|
+
.replace(/[\x00-\x08\x0B-\x0C\x0E-\x1F]/g, '')
|
|
16
|
+
// Step 2: Replace Unicode line/paragraph separators
|
|
17
|
+
.replace(/\u2028/g, '\n')
|
|
18
|
+
.replace(/\u2029/g, '\n')
|
|
19
|
+
// Step 3: Replace other problematic Unicode
|
|
20
|
+
.replace(/\uFEFF/g, '') // BOM
|
|
21
|
+
.replace(/\u200B-\u200D/g, '') // Zero-width spaces
|
|
22
|
+
// Step 4: Escape backslashes to prevent JSON issues
|
|
23
|
+
.replace(/\\/g, '\\\\')
|
|
24
|
+
// Step 5: Normalize line endings
|
|
25
|
+
.replace(/\r\n/g, '\n')
|
|
26
|
+
.replace(/\r/g, '\n');
|
|
27
|
+
// Step 6: Truncate if too long (with indicator)
|
|
28
|
+
if (sanitized.length > maxLength) {
|
|
29
|
+
const truncationMsg = "\n\n[Content truncated due to length limits]";
|
|
30
|
+
sanitized = sanitized.substring(0, maxLength - truncationMsg.length) + truncationMsg;
|
|
31
|
+
}
|
|
32
|
+
return sanitized;
|
|
33
|
+
}
|
|
4
34
|
export class BackgroundManager {
|
|
5
35
|
tasks;
|
|
6
36
|
client;
|
|
@@ -90,11 +120,8 @@ export class BackgroundManager {
|
|
|
90
120
|
const skillPath = join(this.directory, ".opencode", "skill", "bobs-workshop", skillName, "SKILL.md");
|
|
91
121
|
if (existsSync(skillPath)) {
|
|
92
122
|
let skillFile = readFileSync(skillPath, "utf8");
|
|
93
|
-
// Sanitize content
|
|
94
|
-
skillFile = skillFile
|
|
95
|
-
.replace(/[\x00-\x08\x0B-\x0C\x0E-\x1F]/g, '') // Remove control chars except \n, \r, \t
|
|
96
|
-
.replace(/\u2028/g, '\n') // Replace line separator with newline
|
|
97
|
-
.replace(/\u2029/g, '\n'); // Replace paragraph separator with newline
|
|
123
|
+
// Sanitize content for kimi model compatibility
|
|
124
|
+
skillFile = sanitizeForModel(skillFile, 10000); // Limit per skill
|
|
98
125
|
skillContent += `\n\n---\n## Skill: ${skillName}\n\n${skillFile}`;
|
|
99
126
|
}
|
|
100
127
|
}
|
|
@@ -104,17 +131,17 @@ export class BackgroundManager {
|
|
|
104
131
|
const { existsSync, readFileSync } = await import("node:fs");
|
|
105
132
|
if (existsSync(input.manual_path)) {
|
|
106
133
|
let manualContent = readFileSync(input.manual_path, "utf8");
|
|
107
|
-
// Sanitize content
|
|
108
|
-
|
|
109
|
-
manualContent = manualContent
|
|
110
|
-
.replace(/[\x00-\x08\x0B-\x0C\x0E-\x1F]/g, '') // Remove control chars except \n, \r, \t
|
|
111
|
-
.replace(/\u2028/g, '\n') // Replace line separator with newline
|
|
112
|
-
.replace(/\u2029/g, '\n'); // Replace paragraph separator with newline
|
|
134
|
+
// Sanitize content for kimi model compatibility
|
|
135
|
+
manualContent = sanitizeForModel(manualContent, 30000); // Larger limit for manual
|
|
113
136
|
skillContent = skillContent
|
|
114
137
|
? `${skillContent}\n\n## MANUAL Context:\n${manualContent}`
|
|
115
138
|
: manualContent;
|
|
116
139
|
}
|
|
117
140
|
}
|
|
141
|
+
// Final sanitization of combined skill content
|
|
142
|
+
skillContent = sanitizeForModel(skillContent, MAX_SYSTEM_CONTENT_LENGTH);
|
|
143
|
+
// Sanitize user prompt to prevent JSON issues
|
|
144
|
+
const sanitizedPrompt = sanitizeForModel(input.prompt, MAX_PROMPT_LENGTH);
|
|
118
145
|
// Fire-and-forget prompt
|
|
119
146
|
this.client.session.prompt({
|
|
120
147
|
path: { id: sessionID },
|
|
@@ -126,7 +153,7 @@ export class BackgroundManager {
|
|
|
126
153
|
task: false,
|
|
127
154
|
delegate_task: false,
|
|
128
155
|
},
|
|
129
|
-
parts: [{ type: "text", text:
|
|
156
|
+
parts: [{ type: "text", text: sanitizedPrompt }],
|
|
130
157
|
},
|
|
131
158
|
}).catch((error) => {
|
|
132
159
|
console.error("[background-agent] Prompt error:", error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-manual.d.ts","sourceRoot":"","sources":["../../../src/tools/manual/verify-manual.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"verify-manual.d.ts","sourceRoot":"","sources":["../../../src/tools/manual/verify-manual.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAmCrE,QAAA,MAAM,gBAAgB,EAAE,cA4DtB,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
|
|
@@ -1,4 +1,33 @@
|
|
|
1
1
|
import { tool } from "@opencode-ai/plugin/tool";
|
|
2
|
+
const MAX_SYSTEM_CONTENT_LENGTH = 50000;
|
|
3
|
+
/**
|
|
4
|
+
* Sanitize content for safe JSON transmission to kimi model
|
|
5
|
+
* Handles Unicode issues, control characters, and length limits
|
|
6
|
+
*/
|
|
7
|
+
function sanitizeForModel(content, maxLength = MAX_SYSTEM_CONTENT_LENGTH) {
|
|
8
|
+
if (!content)
|
|
9
|
+
return "";
|
|
10
|
+
// Step 1: Remove control characters (keep only \n, \r, \t)
|
|
11
|
+
let sanitized = content
|
|
12
|
+
.replace(/[\x00-\x08\x0B-\x0C\x0E-\x1F]/g, '')
|
|
13
|
+
// Step 2: Replace Unicode line/paragraph separators
|
|
14
|
+
.replace(/\u2028/g, '\n')
|
|
15
|
+
.replace(/\u2029/g, '\n')
|
|
16
|
+
// Step 3: Replace other problematic Unicode
|
|
17
|
+
.replace(/\uFEFF/g, '') // BOM
|
|
18
|
+
.replace(/[\u200B-\u200D]/g, '') // Zero-width spaces
|
|
19
|
+
// Step 4: Escape backslashes to prevent JSON issues
|
|
20
|
+
.replace(/\\/g, '\\\\')
|
|
21
|
+
// Step 5: Normalize line endings
|
|
22
|
+
.replace(/\r\n/g, '\n')
|
|
23
|
+
.replace(/\r/g, '\n');
|
|
24
|
+
// Step 6: Truncate if too long (with indicator)
|
|
25
|
+
if (sanitized.length > maxLength) {
|
|
26
|
+
const truncationMsg = "\n\n[Content truncated due to length limits]";
|
|
27
|
+
sanitized = sanitized.substring(0, maxLength - truncationMsg.length) + truncationMsg;
|
|
28
|
+
}
|
|
29
|
+
return sanitized;
|
|
30
|
+
}
|
|
2
31
|
const VerifyManualTool = tool({
|
|
3
32
|
description: "Run bob-rev verification in background for a MANUAL",
|
|
4
33
|
args: {
|
|
@@ -22,22 +51,23 @@ const VerifyManualTool = tool({
|
|
|
22
51
|
let manualContent = "";
|
|
23
52
|
if (existsSync(args.manual_path)) {
|
|
24
53
|
manualContent = readFileSync(args.manual_path, "utf8");
|
|
25
|
-
// Sanitize content
|
|
26
|
-
manualContent = manualContent
|
|
27
|
-
.replace(/[\x00-\x08\x0B-\x0C\x0E-\x1F]/g, '') // Remove control chars except \n, \r, \t
|
|
28
|
-
.replace(/\u2028/g, '\n') // Replace line separator with newline
|
|
29
|
-
.replace(/\u2029/g, '\n'); // Replace paragraph separator with newline
|
|
54
|
+
// Sanitize content for kimi model compatibility
|
|
55
|
+
manualContent = sanitizeForModel(manualContent, 30000);
|
|
30
56
|
}
|
|
31
57
|
const skillPath = join(directory, ".opencode", "agent", "bobs-workshop", "bob-rev.md");
|
|
32
58
|
let agentPrompt = "You are bob-rev, a reviewer agent that verifies implementation against MANUAL requirements.";
|
|
33
59
|
if (existsSync(skillPath)) {
|
|
34
60
|
agentPrompt = readFileSync(skillPath, "utf8");
|
|
61
|
+
// Sanitize agent prompt as well
|
|
62
|
+
agentPrompt = sanitizeForModel(agentPrompt, 20000);
|
|
35
63
|
}
|
|
64
|
+
// Build and sanitize system prompt
|
|
65
|
+
const systemPrompt = sanitizeForModel(`${agentPrompt}\n\n## MANUAL to Verify:\n${manualContent}`, MAX_SYSTEM_CONTENT_LENGTH);
|
|
36
66
|
await client.session.prompt({
|
|
37
67
|
path: { id: createData.data.id },
|
|
38
68
|
body: {
|
|
39
69
|
agent: "bob-rev",
|
|
40
|
-
system:
|
|
70
|
+
system: systemPrompt,
|
|
41
71
|
tools: {
|
|
42
72
|
task: false,
|
|
43
73
|
delegate_task: false,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bobs-workshop",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.4",
|
|
4
4
|
"description": "MANUAL-driven development with background agents for OpenCode",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/plugins/bobs-workshop.js",
|
|
@@ -28,7 +28,8 @@
|
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@opencode-ai/plugin": "^1.1.36",
|
|
31
|
-
"jsonc-parser": "^3.2.1"
|
|
31
|
+
"jsonc-parser": "^3.2.1",
|
|
32
|
+
"skills": "^1.3.1"
|
|
32
33
|
},
|
|
33
34
|
"devDependencies": {
|
|
34
35
|
"@types/node": "^20.0.0",
|
package/src/agents/alice.md
CHANGED
|
@@ -269,9 +269,9 @@ All requirements covered in one manual.
|
|
|
269
269
|
|
|
270
270
|
**MANUAL Structure**:
|
|
271
271
|
```markdown
|
|
272
|
-
#
|
|
272
|
+
# [MANUAL] MANUAL: [Feature Name]
|
|
273
273
|
|
|
274
|
-
##
|
|
274
|
+
## Executive Summary
|
|
275
275
|
**Feature**: [Concise description]
|
|
276
276
|
**Business Value**: [Why this matters]
|
|
277
277
|
**Effort Estimate**: [T-shirt size: S/M/L/XL]
|
|
@@ -282,7 +282,7 @@ All requirements covered in one manual.
|
|
|
282
282
|
**Dependencies**: [Other features, external services, other manuals]
|
|
283
283
|
**Part of Multi-Manual**: [Yes/No] - If Yes, specify: [folder path]
|
|
284
284
|
|
|
285
|
-
##
|
|
285
|
+
## [DOC] Product Specifications
|
|
286
286
|
|
|
287
287
|
### Problem Statement
|
|
288
288
|
[Clear articulation of the problem being solved]
|
|
@@ -308,24 +308,24 @@ All requirements covered in one manual.
|
|
|
308
308
|
- [What we explicitly will NOT do] - Reason: [Why deferred]
|
|
309
309
|
- [What we explicitly will NOT do] - Reason: [Why deferred]
|
|
310
310
|
|
|
311
|
-
##
|
|
311
|
+
## [ARCH] Architecture Analysis
|
|
312
312
|
|
|
313
|
-
###
|
|
313
|
+
### [DB] Database Architecture
|
|
314
314
|
[From Phase 2 exploration]
|
|
315
315
|
|
|
316
|
-
###
|
|
316
|
+
### [TOOL] Backend Architecture
|
|
317
317
|
[From Phase 2 exploration]
|
|
318
318
|
|
|
319
|
-
###
|
|
319
|
+
### [LINK] Integration Architecture
|
|
320
320
|
[From Phase 2 exploration]
|
|
321
321
|
|
|
322
|
-
###
|
|
322
|
+
### [UI] Frontend Architecture
|
|
323
323
|
[From Phase 2 exploration]
|
|
324
324
|
|
|
325
|
-
###
|
|
325
|
+
### [TARGET] UI/UX Considerations
|
|
326
326
|
[From Phase 2 exploration]
|
|
327
327
|
|
|
328
|
-
##
|
|
328
|
+
## [LAUNCH] Implementation Plan
|
|
329
329
|
|
|
330
330
|
### Task Breakdown (Idempotent Tasks)
|
|
331
331
|
|
|
@@ -372,16 +372,16 @@ DB-001 → BE-001 → FE-001 → TEST-001
|
|
|
372
372
|
### Critical Path
|
|
373
373
|
[Sequence of tasks determining minimum duration]
|
|
374
374
|
|
|
375
|
-
##
|
|
375
|
+
## Execution Logs
|
|
376
376
|
[To be filled by bob]
|
|
377
377
|
|
|
378
|
-
##
|
|
378
|
+
## [SEARCH] Review Notes
|
|
379
379
|
[To be filled by bob-rev]
|
|
380
380
|
|
|
381
|
-
##
|
|
381
|
+
## [BUG] Debug Logs
|
|
382
382
|
[To be filled by trace]
|
|
383
383
|
|
|
384
|
-
##
|
|
384
|
+
## YES Verification Logs
|
|
385
385
|
[To be filled by bob-send]
|
|
386
386
|
|
|
387
387
|
## 🤝 Agent Handoffs
|
package/src/agents/bob-rev.md
CHANGED
|
@@ -54,7 +54,6 @@ Issue a PASS or FAIL verdict with evidence using parallel background analysis.
|
|
|
54
54
|
- clean-code - Use when evaluating code maintainability and best practices
|
|
55
55
|
- code-review-checklist - Use when conducting thorough code reviews
|
|
56
56
|
- testing-patterns - Use when verifying test coverage and test quality
|
|
57
|
-
- verification - Use when validating implementation against MANUAL specifications
|
|
58
57
|
|
|
59
58
|
## Custom Tools
|
|
60
59
|
- background_agent - Use for launching parallel verification tasks (security, performance, quality)
|
|
@@ -87,9 +86,9 @@ Verify:
|
|
|
87
86
|
|
|
88
87
|
| Type | ID | Status | Evidence |
|
|
89
88
|
|------|-----|--------|----------|
|
|
90
|
-
| FR | FR-001 |
|
|
91
|
-
| FR | FR-002 |
|
|
92
|
-
| US | US-001 |
|
|
89
|
+
| FR | FR-001 | YES/NO | [File:line] |
|
|
90
|
+
| FR | FR-002 | YES/NO | [File:line] |
|
|
91
|
+
| US | US-001 | YES/NO | [File:line] |
|
|
93
92
|
|
|
94
93
|
### Scope Creep Check
|
|
95
94
|
- [ ] No unauthorized features added
|
|
@@ -183,14 +182,14 @@ const qualityResult = background_output({ task_id: "[quality_task_id]" });
|
|
|
183
182
|
**Step 2: Apply Decision Rules**
|
|
184
183
|
|
|
185
184
|
**PASS requires**:
|
|
186
|
-
-
|
|
187
|
-
-
|
|
188
|
-
-
|
|
185
|
+
- YES Manual compliance (from Phase 1)
|
|
186
|
+
- YES No critical security issues
|
|
187
|
+
- YES No more than 2 high-severity issues total
|
|
189
188
|
|
|
190
189
|
**FAIL if**:
|
|
191
|
-
-
|
|
192
|
-
-
|
|
193
|
-
-
|
|
190
|
+
- NO Any manual compliance violation
|
|
191
|
+
- NO Any critical security vulnerability
|
|
192
|
+
- NO More than 2 high-severity issues
|
|
194
193
|
|
|
195
194
|
**Evidence-Based Reporting Criteria**:
|
|
196
195
|
|
|
@@ -220,9 +219,9 @@ Use `manual_update` tool:
|
|
|
220
219
|
```typescript
|
|
221
220
|
manual_update({
|
|
222
221
|
manual_path: "manuals/MANUAL-[date]-[feature].md",
|
|
223
|
-
section: "
|
|
222
|
+
section: "[SEARCH] Review Notes",
|
|
224
223
|
content: `
|
|
225
|
-
##
|
|
224
|
+
## [SEARCH] Review Notes
|
|
226
225
|
|
|
227
226
|
**Reviewed**: [YYYY-MM-DD HH:MM]
|
|
228
227
|
**Reviewer**: bob-rev
|
|
@@ -251,7 +250,7 @@ manual_update({
|
|
|
251
250
|
|
|
252
251
|
### Decision
|
|
253
252
|
|
|
254
|
-
##
|
|
253
|
+
## [TARGET] VERDICT: [PASS YES / FAIL NO]
|
|
255
254
|
|
|
256
255
|
**Rationale**: [1-2 sentence explanation]
|
|
257
256
|
`
|
|
@@ -266,7 +265,7 @@ manual_update({
|
|
|
266
265
|
**VERIFY Phase Complete**
|
|
267
266
|
|
|
268
267
|
**MANUAL**: \`manuals/MANUAL-[date]-[feature].md\`
|
|
269
|
-
**Verdict**: [
|
|
268
|
+
**Verdict**: [YES PASS / NO FAIL]
|
|
270
269
|
|
|
271
270
|
[If PASS]
|
|
272
271
|
All criteria met. Ready for SEND phase.
|
package/src/agents/bob-send.md
CHANGED
|
@@ -40,7 +40,6 @@ Run lint, test, and build checks. If all pass, write commit message and commit t
|
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
## Available Skills
|
|
43
|
-
- verification - Use when running final quality checks before shipping
|
|
44
43
|
|
|
45
44
|
## Custom Tools
|
|
46
45
|
- manual_update - Use when writing Verification Logs to MANUAL after successful commit
|
|
@@ -145,9 +144,9 @@ Use `manual_update` tool:
|
|
|
145
144
|
```typescript
|
|
146
145
|
manual_update({
|
|
147
146
|
manual_path: "manuals/MANUAL-[date]-[feature].md",
|
|
148
|
-
section: "
|
|
147
|
+
section: "YES Verification Logs",
|
|
149
148
|
content: `
|
|
150
|
-
##
|
|
149
|
+
## YES Verification Logs
|
|
151
150
|
|
|
152
151
|
**Shipped**: [YYYY-MM-DD HH:MM]
|
|
153
152
|
**Reviewer**: bob-send
|
|
@@ -156,9 +155,9 @@ manual_update({
|
|
|
156
155
|
### Check Results
|
|
157
156
|
| Check | Status | Notes |
|
|
158
157
|
|-------|--------|-------|
|
|
159
|
-
| Lint |
|
|
160
|
-
| Tests |
|
|
161
|
-
| Build |
|
|
158
|
+
| Lint | YES PASS | 0 errors |
|
|
159
|
+
| Tests | YES PASS | All tests passed |
|
|
160
|
+
| Build | YES PASS | Build successful |
|
|
162
161
|
|
|
163
162
|
### Commit
|
|
164
163
|
**Commit Hash**: [hash]
|
|
@@ -169,7 +168,7 @@ manual_update({
|
|
|
169
168
|
${commitMessage}
|
|
170
169
|
\`\`\`
|
|
171
170
|
|
|
172
|
-
**Feature shipped successfully!**
|
|
171
|
+
**Feature shipped successfully!** [LAUNCH]
|
|
173
172
|
`
|
|
174
173
|
});
|
|
175
174
|
```
|
|
@@ -187,12 +186,12 @@ ${commitMessage}
|
|
|
187
186
|
**Commit**: [hash]
|
|
188
187
|
|
|
189
188
|
### Summary
|
|
190
|
-
- Lint:
|
|
191
|
-
- Tests:
|
|
192
|
-
- Build:
|
|
193
|
-
- Commit:
|
|
189
|
+
- Lint: YES
|
|
190
|
+
- Tests: YES
|
|
191
|
+
- Build: YES
|
|
192
|
+
- Commit: YES
|
|
194
193
|
|
|
195
|
-
**Feature shipped to current branch!**
|
|
194
|
+
**Feature shipped to current branch!** [LAUNCH]
|
|
196
195
|
```
|
|
197
196
|
|
|
198
197
|
---
|
|
@@ -240,9 +239,9 @@ ${commitMessage}
|
|
|
240
239
|
```
|
|
241
240
|
|
|
242
241
|
CHECKS PASSED
|
|
243
|
-
Lint:
|
|
244
|
-
Tests:
|
|
245
|
-
Build:
|
|
242
|
+
Lint: YES
|
|
243
|
+
Tests: YES
|
|
244
|
+
Build: YES
|
|
246
245
|
Commit: [hash]
|
|
247
246
|
Branch: [current branch]
|
|
248
247
|
Verification Logs: Updated
|
package/src/agents/bob.md
CHANGED
|
@@ -22,8 +22,7 @@ tools:
|
|
|
22
22
|
list_background_tasks: true
|
|
23
23
|
background_output: true
|
|
24
24
|
background_cancel: true
|
|
25
|
-
|
|
26
|
-
lsp_goto_definition: true
|
|
25
|
+
lsp_goto_definition: true
|
|
27
26
|
lsp_find_references: true
|
|
28
27
|
lsp_symbols: true
|
|
29
28
|
lsp_diagnostics: true
|
|
@@ -53,7 +52,6 @@ Implementation and orchestration agent.
|
|
|
53
52
|
- list_background_tasks - Use to check status of running background tasks
|
|
54
53
|
- background_output - Use to collect results from completed background tasks
|
|
55
54
|
- background_cancel - Use to cancel running background tasks
|
|
56
|
-
- verify_manual - Use to verify MANUAL completion and compliance
|
|
57
55
|
|
|
58
56
|
---
|
|
59
57
|
|
|
@@ -86,7 +84,7 @@ Implement MANUAL-defined tasks exactly and route work to verification and shippi
|
|
|
86
84
|
## MANUAL Validation
|
|
87
85
|
|
|
88
86
|
**MANUAL**: manuals/MANUAL-[date]-[feature].md
|
|
89
|
-
**Validation Status**:
|
|
87
|
+
**Validation Status**: YES VALID / NO INVALID
|
|
90
88
|
|
|
91
89
|
**Required Sections**:
|
|
92
90
|
- [ ] Executive Summary
|
|
@@ -174,7 +172,7 @@ DB-001 → BE-001 → FE-001 → TEST-001
|
|
|
174
172
|
|
|
175
173
|
#### Step 1: Announce Layer Start
|
|
176
174
|
```markdown
|
|
177
|
-
###
|
|
175
|
+
### Layer: [Layer Name]
|
|
178
176
|
**Started**: [YYYY-MM-DD HH:MM]
|
|
179
177
|
**Tasks to Execute**: [N]
|
|
180
178
|
**Dependencies Met**: [Yes/No]
|
|
@@ -192,31 +190,31 @@ DB-001 → BE-001 → FE-001 → TEST-001
|
|
|
192
190
|
|
|
193
191
|
**Log Format**:
|
|
194
192
|
```markdown
|
|
195
|
-
###
|
|
193
|
+
### YES Task: [TASK-ID] - [Description]
|
|
196
194
|
**Completed**: [YYYY-MM-DD HH:MM]
|
|
197
195
|
**Files Modified**:
|
|
198
196
|
- `[file1.ts]`: [What changed]
|
|
199
197
|
- `[file2.ts]`: [What changed]
|
|
200
198
|
**Implementation Notes**: [Any relevant details]
|
|
201
|
-
**Idempotency Verified**:
|
|
199
|
+
**Idempotency Verified**: YES
|
|
202
200
|
```
|
|
203
201
|
|
|
204
202
|
**On Task Failure**:
|
|
205
203
|
```markdown
|
|
206
|
-
###
|
|
204
|
+
### NO Task Failed: [TASK-ID] - [Description]
|
|
207
205
|
**Failed**: [YYYY-MM-DD HH:MM]
|
|
208
206
|
**Error**: [Exact error message]
|
|
209
207
|
**Files Affected**: [List of files]
|
|
210
208
|
**Attempted Approach**: [What was tried]
|
|
211
209
|
|
|
212
|
-
|
|
210
|
+
WARNING LAYER EXECUTION HALTED - Awaiting intervention
|
|
213
211
|
```
|
|
214
212
|
|
|
215
213
|
**STOP execution immediately on task failure.**
|
|
216
214
|
|
|
217
215
|
#### Step 3: Mark Layer Complete
|
|
218
216
|
```markdown
|
|
219
|
-
###
|
|
217
|
+
### YES Layer Complete: [Layer Name]
|
|
220
218
|
**Completed**: [YYYY-MM-DD HH:MM]
|
|
221
219
|
**Tasks Completed**: [N/N]
|
|
222
220
|
**Files Modified**: [Total count]
|
|
@@ -247,18 +245,18 @@ background_output(task_id="[task_id_from_delegate]")
|
|
|
247
245
|
|
|
248
246
|
**If PASS**:
|
|
249
247
|
```markdown
|
|
250
|
-
###
|
|
248
|
+
### [SEARCH] Layer Verification: PASS
|
|
251
249
|
**Layer**: [Layer Name]
|
|
252
250
|
**Verified**: [YYYY-MM-DD HH:MM]
|
|
253
251
|
**Reviewer**: bob-rev
|
|
254
252
|
**Issues Found**: None
|
|
255
253
|
|
|
256
|
-
|
|
254
|
+
YES Proceed to next layer
|
|
257
255
|
```
|
|
258
256
|
|
|
259
257
|
**If FAIL**:
|
|
260
258
|
```markdown
|
|
261
|
-
###
|
|
259
|
+
### [SEARCH] Layer Verification: FAIL
|
|
262
260
|
**Layer**: [Layer Name]
|
|
263
261
|
**Verified**: [YYYY-MM-DD HH:MM]
|
|
264
262
|
**Reviewer**: bob-rev
|
|
@@ -268,7 +266,7 @@ background_output(task_id="[task_id_from_delegate]")
|
|
|
268
266
|
1. [Issue 1] - [File:line]
|
|
269
267
|
2. [Issue 2] - [File:line]
|
|
270
268
|
|
|
271
|
-
|
|
269
|
+
WARNING LAYER REQUIRES FIXES - Awaiting intervention
|
|
272
270
|
```
|
|
273
271
|
|
|
274
272
|
**On Layer Verification FAIL**:
|
package/src/agents/trace.md
CHANGED
|
@@ -76,7 +76,7 @@ When invoked, you receive:
|
|
|
76
76
|
|
|
77
77
|
**Issue**: [Issue description or TASK-ID]
|
|
78
78
|
**MANUAL**: manuals/MANUAL-[date]-[feature].md
|
|
79
|
-
**Input Status**:
|
|
79
|
+
**Input Status**: YES VALID / NO INVALID
|
|
80
80
|
|
|
81
81
|
**Validation Checklist**:
|
|
82
82
|
- [ ] MANUAL path exists and is readable
|
|
@@ -322,7 +322,7 @@ Use `edit` tool to apply minimal changes:
|
|
|
322
322
|
You MUST update the MANUAL's Debug Logs section:
|
|
323
323
|
|
|
324
324
|
```markdown
|
|
325
|
-
##
|
|
325
|
+
## [BUG] Debug Logs
|
|
326
326
|
|
|
327
327
|
### Trace Session: [YYYY-MM-DD HH:MM]
|
|
328
328
|
**Trace Agent**: trace
|
|
@@ -35,11 +35,11 @@ description: API design principles and decision-making. REST vs GraphQL vs tRPC
|
|
|
35
35
|
### Decision Matrix
|
|
36
36
|
| Factor | REST | GraphQL | tRPC | gRPC |
|
|
37
37
|
|--------|-------|----------|-------|-------|
|
|
38
|
-
| Simplicity |
|
|
39
|
-
| Type Safety |
|
|
40
|
-
| Performance |
|
|
41
|
-
| Ecosystem |
|
|
42
|
-
| Caching |
|
|
38
|
+
| Simplicity | YES High | WARNING Medium | YES High | WARNING Medium |
|
|
39
|
+
| Type Safety | NO Low | WARNING Medium | YES High | YES High |
|
|
40
|
+
| Performance | WARNING Medium | WARNING Medium | YES High | YES High |
|
|
41
|
+
| Ecosystem | YES Large | YES Large | WARNING Growing | YES Large |
|
|
42
|
+
| Caching | YES Easy | NO Hard | NO Hard | WARNING Medium |
|
|
43
43
|
```
|
|
44
44
|
|
|
45
45
|
---
|
|
@@ -50,20 +50,20 @@ description: API design principles and decision-making. REST vs GraphQL vs tRPC
|
|
|
50
50
|
|
|
51
51
|
| Rule | Example |
|
|
52
52
|
|------|---------|
|
|
53
|
-
| **Use nouns, not verbs** |
|
|
54
|
-
| **Plural nouns** |
|
|
55
|
-
| **Nest resources** |
|
|
56
|
-
| **Lowercase with hyphens** |
|
|
53
|
+
| **Use nouns, not verbs** | YES `/users`, NO `/getUsers` |
|
|
54
|
+
| **Plural nouns** | YES `/users`, NO `/user` |
|
|
55
|
+
| **Nest resources** | YES `/users/123/posts`, NO `/posts?user=123` |
|
|
56
|
+
| **Lowercase with hyphens** | YES `/user-preferences`, NO `/userPreferences` |
|
|
57
57
|
|
|
58
58
|
### HTTP Methods
|
|
59
59
|
|
|
60
60
|
| Method | Use | Safe | Idempotent |
|
|
61
61
|
|--------|-----|-------|------------|
|
|
62
|
-
| **GET** | Read resources |
|
|
63
|
-
| **POST** | Create resource |
|
|
64
|
-
| **PUT** | Replace resource |
|
|
65
|
-
| **PATCH** | Partial update |
|
|
66
|
-
| **DELETE** | Delete resource |
|
|
62
|
+
| **GET** | Read resources | YES Yes | YES Yes |
|
|
63
|
+
| **POST** | Create resource | NO No | NO No |
|
|
64
|
+
| **PUT** | Replace resource | NO No | YES Yes |
|
|
65
|
+
| **PATCH** | Partial update | NO No | NO No |
|
|
66
|
+
| **DELETE** | Delete resource | NO No | YES Yes |
|
|
67
67
|
|
|
68
68
|
### Status Codes
|
|
69
69
|
|
|
@@ -304,7 +304,7 @@ This skill is used by **alice (architect)** agent during PLAN phase and **bob-en
|
|
|
304
304
|
|
|
305
305
|
Add API section to MANUAL:
|
|
306
306
|
```markdown
|
|
307
|
-
##
|
|
307
|
+
## [ARCH] Architecture Analysis
|
|
308
308
|
|
|
309
309
|
### API Design
|
|
310
310
|
|
|
@@ -10,7 +10,7 @@ metadata:
|
|
|
10
10
|
|
|
11
11
|
> "Requirements drive architecture. Trade-offs inform decisions. ADRs capture rationale."
|
|
12
12
|
|
|
13
|
-
##
|
|
13
|
+
## [TARGET] Selective Reading Rule
|
|
14
14
|
|
|
15
15
|
**Read ONLY files relevant to the request!** Check the content map, find what you need.
|
|
16
16
|
|
|
@@ -24,7 +24,7 @@ metadata:
|
|
|
24
24
|
|
|
25
25
|
---
|
|
26
26
|
|
|
27
|
-
##
|
|
27
|
+
## [LINK] Related Skills
|
|
28
28
|
|
|
29
29
|
| Skill | Use For |
|
|
30
30
|
|-------|---------|
|
|
@@ -149,7 +149,7 @@ Before finalizing architecture:
|
|
|
149
149
|
|
|
150
150
|
## Anti-Patterns
|
|
151
151
|
|
|
152
|
-
|
|
|
152
|
+
| NO Don't | YES Do |
|
|
153
153
|
|----------|-------|
|
|
154
154
|
| Start with microservices | Start with monolith, split when needed |
|
|
155
155
|
| Use complex patterns because "cool" | Use simplest solution that works |
|
|
@@ -168,7 +168,7 @@ This skill is used by **alice (architect)** agent during PLAN phase.
|
|
|
168
168
|
|
|
169
169
|
Add architecture section to MANUAL:
|
|
170
170
|
```markdown
|
|
171
|
-
##
|
|
171
|
+
## [ARCH] Architecture Analysis
|
|
172
172
|
|
|
173
173
|
### Project Classification
|
|
174
174
|
- **Type:** [MVP / SaaS / Enterprise / Internal Tool]
|