Commit Graph

2154 Commits

Author SHA1 Message Date
程序员阿江(Relakkes) 6bab6fbe97 feat(desktop): preview documents in the workspace and images in chat
Documents the agent writes open in the workspace panel instead of another
application, and local images the agent mentions show up in the conversation.

Workspace preview
- PDF (pdf.js with its own layout and text layer), Word (docx-preview inside a
  scripts-disabled sandboxed iframe) and Excel (SheetJS; .xlsx, .xlsm, .xls) open
  in the side panel with zoom and fit, per-file scroll/zoom/sheet memory, and a
  refresh when the agent rewrites the file. The engines load lazily.
- Bytes come from a new GET /api/sessions/:id/workspace/raw route, with an
  extension allowlist, size caps, the workspace boundary and canonical-path
  checks. The file endpoint returns metadata and a version for documents. The
  client fetches with the bearer credential, so it works in Electron, LAN H5 and
  remote access alike.
- Chat links, output cards and the change card open pdf/docx/xlsx in the
  workspace; documents outside the workdir still go to the system application.
- Image viewer with fit, zoom and pan, and "open in system app".

Chat images
- Markdown images outside the workdir, at ~/, C:\ and file:// paths render, open
  in the viewer, and offer "open original" (pictures only).
- Images returned by tools such as Read appear as thumbnails under the call.

Hardening found in review
- previewFsUrl escapes each path segment; a double-escaped %2e%2e used to leave
  /preview-fs/<session>/.
- The CORS, API timing and remote-access header decorators set headers in place.
  Rebuilding the response buffered whole files in memory and dropped
  Content-Length.
- The engine owns the pdf.js worker, so closing one document no longer fails the
  next open.
- Office archives are inflated in steps to check their real sizes, not the sizes
  they declare.
- A viewer that fails to load stays in its panel instead of taking the window down.

Adds pdfjs-dist, docx-preview, xlsx (SheetJS 0.20.3 tarball) and fflate as
renderer dev dependencies; Vite bundles them.

