wsz987/dsh-channels--packages-channel-core2

@wsz987/channel-core

Stable cross-channel contract and Cordis ChannelService for DeepSeek Harness Channels

包名
@wsz987/channel-core
版本
0.3.0
许可证
MIT
最近更新
2026年8月16日

安装

此插件尚未提供可验证的 bundle,或兼容性检查未通过。请先阅读仓库说明。 阅读完整 README ↗

@wsz987/channel-core

Stable cross-channel contract and Cordis ChannelService for DeepSeek Harness Channels.

channel-core is the foundation of the dsh-channels monorepo. It defines the Channel Contract that every adapter implements, and the shared runtime service mounted at ctx.channels. It never imports Harness Agent APIs and never depends on a concrete messaging platform.

Install

pnpm add @wsz987/channel-core

As a Cordis plugin:

- id: channels-service
  name: '@wsz987/channel-core/plugin'

What's inside

ExportPurpose
ChannelAdapter / defineChannelAdapterThe adapter contract and the third-party authoring helper
ChannelService (ctx.channels)Adapter registry, typed event bus, shared secrets/storage resources
ChannelCapabilitiesCapability negotiation (text, image, file, streaming, …)
ChannelTarget / OutboundMessage / SendResult / ReplyHandleStructured messaging types
ChannelEvent / AuthChallenge / ChannelHealthEvent, auth and health surfaces
ChannelError / isChannelErrorStable machine-readable error hierarchy
mountChannelAdapterTransactional mount lifecycle (register → start → stop → unregister)
ChannelRuntimeResourcesDurable secrets and storage shared by all mounted adapters
media helpersSecureRemoteMediaFetcher, RemotePolicy, bounded response readers

Quick start

import { defineChannelAdapter } from '@wsz987/channel-core';

export default defineChannelAdapter({
  id: 'my-channel',
  capabilities: {
    text: true,
    image: false,
    file: false,
    audio: false,
    video: false,
    markdown: false,
    cards: false,
    reactions: false,
    threads: false,
    streaming: 'buffered', // 'native' | 'edit' | 'buffered'
  },
  async start(ctx) {
    // connect the platform, then emit messages with ctx.emit('message', ...)
  },
  async stop() {
    // idempotent cleanup
  },
  async send(target, message) {
    // send one OutboundMessage
  },
});

In production the plugin wires file-backed resources automatically; in tests the service falls back to in-memory stores:

import { Context } from '@deepseek-ai/cordis';
import { ChannelService } from '@wsz987/channel-core';

const ctx = new Context();
const channels = new ChannelService(ctx);

channels.register(adapter);
channels.on((event) => console.log(event.type));

Data directory

The plugin resolves the durable data directory in this order:

  1. DSH_CHANNELS_DATA_DIR (explicit override)
  2. /dsh-channels ($DSH_HOME, else ~/.dsh)

Development

pnpm --filter @wsz987/channel-core build
pnpm --filter @wsz987/channel-core typecheck
pnpm --filter @wsz987/channel-core test

Related

License

MIT