audit-tools 0.28.8 → 0.28.10

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.
Files changed (188) hide show
  1. package/audit-code-wrapper-install-hosts.mjs +133 -27
  2. package/dist/audit/cli/confirmIntentStep.d.ts +1 -0
  3. package/dist/audit/cli/confirmIntentStep.d.ts.map +1 -1
  4. package/dist/audit/cli/confirmIntentStep.js +14 -10
  5. package/dist/audit/cli/confirmIntentStep.js.map +1 -1
  6. package/dist/audit/cli/dispatch/quotaPool.d.ts.map +1 -1
  7. package/dist/audit/cli/dispatch/quotaPool.js +47 -39
  8. package/dist/audit/cli/dispatch/quotaPool.js.map +1 -1
  9. package/dist/audit/cli/dispatch.d.ts +15 -1
  10. package/dist/audit/cli/dispatch.d.ts.map +1 -1
  11. package/dist/audit/cli/dispatch.js +54 -19
  12. package/dist/audit/cli/dispatch.js.map +1 -1
  13. package/dist/audit/cli/hybridDispatch.d.ts +46 -0
  14. package/dist/audit/cli/hybridDispatch.d.ts.map +1 -0
  15. package/dist/audit/cli/hybridDispatch.js +77 -0
  16. package/dist/audit/cli/hybridDispatch.js.map +1 -0
  17. package/dist/audit/cli/nextStepHelpers.d.ts.map +1 -1
  18. package/dist/audit/cli/nextStepHelpers.js +119 -2
  19. package/dist/audit/cli/nextStepHelpers.js.map +1 -1
  20. package/dist/audit/cli/reviewRun.d.ts +19 -0
  21. package/dist/audit/cli/reviewRun.d.ts.map +1 -1
  22. package/dist/audit/cli/reviewRun.js +2 -2
  23. package/dist/audit/cli/reviewRun.js.map +1 -1
  24. package/dist/audit/cli/rollingAuditDispatch.d.ts +57 -4
  25. package/dist/audit/cli/rollingAuditDispatch.d.ts.map +1 -1
  26. package/dist/audit/cli/rollingAuditDispatch.js +137 -10
  27. package/dist/audit/cli/rollingAuditDispatch.js.map +1 -1
  28. package/dist/audit/cli/scoreAuditCommand.d.ts +16 -0
  29. package/dist/audit/cli/scoreAuditCommand.d.ts.map +1 -0
  30. package/dist/audit/cli/scoreAuditCommand.js +82 -0
  31. package/dist/audit/cli/scoreAuditCommand.js.map +1 -0
  32. package/dist/audit/cli.d.ts.map +1 -1
  33. package/dist/audit/cli.js +5 -1
  34. package/dist/audit/cli.js.map +1 -1
  35. package/dist/audit/orchestrator/designReviewProjection.d.ts +9 -1
  36. package/dist/audit/orchestrator/designReviewProjection.d.ts.map +1 -1
  37. package/dist/audit/orchestrator/designReviewProjection.js +19 -1
  38. package/dist/audit/orchestrator/designReviewProjection.js.map +1 -1
  39. package/dist/audit/orchestrator/designReviewPrompt.d.ts +2 -0
  40. package/dist/audit/orchestrator/designReviewPrompt.d.ts.map +1 -1
  41. package/dist/audit/orchestrator/designReviewPrompt.js +11 -1
  42. package/dist/audit/orchestrator/designReviewPrompt.js.map +1 -1
  43. package/dist/audit/orchestrator/executorRunners.js +1 -1
  44. package/dist/audit/orchestrator/executorRunners.js.map +1 -1
  45. package/dist/audit/orchestrator/intakeExecutors.d.ts +9 -1
  46. package/dist/audit/orchestrator/intakeExecutors.d.ts.map +1 -1
  47. package/dist/audit/orchestrator/intakeExecutors.js +16 -3
  48. package/dist/audit/orchestrator/intakeExecutors.js.map +1 -1
  49. package/dist/audit/orchestrator/intentCheckpointExecutor.d.ts.map +1 -1
  50. package/dist/audit/orchestrator/intentCheckpointExecutor.js +3 -0
  51. package/dist/audit/orchestrator/intentCheckpointExecutor.js.map +1 -1
  52. package/dist/audit/orchestrator/intentInterpreter.d.ts +21 -7
  53. package/dist/audit/orchestrator/intentInterpreter.d.ts.map +1 -1
  54. package/dist/audit/orchestrator/intentInterpreter.js +30 -11
  55. package/dist/audit/orchestrator/intentInterpreter.js.map +1 -1
  56. package/dist/audit/orchestrator/intentScopeDisposition.d.ts +49 -0
  57. package/dist/audit/orchestrator/intentScopeDisposition.d.ts.map +1 -0
  58. package/dist/audit/orchestrator/intentScopeDisposition.js +57 -0
  59. package/dist/audit/orchestrator/intentScopeDisposition.js.map +1 -0
  60. package/dist/audit/orchestrator/rollingDispatch.d.ts +9 -0
  61. package/dist/audit/orchestrator/rollingDispatch.d.ts.map +1 -1
  62. package/dist/audit/orchestrator/rollingDispatch.js +10 -0
  63. package/dist/audit/orchestrator/rollingDispatch.js.map +1 -1
  64. package/dist/audit/orchestrator/scope.d.ts +1 -0
  65. package/dist/audit/orchestrator/scope.d.ts.map +1 -1
  66. package/dist/audit/orchestrator/scope.js +2 -7
  67. package/dist/audit/orchestrator/scope.js.map +1 -1
  68. package/dist/audit/quota/index.d.ts +5 -0
  69. package/dist/audit/quota/index.d.ts.map +1 -1
  70. package/dist/audit/reporting/scoreAudit.d.ts +161 -0
  71. package/dist/audit/reporting/scoreAudit.d.ts.map +1 -0
  72. package/dist/audit/reporting/scoreAudit.js +224 -0
  73. package/dist/audit/reporting/scoreAudit.js.map +1 -0
  74. package/dist/audit/types/activeDispatch.d.ts +29 -1
  75. package/dist/audit/types/activeDispatch.d.ts.map +1 -1
  76. package/dist/audit/types/activeDispatch.js.map +1 -1
  77. package/dist/audit/types/analyzerCapability.d.ts +6 -6
  78. package/dist/remediate/contractPipeline/changeClassification.d.ts +146 -0
  79. package/dist/remediate/contractPipeline/changeClassification.d.ts.map +1 -0
  80. package/dist/remediate/contractPipeline/changeClassification.js +398 -0
  81. package/dist/remediate/contractPipeline/changeClassification.js.map +1 -0
  82. package/dist/remediate/contractPipeline/derive.d.ts.map +1 -1
  83. package/dist/remediate/contractPipeline/derive.js +9 -0
  84. package/dist/remediate/contractPipeline/derive.js.map +1 -1
  85. package/dist/remediate/intent/intentOrdering.d.ts +51 -0
  86. package/dist/remediate/intent/intentOrdering.d.ts.map +1 -0
  87. package/dist/remediate/intent/intentOrdering.js +150 -0
  88. package/dist/remediate/intent/intentOrdering.js.map +1 -0
  89. package/dist/remediate/phases/plan.d.ts.map +1 -1
  90. package/dist/remediate/phases/plan.js +14 -1
  91. package/dist/remediate/phases/plan.js.map +1 -1
  92. package/dist/remediate/providers/index.d.ts +32 -0
  93. package/dist/remediate/providers/index.d.ts.map +1 -1
  94. package/dist/remediate/providers/index.js +28 -1
  95. package/dist/remediate/providers/index.js.map +1 -1
  96. package/dist/remediate/steps/contractPipeline.d.ts +15 -1
  97. package/dist/remediate/steps/contractPipeline.d.ts.map +1 -1
  98. package/dist/remediate/steps/contractPipeline.js +282 -14
  99. package/dist/remediate/steps/contractPipeline.js.map +1 -1
  100. package/dist/remediate/steps/dispatch.d.ts +75 -1
  101. package/dist/remediate/steps/dispatch.d.ts.map +1 -1
  102. package/dist/remediate/steps/dispatch.js +159 -43
  103. package/dist/remediate/steps/dispatch.js.map +1 -1
  104. package/dist/remediate/steps/nextStep.d.ts +53 -2
  105. package/dist/remediate/steps/nextStep.d.ts.map +1 -1
  106. package/dist/remediate/steps/nextStep.js +255 -81
  107. package/dist/remediate/steps/nextStep.js.map +1 -1
  108. package/dist/remediate/steps/providerNodeDispatch.d.ts +8 -1
  109. package/dist/remediate/steps/providerNodeDispatch.d.ts.map +1 -1
  110. package/dist/remediate/steps/providerNodeDispatch.js +7 -2
  111. package/dist/remediate/steps/providerNodeDispatch.js.map +1 -1
  112. package/dist/remediate/steps/rollingSession.d.ts +55 -1
  113. package/dist/remediate/steps/rollingSession.d.ts.map +1 -1
  114. package/dist/remediate/steps/rollingSession.js +132 -21
  115. package/dist/remediate/steps/rollingSession.js.map +1 -1
  116. package/dist/remediate/validation/contractPipelineGates.d.ts +23 -8
  117. package/dist/remediate/validation/contractPipelineGates.d.ts.map +1 -1
  118. package/dist/remediate/validation/contractPipelineGates.js +43 -38
  119. package/dist/remediate/validation/contractPipelineGates.js.map +1 -1
  120. package/dist/shared/dispatch/coordinator.d.ts +170 -0
  121. package/dist/shared/dispatch/coordinator.d.ts.map +1 -0
  122. package/dist/shared/dispatch/coordinator.js +177 -0
  123. package/dist/shared/dispatch/coordinator.js.map +1 -0
  124. package/dist/shared/dispatch/hybridDispatch.d.ts +74 -0
  125. package/dist/shared/dispatch/hybridDispatch.d.ts.map +1 -0
  126. package/dist/shared/dispatch/hybridDispatch.js +54 -0
  127. package/dist/shared/dispatch/hybridDispatch.js.map +1 -0
  128. package/dist/shared/dispatch/settledPools.d.ts +21 -0
  129. package/dist/shared/dispatch/settledPools.d.ts.map +1 -0
  130. package/dist/shared/dispatch/settledPools.js +34 -0
  131. package/dist/shared/dispatch/settledPools.js.map +1 -0
  132. package/dist/shared/index.d.ts +15 -5
  133. package/dist/shared/index.d.ts.map +1 -1
  134. package/dist/shared/index.js +14 -2
  135. package/dist/shared/index.js.map +1 -1
  136. package/dist/shared/intent/clauseInterpreter.d.ts +19 -0
  137. package/dist/shared/intent/clauseInterpreter.d.ts.map +1 -1
  138. package/dist/shared/intent/clauseInterpreter.js +19 -0
  139. package/dist/shared/intent/clauseInterpreter.js.map +1 -1
  140. package/dist/shared/providers/sharedProviderConfirmation.d.ts +134 -0
  141. package/dist/shared/providers/sharedProviderConfirmation.d.ts.map +1 -0
  142. package/dist/shared/providers/sharedProviderConfirmation.js +244 -0
  143. package/dist/shared/providers/sharedProviderConfirmation.js.map +1 -0
  144. package/dist/shared/quota/apiPool.d.ts +109 -0
  145. package/dist/shared/quota/apiPool.d.ts.map +1 -0
  146. package/dist/shared/quota/apiPool.js +183 -0
  147. package/dist/shared/quota/apiPool.js.map +1 -0
  148. package/dist/shared/quota/capacity.d.ts +29 -1
  149. package/dist/shared/quota/capacity.d.ts.map +1 -1
  150. package/dist/shared/quota/capacity.js +5 -0
  151. package/dist/shared/quota/capacity.js.map +1 -1
  152. package/dist/shared/quota/claimRegistry.d.ts +64 -0
  153. package/dist/shared/quota/claimRegistry.d.ts.map +1 -0
  154. package/dist/shared/quota/claimRegistry.js +157 -0
  155. package/dist/shared/quota/claimRegistry.js.map +1 -0
  156. package/dist/shared/quota/compositeQuotaSource.d.ts +10 -1
  157. package/dist/shared/quota/compositeQuotaSource.d.ts.map +1 -1
  158. package/dist/shared/quota/compositeQuotaSource.js +34 -6
  159. package/dist/shared/quota/compositeQuotaSource.js.map +1 -1
  160. package/dist/shared/quota/fileLock.d.ts.map +1 -1
  161. package/dist/shared/quota/fileLock.js +7 -1
  162. package/dist/shared/quota/fileLock.js.map +1 -1
  163. package/dist/shared/quota/httpQuotaSource.d.ts +9 -1
  164. package/dist/shared/quota/httpQuotaSource.d.ts.map +1 -1
  165. package/dist/shared/quota/httpQuotaSource.js +33 -8
  166. package/dist/shared/quota/httpQuotaSource.js.map +1 -1
  167. package/dist/shared/quota/learnedQuotaSource.d.ts +7 -1
  168. package/dist/shared/quota/learnedQuotaSource.d.ts.map +1 -1
  169. package/dist/shared/quota/learnedQuotaSource.js +18 -7
  170. package/dist/shared/quota/learnedQuotaSource.js.map +1 -1
  171. package/dist/shared/quota/quotaSource.d.ts +41 -0
  172. package/dist/shared/quota/quotaSource.d.ts.map +1 -1
  173. package/dist/shared/quota/quotaSource.js +19 -0
  174. package/dist/shared/quota/quotaSource.js.map +1 -1
  175. package/dist/shared/types/contractPipeline/obligations.d.ts +42 -0
  176. package/dist/shared/types/contractPipeline/obligations.d.ts.map +1 -1
  177. package/dist/shared/types/contractPipeline.d.ts +1 -1
  178. package/dist/shared/types/contractPipeline.d.ts.map +1 -1
  179. package/dist/shared/types/contractPipeline.js.map +1 -1
  180. package/dist/shared/types/intentCheckpoint.d.ts +14 -0
  181. package/dist/shared/types/intentCheckpoint.d.ts.map +1 -1
  182. package/dist/shared/types/intentCheckpoint.js +10 -0
  183. package/dist/shared/types/intentCheckpoint.js.map +1 -1
  184. package/dist/shared/types/sessionConfig.d.ts +60 -0
  185. package/dist/shared/types/sessionConfig.d.ts.map +1 -1
  186. package/dist/shared/types/sessionConfig.js +13 -0
  187. package/dist/shared/types/sessionConfig.js.map +1 -1
  188. package/package.json +3 -2
