@mind-your-now/myn 0.8.2 → 0.8.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +105 -6
  2. package/dist/index.js +1 -1
  3. package/dist/src/tools/debrief.js +2 -2
  4. package/dist/src/tools/debrief.js.map +1 -1
  5. package/dist/src/tools/habits.js +2 -2
  6. package/dist/src/tools/habits.js.map +1 -1
  7. package/dist/src/tools/household.js +3 -3
  8. package/dist/src/tools/household.js.map +1 -1
  9. package/dist/src/tools/lists.js +2 -2
  10. package/dist/src/tools/lists.js.map +1 -1
  11. package/dist/src/tools/memory.js +1 -1
  12. package/dist/src/tools/memory.js.map +1 -1
  13. package/dist/src/tools/planning.js +1 -1
  14. package/dist/src/tools/planning.js.map +1 -1
  15. package/dist/src/tools/projects.js +4 -4
  16. package/dist/src/tools/projects.js.map +1 -1
  17. package/dist/src/tools/tasks.js +2 -2
  18. package/dist/src/tools/tasks.js.map +1 -1
  19. package/dist/src/tools/timers.js +1 -1
  20. package/dist/src/tools/timers.js.map +1 -1
  21. package/dist/src/validation.d.ts.map +1 -1
  22. package/dist/src/validation.js +3 -2
  23. package/dist/src/validation.js.map +1 -1
  24. package/openclaw.plugin.json +1 -1
  25. package/package.json +2 -2
  26. package/skills/myn/SKILL.md +12 -10
  27. package/skills/myn/references/briefing-api.md +11 -183
  28. package/skills/myn/references/calendar-api.md +177 -55
  29. package/skills/myn/references/debrief-api.md +182 -0
  30. package/skills/myn/references/habits-api.md +37 -55
  31. package/skills/myn/references/household-api.md +37 -14
  32. package/skills/myn/references/lists-api.md +80 -46
  33. package/skills/myn/references/memory-api.md +66 -34
  34. package/skills/myn/references/planning-api.md +58 -155
  35. package/skills/myn/references/profile-api.md +54 -61
  36. package/skills/myn/references/projects-api.md +13 -11
  37. package/skills/myn/references/search-api.md +20 -48
  38. package/skills/myn/references/tasks-api.md +47 -40
  39. package/skills/myn/references/timers-api.md +113 -52
  40. package/skills/myn/references/ynab-api.md +323 -0
@@ -6,15 +6,16 @@ Grocery and shopping list management scoped to households.
6
6
 
7
7
  `/api/v1/households/{householdId}/grocery-list`
8
8
 
9
+ ## Actions
10
+
11
+ The `myn_lists` tool supports these actions: `get`, `add`, `update`, `toggle`, `delete`, `delete_checked`, `bulk_add`, `convert_to_tasks`.
12
+
9
13
  ## Prerequisites
10
14
 
11
- All list endpoints require a `householdId`. Retrieve it from the current user profile:
15
+ All list endpoints require a `householdId`. The plugin auto-resolves it via:
12
16
 
13
- ```bash
14
- # Get your household ID
15
- curl -H "X-API-KEY: $MYN_API_KEY" \
16
- "$MYN_API_URL/api/v1/customers/me"
17
- # Response includes: households[0].id
17
+ ```
18
+ GET /api/v1/households/current
18
19
  ```
19
20
 
20
21
  ## Endpoints
@@ -31,7 +32,7 @@ Returns the full grocery list for the household.
31
32
 
32
33
  | Field | Type | Description |
33
34
  |-------|------|-------------|
34
- | `householdId` | UUID | Household identifier |
35
+ | `success` | boolean | Operation success |
35
36
  | `items` | object[] | Array of list items |
36
37
  | `items[].id` | UUID | Item identifier |
37
38
  | `items[].name` | string | Item name |
@@ -40,19 +41,22 @@ Returns the full grocery list for the household.
40
41
  | `items[].notes` | string | Additional notes (nullable) |
41
42
  | `items[].checked` | boolean | Whether the item has been picked up |
42
43
  | `items[].addedAt` | datetime | When the item was added |
43
- | `items[].addedBy` | string | Name of the user who added the item |
44
- | `categories` | string[] | All distinct categories in the list |
45
- | `lastModified` | datetime | Last modification timestamp |
44
+ | `items[].addedBy` | number | User ID who added the item |
45
+ | `items[].addedByName` | string | Name of the user who added the item (nullable) |
46
+ | `items[].position` | number | Sort position |
47
+ | `items[].householdId` | UUID | Household ID |
48
+ | `items[].createdAt` | datetime | Creation timestamp |
49
+ | `items[].updatedAt` | datetime | Last update timestamp |
46
50
 
47
51
  ```bash
