Commit Graph
882 Commits
Author SHA1 Message Date
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
Dudu-0223 b9e59cbaee refactor: unify Team availability in the service 2026-09-18 14:29:35 +08:00
yixiangihsiang 4937343a5e feat(web): unify the client visual language 2026-09-17 19:14:41 +08:00
imccyu 81e05abaab Revert "feat(client): optimize code block previews and source highlighting" 2026-09-17 16:31:47 +08:00
yudshj 9b9a60f439 fix(client): size chat previews from diagrams and defer source rendering 2026-09-17 15:33:58 +08:00
creatixchu ba066ab5f8 Merge remote-tracking branch 'origin/master' into worktree/composer-plus-menu 2026-09-09 12:53:09 +08:00
Yif 284758cbc3 test(web): refresh goldens for the sidebar aria renames
The expand/collapse and wrap toggles' accessible names diverged from their
tooltips, and the replay harness now normalizes clientTimeZone in recorded
sessions; every golden holding the old names or the literal zone refreshes.
2026-09-09 12:15:00 +08:00
Yif e94241f601 feat(web): move the session-log control into the header more-actions menu 2026-09-09 12:14:58 +08:00
creatixchu 5b1bb021cf feat(web): group, localize, and re-present the composer command menu
The + button and a typed / open one menu with an Add section (File, Goal,
Plan, Feedback) and a Commands section (Compact, Permission, Model, Export)
in usage order; rows carry a glyph, a localized title and description, and
the command name as an alias where the localized title differs. Built-in
Host rows get their face from the ui-commands dictionaries when the catalog
description is the canonical English text. A menu pick fills the locale's
claim token (/计划 ) while the submission executes the catalog name, and a
typed localized token resolves on Space and Enter in every locale. The File
row is a new action contribution kind that opens the composer's file picker
through the scoped slash/input-pick-files event; the paperclip button is
removed and the + button reads "Add files or run commands".
2026-09-08 12:28:40 +08:00
Yif 256afa848c Merge remote-tracking branch 'origin/master' into fix/input-placeholder-stat-ui-polish
# Conflicts:
#	packages/client/ui-chat/src/client/locale.ts
#	packages/client/ui-chat/tests/gate-branch-tails.client.spec.tsx
2026-09-08 00:45:29 +08:00
imccyu fe5aee7e71 test(web): cover Sidebar interactions and refresh recorded UI expectations 2026-09-07 21:29:42 +08:00
Yif 3997f36999 feat(client): replace the stats strip with two icon pills and click-open stat dialogs
The A/B winner over the single-line StatsLine: a gauge pill (counts + TPS,
opening the session-stats dialog) and a database pill (billed total +
cache-hit share, opening the exact token-usage dialog), sharing a new
stat-dialog module. StatsLine and its dead locale keys are deleted, the
gauge icon is optically centered, and the composer keeps its 4px clearance
through the data-composer-stats contract. Agent Note added; stale
StatsLine references across implemented notes updated in place.
2026-09-07 20:59:19 +08:00
Yif 78258bf6fd Merge remote-tracking branch 'origin/master' into fix/input-placeholder-stat-ui-polish 2026-09-04 20:24:04 +08:00
Yif a49376a2ca fix(client): reword composer placeholders around the / and @ triggers
The default and hero placeholders drop the ellipsis and name the / commands
and @ references as comma-separated actions; goldens and e2e assertions
refresh with the copy.
2026-09-04 20:21:46 +08:00
Tianyi Cui e974a655a0 Revert "feat(session, agent, web): support same-session message editing" 2026-09-02 21:20:07 +08:00
lsdsjy ef88756f13 feat(session, agent, web): support same-session message editing 2026-09-02 18:26:55 +08:00
creatixchu e9b7ed0aab test: cover generic file submission flows 2026-09-01 16:11:43 +08:00
Yif 0114dc1f81 feat(web): polish the input trigger menu presentation
Candidate rows lead with domain icons instead of localized text
prefixes; pointer and keyboard share one reducer-owned highlight (last
input wins); drillable folder rows reveal a localized Browse-folder +
Tab keycap hint with the library chevron; pending sources render
skeleton bars; the menu spans the composer card. The editable @dir/
text decorates color-only — the domain icon now belongs exclusively to
the settled reference chip. Composer placeholders advertise / and @,
and the zh copy for commands is unified to 指令.
2026-08-26 21:17:46 +08:00
fengsy eadd5df82b fix(team): preserve current Client architecture after rebase 2026-08-26 10:56:57 +08:00
Dudu-0223 806642b064 feat(team): add experimental Agent Teams Web profile 2026-08-26 10:56:57 +08:00
07akioni 61b65d3147 fix(web): show system prompts in chat
Render reconstructable system prompts at each request-series boundary, preserve series declarations through pre-step wrappers, and keep the presentation and replay snapshots aligned across clients.
2026-08-25 14:44:08 +08:00
07akioni 1825cb4657 feat(client): highlight streaming fences incrementally
Keep recognized code fences syntax-highlighted while assistant text streams. Preserve completed Shiki token lines across chunks, mirror token styles and CRLF handling, and retain plain rendering for unsupported or math-like fences.

