84 Commits
Author SHA1 Message Date
Ziya f8c0bf9186 Merge branch 'master' into agent/onboarding-modal-flow 2026-08-13 16:40:58 +08:00
Ziya 9f8dfa7fb1 Merge branch 'master' into agent/onboarding-modal-flow 2026-08-13 16:32:47 +08:00
Ziya 101df7cf58 Merge pull request #2409 from deepseek-harness/agent/web-file-reference-prompt
fix(web): guide clickable file references
2026-08-12 23:58:07 +08:00
Ziya 8d8992c1c9 Merge branch 'master' into agent/web-file-reference-prompt 2026-08-12 23:48:30 +08:00
Ziya e5e0b47cf2 Merge branch 'master' into agent/web-file-reference-prompt 2026-08-12 23:19:35 +08:00
Ziya 2a46b6b7b3 Merge pull request #2350 from deepseek-harness/feat/web-plugin-settings-tabs
feat(web): combine plugin settings into tabs
2026-08-12 21:51:24 +08:00
Ziya 85c9aac5e9 Merge branch 'master' into feat/web-plugin-settings-tabs 2026-08-12 21:24:52 +08:00
Ziya f418d534a2 Merge branch 'master' into feat/web-plugin-settings-tabs 2026-08-12 20:23:43 +08:00
Ziya 8019949fc7 Merge branch 'master' into feat/web-plugin-settings-tabs 2026-08-12 18:40:38 +08:00
Ziya 7f058284fa Merge branch 'master' into feat/web-plugin-settings-tabs 2026-08-12 16:54:18 +08:00
Ziya d0ccbd9689 Merge pull request #2285 from deepseek-harness/feat/web-loader-plugin-inventory-settings
feat(web): add read-only Loader plugin inventory
2026-08-12 14:51:13 +08:00
Ziya 5b448ae15f Merge branch 'master' into feat/web-loader-plugin-inventory-settings 2026-08-12 14:35:46 +08:00
Ziya 29a089519d Merge branch 'master' into feat/web-loader-plugin-inventory-settings 2026-08-12 13:53:20 +08:00
Ziya 91305c6240 Merge branch 'master' into feat/web-loader-plugin-inventory-settings 2026-08-12 13:49:57 +08:00
Ziya e568299daf Merge branch 'master' into feat/web-loader-plugin-inventory-settings 2026-08-12 13:29:06 +08:00
Ziya 3ac89bcab5 Merge branch 'master' into feat/web-loader-plugin-inventory-settings 2026-08-12 13:18:28 +08:00
Ziya 91e073e5e1 Merge branch 'master' into feat/web-loader-plugin-inventory-settings 2026-08-12 12:51:46 +08:00
Ziya 4a8ee7674a Merge pull request #2287 from deepseek-harness/agent/black-whale-logo
style(web): use black hero whale with hover motion
2026-08-12 11:06:42 +08:00
Ziya dd0898ad9c Merge branch 'master' into agent/black-whale-logo 2026-08-12 00:54:39 +08:00
Ziya 43b66c0a74 Merge pull request #2210 from deepseek-harness/feat/produced-files-folder
feat(web): make produced-file overflow discoverable
2026-08-11 21:45:13 +08:00
Ziya 37cdddd137 Merge branch 'master' into feat/produced-files-folder 2026-08-11 21:36:30 +08:00
Ziya ef565fe7f4 Merge branch 'master' into feat/produced-files-folder 2026-08-11 19:10:11 +08:00
Ziya 540a6b4375 Merge branch 'master' into feat/produced-files-folder 2026-08-11 18:23:31 +08:00
Ziya c92954d930 Merge branch 'master' into feat/produced-files-folder 2026-08-11 17:10:25 +08:00
Ziya 6e573475ec Merge branch 'master' into feat/produced-files-folder 2026-08-11 17:02:30 +08:00
Ziya 21a23db789 Merge branch 'master' into feat/produced-files-folder 2026-08-11 15:43:31 +08:00
Ziya 9903d38cf9 Merge branch 'master' into feat/produced-files-folder 2026-08-11 13:31:29 +08:00
Ziya b0e022c150 Merge pull request #2217 from deepseek-harness/agent/message-feedback-backend
feat(feedback): add durable message feedback backend
2026-08-11 13:29:20 +08:00
Ziya c57221a6b6 Merge branch 'master' into feat/produced-files-folder 2026-08-11 13:25:22 +08:00
Ziya 548b89c3d0 Merge branch 'master' into feat/produced-files-folder 2026-08-11 13:24:43 +08:00
Ziya d78d4a6189 Merge branch 'master' into agent/message-feedback-backend 2026-08-11 13:10:06 +08:00
Ziya 216b5eab42 Merge pull request #967 from deepseek-harness/fix/workspace-context-rendered-change-proof
fix(workspace-context): commit only represented changes
2026-08-10 05:19:17 -07:00
Ziya 45df59391a Merge pull request #1986 from deepseek-harness/fs-overwrite-diff-bound-v2
fix(fs-local): bound overwrite contextual diff bases
2026-08-10 05:18:27 -07:00
Ziya 5cdebcf5f3 Merge branch 'master' into fs-overwrite-diff-bound-v2 2026-08-10 05:10:30 -07:00
Ziya b152a39a58 Merge branch 'master' into fs-overwrite-diff-bound-v2 2026-08-09 01:26:02 -07:00
Ziya 05cbc185f0 Merge pull request #1661 from deepseek-harness/agent/task-surface-rfc
docs: propose Task Surface for structured session interaction
2026-08-08 05:37:01 -07:00
Ziya c5dd429478 Merge branch 'master' into fs-overwrite-diff-bound-v2 2026-08-08 05:17:04 -07:00
Ziya 5f9456c24f Merge pull request #1807 from deepseek-harness/feat/web-inline-file-mentions
feat(web): a prose mention of a produced file opens it
2026-08-08 04:59:16 -07:00
Ziya df2018b3df Merge branch 'master' into agent/task-surface-rfc 2026-08-08 04:49:46 -07:00
Ziya 146c98c9bb Merge pull request #1112 from deepseek-harness/feat/web-workspace-file-links
feat(web): end a turn with the files it produced
2026-08-07 02:27:25 -07:00
Ziya cb6fa78c8a Merge pull request #1533 from deepseek-harness/feat/web-preview-badge
feat(web): add preview badge to empty hero
2026-08-05 23:59:28 -07:00
Ziya 71e8132e76 Merge branch 'master' into feat/web-preview-badge 2026-08-05 23:29:04 -07:00
Ziya 012bc40f04 Merge pull request #1165 from deepseek-harness/agent/fix-remote-welcome-onboarding
fix(web): unblock remote welcome onboarding
2026-08-03 07:20:06 -04:00
Ziya 5d9a4d80e4 Merge branch 'master' into fix/session-waiting-approval 2026-08-03 05:16:42 -04:00
Ziya aaa2102246 Merge branch 'master' into agent/fix-remote-welcome-onboarding 2026-08-03 04:49:00 -04:00
Ziya b6b642fae4 Merge branch 'master' into agent/web-bash-error-expand 2026-08-03 02:30:36 -04:00
Ziya 28721e1dc5 Merge branch 'master' into agent/fix-remote-welcome-onboarding 2026-08-02 23:44:22 -04:00
Ziya 45a59ffa26 Merge pull request #1156 from deepseek-harness/fix/goal-complete-wrapup
fix(tool-goal): deliver a user-facing wrap-up message after goal-round complete/blocked
2026-08-02 11:03:22 -04:00
Ziya 2ef9c6eb41 Merge pull request #1155 from deepseek-harness/feat/web-thinking-tail-scroll
feat(web): follow live reasoning tail while collapsed
2026-08-02 09:27:12 -04:00
Ziya fff0172208 Merge pull request #1125 from deepseek-harness/agent/web-search-timeout-budget
fix(cli): give shipped web search a 60s budget
2026-08-02 05:42:41 -04:00
Ziya 7ba9059056 Merge pull request #1116 from deepseek-harness/agent/fix-frontend-plugin-loader-dependency
fix(cli): point missing frontend dist at full build
2026-08-01 07:40:01 -04:00
ZiyaZhang 8fb6c2bd69 refactor(web): open produced files through the Host, not over HTTP
Scope decision: previews for a browser that is not on the Host machine are
not supported. With that settled, host.openPath answers the supported case
completely — a file:// document in a real browser has full page capabilities
and no reach into /api — and the HTTP serving this branch had built answered
only the unsupported one.

