# == @deepseek-ai/dsh-base
- id: timer
  name: '@deepseek-ai/cordis-plugin-timer'
- id: hmr
  name: '@deepseek-ai/cordis-plugin-hmr'
  disabled: true
  config:
    root:
      - .
- id: llm
  name: '@deepseek-ai/dsh-llm'
- id: deepseek-llm-api-extensions
  name: '@deepseek-ai/dsh-deepseek-llm-api-extensions'
- id: session
  name: '@deepseek-ai/dsh-session'
- id: session-log-deepseek
  name: '@deepseek-ai/dsh-session-log-deepseek'
- id: typert
  name: '@deepseek-ai/dsh-typert-registry'
- id: typert-loader
  name: '@deepseek-ai/dsh-typert-loader'
- id: typert-gateway
  name: '@deepseek-ai/dsh-api-gateway'
- id: session-title
  name: '@deepseek-ai/dsh-session-title'
  config:
    fallbackMaxWords: 5
    fallbackMaxBytes: 40
    maxTitleBytes: 80
- id: session-title-llm
  name: '@deepseek-ai/dsh-session-title-first-prompt-llm'
  config:
    targetWords: 5
    targetCjkCharacters: 10
    maxInputBytes: 4096
    maxOutputTokens: 64
    timeoutMs: 60000
- id: user-questions
  name: '@deepseek-ai/dsh-user-questions'
- id: agent
  name: '@deepseek-ai/dsh-agent'
- id: plugin-package-inventory-deepseek
  name: '@deepseek-ai/dsh-plugin-package-inventory-deepseek'
- id: agent-default-model
  name: '@deepseek-ai/dsh-agent-default-model'
  config:
    provider: deepseek-official
    model: deepseek-v4-flash
- id: jobs
  name: '@deepseek-ai/dsh-jobs-local'
- id: llm-retry
  name: '@deepseek-ai/dsh-llm-retry'
- id: settings
  name: '@deepseek-ai/dsh-settings-file'
- id: credentials
  name: '@deepseek-ai/dsh-credentials-local'
- id: llm-pi-ai
  name: '@deepseek-ai/dsh-llm-pi-ai'
- id: session-persistence-jsonl
  name: '@deepseek-ai/dsh-session-persistence-jsonl'
  config:
    root: !!js dshHomePath('sessions')
- id: attachment-local
  name: '@deepseek-ai/dsh-attachment-local'
- id: session-query-sqlite
  name: '@deepseek-ai/dsh-session-query-sqlite'
  config:
    path: ':memory:'
    openAt: never
- id: session-projection
  name: '@deepseek-ai/dsh-session-projection'
- id: storage
  name: '@deepseek-ai/dsh-storage'
- id: storage-json
  name: '@deepseek-ai/dsh-storage-json'
  config:
    root: !!js dshHomePath('storages')
- id: storage-domain
  name: '@deepseek-ai/dsh-storage-domain'
  config:
    backend: json
- id: session-projection-cache
  name: '@deepseek-ai/dsh-session-projection-cache'
  config:
    writeEveryEvents: 200
    writeIntervalMs: 5000
- id: session-telemetry-otel
  name: '@deepseek-ai/dsh-session-telemetry-otel'
  config:
    mode: !!js process.env.DSH_TELEMETRY_MODE || 'FEEDBACK_ONLY'
    shutdownTimeoutMillis: 3000
    exporter:
      url: !!js >-
        process.env.DSH_TELEMETRY_OTLP_URL ??
        'https://harness-telemetry.deepseeksvc.com/v1/logs'
      compression: gzip
      timeoutMillis: 1000
    processor:
      scheduledDelayMillis: 10000
      maxQueueSize: 2048
      maxExportBatchSize: 2048
      exportTimeoutMillis: 1500
- id: subprocess
  name: '@deepseek-ai/dsh-subprocess-local'
- id: sandbox
  name: '@deepseek-ai/dsh-sandbox-local'
- id: sandbox-policy
  name: '@deepseek-ai/dsh-sandbox-policy'
  config:
    mode: !!js process.env.DSH_PERMISSION_MODE ?? 'workspace-write'
    workspaceRoot: !!js process.cwd()
