@matthias-hausberger/beige 0.0.1 → 0.0.2-alpha1
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 +34 -7
- package/dist/cli.js +0 -0
- package/package.json +15 -15
- package/dist/config/loader.spec.d.ts +0 -2
- package/dist/config/loader.spec.d.ts.map +0 -1
- package/dist/config/loader.spec.js +0 -195
- package/dist/config/loader.spec.js.map +0 -1
- package/dist/config/schema.spec.d.ts +0 -2
- package/dist/config/schema.spec.d.ts.map +0 -1
- package/dist/config/schema.spec.js +0 -180
- package/dist/config/schema.spec.js.map +0 -1
- package/dist/gateway/api.spec.d.ts +0 -2
- package/dist/gateway/api.spec.d.ts.map +0 -1
- package/dist/gateway/api.spec.js +0 -256
- package/dist/gateway/api.spec.js.map +0 -1
- package/dist/gateway/audit.spec.d.ts +0 -2
- package/dist/gateway/audit.spec.d.ts.map +0 -1
- package/dist/gateway/audit.spec.js +0 -212
- package/dist/gateway/audit.spec.js.map +0 -1
- package/dist/gateway/policy.spec.d.ts +0 -2
- package/dist/gateway/policy.spec.d.ts.map +0 -1
- package/dist/gateway/policy.spec.js +0 -121
- package/dist/gateway/policy.spec.js.map +0 -1
- package/dist/gateway/provider-health.spec.d.ts +0 -2
- package/dist/gateway/provider-health.spec.d.ts.map +0 -1
- package/dist/gateway/provider-health.spec.js +0 -278
- package/dist/gateway/provider-health.spec.js.map +0 -1
- package/dist/gateway/session-settings.spec.d.ts +0 -2
- package/dist/gateway/session-settings.spec.d.ts.map +0 -1
- package/dist/gateway/session-settings.spec.js +0 -141
- package/dist/gateway/session-settings.spec.js.map +0 -1
- package/dist/gateway/sessions.spec.d.ts +0 -2
- package/dist/gateway/sessions.spec.d.ts.map +0 -1
- package/dist/gateway/sessions.spec.js +0 -190
- package/dist/gateway/sessions.spec.js.map +0 -1
- package/dist/skills/registry.spec.d.ts +0 -2
- package/dist/skills/registry.spec.d.ts.map +0 -1
- package/dist/skills/registry.spec.js +0 -220
- package/dist/skills/registry.spec.js.map +0 -1
- package/dist/socket/protocol.spec.d.ts +0 -2
- package/dist/socket/protocol.spec.d.ts.map +0 -1
- package/dist/socket/protocol.spec.js +0 -135
- package/dist/socket/protocol.spec.js.map +0 -1
- package/dist/socket/server.spec.d.ts +0 -2
- package/dist/socket/server.spec.d.ts.map +0 -1
- package/dist/socket/server.spec.js +0 -333
- package/dist/socket/server.spec.js.map +0 -1
- package/dist/toolkit/registry.spec.d.ts +0 -2
- package/dist/toolkit/registry.spec.d.ts.map +0 -1
- package/dist/toolkit/registry.spec.js +0 -194
- package/dist/toolkit/registry.spec.js.map +0 -1
- package/dist/toolkit/schema.spec.d.ts +0 -2
- package/dist/toolkit/schema.spec.d.ts.map +0 -1
- package/dist/toolkit/schema.spec.js +0 -202
- package/dist/toolkit/schema.spec.js.map +0 -1
- package/dist/tools/core.spec.d.ts +0 -2
- package/dist/tools/core.spec.d.ts.map +0 -1
- package/dist/tools/core.spec.js +0 -315
- package/dist/tools/core.spec.js.map +0 -1
- package/dist/tools/registry.spec.d.ts +0 -2
- package/dist/tools/registry.spec.d.ts.map +0 -1
- package/dist/tools/registry.spec.js +0 -228
- package/dist/tools/registry.spec.js.map +0 -1
- package/dist/tools/runner.spec.d.ts +0 -2
- package/dist/tools/runner.spec.d.ts.map +0 -1
- package/dist/tools/runner.spec.js +0 -129
- package/dist/tools/runner.spec.js.map +0 -1
package/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Secure, sandboxed agent system. Let agents write and execute code — safely.
|
|
4
4
|
|
|
5
|
+
**📚 [Documentation](https://beige.mintlify.app)** — Full docs at beige.mintlify.app
|
|
6
|
+
|
|
5
7
|
## What is Beige?
|
|
6
8
|
|
|
7
9
|
Beige is an open-source agent gateway that runs AI agents inside Docker sandboxes. Agents have 4 core tools (`read`, `write`, `patch`, `exec`) and can use additional tools exposed as executables. All tool calls route through the gateway for policy enforcement and audit logging.
|
|
@@ -104,13 +106,38 @@ Channels
|
|
|
104
106
|
Policy Engine → Audit Logger → Tool Runner
|
|
105
107
|
```
|
|
106
108
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
109
|
+
## Documentation
|
|
110
|
+
|
|
111
|
+
Full documentation is available at **[beige.mintlify.app](https://beige.mintlify.app)**:
|
|
112
|
+
|
|
113
|
+
| Section | Description |
|
|
114
|
+
|---------|-------------|
|
|
115
|
+
| [**Introduction**](https://beige.mintlify.app/introduction) | What Beige is, why we built it, and how it works |
|
|
116
|
+
| [**Getting Started**](https://beige.mintlify.app/getting-started) | Install and run your first agent |
|
|
117
|
+
| [**The Gateway**](https://beige.mintlify.app/gateway) | Deep dive into architecture and security |
|
|
118
|
+
| [**Agents**](https://beige.mintlify.app/agents) | Configure providers, models, tools, and skills |
|
|
119
|
+
| [**Channels & Tools**](https://beige.mintlify.app/channels-and-tools) | TUI, Telegram, HTTP API, and extensibility |
|
|
120
|
+
|
|
121
|
+
### Reference Documentation
|
|
122
|
+
|
|
123
|
+
- [Configuration Reference](docs/configuration.mdx) — Complete config file reference
|
|
124
|
+
- [Tools Reference](docs/tools.mdx) — Tool packages, launchers, socket protocol
|
|
125
|
+
- [Toolkits Reference](docs/toolkits.mdx) — Installing and creating toolkits
|
|
126
|
+
- [Skills Reference](docs/skills.mdx) — Creating knowledge packages
|
|
127
|
+
- [HTTP API Reference](docs/api.mdx) — Full REST API reference
|
|
128
|
+
- [Security Model](docs/security-model.mdx) — Threat model and defense in depth
|
|
129
|
+
|
|
130
|
+
### Design Documents
|
|
131
|
+
|
|
132
|
+
- [Vision](project/vision.md) — Original design goals
|
|
133
|
+
- [Use Cases](project/usecases.md) — Personal use cases that motivated the project
|
|
134
|
+
|
|
135
|
+
### External Resources
|
|
136
|
+
|
|
137
|
+
- [pi SDK](https://pi.dev) — The LLM SDK that powers Beige
|
|
138
|
+
- [OpenClaw](https://openclaw.ai) — Inspiration for personal agents
|
|
139
|
+
- ["What if you don't need MCP?"](https://mariozechner.at/posts/2025-11-02-what-if-you-dont-need-mcp/) — Why CLI tools beat MCP bloat
|
|
140
|
+
- ["Code Mode"](https://blog.cloudflare.com/code-mode/) — Why LLMs are better at writing code than calling tools
|
|
114
141
|
|
|
115
142
|
## Configuration
|
|
116
143
|
|
package/dist/cli.js
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matthias-hausberger/beige",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2-alpha1",
|
|
4
4
|
"description": "Secure sandboxed agent system",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -21,18 +21,6 @@
|
|
|
21
21
|
"dist",
|
|
22
22
|
"tools"
|
|
23
23
|
],
|
|
24
|
-
"scripts": {
|
|
25
|
-
"beige": "tsx src/cli.ts",
|
|
26
|
-
"build": "tsc",
|
|
27
|
-
"start": "node dist/cli.js",
|
|
28
|
-
"build:sandbox": "docker build -t beige-sandbox:latest ./sandbox",
|
|
29
|
-
"test": "vitest run",
|
|
30
|
-
"test:watch": "vitest",
|
|
31
|
-
"test:coverage": "vitest run --coverage",
|
|
32
|
-
"docs:dev": "cd docs && mintlify dev --port 3333",
|
|
33
|
-
"docs:build": "cd docs && mintlify build",
|
|
34
|
-
"docs:deploy": "cd docs && mintlify deploy"
|
|
35
|
-
},
|
|
36
24
|
"dependencies": {
|
|
37
25
|
"@mariozechner/pi-ai": "^0.56.1",
|
|
38
26
|
"@mariozechner/pi-coding-agent": "latest",
|
|
@@ -72,5 +60,17 @@
|
|
|
72
60
|
"url": "https://github.com/matthias-hausberger/beige/issues"
|
|
73
61
|
},
|
|
74
62
|
"homepage": "https://github.com/matthias-hausberger/beige#readme",
|
|
75
|
-
"license": "MIT"
|
|
76
|
-
|
|
63
|
+
"license": "MIT",
|
|
64
|
+
"scripts": {
|
|
65
|
+
"beige": "tsx src/cli.ts",
|
|
66
|
+
"build": "tsc",
|
|
67
|
+
"start": "node dist/cli.js",
|
|
68
|
+
"build:sandbox": "docker build -t beige-sandbox:latest ./sandbox",
|
|
69
|
+
"test": "vitest run",
|
|
70
|
+
"test:watch": "vitest",
|
|
71
|
+
"test:coverage": "vitest run --coverage",
|
|
72
|
+
"docs:dev": "cd docs && mintlify dev --port 3333",
|
|
73
|
+
"docs:build": "cd docs && mintlify build",
|
|
74
|
+
"docs:deploy": "cd docs && mintlify deploy"
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loader.spec.d.ts","sourceRoot":"","sources":["../../src/config/loader.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|
2
|
-
import { writeFileSync, mkdirSync, rmSync } from "fs";
|
|
3
|
-
import { join } from "path";
|
|
4
|
-
import { tmpdir } from "os";
|
|
5
|
-
import { loadConfig } from "./loader.js";
|
|
6
|
-
describe("loadConfig", () => {
|
|
7
|
-
let tempDir;
|
|
8
|
-
beforeEach(() => {
|
|
9
|
-
tempDir = join(tmpdir(), `beige-test-${Date.now()}`);
|
|
10
|
-
mkdirSync(tempDir, { recursive: true });
|
|
11
|
-
});
|
|
12
|
-
afterEach(() => {
|
|
13
|
-
rmSync(tempDir, { recursive: true, force: true });
|
|
14
|
-
});
|
|
15
|
-
describe("JSON5 parsing", () => {
|
|
16
|
-
it("parses valid JSON5 with comments", () => {
|
|
17
|
-
const configPath = join(tempDir, "config.json5");
|
|
18
|
-
writeFileSync(configPath, `
|
|
19
|
-
{
|
|
20
|
-
// This is a comment
|
|
21
|
-
llm: {
|
|
22
|
-
providers: {
|
|
23
|
-
anthropic: { apiKey: "test-key" },
|
|
24
|
-
},
|
|
25
|
-
},
|
|
26
|
-
tools: {},
|
|
27
|
-
agents: {
|
|
28
|
-
/* Multi-line
|
|
29
|
-
comment */
|
|
30
|
-
assistant: {
|
|
31
|
-
model: { provider: "anthropic", model: "claude-sonnet-4-20250514" },
|
|
32
|
-
tools: [],
|
|
33
|
-
},
|
|
34
|
-
},
|
|
35
|
-
channels: {},
|
|
36
|
-
}
|
|
37
|
-
`);
|
|
38
|
-
const config = loadConfig(configPath);
|
|
39
|
-
expect(config.llm.providers.anthropic.apiKey).toBe("test-key");
|
|
40
|
-
expect(config.agents.assistant).toBeDefined();
|
|
41
|
-
});
|
|
42
|
-
it("parses unquoted keys", () => {
|
|
43
|
-
const configPath = join(tempDir, "config.json5");
|
|
44
|
-
writeFileSync(configPath, `
|
|
45
|
-
{
|
|
46
|
-
llm: { providers: { anthropic: { apiKey: "test" } } },
|
|
47
|
-
tools: {},
|
|
48
|
-
agents: { assistant: { model: { provider: "anthropic", model: "claude" }, tools: [] } },
|
|
49
|
-
channels: {},
|
|
50
|
-
}
|
|
51
|
-
`);
|
|
52
|
-
const config = loadConfig(configPath);
|
|
53
|
-
expect(config.llm.providers.anthropic).toBeDefined();
|
|
54
|
-
});
|
|
55
|
-
it("parses trailing commas", () => {
|
|
56
|
-
const configPath = join(tempDir, "config.json5");
|
|
57
|
-
writeFileSync(configPath, `
|
|
58
|
-
{
|
|
59
|
-
llm: { providers: { anthropic: { apiKey: "test", }, }, },
|
|
60
|
-
tools: {},
|
|
61
|
-
agents: {
|
|
62
|
-
assistant: { model: { provider: "anthropic", model: "claude", }, tools: [], },
|
|
63
|
-
},
|
|
64
|
-
channels: {},
|
|
65
|
-
}
|
|
66
|
-
`);
|
|
67
|
-
const config = loadConfig(configPath);
|
|
68
|
-
expect(config.llm.providers.anthropic.apiKey).toBe("test");
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
describe("environment variable resolution", () => {
|
|
72
|
-
it("resolves ${ENV_VAR} references", () => {
|
|
73
|
-
process.env.TEST_API_KEY = "my-secret-key";
|
|
74
|
-
const configPath = join(tempDir, "config.json5");
|
|
75
|
-
writeFileSync(configPath, `
|
|
76
|
-
{
|
|
77
|
-
llm: { providers: { anthropic: { apiKey: "\${TEST_API_KEY}" } } },
|
|
78
|
-
tools: {},
|
|
79
|
-
agents: { assistant: { model: { provider: "anthropic", model: "claude" }, tools: [] } },
|
|
80
|
-
channels: {},
|
|
81
|
-
}
|
|
82
|
-
`);
|
|
83
|
-
const config = loadConfig(configPath);
|
|
84
|
-
expect(config.llm.providers.anthropic.apiKey).toBe("my-secret-key");
|
|
85
|
-
delete process.env.TEST_API_KEY;
|
|
86
|
-
});
|
|
87
|
-
it("resolves env vars in nested objects", () => {
|
|
88
|
-
process.env.TEST_TOKEN = "bot-token-123";
|
|
89
|
-
const configPath = join(tempDir, "config.json5");
|
|
90
|
-
writeFileSync(configPath, `
|
|
91
|
-
{
|
|
92
|
-
llm: { providers: { anthropic: { apiKey: "test" } } },
|
|
93
|
-
tools: {},
|
|
94
|
-
agents: { assistant: { model: { provider: "anthropic", model: "claude" }, tools: [] } },
|
|
95
|
-
channels: {
|
|
96
|
-
telegram: {
|
|
97
|
-
enabled: true,
|
|
98
|
-
token: "\${TEST_TOKEN}",
|
|
99
|
-
allowedUsers: [123],
|
|
100
|
-
agentMapping: { default: "assistant" },
|
|
101
|
-
},
|
|
102
|
-
},
|
|
103
|
-
}
|
|
104
|
-
`);
|
|
105
|
-
const config = loadConfig(configPath);
|
|
106
|
-
expect(config.channels.telegram?.token).toBe("bot-token-123");
|
|
107
|
-
delete process.env.TEST_TOKEN;
|
|
108
|
-
});
|
|
109
|
-
it("throws when env var is not set", () => {
|
|
110
|
-
delete process.env.NONEXISTENT_VAR;
|
|
111
|
-
const configPath = join(tempDir, "config.json5");
|
|
112
|
-
writeFileSync(configPath, `
|
|
113
|
-
{
|
|
114
|
-
llm: { providers: { anthropic: { apiKey: "\${NONEXISTENT_VAR}" } } },
|
|
115
|
-
tools: {},
|
|
116
|
-
agents: { assistant: { model: { provider: "anthropic", model: "claude" }, tools: [] } },
|
|
117
|
-
channels: {},
|
|
118
|
-
}
|
|
119
|
-
`);
|
|
120
|
-
expect(() => loadConfig(configPath)).toThrow("NONEXISTENT_VAR");
|
|
121
|
-
});
|
|
122
|
-
it("resolves env vars in arrays", () => {
|
|
123
|
-
process.env.ALLOWED_USER = "999888";
|
|
124
|
-
const configPath = join(tempDir, "config.json5");
|
|
125
|
-
writeFileSync(configPath, `
|
|
126
|
-
{
|
|
127
|
-
llm: { providers: { anthropic: { apiKey: "test" } } },
|
|
128
|
-
tools: {},
|
|
129
|
-
agents: { assistant: { model: { provider: "anthropic", model: "claude" }, tools: [] } },
|
|
130
|
-
channels: {
|
|
131
|
-
telegram: {
|
|
132
|
-
enabled: true,
|
|
133
|
-
token: "test",
|
|
134
|
-
allowedUsers: [123, "\${ALLOWED_USER}"],
|
|
135
|
-
agentMapping: { default: "assistant" },
|
|
136
|
-
},
|
|
137
|
-
},
|
|
138
|
-
}
|
|
139
|
-
`);
|
|
140
|
-
const config = loadConfig(configPath);
|
|
141
|
-
// Note: JSON5 parses strings in number arrays as strings
|
|
142
|
-
// The actual validation would convert these
|
|
143
|
-
expect(config.channels.telegram?.allowedUsers).toContain("999888");
|
|
144
|
-
delete process.env.ALLOWED_USER;
|
|
145
|
-
});
|
|
146
|
-
});
|
|
147
|
-
describe("path resolution", () => {
|
|
148
|
-
it("resolves relative tool paths against config directory", () => {
|
|
149
|
-
const configPath = join(tempDir, "config.json5");
|
|
150
|
-
writeFileSync(configPath, `
|
|
151
|
-
{
|
|
152
|
-
llm: { providers: { anthropic: { apiKey: "test" } } },
|
|
153
|
-
tools: {
|
|
154
|
-
mytool: { path: "./tools/mytool", target: "gateway" },
|
|
155
|
-
},
|
|
156
|
-
agents: { assistant: { model: { provider: "anthropic", model: "claude" }, tools: ["mytool"] } },
|
|
157
|
-
channels: {},
|
|
158
|
-
}
|
|
159
|
-
`);
|
|
160
|
-
const config = loadConfig(configPath);
|
|
161
|
-
expect(config.tools.mytool.path).toBe(join(tempDir, "tools/mytool"));
|
|
162
|
-
});
|
|
163
|
-
it("keeps absolute tool paths unchanged", () => {
|
|
164
|
-
const configPath = join(tempDir, "config.json5");
|
|
165
|
-
writeFileSync(configPath, `
|
|
166
|
-
{
|
|
167
|
-
llm: { providers: { anthropic: { apiKey: "test" } } },
|
|
168
|
-
tools: {
|
|
169
|
-
mytool: { path: "/absolute/path/to/tool", target: "gateway" },
|
|
170
|
-
},
|
|
171
|
-
agents: { assistant: { model: { provider: "anthropic", model: "claude" }, tools: ["mytool"] } },
|
|
172
|
-
channels: {},
|
|
173
|
-
}
|
|
174
|
-
`);
|
|
175
|
-
const config = loadConfig(configPath);
|
|
176
|
-
expect(config.tools.mytool.path).toBe("/absolute/path/to/tool");
|
|
177
|
-
});
|
|
178
|
-
});
|
|
179
|
-
describe("validation", () => {
|
|
180
|
-
it("validates config schema after loading", () => {
|
|
181
|
-
const configPath = join(tempDir, "config.json5");
|
|
182
|
-
writeFileSync(configPath, `
|
|
183
|
-
{
|
|
184
|
-
llm: { providers: {} },
|
|
185
|
-
tools: {},
|
|
186
|
-
agents: {},
|
|
187
|
-
channels: {},
|
|
188
|
-
}
|
|
189
|
-
`);
|
|
190
|
-
// Should not throw - empty providers/agents is valid
|
|
191
|
-
expect(() => loadConfig(configPath)).not.toThrow();
|
|
192
|
-
});
|
|
193
|
-
});
|
|
194
|
-
});
|
|
195
|
-
//# sourceMappingURL=loader.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loader.spec.js","sourceRoot":"","sources":["../../src/config/loader.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema.spec.d.ts","sourceRoot":"","sources":["../../src/config/schema.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from "vitest";
|
|
2
|
-
import { validateConfig } from "./schema.js";
|
|
3
|
-
import { createMinimalConfig, createFullConfig } from "../test/fixtures.js";
|
|
4
|
-
describe("validateConfig", () => {
|
|
5
|
-
describe("valid configs", () => {
|
|
6
|
-
it("accepts minimal valid config", () => {
|
|
7
|
-
const config = createMinimalConfig();
|
|
8
|
-
expect(() => validateConfig(config)).not.toThrow();
|
|
9
|
-
});
|
|
10
|
-
it("accepts full config with tools and multiple agents", () => {
|
|
11
|
-
const config = createFullConfig();
|
|
12
|
-
expect(() => validateConfig(config)).not.toThrow();
|
|
13
|
-
});
|
|
14
|
-
it("accepts config with fallback models", () => {
|
|
15
|
-
const config = createMinimalConfig({
|
|
16
|
-
agents: {
|
|
17
|
-
assistant: {
|
|
18
|
-
model: { provider: "anthropic", model: "claude-sonnet-4-20250514" },
|
|
19
|
-
fallbackModels: [
|
|
20
|
-
{ provider: "openai", model: "gpt-4o" },
|
|
21
|
-
],
|
|
22
|
-
tools: [],
|
|
23
|
-
},
|
|
24
|
-
},
|
|
25
|
-
});
|
|
26
|
-
expect(() => validateConfig(config)).not.toThrow();
|
|
27
|
-
});
|
|
28
|
-
it("accepts config with thinking level", () => {
|
|
29
|
-
const config = createMinimalConfig({
|
|
30
|
-
agents: {
|
|
31
|
-
assistant: {
|
|
32
|
-
model: {
|
|
33
|
-
provider: "anthropic",
|
|
34
|
-
model: "claude-sonnet-4-20250514",
|
|
35
|
-
thinkingLevel: "high",
|
|
36
|
-
},
|
|
37
|
-
tools: [],
|
|
38
|
-
},
|
|
39
|
-
},
|
|
40
|
-
});
|
|
41
|
-
expect(() => validateConfig(config)).not.toThrow();
|
|
42
|
-
});
|
|
43
|
-
it("accepts config with sandbox options", () => {
|
|
44
|
-
const config = createMinimalConfig({
|
|
45
|
-
agents: {
|
|
46
|
-
assistant: {
|
|
47
|
-
model: { provider: "anthropic", model: "claude-sonnet-4-20250514" },
|
|
48
|
-
tools: [],
|
|
49
|
-
sandbox: {
|
|
50
|
-
image: "custom-sandbox:v1",
|
|
51
|
-
extraMounts: { "/host/path": "/container/path" },
|
|
52
|
-
extraEnv: { DEBUG: "true" },
|
|
53
|
-
},
|
|
54
|
-
},
|
|
55
|
-
},
|
|
56
|
-
});
|
|
57
|
-
expect(() => validateConfig(config)).not.toThrow();
|
|
58
|
-
});
|
|
59
|
-
it("accepts config with gateway settings", () => {
|
|
60
|
-
const config = createMinimalConfig({
|
|
61
|
-
gateway: {
|
|
62
|
-
host: "0.0.0.0",
|
|
63
|
-
port: 8080,
|
|
64
|
-
logFile: "/var/log/beige.log",
|
|
65
|
-
},
|
|
66
|
-
});
|
|
67
|
-
expect(() => validateConfig(config)).not.toThrow();
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
describe("missing required fields", () => {
|
|
71
|
-
it("throws when llm.providers is missing", () => {
|
|
72
|
-
const config = { ...createMinimalConfig(), llm: {} };
|
|
73
|
-
expect(() => validateConfig(config)).toThrow("llm.providers is required");
|
|
74
|
-
});
|
|
75
|
-
it("throws when tools is missing", () => {
|
|
76
|
-
const { tools, ...config } = createMinimalConfig();
|
|
77
|
-
expect(() => validateConfig(config)).toThrow("tools is required");
|
|
78
|
-
});
|
|
79
|
-
it("throws when agents is missing", () => {
|
|
80
|
-
const { agents, ...config } = createMinimalConfig();
|
|
81
|
-
expect(() => validateConfig(config)).toThrow("agents is required");
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
describe("agent validation", () => {
|
|
85
|
-
it("throws when agent model.provider is missing", () => {
|
|
86
|
-
const config = createMinimalConfig({
|
|
87
|
-
agents: {
|
|
88
|
-
assistant: {
|
|
89
|
-
model: { provider: "", model: "claude-sonnet-4-20250514" },
|
|
90
|
-
tools: [],
|
|
91
|
-
},
|
|
92
|
-
},
|
|
93
|
-
});
|
|
94
|
-
expect(() => validateConfig(config)).toThrow("model requires provider");
|
|
95
|
-
});
|
|
96
|
-
it("throws when agent model.model is missing", () => {
|
|
97
|
-
const config = createMinimalConfig({
|
|
98
|
-
agents: {
|
|
99
|
-
assistant: {
|
|
100
|
-
model: { provider: "anthropic", model: "" },
|
|
101
|
-
tools: [],
|
|
102
|
-
},
|
|
103
|
-
},
|
|
104
|
-
});
|
|
105
|
-
expect(() => validateConfig(config)).toThrow("model requires provider and model");
|
|
106
|
-
});
|
|
107
|
-
it("throws when agent references unknown tool", () => {
|
|
108
|
-
const config = createMinimalConfig({
|
|
109
|
-
agents: {
|
|
110
|
-
assistant: {
|
|
111
|
-
model: { provider: "anthropic", model: "claude-sonnet-4-20250514" },
|
|
112
|
-
tools: ["nonexistent-tool"],
|
|
113
|
-
},
|
|
114
|
-
},
|
|
115
|
-
});
|
|
116
|
-
expect(() => validateConfig(config)).toThrow("unknown tool 'nonexistent-tool'");
|
|
117
|
-
});
|
|
118
|
-
it("throws when agent references unknown skill", () => {
|
|
119
|
-
const config = createMinimalConfig({
|
|
120
|
-
skills: {
|
|
121
|
-
"code-review": { path: "/skills/code-review" },
|
|
122
|
-
},
|
|
123
|
-
agents: {
|
|
124
|
-
assistant: {
|
|
125
|
-
model: { provider: "anthropic", model: "claude-sonnet-4-20250514" },
|
|
126
|
-
tools: [],
|
|
127
|
-
skills: ["nonexistent-skill"],
|
|
128
|
-
},
|
|
129
|
-
},
|
|
130
|
-
});
|
|
131
|
-
expect(() => validateConfig(config)).toThrow("unknown skill 'nonexistent-skill'");
|
|
132
|
-
});
|
|
133
|
-
it("accepts config with skills", () => {
|
|
134
|
-
const config = createMinimalConfig({
|
|
135
|
-
skills: {
|
|
136
|
-
"code-review": { path: "/skills/code-review" },
|
|
137
|
-
"testing": { path: "/skills/testing" },
|
|
138
|
-
},
|
|
139
|
-
agents: {
|
|
140
|
-
assistant: {
|
|
141
|
-
model: { provider: "anthropic", model: "claude-sonnet-4-20250514" },
|
|
142
|
-
tools: [],
|
|
143
|
-
skills: ["code-review", "testing"],
|
|
144
|
-
},
|
|
145
|
-
},
|
|
146
|
-
});
|
|
147
|
-
expect(() => validateConfig(config)).not.toThrow();
|
|
148
|
-
});
|
|
149
|
-
});
|
|
150
|
-
describe("channel validation", () => {
|
|
151
|
-
it("throws when telegram agentMapping.default references unknown agent", () => {
|
|
152
|
-
const config = createMinimalConfig({
|
|
153
|
-
channels: {
|
|
154
|
-
telegram: {
|
|
155
|
-
enabled: true,
|
|
156
|
-
token: "test-token",
|
|
157
|
-
allowedUsers: [123],
|
|
158
|
-
agentMapping: { default: "nonexistent-agent" },
|
|
159
|
-
},
|
|
160
|
-
},
|
|
161
|
-
});
|
|
162
|
-
expect(() => validateConfig(config)).toThrow("unknown agent 'nonexistent-agent'");
|
|
163
|
-
});
|
|
164
|
-
it("accepts disabled telegram channel even with invalid agent mapping", () => {
|
|
165
|
-
const config = createMinimalConfig({
|
|
166
|
-
channels: {
|
|
167
|
-
telegram: {
|
|
168
|
-
enabled: false,
|
|
169
|
-
token: "test-token",
|
|
170
|
-
allowedUsers: [123],
|
|
171
|
-
agentMapping: { default: "nonexistent-agent" },
|
|
172
|
-
},
|
|
173
|
-
},
|
|
174
|
-
});
|
|
175
|
-
// Disabled channels are not validated for agent references
|
|
176
|
-
expect(() => validateConfig(config)).not.toThrow();
|
|
177
|
-
});
|
|
178
|
-
});
|
|
179
|
-
});
|
|
180
|
-
//# sourceMappingURL=schema.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema.spec.js","sourceRoot":"","sources":["../../src/config/schema.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api.spec.d.ts","sourceRoot":"","sources":["../../src/gateway/api.spec.ts"],"names":[],"mappings":""}
|