@oeronteros-1/opencode-orchestra 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +207 -0
- package/dashboard-dist/assets/index-89Gs8jun.css +2 -0
- package/dashboard-dist/assets/index-Bhe8OPZD.js +124 -0
- package/dashboard-dist/index.html +14 -0
- package/dist/agents/build.d.ts +7 -0
- package/dist/agents/build.js +16 -0
- package/dist/agents/build.js.map +1 -0
- package/dist/agents/judge.d.ts +3 -0
- package/dist/agents/judge.js +29 -0
- package/dist/agents/judge.js.map +1 -0
- package/dist/agents/lead.d.ts +3 -0
- package/dist/agents/lead.js +54 -0
- package/dist/agents/lead.js.map +1 -0
- package/dist/agents/types.d.ts +14 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/agents/workers.d.ts +3 -0
- package/dist/agents/workers.js +114 -0
- package/dist/agents/workers.js.map +1 -0
- package/dist/cli.d.ts +24 -0
- package/dist/cli.js +418 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/defaults.d.ts +4 -0
- package/dist/config/defaults.js +26 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/load.d.ts +6 -0
- package/dist/config/load.js +58 -0
- package/dist/config/load.js.map +1 -0
- package/dist/config/paths.d.ts +2 -0
- package/dist/config/paths.js +13 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/schema.d.ts +341 -0
- package/dist/config/schema.js +103 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/dashboard/server.d.ts +12 -0
- package/dist/dashboard/server.js +297 -0
- package/dist/dashboard/server.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +85 -0
- package/dist/index.js.map +1 -0
- package/dist/profiles/architecture.d.ts +2 -0
- package/dist/profiles/architecture.js +13 -0
- package/dist/profiles/architecture.js.map +1 -0
- package/dist/profiles/catalog.d.ts +2 -0
- package/dist/profiles/catalog.js +39 -0
- package/dist/profiles/catalog.js.map +1 -0
- package/dist/profiles/debug.d.ts +2 -0
- package/dist/profiles/debug.js +14 -0
- package/dist/profiles/debug.js.map +1 -0
- package/dist/profiles/performance.d.ts +2 -0
- package/dist/profiles/performance.js +13 -0
- package/dist/profiles/performance.js.map +1 -0
- package/dist/profiles/research.d.ts +2 -0
- package/dist/profiles/research.js +13 -0
- package/dist/profiles/research.js.map +1 -0
- package/dist/profiles/security.d.ts +2 -0
- package/dist/profiles/security.js +13 -0
- package/dist/profiles/security.js.map +1 -0
- package/dist/profiles/types.d.ts +9 -0
- package/dist/profiles/types.js +2 -0
- package/dist/profiles/types.js.map +1 -0
- package/dist/profiles/ui.d.ts +2 -0
- package/dist/profiles/ui.js +13 -0
- package/dist/profiles/ui.js.map +1 -0
- package/dist/prompts/load.d.ts +4 -0
- package/dist/prompts/load.js +26 -0
- package/dist/prompts/load.js.map +1 -0
- package/dist/routing/budget.d.ts +11 -0
- package/dist/routing/budget.js +45 -0
- package/dist/routing/budget.js.map +1 -0
- package/dist/routing/classifier.d.ts +10 -0
- package/dist/routing/classifier.js +160 -0
- package/dist/routing/classifier.js.map +1 -0
- package/dist/routing/escalation.d.ts +12 -0
- package/dist/routing/escalation.js +30 -0
- package/dist/routing/escalation.js.map +1 -0
- package/dist/routing/model-discovery.d.ts +3 -0
- package/dist/routing/model-discovery.js +96 -0
- package/dist/routing/model-discovery.js.map +1 -0
- package/dist/routing/model-resolver.d.ts +26 -0
- package/dist/routing/model-resolver.js +66 -0
- package/dist/routing/model-resolver.js.map +1 -0
- package/dist/superpowers/compatibility.d.ts +2 -0
- package/dist/superpowers/compatibility.js +9 -0
- package/dist/superpowers/compatibility.js.map +1 -0
- package/dist/telemetry/ledger.d.ts +68 -0
- package/dist/telemetry/ledger.js +179 -0
- package/dist/telemetry/ledger.js.map +1 -0
- package/dist/tools.d.ts +4 -0
- package/dist/tools.js +57 -0
- package/dist/tools.js.map +1 -0
- package/package.json +79 -0
- package/prompts/judge.md +13 -0
- package/prompts/lead.md +24 -0
- package/schema/opencode-orchestra.schema.json +112 -0
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
import { spawn } from "node:child_process";
|
|
3
|
+
import { createReadStream } from "node:fs";
|
|
4
|
+
import { copyFile, mkdir, readFile, rename, stat, writeFile } from "node:fs/promises";
|
|
5
|
+
import { createServer } from "node:http";
|
|
6
|
+
import os from "node:os";
|
|
7
|
+
import path from "node:path";
|
|
8
|
+
import { fileURLToPath } from "node:url";
|
|
9
|
+
import { applyEdits, modify, parse } from "jsonc-parser";
|
|
10
|
+
import { z } from "zod";
|
|
11
|
+
import { orchestraConfigSchema } from "../config/schema.js";
|
|
12
|
+
import { openCodeConfigDirectory } from "../config/paths.js";
|
|
13
|
+
import { readLedgerState } from "../telemetry/ledger.js";
|
|
14
|
+
const PATCH_SCHEMA = z.object({
|
|
15
|
+
budget: z.enum(["eco", "balanced", "quality", "ebobo"]),
|
|
16
|
+
models: z.object({
|
|
17
|
+
strategy: z.enum(["auto", "manual"]),
|
|
18
|
+
agents: z.record(z.string(), z.string()),
|
|
19
|
+
}),
|
|
20
|
+
telemetry: z.object({ enabled: z.boolean() }),
|
|
21
|
+
});
|
|
22
|
+
const MIME = {
|
|
23
|
+
".css": "text/css; charset=utf-8",
|
|
24
|
+
".html": "text/html; charset=utf-8",
|
|
25
|
+
".js": "text/javascript; charset=utf-8",
|
|
26
|
+
".json": "application/json; charset=utf-8",
|
|
27
|
+
".map": "application/json; charset=utf-8",
|
|
28
|
+
".png": "image/png",
|
|
29
|
+
".svg": "image/svg+xml",
|
|
30
|
+
".woff2": "font/woff2",
|
|
31
|
+
};
|
|
32
|
+
function emptyTokens() {
|
|
33
|
+
return { input: 0, output: 0, reasoning: 0, cache: { read: 0, write: 0 } };
|
|
34
|
+
}
|
|
35
|
+
function addTokens(target, source) {
|
|
36
|
+
target.input += source.input;
|
|
37
|
+
target.output += source.output;
|
|
38
|
+
target.reasoning += source.reasoning;
|
|
39
|
+
target.cache.read += source.cache.read;
|
|
40
|
+
target.cache.write += source.cache.write;
|
|
41
|
+
}
|
|
42
|
+
function aggregate(rows, key) {
|
|
43
|
+
const result = new Map();
|
|
44
|
+
for (const row of rows) {
|
|
45
|
+
const id = key(row);
|
|
46
|
+
const current = result.get(id) ?? { id, calls: 0, cost: 0, tokens: emptyTokens() };
|
|
47
|
+
current.calls += 1;
|
|
48
|
+
current.cost += row.cost;
|
|
49
|
+
addTokens(current.tokens, row.tokens);
|
|
50
|
+
result.set(id, current);
|
|
51
|
+
}
|
|
52
|
+
return [...result.values()].sort((a, b) => b.cost - a.cost || b.tokens.output - a.tokens.output);
|
|
53
|
+
}
|
|
54
|
+
async function jsonBody(request) {
|
|
55
|
+
const chunks = [];
|
|
56
|
+
let length = 0;
|
|
57
|
+
for await (const chunk of request) {
|
|
58
|
+
const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
|
|
59
|
+
length += buffer.length;
|
|
60
|
+
if (length > 1_000_000)
|
|
61
|
+
throw new Error("Request body is too large");
|
|
62
|
+
chunks.push(buffer);
|
|
63
|
+
}
|
|
64
|
+
return JSON.parse(Buffer.concat(chunks).toString("utf8"));
|
|
65
|
+
}
|
|
66
|
+
function sendJson(response, status, value) {
|
|
67
|
+
const body = JSON.stringify(value);
|
|
68
|
+
response.writeHead(status, {
|
|
69
|
+
"Content-Type": "application/json; charset=utf-8",
|
|
70
|
+
"Content-Length": Buffer.byteLength(body),
|
|
71
|
+
"Cache-Control": "no-store",
|
|
72
|
+
});
|
|
73
|
+
response.end(body);
|
|
74
|
+
}
|
|
75
|
+
function parseJsonc(text) {
|
|
76
|
+
const errors = [];
|
|
77
|
+
const value = parse(text, errors, { allowTrailingComma: true, disallowComments: false });
|
|
78
|
+
if (errors.length > 0 || typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
79
|
+
throw new Error("Configuration contains invalid JSONC");
|
|
80
|
+
}
|
|
81
|
+
return value;
|
|
82
|
+
}
|
|
83
|
+
async function readTextOr(file, fallback) {
|
|
84
|
+
try {
|
|
85
|
+
return await readFile(file, "utf8");
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return fallback;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async function findMainConfig(configDirectory) {
|
|
92
|
+
for (const name of ["opencode.json", "opencode.jsonc"]) {
|
|
93
|
+
const candidate = path.join(configDirectory, name);
|
|
94
|
+
try {
|
|
95
|
+
await stat(candidate);
|
|
96
|
+
return candidate;
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// Try the next name.
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return path.join(configDirectory, "opencode.json");
|
|
103
|
+
}
|
|
104
|
+
async function mcpStatus(configDirectory) {
|
|
105
|
+
const root = parseJsonc(await readTextOr(await findMainConfig(configDirectory), "{}"));
|
|
106
|
+
const mcp = typeof root.mcp === "object" && root.mcp !== null && !Array.isArray(root.mcp)
|
|
107
|
+
? root.mcp
|
|
108
|
+
: {};
|
|
109
|
+
return {
|
|
110
|
+
context7: "context7" in mcp,
|
|
111
|
+
codebaseMemory: "codebase-memory" in mcp,
|
|
112
|
+
memoryGraph: "memorygraph" in mcp,
|
|
113
|
+
supermemory: "supermemory" in mcp,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
async function snapshot(directory, configDirectory) {
|
|
117
|
+
const configPath = path.join(configDirectory, "orchestra.jsonc");
|
|
118
|
+
const configText = await readTextOr(configPath, "{}\n");
|
|
119
|
+
const config = orchestraConfigSchema.parse(parseJsonc(configText));
|
|
120
|
+
const ledger = await readLedgerState(path.resolve(directory, config.telemetry.directory, "state.json"));
|
|
121
|
+
const activity = [];
|
|
122
|
+
for (const [sessionID, session] of Object.entries(ledger.sessions)) {
|
|
123
|
+
for (const [id, message] of Object.entries(session.messages))
|
|
124
|
+
activity.push({ id, sessionID, ...message });
|
|
125
|
+
}
|
|
126
|
+
activity.sort((a, b) => (b.completedAt ?? b.createdAt ?? 0) - (a.completedAt ?? a.createdAt ?? 0));
|
|
127
|
+
const totalTokens = emptyTokens();
|
|
128
|
+
let totalCost = 0;
|
|
129
|
+
for (const row of activity) {
|
|
130
|
+
totalCost += row.cost;
|
|
131
|
+
addTokens(totalTokens, row.tokens);
|
|
132
|
+
}
|
|
133
|
+
const dailyMap = new Map();
|
|
134
|
+
for (const row of activity) {
|
|
135
|
+
const timestamp = row.completedAt ?? row.createdAt;
|
|
136
|
+
if (!timestamp)
|
|
137
|
+
continue;
|
|
138
|
+
const date = new Date(timestamp).toISOString().slice(0, 10);
|
|
139
|
+
const point = dailyMap.get(date) ?? { date, cost: 0, input: 0, output: 0, reasoning: 0 };
|
|
140
|
+
point.cost += row.cost;
|
|
141
|
+
point.input += row.tokens.input;
|
|
142
|
+
point.output += row.tokens.output;
|
|
143
|
+
point.reasoning += row.tokens.reasoning;
|
|
144
|
+
dailyMap.set(date, point);
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
updatedAt: ledger.updatedAt,
|
|
148
|
+
project: path.basename(directory),
|
|
149
|
+
directory,
|
|
150
|
+
configPath,
|
|
151
|
+
config: {
|
|
152
|
+
budget: config.budget,
|
|
153
|
+
models: { strategy: config.models.strategy, agents: config.models.agents },
|
|
154
|
+
telemetry: { enabled: config.telemetry.enabled },
|
|
155
|
+
},
|
|
156
|
+
summary: {
|
|
157
|
+
sessions: Object.keys(ledger.sessions).length,
|
|
158
|
+
calls: activity.length,
|
|
159
|
+
cost: totalCost,
|
|
160
|
+
tokens: totalTokens,
|
|
161
|
+
},
|
|
162
|
+
models: aggregate(activity, (row) => row.provider && row.model ? `${row.provider}/${row.model}` : "unknown"),
|
|
163
|
+
agents: aggregate(activity, (row) => row.agent ?? "unknown"),
|
|
164
|
+
activity: activity.slice(0, 5_000),
|
|
165
|
+
daily: [...dailyMap.values()].sort((a, b) => a.date.localeCompare(b.date)).slice(-30),
|
|
166
|
+
mcp: await mcpStatus(configDirectory),
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
async function updateConfig(configPath, input) {
|
|
170
|
+
const patch = PATCH_SCHEMA.parse(input);
|
|
171
|
+
const agents = Object.fromEntries(Object.entries(patch.models.agents)
|
|
172
|
+
.map(([name, model]) => [name, model.trim()])
|
|
173
|
+
.filter(([, model]) => model.length > 0));
|
|
174
|
+
await mkdir(path.dirname(configPath), { recursive: true });
|
|
175
|
+
const original = await readTextOr(configPath, "{}\n");
|
|
176
|
+
const current = parseJsonc(original);
|
|
177
|
+
const merged = {
|
|
178
|
+
...current,
|
|
179
|
+
budget: patch.budget,
|
|
180
|
+
models: {
|
|
181
|
+
...(typeof current.models === "object" && current.models !== null ? current.models : {}),
|
|
182
|
+
strategy: patch.models.strategy,
|
|
183
|
+
agents,
|
|
184
|
+
},
|
|
185
|
+
telemetry: {
|
|
186
|
+
...(typeof current.telemetry === "object" && current.telemetry !== null ? current.telemetry : {}),
|
|
187
|
+
enabled: patch.telemetry.enabled,
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
orchestraConfigSchema.parse(merged);
|
|
191
|
+
let updated = original;
|
|
192
|
+
const formattingOptions = { insertSpaces: true, tabSize: 2, eol: "\n" };
|
|
193
|
+
for (const [location, value] of [
|
|
194
|
+
[["budget"], patch.budget],
|
|
195
|
+
[["models", "strategy"], patch.models.strategy],
|
|
196
|
+
[["models", "agents"], agents],
|
|
197
|
+
[["telemetry", "enabled"], patch.telemetry.enabled],
|
|
198
|
+
]) {
|
|
199
|
+
updated = applyEdits(updated, modify(updated, [...location], value, { formattingOptions }));
|
|
200
|
+
}
|
|
201
|
+
try {
|
|
202
|
+
await stat(configPath);
|
|
203
|
+
const stamp = new Date().toISOString().replaceAll(":", "-");
|
|
204
|
+
await copyFile(configPath, `${configPath}.bak-${stamp}`);
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
// First save, no backup is needed.
|
|
208
|
+
}
|
|
209
|
+
const temporary = `${configPath}.orchestra-dashboard-tmp`;
|
|
210
|
+
await writeFile(temporary, updated.endsWith("\n") ? updated : `${updated}\n`, "utf8");
|
|
211
|
+
await rename(temporary, configPath);
|
|
212
|
+
}
|
|
213
|
+
function defaultAssetsDirectory() {
|
|
214
|
+
const besidePackage = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../dashboard-dist");
|
|
215
|
+
return besidePackage;
|
|
216
|
+
}
|
|
217
|
+
async function serveAsset(response, assetsDirectory, pathname) {
|
|
218
|
+
const relative = pathname === "/" ? "index.html" : pathname.replace(/^\/+/, "");
|
|
219
|
+
let file = path.resolve(assetsDirectory, relative);
|
|
220
|
+
const root = path.resolve(assetsDirectory);
|
|
221
|
+
if (!file.startsWith(`${root}${path.sep}`) && file !== root) {
|
|
222
|
+
response.writeHead(403).end();
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
try {
|
|
226
|
+
if (!(await stat(file)).isFile())
|
|
227
|
+
throw new Error("not a file");
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
file = path.join(root, "index.html");
|
|
231
|
+
}
|
|
232
|
+
const info = await stat(file);
|
|
233
|
+
response.writeHead(200, {
|
|
234
|
+
"Content-Type": MIME[path.extname(file)] ?? "application/octet-stream",
|
|
235
|
+
"Content-Length": info.size,
|
|
236
|
+
"Cache-Control": file.endsWith("index.html") ? "no-store" : "public, max-age=31536000, immutable",
|
|
237
|
+
"X-Content-Type-Options": "nosniff",
|
|
238
|
+
"Content-Security-Policy": "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self'; font-src 'self'",
|
|
239
|
+
});
|
|
240
|
+
createReadStream(file).pipe(response);
|
|
241
|
+
}
|
|
242
|
+
function openBrowser(url) {
|
|
243
|
+
const command = process.platform === "win32" ? "cmd" : process.platform === "darwin" ? "open" : "xdg-open";
|
|
244
|
+
const args = process.platform === "win32" ? ["/c", "start", "", url] : [url];
|
|
245
|
+
const child = spawn(command, args, { detached: true, stdio: "ignore", windowsHide: true });
|
|
246
|
+
child.unref();
|
|
247
|
+
}
|
|
248
|
+
export async function startDashboard(options = {}) {
|
|
249
|
+
const directory = path.resolve(options.directory ?? process.cwd());
|
|
250
|
+
const configDirectory = path.resolve(options.configDirectory ?? openCodeConfigDirectory());
|
|
251
|
+
const host = options.host ?? "127.0.0.1";
|
|
252
|
+
const port = options.port ?? 0;
|
|
253
|
+
const assetsDirectory = path.resolve(options.assetsDirectory ?? defaultAssetsDirectory());
|
|
254
|
+
const token = randomBytes(24).toString("base64url");
|
|
255
|
+
const server = createServer(async (request, response) => {
|
|
256
|
+
try {
|
|
257
|
+
const url = new URL(request.url ?? "/", `http://${request.headers.host ?? host}`);
|
|
258
|
+
if (url.pathname.startsWith("/api/")) {
|
|
259
|
+
if (request.headers["x-orchestra-token"] !== token) {
|
|
260
|
+
sendJson(response, 401, { error: "Invalid dashboard token" });
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
if (request.method === "GET" && url.pathname === "/api/snapshot") {
|
|
264
|
+
sendJson(response, 200, await snapshot(directory, configDirectory));
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
if (request.method === "PUT" && url.pathname === "/api/config") {
|
|
268
|
+
await updateConfig(path.join(configDirectory, "orchestra.jsonc"), await jsonBody(request));
|
|
269
|
+
sendJson(response, 200, { ok: true });
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
sendJson(response, 404, { error: "Not found" });
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
await serveAsset(response, assetsDirectory, url.pathname);
|
|
276
|
+
}
|
|
277
|
+
catch (error) {
|
|
278
|
+
sendJson(response, 500, { error: error instanceof Error ? error.message : String(error) });
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
await new Promise((resolve, reject) => {
|
|
282
|
+
server.once("error", reject);
|
|
283
|
+
server.listen(port, host, resolve);
|
|
284
|
+
});
|
|
285
|
+
const address = server.address();
|
|
286
|
+
if (!address || typeof address === "string")
|
|
287
|
+
throw new Error("Dashboard server did not expose a TCP address");
|
|
288
|
+
const displayHost = host === "0.0.0.0" || host === "::" ? "127.0.0.1" : host;
|
|
289
|
+
const url = `http://${displayHost}:${address.port}/?token=${token}`;
|
|
290
|
+
if (options.open !== false)
|
|
291
|
+
openBrowser(url);
|
|
292
|
+
return {
|
|
293
|
+
url,
|
|
294
|
+
close: () => new Promise((resolve, reject) => server.close((error) => error ? reject(error) : resolve())),
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { createAgentSet } from "./agents/build.js";
|
|
2
|
+
import { loadConfig } from "./config/load.js";
|
|
3
|
+
import { applyBudgetPreset } from "./config/defaults.js";
|
|
4
|
+
import { loadPrompts } from "./prompts/load.js";
|
|
5
|
+
import { applyDiscoveredModels, discoverConnectedModels } from "./routing/model-discovery.js";
|
|
6
|
+
import { primarySystemHint } from "./superpowers/compatibility.js";
|
|
7
|
+
import { Ledger } from "./telemetry/ledger.js";
|
|
8
|
+
import { createOrchestraTools } from "./tools.js";
|
|
9
|
+
function mergeAgent(base, override) {
|
|
10
|
+
if (!override)
|
|
11
|
+
return base;
|
|
12
|
+
return {
|
|
13
|
+
...base,
|
|
14
|
+
...override,
|
|
15
|
+
permission: {
|
|
16
|
+
...base.permission,
|
|
17
|
+
...override.permission,
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export const OrchestraPlugin = async ({ client, directory }, rawOptions = {}) => {
|
|
22
|
+
const loaded = await loadConfig(directory, rawOptions);
|
|
23
|
+
const discovered = await discoverConnectedModels(client);
|
|
24
|
+
const orchestra = applyDiscoveredModels(applyBudgetPreset(loaded.config), discovered);
|
|
25
|
+
const prompts = await loadPrompts();
|
|
26
|
+
const agents = createAgentSet(orchestra, prompts);
|
|
27
|
+
const pools = [
|
|
28
|
+
orchestra.models.lead,
|
|
29
|
+
...Object.values(orchestra.models.worker),
|
|
30
|
+
orchestra.models.judge,
|
|
31
|
+
];
|
|
32
|
+
const ledger = new Ledger(directory, orchestra.telemetry.directory, orchestra.telemetry.enabled, pools);
|
|
33
|
+
const systemHint = primarySystemHint(orchestra);
|
|
34
|
+
await client.app
|
|
35
|
+
.log({
|
|
36
|
+
body: {
|
|
37
|
+
service: "opencode-orchestra",
|
|
38
|
+
level: "info",
|
|
39
|
+
message: "OpenCode Orchestra initialized",
|
|
40
|
+
extra: {
|
|
41
|
+
budget: orchestra.budget,
|
|
42
|
+
configSource: loaded.source ?? "plugin options/defaults",
|
|
43
|
+
configuredModels: pools.flat().length,
|
|
44
|
+
discoveredModels: discovered.length,
|
|
45
|
+
modelStrategy: orchestra.models.strategy,
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
})
|
|
49
|
+
.catch(() => undefined);
|
|
50
|
+
return {
|
|
51
|
+
config: async (input) => {
|
|
52
|
+
const mutable = input;
|
|
53
|
+
mutable.agent ??= {};
|
|
54
|
+
for (const [name, agent] of Object.entries(agents)) {
|
|
55
|
+
mutable.agent[name] = mergeAgent(agent, mutable.agent[name]);
|
|
56
|
+
}
|
|
57
|
+
mutable.command ??= {};
|
|
58
|
+
mutable.command["orchestra-status"] ??= {
|
|
59
|
+
description: "Show OpenCode Orchestra usage and escalation status",
|
|
60
|
+
template: "Call the orchestra_status tool and present its result verbatim.",
|
|
61
|
+
};
|
|
62
|
+
mutable.command.orchestra ??= {
|
|
63
|
+
description: "Classify a task and delegate it to orch-lead",
|
|
64
|
+
template: "Call orchestra_route for this task: $ARGUMENTS. Then delegate the full task once to orch-lead using the returned profile and constraints.",
|
|
65
|
+
};
|
|
66
|
+
},
|
|
67
|
+
tool: createOrchestraTools(orchestra, ledger),
|
|
68
|
+
event: async ({ event }) => {
|
|
69
|
+
if (event.type !== "message.updated")
|
|
70
|
+
return;
|
|
71
|
+
const info = event.properties.info;
|
|
72
|
+
if (info.role !== "assistant")
|
|
73
|
+
return;
|
|
74
|
+
await ledger.recordAssistant(info);
|
|
75
|
+
},
|
|
76
|
+
...(systemHint
|
|
77
|
+
? {
|
|
78
|
+
"experimental.chat.system.transform": async (_input, output) => {
|
|
79
|
+
output.system.push(systemHint);
|
|
80
|
+
},
|
|
81
|
+
}
|
|
82
|
+
: {}),
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const architectureProfile = {
|
|
2
|
+
name: "architecture",
|
|
3
|
+
purpose: "Design correct module boundaries, APIs, data flow, dependencies, and migration paths before implementation.",
|
|
4
|
+
workflow: [
|
|
5
|
+
"Map the current architecture and existing conventions.",
|
|
6
|
+
"Collect relevant repository and upstream evidence.",
|
|
7
|
+
"Develop two or three viable options with trade-offs.",
|
|
8
|
+
"Recommend the smallest coherent design and identify risks.",
|
|
9
|
+
],
|
|
10
|
+
workers: ["orch-repo", "orch-docs", "orch-research", "orch-critic"],
|
|
11
|
+
output: ["recommended design", "alternatives", "trade-offs", "module boundaries", "implementation handoff"],
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=architecture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architecture.js","sourceRoot":"","sources":["../../src/profiles/architecture.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAAsB;IACpD,IAAI,EAAE,cAAc;IACpB,OAAO,EAAE,6GAA6G;IACtH,QAAQ,EAAE;QACR,wDAAwD;QACxD,oDAAoD;QACpD,sDAAsD;QACtD,4DAA4D;KAC7D;IACD,OAAO,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,CAAC;IACnE,MAAM,EAAE,CAAC,oBAAoB,EAAE,cAAc,EAAE,YAAY,EAAE,mBAAmB,EAAE,wBAAwB,CAAC;CAC5G,CAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { architectureProfile } from "./architecture.js";
|
|
2
|
+
import { debugProfile } from "./debug.js";
|
|
3
|
+
import { performanceProfile } from "./performance.js";
|
|
4
|
+
import { researchProfile } from "./research.js";
|
|
5
|
+
import { securityProfile } from "./security.js";
|
|
6
|
+
import { uiProfile } from "./ui.js";
|
|
7
|
+
const reviewProfile = {
|
|
8
|
+
name: "review",
|
|
9
|
+
purpose: "Review a proposed or completed change for correctness, regressions, maintainability, and missing validation.",
|
|
10
|
+
workflow: ["Understand intent.", "Inspect the diff and surrounding code.", "Validate risks independently.", "Report only actionable findings."],
|
|
11
|
+
workers: ["orch-repo", "orch-tests", "orch-critic", "orch-security"],
|
|
12
|
+
output: ["actionable findings", "risk", "evidence", "suggested validation"],
|
|
13
|
+
};
|
|
14
|
+
const migrationProfile = {
|
|
15
|
+
name: "migration",
|
|
16
|
+
purpose: "Plan a reversible transition between versions, platforms, schemas, or architectures.",
|
|
17
|
+
workflow: ["Inventory dependencies.", "Identify compatibility gaps.", "Design staged rollout and rollback.", "Define verification gates."],
|
|
18
|
+
workers: ["orch-repo", "orch-docs", "orch-tests", "orch-critic"],
|
|
19
|
+
output: ["migration sequence", "compatibility risks", "rollback", "verification gates"],
|
|
20
|
+
};
|
|
21
|
+
const opsProfile = {
|
|
22
|
+
name: "ops",
|
|
23
|
+
purpose: "Improve deployment, runtime reliability, observability, and operational recovery.",
|
|
24
|
+
workflow: ["Map the runtime path.", "Inspect deployment and observability configuration.", "Identify failure modes.", "Recommend safe operational changes."],
|
|
25
|
+
workers: ["orch-repo", "orch-docs", "orch-research", "orch-security", "orch-critic"],
|
|
26
|
+
output: ["runtime map", "failure modes", "operational changes", "rollback and alerts"],
|
|
27
|
+
};
|
|
28
|
+
export const PROFILE_CATALOG = {
|
|
29
|
+
architecture: architectureProfile,
|
|
30
|
+
debug: debugProfile,
|
|
31
|
+
ui: uiProfile,
|
|
32
|
+
research: researchProfile,
|
|
33
|
+
review: reviewProfile,
|
|
34
|
+
security: securityProfile,
|
|
35
|
+
performance: performanceProfile,
|
|
36
|
+
migration: migrationProfile,
|
|
37
|
+
ops: opsProfile,
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/profiles/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAE/C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAEnC,MAAM,aAAa,GAAsB;IACvC,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,8GAA8G;IACvH,QAAQ,EAAE,CAAC,oBAAoB,EAAE,wCAAwC,EAAE,+BAA+B,EAAE,kCAAkC,CAAC;IAC/I,OAAO,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,CAAC;IACpE,MAAM,EAAE,CAAC,qBAAqB,EAAE,MAAM,EAAE,UAAU,EAAE,sBAAsB,CAAC;CAC5E,CAAA;AAED,MAAM,gBAAgB,GAAsB;IAC1C,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,sFAAsF;IAC/F,QAAQ,EAAE,CAAC,yBAAyB,EAAE,8BAA8B,EAAE,qCAAqC,EAAE,4BAA4B,CAAC;IAC1I,OAAO,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,CAAC;IAChE,MAAM,EAAE,CAAC,oBAAoB,EAAE,qBAAqB,EAAE,UAAU,EAAE,oBAAoB,CAAC;CACxF,CAAA;AAED,MAAM,UAAU,GAAsB;IACpC,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,mFAAmF;IAC5F,QAAQ,EAAE,CAAC,uBAAuB,EAAE,qDAAqD,EAAE,yBAAyB,EAAE,qCAAqC,CAAC;IAC5J,OAAO,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,CAAC;IACpF,MAAM,EAAE,CAAC,aAAa,EAAE,eAAe,EAAE,qBAAqB,EAAE,qBAAqB,CAAC;CACvF,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAyD;IACnF,YAAY,EAAE,mBAAmB;IACjC,KAAK,EAAE,YAAY;IACnB,EAAE,EAAE,SAAS;IACb,QAAQ,EAAE,eAAe;IACzB,MAAM,EAAE,aAAa;IACrB,QAAQ,EAAE,eAAe;IACzB,WAAW,EAAE,kBAAkB;IAC/B,SAAS,EAAE,gBAAgB;IAC3B,GAAG,EAAE,UAAU;CAChB,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export const debugProfile = {
|
|
2
|
+
name: "debug",
|
|
3
|
+
purpose: "Explain incorrect existing behavior through reproduction, competing hypotheses, and evidence.",
|
|
4
|
+
workflow: [
|
|
5
|
+
"Restate the symptom and find a reliable reproduction.",
|
|
6
|
+
"Generate competing hypotheses without committing early.",
|
|
7
|
+
"Gather repository, log, history, and test evidence.",
|
|
8
|
+
"Eliminate hypotheses and identify the root cause.",
|
|
9
|
+
"Recommend the smallest safe fix and verification.",
|
|
10
|
+
],
|
|
11
|
+
workers: ["orch-repo", "orch-tests", "orch-critic", "orch-security"],
|
|
12
|
+
output: ["reproduction", "evidence", "root cause", "minimal fix", "regression test"],
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=debug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/profiles/debug.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAAsB;IAC7C,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,+FAA+F;IACxG,QAAQ,EAAE;QACR,uDAAuD;QACvD,yDAAyD;QACzD,qDAAqD;QACrD,mDAAmD;QACnD,mDAAmD;KACpD;IACD,OAAO,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,CAAC;IACpE,MAAM,EAAE,CAAC,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB,CAAC;CACrF,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const performanceProfile = {
|
|
2
|
+
name: "performance",
|
|
3
|
+
purpose: "Find measured bottlenecks and recommend changes whose benefit can be verified.",
|
|
4
|
+
workflow: [
|
|
5
|
+
"Define the workload and target metric.",
|
|
6
|
+
"Locate likely hot paths and existing instrumentation.",
|
|
7
|
+
"Gather measurements before proposing optimization.",
|
|
8
|
+
"Prioritize by expected impact, risk, and validation cost.",
|
|
9
|
+
],
|
|
10
|
+
workers: ["orch-repo", "orch-tests", "orch-research", "orch-critic"],
|
|
11
|
+
output: ["baseline", "bottleneck evidence", "ranked optimizations", "measurement plan"],
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=performance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance.js","sourceRoot":"","sources":["../../src/profiles/performance.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAsB;IACnD,IAAI,EAAE,aAAa;IACnB,OAAO,EAAE,gFAAgF;IACzF,QAAQ,EAAE;QACR,wCAAwC;QACxC,uDAAuD;QACvD,oDAAoD;QACpD,2DAA2D;KAC5D;IACD,OAAO,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,CAAC;IACpE,MAAM,EAAE,CAAC,UAAU,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,kBAAkB,CAAC;CACxF,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const researchProfile = {
|
|
2
|
+
name: "research",
|
|
3
|
+
purpose: "Answer a technical question with current primary sources and clearly separated facts, inference, and uncertainty.",
|
|
4
|
+
workflow: [
|
|
5
|
+
"Clarify the decision the research must support.",
|
|
6
|
+
"Search official documentation and source repositories first.",
|
|
7
|
+
"Cross-check the strongest claims.",
|
|
8
|
+
"Synthesize a compact recommendation with source links.",
|
|
9
|
+
],
|
|
10
|
+
workers: ["orch-docs", "orch-research", "orch-critic"],
|
|
11
|
+
output: ["findings", "sources", "uncertainties", "recommendation"],
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=research.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"research.js","sourceRoot":"","sources":["../../src/profiles/research.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,eAAe,GAAsB;IAChD,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,mHAAmH;IAC5H,QAAQ,EAAE;QACR,iDAAiD;QACjD,8DAA8D;QAC9D,mCAAmC;QACnC,wDAAwD;KACzD;IACD,OAAO,EAAE,CAAC,WAAW,EAAE,eAAe,EAAE,aAAa,CAAC;IACtD,MAAM,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,CAAC;CACnE,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const securityProfile = {
|
|
2
|
+
name: "security",
|
|
3
|
+
purpose: "Identify realistic attack paths and authorization, data-handling, and dependency risks without making unsupported claims.",
|
|
4
|
+
workflow: [
|
|
5
|
+
"Establish assets, trust boundaries, and attacker capabilities.",
|
|
6
|
+
"Inspect the relevant code and configuration paths.",
|
|
7
|
+
"Validate each issue with a concrete exploit scenario or evidence.",
|
|
8
|
+
"Rank findings by impact and likelihood and suggest mitigations.",
|
|
9
|
+
],
|
|
10
|
+
workers: ["orch-security", "orch-repo", "orch-docs", "orch-critic"],
|
|
11
|
+
output: ["threat model", "validated findings", "severity", "mitigations", "verification"],
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=security.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/profiles/security.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,eAAe,GAAsB;IAChD,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,2HAA2H;IACpI,QAAQ,EAAE;QACR,gEAAgE;QAChE,oDAAoD;QACpD,mEAAmE;QACnE,iEAAiE;KAClE;IACD,OAAO,EAAE,CAAC,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,CAAC;IACnE,MAAM,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,CAAC;CAC1F,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ProfileName } from "../config/schema.js";
|
|
2
|
+
export type WorkerName = "orch-repo" | "orch-docs" | "orch-tests" | "orch-research" | "orch-critic" | "orch-security" | "orch-visual-reference" | "orch-visual-generate" | "orch-visual-review";
|
|
3
|
+
export interface ProfileDefinition {
|
|
4
|
+
name: ProfileName;
|
|
5
|
+
purpose: string;
|
|
6
|
+
workflow: string[];
|
|
7
|
+
workers: WorkerName[];
|
|
8
|
+
output: string[];
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/profiles/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const uiProfile = {
|
|
2
|
+
name: "ui",
|
|
3
|
+
purpose: "Define what users should see, understand, and do across interaction states and viewport sizes.",
|
|
4
|
+
workflow: [
|
|
5
|
+
"Inspect the current UI system and constraints.",
|
|
6
|
+
"Collect relevant visual references and interaction patterns.",
|
|
7
|
+
"Define hierarchy, layout, states, motion, and accessibility.",
|
|
8
|
+
"Review the proposal against the actual product context.",
|
|
9
|
+
],
|
|
10
|
+
workers: ["orch-repo", "orch-visual-reference", "orch-visual-generate", "orch-visual-review", "orch-critic"],
|
|
11
|
+
output: ["visual direction", "interaction states", "responsive behavior", "component plan", "accessibility notes"],
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=ui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/profiles/ui.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,SAAS,GAAsB;IAC1C,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,gGAAgG;IACzG,QAAQ,EAAE;QACR,gDAAgD;QAChD,8DAA8D;QAC9D,8DAA8D;QAC9D,yDAAyD;KAC1D;IACD,OAAO,EAAE,CAAC,WAAW,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,aAAa,CAAC;IAC5G,MAAM,EAAE,CAAC,kBAAkB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,qBAAqB,CAAC;CACnH,CAAA"}
|