agent-afk 5.290.4 → 5.291.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.
Files changed (81) hide show
  1. package/dist/agent/awareness/types.d.ts +4 -0
  2. package/dist/agent/daemon/budget-gate.d.ts +31 -0
  3. package/dist/agent/daemon/gates.d.ts +1 -1
  4. package/dist/agent/daemon/scheduler.d.ts +2 -0
  5. package/dist/agent/daemon/scheduler.overlap-guard.d.ts +2 -0
  6. package/dist/agent/daemon/tool-health-task.d.ts +17 -0
  7. package/dist/agent/daemon/triggers.d.ts +1 -1
  8. package/dist/agent/facets/schema.d.ts +10 -2
  9. package/dist/agent/outcomes/schema.d.ts +1 -1
  10. package/dist/agent/peer/admission-queue.d.ts +39 -0
  11. package/dist/agent/peer/inbox-store.d.ts +2 -0
  12. package/dist/agent/provider.d.ts +1 -0
  13. package/dist/agent/providers/anthropic-direct/auth.d.ts +2 -1
  14. package/dist/agent/providers/anthropic-direct/beta-headers.d.ts +2 -0
  15. package/dist/agent/providers/anthropic-direct/input-transformations.d.ts +3 -0
  16. package/dist/agent/providers/anthropic-direct/loop/round-request.d.ts +1 -1
  17. package/dist/agent/providers/anthropic-direct/query/turn-request.d.ts +1 -0
  18. package/dist/agent/providers/anthropic-direct/query-options.d.ts +2 -0
  19. package/dist/agent/providers/anthropic-direct/query-runtime.d.ts +3 -0
  20. package/dist/agent/providers/anthropic-direct/query-turn-driver.d.ts +1 -0
  21. package/dist/agent/providers/anthropic-direct/request-types.d.ts +8 -1
  22. package/dist/agent/providers/anthropic-direct/resolve-params.d.ts +4 -1
  23. package/dist/agent/providers/openai-compatible/complete-wire.d.ts +11 -0
  24. package/dist/agent/providers/openai-compatible/oneshot.d.ts +1 -0
  25. package/dist/agent/providers/openai-compatible/query/client.d.ts +1 -0
  26. package/dist/agent/providers/openai-compatible/query/overload-pause-tier.d.ts +1 -0
  27. package/dist/agent/providers/router/provider-router.d.ts +2 -0
  28. package/dist/agent/providers/router/provider-router.switch.d.ts +4 -0
  29. package/dist/agent/providers/shared/compaction.d.ts +4 -0
  30. package/dist/agent/providers/shared/rate-limit-bucket.d.ts +18 -0
  31. package/dist/agent/providers/shared/rate-limit-bucket.registry.d.ts +3 -0
  32. package/dist/agent/providers/shared/transient-retry.d.ts +18 -0
  33. package/dist/agent/providers/shared/transient-retry.trace.d.ts +3 -0
  34. package/dist/agent/session/model-slots.d.ts +1 -0
  35. package/dist/agent/state/state-store.d.ts +1 -0
  36. package/dist/agent/subagent/usage-limit-park-policy.d.ts +3 -0
  37. package/dist/agent/tools/dispatcher.batch-process.d.ts +4 -0
  38. package/dist/agent/tools/dispatcher.d.ts +1 -0
  39. package/dist/agent/tools/dispatcher.execute-batch.d.ts +2 -0
  40. package/dist/agent/tools/handlers/worktree-managed.d.ts +1 -0
  41. package/dist/agent/tools/tool-health-monitor.d.ts +26 -0
  42. package/dist/agent/tools/usage-notice.d.ts +8 -0
  43. package/dist/agent/trace/events.d.ts +13 -0
  44. package/dist/agent/trace/events.session-phase.d.ts +4 -0
  45. package/dist/agent/trace/types.d.ts +3 -13
  46. package/dist/agent/trace/types.session-phase.d.ts +12 -0
  47. package/dist/agent/types/session-types.d.ts +1 -0
  48. package/dist/agent/usage/codex-usage.d.ts +12 -0
  49. package/dist/agent/usage/usage-budget.d.ts +24 -0
  50. package/dist/agent/usage/usage-formatter.d.ts +52 -0
  51. package/dist/agent/usage/usage-http.d.ts +11 -0
  52. package/dist/agent/usage/usage-ledger.d.ts +13 -0
  53. package/dist/agent/usage/usage-record.d.ts +37 -0
  54. package/dist/agent/usage/usage-snapshot.d.ts +21 -0
  55. package/dist/cli/commands/daemon-builtin-tasks.d.ts +15 -0
  56. package/dist/cli/commands/interactive/interactive.cleanup.d.ts +6 -1
  57. package/dist/cli/commands/interactive/loop-iteration.boundary.d.ts +36 -0
  58. package/dist/cli/commands/interactive/peer-inbox-notifier.d.ts +11 -1
  59. package/dist/cli/commands/interactive/shared.d.ts +4 -1
  60. package/dist/cli/commands/interactive/surface-setup.suggest-config.d.ts +0 -1
  61. package/dist/cli/commands/usage.d.ts +9 -0
  62. package/dist/cli/config/json-tier-parse.daemon.d.ts +2 -0
  63. package/dist/cli/config/types.d.ts +8 -0
  64. package/dist/cli/constants.d.ts +0 -2
  65. package/dist/cli/input/suggest-credential.d.ts +10 -0
  66. package/dist/cli/input/suggest-types.d.ts +2 -1
  67. package/dist/cli/session-store.d.ts +6 -1
  68. package/dist/cli/tool-category.d.ts +1 -0
  69. package/dist/cli.mjs +491 -474
  70. package/dist/config/env.d.ts +38 -0
  71. package/dist/config/env.daemon.d.ts +22 -0
  72. package/dist/config/env.misc.d.ts +8 -0
  73. package/dist/config/env.model-tiers.d.ts +8 -0
  74. package/dist/index.mjs +216 -208
  75. package/dist/paths.daemon.d.ts +1 -0
  76. package/dist/telegram.mjs +189 -180
  77. package/dist/web-ui-assets/assets/{index-MIgeDul2.js → index-BtgJsRFJ.js} +1 -1
  78. package/dist/web-ui-assets/assets/index-gg5vv6YH.js +380 -0
  79. package/dist/web-ui-assets/index.html +1 -1
  80. package/package.json +2 -3
  81. package/dist/web-ui-assets/assets/index-CpbGrtNj.js +0 -380