- id: bash-sandbox
  name: '@deepseek-ai/dsh-bash-sandbox'
  disabled: !!js process.platform === 'win32'
  config:
    timeoutMs: 60000
- id: pwsh-sandbox
  name: '@deepseek-ai/dsh-pwsh-sandbox'
  disabled: !!js process.platform !== 'win32'
- id: approval
  name: '@deepseek-ai/dsh-user-approval'
  config:
    policy: !!js >-
      (process.env.DSH_PERMISSION_MODE ?? 'workspace-write') ===
      'danger-full-access' ? 'never' : 'ask'
- id: permission
  name: '@deepseek-ai/dsh-permission-presets'
  config:
    presets:
      read-only:
        sandbox: read-only
        approval: ask
      workspace-write:
        sandbox: workspace-write
        approval: ask
      danger-full-access:
        sandbox: danger-full-access
        approval: never
- id: shell-env
  name: '@deepseek-ai/dsh-shell-env'
# == @deepseek-ai/dsh-base, patched by @deepseek-ai/dsh-web-app
- id: tool-bash
  name: '@deepseek-ai/dsh-tool-bash'
  disabled: true
- id: tool-pwsh
  name: '@deepseek-ai/dsh-tool-pwsh'
  disabled: true
- id: tool-jobs
  name: '@deepseek-ai/dsh-tool-jobs'
  disabled: true
# == @deepseek-ai/dsh-base
- id: fs-observation-policy
  name: '@deepseek-ai/dsh-fs-observation-policy'
# == @deepseek-ai/dsh-base, patched by @deepseek-ai/dsh-web-app
- id: tool-fs
  name: '@deepseek-ai/dsh-tool-fs'
  disabled: true
- id: tool-fs-search
  name: '@deepseek-ai/dsh-tool-fs-search'
  config:
    sampleOverCapGlobResults: false
  disabled: true
- id: agent-instructions
  name: '@deepseek-ai/dsh-agent-instructions'
  config:
    maxBytes: 65536
  disabled: true
# == @deepseek-ai/dsh-base
- id: skill
  name: '@deepseek-ai/dsh-skill'
# == @deepseek-ai/dsh-base, patched by @deepseek-ai/dsh-web-app
- id: skill-filesystem
  name: '@deepseek-ai/dsh-skill-filesystem'
  disabled: true
# == @deepseek-ai/dsh-base
- id: skill-badge
  name: '@deepseek-ai/dsh-skill-badge'
  disabled: true
# == @deepseek-ai/dsh-base, patched by @deepseek-ai/dsh-web-app
- id: tool-skill
  name: '@deepseek-ai/dsh-tool-skill'
  disabled: true
# == @deepseek-ai/dsh-base
- id: commands
  name: '@deepseek-ai/dsh-commands'
- id: command-feedback
  name: '@deepseek-ai/dsh-command-feedback'
- id: goal
  name: '@deepseek-ai/dsh-goal'
- id: goal-round-driver
  name: '@deepseek-ai/dsh-goal-round-driver'
# == @deepseek-ai/dsh-base, patched by @deepseek-ai/dsh-web-app
- id: command-goal
  name: '@deepseek-ai/dsh-command-goal'
  disabled: true
