things-api 0.9.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +57 -12
- package/dist/audit/log.js +56 -2
- package/dist/audit/log.js.map +1 -1
- package/dist/audit/schema.d.ts +26 -8
- package/dist/audit/schema.js +42 -1
- package/dist/audit/schema.js.map +1 -1
- package/dist/cli/clock.d.ts +8 -0
- package/dist/cli/clock.js +24 -0
- package/dist/cli/clock.js.map +1 -0
- package/dist/cli/commands/area.d.ts +26 -3
- package/dist/cli/commands/area.js +129 -75
- package/dist/cli/commands/area.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +1 -1
- package/dist/cli/commands/doctor.js +44 -5
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/install-skill.d.ts +45 -0
- package/dist/cli/commands/install-skill.js +207 -0
- package/dist/cli/commands/install-skill.js.map +1 -0
- package/dist/cli/commands/mcp.js +23 -4
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/project.d.ts +18 -1
- package/dist/cli/commands/project.js +74 -35
- package/dist/cli/commands/project.js.map +1 -1
- package/dist/cli/commands/reads.d.ts +15 -2
- package/dist/cli/commands/reads.js +459 -165
- package/dist/cli/commands/reads.js.map +1 -1
- package/dist/cli/commands/repeat-flags.d.ts +20 -0
- package/dist/cli/commands/repeat-flags.js +76 -0
- package/dist/cli/commands/repeat-flags.js.map +1 -0
- package/dist/cli/commands/setup.js +8 -4
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/show.js +53 -30
- package/dist/cli/commands/show.js.map +1 -1
- package/dist/cli/commands/todo.d.ts +1 -1
- package/dist/cli/commands/todo.js +20 -13
- package/dist/cli/commands/todo.js.map +1 -1
- package/dist/cli/commands/writes.js +388 -161
- package/dist/cli/commands/writes.js.map +1 -1
- package/dist/cli/did-you-mean.d.ts +1 -1
- package/dist/cli/excess-args.d.ts +15 -0
- package/dist/cli/excess-args.js +51 -0
- package/dist/cli/excess-args.js.map +1 -0
- package/dist/cli/glyphs.d.ts +55 -2
- package/dist/cli/glyphs.js +114 -21
- package/dist/cli/glyphs.js.map +1 -1
- package/dist/cli/help.d.ts +54 -0
- package/dist/cli/help.js +405 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/main.js +64 -26
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/move-hint.d.ts +45 -0
- package/dist/cli/move-hint.js +196 -0
- package/dist/cli/move-hint.js.map +1 -0
- package/dist/cli/period.d.ts +9 -8
- package/dist/cli/period.js +56 -30
- package/dist/cli/period.js.map +1 -1
- package/dist/cli/read-driver.d.ts +26 -19
- package/dist/cli/read-driver.js +77 -33
- package/dist/cli/read-driver.js.map +1 -1
- package/dist/cli/render.d.ts +92 -28
- package/dist/cli/render.js +333 -103
- package/dist/cli/render.js.map +1 -1
- package/dist/cli/resolve-invocation.d.ts +42 -4
- package/dist/cli/resolve-invocation.js +97 -14
- package/dist/cli/resolve-invocation.js.map +1 -1
- package/dist/cli/skill-check.d.ts +21 -0
- package/dist/cli/skill-check.js +82 -0
- package/dist/cli/skill-check.js.map +1 -0
- package/dist/cli/skill.d.ts +62 -0
- package/dist/cli/skill.js +142 -0
- package/dist/cli/skill.js.map +1 -0
- package/dist/cli/tag-filters.d.ts +63 -0
- package/dist/cli/tag-filters.js +59 -0
- package/dist/cli/tag-filters.js.map +1 -0
- package/dist/cli/verb-hint.d.ts +25 -0
- package/dist/cli/verb-hint.js +163 -0
- package/dist/cli/verb-hint.js.map +1 -0
- package/dist/cli/version.d.ts +4 -0
- package/dist/cli/version.js +18 -0
- package/dist/cli/version.js.map +1 -0
- package/dist/cli/width.d.ts +135 -0
- package/dist/cli/width.js +313 -0
- package/dist/cli/width.js.map +1 -0
- package/dist/client.d.ts +160 -24
- package/dist/client.js +132 -19
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +11 -0
- package/dist/config.js +3 -0
- package/dist/config.js.map +1 -1
- package/dist/contracts.d.ts +97 -17
- package/dist/contracts.js +44 -1
- package/dist/contracts.js.map +1 -1
- package/dist/db/fingerprint.d.ts +12 -0
- package/dist/db/fingerprint.js +15 -1
- package/dist/db/fingerprint.js.map +1 -1
- package/dist/db/locate.js +1 -1
- package/dist/db/locate.js.map +1 -1
- package/dist/diagnose.d.ts +63 -0
- package/dist/diagnose.js +38 -1
- package/dist/diagnose.js.map +1 -1
- package/dist/index.d.ts +36 -5
- package/dist/index.js +38 -2
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts +9 -1
- package/dist/mcp/server.js +1038 -436
- package/dist/mcp/server.js.map +1 -1
- package/dist/model/clock.d.ts +61 -0
- package/dist/model/clock.js +71 -0
- package/dist/model/clock.js.map +1 -0
- package/dist/model/dates.d.ts +26 -3
- package/dist/model/dates.js +84 -3
- package/dist/model/dates.js.map +1 -1
- package/dist/model/entities.d.ts +48 -10
- package/dist/model/entities.js.map +1 -1
- package/dist/model/mappers.d.ts +9 -2
- package/dist/model/mappers.js +32 -9
- package/dist/model/mappers.js.map +1 -1
- package/dist/model/serialize.d.ts +28 -0
- package/dist/model/serialize.js +80 -0
- package/dist/model/serialize.js.map +1 -0
- package/dist/model/when-sugar.d.ts +47 -0
- package/dist/model/when-sugar.js +45 -0
- package/dist/model/when-sugar.js.map +1 -0
- package/dist/read/area-view.d.ts +8 -1
- package/dist/read/area-view.js +55 -17
- package/dist/read/area-view.js.map +1 -1
- package/dist/read/detail.d.ts +1 -1
- package/dist/read/detail.js +11 -4
- package/dist/read/detail.js.map +1 -1
- package/dist/read/filter-contract.d.ts +117 -0
- package/dist/read/filter-contract.js +78 -0
- package/dist/read/filter-contract.js.map +1 -0
- package/dist/read/log-boundary.d.ts +1 -1
- package/dist/read/log-boundary.js +13 -3
- package/dist/read/log-boundary.js.map +1 -1
- package/dist/read/predicates.d.ts +30 -0
- package/dist/read/predicates.js +30 -0
- package/dist/read/predicates.js.map +1 -1
- package/dist/read/project-view.d.ts +12 -1
- package/dist/read/project-view.js +45 -12
- package/dist/read/project-view.js.map +1 -1
- package/dist/read/queries.d.ts +152 -7
- package/dist/read/queries.js +277 -36
- package/dist/read/queries.js.map +1 -1
- package/dist/read/sections.d.ts +51 -0
- package/dist/read/sections.js +37 -0
- package/dist/read/sections.js.map +1 -0
- package/dist/read/sidebar-order.js +2 -1
- package/dist/read/sidebar-order.js.map +1 -1
- package/dist/read/snapshot.d.ts +1 -1
- package/dist/read/snapshot.js +9 -2
- package/dist/read/snapshot.js.map +1 -1
- package/dist/read/tags.d.ts +27 -3
- package/dist/read/tags.js +83 -12
- package/dist/read/tags.js.map +1 -1
- package/dist/read/truncation.d.ts +71 -0
- package/dist/read/{pagination.js → truncation.js} +103 -94
- package/dist/read/truncation.js.map +1 -0
- package/dist/read/views.d.ts +147 -22
- package/dist/read/views.js +282 -80
- package/dist/read/views.js.map +1 -1
- package/dist/surface-copy.d.ts +19 -0
- package/dist/surface-copy.js +32 -0
- package/dist/surface-copy.js.map +1 -1
- package/dist/sync-health.d.ts +78 -0
- package/dist/sync-health.js +312 -0
- package/dist/sync-health.js.map +1 -0
- package/dist/write/accessibility-probe.d.ts +12 -0
- package/dist/write/accessibility-probe.js +71 -0
- package/dist/write/accessibility-probe.js.map +1 -0
- package/dist/write/automation-probe.d.ts +8 -1
- package/dist/write/automation-probe.js +16 -1
- package/dist/write/automation-probe.js.map +1 -1
- package/dist/write/batch.js +5 -2
- package/dist/write/batch.js.map +1 -1
- package/dist/write/capabilities.d.ts +8 -0
- package/dist/write/capabilities.js +13 -6
- package/dist/write/capabilities.js.map +1 -1
- package/dist/write/commands.d.ts +3 -1
- package/dist/write/commands.js +602 -49
- package/dist/write/commands.js.map +1 -1
- package/dist/write/edit-checklist.js +3 -2
- package/dist/write/edit-checklist.js.map +1 -1
- package/dist/write/guards.d.ts +2 -7
- package/dist/write/guards.js +87 -6
- package/dist/write/guards.js.map +1 -1
- package/dist/write/heading.js +2 -0
- package/dist/write/heading.js.map +1 -1
- package/dist/write/lock.d.ts +40 -2
- package/dist/write/lock.js +91 -14
- package/dist/write/lock.js.map +1 -1
- package/dist/write/make-repeating-project.d.ts +4 -0
- package/dist/write/make-repeating-project.js +253 -0
- package/dist/write/make-repeating-project.js.map +1 -0
- package/dist/write/operations.d.ts +145 -1
- package/dist/write/operations.js +48 -0
- package/dist/write/operations.js.map +1 -1
- package/dist/write/pipeline.d.ts +73 -2
- package/dist/write/pipeline.js +218 -43
- package/dist/write/pipeline.js.map +1 -1
- package/dist/write/planner.js +8 -1
- package/dist/write/planner.js.map +1 -1
- package/dist/write/pre-state.d.ts +105 -3
- package/dist/write/pre-state.js +144 -3
- package/dist/write/pre-state.js.map +1 -1
- package/dist/write/recurrence-rule-blob.d.ts +65 -0
- package/dist/write/recurrence-rule-blob.js +150 -0
- package/dist/write/recurrence-rule-blob.js.map +1 -0
- package/dist/write/reopen.js +3 -2
- package/dist/write/reopen.js.map +1 -1
- package/dist/write/reorder.js +27 -17
- package/dist/write/reorder.js.map +1 -1
- package/dist/write/repeat-rule.d.ts +22 -0
- package/dist/write/repeat-rule.js +258 -0
- package/dist/write/repeat-rule.js.map +1 -0
- package/dist/write/reversibility.js +49 -0
- package/dist/write/reversibility.js.map +1 -1
- package/dist/write/tag-refs.d.ts +47 -0
- package/dist/write/tag-refs.js +126 -0
- package/dist/write/tag-refs.js.map +1 -0
- package/dist/write/undo.d.ts +74 -5
- package/dist/write/undo.js +493 -80
- package/dist/write/undo.js.map +1 -1
- package/dist/write/vectors/registry.d.ts +15 -1
- package/dist/write/vectors/registry.js +65 -2
- package/dist/write/vectors/registry.js.map +1 -1
- package/dist/write/vectors/simulator.d.ts +44 -0
- package/dist/write/vectors/simulator.js +1136 -0
- package/dist/write/vectors/simulator.js.map +1 -0
- package/dist/write/vectors/types.d.ts +154 -3
- package/dist/write/vectors/ui-certification.d.ts +54 -0
- package/dist/write/vectors/ui-certification.js +43 -0
- package/dist/write/vectors/ui-certification.js.map +1 -0
- package/dist/write/vectors/ui-drag.d.ts +188 -0
- package/dist/write/vectors/ui-drag.js +1095 -0
- package/dist/write/vectors/ui-drag.js.map +1 -0
- package/dist/write/vectors/ui-recipes.d.ts +83 -0
- package/dist/write/vectors/ui-recipes.js +610 -0
- package/dist/write/vectors/ui-recipes.js.map +1 -0
- package/dist/write/vectors/ui.d.ts +152 -0
- package/dist/write/vectors/ui.js +704 -0
- package/dist/write/vectors/ui.js.map +1 -0
- package/dist/write/verify/delta.d.ts +141 -4
- package/dist/write/verify/delta.js +199 -21
- package/dist/write/verify/delta.js.map +1 -1
- package/dist/write/verify/poller.d.ts +7 -1
- package/dist/write/verify/poller.js +21 -1
- package/dist/write/verify/poller.js.map +1 -1
- package/package.json +18 -3
- package/skills/things-cli/SKILL.md +53 -0
- package/skills/things-cli/references/contracts.md +41 -0
- package/skills/things-cli/references/gui.md +11 -0
- package/skills/things-cli/references/model.md +51 -0
- package/dist/cli/exit-codes.d.ts +0 -26
- package/dist/cli/exit-codes.js +0 -26
- package/dist/cli/exit-codes.js.map +0 -1
- package/dist/cli/output.d.ts +0 -42
- package/dist/cli/output.js +0 -16
- package/dist/cli/output.js.map +0 -1
- package/dist/read/pagination.d.ts +0 -104
- package/dist/read/pagination.js.map +0 -1
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import type { ThingsApiConfig } from "../../config.ts";
|
|
2
|
+
import { type UiDriveAux } from "./ui-drag.ts";
|
|
3
|
+
import type { UiPrimitive, UiStep, WriteVector } from "./types.ts";
|
|
4
|
+
/**
|
|
5
|
+
* Command-level primitives. Extends the recipe `UiPrimitive` set with the
|
|
6
|
+
* INTERNAL sub-steps composite recipe steps decompose into: a `click-element`
|
|
7
|
+
* step becomes read-the-frame (`resolve-frame`) + click-at-center
|
|
8
|
+
* (`click-point`); a `drag-reorder` step becomes snapshot/scroll/drag cycles
|
|
9
|
+
* (`sidebar-snapshot`, `sidebar-scroll`, `sidebar-drag` — ui-drag.ts). Keeping
|
|
10
|
+
* every subprocess call behind the injectable `run` seam makes the
|
|
11
|
+
* orchestration unit-testable without a GUI.
|
|
12
|
+
*/
|
|
13
|
+
export type UiCommandPrimitive = UiPrimitive | "resolve-frame" | "click-point" | "sidebar-snapshot" | "sidebar-scroll" | "sidebar-drag" | "sidebar-held-drag";
|
|
14
|
+
/** A single primitive dispatch — one stable shape per primitive. */
|
|
15
|
+
export interface UiCommand {
|
|
16
|
+
primitive: UiCommandPrimitive;
|
|
17
|
+
label: string;
|
|
18
|
+
/** osascript source (AX primitives); absent for reveal. */
|
|
19
|
+
script?: string;
|
|
20
|
+
/** reveal only: the things:/// URL opened to select the target. */
|
|
21
|
+
url?: string;
|
|
22
|
+
/** `script` language for the osascript hop; defaults to AppleScript. */
|
|
23
|
+
lang?: "applescript" | "javascript";
|
|
24
|
+
/** Structured command parameters (test-inspectable; never dispatched). */
|
|
25
|
+
meta?: Record<string, unknown>;
|
|
26
|
+
}
|
|
27
|
+
export interface UiRunResult {
|
|
28
|
+
ok: boolean;
|
|
29
|
+
stdout: string;
|
|
30
|
+
stderr: string;
|
|
31
|
+
timedOut?: boolean;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Low-level dispatch seam. Injectable so the driver's recipe orchestration,
|
|
35
|
+
* canary, and abort logic are unit-testable WITHOUT ever touching a real GUI
|
|
36
|
+
* (CLAUDE.md safety rails — the production app is never a valid target).
|
|
37
|
+
*/
|
|
38
|
+
export type UiRunner = (command: UiCommand, timeoutMs: number) => Promise<UiRunResult>;
|
|
39
|
+
/** resolve-element: does the element exist right now? Returns "true"/"false". */
|
|
40
|
+
export declare function axResolveScript(path: string): string;
|
|
41
|
+
/** press: AXPress the element. */
|
|
42
|
+
export declare function axPressScript(path: string): string;
|
|
43
|
+
/**
|
|
44
|
+
* set-field-value: enter a value into the dialog's numeric text field (interval,
|
|
45
|
+
* ends-count, start-days-earlier). It FOCUSES the field, selects all, TYPES the
|
|
46
|
+
* value, and Tabs to commit — because `set value of <field>` writes the field's
|
|
47
|
+
* displayed text WITHOUT firing the edit, so the app's binding keeps the old
|
|
48
|
+
* number (the field shows "5" but the rule stays interval 1 — a silent no-op
|
|
49
|
+
* exactly like `set value` on a pop-up, UIC6; it went unnoticed while every base
|
|
50
|
+
* case used the default interval 1). Real keystrokes fire the change the binding
|
|
51
|
+
* needs; Tab (not Return, which would fire the default OK button) commits and
|
|
52
|
+
* moves focus. Foreground-bound (keystrokes reach the frontmost app) — the
|
|
53
|
+
* reveal/activate preamble puts Things there. One stable command shape.
|
|
54
|
+
*/
|
|
55
|
+
export declare function axSetValueScript(path: string, value: string): string;
|
|
56
|
+
/**
|
|
57
|
+
* select-popup: choose an item in a pop-up button by NAME. Setting `value` on a
|
|
58
|
+
* Things pop-up button is a silent no-op (UIC1 / UI2-i) — the control must be
|
|
59
|
+
* opened and the menu item clicked. The open-click is POLLED until the menu
|
|
60
|
+
* actually renders: in the full-vocabulary dialog a preceding pop-up's menu is
|
|
61
|
+
* still animating closed when the next select fires, and that first open-click
|
|
62
|
+
* is ABSORBED (the pop-up stays closed, so `menu 1` is an invalid index and the
|
|
63
|
+
* item click errors -1719, UIC6). Re-clicking only while the menu is absent
|
|
64
|
+
* (never once it is open) opens it reliably without toggling it back shut. One
|
|
65
|
+
* stable command shape per primitive.
|
|
66
|
+
*/
|
|
67
|
+
export declare function axSelectPopupScript(path: string, value: string): string;
|
|
68
|
+
/**
|
|
69
|
+
* select-row: select a PROJECT row by title, purely via AX (UIC4-a). Walks the
|
|
70
|
+
* content table's rows, issues the row `select` action on each (which REPLACES
|
|
71
|
+
* the table selection — single-select, UIC5), and reads back Things' `name of
|
|
72
|
+
* selected to dos`; the first row whose readback equals the target title is LEFT
|
|
73
|
+
* selected and the script returns "OK". Non-selectable rows (the area/Someday
|
|
74
|
+
* header, the blank spacer) select nothing (readback count 0) and are skipped.
|
|
75
|
+
* Returns "NOMATCH" if no row selects to the title — the readback is the
|
|
76
|
+
* selection-landed verification, so a match guarantees the intended row is
|
|
77
|
+
* selected. One stable command shape per primitive.
|
|
78
|
+
*
|
|
79
|
+
* UIC5 correction: the shipped form set the TABLE's `AXSelectedRows` attribute
|
|
80
|
+
* to a one-row list, which is a SILENT NO-OP on Things' content table via System
|
|
81
|
+
* Events (no error, selection never lands). The row `select` action is the
|
|
82
|
+
* working pure-System-Events route and stays background-capable with no focus
|
|
83
|
+
* steal (UIC5-e). (UIC4-a proved settability with the ObjC-bridge NSArray set —
|
|
84
|
+
* a different API than the System Events attribute set the driver shells out to.)
|
|
85
|
+
*/
|
|
86
|
+
export declare function axSelectRowScript(tablePath: string, title: string): string;
|
|
87
|
+
/**
|
|
88
|
+
* select-heading-row: select a HEADING as a content-table row by POSITION,
|
|
89
|
+
* purely via AX (HEADCERT1). A heading is not `things:///show`-selectable and
|
|
90
|
+
* its row carries no stable AX title handle, so identity is positional. Walks
|
|
91
|
+
* the revealed project view's content table; for each row it issues the row
|
|
92
|
+
* `select` action, then checks two things: the row genuinely took the selection
|
|
93
|
+
* (`selected of row` — header/spacer rows do not) AND `Things3 → name of
|
|
94
|
+
* selected to dos` is EMPTY (a heading is not a to-do; a to-do row's readback is
|
|
95
|
+
* its title). The Nth such heading row (0-based `ordinal`, in top-to-bottom =
|
|
96
|
+
* `index` order) is LEFT selected and the script returns "OK"; "NOMATCH" if the
|
|
97
|
+
* project has fewer headings. With the heading selected, `Items ▸ Convert to
|
|
98
|
+
* Project…` enables. Pure System Events, background-capable, no focus steal.
|
|
99
|
+
* One stable command shape per primitive.
|
|
100
|
+
*/
|
|
101
|
+
export declare function axSelectHeadingRowScript(tablePath: string, ordinal: number): string;
|
|
102
|
+
/** activate: foreground Things (the fallback preamble step). */
|
|
103
|
+
export declare function axActivateScript(): string;
|
|
104
|
+
/** key: a space-separated keystroke spec (e.g. "down down return"). */
|
|
105
|
+
export declare function axKeyScript(keys: string): string;
|
|
106
|
+
/** The abort keystroke sent to dismiss a half-open sheet/popover on failure. */
|
|
107
|
+
export declare function axAbortScript(): string;
|
|
108
|
+
/**
|
|
109
|
+
* resolve-frame: read the element's on-screen frame (top-left origin, points)
|
|
110
|
+
* from the live AX tree and print "x y w h". Used by `click-element` to target
|
|
111
|
+
* the frame CENTER — the position comes from AX (`position`/`size`), never a
|
|
112
|
+
* guessed pixel, so a missing element errors (fail-closed) instead of clicking
|
|
113
|
+
* a stale coordinate. Points map 1:1 to CGEvent coordinates (NATIVE1-b).
|
|
114
|
+
*/
|
|
115
|
+
export declare function axFrameScript(path: string): string;
|
|
116
|
+
/**
|
|
117
|
+
* click-point: synthesize a single left mouse click at (x, y) via the global
|
|
118
|
+
* HID event tap (the NATIVE1 JXA ObjC-bridge path — `CGEventPostToPid` is inert
|
|
119
|
+
* for Things' hit-testing; only `CGEventPost(kCGHIDEventTap)` lands). The HID
|
|
120
|
+
* tap posts to the FOREGROUND surface, so the recipe must have activated Things
|
|
121
|
+
* first. Event types are the stable CGEventType values (5 = mouse-moved,
|
|
122
|
+
* 1 = left-down, 2 = left-up).
|
|
123
|
+
*/
|
|
124
|
+
export declare function jxaClickScript(x: number, y: number): string;
|
|
125
|
+
/**
|
|
126
|
+
* set-datetime: set the Repeat dialog's `AXDateTimeArea` (reminder time / "ends
|
|
127
|
+
* on date" bound) via the ObjC AX bridge. Things' date/time control holds an
|
|
128
|
+
* NSDate, and System Events cannot write it (`set value … to <date>` → -10000,
|
|
129
|
+
* UIC6), so — like the mouse-synthesis primitive — this runs in JXA and calls
|
|
130
|
+
* `AXUIElementSetAttributeValue(…, AXValue, <NSDate>)` directly. The control is
|
|
131
|
+
* found by ROLE within Things' front dialog (there is exactly one during a
|
|
132
|
+
* reminder/end-date step; the matrix never sets both at once), polled briefly
|
|
133
|
+
* so it is caught right after the checkbox/pop-up that reveals it, and the
|
|
134
|
+
* script THROWS when absent so the driver fails closed. `spec` is
|
|
135
|
+
* `time:HH:mm` (keep the control's date, overwrite the time-of-day) or
|
|
136
|
+
* `date:YYYY-MM-DD` (overwrite the date at midnight). One stable JXA shape.
|
|
137
|
+
*/
|
|
138
|
+
export declare function axSetDateTimeScript(spec: string): string;
|
|
139
|
+
/** Parse a resolve-frame "x y w h" line into the frame's center point. */
|
|
140
|
+
export declare function parseFrameCenter(stdout: string): {
|
|
141
|
+
x: number;
|
|
142
|
+
y: number;
|
|
143
|
+
} | null;
|
|
144
|
+
/** Compile one recipe step into its primitive command (no dispatch). */
|
|
145
|
+
export declare function commandForStep(step: UiStep, targetUuid: string): UiCommand;
|
|
146
|
+
/**
|
|
147
|
+
* The ui vector. Config-gated: when `ui.enabled` is false the matrix reports
|
|
148
|
+
* every op unsupported (with a remediation naming the config key + setup doc),
|
|
149
|
+
* so the operation is never dispatched. When enabled, `execute` runs the
|
|
150
|
+
* compiled recipe fail-closed.
|
|
151
|
+
*/
|
|
152
|
+
export declare function createUiVector(config: ThingsApiConfig, run?: UiRunner, aux?: UiDriveAux): WriteVector;
|