48
52
  curl -H "X-API-KEY: $MYN_API_KEY" \
49
- "$MYN_API_URL/api/v1/households/880e8400-e29b-41d4-a716-446655440003/grocery-list"
53
+ "$MYN_API_URL/api/v1/households/HOUSEHOLD_ID/grocery-list"
50
54
  ```
51
55
 
52
56
  ### Add Item
53
57
 
54
58
  ```
55
- POST /api/v1/households/{householdId}/grocery-list/items
59
+ POST /api/v1/households/{householdId}/grocery-list
56
60
  ```
57
61
 
58
62
  **Body Parameters:**
@@ -64,15 +68,10 @@ POST /api/v1/households/{householdId}/grocery-list/items
64
68
  | `quantity` | string | Optional quantity (e.g., `2 lbs`, `1 gallon`) |
65
69
  | `notes` | string | Optional notes |
66
70
 
67
- **Response Fields:**
68
-
69
- | Field | Type | Description |
70
- |-------|------|-------------|
71
- | `itemId` | UUID | New item identifier |
72
- | `added` | boolean | Whether the item was successfully added |
71
+ **Response:** `{ success, item: { id, name, category?, quantity?, notes?, checked, addedAt, addedByName? } }`
73
72
 
74
73
  ```bash
75
- curl -X POST "$MYN_API_URL/api/v1/households/880e8400-e29b-41d4-a716-446655440003/grocery-list/items" \
74
+ curl -X POST "$MYN_API_URL/api/v1/households/HOUSEHOLD_ID/grocery-list" \
76
75
  -H "X-API-KEY: $MYN_API_KEY" \
77
76
  -H "Content-Type: application/json" \
78
77
  -d '{
@@ -83,37 +82,83 @@ curl -X POST "$MYN_API_URL/api/v1/households/880e8400-e29b-41d4-a716-44665544000
83
82
  }'
84
83
  ```
85
84
 
86
- ### Toggle Item Checked
85
+ ### Update Item
87
86
 
88
87
  ```
89
- PATCH /api/v1/households/{householdId}/grocery-list/items/{itemId}
88
+ PATCH /api/v1/households/{householdId}/grocery-list/{itemId}
90
89
  ```
91
90
 
91
+ Updates an existing grocery list item. At least one field is required.
92
+
92
93
  **Body Parameters:**
93
94
 
94
95
  | Field | Type | Description |
95
96
  |-------|------|-------------|
96
- | `checked` | boolean | Set checked state (toggles if omitted by some clients) |
97
+ | `name` | string | New item name |
98
+ | `category` | string | New category |
99
+ | `quantity` | string | New quantity |
100
+ | `notes` | string | New notes |
97
101
 
98
- **Response Fields:**
102
+ **Response:** `{ success, item: { id, name, category?, quantity?, notes?, checked } }`
99
103
 
100
- | Field | Type | Description |
101
- |-------|------|-------------|
102
- | `itemId` | UUID | Item identifier |
103
- | `checked` | boolean | New checked state |
104
+ ```bash
105
+ curl -X PATCH "$MYN_API_URL/api/v1/households/HOUSEHOLD_ID/grocery-list/ITEM_ID" \
106
+ -H "X-API-KEY: $MYN_API_KEY" \
107
+ -H "Content-Type: application/json" \
108
+ -d '{"quantity": "6", "notes": "Updated quantity"}'
109
+ ```
110
+
111
+ ### Toggle Item Checked
112
+
113
+ ```
114
+ PATCH /api/v1/households/{householdId}/grocery-list/{itemId}/toggle
115
+ ```
116
+
117
+ Toggles the checked state of a grocery list item.
118
+
119
+ **Response:** `{ success, item: { id, name, checked }, checked }`
104
120
 
105
121
  ```bash
