auditor-lambda 0.3.37 → 0.3.39

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 (37) hide show
  1. package/dist/cli.js +102 -2
  2. package/dist/extractors/designAssessment.d.ts +11 -0
  3. package/dist/extractors/designAssessment.js +254 -0
  4. package/dist/io/artifacts.d.ts +3 -0
  5. package/dist/io/artifacts.js +1 -0
  6. package/dist/orchestrator/advance.js +7 -1
  7. package/dist/orchestrator/dependencyMap.js +5 -0
  8. package/dist/orchestrator/designReviewPrompt.d.ts +2 -0
  9. package/dist/orchestrator/designReviewPrompt.js +151 -0
  10. package/dist/orchestrator/executors.js +10 -0
  11. package/dist/orchestrator/internalExecutors.d.ts +2 -0
  12. package/dist/orchestrator/internalExecutors.js +43 -0
  13. package/dist/orchestrator/nextStep.js +2 -0
  14. package/dist/orchestrator/state.js +2 -0
  15. package/dist/providers/types.d.ts +6 -0
  16. package/dist/quota/discoveredLimits.d.ts +21 -0
  17. package/dist/quota/discoveredLimits.js +74 -0
  18. package/dist/quota/headerExtraction.d.ts +8 -0
  19. package/dist/quota/headerExtraction.js +140 -0
  20. package/dist/quota/headerExtractors/claudeCodeHeaderExtractor.d.ts +6 -0
  21. package/dist/quota/headerExtractors/claudeCodeHeaderExtractor.js +28 -0
  22. package/dist/quota/headerExtractors/genericHeaderExtractor.d.ts +9 -0
  23. package/dist/quota/headerExtractors/genericHeaderExtractor.js +7 -0
  24. package/dist/quota/headerExtractors/index.d.ts +5 -0
  25. package/dist/quota/headerExtractors/index.js +12 -0
  26. package/dist/quota/index.d.ts +6 -0
  27. package/dist/quota/index.js +3 -0
  28. package/dist/quota/scheduler.d.ts +3 -0
  29. package/dist/quota/scheduler.js +18 -1
  30. package/dist/reporting/mergeFindings.d.ts +2 -1
  31. package/dist/reporting/mergeFindings.js +13 -1
  32. package/dist/reporting/synthesis.d.ts +2 -0
  33. package/dist/reporting/synthesis.js +1 -1
  34. package/dist/types/designAssessment.d.ts +7 -0
  35. package/dist/types/designAssessment.js +1 -0
  36. package/dist/types/sessionConfig.d.ts +3 -0
  37. package/package.json +1 -1
@@ -7,7 +7,7 @@ function sumTopN(sorted, n) {
7
7
  return sum;
8
8
  }
