@oh-hai/cli 0.2.0 → 0.2.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 +51 -8
- package/dist/auth/resolve-token.d.ts +2 -4
- package/dist/auth/resolve-token.js +4 -11
- package/dist/auth/resolve-token.js.map +1 -1
- package/dist/bindings.d.ts +65 -0
- package/dist/bindings.js +242 -0
- package/dist/bindings.js.map +1 -0
- package/dist/cli.js +171 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/ask.js +21 -17
- package/dist/commands/ask.js.map +1 -1
- package/dist/commands/binary-update.d.ts +61 -0
- package/dist/commands/binary-update.js +160 -0
- package/dist/commands/binary-update.js.map +1 -0
- package/dist/commands/context.d.ts +123 -0
- package/dist/commands/doctor.js +30 -3
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/flags.d.ts +14 -2
- package/dist/commands/flags.js +34 -6
- package/dist/commands/flags.js.map +1 -1
- package/dist/commands/handlers.js +6 -0
- package/dist/commands/handlers.js.map +1 -1
- package/dist/commands/inbox.js +129 -33
- package/dist/commands/inbox.js.map +1 -1
- package/dist/commands/messaging/identity.d.ts +9 -0
- package/dist/commands/messaging/identity.js +21 -0
- package/dist/commands/messaging/identity.js.map +1 -1
- package/dist/commands/messaging/validate.d.ts +6 -5
- package/dist/commands/messaging/validate.js +6 -5
- package/dist/commands/messaging/validate.js.map +1 -1
- package/dist/commands/registry.js +71 -8
- package/dist/commands/registry.js.map +1 -1
- package/dist/commands/setup.d.ts +17 -0
- package/dist/commands/setup.js +103 -3
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/task.js +21 -24
- package/dist/commands/task.js.map +1 -1
- package/dist/commands/teach.d.ts +13 -0
- package/dist/commands/teach.js +317 -0
- package/dist/commands/teach.js.map +1 -0
- package/dist/commands/update-check.d.ts +49 -0
- package/dist/commands/update-check.js +203 -0
- package/dist/commands/update-check.js.map +1 -0
- package/dist/commands/upgrade.d.ts +2 -0
- package/dist/commands/upgrade.js +178 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/commands/use.d.ts +2 -0
- package/dist/commands/use.js +99 -0
- package/dist/commands/use.js.map +1 -0
- package/dist/commands/whoami.js +113 -27
- package/dist/commands/whoami.js.map +1 -1
- package/dist/config-file.js +4 -20
- package/dist/config-file.js.map +1 -1
- package/dist/config.d.ts +14 -0
- package/dist/config.js +39 -3
- package/dist/config.js.map +1 -1
- package/dist/exit-codes.d.ts +6 -0
- package/dist/exit-codes.js +6 -0
- package/dist/exit-codes.js.map +1 -1
- package/dist/help.js +4 -1
- package/dist/help.js.map +1 -1
- package/dist/os.d.ts +16 -0
- package/dist/os.js +32 -0
- package/dist/os.js.map +1 -0
- package/dist/url.d.ts +7 -0
- package/dist/url.js +14 -0
- package/dist/url.js.map +1 -1
- package/dist/version.d.ts +11 -3
- package/dist/version.js +20 -3
- package/dist/version.js.map +1 -1
- package/dist/watch-lock.d.ts +85 -0
- package/dist/watch-lock.js +358 -0
- package/dist/watch-lock.js.map +1 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/commands/inbox.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,+FAA+F;AAC/F,qGAAqG;AACrG,qGAAqG;AACrG,qGAAqG;AACrG,8GAA8G;AAC9G,EAAE;AACF,kGAAkG;AAClG,qGAAqG;AACrG,oGAAoG;AACpG,mGAAmG;AACnG,iGAAiG;AACjG,qGAAqG;AACrG,wGAAwG;AAExG,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/commands/inbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,15 @@ export declare function resolveSubmitIdentity(ctx: CommandContext): Promise<{
|
|
|
22
22
|
* + the submitter-bound bearer). Uses `resolveIdentity` so a zero-config single stored identity is
|
|
23
23
|
* discovered for the token lookup. A missing token is an auth error (exit 3). */
|
|
24
24
|
export declare function requireToken(ctx: CommandContext): Promise<string>;
|
|
25
|
+
/** The bearer PLUS the resolved agent id, for `inbox watch`: the token drains the mailbox, while the
|
|
26
|
+
* agent id keys the concurrent-drain lock (the mailbox is scoped to the AGENT, not the bearer — one
|
|
27
|
+
* agent can hold several tokens, #323). `account` may be undefined (an env token with no
|
|
28
|
+
* `MA2H_AGENT_ID`, or an ambiguous store) — the caller degrades the guard to "unavailable" then,
|
|
29
|
+
* never keying on the token. A missing token is still an auth error (exit 3). */
|
|
30
|
+
export declare function requireWatchIdentity(ctx: CommandContext): Promise<{
|
|
31
|
+
token: string;
|
|
32
|
+
agentId: string | undefined;
|
|
33
|
+
}>;
|
|
25
34
|
/** The bearer for an `--envelope` replay. The captured envelope already carries the submitting
|
|
26
35
|
* `agent.id`, so fall back to it for the store lookup when no explicit `--account` was given —
|
|
27
36
|
* otherwise a user with a stored login but no `default_account` following the replay example
|
|
@@ -49,6 +49,27 @@ export async function requireToken(ctx) {
|
|
|
49
49
|
}
|
|
50
50
|
return token;
|
|
51
51
|
}
|
|
52
|
+
/** The bearer PLUS the resolved agent id, for `inbox watch`: the token drains the mailbox, while the
|
|
53
|
+
* agent id keys the concurrent-drain lock (the mailbox is scoped to the AGENT, not the bearer — one
|
|
54
|
+
* agent can hold several tokens, #323). `account` may be undefined (an env token with no
|
|
55
|
+
* `MA2H_AGENT_ID`, or an ambiguous store) — the caller degrades the guard to "unavailable" then,
|
|
56
|
+
* never keying on the token. A missing token is still an auth error (exit 3). */
|
|
57
|
+
export async function requireWatchIdentity(ctx) {
|
|
58
|
+
const store = ctx.config.tokenSource === "env" ? undefined : await ctx.runtime.openStore();
|
|
59
|
+
const { token, account } = await resolveIdentity(ctx.config, store);
|
|
60
|
+
if (token === undefined) {
|
|
61
|
+
throw new CliError("auth", NOT_AUTHENTICATED);
|
|
62
|
+
}
|
|
63
|
+
// The lock key must be the agent that OWNS this bearer. In the store-backed path the token was looked
|
|
64
|
+
// up BY the agent id (or discovered as the sole stored identity), so the two are bound. But an ENV
|
|
65
|
+
// token is not bound to config: an account from a machine default (`default_account` or a directory
|
|
66
|
+
// binding) may name a DIFFERENT agent than the env bearer — locking on it would guard the wrong agent
|
|
67
|
+
// while draining another's mailbox. So alongside an env token, only trust an EXPLICITLY-supplied agent
|
|
68
|
+
// id (`--account` / `MA2H_AGENT_ID`); otherwise leave it undefined so the guard degrades to a warning.
|
|
69
|
+
const explicit = ctx.config.accountSource === "flag" || ctx.config.accountSource === "env";
|
|
70
|
+
const agentId = ctx.config.tokenSource === "env" && !explicit ? undefined : account;
|
|
71
|
+
return { token, agentId };
|
|
72
|
+
}
|
|
52
73
|
/** The bearer for an `--envelope` replay. The captured envelope already carries the submitting
|
|
53
74
|
* `agent.id`, so fall back to it for the store lookup when no explicit `--account` was given —
|
|
54
75
|
* otherwise a user with a stored login but no `default_account` following the replay example
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../src/commands/messaging/identity.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,+FAA+F;AAC/F,2FAA2F;AAC3F,gGAAgG;AAChG,iGAAiG;AAEjG,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7C,2FAA2F;AAC3F,MAAM,iBAAiB,GAAG,oFAAoF,CAAC;AAE/G;;;;;;4BAM4B;AAC5B,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAmB,EAAE,eAAwB;IAC/E,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;IAC3F,MAAM,MAAM,GAAG,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;IACxG,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;sGAMsG;AACtG,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,GAAmB;IAC7D,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;IAC3F,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,QAAQ,CAChB,OAAO,EACP,2HAA2H,CAC5H,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACrC,CAAC;AAED;;kFAEkF;AAClF,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAmB;IACpD,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;IAC3F,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC3D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;kFAGkF;AAClF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAmB,EAAE,eAAuB;IACnF,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IACxD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../src/commands/messaging/identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,14 +16,15 @@ export declare function isActor(value: string): value is Actor;
|
|
|
16
16
|
export declare function normalizePushUrl(raw: string): string;
|
|
17
17
|
/** Parse `value:label` (label may itself contain ':'). Throws a usage CliError on a bad shape. */
|
|
18
18
|
export declare function parseOption(raw: string): ResponseOption;
|
|
19
|
-
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
19
|
+
/** True when allowed_resolvers names ≥1 `human:<id>`. The Hub always lets the account OWNER resolve
|
|
20
|
+
* (issue #366) — an omitted/empty list is owner-only, and a non-owner human may resolve only if
|
|
21
|
+
* explicitly listed (fail-closed, spec §5.4). Callers use this to nudge when the ONLY resolvers
|
|
22
|
+
* given are non-human: the resolve route is human-only, so such a list narrows to the owner alone. */
|
|
22
23
|
export declare function hasHumanResolver(resolvers: readonly unknown[] | undefined): boolean;
|
|
23
24
|
/** Stricter than `hasHumanResolver`: requires ≥1 `human:<id>` with a CONCRETE (non-wildcard,
|
|
24
25
|
* non-empty) id. The Hub matches allowed_resolvers literally (`allowed.includes(actor)`), so a
|
|
25
|
-
* captured `human:*` can never match any real actor — the replay
|
|
26
|
-
* the
|
|
26
|
+
* captured `human:*` can never match any real actor — the replay callers use this to note (and
|
|
27
|
+
* proceed) that only the account owner will be able to resolve the replayed ask/task. */
|
|
27
28
|
export declare function hasConcreteHumanResolver(resolvers: readonly unknown[] | undefined): boolean;
|
|
28
29
|
/** Read the `--envelope` source: inline JSON, `@<path>` (local file), or `@-` (stdin, via the
|
|
29
30
|
* injected reader so tests never touch fd 0). */
|
|
@@ -53,16 +53,17 @@ export function parseOption(raw) {
|
|
|
53
53
|
}
|
|
54
54
|
return { value, label };
|
|
55
55
|
}
|
|
56
|
-
/**
|
|
57
|
-
*
|
|
58
|
-
*
|
|
56
|
+
/** True when allowed_resolvers names ≥1 `human:<id>`. The Hub always lets the account OWNER resolve
|
|
57
|
+
* (issue #366) — an omitted/empty list is owner-only, and a non-owner human may resolve only if
|
|
58
|
+
* explicitly listed (fail-closed, spec §5.4). Callers use this to nudge when the ONLY resolvers
|
|
59
|
+
* given are non-human: the resolve route is human-only, so such a list narrows to the owner alone. */
|
|
59
60
|
export function hasHumanResolver(resolvers) {
|
|
60
61
|
return (resolvers ?? []).some((r) => typeof r === "string" && r.startsWith("human:"));
|
|
61
62
|
}
|
|
62
63
|
/** Stricter than `hasHumanResolver`: requires ≥1 `human:<id>` with a CONCRETE (non-wildcard,
|
|
63
64
|
* non-empty) id. The Hub matches allowed_resolvers literally (`allowed.includes(actor)`), so a
|
|
64
|
-
* captured `human:*` can never match any real actor — the replay
|
|
65
|
-
* the
|
|
65
|
+
* captured `human:*` can never match any real actor — the replay callers use this to note (and
|
|
66
|
+
* proceed) that only the account owner will be able to resolve the replayed ask/task. */
|
|
66
67
|
export function hasConcreteHumanResolver(resolvers) {
|
|
67
68
|
return (resolvers ?? []).some((r) => {
|
|
68
69
|
if (typeof r !== "string" || !r.startsWith("human:"))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/commands/messaging/validate.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,wFAAwF;AACxF,4FAA4F;AAC5F,yFAAyF;AACzF,gGAAgG;AAChG,0BAA0B;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,MAAM,CAAC,MAAM,UAAU,GAAwB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AACnF,MAAM,CAAC,MAAM,aAAa,GAA2B,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AACpF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,CAAU,CAAC;AAGxD,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAQ,UAAgC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC3D,CAAC;AACD,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAQ,aAAmC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AACD,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAQ,cAAoC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/D,CAAC;AAED;kGACkG;AAClG,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,OAAO,+BAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrD,CAAC;AAED;;;4FAG4F;AAC5F,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,sCAAsC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChE,MAAM,IAAI,QAAQ,CAChB,OAAO,EACP,uEAAuE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CACzG,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,wCAAwC,GAAG,GAAG,CAAC,CAAC;IACvF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,IAAI,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACjC,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,6DAA6D,GAAG,GAAG,CAAC,CAAC;IACnG,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/commands/messaging/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,7 +53,7 @@ export const COMMANDS = [
|
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
55
|
name: "whoami",
|
|
56
|
-
summary: "show agent id + base URL + token presence (never the token)",
|
|
56
|
+
summary: "show agent id + how it resolved + base URL + token presence (never the token)",
|
|
57
57
|
issue: 106,
|
|
58
58
|
subcommands: [],
|
|
59
59
|
help: [
|
|
@@ -61,7 +61,30 @@ export const COMMANDS = [
|
|
|
61
61
|
"",
|
|
62
62
|
"Usage: oh-hai whoami [--check]",
|
|
63
63
|
"",
|
|
64
|
-
"Prints agent id,
|
|
64
|
+
"Prints agent id, how it resolved (flag / env / directory binding / user config /",
|
|
65
|
+
"discovered), base URL, and token presence. --check probes the Hub for validity and,",
|
|
66
|
+
"when you're signed in as a human, prints your resolver id (`human:<id>`) — the actor",
|
|
67
|
+
"an agent addresses to route an ask/task to you.",
|
|
68
|
+
].join("\n"),
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: "use",
|
|
72
|
+
summary: "bind this directory to an agent (per-project identity, no --account juggling)",
|
|
73
|
+
issue: 307,
|
|
74
|
+
subcommands: [],
|
|
75
|
+
help: [
|
|
76
|
+
"oh-hai use — bind the current directory to an agent (cli spec §4 / §6).",
|
|
77
|
+
"",
|
|
78
|
+
"Usage: oh-hai use <agent> bind this directory (and its subtree) to <agent>",
|
|
79
|
+
" oh-hai use --list list all directory bindings",
|
|
80
|
+
" oh-hai use --unset remove this directory's binding",
|
|
81
|
+
"",
|
|
82
|
+
"Sessions run from a bound directory tree resolve to its agent automatically — no",
|
|
83
|
+
"--account needed. Bindings are USER-side (~/.config/oh-hai/bindings.json), scoped per",
|
|
84
|
+
"Hub, and NEVER settable from a repo (credential-safety §6). Resolution walks up from",
|
|
85
|
+
"the current directory (git-style) to the nearest bound ancestor. Precedence:",
|
|
86
|
+
"--account / MA2H_AGENT_ID > directory binding > user default_account. Offline — no",
|
|
87
|
+
"Hub call, and the agent need not be logged in yet.",
|
|
65
88
|
].join("\n"),
|
|
66
89
|
},
|
|
67
90
|
{
|
|
@@ -87,10 +110,11 @@ export const COMMANDS = [
|
|
|
87
110
|
"oh-hai ask — request a human decision.",
|
|
88
111
|
"",
|
|
89
112
|
"Usage: oh-hai ask submit --mode <select|input|confirm> --title <t>",
|
|
90
|
-
" --resolver human:<id> [--option k:Label]... [--schema <json>]",
|
|
113
|
+
" [--resolver human:<id>]... [--option k:Label]... [--schema <json>]",
|
|
91
114
|
" oh-hai ask await --id <id> [--interval <ms>] [--await-timeout <ms>]",
|
|
92
115
|
"",
|
|
93
|
-
"Carries a REQUIRED idempotency key.
|
|
116
|
+
"Carries a REQUIRED idempotency key. --resolver is optional: with none, the account",
|
|
117
|
+
"owner can answer (it needn't be hand-typed). See cli spec §4.4.",
|
|
94
118
|
].join("\n"),
|
|
95
119
|
},
|
|
96
120
|
{
|
|
@@ -101,11 +125,12 @@ export const COMMANDS = [
|
|
|
101
125
|
help: [
|
|
102
126
|
"oh-hai task — hand a human a manual action.",
|
|
103
127
|
"",
|
|
104
|
-
"Usage: oh-hai task submit --instructions <text> --title <t> --resolver human:<id>",
|
|
128
|
+
"Usage: oh-hai task submit --instructions <text> --title <t> [--resolver human:<id>]...",
|
|
105
129
|
" [--checklist <text>]... [--callback pull|push]",
|
|
106
130
|
" oh-hai task await --id <id> [--interval <ms>] [--await-timeout <ms>]",
|
|
107
131
|
"",
|
|
108
|
-
"Terminal by default.
|
|
132
|
+
"Terminal by default. --resolver is optional: with none, the account owner can mark",
|
|
133
|
+
"it done. See cli spec §4.4.",
|
|
109
134
|
].join("\n"),
|
|
110
135
|
},
|
|
111
136
|
{
|
|
@@ -131,14 +156,17 @@ export const COMMANDS = [
|
|
|
131
156
|
help: [
|
|
132
157
|
"oh-hai inbox — the human→agent inbound leg (MA2H v0.4).",
|
|
133
158
|
"",
|
|
134
|
-
"Usage: oh-hai inbox watch [--interval <ms>] [--once] [--max <n>]",
|
|
159
|
+
"Usage: oh-hai inbox watch [--interval <ms>] [--once] [--max <n>] [--force]",
|
|
135
160
|
"",
|
|
136
161
|
"watch drains your agent's mailbox, streams each directive to stdout for the",
|
|
137
162
|
"agent runtime, posts a single batched ack, and — because each authenticated",
|
|
138
163
|
"poll is the presence heartbeat — keeps you 'online' by polling on --interval",
|
|
139
164
|
"(default 5000ms). Under --json each directive is one NDJSON envelope. --once",
|
|
140
165
|
"drains a single batch and exits (cron / scripting). --max caps the drain size.",
|
|
141
|
-
"
|
|
166
|
+
"Only one watcher per identity may drain ON THIS MACHINE: a second is refused",
|
|
167
|
+
"(exit 10) so two local sessions can't race to consume the same directive; --force",
|
|
168
|
+
"takes over. Watchers on different machines aren't detected and will split the",
|
|
169
|
+
"mailbox. See cli spec §4.7.",
|
|
142
170
|
].join("\n"),
|
|
143
171
|
},
|
|
144
172
|
{
|
|
@@ -154,6 +182,41 @@ export const COMMANDS = [
|
|
|
154
182
|
"Local checks run offline; connectivity + --test-notify are network checks. See cli spec §4.6.",
|
|
155
183
|
].join("\n"),
|
|
156
184
|
},
|
|
185
|
+
{
|
|
186
|
+
name: "teach",
|
|
187
|
+
summary: "teach this machine's agents about OH HAI (AGENTS.md snippet)",
|
|
188
|
+
issue: 295,
|
|
189
|
+
subcommands: [],
|
|
190
|
+
help: [
|
|
191
|
+
"oh-hai teach — teach this machine's agents that OH HAI exists (cli spec §4.9).",
|
|
192
|
+
"",
|
|
193
|
+
"Usage: oh-hai teach [--global] [--dry-run] [--yes]",
|
|
194
|
+
"",
|
|
195
|
+
"Writes a vendor-neutral OH HAI snippet into the agent-instruction files this machine's",
|
|
196
|
+
"agents already read: the cross-vendor AGENTS.md (project-level by default; --global for",
|
|
197
|
+
"the user-level convention path) plus any detected vendor files (CLAUDE.md, GEMINI.md, …).",
|
|
198
|
+
"Idempotent — a stable marked block it updates in place, never a duplicate; never a secret.",
|
|
199
|
+
"--dry-run previews what it would touch; --yes skips the confirm (required under --json).",
|
|
200
|
+
].join("\n"),
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
name: "upgrade",
|
|
204
|
+
summary: "check for a newer oh-hai and self-update (or print how)",
|
|
205
|
+
issue: 343,
|
|
206
|
+
subcommands: [],
|
|
207
|
+
help: [
|
|
208
|
+
"oh-hai upgrade — update the CLI to the latest published version (cli spec §4 / #277).",
|
|
209
|
+
"",
|
|
210
|
+
"Usage: oh-hai upgrade [--check]",
|
|
211
|
+
"",
|
|
212
|
+
"Checks the npm registry for a newer @oh-hai/cli and acts by how you installed it: a global npm",
|
|
213
|
+
"install self-updates with `npm i -g @oh-hai/cli@latest`, and a standalone binary downloads the",
|
|
214
|
+
"matching release, checksum-verifies it, and swaps itself in place — both only in interactive",
|
|
215
|
+
"sessions (a pipe / CI / --json prints guidance instead, never mutating silently). A source",
|
|
216
|
+
"checkout gets guidance rather than a fabricated upgrade. --check reports availability without",
|
|
217
|
+
"changing anything. Already-latest and offline are both reported honestly.",
|
|
218
|
+
].join("\n"),
|
|
219
|
+
},
|
|
157
220
|
];
|
|
158
221
|
export function findCommand(name) {
|
|
159
222
|
return COMMANDS.find((command) => command.name === name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/commands/registry.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,mFAAmF;AACnF,kFAAkF;AAClF,kGAAkG;AAelG,MAAM,CAAC,MAAM,QAAQ,GAA2B;IAC9C;QACE,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,8DAA8D;QACvE,KAAK,EAAE,GAAG;QACV,WAAW,EAAE,EAAE;QACf,IAAI,EAAE;YACJ,gEAAgE;YAChE,EAAE;YACF,qBAAqB;YACrB,EAAE;YACF,mFAAmF;YACnF,oFAAoF;YACpF,sFAAsF;YACtF,uFAAuF;YACvF,mDAAmD;SACpD,CAAC,IAAI,CAAC,IAAI,CAAC;KACb;IACD;QACE,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,+CAA+C;QACxD,KAAK,EAAE,GAAG;QACV,WAAW,EAAE,EAAE;QACf,IAAI,EAAE;YACJ,iEAAiE;YACjE,EAAE;YACF,wCAAwC;YACxC,uEAAuE;YACvE,EAAE;YACF,mFAAmF;YACnF,mFAAmF;YACnF,yEAAyE;YACzE,mFAAmF;YACnF,qCAAqC;SACtC,CAAC,IAAI,CAAC,IAAI,CAAC;KACb;IACD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,yBAAyB;QAClC,KAAK,EAAE,GAAG;QACV,WAAW,EAAE,EAAE;QACf,IAAI,EAAE;YACJ,kFAAkF;YAClF,EAAE;YACF,+CAA+C;YAC/C,EAAE;YACF,6DAA6D;SAC9D,CAAC,IAAI,CAAC,IAAI,CAAC;KACb;IACD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/commands/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/setup.d.ts
CHANGED
|
@@ -7,3 +7,20 @@ export interface SetupPrecomputed {
|
|
|
7
7
|
status?: MachineStatus;
|
|
8
8
|
}
|
|
9
9
|
export declare function setupCommand(ctx: CommandContext, pre?: SetupPrecomputed): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* Bare-`oh-hai` project-onboarding offer for an ALREADY-SET-UP machine (#322, part of #307). When this
|
|
12
|
+
* machine has MULTIPLE connected agents and the current directory is UNBOUND, the no-flag messaging
|
|
13
|
+
* workflow is ambiguous — resolution refuses to guess among several stored identities, so
|
|
14
|
+
* `notify`/`ask`/`task` fail without `--account`. Offer the one-prompt fix: create a PROJECT-SCOPED
|
|
15
|
+
* agent via the shared device flow (the human creates + labels it in the browser; the CLI can only
|
|
16
|
+
* SUGGEST the project name — the browser owns agent creation, and the CLI holds no human session to mint
|
|
17
|
+
* `/v1/agents` directly), then BIND this directory to the returned agent so sessions in the tree resolve
|
|
18
|
+
* to it with no `--account`. Purely additive: the single-agent and zero-config/env paths never reach the
|
|
19
|
+
* prompt (they carry `storedCount <= 1`), so the #271 happy path is untouched.
|
|
20
|
+
*
|
|
21
|
+
* Returns true when it HANDLED the bare invocation (it offered — whether the human accepted or declined),
|
|
22
|
+
* so the caller skips its default help; false when the conditions don't apply and the caller should print
|
|
23
|
+
* help as before. Never prompts (or hangs) under `--json` or a non-interactive stdin — the same gate
|
|
24
|
+
* `handleAlreadySetUp`'s reconnect prompt uses. Every gate lives here so the behavior is one testable unit.
|
|
25
|
+
*/
|
|
26
|
+
export declare function offerProjectAgent(ctx: CommandContext, status: MachineStatus): Promise<boolean>;
|
package/dist/commands/setup.js
CHANGED
|
@@ -10,7 +10,9 @@
|
|
|
10
10
|
// - ALREADY set up → never a dead end: report the current identity, and (interactively) offer to
|
|
11
11
|
// connect another agent / re-authorize. Under --json or a non-interactive stdin, just report and
|
|
12
12
|
// exit 0 — no prompt, no hang.
|
|
13
|
+
import { basename, isAbsolute } from "node:path";
|
|
13
14
|
import { originOf } from "../auth/resolve-token.js";
|
|
15
|
+
import { bindingStoreStatus, setBinding } from "../bindings.js";
|
|
14
16
|
import { buildOk, serializeEnvelope } from "../envelope.js";
|
|
15
17
|
import { sanitizeForTerminal } from "../terminal.js";
|
|
16
18
|
import { machineStatus } from "../onboarding/status.js";
|
|
@@ -95,10 +97,19 @@ async function reportNextSteps(ctx, storedAgentId) {
|
|
|
95
97
|
return;
|
|
96
98
|
}
|
|
97
99
|
// A configured account that isn't the agent just bound won't resolve this bearer (notify/ask look up
|
|
98
|
-
// only the configured account). Note this rather than claim success
|
|
100
|
+
// only the configured account). Note this rather than claim success — and give the remedy that matches
|
|
101
|
+
// HOW the account resolved: a directory binding still wins on the next command, so "run without
|
|
102
|
+
// --account" is wrong there; point at re-binding / unsetting the directory instead (§6, #321).
|
|
99
103
|
if (ctx.config.account !== undefined && ctx.config.account !== storedAgentId) {
|
|
100
|
-
|
|
101
|
-
|
|
104
|
+
const active = sanitizeForTerminal(ctx.config.account);
|
|
105
|
+
if (ctx.config.accountSource === "binding") {
|
|
106
|
+
ctx.io.err(`oh-hai: connected as ${stored}, but this directory is bound to ${active}. ` +
|
|
107
|
+
`Run \`oh-hai use ${stored}\` to rebind it here (or \`oh-hai use --unset\`) to use this agent.`);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
ctx.io.err(`oh-hai: connected as ${stored}, but --account/MA2H_AGENT_ID is ${active}. ` +
|
|
111
|
+
`Run without --account, or set MA2H_AGENT_ID=${stored}, to use this agent.`);
|
|
112
|
+
}
|
|
102
113
|
return;
|
|
103
114
|
}
|
|
104
115
|
// Zero-config resolution refuses to guess among multiple stored agents — adding a second one makes the
|
|
@@ -109,6 +120,9 @@ async function reportNextSteps(ctx, storedAgentId) {
|
|
|
109
120
|
return;
|
|
110
121
|
}
|
|
111
122
|
ctx.io.err(allSet);
|
|
123
|
+
// The final onboarding step: teach this machine's agents that OH HAI exists so they actually reach for
|
|
124
|
+
// it. A pointer only — `teach` writes files, so it stays an explicit opt-in, never auto-run here.
|
|
125
|
+
ctx.io.err("oh-hai: to teach this machine's agents to use OH HAI, run `oh-hai teach` (writes an AGENTS.md snippet).");
|
|
112
126
|
}
|
|
113
127
|
/** Human phrasing for who the machine is connected as, across the env / sole / multiple cases. */
|
|
114
128
|
function describeIdentity(status) {
|
|
@@ -118,4 +132,90 @@ function describeIdentity(status) {
|
|
|
118
132
|
return "via the MA2H_AGENT_TOKEN environment credential";
|
|
119
133
|
return `with ${status.storedCount} connected agents`;
|
|
120
134
|
}
|
|
135
|
+
/**
|
|
136
|
+
* Bare-`oh-hai` project-onboarding offer for an ALREADY-SET-UP machine (#322, part of #307). When this
|
|
137
|
+
* machine has MULTIPLE connected agents and the current directory is UNBOUND, the no-flag messaging
|
|
138
|
+
* workflow is ambiguous — resolution refuses to guess among several stored identities, so
|
|
139
|
+
* `notify`/`ask`/`task` fail without `--account`. Offer the one-prompt fix: create a PROJECT-SCOPED
|
|
140
|
+
* agent via the shared device flow (the human creates + labels it in the browser; the CLI can only
|
|
141
|
+
* SUGGEST the project name — the browser owns agent creation, and the CLI holds no human session to mint
|
|
142
|
+
* `/v1/agents` directly), then BIND this directory to the returned agent so sessions in the tree resolve
|
|
143
|
+
* to it with no `--account`. Purely additive: the single-agent and zero-config/env paths never reach the
|
|
144
|
+
* prompt (they carry `storedCount <= 1`), so the #271 happy path is untouched.
|
|
145
|
+
*
|
|
146
|
+
* Returns true when it HANDLED the bare invocation (it offered — whether the human accepted or declined),
|
|
147
|
+
* so the caller skips its default help; false when the conditions don't apply and the caller should print
|
|
148
|
+
* help as before. Never prompts (or hangs) under `--json` or a non-interactive stdin — the same gate
|
|
149
|
+
* `handleAlreadySetUp`'s reconnect prompt uses. Every gate lives here so the behavior is one testable unit.
|
|
150
|
+
*/
|
|
151
|
+
export async function offerProjectAgent(ctx, status) {
|
|
152
|
+
// Only the ambiguous multi-identity case warrants a prompt: >1 resolvable stored identity means the
|
|
153
|
+
// no-flag workflow can't pick one. `storedCount` is 0 on the env-token / configured-account paths, so
|
|
154
|
+
// those (and the single-agent default) fall straight through to help — the happy path stays prompt-free.
|
|
155
|
+
if (status.storedCount <= 1)
|
|
156
|
+
return false;
|
|
157
|
+
// A directory already bound to an agent resolves unambiguously — nothing to offer. `accountSource` is
|
|
158
|
+
// "binding" whenever resolution walked up to a binding on this dir OR an ancestor, so a subtree of a
|
|
159
|
+
// bound project is covered too. (Via the cli.ts bare dispatch this is redundant — a resolved binding
|
|
160
|
+
// sets `config.account`, which makes `machineStatus` report `storedCount <= 1`, so the gate above
|
|
161
|
+
// already returned — but it's the load-bearing bound-tree guard for a DIRECT caller / the unit tests,
|
|
162
|
+
// so keep it rather than rely on the storedCount coupling.)
|
|
163
|
+
if (ctx.config.accountSource === "binding")
|
|
164
|
+
return false;
|
|
165
|
+
// Never prompt under --json (stdout is reserved for the envelope) or a non-interactive stdin (a pipe /
|
|
166
|
+
// CI would block on a `readLine` that never gets a line) — mirrors `handleAlreadySetUp`'s gate. Gate on
|
|
167
|
+
// real TTY-ness, not merely `readLine` presence (production always wires `readLine`).
|
|
168
|
+
if (ctx.json)
|
|
169
|
+
return false;
|
|
170
|
+
const interactive = (ctx.runtime.isInteractive?.() ?? false) && ctx.runtime.readLine !== undefined;
|
|
171
|
+
if (!interactive)
|
|
172
|
+
return false;
|
|
173
|
+
// Need a writable bindings store with an absolute cwd to persist the bind; without it, don't send the
|
|
174
|
+
// human through a browser flow whose binding can't be written afterward (mirrors `use`'s write preflight
|
|
175
|
+
// — "unavailable"/"unsupported-version" both mean a bind would be lost or would clobber a newer file).
|
|
176
|
+
const io = ctx.runtime.bindingsIo;
|
|
177
|
+
if (io === undefined || !isAbsolute(io.cwd) || bindingStoreStatus(io) !== "ok")
|
|
178
|
+
return false;
|
|
179
|
+
const project = sanitizeForTerminal(basename(io.cwd));
|
|
180
|
+
ctx.io.err(`oh-hai: this machine has ${status.storedCount} connected agents and this directory isn't bound to one.`);
|
|
181
|
+
ctx.io.err(`oh-hai: create a new agent for "${project}" and bind this directory to it? [y/N]: `);
|
|
182
|
+
const answer = (await ctx.runtime.readLine()).trim().toLowerCase();
|
|
183
|
+
if (answer !== "y" && answer !== "yes") {
|
|
184
|
+
// Declined — point at the manual paths and stop. We HANDLED the bare invocation, so don't also print
|
|
185
|
+
// help (returning true suppresses the caller's fallback).
|
|
186
|
+
ctx.io.err("oh-hai: ok — run `oh-hai use <agent>` to bind this directory to an existing agent, or pass `--account <id>` per command.");
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
// Suggest the label the human types on /activate (the browser owns agent creation + labeling). The
|
|
190
|
+
// device flow stores the returned bearer under the new agent id — never printed (§5.4).
|
|
191
|
+
ctx.io.err(`oh-hai: approve in your browser and create an agent — suggested label: ${project}.`);
|
|
192
|
+
const agentId = await runDeviceCodeFlow(ctx, "setup");
|
|
193
|
+
const boundAgent = sanitizeForTerminal(agentId);
|
|
194
|
+
// Bind cwd → the new agent so this tree resolves to it with no --account (resolveConfig precedence:
|
|
195
|
+
// flag > env > binding > user-default). setBinding writes ONLY the user-side store (credential-safe §6).
|
|
196
|
+
//
|
|
197
|
+
// The write preflight above ran BEFORE the (multi-minute) browser approval, so re-check the store here:
|
|
198
|
+
// if it went unwritable during the wait, or a NEWER CLI wrote a v2 bindings.json meanwhile, blindly
|
|
199
|
+
// calling setBinding would throw a raw OS error (unwritable) or SILENTLY clobber the newer file
|
|
200
|
+
// (loadBindings read-degrades a v2 doc to [], then writeBindings stamps a fresh v1). The agent is
|
|
201
|
+
// already minted + its bearer stored, so don't fail opaquely — tell the human exactly how to finish the
|
|
202
|
+
// bind by hand (mirrors the post-mint recovery guidance in `agents create`, commands/agents.ts).
|
|
203
|
+
if (bindingStoreStatus(io) !== "ok") {
|
|
204
|
+
ctx.io.err(`oh-hai: connected as ${boundAgent}, but this directory's binding could not be written ` +
|
|
205
|
+
`(the bindings file changed during approval). Run \`oh-hai use ${boundAgent}\` here to bind it.`);
|
|
206
|
+
return true;
|
|
207
|
+
}
|
|
208
|
+
let path;
|
|
209
|
+
try {
|
|
210
|
+
path = setBinding(io, io.cwd, originOf(ctx.config.baseUrl), agentId);
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
ctx.io.err(`oh-hai: connected as ${boundAgent}, but the directory binding could not be saved. ` +
|
|
214
|
+
`Run \`oh-hai use ${boundAgent}\` here to bind this directory to it.`);
|
|
215
|
+
return true;
|
|
216
|
+
}
|
|
217
|
+
ctx.io.err(`oh-hai: bound ${sanitizeForTerminal(path)} → ${boundAgent} — this directory now acts as ${boundAgent}.`);
|
|
218
|
+
ctx.io.err('oh-hai: try `oh-hai notify --title "hello"`, or run `oh-hai doctor` to verify.');
|
|
219
|
+
return true;
|
|
220
|
+
}
|
|
121
221
|
//# sourceMappingURL=setup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/task.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
// `oh-hai task` (docs/specs/cli.md §4.4) — hand a human a manual action. Subcommands `submit` +
|
|
2
2
|
// `await`. Productized from `scripts/task.ts`: account-aware bearer, `--json` envelope, §7 exit
|
|
3
|
-
// codes, injectable fetch. TERMINAL by default — `--callback` is pure opt-in
|
|
4
|
-
//
|
|
5
|
-
//
|
|
3
|
+
// codes, injectable fetch. TERMINAL by default — `--callback` is pure opt-in. `--resolver` is
|
|
4
|
+
// OPTIONAL (issue #366): with none, the Hub lets the account owner mark the task done, so the agent
|
|
5
|
+
// needn't hand-type an id it can't know; `allowed_resolvers` is an optional narrowing. A task
|
|
6
|
+
// Response carries no `value` (resolutions are completed / dismissed / expired).
|
|
6
7
|
import { CliError, buildOk, serializeEnvelope } from "../envelope.js";
|
|
7
8
|
import { parseSubcommandArgs } from "./flags.js";
|
|
8
9
|
import { awaitResolution, printResolution, resolveAwaitTiming } from "./messaging/await.js";
|
|
@@ -67,7 +68,7 @@ async function taskSubmit(ctx, flags) {
|
|
|
67
68
|
const callback = resolveCallback(flags); // undefined → terminal task (opt-in)
|
|
68
69
|
const checklistRaw = Array.isArray(flags.checklist) ? flags.checklist.filter((c) => typeof c === "string") : [];
|
|
69
70
|
const checklist = checklistRaw.map((text) => ({ text }));
|
|
70
|
-
const resolvers = resolveResolvers(flags,
|
|
71
|
+
const resolvers = resolveResolvers(flags, ctx);
|
|
71
72
|
const action = { instructions };
|
|
72
73
|
if (checklist.length > 0)
|
|
73
74
|
action.checklist = checklist;
|
|
@@ -122,13 +123,13 @@ async function taskReplay(ctx, envelopeRaw, flags, dryRun) {
|
|
|
122
123
|
throw new CliError("usage", `--envelope is not valid JSON: ${error instanceof Error ? error.message : String(error)}`);
|
|
123
124
|
}
|
|
124
125
|
const envelope = assertTaskEnvelope(parsed);
|
|
126
|
+
// A captured envelope with no concrete human:<id> in allowed_resolvers is still resolvable by the
|
|
127
|
+
// account owner (issue #366) — the Hub always authorizes the account owner (a non-owner human is
|
|
128
|
+
// fail-closed: it may resolve only if explicitly listed, so an omitted list is owner-only), so this
|
|
129
|
+
// is no longer a submit-blocking dead-end. Note it (an all-wildcard/agent narrowing is unusual) but proceed.
|
|
125
130
|
if (!hasConcreteHumanResolver(replayResolvers(envelope))) {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
"never match): the resolve route is human-only, so it could never be marked done (inbox Done/Dismiss → " +
|
|
129
|
-
"403) and would sit open forever. Capture the envelope with a concrete human resolver. (Use --dry-run to preview anyway.)");
|
|
130
|
-
}
|
|
131
|
-
ctx.io.err("⚠ --envelope task has no concrete human:<id> resolver: this previewed replay would be UNRESOLVABLE.");
|
|
131
|
+
ctx.io.err("note: --envelope task lists no concrete human:<id> in action.allowed_resolvers; it will be resolvable " +
|
|
132
|
+
"by the account owner (the resolve route is human-only).");
|
|
132
133
|
}
|
|
133
134
|
if (dryRun) {
|
|
134
135
|
printDryRunEnvelope(ctx, "task.submit", envelope);
|
|
@@ -175,7 +176,7 @@ function resolveCallback(flags) {
|
|
|
175
176
|
}
|
|
176
177
|
return { mode: "pull" };
|
|
177
178
|
}
|
|
178
|
-
function resolveResolvers(flags,
|
|
179
|
+
function resolveResolvers(flags, ctx) {
|
|
179
180
|
const raw = Array.isArray(flags.resolver) ? flags.resolver.filter((r) => typeof r === "string") : [];
|
|
180
181
|
const resolvers = [];
|
|
181
182
|
for (const r of raw) {
|
|
@@ -186,19 +187,15 @@ function resolveResolvers(flags, dryRun, ctx) {
|
|
|
186
187
|
}
|
|
187
188
|
resolvers.push(r);
|
|
188
189
|
}
|
|
189
|
-
//
|
|
190
|
-
//
|
|
191
|
-
//
|
|
192
|
-
//
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
throw new CliError("usage", `a task needs at least one --resolver human:<id>: ${detail}, and the resolve route is human-only, so ` +
|
|
199
|
-
"the task could never be marked done. (Use --dry-run to preview the envelope without one.)");
|
|
200
|
-
}
|
|
201
|
-
ctx.io.err("⚠ no --resolver human:<id> given: this previewed task would be UNRESOLVABLE (resolve is human-only).");
|
|
190
|
+
// No --resolver is fine (issue #366): with no allowed_resolvers the Hub lets the account OWNER mark
|
|
191
|
+
// the task done — the agent needn't (and can't reliably) hand-type the account's canonical human id.
|
|
192
|
+
// When you DO pass --resolver, it is a fully fail-closed narrowing: a non-owner human may resolve only
|
|
193
|
+
// if explicitly listed, an omitted/empty list is owner-only (not "any account human"), and the account
|
|
194
|
+
// owner always may regardless of the list. Only a task whose ONLY resolvers are non-human is a real
|
|
195
|
+
// dead-end (the resolve route is human-only), so keep just that nudge.
|
|
196
|
+
if (resolvers.length > 0 && !hasHumanResolver(resolvers)) {
|
|
197
|
+
ctx.io.err(`⚠ every --resolver given (${resolvers.join(", ")}) is non-human (agent:/system:); the resolve route is ` +
|
|
198
|
+
"human-only, so this task can only be marked done by the account owner. Omit --resolver or add a human:<id>.");
|
|
202
199
|
}
|
|
203
200
|
return resolvers;
|
|
204
201
|
}
|