@kodax-ai/kodax 0.7.42 → 0.7.44

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 (56) hide show
  1. package/CHANGELOG.md +65 -6
  2. package/README.md +87 -56
  3. package/README_CN.md +46 -25
  4. package/dist/chunks/chunk-35BDEEC5.js +2 -0
  5. package/dist/chunks/chunk-4YPL2UVZ.js +848 -0
  6. package/dist/chunks/chunk-DI2G3YWL.js +31 -0
  7. package/dist/chunks/chunk-HHQ7YTGM.js +425 -0
  8. package/dist/chunks/chunk-QHILHQBB.js +519 -0
  9. package/dist/chunks/{chunk-IYJ5EPRV.js → chunk-RUDYNAK7.js} +1 -1
  10. package/dist/chunks/compaction-config-NAPRF7XR.js +2 -0
  11. package/dist/chunks/{construction-bootstrap-J2WOCYEK.js → construction-bootstrap-PHTGBRNU.js} +4 -4
  12. package/dist/chunks/dist-CCYBJJZY.js +2 -0
  13. package/dist/chunks/dist-RHIHZAYX.js +2 -0
  14. package/dist/chunks/utils-TV3UYCHQ.js +2 -0
  15. package/dist/index.d.ts +11 -11
  16. package/dist/index.js +2 -2
  17. package/dist/kodax_cli.js +1159 -1102
  18. package/dist/provider-capabilities.json +167 -0
  19. package/dist/sdk-agent.d.ts +905 -48
  20. package/dist/sdk-agent.js +1 -1
  21. package/dist/sdk-coding.d.ts +995 -755
  22. package/dist/sdk-coding.js +1 -1
  23. package/dist/sdk-llm.d.ts +5 -3
  24. package/dist/sdk-llm.js +1 -1
  25. package/dist/sdk-mcp.d.ts +1 -1
  26. package/dist/sdk-mcp.js +1 -1
  27. package/dist/sdk-repl.d.ts +10 -9
  28. package/dist/sdk-repl.js +1 -1
  29. package/dist/sdk-session.d.ts +23 -11
  30. package/dist/sdk-session.js +1 -1
  31. package/dist/sdk-skills.js +1 -1
  32. package/dist/types-chunks/{cost-tracker.d-B6vMoLLF.d.ts → base.d-FUJahC0i.d.ts} +2 -110
  33. package/dist/types-chunks/{bash-prefix-extractor.d-CkhaqKkg.d.ts → bash-prefix-extractor.d-DdoSeghD.d.ts} +442 -131
  34. package/dist/types-chunks/cost-tracker.d-wRtyEW9d.d.ts +110 -0
  35. package/dist/types-chunks/file-tracker.d-DOfaoCbJ.d.ts +633 -0
  36. package/dist/types-chunks/manager.d-87belpiS.d.ts +370 -0
  37. package/dist/types-chunks/{resolver.d-DX9au4NJ.d.ts → resolver.d-B7ZnVuuf.d.ts} +157 -10
  38. package/dist/types-chunks/{session-storage.d-Cci897iM.d.ts → storage.d-DFD9ln5c.d.ts} +49 -2
  39. package/dist/types-chunks/{history-cleanup.d-DznrzEiU.d.ts → types.d-DM8zEJgF.d.ts} +1084 -282
  40. package/dist/types-chunks/{types.d-mM8vqvhT.d.ts → types.d-HBbWT-iA.d.ts} +41 -3
  41. package/dist/types-chunks/{storage.d-Bc5DoAwp.d.ts → utils.d-C5fzCE9W.d.ts} +25 -47
  42. package/package.json +7 -6
  43. package/dist/chunks/chunk-3RKBXWZS.js +0 -2
  44. package/dist/chunks/chunk-7JLYVWAF.js +0 -1033
  45. package/dist/chunks/chunk-CD3R5YBH.js +0 -16
  46. package/dist/chunks/chunk-DKXUY5F2.js +0 -209
  47. package/dist/chunks/chunk-HMYEQJGT.js +0 -31
  48. package/dist/chunks/chunk-KUX5LRPP.js +0 -2
  49. package/dist/chunks/chunk-OWSKU55I.js +0 -13
  50. package/dist/chunks/chunk-ZZ4KRK2B.js +0 -465
  51. package/dist/chunks/compaction-config-FIFFP4FT.js +0 -2
  52. package/dist/chunks/dist-2ZHWDXMQ.js +0 -2
  53. package/dist/chunks/dist-W4CJWLIH.js +0 -2
  54. package/dist/chunks/utils-A5MWDTWZ.js +0 -2
  55. package/dist/types-chunks/instance-discovery.d-BsKnIwpg.d.ts +0 -990
  56. package/dist/types-chunks/transport.d-DuyjG30t.d.ts +0 -180
@@ -1,9 +1,78 @@
1
- import { a as KodaXCompactMemorySeed, h as KodaXSessionArtifactLedgerEntry, t as KodaXSessionScope, u as KodaXSessionStorage, f as KodaXJsonValue, S as SessionErrorMetadata } from './types.d-mM8vqvhT.js';
2
- import { m as KodaXMessage, W as KodaXTokenUsage, D as KodaXReasoningMode, k as KodaXHarnessProfile, R as KodaXTaskWorkIntent, H as KodaXReviewScale, N as KodaXTaskComplexity, a as KodaXAmaFanoutClass, P as KodaXTaskRoutingDecision, Q as KodaXTaskType, I as KodaXRiskLevel, i as KodaXExecutionMode, c as KodaXAmaProfile, d as KodaXAmaTactic, b as KodaXAmaFanoutPolicy } from './types.d-B1uGoVTE.js';
3
- import { G as Guardrail, D as DiscoveredInstance, C as ChildTaskRegistry, T as TaskAbortRegistry, r as RunnerToolCall, J as ToolGuardrail } from './instance-discovery.d-BsKnIwpg.js';
4
- import { C as CapabilityKind, b as CapabilityResult } from './capability.d-3C62G8Eq.js';
1
+ import { g as KodaXGoalState, s as KodaXSessionLineage, x as KodaXSessionScope, y as KodaXSessionStorage, i as KodaXJsonValue, k as KodaXSessionArtifactLedgerEntry, S as SessionErrorMetadata } from './types.d-HBbWT-iA.js';
2
+ import { W as KodaXTokenUsage, m as KodaXMessage, D as KodaXReasoningMode, k as KodaXHarnessProfile, R as KodaXTaskWorkIntent, H as KodaXReviewScale, N as KodaXTaskComplexity, a as KodaXAmaFanoutClass, P as KodaXTaskRoutingDecision, Q as KodaXTaskType, I as KodaXRiskLevel, i as KodaXExecutionMode, c as KodaXAmaProfile, d as KodaXAmaTactic, b as KodaXAmaFanoutPolicy } from './types.d-B1uGoVTE.js';
3
+ import { f as AgentMessage, av as StopHookFn, C as ChildTaskRegistry, p as CompactionUpdate, v as Guardrail, s as DiscoveredInstance, az as TaskAbortRegistry, aa as RunnerToolCall, aE as ToolGuardrail } from './types.d-DM8zEJgF.js';
5
4
  import { M as McpConnectMode, a as McpServerConfig, b as McpServersConfig, c as McpTransportKind } from './config.d-BfJUXxC0.js';
