things-api 0.10.0 → 0.12.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.
Files changed (239) hide show
  1. package/README.md +50 -13
  2. package/dist/audit/schema.d.ts +7 -0
  3. package/dist/audit/schema.js.map +1 -1
  4. package/dist/cli/clock.d.ts +8 -0
  5. package/dist/cli/clock.js +24 -0
  6. package/dist/cli/clock.js.map +1 -0
  7. package/dist/cli/commands/area.d.ts +18 -11
  8. package/dist/cli/commands/area.js +61 -74
  9. package/dist/cli/commands/area.js.map +1 -1
  10. package/dist/cli/commands/doctor.d.ts +1 -2
  11. package/dist/cli/commands/doctor.js +11 -1
  12. package/dist/cli/commands/doctor.js.map +1 -1
  13. package/dist/cli/commands/install-skill.d.ts +60 -0
  14. package/dist/cli/commands/install-skill.js +256 -0
  15. package/dist/cli/commands/install-skill.js.map +1 -0
  16. package/dist/cli/commands/mcp.js +9 -0
  17. package/dist/cli/commands/mcp.js.map +1 -1
  18. package/dist/cli/commands/project.d.ts +1 -0
  19. package/dist/cli/commands/project.js +27 -34
  20. package/dist/cli/commands/project.js.map +1 -1
  21. package/dist/cli/commands/reads.d.ts +15 -2
  22. package/dist/cli/commands/reads.js +144 -44
  23. package/dist/cli/commands/reads.js.map +1 -1
  24. package/dist/cli/commands/setup.js +7 -2
  25. package/dist/cli/commands/setup.js.map +1 -1
  26. package/dist/cli/commands/show.js +38 -14
  27. package/dist/cli/commands/show.js.map +1 -1
  28. package/dist/cli/commands/todo.js +15 -9
  29. package/dist/cli/commands/todo.js.map +1 -1
  30. package/dist/cli/commands/writes.js +797 -174
  31. package/dist/cli/commands/writes.js.map +1 -1
  32. package/dist/cli/did-you-mean.d.ts +14 -3
  33. package/dist/cli/did-you-mean.js +26 -3
  34. package/dist/cli/did-you-mean.js.map +1 -1
  35. package/dist/cli/glyphs.d.ts +32 -2
  36. package/dist/cli/glyphs.js +83 -12
  37. package/dist/cli/glyphs.js.map +1 -1
  38. package/dist/cli/help.js +121 -16
  39. package/dist/cli/help.js.map +1 -1
  40. package/dist/cli/main.js +33 -2
  41. package/dist/cli/main.js.map +1 -1
  42. package/dist/cli/move-hint.d.ts +46 -0
  43. package/dist/cli/move-hint.js +196 -0
  44. package/dist/cli/move-hint.js.map +1 -0
  45. package/dist/cli/period.d.ts +2 -8
  46. package/dist/cli/period.js +44 -30
  47. package/dist/cli/period.js.map +1 -1
  48. package/dist/cli/read-driver.d.ts +43 -5
  49. package/dist/cli/read-driver.js +91 -15
  50. package/dist/cli/read-driver.js.map +1 -1
  51. package/dist/cli/render.d.ts +19 -8
  52. package/dist/cli/render.js +70 -27
  53. package/dist/cli/render.js.map +1 -1
  54. package/dist/cli/resolve-invocation.d.ts +2 -2
  55. package/dist/cli/resolve-invocation.js +3 -3
  56. package/dist/cli/resolve-invocation.js.map +1 -1
  57. package/dist/cli/skill-check.d.ts +27 -0
  58. package/dist/cli/skill-check.js +99 -0
  59. package/dist/cli/skill-check.js.map +1 -0
  60. package/dist/cli/skill.d.ts +70 -0
  61. package/dist/cli/skill.js +152 -0
  62. package/dist/cli/skill.js.map +1 -0
  63. package/dist/cli/tag-filters.d.ts +6 -2
  64. package/dist/cli/tag-filters.js +8 -6
  65. package/dist/cli/tag-filters.js.map +1 -1
  66. package/dist/cli/verb-hint.js +28 -3
  67. package/dist/cli/verb-hint.js.map +1 -1
  68. package/dist/cli/version.d.ts +4 -0
  69. package/dist/cli/version.js +18 -0
  70. package/dist/cli/version.js.map +1 -0
  71. package/dist/client.d.ts +171 -27
  72. package/dist/client.js +279 -40
  73. package/dist/client.js.map +1 -1
  74. package/dist/config.d.ts +66 -2
  75. package/dist/config.js +120 -12
  76. package/dist/config.js.map +1 -1
  77. package/dist/contracts.d.ts +186 -28
  78. package/dist/contracts.js +22 -1
  79. package/dist/contracts.js.map +1 -1
  80. package/dist/diagnose.d.ts +34 -2
  81. package/dist/diagnose.js +36 -1
  82. package/dist/diagnose.js.map +1 -1
  83. package/dist/index.d.ts +25 -9
  84. package/dist/index.js +22 -3
  85. package/dist/index.js.map +1 -1
  86. package/dist/mcp/server.d.ts +9 -0
  87. package/dist/mcp/server.js +1157 -684
  88. package/dist/mcp/server.js.map +1 -1
  89. package/dist/model/clock.d.ts +61 -0
  90. package/dist/model/clock.js +71 -0
  91. package/dist/model/clock.js.map +1 -0
  92. package/dist/model/dates.d.ts +26 -3
  93. package/dist/model/dates.js +84 -3
  94. package/dist/model/dates.js.map +1 -1
  95. package/dist/model/entities.d.ts +60 -3
  96. package/dist/model/entities.js.map +1 -1
  97. package/dist/model/mappers.d.ts +4 -2
  98. package/dist/model/mappers.js +66 -9
  99. package/dist/model/mappers.js.map +1 -1
  100. package/dist/model/recurrence.d.ts +8 -1
  101. package/dist/model/recurrence.js.map +1 -1
  102. package/dist/read/area-filter.d.ts +76 -0
  103. package/dist/read/area-filter.js +59 -0
  104. package/dist/read/area-filter.js.map +1 -0
  105. package/dist/read/area-view.d.ts +12 -12
  106. package/dist/read/area-view.js +58 -34
  107. package/dist/read/area-view.js.map +1 -1
  108. package/dist/read/detail.d.ts +1 -1
  109. package/dist/read/detail.js +26 -12
  110. package/dist/read/detail.js.map +1 -1
  111. package/dist/read/log-boundary.d.ts +1 -1
  112. package/dist/read/log-boundary.js +13 -3
  113. package/dist/read/log-boundary.js.map +1 -1
  114. package/dist/read/predicates.d.ts +18 -0
  115. package/dist/read/predicates.js +19 -0
  116. package/dist/read/predicates.js.map +1 -1
  117. package/dist/read/project-view.d.ts +32 -16
  118. package/dist/read/project-view.js +80 -45
  119. package/dist/read/project-view.js.map +1 -1
  120. package/dist/read/pseudo-area.d.ts +29 -0
  121. package/dist/read/pseudo-area.js +27 -0
  122. package/dist/read/pseudo-area.js.map +1 -0
  123. package/dist/read/queries.d.ts +108 -19
  124. package/dist/read/queries.js +212 -35
  125. package/dist/read/queries.js.map +1 -1
  126. package/dist/read/scope.d.ts +126 -0
  127. package/dist/read/scope.js +162 -0
  128. package/dist/read/scope.js.map +1 -0
  129. package/dist/read/search-rank.d.ts +2 -5
  130. package/dist/read/shape.d.ts +162 -0
  131. package/dist/read/shape.js +686 -0
  132. package/dist/read/shape.js.map +1 -0
  133. package/dist/read/show-target.d.ts +9 -1
  134. package/dist/read/show-target.js +45 -4
  135. package/dist/read/show-target.js.map +1 -1
  136. package/dist/read/snapshot.d.ts +1 -1
  137. package/dist/read/snapshot.js +9 -2
  138. package/dist/read/snapshot.js.map +1 -1
  139. package/dist/read/stage.d.ts +199 -0
  140. package/dist/read/stage.js +125 -0
  141. package/dist/read/stage.js.map +1 -0
  142. package/dist/read/truncation.d.ts +8 -6
  143. package/dist/read/truncation.js +35 -10
  144. package/dist/read/truncation.js.map +1 -1
  145. package/dist/read/views.d.ts +61 -20
  146. package/dist/read/views.js +240 -82
  147. package/dist/read/views.js.map +1 -1
  148. package/dist/surface-copy.d.ts +9 -0
  149. package/dist/surface-copy.js +9 -0
  150. package/dist/surface-copy.js.map +1 -1
  151. package/dist/write/accessibility-probe.d.ts +1 -1
  152. package/dist/write/accessibility-probe.js +8 -0
  153. package/dist/write/accessibility-probe.js.map +1 -1
  154. package/dist/write/automation-probe.d.ts +1 -1
  155. package/dist/write/automation-probe.js +8 -0
  156. package/dist/write/automation-probe.js.map +1 -1
  157. package/dist/write/batch.d.ts +49 -10
  158. package/dist/write/batch.js +423 -70
  159. package/dist/write/batch.js.map +1 -1
  160. package/dist/write/commands.d.ts +1 -1
  161. package/dist/write/commands.js +316 -66
  162. package/dist/write/commands.js.map +1 -1
  163. package/dist/write/guards.d.ts +1 -1
  164. package/dist/write/guards.js +94 -10
  165. package/dist/write/guards.js.map +1 -1
  166. package/dist/write/heading.d.ts +10 -1
  167. package/dist/write/heading.js +35 -5
  168. package/dist/write/heading.js.map +1 -1
  169. package/dist/write/make-repeating-project.d.ts +2 -2
  170. package/dist/write/make-repeating-project.js +9 -9
  171. package/dist/write/make-repeating-project.js.map +1 -1
  172. package/dist/write/move.d.ts +130 -0
  173. package/dist/write/move.js +1533 -0
  174. package/dist/write/move.js.map +1 -0
  175. package/dist/write/operations.d.ts +105 -19
  176. package/dist/write/operations.js +56 -7
  177. package/dist/write/operations.js.map +1 -1
  178. package/dist/write/opid.d.ts +31 -0
  179. package/dist/write/opid.js +30 -0
  180. package/dist/write/opid.js.map +1 -0
  181. package/dist/write/pipeline.d.ts +122 -3
  182. package/dist/write/pipeline.js +309 -52
  183. package/dist/write/pipeline.js.map +1 -1
  184. package/dist/write/planner.js +8 -1
  185. package/dist/write/planner.js.map +1 -1
  186. package/dist/write/pre-state.d.ts +197 -6
  187. package/dist/write/pre-state.js +427 -20
  188. package/dist/write/pre-state.js.map +1 -1
  189. package/dist/write/recurrence-rule-blob.d.ts +65 -0
  190. package/dist/write/recurrence-rule-blob.js +150 -0
  191. package/dist/write/recurrence-rule-blob.js.map +1 -0
  192. package/dist/write/reorder.d.ts +23 -3
  193. package/dist/write/reorder.js +1871 -85
  194. package/dist/write/reorder.js.map +1 -1
  195. package/dist/write/reversibility.js +19 -7
  196. package/dist/write/reversibility.js.map +1 -1
  197. package/dist/write/scope-guard.d.ts +31 -0
  198. package/dist/write/scope-guard.js +162 -0
  199. package/dist/write/scope-guard.js.map +1 -0
  200. package/dist/write/undo.js +120 -13
  201. package/dist/write/undo.js.map +1 -1
  202. package/dist/write/vectors/applescript.js +16 -7
  203. package/dist/write/vectors/applescript.js.map +1 -1
  204. package/dist/write/vectors/registry.d.ts +5 -7
  205. package/dist/write/vectors/registry.js +49 -2
  206. package/dist/write/vectors/registry.js.map +1 -1
  207. package/dist/write/vectors/shortcuts.js +1 -1
  208. package/dist/write/vectors/shortcuts.js.map +1 -1
  209. package/dist/write/vectors/simulator.d.ts +44 -0
  210. package/dist/write/vectors/simulator.js +1192 -0
  211. package/dist/write/vectors/simulator.js.map +1 -0
  212. package/dist/write/vectors/types.d.ts +46 -0
  213. package/dist/write/vectors/ui-certification.d.ts +10 -4
  214. package/dist/write/vectors/ui-certification.js +43 -10
  215. package/dist/write/vectors/ui-certification.js.map +1 -1
  216. package/dist/write/vectors/ui-drag.d.ts +21 -1
  217. package/dist/write/vectors/ui-drag.js +138 -27
  218. package/dist/write/vectors/ui-drag.js.map +1 -1
  219. package/dist/write/vectors/ui-recipes.d.ts +34 -1
  220. package/dist/write/vectors/ui-recipes.js +217 -6
  221. package/dist/write/vectors/ui-recipes.js.map +1 -1
  222. package/dist/write/vectors/ui.d.ts +40 -1
  223. package/dist/write/vectors/ui.js +196 -39
  224. package/dist/write/vectors/ui.js.map +1 -1
  225. package/dist/write/verify/delta.d.ts +127 -2
  226. package/dist/write/verify/delta.js +255 -16
  227. package/dist/write/verify/delta.js.map +1 -1
  228. package/dist/write/verify/poller.d.ts +7 -1
  229. package/dist/write/verify/poller.js +20 -1
  230. package/dist/write/verify/poller.js.map +1 -1
  231. package/package.json +24 -3
  232. package/schema/envelope.schema.json +383 -0
  233. package/skills/things-cli/SKILL.md +70 -0
  234. package/skills/things-cli/references/banner.md +35 -0
  235. package/skills/things-cli/references/contracts.md +62 -0
  236. package/skills/things-cli/references/errors.md +49 -0
  237. package/skills/things-cli/references/gui.md +11 -0
  238. package/skills/things-cli/references/model.md +60 -0
  239. package/skills/things-cli/references/ordering.md +71 -0
