@harness-engineering/orchestrator 0.15.0 → 0.16.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/index.d.mts CHANGED
@@ -7,7 +7,7 @@ import { GraphStore } from '@harness-engineering/graph';
7
7
  import { execFile } from 'node:child_process';
8
8
  import { EventEmitter } from 'node:events';
9
9
  import { PoolStateProvider, SchedulerTimerHandle, DiscoverCandidatesOptions, DiscoverCandidatesResult } from '@harness-engineering/local-models';
10
- export { discoverCandidates } from '@harness-engineering/local-models';
10
+ export { DEFAULT_POOL_STATE_PATH, PoolState, PoolStateProvider, PoolStateStore, RankProfile, discoverCandidates, poolStateToCandidates } from '@harness-engineering/local-models';
11
11
  import { z } from 'zod';
12
12
 
13
13
  /**
@@ -2213,6 +2213,26 @@ declare function deriveSeedPaths(config: WorkflowConfig): string[];
2213
2213
  * `main-sync` already relied on).
2214
2214
  */
2215
2215
  declare function normalizeHarnessCommand(command: string[]): string[];
2216
+ /**
2217
+ * Truncate captured gate output to a bounded size for the re-dispatch prompt
2218
+ * preamble (a full typecheck/test log can be enormous). Keeps the head + tail
2219
+ * so both the first error and the summary survive.
2220
+ */
2221
+ declare function truncateGateOutput(output: string, max?: number): string;
2222
+ /**
2223
+ * local-backend-full-workflow Phase 2 (Option C): the production default verify
2224
+ * runner for the local enforced gate. It runs the project's own mechanical gate
2225
+ * (typecheck + lint + test) over `workspacePath` via `pnpm -w run <script>` for
2226
+ * whichever of `typecheck`/`lint`/`test` the workspace's package.json declares,
2227
+ * short-circuiting on the first red gate. Adopter-portable: it only runs the
2228
+ * scripts that exist, and a missing package.json / no scripts → a passing gate
2229
+ * (nothing to check). Fully self-contained; tests inject a fake via the
2230
+ * `verifyRunner` seam so this concrete detector is never exercised in unit tests.
2231
+ */
2232
+ declare function defaultLocalVerifyRunner(workspacePath: string): Promise<{
2233
+ ok: boolean;
2234
+ output: string;
2235
+ }>;
2216
2236
  /**
2217
2237
  * The central orchestrator that manages the lifecycle of coding agents.
2218
2238
  *
@@ -2271,6 +2291,30 @@ declare class Orchestrator extends EventEmitter {
2271
2291
  private overrideBackend;
2272
2292
  private renderer;
2273
2293
  private promptTemplate;
2294
+ /**
2295
+ * Backend-aware local dispatch template (Phase 1). Set from
2296
+ * `overrides.localPromptTemplate` (production: threaded by the CLI from
2297
+ * WorkflowLoader). Undefined -> resolvePromptTemplate falls back to the
2298
+ * default template (SC5).
2299
+ */
2300
+ private localPromptTemplate;
2301
+ /**
2302
+ * local-backend-full-workflow Phase 2 (Option C): the verify runner the
2303
+ * local-only enforced gate (`runLocalWorkflowGate`) invokes to run the
2304
+ * project's mechanical gate (typecheck + lint + test) over the workspace.
2305
+ * Injected in tests to force fail→pass sequences; in production it defaults
2306
+ * to `defaultLocalVerifyRunner` (a thin project-script probe). Kept as a
2307
+ * field seam — mirrors how `execFileFn` is injected — so the completion path
2308
+ * is decoupled from the concrete detector.
2309
+ */
2310
+ private verifyRunner;
2311
+ /**
2312
+ * Phase 2: the most recent gate-failure reason per issue, threaded into the
2313
+ * next dispatch's rendered prompt as a failure preamble (the re-prompt). Set
2314
+ * when a local gate blocks; consumed + cleared at the next `dispatchIssue`
2315
+ * render for that issue.
2316
+ */
2317
+ private priorGateFailureByIssue;
2274
2318
  private server?;
2275
2319
  private interval?;
2276
2320
  private heartbeatInterval?;
@@ -2420,6 +2464,17 @@ declare class Orchestrator extends EventEmitter {
2420
2464
  };
2421
2465
  /** Live-candidate-discovery seam: tests inject a fake so startup makes no HF calls. */
2422
2466
  discoverCandidates?: (opts: DiscoverCandidatesOptions) => Promise<DiscoverCandidatesResult>;
2467
+ /** Phase 1: backend-aware local dispatch template. Undefined -> fallback. */
2468
+ localPromptTemplate?: string;
2469
+ /**
2470
+ * Phase 2 (Option C) test seam: the verify runner the local enforced
2471
+ * gate invokes. Injected so tests can force fail→pass sequences without
2472
+ * spawning real typecheck/lint/test. Defaults to `defaultLocalVerifyRunner`.
2473
+ */
2474
+ verifyRunner?: (workspacePath: string) => Promise<{
2475
+ ok: boolean;
2476
+ output: string;
2477
+ }>;
2423
2478
  });
2424
2479
  /**
2425
2480
  * Phase 5: construct the OTLP/HTTP trace exporter and wire telemetry fanout.
@@ -2564,6 +2619,24 @@ declare class Orchestrator extends EventEmitter {
2564
2619
  * Fire-and-forget: failures are logged but never block the caller.
2565
2620
  */
2566
2621
  private postLifecycleComment;
