humanish 0.16.0 → 0.18.0

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.
@@ -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.16.0`; it is not an exhaustive inventory of command/result envelopes. Exported types,
6
+ `0.18.0`; 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.
@@ -46,6 +46,8 @@ workflow without leaking private upstream truth into core.
46
46
  | Adapter score | `humanish.adapter-score.v1` (`RunBundle.adapterScore`; namespaced; route-specific acceptance semantics) | see Product-Adapter Extension Seam below |
47
47
  | Adapter artifact | `humanish.adapter-artifact.v1` (`RunBundle.adapterArtifacts[]`; namespaced; local relative proof references) | see Product-Adapter Extension Seam below |
48
48
  | Shared-world evidence | `humanish.shared-world.v1` (additive `RunBundle.sharedWorld` + `RunBundle.attributionClass`; `topologyMode: sequential \| concurrent`) | see Shared-World Evidence below |
49
+ | Serve result | `humanish.serve-result.v1` (`src/observer-serve.ts` is authoritative) | none (command result envelope; see Serve Result below) |
50
+ | Serve control plane | reserved (`/_humanish/api/*` answers `501` `HUMANISH_SERVE_CONTROL_PLANE_DISABLED` in v1) | none |
49
51
 
50
52
  ## Lab Manifest
51
53
 
@@ -599,7 +601,11 @@ Core-owned fields:
599
601
  - `startedAt` / `completedAt` / `durationMs`
600
602
  - `status` / `completionReason` / `reason` (`completionReason` includes
601
603
  `step_failed`: a deterministic scripted step/expectation evaluated false —
602
- the subject failed the script while the harness executed faithfully)
604
+ the subject failed the script while the harness executed faithfully; and
605
+ `budget_reached`: an open-ended watch session that hit the wall-clock time
606
+ budget AFTER productive activity — status `passed`, a NON-FAILURE completion,
607
+ distinct from `timed_out`, which stays reserved for a zero-progress deadline
608
+ hit and remains a failure)
603
609
  - `ids`, `counts`, `items[]`, optional `tokenUsage`, `capabilities`
604
610
 
605
611
  Unexpected actor-loop diagnostics live inside `items[]` as
@@ -646,6 +652,31 @@ never shipped — no code emits or validates it. Substrate truth today lives
646
652
  inside run bundles (per-stream transport and status) and lab execution config
647
653
  (`execution.target: local | e2b-desktop`). Do not emit this schema.
648
654
 
655
+ ## Serve Result And Reserved Control-Plane Namespace
656
+
657
+ `humanish serve` reports `humanish.serve-result.v1`. The exported `ServeResult`
658
+ type and `SERVE_SCHEMA` constant in `src/observer-serve.ts` are authoritative:
659
+ mode (`loopback | exposed | share-safe-open`), the loopback host/port,
660
+ `publicUrl`, the `tunnel` provider/url, an `oauth` echo (`provider`,
661
+ `allowEmails`, `allowDomains` — operator-supplied allow rules, public-safe to
662
+ echo to the operator's own stdout, never persisted into any bundle), runs
663
+ listed, computed warnings, and the `ServeErrorCode` union. Exposure auth is
664
+ tunnel-edge only — as of 0.18.0 there are no `capabilityUrl`/`publicCapabilityUrl`
665
+ /`ttlMinutes` fields, no `--auth`/`--ttl` flags, and no `capability-link` mode
666
+ (the in-process `observer-auth.ts` capability-link was removed as a pre-1.0
667
+ breaking change).
668
+
669
+ Reserved: `/_humanish/api/*` is the serve control-plane namespace. Any request
670
+ under it answers `501` with error code `HUMANISH_SERVE_CONTROL_PLANE_DISABLED`.
671
+ Because the in-process auth gate is gone, a request that clears the edge (or a
672
+ loopback caller) reaches the `501` directly — there is no `401`-first anymore.
673
+ The typed `ServeControlPlane` parameter exists in the handler options and is
674
+ always `undefined` in v1; no code dispatches into it yet. Do not build against
675
+ the namespace; the reservation guarantees only that no run artifact or observer
676
+ asset will ever be served under it. See
677
+ [`docs/architecture/serve.md`](../architecture/serve.md) for the v2 seam
678
+ contract.
679
+
649
680
  ## Terminal Cost Ledger And No-Spend Proof
650
681
 
651
682
  The terminal-product lane (`src/e2b-terminal-lab.ts`) passes a real provider key
@@ -16,7 +16,7 @@ Humanish should be the open-source CLI that lets a maintainer ask:
16
16
  The answer should be observable, verifiable, public-safe, and easy to turn into
17
17
  actionable feedback.
18
18
 
19
- ## Current Program Truth (source `0.16.0`)
19
+ ## Current Program Truth (source `0.18.0`)
20
20
 
21
21
  The package source and repository implementation in this tree agree on these
22
22
  points:
@@ -32,6 +32,7 @@ The immutable 2026-06-10 proof-roadmap packet is paired with a
32
32
  | Subject sources/routes | Six declared sources: `this-repo`, `clone`, `app-url`, `local-app`, `terminal-product`, and `local-tree`; support is route-specific and `this-repo` remains dry-run-only | One centralized run/resource lifecycle boundary across all routes |
33
33
  | Public proof | Version-pinned synthetic Observer sample shipped in the npm payload | A legible Observer hero from one verified real public-application run |
34
34
  | OSS meta-lab | Dry-run contract and separate disposable smoke harness | Live meta-lab execution; disabled until repository instructions and actor credentials have an isolated boundary |
35
+ | Observer serving | `watch`/`observe` loopback servers plus `serve` — the run-library surface with loopback default, capability-link exposure, `share_ready`-gated open mode, and optional operator-run tunnel; streams never served remotely | A remote live-stream (`--live-streams`) design; a persistent capability-link store; a control plane that can start runs |
35
36
 
36
37
  Capability proof and adopter replacement are different gates. A deterministic
37
38
  test or kept live receipt proves that a Humanish mechanism works. The depth-axis
@@ -74,6 +74,8 @@ silently drifting from one is not.
74
74
  | Single lane | Cost + evidence simplicity | Declared fan-out where the backend supports it — `actors[0].count: N` (homogeneous), explicit `actors[0].lanes[]` (differentiated persona/device/instruction), or compact `actors[0].roster[]` groups that normalize into lanes on the computer-use E2B route (per-lane worlds, cap 16; `execution.concurrency` bounds concurrent paid lanes) |
75
75
  | Stock `desktop` template | The stock E2B desktop image is right for most subjects; absent `execution.desktop.template` keeps `Sandbox.create(opts)` byte-stable | `execution.desktop.template` names a custom E2B desktop image (any name/id, no allowlist) for a subject needing baked-in runtimes the stock image lacks (e.g. node/bun/a local Postgres) — threaded to `Sandbox.create(template, opts)` on every desktop-creating route and recorded in the bundle as `desktopTemplate` (public-safe) |
76
76
  | Desktop default URL opener | Preserve the route/image's historical browser/default opener behavior when unset | `execution.desktop.browser: chrome | chromium | firefox` makes hosted CUA/shared-world browser choice explicit, fail-closed, and recorded as `desktopBrowser` in the run bundle |
77
+ | Loopback-only observer serving | Run bundles are local by default (public-safety plank 3); the serve/watch surfaces bind `127.0.0.1` unconditionally, and exposing them is publishing-adjacent, so exposure is fail-closed and carries declared friction | `humanish serve --expose` behind TUNNEL-EDGE auth — ngrok `--oauth google` (`--allow-email`/`--allow-domain` allow rules) or an operator `--public-url` you secure — OR `--expose --safe` (open, gated on verify-`share_ready` runs only). `watch --expose` streams a live run behind edge auth (a live run is never `share_ready`, so `--safe` alone is refused). humanish carries no in-process auth; both print computed warnings naming exactly what became reachable |
78
+ | Generous wall-clock safety cap | `execution.timeoutMs` bounds runaway spend, not a goal; ~30 min is reasonable for open-ended "watch it play" | A session that reaches the cap AFTER productive activity is recorded as `budget_reached` (status `passed`, a NON-FAILURE completion, exit `0`), distinct from a zero-progress `timed_out` (a failure, exit `2`). Goal-directed labs set a tight `timeoutMs` and read `completionReason` to confirm the goal, not the cap |
77
79
 
78
80
  ## The placement rule (worked example)
79
81
 
@@ -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.16.0` (2026-08-01). The containment boundary introduced in
5
+ Package/source version in this tree: `0.18.0` (2026-08-02). 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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "humanish",
3
- "version": "0.16.0",
3
+ "version": "0.18.0",
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": [