106
- # Mark an item as picked up
107
- curl -X PATCH "$MYN_API_URL/api/v1/households/880e8400-e29b-41d4-a716-446655440003/grocery-list/items/990e8400-e29b-41d4-a716-446655440004" \
122
+ curl -X PATCH "$MYN_API_URL/api/v1/households/HOUSEHOLD_ID/grocery-list/ITEM_ID/toggle" \
108
123
  -H "X-API-KEY: $MYN_API_KEY" \
109
124
  -H "Content-Type: application/json" \
110
- -d '{"checked": true}'
125
+ -d '{}'
126
+ ```
127
+
128
+ ### Delete Item
129
+
130
+ ```
131
+ DELETE /api/v1/households/{householdId}/grocery-list/{itemId}
132
+ ```
133
+
134
+ Deletes a single grocery list item.
135
+
136
+ **Response:** `{ success, deleted }`
137
+
138
+ ```bash
139
+ curl -X DELETE "$MYN_API_URL/api/v1/households/HOUSEHOLD_ID/grocery-list/ITEM_ID" \
140
+ -H "X-API-KEY: $MYN_API_KEY"
141
+ ```
142
+
143
+ ### Delete Checked Items
144
+
145
+ ```
146
+ DELETE /api/v1/households/{householdId}/grocery-list/checked
147
+ ```
148
+
149
+ Deletes all checked (completed) items from the grocery list.
150
+
151
+ **Response:** `{ success, deletedCount, undoAvailable }`
152
+
153
+ ```bash
154
+ curl -X DELETE "$MYN_API_URL/api/v1/households/HOUSEHOLD_ID/grocery-list/checked" \
155
+ -H "X-API-KEY: $MYN_API_KEY"
111
156
  ```
112
157
 
113
158
  ### Bulk Add Items
114
159
 
115
160
  ```
116
- POST /api/v1/households/{householdId}/grocery-list/items/bulk
161
+ POST /api/v1/households/{householdId}/grocery-list/bulk
117
162
  ```
118
163
 
119
164
  **Body Parameters:**
@@ -125,15 +170,10 @@ POST /api/v1/households/{householdId}/grocery-list/items/bulk
125
170
  | `items[].category` | string | Optional category |
126
171
  | `items[].quantity` | string | Optional quantity |
127
172
 
128
- **Response Fields:**
129
-
130
- | Field | Type | Description |
131
- |-------|------|-------------|
132
- | `addedCount` | number | Number of items added |
133
- | `itemIds` | UUID[] | IDs of the newly created items |
173
+ **Response:** `{ success, items: [{ id, name, category?, quantity?, checked }], count }`
134
174
 
135
175
  ```bash
136
- curl -X POST "$MYN_API_URL/api/v1/households/880e8400-e29b-41d4-a716-446655440003/grocery-list/items/bulk" \
176
+ curl -X POST "$MYN_API_URL/api/v1/households/HOUSEHOLD_ID/grocery-list/bulk" \
137
177
  -H "X-API-KEY: $MYN_API_KEY" \
138
178
  -H "Content-Type: application/json" \
139
179
  -d '{
@@ -161,16 +201,10 @@ Converts grocery list items into MYN tasks (e.g., for a shopping trip).
161
201
  | `uncheckedOnly` | boolean | Only convert unchecked items (default: true) |
162
202
  | `priority` | string | Priority for created tasks (e.g., `OPPORTUNITY_NOW`) |
163
203
 
164
- **Response Fields:**
165
-
166
- | Field | Type | Description |
167
- |-------|------|-------------|
168
- | `convertedCount` | number | Number of items converted to tasks |
169
- | `taskIds` | UUID[] | IDs of the created tasks |
204
+ **Response:** `{ success, tasks: [{ id, title }], count }`
170
205
 