2622
+ /**
2623
+ * Phase 1 (local-backend-full-workflow): pick the dispatch template for
2624
+ * the resolved backend. `pi`/`local` backends get the bash-shaped local
2625
+ * template when one was loaded; every other backend — and any local
2626
+ * backend with no local template loaded (SC5) — gets the default. Pure
2627
+ * over (backendName, config.agent.backends, localPromptTemplate,
2628
+ * promptTemplate); unit-tested by orchestrator.template-resolution.test.ts.
2629
+ *
2630
+ * NOTE: the local template file (`harness.orchestrator.local.md`) carries a
2631
+ * full YAML frontmatter block, but that frontmatter is **intentionally
2632
+ * ignored** at dispatch — only the markdown body is loaded (WorkflowLoader
2633
+ * strips the frontmatter) and rendered here as the prompt. The frontmatter
2634
+ * exists solely so the file is a valid, self-documenting scaffold that
2635
+ * `harness init` can drop in; the orchestrator's configuration is always
2636
+ * read from the loaded `WorkflowConfig`, never from this template file's
2637
+ * frontmatter.
2638
+ */
2639
+ private resolvePromptTemplate;
2567
2640
  /**
2568
2641
  * Dispatches a new agent to work on an issue.
2569
2642
  *
@@ -2574,6 +2647,37 @@ declare class Orchestrator extends EventEmitter {
2574
2647
  private processAgentEvent;
2575
2648
  private awaitRateLimitClearance;
2576
2649
  private runAgentInBackgroundTask;
2650
+ /**
2651
+ * local-backend-full-workflow Phase 2 (Option C): the normal-exit completion
2652
+ * seam, extracted so the enforced-gate loop is directly testable. Runs the
2653
+ * LOCAL-ONLY enforced gate BEFORE the exit is treated as terminal; a red gate
2654
+ * routes through the SHIPPED `emitWorkerExit('error', …)` retry branch — the
2655
+ * re-dispatch IS the re-prompt (the next render threads the failure preamble),
2656
+ * and `checkRetryBudget` exhaustion queues `needs-human`. On a green gate (or a
2657
+ * non-local backend, where the gate is a no-op `{ ok: true }`), the existing
2658
+ * Claude/AMR verdict feeders run and the run completes normally — composition,
2659
+ * not replacement.
2660
+ */
2661
+ private finalizeNormalCompletion;
2662
+ /**
2663
+ * local-backend-full-workflow Phase 2 (Option C): the LOCAL-ONLY enforced
2664
+ * gate. For a `pi`/`local` dispatch it runs the mechanical gate (verify =
2665
+ * typecheck+lint+test via the injected `verifyRunner`) and, on green, the
2666
+ * outcome-eval (Task 7) against the workspace branch; a red result returns a
2667
+ * blocking `{ ok: false, reason }`. The completion path routes that reason
2668
+ * through `emitWorkerExit('error', …)` so the shipped state-machine retry
2669
+ * branch re-dispatches (the re-prompt) rather than marking the run complete.
2670
+ *
2671
+ * NON-local backends (Claude/AMR) get an unconditional `{ ok: true }` — this
2672
+ * gate never touches their completion path (D2 scopes enforcement to the
2673
+ * local path only; the AMR verdict feeders keep their existing behavior).
2674
+ *
2675
+ * Fully guarded: any thrown error → a CONSERVATIVE block `{ ok: false,
2676
+ * reason: 'gate error: …' }`, mirroring the shipped fail-safe pattern — a
2677
+ * gate that cannot run is treated as red (re-dispatch), never as a silent
2678
+ * pass that could ship a bad build.
2679
+ */
2680
+ private runLocalWorkflowGate;
2577
2681
  /**
2578
2682
  * AMR 4c (ADR 0069): the sound single-agent quality-verdict feeder. On a normal
2579
2683
  * exit, when AMR is active, run a BASELINE-RELATIVE security scan of the lines
@@ -2602,6 +2706,37 @@ declare class Orchestrator extends EventEmitter {
2602
2706
  * evaluator's `execution_outcome` persistence is best-effort and never blocks.
2603
2707
  */
2604
2708
  private deriveAcceptanceEvalVerdict;
2709
+ /**
2710
+ * local-backend-full-workflow Phase 2 (Option C, SC4): the SHARED outcome-eval
2711
+ * core, lifted out of `deriveAcceptanceEvalVerdict` so BOTH callers reuse the
2712
+ * same `OutcomeEvaluator` engine over the introduced diff vs the spec's
2713
+ * judgment section. It does NOT gate on `adaptiveRouter !== null` or
2714
+ * `acceptanceEval.enabled` — those guards live in the AMR caller above; the
2715
+ * LOCAL gate (D2) always evaluates when a spec is present. Maps a
2716
+ * high-confidence NOT_SATISFIED to `'quality-fail'`; conservative + fully
2717
+ * guarded: no spec / no provider / empty diff / any error → `undefined`.
2718
+ */
2719
+ /**
2720
+ * local-backend-full-workflow Phase 3 (D5/SC6): resolve the AnalysisProvider
2721
+ * for the outcome-eval gate. Caller-gated: ONLY the LOCAL gate caller consults
2722
+ * `agent.routing.workflowGates`. The AMR caller ALWAYS uses local SEL
2723
+ * (`resolveComplexityProvider`) so the AMR acceptance-eval path is byte-identical
2724
+ * (SC-neutral). When `workflowGates === 'primary'` on the local caller, resolve
2725
+ * from the primary (routing.default) backend; any miss degrades to local SEL
2726
+ * (fail-open — an unreachable stronger provider must NOT wedge the local gate;
2727
+ * see the fail-open note at the runLocalWorkflowGate call site).
2728
+ */
2729
+ private resolveOutcomeEvalProvider;
2730
+ /**
2731
+ * Build an AnalysisProvider from the PRIMARY (routing.default) backend for the
2732
+ * Phase-3 `workflowGates:'primary'` seam. Reuses the shipped
2733
+ * `buildAnalysisProvider` translator but forces the router to the default
2734
+ * backend. Returns undefined (→ caller degrades to local SEL) when intelligence
2735
+ * is disabled, the factory is absent, or the default backend cannot produce a
2736
+ * provider — fully guarded, never throws.
2737
+ */
2738
+ private resolvePrimaryOutcomeEvalProvider;
2739
+ private evaluateOutcomeCore;
2605
2740
  /**
2606
2741
  * Roadmap Auto-Triage Phase 4 (SC1–SC3, SC5, SC7): the post-diff routing
2607
2742
  * retrospective — a SIBLING quality-verdict source to the 4c feeder above,
@@ -2947,6 +3082,12 @@ interface TriageWiringDeps {
2947
3082
  fast?: string;
2948
3083
  standard?: string;
2949
3084
  };
3085
+ /**
3086
+ * Signals that a model is available but its levers were DEFERRED for this run (cheap-first).
3087
+ * Threaded to the probe so a deferred (not missing) provider is worded accurately. See
3088
+ * `ProbeDeps.modelDeferred`.
3089
+ */
3090
+ modelDeferred?: boolean;
2950
3091
  }
2951
3092
  /**
2952
3093
  * Run the scoping probe over a single `Issue`: build the input, resolve the injected SEL
@@ -2963,7 +3104,13 @@ interface SelForkGeneratorOptions {
2963
3104
  samples?: number;
2964
3105
  /** Optional model override threaded to the provider. */
2965
3106
  model?: string;
2966
- /** Max tokens per sample (default 512). */
3107
+ /**
3108
+ * Max tokens per sample (default 4096). Sized for reasoning models (Qwen3 et al.): they emit
3109
+ * a `<think>` trace before the JSON fork step, so a tight cap truncates mid-reasoning →
3110
+ * `finish_reason: length` → a thrown provider error → the runner halts the fork as `error`.
3111
+ * `maxTokens` is a ceiling (a non-thinking model still stops early), so the headroom is free
3112
+ * on the fast path and only spent when reasoning occurs.
3113
+ */
2967
3114
  maxTokens?: number;
2968
3115
  }
