things-api 0.8.0 → 0.10.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 (238) hide show
  1. package/README.md +31 -11
  2. package/dist/audit/log.js +56 -2
  3. package/dist/audit/log.js.map +1 -1
  4. package/dist/audit/schema.d.ts +26 -8
  5. package/dist/audit/schema.js +42 -1
  6. package/dist/audit/schema.js.map +1 -1
  7. package/dist/cli/commands/area.d.ts +34 -2
  8. package/dist/cli/commands/area.js +140 -28
  9. package/dist/cli/commands/area.js.map +1 -1
  10. package/dist/cli/commands/doctor.d.ts +1 -1
  11. package/dist/cli/commands/doctor.js +44 -5
  12. package/dist/cli/commands/doctor.js.map +1 -1
  13. package/dist/cli/commands/mcp.js +23 -4
  14. package/dist/cli/commands/mcp.js.map +1 -1
  15. package/dist/cli/commands/project.d.ts +23 -1
  16. package/dist/cli/commands/project.js +82 -15
  17. package/dist/cli/commands/project.js.map +1 -1
  18. package/dist/cli/commands/reads.d.ts +6 -125
  19. package/dist/cli/commands/reads.js +649 -657
  20. package/dist/cli/commands/reads.js.map +1 -1
  21. package/dist/cli/commands/repeat-flags.d.ts +20 -0
  22. package/dist/cli/commands/repeat-flags.js +76 -0
  23. package/dist/cli/commands/repeat-flags.js.map +1 -0
  24. package/dist/cli/commands/setup.js +2 -3
  25. package/dist/cli/commands/setup.js.map +1 -1
  26. package/dist/cli/commands/show.d.ts +1 -1
  27. package/dist/cli/commands/show.js +169 -18
  28. package/dist/cli/commands/show.js.map +1 -1
  29. package/dist/cli/commands/snapshot.js +1 -1
  30. package/dist/cli/commands/snapshot.js.map +1 -1
  31. package/dist/cli/commands/todo.d.ts +1 -1
  32. package/dist/cli/commands/todo.js +21 -9
  33. package/dist/cli/commands/todo.js.map +1 -1
  34. package/dist/cli/commands/writes.js +378 -148
  35. package/dist/cli/commands/writes.js.map +1 -1
  36. package/dist/cli/did-you-mean.d.ts +29 -0
  37. package/dist/cli/did-you-mean.js +53 -0
  38. package/dist/cli/did-you-mean.js.map +1 -0
  39. package/dist/cli/excess-args.d.ts +15 -0
  40. package/dist/cli/excess-args.js +51 -0
  41. package/dist/cli/excess-args.js.map +1 -0
  42. package/dist/cli/glyphs.d.ts +67 -7
  43. package/dist/cli/glyphs.js +202 -19
  44. package/dist/cli/glyphs.js.map +1 -1
  45. package/dist/cli/help.d.ts +54 -0
  46. package/dist/cli/help.js +355 -0
  47. package/dist/cli/help.js.map +1 -0
  48. package/dist/cli/main.js +36 -21
  49. package/dist/cli/main.js.map +1 -1
  50. package/dist/cli/period.d.ts +39 -0
  51. package/dist/cli/period.js +141 -0
  52. package/dist/cli/period.js.map +1 -0
  53. package/dist/cli/read-driver.d.ts +83 -0
  54. package/dist/cli/read-driver.js +215 -0
  55. package/dist/cli/read-driver.js.map +1 -0
  56. package/dist/cli/render.d.ts +246 -0
  57. package/dist/cli/render.js +806 -0
  58. package/dist/cli/render.js.map +1 -0
  59. package/dist/cli/resolve-invocation.d.ts +116 -0
  60. package/dist/cli/resolve-invocation.js +261 -0
  61. package/dist/cli/resolve-invocation.js.map +1 -0
  62. package/dist/cli/shell-quote.d.ts +9 -0
  63. package/dist/cli/shell-quote.js +12 -0
  64. package/dist/cli/shell-quote.js.map +1 -0
  65. package/dist/cli/tag-filters.d.ts +59 -0
  66. package/dist/cli/tag-filters.js +57 -0
  67. package/dist/cli/tag-filters.js.map +1 -0
  68. package/dist/cli/verb-hint.d.ts +25 -0
  69. package/dist/cli/verb-hint.js +138 -0
  70. package/dist/cli/verb-hint.js.map +1 -0
  71. package/dist/cli/width.d.ts +135 -0
  72. package/dist/cli/width.js +313 -0
  73. package/dist/cli/width.js.map +1 -0
  74. package/dist/client.d.ts +146 -24
  75. package/dist/client.js +106 -16
  76. package/dist/client.js.map +1 -1
  77. package/dist/config.d.ts +11 -0
  78. package/dist/config.js +3 -0
  79. package/dist/config.js.map +1 -1
  80. package/dist/contracts.d.ts +136 -1
  81. package/dist/contracts.js +44 -1
  82. package/dist/contracts.js.map +1 -1
  83. package/dist/db/fingerprint.d.ts +12 -0
  84. package/dist/db/fingerprint.js +15 -1
  85. package/dist/db/fingerprint.js.map +1 -1
  86. package/dist/db/locate.js +1 -1
  87. package/dist/db/locate.js.map +1 -1
  88. package/dist/diagnose.d.ts +63 -0
  89. package/dist/diagnose.js +38 -1
  90. package/dist/diagnose.js.map +1 -1
  91. package/dist/index.d.ts +30 -4
  92. package/dist/index.js +35 -2
  93. package/dist/index.js.map +1 -1
  94. package/dist/mcp/server.d.ts +9 -1
  95. package/dist/mcp/server.js +850 -128
  96. package/dist/mcp/server.js.map +1 -1
  97. package/dist/model/entities.d.ts +40 -7
  98. package/dist/model/entities.js.map +1 -1
  99. package/dist/model/mappers.d.ts +7 -0
  100. package/dist/model/mappers.js +20 -3
  101. package/dist/model/mappers.js.map +1 -1
  102. package/dist/model/occurrences.d.ts +6 -1
  103. package/dist/model/occurrences.js +9 -5
  104. package/dist/model/occurrences.js.map +1 -1
  105. package/dist/model/recurrence.d.ts +17 -8
  106. package/dist/model/recurrence.js.map +1 -1
  107. package/dist/model/serialize.d.ts +28 -0
  108. package/dist/model/serialize.js +80 -0
  109. package/dist/model/serialize.js.map +1 -0
  110. package/dist/model/when-sugar.d.ts +47 -0
  111. package/dist/model/when-sugar.js +45 -0
  112. package/dist/model/when-sugar.js.map +1 -0
  113. package/dist/read/area-view.d.ts +8 -1
  114. package/dist/read/area-view.js +49 -13
  115. package/dist/read/area-view.js.map +1 -1
  116. package/dist/read/caps.d.ts +14 -0
  117. package/dist/read/caps.js +21 -0
  118. package/dist/read/caps.js.map +1 -0
  119. package/dist/read/filter-contract.d.ts +117 -0
  120. package/dist/read/filter-contract.js +78 -0
  121. package/dist/read/filter-contract.js.map +1 -0
  122. package/dist/read/log-boundary.d.ts +9 -4
  123. package/dist/read/log-boundary.js.map +1 -1
  124. package/dist/read/predicates.d.ts +61 -0
  125. package/dist/read/predicates.js +78 -0
  126. package/dist/read/predicates.js.map +1 -0
  127. package/dist/read/project-view.d.ts +12 -1
  128. package/dist/read/project-view.js +39 -8
  129. package/dist/read/project-view.js.map +1 -1
  130. package/dist/read/queries.d.ts +156 -8
  131. package/dist/read/queries.js +261 -38
  132. package/dist/read/queries.js.map +1 -1
  133. package/dist/read/search-rank.d.ts +36 -0
  134. package/dist/read/search-rank.js +31 -0
  135. package/dist/read/search-rank.js.map +1 -0
  136. package/dist/read/sections.d.ts +51 -0
  137. package/dist/read/sections.js +37 -0
  138. package/dist/read/sections.js.map +1 -0
  139. package/dist/read/show-target.d.ts +13 -4
  140. package/dist/read/show-target.js +11 -2
  141. package/dist/read/show-target.js.map +1 -1
  142. package/dist/read/sidebar-order.d.ts +19 -0
  143. package/dist/read/sidebar-order.js +93 -0
  144. package/dist/read/sidebar-order.js.map +1 -0
  145. package/dist/read/tags.d.ts +27 -3
  146. package/dist/read/tags.js +83 -12
  147. package/dist/read/tags.js.map +1 -1
  148. package/dist/read/truncation.d.ts +71 -0
  149. package/dist/read/truncation.js +217 -0
  150. package/dist/read/truncation.js.map +1 -0
  151. package/dist/read/views.d.ts +177 -19
  152. package/dist/read/views.js +390 -213
  153. package/dist/read/views.js.map +1 -1
  154. package/dist/surface-copy.d.ts +42 -0
  155. package/dist/surface-copy.js +55 -0
  156. package/dist/surface-copy.js.map +1 -1
  157. package/dist/sync-health.d.ts +78 -0
  158. package/dist/sync-health.js +312 -0
  159. package/dist/sync-health.js.map +1 -0
  160. package/dist/write/accessibility-probe.d.ts +12 -0
  161. package/dist/write/accessibility-probe.js +63 -0
  162. package/dist/write/accessibility-probe.js.map +1 -0
  163. package/dist/write/automation-probe.d.ts +7 -0
  164. package/dist/write/automation-probe.js +8 -1
  165. package/dist/write/automation-probe.js.map +1 -1
  166. package/dist/write/batch.js +4 -2
  167. package/dist/write/batch.js.map +1 -1
  168. package/dist/write/capabilities.d.ts +8 -0
  169. package/dist/write/capabilities.js +13 -5
  170. package/dist/write/capabilities.js.map +1 -1
  171. package/dist/write/commands.d.ts +2 -0
  172. package/dist/write/commands.js +562 -48
  173. package/dist/write/commands.js.map +1 -1
  174. package/dist/write/edit-checklist.js +3 -2
  175. package/dist/write/edit-checklist.js.map +1 -1
  176. package/dist/write/guards.d.ts +2 -7
  177. package/dist/write/guards.js +64 -6
  178. package/dist/write/guards.js.map +1 -1
  179. package/dist/write/heading.js +2 -0
  180. package/dist/write/heading.js.map +1 -1
  181. package/dist/write/lock.d.ts +40 -2
  182. package/dist/write/lock.js +91 -14
  183. package/dist/write/lock.js.map +1 -1
  184. package/dist/write/make-repeating-project.d.ts +4 -0
  185. package/dist/write/make-repeating-project.js +253 -0
  186. package/dist/write/make-repeating-project.js.map +1 -0
  187. package/dist/write/operations.d.ts +145 -1
  188. package/dist/write/operations.js +48 -0
  189. package/dist/write/operations.js.map +1 -1
  190. package/dist/write/pipeline.d.ts +19 -0
  191. package/dist/write/pipeline.js +109 -26
  192. package/dist/write/pipeline.js.map +1 -1
  193. package/dist/write/pre-state.d.ts +68 -3
  194. package/dist/write/pre-state.js +102 -3
  195. package/dist/write/pre-state.js.map +1 -1
  196. package/dist/write/reopen.js +3 -2
  197. package/dist/write/reopen.js.map +1 -1
  198. package/dist/write/reorder.js +27 -17
  199. package/dist/write/reorder.js.map +1 -1
  200. package/dist/write/repeat-rule.d.ts +22 -0
  201. package/dist/write/repeat-rule.js +258 -0
  202. package/dist/write/repeat-rule.js.map +1 -0
  203. package/dist/write/reversibility.js +49 -0
  204. package/dist/write/reversibility.js.map +1 -1
  205. package/dist/write/tag-refs.d.ts +47 -0
  206. package/dist/write/tag-refs.js +126 -0
  207. package/dist/write/tag-refs.js.map +1 -0
  208. package/dist/write/undo.d.ts +74 -5
  209. package/dist/write/undo.js +494 -80
  210. package/dist/write/undo.js.map +1 -1
  211. package/dist/write/vectors/registry.d.ts +17 -1
  212. package/dist/write/vectors/registry.js +18 -2
  213. package/dist/write/vectors/registry.js.map +1 -1
  214. package/dist/write/vectors/types.d.ts +119 -3
  215. package/dist/write/vectors/ui-certification.d.ts +48 -0
  216. package/dist/write/vectors/ui-certification.js +46 -0
  217. package/dist/write/vectors/ui-certification.js.map +1 -0
  218. package/dist/write/vectors/ui-drag.d.ts +188 -0
  219. package/dist/write/vectors/ui-drag.js +1095 -0
  220. package/dist/write/vectors/ui-drag.js.map +1 -0
  221. package/dist/write/vectors/ui-recipes.d.ts +70 -0
  222. package/dist/write/vectors/ui-recipes.js +558 -0
  223. package/dist/write/vectors/ui-recipes.js.map +1 -0
  224. package/dist/write/vectors/ui.d.ts +137 -0
  225. package/dist/write/vectors/ui.js +656 -0
  226. package/dist/write/vectors/ui.js.map +1 -0
  227. package/dist/write/verify/delta.d.ts +31 -3
  228. package/dist/write/verify/delta.js +22 -6
  229. package/dist/write/verify/delta.js.map +1 -1
  230. package/dist/write/verify/poller.js +1 -0
  231. package/dist/write/verify/poller.js.map +1 -1
  232. package/package.json +1 -1
  233. package/dist/cli/exit-codes.d.ts +0 -26
  234. package/dist/cli/exit-codes.js +0 -26
  235. package/dist/cli/exit-codes.js.map +0 -1
  236. package/dist/cli/output.d.ts +0 -42
  237. package/dist/cli/output.js +0 -16
  238. package/dist/cli/output.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truncation.js","sourceRoot":"","sources":["../../src/read/truncation.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,18 @@
