a3d259019b
Three TS surfaces each carried their own ANSI stripper with different
coverage. The TUI's (OSC, DCS/SOS/PM/APC strings, complete and truncated
CSI, multi-byte non-CSI ESC sequences, stray ESC, C0 controls) is now the
single implementation at apps/shared/src/ansi.ts, exported from the root
index and the new `@hermes/shared/ansi` subpath (ui-tui has no DOM lib, so
it imports the subpath like it does for billing/skin).
Sites (path::symbol → canonical):
ui-tui/src/lib/text.ts::stripAnsi, sanitizeAnsiForRender, hasAnsi
→ moved to apps/shared/src/ansi.ts (text.ts now imports stripAnsi
from '@hermes/shared/ansi' for its own trail helpers)
ui-tui: 13 importers repointed from '../lib/text.js' to
'@hermes/shared/ansi' (createGatewayEventHandler.ts,
components/messageLine.tsx, 11 __tests__ files)
apps/desktop/src/lib/ansi.ts::stripAnsi (2 regexes) → deleted;
parseAnsi/ansiColorClass/hasAnsiCodes stay (styled-segment parser)
apps/desktop/src/app/session/hooks/use-prompt-actions/index.ts
→ imports stripAnsi from '@hermes/shared/ansi'
apps/desktop/src/components/assistant-ui/tool/fallback-model/index.ts
private SGR-only stripAnsi → deleted; imports the shared one
Tests: the TUI 'ANSI sanitizers' cases move from
ui-tui/src/__tests__/text.test.ts to apps/shared/src/ansi.test.ts, plus
one invariant: an OSC-8 hyperlink + DCS string + SGR + partial CSI tail
strips to exactly the visible text with no ESC/BEL left.
Behavior change: desktop chat system messages (use-prompt-actions) and
inline-diff chrome (stripInlineDiffChrome) now also lose OSC hyperlink
payloads, DCS strings, truncated CSI tails and C0 control bytes that the
weaker regexes let through. TUI behavior is unchanged.
34 lines
1010 B
JSON
34 lines
1010 B
JSON
{
|
|
"name": "@hermes/shared",
|
|
"private": true,
|
|
"version": "0.0.0",
|
|
"type": "module",
|
|
"exports": {
|
|
".": "./src/index.ts",
|
|
"./ansi": "./src/ansi.ts",
|
|
"./billing": "./src/billing-types.ts",
|
|
"./billing-policy": "./src/billing-policy.ts",
|
|
"./charge-settlement": "./src/charge-settlement.ts",
|
|
"./format": "./src/format.ts",
|
|
"./fuzzy": "./src/fuzzy.ts",
|
|
"./gateway-events": "./src/gateway-events.ts",
|
|
"./i18n": "./src/i18n.ts",
|
|
"./json-rpc-channel": "./src/json-rpc-channel.ts",
|
|
"./model-search-text": "./src/model-search-text.ts",
|
|
"./reasoning-effort": "./src/reasoning-effort.ts",
|
|
"./reconnect-backoff": "./src/reconnect-backoff.ts",
|
|
"./skin": "./src/skin.ts"
|
|
},
|
|
"types": "./src/index.ts",
|
|
"scripts": {
|
|
"lint": "eslint src/",
|
|
"lint:fix": "eslint src/ --fix",
|
|
"fix": "npm run lint:fix",
|
|
"typecheck": "tsc -p . --noEmit",
|
|
"check": "npm run typecheck && npm run lint"
|
|
},
|
|
"devDependencies": {
|
|
"typescript": "6.0.3"
|
|
}
|
|
}
|