fix: rebase

This commit is contained in:
imccyu
2026-08-13 01:59:32 +08:00
parent 25efb8ff6f
commit 39f55a049f
26 changed files with 3031 additions and 1723 deletions

View File

@@ -32,7 +32,7 @@ One page per subsystem of the DeepSeek Harness: what it is, the data structures
| [terminal.md](terminal.md) | persistent terminal ids, backend/session contracts, send readiness, bounded reads, and owner-visible snapshots |
| [sandbox.md](sandbox.md) | per-session policy resolution and the process-confinement seam: file-effect modes, execution/provider policies, `ConfinedArgv`, enforcement and fail-closed errors |
| [code-runtime.md](code-runtime.md) | the code-execution seam: `CodeRunRequest`/`Result`, binding namespaces, captured logs, the `CodeRunFailure` taxonomy |
| [self-modification.md](self-modification.md) | versioned dynamic Cordis Plugins and Packages, Host/Client activation, approval, runtime inspection, and lifecycle teardown |
| [extensions.md](extensions.md) | versioned dynamic Cordis Plugins and Packages, Host/Client activation, approval, runtime inspection, and lifecycle teardown |
| [filesystem.md](filesystem.md) | the filesystem seam: `FsTarget`, read/write/edit outcomes, observed-file state, `FsErrorCode` |
| [lsp.md](lsp.md) | the LSP navigation seam: `LspQueryRequest`/`Result`, `LspProvider`/`Service`, four operations, `LspError` |
| [skills.md](skills.md) | the skill service: discovery priority, `SkillSummary`/`SkillDefinition`, session-prefix catalog, model-facing `skill` loading |

View File

@@ -32,7 +32,7 @@
| [terminal.md](terminal.md) | 持久化终端 ID、后端/会话约定、发送就绪状态、有界读取与 owner 可见快照 |
| [sandbox.md](sandbox.md) | 每会话策略解析与进程约束 seam文件效果模式、执行/提供方策略、`ConfinedArgv`、强制执行与故障关闭错误 |
| [code-runtime.md](code-runtime.md) | 代码执行 seam`CodeRunRequest`/`Result`、绑定命名空间、捕获日志、`CodeRunFailure` 分类体系 |
| [self-modification.md](self-modification.md) | 带版本的动态 Cordis Plugin 与 Package、Host/Client 激活、审批、运行时检查和生命周期撤销 |
| [extensions.md](extensions.md) | 带版本的动态 Cordis Plugin 与 Package、Host/Client 激活、审批、运行时检查和生命周期撤销 |
| [filesystem.md](filesystem.md) | 文件系统 seam`FsTarget`、读/写/编辑结果、观测到的文件状态、`FsErrorCode` |
| [lsp.md](lsp.md) | LSP 导航 seam`LspQueryRequest`/`Result``LspProvider`/`Service`、四种操作、`LspError` |
| [skills.md](skills.md) | skill技能服务发现优先级、`SkillSummary`/`SkillDefinition`、会话前缀目录、面向模型的 `skill` 加载 |

View File

@@ -1,6 +1,6 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write docs/subsystems/self-modification.md
self-modification.md: 90ee02eb69149c6729635f9916fbd3946d4ae477
self-modification.zh.md: a22bb38b1fe398da19b11384e6e38b9dde6d0c3e
# pnpm run verify-translation-pairing --write docs/subsystems/extensions.md
extensions.md: 90ee02eb69149c6729635f9916fbd3946d4ae477
extensions.zh.md: a22bb38b1fe398da19b11384e6e38b9dde6d0c3e

View File

