agent-bober 0.6.1 → 0.7.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 +159 -28
- package/dist/cli/commands/eval.d.ts +2 -0
- package/dist/cli/commands/eval.d.ts.map +1 -1
- package/dist/cli/commands/eval.js +10 -0
- package/dist/cli/commands/eval.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +181 -61
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/plan.d.ts +2 -0
- package/dist/cli/commands/plan.d.ts.map +1 -1
- package/dist/cli/commands/plan.js +10 -0
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/run.d.ts +2 -0
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +10 -0
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/sprint.d.ts +2 -0
- package/dist/cli/commands/sprint.d.ts.map +1 -1
- package/dist/cli/commands/sprint.js +10 -0
- package/dist/cli/commands/sprint.js.map +1 -1
- package/dist/cli/index.js +22 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/config/schema.d.ts +160 -43
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +11 -7
- package/dist/config/schema.js.map +1 -1
- package/dist/contracts/sprint-contract.d.ts +8 -8
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/index.d.ts +4 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +4 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/run-manager.d.ts +47 -0
- package/dist/mcp/run-manager.d.ts.map +1 -0
- package/dist/mcp/run-manager.js +79 -0
- package/dist/mcp/run-manager.js.map +1 -0
- package/dist/mcp/server.d.ts +15 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +107 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/config.d.ts +2 -0
- package/dist/mcp/tools/config.d.ts.map +1 -0
- package/dist/mcp/tools/config.js +153 -0
- package/dist/mcp/tools/config.js.map +1 -0
- package/dist/mcp/tools/contracts.d.ts +2 -0
- package/dist/mcp/tools/contracts.d.ts.map +1 -0
- package/dist/mcp/tools/contracts.js +61 -0
- package/dist/mcp/tools/contracts.js.map +1 -0
- package/dist/mcp/tools/eval.d.ts +2 -0
- package/dist/mcp/tools/eval.d.ts.map +1 -0
- package/dist/mcp/tools/eval.js +157 -0
- package/dist/mcp/tools/eval.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +20 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +47 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/init.d.ts +2 -0
- package/dist/mcp/tools/init.d.ts.map +1 -0
- package/dist/mcp/tools/init.js +121 -0
- package/dist/mcp/tools/init.js.map +1 -0
- package/dist/mcp/tools/plan.d.ts +2 -0
- package/dist/mcp/tools/plan.d.ts.map +1 -0
- package/dist/mcp/tools/plan.js +97 -0
- package/dist/mcp/tools/plan.js.map +1 -0
- package/dist/mcp/tools/principles.d.ts +2 -0
- package/dist/mcp/tools/principles.d.ts.map +1 -0
- package/dist/mcp/tools/principles.js +66 -0
- package/dist/mcp/tools/principles.js.map +1 -0
- package/dist/mcp/tools/registry.d.ts +45 -0
- package/dist/mcp/tools/registry.d.ts.map +1 -0
- package/dist/mcp/tools/registry.js +23 -0
- package/dist/mcp/tools/registry.js.map +1 -0
- package/dist/mcp/tools/run.d.ts +2 -0
- package/dist/mcp/tools/run.d.ts.map +1 -0
- package/dist/mcp/tools/run.js +66 -0
- package/dist/mcp/tools/run.js.map +1 -0
- package/dist/mcp/tools/spec.d.ts +2 -0
- package/dist/mcp/tools/spec.d.ts.map +1 -0
- package/dist/mcp/tools/spec.js +32 -0
- package/dist/mcp/tools/spec.js.map +1 -0
- package/dist/mcp/tools/sprint.d.ts +2 -0
- package/dist/mcp/tools/sprint.d.ts.map +1 -0
- package/dist/mcp/tools/sprint.js +243 -0
- package/dist/mcp/tools/sprint.js.map +1 -0
- package/dist/mcp/tools/status.d.ts +2 -0
- package/dist/mcp/tools/status.d.ts.map +1 -0
- package/dist/mcp/tools/status.js +76 -0
- package/dist/mcp/tools/status.js.map +1 -0
- package/dist/orchestrator/agentic-loop.d.ts +7 -6
- package/dist/orchestrator/agentic-loop.d.ts.map +1 -1
- package/dist/orchestrator/agentic-loop.js +33 -40
- package/dist/orchestrator/agentic-loop.js.map +1 -1
- package/dist/orchestrator/context-handoff.d.ts +20 -20
- package/dist/orchestrator/evaluator-agent.d.ts.map +1 -1
- package/dist/orchestrator/evaluator-agent.js +2 -2
- package/dist/orchestrator/evaluator-agent.js.map +1 -1
- package/dist/orchestrator/generator-agent.d.ts.map +1 -1
- package/dist/orchestrator/generator-agent.js +2 -2
- package/dist/orchestrator/generator-agent.js.map +1 -1
- package/dist/orchestrator/model-resolver.d.ts +35 -4
- package/dist/orchestrator/model-resolver.d.ts.map +1 -1
- package/dist/orchestrator/model-resolver.js +68 -15
- package/dist/orchestrator/model-resolver.js.map +1 -1
- package/dist/orchestrator/planner-agent.d.ts.map +1 -1
- package/dist/orchestrator/planner-agent.js +2 -2
- package/dist/orchestrator/planner-agent.js.map +1 -1
- package/dist/orchestrator/tools/index.d.ts +3 -4
- package/dist/orchestrator/tools/index.d.ts.map +1 -1
- package/dist/orchestrator/tools/index.js.map +1 -1
- package/dist/orchestrator/tools/schemas.d.ts +11 -12
- package/dist/orchestrator/tools/schemas.d.ts.map +1 -1
- package/dist/orchestrator/tools/schemas.js +3 -2
- package/dist/orchestrator/tools/schemas.js.map +1 -1
- package/dist/providers/anthropic.d.ts +15 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +133 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/factory.d.ts +37 -0
- package/dist/providers/factory.d.ts.map +1 -0
- package/dist/providers/factory.js +119 -0
- package/dist/providers/factory.js.map +1 -0
- package/dist/providers/google.d.ts +39 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +195 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/index.d.ts +7 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +6 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai-compat.d.ts +39 -0
- package/dist/providers/openai-compat.d.ts.map +1 -0
- package/dist/providers/openai-compat.js +42 -0
- package/dist/providers/openai-compat.js.map +1 -0
- package/dist/providers/openai.d.ts +41 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +205 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/types.d.ts +144 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +8 -0
- package/dist/providers/types.js.map +1 -0
- package/package.json +26 -4
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider-agnostic LLM interface types.
|
|
3
|
+
*
|
|
4
|
+
* These types decouple agent-bober from any specific LLM SDK. All provider
|
|
5
|
+
* adapters (Anthropic, OpenAI, etc.) convert to/from these types.
|
|
6
|
+
*/
|
|
7
|
+
export interface JsonSchemaProperty {
|
|
8
|
+
type: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
enum?: string[];
|
|
11
|
+
items?: JsonSchemaProperty;
|
|
12
|
+
properties?: Record<string, JsonSchemaProperty>;
|
|
13
|
+
required?: string[];
|
|
14
|
+
}
|
|
15
|
+
export interface JsonSchemaObject {
|
|
16
|
+
type: "object";
|
|
17
|
+
properties?: Record<string, JsonSchemaProperty>;
|
|
18
|
+
required?: string[];
|
|
19
|
+
additionalProperties?: boolean;
|
|
20
|
+
/** Allow extra keys so this type is assignable to Anthropic's InputSchema (which has [k: string]: unknown). */
|
|
21
|
+
[key: string]: unknown;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Provider-agnostic tool definition.
|
|
25
|
+
*
|
|
26
|
+
* Uses plain JSON Schema for parameters (no SDK-specific types).
|
|
27
|
+
* Maps directly to the Anthropic Tool shape (input_schema → parameters)
|
|
28
|
+
* and to OpenAI function calling format.
|
|
29
|
+
*/
|
|
30
|
+
export interface ToolDef {
|
|
31
|
+
/** Unique tool name (snake_case). */
|
|
32
|
+
name: string;
|
|
33
|
+
/** Human-readable description of what the tool does. */
|
|
34
|
+
description: string;
|
|
35
|
+
/** JSON Schema object describing the tool's input parameters. */
|
|
36
|
+
input_schema: JsonSchemaObject;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* A single tool invocation requested by the model.
|
|
40
|
+
*/
|
|
41
|
+
export interface ToolCall {
|
|
42
|
+
/** Unique ID for this tool call (used to correlate results). */
|
|
43
|
+
id: string;
|
|
44
|
+
/** Tool name. */
|
|
45
|
+
name: string;
|
|
46
|
+
/** Parsed input arguments. */
|
|
47
|
+
input: Record<string, unknown>;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* A tool result item, returned by the agent after executing a tool.
|
|
51
|
+
* Used within ToolResultMessage to correlate results with tool call IDs.
|
|
52
|
+
*/
|
|
53
|
+
export interface ToolResult {
|
|
54
|
+
/** The ID of the tool call this result corresponds to. */
|
|
55
|
+
toolUseId: string;
|
|
56
|
+
/** The output text from the tool execution. */
|
|
57
|
+
content: string;
|
|
58
|
+
/** Whether this result represents a tool execution error. */
|
|
59
|
+
isError?: boolean;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* An assistant message that contains both optional text and tool call requests.
|
|
63
|
+
*/
|
|
64
|
+
export interface AssistantMessage {
|
|
65
|
+
role: "assistant";
|
|
66
|
+
/** Text portion of the response (may be empty when only tool calls are present). */
|
|
67
|
+
content: string;
|
|
68
|
+
/** Tool calls the assistant wants to execute. */
|
|
69
|
+
toolCalls: ToolCall[];
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* A user message that carries tool execution results back to the model.
|
|
73
|
+
*/
|
|
74
|
+
export interface ToolResultMessage {
|
|
75
|
+
role: "user";
|
|
76
|
+
/** Tool results keyed by tool call ID. */
|
|
77
|
+
toolResults: ToolResult[];
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* A plain text message from user or assistant.
|
|
81
|
+
*/
|
|
82
|
+
export interface TextMessage {
|
|
83
|
+
role: "user" | "assistant";
|
|
84
|
+
/** Text content. */
|
|
85
|
+
content: string;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* A message in the conversation history.
|
|
89
|
+
*
|
|
90
|
+
* Three variants:
|
|
91
|
+
* - TextMessage: plain user or assistant text
|
|
92
|
+
* - AssistantMessage: assistant response that includes tool call requests
|
|
93
|
+
* - ToolResultMessage: user message carrying tool execution results
|
|
94
|
+
*/
|
|
95
|
+
export type Message = TextMessage | AssistantMessage | ToolResultMessage;
|
|
96
|
+
/**
|
|
97
|
+
* Parameters for a single LLM chat request.
|
|
98
|
+
*/
|
|
99
|
+
export interface ChatParams {
|
|
100
|
+
/** Model identifier (resolved by the factory / model-resolver). */
|
|
101
|
+
model: string;
|
|
102
|
+
/** System prompt. */
|
|
103
|
+
system: string;
|
|
104
|
+
/** Conversation history. */
|
|
105
|
+
messages: Message[];
|
|
106
|
+
/** Tools available to the model for this request. */
|
|
107
|
+
tools?: ToolDef[];
|
|
108
|
+
/** Maximum tokens to generate. Defaults to 16384. */
|
|
109
|
+
maxTokens?: number;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Stop reason indicating why the model stopped generating.
|
|
113
|
+
*/
|
|
114
|
+
export type StopReason = "end" | "tool_use" | "max_tokens" | "error" | string;
|
|
115
|
+
/**
|
|
116
|
+
* Normalized response from a single LLM chat request.
|
|
117
|
+
*/
|
|
118
|
+
export interface ChatResponse {
|
|
119
|
+
/** The assistant's text response (may be empty if only tool calls). */
|
|
120
|
+
text: string;
|
|
121
|
+
/** Tool calls requested by the model (may be empty). */
|
|
122
|
+
toolCalls: ToolCall[];
|
|
123
|
+
/** Why the model stopped generating. */
|
|
124
|
+
stopReason: StopReason;
|
|
125
|
+
/** Token usage for this request. */
|
|
126
|
+
usage: {
|
|
127
|
+
inputTokens: number;
|
|
128
|
+
outputTokens: number;
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Unified interface for all LLM provider adapters.
|
|
133
|
+
*
|
|
134
|
+
* Implementations must handle tool conversion to/from their native
|
|
135
|
+
* format and normalize responses to ChatResponse.
|
|
136
|
+
*/
|
|
137
|
+
export interface LLMClient {
|
|
138
|
+
/**
|
|
139
|
+
* Send a chat request to the underlying provider and return a
|
|
140
|
+
* normalized ChatResponse.
|
|
141
|
+
*/
|
|
142
|
+
chat(params: ChatParams): Promise<ChatResponse>;
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-bober",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Generator-Evaluator multi-agent harness for building applications autonomously with
|
|
3
|
+
"version": "0.7.0",
|
|
4
|
+
"description": "Generator-Evaluator multi-agent harness for building applications autonomously with any LLM. Supports Claude, GPT, Gemini, Ollama. Includes MCP server for Cursor/Windsurf.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -17,20 +17,29 @@
|
|
|
17
17
|
"prepublishOnly": "npm run build"
|
|
18
18
|
},
|
|
19
19
|
"keywords": [
|
|
20
|
-
"claude",
|
|
21
20
|
"agent",
|
|
22
21
|
"harness",
|
|
23
22
|
"multi-agent",
|
|
24
23
|
"autonomous",
|
|
25
24
|
"generator-evaluator",
|
|
26
25
|
"claude-code",
|
|
26
|
+
"cursor",
|
|
27
|
+
"mcp",
|
|
28
|
+
"claude",
|
|
29
|
+
"openai",
|
|
30
|
+
"gemini",
|
|
31
|
+
"ollama",
|
|
27
32
|
"plugin"
|
|
28
33
|
],
|
|
29
34
|
"author": "BOBER3r",
|
|
30
35
|
"license": "MIT",
|
|
36
|
+
"homepage": "https://github.com/BOBER3r/agent-bober#readme",
|
|
31
37
|
"repository": {
|
|
32
38
|
"type": "git",
|
|
33
|
-
"url": "https://github.com/BOBER3r/agent-bober"
|
|
39
|
+
"url": "git+https://github.com/BOBER3r/agent-bober.git"
|
|
40
|
+
},
|
|
41
|
+
"bugs": {
|
|
42
|
+
"url": "https://github.com/BOBER3r/agent-bober/issues"
|
|
34
43
|
},
|
|
35
44
|
"engines": {
|
|
36
45
|
"node": ">=18.0.0"
|
|
@@ -46,6 +55,7 @@
|
|
|
46
55
|
],
|
|
47
56
|
"dependencies": {
|
|
48
57
|
"@anthropic-ai/sdk": "^0.39.0",
|
|
58
|
+
"@modelcontextprotocol/sdk": "^1.28.0",
|
|
49
59
|
"chalk": "^5.4.1",
|
|
50
60
|
"commander": "^13.1.0",
|
|
51
61
|
"execa": "^9.5.2",
|
|
@@ -54,6 +64,18 @@
|
|
|
54
64
|
"prompts": "^2.4.2",
|
|
55
65
|
"zod": "^3.24.2"
|
|
56
66
|
},
|
|
67
|
+
"peerDependencies": {
|
|
68
|
+
"@google/generative-ai": ">=0.21.0",
|
|
69
|
+
"openai": ">=4.0.0"
|
|
70
|
+
},
|
|
71
|
+
"peerDependenciesMeta": {
|
|
72
|
+
"openai": {
|
|
73
|
+
"optional": true
|
|
74
|
+
},
|
|
75
|
+
"@google/generative-ai": {
|
|
76
|
+
"optional": true
|
|
77
|
+
}
|
|
78
|
+
},
|
|
57
79
|
"devDependencies": {
|
|
58
80
|
"@eslint/js": "^10.0.1",
|
|
59
81
|
"@types/node": "^22.13.0",
|