@intrect/openswarm 0.4.3 → 0.5.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 +33 -16
- package/config.example.yaml +14 -8
- package/dist/adapters/agenticLoop.d.ts +30 -1
- package/dist/adapters/agenticLoop.d.ts.map +1 -1
- package/dist/adapters/agenticLoop.js +150 -60
- package/dist/adapters/agenticLoop.js.map +1 -1
- package/dist/adapters/codex.d.ts +1 -0
- package/dist/adapters/codex.d.ts.map +1 -1
- package/dist/adapters/codex.js +40 -5
- package/dist/adapters/codex.js.map +1 -1
- package/dist/adapters/gpt.d.ts.map +1 -1
- package/dist/adapters/gpt.js +18 -4
- package/dist/adapters/gpt.js.map +1 -1
- package/dist/adapters/index.d.ts +3 -2
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +8 -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 +45 -13
- package/dist/adapters/local.js.map +1 -1
- package/dist/adapters/openrouter.d.ts +56 -0
- package/dist/adapters/openrouter.d.ts.map +1 -0
- package/dist/adapters/openrouter.js +294 -0
- package/dist/adapters/openrouter.js.map +1 -0
- package/dist/adapters/tools.d.ts +27 -2
- package/dist/adapters/tools.d.ts.map +1 -1
- package/dist/adapters/tools.js +99 -12
- package/dist/adapters/tools.js.map +1 -1
- package/dist/adapters/types.d.ts +20 -1
- package/dist/adapters/types.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/agents/pairPipeline.js +102 -3
- package/dist/agents/pairPipeline.js.map +1 -1
- package/dist/agents/worker.d.ts +6 -0
- package/dist/agents/worker.d.ts.map +1 -1
- package/dist/agents/worker.js +22 -2
- package/dist/agents/worker.js.map +1 -1
- package/dist/auth/index.d.ts +2 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +2 -1
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/oauthPkce.d.ts +4 -3
- package/dist/auth/oauthPkce.d.ts.map +1 -1
- package/dist/auth/oauthPkce.js +21 -7
- 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 +4 -0
- 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 +16 -6
- package/dist/automation/autonomousRunner.d.ts.map +1 -1
- package/dist/automation/autonomousRunner.js +54 -57
- package/dist/automation/autonomousRunner.js.map +1 -1
- package/dist/automation/runnerExecution.js +1 -1
- package/dist/automation/runnerExecution.js.map +1 -1
- package/dist/automation/runnerTypes.d.ts +1 -1
- package/dist/automation/runnerTypes.d.ts.map +1 -1
- package/dist/cli/authHandler.d.ts +8 -5
- package/dist/cli/authHandler.d.ts.map +1 -1
- package/dist/cli/authHandler.js +95 -35
- package/dist/cli/authHandler.js.map +1 -1
- package/dist/cli.js +5 -4
- package/dist/cli.js.map +1 -1
- package/dist/core/config.d.ts +39 -13
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +33 -15
- package/dist/core/config.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/service.js +2 -2
- package/dist/core/service.js.map +1 -1
- package/dist/core/types.d.ts +2 -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/locale/prompts/en.d.ts.map +1 -1
- package/dist/locale/prompts/en.js +26 -18
- 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 +25 -18
- 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/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/support/chat.js +8 -22
- package/dist/support/chat.js.map +1 -1
- package/dist/support/chatBackend.d.ts.map +1 -1
- package/dist/support/chatBackend.js +37 -83
- package/dist/support/chatBackend.js.map +1 -1
- package/dist/support/chatTui.d.ts.map +1 -1
- package/dist/support/chatTui.js +16 -19
- package/dist/support/chatTui.js.map +1 -1
- 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/projectMapper.d.ts.map +1 -1
- package/dist/support/projectMapper.js +29 -1
- package/dist/support/projectMapper.js.map +1 -1
- package/dist/support/repoMetadata.d.ts +44 -0
- package/dist/support/repoMetadata.d.ts.map +1 -0
- package/dist/support/repoMetadata.js +79 -0
- package/dist/support/repoMetadata.js.map +1 -0
- package/dist/support/web.d.ts.map +1 -1
- package/dist/support/web.js +53 -6
- package/dist/support/web.js.map +1 -1
- package/package.json +4 -1
package/README.md
CHANGED
|
@@ -3,24 +3,18 @@
|
|
|
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
|
|
|
@@ -133,7 +127,7 @@ LINEAR_TEAM_ID=your-linear-team-id
|
|
|
133
127
|
### CLI Adapter (Provider)
|
|
134
128
|
|
|
135
129
|
```yaml
|
|
136
|
-
adapter: claude # "claude" | "codex" | "gpt" | "local"
|
|
130
|
+
adapter: claude # "claude" | "codex" | "gpt" | "openrouter" | "local" | "lmstudio"
|
|
137
131
|
```
|
|
138
132
|
|
|
139
133
|
Switch at runtime via Discord: `!provider codex` / `!provider claude`
|
|
@@ -143,9 +137,13 @@ Switch at runtime via Discord: `!provider codex` / `!provider claude`
|
|
|
143
137
|
| `claude` | Claude Code CLI | sonnet-4, haiku-4.5, opus-4 | CLI auth |
|
|
144
138
|
| `codex` | OpenAI Codex CLI | o3, o4-mini | CLI auth |
|
|
145
139
|
| `gpt` | OpenAI API | gpt-4o, o3, gpt-4.1 | OAuth PKCE |
|
|
140
|
+
| `openrouter` | OpenRouter API (native agentic loop) | any OpenRouter model — gpt-5, gemini-2.5-flash, deepseek, glm, qwen, … | OAuth PKCE or `OPENROUTER_API` |
|
|
146
141
|
| `local` | Ollama / LMStudio / llama.cpp | gemma4, llama3, mistral, qwen, etc. | None |
|
|
142
|
+
| `lmstudio` | LM Studio OpenAI-compatible API | loaded LM Studio model (`LMSTUDIO_MODEL`) | Optional API key |
|
|
143
|
+
|
|
144
|
+
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
145
|
|
|
148
|
-
Local models are auto-detected on standard ports (Ollama `:11434`, LMStudio `:1234`, llama.cpp `:8080`).
|
|
146
|
+
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
147
|
|
|
150
148
|
Per-role adapter overrides:
|
|
151
149
|
|
|
@@ -250,13 +248,15 @@ docker compose up -d # Docker
|
|
|
250
248
|
|
|
251
249
|
## Features
|
|
252
250
|
|
|
253
|
-
- **Multi-Provider Adapters** — Pluggable adapter system: **Claude Code**, **OpenAI GPT/Codex**, and **local models** (Ollama, LMStudio, llama.cpp) with runtime provider switching
|
|
251
|
+
- **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
252
|
- **Code Registry** — SQLite-backed entity registry tracking every function/class/type across 8 languages, with complexity scoring, test mapping, and risk assessment
|
|
255
253
|
- **BS Detector** — Built-in static analysis engine that detects bad code patterns (empty catch, hardcoded secrets, `as any`, etc.) with pipeline guard integration
|
|
256
254
|
- **Autonomous Pipeline** — Cron-driven heartbeat fetches Linear issues, runs Worker/Reviewer pair loops, and updates issue state automatically
|
|
257
255
|
- **Worker/Reviewer Pairs** — Multi-iteration code generation with automated review, testing, and documentation stages
|
|
258
256
|
- **Decision Engine** — Scope validation, rate limiting, priority-based task selection, and workflow mapping
|
|
259
257
|
- **Cognitive Memory** — LanceDB vector store with Xenova/multilingual-e5-base embeddings for long-term recall across sessions
|
|
258
|
+
- **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
|
|
259
|
+
- **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
260
|
- **Knowledge Graph** — Static code analysis, dependency mapping, impact analysis, and file-level conflict detection across concurrent tasks
|
|
261
261
|
- **Discord Control** — Full command interface for monitoring, task dispatch, scheduling, provider switching, and pair session management
|
|
262
262
|
- **Rich TUI Chat** — Claude Code inspired terminal interface with tabs, streaming responses, and geek-themed loading messages
|
|
@@ -294,6 +294,23 @@ Memory types: `belief` · `strategy` · `user_model` · `system_pattern` · `con
|
|
|
294
294
|
|
|
295
295
|
Background: decay, consolidation, contradiction detection, distillation.
|
|
296
296
|
|
|
297
|
+
**Repo knowledge loop** — every completed task writes repo-scoped knowledge
|
|
298
|
+
(success → `system_pattern` with files changed + approach, review rejection →
|
|
299
|
+
`constraint` pitfall), and the next task on the same repo recalls the most
|
|
300
|
+
relevant entries into the worker prompt as a "Repository Knowledge" section.
|
|
301
|
+
Workers get better at a codebase the more they work on it.
|
|
302
|
+
|
|
303
|
+
### Benchmarks (L0–L6)
|
|
304
|
+
|
|
305
|
+
`benchmarks/` contains a difficulty ladder for routing models by measured
|
|
306
|
+
capability — synthetic L0–L5 tasks with deterministic grading, and L6 = real
|
|
307
|
+
GitHub issues (SWE-bench Lite) solved by the OpenSwarm harness and graded by
|
|
308
|
+
the official swebench harness. Headline: **hybrid mode** (frontier read-only
|
|
309
|
+
diagnosis + lightweight implementer with a verification loop) resolved 3/3
|
|
310
|
+
attempted instances that every single lightweight model had failed. See
|
|
311
|
+
[benchmarks/RUBRIC.md](benchmarks/RUBRIC.md) for the rubric, measured results,
|
|
312
|
+
and the harness defects the benchmark uncovered.
|
|
313
|
+
|
|
297
314
|
---
|
|
298
315
|
|
|
299
316
|
## 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:
|
|
@@ -105,8 +111,8 @@ autonomous:
|
|
|
105
111
|
- name: deep-engineering
|
|
106
112
|
minMinutes: 16
|
|
107
113
|
roles:
|
|
108
|
-
worker: claude-sonnet-4-
|
|
109
|
-
reviewer: claude-sonnet-4-
|
|
114
|
+
worker: claude-sonnet-4-6 # Sonnet for complex work
|
|
115
|
+
reviewer: claude-sonnet-4-6 # Sonnet reviews Sonnet
|
|
110
116
|
|
|
111
117
|
# Long-running task monitoring (RunPod training, batch processing, etc.)
|
|
112
118
|
#
|
|
@@ -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,23 @@ 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;
|
|
62
79
|
}
|
|
63
80
|
/** 루프 실행 결과 */
|
|
64
81
|
export interface AgenticLoopResult {
|
|
@@ -86,5 +103,17 @@ export declare function runAgenticLoop(options: AgenticLoopOptions): Promise<Age
|
|
|
86
103
|
* AgenticLoopResult → CliRunResult 변환
|
|
87
104
|
*/
|
|
88
105
|
export declare function loopResultToCliResult(result: AgenticLoopResult): CliRunResult;
|
|
106
|
+
/**
|
|
107
|
+
* 이전 턴(assistant+tool 쌍)을 요약 1줄로 교체.
|
|
108
|
+
* OpenAI API 제약: tool 메시지는 직전 assistant의 tool_call_id와 대응해야 하므로
|
|
109
|
+
* 오래된 assistant+tool 쌍은 텍스트 요약으로 대체해 API 오류를 방지.
|
|
110
|
+
*
|
|
111
|
+
* 보존 기준 (VEGA keep_recent): 최근 keepRecent개 메시지 블록은 항상 원본 유지.
|
|
112
|
+
* tool 메시지는 직전 assistant의 tool_call_id와 짝이 맞아야 하므로, 보존 경계는
|
|
113
|
+
* keepRecent 지점 이후 첫 assistant로 정렬해 짝이 깨진 tool 메시지가 남지 않게 한다.
|
|
114
|
+
* 기존 [Prior turns compacted] 요약이 있으면 새 요약에 합산 후 교체.
|
|
115
|
+
* (테스트를 위해 export — 외부에서 직접 호출할 일은 없음)
|
|
116
|
+
*/
|
|
117
|
+
export declare function compactPriorTurns(messages: ChatMessage[], keepRecent?: number): void;
|
|
89
118
|
export {};
|
|
90
119
|
//# 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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"}
|
|
@@ -1,11 +1,44 @@
|
|
|
1
1
|
// ============================================
|
|
2
2
|
// OpenSwarm - Agentic Tool Loop
|
|
3
3
|
// Created: 2026-04-11
|
|
4
|
-
// Purpose:
|
|
5
|
-
// 범용 에이전틱 루프 엔진.
|
|
4
|
+
// Purpose: Codex/OpenRouter/Local 어댑터용 범용 에이전틱 루프 엔진.
|
|
6
5
|
// OpenAI function calling 포맷 기반.
|
|
6
|
+
// VEGA token_count.py 패턴 이식 — 토큰 기반 히스토리 압축.
|
|
7
7
|
// ============================================
|
|
8
|
-
import { TOOL_DEFINITIONS, executeToolCalls } from './tools.js';
|
|
8
|
+
import { TOOL_DEFINITIONS, executeToolCalls, createReadCache } from './tools.js';
|
|
9
|
+
// ============ 토큰 카운팅 (VEGA token_count.py 이식) ============
|
|
10
|
+
// cl100k_base 근사: 한국어 0.78t/char, 영어 0.27t/char
|
|
11
|
+
function countTokensApprox(text) {
|
|
12
|
+
if (!text)
|
|
13
|
+
return 0;
|
|
14
|
+
const hangul = [...text].filter(c => c >= '가' && c <= '힣').length;
|
|
15
|
+
const korRatio = hangul / Math.max(1, text.length);
|
|
16
|
+
const rate = 0.78 * korRatio + 0.27 * (1 - korRatio);
|
|
17
|
+
return Math.ceil(text.length * rate);
|
|
18
|
+
}
|
|
19
|
+
function countMessageTokens(messages) {
|
|
20
|
+
let total = 0;
|
|
21
|
+
for (const m of messages) {
|
|
22
|
+
const content = typeof m.content === 'string' ? m.content : '';
|
|
23
|
+
total += countTokensApprox(content);
|
|
24
|
+
total += 4; // role overhead
|
|
25
|
+
if ('tool_calls' in m && m.tool_calls) {
|
|
26
|
+
for (const tc of m.tool_calls) {
|
|
27
|
+
total += countTokensApprox(tc.function.arguments) + countTokensApprox(tc.function.name) + 8;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return total;
|
|
32
|
+
}
|
|
33
|
+
// 도구 결과 길이 제한: 너무 작게 자르면 모델이 파일 절반만 보고 잘못 수정한다.
|
|
34
|
+
// 코딩 작업에 맞춰 넉넉히 보존(2500자), 초과 시 앞 1500 + 뒤 700자 유지.
|
|
35
|
+
function truncateToolResult(content, maxLen = 2500) {
|
|
36
|
+
if (content.length <= maxLen)
|
|
37
|
+
return content;
|
|
38
|
+
const head = content.slice(0, 1500);
|
|
39
|
+
const tail = content.slice(-700);
|
|
40
|
+
return `${head}\n...[${content.length - 2200} chars truncated]...\n${tail}`;
|
|
41
|
+
}
|
|
9
42
|
// ============ 에이전틱 루프 ============
|
|
10
43
|
/**
|
|
11
44
|
* 에이전틱 도구 루프 실행
|
|
@@ -16,7 +49,11 @@ import { TOOL_DEFINITIONS, executeToolCalls } from './tools.js';
|
|
|
16
49
|
* 3. 응답에 tool_calls가 없으면 (finish_reason = 'stop') → 최종 텍스트 반환
|
|
17
50
|
*/
|
|
18
51
|
export async function runAgenticLoop(options) {
|
|
19
|
-
const { systemPrompt, prompt, cwd, callApi, maxTurns =
|
|
52
|
+
const { systemPrompt, prompt, cwd, callApi, maxTurns = 20, timeoutMs = 300000, onLog, enableTools = true,
|
|
53
|
+
// 긴 작업(SWE-bench급 실전 repo)에서 압축이 너무 일찍·자주 터지면 모델이 읽은
|
|
54
|
+
// 파일 컨텍스트를 잃고 같은 파일을 반복 read하다 수정에 도달 못 한다(무한 탐색).
|
|
55
|
+
// 현대 모델 컨텍스트(128k+)에 맞춰 임계를 넉넉히, 최근 보존 블록도 늘린다.
|
|
56
|
+
compactTokenThreshold = 60000, compactAfterMessages = 60, keepRecentMessages = 16, nudgeMaxOnNoEdit = 0, protectedFiles, bashTimeoutMs, } = options;
|
|
20
57
|
const startTime = Date.now();
|
|
21
58
|
const deadline = startTime + timeoutMs;
|
|
22
59
|
// 메시지 히스토리 구성
|
|
@@ -24,9 +61,19 @@ export async function runAgenticLoop(options) {
|
|
|
24
61
|
if (systemPrompt) {
|
|
25
62
|
messages.push({ role: 'system', content: systemPrompt });
|
|
26
63
|
}
|
|
27
|
-
|
|
64
|
+
// 작업 루트(cwd)를 명시 — 모델이 모르면 '/'나 repo명 같은 절대경로를 추측해
|
|
65
|
+
// 경로 검증(project 밖 접근)에 막힌다. 실전 repo(pylint 등)에서 search_files가
|
|
66
|
+
// 전부 차단되던 결함(SWE-bench에서 발견). 도구는 이 루트 기준 상대경로를 쓰라고 안내.
|
|
67
|
+
const cwdNote = `# Working directory\n` +
|
|
68
|
+
`Your project root is: ${cwd}\n` +
|
|
69
|
+
`All file tools operate within this root. Use paths relative to it (e.g. "src/foo.ts" or ".") ` +
|
|
70
|
+
`or absolute paths under this root. Do NOT use "/" or a bare repo name — those are outside the project and will be rejected.\n\n`;
|
|
71
|
+
messages.push({ role: 'user', content: cwdNote + prompt });
|
|
28
72
|
const tools = enableTools ? TOOL_DEFINITIONS : [];
|
|
73
|
+
const readCache = createReadCache(); // 루프 단위 read 캐시 (중복 read 차단)
|
|
29
74
|
let toolCallCount = 0;
|
|
75
|
+
let editToolCount = 0; // edit_file/write_file 호출 수 (no-edit 가드용)
|
|
76
|
+
let nudgesUsed = 0;
|
|
30
77
|
let apiCallCount = 0;
|
|
31
78
|
let totalTokens = 0;
|
|
32
79
|
let finalText = '';
|
|
@@ -36,9 +83,17 @@ export async function runAgenticLoop(options) {
|
|
|
36
83
|
onLog?.(`⏰ Agentic loop timeout after ${turn} turns`);
|
|
37
84
|
break;
|
|
38
85
|
}
|
|
39
|
-
//
|
|
40
|
-
|
|
41
|
-
|
|
86
|
+
// 히스토리 압축 — VEGA compaction.py 패턴 이식.
|
|
87
|
+
// 트리거: 메시지 수가 compactAfterMessages를 넘고 + 토큰이 임계값 초과일 때만.
|
|
88
|
+
// 과거에는 turn>=2부터 매 턴 무조건 압축해 모델이 방금 읽은 파일·작업 맥락을
|
|
89
|
+
// 즉시 잃고 헛돌았다(루프 재발). 이제 정말 길어질 때만 압축하고, 압축해도
|
|
90
|
+
// 최근 keepRecentMessages 블록은 원본 유지한다.
|
|
91
|
+
if (messages.length > compactAfterMessages) {
|
|
92
|
+
const msgTokens = countMessageTokens(messages);
|
|
93
|
+
if (msgTokens > compactTokenThreshold) {
|
|
94
|
+
onLog?.(`📦 Compacting history (${messages.length} msgs, ${msgTokens} tokens > ${compactTokenThreshold})`);
|
|
95
|
+
compactPriorTurns(messages, keepRecentMessages);
|
|
96
|
+
}
|
|
42
97
|
}
|
|
43
98
|
// API 호출
|
|
44
99
|
apiCallCount++;
|
|
@@ -65,6 +120,20 @@ export async function runAgenticLoop(options) {
|
|
|
65
120
|
const assistantMsg = choice.message;
|
|
66
121
|
// 도구 호출이 없으면 최종 응답
|
|
67
122
|
if (!assistantMsg.tool_calls || assistantMsg.tool_calls.length === 0) {
|
|
123
|
+
// no-edit 종료 가드 — 수정 필수 작업인데 edit/write를 한 번도 안 하고 끝내려 하면
|
|
124
|
+
// 되밀어 계속하게 한다(경량 모델의 조기 결론 패턴 차단).
|
|
125
|
+
if (editToolCount === 0 && nudgesUsed < nudgeMaxOnNoEdit) {
|
|
126
|
+
nudgesUsed++;
|
|
127
|
+
onLog?.(`↩ No-edit guard: model tried to finish without editing (nudge ${nudgesUsed}/${nudgeMaxOnNoEdit})`);
|
|
128
|
+
messages.push({ role: 'assistant', content: assistantMsg.content ?? '' });
|
|
129
|
+
messages.push({
|
|
130
|
+
role: 'user',
|
|
131
|
+
content: 'You have not modified any files yet, but this task REQUIRES code changes. ' +
|
|
132
|
+
'Do not conclude with analysis only. Apply the fix now with edit_file, then verify. ' +
|
|
133
|
+
'Continue working.',
|
|
134
|
+
});
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
68
137
|
finalText = assistantMsg.content ?? '';
|
|
69
138
|
break;
|
|
70
139
|
}
|
|
@@ -92,20 +161,48 @@ export async function runAgenticLoop(options) {
|
|
|
92
161
|
onLog?.(` 🔧 ${tc.function.name}`);
|
|
93
162
|
}
|
|
94
163
|
}
|
|
95
|
-
const results = await executeToolCalls(toolCalls, cwd);
|
|
164
|
+
const results = await executeToolCalls(toolCalls, cwd, readCache, { protectedFiles, bashTimeoutMs });
|
|
96
165
|
toolCallCount += toolCalls.length;
|
|
97
|
-
//
|
|
166
|
+
// Count only SUCCESSFUL edits — a model whose edit_file calls all fail
|
|
167
|
+
// (old_string not found, protected file) has not modified anything, and
|
|
168
|
+
// counting attempts would let it slip past the no-edit guard.
|
|
169
|
+
editToolCount += toolCalls.filter((tc, i) => (tc.function.name === 'edit_file' || tc.function.name === 'write_file') && !results[i]?.is_error).length;
|
|
170
|
+
// 도구 결과를 메시지에 추가 (길이 초과 시 자동 truncate)
|
|
98
171
|
for (const result of results) {
|
|
172
|
+
const content = truncateToolResult(result.content);
|
|
99
173
|
messages.push({
|
|
100
174
|
role: 'tool',
|
|
101
175
|
tool_call_id: result.tool_call_id,
|
|
102
|
-
content
|
|
176
|
+
content,
|
|
103
177
|
});
|
|
104
178
|
if (result.is_error) {
|
|
105
|
-
onLog?.(` ✖ ${
|
|
179
|
+
onLog?.(` ✖ ${content.slice(0, 100)}`);
|
|
106
180
|
}
|
|
107
181
|
}
|
|
108
182
|
}
|
|
183
|
+
// Final answer turn — maxTurns/타임아웃으로 끊겼는데 모델이 최종 텍스트를 못 낸 경우,
|
|
184
|
+
// 도구 없이 마지막 1회 호출로 결론을 강제한다. 이게 없으면 진단·분석형 작업이
|
|
185
|
+
// 끝까지 도구만 호출하다 빈 결과("(no summary)")로 끝난다 — SWE 하이브리드 진단
|
|
186
|
+
// 단계에서 발견된 결함.
|
|
187
|
+
if (!finalText && apiCallCount > 0) {
|
|
188
|
+
onLog?.('▸ Final answer turn (no tools) — loop ended without a final message');
|
|
189
|
+
messages.push({
|
|
190
|
+
role: 'user',
|
|
191
|
+
content: 'Tool budget exhausted. Based on everything you have learned above, give your final ' +
|
|
192
|
+
'answer NOW as plain text. Do not request any more tools.',
|
|
193
|
+
});
|
|
194
|
+
try {
|
|
195
|
+
const response = await callApi(messages, []);
|
|
196
|
+
if (response.usage) {
|
|
197
|
+
totalTokens += response.usage.prompt_tokens + response.usage.completion_tokens;
|
|
198
|
+
}
|
|
199
|
+
apiCallCount++;
|
|
200
|
+
finalText = response.choices?.[0]?.message?.content ?? '';
|
|
201
|
+
}
|
|
202
|
+
catch (err) {
|
|
203
|
+
onLog?.(`✖ Final answer turn failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
109
206
|
return {
|
|
110
207
|
text: finalText,
|
|
111
208
|
toolCallCount,
|
|
@@ -125,75 +222,68 @@ export function loopResultToCliResult(result) {
|
|
|
125
222
|
durationMs: result.durationMs,
|
|
126
223
|
};
|
|
127
224
|
}
|
|
128
|
-
// ============ 히스토리 압축 ============
|
|
225
|
+
// ============ 히스토리 압축 (VEGA compaction.py 패턴 이식) ============
|
|
129
226
|
/**
|
|
130
|
-
*
|
|
131
|
-
*
|
|
227
|
+
* 이전 턴(assistant+tool 쌍)을 요약 1줄로 교체.
|
|
228
|
+
* OpenAI API 제약: tool 메시지는 직전 assistant의 tool_call_id와 대응해야 하므로
|
|
229
|
+
* 오래된 assistant+tool 쌍은 텍스트 요약으로 대체해 API 오류를 방지.
|
|
132
230
|
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
* 따라서 오래된 tool 메시지는 삭제하고, 해당 assistant도 일반 텍스트로 교체.
|
|
231
|
+
* 보존 기준 (VEGA keep_recent): 최근 keepRecent개 메시지 블록은 항상 원본 유지.
|
|
232
|
+
* tool 메시지는 직전 assistant의 tool_call_id와 짝이 맞아야 하므로, 보존 경계는
|
|
233
|
+
* keepRecent 지점 이후 첫 assistant로 정렬해 짝이 깨진 tool 메시지가 남지 않게 한다.
|
|
234
|
+
* 기존 [Prior turns compacted] 요약이 있으면 새 요약에 합산 후 교체.
|
|
235
|
+
* (테스트를 위해 export — 외부에서 직접 호출할 일은 없음)
|
|
139
236
|
*/
|
|
140
|
-
function compactPriorTurns(messages) {
|
|
237
|
+
export function compactPriorTurns(messages, keepRecent = 8) {
|
|
141
238
|
const headerCount = messages[0]?.role === 'system' ? 2 : 1;
|
|
142
|
-
//
|
|
143
|
-
let
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
break;
|
|
148
|
-
}
|
|
239
|
+
// 최근 keepRecent개 메시지는 보존 — 압축 상한 인덱스 산출
|
|
240
|
+
let boundary = Math.max(headerCount, messages.length - keepRecent);
|
|
241
|
+
// 보존 경계를 assistant 시작점으로 정렬 (orphan tool 메시지 방지)
|
|
242
|
+
while (boundary < messages.length && messages[boundary].role === 'tool') {
|
|
243
|
+
boundary++;
|
|
149
244
|
}
|
|
150
|
-
if (
|
|
151
|
-
return;
|
|
152
|
-
// headerCount ~ lastAssistantIdx 사이의 모든 assistant+tool 쌍을 요약
|
|
245
|
+
if (boundary <= headerCount)
|
|
246
|
+
return;
|
|
153
247
|
const summaryParts = [];
|
|
154
248
|
const toRemove = [];
|
|
155
|
-
for (let i = headerCount; i <
|
|
249
|
+
for (let i = headerCount; i < boundary; i++) {
|
|
156
250
|
const msg = messages[i];
|
|
157
|
-
if (msg.role === 'assistant'
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
251
|
+
if (msg.role === 'assistant') {
|
|
252
|
+
if (msg.tool_calls && msg.tool_calls.length > 0) {
|
|
253
|
+
const calls = msg.tool_calls.map(tc => {
|
|
254
|
+
try {
|
|
255
|
+
const args = JSON.parse(tc.function.arguments);
|
|
256
|
+
const key = args.path || args.pattern || args.command;
|
|
257
|
+
const short = typeof key === 'string' ? key.slice(0, 40) : '';
|
|
258
|
+
return `${tc.function.name}(${short})`;
|
|
259
|
+
}
|
|
260
|
+
catch {
|
|
261
|
+
return tc.function.name;
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
summaryParts.push(calls.join(', '));
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
// 기존 compacted 요약이면 내용 그대로 흡수, 아니면 어시스턴트 설명 텍스트 보존
|
|
268
|
+
const text = (msg.content ?? '').trim();
|
|
269
|
+
if (text)
|
|
270
|
+
summaryParts.push(text.startsWith('[Prior') ? text : `note: ${text.slice(0, 200)}`);
|
|
271
|
+
}
|
|
171
272
|
toRemove.push(i);
|
|
172
273
|
}
|
|
173
274
|
else if (msg.role === 'tool') {
|
|
174
|
-
// tool result → 성공/실패만 기록
|
|
175
275
|
const ok = !msg.content.startsWith('BLOCKED') && !msg.content.startsWith('Tool error');
|
|
176
|
-
const firstLine = msg.content.split('\n')[0].slice(0,
|
|
177
|
-
summaryParts.push(ok ?
|
|
178
|
-
toRemove.push(i);
|
|
179
|
-
}
|
|
180
|
-
else if (msg.role === 'assistant' && !msg.tool_calls) {
|
|
181
|
-
// 일반 assistant 메시지 — 첫 줄만 유지
|
|
182
|
-
const short = (msg.content ?? '').split('\n')[0].slice(0, 80);
|
|
183
|
-
if (short)
|
|
184
|
-
summaryParts.push(`note: ${short}`);
|
|
276
|
+
const firstLine = msg.content.split('\n')[0].slice(0, 50);
|
|
277
|
+
summaryParts.push(ok ? '→ok' : `→err: ${firstLine}`);
|
|
185
278
|
toRemove.push(i);
|
|
186
279
|
}
|
|
187
280
|
}
|
|
188
281
|
if (toRemove.length === 0)
|
|
189
282
|
return;
|
|
190
|
-
// 요약 메시지 생성
|
|
191
283
|
const summaryText = `[Prior turns compacted] ${summaryParts.join(' | ')}`;
|
|
192
|
-
// 역순으로 제거 (인덱스 안정성)
|
|
193
284
|
for (let i = toRemove.length - 1; i >= 0; i--) {
|
|
194
285
|
messages.splice(toRemove[i], 1);
|
|
195
286
|
}
|
|
196
|
-
// header 직후에 요약 삽입
|
|
197
287
|
messages.splice(headerCount, 0, {
|
|
198
288
|
role: 'assistant',
|
|
199
289
|
content: summaryText,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agenticLoop.js","sourceRoot":"","sources":["../../src/adapters/agenticLoop.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,gCAAgC;AAChC,sBAAsB;AACtB,yDAAyD;AACzD,0BAA0B;AAC1B,0CAA0C;AAC1C,+CAA+C;AAE/C,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAuD,MAAM,YAAY,CAAC;AAyErH,oCAAoC;AAEpC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA2B;IAC9D,MAAM,EACJ,YAAY,EACZ,MAAM,EACN,GAAG,EACH,OAAO,EACP,QAAQ,GAAG,EAAE,EACb,SAAS,GAAG,MAAM,EAClB,KAAK,EACL,WAAW,GAAG,IAAI,GACnB,GAAG,OAAO,CAAC;IAEZ,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IAEvC,cAAc;IACd,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,IAAI,YAAY,EAAE,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAEjD,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;IAClD,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,SAAS,GAAG,EAAE,CAAC;IAEnB,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,QAAQ,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;QAC/C,UAAU;QACV,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;YAC1B,KAAK,EAAE,CAAC,gCAAgC,IAAI,QAAQ,CAAC,CAAC;YACtD,MAAM;QACR,CAAC;QAED,mDAAmD;QACnD,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YACd,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;QAED,SAAS;QACT,YAAY,EAAE,CAAC;QACf,KAAK,EAAE,CAAC,eAAe,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEhF,IAAI,QAAgC,CAAC;QACrC,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,KAAK,EAAE,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;YAC/B,SAAS,GAAG,cAAc,GAAG,EAAE,CAAC;YAChC,MAAM;QACR,CAAC;QAED,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,WAAW,IAAI,QAAQ,CAAC,KAAK,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC;QACjF,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,KAAK,EAAE,CAAC,2BAA2B,CAAC,CAAC;YACrC,SAAS,GAAG,oBAAoB,CAAC;YACjC,MAAM;QACR,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC;QAEpC,mBAAmB;QACnB,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,YAAY,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrE,SAAS,GAAG,YAAY,CAAC,OAAO,IAAI,EAAE,CAAC;YACvC,MAAM;QACR,CAAC;QAED,sCAAsC;QACtC,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,YAAY,CAAC,OAAO;YAC7B,UAAU,EAAE,YAAY,CAAC,UAAU;SACpC,CAAC,CAAC;QAEH,QAAQ;QACR,MAAM,SAAS,GAAe,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC/D,EAAE,EAAE,EAAE,CAAC,EAAE;YACT,QAAQ,EAAE;gBACR,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;gBACtB,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS;aACjC;SACF,CAAC,CAAC,CAAC;QAEJ,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAC/C,MAAM,UAAU,GAAG,iBAAiB,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC7D,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5E,CAAC;YAAC,MAAM,CAAC;gBACP,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAiB,MAAM,gBAAgB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QACrE,aAAa,IAAI,SAAS,CAAC,MAAM,CAAC;QAElC,iBAAiB;QACjB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,MAAM;gBACZ,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,KAAK,EAAE,CAAC,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAE,SAAS;QACf,aAAa;QACb,YAAY;QACZ,WAAW;QACX,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;KACnC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAyB;IAC7D,OAAO;QACL,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,MAAM,CAAC,IAAI;QACnB,MAAM,EAAE,EAAE;QACV,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC;AACJ,CAAC;AAED,oCAAoC;AAEpC;;;;;;;;;;GAUG;AACH,SAAS,iBAAiB,CAAC,QAAuB;IAChD,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3D,mCAAmC;IACnC,IAAI,gBAAgB,GAAG,CAAC,CAAC,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;QACxD,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACrC,gBAAgB,GAAG,CAAC,CAAC;YACrB,MAAM;QACR,CAAC;IACH,CAAC;IACD,IAAI,gBAAgB,IAAI,WAAW;QAAE,OAAO,CAAC,eAAe;IAE5D,6DAA6D;IAC7D,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,IAAI,CAAC,GAAG,WAAW,EAAE,CAAC,GAAG,gBAAgB,EAAE,CAAC,EAAE,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAExB,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5E,+DAA+D;YAC/D,MAAM,aAAa,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAC5C,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;oBAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC;oBACtD,MAAM,KAAK,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC9D,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC;gBACzC,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC1B,CAAC;YACH,CAAC,CAAC,CAAC;YACH,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC/B,0BAA0B;YAC1B,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YACvF,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1D,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,CAAC;YACrD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YACvD,6BAA6B;YAC7B,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9D,IAAI,KAAK;gBAAE,YAAY,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;YAC/C,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAElC,YAAY;IACZ,MAAM,WAAW,GAAG,2BAA2B,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;IAE1E,oBAAoB;IACpB,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,mBAAmB;IACnB,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE;QAC9B,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,WAAW;KACrB,CAAC,CAAC;AACL,CAAC;AAED,+BAA+B;AAE/B,SAAS,iBAAiB,CAAC,IAAY,EAAE,IAA6B;IACpE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,WAAW;YACd,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACjC,KAAK,YAAY;YACf,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACjC,KAAK,WAAW;YACd,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACjC,KAAK,cAAc;YACjB,OAAO,IAAI,IAAI,CAAC,OAAO,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAC7C,KAAK,MAAM;YACT,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjD;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"agenticLoop.js","sourceRoot":"","sources":["../../src/adapters/agenticLoop.ts"],"names":[],"mappings":"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"}
|
package/dist/adapters/codex.d.ts
CHANGED
|
@@ -11,4 +11,5 @@ export declare class CodexCliAdapter implements CliAdapter {
|
|
|
11
11
|
parseWorkerOutput(raw: CliRunResult): WorkerResult;
|
|
12
12
|
parseReviewerOutput(raw: CliRunResult): ReviewResult;
|
|
13
13
|
}
|
|
14
|
+
export declare function coerceCodexModel(requested: string): string;
|
|
14
15
|
//# sourceMappingURL=codex.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACb,MAAM,YAAY,CAAC;AAKpB,qBAAa,eAAgB,YAAW,UAAU;IAChD,QAAQ,CAAC,IAAI,WAAW;IAExB,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAMxC;IAEI,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IASrC,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE;
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACb,MAAM,YAAY,CAAC;AAKpB,qBAAa,eAAgB,YAAW,UAAU;IAChD,QAAQ,CAAC,IAAI,WAAW;IAExB,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAMxC;IAEI,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IASrC,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE;IAQzE,mBAAmB,CACjB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC7B,MAAM,GAAE,MAAW,GAClB,MAAM;IAcT,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,YAAY;IAKlD,mBAAmB,CAAC,GAAG,EAAE,YAAY,GAAG,YAAY;CAIrD;AAoBD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAU1D"}
|