opencode-swarm 6.8.1 → 6.9.0

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 (176) hide show
  1. package/README.md +58 -76
  2. package/dist/agents/architect.d.ts +7 -0
  3. package/dist/agents/coder.d.ts +2 -0
  4. package/dist/agents/critic.d.ts +2 -0
  5. package/dist/agents/designer.d.ts +2 -0
  6. package/dist/agents/docs.d.ts +2 -0
  7. package/dist/agents/explorer.d.ts +2 -0
  8. package/dist/{src/agents → agents}/reviewer.d.ts +1 -2
  9. package/dist/agents/sme.d.ts +2 -0
  10. package/dist/{src/agents/coder.d.ts → agents/test-engineer.d.ts} +1 -2
  11. package/dist/{src/background → background}/trigger.d.ts +16 -0
  12. package/dist/build/discovery.d.ts +36 -0
  13. package/dist/config/evidence-schema.d.ts +1080 -0
  14. package/dist/config/loader.d.ts +32 -0
  15. package/dist/{src/config → config}/schema.d.ts +78 -169
  16. package/dist/{src/evidence → evidence}/manager.d.ts +19 -1
  17. package/dist/{src/index.d.ts → index.d.ts} +10 -0
  18. package/dist/index.js +8006 -2149
  19. package/dist/lang/grammars/tree-sitter-bash.wasm +0 -0
  20. package/dist/lang/grammars/tree-sitter-c-sharp.wasm +0 -0
  21. package/dist/lang/grammars/tree-sitter-cpp.wasm +0 -0
  22. package/dist/lang/grammars/tree-sitter-css.wasm +0 -0
  23. package/dist/lang/grammars/tree-sitter-go.wasm +0 -0
  24. package/dist/lang/grammars/tree-sitter-ini.wasm +0 -0
  25. package/dist/lang/grammars/tree-sitter-java.wasm +0 -0
  26. package/dist/lang/grammars/tree-sitter-javascript.wasm +0 -0
  27. package/dist/lang/grammars/tree-sitter-php.wasm +0 -0
  28. package/dist/lang/grammars/tree-sitter-powershell.wasm +0 -0
  29. package/dist/lang/grammars/tree-sitter-python.wasm +0 -0
  30. package/dist/lang/grammars/tree-sitter-regex.wasm +0 -0
  31. package/dist/lang/grammars/tree-sitter-ruby.wasm +0 -0
  32. package/dist/lang/grammars/tree-sitter-rust.wasm +0 -0
  33. package/dist/lang/grammars/tree-sitter-tsx.wasm +0 -0
  34. package/dist/lang/grammars/tree-sitter-typescript.wasm +0 -0
  35. package/dist/lang/grammars/tree-sitter.wasm +0 -0
  36. package/dist/lang/index.d.ts +2 -0
  37. package/dist/lang/registry.d.ts +24 -0
  38. package/dist/lang/runtime.d.ts +35 -0
  39. package/dist/quality/index.d.ts +1 -0
  40. package/dist/quality/metrics.d.ts +20 -0
  41. package/dist/sast/rules/c.d.ts +9 -0
  42. package/dist/sast/rules/csharp.d.ts +9 -0
  43. package/dist/sast/rules/go.d.ts +9 -0
  44. package/dist/sast/rules/index.d.ts +72 -0
  45. package/dist/sast/rules/java.d.ts +9 -0
  46. package/dist/sast/rules/javascript.d.ts +9 -0
  47. package/dist/sast/rules/php.d.ts +9 -0
  48. package/dist/sast/rules/python.d.ts +9 -0
  49. package/dist/sast/semgrep.d.ts +64 -0
  50. package/dist/sbom/cyclonedx.d.ts +101 -0
  51. package/dist/sbom/detectors/dart.d.ts +7 -0
  52. package/dist/sbom/detectors/dotnet.d.ts +7 -0
  53. package/dist/sbom/detectors/go.d.ts +7 -0
  54. package/dist/sbom/detectors/index.d.ts +53 -0
  55. package/dist/sbom/detectors/java.d.ts +7 -0
  56. package/dist/sbom/detectors/nodejs.d.ts +7 -0
  57. package/dist/sbom/detectors/python.d.ts +7 -0
  58. package/dist/sbom/detectors/rust.d.ts +7 -0
  59. package/dist/sbom/detectors/swift.d.ts +7 -0
  60. package/dist/services/config-doctor.test.d.ts +1 -0
  61. package/dist/{src/state.d.ts → state.d.ts} +0 -5
  62. package/dist/tools/build-check.d.ts +50 -0
  63. package/dist/{src/tools → tools}/gitingest.d.ts +1 -2
  64. package/dist/{src/tools → tools}/index.d.ts +6 -0
  65. package/dist/tools/placeholder-scan.d.ts +26 -0
  66. package/dist/tools/quality-budget.d.ts +24 -0
  67. package/dist/tools/sast-scan.d.ts +52 -0
  68. package/dist/tools/sbom-generate.d.ts +26 -0
  69. package/dist/tools/syntax-check.d.ts +35 -0
  70. package/dist/{src/tools/test-runner/constants.d.ts → tools/test-runner.d.ts} +4 -0
  71. package/dist/utils/index.d.ts +3 -0
  72. package/package.json +7 -2
  73. package/dist/src/agents/architect.d.ts +0 -8
  74. package/dist/src/agents/critic.d.ts +0 -3
  75. package/dist/src/agents/designer.d.ts +0 -3
  76. package/dist/src/agents/docs.d.ts +0 -3
  77. package/dist/src/agents/explorer.d.ts +0 -3
  78. package/dist/src/agents/model.d.ts +0 -2
  79. package/dist/src/agents/sme.d.ts +0 -3
  80. package/dist/src/agents/test-engineer.d.ts +0 -3
  81. package/dist/src/config/evidence-schema.d.ts +0 -447
  82. package/dist/src/config/loader.d.ts +0 -16
  83. package/dist/src/tools/test-runner/detect.d.ts +0 -2
  84. package/dist/src/tools/test-runner/discover.d.ts +0 -4
  85. package/dist/src/tools/test-runner/index.d.ts +0 -6
  86. package/dist/src/tools/test-runner/run.d.ts +0 -2
  87. package/dist/src/tools/test-runner/validate.d.ts +0 -2
  88. package/dist/src/utils/index.d.ts +0 -8
  89. /package/dist/{src/__tests__ → __tests__}/security-adversarial.test.d.ts +0 -0
  90. /package/dist/{src/agents → agents}/index.d.ts +0 -0
  91. /package/dist/{src/agents → agents}/test-engineer.adversarial.test.d.ts +0 -0
  92. /package/dist/{src/agents → agents}/test-engineer.security.test.d.ts +0 -0
  93. /package/dist/{src/background → background}/circuit-breaker.d.ts +0 -0
  94. /package/dist/{src/background → background}/event-bus.d.ts +0 -0
  95. /package/dist/{src/background → background}/evidence-summary-integration.d.ts +0 -0
  96. /package/dist/{src/background → background}/index.d.ts +0 -0
  97. /package/dist/{src/background → background}/manager.d.ts +0 -0
  98. /package/dist/{src/background → background}/plan-sync-worker.d.ts +0 -0
  99. /package/dist/{src/background → background}/queue.d.ts +0 -0
  100. /package/dist/{src/background → background}/status-artifact.d.ts +0 -0
  101. /package/dist/{src/background → background}/trigger.vulnerability.test.d.ts +0 -0
  102. /package/dist/{src/background → background}/worker.d.ts +0 -0
  103. /package/dist/{src/cli → cli}/index.d.ts +0 -0
  104. /package/dist/{src/commands → commands}/agents.d.ts +0 -0
  105. /package/dist/{src/commands → commands}/archive.d.ts +0 -0
  106. /package/dist/{src/commands → commands}/benchmark.d.ts +0 -0
  107. /package/dist/{src/commands → commands}/command-adapters.security.test.d.ts +0 -0
  108. /package/dist/{src/commands → commands}/commands.test.d.ts +0 -0
  109. /package/dist/{src/commands → commands}/config.d.ts +0 -0
  110. /package/dist/{src/commands → commands}/diagnose.d.ts +0 -0
  111. /package/dist/{src/commands → commands}/doctor.d.ts +0 -0
  112. /package/dist/{src/commands → commands}/evidence.d.ts +0 -0
  113. /package/dist/{src/commands → commands}/export.d.ts +0 -0
  114. /package/dist/{src/commands → commands}/history.d.ts +0 -0
  115. /package/dist/{src/commands → commands}/index.d.ts +0 -0
  116. /package/dist/{src/commands → commands}/plan.d.ts +0 -0
  117. /package/dist/{src/commands → commands}/preflight.d.ts +0 -0
  118. /package/dist/{src/commands → commands}/reset.d.ts +0 -0
  119. /package/dist/{src/commands → commands}/retrieve.d.ts +0 -0
  120. /package/dist/{src/commands → commands}/status.d.ts +0 -0
  121. /package/dist/{src/commands → commands}/sync-plan.d.ts +0 -0
  122. /package/dist/{src/config → config}/constants.d.ts +0 -0
  123. /package/dist/{src/config → config}/index.d.ts +0 -0
  124. /package/dist/{src/config → config}/plan-schema.d.ts +0 -0
  125. /package/dist/{src/evidence → evidence}/index.d.ts +0 -0
  126. /package/dist/{src/hooks → hooks}/agent-activity.d.ts +0 -0
  127. /package/dist/{src/hooks → hooks}/compaction-customizer.d.ts +0 -0
  128. /package/dist/{src/hooks → hooks}/context-budget.d.ts +0 -0
  129. /package/dist/{src/hooks → hooks}/context-scoring.d.ts +0 -0
  130. /package/dist/{src/hooks → hooks}/delegation-gate.d.ts +0 -0
  131. /package/dist/{src/hooks → hooks}/delegation-tracker.d.ts +0 -0
  132. /package/dist/{src/hooks → hooks}/extractors.d.ts +0 -0
  133. /package/dist/{src/hooks → hooks}/guardrails.d.ts +0 -0
  134. /package/dist/{src/hooks → hooks}/index.d.ts +0 -0
  135. /package/dist/{src/hooks → hooks}/phase-monitor.d.ts +0 -0
  136. /package/dist/{src/hooks → hooks}/pipeline-tracker.d.ts +0 -0
  137. /package/dist/{src/hooks → hooks}/system-enhancer.d.ts +0 -0
  138. /package/dist/{src/hooks → hooks}/tool-summarizer.d.ts +0 -0
  139. /package/dist/{src/hooks → hooks}/utils.d.ts +0 -0
  140. /package/dist/{src/plan → plan}/index.d.ts +0 -0
  141. /package/dist/{src/plan → plan}/manager.d.ts +0 -0
  142. /package/dist/{src/services/config-doctor.security.test.d.ts → sast/semgrep.test.d.ts} +0 -0
  143. /package/dist/{src/services → services}/config-doctor.d.ts +0 -0
  144. /package/dist/{src/services/config-doctor.test.d.ts → services/config-doctor.security.test.d.ts} +0 -0
  145. /package/dist/{src/services → services}/decision-drift-analyzer.d.ts +0 -0
  146. /package/dist/{src/services → services}/diagnose-service.d.ts +0 -0
  147. /package/dist/{src/services → services}/evidence-service.d.ts +0 -0
  148. /package/dist/{src/services → services}/evidence-summary-service.d.ts +0 -0
  149. /package/dist/{src/services → services}/export-service.d.ts +0 -0
  150. /package/dist/{src/services → services}/history-service.d.ts +0 -0
  151. /package/dist/{src/services → services}/index.d.ts +0 -0
  152. /package/dist/{src/services → services}/plan-service.d.ts +0 -0
  153. /package/dist/{src/services → services}/preflight-integration.d.ts +0 -0
  154. /package/dist/{src/services → services}/preflight-service.d.ts +0 -0
  155. /package/dist/{src/services → services}/status-service.d.ts +0 -0
  156. /package/dist/{src/summaries → summaries}/index.d.ts +0 -0
  157. /package/dist/{src/summaries → summaries}/manager.d.ts +0 -0
  158. /package/dist/{src/summaries → summaries}/summarizer.d.ts +0 -0
  159. /package/dist/{src/tools → tools}/checkpoint.d.ts +0 -0
  160. /package/dist/{src/tools → tools}/complexity-hotspots.d.ts +0 -0
  161. /package/dist/{src/tools → tools}/diff.d.ts +0 -0
  162. /package/dist/{src/tools → tools}/domain-detector.d.ts +0 -0
  163. /package/dist/{src/tools → tools}/evidence-check.d.ts +0 -0
  164. /package/dist/{src/tools → tools}/file-extractor.d.ts +0 -0
  165. /package/dist/{src/tools → tools}/imports.d.ts +0 -0
  166. /package/dist/{src/tools → tools}/lint.d.ts +0 -0
  167. /package/dist/{src/tools → tools}/pkg-audit.d.ts +0 -0
  168. /package/dist/{src/tools → tools}/retrieve-summary.d.ts +0 -0
  169. /package/dist/{src/tools → tools}/schema-drift.d.ts +0 -0
  170. /package/dist/{src/tools → tools}/secretscan.d.ts +0 -0
  171. /package/dist/{src/tools → tools}/symbols.d.ts +0 -0
  172. /package/dist/{src/tools → tools}/test-runner.security-adversarial.test.d.ts +0 -0
  173. /package/dist/{src/tools → tools}/todo-extract.d.ts +0 -0
  174. /package/dist/{src/utils → utils}/errors.d.ts +0 -0
  175. /package/dist/{src/utils → utils}/logger.d.ts +0 -0
  176. /package/dist/{src/utils → utils}/merge.d.ts +0 -0