2969
3116
  /**
@@ -3752,6 +3899,7 @@ declare const RoutingConfigSchema: z.ZodObject<{
3752
3899
  model?: string | undefined;
3753
3900
  } | undefined;
3754
3901
  }>>;
3902
+ workflowGates: z.ZodOptional<z.ZodEnum<["local", "primary"]>>;
3755
3903
  }, "strict", z.ZodTypeAny, {
3756
3904
  default: string | readonly [string, ...string[]];
3757
3905
  'quick-fix'?: string | readonly [string, ...string[]] | undefined;
@@ -3786,6 +3934,7 @@ declare const RoutingConfigSchema: z.ZodObject<{
3786
3934
  model?: string | undefined;
3787
3935
  } | undefined;
3788
3936
  } | undefined;
3937
+ workflowGates?: "local" | "primary" | undefined;
3789
3938
  }, {
3790
3939
  default: string | readonly [string, ...string[]];
3791
3940
  'quick-fix'?: string | readonly [string, ...string[]] | undefined;
@@ -3820,6 +3969,7 @@ declare const RoutingConfigSchema: z.ZodObject<{
3820
3969
  model?: string | undefined;
3821
3970
  } | undefined;
3822
3971
  } | undefined;
3972
+ workflowGates?: "local" | "primary" | undefined;
3823
3973
  }>;
3824
3974
 
3825
3975
  interface ResolverLogger {
@@ -5128,4 +5278,4 @@ declare function emitProposalCreated(bus: EventEmitter, proposal: SkillProposal)
5128
5278
  declare function emitProposalApproved(bus: EventEmitter, proposal: SkillProposal): void;
5129
5279
  declare function emitProposalRejected(bus: EventEmitter, proposal: SkillProposal): void;
5130
5280
 
5131
- export { AdaptiveRouter, type AdaptiveRouterDeps, type AgentDispatchResult, type AgentDispatcher, type AgentDispatcherDeps, type AgentUpdateEvent, AnalysisArchive, type AnalysisRecord, type ApplyEventResult, type ArtifactPresence, type AttemptStats, BRAINSTORM_RUBRIC, BUILT_IN_TASKS, BackendDefSchema, type BackendResolver, BackendRouter, type BackendRouterOptions, type BaseRefFallbackEvent, type BrainstormWiringDeps, type BuildArchiveHooksOptions, type BuildWorkflowContextDeps, type CheckCommandResult, type CheckCommandRunner, type CheckFailureClassification, type CheckFailureKind, CheckScriptRunner, ClaimManager, type ClaimManagerConfig, type CleanWorkspaceEffect, type CommandExecResult, type CommandExecutor, type CreateTokenInput, type CreateTokenResult, type CustomTaskValidationError, type DispatchEffect, type EmitLogEffect, type EscalateEffect, EscalationState, type ExecFileAsyncFn, type ExecFileError, type ExecFileFn$1 as ExecFileFn, type FromConfigOptions, GateNotReadyError, type GateResult, GateRunError, type HarnessSpawn, type Highlight, type HighlightsInfo, type IndexedDoc, InteractionQueue, LinearGraphQLClient, type LinearGraphQLClientOptions, type LinearGraphQLExtension, LinearGraphQLStub, type LiveSession, LocalModelResolver, type LocalModelResolverOptions, MAINTENANCE_CHECK_MAX_BUFFER, MAINTENANCE_CHECK_TIMEOUT_MS, MAX_ATTEMPTS, MaintenanceReporter, type MaintenanceReporterOptions, type MarkSkip, type MarkSkipReason, type MigrationResult, MockBackend, type NotificationSink, type NotificationSinkDeliverInput, ORCHESTRATOR_IDENTITY_FILE, Orchestrator, OrchestratorBackendFactory, type OrchestratorBackendFactoryOptions, type OrchestratorContext, type OrchestratorEvent, type OrchestratorState, PRDetector, type PRDetectorLogger, type PRLifecycleManager, type PendingInteraction, type PersistedOutputEntry, PrivacyNoMatch, PromotionError, type PromotionResult, PromptRenderer, type ProposalApprovedData, type ProposalCreatedData, type ProposalRejectedData, type PublishedIndex, type QueueInsertInput, type QueueRow, type QueueStats, RETRY_DELAYS_MS, type RateLimitSnapshot as RateLimitComputeSnapshot, type RateLimitConfig, type RateLimitSnapshot$1 as RateLimitSnapshot, type RecordPrediction, type RegistryEntry, type ReleaseClaimEffect, type ResolverLogger, type RetryEntry, type RetryFiredEvent, RoadmapTrackerAdapter, RoutingConfigSchema, RoutingValueSchema, type RunAttemptPhase, type RunHarnessCheckOptions, type RunMode, type RunOrigin, type RunResult, type RunningEntry, type ScheduleRetryEffect, type SearchOptions, type SelForkGeneratorOptions, type SelectConstraints, type SideEffect, SinkConfigError, SinkRegistry, type SkillCatalogEntry, SlackSink, type SlackSinkOptions, SqliteSearchIndex, type StallDetectedEvent, type StopEffect, type StoredOutcomeRecord, type StreamManifest, StreamRecorder, type SummarizeContext, type SummarizeResult, type SyncMainOptions, type SyncMainResult, type SyncSkipReason, type TaskDefinition, TaskOutputStore, TaskRunner, type TaskRunnerOptions, type TaskSelectionFilter, type TaskType, type TickEvent, TokenStore, type TokenTotals, type TriageConfig, type TriageDecision, type TriageMarkConfig, type TriageMarkDeps, type TriageMarkItem, type TriageMarkResult, type TriageSignals, type TriageSkill, type TriageWiringDeps, type UpdateTokensEffect, type ValidateWorkflowConfigOptions, type ValidatedWorkflowConfig, WebhookQueue, type WiredBrainstormResult, type WorkerExitEvent, WorkflowLoader, type WorkflowRouterDep, WorkspaceHooks, WorkspaceManager, type WorkspaceManagerOptions, applyEvent, artifactPresenceFromIssue, brainstormInputFromIssue, buildArchiveHooks, buildCapabilityRegistry, buildProbeInput, buildWorkflowContext, calculateRetryDelay, canDispatch, classifyCheckExecutionFailure, computeRateLimitDelay, createAgentDispatcher, createBackend, createEmptyState, crossFieldRoutingIssues, defaultFetchModels, defaultPoolCapabilities, deriveSeedPaths, detectScopeTier, discoverSkillCatalog, discoverSkillCatalogNames, emitProposalApproved, emitProposalCreated, emitProposalRejected, enrichIssueWithSpec, estimateCost, explicitFindingsCount, extractHighlights, extractTitlePrefix, getAvailableSlots, getDefaultConfig, getPerStateCount, indexSessionDirectory, isCheckTimeoutError, isEligible, isSummaryEnabled, launchTUI, loadPublishedIndex, makeBackendResolver, makeGraphScope, makeSelForkGenerator, markApprovedForDispatch, migrateAgentConfig, normalizeFts5Query, normalizeHarnessCommand, normalizeLocalModel, openSearchIndex, precedentLookupFromStored, promote, reconcile, recoverFindingsCount, reindexFromArchive, renderAnalysisComment, renderLlmSummaryMarkdown, renderPRComment, renderSpecMarkdown, resolveEscalationConfig, resolveOrchestratorId, routeIssue, routingWarnings, runBrainstormForIssue, runGate, runHarnessCheck, savePublishedIndex, searchIndexPath, selectCandidates, selectCheapestQualifying, selectTasks, slugFor, sortCandidates, summarizeArchivedSession, syncMain, triageIssue, truncateForBudget, validateCustomTasks, validateWorkflowConfig, wireNotificationSinks, workflowFor, wrapAsEnvelope };
5281
+ export { AdaptiveRouter, type AdaptiveRouterDeps, type AgentDispatchResult, type AgentDispatcher, type AgentDispatcherDeps, type AgentUpdateEvent, AnalysisArchive, type AnalysisRecord, type ApplyEventResult, type ArtifactPresence, type AttemptStats, BRAINSTORM_RUBRIC, BUILT_IN_TASKS, BackendDefSchema, type BackendResolver, BackendRouter, type BackendRouterOptions, type BaseRefFallbackEvent, type BrainstormWiringDeps, type BuildArchiveHooksOptions, type BuildWorkflowContextDeps, type CheckCommandResult, type CheckCommandRunner, type CheckFailureClassification, type CheckFailureKind, CheckScriptRunner, ClaimManager, type ClaimManagerConfig, type CleanWorkspaceEffect, type CommandExecResult, type CommandExecutor, type CreateTokenInput, type CreateTokenResult, type CustomTaskValidationError, type DispatchEffect, type EmitLogEffect, type EscalateEffect, EscalationState, type ExecFileAsyncFn, type ExecFileError, type ExecFileFn$1 as ExecFileFn, type FromConfigOptions, GateNotReadyError, type GateResult, GateRunError, type HarnessSpawn, type Highlight, type HighlightsInfo, type IndexedDoc, InteractionQueue, LinearGraphQLClient, type LinearGraphQLClientOptions, type LinearGraphQLExtension, LinearGraphQLStub, type LiveSession, LocalModelResolver, type LocalModelResolverOptions, MAINTENANCE_CHECK_MAX_BUFFER, MAINTENANCE_CHECK_TIMEOUT_MS, MAX_ATTEMPTS, MaintenanceReporter, type MaintenanceReporterOptions, type MarkSkip, type MarkSkipReason, type MigrationResult, MockBackend, type NotificationSink, type NotificationSinkDeliverInput, ORCHESTRATOR_IDENTITY_FILE, Orchestrator, OrchestratorBackendFactory, type OrchestratorBackendFactoryOptions, type OrchestratorContext, type OrchestratorEvent, type OrchestratorState, PRDetector, type PRDetectorLogger, type PRLifecycleManager, type PendingInteraction, type PersistedOutputEntry, PrivacyNoMatch, PromotionError, type PromotionResult, PromptRenderer, type ProposalApprovedData, type ProposalCreatedData, type ProposalRejectedData, type PublishedIndex, type QueueInsertInput, type QueueRow, type QueueStats, RETRY_DELAYS_MS, type RateLimitSnapshot as RateLimitComputeSnapshot, type RateLimitConfig, type RateLimitSnapshot$1 as RateLimitSnapshot, type RecordPrediction, type RegistryEntry, type ReleaseClaimEffect, type ResolverLogger, type RetryEntry, type RetryFiredEvent, RoadmapTrackerAdapter, RoutingConfigSchema, RoutingValueSchema, type RunAttemptPhase, type RunHarnessCheckOptions, type RunMode, type RunOrigin, type RunResult, type RunningEntry, type ScheduleRetryEffect, type SearchOptions, type SelForkGeneratorOptions, type SelectConstraints, type SideEffect, SinkConfigError, SinkRegistry, type SkillCatalogEntry, SlackSink, type SlackSinkOptions, SqliteSearchIndex, type StallDetectedEvent, type StopEffect, type StoredOutcomeRecord, type StreamManifest, StreamRecorder, type SummarizeContext, type SummarizeResult, type SyncMainOptions, type SyncMainResult, type SyncSkipReason, type TaskDefinition, TaskOutputStore, TaskRunner, type TaskRunnerOptions, type TaskSelectionFilter, type TaskType, type TickEvent, TokenStore, type TokenTotals, type TriageConfig, type TriageDecision, type TriageMarkConfig, type TriageMarkDeps, type TriageMarkItem, type TriageMarkResult, type TriageSignals, type TriageSkill, type TriageWiringDeps, type UpdateTokensEffect, type ValidateWorkflowConfigOptions, type ValidatedWorkflowConfig, WebhookQueue, type WiredBrainstormResult, type WorkerExitEvent, WorkflowLoader, type WorkflowRouterDep, WorkspaceHooks, WorkspaceManager, type WorkspaceManagerOptions, applyEvent, artifactPresenceFromIssue, brainstormInputFromIssue, buildArchiveHooks, buildCapabilityRegistry, buildProbeInput, buildWorkflowContext, calculateRetryDelay, canDispatch, classifyCheckExecutionFailure, computeRateLimitDelay, createAgentDispatcher, createBackend, createEmptyState, crossFieldRoutingIssues, defaultFetchModels, defaultLocalVerifyRunner, defaultPoolCapabilities, deriveSeedPaths, detectScopeTier, discoverSkillCatalog, discoverSkillCatalogNames, emitProposalApproved, emitProposalCreated, emitProposalRejected, enrichIssueWithSpec, estimateCost, explicitFindingsCount, extractHighlights, extractTitlePrefix, getAvailableSlots, getDefaultConfig, getPerStateCount, indexSessionDirectory, isCheckTimeoutError, isEligible, isSummaryEnabled, launchTUI, loadPublishedIndex, makeBackendResolver, makeGraphScope, makeSelForkGenerator, markApprovedForDispatch, migrateAgentConfig, normalizeFts5Query, normalizeHarnessCommand, normalizeLocalModel, openSearchIndex, precedentLookupFromStored, promote, reconcile, recoverFindingsCount, reindexFromArchive, renderAnalysisComment, renderLlmSummaryMarkdown, renderPRComment, renderSpecMarkdown, resolveEscalationConfig, resolveOrchestratorId, routeIssue, routingWarnings, runBrainstormForIssue, runGate, runHarnessCheck, savePublishedIndex, searchIndexPath, selectCandidates, selectCheapestQualifying, selectTasks, slugFor, sortCandidates, summarizeArchivedSession, syncMain, triageIssue, truncateForBudget, truncateGateOutput, validateCustomTasks, validateWorkflowConfig, wireNotificationSinks, workflowFor, wrapAsEnvelope };
package/dist/index.d.ts CHANGED
@@ -7,7 +7,7 @@ import { GraphStore } from '@harness-engineering/graph';
7
7
  import { execFile } from 'node:child_process';
8
8
  import { EventEmitter } from 'node:events';
9
9
  import { PoolStateProvider, SchedulerTimerHandle, DiscoverCandidatesOptions, DiscoverCandidatesResult } from '@harness-engineering/local-models';
10
- export { discoverCandidates } from '@harness-engineering/local-models';
10
+ export { DEFAULT_POOL_STATE_PATH, PoolState, PoolStateProvider, PoolStateStore, RankProfile, discoverCandidates, poolStateToCandidates } from '@harness-engineering/local-models';
11
11
  import { z } from 'zod';
12
12
 
13
13
  /**
@@ -2213,6 +2213,26 @@ declare function deriveSeedPaths(config: WorkflowConfig): string[];
2213
2213
  * `main-sync` already relied on).
2214
2214
  */
