Commit Graph
8144 Commits
Author SHA1 Message Date
lsdsjy c74c8bc471 Merge origin/master into feat/desktop-welcome-and-window-controls 2026-09-20 11:37:38 +08:00
lsdsjy f0a35eba0d feat(credentials,ui-settings-account): display bonus wallets separately 2026-09-20 11:31:41 +08:00
lsdsjy 0c0789e4df fix(deepseek-account-platform): identify embedded desktop requests 2026-09-20 11:31:41 +08:00
lsdsjy 68f8d32d83 fix(desktop,deepseek-account): share platform headers for Host API requests 2026-09-20 11:31:40 +08:00
lsdsjy fe6702cb20 feat(credentials): configure inference origin and discard mismatched account grants 2026-09-20 11:31:40 +08:00
lsdsjy b73a2c8d2d fix(desktop,credentials,ui-settings-account): configure embedded deployment and disable label selection 2026-09-20 11:31:40 +08:00
lsdsjy 5b7195e032 feat(desktop,credentials,client): update sign-in protocol and Platform experience 2026-09-20 11:31:40 +08:00
lsdsjy 048297321a feat(desktop,credentials,client): integrate DeepSeek account sign-in and Platform pages 2026-09-20 11:31:40 +08:00
lsdsjy 753eff67b1 feat(desktop,client): add the native welcome window 2026-09-20 11:31:27 +08:00
Huanqi Cao 94a2d4af28 Merge remote-tracking branch 'origin/master' into fix/windows-acl-delete-escape
# Conflicts:
#	docs/config-catalog.i18n.yaml
2026-09-20 11:17:22 +08:00
creatixchu 0c3045d488 fix: validate native metadata and refresh generated source references 2026-09-20 10:45:21 +08:00
creatixchu 0ae1b2f91c docs: describe native file application selection and platform scope 2026-09-20 10:39:42 +08:00
imccyu 1b51a1ad2d fix(session): label list projection blocks with their sequence space
SessionProjectionHints gains a required `kind`: `sequenced` when the Host's live registry computed the block for an attached Session, `cached` when a header-only listing viewed it from the persisted projection cache. `asOfSeq` stays the producer's own watermark in that space, so the cache read faces report the lowest served row seq again instead of the -1 sentinel. The two fields are independent: `kind` names the sequence space, `asOfSeq` the position in it.
2026-09-20 01:31:52 +08:00
imccyu 86ca9de07e fix(session): read cold seeded rows from the projection cache by header
The projection cache read-only face (cachedSnapshot, cachedPredecessorTitle) now matches the lifecycle identity a header witnesses (formatVersion, createdAt, cwd, isSeeded) and serves its rows as a cached block with asOfSeq -1. The fold face (hydratePrepared, write, coldSnapshot) keeps the full identity including the inherited cut. The session list and @ completion drop their isSeeded guards, so forked sessions keep their cached title and list metadata across a Host restart; list-children keeps its body fallback.
2026-09-20 01:31:52 +08:00
imccyu d67545f367 docs: sync catalogs and contracts for session fixes 2026-09-19 23:05:40 +08:00
Dudu-0223 6362113ef8 Merge master into fix/lazy-subagent-migration 2026-09-19 22:53:29 +08:00
Dudu-0223 a9985b49ae fix(session): migrate historical subagents only when opened 2026-09-19 22:47:01 +08:00
Dudu-0223 d5a0f7dd68 fix(subagent): list only continuable children 2026-09-19 22:41:38 +08:00
Dudu-0223 6a4a74eadf Merge commit '8b890e7550' into refactor/subagent 2026-09-19 22:25:34 +08:00
imccyu 3863992e67 Merge pull request #4571 from deepseek-harness/worktree-pluginlocale
feat: 插件元信息支持按 export 多语言展示
2026-09-19 22:15:53 +08:00
Dudu-0223 955c9d255a fix(subagent): align catalog consumers and integration coverage 2026-09-19 21:04:01 +08:00
Dudu-0223 6419c0eb21 chore(subagent): integrate latest master and typed test fixtures 2026-09-19 20:44:43 +08:00
Dudu-0223 7e8591de1c refactor(subagent): rebuild activations on master with shared catalog 2026-09-19 20:39:43 +08:00
mektpoy 76f0422653 Merge remote-tracking branch 'origin/master' into fix/4573-browser-use-shared-instances 2026-09-19 20:32:48 +08:00
Tianyi Cui a22ac3284d Merge pull request #4611 from deepseek-harness/worktree/parallel-v4-corpus-migration-20260919
perf(session): parallelize V4 migration with JSON reports
2026-09-19 20:27:44 +08:00
imccyu 8ceaa725e0 build(plugins): validate locale resources and refresh catalogs 2026-09-19 20:19:07 +08:00
imccyu f8240240fa docs(plugins): define localized display metadata and fallback rules 2026-09-19 20:19:03 +08:00
Tianyi Cui f476a25de3 feat(session): emit structured corpus migration summaries
A text error list does not show how failures are distributed across historical source versions or let developers aggregate repeated rejection reasons. Emit and save the same JSON report with per-version outcomes, stable failure groups and per-input diagnostics, plus runtime, checkout and report locations. Keep source versions from physical discovery rather than migrated handle headers.

