things-api 0.14.0 → 0.16.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 +4 -4
- package/dist/audit/schema.d.ts +8 -0
- package/dist/audit/schema.js.map +1 -1
- package/dist/cli/commands/area.js +1 -1
- package/dist/cli/commands/install-skill.js +9 -2
- package/dist/cli/commands/install-skill.js.map +1 -1
- package/dist/cli/commands/project.js +1 -1
- package/dist/cli/commands/project.js.map +1 -1
- package/dist/cli/commands/reads.js +73 -4
- package/dist/cli/commands/reads.js.map +1 -1
- package/dist/cli/commands/repeat-flags.d.ts +11 -1
- package/dist/cli/commands/repeat-flags.js +23 -0
- package/dist/cli/commands/repeat-flags.js.map +1 -1
- package/dist/cli/commands/todo.js +50 -3
- package/dist/cli/commands/todo.js.map +1 -1
- package/dist/cli/commands/writes.js +202 -61
- package/dist/cli/commands/writes.js.map +1 -1
- package/dist/cli/glyphs.js +9 -10
- package/dist/cli/glyphs.js.map +1 -1
- package/dist/cli/help.js +18 -13
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/read-driver.d.ts +9 -3
- package/dist/cli/read-driver.js +3 -1
- package/dist/cli/read-driver.js.map +1 -1
- package/dist/cli/render.d.ts +33 -2
- package/dist/cli/render.js +60 -9
- package/dist/cli/render.js.map +1 -1
- package/dist/cli/skill.d.ts +24 -0
- package/dist/cli/skill.js +40 -0
- package/dist/cli/skill.js.map +1 -1
- package/dist/client.d.ts +88 -15
- package/dist/client.js +31 -5
- package/dist/client.js.map +1 -1
- package/dist/contracts.d.ts +13 -2
- package/dist/contracts.js +1 -1
- package/dist/contracts.js.map +1 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.js +187 -36
- package/dist/mcp/server.js.map +1 -1
- package/dist/model/entities.d.ts +97 -40
- package/dist/model/entities.js +0 -4
- package/dist/model/entities.js.map +1 -1
- package/dist/model/mappers.js +24 -43
- package/dist/model/mappers.js.map +1 -1
- package/dist/read/area-view.js +6 -6
- package/dist/read/area-view.js.map +1 -1
- package/dist/read/detail.js +51 -3
- package/dist/read/detail.js.map +1 -1
- package/dist/read/filter-contract.d.ts +1 -1
- package/dist/read/filter-contract.js +3 -0
- package/dist/read/filter-contract.js.map +1 -1
- package/dist/read/log-boundary.d.ts +46 -2
- package/dist/read/log-boundary.js +43 -2
- package/dist/read/log-boundary.js.map +1 -1
- package/dist/read/predicates.d.ts +13 -0
- package/dist/read/predicates.js +13 -0
- package/dist/read/predicates.js.map +1 -1
- package/dist/read/project-view.js +5 -5
- package/dist/read/project-view.js.map +1 -1
- package/dist/read/queries.d.ts +12 -0
- package/dist/read/queries.js +14 -0
- package/dist/read/queries.js.map +1 -1
- package/dist/read/search-rank.js +2 -2
- package/dist/read/search-rank.js.map +1 -1
- package/dist/read/shape.d.ts +30 -26
- package/dist/read/shape.js +130 -101
- package/dist/read/shape.js.map +1 -1
- package/dist/read/snapshot.js +2 -2
- package/dist/read/snapshot.js.map +1 -1
- package/dist/read/stage.d.ts +36 -18
- package/dist/read/stage.js +30 -13
- package/dist/read/stage.js.map +1 -1
- package/dist/read/views.d.ts +62 -0
- package/dist/read/views.js +134 -14
- package/dist/read/views.js.map +1 -1
- package/dist/surface-copy.d.ts +2 -2
- package/dist/surface-copy.js +2 -2
- package/dist/write/batch.d.ts +28 -3
- package/dist/write/batch.js +162 -46
- package/dist/write/batch.js.map +1 -1
- package/dist/write/clear-reminder.js +3 -1
- package/dist/write/clear-reminder.js.map +1 -1
- package/dist/write/clone.d.ts +4 -0
- package/dist/write/clone.js +531 -0
- package/dist/write/clone.js.map +1 -0
- package/dist/write/commands.js +196 -29
- package/dist/write/commands.js.map +1 -1
- package/dist/write/guards.d.ts +1 -1
- package/dist/write/guards.js +44 -12
- package/dist/write/guards.js.map +1 -1
- package/dist/write/make-repeating-project.d.ts +2 -3
- package/dist/write/make-repeating-project.js +2 -73
- package/dist/write/make-repeating-project.js.map +1 -1
- package/dist/write/move.js +53 -1
- package/dist/write/move.js.map +1 -1
- package/dist/write/operations.d.ts +134 -11
- package/dist/write/operations.js +5 -1
- package/dist/write/operations.js.map +1 -1
- package/dist/write/pipeline.d.ts +38 -0
- package/dist/write/pipeline.js +71 -6
- package/dist/write/pipeline.js.map +1 -1
- package/dist/write/pre-state.d.ts +41 -0
- package/dist/write/pre-state.js +71 -8
- package/dist/write/pre-state.js.map +1 -1
- package/dist/write/preserve-modified.d.ts +55 -0
- package/dist/write/preserve-modified.js +106 -0
- package/dist/write/preserve-modified.js.map +1 -0
- package/dist/write/promote-clone.d.ts +32 -0
- package/dist/write/promote-clone.js +620 -0
- package/dist/write/promote-clone.js.map +1 -0
- package/dist/write/reorder.js +49 -2
- package/dist/write/reorder.js.map +1 -1
- package/dist/write/resolution-timestamps.js +29 -7
- package/dist/write/resolution-timestamps.js.map +1 -1
- package/dist/write/reversibility.js +32 -14
- package/dist/write/reversibility.js.map +1 -1
- package/dist/write/scope-guard.js +2 -0
- package/dist/write/scope-guard.js.map +1 -1
- package/dist/write/undo.d.ts +12 -2
- package/dist/write/undo.js +145 -22
- package/dist/write/undo.js.map +1 -1
- package/dist/write/vectors/applescript.js +9 -0
- package/dist/write/vectors/applescript.js.map +1 -1
- package/dist/write/vectors/simulator.js +242 -10
- package/dist/write/vectors/simulator.js.map +1 -1
- package/dist/write/vectors/ui-certification.d.ts +1 -1
- package/dist/write/vectors/ui-certification.js +10 -3
- package/dist/write/vectors/ui-certification.js.map +1 -1
- package/dist/write/verify/delta.d.ts +55 -10
- package/dist/write/verify/delta.js +73 -10
- package/dist/write/verify/delta.js.map +1 -1
- package/package.json +1 -1
- package/schema/envelope.schema.json +25 -0
- package/skills/things-cli/SKILL.md +10 -7
- package/skills/things-cli/references/banner.md +1 -1
- package/skills/things-cli/references/contracts.md +17 -9
- package/skills/things-cli/references/{model.md → data-model.md} +5 -2
- package/skills/things-cli/references/ordering.md +2 -0
|
@@ -79,7 +79,9 @@ function proxiesInstalled(deps) {
|
|
|
79
79
|
async function runBounce(deps, uuid, target, options) {
|
|
80
80
|
const startedAt = deps.now?.() ?? new Date();
|
|
81
81
|
const originalDate = target !== null && target.type === "to-do" ? target.startDate : null;
|
|
82
|
-
|
|
82
|
+
// The RAW stored byte (top-level `reminder` is live-gated; a stale-but-revivable
|
|
83
|
+
// reminder must still be captured for restore and drive the bounce, §9n).
|
|
84
|
+
const preReminder = target !== null && target.type === "to-do" ? target.derived.reminder : null;
|
|
83
85
|
if (originalDate === null || preReminder === null) {
|
|
84
86
|
// The guard above already ruled these out; defensive only.
|
|
85
87
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clear-reminder.js","sourceRoot":"","sources":["../../src/write/clear-reminder.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"clear-reminder.js","sourceRoot":"","sources":["../../src/write/clear-reminder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CloneParams } from "./operations.ts";
|
|
2
|
+
import { type MutationResult, type WriteDeps, type WriteOptions } from "./pipeline.ts";
|
|
3
|
+
export declare function runCloneTodo(deps: WriteDeps, params: CloneParams, options?: WriteOptions): Promise<MutationResult>;
|
|
4
|
+
export declare function runCloneProject(deps: WriteDeps, params: CloneParams, options?: WriteOptions): Promise<MutationResult>;
|
|
@@ -0,0 +1,531 @@
|
|
|
1
|
+
import { byUuid } from "../read/detail.js";
|
|
2
|
+
import { projectChildren } from "./pre-state.js";
|
|
3
|
+
import { projectView } from "../read/project-view.js";
|
|
4
|
+
import { resolveProjectWriteTarget, resolveTaskUuidPrefix } from "../read/queries.js";
|
|
5
|
+
import { entityStage, entityWhen } from "../read/stage.js";
|
|
6
|
+
import { cloneTemplateViaRepromote } from "./promote-clone.js";
|
|
7
|
+
import { fingerprintLabel, runMutation, } from "./pipeline.js";
|
|
8
|
+
// --------------------------------------------------------------- small helpers
|
|
9
|
+
function newTxnId(now) {
|
|
10
|
+
return `txn-${now.getTime().toString(36)}-${process.pid.toString(36)}`;
|
|
11
|
+
}
|
|
12
|
+
function legOptions(base, txnId, vector, extra) {
|
|
13
|
+
const out = { txn: { id: txnId, role: "leg" }, vector, ...extra };
|
|
14
|
+
if (base.actor !== undefined)
|
|
15
|
+
out.actor = base.actor;
|
|
16
|
+
if (base.verifyTimeoutMs !== undefined)
|
|
17
|
+
out.verifyTimeoutMs = base.verifyTimeoutMs;
|
|
18
|
+
if (base.maxDisruption !== undefined)
|
|
19
|
+
out.maxDisruption = base.maxDisruption;
|
|
20
|
+
if (base.zone !== undefined)
|
|
21
|
+
out.zone = base.zone;
|
|
22
|
+
return out;
|
|
23
|
+
}
|
|
24
|
+
function blocked(op, detail, remediation) {
|
|
25
|
+
return { kind: "blocked", op, reason: "hazard", hazard: "H-CLONE-SOURCE", detail, remediation };
|
|
26
|
+
}
|
|
27
|
+
/** A create-mode delta for the dry-run plan (verification proper rides each leg). */
|
|
28
|
+
function createDelta(title, type) {
|
|
29
|
+
return { mode: "create", probe: { title, type, sinceEpoch: 0 }, assert: [] };
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Format an instant as a wall-clock `YYYY-MM-DDTHH:mm` in the effective zone
|
|
33
|
+
* (MINUTE resolution — the disclosed precision) so the resolution-timestamp path
|
|
34
|
+
* (`resolveResolutionInstant`, which reads a datetime as wall-clock IN the zone)
|
|
35
|
+
* reconstructs the same instant. Zone undefined = the app-host zone.
|
|
36
|
+
*/
|
|
37
|
+
function localMinute(instant, zone) {
|
|
38
|
+
const parts = Object.fromEntries(new Intl.DateTimeFormat("en-CA", {
|
|
39
|
+
...(zone !== undefined && { timeZone: zone }),
|
|
40
|
+
year: "numeric",
|
|
41
|
+
month: "2-digit",
|
|
42
|
+
day: "2-digit",
|
|
43
|
+
hour: "2-digit",
|
|
44
|
+
minute: "2-digit",
|
|
45
|
+
hourCycle: "h23",
|
|
46
|
+
})
|
|
47
|
+
.formatToParts(instant)
|
|
48
|
+
.map((p) => [p.type, p.value]));
|
|
49
|
+
return `${parts["year"]}-${parts["month"]}-${parts["day"]}T${parts["hour"]}:${parts["minute"]}`;
|
|
50
|
+
}
|
|
51
|
+
/** The real deadline, or undefined for a null / template-sentinel value. */
|
|
52
|
+
function realDeadline(deadline) {
|
|
53
|
+
return deadline !== null && deadline < "4000" ? deadline : undefined;
|
|
54
|
+
}
|
|
55
|
+
/** The `when` to reproduce for an OPEN item (someday is a stage, not a `when`). */
|
|
56
|
+
function scheduleWhen(item) {
|
|
57
|
+
if (entityStage(item) === "someday")
|
|
58
|
+
return "someday";
|
|
59
|
+
return entityWhen(item);
|
|
60
|
+
}
|
|
61
|
+
function isDatedWhen(when) {
|
|
62
|
+
return (when === "today" ||
|
|
63
|
+
when === "evening" ||
|
|
64
|
+
(typeof when === "string" && /^\d{4}-\d{2}-\d{2}$/.test(when)));
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* The item reminder to reproduce on an OPEN, dated source — the `when` it must be
|
|
68
|
+
* re-supplied with (a reminder requires a schedulable `when` in the same call,
|
|
69
|
+
* H-REMINDER-SCOPE) and the `HH:mm` byte. `undefined` when there is nothing to
|
|
70
|
+
* reproduce (resolved item, undated `when`, or no reminder). This is the same
|
|
71
|
+
* predicate {@link todoAddParams} uses to decide whether the base add carries a
|
|
72
|
+
* reminder — factored out so the caller can sequence it into a SEPARATE leg when
|
|
73
|
+
* it would otherwise collide with a backdated `createdAt` (see runCloneTodo).
|
|
74
|
+
*/
|
|
75
|
+
function reproducibleReminder(src) {
|
|
76
|
+
if (src.status !== "open")
|
|
77
|
+
return undefined;
|
|
78
|
+
const when = scheduleWhen(src);
|
|
79
|
+
if (!isDatedWhen(when) || when === undefined || src.derived.reminder === null)
|
|
80
|
+
return undefined;
|
|
81
|
+
return { when, reminder: src.derived.reminder };
|
|
82
|
+
}
|
|
83
|
+
/** Run one cataloged leg; carries a human describe for disclosure/recovery. */
|
|
84
|
+
async function runLeg(deps, op, params, options, describe) {
|
|
85
|
+
const result = await runMutation(deps, op, params, options);
|
|
86
|
+
return { result, describe };
|
|
87
|
+
}
|
|
88
|
+
/** A leg that did not verify: honest recovery report naming the minted clone. */
|
|
89
|
+
function legFailure(op, cloneUuid, legs, failed, finalDelta) {
|
|
90
|
+
const r = failed.result;
|
|
91
|
+
return {
|
|
92
|
+
kind: "verify-failed",
|
|
93
|
+
op,
|
|
94
|
+
reason: r.kind === "verify-failed" ? r.reason : "mismatch",
|
|
95
|
+
expected: finalDelta,
|
|
96
|
+
observed: r.kind === "verify-failed" ? r.observed : null,
|
|
97
|
+
detail: `the clone was created (uuid ${cloneUuid}) but a follow-up leg failed — ${failed.describe}: ` +
|
|
98
|
+
`${r.kind === "blocked" ? r.detail : "did not verify"}. Applied so far: ` +
|
|
99
|
+
`${legs.join("; ") || "the base copy only"}. Trash the partial clone with ` +
|
|
100
|
+
`${op === "project.clone" ? "`things project delete`" : "`things todo delete`"} ${cloneUuid} and retry`,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
// ------------------------------------------------------------------ audit tail
|
|
104
|
+
function appendSummary(deps, args) {
|
|
105
|
+
const fp = deps.fingerprint();
|
|
106
|
+
const record = {
|
|
107
|
+
v: 1,
|
|
108
|
+
ts: args.startedAt.toISOString(),
|
|
109
|
+
actor: deps.config.actor,
|
|
110
|
+
host: deps.config.host,
|
|
111
|
+
op: args.op,
|
|
112
|
+
uuid: args.uuid,
|
|
113
|
+
vector: "url-scheme",
|
|
114
|
+
disruption: 0,
|
|
115
|
+
invocation: args.invocation,
|
|
116
|
+
requested: { source: args.source, mintedChildren: args.mintedChildren },
|
|
117
|
+
txn: { id: args.txnId, role: args.role ?? "summary" },
|
|
118
|
+
pre: null,
|
|
119
|
+
observed: { uuid: args.uuid, mintedChildren: args.mintedChildren },
|
|
120
|
+
result: "ok",
|
|
121
|
+
verify: null,
|
|
122
|
+
durationMs: (deps.now?.() ?? new Date()).getTime() - args.startedAt.getTime(),
|
|
123
|
+
env: {
|
|
124
|
+
pkg: deps.pkgVersion ?? "0.0.1",
|
|
125
|
+
dbVersion: fp.observation.databaseVersion,
|
|
126
|
+
fingerprint: fingerprintLabel(fp, deps.config),
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
deps.audit.append(record);
|
|
130
|
+
}
|
|
131
|
+
// ============================================================== todo.clone
|
|
132
|
+
/**
|
|
133
|
+
* The base `todo.add` params reproducing a source to-do's content (born OPEN).
|
|
134
|
+
* `omitReminder` drops the reproduced reminder from THIS add — used when the copy
|
|
135
|
+
* also backdates its creation (`--preserve-created`), because a single add cannot
|
|
136
|
+
* carry both `reminder` and `createdAt` (the json import forbids it,
|
|
137
|
+
* commands.ts assertAddTimestamps); the caller then reproduces the reminder in a
|
|
138
|
+
* separate `todo.update` leg.
|
|
139
|
+
*/
|
|
140
|
+
function todoAddParams(src, title, preserveCreated, zone, omitReminder, templateContent) {
|
|
141
|
+
const resolved = src.status !== "open";
|
|
142
|
+
// A TEMPLATE cloned as plain content carries NO schedule/reminder — the
|
|
143
|
+
// recurrence (and the "starting" date) come from the promote leg that follows,
|
|
144
|
+
// so the plain clone is born unscheduled (from-scratch add-repeating semantics).
|
|
145
|
+
const when = resolved || templateContent ? undefined : scheduleWhen(src);
|
|
146
|
+
const reminder = !omitReminder &&
|
|
147
|
+
!templateContent &&
|
|
148
|
+
!resolved &&
|
|
149
|
+
isDatedWhen(when) &&
|
|
150
|
+
src.derived.reminder !== null
|
|
151
|
+
? src.derived.reminder
|
|
152
|
+
: undefined;
|
|
153
|
+
const deadline = realDeadline(src.deadline);
|
|
154
|
+
const checklist = src.checklist ?? [];
|
|
155
|
+
const anyChecked = checklist.some((c) => c.status === "completed");
|
|
156
|
+
// Birth checklist titles here ONLY when nothing is checked; a checklist with
|
|
157
|
+
// checked items is (re)born pre-checked by the follow-up replace leg (P18).
|
|
158
|
+
const checklistTitles = checklist.length > 0 && !anyChecked ? checklist.map((c) => c.title) : undefined;
|
|
159
|
+
const container = {};
|
|
160
|
+
if (src.heading !== null && src.headingProject !== undefined) {
|
|
161
|
+
container["project"] = { uuid: src.headingProject.uuid };
|
|
162
|
+
container["heading"] = src.heading.title;
|
|
163
|
+
}
|
|
164
|
+
else if (src.project !== null) {
|
|
165
|
+
container["project"] = { uuid: src.project.uuid };
|
|
166
|
+
}
|
|
167
|
+
else if (src.area !== null) {
|
|
168
|
+
container["area"] = { uuid: src.area.uuid };
|
|
169
|
+
}
|
|
170
|
+
return {
|
|
171
|
+
title,
|
|
172
|
+
...(src.notes !== "" && { notes: src.notes }),
|
|
173
|
+
...(src.tags.length > 0 && { tags: src.tags.map((t) => t.title) }),
|
|
174
|
+
...(when !== undefined && { when }),
|
|
175
|
+
...(reminder !== undefined && { reminder }),
|
|
176
|
+
...(deadline !== undefined && { deadline }),
|
|
177
|
+
...(checklistTitles !== undefined && { checklistItems: checklistTitles }),
|
|
178
|
+
...container,
|
|
179
|
+
...(preserveCreated && { createdAt: localMinute(src.created, zone) }),
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
export async function runCloneTodo(deps, params, options = {}) {
|
|
183
|
+
const srcUuid = resolveTaskUuidPrefix(deps.db, params.uuid, "to-do");
|
|
184
|
+
const src = byUuid(deps.db, srcUuid, deps.now?.() ?? new Date(), deps.zone);
|
|
185
|
+
if (src === null || src.type !== "to-do") {
|
|
186
|
+
return blocked("todo.clone", "the source is not a to-do (todo.clone copies a to-do)", "verify the uuid with `things show <uuid>`, or use `things project clone` for a project");
|
|
187
|
+
}
|
|
188
|
+
if (src.derived.trashed) {
|
|
189
|
+
return blocked("todo.clone", "the source to-do is in the Trash — a trashed item cannot be cloned", "restore it first with `things todo restore <uuid>`, then clone");
|
|
190
|
+
}
|
|
191
|
+
if (src.repeating.isTemplate && options.cloneTemplateAsPlain !== true) {
|
|
192
|
+
// Cloning a repeating template = clone its content as a PLAIN item, then
|
|
193
|
+
// native-promote the clone with the SOURCE's decoded rule (a NEW series
|
|
194
|
+
// identity; no instances cloned). The compound sets cloneTemplateAsPlain on
|
|
195
|
+
// the embedded clone leg to reach the plain-content path below.
|
|
196
|
+
return cloneTemplateViaRepromote(deps, "todo", src, srcUuid, params, options);
|
|
197
|
+
}
|
|
198
|
+
const templateContent = src.repeating.isTemplate; // reached only in plain mode
|
|
199
|
+
const title = params.title ?? src.title;
|
|
200
|
+
const preserveCreated = params.preserveCreated === true;
|
|
201
|
+
const zone = options.zone ?? deps.zone;
|
|
202
|
+
const finalDelta = createDelta(title, "to-do");
|
|
203
|
+
// A reminder + a backdated creationDate cannot ride ONE add (the json import
|
|
204
|
+
// forbids the pair, commands.ts assertAddTimestamps). When both apply, the
|
|
205
|
+
// base add carries createdAt only and the reminder is reproduced in a
|
|
206
|
+
// follow-up `todo.update` leg (still inside the clone txn).
|
|
207
|
+
const reminderSplit = preserveCreated && !templateContent ? reproducibleReminder(src) : undefined;
|
|
208
|
+
if (options.dryRun === true) {
|
|
209
|
+
const checklist = src.checklist ?? [];
|
|
210
|
+
const steps = [
|
|
211
|
+
"todo.add (title, notes, tags, when" +
|
|
212
|
+
(reminderSplit === undefined ? ", reminder" : "") +
|
|
213
|
+
", deadline, checklist, container" +
|
|
214
|
+
(preserveCreated ? ", created-at" : "") +
|
|
215
|
+
")",
|
|
216
|
+
...(reminderSplit !== undefined ? ["todo.update (reproduce reminder)"] : []),
|
|
217
|
+
...(checklist.some((c) => c.status === "completed")
|
|
218
|
+
? ["todo.replace-checklist (reproduce checked items)"]
|
|
219
|
+
: []),
|
|
220
|
+
...(src.status === "completed"
|
|
221
|
+
? ["todo.complete + set-dates (reproduce logged state + stopDate)"]
|
|
222
|
+
: src.status === "canceled"
|
|
223
|
+
? ["todo.complete + set-dates + cancel (reproduce canceled state + stopDate)"]
|
|
224
|
+
: []),
|
|
225
|
+
];
|
|
226
|
+
return {
|
|
227
|
+
kind: "dry-run",
|
|
228
|
+
op: "todo.clone",
|
|
229
|
+
plan: {
|
|
230
|
+
op: "todo.clone",
|
|
231
|
+
vector: "url-scheme",
|
|
232
|
+
tier: 0,
|
|
233
|
+
invocation: `${steps.length}-leg clone (not atomic): ${steps.join(" → ")}`,
|
|
234
|
+
expectedDelta: finalDelta,
|
|
235
|
+
hazardsChecked: ["H-CLONE-SOURCE"],
|
|
236
|
+
},
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
const startedAt = deps.now?.() ?? new Date();
|
|
240
|
+
// Embedded (promote-via-clone): when the caller passes a leg-role txn, share
|
|
241
|
+
// its id and record THIS clone's summary as a leg (subsumed by the parent).
|
|
242
|
+
const embedded = options.txn?.role === "leg";
|
|
243
|
+
const txnId = options.txn?.id ?? newTxnId(startedAt);
|
|
244
|
+
const applied = [];
|
|
245
|
+
const add = await runLeg(deps, "todo.add", todoAddParams(src, title, preserveCreated, zone, reminderSplit !== undefined, templateContent), legOptions(options, txnId, "url-scheme"), "copy content");
|
|
246
|
+
if (add.result.kind !== "ok" || add.result.uuid === null) {
|
|
247
|
+
if (add.result.kind === "blocked" || add.result.kind === "verify-failed")
|
|
248
|
+
return add.result;
|
|
249
|
+
return {
|
|
250
|
+
kind: "verify-failed",
|
|
251
|
+
op: "todo.clone",
|
|
252
|
+
reason: "mismatch",
|
|
253
|
+
expected: finalDelta,
|
|
254
|
+
observed: null,
|
|
255
|
+
detail: "the clone was created but its uuid was not discovered",
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
const cloneUuid = add.result.uuid;
|
|
259
|
+
applied.push("copied content");
|
|
260
|
+
const baseVector = add.result.vector;
|
|
261
|
+
const baseTier = add.result.tier;
|
|
262
|
+
// Reminder follow-up (only when it was split off the base add for a backdated
|
|
263
|
+
// creation): re-supply the source `when` together with the reminder so the
|
|
264
|
+
// R-suite guard (H-REMINDER-SCOPE) accepts it. The CLONE campaign proved a
|
|
265
|
+
// when+reminder leg reproduces an item reminder faithfully.
|
|
266
|
+
if (reminderSplit !== undefined) {
|
|
267
|
+
const leg = await runLeg(deps, "todo.update", { uuid: cloneUuid, when: reminderSplit.when, reminder: reminderSplit.reminder }, legOptions(options, txnId, "url-scheme"), "reproduce reminder");
|
|
268
|
+
if (leg.result.kind !== "ok")
|
|
269
|
+
return legFailure("todo.clone", cloneUuid, applied, leg, finalDelta);
|
|
270
|
+
applied.push("reproduced reminder");
|
|
271
|
+
}
|
|
272
|
+
// Checked checklist items → one json replace leg (P18).
|
|
273
|
+
const checklist = src.checklist ?? [];
|
|
274
|
+
if (checklist.some((c) => c.status === "completed")) {
|
|
275
|
+
const items = checklist.map((c) => ({ title: c.title, completed: c.status === "completed" }));
|
|
276
|
+
const leg = await runLeg(deps, "todo.replace-checklist", { uuid: cloneUuid, items }, legOptions(options, txnId, "url-scheme", { acknowledgeChecklistReset: true }), "reproduce checked checklist items");
|
|
277
|
+
if (leg.result.kind !== "ok")
|
|
278
|
+
return legFailure("todo.clone", cloneUuid, applied, leg, finalDelta);
|
|
279
|
+
applied.push("reproduced checked checklist items");
|
|
280
|
+
}
|
|
281
|
+
// Terminal state of the item itself (exact stopDate).
|
|
282
|
+
for (const leg of terminalLegs("todo", cloneUuid, src.status, src.stopped, zone)) {
|
|
283
|
+
const run = await runLeg(deps, leg.op, leg.params, legOptions(options, txnId, leg.vector), leg.describe);
|
|
284
|
+
if (run.result.kind !== "ok")
|
|
285
|
+
return legFailure("todo.clone", cloneUuid, applied, run, finalDelta);
|
|
286
|
+
applied.push(leg.describe);
|
|
287
|
+
}
|
|
288
|
+
appendSummary(deps, {
|
|
289
|
+
startedAt,
|
|
290
|
+
op: "todo.clone",
|
|
291
|
+
uuid: cloneUuid,
|
|
292
|
+
source: srcUuid,
|
|
293
|
+
mintedChildren: [],
|
|
294
|
+
txnId,
|
|
295
|
+
role: embedded ? "leg" : "summary",
|
|
296
|
+
invocation: `todo.clone ${srcUuid} → ${cloneUuid} (${applied.length} legs)`,
|
|
297
|
+
});
|
|
298
|
+
return cloneOk("todo.clone", cloneUuid, title, baseVector, baseTier, txnId, applied, preserveCreated);
|
|
299
|
+
}
|
|
300
|
+
// ============================================================== project.clone
|
|
301
|
+
/**
|
|
302
|
+
* Build the ordered {@link ProjectItemSpec} list for a project clone's base json
|
|
303
|
+
* import — root children first (A4 positional inheritance), then each heading
|
|
304
|
+
* followed by its children — AND the parallel source-child list (in the SAME
|
|
305
|
+
* order) the terminal-state follow-up walks. Children are born OPEN. Templates are
|
|
306
|
+
* excluded (a nested template refuses the whole clone before we get here).
|
|
307
|
+
*/
|
|
308
|
+
function projectStructure(db, projectUuid, now, zone) {
|
|
309
|
+
const view = projectView(db, projectUuid, now, {}, zone);
|
|
310
|
+
const items = [];
|
|
311
|
+
const sourceChildren = [];
|
|
312
|
+
const headingTitles = [];
|
|
313
|
+
const pushChild = (child) => {
|
|
314
|
+
if (child.repeating.isTemplate)
|
|
315
|
+
return; // never in the clone (refused upstream)
|
|
316
|
+
items.push({ kind: "to-do", ...childSpec(child) });
|
|
317
|
+
sourceChildren.push(child);
|
|
318
|
+
};
|
|
319
|
+
for (const child of view.bodyChildren)
|
|
320
|
+
pushChild(child);
|
|
321
|
+
for (const hc of view.headingContainers) {
|
|
322
|
+
items.push({ kind: "heading", title: hc.heading.title });
|
|
323
|
+
headingTitles.push(hc.heading.title);
|
|
324
|
+
for (const child of hc.children)
|
|
325
|
+
pushChild(child);
|
|
326
|
+
}
|
|
327
|
+
return { items, sourceChildren, headingTitles };
|
|
328
|
+
}
|
|
329
|
+
/** One child's born-OPEN content spec (checklist titles only; checked state is a residual). */
|
|
330
|
+
function childSpec(child) {
|
|
331
|
+
const when = child.status === "open" ? scheduleWhen(child) : undefined;
|
|
332
|
+
const deadline = realDeadline(child.deadline);
|
|
333
|
+
const checklist = child.checklist ?? [];
|
|
334
|
+
return {
|
|
335
|
+
title: child.title,
|
|
336
|
+
...(child.notes !== "" && { notes: child.notes }),
|
|
337
|
+
...(when !== undefined && { when }),
|
|
338
|
+
...(deadline !== undefined && { deadline }),
|
|
339
|
+
...(child.tags.length > 0 && { tags: child.tags.map((t) => t.title) }),
|
|
340
|
+
...(checklist.length > 0 && { checklistItems: checklist.map((c) => c.title) }),
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
export async function runCloneProject(deps, params, options = {}) {
|
|
344
|
+
const now = deps.now?.() ?? new Date();
|
|
345
|
+
const srcUuid = resolveProjectWriteTarget(deps.db, params.uuid);
|
|
346
|
+
const src = byUuid(deps.db, srcUuid, now, deps.zone);
|
|
347
|
+
if (src === null || src.type !== "project") {
|
|
348
|
+
return blocked("project.clone", "the source is not a project (project.clone copies a project)", "verify the uuid with `things projects`, or use `things todo clone` for a to-do");
|
|
349
|
+
}
|
|
350
|
+
if (src.derived.trashed) {
|
|
351
|
+
return blocked("project.clone", "the source project is in the Trash — a trashed item cannot be cloned", "restore it first with `things project restore <uuid>`, then clone");
|
|
352
|
+
}
|
|
353
|
+
if (src.repeating.isTemplate && options.cloneTemplateAsPlain !== true) {
|
|
354
|
+
// Cloning a repeating template = clone its content (incl. child/heading
|
|
355
|
+
// structure) as a PLAIN project, then native-promote the clone with the
|
|
356
|
+
// SOURCE's decoded rule. The nested-repeater refusal below still fires on the
|
|
357
|
+
// embedded plain-clone leg (a template CONTAINING a nested repeater is
|
|
358
|
+
// unclonable — this change is about the template AS the source).
|
|
359
|
+
return cloneTemplateViaRepromote(deps, "project", src, srcUuid, params, options);
|
|
360
|
+
}
|
|
361
|
+
// A6: a live nested repeating template inside the subtree is UNCLONABLE.
|
|
362
|
+
const nestedTemplate = projectChildren(deps.db, srcUuid).find((c) => c.repeating.isTemplate);
|
|
363
|
+
if (nestedTemplate !== undefined) {
|
|
364
|
+
return blocked("project.clone", `this project contains a nested repeating template ("${nestedTemplate.title}"); its ` +
|
|
365
|
+
"recurrence rule cannot be reproduced on any official write surface, so the project " +
|
|
366
|
+
"cannot be faithfully cloned", "remove or promote the nested repeater out of the project first, then clone (or duplicate " +
|
|
367
|
+
"the project in the Things app, which the app does natively)");
|
|
368
|
+
}
|
|
369
|
+
const title = params.title ?? src.title;
|
|
370
|
+
const preserveCreated = params.preserveCreated === true;
|
|
371
|
+
const zone = options.zone ?? deps.zone;
|
|
372
|
+
const finalDelta = createDelta(title, "project");
|
|
373
|
+
const { items, sourceChildren, headingTitles } = projectStructure(deps.db, srcUuid, now, deps.zone);
|
|
374
|
+
const resolvedChildren = sourceChildren.filter((c) => c.status !== "open");
|
|
375
|
+
if (options.dryRun === true) {
|
|
376
|
+
const steps = [
|
|
377
|
+
`project.add (json import: ${headingTitles.length} heading(s), ${sourceChildren.length} ` +
|
|
378
|
+
`child(ren), area/notes/deadline${preserveCreated ? "/created-at" : ""})`,
|
|
379
|
+
...(resolvedChildren.length > 0
|
|
380
|
+
? [`${resolvedChildren.length} child terminal-state leg(s) (complete/cancel + stopDate)`]
|
|
381
|
+
: []),
|
|
382
|
+
...(src.status !== "open" ? [`resolve the project itself (${src.status} + stopDate)`] : []),
|
|
383
|
+
];
|
|
384
|
+
return {
|
|
385
|
+
kind: "dry-run",
|
|
386
|
+
op: "project.clone",
|
|
387
|
+
plan: {
|
|
388
|
+
op: "project.clone",
|
|
389
|
+
vector: "url-scheme",
|
|
390
|
+
tier: 0,
|
|
391
|
+
invocation: `${steps.length}-leg clone (not atomic): ${steps.join(" → ")}`,
|
|
392
|
+
expectedDelta: finalDelta,
|
|
393
|
+
hazardsChecked: ["H-CLONE-SOURCE"],
|
|
394
|
+
},
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
const startedAt = now;
|
|
398
|
+
const embedded = options.txn?.role === "leg";
|
|
399
|
+
const txnId = options.txn?.id ?? newTxnId(startedAt);
|
|
400
|
+
const applied = [];
|
|
401
|
+
const addParams = {
|
|
402
|
+
title,
|
|
403
|
+
...(src.notes !== "" && { notes: src.notes }),
|
|
404
|
+
...(src.area !== null && { area: { uuid: src.area.uuid } }),
|
|
405
|
+
...(realDeadline(src.deadline) !== undefined && { deadline: realDeadline(src.deadline) }),
|
|
406
|
+
...(items.length > 0 && { items }),
|
|
407
|
+
...(preserveCreated && { createdAt: localMinute(src.created, zone) }),
|
|
408
|
+
};
|
|
409
|
+
const add = await runLeg(deps, "project.add", addParams, legOptions(options, txnId, "url-scheme"), "copy project structure");
|
|
410
|
+
if (add.result.kind !== "ok" || add.result.uuid === null) {
|
|
411
|
+
if (add.result.kind === "blocked" || add.result.kind === "verify-failed")
|
|
412
|
+
return add.result;
|
|
413
|
+
return {
|
|
414
|
+
kind: "verify-failed",
|
|
415
|
+
op: "project.clone",
|
|
416
|
+
reason: "mismatch",
|
|
417
|
+
expected: finalDelta,
|
|
418
|
+
observed: null,
|
|
419
|
+
detail: "the project clone was created but its uuid was not discovered",
|
|
420
|
+
};
|
|
421
|
+
}
|
|
422
|
+
const cloneUuid = add.result.uuid;
|
|
423
|
+
applied.push("copied structure");
|
|
424
|
+
const baseVector = add.result.vector;
|
|
425
|
+
const baseTier = add.result.tier;
|
|
426
|
+
// Map the clone's freshly-minted children to their source counterparts by the
|
|
427
|
+
// preserved index order, so terminal-state legs target the right rows.
|
|
428
|
+
const cloneView = projectView(deps.db, cloneUuid, now, {}, deps.zone);
|
|
429
|
+
const cloneChildren = [
|
|
430
|
+
...cloneView.bodyChildren.filter((c) => !c.repeating.isTemplate),
|
|
431
|
+
...cloneView.headingContainers.flatMap((hc) => hc.children.filter((c) => !c.repeating.isTemplate)),
|
|
432
|
+
];
|
|
433
|
+
const mintedChildren = cloneChildren.map((c) => c.uuid);
|
|
434
|
+
const warnings = [];
|
|
435
|
+
if (cloneChildren.length !== sourceChildren.length) {
|
|
436
|
+
warnings.push("the clone's child set did not match the source one-for-one — logged/canceled child states " +
|
|
437
|
+
"were NOT reproduced (the copy is otherwise faithful)");
|
|
438
|
+
}
|
|
439
|
+
else {
|
|
440
|
+
for (let i = 0; i < sourceChildren.length; i++) {
|
|
441
|
+
const s = sourceChildren[i];
|
|
442
|
+
if (s.status === "open")
|
|
443
|
+
continue;
|
|
444
|
+
const target = cloneChildren[i].uuid;
|
|
445
|
+
for (const leg of terminalLegs("todo", target, s.status, s.stopped, zone)) {
|
|
446
|
+
const run = await runLeg(deps, leg.op, leg.params, legOptions(options, txnId, leg.vector), `child "${s.title}": ${leg.describe}`);
|
|
447
|
+
if (run.result.kind !== "ok") {
|
|
448
|
+
return legFailure("project.clone", cloneUuid, applied, run, finalDelta);
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
applied.push(`reproduced child "${s.title}" ${s.status}`);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
// The project's own terminal state (require-resolved: its children were made to
|
|
455
|
+
// match the source above, so a completed/canceled source's children are resolved).
|
|
456
|
+
for (const leg of terminalLegs("project", cloneUuid, src.status, src.stopped, zone)) {
|
|
457
|
+
const run = await runLeg(deps, leg.op, leg.params, legOptions(options, txnId, leg.vector), leg.describe);
|
|
458
|
+
if (run.result.kind !== "ok")
|
|
459
|
+
return legFailure("project.clone", cloneUuid, applied, run, finalDelta);
|
|
460
|
+
applied.push(leg.describe);
|
|
461
|
+
}
|
|
462
|
+
appendSummary(deps, {
|
|
463
|
+
startedAt,
|
|
464
|
+
op: "project.clone",
|
|
465
|
+
uuid: cloneUuid,
|
|
466
|
+
source: srcUuid,
|
|
467
|
+
mintedChildren,
|
|
468
|
+
txnId,
|
|
469
|
+
role: embedded ? "leg" : "summary",
|
|
470
|
+
invocation: `project.clone ${srcUuid} → ${cloneUuid} (${applied.length} legs, ${mintedChildren.length} children)`,
|
|
471
|
+
});
|
|
472
|
+
const ok = cloneOk("project.clone", cloneUuid, title, baseVector, baseTier, txnId, applied, preserveCreated);
|
|
473
|
+
return warnings.length > 0 ? { ...ok, warnings: [...(ok.warnings ?? []), ...warnings] } : ok;
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* The legs that reproduce a resolved item's terminal state with the EXACT
|
|
477
|
+
* stopDate: complete → set-dates (completed), or complete → set-dates → cancel
|
|
478
|
+
* (canceled). Flipping completed→canceled preserves the backdated stopDate
|
|
479
|
+
* (BACKDT B-FLIP). Empty for an open item.
|
|
480
|
+
*/
|
|
481
|
+
function terminalLegs(kind, uuid, status, stopped, zone) {
|
|
482
|
+
if (status === "open" || stopped === null)
|
|
483
|
+
return [];
|
|
484
|
+
const completeOp = kind === "project" ? "project.complete" : "todo.complete";
|
|
485
|
+
const cancelOp = kind === "project" ? "project.cancel" : "todo.cancel";
|
|
486
|
+
const setDatesOp = kind === "project" ? "project.set-dates" : "todo.set-dates";
|
|
487
|
+
const childrenPolicyComplete = kind === "project" ? { children: "require-resolved" } : {};
|
|
488
|
+
const childrenPolicyCancel = kind === "project" ? { children: "require-resolved" } : {};
|
|
489
|
+
const completedAt = localMinute(stopped, zone);
|
|
490
|
+
const legs = [
|
|
491
|
+
{
|
|
492
|
+
op: completeOp,
|
|
493
|
+
params: { uuid, ...childrenPolicyComplete },
|
|
494
|
+
vector: "url-scheme",
|
|
495
|
+
describe: "flip → completed",
|
|
496
|
+
},
|
|
497
|
+
{
|
|
498
|
+
op: setDatesOp,
|
|
499
|
+
params: { uuid, completedAt },
|
|
500
|
+
vector: "applescript",
|
|
501
|
+
describe: `backdate stopDate = ${completedAt}`,
|
|
502
|
+
},
|
|
503
|
+
];
|
|
504
|
+
if (status === "canceled") {
|
|
505
|
+
legs.push({
|
|
506
|
+
op: cancelOp,
|
|
507
|
+
params: { uuid, ...childrenPolicyCancel },
|
|
508
|
+
vector: "url-scheme",
|
|
509
|
+
describe: "flip → canceled (stopDate preserved)",
|
|
510
|
+
});
|
|
511
|
+
}
|
|
512
|
+
return legs;
|
|
513
|
+
}
|
|
514
|
+
function cloneOk(op, uuid, title, vector, tier, txnId, applied, preserveCreated) {
|
|
515
|
+
const warnings = [`applied as ${applied.length} non-atomic legs: ${applied.join("; ")}`];
|
|
516
|
+
if (preserveCreated) {
|
|
517
|
+
warnings.push("the source's creation date was copied at MINUTE resolution (sub-minute precision is lost)");
|
|
518
|
+
}
|
|
519
|
+
return {
|
|
520
|
+
kind: "ok",
|
|
521
|
+
op,
|
|
522
|
+
uuid,
|
|
523
|
+
title,
|
|
524
|
+
observed: { uuid },
|
|
525
|
+
vector,
|
|
526
|
+
tier,
|
|
527
|
+
undoToken: txnId,
|
|
528
|
+
warnings,
|
|
529
|
+
};
|
|
530
|
+
}
|
|
531
|
+
//# sourceMappingURL=clone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone.js","sourceRoot":"","sources":["../../src/write/clone.ts"],"names":[],"mappings":"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"}
|