6
- import { K as KodaXBaseProvider, a as CostTracker } from './cost-tracker.d-B6vMoLLF.js';
5
+ import { C as CapabilityKind, b as CapabilityResult } from './capability.d-3C62G8Eq.js';
6
+ import { K as KodaXBaseProvider } from './base.d-FUJahC0i.js';
7
+ import { a as CostTracker } from './cost-tracker.d-wRtyEW9d.js';
8
+
9
+ /**
10
+ * FEATURE_192 v0.7.44 Phase C — Goal-tools execution context.
11
+ *
12
+ * The 3 goal tools (`get_goal`, `create_goal`, `update_goal`) read +
13
+ * mutate persistent goal state. The coding layer does NOT own that
14
+ * state — it lives in the REPL-side session lineage. Tools call into
15
+ * this interface, which the runner-driven adapter wires at task start.
16
+ *
17
+ * Why an interface (not direct lineage access from the tool):
18
+ * 1. Lineage mutations need to round-trip through session storage
19
+ * (persistence + UI events); the tool shouldn't know that pipe.
20
+ * 2. The Sidecar Verifier call for `update_goal({complete})` needs
21
+ * runtime provider + transcript snapshot — wired at the boundary
22
+ * where verifier-provider-resolver runs, not inside the tool.
23
+ * 3. The 3-turn blocker rule has process-lifetime state that lives
24
+ * with the goal runtime, not with the tool registration.
25
+ *
26
+ * All three methods are async — both reads (because they may touch
27
+ * the session storage) and writes (because they persist).
28
+ */
29
+
30
+ interface GoalCompleteResult {
31
+ readonly ok: boolean;
32
+ /** Present iff `!ok` — explains why complete was rejected. */
33
+ readonly reason?: string;
34
+ /** Optional one-line how-to-fix from the verifier. */
35
+ readonly suggestedFix?: string;
36
+ }
37
+ interface GoalBlockedResult {
38
+ readonly ok: boolean;
39
+ /** Status message: success summary or rejection reason. Always set. */
40
+ readonly statusMessage: string;
41
+ /** Counter snapshot for transparency / debugging. */
42
+ readonly counter: {
43
+ readonly current: number;
44
+ readonly required: number;
45
+ };
46
+ }
47
+ interface GoalCreateInput {
48
+ readonly objective: string;
49
+ readonly tokenBudget?: number | null;
50
+ }
51
+ interface GoalToolsContext {
52
+ /** Read current goal state from the session lineage. */
53
+ readonly readGoal: () => Promise<KodaXGoalState | null>;
54
+ /** Create a new goal. Throws if an active goal already exists. */
55
+ readonly createGoal: (input: GoalCreateInput) => Promise<KodaXGoalState>;
56
+ /**
57
+ * Request transition to `complete`. Implementation runs the Sidecar
58
+ * Verifier and returns `{ok:false, reason}` on non-accept. On accept
59
+ * the lineage gets a new goal entry with `status: 'complete'`.
60
+ */
61
+ readonly requestComplete: () => Promise<GoalCompleteResult>;
62
+ /**
63
+ * Request transition to `blocked`. Implementation applies the
64
+ * 3-turn rule via `recordBlockerAttempt` and persists the updated
65
+ * counter regardless of whether the transition was allowed.
66
+ */
67
+ readonly requestBlocked: (blockerKind: string) => Promise<GoalBlockedResult>;
68
+ }
69
+ /**
70
+ * Module-scoped fallback: when the tool runs without a goal context
71
+ * wired (e.g. dispatched from a non-REPL test harness), each method
72
+ * returns a uniform "feature disabled" error so the model gets a
73
+ * clear signal rather than a silent failure.
74
+ */
75
+ declare function makeDisabledGoalToolsContext(): GoalToolsContext;
7
76
 
8
77
  /** One tool-call breadcrumb. Captures only the name + a 60-char input
9
78
  * hint so the snapshot stays compact under fan-out. Mirrors the
@@ -61,6 +130,13 @@ interface ChildProgressSnapshot {
61
130
  /** Read-only flag forwarded from the dispatch bundle. Same rationale
62
131
  * as `parentRole` — currently captured for future surfacing. */
63
132
  readonly readOnly?: boolean;
133
+ /**
134
+ * FEATURE_191 — registered specialist agent name when the dispatch
135
+ * routed through a `subagent_type` argument. `undefined` for generic
136
+ * anonymous children. Surfaced by `task_output` so post-mortem peeks
137
+ * can identify which specialist owned the child.
138
+ */
139
+ readonly specialistName?: string;
64
140
  }
65
141
 
66
142
  /** Result of a cache lookup. */
@@ -316,51 +392,243 @@ interface TodoStore {
316
392
  }
317
393
 
318
394
  /**
319
- * @kodax-ai/agent Compaction Types
395
+ * FEATURE_192 v0.7.44 Phase B — Goal lifecycle hook composer.
396
+ *
397
+ * Wraps the existing `Runner.run` lifecycle hooks (`beforeNextTurn`,
398
+ * `stopHook`) with goal-aware behaviour. Does NOT modify substrate —
399
+ * the agent runtime exposes `beforeNextTurn` (FEATURE_164 v0.7.41) and
400
+ * `stopHook` (FEATURE_184 v0.7.42) as already-stable hook surfaces;
401
+ * this module is a thin composer the caller (REPL / driver) opts into.
402
+ *
403
+ * Wiring:
404
+ * - turn-end accounting → `beforeNextTurn` (fires after each tool
405
+ * execution, before the next LLM call)
406
+ * - agent_end continuation → `stopHook` (fires on text-only
407
+ * termination, can return a continuation prompt to reanimate)
408
+ *
409
+ * `enabled: false` returns pass-through wrappers — useful for hosts
410
+ * that build the binding eagerly but want to no-op when no goal is
411
+ * active. Goal feature ships default ON in v0.7.44; the `enabled`
412
+ * knob is for embedders, not user-facing gating.
320
413
  */