2215
2215
  declare function normalizeHarnessCommand(command: string[]): string[];
2216
+ /**
2217
+ * Truncate captured gate output to a bounded size for the re-dispatch prompt
2218
+ * preamble (a full typecheck/test log can be enormous). Keeps the head + tail
2219
+ * so both the first error and the summary survive.
2220
+ */
2221
+ declare function truncateGateOutput(output: string, max?: number): string;
2222
+ /**
2223
+ * local-backend-full-workflow Phase 2 (Option C): the production default verify
2224
+ * runner for the local enforced gate. It runs the project's own mechanical gate
2225
+ * (typecheck + lint + test) over `workspacePath` via `pnpm -w run <script>` for
2226
+ * whichever of `typecheck`/`lint`/`test` the workspace's package.json declares,
2227
+ * short-circuiting on the first red gate. Adopter-portable: it only runs the
2228
+ * scripts that exist, and a missing package.json / no scripts → a passing gate
2229
+ * (nothing to check). Fully self-contained; tests inject a fake via the
2230
+ * `verifyRunner` seam so this concrete detector is never exercised in unit tests.
2231
+ */
2232
+ declare function defaultLocalVerifyRunner(workspacePath: string): Promise<{
2233
+ ok: boolean;
2234
+ output: string;
2235
+ }>;
2216
2236
  /**
2217
2237
  * The central orchestrator that manages the lifecycle of coding agents.
2218
2238
  *
@@ -2271,6 +2291,30 @@ declare class Orchestrator extends EventEmitter {
2271
2291
  private overrideBackend;
2272
2292
  private renderer;
2273
2293
  private promptTemplate;
2294
+ /**
2295
+ * Backend-aware local dispatch template (Phase 1). Set from
2296
+ * `overrides.localPromptTemplate` (production: threaded by the CLI from
2297
+ * WorkflowLoader). Undefined -> resolvePromptTemplate falls back to the
2298
+ * default template (SC5).
2299
+ */
2300
+ private localPromptTemplate;
2301
+ /**
2302
+ * local-backend-full-workflow Phase 2 (Option C): the verify runner the
2303
+ * local-only enforced gate (`runLocalWorkflowGate`) invokes to run the
2304
+ * project's mechanical gate (typecheck + lint + test) over the workspace.
2305
+ * Injected in tests to force fail→pass sequences; in production it defaults
2306
+ * to `defaultLocalVerifyRunner` (a thin project-script probe). Kept as a
2307
+ * field seam — mirrors how `execFileFn` is injected — so the completion path
2308
+ * is decoupled from the concrete detector.
2309
+ */
2310
+ private verifyRunner;
2311
+ /**
2312
+ * Phase 2: the most recent gate-failure reason per issue, threaded into the
2313
+ * next dispatch's rendered prompt as a failure preamble (the re-prompt). Set
2314
+ * when a local gate blocks; consumed + cleared at the next `dispatchIssue`
2315
+ * render for that issue.
2316
+ */
2317
+ private priorGateFailureByIssue;
2274
2318
  private server?;
