@deepseek-ai/dsh-tool-cordis 0.2.1-alpha.2 → 0.2.1-alpha.4

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
  },
@@ -686,8 +686,8 @@ 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
691
  parameters: [],
692
692
  },
693
693
  {
@@ -709,9 +709,21 @@ export const SERVICE_API = [
709
709
  },
710
710
  {
711
711
  signature: 'admit(request: ConnectionTrustRequest): PeerAdmission',
712
- 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.',
713
713
  parameters: [{ name: 'request', description: 'request headers from the HTTP or upgrade request.' }],
714
- 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.',
715
727
  },
716
728
  {
717
729
  signature: 'authorizeIndex(request: ConnectionIndexRequest, response: ConnectionIndexResponse): boolean',
@@ -749,7 +761,7 @@ export const SERVICE_API = [
749
761
  {
750
762
  key: 'credentials',
751
763
  summary: 'Abstract credential service over two key spaces that answer two questions.',
752
- 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).',
753
765
  methods: [
754
766
  {
755
767
  signature: 'abstract resolve(ref: CredentialRef): Promise<ResolvedCredential | undefined>',
@@ -765,12 +777,12 @@ export const SERVICE_API = [
765
777
  },
766
778
  {
767
779
  signature: 'abstract set(ref: CredentialRef, value: string): Promise<void>',
768
- 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).',
769
781
  parameters: [{ name: 'ref', description: 'the reference to store.' }, { name: 'value', description: 'the non-empty secret value.' }],
770
782
  },
771
783
  {
772
784
  signature: 'abstract unset(ref: CredentialRef): Promise<void>',
773
- 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.',
774
786
  parameters: [{ name: 'ref', description: 'the reference to remove.' }],
775
787
  },
776
788
  {
@@ -843,7 +855,7 @@ export const SERVICE_API = [
843
855
  },
844
856
  {
845
857
  signature: 'abstract getProfile(client: AccountClientMetadata): Promise<AccountDetails[\'profile\'] | null>',
846
- 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.',
847
859
  parameters: [{ name: 'client', description: 'identity of the requesting UI for this call.' }],
848
860
  returns: 'profile outcome, or null if signed out or the grant changed during the query.',
849
861
  },
@@ -884,9 +896,9 @@ export const SERVICE_API = [
884
896
  returns: 'the signed-out state after local removal; remote failures never restore the grant.',
885
897
  },
886
898
  {
887
- signature: 'abstract watch(signal: AbortSignal): AsyncIterable<AccountView>',
899
+ signature: 'abstract watch(signal: AbortSignal, includeIdentityChanges?: boolean): AsyncIterable<AccountView>',
888
900
  description: 'Subscribe to snapshots including a complete initial state.',
889
- 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.' }],
890
902
  returns: 'complete snapshots as account state changes.',
891
903
  },
892
904
  {
@@ -1227,6 +1239,13 @@ export const SERVICE_API = [
1227
1239
  parameters: [{ name: 'url', description: 'Module URL.' }],
1228
1240
  returns: 'Linked module URLs, or an empty list for an uncached module.',
1229
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
+ },
1230
1249
  ],
1231
1250
  },
1232
1251
  {
@@ -1285,7 +1304,7 @@ export const SERVICE_API = [
1285
1304
  signature: 'abstract start(spec: JobSpec): JobId',
1286
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.',
1287
1306
  parameters: [{ name: 'spec', description: 'job identity, owner, output sources, and synchronous starter.' }],
1288
- returns: 'the registry-issued `<kind>-N` id.',
1307
+ returns: 'the registry-issued `<kind>-<short-uuid>` id.',
1289
1308
  },
1290
1309
  {
1291
1310
  signature: 'abstract list(caller?: SessionId): JobView[]',
@@ -1396,6 +1415,12 @@ export const SERVICE_API = [
1396
1415
  parameters: [{ name: 'provider', description: 'provider route named by a request header.' }, { name: 'model', description: 'exact model id named by the same header.' }],
1397
1416
  returns: 'the owning adapter\'s image pricing for the route, when declared.',
1398
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
+ },
1399
1424
  {
1400
1425
  signature: 'fileRequestText(ref: FileAttachmentRef): string',
1401
1426
  description: 'Resolve the exact text one durable file occurrence contributes to every provider request in the current execution environment.',
@@ -1683,6 +1708,39 @@ export const SERVICE_API = [
1683
1708
  },
1684
1709
  ],
1685
1710
  },
1711
+ {
1712
+ key: 'pluginMarket',
1713
+ summary: 'Fetches, validates, and caches configured market indexes; annotates entries with the profile\'s installation facts.',
1714
+ description: 'Fetches, validates, and caches configured market indexes; annotates entries with the profile\'s installation facts.',
1715
+ methods: [
1716
+ {
1717
+ signature: '@Remote listIndexes(): MarketIndexSummary[]',
1718
+ description: 'List the configured index sources without fetching them.',
1719
+ parameters: [],
1720
+ returns: 'every source in order, with the title of its last successful read and, when the last read failed, its error.',
1721
+ },
1722
+ {
1723
+ signature: '@Remote async setIndexes(urls: string[]): Promise<void>',
1724
+ description: 'Replace the configured index sources through Settings, without remounting this service. `plugin-market/changed` announces the committed list. A URL already configured is kept as written, so a client can add or remove sources beside one that `listIndexes` reports as unusable.',
1725
+ parameters: [{ name: 'urls', description: 'index URLs in display order.' }],
1726
+ throws: ['{RemoteError} `plugin-market/invalid-index-url` for an invalid new URL or a repeated URL; `plugin-market/settings-unavailable` without Settings or a profile entry.'],
1727
+ },
1728
+ {
1729
+ signature: '@Remote async search(url: string, query: MarketQuery): Promise<MarketSearchResult>',
1730
+ description: 'Return one page of the plugins of a configured index that match a query. Concurrent reads of a URL share one fetch; a successful document is reused for `cacheTtlMs` unless `refresh` is set. Matching and ordering read only the document; installation status and compatibility are computed for the returned page on every call.',
1731
+ parameters: [{ name: 'url', description: 'a configured index URL.' }, { name: 'query', description: 'text, filters, order, page, and whether to bypass the cached document.' }],
1732
+ returns: 'the index header, the page\'s plugins with each plugin\'s default version and installation status and each version\'s compatibility and install arguments, the number of matches, and the next page\'s offset.',
1733
+ throws: ['{RemoteError} `plugin-market/invalid-query`, `plugin-market/unknown-index`, `plugin-market/invalid-index-url`, `plugin-market/fetch-failed`, or `plugin-market/invalid-index`.'],
1734
+ },
1735
+ {
1736
+ signature: 'async entry(url: string, name: string): Promise<MarketListingEntry | undefined>',
1737
+ description: 'Read one plugin of a configured index, using the cached document as `search` does.',
1738
+ parameters: [{ name: 'url', description: 'a configured index URL.' }, { name: 'name', description: 'the plugin\'s package name.' }],
1739
+ returns: 'the plugin with its default version, installation status, and annotated versions; undefined when the index does not list it.',
1740
+ throws: ['{RemoteError} `plugin-market/unknown-index`, `plugin-market/invalid-index-url`, `plugin-market/fetch-failed`, or `plugin-market/invalid-index`.'],
1741
+ },
1742
+ ],
1743
+ },
1686
1744
  {
1687
1745
  key: 'pluginRegistryProbe',
1688
1746
  summary: 'Compares public registry responses on the Host; the Client owns the initial selection.',
@@ -1716,7 +1774,7 @@ export const SERVICE_API = [
1716
1774
  },
1717
1775
  {
1718
1776
  signature: '@Remote async report(event: ProductEvent): Promise<void>',
1719
- description: 'Submit selected Desktop fields; missing identity is omitted and never generated.',
1777
+ description: 'Submit selected Desktop fields with cached static environment and fresh identity. The first intake waits for bounded environment queries; concurrent intakes share them. Missing identity is omitted; failed environment fields carry fixed reasons.',
1720
1778
  parameters: [{ name: 'event', description: 'typed product event without message contents or credentials.' }],
1721
1779
  returns: 'after local submission; no delivery or warehouse acknowledgement.',
1722
1780
  },
@@ -1764,7 +1822,7 @@ export const SERVICE_API = [
1764
1822
  {
1765
1823
  key: 'ptcRuntime',
1766
1824
  summary: 'Registers one `ctx.ptcRuntime` implementation.',
1767
- 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.',
1825
+ 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.',
1768
1826
  methods: [
1769
1827
  {
1770
1828
  signature: 'abstract readonly language: string',
@@ -1776,6 +1834,13 @@ export const SERVICE_API = [
1776
1834
  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\'`.',
1777
1835
  parameters: [],
1778
1836
  },
1837
+ {
1838
+ signature: 'release(owner: object): Promise<void>',
1839
+ description: 'Release an owner\'s retained environment and await its execution resources. Stateless providers have no retained resources to release.',
1840
+ parameters: [{ name: 'owner', description: 'The exact object supplied as the request\'s state owner.' }],
1841
+ returns: 'Completion after all owned execution resources have been released.',
1842
+ throws: ['When managed resource cleanup fails.'],
1843
+ },
1779
1844
  {
1780
1845
  signature: 'abstract resolve(request: PtcRunRequest): PtcRunSpec',
1781
1846
  description: 'Resolve supported options and provider defaults before execution.',
@@ -1791,6 +1856,49 @@ export const SERVICE_API = [
1791
1856
  },
1792
1857
  ],
1793
1858
  },
1859
+ {
1860
+ key: 'remoteAccess',
1861
+ summary: 'Registry of access policies, the Gateway\'s access decisions, list filtering, and the per-Peer access snapshot.',
1862
+ 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.',
1863
+ methods: [
1864
+ {
1865
+ signature: 'registerPolicy<K extends Exclude<keyof PrincipalMap, \'owner\'>>(kind: K, policy: RemoteAccessPolicy<PrincipalMap[K]>): () => void',
1866
+ description: 'Register the policy of one non-owner principal kind in the caller\'s fiber; open snapshots are recomputed on registration and removal.',
1867
+ 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`.' }],
1868
+ returns: 'disposer removing this policy.',
1869
+ throws: ['Error when `kind` already has a policy.'],
1870
+ },
1871
+ {
1872
+ signature: 'invalidate(principal?: Principal): void',
1873
+ 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.',
1874
+ parameters: [{ name: 'principal', description: 'affected principal; omitted for every principal.' }],
1875
+ },
1876
+ {
1877
+ signature: 'decide(request: RemoteAccessRequest<Principal>): RemoteAccessDecision',
1878
+ 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.',
1879
+ parameters: [{ name: 'request', description: 'the caller or recipient, the action, the resources it touches, and a call\'s arguments.' }],
1880
+ 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.',
1881
+ },
1882
+ {
1883
+ signature: 'allows(resource: RemoteAccessResource): boolean',
1884
+ 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.',
1885
+ parameters: [{ name: 'resource', description: 'resource of one result item.' }],
1886
+ 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.',
1887
+ },
1888
+ {
1889
+ signature: 'snapshotFor(principal: Principal): RemoteAccessBaseline',
1890
+ 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.',
1891
+ parameters: [{ name: 'principal', description: 'the page\'s caller identity.' }],
1892
+ returns: 'the owner baseline for the owner; otherwise the principal\'s current grants.',
1893
+ },
1894
+ {
1895
+ signature: '@Remote({ mode: \'stream\' }) async *follow(signal: AbortSignal): AsyncIterable<RemoteAccessFrame>',
1896
+ 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.',
1897
+ parameters: [{ name: 'signal', description: 'generation cancellation.' }],
1898
+ returns: 'the access frames of one generation.',
1899
+ },
1900
+ ],
1901
+ },
1794
1902
  {
1795
1903
  key: 'sandbox',
1796
1904
  summary: 'Abstract process-sandbox service.',
@@ -1901,16 +2009,16 @@ export const SERVICE_API = [
1901
2009
  returns: 'visible Session summaries ordered by activity.',
1902
2010
  },
1903
2011
  {
1904
- signature: '@Remote(\'search\') search(request: SessionSearchRequest, signal: AbortSignal): Promise<SessionSearchValue>',
1905
- description: 'Search visible Session content without resuming an Agent.',
2012
+ signature: '@Remote(\'search\') async search(request: SessionSearchRequest, signal: AbortSignal): Promise<SessionSearchValue>',
2013
+ 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.',
1906
2014
  parameters: [{ name: 'request', description: 'literal message-content query.' }, { name: 'signal', description: 'cancellation for list and search reads.' }],
1907
2015
  returns: 'authorized bounded Session search results.',
1908
2016
  },
1909
2017
  {
1910
2018
  signature: '@Remote(\'create\') create(request: SessionCreateRequest): Promise<SessionCreateValue>',
1911
- description: 'Create or idempotently adopt one ordinary Session.',
1912
- parameters: [{ name: 'request', description: 'requested identity, location, and Agent preset.' }],
1913
- returns: 'the Session identity and resolved preset when configured.',
2019
+ description: 'Create one ordinary Session for a new conversation, reusing the named blank Session while it is reusable.',
2020
+ parameters: [{ name: 'request', description: 'optional blank Session to reuse, location, and Agent preset.' }],
2021
+ returns: 'the created or reused Session identity and its preset when configured.',
1914
2022
  },
1915
2023
  {
1916
2024
  signature: '@Remote(\'selectModel\') selectModel(request: SessionSelectModelRequest): Promise<SessionSelectModelValue>',
@@ -1969,7 +2077,7 @@ export const SERVICE_API = [
1969
2077
  returns: 'the new Session identity.',
1970
2078
  },
1971
2079
  {
1972
- signature: '@Remote(\'prompt\') prompt(request: SessionPromptRequest, signal: AbortSignal): Promise<SessionPromptValue>',
2080
+ signature: '@Remote(\'prompt\') async prompt(request: SessionPromptRequest, signal: AbortSignal): Promise<SessionPromptValue>',
1973
2081
  description: 'Admit one prompt after explicitly resuming its Session.',
1974
2082
  parameters: [{ name: 'request', description: 'Session identity, prompt content, source metadata, and delivery mode.' }, { name: 'signal', description: 'caller cancellation before prompt admission begins.' }],
1975
2083
  returns: 'acknowledgement that the Agent accepted the prompt.',
@@ -1993,13 +2101,13 @@ export const SERVICE_API = [
1993
2101
  returns: 'acknowledgement that cancellation was requested.',
1994
2102
  },
1995
2103
  {
1996
- signature: '@Remote(\'page\') page(request: SessionPageRequest, signal: AbortSignal): Promise<SessionPage>',
2104
+ signature: '@Remote({ name: \'page\', resources: { session: addressedSession } }) page(request: SessionPageRequest, signal: AbortSignal): Promise<SessionPage>',
1997
2105
  description: 'Read one cold-safe, message-aligned Session history page.',
1998
2106
  parameters: [{ name: 'request', description: 'durable address, backward cursor, and page budget.' }, { name: 'signal', description: 'cancellation for persistence reads.' }],
1999
2107
  returns: 'one chronological page.',
2000
2108
  },
2001
2109
  {
2002
- signature: '@Remote({ mode: \'stream\' }) follow(request: SessionFollowRequest, signal: AbortSignal): AsyncIterable<SessionFollowFrame>',
2110
+ signature: '@Remote({ mode: \'stream\', resources: { session: addressedSession } }) follow(request: SessionFollowRequest, signal: AbortSignal): AsyncIterable<SessionFollowFrame>',
2003
2111
  description: 'Follow one Session log from its opening or resume cursor.',
2004
2112
  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.' }],
2005
2113
  returns: 'a complete opening snapshot followed by gap-free durable event frames and optional cursorless assistant-stream frames.',
@@ -2011,7 +2119,7 @@ export const SERVICE_API = [
2011
2119
  returns: 'a sequenced baseline, cached hints when migration is deferred, or null when absent.',
2012
2120
  },
2013
2121
  {
2014
- signature: '@Remote({ mode: \'stream\' }) control(signal: AbortSignal): AsyncIterable<SessionControlFrame>',
2122
+ signature: '@Remote({ mode: \'stream\' }) async *control(signal: AbortSignal): AsyncIterable<SessionControlFrame>',
2015
2123
  description: 'Stream a complete live-control baseline followed by replacement frames.',
2016
2124
  parameters: [{ name: 'signal', description: 'cancellation owned by the Remote stream carrier.' }],
2017
2125
  returns: 'one complete baseline followed by live replacement frames.',
@@ -3069,22 +3177,10 @@ export const SERVICE_API = [
3069
3177
  returns: 'a hold acknowledgement followed by an open lifetime stream.',
3070
3178
  },
3071
3179
  {
3072
- signature: '@Remote({ mode: \'stream\' }) follow(agent: Agent, id: WebTerminalId, attachmentId: TerminalAttachmentId, signal: AbortSignal): AsyncIterable<TerminalFrame>',
3073
- description: 'Attach to a terminal without binding its process lifetime to the transport.',
3074
- 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.' }],
3075
- returns: 'screen recovery followed by output and metadata changes.',
3076
- },
3077
- {
3078
- signature: '@Remote async write(agent: Agent, id: WebTerminalId, attachmentId: TerminalAttachmentId, data: string): Promise<void>',
3079
- description: 'Deliver raw input, including Tab completion and control characters.',
3080
- 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.' }],
3081
- returns: 'after provider input acceptance.',
3082
- },
3083
- {
3084
- signature: '@Remote async resize(agent: Agent, id: WebTerminalId, attachmentId: TerminalAttachmentId, cols: number, rows: number): Promise<void>',
3085
- description: 'Update the dimensions of the PTY and recovery screen.',
3086
- 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.' }],
3087
- returns: 'after the resize completes.',
3180
+ signature: '@Remote({ mode: \'stream\' }) attach(agent: Agent, id: WebTerminalId, signal: AbortSignal): RemoteStream<TerminalFrame, TerminalInput>',
3181
+ description: 'Attach terminal input and output to one physical Remote stream.',
3182
+ 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.' }],
3183
+ returns: 'screen recovery, output, writable state and provider-acceptance acknowledgements.',
3088
3184
  },
3089
3185
  {
3090
3186
  signature: '@Remote rename(agent: Agent, id: WebTerminalId, title: string): void',
@@ -3389,9 +3485,9 @@ export const SERVICE_API = [
3389
3485
  },
3390
3486
  {
3391
3487
  signature: 'hasLiveClient(): boolean',
3392
- description: 'Check for an active Client event stream.',
3488
+ description: 'Check for an active owner Client event stream, the only kind that can answer forwarded waterfalls.',
3393
3489
  parameters: [],
3394
- returns: 'whether a stream is open and has not been cancelled.',
3490
+ returns: 'whether an owner stream is open and has not been cancelled.',
3395
3491
  },
3396
3492
  {
3397
3493
  signature: 'registerRemoteEvents( source: TypertRemoteEventSource, host: RemoteEventHostInfo, ): () => Promise<void>',
@@ -3479,6 +3575,19 @@ export const SERVICE_API = [
3479
3575
  },
3480
3576
  ],
3481
3577
  },
3578
+ {
3579
+ key: 'webApp',
3580
+ summary: 'The Web GUI this process serves, provided by the `web-runtime` row.',
3581
+ description: 'The Web GUI this process serves, provided by the `web-runtime` row.',
3582
+ methods: [
3583
+ {
3584
+ signature: 'getAdvertisedUrl(): string',
3585
+ description: 'The URL this GUI advertises, also used for `DSH_WEB_URL` and the startup URL line.',
3586
+ parameters: [],
3587
+ returns: 'the configured `publicUrl`, otherwise the listener origin.',
3588
+ },
3589
+ ],
3590
+ },
3482
3591
  {
3483
3592
  key: 'webhookRuntime',
3484
3593
  summary: 'Fire-and-forget rule runtime.',
@@ -3503,6 +3612,13 @@ export const SERVICE_API = [
3503
3612
  summary: 'The browser HTTP carrier service.',
3504
3613
  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.',
3505
3614
  methods: [
3615
+ {
3616
+ signature: 'getOrigin(): string',
3617
+ 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.',
3618
+ parameters: [],
3619
+ returns: 'the origin, for example `http://127.0.0.1:3080`.',
3620
+ throws: ['before `listen` binds a port, or when the bind address has no URL form.'],
3621
+ },
3506
3622
  {
3507
3623
  signature: 'register(route: WebRoute): () => void',
3508
3624
  description: 'Register a named route. Duplicate (kind, path) throws — route patterns are a composition-level contract, so a collision is a misconfiguration.',
@@ -3678,8 +3794,8 @@ export const SERVICE_API = [
3678
3794
  returns: 'the complete resulting pin set, most recently pinned first.',
3679
3795
  },
3680
3796
  {
3681
- signature: '@Remote({ mode: \'stream\' }) follow(signal: AbortSignal): AsyncIterable<WorkspaceFollowFrame>',
3682
- description: 'Stream a complete Workspace baseline followed by ordered increments.',
3797
+ signature: '@Remote({ mode: \'stream\' }) async *follow(signal: AbortSignal): AsyncIterable<WorkspaceFollowFrame>',
3798
+ 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.',
3683
3799
  parameters: [{ name: 'signal', description: 'generation cancellation.' }],
3684
3800
  returns: 'baseline followed by ordered Workspace increments.',
3685
3801
  },
@@ -4220,6 +4336,14 @@ export const EVENT_API = [
4220
4336
  description: 'An installation moved between its Host phases. `installing` is announced once per registry the installation asks, with the attempt\'s registry and position; `cancelling` and `applying` once.',
4221
4337
  parameters: [{ name: 'progress', description: 'the installation\'s request id and phase, with the attempt while installing.' }],
4222
4338
  },
4339
+ {
4340
+ name: 'plugin-market/changed',
4341
+ mode: 'emit',
4342
+ signature: '\'plugin-market/changed\'(): void',
4343
+ summary: 'The configured index sources changed.',
4344
+ description: 'The configured index sources changed.',
4345
+ parameters: [],
4346
+ },
4223
4347
  {
4224
4348
  name: 'schedule/changed',
4225
4349
  mode: 'emit',
@@ -4797,7 +4921,7 @@ export const TYPE_API = [
4797
4921
  },
4798
4922
  {
4799
4923
  name: 'ChangeResult',
4800
- 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}',
4924
+ 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}',
4801
4925
  },
4802
4926
  {
4803
4927
  name: 'ClientArtifactBaseline',
@@ -4899,9 +5023,13 @@ export const TYPE_API = [
4899
5023
  name: 'ConfinedSandboxMode',
4900
5024
  declaration: 'export type ConfinedSandboxMode = Exclude<SandboxMode, \'danger-full-access\'>;',
4901
5025
  },
5026
+ {
5027
+ name: 'ConnectionAdmission',
5028
+ declaration: 'export type ConnectionAdmission = {\n readonly peer: PeerScope;\n readonly release: () => Promise<void>;\n} | {\n readonly rejection: 401 | 403 | 409;\n};',
5029
+ },
4902
5030
  {
4903
5031
  name: 'ConnectionFetchHandler',
4904
- declaration: 'export interface ConnectionFetchHandler {\n requestBodyMode(request: {\n readonly method: string;\n readonly url: URL;\n }): ConnectionRequestBodyMode;\n fetch(request: Request): Promise<Response>;\n}',
5032
+ 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}',
4905
5033
  },
4906
5034
  {
4907
5035
  name: 'ConnectionFetchMethod',
@@ -5481,7 +5609,7 @@ export const TYPE_API = [
5481
5609
  },
5482
5610
  {
5483
5611
  name: 'IncompatiblePlugin',
5484
- declaration: 'export interface IncompatiblePlugin {\n name: string;\n version: string;\n runtimeVersion: string;\n peers: Record<string, string>;\n}',
5612
+ declaration: 'export interface IncompatiblePlugin {\n name: string;\n version: string;\n runtimeVersion: string;\n requirements: Record<string, string>;\n}',
5485
5613
  },
5486
5614
  {
5487
5615
  name: 'IndexInjection',
@@ -5541,11 +5669,11 @@ export const TYPE_API = [
5541
5669
  },
5542
5670
  {
5543
5671
  name: 'InvocationDescriptor',
5544
- 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}',
5672
+ 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}',
5545
5673
  },
5546
5674
  {
5547
5675
  name: 'InvocationParameterDescriptor',
5548
- 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}',
5676
+ 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}',
5549
5677
  },
5550
5678
  {
5551
5679
  name: 'InvocationSourceLocation',
@@ -5553,7 +5681,7 @@ export const TYPE_API = [
5553
5681
  },
5554
5682
  {
5555
5683
  name: 'InvokeRemoteRequest',
5556
- 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}',
5684
+ 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}',
5557
5685
  },
5558
5686
  {
5559
5687
  name: 'JobAppendOptions',
@@ -5653,12 +5781,16 @@ export const TYPE_API = [
5653
5781
  },
5654
5782
  {
5655
5783
  name: 'JobSpec',
5656
- 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}',
5784
+ 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}',
5657
5785
  },
5658
5786
  {
5659
5787
  name: 'JobStatus',
5660
5788
  declaration: 'export type JobStatus = \'running\' | \'stopping\' | \'completed\' | \'killed\' | \'failed\';',
5661
5789
  },
5790
+ {
5791
+ name: 'JobToolCall',
5792
+ declaration: 'export interface JobToolCall {\n readonly callId: SessionEventMap[\'tool/call\'][\'callId\'];\n readonly rootCallId: SessionEventMap[\'tool/call\'][\'callId\'];\n}',
5793
+ },
5662
5794
  {
5663
5795
  name: 'JobView',
5664
5796
  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}',
@@ -5697,7 +5829,7 @@ export const TYPE_API = [
5697
5829
  },
5698
5830
  {
5699
5831
  name: 'LlmAdapter',
5700
- 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}',
5832
+ 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}',
5701
5833
  },
5702
5834
  {
5703
5835
  name: 'LlmAttemptId',
@@ -5717,7 +5849,7 @@ export const TYPE_API = [
5717
5849
  },
5718
5850
  {
5719
5851
  name: 'LlmConfigurableProvider',
5720
- declaration: 'export interface LlmConfigurableProvider {\n provider: string;\n displayName: string;\n settingsNs: string;\n settingsPath: readonly string[];\n declared?: boolean;\n error?: string;\n}',
5852
+ 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}',
5721
5853
  },
5722
5854
  {
5723
5855
  name: 'LlmDiscoveredModel',
@@ -5751,6 +5883,10 @@ export const TYPE_API = [
5751
5883
  name: 'LlmModelReasoningInfo',
5752
5884
  declaration: 'export interface LlmModelReasoningInfo {\n efforts: readonly LlmReasoningEffortInfo[];\n defaultEffort?: ReasoningEffortId;\n}',
5753
5885
  },
5886
+ {
5887
+ name: 'LlmNativeAuth',
5888
+ declaration: 'export interface LlmNativeAuth {\n env: readonly string[];\n oauth: boolean;\n}',
5889
+ },
5754
5890
  {
5755
5891
  name: 'LlmProviderInfo',
5756
5892
  declaration: 'export interface LlmProviderInfo {\n id: string;\n name: string;\n}',
@@ -5765,7 +5901,7 @@ export const TYPE_API = [
5765
5901
  },
5766
5902
  {
5767
5903
  name: 'LlmRuntime',
5768
- 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, configure?: ConfigureCall): Promise<PreparedLlmCall>;\n strea /* …truncated — full shape in source */',
5904
+ 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 */',
5769
5905
  },
5770
5906
  {
5771
5907
  name: 'LocalAtInput',
@@ -5821,12 +5957,88 @@ export const TYPE_API = [
5821
5957
  },
5822
5958
  {
5823
5959
  name: 'ManagementError',
5824
- 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}',
5960
+ 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}',
5825
5961
  },
5826
5962
  {
5827
5963
  name: 'ManualCompactAgentContext',
5828
5964
  declaration: 'export interface ManualCompactAgentContext extends CompactionAgentContext {\n runMaintenance<T>(task: (signal: AbortSignal) => Promise<T>): Promise<T>;\n}',
5829
5965
  },
5966
+ {
5967
+ name: 'MarketCompatibility',
5968
+ declaration: 'export type MarketCompatibility = {\n readonly compatible: true;\n} | {\n readonly compatible: false;\n readonly runtimeVersion: string;\n readonly requirements: Readonly<Record<string, string>>;\n readonly exempted: boolean;\n};',
5969
+ },
5970
+ {
5971
+ name: 'MarketDeclaration',
5972
+ declaration: 'export interface MarketDeclaration {\n readonly title: LocalizedText;\n}',
5973
+ },
5974
+ {
5975
+ name: 'MarketEngines',
5976
+ declaration: 'export interface MarketEngines {\n readonly dsh?: string;\n}',
5977
+ },
5978
+ {
5979
+ name: 'MarketIndexMetadata',
5980
+ declaration: 'export interface MarketIndexMetadata {\n readonly categories: Readonly<Record<string, MarketDeclaration>>;\n readonly labels: Readonly<Record<string, MarketDeclaration>>;\n readonly sortKeys: Readonly<Record<string, MarketSortKeyDeclaration>>;\n}',
5981
+ },
5982
+ {
5983
+ name: 'MarketIndexSummary',
5984
+ declaration: 'export interface MarketIndexSummary {\n readonly url: string;\n readonly title?: LocalizedText;\n readonly description?: LocalizedText;\n readonly error?: string;\n}',
5985
+ },
5986
+ {
5987
+ name: 'MarketInstallation',
5988
+ declaration: 'export interface MarketInstallation {\n readonly status: MarketInstallationStatus;\n readonly installedVersion?: string;\n}',
5989
+ },
5990
+ {
5991
+ name: 'MarketInstallationStatus',
5992
+ declaration: 'export type MarketInstallationStatus = \'not-installed\' | \'installed\' | \'update-available\' | \'different-version\' | \'provided\';',
5993
+ },
5994
+ {
5995
+ name: 'MarketInstallTarget',
5996
+ declaration: 'export interface MarketInstallTarget {\n readonly spec: string;\n readonly registry?: string;\n}',
5997
+ },
5998
+ {
5999
+ name: 'MarketListingEntry',
6000
+ declaration: 'export interface MarketListingEntry extends Omit<MarketPlugin, \'versions\'> {\n readonly versions: readonly MarketListingVersion[];\n readonly defaultVersion?: string;\n readonly installation: MarketInstallation;\n}',
6001
+ },
6002
+ {
6003
+ name: 'MarketListingVersion',
6004
+ declaration: 'export interface MarketListingVersion extends MarketVersion {\n readonly install: MarketInstallTarget;\n readonly compatibility: MarketCompatibility;\n}',
6005
+ },
6006
+ {
6007
+ name: 'MarketPlugin',
6008
+ declaration: 'export interface MarketPlugin {\n readonly name: string;\n readonly title?: LocalizedText;\n readonly description?: LocalizedText;\n readonly icon?: string;\n readonly author?: string;\n readonly homepage?: string;\n readonly repository?: MarketRepository;\n readonly metadata: MarketPluginMetadata;\n readonly versions: readonly MarketVersion[];\n}',
6009
+ },
6010
+ {
6011
+ name: 'MarketPluginMetadata',
6012
+ declaration: 'export interface MarketPluginMetadata {\n readonly category?: string;\n readonly keywords: readonly string[];\n readonly labels: readonly string[];\n readonly sortKeys: Readonly<Record<string, number>>;\n}',
6013
+ },
6014
+ {
6015
+ name: 'MarketQuery',
6016
+ declaration: 'export interface MarketQuery {\n readonly text?: string;\n readonly category?: string;\n readonly labels?: readonly string[];\n readonly sort: MarketSort;\n readonly offset: number;\n readonly limit: number;\n readonly refresh?: boolean;\n readonly fetchedAt?: number;\n}',
6017
+ },
6018
+ {
6019
+ name: 'MarketRepository',
6020
+ declaration: 'export interface MarketRepository {\n readonly url: string;\n readonly directory?: string;\n}',
6021
+ },
6022
+ {
6023
+ name: 'MarketSearchResult',
6024
+ declaration: 'export interface MarketSearchResult {\n readonly url: string;\n readonly title: LocalizedText;\n readonly description?: LocalizedText;\n readonly metadata: MarketIndexMetadata;\n readonly fetchedAt: number;\n readonly entries: readonly MarketListingEntry[];\n readonly total: number;\n readonly nextOffset: number | null;\n}',
6025
+ },
6026
+ {
6027
+ name: 'MarketSort',
6028
+ declaration: 'export type MarketSort = {\n readonly kind: \'index\';\n} | {\n readonly kind: \'relevance\';\n} | {\n readonly kind: \'published\';\n readonly direction: \'asc\' | \'desc\';\n} | {\n readonly kind: \'key\';\n readonly id: string;\n readonly direction: \'asc\' | \'desc\';\n};',
6029
+ },
6030
+ {
6031
+ name: 'MarketSortKeyDeclaration',
6032
+ declaration: 'export interface MarketSortKeyDeclaration {\n readonly title: LocalizedText;\n readonly order: \'asc\' | \'desc\';\n}',
6033
+ },
6034
+ {
6035
+ name: 'MarketSource',
6036
+ declaration: 'export type MarketSource = {\n readonly type: \'npm\';\n readonly registry?: string;\n} | {\n readonly type: \'git\';\n readonly url: string;\n readonly commit: string;\n readonly path?: string;\n};',
6037
+ },
6038
+ {
6039
+ name: 'MarketVersion',
6040
+ declaration: 'export interface MarketVersion {\n readonly version: string;\n readonly publishTimestamp: number;\n readonly source: MarketSource;\n readonly engines: MarketEngines;\n}',
6041
+ },
5830
6042
  {
5831
6043
  name: 'MatcherValue',
5832
6044
  declaration: 'export type MatcherValue = string | number | boolean | null | RegExp | readonly (string | number | boolean | null)[];',
@@ -6085,7 +6297,11 @@ export const TYPE_API = [
6085
6297
  },
6086
6298
  {
6087
6299
  name: 'PeerScope',
6088
- declaration: 'export interface PeerScope {\n readonly id: PeerId;\n readonly ctx: Context;\n dispose(): Promise<void>;\n}',
6300
+ 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}',
6301
+ },
6302
+ {
6303
+ name: 'PendingModule',
6304
+ declaration: 'export interface PendingModule {\n url: string;\n reason: \'host-module\' | \'unmanaged-plugin\' | \'module-comparison\';\n}',
6089
6305
  },
6090
6306
  {
6091
6307
  name: 'PermissionCatalog',
@@ -6207,6 +6423,14 @@ export const TYPE_API = [
6207
6423
  name: 'PreToolDecision',
6208
6424
  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};',
6209
6425
  },
6426
+ {
6427
+ name: 'Principal',
6428
+ declaration: 'export type Principal = PrincipalMap[keyof PrincipalMap];',
6429
+ },
6430
+ {
6431
+ name: 'PrincipalMap',
6432
+ declaration: 'export interface PrincipalMap {\n owner: {\n readonly kind: \'owner\';\n };\n}',
6433
+ },
6210
6434
  {
6211
6435
  name: 'ProductEvent',
6212
6436
  declaration: 'export type ProductEvent = {\n [K in keyof ProductEventMap]: {\n eventName: K;\n attributes: ProductEventMap[K];\n timestamp: number;\n };\n}[keyof ProductEventMap];',
@@ -6223,6 +6447,10 @@ export const TYPE_API = [
6223
6447
  name: 'ProfilePnpmInvocation',
6224
6448
  declaration: 'export interface ProfilePnpmInvocation {\n readonly command: string;\n readonly args: readonly string[];\n readonly env: Readonly<Record<string, string>>;\n}',
6225
6449
  },
6450
+ {
6451
+ name: 'ProfileReconciliation',
6452
+ declaration: 'export interface ProfileReconciliation {\n warnings: string[];\n pending: PendingModule[];\n restartReason?: \'module-comparison\' | \'package-moved\';\n}',
6453
+ },
6226
6454
  {
6227
6455
  name: 'ProjectionChangeListener',
6228
6456
  declaration: 'export type ProjectionChangeListener = (session: Session, key: Extract<keyof SessionProjectionMap, string>, value: unknown, seq: SessionSeq) => void;',
@@ -6321,7 +6549,7 @@ export const TYPE_API = [
6321
6549
  },
6322
6550
  {
6323
6551
  name: 'PtcRunRequest',
6324
- declaration: 'export interface PtcRunRequest {\n program: string;\n bindings: PtcBindingNamespace[];\n cwd?: string;\n timeoutMs?: number | null;\n sandboxPolicy?: SandboxExecutionPolicy;\n signal?: AbortSignal;\n}',
6552
+ 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}',
6325
6553
  },
6326
6554
  {
6327
6555
  name: 'PtcRunResult',
@@ -6375,6 +6603,62 @@ export const TYPE_API = [
6375
6603
  name: 'Reload',
6376
6604
  declaration: 'export interface Reload {\n filename: string;\n modules: ReloadModules;\n runtime?: Plugin.Runtime | undefined;\n}',
6377
6605
  },
6606
+ {
6607
+ name: 'RemoteAccessAction',
6608
+ declaration: 'export type RemoteAccessAction = RemoteAccessEndpoint | `event:${string}`;',
6609
+ },
6610
+ {
6611
+ name: 'RemoteAccessBaseline',
6612
+ declaration: 'export type RemoteAccessBaseline = Extract<RemoteAccessFrame, {\n type: \'baseline\';\n}>;',
6613
+ },
6614
+ {
6615
+ name: 'RemoteAccessBinding',
6616
+ 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];',
6617
+ },
6618
+ {
6619
+ name: 'RemoteAccessCondition',
6620
+ 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;',
6621
+ },
6622
+ {
6623
+ name: 'RemoteAccessDecision',
6624
+ declaration: 'export type RemoteAccessDecision = {\n readonly kind: \'allow\';\n} | {\n readonly kind: \'deny\';\n readonly reason: string;\n};',
6625
+ },
6626
+ {
6627
+ name: 'RemoteAccessEndpoint',
6628
+ declaration: 'export type RemoteAccessEndpoint = `${string}/${string}`;',
6629
+ },
6630
+ {
6631
+ name: 'RemoteAccessFrame',
6632
+ 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};',
6633
+ },
6634
+ {
6635
+ name: 'RemoteAccessGrant',
6636
+ declaration: 'export interface RemoteAccessGrant {\n readonly resource: RemoteAccessResource;\n readonly actions: readonly string[];\n}',
6637
+ },
6638
+ {
6639
+ name: 'RemoteAccessPolicy',
6640
+ declaration: 'export interface RemoteAccessPolicy<P extends Principal> {\n bindings(principal: P): readonly RemoteAccessBinding[];\n explain?(request: RemoteAccessRequest<P>): string | undefined;\n}',
6641
+ },
6642
+ {
6643
+ name: 'RemoteAccessRequest',
6644
+ 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}',
6645
+ },
6646
+ {
6647
+ name: 'RemoteAccessResource',
6648
+ 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];',
6649
+ },
6650
+ {
6651
+ name: 'RemoteAccessResourceKind',
6652
+ declaration: 'export type RemoteAccessResourceKind = \'global\' | TypertResourceKind;',
6653
+ },
6654
+ {
6655
+ name: 'RemoteAccessResourceOf',
6656
+ declaration: 'export type RemoteAccessResourceOf<K extends RemoteAccessResourceKind> = Extract<RemoteAccessResource, {\n readonly kind: K;\n}>;',
6657
+ },
6658
+ {
6659
+ name: 'RemoteAccessRole',
6660
+ declaration: 'export interface RemoteAccessRole<K extends RemoteAccessResourceKind> {\n readonly name: string;\n readonly resource: K;\n readonly actions: readonly RemoteAccessAction[];\n}',
6661
+ },
6378
6662
  {
6379
6663
  name: 'RemoteError',
6380
6664
  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}',
@@ -6391,6 +6675,14 @@ export const TYPE_API = [
6391
6675
  name: 'RemoteEventHostInfo',
6392
6676
  declaration: 'export interface RemoteEventHostInfo {\n readonly home: string;\n}',
6393
6677
  },
6678
+ {
6679
+ name: 'RemoteStream',
6680
+ declaration: 'export type RemoteStream<Out, In = never> = AsyncIterable<Out> & {\n readonly [STREAM_UPLINK]?: In;\n};',
6681
+ },
6682
+ {
6683
+ name: 'RemoteUplinkWindow',
6684
+ declaration: 'export interface RemoteUplinkWindow {\n readonly maxBytes: number;\n readonly frameOverheadBytes: number;\n}',
6685
+ },
6394
6686
  {
6395
6687
  name: 'RenderedDocumentBytes',
6396
6688
  declaration: 'export interface RenderedDocumentBytes extends WorkspaceFileBytes {\n readonly missingFonts: string[];\n readonly generation: OfficeToPdfGeneration;\n}',
@@ -6451,6 +6743,10 @@ export const TYPE_API = [
6451
6743
  name: 'ResolvedSubagentStartRequest',
6452
6744
  declaration: 'export interface ResolvedSubagentStartRequest extends SubagentStartRequest {\n readonly cwd: string;\n}',
6453
6745
  },
6746
+ {
6747
+ name: 'RestartReason',
6748
+ declaration: 'export type RestartReason = \'no-hmr\' | \'package-moved\' | \'host-module\' | \'unmanaged-plugin\' | \'module-comparison\';',
6749
+ },
6454
6750
  {
6455
6751
  name: 'RestoredSessionOptions',
6456
6752
  declaration: 'export interface RestoredSessionOptions {\n readonly seed: SessionEvent[];\n readonly meta: SessionHeader;\n readonly inheritedEventCount: SessionLogOffset;\n readonly eventState: SessionSeedEventState;\n}',
@@ -7461,7 +7757,7 @@ export const TYPE_API = [
7461
7757
  },
7462
7758
  {
7463
7759
  name: 'SubagentCapabilities',
7464
- 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}',
7760
+ declaration: 'export interface SubagentCapabilities {\n readonly agentOptions: boolean;\n readonly agentPreset: boolean;\n readonly outputSchema: boolean;\n readonly depthLimit: boolean;\n}',
7465
7761
  },
7466
7762
  {
7467
7763
  name: 'SubagentCatalogEntry',
@@ -7537,7 +7833,7 @@ export const TYPE_API = [
7537
7833
  },
7538
7834
  {
7539
7835
  name: 'SubagentStartRequest',
7540
- declaration: 'export interface SubagentStartRequest {\n readonly cwd?: 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 readonly toolFilter?: ToolRestriction;\n readonly persona?: string;\n}',
7836
+ 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}',
7541
7837
  },
7542
7838
  {
7543
7839
  name: 'SubagentStopReason',
@@ -7687,10 +7983,6 @@ export const TYPE_API = [
7687
7983
  name: 'TeamWaitResult',
7688
7984
  declaration: 'export interface TeamWaitResult {\n readonly timedOut: boolean;\n}',
7689
7985
  },
7690
- {
7691
- name: 'TerminalAttachmentId',
7692
- declaration: 'export type TerminalAttachmentId = Branded<\'TerminalAttachmentId\'>;',
7693
- },
7694
7986
  {
7695
7987
  name: 'TerminalBackend',
7696
7988
  declaration: 'export interface TerminalBackend {\n readonly type: string;\n spawn(spec: TerminalBackendSpawnSpec): Promise<TerminalBackendSession>;\n}',
@@ -7713,11 +8005,15 @@ export const TYPE_API = [
7713
8005
  },
7714
8006
  {
7715
8007
  name: 'TerminalEnvironment',
7716
- 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}',
8008
+ 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}',
7717
8009
  },
7718
8010
  {
7719
8011
  name: 'TerminalFrame',
7720
- 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};',
8012
+ 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};',
8013
+ },
8014
+ {
8015
+ name: 'TerminalInput',
8016
+ 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};',
7721
8017
  },
7722
8018
  {
7723
8019
  name: 'TerminalReadRequest',
@@ -8025,7 +8321,7 @@ export const TYPE_API = [
8025
8321
  },
8026
8322
  {
8027
8323
  name: 'TypertCodec',
8028
- 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};',
8324
+ 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};',
8029
8325
  },
