Commit Graph
7444 Commits
Author SHA1 Message Date
Chinesezjc dbae54a7c9 Merge origin/master into refactor/unify-time-vocabulary
Resolutions:
- docs/config-catalog.md and .zh.md are regenerated from the merged package
  descriptions.
2026-10-19 16:22:37 +08:00
_Kerman ac71b42560 Merge pull request #5966 from deepseek-harness/xtr/session-projection-registration-handles
refactor(session-projection): return retained handles from async registration
2026-10-19 15:47:04 +08:00
_Kerman d3f486e98e fix(plan-mode): reject requests before guidance is ready 2026-10-19 15:26:30 +08:00
LogosVeritas 7d656c0511 Merge pull request #6369 from deepseek-harness/fix/sdk-minimal-checkpoints
为 sdk-minimal 默认启用已有的 session-checkpoint-policy,在模型请求、顶层工具执行和 step 前等待会话记录持久化,并在刷盘失败时阻止后续操作,将首次日志写入与原生写锁初始化提前到首个模型请求之前,降低短会话关闭时历史无法恢复的风险。同步补齐依赖、配置断言、回归测试及双语升级指南,并依据启用 checkpoint 后的 4 轮、20 个 CI 样本,将 profile-continuation 预算从 4,250 ms 重新校准为 7,000 ms,保留工作负载、完成数量及超预算检查。Fixes #6512。
2026-10-19 15:17:07 +08:00
Chinesezjc 19605806cb Merge origin/master into refactor/unify-time-vocabulary
Resolutions:
- packages/util/time/package.json keeps this branch's description and takes
  master's 0.2.1-rc.2 version.