2275
2319
  private interval?;
2276
2320
  private heartbeatInterval?;
@@ -2420,6 +2464,17 @@ declare class Orchestrator extends EventEmitter {
2420
2464
  };
2421
2465
  /** Live-candidate-discovery seam: tests inject a fake so startup makes no HF calls. */
2422
2466
  discoverCandidates?: (opts: DiscoverCandidatesOptions) => Promise<DiscoverCandidatesResult>;
2467
+ /** Phase 1: backend-aware local dispatch template. Undefined -> fallback. */
2468
+ localPromptTemplate?: string;
2469
+ /**
2470
+ * Phase 2 (Option C) test seam: the verify runner the local enforced
2471
+ * gate invokes. Injected so tests can force fail→pass sequences without
2472
+ * spawning real typecheck/lint/test. Defaults to `defaultLocalVerifyRunner`.
2473
+ */
2474
+ verifyRunner?: (workspacePath: string) => Promise<{
2475
+ ok: boolean;
2476
+ output: string;
2477
+ }>;
2423
2478
  });
2424
2479
  /**
2425
2480
  * Phase 5: construct the OTLP/HTTP trace exporter and wire telemetry fanout.
@@ -2564,6 +2619,24 @@ declare class Orchestrator extends EventEmitter {
2564
2619
  * Fire-and-forget: failures are logged but never block the caller.
2565
2620
  */
2566
2621
  private postLifecycleComment;
