Commit Graph

2203 Commits

Author SHA1 Message Date
程序员阿江(Relakkes) f0a016d3cf fix(desktop): keep the window gutter on the panel paper
With the workspace panel open, the titlebar's right section was paper right
up to a 16px notch of sidebar grey welded to the window's top-right corner.

The paper was painted by the window header, but the drag gutter — and, on
Windows, the window controls — are its transparent siblings inside the same
frame, so whatever their parent showed came through. Closed, that is
invisible: the whole strip is the sidebar's ground and the gutter just
continues it. Open, it is a strip of trough next to a white panel.

The frame now owns the ground for everything above the panel, so the header,
the gutter and the native controls share one surface.
2026-09-14 11:56:37 +08:00
程序员阿江(Relakkes) dac0bf5477 feat(desktop): open the whole output-target card, not just its icon
The trailing icon was the only hit area on an assistant output card, so
opening a generated file meant aiming at a 32px target on the far right while
the file name and path sat inert. The row body is now a real button — icon,
name, badge and path all open the target, with a pointer cursor, a row hover
fill and a keyboard focus ring, and a label that names the file.

The open-with control is untouched and still opens its menu without also
opening the file. Text inside the row is no longer drag-selectable, which is
how browsers treat buttons; the path stays copyable from the open-with menu.
2026-09-14 11:37:57 +08:00
程序员阿江(Relakkes) 57eac9fbd9 feat(desktop): open every file-tree pick as its own tab
A single click in the file tree opened a VSCode-style preview tab, and the
next click replaced it — picking four files left one tab, which read as a
hard limit. Every pick now opens a permanent tab (repeat picks of one path
still dedup in the store), and the blank-placeholder takeover extends from
blank browser tabs to the empty Files launcher, so the first pick fills the
launcher tab instead of stranding it.
2026-09-14 10:44:22 +08:00
程序员阿江(Relakkes) 1170f2ddc7 fix(desktop): route CJK filenames instead of ignoring their clicks
Output cards and Open-with menus for files like README-拍摄大纲.md rendered
fine but died silently on click: card creation reads real paths from the turn
checkpoint, while the click route ran parseFilePathRef whose segment charset
was ASCII-only, classifying the href as `ignored`.

parseFilePathRef now matches on a Unicode-tolerant segment set — the whole
string is already delimited by the markdown span or href, so the prose-bleed
concern that keeps the prose scanner ASCII-only does not apply.
2026-09-14 10:44:22 +08:00
程序员阿江(Relakkes) 91059414b2 feat(desktop): add next-question navigation to ask-user-question prompts
Multi-question prompts get a Next button at the end of the action bar,
disabled until the question on screen is answered. Picking a single-select
option advances on its own, matching ChatGPT's ask_user_input card;
multi-select, free text and the last question stay put, and nothing
auto-submits.
2026-09-14 10:42:17 +08:00
程序员阿江(Relakkes) f7fcbc2d8a merge: integrate local main with skills and connectors 2026-09-14 10:14:37 +08:00
程序员阿江(Relakkes) c4a4178f18 feat(desktop): unify skills and connectors with managed installation and mentions 2026-09-14 10:14:15 +08:00
程序员阿江(Relakkes) f5dd740faa fix(network): allow long AI timeouts and default to 30 minutes 2026-09-14 09:12:59 +08:00
程序员阿江(Relakkes) 8d7b5ea56b feat(h5): persist pairing and add secure mobile settings
Add mobile provider and General settings while preserving desktop behavior.
Harden remote credential handling, ngrok session ownership and consent upgrades.
2026-09-14 00:38:55 +08:00
程序员阿江(Relakkes) 9fce822df3 feat: add secure ngrok remote access with device pairing 2026-09-13 23:28:30 +08:00
程序员阿江(Relakkes) 57feabde05 fix(desktop): align terminal themes and streamline workspace controls 2026-09-13 22:10:30 +08:00
程序员阿江(Relakkes) 69e8c014af fix(desktop): keep workspace browser visible beneath native menus
Use a native Electron menu with validated host actions and lifecycle cancellation. Preserve browser state, persistent annotations, and disabled page actions on blank tabs.
2026-09-13 22:01:39 +08:00
程序员阿江(Relakkes) b39945fcda fix(desktop): rename provider settings to model management across locales 2026-09-13 21:33:04 +08:00
程序员阿江(Relakkes) 6f0650c5cb fix(workspace): align resource panels and complete backend state flows
Unify workspace controls and resource tabs, refine browser, file and diff
interactions, and remove superseded panels. Preserve resource lifecycles,
refresh Git comparisons after external changes, and correlate terminal
startup events across IPC.
2026-09-13 16:02:58 +08:00
程序员阿江(Relakkes) dbc1e483ca feat(desktop): rebuild the workspace as a unified tab controller
Replaces the two-mode right-side panel (files ↔ browser) with one controller
that owns layout, navigation and resource lifetime for four content kinds:
files, browser pages, Git review and terminals. Follows the Codex desktop
reference captured in the workspace-refactor plan.

