@intrect/openswarm 0.4.4 → 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 +1 -1
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { CliAdapter, CliRunOptions, CliRunResult, AdapterCapabilities, WorkerResult, ReviewResult } from './types.js';
|
|
2
|
+
import { type ChatMessage } from './agenticLoop.js';
|
|
3
|
+
import type { ToolDefinition } from './tools.js';
|
|
4
|
+
export declare class OpenRouterCliAdapter implements CliAdapter {
|
|
5
|
+
readonly name = "openrouter";
|
|
6
|
+
readonly capabilities: AdapterCapabilities;
|
|
7
|
+
isAvailable(): Promise<boolean>;
|
|
8
|
+
buildCommand(_options: CliRunOptions): {
|
|
9
|
+
command: string;
|
|
10
|
+
args: string[];
|
|
11
|
+
};
|
|
12
|
+
run(options: CliRunOptions): Promise<CliRunResult>;
|
|
13
|
+
parseWorkerOutput(raw: CliRunResult): WorkerResult;
|
|
14
|
+
parseReviewerOutput(raw: CliRunResult): ReviewResult;
|
|
15
|
+
}
|
|
16
|
+
interface OpenRouterChatResponse {
|
|
17
|
+
choices: Array<{
|
|
18
|
+
message: {
|
|
19
|
+
content: string | null;
|
|
20
|
+
role: string;
|
|
21
|
+
tool_calls?: Array<{
|
|
22
|
+
id: string;
|
|
23
|
+
type: 'function';
|
|
24
|
+
function: {
|
|
25
|
+
name: string;
|
|
26
|
+
arguments: string;
|
|
27
|
+
};
|
|
28
|
+
}>;
|
|
29
|
+
};
|
|
30
|
+
finish_reason: string;
|
|
31
|
+
}>;
|
|
32
|
+
usage?: {
|
|
33
|
+
prompt_tokens: number;
|
|
34
|
+
completion_tokens: number;
|
|
35
|
+
total_tokens: number;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export interface ApiCallerOptions {
|
|
39
|
+
/** worker 등 기계적 역할: 추론 토큰 비활성화 (지원 모델 한정) */
|
|
40
|
+
disableReasoning?: boolean;
|
|
41
|
+
}
|
|
42
|
+
export declare function createApiCaller(apiKey: string, model: string, opts?: ApiCallerOptions): (messages: ChatMessage[], tools: ToolDefinition[]) => Promise<OpenRouterChatResponse>;
|
|
43
|
+
/**
|
|
44
|
+
* Prompt caching breakpoint 삽입.
|
|
45
|
+
*
|
|
46
|
+
* OpenAI/Gemini 모델은 OpenRouter가 자동 캐싱하므로 메시지를 건드리지 않는다.
|
|
47
|
+
* Anthropic 모델은 명시적 cache_control breakpoint가 필요하다 — 매 API 호출마다
|
|
48
|
+
* 전체 히스토리가 재전송되는데, 시스템 프롬프트 + 직전 누적 히스토리는 턴마다
|
|
49
|
+
* 거의 동일하므로 그 경계에 ephemeral 캐시 마커를 두면 입력 토큰이 ~90% 할인된다.
|
|
50
|
+
*
|
|
51
|
+
* breakpoint 2개: (1) 시스템 메시지 끝, (2) 마지막 user/tool 메시지 직전 경계.
|
|
52
|
+
* Anthropic은 최대 4개 breakpoint를 허용하므로 2개는 안전하다.
|
|
53
|
+
*/
|
|
54
|
+
export declare function applyPromptCaching(messages: ChatMessage[], model: string): unknown[];
|
|
55
|
+
export {};
|
|
56
|
+
//# sourceMappingURL=openrouter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../src/adapters/openrouter.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACb,MAAM,YAAY,CAAC;AAGpB,OAAO,EAGL,KAAK,WAAW,EAEjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAkBjD,qBAAa,oBAAqB,YAAW,UAAU;IACrD,QAAQ,CAAC,IAAI,gBAAgB;IAE7B,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAMxC;IAEI,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAUrC,YAAY,CAAC,QAAQ,EAAE,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE;IAKpE,GAAG,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAuDxD,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,YAAY;IAIlD,mBAAmB,CAAC,GAAG,EAAE,YAAY,GAAG,YAAY;CAGrD;AAID,UAAU,sBAAsB;IAC9B,OAAO,EAAE,KAAK,CAAC;QACb,OAAO,EAAE;YACP,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;YACvB,IAAI,EAAE,MAAM,CAAC;YACb,UAAU,CAAC,EAAE,KAAK,CAAC;gBACjB,EAAE,EAAE,MAAM,CAAC;gBACX,IAAI,EAAE,UAAU,CAAC;gBACjB,QAAQ,EAAE;oBAAE,IAAI,EAAE,MAAM,CAAC;oBAAC,SAAS,EAAE,MAAM,CAAA;iBAAE,CAAC;aAC/C,CAAC,CAAC;SACJ,CAAC;QACF,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC,CAAC;IACH,KAAK,CAAC,EAAE;QACN,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,gBAAqB,IAC1E,UAAU,WAAW,EAAE,EAAE,OAAO,cAAc,EAAE,qCA2C/D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,CAwBpF"}
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
// ============================================
|
|
2
|
+
// OpenSwarm - OpenRouter CLI Adapter
|
|
3
|
+
// Calls the OpenRouter Chat Completions API (OpenAI-compatible schema)
|
|
4
|
+
// using a stored sk-or-* key from `openswarm auth login --provider openrouter`.
|
|
5
|
+
// ============================================
|
|
6
|
+
import { AuthProfileStore, ensureValidToken } from '../auth/index.js';
|
|
7
|
+
import { t } from '../locale/index.js';
|
|
8
|
+
import { runAgenticLoop, loopResultToCliResult, } from './agenticLoop.js';
|
|
9
|
+
const OPENROUTER_API_BASE = 'https://openrouter.ai/api/v1';
|
|
10
|
+
const DEFAULT_MODEL = 'openai/gpt-5';
|
|
11
|
+
const PROFILE_KEY = 'openrouter:default';
|
|
12
|
+
/** OPENROUTER_API env var → immediate API key (no PKCE needed). */
|
|
13
|
+
function getEnvApiKey() {
|
|
14
|
+
return process.env.OPENROUTER_API?.trim() || undefined;
|
|
15
|
+
}
|
|
16
|
+
// Attribution headers — OpenRouter surfaces these in its analytics UI so
|
|
17
|
+
// model providers can see traffic originating from OpenSwarm.
|
|
18
|
+
const ATTRIBUTION_HEADERS = {
|
|
19
|
+
'HTTP-Referer': 'https://github.com/unohee/openswarm',
|
|
20
|
+
'X-Title': 'OpenSwarm',
|
|
21
|
+
};
|
|
22
|
+
export class OpenRouterCliAdapter {
|
|
23
|
+
name = 'openrouter';
|
|
24
|
+
capabilities = {
|
|
25
|
+
supportsStreaming: false,
|
|
26
|
+
supportsJsonOutput: true,
|
|
27
|
+
supportsModelSelection: true,
|
|
28
|
+
managedGit: false,
|
|
29
|
+
supportedSkills: [],
|
|
30
|
+
};
|
|
31
|
+
async isAvailable() {
|
|
32
|
+
if (getEnvApiKey())
|
|
33
|
+
return true;
|
|
34
|
+
try {
|
|
35
|
+
const store = new AuthProfileStore();
|
|
36
|
+
return store.getProfile(PROFILE_KEY) !== null;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
buildCommand(_options) {
|
|
43
|
+
// 어댑터가 직접 fetch하므로 spawn 진입점은 미사용.
|
|
44
|
+
return { command: 'echo', args: ['"OpenRouter adapter uses run() — not shell spawn"'] };
|
|
45
|
+
}
|
|
46
|
+
async run(options) {
|
|
47
|
+
const startTime = Date.now();
|
|
48
|
+
// Prefer OPENROUTER_API env var (e.g. sourced from VEGA .env)
|
|
49
|
+
let apiKey = getEnvApiKey();
|
|
50
|
+
if (!apiKey) {
|
|
51
|
+
const store = new AuthProfileStore();
|
|
52
|
+
try {
|
|
53
|
+
apiKey = await ensureValidToken(store, PROFILE_KEY);
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
return {
|
|
57
|
+
exitCode: 1,
|
|
58
|
+
stdout: '',
|
|
59
|
+
stderr: `Auth error: ${err instanceof Error ? err.message : String(err)}. Set OPENROUTER_API env var or run: openswarm auth login --provider openrouter`,
|
|
60
|
+
durationMs: Date.now() - startTime,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const model = options.model ?? DEFAULT_MODEL;
|
|
65
|
+
const callApi = createApiCaller(apiKey, model, {
|
|
66
|
+
disableReasoning: options.disableReasoning,
|
|
67
|
+
});
|
|
68
|
+
const loopOptions = {
|
|
69
|
+
systemPrompt: options.systemPrompt,
|
|
70
|
+
prompt: options.prompt,
|
|
71
|
+
cwd: options.cwd ?? process.cwd(),
|
|
72
|
+
model,
|
|
73
|
+
callApi,
|
|
74
|
+
maxTurns: options.maxTurns ?? 20,
|
|
75
|
+
timeoutMs: options.timeoutMs || 300000,
|
|
76
|
+
onLog: options.onLog,
|
|
77
|
+
enableTools: true,
|
|
78
|
+
nudgeMaxOnNoEdit: options.nudgeMaxOnNoEdit,
|
|
79
|
+
protectedFiles: options.protectedFiles,
|
|
80
|
+
bashTimeoutMs: options.bashTimeoutMs,
|
|
81
|
+
};
|
|
82
|
+
try {
|
|
83
|
+
const result = await runAgenticLoop(loopOptions);
|
|
84
|
+
options.onLog?.(`[OpenRouter] ${result.apiCallCount} API calls, ${result.toolCallCount} tool uses, ${result.totalTokens} tokens`);
|
|
85
|
+
return loopResultToCliResult(result);
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
return {
|
|
89
|
+
exitCode: 1,
|
|
90
|
+
stdout: '',
|
|
91
|
+
stderr: `OpenRouter agentic loop failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
92
|
+
durationMs: Date.now() - startTime,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
parseWorkerOutput(raw) {
|
|
97
|
+
return extractWorkerResultJson(raw.stdout) ?? extractWorkerFromText(raw.stdout);
|
|
98
|
+
}
|
|
99
|
+
parseReviewerOutput(raw) {
|
|
100
|
+
return extractReviewerResultJson(raw.stdout) ?? extractReviewerFromText(raw.stdout);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
export function createApiCaller(apiKey, model, opts = {}) {
|
|
104
|
+
return async (messages, tools) => {
|
|
105
|
+
const body = {
|
|
106
|
+
model,
|
|
107
|
+
messages: applyPromptCaching(messages, model),
|
|
108
|
+
temperature: 0.2,
|
|
109
|
+
max_tokens: 16384,
|
|
110
|
+
};
|
|
111
|
+
// ZDR(Zero Data Retention) — 데이터를 보존하지 않는 provider로만 라우팅.
|
|
112
|
+
// 단, OpenAI provider는 data_collection:deny 플래그를 거부("Provider returned
|
|
113
|
+
// error")하므로 제외한다. OpenAI는 API 데이터를 학습에 쓰지 않아(정책상) ZDR
|
|
114
|
+
// 강제가 불필요하다. non-OpenAI 모델에만 적용한다.
|
|
115
|
+
if (!/^openai\//i.test(model)) {
|
|
116
|
+
body.provider = { data_collection: 'deny' };
|
|
117
|
+
}
|
|
118
|
+
// 추론 불필요 역할은 reasoning 토큰을 끈다. glm-4.7-flash처럼 non-thinking
|
|
119
|
+
// 모델엔 무영향, 추론형 모델(glm-5 등)을 worker로 바꿔도 토큰 낭비를 막는다.
|
|
120
|
+
// 단, OpenAI 추론 모델(gpt-5 등)은 "Reasoning is mandatory"로 이 플래그를
|
|
121
|
+
// 거부하므로 제외한다 — worker escalate 대상이 gpt-5라 이걸 안 빼면 escalation이
|
|
122
|
+
// 항상 깨진다. OpenAI는 단순 작업엔 추론을 자동 최소화하므로 끌 필요도 없다.
|
|
123
|
+
if (opts.disableReasoning && !/^openai\//i.test(model)) {
|
|
124
|
+
body.reasoning = { enabled: false };
|
|
125
|
+
}
|
|
126
|
+
if (tools.length > 0) {
|
|
127
|
+
body.tools = tools;
|
|
128
|
+
}
|
|
129
|
+
const res = await fetch(`${OPENROUTER_API_BASE}/chat/completions`, {
|
|
130
|
+
method: 'POST',
|
|
131
|
+
headers: {
|
|
132
|
+
Authorization: `Bearer ${apiKey}`,
|
|
133
|
+
'Content-Type': 'application/json',
|
|
134
|
+
...ATTRIBUTION_HEADERS,
|
|
135
|
+
},
|
|
136
|
+
body: JSON.stringify(body),
|
|
137
|
+
});
|
|
138
|
+
if (!res.ok) {
|
|
139
|
+
const errText = await res.text().catch(() => '');
|
|
140
|
+
throw new Error(`OpenRouter API error (${res.status}): ${errText.slice(0, 500)}`);
|
|
141
|
+
}
|
|
142
|
+
return (await res.json());
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Prompt caching breakpoint 삽입.
|
|
147
|
+
*
|
|
148
|
+
* OpenAI/Gemini 모델은 OpenRouter가 자동 캐싱하므로 메시지를 건드리지 않는다.
|
|
149
|
+
* Anthropic 모델은 명시적 cache_control breakpoint가 필요하다 — 매 API 호출마다
|
|
150
|
+
* 전체 히스토리가 재전송되는데, 시스템 프롬프트 + 직전 누적 히스토리는 턴마다
|
|
151
|
+
* 거의 동일하므로 그 경계에 ephemeral 캐시 마커를 두면 입력 토큰이 ~90% 할인된다.
|
|
152
|
+
*
|
|
153
|
+
* breakpoint 2개: (1) 시스템 메시지 끝, (2) 마지막 user/tool 메시지 직전 경계.
|
|
154
|
+
* Anthropic은 최대 4개 breakpoint를 허용하므로 2개는 안전하다.
|
|
155
|
+
*/
|
|
156
|
+
export function applyPromptCaching(messages, model) {
|
|
157
|
+
// OpenAI/Gemini 등은 자동 캐싱 — 변환 불필요 (cache_control을 넣으면 거부될 수 있음)
|
|
158
|
+
if (!/anthropic\/|claude/i.test(model)) {
|
|
159
|
+
return messages;
|
|
160
|
+
}
|
|
161
|
+
// 캐시 마커를 달 인덱스: 시스템 메시지(있으면) + 마지막 직전 메시지.
|
|
162
|
+
// 마지막 메시지(가장 최근 tool 결과)는 매 턴 바뀌므로 캐시하지 않는다.
|
|
163
|
+
const cacheable = new Set();
|
|
164
|
+
if (messages[0]?.role === 'system')
|
|
165
|
+
cacheable.add(0);
|
|
166
|
+
if (messages.length >= 2)
|
|
167
|
+
cacheable.add(messages.length - 2);
|
|
168
|
+
return messages.map((m, i) => {
|
|
169
|
+
if (!cacheable.has(i) || typeof m.content !== 'string' || !m.content) {
|
|
170
|
+
return m;
|
|
171
|
+
}
|
|
172
|
+
// string content → content-part 배열로 변환하며 마지막 파트에 cache_control 부착
|
|
173
|
+
return {
|
|
174
|
+
...m,
|
|
175
|
+
content: [
|
|
176
|
+
{ type: 'text', text: m.content, cache_control: { type: 'ephemeral' } },
|
|
177
|
+
],
|
|
178
|
+
};
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
// ----- Worker/Reviewer output parsing (mirrors gpt.ts) -----
|
|
182
|
+
function extractWorkerResultJson(text) {
|
|
183
|
+
const jsonMatch = text.match(/```json\s*([\s\S]*?)\s*```/);
|
|
184
|
+
const jsonStr = jsonMatch?.[1] ?? findJsonObject(text, '"success"');
|
|
185
|
+
if (!jsonStr)
|
|
186
|
+
return null;
|
|
187
|
+
try {
|
|
188
|
+
const parsed = JSON.parse(jsonStr);
|
|
189
|
+
return {
|
|
190
|
+
success: Boolean(parsed.success),
|
|
191
|
+
summary: parsed.summary || t('common.fallback.noSummary'),
|
|
192
|
+
filesChanged: Array.isArray(parsed.filesChanged) ? parsed.filesChanged : [],
|
|
193
|
+
commands: Array.isArray(parsed.commands) ? parsed.commands : [],
|
|
194
|
+
output: text,
|
|
195
|
+
error: parsed.error,
|
|
196
|
+
confidencePercent: typeof parsed.confidencePercent === 'number' ? parsed.confidencePercent : undefined,
|
|
197
|
+
haltReason: parsed.haltReason || undefined,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
return null;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
function extractWorkerFromText(text) {
|
|
205
|
+
// Only an explicit failure phrase marks the run as failed (see gpt.ts).
|
|
206
|
+
// git-diff promotion in worker.ts is the real success signal.
|
|
207
|
+
const failed = isExplicitFailure(text);
|
|
208
|
+
return {
|
|
209
|
+
success: !failed,
|
|
210
|
+
summary: extractSummary(text),
|
|
211
|
+
filesChanged: [],
|
|
212
|
+
commands: [],
|
|
213
|
+
output: text,
|
|
214
|
+
error: failed ? extractErrorMessage(text) : undefined,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
function extractReviewerResultJson(text) {
|
|
218
|
+
const jsonMatch = text.match(/```json\s*([\s\S]*?)\s*```/);
|
|
219
|
+
const jsonStr = jsonMatch?.[1] ?? findJsonObject(text, '"decision"');
|
|
220
|
+
if (!jsonStr)
|
|
221
|
+
return null;
|
|
222
|
+
try {
|
|
223
|
+
const parsed = JSON.parse(jsonStr);
|
|
224
|
+
const decision = parsed.decision === 'approve' || parsed.decision === 'reject' ? parsed.decision : 'revise';
|
|
225
|
+
return {
|
|
226
|
+
decision,
|
|
227
|
+
feedback: typeof parsed.feedback === 'string' ? parsed.feedback : t('common.fallback.noSummary'),
|
|
228
|
+
issues: Array.isArray(parsed.issues)
|
|
229
|
+
? parsed.issues.filter((v) => typeof v === 'string')
|
|
230
|
+
: [],
|
|
231
|
+
suggestions: Array.isArray(parsed.suggestions)
|
|
232
|
+
? parsed.suggestions.filter((v) => typeof v === 'string')
|
|
233
|
+
: [],
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
return null;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
function extractReviewerFromText(text) {
|
|
241
|
+
const lower = text.toLowerCase();
|
|
242
|
+
const decision = lower.includes('approve')
|
|
243
|
+
? 'approve'
|
|
244
|
+
: lower.includes('reject')
|
|
245
|
+
? 'reject'
|
|
246
|
+
: 'revise';
|
|
247
|
+
return {
|
|
248
|
+
decision,
|
|
249
|
+
feedback: extractSummary(text),
|
|
250
|
+
issues: [],
|
|
251
|
+
suggestions: [],
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
function findJsonObject(text, marker) {
|
|
255
|
+
const idx = text.indexOf(marker);
|
|
256
|
+
if (idx < 0)
|
|
257
|
+
return null;
|
|
258
|
+
const start = text.lastIndexOf('{', idx);
|
|
259
|
+
if (start < 0)
|
|
260
|
+
return null;
|
|
261
|
+
let depth = 0;
|
|
262
|
+
for (let i = start; i < text.length; i++) {
|
|
263
|
+
if (text[i] === '{')
|
|
264
|
+
depth++;
|
|
265
|
+
if (text[i] === '}') {
|
|
266
|
+
depth--;
|
|
267
|
+
if (depth === 0) {
|
|
268
|
+
return text.slice(start, i + 1);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return null;
|
|
273
|
+
}
|
|
274
|
+
// Detect a real failure declaration, not incidental "error"/"fail" prose (see gpt.ts).
|
|
275
|
+
function isExplicitFailure(text) {
|
|
276
|
+
if (/"success"\s*:\s*false/i.test(text))
|
|
277
|
+
return true;
|
|
278
|
+
return /\b(failed to|unable to|could not|couldn['’]t|cannot (?:complete|finish|proceed|continue)|giving up|abort(?:ed|ing))\b/i.test(text);
|
|
279
|
+
}
|
|
280
|
+
function extractSummary(text) {
|
|
281
|
+
const lines = text.split('\n').filter((l) => l.trim().length > 10);
|
|
282
|
+
if (lines.length === 0)
|
|
283
|
+
return t('common.fallback.noSummary');
|
|
284
|
+
const summary = lines[0].trim();
|
|
285
|
+
return summary.length > 200 ? `${summary.slice(0, 200)}...` : summary;
|
|
286
|
+
}
|
|
287
|
+
function extractErrorMessage(text) {
|
|
288
|
+
const errorMatch = text.match(/(?:error|exception|failed?):\s*(.+)/i);
|
|
289
|
+
if (errorMatch)
|
|
290
|
+
return errorMatch[1].slice(0, 200);
|
|
291
|
+
const lines = text.split('\n').filter((l) => /error|fail/i.test(l));
|
|
292
|
+
return lines.length > 0 ? lines[0].slice(0, 200) : 'Unknown error';
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=openrouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../src/adapters/openrouter.ts"],"names":[],"mappings":"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"}
|
package/dist/adapters/tools.d.ts
CHANGED
|
@@ -19,12 +19,37 @@ export interface ToolResult {
|
|
|
19
19
|
content: string;
|
|
20
20
|
is_error: boolean;
|
|
21
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* 루프 단위 read 캐시. 같은 작업 루프 안에서 동일 파일을 반복 read하면
|
|
24
|
+
* (모델이 edit 후 "고쳐졌나?" 확인하려 재read하는 패턴) 디스크를 다시 읽지 않고
|
|
25
|
+
* 캐시된 내용 + "변경 없음" 힌트를 반환해 토큰·턴 낭비를 줄인다.
|
|
26
|
+
* edit_file/write_file 성공 시 해당 경로를 무효화해 stale read를 막는다.
|
|
27
|
+
*/
|
|
28
|
+
export interface ReadCache {
|
|
29
|
+
store: Map<string, string>;
|
|
30
|
+
}
|
|
31
|
+
export declare function createReadCache(): ReadCache;
|
|
32
|
+
/**
|
|
33
|
+
* Tool execution options — verification-harness protection.
|
|
34
|
+
* Found in SWE hybrid runs: the implementer model misattributed test failures
|
|
35
|
+
* to the verification script (run_tests.sh) and edited the script itself five
|
|
36
|
+
* times, destroying verification integrity. Protected files reject edit/write.
|
|
37
|
+
* The bash timeout is also configurable — the 30s default dies silently on
|
|
38
|
+
* docker-based test runs (minutes), which made models conclude "the
|
|
39
|
+
* environment is broken".
|
|
40
|
+
*/
|
|
41
|
+
export interface ToolExecOptions {
|
|
42
|
+
/** Filenames (matched by path suffix) for which edit_file/write_file are refused */
|
|
43
|
+
protectedFiles?: string[];
|
|
44
|
+
/** bash tool timeout (default DEFAULT_BASH_TIMEOUT_MS) */
|
|
45
|
+
bashTimeoutMs?: number;
|
|
46
|
+
}
|
|
22
47
|
/**
|
|
23
48
|
* 단일 도구 호출 실행
|
|
24
49
|
*/
|
|
25
|
-
export declare function executeTool(toolCall: ToolCall, cwd: string): Promise<ToolResult>;
|
|
50
|
+
export declare function executeTool(toolCall: ToolCall, cwd: string, cache?: ReadCache, execOptions?: ToolExecOptions): Promise<ToolResult>;
|
|
26
51
|
/**
|
|
27
52
|
* 여러 도구 호출을 병렬 실행
|
|
28
53
|
*/
|
|
29
|
-
export declare function executeToolCalls(toolCalls: ToolCall[], cwd: string): Promise<ToolResult[]>;
|
|
54
|
+
export declare function executeToolCalls(toolCalls: ToolCall[], cwd: string, cache?: ReadCache, execOptions?: ToolExecOptions): Promise<ToolResult[]>;
|
|
30
55
|
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/adapters/tools.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACrC,CAAC;CACH;AAED,eAAO,MAAM,gBAAgB,EAAE,cAAc,EA8E5C,CAAC;AAwBF,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/adapters/tools.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACrC,CAAC;CACH;AAED,eAAO,MAAM,gBAAgB,EAAE,cAAc,EA8E5C,CAAC;AAwBF,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5B;AAED,wBAAgB,eAAe,IAAI,SAAS,CAE3C;AAUD;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe;IAC9B,oFAAoF;IACpF,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAwBD;;GAEG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,SAAS,EACjB,WAAW,CAAC,EAAE,eAAe,GAC5B,OAAO,CAAC,UAAU,CAAC,CAqKrB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,QAAQ,EAAE,EACrB,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,SAAS,EACjB,WAAW,CAAC,EAAE,eAAe,GAC5B,OAAO,CAAC,UAAU,EAAE,CAAC,CAEvB"}
|
package/dist/adapters/tools.js
CHANGED
|
@@ -105,19 +105,40 @@ const BLOCKED_COMMANDS = [
|
|
|
105
105
|
function isCommandBlocked(command) {
|
|
106
106
|
return BLOCKED_COMMANDS.some(pattern => pattern.test(command));
|
|
107
107
|
}
|
|
108
|
+
export function createReadCache() {
|
|
109
|
+
return { store: new Map() };
|
|
110
|
+
}
|
|
111
|
+
/** 캐시에서 한 파일의 모든 범위 엔트리를 제거 (edit/write 후 stale 방지) */
|
|
112
|
+
function invalidateCache(cache, filePath) {
|
|
113
|
+
if (!cache)
|
|
114
|
+
return;
|
|
115
|
+
for (const key of cache.store.keys()) {
|
|
116
|
+
if (key.startsWith(`${filePath}#`))
|
|
117
|
+
cache.store.delete(key);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
const DEFAULT_BASH_TIMEOUT_MS = 30000;
|
|
121
|
+
function isProtected(resolved, protectedFiles) {
|
|
122
|
+
if (!protectedFiles?.length)
|
|
123
|
+
return false;
|
|
124
|
+
return protectedFiles.some((p) => resolved === p || resolved.endsWith(`/${p}`));
|
|
125
|
+
}
|
|
108
126
|
/** 프로젝트 경로 내로 접근을 제한하는 경로 검증 */
|
|
109
127
|
function validatePath(filePath, cwd) {
|
|
110
128
|
const resolved = path.resolve(cwd, filePath);
|
|
111
129
|
// cwd 하위이거나, /tmp 하위만 허용
|
|
112
130
|
if (!resolved.startsWith(cwd) && !resolved.startsWith('/tmp')) {
|
|
113
|
-
|
|
131
|
+
// 모델이 자가수정하도록 안내 — 그냥 거부만 하면 같은 실수를 반복한다.
|
|
132
|
+
throw new Error(`Path "${filePath}" is outside the project root (${cwd}). ` +
|
|
133
|
+
`Use a path relative to the project root instead, e.g. "." for the whole project or "src/...". ` +
|
|
134
|
+
`Do not use "/" or absolute paths outside ${cwd}.`);
|
|
114
135
|
}
|
|
115
136
|
return resolved;
|
|
116
137
|
}
|
|
117
138
|
/**
|
|
118
139
|
* 단일 도구 호출 실행
|
|
119
140
|
*/
|
|
120
|
-
export async function executeTool(toolCall, cwd) {
|
|
141
|
+
export async function executeTool(toolCall, cwd, cache, execOptions) {
|
|
121
142
|
const { name, arguments: argsJson } = toolCall.function;
|
|
122
143
|
const callId = toolCall.id;
|
|
123
144
|
try {
|
|
@@ -125,26 +146,55 @@ export async function executeTool(toolCall, cwd) {
|
|
|
125
146
|
switch (name) {
|
|
126
147
|
case 'read_file': {
|
|
127
148
|
const filePath = validatePath(args.path, cwd);
|
|
128
|
-
const content = await fs.readFile(filePath, 'utf-8');
|
|
129
|
-
const lines = content.split('\n');
|
|
130
149
|
const offset = args.offset ?? 0;
|
|
131
150
|
const limit = args.limit ?? 500;
|
|
151
|
+
const cacheKey = `${filePath}#${offset}:${limit}`;
|
|
152
|
+
// 같은 루프에서 이미 같은 범위를 읽었으면 디스크 재접근 없이 캐시 반환.
|
|
153
|
+
// 모델에게 "변경 없음"을 알려 추가 확인 read를 유도하지 않는다.
|
|
154
|
+
if (cache?.store.has(cacheKey)) {
|
|
155
|
+
return {
|
|
156
|
+
tool_call_id: callId,
|
|
157
|
+
content: `(unchanged since last read — cached)\n${cache.store.get(cacheKey)}`,
|
|
158
|
+
is_error: false,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
162
|
+
const lines = content.split('\n');
|
|
132
163
|
const slice = lines.slice(offset, offset + limit);
|
|
133
164
|
const numbered = slice.map((line, i) => `${offset + i + 1}\t${line}`).join('\n');
|
|
134
165
|
const truncated = lines.length > offset + limit
|
|
135
166
|
? `\n... (${lines.length - offset - limit} more lines)`
|
|
136
167
|
: '';
|
|
137
|
-
|
|
168
|
+
const result = numbered + truncated;
|
|
169
|
+
cache?.store.set(cacheKey, result);
|
|
170
|
+
return { tool_call_id: callId, content: result, is_error: false };
|
|
138
171
|
}
|
|
139
172
|
case 'write_file': {
|
|
140
173
|
const filePath = validatePath(args.path, cwd);
|
|
174
|
+
if (isProtected(filePath, execOptions?.protectedFiles)) {
|
|
175
|
+
return {
|
|
176
|
+
tool_call_id: callId,
|
|
177
|
+
content: `PROTECTED: ${args.path} is part of the verification harness and must not be modified. ` +
|
|
178
|
+
`If tests fail, the cause is in the SOURCE code (or your fix) — debug from the test output instead.`,
|
|
179
|
+
is_error: true,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
141
182
|
// 디렉토리 자동 생성
|
|
142
183
|
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
143
184
|
await fs.writeFile(filePath, args.content, 'utf-8');
|
|
185
|
+
invalidateCache(cache, filePath);
|
|
144
186
|
return { tool_call_id: callId, content: `Written: ${filePath}`, is_error: false };
|
|
145
187
|
}
|
|
146
188
|
case 'edit_file': {
|
|
147
189
|
const filePath = validatePath(args.path, cwd);
|
|
190
|
+
if (isProtected(filePath, execOptions?.protectedFiles)) {
|
|
191
|
+
return {
|
|
192
|
+
tool_call_id: callId,
|
|
193
|
+
content: `PROTECTED: ${args.path} is part of the verification harness and must not be modified. ` +
|
|
194
|
+
`If tests fail, the cause is in the SOURCE code (or your fix) — debug from the test output instead.`,
|
|
195
|
+
is_error: true,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
148
198
|
const original = await fs.readFile(filePath, 'utf-8');
|
|
149
199
|
const occurrences = original.split(args.old_string).length - 1;
|
|
150
200
|
if (occurrences === 0) {
|
|
@@ -155,7 +205,21 @@ export async function executeTool(toolCall, cwd) {
|
|
|
155
205
|
}
|
|
156
206
|
const updated = original.replace(args.old_string, args.new_string);
|
|
157
207
|
await fs.writeFile(filePath, updated, 'utf-8');
|
|
158
|
-
|
|
208
|
+
invalidateCache(cache, filePath);
|
|
209
|
+
// Return the changed region so the model can verify without a re-read.
|
|
210
|
+
// Locate the edit via old_string's position in the ORIGINAL (guaranteed
|
|
211
|
+
// unique above) — indexOf(new_string) on the updated text could match an
|
|
212
|
+
// earlier pre-existing occurrence and show the wrong region.
|
|
213
|
+
const newLines = updated.split('\n');
|
|
214
|
+
const editLine = original.slice(0, original.indexOf(args.old_string)).split('\n').length - 1;
|
|
215
|
+
const from = Math.max(0, editLine - 3);
|
|
216
|
+
const to = Math.min(newLines.length, editLine + args.new_string.split('\n').length + 3);
|
|
217
|
+
const snippet = newLines.slice(from, to).map((l, i) => `${from + i + 1}\t${l}`).join('\n');
|
|
218
|
+
return {
|
|
219
|
+
tool_call_id: callId,
|
|
220
|
+
content: `Edited: ${filePath}\nResulting region:\n${snippet}`,
|
|
221
|
+
is_error: false,
|
|
222
|
+
};
|
|
159
223
|
}
|
|
160
224
|
case 'search_files': {
|
|
161
225
|
const searchPath = validatePath(args.path, cwd);
|
|
@@ -184,7 +248,7 @@ export async function executeTool(toolCall, cwd) {
|
|
|
184
248
|
try {
|
|
185
249
|
const { stdout, stderr } = await execFileAsync('bash', ['-c', command], {
|
|
186
250
|
cwd,
|
|
187
|
-
timeout:
|
|
251
|
+
timeout: execOptions?.bashTimeoutMs ?? DEFAULT_BASH_TIMEOUT_MS,
|
|
188
252
|
maxBuffer: 1024 * 512,
|
|
189
253
|
env: process.env,
|
|
190
254
|
});
|
|
@@ -192,13 +256,36 @@ export async function executeTool(toolCall, cwd) {
|
|
|
192
256
|
// 출력이 너무 길면 잘라냄
|
|
193
257
|
return {
|
|
194
258
|
tool_call_id: callId,
|
|
195
|
-
content: output.length > 8000 ? output.slice(0, 8000) + '\n... (truncated)' : output,
|
|
259
|
+
content: output.length > 8000 ? output.slice(0, 8000) + '\n... (truncated)' : output || '(no output, exit 0)',
|
|
196
260
|
is_error: false,
|
|
197
261
|
};
|
|
198
262
|
}
|
|
199
263
|
catch (err) {
|
|
200
|
-
|
|
201
|
-
|
|
264
|
+
// exit code != 0 → execFile이 throw. 하지만 grep/find 등은 "매치 없음"으로
|
|
265
|
+
// exit 1을 내며 이건 정상이다. 실제 stdout/stderr + exit code를 모델에게 줘서
|
|
266
|
+
// "no match"인지 진짜 에러인지 스스로 판단하게 한다(이게 없으면 같은 명령 반복).
|
|
267
|
+
const e = err;
|
|
268
|
+
const out = (e.stdout ?? '') + (e.stderr ? `\n[stderr] ${e.stderr}` : '');
|
|
269
|
+
const code = typeof e.code === 'number' ? e.code : '?';
|
|
270
|
+
// Make timeout kills explicit — a silent no-output failure leads the
|
|
271
|
+
// model to conclude "the verification environment is broken" and start
|
|
272
|
+
// dismantling the harness (observed in SWE runs).
|
|
273
|
+
if (e.killed && e.signal) {
|
|
274
|
+
const limit = execOptions?.bashTimeoutMs ?? DEFAULT_BASH_TIMEOUT_MS;
|
|
275
|
+
return {
|
|
276
|
+
tool_call_id: callId,
|
|
277
|
+
content: `TIMEOUT: command exceeded ${Math.round(limit / 1000)}s and was killed (${e.signal}). ` +
|
|
278
|
+
`The command may simply be slow — this is NOT evidence that the environment or script is broken. ` +
|
|
279
|
+
`Partial output:\n${out.slice(0, 2000) || '(none)'}`,
|
|
280
|
+
is_error: true,
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
const body = out.trim()
|
|
284
|
+
? `exit ${code}:\n${out.slice(0, 4000)}`
|
|
285
|
+
: `exit ${code} (no output) — likely no matches or a non-fatal nonzero exit, not necessarily an error.`;
|
|
286
|
+
// exit 1 + 출력 없음은 보통 무해(grep no-match) → is_error를 false로 둬 모델이 안 헤매게.
|
|
287
|
+
const benign = e.code === 1 && !out.trim();
|
|
288
|
+
return { tool_call_id: callId, content: body, is_error: !benign };
|
|
202
289
|
}
|
|
203
290
|
}
|
|
204
291
|
default:
|
|
@@ -213,7 +300,7 @@ export async function executeTool(toolCall, cwd) {
|
|
|
213
300
|
/**
|
|
214
301
|
* 여러 도구 호출을 병렬 실행
|
|
215
302
|
*/
|
|
216
|
-
export async function executeToolCalls(toolCalls, cwd) {
|
|
217
|
-
return Promise.all(toolCalls.map(tc => executeTool(tc, cwd)));
|
|
303
|
+
export async function executeToolCalls(toolCalls, cwd, cache, execOptions) {
|
|
304
|
+
return Promise.all(toolCalls.map(tc => executeTool(tc, cwd, cache, execOptions)));
|
|
218
305
|
}
|
|
219
306
|
//# sourceMappingURL=tools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/adapters/tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/adapters/tools.ts"],"names":[],"mappings":"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"}
|