creatixchu
dde6c8d7fc
Merge remote-tracking branch 'origin/master' into worktree/2986-trajectory-image-attachments
2026-08-25 10:50:06 +08:00
imccyu
f5f0448bee
refactor(subagent): consume shared session observations
2026-08-25 06:09:25 +08:00
creatixchu
c2ce4a1405
Merge remote-tracking branch 'origin/master' into worktree/2986-trajectory-image-attachments
2026-08-24 20:32:07 +08:00
creatixchu
c27de594fd
feat(web): 在 Trajectory 中展示图片附件
...
Trajectory 现在通过共享的 ui-attachment 画廊渲染会话日志中的持久化图片引用:ui-conversation 拥有按会话的图片 URL 缓存(ctx.uiConversation.imageUrl),ui-trajectory 声明 conversation.trajectory.images 子槽位,纯图片记录行以图片数量标注,内联 imageSrc 嗅探作为死代码删除。
Closes #2986
2026-08-24 17:59:02 +08:00
lsdsjy
e06625d202
fix(web): switch running drafts to Send
2026-08-24 11:37:48 +08:00
imccyu
1dd6bf1973
fix(client): localize terminal send presentation
2026-08-24 10:24:18 +08:00
imccyu
a4c296f9fe
refactor(client): derive tool cards from raw events
2026-08-24 10:24:17 +08:00
imccyu
64c9e4a22c
docs: define client-derived tool presentation
2026-08-24 10:24:16 +08:00
imccyu
78b8cc731e
docs(client): preserve opaque context fallback
2026-08-24 00:54:24 +08:00
imccyu
81c922c7be
chore(client): remove feature module externals
2026-08-23 23:06:38 +08:00
imccyu
997ad27a60
refactor(client): remove compatibility imports
2026-08-23 23:06:38 +08:00
imccyu
3d1c0af60b
refactor(client): keep feature helpers with consumers
2026-08-23 23:06:38 +08:00
imccyu
9f2f498e7c
refactor(client): localize conversation projections
2026-08-23 23:05:31 +08:00
imccyu
85427aea9e
refactor(client): move shared primitives to static packages
2026-08-23 23:02:33 +08:00
Tianyi Cui
ac4ade3aaa
fix(client): address localization review findings
2026-08-23 21:22:41 +08:00
Tianyi Cui
9ebda8755e
Merge remote-tracking branch 'origin/master' into worktree/localize-ui-strings-gate
...
# Conflicts:
# packages/client/ui-chat/src/client/chat/AssistantMarkdown.tsx
# packages/client/ui-chat/src/client/chat/CompactionItem.tsx
# packages/client/ui-conversation/src/client/locales.ts
# packages/client/ui-renderer/src/client/app.tsx
# packages/client/ui-renderer/src/client/index.ts
# packages/client/ui-renderer/tests/ui-renderer.client.spec.tsx
# packages/client/ui-tool/src/client/tool/models/tool-call-model.ts
# packages/client/ui-trajectory/src/client/trajectory-record.ts
# packages/client/ui-trajectory/src/client/trajectory-snapshot-builder.ts
# packages/client/ui-trajectory/tests/views.client.spec.tsx
# packages/client/ui-workspace/src/client/tree.ts
2026-08-23 18:34:42 +08:00
Tianyi Cui
3c10f5d2d3
fix(client): route UI copy through locale
2026-08-23 17:31:37 +08:00
imccyu
689644463d
fix(client): keep conversation updates incremental
2026-08-23 16:28:20 +08:00
imccyu
a40f30a4a2
fix(client): preserve scoped UI lifecycles
2026-08-23 16:28:20 +08:00
imccyu
956a72ffe0
fix(client): restore injected workspace dependencies
2026-08-23 16:28:19 +08:00
imccyu
7ddccac0d4
fix(client): remove unused workspace dev dependencies
2026-08-23 16:28:19 +08:00
imccyu
828cd3f7b1
fix(client): avoid cyclic UI service type imports
2026-08-23 16:28:19 +08:00
imccyu
dc92793f10
fix(client): align domain split with repository gates
2026-08-23 16:28:19 +08:00
imccyu
f13fb4daeb
docs(client): document split ownership
2026-08-23 16:28:18 +08:00
imccyu
3a23185edb
chore(client): align split package graph
2026-08-23 16:28:18 +08:00
imccyu
be531688f3
refactor(client): migrate consumers and remove Runtime
2026-08-23 16:28:18 +08:00
imccyu
c7d8e32aec
refactor(conversation): separate Conversation, Chat, and Trajectory owners
2026-08-23 16:28:17 +08:00
imccyu
d231c8777a
refactor(ui): add Session and Workspace React adapters
2026-08-23 16:28:16 +08:00
imccyu
f494caca45
refactor(client): move pending interactions out of Session state
2026-08-23 16:16:04 +08:00
imccyu
e38982adc8
fix(client): satisfy stream lifecycle contracts
2026-08-23 16:16:04 +08:00
imccyu
1e0e827425
refactor(client-runtime): remove Session interaction consumers
2026-08-23 16:16:03 +08:00
imccyu
dcddaa1a6e
refactor(client): replace legacy Host event carriers
2026-08-23 16:16:02 +08:00
imccyu
ae25df3ac6
refactor(workspace): move APIs into Workspace Controller
2026-08-23 16:16:02 +08:00
Tianyi Cui
934976732d
docs: purge residual chain-of-thought leakage
2026-08-22 13:10:23 +08:00
Turtle
6b3e971805
docs: remove implementation narration from prose
2026-08-21 22:22:23 +08:00
imccyu
0bee546177
feat(util): mint UUIDs without crypto.randomUUID in every context
2026-08-21 20:35:34 +08:00
imccyu
aa6c361a97
release(dsh): 0.1.1-rc.2
2026-08-21 19:48:58 +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
imccyu
3ec5e8f8c4
release(dsh): 0.1.1-rc.1
2026-08-21 14:11:09 +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
c3e35cbe95
docs(client): align turn-error prose with exhausted-retry rendering
...
Review follow-up: the consumer-facing contract still described the removed
suppression. TurnErrorNode's JSDoc, the client-runtime retry-projection
README section, and the ui-conversation chat-flow section (both languages)
now state that a terminal turn/end error always projects the node, beside
the settled retry chain when retries exhausted, and that only intermediate
failures that scheduled another retry stay retry-notice-only. The recovery
note sheds its remaining cross-turn wording (closed-step boundary, retry
turns, closed failed step/turn) for the same-turn reality.
2026-08-20 21:48:36 +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
5f7ac9183e
fix(web): address subagent header review findings
2026-08-20 21:12:07 +08:00
yx.zhang
de572dd910
feat(web): refine subagent header switcher
2026-08-20 20:18:55 +08:00
pku-xht
84cbec28e9
Merge remote-tracking branch 'origin/master' into codex/localized-chinese-doc-links
...
# Conflicts:
# .agents/notes/implemented/architecture/2026-06-11-content-block-vocabulary.i18n.yaml
# .agents/notes/implemented/architecture/2026-06-11-content-block-vocabulary.zh.md
# .agents/notes/implemented/architecture/2026-06-18-shared-persistence-write-coordinator.i18n.yaml
# .agents/notes/implemented/architecture/2026-07-10-single-file-executable-sdk-runtime-distribution.i18n.yaml
# .agents/notes/implemented/architecture/2026-07-10-single-file-executable-sdk-runtime-distribution.zh.md
# .agents/notes/implemented/bug-fix/2026-07-29-pnpm-setup-runner-isolation.i18n.yaml
# .agents/notes/implemented/bug-fix/2026-07-29-pnpm-setup-runner-isolation.zh.md
# .agents/notes/implemented/bug-fix/2026-08-18-request-image-payload-bound.i18n.yaml
# .agents/notes/implemented/bug-fix/2026-08-18-request-image-payload-bound.zh.md
# .agents/notes/implemented/feature/2026-07-06-sandbox.i18n.yaml
# .agents/notes/implemented/feature/2026-07-06-sandbox.zh.md
# .agents/notes/implemented/feature/2026-07-16-persistent-pty-sessions.i18n.yaml
# .agents/notes/implemented/feature/2026-07-21-cross-session-references.i18n.yaml
# .agents/notes/implemented/feature/2026-07-21-cross-session-references.zh.md
# .agents/notes/implemented/feature/2026-07-22-web-multimodal-image-input-and-durable-attachments.i18n.yaml
# .agents/notes/implemented/feature/2026-07-22-web-multimodal-image-input-and-durable-attachments.zh.md
# .agents/notes/implemented/feature/2026-07-27-web-subagent-conversations.i18n.yaml
# .agents/notes/implemented/feature/2026-07-31-permission-default-for-new-sessions.i18n.yaml
# .agents/notes/implemented/feature/2026-08-03-web-search-source-scroll.i18n.yaml
# .agents/notes/implemented/feature/2026-08-03-web-search-source-scroll.zh.md
# .agents/notes/implemented/feature/2026-08-04-claude-code-and-codex-subagent-backends.i18n.yaml
# .agents/notes/implemented/feature/2026-08-04-claude-code-and-codex-subagent-backends.zh.md
# .agents/notes/implemented/feature/2026-08-05-agent-teams.i18n.yaml
# .agents/notes/implemented/feature/2026-08-05-agent-teams.zh.md
# .agents/notes/implemented/feature/2026-08-11-workspace-sidebar-order-and-folding.i18n.yaml
# .agents/notes/implemented/feature/2026-08-15-product-subagent-noninteractive-permissions.i18n.yaml
# .agents/notes/implemented/process/2026-07-21-serial-cross-platform-ci-reference.i18n.yaml
# .agents/notes/implemented/process/2026-07-21-serial-cross-platform-ci-reference.zh.md
# .agents/notes/implemented/process/2026-07-22-evidence-based-larger-hosted-runners.i18n.yaml
# .agents/notes/implemented/process/2026-07-22-evidence-based-larger-hosted-runners.zh.md
# .agents/notes/implemented/process/2026-07-23-portable-required-pull-request-ci.i18n.yaml
# .agents/notes/implemented/process/2026-07-23-portable-required-pull-request-ci.zh.md
# .agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.i18n.yaml
# .agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.zh.md
# .agents/notes/implemented/testing/2026-07-30-web-browser-snapshot-ci-gate.i18n.yaml
# .agents/notes/implemented/testing/2026-07-30-web-browser-snapshot-ci-gate.zh.md
# .agents/notes/proposed/architecture/2026-07-27-session-projection-and-command-log.i18n.yaml
# README.i18n.yaml
# README.zh.md
# docs/architecture.i18n.yaml
# docs/architecture.zh.md
# docs/development.i18n.yaml
# docs/development.zh.md
# docs/persistence-catalog.i18n.yaml
# docs/persistence-catalog.zh.md
# docs/subsystems/README.i18n.yaml
# docs/subsystems/README.zh.md
# docs/subsystems/agent-team.i18n.yaml
# docs/subsystems/agent-team.zh.md
# docs/subsystems/client-modules.i18n.yaml
# docs/subsystems/client-modules.zh.md
# docs/subsystems/commands.i18n.yaml
# docs/subsystems/commands.zh.md
# docs/subsystems/persistence.i18n.yaml
# docs/subsystems/persistence.zh.md
# docs/subsystems/session-reference.i18n.yaml
# docs/tool-catalog.i18n.yaml
# docs/tool-catalog.zh.md
# docs/user/guide/providers.i18n.yaml
# docs/user/guide/providers.zh.md
# packages/README.i18n.yaml
# packages/README.zh.md
# packages/bundle/web-app/README.i18n.yaml
# packages/bundle/web-app/README.zh.md
# packages/client/README.i18n.yaml
# packages/client/README.zh.md
# packages/client/connection/README.i18n.yaml
# packages/client/connection/README.zh.md
# packages/client/ui-conversation/README.i18n.yaml
# packages/client/ui-conversation/README.zh.md
# packages/client/ui-primitives/README.i18n.yaml
# packages/client/ui-primitives/README.zh.md
# packages/client/ui-sidebar/README.i18n.yaml
# packages/client/ui-sidebar/README.zh.md
# packages/client/ui-workspace/README.i18n.yaml
# packages/client/ui-workspace/README.zh.md
# packages/context/README.i18n.yaml
# packages/context/README.zh.md
# packages/core/agent-loop/README.i18n.yaml
# packages/credentials/README.i18n.yaml
# packages/credentials/README.zh.md
# packages/experimental/agent-team/README.i18n.yaml
# packages/experimental/agent-team/README.zh.md
# packages/experimental/tool-agent-team/README.i18n.yaml
# packages/experimental/tool-agent-team/README.zh.md
# packages/host/frontend-static/README.i18n.yaml
# packages/host/frontend-static/README.zh.md
# packages/host/webserver/README.i18n.yaml
# packages/host/webserver/README.zh.md
# packages/interaction/commands/README.i18n.yaml
# packages/interaction/commands/README.zh.md
# packages/plan/plan-mode/README.i18n.yaml
# packages/plan/plan-mode/README.zh.md
# packages/sandbox/sandbox-local/README.i18n.yaml
# packages/sandbox/sandbox-local/README.zh.md
# packages/session/README.i18n.yaml
# packages/session/README.zh.md
# packages/session/session-persistence-sqlite/README.i18n.yaml
# packages/session/session-persistence-sqlite/README.zh.md
# packages/session/session-projection-cache/README.i18n.yaml
# packages/session/session-projection-cache/README.zh.md
# packages/shell/tool-pwsh/README.i18n.yaml
# packages/shell/tool-pwsh/README.zh.md
# packages/subagent/subagent-codex/README.i18n.yaml
# packages/subagent/subagent-codex/README.zh.md
# packages/subagent/subagent/README.i18n.yaml
# packages/subagent/subagent/README.zh.md
# packages/web/tool-web/README.i18n.yaml
# packages/web/tool-web/README.zh.md
# scripts/snapshots/translation-prompt-v4/request-response.expected.json
2026-08-20 19:15:33 +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
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
Yichen Jiang
795d36d68f
fix(web): carry the composer edit range from the pre-edit selection
...
Ordinary typing supplied no edit range, so the machine recovered one by
scanning the two drafts for a common prefix and suffix. That reading is
ambiguous whenever the inserted text repeats what it lands against, and the
greedy scan always slides the edit as late as the characters allow. A
reference renders as '@' plus its label, so typing '@' immediately before one
reads as an insertion inside the reference; reconcile then applies its
intersect rule and drops the occurrence. Submission takes the occurrence-free
path and sends the human-facing label instead of the owner's model form, past
the serialization guard that only fires when an occurrence survives.
InputBar now records the textarea's selection during beforeinput and passes
the resulting range to setDraft, which the machine already prefers over its
own scan. A record that cannot describe the reported change yields no range
and the scan still runs.
2026-08-20 15:32:51 +08:00