@agentproto/runtime 2.12.0 → 3.1.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.
@@ -4670,6 +4777,15 @@ interface SessionDescriptor {
4670
4777
  * completed) turn. Reset when the next turn starts. Tool-call enrichment
4671
4778
  * events sharing an id count only once. Ephemeral and never persisted. */
4672
4779
  toolCallsThisTurn?: number;
4780
+ /** Absolute path of this session's durable structured transcript
4781
+ * (`events.jsonl`), resolved from the SAME base dir the transcript
4782
+ * writer actually writes to (`sessions.eventsDir` config > the
4783
+ * hardcoded `~/.agentproto/sessions`) — never re-derived by the
4784
+ * caller. Ephemeral, stamped at read time (list/get) and at spawn;
4785
+ * never persisted. Lets an external client (`agent_start`'s spawn
4786
+ * response, Claude desktop sandbox, wait loops) discover WHERE the
4787
+ * transcript lives without guessing. */
4788
+ eventsPath?: string;
4673
4789
  /** Whether the underlying OS process is still alive. Computed via
4674
4790
  * `process.kill(pid, 0)` at read time (list()/get()) — cheap,
4675
4791
  * zero-overhead, standard POSIX check. Absent when `pid` is null
@@ -5537,6 +5653,12 @@ interface SessionSummary {
5537
5653
  sandboxPorts?: Record<number, string>;
5538
5654
  appServe?: SessionAppServeInfo;
5539
5655
  }
5656
+ /** Bracketed-paste mode as last observed in a PTY's OUTPUT stream.
5657
+ * `"unknown"` means neither `\x1b[?2004h` nor `\x1b[?2004l` has been seen
5658
+ * yet for this session — callers must treat unknown the same as "off"
5659
+ * (i.e. never wrap) to avoid a regression for sessions/shells that don't
5660
+ * use bracketed paste at all. */
5661
+ type BracketedPasteMode = "on" | "off" | "unknown";
5540
5662
  /**
5541
5663
  * Thrown by the lazy resume path when a resumable session has already failed to
5542
5664
  * resume `MAX_RESUME_ATTEMPTS` times in a row (`canResume` false on a row that
@@ -6187,6 +6309,11 @@ interface SessionsRegistry {
6187
6309
  * Single-shot variant of attachPty().write — useful for MCP
6188
6310
  * tools that drive a session through tool calls. */
6189
6311
  writeTerminalInput(id: string, data: string): boolean;
6312
+ /** Last observed bracketed-paste mode for a PTY session, tracked from
6313
+ * the PTY's OUTPUT stream (see `scanBracketedPaste`). `"unknown"` for
6314
+ * a missing/non-PTY session or one that hasn't emitted either
6315
+ * `\x1b[?2004h`/`\x1b[?2004l` sequence yet. */
6316
+ getBracketedPasteMode(id: string): BracketedPasteMode;
6190
6317
  /** Snapshot the recent PTY byte buffer as one Buffer. Newest
6191
6318
  * bytes at the end; `lastBytes` caps the returned size from the
6192
6319
  * tail. Returns null when the session is missing or not a PTY. */
@@ -6683,6 +6810,15 @@ interface RecordCommandInput {
6683
6810
  /** Id of the session that invoked this one, when the caller genuinely
6684
6811
  * knows it — see `SessionDescriptor.callerSessionId`. */
6685
6812
  callerSessionId?: string;
6813
+ /** Parent attribution + depth — same semantics as `SpawnPtyInput` /
6814
+ * `SpawnAgentInput` (orchestrator WP4): set when the command ran
6815
+ * through a scoped sub-gateway so `session_tree` shows the command
6816
+ * session under its invoker. */
6817
+ parentSessionId?: string;
6818
+ /** Recursion depth in the session tree — always recorded (`?? 0` when
6819
+ * absent) so subtree/depth logic never has to special-case a missing
6820
+ * value. Same semantics as `SpawnAgentInput.depth`. */
6821
+ depth?: number;
6686
6822
  }
