# Real Loader composition for the keyless conversational PTY test. The app
# bundle supplies the production agent/TUI/user-question stack; only the model
# is scripted so the terminal interaction is deterministic and network-free.
- id: scripted-llm
  name: './tui-scripted-llm.ts'

- id: bash
  name: '@deepseek-ai/dsh-bash-local'

- id: fs-local
  name: '@deepseek-ai/dsh-fs-local'
  config:
    cwd: !!js process.cwd()

- id: token-meter
  name: '@deepseek-ai/dsh-token-meter'

- id: plan-mode
  name: '@deepseek-ai/dsh-plan-mode'
  config:
    section: 'Stay in plan mode for this scripted TUI test.'

- id: tui-agent
  name: '@deepseek-ai/dsh-tui-demo'
  config:
    provider: tui-scripted
    model: tui-scripted-model
    persistenceRoot: './.sessions'
    # The smoke's log inspection reads plain `.jsonl`; keep the scripted
    # fixture uncompressed like the other snapshot-facing configs.
    persistenceCompression: none
    resumeSessionId: !!js "typeof resumeSessionId === 'string' ? resumeSessionId : undefined"
    resumeCommand: 'dsh --resume {session}'
    workspaceContext:
      maxBytes: 65536
    welcome: 'scripted TUI ready.'
    persona: 'Scripted model {{model}}.'
    ui:
      showReasoning: true

# Model-made session titles, as in the shipped cordis.yml: the scripted adapter
# answers the tool-less title request with a fixed string so the PTY test can
# assert the logged title reaches the terminal window title.
- id: session-title-llm
  name: '@deepseek-ai/dsh-session-title-first-message-llm'
  config:
    targetWords: 5
    targetCjkCharacters: 10
    maxInputBytes: 4096
    maxOutputTokens: 64
    timeoutMs: 10000