- id: plan-mode
  name: '@deepseek-ai/dsh-plan-mode'
  config:
    section: >
      You are in plan mode. Stay in plan mode until exit_plan_mode succeeds or
      the user switches the session mode. Imperative language to implement
      changes means plan the implementation, not execute it. A user's
      conversational agreement — including an answer confirming something you
      asked — approves nothing and does not end plan mode; fold the confirmed
      decision into the plan and submit it through exit_plan_mode.


      Explore first. Use non-mutating reads, searches, static analysis, and
      checks to ground the plan in the actual repository. Do not edit or write
      files, change configuration, run formatters or code generation that
      rewrites tracked files, commit, or otherwise carry out the plan. Prefer
      existing functions and patterns over new machinery.


      The tool catalog stays the same across modes for request-cache stability.
      These plan-mode rules override any later tool description or guidance that
      suggests using mutation tools; those tools remain listed only to keep the
      request shape stable. Do not use todo_write to track this planning phase:
      it tracks implementation after an approved plan, while the plan itself
      belongs in exit_plan_mode.


      Resolve discoverable facts by inspection. Use ask_user_question only for
      user-owned choices or material ambiguity that inspection cannot answer. Do
      not ask the user where code lives or how current behavior works when you
      can find out.


      Make the plan decision-complete: state the goal and success criteria;
      group implementation changes by subsystem; identify public API, schema,
      and data-flow changes; cover edge cases, failure modes, tests, acceptance
      criteria, and explicit assumptions. Keep it concise enough to review but
      detailed enough that another engineer can implement it without making
      design decisions.


      When ready, call exit_plan_mode with the complete plan markdown, starting
      with a # title. Make exit_plan_mode the only and final tool call in that
      assistant response: it presents the plan for approval, and implementation
      begins only in a later step after approval. Do not paste the final plan as
      a plain reply or ask "should I proceed?" through prose or
      ask_user_question. If review rejects it, incorporate the feedback and
      present again. If the review channel is unavailable or aborted, stay in
      plan mode and ask the user to switch modes manually; do not proceed with
      implementation.
  disabled: true
# == @deepseek-ai/dsh-base
- id: token-meter
  name: '@deepseek-ai/dsh-token-meter'
# == @deepseek-ai/dsh-base, patched by @deepseek-ai/dsh-web-app
- id: compaction-basic
  name: '@deepseek-ai/dsh-compaction-basic'
  disabled: true
- id: command-compact
  name: '@deepseek-ai/dsh-command-compact'
  disabled: true
# == @deepseek-ai/dsh-base
- id: subagent
  name: '@deepseek-ai/dsh-subagent'
- id: subagent-spawn-in-process
  name: '@deepseek-ai/dsh-subagent-spawn-in-process'
  config:
    providerName: spawn
- id: subagent-fork-in-process
  name: '@deepseek-ai/dsh-subagent-fork-in-process'
  config:
    providerName: fork
# == @deepseek-ai/dsh-base, patched by @deepseek-ai/dsh-web-app
- id: tool-subagent-control
  name: '@deepseek-ai/dsh-tool-subagent-control'
  disabled: true
- id: tool-subagent-list-agents
  name: '@deepseek-ai/dsh-tool-subagent-control/list-agents'
  disabled: true
- id: tool-subagent
  name: '@deepseek-ai/dsh-tool-subagent'
  config:
    provider: spawn
    toolName: subagent
    backgroundMode: continuable
  disabled: true
- id: tool-subagent-fork
  name: '@deepseek-ai/dsh-tool-subagent'
  config:
    provider: fork
    toolName: subagent_fork
    backgroundMode: one-shot
  disabled: true
- id: workflow-worker-thread
  name: '@deepseek-ai/dsh-workflow-worker-thread'
  config:
    provider: spawn
  disabled: true
- id: tool-workflow
  name: '@deepseek-ai/dsh-tool-workflow'
  disabled: true
# == @deepseek-ai/dsh-base
- id: timeout-policy
  name: '@deepseek-ai/dsh-tool-call-timeout-policy'
- id: spill-local
  name: '@deepseek-ai/dsh-spill-local'
- id: spill-policy
  name: '@deepseek-ai/dsh-spill-policy'
  config:
    maxInlineBytes: 50000
- id: session-checkpoint-policy
  name: '@deepseek-ai/dsh-session-checkpoint-policy'
# == @deepseek-ai/dsh-base, patched by @deepseek-ai/dsh-web-app
- id: tool-result-pruner
  name: '@deepseek-ai/dsh-compaction-tool-result-pruner'
  config:
    thresholdChars: 8192
    headChars: 4096
    tailChars: 1024
  disabled: true
- id: tool-todo
  name: '@deepseek-ai/dsh-tool-todo'
  config:
    allowParallelInProgress: true
  disabled: true
- id: tool-goal
  name: '@deepseek-ai/dsh-tool-goal'
  disabled: true
