things-api 0.19.0 → 0.19.2
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 +3 -1
- package/deputy/prebuilt/Things API Helper.app/Contents/CodeResources +0 -0
- package/deputy/prebuilt/Things API Helper.app/Contents/Helpers/things-reader.app/Contents/MacOS/things-reader +0 -0
- package/deputy/prebuilt/Things API Helper.app/Contents/MacOS/things-deputy +0 -0
- package/dist/audit/schema.d.ts +19 -2
- package/dist/audit/schema.js.map +1 -1
- package/dist/capability.d.ts +166 -4
- package/dist/capability.js +303 -13
- package/dist/capability.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +13 -1
- package/dist/cli/commands/doctor.js +52 -22
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/helpers.js +14 -3
- package/dist/cli/commands/helpers.js.map +1 -1
- package/dist/cli/commands/mcp.js +8 -0
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/repeat-flags.js +34 -2
- package/dist/cli/commands/repeat-flags.js.map +1 -1
- package/dist/cli/commands/setup.js +16 -3
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/ui-state.d.ts +11 -0
- package/dist/cli/commands/ui-state.js +27 -0
- package/dist/cli/commands/ui-state.js.map +1 -0
- package/dist/cli/commands/writes.js +102 -67
- package/dist/cli/commands/writes.js.map +1 -1
- package/dist/cli/help.js +2 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/interrupt.d.ts +54 -6
- package/dist/cli/interrupt.js +78 -12
- package/dist/cli/interrupt.js.map +1 -1
- package/dist/cli/main.js +10 -5
- package/dist/cli/main.js.map +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/contracts.d.ts +4 -4
- package/dist/contracts.js +1 -1
- package/dist/contracts.js.map +1 -1
- package/dist/deputy/install.d.ts +15 -1
- package/dist/deputy/install.js +46 -6
- package/dist/deputy/install.js.map +1 -1
- package/dist/deputy/osa.d.ts +42 -2
- package/dist/deputy/osa.js +79 -5
- package/dist/deputy/osa.js.map +1 -1
- package/dist/deputy/routing.d.ts +34 -0
- package/dist/deputy/routing.js +95 -0
- package/dist/deputy/routing.js.map +1 -1
- package/dist/deputy/wake.d.ts +61 -0
- package/dist/deputy/wake.js +149 -0
- package/dist/deputy/wake.js.map +1 -0
- package/dist/diagnose.d.ts +6 -4
- package/dist/diagnose.js +20 -4
- package/dist/diagnose.js.map +1 -1
- package/dist/direct-setup.d.ts +31 -5
- package/dist/direct-setup.js +200 -26
- package/dist/direct-setup.js.map +1 -1
- package/dist/host-access.d.ts +12 -0
- package/dist/host-access.js +12 -0
- package/dist/host-access.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.js +23 -9
- package/dist/mcp/server.js.map +1 -1
- package/dist/op-result.js +8 -1
- package/dist/op-result.js.map +1 -1
- package/dist/session-grant.js +16 -1
- package/dist/session-grant.js.map +1 -1
- package/dist/surface-copy.d.ts +11 -3
- package/dist/surface-copy.js +11 -3
- package/dist/surface-copy.js.map +1 -1
- package/dist/ui-state.d.ts +46 -0
- package/dist/ui-state.js +82 -0
- package/dist/ui-state.js.map +1 -0
- package/dist/wizard.js +8 -1
- package/dist/wizard.js.map +1 -1
- package/dist/write/accessibility-probe.js +4 -1
- package/dist/write/accessibility-probe.js.map +1 -1
- package/dist/write/automation-probe.js +7 -1
- package/dist/write/automation-probe.js.map +1 -1
- package/dist/write/availability.d.ts +0 -15
- package/dist/write/availability.js +7 -62
- package/dist/write/availability.js.map +1 -1
- package/dist/write/batch.js +17 -6
- package/dist/write/batch.js.map +1 -1
- package/dist/write/commands.d.ts +10 -6
- package/dist/write/commands.js +120 -31
- package/dist/write/commands.js.map +1 -1
- package/dist/write/failure-hints.d.ts +36 -7
- package/dist/write/failure-hints.js +33 -14
- package/dist/write/failure-hints.js.map +1 -1
- package/dist/write/field-limits.d.ts +100 -0
- package/dist/write/field-limits.js +144 -0
- package/dist/write/field-limits.js.map +1 -0
- package/dist/write/guards.js +3 -2
- package/dist/write/guards.js.map +1 -1
- package/dist/write/move.js +9 -12
- package/dist/write/move.js.map +1 -1
- package/dist/write/operations.d.ts +15 -8
- package/dist/write/operations.js +9 -0
- package/dist/write/operations.js.map +1 -1
- package/dist/write/opid.d.ts +67 -23
- package/dist/write/opid.js +141 -19
- package/dist/write/opid.js.map +1 -1
- package/dist/write/param-schema.d.ts +17 -44
- package/dist/write/param-schema.js +74 -7
- package/dist/write/param-schema.js.map +1 -1
- package/dist/write/pipeline.d.ts +38 -7
- package/dist/write/pipeline.js +134 -18
- package/dist/write/pipeline.js.map +1 -1
- package/dist/write/pre-state.d.ts +30 -16
- package/dist/write/pre-state.js +88 -20
- package/dist/write/pre-state.js.map +1 -1
- package/dist/write/promote-clone.d.ts +26 -0
- package/dist/write/promote-clone.js +333 -41
- package/dist/write/promote-clone.js.map +1 -1
- package/dist/write/repeat-collateral.d.ts +31 -0
- package/dist/write/repeat-collateral.js +153 -0
- package/dist/write/repeat-collateral.js.map +1 -0
- package/dist/write/resolution-timestamps.js +25 -2
- package/dist/write/resolution-timestamps.js.map +1 -1
- package/dist/write/template-mutation.js +163 -16
- package/dist/write/template-mutation.js.map +1 -1
- package/dist/write/vectors/applescript.js +3 -10
- package/dist/write/vectors/applescript.js.map +1 -1
- package/dist/write/vectors/simulator.js +8 -2
- package/dist/write/vectors/simulator.js.map +1 -1
- package/dist/write/vectors/types.d.ts +236 -4
- package/dist/write/vectors/ui-certification.js +63 -13
- package/dist/write/vectors/ui-certification.js.map +1 -1
- package/dist/write/vectors/ui-chord.d.ts +144 -0
- package/dist/write/vectors/ui-chord.js +428 -0
- package/dist/write/vectors/ui-chord.js.map +1 -0
- package/dist/write/vectors/ui-drag.d.ts +8 -4
- package/dist/write/vectors/ui-drag.js +2 -0
- package/dist/write/vectors/ui-drag.js.map +1 -1
- package/dist/write/vectors/ui-recipes.d.ts +51 -3
- package/dist/write/vectors/ui-recipes.js +452 -44
- package/dist/write/vectors/ui-recipes.js.map +1 -1
- package/dist/write/vectors/ui-state.d.ts +157 -0
- package/dist/write/vectors/ui-state.js +237 -0
- package/dist/write/vectors/ui-state.js.map +1 -0
- package/dist/write/vectors/ui.d.ts +386 -13
- package/dist/write/vectors/ui.js +1543 -124
- package/dist/write/vectors/ui.js.map +1 -1
- package/dist/write/vectors/url-scheme.js +3 -0
- package/dist/write/vectors/url-scheme.js.map +1 -1
- package/dist/write/verify/delta.d.ts +41 -0
- package/dist/write/verify/delta.js +36 -2
- package/dist/write/verify/delta.js.map +1 -1
- package/dist/write/verify/poller.d.ts +4 -1
- package/dist/write/verify/poller.js +14 -0
- package/dist/write/verify/poller.js.map +1 -1
- package/package.json +1 -1
- package/schema/envelope.schema.json +2 -1
- package/skills/things-cli/SKILL.md +2 -2
package/dist/deputy/osa.d.ts
CHANGED
|
@@ -4,12 +4,46 @@ export interface OsaExecResult {
|
|
|
4
4
|
stdout: string;
|
|
5
5
|
stderr: string;
|
|
6
6
|
timedOut?: boolean;
|
|
7
|
+
/** True when the seam refused rather than running anything (see REFUSAL). */
|
|
8
|
+
refused?: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Whether this call may fall back to running osascript under the HOST process
|
|
12
|
+
* when the deputy is expected but not carrying traffic:
|
|
13
|
+
*
|
|
14
|
+
* - `"refuse"` (default) — every operational call. A different identity
|
|
15
|
+
* mid-operation is never an acceptable substitute for the one the machine
|
|
16
|
+
* was set up to use.
|
|
17
|
+
* - `"permitted"` — the setup ceremony's consent probes ONLY. Their question
|
|
18
|
+
* is what the calling identity itself holds, so answering it from the host
|
|
19
|
+
* is the correct behavior, and refusing would blind the very diagnostic
|
|
20
|
+
* someone runs when the deputy is down.
|
|
21
|
+
*/
|
|
22
|
+
export type HostDirectPolicy = "refuse" | "permitted";
|
|
23
|
+
/** The exit code a refusal reports — distinct from any osascript status. */
|
|
24
|
+
export declare const OSA_REFUSED_EXIT_CODE = 126;
|
|
25
|
+
/**
|
|
26
|
+
* The refusal copy: what is wrong (the deputy is not live/healthy), what will
|
|
27
|
+
* NOT happen instead (a silent identity switch), and the one command that
|
|
28
|
+
* inspects it.
|
|
29
|
+
*/
|
|
30
|
+
export declare function osaRoutingRefusalMessage(reason: string | null): string;
|
|
31
|
+
/** The error an osaExecSync refusal throws — shaped so stderr-classifying callers still read the message. */
|
|
32
|
+
export declare class OsaRoutingRefusal extends Error {
|
|
33
|
+
readonly status = 126;
|
|
34
|
+
readonly stdout = "";
|
|
35
|
+
readonly stderr: string;
|
|
36
|
+
readonly killed = false;
|
|
37
|
+
readonly signal: null;
|
|
38
|
+
readonly refused = true;
|
|
39
|
+
constructor(message: string);
|
|
7
40
|
}
|
|
8
41
|
/** Async osascript for vector dispatch and ui steps (never blocks the event loop). */
|
|
9
42
|
export declare function osaExec(script: string, options: {
|
|
10
43
|
lang?: OsaLang;
|
|
11
44
|
timeoutMs: number;
|
|
12
|
-
|
|
45
|
+
hostDirect?: HostDirectPolicy;
|
|
46
|
+
}, env?: NodeJS.ProcessEnv): Promise<OsaExecResult>;
|
|
13
47
|
/**
|
|
14
48
|
* Sync osascript for the consent probes. Returns stdout on success; throws an
|
|
15
49
|
* execFileSync-SHAPED error otherwise (status/stderr/killed/signal), so the
|
|
@@ -17,5 +51,11 @@ export declare function osaExec(script: string, options: {
|
|
|
17
51
|
* identically on both paths. In deputy mode the classification is answered
|
|
18
52
|
* about the DEPUTY's grants — exactly the right question, since it is the
|
|
19
53
|
* deputy that will send every AppleEvent.
|
|
54
|
+
*
|
|
55
|
+
* Its two callers are ceremony probes and pass `hostDirect: "permitted"`; any
|
|
56
|
+
* future caller inherits the safe default and refuses instead of switching
|
|
57
|
+
* identity mid-flight.
|
|
20
58
|
*/
|
|
21
|
-
export declare function osaExecSync(script: string, timeoutMs: number
|
|
59
|
+
export declare function osaExecSync(script: string, timeoutMs: number, options?: {
|
|
60
|
+
hostDirect?: HostDirectPolicy;
|
|
61
|
+
}, env?: NodeJS.ProcessEnv): string;
|
package/dist/deputy/osa.js
CHANGED
|
@@ -5,12 +5,62 @@
|
|
|
5
5
|
* (execFile/execFileSync, byte-identical to the pre-deputy behavior)
|
|
6
6
|
* otherwise. `open`-based primitives (URL scheme, reveal) are consent-free by
|
|
7
7
|
* design and never route.
|
|
8
|
+
*
|
|
9
|
+
* NO SILENT HOST FALLBACK (issue #620, permissions doctrine Article I). The
|
|
10
|
+
* "otherwise" above used to be unconditional, and that is a defect with a
|
|
11
|
+
* measured failure mode: when a machine EXPECTS the deputy (installed under
|
|
12
|
+
* `auto`, or `helpers-enabled true`) and routing is not active — the deputy
|
|
13
|
+
* stopped, its handshake failed, its onboarding could not be proven — the
|
|
14
|
+
* osascript quietly ran under the HOST process's identity instead. The host
|
|
15
|
+
* holds a DIFFERENT set of grants, so a drive could get its Accessibility
|
|
16
|
+
* clicks through and then die on the first keystroke with System Events error
|
|
17
|
+
* 1002 ("osascript is not allowed to send keystrokes"), half-way through a
|
|
18
|
+
* dialog, with the app reporting healthy routing. The read side already
|
|
19
|
+
* forbids exactly this (`helpersExpected` + the reader's no-fallback rule);
|
|
20
|
+
* the automation side now matches: a deputy that is expected but not live
|
|
21
|
+
* makes the call REFUSE, naming the helper's health and its remedy.
|
|
22
|
+
*
|
|
23
|
+
* The one legitimate exception is the CONSENT PROBE inside a setup ceremony,
|
|
24
|
+
* whose entire question is "what does THIS identity hold?" — it passes
|
|
25
|
+
* `hostDirect: "permitted"` explicitly. Machines with no deputy installed
|
|
26
|
+
* (`auto`, nothing there) and machines with the helpers switched off keep the
|
|
27
|
+
* direct path byte-identically, as do the lab escapes, which run in clones
|
|
28
|
+
* where nothing is installed.
|
|
8
29
|
*/
|
|
9
30
|
import { execFile, execFileSync } from "node:child_process";
|
|
10
31
|
import {} from "./protocol.js";
|
|
11
|
-
import { deputyAsyncRequest, deputyRouting, deputySyncRequest } from "./routing.js";
|
|
32
|
+
import { deputyAsyncRequest, deputyExpected, deputyRouting, deputySyncRequest } from "./routing.js";
|
|
12
33
|
/** Deputy-side kill fires at timeoutMs; the client deadline adds grace so the deputy's honest answer wins. */
|
|
13
34
|
const CLIENT_GRACE_MS = 5000;
|
|
35
|
+
/** The exit code a refusal reports — distinct from any osascript status. */
|
|
36
|
+
export const OSA_REFUSED_EXIT_CODE = 126;
|
|
37
|
+
/**
|
|
38
|
+
* The refusal copy: what is wrong (the deputy is not live/healthy), what will
|
|
39
|
+
* NOT happen instead (a silent identity switch), and the one command that
|
|
40
|
+
* inspects it.
|
|
41
|
+
*/
|
|
42
|
+
export function osaRoutingRefusalMessage(reason) {
|
|
43
|
+
return ("the helpers are set up on this Mac but the deputy is not carrying app automation right now " +
|
|
44
|
+
`(${reason ?? "routing is not active"}) — automation needs a live, healthy deputy, and this ` +
|
|
45
|
+
"command will not silently run it under this terminal's own identity instead (a different " +
|
|
46
|
+
"identity holds different macOS permissions, which is how a half-finished drive happens). " +
|
|
47
|
+
"Check the helper's health with `things helpers status`, restart it with " +
|
|
48
|
+
"`things helpers restart` if it has stopped, then run the same command again.");
|
|
49
|
+
}
|
|
50
|
+
/** The error an osaExecSync refusal throws — shaped so stderr-classifying callers still read the message. */
|
|
51
|
+
export class OsaRoutingRefusal extends Error {
|
|
52
|
+
status = OSA_REFUSED_EXIT_CODE;
|
|
53
|
+
stdout = "";
|
|
54
|
+
stderr;
|
|
55
|
+
killed = false;
|
|
56
|
+
signal = null;
|
|
57
|
+
refused = true;
|
|
58
|
+
constructor(message) {
|
|
59
|
+
super(message);
|
|
60
|
+
this.name = "OsaRoutingRefusal";
|
|
61
|
+
this.stderr = message;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
14
64
|
function osaArgs(script, lang) {
|
|
15
65
|
return lang === "javascript" ? ["-l", "JavaScript", "-e", script] : ["-e", script];
|
|
16
66
|
}
|
|
@@ -27,13 +77,29 @@ function fromDeputy(res) {
|
|
|
27
77
|
...(r.timedOut === true && { timedOut: true }),
|
|
28
78
|
};
|
|
29
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* Is the host path allowed for this call? Only when the machine does not expect
|
|
82
|
+
* a deputy at all, or the caller is a ceremony probe that explicitly opted in.
|
|
83
|
+
*/
|
|
84
|
+
function hostPathAllowed(policy, env) {
|
|
85
|
+
return policy === "permitted" || !deputyExpected(env);
|
|
86
|
+
}
|
|
30
87
|
/** Async osascript for vector dispatch and ui steps (never blocks the event loop). */
|
|
31
|
-
export async function osaExec(script, options) {
|
|
88
|
+
export async function osaExec(script, options, env = process.env) {
|
|
32
89
|
const lang = options.lang ?? "applescript";
|
|
33
|
-
|
|
90
|
+
const routing = deputyRouting(env);
|
|
91
|
+
if (routing.active) {
|
|
34
92
|
const res = await deputyAsyncRequest({ verb: "osascript", script, lang, timeoutMs: options.timeoutMs }, options.timeoutMs + CLIENT_GRACE_MS);
|
|
35
93
|
return fromDeputy(res);
|
|
36
94
|
}
|
|
95
|
+
if (!hostPathAllowed(options.hostDirect ?? "refuse", env)) {
|
|
96
|
+
return {
|
|
97
|
+
exitCode: OSA_REFUSED_EXIT_CODE,
|
|
98
|
+
stdout: "",
|
|
99
|
+
stderr: osaRoutingRefusalMessage(routing.reason),
|
|
100
|
+
refused: true,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
37
103
|
return new Promise((resolve) => {
|
|
38
104
|
execFile("osascript", osaArgs(script, lang), { timeout: options.timeoutMs }, (err, stdout, stderr) => {
|
|
39
105
|
const timedOut = err !== null && err.killed === true;
|
|
@@ -53,9 +119,17 @@ export async function osaExec(script, options) {
|
|
|
53
119
|
* identically on both paths. In deputy mode the classification is answered
|
|
54
120
|
* about the DEPUTY's grants — exactly the right question, since it is the
|
|
55
121
|
* deputy that will send every AppleEvent.
|
|
122
|
+
*
|
|
123
|
+
* Its two callers are ceremony probes and pass `hostDirect: "permitted"`; any
|
|
124
|
+
* future caller inherits the safe default and refuses instead of switching
|
|
125
|
+
* identity mid-flight.
|
|
56
126
|
*/
|
|
57
|
-
export function osaExecSync(script, timeoutMs) {
|
|
58
|
-
|
|
127
|
+
export function osaExecSync(script, timeoutMs, options = {}, env = process.env) {
|
|
128
|
+
const routing = deputyRouting(env);
|
|
129
|
+
if (!routing.active) {
|
|
130
|
+
if (!hostPathAllowed(options.hostDirect ?? "refuse", env)) {
|
|
131
|
+
throw new OsaRoutingRefusal(osaRoutingRefusalMessage(routing.reason));
|
|
132
|
+
}
|
|
59
133
|
return execFileSync("osascript", ["-e", script], { encoding: "utf8", timeout: timeoutMs });
|
|
60
134
|
}
|
|
61
135
|
const res = deputySyncRequest({ verb: "osascript", script, lang: "applescript", timeoutMs }, timeoutMs + CLIENT_GRACE_MS);
|
package/dist/deputy/osa.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"osa.js","sourceRoot":"","sources":["../../src/deputy/osa.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"osa.js","sourceRoot":"","sources":["../../src/deputy/osa.ts"],"names":[],"mappings":"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"}
|
package/dist/deputy/routing.d.ts
CHANGED
|
@@ -12,6 +12,22 @@ export interface DeputyRouting {
|
|
|
12
12
|
export declare function resetDeputyRoutingForTests(): void;
|
|
13
13
|
/** The per-process routing decision (activated lazily on first ask). */
|
|
14
14
|
export declare function deputyRouting(env?: NodeJS.ProcessEnv): DeputyRouting;
|
|
15
|
+
/**
|
|
16
|
+
* Finish the onboarding gate that a dormant Things deferred (#617).
|
|
17
|
+
*
|
|
18
|
+
* Called by the write gate with the standing it read AFTER waking the target,
|
|
19
|
+
* which is the first moment the grant is knowable. `granted` proves the deputy
|
|
20
|
+
* and the memoized handshake is corrected in place, so every later verdict in
|
|
21
|
+
* this process reads the truth without waking anything again. Anything else is
|
|
22
|
+
* the state the activation gate would have refused on: the transports are
|
|
23
|
+
* closed, the deferred notice is printed, and the process runs direct — because
|
|
24
|
+
* an event routed to a deputy that lacks the grant just relocates the consent
|
|
25
|
+
* dialog to a helper nobody is watching.
|
|
26
|
+
*
|
|
27
|
+
* A no-op unless a deferral is actually outstanding, so `true` mode (which
|
|
28
|
+
* never defers) and every non-deputy machine are untouched.
|
|
29
|
+
*/
|
|
30
|
+
export declare function settleDeputyAutomation(standing: string | undefined): void;
|
|
15
31
|
/** The reader transport's state (activated lazily; test seam via reset). */
|
|
16
32
|
export declare function readerRouting(env?: NodeJS.ProcessEnv): {
|
|
17
33
|
active: boolean;
|
|
@@ -51,6 +67,24 @@ export declare function deputyFilesActive(env?: NodeJS.ProcessEnv): boolean;
|
|
|
51
67
|
* them, so it falls through to the direct grants as it always has.
|
|
52
68
|
*/
|
|
53
69
|
export declare function helpersExpected(env?: NodeJS.ProcessEnv): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Does this machine EXPECT the DEPUTY to carry its app automation?
|
|
72
|
+
*
|
|
73
|
+
* The osascript twin of {@link helpersExpected}, and deliberately a SEPARATE
|
|
74
|
+
* question: each half of the pair is gated on its OWN requisite (reads on the
|
|
75
|
+
* reader's bookmark grant, automation on the deputy's app-control grant), so a
|
|
76
|
+
* machine that installed one half is not told it expects the other. `true` is
|
|
77
|
+
* an explicit instruction; under `auto` the installed deputy bundle (or its
|
|
78
|
+
* live rendezvous) is the intent signal.
|
|
79
|
+
*
|
|
80
|
+
* The no-fallback rule hangs on this (permissions doctrine, Article I; issue
|
|
81
|
+
* #620): when the deputy is expected but is not carrying traffic, an osascript
|
|
82
|
+
* REFUSES rather than quietly re-running under the host process's identity —
|
|
83
|
+
* which is a different identity, with different grants, mid-operation. A
|
|
84
|
+
* machine with no deputy installed under `auto` is an ordinary direct machine
|
|
85
|
+
* and is NOT expecting one, so it runs direct exactly as it always has.
|
|
86
|
+
*/
|
|
87
|
+
export declare function deputyExpected(env?: NodeJS.ProcessEnv): boolean;
|
|
54
88
|
/** Why the reader is not carrying reads (null when it is). */
|
|
55
89
|
export declare function readerUnavailableReason(env?: NodeJS.ProcessEnv): string | null;
|
|
56
90
|
/** Blocking FILE-verb round-trip via the granted reader. */
|
package/dist/deputy/routing.js
CHANGED
|
@@ -31,6 +31,13 @@
|
|
|
31
31
|
* the half it earned. Accessibility and System Events are NOT requisite: the
|
|
32
32
|
* UI vector is separately double-gated and refuses on its own.
|
|
33
33
|
*
|
|
34
|
+
* The one answer that gate cannot judge is `not-running`: with Things closed,
|
|
35
|
+
* macOS has no determination to give, so the value describes the app's PROCESS
|
|
36
|
+
* and not its grant (#617). Deactivating on it would drop a fully onboarded
|
|
37
|
+
* machine onto the direct path every time its owner quit the app. That case is
|
|
38
|
+
* DEFERRED instead — active, `automationUnproven` — and settled by the write
|
|
39
|
+
* gate, which is the one caller allowed to start the target (./wake.ts).
|
|
40
|
+
*
|
|
34
41
|
* Fallback is decided at ACTIVATION, never mid-operation: if a helper is
|
|
35
42
|
* expected but unreachable (or speaks a different protocol), the whole process
|
|
36
43
|
* runs direct with one stderr notice — a half-routed operation is worse than
|
|
@@ -179,6 +186,28 @@ function activate(env) {
|
|
|
179
186
|
// PROVE the grant before it carries traffic; `true` is an explicit
|
|
180
187
|
// instruction to route regardless and stays loud on failure.
|
|
181
188
|
const automationThings = helloResult.automation?.things;
|
|
189
|
+
if (mode === "auto" && automationThings === "not-running") {
|
|
190
|
+
// LIVENESS, NOT AUTHORIZATION (#617). A closed Things is what makes the
|
|
191
|
+
// deputy's ask-false determination answer procNotFound, so `not-running`
|
|
192
|
+
// says nothing about the grant — and a machine whose owner simply quit the
|
|
193
|
+
// app would be deactivated here, printed a notice claiming a missing
|
|
194
|
+
// permission, and dropped onto the direct path the helpers exist to end.
|
|
195
|
+
// The decision is DEFERRED instead: the deputy stays active but UNPROVEN,
|
|
196
|
+
// and the write gate settles it (wake the target, re-read the standing,
|
|
197
|
+
// then {@link settleDeputyAutomation}) before anything is dispatched.
|
|
198
|
+
// Nothing is launched from here — activation happens on every invocation,
|
|
199
|
+
// including pure reads and `doctor`, and none of those may start the user's
|
|
200
|
+
// app as a side effect.
|
|
201
|
+
return {
|
|
202
|
+
active: true,
|
|
203
|
+
reason: null,
|
|
204
|
+
hello: helloResult,
|
|
205
|
+
token,
|
|
206
|
+
bridge,
|
|
207
|
+
client: new DeputyAsyncClient(socketPath),
|
|
208
|
+
automationUnproven: true,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
182
211
|
if (mode === "auto" && automationThings !== "granted") {
|
|
183
212
|
bridge.close();
|
|
184
213
|
// Absent fields = helpers predating the TCC handshake. Not provably
|
|
@@ -205,6 +234,47 @@ export function deputyRouting(env = process.env) {
|
|
|
205
234
|
state ??= activate(env);
|
|
206
235
|
return state;
|
|
207
236
|
}
|
|
237
|
+
/**
|
|
238
|
+
* Finish the onboarding gate that a dormant Things deferred (#617).
|
|
239
|
+
*
|
|
240
|
+
* Called by the write gate with the standing it read AFTER waking the target,
|
|
241
|
+
* which is the first moment the grant is knowable. `granted` proves the deputy
|
|
242
|
+
* and the memoized handshake is corrected in place, so every later verdict in
|
|
243
|
+
* this process reads the truth without waking anything again. Anything else is
|
|
244
|
+
* the state the activation gate would have refused on: the transports are
|
|
245
|
+
* closed, the deferred notice is printed, and the process runs direct — because
|
|
246
|
+
* an event routed to a deputy that lacks the grant just relocates the consent
|
|
247
|
+
* dialog to a helper nobody is watching.
|
|
248
|
+
*
|
|
249
|
+
* A no-op unless a deferral is actually outstanding, so `true` mode (which
|
|
250
|
+
* never defers) and every non-deputy machine are untouched.
|
|
251
|
+
*/
|
|
252
|
+
export function settleDeputyAutomation(standing) {
|
|
253
|
+
const current = state;
|
|
254
|
+
if (current === null || !current.active || current.automationUnproven !== true)
|
|
255
|
+
return;
|
|
256
|
+
if (standing === "granted") {
|
|
257
|
+
state = {
|
|
258
|
+
...current,
|
|
259
|
+
automationUnproven: false,
|
|
260
|
+
hello: {
|
|
261
|
+
...current.hello,
|
|
262
|
+
...(current.hello.automation !== undefined && {
|
|
263
|
+
automation: { ...current.hello.automation, things: "granted" },
|
|
264
|
+
}),
|
|
265
|
+
},
|
|
266
|
+
};
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
current.bridge.close();
|
|
270
|
+
current.client.close();
|
|
271
|
+
notice(true, `the helpers have no app-control permission for Things (${standing ?? "unknown"}), so app automation runs DIRECT — \`things helpers setup\` settles it in one sitting.`);
|
|
272
|
+
state = {
|
|
273
|
+
active: false,
|
|
274
|
+
reason: `onboarding incomplete (automation → Things: ${standing ?? "unknown"})`,
|
|
275
|
+
hello: null,
|
|
276
|
+
};
|
|
277
|
+
}
|
|
208
278
|
function activeState(env) {
|
|
209
279
|
const routing = deputyRouting(env);
|
|
210
280
|
return routing.active ? state : null;
|
|
@@ -339,6 +409,31 @@ export function helpersExpected(env = process.env) {
|
|
|
339
409
|
return true;
|
|
340
410
|
return rendezvousExists(readerSocketPath(env)) && rendezvousExists(readerTokenPath(env));
|
|
341
411
|
}
|
|
412
|
+
/**
|
|
413
|
+
* Does this machine EXPECT the DEPUTY to carry its app automation?
|
|
414
|
+
*
|
|
415
|
+
* The osascript twin of {@link helpersExpected}, and deliberately a SEPARATE
|
|
416
|
+
* question: each half of the pair is gated on its OWN requisite (reads on the
|
|
417
|
+
* reader's bookmark grant, automation on the deputy's app-control grant), so a
|
|
418
|
+
* machine that installed one half is not told it expects the other. `true` is
|
|
419
|
+
* an explicit instruction; under `auto` the installed deputy bundle (or its
|
|
420
|
+
* live rendezvous) is the intent signal.
|
|
421
|
+
*
|
|
422
|
+
* The no-fallback rule hangs on this (permissions doctrine, Article I; issue
|
|
423
|
+
* #620): when the deputy is expected but is not carrying traffic, an osascript
|
|
424
|
+
* REFUSES rather than quietly re-running under the host process's identity —
|
|
425
|
+
* which is a different identity, with different grants, mid-operation. A
|
|
426
|
+
* machine with no deputy installed under `auto` is an ordinary direct machine
|
|
427
|
+
* and is NOT expecting one, so it runs direct exactly as it always has.
|
|
428
|
+
*/
|
|
429
|
+
export function deputyExpected(env = process.env) {
|
|
430
|
+
const mode = loadConfig(env).helpersMode;
|
|
431
|
+
if (mode === "false")
|
|
432
|
+
return false;
|
|
433
|
+
if (mode === "true")
|
|
434
|
+
return true;
|
|
435
|
+
return halfInstalled(deputyInstalledBinaryPath(env), deputySocketPath(env), deputyTokenPath(env));
|
|
436
|
+
}
|
|
342
437
|
/** Why the reader is not carrying reads (null when it is). */
|
|
343
438
|
export function readerUnavailableReason(env = process.env) {
|
|
344
439
|
if (deputyFilesActive(env))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../../src/deputy/routing.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../../src/deputy/routing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { AutomationPermission } from "./protocol.ts";
|
|
2
|
+
/** The GUI-driving target: the macOS component that reads and presses controls. */
|
|
3
|
+
export declare const SYSTEM_EVENTS_BUNDLE_ID = "com.apple.systemevents";
|
|
4
|
+
/** The Things application — the AppleScript vector's target. */
|
|
5
|
+
export declare const THINGS_BUNDLE_ID = "com.culturedcode.ThingsMac";
|
|
6
|
+
/**
|
|
7
|
+
* One Automation target, described the two ways this module needs it: the
|
|
8
|
+
* bundle id LaunchServices starts, and the `automation` field of the deputy's
|
|
9
|
+
* hello that carries its determination.
|
|
10
|
+
*/
|
|
11
|
+
export interface WakeTarget {
|
|
12
|
+
bundleId: string;
|
|
13
|
+
field: "systemEvents" | "things";
|
|
14
|
+
/** How long the target may take to come up before the wake is a failure. */
|
|
15
|
+
timeoutMs: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* System Events comes up in milliseconds — it is a headless agent with nothing
|
|
19
|
+
* to restore (SEWAKE1: `granted` on the FIRST ask after the launch, 10 ms).
|
|
20
|
+
*/
|
|
21
|
+
export declare const SYSTEM_EVENTS_TARGET: WakeTarget;
|
|
22
|
+
/**
|
|
23
|
+
* Things is a full document app that opens a window and its database, so it is
|
|
24
|
+
* given a longer bound than the agent. This wait only covers becoming
|
|
25
|
+
* ANSWERABLE to the determination; the pipeline separately waits for the app to
|
|
26
|
+
* be ready to land a write (src/write/pipeline.ts, the #486 startup window).
|
|
27
|
+
*/
|
|
28
|
+
export declare const THINGS_TARGET: WakeTarget;
|
|
29
|
+
export interface TargetWake {
|
|
30
|
+
/**
|
|
31
|
+
* The target's Automation standing once it is up. `not-running` (or
|
|
32
|
+
* undefined) means the wake did NOT take — a liveness failure, and the only
|
|
33
|
+
* state a caller may refuse on with liveness copy.
|
|
34
|
+
*/
|
|
35
|
+
standing: AutomationPermission | undefined;
|
|
36
|
+
/** One clause of provenance, for the refusal when the wake did not take. */
|
|
37
|
+
detail: string;
|
|
38
|
+
}
|
|
39
|
+
export interface WakeDeps {
|
|
40
|
+
/** Start the target in the background. Throws when the launch is refused. */
|
|
41
|
+
launch?: () => void;
|
|
42
|
+
/** Re-read the deputy's ask-false determination for the target. */
|
|
43
|
+
probe?: () => AutomationPermission | undefined;
|
|
44
|
+
sleep?: (ms: number) => void;
|
|
45
|
+
now?: () => number;
|
|
46
|
+
timeoutMs?: number;
|
|
47
|
+
intervalMs?: number;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Start a dormant Automation target, then report where its grant actually
|
|
51
|
+
* stands. Prompt-free by construction — see the module comment for why the
|
|
52
|
+
* launch must precede the determination.
|
|
53
|
+
*
|
|
54
|
+
* Call this only when the deputy has just reported `not-running`: on a live
|
|
55
|
+
* target the determination is already the truth and the launch buys nothing.
|
|
56
|
+
*/
|
|
57
|
+
export declare function wakeTarget(target: WakeTarget, env?: NodeJS.ProcessEnv, deps?: WakeDeps): TargetWake;
|
|
58
|
+
/** Wake the GUI-driving target (#610). */
|
|
59
|
+
export declare function wakeSystemEvents(env?: NodeJS.ProcessEnv, deps?: WakeDeps): TargetWake;
|
|
60
|
+
/** Wake the AppleScript vector's target — the user's own Things app (#617). */
|
|
61
|
+
export declare function wakeThings(env?: NodeJS.ProcessEnv, deps?: WakeDeps): TargetWake;
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Waking a dormant Automation target — LIVENESS before authorization.
|
|
3
|
+
*
|
|
4
|
+
* `AEDeterminePermissionToAutomateTarget(askUserIfNeeded: false)` cannot answer
|
|
5
|
+
* for a target that is not running: it returns procNotFound, which the deputy
|
|
6
|
+
* reports as `not-running` (deputy/src/tcc.swift). That value is a fact about
|
|
7
|
+
* the PROCESS, never a verdict on the grant, and reading it as one is what made
|
|
8
|
+
* a fully onboarded machine get steered back through onboarding (#610 for
|
|
9
|
+
* System Events, #617 for Things itself).
|
|
10
|
+
*
|
|
11
|
+
* Two targets, one mechanism:
|
|
12
|
+
*
|
|
13
|
+
* - **System Events** is an on-demand macOS agent the system reaps whenever it
|
|
14
|
+
* has been idle. Its dormancy is the DEFAULT state, not an edge case
|
|
15
|
+
* (SEWAKE1 measured it down on a freshly booted machine that had done
|
|
16
|
+
* nothing).
|
|
17
|
+
* - **Things** is the user's own app, closed whenever they are not using it.
|
|
18
|
+
*
|
|
19
|
+
* The resolution, and why the ORDER is not negotiable:
|
|
20
|
+
*
|
|
21
|
+
* 1. LAUNCH the target first, with a plain background LaunchServices dispatch
|
|
22
|
+
* (`open -g -b`). An app launch is not a TCC-gated act: it raises no consent
|
|
23
|
+
* dialog, on any grant state, ever.
|
|
24
|
+
* 2. Only THEN re-read the ask-false determination. Doing it the other way
|
|
25
|
+
* round — sending the target an Apple event to wake it — auto-launches it
|
|
26
|
+
* AND raises the consent dialog when no grant is on record, which is exactly
|
|
27
|
+
* the surprise the permissions doctrine forbids outside the two ceremonies
|
|
28
|
+
* (docs/design/permissions-doctrine.md, Article I). For Things the order
|
|
29
|
+
* buys a second thing measured independently: an Apple event to a CLOSED
|
|
30
|
+
* Things auto-launches it with FOCUS STEAL (tier 2, A40/A41), while
|
|
31
|
+
* `open -g` keeps the operation at tier 0/1 — so the wake is the pre-launch
|
|
32
|
+
* the AppleScript vector wants anyway.
|
|
33
|
+
*
|
|
34
|
+
* The wait is closed-loop: the determination is re-asked until it stops saying
|
|
35
|
+
* `not-running`, bounded, with no fixed sleep standing in for the answer. When
|
|
36
|
+
* the target never comes up the caller gets a LIVENESS verdict to refuse on —
|
|
37
|
+
* never a permission one.
|
|
38
|
+
*
|
|
39
|
+
* WHO MAY CALL THIS. A launch is a side effect, so it belongs to callers that
|
|
40
|
+
* are about to DRIVE the target (the write gate before a dispatch, the two
|
|
41
|
+
* setup ceremonies). A survey — `doctor`, the MCP startup bake — must never
|
|
42
|
+
* launch the user's app as a diagnostic side effect; it reports the liveness
|
|
43
|
+
* state instead (src/capability.ts).
|
|
44
|
+
*/
|
|
45
|
+
import { execFileSync } from "node:child_process";
|
|
46
|
+
import { deputySyncRequest } from "./routing.js";
|
|
47
|
+
/** The GUI-driving target: the macOS component that reads and presses controls. */
|
|
48
|
+
export const SYSTEM_EVENTS_BUNDLE_ID = "com.apple.systemevents";
|
|
49
|
+
/** The Things application — the AppleScript vector's target. */
|
|
50
|
+
export const THINGS_BUNDLE_ID = "com.culturedcode.ThingsMac";
|
|
51
|
+
/** How often the determination is re-asked while waiting. */
|
|
52
|
+
const WAKE_POLL_INTERVAL_MS = 50;
|
|
53
|
+
/** How long the launch itself may take before it counts as refused. */
|
|
54
|
+
const LAUNCH_TIMEOUT_MS = 10_000;
|
|
55
|
+
/**
|
|
56
|
+
* System Events comes up in milliseconds — it is a headless agent with nothing
|
|
57
|
+
* to restore (SEWAKE1: `granted` on the FIRST ask after the launch, 10 ms).
|
|
58
|
+
*/
|
|
59
|
+
export const SYSTEM_EVENTS_TARGET = {
|
|
60
|
+
bundleId: SYSTEM_EVENTS_BUNDLE_ID,
|
|
61
|
+
field: "systemEvents",
|
|
62
|
+
timeoutMs: 5_000,
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Things is a full document app that opens a window and its database, so it is
|
|
66
|
+
* given a longer bound than the agent. This wait only covers becoming
|
|
67
|
+
* ANSWERABLE to the determination; the pipeline separately waits for the app to
|
|
68
|
+
* be ready to land a write (src/write/pipeline.ts, the #486 startup window).
|
|
69
|
+
*/
|
|
70
|
+
export const THINGS_TARGET = {
|
|
71
|
+
bundleId: THINGS_BUNDLE_ID,
|
|
72
|
+
field: "things",
|
|
73
|
+
timeoutMs: 10_000,
|
|
74
|
+
};
|
|
75
|
+
function launchInBackground(bundleId) {
|
|
76
|
+
execFileSync("open", ["-g", "-b", bundleId], {
|
|
77
|
+
stdio: "ignore",
|
|
78
|
+
timeout: LAUNCH_TIMEOUT_MS,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* A FRESH determination off the deputy, not the handshake the routing layer
|
|
83
|
+
* memoized at activation — the whole point of the re-probe is that the world
|
|
84
|
+
* changed since then. A deputy that stops answering mid-wake reads as
|
|
85
|
+
* undefined, which keeps the loop waiting rather than manufacturing a verdict.
|
|
86
|
+
*/
|
|
87
|
+
function targetStanding(env, field) {
|
|
88
|
+
try {
|
|
89
|
+
const res = deputySyncRequest({ verb: "hello" }, 2000, env);
|
|
90
|
+
const automation = res["automation"];
|
|
91
|
+
return automation?.[field];
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function syncSleep(ms) {
|
|
98
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
|
|
99
|
+
}
|
|
100
|
+
/** True while the target is still down (or the determination is still unread). */
|
|
101
|
+
function stillDown(standing) {
|
|
102
|
+
return standing === undefined || standing === "not-running";
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Start a dormant Automation target, then report where its grant actually
|
|
106
|
+
* stands. Prompt-free by construction — see the module comment for why the
|
|
107
|
+
* launch must precede the determination.
|
|
108
|
+
*
|
|
109
|
+
* Call this only when the deputy has just reported `not-running`: on a live
|
|
110
|
+
* target the determination is already the truth and the launch buys nothing.
|
|
111
|
+
*/
|
|
112
|
+
export function wakeTarget(target, env = process.env, deps = {}) {
|
|
113
|
+
const probe = deps.probe ?? (() => targetStanding(env, target.field));
|
|
114
|
+
const sleep = deps.sleep ?? syncSleep;
|
|
115
|
+
const now = deps.now ?? Date.now;
|
|
116
|
+
const timeoutMs = deps.timeoutMs ?? target.timeoutMs;
|
|
117
|
+
const intervalMs = deps.intervalMs ?? WAKE_POLL_INTERVAL_MS;
|
|
118
|
+
try {
|
|
119
|
+
(deps.launch ?? (() => launchInBackground(target.bundleId)))();
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
return {
|
|
123
|
+
standing: "not-running",
|
|
124
|
+
detail: `it could not be started (${err instanceof Error ? err.message : String(err)})`,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
const deadline = now() + timeoutMs;
|
|
128
|
+
let standing = probe();
|
|
129
|
+
while (stillDown(standing) && now() < deadline) {
|
|
130
|
+
sleep(intervalMs);
|
|
131
|
+
standing = probe();
|
|
132
|
+
}
|
|
133
|
+
if (stillDown(standing)) {
|
|
134
|
+
return {
|
|
135
|
+
standing,
|
|
136
|
+
detail: `it did not come up within ${Math.round(timeoutMs / 1000)}s of being started`,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
return { standing, detail: "started on demand" };
|
|
140
|
+
}
|
|
141
|
+
/** Wake the GUI-driving target (#610). */
|
|
142
|
+
export function wakeSystemEvents(env = process.env, deps = {}) {
|
|
143
|
+
return wakeTarget(SYSTEM_EVENTS_TARGET, env, deps);
|
|
144
|
+
}
|
|
145
|
+
/** Wake the AppleScript vector's target — the user's own Things app (#617). */
|
|
146
|
+
export function wakeThings(env = process.env, deps = {}) {
|
|
147
|
+
return wakeTarget(THINGS_TARGET, env, deps);
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=wake.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wake.js","sourceRoot":"","sources":["../../src/deputy/wake.ts"],"names":[],"mappings":"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"}
|