imccyu
73931626be
feat(webserver): add resource routes and in-process readResource ( #6901 )
...
* feat(webserver): add resource routes and in-process readResource
A webserver route or the fallback seat may now answer through a resource,
a function from a Fetch Request to a Response, besides the existing
node:http handler. register accepts either route form and registerFallback
accepts a handler or { resource }; existing handler callers are unchanged.
HTTP GET and HEAD requests reach a resource; webServer.readResource(request,
peer) follows the same match order and reaches only resources, so handler
routes stay unreachable to in-process readers.
client-modules registers /plugins as the fetchBundle resource, and
frontend-static claims the fallback seat with a resource that renders the
index for a supplied Peer, or runs Connection's existing authorizeIndex for
an HTTP request and renders for the browser Peer.
* fix(webserver): flush resource headers and keep one drain listener per response
Resource responses send their status and headers before the first body
chunk, register one drain/close listener pair per response so the gzip
middleware's zlib stream does not accumulate listeners across backpressure
waits, and readResource drops the body of a HEAD read as HTTP does. HTTP
requests and readResource share one responder lookup.
* chore(scripts): prune the retired client-modules unknown-cast baseline entry
* feat(frontend-static): let browsers revalidate dist files except the index
Every dist file other than the rendered index now carries
cache-control: no-cache and a weak ETag from a SHA-1 of its bytes; a
request whose If-None-Match equals that ETag receives an empty 304. The
index keeps sending no cache headers. In-process reads through
webServer.readResource revalidate the same way.
* fix(webserver): stop reading Host for resource URLs and copy no held body
A resource request's URL is the request target resolved against the same
placeholder origin the route match uses, so a missing or unparsable Host no
longer turns a dist or /plugins request into 400. The webserver ends a
resource response itself and treats any earlier close as an abort, which
also covers the Web Worker tunnel marking an aborted response ended first.
client-modules bundle bodies and frontend-static file bodies are the held
bytes themselves instead of copies, and frontend-static no longer exports
its internal serveStatic helper.
* docs(webserver): document resource route types and the handler-or-resource fallback
Paste WebResource and WebResourceRoute beside WebRoute on the web-server
subsystem page and link the catalog signatures to it, replace the remaining
'fallback handler' wording now that the seat takes a handler or a resource,
and note why the drain listener removal is a no-op under gzip.
2026-10-22 13:41:18 +08:00
imccyu
d5d43d931d
fix(remote-access): 按评审修正访问门控边界,插件导航改为可选依赖
...
- ui-entry-customization、voice-input 不再把 pluginNavigation 当必需服务:服务不在时隐藏「浏览插件」与「打开 / 查看详情」按钮,插件照常启动
- plugin-manager 每次授权时刷新已加载的列表
- settings-account 账号设置分区与 sign-in 一并按 account/watch 门控,revision 恢复 master 原样
- schedule 会话头部提醒另按会话 useAccess('schedule/list') 渲染
- 导出 staticAccessPlugin;补 whenAccess 归属、撤权与读者页启动测试
- 同步 README、web-server 子系统文档、webserver 包描述与 Agent Note
2026-10-21 17:57:52 +08:00
imccyu
09899f3a0f
feat(remote-access): 插件注册跟随访问状态(whenAccess),index 按 Peer 注入访问快照
...
- remote-access 新增 whenAccess / whenResourceAccess,ui-session、ui-workspace 各自提供 whenAccess
- schedule、plugin-manager、settings-general、settings-account、directory-picker-native 的入口包进 global whenAccess;消息反馈按钮按会话 useAccess 渲染
- webserver/index-inject 带 Peer,renderIndex / collectIndexInjections 需要 Peer,remote-access 注入 snapshotFor(peer.principal)
- client-test-runtime 新增 StaticRemoteAccess、staticAccessPlugin 与 TestClientOptions.access
- implemented Agent Note 2026-10-21-when-access 与升级指南 webserver-index-peer
Refs #2940
2026-10-21 17:57:51 +08:00
imccyu
10672c4c24
Integrate Peer interaction scope with Remote access
2026-10-14 14:44:01 +08:00
imccyu
a18488955d
docs: sync subsystem docs and regenerate catalogs
2026-10-13 23:03:15 +08:00
imccyu
ba1a9356db
fix(web): advertise one Web GUI URL through the webApp service
...
The web-runtime row provides webApp.getAdvertisedUrl(): the row's
configured publicUrl, otherwise the listener origin. harness-dev-context
reads it instead of webStartup.publicUrl, so a profile override of
publicUrl reaches the model as it already reaches DSH_WEB_URL and the
startup URL. The new package no longer injects webServer or webStartup,
and the startup flag provider returns to its master behavior.
2026-10-12 00:34:29 +08:00
imccyu
adfa92bca1
fix(web): address review on harness dev context
...
- WebServer exposes getOrigin() instead of an origin getter, and it fails
loud before listen binds a port.
- The earlier Web-surface paragraph is a frozen literal, so later guidance
edits cannot stop earlier Sessions from matching; the projection reads a
prompt version with the loop's single-text-block rule.
- web-app drops its unused dsh-system-prompt dependency and stale
prompt-section wording in its description, README, patch comment,
--public-url help, and the round-trip test title.
2026-10-11 23:25:24 +08:00
imccyu
36779dcf09
fix(web): keep process-specific values out of the system prompt
...
The harness checkout path and Web GUI URL now reach the model as runtime
context from the new dsh-harness-dev-context plugin, so a process started
on another port, checkout, or installation no longer rewrites a Session's
logged system prompt. A Session whose prompt already embeds the earlier
value-bearing paragraphs keeps them verbatim through a host-only session
projection.
dsh-host-webserver gains WebServer.origin and bindUrlHost(); web-app keeps
only DSH_WEB_URL, the startup URL, and the browser handoff, and its root
declares the webStartup service type. app-boot drops
addHarnessSourceSection and HARNESS_SOURCE_SECTION.
2026-10-11 23:25:19 +08:00
Yichen Yan
ac080346f0
Support native HTTPS Web listeners
2026-10-08 19:49:01 +08:00
Yichen Yan and liukx0205
cb9a590c86
Support concrete Web listener bind addresses
...
Co-authored-by: liukx0205 <[email protected] >
2026-10-08 18:25:43 +08:00
Tianyi Cui
c7f66d13a6
docs(notes): prune redundant active decision records
2026-09-30 23:20:22 +08:00
imccyu
8ce7c27671
refactor(connection): admit every request as the single operator Peer
2026-09-20 17:53:17 +08:00
imccyu
089004c418
test(gateway): cover the Remote uplink and document it
...
Tests bring the changed sources to full per-file coverage, the READMEs and
docs describe the uplink, the invocation context, and the Peer registry in
both languages, and the generated catalogs are refreshed.
2026-09-20 17:53:17 +08:00
Yichen Yan
8256c84630
chore(docs): regenerate the Cordis catalog after merging master
2026-09-17 20:48:53 +08:00
winewill
63dd8fb80d
feat(desktop): add ordinary and mandatory update flows
2026-09-16 10:48:23 +08:00
imccyu
e57e7c3f25
docs(api): describe Connection-owned transport
2026-08-27 22:26:30 +08:00
Tianyi Cui
3e24087bfa
fix(web): authenticate the browser Host API
2026-08-25 14:23:45 +08:00
imccyu
08ed5a54a8
refactor(webserver): minimize HTTP gzip integration
2026-08-25 06:43:24 +08:00
lsdsjy
600f3a3110
fix(frontend-static): return 404 for a missing index
2026-08-20 20:03:18 +08:00
lsdsjy
92723cafeb
fix(frontend-static): return 404 for missing paths
2026-08-20 20:02:11 +08:00
Turtle
93a1b569ac
Merge remote-tracking branch 'origin/master' into codex/remove-cordis-catalog-line-numbers
...
# Conflicts:
# docs/subsystems/agent-team.i18n.yaml
# docs/subsystems/approval.i18n.yaml
# docs/subsystems/client-modules.i18n.yaml
# docs/subsystems/client-modules.md
# docs/subsystems/client-modules.zh.md
# docs/subsystems/code-runtime.i18n.yaml
# docs/subsystems/commands.i18n.yaml
# docs/subsystems/commands.md
# docs/subsystems/commands.zh.md
# docs/subsystems/compaction.i18n.yaml
# docs/subsystems/compaction.md
# docs/subsystems/compaction.zh.md
# docs/subsystems/core.i18n.yaml
# docs/subsystems/core.md
# docs/subsystems/core.zh.md
# docs/subsystems/credentials.i18n.yaml
# docs/subsystems/credentials.md
# docs/subsystems/credentials.zh.md
# docs/subsystems/feedback.i18n.yaml
# docs/subsystems/filesystem.i18n.yaml
# docs/subsystems/goal.i18n.yaml
# docs/subsystems/http-server.md
# docs/subsystems/http-server.zh.md
# docs/subsystems/invariants.i18n.yaml
# docs/subsystems/invariants.md
# docs/subsystems/invariants.zh.md
# docs/subsystems/jobs.i18n.yaml
# docs/subsystems/llm-streaming.i18n.yaml
# docs/subsystems/llm-streaming.md
# docs/subsystems/llm-streaming.zh.md
# docs/subsystems/permission-presets.md
# docs/subsystems/permission-presets.zh.md
# docs/subsystems/persistence.i18n.yaml
# docs/subsystems/persistence.md
# docs/subsystems/persistence.zh.md
# docs/subsystems/plan.i18n.yaml
# docs/subsystems/plan.md
# docs/subsystems/plan.zh.md
# docs/subsystems/sandbox.i18n.yaml
# docs/subsystems/sandbox.md
# docs/subsystems/sandbox.zh.md
# docs/subsystems/schedule.i18n.yaml
# docs/subsystems/session-projection.i18n.yaml
# docs/subsystems/session-projection.md
# docs/subsystems/session-projection.zh.md
# docs/subsystems/session-query.i18n.yaml
# docs/subsystems/session-reference.i18n.yaml
# docs/subsystems/session-reference.md
# docs/subsystems/session-reference.zh.md
# docs/subsystems/session-telemetry.md
# docs/subsystems/session-telemetry.zh.md
# docs/subsystems/session-title.i18n.yaml
# docs/subsystems/session.i18n.yaml
# docs/subsystems/session.md
# docs/subsystems/session.zh.md
# docs/subsystems/settings.i18n.yaml
# docs/subsystems/settings.md
# docs/subsystems/settings.zh.md
# docs/subsystems/shell.i18n.yaml
# docs/subsystems/shell.md
# docs/subsystems/shell.zh.md
# docs/subsystems/skills.i18n.yaml
# docs/subsystems/skills.md
# docs/subsystems/skills.zh.md
# docs/subsystems/spill.i18n.yaml
# docs/subsystems/storage.i18n.yaml
# docs/subsystems/subagent.i18n.yaml
# docs/subsystems/subagent.md
# docs/subsystems/subagent.zh.md
# docs/subsystems/subprocess.i18n.yaml
# docs/subsystems/system-prompt.i18n.yaml
# docs/subsystems/system-prompt.md
# docs/subsystems/system-prompt.zh.md
# docs/subsystems/tasks.md
# docs/subsystems/tasks.zh.md
# docs/subsystems/terminal.md
# docs/subsystems/terminal.zh.md
# docs/subsystems/token-meter.i18n.yaml
# docs/subsystems/tools.i18n.yaml
# docs/subsystems/tools.md
# docs/subsystems/tools.zh.md
# docs/subsystems/typert.i18n.yaml
# docs/subsystems/typert.md
# docs/subsystems/typert.zh.md
# docs/subsystems/user-interaction.i18n.yaml
# docs/subsystems/user-questions.i18n.yaml
# docs/subsystems/user-questions.md
# docs/subsystems/user-questions.zh.md
# docs/subsystems/web.i18n.yaml
# docs/subsystems/workflow.i18n.yaml
# docs/subsystems/workflow.md
# docs/subsystems/workflow.zh.md
# docs/subsystems/workspace.i18n.yaml
# docs/subsystems/workspace.md
# docs/subsystems/workspace.zh.md
# packages/typert/generator/tests/cordis-catalog.spec.ts
2026-08-20 19:48:43 +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
imccyu
be3a630da8
docs(web): retire tap-era prose across READMEs, subsystems, and notes
2026-08-20 16:13:05 +08:00
imccyu
d582939783
docs(web): align injection-surface JSDoc, notes, and bilingual READMEs
2026-08-20 16:13:05 +08:00
imccyu
d4fd03ae53
chore(docs): classify IndexInjection and regenerate the catalog surfaces
2026-08-20 16:13:04 +08:00
pku-xht
ad6516933b
fix(i18n): close automated review findings
2026-08-18 21:02:50 +08:00
Tianyi Cui
a2d0f7f411
refactor: apply repository naming contract
...
Apply the accepted pre-release package, service, type, directory, and role renames as one repository-wide change.
2026-08-13 00:54:38 +08:00