@intrect/openswarm 0.4.4 → 0.8.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.
- package/README.md +46 -26
- package/config.example.yaml +22 -10
- package/dist/adapters/agenticLoop.d.ts +45 -2
- package/dist/adapters/agenticLoop.d.ts.map +1 -1
- package/dist/adapters/agenticLoop.js +209 -61
- package/dist/adapters/agenticLoop.js.map +1 -1
- package/dist/adapters/chatStream.d.ts +55 -0
- package/dist/adapters/chatStream.d.ts.map +1 -0
- package/dist/adapters/chatStream.js +116 -0
- package/dist/adapters/chatStream.js.map +1 -0
- package/dist/adapters/codex.d.ts +7 -0
- package/dist/adapters/codex.d.ts.map +1 -1
- package/dist/adapters/codex.js +67 -6
- package/dist/adapters/codex.js.map +1 -1
- package/dist/adapters/codexModels.d.ts +20 -0
- package/dist/adapters/codexModels.d.ts.map +1 -0
- package/dist/adapters/codexModels.js +195 -0
- package/dist/adapters/codexModels.js.map +1 -0
- package/dist/adapters/codexResponses.d.ts +97 -0
- package/dist/adapters/codexResponses.d.ts.map +1 -0
- package/dist/adapters/codexResponses.js +302 -0
- package/dist/adapters/codexResponses.js.map +1 -0
- package/dist/adapters/gpt.d.ts.map +1 -1
- package/dist/adapters/gpt.js +20 -120
- package/dist/adapters/gpt.js.map +1 -1
- package/dist/adapters/index.d.ts +10 -2
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +19 -5
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/lmstudio.d.ts +8 -0
- package/dist/adapters/lmstudio.d.ts.map +1 -0
- package/dist/adapters/lmstudio.js +41 -0
- package/dist/adapters/lmstudio.js.map +1 -0
- package/dist/adapters/local.d.ts +16 -1
- package/dist/adapters/local.d.ts.map +1 -1
- package/dist/adapters/local.js +51 -127
- package/dist/adapters/local.js.map +1 -1
- package/dist/adapters/openrouter.d.ts +37 -0
- package/dist/adapters/openrouter.d.ts.map +1 -0
- package/dist/adapters/openrouter.js +193 -0
- package/dist/adapters/openrouter.js.map +1 -0
- package/dist/adapters/resultParsing.d.ts +6 -0
- package/dist/adapters/resultParsing.d.ts.map +1 -0
- package/dist/adapters/resultParsing.js +139 -0
- package/dist/adapters/resultParsing.js.map +1 -0
- package/dist/adapters/tools.d.ts +21 -2
- package/dist/adapters/tools.d.ts.map +1 -1
- package/dist/adapters/tools.js +153 -12
- package/dist/adapters/tools.js.map +1 -1
- package/dist/adapters/types.d.ts +40 -1
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/webTools.d.ts +9 -0
- package/dist/adapters/webTools.d.ts.map +1 -0
- package/dist/adapters/webTools.js +195 -0
- package/dist/adapters/webTools.js.map +1 -0
- package/dist/agents/draftAnalyzer.d.ts +1 -1
- package/dist/agents/draftAnalyzer.d.ts.map +1 -1
- package/dist/agents/draftAnalyzer.js +3 -3
- package/dist/agents/draftAnalyzer.js.map +1 -1
- package/dist/agents/pairPipeline.d.ts +26 -1
- package/dist/agents/pairPipeline.d.ts.map +1 -1
- package/dist/agents/pairPipeline.js +184 -17
- package/dist/agents/pairPipeline.js.map +1 -1
- package/dist/agents/reflection.d.ts +56 -0
- package/dist/agents/reflection.d.ts.map +1 -0
- package/dist/agents/reflection.js +120 -0
- package/dist/agents/reflection.js.map +1 -0
- package/dist/agents/worker.d.ts +8 -0
- package/dist/agents/worker.d.ts.map +1 -1
- package/dist/agents/worker.js +23 -2
- package/dist/agents/worker.js.map +1 -1
- package/dist/auth/index.d.ts +3 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +3 -1
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/linearPkce.d.ts +22 -0
- package/dist/auth/linearPkce.d.ts.map +1 -0
- package/dist/auth/linearPkce.js +208 -0
- package/dist/auth/linearPkce.js.map +1 -0
- package/dist/auth/oauthPkce.d.ts +4 -3
- package/dist/auth/oauthPkce.d.ts.map +1 -1
- package/dist/auth/oauthPkce.js +39 -12
- package/dist/auth/oauthPkce.js.map +1 -1
- package/dist/auth/oauthStore.d.ts +11 -1
- package/dist/auth/oauthStore.d.ts.map +1 -1
- package/dist/auth/oauthStore.js +14 -2
- package/dist/auth/oauthStore.js.map +1 -1
- package/dist/auth/openrouterPkce.d.ts +29 -0
- package/dist/auth/openrouterPkce.d.ts.map +1 -0
- package/dist/auth/openrouterPkce.js +222 -0
- package/dist/auth/openrouterPkce.js.map +1 -0
- package/dist/automation/autonomousRunner.d.ts +17 -7
- package/dist/automation/autonomousRunner.d.ts.map +1 -1
- package/dist/automation/autonomousRunner.js +69 -70
- package/dist/automation/autonomousRunner.js.map +1 -1
- package/dist/automation/backlogGrooming.d.ts +21 -0
- package/dist/automation/backlogGrooming.d.ts.map +1 -0
- package/dist/automation/backlogGrooming.js +80 -0
- package/dist/automation/backlogGrooming.js.map +1 -0
- package/dist/automation/localCI.d.ts +24 -0
- package/dist/automation/localCI.d.ts.map +1 -0
- package/dist/automation/localCI.js +84 -0
- package/dist/automation/localCI.js.map +1 -0
- package/dist/automation/runnerExecution.d.ts +33 -7
- package/dist/automation/runnerExecution.d.ts.map +1 -1
- package/dist/automation/runnerExecution.js +202 -154
- package/dist/automation/runnerExecution.js.map +1 -1
- package/dist/automation/runnerTypes.d.ts +5 -1
- package/dist/automation/runnerTypes.d.ts.map +1 -1
- package/dist/automation/taskSource.d.ts +101 -0
- package/dist/automation/taskSource.d.ts.map +1 -0
- package/dist/automation/taskSource.js +136 -0
- package/dist/automation/taskSource.js.map +1 -0
- package/dist/automation/workerAuditLog.d.ts +29 -0
- package/dist/automation/workerAuditLog.d.ts.map +1 -0
- package/dist/automation/workerAuditLog.js +82 -0
- package/dist/automation/workerAuditLog.js.map +1 -0
- package/dist/cli/authHandler.d.ts +14 -5
- package/dist/cli/authHandler.d.ts.map +1 -1
- package/dist/cli/authHandler.js +131 -36
- package/dist/cli/authHandler.js.map +1 -1
- package/dist/cli/daemon.d.ts +5 -0
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/daemon.js +13 -0
- package/dist/cli/daemon.js.map +1 -1
- package/dist/cli/doctorHandler.d.ts +2 -0
- package/dist/cli/doctorHandler.d.ts.map +1 -0
- package/dist/cli/doctorHandler.js +114 -0
- package/dist/cli/doctorHandler.js.map +1 -0
- package/dist/cli/initWizard.d.ts +13 -0
- package/dist/cli/initWizard.d.ts.map +1 -0
- package/dist/cli/initWizard.js +314 -0
- package/dist/cli/initWizard.js.map +1 -0
- package/dist/cli.js +112 -38
- package/dist/cli.js.map +1 -1
- package/dist/core/config.d.ts +89 -15
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +100 -23
- package/dist/core/config.js.map +1 -1
- package/dist/core/envFile.d.ts +6 -0
- package/dist/core/envFile.d.ts.map +1 -1
- package/dist/core/envFile.js +39 -1
- package/dist/core/envFile.js.map +1 -1
- package/dist/core/eventHub.d.ts +22 -0
- package/dist/core/eventHub.d.ts.map +1 -1
- package/dist/core/eventHub.js.map +1 -1
- package/dist/core/providerOverride.d.ts +6 -0
- package/dist/core/providerOverride.d.ts.map +1 -0
- package/dist/core/providerOverride.js +37 -0
- package/dist/core/providerOverride.js.map +1 -0
- package/dist/core/service.d.ts.map +1 -1
- package/dist/core/service.js +43 -20
- package/dist/core/service.js.map +1 -1
- package/dist/core/types.d.ts +16 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/discord/discordCore.d.ts.map +1 -1
- package/dist/discord/discordCore.js +16 -103
- package/dist/discord/discordCore.js.map +1 -1
- package/dist/discord/discordHandlers.d.ts.map +1 -1
- package/dist/discord/discordHandlers.js +15 -12
- package/dist/discord/discordHandlers.js.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/issues/sqliteStore.d.ts.map +1 -1
- package/dist/issues/sqliteStore.js +7 -2
- package/dist/issues/sqliteStore.js.map +1 -1
- package/dist/knowledge/scanner.d.ts.map +1 -1
- package/dist/knowledge/scanner.js +5 -0
- package/dist/knowledge/scanner.js.map +1 -1
- package/dist/linear/linear.d.ts +45 -2
- package/dist/linear/linear.d.ts.map +1 -1
- package/dist/linear/linear.js +154 -3
- package/dist/linear/linear.js.map +1 -1
- package/dist/locale/prompts/en.d.ts.map +1 -1
- package/dist/locale/prompts/en.js +40 -20
- package/dist/locale/prompts/en.js.map +1 -1
- package/dist/locale/prompts/ko.d.ts.map +1 -1
- package/dist/locale/prompts/ko.js +39 -20
- package/dist/locale/prompts/ko.js.map +1 -1
- package/dist/locale/types.d.ts +6 -0
- package/dist/locale/types.d.ts.map +1 -1
- package/dist/mcp/mcpClient.d.ts +27 -0
- package/dist/mcp/mcpClient.d.ts.map +1 -0
- package/dist/mcp/mcpClient.js +145 -0
- package/dist/mcp/mcpClient.js.map +1 -0
- package/dist/memory/memoryCore.d.ts.map +1 -1
- package/dist/memory/memoryCore.js +8 -2
- package/dist/memory/memoryCore.js.map +1 -1
- package/dist/memory/repoKnowledge.d.ts +33 -0
- package/dist/memory/repoKnowledge.d.ts.map +1 -0
- package/dist/memory/repoKnowledge.js +97 -0
- package/dist/memory/repoKnowledge.js.map +1 -0
- package/dist/notify/notifier.d.ts +26 -0
- package/dist/notify/notifier.d.ts.map +1 -0
- package/dist/notify/notifier.js +131 -0
- package/dist/notify/notifier.js.map +1 -0
- package/dist/orchestration/conflictDetector.d.ts +5 -2
- package/dist/orchestration/conflictDetector.d.ts.map +1 -1
- package/dist/orchestration/conflictDetector.js +35 -6
- package/dist/orchestration/conflictDetector.js.map +1 -1
- package/dist/orchestration/decisionEngine.d.ts +20 -0
- package/dist/orchestration/decisionEngine.d.ts.map +1 -1
- package/dist/orchestration/decisionEngine.js +45 -0
- package/dist/orchestration/decisionEngine.js.map +1 -1
- package/dist/support/banner.d.ts +7 -0
- package/dist/support/banner.d.ts.map +1 -0
- package/dist/support/banner.js +32 -0
- package/dist/support/banner.js.map +1 -0
- package/dist/support/chat.js +36 -27
- package/dist/support/chat.js.map +1 -1
- package/dist/support/chatBackend.d.ts +6 -0
- package/dist/support/chatBackend.d.ts.map +1 -1
- package/dist/support/chatBackend.js +105 -83
- package/dist/support/chatBackend.js.map +1 -1
- package/dist/support/chatTui.d.ts.map +1 -1
- package/dist/support/chatTui.js +217 -27
- package/dist/support/chatTui.js.map +1 -1
- package/dist/support/colors.d.ts +15 -0
- package/dist/support/colors.d.ts.map +1 -0
- package/dist/support/colors.js +23 -0
- package/dist/support/colors.js.map +1 -0
- package/dist/support/dashboardHtml.d.ts +1 -1
- package/dist/support/dashboardHtml.d.ts.map +1 -1
- package/dist/support/dashboardHtml.js +318 -65
- package/dist/support/dashboardHtml.js.map +1 -1
- package/dist/support/planCommand.d.ts +17 -0
- package/dist/support/planCommand.d.ts.map +1 -0
- package/dist/support/planCommand.js +114 -0
- package/dist/support/planCommand.js.map +1 -0
- package/dist/support/planner.d.ts +9 -2
- package/dist/support/planner.d.ts.map +1 -1
- package/dist/support/planner.js +43 -111
- package/dist/support/planner.js.map +1 -1
- package/dist/support/projectMapper.d.ts.map +1 -1
- package/dist/support/projectMapper.js +29 -1
- package/dist/support/projectMapper.js.map +1 -1
- package/dist/support/promptHelper.d.ts +24 -0
- package/dist/support/promptHelper.d.ts.map +1 -0
- package/dist/support/promptHelper.js +94 -0
- package/dist/support/promptHelper.js.map +1 -0
- package/dist/support/rateLimiter.d.ts.map +1 -1
- package/dist/support/rateLimiter.js +6 -0
- package/dist/support/rateLimiter.js.map +1 -1
- package/dist/support/repoMetadata.d.ts +51 -0
- package/dist/support/repoMetadata.d.ts.map +1 -0
- package/dist/support/repoMetadata.js +91 -0
- package/dist/support/repoMetadata.js.map +1 -0
- package/dist/support/web.d.ts.map +1 -1
- package/dist/support/web.js +196 -71
- package/dist/support/web.js.map +1 -1
- package/dist/support/worktreeManager.d.ts +6 -1
- package/dist/support/worktreeManager.d.ts.map +1 -1
- package/dist/support/worktreeManager.js +23 -1
- package/dist/support/worktreeManager.js.map +1 -1
- package/dist/taskState/store.d.ts +1 -0
- package/dist/taskState/store.d.ts.map +1 -1
- package/dist/taskState/store.js +22 -1
- package/dist/taskState/store.js.map +1 -1
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -3,33 +3,28 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/@intrect/openswarm)
|
|
4
4
|
[](https://www.npmjs.com/package/@intrect/openswarm)
|
|
5
5
|
[](LICENSE)
|
|
6
|
-
[](benchmarks/RUBRIC.md)
|
|
7
|
+
[](https://github.com/unohee/OpenSwarm/discussions)
|
|
7
8
|
|
|
8
|
-
> Autonomous AI agent orchestrator — Claude, GPT, Codex, and local models (Ollama/LMStudio/llama.cpp)
|
|
9
|
+
> Autonomous AI agent orchestrator — Claude, GPT, Codex, **OpenRouter (any model)**, and local models (Ollama/LMStudio/llama.cpp)
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
OpenSwarm is developed and maintained in my spare time by a single author.
|
|
13
|
-
If the project saves you time or money, please consider chipping in —
|
|
14
|
-
it directly funds ongoing updates, bug fixes, and new adapters.
|
|
15
|
-
|
|
16
|
-
[](https://ko-fi.com/unohee)
|
|
17
|
-
|
|
18
|
-
One-off contributions are perfectly fine — there is no subscription
|
|
19
|
-
tier and no feature is paywalled. Thank you.
|
|
11
|
+
> 💬 **Help shape OpenSwarm.** Share feature ideas, vote on the roadmap, and ask questions in [**GitHub Discussions**](https://github.com/unohee/OpenSwarm/discussions). The roadmap is built in the open — your feedback decides what ships next.
|
|
20
12
|
|
|
21
13
|
---
|
|
22
14
|
|
|
23
|
-
OpenSwarm orchestrates multiple AI agents as autonomous code workers. It picks up Linear issues, runs Worker/Reviewer pair pipelines, reports to Discord, and retains long-term memory via LanceDB.
|
|
15
|
+
OpenSwarm orchestrates multiple AI agents as autonomous code workers. It picks up Linear issues, runs Worker/Reviewer pair pipelines, reports to Discord, and retains long-term memory via LanceDB. Workers run on Claude Code, OpenAI GPT, Codex, **any OpenRouter model**, or **local open-source models** (Ollama, LMStudio, llama.cpp) — with cost-aware routing measured on an L0–L6 benchmark ladder.
|
|
16
|
+
|
|
17
|
+
**Verified on real GitHub issues**: the agentic harness solves SWE-bench Lite instances graded by the official harness. Hybrid mode — a frontier model diagnoses read-only, a lightweight model implements with a verification loop — resolved **3/3 attempted instances** that every single lightweight model had failed, at a fraction of frontier-only cost. Workers also **learn each repository over time**: task outcomes are stored as per-repo knowledge and recalled into future prompts. ([benchmark rubric & results](benchmarks/RUBRIC.md))
|
|
24
18
|
|
|
25
19
|
## Quick Start
|
|
26
20
|
|
|
27
21
|
```bash
|
|
28
22
|
npm install -g @intrect/openswarm
|
|
29
|
-
openswarm
|
|
23
|
+
openswarm auth login # one-time provider setup — ChatGPT (codex/gpt) OAuth
|
|
24
|
+
openswarm # launches the TUI chat
|
|
30
25
|
```
|
|
31
26
|
|
|
32
|
-
|
|
27
|
+
`openswarm` with no arguments launches the TUI chat. You need **one provider** first: `openswarm auth login` (ChatGPT OAuth, used by `codex`/`gpt`), or `openswarm auth login --provider openrouter` / `export OPENROUTER_API_KEY=…`, or just have an authenticated `claude` on PATH. Check what's wired with `openswarm auth status`.
|
|
33
28
|
|
|
34
29
|

|
|
35
30
|
|
|
@@ -56,7 +51,7 @@ openswarm chat [session] # Simple readline chat
|
|
|
56
51
|
openswarm start # Start full daemon (requires config.yaml)
|
|
57
52
|
openswarm run "Fix the bug" -p ~/my-project # Run a single task
|
|
58
53
|
openswarm exec "Run tests" --local --pipeline # Execute via daemon
|
|
59
|
-
openswarm init #
|
|
54
|
+
openswarm init # Interactive setup wizard (provider, task backend, config)
|
|
60
55
|
openswarm validate # Validate config.yaml
|
|
61
56
|
|
|
62
57
|
# Code Registry & BS Detector
|
|
@@ -93,11 +88,13 @@ For autonomous operation (Linear issue processing, Discord control, PR auto-impr
|
|
|
93
88
|
### Prerequisites
|
|
94
89
|
|
|
95
90
|
- **Node.js** >= 22
|
|
96
|
-
- **
|
|
97
|
-
- **OpenAI Codex
|
|
98
|
-
- **
|
|
99
|
-
- **
|
|
100
|
-
- **
|
|
91
|
+
- **At least one LLM provider** (default `codex`):
|
|
92
|
+
- **OpenAI Codex** — default. `openswarm auth login` (ChatGPT OAuth) or a `codex` binary on PATH
|
|
93
|
+
- **OpenRouter** — `OPENROUTER_API_KEY`, or `openswarm auth login --provider openrouter`
|
|
94
|
+
- **Claude Code CLI** (`claude -p`) — opt-in fallback; an authenticated `claude` on PATH (used when codex hits its usage limit or OpenRouter is unavailable)
|
|
95
|
+
- **Local** (Ollama / LM Studio / llama.cpp) — auto-detected, no auth
|
|
96
|
+
- **Native build toolchain** — `better-sqlite3` and `@lancedb/lancedb` are native modules. Prebuilt binaries cover common platforms; if yours lacks one, `npm install` builds from source and needs `python3` + a C/C++ toolchain (`build-essential` on Linux, Xcode Command Line Tools on macOS)
|
|
97
|
+
- **For autonomous mode only** (optional): **Linear** API key + team ID, **Discord** bot token (message content intent), **GitHub CLI** (`gh`) for CI monitoring
|
|
101
98
|
|
|
102
99
|
### Configuration
|
|
103
100
|
|
|
@@ -133,19 +130,23 @@ LINEAR_TEAM_ID=your-linear-team-id
|
|
|
133
130
|
### CLI Adapter (Provider)
|
|
134
131
|
|
|
135
132
|
```yaml
|
|
136
|
-
adapter:
|
|
133
|
+
adapter: codex # default. "codex" | "openrouter" | "gpt" | "local" | "lmstudio" | "claude"
|
|
137
134
|
```
|
|
138
135
|
|
|
139
136
|
Switch at runtime via Discord: `!provider codex` / `!provider claude`
|
|
140
137
|
|
|
141
138
|
| Adapter | Backend | Models | Auth |
|
|
142
139
|
|---------|---------|--------|------|
|
|
143
|
-
| `
|
|
144
|
-
| `
|
|
140
|
+
| `codex` | OpenAI Codex CLI | o3, o4-mini | OAuth PKCE / CLI auth |
|
|
141
|
+
| `claude` | Claude Code CLI (`claude -p`) — opt-in fallback | sonnet-4, haiku-4.5, opus-4 | CLI auth |
|
|
145
142
|
| `gpt` | OpenAI API | gpt-4o, o3, gpt-4.1 | OAuth PKCE |
|
|
143
|
+
| `openrouter` | OpenRouter API (native agentic loop) | any OpenRouter model — gpt-5, gemini-2.5-flash, deepseek, glm, qwen, … | OAuth PKCE or `OPENROUTER_API_KEY` |
|
|
146
144
|
| `local` | Ollama / LMStudio / llama.cpp | gemma4, llama3, mistral, qwen, etc. | None |
|
|
145
|
+
| `lmstudio` | LM Studio OpenAI-compatible API | loaded LM Studio model (`LMSTUDIO_MODEL`) | Optional API key |
|
|
146
|
+
|
|
147
|
+
The `openrouter` adapter runs OpenSwarm's own agentic tool loop (read/search/edit/bash with verification guards), enables ZDR (`data_collection: deny`) for non-OpenAI models, and applies Anthropic prompt caching automatically.
|
|
147
148
|
|
|
148
|
-
Local models are auto-detected on standard ports (Ollama `:11434`, LMStudio `:1234`, llama.cpp `:8080`).
|
|
149
|
+
Local models are auto-detected on standard ports (Ollama `:11434`, LMStudio `:1234`, llama.cpp `:8080`). Use `lmstudio` for a dedicated LM Studio endpoint (`LMSTUDIO_BASE_URL`, default `http://localhost:1234`).
|
|
149
150
|
|
|
150
151
|
Per-role adapter overrides:
|
|
151
152
|
|
|
@@ -250,13 +251,15 @@ docker compose up -d # Docker
|
|
|
250
251
|
|
|
251
252
|
## Features
|
|
252
253
|
|
|
253
|
-
- **Multi-Provider Adapters** — Pluggable adapter system: **Claude Code**, **OpenAI GPT/Codex**, and **local models** (Ollama, LMStudio, llama.cpp) with runtime provider switching
|
|
254
|
+
- **Multi-Provider Adapters** — Pluggable adapter system: **Claude Code**, **OpenAI GPT/Codex**, **OpenRouter** (any model, native agentic loop), and **local models** (Ollama, LMStudio, llama.cpp) with runtime provider switching
|
|
254
255
|
- **Code Registry** — SQLite-backed entity registry tracking every function/class/type across 8 languages, with complexity scoring, test mapping, and risk assessment
|
|
255
256
|
- **BS Detector** — Built-in static analysis engine that detects bad code patterns (empty catch, hardcoded secrets, `as any`, etc.) with pipeline guard integration
|
|
256
257
|
- **Autonomous Pipeline** — Cron-driven heartbeat fetches Linear issues, runs Worker/Reviewer pair loops, and updates issue state automatically
|
|
257
258
|
- **Worker/Reviewer Pairs** — Multi-iteration code generation with automated review, testing, and documentation stages
|
|
258
259
|
- **Decision Engine** — Scope validation, rate limiting, priority-based task selection, and workflow mapping
|
|
259
260
|
- **Cognitive Memory** — LanceDB vector store with Xenova/multilingual-e5-base embeddings for long-term recall across sessions
|
|
261
|
+
- **Repo Knowledge Loop** — workers learn each repository over time: task outcomes (success patterns, review-rejection pitfalls) are stored per-repo and recalled into the next worker prompt
|
|
262
|
+
- **SWE-bench Verified** — the agentic harness solves real SWE-bench Lite issues, graded by the official harness; hybrid mode (frontier diagnosis + lightweight implementer) resolved 3/3 attempted instances ([benchmarks/RUBRIC.md](benchmarks/RUBRIC.md))
|
|
260
263
|
- **Knowledge Graph** — Static code analysis, dependency mapping, impact analysis, and file-level conflict detection across concurrent tasks
|
|
261
264
|
- **Discord Control** — Full command interface for monitoring, task dispatch, scheduling, provider switching, and pair session management
|
|
262
265
|
- **Rich TUI Chat** — Claude Code inspired terminal interface with tabs, streaming responses, and geek-themed loading messages
|
|
@@ -294,6 +297,23 @@ Memory types: `belief` · `strategy` · `user_model` · `system_pattern` · `con
|
|
|
294
297
|
|
|
295
298
|
Background: decay, consolidation, contradiction detection, distillation.
|
|
296
299
|
|
|
300
|
+
**Repo knowledge loop** — every completed task writes repo-scoped knowledge
|
|
301
|
+
(success → `system_pattern` with files changed + approach, review rejection →
|
|
302
|
+
`constraint` pitfall), and the next task on the same repo recalls the most
|
|
303
|
+
relevant entries into the worker prompt as a "Repository Knowledge" section.
|
|
304
|
+
Workers get better at a codebase the more they work on it.
|
|
305
|
+
|
|
306
|
+
### Benchmarks (L0–L6)
|
|
307
|
+
|
|
308
|
+
`benchmarks/` contains a difficulty ladder for routing models by measured
|
|
309
|
+
capability — synthetic L0–L5 tasks with deterministic grading, and L6 = real
|
|
310
|
+
GitHub issues (SWE-bench Lite) solved by the OpenSwarm harness and graded by
|
|
311
|
+
the official swebench harness. Headline: **hybrid mode** (frontier read-only
|
|
312
|
+
diagnosis + lightweight implementer with a verification loop) resolved 3/3
|
|
313
|
+
attempted instances that every single lightweight model had failed. See
|
|
314
|
+
[benchmarks/RUBRIC.md](benchmarks/RUBRIC.md) for the rubric, measured results,
|
|
315
|
+
and the harness defects the benchmark uncovered.
|
|
316
|
+
|
|
297
317
|
---
|
|
298
318
|
|
|
299
319
|
## Discord Commands
|
package/config.example.yaml
CHANGED
|
@@ -3,9 +3,15 @@
|
|
|
3
3
|
# Copy this file to config.yaml to use
|
|
4
4
|
|
|
5
5
|
# Default CLI adapter for worker/reviewer stages
|
|
6
|
-
# Options: claude, codex, gpt, local
|
|
7
|
-
# For GPT: run `openswarm auth login --provider gpt`
|
|
6
|
+
# Options: claude, codex, gpt, local, lmstudio, openrouter
|
|
7
|
+
# For GPT: run `openswarm auth login --provider gpt`
|
|
8
|
+
# (uses the public Codex OAuth client by default — no extra config needed)
|
|
9
|
+
# For OpenRouter: run `openswarm auth login --provider openrouter`
|
|
10
|
+
# (PKCE browser flow → stores a sk-or-* API key; falls back to manual paste)
|
|
8
11
|
# For local: start Ollama, LMStudio, or llama.cpp server
|
|
12
|
+
# For lmstudio: start LM Studio Local Server (default http://localhost:1234)
|
|
13
|
+
# Optional env: LMSTUDIO_BASE_URL, LMSTUDIO_MODEL, LMSTUDIO_API_KEY
|
|
14
|
+
# If LMSTUDIO_MODEL is unset, the adapter auto-selects the first loaded model.
|
|
9
15
|
adapter: claude
|
|
10
16
|
|
|
11
17
|
discord:
|
|
@@ -49,7 +55,7 @@ autonomous:
|
|
|
49
55
|
decomposition:
|
|
50
56
|
enabled: true # Enable decomposition
|
|
51
57
|
thresholdMinutes: 30 # Decompose if estimated time exceeds this
|
|
52
|
-
plannerModel: claude-
|
|
58
|
+
plannerModel: claude-opus-4-7 # Planner model (Opus for deep decomposition)
|
|
53
59
|
|
|
54
60
|
# Per-role settings
|
|
55
61
|
# Hybrid config: Claude for complex coding, local model for review/docs ($0)
|
|
@@ -57,15 +63,15 @@ autonomous:
|
|
|
57
63
|
worker:
|
|
58
64
|
enabled: true
|
|
59
65
|
adapter: claude
|
|
60
|
-
model: claude-sonnet-4-
|
|
61
|
-
escalateModel: claude-opus-4-
|
|
66
|
+
model: claude-sonnet-4-6 # Sonnet for coding tasks
|
|
67
|
+
escalateModel: claude-opus-4-7 # On failure: Opus
|
|
62
68
|
escalateAfterIteration: 3
|
|
63
69
|
timeoutMs: 1800000 # 30 minutes
|
|
64
70
|
reviewer:
|
|
65
71
|
enabled: true
|
|
66
72
|
adapter: local # Local model — free, 7s response
|
|
67
73
|
model: gemma-4-e4b-it # Gemma 4 e4b via LMStudio
|
|
68
|
-
escalateModel: claude-sonnet-4-
|
|
74
|
+
escalateModel: claude-sonnet-4-6 # Spot check: Sonnet reviews after N revisions
|
|
69
75
|
escalateAfterIteration: 3 # Escalate from 3rd iteration
|
|
70
76
|
timeoutMs: 60000 # 1 minute (local models are slower)
|
|
71
77
|
tester:
|
|
@@ -88,13 +94,19 @@ autonomous:
|
|
|
88
94
|
|
|
89
95
|
# Pipeline guards
|
|
90
96
|
guards:
|
|
91
|
-
qualityGate: true
|
|
97
|
+
qualityGate: true # bad-edit lint gate: tsc/ruff on changed files (blocking)
|
|
92
98
|
fakeDataGuard: true
|
|
93
99
|
conventionalCommits: true
|
|
94
100
|
branchValidation: true
|
|
95
101
|
uncertaintyDetection: true
|
|
96
102
|
registryCheck: true
|
|
97
|
-
bsDetector: true
|
|
103
|
+
bsDetector: true # blocks on critical code-smell patterns
|
|
104
|
+
|
|
105
|
+
# Self-repair reflection budget: max objective (lint/bs/test) failures tolerated
|
|
106
|
+
# before the loop gives up on bad edits. Lower it to cap token burn when
|
|
107
|
+
# reflection stops making progress; the loop also bails early on stagnation
|
|
108
|
+
# (identical errors twice in a row). Default: 3.
|
|
109
|
+
maxReflections: 3
|
|
98
110
|
|
|
99
111
|
# Job profiles for lightweight vs heavy work
|
|
100
112
|
jobProfiles:
|
|
@@ -105,8 +117,8 @@ autonomous:
|
|
|
105
117
|
- name: deep-engineering
|
|
106
118
|
minMinutes: 16
|
|
107
119
|
roles:
|
|
108
|
-
worker: claude-sonnet-4-
|
|
109
|
-
reviewer: claude-sonnet-4-
|
|
120
|
+
worker: claude-sonnet-4-6 # Sonnet for complex work
|
|
121
|
+
reviewer: claude-sonnet-4-6 # Sonnet reviews Sonnet
|
|
110
122
|
|
|
111
123
|
# Long-running task monitoring (RunPod training, batch processing, etc.)
|
|
112
124
|
#
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ToolDefinition } from './tools.js';
|
|
1
|
+
import { type ToolCall, type ToolDefinition } from './tools.js';
|
|
2
2
|
import type { CliRunResult } from './types.js';
|
|
3
3
|
/** OpenAI Chat Completions API 메시지 포맷 */
|
|
4
4
|
export type ChatMessage = {
|
|
@@ -51,7 +51,7 @@ export interface AgenticLoopOptions {
|
|
|
51
51
|
model: string;
|
|
52
52
|
/** API 호출 함수 (어댑터별로 주입) */
|
|
53
53
|
callApi: (messages: ChatMessage[], tools: ToolDefinition[]) => Promise<ChatCompletionResponse>;
|
|
54
|
-
/** 최대 도구 사용 턴 수 (기본:
|
|
54
|
+
/** 최대 도구 사용 턴 수 (기본: 20) */
|
|
55
55
|
maxTurns?: number;
|
|
56
56
|
/** 전체 타임아웃 (ms, 기본: 300000) */
|
|
57
57
|
timeoutMs?: number;
|
|
@@ -59,6 +59,29 @@ export interface AgenticLoopOptions {
|
|
|
59
59
|
onLog?: (line: string) => void;
|
|
60
60
|
/** 도구 사용 허용 여부 (기본: true) */
|
|
61
61
|
enableTools?: boolean;
|
|
62
|
+
/** 토큰 기반 압축 트리거 임계값 (기본: 24000) */
|
|
63
|
+
compactTokenThreshold?: number;
|
|
64
|
+
/** 이 메시지 수를 넘어야 압축 후보 (VEGA compact_threshold, 기본: 24) */
|
|
65
|
+
compactAfterMessages?: number;
|
|
66
|
+
/** 압축 시 항상 원본 유지할 최근 메시지 수 (VEGA keep_recent, 기본: 8) */
|
|
67
|
+
keepRecentMessages?: number;
|
|
68
|
+
/**
|
|
69
|
+
* 수정이 필수인 작업의 no-edit 종료 가드. 모델이 edit/write 도구를 한 번도 안 쓰고
|
|
70
|
+
* 최종 텍스트로 끝내려 하면 "아직 수정 안 했다, 계속하라"고 N회까지 되민다.
|
|
71
|
+
* 경량 모델(gemini 등)이 탐색만 하고 일찍 결론 내는 패턴 차단 (SWE 하이브리드에서 발견).
|
|
72
|
+
* 기본 0 (비활성) — 수정 없는 작업(진단·분석)도 정상이므로 옵트인.
|
|
73
|
+
*/
|
|
74
|
+
nudgeMaxOnNoEdit?: number;
|
|
75
|
+
/** Verification-harness files for which edit/write are refused (see tools.ts ToolExecOptions) */
|
|
76
|
+
protectedFiles?: string[];
|
|
77
|
+
/** bash tool timeout — docker-based tests need minutes (default 30s) */
|
|
78
|
+
bashTimeoutMs?: number;
|
|
79
|
+
/** Expose web_fetch + web_search tools (default true). Disabled e.g. for SWE-bench integrity. */
|
|
80
|
+
webTools?: boolean;
|
|
81
|
+
/** MCP tools (named `server__tool`) discovered from mcp.json, exposed alongside the native tools. */
|
|
82
|
+
mcpTools?: ToolDefinition[];
|
|
83
|
+
/** Abort the loop (checked each turn) — Esc/Ctrl+C in chat. */
|
|
84
|
+
signal?: AbortSignal;
|
|
62
85
|
}
|
|
63
86
|
/** 루프 실행 결과 */
|
|
64
87
|
export interface AgenticLoopResult {
|
|
@@ -86,5 +109,25 @@ export declare function runAgenticLoop(options: AgenticLoopOptions): Promise<Age
|
|
|
86
109
|
* AgenticLoopResult → CliRunResult 변환
|
|
87
110
|
*/
|
|
88
111
|
export declare function loopResultToCliResult(result: AgenticLoopResult): CliRunResult;
|
|
112
|
+
/** Stable key for a tool call (name + args) — used to detect repeated calls. */
|
|
113
|
+
export declare function toolCallKey(tc: ToolCall): string;
|
|
114
|
+
/**
|
|
115
|
+
* True when every tool call this turn was already seen (same name+args), i.e.
|
|
116
|
+
* pure repetition with no new info or change — a stalled turn. Empty turns are
|
|
117
|
+
* not stalls (the model produced no tool calls, which ends the loop normally).
|
|
118
|
+
*/
|
|
119
|
+
export declare function allToolCallsSeen(toolCalls: ToolCall[], seen: Set<string>): boolean;
|
|
120
|
+
/**
|
|
121
|
+
* 이전 턴(assistant+tool 쌍)을 요약 1줄로 교체.
|
|
122
|
+
* OpenAI API 제약: tool 메시지는 직전 assistant의 tool_call_id와 대응해야 하므로
|
|
123
|
+
* 오래된 assistant+tool 쌍은 텍스트 요약으로 대체해 API 오류를 방지.
|
|
124
|
+
*
|
|
125
|
+
* 보존 기준 (VEGA keep_recent): 최근 keepRecent개 메시지 블록은 항상 원본 유지.
|
|
126
|
+
* tool 메시지는 직전 assistant의 tool_call_id와 짝이 맞아야 하므로, 보존 경계는
|
|
127
|
+
* keepRecent 지점 이후 첫 assistant로 정렬해 짝이 깨진 tool 메시지가 남지 않게 한다.
|
|
128
|
+
* 기존 [Prior turns compacted] 요약이 있으면 새 요약에 합산 후 교체.
|
|
129
|
+
* (테스트를 위해 export — 외부에서 직접 호출할 일은 없음)
|
|
130
|
+
*/
|
|
131
|
+
export declare function compactPriorTurns(messages: ChatMessage[], keepRecent?: number): void;
|
|
89
132
|
export {};
|
|
90
133
|
//# sourceMappingURL=agenticLoop.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agenticLoop.d.ts","sourceRoot":"","sources":["../../src/adapters/agenticLoop.ts"],"names":[],"mappings":"AAQA,OAAO,
|
|
1
|
+
{"version":3,"file":"agenticLoop.d.ts","sourceRoot":"","sources":["../../src/adapters/agenticLoop.ts"],"names":[],"mappings":"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"}
|