6687
6823
  /** A pull request that a session successfully opened through a code-host
6688
6824
  * driver. `openedAt` is assigned by the registry so callers cannot claim a
@@ -6699,27 +6835,6 @@ interface RecordOpenedPrInput {
6699
6835
  url: string;
6700
6836
  }
6701
6837
 
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
6838
  /**
6724
6839
  * Minimal shape of a BrowserAdapterInstance — structurally compatible with
6725
6840
  * @agentproto/adapter-browser's BrowserAdapterInstance. Kept local so the
@@ -7064,45 +7179,6 @@ interface InboundWatcher {
7064
7179
  shutdown(): void;
7065
7180
  }
7066
7181
 
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
7182
  /**
7107
7183
  * MCP tools that expose the per-workspace brain to agents.
7108
7184
  *
@@ -7131,6 +7207,69 @@ interface RegisterBrainToolsOptions {
7131
7207
  }
7132
7208
  declare function registerBrainTools(server: McpServer, opts: RegisterBrainToolsOptions): void;
7133
7209
 
7210
+ declare const webSearchInputSchema: z.ZodObject<{
7211
+ query: z.ZodString;
7212
+ count: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
7213
+ country: z.ZodOptional<z.ZodString>;
7214
+ language: z.ZodOptional<z.ZodString>;
7215
+ freshness: z.ZodOptional<z.ZodEnum<{
7216
+ pd: "pd";
7217
+ pw: "pw";
7218
+ pm: "pm";
7219
+ py: "py";
7220
+ }>>;
7221
+ safesearch: z.ZodOptional<z.ZodEnum<{
7222
+ off: "off";
7223
+ strict: "strict";
7224
+ moderate: "moderate";
7225
+ }>>;
7226
+ }, z.core.$strip>;
7227
+ type WebSearchInput = z.infer<typeof webSearchInputSchema>;
7228
+ declare const webSearchOutputSchema: z.ZodObject<{
7229
+ provider: z.ZodEnum<{
7230
+ brave: "brave";
7231
+ serper: "serper";
7232
+ }>;
7233
+ results: z.ZodArray<z.ZodObject<{
7234
+ title: z.ZodString;
7235
+ url: z.ZodString;
7236
+ snippet: z.ZodOptional<z.ZodString>;
7237
+ position: z.ZodNumber;
7238
+ }, z.core.$strip>>;
7239
+ }, z.core.$strip>;
7240
+ type WebSearchOutput = z.infer<typeof webSearchOutputSchema>;
7241
+ type WebSearchResult = WebSearchOutput["results"][number];
7242
+ declare const webSearchTool: _agentproto_tool.ToolHandle<{
7243
+ query: string;
7244
+ count: number;
7245
+ country?: string | undefined;
7246
+ language?: string | undefined;
7247
+ freshness?: "pd" | "pw" | "pm" | "py" | undefined;
7248
+ safesearch?: "off" | "strict" | "moderate" | undefined;
7249
+ }, {
7250
+ provider: "brave" | "serper";
7251
+ results: {
7252
+ title: string;
7253
+ url: string;
7254
+ position: number;
7255
+ snippet?: string | undefined;
7256
+ }[];
7257
+ }, ToolContext>;
7258
+ declare function defineBraveSearchHttpDriver(): DriverHandle;
7259
+ declare function defineSerperHttpDriver(): DriverHandle;
7260
+ interface RegisterWebSearchToolsOptions {
7261
+ /** Injectable env (tests); default `process.env`. */
7262
+ env?: NodeJS.ProcessEnv;
7263
+ /** Injectable fetch (tests / live e2e); default `globalThis.fetch`. */
7264
+ fetch?: typeof fetch;
7265
+ }
7266
+ /**
7267
+ * Register the `web.search` MCP tool (`web_search`) when at least one
7268
+ * provider key is configured. With NEITHER key present, nothing is
7269
+ * registered — no broken tool is advertised, silently.
7270
+ */
7271
+ declare function registerWebSearchTools(server: McpServer, opts?: RegisterWebSearchToolsOptions): void;
7272
+
7134
7273
  /**
7135
7274
  * Workshop-brain subscriber — auto-ingest a workspace's conversations when its
7136
7275
  * sessions exit.
@@ -7544,6 +7683,88 @@ interface RegisterSandboxAttachToolOptions {
7544
7683
  /** Register the `sandbox_attach` MCP tool. */
7545
7684
  declare function registerSandboxAttachTool(server: McpServer, opts?: RegisterSandboxAttachToolOptions): void;
7546
7685
 
