humanish 0.94.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.
Files changed (95) hide show
  1. package/README.md +10 -0
  2. package/dist/comms-agentmail.d.ts +25 -0
  3. package/dist/comms-agentmail.js +418 -0
  4. package/dist/comms-agentmail.js.map +1 -0
  5. package/dist/comms-connections.d.ts +52 -0
  6. package/dist/comms-connections.js +123 -0
  7. package/dist/comms-connections.js.map +1 -0
  8. package/dist/comms-lease-store.d.ts +90 -0
  9. package/dist/comms-lease-store.js +489 -0
  10. package/dist/comms-lease-store.js.map +1 -0
  11. package/dist/comms-receiving-evidence.d.ts +46 -0
  12. package/dist/comms-receiving-evidence.js +35 -0
  13. package/dist/comms-receiving-evidence.js.map +1 -0
  14. package/dist/comms-receiving-inbox.d.ts +16 -0
  15. package/dist/comms-receiving-inbox.js +410 -0
  16. package/dist/comms-receiving-inbox.js.map +1 -0
  17. package/dist/comms-receiving-runtime.d.ts +25 -0
  18. package/dist/comms-receiving-runtime.js +45 -0
  19. package/dist/comms-receiving-runtime.js.map +1 -0
  20. package/dist/comms-receiving-types.d.ts +98 -0
  21. package/dist/comms-receiving-types.js +2 -0
  22. package/dist/comms-receiving-types.js.map +1 -0
  23. package/dist/comms-receiving.d.ts +58 -0
  24. package/dist/comms-receiving.js +554 -0
  25. package/dist/comms-receiving.js.map +1 -0
  26. package/dist/comms-setup.d.ts +40 -0
  27. package/dist/comms-setup.js +121 -0
  28. package/dist/comms-setup.js.map +1 -0
  29. package/dist/concurrent-shared-world-lab.js +662 -624
  30. package/dist/concurrent-shared-world-lab.js.map +1 -1
  31. package/dist/cua-actor-lab.d.ts +4 -1
  32. package/dist/cua-actor-lab.js +98 -17
  33. package/dist/cua-actor-lab.js.map +1 -1
  34. package/dist/doctor-lab.d.ts +7 -0
  35. package/dist/doctor-lab.js +26 -7
  36. package/dist/doctor-lab.js.map +1 -1
  37. package/dist/e2b-terminal-lab.js +3 -0
  38. package/dist/e2b-terminal-lab.js.map +1 -1
  39. package/dist/index.d.ts +2 -0
  40. package/dist/index.js +1 -0
  41. package/dist/index.js.map +1 -1
  42. package/dist/key-resolution.d.ts +1 -1
  43. package/dist/key-resolution.js +6 -4
  44. package/dist/key-resolution.js.map +1 -1
  45. package/dist/lab-config.d.ts +20 -3
  46. package/dist/lab-config.js +65 -3
  47. package/dist/lab-config.js.map +1 -1
  48. package/dist/lab-engine.js +8 -3
  49. package/dist/lab-engine.js.map +1 -1
  50. package/dist/lab-summary.d.ts +3 -2
  51. package/dist/lab-summary.js +17 -7
  52. package/dist/lab-summary.js.map +1 -1
  53. package/dist/observer-app.html +1 -1
  54. package/dist/observer-data.js +14 -1
  55. package/dist/observer-data.js.map +1 -1
  56. package/dist/oss-lab.d.ts +1 -1
  57. package/dist/oss-lab.js.map +1 -1
  58. package/dist/oss-meta-lab.d.ts +1 -1
  59. package/dist/oss-meta-lab.js.map +1 -1
  60. package/dist/program.d.ts +4 -0
  61. package/dist/program.js +231 -74
  62. package/dist/program.js.map +1 -1
  63. package/dist/run-narration-secrets.d.ts +5 -0
  64. package/dist/run-narration-secrets.js +68 -0
  65. package/dist/run-narration-secrets.js.map +1 -0
  66. package/dist/run.d.ts +7 -2
  67. package/dist/run.js +25 -3
  68. package/dist/run.js.map +1 -1
  69. package/dist/scripted-browser-lab.js +7 -0
  70. package/dist/scripted-browser-lab.js.map +1 -1
  71. package/dist/secret-prompt.d.ts +2 -0
  72. package/dist/secret-prompt.js +36 -0
  73. package/dist/secret-prompt.js.map +1 -0
  74. package/dist/shared-world-lab.js +4 -0
  75. package/dist/shared-world-lab.js.map +1 -1
  76. package/dist/study-analysis-engine.js +30 -1
  77. package/dist/study-analysis-engine.js.map +1 -1
  78. package/dist/study-analysis-evidence.js +9 -1
  79. package/dist/study-analysis-evidence.js.map +1 -1
  80. package/dist/tui-app.js +135 -135
  81. package/dist/tui-contract.d.ts +26 -1
  82. package/dist/tui-contract.js.map +1 -1
  83. package/dist/tui-launch.d.ts +2 -0
  84. package/dist/tui-launch.js +9 -1
  85. package/dist/tui-launch.js.map +1 -1
  86. package/docs/architecture/comms-inbox.md +4 -0
  87. package/docs/architecture/real-email-receiving.md +135 -0
  88. package/docs/contracts/run-bundle.md +9 -1
  89. package/docs/contracts/schemas.md +50 -5
  90. package/docs/goals/current.md +5 -5
  91. package/docs/ramp/README.md +13 -3
  92. package/docs/release/0.95.0-connections-setup.md +38 -0
  93. package/docs/release/0.96.0-real-email-receiving.md +47 -0
  94. package/package.json +4 -2
  95. package/skills/humanish/SKILL.md +55 -14
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: humanish
3
- description: Install and configure Humanish CLI in a JavaScript app as an open-source-safe persona simulation harness. Use when an agent needs to add humanish, run safe first setup, create synthetic personas or scenarios, configure env var names without values, capture the email or SMS an app sends so a persona can complete an email-gated flow (e.g. a signup verification link or one-time code), run verification and Observer commands, or draft public-safe feedback issues without GitHub mutation.
3
+ description: Install and configure Humanish CLI in a JavaScript app as an open-source-safe persona simulation harness. Use when an agent needs to add humanish, run safe first setup, create synthetic personas or scenarios, configure env var names without values, capture the email an app sends so a persona can complete an email-gated flow (e.g. a signup verification link or one-time code), run verification and Observer commands, or draft public-safe feedback issues without GitHub mutation.
4
4
  ---