The old panel conflated three things that have different lifetimes: a UI tab,
the content it shows, and the process behind it. That is why switching modes
destroyed a live page, why a second link overwrote the first, and why the
toolbar button reported "show workspace" while the workspace was already open.
Splitting them is the whole change:

- workspaceStore    layout, docks, tab order, preview/pinned, focus
- workspaceContentStore / workspaceReviewStore   file and diff data
- host services     webContents and PTYs, keyed by resource id, never by tab id

Consequences that fall out of the split:

- Hiding the panel, switching tabs and switching tasks keep every page and PTY
  alive; only closing a tab releases them.
- A terminal moves between the side and bottom docks without restarting.
- Pages live in a shared persistent partition with native navigation history;
  popups become sibling tabs in the task that opened them.
- Review names both sides of every comparison and performs real index and
  working-tree writes, guarded by a snapshot token and a backup-first revert.

Also adds versioned workspace persistence with a forward migration: terminals
come back stopped and restartable, pages reload lazily, and nothing holding
content, cookies or handles is written to storage.

The previous implementation is no longer reachable but is left in place: the new
file tab does not yet reproduce workspace search, quick-open or the changed-file
view, so removing it now would lose those. Real three-platform Electron
acceptance (plan item A10) has not been performed; all evidence here is
deterministic tests, type checks and a packaging smoke.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-12 17:17:39 +08:00
程序员阿江(Relakkes) 85e7f3a20e release: v0.6.2 v0.6.2 2026-09-11 18:49:24 +08:00
程序员阿江(Relakkes) 1471c46295 merge: sync origin/main before v0.6.2 release 2026-09-11 18:49:20 +08:00
程序员阿江(Relakkes) 920a4a90c9 fix(plan-mode): approve plans with an explicit permission mode (#1254)
Approving a plan only sent the plan's addRules, so the CLI restored the mode
from prePlanMode and fell back to default when a session had nothing to
restore (it was launched in plan mode) — implementation then asked for
permission on every tool call. The desktop plan dialog now offers "Approve &
auto-accept edits" and "Approve & bypass permissions", mirroring the official
terminal dialog, and pins the chosen mode through a setMode permission update.

A mode delivered through a permission update also skipped the plan exit
transition: ExitPlanMode's cleanup only ran while the mode was still plan, so
the exit flags, the exit/re-entry reminders, the auto-mode teardown and the
rules stripped on entry were left half-applied. That path now reuses the same
transition the CLI runs for its own switches, and refuses bypassPermissions
when the session cannot use it.

Fixes #1254

Validation: new PermissionUpdate regressions plus the plan dialog tests;
src/utils/permissions + src/services/tools + src/cli 103 passed; check:policy
330 passed; desktop suite 330 files passed; compiled claude-sidecar smoke
passed; real-CLI A/B keeps the exit state identical with and without the pinned
mode.
2026-09-11 18:10:31 +08:00
c020627 b96f8df97d docs(desktop): add missing allowed project directories entry to English remote page 2026-09-11 17:29:04 +08:00
c020627 5b5227b52f docs(im): add missing allowed project directories section to English overview 2026-09-11 17:24:13 +08:00
程序员阿江(Relakkes) 05aad0c35d docs: move community group and donation sections above desktop highlights 2026-09-11 17:20:31 +08:00
程序员阿江-Relakkes ecb97ffe01 Merge pull request #1313 from c020627/docs-readme-im-platforms
docs(readme): list WeCom, QQ and Slack IM platforms
2026-09-11 17:12:48 +08:00
程序员阿江(Relakkes) 623d082e23 feat(cli): drop automatic Claude attribution in commits and PRs (#1274)
Remove getAttributionTexts/getEnhancedPRAttribution and the three prompt
injection sites (BashTool system prompt, /commit, /commit-push-pr) so commit
messages and PR bodies no longer carry Co-Authored-By or "Generated with
Claude Code".

attribution and includeCoAuthoredBy stay in the settings schema as
deprecated, ignored fields: validateSettingsFileContent() parses with
.strict(), and dropping them outright would make existing settings files
invalid and silently disable the settings edit guard for those users.
2026-09-11 16:51:50 +08:00
程序员阿江(Relakkes) 446cc47846 fix(streaming): scale the overall stream cap with the user request timeout
The desktop injects CLAUDE_STREAM_MAX_DURATION_MS=600000, a wall-clock cap
that no incoming chunk resets. Slow local models (LM Studio / qwen3) and very
large generations legitimately keep streaming thinking_delta past ten minutes,
so the stream was killed mid-response even though it was alive and producing
content (#1307, #1275). Raising "请求超时" could not help: the cap was
hardcoded, and the first-token budget it was meant to raise was silently
bounded by that same 600s.

Derive the cap from the user's request timeout, never below the existing 600s
default so the #766 trickle protection is not tightened when a short first-byte
budget is configured. Push the derived value through the per-turn env hot
update as well — otherwise a session that is already running keeps its spawn
time 600s no matter what the user configures, which is exactly the retry path
the reports describe.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-11 16:41:01 +08:00
程序员阿江(Relakkes) 6d09d9f899 fix(computer-use): support cell-scoped JavaScript timers
Keep timers inside the guest realm and cancel them when a cell ends.
Preserve parsed statement boundaries when rewriting persistent calls.
2026-09-11 16:34:32 +08:00
程序员阿江(Relakkes) d5c02b43d9 fix(chat): scope file changes to their turns and collapse summaries (#1305)
Prevent carried-forward checkpoints from attributing old edits to later
chat-only turns while retaining legacy snapshot evidence. Default file
summaries to collapsed and preserve disclosure state and return focus.

Fixes #1305

(cherry picked from commit d03898d5203fa73d3c6c9ac66ca8c1c23ee36a59)
2026-09-11 16:16:42 +08:00
程序员阿江(Relakkes) 0bcbfe6921 fix(computer-use): enforce cursor regression and package gates
Route native-only changes through macOS checks and verify relocated cursor resources in final packages. Reject resources that escape the app and exercise visible click feedback against a disposable native receiver.

Connect the regressions to required checks and capture shell fixture output through temporary files.
2026-09-11 15:53:22 +08:00
程序员阿江(Relakkes) a0a8fd4b45 fix(computer-use): load cursor resources from packaged apps
Resolve optional click animation assets from the running helper bundle.
Avoid SwiftPM Bundle.module's fatal fallback to a build-machine path so
visible clicks can return successfully and keep the daemon alive.

Keep procedural feedback when optional frames are absent or unreadable.
Add an input-free resource probe and run it against relocated release and
staged helper apps. Cover standard Resources copying and reject probes
that load from an external build directory.

Validation: 524 XCTest and 15 Swift Testing cases passed, including eight
new resource regressions. Build fixtures, compiled sidecar smoke, Electron
checks, local packaging and final relocated-package probes passed.
2026-09-11 15:09:50 +08:00
程序员阿江(Relakkes) 17f194df40 fix(proxy): preserve protocol completion and output budget contracts 2026-09-11 14:22:50 +08:00
c020627 9f344a2b58 docs(readme): list WeCom, QQ and Slack IM platforms 2026-09-10 21:58:40 +08:00
Relakkes Yang 7b80cef463 fix(windows): resolve encoded Bun paths for packaged images v0.6.1 2026-09-10 21:42:18 +08:00
程序员阿江(Relakkes) ecbd6b0e7f release: v0.6.1 2026-09-10 21:01:19 +08:00
程序员阿江(Relakkes) dc9963fe5b docs(release): prepare v0.6.1 notes
Collect the planned Computer Use, session history, provider and desktop
changes in Chinese and English release notes.
2026-09-10 20:59:05 +08:00
程序员阿江(Relakkes) ccc48df0e0 feat(api): align Codex request routing and tool payloads
Preserve optional function arguments with explicit non-strict schemas.
Send stable session and thread identities, retain routing state through
one user turn and dispose it on completion or cancellation.

Compress Codex OAuth request bodies with zstd when supported, retaining
readable request audit data and a local compatibility opt-out without
replaying submitted requests.

Validation: 352 focused offline API/provider tests passed. The real query
loop regression covers tool continuation, next-turn reset and cleanup.
Selected repository verification passed with mocked transports.
2026-09-10 20:58:55 +08:00
程序员阿江(Relakkes) 8336cd8cc9 feat(computer-use): finalize native input and global app consent
Route coordinate clicks through the exact AX hit, reuse render-local
attributes and keep keyboard macros within validated native boundaries.
Preserve lossless capture evidence while returning bounded model images,
and propagate cancellation through daemon and lock acquisition.

Remove legacy per-app restrictions after feature-wide consent on both
platforms while retaining global disablement and target validation.
Include native helpers, regression tests and a stable receiver fixture.

Validation: 224 focused TypeScript tests, 516 XCTest cases and 15 Swift
Testing cases passed. Local sidecar and Electron builds, development
package creation and package smoke checks passed.
2026-09-10 20:58:39 +08:00
程序员阿江(Relakkes) 4fc3173cd1 merge: integrate QA-003 active-session lifecycle fix 2026-09-10 19:08:48 +08:00
程序员阿江(Relakkes) fd395ab900 fix: preserve active session checkpoints after retention cleanup 2026-09-10 19:07:57 +08:00
程序员阿江(Relakkes) c6a00fbaa0 merge: integrate QA-003 transcript queue cleanup fix 2026-09-10 18:56:29 +08:00
程序员阿江(Relakkes) c5ff34ff56 fix: discard stale transcript queues after retention cleanup 2026-09-10 18:55:57 +08:00
程序员阿江(Relakkes) b0b9d325cf merge: integrate QA-003 deleted-session exit fix 2026-09-10 18:33:43 +08:00
程序员阿江(Relakkes) fac81ecc37 fix: keep runtime exit metadata from recreating deleted sessions 2026-09-10 18:33:03 +08:00
程序员阿江(Relakkes) 53e643d814 merge: integrate QA-003 checkpoint follow-up 2026-09-10 18:23:54 +08:00
程序员阿江(Relakkes) c068246c15 fix: allow checkpoint reads for in-memory sessions 2026-09-10 18:23:28 +08:00
程序员阿江(Relakkes) dcf20fe7dd merge: integrate QA-005 MCP disable fix 2026-09-10 18:10:55 +08:00
程序员阿江(Relakkes) a24931002d fix(mcp): enforce disabled state across active sessions 2026-09-10 18:09:43 +08:00
程序员阿江(Relakkes) 7004677af1 merge: integrate QA-003 retention fix 2026-09-10 17:59:49 +08:00
程序员阿江(Relakkes) 85650d70db fix: honor disabled session retention across writes and resume 2026-09-10 17:58:58 +08:00
程序员阿江(Relakkes) dcc38d1d88 merge: integrate QA-006 provider 1m fix 2026-09-10 17:57:30 +08:00
程序员阿江(Relakkes) e2478bb083 fix(desktop): preserve provider 1m flags in runtime selection 2026-09-10 17:56:12 +08:00
程序员阿江(Relakkes) 2da1e9a7f0 merge: add computer-use screenshot pixel dimensions 2026-09-10 16:30:56 +08:00