huangjuhua-aigc/dsh-a2a0

dsh-a2a-server

Inbound A2A (Agent2Agent) protocol server for DeepSeek Harness: publish an Agent Card and let any A2A-compliant peer submit tasks to a harness agent

包名
dsh-a2a-server
版本
0.1.0
许可证
MIT
最近更新
2026年8月17日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:huangjuhua-aigc/dsh-a2a

Configuration

- id: a2a-server
  name: dsh-a2a-server
  config:
    basePath: /a2a
    publicUrl: https://agents.example.com/a2a   # advertised on the card
    protocolVersion: 0.3.0
    provider: deepseek-official
    model: deepseek-v4-flash

    card:
      name: dsh-harness
      description: Reads code, runs commands, reports findings.
      public: true
      skills:
        - id: general
          name: general
          description: General-purpose task execution.
          tags: [coding, research]
      provider:
        organization: Example Inc.
        url: https://example.com

    peers:
      alice: { tokenEnv: A2A_PEER_ALICE }
      bob:   { tokenEnv: A2A_PEER_BOB }
    trustedPeers: [alice]
    rateLimitPerMinute: 60
    maxContextTurns: 5

    sendMode: block
    blockTimeoutMs: 60000
    contextIdleTtlMs: 1800000
    maxResidentContexts: 64

    isolation:
      workspaceMode: per-peer
      workspaceRoot: /srv/dsh/a2a
      peerWorkspaces:
        alice: /srv/project

    push:
      enabled: false
KeyDefaultMeaning
basePath/a2aJSON-RPC route
publicUrlderived from HostRoutable URL published on the card
protocolVersion0.3.0Version advertised on the card
provider · modelModel route for every agent this server creates
card.publictrueServe the card without a credential
card.skills[]Declared skills; falls back to one general entry
peers{}Identity → credential reference name
trustedPeersall authenticatedAllow-list of identities that may run tasks
rateLimitPerMinute60Sliding window per identity
maxContextTurns5Messages accepted per context before rejected
sendModeblockDefault when the client states no preference
blockTimeoutMs60000After which a blocking request is declined
contextIdleTtlMs1800000Idle time before a context's agent is released
maxResidentContexts64Ceiling on resident contexts
isolation.workspaceModeper-peerper-peer or shared
isolation.workspaceRootRequired; parent directory or shared cwd
isolation.peerWorkspaces{}Per-identity working-directory override
push.enabledfalseReserved; see Boundaries

Configuration is refused at load when isolation.workspaceRoot is absent, a peer name is not [A-Za-z0-9][A-Za-z0-9_-]*, a tokenEnv is not a POSIX identifier, trustedPeers or peerWorkspaces names an undeclared peer, or basePath does not start with /.

Credentials

Configuration carries credential references, never values:

peers:
  alice: { tokenEnv: A2A_PEER_ALICE }