@intrect/openswarm 0.5.0 → 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.
Files changed (225) hide show
  1. package/README.md +15 -12
  2. package/config.example.yaml +8 -2
  3. package/dist/adapters/agenticLoop.d.ts +15 -1
  4. package/dist/adapters/agenticLoop.d.ts.map +1 -1
  5. package/dist/adapters/agenticLoop.js +62 -4
  6. package/dist/adapters/agenticLoop.js.map +1 -1
  7. package/dist/adapters/chatStream.d.ts +55 -0
  8. package/dist/adapters/chatStream.d.ts.map +1 -0
  9. package/dist/adapters/chatStream.js +116 -0
  10. package/dist/adapters/chatStream.js.map +1 -0
  11. package/dist/adapters/codex.d.ts +6 -0
  12. package/dist/adapters/codex.d.ts.map +1 -1
  13. package/dist/adapters/codex.js +27 -1
  14. package/dist/adapters/codex.js.map +1 -1
  15. package/dist/adapters/codexModels.d.ts +20 -0
  16. package/dist/adapters/codexModels.d.ts.map +1 -0
  17. package/dist/adapters/codexModels.js +195 -0
  18. package/dist/adapters/codexModels.js.map +1 -0
  19. package/dist/adapters/codexResponses.d.ts +97 -0
  20. package/dist/adapters/codexResponses.d.ts.map +1 -0
  21. package/dist/adapters/codexResponses.js +302 -0
  22. package/dist/adapters/codexResponses.js.map +1 -0
  23. package/dist/adapters/gpt.d.ts.map +1 -1
  24. package/dist/adapters/gpt.js +17 -131
  25. package/dist/adapters/gpt.js.map +1 -1
  26. package/dist/adapters/index.d.ts +7 -0
  27. package/dist/adapters/index.d.ts.map +1 -1
  28. package/dist/adapters/index.js +11 -0
  29. package/dist/adapters/index.js.map +1 -1
  30. package/dist/adapters/local.d.ts.map +1 -1
  31. package/dist/adapters/local.js +17 -125
  32. package/dist/adapters/local.js.map +1 -1
  33. package/dist/adapters/openrouter.d.ts +5 -24
  34. package/dist/adapters/openrouter.d.ts.map +1 -1
  35. package/dist/adapters/openrouter.js +20 -121
  36. package/dist/adapters/openrouter.js.map +1 -1
  37. package/dist/adapters/resultParsing.d.ts +6 -0
  38. package/dist/adapters/resultParsing.d.ts.map +1 -0
  39. package/dist/adapters/resultParsing.js +139 -0
  40. package/dist/adapters/resultParsing.js.map +1 -0
  41. package/dist/adapters/tools.d.ts +0 -6
  42. package/dist/adapters/tools.d.ts.map +1 -1
  43. package/dist/adapters/tools.js +57 -3
  44. package/dist/adapters/tools.js.map +1 -1
  45. package/dist/adapters/types.d.ts +21 -1
  46. package/dist/adapters/types.d.ts.map +1 -1
  47. package/dist/adapters/webTools.d.ts +9 -0
  48. package/dist/adapters/webTools.d.ts.map +1 -0
  49. package/dist/adapters/webTools.js +195 -0
  50. package/dist/adapters/webTools.js.map +1 -0
  51. package/dist/agents/pairPipeline.d.ts +26 -1
  52. package/dist/agents/pairPipeline.d.ts.map +1 -1
  53. package/dist/agents/pairPipeline.js +82 -14
  54. package/dist/agents/pairPipeline.js.map +1 -1
  55. package/dist/agents/reflection.d.ts +56 -0
  56. package/dist/agents/reflection.d.ts.map +1 -0
  57. package/dist/agents/reflection.js +120 -0
  58. package/dist/agents/reflection.js.map +1 -0
  59. package/dist/agents/worker.d.ts +2 -0
  60. package/dist/agents/worker.d.ts.map +1 -1
  61. package/dist/agents/worker.js +1 -0
  62. package/dist/agents/worker.js.map +1 -1
  63. package/dist/auth/index.d.ts +1 -0
  64. package/dist/auth/index.d.ts.map +1 -1
  65. package/dist/auth/index.js +1 -0
  66. package/dist/auth/index.js.map +1 -1
  67. package/dist/auth/linearPkce.d.ts +22 -0
  68. package/dist/auth/linearPkce.d.ts.map +1 -0
  69. package/dist/auth/linearPkce.js +208 -0
  70. package/dist/auth/linearPkce.js.map +1 -0
  71. package/dist/auth/oauthPkce.d.ts.map +1 -1
  72. package/dist/auth/oauthPkce.js +18 -5
  73. package/dist/auth/oauthPkce.js.map +1 -1
  74. package/dist/auth/oauthStore.d.ts.map +1 -1
  75. package/dist/auth/oauthStore.js +10 -2
  76. package/dist/auth/oauthStore.js.map +1 -1
  77. package/dist/automation/autonomousRunner.d.ts +6 -6
  78. package/dist/automation/autonomousRunner.d.ts.map +1 -1
  79. package/dist/automation/autonomousRunner.js +15 -13
  80. package/dist/automation/autonomousRunner.js.map +1 -1
  81. package/dist/automation/backlogGrooming.d.ts +21 -0
  82. package/dist/automation/backlogGrooming.d.ts.map +1 -0
  83. package/dist/automation/backlogGrooming.js +80 -0
  84. package/dist/automation/backlogGrooming.js.map +1 -0
  85. package/dist/automation/localCI.d.ts +24 -0
  86. package/dist/automation/localCI.d.ts.map +1 -0
  87. package/dist/automation/localCI.js +84 -0
  88. package/dist/automation/localCI.js.map +1 -0
  89. package/dist/automation/runnerExecution.d.ts +33 -7
  90. package/dist/automation/runnerExecution.d.ts.map +1 -1
  91. package/dist/automation/runnerExecution.js +202 -154
  92. package/dist/automation/runnerExecution.js.map +1 -1
  93. package/dist/automation/runnerTypes.d.ts +5 -1
  94. package/dist/automation/runnerTypes.d.ts.map +1 -1
  95. package/dist/automation/taskSource.d.ts +101 -0
  96. package/dist/automation/taskSource.d.ts.map +1 -0
  97. package/dist/automation/taskSource.js +136 -0
  98. package/dist/automation/taskSource.js.map +1 -0
  99. package/dist/automation/workerAuditLog.d.ts +29 -0
  100. package/dist/automation/workerAuditLog.d.ts.map +1 -0
  101. package/dist/automation/workerAuditLog.js +82 -0
  102. package/dist/automation/workerAuditLog.js.map +1 -0
  103. package/dist/cli/authHandler.d.ts +6 -0
  104. package/dist/cli/authHandler.d.ts.map +1 -1
  105. package/dist/cli/authHandler.js +37 -2
  106. package/dist/cli/authHandler.js.map +1 -1
  107. package/dist/cli/daemon.d.ts +5 -0
  108. package/dist/cli/daemon.d.ts.map +1 -1
  109. package/dist/cli/daemon.js +13 -0
  110. package/dist/cli/daemon.js.map +1 -1
  111. package/dist/cli/doctorHandler.d.ts +2 -0
  112. package/dist/cli/doctorHandler.d.ts.map +1 -0
  113. package/dist/cli/doctorHandler.js +114 -0
  114. package/dist/cli/doctorHandler.js.map +1 -0
  115. package/dist/cli/initWizard.d.ts +13 -0
  116. package/dist/cli/initWizard.d.ts.map +1 -0
  117. package/dist/cli/initWizard.js +314 -0
  118. package/dist/cli/initWizard.js.map +1 -0
  119. package/dist/cli.js +110 -37
  120. package/dist/cli.js.map +1 -1
  121. package/dist/core/config.d.ts +50 -2
  122. package/dist/core/config.d.ts.map +1 -1
  123. package/dist/core/config.js +69 -10
  124. package/dist/core/config.js.map +1 -1
  125. package/dist/core/envFile.d.ts +6 -0
  126. package/dist/core/envFile.d.ts.map +1 -1
  127. package/dist/core/envFile.js +39 -1
  128. package/dist/core/envFile.js.map +1 -1
  129. package/dist/core/providerOverride.d.ts +6 -0
  130. package/dist/core/providerOverride.d.ts.map +1 -0
  131. package/dist/core/providerOverride.js +37 -0
  132. package/dist/core/providerOverride.js.map +1 -0
  133. package/dist/core/service.d.ts.map +1 -1
  134. package/dist/core/service.js +41 -18
  135. package/dist/core/service.js.map +1 -1
  136. package/dist/core/types.d.ts +16 -2
  137. package/dist/core/types.d.ts.map +1 -1
  138. package/dist/discord/discordHandlers.d.ts.map +1 -1
  139. package/dist/discord/discordHandlers.js +15 -12
  140. package/dist/discord/discordHandlers.js.map +1 -1
  141. package/dist/index.js +12 -1
  142. package/dist/index.js.map +1 -1
  143. package/dist/issues/sqliteStore.d.ts.map +1 -1
  144. package/dist/issues/sqliteStore.js +7 -2
  145. package/dist/issues/sqliteStore.js.map +1 -1
  146. package/dist/knowledge/scanner.d.ts.map +1 -1
  147. package/dist/knowledge/scanner.js +5 -0
  148. package/dist/knowledge/scanner.js.map +1 -1
  149. package/dist/linear/linear.d.ts +45 -2
  150. package/dist/linear/linear.d.ts.map +1 -1
  151. package/dist/linear/linear.js +154 -3
  152. package/dist/linear/linear.js.map +1 -1
  153. package/dist/locale/prompts/en.d.ts.map +1 -1
  154. package/dist/locale/prompts/en.js +14 -2
  155. package/dist/locale/prompts/en.js.map +1 -1
  156. package/dist/locale/prompts/ko.d.ts.map +1 -1
  157. package/dist/locale/prompts/ko.js +14 -2
  158. package/dist/locale/prompts/ko.js.map +1 -1
  159. package/dist/mcp/mcpClient.d.ts +27 -0
  160. package/dist/mcp/mcpClient.d.ts.map +1 -0
  161. package/dist/mcp/mcpClient.js +145 -0
  162. package/dist/mcp/mcpClient.js.map +1 -0
  163. package/dist/memory/memoryCore.d.ts.map +1 -1
  164. package/dist/memory/memoryCore.js +8 -2
  165. package/dist/memory/memoryCore.js.map +1 -1
  166. package/dist/notify/notifier.d.ts +26 -0
  167. package/dist/notify/notifier.d.ts.map +1 -0
  168. package/dist/notify/notifier.js +131 -0
  169. package/dist/notify/notifier.js.map +1 -0
  170. package/dist/orchestration/conflictDetector.d.ts +5 -2
  171. package/dist/orchestration/conflictDetector.d.ts.map +1 -1
  172. package/dist/orchestration/conflictDetector.js +35 -6
  173. package/dist/orchestration/conflictDetector.js.map +1 -1
  174. package/dist/orchestration/decisionEngine.d.ts +20 -0
  175. package/dist/orchestration/decisionEngine.d.ts.map +1 -1
  176. package/dist/orchestration/decisionEngine.js +45 -0
  177. package/dist/orchestration/decisionEngine.js.map +1 -1
  178. package/dist/support/banner.d.ts +7 -0
  179. package/dist/support/banner.d.ts.map +1 -0
  180. package/dist/support/banner.js +32 -0
  181. package/dist/support/banner.js.map +1 -0
  182. package/dist/support/chat.js +28 -5
  183. package/dist/support/chat.js.map +1 -1
  184. package/dist/support/chatBackend.d.ts +6 -0
  185. package/dist/support/chatBackend.d.ts.map +1 -1
  186. package/dist/support/chatBackend.js +68 -0
  187. package/dist/support/chatBackend.js.map +1 -1
  188. package/dist/support/chatTui.d.ts.map +1 -1
  189. package/dist/support/chatTui.js +202 -9
  190. package/dist/support/chatTui.js.map +1 -1
  191. package/dist/support/colors.d.ts +15 -0
  192. package/dist/support/colors.d.ts.map +1 -0
  193. package/dist/support/colors.js +23 -0
  194. package/dist/support/colors.js.map +1 -0
  195. package/dist/support/planCommand.d.ts +17 -0
  196. package/dist/support/planCommand.d.ts.map +1 -0
  197. package/dist/support/planCommand.js +114 -0
  198. package/dist/support/planCommand.js.map +1 -0
  199. package/dist/support/planner.d.ts +9 -2
  200. package/dist/support/planner.d.ts.map +1 -1
  201. package/dist/support/planner.js +43 -111
  202. package/dist/support/planner.js.map +1 -1
  203. package/dist/support/promptHelper.d.ts +24 -0
  204. package/dist/support/promptHelper.d.ts.map +1 -0
  205. package/dist/support/promptHelper.js +94 -0
  206. package/dist/support/promptHelper.js.map +1 -0
  207. package/dist/support/rateLimiter.d.ts.map +1 -1
  208. package/dist/support/rateLimiter.js +6 -0
  209. package/dist/support/rateLimiter.js.map +1 -1
  210. package/dist/support/repoMetadata.d.ts +7 -0
  211. package/dist/support/repoMetadata.d.ts.map +1 -1
  212. package/dist/support/repoMetadata.js +13 -1
  213. package/dist/support/repoMetadata.js.map +1 -1
  214. package/dist/support/web.d.ts.map +1 -1
  215. package/dist/support/web.js +143 -65
  216. package/dist/support/web.js.map +1 -1
  217. package/dist/support/worktreeManager.d.ts +6 -1
  218. package/dist/support/worktreeManager.d.ts.map +1 -1
  219. package/dist/support/worktreeManager.js +23 -1
  220. package/dist/support/worktreeManager.js.map +1 -1
  221. package/dist/taskState/store.d.ts +1 -0
  222. package/dist/taskState/store.d.ts.map +1 -1
  223. package/dist/taskState/store.js +22 -1
  224. package/dist/taskState/store.js.map +1 -1
  225. package/package.json +3 -1