@@ -1,4 +1,6 @@
1
1
  import { q, selectList } from "../db/schema.js";
2
+ import { TASK_TYPE_FROM_DB } from "../model/entities.js";
3
+ import { candidateRef, CANDIDATE_CAP } from "./shape.js";
2
4
  /** Rows that repeat via a template are normal; template rows are invisible in list views. */
3
5
  export const NOT_TEMPLATE = "(t.rt1_recurrenceRule IS NULL AND t.repeater IS NULL)";
4
6
  /** ` AND col IN (…)` for the restricted form; empty for the tag-agnostic form. */
@@ -161,13 +163,15 @@ export function noUuidMatch(entity, ref) {
161
163
  * entity. Extends RangeError so every existing `instanceof RangeError` handler
162
164
  * keeps treating it as a usage-class failure — but the surfaces that know about
163
165
  * it (CLI --json envelope, MCP tool result) additionally lift the structured
164
- * `candidates` onto `error.details.candidates` so an agent can self-correct
166
+ * `candidates` onto `error.detail.candidates` so an agent can self-correct
165
167
  * without re-parsing the prose message. `code` mirrors the envelope error code.
166
168
  *
167
169
  * PUBLIC API — exported from src/index.ts. This is the one error the consumer
168
170
  * surfaces catch to render structured disambiguation; its `code`
169
- * ("not-found" | "ambiguous") and `candidates` ({@link RefCandidate}[]) are the
170
- * documented machine shape (docs/design/architecture.md, Consumer boundary).
171
+ * ("not-found" | "ambiguous") and `candidates` ({@link CandidateRef}[], the ONE
172
+ * fixed candidate shape) are the documented machine shape
173
+ * (docs/design/architecture.md, Consumer boundary). The list is capped at
174
+ * {@link CANDIDATE_CAP}; on overflow the `message` states the total.
171
175
  */
172
176
  export class ReferenceResolutionError extends RangeError {
173
177
  code;
@@ -181,27 +185,38 @@ export class ReferenceResolutionError extends RangeError {
181
185
  this.candidates = opts.candidates ?? [];
182
186
  }
183
187
  }
184
- export function resolveTaskUuidPrefix(db, refRaw, entity = "to-do") {
188
+ export function resolveTaskUuidPrefix(db, refRaw, entity = "to-do", scope) {
185
189
  const ref = stripThingsUri(refRaw);
186
- const exact = db.prepare("SELECT uuid FROM TMTask WHERE uuid = ?").get(ref);
190
+ const scopeCond = scope !== undefined ? ` AND ${scope.where}` : "";
191
+ const scopeBinds = scope?.binds ?? [];
192
+ const exact = db
193
+ .prepare(`SELECT t.uuid FROM TMTask t WHERE t.uuid = ?${scopeCond}`)
194
+ .get(ref, ...scopeBinds);
187
195
  if (exact !== undefined)
188
196
  return exact.uuid;
189
197
  if (ref.length < 6) {
190
198
  throw new RangeError(`${noUuidMatch(entity, ref)} (a partial-uuid needs at least 6 characters)`);
191
199
  }
192
200
  const upper = ref.slice(0, -1) + String.fromCharCode(ref.charCodeAt(ref.length - 1) + 1);
201
+ // No LIMIT: a >=6-char shared prefix makes the uuid range inherently tiny, so
202
+ // the full match set is cheap to fetch and its length is the exact total.
193
203
  const rows = db
194
- .prepare("SELECT t.uuid, t.title FROM TMTask t WHERE t.uuid >= ? AND t.uuid < ? LIMIT 6")
195
- .all(ref, upper);
204
+ .prepare(`SELECT t.uuid, t.title, t.type FROM TMTask t WHERE t.uuid >= ? AND t.uuid < ?${scopeCond}`)
205
+ .all(ref, upper, ...scopeBinds);
196
206
  if (rows.length === 0) {
197
207
  throw new ReferenceResolutionError(noUuidMatch(entity, ref), { code: "not-found", ref });
198
208
  }
199
209
  if (rows.length > 1) {
200
- const list = rows.map((r) => `${r.uuid} (${r.title ?? ""})`).join("; ");
201
- throw new ReferenceResolutionError(`partial-uuid "${ref}" is ambiguous — matches: ${list}`, {
210
+ const shown = rows.slice(0, CANDIDATE_CAP);
211
+ const list = shown.map((r) => `${r.uuid} (${r.title ?? ""})`).join("; ");
212
+ const more = rows.length > CANDIDATE_CAP ? `; … ${rows.length - CANDIDATE_CAP} more` : "";
213
+ throw new ReferenceResolutionError(`partial-uuid "${ref}" is ambiguous — ${rows.length} matches: ${list}${more} — use a full uuid`, {
202
214
  code: "ambiguous",
203
215
  ref,
204
- candidates: rows.map((r) => ({ uuid: r.uuid, title: r.title ?? "" })),
216
+ candidates: shown.map((r) => candidateRef(TASK_TYPE_FROM_DB[r.type] ?? "to-do", {
217
+ uuid: r.uuid,
218
+ title: r.title ?? "",
219
+ })),
205
220
  });
206
221
  }
207
222
  return rows[0]?.uuid ?? ref;
@@ -228,14 +243,25 @@ const BASE62 = /^[0-9A-Za-z]+$/;
228
243
  */
229
244
  export function resolveNamedRef(db, table, extraWhere, extraBinds, refRaw, options) {
230
245
  const ref = stripThingsUri(refRaw);
231
- const sel = (cond, extra = []) => db
232
- .prepare(`SELECT uuid, title FROM ${table} WHERE ${extraWhere} AND ${cond}`)
233
- .all(...extraBinds, ...extra);
246
+ // Container scope: an extra UNqualified membership clause AND-ed into every
247
+ // tier, so an out-of-scope row is invisible to resolution — the same rows a
248
+ // nonexistent ref matches (none), keeping the not-found path byte-identical.
249
+ const scopeCond = options?.scopeWhere !== undefined ? ` AND ${options.scopeWhere}` : "";
250
+ const scopeBinds = options?.scopeBinds ?? [];
251
+ // The name-tier narrowing (open-only, etc.) — carries no binds, so it never
252
+ // shifts the placeholder order.
253
+ const nameCond = options?.nameExtraWhere !== undefined ? ` AND ${options.nameExtraWhere}` : "";
254
+ const run = (where, cond, extra) => db
255
+ .prepare(`SELECT uuid, title FROM ${table} WHERE ${extraWhere}${where} AND ${cond}${scopeCond}`)
256
+ .all(...extraBinds, ...extra, ...scopeBinds);
257
+ // uuid tiers use the base predicate; name tiers additionally honor nameCond.
258
+ const sel = (cond, extra = []) => run("", cond, extra);
259
+ const selName = (cond, extra = []) => run(nameCond, cond, extra);
234
260
  const byId = sel("uuid = ?", [ref]);
235
261
  if (byId.length === 1)
236
262
  return { resolved: byId[0] ?? null, matches: 1 };
237
263
  for (const cond of ["title = ?", "title = ? COLLATE NOCASE"]) {
238
- const rows = sel(cond, [ref]);
264
+ const rows = selName(cond, [ref]);
239
265
  if (rows.length === 1)
240
266
  return { resolved: rows[0] ?? null, matches: 1 };
241
267
  if (rows.length > 1)
@@ -243,7 +269,7 @@ export function resolveNamedRef(db, table, extraWhere, extraBinds, refRaw, optio
243
269
  }
244
270
  const key = normalizeNameKey(ref);
245
271
  if (key !== "") {
246
- const hits = sel("title IS NOT NULL").filter((r) => normalizeNameKey(r.title) === key);
272
+ const hits = selName("title IS NOT NULL").filter((r) => normalizeNameKey(r.title) === key);
247
273
  if (hits.length === 1)
248
274
  return { resolved: hits[0] ?? null, matches: 1 };
249
275
  if (hits.length > 1)
@@ -274,12 +300,42 @@ function resolveUuidOrThrow(db, table, extraWhere, ref, kind, listCmd, options)
274
300
  if (r.matches === 0) {
275
301
  throw new ReferenceResolutionError(`no ${kind} matching "${ref}" — ${acceptedForms(options?.prefixTier !== false)} (list ${kind}s with \`${listCmd}\`)`, { code: "not-found", ref });
276
302
  }
277
- throw new ReferenceResolutionError(`"${ref}" matches ${r.matches} ${kind}s — use the exact name or a uuid`, {
303
+ const all = r.candidates ?? [];
304
+ const capped = all.length > CANDIDATE_CAP;
305
+ throw new ReferenceResolutionError(`"${ref}" matches ${r.matches} ${kind}s${capped ? `; first ${CANDIDATE_CAP} shown` : ""} — use the exact name or a uuid`, {
278
306
  code: "ambiguous",
279
307
  ref,
280
- candidates: (r.candidates ?? []).map((c) => ({ uuid: c.uuid, title: c.title })),
308
+ candidates: all.slice(0, CANDIDATE_CAP).map((c) => candidateRef(kind, c)),
281
309
  });
282
310
  }
311
+ /**
312
+ * The honest tail appended to a not-found message when a NAME resolves to ZERO
313
+ * LIVE entities but one or more DEAD rows (trashed, or swept to the logbook) DO
314
+ * match it. It tells the caller a dead row of that name exists — and where to
315
+ * find it — WITHOUT listing it as a candidate, so no dangling-ref operation is
316
+ * invited against a dead row (candidate pools stay domain-scoped to live rows).
317
+ * Empty when nothing dead matched; a count renders only when it is > 0.
318
+ */
319
+ // "1 item matches" / "2 items match" — noun plural on >1, verb plural on ==1.
320
+ function deadMatchPhrase(n, where, cmd) {
321
+ return `${n} ${where} item${n === 1 ? "" : "s"} match${n === 1 ? "es" : ""} this name — see \`${cmd}\``;
322
+ }
323
+ export function deadNameMatchHint(counts) {
324
+ const parts = [];
325
+ const t = counts.trashed ?? 0;
326
+ const l = counts.logbook ?? 0;
327
+ const c = counts.completed ?? 0;
328
+ if (t > 0)
329
+ parts.push(deadMatchPhrase(t, "trashed", "things trash"));
330
+ if (l > 0)
331
+ parts.push(deadMatchPhrase(l, "logbook", "things logbook"));
332
+ // A completed/canceled (but not trashed) project is excluded from write-target
333
+ // NAME resolution — placing an open child in it strands the child (PLOG1) — but
334
+ // stays reachable by its uuid (explicit intent), which is the guidance here.
335
+ if (c > 0)
336
+ parts.push(`${c} completed project${c === 1 ? "" : "s"} match${c === 1 ? "es" : ""} this name — target it by uuid if intended`);
337
+ return parts.length === 0 ? "" : ` (${parts.join("; ")})`;
338
+ }
283
339
  /**
284
340
  * Resolve a PROJECT write target from a uuid, partial-uuid, or unique name.
285
341
  * Project write verbs (`things project update <ref>`, etc.) accept names
@@ -291,14 +347,27 @@ function resolveUuidOrThrow(db, table, extraWhere, ref, kind, listCmd, options)
291
347
  * targeted "that is a to-do, not a project" message rather than a misleading
292
348
  * not-found. Otherwise the ref resolves as a project NAME through the SAME
293
349
  * tiered {@link resolveNamedRef} matching the read side uses (shared core, not
294
- * a fork) across projects (trashed included, for `project restore`), fail-
295
- * closed with a candidate listing on an ambiguous name so a duplicated project
296
- * title is disambiguated by uuid rather than guessed.
350
+ * a fork).
351
+ *
352
+ * The NAME pool is LIVE + OPEN-scoped by default (`trashed = 0 AND status = 0`)
353
+ * — a trashed OR completed/canceled project never resolves-by-name or appears as
354
+ * an ambiguity candidate for an ordinary write verb. A completed project is
355
+ * excluded deliberately (broader than "logged", which needs the log-boundary
356
+ * clock this pure resolver lacks): placing an open child in it strands the child
357
+ * one sweep later (PLOG1). A name that matches ONLY non-open/trashed rows fails
358
+ * not-found with an honest hint (`things trash` / target-by-uuid) rather than a
359
+ * dead candidate. A UUID / partial-uuid resolves FIRST (via
360
+ * {@link resolveTaskUuidPrefix}, status-blind), so explicit-uuid intent still
361
+ * reaches a completed/logged project. `includeNonOpen` (the `project.reopen`
362
+ * verb — its whole point is a non-open target) widens the name pool to
363
+ * completed/canceled rows; `includeTrashed` (the trash-domain `project.restore`
364
+ * op) widens it to trashed rows so a restore-by-name can disambiguate them.
365
+ * Fail-closed with a candidate listing on an ambiguous name.
297
366
  */
298
- export function resolveProjectWriteTarget(db, refRaw) {
367
+ export function resolveProjectWriteTarget(db, refRaw, scope, includeTrashed = false, includeNonOpen = false) {
299
368
  const ref = stripThingsUri(refRaw);
300
369
  try {
301
- return resolveTaskUuidPrefix(db, ref, "project");
370
+ return resolveTaskUuidPrefix(db, ref, "project", scope?.task);
302
371
  }
303
372
  catch (err) {
304
373
  // An ambiguous uuid-prefix is a real conflict — surface it verbatim. A
@@ -306,24 +375,45 @@ export function resolveProjectWriteTarget(db, refRaw) {
306
375
  if (err instanceof RangeError && err.message.includes("ambiguous"))
307
376
  throw err;
308
377
  }
309
- const r = resolveNamedRef(db, "TMTask", "type = 1", [], ref, { prefixTier: false });
378
+ const liveWhere = includeTrashed
379
+ ? "type = 1"
380
+ : includeNonOpen
381
+ ? "type = 1 AND trashed = 0"
382
+ : "type = 1 AND trashed = 0 AND status = 0";
383
+ const r = resolveNamedRef(db, "TMTask", liveWhere, [], ref, {
384
+ prefixTier: false,
385
+ ...(scope !== undefined && { scopeWhere: scope.named.where, scopeBinds: scope.named.binds }),
386
+ });
310
387
  if (r.resolved !== null)
311
388
  return r.resolved.uuid;
312
389
  if (r.matches === 0) {
313
- throw new ReferenceResolutionError(`no project matching "${ref}" — tried uuid, partial-uuid, and name (list projects with \`things projects\`)`, { code: "not-found", ref });
390
+ // Zero live+open matches: if the name matches only trashed OR completed rows,
391
+ // say so (honest hint) instead of dangling a dead candidate. Skipped when the
392
+ // pool already includes those rows — a miss there is a genuine miss.
393
+ const dead = includeTrashed || includeNonOpen
394
+ ? {}
395
+ : {
396
+ trashed: resolveNamedRef(db, "TMTask", "type = 1 AND trashed = 1", [], ref, {
397
+ prefixTier: false,
398
+ }).matches,
399
+ completed: resolveNamedRef(db, "TMTask", "type = 1 AND trashed = 0 AND status != 0", [], ref, { prefixTier: false }).matches,
400
+ };
401
+ throw new ReferenceResolutionError(`no project matching "${ref}" — tried uuid, partial-uuid, and name (list projects with \`things projects\`)${deadNameMatchHint(dead)}`, { code: "not-found", ref });
314
402
  }
315
- const candidates = describeProjectCandidates(db, r.candidates ?? []);
316
- const lines = candidates
317
- .map((c) => ` ${c.uuid.slice(0, 8)} — ${c.title}${c.context !== undefined ? ` (in ${c.context})` : ""}`)
403
+ const all = describeProjectCandidates(db, r.candidates ?? []);
404
+ const shown = all.slice(0, CANDIDATE_CAP);
405
+ const lines = shown
406
+ .map((c) => ` ${c.uuid.slice(0, 8)} — ${c.title}${c.area !== undefined ? ` (in ${c.area})` : ""}`)
318
407
  .join("\n");
319
- throw new ReferenceResolutionError(`"${ref}" matches ${r.matches} projects disambiguate with a uuid or partial-uuid:\n${lines}`, { code: "ambiguous", ref, candidates });
408
+ const more = all.length > CANDIDATE_CAP ? `\n … ${all.length - CANDIDATE_CAP} more` : "";
409
+ throw new ReferenceResolutionError(`"${ref}" matches ${r.matches} projects — disambiguate with a uuid or partial-uuid:\n${lines}${more}`, { code: "ambiguous", ref, candidates: shown });
320
410
  }
321
- /** Short-uuid + area-context candidates for an ambiguous project name. */
411
+ /** Fixed-shape candidates for an ambiguous project name, each with its area container hint. */
322
412
  function describeProjectCandidates(db, candidates) {
323
413
  const areaStmt = db.prepare("SELECT a.title AS title FROM TMTask p LEFT JOIN TMArea a ON a.uuid = p.area WHERE p.uuid = ?");
324
414
  return candidates.map((c) => {
325
415
  const area = areaStmt.get(c.uuid)?.title ?? null;
326
- return { uuid: c.uuid, title: c.title, ...(area !== null && { context: area }) };
416
+ return candidateRef("project", { uuid: c.uuid, title: c.title, area });
327
417
  });
328
418
  }
329
419
  export function resolveTagUuid(db, ref) {
@@ -340,6 +430,47 @@ export function resolveProjectUuid(db, ref, options) {
340
430
  export function resolveAreaUuid(db, ref, options) {
341
431
  return resolveUuidOrThrow(db, "TMArea", "1=1", ref, "area", "things areas", options);
342
432
  }
433
+ /**
434
+ * Resolve a HEADING SELECTOR (spec §2) inside one project through the SAME
435
+ * tiered core every other ref uses: exact title, or uuid (partial-uuid too).
436
+ * There is deliberately NO index/ordinal form — the "reindex hazard" makes an
437
+ * ordinal silently re-target a different heading after any reorder. An
438
+ * empty-string selector is a legal literal query (the app creates titleless
439
+ * headings); duplicates (or several titleless headings) are a resolution
440
+ * PRECONDITION, not an invariant, so ambiguity fails closed with uuid-bearing
441
+ * candidates (the H-DUPLICATE-TAG precedent). Shared by `todo add/move
442
+ * --heading` (via {@link resolveHeadingRef} → the H-AMBIGUOUS-HEADING guard)
443
+ * and by every project heading verb (via the thrower below).
444
+ */
445
+ export function resolveHeadingRef(db, projectUuid, refRaw) {
446
+ return resolveNamedRef(db, "TMTask", "type = 2 AND trashed = 0 AND project = ?", [projectUuid], refRaw);
447
+ }
448
+ /** Render a heading selector for an error (the empty title reads as a phrase). */
449
+ function headingSelLabel(ref) {
450
+ return ref === "" ? "the empty-title heading" : `"${ref}"`;
451
+ }
452
+ /**
453
+ * Resolve a heading selector to its uuid+title within a project, throwing a
454
+ * {@link ReferenceResolutionError} (with uuid candidates on ambiguity) the
455
+ * consumer surfaces render as a usage error. The project-scoped heading verbs
456
+ * and the MCP heading tool resolve through this.
457
+ */
458
+ export function resolveHeadingUuid(db, projectUuid, refRaw) {
459
+ const r = resolveHeadingRef(db, projectUuid, refRaw);
460
+ if (r.resolved !== null)
461
+ return r.resolved;
462
+ const label = headingSelLabel(refRaw);
463
+ if (r.matches === 0) {
464
+ throw new ReferenceResolutionError(`no heading matching ${label} in this project — a heading selector is an exact title or a uuid (list them with \`things project-view <project>\`)`, { code: "not-found", ref: refRaw });
465
+ }
466
+ const all = r.candidates ?? [];
467
+ const capped = all.length > CANDIDATE_CAP;
468
+ throw new ReferenceResolutionError(`${label} matches ${r.matches} headings in this project${capped ? `; first ${CANDIDATE_CAP} shown` : ""} — disambiguate with a uuid`, {
469
+ code: "ambiguous",
470
+ ref: refRaw,
471
+ candidates: all.slice(0, CANDIDATE_CAP).map((c) => candidateRef("heading", c)),
472
+ });
473
+ }
343
474
  /**
344
475
  * A row's EFFECTIVE area: its own `area` link, else the area of its project,
345
476
  * else the area of its heading's project. To-dos nested in a project (or under a
@@ -369,6 +500,30 @@ export function fetchTaskByUuid(db, uuid) {
369
500
  const rows = fetchTaskRows(db, "t.uuid = ?", [uuid]);
370
501
  return rows[0] ?? null;
371
502
  }
503
+ /**
504
+ * The uuid of a repeating template's LATEST spawned instance, or null when the
505
+ * template has none. The GUI-verified "Show Latest" law (SL1,
506
+ * docs/lab/sl1-show-latest.md, 2026-07-29): the pick is `max(creationDate)`
507
+ * among the template's instances — the most recently spawned occurrence — and
508
+ * NOTHING else. It is INDEPENDENT of `startDate`, `userModificationDate`,
509
+ * `stopDate`, and completion `status`: a completed newest-spawned instance is
510
+ * still the latest (the SL1 D1 case). No status filter; spans both to-do and
511
+ * project instances (`rt1_repeatingTemplate` points at the template regardless
512
+ * of type). `creationDate` is the occurrence midnight and unique per occurrence
513
+ * for a normal series, so ties are not expected.
514
+ *
515
+ * TRASHED instances are EXCLUDED (SL2, docs/lab/sl2-trash-dynamics.md, law L1):
516
+ * the GUI Show Latest never selects a trashed instance — it skips to the newest
517
+ * UNTRASHED one, and re-resolves live after an empty-trash. Only `trashed` is
518
+ * filtered; `status` is NOT (a COMPLETED newest-spawned instance is still the
519
+ * latest — SL1 D1). A template with no untrashed instances derives `null`.
520
+ */
521
+ export function latestInstanceUuid(db, templateUuid) {
522
+ const row = db
523
+ .prepare("SELECT uuid FROM TMTask WHERE rt1_repeatingTemplate = ? AND trashed = 0 ORDER BY creationDate DESC LIMIT 1")
524
+ .get(templateUuid);
525
+ return row?.uuid ?? null;
526
+ }
372
527
  export function fetchChecklistRows(db, taskUuid) {
373
528
  const sql = `SELECT ${selectList("TMChecklistItem")} FROM TMChecklistItem WHERE task = ? ORDER BY ${q("index")} ASC`;
374
529
  return db.prepare(sql).all(taskUuid);
@@ -421,20 +576,37 @@ export function fetchTagsForTasks(db, taskUuids) {
421
576
  }
422
577
  return map;
423
578
  }
579
+ /**
580
+ * Stamps the repeating-template flag on a resolved container ref when the
581
+ * TMTask row it came from carries recurrence columns (`rt1_recurrenceRule` /
582
+ * `repeater` non-null) — the disambiguator the CLI renders as the ↻ prefix on
583
+ * a muted container label. Area rows carry neither column, so an area ref is
584
+ * never marked. The flag is set ONLY when true (omit-when-false; the entity
585
+ * emit boundary keeps `false`/`0` but not an absent key — see entities.Ref).
586
+ */
587
+ function markTemplate(ref, recurrenceRule, repeater) {
588
+ if (recurrenceRule != null || repeater != null)
589
+ ref.isRepeatingTemplate = true;
590
+ return ref;
591
+ }
424
592
  /**
425
593
  * Lazy heading-uuid -> owning-project Ref resolver, cached per instance.
426
594
  * Heading-nested to-dos carry project = NULL in the DB (the heading holds
427
- * the link); list views use this to surface the GUI's container label.
595
+ * the link); list views use this to surface the GUI's container label. The
596
+ * owning project's recurrence columns ride along so a to-do nested under a
597
+ * heading of a repeating-template project inherits the template mark.
428
598
  */
429
599
  export function makeHeadingProjectResolver(db) {
430
600
  const cache = new Map();
431
- const stmt = db.prepare("SELECT p.uuid AS uuid, p.title AS title FROM TMTask h JOIN TMTask p ON p.uuid = h.project WHERE h.uuid = ?");
601
+ const stmt = db.prepare("SELECT p.uuid AS uuid, p.title AS title, p.rt1_recurrenceRule AS rt1_recurrenceRule, p.repeater AS repeater FROM TMTask h JOIN TMTask p ON p.uuid = h.project WHERE h.uuid = ?");
432
602
  return (headingUuid) => {
433
603
  const cached = cache.get(headingUuid);
434
604
  if (cached !== undefined)
435
605
  return cached;
436
606
  const hit = stmt.get(headingUuid);
437
- const ref = hit ? { uuid: hit.uuid, title: hit.title ?? "" } : null;
607
+ const ref = hit
608
+ ? markTemplate({ uuid: hit.uuid, title: hit.title ?? "" }, hit.rt1_recurrenceRule, hit.repeater)
609
+ : null;
438
610
  cache.set(headingUuid, ref);
439
611
  return ref;
440
612
  };
@@ -442,7 +614,10 @@ export function makeHeadingProjectResolver(db) {
442
614
  /** Lazy uuid -> Ref resolver over TMTask + TMArea titles, cached per instance. */
443
615
  export function makeRefResolver(db) {
444
616
  const cache = new Map();
445
- const taskStmt = db.prepare("SELECT uuid, title FROM TMTask WHERE uuid = ?");
617
+ // The recurrence columns ride along so a to-do whose container PROJECT is a
618
+ // repeating template resolves a marked ref (TMArea has no such columns, so an
619
+ // area ref — same resolver — is never marked).
620
+ const taskStmt = db.prepare("SELECT uuid, title, rt1_recurrenceRule, repeater FROM TMTask WHERE uuid = ?");
446
621
  const areaStmt = db.prepare("SELECT uuid, title FROM TMArea WHERE uuid = ?");
447
622
  return (uuid) => {
448
623
  if (uuid === null)
@@ -451,7 +626,9 @@ export function makeRefResolver(db) {
451
626
  if (cached !== undefined)
452
627
  return cached;
453
628
  const hit = (taskStmt.get(uuid) ?? areaStmt.get(uuid));
454
- const ref = hit ? { uuid: hit.uuid, title: hit.title ?? "" } : null;
629
+ const ref = hit
630
+ ? markTemplate({ uuid: hit.uuid, title: hit.title ?? "" }, hit.rt1_recurrenceRule, hit.repeater)
631
+ : null;
455
632
  cache.set(uuid, ref);
456
633
  return ref;
457
634
  };
@@ -1 +1 @@
1
- {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/read/queries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/read/queries.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAY,MAAM,sBAAsB,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAyC,MAAM,YAAY,CAAC;AAEhG,6FAA6F;AAC7F,MAAM,CAAC,MAAM,YAAY,GAAG,uDAAuD,CAAC;AAgBpF,kFAAkF;AAClF,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,GAAkB,EAAU,EAAE,CACxD,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,OAAO,GAAG,EAAE,CAAC;AAE9C;;;;GAIG;AACH,MAAM,iBAAiB,GAAsB;IAC3C,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CACd,6DAA6D,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG;CACxF,CAAC;AAEF;;;;GAIG;AACH,MAAM,mBAAmB,GAAiC;IACxD,iCAAiC;IACjC,iBAAiB;IACjB,0DAA0D;IAC1D;QACE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CACd,gEAAgE,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG;KAC3F;IACD,4CAA4C;IAC5C;QACE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CACd,6DAA6D,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG;KACxF;IACD,sDAAsD;IACtD;QACE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CACd;uCACiC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG;KAC5D;IACD,kFAAkF;IAClF;QACE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CACd;uCACiC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG;KAC5D;IACD,sFAAsF;IACtF;QACE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CACd;8EACwE,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG;KACnG;CACF,CAAC;AAEF,2EAA2E;AAC3E,MAAM,cAAc,GAAG,CAAC,SAAiB,EAAU,EAAE,CACnD,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAEjE;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,MAAM,GAAG,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IACtC,OAAO,QAAQ,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACpF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAe;IAC3C,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,mBAAmB,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AAChF,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,OAAO,iBAAiB,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,YAAY,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACzF,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,OAAO,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AACjD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAgB,EAAE,IAAY;IAC/D,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CACN;;;4BAGsB,CACvB;SACA,GAAG,CAAC,IAAI,CAAuB,CAAC;IACnC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,sFAAsF;AACtF;;;;;;GAMG;AACH;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACrB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IACnC,MAAM,CAAC,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9C,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,GAAW;IACrD,OAAO,MAAM,MAAM,mCAAmC,GAAG,GAAG,CAAC;AAC/D,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,wBAAyB,SAAQ,UAAU;IAC7C,IAAI,CAA4B;IAChC,GAAG,CAAS;IACZ,UAAU,CAAiB;IACpC,YACE,OAAe,EACf,IAAmF;QAEnF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;IAC1C,CAAC;CACF;AAeD,MAAM,UAAU,qBAAqB,CACnC,EAAgB,EAChB,MAAc,EACd,MAAM,GAAG,OAAO,EAChB,KAAmB;IAEnB,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,MAAM,UAAU,GAAG,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,EAAE;SACb,OAAO,CAAC,+CAA+C,SAAS,EAAE,CAAC;SACnE,GAAG,CAAC,GAAG,EAAE,GAAG,UAAU,CAAiC,CAAC;IAC3D,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IAC3C,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,UAAU,CAClB,GAAG,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,+CAA+C,CAC3E,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzF,8EAA8E;IAC9E,0EAA0E;IAC1E,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CACN,gFAAgF,SAAS,EAAE,CAC5F;SACA,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,UAAU,CAA2D,CAAC;IAC5F,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,wBAAwB,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,MAAM,GAAG,aAAa,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1F,MAAM,IAAI,wBAAwB,CAChC,iBAAiB,GAAG,oBAAoB,IAAI,CAAC,MAAM,aAAa,IAAI,GAAG,IAAI,oBAAoB,EAC/F;YACE,IAAI,EAAE,WAAW;YACjB,GAAG;YACH,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC1B,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,OAAO,EAAE;gBACjD,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;aACrB,CAAC,CACH;SACF,CACF,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,GAAG,CAAC;AAC9B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,CAAS;IACxC,OAAO,CAAC;SACL,SAAS,CAAC,KAAK,CAAC;SAChB,WAAW,EAAE;SACb,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,MAAM,GAAG,gBAAgB,CAAC;AAchC;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,EAAgB,EAChB,KAAa,EACb,UAAkB,EAClB,UAA+B,EAC/B,MAAc,EACd,OAWC;IAED,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACnC,4EAA4E;IAC5E,4EAA4E;IAC5E,6EAA6E;IAC7E,MAAM,SAAS,GAAG,OAAO,EAAE,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACxF,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC;IAC7C,4EAA4E;IAC5E,gCAAgC;IAChC,MAAM,QAAQ,GAAG,OAAO,EAAE,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/F,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,IAAY,EAAE,KAA0B,EAAS,EAAE,CAC7E,EAAE;SACC,OAAO,CACN,2BAA2B,KAAK,UAAU,UAAU,GAAG,KAAK,QAAQ,IAAI,GAAG,SAAS,EAAE,CACvF;SACA,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,KAAK,EAAE,GAAG,UAAU,CAAqB,CAAC;IACrE,6EAA6E;IAC7E,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,QAA6B,EAAE,EAAS,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3F,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,QAA6B,EAAE,EAAS,EAAE,CACvE,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAE7B,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IAExE,KAAK,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,0BAA0B,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QACxE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACzF,CAAC;IAED,MAAM,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;QAC3F,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QACxE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACzF,CAAC;IAED,4EAA4E;IAC5E,4EAA4E;IAC5E,4EAA4E;IAC5E,2CAA2C;IAC3C,IAAI,OAAO,EAAE,UAAU,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACzE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACzF,MAAM,IAAI,GAAG,GAAG,CAAC,wBAAwB,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QACzD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QACxE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACzF,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AACxC,CAAC;AAED,gFAAgF;AAChF,SAAS,aAAa,CAAC,UAAmB;IACxC,OAAO,UAAU,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,qBAAqB,CAAC;AACnF,CAAC;AAED,SAAS,kBAAkB,CACzB,EAAgB,EAChB,KAAa,EACb,UAAkB,EAClB,GAAW,EACX,IAAY,EACZ,OAAe,EACf,OAAyF;IAEzF,MAAM,CAAC,GAAG,eAAe,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IACnE,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;IAChD,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,wBAAwB,CAChC,MAAM,IAAI,cAAc,GAAG,OAAO,aAAa,CAAC,OAAO,EAAE,UAAU,KAAK,KAAK,CAAC,UAAU,IAAI,YAAY,OAAO,KAAK,EACpH,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAC3B,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,aAAa,CAAC;IAC1C,MAAM,IAAI,wBAAwB,CAChC,IAAI,GAAG,aAAa,CAAC,CAAC,OAAO,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,WAAW,aAAa,QAAQ,CAAC,CAAC,CAAC,EAAE,iCAAiC,EACxH;QACE,IAAI,EAAE,WAAW;QACjB,GAAG;QACH,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,IAAqB,EAAE,CAAC,CAAC,CAAC;KAC3F,CACF,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,8EAA8E;AAC9E,SAAS,eAAe,CAAC,CAAS,EAAE,KAAa,EAAE,GAAW;IAC5D,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;AAC1G,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAIjC;IACC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;IAC9B,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;IAC9B,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;IACrE,IAAI,CAAC,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACvE,+EAA+E;IAC/E,gFAAgF;IAChF,6EAA6E;IAC7E,IAAI,CAAC,GAAG,CAAC;QACP,KAAK,CAAC,IAAI,CACR,GAAG,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,4CAA4C,CACpH,CAAC;IACJ,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5D,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,yBAAyB,CACvC,EAAgB,EAChB,MAAc,EACd,KAAmF,EACnF,cAAc,GAAG,KAAK,EACtB,cAAc,GAAG,KAAK;IAEtB,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,qBAAqB,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAChE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,uEAAuE;QACvE,4EAA4E;QAC5E,IAAI,GAAG,YAAY,UAAU,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;YAAE,MAAM,GAAG,CAAC;IAChF,CAAC;IACD,MAAM,SAAS,GAAG,cAAc;QAC9B,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,cAAc;YACd,CAAC,CAAC,0BAA0B;YAC5B,CAAC,CAAC,yCAAyC,CAAC;IAChD,MAAM,CAAC,GAAG,eAAe,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,EAAE;QAC1D,UAAU,EAAE,KAAK;QACjB,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;KAC7F,CAAC,CAAC;IACH,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;IAChD,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QACpB,8EAA8E;QAC9E,8EAA8E;QAC9E,qEAAqE;QACrE,MAAM,IAAI,GACR,cAAc,IAAI,cAAc;YAC9B,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE,OAAO,EAAE,eAAe,CAAC,EAAE,EAAE,QAAQ,EAAE,0BAA0B,EAAE,EAAE,EAAE,GAAG,EAAE;oBAC1E,UAAU,EAAE,KAAK;iBAClB,CAAC,CAAC,OAAO;gBACV,SAAS,EAAE,eAAe,CACxB,EAAE,EACF,QAAQ,EACR,0CAA0C,EAC1C,EAAE,EACF,GAAG,EACH,EAAE,UAAU,EAAE,KAAK,EAAE,CACtB,CAAC,OAAO;aACV,CAAC;QACR,MAAM,IAAI,wBAAwB,CAChC,wBAAwB,GAAG,kFAAkF,iBAAiB,CAAC,IAAI,CAAC,EAAE,EACtI,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAC3B,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,yBAAyB,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,KAAK;SAChB,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC9F;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,MAAM,GAAG,aAAa,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1F,MAAM,IAAI,wBAAwB,CAChC,IAAI,GAAG,aAAa,CAAC,CAAC,OAAO,0DAA0D,KAAK,GAAG,IAAI,EAAE,EACrG,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,CAC9C,CAAC;AACJ,CAAC;AAED,+FAA+F;AAC/F,SAAS,yBAAyB,CAChC,EAAgB,EAChB,UAA6C;IAE7C,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CACzB,8FAA8F,CAC/F,CAAC;IACF,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC1B,MAAM,IAAI,GAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAA0C,EAAE,KAAK,IAAI,IAAI,CAAC;QAC3F,OAAO,YAAY,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAgB,EAAE,GAAW;IAC1D,OAAO,kBAAkB,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;AAC3E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,EAAgB,EAChB,GAAW,EACX,OAKC;IAED,OAAO,kBAAkB,CACvB,EAAE,EACF,QAAQ,EACR,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,0BAA0B,EACnE,GAAG,EACH,SAAS,EACT,iBAAiB,EACjB,OAAO,CACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,EAAgB,EAChB,GAAW,EACX,OAAyF;IAEzF,OAAO,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;AACvF,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAC/B,EAAgB,EAChB,WAAmB,EACnB,MAAc;IAEd,OAAO,eAAe,CACpB,EAAE,EACF,QAAQ,EACR,0CAA0C,EAC1C,CAAC,WAAW,CAAC,EACb,MAAM,CACP,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,SAAS,eAAe,CAAC,GAAW;IAClC,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC;AAC7D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,EAAgB,EAChB,WAAmB,EACnB,MAAc;IAEd,MAAM,CAAC,GAAG,iBAAiB,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IACrD,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC,QAAQ,CAAC;IAC3C,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,wBAAwB,CAChC,uBAAuB,KAAK,sHAAsH,EAClJ,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,CACnC,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,aAAa,CAAC;IAC1C,MAAM,IAAI,wBAAwB,CAChC,GAAG,KAAK,YAAY,CAAC,CAAC,OAAO,4BAA4B,MAAM,CAAC,CAAC,CAAC,WAAW,aAAa,QAAQ,CAAC,CAAC,CAAC,EAAE,6BAA6B,EACpI;QACE,IAAI,EAAE,WAAW;QACjB,GAAG,EAAE,MAAM;QACX,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;KAC/E,CACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;EAI5B,CAAC;AAEH,MAAM,UAAU,aAAa,CAAC,EAAgB,EAAE,KAAa,EAAE,SAAoB,EAAE;IACnF,MAAM,GAAG,GAAG,UAAU,UAAU,CAAC,QAAQ,CAAC;SACvC,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;SACpB,IAAI,CAAC,IAAI,CAAC,KAAK,cAAc,yCAAyC,KAAK,EAAE,CAAC;IACjF,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAI,MAAkB,CAAyB,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAgB,EAAE,IAAY;IAC5D,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAgB,EAAE,YAAoB;IACvE,MAAM,GAAG,GAAG,EAAE;SACX,OAAO,CACN,4GAA4G,CAC7G;SACA,GAAG,CAAC,YAAY,CAAiC,CAAC;IACrD,OAAO,GAAG,EAAE,IAAI,IAAI,IAAI,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAgB,EAAE,QAAgB;IACnE,MAAM,GAAG,GAAG,UAAU,UAAU,CAAC,iBAAiB,CAAC,iDAAiD,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACrH,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAA8B,CAAC;AACpE,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAgB,EAAE,SAAmB;IACrE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAiB,CAAC;IACrC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACvC,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG;;oCAEsB,YAAY;6BACnB,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;IACjD,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAI3C,CAAC;IACH,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QAChD,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,YAAY,CAAC,GAAQ,EAAE,cAAuB,EAAE,QAAiB;IACxE,IAAI,cAAc,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI;QAAE,GAAG,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAC/E,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CAAC,EAAgB;IACzD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC5C,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CACrB,gLAAgL,CACjL,CAAC;IACF,OAAO,CAAC,WAAW,EAAE,EAAE;QACrB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACtC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAEnB,CAAC;QACd,MAAM,GAAG,GAAG,GAAG;YACb,CAAC,CAAC,YAAY,CACV,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,EAC1C,GAAG,CAAC,kBAAkB,EACtB,GAAG,CAAC,QAAQ,CACb;YACH,CAAC,CAAC,IAAI,CAAC;QACT,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAC5B,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,eAAe,CAAC,EAAgB;IAC9C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC5C,4EAA4E;IAC5E,8EAA8E;IAC9E,+CAA+C;IAC/C,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CACzB,6EAA6E,CAC9E,CAAC;IACF,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC;IAC7E,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QACxC,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAExC,CAAC;QACd,MAAM,GAAG,GAAG,GAAG;YACb,CAAC,CAAC,YAAY,CACV,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,EAC1C,GAAG,CAAC,kBAAkB,EACtB,GAAG,CAAC,QAAQ,CACb;YACH,CAAC,CAAC,IAAI,CAAC;QACT,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACrB,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Container-scoped sandbox — the ONE membership relation, shared by reads,
3
+ * writes, and reference resolution. Generalizes the `--area` post-filter
4
+ * (`area-filter.ts`) from "one area" to "one container" (an area OR a project),
5
+ * and adds the leak-critical SQL fragments the single-row / candidate paths and
6
+ * the write ancestry check share so an out-of-scope item is indistinguishable
7
+ * from a nonexistent one (the no-oracle guarantee — see
8
+ * docs/design/container-scope.md).
9
+ *
10
+ * A scope is resolved ONCE at `openThings()` and pinned for the client's life
11
+ * (never re-resolved per call — a deleted container becomes a safe empty jail,
12
+ * a recreated same-named one never silently re-binds). Every read reaches the
13
+ * consumer through `client.read.*` and every write through `runMutation`, so the
14
+ * two forms below (the entity predicate `inScopeItem` and the SQL fragments) are
15
+ * the only two places the relation is expressed.
16
+ */
17
+ import type { DatabaseSync } from "node:sqlite";
18
+ import type { AnyTask } from "../model/entities.ts";
19
+ import { ReferenceResolutionError } from "./queries.ts";
20
+ import type { ListItem, SidebarSection, TodayView } from "./views.ts";
21
+ import type { IsoDate } from "../model/dates.ts";
22
+ /** Where a scope declaration came from — surfaced as `meta.scope.source`. */
23
+ export type ScopeSource = "flag" | "env" | "config";
24
+ /**
25
+ * A resolved container scope: pinned at open, carried on the client. `kind`
26
+ * distinguishes an area jail from a project jail; `uuid`/`title` name the
27
+ * container; `areaUuid` is the containing area (the scope area itself for an
28
+ * area scope; the project's own area — or null for an area-less project — for a
29
+ * project scope), used to scope the `areas` view and area-ref resolution.
30
+ */
31
+ export interface ResolvedScope {
32
+ kind: "area" | "project";
33
+ uuid: string;
34
+ title: string;
35
+ source: ScopeSource;
36
+ /** The relevant area context (area scope: itself; project scope: the project's area, null if area-less). */
37
+ areaUuid: string | null;
38
+ }
39
+ /** The `meta.scope` wire shape (a subset of {@link ResolvedScope}). */
40
+ export interface ScopeMeta {
41
+ kind: "area" | "project";
42
+ uuid: string;
43
+ title: string;
44
+ source: ScopeSource;
45
+ }
46
+ /**
47
+ * Fail-closed if a requested scope is unresolvable — `things mcp --scope <bogus>`
48
+ * refuses to start, a CLI invocation errors as usage — so the daemon never runs
49
+ * unscoped when a scope was asked for. A subclass of {@link ReferenceResolutionError}
50
+ * so existing usage-class handlers treat it uniformly.
51
+ */
52
+ export declare class ScopeResolutionError extends ReferenceResolutionError {
53
+ constructor(message: string, ref: string);
54
+ }
55
+ /**
56
+ * Resolve a scope ref (uuid, uuid-prefix, or unique area/project name) to a
57
+ * pinned {@link ResolvedScope}. Areas win over same-named projects (mirroring
58
+ * `classifyShowTarget`). A to-do / heading / tag ref is a usage error — only an
59
+ * area or a project can be a container. Fail-closed: an unresolvable ref throws
60
+ * {@link ScopeResolutionError}.
61
+ */
62
+ export declare function resolveScope(db: DatabaseSync, ref: string, source: ScopeSource): ResolvedScope;
63
+ /** The `meta.scope` projection of a resolved scope (drops the internal `areaUuid`). */
64
+ export declare function scopeMeta(scope: ResolvedScope): ScopeMeta;
65
+ /**
66
+ * The entity-level membership predicate — the SAME relation as
67
+ * {@link scopeMembershipSql}, for an already-shaped view row. Area scope: the
68
+ * row's EFFECTIVE area is the scope (its `area` Ref, which queries.ts already
69
+ * resolves transitively). Project scope: the row IS the project, is a direct
70
+ * child, or is nested under one of the project's headings.
71
+ */
72
+ export declare function inScopeItem(item: ListItem | AnyTask, scope: ResolvedScope): boolean;
73
+ /**
74
+ * The SQL fragment on alias `t` — the single membership source the leak-critical
75
+ * query paths AND the write ancestry check share. Area: the effective-area
76
+ * COALESCE equals the scope. Project: the row is the project, its direct child,
77
+ * or a heading-nested child.
78
+ */
79
+ export declare function scopeMembershipSql(scope: ResolvedScope): {
80
+ where: string;
81
+ binds: string[];
82
+ };
83
+ /** True when the given uuid is an in-scope TMTask row (single-row leak paths, write parity). */
84
+ export declare function isUuidInScope(db: DatabaseSync, uuid: string, scope: ResolvedScope): boolean;
85
+ /**
86
+ * The membership clause for {@link resolveTaskUuidPrefix} (alias `t`): the same
87
+ * fragment as {@link scopeMembershipSql}, so an out-of-scope uuid resolves to
88
+ * "not found" through the identical code path a nonexistent one does.
89
+ */
90
+ export declare function taskMembershipClause(scope: ResolvedScope): {
91
+ where: string;
92
+ binds: string[];
93
+ };
94
+ /**
95
+ * The membership clause for {@link resolveNamedRef} over TMTask projects
96
+ * (UNqualified columns — that resolver aliases nothing). A project carries its
97
+ * area directly (no inheritance), so area scope compares `area`; project scope
98
+ * pins the one project uuid.
99
+ */
100
+ export declare function namedProjectClause(scope: ResolvedScope): {
101
+ where: string;
102
+ binds: string[];
103
+ };
104
+ /**
105
+ * The membership clause for {@link resolveNamedRef} over TMArea (UNqualified).
106
+ * Area scope: the one scope area. Project scope: the project's own area (an
107
+ * area-less project has none, so nothing resolves — `0`).
108
+ */
109
+ export declare function namedAreaClause(scope: ResolvedScope): {
110
+ where: string;
111
+ binds: string[];
112
+ };
113
+ /** Filter a flat view (upcoming/logbook/trash/search/changes) to in-scope rows. */
114
+ export declare function filterListByScope<T extends ListItem>(items: T[], scope: ResolvedScope): T[];
115
+ /**
116
+ * Filter the grouped sidebar catalogue (anytime/someday) to in-scope rows: each
117
+ * section's items are filtered and empty sections drop, so the per-block caps
118
+ * size the survivors.
119
+ */
120
+ export declare function filterSectionsByScope(sections: SidebarSection[], scope: ResolvedScope): SidebarSection[];
121
+ /**
122
+ * Filter the Today split to in-scope rows, RECOMPUTING the badge over the
123
+ * surviving OPEN members so it never counts a dropped (out-of-scope) row — the
124
+ * same treatment `filterTodayByArea` gives the area filter.
125
+ */
126
+ export declare function filterTodayByScope(view: TodayView, scope: ResolvedScope, todayIso: IsoDate): TodayView;