@xingular/harness 1.3.1-unstable.1 → 1.3.1-unstable.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/dist/cli.js +1 -1
- package/dist/sdk/terminal/tui/keybindings.d.ts +1 -1
- package/dist/sdk/terminal/tui/keybindings.js +1 -1
- package/dist/terminal-opentui.js +463 -392
- package/docs/architecture/11-terminal.md +8 -1
- package/docs/architecture/README.md +1 -0
- package/docs/releases/1.3.1-unstable.2.md +11 -0
- package/docs/terminal-tui.md +22 -6
- package/package.json +1 -1
|
@@ -48,7 +48,14 @@ Screen: transcript above the composer, centred dialogs, full-screen resource bro
|
|
|
48
48
|
shared tool alongside its read-only set and restores the normal set on success, failure or
|
|
49
49
|
interruption. There is no terminal-only question alias (PROP-0040).
|
|
50
50
|
- A plan request keeps `bash` in its active set; each call runs in the sandbox's read-only scope
|
|
51
|
-
(PROP-0043). A user `!` command
|
|
51
|
+
(PROP-0043). A user `!` command submitted during a plan request waits as a separate turn; it
|
|
52
|
+
cannot run inside the plan's read-only request.
|
|
53
|
+
- The terminal message-delivery contract is Enter to send or steer an active reply, and
|
|
54
|
+
Cmd/Ctrl/Alt+Enter to queue a follow-up. Pending steering, follow-up and deferred plan/Bash
|
|
55
|
+
inputs are projected above the working line from Pi's queues and the deferred barrier. Pi's
|
|
56
|
+
projection may briefly include an item already taken for delivery. A queued plan or Bash command
|
|
57
|
+
runs separately after the active reply, and later inputs cannot bypass it through Pi's native
|
|
58
|
+
queues. Modified shortcuts require terminal support.
|
|
52
59
|
- Current standalone source defaults: `~/.xingular-harness/{data,state}`; `npm run dev` uses
|
|
53
60
|
`~/.xingular-harness-dev/{data,state}`. The standalone development launch uses a file SecretStore
|
|
54
61
|
under its resolved development state directory, even when its profile names a host backend; it
|
|
@@ -125,5 +125,6 @@ resolve relevant drift by updating the implementation and specification together
|
|
|
125
125
|
| D-15 | Terminal sketch verification status — resolved 2026-10-24 by PROP-0028 | Pages 11 and 14 and `terminal-tui.md` said connected-sketch implementation verification was pending, while retained PTY evidence and PAR-014 recorded it as verified. Updated the docs to distinguish deterministic fixture verification from owner visual acceptance, every-emulator rendering and live-model sketch quality. |
|
|
126
126
|
| D-16 | Terminal slash-command highlighting — resolved 2026-10-24 | `terminal-tui.md` specified accent coloring for recognized leading commands while typing, but the OpenTUI composer only styled attachment labels. User-message bubbles also lacked command-token styling. The renderer now uses the active command registry for both surfaces. |
|
|
127
127
|
| D-17 | `PROP-0039`, `ADR-0036`, `INV-GATE-3/8` | Implementation is in progress in the 1.2.0 worktree: native writes revalidate canonical targets and atomically replace files under an OS write scope; default Bash fails closed on external hard-link aliases and runs in a sandbox that prevents new cross-boundary links; outside-scope Bash requires approval before one execution and command output never triggers approval or replay. The filesystem root is rejected as a workspace, and approval details expose the complete command. Launcher selection uses fixed system paths. Same-user peer processes remain outside this boundary. Focused macOS tests, full Harness CI, App compatibility checks, and PTY verification at 40x20, 80x24, and 100x30 pass. Linux sandbox integration remains unverified locally because this Darwin host has no `bwrap` and Colima is stopped; both CI workflows now install bubblewrap and `scripts/ci.sh` fails if it is absent, but an Ubuntu run is still required. No candidate, tag, or publication exists. |
|
|
128
|
+
| D-20 | Terminal pending queues, page 11 — resolved | The terminal now projects native and deferred pending messages above the working line. |
|
|
128
129
|
| D-19 | Provider limits layout | Page 09 describes a centered Limits dialog; page 11 and `src/terminal/tui/pages/usagePage.ts` describe and implement a full-screen page. |
|
|
129
130
|
| D-18 | `core/index.ts` migration 5 | The `run_stats` table has no writer in the Harness. PROP-0042's `usage_requests` ledger is the analytics source; whether to drop the older table is open. |
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Xingular Harness 1.3.1-unstable.2
|
|
2
|
+
|
|
3
|
+
Unstable preview of the current Harness work. Install with `npm install @xingular/harness@unstable`.
|
|
4
|
+
|
|
5
|
+
- Swap the OpenTUI send keys back. `Return` sends, or steers a running reply, and `Cmd+Return`,
|
|
6
|
+
`Ctrl+Return` or `Alt+Return` queues a follow-up. The `app.message.followUp` action replaces
|
|
7
|
+
`app.message.steer`, so a `keybindings.json` entry under that name needs renaming.
|
|
8
|
+
- Show pending steering, follow-up and deferred plan/Bash inputs above the working line, each with
|
|
9
|
+
its delivery type. A queued plan or `!` command is a barrier: it runs as a standalone turn and
|
|
10
|
+
later inputs wait behind it instead of entering Pi's native queues.
|
|
11
|
+
- Restore queued text to the draft with `Alt+Up`. Queued images are dropped; deferred images warn.
|
package/docs/terminal-tui.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Harness terminal frontend
|
|
2
2
|
|
|
3
|
-
Status:
|
|
3
|
+
Status: terminal behavior and message-delivery contract
|
|
4
|
+
([known drift D-20](architecture/README.md#known-drift)).
|
|
4
5
|
Decision: [ADR-0001](decisions/ADR-0001-owned-terminal.md),
|
|
5
6
|
[ADR-0006](decisions/ADR-0006-opentui-only-terminal.md),
|
|
6
7
|
[ADR-0009](decisions/ADR-0009-xharness-command.md),
|
|
@@ -28,8 +29,9 @@ overrides the Bun executable.
|
|
|
28
29
|
[`app.ts`](../src/terminal/opentui/app.ts) owns the terminal lifecycle and reuses the shared
|
|
29
30
|
`TerminalRuntime`, session replacement, commands, decisions, account pinning and run records. It
|
|
30
31
|
projects the runtime's snapshot and transcript into an OpenCode-inspired view, with a native
|
|
31
|
-
OpenTUI textarea for the prompt
|
|
32
|
-
`Cmd+Return`
|
|
32
|
+
OpenTUI textarea for the prompt and `Ctrl+K` for the command palette. `Return` sends or steers a
|
|
33
|
+
running reply; `Cmd+Return`, `Ctrl+Return` or `Alt+Return` queues a follow-up, and `Shift+Return`
|
|
34
|
+
inserts a newline. Typing `/` or `$` filters
|
|
33
35
|
matching commands or skills; `Tab` inserts the selected entry and leaves the cursor at the end of the inserted text.
|
|
34
36
|
With an empty composer, unmodified Up recalls the latest non-empty user message from the active session.
|
|
35
37
|
With a draft, unmodified Up browses older history and Down browses newer history when the caret is at
|
|
@@ -41,8 +43,8 @@ history shortcuts from anywhere. History includes
|
|
|
41
43
|
user messages and Bash commands from the active Pi session; recalled Bash commands return to `!`
|
|
42
44
|
mode. Executed slash commands from this terminal instance are included too, across session switches.
|
|
43
45
|
`/new` and `/session` (also `/resume`) switch the saved-message and Bash history to that session.
|
|
44
|
-
|
|
45
|
-
kitty keyboard protocol
|
|
46
|
+
Modified Enter shortcuts depend on the terminal reporting the modifier distinctly; Cmd may require
|
|
47
|
+
the kitty keyboard protocol. In the composer, `Tab` opens up to eight matching filesystem entries for the path token at the cursor, or current-folder entries when the token is empty. The list has no heading or hint row. Up/Down select; Enter or Tab inserts the selection; Escape closes the list. Directories end in `/`, and Bash mode escapes shell-special characters. Use `/effort` or Shift+Up/Down to change effort. The command palette opens above the composer under a muted (`dim`) top rule, and has no other border. Its rows align slash commands and descriptions in two columns: the command column sizes to the widest visible name, bounded to preserve description space, and both columns wrap instead of truncating. The plan-choice rule, question block's top-only divider, and `/btw` block's top rule use the same muted color as the normal composer divider. The console has no background of its own: the renderer, root surface
|
|
46
48
|
and transcript are transparent, so the terminal's own background shows through, while panels,
|
|
47
49
|
dialogs and the scrim stay opaque. The composer has no panel background: it is bounded by a top and
|
|
48
50
|
a bottom rule, with the working status and spinner above it and a wrapping status bar below it. Its
|
|
@@ -425,6 +427,20 @@ The Annotate tab has no search row, so these letters are free for actions. `/ann
|
|
|
425
427
|
sends the unsent annotations with your request after them; `/annotate:clear` resolves the unsent ones
|
|
426
428
|
and stops sharing them.
|
|
427
429
|
|
|
430
|
+
## Pending messages and barriers
|
|
431
|
+
|
|
432
|
+
The terminal shows pending steering, follow-up and deferred plan/Bash inputs above the working
|
|
433
|
+
line, distinguishing their delivery type. A steering message is
|
|
434
|
+
intended for the active reply; a follow-up waits until it finishes. With no active reply, a normal
|
|
435
|
+
message starts a turn. Pi's steering and follow-up settings determine delivery within those queues.
|
|
436
|
+
|
|
437
|
+
A queued plan or `!` Bash command is a barrier: it runs as a standalone turn after the current
|
|
438
|
+
response, and subsequent inputs wait behind it rather than entering Pi's native queues and
|
|
439
|
+
crossing the barrier. `Alt+Up` restores queued text to the draft; queued images are dropped, with
|
|
440
|
+
a warning for deferred images. Pi's queue projection can briefly include an item already taken
|
|
441
|
+
for delivery; identical queued text can also make its displayed removal ambiguous. Interrupting a
|
|
442
|
+
reply does not automatically clear native queues, and deferred work may run after it settles.
|
|
443
|
+
|
|
428
444
|
## Plan mode and thinking keys
|
|
429
445
|
|
|
430
446
|
Use `/plan <brief>` for one read-only planning request. A plan waits outside Pi's native follow-up
|
|
@@ -594,7 +610,7 @@ cursor, Backspace and Delete treat it as one unit.
|
|
|
594
610
|
- **Refusals.** A model whose `input` lacks `image` refuses the attach with a notice naming the
|
|
595
611
|
model. Bash mode and plugin editors take no images. A slash command or Bash command sent with
|
|
596
612
|
images runs without them, with a warning. Alt+Up (dequeue) restores queued text and drops
|
|
597
|
-
queued images
|
|
613
|
+
queued images; deferred images produce a warning.
|
|
598
614
|
|
|
599
615
|
Finder-copied file paths are read before clipboard image pixels. On macOS, `.heic` and `.heif`
|
|
600
616
|
files are converted with `/usr/bin/sips` to private temporary PNGs, preserving the copied path
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xingular/harness",
|
|
3
|
-
"version": "1.3.1-unstable.
|
|
3
|
+
"version": "1.3.1-unstable.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Xingular Harness — a Pi agent harness built on recursive harnessing (Harness²): versioned eight-component variants, refinement from evidence, multi-account sessions, a compiled prompt, project notes, tools, and MCP",
|
|
6
6
|
"repository": {
|