package/README.md CHANGED
@@ -20,10 +20,11 @@ OpenSwarm orchestrates multiple AI agents as autonomous code workers. It picks u
20
20
 
21
21
  ```bash
22
22
  npm install -g @intrect/openswarm
23
- openswarm
23
+ openswarm auth login # one-time provider setup — ChatGPT (codex/gpt) OAuth
24
+ openswarm # launches the TUI chat
24
25
  ```
25
26
 
26
- That's it. `openswarm` with no arguments launches the TUI chat interface immediately.
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`.
27
28
 
28
29
  ![TUI Chat Interface](screenshots/tui.png)
29
30
 
@@ -50,7 +51,7 @@ openswarm chat [session] # Simple readline chat
50
51
  openswarm start # Start full daemon (requires config.yaml)
51
52
  openswarm run "Fix the bug" -p ~/my-project # Run a single task
52
53
  openswarm exec "Run tests" --local --pipeline # Execute via daemon
53
- openswarm init # Generate config.yaml scaffold
54
+ openswarm init # Interactive setup wizard (provider, task backend, config)
54
55
  openswarm validate # Validate config.yaml
55
56
 
56
57
  # Code Registry & BS Detector
@@ -87,11 +88,13 @@ For autonomous operation (Linear issue processing, Discord control, PR auto-impr
87
88
  ### Prerequisites
88
89
 
89
90
  - **Node.js** >= 22
90
- - **Claude Code CLI** authenticated (`claude -p`) — default provider
91
- - **OpenAI Codex CLI** (`codex exec`) optional alternative provider
92
- - **Discord Bot** token with message content intent
93
- - **Linear** API key and team ID
94
- - **GitHub CLI** (`gh`) for CI monitoring (optional)
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
95
98
 
96
99
  ### Configuration
97
100
 
@@ -127,17 +130,17 @@ LINEAR_TEAM_ID=your-linear-team-id
127
130
  ### CLI Adapter (Provider)
128
131
 
129
132
  ```yaml
