Commit Graph
12 Commits
Author SHA1 Message Date
gengruilin 967ba4c4b8 fix(tools): disable history expansion in the persistent bash shell
The persistent bash tool types each wrapped command into an interactive
bash, which applies history expansion before parsing. A `!` after a single
quote made bash reject the whole line with `event not found`, so neither
marker printed and the call waited for the full timeout; `!!` silently
substituted the previous history entry.

Disable history expansion when the shell is initialized, as OpenHands does
for its interactive terminal. Raw control characters other than newline and
carriage return still reach readline as typed keys; the README records that
limitation.
2026-10-21 11:00:34 +08:00
Tianyi Cui 79bd3d8da7 feat(session): centralize working directories and directory context 2026-10-06 01:27:54 +08:00
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
imccyu d8c993a622 docs(shell): clarify queued cancellation regression coverage 2026-09-19 23:31:31 +08:00
imccyu 9d4fa54c2d fix(shell): settle persistent shell cancellation without throwing its reason 2026-09-19 23:05:40 +08:00
fz 1f1537914f feat(minimal): align persistent bash output with the one-shot shell contract
The minimal compositions serve the same models that trained against a
one-shot `bash` tool; three surface differences remained visible to them.

- Every settled command now appends `[Command finished with exit code N]`,
  including exit code 0, instead of `[exit code: N]` only on failure. A
  timeout appends `[Command timed out or OOM]` after the partial output.
- Trailing newlines are all dropped before the status trailer rather than
  only the last one.
- The `bash` description in the `minimal` preset and the `sdk-minimal`
  bundle replaces the two fixed network lines with a single environment-
  dependent line; the pwsh description is unchanged.

Tests, READMEs, the web minimal-preset schema snapshot, and the packaged
Python minimal model-visible snapshot follow the new wording. The
standalone `persistent-tools` SDK replay fixture keeps its own copy of the
old description since it is a per-launch customization, not the profile.
2026-09-08 19:48:21 +08:00
Turtle 15f2997bcb cleanup: omit unneeded invariant companions 2026-08-28 13:12:52 +08:00
_Kerman b72bd6f5be merge: bring master into feat/pwsh-persistent-pty 2026-08-18 13:36:46 +08:00
Yichen Jiang a8dc6f9776 fix(pty): keep the controlled prompt so persistent bash settles fast
tool-bash-persistent overwrote the backend's PS1, so terminal-bash prompt
readiness never matched and every send degraded to the 3.5s silence tier
(idleSilenceMs + handoffGraceMs) under production defaults.

The controlled PROMPT_COMMAND now re-asserts PS1 before every prompt, so an
in-shell override never survives to the next prompt. The tool initializes
with stty -echo alone and detects the no-end-marker fallback through the
seam's stdin_read wait reason instead of matching its own prompt text.

Tool calls drop from 7180/3560/3566 ms to 355/88/91 ms (spawn+init+echo,
echo, pwd; darwin, production defaults). The loader composition suite now
pins the fast path by pushing idleSilenceMs beyond the send bound, and a
real-PTY case proves PS1 self-healing.

Fixes #2585
2026-08-15 11:06:57 +08:00
Huanqi Cao d6010c2d88 refactor(pty): follow the naming-contract renames across the persistent pwsh stack 2026-08-13 09:52:56 +08:00
Huanqi Cao 1ae9df33eb merge: bring master's naming-contract refactor into feat/pwsh-persistent-pty 2026-08-13 01:52:47 +08:00
Tianyi Cui a2d0f7f411 refactor: apply repository naming contract
Apply the accepted pre-release package, service, type, directory, and role renames as one repository-wide change.
2026-08-13 00:54:38 +08:00