things-api 0.17.0 → 0.19.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 +16 -9
- package/deputy/AppIcon.icns +0 -0
- package/deputy/VERSION +1 -0
- package/deputy/helpers-Info.plist +27 -0
- package/deputy/prebuilt/Things API Helper.app/Contents/CodeResources +0 -0
- package/deputy/prebuilt/Things API Helper.app/Contents/Helpers/things-reader.app/Contents/Info.plist +22 -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/Helpers/things-reader.app/Contents/Resources/AppIcon.icns +0 -0
- package/deputy/prebuilt/Things API Helper.app/Contents/Helpers/things-reader.app/Contents/_CodeSignature/CodeResources +128 -0
- package/deputy/prebuilt/Things API Helper.app/Contents/Info.plist +27 -0
- package/deputy/prebuilt/Things API Helper.app/Contents/MacOS/things-deputy +0 -0
- package/deputy/prebuilt/Things API Helper.app/Contents/Resources/AppIcon.icns +0 -0
- package/deputy/prebuilt/Things API Helper.app/Contents/_CodeSignature/CodeResources +137 -0
- package/deputy/reader/Info.plist +22 -0
- package/deputy/reader/entitlements.plist +45 -0
- package/deputy/reader/main.swift +580 -0
- package/deputy/src/main.swift +133 -0
- package/deputy/src/osascript.swift +102 -0
- package/deputy/src/server.swift +373 -0
- package/deputy/src/sqlite.swift +121 -0
- package/deputy/src/tcc.swift +58 -0
- package/dist/audit/schema.d.ts +13 -1
- package/dist/audit/schema.js.map +1 -1
- package/dist/capability.d.ts +160 -0
- package/dist/capability.js +416 -0
- package/dist/capability.js.map +1 -0
- package/dist/cli/commands/doctor.js +181 -2
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/helpers.d.ts +17 -0
- package/dist/cli/commands/helpers.js +275 -0
- package/dist/cli/commands/helpers.js.map +1 -0
- package/dist/cli/commands/op-result.d.ts +15 -0
- package/dist/cli/commands/op-result.js +45 -0
- package/dist/cli/commands/op-result.js.map +1 -0
- package/dist/cli/commands/reads.js +47 -1
- package/dist/cli/commands/reads.js.map +1 -1
- package/dist/cli/commands/setup.d.ts +9 -0
- package/dist/cli/commands/setup.js +63 -83
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/writes.d.ts +1 -1
- package/dist/cli/commands/writes.js +262 -109
- package/dist/cli/commands/writes.js.map +1 -1
- package/dist/cli/dry-run.d.ts +1 -1
- package/dist/cli/dry-run.js +1 -1
- package/dist/cli/glyphs.d.ts +23 -4
- package/dist/cli/glyphs.js +46 -19
- package/dist/cli/glyphs.js.map +1 -1
- package/dist/cli/help.d.ts +1 -1
- package/dist/cli/help.js +53 -27
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/helpers-check.d.ts +10 -0
- package/dist/cli/helpers-check.js +59 -0
- package/dist/cli/helpers-check.js.map +1 -0
- package/dist/cli/main.js +22 -1
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/period.d.ts +3 -1
- package/dist/cli/period.js +1 -1
- package/dist/cli/period.js.map +1 -1
- package/dist/cli/read-driver.js +26 -1
- package/dist/cli/read-driver.js.map +1 -1
- package/dist/cli/render.d.ts +31 -4
- package/dist/cli/render.js +127 -15
- package/dist/cli/render.js.map +1 -1
- package/dist/client.d.ts +22 -2
- package/dist/client.js +52 -15
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +31 -0
- package/dist/config.js +9 -0
- package/dist/config.js.map +1 -1
- package/dist/contracts.d.ts +6 -2
- package/dist/contracts.js +1 -1
- package/dist/contracts.js.map +1 -1
- package/dist/db/baselines/db-v26.js +8 -4
- package/dist/db/baselines/db-v26.js.map +1 -1
- package/dist/db/baselines/db-v27.d.ts +42 -0
- package/dist/db/baselines/db-v27.js +47 -0
- package/dist/db/baselines/db-v27.js.map +1 -0
- package/dist/db/baselines/index.js +2 -1
- package/dist/db/baselines/index.js.map +1 -1
- package/dist/db/locate.d.ts +4 -1
- package/dist/db/locate.js +3 -1
- package/dist/db/locate.js.map +1 -1
- package/dist/db/schema.d.ts +1 -1
- package/dist/db/schema.js +9 -0
- package/dist/db/schema.js.map +1 -1
- package/dist/deputy/bridge-worker.d.ts +1 -0
- package/dist/deputy/bridge-worker.js +79 -0
- package/dist/deputy/bridge-worker.js.map +1 -0
- package/dist/deputy/bridge.d.ts +14 -0
- package/dist/deputy/bridge.js +70 -0
- package/dist/deputy/bridge.js.map +1 -0
- package/dist/deputy/client.d.ts +19 -0
- package/dist/deputy/client.js +104 -0
- package/dist/deputy/client.js.map +1 -0
- package/dist/deputy/db-facade.d.ts +18 -0
- package/dist/deputy/db-facade.js +71 -0
- package/dist/deputy/db-facade.js.map +1 -0
- package/dist/deputy/files.d.ts +1 -0
- package/dist/deputy/files.js +16 -0
- package/dist/deputy/files.js.map +1 -0
- package/dist/deputy/install.d.ts +319 -0
- package/dist/deputy/install.js +1239 -0
- package/dist/deputy/install.js.map +1 -0
- package/dist/deputy/notice.d.ts +6 -0
- package/dist/deputy/notice.js +28 -0
- package/dist/deputy/notice.js.map +1 -0
- package/dist/deputy/notices.d.ts +31 -0
- package/dist/deputy/notices.js +94 -0
- package/dist/deputy/notices.js.map +1 -0
- package/dist/deputy/osa.d.ts +21 -0
- package/dist/deputy/osa.js +72 -0
- package/dist/deputy/osa.js.map +1 -0
- package/dist/deputy/protocol.d.ts +140 -0
- package/dist/deputy/protocol.js +143 -0
- package/dist/deputy/protocol.js.map +1 -0
- package/dist/deputy/routing.d.ts +84 -0
- package/dist/deputy/routing.js +422 -0
- package/dist/deputy/routing.js.map +1 -0
- package/dist/deputy/shortcuts-exec.d.ts +10 -0
- package/dist/deputy/shortcuts-exec.js +50 -0
- package/dist/deputy/shortcuts-exec.js.map +1 -0
- package/dist/diagnose.d.ts +57 -2
- package/dist/diagnose.js +105 -3
- package/dist/diagnose.js.map +1 -1
- package/dist/direct-setup.d.ts +78 -0
- package/dist/direct-setup.js +484 -0
- package/dist/direct-setup.js.map +1 -0
- package/dist/host-access.d.ts +63 -0
- package/dist/host-access.js +165 -0
- package/dist/host-access.js.map +1 -0
- package/dist/index.d.ts +31 -5
- package/dist/index.js +23 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts +27 -1
- package/dist/mcp/server.js +300 -97
- package/dist/mcp/server.js.map +1 -1
- package/dist/model/mappers.d.ts +12 -3
- package/dist/model/mappers.js +6 -1
- package/dist/model/mappers.js.map +1 -1
- package/dist/model/recurrence.d.ts +5 -1
- package/dist/model/recurrence.js +19 -1
- package/dist/model/recurrence.js.map +1 -1
- package/dist/model/template-projection.d.ts +26 -0
- package/dist/model/template-projection.js +113 -0
- package/dist/model/template-projection.js.map +1 -0
- package/dist/op-result.d.ts +55 -0
- package/dist/op-result.js +161 -0
- package/dist/op-result.js.map +1 -0
- package/dist/read/detail.js +7 -1
- package/dist/read/detail.js.map +1 -1
- package/dist/read/filter-contract.d.ts +1 -1
- package/dist/read/filter-contract.js +4 -0
- package/dist/read/filter-contract.js.map +1 -1
- package/dist/read/queries.js +8 -1
- package/dist/read/queries.js.map +1 -1
- package/dist/read/shape.js +4 -0
- package/dist/read/shape.js.map +1 -1
- package/dist/read/views.d.ts +35 -4
- package/dist/read/views.js +120 -18
- package/dist/read/views.js.map +1 -1
- package/dist/session-grant.d.ts +48 -0
- package/dist/session-grant.js +170 -0
- package/dist/session-grant.js.map +1 -0
- package/dist/surface-copy.d.ts +8 -0
- package/dist/surface-copy.js +8 -0
- package/dist/surface-copy.js.map +1 -1
- package/dist/sync-health.js +6 -2
- package/dist/sync-health.js.map +1 -1
- package/dist/wizard.d.ts +58 -0
- package/dist/wizard.js +167 -0
- package/dist/wizard.js.map +1 -0
- package/dist/write/accessibility-probe.js +4 -2
- package/dist/write/accessibility-probe.js.map +1 -1
- package/dist/write/automation-probe.js +5 -1
- package/dist/write/automation-probe.js.map +1 -1
- package/dist/write/availability.d.ts +1 -1
- package/dist/write/availability.js +10 -6
- package/dist/write/availability.js.map +1 -1
- package/dist/write/batch.d.ts +20 -0
- package/dist/write/batch.js +94 -15
- package/dist/write/batch.js.map +1 -1
- package/dist/write/capabilities.d.ts +9 -0
- package/dist/write/capabilities.js +2 -0
- package/dist/write/capabilities.js.map +1 -1
- package/dist/write/clear-reminder.js +1 -1
- package/dist/write/clear-reminder.js.map +1 -1
- package/dist/write/commands.d.ts +12 -1
- package/dist/write/commands.js +170 -237
- package/dist/write/commands.js.map +1 -1
- package/dist/write/experimental.d.ts +19 -0
- package/dist/write/experimental.js +50 -0
- package/dist/write/experimental.js.map +1 -1
- package/dist/write/failure-hints.d.ts +3 -1
- package/dist/write/failure-hints.js.map +1 -1
- package/dist/write/guards.js +19 -2
- package/dist/write/guards.js.map +1 -1
- package/dist/write/lock.d.ts +16 -13
- package/dist/write/lock.js +55 -0
- package/dist/write/lock.js.map +1 -1
- package/dist/write/make-repeating-project.js +9 -13
- package/dist/write/make-repeating-project.js.map +1 -1
- package/dist/write/move.js +14 -6
- package/dist/write/move.js.map +1 -1
- package/dist/write/operations.d.ts +64 -25
- package/dist/write/operations.js +7 -0
- package/dist/write/operations.js.map +1 -1
- package/dist/write/opid.d.ts +14 -0
- package/dist/write/opid.js +22 -0
- package/dist/write/opid.js.map +1 -1
- package/dist/write/param-schema.d.ts +124 -0
- package/dist/write/param-schema.js +747 -0
- package/dist/write/param-schema.js.map +1 -0
- package/dist/write/pipeline.d.ts +78 -2
- package/dist/write/pipeline.js +249 -4
- package/dist/write/pipeline.js.map +1 -1
- package/dist/write/pre-state.d.ts +8 -0
- package/dist/write/pre-state.js +62 -17
- package/dist/write/pre-state.js.map +1 -1
- package/dist/write/promote-clone.js +635 -367
- package/dist/write/promote-clone.js.map +1 -1
- package/dist/write/reorder.js +95 -29
- package/dist/write/reorder.js.map +1 -1
- package/dist/write/repeat-anchor.d.ts +30 -0
- package/dist/write/repeat-anchor.js +166 -1
- package/dist/write/repeat-anchor.js.map +1 -1
- package/dist/write/repeat-rule.d.ts +28 -1
- package/dist/write/repeat-rule.js +64 -4
- package/dist/write/repeat-rule.js.map +1 -1
- package/dist/write/resolution-timestamps.d.ts +11 -0
- package/dist/write/resolution-timestamps.js +83 -38
- package/dist/write/resolution-timestamps.js.map +1 -1
- package/dist/write/reversibility.js +4 -0
- package/dist/write/reversibility.js.map +1 -1
- package/dist/write/template-mutation.d.ts +137 -0
- package/dist/write/template-mutation.js +451 -0
- package/dist/write/template-mutation.js.map +1 -0
- package/dist/write/undo.js +10 -20
- package/dist/write/undo.js.map +1 -1
- package/dist/write/update-fields.d.ts +151 -0
- package/dist/write/update-fields.js +427 -0
- package/dist/write/update-fields.js.map +1 -0
- package/dist/write/vectors/applescript.js +10 -16
- package/dist/write/vectors/applescript.js.map +1 -1
- package/dist/write/vectors/registry.d.ts +1 -1
- package/dist/write/vectors/registry.js +10 -2
- package/dist/write/vectors/registry.js.map +1 -1
- package/dist/write/vectors/session-reachability.d.ts +55 -0
- package/dist/write/vectors/session-reachability.js +56 -8
- package/dist/write/vectors/session-reachability.js.map +1 -1
- package/dist/write/vectors/shortcuts.js +7 -16
- package/dist/write/vectors/shortcuts.js.map +1 -1
- package/dist/write/vectors/simulator.d.ts +16 -1
- package/dist/write/vectors/simulator.js +68 -12
- package/dist/write/vectors/simulator.js.map +1 -1
- package/dist/write/vectors/types.d.ts +124 -1
- package/dist/write/vectors/ui-recipes.d.ts +19 -0
- package/dist/write/vectors/ui-recipes.js +158 -38
- package/dist/write/vectors/ui-recipes.js.map +1 -1
- package/dist/write/vectors/ui.d.ts +89 -0
- package/dist/write/vectors/ui.js +504 -49
- package/dist/write/vectors/ui.js.map +1 -1
- package/dist/write/verify/delta.d.ts +21 -0
- package/dist/write/verify/delta.js.map +1 -1
- package/dist/write/verify/poller.d.ts +13 -0
- package/dist/write/verify/poller.js +38 -0
- package/dist/write/verify/poller.js.map +1 -1
- package/package.json +9 -1
- package/schema/envelope.schema.json +5 -3
- package/scripts/build-helpers.sh +109 -0
- package/scripts/deputy-cert-setup.sh +60 -0
- package/skills/things-cli/SKILL.md +12 -5
- package/skills/things-cli/references/contracts.md +1 -0
- package/skills/things-cli/references/data-model.md +3 -0
- package/skills/things-cli/references/errors.md +5 -1
- package/skills/things-cli/references/gui.md +1 -0
- package/skills/things-cli/references/repeating.md +75 -0
- package/skills/things-cli/references/tag-cleanup.md +64 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"param-schema.js","sourceRoot":"","sources":["../../src/write/param-schema.ts"],"names":[],"mappings":"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"}
|
package/dist/write/pipeline.d.ts
CHANGED
|
@@ -5,14 +5,16 @@ import type { DisruptionTier, ThingsApiConfig } from "../config.ts";
|
|
|
5
5
|
import type { FingerprintStatus } from "../db/fingerprint.ts";
|
|
6
6
|
import { type ResolvedScope } from "../read/scope.ts";
|
|
7
7
|
import { type ShortcutsState } from "./availability.ts";
|
|
8
|
+
import { type UiCapability, type WriteCapability } from "../capability.ts";
|
|
8
9
|
import { type EnvironmentTracker } from "./environment.ts";
|
|
9
10
|
import { type LikelyCause } from "./failure-hints.ts";
|
|
10
11
|
import { type HazardId } from "./guards.ts";
|
|
12
|
+
import { type AcquireMutationLockOptions } from "./lock.ts";
|
|
11
13
|
import { type Acknowledgements, type OperationKind, type OperationParamsMap } from "./operations.ts";
|
|
12
14
|
import { type CompletionContext } from "./completion-context.ts";
|
|
13
15
|
import { type PreserveModifiedFailure } from "./preserve-modified.ts";
|
|
14
16
|
import type { VectorId, WriteVector } from "./vectors/types.ts";
|
|
15
|
-
import { type DeltaSpec, type RepeatingDiscovery } from "./verify/delta.ts";
|
|
17
|
+
import { type DeltaSpec, type OccurrenceResolution, type RepeatingDiscovery } from "./verify/delta.ts";
|
|
16
18
|
import { type PollerDeps } from "./verify/poller.ts";
|
|
17
19
|
export interface WriteOptions extends Acknowledgements {
|
|
18
20
|
/** Caps vector selection; defaults from the config profile. */
|
|
@@ -106,6 +108,8 @@ export interface MutationPlan {
|
|
|
106
108
|
invocation: string;
|
|
107
109
|
expectedDelta: DeltaSpec;
|
|
108
110
|
hazardsChecked: HazardId[];
|
|
111
|
+
/** Advisory notes the preview should surface (e.g. the DACON1 off-rule-first disclosure). */
|
|
112
|
+
notes?: string[];
|
|
109
113
|
}
|
|
110
114
|
export type MutationResult = {
|
|
111
115
|
kind: "ok";
|
|
@@ -136,6 +140,17 @@ export type MutationResult = {
|
|
|
136
140
|
* reschedule the repeat). Absent for every other op.
|
|
137
141
|
*/
|
|
138
142
|
repeating?: RepeatingDiscovery;
|
|
143
|
+
/**
|
|
144
|
+
* Template-target composite outcome (ADDITIVE, presence-keyed): present
|
|
145
|
+
* when `complete`/`cancel`/`update --exception` was aimed at a REPEATING
|
|
146
|
+
* to-do, naming both uuids — the series the caller named and the
|
|
147
|
+
* occurrence the composite actually wrote — plus whether that occurrence
|
|
148
|
+
* was minted for this call (`minted`) and the date it carries. The
|
|
149
|
+
* result's own `uuid` is the occurrence (the row that changed, and what
|
|
150
|
+
* undo reaches); this field is how a caller learns WHICH occurrence that
|
|
151
|
+
* is without inferring it. Absent for every other op.
|
|
152
|
+
*/
|
|
153
|
+
occurrence?: OccurrenceResolution;
|
|
139
154
|
/** Advisory notes (e.g. a changed environment tuple — consent may re-prompt later). */
|
|
140
155
|
warnings?: string[];
|
|
141
156
|
/**
|
|
@@ -186,7 +201,14 @@ export type MutationResult = {
|
|
|
186
201
|
} | {
|
|
187
202
|
kind: "verify-failed";
|
|
188
203
|
op: OperationKind;
|
|
189
|
-
|
|
204
|
+
/**
|
|
205
|
+
* `timeout` / `mismatch` / `silent-noop` are the read-after-write verdicts.
|
|
206
|
+
* `ui-unreachable` is the ENVIRONMENT verdict (#512): a GUI drive stopped
|
|
207
|
+
* because the Things window was not reachable/answering, and the re-verify
|
|
208
|
+
* found nothing landed — the app never got the chance to accept or reject
|
|
209
|
+
* the command, so it must not be reported as a silent no-op.
|
|
210
|
+
*/
|
|
211
|
+
reason: "timeout" | "mismatch" | "silent-noop" | "ui-unreachable";
|
|
190
212
|
expected: DeltaSpec;
|
|
191
213
|
observed: Record<string, unknown> | null;
|
|
192
214
|
detail: string;
|
|
@@ -255,6 +277,10 @@ export interface WriteDeps {
|
|
|
255
277
|
urlSchemeEnabled?: () => boolean | null;
|
|
256
278
|
/** Seam: installed Things proxy shortcuts, for the pre-dispatch availability gate (availability.ts). */
|
|
257
279
|
shortcutProxies?: () => ShortcutsState;
|
|
280
|
+
/** Seam: prompt-free app-automation standing, for the write gate (capability.ts). */
|
|
281
|
+
writeCapability?: () => WriteCapability;
|
|
282
|
+
/** Seam: prompt-free GUI-driving standing, for the Article IV gate (capability.ts). */
|
|
283
|
+
uiCapability?: () => UiCapability;
|
|
258
284
|
now?: () => Date;
|
|
259
285
|
/** Default consumer IANA zone (client-resolved from THINGS_TZ); normalizes consumer `when` tokens. */
|
|
260
286
|
zone?: string;
|
|
@@ -301,6 +327,24 @@ export declare function normalizeConsumerWhen(params: Record<string, unknown>, n
|
|
|
301
327
|
detail: string;
|
|
302
328
|
remediation: string;
|
|
303
329
|
};
|
|
330
|
+
/**
|
|
331
|
+
* Run a COMPOSITE — a single verb the engine executes as several mutations —
|
|
332
|
+
* under ONE mutation lock held end-to-end, so it serializes against other
|
|
333
|
+
* writers as a whole instead of leg by leg. Every leg's own
|
|
334
|
+
* `acquireMutationLock` inside `body` is a reentrant no-op (see
|
|
335
|
+
* {@link withMutationLock}); the per-leg lock stays the base case for an
|
|
336
|
+
* ordinary single mutation.
|
|
337
|
+
*
|
|
338
|
+
* Wrap only the MUTATING tail: validation, dry-run planning, and the hazard /
|
|
339
|
+
* session gates belong outside, so a refusal never takes the lock. On contention
|
|
340
|
+
* the refusal is the same `blocked` / `lock` shape the pipeline returns for a
|
|
341
|
+
* single op, carrying the composite's own op name. No audit record is written
|
|
342
|
+
* for it — unlike the single-op path, nothing was attempted, so there is no leg
|
|
343
|
+
* to record.
|
|
344
|
+
*/
|
|
345
|
+
export declare function runComposite(deps: WriteDeps, op: OperationKind, body: () => Promise<MutationResult>,
|
|
346
|
+
/** @internal test seam — see {@link AcquireMutationLockOptions}. */
|
|
347
|
+
lockOptions?: AcquireMutationLockOptions): Promise<MutationResult>;
|
|
304
348
|
export declare function runMutation<K extends OperationKind>(deps: WriteDeps, op: K, params: OperationParamsMap[K], options?: WriteOptions): Promise<MutationResult>;
|
|
305
349
|
/**
|
|
306
350
|
* Build the single-op idempotency REPLAY result from the matched audit record —
|
|
@@ -310,6 +354,38 @@ export declare function runMutation<K extends OperationKind>(deps: WriteDeps, op
|
|
|
310
354
|
* uses (only for a non-leg, reversible op — an irreversible op or a batch leg
|
|
311
355
|
* carries none), and `title` rides `requested.title` when the record stored one
|
|
312
356
|
* (the audit record has no dedicated title field — see the trail-record note).
|
|
357
|
+
*
|
|
358
|
+
* A template-target composite's summary record additionally stored WHICH
|
|
359
|
+
* occurrence it wrote ({@link OccurrenceResolution}); that rides back verbatim,
|
|
360
|
+
* so a retry that replays instead of executing still names the same two uuids
|
|
361
|
+
* the original call returned — the whole point of putting an `opId` on a verb
|
|
362
|
+
* that would otherwise mint a second occurrence.
|
|
313
363
|
*/
|
|
314
364
|
export declare function replayResultFromRecord(record: AuditRecord): MutationResult;
|
|
365
|
+
/**
|
|
366
|
+
* Append a COMPOSITE's summary record — the single record that stands for a
|
|
367
|
+
* multi-leg verb on the trail. It is what `undo` targets (the legs are excluded
|
|
368
|
+
* from direct targeting) and, when the caller supplied one, the ONE record that
|
|
369
|
+
* carries the composite's `opId`, so a resubmission matches the whole verb
|
|
370
|
+
* exactly once instead of matching a leg (or nothing at all).
|
|
371
|
+
*
|
|
372
|
+
* Shared by both composite families — the resolution-timestamp flip-dance
|
|
373
|
+
* (resolution-timestamps.ts) and the template-target CNC composites
|
|
374
|
+
* (template-mutation.ts) — so the two cannot drift on what a summary record
|
|
375
|
+
* looks like.
|
|
376
|
+
*/
|
|
377
|
+
export declare function appendCompositeSummary(deps: WriteDeps, args: {
|
|
378
|
+
startedAt: Date;
|
|
379
|
+
op: OperationKind;
|
|
380
|
+
uuid: string;
|
|
381
|
+
txnId: string;
|
|
382
|
+
invocation: string;
|
|
383
|
+
/** The composite's own request, as the caller expressed it. */
|
|
384
|
+
requested?: Record<string, unknown>;
|
|
385
|
+
/** How the composite as a whole reached the app (its most disruptive leg). */
|
|
386
|
+
vector?: VectorId;
|
|
387
|
+
disruption?: DisruptionTier;
|
|
388
|
+
options?: WriteOptions;
|
|
389
|
+
occurrence?: OccurrenceResolution;
|
|
390
|
+
}): string;
|
|
315
391
|
export declare function fingerprintLabel(fp: FingerprintStatus, config: ThingsApiConfig): "ok" | "drift" | "user-accepted" | "unknown";
|
package/dist/write/pipeline.js
CHANGED
|
@@ -16,14 +16,17 @@ import { namedProjectClause, taskMembershipClause } from "../read/scope.js";
|
|
|
16
16
|
import { evaluateScope } from "./scope-guard.js";
|
|
17
17
|
import { isThingsRunning } from "./automation-probe.js";
|
|
18
18
|
import { readShortcutProxies, readUrlSchemeEnabled } from "./availability.js";
|
|
19
|
+
import { uiAllowed, uiCapability as uiCapabilityDefault, writeCapability as writeCapabilityDefault, } from "../capability.js";
|
|
19
20
|
import { COMMANDS } from "./commands.js";
|
|
20
21
|
import { describeEnvironmentChanges, diffEnvironment, } from "./environment.js";
|
|
21
|
-
import { sdefDeclaresPrivateReorder } from "./experimental.js";
|
|
22
|
+
import { privateReorderIsNoOp, sdefDeclaresPrivateReorder } from "./experimental.js";
|
|
22
23
|
import { classifyTransportFailure, classifyVerifyFailure, } from "./failure-hints.js";
|
|
23
24
|
import { evaluateGuards } from "./guards.js";
|
|
24
|
-
import { acquireMutationLock, MutationLockError } from "./lock.js";
|
|
25
|
+
import { acquireMutationLock, MutationLockError, withMutationLock, } from "./lock.js";
|
|
25
26
|
import { isHeadingTargetOp, } from "./operations.js";
|
|
27
|
+
import { assertOperationParams } from "./param-schema.js";
|
|
26
28
|
import { computeCompletionContext } from "./completion-context.js";
|
|
29
|
+
import { assessOffRuleFirst } from "./repeat-anchor.js";
|
|
27
30
|
import { planVector } from "./planner.js";
|
|
28
31
|
import { isRepeatingTemplate } from "./pre-state.js";
|
|
29
32
|
import { restoreModDates, } from "./preserve-modified.js";
|
|
@@ -150,6 +153,25 @@ async function defaultEnsureRunning(alreadyRunning, opts = {}) {
|
|
|
150
153
|
}
|
|
151
154
|
return true;
|
|
152
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* The template's PRESERVED deadline offset (`startOffsetDays`, ≤ 0) for a
|
|
158
|
+
* reschedule that carries NO deadline flag — so the off-rule-first disclosure can
|
|
159
|
+
* state the true appear/due dates the app lands (RSPA1-D). `null` when the request
|
|
160
|
+
* addresses the deadline itself (an explicit --deadline / --start-days-earlier), or
|
|
161
|
+
* the target is not a deadlined template — cases where the params already carry the
|
|
162
|
+
* shift and no preserved offset applies.
|
|
163
|
+
*/
|
|
164
|
+
function preservedDeadlineOffsetFor(pre, params) {
|
|
165
|
+
if (params.deadline !== undefined || (params.startDaysEarlier ?? 0) > 0)
|
|
166
|
+
return null;
|
|
167
|
+
const target = pre.target;
|
|
168
|
+
if (target === null || !("repeating" in target))
|
|
169
|
+
return null;
|
|
170
|
+
const rep = target.repeating;
|
|
171
|
+
if (rep.deadlined !== true)
|
|
172
|
+
return null;
|
|
173
|
+
return rep.rule?.startOffsetDays ?? 0;
|
|
174
|
+
}
|
|
153
175
|
/** Capture pre-values of asserted fields + movement tripwires for the spec. */
|
|
154
176
|
function capturePre(spec, deps, pre) {
|
|
155
177
|
// Same injected clock the write planner rides — so a captured pre-value of the
|
|
@@ -242,8 +264,51 @@ export function normalizeConsumerWhen(params, now, zone) {
|
|
|
242
264
|
`This Evening), or set this host's system time zone to the consumer's so the calendars match`,
|
|
243
265
|
};
|
|
244
266
|
}
|
|
267
|
+
/**
|
|
268
|
+
* Run a COMPOSITE — a single verb the engine executes as several mutations —
|
|
269
|
+
* under ONE mutation lock held end-to-end, so it serializes against other
|
|
270
|
+
* writers as a whole instead of leg by leg. Every leg's own
|
|
271
|
+
* `acquireMutationLock` inside `body` is a reentrant no-op (see
|
|
272
|
+
* {@link withMutationLock}); the per-leg lock stays the base case for an
|
|
273
|
+
* ordinary single mutation.
|
|
274
|
+
*
|
|
275
|
+
* Wrap only the MUTATING tail: validation, dry-run planning, and the hazard /
|
|
276
|
+
* session gates belong outside, so a refusal never takes the lock. On contention
|
|
277
|
+
* the refusal is the same `blocked` / `lock` shape the pipeline returns for a
|
|
278
|
+
* single op, carrying the composite's own op name. No audit record is written
|
|
279
|
+
* for it — unlike the single-op path, nothing was attempted, so there is no leg
|
|
280
|
+
* to record.
|
|
281
|
+
*/
|
|
282
|
+
export async function runComposite(deps, op, body,
|
|
283
|
+
/** @internal test seam — see {@link AcquireMutationLockOptions}. */
|
|
284
|
+
lockOptions = {}) {
|
|
285
|
+
try {
|
|
286
|
+
return await withMutationLock(deps.lockPath, body, lockOptions);
|
|
287
|
+
}
|
|
288
|
+
catch (err) {
|
|
289
|
+
if (err instanceof MutationLockError) {
|
|
290
|
+
return {
|
|
291
|
+
kind: "blocked",
|
|
292
|
+
op,
|
|
293
|
+
reason: "lock",
|
|
294
|
+
detail: err.message,
|
|
295
|
+
remediation: "wait for the concurrent mutation to finish and retry",
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
throw err;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
245
301
|
export async function runMutation(deps, op, params, options = {}) {
|
|
246
302
|
const startedAt = deps.now?.() ?? new Date();
|
|
303
|
+
// 0. STRUCTURAL parameter check (#580) — FIRST, before uuid-prefix resolution
|
|
304
|
+
// and before anything reads the params: an untyped caller (MCP
|
|
305
|
+
// `run_operation`'s `params` pass-through, a JavaScript caller handing over
|
|
306
|
+
// parsed JSON, `things run`) must be refused on a malformed bag rather than
|
|
307
|
+
// have the malformed field inferred as absent. Throws ParamSchemaError (a
|
|
308
|
+
// RangeError) — an input-contract refusal, so nothing is locked, dispatched, or
|
|
309
|
+
// audited. The batch surface checks the SAME registry in its static preflight,
|
|
310
|
+
// one line earlier.
|
|
311
|
+
assertOperationParams(op, params);
|
|
247
312
|
// Uuid params accept unique PREFIXES (>= 6 chars) — resolved to full uuids
|
|
248
313
|
// here so guards/compiles/audit all see canonical ids. Throws (RangeError)
|
|
249
314
|
// on unknown or ambiguous prefixes, like the title resolvers. PROJECT write
|
|
@@ -465,8 +530,25 @@ export async function runMutation(deps, op, params, options = {}) {
|
|
|
465
530
|
}
|
|
466
531
|
const { vector, effectiveTier } = plan.candidate;
|
|
467
532
|
// 4b. Experimental canary: the private sdef command can vanish in any
|
|
468
|
-
// Things update — re-check the declaration before every dispatch.
|
|
533
|
+
// Things update — re-check the declaration before every dispatch. Things
|
|
534
|
+
// 3.23 broke it WITHOUT withdrawing the declaration (it still exits 0 and
|
|
535
|
+
// changes nothing — docs/lab/gv4-323-campaign.md §3.1, which caught both
|
|
536
|
+
// `reorder` and `project.move-heading`), so a version gate stands in front
|
|
537
|
+
// of the declaration check until the behavioral canary lands.
|
|
469
538
|
if (plan.candidate.support.experimental === true) {
|
|
539
|
+
const appVersion = deps.environment?.capture().thingsVersion ?? null;
|
|
540
|
+
if (privateReorderIsNoOp(appVersion)) {
|
|
541
|
+
audit({ result: blockedCode({ reason: "environment" }) });
|
|
542
|
+
return {
|
|
543
|
+
kind: "blocked",
|
|
544
|
+
op,
|
|
545
|
+
reason: "environment",
|
|
546
|
+
detail: `Things ${appVersion} applies the private reorder command without changing ` +
|
|
547
|
+
"anything — this operation would report a failed write, so it was NOT attempted",
|
|
548
|
+
remediation: "use a non-experimental path where one exists (omit --strategy so the " +
|
|
549
|
+
"bounce/move fallbacks run), or reorder the items in the app",
|
|
550
|
+
};
|
|
551
|
+
}
|
|
470
552
|
const declared = (deps.sdefProbe ?? sdefDeclaresPrivateReorder)();
|
|
471
553
|
if (!declared) {
|
|
472
554
|
audit({ result: blockedCode({ reason: "environment" }) });
|
|
@@ -514,6 +596,14 @@ export async function runMutation(deps, op, params, options = {}) {
|
|
|
514
596
|
...(effectiveZone !== undefined && { zone: effectiveZone }),
|
|
515
597
|
});
|
|
516
598
|
if (options.dryRun === true) {
|
|
599
|
+
// DACON1: preview the off-rule-first disclosure so --dry-run states the same
|
|
600
|
+
// two-phase pattern the executed write would (the dishonored monthly shape is
|
|
601
|
+
// already refused before reaching here).
|
|
602
|
+
const planNotes = [];
|
|
603
|
+
const dryRuleParams = params;
|
|
604
|
+
const dryOffRule = assessOffRuleFirst(dryRuleParams, preservedDeadlineOffsetFor(pre, dryRuleParams));
|
|
605
|
+
if (dryOffRule?.kind === "honored")
|
|
606
|
+
planNotes.push(dryOffRule.disclosure.message);
|
|
517
607
|
return {
|
|
518
608
|
kind: "dry-run",
|
|
519
609
|
op,
|
|
@@ -524,6 +614,7 @@ export async function runMutation(deps, op, params, options = {}) {
|
|
|
524
614
|
invocation: invocation.redactedPayload,
|
|
525
615
|
expectedDelta: delta,
|
|
526
616
|
hazardsChecked: spec.hazards,
|
|
617
|
+
...(planNotes.length > 0 && { notes: planNotes }),
|
|
527
618
|
},
|
|
528
619
|
};
|
|
529
620
|
}
|
|
@@ -587,7 +678,60 @@ export async function runMutation(deps, op, params, options = {}) {
|
|
|
587
678
|
reason: "environment",
|
|
588
679
|
detail: `the Things proxy shortcut "${invocation.shortcut}" is not installed — this ` +
|
|
589
680
|
"operation is delivered through it",
|
|
590
|
-
remediation: "run `things setup
|
|
681
|
+
remediation: "run `things setup` to install the proxy shortcuts, then retry",
|
|
682
|
+
};
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
// 5c. THE WRITE GATE (docs/design/permissions-doctrine.md, Articles I+II).
|
|
686
|
+
// The AppleScript vector sends a real Apple Event, and on a machine macOS
|
|
687
|
+
// has no consent record for, that event IS the dialog. So the standing is
|
|
688
|
+
// established prompt-free first — the deputy's own handshake when it is
|
|
689
|
+
// onboarded, the host app's Automation record otherwise — and anything
|
|
690
|
+
// short of a grant refuses here, before the app is touched. An unknown
|
|
691
|
+
// standing is NOT resolved by trying: that is what `things setup` is for.
|
|
692
|
+
if (vector.sendsAppleEvents === true && vector.simulates !== true) {
|
|
693
|
+
const capability = (deps.writeCapability ?? (() => writeCapabilityDefault()))();
|
|
694
|
+
if (capability.mode === "direct-denied" || capability.mode === "direct-unknown") {
|
|
695
|
+
audit({
|
|
696
|
+
result: blockedCode({ reason: "environment" }),
|
|
697
|
+
vector: vector.id,
|
|
698
|
+
disruption: effectiveTier,
|
|
699
|
+
invocation: invocation.redactedPayload,
|
|
700
|
+
});
|
|
701
|
+
return {
|
|
702
|
+
kind: "blocked",
|
|
703
|
+
op,
|
|
704
|
+
reason: "environment",
|
|
705
|
+
detail: `this operation drives the Things app, and ${capability.detail}`,
|
|
706
|
+
remediation: capability.remediation.join("; "),
|
|
707
|
+
};
|
|
708
|
+
}
|
|
709
|
+
}
|
|
710
|
+
// 5d. THE GUI GATE (docs/design/permissions-doctrine.md, Article IV).
|
|
711
|
+
// Driving the Things window needs Accessibility + Automation → System
|
|
712
|
+
// Events, and those are granted to the HELPER PAIR and to nothing else: on
|
|
713
|
+
// a machine holding neither, the first AX call raises an Accessibility
|
|
714
|
+
// prompt against whatever host app happens to be running us, which is the
|
|
715
|
+
// banned outcome. So standing is established prompt-free (the config key
|
|
716
|
+
// plus the deputy's own handshake) and anything short of it refuses here,
|
|
717
|
+
// naming exactly what is missing. Keyed on the vector's DECLARATION, never
|
|
718
|
+
// on its id — a fake substituted under "ui" drives no GUI and must not be
|
|
719
|
+
// gated on the developer's own TCC state.
|
|
720
|
+
if (vector.drivesGui === true && vector.simulates !== true) {
|
|
721
|
+
const capability = (deps.uiCapability ?? (() => uiCapabilityDefault()))();
|
|
722
|
+
if (!uiAllowed(capability)) {
|
|
723
|
+
audit({
|
|
724
|
+
result: blockedCode({ reason: "environment" }),
|
|
725
|
+
vector: vector.id,
|
|
726
|
+
disruption: effectiveTier,
|
|
727
|
+
invocation: invocation.redactedPayload,
|
|
728
|
+
});
|
|
729
|
+
return {
|
|
730
|
+
kind: "blocked",
|
|
731
|
+
op,
|
|
732
|
+
reason: "environment",
|
|
733
|
+
detail: `this operation drives the Things window, and ${capability.detail}`,
|
|
734
|
+
remediation: capability.remediation.join("; "),
|
|
591
735
|
};
|
|
592
736
|
}
|
|
593
737
|
}
|
|
@@ -765,6 +909,47 @@ export async function runMutation(deps, op, params, options = {}) {
|
|
|
765
909
|
...(wd.tracePath != null && wd.tracePath !== "" && { tracePath: wd.tracePath }),
|
|
766
910
|
};
|
|
767
911
|
}
|
|
912
|
+
// The ui drive stopped because the Things WINDOW stopped answering
|
|
913
|
+
// (#512): the session went AX-blind mid-drive, or a step was killed by
|
|
914
|
+
// its own deadline. The re-verify above just proved nothing landed, so
|
|
915
|
+
// this is an ENVIRONMENT failure — reported as such, naming the step
|
|
916
|
+
// that stopped and how to make a retry work. It is NOT
|
|
917
|
+
// `silent-noop`, whose meaning ("the app accepted the command and
|
|
918
|
+
// changed nothing") tells a caller the app was reachable and it is safe
|
|
919
|
+
// to look for a rejected parameter. The reachability GATES refuse this
|
|
920
|
+
// shape before a mutation whenever the session is already blind; this
|
|
921
|
+
// branch is for a session that degrades under a running drive.
|
|
922
|
+
const unreachable = executeResult.uiUnreachable;
|
|
923
|
+
if (unreachable !== undefined) {
|
|
924
|
+
audit({
|
|
925
|
+
result: verifyFailedCode({ reason: "ui-unreachable" }),
|
|
926
|
+
vector: vector.id,
|
|
927
|
+
disruption: effectiveTier,
|
|
928
|
+
invocation: invocation.redactedPayload,
|
|
929
|
+
pre: flattenPreFields(preCapture.fields),
|
|
930
|
+
observed: recovery.observed,
|
|
931
|
+
});
|
|
932
|
+
return {
|
|
933
|
+
kind: "verify-failed",
|
|
934
|
+
op,
|
|
935
|
+
reason: "ui-unreachable",
|
|
936
|
+
expected: delta,
|
|
937
|
+
observed: recovery.observed,
|
|
938
|
+
detail: `the Things window could not be driven: the drive stopped at step ` +
|
|
939
|
+
`"${unreachable.step}" because ` +
|
|
940
|
+
(unreachable.cause === "unreachable"
|
|
941
|
+
? "no Things window was reachable on the screen you're viewing (the Mac is locked, " +
|
|
942
|
+
"or a full-screen app is covering the desktop)"
|
|
943
|
+
: "Things did not answer that step before its deadline") +
|
|
944
|
+
". A follow-up re-read found no change, so nothing landed" +
|
|
945
|
+
(unreachable.clear === "may-remain"
|
|
946
|
+
? "; a sheet or popover may still be open in Things — dismiss it before retrying"
|
|
947
|
+
: "") +
|
|
948
|
+
".",
|
|
949
|
+
likelyCause: "ui-unreachable",
|
|
950
|
+
hint: unreachable.remediation,
|
|
951
|
+
};
|
|
952
|
+
}
|
|
768
953
|
audit({
|
|
769
954
|
result: verifyFailedCode({ reason: "silent-noop" }),
|
|
770
955
|
vector: vector.id,
|
|
@@ -910,6 +1095,17 @@ export async function runMutation(deps, op, params, options = {}) {
|
|
|
910
1095
|
}
|
|
911
1096
|
if (outcome.repeatingWarnings !== undefined)
|
|
912
1097
|
warnings.push(...outcome.repeatingWarnings);
|
|
1098
|
+
// DACON1 off-rule-first disclosure (reschedule-repeat): an explicit anchor
|
|
1099
|
+
// that disagrees with --when lands an OFF-RULE first occurrence (honored for
|
|
1100
|
+
// weekly/yearly). State both halves of the landed pattern; the dishonored
|
|
1101
|
+
// monthly shape was already refused at validation. (make/add-repeating carry
|
|
1102
|
+
// their own disclosure via the promote result.)
|
|
1103
|
+
if (op === "todo.reschedule-repeat" || op === "project.reschedule-repeat") {
|
|
1104
|
+
const offRuleParams = params;
|
|
1105
|
+
const offRule = assessOffRuleFirst(offRuleParams, preservedDeadlineOffsetFor(pre, offRuleParams));
|
|
1106
|
+
if (offRule?.kind === "honored")
|
|
1107
|
+
warnings.push(offRule.disclosure.message);
|
|
1108
|
+
}
|
|
913
1109
|
// #V11 heading-reorder disclosure: re-ranking an archived heading also
|
|
914
1110
|
// un-archives it (status→open). Never silent — name every reopened heading.
|
|
915
1111
|
if (pre.headingMove !== null && pre.headingMove.reopened.length > 0) {
|
|
@@ -1005,6 +1201,12 @@ export async function runMutation(deps, op, params, options = {}) {
|
|
|
1005
1201
|
* uses (only for a non-leg, reversible op — an irreversible op or a batch leg
|
|
1006
1202
|
* carries none), and `title` rides `requested.title` when the record stored one
|
|
1007
1203
|
* (the audit record has no dedicated title field — see the trail-record note).
|
|
1204
|
+
*
|
|
1205
|
+
* A template-target composite's summary record additionally stored WHICH
|
|
1206
|
+
* occurrence it wrote ({@link OccurrenceResolution}); that rides back verbatim,
|
|
1207
|
+
* so a retry that replays instead of executing still names the same two uuids
|
|
1208
|
+
* the original call returned — the whole point of putting an `opId` on a verb
|
|
1209
|
+
* that would otherwise mint a second occurrence.
|
|
1008
1210
|
*/
|
|
1009
1211
|
export function replayResultFromRecord(record) {
|
|
1010
1212
|
const op = record.op;
|
|
@@ -1029,9 +1231,52 @@ export function replayResultFromRecord(record) {
|
|
|
1029
1231
|
vector: (record.vector ?? "url-scheme"),
|
|
1030
1232
|
tier: (record.disruption ?? 0),
|
|
1031
1233
|
...(token !== undefined && { undoToken: token }),
|
|
1234
|
+
...(record.occurrence !== undefined && { occurrence: record.occurrence }),
|
|
1032
1235
|
alreadyApplied: true,
|
|
1033
1236
|
};
|
|
1034
1237
|
}
|
|
1238
|
+
/**
|
|
1239
|
+
* Append a COMPOSITE's summary record — the single record that stands for a
|
|
1240
|
+
* multi-leg verb on the trail. It is what `undo` targets (the legs are excluded
|
|
1241
|
+
* from direct targeting) and, when the caller supplied one, the ONE record that
|
|
1242
|
+
* carries the composite's `opId`, so a resubmission matches the whole verb
|
|
1243
|
+
* exactly once instead of matching a leg (or nothing at all).
|
|
1244
|
+
*
|
|
1245
|
+
* Shared by both composite families — the resolution-timestamp flip-dance
|
|
1246
|
+
* (resolution-timestamps.ts) and the template-target CNC composites
|
|
1247
|
+
* (template-mutation.ts) — so the two cannot drift on what a summary record
|
|
1248
|
+
* looks like.
|
|
1249
|
+
*/
|
|
1250
|
+
export function appendCompositeSummary(deps, args) {
|
|
1251
|
+
const fp = deps.fingerprint();
|
|
1252
|
+
const record = {
|
|
1253
|
+
v: 1,
|
|
1254
|
+
ts: args.startedAt.toISOString(),
|
|
1255
|
+
actor: args.options?.actor ?? deps.config.actor,
|
|
1256
|
+
host: deps.config.host,
|
|
1257
|
+
op: args.op,
|
|
1258
|
+
uuid: args.uuid,
|
|
1259
|
+
vector: args.vector ?? "applescript",
|
|
1260
|
+
disruption: args.disruption ?? 0,
|
|
1261
|
+
invocation: args.invocation,
|
|
1262
|
+
requested: args.requested ?? {},
|
|
1263
|
+
txn: { id: args.txnId, role: "summary" },
|
|
1264
|
+
...(args.options?.opId !== undefined && { opId: args.options.opId }),
|
|
1265
|
+
...(args.occurrence !== undefined && { occurrence: args.occurrence }),
|
|
1266
|
+
pre: null,
|
|
1267
|
+
observed: { uuid: args.uuid },
|
|
1268
|
+
result: "ok",
|
|
1269
|
+
verify: null,
|
|
1270
|
+
durationMs: (deps.now?.() ?? new Date()).getTime() - args.startedAt.getTime(),
|
|
1271
|
+
env: {
|
|
1272
|
+
pkg: deps.pkgVersion ?? "0.0.1",
|
|
1273
|
+
dbVersion: fp.observation.databaseVersion,
|
|
1274
|
+
fingerprint: fingerprintLabel(fp, deps.config),
|
|
1275
|
+
},
|
|
1276
|
+
};
|
|
1277
|
+
deps.audit.append(record);
|
|
1278
|
+
return args.txnId;
|
|
1279
|
+
}
|
|
1035
1280
|
export function fingerprintLabel(fp, config) {
|
|
1036
1281
|
if (fp.kind === "ok")
|
|
1037
1282
|
return "ok";
|