171
206
  ```bash
172
- # Convert unchecked items to Opportunity Now tasks
173
- curl -X POST "$MYN_API_URL/api/v1/households/880e8400-e29b-41d4-a716-446655440003/grocery-list/convert-to-tasks" \
207
+ curl -X POST "$MYN_API_URL/api/v1/households/HOUSEHOLD_ID/grocery-list/convert-to-tasks" \
174
208
  -H "X-API-KEY: $MYN_API_KEY" \
175
209
  -H "Content-Type: application/json" \
176
210
  -d '{
@@ -2,63 +2,79 @@
2
2
 
3
3
  Agent memory for storing and retrieving contextual information about users.
4
4
 
5
- ## Base Path
6
-
7
- `/api/v1/customers/memories`
8
-
9
5
  ## Endpoints
10
6
 
11
7
  ### Remember (Store Memory)
12
8
 
13
9
  ```
14
- POST /api/v1/customers/memories
10
+ POST /api/v1/agent/memories
15
11
  ```
16
12
 
17
13
  **Body:**
18
14
 
19
15
  | Field | Type | Required | Description |
20
16
  |-------|------|----------|-------------|
21
- | `content` | string | Yes | Memory content to store |
22
- | `category` | string | No | `user_preference`, `work_context`, `personal_info`, `decision`, `insight`, `routine` |
23
- | `tags` | string[] | No | Tags for categorization |
24
- | `importance` | string | No | `low`, `medium`, `high`, `critical` |
25
- | `expiresAt` | datetime | No | Optional expiration date (ISO 8601) |
26
-
27
- **Response:** `{ memoryId, stored, createdAt }`
17
+ | `content` | string | Yes | Memory content to store (max 500 chars) |
18
+ | `type` | string | No | `PREFERENCE`, `PATTERN`, `STYLE`, `MYN_BEHAVIOR`, `PERSONAL`, `RELATIONSHIP` |
19
+
20
+ **Note:** The tool accepts `category` as the input parameter name, but sends it as the `type` field in the request body.
21
+
22
+ **Response:**
23
+
24
+ ```json
25
+ {
26
+ "id": "uuid",
27
+ "type": "PREFERENCE",
28
+ "content": "User prefers morning meetings before 10am",
29
+ "confidence": 0.95,
30
+ "duplicate": false,
31
+ "message": "Memory stored successfully"
32
+ }
33
+ ```
28
34
 
29
35
  ```bash
30
- curl -X POST "$MYN_API_URL/api/v1/customers/memories" \
36
+ curl -X POST "$MYN_API_URL/api/v1/agent/memories" \
31
37
  -H "X-API-KEY: $MYN_API_KEY" \
32
38
  -H "Content-Type: application/json" \
33
39
  -d '{
34
40
  "content": "User prefers morning meetings before 10am",
35
- "category": "user_preference",
36
- "tags": ["meetings", "preferences"],
37
- "importance": "medium"
41
+ "type": "PREFERENCE"
38
42
  }'
39
43
  ```
40
44
 
41
45
  ### Recall (Get Memories)
42
46
 
43
47
  ```
44
- GET /api/v1/customers/memories
45
- GET /api/v1/customers/memories/{memoryId}
48
+ GET /api/v1/customers/memories?limit=50
46
49
  ```
47
50
 
48
- Get recent memories (default limit 10) or a specific memory by ID.
51
+ Returns all memories (up to 50). Optionally filter client-side by `memoryId`.
49
52
 
50
- **Response (specific):** `{ memoryId, content, category, tags[], importance, createdAt, accessedAt, accessCount, expiresAt? }`
53
+ **Query Parameters:**
51
54
 
52
- **Response (list):** `{ memories[{ memoryId, content, category, tags[], importance, createdAt, accessedAt? }] }`
55
+ | Parameter | Type | Description |
56
+ |-----------|------|-------------|
57
+ | `limit` | number | Max results (default: 50) |
58
+
59
+ **Response:** Array of memory objects:
60
+
61
+ ```json
62
+ [
63
+ {
64
+ "memoryId": "uuid",
65
+ "content": "User prefers morning meetings",
66
+ "category": "PREFERENCE",
67
+ "tags": [],
68
+ "importance": "medium",
69
+ "createdAt": "2026-03-01T00:00:00Z",
70
+ "accessedAt": "2026-03-09T10:00:00Z"
71
+ }
72
+ ]
73
+ ```
53
74
 
54
75
  ```bash
