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
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
Turtle
60a0bcd358
feat(cli): mark meta and upgrade commands experimental
2026-07-31 20:16:19 +08:00
Tianyi Cui
6e26f9fd83
Merge latest master into manual compaction
...
# Conflicts:
# apps/cli/README.i18n.yaml
# docs/architecture.i18n.yaml
# docs/event-producer-consumer.md
# docs/module-graph.md
# examples/acp-agent/tests/snapshots/cordis-inspect-jsdoc/session.jsonl
# packages/compact/compact-basic/README.i18n.yaml
# packages/pty/pty-local/tests/index.spec.ts
2026-07-31 17:57:11 +08:00
Hypatia May
a23a6bdd15
Merge origin/master into codex/status-bar-token-metrics
...
Resolve the agent-loop import conflict by retaining both durable request context and runtime policy context. Refresh the combined session fixtures and regenerate documentation catalogs. Mark PDF artifacts as binary so staged whitespace checks do not parse PDF bytes as text.
2026-07-31 16:53:03 +08:00
Tianyi Cui
1352c4ecd2
Merge remote-tracking branch 'origin/master' into worktree/pr962-mergeable-20260731
2026-07-31 16:03:36 +08:00
Wenlu Wang
9e11f438f3
Merge pull request #1035 from deepseek-harness/codex/web-default-search
...
feat(web): enable default search
2026-07-31 16:01:26 +08:00
NI0317
ee404357a4
Merge origin/master into codex/sandbox-policy-context
2026-07-31 15:46:42 +08:00
Tianyi Cui
7906c1032f
Merge pinned master into status bar token metrics
2026-07-31 15:41:52 +08:00
Hypatia May
1114a80a45
Merge branch 'fix/web-transcript-projection' into feat/manual-compact-single-lock
...
# Conflicts:
# examples/acp-agent/tests/snapshots/cordis-inspect-jsdoc/session.jsonl
2026-07-31 15:36:49 +08:00
kingwl
c08e8d00f7
Merge origin/master into codex/web-default-search
...
# Conflicts:
# apps/web/tests/scaffold.ts
2026-07-31 15:26:29 +08:00
Chinesezjc
1c58d8daeb
Merge pull request #974 from deepseek-harness/feat/search-presenter
...
feat(fs): add a search render-intent card for grep and glob results
2026-07-31 15:24:22 +08:00
NI0317
3da219461c
Merge origin/master into codex/sandbox-policy-context
2026-07-31 15:03:11 +08:00
imccyu
ef01e2e9af
Merge pull request #1046 from deepseek-harness/worktree-infdev01
...
Shared anonymous user id from $DSH_HOME/.userid, reported as OTel Resource user.id
2026-07-31 14:49:00 +08:00
Chinesezjc
62275b6cd6
Merge remote-tracking branch 'origin/master' into feat/search-presenter
...
# Conflicts:
# docs/config-catalog.md
# docs/cordis-catalog/events.md
# docs/cordis-catalog/services.md
# docs/core-data-structures/tools.i18n.yaml
# docs/core-data-structures/tools.md
# docs/core-data-structures/tools.zh.md
# docs/event-producer-consumer.md
# examples/acp-agent/tests/snapshots/cordis-inspect-jsdoc/session.jsonl
# packages/cordis/tool-cordis/src/api-catalog.ts
# packages/core/tools/README.i18n.yaml
# packages/core/tools/README.md
# packages/core/tools/README.zh.md
# packages/core/tools/src/index.ts
# packages/core/tools/src/presentation.ts
# packages/ui/tui/src/components/transcript.ts
2026-07-31 14:40:29 +08:00
Tianyi Cui
e371311203
Merge latest Web transcript parent into manual compaction
...
# Conflicts:
# examples/acp-agent/tests/snapshots/cordis-inspect-jsdoc/session.jsonl
# packages/client/runtime/README.i18n.yaml
2026-07-31 14:39:20 +08:00
Chinesezjc
538488506f
Merge pull request #973 from deepseek-harness/feat/read-presenter
...
feat(fs): add a read render-intent card for the read tool result
2026-07-31 14:30:31 +08:00
imccyu
bff581ffb3
feat(telemetry): anonymous user id from $DSH_HOME/.userid, reported as OTel Resource user.id
...
session-telemetry-otel owns the identity as its own module (src/user-id.ts):
getOrCreateAnonymousUserId() returns the bare UUID line in $DSH_HOME/.userid,
minting a random UUID v4 on first use — synchronous IO with a process-lifetime
memo keyed by resolved path, an exclusive-create (wx) settle for concurrent
first launches, best-effort on read-only homes, and deletion resetting the
identity on the next launch by design.
The backend carries the id as the Resource's user.id (the OTel semconv user
attribute), once per export batch alongside service.name/service.version.
The identity belongs to the OTel feed alone; the dsh-sdk launcher telemetry
keeps its own separate store.
2026-07-31 14:28:03 +08:00
Tianyi Cui
6a31f5bf2a
Merge finalized Web transcript parent
...
# Conflicts:
# .agents/notes/implemented/architecture/2026-07-30-session-end-seed-log-boundary.i18n.yaml
2026-07-31 14:11:40 +08:00
Tianyi Cui
e088cfa59d
refactor(sandbox-policy): remove capability family registries
2026-07-31 13:49:41 +08:00
Tianyi Cui
98f48fd83a
Merge finalized Web transcript parent
...
# Conflicts:
# apps/cli/README.i18n.yaml
# packages/client/runtime/README.i18n.yaml
# packages/client/ui-trajectory/README.i18n.yaml
# packages/client/ui-trajectory/README.zh.md
2026-07-31 13:42:47 +08:00
Yichen Jiang
48152a7a1d
merge master and address permission settings review
2026-07-31 13:24:30 +08:00
Chinesezjc
59abbb5964
Merge remote-tracking branch 'origin/master' into feat/search-presenter
2026-07-31 13:04:53 +08:00
Tianyi Cui
fbf28700af
Merge master into codex/sandbox-policy-context
...
# Conflicts:
# apps/web/tests/snapshots/live-interactions/retry.expected.md
# apps/web/tsconfig.json
# tsconfig.host.json
2026-07-31 13:04:21 +08:00
Chinesezjc
a2fa8ccbcf
Merge remote-tracking branch 'origin/master' into feat/read-presenter
2026-07-31 13:03:05 +08:00
kingwl
5759c287a2
fix(web): narrow default search review scope
2026-07-31 12:58:50 +08:00
kingwl
902926c7bb
feat(web): enable default search and fetch
2026-07-31 12:58:06 +08:00
Yichen Jiang
ee74b5b07a
feat(permission): add new-session default setting
2026-07-31 12:48:19 +08:00
Yichen Jiang
2e07da19e5
Merge remote-tracking branch 'origin/master' into worktree/web-model-request-retry
...
# Conflicts:
# apps/cli/README.i18n.yaml
# apps/cli/README.md
# apps/cli/README.zh.md
# packages/client/runtime/README.i18n.yaml
# packages/client/ui-conversation/README.i18n.yaml
2026-07-31 11:39:58 +08:00
Chinesezjc
df5b09cd6e
Merge remote-tracking branch 'origin/master' into feat/search-presenter
...
# Conflicts:
# docs/config-catalog.md
# docs/cookbook/adding-a-tool.i18n.yaml
# docs/cookbook/adding-a-tool.md
# docs/cookbook/adding-a-tool.zh.md
# docs/cordis-catalog/events.md
# docs/cordis-catalog/services.md
# docs/core-data-structures/tools.i18n.yaml
# docs/core-data-structures/tools.md
# docs/core-data-structures/tools.zh.md
# docs/event-producer-consumer.md
# examples/acp-agent/tests/snapshots/cordis-inspect-jsdoc/session.jsonl
# packages/cordis/tool-cordis/src/api-catalog.ts
# packages/core/tools/README.i18n.yaml
# packages/core/tools/README.md
# packages/core/tools/README.zh.md
# packages/core/tools/src/index.ts
# packages/core/tools/src/presentation.ts
# packages/fs/tool-fs-search/src/glob.ts
# packages/fs/tool-fs-search/src/index.ts
# packages/ui/tui/src/components/transcript.ts
# packages/ui/tui/tests/tui.spec.ts
2026-07-31 11:31:32 +08:00
NI0317
05c4b916cb
Merge remote-tracking branch 'origin/master' into codex/sandbox-policy-context
2026-07-31 11:05:02 +08:00
NI0317
4e1ccebfff
Merge remote-tracking branch 'origin/master' into codex/sandbox-policy-context
...
# Conflicts:
# examples/acp-agent/tests/goal-snapshots/goal-session/session.expected.jsonl
# examples/acp-agent/tests/snapshots/advanced-toolchain/session.1.jsonl
# examples/acp-agent/tests/snapshots/advanced-toolchain/session.2.jsonl
# examples/acp-agent/tests/snapshots/advanced-toolchain/session.jsonl
# examples/acp-agent/tests/snapshots/bash-spill/session.jsonl
# examples/acp-agent/tests/snapshots/bash-tool-turn/session.jsonl
# examples/acp-agent/tests/snapshots/both-mode-turn/session.jsonl
# examples/acp-agent/tests/snapshots/cancel-tool-calls/session.jsonl
# examples/acp-agent/tests/snapshots/cancel/session.jsonl
# examples/acp-agent/tests/snapshots/code-mode-turn/session.jsonl
# examples/acp-agent/tests/snapshots/code-mode-workspace-context/session.jsonl
# examples/acp-agent/tests/snapshots/cordis-inspect-jsdoc/session.jsonl
# examples/acp-agent/tests/snapshots/empty-response-retry/session.jsonl
# examples/acp-agent/tests/snapshots/error-finish/session.jsonl
# examples/acp-agent/tests/snapshots/escalation-approved/session.jsonl
# examples/acp-agent/tests/snapshots/escalation-rejected/session.jsonl
# examples/acp-agent/tests/snapshots/fs-edit/session.jsonl
# examples/acp-agent/tests/snapshots/fs-escalation-approved/session.jsonl
# examples/acp-agent/tests/snapshots/fs-policy-reject/session.jsonl
# examples/acp-agent/tests/snapshots/fs-read-window/session.jsonl
# examples/acp-agent/tests/snapshots/fs-read/session.jsonl
# examples/acp-agent/tests/snapshots/fs-write-overwrite/session.jsonl
# examples/acp-agent/tests/snapshots/fs-write/session.jsonl
# examples/acp-agent/tests/snapshots/hook-cc-invalid-matcher/session.jsonl
# examples/acp-agent/tests/snapshots/hook-cc-posttool-block/session.jsonl
# examples/acp-agent/tests/snapshots/hook-cc-posttool-context/session.jsonl
# examples/acp-agent/tests/snapshots/hook-cc-pretool-ask/session.jsonl
# examples/acp-agent/tests/snapshots/hook-cc-pretool-deny/session.jsonl
# examples/acp-agent/tests/snapshots/hook-cc-promptsubmit-context/session.jsonl
# examples/acp-agent/tests/snapshots/hook-cc-stop-continue/session.jsonl
# examples/acp-agent/tests/snapshots/hook-codex-invalid-matcher/session.jsonl
# examples/acp-agent/tests/snapshots/hook-codex-posttool-block/session.jsonl
# examples/acp-agent/tests/snapshots/hook-codex-posttool-context/session.jsonl
# examples/acp-agent/tests/snapshots/hook-codex-pretool-block/session.jsonl
# examples/acp-agent/tests/snapshots/hook-codex-promptsubmit-context/session.jsonl
# examples/acp-agent/tests/snapshots/hook-codex-stop-continue/session.jsonl
# examples/acp-agent/tests/snapshots/lsp-definition/session.jsonl
# examples/acp-agent/tests/snapshots/multi-turn/session.jsonl
# examples/acp-agent/tests/snapshots/packed-chunks/session.jsonl
# examples/acp-agent/tests/snapshots/parallel-tool-calls/session.jsonl
# examples/acp-agent/tests/snapshots/pty-tools/session.jsonl
# examples/acp-agent/tests/snapshots/repeat-tool-guard/session.jsonl
# examples/acp-agent/tests/snapshots/session-query-spill/session.jsonl
# examples/acp-agent/tests/snapshots/session-sandbox-root/session.jsonl
# examples/acp-agent/tests/snapshots/session-title-after-turn/session.jsonl
# examples/acp-agent/tests/snapshots/skill-load/session.jsonl
# examples/acp-agent/tests/snapshots/subagent-depth-two-rejection/session.1.jsonl
# examples/acp-agent/tests/snapshots/subagent-depth-two-rejection/session.2.jsonl
# examples/acp-agent/tests/snapshots/subagent-depth-two-rejection/session.jsonl
# examples/acp-agent/tests/snapshots/subagent-fork/session.1.jsonl
# examples/acp-agent/tests/snapshots/subagent-fork/session.jsonl
# examples/acp-agent/tests/snapshots/subagent-mixed/session.1.jsonl
# examples/acp-agent/tests/snapshots/subagent-mixed/session.2.jsonl
# examples/acp-agent/tests/snapshots/subagent-mixed/session.jsonl
# examples/acp-agent/tests/snapshots/subagent-multi/session.1.jsonl
# examples/acp-agent/tests/snapshots/subagent-multi/session.2.jsonl
# examples/acp-agent/tests/snapshots/subagent-multi/session.jsonl
# examples/acp-agent/tests/snapshots/subagent-spawn/session.1.jsonl
# examples/acp-agent/tests/snapshots/subagent-spawn/session.jsonl
# examples/acp-agent/tests/snapshots/text-turn/session.jsonl
# examples/acp-agent/tests/snapshots/todo-write/session.jsonl
# examples/acp-agent/tests/snapshots/tool-call-turn/session.jsonl
# examples/acp-agent/tests/snapshots/web-fetch/session.jsonl
# examples/acp-agent/tests/snapshots/workflow-run/session.1.jsonl
# examples/acp-agent/tests/snapshots/workflow-run/session.jsonl
# examples/acp-agent/tests/snapshots/workspace-context/session.jsonl
# examples/acp-agent/tests/snapshots/workspace-edit/session.jsonl
# examples/headless-agent/tests/snapshots/pty-tools/session.jsonl
# examples/headless-agent/tests/snapshots/pty-tools/stream-json.expected.jsonl
# examples/headless-agent/tests/subagent-inheritance-snapshots/parent-override/child.expected.jsonl
# examples/headless-agent/tests/subagent-inheritance-snapshots/parent-override/parent.expected.jsonl
# examples/jsonrpc-agent/tests/snapshots/persistent-tools/notifications.expected.jsonl
# examples/jsonrpc-agent/tests/snapshots/persistent-tools/session.jsonl
# packages/core/agent-loop/src/agent.ts
2026-07-31 11:02:45 +08:00
Hypatia May
3a99cf7446
Merge current master into status bar projection
2026-07-31 10:56:34 +08:00
Chinesezjc
83fff705da
Merge remote-tracking branch 'origin/master' into feat/read-presenter
...
# Conflicts:
# docs/config-catalog.md
# docs/cordis-catalog/events.md
# docs/cordis-catalog/services.md
# docs/core-data-structures/tools.i18n.yaml
# docs/core-data-structures/tools.md
# docs/core-data-structures/tools.zh.md
# docs/event-producer-consumer.md
# examples/acp-agent/tests/snapshots/cordis-inspect-jsdoc/session.jsonl
# examples/acp-agent/tests/snapshots/workspace-context/session.jsonl
# packages/cordis/tool-cordis/src/api-catalog.ts
# packages/core/tools/README.i18n.yaml
# packages/core/tools/README.md
# packages/core/tools/README.zh.md
# packages/core/tools/src/index.ts
# packages/core/tools/src/presentation.ts
# packages/ui/tui/src/components/transcript.ts
2026-07-31 10:42:07 +08:00
Yichen Jiang
d3c6638b6d
Merge remote-tracking branch 'origin/master' into worktree/web-model-request-retry
...
# Conflicts:
# apps/cli/README.i18n.yaml
# packages/client/runtime/README.i18n.yaml
# packages/client/runtime/README.md
# packages/client/runtime/README.zh.md
# packages/client/ui-conversation/README.i18n.yaml
# packages/client/ui-conversation/src/client/chat/ChatView.tsx
# packages/client/ui-conversation/src/client/chat/MessageItem.tsx
# packages/client/ui-conversation/tests/chat-view.spec.tsx
2026-07-31 10:19:14 +08:00
Hypatia May
01e64c6350
Merge finalized Web transcript parent
2026-07-31 09:46:32 +08:00
Hypatia May
ff8c5600f4
Merge pinned master into status bar projection
2026-07-31 09:28:52 +08:00
imccyu
59ce4086ae
Merge remote-tracking branch 'origin/master' into mergebot/pr711
...
# Conflicts:
# packages/client/ui-workspace/src/client/WorkspaceBrowser.tsx
# packages/client/ui-workspace/src/client/index.ts
# packages/client/ui-workspace/src/client/rows/Rows.tsx
# packages/client/ui-workspace/src/client/tree.ts
# packages/client/ui-workspace/tests/apply.spec.ts
# packages/client/ui-workspace/tests/rows.spec.tsx
# packages/client/ui-workspace/tests/tree.spec.ts
# packages/client/ui-workspace/tests/workspace-browser.spec.tsx
2026-07-31 04:37:08 +08:00
imccyu
2e034bbbd3
Merge remote-tracking branch 'origin/master' into mergebot/pr711
...
# Conflicts:
# apps/cli/README.i18n.yaml
# docs/module-graph.md
# packages/client/connection/README.i18n.yaml
# packages/client/runtime/README.i18n.yaml
# packages/host/apiproxy/README.i18n.yaml
# packages/host/apiproxy/src/api-proxy.ts
2026-07-31 02:02:47 +08:00
Tianyi Cui
464a57d3ca
Merge commit 'refs/codex/pr1006/master' into worktree/pr1006-merge-20260731
...
# Conflicts:
# docs/architecture.i18n.yaml
# docs/config-catalog.md
# docs/cordis-catalog/services.md
# docs/core-data-structures/core.i18n.yaml
# examples/acp-agent/tests/snapshots/cordis-inspect-jsdoc/session.jsonl
# examples/headless-agent/cordis.yml
# packages/cordis/tool-cordis/src/api-catalog.ts
# packages/llm/llm-deepseek/README.i18n.yaml
# packages/llm/llm-deepseek/README.md
# packages/llm/llm-deepseek/README.zh.md
# packages/llm/llm-deepseek/src/adapter.ts
# packages/llm/llm-deepseek/src/index.ts
# packages/llm/llm-deepseek/tests/adapter.spec.ts
# packages/llm/llm/README.i18n.yaml
# packages/llm/llm/README.md
# packages/llm/llm/README.zh.md
# packages/subagent/subagent-dsh-sdk/README.i18n.yaml
# packages/ui/jsonrpc/README.i18n.yaml
2026-07-31 01:55:19 +08:00
imccyu
ecbd8babc1
Merge remote-tracking branch 'origin/master' into mergebot/pr711
...
# Conflicts:
# apps/cli/README.i18n.yaml
# apps/cli/README.md
# apps/cli/README.zh.md
# apps/cli/cordis.yml
# apps/cli/package.json
# docs/config-catalog.md
# packages/client/runtime/README.i18n.yaml
# packages/client/runtime/src/client/contract/sessions.ts
# packages/client/test-runtime/src/sessions.ts
# packages/client/ui-workspace/README.i18n.yaml
# packages/client/ui-workspace/README.md
# packages/client/ui-workspace/README.zh.md
# packages/client/ui-workspace/src/client/WorkspaceBrowser.tsx
# packages/client/ui-workspace/src/client/tree.ts
# packages/client/ui-workspace/tests/apply.spec.ts
# packages/client/ui-workspace/tests/tree.spec.ts
# packages/host/apiproxy/README.i18n.yaml
# packages/host/apiproxy/src/api-proxy.ts
# packages/host/apiproxy/src/api/index.ts
# packages/host/apiproxy/tests/client-handler.spec.ts
# packages/host/apiproxy/tests/rpc-schemas.spec.ts
# pnpm-lock.yaml
2026-07-31 01:28:15 +08:00
Hypatia May
f3963686bd
Merge final Web parent into manual compact
2026-07-31 00:38:21 +08:00
NI0317
99aff882dc
Merge remote-tracking branch 'origin/master' into codex/sandbox-policy-context
...
# Conflicts:
# examples/acp-agent/tests/snapshots/cordis-inspect-jsdoc/session.jsonl
# examples/acp-agent/tests/snapshots/web-fetch/session.jsonl
2026-07-31 00:33:13 +08:00
Yichen Jiang
e8c550d0e5
Merge worktree-llm-dynamic-config (884, with latest master) into worktree-llm-web-config
2026-07-31 00:31:42 +08:00
Yichen Jiang
f64026d7e3
Merge latest master into worktree-llm-dynamic-config
2026-07-31 00:31:06 +08:00
Tianyi Cui
8eb743a93b
Merge remote-tracking branch 'origin/master' into worktree/pr975-retarget-20260730
2026-07-30 23:55:45 +08:00
NI0317
e1c09e6620
Merge remote-tracking branch 'origin/master' into codex/sandbox-policy-context
2026-07-30 23:46:12 +08:00
Yichen Jiang
8c0d626cd5
Merge worktree-llm-dynamic-config (884, with latest master) into worktree-llm-web-config
...
# Conflicts:
# docs/cordis-catalog/services.md
# docs/core-data-structures/core.i18n.yaml
# packages/client/runtime/README.i18n.yaml
# packages/host/apiproxy/README.i18n.yaml
# packages/host/apiproxy/README.md
# packages/host/apiproxy/README.zh.md
2026-07-30 23:32:31 +08:00
Yichen Jiang
9ebf7424f7
Merge latest master into worktree-llm-dynamic-config
2026-07-30 23:28:58 +08:00