@rallycry/conveyor-agent 10.8.2 → 10.9.0

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/dist/index.d.ts CHANGED
@@ -214,6 +214,20 @@ declare class AgentConnection {
214
214
  emitRateLimitPause(resetsAt: string): void;
215
215
  updateStatus(status: string): void;
216
216
  emitCodeReviewResult(content: string, approved: boolean): void;
217
+ /**
218
+ * The session's key hit a hard usage cap — ask the server to stamp it
219
+ * limited and hand back the best remaining key's credential env (or a
220
+ * requeue confirmation when none is left). Awaited: the caller swaps
221
+ * credentials and resumes on success, so it needs the real response.
222
+ */
223
+ cycleCodingAgentKey(rateLimitType: string, resetsAt?: string): Promise<{
224
+ cycled: true;
225
+ label: string;
226
+ envVars: Record<string, string>;
227
+ } | {
228
+ cycled: false;
229
+ resetsAt: string;
230
+ }>;
217
231
  askUserQuestion(questions: AgentQuestion[]): Promise<Record<string, string>>;
218
232
  getTaskProperties(): Promise<{
219
233
  plan?: string;
package/dist/index.js CHANGED
@@ -20,7 +20,7 @@ import {
20
20
  unshallowRepo,
21
21
  updateRemoteToken,
22
22
  uploadSnapshotToGcs
23
- } from "./chunk-LBMFXTIV.js";
23
+ } from "./chunk-H3OGNJS4.js";
24
24
  import "./chunk-7TQO4ZF4.js";
25
25
 
26
26
  // src/runner/worktree.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rallycry/conveyor-agent",
3
- "version": "10.8.2",
3
+ "version": "10.9.0",
4
4
  "description": "Conveyor Agent Runner v10 - PTY harness for the task chat (SDK harness for audit/project-chat). Agent-as-User architecture with BaseService patterns. Works locally too.",
5
5
  "keywords": [
6
6
  "agent",
@@ -358,7 +358,7 @@ if [ -n "${CONVEYOR_USER_ID}" ] && [ -n "${USER_HOME_PROJECT_ID}" ] && [ -d "${U
358
358
  # TUI at a startup dialog, and the vector that let one poisoned
359
359
  # customApiKeyResponses write brick every future pod. Nothing load-bearing
360
360
  # lives only in ~/.claude.json: credentials are in ~/.claude/.credentials.json
361
- # (still shared, re-synthesized per boot) and transcripts in ~/.claude/projects.
361
+ # (pod-local via symlink, see below) and transcripts in ~/.claude/projects.
362
362
  # The agent's ensureClaudeOnboarding + the seed below rebuild every first-run
363
363
  # gate this file needs, fresh, on each boot.
364
364
  rm -rf /home/conveyor/.claude /home/conveyor/.config/claude 2>/dev/null || true
@@ -372,6 +372,29 @@ if [ -n "${CONVEYOR_USER_ID}" ] && [ -n "${USER_HOME_PROJECT_ID}" ] && [ -d "${U
372
372
  rm -rf /home/conveyor/.claude.json 2>/dev/null || true
373
373
  seed_claude_json /home/conveyor/.claude.json
374
374
 
375
+ # Pod-local ~/.claude/.credentials.json: the TUI and the usage probe
376
+ # authenticate from this file, while the server attributes usage samples to
377
+ # the key stamped on THIS pod's session. As a shared file (it lives inside
378
+ # the symlinked ~/.claude), concurrent pods booted under different keys
379
+ # clobbered it last-writer-wins, so every pod probed whichever ACCOUNT booted
380
+ # most recently — cross-wiring usage attribution between the user's keys
381
+ # (seen live 2026-07-14). Same cure as ~/.claude.json above, except the CLI
382
+ # derives this path from ~/.claude, so the shared dir keeps a SYMLINK to an
383
+ # absolute pod-local path — which resolves per-pod. Racing pods all write the
384
+ # identical symlink value, so the ln itself cannot lose data. Best-effort: on
385
+ # failure the file stays shared and the agent's sampler identity guard still
386
+ # blocks wrong-account attribution.
387
+ CRED_SHARED="${USER_HOME_ROOT}/.claude/.credentials.json"
388
+ CRED_POD_LOCAL="/home/conveyor/.claude-credentials.pod.json"
389
+ if [ -f "${CRED_SHARED}" ] && [ ! -L "${CRED_SHARED}" ]; then
390
+ # Legacy shared regular file: carry its contents into this pod so auth
391
+ # survives the cutover; the agent re-synthesizes from its own token at
392
+ # spawn anyway.
393
+ cp "${CRED_SHARED}" "${CRED_POD_LOCAL}" 2>/dev/null || true
394
+ fi
395
+ ln -sfn "${CRED_POD_LOCAL}" "${CRED_SHARED}" 2>/dev/null || true
396
+ chmod 600 "${CRED_POD_LOCAL}" 2>/dev/null || true
397
+
375
398
  # OpenCode state (sessions + config) persists the same way as ~/.claude.
376
399
  mkdir -p "${USER_HOME_ROOT}/.local/share/opencode" "${USER_HOME_ROOT}/.config/opencode" 2>/dev/null || true
377
400
  rm -rf /home/conveyor/.local/share/opencode /home/conveyor/.config/opencode 2>/dev/null || true