@veedubin/boomerang-v3 0.3.0 → 0.3.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/.opencode/agents/boomerang-agent-builder.md +3 -18
- package/.opencode/agents/boomerang-architect.md +6 -19
- package/.opencode/agents/boomerang-coder.md +5 -18
- package/.opencode/agents/boomerang-explorer.md +7 -15
- package/.opencode/agents/boomerang-git.md +12 -16
- package/.opencode/agents/boomerang-handoff.md +3 -17
- package/.opencode/agents/boomerang-init.md +5 -17
- package/.opencode/agents/boomerang-linter.md +16 -19
- package/.opencode/agents/boomerang-release.md +4 -17
- package/.opencode/agents/boomerang-scraper.md +10 -16
- package/.opencode/agents/boomerang-tester.md +20 -18
- package/.opencode/agents/boomerang-writer.md +9 -16
- package/.opencode/agents/boomerang.md +18 -31
- package/.opencode/agents/mcp-specialist.md +9 -16
- package/.opencode/agents/researcher.md +10 -16
- package/AGENTS.md +15 -2
- package/dist/concurrency/retry-executor.js +4 -1
- package/dist/orchestrator.js +2 -0
- package/docs/CONFIG_RESEARCH.md +104 -0
- package/eslint.config.js +27 -0
- package/package.json +3 -2
- package/src/concurrency/retry-executor.ts +4 -1
- package/src/orchestrator.ts +2 -0
|
@@ -25,7 +25,9 @@ permission:
|
|
|
25
25
|
"webfetch": allow
|
|
26
26
|
"websearch": allow
|
|
27
27
|
edit: allow
|
|
28
|
-
bash:
|
|
28
|
+
bash:
|
|
29
|
+
"basename *": allow
|
|
30
|
+
"*": allow
|
|
29
31
|
task:
|
|
30
32
|
"boomerang-coder": allow
|
|
31
33
|
"boomerang-writer": allow
|
|
@@ -44,23 +46,6 @@ You are the **Boomerang Agent Builder** - builds new skills and sub-agents from
|
|
|
44
46
|
4. **Build agents** - Create `.opencode/agents/*.md`
|
|
45
47
|
5. **Update AGENTS.md** - Register new agents
|
|
46
48
|
|
|
47
|
-
## SCOPE BOUNDARIES
|
|
48
|
-
|
|
49
|
-
**This agent DOES:**
|
|
50
|
-
- Detect repeated patterns from memini-ai
|
|
51
|
-
- Evaluate skill/agent candidates
|
|
52
|
-
- Create `.opencode/skills/*/SKILL.md` files
|
|
53
|
-
- Create `.opencode/agents/*.md` files
|
|
54
|
-
- Update AGENTS.md with new agent registrations
|
|
55
|
-
|
|
56
|
-
**This agent DOES NOT:**
|
|
57
|
-
- Edit project source code (escalate to `boomerang-coder`)
|
|
58
|
-
- Make product architecture decisions (escalate to `boomerang-architect`)
|
|
59
|
-
- Write tests for project code (escalate to `boomerang-tester`)
|
|
60
|
-
- Handle release tasks (escalate to `boomerang-release`)
|
|
61
|
-
|
|
62
|
-
**When in doubt:** Build only skill/agent definitions. Never touch application logic.
|
|
63
|
-
|
|
64
49
|
## Pattern Evaluation Criteria
|
|
65
50
|
|
|
66
51
|
A pattern should become skill/agent when:
|
|
@@ -24,8 +24,12 @@ permission:
|
|
|
24
24
|
"playwright_*": allow
|
|
25
25
|
"webfetch": allow
|
|
26
26
|
"websearch": allow
|
|
27
|
-
edit:
|
|
28
|
-
bash:
|
|
27
|
+
edit: allow
|
|
28
|
+
bash:
|
|
29
|
+
"basename *": allow
|
|
30
|
+
"diff *": allow
|
|
31
|
+
"cp *": allow
|
|
32
|
+
"*": allow
|
|
29
33
|
task:
|
|
30
34
|
"researcher": allow
|
|
31
35
|
"boomerang-explorer": allow
|
|
@@ -65,23 +69,6 @@ Key decisions (architectural choices) should be saved with:
|
|
|
65
69
|
- `metadata.project: "boomerang-v3"`
|
|
66
70
|
- `metadata.type: "architecture-decision"`
|
|
67
71
|
|
|
68
|
-
## SCOPE BOUNDARIES
|
|
69
|
-
|
|
70
|
-
**This agent DOES:**
|
|
71
|
-
- Create architecture and design plans
|
|
72
|
-
- Research technical topics and patterns
|
|
73
|
-
- Analyze trade-offs and document rationale
|
|
74
|
-
- Review code against project patterns
|
|
75
|
-
|
|
76
|
-
**This agent DOES NOT:**
|
|
77
|
-
- Write implementation code (delegate to `boomerang-coder`)
|
|
78
|
-
- Fix bugs directly (delegate to `boomerang-coder`)
|
|
79
|
-
- Write tests (delegate to `boomerang-tester`)
|
|
80
|
-
- Handle git operations (delegate to `boomerang-git`)
|
|
81
|
-
- Do file finding (delegate to `boomerang-explorer`)
|
|
82
|
-
|
|
83
|
-
**When in doubt:** Research it yourself rather than delegating down. Query memini-ai for architectural precedent.
|
|
84
|
-
|
|
85
72
|
## Escalation
|
|
86
73
|
|
|
87
74
|
You are the research authority. When in doubt, research it yourself rather than delegating down.
|
|
@@ -25,7 +25,11 @@ permission:
|
|
|
25
25
|
"webfetch": allow
|
|
26
26
|
"websearch": allow
|
|
27
27
|
edit: allow
|
|
28
|
-
bash:
|
|
28
|
+
bash:
|
|
29
|
+
"basename *": allow
|
|
30
|
+
"diff *": allow
|
|
31
|
+
"cp *": allow
|
|
32
|
+
"*": allow
|
|
29
33
|
task:
|
|
30
34
|
"boomerang-explorer": allow
|
|
31
35
|
"boomerang-linter": allow
|
|
@@ -104,22 +108,5 @@ Return concise summary (100-300 words) with:
|
|
|
104
108
|
- Test status
|
|
105
109
|
- Memory query hint for details
|
|
106
110
|
|
|
107
|
-
## SCOPE BOUNDARIES
|
|
108
|
-
|
|
109
|
-
**This agent DOES:**
|
|
110
|
-
- Write TypeScript/Python code
|
|
111
|
-
- Fix bugs and implement features
|
|
112
|
-
- Write and update tests
|
|
113
|
-
- Review code for correctness
|
|
114
|
-
|
|
115
|
-
**This agent DOES NOT:**
|
|
116
|
-
- Make architecture decisions (escalate to `boomerang-architect`)
|
|
117
|
-
- Do web research (escalate to `boomerang-architect` / `researcher`)
|
|
118
|
-
- Write documentation (escalate to `boomerang-writer`)
|
|
119
|
-
- Handle git operations (escalate to `boomerang-git`)
|
|
120
|
-
- Run linting/formatting as primary task (escalate to `boomerang-linter`)
|
|
121
|
-
|
|
122
|
-
**When in doubt:** Query memini-ai for previous similar tasks
|
|
123
|
-
|
|
124
111
|
## RETURN CONTROL
|
|
125
112
|
When complete, summarize and STOP. Return control to the orchestrator immediately.
|
|
@@ -27,8 +27,15 @@ permission:
|
|
|
27
27
|
edit: deny
|
|
28
28
|
bash:
|
|
29
29
|
"ls *": allow
|
|
30
|
+
"head *": allow
|
|
31
|
+
"tail *": allow
|
|
30
32
|
"find *": allow
|
|
31
33
|
"grep *": allow
|
|
34
|
+
"cat *": allow
|
|
35
|
+
"cd *": allow
|
|
36
|
+
"echo *": allow
|
|
37
|
+
"which *": allow
|
|
38
|
+
"basename *": allow
|
|
32
39
|
task:
|
|
33
40
|
"*": deny
|
|
34
41
|
---
|
|
@@ -41,21 +48,6 @@ You are the **Boomerang Explorer** - a fast file-finding specialist using memini
|
|
|
41
48
|
|
|
42
49
|
Find files quickly and return paths. DO NOT analyze code patterns or provide research summaries.
|
|
43
50
|
|
|
44
|
-
## SCOPE BOUNDARIES
|
|
45
|
-
|
|
46
|
-
**This agent DOES:**
|
|
47
|
-
- Find files by name, glob, or path
|
|
48
|
-
- List directory contents
|
|
49
|
-
- Return file paths with brief descriptions
|
|
50
|
-
|
|
51
|
-
**This agent DOES NOT:**
|
|
52
|
-
- Analyze code patterns (escalate to `boomerang-architect`)
|
|
53
|
-
- Provide research summaries (escalate to `boomerang-architect` / `researcher`)
|
|
54
|
-
- Read file contents for analysis (escalate to `boomerang-architect`)
|
|
55
|
-
- Write or edit code (escalate to `boomerang-coder`)
|
|
56
|
-
|
|
57
|
-
**When in doubt:** Return paths only. Let another agent analyze.
|
|
58
|
-
|
|
59
51
|
## IMPORTANT: Scope Boundaries
|
|
60
52
|
|
|
61
53
|
You are **file-finding ONLY**. If the orchestrator asks you to:
|
|
@@ -27,6 +27,18 @@ permission:
|
|
|
27
27
|
edit: deny
|
|
28
28
|
bash:
|
|
29
29
|
"git *": allow
|
|
30
|
+
"ls *": allow
|
|
31
|
+
"head *": allow
|
|
32
|
+
"tail *": allow
|
|
33
|
+
"cat *": allow
|
|
34
|
+
"grep *": allow
|
|
35
|
+
"find *": allow
|
|
36
|
+
"cd *": allow
|
|
37
|
+
"echo *": allow
|
|
38
|
+
"which *": allow
|
|
39
|
+
"basename *": allow
|
|
40
|
+
"diff *": allow
|
|
41
|
+
"cp *": allow
|
|
30
42
|
task:
|
|
31
43
|
"*": deny
|
|
32
44
|
---
|
|
@@ -41,22 +53,6 @@ You are the **Boomerang Git** - version control specialist for boomerang-v3.
|
|
|
41
53
|
2. **Branch management** - Create/merge branches
|
|
42
54
|
3. **History review** - Inspect git log and diff
|
|
43
55
|
|
|
44
|
-
## SCOPE BOUNDARIES
|
|
45
|
-
|
|
46
|
-
**This agent DOES:**
|
|
47
|
-
- Create commits with descriptive messages
|
|
48
|
-
- Manage branches (create, merge, delete)
|
|
49
|
-
- Review git history and diffs
|
|
50
|
-
- Push and pull changes
|
|
51
|
-
|
|
52
|
-
**This agent DOES NOT:**
|
|
53
|
-
- Edit code files (escalate to `boomerang-coder`)
|
|
54
|
-
- Make architecture decisions (escalate to `boomerang-architect`)
|
|
55
|
-
- Write tests (escalate to `boomerang-tester`)
|
|
56
|
-
- Run linting (escalate to `boomerang-linter`)
|
|
57
|
-
|
|
58
|
-
**When in doubt:** Commit exactly what was given. Do not modify file contents.
|
|
59
|
-
|
|
60
56
|
## memini-ai Integration
|
|
61
57
|
|
|
62
58
|
Before committing, query memini-ai for:
|
|
@@ -25,7 +25,9 @@ permission:
|
|
|
25
25
|
"webfetch": allow
|
|
26
26
|
"websearch": allow
|
|
27
27
|
edit: allow
|
|
28
|
-
bash:
|
|
28
|
+
bash:
|
|
29
|
+
"basename *": allow
|
|
30
|
+
"*": allow
|
|
29
31
|
task:
|
|
30
32
|
"*": deny
|
|
31
33
|
---
|
|
@@ -41,22 +43,6 @@ You are the **Boomerang Handoff** - session wrap-up specialist using memini-ai.
|
|
|
41
43
|
3. **Save context** - Save session summary to memini-ai
|
|
42
44
|
4. **Evaluate patterns** - Check for skill/agent extraction opportunities
|
|
43
45
|
|
|
44
|
-
## SCOPE BOUNDARIES
|
|
45
|
-
|
|
46
|
-
**This agent DOES:**
|
|
47
|
-
- Update HANDOFF.md with session accomplishments
|
|
48
|
-
- Update TASKS.md marking tasks complete
|
|
49
|
-
- Save session summaries to memini-ai
|
|
50
|
-
- Evaluate self-evolution / skill extraction opportunities
|
|
51
|
-
|
|
52
|
-
**This agent DOES NOT:**
|
|
53
|
-
- Edit source code (escalate to `boomerang-coder`)
|
|
54
|
-
- Make architecture decisions (escalate to `boomerang-architect`)
|
|
55
|
-
- Write tests (escalate to `boomerang-tester`)
|
|
56
|
-
- Run linting (escalate to `boomerang-linter`)
|
|
57
|
-
|
|
58
|
-
**When in doubt:** Update docs and save memories only. Never modify implementation.
|
|
59
|
-
|
|
60
46
|
## Handoff Steps
|
|
61
47
|
|
|
62
48
|
1. Query memini-ai for session context
|
|
@@ -25,7 +25,11 @@ permission:
|
|
|
25
25
|
"webfetch": allow
|
|
26
26
|
"websearch": allow
|
|
27
27
|
edit: allow
|
|
28
|
-
bash:
|
|
28
|
+
bash:
|
|
29
|
+
"basename *": allow
|
|
30
|
+
"diff *": allow
|
|
31
|
+
"cp *": allow
|
|
32
|
+
"*": allow
|
|
29
33
|
task:
|
|
30
34
|
"*": deny
|
|
31
35
|
---
|
|
@@ -40,22 +44,6 @@ You are the **Boomerang Init** - session initialization specialist.
|
|
|
40
44
|
2. **Check TASKS.md** - Understand current priorities
|
|
41
45
|
3. **Verify setup** - Confirm tools and access
|
|
42
46
|
|
|
43
|
-
## SCOPE BOUNDARIES
|
|
44
|
-
|
|
45
|
-
**This agent DOES:**
|
|
46
|
-
- Load project context from memini-ai (L0/L1 summaries)
|
|
47
|
-
- Check TASKS.md for current priorities
|
|
48
|
-
- Verify tools and access are working
|
|
49
|
-
- Prepare session startup context
|
|
50
|
-
|
|
51
|
-
**This agent DOES NOT:**
|
|
52
|
-
- Edit source code (escalate to `boomerang-coder`)
|
|
53
|
-
- Make architecture decisions (escalate to `boomerang-architect`)
|
|
54
|
-
- Write tests (escalate to `boomerang-tester`)
|
|
55
|
-
- Run linting or quality gates (escalate to `boomerang-linter`)
|
|
56
|
-
|
|
57
|
-
**When in doubt:** Load context and return summary. Never modify files beyond TASKS.md status checks.
|
|
58
|
-
|
|
59
47
|
## Startup Workflow
|
|
60
48
|
|
|
61
49
|
1. `memini-ai-dev_get_tier0_summary` - Get ~100 token project summary
|
|
@@ -25,7 +25,10 @@ permission:
|
|
|
25
25
|
"webfetch": allow
|
|
26
26
|
"websearch": allow
|
|
27
27
|
edit: allow
|
|
28
|
-
bash:
|
|
28
|
+
bash:
|
|
29
|
+
"basename *": allow
|
|
30
|
+
"diff *": allow
|
|
31
|
+
"*": allow
|
|
29
32
|
task:
|
|
30
33
|
"*": deny
|
|
31
34
|
---
|
|
@@ -40,28 +43,22 @@ You are the **Boomerang Linter** - quality enforcement for boomerang-v3.
|
|
|
40
43
|
2. **Run formatters** - Format code consistently
|
|
41
44
|
3. **Typecheck** - Ensure TypeScript types are correct
|
|
42
45
|
|
|
43
|
-
##
|
|
44
|
-
|
|
45
|
-
**This agent DOES:**
|
|
46
|
-
- Run linters (ESLint, Prettier, Ruff)
|
|
47
|
-
- Run formatters and apply style fixes
|
|
48
|
-
- Type-check TypeScript code
|
|
49
|
-
- Enforce code style conventions
|
|
46
|
+
## Quality Gates
|
|
50
47
|
|
|
51
|
-
|
|
52
|
-
- Fix logic bugs (escalate to `boomerang-coder`)
|
|
53
|
-
- Write new features (escalate to `boomerang-coder`)
|
|
54
|
-
- Make architecture decisions (escalate to `boomerang-architect`)
|
|
55
|
-
- Write tests (escalate to `boomerang-tester`)
|
|
48
|
+
Run these in order:
|
|
56
49
|
|
|
57
|
-
**
|
|
50
|
+
**TypeScript projects** (`boomerang-v3/`):
|
|
51
|
+
1. `npm run lint` - ESLint
|
|
52
|
+
2. `npm run typecheck` - TypeScript type checking
|
|
53
|
+
3. `npx vitest run` - Run tests
|
|
58
54
|
|
|
59
|
-
|
|
55
|
+
**Python projects** (`memini-ai-dev/`, `boomerang-queue/`, `boomerang-proxy/`):
|
|
56
|
+
1. `ruff check src tests` - Python linting
|
|
57
|
+
2. `ruff check --fix src tests` - Auto-fix issues
|
|
58
|
+
3. `mypy src` - Type checking
|
|
59
|
+
4. `pytest` - Run tests
|
|
60
60
|
|
|
61
|
-
|
|
62
|
-
1. `npm run lint` - Lint code
|
|
63
|
-
2. `npm run format` - Format code
|
|
64
|
-
3. `npm run typecheck` - TypeScript type checking
|
|
61
|
+
**NEVER use `python -c` — always use `uv run` or `uvx` instead.**
|
|
65
62
|
|
|
66
63
|
## Project Conventions
|
|
67
64
|
|
|
@@ -25,7 +25,10 @@ permission:
|
|
|
25
25
|
"webfetch": allow
|
|
26
26
|
"websearch": allow
|
|
27
27
|
edit: allow
|
|
28
|
-
bash:
|
|
28
|
+
bash:
|
|
29
|
+
"basename *": allow
|
|
30
|
+
"cp *": allow
|
|
31
|
+
"*": allow
|
|
29
32
|
task:
|
|
30
33
|
"*": deny
|
|
31
34
|
---
|
|
@@ -41,22 +44,6 @@ You are the **Boomerang Release** - release automation specialist.
|
|
|
41
44
|
3. **Git tags** - Create and push tags
|
|
42
45
|
4. **Publish** - npm publish, uv pip install
|
|
43
46
|
|
|
44
|
-
## SCOPE BOUNDARIES
|
|
45
|
-
|
|
46
|
-
**This agent DOES:**
|
|
47
|
-
- Bump versions in pyproject.toml/package.json
|
|
48
|
-
- Generate and update changelogs
|
|
49
|
-
- Create and push git tags
|
|
50
|
-
- Publish packages (npm, PyPI)
|
|
51
|
-
|
|
52
|
-
**This agent DOES NOT:**
|
|
53
|
-
- Edit source code (escalate to `boomerang-coder`)
|
|
54
|
-
- Fix bugs (escalate to `boomerang-coder`)
|
|
55
|
-
- Write tests (escalate to `boomerang-tester`)
|
|
56
|
-
- Make release architecture decisions (escalate to `boomerang-architect`)
|
|
57
|
-
|
|
58
|
-
**When in doubt:** Only touch version, changelog, and tags. Never modify logic.
|
|
59
|
-
|
|
60
47
|
## Release Process
|
|
61
48
|
|
|
62
49
|
### Python (memini-ai-dev)
|
|
@@ -27,6 +27,16 @@ permission:
|
|
|
27
27
|
edit: deny
|
|
28
28
|
bash:
|
|
29
29
|
"curl *": allow
|
|
30
|
+
"ls *": allow
|
|
31
|
+
"head *": allow
|
|
32
|
+
"tail *": allow
|
|
33
|
+
"cat *": allow
|
|
34
|
+
"grep *": allow
|
|
35
|
+
"find *": allow
|
|
36
|
+
"cd *": allow
|
|
37
|
+
"echo *": allow
|
|
38
|
+
"which *": allow
|
|
39
|
+
"basename *": allow
|
|
30
40
|
webfetch: allow
|
|
31
41
|
websearch: allow
|
|
32
42
|
task:
|
|
@@ -43,22 +53,6 @@ You are the **Boomerang Scraper** - web research specialist.
|
|
|
43
53
|
2. **Fetch pages** - Retrieve and summarize web content
|
|
44
54
|
3. **Synthesize info** - Combine findings into coherent summary
|
|
45
55
|
|
|
46
|
-
## SCOPE BOUNDARIES
|
|
47
|
-
|
|
48
|
-
**This agent DOES:**
|
|
49
|
-
- Search the web with searxng
|
|
50
|
-
- Fetch and summarize web pages
|
|
51
|
-
- Synthesize research findings
|
|
52
|
-
- Save valuable research to memini-ai
|
|
53
|
-
|
|
54
|
-
**This agent DOES NOT:**
|
|
55
|
-
- Edit code (escalate to `boomerang-coder`)
|
|
56
|
-
- Make architecture decisions (escalate to `boomerang-architect`)
|
|
57
|
-
- Write documentation (escalate to `boomerang-writer`)
|
|
58
|
-
- Analyze project code (escalate to `boomerang-architect`)
|
|
59
|
-
|
|
60
|
-
**When in doubt:** Fetch and return raw findings. Let another agent synthesize into code/docs.
|
|
61
|
-
|
|
62
56
|
## Tools
|
|
63
57
|
|
|
64
58
|
- `searxng_searxng_web_search` - Search the web
|
|
@@ -25,7 +25,9 @@ permission:
|
|
|
25
25
|
"webfetch": allow
|
|
26
26
|
"websearch": allow
|
|
27
27
|
edit: allow
|
|
28
|
-
bash:
|
|
28
|
+
bash:
|
|
29
|
+
"basename *": allow
|
|
30
|
+
"*": allow
|
|
29
31
|
task:
|
|
30
32
|
"*": deny
|
|
31
33
|
---
|
|
@@ -40,22 +42,6 @@ You are the **Boomerang Tester** - a testing specialist for boomerang-v3.
|
|
|
40
42
|
2. **Verify fixes** - Confirm bug fixes with test coverage
|
|
41
43
|
3. **Run test suites** - Execute and interpret test results
|
|
42
44
|
|
|
43
|
-
## SCOPE BOUNDARIES
|
|
44
|
-
|
|
45
|
-
**This agent DOES:**
|
|
46
|
-
- Write and run unit/integration tests
|
|
47
|
-
- Verify bug fixes with test coverage
|
|
48
|
-
- Execute and interpret test results
|
|
49
|
-
- Update test infrastructure
|
|
50
|
-
|
|
51
|
-
**This agent DOES NOT:**
|
|
52
|
-
- Fix production code bugs (escalate to `boomerang-coder`)
|
|
53
|
-
- Make architecture decisions (escalate to `boomerang-architect`)
|
|
54
|
-
- Write non-test code (escalate to `boomerang-coder`)
|
|
55
|
-
- Handle linting/formatting (escalate to `boomerang-linter`)
|
|
56
|
-
|
|
57
|
-
**When in doubt:** Query memini-ai for previous test patterns in this project.
|
|
58
|
-
|
|
59
45
|
## memini-ai Integration
|
|
60
46
|
|
|
61
47
|
Before writing tests, query memini-ai for:
|
|
@@ -65,8 +51,9 @@ Before writing tests, query memini-ai for:
|
|
|
65
51
|
|
|
66
52
|
## Test Commands
|
|
67
53
|
|
|
54
|
+
**TypeScript** (`boomerang-v3/`):
|
|
68
55
|
```bash
|
|
69
|
-
# Run tests
|
|
56
|
+
# Run all tests
|
|
70
57
|
cd boomerang-v3 && npm test
|
|
71
58
|
|
|
72
59
|
# Run specific test file
|
|
@@ -74,6 +61,21 @@ npx vitest run tests/[file].test.ts
|
|
|
74
61
|
|
|
75
62
|
# Typecheck
|
|
76
63
|
npm run typecheck
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**Python** (`memini-ai-dev/`, `boomerang-queue/`, `boomerang-proxy/`):
|
|
67
|
+
```bash
|
|
68
|
+
# Run all tests
|
|
69
|
+
pytest
|
|
70
|
+
|
|
71
|
+
# Run specific test file
|
|
72
|
+
pytest tests/test_file.py -v
|
|
73
|
+
|
|
74
|
+
# With coverage
|
|
75
|
+
pytest --cov=src --cov-report=term-missing
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**NEVER use `python -c` — always use `uv run` or `uvx` instead.**
|
|
77
79
|
|
|
78
80
|
# Lint
|
|
79
81
|
npm run lint
|
|
@@ -27,6 +27,15 @@ permission:
|
|
|
27
27
|
edit: allow
|
|
28
28
|
bash:
|
|
29
29
|
"ls *": allow
|
|
30
|
+
"head *": allow
|
|
31
|
+
"tail *": allow
|
|
32
|
+
"cat *": allow
|
|
33
|
+
"grep *": allow
|
|
34
|
+
"find *": allow
|
|
35
|
+
"cd *": allow
|
|
36
|
+
"echo *": allow
|
|
37
|
+
"which *": allow
|
|
38
|
+
"basename *": allow
|
|
30
39
|
task:
|
|
31
40
|
"*": deny
|
|
32
41
|
---
|
|
@@ -41,22 +50,6 @@ You are the **Boomerang Writer** - documentation specialist for boomerang-v3.
|
|
|
41
50
|
2. **Update docs** - Keep docs in sync with code
|
|
42
51
|
3. **Format markdown** - Clean, consistent formatting
|
|
43
52
|
|
|
44
|
-
## SCOPE BOUNDARIES
|
|
45
|
-
|
|
46
|
-
**This agent DOES:**
|
|
47
|
-
- Write and update README, API docs, guides
|
|
48
|
-
- Format markdown consistently
|
|
49
|
-
- Keep docs in sync with code changes
|
|
50
|
-
- Create changelogs and release notes
|
|
51
|
-
|
|
52
|
-
**This agent DOES NOT:**
|
|
53
|
-
- Edit source code (escalate to `boomerang-coder`)
|
|
54
|
-
- Make architecture decisions (escalate to `boomerang-architect`)
|
|
55
|
-
- Write tests (escalate to `boomerang-tester`)
|
|
56
|
-
- Run linting on code (escalate to `boomerang-linter`)
|
|
57
|
-
|
|
58
|
-
**When in doubt:** Write docs only. Never touch implementation files.
|
|
59
|
-
|
|
60
53
|
## memini-ai Integration
|
|
61
54
|
|
|
62
55
|
Query memini-ai for:
|
|
@@ -24,19 +24,26 @@ permission:
|
|
|
24
24
|
"playwright_*": allow
|
|
25
25
|
"webfetch": allow
|
|
26
26
|
"websearch": allow
|
|
27
|
-
edit:
|
|
27
|
+
edit: allow
|
|
28
28
|
bash:
|
|
29
29
|
"*": ask
|
|
30
30
|
"git *": allow
|
|
31
31
|
"npm *": allow
|
|
32
32
|
"bun *": allow
|
|
33
33
|
"ls *": allow
|
|
34
|
+
"head *": allow
|
|
35
|
+
"tail *": allow
|
|
34
36
|
"mkdir *": allow
|
|
35
37
|
"rm *": ask
|
|
36
38
|
"cat *": allow
|
|
37
39
|
"grep *": allow
|
|
38
40
|
"find *": allow
|
|
39
41
|
"cd *": allow
|
|
42
|
+
"echo *": allow
|
|
43
|
+
"which *": allow
|
|
44
|
+
"basename *": allow
|
|
45
|
+
"chmod *": ask
|
|
46
|
+
"chown *": ask
|
|
40
47
|
task:
|
|
41
48
|
"*": deny
|
|
42
49
|
"boomerang-coder": allow
|
|
@@ -71,37 +78,17 @@ Immediately call `sequential-thinking_sequentialthinking` with your analysis.
|
|
|
71
78
|
### STEP 3: Plan (MANDATORY unless explicitly waived)
|
|
72
79
|
Create an implementation plan UNLESS user says "skip planning", "just do it", "/boomerang-handoff", "do a handoff", or "no plan needed".
|
|
73
80
|
|
|
74
|
-
### STEP 3.5: MANDATORY DISPATCH CHECKLIST (BEFORE DELEGATE)
|
|
75
|
-
Before dispatching ANY task, you MUST verify:
|
|
76
|
-
|
|
77
|
-
1. [ ] Agent is the CORRECT specialist (see Routing Matrix below)
|
|
78
|
-
2. [ ] `general` is NOT being used for code implementation
|
|
79
|
-
3. [ ] `boomerang-explorer` is NOT being used for research/analysis
|
|
80
|
-
4. [ ] Task scope matches agent's defined scope
|
|
81
|
-
5. [ ] Context Package includes all required fields
|
|
82
|
-
|
|
83
|
-
### Routing Matrix for Reference
|
|
84
|
-
| Task Type | Primary Agent |
|
|
85
|
-
|-----------|--------------|
|
|
86
|
-
| Code implementation | `boomerang-coder` |
|
|
87
|
-
| Architecture/design | `boomerang-architect` |
|
|
88
|
-
| File finding | `boomerang-explorer` |
|
|
89
|
-
| Testing | `boomerang-tester` |
|
|
90
|
-
| Linting | `boomerang-linter` |
|
|
91
|
-
| Git | `boomerang-git` |
|
|
92
|
-
| Documentation | `boomerang-writer` |
|
|
93
|
-
| Web scraping | `boomerang-scraper` |
|
|
94
|
-
| MCP/debug | `mcp-specialist` |
|
|
95
|
-
| Release | `boomerang-release` |
|
|
96
|
-
|
|
97
|
-
### ROUTING VIOLATIONS = AUTOMATIC RETRY
|
|
98
|
-
If you dispatch to wrong agent:
|
|
99
|
-
- Cancel incorrect task
|
|
100
|
-
- Re-dispatch to correct agent
|
|
101
|
-
- Save violation to memini-ai for future correction
|
|
102
|
-
|
|
103
81
|
### STEP 4: Delegate ALL work via Task tool (MANDATORY)
|
|
104
|
-
|
|
82
|
+
|
|
83
|
+
You are the **ORCHESTRATOR** — your primary job is delegation and coordination. While you CAN edit documentation files (TASKS.md, AGENTS.md, etc.), you should delegate ALL code implementation and testing to specialist sub-agents.
|
|
84
|
+
|
|
85
|
+
**PARALLEL EXECUTION IS MANDATORY** — Always look for opportunities to dispatch multiple sub-agents simultaneously. Launch tasks in parallel whenever there are no dependencies between them. This maximizes throughput and respects the 3 concurrent slot limit.
|
|
86
|
+
|
|
87
|
+
Examples of parallel dispatch:
|
|
88
|
+
- Linter + Tester for independent validation tasks
|
|
89
|
+
- Coder + Writer for code + docs
|
|
90
|
+
- Multiple Coders for unrelated file changes
|
|
91
|
+
|
|
105
92
|
Your only purpose is to delegate to sub-agents using the Task tool.
|
|
106
93
|
|
|
107
94
|
## Project-Specific Context
|
|
@@ -27,6 +27,15 @@ permission:
|
|
|
27
27
|
edit: allow
|
|
28
28
|
bash:
|
|
29
29
|
"ls *": allow
|
|
30
|
+
"head *": allow
|
|
31
|
+
"tail *": allow
|
|
32
|
+
"cat *": allow
|
|
33
|
+
"grep *": allow
|
|
34
|
+
"find *": allow
|
|
35
|
+
"cd *": allow
|
|
36
|
+
"echo *": allow
|
|
37
|
+
"which *": allow
|
|
38
|
+
"basename *": allow
|
|
30
39
|
task:
|
|
31
40
|
"*": deny
|
|
32
41
|
---
|
|
@@ -41,22 +50,6 @@ You are the **MCP Specialist** - MCP Protocol expert for boomerang-v3.
|
|
|
41
50
|
2. **Debug servers** - Troubleshoot MCP issues
|
|
42
51
|
3. **Review integrations** - Validate MCP implementations
|
|
43
52
|
|
|
44
|
-
## SCOPE BOUNDARIES
|
|
45
|
-
|
|
46
|
-
**This agent DOES:**
|
|
47
|
-
- Design MCP tool schemas
|
|
48
|
-
- Debug MCP server issues
|
|
49
|
-
- Review and validate MCP integrations
|
|
50
|
-
- Document MCP protocols
|
|
51
|
-
|
|
52
|
-
**This agent DOES NOT:**
|
|
53
|
-
- Edit general application code (escalate to `boomerang-coder`)
|
|
54
|
-
- Make system architecture decisions (escalate to `boomerang-architect`)
|
|
55
|
-
- Write tests for non-MCP code (escalate to `boomerang-tester`)
|
|
56
|
-
- Handle release tasks (escalate to `boomerang-release`)
|
|
57
|
-
|
|
58
|
-
**When in doubt:** Stay within MCP protocol scope. Query memini-ai for existing MCP patterns.
|
|
59
|
-
|
|
60
53
|
## memini-ai Integration
|
|
61
54
|
|
|
62
55
|
For MCP design:
|
|
@@ -27,6 +27,16 @@ permission:
|
|
|
27
27
|
edit: deny
|
|
28
28
|
bash:
|
|
29
29
|
"curl *": allow
|
|
30
|
+
"ls *": allow
|
|
31
|
+
"head *": allow
|
|
32
|
+
"tail *": allow
|
|
33
|
+
"cat *": allow
|
|
34
|
+
"grep *": allow
|
|
35
|
+
"find *": allow
|
|
36
|
+
"cd *": allow
|
|
37
|
+
"echo *": allow
|
|
38
|
+
"which *": allow
|
|
39
|
+
"basename *": allow
|
|
30
40
|
webfetch: allow
|
|
31
41
|
websearch: allow
|
|
32
42
|
task:
|
|
@@ -50,22 +60,6 @@ You are the **Researcher** - web research specialist for boomerang-v3.
|
|
|
50
60
|
- `memini-ai-dev_add_memory` - Save research findings
|
|
51
61
|
- `memini-ai-dev_query_kg` - Query knowledge graph
|
|
52
62
|
|
|
53
|
-
## SCOPE BOUNDARIES
|
|
54
|
-
|
|
55
|
-
**This agent DOES:**
|
|
56
|
-
- Search the web with searxng
|
|
57
|
-
- Retrieve and analyze web content
|
|
58
|
-
- Synthesize findings into coherent research
|
|
59
|
-
- Save research to memini-ai with `project` tag
|
|
60
|
-
|
|
61
|
-
**This agent DOES NOT:**
|
|
62
|
-
- Edit code (escalate to `boomerang-coder`)
|
|
63
|
-
- Make architecture decisions (escalate to `boomerang-architect`)
|
|
64
|
-
- Write documentation (escalate to `boomerang-writer`)
|
|
65
|
-
- Analyze project source code (escalate to `boomerang-architect`)
|
|
66
|
-
|
|
67
|
-
**When in doubt:** Return research findings. Let another agent act on them.
|
|
68
|
-
|
|
69
63
|
## Research Process
|
|
70
64
|
|
|
71
65
|
1. Query memini-ai for existing knowledge
|
package/AGENTS.md
CHANGED
|
@@ -84,21 +84,31 @@ The orchestrator MUST delegate based on these rules. No exceptions.
|
|
|
84
84
|
|
|
85
85
|
### Orchestrator Permissions (v3.0.0)
|
|
86
86
|
|
|
87
|
-
The orchestrator provides **intelligent routing and context building** — it
|
|
87
|
+
The orchestrator provides **intelligent routing and context building** — it primarily delegates to sub-agents but CAN edit documentation files directly (TASKS.md, AGENTS.md, CONTEXT.md, HANDOFF.md).
|
|
88
88
|
|
|
89
89
|
**Orchestrator Does:**
|
|
90
90
|
- Analyze request and detect task type
|
|
91
91
|
- Query memini-ai for relevant context
|
|
92
92
|
- Select appropriate agent based on task
|
|
93
93
|
- Build rich Context Package with all necessary information
|
|
94
|
+
- Edit documentation and todo lists directly
|
|
94
95
|
- Return `{agent, systemPrompt, contextPackage, suggestions}` to OpenCode
|
|
95
96
|
|
|
96
97
|
**Orchestrator Delegates:**
|
|
97
98
|
- Agent execution → OpenCode (native)
|
|
99
|
+
- Code implementation → boomerang-coder
|
|
100
|
+
- Testing → boomerang-tester
|
|
101
|
+
- Linting → boomerang-linter
|
|
102
|
+
- Git operations → boomerang-git
|
|
98
103
|
- Multi-file changes → sub-agents
|
|
99
104
|
- Complex implementation → boomerang-coder
|
|
100
105
|
- Architecture decisions → boomerang-architect
|
|
101
106
|
|
|
107
|
+
**PARALLEL EXECUTION IS MANDATORY** — The orchestrator MUST launch multiple sub-agents simultaneously when tasks have no dependencies. Examples:
|
|
108
|
+
- Linter + Tester for independent validation
|
|
109
|
+
- Coder + Writer for code + documentation
|
|
110
|
+
- Multiple Coders for unrelated file changes
|
|
111
|
+
|
|
102
112
|
**Decision Threshold:**
|
|
103
113
|
```
|
|
104
114
|
Task Size ≤ 1 file AND ≤ 20 lines AND deterministic
|
|
@@ -365,7 +375,10 @@ IDLE → MEMORY_QUERY → SEQUENTIAL_THINK → PLAN → DELEGATE → GIT_CHECK
|
|
|
365
375
|
|
|
366
376
|
## Review Notes
|
|
367
377
|
|
|
368
|
-
- **2026-05-19**: **
|
|
378
|
+
- **2026-05-19**: **boomerang-v3 v0.3.2 UPDATED** — Agent bash permissions expanded: `basename`, `diff`, `cp`, `which` added. Orchestrator clarified: CAN edit docs, delegates code. Parallel execution guidance added. All 30 agent files synced between `.opencode/agents/` and `boomerang-v3/.opencode/agents/`.
|
|
379
|
+
- **2026-05-19**: **boomerang-v3 v0.3.1 RELEASED** — Added common bash commands (ls, head, tail, cat, grep, find, cd, echo) to 7 agent permission files. Tag `v0.3.1` pushed to GitHub.
|
|
380
|
+
- **2026-05-19**: **boomerang-v3 v0.3.0 RELEASED** — Agent permissions overhaul: `mode: subagent` + comprehensive tool permissions for all 30 agent files. SQL injection fix in boomerang-queue. Phase 3 Ollama Cloud Proxy design doc created. Tag `v0.3.0` pushed to GitHub.
|
|
381
|
+
- **2026-05-19**: **memini-ai-dev v0.2.8 RELEASED** — Ruff formatting pass (isort, whitespace, imports) across 30 files. No functional changes. Tag `v0.2.8` pushed to GitHub.
|
|
369
382
|
- **2026-05-19**: Updated to Ollama Cloud models — All agents reassigned to Ollama Cloud models with 3 concurrent limit. Created `.opencode/opencode.json` with `ollama-cloud` provider. Provider ID: `ollama`, baseURL: `https://ollama.com/v1`.
|
|
370
383
|
- **2026-05-18**: v3.0.0 RELEASED — memini-ai integration: Trust engine, knowledge graph, tiered loading. PostgreSQL with pgvector backend. 645 tests passing in memini-ai.
|
|
371
384
|
- **2026-05-06**: v4.1.0 (boomerang-v2) — Protocol enforcement: MANDATORY. Parallel agent launching.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Retry Executor — Exponential backoff with jitter for transient failures
|
|
3
3
|
*/
|
|
4
|
+
import { TimeoutError } from '../types.js';
|
|
4
5
|
function sleep(ms) {
|
|
5
6
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
6
7
|
}
|
|
@@ -10,7 +11,9 @@ function calculateDelay(attempt, baseDelayMs, maxDelayMs) {
|
|
|
10
11
|
const jitter = Math.random() * (capped / 2);
|
|
11
12
|
return Math.floor(capped + jitter);
|
|
12
13
|
}
|
|
13
|
-
const DEFAULT_IS_RETRYABLE = () =>
|
|
14
|
+
const DEFAULT_IS_RETRYABLE = (error) => {
|
|
15
|
+
return !(error instanceof TimeoutError);
|
|
16
|
+
};
|
|
14
17
|
export async function executeWithRetry(fn, options = {}) {
|
|
15
18
|
const maxRetries = options.maxRetries ?? 3;
|
|
16
19
|
const baseDelayMs = options.baseDelayMs ?? 1000;
|
package/dist/orchestrator.js
CHANGED
|
@@ -18,6 +18,7 @@ function validateAgentRouting(taskType, agentName) {
|
|
|
18
18
|
}
|
|
19
19
|
return true;
|
|
20
20
|
}
|
|
21
|
+
import { TimeoutError } from './types.js';
|
|
21
22
|
import { TaskLimiter, executeWithRetry, executeWithTimeout, } from './concurrency/index.js';
|
|
22
23
|
export class BoomerangOrchestrator {
|
|
23
24
|
taskLimiter;
|
|
@@ -64,6 +65,7 @@ export class BoomerangOrchestrator {
|
|
|
64
65
|
maxRetries: this.config.maxRetries,
|
|
65
66
|
baseDelayMs: this.config.retryBaseDelayMs,
|
|
66
67
|
maxDelayMs: this.config.retryMaxDelayMs,
|
|
68
|
+
isRetryable: (err) => !(err instanceof TimeoutError),
|
|
67
69
|
});
|
|
68
70
|
return retryResult;
|
|
69
71
|
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# OpenCode Feature Evaluation for boomerang-v3
|
|
2
|
+
|
|
3
|
+
**Date**: 2026-05-19
|
|
4
|
+
**Author**: boomerang-architect (deepseek-v4-pro:cloud)
|
|
5
|
+
**Context**: Evaluating 3 OpenCode features identified in the compliance audit for potential integration into boomerang-v3.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Plugin Hooks
|
|
10
|
+
|
|
11
|
+
### Summary
|
|
12
|
+
OpenCode plugins support 25+ lifecycle hooks via TypeScript/JS modules in `.opencode/plugins/`. Boomerang-v3 is already loaded as a plugin (`@veedubin/boomerang-v3` in `opencode.json`). Adding hooks is incremental — just export them from the existing plugin structure. Key hooks: `tool.execute.before`, `tool.execute.after`, `experimental.session.compacting`, `session.compacted`, `session.created`, `file.edited`.
|
|
13
|
+
|
|
14
|
+
### Pros
|
|
15
|
+
- **Compaction hook solves context loss**: `experimental.session.compacting` fires before the LLM compaction prompt is generated, letting us inject boomerang state (task graph, slot usage, queued jobs) that survives context pruning. This directly addresses the context preservation problem from our earlier design work.
|
|
16
|
+
- **Routing validation**: `tool.execute.before` can enforce the mandatory routing matrix (e.g., block `general` from editing code, block `explorer` from doing research).
|
|
17
|
+
- **No new infrastructure**: Already running as a plugin; hooks are just additional exports.
|
|
18
|
+
- **Audit trail**: `tool.execute.after` enables comprehensive tool call logging.
|
|
19
|
+
|
|
20
|
+
### Cons
|
|
21
|
+
- **`experimental.session.compacting` is unstable API**: The `experimental` prefix means the hook signature may break between OpenCode versions. Requires version-pinning and defensive coding.
|
|
22
|
+
- **Hook ordering undefined**: Multiple plugins' hooks run in load order; we can't guarantee ours runs first.
|
|
23
|
+
- **`tool.execute.before` can't see routing context**: The hook receives raw tool input/output but doesn't have access to the orchestrator's decision state.
|
|
24
|
+
|
|
25
|
+
### Recommendation: **IMPLEMENT (selectively)**
|
|
26
|
+
|
|
27
|
+
| Hook | Priority | Use Case |
|
|
28
|
+
|------|----------|----------|
|
|
29
|
+
| `experimental.session.compacting` | HIGH | Inject boomerang state summary before compaction |
|
|
30
|
+
| `tool.execute.before` | HIGH | Validate routing rules |
|
|
31
|
+
| `tool.execute.after` | MEDIUM | Log all tool calls for debugging |
|
|
32
|
+
| `session.created` | LOW | Initialize boomerang session state |
|
|
33
|
+
|
|
34
|
+
### Effort Estimate
|
|
35
|
+
**4-6 hours** — Add 4 hook exports to existing plugin, test compaction scenarios, verify routing enforcement. ~150 lines of code.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 2. Structured Output (JSON Schema)
|
|
40
|
+
|
|
41
|
+
### Summary
|
|
42
|
+
The `@opencode-ai/sdk` supports `format: { type: "json_schema", schema, retryCount? }` for enforcing structured JSON output from the model. The model uses a `StructuredOutput` tool that retries on validation failure (default 2 retries). Results are accessible via `result.data.info.structured_output`.
|
|
43
|
+
|
|
44
|
+
### Pros
|
|
45
|
+
- **Guaranteed structure**: Validated JSON matching a schema, eliminating parsing errors.
|
|
46
|
+
- **SDK-native**: No additional dependencies.
|
|
47
|
+
- **Retry mechanism**: `retryCount` handles transient format failures.
|
|
48
|
+
|
|
49
|
+
### Cons
|
|
50
|
+
- **Model adherence varies**: We use 10 Ollama Cloud models with different JSON adherence rates. Retry overhead compounds at our scale (15 sub-agents).
|
|
51
|
+
- **Architecture mismatch**: Agent contracts are thin summaries; the rich data (decisions, trade-offs, research) is stored in memini-ai's PostgreSQL backend — already structured.
|
|
52
|
+
- **Schema maintenance burden**: 15 agents × 1 output schema each = 15 schemas to define, version, and update as agents evolve.
|
|
53
|
+
- **Added latency**: Each retry is an additional round-trip to the model. At 2 retries × 60s avg, worst-case adds 2 minutes per agent call.
|
|
54
|
+
- **Markdown convention works**: Our current "## Architectural Plan:" header-based parsing is human-readable and sufficient for orchestrator dispatch.
|
|
55
|
+
|
|
56
|
+
### Recommendation: **SKIP (revisit Q3 2026)**
|
|
57
|
+
|
|
58
|
+
The cost-benefit doesn't justify structured output given our architecture. Agent outputs are thin signals; structured data lives in memini-ai. Revisit when Ollama Cloud models have more consistent JSON adherence or when OpenCode adds provider-level structured output enforcement.
|
|
59
|
+
|
|
60
|
+
### Effort Estimate
|
|
61
|
+
**0 hours now**. If revisited: ~8-10 hours for 15 schemas + validation + retry tuning.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## 3. Dynamic MCP Registration (POST /mcp)
|
|
66
|
+
|
|
67
|
+
### Summary
|
|
68
|
+
OpenCode server exposes `POST /mcp` to dynamically register MCP servers at runtime, accepting `{ name, config }` with the same schema as static `opencode.json` MCP entries. `GET /mcp` returns status for all registered servers.
|
|
69
|
+
|
|
70
|
+
### Pros
|
|
71
|
+
- **Runtime flexibility**: Could register/unregister MCP servers based on task type.
|
|
72
|
+
- **Health-check integration**: Could auto-restart failed MCP servers.
|
|
73
|
+
- **Auto-detection**: Could probe for `uvx` path and auto-configure `memini-ai-dev`.
|
|
74
|
+
|
|
75
|
+
### Cons
|
|
76
|
+
- **No current need**: memini-ai-dev is statically configured and working. All 7 MCP servers are stable.
|
|
77
|
+
- **uvx path is stable**: The `uvx --from memini-ai-dev memini-ai --stdio` command hasn't changed. Auto-detection solves a non-problem.
|
|
78
|
+
- **Adds complexity**: Dynamic registration means managing server lifecycle, reconnection logic, and state synchronization — all for servers that never change.
|
|
79
|
+
- **Static config is simpler**: The `opencode.json` approach is declarative, auditable, and version-controlled.
|
|
80
|
+
- **If boomerang-queue goes MCP**: Static config is still the right approach — add it to opencode.json, not register at runtime.
|
|
81
|
+
|
|
82
|
+
### Recommendation: **SKIP**
|
|
83
|
+
|
|
84
|
+
No current use case justifies dynamic registration. Static config provides audit trail, version control, and simplicity. The one defensible use case (health-check-driven restart) is a separate concern from registration and would require a health-check plugin, not the `POST /mcp` endpoint.
|
|
85
|
+
|
|
86
|
+
### Effort Estimate
|
|
87
|
+
**0 hours**. If a use case emerges: ~3-4 hours for registration logic + tests.
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Decision Summary
|
|
92
|
+
|
|
93
|
+
| Feature | Recommendation | Effort | Rationale |
|
|
94
|
+
|---------|---------------|--------|-----------|
|
|
95
|
+
| Plugin Hooks | IMPLEMENT (selectively) | 4-6h | Direct value: compaction context preservation + routing enforcement |
|
|
96
|
+
| Structured Output | SKIP | 0h | Architecture mismatch; rich data already in memini-ai |
|
|
97
|
+
| Dynamic MCP | SKIP | 0h | No use case; static config is simpler and auditable |
|
|
98
|
+
|
|
99
|
+
### Priority Order
|
|
100
|
+
1. Implement `experimental.session.compacting` hook (context preservation)
|
|
101
|
+
2. Implement `tool.execute.before` hook (routing validation)
|
|
102
|
+
3. Implement `tool.execute.after` hook (audit logging)
|
|
103
|
+
4. Revisit structured output when Ollama Cloud JSON adherence improves
|
|
104
|
+
5. Keep dynamic MCP on watchlist for health-check integration
|
package/eslint.config.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import js from '@eslint/js';
|
|
2
|
+
import tseslint from 'typescript-eslint';
|
|
3
|
+
|
|
4
|
+
export default tseslint.config(
|
|
5
|
+
js.configs.recommended,
|
|
6
|
+
...tseslint.configs.recommended,
|
|
7
|
+
{
|
|
8
|
+
files: ['src/**/*.ts'],
|
|
9
|
+
languageOptions: {
|
|
10
|
+
parser: tseslint.parser,
|
|
11
|
+
parserOptions: {
|
|
12
|
+
projectService: true,
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
rules: {
|
|
16
|
+
'no-console': 'warn',
|
|
17
|
+
'no-unused-vars': 'off',
|
|
18
|
+
'@typescript-eslint/no-unused-vars': [
|
|
19
|
+
'error',
|
|
20
|
+
{ argsIgnorePattern: '^_', varsIgnorePattern: '^_' },
|
|
21
|
+
],
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
ignores: ['dist/', 'node_modules/', 'coverage/'],
|
|
26
|
+
}
|
|
27
|
+
);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@veedubin/boomerang-v3",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.2",
|
|
4
4
|
"description": "Multi-agent orchestration plugin for OpenCode with memini-ai memory",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"typecheck": "tsc --noEmit",
|
|
26
26
|
"test": "vitest run",
|
|
27
27
|
"test:watch": "vitest",
|
|
28
|
-
"lint": "eslint src
|
|
28
|
+
"lint": "eslint src"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@modelcontextprotocol/sdk": "^1.0.0"
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
"@types/node": "^22.0.0",
|
|
36
36
|
"eslint": "^10.4.0",
|
|
37
37
|
"typescript": "^5.7.0",
|
|
38
|
+
"typescript-eslint": "^8.30.0",
|
|
38
39
|
"vitest": "^3.0.0"
|
|
39
40
|
},
|
|
40
41
|
"engines": {
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import type { RetryOptions, RetryResult } from '../types.js';
|
|
6
|
+
import { TimeoutError } from '../types.js';
|
|
6
7
|
|
|
7
8
|
function sleep(ms: number): Promise<void> {
|
|
8
9
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
@@ -15,7 +16,9 @@ function calculateDelay(attempt: number, baseDelayMs: number, maxDelayMs: number
|
|
|
15
16
|
return Math.floor(capped + jitter);
|
|
16
17
|
}
|
|
17
18
|
|
|
18
|
-
const DEFAULT_IS_RETRYABLE = (): boolean =>
|
|
19
|
+
const DEFAULT_IS_RETRYABLE = (error: Error): boolean => {
|
|
20
|
+
return !(error instanceof TimeoutError);
|
|
21
|
+
};
|
|
19
22
|
|
|
20
23
|
export async function executeWithRetry<T>(
|
|
21
24
|
fn: () => Promise<T>,
|
package/src/orchestrator.ts
CHANGED
|
@@ -34,6 +34,7 @@ import type {
|
|
|
34
34
|
ConcurrencyConfig,
|
|
35
35
|
SlotUsage,
|
|
36
36
|
} from './types.js';
|
|
37
|
+
import { TimeoutError } from './types.js';
|
|
37
38
|
import {
|
|
38
39
|
TaskLimiter,
|
|
39
40
|
executeWithRetry,
|
|
@@ -126,6 +127,7 @@ export class BoomerangOrchestrator {
|
|
|
126
127
|
maxRetries: this.config.maxRetries,
|
|
127
128
|
baseDelayMs: this.config.retryBaseDelayMs,
|
|
128
129
|
maxDelayMs: this.config.retryMaxDelayMs,
|
|
130
|
+
isRetryable: (err) => !(err instanceof TimeoutError),
|
|
129
131
|
}
|
|
130
132
|
);
|
|
131
133
|
return retryResult;
|