@tryarcanist/cli 0.1.180 → 0.1.182

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -156,7 +156,7 @@ arcanist sessions create your-org/your-repo "verify the deployed change" --cold
156
156
  arcanist sessions create your-org/your-repo "retry-safe create" --idempotency-key 1f0e6f1a-...
157
157
  ```
158
158
 
159
- `--backend` picks the agent runtime backend: `codex` (default) or `claude_code`. `--model` must be valid for the chosen backend — codex runs OpenAI models (`gpt-5.4` default, `gpt-5.5`), `claude_code` runs Anthropic models (`claude-opus-4-8` default, `claude-sonnet-4-6`) — and the CLI rejects a mismatch before any network call. `claude_code` sessions require an Anthropic API key configured in Settings.
159
+ `--backend` picks the agent runtime backend: `codex` (default) or `claude_code`. `--model` must be valid for the chosen backend — codex runs OpenAI models (`gpt-5.4` default, `gpt-5.5`), `claude_code` runs Anthropic models (`claude-opus-4-8` default, `claude-sonnet-4-6`, `claude-fable-5`) — and the CLI rejects a mismatch before any network call. `claude_code` sessions require an Anthropic API key configured in Settings.
160
160
 
161
161
  `--wait` blocks until the created prompt finishes, prints the resulting PR/branch line in human-readable mode when it is already available, and exits non-zero if the prompt finishes with `status: failed`, making it suitable for cron or other schedulers that alert on command failure. JSON mode waits quietly and prints the create payload after the prompt completes successfully. `--poll-interval <ms>` tunes the completion check frequency.
162
162
 
package/dist/index.js CHANGED
@@ -618,7 +618,8 @@ var OpenAIModel = {
618
618
  };
619
619
  var AnthropicModel = {
620
620
  Opus48: "claude-opus-4-8",
621
- Sonnet46: "claude-sonnet-4-6"
621
+ Sonnet46: "claude-sonnet-4-6",
622
+ Fable5: "claude-fable-5"
622
623
  };
623
624
  var BasetenModel = {
624
625
  Glm47: "glm-4.7",
@@ -780,6 +781,23 @@ var MODEL_REGISTRY = [
780
781
  pricing: { inputPerMillion: 3, outputPerMillion: 15, cacheReadPerMillion: 0.3, cacheWritePerMillion: 3.75 },
781
782
  sessionStart: { eligible: true }
782
783
  },
784
+ {
785
+ id: AnthropicModel.Fable5,
786
+ name: "Claude Fable 5",
787
+ provider: "anthropic",
788
+ backends: [CLAUDE_CODE_AGENT_RUNTIME_BACKEND],
789
+ contextWindow: 1e6,
790
+ // Fable's adaptive thinking means "none" would safely omit SDK
791
+ // Options.effort, as with Opus/Sonnet. We intentionally require an explicit
792
+ // effort for this higher-cost model and default to the existing Claude
793
+ // Code high effort.
794
+ reasoning: { efforts: ["low", "medium", "high", "xhigh", "max"], default: "high" },
795
+ // Bridge cost-ESTIMATE only; NOT authoritative for control-plane Anthropic
796
+ // billing. `anthropic/cost.ts` ANTHROPIC_MESSAGES_MODEL_PRICING owns that
797
+ // verified Messages API table.
798
+ pricing: { inputPerMillion: 10, outputPerMillion: 50, cacheReadPerMillion: 1, cacheWritePerMillion: 12.5 },
799
+ sessionStart: { eligible: true }
800
+ },
783
801
  {
784
802
  id: BasetenModel.Glm47,
785
803
  name: "GLM-4.7",
@@ -4331,22 +4349,43 @@ function buildLogsPath(businessId, buildId, options = {}) {
4331
4349
  buildId
4332
4350
  )}/logs${suffix}`;
4333
4351
  }
4352
+ async function fetchAndEmitBuildLogs(config, businessId, buildId, options) {
4353
+ const logs = await apiFetch(
4354
+ config,
4355
+ buildLogsPath(businessId, buildId, { afterSequence: options.afterSequence, limit: options.limit })
4356
+ );
4357
+ if (logs.logs.length === 0) return { afterSequence: options.afterSequence, count: 0 };
4358
+ if (options.json) writeJson({ type: "logs", logs: logs.logs });
4359
+ else printLogs(logs.logs);
4360
+ return { afterSequence: logs.logs[logs.logs.length - 1].sequence, count: logs.logs.length };
4361
+ }
4362
+ async function drainTerminalBuildLogs(config, businessId, buildId, options) {
4363
+ let afterSequence = options.afterSequence;
4364
+ for (; ; ) {
4365
+ const result = await fetchAndEmitBuildLogs(config, businessId, buildId, {
4366
+ afterSequence,
4367
+ limit: 500,
4368
+ json: options.json
4369
+ });
4370
+ afterSequence = result.afterSequence;
4371
+ if (result.count === 0) return;
4372
+ }
4373
+ }
4334
4374
  async function waitForBuild(config, businessId, buildId, options) {
4335
4375
  let afterSequence;
4336
4376
  for (; ; ) {
4337
4377
  if (options.follow) {
4338
- const logs = await apiFetch(config, buildLogsPath(businessId, buildId, { afterSequence }));
4339
- if (logs.logs.length > 0) {
4340
- if (options.json) writeJson({ type: "logs", logs: logs.logs });
4341
- else printLogs(logs.logs);
4342
- afterSequence = logs.logs[logs.logs.length - 1].sequence;
4343
- }
4378
+ const result = await fetchAndEmitBuildLogs(config, businessId, buildId, { afterSequence, json: options.json });
4379
+ afterSequence = result.afterSequence;
4344
4380
  }
4345
4381
  const status = await apiFetch(
4346
4382
  config,
4347
4383
  `/api/businesses/${encodeURIComponent(businessId)}/sandbox-layer/build-requests/${encodeURIComponent(buildId)}`
4348
4384
  );
4349
4385
  if (TERMINAL_BUILD_STATUSES.has(status.buildRequest.status)) {
4386
+ if (options.follow) {
4387
+ await drainTerminalBuildLogs(config, businessId, buildId, { afterSequence, json: options.json });
4388
+ }
4350
4389
  return status.buildRequest;
4351
4390
  }
4352
4391
  await sleep(options.pollIntervalMs);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tryarcanist/cli",
3
- "version": "0.1.180",
3
+ "version": "0.1.182",
4
4
  "description": "CLI for Arcanist — create and manage coding agent sessions",
5
5
  "type": "module",
6
6
  "bin": {