@mcoda/codali 0.1.90 → 0.1.91
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/dist/cli/DatasetCommand.d.ts +38 -0
- package/dist/cli/DatasetCommand.d.ts.map +1 -0
- package/dist/cli/DatasetCommand.js +959 -0
- package/dist/cli/EvalCommand.d.ts +3 -0
- package/dist/cli/EvalCommand.d.ts.map +1 -1
- package/dist/cli/EvalCommand.js +55 -1
- package/dist/cli/ImprovementCommand.d.ts +97 -0
- package/dist/cli/ImprovementCommand.d.ts.map +1 -0
- package/dist/cli/ImprovementCommand.js +1879 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +15 -0
- package/dist/dataset-cli.d.ts +3 -0
- package/dist/dataset-cli.d.ts.map +1 -0
- package/dist/dataset-cli.js +30 -0
- package/dist/eval/CodaliGatewayLiveHarness.d.ts +90 -1
- package/dist/eval/CodaliGatewayLiveHarness.d.ts.map +1 -1
- package/dist/eval/CodaliGatewayLiveHarness.js +443 -9
- package/dist/eval/GatewayDatasetEval.d.ts +70 -0
- package/dist/eval/GatewayDatasetEval.d.ts.map +1 -0
- package/dist/eval/GatewayDatasetEval.js +477 -0
- package/dist/eval/GatewayEvalSuite.d.ts +52 -0
- package/dist/eval/GatewayEvalSuite.d.ts.map +1 -1
- package/dist/eval/GatewayEvalSuite.js +135 -1
- package/dist/gateway/CodaliGateway.d.ts +4 -0
- package/dist/gateway/CodaliGateway.d.ts.map +1 -1
- package/dist/gateway/CodaliGateway.js +37 -1
- package/dist/gateway/CodaliGatewaySchemas.d.ts.map +1 -1
- package/dist/gateway/CodaliGatewaySchemas.js +0 -4
- package/dist/gateway/CodaliGatewayStore.d.ts.map +1 -1
- package/dist/gateway/CodaliGatewayStore.js +1 -0
- package/dist/gateway/GatewayPlanner.d.ts.map +1 -1
- package/dist/gateway/GatewayPlanner.js +355 -41
- package/dist/gateway/GatewayStateMachine.d.ts +1 -0
- package/dist/gateway/GatewayStateMachine.d.ts.map +1 -1
- package/dist/gateway/GatewayStateMachine.js +221 -5
- package/dist/improvement/CandidateReleaseBuilder.d.ts +201 -0
- package/dist/improvement/CandidateReleaseBuilder.d.ts.map +1 -0
- package/dist/improvement/CandidateReleaseBuilder.js +1175 -0
- package/dist/improvement/DatasetEligibilityGate.d.ts +75 -0
- package/dist/improvement/DatasetEligibilityGate.d.ts.map +1 -0
- package/dist/improvement/DatasetEligibilityGate.js +497 -0
- package/dist/improvement/DatasetExportManifestReader.d.ts +88 -0
- package/dist/improvement/DatasetExportManifestReader.d.ts.map +1 -0
- package/dist/improvement/DatasetExportManifestReader.js +333 -0
- package/dist/improvement/DocdexRetrievalCandidateBuilder.d.ts +192 -0
- package/dist/improvement/DocdexRetrievalCandidateBuilder.d.ts.map +1 -0
- package/dist/improvement/DocdexRetrievalCandidateBuilder.js +625 -0
- package/dist/improvement/EvalReplayCandidateBuilder.d.ts +173 -0
- package/dist/improvement/EvalReplayCandidateBuilder.d.ts.map +1 -0
- package/dist/improvement/EvalReplayCandidateBuilder.js +363 -0
- package/dist/improvement/FineTuneJobPlanner.d.ts +281 -0
- package/dist/improvement/FineTuneJobPlanner.d.ts.map +1 -0
- package/dist/improvement/FineTuneJobPlanner.js +823 -0
- package/dist/improvement/ImprovementEvalRunner.d.ts +50 -0
- package/dist/improvement/ImprovementEvalRunner.d.ts.map +1 -0
- package/dist/improvement/ImprovementEvalRunner.js +648 -0
- package/dist/improvement/ImprovementPolicy.d.ts +272 -0
- package/dist/improvement/ImprovementPolicy.d.ts.map +1 -0
- package/dist/improvement/ImprovementPolicy.js +1450 -0
- package/dist/improvement/ModelRouterCandidateBuilder.d.ts +186 -0
- package/dist/improvement/ModelRouterCandidateBuilder.d.ts.map +1 -0
- package/dist/improvement/ModelRouterCandidateBuilder.js +880 -0
- package/dist/improvement/OperatorInspector.d.ts +182 -0
- package/dist/improvement/OperatorInspector.d.ts.map +1 -0
- package/dist/improvement/OperatorInspector.js +604 -0
- package/dist/improvement/ProductionGovernance.d.ts +91 -0
- package/dist/improvement/ProductionGovernance.d.ts.map +1 -0
- package/dist/improvement/ProductionGovernance.js +329 -0
- package/dist/improvement/PromptSchemaToolMetadataCandidateBuilder.d.ts +152 -0
- package/dist/improvement/PromptSchemaToolMetadataCandidateBuilder.d.ts.map +1 -0
- package/dist/improvement/PromptSchemaToolMetadataCandidateBuilder.js +480 -0
- package/dist/improvement/PublishOrchestrator.d.ts +113 -0
- package/dist/improvement/PublishOrchestrator.d.ts.map +1 -0
- package/dist/improvement/PublishOrchestrator.js +590 -0
- package/dist/improvement/ReleaseOutcomeReporter.d.ts +133 -0
- package/dist/improvement/ReleaseOutcomeReporter.d.ts.map +1 -0
- package/dist/improvement/ReleaseOutcomeReporter.js +501 -0
- package/dist/improvement/StorageServiceImprovementClient.d.ts +71 -0
- package/dist/improvement/StorageServiceImprovementClient.d.ts.map +1 -0
- package/dist/improvement/StorageServiceImprovementClient.js +245 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -0
- package/dist/runtime/CodaliRuntime.d.ts +0 -2
- package/dist/runtime/CodaliRuntime.d.ts.map +1 -1
- package/dist/runtime/CodaliRuntime.js +0 -5
- package/dist/storage/CodaliDatasetPrivacyEngine.d.ts +138 -0
- package/dist/storage/CodaliDatasetPrivacyEngine.d.ts.map +1 -0
- package/dist/storage/CodaliDatasetPrivacyEngine.js +417 -0
- package/dist/storage/CodaliFeedbackReviewIngestion.d.ts +50 -0
- package/dist/storage/CodaliFeedbackReviewIngestion.d.ts.map +1 -0
- package/dist/storage/CodaliFeedbackReviewIngestion.js +141 -0
- package/dist/storage/CodaliStorageContracts.d.ts +337 -0
- package/dist/storage/CodaliStorageContracts.d.ts.map +1 -0
- package/dist/storage/CodaliStorageContracts.js +1555 -0
- package/dist/storage/DatasetExportJob.d.ts +51 -0
- package/dist/storage/DatasetExportJob.d.ts.map +1 -0
- package/dist/storage/DatasetExportJob.js +358 -0
- package/dist/storage/DatasetReviewQueue.d.ts +98 -0
- package/dist/storage/DatasetReviewQueue.d.ts.map +1 -0
- package/dist/storage/DatasetReviewQueue.js +426 -0
- package/dist/storage/GatewayDatasetStore.d.ts +233 -0
- package/dist/storage/GatewayDatasetStore.d.ts.map +1 -0
- package/dist/storage/GatewayDatasetStore.js +2070 -0
- package/package.json +5 -4
|
@@ -3,6 +3,7 @@ import { compileCodaliGatewayPolicy, } from "./GatewayPolicyCompiler.js";
|
|
|
3
3
|
import { normalizeCodaliEvidence } from "./EvidenceNormalizer.js";
|
|
4
4
|
import { validateCodaliGatewayVerifierOutput } from "./CodaliGatewaySchemas.js";
|
|
5
5
|
import { CODALI_GATEWAY_SECURITY_PROMPT_HARDENING } from "./GatewaySecurityPolicy.js";
|
|
6
|
+
import { dispatchAppToolGateway, AppToolGatewayDispatchError, } from "./AppToolGatewayDispatcher.js";
|
|
6
7
|
const DEFAULT_PER_TASK_TIMEOUT_MS = 30000;
|
|
7
8
|
const positiveInteger = (value, fallback) => Number.isFinite(value) && value !== undefined && value > 0
|
|
8
9
|
? Math.floor(value)
|
|
@@ -14,6 +15,23 @@ const isRecord = (value) => Boolean(value && typeof value === "object" && !Array
|
|
|
14
15
|
const readBoolean = (metadata, key) => isRecord(metadata) && typeof metadata[key] === "boolean"
|
|
15
16
|
? metadata[key]
|
|
16
17
|
: undefined;
|
|
18
|
+
const readString = (metadata, key) => {
|
|
19
|
+
if (!isRecord(metadata))
|
|
20
|
+
return undefined;
|
|
21
|
+
const value = metadata[key];
|
|
22
|
+
if (typeof value === "string" && value.trim())
|
|
23
|
+
return value.trim();
|
|
24
|
+
if (typeof value === "number" && Number.isFinite(value))
|
|
25
|
+
return String(value);
|
|
26
|
+
return undefined;
|
|
27
|
+
};
|
|
28
|
+
const readStringArray = (value) => {
|
|
29
|
+
if (!Array.isArray(value))
|
|
30
|
+
return [];
|
|
31
|
+
return value
|
|
32
|
+
.filter((item) => typeof item === "string" && item.trim().length > 0)
|
|
33
|
+
.map((item) => item.trim());
|
|
34
|
+
};
|
|
17
35
|
const isRequiredWorkerTask = (task) => {
|
|
18
36
|
if (readBoolean(task.metadata, "required") === false)
|
|
19
37
|
return false;
|
|
@@ -32,6 +50,50 @@ const uniqueInOrder = (values) => {
|
|
|
32
50
|
}
|
|
33
51
|
return output;
|
|
34
52
|
};
|
|
53
|
+
const searchableTokens = (...values) => {
|
|
54
|
+
const text = values
|
|
55
|
+
.map((value) => {
|
|
56
|
+
if (typeof value === "string")
|
|
57
|
+
return value;
|
|
58
|
+
if (Array.isArray(value))
|
|
59
|
+
return value.join(" ");
|
|
60
|
+
if (isRecord(value))
|
|
61
|
+
return JSON.stringify(value);
|
|
62
|
+
return "";
|
|
63
|
+
})
|
|
64
|
+
.join(" ")
|
|
65
|
+
.toLowerCase();
|
|
66
|
+
return new Set(text
|
|
67
|
+
.split(/[^a-z0-9]+/g)
|
|
68
|
+
.map((token) => token.trim())
|
|
69
|
+
.filter((token) => token.length >= 2));
|
|
70
|
+
};
|
|
71
|
+
const appGatewayToolRelevance = (toolName, contract, task, request) => {
|
|
72
|
+
const intentTokens = searchableTokens(request.query, task.query, task.objective, task.workerRole, task.outputFormat, task.expectedSources);
|
|
73
|
+
if (intentTokens.size === 0)
|
|
74
|
+
return 0;
|
|
75
|
+
const toolTokens = searchableTokens(toolName, contract);
|
|
76
|
+
let score = 0;
|
|
77
|
+
for (const token of intentTokens) {
|
|
78
|
+
if (toolTokens.has(token))
|
|
79
|
+
score += 2;
|
|
80
|
+
for (const toolToken of toolTokens) {
|
|
81
|
+
if (toolToken.includes(token) || token.includes(toolToken)) {
|
|
82
|
+
score += 1;
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return score;
|
|
88
|
+
};
|
|
89
|
+
const sortAppGatewayToolsByRelevance = (tools, contracts, task, request) => tools
|
|
90
|
+
.map((tool, index) => ({
|
|
91
|
+
tool,
|
|
92
|
+
index,
|
|
93
|
+
score: appGatewayToolRelevance(tool, contracts[tool], task, request),
|
|
94
|
+
}))
|
|
95
|
+
.sort((left, right) => right.score - left.score || left.index - right.index)
|
|
96
|
+
.map((item) => item.tool);
|
|
35
97
|
const requestHasTenantScope = (request) => Boolean(request.tenant?.id || request.tenant?.slug || request.tenant?.realm);
|
|
36
98
|
const isImageArtifact = (artifact) => {
|
|
37
99
|
const type = artifact.type.toLowerCase();
|
|
@@ -523,6 +585,115 @@ export class CodaliGatewayStateMachine {
|
|
|
523
585
|
}
|
|
524
586
|
return prepared;
|
|
525
587
|
}
|
|
588
|
+
async dispatchAssignedAppGatewayTools(args) {
|
|
589
|
+
const gateway = args.policyCompilation.toolCompilation.appToolGateway;
|
|
590
|
+
if (!gateway || args.remainingToolCalls <= 0) {
|
|
591
|
+
return { evidence: [], toolCalls: [], metadata: { skipped: "no_gateway_or_budget" } };
|
|
592
|
+
}
|
|
593
|
+
const contracts = args.policyCompilation.toolCompilation.appToolContracts;
|
|
594
|
+
const assignedAppTools = args.task.allowedTools
|
|
595
|
+
.filter((tool) => Boolean(contracts[tool]));
|
|
596
|
+
const policyAppTools = args.policyCompilation.effectiveAllowedTools
|
|
597
|
+
.filter((tool) => Boolean(contracts[tool]));
|
|
598
|
+
const dispatchSource = assignedAppTools.length > 0
|
|
599
|
+
? "assigned_task_tools"
|
|
600
|
+
: "policy_app_tools_fallback";
|
|
601
|
+
const appTools = (assignedAppTools.length > 0
|
|
602
|
+
? assignedAppTools
|
|
603
|
+
: sortAppGatewayToolsByRelevance(uniqueInOrder(policyAppTools), contracts, args.task.task, args.input.request))
|
|
604
|
+
.slice(0, args.remainingToolCalls);
|
|
605
|
+
if (appTools.length === 0) {
|
|
606
|
+
return { evidence: [], toolCalls: [], metadata: { skipped: "no_assigned_app_tools" } };
|
|
607
|
+
}
|
|
608
|
+
const request = args.input.request;
|
|
609
|
+
const requester = isRecord(request.requester) ? request.requester : undefined;
|
|
610
|
+
const requestMetadata = isRecord(request.metadata) ? request.metadata : undefined;
|
|
611
|
+
const scopedRequestId = readString(requestMetadata, "scoped_request_id") ??
|
|
612
|
+
readString(requestMetadata, "scopedRequestId") ??
|
|
613
|
+
readString(requestMetadata, "feedback_request_id") ??
|
|
614
|
+
readString(requestMetadata, "feedbackRequestId") ??
|
|
615
|
+
readString(requestMetadata, "conversation_message_id") ??
|
|
616
|
+
readString(requestMetadata, "conversationMessageId") ??
|
|
617
|
+
readString(requestMetadata, "ai_chat_request_id") ??
|
|
618
|
+
readString(requestMetadata, "aiChatRequestId") ??
|
|
619
|
+
readString(requestMetadata, "request_id") ??
|
|
620
|
+
readString(requestMetadata, "requestId") ??
|
|
621
|
+
request.id;
|
|
622
|
+
const tenantScope = {
|
|
623
|
+
tenant_id: request.tenant?.id,
|
|
624
|
+
tenant_slug: request.tenant?.slug,
|
|
625
|
+
tenant_realm: request.tenant?.realm,
|
|
626
|
+
docdex_repo_id: request.docdex?.repoId,
|
|
627
|
+
};
|
|
628
|
+
const requesterScope = {
|
|
629
|
+
request_id: scopedRequestId,
|
|
630
|
+
owner_user_id: readString(requester, "owner_user_id") ?? readString(requester, "ownerUserId"),
|
|
631
|
+
requester_id: request.requester?.id,
|
|
632
|
+
requester_role: request.requester?.role,
|
|
633
|
+
api_key_id: readString(requester, "api_key_id") ?? readString(requester, "apiKeyId"),
|
|
634
|
+
agent_slug: readString(requestMetadata, "agentSlug") ?? readString(requestMetadata, "agent_slug"),
|
|
635
|
+
};
|
|
636
|
+
const output = { evidence: [], toolCalls: [], metadata: { dispatchSource, dispatchedTools: appTools } };
|
|
637
|
+
for (const toolName of appTools) {
|
|
638
|
+
const startedAtMs = this.now();
|
|
639
|
+
const contract = contracts[toolName];
|
|
640
|
+
try {
|
|
641
|
+
const result = await dispatchAppToolGateway({
|
|
642
|
+
runId: args.input.runId,
|
|
643
|
+
sessionId: request.conversation?.id,
|
|
644
|
+
requestId: scopedRequestId,
|
|
645
|
+
tenantScope,
|
|
646
|
+
requesterScope,
|
|
647
|
+
toolName,
|
|
648
|
+
args: {
|
|
649
|
+
mode: "search",
|
|
650
|
+
query: args.task.task.query ?? request.query,
|
|
651
|
+
limit: 20,
|
|
652
|
+
filters: {
|
|
653
|
+
taskId: args.task.task.id,
|
|
654
|
+
workerRole: args.task.task.workerRole,
|
|
655
|
+
objective: args.task.task.objective,
|
|
656
|
+
expectedSources: args.task.task.expectedSources ?? [],
|
|
657
|
+
},
|
|
658
|
+
include: args.task.task.expectedSources ?? [],
|
|
659
|
+
},
|
|
660
|
+
contract,
|
|
661
|
+
gateway,
|
|
662
|
+
allowedTools: args.policyCompilation.effectiveAllowedTools,
|
|
663
|
+
deniedTools: args.policyCompilation.effectiveDeniedTools,
|
|
664
|
+
now: () => new Date(this.now()),
|
|
665
|
+
});
|
|
666
|
+
output.evidence.push(result.evidencePayload);
|
|
667
|
+
output.toolCalls.push({
|
|
668
|
+
tool: toolName,
|
|
669
|
+
status: "success",
|
|
670
|
+
latencyMs: Math.max(0, this.now() - startedAtMs),
|
|
671
|
+
args: result.redactedRequest,
|
|
672
|
+
result: result.redactedResponse,
|
|
673
|
+
metadata: {
|
|
674
|
+
dispatch: "app_tool_gateway",
|
|
675
|
+
responseStatus: result.responseStatus,
|
|
676
|
+
},
|
|
677
|
+
});
|
|
678
|
+
}
|
|
679
|
+
catch (error) {
|
|
680
|
+
const dispatchError = error instanceof AppToolGatewayDispatchError ? error : undefined;
|
|
681
|
+
output.toolCalls.push({
|
|
682
|
+
tool: toolName,
|
|
683
|
+
status: "failed",
|
|
684
|
+
latencyMs: Math.max(0, this.now() - startedAtMs),
|
|
685
|
+
errorCode: dispatchError?.code ?? "GATEWAY_APP_TOOL_DISPATCH_FAILED",
|
|
686
|
+
errorMessage: error instanceof Error ? error.message : String(error),
|
|
687
|
+
metadata: {
|
|
688
|
+
dispatch: "app_tool_gateway",
|
|
689
|
+
retryable: dispatchError?.retryable ?? false,
|
|
690
|
+
details: dispatchError?.details,
|
|
691
|
+
},
|
|
692
|
+
});
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
return output;
|
|
696
|
+
}
|
|
526
697
|
async runTask(args) {
|
|
527
698
|
const startedAtMs = this.now();
|
|
528
699
|
const prompt = buildCodaliGatewayWorkerPrompt({
|
|
@@ -541,21 +712,54 @@ export class CodaliGatewayStateMachine {
|
|
|
541
712
|
removedTools: args.task.removedTools,
|
|
542
713
|
},
|
|
543
714
|
});
|
|
715
|
+
const appToolPrefetch = await this.dispatchAssignedAppGatewayTools(args);
|
|
716
|
+
const remainingToolCallsAfterPrefetch = Math.max(0, args.remainingToolCalls - appToolPrefetch.toolCalls.length);
|
|
544
717
|
try {
|
|
545
718
|
const workerResult = await withTimeout(this.options.taskRunner.run({
|
|
546
719
|
runId: args.input.runId,
|
|
547
720
|
task: args.task.task,
|
|
548
721
|
prompt,
|
|
549
722
|
allowedTools: args.task.allowedTools,
|
|
550
|
-
remainingToolCalls:
|
|
723
|
+
remainingToolCalls: remainingToolCallsAfterPrefetch,
|
|
551
724
|
remainingModelCalls: args.remainingModelCalls,
|
|
552
725
|
timeoutMs: args.perTaskTimeoutMs,
|
|
553
726
|
request: args.input.request,
|
|
554
727
|
policyCompilation: args.policyCompilation,
|
|
555
728
|
}), args.perTaskTimeoutMs, args.task.task.id);
|
|
556
|
-
return await this.persistWorkerResult(args,
|
|
729
|
+
return await this.persistWorkerResult(args, {
|
|
730
|
+
...workerResult,
|
|
731
|
+
evidence: [
|
|
732
|
+
...appToolPrefetch.evidence,
|
|
733
|
+
...(workerResult.evidence ?? []),
|
|
734
|
+
],
|
|
735
|
+
toolCalls: [
|
|
736
|
+
...appToolPrefetch.toolCalls,
|
|
737
|
+
...(workerResult.toolCalls ?? []),
|
|
738
|
+
],
|
|
739
|
+
metadata: {
|
|
740
|
+
...(workerResult.metadata ?? {}),
|
|
741
|
+
appToolPrefetch: appToolPrefetch.metadata,
|
|
742
|
+
},
|
|
743
|
+
}, startedAtMs);
|
|
557
744
|
}
|
|
558
745
|
catch (error) {
|
|
746
|
+
if (appToolPrefetch.evidence.length > 0 || appToolPrefetch.toolCalls.length > 0) {
|
|
747
|
+
return await this.persistWorkerResult(args, {
|
|
748
|
+
status: "succeeded",
|
|
749
|
+
output: {
|
|
750
|
+
summary: "Worker model failed after assigned app-tool gateway dispatch; using collected app-tool evidence.",
|
|
751
|
+
},
|
|
752
|
+
evidence: appToolPrefetch.evidence,
|
|
753
|
+
toolCalls: appToolPrefetch.toolCalls,
|
|
754
|
+
metadata: {
|
|
755
|
+
appToolPrefetch: appToolPrefetch.metadata,
|
|
756
|
+
workerError: {
|
|
757
|
+
name: error instanceof Error ? error.name : "Error",
|
|
758
|
+
message: error instanceof Error ? error.message : String(error),
|
|
759
|
+
},
|
|
760
|
+
},
|
|
761
|
+
}, startedAtMs);
|
|
762
|
+
}
|
|
559
763
|
const errorCode = error instanceof Error && error.name === "CodaliGatewayWorkerTimeoutError"
|
|
560
764
|
? "GATEWAY_WORKER_TIMEOUT"
|
|
561
765
|
: "GATEWAY_WORKER_FAILED";
|
|
@@ -589,7 +793,19 @@ export class CodaliGatewayStateMachine {
|
|
|
589
793
|
}
|
|
590
794
|
}
|
|
591
795
|
async persistWorkerResult(args, workerResult, startedAtMs) {
|
|
592
|
-
const
|
|
796
|
+
const workerMetadata = isRecord(workerResult.metadata) ? workerResult.metadata : undefined;
|
|
797
|
+
const appToolPrefetchMetadata = isRecord(workerMetadata?.appToolPrefetch)
|
|
798
|
+
? workerMetadata.appToolPrefetch
|
|
799
|
+
: undefined;
|
|
800
|
+
const policyAllowed = new Set(args.policyCompilation.effectiveAllowedTools);
|
|
801
|
+
const appToolContracts = args.policyCompilation.toolCompilation.appToolContracts;
|
|
802
|
+
const prefetchAllowedTools = readStringArray(appToolPrefetchMetadata?.dispatchedTools)
|
|
803
|
+
.filter((tool) => policyAllowed.has(tool) && Boolean(appToolContracts[tool]));
|
|
804
|
+
const effectiveTaskAllowedTools = uniqueInOrder([
|
|
805
|
+
...args.task.allowedTools,
|
|
806
|
+
...prefetchAllowedTools,
|
|
807
|
+
]);
|
|
808
|
+
const allowed = new Set(effectiveTaskAllowedTools);
|
|
593
809
|
const disallowedToolCalls = (workerResult.toolCalls ?? [])
|
|
594
810
|
.filter((call) => !allowed.has(call.tool));
|
|
595
811
|
const toolCalls = (workerResult.toolCalls ?? []).map((call) => {
|
|
@@ -707,7 +923,7 @@ export class CodaliGatewayStateMachine {
|
|
|
707
923
|
metadata: {
|
|
708
924
|
...(args.task.task.metadata ?? {}),
|
|
709
925
|
required: args.task.required,
|
|
710
|
-
allowedTools:
|
|
926
|
+
allowedTools: effectiveTaskAllowedTools,
|
|
711
927
|
removedTools: args.task.removedTools,
|
|
712
928
|
errorCode,
|
|
713
929
|
output: workerResult.output,
|
|
@@ -735,7 +951,7 @@ export class CodaliGatewayStateMachine {
|
|
|
735
951
|
workerRole: args.task.task.workerRole,
|
|
736
952
|
status,
|
|
737
953
|
required: args.task.required,
|
|
738
|
-
allowedTools:
|
|
954
|
+
allowedTools: effectiveTaskAllowedTools,
|
|
739
955
|
removedTools: args.task.removedTools,
|
|
740
956
|
durationMs: Math.max(0, this.now() - startedAtMs),
|
|
741
957
|
evidenceCount: evidence.length,
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { type CodaliImprovementRelease, type CodaliImprovementReleaseLevel, type CodaliImprovementScope } from "./ImprovementPolicy.js";
|
|
2
|
+
import type { DatasetExportManifestReaderResult } from "./DatasetExportManifestReader.js";
|
|
3
|
+
import { CODALI_PATCH_CANDIDATE_SCHEMA_VERSION, type CodaliPatchCandidateBundle, type CodaliPatchProposalArtifact } from "./PromptSchemaToolMetadataCandidateBuilder.js";
|
|
4
|
+
export declare const CODALI_CANDIDATE_RELEASE_SCHEMA_VERSION: "codali.improvement.candidate_release.v1";
|
|
5
|
+
export declare const CODALI_CANDIDATE_RELEASE_PLAN_SCHEMA_VERSION: "codali.improvement.release_plan.v1";
|
|
6
|
+
export declare const DEFAULT_CODALI_CANDIDATE_RELEASE_APPROVED_PATHS: readonly [".codali/improvement/"];
|
|
7
|
+
export declare const DEFAULT_CODALI_CANDIDATE_RELEASE_DIRECTORIES: readonly [".codali/improvement/candidates"];
|
|
8
|
+
export type CodaliCandidateReleaseGeneratedArtifactKind = "candidate_release" | "package_version" | "release_manifest";
|
|
9
|
+
export type CodaliCandidateReleaseSemverBump = "patch" | "minor" | "major";
|
|
10
|
+
export type CodaliCandidateReleaseWriteStatus = "dry_run" | "ready" | "written" | "blocked";
|
|
11
|
+
export interface CodaliCandidateReleaseCommandResult {
|
|
12
|
+
exitCode: number;
|
|
13
|
+
stdout: string;
|
|
14
|
+
stderr?: string;
|
|
15
|
+
error?: string;
|
|
16
|
+
}
|
|
17
|
+
export type CodaliCandidateReleaseCommandRunner = (command: string, args: string[], options: {
|
|
18
|
+
cwd: string;
|
|
19
|
+
}) => CodaliCandidateReleaseCommandResult;
|
|
20
|
+
export interface CodaliCandidateReleaseDirtyEntry {
|
|
21
|
+
status: string;
|
|
22
|
+
path: string;
|
|
23
|
+
}
|
|
24
|
+
export interface CodaliCandidateReleaseGeneratedArtifact {
|
|
25
|
+
artifactId: string;
|
|
26
|
+
artifactKind: CodaliCandidateReleaseGeneratedArtifactKind;
|
|
27
|
+
schemaVersion: typeof CODALI_CANDIDATE_RELEASE_SCHEMA_VERSION;
|
|
28
|
+
sourceExportIds: string[];
|
|
29
|
+
sourceSchemaVersions: {
|
|
30
|
+
candidateRelease: typeof CODALI_CANDIDATE_RELEASE_SCHEMA_VERSION;
|
|
31
|
+
patchCandidate: typeof CODALI_PATCH_CANDIDATE_SCHEMA_VERSION;
|
|
32
|
+
storageManifest: string;
|
|
33
|
+
};
|
|
34
|
+
relativePath: string;
|
|
35
|
+
contentHash: string;
|
|
36
|
+
byteSize: number;
|
|
37
|
+
}
|
|
38
|
+
export interface CodaliCandidateReleaseWriteTarget {
|
|
39
|
+
relativePath: string;
|
|
40
|
+
content: string;
|
|
41
|
+
artifact: CodaliCandidateReleaseGeneratedArtifact;
|
|
42
|
+
}
|
|
43
|
+
export interface CodaliCandidateReleaseWritePlan {
|
|
44
|
+
status: CodaliCandidateReleaseWriteStatus;
|
|
45
|
+
dryRun: boolean;
|
|
46
|
+
repoRoot: string;
|
|
47
|
+
approvedPaths: string[];
|
|
48
|
+
targets: Array<{
|
|
49
|
+
relativePath: string;
|
|
50
|
+
approved: boolean;
|
|
51
|
+
dirty: boolean;
|
|
52
|
+
contentHash: string;
|
|
53
|
+
byteSize: number;
|
|
54
|
+
}>;
|
|
55
|
+
blockedReasons: string[];
|
|
56
|
+
}
|
|
57
|
+
export interface CodaliCandidateReleaseWorkspace {
|
|
58
|
+
workspaceId: string;
|
|
59
|
+
branchName: string;
|
|
60
|
+
branchPrefix: "codali/auto-improve";
|
|
61
|
+
candidateDate: string;
|
|
62
|
+
runId: string;
|
|
63
|
+
discardable: true;
|
|
64
|
+
dryRunOnly: boolean;
|
|
65
|
+
defaultApprovedPaths: readonly string[];
|
|
66
|
+
approvedPaths: string[];
|
|
67
|
+
targetDirectory: string;
|
|
68
|
+
patchOutput: string;
|
|
69
|
+
discardInstructions: string[];
|
|
70
|
+
}
|
|
71
|
+
export interface CodaliCandidateReleaseDirtySummary {
|
|
72
|
+
status: "clean" | "dirty" | "unavailable";
|
|
73
|
+
dirtyFileCount: number;
|
|
74
|
+
targetDirtyFiles: string[];
|
|
75
|
+
unrelatedDirtyFileCount: number;
|
|
76
|
+
unrelatedDirtyFilesSample: string[];
|
|
77
|
+
warning?: string;
|
|
78
|
+
}
|
|
79
|
+
export interface CodaliCandidateReleasePlanGate {
|
|
80
|
+
gateId: string;
|
|
81
|
+
status: "passed" | "blocked" | "warning" | "skipped";
|
|
82
|
+
reasons: string[];
|
|
83
|
+
}
|
|
84
|
+
export interface CodaliCandidateReleasePackageVersionTarget {
|
|
85
|
+
packageName: string;
|
|
86
|
+
relativePath: string;
|
|
87
|
+
currentVersion: string;
|
|
88
|
+
plannedVersion: string;
|
|
89
|
+
privatePackage: boolean;
|
|
90
|
+
}
|
|
91
|
+
export interface CodaliCandidateReleaseChangelogNotes {
|
|
92
|
+
sourceExportIds: string[];
|
|
93
|
+
changedArtifactClasses: string[];
|
|
94
|
+
evalDeltas: {
|
|
95
|
+
status: "provided" | "not_provided";
|
|
96
|
+
summary: string;
|
|
97
|
+
metrics: Record<string, number>;
|
|
98
|
+
};
|
|
99
|
+
privacySummary: {
|
|
100
|
+
status: "provided" | "not_provided";
|
|
101
|
+
recordCount?: number;
|
|
102
|
+
containsCustomerData?: boolean;
|
|
103
|
+
containsSecrets?: boolean;
|
|
104
|
+
exportAllowedCount?: number;
|
|
105
|
+
trainingAllowedCount?: number;
|
|
106
|
+
policyTags?: string[];
|
|
107
|
+
};
|
|
108
|
+
rollback: string[];
|
|
109
|
+
notes: string[];
|
|
110
|
+
rawCustomerDataIncluded: false;
|
|
111
|
+
}
|
|
112
|
+
export interface CodaliCandidateReleasePlan {
|
|
113
|
+
schemaVersion: typeof CODALI_CANDIDATE_RELEASE_PLAN_SCHEMA_VERSION;
|
|
114
|
+
dryRun: boolean;
|
|
115
|
+
candidateId: string;
|
|
116
|
+
releaseId: string;
|
|
117
|
+
storageServiceReleaseId: string;
|
|
118
|
+
semverBump: CodaliCandidateReleaseSemverBump;
|
|
119
|
+
version: string;
|
|
120
|
+
futureTag: string;
|
|
121
|
+
branch: {
|
|
122
|
+
name: string;
|
|
123
|
+
discardable: true;
|
|
124
|
+
};
|
|
125
|
+
commit: {
|
|
126
|
+
message: string;
|
|
127
|
+
files: string[];
|
|
128
|
+
rawCustomerDataIncluded: false;
|
|
129
|
+
};
|
|
130
|
+
tag: {
|
|
131
|
+
name: string;
|
|
132
|
+
message: string;
|
|
133
|
+
matchesPackageVersions: boolean;
|
|
134
|
+
rawCustomerDataIncluded: false;
|
|
135
|
+
};
|
|
136
|
+
gates: CodaliCandidateReleasePlanGate[];
|
|
137
|
+
rollback: {
|
|
138
|
+
commands: string[];
|
|
139
|
+
packageVersions: CodaliCandidateReleasePackageVersionTarget[];
|
|
140
|
+
};
|
|
141
|
+
packageVersions: {
|
|
142
|
+
currentVersion: string;
|
|
143
|
+
plannedVersion: string;
|
|
144
|
+
futureTag: string;
|
|
145
|
+
matchesFutureTag: boolean;
|
|
146
|
+
targets: CodaliCandidateReleasePackageVersionTarget[];
|
|
147
|
+
};
|
|
148
|
+
changelog: CodaliCandidateReleaseChangelogNotes;
|
|
149
|
+
}
|
|
150
|
+
export interface CodaliCandidateReleaseBuild {
|
|
151
|
+
schemaVersion: typeof CODALI_CANDIDATE_RELEASE_SCHEMA_VERSION;
|
|
152
|
+
dryRun: boolean;
|
|
153
|
+
release: CodaliImprovementRelease;
|
|
154
|
+
releasePlan: CodaliCandidateReleasePlan;
|
|
155
|
+
candidateWorkspace: CodaliCandidateReleaseWorkspace;
|
|
156
|
+
writePlan: CodaliCandidateReleaseWritePlan;
|
|
157
|
+
dirtyWorktree: CodaliCandidateReleaseDirtySummary;
|
|
158
|
+
generatedArtifacts: CodaliCandidateReleaseGeneratedArtifact[];
|
|
159
|
+
proposals: CodaliPatchCandidateBundle[];
|
|
160
|
+
patchOutput: string;
|
|
161
|
+
blockedReasons: string[];
|
|
162
|
+
}
|
|
163
|
+
export interface BuildCodaliCandidateReleaseInput {
|
|
164
|
+
inspection: DatasetExportManifestReaderResult;
|
|
165
|
+
artifacts?: readonly CodaliPatchProposalArtifact[];
|
|
166
|
+
repoRoot?: string;
|
|
167
|
+
scope?: CodaliImprovementScope;
|
|
168
|
+
releaseLevel?: CodaliImprovementReleaseLevel;
|
|
169
|
+
dryRun?: boolean;
|
|
170
|
+
runId?: string;
|
|
171
|
+
candidateDate?: string;
|
|
172
|
+
candidateId?: string;
|
|
173
|
+
candidatePath?: string;
|
|
174
|
+
candidateDirectories?: readonly string[];
|
|
175
|
+
outputPath?: string;
|
|
176
|
+
approvedPaths?: readonly string[];
|
|
177
|
+
now?: () => Date;
|
|
178
|
+
dirtyEntries?: readonly CodaliCandidateReleaseDirtyEntry[];
|
|
179
|
+
commandRunner?: CodaliCandidateReleaseCommandRunner;
|
|
180
|
+
}
|
|
181
|
+
export interface BuildCodaliCandidateReleasePlanInput {
|
|
182
|
+
candidateId: string;
|
|
183
|
+
candidatePath?: string;
|
|
184
|
+
candidateDirectories?: readonly string[];
|
|
185
|
+
repoRoot?: string;
|
|
186
|
+
scope?: CodaliImprovementScope;
|
|
187
|
+
releaseLevel?: CodaliImprovementReleaseLevel;
|
|
188
|
+
dryRun?: boolean;
|
|
189
|
+
runId?: string;
|
|
190
|
+
candidateDate?: string;
|
|
191
|
+
now?: () => Date;
|
|
192
|
+
dirtyEntries?: readonly CodaliCandidateReleaseDirtyEntry[];
|
|
193
|
+
commandRunner?: CodaliCandidateReleaseCommandRunner;
|
|
194
|
+
}
|
|
195
|
+
export declare class CodaliCandidateReleaseBuilderError extends Error {
|
|
196
|
+
readonly code: string;
|
|
197
|
+
constructor(code: string, message: string);
|
|
198
|
+
}
|
|
199
|
+
export declare const buildCodaliCandidateRelease: (input: BuildCodaliCandidateReleaseInput) => Promise<CodaliCandidateReleaseBuild>;
|
|
200
|
+
export declare const buildCodaliCandidateReleasePlan: (input: BuildCodaliCandidateReleasePlanInput) => Promise<CodaliCandidateReleaseBuild>;
|
|
201
|
+
//# sourceMappingURL=CandidateReleaseBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CandidateReleaseBuilder.d.ts","sourceRoot":"","sources":["../../src/improvement/CandidateReleaseBuilder.ts"],"names":[],"mappings":"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"}
|