@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 +20 -0
- package/dist/controller/controller.js +16 -7
- package/package.json +1 -1
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
|
|
7396
|
-
|
|
7397
|
-
|
|
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
|
|
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
|
|
7424
|
+
cwd,
|
|
7416
7425
|
chatId: target.chatId,
|
|
7417
7426
|
chatType: target.chatType,
|
|
7418
7427
|
topicId: target.topicId,
|