321
414
 
322
- interface CompactionDetails {
323
- readFiles: string[];
324
- modifiedFiles: string[];
415
+ /**
416
+ * Caller-supplied accessors for the goal lifecycle context. The
417
+ * composer does NOT own goal state — it reads via getters and writes
418
+ * via the persist callback. This keeps the composer reentrant and
419
+ * test-friendly (no global mutable cache).
420
+ */
421
+ interface GoalLifecycleContext {
422
+ /** Returns the current goal state, or null when no active goal. */
423
+ readonly getGoal: () => KodaXGoalState | null;
424
+ /**
425
+ * Returns the latest LLM token usage from the just-completed turn.
426
+ * Returns undefined when usage is unavailable (e.g. mid-turn
427
+ * before any LLM call). Optional — accounting is skipped when null.
428
+ */
429
+ readonly getLatestUsage?: () => KodaXTokenUsage | undefined;
430
+ /**
431
+ * Returns the wall-clock timestamp (Date.now() ms) at the start of
432
+ * the turn just completed. The composer pairs this with Date.now()
433
+ * at hook fire time to derive `timeUsedSeconds` delta. Optional —
434
+ * when unset, wall-time is not charged (mirror legacy behaviour;
435
+ * callers without a per-turn clock anchor get token accounting only).
436
+ */
437
+ readonly getTurnStartMs?: () => number | undefined;
438
+ /**
439
+ * Returns the current permission mode. When `'plan'`, accounting is
440
+ * skipped (plan mode runs are not charged against the goal budget).
441
+ * Optional — when not provided, accounting always runs on active goals.
442
+ */
443
+ readonly getPermissionMode?: () => string | undefined;
444
+ /**
445
+ * Persist a goal state transition. Caller wires this to
446
+ * `appendGoalEntry` + session storage. The composer awaits — failures
447
+ * propagate to the runner (deliberate: a broken persist is a real
448
+ * bug worth surfacing, not silently swallowing).
449
+ */
450
+ readonly persistEvent: (state: KodaXGoalState | null, event: 'updated' | 'budget_limited' | 'complete' | 'blocked') => Promise<void>;
451
+ /**
452
+ * Build the continuation prompt body the stop-hook returns when the
453
+ * active goal should resume. Caller controls the prompt content so
454
+ * the same composer works for both Codex-parity literal continuation
455
+ * and any future variants.
456
+ */
457
+ readonly buildContinuationPrompt: (goal: KodaXGoalState) => string;
458
+ /**
459
+ * Returns true when the queue has pending user-priority messages.
460
+ * When pending messages exist, the goal SHOULD NOT autonomously
461
+ * continue — the user is steering and the next turn will pick up
462
+ * their input naturally. Optional — defaults to "no pending".
463
+ */
464
+ readonly hasPendingUserInput?: () => boolean;
325
465
  }
326
- interface CompactionAnchor {
327
- summary: string;
328
- tokensBefore: number;
329
- tokensAfter: number;
330
- entriesRemoved: number;
331
- reason: string;
332
- artifactLedgerId?: string;
333
- details?: CompactionDetails;
334
- memorySeed?: KodaXCompactMemorySeed;
335
- }
336
- interface CompactionUpdate {
337
- anchor?: CompactionAnchor;
338
- artifactLedger?: KodaXSessionArtifactLedgerEntry[];
339
- memorySeed?: KodaXCompactMemorySeed;
340
- /**
341
- * FEATURE_072: ledger-summary + file-content messages produced by
342
- * `buildPostCompactAttachments` + `buildFileContentMessages`. Agent.ts
343
- * passes these separately from the kept-tail messages so REPL-side
344
- * `applySessionCompaction` can store them natively on the CompactionEntry
345
- * rather than inlining them as loose `[Post-compact: ...]` system messages
346
- * in lineage. Agent.ts keeps inlining them into its local flat `messages`
347
- * via `injectPostCompactAttachments` (P4 belt-and-suspenders); the lineage
348
- * is the persistence source of truth.
349
- */
350
- postCompactAttachments?: readonly KodaXMessage[];
351
- }
352
- interface CompactionResult {
353
- compacted: boolean;
354
- messages: KodaXMessage[];
355
- summary?: string;
356
- tokensBefore: number;
357
- tokensAfter: number;
358
- entriesRemoved: number;
359
- details?: CompactionDetails;
360
- artifactLedger?: KodaXSessionArtifactLedgerEntry[];
361
- anchor?: CompactionAnchor;
362
- memorySeed?: KodaXCompactMemorySeed;
466
+ interface BeforeNextTurnFnCtx {
467
+ readonly transcript: readonly AgentMessage[];
468
+ readonly iteration: number;
363
469
  }
470
+ type BeforeNextTurnFn = (ctx: BeforeNextTurnFnCtx) => Promise<readonly AgentMessage[]>;
471
+ /**
472
+ * Wrap an existing `beforeNextTurn` callback with goal accounting.
473
+ * Returned hook:
474
+ * 1. Calls into the goal lifecycle ctx FIRST (read latest usage,
475
+ * apply token delta, persist on budget cross)
476
+ * 2. Delegates to the inner hook for the original behaviour
477
+ * (mid-turn user-prompt injection, etc.)
478
+ *
479
+ * Errors thrown by `persistEvent` propagate. Errors from `inner` also
480
+ * propagate. We don't swallow either — goal lifecycle bugs are real.
481
+ */
482
+ declare function withGoalBeforeNextTurn(ctx: GoalLifecycleContext, inner: BeforeNextTurnFn, options?: {
483
+ enabled: boolean;
484
+ }): BeforeNextTurnFn;
485
+ /**
486
+ * Wrap an existing `stopHook` with goal-driven continuation.
487
+ *
488
+ * Returned hook fires the inner hook FIRST (sidecar verifier wins on
489
+ * `revise` / `blocked`). If the inner hook returns `undefined` AND
490
+ * there's an active goal AND no pending user input, the wrapper
491
+ * returns a continuation string so the Runner reanimates the loop —
492
+ * Codex `/goal` parity.
493
+ *
494
+ * Budget exhaustion semantics: when the active goal has already
495
+ * flipped to `budget_limited`, the wrapper does NOT continue. The user
496
+ * must explicitly resume (`/goal resume`) or set a new budget.
497
+ *
498
+ * Reanimate budget: the Runner caps reanimate via
499
+ * `stopHookReanimateBudget` (default 2). The composer does not need to
500
+ * track its own budget — exceeding the budget is converted by the
501
+ * Runner to an abort with reason "reanimate budget exhausted", which
502
+ * surfaces to the user.
503
+ */
504
+ declare function withGoalStopHook(ctx: GoalLifecycleContext, inner: StopHookFn | undefined, options?: {
505
+ enabled: boolean;
506
+ }): StopHookFn;
507
+
508
+ /**
509
+ * FEATURE_192 v0.7.44 Phase F — Goal runtime binding factory.
510
+ *
511
+ * REPL (or any host that owns a `KodaXSessionLineage`) calls
512
+ * `buildGoalRuntimeBinding(deps)` once per `runManagedTask` invocation
513
+ * and passes the returned binding via
514
+ * `KodaXOptions.context.goalRuntime`. The runner-driven adapter wires:
515
+ * - `binding.goalContext` onto the tool-execution context (so the
516
+ * 3 goal tools can read/mutate state),
517
+ * - `binding.lifecycleCtx` into `withGoalBeforeNextTurn` /
518
+ * `withGoalStopHook` (turn-end accounting + continuation reanimate).
519
+ *
520
+ * Why a factory instead of host-side ad-hoc wiring:
521
+ * - Pulls the lineage-read + persist + sidecar-verifier-call wiring
522
+ * into one well-tested entry point so the host (REPL today; any
523
+ * future SDK consumer) doesn't have to re-implement the same glue.
524
+ * - The factory is the seam where v0.7.45+ extensions (e.g.
525
+ * objective-updated steering, multi-goal across forks) land
526
+ * without breaking the runner-driven contract.
527
+ *
528
+ * The factory does NOT own state — every accessor is a function the
529
+ * caller wires (`getLineage` reads from REPL's `context.lineage`,
530
+ * `saveSession` flushes to disk, etc.). This keeps the binding
531
+ * reentrant and test-friendly.
532
+ *
533
+ * Codex parity: the default `buildContinuationPrompt` mirrors codex's
534
+ * `core/templates/goals/continuation.md` verbatim in structure and
535
+ * intent — Continuation behavior / Budget / Work from evidence /
536
+ * Progress visibility / Fidelity / Completion audit / Blocked audit —
537
+ * with 6 documented KodaX-specific deviations (see the function
538
+ * JSDoc below for the full list). Two of the six are trailing
539
+ * "Runtime enforcement" paragraphs that make the KodaX runtime gates
540
+ * legible to the model (Sidecar Verifier on Completion audit + 3-turn
541
+ * counter on Blocked audit) so the model does not waste a turn being
542
+ * rejected; they do not replace the Codex teaching, they complement it.
543
+ *
544
+ * The earlier v0.7.44 draft trimmed this prompt aggressively under
545
+ * ADR-033 §4 ("no enumerated taxonomies"). That was a mechanical
546
+ * misapplication — Codex's Completion-audit enumerated list
547
+ * ("requirements / artifacts / commands / tests / gates / invariants /
548
+ * deliverables") names AUDIT DIMENSIONS, not the classification
549
+ * taxonomies §4 was written against ("RULE A/B/C/D" labels). The
550
+ * trim correlated with a Layer 2 C1 simple-continuation panel rate
551
+ * of 53% on the canonical 3-active-alias panel; restoring the Codex-
552
+ * faithful sections is the v0.7.44 follow-up before tagging.
553
+ * See: [[feedback_adr_033_scope_clarification_new_feature]].
554
+ *
555
+ * Progress visibility cites KodaX's `todo_*` tools (FEATURE_170 v0.7.41
556
+ * todo V2) rather than Codex's `update_plan`, since KodaX does not have
557
+ * `update_plan` but the equivalent multi-step planning surface lives
558
+ * in `todo_create` / `todo_update` / `todo_list` / `todo_get`.
559
+ */
560
+
561
+ /**
562
+ * Dependencies the host (REPL) wires into the binding. Everything is
563
+ * a callback because the binding has no opinion on storage — the host
564
+ * owns the lineage handle + flush pipe.
565
+ */
566
+ interface GoalRuntimeBindingDeps {
567
+ /** Returns the current session lineage. May throw if no lineage. */
568
+ readonly getLineage: () => KodaXSessionLineage;
569
+ /** Replace the host's lineage handle after a goal entry is appended. */
570
+ readonly setLineage: (next: KodaXSessionLineage) => void;
571
+ /** Flush the host's session storage. Awaited by the binding. */
572
+ readonly saveSession: () => Promise<void>;
573
+ /**
574
+ * Returns the latest LLM token usage from the just-completed turn.
575
+ * Wired by the host to the runner-driven `tokenStateRef.current.lastUsage`.
576
+ * Returns undefined before the first LLM call.
577
+ */
578
+ readonly getLatestUsage: () => KodaXTokenUsage | undefined;
579
+ /**
580
+ * Returns the wall-clock `Date.now()` ms at the start of the
581
+ * just-completed turn. The binding pairs it with `Date.now()` at
582
+ * hook fire time to derive `timeUsedSeconds` delta.
583
+ */
584
+ readonly getTurnStartMs: () => number | undefined;
585
+ /**
586
+ * Returns the current permission mode (`'plan'` skips accounting).
587
+ * Optional — host may omit if it never enters plan mode.
588
+ */
589
+ readonly getPermissionMode?: () => string | undefined;
590
+ /**
591
+ * Returns true when user-priority messages are pending on the main
592
+ * queue. When pending, the binding does NOT autonomously continue —
593
+ * the next turn's drain handles user input naturally.
594
+ */
595
+ readonly hasPendingUserInput: () => boolean;
596
+ /**
597
+ * Verifier hook for `update_goal({complete})`. Implemented by the
598
+ * coding layer's sidecar-verifier-bind helper; host passes the same
599
+ * function through.
600
+ */
601
+ readonly verifyComplete: (goal: KodaXGoalState) => Promise<GoalCompleteResult>;
602
+ }
603
+ interface GoalRuntimeBinding {
604
+ readonly goalContext: GoalToolsContext;
605
+ readonly lifecycleCtx: GoalLifecycleContext;
606
+ /**
607
+ * Replace the verifyComplete implementation at runtime.
608
+ *
609
+ * The REPL constructs the binding eagerly (before the runner exists)
610
+ * and supplies a stub verifyComplete. The runner-driven adapter
611
+ * then has access to runner-local context the REPL doesn't
612
+ * (transcript ref, mutation tracker, resolved verifier provider/
613
+ * model) and installs a real F184-backed verifier via this method.
614
+ *
615
+ * Idempotent: calling more than once just replaces the slot. The
616
+ * `goalContext.requestComplete` closure reads the slot fresh on
617
+ * every invocation, so any later swap is observed immediately.
618
+ *
619
+ * Called only from `buildRunnerGoalAdapter` in production; tests
620
+ * may also call it directly when exercising the goal-complete
621
+ * verifier path without a full runner harness.
622
+ */
623
+ readonly installVerifyComplete: (fn: GoalRuntimeBindingDeps['verifyComplete']) => void;
624
+ }
625
+ /**
626
+ * Build the binding. Pure factory — no global state, no side effects
627
+ * at construction; effects happen when the runner-driven adapter
628
+ * invokes the wrapped hooks or when a tool calls
629
+ * `goalContext.{readGoal,createGoal,requestComplete,requestBlocked}`.
630
+ */
631
+ declare function buildGoalRuntimeBinding(deps: GoalRuntimeBindingDeps): GoalRuntimeBinding;
364
632
 
365
633
  /**
366
634
  * FEATURE_093 (v0.7.24): minimal contract interface for the coding extension
@@ -798,7 +1066,7 @@ interface KodaXRepoIntelligenceTrace {
798
1066
  * (interactive REPL), and `acp_server`.
799
1067
  *
800
1068
  * Note: FEATURE_083 (v0.7.24) initially marked this as superseded by
801
- * `EvidenceSpan` in `@kodax-ai/tracing`. **FEATURE_086 (v0.7.27) re-evaluated
1069
+ * `EvidenceSpan` in `@kodax-ai/agent`. **FEATURE_086 (v0.7.27) re-evaluated
802
1070
  * and retained it**: `EvidenceSpanData` is a generic
803
1071
  * `{ source, queryPreview?, resultCount?, cacheHit?, error? }` abstraction
804
1072
  * that does not carry the repo-intelligence-specific `stage` enum,
@@ -1011,6 +1279,17 @@ interface KodaXChildContextBundle {
1011
1279
  * lands separately.
1012
1280
  */
1013
1281
  modelHint?: KodaXChildModelHint;
1282
+ /**
1283
+ * FEATURE_191 — optional registered specialist agent name. When set,
1284
+ * the child is dispatched with that agent's `instructions` /
1285
+ * `tools` / `reasoning` / `guardrails` instead of the stock Worker
1286
+ * bundle. Resolved via `resolveConstructedAgent(name)` at dispatch
1287
+ * time; unknown names are rejected by `toolDispatchChildTask` with
1288
+ * a tool-result error (not throw) before the bundle reaches
1289
+ * `executeReadChild` / `executeWriteChild`. Optional — omitting
1290
+ * preserves byte-identical v0.7.42 baseline dispatch behavior.
1291
+ */
1292
+ specialistName?: string;
1014
1293
  }
1015
1294
  /**
1016
1295
  * FEATURE_120 v0.7.39 Phase 4 — model tier hint. Tier semantics:
@@ -1330,6 +1609,49 @@ interface KodaXContextOptions {
1330
1609
  * plan-mode enforcement.
1331
1610
  */
1332
1611
  planModeBlockCheck?: (tool: string, input: Record<string, unknown>) => string | null;
1612
+ /**
1613
+ * FEATURE_123 v0.7.44 — propagate the current agent's id into the
1614
+ * spawned runtime so its tools can self-identify (and so peer
1615
+ * `send_message` calls can stamp a `from=...` framing tag + reject
1616
+ * self-targeted sends).
1617
+ */
1618
+ currentAgentId?: string;
1619
+ /**
1620
+ * FEATURE_123 v0.7.44 — propagate the dispatching agent's id (the
1621
+ * parent of the soon-to-be-spawned runtime) so `send_message(to:
1622
+ * "worker")` from a grand-child routes to its direct parent rather
1623
+ * than the top-level Worker.
1624
+ */
1625
+ parentAgentId?: string;
1626
+ /**
1627
+ * FEATURE_123 v0.7.44 — when set, the spawned runtime's
1628
+ * `ctx.childTaskRegistry` reuses this Map instead of allocating a
1629
+ * fresh one. Children pass the parent's registry through so peer
1630
+ * routing (`send_message` to a sibling task_id) finds the target.
1631
+ * Children remain unable to mutate the registry because
1632
+ * `dispatch_child_task` stays in `CHILD_EXCLUDE_TOOLS_BASE`.
1633
+ */
1634
+ inheritedChildTaskRegistry?: ChildTaskRegistry<KodaXChildExecutionResult>;
1635
+ /**
1636
+ * FEATURE_192 v0.7.44 Phase F — `/goal` runtime binding.
1637
+ *
1638
+ * When set, the runner-driven adapter:
1639
+ * 1. Wires `binding.goalContext` onto the tool-execution context
1640
+ * so the 3 goal tools (get_goal / create_goal / update_goal)
1641
+ * read + mutate live state.
1642
+ * 2. Wraps the `beforeNextTurn` hook with `withGoalBeforeNextTurn`
1643
+ * for turn-end token + wall-time accounting and budget-limit
1644
+ * transitions.
1645
+ * 3. Wraps the `stopHook` with `withGoalStopHook` so a Worker
1646
+ * text-only termination with an active goal returns a
1647
+ * continuation prompt (auto-continue on goal).
1648
+ *
1649
+ * Constructed by the REPL via `buildGoalRuntimeBinding(deps)` from
1650
+ * `packages/coding/src/goal/runtime-wiring.ts`. When undefined, the
1651
+ * tool context falls back to `makeDisabledGoalToolsContext()` and
1652
+ * the lifecycle hooks pass through unmodified.
1653
+ */
1654
+ goalRuntime?: GoalRuntimeBinding;
1333
1655
  }
