audit-tools 0.34.41 → 0.35.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/dist/audit/cli/args.d.ts +6 -0
- package/dist/audit/cli/args.d.ts.map +1 -1
- package/dist/audit/cli/args.js +21 -4
- package/dist/audit/cli/args.js.map +1 -1
- package/dist/audit/cli/auditStep.d.ts +6 -15
- package/dist/audit/cli/auditStep.d.ts.map +1 -1
- package/dist/audit/cli/auditStep.js +1 -1
- package/dist/audit/cli/auditStep.js.map +1 -1
- package/dist/audit/cli/dispatch/hostFanoutGate.d.ts +21 -61
- package/dist/audit/cli/dispatch/hostFanoutGate.d.ts.map +1 -1
- package/dist/audit/cli/dispatch/hostFanoutGate.js +18 -167
- package/dist/audit/cli/dispatch/hostFanoutGate.js.map +1 -1
- package/dist/audit/cli/dispatch/packetFilter.d.ts +2 -2
- package/dist/audit/cli/dispatch/packetFilter.d.ts.map +1 -1
- package/dist/audit/cli/dispatch/packetFilter.js +3 -1
- package/dist/audit/cli/dispatch/packetFilter.js.map +1 -1
- package/dist/audit/cli/dispatch/quotaPool.d.ts +2 -14
- package/dist/audit/cli/dispatch/quotaPool.d.ts.map +1 -1
- package/dist/audit/cli/dispatch/quotaPool.js +16 -6
- package/dist/audit/cli/dispatch/quotaPool.js.map +1 -1
- package/dist/audit/cli/dispatch/tierRouting.d.ts +2 -2
- package/dist/audit/cli/dispatch/tokenUsageObservation.d.ts.map +1 -1
- package/dist/audit/cli/dispatch/tokenUsageObservation.js +10 -2
- package/dist/audit/cli/dispatch/tokenUsageObservation.js.map +1 -1
- package/dist/audit/cli/dispatch.d.ts +14 -3
- package/dist/audit/cli/dispatch.d.ts.map +1 -1
- package/dist/audit/cli/dispatch.js +87 -65
- package/dist/audit/cli/dispatch.js.map +1 -1
- package/dist/audit/cli/forceSynthesisCommand.d.ts.map +1 -1
- package/dist/audit/cli/forceSynthesisCommand.js +9 -1
- package/dist/audit/cli/forceSynthesisCommand.js.map +1 -1
- package/dist/audit/cli/hybridDispatch.d.ts +4 -9
- package/dist/audit/cli/hybridDispatch.d.ts.map +1 -1
- package/dist/audit/cli/hybridDispatch.js +1 -1
- package/dist/audit/cli/hybridDispatch.js.map +1 -1
- package/dist/audit/cli/lineIndex.d.ts +2 -0
- package/dist/audit/cli/lineIndex.d.ts.map +1 -1
- package/dist/audit/cli/lineIndex.js +4 -0
- package/dist/audit/cli/lineIndex.js.map +1 -1
- package/dist/audit/cli/nextStepCommand.d.ts +0 -26
- package/dist/audit/cli/nextStepCommand.d.ts.map +1 -1
- package/dist/audit/cli/nextStepCommand.js +14 -358
- package/dist/audit/cli/nextStepCommand.js.map +1 -1
- package/dist/audit/cli/nextStepHelpers.d.ts +5 -16
- package/dist/audit/cli/nextStepHelpers.d.ts.map +1 -1
- package/dist/audit/cli/nextStepHelpers.js +27 -157
- package/dist/audit/cli/nextStepHelpers.js.map +1 -1
- package/dist/audit/cli/quotaCommand.d.ts.map +1 -1
- package/dist/audit/cli/quotaCommand.js +1 -5
- package/dist/audit/cli/quotaCommand.js.map +1 -1
- package/dist/audit/cli/reviewRun.d.ts.map +1 -1
- package/dist/audit/cli/reviewRun.js +58 -23
- package/dist/audit/cli/reviewRun.js.map +1 -1
- package/dist/audit/cli/rollingAuditDispatch.d.ts +1 -1
- package/dist/audit/cli/semanticReviewStep.d.ts.map +1 -1
- package/dist/audit/cli/semanticReviewStep.js +35 -54
- package/dist/audit/cli/semanticReviewStep.js.map +1 -1
- package/dist/audit/cli/steps.d.ts +4 -4
- package/dist/audit/cli/steps.d.ts.map +1 -1
- package/dist/audit/cli/steps.js +0 -1
- package/dist/audit/cli/steps.js.map +1 -1
- package/dist/audit/cli/workPartitionRuntime.d.ts +11 -0
- package/dist/audit/cli/workPartitionRuntime.d.ts.map +1 -0
- package/dist/audit/cli/workPartitionRuntime.js +39 -0
- package/dist/audit/cli/workPartitionRuntime.js.map +1 -0
- package/dist/audit/contracts/wrapperResponse.d.ts +6 -6
- package/dist/audit/io/artifacts.d.ts +1 -3
- package/dist/audit/io/artifacts.d.ts.map +1 -1
- package/dist/audit/io/artifacts.js +0 -3
- package/dist/audit/io/artifacts.js.map +1 -1
- package/dist/audit/orchestrator/advance.d.ts.map +1 -1
- package/dist/audit/orchestrator/advance.js +0 -35
- package/dist/audit/orchestrator/advance.js.map +1 -1
- package/dist/audit/orchestrator/advanceTypes.d.ts +4 -63
- package/dist/audit/orchestrator/advanceTypes.d.ts.map +1 -1
- package/dist/audit/orchestrator/executorRunners.d.ts.map +1 -1
- package/dist/audit/orchestrator/executorRunners.js +9 -12
- package/dist/audit/orchestrator/executorRunners.js.map +1 -1
- package/dist/audit/orchestrator/executors.d.ts.map +1 -1
- package/dist/audit/orchestrator/executors.js +0 -5
- package/dist/audit/orchestrator/executors.js.map +1 -1
- package/dist/audit/orchestrator/hostInputPause.d.ts +1 -1
- package/dist/audit/orchestrator/hostInputPause.js +1 -1
- package/dist/audit/orchestrator/ingestionExecutors.d.ts.map +1 -1
- package/dist/audit/orchestrator/ingestionExecutors.js +4 -1
- package/dist/audit/orchestrator/ingestionExecutors.js.map +1 -1
- package/dist/audit/orchestrator/intakeExecutors.d.ts +1 -65
- package/dist/audit/orchestrator/intakeExecutors.d.ts.map +1 -1
- package/dist/audit/orchestrator/intakeExecutors.js +3 -425
- package/dist/audit/orchestrator/intakeExecutors.js.map +1 -1
- package/dist/audit/orchestrator/nextStep.d.ts +0 -13
- package/dist/audit/orchestrator/nextStep.d.ts.map +1 -1
- package/dist/audit/orchestrator/nextStep.js +0 -7
- package/dist/audit/orchestrator/nextStep.js.map +1 -1
- package/dist/audit/orchestrator/planningExecutors.d.ts.map +1 -1
- package/dist/audit/orchestrator/planningExecutors.js +4 -1
- package/dist/audit/orchestrator/planningExecutors.js.map +1 -1
- package/dist/audit/orchestrator/rollingDispatch.d.ts +1 -1
- package/dist/audit/orchestrator/rollingDispatch.d.ts.map +1 -1
- package/dist/audit/orchestrator/rollingDispatch.js +5 -4
- package/dist/audit/orchestrator/rollingDispatch.js.map +1 -1
- package/dist/audit/orchestrator/state.d.ts +0 -39
- package/dist/audit/orchestrator/state.d.ts.map +1 -1
- package/dist/audit/orchestrator/state.js +3 -29
- package/dist/audit/orchestrator/state.js.map +1 -1
- package/dist/audit/orchestrator/synthesisExecutors.d.ts +8 -2
- package/dist/audit/orchestrator/synthesisExecutors.d.ts.map +1 -1
- package/dist/audit/orchestrator/synthesisExecutors.js +7 -5
- package/dist/audit/orchestrator/synthesisExecutors.js.map +1 -1
- package/dist/audit/reporting/findingIdentity.d.ts +2 -2
- package/dist/audit/reporting/findingIdentity.js +2 -2
- package/dist/audit/reporting/synthesis.d.ts +7 -1
- package/dist/audit/reporting/synthesis.d.ts.map +1 -1
- package/dist/audit/reporting/synthesis.js +27 -7
- package/dist/audit/reporting/synthesis.js.map +1 -1
- package/dist/audit/reporting/workBlocks.d.ts +14 -3
- package/dist/audit/reporting/workBlocks.d.ts.map +1 -1
- package/dist/audit/reporting/workBlocks.js +163 -73
- package/dist/audit/reporting/workBlocks.js.map +1 -1
- package/dist/audit/types/activeDispatch.d.ts +8 -7
- package/dist/audit/types/activeDispatch.d.ts.map +1 -1
- package/dist/audit/types/auditState.d.ts +6 -6
- package/dist/audit/types/externalAnalyzer.d.ts +6 -6
- package/dist/audit/validation/auditResults.d.ts.map +1 -1
- package/dist/audit/validation/auditResults.js +6 -1
- package/dist/audit/validation/auditResults.js.map +1 -1
- package/dist/remediate/contractPipeline/phaseCut.d.ts +8 -0
- package/dist/remediate/contractPipeline/phaseCut.d.ts.map +1 -1
- package/dist/remediate/contractPipeline/phaseCut.js +63 -0
- package/dist/remediate/contractPipeline/phaseCut.js.map +1 -1
- package/dist/remediate/contractPipeline/phaseCutArtifact.d.ts.map +1 -1
- package/dist/remediate/contractPipeline/phaseCutArtifact.js +5 -3
- package/dist/remediate/contractPipeline/phaseCutArtifact.js.map +1 -1
- package/dist/remediate/phases/plan.d.ts.map +1 -1
- package/dist/remediate/phases/plan.js +35 -12
- package/dist/remediate/phases/plan.js.map +1 -1
- package/dist/remediate/steps/contractPipeline.d.ts +6 -2
- package/dist/remediate/steps/contractPipeline.d.ts.map +1 -1
- package/dist/remediate/steps/contractPipeline.js +90 -6
- package/dist/remediate/steps/contractPipeline.js.map +1 -1
- package/dist/remediate/steps/contractPipelinePrompts.d.ts.map +1 -1
- package/dist/remediate/steps/contractPipelinePrompts.js +4 -2
- package/dist/remediate/steps/contractPipelinePrompts.js.map +1 -1
- package/dist/remediate/steps/dispatch/marshal.d.ts +6 -0
- package/dist/remediate/steps/dispatch/marshal.d.ts.map +1 -1
- package/dist/remediate/steps/dispatch/marshal.js +16 -17
- package/dist/remediate/steps/dispatch/marshal.js.map +1 -1
- package/dist/remediate/steps/dispatch/waveScheduling.d.ts +7 -15
- package/dist/remediate/steps/dispatch/waveScheduling.d.ts.map +1 -1
- package/dist/remediate/steps/dispatch/waveScheduling.js +26 -19
- package/dist/remediate/steps/dispatch/waveScheduling.js.map +1 -1
- package/dist/remediate/steps/nextStep.d.ts +5 -7
- package/dist/remediate/steps/nextStep.d.ts.map +1 -1
- package/dist/remediate/steps/nextStep.js +100 -82
- package/dist/remediate/steps/nextStep.js.map +1 -1
- package/dist/remediate/steps/rollingSession.d.ts +2 -1
- package/dist/remediate/steps/rollingSession.d.ts.map +1 -1
- package/dist/remediate/steps/rollingSession.js +14 -8
- package/dist/remediate/steps/rollingSession.js.map +1 -1
- package/dist/remediate/steps/sessionConfigLoad.d.ts +3 -2
- package/dist/remediate/steps/sessionConfigLoad.d.ts.map +1 -1
- package/dist/remediate/steps/sessionConfigLoad.js +4 -10
- package/dist/remediate/steps/sessionConfigLoad.js.map +1 -1
- package/dist/remediate/validation/contractPipeline.d.ts +1 -1
- package/dist/remediate/validation/contractPipeline.d.ts.map +1 -1
- package/dist/remediate/validation/contractPipeline.js +7 -1
- package/dist/remediate/validation/contractPipeline.js.map +1 -1
- package/dist/remediate/validation/contractPipelineGates.d.ts +8 -0
- package/dist/remediate/validation/contractPipelineGates.d.ts.map +1 -1
- package/dist/remediate/validation/contractPipelineGates.js +89 -0
- package/dist/remediate/validation/contractPipelineGates.js.map +1 -1
- package/dist/shared/config/resolveSessionConfig.d.ts.map +1 -1
- package/dist/shared/config/resolveSessionConfig.js +6 -5
- package/dist/shared/config/resolveSessionConfig.js.map +1 -1
- package/dist/shared/decompose/workPartition.d.ts +66 -0
- package/dist/shared/decompose/workPartition.d.ts.map +1 -0
- package/dist/shared/decompose/workPartition.js +523 -0
- package/dist/shared/decompose/workPartition.js.map +1 -0
- package/dist/shared/dispatch/admissionLoop.d.ts +5 -44
- package/dist/shared/dispatch/admissionLoop.d.ts.map +1 -1
- package/dist/shared/dispatch/admissionLoop.js +20 -82
- package/dist/shared/dispatch/admissionLoop.js.map +1 -1
- package/dist/shared/dispatch/coordinator.d.ts +5 -5
- package/dist/shared/dispatch/coordinator.d.ts.map +1 -1
- package/dist/shared/dispatch/coordinator.js +12 -11
- package/dist/shared/dispatch/coordinator.js.map +1 -1
- package/dist/shared/dispatch/costRank.d.ts +5 -155
- package/dist/shared/dispatch/costRank.d.ts.map +1 -1
- package/dist/shared/dispatch/costRank.js +2 -179
- package/dist/shared/dispatch/costRank.js.map +1 -1
- package/dist/shared/dispatch/dispatchQuotaContract.d.ts +37 -38
- package/dist/shared/dispatch/dispatchQuotaContract.d.ts.map +1 -1
- package/dist/shared/dispatch/dispatchQuotaContract.js +0 -1
- package/dist/shared/dispatch/dispatchQuotaContract.js.map +1 -1
- package/dist/shared/dispatch/hybridDispatch.d.ts +6 -2
- package/dist/shared/dispatch/hybridDispatch.d.ts.map +1 -1
- package/dist/shared/dispatch/hybridDispatch.js +1 -1
- package/dist/shared/dispatch/hybridDispatch.js.map +1 -1
- package/dist/shared/dispatch/rollingDispatch.d.ts +4 -4
- package/dist/shared/dispatch/rollingDispatch.d.ts.map +1 -1
- package/dist/shared/dispatch/rollingDispatch.js +13 -11
- package/dist/shared/dispatch/rollingDispatch.js.map +1 -1
- package/dist/shared/dispatch/unifiedRolling.d.ts +2 -2
- package/dist/shared/dispatch/unifiedRolling.d.ts.map +1 -1
- package/dist/shared/dispatch/unifiedRolling.js +1 -1
- package/dist/shared/dispatch/unifiedRolling.js.map +1 -1
- package/dist/shared/engine/obligationEngine.d.ts +2 -2
- package/dist/shared/friction/stepBoundaryCapture.d.ts +5 -59
- package/dist/shared/friction/stepBoundaryCapture.d.ts.map +1 -1
- package/dist/shared/friction/stepBoundaryCapture.js +11 -107
- package/dist/shared/friction/stepBoundaryCapture.js.map +1 -1
- package/dist/shared/index.d.ts +13 -16
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +9 -13
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/io/stateDir.d.ts +2 -2
- package/dist/shared/io/stateDir.js +2 -2
- package/dist/shared/providers/auditorSources.d.ts +10 -84
- package/dist/shared/providers/auditorSources.d.ts.map +1 -1
- package/dist/shared/providers/auditorSources.js +42 -261
- package/dist/shared/providers/auditorSources.js.map +1 -1
- package/dist/shared/providers/dispatchExclusion.d.ts +22 -0
- package/dist/shared/providers/dispatchExclusion.d.ts.map +1 -0
- package/dist/shared/providers/dispatchExclusion.js +23 -0
- package/dist/shared/providers/dispatchExclusion.js.map +1 -0
- package/dist/shared/providers/identity.d.ts +2 -66
- package/dist/shared/providers/identity.d.ts.map +1 -1
- package/dist/shared/providers/identity.js +2 -72
- package/dist/shared/providers/identity.js.map +1 -1
- package/dist/shared/providers/providerFactory.d.ts +0 -3
- package/dist/shared/providers/providerFactory.d.ts.map +1 -1
- package/dist/shared/providers/providerFactory.js +5 -32
- package/dist/shared/providers/providerFactory.js.map +1 -1
- package/dist/shared/providers/providerPathGuard.d.ts +3 -3
- package/dist/shared/providers/providerPathGuard.js +7 -7
- package/dist/shared/providers/providerPathGuard.js.map +1 -1
- package/dist/shared/quota/apiPool.d.ts +19 -22
- package/dist/shared/quota/apiPool.d.ts.map +1 -1
- package/dist/shared/quota/apiPool.js +66 -47
- package/dist/shared/quota/apiPool.js.map +1 -1
- package/dist/shared/quota/capacity.d.ts +29 -24
- package/dist/shared/quota/capacity.d.ts.map +1 -1
- package/dist/shared/quota/capacity.js +30 -4
- package/dist/shared/quota/capacity.js.map +1 -1
- package/dist/shared/quota/codexHostConfig.d.ts +6 -13
- package/dist/shared/quota/codexHostConfig.d.ts.map +1 -1
- package/dist/shared/quota/codexHostConfig.js +8 -14
- package/dist/shared/quota/codexHostConfig.js.map +1 -1
- package/dist/shared/quota/fileLock.d.ts +7 -0
- package/dist/shared/quota/fileLock.d.ts.map +1 -1
- package/dist/shared/quota/fileLock.js +32 -4
- package/dist/shared/quota/fileLock.js.map +1 -1
- package/dist/shared/quota/hostLimits.d.ts +1 -1
- package/dist/shared/quota/hostLimits.d.ts.map +1 -1
- package/dist/shared/quota/hostLimits.js +8 -11
- package/dist/shared/quota/hostLimits.js.map +1 -1
- package/dist/shared/quota/hostPool.d.ts +1 -1
- package/dist/shared/quota/hostPool.js +2 -2
- package/dist/shared/quota/hostPool.js.map +1 -1
- package/dist/shared/quota/limits.d.ts.map +1 -1
- package/dist/shared/quota/limits.js +30 -26
- package/dist/shared/quota/limits.js.map +1 -1
- package/dist/shared/quota/scheduler.d.ts +2 -3
- package/dist/shared/quota/scheduler.d.ts.map +1 -1
- package/dist/shared/quota/scheduler.js +1 -1
- package/dist/shared/quota/scheduler.js.map +1 -1
- package/dist/shared/quota/types.d.ts +10 -10
- package/dist/shared/quota/types.d.ts.map +1 -1
- package/dist/shared/quota/types.js +4 -7
- package/dist/shared/quota/types.js.map +1 -1
- package/dist/shared/repair/brokeredDispatch.d.ts.map +1 -1
- package/dist/shared/repair/brokeredDispatch.js +3 -0
- package/dist/shared/repair/brokeredDispatch.js.map +1 -1
- package/dist/shared/reporting/auditDeliverable.d.ts.map +1 -1
- package/dist/shared/reporting/auditDeliverable.js +1 -0
- package/dist/shared/reporting/auditDeliverable.js.map +1 -1
- package/dist/shared/rolling/pausedState.d.ts +7 -7
- package/dist/shared/rolling/pausedState.js +3 -3
- package/dist/shared/tokens.d.ts +2 -5
- package/dist/shared/tokens.d.ts.map +1 -1
- package/dist/shared/tokens.js +15 -15
- package/dist/shared/tokens.js.map +1 -1
- package/dist/shared/types/auditorDescriptor.d.ts +3 -2
- package/dist/shared/types/auditorDescriptor.d.ts.map +1 -1
- package/dist/shared/types/auditorDescriptor.js +3 -2
- package/dist/shared/types/auditorDescriptor.js.map +1 -1
- package/dist/shared/types/finding.d.ts +80 -0
- package/dist/shared/types/finding.d.ts.map +1 -1
- package/dist/shared/types/finding.js +17 -0
- package/dist/shared/types/finding.js.map +1 -1
- package/dist/shared/types/sessionConfig.d.ts +5 -5
- package/dist/shared/types/sessionConfig.js +1 -1
- package/dist/shared/validation/findingsReport.d.ts.map +1 -1
- package/dist/shared/validation/findingsReport.js +3 -0
- package/dist/shared/validation/findingsReport.js.map +1 -1
- package/docs/audit-pkg/development.md +3 -2
- package/docs/audit-pkg/operator-guide.md +13 -106
- package/docs/audit-pkg/product.md +8 -7
- package/docs/audit-pkg/release.md +38 -29
- package/opencode.json +2 -2
- package/package.json +7 -4
- package/skills/audit-code/SKILL.md +2 -1
- package/skills/audit-code/audit-code.prompt.md +4 -3
- package/skills/remediate-code/remediate-code.prompt.md +2 -1
- package/dist/audit/cli/providerConfirmationStep.d.ts +0 -106
- package/dist/audit/cli/providerConfirmationStep.d.ts.map +0 -1
- package/dist/audit/cli/providerConfirmationStep.js +0 -396
- package/dist/audit/cli/providerConfirmationStep.js.map +0 -1
- package/dist/audit/orchestrator/providerConfirmation.d.ts +0 -25
- package/dist/audit/orchestrator/providerConfirmation.d.ts.map +0 -1
- package/dist/audit/orchestrator/providerConfirmation.js +0 -60
- package/dist/audit/orchestrator/providerConfirmation.js.map +0 -1
- package/dist/shared/providers/providerConfirmation.d.ts +0 -141
- package/dist/shared/providers/providerConfirmation.d.ts.map +0 -1
- package/dist/shared/providers/providerConfirmation.js +0 -420
- package/dist/shared/providers/providerConfirmation.js.map +0 -1
- package/dist/shared/providers/proxyCatalog.d.ts +0 -158
- package/dist/shared/providers/proxyCatalog.d.ts.map +0 -1
- package/dist/shared/providers/proxyCatalog.js +0 -658
- package/dist/shared/providers/proxyCatalog.js.map +0 -1
- package/dist/shared/providers/sharedProviderConfirmation.d.ts +0 -802
- package/dist/shared/providers/sharedProviderConfirmation.d.ts.map +0 -1
- package/dist/shared/providers/sharedProviderConfirmation.js +0 -1865
- package/dist/shared/providers/sharedProviderConfirmation.js.map +0 -1
- package/dist/shared/types/providerConfirmation.d.ts +0 -334
- package/dist/shared/types/providerConfirmation.d.ts.map +0 -1
- package/dist/shared/types/providerConfirmation.js +0 -35
- package/dist/shared/types/providerConfirmation.js.map +0 -1
|
@@ -0,0 +1,523 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic, overlap-tolerant partitioning for audit/remediation work.
|
|
3
|
+
*
|
|
4
|
+
* Shared units and files are affinity signals, not union-find edges. Capacity is
|
|
5
|
+
* expressed only in estimated input tokens supplied by the current runtime; no
|
|
6
|
+
* finding-count target or ceiling exists. The optimizer compares dimensionless
|
|
7
|
+
* objectives with equal weight, so there is no hand-tuned coefficient table.
|
|
8
|
+
*
|
|
9
|
+
* PURE + DETERMINISTIC: no IO, clock, randomness, or incidental iteration order.
|
|
10
|
+
*/
|
|
11
|
+
const UNTAGGED = "(untagged)";
|
|
12
|
+
const NO_UNIT = "(no-unit)";
|
|
13
|
+
function stableUnique(values) {
|
|
14
|
+
return [...new Set(values.filter((value) => value.length > 0))].sort((a, b) => a.localeCompare(b));
|
|
15
|
+
}
|
|
16
|
+
function resolvePolicy(policy) {
|
|
17
|
+
if (!Number.isFinite(policy.capacityTokens) || policy.capacityTokens < 0) {
|
|
18
|
+
throw new Error("work partition capacityTokens must be a finite non-negative number");
|
|
19
|
+
}
|
|
20
|
+
if (policy.availableParallelism != null &&
|
|
21
|
+
(!Number.isSafeInteger(policy.availableParallelism) ||
|
|
22
|
+
policy.availableParallelism <= 0)) {
|
|
23
|
+
throw new Error("work partition availableParallelism must be a positive integer when supplied");
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
capacityTokens: policy.capacityTokens,
|
|
27
|
+
availableParallelism: policy.availableParallelism ?? null,
|
|
28
|
+
fileTokenCosts: policy.fileTokenCosts ?? {},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function normalizeItems(items) {
|
|
32
|
+
const byId = new Map();
|
|
33
|
+
for (const item of items) {
|
|
34
|
+
if (byId.has(item.id)) {
|
|
35
|
+
throw new Error(`work partition item id must be unique: ${item.id}`);
|
|
36
|
+
}
|
|
37
|
+
if (!Number.isFinite(item.estimatedTokens) || item.estimatedTokens < 0) {
|
|
38
|
+
throw new Error(`work partition item ${item.id} requires finite non-negative estimatedTokens`);
|
|
39
|
+
}
|
|
40
|
+
byId.set(item.id, {
|
|
41
|
+
id: item.id,
|
|
42
|
+
unitIds: stableUnique(item.unitIds),
|
|
43
|
+
files: stableUnique(item.files),
|
|
44
|
+
semanticTags: stableUnique(item.semanticTags),
|
|
45
|
+
estimatedTokens: item.estimatedTokens,
|
|
46
|
+
role: item.role ?? "implementation",
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return [...byId.values()].sort((a, b) => a.id.localeCompare(b.id));
|
|
50
|
+
}
|
|
51
|
+
function intersection(a, b) {
|
|
52
|
+
const shared = [];
|
|
53
|
+
let left = 0;
|
|
54
|
+
let right = 0;
|
|
55
|
+
while (left < a.length && right < b.length) {
|
|
56
|
+
const comparison = a[left].localeCompare(b[right]);
|
|
57
|
+
if (comparison === 0) {
|
|
58
|
+
shared.push(a[left]);
|
|
59
|
+
left += 1;
|
|
60
|
+
right += 1;
|
|
61
|
+
}
|
|
62
|
+
else if (comparison < 0) {
|
|
63
|
+
left += 1;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
right += 1;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return shared;
|
|
70
|
+
}
|
|
71
|
+
function mean(values) {
|
|
72
|
+
return values.length === 0
|
|
73
|
+
? 0
|
|
74
|
+
: values.reduce((sum, value) => sum + value, 0) / values.length;
|
|
75
|
+
}
|
|
76
|
+
function jaccard(a, b) {
|
|
77
|
+
if (a.length === 0 || b.length === 0)
|
|
78
|
+
return null;
|
|
79
|
+
let shared = 0;
|
|
80
|
+
let left = 0;
|
|
81
|
+
let right = 0;
|
|
82
|
+
while (left < a.length && right < b.length) {
|
|
83
|
+
const comparison = a[left].localeCompare(b[right]);
|
|
84
|
+
if (comparison === 0) {
|
|
85
|
+
shared += 1;
|
|
86
|
+
left += 1;
|
|
87
|
+
right += 1;
|
|
88
|
+
}
|
|
89
|
+
else if (comparison < 0) {
|
|
90
|
+
left += 1;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
right += 1;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return shared / (a.length + b.length - shared);
|
|
97
|
+
}
|
|
98
|
+
function normalizedEntropy(values, universeSize) {
|
|
99
|
+
if (values.length === 0 || universeSize <= 1)
|
|
100
|
+
return 0;
|
|
101
|
+
const counts = new Map();
|
|
102
|
+
for (const value of values)
|
|
103
|
+
counts.set(value, (counts.get(value) ?? 0) + 1);
|
|
104
|
+
let entropy = 0;
|
|
105
|
+
for (const count of counts.values()) {
|
|
106
|
+
const probability = count / values.length;
|
|
107
|
+
entropy -= probability * Math.log(probability);
|
|
108
|
+
}
|
|
109
|
+
return Math.min(1, entropy / Math.log(universeSize));
|
|
110
|
+
}
|
|
111
|
+
/** Average item-to-group semantic cross entropy, normalized to the input vocabulary. */
|
|
112
|
+
function semanticCrossEntropy(groupItems, semanticUniverseSize) {
|
|
113
|
+
if (groupItems.length === 0 || semanticUniverseSize <= 1)
|
|
114
|
+
return 0;
|
|
115
|
+
const counts = new Map();
|
|
116
|
+
let total = 0;
|
|
117
|
+
for (const item of groupItems) {
|
|
118
|
+
const tags = item.semanticTags.length > 0 ? item.semanticTags : [UNTAGGED];
|
|
119
|
+
for (const tag of tags) {
|
|
120
|
+
counts.set(tag, (counts.get(tag) ?? 0) + 1);
|
|
121
|
+
total += 1;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const itemScores = groupItems.map((item) => {
|
|
125
|
+
const tags = item.semanticTags.length > 0 ? item.semanticTags : [UNTAGGED];
|
|
126
|
+
return mean(tags.map((tag) => -Math.log((counts.get(tag) ?? 0) / total)));
|
|
127
|
+
});
|
|
128
|
+
return Math.min(1, mean(itemScores) / Math.log(semanticUniverseSize));
|
|
129
|
+
}
|
|
130
|
+
function fileTokenCost(path, fileTokenCosts) {
|
|
131
|
+
const value = fileTokenCosts[path];
|
|
132
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0
|
|
133
|
+
? value
|
|
134
|
+
: 0;
|
|
135
|
+
}
|
|
136
|
+
function countLogCount(count) {
|
|
137
|
+
return count <= 1 ? 0 : count * Math.log(count);
|
|
138
|
+
}
|
|
139
|
+
function semanticValues(item) {
|
|
140
|
+
return item.semanticTags.length > 0 ? item.semanticTags : [UNTAGGED];
|
|
141
|
+
}
|
|
142
|
+
function unitValues(item) {
|
|
143
|
+
return item.unitIds.length > 0 ? item.unitIds : [NO_UNIT];
|
|
144
|
+
}
|
|
145
|
+
function emptyAssignmentGroup() {
|
|
146
|
+
return {
|
|
147
|
+
items: [],
|
|
148
|
+
findingTokens: 0,
|
|
149
|
+
fileTokens: 0,
|
|
150
|
+
files: new Set(),
|
|
151
|
+
semanticCounts: new Map(),
|
|
152
|
+
semanticWeights: new Map(),
|
|
153
|
+
semanticWeightedLogCounts: 0,
|
|
154
|
+
semanticTotal: 0,
|
|
155
|
+
unitCounts: new Map(),
|
|
156
|
+
unitCountLogCounts: 0,
|
|
157
|
+
unitTotal: 0,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
function addItemToAssignmentGroup(group, item, fileTokenCosts) {
|
|
161
|
+
group.items.push(item);
|
|
162
|
+
group.findingTokens += item.estimatedTokens;
|
|
163
|
+
for (const file of item.files) {
|
|
164
|
+
if (group.files.has(file))
|
|
165
|
+
continue;
|
|
166
|
+
group.files.add(file);
|
|
167
|
+
group.fileTokens += fileTokenCost(file, fileTokenCosts);
|
|
168
|
+
}
|
|
169
|
+
const tags = semanticValues(item);
|
|
170
|
+
const tagWeight = 1 / tags.length;
|
|
171
|
+
for (const tag of tags) {
|
|
172
|
+
const previousCount = group.semanticCounts.get(tag) ?? 0;
|
|
173
|
+
const previousWeight = group.semanticWeights.get(tag) ?? 0;
|
|
174
|
+
if (previousCount > 0) {
|
|
175
|
+
group.semanticWeightedLogCounts -=
|
|
176
|
+
previousWeight * Math.log(previousCount);
|
|
177
|
+
}
|
|
178
|
+
const nextCount = previousCount + 1;
|
|
179
|
+
const nextWeight = previousWeight + tagWeight;
|
|
180
|
+
group.semanticCounts.set(tag, nextCount);
|
|
181
|
+
group.semanticWeights.set(tag, nextWeight);
|
|
182
|
+
group.semanticWeightedLogCounts += nextWeight * Math.log(nextCount);
|
|
183
|
+
}
|
|
184
|
+
group.semanticTotal += tags.length;
|
|
185
|
+
for (const unit of unitValues(item)) {
|
|
186
|
+
const previousCount = group.unitCounts.get(unit) ?? 0;
|
|
187
|
+
group.unitCountLogCounts -= countLogCount(previousCount);
|
|
188
|
+
const nextCount = previousCount + 1;
|
|
189
|
+
group.unitCounts.set(unit, nextCount);
|
|
190
|
+
group.unitCountLogCounts += countLogCount(nextCount);
|
|
191
|
+
group.unitTotal += 1;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
function createAssignmentGroup(seed, fileTokenCosts) {
|
|
195
|
+
const group = emptyAssignmentGroup();
|
|
196
|
+
addItemToAssignmentGroup(group, seed, fileTokenCosts);
|
|
197
|
+
return group;
|
|
198
|
+
}
|
|
199
|
+
function projectedGroupTokens(group, item, fileTokenCosts) {
|
|
200
|
+
let tokens = group.findingTokens + group.fileTokens + item.estimatedTokens;
|
|
201
|
+
for (const file of item.files) {
|
|
202
|
+
if (!group.files.has(file))
|
|
203
|
+
tokens += fileTokenCost(file, fileTokenCosts);
|
|
204
|
+
}
|
|
205
|
+
return tokens;
|
|
206
|
+
}
|
|
207
|
+
function projectedSemanticCrossEntropy(group, item, semanticUniverseSize) {
|
|
208
|
+
const tags = semanticValues(item);
|
|
209
|
+
const tagWeight = 1 / tags.length;
|
|
210
|
+
let weightedLogCounts = group.semanticWeightedLogCounts;
|
|
211
|
+
for (const tag of tags) {
|
|
212
|
+
const previousCount = group.semanticCounts.get(tag) ?? 0;
|
|
213
|
+
const previousWeight = group.semanticWeights.get(tag) ?? 0;
|
|
214
|
+
if (previousCount > 0)
|
|
215
|
+
weightedLogCounts -= previousWeight * Math.log(previousCount);
|
|
216
|
+
weightedLogCounts +=
|
|
217
|
+
(previousWeight + tagWeight) * Math.log(previousCount + 1);
|
|
218
|
+
}
|
|
219
|
+
const itemCount = group.items.length + 1;
|
|
220
|
+
const tagCount = group.semanticTotal + tags.length;
|
|
221
|
+
const crossEntropy = (itemCount * Math.log(tagCount) - weightedLogCounts) / itemCount;
|
|
222
|
+
return Math.min(1, crossEntropy / Math.log(Math.max(2, semanticUniverseSize)));
|
|
223
|
+
}
|
|
224
|
+
function projectedUnitEntropy(group, item, unitUniverseSize) {
|
|
225
|
+
const values = unitValues(item);
|
|
226
|
+
let countLogCounts = group.unitCountLogCounts;
|
|
227
|
+
for (const unit of values) {
|
|
228
|
+
const previousCount = group.unitCounts.get(unit) ?? 0;
|
|
229
|
+
countLogCounts -= countLogCount(previousCount);
|
|
230
|
+
countLogCounts += countLogCount(previousCount + 1);
|
|
231
|
+
}
|
|
232
|
+
const total = group.unitTotal + values.length;
|
|
233
|
+
const entropy = Math.log(total) - countLogCounts / total;
|
|
234
|
+
return Math.min(1, entropy / Math.log(Math.max(2, unitUniverseSize)));
|
|
235
|
+
}
|
|
236
|
+
function estimateGroupTokens(items, fileTokenCosts) {
|
|
237
|
+
const findingTokens = items.reduce((sum, item) => sum + item.estimatedTokens, 0);
|
|
238
|
+
const files = stableUnique(items.flatMap((item) => item.files));
|
|
239
|
+
return (findingTokens +
|
|
240
|
+
files.reduce((sum, path) => sum + fileTokenCost(path, fileTokenCosts), 0));
|
|
241
|
+
}
|
|
242
|
+
function materializeGroup(items, role, fileTokenCosts) {
|
|
243
|
+
return {
|
|
244
|
+
itemIds: items.map((item) => item.id).sort((a, b) => a.localeCompare(b)),
|
|
245
|
+
unitIds: stableUnique(items.flatMap((item) => item.unitIds)),
|
|
246
|
+
files: stableUnique(items.flatMap((item) => item.files)),
|
|
247
|
+
role,
|
|
248
|
+
estimatedTokens: estimateGroupTokens(items, fileTokenCosts),
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
function itemAffinity(left, right) {
|
|
252
|
+
const signals = [
|
|
253
|
+
jaccard(left.files, right.files),
|
|
254
|
+
jaccard(left.unitIds, right.unitIds),
|
|
255
|
+
jaccard(left.semanticTags, right.semanticTags),
|
|
256
|
+
].filter((value) => value != null);
|
|
257
|
+
return mean(signals);
|
|
258
|
+
}
|
|
259
|
+
function itemGroupAffinity(item, group) {
|
|
260
|
+
if (group.length === 0)
|
|
261
|
+
return 0;
|
|
262
|
+
return Math.max(...group.map((entry) => itemAffinity(item, entry)));
|
|
263
|
+
}
|
|
264
|
+
function orderForAssignment(items) {
|
|
265
|
+
const fileFrequency = new Map();
|
|
266
|
+
const unitFrequency = new Map();
|
|
267
|
+
const semanticFrequency = new Map();
|
|
268
|
+
for (const item of items) {
|
|
269
|
+
for (const file of item.files)
|
|
270
|
+
fileFrequency.set(file, (fileFrequency.get(file) ?? 0) + 1);
|
|
271
|
+
for (const unit of item.unitIds)
|
|
272
|
+
unitFrequency.set(unit, (unitFrequency.get(unit) ?? 0) + 1);
|
|
273
|
+
for (const tag of item.semanticTags) {
|
|
274
|
+
semanticFrequency.set(tag, (semanticFrequency.get(tag) ?? 0) + 1);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
const frequencyDensity = (values, frequencies) => values.length === 0
|
|
278
|
+
? null
|
|
279
|
+
: mean(values.map((value) => (frequencies.get(value) ?? 0) / items.length));
|
|
280
|
+
const connectivity = (item) => mean([
|
|
281
|
+
frequencyDensity(item.files, fileFrequency),
|
|
282
|
+
frequencyDensity(item.unitIds, unitFrequency),
|
|
283
|
+
frequencyDensity(item.semanticTags, semanticFrequency),
|
|
284
|
+
].filter((value) => value != null));
|
|
285
|
+
return [...items].sort((a, b) => {
|
|
286
|
+
const connectivityDelta = connectivity(b) - connectivity(a);
|
|
287
|
+
if (connectivityDelta !== 0)
|
|
288
|
+
return connectivityDelta;
|
|
289
|
+
const tokenDelta = b.estimatedTokens - a.estimatedTokens;
|
|
290
|
+
if (tokenDelta !== 0)
|
|
291
|
+
return tokenDelta;
|
|
292
|
+
return a.id.localeCompare(b.id);
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
function selectSeeds(items, count) {
|
|
296
|
+
const ordered = orderForAssignment(items);
|
|
297
|
+
const seeds = [ordered[0]];
|
|
298
|
+
const remaining = new Map(ordered.slice(1).map((item) => [item.id, item]));
|
|
299
|
+
const nearestSeedAffinity = new Map([...remaining.values()].map((item) => [
|
|
300
|
+
item.id,
|
|
301
|
+
itemAffinity(item, seeds[0]),
|
|
302
|
+
]));
|
|
303
|
+
while (seeds.length < count && remaining.size > 0) {
|
|
304
|
+
let next;
|
|
305
|
+
for (const candidate of remaining.values()) {
|
|
306
|
+
if (next === undefined) {
|
|
307
|
+
next = candidate;
|
|
308
|
+
continue;
|
|
309
|
+
}
|
|
310
|
+
const candidateNear = nearestSeedAffinity.get(candidate.id) ?? 0;
|
|
311
|
+
const nextNear = nearestSeedAffinity.get(next.id) ?? 0;
|
|
312
|
+
if (candidateNear < nextNear ||
|
|
313
|
+
(candidateNear === nextNear &&
|
|
314
|
+
(candidate.estimatedTokens > next.estimatedTokens ||
|
|
315
|
+
(candidate.estimatedTokens === next.estimatedTokens &&
|
|
316
|
+
candidate.id.localeCompare(next.id) < 0)))) {
|
|
317
|
+
next = candidate;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
if (next === undefined)
|
|
321
|
+
break;
|
|
322
|
+
seeds.push(next);
|
|
323
|
+
remaining.delete(next.id);
|
|
324
|
+
nearestSeedAffinity.delete(next.id);
|
|
325
|
+
for (const candidate of remaining.values()) {
|
|
326
|
+
nearestSeedAffinity.set(candidate.id, Math.max(nearestSeedAffinity.get(candidate.id) ?? 0, itemAffinity(candidate, next)));
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
return seeds;
|
|
330
|
+
}
|
|
331
|
+
function placementObjective(group, item, policy, unitUniverseSize, semanticUniverseSize) {
|
|
332
|
+
const tokens = projectedGroupTokens(group, item, policy.fileTokenCosts);
|
|
333
|
+
const load = policy.capacityTokens > 0 ? Math.min(1, tokens / policy.capacityTokens) : 1;
|
|
334
|
+
let uniqueUnits = group.unitCounts.size;
|
|
335
|
+
for (const unit of unitValues(item)) {
|
|
336
|
+
if (!group.unitCounts.has(unit))
|
|
337
|
+
uniqueUnits += 1;
|
|
338
|
+
}
|
|
339
|
+
const unitSpan = uniqueUnits / Math.max(1, unitUniverseSize);
|
|
340
|
+
return mean([
|
|
341
|
+
load,
|
|
342
|
+
projectedSemanticCrossEntropy(group, item, semanticUniverseSize),
|
|
343
|
+
projectedUnitEntropy(group, item, unitUniverseSize),
|
|
344
|
+
unitSpan,
|
|
345
|
+
1 - itemGroupAffinity(item, group.items),
|
|
346
|
+
]);
|
|
347
|
+
}
|
|
348
|
+
function buildCandidate(items, requestedGroupCount, policy, unitUniverseSize, semanticUniverseSize) {
|
|
349
|
+
const seeds = selectSeeds(items, Math.min(items.length, requestedGroupCount));
|
|
350
|
+
const seedIds = new Set(seeds.map((item) => item.id));
|
|
351
|
+
const groups = seeds.map((seed) => createAssignmentGroup(seed, policy.fileTokenCosts));
|
|
352
|
+
for (const item of orderForAssignment(items).filter((entry) => !seedIds.has(entry.id))) {
|
|
353
|
+
let bestIndex = -1;
|
|
354
|
+
let bestScore = Number.POSITIVE_INFINITY;
|
|
355
|
+
for (let index = 0; index < groups.length; index += 1) {
|
|
356
|
+
const group = groups[index];
|
|
357
|
+
const afterTokens = projectedGroupTokens(group, item, policy.fileTokenCosts);
|
|
358
|
+
if (afterTokens > policy.capacityTokens)
|
|
359
|
+
continue;
|
|
360
|
+
const score = placementObjective(group, item, policy, unitUniverseSize, semanticUniverseSize);
|
|
361
|
+
if (score < bestScore || (score === bestScore && index < bestIndex)) {
|
|
362
|
+
bestScore = score;
|
|
363
|
+
bestIndex = index;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
if (bestIndex < 0)
|
|
367
|
+
groups.push(createAssignmentGroup(item, policy.fileTokenCosts));
|
|
368
|
+
else
|
|
369
|
+
addItemToAssignmentGroup(groups[bestIndex], item, policy.fileTokenCosts);
|
|
370
|
+
}
|
|
371
|
+
return groups.map((group) => [...group.items].sort((a, b) => a.id.localeCompare(b.id)));
|
|
372
|
+
}
|
|
373
|
+
function deriveSeams(groups) {
|
|
374
|
+
const seams = [];
|
|
375
|
+
for (let left = 0; left < groups.length; left += 1) {
|
|
376
|
+
for (let right = left + 1; right < groups.length; right += 1) {
|
|
377
|
+
const a = groups[left];
|
|
378
|
+
const b = groups[right];
|
|
379
|
+
const sharedFiles = intersection(a.files, b.files);
|
|
380
|
+
const sharedUnitIds = intersection(a.unitIds, b.unitIds);
|
|
381
|
+
if (sharedFiles.length === 0 && sharedUnitIds.length === 0)
|
|
382
|
+
continue;
|
|
383
|
+
const systemic = a.role === "coordination" || b.role === "coordination";
|
|
384
|
+
const kind = systemic
|
|
385
|
+
? "systemic_coordination"
|
|
386
|
+
: sharedFiles.length > 0
|
|
387
|
+
? "predicted_write_conflict"
|
|
388
|
+
: "shared_context";
|
|
389
|
+
seams.push({
|
|
390
|
+
leftGroup: left,
|
|
391
|
+
rightGroup: right,
|
|
392
|
+
kind,
|
|
393
|
+
sharedFiles,
|
|
394
|
+
sharedUnitIds,
|
|
395
|
+
requiresPreparation: systemic || sharedFiles.length > 0,
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
return seams;
|
|
400
|
+
}
|
|
401
|
+
function scorePartition(groups, groupItems, seams, normalItemCount, policy, unitUniverseSize, semanticUniverseSize) {
|
|
402
|
+
const implementationGroups = groups
|
|
403
|
+
.map((group, index) => ({ group, items: groupItems[index] }))
|
|
404
|
+
.filter((entry) => entry.group.role === "implementation");
|
|
405
|
+
const tokenLoads = implementationGroups.map(({ group }) => group.estimatedTokens);
|
|
406
|
+
const sizeBalance = tokenLoads.length <= 1
|
|
407
|
+
? 0
|
|
408
|
+
: (Math.max(...tokenLoads) - Math.min(...tokenLoads)) /
|
|
409
|
+
Math.max(policy.capacityTokens, Math.max(...tokenLoads));
|
|
410
|
+
const semantic = mean(implementationGroups.map(({ items }) => semanticCrossEntropy(items, Math.max(2, semanticUniverseSize))));
|
|
411
|
+
const unitEntropy = mean(implementationGroups.map(({ items }) => normalizedEntropy(items.flatMap((item) => item.unitIds.length > 0 ? item.unitIds : ["(no-unit)"]), Math.max(2, unitUniverseSize))));
|
|
412
|
+
const unitCount = mean(implementationGroups.map(({ group }) => group.unitIds.length / Math.max(1, unitUniverseSize)));
|
|
413
|
+
const fileAppearances = new Map();
|
|
414
|
+
for (const group of groups) {
|
|
415
|
+
for (const file of group.files) {
|
|
416
|
+
fileAppearances.set(file, (fileAppearances.get(file) ?? 0) + 1);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
const totalFileAppearances = [...fileAppearances.values()].reduce((sum, count) => sum + count, 0);
|
|
420
|
+
const duplicateFileAppearances = [...fileAppearances.values()].reduce((sum, count) => sum + Math.max(0, count - 1), 0);
|
|
421
|
+
const writeOverlap = duplicateFileAppearances / Math.max(1, totalFileAppearances);
|
|
422
|
+
const possibleSeams = (groups.length * (groups.length - 1)) / 2;
|
|
423
|
+
const seamCost = seams.filter((seam) => seam.requiresPreparation).length /
|
|
424
|
+
Math.max(1, possibleSeams);
|
|
425
|
+
const implementationGroupCount = implementationGroups.length;
|
|
426
|
+
const blockCount = normalItemCount <= 1
|
|
427
|
+
? 0
|
|
428
|
+
: (implementationGroupCount - 1) / (normalItemCount - 1);
|
|
429
|
+
const usefulParallelism = policy.availableParallelism == null
|
|
430
|
+
? null
|
|
431
|
+
: Math.min(policy.availableParallelism, normalItemCount);
|
|
432
|
+
const parallelism = usefulParallelism == null || usefulParallelism === 0
|
|
433
|
+
? 0
|
|
434
|
+
: Math.max(0, usefulParallelism - implementationGroupCount) /
|
|
435
|
+
usefulParallelism;
|
|
436
|
+
const dimensions = [
|
|
437
|
+
sizeBalance,
|
|
438
|
+
semantic,
|
|
439
|
+
unitEntropy,
|
|
440
|
+
unitCount,
|
|
441
|
+
writeOverlap,
|
|
442
|
+
seamCost,
|
|
443
|
+
blockCount,
|
|
444
|
+
parallelism,
|
|
445
|
+
];
|
|
446
|
+
return {
|
|
447
|
+
sizeBalance,
|
|
448
|
+
semanticCrossEntropy: semantic,
|
|
449
|
+
unitEntropy,
|
|
450
|
+
unitCount,
|
|
451
|
+
writeOverlap,
|
|
452
|
+
seamCost,
|
|
453
|
+
blockCount,
|
|
454
|
+
parallelism,
|
|
455
|
+
total: mean(dimensions),
|
|
456
|
+
};
|
|
457
|
+
}
|
|
458
|
+
function emptyObjective() {
|
|
459
|
+
return {
|
|
460
|
+
sizeBalance: 0,
|
|
461
|
+
semanticCrossEntropy: 0,
|
|
462
|
+
unitEntropy: 0,
|
|
463
|
+
unitCount: 0,
|
|
464
|
+
writeOverlap: 0,
|
|
465
|
+
seamCost: 0,
|
|
466
|
+
blockCount: 0,
|
|
467
|
+
parallelism: 0,
|
|
468
|
+
total: 0,
|
|
469
|
+
};
|
|
470
|
+
}
|
|
471
|
+
/**
|
|
472
|
+
* Partition work items without forcing shared-unit/file transitive closure.
|
|
473
|
+
* Every input item appears in exactly one group; group file/unit scopes may
|
|
474
|
+
* overlap and every overlap is returned explicitly as a seam.
|
|
475
|
+
*/
|
|
476
|
+
export function partitionWorkItems(input, runtimePolicy) {
|
|
477
|
+
const policy = resolvePolicy(runtimePolicy);
|
|
478
|
+
const items = normalizeItems(input);
|
|
479
|
+
if (items.length === 0)
|
|
480
|
+
return { groups: [], seams: [], objective: emptyObjective() };
|
|
481
|
+
const allUnits = stableUnique(items.flatMap((item) => item.unitIds));
|
|
482
|
+
const allSemanticTags = stableUnique(items.flatMap((item) => item.semanticTags.length > 0 ? item.semanticTags : ["(untagged)"]));
|
|
483
|
+
const coordination = items.filter((item) => item.role === "coordination");
|
|
484
|
+
const normal = items.filter((item) => item.role === "implementation");
|
|
485
|
+
const coordinationGroups = coordination.map((item) => materializeGroup([item], "coordination", policy.fileTokenCosts));
|
|
486
|
+
const coordinationGroupItems = coordination.map((item) => [item]);
|
|
487
|
+
if (normal.length === 0) {
|
|
488
|
+
const seams = deriveSeams(coordinationGroups);
|
|
489
|
+
return {
|
|
490
|
+
groups: coordinationGroups,
|
|
491
|
+
seams,
|
|
492
|
+
objective: scorePartition(coordinationGroups, coordinationGroupItems, seams, 0, policy, allUnits.length, allSemanticTags.length),
|
|
493
|
+
};
|
|
494
|
+
}
|
|
495
|
+
const requestedCounts = stableUnique([
|
|
496
|
+
"1",
|
|
497
|
+
...(policy.availableParallelism == null
|
|
498
|
+
? []
|
|
499
|
+
: [String(Math.min(normal.length, policy.availableParallelism))]),
|
|
500
|
+
]).map(Number);
|
|
501
|
+
let best;
|
|
502
|
+
let bestSignature = "";
|
|
503
|
+
for (const requestedCount of requestedCounts) {
|
|
504
|
+
const candidateItems = buildCandidate(normal, requestedCount, policy, allUnits.length, allSemanticTags.length);
|
|
505
|
+
const implementationGroups = candidateItems.map((group) => materializeGroup(group, "implementation", policy.fileTokenCosts));
|
|
506
|
+
const groups = [...coordinationGroups, ...implementationGroups];
|
|
507
|
+
const groupItems = [...coordinationGroupItems, ...candidateItems];
|
|
508
|
+
const seams = deriveSeams(groups);
|
|
509
|
+
const objective = scorePartition(groups, groupItems, seams, normal.length, policy, allUnits.length, allSemanticTags.length);
|
|
510
|
+
const signature = groups
|
|
511
|
+
.map((group) => `${group.role}:${group.itemIds.join(",")}`)
|
|
512
|
+
.join("|");
|
|
513
|
+
if (best === undefined ||
|
|
514
|
+
objective.total < best.objective.total ||
|
|
515
|
+
(objective.total === best.objective.total &&
|
|
516
|
+
signature.localeCompare(bestSignature) < 0)) {
|
|
517
|
+
best = { groups, seams, objective };
|
|
518
|
+
bestSignature = signature;
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
return best;
|
|
522
|
+
}
|
|
523
|
+
//# sourceMappingURL=workPartition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workPartition.js","sourceRoot":"","sources":["../../../src/shared/decompose/workPartition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA+EH,MAAM,QAAQ,GAAG,YAAY,CAAC;AAC9B,MAAM,OAAO,GAAG,WAAW,CAAC;AAE5B,SAAS,YAAY,CAAC,MAAyB;IAC7C,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC5E,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CACnB,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,MAA2B;IAI3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CACb,oEAAoE,CACrE,CAAC;IACJ,CAAC;IACD,IACE,MAAM,CAAC,oBAAoB,IAAI,IAAI;QACnC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,oBAAoB,CAAC;YACjD,MAAM,CAAC,oBAAoB,IAAI,CAAC,CAAC,EACnC,CAAC;QACD,MAAM,IAAI,KAAK,CACb,8EAA8E,CAC/E,CAAC;IACJ,CAAC;IACD,OAAO;QACL,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,IAAI,IAAI;QACzD,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,EAAE;KAC5C,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAmC;IACzD,MAAM,IAAI,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC;YACvE,MAAM,IAAI,KAAK,CACb,uBAAuB,IAAI,CAAC,EAAE,+CAA+C,CAC9E,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YAChB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;YACnC,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;YAC/B,YAAY,EAAE,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;YAC7C,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,gBAAgB;SACpC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,YAAY,CAAC,CAAoB,EAAE,CAAoB;IAC9D,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,IAAI,GAAG,CAAC,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QAC3C,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAE,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAE,CAAC,CAAC;QACrD,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAE,CAAC,CAAC;YACtB,IAAI,IAAI,CAAC,CAAC;YACV,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;aAAM,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,CAAC;QACZ,CAAC;aAAM,CAAC;YACN,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,IAAI,CAAC,MAAyB;IACrC,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC;QACxB,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;AACpE,CAAC;AAED,SAAS,OAAO,CAAC,CAAoB,EAAE,CAAoB;IACzD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAClD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,IAAI,GAAG,CAAC,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QAC3C,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAE,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAE,CAAC,CAAC;QACrD,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,CAAC;YACZ,IAAI,IAAI,CAAC,CAAC;YACV,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;aAAM,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,CAAC;QACZ,CAAC;aAAM,CAAC;YACN,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,iBAAiB,CACxB,MAAyB,EACzB,YAAoB;IAEpB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,MAAM;QAAE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5E,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QACpC,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;QAC1C,OAAO,IAAI,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,wFAAwF;AACxF,SAAS,oBAAoB,CAC3B,UAAqC,EACrC,oBAA4B;IAE5B,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,oBAAoB,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC3E,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5C,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IACD,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC3E,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,aAAa,CACpB,IAAY,EACZ,cAAgD;IAEhD,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QACrE,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,CAAC,CAAC;AACR,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,cAAc,CAAC,IAAoB;IAC1C,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,UAAU,CAAC,IAAoB;IACtC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,oBAAoB;IAC3B,OAAO;QACL,KAAK,EAAE,EAAE;QACT,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,CAAC;QACb,KAAK,EAAE,IAAI,GAAG,EAAU;QACxB,cAAc,EAAE,IAAI,GAAG,EAAkB;QACzC,eAAe,EAAE,IAAI,GAAG,EAAkB;QAC1C,yBAAyB,EAAE,CAAC;QAC5B,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,IAAI,GAAG,EAAkB;QACrC,kBAAkB,EAAE,CAAC;QACrB,SAAS,EAAE,CAAC;KACb,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAC/B,KAA2B,EAC3B,IAAoB,EACpB,cAAgD;IAEhD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,eAAe,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QACpC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtB,KAAK,CAAC,UAAU,IAAI,aAAa,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,aAAa,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,cAAc,GAAG,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;YACtB,KAAK,CAAC,yBAAyB;gBAC7B,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC7C,CAAC;QACD,MAAM,SAAS,GAAG,aAAa,GAAG,CAAC,CAAC;QACpC,MAAM,UAAU,GAAG,cAAc,GAAG,SAAS,CAAC;QAC9C,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACzC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAC3C,KAAK,CAAC,yBAAyB,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtE,CAAC;IACD,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC;IAEnC,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,KAAK,CAAC,kBAAkB,IAAI,aAAa,CAAC,aAAa,CAAC,CAAC;QACzD,MAAM,SAAS,GAAG,aAAa,GAAG,CAAC,CAAC;QACpC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACtC,KAAK,CAAC,kBAAkB,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;QACrD,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAC5B,IAAoB,EACpB,cAAgD;IAEhD,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAC;IACrC,wBAAwB,CAAC,KAAK,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACtD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAA2B,EAC3B,IAAoB,EACpB,cAAgD;IAEhD,IAAI,MAAM,GAAG,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC;IAC3E,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,aAAa,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,6BAA6B,CACpC,KAA2B,EAC3B,IAAoB,EACpB,oBAA4B;IAE5B,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IAClC,IAAI,iBAAiB,GAAG,KAAK,CAAC,yBAAyB,CAAC;IACxD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,aAAa,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,cAAc,GAAG,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,aAAa,GAAG,CAAC;YACnB,iBAAiB,IAAI,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAChE,iBAAiB;YACf,CAAC,cAAc,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;IACnD,MAAM,YAAY,GAChB,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,iBAAiB,CAAC,GAAG,SAAS,CAAC;IACnE,OAAO,IAAI,CAAC,GAAG,CACb,CAAC,EACD,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAC3D,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAA2B,EAC3B,IAAoB,EACpB,gBAAwB;IAExB,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,cAAc,GAAG,KAAK,CAAC,kBAAkB,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,cAAc,IAAI,aAAa,CAAC,aAAa,CAAC,CAAC;QAC/C,cAAc,IAAI,aAAa,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;IACrD,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,cAAc,GAAG,KAAK,CAAC;IACzD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAgC,EAChC,cAAgD;IAEhD,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAChC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,eAAe,EACzC,CAAC,CACF,CAAC;IACF,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAChE,OAAO,CACL,aAAa;QACb,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,aAAa,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,CAC1E,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAgC,EAChC,IAAgC,EAChC,cAAgD;IAEhD,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACxE,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5D,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxD,IAAI;QACJ,eAAe,EAAE,mBAAmB,CAAC,KAAK,EAAE,cAAc,CAAC;KAC5D,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,IAAoB,EAAE,KAAqB;IAC/D,MAAM,OAAO,GAAG;QACd,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC;KAC/C,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;IACpD,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,iBAAiB,CACxB,IAAoB,EACpB,KAAgC;IAEhC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACjC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAgC;IAEhC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAChD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAChD,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK;YAC3B,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9D,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO;YAC7B,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9D,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpC,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IACD,MAAM,gBAAgB,GAAG,CACvB,MAAyB,EACzB,WAAgC,EACjB,EAAE,CACjB,MAAM,CAAC,MAAM,KAAK,CAAC;QACjB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,IAAI,CACF,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CACpE,CAAC;IACR,MAAM,YAAY,GAAG,CAAC,IAAoB,EAAU,EAAE,CACpD,IAAI,CACF;QACE,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC;QAC3C,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;QAC7C,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,iBAAiB,CAAC;KACvD,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CACpD,CAAC;IACJ,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,iBAAiB,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5D,IAAI,iBAAiB,KAAK,CAAC;YAAE,OAAO,iBAAiB,CAAC;QACtD,MAAM,UAAU,GAAG,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,CAAC;QACzD,IAAI,UAAU,KAAK,CAAC;YAAE,OAAO,UAAU,CAAC;QACxC,OAAO,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAClB,KAAgC,EAChC,KAAa;IAEb,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAqB,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,mBAAmB,GAAG,IAAI,GAAG,CACjC,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACpC,IAAI,CAAC,EAAE;QACP,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC;KAC9B,CAAC,CACH,CAAC;IACF,OAAO,KAAK,CAAC,MAAM,GAAG,KAAK,IAAI,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAClD,IAAI,IAAgC,CAAC;QACrC,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,IAAI,GAAG,SAAS,CAAC;gBACjB,SAAS;YACX,CAAC;YACD,MAAM,aAAa,GAAG,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YACjE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YACvD,IACE,aAAa,GAAG,QAAQ;gBACxB,CAAC,aAAa,KAAK,QAAQ;oBACzB,CAAC,SAAS,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe;wBAC/C,CAAC,SAAS,CAAC,eAAe,KAAK,IAAI,CAAC,eAAe;4BACjD,SAAS,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAChD,CAAC;gBACD,IAAI,GAAG,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QACD,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM;QAC9B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1B,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpC,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,mBAAmB,CAAC,GAAG,CACrB,SAAS,CAAC,EAAE,EACZ,IAAI,CAAC,GAAG,CACN,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,EAC1C,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,CAC9B,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CACzB,KAA2B,EAC3B,IAAoB,EACpB,MAAwC,EACxC,gBAAwB,EACxB,oBAA4B;IAE5B,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IACxE,MAAM,IAAI,GACR,MAAM,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,IAAI,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,WAAW,IAAI,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,QAAQ,GAAG,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC7D,OAAO,IAAI,CAAC;QACV,IAAI;QACJ,6BAA6B,CAAC,KAAK,EAAE,IAAI,EAAE,oBAAoB,CAAC;QAChE,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,gBAAgB,CAAC;QACnD,QAAQ;QACR,CAAC,GAAG,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC;KACzC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CACrB,KAAgC,EAChC,mBAA2B,EAC3B,MAAwC,EACxC,gBAAwB,EACxB,oBAA4B;IAE5B,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAChC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,cAAc,CAAC,CACnD,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC,MAAM,CACjD,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAClC,EAAE,CAAC;QACF,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;QACnB,IAAI,SAAS,GAAG,MAAM,CAAC,iBAAiB,CAAC;QACzC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACtD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAE,CAAC;YAC7B,MAAM,WAAW,GAAG,oBAAoB,CACtC,KAAK,EACL,IAAI,EACJ,MAAM,CAAC,cAAc,CACtB,CAAC;YACF,IAAI,WAAW,GAAG,MAAM,CAAC,cAAc;gBAAE,SAAS;YAClD,MAAM,KAAK,GAAG,kBAAkB,CAC9B,KAAK,EACL,IAAI,EACJ,MAAM,EACN,gBAAgB,EAChB,oBAAoB,CACrB,CAAC;YACF,IAAI,KAAK,GAAG,SAAS,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,CAAC;gBACpE,SAAS,GAAG,KAAK,CAAC;gBAClB,SAAS,GAAG,KAAK,CAAC;YACpB,CAAC;QACH,CAAC;QACD,IAAI,SAAS,GAAG,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;;YAEhE,wBAAwB,CAAC,MAAM,CAAC,SAAS,CAAE,EAAE,IAAI,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC1B,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAC1D,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAClB,MAAqC;IAErC,MAAM,KAAK,GAAwB,EAAE,CAAC;IACtC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;QACnD,KAAK,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC7D,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAE,CAAC;YACxB,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAE,CAAC;YACzB,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YACnD,MAAM,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YACzD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YACrE,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,KAAK,cAAc,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC;YACxE,MAAM,IAAI,GAAG,QAAQ;gBACnB,CAAC,CAAC,uBAAuB;gBACzB,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;oBACtB,CAAC,CAAC,0BAA0B;oBAC5B,CAAC,CAAC,gBAAgB,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC;gBACT,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,KAAK;gBACjB,IAAI;gBACJ,WAAW;gBACX,aAAa;gBACb,mBAAmB,EAAE,QAAQ,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;aACxD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CACrB,MAAqC,EACrC,UAAuC,EACvC,KAAmC,EACnC,eAAuB,EACvB,MAAwC,EACxC,gBAAwB,EACxB,oBAA4B;IAE5B,MAAM,oBAAoB,GAAG,MAAM;SAChC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,CAAE,EAAE,CAAC,CAAC;SAC7D,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,oBAAoB,CAAC,GAAG,CACzC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CACrC,CAAC;IACF,MAAM,WAAW,GACf,UAAU,CAAC,MAAM,IAAI,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;YACnD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,IAAI,CACnB,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CACrC,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAC/D,CACF,CAAC;IACF,MAAM,WAAW,GAAG,IAAI,CACtB,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CACrC,iBAAiB,CACf,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CACrB,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CACvD,EACD,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAC9B,CACF,CACF,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,CACpB,oBAAoB,CAAC,GAAG,CACtB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,CACpE,CACF,CAAC;IACF,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAClD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/B,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IACD,MAAM,oBAAoB,GAAG,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAC/D,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAC3B,CAAC,CACF,CAAC;IACF,MAAM,wBAAwB,GAAG,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CACnE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,EAC5C,CAAC,CACF,CAAC;IACF,MAAM,YAAY,GAChB,wBAAwB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;IAC/D,MAAM,aAAa,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAChE,MAAM,QAAQ,GACZ,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,MAAM;QACvD,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;IAC7B,MAAM,wBAAwB,GAAG,oBAAoB,CAAC,MAAM,CAAC;IAC7D,MAAM,UAAU,GACd,eAAe,IAAI,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,CAAC,wBAAwB,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;IAC7D,MAAM,iBAAiB,GACrB,MAAM,CAAC,oBAAoB,IAAI,IAAI;QACjC,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC;IAC7D,MAAM,WAAW,GACf,iBAAiB,IAAI,IAAI,IAAI,iBAAiB,KAAK,CAAC;QAClD,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,GAAG,wBAAwB,CAAC;YACzD,iBAAiB,CAAC;IACxB,MAAM,UAAU,GAAG;QACjB,WAAW;QACX,QAAQ;QACR,WAAW;QACX,SAAS;QACT,YAAY;QACZ,QAAQ;QACR,UAAU;QACV,WAAW;KACZ,CAAC;IACF,OAAO;QACL,WAAW;QACX,oBAAoB,EAAE,QAAQ;QAC9B,WAAW;QACX,SAAS;QACT,YAAY;QACZ,QAAQ;QACR,UAAU;QACV,WAAW;QACX,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;KACxB,CAAC;AACJ,CAAC;AAED,SAAS,cAAc;IACrB,OAAO;QACL,WAAW,EAAE,CAAC;QACd,oBAAoB,EAAE,CAAC;QACvB,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,CAAC;QACZ,YAAY,EAAE,CAAC;QACf,QAAQ,EAAE,CAAC;QACX,UAAU,EAAE,CAAC;QACb,WAAW,EAAE,CAAC;QACd,KAAK,EAAE,CAAC;KACT,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAmC,EACnC,aAAkC;IAElC,MAAM,MAAM,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QACpB,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,EAAE,CAAC;IAEhE,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACrE,MAAM,eAAe,GAAG,YAAY,CAClC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CACrB,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAClE,CACF,CAAC;IACF,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC;IACtE,MAAM,kBAAkB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACnD,gBAAgB,CAAC,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,CAChE,CAAC;IACF,MAAM,sBAAsB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAClE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,WAAW,CAAC,kBAAkB,CAAC,CAAC;QAC9C,OAAO;YACL,MAAM,EAAE,kBAAkB;YAC1B,KAAK;YACL,SAAS,EAAE,cAAc,CACvB,kBAAkB,EAClB,sBAAsB,EACtB,KAAK,EACL,CAAC,EACD,MAAM,EACN,QAAQ,CAAC,MAAM,EACf,eAAe,CAAC,MAAM,CACvB;SACF,CAAC;IACJ,CAAC;IAED,MAAM,eAAe,GAAG,YAAY,CAAC;QACnC,GAAG;QACH,GAAG,CAAC,MAAM,CAAC,oBAAoB,IAAI,IAAI;YACrC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;KACpE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEf,IAAI,IAAqC,CAAC;IAC1C,IAAI,aAAa,GAAG,EAAE,CAAC;IACvB,KAAK,MAAM,cAAc,IAAI,eAAe,EAAE,CAAC;QAC7C,MAAM,cAAc,GAAG,cAAc,CACnC,MAAM,EACN,cAAc,EACd,MAAM,EACN,QAAQ,CAAC,MAAM,EACf,eAAe,CAAC,MAAM,CACvB,CAAC;QACF,MAAM,oBAAoB,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACxD,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,CAAC,cAAc,CAAC,CACjE,CAAC;QACF,MAAM,MAAM,GAAG,CAAC,GAAG,kBAAkB,EAAE,GAAG,oBAAoB,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,CAAC,GAAG,sBAAsB,EAAE,GAAG,cAAc,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,SAAS,GAAG,cAAc,CAC9B,MAAM,EACN,UAAU,EACV,KAAK,EACL,MAAM,CAAC,MAAM,EACb,MAAM,EACN,QAAQ,CAAC,MAAM,EACf,eAAe,CAAC,MAAM,CACvB,CAAC;QACF,MAAM,SAAS,GAAG,MAAM;aACrB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;aAC1D,IAAI,CAAC,GAAG,CAAC,CAAC;QACb,IACE,IAAI,KAAK,SAAS;YAClB,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK;YACtC,CAAC,SAAS,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK;gBACvC,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAC7C,CAAC;YACD,IAAI,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;YACpC,aAAa,GAAG,SAAS,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,IAAK,CAAC;AACf,CAAC"}
|
|
@@ -65,17 +65,8 @@ export interface AdmissionPool {
|
|
|
65
65
|
* within that tie. Never reorders against cost or tier.
|
|
66
66
|
*/
|
|
67
67
|
capabilityScore?: number | null;
|
|
68
|
-
/**
|
|
69
|
-
|
|
70
|
-
* = faster; `+Infinity` = hardware-parallel). Consulted only when λ > 0. Derived
|
|
71
|
-
* pool-class-aware by {@link deriveThroughputConcurrency} at the build site — a
|
|
72
|
-
* backend source's uncapped default is `+Infinity` (parallel) while the conversation
|
|
73
|
-
* host's unspecified default is `1` (sequential), so `declaredCap`'s ambiguous `null`
|
|
74
|
-
* sentinel is NOT reused for the rank. See spec/dispatch-quota.md.
|
|
75
|
-
*/
|
|
76
|
-
throughputConcurrency: number;
|
|
77
|
-
/** Largest packet cost this pool can fit (context window − output). */
|
|
78
|
-
capacityTokens: number;
|
|
68
|
+
/** Largest packet cost this pool can fit (context window − output). Null is unadmittable. */
|
|
69
|
+
capacityTokens: number | null;
|
|
79
70
|
/**
|
|
80
71
|
* Cold-start calibration (see WaveSchedule.calibrating): at least one binding window
|
|
81
72
|
* has no real token budget derived yet (no absolute count, no learned slope). When
|
|
@@ -88,37 +79,17 @@ export interface AdmissionPool {
|
|
|
88
79
|
*/
|
|
89
80
|
calibrating?: boolean;
|
|
90
81
|
}
|
|
91
|
-
/**
|
|
92
|
-
* Derive a pool's throughput rank (effective parallelism) pool-class-aware — the fix
|
|
93
|
-
* for the `declaredCap == null` ambiguity (spec/dispatch-quota.md): the same
|
|
94
|
-
* "no cap" sentinel means opposite speeds on the two pool classes, so throughput cannot
|
|
95
|
-
* be read off `declaredCap` alone.
|
|
96
|
-
*
|
|
97
|
-
* - **Backend source** (an endpoint that accepts concurrent requests): an uncapped
|
|
98
|
-
* source is hardware-parallel ⇒ `+Infinity` (fastest); a declared `max_concurrent`
|
|
99
|
-
* ⇒ that count.
|
|
100
|
-
* - **Conversation host**: its parallelism IS its subagent budget; unspecified ⇒ the
|
|
101
|
-
* host is effectively SEQUENTIAL ⇒ `1` (ranks slowest), NOT unbounded. This is what
|
|
102
|
-
* stops λ=1 from crowning the default zero-declaration host over a metered parallel
|
|
103
|
-
* source — with no manual declaration.
|
|
104
|
-
*/
|
|
105
|
-
export declare function deriveThroughputConcurrency(params: {
|
|
106
|
-
isConversationHost: boolean;
|
|
107
|
-
hostActiveSubagents?: number | null;
|
|
108
|
-
sourceConcurrencyCap?: number | null;
|
|
109
|
-
}): number;
|
|
110
82
|
/**
|
|
111
83
|
* Build the admission pool set from the serializable per-pool capacity summaries —
|
|
112
84
|
* the SINGLE source of truth both orchestrators use (audit summarizes its dispatch
|
|
113
85
|
* capacity; remediate passes `schedule.capacity_pools`), so the two cannot drift on
|
|
114
86
|
* how a pool maps to an {@link AdmissionPool}. Every field is derived here once:
|
|
115
87
|
* budget (optimistic `+Infinity` when no live ceiling), the hard in-flight cap
|
|
116
|
-
* (`declaredCap` — host subagent budget OR endpoint `max_concurrent`), cost rank
|
|
117
|
-
* (with the operator-confirmed position as rung 1; spec/dispatch-quota.md), the
|
|
88
|
+
* (`declaredCap` — host subagent budget OR endpoint `max_concurrent`), cost rank,
|
|
118
89
|
* capability tier ordinal, the throughput rank (pool-class-aware concurrency;
|
|
119
90
|
* spec/dispatch-quota.md), and the context-window fit ceiling.
|
|
120
91
|
*/
|
|
121
|
-
export declare function admissionPoolsFromSummaries(summaries: readonly DispatchCapacityPoolSummary[]
|
|
92
|
+
export declare function admissionPoolsFromSummaries(summaries: readonly DispatchCapacityPoolSummary[]): AdmissionPool[];
|
|
122
93
|
/**
|
|
123
94
|
* One constraint's evaluation, serialized for the persisted explain artifact —
|
|
124
95
|
* the wire form of the ledger's {@link ConstraintOutcome} (legibility invariant,
|
|
@@ -803,14 +774,6 @@ export interface AdmitBatchInput {
|
|
|
803
774
|
* concurrent admitter double-grants the account (budget AND cap-count axes).
|
|
804
775
|
*/
|
|
805
776
|
leaseTtlMs?: number;
|
|
806
|
-
/**
|
|
807
|
-
* Cost↔speed dispatch bias (λ) ∈ [0, 1] — the operator-set operating point on the
|
|
808
|
-
* cost-vs-throughput frontier among capable pools (spec/dispatch-quota.md).
|
|
809
|
-
* λ=0 (default) is pure cost-first — byte-identical to the pre-dial ordering. λ=1 is
|
|
810
|
-
* pure throughput (fastest-capable-first). 0<λ<1 blends the two axes' ordinals.
|
|
811
|
-
* Out-of-range values clamp to [0, 1].
|
|
812
|
-
*/
|
|
813
|
-
dispatchBias?: number;
|
|
814
777
|
}
|
|
815
778
|
/**
|
|
816
779
|
* Build the composed capability gate (unified-routing step C): size-fit AND a
|
|
@@ -904,11 +867,9 @@ export declare function computeDispatchAdmission(input: {
|
|
|
904
867
|
}[];
|
|
905
868
|
pools: AdmissionPool[];
|
|
906
869
|
/** Declared output cap for the packet envelope (cold-start; ratio refines later). */
|
|
907
|
-
outputCap: number;
|
|
870
|
+
outputCap: number | null;
|
|
908
871
|
grantLeases: boolean;
|
|
909
872
|
ledger: ReservationLedger;
|
|
910
873
|
capable?: (pool: AdmissionPool, packet: AdmissionCandidate) => boolean;
|
|
911
|
-
/** Cost↔speed operating point λ ∈ [0,1]; see {@link AdmitBatchInput.dispatchBias}. */
|
|
912
|
-
dispatchBias?: number;
|
|
913
874
|
}): Promise<DispatchAdmission>;
|
|
914
875
|
//# sourceMappingURL=admissionLoop.d.ts.map
|