()
| 125 | } |
| 126 | |
| 127 | async function run(): Promise<void> { |
| 128 | const parsed = parseArgs(process.argv.slice(2)) |
| 129 | |
| 130 | if (parsed.command === 'help') { |
| 131 | printHelp() |
| 132 | return |
| 133 | } |
| 134 | if (parsed.command === 'version') { |
| 135 | printVersion() |
| 136 | return |
| 137 | } |
| 138 | |
| 139 | if (!parsed.print) { |
| 140 | await runInteractive(parsed) |
| 141 | return |
| 142 | } |
| 143 | |
| 144 | const prompt = parsed.prompt || (await readPromptFromStdin()) |
| 145 | if (!prompt) { |
| 146 | process.stderr.write('Error: prompt is required\n') |
| 147 | process.exitCode = 1 |
| 148 | return |
| 149 | } |
| 150 | |
| 151 | const apiKey = process.env.ANTHROPIC_API_KEY |
| 152 | const authToken = process.env.ANTHROPIC_AUTH_TOKEN |
| 153 | if (!apiKey && !authToken) { |
| 154 | process.stderr.write( |
| 155 | 'Error: set ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN\n', |
| 156 | ) |
| 157 | process.exitCode = 1 |
| 158 | return |
| 159 | } |
| 160 | |
| 161 | const model = |
| 162 | parsed.model || |
| 163 | process.env.ANTHROPIC_DEFAULT_SONNET_MODEL || |
| 164 | process.env.ANTHROPIC_MODEL |
| 165 | |
| 166 | if (!model) { |
| 167 | process.stderr.write('Error: model is required\n') |
| 168 | process.exitCode = 1 |
| 169 | return |
| 170 | } |
| 171 | |
| 172 | const client = new Anthropic({ |
| 173 | apiKey: apiKey ?? undefined, |
| 174 | authToken: authToken ?? undefined, |
| 175 | baseURL: process.env.ANTHROPIC_BASE_URL || undefined, |
| 176 | timeout: parseInt(process.env.API_TIMEOUT_MS || String(600_000), 10), |
| 177 | maxRetries: 0, |
| 178 | }) |
| 179 | |
| 180 | const response = await client.messages.create({ |
| 181 | model, |
| 182 | max_tokens: 4096, |
| 183 | system: getSystemPrompt(parsed.systemPrompt, parsed.appendSystemPrompt), |
| 184 | messages: [{ role: 'user', content: prompt }], |
no test coverage detected