5
5
 
6
6
  # Humanish CLI
@@ -36,10 +36,25 @@ Everything it shows has a machine-readable equivalent, which is what you want:
36
36
  | browsing runs | `npx humanish runs --json` |
37
37
  | starting a run | `npx humanish lab run <lab> --json --no-open` |
38
38
  | a run's outcome | `npx humanish review --run <id> --json` |
39
+ | communication setup | `npx humanish comms providers --json` and `npx humanish comms connections list --json` |
39
40
 
40
41
  If a human asks you to "open the TUI", tell them the command to type; do not run
41
42
  it on their behalf.
42
43
 
44
+ For AgentMail credential setup, a human can open `humanish tui`, press `c`,
45
+ and choose **Add API key**. Hidden entry returns to Connections after saving or
46
+ cancelling. The key is stored for that OS user, while the connection profile is
47
+ project-local. Never ask for the key in chat. The CLI alternative is
48
+ `humanish keys set agentmail` (hidden prompt; agents may use `--stdin` from an
49
+ authorized credential source), followed by
50
+ `humanish comms connections add agentmail --json`. Existing env/file precedence
51
+ and `HUMANISH_STRICT_KEYS=1` still apply. Read installed provider capabilities:
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.
57
+
43
58
  ## Setup Workflow
44
59
 
45
60
  1. Inspect public target-repo files only: `package.json`, docs, route/app
@@ -203,15 +218,36 @@ npx humanish watch first-run
203
218
  npx humanish lab run first-run --json --no-open
204
219
  ```
205
220
 
206
- ### Off-app email/SMS verification (comms)
207
-
208
- When a flow is gated behind an email or SMS the app itself SENDS — a signup
209
- verification link, a one-time code, a magic link — add a `comms:` block. The
210
- harness redirects the app's email-API sends into a catch INSIDE the sandbox (no
211
- mail leaves the machine), gives the persona a synthetic inbox to open and click
212
- through, and writes a digest-only `humanish.comms-thread.v1` evidence artifact (no
213
- raw address/link/code persists). Reach for this whenever a persona must read mail
214
- the app sent it to finish a step.
221
+ ### Off-app email verification (comms)
222
+
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**:
215
251
 
216
252
  ```yaml
217
253
  comms:
@@ -247,10 +283,15 @@ The app keeps calling its email API normally (Resend/SendGrid-shaped, or a custo
247
283
  profile); only the base URL is redirected. Route support: the clone/local-tree
248
284
  computer-use route (inbox on the sandbox's own loopback) and the CONCURRENT
249
285
  shared-world route (inbox getHost-exposed from the subject sandbox; the default
250
- since every seat now runs live at once). Declared anywhere else — app-url /
251
- operator-provided subjects, or a sequential `concurrency: 1` shared world — it is
252
- warned inert at parse: no catch exists there and no actor hears about an inbox.
253
- It needs `python3` in the subject sandbox (the stock E2B desktop has it).
286
+ since every seat now runs live at once). SMTP capture is supported on per-lane
287
+ provisioned routes; shared-world SMTP is rejected because it is not wired there.
288
+ For app-url/operator-provided subjects, run `humanish comms catch` on a reachable
289
+ host, point the app's email sends at that catch, and declare
290
+ `comms.email.external.catchBaseUrl` (plus `inboxBaseUrl` if different). A declared
291
+ `authTokenEnv` is an environment variable name, never a credential value.
292
+ Sequential `concurrency: 1` shared-world email remains unwired; do not silently
293
+ change study concurrency to work around that limitation. The in-sandbox catch
294
+ needs `python3` (the stock E2B desktop has it).
254
295
  Evidence is digest-only (`humanish.comms-thread.v1` — counts and digests, never
255
296
  raw mail); the *readable* proof a persona saw the email is its screenshots of the
256
297
  inbox page. See `docs/contracts/schemas.md` for the full `comms:` shape and