@deepseek-ai/dsh-tool-cordis 0.2.1-alpha.1 → 0.2.1-alpha.3

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.
@@ -135,7 +135,7 @@ export const SERVICE_API = [
135
135
  },
136
136
  {
137
137
  signature: '@Remote(\'select\') async select(agent: Agent, agentPreset: string): Promise<string>',
138
- description: 'Select a preset before a session starts its first turn.',
138
+ description: 'Select a preset before a session starts its first turn. A Session whose log records the preset and whose Agent runs its current revision keeps its composition; nothing is logged or announced.',
139
139
  parameters: [{ name: 'agent', description: 'Target Agent.' }, { name: 'agentPreset', description: 'Requested identity.' }],
140
140
  returns: 'Committed preset identity.',
141
141
  },
@@ -274,9 +274,9 @@ export const SERVICE_API = [
274
274
  },
275
275
  {
276
276
  signature: 'async sendMessage(caller: Agent, request: SendTeamMessageRequest): Promise<SendTeamMessageResult>',
277
- description: 'Queue one durable peer message, then attempt immediate delivery.',
278
- parameters: [{ name: 'caller', description: 'exact live sending Team member.' }, { name: 'request', description: 'target name, content, and pre-queue cancellation.' }],
279
- returns: 'durable message identity and immediate-delivery observation.',
277
+ description: 'Steer one peer message into the target inbox or reject the attempt.',
278
+ parameters: [{ name: 'caller', description: 'exact live sending Team member.' }, { name: 'request', description: 'target name, content, and cancellation before acceptance.' }],
279
+ returns: 'accepted inbox identity; acceptance follows normal Agent persistence and does not await model processing.',
280
280
  },
281
281
  {
282
282
  signature: 'async createTask(caller: Agent, request: CreateTeamTaskRequest): Promise<TeamTaskView>',
@@ -686,8 +686,13 @@ export const SERVICE_API = [
686
686
  parameters: [],
687
687
  },
688
688
  {
689
- signature: 'readonly operator: PeerScope',
690
- description: 'The operator Peer every admitted request speaks for; its scope lives as long as Connection.',
689
+ signature: 'readonly browserPeer: PeerScope',
690
+ description: 'The owner Peer every authenticated browser connection shares.',
691
+ parameters: [],
692
+ },
693
+ {
694
+ signature: 'readonly allowsRemoteAuthorities: boolean',
695
+ description: 'Whether this deployment accepts authorities beyond loopback: true only when a validated `trustedHosts` entry names a non-loopback hostname.',
691
696
  parameters: [],
692
697
  },
693
698
  {
@@ -704,13 +709,25 @@ export const SERVICE_API = [
704
709
  },
705
710
  {
706
711
  signature: 'admit(request: ConnectionTrustRequest): PeerAdmission',
707
- description: 'Admit one request: it passes requestRejection and speaks for the operator, or it is refused with that status.',
712
+ description: 'Admit an HTTP request against its signed browser or API credential and live Peer.',
708
713
  parameters: [{ name: 'request', description: 'request headers from the HTTP or upgrade request.' }],
709
- returns: 'the operator Peer, or the rejection status.',
714
+ returns: 'the credential\'s Peer, or the rejection status.',
715
+ },
716
+ {
717
+ signature: 'createPeer(options: { readonly principal: Principal; readonly interactions?: \'answer\' | \'none\' }): PeerScope',
718
+ description: 'Create an independent in-process Peer, disposed with the Context that read `ctx.connection`.',
719
+ parameters: [{ name: 'options', description: 'fixed principal and optional interaction participation (default `answer`).' }],
720
+ returns: 'a new Peer distinct from every other Peer.',
721
+ },
722
+ {
723
+ signature: 'admitConnection(request: ConnectionTrustRequest): ConnectionAdmission',
724
+ description: 'Claim a physical socket for an API Peer; browser sockets share their owner Peer.',
725
+ parameters: [{ name: 'request', description: 'authenticated upgrade request headers.' }],
726
+ returns: 'the Peer and idempotent release, or 409 for duplicate API ownership. The carrier releases on socket termination or failed upgrade; release removes API admission synchronously without cancelling independent HTTP calls.',
710
727
  },
711
728
  {
712
729
  signature: 'authorizeIndex(request: ConnectionIndexRequest, response: ConnectionIndexResponse): boolean',
713
- description: 'Authenticate one frontend index request, owning a token redirect or 401.',
730
+ description: 'Authenticate one frontend index request, owning a token redirect or 401. The cookie this mints is `Secure` when the mounted Web carrier serves TLS, which only that listener\'s protocol decides.',
714
731
  parameters: [{ name: 'request', description: 'root or configured-index HTTP request.' }, { name: 'response', description: 'response owned when the result is false.' }],
715
732
  returns: 'true only when the frontend may serve index.html.',
716
733
  },
@@ -722,10 +739,29 @@ export const SERVICE_API = [
722
739
  },
723
740
  ],
724
741
  },
