@oeronteros-1/opencode-orchestra 1.0.22 → 1.0.24
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 +19 -5
- package/dashboard-dist/assets/index-Dc5lp8wX.js +124 -0
- package/dashboard-dist/index.html +1 -1
- package/dist/agents/build.js +4 -0
- package/dist/agents/build.js.map +1 -1
- package/dist/agents/editor.d.ts +3 -0
- package/dist/agents/editor.js +12 -0
- package/dist/agents/editor.js.map +1 -0
- package/dist/agents/integrator.d.ts +3 -0
- package/dist/agents/integrator.js +12 -0
- package/dist/agents/integrator.js.map +1 -0
- package/dist/agents/lead.js +3 -1
- package/dist/agents/lead.js.map +1 -1
- package/dist/agents/workers.js +1 -6
- package/dist/agents/workers.js.map +1 -1
- package/dist/cache-refresh.d.ts +42 -0
- package/dist/cache-refresh.js +130 -0
- package/dist/cache-refresh.js.map +1 -0
- package/dist/cli.d.ts +16 -2
- package/dist/cli.js +59 -26
- package/dist/cli.js.map +1 -1
- package/dist/config/schema.d.ts +11 -1
- package/dist/config/schema.js +30 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/dashboard/server.js +2 -2
- package/dist/dashboard/server.js.map +1 -1
- package/dist/index.js +35 -12
- package/dist/index.js.map +1 -1
- package/dist/orchestration/ownership.d.ts +7 -0
- package/dist/orchestration/ownership.js +45 -0
- package/dist/orchestration/ownership.js.map +1 -0
- package/dist/orchestration/worktree-adapter.d.ts +3 -0
- package/dist/orchestration/worktree-adapter.js +45 -0
- package/dist/orchestration/worktree-adapter.js.map +1 -0
- package/dist/orchestration/worktrees.d.ts +22 -0
- package/dist/orchestration/worktrees.js +27 -0
- package/dist/orchestration/worktrees.js.map +1 -0
- package/dist/pricing/cost.d.ts +29 -0
- package/dist/pricing/cost.js +47 -0
- package/dist/pricing/cost.js.map +1 -0
- package/dist/pricing/model-match.d.ts +59 -0
- package/dist/pricing/model-match.js +134 -0
- package/dist/pricing/model-match.js.map +1 -0
- package/dist/pricing/openrouter.d.ts +60 -0
- package/dist/pricing/openrouter.js +150 -0
- package/dist/pricing/openrouter.js.map +1 -0
- package/dist/pricing/resolver.d.ts +50 -0
- package/dist/pricing/resolver.js +145 -0
- package/dist/pricing/resolver.js.map +1 -0
- package/dist/prompts/load.js +1 -1
- package/dist/prompts/load.js.map +1 -1
- package/dist/routing/planner.d.ts +14 -1
- package/dist/routing/planner.js +23 -1
- package/dist/routing/planner.js.map +1 -1
- package/dist/routing/pricing/estimate.d.ts +14 -1
- package/dist/routing/pricing/estimate.js +81 -20
- package/dist/routing/pricing/estimate.js.map +1 -1
- package/dist/telemetry/ledger.d.ts +6 -1
- package/dist/telemetry/ledger.js +15 -3
- package/dist/telemetry/ledger.js.map +1 -1
- package/dist/tools.d.ts +3 -0
- package/dist/tools.js +44 -1
- package/dist/tools.js.map +1 -1
- package/package.json +16 -2
- package/prompts/lead.md +1 -0
- package/schema/opencode-orchestra.schema.json +23 -1
- package/dashboard-dist/assets/index-BZTn_d2K.js +0 -124
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { resolveModel } from "../model-resolver.js";
|
|
2
|
+
import { combinedPrice, lookupPrice } from "./prices.js";
|
|
3
|
+
import { resolvePricing } from "../../pricing/resolver.js";
|
|
3
4
|
export const DEFAULT_TOKEN_ESTIMATES = {
|
|
4
5
|
workerTokens: 4_000,
|
|
5
6
|
leadTokens: 6_000,
|
|
@@ -13,7 +14,12 @@ function costOfTokens(price, tokens) {
|
|
|
13
14
|
const input = tokens * 0.75;
|
|
14
15
|
return (input * price.input + output * price.output) / 1_000_000;
|
|
15
16
|
}
|
|
16
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Resolve the pool's chosen model for a budget/capability, then resolve its
|
|
19
|
+
* pricing through the full ladder (config declarations -> explicit price ->
|
|
20
|
+
* aliases -> provider snapshot -> OpenRouter fallback).
|
|
21
|
+
*/
|
|
22
|
+
async function resolvePoolPricing(pool, budget, capability, config) {
|
|
17
23
|
const resolved = resolveModel({
|
|
18
24
|
pool,
|
|
19
25
|
capability,
|
|
@@ -28,28 +34,78 @@ function resolvePoolPriceId(pool, budget, capability, snapshot) {
|
|
|
28
34
|
});
|
|
29
35
|
if (!resolved)
|
|
30
36
|
return {};
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
:
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
const input = {
|
|
38
|
+
id: resolved.id,
|
|
39
|
+
declaredCost: resolved.cost,
|
|
40
|
+
...(resolved.priceInput !== undefined && resolved.priceOutput !== undefined
|
|
41
|
+
? { explicitPrice: { input: resolved.priceInput, output: resolved.priceOutput } }
|
|
42
|
+
: {}),
|
|
43
|
+
};
|
|
44
|
+
const resolution = await resolvePricing(input, config);
|
|
45
|
+
return { id: resolved.id, resolution };
|
|
38
46
|
}
|
|
39
|
-
export function estimateCost(input) {
|
|
47
|
+
export async function estimateCost(input) {
|
|
40
48
|
const tokens = input.tokens ?? DEFAULT_TOKEN_ESTIMATES;
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
49
|
+
const config = {
|
|
50
|
+
snapshot: input.snapshot,
|
|
51
|
+
...(input.aliases?.length ? { aliases: input.aliases } : {}),
|
|
52
|
+
...(input.openRouter ? { openRouter: input.openRouter } : {}),
|
|
53
|
+
};
|
|
54
|
+
const lead = await resolvePoolPricing(input.leadPool, input.budget, "reasoning", config);
|
|
55
|
+
const judge = await resolvePoolPricing(input.judgePool, input.budget, "review", config);
|
|
56
|
+
let workersCost = 0;
|
|
57
|
+
let paidCalls = 0;
|
|
58
|
+
let freeCalls = 0;
|
|
59
|
+
let subscriptionCalls = 0;
|
|
60
|
+
let unknownCalls = 0;
|
|
61
|
+
for (const node of input.plan.nodes) {
|
|
44
62
|
const poolKey = input.workerPoolOf(node.worker);
|
|
45
63
|
const pool = input.workerPools[poolKey] ?? [];
|
|
46
64
|
const capability = input.workerCapabilityOf?.(node.worker)
|
|
47
65
|
?? (poolKey === "image" ? "image" : poolKey === "vision" ? "vision" : poolKey === "research" ? "research" : poolKey === "reasoning" ? "reasoning" : "code");
|
|
48
|
-
const {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
66
|
+
const { resolution } = await resolvePoolPricing(pool, input.budget, capability, config);
|
|
67
|
+
if (!resolution)
|
|
68
|
+
continue;
|
|
69
|
+
if (resolution.status === "paid") {
|
|
70
|
+
workersCost += costOfTokens({ input: resolution.input ?? 0, output: resolution.output ?? 0 }, tokens.workerTokens);
|
|
71
|
+
paidCalls += 1;
|
|
72
|
+
}
|
|
73
|
+
else if (resolution.status === "free") {
|
|
74
|
+
freeCalls += 1;
|
|
75
|
+
}
|
|
76
|
+
else if (resolution.status === "subscription") {
|
|
77
|
+
subscriptionCalls += 1;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
unknownCalls += 1;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const leadCost = lead.resolution?.status === "paid"
|
|
84
|
+
? costOfTokens({ input: lead.resolution.input ?? 0, output: lead.resolution.output ?? 0 }, tokens.leadTokens)
|
|
85
|
+
: 0;
|
|
86
|
+
const judgeCost = judge.resolution?.status === "paid"
|
|
87
|
+
? costOfTokens({ input: judge.resolution.input ?? 0, output: judge.resolution.output ?? 0 }, tokens.judgeTokens)
|
|
88
|
+
: 0;
|
|
89
|
+
if (lead.resolution) {
|
|
90
|
+
if (lead.resolution.status === "paid")
|
|
91
|
+
paidCalls += 1;
|
|
92
|
+
else if (lead.resolution.status === "free")
|
|
93
|
+
freeCalls += 1;
|
|
94
|
+
else if (lead.resolution.status === "subscription")
|
|
95
|
+
subscriptionCalls += 1;
|
|
96
|
+
else
|
|
97
|
+
unknownCalls += 1;
|
|
98
|
+
}
|
|
99
|
+
if (judge.resolution) {
|
|
100
|
+
if (judge.resolution.status === "paid")
|
|
101
|
+
paidCalls += 1;
|
|
102
|
+
else if (judge.resolution.status === "free")
|
|
103
|
+
freeCalls += 1;
|
|
104
|
+
else if (judge.resolution.status === "subscription")
|
|
105
|
+
subscriptionCalls += 1;
|
|
106
|
+
else
|
|
107
|
+
unknownCalls += 1;
|
|
108
|
+
}
|
|
53
109
|
const subtotal = workersCost + leadCost + judgeCost;
|
|
54
110
|
const total = subtotal * 1.2;
|
|
55
111
|
const breakdown = {
|
|
@@ -59,12 +115,17 @@ export function estimateCost(input) {
|
|
|
59
115
|
judgeCost,
|
|
60
116
|
subtotal,
|
|
61
117
|
total,
|
|
118
|
+
unknownCalls,
|
|
119
|
+
freeCalls,
|
|
120
|
+
subscriptionCalls,
|
|
121
|
+
paidCalls,
|
|
62
122
|
};
|
|
123
|
+
const unknownNote = unknownCalls > 0 ? `, ${unknownCalls} call(s) with unknown price excluded` : "";
|
|
63
124
|
return {
|
|
64
125
|
budget: input.budget,
|
|
65
126
|
total,
|
|
66
127
|
breakdown,
|
|
67
|
-
summary: `This task in ${input.budget} mode will cost roughly $${total.toFixed(2)} (${breakdown.workers} worker calls, lead, ${judge.
|
|
128
|
+
summary: `This task in ${input.budget} mode will cost roughly $${total.toFixed(2)} (${breakdown.workers} worker calls, lead, ${judge.resolution?.status === "paid" ? "plus judge" : "no judge"} arbitration${unknownNote}).`,
|
|
68
129
|
};
|
|
69
130
|
}
|
|
70
131
|
/** Compare an estimate against a warning threshold; returns a pre-run message. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"estimate.js","sourceRoot":"","sources":["../../../src/routing/pricing/estimate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"estimate.js","sourceRoot":"","sources":["../../../src/routing/pricing/estimate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ModelCandidateInput, ProfileName } from "../config/schema.js";
|
|
2
|
+
import type { PricingStatus } from "../pricing/cost.js";
|
|
2
3
|
export interface TokenUsage {
|
|
3
4
|
input: number;
|
|
4
5
|
output: number;
|
|
@@ -17,6 +18,8 @@ export interface MessageUsage {
|
|
|
17
18
|
completedAt?: number;
|
|
18
19
|
finish?: string;
|
|
19
20
|
tokens: TokenUsage;
|
|
21
|
+
/** How pricing was classified at record time (unknown = no rate found). */
|
|
22
|
+
pricingStatus?: PricingStatus;
|
|
20
23
|
/** Opt-in debug text: only recorded when telemetry.storeTexts is enabled. */
|
|
21
24
|
prompt?: string;
|
|
22
25
|
reply?: string;
|
|
@@ -27,6 +30,7 @@ export interface SessionLedger {
|
|
|
27
30
|
premiumEscalations: number;
|
|
28
31
|
estimatedPaidUsage: number;
|
|
29
32
|
freeWorkerCalls: number;
|
|
33
|
+
unknownPriceCalls: number;
|
|
30
34
|
consensus?: number;
|
|
31
35
|
messages: Record<string, MessageUsage>;
|
|
32
36
|
}
|
|
@@ -57,9 +61,10 @@ export declare class Ledger {
|
|
|
57
61
|
readonly stateFile: string;
|
|
58
62
|
private readonly storeTexts;
|
|
59
63
|
private readonly modelCosts;
|
|
64
|
+
private readonly pricingStatusOf;
|
|
60
65
|
private state?;
|
|
61
66
|
private queue;
|
|
62
|
-
constructor(directory: string, telemetryDirectory: string, enabled: boolean, pools: ModelCandidateInput[][], storeTexts?: boolean);
|
|
67
|
+
constructor(directory: string, telemetryDirectory: string, enabled: boolean, pools: ModelCandidateInput[][], storeTexts?: boolean, pricingStatusOf?: (providerID: string | undefined, modelID: string | undefined) => PricingStatus | undefined);
|
|
63
68
|
private load;
|
|
64
69
|
private save;
|
|
65
70
|
private mutate;
|
package/dist/telemetry/ledger.js
CHANGED
|
@@ -7,6 +7,7 @@ function emptySession() {
|
|
|
7
7
|
premiumEscalations: 0,
|
|
8
8
|
estimatedPaidUsage: 0,
|
|
9
9
|
freeWorkerCalls: 0,
|
|
10
|
+
unknownPriceCalls: 0,
|
|
10
11
|
messages: {},
|
|
11
12
|
};
|
|
12
13
|
}
|
|
@@ -37,6 +38,7 @@ function upgradeState(input) {
|
|
|
37
38
|
session.premiumEscalations ??= 0;
|
|
38
39
|
session.estimatedPaidUsage ??= 0;
|
|
39
40
|
session.freeWorkerCalls ??= 0;
|
|
41
|
+
session.unknownPriceCalls ??= 0;
|
|
40
42
|
for (const [id, message] of Object.entries(session.messages)) {
|
|
41
43
|
session.messages[id] = {
|
|
42
44
|
...message,
|
|
@@ -64,11 +66,13 @@ export class Ledger {
|
|
|
64
66
|
stateFile;
|
|
65
67
|
storeTexts;
|
|
66
68
|
modelCosts;
|
|
69
|
+
pricingStatusOf;
|
|
67
70
|
state;
|
|
68
71
|
queue = Promise.resolve();
|
|
69
|
-
constructor(directory, telemetryDirectory, enabled, pools, storeTexts = false) {
|
|
72
|
+
constructor(directory, telemetryDirectory, enabled, pools, storeTexts = false, pricingStatusOf) {
|
|
70
73
|
this.enabled = enabled;
|
|
71
74
|
this.storeTexts = storeTexts;
|
|
75
|
+
this.pricingStatusOf = pricingStatusOf;
|
|
72
76
|
this.stateFile = path.resolve(directory, telemetryDirectory, "state.json");
|
|
73
77
|
this.modelCosts = new Map(pools.flat().map((candidate) => {
|
|
74
78
|
const normalized = normalizeCandidate(candidate);
|
|
@@ -127,6 +131,8 @@ export class Ledger {
|
|
|
127
131
|
}
|
|
128
132
|
async recordAssistant(info) {
|
|
129
133
|
const agent = info.mode ?? "default";
|
|
134
|
+
const model = info.providerID && info.modelID ? `${info.providerID}/${info.modelID}` : undefined;
|
|
135
|
+
const pricingStatus = this.pricingStatusOf?.(info.providerID, info.modelID);
|
|
130
136
|
await this.mutate((state) => {
|
|
131
137
|
const session = (state.sessions[info.sessionID] ??= emptySession());
|
|
132
138
|
const previous = session.messages[info.id];
|
|
@@ -137,8 +143,12 @@ export class Ledger {
|
|
|
137
143
|
session.agents[agent] = (session.agents[agent] ?? 0) + 1;
|
|
138
144
|
if (agent === "orch-judge")
|
|
139
145
|
session.premiumEscalations += 1;
|
|
140
|
-
const
|
|
141
|
-
if (
|
|
146
|
+
const declared = model ? this.modelCosts.get(model) : undefined;
|
|
147
|
+
if (pricingStatus === "unknown") {
|
|
148
|
+
session.unknownPriceCalls += 1;
|
|
149
|
+
}
|
|
150
|
+
if (agent.startsWith("orch-") && agent !== "orch-lead" && agent !== "orch-judge" && model
|
|
151
|
+
&& (declared === "free" || (declared === undefined && pricingStatus === "free"))) {
|
|
142
152
|
session.freeWorkerCalls += 1;
|
|
143
153
|
}
|
|
144
154
|
}
|
|
@@ -151,6 +161,7 @@ export class Ledger {
|
|
|
151
161
|
...(info.time?.completed ? { completedAt: info.time.completed } : {}),
|
|
152
162
|
...(info.finish ? { finish: info.finish } : {}),
|
|
153
163
|
tokens: normalizeTokens(info.tokens),
|
|
164
|
+
...(pricingStatus ? { pricingStatus } : {}),
|
|
154
165
|
...(previous?.prompt !== undefined ? { prompt: previous.prompt } : {}),
|
|
155
166
|
...(previous?.reply !== undefined ? { reply: previous.reply } : {}),
|
|
156
167
|
};
|
|
@@ -198,6 +209,7 @@ export class Ledger {
|
|
|
198
209
|
`premium escalations: ${session.premiumEscalations}`,
|
|
199
210
|
`estimated paid usage: $${session.estimatedPaidUsage.toFixed(4)}`,
|
|
200
211
|
`free worker calls: ${session.freeWorkerCalls}`,
|
|
212
|
+
`unknown price calls: ${session.unknownPriceCalls}`,
|
|
201
213
|
`consensus: ${session.consensus === undefined ? "not recorded" : `${Math.round(session.consensus * 100)}%`}`,
|
|
202
214
|
].join("\n");
|
|
203
215
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../src/telemetry/ledger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../src/telemetry/ledger.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.d.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { type ToolDefinition } from "@opencode-ai/plugin";
|
|
2
2
|
import type { OrchestraConfig } from "./config/schema.js";
|
|
3
3
|
import type { PriceSnapshot } from "./routing/pricing/prices.js";
|
|
4
|
+
import type { ModelAliasEntry, OpenRouterSource } from "./pricing/resolver.js";
|
|
4
5
|
import type { Ledger } from "./telemetry/ledger.js";
|
|
5
6
|
import { type PluginStatus } from "./plugin-status.js";
|
|
6
7
|
export interface PricingContext {
|
|
7
8
|
snapshot: PriceSnapshot;
|
|
9
|
+
aliases?: ModelAliasEntry[];
|
|
10
|
+
openRouter?: OpenRouterSource;
|
|
8
11
|
}
|
|
9
12
|
export declare function createOrchestraTools(config: OrchestraConfig, ledger: Ledger, pluginStatus?: PluginStatus, pricing?: PricingContext): Record<string, ToolDefinition>;
|
package/dist/tools.js
CHANGED
|
@@ -5,6 +5,8 @@ import { classifyTask } from "./routing/classifier.js";
|
|
|
5
5
|
import { createClassifierCache } from "./routing/classifier-cache.js";
|
|
6
6
|
import { decideEscalation } from "./routing/escalation.js";
|
|
7
7
|
import { planTask } from "./routing/planner.js";
|
|
8
|
+
import { validateOwnership, validateChangedFiles } from "./orchestration/ownership.js";
|
|
9
|
+
import { assertCommitDescendsFromBase, collectCommitChanges, systemGit } from "./orchestration/worktrees.js";
|
|
8
10
|
import { createBudgetGuard, paidBudgetFor } from "./routing/budget-guard.js";
|
|
9
11
|
import { estimateCost, formatEstimateWarning } from "./routing/pricing/estimate.js";
|
|
10
12
|
import { workerCapability, workerPoolKey } from "./agents/workers.js";
|
|
@@ -12,6 +14,45 @@ import { formatPluginStatus } from "./plugin-status.js";
|
|
|
12
14
|
const classificationCache = createClassifierCache();
|
|
13
15
|
export function createOrchestraTools(config, ledger, pluginStatus, pricing) {
|
|
14
16
|
return {
|
|
17
|
+
orchestration_prepare_edit_plan: tool({
|
|
18
|
+
description: "Validate explicit non-overlapping ownership partitions and prepare an isolated editor DAG.",
|
|
19
|
+
args: {
|
|
20
|
+
task: tool.schema.string().min(1),
|
|
21
|
+
profile: tool.schema.string().optional(),
|
|
22
|
+
partitions: tool.schema.array(tool.schema.object({ id: tool.schema.string().min(1), description: tool.schema.string().min(1), ownership: tool.schema.array(tool.schema.string().min(1)).min(1) })).min(1),
|
|
23
|
+
},
|
|
24
|
+
async execute(args) {
|
|
25
|
+
if (config.orchestration.parallelEditors === 0)
|
|
26
|
+
return "Parallel editor mode is disabled (orchestration.parallelEditors is 0).";
|
|
27
|
+
if (args.partitions.length > config.orchestration.parallelEditors)
|
|
28
|
+
return JSON.stringify({ ok: false, violations: ["editor partition count exceeds parallelEditors"] }, null, 2);
|
|
29
|
+
const violations = validateOwnership(args.partitions.map((p) => ({ id: p.id, paths: p.ownership })));
|
|
30
|
+
if (violations.length)
|
|
31
|
+
return JSON.stringify({ ok: false, violations }, null, 2);
|
|
32
|
+
const classification = classifyTask(args.task, config.orchestration.profiles);
|
|
33
|
+
const profile = args.profile && profileNameSchema.safeParse(args.profile).success ? args.profile : classification.profile;
|
|
34
|
+
const plan = planTask(profile, classification.secondaryProfiles, { maxNodes: config.orchestration.maxWorkers, editorPartitions: args.partitions, includeIntegrator: true });
|
|
35
|
+
const planProblems = plan.nodes.length > config.orchestration.maxWorkers ? ["editor plan exceeds maxWorkers; reduce evidence workers or partitions"] : [];
|
|
36
|
+
if (planProblems.length)
|
|
37
|
+
return JSON.stringify({ ok: false, violations: planProblems, plan }, null, 2);
|
|
38
|
+
return JSON.stringify({ ok: true, plan, parallelEditors: Math.min(config.orchestration.parallelEditors, args.partitions.length), worktreeRoot: config.orchestration.worktreeRoot ?? ".orchestra/worktrees" }, null, 2);
|
|
39
|
+
},
|
|
40
|
+
}),
|
|
41
|
+
orchestration_validate_commit: tool({
|
|
42
|
+
description: "Validate an editor commit using the actual git diff and explicit ownership, never worker claims.",
|
|
43
|
+
args: {
|
|
44
|
+
baseSha: tool.schema.string().min(7), commitSha: tool.schema.string().min(7), nodeId: tool.schema.string().min(1),
|
|
45
|
+
partitions: tool.schema.array(tool.schema.object({ id: tool.schema.string().min(1), ownership: tool.schema.array(tool.schema.string().min(1)).min(1) })).min(1),
|
|
46
|
+
},
|
|
47
|
+
async execute(args, context) {
|
|
48
|
+
await assertCommitDescendsFromBase(systemGit, context.worktree, args.baseSha, args.commitSha);
|
|
49
|
+
const changes = await collectCommitChanges(systemGit, context.worktree, args.baseSha, args.commitSha);
|
|
50
|
+
const changed = Object.fromEntries(args.partitions.map((p) => [p.id, p.id === args.nodeId ? changes.flatMap((c) => c.oldPath ? [c.oldPath, c.path] : [c.path]) : []]));
|
|
51
|
+
const ownership = args.partitions.map((p) => ({ id: p.id, paths: p.ownership }));
|
|
52
|
+
const violations = validateChangedFiles(ownership, changed);
|
|
53
|
+
return JSON.stringify({ ok: violations.length === 0, nodeId: args.nodeId, baseSha: args.baseSha, commitSha: args.commitSha, changes, violations }, null, 2);
|
|
54
|
+
},
|
|
55
|
+
}),
|
|
15
56
|
orchestra_route: tool({
|
|
16
57
|
description: "Classify a complex task and return the recommended OpenCode Orchestra worker team for the active budget mode. This does not execute the team.",
|
|
17
58
|
args: {
|
|
@@ -68,7 +109,7 @@ export function createOrchestraTools(config, ledger, pluginStatus, pricing) {
|
|
|
68
109
|
// Pre-run cost estimate (informational; does not block execution).
|
|
69
110
|
let estimate;
|
|
70
111
|
if (config.pricing.estimate && pricing?.snapshot) {
|
|
71
|
-
estimate = estimateCost({
|
|
112
|
+
estimate = await estimateCost({
|
|
72
113
|
budget: config.budget,
|
|
73
114
|
plan,
|
|
74
115
|
workerPools: config.models.worker,
|
|
@@ -78,6 +119,8 @@ export function createOrchestraTools(config, ledger, pluginStatus, pricing) {
|
|
|
78
119
|
workerCapabilityOf: workerCapability,
|
|
79
120
|
snapshot: pricing.snapshot,
|
|
80
121
|
tokens: { workerTokens: 4000, leadTokens: 6000, judgeTokens: 4000 },
|
|
122
|
+
...(pricing.aliases?.length ? { aliases: pricing.aliases } : {}),
|
|
123
|
+
...(pricing.openRouter ? { openRouter: pricing.openRouter } : {}),
|
|
81
124
|
});
|
|
82
125
|
}
|
|
83
126
|
const eboboHint = config.budget === "ebobo"
|
package/dist/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAuB,MAAM,qBAAqB,CAAA;AAE/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,YAAY,EAAuB,MAAM,yBAAyB,CAAA;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAC5E,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oeronteros-1/opencode-orchestra",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.24",
|
|
4
4
|
"description": "Production-ready model routing, specialist agents, diagnostics, telemetry, and dashboard for OpenCode",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -50,13 +50,14 @@
|
|
|
50
50
|
},
|
|
51
51
|
"scripts": {
|
|
52
52
|
"build": "npm run build:dashboard && npm run build:plugin",
|
|
53
|
+
"prebuild:dashboard": "node scripts/ensure-lightningcss.cjs",
|
|
53
54
|
"build:dashboard": "vite build --config dashboard/vite.config.ts",
|
|
54
55
|
"build:plugin": "tsc -p tsconfig.build.json",
|
|
55
56
|
"dev:dashboard": "vite --config dashboard/vite.config.ts",
|
|
56
57
|
"prepublishOnly": "npm run check",
|
|
57
58
|
"prepack": "npm run build",
|
|
58
59
|
"typecheck": "tsc --noEmit && tsc -p dashboard/tsconfig.json",
|
|
59
|
-
"test": "tsc -p tsconfig.test.json && node --test dist-test/test/config.test.js dist-test/test/classifier.test.js dist-test/test/model-resolver.test.js dist-test/test/model-discovery.test.js dist-test/test/budget.test.js dist-test/test/agents.test.js dist-test/test/plugin.test.js dist-test/test/plugin-status.test.js dist-test/test/cli.test.js dist-test/test/dashboard.test.js dist-test/test/live.test.js dist-test/test/ledger.test.js dist-test/test/analytics.test.js dist-test/test/routing-features.test.js dist-test/test/pricing.test.js dist-test/test/fallback.test.js dist-test/test/integration.test.js dist-test/test/doctor.test.js",
|
|
60
|
+
"test": "tsc -p tsconfig.test.json && node --test dist-test/test/config.test.js dist-test/test/classifier.test.js dist-test/test/cache-refresh.test.js dist-test/test/model-resolver.test.js dist-test/test/model-discovery.test.js dist-test/test/budget.test.js dist-test/test/agents.test.js dist-test/test/plugin.test.js dist-test/test/plugin-status.test.js dist-test/test/cli.test.js dist-test/test/dashboard.test.js dist-test/test/live.test.js dist-test/test/ledger.test.js dist-test/test/analytics.test.js dist-test/test/routing-features.test.js dist-test/test/ownership.test.js dist-test/test/worktrees.test.js dist-test/test/pricing.test.js dist-test/test/fallback.test.js dist-test/test/integration.test.js dist-test/test/doctor.test.js dist-test/test/model-match.test.js dist-test/test/cost.test.js dist-test/test/openrouter.test.js dist-test/test/pricing-resolver.test.js",
|
|
60
61
|
"check": "npm run typecheck && npm test"
|
|
61
62
|
},
|
|
62
63
|
"dependencies": {
|
|
@@ -64,6 +65,19 @@
|
|
|
64
65
|
"jsonc-parser": "^3.3.1",
|
|
65
66
|
"zod": "^4.0.0"
|
|
66
67
|
},
|
|
68
|
+
"optionalDependencies": {
|
|
69
|
+
"lightningcss-android-arm64": "1.32.0",
|
|
70
|
+
"lightningcss-darwin-arm64": "1.32.0",
|
|
71
|
+
"lightningcss-darwin-x64": "1.32.0",
|
|
72
|
+
"lightningcss-freebsd-x64": "1.32.0",
|
|
73
|
+
"lightningcss-linux-arm-gnueabihf": "1.32.0",
|
|
74
|
+
"lightningcss-linux-arm64-gnu": "1.32.0",
|
|
75
|
+
"lightningcss-linux-arm64-musl": "1.32.0",
|
|
76
|
+
"lightningcss-linux-x64-gnu": "1.32.0",
|
|
77
|
+
"lightningcss-linux-x64-musl": "1.32.0",
|
|
78
|
+
"lightningcss-win32-arm64-msvc": "1.32.0",
|
|
79
|
+
"lightningcss-win32-x64-msvc": "1.32.0"
|
|
80
|
+
},
|
|
67
81
|
"devDependencies": {
|
|
68
82
|
"@base-ui/react": "^1.7.0",
|
|
69
83
|
"@hookform/resolvers": "^5.9.0",
|
package/prompts/lead.md
CHANGED
|
@@ -14,6 +14,7 @@ Operating rules:
|
|
|
14
14
|
6. Compare claims, evidence, and uncertainty. Do not treat repeated unsupported opinions as consensus.
|
|
15
15
|
7. Invoke `orch-judge` only for critical risk or genuinely unresolved disagreement. Never use it merely to polish prose.
|
|
16
16
|
8. After evidence is merged, make the smallest correct file edits and run relevant verification. Never invoke yourself or bypass the user's instructions, active skills, plans, TDD, or review workflow.
|
|
17
|
+
9. If using parallel editors, resolve one base HEAD, assign explicit non-overlapping repository-relative ownership partitions, create one experimental git worktree per editor, and pass its absolute path and base SHA. Editors must never share the main checkout. Validate actual git diff and ancestry before invoking orch-integrator exactly once; stop and retain worktrees on any conflict or validation failure.
|
|
17
18
|
|
|
18
19
|
For informational tasks, return a compact answer with:
|
|
19
20
|
|
|
@@ -37,6 +37,8 @@
|
|
|
37
37
|
"additionalProperties": false,
|
|
38
38
|
"properties": {
|
|
39
39
|
"parallelWorkers": { "type": "integer", "minimum": 1, "maximum": 8, "default": 3 },
|
|
40
|
+
"parallelEditors": { "type": "integer", "minimum": 0, "maximum": 8, "default": 0 },
|
|
41
|
+
"worktreeRoot": { "type": "string", "minLength": 1 },
|
|
40
42
|
"maxWorkers": { "type": "integer", "minimum": 1, "maximum": 12, "default": 5 },
|
|
41
43
|
"premiumEscalation": { "type": "boolean", "default": true },
|
|
42
44
|
"maxPremiumCallsPerTask": { "type": "integer", "minimum": 0, "maximum": 5, "default": 1 },
|
|
@@ -83,7 +85,27 @@
|
|
|
83
85
|
"endpoint": { "type": "string", "minLength": 1 },
|
|
84
86
|
"refreshIntervalHours": { "type": "integer", "minimum": 0, "maximum": 2160, "default": 0 },
|
|
85
87
|
"estimate": { "type": "boolean", "default": true },
|
|
86
|
-
"warnThresholdUSD": { "type": "number", "minimum": 0, "default": 0.5 }
|
|
88
|
+
"warnThresholdUSD": { "type": "number", "minimum": 0, "default": 0.5 },
|
|
89
|
+
"openrouter": {
|
|
90
|
+
"type": "object",
|
|
91
|
+
"additionalProperties": false,
|
|
92
|
+
"properties": {
|
|
93
|
+
"enabled": { "type": "boolean", "default": false },
|
|
94
|
+
"ttlHours": { "type": "integer", "minimum": 1, "maximum": 720, "default": 12 }
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
"aliases": {
|
|
98
|
+
"type": "array",
|
|
99
|
+
"items": {
|
|
100
|
+
"type": "object",
|
|
101
|
+
"additionalProperties": false,
|
|
102
|
+
"required": ["canonical", "aliases"],
|
|
103
|
+
"properties": {
|
|
104
|
+
"canonical": { "type": "string", "minLength": 1 },
|
|
105
|
+
"aliases": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } }
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
87
109
|
}
|
|
88
110
|
}
|
|
89
111
|
},
|