Add unit, DOM-parity, and keyless assembled-Web coverage for the streaming-to-settled transition.

Closes #1499
2026-08-25 12:59:21 +08:00
Tianyi Cui 6189e4a374 test(web): separate session snapshots from goldens 2026-08-24 21:36:31 +08:00
lsdsjy bf432bd0c8 Merge pull request #2854 from deepseek-harness/fix/web-running-draft-send-button
fix(web): switch running drafts to Send
2026-08-24 19:29:15 +08:00
Dudu-0223 f76a225a7d Merge pull request #2663 from deepseek-harness/feat/subagent-provider
让 subagent 按需发现并选择子 Agent 模型
2026-08-24 18:23:42 +08:00
lsdsjy e06625d202 fix(web): switch running drafts to Send 2026-08-24 11:37:48 +08:00
imccyu 4f80422595 fix(webworker): preserve preview loading sequence 2026-08-24 10:37:05 +08:00
imccyu e883dc2354 feat(webworker): add selectable preview fixtures 2026-08-24 10:37:04 +08:00
Tianyi Cui 114846b4ca test(web): refresh pi-ai provider catalog snapshots 2026-08-24 01:37:51 +08:00
Tianyi Cui 3c10f5d2d3 fix(client): route UI copy through locale 2026-08-23 17:31:37 +08:00
Tianyi Cui fdac6cffcb test: refresh profile migration catalogs and built smokes
Regenerate the configuration catalog and module graph after replacing standalone application packages with dsh profile bundles and renaming the private Python carrier. Update built-bin coverage to launch the shipped sdk and acp profiles, assert retired bins stay absent, and keep the Web golden text aligned with the same assembled runtime.

Clarify that headless is a startup profile whose patches freeze after boot. This commit is projection and verification work: it contains no application implementation, and every generated document is produced from source committed earlier in the series.
2026-08-23 10:59:01 +08:00
Tianyi Cui 5f60e50d71 feat(webhook): create workspace sessions from GitHub events 2026-08-23 01:48:35 +08:00
Tianyi Cui b9869d1e97 test(ci): stabilize cross-platform gate baselines 2026-08-22 01:47:43 +08:00
imccyu 7ce85283b5 Revert "Merge pull request #2608 from deepseek-harness/fix/permission-copy-and-default"
This reverts commit d51f4106a2b0669d33e0f5dc1d5dcf21a764d313, reversing
changes made to 69ace51625b6ac665b2f2ec1e81005d5b055f152.
2026-08-21 16:21:13 +08:00
_Kerman 0ee3d664ba Merge remote-tracking branch 'origin/master' into dshw/pr-deepseek-harness-deepseek-harness-2702 2026-08-21 11:53:00 +08:00
_Kerman 6fb8e9a4b9 Merge remote-tracking branch 'origin/master' into xtr/2701-stable-session-snapshots 2026-08-21 11:43:58 +08:00
Yichen Jiang 246caaba77 Merge remote-tracking branch 'origin/master' into worktree/deepseek-vision-model-catalog
# Conflicts:
#	.agents/notes/implemented/feature/2026-07-22-web-multimodal-image-input-and-durable-attachments.i18n.yaml
#	.agents/notes/implemented/feature/2026-08-19-direct-deepseek-vision-input.i18n.yaml
#	docs/config-catalog.i18n.yaml
#	packages/llm/llm-deepseek/README.i18n.yaml
2026-08-21 10:34:51 +08:00
Yichen Jiang a67b9a4d31 Merge pull request #2814 from deepseek-harness/fix/composer-edit-range-attribution
fix(web): carry the composer edit range from the pre-edit selection
2026-08-20 22:02:10 +08:00
Yichen Jiang 672cdf9ba1 Merge remote-tracking branch 'origin/master' into fix/turn-error-survives-retry-exhaustion
# Conflicts:
#	.agents/notes/implemented/architecture/2026-06-21-bounded-llm-request-recovery.i18n.yaml
#	.agents/notes/implemented/architecture/2026-06-21-bounded-llm-request-recovery.zh.md
#	.agents/notes/implemented/architecture/2026-08-09-client-conversation-node-assembly.i18n.yaml
2026-08-20 21:40:44 +08:00
yx.zhang de572dd910 feat(web): refine subagent header switcher 2026-08-20 20:18:55 +08:00
Yichen Jiang daaede29a5 fix(ui-conversation): render the terminal turn error after same-turn retries exhaust
The turn-error Definition suppressed its node permanently once the owning
turn carried any llm/retry event — a rule from the retired model where a
retry opened a new numbered turn. Retries now run inside the failing turn,
so the suppression hid exactly the exhausted terminal failure it existed
to defer to: spending every transient retry left the conversation with a
neutral collapsed retry row and no error row at all.