- packages/util/README.i18n.yaml is re-recorded after the merge.
2026-10-19 15:05:12 +08:00
Shigma 23356d9c9c Merge pull request #6193 from deepseek-harness/chore/cordis-timer-1.1.4
chore(cordis): sync Timer 1.1.4 and reuse it in Client
2026-10-19 13:51:40 +08:00
Shigma 675e5de5f8 refactor(cordis): remove obsolete ClientTimerService export 2026-10-19 13:14:59 +08:00
luogesi 1ddba8b3b0 fix(sdk-minimal): align review fixtures and upgrade guide 2026-10-19 12:13:57 +08:00
luogesi f62182e577 fix(sdk-minimal): checkpoint sessions before dispatch 2026-10-19 12:13:57 +08:00
turtle1999 4292020410 feat(plugin-market-generator): skip packages and versions marked private
A manifest with "private": true keeps its version out of the index. A Git
package that is private on the default branch is not listed at all, and the
generator warns when every bundle package of a repository is private. The
cache version is bumped so cached private releases are rebuilt.
2026-10-19 11:27:56 +08:00
_Kerman 955e600031 Merge master into session projection registration handles 2026-10-19 11:21:16 +08:00
imccyu d9ae93d0c4 Merge pull request #6485 from deepseek-harness/projection-summary
perf(session-projection): serve session-list rows from a summary key set
2026-10-19 11:10:40 +08:00
imccyu ab77d85f8e chore(docs): regenerate the persistence catalog 2026-10-19 10:53:13 +08:00
imccyu 99eacb881f fix(session-controller): drop a redundant projection cast and refresh doc graphs 2026-10-19 10:43:21 +08:00
imccyu 8ff30ebd96 docs(session-projection): state the shipped summary behavior 2026-10-19 02:57:09 +08:00
imccyu 76eba949bd chore(docs): regenerate the config catalog after the import shift
Adding the `ProjectionKeySelection` import to the projection cache moved its
`Config`/`inject` declaration down one line, so the config catalog's source
reference is regenerated. Only the source location changes.
2026-10-19 01:37:39 +08:00
imccyu f230fc2fc2 refactor(session-projection): review fixes for the summary key set
- Export `ProjectionKeySelection` (the read faces' key selection) and reuse it
  from the projection cache instead of restating the union twice. The Cordis
  catalog can now resolve the type its generated signatures reference.
- Make `wire.summary` a plain boolean: omitted means `true`, and a key whose
  map entry carries the summary mark declares `false` so the runtime key set
  and the client view type agree. The type no longer forbids a declaration.
- Describe the mark accurately: it has no runtime representation; `wire.view`
  and `viewSchema` are typed with `SessionProjectionViewValue`, which strips it,
  so the registration erase only widens the state type.
- Say plainly in the package README, the subsystem page, the client field
  comments, and the Agent Note that a list row carries the summary projection
  and never the full projection: a connected Session's store may hold more
  values, but those are outside the list contract.
- Document the summary vocabulary on the subsystem page with `ts type-equiv`
  blocks for the mark, its stripping, the excluded-key test, the summary value
  type, and the key selection; split the prose paragraph.
- Revert the behavior-neutral cache-double refactors in three specs, and record
  in the Agent Note why no upgrade guide accompanies the wire change and how a
  consumer migrates.
2026-10-19 01:13:24 +08:00
imccyu 64a1d1e95f chore(docs): regenerate the event graph after the line shift
The producer/consumer matrix points at the declaring line of each event. Adding
the `imageLimits` JSDoc and map-entry wrap moved the `api-session/*` declarations
in `packages/api/session-controller/src/types.ts` down by four lines, so the
graph pair is regenerated. Only source locations change.
2026-10-18 23:12:27 +08:00
imccyu 8e2dd67de8 perf(session-controller): exclude the shared image limits from session summaries
`imageLimits` is a boot constant every Session shares: the unit stores no
per-Session state (`stateSchema: z.null()`, `apply: state => state`) and its
view returns `ctx.attachments.imageLimits`. A list row therefore repeated one
host-wide capability fact on every row. It now carries the summary mark like
the three log-derived units, so a summary read skips it while an opened Session
still receives it through `session/follow`, the control baseline, and
`session.projections`.

No other logic changes: the registration, its schema, its constant view, and
the host-side prompt validation keep reading `ctx.attachments` directly.
2026-10-18 23:04:29 +08:00
imccyu 0e1ffcb3a6 chore(persistence): regenerate the event catalog after the line shift
The catalog pages embed the declaring source location of each documented type.
Adding the summary-exclusion import and map-entry JSDoc to
`packages/todo/tool-todo/src/types.ts` moved `TodoItem` and `todo/write` two
lines down, so both catalog languages and their pairing record are regenerated.
No type fingerprint changes: `verify-persistence-changes` still reports 65
roots matching 16 history records.

A second `gen-persistence-catalog` run is required after a schema change: the
page and the machine inventory are generated in one pass, and the page reads
the inventory as it was on disk.
2026-10-18 22:39:11 +08:00
imccyu 0def172a02 chore(persistence): refresh source line references in the schema catalog
`docs/persistence-schema.json` records the declaring source location of every
persisted type. Adding the summary-exclusion import and map-entry JSDoc to
`packages/todo/tool-todo/src/types.ts` moved two declarations down by two
lines, so the generated catalog is regenerated. No persisted type, field, or
history record changes: `verify-persistence-changes` reports 65 roots matching
16 history records, and the release/format catalogs are unchanged.
2026-10-18 22:23:15 +08:00
imccyu 92f9e79fac perf(session-projection): serve session-list rows from a summary key set
A Session-list row no longer carries every registered client view: the three
units whose values a list row never renders (`turnOutline`, `sessionStats`,
and `todos`) are excluded, which removes the whole-log turn outline and the
figure and todo payloads from every row. An opened Session is unchanged —
`session/follow`, the `session/control` baseline, and `session.projections`
still serve every projected key.

The exclusion is one type-level mark plus one registration interlock:
`SessionProjectionSummaryExcluded<T>` marks a map entry, and
`ProjectionDefinition.wire` requires `summary: false` exactly on a marked key
and rejects it everywhere else, so the mark and the declaration cannot drift.
A nullable entry keeps `null` outside the wrapper, so `todos` stays
`TodoItem[] | null`. `summaryKeys()` returns the derived set, stable until a
registration or its disposal changes the key table, and the existing
key-taking read faces (`cachedSnapshot`, `viewCheckpoint`) accept that set
directly, so summaries need no separate read face and no per-read key copy.
`packages/api/session-controller/src/list.ts` passes the set to the live and
cold cached faces; `cachedPredecessorTitle` is untouched.

Client types only: `SessionSummary.projectionValues` narrows to
`SessionProjectionSummaryValues`, `SessionProjectionSnapshot.values` keeps
every view value with the mark stripped, and no wire field or client name
changed. The cache, subsystem page, and package README document the summary
rule and the two read faces.
2026-10-18 22:13:18 +08:00
imccyu f881f61024 feat(api-gateway): compress Remote stream WebSocket with permessage-deflate
Add a `websocketCompression` Gateway config field (`'deflate'` by default,
`'none'` to disable) and negotiate `permessage-deflate` on `/api/remote.mux`.
Frames whose JSON text reaches 1024 characters are compressed in the mux send
path, because `ws` ignores its `threshold` option under the default context
takeover. `maxPayload` is bounded by `max(streamInboxBytes, 1 MiB)` so one
compressed frame cannot inflate past the fixed ceiling.

Fixes #6476
2026-10-18 20:07:13 +08:00
Tianyi Cui 5d98573852 Merge remote-tracking branch 'origin/master' into worktree/unsigned-desktop-local-branding
# Conflicts:
#	docs/development.i18n.yaml
2026-10-18 15:53:01 +08:00
Tianyi Cui b98127cf02 Merge pull request #6457 from deepseek-harness/worktree/session-build-generation-prototype
build: generate metadata before package compilation
2026-10-18 15:45:48 +08:00
ZiyaandZiyaZhang 114da79e42 fix(agent-instructions): budget the user-global and project chains separately (#6400)
* fix(agent-instructions): budget the user-global and project chains separately

The user-global and project instruction files shared one maxBytes and the user-global files were the broadest, so a large project chain omitted them first. Each chain now renders under maxBytes on its own and the results share one system-reminder frame: unchanged output when everything fits or one chain is empty, at most twice maxBytes otherwise. The project chain keeps its omit-broadest-first, truncate-last rule; reconciliation batches follow the same split; the maxBytes key and the baseline identity are unchanged.

Tests cover the fast paths, both chains fitting only separately, each chain over its own budget, the 2 × maxBytes boundary at exact and tiny limits, multibyte content, reconciliation batches, and a resumed single-budget baseline receiving the user-global file as one transition. The agent-instructions-budget snapshot is refreshed and agent-instructions-budget-chains is added. README, Config.maxBytes JSDoc, the configuration catalog, a new Agent Note, and an upgrade guide state the per-chain bound.

* fix(agent-instructions): keep loaded order in merged frames and note the unshared chain budget

A merged frame now lists sections, omissions and truncations in the loaded order, so a reconciliation batch renders its items in one order whether or not it fits a single budget. The guard comment states only the invariant and points to the Agent Note; the intro selection states its rule. The README names the unshared budget between chains.

---------

Co-authored-by: ZiyaZhang <[email protected]>
2026-10-18 00:45:39 -07:00
Tianyi Cui 091d6ed6be feat(desktop): use local branding for unsigned packages 2026-10-18 15:06:16 +08:00
Tianyi Cui 4d33f27225 Prepare metadata in public library builds 2026-10-18 14:29:23 +08:00
Tianyi Cui 9b310b2b4b Generate source metadata before package compilation 2026-10-18 14:29:23 +08:00
Tianyi Cui dfa1482c75 Merge pull request #6456 from deepseek-harness/worktree/review-local-simplification
docs(review): test necessity before choosing feature ownership
2026-10-18 14:14:42 +08:00
Tianyi Cui f38b890cc5 fix(auto-review): keep inherited creation prompts as facts 2026-10-18 11:44:14 +08:00
Tianyi Cui 55fddb3424 refactor(auto-review): recognize existing user task sources 2026-10-18 11:44:14 +08:00
Tianyi Cui a8963e75a0 docs(headless): record preserved Auto policy on resume 2026-10-18 11:44:14 +08:00
Tianyi Cui 04e7e1b45d docs(headless): refresh approval dependency graph 2026-10-18 11:44:14 +08:00
Tianyi Cui 7181effc69 feat(headless): support unattended experimental Auto review 2026-10-18 11:44:14 +08:00
Tianyi Cui 928c3a872b test(auto-review): pin restore and live reload behavior 2026-10-18 11:44:13 +08:00
Tianyi Cui 4923f3cb4c fix(auto-review): preserve Auto during application shutdown 2026-10-18 11:44:13 +08:00
Tianyi Cui 3ca9c5e623 fix(headless): preserve explicit policy flags in custom profiles 2026-10-18 11:13:48 +08:00
Tianyi Cui cec41e73e0 fix(headless): validate invocation policy across custom profiles 2026-10-18 11:13:48 +08:00
Tianyi Cui 29630d9fa6 feat(headless): support supervised worktree tasks 2026-10-18 11:13:48 +08:00
Tianyi Cui 64ece4cac1 fix(sandbox): reject redirected and unsupported write grants 2026-10-18 11:10:00 +08:00
Tianyi Cui 6b71dcad85 fix(sandbox): support explicit additional writable roots 2026-10-18 11:10:00 +08:00
Tianyi Cui e3518b0ac0 docs(review): clarify extension point and declaration ownership 2026-10-18 10:29:18 +08:00
Tianyi Cui a205710563 docs(review): test necessity before choosing feature ownership 2026-10-18 10:12:02 +08:00
Tianyi Cui 427e3dcd69 feat: add standalone OAR subagent provider and tool 2026-10-18 00:28:33 +08:00
Tianyi Cui f5fa6e8089 Merge pinned Pi upgrade master into Node 24 base 2026-10-17 23:29:30 +08:00
Tianyi Cui 6643403536 docs: align Node 24 guide with current release 2026-10-17 23:01:48 +08:00
Tianyi Cui 79a5c00aec Merge master into worktree/oar-node24 2026-10-17 22:59:20 +08:00
Tianyi Cui b9e95fd1e5 docs(upgrade): target rc.2 for the unmerged pi-ai upgrade 2026-10-17 22:44:27 +08:00
Tianyi Cui d6398b3c86 chore(llm): upgrade pi-ai to 1.3.0 2026-10-17 22:44:26 +08:00