1334
1656
  interface KodaXOptions {
1335
1657
  provider: string;
@@ -1469,7 +1791,6 @@ interface KodaXOrchestrationVerdict {
1469
1791
  signalReason?: string;
1470
1792
  signalDebugReason?: string;
1471
1793
  disposition?: 'complete' | 'blocked' | 'needs_continuation';
1472
- continuationSuggested?: boolean;
1473
1794
  }
1474
1795
  interface KodaXManagedTaskRuntimeState {
1475
1796
  amaProfile?: KodaXAmaProfile;
@@ -1491,24 +1812,6 @@ interface KodaXManagedTaskRuntimeState {
1491
1812
  currentHarness?: KodaXHarnessProfile;
1492
1813
  upgradeCeiling?: KodaXHarnessProfile;
1493
1814
  harnessTransitions?: KodaXManagedTaskHarnessTransition[];
1494
- scoutDecision?: {
1495
- summary: string;
1496
- recommendedHarness: KodaXHarnessProfile;
1497
- readyForUpgrade: boolean;
1498
- scope?: string[];
1499
- requiredEvidence?: string[];
1500
- reviewFilesOrAreas?: string[];
1501
- evidenceAcquisitionMode?: 'overview' | 'diff-bundle' | 'diff-slice' | 'file-read';
1502
- harnessRationale?: string;
1503
- blockingEvidence?: string[];
1504
- directCompletionReady?: 'yes' | 'no';
1505
- skillSummary?: string;
1506
- executionObligations?: string[];
1507
- verificationObligations?: string[];
1508
- ambiguities?: string[];
1509
- projectionConfidence?: KodaXSkillProjectionConfidence;
1510
- };
1511
- skillMap?: KodaXSkillMap;
1512
1815
  completionContractStatus?: Record<string, 'ready' | 'incomplete' | 'blocked' | 'missing'>;
1513
1816
  rawRoutingDecision?: KodaXTaskRoutingDecision;
1514
1817
  finalRoutingDecision?: KodaXTaskRoutingDecision;
@@ -1563,7 +1866,6 @@ interface KodaXManagedVerdictPayload {
1563
1866
  nextHarness?: KodaXTaskRoutingDecision['harnessProfile'];
1564
1867
  protocolParseFailed?: boolean;
1565
1868
  verificationDegraded?: boolean;
1566
- continuationSuggested?: boolean;
1567
1869
  preferredFallbackWorkerId?: string;
1568
1870
  /**
1569
1871
  * v0.7.26 Risk-3 fix — Evaluator explicit budget-extension request.
@@ -1576,72 +1878,19 @@ interface KodaXManagedVerdictPayload {
1576
1878
  budgetRequest?: string;
1577
1879
  }
1578
1880
  /**
1579
- * Signals surfaced by the harness (not the LLM) when Scout's completion looks
1580
- * suspicious. See runManagedScoutStage for the detection logic.
1881
+ * Signals surfaced by the harness (not the LLM) when V1 Scout's completion
1882
+ * looked suspicious.
1883
+ *
1884
+ * FEATURE_193 (v0.7.43) deep V1 cleanup: V1 Scout role is retired and the
1885
+ * Runner-driven path no longer fires `onScoutSuspiciousCompletion`. The
1886
+ * type is kept on the SDK surface so the `KodaXEvents.onScoutSuspiciousCompletion`
1887
+ * callback signature continues to compile for pre-1.0 SDK consumers (e.g.
1888
+ * the REPL renderers that still register a handler). New code MUST NOT
1889
+ * emit this signal.
1581
1890
  */
1582
1891
  type KodaXScoutSuspiciousSignal = 'mutation-expected-but-none' | 'budget-exhausted' | 'no-formal-completion';
1583
- interface KodaXManagedScoutPayload {
1584
- summary?: string;
1585
- scope: string[];
1586
- requiredEvidence: string[];
1587
- reviewFilesOrAreas?: string[];
1588
- evidenceAcquisitionMode?: 'overview' | 'diff-bundle' | 'diff-slice' | 'file-read';
1589
- confirmedHarness?: KodaXTaskRoutingDecision['harnessProfile'];
1590
- harnessRationale?: string;
1591
- blockingEvidence?: string[];
1592
- directCompletionReady?: 'yes' | 'no';
1593
- /**
1594
- * FEATURE_078 (v0.7.29): Scout's optional non-binding suggestion for
1595
- * the reasoning depth downstream workers (Planner / Generator /
1596
- * Evaluator) should use. Resolved by `resolveRoleReasoning(role,
1597
- * userCeiling, profile, scoutHint)` as the L3 input — clamped by L1
1598
- * (user ceiling) and L2 (agent profile max). Scout SHOULD set this
1599
- * sparingly: only when the scoped task signals atypically low
1600
- * complexity (`'quick'`) or atypically high stakes (`'deep'`); leave
1601
- * undefined for the default path so workers stick to their own
1602
- * `Agent.reasoning.default`.
1603
- */
1604
- downstreamReasoningHint?: KodaXReasoningMode;
1605
- userFacingText?: string;
1606
- skillMap?: {
1607
- skillSummary?: string;
1608
- executionObligations: string[];
1609
- verificationObligations: string[];
1610
- ambiguities: string[];
1611
- projectionConfidence?: KodaXSkillProjectionConfidence;
1612
- };
1613
- /**
1614
- * Harness-observed confidence in Scout's completion. 'confident' is the default
1615
- * (omitted). 'uncertain' means the harness detected signals that Scout may not
1616
- * have actually finished (e.g. mutation task with zero mutations, budget
1617
- * exhausted without explicit completion, tool calls followed by text-only exit
1618
- * without a completion statement).
1619
- *
1620
- * This field is set by the harness, not by the LLM — emit_managed_protocol
1621
- * payloads from models are ignored here and overwritten.
1622
- */
1623
- completionConfidence?: 'confident' | 'uncertain';
1624
- /** Which signals contributed to an 'uncertain' confidence verdict. */
1625
- suspiciousSignals?: KodaXScoutSuspiciousSignal[];
1626
- }
1627
- interface KodaXManagedContractPayload {
1628
- summary?: string;
1629
- successCriteria: string[];
1630
- requiredEvidence: string[];
1631
- constraints: string[];
1632
- }
1633
- interface KodaXManagedHandoffPayload {
1634
- status: 'ready' | 'incomplete' | 'blocked';
1635
- summary?: string;
1636
- evidence: string[];
1637
- followup: string[];
1638
- userFacingText: string;
1639
- }
1640
1892
  interface KodaXManagedProtocolPayload {
1641
1893
  verdict?: KodaXManagedVerdictPayload;
1642
- scout?: KodaXManagedScoutPayload;
1643
- contract?: KodaXManagedContractPayload;
1644
- handoff?: KodaXManagedHandoffPayload;
1645
1894
  }
1646
1895
  interface KodaXResult {
1647
1896
  success: boolean;
@@ -1758,6 +2007,56 @@ interface KodaXToolExecutionContext {
1758
2007
  readonly model?: string;
1759
2008
  readonly reasoningMode?: KodaXReasoningMode;
1760
2009
  };
2010
+ /**
2011
+ * FEATURE_123 v0.7.44 — agentId of the agent whose tool call this
2012
+ * context backs. `undefined` for the top-level Worker (main runtime
2013
+ * loop); set to the child's `bundle.id` for sub-agent runtimes.
2014
+ *
2015
+ * Consumed by `send_message` to:
2016
+ * - know who "self" is for broadcast self-exclusion and for the
2017
+ * `from=...` framing tag,
2018
+ * - reject self-targeted sends as a single-hop cycle guard.
2019
+ *
2020
+ * Wired by `child-executor.executeReadChild` / `executeWriteChild`
2021
+ * via `options.context.currentAgentId`.
2022
+ */
2023
+ currentAgentId?: string;
2024
+ /**
2025
+ * FEATURE_123 v0.7.44 — agentId of the agent that dispatched the one
2026
+ * owning this context. `undefined` for the Worker (top of the tree)
2027
+ * and for first-tier children (parent == Worker; routing uses the
2028
+ * `'worker'` sentinel rather than an agentId). Set for grand-child
2029
+ * runtimes whose parent is itself a child.
2030
+ *
2031
+ * Consumed by `send_message` when `to === 'worker'`:
2032
+ * - If `parentAgentId` is set, route to that specific id.
2033
+ * - If `parentAgentId` is undefined, route to `agentId: undefined`
2034
+ * (the main loop / top Worker).
2035
+ */
2036
+ parentAgentId?: string;
2037
+ /**
2038
+ * FEATURE_123 v0.7.44 — per-turn `send_message` flood throttle counter.
2039
+ *
2040
+ * Mutable ref that the `send_message` tool increments on every
2041
+ * outbound enqueue (broadcast counts as N — one per recipient).
2042
+ * `runner-driven.ts`' `beforeNextTurn` resets `count = 0` at every
2043
+ * turn boundary so the limit is "per LLM turn", matching the
2044
+ * design's "≤5 per child-turn / ≤20 per Worker-turn".
2045
+ *
2046
+ * The cap chosen by `send_message` is per-call:
2047
+ * - Worker (`currentAgentId === undefined`): 20 outbound enqueues
2048
+ * per turn — Worker is the coordinator + has the higher fan-out
2049
+ * budget.
2050
+ * - Child (`currentAgentId !== undefined`): 5 outbound enqueues
2051
+ * per turn — peer chatter that goes over this is almost always
2052
+ * a misfire (storm vs coordination).
2053
+ *
2054
+ * When undefined (sync-mode dispatch, no async substrate), the
2055
+ * throttle is bypassed.
2056
+ */
2057
+ sendMessageTurnCounter?: {
2058
+ count: number;
2059
+ };
1761
2060
  /**
1762
2061
  * @deprecated FEATURE_067: Removed — use reportToolProgress instead.
1763
2062
  * Previously fired onManagedTaskStatus with activeWorkerId='child',
@@ -1918,6 +2217,18 @@ interface KodaXToolExecutionContext {
1918
2217
  * it into child `runKodaX` calls).
1919
2218
  */
1920
2219
  childProgressSnapshots?: Map<string, ChildProgressSnapshot>;
2220
+ /**
2221
+ * FEATURE_192 v0.7.44 — `/goal` Persistent Goal runtime hook.
2222
+ *
2223
+ * Wired by the REPL adapter for every session with a lineage. When
2224
+ * undefined (sync-dispatch / isolated test harness), the 3 goal
2225
+ * tools (`get_goal` / `create_goal` / `update_goal`) fall back to a
2226
+ * uniform-error context (`makeDisabledGoalToolsContext`) so the
2227
+ * model gets a clear signal rather than a silent failure.
2228
+ *
2229
+ * See `packages/coding/src/goal/tools-context.ts`.
2230
+ */
2231
+ goalContext?: GoalToolsContext;
1921
2232
  }
1922
2233
 
1923
2234
  /**
@@ -2567,5 +2878,5 @@ interface CreateBashPrefixExtractorOptions {
2567
2878
  */
2568
2879
  declare function createBashPrefixExtractor(opts: CreateBashPrefixExtractorOptions): BashPrefixExtractor;
2569
2880
 
2570
- export { BASH_POLICY_SPEC as B, CONSECUTIVE_THRESHOLD as C, ERROR_THRESHOLD as E, getKodaxGlobalDir as a$, WINDOW_MS as aS, collectAllSignals as aT, computeRulesFingerprint as aU, createAutoModeToolGuardrail as aV, createBashPrefixExtractor as aW, createCircuitBreaker as aX, createDenialTracker as aY, extractCommandPrefix as aZ, formatAgentsForPrompt as a_, loadAgentsFiles as b0, loadAutoRules as b1, parseAutoRules as b2, readTrustState as b3, recordAllow as b4, recordBlock as b5, recordError as b6, shouldFallback$1 as b7, shouldFallback as b8, trustProjectRules as b9, CUMULATIVE_THRESHOLD as n };
2571
- export type { KodaXOrchestrationVerdict as $, AgentsFile as A, DenialTracker as D, FailureStage as F, KodaXContextOptions as G, KodaXContextTokenSnapshot as H, KodaXEvents as I, KodaXFanoutBranchLifecycle as J, KodaXAgentMode as K, KodaXFanoutBranchRecord as L, KodaXFanoutBranchTransition as M, KodaXFanoutSchedulerInput as N, KodaXFanoutSchedulerPlan as O, KodaXInputArtifact as P, KodaXManagedBudgetSnapshot as Q, KodaXManagedProtocolPayload as R, KodaXManagedTask as S, KodaXManagedTaskRuntimeState as T, KodaXManagedTaskStatusEvent as U, KodaXMcpConnectMode as V, KodaXMcpServerConfig as W, KodaXMcpServersConfig as X, KodaXMcpTransport as Y, KodaXMemoryStrategy as Z, KodaXOptions as _, AskUserMultiOptions as a, KodaXParentReductionContract as a0, KodaXProviderPolicyHints as a1, KodaXRepoIntelligenceCapability as a2, KodaXRepoIntelligenceMode as a3, KodaXRepoIntelligenceResolvedMode as a4, KodaXRepoIntelligenceTrace as a5, KodaXRepoIntelligenceTraceEvent as a6, KodaXRepoRoutingSignals as a7, KodaXResult as a8, KodaXRoleRoundSummary as a9, ProviderRecoveryEvent as aA, ProviderResilienceConfig as aB, ProviderResiliencePolicy as aC, RecoveryAction as aD, RecoveryDecision as aE, RecoveryLadderStep as aF, RecoveryResult as aG, ResilienceClassification as aH, ResilienceErrorClass as aI, RulesLoadError as aJ, RulesLoadResult as aK, SignalCollector as aL, SkippedRulesSource as aM, TodoItem as aN, TodoList as aO, TodoStatus as aP, ToolCallSignal as aQ, TrustState as aR, KodaXRuntimeVerificationContract as aa, KodaXSessionControl as ab, KodaXSessionMutators as ac, KodaXSessionOptions as ad, KodaXSkillInvocationContext as ae, KodaXSkillMap as af, KodaXSkillProjectionConfidence as ag, KodaXTaskCapabilityHint as ah, KodaXTaskContract as ai, KodaXTaskEvidenceArtifact as aj, KodaXTaskEvidenceBundle as ak, KodaXTaskEvidenceEntry as al, KodaXTaskRole as am, KodaXTaskRoleAssignment as an, KodaXTaskStatus as ao, KodaXTaskSurface as ap, KodaXTaskToolPolicy as aq, KodaXTaskVerificationContract as ar, KodaXTaskVerificationCriterion as as, KodaXTaskWorkItem as at, KodaXToolExecutionContext as au, KodaXVerificationScorecard as av, KodaXVerificationScorecardCriterion as aw, LoadAgentsOptions as ax, LoadedRulesSource as ay, ProviderExecutionState as az, AskUserQuestionItem as b, AskUserQuestionOptions as c, AutoModeAskUser as d, AutoModeAskUserVerdict as e, AutoModeEngine as f, AutoModeGuardrailConfig as g, AutoModeSharedState as h, AutoModeStats as i, AutoModeToolGuardrail as j, AutoRules as k, BashPrefixExtractor as l, BashPrefixResult as m, CircuitBreaker as o, CompactionAnchor as p, CompactionDetails as q, CompactionResult as r, CompactionUpdate as s, CreateBashPrefixExtractorOptions as t, ExtensionRuntimeContract as u, ExtractCommandPrefixOptions as v, KodaXBudgetDisclosureZone as w, KodaXBudgetExtensionRequest as x, KodaXChildAgentResult as y, KodaXChildContextBundle as z };
2881
+ export { BASH_POLICY_SPEC as B, CONSECUTIVE_THRESHOLD as C, ERROR_THRESHOLD as E, createCircuitBreaker as a$, WINDOW_MS as aV, buildGoalRuntimeBinding as aW, collectAllSignals as aX, computeRulesFingerprint as aY, createAutoModeToolGuardrail as aZ, createBashPrefixExtractor as a_, createDenialTracker as b0, extractCommandPrefix as b1, formatAgentsForPrompt as b2, getKodaxGlobalDir as b3, loadAgentsFiles as b4, loadAutoRules as b5, makeDisabledGoalToolsContext as b6, parseAutoRules as b7, readTrustState as b8, recordAllow as b9, recordBlock as ba, recordError as bb, shouldFallback$1 as bc, shouldFallback as bd, trustProjectRules as be, withGoalBeforeNextTurn as bf, withGoalStopHook as bg, CUMULATIVE_THRESHOLD as n };
2882
+ export type { KodaXMcpTransport as $, AgentsFile as A, DenialTracker as D, FailureStage as F, GoalBlockedResult as G, KodaXChildAgentResult as H, KodaXChildContextBundle as I, KodaXContextOptions as J, KodaXAgentMode as K, KodaXContextTokenSnapshot as L, KodaXEvents as M, KodaXFanoutBranchLifecycle as N, KodaXFanoutBranchRecord as O, KodaXFanoutBranchTransition as P, KodaXFanoutSchedulerInput as Q, KodaXFanoutSchedulerPlan as R, KodaXInputArtifact as S, KodaXManagedBudgetSnapshot as T, KodaXManagedProtocolPayload as U, KodaXManagedTask as V, KodaXManagedTaskRuntimeState as W, KodaXManagedTaskStatusEvent as X, KodaXMcpConnectMode as Y, KodaXMcpServerConfig as Z, KodaXMcpServersConfig as _, AskUserMultiOptions as a, KodaXMemoryStrategy as a0, KodaXOptions as a1, KodaXOrchestrationVerdict as a2, KodaXParentReductionContract as a3, KodaXProviderPolicyHints as a4, KodaXRepoIntelligenceCapability as a5, KodaXRepoIntelligenceMode as a6, KodaXRepoIntelligenceResolvedMode as a7, KodaXRepoIntelligenceTrace as a8, KodaXRepoIntelligenceTraceEvent as a9, LoadAgentsOptions as aA, LoadedRulesSource as aB, ProviderExecutionState as aC, ProviderRecoveryEvent as aD, ProviderResilienceConfig as aE, ProviderResiliencePolicy as aF, RecoveryAction as aG, RecoveryDecision as aH, RecoveryLadderStep as aI, RecoveryResult as aJ, ResilienceClassification as aK, ResilienceErrorClass as aL, RulesLoadError as aM, RulesLoadResult as aN, SignalCollector as aO, SkippedRulesSource as aP, TodoItem as aQ, TodoList as aR, TodoStatus as aS, ToolCallSignal as aT, TrustState as aU, KodaXRepoRoutingSignals as aa, KodaXResult as ab, KodaXRoleRoundSummary as ac, KodaXRuntimeVerificationContract as ad, KodaXSessionControl as ae, KodaXSessionMutators as af, KodaXSessionOptions as ag, KodaXSkillInvocationContext as ah, KodaXSkillMap as ai, KodaXSkillProjectionConfidence as aj, KodaXTaskCapabilityHint as ak, KodaXTaskContract as al, KodaXTaskEvidenceArtifact as am, KodaXTaskEvidenceBundle as an, KodaXTaskEvidenceEntry as ao, KodaXTaskRole as ap, KodaXTaskRoleAssignment as aq, KodaXTaskStatus as ar, KodaXTaskSurface as as, KodaXTaskToolPolicy as at, KodaXTaskVerificationContract as au, KodaXTaskVerificationCriterion as av, KodaXTaskWorkItem as aw, KodaXToolExecutionContext as ax, KodaXVerificationScorecard as ay, KodaXVerificationScorecardCriterion as az, AskUserQuestionItem as b, AskUserQuestionOptions as c, AutoModeAskUser as d, AutoModeAskUserVerdict as e, AutoModeEngine as f, AutoModeGuardrailConfig as g, AutoModeSharedState as h, AutoModeStats as i, AutoModeToolGuardrail as j, AutoRules as k, BashPrefixExtractor as l, BashPrefixResult as m, CircuitBreaker as o, CreateBashPrefixExtractorOptions as p, ExtensionRuntimeContract as q, ExtractCommandPrefixOptions as r, GoalCompleteResult as s, GoalCreateInput as t, GoalLifecycleContext as u, GoalRuntimeBinding as v, GoalRuntimeBindingDeps as w, GoalToolsContext as x, KodaXBudgetDisclosureZone as y, KodaXBudgetExtensionRequest as z };