humanish 0.95.0 → 0.96.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/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 +6 -1
- package/dist/cua-actor-lab.js +149 -52
- 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 +8 -3
- package/dist/run.js +26 -4
- 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 +16 -5
- package/docs/contracts/schemas.md +20 -3
- package/docs/goals/current.md +5 -5
- package/docs/ramp/README.md +13 -5
- package/docs/release/0.96.0-real-email-receiving.md +47 -0
- package/docs/release/0.96.1-browser-navigation.md +22 -0
- package/package.json +2 -1
- package/skills/humanish/SKILL.md +33 -13
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { constants } from "node:fs";
|
|
3
|
+
import { lstat, open, unlink } from "node:fs/promises";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { parse, stringify } from "yaml";
|
|
6
|
+
import { readCommsConnections } from "./comms-connections.js";
|
|
7
|
+
import { discoverProviderKeys } from "./key-resolution.js";
|
|
8
|
+
import { AgentMailReceivingError, createAgentMailReceiver } from "./comms-agentmail.js";
|
|
9
|
+
import { parseLabConfig } from "./lab-config.js";
|
|
10
|
+
import { resolveLabManifest } from "./labs.js";
|
|
11
|
+
import { assertPreparedSelectedOutputDirectory, prepareManagedHumanishOutputDirectory, prepareSelectedOutputDirectory, readContainedRegularFile, writeContainedOutputFile } from "./selected-output-paths.js";
|
|
12
|
+
export async function checkCommsConnection(args) {
|
|
13
|
+
const base = { schema: "humanish.comms-check.v1", ok: false,
|
|
14
|
+
connection: args.connection ?? "agentmail", online: args.online === true,
|
|
15
|
+
credentialPresent: false, authenticated: null, ready: null, permissions: "unknown", capacity: "unknown",
|
|
16
|
+
checkedAt: null, code: "configuration_unavailable", message: "Could not read this email connection. Check Connections or .humanish/local/comms.yaml." };
|
|
17
|
+
try {
|
|
18
|
+
const connection = (await readCommsConnections(args.cwd)).connections[base.connection];
|
|
19
|
+
if (!connection)
|
|
20
|
+
return { ...base, ready: false, code: "connection_missing", message: "Save an AgentMail connection in Connections first." };
|
|
21
|
+
const env = { ...args.env };
|
|
22
|
+
await discoverProviderKeys({ cwd: args.cwd, env, announce: () => { } });
|
|
23
|
+
const key = env[connection.apiKeyEnv]?.trim();
|
|
24
|
+
if (!key)
|
|
25
|
+
return { ...base, ready: false, code: "credential_missing", message: "The configured credential is missing. Add it in Connections or provide it with --env-file." };
|
|
26
|
+
base.credentialPresent = true;
|
|
27
|
+
if (!args.online)
|
|
28
|
+
return { ...base, ok: true, code: "local_setup_present", message: "Connection and key are present. Authentication, permissions, capacity and delivery are not checked. Use --online for a read-only authentication check." };
|
|
29
|
+
base.checkedAt = new Date().toISOString();
|
|
30
|
+
const identity = await (args.makeAdapter ?? (apiKey => createAgentMailReceiver({ apiKey })))(key).authenticate({ timeoutMs: 8_000 });
|
|
31
|
+
if (identity.scopeType !== "organization")
|
|
32
|
+
return { ...base, ready: false, authenticated: true, code: "scope_unsupported", message: "Authenticated, but this release requires an organization-scoped key to acquire fresh inboxes." };
|
|
33
|
+
return { ...base, ok: true, authenticated: true, code: "authenticated", message: "Authentication passed. Inbox permissions, available capacity and delivery remain untested; this check created no resources." };
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
const code = error instanceof AgentMailReceivingError ? error.code : "check_unavailable";
|
|
37
|
+
const rejected = code === "agentmail_auth_rejected";
|
|
38
|
+
return { ...base, code, ...(rejected ? { authenticated: false, ready: false } : {}),
|
|
39
|
+
message: rejected ? "AgentMail rejected this credential or its permissions. Check the effective key source and replace it if needed. The saved key was kept."
|
|
40
|
+
: "The connection check could not complete. The saved key was kept; retry when the provider is available." };
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export async function receivingRequiredKey(cwd, connectionName) {
|
|
44
|
+
try {
|
|
45
|
+
return (await readCommsConnections(cwd)).connections[connectionName]?.apiKeyEnv ?? null;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/** Save a local copy, never rewrite a committed manifest or silently shadow it by handle. */
|
|
52
|
+
export async function configureCommsLab(args) {
|
|
53
|
+
const base = { schema: "humanish.comms-configure.v1", ok: false, applied: false };
|
|
54
|
+
try {
|
|
55
|
+
if (!(await readCommsConnections(args.cwd)).connections[args.connection])
|
|
56
|
+
return { ...base, message: "Save the selected connection first." };
|
|
57
|
+
const source = await resolveLabManifest(args.cwd, args.lab);
|
|
58
|
+
if (!source.ok)
|
|
59
|
+
return { ...base, message: "The selected lab could not be read safely." };
|
|
60
|
+
const root = await prepareSelectedOutputDirectory(args.cwd, args.cwd);
|
|
61
|
+
const rel = path.relative(root.requestedPath, path.resolve(args.cwd, source.path)).replace(/\\/g, "/");
|
|
62
|
+
const bytes = await readContainedRegularFile(root, rel);
|
|
63
|
+
if (!bytes || bytes.length > 1024 * 1024)
|
|
64
|
+
return { ...base, message: "The lab is missing or too large." };
|
|
65
|
+
const raw = parse(bytes.toString("utf8"));
|
|
66
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
67
|
+
return { ...base, message: "The lab must be a mapping." };
|
|
68
|
+
const lab = raw;
|
|
69
|
+
const existing = lab.comms;
|
|
70
|
+
if (existing?.email && existing.email.connection === undefined)
|
|
71
|
+
return { ...base, message: "This lab uses local capture. Preserve it or make a separate lab before selecting real email." };
|
|
72
|
+
lab.comms = { ...(existing ?? {}), email: { ...existing?.email, connection: args.connection } };
|
|
73
|
+
const validated = parseLabConfig(lab);
|
|
74
|
+
if (!validated.ok)
|
|
75
|
+
return { ...base, message: "This lab does not support real email receiving. Use a hosted computer-use app-url, clone or local-tree route; shared-world must be concurrent." };
|
|
76
|
+
const filename = path.basename(source.path).replace(/\.ya?ml$/, "").replace(/-receiving$/, "") + "-receiving.yaml";
|
|
77
|
+
if (!/^[A-Za-z0-9_][A-Za-z0-9._-]{0,110}\.yaml$/.test(filename))
|
|
78
|
+
return { ...base, message: "Use a simple lab filename before configuring email." };
|
|
79
|
+
const destination = `.humanish/local/labs/${filename}`;
|
|
80
|
+
if (rel === destination)
|
|
81
|
+
return { ...base, message: "This is already the local receiving copy. Select its original lab to configure a separate copy, or edit this manifest directly." };
|
|
82
|
+
let prior;
|
|
83
|
+
try {
|
|
84
|
+
prior = await readContainedRegularFile(root, destination);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return { ...base, message: "The local destination could not be read safely." };
|
|
88
|
+
}
|
|
89
|
+
const content = stringify(lab);
|
|
90
|
+
const token = createHash("sha256").update(bytes).update("\0").update(prior ?? "missing").update("\0").update(destination).update("\0").update(args.connection).digest("hex");
|
|
91
|
+
const plan = { ...base, ok: true, path: destination, planToken: token, connection: args.connection,
|
|
92
|
+
message: `Save ${destination} with fresh AgentMail inboxes. Email is hosted; actor and analysis models may see content. Recordings require local review and cannot be automatically published. Provider charges are separate. Launch this exact path.` };
|
|
93
|
+
if (!args.apply)
|
|
94
|
+
return plan;
|
|
95
|
+
if (args.planToken !== undefined && args.planToken !== token)
|
|
96
|
+
return { ...base, message: "The lab or destination changed since preview. Preview again before saving." };
|
|
97
|
+
const directory = await prepareManagedHumanishOutputDirectory(args.cwd, "local", "labs");
|
|
98
|
+
const lockPath = path.join(directory.physicalPath, ".comms-configure.lock");
|
|
99
|
+
const lock = await open(lockPath, constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY | constants.O_NOFOLLOW, 0o600);
|
|
100
|
+
const identity = await lock.stat();
|
|
101
|
+
try {
|
|
102
|
+
const currentSource = await readContainedRegularFile(root, rel);
|
|
103
|
+
const currentDestination = await readContainedRegularFile(root, destination);
|
|
104
|
+
if (!currentSource?.equals(bytes) || (prior === null ? currentDestination !== null : !currentDestination?.equals(prior)))
|
|
105
|
+
return { ...base, message: "Files changed while saving. Preview again." };
|
|
106
|
+
await writeContainedOutputFile(directory, filename, content, "utf8");
|
|
107
|
+
}
|
|
108
|
+
finally {
|
|
109
|
+
await lock.close();
|
|
110
|
+
await assertPreparedSelectedOutputDirectory(directory);
|
|
111
|
+
const current = await lstat(lockPath);
|
|
112
|
+
if (current.dev === identity.dev && current.ino === identity.ino)
|
|
113
|
+
await unlink(lockPath);
|
|
114
|
+
}
|
|
115
|
+
return { ...plan, applied: true, message: `Saved ${destination}. Start that exact lab path; the original manifest was preserved.` };
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return { ...base, message: "Could not configure this lab safely. Check configuration, paths and permissions; no provider resources were created." };
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=comms-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comms-setup.js","sourceRoot":"","sources":["../src/comms-setup.ts"],"names":[],"mappings":"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"}
|