@@ -1,3 +1,4 @@
1
+ import type { CompactUsageEntry } from '../usage/usage-formatter.js';
1
2
  export type Surface = 'cli' | 'repl' | 'daemon' | 'telegram' | 'subagent' | 'web' | 'unknown';
2
3
  export type PhaseRole = 'read-only' | 'read-write';
3
4
  export type SubagentStatusLiteValue = 'idle' | 'running' | 'succeeded' | 'failed' | 'cancelled';
@@ -50,11 +51,13 @@ export interface RuntimeWorkspace {
50
51
  dirtyCount: number | null;
51
52
  remoteUrl: string | null;
52
53
  }
54
+ export type RuntimeUsageEntry = CompactUsageEntry;
53
55
  export interface RuntimeSnapshot {
54
56
  self: RuntimeSelf;
55
57
  tools: RuntimeTools;
56
58
  subagents: RuntimeSubagents;
57
59
  workspace: RuntimeWorkspace;
60
+ usage?: RuntimeUsageEntry[];
58
61
  }
59
62
  export type RuntimeView = 'self' | 'tools' | 'subagents' | 'workspace' | 'all';
60
63
  export interface RuntimeStateSource {
@@ -62,4 +65,5 @@ export interface RuntimeStateSource {
62
65
  getTools(): RuntimeTools;
63
66
  getSubagents(): RuntimeSubagents;
64
67
  getWorkspace(): RuntimeWorkspace;
68
+ getUsage(): RuntimeUsageEntry[];
65
69
  }
@@ -0,0 +1,31 @@
1
+ import type { FetchSubscriptionUsageOptions, UsageResult } from '../subscription-usage.js';
2
+ import { type BindingWindow } from '../usage/usage-budget.js';
3
+ export interface BudgetGatePass {
4
+ readonly skip: false;
5
+ }
6
+ export interface BudgetGateSkip {
7
+ readonly skip: true;
8
+ readonly provider: string;
9
+ readonly binding: BindingWindow;
10
+ }
11
+ export type BudgetGateResult = BudgetGatePass | BudgetGateSkip;
12
+ export interface UsageTarget {
13
+ readonly provider: string;
14
+ readonly account: string;
15
+ }
16
+ export interface BudgetGateOptions {
17
+ readonly skipPct?: number;
18
+ readonly target?: UsageTarget | null;
19
+ readonly fetchUsage?: (opts?: FetchSubscriptionUsageOptions) => Promise<UsageResult>;
20
+ readonly fetchCodex?: () => Promise<UsageResult>;
21
+ readonly now?: number;
22
+ }
23
+ export declare function resolveDaemonUsageTarget(model: string | undefined, apiKey?: string, chatgptSignedIn?: () => boolean): UsageTarget | null;
24
+ export declare function evaluateBudgetGate(options?: BudgetGateOptions): Promise<BudgetGateResult>;
25
+ export declare function describeBudgetSkip(skip: BudgetGateSkip, now?: number): string;
26
+ export declare function formatBudgetSkipMessage(skip: BudgetGateSkip, taskId: string, now?: number): string;
27
+ export declare class BudgetAlertLatch {
28
+ private alerted;
29
+ shouldAlert(skip: BudgetGateSkip): boolean;
30
+ clear(): void;
31
+ }
@@ -1,5 +1,5 @@
1
1
  export declare const DEFAULT_SESSIONSTART_COOLDOWN_MS: number;
2
- export type SessionStartSkipReason = 'cooldown' | 'overlap';
2
+ export type SessionStartSkipReason = 'cooldown' | 'overlap' | 'budget-over';
3
3
  export interface GateDecision {
4
4
  fire: boolean;
5
5
  skipReason?: SessionStartSkipReason;
@@ -22,6 +22,7 @@ export interface SchedulerOptions {
22
22
  bot?: Telegraf;
23
23
  primaryChatId?: number;
24
24
  primaryThreadId?: number;
25
+ budgetGate?: () => Promise<import('./budget-gate.js').BudgetGateResult>;
25
26
  }
26
27
  export type TelemetryTrigger = 'cron' | 'sessionstart' | 'pull';
27
28
  export type TelemetryStatus = 'success' | 'error' | 'skipped';
@@ -54,6 +55,7 @@ export declare class CronScheduler {
54
55
  private isDequeuing;
55
56
  private readonly queueDir;
56
57
  private readonly inFlightTaskIds;
58
+ private readonly budgetAlerts;
57
59
  constructor(options?: SchedulerOptions);
58
60
  register(task: ScheduledTask): void;
59
61
  unregister(taskId: string): void;
@@ -1,5 +1,7 @@
1
1
  import type { ScheduledTask } from './triggers.js';
2
2
  import type { GateDecision } from './gates.js';
3
3
  import type { TelemetryRecord, TelemetryTrigger } from './scheduler.js';
4
+ import { type BudgetGateSkip } from './budget-gate.js';
4
5
  export declare function makeOverlapSkipRecord(task: ScheduledTask, trigger: TelemetryTrigger, nowMs: number): TelemetryRecord;
6
+ export declare function makeBudgetSkipRecord(task: ScheduledTask, trigger: TelemetryTrigger, nowMs: number, skip: BudgetGateSkip): TelemetryRecord;
5
7
  export declare function makeSessionStartSkipRecord(task: ScheduledTask, decision: GateDecision, nowMs: number): TelemetryRecord;
@@ -0,0 +1,17 @@
1
+ import type { TelemetryRecord, TelemetryTrigger } from './scheduler.js';
2
+ export declare const TOOL_HEALTH_LOOKBACK_MS: number;
3
+ export declare const TOOL_HEALTH_MIN_SESSIONS = 2;
4
+ export declare const TOOL_HEALTH_COOLDOWN_MS: number;
5
+ export declare const TOOL_HEALTH_MAX_FILES = 200;
6
+ export interface ToolHealthTaskOptions {
7
+ now: () => number;
8
+ telemetryPath: () => string;
9
+ writeTelemetry: (record: TelemetryRecord) => void;
10
+ lookbackMs?: number;
11
+ alertStatePath?: string;
12
+ }
13
+ export declare function runBuiltinToolHealthTask(task: {
14
+ taskId: string;
15
+ command: string;
16
+ cronExpression?: string;
17
+ }, trigger: TelemetryTrigger, options: ToolHealthTaskOptions): Promise<TelemetryRecord>;
@@ -1,6 +1,6 @@
1
1
  export type TriggerMode = 'cron' | 'sessionstart' | 'both' | 'pull';
2
2
  export type TaskExecutor = 'agent' | 'shell' | 'builtin';
3
- export declare const KNOWN_BUILTINS: readonly ["worktree-prune"];
3
+ export declare const KNOWN_BUILTINS: readonly ["worktree-prune", "tool-health"];
4
4
  export type BuiltinTaskName = (typeof KNOWN_BUILTINS)[number];
5
5
  export interface ScheduledTask {
6
6
  taskId: string;
@@ -34,6 +34,14 @@ export declare const StoredSessionInputSchema: z.ZodObject<{
34
34
  model: z.ZodString;
35
35
  startedAt: z.ZodNumber;
36
36
  savedAt: z.ZodNumber;
37
+ endedAt: z.ZodOptional<z.ZodNumber>;
38
+ exitReason: z.ZodOptional<z.ZodEnum<{
39
+ sigint: "sigint";
40
+ sigterm: "sigterm";
41
+ sighup: "sighup";
42
+ "exit-command": "exit-command";
43
+ eof: "eof";
44
+ }>>;
37
45
  totalTurns: z.ZodNumber;
38
46
  totalCostUsd: z.ZodOptional<z.ZodNumber>;
39
47
  totalTokens: z.ZodOptional<z.ZodNumber>;
@@ -106,7 +114,7 @@ export declare const YieldTrackingSchema: z.ZodObject<{
106
114
  is_scheduled_session: z.ZodBoolean;
107
115
  produced_pr: z.ZodNullable<z.ZodBoolean>;
108
116
  pr_merged: z.ZodNullable<z.ZodBoolean>;
109
- pr_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
117
+ pr_url: z.ZodDefault<z.ZodNullable<z.ZodString>>;
110
118
  }, z.core.$strip>;
111
119
  export type YieldTracking = z.infer<typeof YieldTrackingSchema>;
112
120
  export declare const SubagentToolSummarySchema: z.ZodObject<{
@@ -197,7 +205,7 @@ export declare const SessionFacetSchema: z.ZodObject<{
197
205
  is_scheduled_session: z.ZodBoolean;
198
206
  produced_pr: z.ZodNullable<z.ZodBoolean>;
199
207
  pr_merged: z.ZodNullable<z.ZodBoolean>;
200
- pr_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
208
+ pr_url: z.ZodDefault<z.ZodNullable<z.ZodString>>;
201
209
  }, z.core.$strip>;
202
210
  decisions: z.ZodArray<z.ZodString>;
203
211
  evidence_pointers: z.ZodArray<z.ZodString>;
@@ -27,8 +27,8 @@ export declare const VerifiedOutcomeSchema: z.ZodObject<{
27
27
  session_id: z.ZodString;
28
28
  label: z.ZodEnum<{
29
29
  failed: "failed";
30
- succeeded: "succeeded";
31
30
  unknown: "unknown";
31
+ succeeded: "succeeded";
32
32
  blocked: "blocked";
33
33
  interrupted: "interrupted";
34
34
  }>;
@@ -0,0 +1,39 @@
1
+ export type AdmissionEntry = {
2
+ readonly kind: 'human';
3
+ readonly seq: number;
4
+ readonly text: string;
5
+ readonly bytes: number;
6
+ } | {
7
+ readonly kind: 'peer';
8
+ readonly seq: number;
9
+ readonly text: string;
10
+ readonly bytes: number;
11
+ readonly senderId: string;
12
+ };
13
+ export interface AdmissionSnapshot {
14
+ readonly entries: readonly AdmissionEntry[];
15
+ readonly cutoff: number;
16
+ }
17
+ export interface AdmissionQueueOptions {
18
+ maxCount?: number;
19
+ maxBytes?: number;
20
+ maxPerSender?: number;
21
+ }
22
+ export declare class AdmissionQueue {
23
+ private readonly entries;
24
+ private readonly maxCount;
25
+ private readonly maxBytes;
26
+ private readonly maxPerSender;
27
+ private totalBytes;
28
+ private seq;
29
+ constructor(opts?: AdmissionQueueOptions);
30
+ get size(): number;
31
+ get pending(): boolean;
32
+ get full(): boolean;
33
+ submitHuman(text: string): boolean;
34
+ submitPeer(senderId: string, text: string): boolean;
35
+ snapshot(): AdmissionSnapshot;
36
+ drain(snap: AdmissionSnapshot): string;
37
+ clear(): void;
38
+ private canAdmit;
39
+ }
@@ -6,6 +6,7 @@ export interface SendResult {
6
6
  reason?: PeerRefusal;
7
7
  detail?: string;
8
8
  }
9
+ export declare function envelopeFilename(env: Pick<PeerEnvelope, 'ts' | 'messageId'>): string;
9
10
  export declare function writeEnvelope(env: PeerEnvelope): Promise<void>;
10
11
  export declare function listPending(sessionId: string): Promise<string[]>;
11
12
  export declare function claimPending(sessionId: string, file: string): Promise<PeerEnvelope | null>;
@@ -19,6 +20,7 @@ export declare function listHeld(sessionId: string): Promise<Array<{
19
20
  export declare function releaseHeld(sessionId: string, file: string): Promise<boolean>;
20
21
  export declare function dropHeld(sessionId: string, file: string): Promise<boolean>;
21
22
  export declare function countPending(sessionId: string): Promise<number>;
23
+ export declare function reclaimDelivered(sessionId: string, file: string): Promise<boolean>;
22
24
  export declare function findDeliveredEnvelope(sessionId: string, messageId: string): Promise<PeerEnvelope | null>;
23
25
  export declare function sweepPeerInboxes(opts: {
24
26
  liveSessionIds: ReadonlySet<string>;
@@ -142,6 +142,7 @@ export type ProviderEvent = {
142
142
  resetsAt?: Date;
143
143
  accountId?: string;
144
144
  autoResume?: boolean;
145
+ waitDeadline?: Date;
145
146
  } | {
146
147
  type: 'resumed';
147
148
  hotSwapped: boolean;
@@ -3,6 +3,7 @@ import type { AuthMode } from './types.js';
3
3
  export declare const EXTENDED_CACHE_TTL_BETA = "extended-cache-ttl-2025-04-11";
4
4
  export declare const OAUTH_BETA_HEADER = "claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,extended-cache-ttl-2025-04-11";
5
5
  export declare const EFFORT_BETA_HEADER = "effort-2025-11-24";
6
+ export declare const THINKING_BINDING_CONTROLS_BETA_HEADER = "thinking-binding-controls-2026-08-01";
6
7
  export declare const CLI_USER_AGENT = "claude-cli/2.1.280 (external, cli)";
7
8
  export declare const BILLING_HEADER_TEXT = "x-anthropic-billing-header: cc_version=2.1.280; cc_entrypoint=cli; cch=00000;";
8
9
  export declare function detectAuthMode(token: string): AuthMode;
@@ -15,5 +16,5 @@ export declare function buildClientOptions(token: string, mode: AuthMode, baseUr
15
16
  fetch?: typeof fetch;
16
17
  maxRetries: 0;
17
18
  };
18
- export declare function buildRequestHeaders(mode: AuthMode, sessionId: string, requestId: string, withEffort?: boolean, extendedCacheTtl?: boolean, withFast?: boolean): Record<string, string>;
19
+ export declare function buildRequestHeaders(mode: AuthMode, sessionId: string, requestId: string, withEffort?: boolean, extendedCacheTtl?: boolean, withFast?: boolean, withThinkingBindingControls?: boolean): Record<string, string>;
19
20
  export declare function buildSystemPrefix(mode: AuthMode): ContentBlockParam[] | null;
@@ -4,7 +4,9 @@ export interface BetaHeaderOptions {
4
4
  effort?: boolean;
5
5
  extendedCacheTtl?: boolean;
6
6
  fast?: boolean;
7
+ thinkingBindingControls?: boolean;
7
8
  effortEntry: string;
8
9
  extendedCacheEntry: string;
10
+ thinkingBindingControlsEntry?: string;
9
11
  }
10
12
  export declare function composeBetaHeader(options: BetaHeaderOptions): string | undefined;
@@ -0,0 +1,3 @@
1
+ export declare const KNOWN_DROP_REASONS: Set<string>;
2
+ export declare function warnOnDroppedThinkingBlocks(transformations: unknown, source: 'message_start' | 'message_delta'): void;
3
+ export declare function _resetWarnCountForTest(): void;
@@ -37,5 +37,5 @@ export interface OpenRoundContext {
37
37
  ttfbTimeoutMs: number;
38
38
  stallTimeoutMs: number;
39
39
  }
40
- export declare function buildRoundParams(input: Pick<RunTurnInput, 'model' | 'maxTokens' | 'messages' | 'system' | 'tools' | 'thinking' | 'effort' | 'temperature' | 'fastMode'>): AnthropicMessagesCreateParams;
40
+ export declare function buildRoundParams(input: Pick<RunTurnInput, 'model' | 'maxTokens' | 'messages' | 'system' | 'tools' | 'thinking' | 'effort' | 'temperature' | 'thinkingBlockBinding' | 'fastMode'>): AnthropicMessagesCreateParams;
41
41
  export declare function openRound({ input, turn, retry, ttfbTimeoutMs, stallTimeoutMs, }: OpenRoundContext): AsyncGenerator<ProviderEvent, OpenRoundResult, void>;
@@ -18,6 +18,7 @@ export interface TurnRequestInput {
18
18
  thinking?: RunTurnInput['thinking'];
19
19
  effort?: RunTurnInput['effort'];
20
20
  temperature?: number;
21
+ thinkingBlockBinding?: RunTurnInput['thinkingBlockBinding'];
21
22
  maxToolUseIterations?: number;
22
23
  softDeadlineMs?: number;
23
24
  traceWriter?: RunTurnInput['traceWriter'];
@@ -23,7 +23,9 @@ export interface AnthropicDirectQueryOptions {
23
23
  systemPrefix: ContentBlockParam[] | null;
24
24
  tokenRefresher?: () => Promise<Anthropic | null>;
25
25
  thinking?: import('@anthropic-ai/sdk/resources').ThinkingConfigParam;
26
+ rawThinkingConfig?: import('../../types/sdk-types.js').ThinkingConfig;
26
27
  effort?: import('../../types/sdk-types.js').EffortLevel;
28
+ rawEffort?: import('../../types/sdk-types.js').EffortLevel;
27
29
  temperature?: number;
28
30
  baseUrl?: string;
29
31
  maxToolUseIterations?: number;
@@ -9,7 +9,10 @@ export declare class AnthropicDirectQuery implements ProviderQuery {
9
9
  private readonly tools;
10
10
  private readonly systemPrefix;
11
11
  private readonly thinking?;
12
+ private readonly rawThinkingConfig?;
12
13
  private readonly effort?;
14
+ private readonly rawEffort?;
15
+ private readonly launchModel;
13
16
  private readonly temperature?;
14
17
  private readonly baseUrl?;
15
18
  private readonly maxToolUseIterations?;
@@ -16,6 +16,7 @@ export interface TurnDriverContext {
16
16
  readonly thinking: import('@anthropic-ai/sdk/resources').ThinkingConfigParam | undefined;
17
17
  readonly effort: import('../../types/sdk-types.js').EffortLevel | undefined;
18
18
  readonly temperature: number | undefined;
19
+ readonly thinkingBlockBinding: import('./types.js').RunTurnInput['thinkingBlockBinding'] | undefined;
19
20
  readonly baseUrl: string | undefined;
20
21
  readonly maxToolUseIterations: number | undefined;
21
22
  readonly softDeadlineMs: number | undefined;
@@ -17,6 +17,9 @@ export interface RunTurnInput {
17
17
  thinking?: ThinkingConfigParam;
18
18
  effort?: import('../../types/sdk-types.js').EffortLevel;
19
19
  temperature?: number;
20
+ thinkingBlockBinding?: {
21
+ prefix_mismatch_behavior: 'drop_block';
22
+ };
20
23
  fastMode?: boolean;
21
24
  baseUrl?: string;
22
25
  traceWriter?: import('../../trace/index.js').TraceSink;
@@ -51,7 +54,11 @@ export interface AnthropicMessagesCreateParams {
51
54
  messages: MessageParam[];
52
55
  system?: ContentBlockParam[] | string;
53
56
  tools?: WireToolDef[];
54
- thinking?: ThinkingConfigParam;
57
+ thinking?: ThinkingConfigParam & {
58
+ block_binding?: {
59
+ prefix_mismatch_behavior: 'drop_block';
60
+ };
61
+ };
55
62
  output_config?: {
56
63
  effort?: import('../../types/sdk-types.js').EffortLevel;
57
64
  };
@@ -1,8 +1,11 @@
1
1
  import type { ContentBlockParam, MessageParam, ThinkingConfigParam } from '@anthropic-ai/sdk/resources';
2
2
  import type { AgentConfig, ResumeHistoryTurn } from '../../types/config-types.js';
3
3
  import type { EffortLevel, ThinkingConfig } from '../../types/sdk-types.js';
4
+ export declare const isFable51: (model: string) => boolean;
4
5
  export { resolveAutoCompactThreshold } from '../shared/auto-compact.js';
5
- export declare function resolveAnthropicTemperature(temperature: number | undefined): number | undefined;
6
+ export declare function _resetWarnedTemperatureClampsForTest(): void;
7
+ export declare function isNonDefaultSamplingForbiddenModel(model: string | undefined): boolean;
8
+ export declare function resolveAnthropicTemperature(temperature: number | undefined, model?: string): number | undefined;
6
9
  export declare function resolveMaxTokens(config: AgentConfig, model: string): number;
7
10
  export declare function filterContentBlocks(raw: unknown[] | undefined): ContentBlockParam[];
8
11
  export declare function hasValidToolUsePairing(assistantBlocks: ContentBlockParam[], nextUserBlocks: ContentBlockParam[] | undefined): boolean;
@@ -0,0 +1,11 @@
1
+ import OpenAI from 'openai';
2
+ import { type OpenAIOneShotInput } from './oneshot.js';
3
+ export type { OpenAIOneShotInput } from './oneshot.js';
4
+ export interface CompleteWireClientOptions {
5
+ apiKey: string;
6
+ baseURL?: string;
7
+ defaultHeaders?: Record<string, string>;
8
+ maxRetries: number;
9
+ }
10
+ export type CompleteWireClientFactory = (opts: CompleteWireClientOptions) => OpenAI;
11
+ export declare function completeWithWire(input: OpenAIOneShotInput, clientFactory?: CompleteWireClientFactory): Promise<string>;
@@ -7,6 +7,7 @@ export type OneShotOpenAIClientFactory = (opts: {
7
7
  apiKey: string;
8
8
  baseURL?: string;
9
9
  defaultHeaders?: Record<string, string>;
10
+ maxRetries: number;
10
11
  }) => OpenAI;
11
12
  export declare function __setOpenAIOneShotClientFactory(factory: OneShotOpenAIClientFactory | null): void;
12
13
  export interface OpenAIOneShotInput {
@@ -8,3 +8,4 @@ export type OpenAIClientFactory = (opts: {
8
8
  export declare function __setOpenAIClientFactory(factory: OpenAIClientFactory | null): void;
9
9
  export declare function resolveClientFactory(): OpenAIClientFactory;
10
10
  export declare function buildOpenAIAdmissionFetch(baseURL: string | undefined): typeof fetch | undefined;
11
+ export declare function ledgerAccountForBaseUrl(baseURL: string | undefined): string;
@@ -3,6 +3,7 @@ import type { TraceSink } from '../../../trace/index.js';
3
3
  import type { IterationResult } from './stream-drive.js';
4
4
  export declare const OPENAI_COMPAT_OVERLOAD_EXHAUSTED_NOTICE: string;
5
5
  export declare function isOverloadErrorEvent(event: ProviderEvent): boolean;
6
+ export declare function overloadTrigger(event: ProviderEvent): 'status' | 'body';
6
7
  export interface OverloadPauseTierContext {
7
8
  surface: string | undefined;
8
9
  traceWriter: TraceSink | undefined;
@@ -27,6 +27,7 @@ export declare class ProviderRouter implements ProviderQuery {
27
27
  private pendingUserText;
28
28
  private pendingAssistantText;
29
29
  private lastSessionId;
30
+ private _beforeNextRound;
30
31
  constructor(args: ProviderRouterArgs, deps: ProviderRouterDeps);
31
32
  private resolveInner;
32
33
  private buildInner;
@@ -36,6 +37,7 @@ export declare class ProviderRouter implements ProviderQuery {
36
37
  [Symbol.asyncIterator](): AsyncGenerator<ProviderEvent, void, unknown>;
37
38
  private driveUntilInit;
38
39
  interrupt(reason?: import('../../abort-reason.js').ProviderAbortReason): Promise<void>;
40
+ setBeforeNextRound(cb: (() => string | undefined) | undefined): void;
39
41
  setModel(model?: string): Promise<void>;
40
42
  setPermissionMode(mode: string): Promise<void>;
41
43
  setCwd(cwd: string): void;
@@ -0,0 +1,4 @@
1
+ import type { ProviderUserTurn } from '../../provider.js';
2
+ export declare function stringifyUserContent(content: ProviderUserTurn['content']): string;
3
+ export declare function buildSwitchNotice(previousModel: string, currentModel: string, previousFamily: string | undefined, currentFamily: string): string;
4
+ export declare function prependNotice(content: ProviderUserTurn['content'], notice: string): ProviderUserTurn['content'];
@@ -1,4 +1,5 @@
1
1
  import type { ProviderCompactResult } from '../../provider.js';
2
+ import { type RetryInfo } from './transient-retry.js';
2
3
  export declare const COMPACT_SYSTEM_PROMPT: string;
3
4
  export declare const COMPACT_SUMMARY_HEADER = "[Compacted summary of earlier conversation]";
4
5
  export declare const COMPACT_ACK_TEXT = "Acknowledged. Continuing from the summary above.";
@@ -70,5 +71,8 @@ export interface CompactionCoreDeps<M> {
70
71
  abortInFlight?(): void;
71
72
  timeoutMs?: number;
72
73
  onSuccess?(info: CompactionSuccess<M>): void;
74
+ onRetry?(info: RetryInfo): void;
75
+ retrySleep?: (ms: number, signal: AbortSignal) => Promise<void>;
76
+ signal?: AbortSignal;
73
77
  }
74
78
  export declare function runCompactionCore<M>(deps: CompactionCoreDeps<M>): Promise<ProviderCompactResult>;
@@ -1,3 +1,4 @@
1
+ export declare const PEER_SYNC_INTERVAL_MS = 1000;
1
2
  export interface RateLimitSnapshot {
2
3
  requestsRemaining?: number;
3
4
  requestsLimit?: number;
@@ -8,8 +9,20 @@ export interface RateLimitSnapshot {
8
9
  outputTokensRemaining?: number;
9
10
  outputTokensResetAt?: number;
10
11
  }
12
+ export interface PeerRateLimitObservation {
13
+ requestsRemaining?: number;
14
+ requestsLimit?: number;
15
+ requestsResetAt?: number;
16
+ tokensRemaining?: number;
17
+ tokensLimit?: number;
18
+ tokensResetAt?: number;
19
+ frozenUntil?: number;
20
+ observedAt: number;
21
+ }
22
+ export type PeerRateLimitReader = () => PeerRateLimitObservation | undefined;
11
23
  export declare function estimateInputTokens(body: unknown): number;
12
24
  export declare class RateLimitBucket {
25
+ private readonly peerReader?;
13
26
  private requestsRemaining;
14
27
  private requestsResetAt;
15
28
  private requestsLimit;
@@ -18,10 +31,15 @@ export declare class RateLimitBucket {
18
31
  private inputTokensLimit;
19
32
  private outputTokensRemainingVal;
20
33
  private frozenUntil;
34
+ private lastObservedAt;
35
+ private peerSyncedAt;
36
+ constructor(peerReader?: PeerRateLimitReader | undefined);
21
37
  resetForTests(): void;
22
38
  get outputTokensRemaining(): number;
23
39
  update(snap: RateLimitSnapshot): void;
24
40
  freeze(retryAfterMs: number): void;
41
+ adoptPeer(peer: PeerRateLimitObservation, now?: number): void;
42
+ private syncPeer;
25
43
  private maybeResetWindows;
26
44
  acquirePermit(estimatedInputTokens: number, signal?: AbortSignal): Promise<void>;
27
45
  }
@@ -0,0 +1,3 @@
1
+ import { RateLimitBucket } from './rate-limit-bucket.js';
2
+ export declare function getRateLimitBucket(provider: string, account: string): RateLimitBucket;
3
+ export declare function resetRateLimitBucketsForTests(): void;
@@ -0,0 +1,18 @@
1
+ export declare const DEFAULT_TRANSIENT_MAX_RETRIES = 2;
2
+ export interface RetryInfo {
3
+ attempt: number;
4
+ delayMs: number;
5
+ error: unknown;
6
+ status?: number;
7
+ code?: string;
8
+ }
9
+ export interface TransientRetryOpts {
10
+ maxRetries?: number;
11
+ baseDelayMs?: number;
12
+ retryAfterCeilingMs?: number;
13
+ shouldStop?: () => boolean;
14
+ signal?: AbortSignal;
15
+ onRetry?: (info: RetryInfo) => void;
16
+ sleep?: (ms: number, signal: AbortSignal) => Promise<void>;
17
+ }
18
+ export declare function withTransientRetry<T>(attempt: () => Promise<T>, opts?: TransientRetryOpts): Promise<T>;
@@ -0,0 +1,3 @@
1
+ import type { TraceSink } from '../../trace/index.js';
2
+ import type { RetryInfo } from './transient-retry.js';
3
+ export declare function traceTransientRetry(traceWriter: TraceSink | undefined, source: string, maxRetries: number): (info: RetryInfo) => void;
@@ -15,6 +15,7 @@ export declare const CLAUDE_SONNET_ID = "claude-sonnet-4-6";
15
15
  export declare const CLAUDE_OPUS_ID = "claude-opus-5-5";
16
16
  export declare const CLAUDE_OPUS_55_ID = "claude-opus-5-5";
17
17
  export declare const CLAUDE_FABLE_5_ID = "claude-fable-5";
18
+ export declare const CLAUDE_FABLE_5_1_ID = "claude-fable-5-1";
18
19
  export declare const GROK_FLAGSHIP_ID = "grok-4.6";
19
20
  export declare const DEFAULT_SLOT_BINDINGS: ModelSlots;
20
21
  export declare const AUTO_SENTINEL = "auto";
@@ -28,6 +28,7 @@ export declare class StateStore {
28
28
  get(namespace: string, key: string): QueryRow | null;
29
29
  put(namespace: string, key: string, value: unknown, opts?: PutOpts, producer?: string): PutResult;
30
30
  cas(namespace: string, key: string, expectedVersion: number, value: unknown, opts?: PutOpts, producer?: string): CasResult;
31
+ insertIfAbsent(namespace: string, key: string, value: unknown, opts?: PutOpts): PutResult;
31
32
  del(namespace: string, key: string): DelResult;
32
33
  query(namespace: string, opts?: {
33
34
  key_prefix?: string;
@@ -0,0 +1,3 @@
1
+ import type { Surface } from '../awareness/types.js';
2
+ export declare function isSubagentAutoResumeEnvEnabled(): boolean;
3
+ export declare function resolveChildAutoResume(explicitCallerValue: boolean | undefined, childSurface: Surface | undefined): boolean;
@@ -2,6 +2,8 @@ import type { RepeatFailureGuard } from './repeat-failure-guard.js';
2
2
  import type { ToolCall, ToolResult } from '../providers/anthropic-direct/types.js';
3
3
  import type { SubagentExecutor } from './subagent-executor.js';
4
4
  import type { Batch } from './dispatch-batching.js';
5
+ import type { TraceSink } from '../trace/index.js';
6
+ import type { ToolHealthMonitor } from './tool-health-monitor.js';
5
7
  export interface IndexedCall {
6
8
  call: ToolCall;
7
9
  originalIndex: number;
@@ -14,6 +16,8 @@ export interface BatchExecDeps {
14
16
  sessionId: string | undefined;
15
17
  maxConcurrentSafeCalls: number;
16
18
  onActivity?: (activeIds: readonly string[]) => void;
19
+ toolHealthMonitor: ToolHealthMonitor;
20
+ traceWriter: TraceSink | undefined;
17
21
  }
18
22
  export declare function reconcileOutcomes(settled: PromiseSettledResult<{
19
23
  result: ToolResult;
@@ -75,6 +75,7 @@ export declare class SessionToolDispatcher implements ToolDispatcher {
75
75
  private readonly bashOutputTailReporter;
76
76
  private readonly gateState;
77
77
  private readonly repeatFailureGuard;
78
+ private readonly toolHealthMonitor;
78
79
  private readonly grantManager;
79
80
  constructor(opts: SessionToolDispatcherOptions);
80
81
  private get handlerContext();
@@ -5,6 +5,7 @@ import type { ToolActivityReporter } from '../providers/shared/tool-activity.js'
5
5
  import type { RepeatFailureGuard } from './repeat-failure-guard.js';
6
6
  import type { SubagentExecutor } from './subagent-executor.js';
7
7
  import type { ConcurrencyClassifier } from './types.js';
8
+ import type { ToolHealthMonitor } from './tool-health-monitor.js';
8
9
  export interface ExecuteBatchDeps {
9
10
  execute: (call: ToolCall) => Promise<ToolResult>;
10
11
  classifier: ConcurrencyClassifier;
@@ -18,5 +19,6 @@ export interface ExecuteBatchDeps {
18
19
  maxConcurrentSafeCalls: number;
19
20
  gateDeps: () => PreDispatchGateDeps;
20
21
  traceWriter: TraceSink | undefined;
22
+ toolHealthMonitor: ToolHealthMonitor;
21
23
  }
22
24
  export declare function executeBatchImpl(calls: ToolCall[], deps: ExecuteBatchDeps, onActivity?: ToolActivityReporter): Promise<ToolResult[]>;
@@ -6,6 +6,7 @@ export interface RepoContext {
6
6
  }
7
7
  export declare function resolveRepoContext(execFile: ExecFileFn, cwd: string): Promise<RepoContext>;
8
8
  export declare function sanitizeSlug(name: string): string;
9
+ export declare function detectRemoteDefaultRef(execFile: ExecFileFn, repoRoot: string): Promise<string | undefined>;
9
10
  export declare function resolveAnchorBaseRef(execFile: ExecFileFn, anchor: string): Promise<string>;
10
11
  export interface CreateManagedWorktreeArgs {
11
12
  execFile: ExecFileFn;
@@ -0,0 +1,26 @@
1
+ import type { ToolCall, ToolResult } from '../providers/anthropic-direct/types.js';
2
+ import type { TraceSink } from '../trace/index.js';
3
+ export declare const HEALTH_WINDOW_SIZE = 10;
4
+ export declare const HEALTH_MIN_SAMPLE = 8;
5
+ export declare const HEALTH_ERROR_RATE_THRESHOLD = 0.9;
6
+ export declare const HEALTH_DOMINANT_ERROR_THRESHOLD = 0.8;
7
+ export interface HealthVerdict {
8
+ readonly degraded: false;
9
+ }
10
+ export interface DegradedHealthVerdict {
11
+ readonly degraded: true;
12
+ readonly tool: string;
13
+ readonly errorHead: string;
14
+ readonly errorCount: number;
15
+ readonly callCount: number;
16
+ readonly notice: string;
17
+ readonly emitTrace: boolean;
18
+ }
19
+ export type HealthVerdictResult = HealthVerdict | DegradedHealthVerdict;
20
+ export declare class ToolHealthMonitor {
21
+ private readonly windows;
22
+ observe(call: ToolCall, result: ToolResult): HealthVerdictResult;
23
+ windowSizeFor(toolName: string): number;
24
+ }
25
+ export declare function emitToolDegraded(traceWriter: TraceSink | undefined, verdict: DegradedHealthVerdict): void;
26
+ export declare function applyToolHealth(monitor: ToolHealthMonitor, traceWriter: TraceSink | undefined, call: ToolCall, result: ToolResult): ToolResult;
@@ -0,0 +1,8 @@
1
+ import type { TraceSink } from '../trace/index.js';
2
+ import type { UsageRecord } from '../usage/usage-record.js';
3
+ import { type UsageEvaluation } from '../usage/usage-budget.js';
4
+ export declare function buildUsageNotice(ev: UsageEvaluation, now?: number): string | undefined;
5
+ export declare function evaluateDispatchUsage(provider: string, traceWriter: TraceSink | undefined, readRecord?: () => UsageRecord | undefined): Promise<string | undefined>;
6
+ export declare function evaluateDispatchUsageForModel(model: unknown, traceWriter: TraceSink | undefined): Promise<string | undefined>;
7
+ export declare function prependUsageNotice(notice: string | undefined, content: string): string;
8
+ export declare function prependUsageNotice(notice: string | undefined, content: unknown): unknown;