background-agents 0.1.1 → 0.1.2
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 +173 -241
- package/dist/agents/claude/index.d.ts +11 -0
- package/dist/agents/claude/index.d.ts.map +1 -0
- package/dist/agents/claude/index.js +78 -0
- package/dist/agents/claude/index.js.map +1 -0
- package/dist/agents/claude/parser.d.ts +16 -0
- package/dist/agents/claude/parser.d.ts.map +1 -0
- package/dist/agents/claude/parser.js +87 -0
- package/dist/agents/claude/parser.js.map +1 -0
- package/dist/agents/claude/tools.d.ts +7 -0
- package/dist/agents/claude/tools.d.ts.map +1 -0
- package/dist/agents/claude/tools.js +15 -0
- package/dist/agents/claude/tools.js.map +1 -0
- package/dist/agents/codex/index.d.ts +11 -0
- package/dist/agents/codex/index.d.ts.map +1 -0
- package/dist/agents/codex/index.js +60 -0
- package/dist/agents/codex/index.js.map +1 -0
- package/dist/agents/codex/parser.d.ts +12 -0
- package/dist/agents/codex/parser.d.ts.map +1 -0
- package/dist/agents/codex/parser.js +108 -0
- package/dist/agents/codex/parser.js.map +1 -0
- package/dist/agents/codex/tools.d.ts +11 -0
- package/dist/agents/codex/tools.d.ts.map +1 -0
- package/dist/agents/codex/tools.js +40 -0
- package/dist/agents/codex/tools.js.map +1 -0
- package/dist/agents/eliza/bundle-content.d.ts +6 -0
- package/dist/agents/eliza/bundle-content.d.ts.map +1 -0
- package/dist/agents/eliza/bundle-content.js +7 -0
- package/dist/agents/eliza/bundle-content.js.map +1 -0
- package/dist/agents/eliza/cli.bundle.js +579 -0
- package/dist/agents/eliza/cli.d.ts +10 -0
- package/dist/agents/eliza/cli.d.ts.map +1 -0
- package/dist/agents/eliza/cli.js +342 -0
- package/dist/agents/eliza/cli.js.map +1 -0
- package/dist/agents/eliza/index.d.ts +22 -0
- package/dist/agents/eliza/index.d.ts.map +1 -0
- package/dist/agents/eliza/index.js +54 -0
- package/dist/agents/eliza/index.js.map +1 -0
- package/dist/agents/eliza/parser.d.ts +16 -0
- package/dist/agents/eliza/parser.d.ts.map +1 -0
- package/dist/agents/eliza/parser.js +67 -0
- package/dist/agents/eliza/parser.js.map +1 -0
- package/dist/agents/eliza/patterns.d.ts +41 -0
- package/dist/agents/eliza/patterns.d.ts.map +1 -0
- package/dist/agents/eliza/patterns.js +259 -0
- package/dist/agents/eliza/patterns.js.map +1 -0
- package/dist/agents/eliza/tools.d.ts +7 -0
- package/dist/agents/eliza/tools.d.ts.map +1 -0
- package/dist/agents/eliza/tools.js +14 -0
- package/dist/agents/eliza/tools.js.map +1 -0
- package/dist/agents/gemini/index.d.ts +11 -0
- package/dist/agents/gemini/index.d.ts.map +1 -0
- package/dist/agents/gemini/index.js +46 -0
- package/dist/agents/gemini/index.js.map +1 -0
- package/dist/agents/gemini/parser.d.ts +31 -0
- package/dist/agents/gemini/parser.d.ts.map +1 -0
- package/dist/agents/gemini/parser.js +106 -0
- package/dist/agents/gemini/parser.js.map +1 -0
- package/dist/agents/gemini/tools.d.ts +7 -0
- package/dist/agents/gemini/tools.d.ts.map +1 -0
- package/dist/agents/gemini/tools.js +23 -0
- package/dist/agents/gemini/tools.js.map +1 -0
- package/dist/agents/goose/index.d.ts +11 -0
- package/dist/agents/goose/index.d.ts.map +1 -0
- package/dist/agents/goose/index.js +73 -0
- package/dist/agents/goose/index.js.map +1 -0
- package/dist/agents/goose/parser.d.ts +24 -0
- package/dist/agents/goose/parser.d.ts.map +1 -0
- package/dist/agents/goose/parser.js +86 -0
- package/dist/agents/goose/parser.js.map +1 -0
- package/dist/agents/goose/tools.d.ts +10 -0
- package/dist/agents/goose/tools.d.ts.map +1 -0
- package/dist/agents/goose/tools.js +30 -0
- package/dist/agents/goose/tools.js.map +1 -0
- package/dist/agents/index.d.ts +27 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +46 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/opencode/index.d.ts +12 -0
- package/dist/agents/opencode/index.d.ts.map +1 -0
- package/dist/agents/opencode/index.js +53 -0
- package/dist/agents/opencode/index.js.map +1 -0
- package/dist/agents/opencode/parser.d.ts +15 -0
- package/dist/agents/opencode/parser.d.ts.map +1 -0
- package/dist/agents/opencode/parser.js +71 -0
- package/dist/agents/opencode/parser.js.map +1 -0
- package/dist/agents/opencode/tools.d.ts +7 -0
- package/dist/agents/opencode/tools.d.ts.map +1 -0
- package/dist/agents/opencode/tools.js +10 -0
- package/dist/agents/opencode/tools.js.map +1 -0
- package/dist/agents/openhands/index.d.ts +17 -0
- package/dist/agents/openhands/index.d.ts.map +1 -0
- package/dist/agents/openhands/index.js +67 -0
- package/dist/agents/openhands/index.js.map +1 -0
- package/dist/agents/openhands/parser.d.ts +16 -0
- package/dist/agents/openhands/parser.d.ts.map +1 -0
- package/dist/agents/openhands/parser.js +93 -0
- package/dist/agents/openhands/parser.js.map +1 -0
- package/dist/agents/openhands/tools.d.ts +7 -0
- package/dist/agents/openhands/tools.d.ts.map +1 -0
- package/dist/agents/openhands/tools.js +24 -0
- package/dist/agents/openhands/tools.js.map +1 -0
- package/dist/agents/pi/index.d.ts +14 -0
- package/dist/agents/pi/index.d.ts.map +1 -0
- package/dist/agents/pi/index.js +54 -0
- package/dist/agents/pi/index.js.map +1 -0
- package/dist/agents/pi/parser.d.ts +21 -0
- package/dist/agents/pi/parser.d.ts.map +1 -0
- package/dist/agents/pi/parser.js +91 -0
- package/dist/agents/pi/parser.js.map +1 -0
- package/dist/agents/pi/tools.d.ts +8 -0
- package/dist/agents/pi/tools.d.ts.map +1 -0
- package/dist/agents/pi/tools.js +16 -0
- package/dist/agents/pi/tools.js.map +1 -0
- package/dist/agents/picocode/index.d.ts +18 -0
- package/dist/agents/picocode/index.d.ts.map +1 -0
- package/dist/agents/picocode/index.js +68 -0
- package/dist/agents/picocode/index.js.map +1 -0
- package/dist/agents/picocode/parser.d.ts +19 -0
- package/dist/agents/picocode/parser.d.ts.map +1 -0
- package/dist/agents/picocode/parser.js +104 -0
- package/dist/agents/picocode/parser.js.map +1 -0
- package/dist/agents/picocode/tools.d.ts +9 -0
- package/dist/agents/picocode/tools.d.ts.map +1 -0
- package/dist/agents/picocode/tools.js +27 -0
- package/dist/agents/picocode/tools.js.map +1 -0
- package/dist/background/index.d.ts +6 -0
- package/dist/background/index.d.ts.map +1 -0
- package/dist/background/index.js +5 -0
- package/dist/background/index.js.map +1 -0
- package/dist/background/session.d.ts +47 -0
- package/dist/background/session.d.ts.map +1 -0
- package/dist/background/session.js +481 -0
- package/dist/background/session.js.map +1 -0
- package/dist/background/types.d.ts +55 -0
- package/dist/background/types.d.ts.map +1 -0
- package/dist/background/types.js +5 -0
- package/dist/background/types.js.map +1 -0
- package/dist/core/agent.d.ts +95 -0
- package/dist/core/agent.d.ts.map +1 -0
- package/dist/core/agent.js +8 -0
- package/dist/core/agent.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/registry.d.ts +48 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +68 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/tools.d.ts +31 -0
- package/dist/core/tools.d.ts.map +1 -0
- package/dist/core/tools.js +82 -0
- package/dist/core/tools.js.map +1 -0
- package/dist/debug.js +1 -1
- package/dist/debug.js.map +1 -1
- package/dist/factory.d.ts +1 -4
- package/dist/factory.d.ts.map +1 -1
- package/dist/factory.js +1 -4
- package/dist/factory.js.map +1 -1
- package/dist/index.d.ts +29 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +41 -14
- package/dist/index.js.map +1 -1
- package/dist/providers/base.d.ts +45 -18
- package/dist/providers/base.d.ts.map +1 -1
- package/dist/providers/base.js +228 -265
- package/dist/providers/base.js.map +1 -1
- package/dist/providers/gemini.d.ts.map +1 -1
- package/dist/providers/gemini.js +18 -8
- package/dist/providers/gemini.js.map +1 -1
- package/dist/sandbox/daytona.d.ts +5 -1
- package/dist/sandbox/daytona.d.ts.map +1 -1
- package/dist/sandbox/daytona.js +157 -214
- package/dist/sandbox/daytona.js.map +1 -1
- package/dist/sandbox/index.d.ts +3 -3
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +2 -2
- package/dist/sandbox/index.js.map +1 -1
- package/dist/session.d.ts +62 -51
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +94 -90
- package/dist/session.js.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -2
- package/dist/types/index.js.map +1 -1
- package/dist/types/provider.d.ts +37 -94
- package/dist/types/provider.d.ts.map +1 -1
- package/dist/types/provider.js +3 -0
- package/dist/types/provider.js.map +1 -1
- package/dist/utils/index.d.ts +2 -3
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -3
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/install.d.ts +12 -2
- package/dist/utils/install.d.ts.map +1 -1
- package/dist/utils/install.js +40 -4
- package/dist/utils/install.js.map +1 -1
- package/package.json +24 -13
- package/src/index.ts +156 -0
- package/dist/sandbox/daytona-ssh.d.ts +0 -9
- package/dist/sandbox/daytona-ssh.d.ts.map +0 -1
- package/dist/sandbox/daytona-ssh.js +0 -113
- package/dist/sandbox/daytona-ssh.js.map +0 -1
- package/dist/utils/session.d.ts +0 -17
- package/dist/utils/session.d.ts.map +0 -1
- package/dist/utils/session.js +0 -59
- package/dist/utils/session.js.map +0 -1
- package/next.config.codeagentsdk.cjs +0 -22
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Goose CLI output parser
|
|
3
|
+
*
|
|
4
|
+
* Pure function for parsing Goose CLI stream-json output.
|
|
5
|
+
* Goose outputs newline-delimited JSON events.
|
|
6
|
+
*
|
|
7
|
+
* Actual format discovered from running goose:
|
|
8
|
+
* - {"type":"message","message":{...}} for messages
|
|
9
|
+
* - {"type":"complete","total_tokens":...} for completion
|
|
10
|
+
* - Content blocks use {"type":"text","text":"..."} format
|
|
11
|
+
* - Tool calls use {"type":"tool_use",...} and {"type":"tool_result",...}
|
|
12
|
+
*/
|
|
13
|
+
import type { Event } from "../../types/events";
|
|
14
|
+
import type { ParseContext } from "../../core/agent";
|
|
15
|
+
/**
|
|
16
|
+
* Parse a line of Goose CLI output into event(s).
|
|
17
|
+
*
|
|
18
|
+
* @param line - Raw line from CLI output
|
|
19
|
+
* @param toolMappings - Tool name mappings for this agent
|
|
20
|
+
* @param context - Parse context for session tracking
|
|
21
|
+
* @returns Event, array of events, or null if line should be ignored
|
|
22
|
+
*/
|
|
23
|
+
export declare function parseGooseLine(line: string, toolMappings: Record<string, string>, context?: ParseContext): Event | Event[] | null;
|
|
24
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/agents/goose/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AA+DpD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,OAAO,CAAC,EAAE,YAAY,GACrB,KAAK,GAAG,KAAK,EAAE,GAAG,IAAI,CA+ExB"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Goose CLI output parser
|
|
3
|
+
*
|
|
4
|
+
* Pure function for parsing Goose CLI stream-json output.
|
|
5
|
+
* Goose outputs newline-delimited JSON events.
|
|
6
|
+
*
|
|
7
|
+
* Actual format discovered from running goose:
|
|
8
|
+
* - {"type":"message","message":{...}} for messages
|
|
9
|
+
* - {"type":"complete","total_tokens":...} for completion
|
|
10
|
+
* - Content blocks use {"type":"text","text":"..."} format
|
|
11
|
+
* - Tool calls use {"type":"tool_use",...} and {"type":"tool_result",...}
|
|
12
|
+
*/
|
|
13
|
+
import { createToolStartEvent } from "../../core/tools";
|
|
14
|
+
import { safeJsonParse } from "../../utils/json";
|
|
15
|
+
/**
|
|
16
|
+
* Parse a line of Goose CLI output into event(s).
|
|
17
|
+
*
|
|
18
|
+
* @param line - Raw line from CLI output
|
|
19
|
+
* @param toolMappings - Tool name mappings for this agent
|
|
20
|
+
* @param context - Parse context for session tracking
|
|
21
|
+
* @returns Event, array of events, or null if line should be ignored
|
|
22
|
+
*/
|
|
23
|
+
export function parseGooseLine(line, toolMappings, context) {
|
|
24
|
+
// Goose outputs plain JSON, but handle SSE "data: " prefix if present
|
|
25
|
+
const trimmedLine = line.startsWith("data: ") ? line.slice(6) : line;
|
|
26
|
+
const json = safeJsonParse(trimmedLine);
|
|
27
|
+
if (!json) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
// Message event containing role and content blocks
|
|
31
|
+
if (json.type === "message" && json.message) {
|
|
32
|
+
const msg = json.message;
|
|
33
|
+
const events = [];
|
|
34
|
+
// Emit session event on first assistant message with an ID
|
|
35
|
+
// Goose doesn't have a dedicated session init event, so we use the message ID
|
|
36
|
+
if (context &&
|
|
37
|
+
msg.role === "assistant" &&
|
|
38
|
+
msg.id &&
|
|
39
|
+
!context.state.sessionEmitted) {
|
|
40
|
+
context.state.sessionEmitted = true;
|
|
41
|
+
// Use the message ID as the session ID (or generate one from timestamp)
|
|
42
|
+
const sessionId = msg.id || `goose-${msg.created}`;
|
|
43
|
+
context.sessionId = sessionId;
|
|
44
|
+
events.push({ type: "session", id: sessionId });
|
|
45
|
+
}
|
|
46
|
+
for (const block of msg.content) {
|
|
47
|
+
// Text content from assistant
|
|
48
|
+
if (block.type === "text" && msg.role === "assistant") {
|
|
49
|
+
events.push({ type: "token", text: block.text });
|
|
50
|
+
}
|
|
51
|
+
// Tool use (tool call starting)
|
|
52
|
+
if (block.type === "tool_use") {
|
|
53
|
+
events.push(createToolStartEvent(block.name, block.input, toolMappings));
|
|
54
|
+
}
|
|
55
|
+
// Tool result (tool call completed)
|
|
56
|
+
if (block.type === "tool_result") {
|
|
57
|
+
let output;
|
|
58
|
+
if (typeof block.content === "string") {
|
|
59
|
+
output = block.content;
|
|
60
|
+
}
|
|
61
|
+
else if (Array.isArray(block.content)) {
|
|
62
|
+
const textParts = block.content
|
|
63
|
+
.filter((part) => part.type === "text" && part.text)
|
|
64
|
+
.map((part) => part.text);
|
|
65
|
+
output = textParts.join("\n") || undefined;
|
|
66
|
+
}
|
|
67
|
+
if (block.is_error && output) {
|
|
68
|
+
output = `Error: ${output}`;
|
|
69
|
+
}
|
|
70
|
+
events.push({ type: "tool_end", output });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return events.length > 0 ? (events.length === 1 ? events[0] : events) : null;
|
|
74
|
+
}
|
|
75
|
+
// Complete event marks successful completion
|
|
76
|
+
if (json.type === "complete") {
|
|
77
|
+
return { type: "end" };
|
|
78
|
+
}
|
|
79
|
+
// Error event
|
|
80
|
+
if (json.type === "error") {
|
|
81
|
+
const errorMsg = typeof json.error === "string" ? json.error : json.error?.message;
|
|
82
|
+
return { type: "end", error: errorMsg };
|
|
83
|
+
}
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/agents/goose/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Goose tool name mappings
|
|
3
|
+
*
|
|
4
|
+
* Maps Goose CLI tool names to canonical tool names.
|
|
5
|
+
*
|
|
6
|
+
* Goose uses namespaced tool names in the format "extension__tool",
|
|
7
|
+
* e.g., "developer__shell", "developer__text_editor".
|
|
8
|
+
*/
|
|
9
|
+
export declare const GOOSE_TOOL_MAPPINGS: Record<string, string>;
|
|
10
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/agents/goose/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAsBtD,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Goose tool name mappings
|
|
3
|
+
*
|
|
4
|
+
* Maps Goose CLI tool names to canonical tool names.
|
|
5
|
+
*
|
|
6
|
+
* Goose uses namespaced tool names in the format "extension__tool",
|
|
7
|
+
* e.g., "developer__shell", "developer__text_editor".
|
|
8
|
+
*/
|
|
9
|
+
export const GOOSE_TOOL_MAPPINGS = {
|
|
10
|
+
// Developer extension tools
|
|
11
|
+
developer__shell: "shell",
|
|
12
|
+
developer__text_editor: "edit",
|
|
13
|
+
developer__read_file: "read",
|
|
14
|
+
developer__write_file: "write",
|
|
15
|
+
developer__list_directory: "glob",
|
|
16
|
+
// Common MCP tool names that may appear
|
|
17
|
+
shell: "shell",
|
|
18
|
+
bash: "shell",
|
|
19
|
+
text_editor: "edit",
|
|
20
|
+
read_file: "read",
|
|
21
|
+
write_file: "write",
|
|
22
|
+
list_directory: "glob",
|
|
23
|
+
search: "grep",
|
|
24
|
+
grep: "grep",
|
|
25
|
+
// Computer controller extension
|
|
26
|
+
computercontroller__shell: "shell",
|
|
27
|
+
computercontroller__read_file: "read",
|
|
28
|
+
computercontroller__write_file: "write",
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/agents/goose/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAA2B;IACzD,4BAA4B;IAC5B,gBAAgB,EAAE,OAAO;IACzB,sBAAsB,EAAE,MAAM;IAC9B,oBAAoB,EAAE,MAAM;IAC5B,qBAAqB,EAAE,OAAO;IAC9B,yBAAyB,EAAE,MAAM;IAEjC,wCAAwC;IACxC,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,MAAM;IACnB,SAAS,EAAE,MAAM;IACjB,UAAU,EAAE,OAAO;IACnB,cAAc,EAAE,MAAM;IACtB,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,MAAM;IAEZ,gCAAgC;IAChC,yBAAyB,EAAE,OAAO;IAClC,6BAA6B,EAAE,MAAM;IACrC,8BAA8B,EAAE,OAAO;CACxC,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agents module - registers all built-in agents
|
|
3
|
+
*
|
|
4
|
+
* Import this module to register all agents with the registry.
|
|
5
|
+
*/
|
|
6
|
+
export { claudeAgent } from "./claude/index";
|
|
7
|
+
export { codexAgent } from "./codex/index";
|
|
8
|
+
export { elizaAgent } from "./eliza/index";
|
|
9
|
+
export { geminiAgent } from "./gemini/index";
|
|
10
|
+
export { gooseAgent } from "./goose/index";
|
|
11
|
+
export { opencodeAgent } from "./opencode/index";
|
|
12
|
+
export { piAgent } from "./pi/index";
|
|
13
|
+
export { CLAUDE_TOOL_MAPPINGS } from "./claude/tools";
|
|
14
|
+
export { CODEX_TOOL_MAPPINGS } from "./codex/tools";
|
|
15
|
+
export { ELIZA_TOOL_MAPPINGS } from "./eliza/tools";
|
|
16
|
+
export { GEMINI_TOOL_MAPPINGS } from "./gemini/tools";
|
|
17
|
+
export { GOOSE_TOOL_MAPPINGS } from "./goose/tools";
|
|
18
|
+
export { OPENCODE_TOOL_MAPPINGS } from "./opencode/tools";
|
|
19
|
+
export { PI_TOOL_MAPPINGS } from "./pi/tools";
|
|
20
|
+
export { parseClaudeLine } from "./claude/parser";
|
|
21
|
+
export { parseCodexLine } from "./codex/parser";
|
|
22
|
+
export { parseElizaLine } from "./eliza/parser";
|
|
23
|
+
export { parseGeminiLine } from "./gemini/parser";
|
|
24
|
+
export { parseGooseLine } from "./goose/parser";
|
|
25
|
+
export { parseOpencodeLine } from "./opencode/parser";
|
|
26
|
+
export { parsePiLine } from "./pi/parser";
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAqBH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAGpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAG7C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agents module - registers all built-in agents
|
|
3
|
+
*
|
|
4
|
+
* Import this module to register all agents with the registry.
|
|
5
|
+
*/
|
|
6
|
+
import { registry } from "../core/registry";
|
|
7
|
+
import { claudeAgent } from "./claude/index";
|
|
8
|
+
import { codexAgent } from "./codex/index";
|
|
9
|
+
import { elizaAgent } from "./eliza/index";
|
|
10
|
+
import { geminiAgent } from "./gemini/index";
|
|
11
|
+
import { gooseAgent } from "./goose/index";
|
|
12
|
+
import { opencodeAgent } from "./opencode/index";
|
|
13
|
+
import { piAgent } from "./pi/index";
|
|
14
|
+
// Register all built-in agents
|
|
15
|
+
registry.register(claudeAgent);
|
|
16
|
+
registry.register(codexAgent);
|
|
17
|
+
registry.register(elizaAgent);
|
|
18
|
+
registry.register(geminiAgent);
|
|
19
|
+
registry.register(gooseAgent);
|
|
20
|
+
registry.register(opencodeAgent);
|
|
21
|
+
registry.register(piAgent);
|
|
22
|
+
// Export agent definitions for direct import if needed
|
|
23
|
+
export { claudeAgent } from "./claude/index";
|
|
24
|
+
export { codexAgent } from "./codex/index";
|
|
25
|
+
export { elizaAgent } from "./eliza/index";
|
|
26
|
+
export { geminiAgent } from "./gemini/index";
|
|
27
|
+
export { gooseAgent } from "./goose/index";
|
|
28
|
+
export { opencodeAgent } from "./opencode/index";
|
|
29
|
+
export { piAgent } from "./pi/index";
|
|
30
|
+
// Re-export tool mappings for testing
|
|
31
|
+
export { CLAUDE_TOOL_MAPPINGS } from "./claude/tools";
|
|
32
|
+
export { CODEX_TOOL_MAPPINGS } from "./codex/tools";
|
|
33
|
+
export { ELIZA_TOOL_MAPPINGS } from "./eliza/tools";
|
|
34
|
+
export { GEMINI_TOOL_MAPPINGS } from "./gemini/tools";
|
|
35
|
+
export { GOOSE_TOOL_MAPPINGS } from "./goose/tools";
|
|
36
|
+
export { OPENCODE_TOOL_MAPPINGS } from "./opencode/tools";
|
|
37
|
+
export { PI_TOOL_MAPPINGS } from "./pi/tools";
|
|
38
|
+
// Re-export parsers for testing
|
|
39
|
+
export { parseClaudeLine } from "./claude/parser";
|
|
40
|
+
export { parseCodexLine } from "./codex/parser";
|
|
41
|
+
export { parseElizaLine } from "./eliza/parser";
|
|
42
|
+
export { parseGeminiLine } from "./gemini/parser";
|
|
43
|
+
export { parseGooseLine } from "./goose/parser";
|
|
44
|
+
export { parseOpencodeLine } from "./opencode/parser";
|
|
45
|
+
export { parsePiLine } from "./pi/parser";
|
|
46
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEpC,+BAA+B;AAC/B,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;AAC9B,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;AAC7B,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;AAC7B,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;AAC9B,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;AAC7B,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAA;AAChC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;AAE1B,uDAAuD;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEpC,sCAAsC;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAE7C,gCAAgC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode CLI Agent Definition
|
|
3
|
+
*/
|
|
4
|
+
import type { AgentDefinition } from "../../core/agent";
|
|
5
|
+
/**
|
|
6
|
+
* OpenCode CLI agent definition.
|
|
7
|
+
*
|
|
8
|
+
* Interacts with the OpenCode CLI tool which outputs JSON lines.
|
|
9
|
+
* Wraps command in bash to capture stderr.
|
|
10
|
+
*/
|
|
11
|
+
export declare const opencodeAgent: AgentDefinition;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/opencode/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,eAAe,EAIhB,MAAM,kBAAkB,CAAA;AAYzB;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,eA2C3B,CAAA"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode CLI Agent Definition
|
|
3
|
+
*/
|
|
4
|
+
import { parseOpencodeLine } from "./parser";
|
|
5
|
+
import { OPENCODE_TOOL_MAPPINGS } from "./tools";
|
|
6
|
+
/**
|
|
7
|
+
* Quote a string for bash
|
|
8
|
+
*/
|
|
9
|
+
function quote(s) {
|
|
10
|
+
return `'${s.replace(/'/g, "'\\''")}'`;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* OpenCode CLI agent definition.
|
|
14
|
+
*
|
|
15
|
+
* Interacts with the OpenCode CLI tool which outputs JSON lines.
|
|
16
|
+
* Wraps command in bash to capture stderr.
|
|
17
|
+
*/
|
|
18
|
+
export const opencodeAgent = {
|
|
19
|
+
name: "opencode",
|
|
20
|
+
toolMappings: OPENCODE_TOOL_MAPPINGS,
|
|
21
|
+
capabilities: {
|
|
22
|
+
supportsSystemPrompt: false,
|
|
23
|
+
supportsResume: true,
|
|
24
|
+
},
|
|
25
|
+
buildCommand(options) {
|
|
26
|
+
// OpenCode sometimes writes JSON events to stderr; run under bash and redirect 2>&1
|
|
27
|
+
const parts = ["opencode", "run", "--format", "json", "--variant", "medium"];
|
|
28
|
+
if (options.model) {
|
|
29
|
+
parts.push("-m", quote(options.model));
|
|
30
|
+
}
|
|
31
|
+
if (options.sessionId) {
|
|
32
|
+
parts.push("-s", quote(options.sessionId));
|
|
33
|
+
}
|
|
34
|
+
if (options.prompt) {
|
|
35
|
+
parts.push(quote(options.prompt));
|
|
36
|
+
}
|
|
37
|
+
const command = `${parts.join(" ")} 2>&1`;
|
|
38
|
+
return {
|
|
39
|
+
cmd: "bash",
|
|
40
|
+
args: ["-lc", command],
|
|
41
|
+
env: {
|
|
42
|
+
// Allow all tool actions without interactive approval in headless runs
|
|
43
|
+
OPENCODE_PERMISSION: '{"*":"allow"}',
|
|
44
|
+
...options.env,
|
|
45
|
+
},
|
|
46
|
+
wrapInBash: false, // Already wrapped
|
|
47
|
+
};
|
|
48
|
+
},
|
|
49
|
+
parse(line, context) {
|
|
50
|
+
return parseOpencodeLine(line, this.toolMappings, context);
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agents/opencode/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAEhD;;GAEG;AACH,SAAS,KAAK,CAAC,CAAS;IACtB,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAA;AACxC,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAoB;IAC5C,IAAI,EAAE,UAAU;IAEhB,YAAY,EAAE,sBAAsB;IAEpC,YAAY,EAAE;QACZ,oBAAoB,EAAE,KAAK;QAC3B,cAAc,EAAE,IAAI;KACrB;IAED,YAAY,CAAC,OAAmB;QAC9B,oFAAoF;QACpF,MAAM,KAAK,GAAa,CAAC,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;QAEtF,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;QACxC,CAAC;QAED,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAA;QAC5C,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;QACnC,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAA;QAEzC,OAAO;YACL,GAAG,EAAE,MAAM;YACX,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;YACtB,GAAG,EAAE;gBACH,uEAAuE;gBACvE,mBAAmB,EAAE,eAAe;gBACpC,GAAG,OAAO,CAAC,GAAG;aACf;YACD,UAAU,EAAE,KAAK,EAAE,kBAAkB;SACtC,CAAA;IACH,CAAC;IAED,KAAK,CAAC,IAAY,EAAE,OAAqB;QACvC,OAAO,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IAC5D,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode CLI output parser
|
|
3
|
+
*
|
|
4
|
+
* Pure function for parsing OpenCode CLI JSON output.
|
|
5
|
+
* Note: OpenCode requires stateful parsing to track session ID.
|
|
6
|
+
*/
|
|
7
|
+
import type { Event } from "../../types/events";
|
|
8
|
+
import type { ParseContext } from "../../core/agent";
|
|
9
|
+
/**
|
|
10
|
+
* Parse a line of OpenCode CLI output into event(s).
|
|
11
|
+
*
|
|
12
|
+
* Uses context.state.seenSessionId to track if session event was already emitted.
|
|
13
|
+
*/
|
|
14
|
+
export declare function parseOpencodeLine(line: string, toolMappings: Record<string, string>, context: ParseContext): Event | Event[] | null;
|
|
15
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/agents/opencode/parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AA0FpD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,OAAO,EAAE,YAAY,GACpB,KAAK,GAAG,KAAK,EAAE,GAAG,IAAI,CAgExB"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode CLI output parser
|
|
3
|
+
*
|
|
4
|
+
* Pure function for parsing OpenCode CLI JSON output.
|
|
5
|
+
* Note: OpenCode requires stateful parsing to track session ID.
|
|
6
|
+
*/
|
|
7
|
+
import { createToolStartEvent, normalizeToolName } from "../../core/tools";
|
|
8
|
+
import { safeJsonParse } from "../../utils/json";
|
|
9
|
+
/**
|
|
10
|
+
* Parse a line of OpenCode CLI output into event(s).
|
|
11
|
+
*
|
|
12
|
+
* Uses context.state.seenSessionId to track if session event was already emitted.
|
|
13
|
+
*/
|
|
14
|
+
export function parseOpencodeLine(line, toolMappings, context) {
|
|
15
|
+
const json = safeJsonParse(line);
|
|
16
|
+
if (!json) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
// Step start - session initialization
|
|
20
|
+
if (json.type === "step_start") {
|
|
21
|
+
// OpenCode can emit multiple step_start lines for the same session; only emit once
|
|
22
|
+
if (context.sessionId === json.sessionID)
|
|
23
|
+
return null;
|
|
24
|
+
context.sessionId = json.sessionID;
|
|
25
|
+
return { type: "session", id: json.sessionID };
|
|
26
|
+
}
|
|
27
|
+
// Text content - the actual response
|
|
28
|
+
if (json.type === "text") {
|
|
29
|
+
if (json.part?.type === "text" && json.part.text) {
|
|
30
|
+
return { type: "token", text: json.part.text };
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
// Tool call start
|
|
35
|
+
if (json.type === "tool_call") {
|
|
36
|
+
const toolName = (json.part?.tool || "unknown").toLowerCase();
|
|
37
|
+
const normalized = normalizeToolName(toolName, toolMappings);
|
|
38
|
+
return createToolStartEvent(normalized, json.part?.args, toolMappings);
|
|
39
|
+
}
|
|
40
|
+
// Tool use (stream-json: emitted when tool completes with full state)
|
|
41
|
+
if (json.type === "tool_use") {
|
|
42
|
+
const toolName = (json.part?.tool || "unknown").toLowerCase();
|
|
43
|
+
const normalized = normalizeToolName(toolName, toolMappings);
|
|
44
|
+
const raw = json.part;
|
|
45
|
+
const startEvent = createToolStartEvent(normalized, raw?.state?.input, toolMappings);
|
|
46
|
+
// If the tool already completed (state.output is present), emit tool_end inline.
|
|
47
|
+
// This is the common case for OpenCode: tool_use carries the full result.
|
|
48
|
+
const rawOutput = raw?.state?.output;
|
|
49
|
+
if (typeof rawOutput === "string" && rawOutput.trim()) {
|
|
50
|
+
return [startEvent, { type: "tool_end", output: rawOutput.trim() }];
|
|
51
|
+
}
|
|
52
|
+
return startEvent;
|
|
53
|
+
}
|
|
54
|
+
// Tool result - tool completed (streaming / in-progress path, no output here)
|
|
55
|
+
if (json.type === "tool_result") {
|
|
56
|
+
return { type: "tool_end" };
|
|
57
|
+
}
|
|
58
|
+
// Step finish - emit end only when run actually stops
|
|
59
|
+
if (json.type === "step_finish") {
|
|
60
|
+
if (json.part?.reason === "stop")
|
|
61
|
+
return { type: "end" };
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
// Error event - emit as end with error
|
|
65
|
+
if (json.type === "error") {
|
|
66
|
+
const errorMsg = json.error?.data?.message || json.error?.name || "Unknown error";
|
|
67
|
+
return { type: "end", error: errorMsg };
|
|
68
|
+
}
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/agents/opencode/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/agents/opencode/tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGzD,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/agents/opencode/tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAA2B;IAC5D,IAAI,EAAE,OAAO;IACb,kDAAkD;CACnD,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenHands CLI Agent Definition
|
|
3
|
+
*
|
|
4
|
+
* OpenHands is an AI-powered coding agent that can edit files, run commands,
|
|
5
|
+
* and browse the web. This integration uses the headless CLI mode with JSON output.
|
|
6
|
+
*
|
|
7
|
+
* @see https://docs.openhands.dev/openhands/usage/cli/headless
|
|
8
|
+
*/
|
|
9
|
+
import type { AgentDefinition } from "../../core/agent.js";
|
|
10
|
+
/**
|
|
11
|
+
* OpenHands CLI agent definition.
|
|
12
|
+
*
|
|
13
|
+
* Interacts with the OpenHands CLI tool in headless mode with JSON output.
|
|
14
|
+
* Wraps command in bash to capture stderr and handle environment properly.
|
|
15
|
+
*/
|
|
16
|
+
export declare const openhandsAgent: AgentDefinition;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/openhands/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,eAAe,EAIhB,MAAM,qBAAqB,CAAA;AAY5B;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,eAsD5B,CAAA"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenHands CLI Agent Definition
|
|
3
|
+
*
|
|
4
|
+
* OpenHands is an AI-powered coding agent that can edit files, run commands,
|
|
5
|
+
* and browse the web. This integration uses the headless CLI mode with JSON output.
|
|
6
|
+
*
|
|
7
|
+
* @see https://docs.openhands.dev/openhands/usage/cli/headless
|
|
8
|
+
*/
|
|
9
|
+
import { parseOpenhandsLine } from "./parser.js";
|
|
10
|
+
import { OPENHANDS_TOOL_MAPPINGS } from "./tools.js";
|
|
11
|
+
/**
|
|
12
|
+
* Quote a string for bash
|
|
13
|
+
*/
|
|
14
|
+
function quote(s) {
|
|
15
|
+
return `'${s.replace(/'/g, "'\\''")}'`;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* OpenHands CLI agent definition.
|
|
19
|
+
*
|
|
20
|
+
* Interacts with the OpenHands CLI tool in headless mode with JSON output.
|
|
21
|
+
* Wraps command in bash to capture stderr and handle environment properly.
|
|
22
|
+
*/
|
|
23
|
+
export const openhandsAgent = {
|
|
24
|
+
name: "openhands",
|
|
25
|
+
toolMappings: OPENHANDS_TOOL_MAPPINGS,
|
|
26
|
+
capabilities: {
|
|
27
|
+
supportsSystemPrompt: false,
|
|
28
|
+
supportsResume: true,
|
|
29
|
+
},
|
|
30
|
+
buildCommand(options) {
|
|
31
|
+
// Build the openhands command
|
|
32
|
+
const parts = ["openhands", "--headless", "--json"];
|
|
33
|
+
// Add model if specified
|
|
34
|
+
// OpenHands uses LLM_MODEL env var, but we can use --override-with-envs flag
|
|
35
|
+
// along with environment variables for model selection
|
|
36
|
+
// Resume session if provided
|
|
37
|
+
if (options.sessionId) {
|
|
38
|
+
parts.push("--resume", quote(options.sessionId));
|
|
39
|
+
}
|
|
40
|
+
// Add the prompt via -t flag
|
|
41
|
+
if (options.prompt) {
|
|
42
|
+
parts.push("-t", quote(options.prompt));
|
|
43
|
+
}
|
|
44
|
+
// Redirect stderr to stdout for unified output capture
|
|
45
|
+
const command = `${parts.join(" ")} 2>&1`;
|
|
46
|
+
// Build environment variables
|
|
47
|
+
const env = {
|
|
48
|
+
// Suppress the banner for cleaner JSON output
|
|
49
|
+
OPENHANDS_SUPPRESS_BANNER: "1",
|
|
50
|
+
...options.env,
|
|
51
|
+
};
|
|
52
|
+
// If model is specified, set the LLM_MODEL env var
|
|
53
|
+
if (options.model) {
|
|
54
|
+
env.LLM_MODEL = options.model;
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
cmd: "bash",
|
|
58
|
+
args: ["-lc", command],
|
|
59
|
+
env,
|
|
60
|
+
wrapInBash: false, // Already wrapped
|
|
61
|
+
};
|
|
62
|
+
},
|
|
63
|
+
parse(line, context) {
|
|
64
|
+
return parseOpenhandsLine(line, this.toolMappings, context);
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agents/openhands/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAEpD;;GAEG;AACH,SAAS,KAAK,CAAC,CAAS;IACtB,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAA;AACxC,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C,IAAI,EAAE,WAAW;IAEjB,YAAY,EAAE,uBAAuB;IAErC,YAAY,EAAE;QACZ,oBAAoB,EAAE,KAAK;QAC3B,cAAc,EAAE,IAAI;KACrB;IAED,YAAY,CAAC,OAAmB;QAC9B,8BAA8B;QAC9B,MAAM,KAAK,GAAa,CAAC,WAAW,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAA;QAE7D,yBAAyB;QACzB,6EAA6E;QAC7E,uDAAuD;QAEvD,6BAA6B;QAC7B,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAA;QAClD,CAAC;QAED,6BAA6B;QAC7B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;QACzC,CAAC;QAED,uDAAuD;QACvD,MAAM,OAAO,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAA;QAEzC,8BAA8B;QAC9B,MAAM,GAAG,GAA2B;YAClC,8CAA8C;YAC9C,yBAAyB,EAAE,GAAG;YAC9B,GAAG,OAAO,CAAC,GAAG;SACf,CAAA;QAED,mDAAmD;QACnD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,CAAA;QAC/B,CAAC;QAED,OAAO;YACL,GAAG,EAAE,MAAM;YACX,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;YACtB,GAAG;YACH,UAAU,EAAE,KAAK,EAAE,kBAAkB;SACtC,CAAA;IACH,CAAC;IAED,KAAK,CAAC,IAAY,EAAE,OAAqB;QACvC,OAAO,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IAC7D,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenHands CLI output parser
|
|
3
|
+
*
|
|
4
|
+
* Pure function for parsing OpenHands CLI JSON output.
|
|
5
|
+
* The OpenHands CLI with --json flag outputs JSONL events with
|
|
6
|
+
* "type": "action" or "type": "observation" fields.
|
|
7
|
+
*/
|
|
8
|
+
import type { Event } from "../../types/events.js";
|
|
9
|
+
import type { ParseContext } from "../../core/agent.js";
|
|
10
|
+
/**
|
|
11
|
+
* Parse a line of OpenHands CLI output into event(s).
|
|
12
|
+
*
|
|
13
|
+
* Uses context.sessionId to track if session event was already emitted.
|
|
14
|
+
*/
|
|
15
|
+
export declare function parseOpenhandsLine(line: string, toolMappings: Record<string, string>, context: ParseContext): Event | null;
|
|
16
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/agents/openhands/parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAuEvD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,OAAO,EAAE,YAAY,GACpB,KAAK,GAAG,IAAI,CAyFd"}
|