742
+ {
743
+ key: 'cotTranslation',
744
+ summary: 'Optional reasoning translation delegates Session-bound storage to the translator.',
745
+ description: 'Optional reasoning translation delegates Session-bound storage to the translator.',
746
+ methods: [
747
+ {
748
+ signature: '@Remote async limits(signal: AbortSignal): Promise<CotTranslationSnapshot>',
749
+ description: 'Read accepted translation preferences and the current request limit without sending text.',
750
+ parameters: [{ name: 'signal', description: 'browser query cancellation or Remote contribution withdrawal.' }],
751
+ returns: 'authoritative preferences, eligible routes, and maximum UTF-16 text length per request.',
752
+ },
753
+ {
754
+ signature: '@Remote async translate(request: TranslationRequest, signal: AbortSignal): Promise<string>',
755
+ description: 'Translate one displayed fragment through the reader\'s selected provider.',
756
+ parameters: [{ name: 'request', description: 'original text and Session identity supplied by the Client; provider and explicit target language match accepted preferences, while auto uses the browser locale.' }, { name: 'signal', description: 'browser cancellation or Remote contribution withdrawal.' }],
757
+ returns: 'translated text; an uncached inactive Session joins ordinary GUI activation before retry. Failures omit the source and provider response. Cancellation stops this caller\'s wait, not shared activation.',
758
+ },
759
+ ],
760
+ },
725
761
  {
726
762
  key: 'credentials',
727
763
  summary: 'Abstract credential service over two key spaces that answer two questions.',
728
- description: 'Abstract credential service over two key spaces that answer two questions.\n\nA CredentialRef answers "what is behind this environment-variable name", layered over the process environment, the provider-managed store, and `.env` files. One seam-wide rule binds that half: an empty stored value is absent everywhere — `resolve` skips it, `describe` reports it unconfigured — so a blank never masquerades as a configured secret.\n\nA CredentialKey answers "what credential does this plugin hold for this id". Nothing can layer here — an authorization grant has no environment to be read from — so presence of the record is the whole fact, and modifyRecord is the only write path because a correct write depends on the current value (a token refresh is read-decide-replace under one lock).',
764
+ description: 'Abstract credential service over two key spaces that answer two questions.\n\nA CredentialRef answers "what is behind this environment-variable name": the provider-managed store first, then ambient fallbacks such as the process environment and `.env` files. One seam-wide rule binds that half: an empty stored value is absent everywhere — `resolve` skips it, `describe` reports it unconfigured — so a blank never masquerades as a configured secret.\n\nA CredentialKey answers "what credential does this plugin hold for this id". Nothing can layer here — an authorization grant has no environment to be read from — so presence of the record is the whole fact, and modifyRecord is the only write path because a correct write depends on the current value (a token refresh is read-decide-replace under one lock).',
729
765
  methods: [
730
766
  {
731
767
  signature: 'abstract resolve(ref: CredentialRef): Promise<ResolvedCredential | undefined>',
@@ -741,12 +777,12 @@ export const SERVICE_API = [
741
777
  },
742
778
  {
743
779
  signature: 'abstract set(ref: CredentialRef, value: string): Promise<void>',
744
- description: 'Durably store one value in the provider-managed writable source. Rejects while a read-only source shadows the reference — the write would appear to succeed while resolution keeps returning the shadowing value — and rejects an empty value (use unset).',
780
+ description: 'Durably store one value in the provider-managed writable source. The stored value takes precedence over ambient fallbacks, and empty values are rejected (use unset).',
745
781
  parameters: [{ name: 'ref', description: 'the reference to store.' }, { name: 'value', description: 'the non-empty secret value.' }],
746
782
  },
747
783
  {
748
784
  signature: 'abstract unset(ref: CredentialRef): Promise<void>',
749
- description: 'Remove one reference from the provider-managed writable source; removing an absent reference is a no-op. Rejects while a read-only source shadows the reference, like set.',
785
+ description: 'Remove one reference from the provider-managed writable source; removing an absent reference is a no-op. Ambient fallback layers may become effective again after removal.',
750
786
  parameters: [{ name: 'ref', description: 'the reference to remove.' }],
751
787
  },
752
788
  {
@@ -819,7 +855,7 @@ export const SERVICE_API = [
819
855
  },
820
856
  {
821
857
  signature: 'abstract getProfile(client: AccountClientMetadata): Promise<AccountDetails[\'profile\'] | null>',
822
- description: 'Query Platform profile independently of wallet balances. A ready result whose stable profile ID first becomes available or changes notifies watch consumers, so identity consumers re-read getPlatformSession; repeated IDs stay silent.',
858
+ description: 'Query Platform profile independently of wallet balances. A ready result whose stable profile ID first becomes available or changes notifies identity-enabled watch consumers, so they re-read getPlatformSession; repeated IDs stay silent.',
823
859
  parameters: [{ name: 'client', description: 'identity of the requesting UI for this call.' }],
824
860
  returns: 'profile outcome, or null if signed out or the grant changed during the query.',
825
861
  },
@@ -860,9 +896,9 @@ export const SERVICE_API = [
860
896
  returns: 'the signed-out state after local removal; remote failures never restore the grant.',
861
897
  },
862
898
  {
863
- signature: 'abstract watch(signal: AbortSignal): AsyncIterable<AccountView>',
899
+ signature: 'abstract watch(signal: AbortSignal, includeIdentityChanges?: boolean): AsyncIterable<AccountView>',
864
900
  description: 'Subscribe to snapshots including a complete initial state.',
865
- parameters: [{ name: 'signal', description: 'subscription lifetime; ending it never cancels login.' }],
901
+ parameters: [{ name: 'signal', description: 'subscription lifetime; ending it never cancels login.' }, { name: 'includeIdentityChanges', description: 'also notify when cached Platform identity changes; defaults to false.' }],
866
902
  returns: 'complete snapshots as account state changes.',
867
903
  },
868
904
  {
@@ -904,7 +940,7 @@ export const SERVICE_API = [
904
940
  },
905
941
  {
906
942
  signature: 'async prepare(request: DeepSeekLlmApiExtensionRequest): Promise<PreparedDeepSeekLlmApiExtensions>',
907
- description: 'Prepare every currently registered field from one immutable base request. Preparation failures reject before HTTP dispatch. Field values are cloned and frozen; providers retain no mutable alias to the outgoing request.',
943
+ description: 'Prepare every currently registered field from one immutable base request. A provider whose preparation throws, or whose value cannot be cloned, is omitted from this request; the first such failure per field is logged. Only cancellation rejects. Field values are cloned and frozen; providers retain no mutable alias to the outgoing request.',
908
944
  parameters: [{ name: 'request', description: 'exact serialized request facts before extension fields.' }],
909
945
  returns: 'detached fields and their idempotent joint acceptance transaction.',
910
946
  },
@@ -1203,6 +1239,13 @@ export const SERVICE_API = [
1203
1239
  parameters: [{ name: 'url', description: 'Module URL.' }],
1204
1240
  returns: 'Linked module URLs, or an empty list for an uncached module.',
1205
1241
  },
1242
+ {
1243
+ signature: 'async reconcileProfile(requiredIds: readonly string[] = []): Promise<ProfileReconciliation>',
1244
+ description: 'Recompose the profile from its manifest and patch files, replacing running plugins whose loaded files below the profile directory or its linked package targets changed on disk, and publishing its runtime resolution. Changed modules are evicted and the Loader entries running them stop; app-boot\'s recomposeProfile then publishes the resolution, applies the generation, starts the stopped entries with the current files and configuration, imports entries whose import failed again, and judges activation. Afterwards the modules below the mappings the recomposition dropped are evicted, so a removed or deselected package is imported afresh when it returns. Callers run inside runExclusive.',
1245
+ parameters: [{ name: 'requiredIds', description: 'Entry ids whose inactive state is reported as a failure even when it predates this call.' }],
1246
+ returns: 'Inactive-entry diagnostics, the changed modules that load after a restart, and a profile-wide restart reason.',
1247
+ throws: ['The patch read, publication, preparation, apply, or activation failure of the recomposition, including a replacement plugin that fails to load or start, whose previous code no longer runs.'],
1248
+ },
1206
1249
  ],
1207
1250
  },
1208
1251
  {
@@ -1261,7 +1304,7 @@ export const SERVICE_API = [
1261
1304
  signature: 'abstract start(spec: JobSpec): JobId',
1262
1305
  description: 'Preflight access, validation, owner cleanup, and implementation-owned admission before starting and atomically registering work. Any preflight rejection leaves no job id or execution resource. A throwing starter leaves nothing registered; after it returns, registration cannot fail.',
1263
1306
  parameters: [{ name: 'spec', description: 'job identity, owner, output sources, and synchronous starter.' }],
1264
- returns: 'the registry-issued `<kind>-N` id.',
1307
+ returns: 'the registry-issued `<kind>-<short-uuid>` id.',
1265
1308
  },
1266
1309
  {
1267
1310
  signature: 'abstract list(caller?: SessionId): JobView[]',
@@ -1372,6 +1415,12 @@ export const SERVICE_API = [
1372
1415
  parameters: [{ name: 'provider', description: 'provider route named by a request header.' }, { name: 'model', description: 'exact model id named by the same header.' }],
1373
1416
  returns: 'the owning adapter\'s image pricing for the route, when declared.',
1374
1417
  },
1418
+ {
1419
+ signature: 'imageRequestTarget(provider: string, model: string, image: ImageAttachmentRef): ImageRequestTarget',
1420
+ description: 'Resolve the image projection for an exact registered model route.',
1421
+ parameters: [{ name: 'provider', description: 'registered provider route.' }, { name: 'model', description: 'exact model id.' }, { name: 'image', description: 'normalized image reference.' }],
1422
+ returns: 'dimensions and byte target used by the adapter\'s request serializer.',
1423
+ },
1375
1424
  {
1376
1425
  signature: 'fileRequestText(ref: FileAttachmentRef): string',
1377
1426
  description: 'Resolve the exact text one durable file occurrence contributes to every provider request in the current execution environment.',
@@ -1397,9 +1446,9 @@ export const SERVICE_API = [
1397
1446
  returns: 'a detached config only when a default must be materialized.',
1398
1447
  },
1399
1448
  {
1400
- signature: 'async prepareCall(config: LlmCallConfig, signal?: AbortSignal): Promise<PreparedLlmCall>',
1401
- description: 'Resolve one call under its current adapter registration. The returned one-shot handle keeps that registration across header logging and dispatch, so HMR cannot combine one adapter\'s capability result with another adapter.',
1402
- parameters: [{ name: 'config', description: 'provider/model route and optional request controls.' }, { name: 'signal', description: 'optional cancellation for adapter-owned capability lookup.' }],
1449
+ signature: 'async prepareCall( config: LlmCallConfig, signal?: AbortSignal, configure?: ConfigureCall, ): Promise<PreparedLlmCall>',
1450
+ description: 'Resolve one call under its current adapter registration. The returned one-shot handle keeps that registration across header logging and dispatch, so HMR cannot combine one adapter\'s capability result with another adapter. An optional synchronous callback selects concrete controls using captured model metadata. Defaults and validation apply to its result. Callback failures and cancellation reject preparation before dispatch.',
1451
+ parameters: [{ name: 'config', description: 'provider/model route and optional concrete request controls.' }, { name: 'signal', description: 'optional cancellation for adapter-owned capability lookup.' }, { name: 'configure', description: 'pure control selection, called once before defaults and validation.' }],
1403
1452
  returns: 'a prepared config and its registration-bound stream entry point.',
1404
1453
  },
1405
1454
  {
@@ -1605,7 +1654,7 @@ export const SERVICE_API = [
1605
1654
  },
1606
1655
  {
1607
1656
  signature: '@Remote listBundles(): Promise<BundleInfo[]>',
1608
- description: 'Read the profile\'s installed bundles, the bundles this dsh installation supplies, and the selected names that are not bundles. A dependency without a bundle patch is listed, as a `not-bundle` problem, only while it is selected.',
1657
+ description: 'Read installed, installation-provided, and offline Official catalog bundles, plus selected non-bundle names. A dependency without a bundle patch is listed, as a `not-bundle` problem, only while it is selected.',
1609
1658
  parameters: [],
1610
1659
  returns: 'Package versions, manifest descriptions, the installable spec of profile dependencies, rows, optional display metadata, activation selections, whether the installation offers the bundle, and removal availability.',
1611
1660
  },
@@ -1636,7 +1685,7 @@ export const SERVICE_API = [
1636
1685
  {
1637
1686
  signature: '@Remote installBundle(spec: string, options?: InstallBundleOptions): Promise<ChangeResult>',
1638
1687
  description: 'Install a package using the same pnpm implementation as dsh plugin. GitHub repositories get a connection check bounded by githubConnectionTimeoutMs before pnpm starts; only network failures or timeouts stop installation, while pnpm owns authentication and transport fallback. A run that fails, is cancelled, or adds a package without a bundle patch restores `package.json` and `pnpm-lock.yaml` as they were; downloaded files can stay.',
1639
- parameters: [{ name: 'spec', description: 'One package spec, including local paths relative to the invocation directory.' }, { name: 'options', description: 'Whether to activate the installed bundle (defaults to true), the request id a cancellation names, the pending build scripts to allow for this profile before pnpm runs, and the registry asked first.' }],
1688
+ parameters: [{ name: 'spec', description: 'One package spec, including local paths relative to the invocation directory.' }, { name: 'options', description: 'Whether to activate the installed bundle (defaults to true), the request id a cancellation names, the pending build scripts to allow, whether to save an exact dependency, and the registry asked first.' }],
1640
1689
  returns: 'Package-manager diagnostics, the registries asked, and the observed activation outcome.',
1641
1690
  },
1642
1691
  {
@@ -1740,7 +1789,7 @@ export const SERVICE_API = [
1740
1789
  {
1741
1790
  key: 'ptcRuntime',
1742
1791
  summary: 'Registers one `ctx.ptcRuntime` implementation.',
1743
- description: 'Registers one `ctx.ptcRuntime` implementation. Program, budget, abort, and substrate failures resolve in PtcRunResult; only Service Definition contract misuse rejects. Implementations bridge structured-cloneable bindings, materialize each declared namespace rejection class, treat programs as hostile peers, isolate runs from one another, and terminate and await in-flight runs during disposal.',
1792
+ description: 'Registers one `ctx.ptcRuntime` implementation. Program, budget, abort, and substrate failures resolve in PtcRunResult; only Service Definition contract misuse rejects. Implementations bridge structured-cloneable bindings, materialize each declared namespace rejection class, treat programs as hostile peers, isolate distinct state owners, and terminate and await in-flight runs during disposal.',
1744
1793
  methods: [
1745
1794
  {
1746
1795
  signature: 'abstract readonly language: string',
@@ -1752,6 +1801,13 @@ export const SERVICE_API = [
1752
1801
  description: 'The execution substrate, as a lowercase identifier. Informational, not gating — a descriptor so deployments and diagnostics can tell backends apart, not a security claim. Well-known values: `\'worker-thread\'`, `\'process\'`, `\'container\'`.',
1753
1802
  parameters: [],
1754
1803
  },
1804
+ {
1805
+ signature: 'release(owner: object): Promise<void>',
1806
+ description: 'Release an owner\'s retained environment and await its execution resources. Stateless providers have no retained resources to release.',
1807
+ parameters: [{ name: 'owner', description: 'The exact object supplied as the request\'s state owner.' }],
1808
+ returns: 'Completion after all owned execution resources have been released.',
1809
+ throws: ['When managed resource cleanup fails.'],
1810
+ },
1755
1811
  {
1756
1812
  signature: 'abstract resolve(request: PtcRunRequest): PtcRunSpec',
1757
1813
  description: 'Resolve supported options and provider defaults before execution.',
@@ -1767,6 +1823,49 @@ export const SERVICE_API = [
1767
1823
  },
1768
1824
  ],
1769
1825
  },
1826
+ {
1827
+ key: 'remoteAccess',
1828
+ summary: 'Registry of access policies, the Gateway\'s access decisions, list filtering, and the per-Peer access snapshot.',
1829
+ description: 'Registry of access policies, the Gateway\'s access decisions, list filtering, and the per-Peer access snapshot. Every composition that mounts the Gateway mounts this service too.',
1830
+ methods: [
1831
+ {
1832
+ signature: 'registerPolicy<K extends Exclude<keyof PrincipalMap, \'owner\'>>(kind: K, policy: RemoteAccessPolicy<PrincipalMap[K]>): () => void',
1833
+ description: 'Register the policy of one non-owner principal kind in the caller\'s fiber; open snapshots are recomputed on registration and removal.',
1834
+ parameters: [{ name: 'kind', description: 'the principal kind the policy serves; never `owner`.' }, { name: 'policy', description: 'business-owned bindings and refusal reasons for principals of `kind`.' }],
1835
+ returns: 'disposer removing this policy.',
1836
+ throws: ['Error when `kind` already has a policy.'],
1837
+ },
1838
+ {
1839
+ signature: 'invalidate(principal?: Principal): void',
1840
+ description: 'Report that the bindings or condition answers for `principal` may have changed. Business packages call this on every grant, revocation, mode change, and expiry; open snapshots re-push, and the next failure of each policy is logged again.',
1841
+ parameters: [{ name: 'principal', description: 'affected principal; omitted for every principal.' }],
1842
+ },
1843
+ {
1844
+ signature: 'decide(request: RemoteAccessRequest<Principal>): RemoteAccessDecision',
1845
+ description: 'Gateway-only: decide one request whose resources the Gateway resolved. The owner is allowed, and so is `remoteAccess/follow`: every Peer reads its own snapshot. Otherwise the action is allowed only when, on every listed resource, some binding of the principal\'s policy names that resource, has a role listing the action, and has no condition or a condition that allows. `bindings()` is called once per decision.',
1846
+ parameters: [{ name: 'request', description: 'the caller or recipient, the action, the resources it touches, and a call\'s arguments.' }],
1847
+ returns: '`allow`; or `deny` with `no-allow` when the principal kind has no policy, the first refusing condition\'s reason on the first resource no binding allows, else `explain()`\'s reason, else `no-allow`; `policy-failed` when `bindings()`, a condition, or `explain()` throws, logged once per policy until the next `invalidate()`. The Gateway throws `remote-access/denied` for a denied call and drops a denied event.',
1848
+ },
1849
+ {
1850
+ signature: 'allows(resource: RemoteAccessResource): boolean',
1851
+ description: 'Filter items inside a Remote method. The invocation is read from the Context that accessed this service, so call it as `this.ctx.remoteAccess.allows(resource)` from the Remote method. Each check reads the policy\'s bindings again, so a long-running stream sees binding changes from the next check on.',
1852
+ parameters: [{ name: 'resource', description: 'resource of one result item.' }],
1853
+ returns: 'true for the owner and outside a Remote call; otherwise whether the invocation\'s endpoint action is allowed on `resource` without call arguments, false when the policy is absent or fails.',
1854
+ },
1855
+ {
1856
+ signature: 'snapshotFor(principal: Principal): RemoteAccessBaseline',
1857
+ description: 'The baseline a page opens with before its snapshot stream connects. A business package rendering a non-owner page assigns this value to REMOTE_ACCESS_SNAPSHOT_KEY after every index injection row, replacing the owner baseline the webServer index carries.',
1858
+ parameters: [{ name: 'principal', description: 'the page\'s caller identity.' }],
1859
+ returns: 'the owner baseline for the owner; otherwise the principal\'s current grants.',
1860
+ },
1861
+ {
1862
+ signature: '@Remote({ mode: \'stream\' }) async *follow(signal: AbortSignal): AsyncIterable<RemoteAccessFrame>',
1863
+ description: 'Stream the calling Peer\'s access snapshot: one baseline, then `upsert` and `remove` frames after each `invalidate()` and each policy registration or removal that changes a grant. The owner receives only `{ owner: true }`. The generation ends when `signal` aborts or this service unloads, so a reloaded service starts every reader from a fresh baseline.',
1864
+ parameters: [{ name: 'signal', description: 'generation cancellation.' }],
1865
+ returns: 'the access frames of one generation.',
1866
+ },
1867
+ ],
1868
+ },
1770
1869
  {
1771
1870
  key: 'sandbox',
1772
1871
  summary: 'Abstract process-sandbox service.',
@@ -1877,16 +1976,16 @@ export const SERVICE_API = [
1877
1976
  returns: 'visible Session summaries ordered by activity.',
1878
1977
  },
1879
1978
  {
1880
- signature: '@Remote(\'search\') search(request: SessionSearchRequest, signal: AbortSignal): Promise<SessionSearchValue>',
1881
- description: 'Search visible Session content without resuming an Agent.',
1979
+ signature: '@Remote(\'search\') async search(request: SessionSearchRequest, signal: AbortSignal): Promise<SessionSearchValue>',
1980
+ description: 'Search visible Session content without resuming an Agent. A non-owner receives only the hits whose Session `allows()` admits; `hasMore` describes the bounded result before that filtering.',
1882
1981
  parameters: [{ name: 'request', description: 'literal message-content query.' }, { name: 'signal', description: 'cancellation for list and search reads.' }],
1883
1982
  returns: 'authorized bounded Session search results.',
1884
1983
  },
1885
1984
  {
1886
1985
  signature: '@Remote(\'create\') create(request: SessionCreateRequest): Promise<SessionCreateValue>',
1887
- description: 'Create or idempotently adopt one ordinary Session.',
1888
- parameters: [{ name: 'request', description: 'requested identity, location, and Agent preset.' }],
1889
- returns: 'the Session identity and resolved preset when configured.',
1986
+ description: 'Create one ordinary Session for a new conversation, reusing the named blank Session while it is reusable.',
1987
+ parameters: [{ name: 'request', description: 'optional blank Session to reuse, location, and Agent preset.' }],
1988
+ returns: 'the created or reused Session identity and its preset when configured.',
1890
1989
  },
1891
1990
  {
1892
1991
  signature: '@Remote(\'selectModel\') selectModel(request: SessionSelectModelRequest): Promise<SessionSelectModelValue>',
@@ -1939,13 +2038,13 @@ export const SERVICE_API = [
1939
2038
  returns: 'the accepted title and durable event sequence.',
1940
2039
  },
1941
2040
  {
1942
- signature: '@Remote(\'fork\') fork(request: SessionForkRequest): Promise<SessionForkValue>',
2041
+ signature: '@Remote(\'fork\') async fork(request: SessionForkRequest): Promise<SessionForkValue>',
1943
2042
  description: 'Fork one cold-readable exact event prefix into a new Session. An omitted boundary selects the latest completed-turn prefix; an open cut receives synthetic fork closers.',
1944
- parameters: [{ name: 'request', description: 'source Session and optional exact inclusive event boundary.' }],
2043
+ parameters: [{ name: 'request', description: 'source Session, optional exact inclusive event boundary, and migration preflight choice.' }],
1945
2044
  returns: 'the new Session identity.',
1946
2045
  },
1947
2046
  {
1948
- signature: '@Remote(\'prompt\') prompt(request: SessionPromptRequest, signal: AbortSignal): Promise<SessionPromptValue>',
2047
+ signature: '@Remote(\'prompt\') async prompt(request: SessionPromptRequest, signal: AbortSignal): Promise<SessionPromptValue>',
1949
2048
  description: 'Admit one prompt after explicitly resuming its Session.',
1950
2049
  parameters: [{ name: 'request', description: 'Session identity, prompt content, source metadata, and delivery mode.' }, { name: 'signal', description: 'caller cancellation before prompt admission begins.' }],
1951
2050
  returns: 'acknowledgement that the Agent accepted the prompt.',
@@ -1969,25 +2068,25 @@ export const SERVICE_API = [
1969
2068
  returns: 'acknowledgement that cancellation was requested.',
1970
2069
  },
1971
2070
  {
1972
- signature: '@Remote(\'page\') page(request: SessionPageRequest, signal: AbortSignal): Promise<SessionPage>',
2071
+ signature: '@Remote({ name: \'page\', resources: { session: addressedSession } }) page(request: SessionPageRequest, signal: AbortSignal): Promise<SessionPage>',
1973
2072
  description: 'Read one cold-safe, message-aligned Session history page.',
1974
2073
  parameters: [{ name: 'request', description: 'durable address, backward cursor, and page budget.' }, { name: 'signal', description: 'cancellation for persistence reads.' }],
1975
2074
  returns: 'one chronological page.',
1976
2075
  },
1977
2076
  {
1978
- signature: '@Remote({ mode: \'stream\' }) follow(request: SessionFollowRequest, signal: AbortSignal): AsyncIterable<SessionFollowFrame>',
2077
+ signature: '@Remote({ mode: \'stream\', resources: { session: addressedSession } }) follow(request: SessionFollowRequest, signal: AbortSignal): AsyncIterable<SessionFollowFrame>',
1979
2078
  description: 'Follow one Session log from its opening or resume cursor.',
1980
2079
  parameters: [{ name: 'request', description: 'durable address and last committed sequence already held by the caller.' }, { name: 'signal', description: 'cancellation owned by the Remote stream carrier.' }],
1981
2080
  returns: 'a complete opening snapshot followed by gap-free durable event frames and optional cursorless assistant-stream frames.',
1982
2081
  },
1983
2082
  {
1984
2083
  signature: '@Remote(\'projections\') async projections(request: SessionProjectionsRequest, signal: AbortSignal): Promise<SessionProjectionsValue>',
1985
- description: 'Read all registered projections without activating an Agent.',
1986
- parameters: [{ name: 'request', description: 'Session whose current values are required.' }, { name: 'signal', description: 'cancellation for the Session observation.' }],
1987
- returns: 'complete baseline, or null when the Session does not exist.',
2084
+ description: 'Read exact projections, returning cached hints only when migration is required.',
2085
+ parameters: [{ name: 'request', description: 'Session whose current values are required.' }, { name: 'signal', description: 'cancellation for the Session read.' }],
2086
+ returns: 'a sequenced baseline, cached hints when migration is deferred, or null when absent.',
1988
2087
  },
1989
2088
  {
1990
- signature: '@Remote({ mode: \'stream\' }) control(signal: AbortSignal): AsyncIterable<SessionControlFrame>',
2089
+ signature: '@Remote({ mode: \'stream\' }) async *control(signal: AbortSignal): AsyncIterable<SessionControlFrame>',
1991
2090
  description: 'Stream a complete live-control baseline followed by replacement frames.',
1992
2091
  parameters: [{ name: 'signal', description: 'cancellation owned by the Remote stream carrier.' }],
1993
2092
  returns: 'one complete baseline followed by live replacement frames.',
@@ -2435,7 +2534,7 @@ export const SERVICE_API = [
2435
2534
  },
2436
2535
  {
2437
2536
  signature: 'register(provider: SessionTitleProvider): () => Promise<void>',
2438
- description: 'Register the sole optional title provider. Disposal aborts its pending and active work before another provider may register.',
2537
+ description: 'Register the sole optional title provider. Disposal aborts its pending and active work; a replacement may register once disposal has started, and the closing provider\'s late results never commit.',
2439
2538
  parameters: [{ name: 'provider', description: 'provider identity, cadence, and generation function.' }],
2440
2539
  returns: 'exact Cordis effect disposer, which settles after active calls quiesce.',
2441
2540
  },
@@ -2814,8 +2913,8 @@ export const SERVICE_API = [
2814
2913
  },
2815
2914
  {
2816
2915
  key: 'subagents',
2817
- summary: 'Named provider registry with one-shot runs, durable discovery, and continuable-child operations.',
2818
- description: 'Named provider registry with one-shot runs, durable discovery, and continuable-child operations.',
2916
+ summary: 'Named provider registry with managed activations, durable discovery, and local child messaging.',
2917
+ description: 'Named provider registry with managed activations, durable discovery, and local child messaging.',
2819
2918
  methods: [
2820
2919
  {
2821
2920
  signature: 'resolveMaxDepth(configured?: number | \'provider-managed\'): number | undefined',
@@ -2824,11 +2923,22 @@ export const SERVICE_API = [
2824
2923
  returns: 'The numeric limit, or undefined when the provider owns depth enforcement.',
2825
2924
  },
2826
2925
  {
2827
- signature: 'async startContinuable(spec: ContinuableStartSpec): Promise<ContinuableStart>',
2828
- description: 'Establish one durable continuable child and deliver its initial prompt. Resolves when the child\'s inbox accepts that prompt, without waiting for the turn to start or for the message to reach the Session log; any earlier failure rejects with no ids and rolls back the child entirely.',
2829
- parameters: [{ name: 'spec', description: 'provider, delegation request, and caller cancellation.' }],
2830
- returns: 'the durable child id and the accepted prompt\'s message id.',
2831
- throws: ['when continuation services are unavailable or materialization fails.'],
2926
+ signature: 'startActivation(spec: SubagentActivationSpec & { readonly childId: SessionId }): Promise<SubagentActivation & { readonly messageId: MessageId }>',
2927
+ description: 'Start a local child under its reserved identity.',
2928
+ parameters: [{ name: 'spec', description: 'local task, reserved child id, and result recipient.' }],
2929
+ returns: 'activation with its accepted initial message id.',
2930
+ },
2931
+ {
2932
+ signature: 'startActivation(spec: SubagentActivationSpec): Promise<SubagentActivation>',
2933
+ description: 'Start a local or external child.',
2934
+ parameters: [{ name: 'spec', description: 'task, backend, and result recipient.' }],
2935
+ returns: 'activation with a message id only for local children.',
2936
+ },
2937
+ {
2938
+ signature: 'async waitForChildren(parent: Agent): Promise<boolean>',
2939
+ description: 'Join progressing descendants without cancelling them. Idle descendants whose inboxes require a later wake stay resident and do not delay host completion.',
2940
+ parameters: [{ name: 'parent', description: 'the exact parent whose descendant work is observed.' }],
2941
+ returns: 'whether work was joined; hosts recheck parent idle after true.',
2832
2942
  },
2833
2943
  {
2834
2944
  signature: 'async sendMessage( sender: Agent, targetId: SessionId, content: ContentBlock[], options: SubagentSendMessageOptions, ): Promise<MessageId>',
@@ -2839,22 +2949,22 @@ export const SERVICE_API = [
2839
2949
  },
2840
2950
  {
2841
2951
  signature: 'interrupt(targetSessionId: SessionId, authority: SubagentInterruptAuthority): void',
2842
- description: 'Interrupt one live continuable child\'s current turn under a human parent address or an exact live ancestor Agent. Fire-and-return: the cancel signal is issued before this returns, but the target may keep running until it observes the signal. Unclaimed pending inbox work, the Activation, and published descendants are preserved; claimed work is not requeued. Once the interrupted driver is idle, a waking send resumes the parked FIFO queue. An absent target — including a one-shot or unknown id — is an accepted no-op, as is a manager-less composition, which cannot own a live Activation.',
2952
+ description: 'Interrupt one live child\'s current execution under a human parent address or an exact live ancestor Agent. Fire-and-return: the cancel signal is issued before this returns, but the target may keep running until it observes the signal. Unclaimed pending inbox work, the Activation, and published descendants are preserved; claimed work is not requeued. Once the interrupted Agent is idle, a waking send resumes the parked FIFO queue. External backends stop their single execution. An absent target is an accepted no-op, as is a manager-less composition, which cannot own a live Activation.',
2843
2953
  parameters: [{ name: 'targetSessionId', description: 'the durable child session id to interrupt.' }, { name: 'authority', description: 'the human parent address or exact live ancestor Agent.' }],
2844
2954
  throws: ['{SubagentError} `UNAUTHORIZED` when the authority does not own the live target.'],
2845
2955
  },
2846
2956
  {
2847
- signature: 'async drainContinuableDescendants(parents: readonly Agent[]): Promise<void>',
2848
- description: 'Close continuable admission below exact live parent Agents, stop only their visible descendant Activations synchronously, then await admitted scoped materializations and release those forests child-first. The scoped cutoff lasts until each exact parent leaves the registry; unrelated parent trees remain live.',
2957
+ signature: 'async drainDescendants(parents: readonly Agent[]): Promise<void>',
2958
+ description: 'Close subagent admission below exact live parent Agents, stop only their visible descendant Activations synchronously, then await admitted scoped materializations and release those forests child-first. The scoped cutoff lasts until each exact parent leaves the registry; unrelated parent trees remain live.',
2849
2959
  parameters: [{ name: 'parents', description: 'exact host-owned parent Agents entering teardown.' }],
2850
- returns: 'once every retained descendant Activation released its `AgentHandle`.',
2960
+ returns: 'once every retained descendant activation released its execution handle.',
2851
2961
  throws: ['an aggregate error after all branches settle when any failed.'],
2852
2962
  },
2853
2963
  {
2854
- signature: 'async drainContinuableChildren(parent: Agent, childIds: readonly SessionId[]): Promise<void>',
2855
- description: 'Release selected resident continuable direct children of one exact live parent. Other children of the same parent remain admitted and resident. Absent targets and a manager-less composition are accepted no-ops.',
2964
+ signature: 'async drainChildren(parent: Agent, childIds: readonly SessionId[]): Promise<void>',
2965
+ description: 'Release selected resident direct children of one exact live parent. Other children of the same parent remain admitted and resident. Absent targets and a manager-less composition are accepted no-ops.',
2856
2966
  parameters: [{ name: 'parent', description: 'exact live direct parent authorizing the selected release.' }, { name: 'childIds', description: 'durable direct-child ids to release when resident.' }],
2857
- returns: 'once every selected Activation released its `AgentHandle`.',
2967
+ returns: 'once every selected activation released its execution handle.',
2858
2968
  throws: ['{SubagentError} `UNAUTHORIZED` when a resident target belongs to a different parent or the supplied parent identity is stale.'],
2859
2969
  },
2860
2970
  {
@@ -2866,7 +2976,7 @@ export const SERVICE_API = [
2866
2976
  },
2867
2977
  {
2868
2978
  signature: 'listDescendants(rootSessionId: SessionId, signal?: AbortSignal): Promise<SubagentDescendantListEntry[]>',
2869
- description: 'Recursively list reachable parent catalogs in stable pre-order, preserving each catalog\'s event order. Each row carries its catalog parent and depth; one-shot and unknown-mode children remain traversal nodes. Unknown modes produce unsupported diagnostics. Unreadable child catalogs produce corrupt or unavailable diagnostics and stop only that branch. Root read failures, missing services or projections, and cancellation reject the whole listing. Each catalog is observed once and released before the next read. No Agent is loaded or resumed; Sessions absent from reachable catalogs are omitted.',
2979
+ description: 'Recursively list reachable parent catalogs in stable pre-order, preserving each catalog\'s event order. Each row carries its catalog parent and depth; external children are leaves; one-shot and unknown-mode children remain traversal nodes. Unknown modes produce unsupported diagnostics. Unreadable child catalogs produce corrupt or unavailable diagnostics and stop only that branch. Root read failures, missing services or projections, and cancellation reject the whole listing. Each catalog is observed once and released before the next read. No Agent is loaded or resumed; Sessions absent from reachable catalogs are omitted.',
2870
2980
  parameters: [{ name: 'rootSessionId', description: 'session whose catalog starts descendant discovery.' }, { name: 'signal', description: 'cancellation forwarded to and checked around each catalog read.' }],
2871
2981
  returns: 'children and branch diagnostics in parent-catalog pre-order.',
2872
2982
  throws: ['{@link SubagentError} when listing dependencies are unavailable or the caller cancels.', 'SessionQueryError when the root catalog cannot be read.'],
@@ -2887,7 +2997,7 @@ export const SERVICE_API = [
2887
2997
  },
2888
2998
  {
2889
2999
  signature: 'registerProvider(provider: SubagentProvider): () => void',
2890
- description: 'Register a provider under its name. Registration is effect-scoped and HMR safe; removing a provider blocks new starts but does not revoke runs that were already returned to their holders.',
3000
+ description: 'Register a provider under its name. Registration is effect-scoped and HMR safe; removing a provider blocks new starts but does not revoke runs that were already returned to their holders. Providers without either execution method are rejected with UNSUPPORTED_CAPABILITY before registration.',
2891
3001
  parameters: [{ name: 'provider', description: 'the trusted provider implementation.' }],
2892
3002
  returns: 'the exact Cordis effect disposer.',
2893
3003
  },
@@ -2903,12 +3013,6 @@ export const SERVICE_API = [
2903
3013
  parameters: [],
2904
3014
  returns: 'the registered names.',
2905
3015
  },
2906
- {
2907
- signature: 'async start(name: string, request: SubagentStartRequest): Promise<SubagentRun>',
2908
- description: 'Establish a published child on the named provider. Capability and semantic checks run before delegation. Provider ownership lasts until its promise fulfills; a rejection therefore has no run for the caller to dispose and emits no run lifecycle events. Post-publication turn and infrastructure failures settle through the returned run. A catalog append failure disposes the run and handles its result rejection; the caller receives the catalog error even if disposal also fails.',
2909
- parameters: [{ name: 'name', description: 'the provider to use.' }, { name: 'request', description: 'child label, prompt, parent, signal, and optional capabilities.' }],
2910
- returns: 'the published holder-owned run.',
2911
- },
2912
3016
  ],
2913
3017
  },
2914
3018
  {
@@ -2974,7 +3078,7 @@ export const SERVICE_API = [
2974
3078
  },
2975
3079
  {
2976
3080
  signature: 'suppressRuntimeContext(): () => void',
2977
- description: 'Suppress every dynamic runtime-context contribution in the calling context\'s scope without changing the services that own or enforce those facts. Multiple suppressors remain independently disposable.',
3081
+ description: 'Suppress optional dynamic runtime-context contributions in the calling context\'s scope without changing the services that own or enforce those facts. Multiple suppressors remain independently disposable.',
2978
3082
  parameters: [],
2979
3083
  returns: 'the exact Cordis effect disposer.',
2980
3084
  },
@@ -2990,6 +3094,12 @@ export const SERVICE_API = [
2990
3094
  parameters: [{ name: 'name', description: 'the `[a-z][a-z0-9_]*` reference name.' }, { name: 'provider', description: 'evaluated for each assembly.' }],
2991
3095
  returns: 'the exact Cordis effect disposer.',
2992
3096
  },
3097
+ {
3098
+ signature: 'refreshContext(assembly: PromptAssembly, context: AssembleContext = {}): PromptAssembly',
3099
+ description: 'Refresh accepted registered runtime facts for request admission. Contexts added only by the assembly waterfall retain their accepted values. Current suppression removes optional contexts, and missing required registrations are restored in registry order. Sections, tools, and interpolation variables retain the accepted assembly; their providers and waterfall do not rerun.',
3100
+ parameters: [{ name: 'assembly', description: 'accepted assembly for this scope and step.' }, { name: 'context', description: 'the same scope and current plugin-defined assembly fields.' }],
3101
+ returns: 'the accepted assembly with current runtime-context provider text.',
3102
+ },
2993
3103
  {
2994
3104
  signature: 'async assemble(context: AssembleContext = {}): Promise<PromptAssembly>',
2995
3105
  description: 'Assemble global and scoped providers, detach tool parameters, apply canonical ordering, then run the assembly waterfall. Scoped sections and variables shadow globals. The returned waterfall value is authoritative except that an effective complete section is restored afterwards as the sole prompt section.',
@@ -3005,9 +3115,9 @@ export const SERVICE_API = [
3005
3115
  methods: [
3006
3116
  {
3007
3117
  signature: '@Remote environment(agent: Agent, signal: AbortSignal): TerminalEnvironment',
3008
- description: 'Read the Session working directory and terminal limits without resolving a shell.',
3118
+ description: 'Read the Session\'s current directory and terminal limits without filesystem validation or shell lookup.',
3009
3119
  parameters: [{ name: 'agent', description: 'Session owner supplied by the Gateway.' }, { name: 'signal', description: 'request cancellation.' }],
3010
- returns: 'the Session workspace directory and terminal limits.',
3120
+ returns: 'the logged current directory and terminal limits; retained terminals keep their own process directories.',
3011
3121
  },
3012
3122
  {
3013
3123
  signature: '@Remote shells(agent: Agent, signal: AbortSignal): Promise<TerminalShell[]>',
@@ -3034,22 +3144,10 @@ export const SERVICE_API = [
3034
3144
  returns: 'a hold acknowledgement followed by an open lifetime stream.',
3035
3145
  },
3036
3146
  {
3037
- signature: '@Remote({ mode: \'stream\' }) follow(agent: Agent, id: WebTerminalId, attachmentId: TerminalAttachmentId, signal: AbortSignal): AsyncIterable<TerminalFrame>',
3038
- description: 'Attach to a terminal without binding its process lifetime to the transport.',
3039
- parameters: [{ name: 'agent', description: 'Session owner supplied by the Gateway.' }, { name: 'id', description: 'terminal identity.' }, { name: 'attachmentId', description: 'new exclusive input attachment.' }, { name: 'signal', description: 'physical stream cancellation.' }],
3040
- returns: 'screen recovery followed by output and metadata changes.',
3041
- },
3042
- {
3043
- signature: '@Remote async write(agent: Agent, id: WebTerminalId, attachmentId: TerminalAttachmentId, data: string): Promise<void>',
3044
- description: 'Deliver raw input, including Tab completion and control characters.',
3045
- parameters: [{ name: 'agent', description: 'Session owner supplied by the Gateway.' }, { name: 'id', description: 'terminal identity.' }, { name: 'attachmentId', description: 'current writable attachment.' }, { name: 'data', description: 'input bytes represented as UTF-8 text.' }],
3046
- returns: 'after provider input acceptance.',
3047
- },
3048
- {
3049
- signature: '@Remote async resize(agent: Agent, id: WebTerminalId, attachmentId: TerminalAttachmentId, cols: number, rows: number): Promise<void>',
3050
- description: 'Update the dimensions of the PTY and recovery screen.',
3051
- parameters: [{ name: 'agent', description: 'Session owner supplied by the Gateway.' }, { name: 'id', description: 'terminal identity.' }, { name: 'attachmentId', description: 'current writable attachment.' }, { name: 'cols', description: 'column count.' }, { name: 'rows', description: 'row count.' }],
3052
- returns: 'after the resize completes.',
3147
+ signature: '@Remote({ mode: \'stream\' }) attach(agent: Agent, id: WebTerminalId, signal: AbortSignal): RemoteStream<TerminalFrame, TerminalInput>',
3148
+ description: 'Attach terminal input and output to one physical Remote stream.',
3149
+ parameters: [{ name: 'agent', description: 'Session owner supplied by the Gateway.' }, { name: 'id', description: 'terminal identity.' }, { name: 'signal', description: 'attachment cancellation; the process remains alive and input is never replayed.' }],
3150
+ returns: 'screen recovery, output, writable state and provider-acceptance acknowledgements.',
3053
3151
  },
3054
3152
  {
3055
3153
  signature: '@Remote rename(agent: Agent, id: WebTerminalId, title: string): void',
@@ -3267,6 +3365,31 @@ export const SERVICE_API = [
3267
3365
  },
3268
3366
  ],
3269
3367
  },
3368
+ {
3369
+ key: 'translator',
3370
+ summary: 'One Host service with explicit routing, cancellation and quiescent unload.',
3371
+ description: 'One Host service with explicit routing, cancellation and quiescent unload.',
3372
+ methods: [
3373
+ {
3374
+ signature: 'async availableProviders(signal?: AbortSignal): Promise<readonly TranslationProvider[]>',
3375
+ description: 'Inspect eligible native routes without inference; saved results remain readable for unavailable routes.',
3376
+ parameters: [{ name: 'signal', description: 'optional caller cancellation, combined with service disposal.' }],
3377
+ returns: 'anonymous choices followed by eligible explicitly selected paid routes.',
3378
+ },
3379
+ {
3380
+ signature: 'resolve(request: TranslationRequest): TranslationSpec',
3381
+ description: 'Resolve provider and source-language defaults without sending text.',
3382
+ parameters: [{ name: 'request', description: 'consumer text, destination and optional routing choices.' }],
3383
+ returns: 'a complete specification; exceeding `maxTextChars` throws `TRANSLATION_TEXT_LIMIT`.',
3384
+ },
3385
+ {
3386
+ signature: 'async translate(spec: TranslationSpec, signal?: AbortSignal): Promise<string>',
3387
+ description: 'Translate one resolved specification; the selected provider receives its text.',
3388
+ parameters: [{ name: 'spec', description: 'complete routing and language choices from `resolve()`.' }, { name: 'signal', description: 'optional caller cancellation, combined with service disposal.' }],
3389
+ returns: 'translated plain text, durably retained before return when a Session is supplied. An uncached supplied Session must be active; otherwise rejects with `TRANSLATION_SESSION_INACTIVE` before dispatch. Rejects provider/storage/limit failures and preserves cancellation reasons.',
3390
+ },
3391
+ ],
3392
+ },
3270
3393
  {
3271
3394
  key: 'typert',
3272
3395
  summary: 'Registry of generated schemas, package reflection, invocations, and Remote dependency providers.',
@@ -3329,9 +3452,9 @@ export const SERVICE_API = [
3329
3452
  },
3330
3453
  {
3331
3454
  signature: 'hasLiveClient(): boolean',
3332
- description: 'Check for an active Client event stream.',
3455
+ description: 'Check for an active owner Client event stream, the only kind that can answer forwarded waterfalls.',
3333
3456
  parameters: [],
3334
- returns: 'whether a stream is open and has not been cancelled.',
3457
+ returns: 'whether an owner stream is open and has not been cancelled.',
3335
3458
  },
3336
3459
  {
3337
3460
  signature: 'registerRemoteEvents( source: TypertRemoteEventSource, host: RemoteEventHostInfo, ): () => Promise<void>',
@@ -3419,6 +3542,19 @@ export const SERVICE_API = [
3419
3542
  },
3420
3543
  ],
3421
3544
  },
3545
+ {
3546
+ key: 'webApp',
3547
+ summary: 'The Web GUI this process serves, provided by the `web-runtime` row.',
3548
+ description: 'The Web GUI this process serves, provided by the `web-runtime` row.',
3549
+ methods: [
3550
+ {
3551
+ signature: 'getAdvertisedUrl(): string',
3552
+ description: 'The URL this GUI advertises, also used for `DSH_WEB_URL` and the startup URL line.',
3553
+ parameters: [],
3554
+ returns: 'the configured `publicUrl`, otherwise the listener origin.',
3555
+ },
3556
+ ],
3557
+ },
3422
3558
  {
3423
3559
  key: 'webhookRuntime',
3424
3560
  summary: 'Fire-and-forget rule runtime.',
@@ -3441,8 +3577,15 @@ export const SERVICE_API = [
3441
3577
  {
3442
3578
  key: 'webServer',
3443
3579
  summary: 'The browser HTTP carrier service.',
3444
- description: 'The browser HTTP carrier service. Activation listens immediately. Route registration order does not affect requests because configured named routes must be distinct, and the fallback handler answers anything not yet claimed during startup with 404 until its owner registers. A listen failure rejects initialization, and the boot process reports the failed fiber.',
3580
+ description: 'The browser HTTP carrier service. Activation loads any configured TLS material, then listens immediately; a material or listen failure rejects initialization, and the boot process reports the failed fiber. Route registration order does not affect requests because configured named routes must be distinct, and the fallback handler answers anything not yet claimed during startup with 404 until its owner registers.',
3445
3581
  methods: [
3582
+ {
3583
+ signature: 'getOrigin(): string',
3584
+ description: 'The root URL local clients use to reach the bound listener: the protocol, the bindUrlHost form of the bind address, and the listening port.',
3585
+ parameters: [],
3586
+ returns: 'the origin, for example `http://127.0.0.1:3080`.',
3587
+ throws: ['before `listen` binds a port, or when the bind address has no URL form.'],
3588
+ },
3446
3589
  {
3447
3590
  signature: 'register(route: WebRoute): () => void',
3448
3591
  description: 'Register a named route. Duplicate (kind, path) throws — route patterns are a composition-level contract, so a collision is a misconfiguration.',
@@ -3500,6 +3643,38 @@ export const SERVICE_API = [
3500
3643
  },
3501
3644
  ],
3502
3645
  },
3646
+ {
3647
+ key: 'workingDirectory',
3648
+ summary: 'One owner for each Session\'s effective directory and its model-visible changes.',
3649
+ description: 'One owner for each Session\'s effective directory and its model-visible changes.',
3650
+ methods: [
3651
+ {
3652
+ signature: 'readonly defaultDirectory: string',
3653
+ description: 'Absolute deployment fallback for Sessions with no recorded original directory.',
3654
+ parameters: [],
3655
+ },
3656
+ {
3657
+ signature: 'get(session: Session): string',
3658
+ description: 'Read the committed directory without filesystem I/O.',
3659
+ parameters: [{ name: 'session', description: 'Session whose directory is requested.' }],
3660
+ returns: 'its effective absolute directory.',
3661
+ },
3662
+ {
3663
+ signature: 'ensure(agent: Agent, signal?: AbortSignal): Promise<string>',
3664
+ description: 'Validate the current directory and restore the original project when it disappeared.',
3665
+ parameters: [{ name: 'agent', description: 'live or unpublished Agent owning the Session.' }, { name: 'signal', description: 'cancellation for filesystem inspection.' }],
3666
+ returns: 'the existing directory; recovery is committed before fulfillment. A notice failure is warned without reverting the committed state.',
3667
+ throws: ['when the original project is also unavailable.'],
3668
+ },
3669
+ {
3670
+ signature: 'set(agent: Agent, path: string, signal?: AbortSignal): Promise<string>',
3671
+ description: 'Change one Session\'s directory without changing existing processes or permissions.',
3672
+ parameters: [{ name: 'agent', description: 'live or unpublished Agent owning the Session.' }, { name: 'path', description: 'absolute path or a path relative to its current directory.' }, { name: 'signal', description: 'cancellation before the durable change.' }],
3673
+ returns: 'the canonical absolute directory, committed before fulfillment. A notice failure is warned; the next request still receives the committed directory.',
3674
+ throws: ['when the requested path is not an existing directory.'],
3675
+ },
3676
+ ],
3677
+ },
3503
3678
  {
3504
3679
  key: 'workspaceChanges',
3505
3680
  summary: 'Serves the summaries and file comparisons the recorder keeps for live Sessions.',
@@ -3586,8 +3761,8 @@ export const SERVICE_API = [
3586
3761
  returns: 'the complete resulting pin set, most recently pinned first.',
3587
3762
  },
3588
3763
  {
3589
- signature: '@Remote({ mode: \'stream\' }) follow(signal: AbortSignal): AsyncIterable<WorkspaceFollowFrame>',
3590
- description: 'Stream a complete Workspace baseline followed by ordered increments.',
3764
+ signature: '@Remote({ mode: \'stream\' }) async *follow(signal: AbortSignal): AsyncIterable<WorkspaceFollowFrame>',
3765
+ description: 'Stream a complete Workspace baseline followed by ordered increments. A non-owner receives only the Workspaces and Sessions `allows()` admits. When a delivered Workspace is no longer admitted at its next change or the next order change, the stream sends a `replace` frame with the complete filtered state instead of a `remove`, because a Client never resurrects a removed Workspace; a `remove` frame reports a deletion and reaches only a Client that received that Workspace.',
3591
3766
  parameters: [{ name: 'signal', description: 'generation cancellation.' }],
3592
3767
  returns: 'baseline followed by ordered Workspace increments.',
3593
3768
  },
@@ -3704,6 +3879,19 @@ export const SERVICE_API = [
3704
3879
  },
3705
3880
  ],
3706
3881
  },
3882
+ {
3883
+ key: 'worktrees',
3884
+ summary: 'Creates retained Git worktrees under the mounted filesystem and sandbox providers.',
3885
+ description: 'Creates retained Git worktrees under the mounted filesystem and sandbox providers.',
3886
+ methods: [
3887
+ {
3888
+ signature: 'async create(agent: Agent, request: CreateWorktreeRequest = {}, signal?: AbortSignal): Promise<CreatedWorktree>',
3889
+ description: 'Create a fresh branch and checkout at a pinned local revision, then enter it. Existing branches or checkout paths fail. Uncommitted files stay in the source checkout. Checkout disables configured clean, smudge, and process filters without changing Git config. Repository-local replacement refs still apply; baseCommit reports the resolved object name. The new checkout becomes current only after Git setup succeeds. Failures may retain newly allocated Git/filesystem artifacts; no branch or checkout is removed automatically.',
3890
+ parameters: [{ name: 'agent', description: 'caller whose current directory selects the source repository and file policy.' }, { name: 'request', description: 'optional new name and local revision; defaults are generated name and HEAD.' }, { name: 'signal', description: 'cancellation of lookup, creation, and working-directory publication.' }],
3891
+ returns: 'canonical checkout path, branch name, pinned commit, and source repository root.',
3892
+ },
3893
+ ],
3894
+ },
3707
3895
  ];
3708
3896
  /** Every harness event, sorted by name. */
3709
3897
  export const EVENT_API = [
@@ -4470,6 +4658,14 @@ export const TYPE_API = [
4470
4658
  name: 'AgentStatus',
4471
4659
  declaration: 'export type AgentStatus = \'idle\' | \'running\';',
4472
4660
  },
4661
+ {
4662
+ name: 'AnonymousTranslationProvider',
4663
+ declaration: 'export type AnonymousTranslationProvider = \'google\' | \'bing\';',
4664
+ },
4665
+ {
4666
+ name: 'AnonymousTranslationSpec',
4667
+ declaration: 'export interface AnonymousTranslationSpec extends TranslationSpecFields {\n readonly provider: AnonymousTranslationProvider;\n}',
4668
+ },
4473
4669
  {
4474
4670
  name: 'AnyHook',
4475
4671
  declaration: 'export type AnyHook = ModHook<unknown, unknown>;',
@@ -4544,7 +4740,7 @@ export const TYPE_API = [
4544
4740
  },
4545
4741
  {
4546
4742
  name: 'AssembledContext',
4547
- declaration: 'export interface AssembledContext {\n name: string;\n text: string;\n}',
4743
+ declaration: 'export interface AssembledContext {\n name: string;\n text: string;\n interpolate?: boolean;\n}',
4548
4744
  },
4549
4745
  {
4550
4746
  name: 'AssembledSection',
@@ -4672,7 +4868,7 @@ export const TYPE_API = [
4672
4868
  },
4673
4869
  {
4674
4870
  name: 'BundleInfo',
4675
- declaration: 'export interface BundleInfo {\n name: string;\n version?: string;\n meta?: PluginLocalizedMeta;\n description?: string;\n enabled: boolean;\n installed: boolean;\n source?: string;\n optional: boolean;\n removable: boolean;\n readOnlyReason?: ReadOnlyReason;\n error?: ManagementError;\n rows: BundleRowInfo[];\n overrides: string[];\n}',
4871
+ declaration: 'export interface BundleInfo {\n name: string;\n official: boolean;\n availability: \'installation\' | \'profile\' | \'missing\';\n installTarget?: {\n spec: string;\n version: string;\n };\n version?: string;\n meta?: PluginLocalizedMeta;\n description?: string;\n enabled: boolean;\n installed: boolean;\n source?: string;\n optional: boolean;\n removable: boolean;\n readOnlyReason?: ReadOnlyReason;\n error?: ManagementError;\n rows: BundleRowInfo[];\n overrides: string[];\n}',
4676
4872
  },
4677
4873
  {
4678
4874
  name: 'BundleRowInfo',
@@ -4684,7 +4880,7 @@ export const TYPE_API = [
4684
4880
  },
4685
4881
  {
4686
4882
  name: 'ChangeResult',
4687
- declaration: 'export interface ChangeResult {\n changed: boolean;\n application: \'applied\' | \'restart-required\' | \'overridden\' | \'failed\' | \'cancelled\';\n stage: \'install\' | \'enable\' | \'remove\';\n target: string;\n enabled?: boolean;\n error?: ManagementError;\n warnings?: string[];\n packageResult?: PackageResult;\n bundle?: string;\n version?: string;\n pendingBuilds?: string[];\n approvedBuilds?: string[];\n registries?: Registry[];\n failedAt?: \'registry\' | \'spec-host\';\n}',
4883
+ declaration: 'export interface ChangeResult {\n changed: boolean;\n application: \'applied\' | \'restart-required\' | \'overridden\' | \'failed\' | \'cancelled\';\n restartReason?: RestartReason;\n stage: \'install\' | \'enable\' | \'remove\';\n target: string;\n enabled?: boolean;\n error?: ManagementError;\n warnings?: string[];\n packageResult?: PackageResult;\n bundle?: string;\n version?: string;\n pendingBuilds?: string[];\n approvedBuilds?: string[];\n registries?: Registry[];\n failedAt?: \'registry\' | \'spec-host\';\n}',
4688
4884
  },
4689
4885
  {
4690
4886
  name: 'ClientArtifactBaseline',
@@ -4774,6 +4970,10 @@ export const TYPE_API = [
4774
4970
  name: 'ComputerUseProviderName',
4775
4971
  declaration: 'export type ComputerUseProviderName = Branded<\'ComputerUseProviderName\'>;',
4776
4972
  },
4973
+ {
4974
+ name: 'ConfigureCall',
4975
+ declaration: 'export type ConfigureCall = (controls: Readonly<LlmCallControls>, model: Readonly<LlmResolvedModelInfo>) => LlmCallControls;',
4976
+ },
4777
4977
  {
4778
4978
  name: 'ConfinedArgv',
4779
4979
  declaration: 'export interface ConfinedArgv {\n argv: string[];\n enforcement: SandboxEnforcement;\n denialSignatures: readonly string[];\n runnerFailureRules: readonly RunnerFailureRule[];\n}',
@@ -4782,9 +4982,13 @@ export const TYPE_API = [
4782
4982
  name: 'ConfinedSandboxMode',
4783
4983
  declaration: 'export type ConfinedSandboxMode = Exclude<SandboxMode, \'danger-full-access\'>;',
4784
4984
  },
4985
+ {
4986
+ name: 'ConnectionAdmission',
4987
+ declaration: 'export type ConnectionAdmission = {\n readonly peer: PeerScope;\n readonly release: () => Promise<void>;\n} | {\n readonly rejection: 401 | 403 | 409;\n};',
4988
+ },
4785
4989
  {
4786
4990
  name: 'ConnectionFetchHandler',
4787
- declaration: 'export interface ConnectionFetchHandler {\n requestBodyMode(request: {\n readonly method: string;\n readonly url: URL;\n }): ConnectionRequestBodyMode;\n fetch(request: Request): Promise<Response>;\n}',
4991
+ declaration: 'export interface ConnectionFetchHandler {\n requestBodyMode(request: {\n readonly method: string;\n readonly url: URL;\n }): ConnectionRequestBodyMode;\n fetch(request: Request, peer: PeerScope): Promise<Response>;\n}',
4788
4992
  },
4789
4993
  {
4790
4994
  name: 'ConnectionFetchMethod',
@@ -4848,24 +5052,12 @@ export const TYPE_API = [
4848
5052
  },
4849
5053
  {
4850
5054
  name: 'ContinuableCreateRequest',
4851
- declaration: 'export interface ContinuableCreateRequest {\n readonly sessionId: SessionId;\n readonly parent: Agent;\n readonly signal: AbortSignal;\n}',
5055
+ declaration: 'export interface ContinuableCreateRequest {\n readonly cwd: string;\n readonly sessionId: SessionId;\n readonly parent: Agent;\n readonly signal: AbortSignal;\n}',
4852
5056
  },
4853
5057
  {
4854
5058
  name: 'ContinuableCreateSpec',
4855
5059
  declaration: 'export interface ContinuableCreateSpec {\n readonly seed?: readonly SessionEvent[];\n}',
4856
5060
  },
4857
- {
4858
- name: 'ContinuableStart',
4859
- declaration: 'export interface ContinuableStart {\n readonly childId: SessionId;\n readonly messageId: MessageId;\n}',
4860
- },
4861
- {
4862
- name: 'ContinuableStartSpec',
4863
- declaration: 'export interface ContinuableStartSpec {\n readonly provider: string;\n readonly label: string;\n readonly childId?: SessionId;\n readonly request: Omit<SubagentStartRequest, \'label\' | \'signal\' | \'outputSchema\'>;\n readonly signal: AbortSignal;\n}',
4864
- },
4865
- {
4866
- name: 'ContinuableSubagentDescriptorData',
4867
- declaration: 'export interface ContinuableSubagentDescriptorData extends SubagentDescriptorBase {\n readonly mode: \'continuable\';\n readonly label: string;\n readonly agentProvider?: string;\n readonly agentModel?: string;\n readonly agentReasoningEffort?: ReasoningEffortId;\n readonly persona?: string;\n readonly toolFilter?: ToolRestriction;\n}',
4868
- },
4869
5061
  {
4870
5062
  name: 'CordisDynamicPackageId',
4871
5063
  declaration: 'export type CordisDynamicPackageId = Branded<\'CordisDynamicPackageId\'>;',
@@ -4934,10 +5126,22 @@ export const TYPE_API = [
4934
5126
  name: 'CordisRuntimeTreeReader',
4935
5127
  declaration: 'export interface CordisRuntimeTreeReader {\n getTree(): Promise<CordisRuntimeTree>;\n}',
4936
5128
  },
5129
+ {
5130
+ name: 'CotTranslationPreferences',
5131
+ declaration: 'export interface CotTranslationPreferences {\n provider: TranslationProvider;\n targetLanguage: string;\n}',
5132
+ },
5133
+ {
5134
+ name: 'CotTranslationSnapshot',
5135
+ declaration: 'export interface CotTranslationSnapshot {\n maxTextChars: number;\n preferences: CotTranslationPreferences;\n availableProviders: readonly TranslationProvider[];\n}',
5136
+ },
4937
5137
  {
4938
5138
  name: 'CreateAgentOptions',
4939
5139
  declaration: 'export interface CreateAgentOptions {\n readonly sessionId: SessionId;\n readonly parentAgent?: Agent;\n readonly meta?: {\n readonly cwd?: string;\n readonly parentSession?: SessionId;\n readonly isSeeded?: boolean;\n readonly origin?: \'subagent\';\n readonly delegationDepth?: number;\n readonly agentPreset?: string;\n };\n readonly inheritedEventCount?: SessionLogOffset;\n readonly seed?: readonly SessionEvent[];\n readonly agentOptions?: AgentOptions;\n readonly signal?: AbortSignal;\n readonly setup?: AgentSetup;\n}',
4940
5140
  },
5141
+ {
5142
+ name: 'CreatedWorktree',
5143
+ declaration: 'export interface CreatedWorktree {\n path: string;\n branch: string;\n baseCommit: string;\n repositoryRoot: string;\n}',
5144
+ },
4941
5145
  {
4942
5146
  name: 'CreateGoalRequest',
4943
5147
  declaration: 'export interface CreateGoalRequest {\n readonly objective: string;\n readonly maxGoalRounds?: number;\n}',
@@ -4954,6 +5158,10 @@ export const TYPE_API = [
4954
5158
  name: 'CreateTeamTaskRequest',
4955
5159
  declaration: 'export interface CreateTeamTaskRequest {\n readonly subject: string;\n readonly description: string;\n readonly blockedBy?: readonly TeamTaskId[];\n readonly writeScopes?: readonly string[];\n}',
4956
5160
  },
5161
+ {
5162
+ name: 'CreateWorktreeRequest',
5163
+ declaration: 'export interface CreateWorktreeRequest {\n name?: string;\n from?: string;\n}',
5164
+ },
4957
5165
  {
4958
5166
  name: 'CredentialInfo',
4959
5167
  declaration: 'export interface CredentialInfo {\n configured: boolean;\n source?: string;\n writable: boolean;\n}',
@@ -5144,7 +5352,7 @@ export const TYPE_API = [
5144
5352
  },
5145
5353
  {
5146
5354
  name: 'EventLogOptions',
5147
- declaration: 'export interface EventLogOptions {\n exporter: SessionLogOptions[\'exporter\'];\n resourceAttributes: Attributes;\n scope: {\n name: string;\n version?: string;\n };\n processor: Omit<BatchLogRecordProcessorOptions, \'exporter\'>;\n onFailure: SessionLogOptions[\'onFailure\'];\n}',
5355
+ declaration: 'export interface EventLogOptions {\n exporter: LogExporterOptions;\n resourceAttributes: Attributes;\n scope: {\n name: string;\n version?: string;\n };\n processor: Omit<BatchLogRecordProcessorOptions, \'exporter\'>;\n onFailure: SessionLogOptions[\'onFailure\'];\n}',
5148
5356
  },
5149
5357
  {
5150
5358
  name: 'EventLogReporter',
@@ -5392,7 +5600,7 @@ export const TYPE_API = [
5392
5600
  },
5393
5601
  {
5394
5602
  name: 'InstallBundleOptions',
5395
- declaration: 'export interface InstallBundleOptions {\n enabled?: boolean;\n requestId?: PluginInstallRequestId;\n approvedBuilds?: string[];\n registry?: Registry;\n}',
5603
+ declaration: 'export interface InstallBundleOptions {\n enabled?: boolean;\n saveExact?: boolean;\n requestId?: PluginInstallRequestId;\n approvedBuilds?: string[];\n registry?: Registry;\n}',
5396
5604
  },
5397
5605
  {
5398
5606
  name: 'InstallSpecKind',
@@ -5420,11 +5628,11 @@ export const TYPE_API = [
5420
5628
  },
5421
5629
  {
5422
5630
  name: 'InvocationDescriptor',
5423
- declaration: 'export interface InvocationDescriptor {\n readonly id: string;\n readonly service: string;\n readonly namespace: string;\n readonly method: string;\n readonly implementation?: string;\n readonly mode?: \'stream\';\n readonly invocation: {\n readonly kind: \'direct\';\n } | {\n readonly kind: \'context\';\n readonly context: string;\n readonly wire: string;\n readonly codec: TypertCodec;\n };\n readonly scope?: {\n readonly context: string;\n readonly wire: string;\n };\n readonly parameters: readonly InvocationParameterDescriptor[];\n readonly uplink?: {\n readonly codec: TypertCodec;\n };\n readonly cancellation?: {\n readonly parameter: \'signal\';\n };\n readonly result: TypertCodec;\n readonly sourceLocation?: InvocationSourceLocation;\n}',
5631
+ declaration: 'export interface InvocationDescriptor {\n readonly id: string;\n readonly service: string;\n readonly namespace: string;\n readonly method: string;\n readonly implementation?: string;\n readonly mode?: \'stream\';\n readonly invocation: {\n readonly kind: \'direct\';\n } | {\n readonly kind: \'context\';\n readonly context: string;\n readonly wire: string;\n readonly codec: TypertCodec;\n };\n readonly scope?: {\n readonly context: string;\n readonly wire: string;\n };\n readonly parameters: readonly InvocationParameterDescriptor[];\n readonly uplink?: {\n readonly codec: TypertCodec;\n };\n readonly cancellation?: {\n readonly parameter: \'signal\';\n };\n readonly result: TypertCodec;\n readonly description?: string;\n readonly sourceLocation?: InvocationSourceLocation;\n}',
5424
5632
  },
5425
5633
  {
5426
5634
  name: 'InvocationParameterDescriptor',
5427
- declaration: 'export interface InvocationParameterDescriptor {\n readonly name: string;\n readonly wire: string;\n readonly source: \'json\' | \'lookup\';\n readonly lookup?: string;\n readonly codec: TypertCodec;\n readonly acceptsUndefined?: true;\n}',
5635
+ declaration: 'export interface InvocationParameterDescriptor {\n readonly name: string;\n readonly description?: string;\n readonly wire: string;\n readonly source: \'json\' | \'lookup\';\n readonly lookup?: string;\n readonly codec: TypertCodec;\n readonly acceptsUndefined?: true;\n}',
5428
5636
  },
5429
5637
  {
5430
5638
  name: 'InvocationSourceLocation',
@@ -5432,7 +5640,7 @@ export const TYPE_API = [
5432
5640
  },
5433
5641
  {
5434
5642
  name: 'InvokeRemoteRequest',
5435
- declaration: 'export interface InvokeRemoteRequest {\n readonly namespace: string;\n readonly method: string;\n readonly args: Readonly<Record<string, unknown>>;\n readonly uplink?: AsyncIterable<unknown>;\n readonly peer?: PeerScope;\n readonly signal?: AbortSignal;\n}',
5643
+ declaration: 'export interface InvokeRemoteRequest {\n readonly namespace: string;\n readonly method: string;\n readonly args: Readonly<Record<string, unknown>>;\n readonly uplink?: AsyncIterable<unknown>;\n readonly uplinkWindow?: RemoteUplinkWindow | undefined;\n readonly peer: PeerScope;\n readonly signal?: AbortSignal;\n}',
5436
5644
  },
5437
5645
  {
5438
5646
  name: 'JobAppendOptions',
@@ -5496,7 +5704,7 @@ export const TYPE_API = [
5496
5704
  },
5497
5705
  {
5498
5706
  name: 'JobKindMap',
5499
- declaration: 'export interface JobKindMap {\n bash: \'bash\';\n subagent: \'subagent\';\n}',
5707
+ declaration: 'export interface JobKindMap {\n bash: \'bash\';\n}',
5500
5708
  },
5501
5709
  {
5502
5710
  name: 'JobListFrame',
@@ -5532,12 +5740,16 @@ export const TYPE_API = [
5532
5740
  },
5533
5741
  {
5534
5742
  name: 'JobSpec',
5535
- declaration: 'export interface JobSpec {\n kind: JobKind;\n label: string;\n owner?: SessionId;\n outputLimitBytes?: number;\n output?: readonly JobOutputSource[];\n run(job: JobHandle): JobHooks;\n}',
5743
+ declaration: 'export interface JobSpec {\n kind: JobKind;\n label: string;\n owner?: SessionId;\n toolCall?: JobToolCall;\n outputLimitBytes?: number;\n output?: readonly JobOutputSource[];\n run(job: JobHandle): JobHooks;\n}',
5536
5744
  },
5537
5745
  {
5538
5746
  name: 'JobStatus',
5539
5747
  declaration: 'export type JobStatus = \'running\' | \'stopping\' | \'completed\' | \'killed\' | \'failed\';',
5540
5748
  },
5749
+ {
5750
+ name: 'JobToolCall',
5751
+ declaration: 'export interface JobToolCall {\n readonly callId: SessionEventMap[\'tool/call\'][\'callId\'];\n readonly rootCallId: SessionEventMap[\'tool/call\'][\'callId\'];\n}',
5752
+ },
5541
5753
  {
5542
5754
  name: 'JobView',
5543
5755
  declaration: 'export interface JobView {\n readonly id: JobId;\n readonly kind: string;\n readonly label: string;\n readonly owner?: SessionId;\n readonly outputLimitBytes?: number;\n readonly status: JobStatus;\n readonly progress?: string;\n readonly detail?: string;\n readonly startedAt: number;\n readonly finishedAt?: number;\n readonly output: {\n readonly total: number;\n readonly earliest: number;\n readonly spillPaths?: readonly string[];\n };\n}',
@@ -5576,7 +5788,7 @@ export const TYPE_API = [
5576
5788
  },
5577
5789
  {
5578
5790
  name: 'LlmAdapter',
5579
- declaration: 'export abstract class LlmAdapter {\n providerInfo(provider: string): LlmProviderInfo;\n providerRetryPolicy(_provider: string): ResolvedRetryPolicy | undefined;\n imageRequestPricing(_provider: string, _model: string): LlmImageRequestPricing | undefined;\n listModels(_provider: string): Promise<readonly LlmModelInfo[]>;\n resolveModel(provider: string, model: string, _signal?: AbortSignal): Promise<LlmResolvedModelInfo>;\n async prepareCall(provider: string, model: string, signal?: AbortSignal): Promise<PreparedAdapterCall>;\n abstract stream(options: GenerateOptions): AsyncIterable<StreamChunk>;\n}',
5791
+ declaration: 'export abstract class LlmAdapter {\n providerInfo(provider: string): LlmProviderInfo;\n providerRetryPolicy(_provider: string): ResolvedRetryPolicy | undefined;\n imageRequestPricing(_provider: string, _model: string): LlmImageRequestPricing | undefined;\n imageRequestTarget(_provider: string, _model: string, image: ImageAttachmentRef): ImageRequestTarget;\n listModels(_provider: string): Promise<readonly LlmModelInfo[]>;\n resolveModel(provider: string, model: string, _signal?: AbortSignal): Promise<LlmResolvedModelInfo>;\n async prepareCall(provider: string, model: string, signal?: AbortSignal): Promise<PreparedAdapterCall>;\n abstract stream(options: GenerateOptions): AsyncIterable<StreamChunk>;\n}',
5580
5792
  },
5581
5793
  {
5582
5794
  name: 'LlmAttemptId',
@@ -5584,15 +5796,19 @@ export const TYPE_API = [
5584
5796
  },
5585
5797
  {
5586
5798
  name: 'LlmCallConfig',
5587
- declaration: 'export interface LlmCallConfig {\n provider: string;\n model: string;\n reasoningEffort?: ReasoningEffortId;\n temperature?: number;\n maxTokens?: number;\n stop?: string[];\n}',
5799
+ declaration: 'export interface LlmCallConfig extends LlmCallControls {\n provider: string;\n model: string;\n}',
5588
5800
  },
5589
5801
  {
5590
5802
  name: 'LlmCallConfigAdapterDefaults',
5591
5803
  declaration: 'export interface LlmCallConfigAdapterDefaults {\n reasoningEffort?: true;\n maxTokens?: true;\n}',
5592
5804
  },
5805
+ {
5806
+ name: 'LlmCallControls',
5807
+ declaration: 'export interface LlmCallControls {\n reasoningEffort?: ReasoningEffortId;\n temperature?: number;\n maxTokens?: number;\n stop?: string[];\n}',
5808
+ },
5593
5809
  {
5594
5810
  name: 'LlmConfigurableProvider',
5595
- declaration: 'export interface LlmConfigurableProvider {\n provider: string;\n displayName: string;\n settingsNs: string;\n settingsPath: readonly string[];\n declared?: boolean;\n error?: string;\n}',
5811
+ declaration: 'export interface LlmConfigurableProvider {\n provider: string;\n displayName: string;\n settingsNs: string;\n settingsPath: readonly string[];\n declared?: boolean;\n defaultBaseURL?: string;\n baseURLEnv?: readonly string[];\n nativeAuth?: LlmNativeAuth;\n error?: string;\n}',
5596
5812
  },
5597
5813
  {
5598
5814
  name: 'LlmDiscoveredModel',
@@ -5626,6 +5842,10 @@ export const TYPE_API = [
5626
5842
  name: 'LlmModelReasoningInfo',
5627
5843
  declaration: 'export interface LlmModelReasoningInfo {\n efforts: readonly LlmReasoningEffortInfo[];\n defaultEffort?: ReasoningEffortId;\n}',
5628
5844
  },
5845
+ {
5846
+ name: 'LlmNativeAuth',
5847
+ declaration: 'export interface LlmNativeAuth {\n env: readonly string[];\n oauth: boolean;\n}',
5848
+ },
5629
5849
  {
5630
5850
  name: 'LlmProviderInfo',
5631
5851
  declaration: 'export interface LlmProviderInfo {\n id: string;\n name: string;\n}',
@@ -5640,7 +5860,7 @@ export const TYPE_API = [
5640
5860
  },
5641
5861
  {
5642
5862
  name: 'LlmRuntime',
5643
- declaration: 'export class LlmRuntime extends TypertRemoteService {\n constructor(ctx: Context);\n registerAdapter(providers: string[], adapter: LlmAdapter): AdapterRegistrationHandle;\n @Remote\n listProviders(): LlmProviderInfo[];\n registerConfigurableProviders(entries: readonly LlmConfigurableProvider[]): DirectoryRegistrationHandle;\n @Remote\n listConfigurableProviders(): LlmConfigurableProvider[];\n registerModelDiscovery(settingsNs: string, discover: (request: LlmModelDiscoveryRequest, signal?: AbortSignal) => Promise<readonly LlmDiscoveredModel[]>): () => void;\n async discoverModels(settingsNs: string, request: LlmModelDiscoveryRequest, signal?: AbortSignal): Promise<LlmDiscoveredModel[]>;\n @Remote(\'discoverModels\')\n async remoteDiscoverModels(settingsNs: string, request: LlmModelDiscoveryRequest, signal: AbortSignal): Promise<LlmDiscoveredModel[]>;\n providerRetryPolicy(provider: string): ResolvedRetryPolicy;\n imageRequestPricing(provider: string, model: string): LlmImageRequestPricing | undefined;\n fileRequestText(ref: FileAttachmentRef): string;\n async listModels(provider: string): Promise<LlmModelInfo[]>;\n async resolveModelInfo(provider: string, model: string, signal?: AbortSignal): Promise<LlmResolvedModelInfo>;\n async resolveCallConfig(config: LlmCallConfig, signal?: AbortSignal): Promise<LlmCallConfig>;\n async prepareCall(config: LlmCallConfig, signal?: AbortSignal): Promise<PreparedLlmCall>;\n stream(options: GenerateOptions) /* …truncated — full shape in source */',
5863
+ declaration: 'export class LlmRuntime extends TypertRemoteService {\n constructor(ctx: Context);\n registerAdapter(providers: string[], adapter: LlmAdapter): AdapterRegistrationHandle;\n @Remote\n listProviders(): LlmProviderInfo[];\n registerConfigurableProviders(entries: readonly LlmConfigurableProvider[]): DirectoryRegistrationHandle;\n @Remote\n listConfigurableProviders(): LlmConfigurableProvider[];\n registerModelDiscovery(settingsNs: string, discover: (request: LlmModelDiscoveryRequest, signal?: AbortSignal) => Promise<readonly LlmDiscoveredModel[]>): () => void;\n async discoverModels(settingsNs: string, request: LlmModelDiscoveryRequest, signal?: AbortSignal): Promise<LlmDiscoveredModel[]>;\n @Remote(\'discoverModels\')\n async remoteDiscoverModels(settingsNs: string, request: LlmModelDiscoveryRequest, signal: AbortSignal): Promise<LlmDiscoveredModel[]>;\n providerRetryPolicy(provider: string): ResolvedRetryPolicy;\n imageRequestPricing(provider: string, model: string): LlmImageRequestPricing | undefined;\n imageRequestTarget(provider: string, model: string, image: ImageAttachmentRef): ImageRequestTarget;\n fileRequestText(ref: FileAttachmentRef): string;\n async listModels(provider: string): Promise<LlmModelInfo[]>;\n async resolveModelInfo(provider: string, model: string, signal?: AbortSignal): Promise<LlmResolvedModelInfo>;\n async resolveCallConfig(config: LlmCallConfig, signal?: AbortSignal): Promise<LlmCallConfig>;\n async prepareCall(conf /* …truncated — full shape in source */',
5644
5864
  },
5645
5865
  {
5646
5866
  name: 'LocalAtInput',
@@ -5650,6 +5870,10 @@ export const TYPE_API = [
5650
5870
  name: 'LocalizedText',
5651
5871
  declaration: 'export type LocalizedText = string | {\n readonly en: string;\n readonly [locale: string]: string;\n};',
5652
5872
  },
5873
+ {
5874
+ name: 'LogExporterOptions',
5875
+ declaration: 'export type LogExporterOptions = Omit<OTLPExporterNodeConfigBase, \'selfObsMeterProvider\'> & {\n url: string;\n};',
5876
+ },
5653
5877
  {
5654
5878
  name: 'LspHover',
5655
5879
  declaration: 'export interface LspHover {\n readonly contents: string;\n readonly range?: LspRange;\n}',
@@ -5692,7 +5916,7 @@ export const TYPE_API = [
5692
5916
  },
5693
5917
  {
5694
5918
  name: 'ManagementError',
5695
- declaration: 'export interface ManagementError {\n code: ReadOnlyReason | \'unknown-plugin\' | \'invalid-spec\' | \'ambiguous-install\' | \'not-bundle\' | \'not-removable\' | \'stop-profile\' | \'bundle-in-use\' | \'stale-approval\' | \'incompatible-version\' | \'operation-error\';\n diagnostic?: string;\n incompatible?: IncompatiblePlugin[];\n}',
5919
+ declaration: 'export interface ManagementError {\n code: ReadOnlyReason | \'unknown-plugin\' | \'invalid-spec\' | \'already-installed\' | \'ambiguous-install\' | \'not-bundle\' | \'not-removable\' | \'stop-profile\' | \'bundle-in-use\' | \'stale-approval\' | \'incompatible-version\' | \'operation-error\';\n diagnostic?: string;\n incompatible?: IncompatiblePlugin[];\n}',
5696
5920
  },
5697
5921
  {
5698
5922
  name: 'ManualCompactAgentContext',
@@ -5914,10 +6138,6 @@ export const TYPE_API = [
5914
6138
  name: 'OneShotScheduleRecord',
5915
6139
  declaration: 'export type OneShotScheduleRecord = AfterScheduleRecord | AtScheduleRecord;',
5916
6140
  },
5917
- {
5918
- name: 'OneShotSubagentDescriptorData',
5919
- declaration: 'export interface OneShotSubagentDescriptorData extends SubagentDescriptorBase {\n readonly mode: \'one-shot\';\n readonly label?: string;\n}',
5920
- },
5921
6141
  {
5922
6142
  name: 'OptionalSessionSeq',
5923
6143
  declaration: 'export type OptionalSessionSeq = SessionSeq | null;',
@@ -5934,6 +6154,14 @@ export const TYPE_API = [
5934
6154
  name: 'PackageResult',
5935
6155
  declaration: 'export interface PackageResult {\n exitCode: number;\n output: string;\n truncated: boolean;\n logPath: string;\n kind?: PluginInstallFailureKind;\n timedOut?: boolean;\n incompatible?: IncompatiblePlugin[];\n}',
5936
6156
  },
6157
+ {
6158
+ name: 'PaidTranslationProvider',
6159
+ declaration: 'export type PaidTranslationProvider = \'deepseek-account\' | \'deepseek-official\';',
6160
+ },
6161
+ {
6162
+ name: 'PaidTranslationSpec',
6163
+ declaration: 'export interface PaidTranslationSpec extends TranslationSpecFields {\n readonly provider: PaidTranslationProvider;\n readonly sessionId: SessionId;\n}',
6164
+ },
5937
6165
  {
5938
6166
  name: 'PaneOpenArgs',
5939
6167
  declaration: 'export interface PaneOpenArgs {\n id: string;\n title?: string;\n focus?: true;\n closeOnEscape?: true;\n holdToasts?: true;\n rows?: number;\n columns?: number;\n}',
@@ -5952,7 +6180,11 @@ export const TYPE_API = [
5952
6180
  },
5953
6181
  {
5954
6182
  name: 'PeerScope',
5955
- declaration: 'export interface PeerScope {\n readonly id: PeerId;\n readonly ctx: Context;\n dispose(): Promise<void>;\n}',
6183
+ declaration: 'export interface PeerScope {\n readonly id: PeerId;\n readonly ctx: Context;\n readonly principal: Principal;\n readonly signal: AbortSignal;\n readonly interactions: \'answer\' | \'none\';\n dispose(): Promise<void>;\n}',
6184
+ },
6185
+ {
6186
+ name: 'PendingModule',
6187
+ declaration: 'export interface PendingModule {\n url: string;\n reason: \'host-module\' | \'unmanaged-plugin\' | \'module-comparison\';\n}',
5956
6188
  },
5957
6189
  {
5958
6190
  name: 'PermissionCatalog',
@@ -6074,6 +6306,14 @@ export const TYPE_API = [
6074
6306
  name: 'PreToolDecision',
6075
6307
  declaration: 'export type PreToolDecision = {\n kind: \'allow\';\n} | {\n kind: \'deny\';\n reason: string;\n info?: ToolErrorInfo;\n} | {\n kind: \'cancel\';\n} | {\n kind: \'ask\';\n reason?: string;\n displayReason?: {\n readonly en: string;\n readonly [locale: string]: string;\n };\n};',
6076
6308
  },
6309
+ {
6310
+ name: 'Principal',
6311
+ declaration: 'export type Principal = PrincipalMap[keyof PrincipalMap];',
6312
+ },
6313
+ {
6314
+ name: 'PrincipalMap',
6315
+ declaration: 'export interface PrincipalMap {\n owner: {\n readonly kind: \'owner\';\n };\n}',
6316
+ },
6077
6317
  {
6078
6318
  name: 'ProductEvent',
6079
6319
  declaration: 'export type ProductEvent = {\n [K in keyof ProductEventMap]: {\n eventName: K;\n attributes: ProductEventMap[K];\n timestamp: number;\n };\n}[keyof ProductEventMap];',
@@ -6090,6 +6330,10 @@ export const TYPE_API = [
6090
6330
  name: 'ProfilePnpmInvocation',
6091
6331
  declaration: 'export interface ProfilePnpmInvocation {\n readonly command: string;\n readonly args: readonly string[];\n readonly env: Readonly<Record<string, string>>;\n}',
6092
6332
  },
6333
+ {
6334
+ name: 'ProfileReconciliation',
6335
+ declaration: 'export interface ProfileReconciliation {\n warnings: string[];\n pending: PendingModule[];\n restartReason?: \'module-comparison\' | \'package-moved\';\n}',
6336
+ },
6093
6337
  {
6094
6338
  name: 'ProjectionChangeListener',
6095
6339
  declaration: 'export type ProjectionChangeListener = (session: Session, key: Extract<keyof SessionProjectionMap, string>, value: unknown, seq: SessionSeq) => void;',
@@ -6116,7 +6360,7 @@ export const TYPE_API = [
6116
6360
  },
6117
6361
  {
6118
6362
  name: 'PromptContext',
6119
- declaration: 'export interface PromptContext {\n readonly name: string;\n readonly order: number;\n readonly text: string | ((context: AssembleContext) => string);\n}',
6363
+ declaration: 'export interface PromptContext {\n readonly name: string;\n readonly order: number;\n readonly text: string | ((context: AssembleContext) => string);\n readonly interpolate?: boolean;\n readonly required?: boolean;\n}',
6120
6364
  },
6121
6365
  {
6122
6366
  name: 'PromptContextOrderName',
@@ -6188,7 +6432,7 @@ export const TYPE_API = [
6188
6432
  },
6189
6433
  {
6190
6434
  name: 'PtcRunRequest',
6191
- declaration: 'export interface PtcRunRequest {\n program: string;\n bindings: PtcBindingNamespace[];\n cwd?: string;\n timeoutMs?: number | null;\n sandboxPolicy?: SandboxExecutionPolicy;\n signal?: AbortSignal;\n}',
6435
+ declaration: 'export interface PtcRunRequest {\n program: string;\n stateOwner?: object;\n bindings: PtcBindingNamespace[];\n cwd?: string;\n timeoutMs?: number | null;\n sandboxPolicy?: SandboxExecutionPolicy;\n signal?: AbortSignal;\n}',
6192
6436
  },
6193
6437
  {
6194
6438
  name: 'PtcRunResult',
@@ -6242,6 +6486,62 @@ export const TYPE_API = [
6242
6486
  name: 'Reload',
6243
6487
  declaration: 'export interface Reload {\n filename: string;\n modules: ReloadModules;\n runtime?: Plugin.Runtime | undefined;\n}',
6244
6488
  },
6489
+ {
6490
+ name: 'RemoteAccessAction',
6491
+ declaration: 'export type RemoteAccessAction = RemoteAccessEndpoint | `event:${string}`;',
6492
+ },
6493
+ {
6494
+ name: 'RemoteAccessBaseline',
6495
+ declaration: 'export type RemoteAccessBaseline = Extract<RemoteAccessFrame, {\n type: \'baseline\';\n}>;',
6496
+ },
6497
+ {
6498
+ name: 'RemoteAccessBinding',
6499
+ declaration: 'export type RemoteAccessBinding = {\n [K in RemoteAccessResourceKind]: {\n readonly role: RemoteAccessRole<K>;\n readonly resource: RemoteAccessResourceOf<K>;\n readonly condition?: RemoteAccessCondition<K>;\n };\n}[RemoteAccessResourceKind];',
6500
+ },
6501
+ {
6502
+ name: 'RemoteAccessCondition',
6503
+ declaration: 'export type RemoteAccessCondition<K extends RemoteAccessResourceKind> = (request: {\n readonly action: RemoteAccessAction;\n readonly resource: RemoteAccessResourceOf<K>;\n readonly args?: Readonly<Record<string, unknown>>;\n}) => RemoteAccessDecision;',
6504
+ },
6505
+ {
6506
+ name: 'RemoteAccessDecision',
6507
+ declaration: 'export type RemoteAccessDecision = {\n readonly kind: \'allow\';\n} | {\n readonly kind: \'deny\';\n readonly reason: string;\n};',
6508
+ },
6509
+ {
6510
+ name: 'RemoteAccessEndpoint',
6511
+ declaration: 'export type RemoteAccessEndpoint = `${string}/${string}`;',
6512
+ },
6513
+ {
6514
+ name: 'RemoteAccessFrame',
6515
+ declaration: 'export type RemoteAccessFrame = {\n readonly type: \'baseline\';\n readonly owner: true;\n} | {\n readonly type: \'baseline\';\n readonly owner: false;\n readonly grants: readonly RemoteAccessGrant[];\n} | {\n readonly type: \'upsert\';\n readonly grant: RemoteAccessGrant;\n} | {\n readonly type: \'remove\';\n readonly resource: RemoteAccessResource;\n};',
6516
+ },
6517
+ {
6518
+ name: 'RemoteAccessGrant',
6519
+ declaration: 'export interface RemoteAccessGrant {\n readonly resource: RemoteAccessResource;\n readonly actions: readonly string[];\n}',
6520
+ },
6521
+ {
6522
+ name: 'RemoteAccessPolicy',
6523
+ declaration: 'export interface RemoteAccessPolicy<P extends Principal> {\n bindings(principal: P): readonly RemoteAccessBinding[];\n explain?(request: RemoteAccessRequest<P>): string | undefined;\n}',
6524
+ },
6525
+ {
6526
+ name: 'RemoteAccessRequest',
6527
+ declaration: 'export interface RemoteAccessRequest<P extends Principal> {\n readonly principal: P;\n readonly action: RemoteAccessAction;\n readonly resources: readonly RemoteAccessResource[];\n readonly args?: Readonly<Record<string, unknown>>;\n}',
6528
+ },
6529
+ {
6530
+ name: 'RemoteAccessResource',
6531
+ declaration: 'export type RemoteAccessResource = {\n readonly kind: \'global\';\n} | {\n [Kind in TypertResourceKind]: {\n readonly kind: Kind;\n readonly id: TypertResourceId<TypertResourceMap[Kind]>;\n };\n}[TypertResourceKind];',
6532
+ },
6533
+ {
6534
+ name: 'RemoteAccessResourceKind',
6535
+ declaration: 'export type RemoteAccessResourceKind = \'global\' | TypertResourceKind;',
6536
+ },
6537
+ {
6538
+ name: 'RemoteAccessResourceOf',
6539
+ declaration: 'export type RemoteAccessResourceOf<K extends RemoteAccessResourceKind> = Extract<RemoteAccessResource, {\n readonly kind: K;\n}>;',
6540
+ },
6541
+ {
6542
+ name: 'RemoteAccessRole',
6543
+ declaration: 'export interface RemoteAccessRole<K extends RemoteAccessResourceKind> {\n readonly name: string;\n readonly resource: K;\n readonly actions: readonly RemoteAccessAction[];\n}',
6544
+ },
6245
6545
  {
6246
6546
  name: 'RemoteError',
6247
6547
  declaration: 'export class RemoteError<Code extends RemoteErrorCode = RemoteErrorCode> extends Error {\n readonly isDSHRemoteError: true;\n constructor(readonly code: Code, message: string, readonly details: RemoteErrorDetailsMap[Code], options?: ErrorOptions);\n}',
@@ -6258,6 +6558,14 @@ export const TYPE_API = [
6258
6558
  name: 'RemoteEventHostInfo',
6259
6559
  declaration: 'export interface RemoteEventHostInfo {\n readonly home: string;\n}',
6260
6560
  },
6561
+ {
6562
+ name: 'RemoteStream',
6563
+ declaration: 'export type RemoteStream<Out, In = never> = AsyncIterable<Out> & {\n readonly [STREAM_UPLINK]?: In;\n};',
6564
+ },
6565
+ {
6566
+ name: 'RemoteUplinkWindow',
6567
+ declaration: 'export interface RemoteUplinkWindow {\n readonly maxBytes: number;\n readonly frameOverheadBytes: number;\n}',
6568
+ },
6261
6569
  {
6262
6570
  name: 'RenderedDocumentBytes',
6263
6571
  declaration: 'export interface RenderedDocumentBytes extends WorkspaceFileBytes {\n readonly missingFonts: string[];\n readonly generation: OfficeToPdfGeneration;\n}',
@@ -6316,7 +6624,11 @@ export const TYPE_API = [
6316
6624
  },
6317
6625
  {
6318
6626
  name: 'ResolvedSubagentStartRequest',
6319
- declaration: 'export interface ResolvedSubagentStartRequest extends SubagentStartRequest {\n readonly descriptor: SubagentDescriptorData;\n}',
6627
+ declaration: 'export interface ResolvedSubagentStartRequest extends SubagentStartRequest {\n readonly cwd: string;\n}',
6628
+ },
6629
+ {
6630
+ name: 'RestartReason',
6631
+ declaration: 'export type RestartReason = \'no-hmr\' | \'package-moved\' | \'host-module\' | \'unmanaged-plugin\' | \'module-comparison\';',
6320
6632
  },
6321
6633
  {
6322
6634
  name: 'RestoredSessionOptions',
@@ -6480,7 +6792,7 @@ export const TYPE_API = [
6480
6792
  },
6481
6793
  {
6482
6794
  name: 'SendTeamMessageResult',
6483
- declaration: 'export interface SendTeamMessageResult {\n readonly messageId: TeamMessageId;\n readonly status: \'accepted\' | \'queued\';\n}',
6795
+ declaration: 'export interface SendTeamMessageResult {\n readonly messageId: MessageId;\n}',
6484
6796
  },
6485
6797
  {
6486
6798
  name: 'SerializedElement',
@@ -6676,7 +6988,7 @@ export const TYPE_API = [
6676
6988
  },
6677
6989
  {
6678
6990
  name: 'SessionForkRequest',
6679
- declaration: 'export interface SessionForkRequest {\n readonly sessionId: SessionId;\n readonly atSeq?: number;\n}',
6991
+ declaration: 'export interface SessionForkRequest {\n readonly sessionId: SessionId;\n readonly atSeq?: number;\n readonly allowMigration?: boolean;\n}',
6680
6992
  },
6681
6993
  {
6682
6994
  name: 'SessionForkSource',
@@ -6744,7 +7056,11 @@ export const TYPE_API = [
6744
7056
  },
6745
7057
  {
6746
7058
  name: 'SessionLogOptions',
6747
- declaration: 'export interface SessionLogOptions {\n exporter: OTLPExporterNodeConfigBase & {\n url: string;\n };\n processor?: Omit<BatchLogRecordProcessorOptions, \'exporter\'>;\n maxRequestBytes?: number;\n scope: {\n name: string;\n version?: string;\n };\n resourceAttributes: Attributes;\n onFailure: (message: string, error?: Error) => void;\n}',
7059
+ declaration: 'export interface SessionLogOptions {\n exporter: LogExporterOptions;\n processor?: SessionLogProcessorOptions;\n maxRequestBytes?: number;\n scope: {\n name: string;\n version?: string;\n };\n resourceAttributes: Attributes;\n onFailure: (message: string, error?: Error) => void;\n}',
7060
+ },
7061
+ {
7062
+ name: 'SessionLogProcessorOptions',
7063
+ declaration: 'export type SessionLogProcessorOptions = Omit<BatchLogRecordProcessorOptions, \'exporter\' | \'selfObsMeterProvider\'>;',
6748
7064
  },
6749
7065
  {
6750
7066
  name: 'SessionLogRecord',
@@ -6812,7 +7128,7 @@ export const TYPE_API = [
6812
7128
  },
6813
7129
  {
6814
7130
  name: 'SessionPersistenceSnapshot',
6815
- declaration: 'export interface SessionPersistenceSnapshot {\n readonly header: SessionHeader;\n readonly revision: SessionPersistenceRevision;\n readonly eventCount?: number;\n readonly sizeBytes?: number;\n}',
7131
+ declaration: 'export interface SessionPersistenceSnapshot {\n readonly header: SessionHeader;\n readonly formatStatus?: \'current\' | \'migration-required\';\n readonly revision: SessionPersistenceRevision;\n readonly eventCount?: number;\n readonly sizeBytes?: number;\n}',
6816
7132
  },
6817
7133
  {
6818
7134
  name: 'SessionPersistenceStatOptions',
@@ -6840,7 +7156,7 @@ export const TYPE_API = [
6840
7156
  },
6841
7157
  {
6842
7158
  name: 'SessionProjectionsValue',
6843
- declaration: 'export type SessionProjectionsValue = SessionProjectionBaseline | null;',
7159
+ declaration: 'export type SessionProjectionsValue = (SessionProjectionBaseline & {\n readonly kind: \'sequenced\';\n}) | {\n readonly kind: \'migration-required\';\n readonly values: SessionProjectionValues;\n} | null;',
6844
7160
  },
6845
7161
  {
6846
7162
  name: 'SessionProjectionUpdate',
@@ -6864,7 +7180,7 @@ export const TYPE_API = [
6864
7180
  },
6865
7181
  {
6866
7182
  name: 'SessionRecord',
6867
- declaration: 'export interface SessionRecord {\n header: SessionHeader;\n live: boolean;\n persisted: boolean;\n}',
7183
+ declaration: 'export interface SessionRecord {\n header: SessionHeader;\n live: boolean;\n persisted: boolean;\n formatStatus?: \'current\' | \'migration-required\';\n}',
6868
7184
  },
6869
7185
  {
6870
7186
  name: 'SessionReferenceCandidate',
@@ -6960,7 +7276,7 @@ export const TYPE_API = [
6960
7276
  },
6961
7277
  {
6962
7278
  name: 'SessionSummary',
6963
- declaration: 'export interface SessionSummary {\n readonly agentAvailable: boolean;\n readonly sessionId: SessionId;\n readonly updatedAt: number;\n readonly running: boolean;\n readonly blank: boolean;\n readonly parentSessionId?: SessionId;\n readonly origin?: \'subagent\';\n readonly cwd?: string;\n readonly projections?: SessionProjectionHints;\n}',
7279
+ declaration: 'export interface SessionSummary {\n readonly agentAvailable: boolean;\n readonly formatStatus?: \'current\' | \'migration-required\';\n readonly sessionId: SessionId;\n readonly updatedAt: number;\n readonly running: boolean;\n readonly blank: boolean;\n readonly parentSessionId?: SessionId;\n readonly origin?: \'subagent\';\n readonly cwd?: string;\n readonly projections?: SessionProjectionHints;\n}',
6964
7280
  },
6965
7281
  {
6966
7282
  name: 'SessionSurface',
@@ -7008,7 +7324,7 @@ export const TYPE_API = [
7008
7324
  },
7009
7325
  {
7010
7326
  name: 'SessionTitleProviderRequest',
7011
- declaration: 'export interface SessionTitleProviderRequest {\n readonly session: Session;\n readonly messages: readonly SessionTitleUserMessage[];\n readonly route?: SessionTitleModelIdentity;\n readonly signal: AbortSignal;\n}',
7327
+ declaration: 'export interface SessionTitleProviderRequest {\n readonly session: Session;\n readonly messages: readonly SessionTitleUserMessage[];\n readonly route?: SessionTitleModelIdentity;\n readonly currentTitle?: SessionTitleSnapshot;\n readonly signal: AbortSignal;\n}',
7012
7328
  },
7013
7329
  {
7014
7330
  name: 'SessionTitleProviderResult',
@@ -7314,26 +7630,30 @@ export const TYPE_API = [
7314
7630
  name: 'StreamChunk',
7315
7631
  declaration: 'export type StreamChunk = {\n type: \'block-start\';\n index: number;\n blockType: ContentBlockType;\n} | {\n type: \'text-delta\';\n index: number;\n text: string;\n} | {\n type: \'reasoning-delta\';\n index: number;\n text: string;\n} | {\n type: \'tool-call-delta\';\n index: number;\n id: ToolCallId;\n name?: string;\n argumentsDelta: string;\n} | {\n type: \'block-end\';\n index: number;\n block: ContentBlock;\n} | {\n type: \'usage\';\n usage: TokenUsage;\n} | {\n type: \'finish\';\n reason: FinishReason;\n replayState?: ReplayEnvelope;\n};',
7316
7632
  },
7633
+ {
7634
+ name: 'SubagentActivation',
7635
+ declaration: 'export interface SubagentActivation {\n readonly childId: SessionId;\n readonly messageId?: MessageId;\n readonly result: Promise<SubagentResult>;\n dispose(): Promise<void>;\n}',
7636
+ },
7637
+ {
7638
+ name: 'SubagentActivationSpec',
7639
+ declaration: 'export interface SubagentActivationSpec {\n readonly provider: string;\n readonly label: string;\n readonly childId?: SessionId;\n readonly request: Omit<SubagentStartRequest, \'label\' | \'signal\'>;\n readonly signal: AbortSignal;\n readonly delivery: \'parent\' | \'caller\';\n}',
7640
+ },
7317
7641
  {
7318
7642
  name: 'SubagentCapabilities',
7319
- declaration: 'export interface SubagentCapabilities {\n readonly agentOptions: boolean;\n readonly outputSchema: boolean;\n readonly depthLimit: boolean;\n readonly toolFilter: boolean;\n readonly persona: boolean;\n}',
7643
+ declaration: 'export interface SubagentCapabilities {\n readonly agentOptions: boolean;\n readonly agentPreset: boolean;\n readonly outputSchema: boolean;\n readonly depthLimit: boolean;\n}',
7320
7644
  },
7321
7645
  {
7322
7646
  name: 'SubagentCatalogEntry',
7323
- declaration: 'export type SubagentCatalogEntry = {\n readonly id: SessionId;\n readonly createdAt: number;\n} & ({\n readonly mode: \'one-shot\';\n readonly label?: string;\n} | {\n readonly mode: \'continuable\';\n readonly label: string;\n} | {\n readonly mode: \'unknown\';\n readonly label?: string;\n});',
7647
+ declaration: 'export type SubagentCatalogEntry = {\n readonly id: SessionId;\n readonly createdAt: number;\n} & ({\n readonly mode: \'one-shot\';\n readonly label?: string;\n} | {\n readonly mode: \'external\';\n readonly label?: string;\n} | {\n readonly mode: \'continuable\';\n readonly label: string;\n} | {\n readonly mode: \'unknown\';\n readonly label?: string;\n});',
7324
7648
  },
7325
7649
  {
7326
7650
  name: 'SubagentCatalogRow',
7327
- declaration: 'export type SubagentCatalogRow = {\n readonly id: SessionId;\n readonly activity: \'running\' | \'inactive\';\n} & ({\n readonly mode: \'one-shot\';\n readonly label?: string;\n} | {\n readonly mode: \'continuable\';\n readonly label: string;\n});',
7651
+ declaration: 'export type SubagentCatalogRow = {\n readonly id: SessionId;\n readonly activity: \'running\' | \'inactive\';\n} & ({\n readonly mode: \'one-shot\';\n readonly label?: string;\n} | {\n readonly mode: \'external\';\n readonly label?: string;\n} | {\n readonly mode: \'continuable\';\n readonly label: string;\n});',
7328
7652
  },
7329
7653
  {
7330
7654
  name: 'SubagentDescendantListEntry',
7331
7655
  declaration: 'export type SubagentDescendantListEntry = SubagentListEntry & {\n readonly parentId: SessionId;\n readonly depth: number;\n};',
7332
7656
  },
7333
- {
7334
- name: 'SubagentDescriptorData',
7335
- declaration: 'export type SubagentDescriptorData = OneShotSubagentDescriptorData | ContinuableSubagentDescriptorData;',
7336
- },
7337
7657
  {
7338
7658
  name: 'SubagentInterruptAuthority',
7339
7659
  declaration: 'export type SubagentInterruptAuthority = {\n readonly kind: \'user\';\n readonly parentSessionId: SessionId;\n} | {\n readonly kind: \'ancestor\';\n readonly agent: Agent;\n};',
@@ -7360,7 +7680,7 @@ export const TYPE_API = [
7360
7680
  },
7361
7681
  {
7362
7682
  name: 'SubagentProvider',
7363
- declaration: 'export interface SubagentProvider {\n readonly name: string;\n readonly capabilities: SubagentCapabilities;\n readonly inheritsParentContext: boolean;\n readonly agentRouteDefaults?: Readonly<{\n provider: string;\n model: string;\n }>;\n start(request: ResolvedSubagentStartRequest): Promise<SubagentRun>;\n prepareContinuable?(request: ContinuableCreateRequest): Promise<ContinuableCreateSpec>;\n}',
7683
+ declaration: 'export interface SubagentProvider {\n readonly name: string;\n readonly capabilities: SubagentCapabilities;\n readonly inheritsParentContext: boolean;\n readonly agentRouteDefaults?: Readonly<{\n provider: string;\n model: string;\n }>;\n start?(request: ResolvedSubagentStartRequest): Promise<SubagentRun>;\n prepareContinuable?(request: ContinuableCreateRequest): Promise<ContinuableCreateSpec>;\n}',
7364
7684
  },
7365
7685
  {
7366
7686
  name: 'SubagentResult',
@@ -7368,7 +7688,7 @@ export const TYPE_API = [
7368
7688
  },
7369
7689
  {
7370
7690
  name: 'SubagentRun',
7371
- declaration: 'export interface SubagentRun {\n readonly id: SessionId;\n readonly localAgent: Agent | undefined;\n readonly result: Promise<SubagentResult>;\n dispose(): Promise<void>;\n}',
7691
+ declaration: 'export interface SubagentRun {\n readonly id: SessionId;\n readonly result: Promise<SubagentResult>;\n dispose(): Promise<void>;\n}',
7372
7692
  },
7373
7693
  {
7374
7694
  name: 'SubagentRunEndInfo',
@@ -7384,7 +7704,7 @@ export const TYPE_API = [
7384
7704
  },
7385
7705
  {
7386
7706
  name: 'SubagentRuntime',
7387
- declaration: 'export class SubagentRuntime extends TypertRemoteService {\n static Config;\n constructor(ctx: Context, private config: Config);\n resolveMaxDepth(configured?: number | \'provider-managed\'): number | undefined;\n async startContinuable(spec: ContinuableStartSpec): Promise<ContinuableStart>;\n async sendMessage(sender: Agent, targetId: SessionId, content: ContentBlock[], options: SubagentSendMessageOptions): Promise<MessageId>;\n interrupt(targetSessionId: SessionId, authority: SubagentInterruptAuthority): void;\n async drainContinuableDescendants(parents: readonly Agent[]): Promise<void>;\n async drainContinuableChildren(parent: Agent, childIds: readonly SessionId[]): Promise<void>;\n listChildren(parentSessionId: SessionId, signal?: AbortSignal): Promise<SubagentCatalogEntry[]>;\n listDescendants(rootSessionId: SessionId, signal?: AbortSignal): Promise<SubagentDescendantListEntry[]>;\n @Remote(\'prompt\')\n async prompt(request: SubagentPromptRequest, signal: AbortSignal): Promise<SubagentPromptReceipt>;\n @Remote(\'interruptByParent\')\n interruptByParent(childSessionId: SessionId, parentSessionId: SessionId, mode: \'continuable\'): SubagentInterruptReceipt;\n registerProvider(provider: SubagentProvider): () => void;\n getProvider(name: string): SubagentProvider | undefined;\n list(): string[];\n async start(name: string, request: SubagentStartRequest): Promise<SubagentRun>;\n}',
7707
+ declaration: 'export class SubagentRuntime extends TypertRemoteService {\n static Config;\n static inject;\n constructor(ctx: Context, private config: Config);\n resolveMaxDepth(configured?: number | \'provider-managed\'): number | undefined;\n startActivation(spec: SubagentActivationSpec & {\n readonly childId: SessionId;\n }): Promise<SubagentActivation & {\n readonly messageId: MessageId;\n }>;\n startActivation(spec: SubagentActivationSpec): Promise<SubagentActivation>;\n async startActivation(spec: SubagentActivationSpec): Promise<SubagentActivation>;\n async waitForChildren(parent: Agent): Promise<boolean>;\n async sendMessage(sender: Agent, targetId: SessionId, content: ContentBlock[], options: SubagentSendMessageOptions): Promise<MessageId>;\n interrupt(targetSessionId: SessionId, authority: SubagentInterruptAuthority): void;\n async drainDescendants(parents: readonly Agent[]): Promise<void>;\n async drainChildren(parent: Agent, childIds: readonly SessionId[]): Promise<void>;\n listChildren(parentSessionId: SessionId, signal?: AbortSignal): Promise<SubagentCatalogEntry[]>;\n listDescendants(rootSessionId: SessionId, signal?: AbortSignal): Promise<SubagentDescendantListEntry[]>;\n @Remote(\'prompt\')\n async prompt(request: SubagentPromptRequest, signal: AbortSignal): Promise<SubagentPromptReceipt>;\n @Remote(\'interruptByParent\')\n interruptByParent(childSessionId: SessionId, parentSessionId: SessionId, mode: \'continuable\'): SubagentIn /* …truncated — full shape in source */',
7388
7708
  },
7389
7709
  {
7390
7710
  name: 'SubagentSendMessageOptions',
@@ -7396,7 +7716,7 @@ export const TYPE_API = [
7396
7716
  },
7397
7717
  {
7398
7718
  name: 'SubagentStartRequest',
7399
- declaration: 'export interface SubagentStartRequest {\n readonly label?: string;\n readonly prompt: ContentBlock[];\n readonly parent: Agent;\n readonly signal: AbortSignal;\n readonly agentOptions?: AgentOptions;\n readonly outputSchema?: ObjectJsonSchema;\n readonly maxDepth?: number;\n readonly toolFilter?: ToolRestriction;\n readonly persona?: string;\n}',
7719
+ declaration: 'export interface SubagentStartRequest {\n readonly cwd?: string;\n readonly agentPreset?: string;\n readonly label?: string;\n readonly prompt: ContentBlock[];\n readonly parent: Agent;\n readonly signal: AbortSignal;\n readonly agentOptions?: AgentOptions;\n readonly outputSchema?: ObjectJsonSchema;\n readonly maxDepth?: number;\n}',
7400
7720
  },
7401
7721
  {
7402
7722
  name: 'SubagentStopReason',
@@ -7496,7 +7816,7 @@ export const TYPE_API = [
7496
7816
  },
7497
7817
  {
7498
7818
  name: 'SystemPrompt',
7499
- declaration: 'export class SystemPrompt extends Service {\n static Config: z<Config>;\n constructor(ctx: Context, config: Config);\n section(section: PromptSection): () => void;\n getSectionOrder(name: PromptSectionOrderName): number;\n getContextOrder(name: PromptContextOrderName): number;\n context(context: PromptContext): () => void;\n suppressRuntimeContext(): () => void;\n tools(provider: (context: AssembleContext) => ToolProviderResult): () => void;\n variable(name: string, provider: (context: AssembleContext) => string | undefined): () => void;\n async assemble(context: AssembleContext = {}): Promise<PromptAssembly>;\n}',
7819
+ declaration: 'export class SystemPrompt extends Service {\n static Config: z<Config>;\n constructor(ctx: Context, config: Config);\n section(section: PromptSection): () => void;\n getSectionOrder(name: PromptSectionOrderName): number;\n getContextOrder(name: PromptContextOrderName): number;\n context(context: PromptContext): () => void;\n suppressRuntimeContext(): () => void;\n tools(provider: (context: AssembleContext) => ToolProviderResult): () => void;\n variable(name: string, provider: (context: AssembleContext) => string | undefined): () => void;\n refreshContext(assembly: PromptAssembly, context: AssembleContext = {}): PromptAssembly;\n async assemble(context: AssembleContext = {}): Promise<PromptAssembly>;\n}',
7500
7820
  },
7501
7821
  {
7502
7822
  name: 'SystemPromptMessageSource',
@@ -7526,10 +7846,6 @@ export const TYPE_API = [
7526
7846
  name: 'TeamMemberView',
7527
7847
  declaration: 'export interface TeamMemberView {\n readonly id: SessionId;\n readonly name: string;\n readonly role: \'lead\' | \'teammate\';\n readonly status: \'running\' | \'inactive\' | \'provisioning\' | \'failed\';\n readonly description?: string;\n readonly provider?: string;\n readonly context?: \'fresh\' | \'fork\';\n readonly model?: string;\n readonly diagnostics: string[];\n}',
7528
7848
  },
7529
- {
7530
- name: 'TeamMessageId',
7531
- declaration: 'export type TeamMessageId = Branded<\'TeamMessageId\'>;',
7532
- },
7533
7849
  {
7534
7850
  name: 'TeamTaskAction',
7535
7851
  declaration: 'export type TeamTaskAction = \'claim\' | \'release\' | \'edit\' | \'set_dependencies\' | \'complete\' | \'reopen\' | \'reassign\' | \'delete\';',
@@ -7550,10 +7866,6 @@ export const TYPE_API = [
7550
7866
  name: 'TeamWaitResult',
7551
7867
  declaration: 'export interface TeamWaitResult {\n readonly timedOut: boolean;\n}',
7552
7868
  },
7553
- {
7554
- name: 'TerminalAttachmentId',
7555
- declaration: 'export type TerminalAttachmentId = Branded<\'TerminalAttachmentId\'>;',
7556
- },
7557
7869
  {
7558
7870
  name: 'TerminalBackend',
7559
7871
  declaration: 'export interface TerminalBackend {\n readonly type: string;\n spawn(spec: TerminalBackendSpawnSpec): Promise<TerminalBackendSession>;\n}',
@@ -7576,11 +7888,15 @@ export const TYPE_API = [
7576
7888
  },
7577
7889
  {
7578
7890
  name: 'TerminalEnvironment',
7579
- declaration: 'export interface TerminalEnvironment {\n readonly cwd: string;\n readonly maxInputBytes: number;\n readonly maxCols: number;\n readonly maxRows: number;\n readonly scrollback: number;\n}',
7891
+ declaration: 'export interface TerminalEnvironment {\n readonly cwd: string;\n readonly maxInputBytes: number;\n readonly maxBufferedBytes: number;\n readonly maxCols: number;\n readonly maxRows: number;\n readonly scrollback: number;\n}',
7580
7892
  },
7581
7893
  {
7582
7894
  name: 'TerminalFrame',
7583
- declaration: 'export type TerminalFrame = {\n readonly type: \'snapshot\';\n readonly sequence: number;\n readonly screen: string;\n readonly info: WebTerminalInfo;\n} | {\n readonly type: \'output\';\n readonly sequence: number;\n readonly data: string;\n} | {\n readonly type: \'state\';\n readonly info: WebTerminalInfo;\n};',
7895
+ declaration: 'export type TerminalFrame = {\n readonly type: \'snapshot\';\n readonly sequence: number;\n readonly screen: string;\n readonly info: WebTerminalInfo;\n readonly writable: boolean;\n readonly inputWindow?: RemoteUplinkWindow;\n} | {\n readonly type: \'output\';\n readonly sequence: number;\n readonly data: string;\n} | {\n readonly type: \'state\';\n readonly info: WebTerminalInfo;\n readonly writable: boolean;\n} | {\n readonly type: \'ack\';\n readonly sequence: number;\n readonly refusal?: \'read-only\' | \'not-running\';\n};',
7896
+ },
7897
+ {
7898
+ name: 'TerminalInput',
7899
+ declaration: 'export type TerminalInput = {\n readonly type: \'write\';\n readonly sequence: number;\n readonly data: string;\n} | {\n readonly type: \'resize\';\n readonly sequence: number;\n readonly cols: number;\n readonly rows: number;\n};',
7584
7900
  },
7585
7901
  {
7586
7902
  name: 'TerminalReadRequest',
@@ -7780,7 +8096,7 @@ export const TYPE_API = [
7780
8096
  },
7781
8097
  {
7782
8098
  name: 'ToolPresentationMode',
7783
- declaration: 'export type ToolPresentationMode = \'native\' | \'ptc\' | \'both\';',
8099
+ declaration: 'export type ToolPresentationMode = \'native\' | \'ptc\';',
7784
8100
  },
7785
8101
  {
7786
8102
  name: 'ToolProviderResult',
@@ -7842,6 +8158,18 @@ export const TYPE_API = [
7842
8158
  name: 'TranscriptionRequest',
7843
8159
  declaration: 'export interface TranscriptionRequest {\n readonly audioBase64: string;\n readonly providerId?: SpeechProviderId;\n readonly language?: string;\n}',
7844
8160
  },
8161
+ {
8162
+ name: 'TranslationProvider',
8163
+ declaration: 'export type TranslationProvider = AnonymousTranslationProvider | PaidTranslationProvider;',
8164
+ },
8165
+ {
8166
+ name: 'TranslationRequest',
8167
+ declaration: 'export interface TranslationRequest {\n readonly text: string;\n readonly targetLanguage: string;\n readonly sourceLanguage?: string;\n readonly provider?: TranslationProvider;\n readonly sessionId?: SessionId;\n}',
8168
+ },
8169
+ {
8170
+ name: 'TranslationSpec',
8171
+ declaration: 'export type TranslationSpec = AnonymousTranslationSpec | PaidTranslationSpec;',
8172
+ },
7845
8173
  {
7846
8174
  name: 'TurnCompleteInput',
7847
8175
  declaration: 'export interface TurnCompleteInput {\n turnId: string;\n answer: string;\n durationMs: number;\n isAborted: boolean;\n reason: \'answer\' | \'aborted\' | \'error\';\n agentId?: string;\n usage?: TurnUsage;\n}',
@@ -7876,7 +8204,7 @@ export const TYPE_API = [
7876
8204
  },
7877
8205
  {
7878
8206
  name: 'TypertCodec',
7879
- declaration: 'export type TypertCodec = {\n readonly mode: \'strict\';\n readonly typeSymbol: string;\n readonly create: () => TypertSchema;\n readonly decode?: (value: unknown) => unknown;\n readonly encode?: (value: unknown, writeBytes: (bytes: Uint8Array, path: readonly (string | number)[]) => null) => unknown;\n} | {\n readonly mode: \'src-json\';\n};',
8207
+ declaration: 'export type TypertCodec<Value = unknown> = TypertRemoteValue<Value> & {\n readonly mode: \'strict\';\n readonly typeSymbol: string;\n readonly decode?: ((value: unknown) => unknown) | undefined;\n readonly encode?: ((value: unknown, writeBytes: (bytes: Uint8Array, path: readonly (string | number)[]) => null) => unknown) | undefined;\n} | {\n readonly mode: \'src-json\';\n};',
7880
8208
  },
7881
8209
  {
7882
8210
  name: 'TypertContribution',
@@ -7904,7 +8232,7 @@ export const TYPE_API = [
7904
8232
  },
7905
8233
  {
7906
8234
  name: 'TypertGatewayWireStream',
7907
- declaration: 'export interface TypertGatewayWireStream {\n readonly open: (endpoint: string, payload: unknown, uplink: AsyncIterable<unknown>, peer: PeerScope | undefined, signal: AbortSignal) => Promise<AsyncIterable<unknown>>;\n readonly failure: (error: unknown) => {\n readonly code: string;\n readonly message: string;\n readonly details: object;\n };\n}',
8235
+ declaration: 'export interface TypertGatewayWireStream {\n readonly open: (endpoint: string, payload: unknown, uplink: AsyncIterable<unknown>, peer: PeerScope, signal: AbortSignal) => Promise<AsyncIterable<unknown>>;\n readonly failure: (error: unknown) => {\n readonly code: string;\n readonly message: string;\n readonly details: object;\n };\n}',
7908
8236
  },
7909
8237
  {
7910
8238
  name: 'TypertMemberModel',
@@ -7936,7 +8264,7 @@ export const TYPE_API = [
7936
8264
  },
7937
8265
  {
7938
8266
  name: 'TypertRemoteEventFrame',
7939
- declaration: 'export interface TypertRemoteEventFrame {\n readonly event: string;\n readonly args: readonly unknown[];\n}',
8267
+ declaration: 'export interface TypertRemoteEventFrame {\n readonly event: string;\n readonly args: readonly unknown[];\n readonly resources?: Readonly<Record<string, TypertResourceReader>>;\n}',
7940
8268
  },
7941
8269
  {
7942
8270
  name: 'TypertRemoteEventInvocation',
@@ -7954,6 +8282,30 @@ export const TYPE_API = [
7954
8282
  name: 'TypertRemoteService',
7955
8283
  declaration: 'export abstract class TypertRemoteService<out T = never> extends Service<T> {\n readonly typertRemote: TypertGatewayBinding<this>;\n}',
7956
8284
  },
8285
+ {
8286
+ name: 'TypertRemoteValue',
8287
+ declaration: 'export interface TypertRemoteValue<Value = unknown> {\n readonly create: () => TypertSchema<Value>;\n readonly description?: string | undefined;\n readonly jsonSchema?: Readonly<Record<string, unknown>> | undefined;\n readonly jsonSchemaError?: string | undefined;\n}',
8288
+ },
8289
+ {
8290
+ name: 'TypertResource',
8291
+ declaration: 'export interface TypertResource<Id> {\n readonly [RESOURCE_ID]: Id;\n}',
8292
+ },
8293
+ {
8294
+ name: 'TypertResourceId',
8295
+ declaration: 'export type TypertResourceId<Resource> = Resource extends TypertResource<infer Id> ? Id : never;',
8296
+ },
8297
+ {
8298
+ name: 'TypertResourceKind',
8299
+ declaration: 'export type TypertResourceKind = Extract<keyof TypertResourceMap, string>;',
8300
+ },
8301
+ {
8302
+ name: 'TypertResourceMap',
8303
+ declaration: 'export interface TypertResourceMap {\n}',
8304
+ },
8305
+ {
8306
+ name: 'TypertResourceReader',
8307
+ declaration: 'export type TypertResourceReader = {\n read(...args: readonly unknown[]): unknown;\n}[\'read\'];',
8308
+ },
7957
8309
  {
7958
8310
  name: 'TypertSchema',
7959
8311
  declaration: 'export interface TypertSchema<Output = unknown> {\n parse(value: unknown): Output;\n}',
@@ -8124,7 +8476,7 @@ export const TYPE_API = [
8124
8476
  },
8125
8477
  {
8126
8478
  name: 'WebTerminalInfo',
8127
- declaration: 'export interface WebTerminalInfo {\n readonly id: WebTerminalId;\n readonly title: string;\n readonly shell: TerminalShell;\n readonly cwd: string;\n readonly cols: number;\n readonly rows: number;\n readonly state: \'running\' | \'exited\' | \'failed\';\n readonly exitCode: number | null;\n readonly error?: string;\n readonly controllerId?: TerminalAttachmentId;\n}',
8479
+ declaration: 'export interface WebTerminalInfo {\n readonly id: WebTerminalId;\n readonly title: string;\n readonly shell: TerminalShell;\n readonly cwd: string;\n readonly cols: number;\n readonly rows: number;\n readonly state: \'running\' | \'exited\' | \'failed\';\n readonly exitCode: number | null;\n readonly error?: string;\n}',
8128
8480
  },
8129
8481
  {
8130
8482
  name: 'WebUpgradeRoute',
@@ -8284,7 +8636,7 @@ export const TYPE_API = [
8284
8636
  },
8285
8637
  {
8286
8638
  name: 'WorkspaceFollowIncrement',
8287
- declaration: 'export type WorkspaceFollowIncrement = {\n readonly type: \'upsert\';\n readonly workspace: WorkspaceView;\n} | {\n readonly type: \'remove\';\n readonly workspaceId: WorkspaceId;\n} | {\n readonly type: \'order\';\n readonly workspaceIds: readonly WorkspaceId[];\n} | {\n readonly type: \'archived\';\n readonly archivedSessionIds: readonly SessionId[];\n} | {\n readonly type: \'pinned\';\n readonly pinnedSessionIds: readonly SessionId[];\n};',
8639
+ declaration: 'export type WorkspaceFollowIncrement = {\n readonly type: \'replace\';\n readonly value: WorkspaceBaseline;\n} | {\n readonly type: \'upsert\';\n readonly workspace: WorkspaceView;\n} | {\n readonly type: \'remove\';\n readonly workspaceId: WorkspaceId;\n} | {\n readonly type: \'order\';\n readonly workspaceIds: readonly WorkspaceId[];\n} | {\n readonly type: \'archived\';\n readonly archivedSessionIds: readonly SessionId[];\n} | {\n readonly type: \'pinned\';\n readonly pinnedSessionIds: readonly SessionId[];\n};',
8288
8640
  },
8289
8641
  {
8290
8642
  name: 'WorkspaceInsertBeforeRequest',