Removed: the /f route and its listener, the workspace-file URL shape,
ApiProxy.workspaceRootOf, ConnectionHandle.fileUrl, and the port published
into the index page.

Kept, and finished:
- the produced-files row a turn ends with, derived from mutation locations;
- the path link now reads as a link at rest, not only on hover — the reported
  "I can't open what it made" was this, sitting on a working capability;
- the Host opener prefers the default BROWSER for .html/.htm/.xhtml/.svg, so
  a developer who binds .html to an editor still gets a rendered page
  (macOS via the LaunchServices https handler, Linux via $BROWSER, every
  failure falling back to the default application).

The retired designs and their measurements stay in the Agent Note, including
why same-origin serving was unsafe and why the sandbox that fixed it broke
the pages invisibly.
2026-08-01 03:15:54 -07:00
ZiyaZhang 59bfe77fb8 feat(web): serve workspace files from their own origin
A sandbox header bought isolation by taking the document's origin away, and
measuring that cost decided against it: the reported artifact throws
SecurityError on load, and because an uncaught exception aborts the rest of
its <script>, every listener declared after that line — theme toggle, mobile
menu, model tabs — never binds. Two of the four artifacts in the reporting
user's workspace were dead pages under it, and they still looked right.

A second listener on the API's host, answering /f and nothing else, is the
same boundary without the amputation: cross-origin to /api (refused by the
Origin fence and by CORS), same-origin with itself (localStorage, cookies and
fetch all work). Its port is published into the index page; the browser half
reads it to address previews, and its absence — the keyless fixture lane — is
what makes a file row fall back to the Host opener instead of a dead tab.

