Commit Graph
18711 Commits
Author SHA1 Message Date
creatixchu 724783b024 refactor(image): remove region reads 2026-08-21 15:06:24 +08:00
creatixchu 0c9a664223 test(deepseek): print vision failure facts 2026-08-21 15:06:11 +08:00
creatixchu 703ce4a3d6 test(deepseek): expose Files API e2e failures 2026-08-21 15:06:11 +08:00
creatixchu d65e2a9e8a test(images): close unified pipeline coverage gaps 2026-08-21 15:06:11 +08:00
creatixchu 72b204afa1 feat(images): expand source upload envelope 2026-08-21 15:06:11 +08:00
creatixchu 657ec56fbf test(images): cover attachment projection edges 2026-08-21 15:06:10 +08:00
creatixchu 48a58b9090 fix(images): address unified pipeline review 2026-08-21 15:06:10 +08:00
creatixchu de8ea5d715 docs: refresh image pipeline module graph 2026-08-21 15:05:55 +08:00
creatixchu c09a42ccb5 fix(images): parse listed missing Files ids 2026-08-21 15:05:55 +08:00
creatixchu c0dd8ec820 chore(images): align merged runtime closure 2026-08-21 15:05:54 +08:00
creatixchu d29855f97c feat(images): unify master and Files request pipeline 2026-08-21 15:05:54 +08:00
creatixchu c1bdac6939 docs: propose attachment read quarantine 2026-08-21 15:02:10 +08:00
creatixchu 118f244420 fix(attachment-local): exclude metadata carriers and animation from passthrough; validate the canonical budget up front
Review-round hardening of canonical admission:
- passthrough now requires a single-frame source free of EXIF/XMP/IPTC
  metadata, so location/device metadata never enters durable storage and
  stored dimensions always describe the perceived pixels; animated WebP joins
  GIF on the always-re-encode path (first frame only)
- SourceImageInfo records orientation-applied dimensions, keeping source and
  stored raster on shared axes for coordinate mapping
- validateImage runs a canonical-encoding dry run, so a validated batch can no
  longer be refused mid-write by the byte target (no partial writes)
- read_image names per-axis multipliers when rounding splits the two ratios
  and maps IMAGE_TOO_LARGE to actionable downscale guidance
2026-08-21 15:02:10 +08:00
creatixchu c90a944abd docs: bring the zh config catalog along; pin read_image source fields in the code-mode prompt sidecar 2026-08-21 15:02:10 +08:00
creatixchu 867dc44697 docs(notes): record the canonical image admission decision 2026-08-21 15:02:10 +08:00
creatixchu fec8aa62df docs(attachment): document canonical admission; pin wide-image acceptance snapshot
READMEs (both languages) describe the wide source envelope, the canonical
encoding and its fixed encoder parameters, and read_image's downscale
envelope; tool/config catalogs regenerate for the new schema and Config
fields. The read-image-dimension scenario now pins the acceptance the old
2000px admission cap refused: the 2001x1 source is admitted and stored
byte-identically, so the fixture stays platform-independent.
2026-08-21 15:02:10 +08:00
creatixchu c6fa512e15 fix(attachment-local): keep reference field order stable for logged fixtures
The canonical ref serializes mediaType, width, height, bytes in the order the
pre-canonicalization store used, so existing session-log fixtures and logged
histories keep byte-identical reference JSON.
2026-08-21 15:01:45 +08:00
creatixchu 6e17c20804 feat(tool-fs): read_image reports downscaled dimensions and coordinate scale
When the attachment store's canonical encoding shrinks the file on disk, the
read_image envelope names the original dimensions and the multiplier that
maps coordinates measured on the attached image back onto the file, and the
output schema carries sourceWidth/sourceHeight for programmatic callers.
2026-08-21 15:01:45 +08:00
creatixchu 83a526eea1 feat(attachment-local): store a deterministic canonical image encoding
Admission now validates a wide source envelope (32MiB, 100MP, 16384px per
side) and persists a canonical encoding instead of refusing large sources:
EXIF orientation baked in, metadata stripped, long edge downscaled to the
configured canonical target (default 2048px), PNG palette for alpha/PNG/GIF
sources and a fixed JPEG quality ladder (85/75/60/45) until the canonical
byte target holds (default 1MiB). In-budget PNG/JPEG/WebP passes through
byte-identically so equal sources keep deduplicating to the same content
address; GIF always re-encodes to the PNG of its first frame, pinning the
first-frame meaning providers apply. Encoder parameters are fixed by design;
only the canonical budget is deployment configuration.
2026-08-21 15:01:45 +08:00
creatixchu 8f83853b60 refactor(attachment): saveImage returns the canonical ref beside source facts
AttachmentStore.saveImage now resolves SavedImageAttachment: the durable
reference paired with the submitted raster's intrinsic facts, so a store may
persist a canonical re-encoding while callers keep the source dimensions for
coordinate mapping. saveImages keeps returning refs; every fake store and the
cordis API catalog follow the new signature.
2026-08-21 15:01:45 +08:00
creatixchu 92a9741050 docs(llm): anchor unified request-image management design PR 2026-08-21 15:01:07 +08:00
_Kerman 265f02fbf5 perf(session-projection): index contiguous restore tails 2026-08-21 14:24:28 +08:00
Yichen Jiang 339a12030d fix(web): project sent user text inline and fold wire references in queue rows
The user-bubble decorator rendered every plain run through the
block-level MessageText div, so a decorated single-line message broke
into one line per run and the space between two tokens rendered as a
blank line. The queue dock's read-only row printed row.preview verbatim,
showing the wire session form (@[label](dsh-session:...)) instead of a
readable label. Both predate the Lexical composer; the logged model text
was correct in both cases.