- id: tool-ralph
  name: '@deepseek-ai/dsh-tool-ralph'
  config:
    subagentProvider: spawn
    maxRounds: 64
  disabled: true
- id: tool-str-replace-editor
  name: '@deepseek-ai/dsh-tool-str-replace-editor'
  config:
    maxOutputChars: 16000
  disabled: true
# == @deepseek-ai/dsh-base
- id: repeat-tool-reminder
  name: '@deepseek-ai/dsh-repeat-tool-reminder'
  config:
    thresholds:
      - 3
      - 5
      - 8
    argumentsPreviewChars: 500
- id: web
  name: '@deepseek-ai/dsh-web'
  config:
    searchProvider: deepseek-official
    fetchProvider: http
- id: web-search-deepseek
  name: '@deepseek-ai/dsh-web-search-deepseek'
  config:
    apiKeyEnv: DEEPSEEK_API_KEY
- id: web-fetch-http
  name: '@deepseek-ai/dsh-web-fetch-http'
# == @deepseek-ai/dsh-base, patched by @deepseek-ai/dsh-web-app
- id: tool-web
  name: '@deepseek-ai/dsh-tool-web'
  config:
    fetch: true
    searchTimeoutMs: 60000
  disabled: true
- id: tools
  name: '@deepseek-ai/dsh-tools'
  config:
    mode: !!js process.env.DSH_TOOLS_MODE
- id: system-prompt
  name: '@deepseek-ai/dsh-system-prompt'
  config:
    persona: >-
      You are a coding agent powered by the {{model}} model. Your working
      directory is {{cwd}}.
# == @deepseek-ai/dsh-base
- id: agent-loop
  name: '@deepseek-ai/dsh-agent-loop'
  config:
    agents: []
- id: fs-sandbox
  name: '@deepseek-ai/dsh-fs-sandbox'
- id: llm-deepseek
  name: '@deepseek-ai/dsh-llm-deepseek'
# == @deepseek-ai/dsh-web-app
- id: subagent-model-selection-settings
  name: '@deepseek-ai/dsh-tool-subagent/model-selection-settings'
- id: code-runtime
  name: '@deepseek-ai/dsh-code-runtime-worker-thread'
- id: message-feedback
  name: '@deepseek-ai/dsh-message-feedback'
  config:
    maxNoteBytes: 8192
- id: session-log-download
  name: '@deepseek-ai/dsh-session-log-export'
- id: workspace
  name: '@deepseek-ai/dsh-workspace'
- id: session-reference
  name: '@deepseek-ai/dsh-session-reference'
- id: file-reference-local
  name: '@deepseek-ai/dsh-file-reference-local'
- id: session-stats
  name: '@deepseek-ai/dsh-session-stats'
- id: session-turn-outline
  name: '@deepseek-ai/dsh-session-turn-outline'
- id: directory-picker
  name: '@deepseek-ai/dsh-host-directory-picker-auto'
- id: plugin-inventory
  name: '@deepseek-ai/dsh-host-plugin-inventory'
- id: session-controller
  name: '@deepseek-ai/dsh-api-session-controller'
- id: settings-controller
  name: '@deepseek-ai/dsh-api-settings-controller'
- id: workspace-controller
  name: '@deepseek-ai/dsh-api-workspace-controller'
- id: cordis-host-runner
  name: '@deepseek-ai/dsh-cordis-host-runner'
- id: web-startup
  name: '@deepseek-ai/dsh-web-app/startup'
- id: webserver
  name: '@deepseek-ai/dsh-host-webserver'
  inject:
    - webStartup
  config:
    host: !!js ctx.webStartup.host ?? '127.0.0.1'
    port: !!js ctx.webStartup.port ?? 3080
    compression: gzip
    compressionLevel: 1
    compressionThresholdBytes: 1024
- id: web-runtime
  name: '@deepseek-ai/dsh-web-app'
  inject:
    - webStartup
  config:
    openBrowser: !!js ctx.webStartup.openBrowser
    printUrl: true
    surfaceContext: true
    trustedHosts: !!js ctx.webStartup.trustedHosts
