ather-code 0.34.5 → 0.34.6

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.
Files changed (3) hide show
  1. package/dist/cli.mjs +132 -92
  2. package/dist/sdk.mjs +333 -38
  3. package/package.json +1 -1
package/dist/sdk.mjs CHANGED
@@ -10126,7 +10126,7 @@ var init_version = __esm(() => {
10126
10126
  import_semver = __toESM(require_semver2(), 1);
10127
10127
  fallbackBuildVersion = (() => {
10128
10128
  try {
10129
- return "0.34.5";
10129
+ return "0.34.6";
10130
10130
  } catch {
10131
10131
  return "0.0.0";
10132
10132
  }
@@ -71313,7 +71313,7 @@ function getAttributionHeader(fingerprint, policy) {
71313
71313
  if (!policy.generate) {
71314
71314
  return "";
71315
71315
  }
71316
- const version2 = `${"0.34.5"}.${fingerprint}`;
71316
+ const version2 = `${"0.34.6"}.${fingerprint}`;
71317
71317
  const entrypoint = process.env.ATHER_CODE_ENTRYPOINT ?? "unknown";
71318
71318
  const cch = "";
71319
71319
  const workload = getWorkload();
@@ -104330,7 +104330,7 @@ var init_metadata = __esm(() => {
104330
104330
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
104331
104331
  WHITESPACE_REGEX = /\s+/;
104332
104332
  getVersionBase = memoize_default(() => {
104333
- const match = "0.34.5".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
104333
+ const match = "0.34.6".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
104334
104334
  return match ? match[0] : undefined;
104335
104335
  });
104336
104336
  buildEnvContext = memoize_default(async () => {
@@ -104370,9 +104370,9 @@ var init_metadata = __esm(() => {
104370
104370
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
104371
104371
  isAtherCodeAction: isEnvTruthy(process.env.ATHER_CODE_ACTION),
104372
104372
  isAtherCodeAiAuth: isAtherSubscriber(),
104373
- version: "0.34.5",
104373
+ version: "0.34.6",
104374
104374
  versionBase: getVersionBase(),
104375
- buildTime: "2026-10-19T07:18:54.205Z",
104375
+ buildTime: "2026-10-20T15:21:52.038Z",
104376
104376
  deploymentEnvironment: env3.detectDeploymentEnvironment(),
104377
104377
  ...isEnvTruthy(process.env.GITHUB_ACTIONS) && {
104378
104378
  githubEventName: process.env.GITHUB_EVENT_NAME,
@@ -112587,7 +112587,7 @@ var init_effort = __esm(() => {
112587
112587
  // src/utils/userAgent.ts
112588
112588
  function getAtherCodeUserAgent() {
112589
112589
  try {
112590
- return `ather-code/${"0.34.5"}`;
112590
+ return `ather-code/${"0.34.6"}`;
112591
112591
  } catch {
112592
112592
  return "ather-code/0.0.0";
112593
112593
  }
@@ -112599,7 +112599,7 @@ function getUserAgent() {
112599
112599
  const clientApp = process.env.ATHER_CODE_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.ATHER_CODE_AGENT_SDK_CLIENT_APP}` : "";
112600
112600
  const workload = getWorkload();
112601
112601
  const workloadSuffix = workload ? `, workload/${workload}` : "";
112602
- return `ather-code/${"0.34.5"} (${"external"}, ${process.env.ATHER_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
112602
+ return `ather-code/${"0.34.6"} (${"external"}, ${process.env.ATHER_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
112603
112603
  }
112604
112604
  function getMCPUserAgent() {
112605
112605
  const parts = [];
@@ -112613,7 +112613,7 @@ function getMCPUserAgent() {
112613
112613
  parts.push(`client-app/${process.env.ATHER_CODE_AGENT_SDK_CLIENT_APP}`);
112614
112614
  }
112615
112615
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
112616
- return `ather-code/${"0.34.5"}${suffix}`;
112616
+ return `ather-code/${"0.34.6"}${suffix}`;
112617
112617
  }
112618
112618
  function getWebFetchUserAgent() {
112619
112619
  const supportUrl = isFirstPartyAnthropicProvider() ? "https://support.anthropic.com/" : "https://github.com/Atharva/ather-code";
@@ -149980,7 +149980,7 @@ function computeFingerprint(messageText2, version2) {
149980
149980
  }
149981
149981
  function computeFingerprintFromMessages(messages) {
149982
149982
  const firstMessageText = extractFirstMessageText(messages);
149983
- return computeFingerprint(firstMessageText, "0.34.5");
149983
+ return computeFingerprint(firstMessageText, "0.34.6");
149984
149984
  }
149985
149985
  var FINGERPRINT_SALT = "59cf53e54c78";
149986
149986
  var init_fingerprint = () => {};
@@ -150022,7 +150022,7 @@ async function sideQuery(opts) {
150022
150022
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
150023
150023
  }
150024
150024
  const messageText2 = extractFirstUserMessageText(messages);
150025
- const fingerprint = computeFingerprint(messageText2, "0.34.5");
150025
+ const fingerprint = computeFingerprint(messageText2, "0.34.6");
150026
150026
  const attributionPolicy = resolveCurrentAnthropicAttributionPolicy({
150027
150027
  attributionEnabled: isAttributionHeaderEnabled()
150028
150028
  });
@@ -151319,7 +151319,7 @@ var init_client2 = __esm(() => {
151319
151319
  const client = new Client({
151320
151320
  name: "ather-code-code",
151321
151321
  title: "Ather Code",
151322
- version: "0.34.5",
151322
+ version: "0.34.6",
151323
151323
  description: "Ather Code — a terminal coding agent that works with any model provider",
151324
151324
  websiteUrl: PRODUCT_URL
151325
151325
  }, {
@@ -221251,6 +221251,282 @@ var init_postSamplingHooks = __esm(() => {
221251
221251
  postSamplingHooks = [];
221252
221252
  });
221253
221253
 
221254
+ // src/services/orchestrator/managerReview.ts
221255
+ var SKIP_DIRS;
221256
+ var init_managerReview = __esm(() => {
221257
+ init_debug();
221258
+ SKIP_DIRS = new Set([
221259
+ "node_modules",
221260
+ ".git",
221261
+ "dist",
221262
+ "build",
221263
+ "out",
221264
+ ".next",
221265
+ "coverage",
221266
+ ".cache",
221267
+ "vendor"
221268
+ ]);
221269
+ });
221270
+
221271
+ // src/services/orchestrator/state.ts
221272
+ function createOrchestratorState(missionTitle, tasks = []) {
221273
+ return {
221274
+ missionTitle: missionTitle.trim() || "Untitled mission",
221275
+ tasks,
221276
+ activeWorkerId: null,
221277
+ consecutiveFails: 0
221278
+ };
221279
+ }
221280
+ function resetConsecutiveFails(state2) {
221281
+ state2.consecutiveFails = 0;
221282
+ return state2;
221283
+ }
221284
+ function recordManagerFail(state2) {
221285
+ state2.consecutiveFails += 1;
221286
+ return state2.consecutiveFails;
221287
+ }
221288
+ function isHalted(state2) {
221289
+ return state2.consecutiveFails >= MAX_CONSECUTIVE_FAILS;
221290
+ }
221291
+ var MAX_CONSECUTIVE_FAILS = 3;
221292
+
221293
+ // src/services/orchestrator/missionStore.ts
221294
+ function initialState(missionTitle) {
221295
+ return {
221296
+ state: createOrchestratorState(missionTitle),
221297
+ workerLog: [],
221298
+ managerReviews: [],
221299
+ tokensUsed: 0,
221300
+ statusMessage: "Waiting for the worker…",
221301
+ startedAt: Date.now(),
221302
+ interruptedUntil: 0,
221303
+ active: false,
221304
+ completed: false,
221305
+ completedAt: 0,
221306
+ completionMessage: ""
221307
+ };
221308
+ }
221309
+ function publish2(next) {
221310
+ snapshot2 = next;
221311
+ for (const listener2 of listeners3) {
221312
+ try {
221313
+ listener2();
221314
+ } catch {}
221315
+ }
221316
+ }
221317
+ function markMissionComplete(message = "Orchestration Complete") {
221318
+ if (snapshot2.completed)
221319
+ return;
221320
+ publish2({
221321
+ ...snapshot2,
221322
+ active: false,
221323
+ completed: true,
221324
+ completedAt: Date.now(),
221325
+ completionMessage: message,
221326
+ statusMessage: message
221327
+ });
221328
+ }
221329
+ function markMissionHalted(message) {
221330
+ publish2({
221331
+ ...snapshot2,
221332
+ active: false,
221333
+ completed: true,
221334
+ completedAt: Date.now(),
221335
+ completionMessage: "Orchestration Complete",
221336
+ statusMessage: "Halted — human intervention required."
221337
+ });
221338
+ }
221339
+ function setMissionStatus(statusMessage) {
221340
+ publish2({ ...snapshot2, statusMessage });
221341
+ }
221342
+ function appendWorkerLog(line) {
221343
+ const trimmed = line.trim();
221344
+ if (!trimmed)
221345
+ return;
221346
+ const workerLog = [...snapshot2.workerLog, trimmed].slice(-MISSION_LOG_LIMIT);
221347
+ publish2({ ...snapshot2, workerLog });
221348
+ }
221349
+ function appendManagerReview(status, toolName, reason) {
221350
+ reviewSequence += 1;
221351
+ const entry = {
221352
+ id: reviewSequence,
221353
+ status,
221354
+ toolName,
221355
+ reason: reason.trim(),
221356
+ at: Date.now()
221357
+ };
221358
+ const managerReviews = [...snapshot2.managerReviews, entry].slice(-MISSION_REVIEW_LIMIT);
221359
+ publish2({
221360
+ ...snapshot2,
221361
+ managerReviews,
221362
+ interruptedUntil: status === "FAIL" ? Date.now() + MISSION_INTERRUPT_FLASH_MS : snapshot2.interruptedUntil
221363
+ });
221364
+ }
221365
+ function addMissionTokens(tokens) {
221366
+ if (!Number.isFinite(tokens) || tokens <= 0)
221367
+ return;
221368
+ publish2({ ...snapshot2, tokensUsed: snapshot2.tokensUsed + Math.round(tokens) });
221369
+ }
221370
+ function setMissionFails(consecutiveFails) {
221371
+ publish2({
221372
+ ...snapshot2,
221373
+ state: { ...snapshot2.state, consecutiveFails }
221374
+ });
221375
+ }
221376
+ function setMissionTasks(tasks) {
221377
+ publish2({ ...snapshot2, state: { ...snapshot2.state, tasks } });
221378
+ }
221379
+ function syncMissionTasksFromTodos(todos) {
221380
+ if (!Array.isArray(todos))
221381
+ return;
221382
+ const statusMap = {
221383
+ pending: "pending",
221384
+ in_progress: "running",
221385
+ completed: "success"
221386
+ };
221387
+ const tasks = [];
221388
+ todos.forEach((todo, index) => {
221389
+ if (!todo || typeof todo !== "object")
221390
+ return;
221391
+ const record2 = todo;
221392
+ const title = typeof record2.content === "string" ? record2.content : typeof record2.title === "string" ? record2.title : `Task ${index + 1}`;
221393
+ const rawStatus = typeof record2.status === "string" ? record2.status : "pending";
221394
+ tasks.push({
221395
+ id: String(index + 1),
221396
+ title,
221397
+ status: statusMap[rawStatus] ?? "pending"
221398
+ });
221399
+ });
221400
+ if (tasks.length > 0)
221401
+ setMissionTasks(tasks);
221402
+ }
221403
+ var MISSION_LOG_LIMIT = 50, MISSION_REVIEW_LIMIT = 20, MISSION_INTERRUPT_FLASH_MS = 1200, snapshot2, reviewSequence = 0, listeners3;
221404
+ var init_missionStore = __esm(() => {
221405
+ snapshot2 = initialState("Untitled mission");
221406
+ listeners3 = new Set;
221407
+ });
221408
+
221409
+ // src/services/orchestrator/supervision.ts
221410
+ function buildHaltInjection(reason) {
221411
+ const sentence = reason.trim().replace(/[.!?]+$/, "");
221412
+ return `${INTERRUPT_PREFIX}: The Manager aborted your action. Reason: ${sentence}. Re-evaluate immediately.`;
221413
+ }
221414
+ function buildSupervisorHaltMessage() {
221415
+ return `\uD83D\uDED1 SUPERVISOR HALT: Worker failed ${MAX_CONSECUTIVE_FAILS} times. Human intervention required.`;
221416
+ }
221417
+ function stopSupervision() {
221418
+ if (!active)
221419
+ return;
221420
+ active = null;
221421
+ activeReviewer = null;
221422
+ const logger = activeLogger;
221423
+ activeLogger = null;
221424
+ logger?.({ type: "stopped" });
221425
+ markMissionComplete();
221426
+ }
221427
+ function emit2(event) {
221428
+ try {
221429
+ activeLogger?.(event);
221430
+ } catch (error40) {
221431
+ logForDebugging(`[orchestrator] supervision logger failed: ${String(error40)}`);
221432
+ }
221433
+ }
221434
+ function buildTaskContext(state2) {
221435
+ const tasks = state2.tasks.length ? state2.tasks.map((task) => `- [${task.status}] ${task.title}${task.detail ? ` — ${task.detail}` : ""}`).join(`
221436
+ `) : "(no task list — single-action review)";
221437
+ return [
221438
+ `MISSION: ${state2.missionTitle}`,
221439
+ `WORKER: ${state2.activeWorkerId ?? "main"}`,
221440
+ `STRIKES: ${state2.consecutiveFails}/${MAX_CONSECUTIVE_FAILS}`,
221441
+ `TASKS:
221442
+ ${tasks}`
221443
+ ].join(`
221444
+ `);
221445
+ }
221446
+ function describeToolCall(toolInput) {
221447
+ if (!toolInput || typeof toolInput !== "object")
221448
+ return "";
221449
+ const input = toolInput;
221450
+ if (typeof input.command === "string")
221451
+ return `$ ${input.command}`;
221452
+ if (typeof input.file_path === "string")
221453
+ return input.file_path;
221454
+ if (typeof input.pattern === "string")
221455
+ return `/${input.pattern}/`;
221456
+ try {
221457
+ return JSON.stringify(toolInput).slice(0, 80);
221458
+ } catch {
221459
+ return "";
221460
+ }
221461
+ }
221462
+ async function reviewProposedToolCall(toolName, toolInput, options2 = {}) {
221463
+ const supervision = active;
221464
+ const reviewer = activeReviewer;
221465
+ if (!supervision || !reviewer || supervision.halted)
221466
+ return null;
221467
+ const recentToolCalls = [...supervision.toolWindow];
221468
+ try {
221469
+ appendWorkerLog(`${toolName} ${describeToolCall(toolInput)}`);
221470
+ setMissionStatus(`Manager reviewing ${toolName}…`);
221471
+ const verdict = await reviewer({
221472
+ taskContext: buildTaskContext(supervision.state),
221473
+ toolName,
221474
+ toolInput,
221475
+ recentToolCalls,
221476
+ signal: options2.signal,
221477
+ onUsage: addMissionTokens
221478
+ });
221479
+ supervision.toolWindow.push({ toolName, toolInput });
221480
+ if (supervision.toolWindow.length > 3) {
221481
+ supervision.toolWindow.splice(0, supervision.toolWindow.length - 3);
221482
+ }
221483
+ if (verdict.status === "PASS") {
221484
+ resetConsecutiveFails(supervision.state);
221485
+ setMissionFails(0);
221486
+ appendManagerReview("PASS", toolName, "");
221487
+ setMissionStatus("Worker executing…");
221488
+ if (toolName === "TodoWrite" && toolInput && typeof toolInput === "object") {
221489
+ syncMissionTasksFromTodos(toolInput.todos);
221490
+ }
221491
+ emit2({ type: "review-pass", toolName });
221492
+ return null;
221493
+ }
221494
+ const reason = verdict.reason || "action rejected by the Manager";
221495
+ const fails = recordManagerFail(supervision.state);
221496
+ setMissionFails(fails);
221497
+ appendManagerReview("FAIL", toolName, reason);
221498
+ appendWorkerLog("\uD83D\uDED1 Manager aborted the action");
221499
+ setMissionStatus("Interrupted — re-evaluating…");
221500
+ emit2({ type: "review-fail", toolName, reason, fails });
221501
+ if (supervision.abortController.signal.aborted) {
221502
+ supervision.abortController = new AbortController;
221503
+ }
221504
+ supervision.abortController.abort(reason);
221505
+ const injected = buildHaltInjection(reason);
221506
+ emit2({ type: "interrupt", toolName, reason, injected });
221507
+ if (isHalted(supervision.state)) {
221508
+ const message = buildSupervisorHaltMessage();
221509
+ supervision.halted = true;
221510
+ lastHalt = { message, reason };
221511
+ markMissionHalted(message);
221512
+ emit2({ type: "halt", fails, message });
221513
+ stopSupervision();
221514
+ return `${injected}
221515
+ ${message}`;
221516
+ }
221517
+ return injected;
221518
+ } catch (error40) {
221519
+ logForDebugging(`[orchestrator] supervisor review failed for ${toolName}: ${String(error40)}`);
221520
+ return null;
221521
+ }
221522
+ }
221523
+ var INTERRUPT_PREFIX = "[SYSTEM HALT]", active = null, activeReviewer = null, activeLogger = null, lastHalt = null;
221524
+ var init_supervision = __esm(() => {
221525
+ init_debug();
221526
+ init_managerReview();
221527
+ init_missionStore();
221528
+ });
221529
+
221254
221530
  // src/utils/doomLoop.ts
221255
221531
  var exports_doomLoop = {};
221256
221532
  __export(exports_doomLoop, {
@@ -222857,6 +223133,24 @@ async function* runToolUse(toolUse, assistantMessage, canUseTool, toolUseContext
222857
223133
  };
222858
223134
  return;
222859
223135
  }
223136
+ const supervisorHalt = await reviewProposedToolCall(toolName, toolUse.input);
223137
+ if (supervisorHalt) {
223138
+ yield {
223139
+ message: createUserMessage({
223140
+ content: [
223141
+ {
223142
+ type: "tool_result",
223143
+ content: `<tool_use_error>${supervisorHalt}</tool_use_error>`,
223144
+ is_error: true,
223145
+ tool_use_id: toolUse.id
223146
+ }
223147
+ ],
223148
+ toolUseResult: supervisorHalt,
223149
+ sourceToolAssistantUUID: assistantMessage.uuid
223150
+ })
223151
+ };
223152
+ return;
223153
+ }
222860
223154
  const toolInput = toolUse.input;
222861
223155
  try {
222862
223156
  if (toolUseContext.abortController.signal.aborted) {
@@ -223696,6 +223990,7 @@ var init_toolExecution = __esm(() => {
223696
223990
  init_metadata();
223697
223991
  init_state();
223698
223992
  init_Tool();
223993
+ init_supervision();
223699
223994
  init_bashPermissions();
223700
223995
  init_prompt3();
223701
223996
  init_prompt4();
@@ -229748,7 +230043,7 @@ function getAnthropicEnvMetadata() {
229748
230043
  function getBuildAgeMinutes() {
229749
230044
  if (false)
229750
230045
  ;
229751
- const buildTime = new Date("2026-10-19T07:18:54.205Z").getTime();
230046
+ const buildTime = new Date("2026-10-20T15:21:52.038Z").getTime();
229752
230047
  if (isNaN(buildTime))
229753
230048
  return;
229754
230049
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -240756,10 +241051,10 @@ async function* openaiStreamToAnthropic(response, model, signal, isOllama, reque
240756
241051
  xmlToolCallText = combined.slice(openIdx);
240757
241052
  } else {
240758
241053
  const keep = trailingXmlOpenerPrefixLen(combined, allowHy3ToolCalls);
240759
- const emit2 = keep > 0 ? combined.slice(0, combined.length - keep) : combined;
241054
+ const emit3 = keep > 0 ? combined.slice(0, combined.length - keep) : combined;
240760
241055
  xmlHoldback = keep > 0 ? combined.slice(combined.length - keep) : "";
240761
- if (emit2)
240762
- yield* emitTextDelta(emit2);
241056
+ if (emit3)
241057
+ yield* emitTextDelta(emit3);
240763
241058
  }
240764
241059
  }
240765
241060
  }
@@ -240848,18 +241143,18 @@ async function* openaiStreamToAnthropic(response, model, signal, isOllama, reque
240848
241143
  };
240849
241144
  }
240850
241145
  } else if (tc.function?.arguments) {
240851
- const active = activeToolCalls.get(tc.index);
240852
- if (active) {
241146
+ const active2 = activeToolCalls.get(tc.index);
241147
+ if (active2) {
240853
241148
  if (tc.function.arguments) {
240854
- active.jsonBuffer += tc.function.arguments;
241149
+ active2.jsonBuffer += tc.function.arguments;
240855
241150
  }
240856
- if (active.normalizeAtStop) {
241151
+ if (active2.normalizeAtStop) {
240857
241152
  continue;
240858
241153
  }
240859
241154
  throwIfStreamAborted2(signal);
240860
241155
  yield {
240861
241156
  type: "content_block_delta",
240862
- index: active.index,
241157
+ index: active2.index,
240863
241158
  delta: {
240864
241159
  type: "input_json_delta",
240865
241160
  partial_json: tc.function.arguments
@@ -256505,12 +256800,12 @@ class Project {
256505
256800
  }
256506
256801
  });
256507
256802
  }
256508
- async insertFileHistorySnapshot(messageId, snapshot2, isSnapshotUpdate) {
256803
+ async insertFileHistorySnapshot(messageId, snapshot3, isSnapshotUpdate) {
256509
256804
  return this.trackWrite(async () => {
256510
256805
  const fileHistoryMessage = {
256511
256806
  type: "file-history-snapshot",
256512
256807
  messageId,
256513
- snapshot: snapshot2,
256808
+ snapshot: snapshot3,
256514
256809
  isSnapshotUpdate
256515
256810
  };
256516
256811
  await this.appendEntry(fileHistoryMessage);
@@ -256521,9 +256816,9 @@ class Project {
256521
256816
  await this.appendEntry(queueOp);
256522
256817
  });
256523
256818
  }
256524
- async insertAttributionSnapshot(snapshot2) {
256819
+ async insertAttributionSnapshot(snapshot3) {
256525
256820
  return this.trackWrite(async () => {
256526
- await this.appendEntry(snapshot2);
256821
+ await this.appendEntry(snapshot3);
256527
256822
  });
256528
256823
  }
256529
256824
  async insertContentReplacement(replacements2, agentId) {
@@ -256743,11 +257038,11 @@ async function recordQueueOperation(queueOp) {
256743
257038
  async function removeTranscriptMessage(targetUuid) {
256744
257039
  await getProject().removeMessageByUuid(targetUuid);
256745
257040
  }
256746
- async function recordFileHistorySnapshot(messageId, snapshot2, isSnapshotUpdate) {
256747
- await getProject().insertFileHistorySnapshot(messageId, snapshot2, isSnapshotUpdate);
257041
+ async function recordFileHistorySnapshot(messageId, snapshot3, isSnapshotUpdate) {
257042
+ await getProject().insertFileHistorySnapshot(messageId, snapshot3, isSnapshotUpdate);
256748
257043
  }
256749
- async function recordAttributionSnapshot(snapshot2) {
256750
- await getProject().insertAttributionSnapshot(snapshot2);
257044
+ async function recordAttributionSnapshot(snapshot3) {
257045
+ await getProject().insertAttributionSnapshot(snapshot3);
256751
257046
  }
256752
257047
  async function recordContentReplacement(replacements2, agentId) {
256753
257048
  await getProject().insertContentReplacement(replacements2, agentId);
@@ -256776,14 +257071,14 @@ async function recordContextCollapseCommit(commit) {
256776
257071
  ...commit
256777
257072
  });
256778
257073
  }
256779
- async function recordContextCollapseSnapshot(snapshot2) {
257074
+ async function recordContextCollapseSnapshot(snapshot3) {
256780
257075
  const sessionId = getSessionId();
256781
257076
  if (!sessionId)
256782
257077
  return;
256783
257078
  await getProject().appendEntry({
256784
257079
  type: "marble-origami-snapshot",
256785
257080
  sessionId,
256786
- ...snapshot2
257081
+ ...snapshot3
256787
257082
  });
256788
257083
  }
256789
257084
  async function flushSessionStorage() {
@@ -257431,13 +257726,13 @@ function buildFileHistorySnapshotChain(fileHistorySnapshots, conversation) {
257431
257726
  if (!snapshotMessage) {
257432
257727
  continue;
257433
257728
  }
257434
- const { snapshot: snapshot2, isSnapshotUpdate } = snapshotMessage;
257435
- const existingIndex = isSnapshotUpdate ? indexByMessageId.get(snapshot2.messageId) : undefined;
257729
+ const { snapshot: snapshot3, isSnapshotUpdate } = snapshotMessage;
257730
+ const existingIndex = isSnapshotUpdate ? indexByMessageId.get(snapshot3.messageId) : undefined;
257436
257731
  if (existingIndex === undefined) {
257437
- indexByMessageId.set(snapshot2.messageId, snapshots.length);
257438
- snapshots.push(snapshot2);
257732
+ indexByMessageId.set(snapshot3.messageId, snapshots.length);
257733
+ snapshots.push(snapshot3);
257439
257734
  } else {
257440
- snapshots[existingIndex] = snapshot2;
257735
+ snapshots[existingIndex] = snapshot3;
257441
257736
  }
257442
257737
  }
257443
257738
  return snapshots;
@@ -259118,7 +259413,7 @@ var init_sessionStorage = __esm(() => {
259118
259413
  init_slowOperations();
259119
259414
  init_transcriptFileLock();
259120
259415
  init_uuid();
259121
- VERSION3 = typeof MACRO !== "undefined" ? "0.34.5" : "unknown";
259416
+ VERSION3 = typeof MACRO !== "undefined" ? "0.34.6" : "unknown";
259122
259417
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
259123
259418
  TRANSCRIPT_COPY_CHUNK_BYTES = 64 * 1024;
259124
259419
  transcriptRewriteHooksForTesting = {};
@@ -260585,7 +260880,7 @@ var init_filesystem = __esm(() => {
260585
260880
  });
260586
260881
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
260587
260882
  const nonce = randomBytes10(16).toString("hex");
260588
- return join95(getAtherCodeTempDir(), "bundled-skills", "0.34.5", nonce);
260883
+ return join95(getAtherCodeTempDir(), "bundled-skills", "0.34.6", nonce);
260589
260884
  });
260590
260885
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
260591
260886
  });
@@ -275092,7 +275387,7 @@ function buildSystemInitMessage(inputs) {
275092
275387
  slash_commands: inputs.commands.filter((c7) => c7.userInvocable !== false).map((c7) => c7.name),
275093
275388
  apiKeySource: getAtherApiKeyWithSource().source,
275094
275389
  betas: getSdkBetas(),
275095
- ather_code_code_version: "0.34.5",
275390
+ ather_code_code_version: "0.34.6",
275096
275391
  output_style: outputStyle,
275097
275392
  agents: inputs.agents.map((agent) => agent.agentType),
275098
275393
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ather-code",
3
- "version": "0.34.5",
3
+ "version": "0.34.6",
4
4
  "description": "Ather Code opens coding-agent workflows to any LLM \u2014 OpenAI, Gemini, DeepSeek, Ollama, and 200+ models",
5
5
  "type": "module",
6
6
  "bin": {