@cpenned/mcp 0.8.4 → 0.8.5
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 +22 -5
- package/dist/client.js +40 -6
- package/dist/client.js.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/server.js +16 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/api.js +39 -0
- package/dist/tools/api.js.map +1 -0
- package/dist/tools/attachments.js +43 -0
- package/dist/tools/attachments.js.map +1 -0
- package/dist/tools/books.js +18 -17
- package/dist/tools/books.js.map +1 -1
- package/dist/tools/gardens.js +8 -7
- package/dist/tools/gardens.js.map +1 -1
- package/dist/tools/habits.js +26 -18
- package/dist/tools/habits.js.map +1 -1
- package/dist/tools/index.js +2 -34
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/keys.js +23 -7
- package/dist/tools/keys.js.map +1 -1
- package/dist/tools/lists.js +6 -5
- package/dist/tools/lists.js.map +1 -1
- package/dist/tools/people.js +17 -15
- package/dist/tools/people.js.map +1 -1
- package/dist/tools/projects.js +9 -7
- package/dist/tools/projects.js.map +1 -1
- package/dist/tools/reading.js +11 -10
- package/dist/tools/reading.js.map +1 -1
- package/dist/tools/render.js +6 -0
- package/dist/tools/render.js.map +1 -1
- package/dist/tools/schemas.js +5 -0
- package/dist/tools/schemas.js.map +1 -1
- package/dist/tools/shares.js +4 -3
- package/dist/tools/shares.js.map +1 -1
- package/dist/tools/strava.js +13 -9
- package/dist/tools/strava.js.map +1 -1
- package/dist/tools/tags.js +8 -7
- package/dist/tools/tags.js.map +1 -1
- package/dist/tools/tasks.js +12 -10
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/ui.js +34 -13
- package/dist/tools/ui.js.map +1 -1
- package/dist/tools/views.js +12 -10
- package/dist/tools/views.js.map +1 -1
- package/package.json +1 -1
- package/skills/open-brain-mcp/SKILL.md +31 -14
package/README.md
CHANGED
|
@@ -21,6 +21,11 @@ additionally need the key to have been minted with `includeGrants: true` (via
|
|
|
21
21
|
`create_key`'s `includeGrants` flag or the web app) - without it, a key only
|
|
22
22
|
ever sees the vault's own data, even with `*`.
|
|
23
23
|
|
|
24
|
+
The stdio server sends the machine's IANA timezone as `X-Timezone` on every
|
|
25
|
+
request, so relative dates (`today`, `+3d`) and views resolve in your zone.
|
|
26
|
+
The hosted server does not (it would send the server's zone), so it falls
|
|
27
|
+
back to the vault's `defaultTimezone`.
|
|
28
|
+
|
|
24
29
|
## Run
|
|
25
30
|
|
|
26
31
|
The package is published to npm, so the simplest path needs no clone or build -
|
|
@@ -84,14 +89,19 @@ Point the `args` at the absolute `packages/mcp/dist/index.js` path with
|
|
|
84
89
|
`update_task(s)` as a user id, `"me"`, or `null` to unassign - only
|
|
85
90
|
meaningful in a garden shared with another user, see Mind Meld below);
|
|
86
91
|
`list_tasks` filters by `assignee: "me"|"unassigned"|<userId>`.
|
|
92
|
+
`create_task(s)` and `create_project(s)` accept an initial `status`
|
|
93
|
+
(`backlog|todo|in_progress|done|canceled`, default `todo`). Path ids are
|
|
94
|
+
validated (`[A-Za-z0-9_-]`) and URL-encoded. Read tools carry
|
|
95
|
+
`readOnlyHint` and delete/remove/revoke/rotate tools `destructiveHint`
|
|
96
|
+
annotations.
|
|
87
97
|
- **People** (personal CRM): `create_person`, `list_people` (`query` searches
|
|
88
98
|
name, aliases, company, notes, and more), `get_person`,
|
|
89
99
|
`update_person` (null clears fields; `archived: false` restores),
|
|
90
100
|
`delete_person` (archives), `mark_contacted` (optional `at` backdates),
|
|
91
101
|
`add_person_links`/`remove_person_links` (link people to tasks, projects,
|
|
92
102
|
gardens, and other people — person-to-person connections are symmetric and
|
|
93
|
-
take an optional label like "spouse", plus `readingListItemIds`
|
|
94
|
-
side). People with an elapsed contact cadence appear in `get_reviews`
|
|
103
|
+
take an optional label like "spouse", plus `readingListItemIds` and
|
|
104
|
+
`habitIds` on either side). People with an elapsed contact cadence appear in `get_reviews`
|
|
95
105
|
and `ui_review_queue`; `list_tasks` filters by `person` ids.
|
|
96
106
|
- **Reading list**: `create_reading_item` (only `url` is required; title/
|
|
97
107
|
description are fetched from the page in the background), `list_reading_items`,
|
|
@@ -100,7 +110,7 @@ Point the `args` at the absolute `packages/mcp/dist/index.js` path with
|
|
|
100
110
|
independently of status), `delete_reading_item` (true soft delete, hidden
|
|
101
111
|
everywhere; restore with `{deleted: false}`), `add_reading_tags`/
|
|
102
112
|
`remove_reading_tags`.
|
|
103
|
-
- **Habits**: `create_habit`, `list_habits
|
|
113
|
+
- **Habits**: `create_habit`, `list_habits` (pass `cursor` for the next page), `get_habit`, `update_habit`,
|
|
104
114
|
`archive_habit`, `unarchive_habit`, `complete_habit`,
|
|
105
115
|
`remove_habit_completion`, `reorder_habits`, `add_habit_tags`, and
|
|
106
116
|
`remove_habit_tags`. Habits support daily, weekly, monthly, and every-N-days
|
|
@@ -135,8 +145,13 @@ Point the `args` at the absolute `packages/mcp/dist/index.js` path with
|
|
|
135
145
|
for that day - never downgrading a manual completion),
|
|
136
146
|
`remove_book_session`, `refresh_book_metadata` (`overwrite?`).
|
|
137
147
|
`add_person_links`/`remove_person_links` take `bookIds`.
|
|
148
|
+
- **Attachments** (read-only; upload is web/app-only): `list_task_attachments`,
|
|
149
|
+
`get_attachment`, `get_attachment_url` (short-lived signed URL, optional
|
|
150
|
+
`variant` served/original/thumbnail). Needs `tasks:read`.
|
|
138
151
|
- **Views & reviews**: `get_view`, `get_reviews`, `review_garden`,
|
|
139
152
|
`request_garden_review`, `mark_task_reviewed`, `mark_project_reviewed`.
|
|
153
|
+
Views resolve "today" in the timezone of the machine running the server
|
|
154
|
+
unless you pass `tz`.
|
|
140
155
|
- **Settings**: `get_settings`, `update_settings` — the default review period
|
|
141
156
|
applied to new tasks/projects (2 weeks out of the box;
|
|
142
157
|
`defaultReviewInterval: null` disables it, and `reviewInterval: null` on
|
|
@@ -147,7 +162,8 @@ Point the `args` at the absolute `packages/mcp/dist/index.js` path with
|
|
|
147
162
|
- **AI**: `find_tasks` (hybrid search), `ai_triage` (brain-dump triage).
|
|
148
163
|
- **UI (read-only MCPUI)**: `ui_view`, `ui_review_queue`, `ui_garden_board`,
|
|
149
164
|
`ui_habits`
|
|
150
|
-
return `ui://` HTML resources.
|
|
165
|
+
return `ui://` HTML resources. `ui_view` and `ui_habits` take a `cursor` and
|
|
166
|
+
say when a page was cut short.
|
|
151
167
|
- **Mind Meld** (shared gardens, guest side - sharing/invites/revoke are
|
|
152
168
|
web-app-only): `list_shares` (gardens shared with the caller: capabilities,
|
|
153
169
|
owner, participants - empty unless the key has `includeGrants`),
|
|
@@ -163,7 +179,8 @@ Point the `args` at the absolute `packages/mcp/dist/index.js` path with
|
|
|
163
179
|
- **Key management**: `create_key` (optional `includeGrants` so the minted key
|
|
164
180
|
can see gardens shared with its owner - only settable if the calling key
|
|
165
181
|
itself has it), `list_keys`, `rotate_key`, `revoke_key`
|
|
166
|
-
(require the configured key to hold `keys:manage`).
|
|
182
|
+
(require the configured key to hold `keys:manage`). `rotate_key` and
|
|
183
|
+
`revoke_key` refuse the key the server itself is configured with. A key can only grant
|
|
167
184
|
scopes it itself holds; secrets are returned once. Grant `keys:manage`
|
|
168
185
|
deliberately - it lets the agent mint and revoke keys.
|
|
169
186
|
- **Skills**: `install_skills` copies the bundled `open-brain-mcp` agent skill
|
package/dist/client.js
CHANGED
|
@@ -6,6 +6,29 @@ export class ApiError extends Error {
|
|
|
6
6
|
this.name = "ApiError";
|
|
7
7
|
}
|
|
8
8
|
}
|
|
9
|
+
// Builds an API path with every interpolated value percent-encoded, so an id
|
|
10
|
+
// like "../keys/x" stays one segment instead of resolving to another route.
|
|
11
|
+
export function apiPath(strings, ...segments) {
|
|
12
|
+
return strings.reduce((out, literal, i) => {
|
|
13
|
+
if (i >= segments.length)
|
|
14
|
+
return out + literal;
|
|
15
|
+
const segment = String(segments[i]);
|
|
16
|
+
if (segment === "" || segment === "." || segment === "..") {
|
|
17
|
+
throw new Error(`Invalid path segment: "${segment}"`);
|
|
18
|
+
}
|
|
19
|
+
return out + literal + encodeURIComponent(segment);
|
|
20
|
+
}, "");
|
|
21
|
+
}
|
|
22
|
+
function parseBody(text) {
|
|
23
|
+
if (!text)
|
|
24
|
+
return { ok: true, data: null };
|
|
25
|
+
try {
|
|
26
|
+
return { ok: true, data: JSON.parse(text) };
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return { ok: false };
|
|
30
|
+
}
|
|
31
|
+
}
|
|
9
32
|
export class OpenBrainClient {
|
|
10
33
|
config;
|
|
11
34
|
fetchFn;
|
|
@@ -31,20 +54,31 @@ export class OpenBrainClient {
|
|
|
31
54
|
headers["Content-Type"] = "application/json";
|
|
32
55
|
if (opts.idempotencyKey)
|
|
33
56
|
headers["Idempotency-Key"] = opts.idempotencyKey;
|
|
34
|
-
|
|
35
|
-
|
|
57
|
+
const timezone = opts.timezone ?? this.config.timezone;
|
|
58
|
+
if (timezone)
|
|
59
|
+
headers["X-Timezone"] = timezone;
|
|
36
60
|
const res = await this.fetchFn(url.toString(), {
|
|
37
61
|
method,
|
|
38
62
|
headers,
|
|
39
63
|
body: opts.body !== undefined ? JSON.stringify(opts.body) : undefined,
|
|
40
64
|
});
|
|
41
65
|
const text = await res.text();
|
|
42
|
-
const
|
|
66
|
+
const parsed = parseBody(text);
|
|
43
67
|
if (!res.ok) {
|
|
44
|
-
const
|
|
45
|
-
|
|
68
|
+
const apiMessage = parsed.ok
|
|
69
|
+
? parsed.data?.error?.message
|
|
70
|
+
: undefined;
|
|
71
|
+
throw new ApiError(res.status, apiMessage || res.statusText || `HTTP ${res.status}`);
|
|
72
|
+
}
|
|
73
|
+
if (!parsed.ok) {
|
|
74
|
+
throw new ApiError(res.status, "Response was not valid JSON");
|
|
46
75
|
}
|
|
47
|
-
return data;
|
|
76
|
+
return parsed.data;
|
|
77
|
+
}
|
|
78
|
+
// Whether this client authenticates with the key whose public prefix is given
|
|
79
|
+
// (GET /v1/keys exposes only the prefix, never the secret).
|
|
80
|
+
usesKey(prefix) {
|
|
81
|
+
return prefix.length > 0 && this.config.apiKey.startsWith(prefix);
|
|
48
82
|
}
|
|
49
83
|
get(path, query) {
|
|
50
84
|
return this.request("GET", path, { query });
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,QAAS,SAAQ,KAAK;IAEf;IADlB,YACkB,MAAc,EAC9B,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,WAAM,GAAN,MAAM,CAAQ;QAI9B,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
CHANGED
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAmBA,uEAAuE;AACvE,qBAAqB;AACrB,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC7D,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC;IACvC,MAAM,MAAM,GAAG,GAAG,CAAC,kBAAkB,CAAC;IACtC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO;QACL,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC;QAClC,MAAM;QACN,UAAU,EAAE,GAAG,CAAC,sBAAsB,IAAI,KAAK;QAC/C,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ;KAC3D,CAAC;AACJ,CAAC"}
|
package/dist/server.js
CHANGED
|
@@ -14,9 +14,25 @@ function buildInstructions(localSkills) {
|
|
|
14
14
|
return (`${base} The bundled agent skill (${missing.map((s) => s.name).join(", ")}) is not installed on this machine. ` +
|
|
15
15
|
"Early in the first conversation, offer once to install it with the install_skills tool (a local copy into ~/.claude/skills) so future sessions drive these tools well; respect the user's answer and don't re-offer.");
|
|
16
16
|
}
|
|
17
|
+
const READ_ONLY_TOOL = /^(get|list|find|search|ui)_|^review_garden$/;
|
|
18
|
+
const DESTRUCTIVE_TOOL = /^(delete|revoke|rotate|remove)_/;
|
|
19
|
+
// Derived from the tool naming convention so every new tool is annotated
|
|
20
|
+
// without per-registration boilerplate. Unmatched tools keep the SDK defaults.
|
|
21
|
+
export function toolAnnotations(name) {
|
|
22
|
+
if (READ_ONLY_TOOL.test(name))
|
|
23
|
+
return { readOnlyHint: true };
|
|
24
|
+
if (DESTRUCTIVE_TOOL.test(name))
|
|
25
|
+
return { destructiveHint: true };
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
function annotateRegistrations(server) {
|
|
29
|
+
const register = server.registerTool.bind(server);
|
|
30
|
+
server.registerTool = ((name, config, cb) => register(name, { ...config, annotations: { ...toolAnnotations(name), ...config.annotations } }, cb));
|
|
31
|
+
}
|
|
17
32
|
export function createServer(client, options = {}) {
|
|
18
33
|
const localSkills = options.localSkills ?? true;
|
|
19
34
|
const server = new McpServer({ name: "open-brain", version: "0.1.0" }, { instructions: buildInstructions(localSkills) });
|
|
35
|
+
annotateRegistrations(server);
|
|
20
36
|
registerAllTools(server, client);
|
|
21
37
|
if (localSkills)
|
|
22
38
|
registerSkillTools(server);
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAErE,+EAA+E;AAC/E,+EAA+E;AAC/E,2EAA2E;AAC3E,SAAS,iBAAiB,CAAC,WAAoB;IAC7C,MAAM,IAAI,GACR,8GAA8G,CAAC;IACjH,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,CACL,GAAG,IAAI,6BAA6B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,sCAAsC;QAC/G,sNAAsN,CACvN,CAAC;AACJ,CAAC;AAED,MAAM,cAAc,GAAG,6CAA6C,CAAC;AACrE,MAAM,gBAAgB,GAAG,iCAAiC,CAAC;AAE3D,yEAAyE;AACzE,+EAA+E;AAC/E,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAC7D,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;IAClE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAiB;IAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAIN,CAAC;IAC3C,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAC1C,QAAQ,CACN,IAAI,EACJ,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,EAC/E,EAAE,CACH,CAA8B,CAAC;AACpC,CAAC;AAQD,MAAM,UAAU,YAAY,CAC1B,MAAuB,EACvB,UAA+B,EAAE;IAEjC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC;IAChD,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,EACxC,EAAE,YAAY,EAAE,iBAAiB,CAAC,WAAW,CAAC,EAAE,CACjD,CAAC;IACF,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,WAAW;QAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { registerAiTools } from "./ai.js";
|
|
2
|
+
import { registerAttachmentTools } from "./attachments.js";
|
|
3
|
+
import { registerBookTools } from "./books.js";
|
|
4
|
+
import { registerCalendarTools } from "./calendar.js";
|
|
5
|
+
import { registerGardenTools } from "./gardens.js";
|
|
6
|
+
import { registerHabitTools } from "./habits.js";
|
|
7
|
+
import { registerKeyTools } from "./keys.js";
|
|
8
|
+
import { registerListTools } from "./lists.js";
|
|
9
|
+
import { registerPeopleTools } from "./people.js";
|
|
10
|
+
import { registerProfileTools } from "./profile.js";
|
|
11
|
+
import { registerProjectTools } from "./projects.js";
|
|
12
|
+
import { registerReadingTools } from "./reading.js";
|
|
13
|
+
import { registerSettingsTools } from "./settings.js";
|
|
14
|
+
import { registerShareTools } from "./shares.js";
|
|
15
|
+
import { registerStravaTools } from "./strava.js";
|
|
16
|
+
import { registerTagTools } from "./tags.js";
|
|
17
|
+
import { registerTaskTools } from "./tasks.js";
|
|
18
|
+
import { registerViewTools } from "./views.js";
|
|
19
|
+
export function registerApiTools(server, client) {
|
|
20
|
+
registerTaskTools(server, client);
|
|
21
|
+
registerAttachmentTools(server, client);
|
|
22
|
+
registerProjectTools(server, client);
|
|
23
|
+
registerGardenTools(server, client);
|
|
24
|
+
registerTagTools(server, client);
|
|
25
|
+
registerPeopleTools(server, client);
|
|
26
|
+
registerReadingTools(server, client);
|
|
27
|
+
registerHabitTools(server, client);
|
|
28
|
+
registerBookTools(server, client);
|
|
29
|
+
registerStravaTools(server, client);
|
|
30
|
+
registerCalendarTools(server, client);
|
|
31
|
+
registerListTools(server, client);
|
|
32
|
+
registerViewTools(server, client);
|
|
33
|
+
registerAiTools(server, client);
|
|
34
|
+
registerKeyTools(server, client);
|
|
35
|
+
registerSettingsTools(server, client);
|
|
36
|
+
registerShareTools(server, client);
|
|
37
|
+
registerProfileTools(server, client);
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/tools/api.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,MAAuB;IACzE,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Attachment read tools: a task's attached files and a short-lived download URL
|
|
2
|
+
// for one. Access follows the parent entity (tasks:read for task attachments).
|
|
3
|
+
// Uploading stays in the web app and native apps.
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { apiPath } from "../client.js";
|
|
6
|
+
import { runTool } from "../result.js";
|
|
7
|
+
import { idField } from "./schemas.js";
|
|
8
|
+
const listTaskAttachmentsSchema = z.object({ taskId: idField });
|
|
9
|
+
export function listTaskAttachments(client, args) {
|
|
10
|
+
return client.get(apiPath `/v1/tasks/${args.taskId}/attachments`);
|
|
11
|
+
}
|
|
12
|
+
const getAttachmentSchema = z.object({ id: idField.describe("Attachment id") });
|
|
13
|
+
export function getAttachment(client, args) {
|
|
14
|
+
return client.get(apiPath `/v1/attachments/${args.id}`);
|
|
15
|
+
}
|
|
16
|
+
const getAttachmentUrlSchema = z.object({
|
|
17
|
+
id: idField.describe("Attachment id"),
|
|
18
|
+
variant: z
|
|
19
|
+
.enum(["served", "original", "thumbnail"])
|
|
20
|
+
.optional()
|
|
21
|
+
.describe("served (default) is the stored file; original is the pre-processing upload; thumbnail is the preview image, when one exists"),
|
|
22
|
+
});
|
|
23
|
+
export function getAttachmentUrl(client, args) {
|
|
24
|
+
return client.get(apiPath `/v1/attachments/${args.id}/url`, { variant: args.variant });
|
|
25
|
+
}
|
|
26
|
+
export function registerAttachmentTools(server, client) {
|
|
27
|
+
server.registerTool("list_task_attachments", {
|
|
28
|
+
title: "List task attachments",
|
|
29
|
+
description: "List the files attached to a task (metadata only, no contents).",
|
|
30
|
+
inputSchema: listTaskAttachmentsSchema.shape,
|
|
31
|
+
}, (args) => runTool(() => listTaskAttachments(client, args)));
|
|
32
|
+
server.registerTool("get_attachment", {
|
|
33
|
+
title: "Get attachment",
|
|
34
|
+
description: "Fetch one attachment's metadata.",
|
|
35
|
+
inputSchema: getAttachmentSchema.shape,
|
|
36
|
+
}, (args) => runTool(() => getAttachment(client, args)));
|
|
37
|
+
server.registerTool("get_attachment_url", {
|
|
38
|
+
title: "Get attachment URL",
|
|
39
|
+
description: "A short-lived signed download URL for an attachment ({ url }; url is null when the variant does not exist).",
|
|
40
|
+
inputSchema: getAttachmentUrlSchema.shape,
|
|
41
|
+
}, (args) => runTool(() => getAttachmentUrl(client, args)));
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=attachments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../src/tools/attachments.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,+EAA+E;AAC/E,kDAAkD;AAGlD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAwB,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AAEhE,MAAM,UAAU,mBAAmB,CACjC,MAAuB,EACvB,IAA6B;IAE7B,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,CAAA,aAAa,IAAI,CAAC,MAAM,cAAc,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;AAEhF,MAAM,UAAU,aAAa,CAAC,MAAuB,EAAE,IAAuB;IAC5E,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,CAAA,mBAAmB,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IACrC,OAAO,EAAE,CAAC;SACP,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;SACzC,QAAQ,EAAE;SACV,QAAQ,CACP,6HAA6H,CAC9H;CACJ,CAAC,CAAC;AAEH,MAAM,UAAU,gBAAgB,CAAC,MAAuB,EAAE,IAA0B;IAClF,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,CAAA,mBAAmB,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,MAAiB,EACjB,MAAuB;IAEvB,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,iEAAiE;QAC9E,WAAW,EAAE,yBAAyB,CAAC,KAAK;KAC7C,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAC3D,CAAC;IACF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,kCAAkC;QAC/C,WAAW,EAAE,mBAAmB,CAAC,KAAK;KACvC,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CACrD,CAAC;IACF,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,6GAA6G;QAC/G,WAAW,EAAE,sBAAsB,CAAC,KAAK;KAC1C,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CACxD,CAAC;AACJ,CAAC"}
|
package/dist/tools/books.js
CHANGED
|
@@ -9,8 +9,9 @@
|
|
|
9
9
|
// can force an overwrite. Person links live on the person side
|
|
10
10
|
// (add_person_links/remove_person_links), not here.
|
|
11
11
|
import { z } from "zod";
|
|
12
|
+
import { apiPath } from "../client.js";
|
|
12
13
|
import { runTool } from "../result.js";
|
|
13
|
-
import { bookFormatEnum, bookStatusEnum, idempotencyKey } from "./schemas.js";
|
|
14
|
+
import { bookFormatEnum, bookStatusEnum, idempotencyKey, idField } from "./schemas.js";
|
|
14
15
|
const createBookSchema = z.object({
|
|
15
16
|
title: z.string(),
|
|
16
17
|
subtitle: z.string().optional(),
|
|
@@ -80,12 +81,12 @@ export function listBooks(client, args) {
|
|
|
80
81
|
includeArchived: args.includeArchived,
|
|
81
82
|
});
|
|
82
83
|
}
|
|
83
|
-
const getBookSchema = z.object({ id:
|
|
84
|
+
const getBookSchema = z.object({ id: idField });
|
|
84
85
|
export function getBook(client, args) {
|
|
85
|
-
return client.get(`/v1/books/${args.id}`);
|
|
86
|
+
return client.get(apiPath `/v1/books/${args.id}`);
|
|
86
87
|
}
|
|
87
88
|
const updateBookSchema = z.object({
|
|
88
|
-
id:
|
|
89
|
+
id: idField,
|
|
89
90
|
title: z.string().optional(),
|
|
90
91
|
subtitle: z.string().nullable().optional().describe("null clears"),
|
|
91
92
|
authors: z.array(z.string()).optional(),
|
|
@@ -129,23 +130,23 @@ const updateBookSchema = z.object({
|
|
|
129
130
|
});
|
|
130
131
|
export function updateBook(client, args) {
|
|
131
132
|
const { id, ...patch } = args;
|
|
132
|
-
return client.patch(`/v1/books/${id}`, patch);
|
|
133
|
+
return client.patch(apiPath `/v1/books/${id}`, patch);
|
|
133
134
|
}
|
|
134
|
-
const deleteBookSchema = z.object({ id:
|
|
135
|
+
const deleteBookSchema = z.object({ id: idField });
|
|
135
136
|
export function deleteBook(client, args) {
|
|
136
|
-
return client.del(`/v1/books/${args.id}`);
|
|
137
|
+
return client.del(apiPath `/v1/books/${args.id}`);
|
|
137
138
|
}
|
|
138
|
-
const bookTagsSchema = z.object({ id:
|
|
139
|
+
const bookTagsSchema = z.object({ id: idField, tagIds: z.array(z.string()) });
|
|
139
140
|
export function addBookTags(client, args) {
|
|
140
|
-
return client.post(`/v1/books/${args.id}/tags`, { tagIds: args.tagIds });
|
|
141
|
+
return client.post(apiPath `/v1/books/${args.id}/tags`, { tagIds: args.tagIds });
|
|
141
142
|
}
|
|
142
143
|
export function removeBookTags(client, args) {
|
|
143
|
-
return client.request("DELETE", `/v1/books/${args.id}/tags`, {
|
|
144
|
+
return client.request("DELETE", apiPath `/v1/books/${args.id}/tags`, {
|
|
144
145
|
body: { tagIds: args.tagIds },
|
|
145
146
|
});
|
|
146
147
|
}
|
|
147
148
|
const logBookSessionSchema = z.object({
|
|
148
|
-
id:
|
|
149
|
+
id: idField.describe("Book id"),
|
|
149
150
|
day: z
|
|
150
151
|
.string()
|
|
151
152
|
.optional()
|
|
@@ -157,17 +158,17 @@ const logBookSessionSchema = z.object({
|
|
|
157
158
|
});
|
|
158
159
|
export function logBookSession(client, args) {
|
|
159
160
|
const { id, ...body } = args;
|
|
160
|
-
return client.post(`/v1/books/${id}/sessions`, body);
|
|
161
|
+
return client.post(apiPath `/v1/books/${id}/sessions`, body);
|
|
161
162
|
}
|
|
162
163
|
const removeBookSessionSchema = z.object({
|
|
163
|
-
id:
|
|
164
|
-
sessionId:
|
|
164
|
+
id: idField.describe("Book id"),
|
|
165
|
+
sessionId: idField,
|
|
165
166
|
});
|
|
166
167
|
export function removeBookSession(client, args) {
|
|
167
|
-
return client.del(`/v1/books/${args.id}/sessions/${args.sessionId}`);
|
|
168
|
+
return client.del(apiPath `/v1/books/${args.id}/sessions/${args.sessionId}`);
|
|
168
169
|
}
|
|
169
170
|
const refreshBookMetadataSchema = z.object({
|
|
170
|
-
id:
|
|
171
|
+
id: idField,
|
|
171
172
|
overwrite: z
|
|
172
173
|
.boolean()
|
|
173
174
|
.optional()
|
|
@@ -175,7 +176,7 @@ const refreshBookMetadataSchema = z.object({
|
|
|
175
176
|
});
|
|
176
177
|
export function refreshBookMetadata(client, args) {
|
|
177
178
|
const { id, ...body } = args;
|
|
178
|
-
return client.post(`/v1/books/${id}/metadata`, body);
|
|
179
|
+
return client.post(apiPath `/v1/books/${id}/metadata`, body);
|
|
179
180
|
}
|
|
180
181
|
export function registerBookTools(server, client) {
|
|
181
182
|
server.registerTool("search_books", {
|
package/dist/tools/books.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"books.js","sourceRoot":"","sources":["../../src/tools/books.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"books.js","sourceRoot":"","sources":["../../src/tools/books.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/gardens.js
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
// them (soft-delete). The Markdown `context` is what AI triage reads to assign
|
|
3
3
|
// tasks, so it is a first-class field here.
|
|
4
4
|
import { z } from "zod";
|
|
5
|
+
import { apiPath } from "../client.js";
|
|
5
6
|
import { runTool } from "../result.js";
|
|
6
|
-
import { idempotencyKey } from "./schemas.js";
|
|
7
|
+
import { idempotencyKey, idField } from "./schemas.js";
|
|
7
8
|
const gardenFields = {
|
|
8
9
|
name: z.string(),
|
|
9
10
|
notes: z.string().optional(),
|
|
@@ -31,12 +32,12 @@ export function listGardens(client, args) {
|
|
|
31
32
|
limit: args.limit,
|
|
32
33
|
});
|
|
33
34
|
}
|
|
34
|
-
const getGardenSchema = z.object({ id:
|
|
35
|
+
const getGardenSchema = z.object({ id: idField });
|
|
35
36
|
export function getGarden(client, args) {
|
|
36
|
-
return client.get(`/v1/gardens/${args.id}`);
|
|
37
|
+
return client.get(apiPath `/v1/gardens/${args.id}`);
|
|
37
38
|
}
|
|
38
39
|
const updateGardenSchema = z.object({
|
|
39
|
-
id:
|
|
40
|
+
id: idField,
|
|
40
41
|
name: z.string().optional(),
|
|
41
42
|
notes: z.string().optional(),
|
|
42
43
|
context: z.string().optional(),
|
|
@@ -46,11 +47,11 @@ const updateGardenSchema = z.object({
|
|
|
46
47
|
});
|
|
47
48
|
export function updateGarden(client, args) {
|
|
48
49
|
const { id, ...patch } = args;
|
|
49
|
-
return client.patch(`/v1/gardens/${id}`, patch);
|
|
50
|
+
return client.patch(apiPath `/v1/gardens/${id}`, patch);
|
|
50
51
|
}
|
|
51
|
-
const deleteGardenSchema = z.object({ id:
|
|
52
|
+
const deleteGardenSchema = z.object({ id: idField });
|
|
52
53
|
export function deleteGarden(client, args) {
|
|
53
|
-
return client.del(`/v1/gardens/${args.id}`);
|
|
54
|
+
return client.del(apiPath `/v1/gardens/${args.id}`);
|
|
54
55
|
}
|
|
55
56
|
export function registerGardenTools(server, client) {
|
|
56
57
|
server.registerTool("create_garden", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gardens.js","sourceRoot":"","sources":["../../src/tools/gardens.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,+EAA+E;AAC/E,4CAA4C;AAG5C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"gardens.js","sourceRoot":"","sources":["../../src/tools/gardens.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/habits.js
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
// and completion logging. archived hides from the default list (restore with
|
|
3
3
|
// unarchive_habit). Person links live on the person side, not here.
|
|
4
4
|
import { z } from "zod";
|
|
5
|
+
import { apiPath } from "../client.js";
|
|
5
6
|
import { runTool } from "../result.js";
|
|
6
|
-
import { dateField, habitScheduleSchema, habitStatusEnum, idempotencyKey, } from "./schemas.js";
|
|
7
|
+
import { dateField, habitScheduleSchema, habitStatusEnum, idempotencyKey, idField, } from "./schemas.js";
|
|
7
8
|
const createHabitSchema = z.object({
|
|
8
9
|
gardenId: z.string(),
|
|
9
10
|
title: z.string(),
|
|
@@ -64,6 +65,7 @@ const listHabitsSchema = z.object({
|
|
|
64
65
|
.optional()
|
|
65
66
|
.describe("Case-insensitive substring search over title/notes/tags"),
|
|
66
67
|
limit: z.number().int().positive().optional(),
|
|
68
|
+
cursor: z.string().optional().describe("nextCursor from a previous page"),
|
|
67
69
|
includeArchived: z
|
|
68
70
|
.boolean()
|
|
69
71
|
.optional()
|
|
@@ -77,15 +79,16 @@ export function listHabits(client, args) {
|
|
|
77
79
|
person: args.personIds?.length ? args.personIds.join(",") : undefined,
|
|
78
80
|
q: args.query,
|
|
79
81
|
limit: args.limit,
|
|
82
|
+
cursor: args.cursor,
|
|
80
83
|
includeArchived: args.includeArchived,
|
|
81
84
|
});
|
|
82
85
|
}
|
|
83
|
-
const getHabitSchema = z.object({ id:
|
|
86
|
+
const getHabitSchema = z.object({ id: idField });
|
|
84
87
|
export function getHabit(client, args) {
|
|
85
|
-
return client.get(`/v1/habits/${args.id}`);
|
|
88
|
+
return client.get(apiPath `/v1/habits/${args.id}`);
|
|
86
89
|
}
|
|
87
90
|
const updateHabitSchema = z.object({
|
|
88
|
-
id:
|
|
91
|
+
id: idField,
|
|
89
92
|
gardenId: z.string().optional(),
|
|
90
93
|
title: z.string().optional(),
|
|
91
94
|
notes: z.string().optional(),
|
|
@@ -107,18 +110,18 @@ const updateHabitSchema = z.object({
|
|
|
107
110
|
});
|
|
108
111
|
export function updateHabit(client, args) {
|
|
109
112
|
const { id, ...patch } = args;
|
|
110
|
-
return client.patch(`/v1/habits/${id}`, patch);
|
|
113
|
+
return client.patch(apiPath `/v1/habits/${id}`, patch);
|
|
111
114
|
}
|
|
112
|
-
const archiveHabitSchema = z.object({ id:
|
|
115
|
+
const archiveHabitSchema = z.object({ id: idField });
|
|
113
116
|
export function archiveHabit(client, args) {
|
|
114
|
-
return client.patch(`/v1/habits/${args.id}`, { archived: true });
|
|
117
|
+
return client.patch(apiPath `/v1/habits/${args.id}`, { archived: true });
|
|
115
118
|
}
|
|
116
|
-
const unarchiveHabitSchema = z.object({ id:
|
|
119
|
+
const unarchiveHabitSchema = z.object({ id: idField });
|
|
117
120
|
export function unarchiveHabit(client, args) {
|
|
118
|
-
return client.patch(`/v1/habits/${args.id}`, { archived: false });
|
|
121
|
+
return client.patch(apiPath `/v1/habits/${args.id}`, { archived: false });
|
|
119
122
|
}
|
|
120
123
|
const completeHabitSchema = z.object({
|
|
121
|
-
id:
|
|
124
|
+
id: idField,
|
|
122
125
|
day: z
|
|
123
126
|
.string()
|
|
124
127
|
.optional()
|
|
@@ -130,11 +133,12 @@ const completeHabitSchema = z.object({
|
|
|
130
133
|
});
|
|
131
134
|
export function completeHabit(client, args) {
|
|
132
135
|
const { id, ...body } = args;
|
|
133
|
-
return client.post(`/v1/habits/${id}/complete`, body);
|
|
136
|
+
return client.post(apiPath `/v1/habits/${id}/complete`, body);
|
|
134
137
|
}
|
|
138
|
+
const COMPLETIONS_LOOKUP_LIMIT = 200;
|
|
135
139
|
const removeHabitCompletionSchema = z.object({
|
|
136
|
-
id:
|
|
137
|
-
completionId:
|
|
140
|
+
id: idField.describe("Habit id"),
|
|
141
|
+
completionId: idField.optional().describe("Completion row id; omit when day is set"),
|
|
138
142
|
day: z
|
|
139
143
|
.string()
|
|
140
144
|
.optional()
|
|
@@ -143,7 +147,11 @@ const removeHabitCompletionSchema = z.object({
|
|
|
143
147
|
export async function removeHabitCompletion(client, args) {
|
|
144
148
|
let completionId = args.completionId;
|
|
145
149
|
if (!completionId) {
|
|
146
|
-
|
|
150
|
+
// The endpoint returns newest first and defaults to 50 rows; 200 (the API
|
|
151
|
+
// max) reaches back far enough to find an older day.
|
|
152
|
+
const rows = (await client.get(apiPath `/v1/habits/${args.id}/completions`, {
|
|
153
|
+
limit: COMPLETIONS_LOOKUP_LIMIT,
|
|
154
|
+
}));
|
|
147
155
|
if (args.day) {
|
|
148
156
|
completionId = rows.find((r) => r.day === args.day)?.id;
|
|
149
157
|
}
|
|
@@ -153,7 +161,7 @@ export async function removeHabitCompletion(client, args) {
|
|
|
153
161
|
if (!completionId)
|
|
154
162
|
throw new Error("No completion found to remove");
|
|
155
163
|
}
|
|
156
|
-
return client.request("DELETE", `/v1/habits/${args.id}/completions/${completionId}`);
|
|
164
|
+
return client.request("DELETE", apiPath `/v1/habits/${args.id}/completions/${completionId}`);
|
|
157
165
|
}
|
|
158
166
|
const reorderHabitsSchema = z.object({
|
|
159
167
|
ids: z.array(z.string()).min(1).describe("Habit ids in display order (first = top)"),
|
|
@@ -161,12 +169,12 @@ const reorderHabitsSchema = z.object({
|
|
|
161
169
|
export function reorderHabits(client, args) {
|
|
162
170
|
return client.post("/v1/habits/reorder", args);
|
|
163
171
|
}
|
|
164
|
-
const habitTagsSchema = z.object({ id:
|
|
172
|
+
const habitTagsSchema = z.object({ id: idField, tagIds: z.array(z.string()) });
|
|
165
173
|
export function addHabitTags(client, args) {
|
|
166
|
-
return client.post(`/v1/habits/${args.id}/tags`, { tagIds: args.tagIds });
|
|
174
|
+
return client.post(apiPath `/v1/habits/${args.id}/tags`, { tagIds: args.tagIds });
|
|
167
175
|
}
|
|
168
176
|
export function removeHabitTags(client, args) {
|
|
169
|
-
return client.request("DELETE", `/v1/habits/${args.id}/tags`, {
|
|
177
|
+
return client.request("DELETE", apiPath `/v1/habits/${args.id}/tags`, {
|
|
170
178
|
body: { tagIds: args.tagIds },
|
|
171
179
|
});
|
|
172
180
|
}
|