8030
8326
  {
8031
8327
  name: 'TypertContribution',
@@ -8053,7 +8349,7 @@ export const TYPE_API = [
8053
8349
  },
8054
8350
  {
8055
8351
  name: 'TypertGatewayWireStream',
8056
- 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}',
8352
+ 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}',
8057
8353
  },
8058
8354
  {
8059
8355
  name: 'TypertMemberModel',
@@ -8085,7 +8381,7 @@ export const TYPE_API = [
8085
8381
  },
8086
8382
  {
8087
8383
  name: 'TypertRemoteEventFrame',
8088
- declaration: 'export interface TypertRemoteEventFrame {\n readonly event: string;\n readonly args: readonly unknown[];\n}',
8384
+ declaration: 'export interface TypertRemoteEventFrame {\n readonly event: string;\n readonly args: readonly unknown[];\n readonly resources?: Readonly<Record<string, TypertResourceReader>>;\n}',
8089
8385
  },
8090
8386
  {
8091
8387
  name: 'TypertRemoteEventInvocation',
@@ -8103,6 +8399,30 @@ export const TYPE_API = [
8103
8399
  name: 'TypertRemoteService',
8104
8400
  declaration: 'export abstract class TypertRemoteService<out T = never> extends Service<T> {\n readonly typertRemote: TypertGatewayBinding<this>;\n}',
8105
8401
  },
8402
+ {
8403
+ name: 'TypertRemoteValue',
8404
+ 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}',
8405
+ },
8406
+ {
8407
+ name: 'TypertResource',
8408
+ declaration: 'export interface TypertResource<Id> {\n readonly [RESOURCE_ID]: Id;\n}',
8409
+ },
8410
+ {
8411
+ name: 'TypertResourceId',
8412
+ declaration: 'export type TypertResourceId<Resource> = Resource extends TypertResource<infer Id> ? Id : never;',
8413
+ },
8414
+ {
8415
+ name: 'TypertResourceKind',
8416
+ declaration: 'export type TypertResourceKind = Extract<keyof TypertResourceMap, string>;',
8417
+ },
8418
+ {
8419
+ name: 'TypertResourceMap',
8420
+ declaration: 'export interface TypertResourceMap {\n}',
8421
+ },
8422
+ {
8423
+ name: 'TypertResourceReader',
8424
+ declaration: 'export type TypertResourceReader = {\n read(...args: readonly unknown[]): unknown;\n}[\'read\'];',
8425
+ },
8106
8426
  {
8107
8427
  name: 'TypertSchema',
8108
8428
  declaration: 'export interface TypertSchema<Output = unknown> {\n parse(value: unknown): Output;\n}',
@@ -8177,7 +8497,11 @@ export const TYPE_API = [
8177
8497
  },
8178
8498
  {
8179
8499
  name: 'WebBootGraph',
8180
- declaration: 'export interface WebBootGraph {\n rev: string;\n entries: WebBootEntry[];\n batches: WebBootBatch[];\n}',
8500
+ declaration: 'export interface WebBootGraph {\n rev: string;\n release?: WebBootRelease;\n entries: WebBootEntry[];\n batches: WebBootBatch[];\n}',
8501
+ },
8502
+ {
8503
+ name: 'WebBootRelease',
8504
+ declaration: 'export interface WebBootRelease {\n version: string;\n commit?: string;\n}',
8181
8505
  },
8182
8506
  {
8183
8507
  name: 'WebFetchBody',
@@ -8273,7 +8597,7 @@ export const TYPE_API = [
8273
8597
  },
8274
8598
  {
8275
8599
  name: 'WebTerminalInfo',
8276
- 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}',
8600
+ 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}',
8277
8601
  },
8278
8602
  {
8279
8603
  name: 'WebUpgradeRoute',
@@ -8433,7 +8757,7 @@ export const TYPE_API = [
8433
8757
  },
8434
8758
  {
8435
8759
  name: 'WorkspaceFollowIncrement',
8436
- 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};',
8760
+ 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};',
8437
8761
  },