Classify only known diagnostic fields such as unexpected members, unknown events, child prerequisites and sequence gaps. Preserve original messages and use an explicit fallback for other failures; the report makes no inference about historical producer bugs and cannot influence admission or retry decisions. Regression checks cover printed/file/log equality, private report files, grouped distinct sequence coordinates and source-file preservation.
2026-09-19 20:00:11 +08:00
Dudu-0223 ec7030afd3 fix(compaction): default summary output cap to headroom 2026-09-19 19:56:54 +08:00
Dudu-0223 555b664b08 fix(compaction): reserve configurable 64K pressure headroom 2026-09-19 19:56:53 +08:00
Dudu-0223 0fadb08fbd fix(compaction): gate pressure on the message budget, not the whole window
Proactive pressure scaled `thresholdRatio` by the routed model's entire
context window, but a request also reserves output tokens the provider
charges to that same window — the LLM service deliberately never clamps
them (`packages/llm/llm/src/index.ts`).

With a 1,000,000-token window and the default 256,000-token request cap the
gate therefore sat at 800,000 while the provider refused any prompt above
792,576. Observed in a real session: three requests died at 792,850 /
797,639 / 793,352 message tokens ("maximum context length is 1048576 ...
you requested 1048850 tokens"), no pressure compaction ever fired, and the
overflow recovery that did run could not condense an ~800k-token history
into the 8192-token summary cap.

Scale both ratios by the message budget left after the reserve, sourced from
the effective request envelope's `maxTokens` and falling back to the
adapter's per-request output default. A reserve that leaves no message
budget reports a target-specific pressure configuration error, matching the
existing per-route warning policy rather than silently disabling proactive
compaction. The headless compaction e2e advertises a coherent capacity/cap
pair so its 8000-token message budget and 4000-token threshold are unchanged.

Related #1841
2026-09-19 19:56:51 +08:00
Tianyi Cui e105557046 perf(session): parallelize V4 corpus migration
Sequential corpus migration waits for each Session to finish I/O and publication verification before starting the next. Use a bounded queue with one shared persistence Context, defaulting to available CPU count capped at 16. Expert --jobs overrides accept any positive safe integer. Stable input indices and separate completion counts keep interleaved progress useful for large corpora without opening every log simultaneously.

A concurrently upgraded child can invalidate its parent evidence. Preserve the backend revision checks and defer only the explicit source-change error for one serial retry after initial work drains. Corruption, unsupported formats and writer locks remain failures; historical files and existing V4 data remain unchanged. Deterministic scheduler tests cover 10,000 inputs, bounded overlap and retry ordering, while real raw/zstd corpora verify parent catalogs and serial-equivalent output. Performance timing was stopped at user request because the host has competing workloads.
2026-09-19 19:49:30 +08:00
mektpoy 31925760ca Merge remote-tracking branch 'origin/master' into fix/4573-browser-use-shared-instances 2026-09-19 19:31:56 +08:00
Tianyi Cui 8dc1d0e3ed feat(session): add one-time V4 corpus migration command
Give developers one pnpm command to exercise the release migration against their own Session roots. Inventory physical generations so malformed entries remain visible, then reuse JSONL write-open locking, validation, and exclusive successor publication with the full root available for child-catalog evidence. Open existing V4 files read-only and preserve every historical generation.

Report each selected source and outcome, continue after individual failures, repeat all errors at the end, and retain a private temporary report with checkout/runtime details and full causes. A failed run exits nonzero. Explicitly close handles because source-launch await-using lowering inside a loop can retain a previous iteration error. Real-entry regressions cover raw/zstd tool-result conversion, repeated runs, unchanged originals, failure continuation, and unsupported layouts. Document the command in the migration cookbook.
2026-09-19 18:51:42 +08:00
Tianyi Cui b28fca7e87 docs(session): correct incomplete child evidence migration policy
The V4 acknowledgement still said missing child descriptors reject migration. The converter already skips backfill when a child has no single supported own descriptor, while explicit identity, timestamp, and mode conflicts still reject publication. Align both language versions with that behavior so release reviewers and corpus testers do not expect an obsolete refusal. Preserve every machine acknowledgement and schema fingerprint.
2026-09-19 18:51:32 +08:00
Tianyi Cui 8b0b2dc1d8 Merge master b86916de into release/session-log-v4
Integrate the master tip observed for the final V4 landing preparation on
top of the already merged migration stack. Preserve the V4 writer, flat
message migration, extension policy, catalog validation and historical
recordings while bringing in upstream profile resolution and desktop/UI
changes.

Resolve four generated translation-pairing records from the combined
English/Chinese text. Keep this master checkpoint separate from any
integration fixes and retain all reviewed parent history. Follow-up
validation covers the affected launch/UI paths and migration replay.
2026-09-19 18:00:36 +08:00
Tianyi Cui 56f8c7f51b docs(session): keep migration mappings specific to each edge
The cookbook previously promoted plugin prefixes and owner separation into a general requirement. That overstates the migration policy: direct source kinds and ordinary metadata need no new namespace solely because they are extensible.

Require each edge to document only the mappings its target needs and why, preserve nested opaque data, and permit alpha refusal of unexpected source fields that would otherwise acquire new target meaning. Exact V3 source and ToolSchema choices remain in the V3-to-V4 README; no runtime, schema, or provider behavior changes.
2026-09-19 17:27:14 +08:00
Tianyi Cui bb81d312ae docs(session): scope extension prefixes to declared mappings
The convention identifies how an edge preserves the identifiers and extension fields that it explicitly maps; it does not require every extension-owned field in every source slot to be renamed.

Keep the cookbook general enough for preserved stream-start extras while retaining the exact field-owner mappings documented by each migration edge. This changes policy wording only, not the current V4 schema or conversion implementation.
2026-09-19 17:20:53 +08:00
Tianyi Cui 3e31760bc7 docs(session): explain historical result field ownership
The flat result conversion prefixes every extension-owned field, not just names currently colliding with core fields. Correct the cookbook wording to match that complete mapping.

Record why retaining opaque message and wrapper owners does not invent a shared owner or a new core metadata field. The deliberate costs are retaining duplicate opaque values and requiring plugin consumers to use V4 names; the first-class tool-message decision and runtime implementation stay unchanged.
2026-09-19 17:20:53 +08:00
Tianyi Cui 45ce6ef21d docs(session): clarify converter fixes leave existing successors intact
An incoming converter runs only when a historical generation is selected. Fixing a mapping after the target ships does not revisit already-produced target files, so allowing compatible converter fixes must not imply repairing those files automatically.

Keep the user-approved ability to extend or correct historical conversion without a target version bump. Require documentation of changed accepted mappings and continued support for existing outputs, and distinguish that work from changing target representation or interpretation incompatibly. Keep operational alpha guidance in the cookbook and the owning decision note focused on the runtime facts.
2026-09-19 17:20:53 +08:00
Tianyi Cui e90c55e0ab docs(session): distinguish converter support from target compatibility
The compatibility obligation belongs to the released target format.
An incoming converter can be fixed or support more historical inputs after
the target ships, as long as its output preserves that target's meaning.
Alpha releases may reject valid historical cases without an implemented,
evidenced mapping instead of expanding the format for speculative inputs.

Record the native-writer oracle, pre-normalization comparison, supported
flat V4 tool-result representation, uniform plugin naming, owner collision
rules, retained source files and read-only private corpus handling in the
migration cookbook. Align the existing architecture note with this rule;
keep native target changes and source conversion fixes distinct.

This updates contributor guidance only. It does not change finalization
checkpoint machinery, existing V4 schemas, or any released codec.
2026-09-19 17:20:53 +08:00
Yichen Jiang 536a94b188 fix(settings-models): exact Models nav locators, scoped vendor term, review nits
The new "添加模型提供商" button shares a prefix with the Models nav entry,
so every e2e that clicked the nav through a non-exact locator resolved
two buttons once the page rendered; the nav locators are exact now.

The vendor sense of "provider" is registered in the terminology table
as 模型提供商 with its scope — the Models settings copy, the providers
user guide, and this package's README — while the generic provider rows
keep 提供方, and the package's Chinese README uses the vendor term
throughout. The custom card's header comment no longer claims a mode
switch that a custom-only card does not render, and the SegmentedControl
suite gains a positive Home/End case whose first enabled option is not
the first option.
2026-09-19 15:48:10 +08:00
Tianyi Cui bf29247fad fix(session): namespace historical V3 extensions with plugin prefixes
V3 permits external event, source and content identities and additional
request-tool fields. Copying those values into V4 can give an old plugin
named tool a core source identity, turn old tool-addition content into a
registry instruction, or activate formerly ignored deferLoading and delivery
metadata. Rejecting such collisions would instead refuse valid source logs.

Keep historical extensions in the existing extensible JSON representation.
Prefix unknown content and ignorable event tags with plugin:, preserving
all other content fields and opaque event payloads. Prefix external source
identities with plugin:plugin: or plugin:source: so wrapper and direct kinds
cannot collide even when original names already contain a category prefix.
Known first-party mappings remain explicit and unchanged.

Prefix extra request-tool field names and block-start field names with
plugin:, retaining exact values and existing-prefix doubling. Core schema
parameters, arguments, replay state and nested plugin data are not traversed.
Keep future-generation delivery records inactive after header promotion.
Pin the V3 event vocabulary independently of the current writer and provide
an offline verifier against an explicitly selected historical source commit.

Attachment authorization and export inspect declared event content only.
Team checkpoints preserve all own keys of unknown JSON blocks while still
rejecting malformed known content and retired core tool-result blocks.
Exercise physical read/write/reopen, prefix injectivity, own __proto__ keys,
provider opacity and retained source-identity snapshots.

No generic extension block, metadata wrapper or new schema-tooling type is
introduced. V4 type declarations, persistence schema, checkpoint and frozen
V0-V3 codecs remain unchanged. Canonical tool-result lifting and incomplete
child-catalog policy remain separate concerns.

Adapted from the extension-preservation work in 7ba7e174dd1 by Tianyi Cui.
Co-authored-by: Tianyi Cui <[email protected]>
2026-09-19 15:43:09 +08:00
Tianyi Cui 1613a10c03 merge: integrate pinned master into session-log-v4
Merge master 7e2b049d8e2523127a3b4fba38cab4748ef0c72f, observed on
2026-09-19 at 07:38:37 UTC, into release/session-log-v4 at
c4663e8671e33bc2cfdbc868b0b18d979508d39b. Keep this base integration
separate from the five persistence repair PRs so their review diffs
remain focused and can be rebased without moving their fixes here.

Combine master's pin ordering and archived-session filter with V4's
parent-owned direct child catalog. Both grouped and flat sidebar rows
must pass the Session list to the V4 activity calculation; restoring
master's summary-lineage traversal would reintroduce the removed
subagent ownership and count unrelated descendants.

Keep master's removal of the archived-session settings page. Its only
release-side test change renamed a Session list fixture field, so no
runtime behavior is lost by deleting that obsolete test. Adapt the
release-side direct-child-status regression to the new row/filter
arguments and preserve its assertions.

Retain master's workspace ordering and row-motion documentation while
keeping the V4 child-catalog wording. Reconcile the generated bilingual
records against the merged documents. Frozen V0-V3 codecs, recorded
Session JSONL inputs, and the current V4 persistence schema are unchanged.

Refs #2692, #3273
2026-09-19 15:42:11 +08:00
Yichen Jiang 8a320a276b feat(settings-models): one add entry with third-party and custom-API modes
The Models page offered two side-by-side buttons, "Add provider" and
"Add a custom provider", which asked a new user to classify their
provider by an implementation fact — whether it is in the installed
pi-ai catalog — before seeing anything. One "Add model provider" button
now opens one card whose segmented mode switch chooses between a
third-party model provider (the catalog select over the provider
editor) and a custom model API (the create form for a relay, a
self-hosted server, or any other OpenAI- or Anthropic-compatible
endpoint), with a one-line purpose beneath the switch. A panel mounts
the first time its mode is shown and stays mounted, hidden, while the
card is open, so switching modes discards neither draft.

A mode is offered only while its namespace is mounted and disabled
while it has nothing to offer, which keeps the old per-button
availability; with one mode the card shows that form alone. The
protocol pickers name each protocol by its product name while the
stored value stays the schema identifier, and an unnamed protocol shows
that identifier. The Chinese copy of this page calls a provider 提供商
throughout.

The e2e scenarios drive the single entry and its custom-API mode, and
the ARIA goldens that carry the page copy are re-recorded. The user
guide describes the one entry with fresh screenshots in both languages.
2026-09-19 15:14:52 +08:00
Huanqi Cao 08217140b8 Merge remote-tracking branch 'origin/master' into fix/windows-acl-delete-escape 2026-09-19 14:31:47 +08:00
Huanqi Cao 7201569aef docs(config-catalog): carry the source-line refresh to the zh pair
The generated catalog is a bilingual pair, so the regenerated English side
must be brought over with its Chinese counterpart before the pairing record
is re-written.
2026-09-19 14:17:59 +08:00
Yif a80f5186a6 Merge remote-tracking branch 'origin/master' into feat/macos-sidebar-ui-and-drag-refine 2026-09-19 14:05:21 +08:00
Huanqi Cao 85724fb5b0 docs(config-catalog): refresh the sandbox-local Config source line
The comment edit in sandbox-local/src/index.ts moved the Config block from
line 44 to 45, and the generated catalog records that line.
2026-09-19 14:05:18 +08:00
Huanqi Cao 3d5ba3b83f fix(sandbox): scope the delete deny to containers, clearing the review round
The inheritable `Deny Everyone FILE_DELETE_CHILD` also reached FILES, and
0x40 is a member of FILE_ALL_ACCESS: measured against a real runner, a
Medium caller's CreateFileW(GENERIC_ALL) on every file, directory, and temp
root inside a granted root returned ACCESS_DENIED. The deny now carries
CONTAINER_INHERIT_ACE, so files keep working; a FullControl open of a
DIRECTORY inside a granted root stays denied and is pinned as the residual
cost of denying a right the full-access mask contains.

Also from the review:

- Leaks on fail-closed paths: the label ACL on both early SetEntriesInAclW
  exits, the read descriptor when the label build fails, and the parsed
  capability SID when either well-known-SID creation fails.
- `revokeWrite` keeps the shared Low label while another capability grant
  remains on the directory, so two grants on one path stay independently
  revocable; `hasExactLabel` delegates to hasExactEntry.
- The delete probe uses process.execPath, restrictTokenIntegrity guards a
  zero-length SID, and verify/abi-probe.cpp covers the new constants
  (compiled; static_asserts pass).
- Consumers updated in the same change: sandbox-local source comments and
  README pair, pwsh-sandbox README pair, docs/subsystems/sandbox pair, and
  the 2026-07-06 sandbox note pair no longer cite the Everyone-write
  boundary as a current partial reason.
- New Agent Note records the mandatory-integrity decision, the deny scoping,
  the standing label with its externality (other Low-integrity processes
  running as the user, surviving the session), and the rejected
  alternatives; the 2026-08-08 note cross-links it.
- New runner pins: NUL stays writable under the Low token, the FullControl
  file/directory split, and the shared-label revoke. Per-file coverage back
  to 100%.
2026-09-19 13:42:47 +08:00