130
- adapter: claude # "claude" | "codex" | "gpt" | "openrouter" | "local" | "lmstudio"
133
+ adapter: codex # default. "codex" | "openrouter" | "gpt" | "local" | "lmstudio" | "claude"
131
134
  ```
132
135
 
133
136
  Switch at runtime via Discord: `!provider codex` / `!provider claude`
134
137
 
135
138
  | Adapter | Backend | Models | Auth |
136
139
  |---------|---------|--------|------|
137
- | `claude` | Claude Code CLI | sonnet-4, haiku-4.5, opus-4 | CLI auth |
138
- | `codex` | OpenAI Codex CLI | o3, o4-mini | CLI auth |
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 |
139
142
  | `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` |
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` |
141
144
  | `local` | Ollama / LMStudio / llama.cpp | gemma4, llama3, mistral, qwen, etc. | None |
142
145
  | `lmstudio` | LM Studio OpenAI-compatible API | loaded LM Studio model (`LMSTUDIO_MODEL`) | Optional API key |
143
146
 
@@ -94,13 +94,19 @@ autonomous:
94
94
 
95
95
  # Pipeline guards
96
96
  guards:
97
- qualityGate: true
97
+ qualityGate: true # bad-edit lint gate: tsc/ruff on changed files (blocking)
98
98
  fakeDataGuard: true