8438
8762
  {
8439
8763
  name: 'WorkspaceInsertBeforeRequest',
package/locale/en.json ADDED
@@ -0,0 +1,5 @@
1
+ {
2
+ "meta": {
3
+ "title": "tool-cordis"
4
+ }
5
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "meta": {
3
+ "title": "tool-cordis/host"
4
+ }
5
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "meta": {
3
+ "title": "插件 API 检查服务"
4
+ }
5
+ }
package/locale/zh.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "meta": {
3
+ "title": "插件 API 查询工具",
4
+ "description": "让 AI 在开发插件前查询服务端和浏览器端的可用 API。"
5
+ }
6
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-tool-cordis",
3
3
  "description": "Read-only runtime API inspection for Harness plugin development",
4
- "version": "0.2.1-alpha.2",
4
+ "version": "0.2.1-alpha.4",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -23,31 +23,35 @@
23
23
  "default": "./lib/types/host.js"
24
24
  },
25
25
  "./src/*": "./src/*",
26
- "./package.json": "./package.json"
26
+ "./package.json": "./package.json",
27
+ "./host/locale/*.json": "./locale/host/*.json",
28
+ "./locale/*.json": "./locale/*.json"
27
29
  },
28
30
  "files": [
31
+ "locale/*.json",
32
+ "locale/host/*.json",
29
33
  "lib/index.js",
30
34
  "lib/types/**/*.js",
31
35
  "lib/types/**/*.d.ts"
32
36
  ],
