@agentproto/runtime 2.12.0 → 3.2.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.ts CHANGED
@@ -12,7 +12,7 @@ import { CostBudget, AuthProfile, CostBudgetScope } from '@agentproto/auth';
12
12
  export { CostBudget, CostBudgetScope } from '@agentproto/auth';
13
13
  import { R as ResolvedContextContinuityPolicy } from './context-continuity-ib9_bVYM.js';
14
14
  import { SandboxMode } from '@agentproto/command-sandbox';
15
- import { AdapterHandle, SetupField, AdapterResolver, AdapterLister, HarnessCapabilities, AdapterEntry } from '@agentproto/provider-kit';
15
+ import { AdapterHandle, SetupField, AdapterResolver, AdapterLister, CredsStore, HarnessCapabilities, AdapterEntry } from '@agentproto/provider-kit';
16
16
  import { R as ResolvedAuthSpec, D as DeclaredAdapterOption, A as AdapterAuthDescriptor } from './spawn-defaults-D4W661ui.js';
17
17
  export { a as AuthEcho, b as AuthResolutionError, C as CLAUDE_CODE_OAUTH_SOURCE, c as CredentialSource, d as DefaultsAdapterAuthConfig, e as DefaultsAdapterConfig, f as ResolveSubscriptionCredentialInput, g as ResolvedSpawnAuthMaterial, h as ResolvedSpawnDefaults, S as SpawnDefaultsConfig, i as SubscriptionCredentialResolution, j as SubscriptionSourceError, k as credentialFingerprint, n as normalizeSkillsOption, r as resolveAuthSpec, l as resolveSpawnDefaults, m as resolveSubscriptionCredential } from './spawn-defaults-D4W661ui.js';
18
18
  import { CatalogModelsQuery, CatalogModelsResponse } from './catalog-models.js';
@@ -22,6 +22,9 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
22
22
  import { SandboxProvider } from '@agentproto/sandbox';
23
23
  import { BrainManager, ExportedSessionLike } from '@agentproto/workspace-brain';
24
24
  export { BrainManager, BrainStats, IngestReport, IngestResult } from '@agentproto/workspace-brain';
25
+ import * as _agentproto_tool from '@agentproto/tool';
26
+ import { ToolContext } from '@agentproto/tool';
27
+ import { DriverHandle } from '@agentproto/driver';
25
28
  export { UserPreset, UserPresetsFile, deleteUserPreset, getUserPreset, listUserPresets, loadUserPresets, saveUserPreset, userPresetsPath } from './user-presets.js';
26
29
  import { ResolvedModel } from '@agentproto/model-catalog';
27
30
  import { FrameSink, E2eFrameSink } from '@agentproto/acp/tunnel';
