@nehanahmed/forge 0.1.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/LICENSE +21 -0
- package/README.MD +114 -0
- package/dist/cli/agent-cli.d.ts +29 -0
- package/dist/cli/agent-cli.d.ts.map +1 -0
- package/dist/cli/agent-cli.js +78 -0
- package/dist/cli/agent-cli.js.map +1 -0
- package/dist/cli/app.d.ts +6 -0
- package/dist/cli/app.d.ts.map +1 -0
- package/dist/cli/app.js +176 -0
- package/dist/cli/app.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/client.d.ts +4 -0
- package/dist/core/client.d.ts.map +1 -0
- package/dist/core/client.js +37 -0
- package/dist/core/client.js.map +1 -0
- package/dist/core/compaction.d.ts +9 -0
- package/dist/core/compaction.d.ts.map +1 -0
- package/dist/core/compaction.js +170 -0
- package/dist/core/compaction.js.map +1 -0
- package/dist/core/constants.d.ts +12 -0
- package/dist/core/constants.d.ts.map +1 -0
- package/dist/core/constants.js +35 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/converter.d.ts +8 -0
- package/dist/core/converter.d.ts.map +1 -0
- package/dist/core/converter.js +41 -0
- package/dist/core/converter.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +5 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/state.d.ts +22 -0
- package/dist/core/state.d.ts.map +1 -0
- package/dist/core/state.js +153 -0
- package/dist/core/state.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/definitions.d.ts +81 -0
- package/dist/tools/definitions.d.ts.map +1 -0
- package/dist/tools/definitions.js +89 -0
- package/dist/tools/definitions.js.map +1 -0
- package/dist/tools/helpers.d.ts +4 -0
- package/dist/tools/helpers.d.ts.map +1 -0
- package/dist/tools/helpers.js +53 -0
- package/dist/tools/helpers.js.map +1 -0
- package/dist/tools/implementations.d.ts +8 -0
- package/dist/tools/implementations.d.ts.map +1 -0
- package/dist/tools/implementations.js +115 -0
- package/dist/tools/implementations.js.map +1 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +4 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types/index.d.ts +51 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { MODEL, COMPACTION_THRESHOLD_TOKENS, COMPACTION_KEEP_RECENT, SYSTEM_PROMPT } from './constants.js';
|
|
2
|
+
import { getClient } from './client.js';
|
|
3
|
+
export const DEFAULT_COMPACTION_CONFIG = {
|
|
4
|
+
thresholdTokens: COMPACTION_THRESHOLD_TOKENS,
|
|
5
|
+
keepRecentTurns: COMPACTION_KEEP_RECENT,
|
|
6
|
+
model: MODEL,
|
|
7
|
+
};
|
|
8
|
+
function extractTextContent(content) {
|
|
9
|
+
if (typeof content === 'string')
|
|
10
|
+
return content;
|
|
11
|
+
if (Array.isArray(content)) {
|
|
12
|
+
return content.map(c => extractTextContent(c)).join('');
|
|
13
|
+
}
|
|
14
|
+
if (content && typeof content === 'object' && 'text' in content) {
|
|
15
|
+
return String(content.text);
|
|
16
|
+
}
|
|
17
|
+
return '';
|
|
18
|
+
}
|
|
19
|
+
function stateToLegacyMessages(state) {
|
|
20
|
+
const messages = [];
|
|
21
|
+
const stateAny = state;
|
|
22
|
+
if (stateAny.messages) {
|
|
23
|
+
for (const msg of stateAny.messages) {
|
|
24
|
+
const m = msg;
|
|
25
|
+
const role = m.role;
|
|
26
|
+
if (role === 'user') {
|
|
27
|
+
messages.push({ role: 'user', content: extractTextContent(m.content ?? '') });
|
|
28
|
+
}
|
|
29
|
+
else if (role === 'assistant') {
|
|
30
|
+
const toolCalls = m.toolCalls?.map(tc => ({
|
|
31
|
+
id: tc.id,
|
|
32
|
+
type: 'function',
|
|
33
|
+
function: { name: tc.name, arguments: tc.arguments },
|
|
34
|
+
}));
|
|
35
|
+
messages.push({
|
|
36
|
+
role: 'assistant',
|
|
37
|
+
content: m.content ? extractTextContent(m.content) : null,
|
|
38
|
+
reasoning: m.reasoning,
|
|
39
|
+
toolCalls: toolCalls?.length ? toolCalls : undefined,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
else if (role === 'tool') {
|
|
43
|
+
messages.push({
|
|
44
|
+
role: 'tool',
|
|
45
|
+
toolCallId: m.callId ?? '',
|
|
46
|
+
content: extractTextContent(m.output ?? ''),
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
else if (role === 'system' || role === 'developer') {
|
|
50
|
+
messages.push({ role: 'system', content: extractTextContent(m.content ?? '') });
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return messages;
|
|
55
|
+
}
|
|
56
|
+
function legacyToSDKMessage(msg) {
|
|
57
|
+
if (msg.role === 'user') {
|
|
58
|
+
return { role: 'user', content: msg.content ?? '' };
|
|
59
|
+
}
|
|
60
|
+
if (msg.role === 'assistant') {
|
|
61
|
+
return {
|
|
62
|
+
role: 'assistant',
|
|
63
|
+
content: msg.content ?? undefined,
|
|
64
|
+
reasoning: msg.reasoning,
|
|
65
|
+
toolCalls: msg.toolCalls?.map(tc => ({
|
|
66
|
+
id: tc.id,
|
|
67
|
+
name: tc.function.name,
|
|
68
|
+
arguments: tc.function.arguments,
|
|
69
|
+
})),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
if (msg.role === 'tool') {
|
|
73
|
+
return { role: 'tool', callId: msg.toolCallId, output: msg.content ?? '' };
|
|
74
|
+
}
|
|
75
|
+
return { role: 'system', content: msg.content ?? '' };
|
|
76
|
+
}
|
|
77
|
+
function generateId() {
|
|
78
|
+
return `msg_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;
|
|
79
|
+
}
|
|
80
|
+
function toSystemItem(msg) {
|
|
81
|
+
return {
|
|
82
|
+
id: generateId(),
|
|
83
|
+
role: 'system',
|
|
84
|
+
content: msg.content ?? '',
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function toUserItem(msg) {
|
|
88
|
+
return {
|
|
89
|
+
id: generateId(),
|
|
90
|
+
role: 'user',
|
|
91
|
+
content: msg.content ?? '',
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
function toAssistantItem(msg) {
|
|
95
|
+
return {
|
|
96
|
+
id: generateId(),
|
|
97
|
+
role: 'assistant',
|
|
98
|
+
content: msg.content ?? undefined,
|
|
99
|
+
reasoning: msg.reasoning,
|
|
100
|
+
toolCalls: msg.toolCalls,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
function toToolItem(msg) {
|
|
104
|
+
return {
|
|
105
|
+
id: generateId(),
|
|
106
|
+
callId: msg.callId ?? generateId(),
|
|
107
|
+
output: msg.output ?? '',
|
|
108
|
+
type: 'function_call_output',
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
export async function compactIfNeeded(state, config = DEFAULT_COMPACTION_CONFIG) {
|
|
112
|
+
const legacyMessages = stateToLegacyMessages(state);
|
|
113
|
+
const estimatedTokens = JSON.stringify(legacyMessages).length / 4;
|
|
114
|
+
console.log(`[compaction check] ~${Math.round(estimatedTokens)} tokens (threshold: ${config.thresholdTokens})`);
|
|
115
|
+
if (estimatedTokens < config.thresholdTokens)
|
|
116
|
+
return state;
|
|
117
|
+
const systemMsg = legacyMessages.find(m => m.role === 'system') ?? { role: 'system', content: SYSTEM_PROMPT };
|
|
118
|
+
const recent = legacyMessages.slice(-config.keepRecentTurns);
|
|
119
|
+
const toSummarize = legacyMessages.slice(1, -config.keepRecentTurns);
|
|
120
|
+
if (toSummarize.length === 0)
|
|
121
|
+
return state;
|
|
122
|
+
console.log(`[compaction] compacting ${toSummarize.length} messages...`);
|
|
123
|
+
try {
|
|
124
|
+
const summaryResponse = await getClient().callModel({
|
|
125
|
+
model: config.model,
|
|
126
|
+
input: [
|
|
127
|
+
{
|
|
128
|
+
role: 'system',
|
|
129
|
+
content: 'Summarize this conversation history concisely. You MUST explicitly state, verbatim or near-verbatim, what the user\'s most recent request/goal was — this is the single most important thing to preserve. Also preserve: file paths touched, key decisions made, and any unresolved sub-tasks. Discard: verbose reasoning, redundant tool output, and repeated file contents already summarized elsewhere.',
|
|
130
|
+
},
|
|
131
|
+
{ role: 'user', content: JSON.stringify(toSummarize) },
|
|
132
|
+
],
|
|
133
|
+
tools: [],
|
|
134
|
+
});
|
|
135
|
+
const summary = await summaryResponse.getText();
|
|
136
|
+
if (!summary) {
|
|
137
|
+
console.log('[compaction] empty summary returned, skipping compaction this round.');
|
|
138
|
+
return state;
|
|
139
|
+
}
|
|
140
|
+
console.log(`[compaction] done — collapsed ${toSummarize.length} messages into 1.`);
|
|
141
|
+
const compactedLegacy = [
|
|
142
|
+
systemMsg,
|
|
143
|
+
{ role: 'system', content: `[Compacted history — the user's active request is stated below; continue working on it]: ${summary}` },
|
|
144
|
+
...recent,
|
|
145
|
+
];
|
|
146
|
+
const compactedSDKMessages = compactedLegacy.map(legacyToSDKMessage);
|
|
147
|
+
const convertedMessages = compactedSDKMessages.map(m => {
|
|
148
|
+
if (m.role === 'system')
|
|
149
|
+
return toSystemItem(m);
|
|
150
|
+
if (m.role === 'user')
|
|
151
|
+
return toUserItem(m);
|
|
152
|
+
if (m.role === 'assistant')
|
|
153
|
+
return toAssistantItem(m);
|
|
154
|
+
if (m.role === 'tool')
|
|
155
|
+
return toToolItem(m);
|
|
156
|
+
return toSystemItem(m);
|
|
157
|
+
});
|
|
158
|
+
const compactedState = {
|
|
159
|
+
...state,
|
|
160
|
+
messages: convertedMessages,
|
|
161
|
+
updatedAt: Date.now(),
|
|
162
|
+
};
|
|
163
|
+
return compactedState;
|
|
164
|
+
}
|
|
165
|
+
catch (err) {
|
|
166
|
+
console.log('[compaction] failed, continuing with uncompacted history:', err);
|
|
167
|
+
return state;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=compaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction.js","sourceRoot":"","sources":["../../src/core/compaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const AGENT_NAME = "FORGE";
|
|
2
|
+
export declare const MODEL = "qwen/qwen3.8-27b:free";
|
|
3
|
+
export declare const MAX_ITERATIONS = 20;
|
|
4
|
+
export declare const RISKY_TOOLS: Set<string>;
|
|
5
|
+
export declare const SYSTEM_PROMPT = "You are FORGE, an expert autonomous software engineering agent operating directly in the user's local terminal environment. Your goal is to solve programming tasks, fix bugs, refactor code, and analyze repositories efficiently and safely.\n\n### OPERATIONAL PRINCIPLES & MINDSET\n1. **Be Concise & Direct:** You operate in a command-line interface. Minimize fluff, polite pleasantries, and unnecessary conversational filler. Focus on action and execution.\n2. **Context-Aware:** You are provided with continuous session history across execution steps. Maintain high coherence with previous user instructions and tool outputs.\n3. **Verify Before Action:** Inspect the existing codebase structure before writing code or running shell commands. Do not guess file paths, implementation details, or framework configurations.\n\n### TOOL USAGE PROTOCOL\n1. **Gather Context First:** Use read-only, discovery tools (e.g., file readers, search/grep, directory listings) to understand the project context before performing modifications.\n2. **Batch & Sequence Logically:** Execute tools in logical, dependent order. Inspect files -> Modify code -> Run tests/lints to verify changes.\n3. **Handle Errors Gracefully:** If a tool execution fails or a command throws an error, do not panic or repeat the exact same failing action. Read the stderr/error log carefully, adjust your strategy, and attempt a corrective step.\n4. **Tool Restrictions:** Never execute destructive or non-reversible actions (e.g., recursive deletions, git hard resets, system-level package updates) without explicit confirmation.\n\n### CODE MODIFICATION & QUALITY STANDARDS\n1. **Minimal, Precise Changes:** Prefer targeted edits over rewriting whole files unless requested or necessary. Do not delete unrelated comments, dead code, or existing functionality without reason.\n2. **Adhere to Code Conventions:** Match the existing codebase style, naming conventions, formatting rules, and type strictness (e.g., TypeScript interfaces, ESLint guidelines).\n3. **Self-Correction & Verification:** After making edits, verify your work whenever tools permit (e.g., run standard test suites, build checks, or type checking commands).\n\n### OUTPUT FORMATTING & STYLE\n- Present code blocks with explicit language syntax highlighting tags.\n- Keep technical commentary brief\u2014explain *why* a change was made rather than describing mechanical syntax edits line-by-line.\n- On completing a task, summarize the changes made, the current state of the workspace, and suggest logical next verification steps for the user.";
|
|
6
|
+
export declare const COMPACTION_THRESHOLD_TOKENS = 15000;
|
|
7
|
+
export declare const COMPACTION_KEEP_RECENT = 5;
|
|
8
|
+
export declare const FALLBACK_MODELS: string[];
|
|
9
|
+
export declare const SUBAGENT_MAX_ITERATIONS = 10;
|
|
10
|
+
export declare const SUBAGENT_TOOLS: string[];
|
|
11
|
+
export declare function buildSystemPrompt(cwd: string): string;
|
|
12
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,UAAU,UAAU,CAAC;AAClC,eAAO,MAAM,KAAK,0BAA0B,CAAC;AAC7C,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,WAAW,aAAgE,CAAC;AACzF,eAAO,MAAM,aAAa,uhFAqBwH,CAAC;AACnJ,eAAO,MAAM,2BAA2B,QAAQ,CAAC;AACjD,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,eAAe,UAA+G,CAAC;AAC5I,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,cAAc,UAA4B,CAAC;AACxD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAErD"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export const AGENT_NAME = 'FORGE';
|
|
2
|
+
export const MODEL = 'qwen/qwen3.8-27b:free';
|
|
3
|
+
export const MAX_ITERATIONS = 20;
|
|
4
|
+
export const RISKY_TOOLS = new Set(['run_bash', 'write_file', 'replace_string_in_file']);
|
|
5
|
+
export const SYSTEM_PROMPT = `You are ${AGENT_NAME}, an expert autonomous software engineering agent operating directly in the user's local terminal environment. Your goal is to solve programming tasks, fix bugs, refactor code, and analyze repositories efficiently and safely.
|
|
6
|
+
|
|
7
|
+
### OPERATIONAL PRINCIPLES & MINDSET
|
|
8
|
+
1. **Be Concise & Direct:** You operate in a command-line interface. Minimize fluff, polite pleasantries, and unnecessary conversational filler. Focus on action and execution.
|
|
9
|
+
2. **Context-Aware:** You are provided with continuous session history across execution steps. Maintain high coherence with previous user instructions and tool outputs.
|
|
10
|
+
3. **Verify Before Action:** Inspect the existing codebase structure before writing code or running shell commands. Do not guess file paths, implementation details, or framework configurations.
|
|
11
|
+
|
|
12
|
+
### TOOL USAGE PROTOCOL
|
|
13
|
+
1. **Gather Context First:** Use read-only, discovery tools (e.g., file readers, search/grep, directory listings) to understand the project context before performing modifications.
|
|
14
|
+
2. **Batch & Sequence Logically:** Execute tools in logical, dependent order. Inspect files -> Modify code -> Run tests/lints to verify changes.
|
|
15
|
+
3. **Handle Errors Gracefully:** If a tool execution fails or a command throws an error, do not panic or repeat the exact same failing action. Read the stderr/error log carefully, adjust your strategy, and attempt a corrective step.
|
|
16
|
+
4. **Tool Restrictions:** Never execute destructive or non-reversible actions (e.g., recursive deletions, git hard resets, system-level package updates) without explicit confirmation.
|
|
17
|
+
|
|
18
|
+
### CODE MODIFICATION & QUALITY STANDARDS
|
|
19
|
+
1. **Minimal, Precise Changes:** Prefer targeted edits over rewriting whole files unless requested or necessary. Do not delete unrelated comments, dead code, or existing functionality without reason.
|
|
20
|
+
2. **Adhere to Code Conventions:** Match the existing codebase style, naming conventions, formatting rules, and type strictness (e.g., TypeScript interfaces, ESLint guidelines).
|
|
21
|
+
3. **Self-Correction & Verification:** After making edits, verify your work whenever tools permit (e.g., run standard test suites, build checks, or type checking commands).
|
|
22
|
+
|
|
23
|
+
### OUTPUT FORMATTING & STYLE
|
|
24
|
+
- Present code blocks with explicit language syntax highlighting tags.
|
|
25
|
+
- Keep technical commentary brief—explain *why* a change was made rather than describing mechanical syntax edits line-by-line.
|
|
26
|
+
- On completing a task, summarize the changes made, the current state of the workspace, and suggest logical next verification steps for the user.`;
|
|
27
|
+
export const COMPACTION_THRESHOLD_TOKENS = 15000;
|
|
28
|
+
export const COMPACTION_KEEP_RECENT = 5;
|
|
29
|
+
export const FALLBACK_MODELS = ['nvidia/nemotron-3.5-lightning:free', 'dots-studio/dots-3-note-preview:free', 'poolside/laguna-s-2.1:free'];
|
|
30
|
+
export const SUBAGENT_MAX_ITERATIONS = 10;
|
|
31
|
+
export const SUBAGENT_TOOLS = ["read_file", "run_bash"];
|
|
32
|
+
export function buildSystemPrompt(cwd) {
|
|
33
|
+
return `${SYSTEM_PROMPT}\n\nYou are operating in the directory: ${cwd}\nAll file paths you use should be relative to this directory unless the user specifies an absolute path.`;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,CAAC;AAClC,MAAM,CAAC,MAAM,KAAK,GAAG,uBAAuB,CAAC;AAC7C,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,wBAAwB,CAAC,CAAC,CAAC;AACzF,MAAM,CAAC,MAAM,aAAa,GAAG,WAAW,UAAU;;;;;;;;;;;;;;;;;;;;;kJAqBgG,CAAC;AACnJ,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,CAAC;AACjD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACxC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,oCAAoC,EAAE,sCAAsC,EAAE,4BAA4B,CAAC,CAAC;AAC5I,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAC1C,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AACxD,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,OAAO,GAAG,aAAa,2CAA2C,GAAG,2GAA2G,CAAC;AACnL,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Message } from '../types/index.js';
|
|
2
|
+
export type DisplayEntry = {
|
|
3
|
+
id: number;
|
|
4
|
+
kind: 'user' | 'reasoning' | 'tool_call' | 'tool_result' | 'assistant' | 'info';
|
|
5
|
+
text: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function messagesToEntries(messages: Message[], startId?: number): DisplayEntry[];
|
|
8
|
+
//# sourceMappingURL=converter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"converter.d.ts","sourceRoot":"","sources":["../../src/core/converter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,aAAa,GAAG,WAAW,GAAG,MAAM,CAAC;IAChF,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,SAAI,GAAG,YAAY,EAAE,CA2ClF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export function messagesToEntries(messages, startId = 0) {
|
|
2
|
+
const entries = [];
|
|
3
|
+
let id = startId;
|
|
4
|
+
for (const msg of messages) {
|
|
5
|
+
// Skip System Prompts
|
|
6
|
+
if (msg.role === 'system')
|
|
7
|
+
continue;
|
|
8
|
+
// Detect Context Compaction summaries
|
|
9
|
+
if (msg.role === 'user' && typeof msg.content === 'string' && msg.content.startsWith('[SYSTEM SUMMARY]:')) {
|
|
10
|
+
entries.push({
|
|
11
|
+
id: id++,
|
|
12
|
+
kind: 'info',
|
|
13
|
+
text: `Context Compacted: ${msg.content.replace('[SYSTEM SUMMARY]:', '').trim()}`,
|
|
14
|
+
});
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
if (msg.role === 'user' && msg.content) {
|
|
18
|
+
entries.push({ id: id++, kind: 'user', text: msg.content });
|
|
19
|
+
}
|
|
20
|
+
if (msg.role === 'assistant') {
|
|
21
|
+
if (msg.reasoning) {
|
|
22
|
+
entries.push({ id: id++, kind: 'reasoning', text: msg.reasoning });
|
|
23
|
+
}
|
|
24
|
+
if (msg.content) {
|
|
25
|
+
entries.push({ id: id++, kind: 'assistant', text: msg.content });
|
|
26
|
+
}
|
|
27
|
+
for (const call of msg.toolCalls ?? []) {
|
|
28
|
+
entries.push({
|
|
29
|
+
id: id++,
|
|
30
|
+
kind: 'tool_call',
|
|
31
|
+
text: `${call.function.name}(${call.function.arguments})`,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (msg.role === 'tool' && msg.content) {
|
|
36
|
+
entries.push({ id: id++, kind: 'tool_result', text: msg.content });
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return entries;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"converter.js","sourceRoot":"","sources":["../../src/core/converter.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,iBAAiB,CAAC,QAAmB,EAAE,OAAO,GAAG,CAAC;IAChE,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,IAAI,EAAE,GAAG,OAAO,CAAC;IAEjB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,sBAAsB;QACtB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS;QAEpC,sCAAsC;QACtC,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC1G,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,EAAE,EAAE;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,sBAAsB,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE;aAClF,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC7B,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBAClB,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;YACrE,CAAC;YACD,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACnE,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;gBACvC,OAAO,CAAC,IAAI,CAAC;oBACX,EAAE,EAAE,EAAE,EAAE;oBACR,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG;iBAC1D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { getClient } from './client.js';
|
|
2
|
+
export { AGENT_NAME, MODEL, MAX_ITERATIONS, RISKY_TOOLS, SYSTEM_PROMPT, COMPACTION_THRESHOLD_TOKENS, COMPACTION_KEEP_RECENT, FALLBACK_MODELS, SUBAGENT_MAX_ITERATIONS, SUBAGENT_TOOLS, } from './constants.js';
|
|
3
|
+
export { compactIfNeeded, DEFAULT_COMPACTION_CONFIG, type CompactionConfig } from './compaction.js';
|
|
4
|
+
export { createStateAccessor, listSessions, getLatestSessionId, stateToMessages } from './state.js';
|
|
5
|
+
export type { SessionSummary } from './state.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACL,UAAU,EACV,KAAK,EACL,cAAc,EACd,WAAW,EACX,aAAa,EACb,2BAA2B,EAC3B,sBAAsB,EACtB,eAAe,EACf,uBAAuB,EACvB,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACpG,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { getClient } from './client.js';
|
|
2
|
+
export { AGENT_NAME, MODEL, MAX_ITERATIONS, RISKY_TOOLS, SYSTEM_PROMPT, COMPACTION_THRESHOLD_TOKENS, COMPACTION_KEEP_RECENT, FALLBACK_MODELS, SUBAGENT_MAX_ITERATIONS, SUBAGENT_TOOLS, } from './constants.js';
|
|
3
|
+
export { compactIfNeeded, DEFAULT_COMPACTION_CONFIG } from './compaction.js';
|
|
4
|
+
export { createStateAccessor, listSessions, getLatestSessionId, stateToMessages } from './state.js';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACL,UAAU,EACV,KAAK,EACL,cAAc,EACd,WAAW,EACX,aAAa,EACb,2BAA2B,EAC3B,sBAAsB,EACtB,eAAe,EACf,uBAAuB,EACvB,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAyB,MAAM,iBAAiB,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { StateAccessor, ConversationState } from '@openrouter/agent';
|
|
2
|
+
import type { Message } from '../types/index.js';
|
|
3
|
+
type SessionMetaEntry = {
|
|
4
|
+
id: string;
|
|
5
|
+
title: string;
|
|
6
|
+
createdAt: number;
|
|
7
|
+
};
|
|
8
|
+
export type SessionSummary = {
|
|
9
|
+
id: string;
|
|
10
|
+
updatedAt: number;
|
|
11
|
+
createdAt: number;
|
|
12
|
+
status: string;
|
|
13
|
+
};
|
|
14
|
+
export declare function createStateAccessor(sessionId: string, compactionConfig?: import("./compaction.js").CompactionConfig): StateAccessor;
|
|
15
|
+
export declare function listSessions(): SessionSummary[];
|
|
16
|
+
export declare function getLatestSessionId(): string | null;
|
|
17
|
+
export declare function stateToMessages(state: ConversationState): Message[];
|
|
18
|
+
export { compactIfNeeded, DEFAULT_COMPACTION_CONFIG, type CompactionConfig } from './compaction.js';
|
|
19
|
+
export declare function saveSessionTitle(sessionId: string, title: string): void;
|
|
20
|
+
export declare function getSessionTitle(sessionId: string): string | null;
|
|
21
|
+
export declare function listSessionMeta(): SessionMetaEntry[];
|
|
22
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,KAAK,gBAAgB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAUzE,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAcF,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,gBAAgB,6CAA4B,GAC3C,aAAa,CAmBf;AAED,wBAAgB,YAAY,IAAI,cAAc,EAAE,CAoB/C;AAED,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAGlD;AA+DD,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,EAAE,CAcnE;AAED,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAapG,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAMhE;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEhE;AAED,wBAAgB,eAAe,IAAI,gBAAgB,EAAE,CAEpD"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { compactIfNeeded, DEFAULT_COMPACTION_CONFIG } from './compaction.js';
|
|
4
|
+
const META_SESSION_DIR = path.join(process.cwd(), '.forge', 'meta');
|
|
5
|
+
const ensureMetaDir = () => {
|
|
6
|
+
if (!fs.existsSync(META_SESSION_DIR)) {
|
|
7
|
+
fs.mkdirSync(META_SESSION_DIR, { recursive: true });
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
ensureMetaDir();
|
|
11
|
+
const META_FILE = path.join(META_SESSION_DIR, 'meta.json');
|
|
12
|
+
const SESSIONS_DIR = path.join(process.cwd(), '.agent-sessions');
|
|
13
|
+
function ensureDir() {
|
|
14
|
+
if (!fs.existsSync(SESSIONS_DIR)) {
|
|
15
|
+
fs.mkdirSync(SESSIONS_DIR, { recursive: true });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function getStatePath(sessionId) {
|
|
19
|
+
return path.join(SESSIONS_DIR, `${sessionId}.state.json`);
|
|
20
|
+
}
|
|
21
|
+
export function createStateAccessor(sessionId, compactionConfig = DEFAULT_COMPACTION_CONFIG) {
|
|
22
|
+
ensureDir();
|
|
23
|
+
const statePath = getStatePath(sessionId);
|
|
24
|
+
return {
|
|
25
|
+
load: async () => {
|
|
26
|
+
if (!fs.existsSync(statePath))
|
|
27
|
+
return null;
|
|
28
|
+
try {
|
|
29
|
+
const data = fs.readFileSync(statePath, 'utf-8');
|
|
30
|
+
return JSON.parse(data);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
save: async (state) => {
|
|
37
|
+
const compacted = await compactIfNeeded(state, compactionConfig);
|
|
38
|
+
fs.writeFileSync(statePath, JSON.stringify(compacted, null, 2));
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export function listSessions() {
|
|
43
|
+
ensureDir();
|
|
44
|
+
const files = fs.readdirSync(SESSIONS_DIR).filter(f => f.endsWith('.state.json'));
|
|
45
|
+
const summaries = [];
|
|
46
|
+
for (const file of files) {
|
|
47
|
+
try {
|
|
48
|
+
const state = JSON.parse(fs.readFileSync(path.join(SESSIONS_DIR, file), 'utf-8'));
|
|
49
|
+
summaries.push({
|
|
50
|
+
id: state.id,
|
|
51
|
+
updatedAt: state.updatedAt,
|
|
52
|
+
createdAt: state.createdAt,
|
|
53
|
+
status: state.status,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return summaries.sort((a, b) => b.updatedAt - a.updatedAt);
|
|
61
|
+
}
|
|
62
|
+
export function getLatestSessionId() {
|
|
63
|
+
const sessions = listSessions();
|
|
64
|
+
return sessions[0]?.id ?? null;
|
|
65
|
+
}
|
|
66
|
+
function extractTextContent(content) {
|
|
67
|
+
if (typeof content === 'string')
|
|
68
|
+
return content;
|
|
69
|
+
if (Array.isArray(content)) {
|
|
70
|
+
return content.map(c => extractTextContent(c)).join('');
|
|
71
|
+
}
|
|
72
|
+
if (content && typeof content === 'object' && 'text' in content) {
|
|
73
|
+
return String(content.text);
|
|
74
|
+
}
|
|
75
|
+
return '';
|
|
76
|
+
}
|
|
77
|
+
function messageItemToLegacy(msg) {
|
|
78
|
+
const role = msg.role;
|
|
79
|
+
if (role === 'user') {
|
|
80
|
+
return {
|
|
81
|
+
role: 'user',
|
|
82
|
+
content: extractTextContent(msg.content ?? ''),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
if (role === 'assistant') {
|
|
86
|
+
const toolCalls = msg.toolCalls?.map(tc => ({
|
|
87
|
+
id: tc.id,
|
|
88
|
+
type: 'function',
|
|
89
|
+
function: { name: tc.name, arguments: tc.arguments },
|
|
90
|
+
}));
|
|
91
|
+
return {
|
|
92
|
+
role: 'assistant',
|
|
93
|
+
content: msg.content ? extractTextContent(msg.content) : null,
|
|
94
|
+
reasoning: msg.reasoning,
|
|
95
|
+
toolCalls: toolCalls?.length ? toolCalls : undefined,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
if (role === 'tool') {
|
|
99
|
+
return {
|
|
100
|
+
role: 'tool',
|
|
101
|
+
toolCallId: msg.callId ?? '',
|
|
102
|
+
content: extractTextContent(msg.output ?? ''),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
if (role === 'system' || role === 'developer') {
|
|
106
|
+
return {
|
|
107
|
+
role: 'system',
|
|
108
|
+
content: extractTextContent(msg.content ?? ''),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
if (msg.type === 'reasoning') {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
export function stateToMessages(state) {
|
|
117
|
+
const messages = [];
|
|
118
|
+
const stateAny = state;
|
|
119
|
+
if (stateAny.messages) {
|
|
120
|
+
for (const msg of stateAny.messages) {
|
|
121
|
+
const legacy = messageItemToLegacy(msg);
|
|
122
|
+
if (legacy) {
|
|
123
|
+
messages.push(legacy);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return messages;
|
|
128
|
+
}
|
|
129
|
+
export { compactIfNeeded, DEFAULT_COMPACTION_CONFIG } from './compaction.js';
|
|
130
|
+
function readMeta() {
|
|
131
|
+
if (!fs.existsSync(META_FILE))
|
|
132
|
+
return [];
|
|
133
|
+
try {
|
|
134
|
+
return JSON.parse(fs.readFileSync(META_FILE, 'utf-8'));
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
return [];
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
export function saveSessionTitle(sessionId, title) {
|
|
141
|
+
const meta = readMeta();
|
|
142
|
+
if (!meta.some(m => m.id === sessionId)) {
|
|
143
|
+
meta.push({ id: sessionId, title, createdAt: Date.now() });
|
|
144
|
+
fs.writeFileSync(META_FILE, JSON.stringify(meta, null, 2));
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
export function getSessionTitle(sessionId) {
|
|
148
|
+
return readMeta().find(m => m.id === sessionId)?.title ?? null;
|
|
149
|
+
}
|
|
150
|
+
export function listSessionMeta() {
|
|
151
|
+
return readMeta();
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export type OnConfirm = (description: string) => Promise<boolean>;
|
|
3
|
+
export declare function createTools(onConfirm: OnConfirm): (import("@openrouter/agent").ToolWithExecute<z.ZodObject<{
|
|
4
|
+
command: z.ZodString;
|
|
5
|
+
}, z.core.$strip>, z.core.$ZodType<{
|
|
6
|
+
error: string;
|
|
7
|
+
output?: undefined;
|
|
8
|
+
} | {
|
|
9
|
+
error?: undefined;
|
|
10
|
+
output: string;
|
|
11
|
+
}, unknown, z.core.$ZodTypeInternals<{
|
|
12
|
+
error: string;
|
|
13
|
+
output?: undefined;
|
|
14
|
+
} | {
|
|
15
|
+
error?: undefined;
|
|
16
|
+
output: string;
|
|
17
|
+
}, unknown>>, Record<string, unknown>, z.core.$ZodObject<Readonly<{
|
|
18
|
+
[k: string]: z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
19
|
+
}>, z.core.$ZodObjectConfig>, "run_bash"> | import("@openrouter/agent").ToolWithExecute<z.ZodObject<{
|
|
20
|
+
path: z.ZodString;
|
|
21
|
+
}, z.core.$strip>, z.core.$ZodType<{
|
|
22
|
+
content: string;
|
|
23
|
+
}, unknown, z.core.$ZodTypeInternals<{
|
|
24
|
+
content: string;
|
|
25
|
+
}, unknown>>, Record<string, unknown>, z.core.$ZodObject<Readonly<{
|
|
26
|
+
[k: string]: z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
27
|
+
}>, z.core.$ZodObjectConfig>, "read_file"> | import("@openrouter/agent").ToolWithExecute<z.ZodObject<{
|
|
28
|
+
path: z.ZodString;
|
|
29
|
+
content: z.ZodString;
|
|
30
|
+
}, z.core.$strip>, z.core.$ZodType<{
|
|
31
|
+
error: string;
|
|
32
|
+
result?: undefined;
|
|
33
|
+
} | {
|
|
34
|
+
error?: undefined;
|
|
35
|
+
result: string;
|
|
36
|
+
}, unknown, z.core.$ZodTypeInternals<{
|
|
37
|
+
error: string;
|
|
38
|
+
result?: undefined;
|
|
39
|
+
} | {
|
|
40
|
+
error?: undefined;
|
|
41
|
+
result: string;
|
|
42
|
+
}, unknown>>, Record<string, unknown>, z.core.$ZodObject<Readonly<{
|
|
43
|
+
[k: string]: z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
44
|
+
}>, z.core.$ZodObjectConfig>, "write_file"> | import("@openrouter/agent").ToolWithExecute<z.ZodObject<{
|
|
45
|
+
path: z.ZodString;
|
|
46
|
+
stringToReplace: z.ZodString;
|
|
47
|
+
newString: z.ZodString;
|
|
48
|
+
}, z.core.$strip>, z.core.$ZodType<{
|
|
49
|
+
result?: undefined;
|
|
50
|
+
error: string;
|
|
51
|
+
} | {
|
|
52
|
+
error?: undefined;
|
|
53
|
+
result: string;
|
|
54
|
+
}, unknown, z.core.$ZodTypeInternals<{
|
|
55
|
+
result?: undefined;
|
|
56
|
+
error: string;
|
|
57
|
+
} | {
|
|
58
|
+
error?: undefined;
|
|
59
|
+
result: string;
|
|
60
|
+
}, unknown>>, Record<string, unknown>, z.core.$ZodObject<Readonly<{
|
|
61
|
+
[k: string]: z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
62
|
+
}>, z.core.$ZodObjectConfig>, "replace_string_in_file"> | import("@openrouter/agent").ToolWithExecute<z.ZodObject<{
|
|
63
|
+
task: z.ZodString;
|
|
64
|
+
}, z.core.$strip>, z.core.$ZodType<{
|
|
65
|
+
result: string;
|
|
66
|
+
}, unknown, z.core.$ZodTypeInternals<{
|
|
67
|
+
result: string;
|
|
68
|
+
}, unknown>>, Record<string, unknown>, z.core.$ZodObject<Readonly<{
|
|
69
|
+
[k: string]: z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
70
|
+
}>, z.core.$ZodObjectConfig>, "spawn_sub_agent"> | import("@openrouter/agent").ToolWithExecute<z.ZodObject<{
|
|
71
|
+
pattern: z.ZodString;
|
|
72
|
+
path: z.ZodOptional<z.ZodString>;
|
|
73
|
+
maxResults: z.ZodOptional<z.ZodNumber>;
|
|
74
|
+
}, z.core.$strip>, z.core.$ZodType<{
|
|
75
|
+
result: string;
|
|
76
|
+
}, unknown, z.core.$ZodTypeInternals<{
|
|
77
|
+
result: string;
|
|
78
|
+
}, unknown>>, Record<string, unknown>, z.core.$ZodObject<Readonly<{
|
|
79
|
+
[k: string]: z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
80
|
+
}>, z.core.$ZodObjectConfig>, "search_code">)[];
|
|
81
|
+
//# sourceMappingURL=definitions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/tools/definitions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,MAAM,SAAS,GAAG,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAElE,wBAAgB,WAAW,CAAC,SAAS,EAAE,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gDA6F/C"}
|