import { cli, Strategy } from '@jackwener/opencli/registry'; import { ArgumentError } from '@jackwener/opencli/errors'; import { DOUBAO_DOMAIN, getDoubaoTranscriptLines, getDoubaoVisibleTurns, sendDoubaoMessage, waitForDoubaoResponse } from './utils.js'; export const askCommand = cli({ site: 'doubao', name: 'ask', access: 'write', description: 'Send a prompt and wait for the Doubao response', domain: DOUBAO_DOMAIN, strategy: Strategy.COOKIE, browser: true, siteSession: 'persistent', navigateBefore: false, args: [ { name: 'text', required: true, positional: true, help: 'Prompt to send' }, { name: 'timeout', type: 'int', required: false, help: 'Max seconds to wait (default: 60)', default: 60 }, ], columns: ['Role', 'Text'], func: async (page, kwargs) => { const text = kwargs.text; const timeout = kwargs.timeout; if (!Number.isInteger(timeout) || timeout < 1) { throw new ArgumentError('--timeout must be a positive integer (seconds)'); } const beforeTurns = await getDoubaoVisibleTurns(page); const beforeLines = await getDoubaoTranscriptLines(page); await sendDoubaoMessage(page, text); const response = await waitForDoubaoResponse(page, beforeLines, beforeTurns, text, timeout); if (!response) { return [ { Role: 'User', Text: text }, { Role: 'System', Text: `No response within ${timeout}s. Doubao may still be generating.` }, ]; } return [ { Role: 'User', Text: text }, { Role: 'Assistant', Text: response }, ]; }, });