55
- # Get recent memories
56
- curl -H "X-API-KEY: $MYN_API_KEY" \
57
- "$MYN_API_URL/api/v1/customers/memories?limit=10"
58
-
59
- # Get specific memory
60
76
  curl -H "X-API-KEY: $MYN_API_KEY" \
61
- "$MYN_API_URL/api/v1/customers/memories/aabb0000-0000-0000-0000-000000000001"
77
+ "$MYN_API_URL/api/v1/customers/memories?limit=50"
62
78
  ```
63
79
 
64
80
  ### Forget (Delete Memory)
@@ -68,28 +84,44 @@ DELETE /api/v1/customers/memories/{memoryId}
68
84
  ```
69
85
 
70
86
  ```bash
71
- curl -X DELETE "$MYN_API_URL/api/v1/customers/memories/aabb0000-0000-0000-0000-000000000001" \
87
+ curl -X DELETE "$MYN_API_URL/api/v1/customers/memories/MEMORY_ID" \
72
88
  -H "X-API-KEY: $MYN_API_KEY"
73
89
  ```
74
90
 
75
91
  ### Search Memories
76
92
 
77
93
  ```
78
- GET /api/v1/customers/memories/search
94
+ GET /api/v1/agent/memories/search
79
95
  ```
80
96
 
97
+ Semantic search across agent memories.
98
+
81
99
  **Query Parameters:**
82
100
 
83
101
  | Parameter | Type | Description |
84
102
  |-----------|------|-------------|
85
- | `q` | string | Search query |
86
- | `category` | string | Filter by category |
87
- | `tag` | string | Filter by tag (repeatable for multiple tags) |
103
+ | `query` | string | **Required.** Search query |
88
104
  | `limit` | number | Max results (default: 10) |
89
105
 
90
- **Response:** `{ results[{ memoryId, content, category, tags[], importance, relevance, createdAt }], total }`
106
+ **Response:**
107
+
108
+ ```json
109
+ {
110
+ "results": [
111
+ {
112
+ "id": "uuid",
113
+ "type": "PREFERENCE",
114
+ "content": "User prefers morning meetings",
115
+ "confidence": 0.95,
116
+ "createdAt": "2026-03-01T00:00:00Z",
117
+ "topics": ["meetings", "scheduling"]
118
+ }
119
+ ],
120
+ "total": 1
121
+ }
122
+ ```
91
123
 
92
124
  ```bash
93
125
  curl -H "X-API-KEY: $MYN_API_KEY" \
94
- "$MYN_API_URL/api/v1/customers/memories/search?q=meeting+preference&category=user_preference&limit=5"
126
+ "$MYN_API_URL/api/v1/agent/memories/search?query=meeting+preference&limit=5"
95
127
  ```
@@ -4,188 +4,91 @@ AI-powered planning, auto-scheduling, and rescheduling.
4
4
 
5
5
  ## Base Path
6
6
 
7
- `/api/schedules`
7
+ `/planning`
8
+
9
+ ## Actions
10
+
11
+ The `myn_planning` tool supports these actions: `plan`, `schedule_all`, `reschedule`.
8
12
 
9
13
  ## Endpoints
10
14
 
11
- ### Create Plan
15
+ ### Plan (Trigger AI Planning)
12
16
 
13
17
  ```
14
- POST /api/schedules/plan
18
+ GET /planning/plan
15
19
  ```
16
20
 