One shared inline projection (reference/user-text.tsx) now owns sent
user text for the bubble and the queue row: plain runs are spans with
white-space policy left to the consumer (bubble pre-wrap, queue nowrap),
and a highest-precedence rule folds the wire session form to its label
chip, shielding the URI from the bare-token scan. The queue edit field
keeps the literal sent text. user-text.client.spec pins the inline
guarantee and every fold rule; queue-actions.e2e locators move to
row-container matching (the projection adds one span layer).
2026-08-21 14:23:01 +08:00
imccyu 528c682e06 Merge pull request #2890 from deepseek-harness/release/dsh-0.1.1-rc.1
release: [email protected]
dsh-v0.1.1-rc.1
2026-08-21 14:21:44 +08:00
imccyu 3ec5e8f8c4 release(dsh): 0.1.1-rc.1 2026-08-21 14:11:09 +08:00
imccyu 60e44b2d78 fix: ci
fix: ci

fix: ci
2026-08-21 14:11:06 +08:00
_Kerman 89b5bc276f perf(session-projection): skip history reads for in-order events 2026-08-21 14:09:39 +08:00
_Kerman a216756222 perf(session-projection): avoid restore tail copies 2026-08-21 14:09:33 +08:00
Yichen Jiang f4b080ffe0 Merge pull request #2889 from deepseek-harness/worktree/docs-ci-release-control-66e8d2
ci(docs): 文档站改为从发布 tag 发布
2026-08-21 13:58:57 +08:00
Turtle d97e398383 fix(jsonl): warn when repairing torn tails 2026-08-21 13:44:35 +08:00
Yichen Jiang c365daa53c chore(rescope): realign two manifest anchors, allowlist the preset-id spec
Exposed by this branch touching rescope-vendor.ts, which runs the full
rescope check: the knip-logger-console exact edit targeted the
packages/util/home knip section that #2758 deleted (drop the edit), the
zh vendoring-cookbook anchor predates the rescope.zh.md link
localization (follow it), and the new shipped-root.spec.ts joins the
files whose bare 'cordis' tokens are preset ids.
2026-08-21 13:42:24 +08:00
Yichen Jiang d858832bbb chore(constraints): register the preset-root files policy
The files constraint tables gained per-package expectations on master
while this branch changed two files lists: apps/cli no longer ships
config/, and dsh-agent-presets ships presets/ (ordered where the
expected-files derivation places extras).
2026-08-21 13:42:23 +08:00
_Kerman 0aee112c6f test(session-projection): scope projection assertions 2026-08-21 13:24:41 +08:00
Yichen Jiang 548b9f07d4 Merge remote-tracking branch 'origin/master' into fix/derive-shipped-preset-root-per-composition 2026-08-21 13:19:58 +08:00
Yichen Jiang fa3e37982b ci(docs): publish the documentation site from a release tag
The documentation site deployed on every master push, with no reviewer and
no version check, while npm, PyPI, and the public source repository all
advance only at a release tag. The Pages site is reachable without
authentication, so a merge published documentation ahead of every artifact
readers could obtain.