7686
+ /**
7687
+ * The sandbox ledger — `~/.agentproto/sandboxes.json`.
7688
+ *
7689
+ * The daemon KNOWS when it boots, pauses, reconnects to, or stops a sandbox
7690
+ * box (AIP-36 boot-and-drive, `session-spawn.ts`'s `bootSandboxAgentSession`
7691
+ * and the lifecycle teardown inside `SandboxAgentSessionProxy.close()`), but
7692
+ * it writes none of it down: finding a still-live sandboxId meant grepping
7693
+ * session descriptors for a `remote: true` stamp. This module is the
7694
+ * navigation half — one durable record per sandboxId:
7695
+ *
7696
+ * { sandboxId, provider, label?, state, cwd?, originSessionId?,
7697
+ * createdAt, updatedAt, expiresAt? }
7698
+ *
7699
+ * State machine: "booted" (fresh boot) → "connected" (reuse/attach) →
7700
+ * "paused" (proxy close() chose the pause teardown) | "stopped" (kill or
7701
+ * expiry). `expiresAt` is stamped at boot when the spec's lifecycle policy
7702
+ * carries a known idle window (`lifecycle.pause_after_idle` →
7703
+ * `SandboxLifecyclePolicy.pauseAfterIdleMs`) — the one expiry the daemon
7704
+ * actually knows about at boot time; a provider-side TTL the daemon never
7705
+ * sees is deliberately NOT guessed at here.
7706
+ *
7707
+ * Writes are ALWAYS best-effort: every helper swallows its own failures and
7708
+ * returns without throwing. A ledger error must never fail a spawn, a
7709
+ * pause, or a teardown — the ledger is an index over reality, never a
7710
+ * participant in it.
7711
+ *
7712
+ * Persistence style matches the daemon's other JSON stores
7713
+ * (`workspace-buckets.ts`, `saveWorkspacesConfig`): serialize → write to a
7714
+ * per-process-unique tmp file → rename over the target. A concurrent reader
7715
+ * never sees half a JSON object, and two in-flight writers never share a
7716
+ * tmp path (the pid-only suffix is not unique within one process — see the
7717
+ * 2026-08-14 registry-wipe write-up in `workspace-buckets.ts`).
7718
+ */
7719
+ /** Lifecycle states a ledger row can carry. */
7720
+ type SandboxLedgerState = "booted" | "paused" | "connected" | "stopped";
7721
+ interface SandboxLedgerEntry {
7722
+ sandboxId: string;
7723
+ provider: string;
7724
+ state: SandboxLedgerState;
7725
+ createdAt: string;
7726
+ updatedAt: string;
7727
+ label?: string;
7728
+ cwd?: string;
7729
+ /** The HOST session id that first booted / last reconnected to the box. */
7730
+ originSessionId?: string;
7731
+ /** ISO instant the box is expected to idle-expire — stamped only when the
7732
+ * boot knew a window (`lifecycle.pause_after_idle`). */
7733
+ expiresAt?: string;
7734
+ }
7735
+ /** `~/.agentproto/sandboxes.json`. `AGENTPROTO_SANDBOX_LEDGER` overrides
7736
+ * the path (tests, and a caller that wants a workspace-scoped ledger). */
7737
+ declare const sandboxLedgerPath: () => string;
7738
+ /** Rows currently on disk. `[]` for a missing/corrupt file — the same
7739
+ * "degrade to nothing rather than throw" contract as every other store
7740
+ * reader in this daemon. Never throws. */
7741
+ declare function readSandboxLedger(path?: string): SandboxLedgerEntry[];
7742
+ /** Remove a row by sandboxId. Returns whether a row was actually dropped
7743
+ * (read from the PRE-call disk state). Never throws. */
7744
+ declare function removeSandboxLedgerEntry(sandboxId: string, path?: string): boolean;
7745
+ type ReuseResolution = {
7746
+ kind: "resolved";
7747
+ sandboxId: string;
7748
+ entry: SandboxLedgerEntry;
7749
+ } | {
7750
+ kind: "ambiguous";
7751
+ candidates: SandboxLedgerEntry[];
7752
+ } | {
7753
+ kind: "unresolved";
7754
+ };
7755
+ /**
7756
+ * `reuse: "<label-or-id>"` resolution against the ledger (PLAN-D1 §3).
7757
+ *
7758
+ * A reuse token that exactly matches a row's `label`, or is a PREFIX of
7759
+ * exactly one row's `sandboxId`, resolves to that row's sandboxId. Several
7760
+ * matches → `ambiguous` (the caller must disambiguate — the error it
7761
+ * renders lists the candidates). No match at all → `unresolved`, and the
7762
+ * spawn path passes the token through unchanged so the provider's own
7763
+ * `connect()` failure surfaces exactly as it did before this module
7764
+ * existed.
7765
+ */
7766
+ declare function resolveReuseFromLedger(reuse: string, entries: readonly SandboxLedgerEntry[]): ReuseResolution;
7767
+
7547
7768
  /**
7548
7769
  * Idle agent-session reaper (PR-6).
7549
7770
  *
@@ -9221,4 +9442,4 @@ interface GatewayHandle {
9221
9442
  */
9222
9443
  declare function createGateway(opts: CreateGatewayOptions): Promise<GatewayHandle>;
9223
9444
 
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 };
9445
+ 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 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 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, 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, reapOrphanedDescendants, recordProfileQuota, 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, verifyInboundSignature, webSearchTool, workflowToActivities, writeDaemonRegistryEntry };