@oni.bot/core 0.8.0 → 1.0.1
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/CHANGELOG.md +15 -0
- package/README.md +59 -373
- package/dist/checkpointers/sqlite.d.ts.map +1 -1
- package/dist/checkpointers/sqlite.js +23 -8
- package/dist/checkpointers/sqlite.js.map +1 -1
- package/dist/cli/build.d.ts +11 -0
- package/dist/cli/build.d.ts.map +1 -0
- package/dist/cli/build.js +61 -0
- package/dist/cli/build.js.map +1 -0
- package/dist/cli/dev.d.ts +5 -0
- package/dist/cli/dev.d.ts.map +1 -0
- package/dist/cli/dev.js +54 -0
- package/dist/cli/dev.js.map +1 -0
- package/dist/cli/index.js +16 -27
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.d.ts +2 -0
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +18 -1
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/inspect.d.ts +5 -0
- package/dist/cli/inspect.d.ts.map +1 -0
- package/dist/cli/inspect.js +85 -0
- package/dist/cli/inspect.js.map +1 -0
- package/dist/cli/router.d.ts +14 -0
- package/dist/cli/router.d.ts.map +1 -0
- package/dist/cli/router.js +107 -0
- package/dist/cli/router.js.map +1 -0
- package/dist/cli/run.d.ts +5 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +53 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/templates.d.ts +1 -0
- package/dist/cli/templates.d.ts.map +1 -1
- package/dist/cli/templates.js +106 -66
- package/dist/cli/templates.js.map +1 -1
- package/dist/cli/test.d.ts +3 -0
- package/dist/cli/test.d.ts.map +1 -0
- package/dist/cli/test.js +29 -0
- package/dist/cli/test.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +3 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +37 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +180 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/types.d.ts +74 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +5 -0
- package/dist/config/types.js.map +1 -0
- package/dist/coordination/pubsub.d.ts +4 -0
- package/dist/coordination/pubsub.d.ts.map +1 -1
- package/dist/coordination/pubsub.js +8 -0
- package/dist/coordination/pubsub.js.map +1 -1
- package/dist/coordination/request-reply.d.ts +3 -1
- package/dist/coordination/request-reply.d.ts.map +1 -1
- package/dist/coordination/request-reply.js +11 -2
- package/dist/coordination/request-reply.js.map +1 -1
- package/dist/errors.d.ts +7 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +18 -3
- package/dist/errors.js.map +1 -1
- package/dist/events/bridge.d.ts +17 -0
- package/dist/events/bridge.d.ts.map +1 -0
- package/dist/events/bridge.js +67 -0
- package/dist/events/bridge.js.map +1 -0
- package/dist/events/bus.d.ts +9 -0
- package/dist/events/bus.d.ts.map +1 -1
- package/dist/events/bus.js +39 -4
- package/dist/events/bus.js.map +1 -1
- package/dist/events/index.d.ts +2 -1
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +2 -0
- package/dist/events/index.js.map +1 -1
- package/dist/events/types.d.ts +123 -1
- package/dist/events/types.d.ts.map +1 -1
- package/dist/graph.d.ts.map +1 -1
- package/dist/graph.js +16 -8
- package/dist/graph.js.map +1 -1
- package/dist/guardrails/types.d.ts +1 -1
- package/dist/guardrails/types.d.ts.map +1 -1
- package/dist/harness/agent-loop.d.ts.map +1 -1
- package/dist/harness/agent-loop.js +226 -29
- package/dist/harness/agent-loop.js.map +1 -1
- package/dist/harness/context-compactor.d.ts +21 -2
- package/dist/harness/context-compactor.d.ts.map +1 -1
- package/dist/harness/context-compactor.js +45 -6
- package/dist/harness/context-compactor.js.map +1 -1
- package/dist/harness/hooks-engine.d.ts +7 -1
- package/dist/harness/hooks-engine.d.ts.map +1 -1
- package/dist/harness/hooks-engine.js.map +1 -1
- package/dist/harness/index.d.ts +3 -2
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +2 -0
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/skill-loader.d.ts +14 -1
- package/dist/harness/skill-loader.d.ts.map +1 -1
- package/dist/harness/skill-loader.js +33 -3
- package/dist/harness/skill-loader.js.map +1 -1
- package/dist/harness/types.d.ts +24 -2
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/harness/validate-args.d.ts +16 -0
- package/dist/harness/validate-args.d.ts.map +1 -0
- package/dist/harness/validate-args.js +132 -0
- package/dist/harness/validate-args.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -12
- package/dist/index.js.map +1 -1
- package/dist/internal/timeout.d.ts +2 -0
- package/dist/internal/timeout.d.ts.map +1 -0
- package/dist/internal/timeout.js +16 -0
- package/dist/internal/timeout.js.map +1 -0
- package/dist/lsp/client.d.ts +70 -0
- package/dist/lsp/client.d.ts.map +1 -0
- package/dist/lsp/client.js +421 -0
- package/dist/lsp/client.js.map +1 -0
- package/dist/lsp/index.d.ts +77 -0
- package/dist/lsp/index.d.ts.map +1 -0
- package/dist/lsp/index.js +183 -0
- package/dist/lsp/index.js.map +1 -0
- package/dist/lsp/servers.d.ts +48 -0
- package/dist/lsp/servers.d.ts.map +1 -0
- package/dist/lsp/servers.js +108 -0
- package/dist/lsp/servers.js.map +1 -0
- package/dist/lsp/types.d.ts +142 -0
- package/dist/lsp/types.d.ts.map +1 -0
- package/dist/lsp/types.js +16 -0
- package/dist/lsp/types.js.map +1 -0
- package/dist/mcp/client.d.ts +56 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +170 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/convert.d.ts +26 -0
- package/dist/mcp/convert.d.ts.map +1 -0
- package/dist/mcp/convert.js +56 -0
- package/dist/mcp/convert.js.map +1 -0
- package/dist/mcp/index.d.ts +21 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +19 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/transport.d.ts +56 -0
- package/dist/mcp/transport.d.ts.map +1 -0
- package/dist/mcp/transport.js +204 -0
- package/dist/mcp/transport.js.map +1 -0
- package/dist/mcp/types.d.ts +96 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +11 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/models/anthropic.d.ts.map +1 -1
- package/dist/models/anthropic.js +78 -41
- package/dist/models/anthropic.js.map +1 -1
- package/dist/models/google.d.ts.map +1 -1
- package/dist/models/google.js +47 -46
- package/dist/models/google.js.map +1 -1
- package/dist/models/http-error.d.ts +16 -0
- package/dist/models/http-error.d.ts.map +1 -0
- package/dist/models/http-error.js +67 -0
- package/dist/models/http-error.js.map +1 -0
- package/dist/models/index.d.ts +3 -0
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +2 -0
- package/dist/models/index.js.map +1 -1
- package/dist/models/ollama.d.ts.map +1 -1
- package/dist/models/ollama.js +4 -3
- package/dist/models/ollama.js.map +1 -1
- package/dist/models/openai.d.ts.map +1 -1
- package/dist/models/openai.js +36 -44
- package/dist/models/openai.js.map +1 -1
- package/dist/models/openrouter.d.ts +13 -0
- package/dist/models/openrouter.d.ts.map +1 -1
- package/dist/models/openrouter.js +86 -47
- package/dist/models/openrouter.js.map +1 -1
- package/dist/models/sse.d.ts +9 -0
- package/dist/models/sse.d.ts.map +1 -0
- package/dist/models/sse.js +45 -0
- package/dist/models/sse.js.map +1 -0
- package/dist/models/types.d.ts +10 -0
- package/dist/models/types.d.ts.map +1 -1
- package/dist/pregel.d.ts +4 -0
- package/dist/pregel.d.ts.map +1 -1
- package/dist/pregel.js +121 -54
- package/dist/pregel.js.map +1 -1
- package/dist/retry.d.ts.map +1 -1
- package/dist/retry.js +10 -3
- package/dist/retry.js.map +1 -1
- package/dist/store/index.d.ts +3 -0
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +17 -0
- package/dist/store/index.js.map +1 -1
- package/dist/streaming.d.ts +4 -1
- package/dist/streaming.d.ts.map +1 -1
- package/dist/streaming.js +21 -7
- package/dist/streaming.js.map +1 -1
- package/dist/swarm/graph.d.ts +81 -2
- package/dist/swarm/graph.d.ts.map +1 -1
- package/dist/swarm/graph.js +517 -32
- package/dist/swarm/graph.js.map +1 -1
- package/dist/swarm/index.d.ts +10 -2
- package/dist/swarm/index.d.ts.map +1 -1
- package/dist/swarm/index.js +6 -1
- package/dist/swarm/index.js.map +1 -1
- package/dist/swarm/mermaid.d.ts +10 -0
- package/dist/swarm/mermaid.d.ts.map +1 -0
- package/dist/swarm/mermaid.js +64 -0
- package/dist/swarm/mermaid.js.map +1 -0
- package/dist/swarm/pool.d.ts +9 -1
- package/dist/swarm/pool.d.ts.map +1 -1
- package/dist/swarm/pool.js +58 -10
- package/dist/swarm/pool.js.map +1 -1
- package/dist/swarm/registry.d.ts +11 -1
- package/dist/swarm/registry.d.ts.map +1 -1
- package/dist/swarm/registry.js +17 -3
- package/dist/swarm/registry.js.map +1 -1
- package/dist/swarm/scaling.d.ts +95 -0
- package/dist/swarm/scaling.d.ts.map +1 -0
- package/dist/swarm/scaling.js +214 -0
- package/dist/swarm/scaling.js.map +1 -0
- package/dist/swarm/snapshot.d.ts +51 -0
- package/dist/swarm/snapshot.d.ts.map +1 -0
- package/dist/swarm/snapshot.js +115 -0
- package/dist/swarm/snapshot.js.map +1 -0
- package/dist/swarm/supervisor.d.ts.map +1 -1
- package/dist/swarm/supervisor.js +82 -0
- package/dist/swarm/supervisor.js.map +1 -1
- package/dist/swarm/tracer.d.ts +57 -0
- package/dist/swarm/tracer.d.ts.map +1 -0
- package/dist/swarm/tracer.js +138 -0
- package/dist/swarm/tracer.js.map +1 -0
- package/dist/swarm/types.d.ts +23 -1
- package/dist/swarm/types.d.ts.map +1 -1
- package/dist/swarm/types.js.map +1 -1
- package/dist/tools/types.d.ts +2 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/package.json +160 -141
package/dist/cli/templates.js
CHANGED
|
@@ -14,7 +14,7 @@ export const templates = {
|
|
|
14
14
|
test: "vitest run",
|
|
15
15
|
},
|
|
16
16
|
dependencies: {
|
|
17
|
-
"@oni.bot/core": "^0.
|
|
17
|
+
"@oni.bot/core": "^0.8.0",
|
|
18
18
|
},
|
|
19
19
|
devDependencies: {
|
|
20
20
|
tsx: "^4.0.0",
|
|
@@ -42,77 +42,117 @@ export const templates = {
|
|
|
42
42
|
return JSON.stringify(config, null, 2) + "\n";
|
|
43
43
|
},
|
|
44
44
|
entrypoint() {
|
|
45
|
-
return `import { StateGraph, START, END, lastValue, appendList } from "@oni.bot/core";
|
|
46
|
-
import { MemoryCheckpointer } from "@oni.bot/core";
|
|
47
|
-
import type { Message } from "@oni.bot/core";
|
|
48
|
-
|
|
49
|
-
// Define your state
|
|
50
|
-
type AgentState = {
|
|
51
|
-
messages: Message[];
|
|
52
|
-
result: string;
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
// Build the graph
|
|
56
|
-
const graph = new StateGraph<AgentState>({
|
|
57
|
-
channels: {
|
|
58
|
-
messages: appendList<Message>(),
|
|
59
|
-
result: lastValue(() => ""),
|
|
60
|
-
},
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
// Add nodes
|
|
64
|
-
graph.addNode("process", async (state) => {
|
|
65
|
-
const lastMessage = state.messages[state.messages.length - 1];
|
|
66
|
-
return {
|
|
67
|
-
result: \`Processed: \${lastMessage?.content ?? "no input"}\`,
|
|
68
|
-
};
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
// Wire edges
|
|
72
|
-
graph.addEdge(START, "process");
|
|
73
|
-
graph.addEdge("process", END);
|
|
74
|
-
|
|
75
|
-
// Compile with checkpointing
|
|
76
|
-
const app = graph.compile({
|
|
77
|
-
checkpointer: new MemoryCheckpointer(),
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
// Run it
|
|
81
|
-
const result = await app.invoke(
|
|
82
|
-
{ messages: [{ id: "1", role: "user", content: "Hello, ONI!" }] },
|
|
83
|
-
{ threadId: "demo-1" },
|
|
84
|
-
);
|
|
85
|
-
|
|
86
|
-
console.log("Result:", result.result);
|
|
45
|
+
return `import { StateGraph, START, END, lastValue, appendList } from "@oni.bot/core";
|
|
46
|
+
import { MemoryCheckpointer } from "@oni.bot/core";
|
|
47
|
+
import type { Message } from "@oni.bot/core";
|
|
48
|
+
|
|
49
|
+
// Define your state
|
|
50
|
+
type AgentState = {
|
|
51
|
+
messages: Message[];
|
|
52
|
+
result: string;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
// Build the graph
|
|
56
|
+
const graph = new StateGraph<AgentState>({
|
|
57
|
+
channels: {
|
|
58
|
+
messages: appendList<Message>(),
|
|
59
|
+
result: lastValue(() => ""),
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
// Add nodes
|
|
64
|
+
graph.addNode("process", async (state) => {
|
|
65
|
+
const lastMessage = state.messages[state.messages.length - 1];
|
|
66
|
+
return {
|
|
67
|
+
result: \`Processed: \${lastMessage?.content ?? "no input"}\`,
|
|
68
|
+
};
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
// Wire edges
|
|
72
|
+
graph.addEdge(START, "process");
|
|
73
|
+
graph.addEdge("process", END);
|
|
74
|
+
|
|
75
|
+
// Compile with checkpointing
|
|
76
|
+
const app = graph.compile({
|
|
77
|
+
checkpointer: new MemoryCheckpointer(),
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
// Run it
|
|
81
|
+
const result = await app.invoke(
|
|
82
|
+
{ messages: [{ id: "1", role: "user", content: "Hello, ONI!" }] },
|
|
83
|
+
{ threadId: "demo-1" },
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
console.log("Result:", result.result);
|
|
87
87
|
`;
|
|
88
88
|
},
|
|
89
89
|
test() {
|
|
90
|
-
return `import { describe, it, expect } from "vitest";
|
|
91
|
-
import { StateGraph, START, END, lastValue } from "@oni.bot/core";
|
|
92
|
-
import { createTestHarness } from "@oni.bot/core/testing";
|
|
93
|
-
|
|
94
|
-
describe("my agent", () => {
|
|
95
|
-
it("processes input", async () => {
|
|
96
|
-
type S = { value: string };
|
|
97
|
-
const graph = new StateGraph<S>({
|
|
98
|
-
channels: { value: lastValue(() => "") },
|
|
99
|
-
});
|
|
100
|
-
graph.addNode("echo", async (s) => ({ value: s.value + "!" }));
|
|
101
|
-
graph.addEdge(START, "echo");
|
|
102
|
-
graph.addEdge("echo", END);
|
|
103
|
-
|
|
104
|
-
const harness = createTestHarness(graph);
|
|
105
|
-
const result = await harness.invoke({ value: "test" });
|
|
106
|
-
expect(result.value).toBe("test!");
|
|
107
|
-
});
|
|
108
|
-
});
|
|
90
|
+
return `import { describe, it, expect } from "vitest";
|
|
91
|
+
import { StateGraph, START, END, lastValue } from "@oni.bot/core";
|
|
92
|
+
import { createTestHarness } from "@oni.bot/core/testing";
|
|
93
|
+
|
|
94
|
+
describe("my agent", () => {
|
|
95
|
+
it("processes input", async () => {
|
|
96
|
+
type S = { value: string };
|
|
97
|
+
const graph = new StateGraph<S>({
|
|
98
|
+
channels: { value: lastValue(() => "") },
|
|
99
|
+
});
|
|
100
|
+
graph.addNode("echo", async (s) => ({ value: s.value + "!" }));
|
|
101
|
+
graph.addEdge(START, "echo");
|
|
102
|
+
graph.addEdge("echo", END);
|
|
103
|
+
|
|
104
|
+
const harness = createTestHarness(graph);
|
|
105
|
+
const result = await harness.invoke({ value: "test" });
|
|
106
|
+
expect(result.value).toBe("test!");
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
`;
|
|
110
|
+
},
|
|
111
|
+
harnessAgent() {
|
|
112
|
+
return `import { ONIHarness } from "@oni.bot/core/harness";
|
|
113
|
+
import { anthropic } from "@oni.bot/core/models";
|
|
114
|
+
import { defineTool } from "@oni.bot/core/tools";
|
|
115
|
+
|
|
116
|
+
const model = anthropic("claude-sonnet-4-20250514");
|
|
117
|
+
const fastModel = anthropic("claude-haiku-4-5-20251001");
|
|
118
|
+
|
|
119
|
+
const greetTool = defineTool({
|
|
120
|
+
name: "greet",
|
|
121
|
+
description: "Generate a greeting for a person",
|
|
122
|
+
schema: {
|
|
123
|
+
type: "object",
|
|
124
|
+
properties: { name: { type: "string" } },
|
|
125
|
+
required: ["name"],
|
|
126
|
+
},
|
|
127
|
+
execute: async (input: { name: string }) => \`Hello, \${input.name}!\`,
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
const harness = ONIHarness.create({
|
|
131
|
+
model,
|
|
132
|
+
fastModel,
|
|
133
|
+
soul: "You are a helpful assistant. Use tools when needed.",
|
|
134
|
+
sharedTools: [greetTool],
|
|
135
|
+
maxTurns: 5,
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
async function main() {
|
|
139
|
+
const prompt = process.argv[2] ?? "Greet the user with a warm welcome";
|
|
140
|
+
console.log("Running agent...");
|
|
141
|
+
|
|
142
|
+
for await (const msg of harness.run(prompt, { name: "assistant" })) {
|
|
143
|
+
if (msg.type === "assistant") console.log("[assistant]", msg.content);
|
|
144
|
+
if (msg.type === "result") console.log("\\nResult:", msg.content);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
main().catch(console.error);
|
|
109
149
|
`;
|
|
110
150
|
},
|
|
111
151
|
gitignore() {
|
|
112
|
-
return `node_modules/
|
|
113
|
-
dist/
|
|
114
|
-
*.js.map
|
|
115
|
-
.env
|
|
152
|
+
return `node_modules/
|
|
153
|
+
dist/
|
|
154
|
+
*.js.map
|
|
155
|
+
.env
|
|
116
156
|
`;
|
|
117
157
|
},
|
|
118
158
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/cli/templates.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,wCAAwC;AACxC,+DAA+D;AAE/D,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,WAAW,CAAC,IAAY;QACtB,MAAM,GAAG,GAAG;YACV,IAAI;YACJ,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,GAAG,EAAE,wBAAwB;gBAC7B,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,oBAAoB;gBAC3B,IAAI,EAAE,YAAY;aACnB;YACD,YAAY,EAAE;gBACZ,eAAe,EAAE,QAAQ;aAC1B;YACD,eAAe,EAAE;gBACf,GAAG,EAAE,QAAQ;gBACb,UAAU,EAAE,QAAQ;gBACpB,MAAM,EAAE,QAAQ;gBAChB,aAAa,EAAE,SAAS;aACzB;SACF,CAAC;QACF,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7C,CAAC;IAED,QAAQ;QACN,MAAM,MAAM,GAAG;YACb,eAAe,EAAE;gBACf,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,UAAU;gBAClB,gBAAgB,EAAE,UAAU;gBAC5B,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,OAAO;gBAChB,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,IAAI;gBACZ,YAAY,EAAE,IAAI;aACnB;YACD,OAAO,EAAE,CAAC,UAAU,CAAC;SACtB,CAAC;QACF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IAChD,CAAC;IAED,UAAU;QACR,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0CV,CAAC;IACA,CAAC;IAED,IAAI;QACF,OAAO;;;;;;;;;;;;;;;;;;;CAmBV,CAAC;IACA,CAAC;IAED,SAAS;QACP,OAAO;;;;CAIV,CAAC;IACA,CAAC;CACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/cli/templates.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,wCAAwC;AACxC,+DAA+D;AAE/D,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,WAAW,CAAC,IAAY;QACtB,MAAM,GAAG,GAAG;YACV,IAAI;YACJ,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,GAAG,EAAE,wBAAwB;gBAC7B,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,oBAAoB;gBAC3B,IAAI,EAAE,YAAY;aACnB;YACD,YAAY,EAAE;gBACZ,eAAe,EAAE,QAAQ;aAC1B;YACD,eAAe,EAAE;gBACf,GAAG,EAAE,QAAQ;gBACb,UAAU,EAAE,QAAQ;gBACpB,MAAM,EAAE,QAAQ;gBAChB,aAAa,EAAE,SAAS;aACzB;SACF,CAAC;QACF,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7C,CAAC;IAED,QAAQ;QACN,MAAM,MAAM,GAAG;YACb,eAAe,EAAE;gBACf,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,UAAU;gBAClB,gBAAgB,EAAE,UAAU;gBAC5B,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,OAAO;gBAChB,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,IAAI;gBACZ,YAAY,EAAE,IAAI;aACnB;YACD,OAAO,EAAE,CAAC,UAAU,CAAC;SACtB,CAAC;QACF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IAChD,CAAC;IAED,UAAU;QACR,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0CV,CAAC;IACA,CAAC;IAED,IAAI;QACF,OAAO;;;;;;;;;;;;;;;;;;;CAmBV,CAAC;IACA,CAAC;IAED,YAAY;QACV,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCV,CAAC;IACA,CAAC;IAED,SAAS;QACP,OAAO;;;;CAIV,CAAC;IACA,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/cli/test.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,wBAAsB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BjE"}
|
package/dist/cli/test.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// @oni.bot/core CLI — test command
|
|
3
|
+
// Runs vitest with ONI-friendly defaults
|
|
4
|
+
// ============================================================
|
|
5
|
+
import { spawn } from "node:child_process";
|
|
6
|
+
export async function testCommand(args) {
|
|
7
|
+
const pattern = args.positional[0];
|
|
8
|
+
const watch = args.flags.watch === "true" || args.flags.w === "true";
|
|
9
|
+
const vitestArgs = [watch ? "" : "run"].filter(Boolean);
|
|
10
|
+
if (pattern) {
|
|
11
|
+
vitestArgs.push(pattern);
|
|
12
|
+
}
|
|
13
|
+
if (args.flags.verbose === "true") {
|
|
14
|
+
vitestArgs.push("--reporter=verbose");
|
|
15
|
+
}
|
|
16
|
+
console.log(`\n Running tests${pattern ? ` matching: ${pattern}` : ""}${watch ? " (watch mode)" : ""}\n`);
|
|
17
|
+
const child = spawn("npx", ["vitest", ...vitestArgs], {
|
|
18
|
+
stdio: "inherit",
|
|
19
|
+
shell: true,
|
|
20
|
+
});
|
|
21
|
+
return new Promise((resolvePromise) => {
|
|
22
|
+
child.on("close", (code) => {
|
|
23
|
+
if (code && code !== 0)
|
|
24
|
+
process.exitCode = code;
|
|
25
|
+
resolvePromise();
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/cli/test.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,mCAAmC;AACnC,yCAAyC;AACzC,+DAA+D;AAE/D,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAG3C,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAgB;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,MAAM,CAAC;IAErE,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAExD,IAAI,OAAO,EAAE,CAAC;QACZ,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;QAClC,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,CAAC,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAE3G,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,GAAG,UAAU,CAAC,EAAE;QACpD,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE;QACpC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC;gBAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;YAChD,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export type { ONIConfig, ModelConfig, AgentConfig, PermissionRuleset, CompactionConfig, SwarmConfig, LSPServerConfig, LoadConfigOptions, } from "./types.js";
|
|
2
|
+
export { loadConfig, parseJsonc, stripJsonComments, deepMerge, } from "./loader.js";
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,SAAS,EACT,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,SAAS,GACV,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAYA,SAAS;AACT,OAAO,EACL,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,SAAS,GACV,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ONIConfig, LoadConfigOptions } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Strip comments from JSONC text.
|
|
4
|
+
* Handles:
|
|
5
|
+
* - `//` line comments
|
|
6
|
+
* - `/* ... */` block comments
|
|
7
|
+
* - Preserves comments inside quoted strings
|
|
8
|
+
* - Handles escaped quotes within strings
|
|
9
|
+
*/
|
|
10
|
+
export declare function stripJsonComments(text: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Parse a JSONC string (JSON with comments) into a value.
|
|
13
|
+
* Strips comments first, then delegates to JSON.parse.
|
|
14
|
+
*/
|
|
15
|
+
export declare function parseJsonc(text: string): unknown;
|
|
16
|
+
/**
|
|
17
|
+
* Deep merge two objects. Object keys are merged recursively.
|
|
18
|
+
* Arrays and primitives are replaced (not merged).
|
|
19
|
+
* undefined values in override are skipped (don't overwrite base).
|
|
20
|
+
* null values in override DO replace base values.
|
|
21
|
+
*
|
|
22
|
+
* Does NOT mutate base or override — returns a new object.
|
|
23
|
+
*/
|
|
24
|
+
export declare function deepMerge<T extends Record<string, unknown>>(base: T, override: Partial<T>): T;
|
|
25
|
+
/**
|
|
26
|
+
* Load and merge ONI configuration from hierarchical paths.
|
|
27
|
+
*
|
|
28
|
+
* Resolution order (last wins):
|
|
29
|
+
* 1. `~/.oni/config.jsonc` — global defaults
|
|
30
|
+
* 2. `<projectDir>/oni.jsonc` — project-level
|
|
31
|
+
* 3. `<projectDir>/.oni/config.jsonc` — alternative project-level
|
|
32
|
+
* 4. `inline` option — programmatic override (highest priority)
|
|
33
|
+
*
|
|
34
|
+
* Invalid files are silently skipped (logged but don't throw).
|
|
35
|
+
*/
|
|
36
|
+
export declare function loadConfig(options?: LoadConfigOptions): Promise<ONIConfig>;
|
|
37
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAI/D;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA+DtD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGhD;AAID;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzD,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,GACnB,CAAC,CA2BH;AAQD;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAC9B,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,SAAS,CAAC,CA0BpB"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// @oni.bot/core/config — Loader
|
|
3
|
+
// JSONC parser, deep merge, hierarchical config loading.
|
|
4
|
+
// ============================================================
|
|
5
|
+
import { readFile } from "node:fs/promises";
|
|
6
|
+
import { join } from "node:path";
|
|
7
|
+
import { homedir } from "node:os";
|
|
8
|
+
// ─── JSONC Parsing ─────────────────────────────────────────────────────────
|
|
9
|
+
/**
|
|
10
|
+
* Strip comments from JSONC text.
|
|
11
|
+
* Handles:
|
|
12
|
+
* - `//` line comments
|
|
13
|
+
* - `/* ... */` block comments
|
|
14
|
+
* - Preserves comments inside quoted strings
|
|
15
|
+
* - Handles escaped quotes within strings
|
|
16
|
+
*/
|
|
17
|
+
export function stripJsonComments(text) {
|
|
18
|
+
let result = "";
|
|
19
|
+
let i = 0;
|
|
20
|
+
const len = text.length;
|
|
21
|
+
while (i < len) {
|
|
22
|
+
const ch = text[i];
|
|
23
|
+
// String literal — copy verbatim until closing quote
|
|
24
|
+
if (ch === '"') {
|
|
25
|
+
result += ch;
|
|
26
|
+
i++;
|
|
27
|
+
while (i < len) {
|
|
28
|
+
const sc = text[i];
|
|
29
|
+
result += sc;
|
|
30
|
+
if (sc === "\\") {
|
|
31
|
+
// Escaped character — copy next char too
|
|
32
|
+
i++;
|
|
33
|
+
if (i < len) {
|
|
34
|
+
result += text[i];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else if (sc === '"') {
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
i++;
|
|
41
|
+
}
|
|
42
|
+
i++;
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
// Line comment //
|
|
46
|
+
if (ch === "/" && i + 1 < len && text[i + 1] === "/") {
|
|
47
|
+
// Skip to end of line
|
|
48
|
+
i += 2;
|
|
49
|
+
while (i < len && text[i] !== "\n") {
|
|
50
|
+
i++;
|
|
51
|
+
}
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
// Block comment /* ... */
|
|
55
|
+
if (ch === "/" && i + 1 < len && text[i + 1] === "*") {
|
|
56
|
+
i += 2;
|
|
57
|
+
while (i < len) {
|
|
58
|
+
if (text[i] === "*" && i + 1 < len && text[i + 1] === "/") {
|
|
59
|
+
i += 2;
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
// Preserve newlines to maintain line numbers for error messages
|
|
63
|
+
if (text[i] === "\n") {
|
|
64
|
+
result += "\n";
|
|
65
|
+
}
|
|
66
|
+
i++;
|
|
67
|
+
}
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
// Normal character
|
|
71
|
+
result += ch;
|
|
72
|
+
i++;
|
|
73
|
+
}
|
|
74
|
+
return result;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Parse a JSONC string (JSON with comments) into a value.
|
|
78
|
+
* Strips comments first, then delegates to JSON.parse.
|
|
79
|
+
*/
|
|
80
|
+
export function parseJsonc(text) {
|
|
81
|
+
const cleaned = stripJsonComments(text);
|
|
82
|
+
return JSON.parse(cleaned);
|
|
83
|
+
}
|
|
84
|
+
// ─── Deep Merge ────────────────────────────────────────────────────────────
|
|
85
|
+
/**
|
|
86
|
+
* Deep merge two objects. Object keys are merged recursively.
|
|
87
|
+
* Arrays and primitives are replaced (not merged).
|
|
88
|
+
* undefined values in override are skipped (don't overwrite base).
|
|
89
|
+
* null values in override DO replace base values.
|
|
90
|
+
*
|
|
91
|
+
* Does NOT mutate base or override — returns a new object.
|
|
92
|
+
*/
|
|
93
|
+
export function deepMerge(base, override) {
|
|
94
|
+
const result = { ...base };
|
|
95
|
+
for (const key of Object.keys(override)) {
|
|
96
|
+
const overrideVal = override[key];
|
|
97
|
+
// Skip undefined — don't overwrite base
|
|
98
|
+
if (overrideVal === undefined)
|
|
99
|
+
continue;
|
|
100
|
+
const baseVal = base[key];
|
|
101
|
+
// If both are plain objects, merge recursively
|
|
102
|
+
if (isPlainObject(baseVal) &&
|
|
103
|
+
isPlainObject(overrideVal)) {
|
|
104
|
+
result[key] = deepMerge(baseVal, overrideVal);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
// Replace (arrays, primitives, null)
|
|
108
|
+
result[key] = overrideVal;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return result;
|
|
112
|
+
}
|
|
113
|
+
function isPlainObject(val) {
|
|
114
|
+
return val !== null && typeof val === "object" && !Array.isArray(val);
|
|
115
|
+
}
|
|
116
|
+
// ─── Config Loading ────────────────────────────────────────────────────────
|
|
117
|
+
/**
|
|
118
|
+
* Load and merge ONI configuration from hierarchical paths.
|
|
119
|
+
*
|
|
120
|
+
* Resolution order (last wins):
|
|
121
|
+
* 1. `~/.oni/config.jsonc` — global defaults
|
|
122
|
+
* 2. `<projectDir>/oni.jsonc` — project-level
|
|
123
|
+
* 3. `<projectDir>/.oni/config.jsonc` — alternative project-level
|
|
124
|
+
* 4. `inline` option — programmatic override (highest priority)
|
|
125
|
+
*
|
|
126
|
+
* Invalid files are silently skipped (logged but don't throw).
|
|
127
|
+
*/
|
|
128
|
+
export async function loadConfig(options) {
|
|
129
|
+
const globalDir = options?.globalDir ?? join(homedir(), ".oni");
|
|
130
|
+
const projectDir = options?.projectDir ?? process.cwd();
|
|
131
|
+
// Collect config file paths in priority order (first = lowest priority)
|
|
132
|
+
const configPaths = [
|
|
133
|
+
join(globalDir, "config.jsonc"),
|
|
134
|
+
join(projectDir, "oni.jsonc"),
|
|
135
|
+
join(projectDir, ".oni", "config.jsonc"),
|
|
136
|
+
];
|
|
137
|
+
let merged = {};
|
|
138
|
+
for (const configPath of configPaths) {
|
|
139
|
+
const partial = await loadSingleConfig(configPath);
|
|
140
|
+
if (partial) {
|
|
141
|
+
merged = mergeConfig(merged, partial);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Inline overrides (highest priority)
|
|
145
|
+
if (options?.inline) {
|
|
146
|
+
merged = mergeConfig(merged, options.inline);
|
|
147
|
+
}
|
|
148
|
+
return merged;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Merge two ONI configs with special handling:
|
|
152
|
+
* - `lsp: false` replaces any existing lsp config
|
|
153
|
+
* - Otherwise uses deepMerge
|
|
154
|
+
*/
|
|
155
|
+
function mergeConfig(base, override) {
|
|
156
|
+
// Special case: lsp: false means "disable all LSP" — don't merge
|
|
157
|
+
if (override.lsp === false) {
|
|
158
|
+
return { ...deepMerge(base, override), lsp: false };
|
|
159
|
+
}
|
|
160
|
+
return deepMerge(base, override);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Load a single JSONC config file. Returns null if file doesn't exist
|
|
164
|
+
* or can't be parsed.
|
|
165
|
+
*/
|
|
166
|
+
async function loadSingleConfig(path) {
|
|
167
|
+
try {
|
|
168
|
+
const text = await readFile(path, "utf-8");
|
|
169
|
+
const parsed = parseJsonc(text);
|
|
170
|
+
if (isPlainObject(parsed)) {
|
|
171
|
+
return parsed;
|
|
172
|
+
}
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
// File doesn't exist or can't be read — skip silently
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/** Model provider + model ID pair. */
|
|
2
|
+
export interface ModelConfig {
|
|
3
|
+
provider: string;
|
|
4
|
+
model: string;
|
|
5
|
+
}
|
|
6
|
+
/** Named agent definition (data-driven, composable into swarm slots). */
|
|
7
|
+
export interface AgentConfig {
|
|
8
|
+
/** Override model for this agent */
|
|
9
|
+
model?: ModelConfig;
|
|
10
|
+
/** Tool names this agent can use (empty = all) */
|
|
11
|
+
tools?: string[];
|
|
12
|
+
/** Maximum turns for this agent's loop */
|
|
13
|
+
maxSteps?: number;
|
|
14
|
+
/** System prompt override or extension */
|
|
15
|
+
prompt?: string;
|
|
16
|
+
/** Per-agent permission overrides */
|
|
17
|
+
permissions?: PermissionRuleset;
|
|
18
|
+
}
|
|
19
|
+
/** Permission rules in config format (tool → action or tool → pattern map). */
|
|
20
|
+
export type PermissionRuleset = Record<string, "allow" | "deny" | "ask" | Record<string, "allow" | "deny" | "ask">>;
|
|
21
|
+
/** Compaction behavior config. */
|
|
22
|
+
export interface CompactionConfig {
|
|
23
|
+
/** Enable auto-compaction on context overflow (default: true) */
|
|
24
|
+
auto?: boolean;
|
|
25
|
+
/** Usage fraction threshold (default: 0.68) */
|
|
26
|
+
threshold?: number;
|
|
27
|
+
/** Additional tool names whose output survives pruning */
|
|
28
|
+
protectedTools?: string[];
|
|
29
|
+
}
|
|
30
|
+
/** Swarm default settings. */
|
|
31
|
+
export interface SwarmConfig {
|
|
32
|
+
/** Default topology when auto-select isn't used */
|
|
33
|
+
defaultTopology?: string;
|
|
34
|
+
/** Max concurrent agents in pool/fan-out topologies */
|
|
35
|
+
maxConcurrency?: number;
|
|
36
|
+
/** Per-agent timeout in ms */
|
|
37
|
+
agentTimeout?: number;
|
|
38
|
+
/** Default pool size */
|
|
39
|
+
poolSize?: number;
|
|
40
|
+
}
|
|
41
|
+
/** LSP server configuration. */
|
|
42
|
+
export interface LSPServerConfig {
|
|
43
|
+
command: string;
|
|
44
|
+
args?: string[];
|
|
45
|
+
/** File extensions this server handles */
|
|
46
|
+
extensions?: string[];
|
|
47
|
+
}
|
|
48
|
+
/** Root configuration object — loaded from JSONC files. */
|
|
49
|
+
export interface ONIConfig {
|
|
50
|
+
/** Default model for all agents */
|
|
51
|
+
model?: ModelConfig;
|
|
52
|
+
/** Named agent definitions */
|
|
53
|
+
agents?: Record<string, AgentConfig>;
|
|
54
|
+
/** Permission rules */
|
|
55
|
+
permissions?: PermissionRuleset;
|
|
56
|
+
/** Compaction settings */
|
|
57
|
+
compaction?: CompactionConfig;
|
|
58
|
+
/** Swarm defaults */
|
|
59
|
+
swarm?: SwarmConfig;
|
|
60
|
+
/** LSP server config. Set to false to disable all LSP. */
|
|
61
|
+
lsp?: Record<string, LSPServerConfig> | false;
|
|
62
|
+
/** Plugin paths (npm packages or local file paths) */
|
|
63
|
+
plugins?: string[];
|
|
64
|
+
}
|
|
65
|
+
/** Options for loadConfig(). */
|
|
66
|
+
export interface LoadConfigOptions {
|
|
67
|
+
/** Override global config directory (default: ~/.oni) */
|
|
68
|
+
globalDir?: string;
|
|
69
|
+
/** Project directory to look for config files (default: process.cwd()) */
|
|
70
|
+
projectDir?: string;
|
|
71
|
+
/** Inline config to merge last (highest priority) */
|
|
72
|
+
inline?: Partial<ONIConfig>;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAIA,sCAAsC;AACtC,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,yEAAyE;AACzE,MAAM,WAAW,WAAW;IAC1B,oCAAoC;IACpC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC;AAED,+EAA+E;AAC/E,MAAM,MAAM,iBAAiB,GAAG,MAAM,CACpC,MAAM,EACN,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC,CACpE,CAAC;AAEF,kCAAkC;AAClC,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,8BAA8B;AAC9B,MAAM,WAAW,WAAW;IAC1B,mDAAmD;IACnD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8BAA8B;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,gCAAgC;AAChC,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,2DAA2D;AAC3D,MAAM,WAAW,SAAS;IACxB,mCAAmC;IACnC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACrC,uBAAuB;IACvB,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,0BAA0B;IAC1B,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,qBAAqB;IACrB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,KAAK,CAAC;IAC9C,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,gCAAgC;AAChC,MAAM,WAAW,iBAAiB;IAChC,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;CAC7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+BAA+B;AAC/B,+DAA+D"}
|
|
@@ -13,6 +13,10 @@ export interface TopicMessage {
|
|
|
13
13
|
export declare class PubSub {
|
|
14
14
|
private subscribers;
|
|
15
15
|
private buffer;
|
|
16
|
+
private maxBufferSize;
|
|
17
|
+
constructor(opts?: {
|
|
18
|
+
maxBufferSize?: number;
|
|
19
|
+
});
|
|
16
20
|
/** Publish a message to a topic, notifying all matching subscribers. */
|
|
17
21
|
publish(from: string, topic: string, data: unknown): void;
|
|
18
22
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pubsub.d.ts","sourceRoot":"","sources":["../../src/coordination/pubsub.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,WAAW,CAAuD;IAC1E,OAAO,CAAC,MAAM,CAAsB;
|
|
1
|
+
{"version":3,"file":"pubsub.d.ts","sourceRoot":"","sources":["../../src/coordination/pubsub.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,WAAW,CAAuD;IAC1E,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,aAAa,CAAqB;gBAE9B,IAAI,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE;IAI7C,wEAAwE;IACxE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IAczD;;;OAGG;IACH,SAAS,CACP,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,GACnC,MAAM,IAAI;IASb,qEAAqE;IACrE,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE;IAI5C,yDAAyD;IACzD,KAAK,IAAI,YAAY,EAAE;CAKxB;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAiBpE"}
|
|
@@ -7,10 +7,18 @@
|
|
|
7
7
|
export class PubSub {
|
|
8
8
|
subscribers = new Map();
|
|
9
9
|
buffer = [];
|
|
10
|
+
maxBufferSize;
|
|
11
|
+
constructor(opts) {
|
|
12
|
+
this.maxBufferSize = opts?.maxBufferSize;
|
|
13
|
+
}
|
|
10
14
|
/** Publish a message to a topic, notifying all matching subscribers. */
|
|
11
15
|
publish(from, topic, data) {
|
|
12
16
|
const msg = { topic, data, from, timestamp: Date.now() };
|
|
13
17
|
this.buffer.push(msg);
|
|
18
|
+
// Enforce buffer bounds by dropping oldest
|
|
19
|
+
if (this.maxBufferSize != null && this.buffer.length > this.maxBufferSize) {
|
|
20
|
+
this.buffer = this.buffer.slice(this.buffer.length - this.maxBufferSize);
|
|
21
|
+
}
|
|
14
22
|
for (const [pattern, handlers] of this.subscribers) {
|
|
15
23
|
if (topicMatches(pattern, topic)) {
|
|
16
24
|
for (const handler of handlers)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../../src/coordination/pubsub.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,OAAO,MAAM;IACT,WAAW,GAAG,IAAI,GAAG,EAA4C,CAAC;IAClE,MAAM,GAAmB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../../src/coordination/pubsub.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,7 +22,9 @@ export declare class RequestReplyBroker {
|
|
|
22
22
|
* Returns the request id, a promise that resolves with the reply,
|
|
23
23
|
* and a message object suitable for routing through the graph.
|
|
24
24
|
*/
|
|
25
|
-
request(from: string, to: string, payload: unknown
|
|
25
|
+
request(from: string, to: string, payload: unknown, opts?: {
|
|
26
|
+
timeoutMs?: number;
|
|
27
|
+
}): {
|
|
26
28
|
requestId: string;
|
|
27
29
|
promise: Promise<unknown>;
|
|
28
30
|
message: any;
|