@foxden-app/foxclaw 0.5.28 → 0.5.30

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/CHANGELOG.md CHANGED
@@ -2,6 +2,26 @@
2
2
 
3
3
  All notable FoxClaw changes are listed here. Each release note is bilingual so GitHub Releases and the npm package are useful to both Chinese and English readers.
4
4
 
5
+ ## 0.5.30 - 2026-06-09
6
+
7
+ ### 中文
8
+ - 修正重启自动续接路径:自动恢复现在会先像用户手动发送“继续”一样 `resumeThread` 原 Codex thread,再在原 thread 上启动续接 turn。
9
+ - 如果原 thread 暂时无法恢复,FoxClaw 会保留状态卡并重试;不会静默切到 replacement thread,避免丢失原线程上下文。
10
+
11
+ ### English
12
+ - Fixed restart auto-resume to match the manual "continue" path: FoxClaw now resumes the original Codex thread first, then starts the continuation turn on that same thread.
13
+ - If the original thread cannot be resumed yet, FoxClaw keeps the status card and retries instead of silently switching to a replacement thread and losing context.
14
+
15
+ ## 0.5.29 - 2026-06-09
16
+
17
+ ### 中文
18
+ - 重启自动续接遇到旧 Codex thread 永久 `thread not found` 时,会静默创建 replacement thread 并复用原 Telegram 状态卡继续跑,不再只反复等待旧 thread 恢复。
19
+ - 自动续接提示补充了无上下文兜底指令:如果旧线程上下文不可用,会检查当前工作目录、git 状态、服务日志和运行状态后完成收尾总结。
20
+
21
+ ### English
22
+ - Restart auto-resume now silently creates a replacement thread when the old Codex thread remains `thread not found`, reusing the original Telegram status card instead of only waiting for the old thread to recover.
23
+ - The auto-resume prompt now includes a no-context fallback: inspect the current working directory, git status, service logs, and runtime state before finishing the user-facing summary.
24
+
5
25
  ## 0.5.28 - 2026-06-09
6
26
 
7
27
  ### 中文
@@ -7325,7 +7325,7 @@ export class BridgeSessionCore {
7325
7325
  }
7326
7326
  const snapshot = await this.app.readThreadSnapshot(preview.threadId);
7327
7327
  if (!snapshot) {
7328
- return false;
7328
+ return preview.isObserved ? false : this.resumeInterruptedTurnAfterRestart(preview, target);
7329
7329
  }
7330
7330
  const liveTurn = findLiveTurn(snapshot);
7331
7331
  if (liveTurn) {
@@ -7392,10 +7392,15 @@ export class BridgeSessionCore {
7392
7392
  }
7393
7393
  async resumeInterruptedTurnAfterRestart(preview, target) {
7394
7394
  const locale = this.localeForChat(preview.scopeId);
7395
- const binding = {
7396
- threadId: preview.threadId,
7397
- cwd: this.store.getBinding(preview.scopeId)?.cwd ?? this.config.defaultCwd,
7398
- };
7395
+ const storedBinding = this.store.getBinding(preview.scopeId);
7396
+ const binding = storedBinding?.threadId === preview.threadId
7397
+ ? storedBinding
7398
+ : {
7399
+ chatId: preview.scopeId,
7400
+ threadId: preview.threadId,
7401
+ cwd: storedBinding?.cwd ?? this.config.defaultCwd,
7402
+ updatedAt: Date.now(),
7403
+ };
7399
7404
  const input = [{
7400
7405
  type: 'text',
7401
7406
  text: t(locale, 'restart_auto_resume_prompt'),
@@ -7403,16 +7408,20 @@ export class BridgeSessionCore {
7403
7408
  }];
7404
7409
  try {
7405
7410
  await this.sendTyping(preview.scopeId);
7406
- const turnState = await this.startTurnWithRecovery(preview.scopeId, binding, input, {
7411
+ const readyBinding = await this.ensureThreadReady(preview.scopeId, binding, {
7407
7412
  recoverMissingThread: false,
7408
7413
  });
7414
+ const turnState = await this.startTurnWithRecovery(preview.scopeId, readyBinding, input, {
7415
+ recoverMissingThread: false,
7416
+ });
7417
+ const cwd = readyBinding.cwd ?? this.store.getBinding(preview.scopeId)?.cwd ?? this.config.defaultCwd;
7409
7418
  if (turnState.collaborationMode === 'plan') {
7410
7419
  this.store.setChatCollaborationMode(preview.scopeId, DEFAULT_COLLABORATION_MODE);
7411
7420
  }
7412
7421
  await this.registerActiveTurn(preview.scopeId, target.chatId, target.chatType, target.topicId, turnState.threadId, turnState.turnId, preview.messageId, {
7413
7422
  input,
7414
7423
  threadId: turnState.threadId,
7415
- cwd: binding.cwd,
7424
+ cwd,
7416
7425
  chatId: target.chatId,
7417
7426
  chatType: target.chatType,
7418
7427
  topicId: target.topicId,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@foxden-app/foxclaw",
3
- "version": "0.5.28",
3
+ "version": "0.5.30",
4
4
  "description": "Foxden local execution claw for controlling Codex from trusted chat interfaces.",
5
5
  "type": "module",
6
6
  "main": "dist/main.js",