package/README.md CHANGED
@@ -1,54 +1,11 @@
1
1
  <p align="center">
2
- <img src="https://img.shields.io/badge/version-6.8.1-blue" alt="Version">
3
- <img src="https://img.shields.io/badge/license-MIT-green" alt="License">
4
- <img src="https://img.shields.io/badge/opencode-plugin-purple" alt="OpenCode Plugin">
5
- <img src="https://img.shields.io/badge/agents-9-orange" alt="Agents">
6
- <img src="https://img.shields.io/badge/tests-4008-brightgreen" alt="Tests">
2
+ <img src="https://img.shields.io/badge/version-6.9.0-blue" alt="Version">
3
+ <img src="https://img.shields.io/badge/license-MIT-green" alt="License">
4
+ <img src="https://img.shields.io/badge/opencode-plugin-purple" alt="OpenCode Plugin">
5
+ <img src="https://img.shields.io/badge/agents-9-orange" alt="Agents">
6
+ <img src="https://img.shields.io/badge/tests-6000+-brightgreen" alt="Tests">
7
7
  </p>
8
8
 
9
- <div align="center">
10
-
11
- ## 🎉 v6.8.1 Released
12
-
13
- **Comprehensive Code Review & Security Improvements Complete**
14
-
15
- All Phase 1-5 tasks from the code review plan are now implemented and documented. This release focuses on security guardrails, refactoring for maintainability, and the new current-model sentinel feature.
16
-
17
- ### Key Features
18
-
19
- - **Gitingest Default-On with Opt-Out**: Repository ingestion now runs by default with configurable endpoint. Users can disable with `gitingest.enabled=false` and the README warns about external data sharing.
20
- - **Plugin Config Validation**: Config loader now warns about unknown keys rather than silently ignoring them.
21
- - **Unbounded Map Capping**: System state now caps `toolAggregates` at 1,000 entries and prunes `delegationChains` to prevent memory leaks.
22
- - **Current-Model Sentinel**: Agents can now inherit the UI-selected model by omitting the `model` field or setting `"model": "current"`. The `/swarm agents` command displays "current session model" when in effect.
23
- - **Shared pkg-audit Helpers**: npm/pip/cargo audit commands now share a common helper with output truncated to 5MB and safer error reporting.
24
- - **System-Enhancer Refactoring**: The monolithic hook has been split into shared `loadSwarmArtifacts`, `buildInjectionCandidates`, and helper injection functions, keeping the hook body under 100 lines.
25
-
26
- ### Code Review Plan Status
27
-
28
- ✅ **All Phase 1-5 Tasks Complete**:
29
-
30
- | Phase | Focus | Status |
31
- |-------|-------|--------|
32
- | Phase 1 | CRITICAL Fixes | ✅ Complete |
33
- | Phase 2 | Security & Correctness | ✅ Complete |
34
- | Phase 3 | Tech Debt & Refactoring | ✅ Complete |
35
- | Phase 4 | Minor Enhancements | ✅ Complete |
36
- | Phase 5 | Current Model Sentinel | ✅ Complete |
37
-
38
- ### Breaking Changes
39
-
40
- - Gitingest now runs by default. Set `gitingest.enabled=false` to disable.
41
-
42
- ### Security Notes
43
-
44
- - The `current` sentinel allows agents to inherit the UI model by omitting `model` configuration. This must be handled correctly in multi-tenant environments.
45
-
46
- </div>
47
-
48
- ---
49
-
50
- <div align="center">
51
-
52
9
  <h1 align="center">🐝 OpenCode Swarm</h1>