20
20
  * overdue bucket=1 items roll back into Today proper (live-
21
21
  * verified against the UI, 2026-07-02).
22
22
  * Sidebar badge split: red = items with deadline <= today,
23
- * gray = the rest (exact 270/122 reconciliation on live data).
23
+ * gray = the rest (exact 270/122 reconciliation on live data). The
24
+ * badge counts OPEN members only — a checked-but-unswept row is in
25
+ * the list but out of the count (the GUI badge is remaining work).
26
+ * CHECKED-BUT-UNSWEPT (GUI-parity ruling 2026-07-14, Mike — "this
27
+ * is the behavior of the Things GUI and I like it"): membership is
28
+ * OPEN_OR_UNSWEPT, not OPEN — a completed/canceled row the log-move
29
+ * sweep has NOT yet passed (completion ≠ logged; see
30
+ * log-boundary.ts) stays in Today IN PLACE, keeping the exact
31
+ * comparator slot (startBucket / referenceDate / todayIndex) it held
32
+ * open. It leaves when the sweep boundary advances past its stopDate
33
+ * (boundary-relative, no new state). Mixed-context resolved styling
34
+ * (dim / dim+strike) applies automatically in formatItem.
24
35
  * - anytime: ALL active items — unscheduled PLUS Today members (the UI
25
36
  * renders Today members with a star; live-verified via screenshot
26
37
  * 2026-07-02: starred = in Today, unstarred = unscheduled).
@@ -29,7 +40,29 @@
29
40
  * project that is not itself anytime-visible (someday/future/
30
41
  * logged/trashed) are excluded — the project row represents
31
42
  * them. Result is grouped in sidebar order (SidebarSection[]).
32
- * - upcoming: start=2 AND startDate > today, PLUS each fixed repeating
43
+ * CHECKED-BUT-UNSWEPT (GUI-parity ruling 2026-07-14, Mike): like
44
+ * Today, membership is OPEN_OR_UNSWEPT — a closed row the sweep has
45
+ * not passed keeps its index slot until the boundary moves past its
46
+ * stopDate. A closed-but-unswept PROJECT row shows in place and its
47
+ * children stay cascade-excluded (PROJECT_ANYTIME_ACTIVE still tests
48
+ * p.status = 0): the checked project row represents its children,
49
+ * the same precedent as a logged/someday container.
50
+ * - upcoming: TWO cohorts merged, grouped/sorted by COALESCE(startDate,
51
+ * deadline) (UPC1, GUI-verified, docs/lab/upcoming-research.md):
52
+ * (1) SCHEDULED — start=2 AND startDate > today, grouped under its
53
+ * when-date (a deadline it also carries rides along as a flag);
54
+ * (2) DEADLINE-FORECAST — startDate IS NULL AND start IN (1, 2)
55
+ * AND deadline > today AND (deadlineSuppressionDate IS NULL OR
56
+ * deadlineSuppressionDate < deadline), grouped under its DEADLINE
57
+ * date (both to-dos and projects). INBOX (start=0) is EXCLUDED — a
58
+ * future deadline does not forecast an Inbox item into Upcoming,
59
+ * though a DUE one still pulls it into Today. The suppression guard
60
+ * drops a dismissed-nag deadline (supp == deadline) and lets a
61
+ * re-armed one (supp < deadline) reappear — the todayView clause
62
+ * one step earlier (deadline > today). A when+deadline row appears
63
+ * ONCE under its when-date, never double-emitted (the forecast
64
+ * cohort requires startDate IS NULL). Forecast rows keep
65
+ * startDate=null (no faked when-date). PLUS each fixed repeating
33
66
  * template's next occurrence synthesized from
34
67
  * rt1_nextInstanceStartDate (UI parity; opt out via
35
68
  * repeats:false). Occurrence deadline = start − rule.ts
@@ -48,22 +81,81 @@
48
81
  import type { DatabaseSync } from "node:sqlite";
49
82
  import { type IsoDate } from "../model/dates.ts";
50
83
  import type { Project, Ref, Todo } from "../model/entities.ts";
84
+ import type { Area } from "../model/entities.ts";
51
85
  export type ListItem = Todo | Project;
52
86
  /** Optional list-view filters. */
53
87
  export interface ViewFilter {
54
88
  /**
55
- * Tag (uuid or unique title): direct OR inherited membership (UI
56
- * semantics), INCLUDING items tagged with a hierarchy descendant of the
57
- * given tag (documented app behavior the UI's tag filter matches
58
- * child-tagged items; not lab-oracled).
89
+ * Convenience shorthand for a single-element {@link tags} a lone
90
+ * inheritance-inclusive tag ref. Production surfaces (CLI `--tag`, MCP
91
+ * `tag`) always pass the array form; this exists for internal/test callers.
59
92
  */
60
93
  tag?: string;
61
94
  /**
62
- * Match the given tag ONLY no hierarchy descendants. Useful when a
95
+ * Tag refs (uuid or unique title). In FLAT views (today/inbox/anytime/
96
+ * someday/upcoming/search/logbook) this is direct OR inherited membership (UI
97
+ * semantics), INCLUDING items tagged with a hierarchy descendant of each
98
+ * given tag (documented app behavior — the UI's tag filter matches
99
+ * child-tagged items; not lab-oracled). In CONTAINER views (`project show`,
100
+ * `area show`, the `projects` list) the same ref instead matches rows carrying
101
+ * the tag DIRECTLY (still with descendant expansion) — the view's own
102
+ * container-inheritance hop is suppressed, since every child inherits the
103
+ * container's tags and an inheritance-inclusive filter there is vacuous. The
104
+ * host view selects the behavior via {@link tagFilter}'s `container` option.
105
+ * Multiple refs AND together — an item must match EVERY ref (each
106
+ * independently expanded to its descendant set, OR-matched within,
107
+ * AND-combined across).
108
+ */
109
+ tags?: string[];
110
+ /**
111
+ * Match each given tag ref ONLY — no hierarchy descendants. Useful when a
63
112
  * parent tag has its own direct assignments distinct from its children's.
64
113
  */
65
114
  exactTag?: boolean;
115
+ /**
116
+ * Only items with NO tag (the GUI's "No Tag"). In FLAT views this negates the
117
+ * WHOLE direct+inherited membership relation — an item is untagged iff no
118
+ * possible `tag` value could ever match it. In CONTAINER views it instead
119
+ * means "no DIRECT tag" (the container's own inherited tags are suppressed,
120
+ * matching the container `tag` semantics). Mutually exclusive with
121
+ * `tag`/`exactTag` (the surfaces reject the combination).
122
+ */
123
+ untagged?: boolean;
124
+ /**
125
+ * Only OPEN items whose deadline is strictly BEFORE today (due-today is NOT
126
+ * overdue — it mirrors the app's Today badge, where an equal-to-today
127
+ * deadline is "due" and only an earlier one is "overdue"). A content scope
128
+ * like `tag`: it narrows, never lifts a default, and composes as AND with
129
+ * `tag`/`untagged`. The boundary rides the view's injected clock (see
130
+ * {@link OVERDUE}). Honored by the current-work views (today, inbox, anytime,
131
+ * someday, search); the forward-looking `upcoming` and the closed-item
132
+ * `logbook` deliberately do not accept it (see docs/design/cli-grammar.md).
133
+ */
134
+ overdue?: boolean;
66
135
  }
136
+ /**
137
+ * Compose the tag scope for a filter into an AND-chained SQL fragment plus its
138
+ * binds. Every clause AND-combines: the `untagged` negation and each `--tag`
139
+ * ref (each ref independently resolved and descendant-expanded per `exactTag`).
140
+ * The mutually-exclusive combination (`untagged` with a tag-presence flag) is
141
+ * refused at the CLI/MCP surfaces; here it would simply AND to an empty result.
142
+ * Splices in before {@link overdueFilter} so the tag binds precede the overdue
143
+ * bind.
144
+ *
145
+ * `options.container` selects the CONTAINER semantics (`project show` /
146
+ * `area show` / the `projects` list): the view's own inheritance hop is dropped,
147
+ * so `--tag` matches a DIRECT assignment (still descendant-expanded) and
148
+ * `--untagged` means "no direct tag". Every child inherits its container's tags,
149
+ * so an inheritance-inclusive filter there is vacuous — direct-on-the-row is the
150
+ * useful, GUI-faithful behavior. FLAT views omit the option and keep the
151
+ * inheritance-inclusive relation.
152
+ */
153
+ export declare function tagFilter(db: DatabaseSync, filter: ViewFilter | undefined, options?: {
154
+ container?: boolean;
155
+ }): {
156
+ sql: string;
157
+ binds: string[];
158
+ };
67
159
  export interface TodayView {
68
160
  today: ListItem[];
69
161
  evening: ListItem[];
@@ -73,8 +165,28 @@ export interface TodayView {
73
165
  other: number;
74
166
  };
75
167
  }
76
- export declare function todayView(db: DatabaseSync, now?: Date, filter?: ViewFilter): TodayView;
77
- export declare function inboxView(db: DatabaseSync, filter?: ViewFilter): ListItem[];
168
+ export interface TodayFilter extends ViewFilter {
169
+ /**
170
+ * Restrict to the This-Evening section: the Today section is filtered out
171
+ * (returned empty) and the badge counts only the evening members. A section
172
+ * visibility toggle, not a volume change — the row limit still applies.
173
+ */
174
+ eveningOnly?: boolean;
175
+ }
176
+ export declare function todayView(db: DatabaseSync, now?: Date, filter?: TodayFilter): TodayView;
177
+ export interface InboxFilter extends ViewFilter {
178
+ /**
179
+ * Only captures created at/after this instant. Keyed on the item's CREATION
180
+ * timestamp (the raw Cocoa/Unix-epoch creationDate, compared like
181
+ * `changes`/`logbook` do their epoch columns — NOT the packed startDate
182
+ * encoding). A demoted item keeps its original creation date, so this is
183
+ * arrival-into-Things, not arrival-into-the-Inbox.
184
+ */
185
+ since?: Date;
186
+ /** Only captures created at/before this instant (creation timestamp). */
187
+ until?: Date;
188
+ }
189
+ export declare function inboxView(db: DatabaseSync, now?: Date, filter?: InboxFilter): ListItem[];
78
190
  /**
79
191
  * One sidebar-ordered block of a grouped view (anytime/someday): the area
80
192
  * (null = the top-level, area-less block, which the UI renders first) and its
@@ -86,7 +198,19 @@ export interface SidebarSection {
86
198
  items: ListItem[];
87
199
  }
88
200
  export declare function anytimeView(db: DatabaseSync, now?: Date, filter?: ViewFilter): SidebarSection[];
89
- /** The UI's star marker in Anytime: the item is also a Today member. */
201
+ /**
202
+ * The UI's star marker in Anytime: the item is also a Today member. Mirrors
203
+ * {@link todayView}'s two membership arms so an unscheduled item pulled into
204
+ * Today by a due deadline stars exactly like a scheduled one:
205
+ * - SCHEDULED — a When-date that has arrived (startDate <= today); or
206
+ * - DEADLINE-DRIVEN — no When-date, but a due/overdue deadline (deadline <=
207
+ * today) pulls it into Today (the todayView arm that lets a bare deadline
208
+ * surface an item). Only reached for anytime-visible rows (start=1,
209
+ * startDate NULL), so it never over-stars someday/inbox rows.
210
+ * KNOWN LIMITATION: todayView's deadline arm also drops a DISMISSED-nag
211
+ * deadline (deadlineSuppressionDate >= deadline); that column is not surfaced
212
+ * on the entity, so a suppressed unscheduled overdue row is over-starred here.
213
+ */
90
214
  export declare function isTodayMember(item: ListItem, now?: Date): boolean;
91
215
  export interface UpcomingFilter extends ViewFilter {
92
216
  /** Include repeating templates' next occurrences (UI parity; default true). */
@@ -105,6 +229,12 @@ export interface UpcomingFilter extends ViewFilter {
105
229
  * a date bound cannot apply to rows with no date.
106
230
  */
107
231
  until?: IsoDate;
232
+ /**
233
+ * Only rows scheduled on/after this date (inclusive) — skip occurrences
234
+ * before it. The dateless resting templates always survive, as with
235
+ * `until` (a date bound cannot apply to rows with no date).
236
+ */
237
+ since?: IsoDate;
108
238
  }
109
239
  export declare function upcomingView(db: DatabaseSync, now?: Date, filter?: UpcomingFilter): ListItem[];
110
240
  export interface SomedayFilter extends ViewFilter {
@@ -118,7 +248,8 @@ export interface SomedayFilter extends ViewFilter {
118
248
  }
119
249
  export declare function somedayView(db: DatabaseSync, now?: Date, filter?: SomedayFilter): SidebarSection[];
120
250
  export interface LogbookFilter extends ViewFilter {
121
- limit?: number;
251
+ /** Row cap; `null` returns every match (surfaces slice for display). */
252
+ limit?: number | null;
122
253
  /**
123
254
  * Area scope: the area's direct items, its project rows, and every to-do
124
255
  * of its projects — INCLUDING heading-nested ones (heading → project →
@@ -132,17 +263,19 @@ export interface LogbookFilter extends ViewFilter {
132
263
  /** Only entries logged at/before this instant. */
133
264
  until?: Date;
134
265
  }
135
- export declare function logbookView(db: DatabaseSync, options?: LogbookFilter): ListItem[];
136
- export declare function trashView(db: DatabaseSync, options?: {
137
- limit?: number;
266
+ export declare function logbookView(db: DatabaseSync, now?: Date, options?: LogbookFilter): ListItem[];
267
+ export declare function trashView(db: DatabaseSync, now?: Date, options?: {
268
+ limit?: number | null;
138
269
  }): ListItem[];
139
270
  export declare function projectsView(db: DatabaseSync, options?: {
140
271
  areaUuid?: string;
141
272
  later?: boolean;
273
+ overdue?: boolean;
142
274
  now?: Date;
143
- }): Project[];
275
+ } & ViewFilter): Project[];
144
276
  export interface SearchOptions extends ViewFilter {
145
- limit?: number;
277
+ /** Row cap; `null` returns every match (surfaces slice for display). */
278
+ limit?: number | null;
146
279
  /** Restrict to one project's children (headed children included). */
147
280
  project?: string;
148
281
  /** Restrict to one area's direct members. */
@@ -167,8 +300,33 @@ export type ChangedItem = ListItem & {
167
300
  * carry no modification dates, and checklist-item edits do not bump the
168
301
  * parent task — those changes are invisible here.
169
302
  */
170
- export declare function changesView(db: DatabaseSync, options: {
303
+ export declare function changesView(db: DatabaseSync, now: Date | undefined, options: {
171
304
  since: Date;
172
- limit?: number;
305
+ limit?: number | null;
173
306
  }): ChangedItem[];
174
- export declare function searchView(db: DatabaseSync, query: string, options?: SearchOptions): ListItem[];
307
+ /** One did-you-mean candidate: an area, or a task (project / to-do). */
308
+ export type LiteCandidate = {
309
+ kind: "area";
310
+ area: Area;
311
+ } | {
312
+ kind: "task";
313
+ task: ListItem;
314
+ };
315
+ export interface LiteSearchResult {
316
+ /** Ordered (containers first, then to-dos; within a group: active before someday, then most-recently-modified) and capped. */
317
+ candidates: LiteCandidate[];
318
+ /** Total matches before the cap. */
319
+ total: number;
320
+ }
321
+ export declare function liteTitleSearch(db: DatabaseSync, query: string, options?: {
322
+ type?: "to-do" | "project" | "area";
323
+ limit?: number;
324
+ }, now?: Date): LiteSearchResult;
325
+ /** A search result annotated with WHY it surfaced (additive; `matchedVia` present only for heading-credited projects). */
326
+ export type SearchResultItem = ListItem & {
327
+ matchedVia?: {
328
+ kind: "heading";
329
+ title: string;
330
+ };
331
+ };
332
+ export declare function searchView(db: DatabaseSync, query: string, options?: SearchOptions, now?: Date): SearchResultItem[];