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.
- package/README.md +50 -13
- package/dist/audit/schema.d.ts +7 -0
- package/dist/audit/schema.js.map +1 -1
- package/dist/cli/clock.d.ts +8 -0
- package/dist/cli/clock.js +24 -0
- package/dist/cli/clock.js.map +1 -0
- package/dist/cli/commands/area.d.ts +18 -11
- package/dist/cli/commands/area.js +61 -74
- package/dist/cli/commands/area.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +1 -2
- package/dist/cli/commands/doctor.js +11 -1
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/install-skill.d.ts +60 -0
- package/dist/cli/commands/install-skill.js +256 -0
- package/dist/cli/commands/install-skill.js.map +1 -0
- package/dist/cli/commands/mcp.js +9 -0
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/project.d.ts +1 -0
- package/dist/cli/commands/project.js +27 -34
- package/dist/cli/commands/project.js.map +1 -1
- package/dist/cli/commands/reads.d.ts +15 -2
- package/dist/cli/commands/reads.js +144 -44
- package/dist/cli/commands/reads.js.map +1 -1
- package/dist/cli/commands/setup.js +7 -2
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/show.js +38 -14
- package/dist/cli/commands/show.js.map +1 -1
- package/dist/cli/commands/todo.js +15 -9
- package/dist/cli/commands/todo.js.map +1 -1
- package/dist/cli/commands/writes.js +797 -174
- package/dist/cli/commands/writes.js.map +1 -1
- package/dist/cli/did-you-mean.d.ts +14 -3
- package/dist/cli/did-you-mean.js +26 -3
- package/dist/cli/did-you-mean.js.map +1 -1
- package/dist/cli/glyphs.d.ts +32 -2
- package/dist/cli/glyphs.js +83 -12
- package/dist/cli/glyphs.js.map +1 -1
- package/dist/cli/help.js +121 -16
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/main.js +33 -2
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/move-hint.d.ts +46 -0
- package/dist/cli/move-hint.js +196 -0
- package/dist/cli/move-hint.js.map +1 -0
- package/dist/cli/period.d.ts +2 -8
- package/dist/cli/period.js +44 -30
- package/dist/cli/period.js.map +1 -1
- package/dist/cli/read-driver.d.ts +43 -5
- package/dist/cli/read-driver.js +91 -15
- package/dist/cli/read-driver.js.map +1 -1
- package/dist/cli/render.d.ts +19 -8
- package/dist/cli/render.js +70 -27
- package/dist/cli/render.js.map +1 -1
- package/dist/cli/resolve-invocation.d.ts +2 -2
- package/dist/cli/resolve-invocation.js +3 -3
- package/dist/cli/resolve-invocation.js.map +1 -1
- package/dist/cli/skill-check.d.ts +27 -0
- package/dist/cli/skill-check.js +99 -0
- package/dist/cli/skill-check.js.map +1 -0
- package/dist/cli/skill.d.ts +70 -0
- package/dist/cli/skill.js +152 -0
- package/dist/cli/skill.js.map +1 -0
- package/dist/cli/tag-filters.d.ts +6 -2
- package/dist/cli/tag-filters.js +8 -6
- package/dist/cli/tag-filters.js.map +1 -1
- package/dist/cli/verb-hint.js +28 -3
- package/dist/cli/verb-hint.js.map +1 -1
- package/dist/cli/version.d.ts +4 -0
- package/dist/cli/version.js +18 -0
- package/dist/cli/version.js.map +1 -0
- package/dist/client.d.ts +171 -27
- package/dist/client.js +279 -40
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +66 -2
- package/dist/config.js +120 -12
- package/dist/config.js.map +1 -1
- package/dist/contracts.d.ts +186 -28
- package/dist/contracts.js +22 -1
- package/dist/contracts.js.map +1 -1
- package/dist/diagnose.d.ts +34 -2
- package/dist/diagnose.js +36 -1
- package/dist/diagnose.js.map +1 -1
- package/dist/index.d.ts +25 -9
- package/dist/index.js +22 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts +9 -0
- package/dist/mcp/server.js +1157 -684
- package/dist/mcp/server.js.map +1 -1
- package/dist/model/clock.d.ts +61 -0
- package/dist/model/clock.js +71 -0
- package/dist/model/clock.js.map +1 -0
- package/dist/model/dates.d.ts +26 -3
- package/dist/model/dates.js +84 -3
- package/dist/model/dates.js.map +1 -1
- package/dist/model/entities.d.ts +60 -3
- package/dist/model/entities.js.map +1 -1
- package/dist/model/mappers.d.ts +4 -2
- package/dist/model/mappers.js +66 -9
- package/dist/model/mappers.js.map +1 -1
- package/dist/model/recurrence.d.ts +8 -1
- package/dist/model/recurrence.js.map +1 -1
- package/dist/read/area-filter.d.ts +76 -0
- package/dist/read/area-filter.js +59 -0
- package/dist/read/area-filter.js.map +1 -0
- package/dist/read/area-view.d.ts +12 -12
- package/dist/read/area-view.js +58 -34
- package/dist/read/area-view.js.map +1 -1
- package/dist/read/detail.d.ts +1 -1
- package/dist/read/detail.js +26 -12
- package/dist/read/detail.js.map +1 -1
- package/dist/read/log-boundary.d.ts +1 -1
- package/dist/read/log-boundary.js +13 -3
- package/dist/read/log-boundary.js.map +1 -1
- package/dist/read/predicates.d.ts +18 -0
- package/dist/read/predicates.js +19 -0
- package/dist/read/predicates.js.map +1 -1
- package/dist/read/project-view.d.ts +32 -16
- package/dist/read/project-view.js +80 -45
- package/dist/read/project-view.js.map +1 -1
- package/dist/read/pseudo-area.d.ts +29 -0
- package/dist/read/pseudo-area.js +27 -0
- package/dist/read/pseudo-area.js.map +1 -0
- package/dist/read/queries.d.ts +108 -19
- package/dist/read/queries.js +212 -35
- package/dist/read/queries.js.map +1 -1
- package/dist/read/scope.d.ts +126 -0
- package/dist/read/scope.js +162 -0
- package/dist/read/scope.js.map +1 -0
- package/dist/read/search-rank.d.ts +2 -5
- package/dist/read/shape.d.ts +162 -0
- package/dist/read/shape.js +686 -0
- package/dist/read/shape.js.map +1 -0
- package/dist/read/show-target.d.ts +9 -1
- package/dist/read/show-target.js +45 -4
- package/dist/read/show-target.js.map +1 -1
- package/dist/read/snapshot.d.ts +1 -1
- package/dist/read/snapshot.js +9 -2
- package/dist/read/snapshot.js.map +1 -1
- package/dist/read/stage.d.ts +199 -0
- package/dist/read/stage.js +125 -0
- package/dist/read/stage.js.map +1 -0
- package/dist/read/truncation.d.ts +8 -6
- package/dist/read/truncation.js +35 -10
- package/dist/read/truncation.js.map +1 -1
- package/dist/read/views.d.ts +61 -20
- package/dist/read/views.js +240 -82
- package/dist/read/views.js.map +1 -1
- package/dist/surface-copy.d.ts +9 -0
- package/dist/surface-copy.js +9 -0
- package/dist/surface-copy.js.map +1 -1
- package/dist/write/accessibility-probe.d.ts +1 -1
- package/dist/write/accessibility-probe.js +8 -0
- package/dist/write/accessibility-probe.js.map +1 -1
- package/dist/write/automation-probe.d.ts +1 -1
- package/dist/write/automation-probe.js +8 -0
- package/dist/write/automation-probe.js.map +1 -1
- package/dist/write/batch.d.ts +49 -10
- package/dist/write/batch.js +423 -70
- package/dist/write/batch.js.map +1 -1
- package/dist/write/commands.d.ts +1 -1
- package/dist/write/commands.js +316 -66
- package/dist/write/commands.js.map +1 -1
- package/dist/write/guards.d.ts +1 -1
- package/dist/write/guards.js +94 -10
- package/dist/write/guards.js.map +1 -1
- package/dist/write/heading.d.ts +10 -1
- package/dist/write/heading.js +35 -5
- package/dist/write/heading.js.map +1 -1
- package/dist/write/make-repeating-project.d.ts +2 -2
- package/dist/write/make-repeating-project.js +9 -9
- package/dist/write/make-repeating-project.js.map +1 -1
- package/dist/write/move.d.ts +130 -0
- package/dist/write/move.js +1533 -0
- package/dist/write/move.js.map +1 -0
- package/dist/write/operations.d.ts +105 -19
- package/dist/write/operations.js +56 -7
- package/dist/write/operations.js.map +1 -1
- package/dist/write/opid.d.ts +31 -0
- package/dist/write/opid.js +30 -0
- package/dist/write/opid.js.map +1 -0
- package/dist/write/pipeline.d.ts +122 -3
- package/dist/write/pipeline.js +309 -52
- package/dist/write/pipeline.js.map +1 -1
- package/dist/write/planner.js +8 -1
- package/dist/write/planner.js.map +1 -1
- package/dist/write/pre-state.d.ts +197 -6
- package/dist/write/pre-state.js +427 -20
- package/dist/write/pre-state.js.map +1 -1
- package/dist/write/recurrence-rule-blob.d.ts +65 -0
- package/dist/write/recurrence-rule-blob.js +150 -0
- package/dist/write/recurrence-rule-blob.js.map +1 -0
- package/dist/write/reorder.d.ts +23 -3
- package/dist/write/reorder.js +1871 -85
- package/dist/write/reorder.js.map +1 -1
- package/dist/write/reversibility.js +19 -7
- package/dist/write/reversibility.js.map +1 -1
- package/dist/write/scope-guard.d.ts +31 -0
- package/dist/write/scope-guard.js +162 -0
- package/dist/write/scope-guard.js.map +1 -0
- package/dist/write/undo.js +120 -13
- package/dist/write/undo.js.map +1 -1
- package/dist/write/vectors/applescript.js +16 -7
- package/dist/write/vectors/applescript.js.map +1 -1
- package/dist/write/vectors/registry.d.ts +5 -7
- package/dist/write/vectors/registry.js +49 -2
- package/dist/write/vectors/registry.js.map +1 -1
- package/dist/write/vectors/shortcuts.js +1 -1
- package/dist/write/vectors/shortcuts.js.map +1 -1
- package/dist/write/vectors/simulator.d.ts +44 -0
- package/dist/write/vectors/simulator.js +1192 -0
- package/dist/write/vectors/simulator.js.map +1 -0
- package/dist/write/vectors/types.d.ts +46 -0
- package/dist/write/vectors/ui-certification.d.ts +10 -4
- package/dist/write/vectors/ui-certification.js +43 -10
- package/dist/write/vectors/ui-certification.js.map +1 -1
- package/dist/write/vectors/ui-drag.d.ts +21 -1
- package/dist/write/vectors/ui-drag.js +138 -27
- package/dist/write/vectors/ui-drag.js.map +1 -1
- package/dist/write/vectors/ui-recipes.d.ts +34 -1
- package/dist/write/vectors/ui-recipes.js +217 -6
- package/dist/write/vectors/ui-recipes.js.map +1 -1
- package/dist/write/vectors/ui.d.ts +40 -1
- package/dist/write/vectors/ui.js +196 -39
- package/dist/write/vectors/ui.js.map +1 -1
- package/dist/write/verify/delta.d.ts +127 -2
- package/dist/write/verify/delta.js +255 -16
- package/dist/write/verify/delta.js.map +1 -1
- package/dist/write/verify/poller.d.ts +7 -1
- package/dist/write/verify/poller.js +20 -1
- package/dist/write/verify/poller.js.map +1 -1
- package/package.json +24 -3
- package/schema/envelope.schema.json +383 -0
- package/skills/things-cli/SKILL.md +70 -0
- package/skills/things-cli/references/banner.md +35 -0
- package/skills/things-cli/references/contracts.md +62 -0
- package/skills/things-cli/references/errors.md +49 -0
- package/skills/things-cli/references/gui.md +11 -0
- package/skills/things-cli/references/model.md +60 -0
- package/skills/things-cli/references/ordering.md +71 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"move-hint.js","sourceRoot":"","sources":["../../src/cli/move-hint.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/period.d.ts
CHANGED
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Period-and-calendar grammar shared by the read views: the `--since`/`--until`
|
|
3
|
-
* whole-period parsers, the relative-period (`3d`/`2w`/`1m`/`1y`) grammar, and
|
|
4
|
-
* the Upcoming date-bucket labeller. Fully pure — no CLI or app imports — so
|
|
5
|
-
* the renderers and command registrations can both draw on it.
|
|
6
|
-
*/
|
|
7
1
|
declare const FULL_MONTHS: readonly ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
|
|
8
2
|
export { FULL_MONTHS };
|
|
9
3
|
/**
|
|
@@ -19,14 +13,14 @@ export declare function doublePeriod(period: string): string;
|
|
|
19
13
|
* periods (`2w`, `1m`, `1y`) count FORWARD from now through the end of the
|
|
20
14
|
* landing day; anything else parses as an instant.
|
|
21
15
|
*/
|
|
22
|
-
export declare function parsePeriodEnd(s: string, now?: Date): Date;
|
|
16
|
+
export declare function parsePeriodEnd(s: string, now?: Date, zone?: string): Date;
|
|
23
17
|
/**
|
|
24
18
|
* `--since` accepting the same vocabulary at the period's START: `2024` =
|
|
25
19
|
* Jan 1 2024 00:00, `2024-03` = Mar 1, `2024-03-05` = that midnight;
|
|
26
20
|
* relative periods (`2w`, `1m`) count BACKWARD from now to the landing
|
|
27
21
|
* day's midnight; anything else parses as an instant.
|
|
28
22
|
*/
|
|
29
|
-
export declare function parsePeriodStart(s: string, now?: Date): Date;
|
|
23
|
+
export declare function parsePeriodStart(s: string, now?: Date, zone?: string): Date;
|
|
30
24
|
/**
|
|
31
25
|
* GUI-style Upcoming bucket for a date, granularity decaying with distance:
|
|
32
26
|
* individual days for the next week ("Wed Jul 15"), the remainder of the
|
package/dist/cli/period.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Period-and-calendar grammar shared by the read views: the `--since`/`--until`
|
|
3
3
|
* whole-period parsers, the relative-period (`3d`/`2w`/`1m`/`1y`) grammar, and
|
|
4
|
-
* the Upcoming date-bucket labeller.
|
|
5
|
-
* the
|
|
4
|
+
* the Upcoming date-bucket labeller. The only library dependency is the pair of
|
|
5
|
+
* zone-aware date helpers (through the single entry point) so a `--since 2w` is
|
|
6
|
+
* counted in the CONSUMER'S calendar, not the host's — byte-identical to the
|
|
7
|
+
* host math when no zone is in effect.
|
|
6
8
|
*/
|
|
9
|
+
import { dayBoundInstant, localToday } from "../index.js";
|
|
7
10
|
const FULL_MONTHS = [
|
|
8
11
|
"January",
|
|
9
12
|
"February",
|
|
@@ -40,19 +43,45 @@ export { FULL_MONTHS };
|
|
|
40
43
|
* bound (each command's natural direction; the flag name carries it).
|
|
41
44
|
*/
|
|
42
45
|
const RELATIVE_PERIOD = /^(\d+)([dwmy])$/i;
|
|
43
|
-
|
|
46
|
+
/** Format a UTC-anchored Date's date fields as `YYYY-MM-DD`. */
|
|
47
|
+
function isoFromUtc(dt) {
|
|
48
|
+
return `${String(dt.getUTCFullYear()).padStart(4, "0")}-${String(dt.getUTCMonth() + 1).padStart(2, "0")}-${String(dt.getUTCDate()).padStart(2, "0")}`;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* The target CALENDAR date for a relative period, counted from a base ISO date
|
|
52
|
+
* (the consumer's today) — days/weeks add days, months/years use the JS Date
|
|
53
|
+
* overflow the host arithmetic always used (Jan 31 + 1m → Mar 3). Pure calendar
|
|
54
|
+
* math on the date fields (UTC-anchored so the host zone never intrudes), so it
|
|
55
|
+
* is zone-agnostic once the base date is chosen.
|
|
56
|
+
*/
|
|
57
|
+
function relativeTargetIso(m, baseIso, sign) {
|
|
58
|
+
const [y, mo, d] = baseIso.split("-").map(Number);
|
|
59
|
+
const dt = new Date(Date.UTC(y ?? 1970, (mo ?? 1) - 1, d ?? 1));
|
|
44
60
|
const n = sign * Number(m[1]);
|
|
45
61
|
const unit = (m[2] ?? "").toLowerCase();
|
|
46
|
-
const d = new Date(now);
|
|
47
62
|
if (unit === "d")
|
|
48
|
-
|
|
63
|
+
dt.setUTCDate(dt.getUTCDate() + n);
|
|
49
64
|
else if (unit === "w")
|
|
50
|
-
|
|
65
|
+
dt.setUTCDate(dt.getUTCDate() + 7 * n);
|
|
51
66
|
else if (unit === "m")
|
|
52
|
-
|
|
67
|
+
dt.setUTCMonth(dt.getUTCMonth() + n);
|
|
53
68
|
else
|
|
54
|
-
|
|
55
|
-
return
|
|
69
|
+
dt.setUTCFullYear(dt.getUTCFullYear() + n);
|
|
70
|
+
return isoFromUtc(dt);
|
|
71
|
+
}
|
|
72
|
+
/** The ISO date at a whole absolute period's START or END edge (`2024` → Jan 1 / Dec 31, etc.). */
|
|
73
|
+
function absolutePeriodIso(m, edge) {
|
|
74
|
+
const year = Number(m[1]);
|
|
75
|
+
if (m[2] === undefined)
|
|
76
|
+
return edge === "start" ? `${m[1]}-01-01` : `${m[1]}-12-31`;
|
|
77
|
+
const month = Number(m[2]) - 1;
|
|
78
|
+
if (m[3] === undefined) {
|
|
79
|
+
if (edge === "start")
|
|
80
|
+
return `${m[1]}-${m[2]}-01`;
|
|
81
|
+
const lastDay = new Date(Date.UTC(year, month + 1, 0)).getUTCDate();
|
|
82
|
+
return `${m[1]}-${m[2]}-${String(lastDay).padStart(2, "0")}`;
|
|
83
|
+
}
|
|
84
|
+
return `${m[1]}-${m[2]}-${m[3]}`;
|
|
56
85
|
}
|
|
57
86
|
/**
|
|
58
87
|
* Double a relative period for a "wider window" suggestion: `1m`→`2m`,
|
|
@@ -72,23 +101,15 @@ export function doublePeriod(period) {
|
|
|
72
101
|
* periods (`2w`, `1m`, `1y`) count FORWARD from now through the end of the
|
|
73
102
|
* landing day; anything else parses as an instant.
|
|
74
103
|
*/
|
|
75
|
-
export function parsePeriodEnd(s, now = new Date()) {
|
|
104
|
+
export function parsePeriodEnd(s, now = new Date(), zone) {
|
|
76
105
|
const rel = RELATIVE_PERIOD.exec(s.trim());
|
|
77
106
|
if (rel !== null) {
|
|
78
|
-
|
|
79
|
-
return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 23, 59, 59, 999);
|
|
107
|
+
return dayBoundInstant(relativeTargetIso(rel, localToday(now, zone), 1), "end", zone);
|
|
80
108
|
}
|
|
81
109
|
const m = /^(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?$/.exec(s.trim());
|
|
82
110
|
if (m === null)
|
|
83
111
|
return new Date(s);
|
|
84
|
-
|
|
85
|
-
// Day 0 of month n+1 = the last day of month n.
|
|
86
|
-
if (m[2] === undefined)
|
|
87
|
-
return new Date(year, 11, 31, 23, 59, 59, 999);
|
|
88
|
-
const month = Number(m[2]) - 1;
|
|
89
|
-
if (m[3] === undefined)
|
|
90
|
-
return new Date(year, month + 1, 0, 23, 59, 59, 999);
|
|
91
|
-
return new Date(year, month, Number(m[3]), 23, 59, 59, 999);
|
|
112
|
+
return dayBoundInstant(absolutePeriodIso(m, "end"), "end", zone);
|
|
92
113
|
}
|
|
93
114
|
/**
|
|
94
115
|
* `--since` accepting the same vocabulary at the period's START: `2024` =
|
|
@@ -96,22 +117,15 @@ export function parsePeriodEnd(s, now = new Date()) {
|
|
|
96
117
|
* relative periods (`2w`, `1m`) count BACKWARD from now to the landing
|
|
97
118
|
* day's midnight; anything else parses as an instant.
|
|
98
119
|
*/
|
|
99
|
-
export function parsePeriodStart(s, now = new Date()) {
|
|
120
|
+
export function parsePeriodStart(s, now = new Date(), zone) {
|
|
100
121
|
const rel = RELATIVE_PERIOD.exec(s.trim());
|
|
101
122
|
if (rel !== null) {
|
|
102
|
-
|
|
103
|
-
return new Date(d.getFullYear(), d.getMonth(), d.getDate());
|
|
123
|
+
return dayBoundInstant(relativeTargetIso(rel, localToday(now, zone), -1), "start", zone);
|
|
104
124
|
}
|
|
105
125
|
const m = /^(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?$/.exec(s.trim());
|
|
106
126
|
if (m === null)
|
|
107
127
|
return new Date(s);
|
|
108
|
-
|
|
109
|
-
if (m[2] === undefined)
|
|
110
|
-
return new Date(year, 0, 1);
|
|
111
|
-
const month = Number(m[2]) - 1;
|
|
112
|
-
if (m[3] === undefined)
|
|
113
|
-
return new Date(year, month, 1);
|
|
114
|
-
return new Date(year, month, Number(m[3]));
|
|
128
|
+
return dayBoundInstant(absolutePeriodIso(m, "start"), "start", zone);
|
|
115
129
|
}
|
|
116
130
|
/**
|
|
117
131
|
* GUI-style Upcoming bucket for a date, granularity decaying with distance:
|
package/dist/cli/period.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"period.js","sourceRoot":"","sources":["../../src/cli/period.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"period.js","sourceRoot":"","sources":["../../src/cli/period.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,25 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type ThingsClient, type Truncation, type ViewFilterMeta } from "../index.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Shape a read payload into its envelope `data` object (the 1.0 contract, R1/R2):
|
|
4
|
+
* `data` is always an object. Flat lists become `{ items }`; the sectioned
|
|
5
|
+
* catalogues (anytime/someday) become `{ sections }`; `today` becomes
|
|
6
|
+
* `{ sections: [{key,items}…], badge }`; the composite cards become `{ view }`;
|
|
7
|
+
* a single-entity detail becomes `{ item }`. Everything already object-shaped
|
|
8
|
+
* (open/snapshot/…) passes through. The human-render path keeps the raw inner
|
|
9
|
+
* payload — this transform is the JSON emit boundary only.
|
|
10
|
+
*/
|
|
11
|
+
export declare function wrapEnvelopeData(kind: string, data: unknown): unknown;
|
|
2
12
|
export interface GlobalReadOpts {
|
|
3
13
|
json?: boolean;
|
|
4
14
|
db?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Force the FULL detail tier (R7) in a list context — restore the per-row
|
|
17
|
+
* density a compact list drops (`created`/`modified`, the full `repeating`
|
|
18
|
+
* block, full `notes`, the default-valued fields). Set by the `--full` flag on
|
|
19
|
+
* the list-emitting commands; absent = the compact default. The no-redundant-
|
|
20
|
+
* ancestry pruning (R6) is applied regardless.
|
|
21
|
+
*/
|
|
22
|
+
full?: boolean;
|
|
5
23
|
}
|
|
6
24
|
/**
|
|
7
25
|
* The single usage-error emitter every command surface routes flag/argument
|
|
@@ -19,10 +37,28 @@ export declare function usageError(opts: {
|
|
|
19
37
|
}): void;
|
|
20
38
|
export interface PagedResult<T> {
|
|
21
39
|
data: T;
|
|
22
|
-
/**
|
|
40
|
+
/**
|
|
41
|
+
* The unified completeness metadata — flat-view row counts, the Today split's
|
|
42
|
+
* per-section counts, OR a grouped view's per-block `blocks`. Carried into
|
|
43
|
+
* `meta.truncation` and (for flat views with a `hintBase`) the appended hint.
|
|
44
|
+
*/
|
|
23
45
|
truncation?: Truncation;
|
|
24
|
-
/**
|
|
25
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Override the envelope `kind` (and thus the R1/R2 data wrapper) for this
|
|
48
|
+
* result — set by the loose `show` router, which resolves its target kind
|
|
49
|
+
* only inside `fn` (a to-do → `detail`, a project → `project-view`, an area →
|
|
50
|
+
* `area-view`). Absent = the `kind` argument passed to {@link runRead}.
|
|
51
|
+
*/
|
|
52
|
+
kind?: string;
|
|
53
|
+
/** Active content filter (the `--area` scope) — carried into `meta.filter`. */
|
|
54
|
+
filter?: ViewFilterMeta;
|
|
55
|
+
/**
|
|
56
|
+
* Additional non-blocking advisories from the read itself (ADDITIVE), merged
|
|
57
|
+
* with the schema-drift warnings into `meta.warnings` (and echoed once on
|
|
58
|
+
* stderr for human output). Used by the `loose` pseudo-area reads to surface
|
|
59
|
+
* the resolution-shadow disclosure.
|
|
60
|
+
*/
|
|
61
|
+
warnings?: string[];
|
|
26
62
|
/**
|
|
27
63
|
* Precomputed human lines. Grouped views render inside `fn` (where the full
|
|
28
64
|
* per-block totals live) and hand the finished lines back here; when absent,
|
|
@@ -44,7 +80,9 @@ export declare function runRead<T>(opts: GlobalReadOpts, kind: string, fn: (clie
|
|
|
44
80
|
* turns it into human lines. Generic so `fn`'s return type flows into
|
|
45
81
|
* `render`'s parameter — the compiler verifies the renderer matches the data.
|
|
46
82
|
*/
|
|
47
|
-
export declare function withClient<T>(opts: GlobalReadOpts, kind: string, fn: (client: ThingsClient) => T, render: (data: T) => string[]
|
|
83
|
+
export declare function withClient<T>(opts: GlobalReadOpts, kind: string, fn: (client: ThingsClient) => T, render: (data: T) => string[],
|
|
84
|
+
/** Optional read-specific advisories (merged into `meta.warnings` + stderr). */
|
|
85
|
+
warnings?: (client: ThingsClient) => string[] | undefined): void;
|
|
48
86
|
/** Result of resolving `--limit`/`--all`; `limit: null` means every row. */
|
|
49
87
|
export type LimitResolution = {
|
|
50
88
|
ok: true;
|
package/dist/cli/read-driver.js
CHANGED
|
@@ -8,8 +8,53 @@
|
|
|
8
8
|
import { getInvocation } from "./resolve-invocation.js";
|
|
9
9
|
import { dim } from "./style.js";
|
|
10
10
|
import { viewHeaderLines } from "./render.js";
|
|
11
|
-
import { candidatesJson, DidYouMeanError, renderDidYouMean } from "./did-you-mean.js";
|
|
12
|
-
import { DEFAULT_LIST_LIMIT, errorEnvelope, ExitCode, okEnvelope, omitEmpty, openThings, ReferenceResolutionError, schemaWarnings, ThingsDbNotFoundError, ThingsDbOpenError, } from "../index.js";
|
|
11
|
+
import { candidatesJson, DidYouMeanError, didYouMeanMessage, renderDidYouMean, } from "./did-you-mean.js";
|
|
12
|
+
import { ClockError, DEFAULT_LIST_LIMIT, errorEnvelope, ExitCode, okEnvelope, omitEmpty, openThings, shapeReadPayload, ReferenceResolutionError, schemaWarnings, ThingsDbNotFoundError, ThingsDbOpenError, } from "../index.js";
|
|
13
|
+
/**
|
|
14
|
+
* Kinds whose read payload is a flat list; their envelope `data` is the R1
|
|
15
|
+
* `{ items: [...] }` wrapper (data is ALWAYS a JSON object, never a bare array).
|
|
16
|
+
*/
|
|
17
|
+
const ITEMS_WRAPPER_KINDS = new Set([
|
|
18
|
+
"inbox",
|
|
19
|
+
"upcoming",
|
|
20
|
+
"logbook",
|
|
21
|
+
"trash",
|
|
22
|
+
"changes",
|
|
23
|
+
"search",
|
|
24
|
+
"projects",
|
|
25
|
+
"areas",
|
|
26
|
+
"tags",
|
|
27
|
+
]);
|
|
28
|
+
/**
|
|
29
|
+
* Shape a read payload into its envelope `data` object (the 1.0 contract, R1/R2):
|
|
30
|
+
* `data` is always an object. Flat lists become `{ items }`; the sectioned
|
|
31
|
+
* catalogues (anytime/someday) become `{ sections }`; `today` becomes
|
|
32
|
+
* `{ sections: [{key,items}…], badge }`; the composite cards become `{ view }`;
|
|
33
|
+
* a single-entity detail becomes `{ item }`. Everything already object-shaped
|
|
34
|
+
* (open/snapshot/…) passes through. The human-render path keeps the raw inner
|
|
35
|
+
* payload — this transform is the JSON emit boundary only.
|
|
36
|
+
*/
|
|
37
|
+
export function wrapEnvelopeData(kind, data) {
|
|
38
|
+
if (ITEMS_WRAPPER_KINDS.has(kind))
|
|
39
|
+
return { items: data };
|
|
40
|
+
if (kind === "anytime" || kind === "someday")
|
|
41
|
+
return { sections: data };
|
|
42
|
+
if (kind === "today") {
|
|
43
|
+
const view = data;
|
|
44
|
+
return {
|
|
45
|
+
sections: [
|
|
46
|
+
{ key: "today", items: view.today },
|
|
47
|
+
{ key: "evening", items: view.evening },
|
|
48
|
+
],
|
|
49
|
+
badge: view.badge,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
if (kind === "area-view" || kind === "project-view")
|
|
53
|
+
return { view: data };
|
|
54
|
+
if (kind === "detail")
|
|
55
|
+
return { item: data };
|
|
56
|
+
return data;
|
|
57
|
+
}
|
|
13
58
|
/**
|
|
14
59
|
* The single usage-error emitter every command surface routes flag/argument
|
|
15
60
|
* errors through, so `--json` is honored uniformly: under `--json` a
|
|
@@ -21,7 +66,7 @@ import { DEFAULT_LIST_LIMIT, errorEnvelope, ExitCode, okEnvelope, omitEmpty, ope
|
|
|
21
66
|
export function usageError(opts, message, details) {
|
|
22
67
|
if (opts.json === true) {
|
|
23
68
|
const meta = { dbVersion: null, fingerprint: "unknown", elapsedMs: 0 };
|
|
24
|
-
process.stdout.write(`${JSON.stringify(errorEnvelope({ code: "usage", message, ...(details !== undefined && { details }) }, meta))}\n`);
|
|
69
|
+
process.stdout.write(`${JSON.stringify(errorEnvelope({ code: "usage", message, ...(details !== undefined && { detail: details }) }, meta))}\n`);
|
|
25
70
|
}
|
|
26
71
|
else {
|
|
27
72
|
process.stderr.write(`error: ${message}\n`);
|
|
@@ -50,20 +95,31 @@ export function runRead(opts, kind, fn, render, hintBase, header) {
|
|
|
50
95
|
const fp = client.fingerprint();
|
|
51
96
|
// Reads never block on a schema change — they warn (design decision). The
|
|
52
97
|
// note reuses the same cached fingerprint the write path gates on.
|
|
53
|
-
const warnings =
|
|
54
|
-
|
|
98
|
+
const { data, truncation, kind: kindOverride, filter, warnings: readWarnings, lines: precomputed, } = fn(client);
|
|
99
|
+
// Schema-drift advisories plus any read-specific advisories (e.g. the loose
|
|
100
|
+
// pseudo-area resolution-shadow disclosure).
|
|
101
|
+
const warnings = [...schemaWarnings(client.schemaStatus()), ...(readWarnings ?? [])];
|
|
102
|
+
const effectiveKind = kindOverride ?? kind;
|
|
55
103
|
// The canonical command a sugar invocation normalized to — known now that
|
|
56
104
|
// `fn` has resolved any reference. Present only for the routing sugars
|
|
57
105
|
// (bare noun, keyword-in-show, uuid/share-link routing); null otherwise.
|
|
58
106
|
const resolvedCommand = getInvocation()?.canonical ?? null;
|
|
107
|
+
// The clock honesty field: present only when a consumer zone / pinned now
|
|
108
|
+
// is in effect (absent = host clock, so the wire shape is unchanged).
|
|
109
|
+
const clock = client.clockMeta();
|
|
110
|
+
// The active container scope (additive): present only when the client is
|
|
111
|
+
// jailed, so an agent knows its own jail (not an oracle for what's outside).
|
|
112
|
+
const scope = client.scope;
|
|
59
113
|
const meta = {
|
|
60
114
|
dbVersion: fp.observation.databaseVersion,
|
|
61
115
|
fingerprint: fp.kind === "ok" ? "ok" : fp.kind === "drift" ? "drift" : "unknown",
|
|
62
116
|
elapsedMs: Date.now() - started,
|
|
63
117
|
...(truncation !== undefined && { truncation }),
|
|
64
|
-
...(grouped !== undefined && { grouped }),
|
|
65
118
|
...(resolvedCommand !== null && { resolvedCommand }),
|
|
66
119
|
...(warnings.length > 0 && { warnings }),
|
|
120
|
+
...(clock !== undefined && { clock }),
|
|
121
|
+
...(filter !== undefined && { filter }),
|
|
122
|
+
...(scope !== undefined && { scope }),
|
|
67
123
|
};
|
|
68
124
|
// Human output gets the note once on STDERR (never mixed into the piped
|
|
69
125
|
// stdout rows); the --json envelope carries it in meta.warnings instead.
|
|
@@ -75,7 +131,8 @@ export function runRead(opts, kind, fn, render, hintBase, header) {
|
|
|
75
131
|
// Omit-empty applies to the entity/data payload only (contracts.md); the
|
|
76
132
|
// envelope meta/truncation is untouched, and the human render below keeps
|
|
77
133
|
// the full, unpruned `data`.
|
|
78
|
-
|
|
134
|
+
const shaped = shapeReadPayload(effectiveKind, data, opts.full === true);
|
|
135
|
+
process.stdout.write(`${JSON.stringify(okEnvelope(effectiveKind, omitEmpty(wrapEnvelopeData(effectiveKind, shaped)), meta))}\n`);
|
|
79
136
|
}
|
|
80
137
|
else {
|
|
81
138
|
const lines = precomputed ?? render(data);
|
|
@@ -93,9 +150,16 @@ export function runRead(opts, kind, fn, render, hintBase, header) {
|
|
|
93
150
|
// sugar invocation resolved to, adjacent to the header. Same gates as the
|
|
94
151
|
// preamble (TTY-only, never in --json) — canonical invocations echo
|
|
95
152
|
// nothing because `resolvedCommand` is null for them.
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
153
|
+
// The scope banner: one dim line naming the active jail, so a scoped
|
|
154
|
+
// read is never silently partial (TTY-only, never in --json). A
|
|
155
|
+
// stored-config scope must not be a mystery jail.
|
|
156
|
+
const scopeBanner = scope !== undefined && process.stdout.isTTY === true
|
|
157
|
+
? [dim(`scoped to ${scope.kind} "${scope.title}"`)]
|
|
158
|
+
: [];
|
|
159
|
+
const normalized = resolvedCommand !== null && process.stdout.isTTY === true
|
|
160
|
+
? [dim(`≡ ${resolvedCommand}`)]
|
|
161
|
+
: [];
|
|
162
|
+
const out = [...scopeBanner, ...normalized, ...withHeader];
|
|
99
163
|
process.stdout.write(`${out.join("\n")}\n`);
|
|
100
164
|
}
|
|
101
165
|
process.exitCode = ExitCode.Ok;
|
|
@@ -113,8 +177,8 @@ export function runRead(opts, kind, fn, render, hintBase, header) {
|
|
|
113
177
|
if (opts.json) {
|
|
114
178
|
process.stdout.write(`${JSON.stringify(errorEnvelope({
|
|
115
179
|
code: "not-found",
|
|
116
|
-
message: err
|
|
117
|
-
|
|
180
|
+
message: didYouMeanMessage(err),
|
|
181
|
+
detail: { candidates: candidatesJson(err) },
|
|
118
182
|
}, meta))}\n`);
|
|
119
183
|
}
|
|
120
184
|
else {
|
|
@@ -127,7 +191,7 @@ export function runRead(opts, kind, fn, render, hintBase, header) {
|
|
|
127
191
|
// usage-class failure carrying machine-readable candidates.
|
|
128
192
|
if (err instanceof ReferenceResolutionError) {
|
|
129
193
|
if (opts.json) {
|
|
130
|
-
process.stdout.write(`${JSON.stringify(errorEnvelope({ code: err.code, message: err.message,
|
|
194
|
+
process.stdout.write(`${JSON.stringify(errorEnvelope({ code: err.code, message: err.message, detail: { candidates: err.candidates } }, meta))}\n`);
|
|
131
195
|
}
|
|
132
196
|
else {
|
|
133
197
|
process.stderr.write(`error: ${err.message}\n`);
|
|
@@ -135,6 +199,12 @@ export function runRead(opts, kind, fn, render, hintBase, header) {
|
|
|
135
199
|
process.exitCode = ExitCode.Usage;
|
|
136
200
|
return;
|
|
137
201
|
}
|
|
202
|
+
// A malformed THINGS_TZ / THINGS_NOW (or per-read zone) fails closed as a
|
|
203
|
+
// usage error naming the expected form — never a silent host fallback.
|
|
204
|
+
if (err instanceof ClockError) {
|
|
205
|
+
usageError(opts, err.message);
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
138
208
|
const isEnv = err instanceof ThingsDbNotFoundError || err instanceof ThingsDbOpenError;
|
|
139
209
|
const message = err instanceof Error ? err.message : String(err);
|
|
140
210
|
if (opts.json) {
|
|
@@ -154,8 +224,14 @@ export function runRead(opts, kind, fn, render, hintBase, header) {
|
|
|
154
224
|
* turns it into human lines. Generic so `fn`'s return type flows into
|
|
155
225
|
* `render`'s parameter — the compiler verifies the renderer matches the data.
|
|
156
226
|
*/
|
|
157
|
-
export function withClient(opts, kind, fn, render
|
|
158
|
-
|
|
227
|
+
export function withClient(opts, kind, fn, render,
|
|
228
|
+
/** Optional read-specific advisories (merged into `meta.warnings` + stderr). */
|
|
229
|
+
warnings) {
|
|
230
|
+
runRead(opts, kind, (client) => {
|
|
231
|
+
const data = fn(client);
|
|
232
|
+
const w = warnings?.(client);
|
|
233
|
+
return { data, ...(w !== undefined && w.length > 0 && { warnings: w }) };
|
|
234
|
+
}, render);
|
|
159
235
|
}
|
|
160
236
|
/**
|
|
161
237
|
* Resolve the shared `--limit`/`--all` pair (flat views) into a row cap
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-driver.js","sourceRoot":"","sources":["../../src/cli/read-driver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"read-driver.js","sourceRoot":"","sources":["../../src/cli/read-driver.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/render.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* (agents and humans both need stable references); colors engage on a TTY only
|
|
8
8
|
* (../cli/style.ts).
|
|
9
9
|
*/
|
|
10
|
-
import { type GroupedLimits, type
|
|
10
|
+
import { type GroupedLimits, type ListItem, type SectionCount, type SidebarSection, type TodayView, type Truncation } from "../index.ts";
|
|
11
11
|
import { stripSgr } from "./width.ts";
|
|
12
12
|
/**
|
|
13
13
|
* A view's TTY-only title preamble: bold view name + its dim Things deep link,
|
|
@@ -81,7 +81,7 @@ export declare function formatItem(item: ListItem, uuidWidth?: number, opts?: Fo
|
|
|
81
81
|
* effective This-Evening members (raw evening assignment counts only while
|
|
82
82
|
* startDate is exactly today — the UI's daily expiry), null otherwise.
|
|
83
83
|
*/
|
|
84
|
-
export declare function todayMark(item: ListItem
|
|
84
|
+
export declare function todayMark(item: ListItem): string | null;
|
|
85
85
|
/** Minimum displayed-prefix length: shorter prefixes collide across the DB. */
|
|
86
86
|
export declare const UUID_DISPLAY_MIN = 8;
|
|
87
87
|
/** The full-form TTY row floor — worst-case furniture + full deadline. See {@link computeFitFloors}. */
|
|
@@ -111,6 +111,15 @@ export declare function renderList(items: ListItem[]): string[];
|
|
|
111
111
|
* `(project)` context inside that project's own view). Every OTHER view keeps
|
|
112
112
|
* the per-row ★/⏾, where the marker still carries information.
|
|
113
113
|
*
|
|
114
|
+
* A PROVISIONAL Today member (the wire's presence-keyed `provisional`, BANNER1
|
|
115
|
+
* law — a Today entrant the app has not yet materialized, banner-counted until
|
|
116
|
+
* acknowledged) gets a yellow `•` in the freed mark slot, mirroring the GUI's
|
|
117
|
+
* yellow "new item" pip. It is per-row (it distinguishes rows within a section,
|
|
118
|
+
* so it is NOT header-deduped like the ★) and — per the GUI — renders ONLY here,
|
|
119
|
+
* never in anytime or any other view. Derived through {@link entityProvisional},
|
|
120
|
+
* the SAME law the wire emit boundary uses, so the pip can never disagree with
|
|
121
|
+
* the emitted `provisional`.
|
|
122
|
+
*
|
|
114
123
|
* This Evening mirrors the GUI: it renders ONLY when evening items exist —
|
|
115
124
|
* a truly-empty evening has no header at all. `view` is the rows that survived
|
|
116
125
|
* the global `--limit`; `sections` is the metadata's pre-cap per-section counts
|
|
@@ -131,10 +140,12 @@ export declare function renderToday(view: TodayView, sections: SectionCount[] |
|
|
|
131
140
|
eveningOnly?: boolean;
|
|
132
141
|
}): string[];
|
|
133
142
|
/**
|
|
134
|
-
* Search rows: a standard list row, plus — for a
|
|
135
|
-
* title
|
|
136
|
-
*
|
|
137
|
-
*
|
|
143
|
+
* Search rows: a standard list row, plus — for a hit surfaced by something OTHER
|
|
144
|
+
* than its title — an indented muted matched-on line crediting WHERE the query
|
|
145
|
+
* matched (` ⤷ heading: "…"` / ` ⤷ notes: "…snippet…"` / ` ⤷ checklist: "…"`).
|
|
146
|
+
* A title match renders as a plain row with no indicator (matched where you'd
|
|
147
|
+
* expect). A heading match credits the parent project, a checklist match the
|
|
148
|
+
* parent to-do (the GUI has no bare heading/checklist row).
|
|
138
149
|
*/
|
|
139
150
|
export declare function renderSearch(items: ListItem[]): string[];
|
|
140
151
|
/** Hidden-later counts per sidebar group (null area = the loose block). */
|
|
@@ -230,7 +241,7 @@ export declare function disclosureHint(count: number, noun: string | {
|
|
|
230
241
|
* (`limits` supplies the doubling). Today members are starred. Mirrors
|
|
231
242
|
* renderSections' layout exactly.
|
|
232
243
|
*/
|
|
233
|
-
export declare function renderAnytimePreview(sections: SidebarSection[], grouped:
|
|
244
|
+
export declare function renderAnytimePreview(sections: SidebarSection[], grouped: Truncation, limits: GroupedLimits, base: string): string[];
|
|
234
245
|
/**
|
|
235
246
|
* The someday preview, mirroring the GUI (side-by-side, 2026-07-12): inside
|
|
236
247
|
* each group the project rows render as PLAIN items — `(~)` circle, count
|
|
@@ -243,4 +254,4 @@ export declare function renderAnytimePreview(sections: SidebarSection[], grouped
|
|
|
243
254
|
* When the toggle is off and such items exist, a muted bottom hint counts
|
|
244
255
|
* them and names the flag.
|
|
245
256
|
*/
|
|
246
|
-
export declare function renderSomedayPreview(sections: SidebarSection[], grouped:
|
|
257
|
+
export declare function renderSomedayPreview(sections: SidebarSection[], grouped: Truncation, limits: GroupedLimits, base: string, showActive: boolean, hiddenActiveItems: number): string[];
|