@cpenned/mcp 0.5.0 → 0.7.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 +18 -1
- package/dist/tools/ai.js +1 -1
- package/dist/tools/ai.js.map +1 -1
- package/dist/tools/habits.js +230 -0
- package/dist/tools/habits.js.map +1 -0
- package/dist/tools/index.js +4 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/render.js +9 -1
- package/dist/tools/render.js.map +1 -1
- package/dist/tools/schemas.js +20 -0
- package/dist/tools/schemas.js.map +1 -1
- package/dist/tools/strava.js +124 -0
- package/dist/tools/strava.js.map +1 -0
- package/dist/tools/tasks.js +9 -0
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/ui.js +28 -0
- package/dist/tools/ui.js.map +1 -1
- package/package.json +1 -1
- package/skills/open-brain-mcp/SKILL.md +48 -17
package/README.md
CHANGED
|
@@ -82,6 +82,22 @@ Point the `args` at the absolute `packages/mcp/dist/index.js` path with
|
|
|
82
82
|
independently of status), `delete_reading_item` (true soft delete, hidden
|
|
83
83
|
everywhere; restore with `{deleted: false}`), `add_reading_tags`/
|
|
84
84
|
`remove_reading_tags`.
|
|
85
|
+
- **Habits**: `create_habit`, `list_habits`, `get_habit`, `update_habit`,
|
|
86
|
+
`archive_habit`, `unarchive_habit`, `complete_habit`,
|
|
87
|
+
`remove_habit_completion`, `reorder_habits`, `add_habit_tags`, and
|
|
88
|
+
`remove_habit_tags`. Habits support daily, weekly, monthly, and every-N-days
|
|
89
|
+
schedules, streak metadata, optional quantity targets, and reversible archive.
|
|
90
|
+
`pausedUntilDay`, `graceDays`, `availableFrom`, `availableUntil`, and
|
|
91
|
+
`targetQuantity` accept `null` on update to clear; `startDay` can be moved but
|
|
92
|
+
not cleared.
|
|
93
|
+
- **Strava**: `list_strava_activities`, `get_strava_activity`,
|
|
94
|
+
`update_strava_activity` (`notes`/`archived`/`deleted` only — everything
|
|
95
|
+
else is Strava-authoritative), `delete_strava_activity` (soft delete;
|
|
96
|
+
restore with `{deleted: false}`), `add_strava_activity_tags`/
|
|
97
|
+
`remove_strava_activity_tags`, `sync_strava_activities` (manual
|
|
98
|
+
backfill/fallback; real-time ingestion is a webhook). No create tool —
|
|
99
|
+
activities only arrive via webhook or sync. Requires connecting a Strava
|
|
100
|
+
account first, from the web app's Settings page.
|
|
85
101
|
- **Views & reviews**: `get_view`, `get_reviews`, `review_garden`,
|
|
86
102
|
`request_garden_review`, `mark_task_reviewed`, `mark_project_reviewed`.
|
|
87
103
|
- **Settings**: `get_settings`, `update_settings` — the default review period
|
|
@@ -91,7 +107,8 @@ Point the `args` at the absolute `packages/mcp/dist/index.js` path with
|
|
|
91
107
|
(IANA string) is also settable - the vault timezone date-only deferDates/
|
|
92
108
|
deadlines resolve against.
|
|
93
109
|
- **AI**: `find_tasks` (hybrid search), `ai_triage` (brain-dump triage).
|
|
94
|
-
- **UI (read-only MCPUI)**: `ui_view`, `ui_review_queue`, `ui_garden_board
|
|
110
|
+
- **UI (read-only MCPUI)**: `ui_view`, `ui_review_queue`, `ui_garden_board`,
|
|
111
|
+
`ui_habits`
|
|
95
112
|
return `ui://` HTML resources.
|
|
96
113
|
- **Key management**: `create_key`, `list_keys`, `rotate_key`, `revoke_key`
|
|
97
114
|
(require the configured key to hold `keys:manage`). A key can only grant
|
package/dist/tools/ai.js
CHANGED
|
@@ -42,7 +42,7 @@ export function registerAiTools(server, client) {
|
|
|
42
42
|
}, (args) => runTool(() => findTasks(client, args)));
|
|
43
43
|
server.registerTool("ai_triage", {
|
|
44
44
|
title: "AI triage",
|
|
45
|
-
description: "Triage a brain dump into garden-assigned tasks. Returns { created, clarifications, errors }; resolve clarifications before re-submitting.",
|
|
45
|
+
description: "Triage a brain dump into garden-assigned tasks and recurring habits. Returns { created, clarifications, errors, readingItems, habits }; resolve clarifications before re-submitting.",
|
|
46
46
|
inputSchema: aiTriageSchema.shape,
|
|
47
47
|
}, (args) => runTool(() => aiTriage(client, args)));
|
|
48
48
|
}
|
package/dist/tools/ai.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/tools/ai.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,gFAAgF;AAChF,6EAA6E;AAC7E,6EAA6E;AAG7E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAC/D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC7C,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,sFAAsF,CACvF;IACH,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,uEAAuE,CAAC;CACrF,CAAC,CAAC;AAEH,MAAM,UAAU,SAAS,CAAC,MAAuB,EAAE,IAAmB;IACpE,OAAO,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE;QAClC,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,aAAa,EAAE,IAAI,CAAC,aAAa;KAClC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,QAAQ,CAAC,qEAAqE,CAAC;IAClF,cAAc;CACf,CAAC,CAAC;AAEH,MAAM,UAAU,QAAQ,CAAC,MAAuB,EAAE,IAAkB;IAClE,OAAO,MAAM,CAAC,IAAI,CAChB,eAAe,EACf,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EACrB,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CACxC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAiB,EAAE,MAAuB;IACxE,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EACT,+FAA+F;QACjG,WAAW,EAAE,eAAe,CAAC,KAAK;KACnC,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CACjD,CAAC;IACF,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,KAAK,EAAE,WAAW;QAClB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/tools/ai.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,gFAAgF;AAChF,6EAA6E;AAC7E,6EAA6E;AAG7E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAC/D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC7C,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,sFAAsF,CACvF;IACH,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,uEAAuE,CAAC;CACrF,CAAC,CAAC;AAEH,MAAM,UAAU,SAAS,CAAC,MAAuB,EAAE,IAAmB;IACpE,OAAO,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE;QAClC,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,aAAa,EAAE,IAAI,CAAC,aAAa;KAClC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,QAAQ,CAAC,qEAAqE,CAAC;IAClF,cAAc;CACf,CAAC,CAAC;AAEH,MAAM,UAAU,QAAQ,CAAC,MAAuB,EAAE,IAAkB;IAClE,OAAO,MAAM,CAAC,IAAI,CAChB,eAAe,EACf,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EACrB,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CACxC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAiB,EAAE,MAAuB;IACxE,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EACT,+FAA+F;QACjG,WAAW,EAAE,eAAe,CAAC,KAAK;KACnC,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CACjD,CAAC;IACF,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,KAAK,EAAE,WAAW;QAClB,WAAW,EACT,sLAAsL;QACxL,WAAW,EAAE,cAAc,CAAC,KAAK;KAClC,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAChD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
// Habit tracker tools: recurring habits with daily/weekly schedules, streaks,
|
|
2
|
+
// and completion logging. archived hides from the default list (restore with
|
|
3
|
+
// unarchive_habit). Person links live on the person side, not here.
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { runTool } from "../result.js";
|
|
6
|
+
import { dateField, habitScheduleSchema, habitStatusEnum, idempotencyKey, } from "./schemas.js";
|
|
7
|
+
const createHabitSchema = z.object({
|
|
8
|
+
gardenId: z.string(),
|
|
9
|
+
title: z.string(),
|
|
10
|
+
notes: z.string().optional(),
|
|
11
|
+
schedule: habitScheduleSchema,
|
|
12
|
+
status: habitStatusEnum.optional().describe("Defaults to active"),
|
|
13
|
+
startDay: dateField.optional().describe("Defaults to today in vault timezone"),
|
|
14
|
+
pausedUntilDay: dateField
|
|
15
|
+
.nullable()
|
|
16
|
+
.optional()
|
|
17
|
+
.describe("Pause until this day; null clears on update only"),
|
|
18
|
+
weekStartsOn: z
|
|
19
|
+
.number()
|
|
20
|
+
.int()
|
|
21
|
+
.min(0)
|
|
22
|
+
.max(6)
|
|
23
|
+
.optional()
|
|
24
|
+
.describe("0=Sun .. 6=Sat; defaults to 1 (Monday)"),
|
|
25
|
+
graceDays: z
|
|
26
|
+
.number()
|
|
27
|
+
.int()
|
|
28
|
+
.min(0)
|
|
29
|
+
.nullable()
|
|
30
|
+
.optional()
|
|
31
|
+
.describe("Missed days tolerated before a daily streak breaks"),
|
|
32
|
+
availableFrom: z
|
|
33
|
+
.string()
|
|
34
|
+
.nullable()
|
|
35
|
+
.optional()
|
|
36
|
+
.describe('Earliest check-in "HH:MM" (24h)'),
|
|
37
|
+
availableUntil: z
|
|
38
|
+
.string()
|
|
39
|
+
.nullable()
|
|
40
|
+
.optional()
|
|
41
|
+
.describe('Latest check-in "HH:MM" (24h)'),
|
|
42
|
+
targetQuantity: z
|
|
43
|
+
.number()
|
|
44
|
+
.int()
|
|
45
|
+
.positive()
|
|
46
|
+
.nullable()
|
|
47
|
+
.optional()
|
|
48
|
+
.describe("Units required per day (default 1)"),
|
|
49
|
+
tagIds: z.array(z.string()).optional(),
|
|
50
|
+
personIds: z.array(z.string()).optional(),
|
|
51
|
+
idempotencyKey,
|
|
52
|
+
});
|
|
53
|
+
export function createHabit(client, args) {
|
|
54
|
+
const { idempotencyKey: key, ...body } = args;
|
|
55
|
+
return client.post("/v1/habits", body, { idempotencyKey: key });
|
|
56
|
+
}
|
|
57
|
+
const listHabitsSchema = z.object({
|
|
58
|
+
gardenId: z.string().optional(),
|
|
59
|
+
status: z.array(habitStatusEnum).optional(),
|
|
60
|
+
tagIds: z.array(z.string()).optional(),
|
|
61
|
+
personIds: z.array(z.string()).optional(),
|
|
62
|
+
query: z
|
|
63
|
+
.string()
|
|
64
|
+
.optional()
|
|
65
|
+
.describe("Case-insensitive substring search over title/notes/tags"),
|
|
66
|
+
limit: z.number().int().positive().optional(),
|
|
67
|
+
includeArchived: z
|
|
68
|
+
.boolean()
|
|
69
|
+
.optional()
|
|
70
|
+
.describe("Include archived habits. Defaults to false"),
|
|
71
|
+
});
|
|
72
|
+
export function listHabits(client, args) {
|
|
73
|
+
return client.get("/v1/habits", {
|
|
74
|
+
gardenId: args.gardenId,
|
|
75
|
+
status: args.status?.length ? args.status.join(",") : undefined,
|
|
76
|
+
tag: args.tagIds?.length ? args.tagIds.join(",") : undefined,
|
|
77
|
+
person: args.personIds?.length ? args.personIds.join(",") : undefined,
|
|
78
|
+
q: args.query,
|
|
79
|
+
limit: args.limit,
|
|
80
|
+
includeArchived: args.includeArchived,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
const getHabitSchema = z.object({ id: z.string() });
|
|
84
|
+
export function getHabit(client, args) {
|
|
85
|
+
return client.get(`/v1/habits/${args.id}`);
|
|
86
|
+
}
|
|
87
|
+
const updateHabitSchema = z.object({
|
|
88
|
+
id: z.string(),
|
|
89
|
+
gardenId: z.string().optional(),
|
|
90
|
+
title: z.string().optional(),
|
|
91
|
+
notes: z.string().optional(),
|
|
92
|
+
schedule: habitScheduleSchema.optional(),
|
|
93
|
+
status: habitStatusEnum.optional(),
|
|
94
|
+
archived: z
|
|
95
|
+
.boolean()
|
|
96
|
+
.optional()
|
|
97
|
+
.describe("true archives (hidden from default list unless includeArchived); false restores."),
|
|
98
|
+
startDay: dateField
|
|
99
|
+
.optional()
|
|
100
|
+
.describe("Move the tracking start day; this required field cannot be cleared"),
|
|
101
|
+
pausedUntilDay: dateField.nullable().optional().describe("null clears pause"),
|
|
102
|
+
weekStartsOn: z.number().int().min(0).max(6).optional(),
|
|
103
|
+
graceDays: z.number().int().min(0).nullable().optional(),
|
|
104
|
+
availableFrom: z.string().nullable().optional(),
|
|
105
|
+
availableUntil: z.string().nullable().optional(),
|
|
106
|
+
targetQuantity: z.number().int().positive().nullable().optional(),
|
|
107
|
+
});
|
|
108
|
+
export function updateHabit(client, args) {
|
|
109
|
+
const { id, ...patch } = args;
|
|
110
|
+
return client.patch(`/v1/habits/${id}`, patch);
|
|
111
|
+
}
|
|
112
|
+
const archiveHabitSchema = z.object({ id: z.string() });
|
|
113
|
+
export function archiveHabit(client, args) {
|
|
114
|
+
return client.patch(`/v1/habits/${args.id}`, { archived: true });
|
|
115
|
+
}
|
|
116
|
+
const unarchiveHabitSchema = z.object({ id: z.string() });
|
|
117
|
+
export function unarchiveHabit(client, args) {
|
|
118
|
+
return client.patch(`/v1/habits/${args.id}`, { archived: false });
|
|
119
|
+
}
|
|
120
|
+
const completeHabitSchema = z.object({
|
|
121
|
+
id: z.string(),
|
|
122
|
+
day: z
|
|
123
|
+
.string()
|
|
124
|
+
.optional()
|
|
125
|
+
.describe('Calendar day "YYYY-MM-DD"; defaults to today in vault timezone'),
|
|
126
|
+
notes: z.string().optional(),
|
|
127
|
+
quantity: z.number().int().positive().optional(),
|
|
128
|
+
durationMinutes: z.number().int().positive().optional(),
|
|
129
|
+
force: z.boolean().optional().describe("Skip availableFrom/availableUntil window"),
|
|
130
|
+
});
|
|
131
|
+
export function completeHabit(client, args) {
|
|
132
|
+
const { id, ...body } = args;
|
|
133
|
+
return client.post(`/v1/habits/${id}/complete`, body);
|
|
134
|
+
}
|
|
135
|
+
const removeHabitCompletionSchema = z.object({
|
|
136
|
+
id: z.string().describe("Habit id"),
|
|
137
|
+
completionId: z.string().optional().describe("Completion row id; omit when day is set"),
|
|
138
|
+
day: z
|
|
139
|
+
.string()
|
|
140
|
+
.optional()
|
|
141
|
+
.describe('Calendar day "YYYY-MM-DD"; used when completionId is omitted'),
|
|
142
|
+
});
|
|
143
|
+
export async function removeHabitCompletion(client, args) {
|
|
144
|
+
let completionId = args.completionId;
|
|
145
|
+
if (!completionId) {
|
|
146
|
+
const rows = (await client.get(`/v1/habits/${args.id}/completions`));
|
|
147
|
+
if (args.day) {
|
|
148
|
+
completionId = rows.find((r) => r.day === args.day)?.id;
|
|
149
|
+
}
|
|
150
|
+
else if (rows.length > 0) {
|
|
151
|
+
completionId = rows[0]?.id;
|
|
152
|
+
}
|
|
153
|
+
if (!completionId)
|
|
154
|
+
throw new Error("No completion found to remove");
|
|
155
|
+
}
|
|
156
|
+
return client.request("DELETE", `/v1/habits/${args.id}/completions/${completionId}`);
|
|
157
|
+
}
|
|
158
|
+
const reorderHabitsSchema = z.object({
|
|
159
|
+
ids: z.array(z.string()).min(1).describe("Habit ids in display order (first = top)"),
|
|
160
|
+
});
|
|
161
|
+
export function reorderHabits(client, args) {
|
|
162
|
+
return client.post("/v1/habits/reorder", args);
|
|
163
|
+
}
|
|
164
|
+
const habitTagsSchema = z.object({ id: z.string(), tagIds: z.array(z.string()) });
|
|
165
|
+
export function addHabitTags(client, args) {
|
|
166
|
+
return client.post(`/v1/habits/${args.id}/tags`, { tagIds: args.tagIds });
|
|
167
|
+
}
|
|
168
|
+
export function removeHabitTags(client, args) {
|
|
169
|
+
return client.request("DELETE", `/v1/habits/${args.id}/tags`, {
|
|
170
|
+
body: { tagIds: args.tagIds },
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
export function registerHabitTools(server, client) {
|
|
174
|
+
server.registerTool("create_habit", {
|
|
175
|
+
title: "Create habit",
|
|
176
|
+
description: "Create a recurring habit in a garden. schedule is required ({kind: daily}, {kind: weekly, times, byWeekday?}, {kind: monthly, times}, or {kind: every_n_days, interval}).",
|
|
177
|
+
inputSchema: createHabitSchema.shape,
|
|
178
|
+
}, (args) => runTool(() => createHabit(client, args)));
|
|
179
|
+
server.registerTool("list_habits", {
|
|
180
|
+
title: "List habits",
|
|
181
|
+
description: "List habits or filter by garden/status/tags/people/query. Archived habits are excluded unless includeArchived is set.",
|
|
182
|
+
inputSchema: listHabitsSchema.shape,
|
|
183
|
+
}, (args) => runTool(() => listHabits(client, args)));
|
|
184
|
+
server.registerTool("get_habit", {
|
|
185
|
+
title: "Get habit",
|
|
186
|
+
description: "Fetch one habit with tags, linked people, streaks, and period progress.",
|
|
187
|
+
inputSchema: getHabitSchema.shape,
|
|
188
|
+
}, (args) => runTool(() => getHabit(client, args)));
|
|
189
|
+
server.registerTool("update_habit", {
|
|
190
|
+
title: "Update habit",
|
|
191
|
+
description: "Update any subset of a habit's fields. pausedUntilDay, graceDays, availableFrom, availableUntil, and targetQuantity accept null to clear. startDay can be moved but not cleared.",
|
|
192
|
+
inputSchema: updateHabitSchema.shape,
|
|
193
|
+
}, (args) => runTool(() => updateHabit(client, args)));
|
|
194
|
+
server.registerTool("archive_habit", {
|
|
195
|
+
title: "Archive habit",
|
|
196
|
+
description: "Archive a habit (hidden from default list). Same as update_habit {archived: true}.",
|
|
197
|
+
inputSchema: archiveHabitSchema.shape,
|
|
198
|
+
}, (args) => runTool(() => archiveHabit(client, args)));
|
|
199
|
+
server.registerTool("unarchive_habit", {
|
|
200
|
+
title: "Unarchive habit",
|
|
201
|
+
description: "Restore an archived habit. Same as update_habit {archived: false}.",
|
|
202
|
+
inputSchema: unarchiveHabitSchema.shape,
|
|
203
|
+
}, (args) => runTool(() => unarchiveHabit(client, args)));
|
|
204
|
+
server.registerTool("complete_habit", {
|
|
205
|
+
title: "Complete habit",
|
|
206
|
+
description: "Log a completion for today (or a specific day). Re-completing the same day updates quantity/notes.",
|
|
207
|
+
inputSchema: completeHabitSchema.shape,
|
|
208
|
+
}, (args) => runTool(() => completeHabit(client, args)));
|
|
209
|
+
server.registerTool("remove_habit_completion", {
|
|
210
|
+
title: "Remove habit completion",
|
|
211
|
+
description: "Undo a check-in by completion id, or by day (defaults to most recent when neither is specific enough).",
|
|
212
|
+
inputSchema: removeHabitCompletionSchema.shape,
|
|
213
|
+
}, (args) => runTool(() => removeHabitCompletion(client, args)));
|
|
214
|
+
server.registerTool("reorder_habits", {
|
|
215
|
+
title: "Reorder habits",
|
|
216
|
+
description: "Set manual display order. Pass all visible habit ids top-to-bottom.",
|
|
217
|
+
inputSchema: reorderHabitsSchema.shape,
|
|
218
|
+
}, (args) => runTool(() => reorderHabits(client, args)));
|
|
219
|
+
server.registerTool("add_habit_tags", {
|
|
220
|
+
title: "Tag habit",
|
|
221
|
+
description: "Attach tags to a habit.",
|
|
222
|
+
inputSchema: habitTagsSchema.shape,
|
|
223
|
+
}, (args) => runTool(() => addHabitTags(client, args)));
|
|
224
|
+
server.registerTool("remove_habit_tags", {
|
|
225
|
+
title: "Untag habit",
|
|
226
|
+
description: "Detach tags from a habit.",
|
|
227
|
+
inputSchema: habitTagsSchema.shape,
|
|
228
|
+
}, (args) => runTool(() => removeHabitTags(client, args)));
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=habits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"habits.js","sourceRoot":"","sources":["../../src/tools/habits.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { registerAiTools } from "./ai.js";
|
|
2
2
|
import { registerGardenTools } from "./gardens.js";
|
|
3
|
+
import { registerHabitTools } from "./habits.js";
|
|
3
4
|
import { registerKeyTools } from "./keys.js";
|
|
4
5
|
import { registerListTools } from "./lists.js";
|
|
5
6
|
import { registerPeopleTools } from "./people.js";
|
|
6
7
|
import { registerProjectTools } from "./projects.js";
|
|
7
8
|
import { registerReadingTools } from "./reading.js";
|
|
8
9
|
import { registerSettingsTools } from "./settings.js";
|
|
10
|
+
import { registerStravaTools } from "./strava.js";
|
|
9
11
|
import { registerTagTools } from "./tags.js";
|
|
10
12
|
import { registerTaskTools } from "./tasks.js";
|
|
11
13
|
import { registerUiTools } from "./ui.js";
|
|
@@ -17,6 +19,8 @@ export function registerAllTools(server, client) {
|
|
|
17
19
|
registerTagTools(server, client);
|
|
18
20
|
registerPeopleTools(server, client);
|
|
19
21
|
registerReadingTools(server, client);
|
|
22
|
+
registerHabitTools(server, client);
|
|
23
|
+
registerStravaTools(server, client);
|
|
20
24
|
registerListTools(server, client);
|
|
21
25
|
registerViewTools(server, client);
|
|
22
26
|
registerAiTools(server, client);
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,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,eAAe,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,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,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,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,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,eAAe,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,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,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,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,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,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC"}
|
package/dist/tools/render.js
CHANGED
|
@@ -20,10 +20,18 @@ function rows(items) {
|
|
|
20
20
|
.map((it) => {
|
|
21
21
|
const label = escapeHtml(it.title ?? it.name ?? "(untitled)");
|
|
22
22
|
const status = it.status ?? it.relationship ?? "";
|
|
23
|
+
const details = [];
|
|
24
|
+
if (it.dueToday)
|
|
25
|
+
details.push("due today");
|
|
26
|
+
if (typeof it.currentStreak === "number")
|
|
27
|
+
details.push(`${it.currentStreak} streak`);
|
|
28
|
+
if (it.periodProgress) {
|
|
29
|
+
details.push(`${it.periodProgress.done ?? 0}/${it.periodProgress.required ?? 0}`);
|
|
30
|
+
}
|
|
23
31
|
return `<tr>
|
|
24
32
|
<td>${label}</td>
|
|
25
33
|
<td><span class="status ${escapeHtml(it.status ?? "")}">${escapeHtml(status)}</span></td>
|
|
26
|
-
<td>${escapeHtml(it.priority ?? "")}</td>
|
|
34
|
+
<td>${escapeHtml(it.priority ?? details.join(" · "))}</td>
|
|
27
35
|
<td>${escapeHtml(isoDay(it.deadline) || isoDay(it.nextReviewAt) || isoDay(it.nextContactAt))}</td>
|
|
28
36
|
</tr>`;
|
|
29
37
|
})
|
package/dist/tools/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/tools/render.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,+EAA+E;AAC/E,+EAA+E;AAC/E,4DAA4D;AAC5D,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAChC,UAAU,EACV,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CACvE,CAAC,CACQ,CACd,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/tools/render.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,+EAA+E;AAC/E,+EAA+E;AAC/E,4DAA4D;AAC5D,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAChC,UAAU,EACV,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CACvE,CAAC,CACQ,CACd,CAAC;AACJ,CAAC;AAmBD,SAAS,MAAM,CAAC,KAAc;IAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,IAAI,CAAC,KAAa;IACzB,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,2DAA2D,CAAC;IACtF,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACV,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,IAAI,YAAY,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC;QAClD,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,EAAE,CAAC,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI,OAAO,EAAE,CAAC,aAAa,KAAK,QAAQ;YACtC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,aAAa,SAAS,CAAC,CAAC;QAC7C,IAAI,EAAE,CAAC,cAAc,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,cAAc,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,OAAO;YACD,KAAK;gCACe,UAAU,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,KAAK,UAAU,CAAC,MAAM,CAAC;YACtE,UAAU,CAAC,EAAE,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9C,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;UACxF,CAAC;IACP,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAe,EAAE,KAAa;IACpD,OAAO;UACC,UAAU,CAAC,OAAO,CAAC,wBAAwB,KAAK,CAAC,MAAM;;;eAGlD,IAAI,CAAC,KAAK,CAAC;;aAEb,CAAC;AACd,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAa,EAAE,IAAY;IACjD,OAAO;;;;SAIA,UAAU,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;MAmBpB,UAAU,CAAC,KAAK,CAAC;EACrB,IAAI;;QAEE,CAAC;AACT,CAAC"}
|
package/dist/tools/schemas.js
CHANGED
|
@@ -6,6 +6,26 @@ import { z } from "zod";
|
|
|
6
6
|
export const statusEnum = z.enum(["backlog", "todo", "in_progress", "done", "canceled"]);
|
|
7
7
|
export const priorityEnum = z.enum(["none", "low", "medium", "high"]);
|
|
8
8
|
export const readingStatusEnum = z.enum(["unread", "reading", "read"]);
|
|
9
|
+
export const habitStatusEnum = z.enum(["active", "paused"]);
|
|
10
|
+
export const habitScheduleSchema = z.union([
|
|
11
|
+
z.object({ kind: z.literal("daily") }),
|
|
12
|
+
z.object({
|
|
13
|
+
kind: z.literal("weekly"),
|
|
14
|
+
times: z.number().int().positive(),
|
|
15
|
+
byWeekday: z
|
|
16
|
+
.array(z.number().int().min(0).max(6))
|
|
17
|
+
.optional()
|
|
18
|
+
.describe("0=Sun .. 6=Sat"),
|
|
19
|
+
}),
|
|
20
|
+
z.object({
|
|
21
|
+
kind: z.literal("monthly"),
|
|
22
|
+
times: z.number().int().positive(),
|
|
23
|
+
}),
|
|
24
|
+
z.object({
|
|
25
|
+
kind: z.literal("every_n_days"),
|
|
26
|
+
interval: z.number().int().positive(),
|
|
27
|
+
}),
|
|
28
|
+
]);
|
|
9
29
|
export const dateField = z
|
|
10
30
|
.union([z.number(), z.string()])
|
|
11
31
|
.describe('Calendar day "YYYY-MM-DD", or a relative token like "today"/"+3d"');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,+EAA+E;AAC/E,6EAA6E;AAC7E,6EAA6E;AAC7E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AACzF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AACtE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
// Strava activity tools. Activities are never created here - they're only
|
|
2
|
+
// ingested via webhook or sync_strava_activities (a manual/backfill trigger).
|
|
3
|
+
// Every other field except title/notes/archived/deleted/tags is
|
|
4
|
+
// Strava-authoritative and rejected by update_strava_activity's underlying
|
|
5
|
+
// endpoint if attempted.
|
|
6
|
+
// GPS/speed streams aren't exposed as a tool - they're large binary-ish data
|
|
7
|
+
// meant for the web UI's map, not an agent's context; get_strava_activity
|
|
8
|
+
// exposes hasStreams so an agent can point the user at the web UI to view it.
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
import { runTool } from "../result.js";
|
|
11
|
+
const listStravaActivitiesSchema = z.object({
|
|
12
|
+
ids: z.array(z.string()).optional(),
|
|
13
|
+
tagIds: z.array(z.string()).optional(),
|
|
14
|
+
type: z.string().optional().describe("Strava activity type, e.g. Run, Ride, Swim"),
|
|
15
|
+
query: z
|
|
16
|
+
.string()
|
|
17
|
+
.optional()
|
|
18
|
+
.describe("Case-insensitive substring search over name/notes/tags"),
|
|
19
|
+
limit: z.number().int().positive().optional(),
|
|
20
|
+
includeArchived: z
|
|
21
|
+
.boolean()
|
|
22
|
+
.optional()
|
|
23
|
+
.describe("Include archived activities. Defaults to false"),
|
|
24
|
+
});
|
|
25
|
+
export function listStravaActivities(client, args) {
|
|
26
|
+
return client.get("/v1/strava/activities", {
|
|
27
|
+
ids: args.ids?.length ? args.ids.join(",") : undefined,
|
|
28
|
+
tag: args.tagIds?.length ? args.tagIds.join(",") : undefined,
|
|
29
|
+
type: args.type,
|
|
30
|
+
q: args.query,
|
|
31
|
+
limit: args.limit,
|
|
32
|
+
includeArchived: args.includeArchived,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
const getStravaActivitySchema = z.object({ id: z.string() });
|
|
36
|
+
export function getStravaActivity(client, args) {
|
|
37
|
+
return client.get(`/v1/strava/activities/${args.id}`);
|
|
38
|
+
}
|
|
39
|
+
const updateStravaActivitySchema = z.object({
|
|
40
|
+
id: z.string(),
|
|
41
|
+
title: z
|
|
42
|
+
.string()
|
|
43
|
+
.nullable()
|
|
44
|
+
.optional()
|
|
45
|
+
.describe("Overrides the Strava-synced name for display; null reverts to it."),
|
|
46
|
+
notes: z.string().optional(),
|
|
47
|
+
archived: z
|
|
48
|
+
.boolean()
|
|
49
|
+
.optional()
|
|
50
|
+
.describe("Find-later flag; true hides it from the default list (unless includeArchived), false restores it."),
|
|
51
|
+
deleted: z
|
|
52
|
+
.boolean()
|
|
53
|
+
.optional()
|
|
54
|
+
.describe("true deletes (same as delete_strava_activity, hidden everywhere); false restores."),
|
|
55
|
+
});
|
|
56
|
+
export function updateStravaActivity(client, args) {
|
|
57
|
+
const { id, ...patch } = args;
|
|
58
|
+
return client.patch(`/v1/strava/activities/${id}`, patch);
|
|
59
|
+
}
|
|
60
|
+
const deleteStravaActivitySchema = z.object({ id: z.string() });
|
|
61
|
+
export function deleteStravaActivity(client, args) {
|
|
62
|
+
return client.del(`/v1/strava/activities/${args.id}`);
|
|
63
|
+
}
|
|
64
|
+
const stravaActivityTagsSchema = z.object({
|
|
65
|
+
id: z.string(),
|
|
66
|
+
tagIds: z.array(z.string()),
|
|
67
|
+
});
|
|
68
|
+
export function addStravaActivityTags(client, args) {
|
|
69
|
+
return client.post(`/v1/strava/activities/${args.id}/tags`, { tagIds: args.tagIds });
|
|
70
|
+
}
|
|
71
|
+
export function removeStravaActivityTags(client, args) {
|
|
72
|
+
return client.request("DELETE", `/v1/strava/activities/${args.id}/tags`, {
|
|
73
|
+
body: { tagIds: args.tagIds },
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
const syncStravaActivitiesSchema = z.object({
|
|
77
|
+
sinceDays: z
|
|
78
|
+
.number()
|
|
79
|
+
.int()
|
|
80
|
+
.positive()
|
|
81
|
+
.optional()
|
|
82
|
+
.describe("Only import activities from the last N days. Omit to sync all history."),
|
|
83
|
+
});
|
|
84
|
+
export function syncStravaActivities(client, args) {
|
|
85
|
+
return client.post("/v1/strava/sync", args);
|
|
86
|
+
}
|
|
87
|
+
export function registerStravaTools(server, client) {
|
|
88
|
+
server.registerTool("list_strava_activities", {
|
|
89
|
+
title: "List Strava activities",
|
|
90
|
+
description: "List Strava activities, multi-get by ids, or filter by tags/type/query. Archived activities are excluded unless includeArchived is set.",
|
|
91
|
+
inputSchema: listStravaActivitiesSchema.shape,
|
|
92
|
+
}, (args) => runTool(() => listStravaActivities(client, args)));
|
|
93
|
+
server.registerTool("get_strava_activity", {
|
|
94
|
+
title: "Get Strava activity",
|
|
95
|
+
description: "Fetch one Strava activity with its tags. Use hasStreams to know whether a GPS/speed map is available in the web UI.",
|
|
96
|
+
inputSchema: getStravaActivitySchema.shape,
|
|
97
|
+
}, (args) => runTool(() => getStravaActivity(client, args)));
|
|
98
|
+
server.registerTool("update_strava_activity", {
|
|
99
|
+
title: "Update Strava activity",
|
|
100
|
+
description: "Update a Strava activity's title (override the synced name; null reverts to it), notes, archived (find-later flag), or deleted. Every other field (distance, etc.) is Strava-authoritative and can't be edited here.",
|
|
101
|
+
inputSchema: updateStravaActivitySchema.shape,
|
|
102
|
+
}, (args) => runTool(() => updateStravaActivity(client, args)));
|
|
103
|
+
server.registerTool("delete_strava_activity", {
|
|
104
|
+
title: "Delete Strava activity",
|
|
105
|
+
description: "Soft-delete a Strava activity (hidden everywhere). Restore with update_strava_activity {deleted: false}.",
|
|
106
|
+
inputSchema: deleteStravaActivitySchema.shape,
|
|
107
|
+
}, (args) => runTool(() => deleteStravaActivity(client, args)));
|
|
108
|
+
server.registerTool("add_strava_activity_tags", {
|
|
109
|
+
title: "Tag Strava activity",
|
|
110
|
+
description: "Attach tags to a Strava activity.",
|
|
111
|
+
inputSchema: stravaActivityTagsSchema.shape,
|
|
112
|
+
}, (args) => runTool(() => addStravaActivityTags(client, args)));
|
|
113
|
+
server.registerTool("remove_strava_activity_tags", {
|
|
114
|
+
title: "Untag Strava activity",
|
|
115
|
+
description: "Detach tags from a Strava activity.",
|
|
116
|
+
inputSchema: stravaActivityTagsSchema.shape,
|
|
117
|
+
}, (args) => runTool(() => removeStravaActivityTags(client, args)));
|
|
118
|
+
server.registerTool("sync_strava_activities", {
|
|
119
|
+
title: "Sync Strava activities",
|
|
120
|
+
description: "Manually pull recent activities from Strava (backfill/fallback alongside the real-time webhook). Capped per call; re-run to continue further back in history.",
|
|
121
|
+
inputSchema: syncStravaActivitiesSchema.shape,
|
|
122
|
+
}, (args) => runTool(() => syncStravaActivities(client, args)));
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=strava.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strava.js","sourceRoot":"","sources":["../../src/tools/strava.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/tasks.js
CHANGED
|
@@ -22,6 +22,10 @@ const taskFields = {
|
|
|
22
22
|
.describe("Omit to inherit the vault's default review period; null opts this task out of it"),
|
|
23
23
|
tagIds: z.array(z.string()).optional(),
|
|
24
24
|
personIds: z.array(z.string()).optional().describe("People to link on create"),
|
|
25
|
+
habitId: z
|
|
26
|
+
.string()
|
|
27
|
+
.optional()
|
|
28
|
+
.describe("Habit to check in when this task is marked done"),
|
|
25
29
|
};
|
|
26
30
|
const createTaskSchema = z.object({ ...taskFields, idempotencyKey });
|
|
27
31
|
export function createTask(client, args) {
|
|
@@ -102,6 +106,11 @@ const updateTaskSchema = z.object({
|
|
|
102
106
|
.nullable()
|
|
103
107
|
.optional()
|
|
104
108
|
.describe("null clears the review cadence"),
|
|
109
|
+
habitId: z
|
|
110
|
+
.string()
|
|
111
|
+
.nullable()
|
|
112
|
+
.optional()
|
|
113
|
+
.describe("Link to a habit; completing the task checks it in. null clears."),
|
|
105
114
|
});
|
|
106
115
|
export function updateTask(client, args) {
|
|
107
116
|
const { id, ...patch } = args;
|
package/dist/tools/tasks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,4EAA4E;AAC5E,gBAAgB;AAGhB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,UAAU,GACX,MAAM,cAAc,CAAC;AAEtB,MAAM,GAAG,GAAG,CAAC,CAAuB,EAAc,EAAE,CAClD,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAEtC,MAAM,UAAU,GAAG;IACjB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;IAChF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC3E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;IACjD,SAAS,EAAE,SAAS,CAAC,QAAQ,EAAE;IAC/B,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE;IAC9B,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE;IACjC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE;IAClD,UAAU,EAAE,gBAAgB,CAAC,QAAQ,EAAE;IACvC,cAAc,EAAE,oBAAoB;SACjC,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CACP,kFAAkF,CACnF;IACH,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACtC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;CAC/
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/ui.js
CHANGED
|
@@ -64,6 +64,29 @@ export async function gardenBoardUi(client, args) {
|
|
|
64
64
|
return errorResult(error);
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
|
+
const habitsUiSchema = z.object({
|
|
68
|
+
gardenId: z.string().optional(),
|
|
69
|
+
status: z.array(z.enum(["active", "paused"])).optional(),
|
|
70
|
+
query: z.string().optional(),
|
|
71
|
+
limit: z.number().int().positive().optional(),
|
|
72
|
+
includeArchived: z.boolean().optional(),
|
|
73
|
+
});
|
|
74
|
+
export async function habitsUi(client, args) {
|
|
75
|
+
try {
|
|
76
|
+
const data = await client.get("/v1/habits", {
|
|
77
|
+
gardenId: args.gardenId,
|
|
78
|
+
status: args.status?.length ? args.status.join(",") : undefined,
|
|
79
|
+
q: args.query,
|
|
80
|
+
limit: args.limit,
|
|
81
|
+
includeArchived: args.includeArchived,
|
|
82
|
+
});
|
|
83
|
+
const html = htmlDoc("Habits", section("Habits", data.items ?? []));
|
|
84
|
+
return uiResult("ui://open-brain/habits", html);
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
return errorResult(error);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
67
90
|
export function registerUiTools(server, client) {
|
|
68
91
|
server.registerTool("ui_view", {
|
|
69
92
|
title: "View (UI)",
|
|
@@ -80,5 +103,10 @@ export function registerUiTools(server, client) {
|
|
|
80
103
|
description: "Render a garden's projects and tasks as an HTML board.",
|
|
81
104
|
inputSchema: gardenBoardUiSchema.shape,
|
|
82
105
|
}, (args) => gardenBoardUi(client, args));
|
|
106
|
+
server.registerTool("ui_habits", {
|
|
107
|
+
title: "Habits (UI)",
|
|
108
|
+
description: "Render habits with status, due/progress, and streak metadata as an HTML UI.",
|
|
109
|
+
inputSchema: habitsUiSchema.shape,
|
|
110
|
+
}, (args) => habitsUi(client, args));
|
|
83
111
|
}
|
|
84
112
|
//# sourceMappingURL=ui.js.map
|
package/dist/tools/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/tools/ui.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/tools/ui.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,8EAA8E;AAC9E,iFAAiF;AACjF,wDAAwD;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGlD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAa,OAAO,EAAE,MAAM,aAAa,CAAC;AAE1D,KAAK,UAAU,QAAQ,CAAC,GAAqB,EAAE,IAAY;IACzD,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC;QACtC,GAAG;QACH,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE;QAC9C,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,WAAW,GAA2B;IAC1C,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAC9C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC9C,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,MAAuB,EACvB,IAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAqB,aAAa,IAAI,CAAC,IAAI,EAAE,EAAE;YAC1E,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9D,OAAO,QAAQ,CAAC,wBAAwB,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAE1E,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAuB,EACvB,IAAuB;IAEvB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAC3B,aAAa,EACb,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAC5B,CAAC;QACF,MAAM,IAAI,GAAG,OAAO,CAClB,cAAc,EACd,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAChC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;YACxC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAC1C,CAAC;QACF,OAAO,QAAQ,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAE/D,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAuB,EACvB,IAAuB;IAEvB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAoB,eAAe,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnF,8EAA8E;QAC9E,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,GAAG,CAC5B,eAAe,IAAI,CAAC,QAAQ,SAAS,CACtC,CAAC;QACF,MAAM,IAAI,GAAG,OAAO,CAClB,WAAW,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,EACzC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAChF,CAAC;QACF,OAAO,QAAQ,CAAC,0BAA0B,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;IACnE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACxD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC7C,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACxC,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,MAAuB,EACvB,IAAkB;IAElB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAqB,YAAY,EAAE;YAC9D,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;YAC/D,CAAC,EAAE,IAAI,CAAC,KAAK;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,eAAe,EAAE,IAAI,CAAC,eAAe;SACtC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QACpE,OAAO,QAAQ,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAiB,EAAE,MAAuB;IACxE,MAAM,CAAC,YAAY,CACjB,SAAS,EACT;QACE,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,gEAAgE;QAC7E,WAAW,EAAE,YAAY,CAAC,KAAK;KAChC,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAC/B,CAAC;IACF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EACT,wFAAwF;QAC1F,WAAW,EAAE,mBAAmB,CAAC,KAAK;KACvC,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CACtC,CAAC;IACF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,wDAAwD;QACrE,WAAW,EAAE,mBAAmB,CAAC,KAAK;KACvC,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CACtC,CAAC;IACF,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,6EAA6E;QAC/E,WAAW,EAAE,cAAc,CAAC,KAAK;KAClC,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CACjC,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -59,6 +59,17 @@ pre-guessing constraints.
|
|
|
59
59
|
`add_reading_tags`/`remove_reading_tags`; person links live on the person
|
|
60
60
|
side (`add_person_links`/`remove_person_links` with `readingListItemIds`),
|
|
61
61
|
not here.
|
|
62
|
+
- **Strava activity** = a GPS-tracked activity mirrored in from Strava
|
|
63
|
+
(real-time webhook, plus `sync_strava_activities` for backfill/fallback).
|
|
64
|
+
Never created here — every field except `notes`, `archived`, `deleted`, and
|
|
65
|
+
tags is Strava-authoritative and rejected if you try to patch it.
|
|
66
|
+
`detailStatus` (`pending|ready|failed`) tracks the async enrichment fetch;
|
|
67
|
+
`hasStreams` tells you whether a GPS/speed map is available (streams land
|
|
68
|
+
slightly after the summary, so a just-synced activity may briefly show
|
|
69
|
+
`hasStreams: false`). `archived`/`deleted` are independent booleans, same
|
|
70
|
+
reversible semantics as reading list items. GPS/speed stream data itself
|
|
71
|
+
isn't exposed as a tool (too large for an agent's context) — point the user
|
|
72
|
+
at the web UI's activity detail page to see the map.
|
|
62
73
|
|
|
63
74
|
## Tool catalog
|
|
64
75
|
|
|
@@ -90,15 +101,31 @@ pre-guessing constraints.
|
|
|
90
101
|
`update_reading_item` (drives status; `description: null` clears it;
|
|
91
102
|
`archived`/`deleted` toggle independently of status), `delete_reading_item`
|
|
92
103
|
(true soft delete, hidden everywhere; restore with `update_reading_item
|
|
93
|
-
{deleted: false}`),
|
|
104
|
+
{deleted: false}`), `add_reading_tags`/`remove_reading_tags`.
|
|
105
|
+
- **Habits**: `create_habit`, `list_habits`, `get_habit`, `update_habit`,
|
|
106
|
+
`archive_habit`/`unarchive_habit`, `complete_habit` (`quantity?`, `durationMinutes?`,
|
|
107
|
+
`force?` skips time window), `remove_habit_completion` (by `completionId` or `day`),
|
|
108
|
+
`reorder_habits`, `add_habit_tags`/`remove_habit_tags`.
|
|
109
|
+
Schedules: `{kind: daily}`, `{kind: weekly, times, byWeekday?}`, `{kind: monthly, times}`,
|
|
110
|
+
`{kind: every_n_days, interval}`. Optional `graceDays` (daily streak tolerance),
|
|
111
|
+
`availableFrom`/`availableUntil` (`"HH:MM"`), `targetQuantity` (units per day).
|
|
112
|
+
Person links via `add_person_links`/`remove_person_links` with `habitIds`.
|
|
113
|
+
- **Strava**: `list_strava_activities` (filter by `tagIds`/`type`/`query`, or
|
|
114
|
+
multi-get via `ids`; archived excluded unless `includeArchived`),
|
|
115
|
+
`get_strava_activity`, `update_strava_activity` (`notes`/`archived`/
|
|
116
|
+
`deleted` only), `delete_strava_activity` (soft delete; restore with
|
|
117
|
+
`update_strava_activity {deleted: false}`),
|
|
118
|
+
`add_strava_activity_tags`/`remove_strava_activity_tags`,
|
|
119
|
+
`sync_strava_activities` (manual backfill; optional `sinceDays`; capped per
|
|
120
|
+
call — re-run to pull further back in history).
|
|
94
121
|
- **Saved lists** (named, reusable task-list filters): `list_saved_lists`,
|
|
95
122
|
`create_saved_list`, `update_saved_list`, `delete_saved_list`.
|
|
96
123
|
- **Views & reviews**: `get_view` (today/upcoming/overdue, timezone-aware),
|
|
97
124
|
`get_reviews` (due queue), `review_garden` (deep review),
|
|
98
125
|
`request_garden_review`, `mark_task_reviewed`, `mark_project_reviewed`.
|
|
99
126
|
- **AI**: `find_tasks` (hybrid keyword + semantic search), `ai_triage`
|
|
100
|
-
(brain dump → garden-assigned tasks, plus reading-list
|
|
101
|
-
see Workflows).
|
|
127
|
+
(brain dump → garden-assigned tasks and recurring habits, plus reading-list
|
|
128
|
+
saves/edits/cancels - see Workflows).
|
|
102
129
|
- **UI (read-only)**: `ui_view`, `ui_review_queue`, `ui_garden_board` return
|
|
103
130
|
`ui://` HTML resources.
|
|
104
131
|
- **Settings**: `get_settings`, `update_settings` (the default review period
|
|
@@ -110,22 +137,22 @@ pre-guessing constraints.
|
|
|
110
137
|
## Workflows
|
|
111
138
|
|
|
112
139
|
- **Capture a brain dump** → `ai_triage` with the raw text. It returns
|
|
113
|
-
`{ created, clarifications, errors, readingItems: { created, updated, clarifications, errors } }`.
|
|
114
|
-
If
|
|
140
|
+
`{ created, clarifications, errors, readingItems: { created, updated, clarifications, errors }, habits: { created, clarifications, errors } }`.
|
|
141
|
+
If any `clarifications` array is non-empty, ask the user those questions
|
|
115
142
|
and re-run with the answers folded in — do not guess. `ai_triage` also
|
|
116
|
-
recognizes
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
no-op or a task.
|
|
143
|
+
recognizes recurring habits ("meditate daily", "work out 3x/week"), URLs to
|
|
144
|
+
save ("save this for later: https://..."), and references to existing saved
|
|
145
|
+
items ("I finished reading X" → marks it read; "remove Y from my reading
|
|
146
|
+
list" → archives it, reversibly, independent of status) — it matches existing
|
|
147
|
+
items by exact title, so an unmatched or ambiguous reference comes back as a
|
|
148
|
+
reading-list clarification rather than a silent no-op or a task.
|
|
122
149
|
- **Plan today** → `get_view today`. Pass the user's IANA `tz` if known so the
|
|
123
150
|
day boundary is correct.
|
|
124
151
|
- **Add a task** → need a garden: `list_gardens` first, then `create_task` with
|
|
125
152
|
`gardenId`. Set `deadline` for "today"/hard dates — that's what lands it in
|
|
126
153
|
the Today view. `create_task`/`create_tasks` accept `tagIds`, `recurrence`,
|
|
127
|
-
`deferDate`, and `
|
|
128
|
-
create-then-patch.
|
|
154
|
+
`deferDate`, `deadline`, and `habitId` (completing the task checks in the
|
|
155
|
+
habit) **inline** — set them at creation, never create-then-patch.
|
|
129
156
|
`deferDate`/`deadline` are calendar days `"YYYY-MM-DD"` (no timezone); inputs
|
|
130
157
|
also accept relative tokens (`"today"`, `"tomorrow"`, `"+3d"`), so no
|
|
131
158
|
client-side date math. Returned values are always `"YYYY-MM-DD"`.
|
|
@@ -136,6 +163,7 @@ pre-guessing constraints.
|
|
|
136
163
|
is **weekly only**. A recurrence with no `deferDate`/`deadline` stays dateless;
|
|
137
164
|
give it a date if you want each occurrence dated.
|
|
138
165
|
- **Complete / advance** → `update_task` with the next `status`. Completing a
|
|
166
|
+
linked task (`habitId` set) also logs a habit check-in for that day. Completing a
|
|
139
167
|
recurring task spawns its next occurrence automatically.
|
|
140
168
|
- **Weekly review** → `get_reviews` for what's due; `review_garden <id>` to walk
|
|
141
169
|
a whole garden; `mark_task_reviewed` / `mark_project_reviewed` to clear items.
|
|
@@ -173,10 +201,13 @@ pre-guessing constraints.
|
|
|
173
201
|
from the web app's Settings page, not `apiKeys:bootstrap`.
|
|
174
202
|
- Scopes gate tools: resource tools need `<resource>:read|write` (people tools
|
|
175
203
|
`people:read|write`, settings tools `settings:read|write`, reading list tools
|
|
176
|
-
`reading:read|write`), review tools
|
|
177
|
-
`ai:invoke`, the `*_key` tools
|
|
178
|
-
|
|
179
|
-
unless they hold `*`.
|
|
204
|
+
`reading:read|write`, Strava tools `strava:read|write`), review tools
|
|
205
|
+
`reviews:*`, `find_tasks`/`ai_triage` need `ai:invoke`, the `*_key` tools
|
|
206
|
+
need `keys:manage`. A missing scope returns a 403 tool error. Keys minted
|
|
207
|
+
before a feature shipped won't carry its scope unless they hold `*`.
|
|
208
|
+
- `sync_strava_activities` requires a Strava account already connected (via
|
|
209
|
+
the web UI's Settings page) — it does nothing useful if nobody has
|
|
210
|
+
authorized the app yet.
|
|
180
211
|
- `create_reading_item`'s title/description fetch is best-effort and
|
|
181
212
|
asynchronous — a failed fetch (unreachable page, timeout, non-HTML response)
|
|
182
213
|
silently leaves the item with its URL as the title; this is expected, not a
|