2622
+ /**
2623
+ * Phase 1 (local-backend-full-workflow): pick the dispatch template for
2624
+ * the resolved backend. `pi`/`local` backends get the bash-shaped local
2625
+ * template when one was loaded; every other backend — and any local
2626
+ * backend with no local template loaded (SC5) — gets the default. Pure
2627
+ * over (backendName, config.agent.backends, localPromptTemplate,
2628
+ * promptTemplate); unit-tested by orchestrator.template-resolution.test.ts.
2629
+ *
2630
+ * NOTE: the local template file (`harness.orchestrator.local.md`) carries a
2631
+ * full YAML frontmatter block, but that frontmatter is **intentionally
2632
+ * ignored** at dispatch — only the markdown body is loaded (WorkflowLoader
2633
+ * strips the frontmatter) and rendered here as the prompt. The frontmatter
2634
+ * exists solely so the file is a valid, self-documenting scaffold that
2635
+ * `harness init` can drop in; the orchestrator's configuration is always
2636
+ * read from the loaded `WorkflowConfig`, never from this template file's
2637
+ * frontmatter.
2638
+ */
2639
+ private resolvePromptTemplate;
2567
2640
  /**
2568
2641
  * Dispatches a new agent to work on an issue.
2569
2642
  *
@@ -2574,6 +2647,37 @@ declare class Orchestrator extends EventEmitter {
2574
2647
  private processAgentEvent;
2575
2648
  private awaitRateLimitClearance;
2576
2649
  private runAgentInBackgroundTask;
2650
+ /**
2651
+ * local-backend-full-workflow Phase 2 (Option C): the normal-exit completion
2652
+ * seam, extracted so the enforced-gate loop is directly testable. Runs the
2653
+ * LOCAL-ONLY enforced gate BEFORE the exit is treated as terminal; a red gate
2654
+ * routes through the SHIPPED `emitWorkerExit('error', …)` retry branch — the
2655
+ * re-dispatch IS the re-prompt (the next render threads the failure preamble),
2656
+ * and `checkRetryBudget` exhaustion queues `needs-human`. On a green gate (or a
2657
+ * non-local backend, where the gate is a no-op `{ ok: true }`), the existing
2658
+ * Claude/AMR verdict feeders run and the run completes normally — composition,
2659
+ * not replacement.
2660
+ */
2661
+ private finalizeNormalCompletion;
2662
+ /**
2663
+ * local-backend-full-workflow Phase 2 (Option C): the LOCAL-ONLY enforced
2664
+ * gate. For a `pi`/`local` dispatch it runs the mechanical gate (verify =
2665
+ * typecheck+lint+test via the injected `verifyRunner`) and, on green, the
2666
+ * outcome-eval (Task 7) against the workspace branch; a red result returns a
2667
+ * blocking `{ ok: false, reason }`. The completion path routes that reason
2668
+ * through `emitWorkerExit('error', …)` so the shipped state-machine retry
2669
+ * branch re-dispatches (the re-prompt) rather than marking the run complete.
2670
+ *
2671
+ * NON-local backends (Claude/AMR) get an unconditional `{ ok: true }` — this
2672
+ * gate never touches their completion path (D2 scopes enforcement to the
2673
+ * local path only; the AMR verdict feeders keep their existing behavior).
2674
+ *
2675
+ * Fully guarded: any thrown error → a CONSERVATIVE block `{ ok: false,
2676
+ * reason: 'gate error: …' }`, mirroring the shipped fail-safe pattern — a
2677
+ * gate that cannot run is treated as red (re-dispatch), never as a silent
2678
+ * pass that could ship a bad build.
2679
+ */
2680
+ private runLocalWorkflowGate;
2577
2681
  /**
2578
2682
  * AMR 4c (ADR 0069): the sound single-agent quality-verdict feeder. On a normal
2579
2683
  * exit, when AMR is active, run a BASELINE-RELATIVE security scan of the lines
@@ -2602,6 +2706,37 @@ declare class Orchestrator extends EventEmitter {
2602
2706
  * evaluator's `execution_outcome` persistence is best-effort and never blocks.
2603
2707
  */
2604
2708
  private deriveAcceptanceEvalVerdict;
2709
+ /**
2710
+ * local-backend-full-workflow Phase 2 (Option C, SC4): the SHARED outcome-eval
2711
+ * core, lifted out of `deriveAcceptanceEvalVerdict` so BOTH callers reuse the
2712
+ * same `OutcomeEvaluator` engine over the introduced diff vs the spec's
2713
+ * judgment section. It does NOT gate on `adaptiveRouter !== null` or
2714
+ * `acceptanceEval.enabled` — those guards live in the AMR caller above; the
2715
+ * LOCAL gate (D2) always evaluates when a spec is present. Maps a
2716
+ * high-confidence NOT_SATISFIED to `'quality-fail'`; conservative + fully
2717
+ * guarded: no spec / no provider / empty diff / any error → `undefined`.
2718
+ */
2719
+ /**
2720
+ * local-backend-full-workflow Phase 3 (D5/SC6): resolve the AnalysisProvider
2721
+ * for the outcome-eval gate. Caller-gated: ONLY the LOCAL gate caller consults
2722
+ * `agent.routing.workflowGates`. The AMR caller ALWAYS uses local SEL
2723
+ * (`resolveComplexityProvider`) so the AMR acceptance-eval path is byte-identical
2724
+ * (SC-neutral). When `workflowGates === 'primary'` on the local caller, resolve
2725
+ * from the primary (routing.default) backend; any miss degrades to local SEL
2726
+ * (fail-open — an unreachable stronger provider must NOT wedge the local gate;
2727
+ * see the fail-open note at the runLocalWorkflowGate call site).
2728
+ */
2729
+ private resolveOutcomeEvalProvider;
2730
+ /**
2731
+ * Build an AnalysisProvider from the PRIMARY (routing.default) backend for the
2732
+ * Phase-3 `workflowGates:'primary'` seam. Reuses the shipped
2733
+ * `buildAnalysisProvider` translator but forces the router to the default
2734
+ * backend. Returns undefined (→ caller degrades to local SEL) when intelligence
2735
+ * is disabled, the factory is absent, or the default backend cannot produce a
2736
+ * provider — fully guarded, never throws.
2737
+ */
2738
+ private resolvePrimaryOutcomeEvalProvider;
2739
+ private evaluateOutcomeCore;
2605
2740
  /**
2606
2741
  * Roadmap Auto-Triage Phase 4 (SC1–SC3, SC5, SC7): the post-diff routing
2607
2742
  * retrospective — a SIBLING quality-verdict source to the 4c feeder above,
@@ -2947,6 +3082,12 @@ interface TriageWiringDeps {
2947
3082
  fast?: string;
2948
3083
  standard?: string;
2949
3084
  };
3085
+ /**
3086
+ * Signals that a model is available but its levers were DEFERRED for this run (cheap-first).
3087
+ * Threaded to the probe so a deferred (not missing) provider is worded accurately. See
3088
+ * `ProbeDeps.modelDeferred`.
3089
+ */
3090
+ modelDeferred?: boolean;
2950
3091
  }
2951
3092
  /**
2952
3093
  * Run the scoping probe over a single `Issue`: build the input, resolve the injected SEL
@@ -2963,7 +3104,13 @@ interface SelForkGeneratorOptions {
2963
3104
  samples?: number;
2964
3105
  /** Optional model override threaded to the provider. */
2965
3106
  model?: string;
2966
- /** Max tokens per sample (default 512). */
3107
+ /**
3108
+ * Max tokens per sample (default 4096). Sized for reasoning models (Qwen3 et al.): they emit
3109
+ * a `<think>` trace before the JSON fork step, so a tight cap truncates mid-reasoning →
3110
+ * `finish_reason: length` → a thrown provider error → the runner halts the fork as `error`.
3111
+ * `maxTokens` is a ceiling (a non-thinking model still stops early), so the headroom is free
3112
+ * on the fast path and only spent when reasoning occurs.
3113
+ */
2967
3114
  maxTokens?: number;
2968
3115
  }