Refs #1397
2026-09-30 01:53:47 +08:00
程序员阿江(Relakkes) 2ec845d084 fix(desktop): include configured Fable models in model selector 2026-09-28 02:29:56 +08:00
程序员阿江(Relakkes) 7a82ce9aec feat(skills): merge release announcement workflow 2026-09-28 02:19:43 +08:00
程序员阿江(Relakkes) 2ad56231d1 feat(skills): add release announcement workflow 2026-09-28 02:19:33 +08:00
程序员阿江(Relakkes) c37ab2da13 docs: correct Windows signing status in v0.6.7 release notes v0.6.7 2026-09-28 01:47:15 +08:00
程序员阿江(Relakkes) 92561bcb28 release: v0.6.7 2026-09-28 01:33:38 +08:00
程序员阿江(Relakkes) ab5f66f101 Merge commit '9d598003b' 2026-09-28 01:02:41 +08:00
程序员阿江(Relakkes) 9d598003b0 fix(runtime): recover malformed tool arguments through the agent loop 2026-09-28 01:02:36 +08:00
程序员阿江(Relakkes) ade9474096 fix(desktop): restore workspace side chat scrolling 2026-09-28 00:10:37 +08:00
程序员阿江(Relakkes) a7bc888a07 fix: use model decisions for automatic question answers 2026-09-28 00:00:16 +08:00
程序员阿江(Relakkes) 417ca5f283 fix(agent-teams): dismiss approved configuration and preserve runtime controls 2026-09-27 23:47:38 +08:00
程序员阿江(Relakkes) fadaa775ac fix(desktop): resolve output files against declared project roots
Keep explicit file identities across output cards and prose links, preserve
shell outputs without checkpoint evidence, and retain a file card when
video preview fails. Add cross-project path and opening regressions.
2026-09-27 23:22:40 +08:00
程序员阿江(Relakkes) e47e234987 fix(desktop): preserve local Markdown file link targets 2026-09-27 20:59:42 +08:00
程序员阿江(Relakkes) 45113d11df fix: finalize stopped teammates when roster removal fails 2026-09-27 19:24:52 +08:00
程序员阿江(Relakkes) d4e53a9fab fix(desktop): wrap activity profile names 2026-09-27 19:24:52 +08:00
程序员阿江(Relakkes) 700f7b9dcc fix: preserve Space Bunny images through OpenCode Go 2026-09-27 19:24:52 +08:00
程序员阿江(Relakkes) f8d0406d6e fix: preserve session metadata across oversized messages 2026-09-27 19:24:52 +08:00
程序员阿江(Relakkes) 26d3a3d558 fix: restore session model selections and normalize runtime effort 2026-09-27 19:24:52 +08:00
gugugaga 9ce414ae4c fix(provider): honor configured output budget for direct Anthropic providers (#1392)
* fix(provider): honor configured output budget for direct Anthropic providers

Anthropic-format providers connecting directly to an upstream could not set a
reply output budget: the field was hidden in the UI, stripped before
persistence, and dropped by a local-proxy-only gate at request build time, so
low-cap relay upstreams returned 400/truncation with no user recourse.

Surface the budget for Anthropic, persist it as a budget-only object so stale
OpenAI-compatibility options cannot leak, and remove only the numeric gate in
getConfiguredProviderOutputBudget. getOutputBudgetHeaders keeps its local-proxy
guard so the internal provenance header never reaches an external provider.

Adds kernel/desktop unit tests for the direct-budget path and the provenance
non-leak.

* fix(provider): disable optional manual thinking below its token minimum

---------

Co-authored-by: gugugaga <267102352+omazili-guga@users.noreply.github.com>
Co-authored-by: 程序员阿江(Relakkes) <relakkes@gmail.com>
2026-09-27 19:11:04 +08:00
yuehua-meng 3326a880e6 teamLib 里一半写路径绕过文件锁,且所有写都是非原子裸写 (#1387)
* fix(swarm): serialize team config writes under the file lock

Route every team config.json mutation through mutateTeamFileAsync so each update reads its snapshot inside the lock, and publish via a same-directory temp file + rename with bounded Windows retry instead of truncating the live file. Await the now-async writers in the UI and CLI callers.

* test(teams): cover TeamsDialog mode cycling and teammate removal

The changed-lines gate scored TeamsDialog.tsx as 0/20 because no test
imported it, so the new async removeMemberFromTeam/setMemberMode paths went
unrecorded in LCOV. Drive both the list and detail views through input
handlers and keybindings, including the rejection paths, to bring
changed-lines coverage from 84.91% to 93.53%.
2026-09-27 19:02:19 +08:00
MikhailTail 760a858e8e fix(computer-use): 修正 Windows 上垂直滚动方向相反 (#1378)
executor 的 delta 是平台原生的滚轮单位,正值向上滚(MOUSEEVENTF_WHEEL
的语义),macOS helper 也是同一套约定。但 handleScroll 把
scroll_direction "down" 映射成了正 dy,于是垂直方向整个反了:down 实际
向上滚,且目标面板已在顶部时表现为"完全无反应"。

只翻转垂直轴。水平轴的映射(right → +dx)与 MOUSEEVENTF_HWHEEL 的正值
语义一致,保持不变。

同时在 platformRouting.test.ts 的 win32 fixture 里记录 scroll 的 delta,
并断言 down → -amount、up → +amount,锁住该映射。

Co-authored-by: 程序员阿江-Relakkes <relakkes@gmail.com>
2026-09-27 19:01:57 +08:00
Logan-Luo 462a8dfde5 fix(title): budget thinking models in AI session title generation (#1340) (#1382)
Co-authored-by: realLoganLuo <realLoganLuo@users.noreply.github.com>
Co-authored-by: 程序员阿江-Relakkes <relakkes@gmail.com>
2026-09-27 18:57:01 +08:00
程序员阿江(Relakkes) 76619c9c64 fix(site): choose first-visit language from browser 2026-09-27 01:35:49 +08:00
程序员阿江(Relakkes) bb84a9621d feat(site): redesign landing page and documentation 2026-09-27 01:05:17 +08:00
程序员阿江(Relakkes) 1ee148e643 merge: integrate remote main with local development 2026-09-26 11:23:08 +08:00
程序员阿江-Relakkes 3e238eef4c Merge pull request #1381 from yuehua-meng/fix/im-session-recovery
IM 临时重连失败,会把续聊变成新会话
2026-09-26 11:21:00 +08:00
yuehua-meng 66159ae948 test(desktop): deterministically advance rAF frames in virtual unmount test 2026-09-26 02:00:27 +08:00
yuehua-meng b7a91f2734 test(adapters): cover reconnect failures in IM commands 2026-09-25 22:09:09 +08:00
程序员阿江(Relakkes) 4ef3867ef3 fix(server): bound session discovery and report history page limits 2026-09-25 20:08:56 +08:00
程序员阿江(Relakkes) 143e4dea13 fix(server): allow trusted dev H5 control preflight 2026-09-25 19:40:04 +08:00
程序员阿江(Relakkes) 3817dd74f8 fix(desktop): clear rewound turn review state 2026-09-25 19:39:57 +08:00
程序员阿江(Relakkes) f49e6ffae8 fix: keep scheduled task history readable after concurrent runs 2026-09-25 19:39:50 +08:00
程序员阿江(Relakkes) 98b67dda4d fix: preserve streamed reply when generation stops 2026-09-25 19:39:45 +08:00
程序员阿江(Relakkes) f84a456977 fix: repair team review results and shutdown visibility 2026-09-25 19:39:40 +08:00
yuehua-meng cd982986a1 fix(adapters): preserve IM session binding on transient reconnect failures 2026-09-25 18:53:54 +08:00
程序员阿江(Relakkes) ddef7950ff merge: update OAuth model support 2026-09-25 17:59:01 +08:00
程序员阿江(Relakkes) 9438743665 feat: update OAuth models and add configurable mappings 2026-09-25 17:58:47 +08:00
程序员阿江(Relakkes) 2cac7c471b feat(agent-teams): add human review and per-member runtime selection 2026-09-25 17:47:39 +08:00
程序员阿江(Relakkes) 8e8e92c82b feat(connectors): add Remotion skill plugin 2026-09-25 17:43:20 +08:00
程序员阿江(Relakkes) 089ba2063d merge: integrate workspace side chats with local main 2026-09-25 15:56:54 +08:00
程序员阿江(Relakkes) c5892b5353 feat: add contextual side chats in desktop workspace 2026-09-25 15:55:13 +08:00
Relakkes Yang 068b3ebdbd feat(desktop): add chat appearance preferences (#1374)
Add independent chat font, text size and reading width settings with preview, migration and cross-window sync. Preserve virtualized reading positions when appearance changes.

Validation: 499 focused tests, lint/typecheck, build, persistence upgrades, chat contracts and 8 offline agent scenarios passed. Full desktop/server/coverage gates remain affected by documented Windows baseline failures; macOS native rendering was not tested.
2026-09-25 14:52:27 +08:00
程序员阿江(Relakkes) 8dcaa942e7 Merge workspace tree and preview fixes for #1361 2026-09-25 14:51:03 +08:00
程序员阿江(Relakkes) 58c787f9d5 fix(desktop): restore workspace tree actions and independent preview controls 2026-09-25 14:50:52 +08:00
程序员阿江(Relakkes) afbf56d0d4 Merge commit '20bb48128' 2026-09-25 14:50:42 +08:00
程序员阿江(Relakkes) 20bb48128b fix: recover oversized conversations using provider token limits 2026-09-25 14:50:35 +08:00
程序员阿江(Relakkes) f26c1770ea fix(desktop): prevent duplicate prompt replay after guiding a conversation 2026-09-25 14:26:50 +08:00
程序员阿江(Relakkes) 7e7d455249 fix: align Claude OAuth with 2.1.281 and harden CLI compatibility 2026-09-25 02:34:18 +08:00
程序员阿江(Relakkes) 5d6f5d6609 feat(desktop): auto-answer pending questions after timeout 2026-09-24 18:57:37 +08:00
程序员阿江-Relakkes 2d748a9369 Merge pull request #1372 from yuehua-meng/fix/memory-save-race
fix(desktop): advance memory save revision to avoid self-block during…
2026-09-24 18:03:06 +08:00