@hilbras/omninode 2.0.0-alpha.19 → 2.0.0-alpha.20

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/index.d.ts CHANGED
@@ -2161,11 +2161,16 @@ interface AuditEvent {
2161
2161
  interface AuditSink {
2162
2162
  record(event: AuditEvent): Promise<void>;
2163
2163
  }
2164
+ /** Default rotation threshold: the audit log is rotated past this size (§24). */
2165
+ declare const DEFAULT_AUDIT_MAX_BYTES: number;
2164
2166
  /** Append-only JSONL sink. Failures are logged, never propagated. */
2165
2167
  declare class FileAuditLog implements AuditSink {
2166
2168
  private readonly filePath;
2169
+ private readonly maxBytes;
2167
2170
  private readonly log;
2168
- constructor(directory?: string, log?: Logger);
2171
+ constructor(directory?: string, log?: Logger, maxBytes?: number);
2172
+ /** Rotates the log once it passes the size budget, keeping one backup. */
2173
+ private rotateIfNeeded;
2169
2174
  record(event: AuditEvent): Promise<void>;
2170
2175
  /** Recent events, oldest first; used by the CLI. */
2171
2176
  recent(limit?: number): Promise<AuditEvent[]>;
@@ -2740,12 +2745,16 @@ interface ExtractionMeta {
2740
2745
  }
2741
2746
  declare function extractReportFromText(raw: string, meta: ExtractionMeta): Report;
2742
2747
 
2748
+ /** Default cap on retained finding groups per combined report (§24, memory). */
2749
+ declare const MAX_COMBINED_FINDINGS = 200;
2743
2750
  interface AggregateOptions {
2744
2751
  objective?: string;
2745
2752
  pipelineRunId?: string;
2746
2753
  taskIds?: string[];
2747
2754
  /** Token-set Jaccard similarity above which findings are merged. */
2748
2755
  similarityThreshold?: number;
2756
+ /** Cap on retained finding groups; excess is counted in metadata. */
2757
+ maxFindings?: number;
2749
2758
  }
2750
2759
  declare function aggregateReports(reports: Report[], options?: AggregateOptions): CombinedReport;
2751
2760
  /**
@@ -2992,6 +3001,10 @@ interface PipelineEngineOptions {
2992
3001
  audit?: AuditSink;
2993
3002
  /** When present, finished runs have their reports collected, stored and combined (§16–§17). */
2994
3003
  reports?: ReportService;
3004
+ /** Max steps executed concurrently within one wave (§24 execution-storm guard). */
3005
+ maxParallelSteps?: number;
3006
+ /** Combined-context budget in characters (§24 memory bound). */
3007
+ maxContextChars?: number;
2995
3008
  log?: Logger;
2996
3009
  }
2997
3010
  interface RunPipelineOptions {
@@ -2999,6 +3012,12 @@ interface RunPipelineOptions {
2999
3012
  onStep?: (stepRun: PipelineStepRun) => void;
3000
3013
  }
3001
3014
 
3015
+ /** Default cap on steps running concurrently in one wave (§24). */
3016
+ declare const DEFAULT_MAX_PARALLEL_STEPS = 8;
3017
+ /** Default combined-context budget for downstream steps (§24). */
3018
+ declare const MAX_COMBINED_CONTEXT_CHARS = 20000;
3019
+ /** Keeps the most recent context within budget, marking what was dropped. */
3020
+ declare function budgetContext(context: string, maxChars?: number): string;
3002
3021
  declare class PipelineEngine implements IPipelineExecutor {
3003
3022
  private readonly options;
3004
3023
  private readonly log;
@@ -3179,6 +3198,6 @@ declare class ProtocolSession {
3179
3198
  sawV2: boolean;
3180
3199
  }
3181
3200
 
3182
- declare const OMNINODE_VERSION = "2.0.0-alpha.19";
3201
+ declare const OMNINODE_VERSION = "2.0.0-alpha.20";
3183
3202
 
3184
- export { AgentAdapterRegistry, type AgentConfig, type AgentDescriptor, AgentError, type AgentInfo, type AgentInputMode, type AgentIntegrationType, AgentRegistry, type AgentStatus, type AgentTaskInput, type AgentTaskOutput, type AgentToNodeMessage, type AggregatedFinding, type AggregatedRecommendation, type AppConfig, type ArtifactPayload, type AskedQuestion, type AuditAction, type AuditEvent, type AuditSink, type AuditSink as AuditStore, type ChatFn, type ChatMessage, type ChatRequest, type ChatResponse, type ChatRole, type ChatStreamChunk, type ChatUsage, type CombinedReport, type CombinedReportFilter, type Confidence, ConfigError, type ConflictPosition, ConsoleLogSink, type CreateProviderOptions, type CreateTaskInput, type CwdValidation, DEFAULT_MAX_OUTPUT_BYTES, type DecodeResult, type DefaultChatOptions, type DocumentState, type Durability, type EnvPolicy, type EnvelopeMeta, type Evidence, type EvidenceInput, type EvidenceKind, type ExecutionRecord, FileAuditLog, FilePipelineRunStore, FilePlanStore, FileReportStore, FileTaskStore, type Finding, type FindingOrigin, type FindingSeverity, type FindingSource, type HelloResult, HeuristicPlanner, type IAgent, type IAgentAdapter, type IChatProvider, type IMemoryProvider, type IPipelineExecutor, type IPlanner, type IProvider, type JsonDocument, JsonFileStore, type JsonFileStoreOptions, type LoadConfigOptions, type LoadConfigResult, LocalMemoryProvider, type LogFormat, type LogLevel, type LogSink, Logger, type LoggerOptions, MAX_CONTEXT_CHARS, MAX_MESSAGE_BYTES, MAX_REPORT_BYTES, type MemoryCategory, type MemoryContextQuery, type MemoryEntry, MemoryError, type MemoryProviderConfig, type MemoryProviderMetadata, type MemoryQuery, type MemoryScope, MemoryService, type MemoryServiceOptions, LocalMemoryProvider as MemoryStore, type MemoryTaskContext, type MessageEnvelope, type MigrationReport, type Modality, type ModelCapabilities, type ModelInfo, ModelPlanner, type ModelPlannerOptions, ModelRegistry, type ModelStatus, type NodeToAgentMessage, OMNINODE_VERSION, OPENAI_COMPATIBLE_TYPES, OmniHilbrasProvider, OmniNodeError, OpenAICompatibleProvider, PROTOCOL_V2, type PipelineDefinition, PipelineEngine, PipelineError, type PipelineRun, type PipelineRunAttempt, type PipelineRunFilter, type PipelineRunOptions, type PipelineRunStatus, type PipelineRunStore, type PipelineStep, type PipelineStepCondition, type PipelineStepKind, type PipelineStepRun, type PipelineRunStore as PipelineStore, type Plan, type PlanFilter, type PlanRequest, type PlanStep, type PlanStore, type PlanValidationIssue, type PlanValidationResult, PlannerError, ProcessAgent, ProcessAgentAdapter, type Project, ProjectStores, type ProtocolAgentToNodeType, ProtocolDecoder, type ProtocolEnvelope, ProtocolError, type ProtocolMessageType, type ProtocolNodeToAgentType, ProtocolSession, type ProtocolViolation, type ProtocolViolationCode, type ProviderAuthentication, type ProviderCapability, type ProviderConfig, ProviderError, type ProviderHealth, type ProviderStatus, type ProviderType, type QuestionPayload, type QuestionResponder, type RememberaConfig, RememberaMemoryProvider, type Report, type ReportArtifact, type ReportConflict, type ReportFilter, type ReportPayload, ReportService, type ReportStore, type RoleDefinition, RoleRegistry, type RunPipelineOptions, type RunTaskOptions, SCHEMA_VERSION, SUPPORTED_PROTOCOL_VERSIONS, type SessionIds, TERMINAL_TASK_STATUSES, type Task, type TaskContext, TaskEngine, type TaskEngineOptions, TaskError, type TaskResult, type TaskStatus, type TaskStore, type TaskStoreFilter, agentConfigSchema, aggregateReports, appConfigSchema, authHeaders, buildAgentRegistry, buildChildEnv, buildHello, buildHelloAck, buildPipelineEngine, buildPlanner, buildPlannerContext, buildRoleRegistry, composeTaskText, configDiagnostics, configureLogger, createAgent, createDefaultChatFn, createMemoryProvider, createProvider, createTaskEngine, decodeMessage, defaultAgentAdapters, defaultProjectConfigYaml, describeExit, describeSecretFindings, detectConflicts, encodeMessage, envelope, expandEnvRefs, extractMessage, extractReportFromText, findConfigFile, inspectDocument, isNetworkError, isOmniNodeError, isRetryable, isSupportedProtocol, isTimeoutError, killTree, kindFromStatus, loadConfig, loadConfigDetailed, logger, migrateProjectStores, newMessageId, normalizeEvidence, normalizeFinding, parseHello, parsePlanJson, parseRetryAfter, pipelineConfigSchema, pipelineStepConfigSchema, planJsonSchema, plannerConfigSchema, projectConfigSchema, providerConfigSchema, providerHttpError, providerTransportError, readDocument, registryKey, requestJson, resolveApiKey, resolveEnvPolicy, roleConfigSchema, sanitizeChunk, scanForInlineSecrets, similar, validateEnvelope, validatePlan, validateReport, validateWorkingDirectory, writeFileAtomic };
3203
+ export { AgentAdapterRegistry, type AgentConfig, type AgentDescriptor, AgentError, type AgentInfo, type AgentInputMode, type AgentIntegrationType, AgentRegistry, type AgentStatus, type AgentTaskInput, type AgentTaskOutput, type AgentToNodeMessage, type AggregatedFinding, type AggregatedRecommendation, type AppConfig, type ArtifactPayload, type AskedQuestion, type AuditAction, type AuditEvent, type AuditSink, type AuditSink as AuditStore, type ChatFn, type ChatMessage, type ChatRequest, type ChatResponse, type ChatRole, type ChatStreamChunk, type ChatUsage, type CombinedReport, type CombinedReportFilter, type Confidence, ConfigError, type ConflictPosition, ConsoleLogSink, type CreateProviderOptions, type CreateTaskInput, type CwdValidation, DEFAULT_AUDIT_MAX_BYTES, DEFAULT_MAX_OUTPUT_BYTES, DEFAULT_MAX_PARALLEL_STEPS, type DecodeResult, type DefaultChatOptions, type DocumentState, type Durability, type EnvPolicy, type EnvelopeMeta, type Evidence, type EvidenceInput, type EvidenceKind, type ExecutionRecord, FileAuditLog, FilePipelineRunStore, FilePlanStore, FileReportStore, FileTaskStore, type Finding, type FindingOrigin, type FindingSeverity, type FindingSource, type HelloResult, HeuristicPlanner, type IAgent, type IAgentAdapter, type IChatProvider, type IMemoryProvider, type IPipelineExecutor, type IPlanner, type IProvider, type JsonDocument, JsonFileStore, type JsonFileStoreOptions, type LoadConfigOptions, type LoadConfigResult, LocalMemoryProvider, type LogFormat, type LogLevel, type LogSink, Logger, type LoggerOptions, MAX_COMBINED_CONTEXT_CHARS, MAX_COMBINED_FINDINGS, MAX_CONTEXT_CHARS, MAX_MESSAGE_BYTES, MAX_REPORT_BYTES, type MemoryCategory, type MemoryContextQuery, type MemoryEntry, MemoryError, type MemoryProviderConfig, type MemoryProviderMetadata, type MemoryQuery, type MemoryScope, MemoryService, type MemoryServiceOptions, LocalMemoryProvider as MemoryStore, type MemoryTaskContext, type MessageEnvelope, type MigrationReport, type Modality, type ModelCapabilities, type ModelInfo, ModelPlanner, type ModelPlannerOptions, ModelRegistry, type ModelStatus, type NodeToAgentMessage, OMNINODE_VERSION, OPENAI_COMPATIBLE_TYPES, OmniHilbrasProvider, OmniNodeError, OpenAICompatibleProvider, PROTOCOL_V2, type PipelineDefinition, PipelineEngine, PipelineError, type PipelineRun, type PipelineRunAttempt, type PipelineRunFilter, type PipelineRunOptions, type PipelineRunStatus, type PipelineRunStore, type PipelineStep, type PipelineStepCondition, type PipelineStepKind, type PipelineStepRun, type PipelineRunStore as PipelineStore, type Plan, type PlanFilter, type PlanRequest, type PlanStep, type PlanStore, type PlanValidationIssue, type PlanValidationResult, PlannerError, ProcessAgent, ProcessAgentAdapter, type Project, ProjectStores, type ProtocolAgentToNodeType, ProtocolDecoder, type ProtocolEnvelope, ProtocolError, type ProtocolMessageType, type ProtocolNodeToAgentType, ProtocolSession, type ProtocolViolation, type ProtocolViolationCode, type ProviderAuthentication, type ProviderCapability, type ProviderConfig, ProviderError, type ProviderHealth, type ProviderStatus, type ProviderType, type QuestionPayload, type QuestionResponder, type RememberaConfig, RememberaMemoryProvider, type Report, type ReportArtifact, type ReportConflict, type ReportFilter, type ReportPayload, ReportService, type ReportStore, type RoleDefinition, RoleRegistry, type RunPipelineOptions, type RunTaskOptions, SCHEMA_VERSION, SUPPORTED_PROTOCOL_VERSIONS, type SessionIds, TERMINAL_TASK_STATUSES, type Task, type TaskContext, TaskEngine, type TaskEngineOptions, TaskError, type TaskResult, type TaskStatus, type TaskStore, type TaskStoreFilter, agentConfigSchema, aggregateReports, appConfigSchema, authHeaders, budgetContext, buildAgentRegistry, buildChildEnv, buildHello, buildHelloAck, buildPipelineEngine, buildPlanner, buildPlannerContext, buildRoleRegistry, composeTaskText, configDiagnostics, configureLogger, createAgent, createDefaultChatFn, createMemoryProvider, createProvider, createTaskEngine, decodeMessage, defaultAgentAdapters, defaultProjectConfigYaml, describeExit, describeSecretFindings, detectConflicts, encodeMessage, envelope, expandEnvRefs, extractMessage, extractReportFromText, findConfigFile, inspectDocument, isNetworkError, isOmniNodeError, isRetryable, isSupportedProtocol, isTimeoutError, killTree, kindFromStatus, loadConfig, loadConfigDetailed, logger, migrateProjectStores, newMessageId, normalizeEvidence, normalizeFinding, parseHello, parsePlanJson, parseRetryAfter, pipelineConfigSchema, pipelineStepConfigSchema, planJsonSchema, plannerConfigSchema, projectConfigSchema, providerConfigSchema, providerHttpError, providerTransportError, readDocument, registryKey, requestJson, resolveApiKey, resolveEnvPolicy, roleConfigSchema, sanitizeChunk, scanForInlineSecrets, similar, validateEnvelope, validatePlan, validateReport, validateWorkingDirectory, writeFileAtomic };
package/dist/index.js CHANGED
@@ -1744,6 +1744,9 @@ var ProcessAgent = class {
1744
1744
  clearTimeout(timer);
1745
1745
  this.running.delete(input.taskId);
1746
1746
  GLOBAL_RUNNING.delete(child);
1747
+ child.stdin?.destroy();
1748
+ child.stdout?.destroy();
1749
+ child.stderr?.destroy();
1747
1750
  finish();
1748
1751
  };
1749
1752
  const collect = (into, chunk) => {
@@ -2543,18 +2546,31 @@ function sleep(ms) {
2543
2546
  }
2544
2547
 
2545
2548
  // src/audit/index.ts
2546
- import { appendFile, mkdir as mkdir2, readFile as readFile2 } from "fs/promises";
2549
+ import { appendFile, mkdir as mkdir2, readFile as readFile2, rename as rename2, stat as stat2 } from "fs/promises";
2547
2550
  import { dirname as dirname2 } from "path";
2551
+ var DEFAULT_AUDIT_MAX_BYTES = 5 * 1024 * 1024;
2548
2552
  var FileAuditLog = class {
2549
2553
  filePath;
2554
+ maxBytes;
2550
2555
  log;
2551
- constructor(directory = `${process.cwd()}/.omninode`, log = logger) {
2556
+ constructor(directory = `${process.cwd()}/.omninode`, log = logger, maxBytes = DEFAULT_AUDIT_MAX_BYTES) {
2552
2557
  this.filePath = `${directory}/audit.jsonl`;
2558
+ this.maxBytes = maxBytes;
2553
2559
  this.log = log.child({ component: "audit" });
2554
2560
  }
2561
+ /** Rotates the log once it passes the size budget, keeping one backup. */
2562
+ async rotateIfNeeded() {
2563
+ try {
2564
+ const stats = await stat2(this.filePath);
2565
+ if (stats.size <= this.maxBytes) return;
2566
+ await rename2(this.filePath, `${this.filePath}.1`);
2567
+ } catch {
2568
+ }
2569
+ }
2555
2570
  async record(event) {
2556
2571
  try {
2557
2572
  await mkdir2(dirname2(this.filePath), { recursive: true });
2573
+ await this.rotateIfNeeded();
2558
2574
  await appendFile(this.filePath, `${JSON.stringify(event)}
2559
2575
  `, "utf8");
2560
2576
  } catch (error) {
@@ -3057,6 +3073,7 @@ var SEVERITY_RANK = {
3057
3073
  high: 3,
3058
3074
  critical: 4
3059
3075
  };
3076
+ var MAX_COMBINED_FINDINGS = 200;
3060
3077
  function aggregateReports(reports, options = {}) {
3061
3078
  const threshold = options.similarityThreshold ?? 0.7;
3062
3079
  const findingGroups = [];
@@ -3075,6 +3092,10 @@ function aggregateReports(reports, options = {}) {
3075
3092
  const agreements = findingGroups.filter(
3076
3093
  (group) => group.sources.length > 1 && group.severity !== void 0 && new Set(Object.values(group.severityBySource ?? {})).size === 1
3077
3094
  );
3095
+ const maxFindings = options.maxFindings ?? MAX_COMBINED_FINDINGS;
3096
+ const orderedFindings = findingGroups.sort((a, b) => rank(b) - rank(a));
3097
+ const retainedFindings = orderedFindings.slice(0, maxFindings);
3098
+ const droppedFindings = orderedFindings.length - retainedFindings.length;
3078
3099
  const disputed = conflicts.length;
3079
3100
  const summary = `${reports.length} report(s) from ${sources.length > 0 ? sources.join(", ") : "no agents"}: ${findingGroups.length} unique finding group(s) (${totalRawFindings} raw), ${agreements.length} agreement(s), ${disputed} conflict(s), ${recommendationGroups.length} recommendation group(s).`;
3080
3101
  return {
@@ -3084,7 +3105,7 @@ function aggregateReports(reports, options = {}) {
3084
3105
  ...options.pipelineRunId !== void 0 ? { pipelineRunId: options.pipelineRunId } : {},
3085
3106
  taskIds: options.taskIds ?? [],
3086
3107
  summary,
3087
- findings: findingGroups.sort((a, b) => rank(b) - rank(a)),
3108
+ findings: retainedFindings,
3088
3109
  agreements,
3089
3110
  conflicts,
3090
3111
  recommendations: recommendationGroups,
@@ -3097,7 +3118,8 @@ function aggregateReports(reports, options = {}) {
3097
3118
  rawFindings: totalRawFindings,
3098
3119
  findingGroups: findingGroups.length,
3099
3120
  agreements: agreements.length,
3100
- conflicts: conflicts.length
3121
+ conflicts: conflicts.length,
3122
+ findingsTruncated: droppedFindings
3101
3123
  }
3102
3124
  };
3103
3125
  }
@@ -3530,6 +3552,13 @@ function describe(error) {
3530
3552
  }
3531
3553
 
3532
3554
  // src/pipelines/engine.ts
3555
+ var DEFAULT_MAX_PARALLEL_STEPS = 8;
3556
+ var MAX_COMBINED_CONTEXT_CHARS = 2e4;
3557
+ function budgetContext(context, maxChars = MAX_COMBINED_CONTEXT_CHARS) {
3558
+ if (context.length <= maxChars) return context;
3559
+ const marker = "\n[earlier context trimmed]\n";
3560
+ return marker + context.slice(context.length - (maxChars - marker.length));
3561
+ }
3533
3562
  var PipelineEngine = class {
3534
3563
  constructor(options) {
3535
3564
  this.options = options;
@@ -3725,24 +3754,35 @@ var PipelineEngine = class {
3725
3754
  if (ready.length === 0) {
3726
3755
  throw new PipelineError("PIPELINE_FAILED", `Pipeline "${def.id}" scheduling stalled.`);
3727
3756
  }
3728
- const settled = await Promise.all(
3729
- ready.map(async (step) => {
3730
- if (!this.shouldRun(step, deps.get(step.id) ?? [], outcomes)) {
3731
- return { status: "skipped", summary: "", taskIds: [], reports: [] };
3732
- }
3733
- const ctx = {
3734
- objective,
3735
- ...role ? { role } : {},
3736
- combinedContext: contextParts.join("\n\n"),
3737
- reports: [...allReports],
3738
- pipelineRunId: run.id,
3739
- runId: run.id,
3740
- pipelineDefId: def.id,
3741
- taskId: run.id
3742
- };
3743
- return this.executeStep(step, ctx);
3744
- })
3745
- );
3757
+ const settled = [];
3758
+ const limit = Math.max(1, this.options.maxParallelSteps ?? DEFAULT_MAX_PARALLEL_STEPS);
3759
+ for (let offset = 0; offset < ready.length; offset += limit) {
3760
+ const batch = ready.slice(offset, offset + limit);
3761
+ settled.push(
3762
+ ...await Promise.all(
3763
+ batch.map(async (step) => {
3764
+ if (!this.shouldRun(step, deps.get(step.id) ?? [], outcomes)) {
3765
+ return { status: "skipped", summary: "", taskIds: [], reports: [] };
3766
+ }
3767
+ const ctx = {
3768
+ maxContextChars: this.options.maxContextChars,
3769
+ objective,
3770
+ ...role ? { role } : {},
3771
+ combinedContext: budgetContext(
3772
+ contextParts.join("\n\n"),
3773
+ this.options.maxContextChars ?? MAX_COMBINED_CONTEXT_CHARS
3774
+ ),
3775
+ reports: [...allReports],
3776
+ pipelineRunId: run.id,
3777
+ runId: run.id,
3778
+ pipelineDefId: def.id,
3779
+ taskId: run.id
3780
+ };
3781
+ return this.executeStep(step, ctx);
3782
+ })
3783
+ )
3784
+ );
3785
+ }
3746
3786
  ready.forEach((step, index) => {
3747
3787
  const outcome = settled[index];
3748
3788
  outcomes.set(step.id, outcome);
@@ -3967,7 +4007,9 @@ ${contribution}`);
3967
4007
  };
3968
4008
  }
3969
4009
  async runPlan(step, ctx) {
3970
- const aggregated = ctx.reports.length > 0 ? aggregateReports(ctx.reports) : void 0;
4010
+ const aggregated = ctx.reports.length > 0 ? aggregateReports(ctx.reports, {
4011
+ ...step.constraints !== void 0 && step.constraints.length > 0 ? { maxFindings: MAX_COMBINED_FINDINGS } : {}
4012
+ }) : void 0;
3971
4013
  const request = {
3972
4014
  objective: ctx.objective,
3973
4015
  reports: ctx.reports,
@@ -4430,14 +4472,16 @@ async function migrateProjectStores(directory = `${process.cwd()}/.omninode`, op
4430
4472
  }
4431
4473
 
4432
4474
  // src/version.ts
4433
- var OMNINODE_VERSION = "2.0.0-alpha.19";
4475
+ var OMNINODE_VERSION = "2.0.0-alpha.20";
4434
4476
  export {
4435
4477
  AgentAdapterRegistry,
4436
4478
  AgentError,
4437
4479
  AgentRegistry,
4438
4480
  ConfigError,
4439
4481
  ConsoleLogSink,
4482
+ DEFAULT_AUDIT_MAX_BYTES,
4440
4483
  DEFAULT_MAX_OUTPUT_BYTES,
4484
+ DEFAULT_MAX_PARALLEL_STEPS,
4441
4485
  FileAuditLog,
4442
4486
  FilePipelineRunStore,
4443
4487
  FilePlanStore,
@@ -4447,6 +4491,8 @@ export {
4447
4491
  JsonFileStore,
4448
4492
  LocalMemoryProvider,
4449
4493
  Logger,
4494
+ MAX_COMBINED_CONTEXT_CHARS,
4495
+ MAX_COMBINED_FINDINGS,
4450
4496
  MAX_CONTEXT_CHARS,
4451
4497
  MAX_MESSAGE_BYTES,
4452
4498
  MAX_REPORT_BYTES,
@@ -4481,6 +4527,7 @@ export {
4481
4527
  aggregateReports,
4482
4528
  appConfigSchema,
4483
4529
  authHeaders,
4530
+ budgetContext,
4484
4531
  buildAgentRegistry,
4485
4532
  buildChildEnv,
4486
4533
  buildHello,