2969
3116
  /**
@@ -3752,6 +3899,7 @@ declare const RoutingConfigSchema: z.ZodObject<{
3752
3899
  model?: string | undefined;
3753
3900
  } | undefined;
3754
3901
  }>>;
3902
+ workflowGates: z.ZodOptional<z.ZodEnum<["local", "primary"]>>;
3755
3903
  }, "strict", z.ZodTypeAny, {
3756
3904
  default: string | readonly [string, ...string[]];
3757
3905
  'quick-fix'?: string | readonly [string, ...string[]] | undefined;
@@ -3786,6 +3934,7 @@ declare const RoutingConfigSchema: z.ZodObject<{
3786
3934
  model?: string | undefined;
3787
3935
  } | undefined;
3788
3936
  } | undefined;
3937
+ workflowGates?: "local" | "primary" | undefined;
3789
3938
  }, {
3790
3939
  default: string | readonly [string, ...string[]];
3791
3940
  'quick-fix'?: string | readonly [string, ...string[]] | undefined;
@@ -3820,6 +3969,7 @@ declare const RoutingConfigSchema: z.ZodObject<{
3820
3969
  model?: string | undefined;
3821
3970
  } | undefined;
3822
3971
  } | undefined;
3972
+ workflowGates?: "local" | "primary" | undefined;
3823
3973
  }>;
3824
3974
 
3825
3975
  interface ResolverLogger {
@@ -5128,4 +5278,4 @@ declare function emitProposalCreated(bus: EventEmitter, proposal: SkillProposal)
5128
5278
  declare function emitProposalApproved(bus: EventEmitter, proposal: SkillProposal): void;
5129
5279
  declare function emitProposalRejected(bus: EventEmitter, proposal: SkillProposal): void;
5130
5280
 
5131
- export { AdaptiveRouter, type AdaptiveRouterDeps, type AgentDispatchResult, type AgentDispatcher, type AgentDispatcherDeps, type AgentUpdateEvent, AnalysisArchive, type AnalysisRecord, type ApplyEventResult, type ArtifactPresence, type AttemptStats, BRAINSTORM_RUBRIC, BUILT_IN_TASKS, BackendDefSchema, type BackendResolver, BackendRouter, type BackendRouterOptions, type BaseRefFallbackEvent, type BrainstormWiringDeps, type BuildArchiveHooksOptions, type BuildWorkflowContextDeps, type CheckCommandResult, type CheckCommandRunner, type CheckFailureClassification, type CheckFailureKind, CheckScriptRunner, ClaimManager, type ClaimManagerConfig, type CleanWorkspaceEffect, type CommandExecResult, type CommandExecutor, type CreateTokenInput, type CreateTokenResult, type CustomTaskValidationError, type DispatchEffect, type EmitLogEffect, type EscalateEffect, EscalationState, type ExecFileAsyncFn, type ExecFileError, type ExecFileFn$1 as ExecFileFn, type FromConfigOptions, GateNotReadyError, type GateResult, GateRunError, type HarnessSpawn, type Highlight, type HighlightsInfo, type IndexedDoc, InteractionQueue, LinearGraphQLClient, type LinearGraphQLClientOptions, type LinearGraphQLExtension, LinearGraphQLStub, type LiveSession, LocalModelResolver, type LocalModelResolverOptions, MAINTENANCE_CHECK_MAX_BUFFER, MAINTENANCE_CHECK_TIMEOUT_MS, MAX_ATTEMPTS, MaintenanceReporter, type MaintenanceReporterOptions, type MarkSkip, type MarkSkipReason, type MigrationResult, MockBackend, type NotificationSink, type NotificationSinkDeliverInput, ORCHESTRATOR_IDENTITY_FILE, Orchestrator, OrchestratorBackendFactory, type OrchestratorBackendFactoryOptions, type OrchestratorContext, type OrchestratorEvent, type OrchestratorState, PRDetector, type PRDetectorLogger, type PRLifecycleManager, type PendingInteraction, type PersistedOutputEntry, PrivacyNoMatch, PromotionError, type PromotionResult, PromptRenderer, type ProposalApprovedData, type ProposalCreatedData, type ProposalRejectedData, type PublishedIndex, type QueueInsertInput, type QueueRow, type QueueStats, RETRY_DELAYS_MS, type RateLimitSnapshot as RateLimitComputeSnapshot, type RateLimitConfig, type RateLimitSnapshot$1 as RateLimitSnapshot, type RecordPrediction, type RegistryEntry, type ReleaseClaimEffect, type ResolverLogger, type RetryEntry, type RetryFiredEvent, RoadmapTrackerAdapter, RoutingConfigSchema, RoutingValueSchema, type RunAttemptPhase, type RunHarnessCheckOptions, type RunMode, type RunOrigin, type RunResult, type RunningEntry, type ScheduleRetryEffect, type SearchOptions, type SelForkGeneratorOptions, type SelectConstraints, type SideEffect, SinkConfigError, SinkRegistry, type SkillCatalogEntry, SlackSink, type SlackSinkOptions, SqliteSearchIndex, type StallDetectedEvent, type StopEffect, type StoredOutcomeRecord, type StreamManifest, StreamRecorder, type SummarizeContext, type SummarizeResult, type SyncMainOptions, type SyncMainResult, type SyncSkipReason, type TaskDefinition, TaskOutputStore, TaskRunner, type TaskRunnerOptions, type TaskSelectionFilter, type TaskType, type TickEvent, TokenStore, type TokenTotals, type TriageConfig, type TriageDecision, type TriageMarkConfig, type TriageMarkDeps, type TriageMarkItem, type TriageMarkResult, type TriageSignals, type TriageSkill, type TriageWiringDeps, type UpdateTokensEffect, type ValidateWorkflowConfigOptions, type ValidatedWorkflowConfig, WebhookQueue, type WiredBrainstormResult, type WorkerExitEvent, WorkflowLoader, type WorkflowRouterDep, WorkspaceHooks, WorkspaceManager, type WorkspaceManagerOptions, applyEvent, artifactPresenceFromIssue, brainstormInputFromIssue, buildArchiveHooks, buildCapabilityRegistry, buildProbeInput, buildWorkflowContext, calculateRetryDelay, canDispatch, classifyCheckExecutionFailure, computeRateLimitDelay, createAgentDispatcher, createBackend, createEmptyState, crossFieldRoutingIssues, defaultFetchModels, defaultPoolCapabilities, deriveSeedPaths, detectScopeTier, discoverSkillCatalog, discoverSkillCatalogNames, emitProposalApproved, emitProposalCreated, emitProposalRejected, enrichIssueWithSpec, estimateCost, explicitFindingsCount, extractHighlights, extractTitlePrefix, getAvailableSlots, getDefaultConfig, getPerStateCount, indexSessionDirectory, isCheckTimeoutError, isEligible, isSummaryEnabled, launchTUI, loadPublishedIndex, makeBackendResolver, makeGraphScope, makeSelForkGenerator, markApprovedForDispatch, migrateAgentConfig, normalizeFts5Query, normalizeHarnessCommand, normalizeLocalModel, openSearchIndex, precedentLookupFromStored, promote, reconcile, recoverFindingsCount, reindexFromArchive, renderAnalysisComment, renderLlmSummaryMarkdown, renderPRComment, renderSpecMarkdown, resolveEscalationConfig, resolveOrchestratorId, routeIssue, routingWarnings, runBrainstormForIssue, runGate, runHarnessCheck, savePublishedIndex, searchIndexPath, selectCandidates, selectCheapestQualifying, selectTasks, slugFor, sortCandidates, summarizeArchivedSession, syncMain, triageIssue, truncateForBudget, validateCustomTasks, validateWorkflowConfig, wireNotificationSinks, workflowFor, wrapAsEnvelope };
5281
+ export { AdaptiveRouter, type AdaptiveRouterDeps, type AgentDispatchResult, type AgentDispatcher, type AgentDispatcherDeps, type AgentUpdateEvent, AnalysisArchive, type AnalysisRecord, type ApplyEventResult, type ArtifactPresence, type AttemptStats, BRAINSTORM_RUBRIC, BUILT_IN_TASKS, BackendDefSchema, type BackendResolver, BackendRouter, type BackendRouterOptions, type BaseRefFallbackEvent, type BrainstormWiringDeps, type BuildArchiveHooksOptions, type BuildWorkflowContextDeps, type CheckCommandResult, type CheckCommandRunner, type CheckFailureClassification, type CheckFailureKind, CheckScriptRunner, ClaimManager, type ClaimManagerConfig, type CleanWorkspaceEffect, type CommandExecResult, type CommandExecutor, type CreateTokenInput, type CreateTokenResult, type CustomTaskValidationError, type DispatchEffect, type EmitLogEffect, type EscalateEffect, EscalationState, type ExecFileAsyncFn, type ExecFileError, type ExecFileFn$1 as ExecFileFn, type FromConfigOptions, GateNotReadyError, type GateResult, GateRunError, type HarnessSpawn, type Highlight, type HighlightsInfo, type IndexedDoc, InteractionQueue, LinearGraphQLClient, type LinearGraphQLClientOptions, type LinearGraphQLExtension, LinearGraphQLStub, type LiveSession, LocalModelResolver, type LocalModelResolverOptions, MAINTENANCE_CHECK_MAX_BUFFER, MAINTENANCE_CHECK_TIMEOUT_MS, MAX_ATTEMPTS, MaintenanceReporter, type MaintenanceReporterOptions, type MarkSkip, type MarkSkipReason, type MigrationResult, MockBackend, type NotificationSink, type NotificationSinkDeliverInput, ORCHESTRATOR_IDENTITY_FILE, Orchestrator, OrchestratorBackendFactory, type OrchestratorBackendFactoryOptions, type OrchestratorContext, type OrchestratorEvent, type OrchestratorState, PRDetector, type PRDetectorLogger, type PRLifecycleManager, type PendingInteraction, type PersistedOutputEntry, PrivacyNoMatch, PromotionError, type PromotionResult, PromptRenderer, type ProposalApprovedData, type ProposalCreatedData, type ProposalRejectedData, type PublishedIndex, type QueueInsertInput, type QueueRow, type QueueStats, RETRY_DELAYS_MS, type RateLimitSnapshot as RateLimitComputeSnapshot, type RateLimitConfig, type RateLimitSnapshot$1 as RateLimitSnapshot, type RecordPrediction, type RegistryEntry, type ReleaseClaimEffect, type ResolverLogger, type RetryEntry, type RetryFiredEvent, RoadmapTrackerAdapter, RoutingConfigSchema, RoutingValueSchema, type RunAttemptPhase, type RunHarnessCheckOptions, type RunMode, type RunOrigin, type RunResult, type RunningEntry, type ScheduleRetryEffect, type SearchOptions, type SelForkGeneratorOptions, type SelectConstraints, type SideEffect, SinkConfigError, SinkRegistry, type SkillCatalogEntry, SlackSink, type SlackSinkOptions, SqliteSearchIndex, type StallDetectedEvent, type StopEffect, type StoredOutcomeRecord, type StreamManifest, StreamRecorder, type SummarizeContext, type SummarizeResult, type SyncMainOptions, type SyncMainResult, type SyncSkipReason, type TaskDefinition, TaskOutputStore, TaskRunner, type TaskRunnerOptions, type TaskSelectionFilter, type TaskType, type TickEvent, TokenStore, type TokenTotals, type TriageConfig, type TriageDecision, type TriageMarkConfig, type TriageMarkDeps, type TriageMarkItem, type TriageMarkResult, type TriageSignals, type TriageSkill, type TriageWiringDeps, type UpdateTokensEffect, type ValidateWorkflowConfigOptions, type ValidatedWorkflowConfig, WebhookQueue, type WiredBrainstormResult, type WorkerExitEvent, WorkflowLoader, type WorkflowRouterDep, WorkspaceHooks, WorkspaceManager, type WorkspaceManagerOptions, applyEvent, artifactPresenceFromIssue, brainstormInputFromIssue, buildArchiveHooks, buildCapabilityRegistry, buildProbeInput, buildWorkflowContext, calculateRetryDelay, canDispatch, classifyCheckExecutionFailure, computeRateLimitDelay, createAgentDispatcher, createBackend, createEmptyState, crossFieldRoutingIssues, defaultFetchModels, defaultLocalVerifyRunner, defaultPoolCapabilities, deriveSeedPaths, detectScopeTier, discoverSkillCatalog, discoverSkillCatalogNames, emitProposalApproved, emitProposalCreated, emitProposalRejected, enrichIssueWithSpec, estimateCost, explicitFindingsCount, extractHighlights, extractTitlePrefix, getAvailableSlots, getDefaultConfig, getPerStateCount, indexSessionDirectory, isCheckTimeoutError, isEligible, isSummaryEnabled, launchTUI, loadPublishedIndex, makeBackendResolver, makeGraphScope, makeSelForkGenerator, markApprovedForDispatch, migrateAgentConfig, normalizeFts5Query, normalizeHarnessCommand, normalizeLocalModel, openSearchIndex, precedentLookupFromStored, promote, reconcile, recoverFindingsCount, reindexFromArchive, renderAnalysisComment, renderLlmSummaryMarkdown, renderPRComment, renderSpecMarkdown, resolveEscalationConfig, resolveOrchestratorId, routeIssue, routingWarnings, runBrainstormForIssue, runGate, runHarnessCheck, savePublishedIndex, searchIndexPath, selectCandidates, selectCheapestQualifying, selectTasks, slugFor, sortCandidates, summarizeArchivedSession, syncMain, triageIssue, truncateForBudget, truncateGateOutput, validateCustomTasks, validateWorkflowConfig, wireNotificationSinks, workflowFor, wrapAsEnvelope };