Commit Graph
13582 Commits
Author SHA1 Message Date
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
imccyu 528c682e06 Merge pull request #2890 from deepseek-harness/release/dsh-0.1.1-rc.1
release: dsh@0.1.1-rc.1
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
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
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
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
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 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
_Kerman 0ee3d664ba Merge remote-tracking branch 'origin/master' into dshw/pr-deepseek-harness-deepseek-harness-2702 2026-08-21 11:53:00 +08:00
Chinesezjc cb5b762922 fix(docs): correct zh locale link in composer-edit-range note
The static gate (translation pairing) failed on a pre-existing master note:
2026-08-20-composer-edit-range-from-selection.zh.md:17 linked the zh target with
the en .md path. Point it at the .zh.md target and re-record the i18n hash. This
unblocks the required node 24 / static gate (it is not part of the python-release
gray-check change but sits on the same PR's CI path).
2026-08-21 11:51:50 +08:00
imccyu d508a09952 Merge pull request #2878 from deepseek-harness/worktree-fixpnpmwin
fix(build): support standalone pnpm entrypoints
2026-08-21 11:48:18 +08:00
_Kerman 6fb8e9a4b9 Merge remote-tracking branch 'origin/master' into xtr/2701-stable-session-snapshots 2026-08-21 11:43:58 +08:00
Yichen Jiang e637bcfb98 Merge pull request #2726 from deepseek-harness/worktree/deepseek-vision-model-catalog
feat(llm-deepseek): publish the vision model
2026-08-21 11:41:34 +08:00
imccyu 4b086d0a4a test(ci): deduplicate coverage command setup 2026-08-21 11:36:57 +08:00
_Kerman d0d5b00095 Merge remote-tracking branch 'origin/master' into dshw/pr-deepseek-harness-deepseek-harness-2739
# Conflicts:
#	.agents/notes/implemented/process/2026-07-06-parallel-pre-push-gates.i18n.yaml
#	.agents/notes/implemented/process/2026-07-13-documentation-site-projection.i18n.yaml
2026-08-21 11:35:58 +08:00
Yichen Jiang f9c4309c60 Merge remote-tracking branch 'origin/master' into fix/derive-shipped-preset-root-per-composition 2026-08-21 11:32:04 +08:00
Yichen Jiang 25058f2658 docs(cli): sync the derived preset-root layer into launcher docs
Review follow-ups: enumerate the derived shipped agent-preset root in
apps/cli README/reference dumps and the profile-boot module JSDoc
(bilingual pairs re-recorded), correct the stale AppCLIEntry/distIndex
analogy in the web scaffold and the shipped-root cross-reference in the
web preset e2e, drop the write-only ComposedProfile.rows field, and make
the Agent Note describe the dump path as sharing the derivation rather
than the builder.
2026-08-21 11:32:02 +08:00
Yichen Jiang 708a25a8a9 fix(llm-deepseek): address vision catalog review 2026-08-21 11:28:14 +08:00
imccyu 4f2868409d test(ci): exercise standalone pnpm on Windows 2026-08-21 11:24:03 +08:00
imccyu 89674edc93 fix(build): support standalone pnpm entrypoints 2026-08-21 11:09:25 +08:00
Yichen Jiang cc95d93d60 Merge remote-tracking branch 'origin/master' into worktree/deepseek-vision-model-catalog 2026-08-21 10:42:26 +08:00
Turtle 0e40664c67 Merge pull request #2862 from deepseek-harness/turtle/fix-translation-link-locale
docs: fix Chinese Agent Note link locale
2026-08-21 10:38:14 +08:00
Yichen Jiang 246caaba77 Merge remote-tracking branch 'origin/master' into worktree/deepseek-vision-model-catalog
# Conflicts:
#	.agents/notes/implemented/feature/2026-07-22-web-multimodal-image-input-and-durable-attachments.i18n.yaml
#	.agents/notes/implemented/feature/2026-08-19-direct-deepseek-vision-input.i18n.yaml
#	docs/config-catalog.i18n.yaml
#	packages/llm/llm-deepseek/README.i18n.yaml
2026-08-21 10:34:51 +08:00
Chinesezjc 499c1262a2 ci(python): drop PR labeled trigger for python-release dry-run
Remove the pull_request:[labeled] trigger from python-release.yml so the
workflow no longer fires (and shows a gray skipped check) when a PR gets any
non-dry-run label. The credential-free dry-run validation is now manual-only
(workflow_dispatch with publish=false), preserving the validation capability
without a PR gray segment.

- python-release.yml: on is workflow_dispatch only; build.if is
  github.event_name == 'workflow_dispatch'.
- ci-workflow.spec.ts: assert python-release has no pull_request event and the
  simplified build.if.
- python/development.(md,zh.md) and 2026-08-11-python-publication-workflow note
  (en/zh/i18n): describe the manual dispatch-only dry-run path.

Verification: ci-workflow.spec.ts 14/14, typecheck clean, note-format 585,
verify-translation-pairing consistent.
2026-08-21 08:56:32 +08:00
Yichen Jiang 9820b6a1e9 fix(cli): derive the shipped agent-preset root per composition
The boot-time agent-presets overlay replaced the composed roots with the
shipped root alone, so roots configured in a profile's cordis.patch.yml
vanished from the roster (externally reported in
deepseek-ai/deepseek-harness#3636). The overlay also froze the row's
boot-time config above every live reload and never reached the config
dump, which therefore showed roots the boot dropped.

Derive the roster patch from the current layers instead: prepend the
shipped root (system trust, wins duplicate ids) to configured roots,
share one builder across boot, live user-layer reloads, and
--dump-config, and fail loud on a roots value the launcher cannot
statically rewrite.

Fixes #2863.
2026-08-20 22:57:58 +08:00