@@ -1,4 +1,5 @@
1
- import { mkdir, readFile, stat, unlink, writeFile } from 'node:fs/promises';
1
+ import { mkdir, mkdtemp, readFile, rm, stat, unlink, writeFile } from 'node:fs/promises';
2
+ import { tmpdir } from 'node:os';
2
3
  import { dirname, join, relative, resolve } from 'node:path';
3
4
  import { fileURLToPath } from 'node:url';
4
5
  import {
@@ -703,6 +704,127 @@ export async function installBootstrap(argv, options = {}) {
703
704
  return payload;
704
705
  }
705
706
 
707
+ /**
708
+ * Run a single host's `verify()` handler from INSTALL_HOST_DEFINITIONS against
709
+ * already-deployed assets and collect its check results. Single-sourced so the
710
+ * `verify-install` CLI and the `verify:hosts` release gate exercise the exact
711
+ * same per-host handler — adding a host to the table auto-extends both.
712
+ *
713
+ * @param {string} hostKey
714
+ * @param {{ root: string, assetPaths: object, hostEntry?: object }} context
715
+ * @returns {Promise<{ host: string, status: 'ok' | 'error', checks: object[] }>}
716
+ */
717
+ export async function runHostVerifyChecks(hostKey, { root, assetPaths, hostEntry }) {
718
+ const checks = [];
719
+
720
+ if (hostEntry) {
721
+ await collectVerifyCheck(checks, 'host_manifest_entry', async () => ({
722
+ summary: `Host guidance exists for ${hostEntry.label}.`,
723
+ primary_path: hostEntry.primary_path,
724
+ }));
725
+ }
726
+
727
+ const hostDefinition = INSTALL_HOST_DEFINITIONS[hostKey];
728
+ if (hostDefinition?.verify) {
729
+ await hostDefinition.verify({ checks, root, assetPaths, collectVerifyCheck });
730
+ } else {
731
+ checks.push({
732
+ id: 'host_handler',
733
+ status: 'error',
734
+ summary: `No verification handler is implemented for host "${hostKey}".`,
735
+ });
736
+ }
737
+
738
+ return {
739
+ host: hostKey,
740
+ status: checks.some((check) => check.status === 'error') ? 'error' : 'ok',
741
+ checks,
742
+ };
743
+ }
744
+
745
+ /**
746
+ * Deploy every host's assets into an ISOLATED throwaway repo root under a
747
+ * redirected `$HOME`/`USERPROFILE` (so the real user config is never touched),
748
+ * then re-run each host's `verify()` handler from the SAME INSTALL_HOST_DEFINITIONS
749
+ * table that drives the deploy. The set of hosts verified is derived from
750
+ * INSTALL_HOST_ORDER, so adding a host to the table auto-extends verification.
751
+ *
752
+ * Returns a structured report; callers (the `verify:hosts` script, tests) decide
753
+ * how to surface it. Never mutates the caller's environment beyond restoring the
754
+ * redirected HOME/USERPROFILE on the way out.
755
+ *
756
+ * @param {{ keepArtifacts?: boolean }} [options]
757
+ * @returns {Promise<{
758
+ * status: 'ok' | 'error',
759
+ * issue_count: number,
760
+ * verified_hosts: string[],
761
+ * home_dir: string,
762
+ * repo_root: string,
763
+ * hosts: { host: string, status: 'ok' | 'error', checks: object[] }[],
764
+ * }>}
765
+ */
766
+ export async function verifyHostsIsolated(options = {}) {
767
+ // A temp $HOME guarantees a postinstall-style deploy (or any HOME-reading code
768
+ // path) can never write to the operator's real ~/.config — defense in depth on
769
+ // top of the throwaway repo root the bootstrap writes into.
770
+ const homeDir = await mkdtemp(join(tmpdir(), 'audit-code-verify-hosts-home-'));
771
+ const repoRoot = join(homeDir, 'repo');
772
+ const previousHome = process.env.HOME;
773
+ const previousUserProfile = process.env.USERPROFILE;
774
+ process.env.HOME = homeDir;
775
+ process.env.USERPROFILE = homeDir;
776
+
777
+ try {
778
+ await mkdir(repoRoot, { recursive: true });
779
+ // Deploy every host surface into the throwaway root from the canonical assets.
780
+ await installBootstrap(['--host', 'all', '--root', repoRoot], { quiet: true });
781
+
782
+ // Derive expectations from the SAME table the deploy uses: profile → asset
783
+ // paths → per-host verify(). INSTALL_HOST_ORDER is the source of truth for the
784
+ // verified host set.
785
+ const profile = getInstallProfile('all');
786
+ const assetPaths = buildInstallAssetPaths(repoRoot, profile);
787
+ const hostCatalog = new Map(
788
+ buildHostCatalog({ root: repoRoot, host: 'all', assets: assetPaths }).map(
789
+ (entry) => [entry.host, entry],
790
+ ),
791
+ );
792
+
793
+ const hosts = [];
794
+ for (const hostKey of INSTALL_HOST_ORDER) {
795
+ hosts.push(
796
+ await runHostVerifyChecks(hostKey, {
797
+ root: repoRoot,
798
+ assetPaths,
799
+ hostEntry: hostCatalog.get(hostKey),
800
+ }),
801
+ );
802
+ }
803
+
804
+ const issueCount = hosts.reduce(
805
+ (sum, host) => sum + host.checks.filter((check) => check.status === 'error').length,
806
+ 0,
807
+ );
808
+
809
+ return {
810
+ status: issueCount > 0 ? 'error' : 'ok',
811
+ issue_count: issueCount,
812
+ verified_hosts: [...INSTALL_HOST_ORDER],
813
+ home_dir: homeDir,
814
+ repo_root: repoRoot,
815
+ hosts,
816
+ };
817
+ } finally {
818
+ if (previousHome === undefined) delete process.env.HOME;
819
+ else process.env.HOME = previousHome;
820
+ if (previousUserProfile === undefined) delete process.env.USERPROFILE;
821
+ else process.env.USERPROFILE = previousUserProfile;
822
+ if (!options.keepArtifacts) {
823
+ await rm(homeDir, { recursive: true, force: true }).catch(() => {});
824
+ }
825
+ }
826
+ }
827
+
706
828
  export async function verifyInstalledBootstrap(argv) {
707
829
  const root = resolve(getFlag(argv, '--root') ?? '.');
708
830
  const requestedHost = getFlag(argv, '--host')?.toLowerCase() ?? null;
@@ -820,40 +942,24 @@ export async function verifyInstalledBootstrap(argv) {
820
942
  });
821
943
 
822
944
  for (const hostKey of selectedHosts) {
823
- const checks = [];
824
945
  const hostEntry = hostCatalog.get(hostKey);
825
946
 
826
947
  if (!hostEntry) {
827
- checks.push({
828
- id: 'host_manifest_entry',
948
+ hostResults.push({
949
+ host: hostKey,
829
950
  status: 'error',
830
- summary: `Install manifest does not contain host guidance for "${hostKey}".`,
951
+ checks: [{
952
+ id: 'host_manifest_entry',
953
+ status: 'error',
954
+ summary: `Install manifest does not contain host guidance for "${hostKey}".`,
955
+ }],
831
956
  });
832
- hostResults.push({ host: hostKey, status: 'error', checks });
833
957
  continue;
834
958
  }
835
959
 
836
- await collectVerifyCheck(checks, 'host_manifest_entry', async () => ({
837
- summary: `Host guidance exists for ${hostEntry.label}.`,
838
- primary_path: hostEntry.primary_path,
839
- }));
840
-
841
- const hostDefinition = INSTALL_HOST_DEFINITIONS[hostKey];
842
- if (hostDefinition?.verify) {
843
- await hostDefinition.verify({ checks, root, assetPaths, collectVerifyCheck });
844
- } else {
845
- checks.push({
846
- id: 'host_handler',
847
- status: 'error',
848
- summary: `No verification handler is implemented for host "${hostKey}".`,
849
- });
850
- }
851
-
852
- hostResults.push({
853
- host: hostKey,
854
- status: checks.some((check) => check.status === 'error') ? 'error' : 'ok',
855
- checks,
856
- });
960
+ hostResults.push(
961
+ await runHostVerifyChecks(hostKey, { root, assetPaths, hostEntry }),
962
+ );
857
963
  }
858
964
 
859
965
  const issueCount =
@@ -18,6 +18,7 @@ export declare function renderConfirmIntentPrompt(preDigest: ScopePreDigest, opt
18
18
  * deterministically from the single shared intent interpreter.
19
19
  */
20
20
  unresolvedConstraintClauses?: Array<{
21
+ clause_id: string;
21
22
  text: string;
22
23
  checkpoint_question: string;
23
24
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"confirmIntentStep.d.ts","sourceRoot":"","sources":["../../../src/audit/cli/confirmIntentStep.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAyB,MAAM,6CAA6C,CAAC;AAsBzG;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE;IACJ,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB;;;;;;OAMG;IACH,2BAA2B,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpF,GACA,MAAM,CAgNR"}
1
+ {"version":3,"file":"confirmIntentStep.d.ts","sourceRoot":"","sources":["../../../src/audit/cli/confirmIntentStep.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAyB,MAAM,6CAA6C,CAAC;AAsBzG;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE;IACJ,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB;;;;;;OAMG;IACH,2BAA2B,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvG,GACA,MAAM,CAoNR"}
@@ -73,12 +73,14 @@ export function renderConfirmIntentPrompt(preDigest, opts) {
73
73
  "Your `free_form_intent` contains directive(s) that could NOT be encoded",
74
74
  "as a lens weight, priority signal, or scope emphasis. They will be",
75
75
  "**silently lost** unless you resolve them here — the audit will not",
76
- "proceed past planning until each is answered. For every question below,",
77
- "add a `constraint_clauses` entry (with the exact `checkpoint_question`",
78
- "text and a concrete `host_answer`) to `intent_checkpoint.json`, or remove",
79
- "the clause from `free_form_intent`:",
76
+ "proceed past planning until each is answered. For every clause below,",
77
+ "add a `constraint_clauses` entry (with the exact `clause_id` shown, the",
78
+ "`checkpoint_question` text, and a concrete `host_answer`) to",
79
+ "`intent_checkpoint.json`, or remove the clause from `free_form_intent`.",
80
+ "Each clause is keyed by its `clause_id`, so answer **every** one — two",
81
+ "clauses that read alike still need separate entries:",
80
82
  "",
81
- ...unresolvedClauses.map((c, i) => `${i + 1}. Clause: \`${c.text}\`\n Question: ${c.checkpoint_question}`),
83
+ ...unresolvedClauses.map((c, i) => `${i + 1}. Clause: \`${c.text}\`\n clause_id: \`${c.clause_id}\`\n Question: ${c.checkpoint_question}`),
82
84
  "",
83
85
  ]
84
86
  : []),
@@ -189,7 +191,7 @@ export function renderConfirmIntentPrompt(preDigest, opts) {
189
191
  ' "scope_summary": "<what is in scope>",',
190
192
  ' "intent_summary": "<the goal, e.g. full-audit / security-focused>",',
191
193
  ' "free_form_intent": "<optional: what to focus on; interpreted into lens/priority signals at planning, never threaded verbatim into worker prompts>",',
192
- ' "constraint_clauses": [{ "text": "<unencodable clause>", "checkpoint_question": "<the question above>", "host_answer": "<how to apply it>" }],',
194
+ ' "constraint_clauses": [{ "clause_id": "<the clause_id above>", "text": "<unencodable clause>", "checkpoint_question": "<the question above>", "host_answer": "<how to apply it>" }],',
193
195
  ' "excluded_scope": [{ "path": "<path or prefix>", "reason": "<why>" }],',
194
196
  ' "must_not_touch": ["<glob>"],',
195
197
  ' "disposition_overrides": [{ "path": "<path>", "status": "<generated|vendor|excluded|...>", "reason": "<why>" }],',
@@ -198,10 +200,12 @@ export function renderConfirmIntentPrompt(preDigest, opts) {
198
200
  "}",
199
201
  "```",
200
202
  "",
201
- "- `constraint_clauses` resolves the blocking questions above: each unencodable",
202
- " `free_form_intent` clause needs one entry with a concrete `host_answer`.",
203
- " Until every blocking question is answered (or its clause removed from",
204
- " `free_form_intent`), this confirm-intent step re-fires and planning is held.",
203
+ "- `constraint_clauses` resolves the blocking clauses above: each unencodable",
204
+ " `free_form_intent` clause needs one entry carrying its `clause_id` and a",
205
+ " concrete `host_answer`. Resolution is keyed on `clause_id`, so each distinct",
206
+ " clause must be answered individually. Until every blocking clause is answered",
207
+ " (or its clause removed from `free_form_intent`), this confirm-intent step",
208
+ " re-fires and planning is held.",
205
209
  "- `excluded_scope` entries are pruned from planning so excluded files never",
206
210
  " become audit tasks, and they are listed in the final report under",
207
211
  ' "Excluded / Out-of-Scope".',
@@ -1 +1 @@
1
- {"version":3,"file":"confirmIntentStep.js","sourceRoot":"","sources":["../../../src/audit/cli/confirmIntentStep.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"confirmIntentStep.js","sourceRoot":"","sources":["../../../src/audit/cli/confirmIntentStep.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"quotaPool.d.ts","sourceRoot":"","sources":["../../../../src/audit/cli/dispatch/quotaPool.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EACL,uBAAuB,EAQxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,YAAY,EAEZ,aAAa,EACd,MAAM,sBAAsB,CAAC;AAO9B,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;;;OAKG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CACvD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE;IAC9C,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACrC,WAAW,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;IACxF,uBAAuB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACnD,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,0EAA0E;IAC1E,eAAe,CAAC,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAAC;IAChD,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAgHhC;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,aAAa,CAAC;IAC7B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,8DAA8D;IAC9D,eAAe,CAAC,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAAC;IAChD,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CACxD,GAAG,OAAO,CAAC;IACV,aAAa,EAAE,aAAa,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC;IAChF,gBAAgB,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;CAC9D,CAAC,CAyCD"}
1
+ {"version":3,"file":"quotaPool.d.ts","sourceRoot":"","sources":["../../../../src/audit/cli/dispatch/quotaPool.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EACL,uBAAuB,EAQxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,YAAY,EAEZ,aAAa,EACd,MAAM,sBAAsB,CAAC;AAO9B,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;;;OAKG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CACvD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE;IAC9C,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACrC,WAAW,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;IACxF,uBAAuB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACnD,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,0EAA0E;IAC1E,eAAe,CAAC,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAAC;IAChD,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA6GhC;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,aAAa,CAAC;IAC7B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,8DAA8D;IAC9D,eAAe,CAAC,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAAC;IAChD,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CACxD,GAAG,OAAO,CAAC;IACV,aAAa,EAAE,aAAa,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC;IAChF,gBAAgB,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;CAC9D,CAAC,CAyCD"}
@@ -1,5 +1,5 @@
1
1
  import { join } from "node:path";
2
- import { writeJsonFile } from "audit-tools/shared";
2
+ import { writeJsonFile, buildHostModelPools } from "audit-tools/shared";
3
3
  import { DEFAULT_EMPIRICAL_HALF_LIFE_HOURS } from "audit-tools/shared";
4
4
  import { buildQuotaSource } from "audit-tools/shared/quota/compositeQuotaSource";
5
5
  import { resolveFreshSessionProviderName } from "../../providers/index.js";
@@ -50,23 +50,6 @@ export async function buildDispatchPool(params) {
50
50
  // queried and cached limits for context/output (the discovered-capability
51
51
  // rung then sizes the partition to the real window). RPM/TPM stay null in
52
52
  // the capability entry and fill from the queried/cached sources.
53
- const buildPool = async (capability, rank, modelId) => {
54
- const poolKey = modelId
55
- ? buildProviderModelKey(quotaProviderName, modelId)
56
- : quotaProviderKey;
57
- const dispatchCachedLimits = await lookupDiscoveredLimits(poolKey).catch(() => null);
58
- const quotaSourceSnapshot = await quotaSource.queryCurrentUsage(poolKey).catch(() => null);
59
- return {
60
- id: poolKey,
61
- providerName: quotaProviderName,
62
- hostModel,
63
- ...(rank ? { rank } : {}),
64
- hostConcurrencyLimit,
65
- quotaStateEntry: quotaState.entries[poolKey] ?? null,
66
- discoveredLimits: mergeDiscoveredLimits(capability, providerLimits, dispatchCachedLimits),
67
- quotaSourceSnapshot,
68
- };
69
- };
70
53
  const probeBudget = (pool) => {
71
54
  const probe = computeDispatchCapacity({
72
55
  pools: [pool],
@@ -76,18 +59,53 @@ export async function buildDispatchPool(params) {
76
59
  const limits = probe.primary.schedule.resolved_limits;
77
60
  return Math.max(1, limits.context_tokens - limits.output_tokens);
78
61
  };
79
- const roster = params.hostModelRoster ?? null;
80
- if (roster && roster.length > 0) {
81
- const pools = [];
82
- const perRank = new Map();
83
- for (const entry of roster) {
84
- const pool = await buildPool({
62
+ // Single-window capability limits (scalar handshake / nothing reported) — defined
63
+ // before `resolve` so the single-pool path can fall back to it.
64
+ const hostCapabilityLimits = params.hostContextTokens != null || params.hostOutputTokens != null
65
+ ? {
66
+ context_tokens: params.hostContextTokens ?? null,
67
+ output_tokens: params.hostOutputTokens ?? null,
68
+ source: "host_capability",
69
+ }
70
+ : null;
71
+ // The per-tool resolve for the SHARED host-pool-from-roster core: audit's pool key
72
+ // (quotaProviderKey for the single pool; per-rank model_id for a roster) and its
73
+ // richer discovered-limits — the capability handshake merged FIRST (so it outranks
74
+ // context/output) with the queried + learned-cache limits.
75
+ const resolve = async (entry) => {
76
+ const poolKey = entry?.model_id
77
+ ? buildProviderModelKey(quotaProviderName, entry.model_id)
78
+ : quotaProviderKey;
79
+ const dispatchCachedLimits = await lookupDiscoveredLimits(poolKey).catch(() => null);
80
+ const capability = entry
81
+ ? {
85
82
  context_tokens: entry.context_tokens,
86
83
  output_tokens: entry.output_tokens,
87
84
  source: "host_capability",
88
- }, entry.rank, entry.model_id);
89
- pools.push(pool);
90
- perRank.set(entry.rank, probeBudget(pool));
85
+ }
86
+ : hostCapabilityLimits;
87
+ return {
88
+ poolKey,
89
+ discoveredLimits: mergeDiscoveredLimits(capability, providerLimits, dispatchCachedLimits),
90
+ };
91
+ };
92
+ const roster = params.hostModelRoster ?? null;
93
+ const pools = await buildHostModelPools({
94
+ providerName: quotaProviderName,
95
+ hostModel,
96
+ hostConcurrencyLimit,
97
+ quotaSource,
98
+ quotaEntries: quotaState.entries,
99
+ roster,
100
+ resolve,
101
+ });
102
+ // Audit-specific budget layer on the shared pools: per-tier budgets from a roster,
103
+ // else the single pool's budget shared across every tier.
104
+ if (roster && roster.length > 0) {
105
+ const perRank = new Map();
106
+ for (const pool of pools) {
107
+ if (pool.rank)
108
+ perRank.set(pool.rank, probeBudget(pool));
91
109
  }
92
110
  const tierBudgets = resolveTierBudgets(perRank);
93
111
  return {
@@ -97,20 +115,10 @@ export async function buildDispatchPool(params) {
97
115
  tierBudgets,
98
116
  };
99
117
  }
100
- // Single-window handshake (scalar shorthand) or no handshake at all: one
101
- // pool, conservative floor when nothing was reported — unchanged behavior.
102
- const hostCapabilityLimits = params.hostContextTokens != null || params.hostOutputTokens != null
103
- ? {
104
- context_tokens: params.hostContextTokens ?? null,
105
- output_tokens: params.hostOutputTokens ?? null,
106
- source: "host_capability",
107
- }
108
- : null;
109
- const hostPool = await buildPool(hostCapabilityLimits);
110
118
  return {
111
- pools: [hostPool],
119
+ pools,
112
120
  hostModel,
113
- contextBudgetTokens: probeBudget(hostPool),
121
+ contextBudgetTokens: probeBudget(pools[0]),
114
122
  tierBudgets: null,
115
123
  };
116
124
  }
@@ -1 +1 @@
1
- {"version":3,"file":"quotaPool.js","sourceRoot":"","sources":["../../../../src/audit/cli/dispatch/quotaPool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quotaPool.js","sourceRoot":"","sources":["../../../../src/audit/cli/dispatch/quotaPool.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
- import type { SessionConfig } from "audit-tools/shared";
1
+ import type { SessionConfig, CapacityPool } from "audit-tools/shared";
2
2
  import type { HostModelRosterEntry, ProviderRateLimits } from "audit-tools/shared";
3
+ import type { AuditTask } from "../types.js";
3
4
  import { type ActiveDispatchState, type DispatchResultMapEntry, type DispatchResultMap, DISPATCH_RESULT_MAP_FILENAME, ACTIVE_DISPATCH_FILENAME } from "./dispatch/types.js";
4
5
  import { LARGE_FILE_PACKET_TARGET_LINES, type DispatchComplexity, type DispatchFanout, type PrepareDispatchResult, type DispatchPlanEntry, DEFAULT_DEEP_ROUTING_RISK, DEFAULT_STANDARD_ROUTING_RISK, DEFAULT_DISPATCH_CONFIRM_THRESHOLD, DEEP_MODEL_HINT_MIN_ESTIMATED_TOKENS } from "./dispatch/types.js";
5
6
  import { resolveDispatchTier, resolveTierBudgets, computeDispatchFanout, TIER_RANK } from "./dispatch/tierRouting.js";
@@ -25,5 +26,18 @@ export declare function prepareDispatchArtifacts(params: {
25
26
  hostModelRoster?: HostModelRosterEntry[] | null;
26
27
  /** Opaque model identity for the quota key when no model name resolves. */
27
28
  hostModelId?: string | null;
29
+ /**
30
+ * Restrict packetization to an explicit task subset (A-8 hybrid): the in-process
31
+ * driver reviews ONLY its coordinator-assigned partition WITHOUT reading or
32
+ * rewriting the shared `pending-audit-tasks.json` the host-review path owns for
33
+ * its own (complementary) subset. Absent → the usual file-or-bundle task source.
34
+ */
35
+ tasksOverride?: AuditTask[];
36
+ /**
37
+ * Override the confirmed capacity pools (A-8 hybrid): the in-process driver sizes
38
+ * + dispatches against the backend (NIM) pool(s) only, not the host pool it is
39
+ * spilling off of. Absent → the host-model pools from `buildDispatchPool`.
40
+ */
41
+ poolsOverride?: CapacityPool[];
28
42
  }): Promise<PrepareDispatchResult>;
29
43
  //# sourceMappingURL=dispatch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../../src/audit/cli/dispatch.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AASnF,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,4BAA4B,EAC5B,wBAAwB,EACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,8BAA8B,EAC9B,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,yBAAyB,EACzB,6BAA6B,EAC7B,kCAAkC,EAClC,oCAAoC,EACrC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,SAAS,EACV,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,sBAAsB,EACtB,aAAa,EAEb,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAEL,iBAAiB,EACjB,iBAAiB,EAElB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACpB,MAAM,qBAAqB,CAAC;AAO7B,YAAY,EACV,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,iBAAiB,GAClB,CAAC;AACF,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,8BAA8B,EAC9B,yBAAyB,EACzB,6BAA6B,EAC7B,kCAAkC,EAClC,oCAAoC,EACpC,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,SAAS,EACT,yBAAyB,EACzB,uBAAuB,EACvB,sBAAsB,EACtB,aAAa,EACb,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,GACpB,CAAC;AAIF,wBAAsB,wBAAwB,CAAC,MAAM,EAAE;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IAC3E,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,0EAA0E;IAC1E,eAAe,CAAC,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAAC;IAChD,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAkTjC"}
1
+ {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../../src/audit/cli/dispatch.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAKnF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI7C,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,4BAA4B,EAC5B,wBAAwB,EACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,8BAA8B,EAC9B,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,yBAAyB,EACzB,6BAA6B,EAC7B,kCAAkC,EAClC,oCAAoC,EACrC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,SAAS,EACV,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,sBAAsB,EACtB,aAAa,EAEb,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAEL,iBAAiB,EACjB,iBAAiB,EAElB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACpB,MAAM,qBAAqB,CAAC;AAO7B,YAAY,EACV,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,iBAAiB,GAClB,CAAC;AACF,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,8BAA8B,EAC9B,yBAAyB,EACzB,6BAA6B,EAC7B,kCAAkC,EAClC,oCAAoC,EACpC,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,SAAS,EACT,yBAAyB,EACzB,uBAAuB,EACvB,sBAAsB,EACtB,aAAa,EACb,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,GACpB,CAAC;AAIF,wBAAsB,wBAAwB,CAAC,MAAM,EAAE;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IAC3E,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,0EAA0E;IAC1E,eAAe,CAAC,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAAC;IAChD,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;IAC5B;;;;OAIG;IACH,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;CAChC,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAwVjC"}
@@ -10,7 +10,7 @@
10
10
  import { existsSync } from "node:fs";
11
11
  import { mkdir, writeFile } from "node:fs/promises";
12
12
  import { join } from "node:path";
13
- import { readJsonFile, writeJsonFile } from "audit-tools/shared";
13
+ import { readJsonFile, writeJsonFile, computeDispatchCapacity } from "audit-tools/shared";
14
14
  import { isFileMissingError } from "audit-tools/shared";
15
15
  import { loadArtifactBundle } from "../io/artifacts.js";
16
16
  import { writePacketSchemaFiles } from "../io/runArtifacts.js";
@@ -43,14 +43,18 @@ export async function prepareDispatchArtifacts(params) {
43
43
  }
44
44
  const bundle = await loadArtifactBundle(artifactsDir);
45
45
  const tasksPath = join(runDir, "pending-audit-tasks.json");
46
- const tasks = await readJsonFile(tasksPath).catch(async (error) => {
47
- if (isFileMissingError(error)) {
48
- const generated = buildPendingAuditTasks(bundle);
49
- await writeJsonFile(tasksPath, generated);
50
- return generated;
51
- }
52
- throw error;
53
- });
46
+ // A-8 hybrid: an explicit task subset (the in-process driver's coordinator-assigned
47
+ // partition) bypasses the shared pending-audit-tasks.json the host-review path owns
48
+ // for its complementary subset — so the two drivers never review the same task.
49
+ const tasks = params.tasksOverride ??
50
+ (await readJsonFile(tasksPath).catch(async (error) => {
51
+ if (isFileMissingError(error)) {
52
+ const generated = buildPendingAuditTasks(bundle);
53
+ await writeJsonFile(tasksPath, generated);
54
+ return generated;
55
+ }
56
+ throw error;
57
+ }));
54
58
  const sessionConfig = params.sessionConfig ?? (await loadSessionConfig(artifactsDir).catch(() => ({})));
55
59
  const lensDefsPath = join(params.packageRoot, "dispatch", "lens-definitions.json");
56
60
  const lensDefs = await readJsonFile(lensDefsPath);
@@ -79,16 +83,37 @@ export async function prepareDispatchArtifacts(params) {
79
83
  // first, then partition the provider-neutral task-affinity graph into packets
80
84
  // sized to that budget (JIT). This replaces the frozen plan-time packet cap —
81
85
  // a run started under one model re-partitions cleanly under another's window.
82
- const dispatchPool = await buildDispatchPool({
83
- sessionConfig,
84
- hostModel: params.hostModel,
85
- queryLimits: params.queryLimits,
86
- hostActiveSubagentLimit: params.hostActiveSubagentLimit,
87
- hostContextTokens: params.hostContextTokens,
88
- hostOutputTokens: params.hostOutputTokens,
89
- hostModelRoster: params.hostModelRoster,
90
- hostModelId: params.hostModelId,
91
- });
86
+ // A-8 hybrid: when the caller pins the backend (NIM) pool(s), size packetization to
87
+ // THAT pool's window (through the shared capacity fold) and dispatch against it — so
88
+ // the in-process driver reviews its partition on the backend it spilled onto, not the
89
+ // host pool. Otherwise resolve the host-model pools from the handshake as usual.
90
+ let dispatchPool;
91
+ if (params.poolsOverride && params.poolsOverride.length > 0) {
92
+ const probe = computeDispatchCapacity({
93
+ pools: params.poolsOverride,
94
+ sessionConfig,
95
+ pendingItemTokens: [],
96
+ });
97
+ const limits = probe.primary.schedule.resolved_limits;
98
+ dispatchPool = {
99
+ pools: params.poolsOverride,
100
+ hostModel: params.hostModel ?? null,
101
+ contextBudgetTokens: Math.max(1, limits.context_tokens - limits.output_tokens),
102
+ tierBudgets: null,
103
+ };
104
+ }
105
+ else {
106
+ dispatchPool = await buildDispatchPool({
107
+ sessionConfig,
108
+ hostModel: params.hostModel,
109
+ queryLimits: params.queryLimits,
110
+ hostActiveSubagentLimit: params.hostActiveSubagentLimit,
111
+ hostContextTokens: params.hostContextTokens,
112
+ hostOutputTokens: params.hostOutputTokens,
113
+ hostModelRoster: params.hostModelRoster,
114
+ hostModelId: params.hostModelId,
115
+ });
116
+ }
92
117
  const taskGraph = resolveDispatchTaskGraph(bundle, orderedTasks);
93
118
  let packets = buildReviewPacketsFromPartition(orderedTasks, {
94
119
  graph: taskGraph,
@@ -253,6 +278,15 @@ export async function prepareDispatchArtifacts(params) {
253
278
  // exclude them under a budget cap (present only when actually capped).
254
279
  const deferredPacketIds = deferredPackets.map((packet) => packet.packet_id);
255
280
  const deferredTaskIds = deferredPackets.flatMap((packet) => packet.task_ids);
281
+ // Carry forward the resumable DC-4 pause across re-preparation: a paused rolling
282
+ // run re-prepares its dispatch plan each pass, so a fresh artifact would clobber
283
+ // the persisted `paused_state` (settled exclusions + pause_count) and reset the
284
+ // run to pause-0 forever. Preserve it for the SAME run id so `advanceRollingPause`
285
+ // reads the prior pause and advances it toward resume-or-livelock.
286
+ const priorActiveDispatch = await readJsonFile(join(artifactsDir, ACTIVE_DISPATCH_FILENAME)).catch(() => null);
287
+ const carriedPausedState = priorActiveDispatch?.run_id === runId
288
+ ? priorActiveDispatch.paused_state
289
+ : undefined;
256
290
  const activeDispatch = {
257
291
  run_id: runId,
258
292
  created_at: new Date().toISOString(),
@@ -266,6 +300,7 @@ export async function prepareDispatchArtifacts(params) {
266
300
  deferred_task_ids: deferredTaskIds,
267
301
  }
268
302
  : {}),
303
+ ...(carriedPausedState ? { paused_state: carriedPausedState } : {}),
269
304
  };
270
305
  await writeJsonFile(join(artifactsDir, ACTIVE_DISPATCH_FILENAME), activeDispatch);
271
306
  // FINDING-012: pure-arithmetic fan-out summary the loader can gate on.