9
9
  export function scheduleWave(options) {
10
- const { providerName, sessionConfig, hostModel, requestedConcurrency, estimatedSlotTokens, estimatedPacketTokens = 0, quotaStateEntry = null, hostConcurrencyLimit = null, quotaSourceSnapshot = null, } = options;
10
+ const { providerName, sessionConfig, hostModel, requestedConcurrency, estimatedSlotTokens, estimatedPacketTokens = 0, quotaStateEntry = null, hostConcurrencyLimit = null, quotaSourceSnapshot = null, discoveredLimits = null, } = options;
11
11
  // Descending sort so sumTopN picks the largest slots
12
12
  const slotsSorted = estimatedSlotTokens
13
13
  ? [...estimatedSlotTokens].sort((a, b) => b - a)
@@ -44,6 +44,12 @@ export function scheduleWave(options) {
44
44
  const safetyMargin = quota.safety_margin ?? 0.8;
45
45
  const halfLifeHours = quota.empirical_half_life_hours ?? 24;
46
46
  const { limits, source, confidence } = resolveLimits({ providerName, sessionConfig, hostModel });
47
+ // Fill null RPM/TPM from discovered limits (provider query or header extraction)
48
+ if (discoveredLimits) {
49
+ limits.requests_per_minute ??= discoveredLimits.requests_per_minute ?? null;
50
+ limits.input_tokens_per_minute ??= discoveredLimits.input_tokens_per_minute ?? null;
51
+ limits.output_tokens_per_minute ??= discoveredLimits.output_tokens_per_minute ?? null;
52
+ }
47
53
  let waveSize = requestedConcurrency;
48
54
  let cooldownUntil = null;
49
55
  // Respect an active cooldown period
@@ -93,6 +99,17 @@ export function scheduleWave(options) {
93
99
  else if (typeof fallbackCap === "number" && Number.isFinite(fallbackCap)) {
94
100
  waveSize = Math.min(waveSize, Math.max(1, Math.floor(fallbackCap)));
95
101
  }
102
+ // First-contact cap: when no learned history, no configured fallback, AND
103
+ // no RPM/TPM limits from any source, apply a conservative ceiling.
104
+ // This triggers only for unconfigured local providers (fallbackCap is
105
+ // undefined). Hosted providers default to 1 via unknown_hosted_concurrency,
106
+ // and "unlimited" is an explicit opt-out.
107
+ if (fallbackCap == null &&
108
+ limits.requests_per_minute == null &&
109
+ limits.input_tokens_per_minute == null) {
110
+ const firstContactCap = quota.first_contact_concurrency ?? 3;
111
+ waveSize = Math.min(waveSize, Math.max(1, firstContactCap));
112
+ }
96
113
  }
97
114
  }
98
115
  // Apply real-time quota source data if available
@@ -1,4 +1,5 @@
1
1
  import type { AuditResult, Finding } from "../types.js";
2
+ import type { DesignAssessment } from "../types/designAssessment.js";
2
3
  import type { ExternalAnalyzerResults } from "../types/externalAnalyzer.js";
3
4
  import type { RuntimeValidationReport } from "../types/runtimeValidation.js";
4
- export declare function mergeFindings(results: AuditResult[], runtimeReport?: RuntimeValidationReport, externalAnalyzerResults?: ExternalAnalyzerResults): Finding[];
5
+ export declare function mergeFindings(results: AuditResult[], runtimeReport?: RuntimeValidationReport, externalAnalyzerResults?: ExternalAnalyzerResults, designAssessment?: DesignAssessment): Finding[];
@@ -236,8 +236,20 @@ function relevantExternalEvidence(finding, results) {
236
236
  .filter((item) => findingPaths.has(item.path))
237
237
  .map((item) => `external:${results.tool}:${item.path}:${item.summary}`);
238
238
  }
239
- export function mergeFindings(results, runtimeReport, externalAnalyzerResults) {
239
+ export function mergeFindings(results, runtimeReport, externalAnalyzerResults, designAssessment) {
240
240
  const merged = new Map();
241
+ const allDesignFindings = [
242
+ ...(designAssessment?.findings ?? []),
243
+ ...(designAssessment?.review_findings ?? []),
244
+ ];
245
+ for (const finding of allDesignFindings) {
246
+ const key = findingKey(finding);
247
+ merged.set(key, {
248
+ ...finding,
249
+ affected_files: [...finding.affected_files],
250
+ evidence: [...(finding.evidence ?? [])],
251
+ });
252
+ }
241
253
  for (const result of results) {
242
254
  for (const finding of result.findings) {
243
255
  const key = findingKey(finding);
@@ -1,4 +1,5 @@
1
1
  import type { AuditResult, CoverageMatrix, Finding, UnitManifest } from "../types.js";
2
+ import type { DesignAssessment } from "../types/designAssessment.js";
2
3
  import type { ExternalAnalyzerResults } from "../types/externalAnalyzer.js";
3
4
  import type { CriticalFlowManifest } from "../types/flows.js";
4
5
  import type { GraphBundle } from "../types/graph.js";
@@ -25,5 +26,6 @@ export declare function buildAuditReportModel(params: {
25
26
  coverageMatrix?: CoverageMatrix;
26
27
  runtimeValidationReport?: RuntimeValidationReport;
27
28
  externalAnalyzerResults?: ExternalAnalyzerResults;
29
+ designAssessment?: DesignAssessment;
28
30
  }): AuditReportModel;
29
31
  export declare function renderAuditReportMarkdown(model: AuditReportModel): string;
@@ -32,7 +32,7 @@ function formatSeverityList(summary) {
32
32
  return parts.length > 0 ? parts.join(", ") : "none";
33
33
  }
34
34
  export function buildAuditReportModel(params) {
35
- const findings = mergeFindings(params.results, params.runtimeValidationReport, params.externalAnalyzerResults);
35
+ const findings = mergeFindings(params.results, params.runtimeValidationReport, params.externalAnalyzerResults, params.designAssessment);
36
36
  const workBlocks = buildWorkBlocks({
37
37
  findings,
38
38
  unitManifest: params.unitManifest,
@@ -0,0 +1,7 @@
1
+ import type { Finding } from "../types.js";
2
+ export interface DesignAssessment {
3
+ generated_at: string;
4
+ findings: Finding[];
5
+ review_findings?: Finding[];
6
+ reviewed?: boolean;
7
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -46,6 +46,9 @@ export interface QuotaConfig {
46
46
  empirical_half_life_hours?: number;
47
47
  /** Allow the scheduler to try concurrency maxSafe+1 after consecutive successes (default: true). */
48
48
  ramp_up_enabled?: boolean;
49
+ /** Conservative concurrency cap for the first wave when no learned history
50
+ * and no discovered RPM/TPM limits exist (default: 3). */
51
+ first_contact_concurrency?: number;
49
52
  /** Hard host ceiling for simultaneously active conversation subagents. */
50
53
  host_active_subagent_limit?: number;
51
54
  /** Per-model overrides keyed by "provider/model". */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "auditor-lambda",
3
- "version": "0.3.37",
3
+ "version": "0.3.39",
4
4
  "private": false,
5
5
  "description": "Portable hybrid code-auditing framework for arbitrary repositories.",
6
6
  "type": "module",