- id: client-hmr
  name: '@deepseek-ai/dsh-client-hmr'
- id: modules
  name: '@deepseek-ai/dsh-client-modules'
- id: connection
  name: '@deepseek-ai/dsh-client-connection'
  inject:
    - webRuntime
  config:
    trustedHosts: !!js ctx.webRuntime.trustedHosts
- id: api-remotes
  name: '@deepseek-ai/dsh-api-remotes'
- id: cordis-client-runner
  name: '@deepseek-ai/dsh-cordis-client-runner'
- id: ui-theme
  name: '@deepseek-ai/dsh-client-ui-theme'
- id: locale
  name: '@deepseek-ai/dsh-client-locale'
- id: ui-layout
  name: '@deepseek-ai/dsh-client-ui-layout'
- id: ui-renderer
  name: '@deepseek-ai/dsh-client-ui-renderer'
- id: ui-session
  name: '@deepseek-ai/dsh-client-ui-session'
- id: ui-sidebar
  name: '@deepseek-ai/dsh-client-ui-sidebar'
- id: ui-settings
  name: '@deepseek-ai/dsh-client-ui-settings'
- id: ui-settings-general
  name: '@deepseek-ai/dsh-client-ui-settings-general'
- id: ui-settings-models
  name: '@deepseek-ai/dsh-client-ui-settings-models'
- id: ui-settings-plugin-inventory
  name: '@deepseek-ai/dsh-client-ui-settings-plugin-inventory'
- id: ui-conversation
  name: '@deepseek-ai/dsh-client-ui-conversation'
- id: ui-approval
  name: '@deepseek-ai/dsh-client-ui-approval'
- id: ui-chat
  name: '@deepseek-ai/dsh-client-ui-chat'
- id: ui-brand-official
  name: '@deepseek-ai/dsh-client-ui-brand-official'
- id: ui-attachment
  name: '@deepseek-ai/dsh-client-ui-attachment'
- id: ui-tool
  name: '@deepseek-ai/dsh-client-ui-tool'
- id: ui-cordis
  name: '@deepseek-ai/dsh-client-ui-cordis'
- id: ui-workflow-run
  name: '@deepseek-ai/dsh-client-ui-workflow-run'
- id: ui-deliverables
  name: '@deepseek-ai/dsh-client-ui-deliverables'
- id: ui-workspace
  name: '@deepseek-ai/dsh-client-ui-workspace'
- id: ui-input-trigger
  name: '@deepseek-ai/dsh-client-ui-input-trigger'
- id: ui-commands
  name: '@deepseek-ai/dsh-client-ui-commands'
- id: ui-skill
  name: '@deepseek-ai/dsh-client-ui-skill'
- id: ui-subagent
  name: '@deepseek-ai/dsh-client-ui-subagent'
- id: ui-reference
  name: '@deepseek-ai/dsh-client-ui-reference'
- id: ui-schedule
  name: '@deepseek-ai/dsh-client-ui-schedule'
  disabled: true
- id: ui-jobs
  name: '@deepseek-ai/dsh-client-ui-jobs'
- id: ui-goal
  name: '@deepseek-ai/dsh-client-ui-goal'
- id: ui-message-feedback
  name: '@deepseek-ai/dsh-client-ui-message-feedback'
- id: ui-model-selection
  name: '@deepseek-ai/dsh-client-ui-model-selection'
- id: ui-permission
  name: '@deepseek-ai/dsh-client-ui-permission-presets'
- id: ui-agent-preset
  name: '@deepseek-ai/dsh-client-ui-agent-preset'
- id: ui-settings-plugins
  name: '@deepseek-ai/dsh-client-ui-settings-plugins'
- id: ui-plan
  name: '@deepseek-ai/dsh-client-ui-plan'
- id: ui-user-questions
  name: '@deepseek-ai/dsh-client-ui-user-questions'
- id: ui-trajectory
  name: '@deepseek-ai/dsh-client-ui-trajectory'
- id: agent-presets
  name: '@deepseek-ai/dsh-agent-presets'
  config:
    default: standard
