Commit Graph
13 Commits
Author SHA1 Message Date
mektpoy dc07e5a50d fix(tools): keep surrogate pairs intact when capping tool output
Three tools capped the preview text they return with String.prototype.slice
at a UTF-16 code-unit budget. A cut that lands inside a surrogate pair
leaves a lone high surrogate, which is not well-formed text: a strict JSON
reader rejects the durable Session log carrying it, and the preview shows a
broken glyph. A lone surrogate retained in history has already blocked every
later Messages request for one session.

Centralize the cap in output-retention as
truncateWithoutSplittingSurrogatePair, and use it from the persistent bash
and pwsh shells and the string-replace editor. The cut drops the unpaired
half instead of keeping it, so the retained text stays a prefix and is at
most one code unit shorter than before.

The new dependency edges and the shifted Config sources regenerate
docs/module-graph and docs/config-catalog, including the committed
translation pair.

Refs #4817
2026-09-21 18:51:19 +08:00
Turtle 15f2997bcb cleanup: omit unneeded invariant companions 2026-08-28 13:12:52 +08:00
lsdsjy 5c98d5ece8 fix(fs): tolerate null editor placeholders 2026-08-25 18:28:09 +08:00
imccyu ec601ca13d build(vendor): rescope the vendored Cordis packages into @deepseek-ai
Machine-produced by `pnpm run rescope-vendor --apply` plus the regeneration it
prints: `pnpm install` for the lockfile, `pnpm run gen-third-party-notices`,
`verify-translation-pairing --write` for the touched bilingual pairs,
`gen-doc-graphs`, and one typert snapshot whose ids embed character offsets.
`pnpm run rescope-vendor --check` verifies the result.

Renames nine vendored packages (cordis, cosmokit, schemastery and the six
@cordisjs plugins) and every reference that resolves them: manifest names and
dependency keys, module specifiers including declare-module merges, cordis.yml
plugin names, tsconfig paths, every Markdown fence, and `docs/` prose.
Directory names, upstream versions, and dependency ranges are unchanged, so
vendor/README.md still reads as an upstream snapshot; its manifest table gains
an upstream-name column so THIRD_PARTY_NOTICES keeps MIT attribution pointed
at each fork's origin.

The tutorial tier follows the rename end to end: its yaml fences named plugins
the Loader can no longer resolve, its `ts ignore-check` fences disagreed with
the compiled fences beside them, and its prose quoted both. The contracts that
told readers to keep upstream names — the root convention and the vendoring
cookbook's tree comment and manifest invariant — now say to rescope instead.

Two rules read `@deepseek-ai/` as "another workspace plugin": the client bundle
purity gate now names the vendored libraries a browser bundle inlines, and the
files where a bare `cordis` is an agent-preset id keep that product data.
2026-08-10 22:04:13 +08:00
Tianyi Cui ceba53edd7 fix(fs): observe absence before guarded recreation 2026-08-09 17:43:53 +08:00
Tianyi Cui 514238ee47 fix(editor): preserve tabs in file views 2026-07-30 00:05:58 +08:00
Tianyi Cui 84394e596d cleanup(editor): remove dead path-base plumbing 2026-07-29 23:50:52 +08:00
Tianyi Cui fbfe520471 fix(editor): preserve literal replacement text 2026-07-29 23:48:43 +08:00
Tianyi Cui 98e6a0573f fix(fs): keep one editor path contract 2026-07-29 21:37:12 +08:00
Tianyi Cui 6b26126b3a fix(fs): preserve tabs during editor mutations 2026-07-29 21:25:56 +08:00
Yichen Jiang df58af92cd test(tools): close persistent tool coverage gaps 2026-07-29 15:33:46 +08:00
Yichen Jiang 260ea24594 fix(tools): harden persistent tool integrations 2026-07-29 15:21:56 +08:00
Yichen Jiang 665c21693b feat(tools): add persistent bash and str-replace editor 2026-07-29 14:12:27 +08:00