humanish 0.84.1 → 0.85.1
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/dist/export.js +17 -10
- package/dist/export.js.map +1 -1
- package/dist/observer-app.html +55 -9
- package/dist/observer-data.d.ts +12 -0
- package/dist/observer-data.js +8 -0
- package/dist/observer-data.js.map +1 -1
- package/dist/observer-library.d.ts +2 -0
- package/dist/observer-library.js.map +1 -1
- package/dist/observer-static.js +52 -1
- package/dist/observer-static.js.map +1 -1
- package/dist/observer.d.ts +5 -0
- package/dist/observer.js +90 -34
- package/dist/observer.js.map +1 -1
- package/dist/program.js +48 -47
- package/dist/program.js.map +1 -1
- package/dist/serve-http.d.ts +4 -0
- package/dist/serve-http.js +9 -1
- package/dist/serve-http.js.map +1 -1
- package/dist/tui-actions.d.ts +12 -7
- package/dist/tui-actions.js +72 -56
- package/dist/tui-actions.js.map +1 -1
- package/dist/tui-app.js +1 -1
- package/dist/tui-contract.d.ts +1 -1
- package/docs/architecture/observer-review.md +144 -0
- package/docs/architecture/observer.md +88 -2
- package/docs/contracts/schemas.md +1 -1
- package/docs/goals/current.md +6 -2
- package/docs/ramp/README.md +1 -1
- package/docs/release/0.85.0-observer-review.md +56 -0
- package/docs/release/0.85.1-observer-continuity.md +20 -0
- package/package.json +4 -2
|
@@ -65,6 +65,42 @@ The browser polls `observer-data.json` with `no-store` caching. Static
|
|
|
65
65
|
operator path. Agents and CI should use `humanish watch --json --no-open` for
|
|
66
66
|
the same fresh evidence without browser open or a long-running process.
|
|
67
67
|
|
|
68
|
+
### Reopening a run
|
|
69
|
+
|
|
70
|
+
The TUI's **Open Observer** action opens an HTTP view that follows saved captures
|
|
71
|
+
as the run writes them. One loopback evidence server is shared by the session's
|
|
72
|
+
browser tabs; exiting the TUI closes it, including when the UI fails. Opening a
|
|
73
|
+
run does not launch a study. The URL is always shown for manual opening or SSH
|
|
74
|
+
port forwarding, and only contained run paths in the TUI's project are accepted.
|
|
75
|
+
|
|
76
|
+
| Entry point | What updates | Lifetime |
|
|
77
|
+
| --- | --- | --- |
|
|
78
|
+
| `watch` during a study | Saved evidence and available in-memory desktop streams | Until the attached command exits |
|
|
79
|
+
| `observe --run <id>` | Saved evidence from the selected run | Until the command exits |
|
|
80
|
+
| TUI Open Observer | Saved evidence in the selected run; shares the project's evidence library | Until the TUI exits |
|
|
81
|
+
| `serve` | Saved evidence across the project's library | Until the server command exits |
|
|
82
|
+
| Static HTML or `file://` | The exported snapshot | Independent of a server |
|
|
83
|
+
|
|
84
|
+
`observe` uses the same current-data projection as the attached viewer, scoped
|
|
85
|
+
to the selected run. Its history cannot enumerate other runs. HTML exports use
|
|
86
|
+
the installed Observer renderer around the recording's saved data and embedded
|
|
87
|
+
images, so older recordings get UI improvements without changing their source.
|
|
88
|
+
|
|
89
|
+
Reopening an active run follows its saved captures; it cannot recover a live
|
|
90
|
+
desktop URL held by another process. Stream credentials are never recovered
|
|
91
|
+
from disk or added to the TUI/library server. Original `watch` attachment is
|
|
92
|
+
what enables a live desktop stream. The loopback library retains its Host
|
|
93
|
+
allowlist, contained file reads, read-only routes and no-store security headers.
|
|
94
|
+
|
|
95
|
+
Served data may also include `runtime` with `state`, `observedAt`, and
|
|
96
|
+
`source: "local-run-status"`. This is a current observation of a contained,
|
|
97
|
+
matching `status.json`; it never changes the run's recorded verdict or participant
|
|
98
|
+
outcomes. A fresh heartbeat means running, an explicitly finalized record means
|
|
99
|
+
finished, and stale or invalid timing means unknown. Missing, malformed, or
|
|
100
|
+
mismatched records omit the observation. A stale heartbeat alone does not prove
|
|
101
|
+
interruption, and stored PIDs are neither probed nor returned. Static rendering
|
|
102
|
+
and export do not create this served-only observation.
|
|
103
|
+
|
|
68
104
|
Local `codex-exec` actor runs now publish an initial running `run.json` and
|
|
69
105
|
`observer/observer-data.json` before actor completion, then refresh both after
|
|
70
106
|
sanitized transcripts, traces, and verdict events are available. This gives a
|
|
@@ -81,13 +117,15 @@ stream URLs in any mode; remote viewers see persisted evidence only. See
|
|
|
81
117
|
### Exposed hardening and `watch --expose`
|
|
82
118
|
|
|
83
119
|
The live `serveObserver` server binds `127.0.0.1` and, by default, is a
|
|
84
|
-
|
|
120
|
+
local-dev server without a Host allowlist. Every response carries security
|
|
121
|
+
headers, including `X-Frame-Options: DENY` and CSP `frame-ancestors 'none'`.
|
|
122
|
+
Under its
|
|
85
123
|
`exposed` option — set by `watch --expose` — it enforces the SAME
|
|
86
124
|
DNS-rebinding defense as the library surface: a strict Host allowlist (loopback
|
|
87
125
|
names at bind, extended by `addPublicOrigin(tunnel.url | public-url)`, `421
|
|
88
126
|
Misdirected Request` otherwise) and the shared `buildServeSecurityHeaders()` on
|
|
89
127
|
every response (both live in `src/serve-http.ts`, shared without a module cycle).
|
|
90
|
-
|
|
128
|
+
The Host allowlist applies in exposed mode; frame-denial headers apply in both modes.
|
|
91
129
|
|
|
92
130
|
Exposed mode also SCOPES the surface to the attached live run (`result.run`): the
|
|
93
131
|
`/_humanish/history.json` index is filtered to that one run, and `/_humanish/runs/<id>/…`
|
|
@@ -108,8 +146,45 @@ attached server comes up DURING the run and survives a `timed_out`/`failed` run
|
|
|
108
146
|
to Ctrl-C. `serve` still never injects stream URLs. See
|
|
109
147
|
[Serve: the run library surface](serve.md).
|
|
110
148
|
|
|
149
|
+
### Live desktop iframe authority
|
|
150
|
+
|
|
151
|
+
Only a URL in the attached server's in-memory runtime map receives
|
|
152
|
+
`stream.embed.runtimeDesktop: true`. Persisted markers are removed when building
|
|
153
|
+
Observer data and again when reading served fallback projections. Cross-run
|
|
154
|
+
library routes do not inherit the attached run's runtime URLs, even when their
|
|
155
|
+
stream ids match. Ended or invalid runtime entries do not receive the grant.
|
|
156
|
+
The generic static-server helper strips this marker and saved `runtime` state
|
|
157
|
+
from Observer JSON and inline data. Static responses carry the same framing
|
|
158
|
+
denial headers; they never grant active desktop attachment.
|
|
159
|
+
|
|
160
|
+
The browser can preserve a cross-origin provider's origin for its desktop viewer
|
|
161
|
+
modules only with this grant. Ordinary stored embeds remain isolated. Every
|
|
162
|
+
Observer/library response, including raw run HTML, refuses framing, so a provider
|
|
163
|
+
redirect or scripted navigation back to an Observer-origin document cannot load
|
|
164
|
+
it inside the iframe and gain access to the parent. This protects the receiving
|
|
165
|
+
origin without a fixed provider allowlist that becomes stale as desktops start.
|
|
166
|
+
The underlying standards are [iframe sandbox permissions](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/iframe)
|
|
167
|
+
and [CSP frame-ancestors](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy/frame-ancestors).
|
|
168
|
+
|
|
169
|
+
Raw artifact responses also carry `sandbox allow-scripts` in their CSP. Opening
|
|
170
|
+
a saved HTML or SVG document directly gives its scripts an opaque origin, so
|
|
171
|
+
they cannot read the Observer's other evidence or browser storage. The policy
|
|
172
|
+
applies to every raw file, including unknown extensions, alongside `nosniff`.
|
|
173
|
+
Generated Observer HTML and JSON routes retain normal same-origin access for
|
|
174
|
+
updates. The generic static helper serves raw documents under the sandbox;
|
|
175
|
+
origin-dependent scripts and modules in those artifacts may require independent
|
|
176
|
+
hosting. See the [CSP sandbox standard](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy/sandbox).
|
|
177
|
+
|
|
178
|
+
History entries may include `runtimeState` from the same contained local status
|
|
179
|
+
read as the Observer. Their existing `status` remains the recorded verdict.
|
|
180
|
+
Running filters should use runtime state when present, preserving the difference
|
|
181
|
+
between an active study and its provisional evidence outcome.
|
|
182
|
+
|
|
111
183
|
## UI Shape
|
|
112
184
|
|
|
185
|
+
See [Watching and reviewing evidence](observer-review.md) for current controls,
|
|
186
|
+
entry-point capabilities, timing limits and browser acceptance commands.
|
|
187
|
+
|
|
113
188
|
The Observer shell has:
|
|
114
189
|
|
|
115
190
|
- top mission-control band with run status and metrics;
|
|
@@ -119,6 +194,17 @@ The Observer shell has:
|
|
|
119
194
|
- terminal/TUI transcript stage;
|
|
120
195
|
- right evidence rail for events, artifacts, and known gaps.
|
|
121
196
|
|
|
197
|
+
The participant grid uses equal-height previews whose widths follow each screen's
|
|
198
|
+
aspect ratio. A 44px identity/source/outcome caption sits below the captured pixels;
|
|
199
|
+
no badges or controls cover the screen. Generated computer-use lane labels display
|
|
200
|
+
the recorded persona identity; repeated identities gain a lane or stream qualifier.
|
|
201
|
+
A stable details button opens labeled Pin/Compare actions, recorded notices, final
|
|
202
|
+
messages, dimensions, duration and exact identifiers. Exceptional outcomes remain
|
|
203
|
+
in the caption. Icon controls have visible hover/focus hints and touch-sized targets. Search, preview size and monitor mode
|
|
204
|
+
share the view/filter popover. Monitor mode keeps its exit beside the run status.
|
|
205
|
+
Live previews remain bounded to four visible cards, with the hovered or focused
|
|
206
|
+
participant taking priority when the grid shows more than four eligible cards.
|
|
207
|
+
|
|
122
208
|
## Codex UI Contract
|
|
123
209
|
|
|
124
210
|
`codex-ui` streams are normalized session/event projections. Public artifacts
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Date: 2026-06-02 (current-state note updated 2026-07-14)
|
|
4
4
|
|
|
5
5
|
Status: reference map for the major contracts shipped through source version
|
|
6
|
-
`0.
|
|
6
|
+
`0.85.1`; it is not an exhaustive inventory of command/result envelopes. Exported types,
|
|
7
7
|
schema constants, parsers, and validators in `src/` are authoritative. Rows
|
|
8
8
|
marked "reserved" name layering intent only — no code emits or validates them
|
|
9
9
|
yet. Do not emit a reserved schema.
|
package/docs/goals/current.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Current Goals
|
|
2
2
|
|
|
3
|
-
Status date: 2026-09-
|
|
3
|
+
Status date: 2026-09-09 (rev 24)
|
|
4
4
|
|
|
5
5
|
This page is the current public-safe operating goal for `humanish`. Keep it
|
|
6
6
|
short enough to reread before a coding session and concrete enough that future
|
|
@@ -29,11 +29,15 @@ study completed, reproduced, and produced a real accessibility finding via a
|
|
|
29
29
|
keyboard-first participant
|
|
30
30
|
([docs/goals/email-gated-signup/receipts/](email-gated-signup/receipts/)).
|
|
31
31
|
|
|
32
|
-
## Current Program Truth (source `0.
|
|
32
|
+
## Current Program Truth (source `0.85.1`)
|
|
33
33
|
|
|
34
34
|
The package source and repository implementation in this tree agree on these
|
|
35
35
|
points:
|
|
36
36
|
|
|
37
|
+
**Observer review continuity, 2026-09-09 (#731).** The run library opens during player/comparison review. Comparison frames link into the player and return to the saved alignment and cursor; participant names stay consistent. Explicit thinking filters reveal narration, and run/setup notices remain inspectable separately from frame-linked findings. See the [0.85.1 release note](../release/0.85.1-observer-continuity.md).
|
|
38
|
+
|
|
39
|
+
**Observer watching and review, 2026-09-09 (#723, #724, #726, #728).** Grid previews preserve complete screens at a shared height, with compact captions and controls below the evidence. Run activity, live viewing, recorded replay and update freshness are distinct. Seeking, refresh and incoming captures preserve the selected viewing intent. The player adds elapsed-time review, zoom, saved moments and participant/cross-run comparison. The built TUI and observe serve existing evidence; exports contain no runtime desktop grants. See the [0.85.0 release note](../release/0.85.0-observer-review.md) for capabilities, acceptance evidence and limits.
|
|
40
|
+
|
|
37
41
|
**Portable feedback acceptance commands, 2026-09-07 (#720).** Generated proof commands use the installed CLI from the evidence workspace, including standalone exports without a package manifest. Redrafting recognized first-party candidates projects exact legacy command templates without rewriting source candidates or receipts. Custom instructions remain unchanged. See the [0.84.1 release note](../release/0.84.1-portable-feedback.md).
|
|
38
42
|
|
|
39
43
|
**Readable evidence and shareable feedback, 2026-09-07 (#136).** `export --format bundle --redact-screenshots` creates a separate verified workspace while retaining the readable original. Four real operator-run recordings preserved all measured findings and costs through export and ordinary feedback commands; all 31 frames played in both bundle and HTML views. Static Observer grades now reflect their actual verification result. See the [retained workflow receipt](computer-use-actor/receipts/redacted-evidence-workflow-2026-09-07.md). External maintainer use and acceptance remain unproven.
|
package/docs/ramp/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Status: public-safe contributor and agent ramp.
|
|
4
4
|
|
|
5
|
-
Package/source version in this tree: `0.
|
|
5
|
+
Package/source version in this tree: `0.85.1` (2026-09-09). The Observer is phone-usable as a stated requirement (observer/AGENTS.md); interactive primitives start from Base UI. The Observer renderer is the observer/ workspace artifact only; the legacy string-concat renderer was deleted at cutover (#426), and rollback is a version pin to 0.42.0. The containment boundary introduced in
|
|
6
6
|
`0.15.1` remains in force: managed run and output paths bind to validated
|
|
7
7
|
physical filesystem identities, and stored provider IDs are evidence, not
|
|
8
8
|
cleanup authority. The bundled OSS meta-lab is dry-run only until
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Humanish 0.85.0: watch and review complete screens
|
|
2
|
+
|
|
3
|
+
Observer now shows portrait and desktop captures at their original proportions,
|
|
4
|
+
with equal-height grid previews and a compact caption below each screen. Live
|
|
5
|
+
labels and controls leave the captured pixels clear. A stable Info button opens
|
|
6
|
+
participant details, labeled Pin/Compare actions and recorded notices.
|
|
7
|
+
|
|
8
|
+
Run activity, viewing mode and evidence freshness are distinct. Finished studies
|
|
9
|
+
say they are finished; failed updates preserve the last evidence and offer retry.
|
|
10
|
+
Seeking, keyboard controls, moment links and refresh agree about the displayed
|
|
11
|
+
capture. Paused replay stays on its selected frame as new evidence arrives.
|
|
12
|
+
|
|
13
|
+
The review tools include:
|
|
14
|
+
|
|
15
|
+
- elapsed-time playback, capture-gap labels, Skip waits and action/finding navigation;
|
|
16
|
+
- fit, actual size, zoom/pan, fullscreen and a hideable/resizable inspector;
|
|
17
|
+
- copyable moment links, original-frame inspection and local saved moments;
|
|
18
|
+
- preview size, filtering, pinning, monitoring and reachable participant pages;
|
|
19
|
+
- participant and cross-run comparison with explicit capture age and missing coverage;
|
|
20
|
+
- consistent icons, keyboard hints, explicit popover dismissal and larger touch targets.
|
|
21
|
+
|
|
22
|
+
`observe` and the built TUI open existing evidence through a local viewer. Live
|
|
23
|
+
desktop access remains owned by the attached process; opening an existing study
|
|
24
|
+
cannot recover another process's credentials. Offline exports keep the current
|
|
25
|
+
renderer and saved images without runtime desktop authority. The
|
|
26
|
+
[Observer review guide](../architecture/observer-review.md) explains these paths.
|
|
27
|
+
|
|
28
|
+
## Updating
|
|
29
|
+
|
|
30
|
+
Install this version using your usual package manager. For a global installation:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npm install -g humanish@0.85.0
|
|
34
|
+
humanish --version
|
|
35
|
+
humanish observe --run RUN
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Run the last command from the workspace containing the existing study. Previously
|
|
39
|
+
generated HTML embeds its viewer: reopen the run with the updated CLI, or
|
|
40
|
+
regenerate its HTML export, to get the new interface.
|
|
41
|
+
|
|
42
|
+
## Verification and limits
|
|
43
|
+
|
|
44
|
+
The implementation was exercised with five hosted two-participant studies and
|
|
45
|
+
140 retained screenshots. A separate check opened all 28 frames through observe,
|
|
46
|
+
the built headed TUI and HTML export: 84 of 84 opens passed. The
|
|
47
|
+
[implementation receipt](https://github.com/danielgwilson/humanish/blob/main/docs/goals/observer-qol/receipts/2026-09-08-observer-review.md)
|
|
48
|
+
distinguishes failed probes, accepted runs and cleanup evidence.
|
|
49
|
+
|
|
50
|
+
Regression coverage includes 156 Observer tests, 33 production-artifact browser
|
|
51
|
+
scenarios and 15 iframe/artifact isolation checks. Browser acceptance covers
|
|
52
|
+
Chromium on Linux, including touch emulation; physical devices and other engines
|
|
53
|
+
remain unverified. Screenshot replay remains sparse evidence, without a
|
|
54
|
+
continuous video track or guaranteed before/after capture for every action.
|
|
55
|
+
The pre-existing source-checkout TUI loader limitation remains; the built CLI
|
|
56
|
+
is the tested installation path.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Humanish 0.85.1: keep your place while reviewing evidence
|
|
2
|
+
|
|
3
|
+
The Observer review flow now carries the selected evidence between views:
|
|
4
|
+
|
|
5
|
+
- The library button opens a drawer from the player and comparison on desktop and phone.
|
|
6
|
+
- Comparison previews share a height, preserving complete portrait and desktop screens. Panels use the same participant names as the grid and link to their exact recorded frames. Open a frame, save it, and return to the previous comparison alignment and cursor. Reopening the same comparison from the grid also keeps its place.
|
|
7
|
+
- Adding another run cannot silently remove one of the three selected participants. Grid-only filters no longer appear in comparison.
|
|
8
|
+
- Recalling a saved moment after reloading and stepping through frames selects the saved image as well as its URL.
|
|
9
|
+
- Player details identify the selected participant rather than the study's fan-out placeholder.
|
|
10
|
+
- Selecting Reported thinking shows existing narration even when thinking is hidden in All evidence. Warnings & findings includes a separate, paged list of run/setup notices with their recorded timestamps; these notices do not invent screenshot links or claim participant product findings.
|
|
11
|
+
|
|
12
|
+
Install with `npm install -g humanish@0.85.1`. Reopen an existing run with the updated CLI (`humanish observe --run RUN` from its workspace), or regenerate its HTML export, to refresh embedded viewers.
|
|
13
|
+
|
|
14
|
+
## Verification and limits
|
|
15
|
+
|
|
16
|
+
The [retained workflow receipt](https://github.com/danielgwilson/humanish/blob/main/docs/goals/observer-qol/receipts/2026-09-09-review-continuity.md) records actual-study outcomes, independent review and practical limits. The production browser suite adds desktop/touch library access, comparison-to-frame/save/return, browser history and explicit capacity checks. Player regression tests cover narration filtering and separate notice pagination without changing the selected frame.
|
|
17
|
+
|
|
18
|
+
A fresh hosted two-participant drawDB study exercises actual growing captures and the review journey. Retained run: `observer-review-journey-n2-20260909`. The attached `observe` check follows updated captures; it does not establish a new live-desktop connection or physical mobile fidelity. The release gate separately exercises the packed candidate in disposable terminal sandboxes.
|
|
19
|
+
|
|
20
|
+
Saved moments remain local to the browser. Cross-run review requires the served run library. Screenshot replay remains sparse; continuous video, physical devices, other browser engines, and screen-reader acceptance remain separate work.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "humanish",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.85.1",
|
|
4
4
|
"description": "Open-source-safe CLI for persona simulation, observer review, and public-safe feedback drafts.",
|
|
5
5
|
"author": "Daniel G Wilson <daniel@danielgwilson.com>",
|
|
6
6
|
"keywords": [
|
|
@@ -76,7 +76,9 @@
|
|
|
76
76
|
"tui:test": "pnpm --filter humanish-tui test",
|
|
77
77
|
"release:dogfood": "node scripts/release-dogfood.mjs",
|
|
78
78
|
"docs:generate": "tsx scripts/generate-cli-docs.ts",
|
|
79
|
-
"docs:check": "tsx scripts/generate-cli-docs.ts --check"
|
|
79
|
+
"docs:check": "tsx scripts/generate-cli-docs.ts --check",
|
|
80
|
+
"observer:browser:proof": "node scripts/observer-browser-proof.mjs",
|
|
81
|
+
"observer:iframe:proof": "node scripts/observer-iframe-proof.mjs"
|
|
80
82
|
},
|
|
81
83
|
"repository": {
|
|
82
84
|
"type": "git",
|