humanish 0.95.0 → 0.96.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.
- package/README.md +4 -2
- package/dist/comms-agentmail.d.ts +25 -0
- package/dist/comms-agentmail.js +418 -0
- package/dist/comms-agentmail.js.map +1 -0
- package/dist/comms-connections.d.ts +4 -2
- package/dist/comms-connections.js +3 -3
- package/dist/comms-connections.js.map +1 -1
- package/dist/comms-lease-store.d.ts +90 -0
- package/dist/comms-lease-store.js +489 -0
- package/dist/comms-lease-store.js.map +1 -0
- package/dist/comms-receiving-evidence.d.ts +46 -0
- package/dist/comms-receiving-evidence.js +35 -0
- package/dist/comms-receiving-evidence.js.map +1 -0
- package/dist/comms-receiving-inbox.d.ts +16 -0
- package/dist/comms-receiving-inbox.js +410 -0
- package/dist/comms-receiving-inbox.js.map +1 -0
- package/dist/comms-receiving-runtime.d.ts +25 -0
- package/dist/comms-receiving-runtime.js +45 -0
- package/dist/comms-receiving-runtime.js.map +1 -0
- package/dist/comms-receiving-types.d.ts +98 -0
- package/dist/comms-receiving-types.js +2 -0
- package/dist/comms-receiving-types.js.map +1 -0
- package/dist/comms-receiving.d.ts +58 -0
- package/dist/comms-receiving.js +554 -0
- package/dist/comms-receiving.js.map +1 -0
- package/dist/comms-setup.d.ts +40 -0
- package/dist/comms-setup.js +121 -0
- package/dist/comms-setup.js.map +1 -0
- package/dist/concurrent-shared-world-lab.js +662 -624
- package/dist/concurrent-shared-world-lab.js.map +1 -1
- package/dist/cua-actor-lab.d.ts +4 -1
- package/dist/cua-actor-lab.js +98 -17
- package/dist/cua-actor-lab.js.map +1 -1
- package/dist/doctor-lab.js +11 -0
- package/dist/doctor-lab.js.map +1 -1
- package/dist/e2b-terminal-lab.js +3 -0
- package/dist/e2b-terminal-lab.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lab-config.d.ts +20 -3
- package/dist/lab-config.js +59 -6
- package/dist/lab-config.js.map +1 -1
- package/dist/lab-engine.js +8 -3
- package/dist/lab-engine.js.map +1 -1
- package/dist/lab-summary.d.ts +1 -0
- package/dist/lab-summary.js +8 -2
- package/dist/lab-summary.js.map +1 -1
- package/dist/observer-app.html +1 -1
- package/dist/observer-data.js +14 -1
- package/dist/observer-data.js.map +1 -1
- package/dist/oss-lab.d.ts +1 -1
- package/dist/oss-lab.js.map +1 -1
- package/dist/oss-meta-lab.d.ts +1 -1
- package/dist/oss-meta-lab.js.map +1 -1
- package/dist/program.d.ts +2 -0
- package/dist/program.js +100 -4
- package/dist/program.js.map +1 -1
- package/dist/run-narration-secrets.d.ts +5 -0
- package/dist/run-narration-secrets.js +68 -0
- package/dist/run-narration-secrets.js.map +1 -0
- package/dist/run.d.ts +7 -2
- package/dist/run.js +25 -3
- package/dist/run.js.map +1 -1
- package/dist/scripted-browser-lab.js +7 -0
- package/dist/scripted-browser-lab.js.map +1 -1
- package/dist/shared-world-lab.js +4 -0
- package/dist/shared-world-lab.js.map +1 -1
- package/dist/study-analysis-engine.js +30 -1
- package/dist/study-analysis-engine.js.map +1 -1
- package/dist/study-analysis-evidence.js +9 -1
- package/dist/study-analysis-evidence.js.map +1 -1
- package/dist/tui-app.js +134 -134
- package/dist/tui-contract.d.ts +13 -0
- package/dist/tui-contract.js.map +1 -1
- package/dist/tui-launch.d.ts +2 -0
- package/dist/tui-launch.js +9 -1
- package/dist/tui-launch.js.map +1 -1
- package/docs/architecture/comms-inbox.md +4 -0
- package/docs/architecture/real-email-receiving.md +135 -0
- package/docs/contracts/run-bundle.md +9 -1
- package/docs/contracts/schemas.md +20 -3
- package/docs/goals/current.md +5 -5
- package/docs/ramp/README.md +9 -5
- package/docs/release/0.96.0-real-email-receiving.md +47 -0
- package/package.json +2 -1
- package/skills/humanish/SKILL.md +33 -13
package/dist/tui-contract.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ import type { TuiProjectState } from "./tui-project.js";
|
|
|
7
7
|
import type { ReadRunIndexOptions, RunIndexResult } from "./run-index.js";
|
|
8
8
|
import type { LaunchRunOptions, LaunchRunResult } from "./tui-launch.js";
|
|
9
9
|
import type { CommsSetupResult, CommsSetupStatus } from "./comms-connections.js";
|
|
10
|
+
import type { CommsCheckResult, CommsConfigureResult } from "./comms-setup.js";
|
|
11
|
+
import type { CommsRecoveryEntry } from "./comms-receiving.js";
|
|
10
12
|
/** The humanish version string shown in the frame, so a screenshot in a bug report is datable. */
|
|
11
13
|
export interface TuiVersionInfo {
|
|
12
14
|
cli: string;
|
|
@@ -21,6 +23,17 @@ export interface TuiCapabilities {
|
|
|
21
23
|
comms?: {
|
|
22
24
|
read(): Promise<CommsSetupStatus>;
|
|
23
25
|
save(): Promise<CommsSetupResult>;
|
|
26
|
+
check?(): Promise<CommsCheckResult>;
|
|
27
|
+
labs?(): Promise<{
|
|
28
|
+
title: string;
|
|
29
|
+
path: string;
|
|
30
|
+
}[]>;
|
|
31
|
+
configure?(lab: string, apply: boolean, planToken?: string): Promise<CommsConfigureResult>;
|
|
32
|
+
recovery?(): Promise<CommsRecoveryEntry[]>;
|
|
33
|
+
recover?(runId: string, connectionName: string): Promise<{
|
|
34
|
+
ok: boolean;
|
|
35
|
+
message: string;
|
|
36
|
+
}>;
|
|
24
37
|
};
|
|
25
38
|
/** Read every run in the project, cheapest source first. */
|
|
26
39
|
readRunIndex(cwd: string, options?: ReadRunIndexOptions): Promise<RunIndexResult>;
|
package/dist/tui-contract.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui-contract.js","sourceRoot":"","sources":["../src/tui-contract.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,EAAE;AACF,6FAA6F;AAC7F,mGAAmG;AACnG,+EAA+E;AAC/E,EAAE;AACF,gGAAgG;AAChG,+FAA+F;AAC/F,gGAAgG;AAChG,mGAAmG;AACnG,6DAA6D;AAC7D,EAAE;AACF,mGAAmG;AACnG,mBAAmB;
|
|
1
|
+
{"version":3,"file":"tui-contract.js","sourceRoot":"","sources":["../src/tui-contract.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,EAAE;AACF,6FAA6F;AAC7F,mGAAmG;AACnG,+EAA+E;AAC/E,EAAE;AACF,gGAAgG;AAChG,+FAA+F;AAC/F,gGAAgG;AAChG,mGAAmG;AACnG,6DAA6D;AAC7D,EAAE;AACF,mGAAmG;AACnG,mBAAmB;AAgHnB,mFAAmF;AACnF,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAErC;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,gBAAwB,OAAO,CAAC,OAAO;IACrE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACvF,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,kBAAkB,CAAC;AAC/D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,IAAI,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAKtC;IACC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACrB,OAAO,+BAA+B,kBAAkB,cAAc,KAAK,CAAC,WAAW,mCAAmC,CAAC;IAC7H,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QACzB,OAAO,8GAA8G,CAAC;IACxH,CAAC;IACD,OAAO,KAAK,CAAC,WAAW;QACtB,CAAC,CAAC,yEAAyE;QAC3E,CAAC,CAAC,kJAAkJ,CAAC;AACzJ,CAAC"}
|
package/dist/tui-launch.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ export interface LaunchRunOptions {
|
|
|
4
4
|
cwd: string;
|
|
5
5
|
/** The manifest handle (filename stem), as `humanish lab run` takes it. */
|
|
6
6
|
lab: string;
|
|
7
|
+
/** Exact selected manifest, avoiding a same-name committed lab shadowing a local copy. */
|
|
8
|
+
manifestPath?: string;
|
|
7
9
|
mode: "dry-run" | "live";
|
|
8
10
|
/** Injected in tests; defaults to the real spawn. */
|
|
9
11
|
spawn?: typeof spawn;
|
package/dist/tui-launch.js
CHANGED
|
@@ -15,6 +15,7 @@ import { constants as fsConstants } from "node:fs";
|
|
|
15
15
|
import { open } from "node:fs/promises";
|
|
16
16
|
import path from "node:path";
|
|
17
17
|
import { fileURLToPath } from "node:url";
|
|
18
|
+
import { resolveLabManifest } from "./labs.js";
|
|
18
19
|
import { prepareManagedHumanishOutputDirectory } from "./selected-output-paths.js";
|
|
19
20
|
/**
|
|
20
21
|
* A lab handle is the manifest FILENAME, which is what `humanish lab run` resolves. Restricted to
|
|
@@ -49,6 +50,13 @@ export async function launchRun(options) {
|
|
|
49
50
|
};
|
|
50
51
|
}
|
|
51
52
|
const cwd = path.resolve(options.cwd);
|
|
53
|
+
let selectedLab = options.lab;
|
|
54
|
+
if (options.manifestPath !== undefined) {
|
|
55
|
+
const resolved = await resolveLabManifest(cwd, options.manifestPath);
|
|
56
|
+
if (!resolved.ok)
|
|
57
|
+
return { ok: false, error: { code: "HUMANISH_LAUNCH_INVALID_LAB", message: "The selected lab path could not be read safely. Refresh the lab list." } };
|
|
58
|
+
selectedLab = path.relative(cwd, path.resolve(cwd, resolved.path)).replace(/\\/g, "/");
|
|
59
|
+
}
|
|
52
60
|
const now = options.now ?? (() => new Date());
|
|
53
61
|
const spawnFn = options.spawn ?? spawn;
|
|
54
62
|
const launchedAt = now().toISOString();
|
|
@@ -88,7 +96,7 @@ export async function launchRun(options) {
|
|
|
88
96
|
...(options.mode === "dry-run" ? ["--dry-run"] : []),
|
|
89
97
|
// `--` ends option parsing, so the handle can only ever be read as the positional argument.
|
|
90
98
|
"--",
|
|
91
|
-
|
|
99
|
+
selectedLab
|
|
92
100
|
];
|
|
93
101
|
const spawnOptions = {
|
|
94
102
|
cwd,
|
package/dist/tui-launch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui-launch.js","sourceRoot":"","sources":["../src/tui-launch.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,EAAE;AACF,4FAA4F;AAC5F,iGAAiG;AACjG,8FAA8F;AAC9F,6FAA6F;AAC7F,4DAA4D;AAC5D,EAAE;AACF,gGAAgG;AAChG,8FAA8F;AAC9F,+FAA+F;AAC/F,sFAAsF;AAEtF,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,qCAAqC,EAAE,MAAM,4BAA4B,CAAC;AAEnF;;;;;;;;;GASG;AACH,MAAM,eAAe,GAAG,gCAAgC,CAAC;AAEzD,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC;AAC5D,CAAC;
|
|
1
|
+
{"version":3,"file":"tui-launch.js","sourceRoot":"","sources":["../src/tui-launch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Participant inboxes
|
|
2
2
|
|
|
3
|
+
This page describes local capture. For fresh hosted inboxes, see
|
|
4
|
+
[real email receiving](real-email-receiving.md); that route has a separate
|
|
5
|
+
parsed renderer, strict remote-asset blocking and private lease lifecycle.
|
|
6
|
+
|
|
3
7
|
The catch captures application mail without sending it to an external recipient.
|
|
4
8
|
Humanish gives each participant an address and a matching
|
|
5
9
|
`/inbox/for/<address-digest>` URL. The same address scope applies to list, message,
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# Real email receiving
|
|
2
|
+
|
|
3
|
+
A supported browser study can give each participant a fresh AgentMail inbox. The
|
|
4
|
+
application sends real email to that address; Humanish polls it on the host and
|
|
5
|
+
publishes a private inbox surface on that participant's desktop. The participant
|
|
6
|
+
can read the original email, switch to a plain view and follow an approved link.
|
|
7
|
+
|
|
8
|
+
Use local capture when you can redirect the app's send configuration and want to
|
|
9
|
+
avoid hosted mail. Use real receiving when the app must send normally or delivery
|
|
10
|
+
itself is part of the flow. These are separate modes; do not combine their settings.
|
|
11
|
+
SMS and participant outbound mail are not supported.
|
|
12
|
+
|
|
13
|
+
## Setup
|
|
14
|
+
|
|
15
|
+
Open `humanish tui`, press **c**, and add an AgentMail key. Hidden entry saves it
|
|
16
|
+
in the existing user key store and checks authentication without creating an inbox.
|
|
17
|
+
The project profile stores only the provider and environment-variable name.
|
|
18
|
+
Environment and explicit env-file values retain precedence over saved keys.
|
|
19
|
+
A rejected or unavailable authentication check does not delete the saved key.
|
|
20
|
+
Authentication does not prove inbox creation/deletion permissions, quota or delivery.
|
|
21
|
+
This release requires an organization-scoped key.
|
|
22
|
+
|
|
23
|
+
Connections can preview and save a receiving-enabled local lab copy. The preview
|
|
24
|
+
discloses hosted email, model processing, local review and separate provider charges.
|
|
25
|
+
The original manifest is preserved. Select the new exact path when launching.
|
|
26
|
+
|
|
27
|
+
The same operations are available to agents:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
humanish keys set agentmail
|
|
31
|
+
humanish comms connections add agentmail --json
|
|
32
|
+
humanish comms check --online --json
|
|
33
|
+
humanish comms configure --lab humanish/labs/signup.yaml --json
|
|
34
|
+
# Review the returned path, disclosures and planToken, then:
|
|
35
|
+
humanish comms configure --lab humanish/labs/signup.yaml --apply --plan-token <digest> --json
|
|
36
|
+
humanish lab run .humanish/local/labs/signup-receiving.yaml --json --no-open
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Direct manifest authoring selects a saved connection:
|
|
40
|
+
|
|
41
|
+
```yaml
|
|
42
|
+
comms:
|
|
43
|
+
email:
|
|
44
|
+
connection: agentmail
|
|
45
|
+
# Optional: additional trusted email-link destinations, exact origins only.
|
|
46
|
+
allowedOrigins:
|
|
47
|
+
- https://accounts.example.test
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
The target origin is automatically allowed. On provisioned subjects, the declared
|
|
51
|
+
serve origin and optional `linkOrigin` use the existing target-origin rewrite.
|
|
52
|
+
Review additional origins as destinations the participant is allowed to open from
|
|
53
|
+
mail. This policy governs the inbox surface, not all later browser navigation.
|
|
54
|
+
|
|
55
|
+
Supported execution is hosted computer use with app-url, clone or local-tree
|
|
56
|
+
subjects, including concurrent shared-world studies. Sequential shared-world,
|
|
57
|
+
local-agent, scripted, terminal, desktop-cli, in-process and local-app routes reject
|
|
58
|
+
real receiving before allocation. Connection mode cannot declare capture options,
|
|
59
|
+
recipients or borrowed mailbox IDs. A fresh address is not an existing account;
|
|
60
|
+
assignments must allow signup or arranging mail to the new identity.
|
|
61
|
+
|
|
62
|
+
## What a run does
|
|
63
|
+
|
|
64
|
+
1. Resolve the selected connection and host credential. Reject forwarding that
|
|
65
|
+
management credential through target environment names, aliases or literals.
|
|
66
|
+
2. Authenticate and durably record each acquisition intent in private host state.
|
|
67
|
+
Acquire all participant addresses before starting desktops.
|
|
68
|
+
3. Give each participant its address and loopback inbox URL. No management key or
|
|
69
|
+
other participant's mailbox is installed in its desktop. Each surface has only
|
|
70
|
+
its own list/message/plain/JSON routes, with no send endpoint or aggregate inbox.
|
|
71
|
+
4. Poll received mail, register scrub targets, sanitize/render and atomically
|
|
72
|
+
publish the complete inbox snapshot. Repeated reads can fill temporarily missing
|
|
73
|
+
bodies and inline images without changing local message identity.
|
|
74
|
+
5. Before desktop teardown, perform a bounded final read, save evidence, stop the
|
|
75
|
+
inbox surface and request deletion. Confirm provider absence; otherwise retain
|
|
76
|
+
unresolved cleanup for recovery. Provider deletion is not an erasure guarantee.
|
|
77
|
+
|
|
78
|
+
The original view preserves supported email structure and inline PNG/JPEG/GIF/WebP
|
|
79
|
+
images. Parsed HTML removes active content; response CSP blocks scripts, forms,
|
|
80
|
+
frames and remote assets. Remote images show an explicit unavailable placeholder.
|
|
81
|
+
Links use the same origin policy in original, plain and JSON views. Attachment
|
|
82
|
+
bytes are fetched only through the fixed provider API and its observed CDN host;
|
|
83
|
+
provider authorization never goes to the CDN. General attachments, arbitrary remote
|
|
84
|
+
images and raw-MIME fallback are unsupported. Raster checks are bounded signature
|
|
85
|
+
checks, not a guarantee that every malformed image will decode in a browser.
|
|
86
|
+
|
|
87
|
+
Collection is bounded by request time, request/page count, bytes, images and a
|
|
88
|
+
100-message retained inbox limit. Limits, failed reads, blocked content and failed
|
|
89
|
+
publication are recorded as coverage limitations. Inbox pages require reload to
|
|
90
|
+
show later messages. No webhook/public mail ingress is required on the host.
|
|
91
|
+
|
|
92
|
+
## Evidence and publication
|
|
93
|
+
|
|
94
|
+
`comms/receiving.json` uses `humanish.comms-receiving.v2`. It records local IDs,
|
|
95
|
+
counts, timestamps and lifecycle/coverage status, without raw mail, provider IDs,
|
|
96
|
+
addresses or stable content digests. The final run bundle embeds that projection.
|
|
97
|
+
Receipt, successful inbox publication, participant reading and target success are
|
|
98
|
+
separate claims; analysis receives this distinction and the harness limitations.
|
|
99
|
+
A missing message alone does not establish that the application failed to send.
|
|
100
|
+
Immediate automatic analysis scrubs known exact values from generated narration
|
|
101
|
+
using a bounded, invocation-local registry. It never saves that registry. Later
|
|
102
|
+
analysis cannot reconstruct it; screenshots may still expose mail content, and the
|
|
103
|
+
publication restriction applies to both immediate and later findings.
|
|
104
|
+
|
|
105
|
+
Mail is hosted by AgentMail. Its content can reach the hosted desktop, actor model,
|
|
106
|
+
screenshots, narration and analysis model. Such runs carry a durable
|
|
107
|
+
`real-communications` publication restriction: verification returns `local_only`,
|
|
108
|
+
public feedback/exposure and shareable exports remain gated, and screenshot
|
|
109
|
+
blurring does not clear the restriction. Local Observer review and explicitly local
|
|
110
|
+
HTML export remain available. Local-only publication is not local-only processing.
|
|
111
|
+
|
|
112
|
+
## Interrupted-run recovery
|
|
113
|
+
|
|
114
|
+
Process interruption can bypass normal final reads and teardown. Inspect recovery
|
|
115
|
+
state after stopping a run; do not assume Ctrl+C or killing a process deleted its
|
|
116
|
+
inboxes:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
humanish comms recover --json
|
|
120
|
+
humanish comms recover --run <run-id> --apply --json
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Connections also exposes pending cleanup. Recovery only uses private host journals
|
|
124
|
+
under `$XDG_STATE_HOME/humanish/comms` (default `~/.local/state/humanish/comms`),
|
|
125
|
+
with private directories/files and bound project, connection, account and scope.
|
|
126
|
+
A live or unknown owner blocks takeover. The adapter checks resource/client identity
|
|
127
|
+
before deletion; it cannot delete an inbox named only in a run artifact. Lost
|
|
128
|
+
creation responses can be reconciled through the recorded idempotent client ID.
|
|
129
|
+
Do not delete private journals while resources remain unresolved. Moving/replacing
|
|
130
|
+
the project or changing account/scope can intentionally prevent recovery.
|
|
131
|
+
|
|
132
|
+
If final evidence persistence fails, the provider inbox is retained as unresolved
|
|
133
|
+
rather than discarding the last retrievable copy. Explicit recovery is a deletion
|
|
134
|
+
operation, not message-history reconstruction. Sandbox reclamation remains a
|
|
135
|
+
separate operation.
|
|
@@ -468,7 +468,7 @@ bundle is safe to promote into a public issue. Public promotion should branch on
|
|
|
468
468
|
`shareSafety.status`:
|
|
469
469
|
|
|
470
470
|
- `share_ready`: feedback draft commands may render public issue payloads;
|
|
471
|
-
- `local_only`: keep the run local
|
|
471
|
+
- `local_only`: keep the run local; only supported redaction-only cases can produce a shareable derivative;
|
|
472
472
|
- `blocked`: fix the verification or public-safety failure first.
|
|
473
473
|
|
|
474
474
|
The local-evidence check includes screenshots declared only by
|
|
@@ -487,6 +487,14 @@ over a blurred declaration. Missing or unknown per-frame metadata retains the
|
|
|
487
487
|
existing permissive compatibility behavior; verification does not infer pixel
|
|
488
488
|
privacy from that absence.
|
|
489
489
|
|
|
490
|
+
Real email receiving adds `publication.restrictions: [real-communications]` and
|
|
491
|
+
an optional `commsReceiving` projection using `humanish.comms-receiving.v2`.
|
|
492
|
+
Either field contributes `REAL_COMMUNICATIONS` and keeps the run `local_only`.
|
|
493
|
+
This applies to interrupted bundles and after screenshot blurring: real mail can
|
|
494
|
+
appear in text and analysis as well as pixels. Malformed receiving metadata fails
|
|
495
|
+
bundle validation. The projection holds counts, local IDs and lifecycle/coverage
|
|
496
|
+
status; private provider identities and cleanup authority are kept outside the run.
|
|
497
|
+
|
|
490
498
|
## Redacted Derivative Workspace
|
|
491
499
|
|
|
492
500
|
`humanish export --run RUN --format bundle --redact-screenshots --out DIRECTORY`
|
|
@@ -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.96.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.
|
|
@@ -325,7 +325,7 @@ connections:
|
|
|
325
325
|
apiKeyEnv: AGENTMAIL_API_KEY
|
|
326
326
|
```
|
|
327
327
|
|
|
328
|
-
|
|
328
|
+
AgentMail supports setup and fresh per-participant email receiving. Connection names use lowercase
|
|
329
329
|
letters, digits and hyphens, beginning with a letter, up to 48 characters.
|
|
330
330
|
`apiKeyEnv` names an environment variable; it never contains its value.
|
|
331
331
|
Invalid fields, unsupported providers and unsafe filesystem paths are rejected.
|
|
@@ -336,7 +336,24 @@ profiles and local key presence/source, not provider authentication or delivery.
|
|
|
336
336
|
`comms providers --json` returns `humanish.comms-providers.v1` with explicit
|
|
337
337
|
setup/receiving availability. The key store accepts `humanish keys set agentmail`.
|
|
338
338
|
Saving a connection neither modifies a lab nor creates a provider resource;
|
|
339
|
-
`comms.email
|
|
339
|
+
a supported study explicitly selects `comms.email: { connection: agentmail }`.
|
|
340
|
+
Optional `allowedOrigins` lists exact additional HTTP(S) origins; `linkOrigin`
|
|
341
|
+
participates in the existing provisioned-subject origin rewrite. Connection
|
|
342
|
+
selection cannot be combined with capture settings, recipients or provider options.
|
|
343
|
+
The derived internal kind is `real`; do not write `kind` beside a connection.
|
|
344
|
+
|
|
345
|
+
`comms check --online --json` returns `humanish.comms-check.v1`. Authentication,
|
|
346
|
+
credential presence, unknown permissions/capacity and untested delivery are separate.
|
|
347
|
+
`comms configure` previews/saves an ignored local manifest; `comms recover`
|
|
348
|
+
inspects or explicitly recovers privately owned interrupted leases.
|
|
349
|
+
|
|
350
|
+
Real receiving writes `humanish.comms-receiving.v2` count-only evidence with
|
|
351
|
+
participant-local message IDs, observation/publication timestamps, limitations,
|
|
352
|
+
acquisition and cleanup status. It contains no raw addresses, bodies, provider IDs
|
|
353
|
+
or content digests. `run.json` embeds the final projection as `commsReceiving` and
|
|
354
|
+
carries `publication.restrictions: [real-communications]`. Verification keeps the
|
|
355
|
+
run local-only regardless of screenshot redaction. See the
|
|
356
|
+
[receiving contract](../architecture/real-email-receiving.md).
|
|
340
357
|
|
|
341
358
|
Lab backends report results in their own schemas (`humanish.run-result.v1`,
|
|
342
359
|
`humanish.oss-lab-result.v1`, `humanish.oss-meta-lab-result.v1`,
|
package/docs/goals/current.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# Current Goals
|
|
2
2
|
|
|
3
|
-
Status date: 2026-09-
|
|
3
|
+
Status date: 2026-09-21. Release baseline: `0.96.0`.
|
|
4
4
|
|
|
5
5
|
This page guides work on current merged source. Published behavior is described
|
|
6
|
-
in the [release notes](../release/0.
|
|
6
|
+
in the [release notes](../release/0.96.0-real-email-receiving.md).
|
|
7
7
|
The [September 9 history](https://github.com/danielgwilson/humanish/blob/main/docs/goals/current-history-2026-09-09.md)
|
|
8
8
|
preserves the former status log; its queues do not supersede this page.
|
|
9
9
|
|
|
@@ -88,7 +88,7 @@ requires decision-equivalent retained evidence and a real deletion branch.
|
|
|
88
88
|
No first-party deletion branch has met that gate. Public demonstrations do not
|
|
89
89
|
substitute for it.
|
|
90
90
|
|
|
91
|
-
## Current Program Truth (source `0.
|
|
91
|
+
## Current Program Truth (source `0.96.0`)
|
|
92
92
|
|
|
93
93
|
| Surface | Available in merged source | Remaining boundary |
|
|
94
94
|
| --- | --- | --- |
|
|
@@ -100,8 +100,8 @@ substitute for it.
|
|
|
100
100
|
| Observer | Live/recorded views, shared grid and participant playback, participant assignments, action-specific links, saved moments, zoom, comparison and phone-width review | Sparse captures cannot prove every action's effect; visual comparison alone is not a controlled experiment |
|
|
101
101
|
| Review and feedback | Verification grades, feedback drafts, portable HTML, redacted bundle derivatives and computer-use completion-source labels | Sharing requires the appropriate grade; participant reports and condition matches still need task adjudication |
|
|
102
102
|
| Study findings | Default post-run analysis on supported live routes with a separate disclosed $3 admission estimate limit and opt-out; explicit `analyze`, fairer evidence selection, concern review and versioned findings with exact source links | Model interpretation needs review; bounded selection and source truncation limit coverage; opening Observer never dispatches analysis |
|
|
103
|
-
| TUI and serving | Detached starts, run stopping, reclamation, Observer attachment, loopback serving, run library and AgentMail
|
|
104
|
-
| Off-app communication | Recipient-scoped
|
|
103
|
+
| TUI and serving | Detached starts, run stopping, reclamation, Observer attachment, loopback serving, run library and AgentMail setup, authentication and lab configuration | Stopping a process does not itself prove sandbox cleanup; TUI views over CLI `stats`/`export` remain follow-ups |
|
|
104
|
+
| Off-app communication | Recipient-scoped local capture and fresh real AgentMail receiving, supported inline raster images, bounded collection and host-owned recovery | Real mail uses isolated participant surfaces and remains local-only for publication. Hosted mail/model processing, bounded fidelity and interrupted-run recovery are explicit; local-agent, borrowed inboxes and SMS are unsupported |
|
|
105
105
|
| Mobile and media | Hosted viewport/emulation, desktop geometry checks, bounded dwell and declared camera feed; a synthetic video-only call with separate hosted peers is proven | Audio, TURN, provider-specific rooms, physical-device and touch fidelity remain unproven; unsupported media declarations are rejected |
|
|
106
106
|
|
|
107
107
|
Use the [task support matrix](../architecture/task-protocol-support.md),
|
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.96.0` (2026-09-21). 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
|
|
@@ -47,10 +47,14 @@ If a change does not improve one of those loops, it probably belongs elsewhere.
|
|
|
47
47
|
|
|
48
48
|
## Current State
|
|
49
49
|
|
|
50
|
-
The [0.
|
|
51
|
-
AgentMail
|
|
52
|
-
|
|
53
|
-
|
|
50
|
+
The [0.96.0 release note](../release/0.96.0-real-email-receiving.md) describes
|
|
51
|
+
fresh per-participant AgentMail inboxes, isolated desktop mail views, host-owned
|
|
52
|
+
cleanup/recovery, local-only evidence publication, and authentication/configuration
|
|
53
|
+
in Connections. SMS and local-agent receiving remain unsupported.
|
|
54
|
+
|
|
55
|
+
The [0.95.0 release note](../release/0.95.0-connections-setup.md) introduced
|
|
56
|
+
connection profiles and hidden key entry; 0.96.0 makes those connections usable
|
|
57
|
+
in supported browser studies.
|
|
54
58
|
|
|
55
59
|
The [0.94.0 release note](../release/0.94.0-reliability.md) describes analysis
|
|
56
60
|
request deadlines and budget-aware output, smaller portable recordings,
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# 0.96.0 — Real email receiving
|
|
2
|
+
|
|
3
|
+
Supported browser studies can now give each participant a fresh AgentMail inbox.
|
|
4
|
+
The application sends normally; participants open their own inbox, read the email
|
|
5
|
+
and follow its confirmation link. Local capture remains a separate option for
|
|
6
|
+
apps whose send configuration can point at a test catch.
|
|
7
|
+
|
|
8
|
+
Connections checks authentication after hidden key entry and offers lab
|
|
9
|
+
configuration and pending cleanup. Lab configuration previews a separate ignored
|
|
10
|
+
copy, preserves the original, checks for stale previews and launches by exact
|
|
11
|
+
selected path. Agents have matching `comms check`, `comms configure` and
|
|
12
|
+
`comms recover` commands.
|
|
13
|
+
|
|
14
|
+
Provider credentials remain on the host. Participants receive isolated loopback
|
|
15
|
+
mail surfaces with original/plain views, supported inline raster images and a
|
|
16
|
+
consistent allowed-origin link policy. Remote images and active HTML are blocked;
|
|
17
|
+
missing content is explicit. Collection and publication are bounded and distinct
|
|
18
|
+
from a participant reading mail. Later reads can fill temporarily missing content.
|
|
19
|
+
|
|
20
|
+
Fresh mailbox ownership is recorded privately before acquisition. Normal teardown
|
|
21
|
+
saves evidence and confirms provider deletion. Interrupted runs have explicit,
|
|
22
|
+
project/account-bound recovery; mutable recording IDs cannot authorize deletion.
|
|
23
|
+
Evidence-write failures retain the inbox as unresolved.
|
|
24
|
+
|
|
25
|
+
Real mail may reach hosted desktops, actor/analysis models and recordings. These
|
|
26
|
+
runs have a durable `local_only` publication restriction; blurring screenshots
|
|
27
|
+
does not make them shareable. Immediate analysis uses the run's temporary scrub
|
|
28
|
+
registry for generated narration, without saving raw secret values. Later analysis
|
|
29
|
+
cannot reconstruct that registry and remains subject to the same publication gate.
|
|
30
|
+
|
|
31
|
+
This release supports hosted computer-use app-url, clone and local-tree routes,
|
|
32
|
+
including concurrent shared worlds. It rejects local-agent and unsupported routes
|
|
33
|
+
before allocation. SMS, outbound participant mail, borrowed inboxes, arbitrary
|
|
34
|
+
attachments and raw-MIME fallback remain unavailable.
|
|
35
|
+
|
|
36
|
+
See [setup, behavior and recovery](../architecture/real-email-receiving.md) for
|
|
37
|
+
configuration, processing disclosures and limits.
|
|
38
|
+
|
|
39
|
+
Validation includes captured provider-wire contracts, crash/recovery and credential
|
|
40
|
+
isolation tests, outer-runner tests for clone/local-tree and concurrent shared-world
|
|
41
|
+
routes, inbox browser checks at desktop/phone widths, and hidden-key TUI proof.
|
|
42
|
+
A retained live app-url study, `real-email-57ed0512-218d-4e58-9f76-c540541d0b56`,
|
|
43
|
+
had two concurrent participants receive separate emails, follow their own links,
|
|
44
|
+
reach the target dashboard and finish automatic analysis. Provider absence was
|
|
45
|
+
confirmed for both participant inboxes and the synthetic sender. Raw mail and
|
|
46
|
+
recordings remain private. This does not establish delivery for every target app
|
|
47
|
+
or live-provider coverage of every execution route.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "humanish",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.96.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": [
|
|
@@ -94,6 +94,7 @@
|
|
|
94
94
|
"homepage": "https://github.com/danielgwilson/humanish#readme",
|
|
95
95
|
"dependencies": {
|
|
96
96
|
"commander": "^14.0.3",
|
|
97
|
+
"parse5": "^8.0.1",
|
|
97
98
|
"playwright-core": "^1.60.0",
|
|
98
99
|
"pngjs": "^7.0.0",
|
|
99
100
|
"undici": "^6.28.1",
|
package/skills/humanish/SKILL.md
CHANGED
|
@@ -49,7 +49,11 @@ project-local. Never ask for the key in chat. The CLI alternative is
|
|
|
49
49
|
authorized credential source), followed by
|
|
50
50
|
`humanish comms connections add agentmail --json`. Existing env/file precedence
|
|
51
51
|
and `HUMANISH_STRICT_KEYS=1` still apply. Read installed provider capabilities:
|
|
52
|
-
|
|
52
|
+
use `humanish comms check --online --json` for read-only authentication.
|
|
53
|
+
Authentication does not establish mailbox permissions, capacity or delivery.
|
|
54
|
+
`humanish comms configure --lab <path> --json` previews an ignored lab copy;
|
|
55
|
+
add `--apply --plan-token <digest>` to save the reviewed version. Launch its
|
|
56
|
+
exact returned path, not a basename that could resolve to another manifest.
|
|
53
57
|
|
|
54
58
|
## Setup Workflow
|
|
55
59
|
|
|
@@ -216,18 +220,34 @@ npx humanish lab run first-run --json --no-open
|
|
|
216
220
|
|
|
217
221
|
### Off-app email verification (comms)
|
|
218
222
|
|
|
219
|
-
When a flow
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
223
|
+
When a flow needs an email from the app — a verification link, one-time code or
|
|
224
|
+
magic link — configure an inbox so the participant can read and use that message.
|
|
225
|
+
Humanish supports local capture and fresh hosted receiving, with different setup
|
|
226
|
+
and privacy behavior.
|
|
227
|
+
|
|
228
|
+
Choose the transport to match the app:
|
|
229
|
+
|
|
230
|
+
- **Local capture** (below): app send configuration can point at a test catch;
|
|
231
|
+
no external mail service is needed. It tests the email flow without proving
|
|
232
|
+
real delivery.
|
|
233
|
+
- **Real AgentMail receiving**: use `comms.email: { connection: agentmail }`.
|
|
234
|
+
Humanish acquires one fresh hosted inbox per participant before desktops start.
|
|
235
|
+
The app sends normally. Requires a configured organization-scoped key and
|
|
236
|
+
app-url/clone/local-tree hosted computer-use participants; concurrent shared
|
|
237
|
+
worlds work, sequential shared worlds and local-agent do not. Do not combine
|
|
238
|
+
connection with capture settings or substitute fresh addresses for existing
|
|
239
|
+
account identities. `allowedOrigins` can name additional trusted link origins.
|
|
240
|
+
|
|
241
|
+
Real mail can reach hosted desktops, actor models and analysis models. Screenshots
|
|
242
|
+
can contain it. Such runs remain `local_only` even after screenshot blurring;
|
|
243
|
+
this is a publication restriction, not local-only processing. Provider charges
|
|
244
|
+
and model charges are separate. Use `humanish comms recover --json` after an
|
|
245
|
+
interrupted run, then `humanish comms recover --run <id> --apply --json` for its
|
|
246
|
+
privately recorded resources. Never derive deletion authority from run artifacts.
|
|
247
|
+
SMS, participant sending, borrowed inboxes and other providers remain unavailable.
|
|
248
|
+
See `docs/architecture/real-email-receiving.md` for limits and recovery.
|
|
249
|
+
|
|
250
|
+
The following configuration selects **local capture**:
|
|
231
251
|
|
|
232
252
|
```yaml
|
|
233
253
|
comms:
|