17
- Generate an AI plan for a goal or set of tasks.
18
-
19
- **Body:**
20
-
21
- | Field | Type | Required | Description |
22
- |-------|------|----------|-------------|
23
- | `goal` | string | Yes* | What you want to accomplish |
24
- | `tasks` | array | Yes* | Tasks to plan (alternative to goal) |
25
- | `tasks[].title` | string | Yes | Task title |
26
- | `tasks[].estimatedDuration` | number | No | Duration in minutes |
27
- | `tasks[].dependsOn` | string[] | No | Task titles this depends on |
28
- | `tasks[].fixedTime` | datetime | No | Fixed time slot |
29
- | `constraints` | object | No | Planning constraints |
30
- | `constraints.availableHours` | number | No | Available hours |
31
- | `constraints.preferredTimes` | string[] | No | Preferred time slots |
32
- | `constraints.avoidTimes` | string[] | No | Times to avoid |
33
- | `constraints.deadline` | datetime | No | Hard deadline |
34
- | `constraints.priority` | string | No | `CRITICAL`, `OPPORTUNITY_NOW`, `OVER_THE_HORIZON` |
35
-
36
- *At least one of `goal` or `tasks` is required.
37
-
38
- **Response:**
39
-
40
- ```json
41
- {
42
- "planId": "uuid",
43
- "goal": "Complete Q1 planning",
44
- "estimatedDuration": 240,
45
- "schedule": [
46
- {
47
- "step": 1,
48
- "title": "Review last quarter metrics",
49
- "description": "Pull Q4 data and analyze trends",
50
- "estimatedMinutes": 60,
51
- "suggestedTimeSlot": {
52
- "start": "2026-03-01T09:00:00Z",
53
- "end": "2026-03-01T10:00:00Z"
54
- },
55
- "dependencies": []
56
- }
57
- ],
58
- "conflicts": [
59
- {
60
- "taskTitle": "Team standup",
61
- "reason": "Overlaps with suggested time slot",
62
- "suggestion": "Move to 10:30 AM"
63
- }
64
- ],
65
- "suggestions": ["Consider breaking the budget review into two sessions"],
66
- "createdAt": "2026-03-01T08:00:00Z"
67
- }
68
- ```
21
+ Triggers the AI planning engine to plan/schedule tasks for the current user. The backend handles this automatically based on the authenticated user's tasks -- no request body is needed.
22
+
23
+ **Tool Parameters (accepted but not sent to backend):**
24
+
25
+ | Parameter | Type | Description |
26
+ |-----------|------|-------------|
27
+ | `goal` | string | What you want to accomplish |
28
+ | `constraints` | object | Planning constraints |
29
+ | `constraints.availableHours` | number | Available hours |
30
+ | `constraints.preferredTimes` | string[] | Preferred time slots |
31
+ | `constraints.avoidTimes` | string[] | Times to avoid |
32
+ | `constraints.deadline` | datetime | Hard deadline |
33
+ | `constraints.priority` | string | `CRITICAL`, `OPPORTUNITY_NOW`, `OVER_THE_HORIZON` |
34
+ | `tasks` | array | Tasks to plan |
35
+
36
+ **Response:** String result from the planning engine.
69
37
 
70
38
  ```bash
71
- curl -X POST "$MYN_API_URL/api/schedules/plan" \
72
- -H "X-API-KEY: $MYN_API_KEY" \
73
- -H "Content-Type: application/json" \
74
- -d '{
75
- "goal": "Complete Q1 planning",
76
- "constraints": {
77
- "availableHours": 4,
78
- "deadline": "2026-03-05T17:00:00Z",
79
- "priority": "CRITICAL"
80
- }
81
- }'
39
+ curl -H "X-API-KEY: $MYN_API_KEY" \
40
+ "$MYN_API_URL/planning/plan"
82
41
  ```
83
42
 
84
- ### Auto-Schedule Day
43
+ ### Schedule All
85
44
 
86
45
  ```
87
- POST /api/schedules/auto
46
+ POST /planning/scheduleAll
88
47
  ```
89
48
 
90
- Automatically schedule all unscheduled tasks for a day.
91
-
92
- **Body:**
93
-
94
- | Field | Type | Required | Description |
95
- |-------|------|----------|-------------|
96
- | `date` | date | No | Date to schedule (default: today) |
97
- | `respectExisting` | boolean | No | Keep existing calendar items (default: true) |
98
- | `bufferMinutes` | number | No | Buffer between tasks (default: 15) |
99
-
100
- **Response:**
101
-
102
- ```json
103
- {
104
- "date": "2026-03-01",
105
- "scheduled": [
106
- {
107
- "taskId": "uuid",
108
- "title": "Prepare report",
109
- "scheduledStart": "2026-03-01T09:00:00Z",
110
- "scheduledEnd": "2026-03-01T11:00:00Z",
111
- "priority": "CRITICAL"
112
- }
113
- ],
114
- "unscheduled": [
115
- {
116
- "taskId": "uuid",
117
- "title": "Research competitors",
118
- "reason": "Not enough available time"
119
- }
120
- ],
121
- "conflicts": [
122
- {
123
- "type": "overlap",
124
- "description": "Two critical tasks competing for morning slot",
125
- "tasksInvolved": ["uuid1", "uuid2"]
126
- }
127
- ],
128
- "stats": {
129
- "totalScheduled": 5,
130
- "totalMinutes": 300,
131
- "byPriority": { "CRITICAL": 2, "OPPORTUNITY_NOW": 3 }
132
- }
133
- }
134
- ```
49
+ Auto-schedules all eligible tasks (today or past start date, not completed, not OVER_THE_HORIZON/PARKING_LOT) for the authenticated user, then triggers planning. No request body needed.
50
+
51
+ **Note (MIN-740):** Changed from GET to POST.
135
52
 
