@mcoda/codali 0.1.133 → 0.1.135-codali.2
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 +37 -0
- package/ORCHESTRATION.md +387 -0
- package/README.md +103 -1
- package/config/alternate-local.example.json +49 -0
- package/config/docdex-runtime.json +21 -0
- package/config/orchestration.schema.json +548 -0
- package/config/raijin-suku.example.json +172 -0
- package/config/terminal-long-scenarios.v1.json +70 -0
- package/dist/agents/RoleResolution.d.ts.map +1 -1
- package/dist/agents/RoleResolution.js +4 -4
- package/dist/api/CodaliApi.d.ts +16 -0
- package/dist/api/CodaliApi.d.ts.map +1 -1
- package/dist/api/CodaliApi.js +39 -10
- package/dist/cli/AskCommand.d.ts +3 -0
- package/dist/cli/AskCommand.d.ts.map +1 -1
- package/dist/cli/AskCommand.js +76 -13
- package/dist/cli/RunCommand.d.ts +4 -0
- package/dist/cli/RunCommand.d.ts.map +1 -1
- package/dist/cli/RunCommand.js +110 -24
- package/dist/cli/TerminalCommand.d.ts +35 -0
- package/dist/cli/TerminalCommand.d.ts.map +1 -0
- package/dist/cli/TerminalCommand.js +616 -0
- package/dist/cli/TerminalCredentials.d.ts +3 -0
- package/dist/cli/TerminalCredentials.d.ts.map +1 -0
- package/dist/cli/TerminalCredentials.js +89 -0
- package/dist/cli/TerminalInput.d.ts +24 -0
- package/dist/cli/TerminalInput.d.ts.map +1 -0
- package/dist/cli/TerminalInput.js +98 -0
- package/dist/cli/TerminalText.d.ts +10 -0
- package/dist/cli/TerminalText.d.ts.map +1 -0
- package/dist/cli/TerminalText.js +53 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +33 -4
- package/dist/cognitive/ConfiguredPipeline.d.ts +34 -0
- package/dist/cognitive/ConfiguredPipeline.d.ts.map +1 -0
- package/dist/cognitive/ConfiguredPipeline.js +50 -0
- package/dist/cognitive/ValidationRunner.d.ts +4 -0
- package/dist/cognitive/ValidationRunner.d.ts.map +1 -1
- package/dist/cognitive/ValidationRunner.js +18 -41
- package/dist/config/NodeOrchestration.d.ts +21 -0
- package/dist/config/NodeOrchestration.d.ts.map +1 -0
- package/dist/config/NodeOrchestration.js +54 -0
- package/dist/config/OrchestrationConfig.d.ts +100 -0
- package/dist/config/OrchestrationConfig.d.ts.map +1 -0
- package/dist/config/OrchestrationConfig.js +245 -0
- package/dist/connectors/mcp/McpClient.d.ts +3 -1
- package/dist/connectors/mcp/McpClient.d.ts.map +1 -1
- package/dist/connectors/mcp/McpClient.js +3 -2
- package/dist/connectors/mcp/McpServerRegistry.d.ts +2 -2
- package/dist/connectors/mcp/McpServerRegistry.d.ts.map +1 -1
- package/dist/connectors/mcp/McpServerRegistry.js +39 -16
- package/dist/connectors/mcp/McpToolAdapter.js +2 -2
- package/dist/connectors/media/ConfiguredMediaTools.d.ts +6 -0
- package/dist/connectors/media/ConfiguredMediaTools.d.ts.map +1 -0
- package/dist/connectors/media/ConfiguredMediaTools.js +41 -0
- package/dist/connectors/media/ImageGenerationTool.js +3 -3
- package/dist/connectors/media/MediaArtifactReceipt.d.ts +5 -0
- package/dist/connectors/media/MediaArtifactReceipt.d.ts.map +1 -0
- package/dist/connectors/media/MediaArtifactReceipt.js +65 -0
- package/dist/connectors/media/MediaJobStore.d.ts +68 -0
- package/dist/connectors/media/MediaJobStore.d.ts.map +1 -0
- package/dist/connectors/media/MediaJobStore.js +199 -0
- package/dist/connectors/media/MediaJobWorker.d.ts +2 -0
- package/dist/connectors/media/MediaJobWorker.d.ts.map +1 -0
- package/dist/connectors/media/MediaJobWorker.js +65 -0
- package/dist/connectors/media/RemoteMediaJob.d.ts +6 -0
- package/dist/connectors/media/RemoteMediaJob.d.ts.map +1 -0
- package/dist/connectors/media/RemoteMediaJob.js +80 -0
- package/dist/docdex/DocdexClient.d.ts +18 -1
- package/dist/docdex/DocdexClient.d.ts.map +1 -1
- package/dist/docdex/DocdexClient.js +135 -19
- package/dist/docdex/ManagedDocdex.d.ts +29 -0
- package/dist/docdex/ManagedDocdex.d.ts.map +1 -0
- package/dist/docdex/ManagedDocdex.js +215 -0
- package/dist/docdex/ManagedRuntime.d.ts +28 -0
- package/dist/docdex/ManagedRuntime.d.ts.map +1 -0
- package/dist/docdex/ManagedRuntime.js +212 -0
- package/dist/eval/EvaluationProcess.d.ts +13 -0
- package/dist/eval/EvaluationProcess.d.ts.map +1 -0
- package/dist/eval/EvaluationProcess.js +76 -0
- package/dist/eval/LongWorkflowJourney.d.ts +34 -0
- package/dist/eval/LongWorkflowJourney.d.ts.map +1 -0
- package/dist/eval/LongWorkflowJourney.js +243 -0
- package/dist/eval/PlanningCorpus.d.ts +45 -0
- package/dist/eval/PlanningCorpus.d.ts.map +1 -0
- package/dist/eval/PlanningCorpus.js +189 -0
- package/dist/eval/PlanningCorpusRunner.d.ts +13 -0
- package/dist/eval/PlanningCorpusRunner.d.ts.map +1 -0
- package/dist/eval/PlanningCorpusRunner.js +89 -0
- package/dist/eval/TerminalCorpusRunner.d.ts +36 -0
- package/dist/eval/TerminalCorpusRunner.d.ts.map +1 -0
- package/dist/eval/TerminalCorpusRunner.js +222 -0
- package/dist/eval/TerminalTaskCorpus.d.ts +26 -0
- package/dist/eval/TerminalTaskCorpus.d.ts.map +1 -0
- package/dist/eval/TerminalTaskCorpus.js +105 -0
- package/dist/eval/TerminalWorkflowCorpus.d.ts +11 -0
- package/dist/eval/TerminalWorkflowCorpus.d.ts.map +1 -0
- package/dist/eval/TerminalWorkflowCorpus.js +116 -0
- package/dist/eval/fixtures/TerminalRecoveryJourney.d.ts +4 -0
- package/dist/eval/fixtures/TerminalRecoveryJourney.d.ts.map +1 -0
- package/dist/eval/fixtures/TerminalRecoveryJourney.js +132 -0
- package/dist/gateway/CodaliGateway.d.ts +2 -0
- package/dist/gateway/CodaliGateway.d.ts.map +1 -1
- package/dist/gateway/CodaliGateway.js +16 -4
- package/dist/gateway/ConfiguredGateway.d.ts +23 -0
- package/dist/gateway/ConfiguredGateway.d.ts.map +1 -0
- package/dist/gateway/ConfiguredGateway.js +44 -0
- package/dist/gateway/GatewayTracer.d.ts +1 -1
- package/dist/gateway/GatewayTracer.d.ts.map +1 -1
- package/dist/gateway/GatewayTracer.js +2 -27
- package/dist/gateway/LocalGatewayTaskRunner.d.ts.map +1 -1
- package/dist/gateway/LocalGatewayTaskRunner.js +13 -1
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -0
- package/dist/permissions/PermissionGate.d.ts +44 -0
- package/dist/permissions/PermissionGate.d.ts.map +1 -0
- package/dist/permissions/PermissionGate.js +97 -0
- package/dist/providers/ConfiguredEmbeddings.d.ts +43 -0
- package/dist/providers/ConfiguredEmbeddings.d.ts.map +1 -0
- package/dist/providers/ConfiguredEmbeddings.js +87 -0
- package/dist/providers/ConfiguredModelScope.d.ts +69 -0
- package/dist/providers/ConfiguredModelScope.d.ts.map +1 -0
- package/dist/providers/ConfiguredModelScope.js +113 -0
- package/dist/providers/ConfiguredProvider.d.ts +79 -0
- package/dist/providers/ConfiguredProvider.d.ts.map +1 -0
- package/dist/providers/ConfiguredProvider.js +238 -0
- package/dist/providers/ModelServiceError.d.ts +10 -0
- package/dist/providers/ModelServiceError.d.ts.map +1 -0
- package/dist/providers/ModelServiceError.js +45 -0
- package/dist/providers/MswarmWorkerProvider.d.ts.map +1 -1
- package/dist/providers/MswarmWorkerProvider.js +4 -0
- package/dist/providers/OpenAiCompatibleProvider.d.ts.map +1 -1
- package/dist/providers/OpenAiCompatibleProvider.js +134 -52
- package/dist/providers/ProviderTypes.d.ts +14 -0
- package/dist/providers/ProviderTypes.d.ts.map +1 -1
- package/dist/runtime/CodaliJobRuntime.d.ts +6 -0
- package/dist/runtime/CodaliJobRuntime.d.ts.map +1 -1
- package/dist/runtime/CodaliJobRuntime.js +36 -1
- package/dist/runtime/CodaliRuntime.d.ts +30 -0
- package/dist/runtime/CodaliRuntime.d.ts.map +1 -1
- package/dist/runtime/CodaliRuntime.js +71 -1
- package/dist/runtime/CompletionReport.d.ts +5 -0
- package/dist/runtime/CompletionReport.d.ts.map +1 -0
- package/dist/runtime/CompletionReport.js +12 -0
- package/dist/runtime/ProgressTracker.d.ts +17 -0
- package/dist/runtime/ProgressTracker.d.ts.map +1 -0
- package/dist/runtime/ProgressTracker.js +27 -0
- package/dist/runtime/RequestedTestEvidence.d.ts +12 -0
- package/dist/runtime/RequestedTestEvidence.d.ts.map +1 -0
- package/dist/runtime/RequestedTestEvidence.js +16 -0
- package/dist/runtime/RequiredRetrieval.d.ts +13 -0
- package/dist/runtime/RequiredRetrieval.d.ts.map +1 -0
- package/dist/runtime/RequiredRetrieval.js +25 -0
- package/dist/runtime/ReviewSource.d.ts +6 -0
- package/dist/runtime/ReviewSource.d.ts.map +1 -0
- package/dist/runtime/ReviewSource.js +38 -0
- package/dist/runtime/Runner.d.ts +13 -0
- package/dist/runtime/Runner.d.ts.map +1 -1
- package/dist/runtime/Runner.js +220 -158
- package/dist/runtime/SecretRedaction.d.ts +11 -0
- package/dist/runtime/SecretRedaction.d.ts.map +1 -0
- package/dist/runtime/SecretRedaction.js +85 -0
- package/dist/runtime/SessionController.d.ts +148 -0
- package/dist/runtime/SessionController.d.ts.map +1 -0
- package/dist/runtime/SessionController.js +1356 -0
- package/dist/runtime/StructuralEvidence.d.ts +22 -0
- package/dist/runtime/StructuralEvidence.d.ts.map +1 -0
- package/dist/runtime/StructuralEvidence.js +87 -0
- package/dist/runtime/TaskReviewContext.d.ts +34 -0
- package/dist/runtime/TaskReviewContext.d.ts.map +1 -0
- package/dist/runtime/TaskReviewContext.js +34 -0
- package/dist/runtime/ValidationOutput.d.ts +5 -0
- package/dist/runtime/ValidationOutput.d.ts.map +1 -0
- package/dist/runtime/ValidationOutput.js +32 -0
- package/dist/runtime/VerificationCommand.d.ts +3 -0
- package/dist/runtime/VerificationCommand.d.ts.map +1 -0
- package/dist/runtime/VerificationCommand.js +48 -0
- package/dist/runtime/WorkStatusPage.d.ts +15 -0
- package/dist/runtime/WorkStatusPage.d.ts.map +1 -0
- package/dist/runtime/WorkStatusPage.js +58 -0
- package/dist/runtime/WorkspaceLedger.d.ts +13 -0
- package/dist/runtime/WorkspaceLedger.d.ts.map +1 -0
- package/dist/runtime/WorkspaceLedger.js +145 -0
- package/dist/runtime/WorkspaceLock.d.ts.map +1 -1
- package/dist/runtime/WorkspaceLock.js +20 -17
- package/dist/runtime/WorkspaceSnapshot.d.ts +13 -0
- package/dist/runtime/WorkspaceSnapshot.d.ts.map +1 -0
- package/dist/runtime/WorkspaceSnapshot.js +88 -0
- package/dist/session/AtomicState.d.ts +13 -0
- package/dist/session/AtomicState.d.ts.map +1 -0
- package/dist/session/AtomicState.js +109 -0
- package/dist/session/SessionStoragePath.d.ts +15 -0
- package/dist/session/SessionStoragePath.d.ts.map +1 -0
- package/dist/session/SessionStoragePath.js +89 -0
- package/dist/session/SessionStore.d.ts +9 -0
- package/dist/session/SessionStore.d.ts.map +1 -1
- package/dist/session/SessionStore.js +181 -47
- package/dist/session/WorkState.d.ts +23 -0
- package/dist/session/WorkState.d.ts.map +1 -0
- package/dist/session/WorkState.js +367 -0
- package/dist/session/WorkTypes.d.ts +94 -0
- package/dist/session/WorkTypes.d.ts.map +1 -0
- package/dist/session/WorkTypes.js +1 -0
- package/dist/tools/ToolRegistry.d.ts +2 -0
- package/dist/tools/ToolRegistry.d.ts.map +1 -1
- package/dist/tools/ToolRegistry.js +12 -2
- package/dist/tools/ToolTypes.d.ts +16 -0
- package/dist/tools/ToolTypes.d.ts.map +1 -1
- package/dist/tools/docdex/DocdexTools.d.ts +2 -0
- package/dist/tools/docdex/DocdexTools.d.ts.map +1 -1
- package/dist/tools/docdex/DocdexTools.js +17 -2
- package/dist/tools/filesystem/FileTools.d.ts.map +1 -1
- package/dist/tools/filesystem/FileTools.js +30 -10
- package/dist/tools/shell/AsyncProcess.d.ts +16 -0
- package/dist/tools/shell/AsyncProcess.d.ts.map +1 -0
- package/dist/tools/shell/AsyncProcess.js +94 -0
- package/dist/tools/shell/DarwinRuntimeLibraries.d.ts +13 -0
- package/dist/tools/shell/DarwinRuntimeLibraries.d.ts.map +1 -0
- package/dist/tools/shell/DarwinRuntimeLibraries.js +130 -0
- package/dist/tools/shell/HostToolchain.d.ts +19 -0
- package/dist/tools/shell/HostToolchain.d.ts.map +1 -0
- package/dist/tools/shell/HostToolchain.js +264 -0
- package/dist/tools/shell/IsolatedExecutor.d.ts +15 -0
- package/dist/tools/shell/IsolatedExecutor.d.ts.map +1 -0
- package/dist/tools/shell/IsolatedExecutor.js +134 -0
- package/dist/tools/shell/ShellTool.d.ts.map +1 -1
- package/dist/tools/shell/ShellTool.js +9 -29
- package/dist/tools/shell/ShellWorkingDirectory.d.ts +3 -0
- package/dist/tools/shell/ShellWorkingDirectory.d.ts.map +1 -0
- package/dist/tools/shell/ShellWorkingDirectory.js +30 -0
- package/package.json +27 -24
package/dist/cli/RunCommand.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
|
-
import {
|
|
2
|
+
import { runProcess } from "../tools/shell/AsyncProcess.js";
|
|
3
3
|
import { createWriteStream, existsSync } from "node:fs";
|
|
4
4
|
import { readFile, mkdir } from "node:fs/promises";
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
import { createInterface } from "node:readline/promises";
|
|
7
7
|
import process from "node:process";
|
|
8
8
|
import { loadConfig } from "../config/ConfigLoader.js";
|
|
9
|
+
import { loadOrchestrationConfig } from "../config/OrchestrationConfig.js";
|
|
10
|
+
import { ConfiguredModelScope } from "../providers/ConfiguredModelScope.js";
|
|
9
11
|
import { createProvider } from "../providers/ProviderRegistry.js";
|
|
10
12
|
import { OpenAiCompatibleProvider } from "../providers/OpenAiCompatibleProvider.js";
|
|
11
13
|
import { OllamaRemoteProvider } from "../providers/OllamaRemoteProvider.js";
|
|
@@ -277,6 +279,20 @@ export const parseArgs = (argv) => {
|
|
|
277
279
|
i += 1;
|
|
278
280
|
continue;
|
|
279
281
|
}
|
|
282
|
+
if (arg === "--orchestration-config") {
|
|
283
|
+
if (!next || next.startsWith("--"))
|
|
284
|
+
throw new Error("--orchestration-config requires a file path");
|
|
285
|
+
parsed.orchestrationConfig = next;
|
|
286
|
+
i += 1;
|
|
287
|
+
continue;
|
|
288
|
+
}
|
|
289
|
+
if (arg === "--effort") {
|
|
290
|
+
if (!["low", "medium", "high", "max"].includes(next ?? ""))
|
|
291
|
+
throw new Error("--effort requires low|medium|high|max");
|
|
292
|
+
parsed.effort = next;
|
|
293
|
+
i += 1;
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
280
296
|
if (arg === "--config" && next) {
|
|
281
297
|
parsed.configPath = next;
|
|
282
298
|
i += 1;
|
|
@@ -627,7 +643,7 @@ const createStreamState = (flushEveryMs, outputStream) => {
|
|
|
627
643
|
},
|
|
628
644
|
};
|
|
629
645
|
};
|
|
630
|
-
const createPatchValidator = (workspaceRoot, allowShell, shellAllowlist) => {
|
|
646
|
+
const createPatchValidator = (workspaceRoot, allowShell, shellAllowlist, scope) => {
|
|
631
647
|
if (!allowShell)
|
|
632
648
|
return undefined;
|
|
633
649
|
const allowlist = new Set(shellAllowlist ?? []);
|
|
@@ -639,16 +655,8 @@ const createPatchValidator = (workspaceRoot, allowShell, shellAllowlist) => {
|
|
|
639
655
|
if (!allowlist.has("node")) {
|
|
640
656
|
return;
|
|
641
657
|
}
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
encoding: "utf8",
|
|
645
|
-
});
|
|
646
|
-
if (result.error) {
|
|
647
|
-
throw result.error;
|
|
648
|
-
}
|
|
649
|
-
if (result.status !== 0) {
|
|
650
|
-
throw new Error(result.stderr?.toString() || "node --check failed");
|
|
651
|
-
}
|
|
658
|
+
scope?.reserveTool();
|
|
659
|
+
await runProcess(process.execPath, ["--check", filePath], { workspaceRoot, signal: scope?.signal, shellTimeoutMs: 30000 });
|
|
652
660
|
};
|
|
653
661
|
};
|
|
654
662
|
const isPhaseProvider = (value) => value === "librarian" ||
|
|
@@ -1154,8 +1162,35 @@ const registerBuiltins = () => {
|
|
|
1154
1162
|
};
|
|
1155
1163
|
export class RunCommand {
|
|
1156
1164
|
static async run(argv) {
|
|
1157
|
-
registerBuiltins();
|
|
1158
1165
|
const parsed = parseArgs(argv);
|
|
1166
|
+
const file = parsed.orchestrationConfig ?? process.env.CODALI_ORCHESTRATION_CONFIG;
|
|
1167
|
+
if (!file) {
|
|
1168
|
+
if (parsed.effort)
|
|
1169
|
+
throw new Error("Legacy run requires --orchestration-config to select an effort budget");
|
|
1170
|
+
return this.runParsed(parsed);
|
|
1171
|
+
}
|
|
1172
|
+
if ([parsed.agent, parsed.agentId, parsed.agentSlug, parsed.agentLibrarian, parsed.agentArchitect, parsed.agentBuilder,
|
|
1173
|
+
parsed.agentCritic, parsed.agentInterpreter, parsed.provider, parsed.model, parsed.baseUrl, parsed.apiKey,
|
|
1174
|
+
parsed.interpreterProvider, parsed.interpreterModel].some(value => value !== undefined))
|
|
1175
|
+
throw new Error("Configured run cannot accept legacy model/provider/agent overrides; edit role bindings in the orchestration file");
|
|
1176
|
+
const resolved = await loadOrchestrationConfig(file);
|
|
1177
|
+
const abort = new AbortController();
|
|
1178
|
+
const stop = () => abort.abort(new Error("Configured run cancelled"));
|
|
1179
|
+
const scope = new ConfiguredModelScope(resolved, { effort: parsed.effort, signal: abort.signal });
|
|
1180
|
+
process.once("SIGINT", stop);
|
|
1181
|
+
process.once("SIGTERM", stop);
|
|
1182
|
+
try {
|
|
1183
|
+
await this.runParsed(parsed, { resolved, scope });
|
|
1184
|
+
}
|
|
1185
|
+
finally {
|
|
1186
|
+
scope.close();
|
|
1187
|
+
process.removeListener("SIGINT", stop);
|
|
1188
|
+
process.removeListener("SIGTERM", stop);
|
|
1189
|
+
}
|
|
1190
|
+
}
|
|
1191
|
+
static async runParsed(parsed, orchestration) {
|
|
1192
|
+
registerBuiltins();
|
|
1193
|
+
const scope = orchestration?.scope;
|
|
1159
1194
|
const resolvedWorkspaceRoot = resolveWorkspaceRoot(process.cwd(), parsed.workspaceRoot);
|
|
1160
1195
|
const agentRef = parsed.agent ?? parsed.agentId ?? parsed.agentSlug;
|
|
1161
1196
|
const resolvedAgent = agentRef
|
|
@@ -1372,6 +1407,23 @@ export class RunCommand {
|
|
|
1372
1407
|
configPath: parsed.configPath,
|
|
1373
1408
|
cwd: resolvedWorkspaceRoot,
|
|
1374
1409
|
});
|
|
1410
|
+
if (scope) {
|
|
1411
|
+
const limits = scope.budget();
|
|
1412
|
+
config.limits = { ...config.limits, maxSteps: Math.min(config.limits.maxSteps, limits.maxSteps),
|
|
1413
|
+
maxToolCalls: Math.min(config.limits.maxToolCalls, limits.maxToolCalls),
|
|
1414
|
+
maxTokens: Math.min(config.limits.maxTokens ?? limits.maxOutputTokens, limits.maxOutputTokens),
|
|
1415
|
+
timeoutMs: Math.min(config.limits.timeoutMs, limits.timeoutMs) };
|
|
1416
|
+
config.routing = {};
|
|
1417
|
+
// The legacy configuration still controls workflow/validation; model identity comes only from bindings.
|
|
1418
|
+
config.provider = "configured";
|
|
1419
|
+
config.model = scope.models("lead")[0].model.catalogId;
|
|
1420
|
+
for (const binding of config.smart ? ["router", "architect", "worker"] : ["lead"])
|
|
1421
|
+
scope.models(binding);
|
|
1422
|
+
if (config.localContext.enabled && config.localContext.summarize.enabled)
|
|
1423
|
+
scope.models("summarizer");
|
|
1424
|
+
if (config.builder.mode === "freeform" || config.builder.fallbackToInterpreter)
|
|
1425
|
+
scope.models("repair");
|
|
1426
|
+
}
|
|
1375
1427
|
if (config.deepInvestigation?.enabled && !config.smart) {
|
|
1376
1428
|
throw new Error("Deep investigation requires --smart. Enable smart mode or disable deep investigation.");
|
|
1377
1429
|
}
|
|
@@ -1420,7 +1472,7 @@ export class RunCommand {
|
|
|
1420
1472
|
const outputLogPath = path.join(path.dirname(logger.logPath), `${runId}.output.log`);
|
|
1421
1473
|
await mkdir(path.dirname(outputLogPath), { recursive: true });
|
|
1422
1474
|
const outputStream = createWriteStream(outputLogPath, { flags: "a" });
|
|
1423
|
-
const unregisterSignals = lock.registerSignalHandlers({
|
|
1475
|
+
const unregisterSignals = scope ? () => { } : lock.registerSignalHandlers({
|
|
1424
1476
|
onSignal: async (signal) => {
|
|
1425
1477
|
try {
|
|
1426
1478
|
await logger.log("run_cancelled", {
|
|
@@ -1625,6 +1677,9 @@ export class RunCommand {
|
|
|
1625
1677
|
registerIfEnabled(createSearchTool());
|
|
1626
1678
|
registerIfEnabled(createShellTool());
|
|
1627
1679
|
const docdexClient = new DocdexClient({
|
|
1680
|
+
signal: () => scope?.signal,
|
|
1681
|
+
beforeRequest: scope ? () => scope.reserveTool() : undefined,
|
|
1682
|
+
localSearchOnly: Boolean(scope),
|
|
1628
1683
|
baseUrl: config.docdex.baseUrl,
|
|
1629
1684
|
repoId: config.docdex.repoId,
|
|
1630
1685
|
repoRoot: config.docdex.repoRoot ?? config.workspaceRoot,
|
|
@@ -1633,6 +1688,8 @@ export class RunCommand {
|
|
|
1633
1688
|
for (const tool of createDocdexTools(docdexClient))
|
|
1634
1689
|
registerIfEnabled(tool);
|
|
1635
1690
|
const toolContext = {
|
|
1691
|
+
signal: scope?.signal,
|
|
1692
|
+
beforeTool: scope && config.smart ? async () => scope.reserveTool() : undefined,
|
|
1636
1693
|
workspaceRoot: config.workspaceRoot,
|
|
1637
1694
|
recordTouchedFile: (filePath) => runContext.recordTouchedFile(filePath),
|
|
1638
1695
|
allowOutsideWorkspace: config.tools.allowOutsideWorkspace,
|
|
@@ -1641,11 +1698,25 @@ export class RunCommand {
|
|
|
1641
1698
|
shellAllowlist: config.tools.shellAllowlist,
|
|
1642
1699
|
};
|
|
1643
1700
|
const streamState = createStreamState(config.streaming.flushEveryMs, outputStream);
|
|
1701
|
+
const scopedProvider = (binding) => {
|
|
1702
|
+
const provider = scope.provider(binding);
|
|
1703
|
+
return { ...provider, generate: async (request) => {
|
|
1704
|
+
try {
|
|
1705
|
+
const response = await provider.generate(request);
|
|
1706
|
+
await logger.log("configured_model_route", { ...response.route, usage: scope.snapshot() });
|
|
1707
|
+
return response;
|
|
1708
|
+
}
|
|
1709
|
+
catch (error) {
|
|
1710
|
+
await logger.log("configured_model_failure", { binding, configHash: scope.configHash, usage: scope.snapshot() });
|
|
1711
|
+
throw error;
|
|
1712
|
+
}
|
|
1713
|
+
} };
|
|
1714
|
+
};
|
|
1644
1715
|
if (config.smart) {
|
|
1645
1716
|
const hasRoutingAgent = Object.values(config.routing ?? {}).some((phase) => Boolean(phase?.agent));
|
|
1646
1717
|
const hasExplicitProvider = Boolean(parsed.provider || parsed.model || parsed.baseUrl || parsed.apiKey);
|
|
1647
|
-
const shouldForceAgentDefaults = !agentRef && !hasRoutingAgent && !hasExplicitProvider;
|
|
1648
|
-
const shouldSelectAgents = config.provider !== "stub";
|
|
1718
|
+
const shouldForceAgentDefaults = !scope && !agentRef && !hasRoutingAgent && !hasExplicitProvider;
|
|
1719
|
+
const shouldSelectAgents = !scope && config.provider !== "stub";
|
|
1649
1720
|
const emptySelection = (phase) => ({
|
|
1650
1721
|
phase,
|
|
1651
1722
|
capabilities: [],
|
|
@@ -1751,6 +1822,14 @@ export class RunCommand {
|
|
|
1751
1822
|
});
|
|
1752
1823
|
}
|
|
1753
1824
|
const buildDefaultsForPhase = (phase) => {
|
|
1825
|
+
if (scope) {
|
|
1826
|
+
const binding = { librarian: "router", architect: "architect", builder: "worker", critic: "lead", interpreter: "repair" }[phase];
|
|
1827
|
+
// An unused interpreter does not require an enabled repair binding.
|
|
1828
|
+
const required = phase !== "interpreter" || config.builder.mode === "freeform" || config.builder.fallbackToInterpreter;
|
|
1829
|
+
const model = scope.models(required ? binding : "lead")[0].model;
|
|
1830
|
+
config.localContext.modelTokenLimits = { ...config.localContext.modelTokenLimits, [model.catalogId]: model.contextWindow };
|
|
1831
|
+
return { provider: `configured:${binding}`, config: { model: model.catalogId, timeoutMs: config.limits.timeoutMs } };
|
|
1832
|
+
}
|
|
1754
1833
|
const selected = phaseSelections[phase].resolved;
|
|
1755
1834
|
return selected
|
|
1756
1835
|
? {
|
|
@@ -1799,9 +1878,9 @@ export class RunCommand {
|
|
|
1799
1878
|
provider: criticRoute.provider,
|
|
1800
1879
|
model: criticRoute.config.model,
|
|
1801
1880
|
};
|
|
1802
|
-
const librarianProvider = createProvider(librarianRoute.provider, librarianRoute.config);
|
|
1803
|
-
const architectProvider = createProvider(architectRoute.provider, architectRoute.config);
|
|
1804
|
-
const builderProvider = createProvider(builderRoute.provider, builderRoute.config);
|
|
1881
|
+
const librarianProvider = scope ? scopedProvider("router") : createProvider(librarianRoute.provider, librarianRoute.config);
|
|
1882
|
+
const architectProvider = scope ? scopedProvider("architect") : createProvider(architectRoute.provider, architectRoute.config);
|
|
1883
|
+
const builderProvider = scope ? scopedProvider("worker") : createProvider(builderRoute.provider, builderRoute.config);
|
|
1805
1884
|
const profileAgentId = config.agentId ??
|
|
1806
1885
|
config.agentSlug ??
|
|
1807
1886
|
phaseSelections.architect.resolved?.agent.id ??
|
|
@@ -1842,7 +1921,7 @@ export class RunCommand {
|
|
|
1842
1921
|
model: config.localContext.summarize.model,
|
|
1843
1922
|
};
|
|
1844
1923
|
}
|
|
1845
|
-
const summarizerProvider = createProvider(summarizerProviderName, summarizerConfig);
|
|
1924
|
+
const summarizerProvider = scope ? scopedProvider("summarizer") : createProvider(summarizerProviderName, summarizerConfig);
|
|
1846
1925
|
summarizer = new ContextSummarizer(summarizerProvider, {
|
|
1847
1926
|
maxTokens: config.localContext.summarize.targetTokens,
|
|
1848
1927
|
temperature: summarizerTemperature,
|
|
@@ -1937,7 +2016,7 @@ export class RunCommand {
|
|
|
1937
2016
|
onEvent: streamState.onEvent,
|
|
1938
2017
|
});
|
|
1939
2018
|
const builderResponseFormat = builderRoute.responseFormat ?? (config.builder.mode === "patch_json" ? { type: "json" } : undefined);
|
|
1940
|
-
const patchValidator = createPatchValidator(config.workspaceRoot, config.tools.allowShell ?? false, config.tools.shellAllowlist ?? []);
|
|
2019
|
+
const patchValidator = createPatchValidator(config.workspaceRoot, config.tools.allowShell ?? false, config.tools.shellAllowlist ?? [], scope);
|
|
1941
2020
|
const needsPatchApplier = config.builder.mode === "patch_json" || config.builder.mode === "freeform" || config.builder.mode === "tool_calls";
|
|
1942
2021
|
const patchApplier = needsPatchApplier
|
|
1943
2022
|
? new PatchApplier({
|
|
@@ -1954,7 +2033,7 @@ export class RunCommand {
|
|
|
1954
2033
|
? resolveInterpreterRoute(config, phaseRoutes)
|
|
1955
2034
|
: undefined;
|
|
1956
2035
|
const interpreterProvider = interpreterRoute
|
|
1957
|
-
? createProvider(interpreterRoute.provider, {
|
|
2036
|
+
? scope ? scopedProvider("repair") : createProvider(interpreterRoute.provider, {
|
|
1958
2037
|
...interpreterRoute.config,
|
|
1959
2038
|
timeoutMs: config.interpreter.timeoutMs ??
|
|
1960
2039
|
interpreterRoute.config.timeoutMs ??
|
|
@@ -2003,6 +2082,7 @@ export class RunCommand {
|
|
|
2003
2082
|
model: builderRoute.config.model,
|
|
2004
2083
|
});
|
|
2005
2084
|
const validator = new ValidationRunner({
|
|
2085
|
+
signal: scope?.signal,
|
|
2006
2086
|
allowShell: config.tools.allowShell ?? false,
|
|
2007
2087
|
shellAllowlist: config.tools.shellAllowlist ?? [],
|
|
2008
2088
|
workspaceRoot: config.workspaceRoot,
|
|
@@ -2206,13 +2286,15 @@ export class RunCommand {
|
|
|
2206
2286
|
minimumVerificationChecks: workflowProfile?.verificationMinimumChecks,
|
|
2207
2287
|
enforceVerificationHighConfidence: workflowProfile?.verificationEnforceHighConfidence,
|
|
2208
2288
|
onEvent: streamState.onEvent,
|
|
2209
|
-
onPhaseProviderFailure: recoverPhaseProvider,
|
|
2289
|
+
onPhaseProviderFailure: scope ? undefined : recoverPhaseProvider,
|
|
2210
2290
|
});
|
|
2211
2291
|
const result = await pipeline.run(workflowTaskInput);
|
|
2292
|
+
scope?.signal.throwIfAborted();
|
|
2212
2293
|
for (const file of result.builderResult.touchedFiles ?? []) {
|
|
2213
2294
|
runContext.recordTouchedFile(file);
|
|
2214
2295
|
}
|
|
2215
2296
|
smartRuntimeSummary = {
|
|
2297
|
+
orchestration: scope ? { configHash: scope.configHash, usage: scope.snapshot(), toolCalls: scope.toolsUsed } : undefined,
|
|
2216
2298
|
attempts: result.attempts,
|
|
2217
2299
|
maxRetries: config.limits.maxRetries,
|
|
2218
2300
|
maxContextRefreshes: config.context.maxContextRefreshes,
|
|
@@ -2292,8 +2374,10 @@ export class RunCommand {
|
|
|
2292
2374
|
throw new Error("Run cancelled due to cost limit");
|
|
2293
2375
|
}
|
|
2294
2376
|
}
|
|
2295
|
-
const provider = createProvider(config.provider, buildDefaultProviderConfig(config));
|
|
2377
|
+
const provider = scope ? undefined : createProvider(config.provider, buildDefaultProviderConfig(config));
|
|
2296
2378
|
const result = await runCodaliTask({
|
|
2379
|
+
orchestration: orchestration ? { ...orchestration, effort: scope.effort } : undefined,
|
|
2380
|
+
signal: scope?.signal,
|
|
2297
2381
|
task: workflowTaskInput,
|
|
2298
2382
|
workspace: { root: config.workspaceRoot },
|
|
2299
2383
|
provider: {
|
|
@@ -2356,6 +2440,8 @@ export class RunCommand {
|
|
|
2356
2440
|
finalMessageContent = result.finalMessage;
|
|
2357
2441
|
usage = result.usage;
|
|
2358
2442
|
toolCallsExecuted = result.toolCallsExecuted;
|
|
2443
|
+
if (result.orchestration)
|
|
2444
|
+
await logger.log("configured_runtime_usage", result.orchestration);
|
|
2359
2445
|
}
|
|
2360
2446
|
streamState.flush();
|
|
2361
2447
|
if (streamState.didStream()) {
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type EffortLevel, type ResolvedOrchestrationConfig } from "../config/OrchestrationConfig.js";
|
|
2
|
+
import { type PermissionProfile } from "../permissions/PermissionGate.js";
|
|
3
|
+
import { type ProjectTaskAuthority } from "@mcoda/shared";
|
|
4
|
+
import { type ManagedRuntimeIdentity } from "../docdex/ManagedRuntime.js";
|
|
5
|
+
interface Arguments {
|
|
6
|
+
command: string;
|
|
7
|
+
prompt: string;
|
|
8
|
+
workspaceRoot: string;
|
|
9
|
+
config?: string;
|
|
10
|
+
docdexBinary?: string;
|
|
11
|
+
projectTask?: string;
|
|
12
|
+
effort: EffortLevel;
|
|
13
|
+
permissions: PermissionProfile;
|
|
14
|
+
json: boolean;
|
|
15
|
+
plain: boolean;
|
|
16
|
+
stdin: boolean;
|
|
17
|
+
allowWeb?: boolean;
|
|
18
|
+
allowMemory?: boolean;
|
|
19
|
+
allowMedia?: boolean;
|
|
20
|
+
allowNetwork?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface TerminalHost {
|
|
23
|
+
projectTaskAuthority?: ProjectTaskAuthority;
|
|
24
|
+
}
|
|
25
|
+
export declare const parseTerminalArguments: (argv: string[]) => Arguments;
|
|
26
|
+
export declare const setupTerminalConfig: (destination: string, options?: {
|
|
27
|
+
prepareRuntime?: () => Promise<ManagedRuntimeIdentity>;
|
|
28
|
+
}) => Promise<ResolvedOrchestrationConfig>;
|
|
29
|
+
export declare const terminalDoctor: (configPath?: string) => Promise<Record<string, unknown>>;
|
|
30
|
+
export declare class TerminalCommand {
|
|
31
|
+
static run(argv: string[], host?: TerminalHost): Promise<void>;
|
|
32
|
+
private static execute;
|
|
33
|
+
}
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=TerminalCommand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TerminalCommand.d.ts","sourceRoot":"","sources":["../../src/cli/TerminalCommand.ts"],"names":[],"mappings":"AAKA,OAAO,EAA2E,KAAK,WAAW,EAA4B,KAAK,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAEzM,OAAO,EAAkB,KAAK,iBAAiB,EAAyB,MAAM,kCAAkC,CAAC;AAMjH,OAAO,EAAkC,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAI1F,OAAO,EAA2D,KAAK,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAOnI,UAAU,SAAS;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC;IAAC,WAAW,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CAAE;AAC1U,MAAM,WAAW,YAAY;IAAG,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAAE;AAC9E,eAAO,MAAM,sBAAsB,GAAI,MAAM,MAAM,EAAE,KAAG,SAmBvD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAU,aAAa,MAAM,EAAE,UAAS;IAAE,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,sBAAsB,CAAC,CAAA;CAAO,KAAG,OAAO,CAAC,2BAA2B,CAqD5K,CAAC;AAOF,eAAO,MAAM,cAAc,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuBzF,CAAC;AAEF,qBAAa,eAAe;WACb,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;mBAUnD,OAAO;CAiI7B"}
|