99
99
  conventionalCommits: true
100
100
  branchValidation: true
101
101
  uncertaintyDetection: true
102
102
  registryCheck: true
103
- 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
104
110
 
105
111
  # Job profiles for lightweight vs heavy work
106
112
  jobProfiles:
@@ -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 = {
@@ -76,6 +76,12 @@ export interface AgenticLoopOptions {
76
76
  protectedFiles?: string[];
77
77
  /** bash tool timeout — docker-based tests need minutes (default 30s) */
78
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;
79
85
  }
80
86
  /** 루프 실행 결과 */
81
87
  export interface AgenticLoopResult {
@@ -103,6 +109,14 @@ export declare function runAgenticLoop(options: AgenticLoopOptions): Promise<Age
103
109
  * AgenticLoopResult → CliRunResult 변환
104
110
  */
105
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;
106
120
  /**
107
121
  * 이전 턴(assistant+tool 쌍)을 요약 1줄로 교체.
108
122
  * OpenAI API 제약: tool 메시지는 직전 assistant의 tool_call_id와 대응해야 하므로
@@ -1 +1 @@
1
- {"version":3,"file":"agenticLoop.d.ts","sourceRoot":"","sources":["../../src/adapters/agenticLoop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agenticLoop.d.ts","sourceRoot":"","sources":["../../src/adapters/agenticLoop.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@
6
6
  // VEGA token_count.py 패턴 이식 — 토큰 기반 히스토리 압축.
7
7
  // ============================================
8
8
  import { TOOL_DEFINITIONS, executeToolCalls, createReadCache } from './tools.js';
9
+ import { WEB_TOOL_DEFINITIONS } from './webTools.js';
9
10
  // ============ 토큰 카운팅 (VEGA token_count.py 이식) ============
10
11
  // cl100k_base 근사: 한국어 0.78t/char, 영어 0.27t/char
11
12
  function countTokensApprox(text) {
@@ -53,7 +54,7 @@ export async function runAgenticLoop(options) {
53
54
  // 긴 작업(SWE-bench급 실전 repo)에서 압축이 너무 일찍·자주 터지면 모델이 읽은
54
55
  // 파일 컨텍스트를 잃고 같은 파일을 반복 read하다 수정에 도달 못 한다(무한 탐색).
55
56
  // 현대 모델 컨텍스트(128k+)에 맞춰 임계를 넉넉히, 최근 보존 블록도 늘린다.
56
- compactTokenThreshold = 60000, compactAfterMessages = 60, keepRecentMessages = 16, nudgeMaxOnNoEdit = 0, protectedFiles, bashTimeoutMs, } = options;
57
+ compactTokenThreshold = 60000, compactAfterMessages = 60, keepRecentMessages = 16, nudgeMaxOnNoEdit = 0, protectedFiles, bashTimeoutMs, webTools = true, mcpTools, signal, } = options;
57
58
  const startTime = Date.now();
58
59
  const deadline = startTime + timeoutMs;
59
60
  // 메시지 히스토리 구성
@@ -69,15 +70,33 @@ export async function runAgenticLoop(options) {
69
70
  `All file tools operate within this root. Use paths relative to it (e.g. "src/foo.ts" or ".") ` +
70
71
  `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
72
  messages.push({ role: 'user', content: cwdNote + prompt });
72
- const tools = enableTools ? TOOL_DEFINITIONS : [];
73
+ const tools = enableTools
74
+ ? [
75
+ ...TOOL_DEFINITIONS,
76
+ ...(webTools ? WEB_TOOL_DEFINITIONS : []),
77
+ ...(mcpTools ?? []),
78
+ ]
79
+ : [];
73
80
  const readCache = createReadCache(); // 루프 단위 read 캐시 (중복 read 차단)
74
81
  let toolCallCount = 0;
75
82
  let editToolCount = 0; // edit_file/write_file 호출 수 (no-edit 가드용)
83
+ // 진전 정체 감지: 이번 턴의 도구 호출이 모두 이전과 동일(name+args)하면 새 정보·변경
84
+ // 없는 반복이다. N턴 연속이면 루프로 보고 조기 종료한다 — 고정 turn 한도(작업 제한)가
85
+ // 아니라 진전 기반 중단. maxTurns는 비상 천장으로만 남는다.
86
+ const seenToolCalls = new Set();
87
+ let noProgressTurns = 0;
88
+ const NO_PROGRESS_LIMIT = 3;
76
89
  let nudgesUsed = 0;
77
90
  let apiCallCount = 0;
78
91
  let totalTokens = 0;
79
92
  let finalText = '';
80
93
  for (let turn = 0; turn < maxTurns + 1; turn++) {
94
+ // 사용자 중단 (Esc/Ctrl+C) — 현재 텍스트가 있으면 유지, 없으면 표시만.
95
+ if (signal?.aborted) {
96
+ onLog?.('■ Stopped by user');
97
+ finalText = finalText || '(stopped)';
98
+ break;
99
+ }
81
100
  // 타임아웃 체크
82
101
  if (Date.now() > deadline) {
83
102
  onLog?.(`⏰ Agentic loop timeout after ${turn} turns`);
@@ -103,6 +122,12 @@ export async function runAgenticLoop(options) {
103
122
  response = await callApi(messages, tools);
104
123
  }
105
124
  catch (err) {
125
+ // User abort (Esc/Ctrl+C) surfaces as the fetch being aborted.
126
+ if (signal?.aborted || (err instanceof Error && err.name === 'AbortError')) {
127
+ onLog?.('■ Stopped by user');
128
+ finalText = finalText || '(stopped)';
129
+ break;
130
+ }
106
131
  const msg = err instanceof Error ? err.message : String(err);
107
132
  onLog?.(`✖ API error: ${msg}`);
108
133
  finalText = `API error: ${msg}`;
@@ -167,6 +192,21 @@ export async function runAgenticLoop(options) {
167
192
  // (old_string not found, protected file) has not modified anything, and
168
193
  // counting attempts would let it slip past the no-edit guard.
169
194
  editToolCount += toolCalls.filter((tc, i) => (tc.function.name === 'edit_file' || tc.function.name === 'write_file') && !results[i]?.is_error).length;
195
+ // Progress-based stop: if every tool call this turn repeats a prior one
196
+ // (same name+args → no new info or change), count it as a stalled turn.
197
+ // N consecutive stalled turns → wrap up via the final-answer turn.
198
+ if (allToolCallsSeen(toolCalls, seenToolCalls)) {
199
+ noProgressTurns++;
200
+ if (noProgressTurns >= NO_PROGRESS_LIMIT) {
201
+ onLog?.(`⚠ No new progress for ${NO_PROGRESS_LIMIT} turns (repeated tool calls) — wrapping up`);
202
+ break;
203
+ }
204
+ }
205
+ else {
206
+ noProgressTurns = 0;
207
+ }
208
+ for (const tc of toolCalls)
209
+ seenToolCalls.add(toolCallKey(tc));
170
210
  // 도구 결과를 메시지에 추가 (길이 초과 시 자동 truncate)
171
211
  for (const result of results) {
172
212
  const content = truncateToolResult(result.content);
@@ -184,12 +224,16 @@ export async function runAgenticLoop(options) {
184
224
  // 도구 없이 마지막 1회 호출로 결론을 강제한다. 이게 없으면 진단·분석형 작업이
185
225
  // 끝까지 도구만 호출하다 빈 결과("(no summary)")로 끝난다 — SWE 하이브리드 진단
186
226
  // 단계에서 발견된 결함.
227
+ // Note: an empty-string finalText ('') intentionally triggers this too — an
228
+ // empty final answer is worthless, so the one extra call to salvage a real
229
+ // conclusion is the whole point, not an accidental cost (INT-1442 part 3).
187
230
  if (!finalText && apiCallCount > 0) {
188
231
  onLog?.('▸ Final answer turn (no tools) — loop ended without a final message');
189
232
  messages.push({
190
233
  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.',
234
+ content: "You've reached this turn's step limit, so stop calling tools now. Using everything " +
235
+ 'above, write your final answer as plain text what you accomplished, the key result, ' +
236
+ 'and anything still left to do. Do not mention step/tool limits or "budget" to the user.',
193
237
  });
194
238
  try {
195
239
  const response = await callApi(messages, []);
@@ -222,6 +266,20 @@ export function loopResultToCliResult(result) {
222
266
  durationMs: result.durationMs,
223
267
  };
224
268
  }
269
+ /** Stable key for a tool call (name + args) — used to detect repeated calls. */
270
+ export function toolCallKey(tc) {
271
+ return `${tc.function.name}:${tc.function.arguments}`;
272
+ }
273
+ /**
274
+ * True when every tool call this turn was already seen (same name+args), i.e.
275
+ * pure repetition with no new info or change — a stalled turn. Empty turns are
276
+ * not stalls (the model produced no tool calls, which ends the loop normally).
277
+ */
278
+ export function allToolCallsSeen(toolCalls, seen) {
279
+ if (toolCalls.length === 0)
280
+ return false;
281
+ return toolCalls.every((tc) => seen.has(toolCallKey(tc)));
282
+ }
225
283
  // ============ 히스토리 압축 (VEGA compaction.py 패턴 이식) ============
226
284
  /**
227
285
  * 이전 턴(assistant+tool 쌍)을 요약 1줄로 교체.
@@ -1 +1 @@
1
- {"version":3,"file":"agenticLoop.js","sourceRoot":"","sources":["../../src/adapters/agenticLoop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agenticLoop.js","sourceRoot":"","sources":["../../src/adapters/agenticLoop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /** A chat-completions tool call (same shape the non-streaming path returns). */
2
+ export interface StreamToolCall {
3
+ id: string;
4
+ type: 'function';
5
+ function: {
6
+ name: string;
7
+ arguments: string;
8
+ };
9
+ }
10
+ export interface ChatCompletionLike {
11
+ choices: Array<{
12
+ message: {
13
+ role: string;
14
+ content: string | null;
15
+ tool_calls?: StreamToolCall[];
16
+ };
17
+ finish_reason: string;
18
+ }>;
19
+ usage?: {
20
+ prompt_tokens: number;
21
+ completion_tokens: number;
22
+ total_tokens: number;
23
+ };
24
+ }
25
+ interface StreamChunk {
26
+ choices?: Array<{
27
+ delta?: {
28
+ content?: string | null;
29
+ tool_calls?: Array<{
30
+ index?: number;
31
+ id?: string;
32
+ function?: {
33
+ name?: string;
34
+ arguments?: string;
35
+ };
36
+ }>;
37
+ };
38
+ finish_reason?: string | null;
39
+ }>;
40
+ usage?: {
41
+ prompt_tokens?: number;
42
+ completion_tokens?: number;
43
+ total_tokens?: number;
44
+ } | null;
45
+ }
46
+ /**
47
+ * Reduce parsed SSE chunks → a chat-completions response. Exported so the
48
+ * content/tool-call accumulation is unit-testable without a live stream.
49
+ * `onToken` is called for each content delta in order.
50
+ */
51
+ export declare function reduceChatChunks(chunks: StreamChunk[], onToken?: (delta: string) => void): ChatCompletionLike;
52
+ /** Read a chat/completions SSE body and reduce it, emitting content deltas live. */
53
+ export declare function consumeChatCompletionsStream(res: Response, onToken?: (delta: string) => void): Promise<ChatCompletionLike>;
54
+ export {};
55
+ //# sourceMappingURL=chatStream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatStream.d.ts","sourceRoot":"","sources":["../../src/adapters/chatStream.ts"],"names":[],"mappings":"AAWA,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,KAAK,CAAC;QACb,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,UAAU,CAAC,EAAE,cAAc,EAAE,CAAA;SAAE,CAAC;QACjF,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC,CAAC;IACH,KAAK,CAAC,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CACpF;AAED,UAAU,WAAW;IACnB,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,KAAK,CAAC,EAAE;YACN,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;YACxB,UAAU,CAAC,EAAE,KAAK,CAAC;gBAAE,KAAK,CAAC,EAAE,MAAM,CAAC;gBAAC,EAAE,CAAC,EAAE,MAAM,CAAC;gBAAC,QAAQ,CAAC,EAAE;oBAAE,IAAI,CAAC,EAAE,MAAM,CAAC;oBAAC,SAAS,CAAC,EAAE,MAAM,CAAA;iBAAE,CAAA;aAAE,CAAC,CAAC;SACvG,CAAC;QACF,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC/B,CAAC,CAAC;IACH,KAAK,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC9F;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,kBAAkB,CAoD7G;AAeD,oFAAoF;AACpF,wBAAsB,4BAA4B,CAChD,GAAG,EAAE,QAAQ,EACb,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,kBAAkB,CAAC,CAyB7B"}
@@ -0,0 +1,116 @@
1
+ // ============================================
2
+ // OpenSwarm - chat/completions SSE streaming
3
+ // ============================================
4
+ //
5
+ // Shared streaming parser for the OpenAI chat/completions-style adapters
6
+ // (gpt / openrouter / local). With `stream: true` the server emits SSE chunks
7
+ // whose `choices[0].delta` carry incremental content + tool-call fragments;
8
+ // this reduces them back into the same shape `res.json()` would have produced
9
+ // (so the agentic loop is unaffected) while emitting each content delta via
10
+ // `onToken` for live chat streaming. Mirrors vega-agent streaming.py.
11
+ /**
12
+ * Reduce parsed SSE chunks → a chat-completions response. Exported so the
13
+ * content/tool-call accumulation is unit-testable without a live stream.
14
+ * `onToken` is called for each content delta in order.
15
+ */
16
+ export function reduceChatChunks(chunks, onToken) {
17
+ let content = '';
18
+ let sawContent = false;
19
+ let finishReason = 'stop';
20
+ let usage;
21
+ // Tool calls accumulate by their streaming index (id/name arrive once, arguments stream).
22
+ const calls = new Map();
23
+ for (const chunk of chunks) {
24
+ if (chunk.usage) {
25
+ const pt = chunk.usage.prompt_tokens ?? 0;
26
+ const ct = chunk.usage.completion_tokens ?? 0;
27
+ usage = { prompt_tokens: pt, completion_tokens: ct, total_tokens: chunk.usage.total_tokens ?? pt + ct };
28
+ }
29
+ const choice = chunk.choices?.[0];
30
+ if (!choice)
31
+ continue;
32
+ const delta = choice.delta ?? {};
33
+ if (typeof delta.content === 'string' && delta.content) {
34
+ content += delta.content;
35
+ sawContent = true;
36
+ onToken?.(delta.content);
37
+ }
38
+ for (const tc of delta.tool_calls ?? []) {
39
+ const idx = tc.index ?? 0;
40
+ const cur = calls.get(idx) ?? { id: '', name: '', args: '' };
41
+ if (tc.id)
42
+ cur.id = tc.id;
43
+ if (tc.function?.name)
44
+ cur.name = tc.function.name;
45
+ if (tc.function?.arguments)
46
+ cur.args += tc.function.arguments;
47
+ calls.set(idx, cur);
48
+ }
49
+ if (choice.finish_reason)
50
+ finishReason = choice.finish_reason;
51
+ }
52
+ const toolCalls = [...calls.values()].map((c) => ({
53
+ id: c.id,
54
+ type: 'function',
55
+ function: { name: c.name, arguments: c.args },
56
+ }));
57
+ return {
58
+ choices: [
59
+ {
60
+ message: {
61
+ role: 'assistant',
62
+ content: sawContent ? content : null,
63
+ tool_calls: toolCalls.length > 0 ? toolCalls : undefined,
64
+ },
65
+ finish_reason: toolCalls.length > 0 ? 'tool_calls' : finishReason,
66
+ },
67
+ ],
68
+ usage,
69
+ };
70
+ }
71
+ /** Parse one `data: {json}` SSE line into a chunk, or null for [DONE]/keep-alives. */
72
+ function parseChunkLine(line) {
73
+ const trimmed = line.trim();
74
+ if (!trimmed.startsWith('data:'))
75
+ return null;
76
+ const data = trimmed.slice(5).trim();
77
+ if (!data || data === '[DONE]')
78
+ return null;
79
+ try {
80
+ return JSON.parse(data);
81
+ }
82
+ catch {
83
+ return null;
84
+ }
85
+ }
86
+ /** Read a chat/completions SSE body and reduce it, emitting content deltas live. */
87
+ export async function consumeChatCompletionsStream(res, onToken) {
88
+ const reader = res.body?.getReader();
89
+ if (!reader)
90
+ throw new Error('chat stream: empty response body');
91
+ const chunks = [];
92
+ const decoder = new TextDecoder();
93
+ let buffer = '';
94
+ const handle = (c) => {
95
+ if (!c)
96
+ return;
97
+ const delta = c.choices?.[0]?.delta?.content;
98
+ if (onToken && typeof delta === 'string' && delta)
99
+ onToken(delta);
100
+ chunks.push(c);
101
+ };
102
+ for (;;) {
103
+ const { done, value } = await reader.read();
104
+ if (done)
105
+ break;
106
+ buffer += decoder.decode(value, { stream: true });
107
+ const lines = buffer.split('\n');
108
+ buffer = lines.pop() ?? '';
109
+ for (const line of lines)
110
+ handle(parseChunkLine(line));
111
+ }
112
+ handle(parseChunkLine(buffer));
113
+ // Final reduce WITHOUT onToken (already emitted above) to assemble the result.
114
+ return reduceChatChunks(chunks);
115
+ }
116
+ //# sourceMappingURL=chatStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatStream.js","sourceRoot":"","sources":["../../src/adapters/chatStream.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,12 @@ export declare class CodexCliAdapter implements CliAdapter {
3
3
  readonly name = "codex";
4
4
  readonly capabilities: AdapterCapabilities;
5
5
  isAvailable(): Promise<boolean>;
6
+ /**
7
+ * List the Codex models this account can use. Tries the live Codex OAuth
8
+ * backend (when authenticated via `openswarm auth login --provider gpt`),
9
+ * falling back to the local ~/.codex sources and a curated default list.
10
+ */
11
+ listModels(): Promise<string[]>;
6
12
  buildCommand(options: CliRunOptions): {
7
13
  command: string;
8
14
  args: string[];
@@ -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;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"}
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;AAWpB,qBAAa,eAAgB,YAAW,UAAU;IAChD,QAAQ,CAAC,IAAI,WAAW;IAExB,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAMxC;IAEI,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IASrC;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAarC,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE;IAWzE,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"}
@@ -5,7 +5,12 @@
5
5
  import { execFile } from 'node:child_process';
6
6
  import { promisify } from 'node:util';
7
7
  import { t } from '../locale/index.js';
8
+ import { AuthProfileStore, ensureValidToken } from '../auth/index.js';
9
+ import { getCodexModelIds } from './codexModels.js';
8
10
  const execFileAsync = promisify(execFile);
11
+ // Codex shares the ChatGPT OAuth profile with the gpt adapter — the same token
12
+ // authorizes the Codex backend models endpoint.
13
+ const CODEX_PROFILE_KEY = 'openai-gpt:default';
9
14
  export class CodexCliAdapter {
10
15
  name = 'codex';
11
16
  capabilities = {
@@ -24,11 +29,32 @@ export class CodexCliAdapter {
24
29
  return false;
25
30
  }
26
31
  }
32
+ /**
33
+ * List the Codex models this account can use. Tries the live Codex OAuth
34
+ * backend (when authenticated via `openswarm auth login --provider gpt`),
35
+ * falling back to the local ~/.codex sources and a curated default list.
36
+ */
37
+ async listModels() {
38
+ let accessToken;
39
+ try {
40
+ const store = new AuthProfileStore();
41
+ if (store.getProfile(CODEX_PROFILE_KEY)) {
42
+ accessToken = await ensureValidToken(store, CODEX_PROFILE_KEY);
43
+ }
44
+ }
45
+ catch {
46
+ // No/expired auth — fall back to offline sources inside getCodexModelIds.
47
+ }
48
+ return getCodexModelIds(accessToken);
49
+ }
27
50
  buildCommand(options) {
28
51
  const promptFile = options.prompt;
29
52
  const resolvedModel = options.model ? coerceCodexModel(options.model) : undefined;
30
53
  const modelFlag = resolvedModel ? ` -m ${shellEscape(resolvedModel)}` : '';
31
- const cmd = `cat ${shellEscape(promptFile)} | codex exec --json --full-auto --skip-git-repo-check${modelFlag}`;
54
+ // `--full-auto` was deprecated in codex 0.137 (warns, still runs). Its documented
55
+ // replacement is `--sandbox workspace-write`: same low-friction policy (writes
56
+ // confined to the workspace, no approval prompts in non-interactive `exec`). (INT-1699)
57
+ const cmd = `cat ${shellEscape(promptFile)} | codex exec --json --sandbox workspace-write --skip-git-repo-check${modelFlag}`;
32
58
  return { command: cmd, args: [] };
33
59
  }
34
60
  parseStreamingChunk(chunk, onLog, buffer = '') {