@@ -722,10 +725,18 @@ interface ActivityPolicySlice {
722
725
  policyId: string;
723
726
  /** Representative session id (fan-in group[0]). */
724
727
  sessionId: string;
725
- /** The full fan-in group being watched. */
726
- sessionIds: readonly string[];
727
- /** Group members that have NOT yet finished their turn. */
728
- pending: readonly string[];
728
+ /**
729
+ * The full fan-in group being watched. OPTIONAL because supervisor state
730
+ * persisted before fan-in (WP6) predates this field legacy rows on disk
731
+ * carry only `sessionId`, and the type must not lie about that.
732
+ */
733
+ sessionIds?: readonly string[];
734
+ /**
735
+ * Group members that have NOT yet finished their turn. OPTIONAL for the
736
+ * same reason as `sessionIds`: pre-fan-in persisted supervisor state omits
737
+ * it.
738
+ */
739
+ pending?: readonly string[];
729
740
  status: "watching" | "queued" | "gating" | "acting" | "nudging" | "awaiting-ack" | "done" | "blocked" | "cancelled";
730
741
  startedAt: string;
731
742
  endedAt?: string;
@@ -1684,7 +1695,7 @@ declare function createTaskLedger(opts: {
1684
1695
  * and session_monitor MCP tool (long-poll multiplexed).
1685
1696
  */
1686
1697
 
1687
- type SessionEventType = "session:turn-end" | "session:awaiting-input" | "session:awaiting-input-flagged" | "session:awaiting-question-answered" | "session:permission-request" | "session:permission-resolved" | "session:exited" | "session:reaped" | "session:stalled" | "session:stall-cleared" | "session:watcher-attached" | "session:watcher-detached" | "session:bg-tasks-parked" | "session:bg-tasks-cleared" | "session:resumed" | "session:spawned" | "session:command-done" | "session:model-changed" | "session:config-changed" | "session:renamed" | "session:pinned-changed" | "policy:passed" | "policy:failed" | "policy:commit-ready" | "policy:committed" | "cron:fired" | "cron:succeeded" | "cron:failed" | "activity:changed" | "task:changed" | "workflow:gate-report" | "session:harness-warning";
1698
+ type SessionEventType = "session:turn-end" | "session:awaiting-input" | "session:awaiting-input-flagged" | "session:awaiting-question-answered" | "session:permission-request" | "session:permission-resolved" | "session:exited" | "session:reaped" | "session:stalled" | "session:stall-cleared" | "session:watcher-attached" | "session:watcher-detached" | "session:bg-tasks-parked" | "session:bg-tasks-cleared" | "session:resumed" | "session:spawned" | "session:command-done" | "session:model-changed" | "session:config-changed" | "session:renamed" | "session:pinned-changed" | "policy:passed" | "policy:failed" | "policy:commit-ready" | "policy:committed" | "cron:fired" | "cron:succeeded" | "cron:failed" | "activity:changed" | "task:changed" | "workflow:gate-report" | "workflow:suspended" | "workflow:suspend-resumed" | "session:harness-warning";
1688
1699
  /**
1689
1700
  * Fixed severity vocabulary for a judge-gate finding (WP-D). Deliberately
1690
1701
  * small and fixed so `policy_status` output is comparable across different
@@ -2343,6 +2354,31 @@ interface WorkflowApprovalResolvedEvent {
2343
2354
  note?: string;
2344
2355
  ts: string;
2345
2356
  }
2357
+ /**
2358
+ * Emitted by the workflow runner (`workflow-runner.ts`) when a `kind:
2359
+ * "suspend"` step parks its run awaiting an external event — the run's
2360
+ * status flips to `awaiting-input` with a durable `awaitingSuspend` record
2361
+ * (AIP-15 conformance rule 7), and `workflow_escalation_resolve`'s suspend
2362
+ * form resumes it. Same bus distribution as every other lifecycle event.
2363
+ */
2364
+ interface WorkflowSuspendedEvent {
2365
+ type: "workflow:suspended";
2366
+ runId: string;
2367
+ stepId: string;
2368
+ on: readonly string[];
2369
+ ts: string;
2370
+ }
2371
+ /**
2372
+ * Emitted by the workflow runner when a parked `kind: "suspend"` step is
2373
+ * resumed — live (the run continues) or after a daemon restart (the run's
2374
+ * execution could not resume and it is marked failed with a clear reason).
2375
+ */
2376
+ interface WorkflowSuspendResumedEvent {
2377
+ type: "workflow:suspend-resumed";
2378
+ runId: string;
2379
+ stepId: string;
2380
+ ts: string;
2381
+ }
2346
2382
  /**
2347
2383
  * Emitted when a `kind: "agent"` step's `harness` block declared a field the
2348
2384
  * spawn couldn't honor (today: `harness.tools` — no adapter exposes a
@@ -2357,7 +2393,7 @@ interface SessionHarnessWarningEvent {
2357
2393
  label?: string;
2358
2394
  ts: string;
2359
2395
  }
2360
- type SessionEvent = SessionTurnEndEvent | SessionAwaitingInputEvent | SessionAwaitingInputFlaggedEvent | SessionAwaitingQuestionAnsweredEvent | SessionPermissionRequestEvent | SessionPermissionResolvedEvent | SessionExitedEvent | SessionReapedEvent | SessionStalledEvent | SessionStallClearedEvent | SessionWatcherAttachedEvent | SessionWatcherDetachedEvent | SessionBgTasksParkedEvent | SessionBgTasksClearedEvent | SessionResumedEvent | SessionSpawnedEvent | SessionCommandDoneEvent | SessionModelChangedEvent | SessionConfigChangedEvent | SessionRenamedEvent | SessionPinnedEvent | PolicyPassedEvent | PolicyFailedEvent | PolicyCommitReadyEvent | PolicyCommittedEvent | CronFiredEvent | CronSucceededEvent | CronFailedEvent | ActivityChangedEvent | TaskChangedEvent | WorkflowGateReportEvent | WorkflowApprovalRequestedEvent | WorkflowApprovalResolvedEvent | SessionHarnessWarningEvent;
2396
+ type SessionEvent = SessionTurnEndEvent | SessionAwaitingInputEvent | SessionAwaitingInputFlaggedEvent | SessionAwaitingQuestionAnsweredEvent | SessionPermissionRequestEvent | SessionPermissionResolvedEvent | SessionExitedEvent | SessionReapedEvent | SessionStalledEvent | SessionStallClearedEvent | SessionWatcherAttachedEvent | SessionWatcherDetachedEvent | SessionBgTasksParkedEvent | SessionBgTasksClearedEvent | SessionResumedEvent | SessionSpawnedEvent | SessionCommandDoneEvent | SessionModelChangedEvent | SessionConfigChangedEvent | SessionRenamedEvent | SessionPinnedEvent | PolicyPassedEvent | PolicyFailedEvent | PolicyCommitReadyEvent | PolicyCommittedEvent | CronFiredEvent | CronSucceededEvent | CronFailedEvent | ActivityChangedEvent | TaskChangedEvent | WorkflowGateReportEvent | WorkflowApprovalRequestedEvent | WorkflowApprovalResolvedEvent | WorkflowSuspendedEvent | WorkflowSuspendResumedEvent | SessionHarnessWarningEvent;
2361
2397
  interface SessionEventBus {
2362
2398
  emit(ev: SessionEvent): void;
2363
2399
  /** Subscribe to a specific event type. Returns an unsubscribe fn. */
@@ -2368,6 +2404,45 @@ interface SessionEventBus {
2368
2404
  onAny(handler: (ev: SessionEvent) => void): () => void;
2369
2405
  }
2370
2406
 
2407
+ /**
2408
+ * Runtime-side glue for the per-workspace brain: a shared registry of
2409
+ * {@link BrainManager}s (one per workspace bucket) plus the two bridges that
2410
+ * connect the pure `@agentproto/workspace-brain` engine to this daemon's real
2411
+ * conversation stores:
2412
+ *
2413
+ * - `readSessionForBrain` — a session id → exported transcript, via the same
2414
+ * ladder as `conversation-read.ts`: the provider-native store first
2415
+ * (`CONVERSATION_STORES`), then the universal `events.jsonl` capture
2416
+ * (`exportDaemonEventsSession`). `null` when neither has anything.
2417
+ * - `resolveWorkspace` — a session id → the workspace bucket it was recorded
2418
+ * under (via the persisted `conversations.jsonl` index).
2419
+ *
2420
+ * The registry itself is keyed by bucket slug and creates each `BrainManager`
2421
+ * lazily, so a workspace that never produces a session pays nothing until its
2422
+ * first exit does.
2423
+ *
2424
+ * A workspace's knowledge backends are configured per-workspace by a
2425
+ * `knowledge.json` file at `<bucket>/knowledge.json` (see
2426
+ * {@link loadKnowledgeConfigForWorkspace}). No file → the brain's default
2427
+ * single `files` provider (identical to pre-config behavior); an invalid
2428
+ * file → warn + fall back to that default; never throws either way.
2429
+ */
2430
+
2431
+ /** The shared registry handed to both the subscriber and the MCP tools. */
2432
+ interface WorkspaceBrains {
2433
+ /** Get (creating lazily) the brain manager for a workspace bucket slug. */
2434
+ getBrain(workspace: string): BrainManager;
2435
+ /** Map a session id to the workspace bucket it was recorded under. */
2436
+ resolveWorkspace(sessionId: string): Promise<string | undefined>;
2437
+ /** Resolve an explicit workspace slug (or caller slug) to a safe bucket
2438
+ * slug — "default" when unregistered/absent (membership rule). */
2439
+ resolveWorkspaceSlug(workspace?: string, callerSlug?: string): string;
2440
+ }
2441
+ /** Resolve a session id to its exported transcript, native first then daemon
2442
+ * events — `null` (never throws) when neither store has anything readable. */
2443
+ declare function readSessionForBrain(sessionId: string): Promise<ExportedSessionLike | null>;
2444
+ declare function createWorkspaceBrains(): WorkspaceBrains;
2445
+
2371
2446
  /**
2372
2447
  * Shared types for pluggable tunnel providers.
2373
2448
  *
@@ -2759,6 +2834,23 @@ interface SandboxProviderHandle extends AdapterHandle {
2759
2834
  readonly setupFields?: readonly SetupField[];
2760
2835
  }
2761
2836
 
2837
+ /**
2838
+ * Slug-keyed sandbox provider registry — the sandbox family's counterpart to
2839
+ * `remote-providers/registry.ts`. `local` resolves in-process; everything
2840
+ * else is a dynamic import of `@agentproto/sandbox-<slug>` (e.g.
2841
+ * `@agentproto/sandbox-e2b`), wrapped with this registry's own capability/
2842
+ * setup metadata because those packages export a bare `@agentproto/sandbox`
2843
+ * `SandboxProvider` (just `boot()`) rather than a self-describing
2844
+ * adapter-kit handle the way the tunnel family's third-party packages do.
2845
+ *
2846
+ * `modal` and `daytona` are catalog placeholders — AIP-36 day-1 provider
2847
+ * ids with no published `@agentproto/sandbox-<slug>` package yet, so they
2848
+ * always resolve to `null` (status "supported") until one ships.
2849
+ */
2850
+
2851
+ /** Per-slug credentials, as stored by the creds store / setup tool. */
2852
+ type SandboxCreds = Record<string, string>;
2853
+
2762
2854
  /**
2763
2855
  * Sandbox family on top of `@agentproto/provider-kit` — mirrors
2764
2856
  * `tunnel-adapters.ts`. This module is the entire bridge between the
@@ -2802,6 +2894,21 @@ interface SandboxAdapterInfo {
2802
2894
  type SandboxProviderResolver = AdapterResolver<SandboxProviderHandle>;
2803
2895
  /** List every sandbox provider with its live status + capabilities. */
2804
2896
  type SandboxProviderLister = AdapterLister<SandboxAdapterInfo>;
2897
+ /** Build the sandbox-family creds store (per-slug, 0600). */
2898
+ declare function makeSandboxCredsStore(home?: string): CredsStore<SandboxCreds>;
2899
+ /**
2900
+ * Resolve a catalog slug to a concrete handle via the provider registry —
2901
+ * `local` in-process, `e2b`/`modal`/`daytona` dynamic-imported. Reads
2902
+ * stored creds first so `e2b` (and any future catalog entry) resolves
2903
+ * configured when possible; unconfigured slugs resolve to a descriptor-only
2904
+ * handle (listing never calls `start()`/`check()`). Throws on an unknown
2905
+ * slug so the kit's resolver wraps it to `null` ("supported but not
2906
+ * installed").
2907
+ */
2908
+ declare function makeSandboxResolver(credsStore: CredsStore<SandboxCreds>, opts?: {
2909
+ /** Injectable for tests — defaults to a real dynamic `import()`. */
2910
+ importPackage?: (packageName: string) => Promise<Record<string, unknown>>;
2911
+ }): SandboxProviderResolver;
2805
2912
 
2806
2913
  /**
2807
2914
  * Fire-and-forget webhook notifier for session lifecycle events.
@@ -2886,6 +2993,14 @@ interface InboundMessage {
2886
2993
  contactRef: string;
2887
2994
  /** Rendered user-turn text. */
2888
2995
  text: string;
2996
+ /** Human-readable name of the sender, when the ingress knows one.
2997
+ * Present => the routed turn is prefixed so the agent can tell senders
2998
+ * apart. Absent => the text is enqueued exactly as before. */
2999
+ displayName?: string;
3000
+ /** The surface the message came in on (`telegram`, `whatsapp`, `email`).
3001
+ * Distinct from `source`, which is a routing key, not something to show
3002
+ * an agent. */
3003
+ surface?: string;
2889
3004
  /** Raw agentpush events, forwarded to the spawn fallback template. */
2890
3005
  messages?: unknown[];
2891
3006
  }
@@ -2894,6 +3009,7 @@ interface InboundMessage {
2894
3009
  * method in directly. */
2895
3010
  type InboundEnqueuePrompt = (sessionId: string, text: string, opts?: {
2896
3011
  interrupt?: boolean;
3012
+ queue?: boolean;
2897
3013
  }) => Promise<void> | void;
2898
3014
  /** Whether `sessionId` is currently live enough to route into without a
2899
3015
  * restart first. */
@@ -3501,6 +3617,10 @@ interface SessionAppServeInfo {
3501
3617
  * window. False means the URL is the right address but the server had
3502
3618
  * not answered yet — retry the fetch rather than re-spawning. */
3503
3619
  ready: boolean;
3620
+ /** Error text from the in-box serve log when `ready` is false (e.g. the
3621
+ * server exited immediately because the UI root is missing). Absent when
3622
+ * the log holds no recognizable error or could not be read. */
3623
+ message?: string;
3504
3624
  }
3505
3625
 
3506
3626
  /**
@@ -3548,15 +3668,28 @@ type WorktreeField = boolean | {
3548
3668
  interface WorktreeRequest {
3549
3669
  slug?: string;
3550
3670
  base?: string;
3551
- /** Opt-in: return a real, registered session as soon as it's minted,
3552
- * provisioning the worktree in the BACKGROUND instead of blocking
3553
- * `agent_start`'s response on `git worktree add` + the repo's setup
3554
- * hooks (which can run minutes — see `session-spawn.ts`'s async-provision
3555
- * branch). Deliberately opt-in, not the default: existing callers that
3556
- * built on a synchronous ok/fail result (this package's own
3557
- * `worktree_provision_failed` test coverage among them) keep exactly
3558
- * today's behaviour unless they ask for the early return. Default
3559
- * false. */
3671
+ /** Return a real, registered session as soon as it's minted, provisioning
3672
+ * the worktree in the BACKGROUND instead of blocking `agent_start`'s
3673
+ * response on `git worktree add` + the repo's setup hooks (which can run
3674
+ * minutes — see `session-spawn.ts`'s async-provision branch).
3675
+ *
3676
+ * DEFAULTS TO TRUE for any spawn that provisions a worktree, UNLESS this
3677
+ * spawn also carries `wait` (which needs a first turn to block on — see
3678
+ * `worktree_async_wait_conflict` so the presence of `wait` alone falls
3679
+ * back to the synchronous path rather than conflicting by default). That
3680
+ * default is applied by `session-spawn.ts` itself (WP-H), not by this
3681
+ * field or `normalizeWorktreeField` — the normalizer leaves `async`
3682
+ * exactly as the caller sent it (`undefined` when omitted; see its own
3683
+ * test), so a caller inspecting the normalized request never sees a
3684
+ * value it didn't write. WP-H incident: the synchronous contract this
3685
+ * field opts OUT of — hold the RPC open for however long setup hooks
3686
+ * take, routinely minutes — is exactly what let a client's own request
3687
+ * timeout retry into a second live agent sharing the first one's
3688
+ * worktree (closed on the other side too — see `session-spawn.ts`'s
3689
+ * `findWorktreeLabelCwdCollision`, which now refuses that retry outright
3690
+ * rather than merely warning). Pass `false` explicitly to keep the old
3691
+ * blocking ok/fail contract (this package's own `worktree_provision_failed`
3692
+ * test coverage exercises it deliberately synchronous). */
3560
3693
  async?: boolean;
3561
3694
  }
3562
3695
  /** What the runtime hands the provisioner. `cwd` is where the session would
@@ -4605,6 +4738,16 @@ interface SessionDescriptor {
4605
4738
  command: string;
4606
4739
  pid: number | null;
4607
4740
  status: SessionStatus;
4741
+ /** Unambiguous liveness signal, stamped at read time (list()/get()/
4742
+ * findByIdOrName) — true iff `status` is "running" or "starting", the
4743
+ * same test the daemon uses internally (validateAgentTurn). Ephemeral:
4744
+ * never persisted, always recomputed from the row's status. Exists
4745
+ * because `status` alone is NOT liveness: a terminal row ("killed",
4746
+ * "exited", "error") is a record that exists, and HTTP 200 on
4747
+ * GET /sessions/:id only means the record exists — consumers that
4748
+ * treat res.ok as liveness must read `alive` (or GET /sessions/:id/alive)
4749
+ * instead. */
4750
+ alive?: boolean;
4608
4751
  startedAt: string;
4609
4752
  endedAt?: string;
4610
4753
  exitCode?: number;
@@ -4670,6 +4813,15 @@ interface SessionDescriptor {
4670
4813
  * completed) turn. Reset when the next turn starts. Tool-call enrichment
4671
4814
  * events sharing an id count only once. Ephemeral and never persisted. */
4672
4815
  toolCallsThisTurn?: number;
4816
+ /** Absolute path of this session's durable structured transcript
4817
+ * (`events.jsonl`), resolved from the SAME base dir the transcript
4818
+ * writer actually writes to (`sessions.eventsDir` config > the
4819
+ * hardcoded `~/.agentproto/sessions`) — never re-derived by the
4820
+ * caller. Ephemeral, stamped at read time (list/get) and at spawn;
4821
+ * never persisted. Lets an external client (`agent_start`'s spawn
4822
+ * response, Claude desktop sandbox, wait loops) discover WHERE the
4823
+ * transcript lives without guessing. */
4824
+ eventsPath?: string;
4673
4825
  /** Whether the underlying OS process is still alive. Computed via
4674
4826
  * `process.kill(pid, 0)` at read time (list()/get()) — cheap,
4675
4827
  * zero-overhead, standard POSIX check. Absent when `pid` is null
@@ -5417,6 +5569,11 @@ interface SessionDescriptor {
5417
5569
  remote?: boolean;
5418
5570
  /** Provider-assigned sandbox id (`BootedSandbox.sandboxId`), when `remote` is true. */
5419
5571
  sandboxId?: string;
5572
+ /** Sandbox provider slug (`agent_start.sandbox`'s provider, e.g. `"e2b"`,
5573
+ * `"local"`), when `remote` is true. Identifies WHERE the box lives, not
5574
+ * just THAT one exists — the VS Code panel's sandbox chip names it in its
5575
+ * tooltip alongside `sandboxId`. */
5576
+ sandboxProvider?: string;
5420
5577
  /** What session close does to the box (PR3 lifecycle) — `"kill"` (the
5421
5578
  * default, ephemeral) or `"pause"` (keeps `sandboxId` reconnectable via
5422
5579
  * `agent_start.sandbox.reuse`). Only set when `remote` is true. */
@@ -5430,6 +5587,16 @@ interface SessionDescriptor {
5430
5587
  * serve port, and the provider-resolved public URL. See
5431
5588
  * `sandbox-app-serve.ts`. */
5432
5589
  appServe?: SessionAppServeInfo;
5590
+ /** Last PROVIDER liveness verdict for this session's box (`sandboxId`'s
5591
+ * ledger row, stamped by `recordSandboxLiveness` — the route / the CLI /
5592
+ * a reconnect-not-found). Ephemeral read-time projection of the sandbox
5593
+ * ledger, same convention as `processAlive`: a remote session has no
5594
+ * local PID, so this is the only box-death signal the descriptor can
5595
+ * carry. Absent when the box was never probed (or the provider can't) —
5596
+ * and absent is NOT "alive". */
5597
+ sandboxAlive?: boolean;
5598
+ /** ISO instant `sandboxAlive` was computed (see its doc). */
5599
+ sandboxCheckedAt?: string;
5433
5600
  }
5434
5601
  /**
5435
5602
  * Lightweight panel projection of SessionDescriptor for the VS Code Sessions
@@ -5536,7 +5703,17 @@ interface SessionSummary {
5536
5703
  sandboxTeardown?: "kill" | "pause";
5537
5704
  sandboxPorts?: Record<number, string>;
5538
5705
  appServe?: SessionAppServeInfo;
5539
- }
5706
+ /** Read-time projection of the box's ledger liveness verdict — see
5707
+ * `SessionDescriptor.sandboxAlive`. */
5708
+ sandboxAlive?: boolean;
5709
+ sandboxCheckedAt?: string;
5710
+ }
5711
+ /** Bracketed-paste mode as last observed in a PTY's OUTPUT stream.
5712
+ * `"unknown"` means neither `\x1b[?2004h` nor `\x1b[?2004l` has been seen
5713
+ * yet for this session — callers must treat unknown the same as "off"
5714
+ * (i.e. never wrap) to avoid a regression for sessions/shells that don't
5715
+ * use bracketed paste at all. */
5716
+ type BracketedPasteMode = "on" | "off" | "unknown";
5540
5717
  /**
5541
5718
  * Thrown by the lazy resume path when a resumable session has already failed to
5542
5719
  * resume `MAX_RESUME_ATTEMPTS` times in a row (`canResume` false on a row that
@@ -6187,6 +6364,11 @@ interface SessionsRegistry {
6187
6364
  * Single-shot variant of attachPty().write — useful for MCP
6188
6365
  * tools that drive a session through tool calls. */
6189
6366
  writeTerminalInput(id: string, data: string): boolean;
6367
+ /** Last observed bracketed-paste mode for a PTY session, tracked from
6368
+ * the PTY's OUTPUT stream (see `scanBracketedPaste`). `"unknown"` for
6369
+ * a missing/non-PTY session or one that hasn't emitted either
6370
+ * `\x1b[?2004h`/`\x1b[?2004l` sequence yet. */
6371
+ getBracketedPasteMode(id: string): BracketedPasteMode;
6190
6372
  /** Snapshot the recent PTY byte buffer as one Buffer. Newest
6191
6373
  * bytes at the end; `lastBytes` caps the returned size from the
6192
6374
  * tail. Returns null when the session is missing or not a PTY. */
@@ -6522,6 +6704,9 @@ interface SpawnAgentInput {
6522
6704
  remote?: boolean;
6523
6705
  /** Provider-assigned sandbox id, when `remote` is true. */
6524
6706
  sandboxId?: string;
6707
+ /** Sandbox provider slug, when `remote` is true — see
6708
+ * `SessionDescriptor.sandboxProvider`. */
6709
+ sandboxProvider?: string;
6525
6710
  /** What session close does to the box, when `remote` is true — see
6526
6711
  * `SessionDescriptor.sandboxTeardown`. */
6527
6712
  sandboxTeardown?: "kill" | "pause";
@@ -6683,6 +6868,15 @@ interface RecordCommandInput {
6683
6868
  /** Id of the session that invoked this one, when the caller genuinely
6684
6869
  * knows it — see `SessionDescriptor.callerSessionId`. */
6685
6870
  callerSessionId?: string;
6871
+ /** Parent attribution + depth — same semantics as `SpawnPtyInput` /
6872
+ * `SpawnAgentInput` (orchestrator WP4): set when the command ran
6873
+ * through a scoped sub-gateway so `session_tree` shows the command
6874
+ * session under its invoker. */
6875
+ parentSessionId?: string;
6876
+ /** Recursion depth in the session tree — always recorded (`?? 0` when
6877
+ * absent) so subtree/depth logic never has to special-case a missing
6878
+ * value. Same semantics as `SpawnAgentInput.depth`. */
6879
+ depth?: number;
6686
6880
  }
6687
6881
  /** A pull request that a session successfully opened through a code-host
6688
6882
  * driver. `openedAt` is assigned by the registry so callers cannot claim a
@@ -6699,27 +6893,6 @@ interface RecordOpenedPrInput {
6699
6893
  url: string;
6700
6894
  }
6701
6895
 
6702
- /**
6703
- * MCP tools that expose browser service adapters (Camofox, Bureau, …) to
6704
- * agents connected to the daemon. Lets a remote operator start, stop, and
6705
- * inspect browser service sessions through the same MCP connection it uses
6706
- * for fs/exec/agent-cli.
6707
- *
6708
- * Five tools:
6709
- * browser_adapter_list discover available browser adapter ids + metadata
6710
- * start_browser ensure a browser adapter is up, register as a session
6711
- * stop_browser kill a running browser session
6712
- * list_browsers browse alive/recent browser sessions
6713
- * browser_status descriptor + live health probe for one session
6714
- *
6715
- * Auth: same as every other daemon tool — gated by the gateway's auth source.
6716
- *
6717
- * Injection pattern: `resolveBrowserAdapter` is passed in, not imported.
6718
- * This keeps the runtime package free of a hard dep on @agentproto/adapter-browser.
6719
- * The types below are minimal structural shapes — equivalent to `AgentSessionLike`
6720
- * in sessions.ts.
6721
- */
6722
-
6723
6896
  /**
6724
6897
  * Minimal shape of a BrowserAdapterInstance — structurally compatible with
6725
6898
  * @agentproto/adapter-browser's BrowserAdapterInstance. Kept local so the
@@ -7064,45 +7237,6 @@ interface InboundWatcher {
7064
7237
  shutdown(): void;
7065
7238
  }
7066
7239
 
7067
- /**
7068
- * Runtime-side glue for the per-workspace brain: a shared registry of
7069
- * {@link BrainManager}s (one per workspace bucket) plus the two bridges that
7070
- * connect the pure `@agentproto/workspace-brain` engine to this daemon's real
7071
- * conversation stores:
7072
- *
7073
- * - `readSessionForBrain` — a session id → exported transcript, via the same
7074
- * ladder as `conversation-read.ts`: the provider-native store first
7075
- * (`CONVERSATION_STORES`), then the universal `events.jsonl` capture
7076
- * (`exportDaemonEventsSession`). `null` when neither has anything.
7077
- * - `resolveWorkspace` — a session id → the workspace bucket it was recorded
7078
- * under (via the persisted `conversations.jsonl` index).
7079
- *
7080
- * The registry itself is keyed by bucket slug and creates each `BrainManager`
7081
- * lazily, so a workspace that never produces a session pays nothing until its
7082
- * first exit does.
7083
- *
7084
- * A workspace's knowledge backends are configured per-workspace by a
7085
- * `knowledge.json` file at `<bucket>/knowledge.json` (see
7086
- * {@link loadKnowledgeConfigForWorkspace}). No file → the brain's default
7087
- * single `files` provider (identical to pre-config behavior); an invalid
7088
- * file → warn + fall back to that default; never throws either way.
7089
- */
7090
-
7091
- /** The shared registry handed to both the subscriber and the MCP tools. */
7092
- interface WorkspaceBrains {
7093
- /** Get (creating lazily) the brain manager for a workspace bucket slug. */
7094
- getBrain(workspace: string): BrainManager;
7095
- /** Map a session id to the workspace bucket it was recorded under. */
7096
- resolveWorkspace(sessionId: string): Promise<string | undefined>;
7097
- /** Resolve an explicit workspace slug (or caller slug) to a safe bucket
7098
- * slug — "default" when unregistered/absent (membership rule). */
7099
- resolveWorkspaceSlug(workspace?: string, callerSlug?: string): string;
7100
- }
7101
- /** Resolve a session id to its exported transcript, native first then daemon
7102
- * events — `null` (never throws) when neither store has anything readable. */
7103
- declare function readSessionForBrain(sessionId: string): Promise<ExportedSessionLike | null>;
7104
- declare function createWorkspaceBrains(): WorkspaceBrains;
7105
-
7106
7240
  /**
7107
7241
  * MCP tools that expose the per-workspace brain to agents.
7108
7242
  *
@@ -7131,6 +7265,69 @@ interface RegisterBrainToolsOptions {
7131
7265
  }
7132
7266
  declare function registerBrainTools(server: McpServer, opts: RegisterBrainToolsOptions): void;
7133
7267
 
7268
+ declare const webSearchInputSchema: z.ZodObject<{
7269
+ query: z.ZodString;
7270
+ count: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
7271
+ country: z.ZodOptional<z.ZodString>;
7272
+ language: z.ZodOptional<z.ZodString>;
7273
+ freshness: z.ZodOptional<z.ZodEnum<{
7274
+ pd: "pd";
7275
+ pw: "pw";
7276
+ pm: "pm";
7277
+ py: "py";
7278
+ }>>;
7279
+ safesearch: z.ZodOptional<z.ZodEnum<{
7280
+ off: "off";
7281
+ strict: "strict";
7282
+ moderate: "moderate";
7283
+ }>>;
7284
+ }, z.core.$strip>;
7285
+ type WebSearchInput = z.infer<typeof webSearchInputSchema>;
7286
+ declare const webSearchOutputSchema: z.ZodObject<{
7287
+ provider: z.ZodEnum<{
7288
+ brave: "brave";
7289
+ serper: "serper";
7290
+ }>;
7291
+ results: z.ZodArray<z.ZodObject<{
7292
+ title: z.ZodString;
7293
+ url: z.ZodString;
7294
+ snippet: z.ZodOptional<z.ZodString>;
7295
+ position: z.ZodNumber;
7296
+ }, z.core.$strip>>;
7297
+ }, z.core.$strip>;
7298
+ type WebSearchOutput = z.infer<typeof webSearchOutputSchema>;
7299
+ type WebSearchResult = WebSearchOutput["results"][number];
7300
+ declare const webSearchTool: _agentproto_tool.ToolHandle<{
7301
+ query: string;
7302
+ count: number;
7303
+ country?: string | undefined;
7304
+ language?: string | undefined;
7305
+ freshness?: "pd" | "pw" | "pm" | "py" | undefined;
7306
+ safesearch?: "off" | "strict" | "moderate" | undefined;
7307
+ }, {
7308
+ provider: "brave" | "serper";
7309
+ results: {
7310
+ title: string;
7311
+ url: string;
7312
+ position: number;
7313
+ snippet?: string | undefined;
7314
+ }[];
7315
+ }, ToolContext>;
7316
+ declare function defineBraveSearchHttpDriver(): DriverHandle;
7317
+ declare function defineSerperHttpDriver(): DriverHandle;
7318
+ interface RegisterWebSearchToolsOptions {
7319
+ /** Injectable env (tests); default `process.env`. */
7320
+ env?: NodeJS.ProcessEnv;
7321
+ /** Injectable fetch (tests / live e2e); default `globalThis.fetch`. */
7322
+ fetch?: typeof fetch;
7323
+ }
7324
+ /**
7325
+ * Register the `web.search` MCP tool (`web_search`) when at least one
7326
+ * provider key is configured. With NEITHER key present, nothing is
7327
+ * registered — no broken tool is advertised, silently.
7328
+ */
7329
+ declare function registerWebSearchTools(server: McpServer, opts?: RegisterWebSearchToolsOptions): void;
7330
+
7134
7331
  /**
7135
7332
  * Workshop-brain subscriber — auto-ingest a workspace's conversations when its
7136
7333
  * sessions exit.
@@ -7544,6 +7741,189 @@ interface RegisterSandboxAttachToolOptions {
7544
7741
  /** Register the `sandbox_attach` MCP tool. */
7545
7742
  declare function registerSandboxAttachTool(server: McpServer, opts?: RegisterSandboxAttachToolOptions): void;
7546
7743
 
7744
+ /**
7745
+ * The sandbox ledger — `~/.agentproto/sandboxes.json`.
7746
+ *
7747
+ * The daemon KNOWS when it boots, pauses, reconnects to, or stops a sandbox
7748
+ * box (AIP-36 boot-and-drive, `session-spawn.ts`'s `bootSandboxAgentSession`
7749
+ * and the lifecycle teardown inside `SandboxAgentSessionProxy.close()`), but
7750
+ * it writes none of it down: finding a still-live sandboxId meant grepping
7751
+ * session descriptors for a `remote: true` stamp. This module is the
7752
+ * navigation half — one durable record per sandboxId:
7753
+ *
7754
+ * { sandboxId, provider, label?, state, cwd?, originSessionId?,
7755
+ * createdAt, updatedAt, expiresAt? }
7756
+ *
7757
+ * State machine: "booted" (fresh boot) → "connected" (reuse/attach) →
7758
+ * "paused" (proxy close() chose the pause teardown) | "stopped" (kill or
7759
+ * expiry). `expiresAt` is stamped at boot when the spec's lifecycle policy
7760
+ * carries a known idle window (`lifecycle.pause_after_idle` →
7761
+ * `SandboxLifecyclePolicy.pauseAfterIdleMs`) — the one expiry the daemon
7762
+ * actually knows about at boot time; a provider-side TTL the daemon never
7763
+ * sees is deliberately NOT guessed at here.
7764
+ *
7765
+ * Writes are ALWAYS best-effort: every helper swallows its own failures and
7766
+ * returns without throwing. A ledger error must never fail a spawn, a
7767
+ * pause, or a teardown — the ledger is an index over reality, never a
7768
+ * participant in it.
7769
+ *
7770
+ * Persistence style matches the daemon's other JSON stores
7771
+ * (`workspace-buckets.ts`, `saveWorkspacesConfig`): serialize → write to a
7772
+ * per-process-unique tmp file → rename over the target. A concurrent reader
7773
+ * never sees half a JSON object, and two in-flight writers never share a
7774
+ * tmp path (the pid-only suffix is not unique within one process — see the
7775
+ * 2026-08-14 registry-wipe write-up in `workspace-buckets.ts`).
7776
+ */
7777
+ /** Lifecycle states a ledger row can carry. `"gone"` is stamped when the
7778
+ * PROVIDER answers the box no longer exists (liveness probe 404 / a
7779
+ * reconnect failing with the provider's not-found error) — distinct from
7780
+ * `"stopped"` (WE tore it down) and from `"paused"` (the last thing WE
7781
+ * did, which a vanished box makes a lie). */
7782
+ type SandboxLedgerState = "booted" | "paused" | "connected" | "stopped" | "gone";
7783
+ interface SandboxLedgerEntry {
7784
+ sandboxId: string;
7785
+ provider: string;
7786
+ state: SandboxLedgerState;
7787
+ createdAt: string;
7788
+ updatedAt: string;
7789
+ label?: string;
7790
+ cwd?: string;
7791
+ /** The HOST session id that first booted / last reconnected to the box. */
7792
+ originSessionId?: string;
7793
+ /** ISO instant the box is expected to idle-expire — stamped only when the
7794
+ * boot knew a window (`lifecycle.pause_after_idle`). */
7795
+ expiresAt?: string;
7796
+ /** Last PROVIDER liveness probe verdict (`SandboxProvider.probe`) — the
7797
+ * only signal that distinguishes box death from session death. Absent
7798
+ * when never probed (or the provider can't probe): the ledger's `state`
7799
+ * alone is NOT trustworthy — a dead box looks paused until probed. */
7800
+ sandboxAlive?: boolean;
7801
+ /** ISO instant `sandboxAlive` was computed. */
7802
+ sandboxCheckedAt?: string;
7803
+ }
7804
+ /** `~/.agentproto/sandboxes.json`. `AGENTPROTO_SANDBOX_LEDGER` overrides
7805
+ * the path (tests, and a caller that wants a workspace-scoped ledger). */
7806
+ declare const sandboxLedgerPath: () => string;
7807
+ /** Rows currently on disk. `[]` for a missing/corrupt file — the same
7808
+ * "degrade to nothing rather than throw" contract as every other store
7809
+ * reader in this daemon. Never throws. */
7810
+ declare function readSandboxLedger(path?: string): SandboxLedgerEntry[];
7811
+ /**
7812
+ * Upsert (dedup by `sandboxId`) and persist. Sync + best-effort: the
7813
+ * lifecycle hooks that call this run inside teardown/finally paths where
7814
+ * Node won't await, and a failure here is a lost index row, never a lost
7815
+ * box. Swallows every error.
7816
+ */
7817
+ declare function upsertSandboxLedger(entry: SandboxLedgerEntry, path?: string): void;
7818
+ /** Remove a row by sandboxId. Returns whether a row was actually dropped
7819
+ * (read from the PRE-call disk state). Never throws. */
7820
+ declare function removeSandboxLedgerEntry(sandboxId: string, path?: string): boolean;
7821
+ /**
7822
+ * Stamp a boot or reconnect into the ledger — the spawn path's hook.
7823
+ * `state` is "booted" for a fresh boot, "connected" for a reuse/attach.
7824
+ * Best-effort: never throws, whatever happens.
7825
+ */
7826
+ declare function recordSandboxBoot(opts: {
7827
+ sandboxId: string;
7828
+ provider: string;
7829
+ state: "booted" | "connected";
7830
+ label?: string;
7831
+ cwd?: string;
7832
+ originSessionId?: string;
7833
+ expiresAt?: string;
7834
+ path?: string;
7835
+ }): void;
7836
+ /** Stamp a state transition ("paused"/"stopped"/"gone") for an existing row.
7837
+ * Best-effort: never throws. */
7838
+ declare function recordSandboxState(sandboxId: string, state: "paused" | "stopped" | "gone", path?: string): void;
7839
+ /** Stamp a PROVIDER liveness verdict onto an existing row — `sandboxAlive`
7840
+ * + `sandboxCheckedAt`, and when the verdict is death ALSO flip the row to
7841
+ * `"gone"` (the state alone was never evidence of death; the probe is).
7842
+ * Best-effort: never throws. */
7843
+ declare function recordSandboxLiveness(sandboxId: string, alive: boolean, path?: string): void;
7844
+ /** Backfill `originSessionId` once the HOST registry has minted the session
7845
+ * id the box was spawned for (the boot hook runs before that id exists).
7846
+ * Best-effort: never throws. */
7847
+ declare function recordSandboxOrigin(sandboxId: string, originSessionId: string, path?: string): void;
7848
+ type ReuseResolution = {
7849
+ kind: "resolved";
7850
+ sandboxId: string;
7851
+ entry: SandboxLedgerEntry;
7852
+ } | {
7853
+ kind: "ambiguous";
7854
+ candidates: SandboxLedgerEntry[];
7855
+ } | {
7856
+ kind: "unresolved";
7857
+ };
7858
+ /**
7859
+ * `reuse: "<label-or-id>"` resolution against the ledger (PLAN-D1 §3).
7860
+ *
7861
+ * A reuse token that exactly matches a row's `label`, or is a PREFIX of
7862
+ * exactly one row's `sandboxId`, resolves to that row's sandboxId. Several
7863
+ * matches → `ambiguous` (the caller must disambiguate — the error it
7864
+ * renders lists the candidates). No match at all → `unresolved`, and the
7865
+ * spawn path passes the token through unchanged so the provider's own
7866
+ * `connect()` failure surfaces exactly as it did before this module
7867
+ * existed.
7868
+ */
7869
+ declare function resolveReuseFromLedger(reuse: string, entries: readonly SandboxLedgerEntry[]): ReuseResolution;
7870
+
7871
+ /** Host session statuses after which a session can never use its box again. */
7872
+ declare const DEAD_SESSION_STATUSES: ReadonlySet<string>;
7873
+ /** One ledger row selected for gc, with the observed origin-session status. */
7874
+ interface SandboxGcCandidate {
7875
+ entry: SandboxLedgerEntry;
7876
+ sessionStatus: string;
7877
+ }
7878
+ /**
7879
+ * Select ledger entries whose origin session is error/killed/exited.
7880
+ * Rows already marked "stopped" are skipped (nothing left to tear down);
7881
+ * rows with no `originSessionId` are skipped too — their owning session
7882
+ * is unknown, so "orphan" cannot be established from this surface.
7883
+ */
7884
+ declare function collectGcCandidates(entries: readonly SandboxLedgerEntry[], sessionStatuses: ReadonlyMap<string, string>): SandboxGcCandidate[];
7885
+ /** Provider resolution + ledger targeting for the reaper — injectable so
7886
+ * tests can hand a fake provider and a tmp ledger path. */
7887
+ interface SandboxGcReapDeps {
7888
+ resolveProvider: (slug: string) => Promise<SandboxGcProviderHandle | null>;
7889
+ ledgerPath?: string;
7890
+ }
7891
+ /** The slice of `SandboxProviderHandle` the reaper needs. */
7892
+ interface SandboxGcProviderHandle {
7893
+ provider: {
7894
+ connect(sandboxId: string, spec: {
7895
+ provider: string;
7896
+ config: Record<string, unknown>;
7897
+ }, opts: {
7898
+ env: Record<string, string>;
7899
+ }): Promise<{
7900
+ sandboxId: string;
7901
+ stop(): Promise<void>;
7902
+ pause?(): Promise<void>;
7903
+ }>;
7904
+ };
7905
+ }
7906
+ type SandboxGcReapResult = {
7907
+ ok: true;
7908
+ action: "paused" | "stopped";
7909
+ } | {
7910
+ ok: false;
7911
+ error: string;
7912
+ };
7913
+ /**
7914
+ * Tear one ledger entry's box down on its provider and stamp the ledger.
7915
+ * `pause` keeps the box (pausing when the provider supports it, falling
7916
+ * back to a kill otherwise); the default kills. A connect failure that
7917
+ * reads as "box doesn't exist anymore" still stamps the row "stopped" so
7918
+ * the candidate stops re-appearing; other failures leave the row alone
7919
+ * (transient network must not mark a live box as reaped).
7920
+ */
7921
+ declare function reapGcEntry(entry: SandboxLedgerEntry, opts: {
7922
+ pause?: boolean;
7923
+ } & SandboxGcReapDeps): Promise<SandboxGcReapResult>;
7924
+ /** States that still name a box the gc might act on. */
7925
+ declare const GC_REAPABLE_STATES: readonly SandboxLedgerState[];
7926
+
7547
7927
  /**
7548
7928
  * Idle agent-session reaper (PR-6).
7549
7929
  *
@@ -9221,4 +9601,4 @@ interface GatewayHandle {
9221
9601
  */
9222
9602
  declare function createGateway(opts: CreateGatewayOptions): Promise<GatewayHandle>;
9223
9603
 
9224
- export { type ActivityKind, type ActivityListFilter, type ActivityPolicyLister, type ActivityProjector, type ActivityProjectorRegistry, type ActivityProjectorSession, type ActivityRecord, type ActivitySource, type ActivityState, type ActivityWaitingOn, type ActivityWorkflowLister, AdapterAuthDescriptor, type AdapterCapabilitiesLister, type AdapterInstallResult, type AdapterListEntry, type AgentAdapterInstaller, type AgentAdapterLister, type AgentAdapterResolver, type AgentSessionLike, type AgentStreamEvent, type AnthropicReaderConfig, AnthropicRemainingQuotaReader, type AttachPolicyInput, type AttachSandboxOpts, type AttachSandboxResult, AuthMethod, BUCKETS_ROOT, type BrowserAdapterHandle, type BrowserAdapterInfo, type BrowserAdapterLister, type BrowserAdapterResolver, BuildHeartbeatAgent, CanonicalPosture, type CatalogModelsLister, CatalogModelsQuery, CatalogModelsResponse, type CatalogProviderModel, type CatalogProviderModelsQuery, type CatalogProviderModelsResponse, type CatalogProviderPricing, type ClaudeNativeRef, type CommitSpec, type CompletionPolicySupervisor, ContextProfile, type ConversationIndexRecord, type ConversationNativeRef, type CostBudgetDecision, type CrashDetectSummary, type CrashReaperRegistry, type CreateGatewayOptions, type CreateOfferInput, type CreatedOffer, DEFAULT_BUCKET, DEFAULT_ORCHESTRATOR_TOOLS, DEFAULT_WORKTREE_ISOLATION, DeclaredAdapterOption, type DeclaredAdapterPreset, type EagerResumeFailReason, type EagerResumeOutcome, type EagerResumeSkipReason, type EagerResumeSummary, EffortLevel, type GateSpec, type GatewayHandle, type HarnessPreset, type HarnessPresetValidationDeps, HarnessPresetValidationError, type HarnessPresetsFile, type HermesNativeRef, INBOUND_PROVIDERS, type IdleReapSummary, type IdleReaperRegistry, type InboundEndpoint, type InboundEndpointStore, type InboundEndpointStoreOptions, type InboundEnqueuePrompt, type InboundIsSessionAlive, type InboundMessage, type InboundProvider, type InboundRestartSession, type InboundRouteMode, type InboundRouterDeps, type InboundRouterLog, type InboundSpawnForContact, type InboundWatcher, type JudgeGateSpec, LEGACY_SESSIONS_FILE, type LocatedConversation, type LocatedConversationByPath, type McpCredentialDeps, type MigrationMarker, type NormalizeInboundResult, type OnFailSpec, type OpenPrResolver, type OrchestratorGatewayDeps, type OrchestratorInjection, type OrchestratorInjector, type OrchestratorInjectorDeps, type OrchestratorMcpServerFactory, type OrchestratorScope, type OrphanReaperRegistry, PAIRINGS_VERSION, POSTURE_NATIVE_ALIASES, POSTURE_PREAMBLES, type PairingChannelContext, type PairingChannelHandle, type PairingChannelMode, type PairingRecord, type PairingRegistry, type PairingRegistryDeps, type PendingPermission, type PermissionRespondInput, type PermissionRespondResult, type PolicyRunState, type PolicyRunStatus, Posture, type PostureResolution, type PrResolvedState, type PrStateResolver, type PresetInfo, type PricingResolver, type QuotaReadableProfile, type QuotaStoreFile, type QuotaStoreOptions, type ReconnectLogGate, type RegisterBrainToolsOptions, type RegisterBrowserInput, type RegisterPairingToolsOptions, type RegisterSessionInput, type RemainingQuota, type RemainingQuotaReader, type ResolveNativeLinkInput, ResolvedAuthSpec, ResumeDisabledError, type RouteAwareLaunchConfig, type RouteAwareLaunchConfigInput, RouteSpec, type RuntimeMeta, SESSION_ID_ENV, type SandboxAdapterInfo, type SandboxConnectionDescriptor, type SandboxProviderCapabilities, type SandboxProviderHandle, type SandboxProviderLister, type SandboxProviderResolver, type ScopeTokenRegistry, SessionConfig, type SessionCurrentPhase, type SessionDescriptor, type SessionKind, type SessionObserver, type SessionSnapshots, type SessionStatus, type SessionUsage, type SessionWaitEvent, type SessionWaitResult, type SessionsRegistry, type ShellGateSpec, type SpawnAgentInput, type SpawnSessionInput, type StallWatchdogRegistry, type StallWatchdogSummary, type StoredProfileQuota, TASK_STATUSES, type TaskCaller, type TaskChangedEvent, type TaskClaimInput, type TaskCreateInput, type TaskGateOutcome, type TaskGateRunner, type TaskLedger, type TaskLedgerRegistry, type TaskLedgerSessionSlice, type TaskListFilter, type TaskRecord, type TaskStatus, type TaskUpdateInput, type TaskVerification, type TaskVerifySupervisor, type TaskWriteResult, type TokenPricing, type TransmitterBinding, type TransmitterBindingStore, type TunnelDescriptor, type TunnelProvider, type TunnelStatus, type UsageBucket, type UsageComputeInput, type UsageRollup, type UsageSnapshotRecord, type UsageSource, WORKSPACE_SLUG_ENV, WORKTREE_ISOLATION_ENV, type WatcherDescriptor, type WatcherStartInput, type WorkspaceBrainSubscriber, type WorkspaceBrainSubscriberOptions, type WorkspaceBrains, WorkspaceFs, type WorktreeAutoReclaimer, type WorktreeDecision, type WorktreeField, type WorktreeGcClass, type WorktreeGcOutcomeView, type WorktreeGcPlanEntryView, type WorktreeGcReclaimReason, type WorktreeGcResult, type WorktreeGcRunInput, type WorktreeGcRunner, WorktreeIsolationMode, type WorktreeProvisionOutcome, type WorktreeProvisionRequest, type WorktreeProvisioner, type WorktreeRequest, type WorktreeStatusLister, type WorktreeStatusView, activityCounts, addHarnessPreset, appendConversationRecord, attachSandbox, bucketDir, bucketSessionsFile, bucketTranscriptDir, buildCatalogProviderModels, buildMcpConfigSnippet, buildRouteAwareLaunchConfig, canonicalForModeId, claudeProjectSlug, composeSessionObservers, conversationIndexPath, createActivityProjector, createFileStepCache, createGateway, createInboundEndpointStore, createOrchestratorInjector, createOrchestratorMcpServerFactory, createPairingRegistry, createPrProvenanceReconciler, createReconnectLogGate, createScopeTokenRegistry, createSupervisorTaskGateRunner, createTaskLedger, createWorkspaceBrainSubscriber, createWorkspaceBrains, daemonRegistryDir, decideWorktreeIsolation, declaredPresetToProviderPreset, deriveSessionUsage, enrichRollupWithProviderQuota, enrichWithRemainingQuota, evaluateCostBudget, filterActivities, findConversationRecord, findNativeMode, formatToolCall, formatToolResult, getDefaultHarnessPreset, getHarnessPreset, getMcpCredentialDeps, harnessPresetsPath, isAgentCliAuthConfigured, isClosedTaskStatus, isSafeBucketSlug, isTerminalActivityState, listBuckets, listHarnessPresets, listPresets, loadHarnessPresets, loadQuotaStore, loadWorktreeIsolation, locateConversationByNativePath, locateConversationBySessionId, makeBrowserAdapterLister, migrateLegacySessionsFile, migrationMarkerPath, monitorPolicyWait, monitorSessionWait, narrowOrchestratorTools, normalizeInbound, normalizeModeId, normalizeWorktreeField, parseAnthropicRateLimitHeaders, parseTaskStatus, parseWindow, parseWorktreeIsolationMode, policyToActivities, policyWatchesSession, prToActivities, projectSessionUsage, readConversationIndex, readDaemonRegistry, readProfileQuota, readRegisteredSlugs, readRuntimeMeta, readSessionForBrain, readUsageSnapshots, reapOrphanedDescendants, recordProfileQuota, registerBrainTools, registerBuiltinRoutes, registerPairingTools, registerSandboxAttachTool, removeHarnessPreset, resolveBucketSlug, resolveNativeLink, resolvePosture, rollupUsage, runCrashDetectPass, runEagerResumePass, runIdleReapPass, runStallWatchdogPass, setDefaultPreset, setMcpCredentialDeps, sweepStaleDaemonRegistry, sweepStaleRuntimeMetas, toWorktreeStatusView, turnToActivities, unlinkDaemonRegistryEntry, unlinkRuntimeMeta, updateHarnessPreset, verifyInboundSignature, workflowToActivities, writeDaemonRegistryEntry };
9604
+ export { type ActivityKind, type ActivityListFilter, type ActivityPolicyLister, type ActivityProjector, type ActivityProjectorRegistry, type ActivityProjectorSession, type ActivityRecord, type ActivitySource, type ActivityState, type ActivityWaitingOn, type ActivityWorkflowLister, AdapterAuthDescriptor, type AdapterCapabilitiesLister, type AdapterInstallResult, type AdapterListEntry, type AgentAdapterInstaller, type AgentAdapterLister, type AgentAdapterResolver, type AgentSessionLike, type AgentStreamEvent, type AnthropicReaderConfig, AnthropicRemainingQuotaReader, type AttachPolicyInput, type AttachSandboxOpts, type AttachSandboxResult, AuthMethod, BUCKETS_ROOT, type BrowserAdapterHandle, type BrowserAdapterInfo, type BrowserAdapterLister, type BrowserAdapterResolver, BuildHeartbeatAgent, CanonicalPosture, type CatalogModelsLister, CatalogModelsQuery, CatalogModelsResponse, type CatalogProviderModel, type CatalogProviderModelsQuery, type CatalogProviderModelsResponse, type CatalogProviderPricing, type ClaudeNativeRef, type CommitSpec, type CompletionPolicySupervisor, ContextProfile, type ConversationIndexRecord, type ConversationNativeRef, type CostBudgetDecision, type CrashDetectSummary, type CrashReaperRegistry, type CreateGatewayOptions, type CreateOfferInput, type CreatedOffer, DEAD_SESSION_STATUSES, DEFAULT_BUCKET, DEFAULT_ORCHESTRATOR_TOOLS, DEFAULT_WORKTREE_ISOLATION, DeclaredAdapterOption, type DeclaredAdapterPreset, type EagerResumeFailReason, type EagerResumeOutcome, type EagerResumeSkipReason, type EagerResumeSummary, EffortLevel, GC_REAPABLE_STATES, type GateSpec, type GatewayHandle, type HarnessPreset, type HarnessPresetValidationDeps, HarnessPresetValidationError, type HarnessPresetsFile, type HermesNativeRef, INBOUND_PROVIDERS, type IdleReapSummary, type IdleReaperRegistry, type InboundEndpoint, type InboundEndpointStore, type InboundEndpointStoreOptions, type InboundEnqueuePrompt, type InboundIsSessionAlive, type InboundMessage, type InboundProvider, type InboundRestartSession, type InboundRouteMode, type InboundRouterDeps, type InboundRouterLog, type InboundSpawnForContact, type InboundWatcher, type JudgeGateSpec, LEGACY_SESSIONS_FILE, type LocatedConversation, type LocatedConversationByPath, type McpCredentialDeps, type MigrationMarker, type NormalizeInboundResult, type OnFailSpec, type OpenPrResolver, type OrchestratorGatewayDeps, type OrchestratorInjection, type OrchestratorInjector, type OrchestratorInjectorDeps, type OrchestratorMcpServerFactory, type OrchestratorScope, type OrphanReaperRegistry, PAIRINGS_VERSION, POSTURE_NATIVE_ALIASES, POSTURE_PREAMBLES, type PairingChannelContext, type PairingChannelHandle, type PairingChannelMode, type PairingRecord, type PairingRegistry, type PairingRegistryDeps, type PendingPermission, type PermissionRespondInput, type PermissionRespondResult, type PolicyRunState, type PolicyRunStatus, Posture, type PostureResolution, type PrResolvedState, type PrStateResolver, type PresetInfo, type PricingResolver, type QuotaReadableProfile, type QuotaStoreFile, type QuotaStoreOptions, type ReconnectLogGate, type RegisterBrainToolsOptions, type RegisterBrowserInput, type RegisterPairingToolsOptions, type RegisterSessionInput, type RegisterWebSearchToolsOptions, type RemainingQuota, type RemainingQuotaReader, type ResolveNativeLinkInput, ResolvedAuthSpec, ResumeDisabledError, type ReuseResolution, type RouteAwareLaunchConfig, type RouteAwareLaunchConfigInput, RouteSpec, type RuntimeMeta, SESSION_ID_ENV, type SandboxAdapterInfo, type SandboxConnectionDescriptor, type SandboxGcCandidate, type SandboxGcProviderHandle, type SandboxGcReapDeps, type SandboxGcReapResult, type SandboxLedgerEntry, type SandboxLedgerState, type SandboxProviderCapabilities, type SandboxProviderHandle, type SandboxProviderLister, type SandboxProviderResolver, type ScopeTokenRegistry, SessionConfig, type SessionCurrentPhase, type SessionDescriptor, type SessionKind, type SessionObserver, type SessionSnapshots, type SessionStatus, type SessionUsage, type SessionWaitEvent, type SessionWaitResult, type SessionsRegistry, type ShellGateSpec, type SpawnAgentInput, type SpawnSessionInput, type StallWatchdogRegistry, type StallWatchdogSummary, type StoredProfileQuota, TASK_STATUSES, type TaskCaller, type TaskChangedEvent, type TaskClaimInput, type TaskCreateInput, type TaskGateOutcome, type TaskGateRunner, type TaskLedger, type TaskLedgerRegistry, type TaskLedgerSessionSlice, type TaskListFilter, type TaskRecord, type TaskStatus, type TaskUpdateInput, type TaskVerification, type TaskVerifySupervisor, type TaskWriteResult, type TokenPricing, type TransmitterBinding, type TransmitterBindingStore, type TunnelDescriptor, type TunnelProvider, type TunnelStatus, type UsageBucket, type UsageComputeInput, type UsageRollup, type UsageSnapshotRecord, type UsageSource, WORKSPACE_SLUG_ENV, WORKTREE_ISOLATION_ENV, type WatcherDescriptor, type WatcherStartInput, type WebSearchInput, type WebSearchOutput, type WebSearchResult, type WorkspaceBrainSubscriber, type WorkspaceBrainSubscriberOptions, type WorkspaceBrains, WorkspaceFs, type WorktreeAutoReclaimer, type WorktreeDecision, type WorktreeField, type WorktreeGcClass, type WorktreeGcOutcomeView, type WorktreeGcPlanEntryView, type WorktreeGcReclaimReason, type WorktreeGcResult, type WorktreeGcRunInput, type WorktreeGcRunner, WorktreeIsolationMode, type WorktreeProvisionOutcome, type WorktreeProvisionRequest, type WorktreeProvisioner, type WorktreeRequest, type WorktreeStatusLister, type WorktreeStatusView, activityCounts, addHarnessPreset, appendConversationRecord, attachSandbox, bucketDir, bucketSessionsFile, bucketTranscriptDir, buildCatalogProviderModels, buildMcpConfigSnippet, buildRouteAwareLaunchConfig, canonicalForModeId, claudeProjectSlug, collectGcCandidates, composeSessionObservers, conversationIndexPath, createActivityProjector, createFileStepCache, createGateway, createInboundEndpointStore, createOrchestratorInjector, createOrchestratorMcpServerFactory, createPairingRegistry, createPrProvenanceReconciler, createReconnectLogGate, createScopeTokenRegistry, createSupervisorTaskGateRunner, createTaskLedger, createWorkspaceBrainSubscriber, createWorkspaceBrains, daemonRegistryDir, decideWorktreeIsolation, declaredPresetToProviderPreset, defineBraveSearchHttpDriver, defineSerperHttpDriver, deriveSessionUsage, enrichRollupWithProviderQuota, enrichWithRemainingQuota, evaluateCostBudget, filterActivities, findConversationRecord, findNativeMode, formatToolCall, formatToolResult, getDefaultHarnessPreset, getHarnessPreset, getMcpCredentialDeps, harnessPresetsPath, isAgentCliAuthConfigured, isClosedTaskStatus, isSafeBucketSlug, isTerminalActivityState, listBuckets, listHarnessPresets, listPresets, loadHarnessPresets, loadQuotaStore, loadWorktreeIsolation, locateConversationByNativePath, locateConversationBySessionId, makeBrowserAdapterLister, makeSandboxCredsStore, makeSandboxResolver, migrateLegacySessionsFile, migrationMarkerPath, monitorPolicyWait, monitorSessionWait, narrowOrchestratorTools, normalizeInbound, normalizeModeId, normalizeWorktreeField, parseAnthropicRateLimitHeaders, parseTaskStatus, parseWindow, parseWorktreeIsolationMode, policyToActivities, policyWatchesSession, prToActivities, projectSessionUsage, readConversationIndex, readDaemonRegistry, readProfileQuota, readRegisteredSlugs, readRuntimeMeta, readSandboxLedger, readSessionForBrain, readUsageSnapshots, reapGcEntry, reapOrphanedDescendants, recordProfileQuota, recordSandboxBoot, recordSandboxLiveness, recordSandboxOrigin, recordSandboxState, registerBrainTools, registerBuiltinRoutes, registerPairingTools, registerSandboxAttachTool, registerWebSearchTools, removeHarnessPreset, removeSandboxLedgerEntry, resolveBucketSlug, resolveNativeLink, resolvePosture, resolveReuseFromLedger, rollupUsage, runCrashDetectPass, runEagerResumePass, runIdleReapPass, runStallWatchdogPass, sandboxLedgerPath, setDefaultPreset, setMcpCredentialDeps, sweepStaleDaemonRegistry, sweepStaleRuntimeMetas, toWorktreeStatusView, turnToActivities, unlinkDaemonRegistryEntry, unlinkRuntimeMeta, updateHarnessPreset, upsertSandboxLedger, verifyInboundSignature, webSearchTool, workflowToActivities, writeDaemonRegistryEntry };