fileUrl moves from IWorkspaces to ConnectionHandle: the transport owns both
the listener that serves the bytes and the port that addresses it.
2026-08-01 02:17:25 -07:00
Ziya de520bee24 Merge pull request #1113 from deepseek-harness/agent/web-math-rendering
feat(web): render TeX math in Markdown
2026-08-01 05:04:40 -04:00
ZiyaZhang 1082518520 Merge remote-tracking branch 'origin/feat/web-workspace-file-links' into feat/web-workspace-file-links 2026-08-01 01:08:51 -07:00
ZiyaZhang dcf485ac5c fix(web): address the review of the workspace-file route
Isolation is restored on the premise the review corrected: a workspace file
need not be agent-authored — a read row makes every file in a cloned
repository openable — and a same-origin active document was measured driving
/api/settings.describe to a 200 with full data. Script-capable documents go
back into an opaque origin; the preview's lost localStorage is the known cost,
and a separate serving origin is the way to retire it.

- confine(): a workspace rooted at a filesystem root has a realpath already
  ending in the separator, and the doubled prefix 403'd every child.
- turnDeliverables(): reset on the turn boundary, not only at a closing
  assistant, so an interrupted turn cannot spill into the next turn's row;
  and recognize a mutation by render intent (diff card, or generic with
  kind 'edit') so str_replace_editor's insert counts.
- 405 answers name the methods it allows.
- The e2e now cold-seeds a recorded WRITE turn, so the assembled application
  covers the Produced row, its chip's served URL, and the isolation header.
- Agent Note matched to what shipped (the row is in this PR, not deferred);
  ui-conversation README documents the new destination and the row; the
  fixture lane's dead-tab quirk and the cold-path listing cost are recorded.
2026-08-01 01:08:16 -07:00
Ziya 225d1327c2 Merge branch 'master' into feat/web-workspace-file-links 2026-08-01 03:05:07 -04:00
ZiyaZhang f5d53f04b7 cleanup(web): stop sandboxing served workspace documents
A preview lost localStorage and cookies under CSP sandbox — measurably, the
reported artifact throws SecurityError on load and its theme toggle goes
dead. The capability the sandbox denied is one the file's author, an agent
already holding this user's shell, never needed the browser for, so the
header sat behind a trust boundary it had already crossed.

Isolating a preview becomes a real question when workspace content stops
being the viewer's own; the answer then is a separate origin, not a header.
2026-07-31 23:20:36 -07:00
Ziya 67b166b928 Merge pull request #1096 from deepseek-harness/fix/web-fork-interrupted-seq
fix(client): floor the fork anchor to a real event seq
2026-08-01 02:09:06 -04:00
ZiyaZhang 35e9122a65 feat(web): list a turn's produced files under its closing message
The paths come from the mutation tools' follow-along locations, not from the
closing prose, so a turn's output is listed whether or not the model named
it. Each chip opens through the same openFile the tool rows use.

Reads contribute nothing (looking at a file does not produce it), a failed
mutation contributes nothing, a file touched twice is one entry, and the row
shows six with an explicit remainder rather than burying the answer.
2026-07-31 22:13:34 -07:00
ZiyaZhang 00390ae851 feat(web): open a produced file from the conversation
Serve one file at a time out of a Session's workspace under /f on the web
transport, and point the conversation's existing file-open affordance at it.
Clicking a write/edit/read row's path now opens that file in a browser tab —
including from a LAN client, where the Host's system opener is fenced to
loopback and answered nothing.

- /f/<sessionId>/<segments> in client-connection, behind the same
  browser-trust fence as /api; realpath confinement, streamed reads,
  GET/HEAD only, nosniff + no-store.