docs-pages.yml now declares workflow_dispatch alone and verifies the ref
through the gate npm publication already runs, so the site and the npm
sequence share one definition of a released version.
2026-08-21 13:17:06 +08:00
_Kerman a693e0764b docs: revert spurious BRAND-GUIDELINES.md change from master merge 2026-08-21 13:09:33 +08:00
pku-xht ee1a933e82 Merge remote-tracking branch 'origin/codex/subprocess-native-containment' into codex/subprocess-native-containment 2026-08-21 13:06:42 +08:00
Chinesezjc b7135e6206 Merge pull request #2760 from deepseek-harness/fix/continuation-cleanup-temp-handles
test(subagent): close persistence handle before deleting temp root
2026-08-21 12:59:07 +08:00
pku-xht ac69b1e0c4 fix(subprocess): decouple Windows target stdio 2026-08-21 12:56:34 +08:00
_Kerman 6b5e8c874c Merge remote-tracking branch 'origin/master' into dshw/pr-deepseek-harness-deepseek-harness-2672 2026-08-21 12:53:36 +08:00
Yichen Jiang f94495e527 refactor(preset): bundle the shipped presets inside dsh-agent-presets
Review asked why the launcher special-cases one plugin's row. It no
longer does: the four shipped compositions move into the package
(presets/, in files), dsh-agent-presets resolves its own shipped root
and prepends it before configured roots (includeShippedRoot, default
true, opt-out for bare-machinery embedders), and the per-composition
derived patch, its spec, and the dump layer are deleted — profile-boot
and dump-config return to plain layer stacking. The always-load
guarantee now rides the schema default instead of patch ordering, so a
whole-config replacement keeps the shipped set and the squash, reload
freeze, and dump divergence stop being possible.

Gate globs, the web scaffold, and both preset browser lanes drop their
hand-fed shipped roots; the roster e2e keeps asserting configured roots
beside the shipped four against the built lib.

Fixes #2863.
2026-08-21 12:37:57 +08:00
_Kerman b70f27f764 Merge pull request #2739 from deepseek-harness/xtr/speed-up-doc-sync
perf(infra): shorten doc-sync critical path
2026-08-21 12:36:36 +08:00
_Kerman d72713c1b3 Merge pull request #2702 from deepseek-harness/xtr/2701-stable-session-snapshots
test: omit persistence envelopes from session snapshots
2026-08-21 12:35:16 +08:00
Yichen Jiang a760c0b0f6 Merge pull request #2847 from deepseek-harness/feat/2846-doc-site-md-projection
docs(website): serve every page as raw Markdown with an llms.txt index
2026-08-21 12:27:51 +08:00
_Kerman 36a10618df Merge remote-tracking branch 'origin/master' into dshw/pr-deepseek-harness-deepseek-harness-2739
# Conflicts:
#	scripts/run-gates.spec.ts
2026-08-21 12:01:02 +08:00
Chinesezjc 32f369c3a0 test(subprocess): widen Windows stdout-end race budget to 5s
The native Windows containment tests expect the stdout stream to end
shortly after the direct target exits, but 1s was too tight under the
Windows CI runner's cold-start and process-teardown jitter. Use a 5s
bounded race so the assertion still proves EOF eventually arrives
without flaking on slow runner startup.
2026-08-21 11:57:52 +08:00
Chinesezjc a633c19b02 ci(windows): raise native coverage test timeout to 60s
The Windows native coverage lane was hitting Vitest's 30s per-test
ceiling on slow subprocess/ACP fixtures. Doubling the per-test budget
absorbs cold-start and process-teardown jitter without changing the
assertions or the job-level 120-minute cap.
2026-08-21 11:57:42 +08:00
Chinesezjc 7214d0d958 refactor(python): drop now-always-true build.if
python-release.yml only triggers on workflow_dispatch, so build.if:
github.event_name == 'workflow_dispatch' is always true and redundant; remove it
(the exact event set is already pinned in the spec). Update the spec assertion
accordingly.
2026-08-21 11:55:57 +08:00
Chinesezjc ae193bfc07 fix(cic): narrow workflow.on before Object.keys in python-release assertion
Guard workflow.on with isRecord before Object.keys to satisfy TS2769.
2026-08-21 11:54:36 +08:00
Chinesezjc 374f3cdb07 fix(cic): re-record development pair and tighten python-release spec assertion
Address PR #2875 review:

- Re-record python/development.i18n.yaml (corpus verify-translation-pairing was
  out of sync after editing development.md/zh.md) and the 2026-08-11
  python-publication-workflow pair after the dry-run wording tweak.
- Tighten the python-release spec assertion to the exact event set
  (['workflow_dispatch']) instead of not.toHaveProperty('pull_request').
- Fix the 'dry-run run' wording in development.md and the note.

Corpus-wide verify-translation-pairing (1001 pairs) and note-format (594) pass;
ci-workflow.spec.ts 14/14.
2026-08-21 11:53:50 +08:00