Commit Graph
21845 Commits
Author SHA1 Message Date
LogosVeritas 00a007d833 Merge branch 'master' into feature/minimal-compact-image 2026-10-13 10:32:01 +08:00
Magolor 5249d9a4ce fix: prefer saved credentials and use environment keys in headless (#5483)
* ui: show locked API key environment reference

* fix(ui-settings-models): skip unused pi-ai credential reference

* fix(ui-settings-models): show active provider auth source

* test(llm): cover provider auth check failures

* docs(ui-settings-models): clarify active provider authentication

* test(web): update model key copy snapshots

* fix(ui-settings-models): clarify native authentication source hint

* fix: address PR 5483 review feedback

* docs(llm): state empty auth lookup behavior

* fix: refresh auth hints with credential snapshots

* fix: require credential refresh revision

* test: cover auth status projection

* fix: refresh catalog and browser expectations after rebase

* fix: keep auth status projection internal and explicit

* fix: preserve credential source checks with signed-in account rows

* test: pin Models authentication instead of inheriting host keys

* fix: prioritize stored credentials across providers

* fix: use one environment fallback hint

* docs: refresh credential contract

* docs: refresh config catalog

* test: align provider hint verification

* fix: use provider-native auth hints and endpoints

* fix: cover oauth-capable provider auth hints

* fix: show canonical endpoint defaults

* fix: avoid misleading endpoint fallback

* fix: label catalog endpoint defaults

* fix: shorten auth hints with hover details

* fix: clarify native auth resolution

* test: align DeepSeek endpoint hint

* fix: pair help button corner shape

* fix: address credential precedence review

Record the stored-credential precedence in a superseding Agent Note and
an upgrade guide, and align the credentials subsystem page, package
READMEs, and JSDoc with the order file > launch env > $cwd/.env >
$DSH_HOME/.env.

Report each pi-ai route's catalog endpoint and native-auth environment
names through the provider directory, check the names against the
installed pi-ai resolvers, and remove the llm/checkAuth and credential
describe operations that no Models page code calls.

Restore the route-derived key reference and the home expansion that
reads the home directory only for a leading ~.

* fix: clarify model authentication guidance

* fix: explain native provider OAuth requirements

* fix: keep authentication guidance method neutral

* fix: show credential reference source in model editor

* fix: use environment authentication in headless profile

* fix: validate headless authentication and current provider metadata

* test: retain authentication guidance coverage with account catalog updates

* test: retain writable Models credentials with the pinned environment
2026-10-13 10:10:06 +08:00
imccyu 5cf7ac9c44 Merge pull request #5897 from deepseek-harness/worktree/client-control/unified-remote-info
feat(typert): unify Remote definitions with lazy method info
2026-10-13 02:35:24 +08:00
imccyu b67cf4d381 test(web): verify plugin header wrapping by intrinsic fit 2026-10-13 01:44:18 +08:00
imccyu 29249a4a83 fix(typert): distribute indexed constraints across unions 2026-10-13 01:43:19 +08:00
imccyu 7ee6da0039 docs(typert): refresh strict input bilingual pairing 2026-10-13 00:58:01 +08:00
imccyu 2e56caee96 fix(typert): enforce strict named dictionary index constraints 2026-10-13 00:53:01 +08:00
imccyu 557e4137bf fix(typert): leave Node client bundling to operator layer 2026-10-13 00:53:01 +08:00
imccyu c36c077c5d docs: correct Gateway Config source reference after rebase 2026-10-13 00:53:00 +08:00
imccyu b769d1ce7a docs(typert): correct Remote metadata references 2026-10-13 00:53:00 +08:00
imccyu bd91a4a570 fix(typert): inject zod into remote metadata factories 2026-10-13 00:53:00 +08:00
imccyu e6278de7cc docs(typert): label the note's illustrative fences as text
The eight snippets in this note are before/after sketches: two import the
Remote source modules this change deletes, and the rest are fragments without
their surrounding context. They were never type-checked, yet each one counted
against the repository-wide opt-out ratio, which now sits above the 50% ceiling
that `doc-typecheck:contracts-ready` enforces.

Label them as text so the ceiling reflects blocks that could be checked.
2026-10-13 00:53:00 +08:00
imccyu d4d904bc4f fix(typert): resolve the file-upload types subpath in host analysis
The Typert host program analyzes packages/api/session-controller/src/commands.ts
on a clean checkout, where only tsconfig paths resolve
@deepseek-ai/dsh-client-file-upload/types; without the mapping the dependency
policy gate fails with TS2307.
2026-10-13 00:52:59 +08:00
imccyu 902df58ded refactor: scope this branch to generated Remote artifacts
The caller-connection work — forwarded-event opt-in, physical socket
ownership, and the Node/MCP artifact-only consumer fixture — moves to a
stacked PR on top of this one. This branch now changes only how Remote
definitions are generated (Typert artifacts, lazy method info,
consumer-selected input strictness, tool-schema projection) and how the
existing Registry consumes them.
2026-10-13 00:52:59 +08:00
imccyu ae8d417dcf refactor(typert): name the tool-schema projection for its owning standard 2026-10-13 00:52:59 +08:00
imccyu d5bf4b348a refactor(remote): drop unrelated churn from the metadata change 2026-10-13 00:52:58 +08:00
imccyu 570520862d refactor(typert): let consumers select input schema strictness 2026-10-13 00:52:58 +08:00
imccyu efdaa86fb8 feat(typert): unify Remote definitions with lazy method info 2026-10-13 00:52:58 +08:00
imccyu 27fd3c8b80 Merge pull request #6062 from deepseek-harness/feat/sidebar-session-watermark
feat(ui-workspace): fold sidebar sessions with a monotonic watermark
2026-10-13 00:45:17 +08:00
imccyu d6e26edbec Merge pull request #6075 from deepseek-harness/worktree-messageindep
refactor(ui-chat): place Chat rows by group-tree position
2026-10-13 00:06:01 +08:00
Yifffan 6eaa595fdb Merge pull request #6073 from deepseek-harness/feat/adaptive-ui-and-skills
feat(skills): 新增自适应客户端规范(Skill),并适配插件页与自动化任务页页头
2026-10-12 23:52:49 +08:00
imccyu fecf123858 docs(conversation): explain how a Chat Node chooses its group-tree position
Add a placement table to the Definition section: which `groupTree`
position a Chat Node declares for an opening human input, another Turn
input, a Turn notice outside folding, an independent folded row, and
ordinary process content, with links to the contract and the built-in
positions, and a pointer to `exclusive` claims.
2026-10-12 23:21:32 +08:00
imccyu 0b28bc80a7 fix(ui-chat): narrow input payloads before reading echo identities
`observedInputs` now reads every `input`-position Node, and a Node's
payload is not guaranteed to be an object. Check the payload and its
`source` before reading the composer `rpcId`, so an input Node without a
message payload no longer throws while pending echoes are matched.
2026-10-12 23:21:32 +08:00
imccyu 9a78e752b1 test(ui-chat): pin the input position order and a later-anchored Turn control
The position-order case includes `input`. A Turn without opening input
whose control anchors after a position-less row still renders the control
before the group that holds that row.
2026-10-12 23:21:32 +08:00
imccyu 8f5139b2c8 docs: complete the exclusive-claim contract and group-tree pointers
State in the `exclusive` JSDoc and the Conversation reference that the
claimed target's fallback does not run and that a fallback's own claim
has no effect. Reword the `input` position as the Turn's opening input
and separate the finalized-answer exemption from position-less
`assistant-step` rows. Point both package READMEs at the claim and the
group-tree positions.
2026-10-12 23:21:32 +08:00
imccyu c373b2958d test: cover exclusive matches and group-tree positions
Assembler cases cover a claim in either registration order and on live
append, other targets and target-less Definitions, the skipped fallback,
and both dispatch failures. Chat grouping cases split the step run by
position regardless of kind and regroup on a position change; the late
reply produces one Chat Node through a real assembler.
2026-10-12 23:21:32 +08:00
imccyu 2c16fb10e5 docs: record exclusive matches and migrated group-tree positions
Add the exclusive Conversation matches Agent Note; bring the group-tree
note up to the `input` position and the migrated kind lists, and the
timed-question note up to claim-based reply deduplication. Pair the
Chinese Conversation reference and Chat grouping README with the
English updates.
2026-10-12 23:21:31 +08:00
imccyu 5dbc298ed1 refactor(ui-chat): place Chat rows by group-tree position
Chat grouping, whole-Turn folding, and Turn-input detection read each
Node's declared `groupTree` position instead of the `INDEPENDENT` and
`TURN_PROCESS_INDEPENDENT_KINDS` kind lists and the user/steering/
turn-trigger checks. `ChatGroupTree` gains an `input` position between
`exchange` and `turn`; the built-in Definitions declare the positions
their kinds had, so built-in rows keep their placement.

The late question reply claims its message on the Chat target, so the
generic message Definition no longer projects a duplicate trigger and
grouping drops the message-id aggregation. Its placement is unchanged.
2026-10-12 23:21:31 +08:00
imccyu 533299e6ab feat(ui-conversation): let a Definition claim an event on its target
A match result may set `exclusive: true`. The assembler evaluates every
match of an event before accepting any, so a claim is independent of
registration order: other Definitions of the claimed target build no
Context for the event and the target's fallback does not run, while
Definitions of other targets and target-less Definitions still receive
it. Two claims on one target, or a claim without a target, throw.
2026-10-12 23:21:23 +08:00
Yif 9e62c1c229 fix(web): restore the plugin header subtitle row to its flex layout
The responsive change had moved `.pageIntro` off flex, which put the information
icon 1.06px off the subtitle's vertical centre and failed the existing geometry
assertion in `plugin-manager.e2e.ts`. Restore the flex row and the button's
`flex: none`, which keeps the 4px gap and the centring. The header still wraps
its action group onto another line, which is what this change is for.

Pin the wrap threshold in both header scenarios. Each records whether the action
group sits beside or below the heading, the plugin scenario asserts the wide and
narrow sides explicitly, and the plugin scenario launches its own scaffold so an
install task left by an earlier test cannot move the threshold between runs.
2026-10-12 23:15:20 +08:00
Yudong Han 4dff4b07f0 Merge pull request #6042 from deepseek-harness/fix/office-docx-check-scope
fix(office): 移除内置 checker 并限制 Word 无关检查
2026-10-12 22:50:11 +08:00
Yif 5a52b980e5 feat(skills): keep the mobile input keyboard closed by default
Add the eighth rule to the responsive client UI standard: on mobile, do not
raise the input keyboard automatically unless it is explicitly intended.
2026-10-12 22:33:05 +08:00
yudshj 232f86dadc docs(office): drop the checker upgrade guide
Bundled Office resource files are internal implementation, so removing
check_office.py breaks no supported surface.
2026-10-12 22:29:24 +08:00
turtle1999 5a7cb94149 fix(ui-workspace): address watermark review
- Compute each group's baseline watermark once per render.
- Skip the row-motion reset when folding drops no raised watermark.
- Document that the watermark is a row count that a reorder can outrun, and
  that any unmount of the grouped tree resets it; pin both in tests.
- Cover raise-to-current, keep-after-leaving, and fold reset in the keyless
  Web folding scenario.
2026-10-12 22:28:05 +08:00
Yif 89c4652add feat(web): reflow the automation tasks header at narrow widths
The page header keeps the title at its natural width and moves the New action
onto another line once the two no longer fit, so a narrow content column never
splits the title across lines.

Register the new browser scenario in both web programs: the host aggregate owns
files that boot the host spine, and the client-registered app project excludes
them.

The scenario asserts the title stays on one line, the action separates when the
column narrows, and focus survives the change.
2026-10-12 21:56:15 +08:00
Yif ee558c82d7 feat(web): reflow the Plugins page header at narrow widths
The page header wraps its action group onto another line when the title and the
actions no longer fit together, so the title keeps its width and the actions keep
their labels on one line. The information button follows the subtitle text
instead of a flex row, which keeps it beside the copy at every width.

Cover the header in the plugin-manager browser scenario: the action group stays
inline when it fits, moves below when it does not, keeps its labels on one line,
stays inside the header, and retains focus across the change.
2026-10-12 21:56:08 +08:00
Yif ebe725081c feat(skills): add the responsive client UI standard
Add `.agents/skills/dsh-responsive-ui`, the repository standard for adapting
client surfaces to narrow available widths: the 390 CSS px acceptance minimum,
the order in which space and information yield, text truncation, titles,
icon-only controls, mobile hover behaviour, mobile tooltips, and focus
retention across width changes.

Link it from `dsh-client-ui-ux` so the existing client UI/UX guidance routes to
the new standard.
2026-10-12 21:56:01 +08:00
Yifffan 9055e29891 Merge pull request #5172 from deepseek-harness/ui/plugin-placeholder-default-name
fix(ui): 修复会话操作间距、悬停交互与任务菜单层级
2026-10-12 21:38:13 +08:00
Yichen Jiang 3f14041b03 Merge pull request #6051 from deepseek-harness/worktree/pi-ai-1.1.0
feat(llm-pi-ai): adopt pi-ai 1.1.0 and Azure provider rename
2026-10-12 21:35:06 +08:00
Yichen Jiang f9febc7e7f test(web): wait for terminal burst delivery and rendering 2026-10-12 21:22:59 +08:00
Yichen Jiang 40f9bccd78 Merge remote-tracking branch 'origin/master' into worktree/pi-ai-1.1.0
# Conflicts:
#	apps/desktop/tests/prepare-runtime-patches.spec.ts
2026-10-12 20:56:10 +08:00
turtle1999 7df3c41ec9 feat(ui-workspace): fold sidebar sessions with a monotonic watermark
Each Workspace shows a contiguous prefix of its Sessions up to a watermark.
The watermark rises to cover running, waiting, unread-completion, and
current Sessions within the first 50 rows, and to a search reveal target at
any row. It never falls on its own; Show more raises it past 50, and Show
less or folding (including an ancestor) resets it.
2026-10-12 20:36:18 +08:00
winewill 3a7e896206 Merge pull request #6053 from deepseek-harness/build/macos-runner-service
build: macOS runner service and optional notarization
2026-10-12 19:42:46 +08:00
winewill 1379394224 fix: verify and number unnotarized macOS artifacts 2026-10-12 19:11:01 +08:00
Wenlu Wang 8c5e325f2d Merge pull request #5995 from deepseek-harness/perf/macos-dmg-lzma
perf(desktop): compress macOS DMGs with LZMA
2026-10-12 18:38:26 +08:00
Yichen Jiang 7b8eef3954 test(llm-pi-ai): avoid model-specific Azure assertions 2026-10-12 18:09:54 +08:00
kingwl 01283f1fdd perf(desktop): compress macOS DMGs with LZMA 2026-10-12 18:06:00 +08:00
winewill a98c6aae78 build: manage macOS runner service and optional notarization 2026-10-12 18:01:44 +08:00
Yif a7aeae3e81 test(web): expect workspace tooltips to coexist with details 2026-10-12 18:00:43 +08:00
yudshj f44cfa7813 fix(office): name PowerPoint and Excel scripts for their task
PowerPoint and Excel tasks in PTC mode wrote inspect.py, which shadows the
standard library and forces a delete-and-retry step. Apply the Word naming
rule to both skills, listing the libraries each one imports.
2026-10-12 17:51:44 +08:00