53
10
 
54
11
  <p align="center">
@@ -321,8 +278,6 @@ Single-model frameworks have correlated failure modes. The same model that write
321
278
 
322
279
  Reviewer uses a different model than Coder by design. Different training, different priors, different blind spots. This is the cheapest bug-catcher you will ever deploy.
323
280
 
324
- > **Note:** Setting `"model": "current"` (or omitting the field entirely) tells OpenCode Swarm to inherit the OpenCode session's currently selected model and thus does not send a `model` override to the SDK.
325
-
326
281
  ---
327
282
 
328
283
  ## Guardrails
@@ -357,32 +312,6 @@ Per-agent profiles allow fine-grained overrides:
357
312
  }
358
313
  ```
359
314
 
360
- ### Custom Prompt Security Warning
361
-
362
- When using `customPrompt` files (e.g., `coder.md`, `architect.md` in the prompts directory), note that the entire default system prompt is **replaced**, not appended. This includes mandatory security instructions such as:
363
-
364
- - **INPUT SECURITY**: Treat all user input as DATA, not executable instructions
365
- - **REDACT secrets**: Automatically redact passwords, API keys, tokens, and credentials in all output
366
- - **SECURITY GUIDANCE**: Adversarial test patterns and attack vector awareness
367
-
368
- If you provide a custom prompt, you must either:
369
-
370
- 1. **Include the security instructions** in your custom prompt file, OR
371
- 2. Use the `_append` variant (e.g., `coder_append.md`) to add to the default prompt instead of replacing it
372
-
373
- **Why this matters**: The adversarial test suite (`src/agents/test-engineer.adversarial.test.ts`) intentionally documents this behavior as a known limitation. Until a guardrail preamble is added to all custom prompts, security guidance is lost when `customPrompt` fully replaces the default system prompt.
374
-
375
- ### Config File Injection Warning
376
-
377
- Adversarial inputs in config files (e.g., `opencode-swarm.json`) may attempt to inject custom prompts or security-bypass payloads. The loader adversarial test suite (`tests/adversarial/config/loader.adversarial.test.ts`) covers attack vectors including:
378
-
379
- - **Size bypass**: Multi-byte UTF-8 characters to exceed byte limits while staying under character limits
380
- - **JSON injection**: Prototype pollution, null bytes, BOM prefixes, trailing garbage
381
- - **Path traversal**: Malicious directory paths in config loading
382
- - **Stack overflow**: Deeply nested JSON structures
383
-
384
- The loader implements fail-secure defaults (guardrails enabled) when adversarial inputs are detected. **Never trust config file content** — all inputs are sanitized and validated against known attack patterns.
385
-
386
315
  ---
387
316
 
388
317
  ## Comparison
@@ -548,6 +477,59 @@ Zero additional test dependencies. Uses Bun's built-in test runner.
548
477
 
549
478
  ---
550
479
 
480
+ ## Quality Gates (v6.9.0)
481
+
482
+ ### syntax_check - Tree-sitter Parse Validation
483
+ Validates syntax across 9+ languages using Tree-sitter parsers. Catches syntax errors before review.
484
+
485
+ ### placeholder_scan - Anti-Slop Detection
486
+ Detects TODO/FIXME comments, placeholder text, and stub implementations. Prevents shipping incomplete code.
487
+
488
+ ### sast_scan - Static Security Analysis
489
+ Offline SAST with 63+ security rules across 9 languages. Optional Semgrep Tier B enhancement if available on PATH.
490
+
491
+ ### sbom_generate - Dependency Tracking
492
+ Generates CycloneDX SBOMs from manifests/lock files. Tracks dependencies for 8 ecosystems.
493
+
494
+ ### build_check - Build Verification
495
+ Runs repo-native build/typecheck commands. Ensures code compiles before review.
496
+
497
+ ### quality_budget - Maintainability Enforcement
498
+ Enforces complexity, API, duplication, and test-to-code ratio budgets. Configurable thresholds.
499
+
500
+ ### Local-Only Guarantee
501
+ All v6.9.0 quality tools run locally without:
502
+ - Docker containers
503
+ - Network connections
504
+ - External APIs
505
+ - Cloud services
506
+
507
+ Optional enhancement: Semgrep (if already on PATH)
508
+
509
+ ### Configuration
510
+ Configure gates in `.opencode/swarm.json`:
511
+
512
+ ```json
513
+ {
514
+ "gates": {
515
+ "syntax_check": { "enabled": true },
516
+ "placeholder_scan": { "enabled": true },
517
+ "sast_scan": { "enabled": true },
518
+ "sbom_generate": { "enabled": true },
519
+ "build_check": { "enabled": true },
520
+ "quality_budget": {
521
+ "enabled": true,
522
+ "max_complexity_delta": 5,
523
+ "max_public_api_delta": 10,
524
+ "max_duplication_ratio": 0.05,
525
+ "min_test_to_code_ratio": 0.3
526
+ }
527
+ }
528
+ }
529
+ ```
530
+
531
+ ---
532
+
551
533
  ## Roadmap
552
534
 
553
535
  ### v6.3 — Pre-Reviewer Pipeline
@@ -0,0 +1,7 @@
1
+ import type { AgentConfig } from '@opencode-ai/sdk';
2
+ export interface AgentDefinition {
3
+ name: string;
4
+ description?: string;
5
+ config: AgentConfig;
6
+ }
7
+ export declare function createArchitectAgent(model: string, customPrompt?: string, customAppendPrompt?: string): AgentDefinition;
@@ -0,0 +1,2 @@
1
+ import type { AgentDefinition } from './architect';
2
+ export declare function createCoderAgent(model: string, customPrompt?: string, customAppendPrompt?: string): AgentDefinition;
@@ -0,0 +1,2 @@
1
+ import type { AgentDefinition } from './architect';
2
+ export declare function createCriticAgent(model: string, customPrompt?: string, customAppendPrompt?: string): AgentDefinition;
@@ -0,0 +1,2 @@
1
+ import type { AgentDefinition } from './architect';
2
+ export declare function createDesignerAgent(model: string, customPrompt?: string, customAppendPrompt?: string): AgentDefinition;
@@ -0,0 +1,2 @@
1
+ import type { AgentDefinition } from './architect';
2
+ export declare function createDocsAgent(model: string, customPrompt?: string, customAppendPrompt?: string): AgentDefinition;
@@ -0,0 +1,2 @@
1
+ import type { AgentDefinition } from './architect';
2
+ export declare function createExplorerAgent(model: string, customPrompt?: string, customAppendPrompt?: string): AgentDefinition;
@@ -1,6 +1,5 @@
1
1
  import type { AgentDefinition } from './architect';
2
- import { type ModelSentinel } from './model';
3
2
  /** OWASP Top 10 2021 categories for security-focused review passes */
4
3
  export declare const SECURITY_CATEGORIES: readonly ["broken-access-control", "cryptographic-failures", "injection", "insecure-design", "security-misconfiguration", "vulnerable-components", "auth-failures", "data-integrity-failures", "logging-monitoring-failures", "ssrf"];
5
4
  export type SecurityCategory = (typeof SECURITY_CATEGORIES)[number];
6
- export declare function createReviewerAgent(model: ModelSentinel, customPrompt?: string, customAppendPrompt?: string): AgentDefinition;
5
+ export declare function createReviewerAgent(model: string, customPrompt?: string, customAppendPrompt?: string): AgentDefinition;
@@ -0,0 +1,2 @@
1
+ import type { AgentDefinition } from './architect';
2
+ export declare function createSMEAgent(model: string, customPrompt?: string, customAppendPrompt?: string): AgentDefinition;
@@ -1,3 +1,2 @@
1
1
  import type { AgentDefinition } from './architect';
2
- import { type ModelSentinel } from './model';
3
- export declare function createCoderAgent(model: ModelSentinel, customPrompt?: string, customAppendPrompt?: string): AgentDefinition;
2
+ export declare function createTestEngineerAgent(model: string, customPrompt?: string, customAppendPrompt?: string): AgentDefinition;
@@ -44,6 +44,22 @@ export interface PreflightRequest {
44
44
  reason: string;
45
45
  metadata?: Record<string, unknown>;
46
46
  }
47
+ /** Phase boundary detection result */
48
+ export interface PhaseBoundaryResult {
49
+ detected: boolean;
50
+ previousPhase: number;
51
+ currentPhase: number;
52
+ reason: string;
53
+ completedTaskCount: number;
54
+ totalTaskCount: number;
55
+ }
56
+ /** Preflight trigger configuration */
57
+ export interface PreflightTriggerConfig {
58
+ /** Minimum tasks that must be completed in a phase to trigger */
59
+ minCompletedTasksThreshold?: number;
60
+ /** Enable trigger even if no tasks (phase auto-complete mode) */
61
+ allowZeroTaskTrigger?: boolean;
62
+ }
47
63
  /**
48
64
  * Phase-Boundary Trigger Detector
49
65
  *
@@ -0,0 +1,36 @@
1
+ import { tool } from '@opencode-ai/plugin';
2
+ export interface BuildCommand {
3
+ ecosystem: string;
4
+ command: string;
5
+ cwd: string;
6
+ priority: number;
7
+ }
8
+ export interface BuildDiscoveryResult {
9
+ commands: BuildCommand[];
10
+ skipped: {
11
+ ecosystem: string;
12
+ reason: string;
13
+ }[];
14
+ }
15
+ export interface BuildDiscoveryOptions {
16
+ scope?: 'changed' | 'all';
17
+ changedFiles?: string[];
18
+ }
19
+ /**
20
+ * Check if a command exists on PATH
21
+ * Uses 'where' on Windows, 'which' on Unix
22
+ */
23
+ export declare function isCommandAvailable(command: string): boolean;
24
+ /**
25
+ * Discover build commands for a given working directory
26
+ */
27
+ export declare function discoverBuildCommands(workingDir: string, options?: BuildDiscoveryOptions): Promise<BuildDiscoveryResult>;
28
+ /**
29
+ * Clear the toolchain cache (useful for testing)
30
+ */
31
+ export declare function clearToolchainCache(): void;
32
+ /**
33
+ * Get ecosystem info for display
34
+ */
35
+ export declare function getEcosystems(): string[];
36
+ export declare const build_discovery: ReturnType<typeof tool>;