@@ -1,8 +1,8 @@
# 运行时自修改
# Extensions
[English](self-modification.md) | 中文
English | [中文](extensions.zh.md)
self-modification 子系统允许 agent智能体定义带版本的 Cordis 包、运行其 host 与浏览器两半,并在编写代码前查询获准公开的运行时元数据。包生命周期与沙箱行为由 [`packages/self-modification`](../../packages/self-modification/README.md) 包组说明。
The extensions subsystem lets an agent define versioned Cordis packages, run their host and browser halves, and query approved runtime metadata before writing code. Package lifecycle and sandbox behavior belong to the [`packages/extensions`](../../packages/extensions/README.md) package group.
<!-- BEGIN GENERATED cordis-surface (gen-cordis-catalog.ts) — do not edit between markers -->
@@ -62,7 +62,7 @@ resolveClientQuery( agent: Agent, requestId: CordisInspectRequestId, resolution:
Types: [Agent](core.md)
Source: [`packages/self-modification/cordis-host-runner/src/inspect-registry.ts:46`](../../packages/self-modification/cordis-host-runner/src/inspect-registry.ts)
Source: [`packages/extensions/cordis-host-runner/src/inspect-registry.ts:46`](../../packages/extensions/cordis-host-runner/src/inspect-registry.ts)
<a id="ctxdynamiccordisrunner--dynamiccordisrunnerservice"></a>
@@ -254,7 +254,7 @@ inspectPackage( agent: Agent, pluginId: CordisDynamicPluginId, packageId: Cordis
Types: [Agent](core.md)
Source: [`packages/self-modification/cordis-host-runner/src/index.ts:124`](../../packages/self-modification/cordis-host-runner/src/index.ts)
Source: [`packages/extensions/cordis-host-runner/src/index.ts:124`](../../packages/extensions/cordis-host-runner/src/index.ts)
<a id="cordis-events"></a>
@@ -275,7 +275,7 @@ One exact Plugin/Package activation is now live in the Host.
'cordis/dynamic-package'(pkg: DynamicCordisPackage): void
```
Source: [`packages/self-modification/cordis-host-runner/src/types.ts:379`](../../packages/self-modification/cordis-host-runner/src/types.ts)
Source: [`packages/extensions/cordis-host-runner/src/types.ts:379`](../../packages/extensions/cordis-host-runner/src/types.ts)
<a id="cordisdynamic-retract--emit"></a>
@@ -292,7 +292,7 @@ One exact activation was withdrawn.
'cordis/dynamic-retract'(retracted: DynamicCordisRetracted): void
```
Source: [`packages/self-modification/cordis-host-runner/src/types.ts:385`](../../packages/self-modification/cordis-host-runner/src/types.ts)
Source: [`packages/extensions/cordis-host-runner/src/types.ts:385`](../../packages/extensions/cordis-host-runner/src/types.ts)
<a id="cordisinspect-query--emit"></a>
@@ -309,7 +309,7 @@ Request a live read-only query from the Client inspect registry.
'cordis/inspect-query'(request: CordisInspectQueryRequest): void
```
Source: [`packages/self-modification/cordis-host-runner/src/types.ts:391`](../../packages/self-modification/cordis-host-runner/src/types.ts)
Source: [`packages/extensions/cordis-host-runner/src/types.ts:391`](../../packages/extensions/cordis-host-runner/src/types.ts)
<a id="cordisinspect-query-resolved--emit"></a>
@@ -326,7 +326,7 @@ Notify every Client that an inspect query has settled or been cancelled.
'cordis/inspect-query-resolved'(resolved: CordisInspectQueryResolved): void
```
Source: [`packages/self-modification/cordis-host-runner/src/types.ts:397`](../../packages/self-modification/cordis-host-runner/src/types.ts)
Source: [`packages/extensions/cordis-host-runner/src/types.ts:397`](../../packages/extensions/cordis-host-runner/src/types.ts)
<a id="cordisrequest-run--emit"></a>
@@ -343,7 +343,7 @@ A Client-bearing activation needs a browser page, and may require a user decisio
'cordis/request-run'(request: DynamicCordisRunRequest): void
```
Source: [`packages/self-modification/cordis-host-runner/src/types.ts:367`](../../packages/self-modification/cordis-host-runner/src/types.ts)
Source: [`packages/extensions/cordis-host-runner/src/types.ts:367`](../../packages/extensions/cordis-host-runner/src/types.ts)
<a id="cordisrequest-run-resolved--emit"></a>
@@ -360,5 +360,5 @@ A pending Client activation request left the answerable state.
'cordis/request-run-resolved'(resolved: DynamicCordisRequestResolved): void
```
Source: [`packages/self-modification/cordis-host-runner/src/types.ts:373`](../../packages/self-modification/cordis-host-runner/src/types.ts)
Source: [`packages/extensions/cordis-host-runner/src/types.ts:373`](../../packages/extensions/cordis-host-runner/src/types.ts)
<!-- END GENERATED cordis-surface -->

View File

@@ -1,8 +1,8 @@
# Runtime self-modification
# 扩展
English | [中文](self-modification.zh.md)
[English](extensions.md) | 中文
The self-modification subsystem lets an agent define versioned Cordis packages, run their host and browser halves, and query approved runtime metadata before writing code. Package lifecycle and sandbox behavior belong to the [`packages/self-modification`](../../packages/self-modification/README.md) package group.
extensions 子系统允许 agent智能体定义带版本的 Cordis 包、运行其 host 与浏览器两半,并在编写代码前查询获准公开的运行时元数据。包生命周期与沙箱行为由 [`packages/extensions`](../../packages/extensions/README.md) 包组说明。
<!-- BEGIN GENERATED cordis-surface (gen-cordis-catalog.ts) — do not edit between markers -->
@@ -62,7 +62,7 @@ resolveClientQuery( agent: Agent, requestId: CordisInspectRequestId, resolution:
Types: [Agent](core.md)
Source: [`packages/self-modification/cordis-host-runner/src/inspect-registry.ts:46`](../../packages/self-modification/cordis-host-runner/src/inspect-registry.ts)
Source: [`packages/extensions/cordis-host-runner/src/inspect-registry.ts:46`](../../packages/extensions/cordis-host-runner/src/inspect-registry.ts)
<a id="ctxdynamiccordisrunner--dynamiccordisrunnerservice"></a>
@@ -254,7 +254,7 @@ inspectPackage( agent: Agent, pluginId: CordisDynamicPluginId, packageId: Cordis
Types: [Agent](core.md)
Source: [`packages/self-modification/cordis-host-runner/src/index.ts:124`](../../packages/self-modification/cordis-host-runner/src/index.ts)
Source: [`packages/extensions/cordis-host-runner/src/index.ts:124`](../../packages/extensions/cordis-host-runner/src/index.ts)
<a id="cordis-events"></a>
@@ -275,7 +275,7 @@ One exact Plugin/Package activation is now live in the Host.
'cordis/dynamic-package'(pkg: DynamicCordisPackage): void
```
Source: [`packages/self-modification/cordis-host-runner/src/types.ts:379`](../../packages/self-modification/cordis-host-runner/src/types.ts)
Source: [`packages/extensions/cordis-host-runner/src/types.ts:379`](../../packages/extensions/cordis-host-runner/src/types.ts)
<a id="cordisdynamic-retract--emit"></a>
@@ -292,7 +292,7 @@ One exact activation was withdrawn.
'cordis/dynamic-retract'(retracted: DynamicCordisRetracted): void
```
Source: [`packages/self-modification/cordis-host-runner/src/types.ts:385`](../../packages/self-modification/cordis-host-runner/src/types.ts)
Source: [`packages/extensions/cordis-host-runner/src/types.ts:385`](../../packages/extensions/cordis-host-runner/src/types.ts)
<a id="cordisinspect-query--emit"></a>
@@ -309,7 +309,7 @@ Request a live read-only query from the Client inspect registry.
'cordis/inspect-query'(request: CordisInspectQueryRequest): void
```
Source: [`packages/self-modification/cordis-host-runner/src/types.ts:391`](../../packages/self-modification/cordis-host-runner/src/types.ts)
Source: [`packages/extensions/cordis-host-runner/src/types.ts:391`](../../packages/extensions/cordis-host-runner/src/types.ts)
<a id="cordisinspect-query-resolved--emit"></a>
@@ -326,7 +326,7 @@ Notify every Client that an inspect query has settled or been cancelled.
'cordis/inspect-query-resolved'(resolved: CordisInspectQueryResolved): void
```
Source: [`packages/self-modification/cordis-host-runner/src/types.ts:397`](../../packages/self-modification/cordis-host-runner/src/types.ts)
Source: [`packages/extensions/cordis-host-runner/src/types.ts:397`](../../packages/extensions/cordis-host-runner/src/types.ts)
<a id="cordisrequest-run--emit"></a>
@@ -343,7 +343,7 @@ A Client-bearing activation needs a browser page, and may require a user decisio
'cordis/request-run'(request: DynamicCordisRunRequest): void
```
Source: [`packages/self-modification/cordis-host-runner/src/types.ts:367`](../../packages/self-modification/cordis-host-runner/src/types.ts)
Source: [`packages/extensions/cordis-host-runner/src/types.ts:367`](../../packages/extensions/cordis-host-runner/src/types.ts)
<a id="cordisrequest-run-resolved--emit"></a>
@@ -360,5 +360,5 @@ A pending Client activation request left the answerable state.
'cordis/request-run-resolved'(resolved: DynamicCordisRequestResolved): void
```
Source: [`packages/self-modification/cordis-host-runner/src/types.ts:373`](../../packages/self-modification/cordis-host-runner/src/types.ts)
Source: [`packages/extensions/cordis-host-runner/src/types.ts:373`](../../packages/extensions/cordis-host-runner/src/types.ts)
<!-- END GENERATED cordis-surface -->

View File

@@ -51,7 +51,7 @@ describe.skipIf(!requiredArtifacts)('Goal Remote built LIB chain', () => {
const { Context } = cordis
const { default: AgentRegistry } = await import(urls.agent)
const connectionHost = await import(urls.connectionHost)
const { default: TypertGatewayService } = await import(urls.apiGatewayHost)
const { default: TypertRemoteService } = await import(urls.apiGatewayHost)
const { default: GoalService } = await import(urls.goal)
const { TYPERT } = await import(urls.goalTypert)
const { default: TypertRegistry } = await import(urls.registryHost)
@@ -70,7 +70,7 @@ describe.skipIf(!requiredArtifacts)('Goal Remote built LIB chain', () => {
await host.plugin({ inject: connectionHost.inject, apply: connectionHost.apply })
await host.plugin(TypertRegistry)
await host.plugin(AgentRegistry)
await host.plugin(TypertGatewayService)
await host.plugin(TypertRemoteService)
await host.plugin(GoalService)
host.typert.register(TYPERT)

View File

@@ -25,7 +25,7 @@
},
{
"path": "../../self-modification/cordis-host-runner"
"path": "../../extensions/cordis-host-runner"
},
{
"path": "../../goal/goal"

View File

@@ -38,7 +38,7 @@
"path": "../../session/session-persistence"
},
{
"path": "../../self-modification/cordis-host-runner"
"path": "../../extensions/cordis-host-runner"
},
{
"path": "../../settings/settings"

View File

@@ -6,7 +6,7 @@
* carry extra machinery: `slots`, where the register proxy assigns the
* shadowing priority and ledgers the registration — invoking the service with
* the traced receiver so the effect lands on the CALLING plugin's fiber
* (SlotsService.register must stay a prototype method for exactly that
* (SlotRegistry.register must stay a prototype method for exactly that
* reason) — and `theme`, whose override source is pinned to the package id.
*
* This is API discipline, not a security boundary: a dynamic package's code is
@@ -15,8 +15,8 @@
import { Context } from '@deepseek-ai/cordis'
import type { DynamicCordisPackage } from '@deepseek-ai/dsh-api-remotes/client'
import type { SlotsService } from '@deepseek-ai/dsh-client-runtime/client'
import type { ThemeService } from '@deepseek-ai/dsh-client-ui-theme/client'
import type { SlotRegistry } from '@deepseek-ai/dsh-client-runtime/client'
import type { ThemeRuntime } from '@deepseek-ai/dsh-client-ui-theme/client'
/** Facade verbs beyond declared services (host CTX_VERBS twin). */
const CTX_VERBS = new Set([
@@ -93,7 +93,7 @@ interface ErasedSlotOptions {
* The slots seat: automatic shadowing priority and ledger recording around the
* traced service's own register.
*/
function guardedSlots(slots: SlotsService, env: DynamicCordisGuardEnv): unknown {
function guardedSlots(slots: SlotRegistry, env: DynamicCordisGuardEnv): unknown {
return new Proxy(slots, {
get(target, prop) {
const value = Reflect.get(target, prop, target) as unknown
@@ -145,7 +145,7 @@ function guardedSlots(slots: SlotsService, env: DynamicCordisGuardEnv): unknown
* keep the returned handle (slots parity — register hangs its own cleanup).
* Everything else forwards through the generic guard.
*/
function guardedTheme(theme: ThemeService, env: DynamicCordisGuardEnv, ctx: Context): unknown {
function guardedTheme(theme: ThemeRuntime, env: DynamicCordisGuardEnv, ctx: Context): unknown {
return new Proxy(theme, {
get(target, prop) {
if (prop !== 'overrideTokens') {
@@ -205,8 +205,8 @@ export function dynamicCordisContext(ctx: Context, env: DynamicCordisGuardEnv):
if (requireDeclaration && !declared.has(name)) return denyRead(name)
const service = denyContext(ctx.get(name), name, env)
if (service === null || (typeof service !== 'object' && typeof service !== 'function')) return service
if (name === 'slots') return guardedSlots(service as SlotsService, env)
if (name === 'theme') return guardedTheme(service as ThemeService, env, ctx)
if (name === 'slots') return guardedSlots(service as SlotRegistry, env)
if (name === 'theme') return guardedTheme(service as ThemeRuntime, env, ctx)
return guardedService(service, name, env)
}
return new Proxy({}, {

View File

@@ -16,7 +16,7 @@ import type {
DynamicCordisInventoryRow,
} from '@deepseek-ai/dsh-api-remotes/client'
import type { ClientModuleSystem } from '@deepseek-ai/dsh-client-modules/client'
import type { SlotsService } from '@deepseek-ai/dsh-client-runtime/client'
import type { SlotRegistry } from '@deepseek-ai/dsh-client-runtime/client'
// The Client Remote assembly is the one place the two planes meet: it mounts the
// `dynamicCordisRunner` namespace and re-exports its payload vocabulary, so this
// package names what it sends without importing a Host package.
@@ -206,7 +206,7 @@ export function apply(ctx: Context): void {
ctx,
loader: ctx.loader,
modules: ctx.get('modules') as ClientModuleSystem,
slots: ctx.get('slots') as SlotsService,
slots: ctx.get('slots') as SlotRegistry,
invoke: async (pluginId, pluginRunId, method, args) => {
// Model-authored arguments reach this boundary untyped; the namespace's
// generated codec is what validates them as JSON, and its rejection is a

View File

@@ -2,7 +2,7 @@
import type { Context } from '@deepseek-ai/cordis'
import type { JsonValue } from '@deepseek-ai/dsh-api-remotes/client'
import type { SlotsService } from '@deepseek-ai/dsh-client-runtime/client'
import type { SlotRegistry } from '@deepseek-ai/dsh-client-runtime/client'
import type {} from '@deepseek-ai/dsh-client-ui-theme/client'
import { queryEventApi, queryServiceApi } from './api-catalog.ts'
import type { ClientCordisInspectProviderRegistration } from './inspect-registry.ts'
@@ -169,7 +169,7 @@ function readExact(input: JsonValue | undefined, field: string): string | undefi
}
/* jscpd:ignore-end */
type LiveSlotNode = ReturnType<SlotsService['snapshot']>[number]
type LiveSlotNode = ReturnType<SlotRegistry['snapshot']>[number]
const SLOT_CATALOG = new Map(CLIENT_SLOT_API.map(entry => [entry.key, entry]))

View File

@@ -21,7 +21,7 @@ import type {
} from '@deepseek-ai/dsh-api-remotes/client'
import type { SessionId } from '@deepseek-ai/dsh-client-connection/client'
import type { ClientModuleSystem } from '@deepseek-ai/dsh-client-modules/client'
import type { SlotsService } from '@deepseek-ai/dsh-client-runtime/client'
import type { SlotRegistry } from '@deepseek-ai/dsh-client-runtime/client'
import { DynamicCordisStyles, evaluateClientHalf, DYNAMIC_CLIENT_REDIRECTS } from './evaluator.ts'
import type { DynamicCordisEvaluatedPlugin } from './evaluator.ts'
import { dynamicCordisContext } from './guard.ts'
@@ -121,7 +121,7 @@ export interface DynamicCordisRunnerEnv {
/** Module table, for factory invalidation before every (re-)registration. */
modules: ClientModuleSystem
/** Slot registry, for the entry-crash supervision seam. */
slots: SlotsService
slots: SlotRegistry
/** Route one `host.call` to the package's host half through the Remote namespace. */
invoke(
pluginId: CordisDynamicPluginId,

View File

@@ -16,7 +16,7 @@ import type {
CordisDynamicPluginRunId,
DynamicCordisPackage,
} from '@deepseek-ai/dsh-api-remotes/client'
import { SlotsService } from '@deepseek-ai/dsh-client-runtime/client'
import { SlotRegistry } from '@deepseek-ai/dsh-client-runtime/client'
import { dynamicCordisContext } from '../src/client/guard.ts'
import type { DynamicCordisSlotLedgerRow } from '../src/client/guard.ts'
@@ -37,7 +37,7 @@ type Facade = Record<string, unknown> & { get(name: string): unknown }
interface Bench {
ctx: Context
slots: SlotsService
slots: SlotRegistry
facade: Facade
ledger: DynamicCordisSlotLedgerRow[]
/** Components the facade claimed for the package, in registration order. */
@@ -53,7 +53,7 @@ interface Bench {
*/
async function boot(inject: string[], extras: Record<string, unknown> = {}): Promise<Bench> {
const ctx = new Context()
await ctx.plugin(SlotsService)
await ctx.plugin(SlotRegistry)
const themeLayerDispose = vi.fn()
const overrideTokens = vi.fn(() => themeLayerDispose)
ctx.reflect.provide('theme', {

View File

@@ -18,7 +18,7 @@ import type { SessionId } from '@deepseek-ai/dsh-client-connection/client'
import type { DynamicCordisInvokeResult } from '@deepseek-ai/dsh-api-remotes/client'
// Type-only: resolves `ctx.remote` and with it the `$on`/`$dispatch` surface.
import type {} from '@deepseek-ai/dsh-api-gateway/client'
import { SlotsService } from '@deepseek-ai/dsh-client-runtime/client'
import { SlotRegistry } from '@deepseek-ai/dsh-client-runtime/client'
import * as NodeHalf from '../src/index.ts'
import * as Invariant from '../src/invariant.ts'
import * as ClientHalf from '../src/client/index.ts'
@@ -80,7 +80,7 @@ interface Bench {
/** Mount the browser half over a module table and a loader standing on real fibers. */
async function boot(): Promise<Bench> {
const ctx = new Context()
await ctx.plugin(SlotsService)
await ctx.plugin(SlotRegistry)
const factories = new Map<string, () => unknown>()
const fibers = new Map<string, { fiber: unknown }>()
let next = 0

View File

@@ -19,7 +19,7 @@ import type {
} from '@deepseek-ai/dsh-api-remotes/client'
import type { SessionId } from '@deepseek-ai/dsh-client-connection/client'
import type { ClientModuleSystem } from '@deepseek-ai/dsh-client-modules/client'
import { SlotsService } from '@deepseek-ai/dsh-client-runtime/client'
import { SlotRegistry } from '@deepseek-ai/dsh-client-runtime/client'
import { DYNAMIC_CLIENT_REDIRECTS } from '../src/client/evaluator.ts'
import { DynamicCordisPackageRunner } from '../src/client/runtime.ts'
import type { DynamicCordisClientHalf, DynamicCordisRenderFailure } from '../src/client/runtime.ts'
@@ -48,7 +48,7 @@ function half(overrides: Partial<DynamicCordisClientHalf> = {}): DynamicCordisCl
interface Bench {
ctx: Context
slots: SlotsService
slots: SlotRegistry
runner: DynamicCordisPackageRunner
invalidated: string[]
removed: string[]
@@ -83,7 +83,7 @@ function seated<T>(fiber: T): T {
async function boot(): Promise<Bench> {
const ctx = new Context()
await ctx.plugin(SlotsService)
await ctx.plugin(SlotRegistry)
const invalidated: string[] = []
const removed: string[] = []
const created: string[] = []
@@ -128,7 +128,7 @@ async function boot(): Promise<Bench> {
listener = fn
return () => { listener = undefined }
},
} as unknown as SlotsService,
} as unknown as SlotRegistry,
invoke,
reportGuardFailure: () => {},
reportRenderFailure: (agentId, pluginId, pluginRunId, failure) => {

View File

@@ -33,7 +33,7 @@
"path": "../../client/ui-theme"
},
{
"path": "../../support/invariants"
"path": "../../runtime-diagnostics/invariants"
}
]
}

View File

@@ -61,7 +61,7 @@
"@deepseek-ai/dsh-scope": "workspace:^",
"@deepseek-ai/dsh-session": "workspace:^",
"@deepseek-ai/dsh-tools": "workspace:^",
"@deepseek-ai/dsh-type-meta": "workspace:^"
"@deepseek-ai/dsh-typert-protocol": "workspace:^"
},
"devDependencies": {
"@deepseek-ai/cordis": "workspace:^",
@@ -73,6 +73,6 @@
"@deepseek-ai/dsh-scope": "workspace:^",
"@deepseek-ai/dsh-session": "workspace:^",
"@deepseek-ai/dsh-tools": "workspace:^",
"@deepseek-ai/dsh-type-meta": "workspace:^"
"@deepseek-ai/dsh-typert-protocol": "workspace:^"
}
}

View File

@@ -10,7 +10,7 @@ import z from '@deepseek-ai/schemastery'
import type { Agent } from '@deepseek-ai/dsh-agent'
import { createUserMessage } from '@deepseek-ai/dsh-llm'
import type { JsonValue } from '@deepseek-ai/dsh-session/types'
import { GatewayService, Remote } from '@deepseek-ai/dsh-type-meta'
import { TypertRemoteService, Remote } from '@deepseek-ai/dsh-typert-protocol'
import { isPlugin, normalizeHandler } from './guard.ts'
import { CordisInspectRegistryService } from './inspect-registry.ts'
import { missingServices, startHostHalf } from './lifecycle.ts'
@@ -121,7 +121,7 @@ interface ActivationPlan {
}
/** Dynamic Plugin registry and Host-half lifecycle. */
export class DynamicCordisRunnerService extends GatewayService {
export class DynamicCordisRunnerService extends TypertRemoteService {
static inject = ['tools']
static Config: z<Config> = z.object({

View File

@@ -39,10 +39,10 @@
"path": "../../llm/llm"
},
{
"path": "../../support/invariants"
"path": "../../runtime-diagnostics/invariants"
},
{
"path": "../../typert/type-meta"
"path": "../../typert/protocol"
}
]
}

File diff suppressed because it is too large Load Diff

View File

@@ -39,7 +39,7 @@
"path": "../cordis-host-runner"
},
{
"path": "../../support/invariants"
"path": "../../runtime-diagnostics/invariants"
}
]
}

View File

@@ -37,7 +37,7 @@
"@deepseek-ai/dsh-cordis-client-runner",
"@deepseek-ai/dsh-api-remotes",
"@deepseek-ai/dsh-client-locale",
"@deepseek-ai/dsh-client-ui-slash",
"@deepseek-ai/dsh-client-ui-input-trigger",
"@deepseek-ai/dsh-client-ui-tool",
"@deepseek-ai/dsh-client-ui-sidebar"
],
@@ -57,7 +57,7 @@
"@deepseek-ai/dsh-client-runtime": "workspace:^",
"@deepseek-ai/dsh-client-ui-primitives": "workspace:^",
"@deepseek-ai/dsh-client-ui-sidebar": "workspace:^",
"@deepseek-ai/dsh-client-ui-slash": "workspace:^",
"@deepseek-ai/dsh-client-ui-input-trigger": "workspace:^",
"@deepseek-ai/dsh-client-ui-slots": "workspace:^",
"@deepseek-ai/dsh-client-ui-tool": "workspace:^",
"@deepseek-ai/dsh-invariants": "workspace:^",
@@ -72,7 +72,7 @@
"@deepseek-ai/dsh-client-runtime": "workspace:^",
"@deepseek-ai/dsh-client-ui-primitives": "workspace:^",
"@deepseek-ai/dsh-client-ui-sidebar": "workspace:^",
"@deepseek-ai/dsh-client-ui-slash": "workspace:^",
"@deepseek-ai/dsh-client-ui-input-trigger": "workspace:^",
"@deepseek-ai/dsh-client-ui-slots": "workspace:^",
"@deepseek-ai/dsh-client-ui-tool": "workspace:^",
"@deepseek-ai/dsh-invariants": "workspace:^",

View File

@@ -5,7 +5,7 @@ import type {} from '@deepseek-ai/dsh-client-ui-tool/client'
import type {} from '@deepseek-ai/dsh-client-locale/client'
import type {} from '@deepseek-ai/dsh-client-ui-sidebar/client'
import type {} from '@deepseek-ai/dsh-api-remotes/client'
import type { SlashServiceContract, SlashSource } from '@deepseek-ai/dsh-client-ui-slash/client'
import type { InputTriggerService, InputTriggerSource } from '@deepseek-ai/dsh-client-ui-input-trigger/client'
import type {} from './events.ts'
import { CordisDefineRow } from './CordisDefineRow.tsx'
import { CordisRunRow } from './CordisRunRow.tsx'
@@ -133,7 +133,7 @@ export function apply(ctx: ClientContext): void {
const rowsOf = (sessionId: SessionId, query: string) => inventory.getSnapshot().rows
.filter(row => row.agentId === sessionId && String(row.pluginId).includes(query))
const source: SlashSource = {
const source: InputTriggerSource = {
trigger: '@',
name: 'cordis',
order: 1,
@@ -153,7 +153,7 @@ export function apply(ctx: ClientContext): void {
subscribeLexicon(_session, listener) { return inventory.subscribe(listener) },
onPick({ candidate }) { return { text: `@${candidate.name} ` } },
}
const slash = ctx.get('slash') as SlashServiceContract
const slash = ctx.get('slash') as InputTriggerService
ctx.effect(() => slash.registerSource(source), 'ui-cordis: @pluginId source')
inventory.refresh()

View File

@@ -27,7 +27,7 @@
"path": "../../client/ui-sidebar"
},
{
"path": "../../client/ui-slash"
"path": "../../client/ui-input-trigger"
},
{
"path": "../../client/ui-primitives"
@@ -39,7 +39,7 @@
"path": "../../client/ui-tool"
},
{
"path": "../../support/invariants"
"path": "../../runtime-diagnostics/invariants"
}
]
}

2715
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -63,10 +63,10 @@ export const SERVICE_PAGE: Record<string, string> = {
codeRuntime: 'code-runtime.md',
commands: 'commands.md',
compaction: 'compaction.md',
cordisInspect: 'self-modification.md',
cordisInspect: 'extensions.md',
credentials: 'credentials.md',
directoryPicker: 'workspace.md',
dynamicCordisRunner: 'self-modification.md',
dynamicCordisRunner: 'extensions.md',
e2b: 'subprocess.md',
fs: 'filesystem.md',
goals: 'goal.md',
@@ -134,8 +134,7 @@ export const SERVICE_WALK_EXEMPTIONS: Record<string, string> = {
launcherSessionQueryPath: 'not a service: launcher-provided boot-context value (string | undefined) — packages/session-query/session-query-sqlite/README.md owns this launcher contract',
dshHomePath: 'not a service: boot-provided root accessor function (typeof dshHomePath | undefined) for Loader !!js config expressions — packages/boot/app-boot/README.md owns the boot contract',
launchEnvironment: 'not a service: launcher-provided root accessor value (LaunchEnvironmentSnapshot | undefined) — packages/util/launch-environment/README.md owns this launcher contract',
lsp: 'interface-typed (LspService); implementing class Lsp is not the declared type name — packages/lsp/lsp/README.md owns the API',
apiProxy: 'interface-typed (ApiProxy) with the class in api-proxy.ts, not index.ts — packages/host/apiproxy/README.md owns the API',
connection: 'interface-typed (HostConnectionHandle); implementing class HostConnectionService is declared in rpc-host.ts — packages/client/connection/README.md owns the API',
appShell: 'client-side interface-typed browser service — packages/client/web/README.md owns the API',
settingsScope: 'client-side settings-namespace transport service — packages/client/ui-settings/README.md owns the API',
chatFileMentions: 'client-side slot-contract accessor (ChatFileMentions) — packages/client/ui-conversation/README.md owns the API',
@@ -169,7 +168,7 @@ export const EVENT_SCOPE_PAGE: Record<string, string> = {
'agent-preset': 'core.md',
'approval': 'approval.md',
'commands': 'commands.md',
'cordis': 'self-modification.md',
'cordis': 'extensions.md',
'credentials': 'credentials.md',
'domain': 'storage.md',
'fs': 'filesystem.md',