136
53
  ```bash
137
- curl -X POST "$MYN_API_URL/api/schedules/auto" \
54
+ curl -X POST "$MYN_API_URL/planning/scheduleAll" \
138
55
  -H "X-API-KEY: $MYN_API_KEY" \
139
56
  -H "Content-Type: application/json" \
140
- -d '{"date": "2026-03-01", "bufferMinutes": 15}'
57
+ -d '{}'
141
58
  ```
142
59
 
143
- ### Reschedule Tasks
60
+ ### Reschedule (Kick the Can)
144
61
 
145
62
  ```
146
- POST /api/schedules/reschedule
63
+ POST /planning/kickTheCan?rebalance={true|false}
147
64
  ```
148
65
 
149
- Move tasks to a different date.
150
-
151
- **Body:**
152
-
153
- | Field | Type | Required | Description |
154
- |-------|------|----------|-------------|
155
- | `taskIds` | UUID[] | Yes | Tasks to reschedule |
156
- | `reason` | string | No | Why rescheduling |
157
- | `targetDate` | date | No | New target date |
158
- | `spreadOverDays` | number | No | Spread across N days (default: 1) |
159
-
160
- **Response:**
161
-
162
- ```json
163
- {
164
- "rescheduled": [
165
- {
166
- "taskId": "uuid",
167
- "title": "Budget review",
168
- "oldDate": "2026-03-01",
169
- "newDate": "2026-03-03"
170
- }
171
- ],
172
- "failed": [
173
- {
174
- "taskId": "uuid",
175
- "reason": "Task is already completed"
176
- }
177
- ],
178
- "suggestions": ["Consider spreading over 2 days to avoid overload"]
179
- }
180
- ```
66
+ Reschedules overdue/today tasks into the future based on priority. Optionally redistributes all uncompleted tasks evenly.
67
+
68
+ **Note (MIN-740):** Changed from GET to POST.
69
+
70
+ **Query Parameters:**
71
+
72
+ | Parameter | Type | Description |
73
+ |-----------|------|-------------|
74
+ | `rebalance` | boolean | If `true`, redistribute all uncompleted tasks evenly (default: false) |
75
+
76
+ **Tool Parameters:**
77
+
78
+ | Parameter | Type | Description |
79
+ |-----------|------|-------------|
80
+ | `spreadOverDays` | number | If > 1, sets `rebalance=true` (default: 1) |
181
81
 
182
82
  ```bash
183
- curl -X POST "$MYN_API_URL/api/schedules/reschedule" \
83
+ # Basic reschedule — defer overdue tasks
84
+ curl -X POST "$MYN_API_URL/planning/kickTheCan?rebalance=false" \
85
+ -H "X-API-KEY: $MYN_API_KEY" \
86
+ -H "Content-Type: application/json" \
87
+ -d '{}'
88
+
89
+ # Rebalance — spread all uncompleted tasks evenly
90
+ curl -X POST "$MYN_API_URL/planning/kickTheCan?rebalance=true" \
184
91
  -H "X-API-KEY: $MYN_API_KEY" \
185
92
  -H "Content-Type: application/json" \
186
- -d '{
187
- "taskIds": ["uuid1", "uuid2"],
188
- "targetDate": "2026-03-05",
189
- "reason": "Meeting overran, no time today"
190
- }'
93
+ -d '{}'
191
94
  ```