crewly 1.20.104 → 1.20.106

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 (54) hide show
  1. package/config/skills/agent/core/todo-add/SKILL.md +64 -0
  2. package/config/skills/agent/core/todo-add/execute.sh +84 -0
  3. package/config/skills/agent/core/todo-add/execute.test.sh +76 -0
  4. package/config/skills/agent/core/todo-lists/SKILL.md +58 -0
  5. package/config/skills/agent/core/todo-lists/execute.sh +70 -0
  6. package/config/skills/agent/core/todo-lists/execute.test.sh +77 -0
  7. package/config/skills/agent/core/todo-tasks/SKILL.md +59 -0
  8. package/config/skills/agent/core/todo-tasks/execute.sh +78 -0
  9. package/config/skills/agent/core/todo-tasks/execute.test.sh +74 -0
  10. package/config/skills/agent/core/todo-update/SKILL.md +63 -0
  11. package/config/skills/agent/core/todo-update/execute.sh +115 -0
  12. package/config/skills/agent/core/todo-update/execute.test.sh +82 -0
  13. package/dist/backend/backend/src/constants.d.ts +65 -0
  14. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  15. package/dist/backend/backend/src/constants.js +65 -0
  16. package/dist/backend/backend/src/constants.js.map +1 -1
  17. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.d.ts +51 -0
  18. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.d.ts.map +1 -0
  19. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.js +223 -0
  20. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.js.map +1 -0
  21. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.d.ts +25 -0
  22. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.d.ts.map +1 -0
  23. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.js +42 -0
  24. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.js.map +1 -0
  25. package/dist/backend/backend/src/index.d.ts.map +1 -1
  26. package/dist/backend/backend/src/index.js +4 -9
  27. package/dist/backend/backend/src/index.js.map +1 -1
  28. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  29. package/dist/backend/backend/src/routes/api.routes.js +3 -0
  30. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  31. package/dist/backend/backend/src/services/agent/restore-filter.d.ts +37 -0
  32. package/dist/backend/backend/src/services/agent/restore-filter.d.ts.map +1 -0
  33. package/dist/backend/backend/src/services/agent/restore-filter.js +48 -0
  34. package/dist/backend/backend/src/services/agent/restore-filter.js.map +1 -0
  35. package/dist/backend/backend/src/services/connector/connector-access.service.d.ts +2 -2
  36. package/dist/backend/backend/src/services/connector/connector-access.service.d.ts.map +1 -1
  37. package/dist/backend/backend/src/services/connector/connector-access.service.js +2 -2
  38. package/dist/backend/backend/src/services/connector/connector-access.service.js.map +1 -1
  39. package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.d.ts +250 -0
  40. package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.d.ts.map +1 -0
  41. package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.js +367 -0
  42. package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.js.map +1 -0
  43. package/dist/backend/backend/src/services/microsoft/microsoft-token.service.d.ts +116 -0
  44. package/dist/backend/backend/src/services/microsoft/microsoft-token.service.d.ts.map +1 -0
  45. package/dist/backend/backend/src/services/microsoft/microsoft-token.service.js +220 -0
  46. package/dist/backend/backend/src/services/microsoft/microsoft-token.service.js.map +1 -0
  47. package/dist/backend/build-info.json +2 -2
  48. package/dist/cli/backend/src/constants.d.ts +65 -0
  49. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  50. package/dist/cli/backend/src/constants.js +65 -0
  51. package/dist/cli/backend/src/constants.js.map +1 -1
  52. package/frontend/dist/assets/{index-1fd45a2a.js → index-488339c1.js} +103 -103
  53. package/frontend/dist/index.html +1 -1
  54. package/package.json +1 -1
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Microsoft To Do controller — `/api/microsoft-todo/*` on this instance.
3
+ *
4
+ * Grant management goes through Cloud (status / connect-url / disconnect);
5
+ * lists and tasks go straight to Microsoft Graph with the token Cloud
6
+ * mints. Backs the todo-* skills.
7
+ *
8
+ * @module controllers/microsoft/microsoft-todo.controller
9
+ */
10
+ import type { Request, Response } from 'express';
11
+ import { MicrosoftTokenService } from '../../services/microsoft/microsoft-token.service.js';
12
+ import { MicrosoftTodoService } from '../../services/microsoft/microsoft-todo.service.js';
13
+ /** The services the handlers use; swappable for tests. */
14
+ export interface MicrosoftTodoControllerDeps {
15
+ tokens: MicrosoftTokenService;
16
+ todo: MicrosoftTodoService;
17
+ }
18
+ /**
19
+ * Replace the dependency set (tests).
20
+ *
21
+ * @param next - Deps or null to rebuild lazily
22
+ */
23
+ export declare function setMicrosoftTodoControllerDeps(next: MicrosoftTodoControllerDeps | null): void;
24
+ /**
25
+ * Answer a failure with `{ success:false, error, message, hint }` (plus
26
+ * `retryAfter` seconds for `rate_limited`).
27
+ *
28
+ * @param req - Request (for the connect URL hint)
29
+ * @param res - Response
30
+ * @param err - The failure
31
+ */
32
+ export declare function sendMicrosoftTodoError(req: Request, res: Response, err: unknown): void;
33
+ /** GET /api/microsoft-todo/status */
34
+ export declare function getStatus(req: Request, res: Response): Promise<void>;
35
+ /** GET /api/microsoft-todo/connect-url — `{ url }` to open in the browser. */
36
+ export declare function getConnectUrl(req: Request, res: Response): Promise<void>;
37
+ /** DELETE /api/microsoft-todo/disconnect */
38
+ export declare function disconnect(req: Request, res: Response): Promise<void>;
39
+ /** GET /api/microsoft-todo/lists */
40
+ export declare function listLists(req: Request, res: Response): Promise<void>;
41
+ /** POST /api/microsoft-todo/lists — `{ name }` */
42
+ export declare function createList(req: Request, res: Response): Promise<void>;
43
+ /** GET /api/microsoft-todo/tasks?list=&all=&limit= */
44
+ export declare function listTasks(req: Request, res: Response): Promise<void>;
45
+ /** POST /api/microsoft-todo/tasks — `{ list?, title, note?, due?, importance? }` */
46
+ export declare function addTask(req: Request, res: Response): Promise<void>;
47
+ /** PATCH /api/microsoft-todo/tasks/:taskId — `{ list?, complete?, title?, note?, due? (null clears), importance? }` */
48
+ export declare function updateTask(req: Request, res: Response): Promise<void>;
49
+ /** DELETE /api/microsoft-todo/tasks/:taskId?list= */
50
+ export declare function deleteTask(req: Request, res: Response): Promise<void>;
51
+ //# sourceMappingURL=microsoft-todo.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"microsoft-todo.controller.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/microsoft/microsoft-todo.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGjD,OAAO,EAAE,qBAAqB,EAAkB,MAAM,qDAAqD,CAAC;AAC5G,OAAO,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAC;AAI1F,0DAA0D;AAC1D,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,qBAAqB,CAAC;IAC9B,IAAI,EAAE,oBAAoB,CAAC;CAC5B;AAYD;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,2BAA2B,GAAG,IAAI,GAAG,IAAI,CAE7F;AAgBD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CA8CtF;AAoBD,qCAAqC;AACrC,wBAAsB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAM1E;AAED,8EAA8E;AAC9E,wBAAsB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAM9E;AAED,4CAA4C;AAC5C,wBAAsB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAM3E;AAED,oCAAoC;AACpC,wBAAsB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAO1E;AAED,kDAAkD;AAClD,wBAAsB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAS3E;AAED,sDAAsD;AACtD,wBAAsB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAO1E;AAED,oFAAoF;AACpF,wBAAsB,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAexE;AAED,uHAAuH;AACvH,wBAAsB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB3E;AAED,qDAAqD;AACrD,wBAAsB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ3E"}
@@ -0,0 +1,223 @@
1
+ /**
2
+ * Microsoft To Do controller — `/api/microsoft-todo/*` on this instance.
3
+ *
4
+ * Grant management goes through Cloud (status / connect-url / disconnect);
5
+ * lists and tasks go straight to Microsoft Graph with the token Cloud
6
+ * mints. Backs the todo-* skills.
7
+ *
8
+ * @module controllers/microsoft/microsoft-todo.controller
9
+ */
10
+ import { MICROSOFT_TODO_CONSTANTS } from '../../constants.js';
11
+ import { LoggerService } from '../../services/core/logger.service.js';
12
+ import { MicrosoftTokenService, MicrosoftError } from '../../services/microsoft/microsoft-token.service.js';
13
+ import { MicrosoftTodoService } from '../../services/microsoft/microsoft-todo.service.js';
14
+ const logger = LoggerService.getInstance().createComponentLogger('MicrosoftTodoController');
15
+ let deps = null;
16
+ function getDeps() {
17
+ if (!deps) {
18
+ const tokens = MicrosoftTokenService.getInstance();
19
+ deps = { tokens, todo: new MicrosoftTodoService({ tokens }) };
20
+ }
21
+ return deps;
22
+ }
23
+ /**
24
+ * Replace the dependency set (tests).
25
+ *
26
+ * @param next - Deps or null to rebuild lazily
27
+ */
28
+ export function setMicrosoftTodoControllerDeps(next) {
29
+ deps = next;
30
+ }
31
+ function resolveReturnUrl(req) {
32
+ const explicit = typeof req.query.returnUrl === 'string' ? req.query.returnUrl : '';
33
+ if (/^https?:\/\//i.test(explicit))
34
+ return explicit;
35
+ return `${req.protocol}://${req.get('host')}${MICROSOFT_TODO_CONSTANTS.SETTINGS_RETURN_PATH}`;
36
+ }
37
+ function connectUrlOrNull(req) {
38
+ try {
39
+ return getDeps().tokens.buildConnectUrl(resolveReturnUrl(req));
40
+ }
41
+ catch {
42
+ return null;
43
+ }
44
+ }
45
+ /**
46
+ * Answer a failure with `{ success:false, error, message, hint }` (plus
47
+ * `retryAfter` seconds for `rate_limited`).
48
+ *
49
+ * @param req - Request (for the connect URL hint)
50
+ * @param res - Response
51
+ * @param err - The failure
52
+ */
53
+ export function sendMicrosoftTodoError(req, res, err) {
54
+ const CODES = MICROSOFT_TODO_CONSTANTS.ERROR_CODES;
55
+ if (err instanceof MicrosoftError) {
56
+ let hint;
57
+ switch (err.code) {
58
+ case CODES.NOT_CONNECTED:
59
+ hint = connectUrlOrNull(req) ?? 'Sign in to Crewly Cloud (Settings → Cloud), then connect Microsoft To Do under Connections.';
60
+ break;
61
+ case CODES.NOT_LOGGED_IN:
62
+ hint = 'Sign in to Crewly Cloud first (Settings → Cloud).';
63
+ break;
64
+ case CODES.NOT_CONFIGURED:
65
+ hint = 'Crewly Cloud is not configured for Microsoft yet; nothing to do on this instance.';
66
+ break;
67
+ case CODES.VALIDATION:
68
+ hint = 'Fix the request and retry.';
69
+ break;
70
+ case CODES.NOT_FOUND:
71
+ hint = 'Check the list name (todo-lists shows them) or the task id (todo-tasks shows them).';
72
+ break;
73
+ case CODES.FORBIDDEN:
74
+ hint =
75
+ 'Microsoft refused access. To Do needs an Exchange Online mailbox: personal Microsoft accounts work; a work/school account needs a mailbox licence, and some organisations require admin consent.';
76
+ break;
77
+ case CODES.RATE_LIMITED:
78
+ hint = `Microsoft is throttling; wait ${err.retryAfterSeconds ?? 'a few'} seconds and retry.`;
79
+ break;
80
+ case CODES.UNAUTHORIZED:
81
+ hint = 'Microsoft rejected the token twice; reconnect Microsoft To Do under Connections if this persists.';
82
+ break;
83
+ default:
84
+ hint = 'Microsoft Graph or Crewly Cloud failed; retry later.';
85
+ }
86
+ if (err.retryAfterSeconds !== undefined)
87
+ res.setHeader('Retry-After', String(err.retryAfterSeconds));
88
+ res.status(err.status).json({
89
+ success: false,
90
+ error: err.code,
91
+ message: err.message,
92
+ hint,
93
+ ...(err.retryAfterSeconds !== undefined ? { retryAfter: err.retryAfterSeconds } : {}),
94
+ });
95
+ return;
96
+ }
97
+ const message = err instanceof Error ? err.message : String(err);
98
+ logger.error('Unexpected Microsoft To Do failure', { error: message });
99
+ res.status(500).json({ success: false, error: 'internal', message, hint: 'Check the backend log.' });
100
+ }
101
+ function q(req, name) {
102
+ const v = req.query[name];
103
+ return typeof v === 'string' ? v.trim() : '';
104
+ }
105
+ function qInt(req, name) {
106
+ const v = q(req, name);
107
+ return v ? Number.parseInt(v, 10) : undefined;
108
+ }
109
+ function qBool(req, name) {
110
+ return ['1', 'true', 'yes'].includes(q(req, name).toLowerCase());
111
+ }
112
+ function str(value) {
113
+ return typeof value === 'string' ? value : undefined;
114
+ }
115
+ /** GET /api/microsoft-todo/status */
116
+ export async function getStatus(req, res) {
117
+ try {
118
+ res.json({ success: true, data: await getDeps().tokens.status() });
119
+ }
120
+ catch (err) {
121
+ sendMicrosoftTodoError(req, res, err);
122
+ }
123
+ }
124
+ /** GET /api/microsoft-todo/connect-url — `{ url }` to open in the browser. */
125
+ export async function getConnectUrl(req, res) {
126
+ try {
127
+ res.json({ success: true, data: { url: getDeps().tokens.buildConnectUrl(resolveReturnUrl(req)) } });
128
+ }
129
+ catch (err) {
130
+ sendMicrosoftTodoError(req, res, err);
131
+ }
132
+ }
133
+ /** DELETE /api/microsoft-todo/disconnect */
134
+ export async function disconnect(req, res) {
135
+ try {
136
+ res.json({ success: true, data: await getDeps().tokens.disconnect() });
137
+ }
138
+ catch (err) {
139
+ sendMicrosoftTodoError(req, res, err);
140
+ }
141
+ }
142
+ /** GET /api/microsoft-todo/lists */
143
+ export async function listLists(req, res) {
144
+ try {
145
+ const lists = await getDeps().todo.listLists();
146
+ res.json({ success: true, data: { count: lists.length, lists } });
147
+ }
148
+ catch (err) {
149
+ sendMicrosoftTodoError(req, res, err);
150
+ }
151
+ }
152
+ /** POST /api/microsoft-todo/lists — `{ name }` */
153
+ export async function createList(req, res) {
154
+ try {
155
+ const body = (req.body ?? {});
156
+ const list = await getDeps().todo.createList(str(body.name) ?? str(body.displayName) ?? '');
157
+ logger.info('To Do list created', { id: list.id, name: list.name });
158
+ res.json({ success: true, data: list });
159
+ }
160
+ catch (err) {
161
+ sendMicrosoftTodoError(req, res, err);
162
+ }
163
+ }
164
+ /** GET /api/microsoft-todo/tasks?list=&all=&limit= */
165
+ export async function listTasks(req, res) {
166
+ try {
167
+ const out = await getDeps().todo.listTasks({ list: q(req, 'list') || undefined, includeCompleted: qBool(req, 'all'), limit: qInt(req, 'limit') });
168
+ res.json({ success: true, data: { list: out.list, count: out.tasks.length, tasks: out.tasks, ...(out.hasMore ? { hasMore: true } : {}) } });
169
+ }
170
+ catch (err) {
171
+ sendMicrosoftTodoError(req, res, err);
172
+ }
173
+ }
174
+ /** POST /api/microsoft-todo/tasks — `{ list?, title, note?, due?, importance? }` */
175
+ export async function addTask(req, res) {
176
+ try {
177
+ const body = (req.body ?? {});
178
+ const out = await getDeps().todo.addTask({
179
+ list: str(body.list),
180
+ title: str(body.title) ?? '',
181
+ note: str(body.note),
182
+ due: str(body.due),
183
+ importance: str(body.importance),
184
+ });
185
+ logger.info('To Do task added', { list: out.list.name, id: out.task.id });
186
+ res.json({ success: true, data: out });
187
+ }
188
+ catch (err) {
189
+ sendMicrosoftTodoError(req, res, err);
190
+ }
191
+ }
192
+ /** PATCH /api/microsoft-todo/tasks/:taskId — `{ list?, complete?, title?, note?, due? (null clears), importance? }` */
193
+ export async function updateTask(req, res) {
194
+ try {
195
+ const body = (req.body ?? {});
196
+ const out = await getDeps().todo.updateTask({
197
+ list: str(body.list),
198
+ taskId: String(req.params.taskId ?? ''),
199
+ title: str(body.title),
200
+ note: str(body.note),
201
+ due: body.due === null ? null : str(body.due),
202
+ importance: str(body.importance),
203
+ complete: typeof body.complete === 'boolean' ? body.complete : undefined,
204
+ });
205
+ logger.info('To Do task updated', { list: out.list.name, id: out.task.id, status: out.task.status });
206
+ res.json({ success: true, data: out });
207
+ }
208
+ catch (err) {
209
+ sendMicrosoftTodoError(req, res, err);
210
+ }
211
+ }
212
+ /** DELETE /api/microsoft-todo/tasks/:taskId?list= */
213
+ export async function deleteTask(req, res) {
214
+ try {
215
+ const out = await getDeps().todo.deleteTask(q(req, 'list') || undefined, String(req.params.taskId ?? ''));
216
+ logger.info('To Do task deleted', { list: out.list.name, id: out.taskId });
217
+ res.json({ success: true, data: out });
218
+ }
219
+ catch (err) {
220
+ sendMicrosoftTodoError(req, res, err);
221
+ }
222
+ }
223
+ //# sourceMappingURL=microsoft-todo.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"microsoft-todo.controller.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/microsoft/microsoft-todo.controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Microsoft To Do routes — mounted at `/api/microsoft-todo`.
3
+ *
4
+ * Everything after /disconnect is behind the connector's role allowlist.
5
+ *
6
+ * - GET /status — grant status
7
+ * - GET /connect-url — Cloud consent-start URL
8
+ * - DELETE /disconnect — forget the grant
9
+ * - GET /lists — every task list
10
+ * - POST /lists — { name }
11
+ * - GET /tasks — ?list=<name|id>&all=1&limit=
12
+ * - POST /tasks — { list?, title, note?, due?, importance? }
13
+ * - PATCH /tasks/:taskId — { list?, complete?, title?, note?, due? (null clears), importance? }
14
+ * - DELETE /tasks/:taskId — ?list=<name|id>
15
+ *
16
+ * @module controllers/microsoft/microsoft-todo.routes
17
+ */
18
+ import { Router } from 'express';
19
+ /**
20
+ * Creates the Microsoft To Do router.
21
+ *
22
+ * @returns Express router
23
+ */
24
+ export declare function createMicrosoftTodoRouter(): Router;
25
+ //# sourceMappingURL=microsoft-todo.routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"microsoft-todo.routes.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/microsoft/microsoft-todo.routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAKjC;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAclD"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Microsoft To Do routes — mounted at `/api/microsoft-todo`.
3
+ *
4
+ * Everything after /disconnect is behind the connector's role allowlist.
5
+ *
6
+ * - GET /status — grant status
7
+ * - GET /connect-url — Cloud consent-start URL
8
+ * - DELETE /disconnect — forget the grant
9
+ * - GET /lists — every task list
10
+ * - POST /lists — { name }
11
+ * - GET /tasks — ?list=<name|id>&all=1&limit=
12
+ * - POST /tasks — { list?, title, note?, due?, importance? }
13
+ * - PATCH /tasks/:taskId — { list?, complete?, title?, note?, due? (null clears), importance? }
14
+ * - DELETE /tasks/:taskId — ?list=<name|id>
15
+ *
16
+ * @module controllers/microsoft/microsoft-todo.routes
17
+ */
18
+ import { Router } from 'express';
19
+ import { MICROSOFT_TODO_CONSTANTS } from '../../constants.js';
20
+ import { requireConnectorAccess } from '../connector/connector.controller.js';
21
+ import { getStatus, getConnectUrl, disconnect, listLists, createList, listTasks, addTask, updateTask, deleteTask } from './microsoft-todo.controller.js';
22
+ /**
23
+ * Creates the Microsoft To Do router.
24
+ *
25
+ * @returns Express router
26
+ */
27
+ export function createMicrosoftTodoRouter() {
28
+ const router = Router();
29
+ router.get('/status', getStatus);
30
+ router.get('/connect-url', getConnectUrl);
31
+ router.delete('/disconnect', disconnect);
32
+ // Data routes only — see the note in google.routes.ts.
33
+ router.use(requireConnectorAccess(MICROSOFT_TODO_CONSTANTS.CONNECTOR_ID));
34
+ router.get('/lists', listLists);
35
+ router.post('/lists', createList);
36
+ router.get('/tasks', listTasks);
37
+ router.post('/tasks', addTask);
38
+ router.patch('/tasks/:taskId', updateTask);
39
+ router.delete('/tasks/:taskId', deleteTask);
40
+ return router;
41
+ }
42
+ //# sourceMappingURL=microsoft-todo.routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"microsoft-todo.routes.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/microsoft/microsoft-todo.routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAEzJ;;;;GAIG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACjC,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;IAC1C,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACzC,uDAAuD;IACvD,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC,CAAC;IAC1E,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAChC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAClC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAChC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;IAC3C,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../backend/src/index.ts"],"names":[],"mappings":";AAyCA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAoKjD,qBAAa,YAAY;IACxB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAqE;IACnF,gFAAgF;IAChF,OAAO,CAAC,iBAAiB,CAAC,CAAyD;IAEnF,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,gBAAgB,CAAoB;IAC5C,OAAO,CAAC,uBAAuB,CAA2B;IAC1D,OAAO,CAAC,sBAAsB,CAA0B;IACxD,OAAO,CAAC,4BAA4B,CAAgC;IACpE,OAAO,CAAC,uBAAuB,CAA2B;IAC1D,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,eAAe,CAAmB;IAC1C,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,qBAAqB,CAAyB;IACtD,OAAO,CAAC,wBAAwB,CAA4B;IAC5D,OAAO,CAAC,eAAe,CAAmB;IAC1C,qEAAqE;IACrE,OAAO,CAAC,qBAAqB,CAAsC;IACnE,OAAO,CAAC,sBAAsB,CAAuC;IACrE,OAAO,CAAC,sBAAsB,CAAiD;IAC/E,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,0BAA0B,CAA2C;IAC7E,kGAAkG;IAClG,OAAO,CAAC,sBAAsB,CAAuC;IAGrE,OAAO,CAAC,+BAA+B,CAAgD;IACvF,+FAA+F;IAC/F,OAAO,CAAC,oBAAoB,CAAqC;IACjE,8HAA8H;IAC9H,OAAO,CAAC,0BAA0B,CAA2C;IAC7E,OAAO,CAAC,6BAA6B,CAA8C;IACnF,OAAO,CAAC,wBAAwB,CAAyC;IACzE,OAAO,CAAC,2BAA2B,CAA+B;IAClE,OAAO,CAAC,0BAA0B,CAA8B;IAChE,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,kBAAkB,CAA0C;IAKpE,OAAO,CAAC,aAAa,CAAuE;IAC5F,OAAO,CAAC,gBAAgB,CAET;IAGf,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,wBAAwB,CAA+B;gBAEnD,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC;IAmE3C,OAAO,CAAC,kBAAkB;IA83B1B,OAAO,CAAC,mBAAmB;IAmD3B,OAAO,CAAC,eAAe;IAyKvB,OAAO,CAAC,kBAAkB;IAwBpB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAi2C5B;;;OAGG;YACW,2BAA2B;IAkCzC;;;OAGG;YACW,8BAA8B;IAsB5C;;;OAGG;YACW,gCAAgC;IAsB9C;;;OAGG;YACW,8BAA8B;IAsB5C;;;;OAIG;YACW,8BAA8B;IAuL5C;;;;;OAKG;YACW,iCAAiC;IAyJ/C;;;;OAIG;YACW,2BAA2B;YA0B3B,qBAAqB;IAsBnC;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB;YA6BZ,eAAe;YAoFf,kBAAkB;IAgBhC,OAAO,CAAC,WAAW,CAAK;IAExB,OAAO,CAAC,sBAAsB;IAiD9B,OAAO,CAAC,qBAAqB;IAoC7B;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IA0D1B;;;;;;;;;OASG;IACH;;;;;;;;;;;;;;OAcG;YACW,wBAAwB;IAWtC,OAAO,CAAC,qBAAqB;IAqH7B,OAAO,CAAC,cAAc;IAchB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAqV/B,SAAS,IAAI,aAAa;CAG1B;AAmCD,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../backend/src/index.ts"],"names":[],"mappings":";AAyCA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAqKjD,qBAAa,YAAY;IACxB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAqE;IACnF,gFAAgF;IAChF,OAAO,CAAC,iBAAiB,CAAC,CAAyD;IAEnF,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,gBAAgB,CAAoB;IAC5C,OAAO,CAAC,uBAAuB,CAA2B;IAC1D,OAAO,CAAC,sBAAsB,CAA0B;IACxD,OAAO,CAAC,4BAA4B,CAAgC;IACpE,OAAO,CAAC,uBAAuB,CAA2B;IAC1D,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,eAAe,CAAmB;IAC1C,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,qBAAqB,CAAyB;IACtD,OAAO,CAAC,wBAAwB,CAA4B;IAC5D,OAAO,CAAC,eAAe,CAAmB;IAC1C,qEAAqE;IACrE,OAAO,CAAC,qBAAqB,CAAsC;IACnE,OAAO,CAAC,sBAAsB,CAAuC;IACrE,OAAO,CAAC,sBAAsB,CAAiD;IAC/E,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,0BAA0B,CAA2C;IAC7E,kGAAkG;IAClG,OAAO,CAAC,sBAAsB,CAAuC;IAGrE,OAAO,CAAC,+BAA+B,CAAgD;IACvF,+FAA+F;IAC/F,OAAO,CAAC,oBAAoB,CAAqC;IACjE,8HAA8H;IAC9H,OAAO,CAAC,0BAA0B,CAA2C;IAC7E,OAAO,CAAC,6BAA6B,CAA8C;IACnF,OAAO,CAAC,wBAAwB,CAAyC;IACzE,OAAO,CAAC,2BAA2B,CAA+B;IAClE,OAAO,CAAC,0BAA0B,CAA8B;IAChE,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,kBAAkB,CAA0C;IAKpE,OAAO,CAAC,aAAa,CAAuE;IAC5F,OAAO,CAAC,gBAAgB,CAET;IAGf,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,wBAAwB,CAA+B;gBAEnD,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC;IAmE3C,OAAO,CAAC,kBAAkB;IA83B1B,OAAO,CAAC,mBAAmB;IAmD3B,OAAO,CAAC,eAAe;IAyKvB,OAAO,CAAC,kBAAkB;IAwBpB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAi2C5B;;;OAGG;YACW,2BAA2B;IAkCzC;;;OAGG;YACW,8BAA8B;IAsB5C;;;OAGG;YACW,gCAAgC;IAsB9C;;;OAGG;YACW,8BAA8B;IAsB5C;;;;OAIG;YACW,8BAA8B;IAuL5C;;;;;OAKG;YACW,iCAAiC;IAqJ/C;;;;OAIG;YACW,2BAA2B;YA0B3B,qBAAqB;IAsBnC;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB;YA6BZ,eAAe;YAoFf,kBAAkB;IAgBhC,OAAO,CAAC,WAAW,CAAK;IAExB,OAAO,CAAC,sBAAsB;IAiD9B,OAAO,CAAC,qBAAqB;IAoC7B;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IA0D1B;;;;;;;;;OASG;IACH;;;;;;;;;;;;;;OAcG;YACW,wBAAwB;IAWtC,OAAO,CAAC,qBAAqB;IAqH7B,OAAO,CAAC,cAAc;IAchB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAqV/B,SAAS,IAAI,aAAa;CAG1B;AAmCD,eAAe,YAAY,CAAC"}
@@ -101,6 +101,7 @@ import { FissionGuardService, createFailOpenBudgetChecker } from './services/fis
101
101
  import { BudgetService } from './services/autonomous/budget.service.js';
102
102
  import { setFissionGuardService } from './controllers/fission/fission.controller.js';
103
103
  import { TaskPoolService } from './services/task-pool/task-pool.service.js';
104
+ import { sessionsWithWorkInHand } from './services/agent/restore-filter.js';
104
105
  import { ProjectMemoryService } from './services/memory/project-memory.service.js';
105
106
  import { TaskHistorySubscriber } from './services/memory/task-history.subscriber.js';
106
107
  import { TeamHealthWatchdogService, LiveTeamHealthDataProvider, loadTeamHealthConfig, setTeamHealthWatchdogSingleton, getTeamHealthWatchdogSingleton, } from './services/team-health/index.js';
@@ -2859,20 +2860,14 @@ export class CrewlyServer {
2859
2860
  try {
2860
2861
  const pool = TaskPoolService.getInstance();
2861
2862
  const allItems = await pool.getAllItems();
2862
- const targetedSessions = new Set();
2863
- for (const wi of allItems) {
2864
- if (wi.status === 'done' || wi.status === 'cancelled')
2865
- continue;
2866
- const t = wi.target;
2867
- if (typeof t === 'string' && t.length > 0)
2868
- targetedSessions.add(t);
2869
- }
2863
+ // Work in hand only: active statuses, touched recently (see restore-filter).
2864
+ const targetedSessions = sessionsWithWorkInHand(allItems);
2870
2865
  const filtered = baselineSessions.filter((s) => targetedSessions.has(s.name));
2871
2866
  const skipped = baselineSessions
2872
2867
  .filter((s) => !targetedSessions.has(s.name))
2873
2868
  .map((s) => s.name);
2874
2869
  if (skipped.length > 0) {
2875
- this.logger.info('Skipping auto-restore for sessions with no pending WorkItem (idle agents stay dead until dispatched work arrives)', {
2870
+ this.logger.info('Skipping auto-restore for sessions with no work in hand (idle agents stay down until work or a message wakes them)', {
2876
2871
  skippedCount: skipped.length,
2877
2872
  skipped: skipped.slice(0, 20),
2878
2873
  truncated: skipped.length > 20,