@oh-hai/cli 0.2.3 → 0.3.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/CHANGELOG.md +125 -0
- package/README.md +59 -29
- package/dist/commands/ask.js +71 -10
- package/dist/commands/ask.js.map +1 -1
- package/dist/commands/bridge.d.ts +2 -0
- package/dist/commands/bridge.js +502 -0
- package/dist/commands/bridge.js.map +1 -0
- package/dist/commands/context.d.ts +22 -0
- package/dist/commands/doctor.js +12 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/fleet.d.ts +2 -0
- package/dist/commands/fleet.js +164 -0
- package/dist/commands/fleet.js.map +1 -0
- package/dist/commands/handlers.js +8 -0
- package/dist/commands/handlers.js.map +1 -1
- package/dist/commands/messages.d.ts +2 -0
- package/dist/commands/messages.js +131 -0
- package/dist/commands/messages.js.map +1 -0
- package/dist/commands/messaging/build.d.ts +10 -1
- package/dist/commands/messaging/build.js +22 -4
- package/dist/commands/messaging/build.js.map +1 -1
- package/dist/commands/messaging/capability.d.ts +42 -0
- package/dist/commands/messaging/capability.js +164 -0
- package/dist/commands/messaging/capability.js.map +1 -0
- package/dist/commands/messaging/http.d.ts +28 -1
- package/dist/commands/messaging/http.js +234 -13
- package/dist/commands/messaging/http.js.map +1 -1
- package/dist/commands/messaging/inbox-entries.d.ts +83 -0
- package/dist/commands/messaging/inbox-entries.js +371 -0
- package/dist/commands/messaging/inbox-entries.js.map +1 -0
- package/dist/commands/messaging/inbox-stream.d.ts +37 -0
- package/dist/commands/messaging/inbox-stream.js +224 -0
- package/dist/commands/messaging/inbox-stream.js.map +1 -0
- package/dist/commands/messaging/session-drain.d.ts +50 -0
- package/dist/commands/messaging/session-drain.js +163 -0
- package/dist/commands/messaging/session-drain.js.map +1 -0
- package/dist/commands/messaging/session-scope.d.ts +93 -0
- package/dist/commands/messaging/session-scope.js +0 -0
- package/dist/commands/messaging/session-scope.js.map +1 -0
- package/dist/commands/messaging/sessions-http.d.ts +20 -0
- package/dist/commands/messaging/sessions-http.js +153 -0
- package/dist/commands/messaging/sessions-http.js.map +1 -0
- package/dist/commands/messaging/shared.d.ts +19 -1
- package/dist/commands/messaging/shared.js +69 -2
- package/dist/commands/messaging/shared.js.map +1 -1
- package/dist/commands/messaging/validate.d.ts +33 -1
- package/dist/commands/messaging/validate.js +78 -0
- package/dist/commands/messaging/validate.js.map +1 -1
- package/dist/commands/messaging/wire.d.ts +180 -3
- package/dist/commands/notify.js +47 -5
- package/dist/commands/notify.js.map +1 -1
- package/dist/commands/registry.js +128 -3
- package/dist/commands/registry.js.map +1 -1
- package/dist/commands/self-test.d.ts +17 -0
- package/dist/commands/self-test.js +472 -0
- package/dist/commands/self-test.js.map +1 -0
- package/dist/commands/session.d.ts +2 -0
- package/dist/commands/session.js +158 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/setup.js +44 -0
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/task.js +61 -11
- package/dist/commands/task.js.map +1 -1
- package/dist/commands/teach.js +84 -4
- package/dist/commands/teach.js.map +1 -1
- package/dist/commands/whoami.js +14 -1
- package/dist/commands/whoami.js.map +1 -1
- package/dist/exit-codes.d.ts +37 -1
- package/dist/exit-codes.js +42 -1
- package/dist/exit-codes.js.map +1 -1
- package/dist/help.js +5 -1
- package/dist/help.js.map +1 -1
- package/dist/watch-lock.js +7 -0
- package/dist/watch-lock.js.map +1 -1
- package/package.json +5 -4
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
// Hub HTTP for the MA2H v0.5 §16 session surface (issue #657), over the injectable
|
|
2
|
+
// `ctx.runtime.fetchImpl` so the command tests stay hermetic. Split from `messaging/http.ts` — the
|
|
3
|
+
// message-leg module — because sessions are a different resource with their own shape guards; both
|
|
4
|
+
// share the §7 exit-code mapping and the §5.4 bearer-redaction posture via the helpers exported
|
|
5
|
+
// from there, so there is exactly one place where an HTTP status becomes an exit code.
|
|
6
|
+
//
|
|
7
|
+
// A session id is Hub-minted, NON-SECRET, and confers nothing on its own (spec §16) — every call
|
|
8
|
+
// here still presents the agent bearer. That is why session ids may be printed, cached in the
|
|
9
|
+
// environment, and passed around as addresses while the token never is.
|
|
10
|
+
import { CliError } from "../../envelope.js";
|
|
11
|
+
import { throwTransportError } from "../http.js";
|
|
12
|
+
import { redactToken, requestTimeoutMs, statusToCliError } from "./http.js";
|
|
13
|
+
/** The v0.5 session states (spec §16.3). Terminal states are immutable. */
|
|
14
|
+
const SESSION_STATES = new Set(["active", "closed", "expired"]);
|
|
15
|
+
/** A parseable ISO timestamp — the schema's `format: date-time`, checked as far as is useful. */
|
|
16
|
+
function isIsoTimestamp(value) {
|
|
17
|
+
return typeof value === "string" && value.trim() !== "" && !Number.isNaN(Date.parse(value));
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Guard for one session resource, against the v0.5 session schema's INVARIANTS rather than just its
|
|
21
|
+
* field presence.
|
|
22
|
+
*
|
|
23
|
+
* Presence alone is not enough here, because every one of these fields is acted on rather than
|
|
24
|
+
* merely displayed. A non-`sess_` id is exported as `MA2H_SESSION_ID` and addressed with `--to`,
|
|
25
|
+
* where it can only fail later and confusingly. A `#`-bearing `agent_id` cannot appear in a §4
|
|
26
|
+
* address at all (its first `#` parses as the separator), so `fleet ls` would advertise a
|
|
27
|
+
* copy-pasteable address that is not expressible. An out-of-enum `state` silently drops the row from
|
|
28
|
+
* the live filter, making a session look gone. And the lease timestamps are what `fleet ls` renders
|
|
29
|
+
* as age. A malformed resource is a Hub/proxy contract violation — surfacing it as one beats acting
|
|
30
|
+
* on it.
|
|
31
|
+
*/
|
|
32
|
+
function isSession(value) {
|
|
33
|
+
if (value === null || typeof value !== "object")
|
|
34
|
+
return false;
|
|
35
|
+
const { id, agent_id: agentId, state, created_at: createdAt, expires_at: expiresAt } = value;
|
|
36
|
+
if (typeof id !== "string" || !/^sess_[^\s#]+$/.test(id))
|
|
37
|
+
return false;
|
|
38
|
+
if (typeof agentId !== "string" || agentId === "" || agentId.includes("#"))
|
|
39
|
+
return false;
|
|
40
|
+
if (typeof state !== "string" || !SESSION_STATES.has(state))
|
|
41
|
+
return false;
|
|
42
|
+
return isIsoTimestamp(createdAt) && isIsoTimestamp(expiresAt);
|
|
43
|
+
}
|
|
44
|
+
/** Parse a `{ session: … }` body and redact the bearer from every string in it before any caller
|
|
45
|
+
* can print it (§5.4) — the same JSON round-trip `listMessages` uses, and it fails CLOSED: a
|
|
46
|
+
* re-parse failure surfaces a clean server error rather than returning un-redacted data. */
|
|
47
|
+
function readSession(body, token, what) {
|
|
48
|
+
const session = body.session;
|
|
49
|
+
if (!isSession(session)) {
|
|
50
|
+
throw new CliError("server", `the Hub returned a malformed session ${what} (expected { session: { id, agent_id, state, created_at } }).`);
|
|
51
|
+
}
|
|
52
|
+
return redactDeep(session, token, "session");
|
|
53
|
+
}
|
|
54
|
+
/** Deep bearer redaction over an already-validated value. Fails closed (see `readSession`). */
|
|
55
|
+
function redactDeep(value, token, what) {
|
|
56
|
+
const redacted = redactToken(JSON.stringify(value), token);
|
|
57
|
+
if (redacted === undefined)
|
|
58
|
+
return value;
|
|
59
|
+
try {
|
|
60
|
+
return JSON.parse(redacted);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
throw new CliError("server", `the Hub ${what} response could not be safely processed.`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/** Shared request helper: authenticated call, transport errors → §7 exit codes, non-2xx → the Hub's
|
|
67
|
+
* error envelope mapped to a CliError. Returns the parsed JSON object body. */
|
|
68
|
+
async function sessionRequest(ctx, token, method, path, body) {
|
|
69
|
+
const init = {
|
|
70
|
+
method,
|
|
71
|
+
headers: {
|
|
72
|
+
Authorization: `Bearer ${token}`,
|
|
73
|
+
...(body !== undefined ? { "Content-Type": "application/json" } : {}),
|
|
74
|
+
},
|
|
75
|
+
...(body !== undefined ? { body: JSON.stringify(body) } : {}),
|
|
76
|
+
signal: AbortSignal.timeout(requestTimeoutMs(ctx)),
|
|
77
|
+
};
|
|
78
|
+
let res;
|
|
79
|
+
try {
|
|
80
|
+
res = await ctx.runtime.fetchImpl(`${ctx.config.baseUrl}${path}`, init);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
throwTransportError(error, ctx.config.baseUrl);
|
|
84
|
+
}
|
|
85
|
+
if (res.status < 200 || res.status >= 300) {
|
|
86
|
+
const { code, message } = await readErrorEnvelopeOf(res);
|
|
87
|
+
// A Hub with no §16 surface at all answers 404 on POST /v1/sessions — an unrecognized ROUTE,
|
|
88
|
+
// not an unknown session. Say so, because "not found" alone would send the user hunting for a
|
|
89
|
+
// session id they never had.
|
|
90
|
+
const hint = res.status === 404 && method === "POST"
|
|
91
|
+
? "this Hub does not implement the v0.5 session surface (§16) — `oh-hai session` needs a Hub advertising `sessions`."
|
|
92
|
+
: res.status === 429
|
|
93
|
+
? "the live-session cap for this agent is full — close a stale one (`oh-hai session close`) or let its lease lapse; `oh-hai fleet ls` shows which."
|
|
94
|
+
: undefined;
|
|
95
|
+
throw statusToCliError(res.status, redactToken(message, token), code, hint);
|
|
96
|
+
}
|
|
97
|
+
return readJsonOf(res);
|
|
98
|
+
}
|
|
99
|
+
/** POST /v1/sessions — register (spec §16.1). Every request field is optional: the Hub mints the
|
|
100
|
+
* id, owns the state, and CLAMPS `ttl_seconds` two-sidedly into its advertised bounds, so the
|
|
101
|
+
* returned `ttl_seconds`/`expires_at` are authoritative and may differ from what was asked. */
|
|
102
|
+
export async function registerSession(ctx, token, request) {
|
|
103
|
+
return readSession(await sessionRequest(ctx, token, "POST", "/v1/sessions", request), token, "registration");
|
|
104
|
+
}
|
|
105
|
+
/** GET /v1/sessions — list (spec §16.4). Scope depends on the CALLER, not on any parameter: an
|
|
106
|
+
* agent always sees its OWN sessions, and sees the whole account only where the Hub's
|
|
107
|
+
* `agent_list_visibility` policy permits it. The caller renders which of those it got. */
|
|
108
|
+
export async function listSessions(ctx, token, page = {}) {
|
|
109
|
+
const query = new URLSearchParams();
|
|
110
|
+
if (page.limit !== undefined)
|
|
111
|
+
query.set("limit", String(page.limit));
|
|
112
|
+
if (page.offset !== undefined)
|
|
113
|
+
query.set("offset", String(page.offset));
|
|
114
|
+
const suffix = query.toString();
|
|
115
|
+
const body = await sessionRequest(ctx, token, "GET", `/v1/sessions${suffix ? `?${suffix}` : ""}`);
|
|
116
|
+
const sessions = body.sessions;
|
|
117
|
+
if (!Array.isArray(sessions) || !sessions.every(isSession)) {
|
|
118
|
+
throw new CliError("server", "the Hub returned a malformed session list (expected { sessions: [{ id, agent_id, state, created_at }] }).");
|
|
119
|
+
}
|
|
120
|
+
return redactDeep(sessions, token, "session list");
|
|
121
|
+
}
|
|
122
|
+
/** GET /v1/sessions/:id — read one (spec §16.4). A TERMINAL session is still 200-with-its-state for
|
|
123
|
+
* the advertised retention window; 404 covers unknown AND foreign alike (deliberately
|
|
124
|
+
* indistinguishable, §9.1). */
|
|
125
|
+
export async function getSession(ctx, token, id) {
|
|
126
|
+
return readSession(await sessionRequest(ctx, token, "GET", `/v1/sessions/${encodeURIComponent(id)}`), token, "read");
|
|
127
|
+
}
|
|
128
|
+
/** DELETE /v1/sessions/:id — close (spec §16.3). IDEMPOTENT: re-closing a terminal session returns
|
|
129
|
+
* it unchanged rather than erroring, so a retry is always safe. */
|
|
130
|
+
export async function closeSession(ctx, token, id) {
|
|
131
|
+
return readSession(await sessionRequest(ctx, token, "DELETE", `/v1/sessions/${encodeURIComponent(id)}`), token, "close");
|
|
132
|
+
}
|
|
133
|
+
// --- tiny body readers, duplicated from http.ts for the same reason it duplicates login.ts's ---
|
|
134
|
+
async function readJsonOf(res) {
|
|
135
|
+
if (typeof res.json !== "function")
|
|
136
|
+
return {};
|
|
137
|
+
try {
|
|
138
|
+
const parsed = await res.json();
|
|
139
|
+
return parsed !== null && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {};
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return {};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
async function readErrorEnvelopeOf(res) {
|
|
146
|
+
const body = await readJsonOf(res);
|
|
147
|
+
const error = body.error;
|
|
148
|
+
const record = error !== null && typeof error === "object" ? error : {};
|
|
149
|
+
const message = typeof record.message === "string" && record.message.trim() !== "" ? record.message.trim() : undefined;
|
|
150
|
+
const code = typeof record.code === "string" && record.code.trim() !== "" ? record.code.trim() : undefined;
|
|
151
|
+
return { code, message };
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=sessions-http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions-http.js","sourceRoot":"","sources":["../../../src/commands/messaging/sessions-http.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,10 @@ export declare const MAX_TIMER_MS = 2147483647;
|
|
|
21
21
|
* `--max`. `detail` tailors the message to the flag's unit (e.g. "a positive integer number of
|
|
22
22
|
* milliseconds"). */
|
|
23
23
|
export declare function positiveInt(raw: string | undefined, flag: string, detail?: string, ceiling?: number): number;
|
|
24
|
+
/** Like `positiveInt` but ALLOWS 0 — for a pagination `--offset` that can page back to the start (0
|
|
25
|
+
* is the first window, not an error). A NaN / fractional / negative / over-`ceiling` value is a
|
|
26
|
+
* usage error (exit 2). `ceiling` defaults to the timer range; pass a smaller cap for a count flag. */
|
|
27
|
+
export declare function nonNegativeInt(raw: string | undefined, flag: string, detail?: string, ceiling?: number): number;
|
|
24
28
|
/** Coerce a `parseArgs` value (string | boolean | string[] | undefined under strict:false) to a
|
|
25
29
|
* plain string, or undefined. A repeated single-value flag arrives as an array — take the last. */
|
|
26
30
|
export declare function stringFlag(value: unknown): string | undefined;
|
|
@@ -47,7 +51,21 @@ export declare function resolveRunId(): string;
|
|
|
47
51
|
/** Print the common human-readable submit acknowledgement (headline + id + status, plus the
|
|
48
52
|
* poll URL when relevant and a review URL when the Hub returned one). Commands append their own
|
|
49
53
|
* next-step hint after calling this. Never prints the token (§5.4). */
|
|
50
|
-
export declare function printSubmitAck(ctx: CommandContext, headline: string, ack: SubmitAck, includePoll?: boolean): void;
|
|
54
|
+
export declare function printSubmitAck(ctx: CommandContext, headline: string, ack: SubmitAck, includePoll?: boolean, addressed?: boolean): void;
|
|
55
|
+
/**
|
|
56
|
+
* After an ADDRESSED ask/task, tell the caller which session the answer will come back to — and,
|
|
57
|
+
* when this process minted it, that keeping it alive is now the caller's problem.
|
|
58
|
+
*
|
|
59
|
+
* This is the one piece of state a one-shot CLI cannot manage for the user. `ask submit --to` binds
|
|
60
|
+
* the Caller mailbox to a session (§S1); the process then exits, and unless the NEXT invocation
|
|
61
|
+
* presents the same session id, the lease lapses and the answer has nowhere to land. Printing the
|
|
62
|
+
* `export` line is what makes "two concurrent sessions address each other with zero human setup"
|
|
63
|
+
* actually achievable from a shell — silence here would leave a correct submit quietly undeliverable.
|
|
64
|
+
*/
|
|
65
|
+
export declare function printCallerSession(ctx: CommandContext, scope: {
|
|
66
|
+
id: string;
|
|
67
|
+
owned: boolean;
|
|
68
|
+
} | undefined): void;
|
|
51
69
|
/** Print a composed envelope under `--dry-run`: human → pretty JSON; `--json` → the uniform
|
|
52
70
|
* envelope wrapping it (`{ dry_run: true, envelope }`). Posts nothing. */
|
|
53
71
|
export declare function printDryRunEnvelope(ctx: CommandContext, command: string, envelope: unknown): void;
|
|
@@ -46,6 +46,16 @@ export function positiveInt(raw, flag, detail = "a positive integer", ceiling =
|
|
|
46
46
|
}
|
|
47
47
|
return n;
|
|
48
48
|
}
|
|
49
|
+
/** Like `positiveInt` but ALLOWS 0 — for a pagination `--offset` that can page back to the start (0
|
|
50
|
+
* is the first window, not an error). A NaN / fractional / negative / over-`ceiling` value is a
|
|
51
|
+
* usage error (exit 2). `ceiling` defaults to the timer range; pass a smaller cap for a count flag. */
|
|
52
|
+
export function nonNegativeInt(raw, flag, detail = "a non-negative integer", ceiling = MAX_TIMER_MS) {
|
|
53
|
+
const n = raw !== undefined ? Number(raw) : NaN;
|
|
54
|
+
if (!Number.isInteger(n) || n < 0 || n > ceiling) {
|
|
55
|
+
throw new CliError("usage", `${flag} must be ${detail} (at most ${ceiling}).`);
|
|
56
|
+
}
|
|
57
|
+
return n;
|
|
58
|
+
}
|
|
49
59
|
/** Coerce a `parseArgs` value (string | boolean | string[] | undefined under strict:false) to a
|
|
50
60
|
* plain string, or undefined. A repeated single-value flag arrives as an array — take the last. */
|
|
51
61
|
export function stringFlag(value) {
|
|
@@ -112,16 +122,73 @@ export function resolveRunId() {
|
|
|
112
122
|
/** Print the common human-readable submit acknowledgement (headline + id + status, plus the
|
|
113
123
|
* poll URL when relevant and a review URL when the Hub returned one). Commands append their own
|
|
114
124
|
* next-step hint after calling this. Never prints the token (§5.4). */
|
|
115
|
-
export function printSubmitAck(ctx, headline, ack, includePoll = false) {
|
|
125
|
+
export function printSubmitAck(ctx, headline, ack, includePoll = false, addressed = false) {
|
|
116
126
|
// ack fields are Hub-supplied — sanitize before echoing to the terminal (§5.4 posture).
|
|
117
127
|
ctx.io.log(`✅ ${headline}`);
|
|
118
128
|
ctx.io.log(` id: ${sanitizeForTerminal(ack.id)}`);
|
|
119
|
-
ctx.io.log(` status: ${sanitizeForTerminal(ack.status)}`);
|
|
129
|
+
ctx.io.log(` status: ${sanitizeForTerminal(ack.status)}${statusGloss(ack.status)}`);
|
|
130
|
+
if (addressed && ack.destination !== undefined)
|
|
131
|
+
ctx.io.log(` dest: ${describeDestination(ack.destination)}`);
|
|
120
132
|
if (includePoll && ack.poll_url)
|
|
121
133
|
ctx.io.log(` poll_url: ${sanitizeForTerminal(ack.poll_url)}`);
|
|
122
134
|
if (ack.review_url)
|
|
123
135
|
ctx.io.log(` review_url: ${sanitizeForTerminal(ack.review_url)}`);
|
|
124
136
|
}
|
|
137
|
+
/** A short parenthetical on the ack status, for the states whose plain name would mislead. The
|
|
138
|
+
* v0.5 honesty rules exist because `delivered` at accept time was a false belief — so `queued`,
|
|
139
|
+
* the state that replaced it for an addressed notify, must not be read as "arrived" either. */
|
|
140
|
+
function statusGloss(status) {
|
|
141
|
+
if (status === "queued")
|
|
142
|
+
return " (accepted into the addressee's mailbox — NOT yet delivered)";
|
|
143
|
+
if (status === "bounced")
|
|
144
|
+
return " (the destination went terminal before it was consumed)";
|
|
145
|
+
if (status === "acknowledged")
|
|
146
|
+
return " (the addressee consumed it)";
|
|
147
|
+
return "";
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Render the §8.1 `destination` reachability snapshot for an ADDRESSED submit, honestly.
|
|
151
|
+
*
|
|
152
|
+
* Two distinct things must not be blurred together:
|
|
153
|
+
* - `unknown` — the Hub has no per-destination visibility to offer. It is a statement about the
|
|
154
|
+
* HUB, not about the addressee, and it is emphatically not "offline". Never claim liveness here.
|
|
155
|
+
* - `online` / `offline` — a real §15 reachability read, rendered with `last_seen` when present.
|
|
156
|
+
*
|
|
157
|
+
* An ABSENT snapshot never reaches here: §8.1 requires one on every addressed ack, so `submitEnvelope`
|
|
158
|
+
* treats its absence as proof the Hub ignored the address and REFUSES the submit rather than letting
|
|
159
|
+
* a misroute exit 0. This function therefore only ever describes a snapshot that exists.
|
|
160
|
+
*/
|
|
161
|
+
function describeDestination(destination) {
|
|
162
|
+
const seen = destination.last_seen !== undefined ? `, last seen ${sanitizeForTerminal(destination.last_seen)}` : "";
|
|
163
|
+
const state = sanitizeForTerminal(destination.state);
|
|
164
|
+
if (state === "unknown")
|
|
165
|
+
return "reachability unknown — this Hub does not report it; queued durably";
|
|
166
|
+
if (state === "offline")
|
|
167
|
+
return `offline${seen} — queued durably until it drains`;
|
|
168
|
+
if (state === "online")
|
|
169
|
+
return `online${seen}`;
|
|
170
|
+
return `${state}${seen}`;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* After an ADDRESSED ask/task, tell the caller which session the answer will come back to — and,
|
|
174
|
+
* when this process minted it, that keeping it alive is now the caller's problem.
|
|
175
|
+
*
|
|
176
|
+
* This is the one piece of state a one-shot CLI cannot manage for the user. `ask submit --to` binds
|
|
177
|
+
* the Caller mailbox to a session (§S1); the process then exits, and unless the NEXT invocation
|
|
178
|
+
* presents the same session id, the lease lapses and the answer has nowhere to land. Printing the
|
|
179
|
+
* `export` line is what makes "two concurrent sessions address each other with zero human setup"
|
|
180
|
+
* actually achievable from a shell — silence here would leave a correct submit quietly undeliverable.
|
|
181
|
+
*/
|
|
182
|
+
export function printCallerSession(ctx, scope) {
|
|
183
|
+
if (scope === undefined)
|
|
184
|
+
return;
|
|
185
|
+
ctx.io.log(` session: ${sanitizeForTerminal(scope.id)} (the answer routes back here)`);
|
|
186
|
+
if (scope.owned) {
|
|
187
|
+
ctx.io.err(`note: session ${scope.id} was registered for this send and is left OPEN so the reply can reach it. ` +
|
|
188
|
+
`Reuse it with 'export MA2H_SESSION_ID=${scope.id}' (which also renews its lease), or end it with ` +
|
|
189
|
+
`'oh-hai session close --id ${scope.id}'.`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
125
192
|
/** Print a composed envelope under `--dry-run`: human → pretty JSON; `--json` → the uniform
|
|
126
193
|
* envelope wrapping it (`{ dry_run: true, envelope }`). Posts nothing. */
|
|
127
194
|
export function printDryRunEnvelope(ctx, command, envelope) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/commands/messaging/shared.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/commands/messaging/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,39 @@
|
|
|
1
|
-
import type { Actor, AskMessage, Priority, RequestMode, ResponseOption, TaskMessage } from "./wire.js";
|
|
1
|
+
import type { Actor, AgentAddress, AskMessage, Priority, RequestMode, ResponseOption, Status, TaskMessage } from "./wire.js";
|
|
2
2
|
export declare const PRIORITIES: readonly Priority[];
|
|
3
3
|
export declare const REQUEST_MODES: readonly RequestMode[];
|
|
4
4
|
export declare const CALLBACK_MODES: readonly ["pull", "push"];
|
|
5
5
|
export type CallbackMode = (typeof CALLBACK_MODES)[number];
|
|
6
|
+
/** Lifecycle statuses, the union across all three message types — the values the self-list route
|
|
7
|
+
* (`messages list`) accepts as its `--status` filter. Two tracks live here: the §7 RESOLUTION
|
|
8
|
+
* track (`open` → a resolution) and, on an ADDRESSED message only, the v0.5 §14.2 DELIVERY track
|
|
9
|
+
* (`queued` → `acknowledged` / `bounced` / `expired`). Kept in lockstep with the server's own
|
|
10
|
+
* `STATUSES` set in routes/messages.ts — the agent self-list includes addressed submissions, so a
|
|
11
|
+
* narrower mirror here would reject a filter on a state the caller can plainly see in that list. */
|
|
12
|
+
export declare const STATUSES: readonly Status[];
|
|
13
|
+
/** MA2H message types — the values `messages list` accepts as its `--type` filter. */
|
|
14
|
+
export declare const MESSAGE_TYPES: readonly ["notify", "ask", "task"];
|
|
15
|
+
export type MessageType = (typeof MESSAGE_TYPES)[number];
|
|
6
16
|
export declare function isPriority(value: string): value is Priority;
|
|
17
|
+
export declare function isStatus(value: string): value is Status;
|
|
18
|
+
export declare function isMessageType(value: string): value is MessageType;
|
|
7
19
|
export declare function isRequestMode(value: string): value is RequestMode;
|
|
8
20
|
export declare function isCallbackMode(value: string): value is CallbackMode;
|
|
9
21
|
/** Hub-attested resolver identity `<type>:<id>` with type ∈ {human,agent,system} (spec §9.1).
|
|
10
22
|
* Anchored end-to-end (no embedded whitespace) so a malformed `--resolver` fails loudly here. */
|
|
11
23
|
export declare function isActor(value: string): value is Actor;
|
|
24
|
+
/** Parse and validate a `--to` destination. Returns the address plus its session segment (when
|
|
25
|
+
* session-addressed) so callers can render the two halves separately. Throws a usage CliError on
|
|
26
|
+
* anything the §4 grammar cannot express — notably `human:<id>` (invalid as a destination in 0.5,
|
|
27
|
+
* the human inbox is what an ABSENT `to` means) and a `#`-bearing agent id (inexpressible: its
|
|
28
|
+
* first `#` parses as the separator and the remainder must then match `^sess_`). */
|
|
29
|
+
export declare function parseDestination(raw: string): {
|
|
30
|
+
address: AgentAddress;
|
|
31
|
+
agentId: string;
|
|
32
|
+
session?: string;
|
|
33
|
+
};
|
|
34
|
+
/** Validate an explicitly-supplied session id (`--session` / `MA2H_SESSION_ID`). A blank or
|
|
35
|
+
* non-`sess_` value is a usage error rather than a confusing Hub 404/422 later. */
|
|
36
|
+
export declare function assertSessionId(raw: string, source: string): string;
|
|
12
37
|
/** Normalize a push `--callback-url` to the canonical WHATWG href the Hub signs and `fetch` POSTs
|
|
13
38
|
* to (so the signed callback_url can't desync from the delivery URL), and enforce http(s) — the
|
|
14
39
|
* Hub's SSRF delivery guard rejects every other scheme, so a mailto:/file: url would pass
|
|
@@ -36,6 +61,13 @@ export declare function assertAskEnvelope(value: unknown): AskMessage;
|
|
|
36
61
|
/** Validate a parsed value is a well-formed task envelope before replaying it (spec §4.8),
|
|
37
62
|
* including an opt-in callback's shape (push needs a valid http(s) url; else pull). */
|
|
38
63
|
export declare function assertTaskEnvelope(value: unknown): TaskMessage;
|
|
64
|
+
/** A captured envelope's `to`, validated against the §4 grammar. Replay is verbatim, so the address
|
|
65
|
+
* is whatever was captured — but a malformed one would be refused by the Hub anyway, and failing
|
|
66
|
+
* locally keeps replay consistent with the other `assert*Envelope` guards. Returns undefined when
|
|
67
|
+
* the envelope is unaddressed (the ordinary human-inbox replay). */
|
|
68
|
+
export declare function replayDestination(envelope: {
|
|
69
|
+
to?: unknown;
|
|
70
|
+
}): string | undefined;
|
|
39
71
|
/** Extract `allowed_resolvers` from a replayed ask/task envelope (they live at `request.` for
|
|
40
72
|
* ask, `action.` for task) — used by the human-resolver replay guard. */
|
|
41
73
|
export declare function replayResolvers(envelope: AskMessage | TaskMessage): readonly unknown[] | undefined;
|
|
@@ -10,9 +10,36 @@ import { isHttpUrl } from "../../url.js";
|
|
|
10
10
|
export const PRIORITIES = ["low", "normal", "high", "urgent"];
|
|
11
11
|
export const REQUEST_MODES = ["select", "input", "confirm"];
|
|
12
12
|
export const CALLBACK_MODES = ["pull", "push"];
|
|
13
|
+
/** Lifecycle statuses, the union across all three message types — the values the self-list route
|
|
14
|
+
* (`messages list`) accepts as its `--status` filter. Two tracks live here: the §7 RESOLUTION
|
|
15
|
+
* track (`open` → a resolution) and, on an ADDRESSED message only, the v0.5 §14.2 DELIVERY track
|
|
16
|
+
* (`queued` → `acknowledged` / `bounced` / `expired`). Kept in lockstep with the server's own
|
|
17
|
+
* `STATUSES` set in routes/messages.ts — the agent self-list includes addressed submissions, so a
|
|
18
|
+
* narrower mirror here would reject a filter on a state the caller can plainly see in that list. */
|
|
19
|
+
export const STATUSES = [
|
|
20
|
+
"open",
|
|
21
|
+
"delivered",
|
|
22
|
+
"queued",
|
|
23
|
+
"acknowledged",
|
|
24
|
+
"bounced",
|
|
25
|
+
"answered",
|
|
26
|
+
"declined",
|
|
27
|
+
"cancelled",
|
|
28
|
+
"expired",
|
|
29
|
+
"completed",
|
|
30
|
+
"dismissed",
|
|
31
|
+
];
|
|
32
|
+
/** MA2H message types — the values `messages list` accepts as its `--type` filter. */
|
|
33
|
+
export const MESSAGE_TYPES = ["notify", "ask", "task"];
|
|
13
34
|
export function isPriority(value) {
|
|
14
35
|
return PRIORITIES.includes(value);
|
|
15
36
|
}
|
|
37
|
+
export function isStatus(value) {
|
|
38
|
+
return STATUSES.includes(value);
|
|
39
|
+
}
|
|
40
|
+
export function isMessageType(value) {
|
|
41
|
+
return MESSAGE_TYPES.includes(value);
|
|
42
|
+
}
|
|
16
43
|
export function isRequestMode(value) {
|
|
17
44
|
return REQUEST_MODES.includes(value);
|
|
18
45
|
}
|
|
@@ -24,6 +51,45 @@ export function isCallbackMode(value) {
|
|
|
24
51
|
export function isActor(value) {
|
|
25
52
|
return /^(human|agent|system):[^\s]+$/.test(value);
|
|
26
53
|
}
|
|
54
|
+
/** The §4 destination-address grammar (v0.5), mirroring `to`'s pattern in the v0.5 message schema
|
|
55
|
+
* byte-for-byte: `agent:<id>` or `agent:<id>#<sess_…>`, where the FIRST `#` is the separator and
|
|
56
|
+
* the id segment may not contain one. Mirrored locally so a typo'd `--to` is a usage error (exit 2)
|
|
57
|
+
* before any credential or Hub call — the same loud-fail discipline `--resolver` follows. */
|
|
58
|
+
const AGENT_ADDRESS = /^agent:[^\s#]+(#sess_[^\s#]+)?$/;
|
|
59
|
+
/** Hub-minted session ids are `sess_`-prefixed (spec §16.1). Used to reject a `--session` that
|
|
60
|
+
* could never name a real session before it reaches the wire. */
|
|
61
|
+
const SESSION_ID = /^sess_[^\s#]+$/;
|
|
62
|
+
/** Parse and validate a `--to` destination. Returns the address plus its session segment (when
|
|
63
|
+
* session-addressed) so callers can render the two halves separately. Throws a usage CliError on
|
|
64
|
+
* anything the §4 grammar cannot express — notably `human:<id>` (invalid as a destination in 0.5,
|
|
65
|
+
* the human inbox is what an ABSENT `to` means) and a `#`-bearing agent id (inexpressible: its
|
|
66
|
+
* first `#` parses as the separator and the remainder must then match `^sess_`). */
|
|
67
|
+
export function parseDestination(raw) {
|
|
68
|
+
const value = raw.trim();
|
|
69
|
+
if (!AGENT_ADDRESS.test(value)) {
|
|
70
|
+
const hint = value.startsWith("human:")
|
|
71
|
+
? ' — a destination is always an agent; omit --to entirely to reach the human inbox'
|
|
72
|
+
: ' (expected "agent:<id>" or "agent:<id>#sess_<session>")';
|
|
73
|
+
throw new CliError("usage", `invalid --to ${JSON.stringify(raw)}${hint}.`);
|
|
74
|
+
}
|
|
75
|
+
const hash = value.indexOf("#");
|
|
76
|
+
const principal = hash < 0 ? value : value.slice(0, hash);
|
|
77
|
+
const session = hash < 0 ? undefined : value.slice(hash + 1);
|
|
78
|
+
return {
|
|
79
|
+
address: value,
|
|
80
|
+
agentId: principal.slice("agent:".length),
|
|
81
|
+
...(session !== undefined ? { session } : {}),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/** Validate an explicitly-supplied session id (`--session` / `MA2H_SESSION_ID`). A blank or
|
|
85
|
+
* non-`sess_` value is a usage error rather than a confusing Hub 404/422 later. */
|
|
86
|
+
export function assertSessionId(raw, source) {
|
|
87
|
+
const value = raw.trim();
|
|
88
|
+
if (!SESSION_ID.test(value)) {
|
|
89
|
+
throw new CliError("usage", `invalid ${source} ${JSON.stringify(raw)} — a session id is Hub-minted and starts with "sess_".`);
|
|
90
|
+
}
|
|
91
|
+
return value;
|
|
92
|
+
}
|
|
27
93
|
/** Normalize a push `--callback-url` to the canonical WHATWG href the Hub signs and `fetch` POSTs
|
|
28
94
|
* to (so the signed callback_url can't desync from the delivery URL), and enforce http(s) — the
|
|
29
95
|
* Hub's SSRF delivery guard rejects every other scheme, so a mailto:/file: url would pass
|
|
@@ -168,6 +234,18 @@ export function assertTaskEnvelope(value) {
|
|
|
168
234
|
}
|
|
169
235
|
return value;
|
|
170
236
|
}
|
|
237
|
+
/** A captured envelope's `to`, validated against the §4 grammar. Replay is verbatim, so the address
|
|
238
|
+
* is whatever was captured — but a malformed one would be refused by the Hub anyway, and failing
|
|
239
|
+
* locally keeps replay consistent with the other `assert*Envelope` guards. Returns undefined when
|
|
240
|
+
* the envelope is unaddressed (the ordinary human-inbox replay). */
|
|
241
|
+
export function replayDestination(envelope) {
|
|
242
|
+
if (envelope.to === undefined)
|
|
243
|
+
return undefined;
|
|
244
|
+
if (typeof envelope.to !== "string") {
|
|
245
|
+
throw new CliError("usage", "--envelope `to` must be a string destination address.");
|
|
246
|
+
}
|
|
247
|
+
return parseDestination(envelope.to).address;
|
|
248
|
+
}
|
|
171
249
|
/** Extract `allowed_resolvers` from a replayed ask/task envelope (they live at `request.` for
|
|
172
250
|
* ask, `action.` for task) — used by the human-resolver replay guard. */
|
|
173
251
|
export function replayResolvers(envelope) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/commands/messaging/validate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/commands/messaging/validate.ts"],"names":[],"mappings":"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"}
|