Commit Graph
46 Commits
Author SHA1 Message Date
1cc040b535 fix(client): clarify mobile native-open feedback (#6660)
* feat(ui-open-in-app): announce settled open outcomes app-wide

The shared file and directory opener reported a nullable failure, so it could
not tell a handoff the Host acknowledged from a gesture an adapter deliberately
dropped — a duplicate already in flight, or a controller disposed before the
gesture ran. Its notice also lived inside the control that asked for the open,
so it died with the panel, tab, or card the gesture started in.

Replace that with a discriminated outcome on both controllers and adapters, and
report each settled gesture into one `shell.overlay` entry that renders the
app-wide Toast: the Session-header command, the files-tab and Session-header
buttons, both document-preview controls, and both delivery-card controls.
`{ kind: 'skipped' }` announces nothing, because no handoff happened, so card
status and the toast never disagree about what settled.

Name the action for what it does on every surface — "Open on your computer" —
instead of after whichever application would take the handoff. The application
stays supplementary, in the tooltip beside the shortcut it runs under, which is
what the accessible name, visible text, and command label now share.

* fix(client): unify open-in-app feedback

* fix(client): report native open outcomes accurately

* fix(client): tighten open feedback outcomes and lifecycle tests

* test(ptc): synchronize hot-loop log capture

Observe a synchronous child marker before cancellation so the console retention assertion does not depend on completing Node startup within one second.

* test(bench): interleave scaling samples

* fix(client): scope native-open feedback to mobile

Explain native opens on another device for mobile and PWA clients while keeping desktop success silent. Preserve failure feedback after the initiating surface closes and ignore skipped requests.

Remove unrelated benchmark and PTC test changes and retain existing button labels.

Refs #6097

---------

Co-authored-by: EricMoin <[email protected]>
Co-authored-by: EricMoin <[email protected]>
2026-10-26 17:16:44 +08:00
TurtleandTianyi Cui 747cbf13b6 Describe the ask approval policy by its meaning
Replace the literal "Approval policy: ask." runtime-context sentence
with a statement parallel to the never-policy sentence, and refresh the
current-generation fixtures that persist it.

Co-authored-by: Tianyi Cui <[email protected]>
2026-10-22 23:13:19 +08:00
5ff29190ed feat(ui): add navigation entry customization (#6247)
* fix(ui): avoid tooltip trigger overlap when a side fits

* feat(ui): add navigation entry customization

* fix(test): keep tooltip geometry independent of JSX types

* fix(ui): align customization catalogs and integration fixtures

* test(ui): complete customization lifecycle and release integration coverage

* fix(ui): return entry discovery to the installed plugin list

* docs: refresh module graph for entry customization

* build: refresh workspace links for the moved entry customization package

* docs: regenerate catalogs and pairing hashes for the moved entry customization package

* test(web): cover default-loaded entry customization in the Web e2e

* test(ui): describe entry customization as a browser plugin in the host entry spec

* build: order entry customization publication files as workspace constraints require

* test(release): drop the moved entry customization package from the experimental family list

* style(ui): use the shared focus ring color on entry customization triggers

* test(web): re-record goldens for the default-loaded More navigation menus

* test(web): add the More conversation views trigger to the remaining CI-reported goldens

* docs: record region-owned pins for plugin entry customization

* refactor(ui): rebuild entry customization on region-owned pins and More menus

- Each navigation region (left sidebar, Conversation header, right sidebar
  guide) persists its own unpinned list under
  dsh.slot.manual-order.<list slot key>.v1, filters its own launchers, and
  draws its own More button and Menu around its actions slot.
- ui-entry-customization only registers the shared menu rows (entries with
  pin buttons, Browse other plugins, Create your plugin) into the three
  actions slots and keeps no state.
- Remove ctx.layout.entryVisibility, the plugin store, left-sidebar drag
  reordering, and agentPresetNavigation; ui-layout and ui-agent-preset match
  release/dsh-0.2.1 again.
- Keep the release <nav> and Conversation tab-bar visibility conditions.
- Move the More glyph into ui-primitives as IconAppsAddOutline{Regular,Medium}.

* docs: compile the entry customization owner props example

* docs(ui): describe the wrapping Conversation tab row in the header comment

* fix(ui): return New Session to the Workspace blank and its unsent draft

- New Session (startSession without options) takes the blank-reuse path
  again instead of creating a fresh Session on every call, which hid the
  previous blank and its unsent draft since a5c9c2aaeef (#5775).
- A request that names an Agent preset skips blanks listing a different
  preset, so Creator entries no longer take over an ordinary draft.
- Record the change in a v0.2.1-rc.2 upgrade guide; the Host refresh of a
  stale loaded blank stays deferred (see the Agent Note).

* docs: regenerate the Cordis inspect catalog for New Session blank reuse

* fix(ui): keep the selected entry visible while unpinned

- Left-sidebar rows and View tabs keep the selected entry, with aria-current or aria-selected, until another entry is selected.
- Entry menu Creator action takes no region argument; the registration's region selects the prompt.
- Document the 2px panel-row and 32px View-tab gaps; drop commit hashes from the New Session Agent Note.

* fix(ui): leave a blank of another preset unstaged when starting Creator

startCreatorDraft stages cordis only when the main blank lists no preset or already lists cordis; navigation opens a separate Creator blank otherwise, so a Standard draft blank keeps its preset.

* feat(ui): choose whether a draft prompt replaces, appends to, or keeps an existing draft

- DraftInitializationOptions gains whenDraftExists ('replace' | 'append' | 'keep', default 'keep'); clearPreviousDraft stays and maps to 'replace' only when whenDraftExists is omitted.
- Append adds the prompt as new paragraphs after the existing text and references; attachments stay in every mode.
- The three Create your plugin entries append their regional prompt.

* test(web): align e2e with New Session blank reuse and the visible selected entry

* refactor(ui): share the draft paragraph writer between setDraft and appendDraft

---------

Co-authored-by: Yif <[email protected]>
Co-authored-by: imccyu <[email protected]>
2026-10-20 15:17:13 +08:00
fz 88a0be8486 Merge master after separating plugin-manager fix 2026-10-12 13:04:25 +08:00
imccyu b10a605e6b test(web): add harness dev context lines to recorded web sessions
Each recorded runtime-context snapshot with optional contexts gains the
tokenized checkout and Web GUI URL lines, matching the refresh output of
the code-language scenario, where only that message changed. The
minimal-preset snapshot suppresses optional context and stays unchanged.
2026-10-11 23:25:22 +08:00
fz 54c13688a8 fix(jobs): use one durable job id and ordered shutdown 2026-10-08 16:17:52 +08:00
fz 2be7329142 fix(jobs): preserve lifecycle order and headless settlement 2026-10-08 12:47:48 +08:00
fz 12dee990e1 test(web): refresh job lifecycle replay fixtures after master sync 2026-10-08 11:36:04 +08:00
Tianyi Cui 2489bbba16 test(session): acknowledge metadata and replay corrected directory state 2026-10-06 01:31:52 +08:00
Tianyi Cui 6d0533df47 test(web): refresh directory context and recorded file targets 2026-10-06 01:31:51 +08:00
Chinesezjc 5e9399f6c8 Merge origin/master into feat/preset-scoped-schedule-tools
Resolutions:
- `docs/tool-catalog.{md,i18n.yaml}` regenerated from the merged tool sources.
2026-09-29 11:43:44 +08:00
yixiangihsiang ad008e2ea5 fix(client): refine chat duration, theme, and shortcuts 2026-09-28 21:32:57 +08:00
Chinesezjc 574bb7e7da test(web): refresh the recorded Web sessions for the preset clock
The clock row is preset-level, so a `standard`, `cordis`, or `ptc` session
appends one reading per eligible step; the recorded sessions carry that
message and the identifier shifts it causes. The plugin manager loses the
clock wording from the bundle description.
2026-09-26 10:28:58 +08:00
turtle1999 374b9cc1fb test(web): align shipped composition fixtures with disabled scheduling 2026-09-24 20:41:51 +08:00
Turtle 217fb65ac7 Merge pull request #5133 from deepseek-harness/turtle/time-context-ten-minutes
feat(time-context): default injections to ten-minute intervals
2026-09-24 18:01:18 +08:00
Chinesezjc e896737840 feat(schedule): ship Schedule in the default Web composition
The Web bundle now mounts `time-context` and `schedule` and leaves the
`ui-schedule` client row enabled, so the Automation tasks page, the Session
reminder catalog, and the `schedule_*` tools work without an overlay. Both
packages join the bundle's declared dependencies, and the example overlay is
deleted: re-inserting its rows would mount both Host plugins twice.

The fixed-rate floor drops from 300 to 60 seconds across the Host decoder,
the create and update validation, the model-visible tool schema, and the
client's per-unit floors.

Web recorded sessions and header sidecars are refreshed for the readings
`time-context` now appends; `normalizeWebSessionVolatiles` tokenizes their
sampled instant, browser zone, and elapsed duration so replay stays stable.
2026-09-24 16:11:52 +08:00
imccyu 96a4607ba2 test(chat): refresh work detail snapshots and preparation progress 2026-09-23 19:48:45 +08:00
imccyu 12d9dd6aa4 test(web): refresh chat process group snapshots 2026-09-22 00:45:46 +08:00
creatixchu 82692090c8 Merge remote-tracking branch 'origin/master' into feat/4562-file-open-apps 2026-09-21 09:56:00 +08:00
imccyu f1c035b1e9 test(chat): align presentation coverage and snapshots 2026-09-20 23:20:07 +08:00
creatixchu 086b64103f test: verify transient feedback and single-action file controls 2026-09-20 16:51:58 +08:00
creatixchu a4cd2f57a0 fix: keep file action feedback visible while hovering delivery cards 2026-09-20 14:07:32 +08:00
creatixchu 6f1857ae1b test: refresh delivery snapshots for shared file controls 2026-09-20 14:04:54 +08:00
Tianyi Cui 8b0b2dc1d8 Merge master b86916de into release/session-log-v4
Integrate the master tip observed for the final V4 landing preparation on
top of the already merged migration stack. Preserve the V4 writer, flat
message migration, extension policy, catalog validation and historical
recordings while bringing in upstream profile resolution and desktop/UI
changes.

Resolve four generated translation-pairing records from the combined
English/Chinese text. Keep this master checkpoint separate from any
integration fixes and retain all reviewed parent history. Follow-up
validation covers the affected launch/UI paths and migration replay.
2026-09-19 18:00:36 +08:00
Yif c8e3cb2b87 test(web): track breadcrumb text crumb and shell.leading seat in e2e and goldens 2026-09-19 13:31:41 +08:00
_KermanandTianyi Cui fb79a944f5 refactor(llm): separate durable producer sources from request inputs
Give durable user context its producer-owned source kind instead of a generic plugin wrapper. The V3-to-V4 conversion preserves the frozen rename and collision rules, all own JSON metadata, event coordinates, and historical request-only kinds. Native catalog and JSONL admission retain source validation so unknown attribution can survive without its producer while malformed owned sources are refused.

Use an explicit user-only RequestUserInput for auxiliary LLM prompts that do not own durable message identity. Auto Review and compaction remove their request-only source registrations while retaining prompt content and freezing; provider serializers and projections keep the same wire data, assistant replay isolation, image ordering, and tool correlation. Session writes, Agent delivery, and recorded title requests continue to require identified durable messages.

Bind the saved compatibility policy only to user sources and qualify tmux location attribution without weakening fixed system, model, or tool semantics. Rebuild the current inventory and unpublished V4 acknowledgement on the actual tool-role parent, preserving its rationale and all accepted historical records. The catalog format version records tooling metadata; Session remains V4. Developer-role policy and activation belong to their own feature.

The latest-master Messages adapter, serialization, request-input typing, EpochHeader reservation, and attribution checks pass 103 tests across five files. The retained V3 Messages input-history snapshot passes through the source profile; Host/Client typechecks and all 41 documentation gates pass. The generated comparison records four changed roots and 447 unchanged type fingerprints. Latest-master ARIA changes are retained, with producer source labels applied independently; new Messages fixtures retain their producer names as declared source kinds and use the fixed system-message helper; recorded Session generations are unchanged by this regrouping.

Co-authored-by: Tianyi Cui <[email protected]>
2026-09-18 19:07:12 +08:00
lsdsjyandlsdsjy 3e216c3d64 feat(ui-chat): add performance and usage display preference (#4478)
* feat(ui-chat): add performance and usage display preference

* fix(ui-chat): address performance preference review findings

* test(ui-chat): refresh Chinese turn footer snapshots

* docs(ui-chat): clarify completed-turn timing visibility

* test(ui-chat): capture preference failure screenshots

* fix(ui-chat): align performance preference with current icons

---------

Co-authored-by: lsdsjy <[email protected]>
2026-09-18 15:35:50 +08:00
yixiangihsiang 4937343a5e feat(web): unify the client visual language 2026-09-17 19:14:41 +08:00
Yichen Jiang b6726fe79d feat(web): move context usage into composer stats 2026-09-17 13:59:25 +08:00
Tianyi Cui 66734e344a Merge Computer Use parent into Auto review for PR stack 2026-09-12 17:06:46 +08:00
Tianyi Cui 091cbcdbfb fix(code-runtime): preserve native temp setup and preview activation 2026-09-12 15:03:02 +08:00
Chinesezjc fed65b7cad Merge master into the Auto review branch
Resolve 36 conflicts across source, bilingual READMEs, and generated
documentation: keep master's command-identity and popup APIs, RemoteMock
test infrastructure, and regenerated catalogs; keep the Auto review
catalog, slot, dismissal, and snapshot content.
2026-09-11 14:15:32 +08:00
creatixchu ba2a931a23 Merge remote-tracking branch 'origin/master' into worktree/composer-plus-menu 2026-09-10 15:18:02 +08:00
creatixchu 6fe445ea08 Merge origin/master into worktree/composer-plus-menu 2026-09-10 13:53:45 +08:00
Yichen Jiang ca2a9017ef fix(web): preview delivered file links in the sidebar 2026-09-10 11:13:43 +08:00
yx.zhang 057b4879cf feat(web): align presented file cards with design 2026-09-09 15:53:44 +08:00
yudshj 4158a96e14 feat(web): add native file actions to artifact cards 2026-09-09 15:26:28 +08:00
pku-xht 6adc878785 Merge master sidebar UI polish 2026-09-09 13:27:07 +08:00
creatixchu ba066ab5f8 Merge remote-tracking branch 'origin/master' into worktree/composer-plus-menu 2026-09-09 12:53:09 +08:00
imccyu 3481d4043e fix(client): align sidebar checks after rebase 2026-09-09 12:15:00 +08:00
creatixchu e6ff3290cf Merge remote-tracking branch 'origin/master' into worktree/composer-plus-menu
Takes the merged slash-command localization (#3557): its zh description
copy replaces this branch's, its contribution description() callback and
HOST_DESCRIPTION_KEYS are superseded by the label/description/icon
contribution face and presentation.ts, and its zh menu golden and
locale-switch test are refreshed for the sectioned menu.
2026-09-09 10:25:10 +08:00
pku-xht 0eb0e8c770 Merge master to restore required CI for Auto review 2026-09-09 05:25:20 +08:00
Yudong 228f3aef83 test(ci): stabilize completion waits and Session fixtures 2026-09-09 01:15:31 +08:00
yudshj c9038b4b31 refactor(present): declare and open workspace source files 2026-09-09 01:15:31 +08:00
yudshj 6d8a400d79 fix(web): open delivered snapshots in the default application 2026-09-09 01:15:31 +08:00
yudshj 37d27fcdf9 feat(web): present immutable file deliveries with download cards 2026-09-09 01:15:31 +08:00