33
37
  "license": "MIT",
34
38
  "peerDependencies": {
35
- "@deepseek-ai/cordis": "~4.0.5-alpha.1",
36
- "@deepseek-ai/cordis-plugin-loader": "~1.0.6-alpha.1",
37
- "@deepseek-ai/dsh-agent": "0.2.1-alpha.2",
38
- "@deepseek-ai/dsh-app-boot": "0.2.1-alpha.2",
39
- "@deepseek-ai/dsh-cordis-host-runner": "0.2.1-alpha.2",
40
- "@deepseek-ai/dsh-tools": "0.2.1-alpha.2"
39
+ "@deepseek-ai/cordis": "~4.0.5-alpha.2",
40
+ "@deepseek-ai/cordis-plugin-loader": "~1.0.6-alpha.2",
41
+ "@deepseek-ai/dsh-agent": "0.2.1-alpha.4",
42
+ "@deepseek-ai/dsh-app-boot": "0.2.1-alpha.4",
43
+ "@deepseek-ai/dsh-cordis-host-runner": "0.2.1-alpha.4",
44
+ "@deepseek-ai/dsh-tools": "0.2.1-alpha.4"
41
45
  },
42
46
  "devDependencies": {
43
- "@deepseek-ai/cordis": "~4.0.5-alpha.1",
44
- "@deepseek-ai/cordis-plugin-group": "~1.0.5-alpha.1",
45
- "@deepseek-ai/cordis-plugin-loader": "~1.0.6-alpha.1",
46
- "@deepseek-ai/dsh-agent": "0.2.1-alpha.2",
47
- "@deepseek-ai/dsh-app-boot": "0.2.1-alpha.2",
48
- "@deepseek-ai/dsh-cordis-host-runner": "0.2.1-alpha.2",
49
- "@deepseek-ai/dsh-system-prompt": "0.2.1-alpha.2",
50
- "@deepseek-ai/dsh-tools": "0.2.1-alpha.2",
51
- "@deepseek-ai/schemastery": "~3.18.5-alpha.1"
47
+ "@deepseek-ai/cordis": "~4.0.5-alpha.2",
48
+ "@deepseek-ai/cordis-plugin-group": "~1.0.5-alpha.2",
49
+ "@deepseek-ai/cordis-plugin-loader": "~1.0.6-alpha.2",
50
+ "@deepseek-ai/dsh-agent": "0.2.1-alpha.4",
51
+ "@deepseek-ai/dsh-app-boot": "0.2.1-alpha.4",
52
+ "@deepseek-ai/dsh-cordis-host-runner": "0.2.1-alpha.4",
53
+ "@deepseek-ai/dsh-system-prompt": "0.2.1-alpha.4",
54
+ "@deepseek-ai/dsh-tools": "0.2.1-alpha.4",
55
+ "@deepseek-ai/schemastery": "~3.18.5-alpha.2"
52
56
  }
53
57
  }