- Script-capable documents carry CSP sandbox: model-authored markup must not
  be same-origin with /api, where events.mux is a readable GET stream.
- ApiProxy.workspaceRootOf answers where a Session's files live without
  resuming an agent; the client program cannot reach the core services.
- The /f URL shape lives in dsh-host-apiproxy/api so both ends share one
  encoding (client bundles may not value-import another plugin).
2026-07-31 12:07:43 -07:00
Ziya 3a01dc814e Merge pull request #1088 from deepseek-harness/agent/web-context-injection-auto-height
fix(web): let context injection cards fit content
2026-07-31 09:28:45 -04:00
ZiyaZhang 344ad0d6fb fix(client): floor the fork anchor to a real event seq
The fork button on a stopped assistant message was inert. Frozen
interrupted nodes carry a flow-ordering seq of turnEnd.seq - 0.9, and
session.fork takes a non-negative integer on the wire, so every such
request was rejected as invalid-params before reaching the host — where
an aborted turn's logged turn/end has always made it forkable.

SessionsService.fork floors atSeq at the wire boundary. Flooring stays
inside the anchor's own turn (every turn opens with turn/start), so the
host's first-turn/end-at-or-after cut still closes on that turn.
2026-07-31 05:41:45 -07:00
Ziya 9b1486f90f Merge pull request #1078 from deepseek-harness/fix/web-turn-error-surface
fix(web): surface terminal turn failures
2026-07-31 07:23:09 -04:00
Ziya 9473951c79 Merge branch 'master' into fix/web-turn-error-surface 2026-07-31 07:13:02 -04:00
Ziya 4f13ce7b7f Merge branch 'master' into fix/web-turn-error-surface 2026-07-31 07:07:05 -04:00
Ziya 05608d9098 Merge branch 'master' into fix/web-turn-error-surface 2026-07-31 06:19:46 -04:00
Ziya 4814008ca0 Merge pull request #948 from deepseek-harness/docs/third-party-notices
docs: add THIRD_PARTY_NOTICES.md disclosing third-party dependencies
2026-07-31 05:51:57 -04:00
Ziya cbd74eb2ae Merge branch 'master' into docs/third-party-notices 2026-07-31 02:12:35 -04:00
Ziya bdf59193d5 Merge branch 'master' into docs/third-party-notices 2026-07-31 01:59:04 -04:00
Ziya e130f7afa7 Merge pull request #998 from deepseek-harness/feat/gui-full-access-confirmation
feat(client): confirm before enabling full access
2026-07-31 00:43:40 -04:00
Ziya a5476afa08 Merge branch 'master' into docs/third-party-notices 2026-07-30 23:57:28 -04:00
Ziya ade8358e67 Merge branch 'master' into feat/gui-full-access-confirmation 2026-07-30 23:45:31 -04:00
Ziya 25fd90a561 Merge branch 'master' into feat/gui-full-access-confirmation 2026-07-30 23:32:55 -04:00
Ziya 7b95559f18 Merge branch 'master' into feat/gui-full-access-confirmation 2026-07-30 22:51:43 -04:00
Ziya a1738d3769 Merge branch 'master' into feat/gui-full-access-confirmation 2026-07-30 10:11:13 -04:00
Ziya 818a504901 Merge pull request #831 from deepseek-harness/fix/workspace-instruction-frame-metadata
fix(workspace-context): escape instruction frame metadata
2026-07-30 00:35:48 -04:00
Ziya 7b8e08d11d Merge pull request #820 from deepseek-harness/fix/subprocess-password-scrub
fix(subprocess): scrub ambient password variables
2026-07-29 09:52:15 -04:00
Ziya 6e1c4e4583 Merge pull request #834 from deepseek-harness/fix/translation-brief-uncommitted-pair
fix(i18n): persist uncommitted translation snapshots
2026-07-29 08:58:41 -04:00
Ziya 91d85773ac Merge branch 'master' into feat/workspace-native-folder-picker 2026-07-27 08:06:44 -04:00
Ziya 1e1e05d35a Merge pull request #541 from deepseek-harness/feat/tui-extension-service
feat(tui): add interactive extension service
2026-07-23 05:06:30 -04:00
Ziya 2f13de1d8f Merge branch 'master' into feat/tui-extension-service 2026-07-23 04:43:55 -04:00
Ziya 7fdf685e5c Merge branch 'master' into feat/tui-extension-service 2026-07-23 04:02:19 -04:00
Ziya c93ed006e2 Merge branch 'master' into docs/chinese-terminology 2026-07-01 03:31:51 -04:00