Delete the suppression: turn-error matches only turn/start and error-reason
turn/end, and renders whenever its turn recorded a terminal error; the
settled retry chain renders beside it through the separate model-retry
node. The Definition suite now asserts the exhausted-retry error node in
full history, tail-only windows, and after prepending the chain, and a new
keyless live e2e scenario exhausts a scenario-owned two-retry policy and
pins the terminal error row beside the settled retry row (the scaffold
gains replayRetryPolicy so exhaustion runs in milliseconds).

Both stale notes are corrected to the same-turn retry reality, and the new
bug-fix note owns the removal rationale.
2026-08-20 18:19:30 +08:00
Yichen Jiang 21ea0ed9e6 docs(authorization): record the credential-record and flow decisions
Why the record union is one step more abstract than pi-ai's credential
in exactly two places, why a record key names the owning plugin rather
than the provider, why the flow owns the write, and why the interaction
travels with the request instead of a registry. Cross-links the release
fix it supersedes, and states what is still missing: the wire contract
and the Models-page control that would let a human start a login.

The two web e2e goldens regain exactly the openai-codex option line
they lost when the provider was withheld.
2026-08-20 17:58:38 +08:00
_Kerman a577a48acd Merge remote-tracking branch 'origin/master' into dshw/pr-deepseek-harness-deepseek-harness-2702 2026-08-20 17:52:56 +08:00
pku-xht 36aead7320 Merge remote-tracking branch 'origin/master' into codex/cache-hit-decimal-display-v2 2026-08-20 17:18:29 +08:00
Yichen Jiang b2c9c3ce37 fix(web): derive the caret-delete range from what the draft lost
A caret Backspace or Delete replaces no selection, so `beforeinput` reports
the bare caret and the previous derivation produced a negative inserted
length and fell back to the ambiguous scan. The delete half of the defect
survived, and the component test missed it by pre-expanding the selection to
the span the engines never report.

The range for a caret delete now comes from the direction `inputType` names
and the number of characters the draft actually lost, measured rather than
assumed to be one, so a grapheme, word, or line deletion sizes correctly.
Only the insert and delete families are recorded; a history replay reports
wherever the caret sits and would name a wrong span while passing every check.

Component tests cover the caret Backspace, Delete, and word-delete gestures,
and an assembled browser scenario drives them as real key presses, which is
the only place an engine's reported range is observable.
2026-08-20 17:11:35 +08:00
07akioni e483c9e30e Merge pull request #2776 from deepseek-harness/feat/table-optmize
feat(web): wrap markdown tables to the column with an overflow wide view
2026-08-20 15:46:40 +08:00
_Kerman 28b265c1e9 Merge remote-tracking branch 'origin/master' into dshw/pr-deepseek-harness-deepseek-harness-2702
# Conflicts:
#	examples/headless-agent/tests/snapshots/headless-profile/session.expected.jsonl
2026-08-20 15:26:37 +08:00
Kaige-Gao 8304a25d8a Merge remote-tracking branch 'origin/master' into fix/permission-copy-and-default
# Conflicts:
#	packages/subagent/subagent-codex/tests/subagent-codex.spec.ts
2026-08-19 22:50:35 +08:00