@opentask/taskin-task-server-mcp 0.5.0 → 0.6.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 CHANGED
@@ -97,9 +97,17 @@ console.log('MCP server running');
97
97
 
98
98
  ## MCP Tools
99
99
 
100
- - `list_tasks` - List tasks as JSON, without the markdown body. Filters:
100
+ - `list_tasks` - List tasks as JSON, without the markdown body. Only the open tasks unless a status criterion (`status`, `closed`, `active`) or `all: true` is given; `all` is refused together with `open`, `closed` or `active`
101
101
  - `prioritize_tasks` - Give every task a priority number, once and on purpose
102
- - `list_groups` - List the task groups, each with its id and name
102
+ - `list_groups` - List the task groups, each with its id and name — and its `parentId` when it is nested inside another group
103
+ - `join_group` - Put a task in an existing group. Only offered when the provider has groups
104
+ - `leave_group` - Take a task out of its group. Only offered when the provider has groups
105
+ - `create_group` - Create a group: a `name`, an optional `id` (generated `g-...` when absent) and an optional `parentId` to create it inside an existing group. Groups nest at most four levels deep. Only offered when the provider has groups; a provider with groups but without nesting refuses `parentId` with `NESTING_NOT_SUPPORTED`
106
+ - `nest_group` - Put a group inside another: `groupId` and `parentId`. Its subgroups go along and no task file is written. A missing parent, the group itself, a cycle and more than four levels are refused. Only offered when the provider supports groups inside groups (`IGroupRegistry.setParent`)
107
+ - `unnest_group` - Take a group out of its parent, back to the root: `groupId`. Offered together with `nest_group`
108
+ - `move_group` - Move a whole group, its members together: exactly one of `before` / `after` (a task not in a group, or another group id), `top: true` or `bottom: true`. Only the members are written, and the result carries `changed`. Only offered when the provider has groups
109
+ - `set_difficulty` - Score how hard one task is: a whole `difficulty` from 1 (trivial) to 5 (very hard). Anything else is refused without writing; there is no way to clear a score, a wrong one is corrected by scoring again
110
+ - `set_priority` - Place one task: exactly one of `priority` (absolute, lower comes first), `before` or `after` another task id, `top: true` or `bottom: true` (a grouped task goes to the top or bottom of its own group). The result carries `changed`, the number of task files written
103
111
  `status`, `type`, `assignee`, `open`, `closed`, `text`
104
112
  - `start_task` - Start working on a task
105
113
  - `finish_task` - Mark task as complete
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agrupar-priorizar.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agrupar-priorizar.test.d.ts","sourceRoot":"","sources":["../src/agrupar-priorizar.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,274 @@
1
+ import { TaskManager } from '@opentask/taskin-task-manager';
2
+ import { parseGroupId, parseTaskId } from '@opentask/taskin-types';
3
+ import { describe, expect, it } from 'vitest';
4
+ import { TaskMCPServer } from './task-server-mcp.js';
5
+ const tarefa = (id, extra = {}) => ({ id: parseTaskId(id), title: `Tarefa ${id}`, status: 'pending', type: 'feat', ...extra });
6
+ const CLI = { id: parseGroupId('g-cli'), name: 'CLI' };
7
+ /**
8
+ * Um manager de verdade sobre um provider em memoria: o que se testa aqui e o
9
+ * servidor falando com o dominio, e nao um manager inventado para o teste.
10
+ */
11
+ function montar(tarefas, grupos) {
12
+ const porId = new Map(tarefas.map((t) => [String(t.id), t]));
13
+ const registro = grupos && {
14
+ listGroups: async () => grupos,
15
+ findGroup: async (id) => grupos.find((g) => g.id === id),
16
+ createGroup: async () => { },
17
+ renameGroup: async () => { },
18
+ deleteGroup: async () => ({ reassigned: 0 }),
19
+ };
20
+ const provider = {
21
+ initialize: async () => { },
22
+ findTask: async (id) => porId.get(String(id)),
23
+ getAllTasks: async () => [...porId.values()],
24
+ updateTask: async (t) => {
25
+ porId.set(String(t.id), t);
26
+ },
27
+ createTask: async () => {
28
+ throw new Error('nao usado');
29
+ },
30
+ lint: async () => ({ valid: true, issues: [], errorCount: 0, warningCount: 0, infoCount: 0 }),
31
+ ...(registro && { groupRegistry: registro }),
32
+ };
33
+ return { servidor: new TaskMCPServer({ taskManager: new TaskManager(provider) }), porId };
34
+ }
35
+ const texto = (r) => r.content[0]?.text ?? '';
36
+ const nomes = (s) => s.listTools().tools.map((t) => t.name);
37
+ /**
38
+ * Um agente que fala MCP precisa conseguir organizar a fila que ele mesmo
39
+ * executa (task-105). Antes havia `list_groups` e `prioritize_tasks`, e nada
40
+ * que movesse uma tarefa para um grupo ou lhe desse um numero.
41
+ */
42
+ describe('agrupar por MCP', () => {
43
+ it('join_group poe a tarefa no grupo', async () => {
44
+ const { servidor, porId } = montar([tarefa('001')], [CLI]);
45
+ const r = await servidor.callTool({ name: 'join_group', arguments: { taskId: '001', groupId: 'g-cli' } });
46
+ expect(r.isError).toBeFalsy();
47
+ expect(porId.get('001')?.groupId).toBe('g-cli');
48
+ expect(JSON.parse(texto(r)).task.groupId).toBe('g-cli');
49
+ });
50
+ it('leave_group tira a tarefa do grupo', async () => {
51
+ const { servidor, porId } = montar([tarefa('001', { groupId: CLI.id })], [CLI]);
52
+ const r = await servidor.callTool({ name: 'leave_group', arguments: { taskId: '001' } });
53
+ expect(r.isError).toBeFalsy();
54
+ expect(porId.get('001')?.groupId).toBeUndefined();
55
+ });
56
+ it('recusa um grupo que nao existe, dizendo qual', async () => {
57
+ const { servidor } = montar([tarefa('001')], [CLI]);
58
+ const r = await servidor.callTool({ name: 'join_group', arguments: { taskId: '001', groupId: 'g-sumiu' } });
59
+ expect(r.isError).toBe(true);
60
+ expect(texto(r)).toContain('g-sumiu');
61
+ });
62
+ it('recusa uma tarefa que nao existe', async () => {
63
+ const { servidor } = montar([tarefa('001')], [CLI]);
64
+ const r = await servidor.callTool({ name: 'join_group', arguments: { taskId: '999', groupId: 'g-cli' } });
65
+ expect(r.isError).toBe(true);
66
+ expect(texto(r)).toContain('999');
67
+ });
68
+ /*
69
+ * A capacidade e opcional (task-079): quem nao tem nao anuncia. E quem chama
70
+ * mesmo assim recebe uma frase, e nao um erro torto.
71
+ */
72
+ it('um provider sem grupos nao anuncia as ferramentas, e recusa em uma frase', async () => {
73
+ const { servidor } = montar([tarefa('001')]);
74
+ expect(nomes(servidor)).not.toContain('join_group');
75
+ expect(nomes(servidor)).not.toContain('leave_group');
76
+ const r = await servidor.callTool({ name: 'join_group', arguments: { taskId: '001', groupId: 'g-cli' } });
77
+ expect(r.isError).toBe(true);
78
+ expect(texto(r)).toContain('does not support task groups');
79
+ });
80
+ it('com grupos, anuncia as duas', () => {
81
+ const { servidor } = montar([tarefa('001')], [CLI]);
82
+ expect(nomes(servidor)).toEqual(expect.arrayContaining(['join_group', 'leave_group']));
83
+ });
84
+ });
85
+ describe('priorizar por MCP', () => {
86
+ it('set_priority com numero grava o numero', async () => {
87
+ const { servidor, porId } = montar([tarefa('001')]);
88
+ const r = await servidor.callTool({ name: 'set_priority', arguments: { taskId: '001', priority: 42 } });
89
+ expect(r.isError).toBeFalsy();
90
+ expect(porId.get('001')?.order).toBe(42);
91
+ });
92
+ it('set_priority com before poe a tarefa na frente da referencia', async () => {
93
+ const { servidor, porId } = montar([tarefa('001', { order: 100 }), tarefa('002', { order: 200 })]);
94
+ const r = await servidor.callTool({ name: 'set_priority', arguments: { taskId: '002', before: '001' } });
95
+ expect(r.isError).toBeFalsy();
96
+ expect(porId.get('002')?.order).toBeLessThan(100);
97
+ expect(JSON.parse(texto(r)).changed).toBe(1);
98
+ });
99
+ it('set_priority com after poe a tarefa atras da referencia', async () => {
100
+ const { servidor, porId } = montar([tarefa('001', { order: 100 }), tarefa('002', { order: 200 })]);
101
+ await servidor.callTool({ name: 'set_priority', arguments: { taskId: '001', after: '002' } });
102
+ expect(porId.get('001')?.order).toBeGreaterThan(200);
103
+ });
104
+ it('recusa prioridade fora da faixa', async () => {
105
+ const { servidor, porId } = montar([tarefa('001')]);
106
+ const r = await servidor.callTool({ name: 'set_priority', arguments: { taskId: '001', priority: 0 } });
107
+ expect(r.isError).toBe(true);
108
+ expect(texto(r)).toContain('whole number from 1');
109
+ expect(porId.get('001')?.order).toBeUndefined();
110
+ });
111
+ it('exige exatamente uma forma: priority, before ou after', async () => {
112
+ const { servidor } = montar([tarefa('001'), tarefa('002')]);
113
+ const nenhuma = await servidor.callTool({ name: 'set_priority', arguments: { taskId: '001' } });
114
+ const duas = await servidor.callTool({
115
+ name: 'set_priority',
116
+ arguments: { taskId: '001', priority: 5, before: '002' },
117
+ });
118
+ expect(nenhuma.isError).toBe(true);
119
+ expect(duas.isError).toBe(true);
120
+ expect(texto(duas)).toContain('exactly one');
121
+ });
122
+ it('set_priority com top leva a tarefa a frente da fila, e diz quantas gravou', async () => {
123
+ const { servidor, porId } = montar([tarefa('001', { order: 100 }), tarefa('002', { order: 200 })]);
124
+ const r = await servidor.callTool({ name: 'set_priority', arguments: { taskId: '002', top: true } });
125
+ expect(r.isError).toBeFalsy();
126
+ expect(porId.get('002')?.order).toBeLessThan(100);
127
+ expect(JSON.parse(texto(r)).changed).toBe(1);
128
+ });
129
+ it('set_priority com bottom numera a cauda sem numero, e diz quantas gravou', async () => {
130
+ const { servidor, porId } = montar([
131
+ tarefa('001', { order: 100 }),
132
+ tarefa('002', { order: 200 }),
133
+ tarefa('003'),
134
+ tarefa('004'),
135
+ ]);
136
+ const r = await servidor.callTool({ name: 'set_priority', arguments: { taskId: '001', bottom: true } });
137
+ expect(JSON.parse(texto(r)).changed).toBe(3);
138
+ expect(porId.get('001')?.order).toBeGreaterThan(porId.get('004')?.order ?? Number.POSITIVE_INFINITY);
139
+ });
140
+ it('top e bottom contam como forma: nao combinam com outra', async () => {
141
+ const { servidor, porId } = montar([tarefa('001', { order: 100 }), tarefa('002', { order: 200 })]);
142
+ const r = await servidor.callTool({
143
+ name: 'set_priority',
144
+ arguments: { taskId: '002', top: true, after: '001' },
145
+ });
146
+ expect(r.isError).toBe(true);
147
+ expect(texto(r)).toContain('exactly one');
148
+ expect(porId.get('002')?.order).toBe(200);
149
+ });
150
+ it('top ou bottom que nao seja true e recusado, sem gravar', async () => {
151
+ const { servidor, porId } = montar([tarefa('001', { order: 100 }), tarefa('002', { order: 200 })]);
152
+ const r = await servidor.callTool({ name: 'set_priority', arguments: { taskId: '002', top: 'yes' } });
153
+ expect(r.isError).toBe(true);
154
+ expect(texto(r)).toContain('`top`');
155
+ expect(porId.get('002')?.order).toBe(200);
156
+ });
157
+ it('set_priority e anunciado mesmo sem grupos', () => {
158
+ expect(nomes(montar([]).servidor)).toContain('set_priority');
159
+ });
160
+ });
161
+ /**
162
+ * Pontuar por MCP (task-115): o agente que chega na fila do `unscored` consegue
163
+ * pontuar o que encontra.
164
+ */
165
+ describe('pontuar por MCP', () => {
166
+ it('set_difficulty grava a dificuldade e a devolve', async () => {
167
+ const { servidor, porId } = montar([tarefa('001')]);
168
+ const r = await servidor.callTool({ name: 'set_difficulty', arguments: { taskId: '001', difficulty: 4 } });
169
+ expect(r.isError).toBeFalsy();
170
+ expect(porId.get('001')?.difficulty).toBe(4);
171
+ expect(JSON.parse(texto(r)).task.difficulty).toBe(4);
172
+ });
173
+ it('a tarefa pontuada sai do unscored', async () => {
174
+ const { servidor } = montar([tarefa('001'), tarefa('002')]);
175
+ await servidor.callTool({ name: 'set_difficulty', arguments: { taskId: '001', difficulty: 2 } });
176
+ const r = await servidor.callTool({ name: 'list_tasks', arguments: { unscored: true } });
177
+ expect(JSON.parse(texto(r)).map((t) => t.id)).toEqual(['002']);
178
+ });
179
+ it.each([0, 6, 2.5, '3', undefined])('recusa %j dizendo a faixa, sem gravar', async (difficulty) => {
180
+ const { servidor, porId } = montar([tarefa('001', { difficulty: 1 })]);
181
+ const r = await servidor.callTool({ name: 'set_difficulty', arguments: { taskId: '001', difficulty } });
182
+ expect(r.isError).toBe(true);
183
+ expect(texto(r)).toMatch(/1 to 5/);
184
+ expect(porId.get('001')?.difficulty).toBe(1);
185
+ });
186
+ it('recusa uma tarefa que nao existe', async () => {
187
+ const { servidor } = montar([tarefa('001')]);
188
+ const r = await servidor.callTool({ name: 'set_difficulty', arguments: { taskId: '999', difficulty: 3 } });
189
+ expect(r.isError).toBe(true);
190
+ expect(texto(r)).toContain('999');
191
+ });
192
+ it('set_difficulty e anunciado mesmo sem grupos', () => {
193
+ expect(nomes(montar([]).servidor)).toContain('set_difficulty');
194
+ });
195
+ });
196
+ /**
197
+ * Mover um grupo inteiro pelo MCP (task-117): uma ferramenta propria, e nao
198
+ * uma forma nova do `set_priority` — ali o sujeito e uma tarefa, aqui e um
199
+ * grupo, e misturar os dois num argumento so tornaria as duas ambiguas.
200
+ */
201
+ describe('mover um grupo por MCP', () => {
202
+ const OUTRO = { id: parseGroupId('g-outro'), name: 'Outro' };
203
+ const fila = (porId) => [...porId.values()]
204
+ .sort((a, b) => (a.order ?? Number.POSITIVE_INFINITY) - (b.order ?? Number.POSITIVE_INFINITY))
205
+ .map((t) => String(t.id));
206
+ it('move_group com top leva o bloco a frente, e diz quantas gravou', async () => {
207
+ const { servidor, porId } = montar([
208
+ tarefa('001', { order: 100 }),
209
+ tarefa('002', { order: 200, groupId: CLI.id }),
210
+ tarefa('003', { order: 300, groupId: CLI.id }),
211
+ tarefa('004', { order: 400, groupId: CLI.id }),
212
+ ], [CLI]);
213
+ const r = await servidor.callTool({ name: 'move_group', arguments: { groupId: 'g-cli', top: true } });
214
+ expect(r.isError).toBeFalsy();
215
+ expect(fila(porId)).toEqual(['002', '003', '004', '001']);
216
+ const resposta = JSON.parse(texto(r));
217
+ expect(resposta.changed).toBe(3);
218
+ expect(resposta.members.map((m) => m.id)).toEqual(['002', '003', '004']);
219
+ });
220
+ it('move_group com before e after aceita tarefa ou grupo como alvo', async () => {
221
+ const { servidor, porId } = montar([
222
+ tarefa('001', { order: 100, groupId: OUTRO.id }),
223
+ tarefa('002', { order: 200 }),
224
+ tarefa('003', { order: 300, groupId: CLI.id }),
225
+ ], [CLI, OUTRO]);
226
+ await servidor.callTool({ name: 'move_group', arguments: { groupId: 'g-cli', before: 'g-outro' } });
227
+ expect(fila(porId)).toEqual(['003', '001', '002']);
228
+ await servidor.callTool({ name: 'move_group', arguments: { groupId: 'g-cli', after: '002' } });
229
+ expect(fila(porId)).toEqual(['001', '002', '003']);
230
+ });
231
+ it('move_group com bottom leva o bloco ao fim', async () => {
232
+ const { servidor, porId } = montar([tarefa('001', { order: 100, groupId: CLI.id }), tarefa('002', { order: 200 })], [CLI]);
233
+ await servidor.callTool({ name: 'move_group', arguments: { groupId: 'g-cli', bottom: true } });
234
+ expect(fila(porId)).toEqual(['002', '001']);
235
+ });
236
+ it('exige exatamente uma forma', async () => {
237
+ const { servidor, porId } = montar([tarefa('001', { order: 100, groupId: CLI.id }), tarefa('002', { order: 200 })], [CLI]);
238
+ const nenhuma = await servidor.callTool({ name: 'move_group', arguments: { groupId: 'g-cli' } });
239
+ const duas = await servidor.callTool({
240
+ name: 'move_group',
241
+ arguments: { groupId: 'g-cli', top: true, after: '002' },
242
+ });
243
+ const naoBooleano = await servidor.callTool({ name: 'move_group', arguments: { groupId: 'g-cli', bottom: 'yes' } });
244
+ for (const r of [nenhuma, duas]) {
245
+ expect(r.isError).toBe(true);
246
+ expect(texto(r)).toContain('exactly one');
247
+ }
248
+ expect(naoBooleano.isError).toBe(true);
249
+ expect(texto(naoBooleano)).toContain('`bottom`');
250
+ expect(porId.get('001')?.order).toBe(100);
251
+ });
252
+ it('recusa grupo inexistente, alvo inexistente e alvo membro do proprio grupo', async () => {
253
+ const { servidor } = montar([tarefa('001', { order: 100, groupId: CLI.id }), tarefa('002', { order: 200, groupId: CLI.id })], [CLI]);
254
+ const semGrupo = await servidor.callTool({ name: 'move_group', arguments: { groupId: 'g-sumiu', top: true } });
255
+ const semAlvo = await servidor.callTool({ name: 'move_group', arguments: { groupId: 'g-cli', before: '999' } });
256
+ const membro = await servidor.callTool({ name: 'move_group', arguments: { groupId: 'g-cli', after: '002' } });
257
+ expect(texto(semGrupo)).toContain('g-sumiu');
258
+ expect(texto(semAlvo)).toContain('999');
259
+ expect(texto(membro)).toContain('member');
260
+ for (const r of [semGrupo, semAlvo, membro])
261
+ expect(r.isError).toBe(true);
262
+ });
263
+ it('um provider sem grupos nao anuncia move_group, e recusa em uma frase', async () => {
264
+ const { servidor } = montar([tarefa('001')]);
265
+ expect(nomes(servidor)).not.toContain('move_group');
266
+ const r = await servidor.callTool({ name: 'move_group', arguments: { groupId: 'g-cli', top: true } });
267
+ expect(r.isError).toBe(true);
268
+ expect(texto(r)).toContain('does not support task groups');
269
+ });
270
+ it('com grupos, move_group e anunciado', () => {
271
+ expect(nomes(montar([], [CLI]).servidor)).toContain('move_group');
272
+ });
273
+ });
274
+ //# sourceMappingURL=agrupar-priorizar.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agrupar-priorizar.test.js","sourceRoot":"","sources":["../src/agrupar-priorizar.test.ts"],"names":[],"mappings":"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"}
@@ -48,7 +48,15 @@ function ferramentasAnunciadas(markdown) {
48
48
  }
49
49
  describe('ferramentas documentadas', () => {
50
50
  const servidor = new TaskMCPServer({
51
- taskManager: { getAllTasks: vi.fn(async () => []) },
51
+ /*
52
+ * Com registro de grupos: as ferramentas de grupo so sao anunciadas quando a
53
+ * fonte tem o conceito, e sem ele a guarda ficaria cega para elas. Com
54
+ * `setParent`, pelo mesmo motivo, as de aninhamento (task-119).
55
+ */
56
+ taskManager: {
57
+ getAllTasks: vi.fn(async () => []),
58
+ groupRegistry: { setParent: vi.fn() },
59
+ },
52
60
  });
53
61
  const implementadas = new Set(servidor.listTools().tools.map((t) => t.name));
54
62
  it.each(DOCUMENTOS)('%s nao anuncia ferramenta que nao existe', (caminho) => {
@@ -1 +1 @@
1
- {"version":3,"file":"documented-tools.test.js","sourceRoot":"","sources":["../src/documented-tools.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD;;;;;;;;;;GAUG;AACH,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEzD,MAAM,UAAU,GAAG;IACjB,0BAA0B;IAC1B,0BAA0B;IAC1B,oCAAoC;IACpC,wBAAwB;CACzB,CAAC;AAEF;;;;;;;GAOG;AACH,SAAS,qBAAqB,CAAC,QAAgB;IAC7C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,OAAO,GAAG,CAAC,0BAA0B,EAAE,wBAAwB,EAAE,sBAAsB,CAAC,CAAC;IAE/F,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACtC;;;;;eAKG;YACH,IAAI,IAAI;gBAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC;QACjC,WAAW,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,EAA6B;KAC/E,CAAC,CAAC;IACH,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAE7E,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,0CAA0C,EAAE,CAAC,OAAO,EAAE,EAAE;QAC1E,MAAM,UAAU,GAAG,CAAC,GAAG,qBAAqB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QAE1F,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAE3E,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,YAAY,GAAG,IAAI,GAAG,CAC1B,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,qBAAqB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CACxG,CAAC;QAEF,MAAM,QAAQ,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAE9E,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"documented-tools.test.js","sourceRoot":"","sources":["../src/documented-tools.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD;;;;;;;;;;GAUG;AACH,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEzD,MAAM,UAAU,GAAG;IACjB,0BAA0B;IAC1B,0BAA0B;IAC1B,oCAAoC;IACpC,wBAAwB;CACzB,CAAC;AAEF;;;;;;;GAOG;AACH,SAAS,qBAAqB,CAAC,QAAgB;IAC7C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,OAAO,GAAG,CAAC,0BAA0B,EAAE,wBAAwB,EAAE,sBAAsB,CAAC,CAAC;IAE/F,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACtC;;;;;eAKG;YACH,IAAI,IAAI;gBAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC;QACjC;;;;WAIG;QACH,WAAW,EAAE;YACX,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;YAClC,aAAa,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;SACX;KAC7B,CAAC,CAAC;IACH,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAE7E,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,0CAA0C,EAAE,CAAC,OAAO,EAAE,EAAE;QAC1E,MAAM,UAAU,GAAG,CAAC,GAAG,qBAAqB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QAE1F,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAE3E,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,YAAY,GAAG,IAAI,GAAG,CAC1B,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,qBAAqB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CACxG,CAAC;QAEF,MAAM,QAAQ,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAE9E,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=grupos-aninhados.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grupos-aninhados.test.d.ts","sourceRoot":"","sources":["../src/grupos-aninhados.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,79 @@
1
+ import { NESTING_NOT_SUPPORTED, TaskManager } from '@opentask/taskin-task-manager';
2
+ import { registroDeGruposEmMemoria } from '@opentask/taskin-task-manager/testing';
3
+ import { parseGroupId } from '@opentask/taskin-types';
4
+ import { describe, expect, it } from 'vitest';
5
+ import { TaskMCPServer } from './task-server-mcp.js';
6
+ const PAI = { id: parseGroupId('g-pai'), name: 'Pai' };
7
+ const SUB = { id: parseGroupId('g-sub'), name: 'Sub' };
8
+ /** Um manager de verdade, sobre um registro em memoria com aninhamento. */
9
+ function montar(grupos, { aninhamento = true } = {}) {
10
+ const registro = registroDeGruposEmMemoria(grupos);
11
+ const { setParent: _sem, ...semAninhamento } = registro;
12
+ const provider = {
13
+ initialize: async () => { },
14
+ findTask: async () => undefined,
15
+ getAllTasks: async () => [],
16
+ updateTask: async () => { },
17
+ createTask: async () => {
18
+ throw new Error('nao usado');
19
+ },
20
+ lint: async () => ({ valid: true, issues: [], errorCount: 0, warningCount: 0, infoCount: 0 }),
21
+ groupRegistry: aninhamento ? registro : semAninhamento,
22
+ };
23
+ return { servidor: new TaskMCPServer({ taskManager: new TaskManager(provider) }), registro };
24
+ }
25
+ const texto = (r) => r.content[0]?.text ?? '';
26
+ const nomes = (s) => s.listTools().tools.map((t) => t.name);
27
+ /*
28
+ * Grupo dentro de grupo pelo MCP (task-119): as mesmas operacoes que a CLI e
29
+ * o dashboard usam, e `list_groups` dizendo o pai.
30
+ */
31
+ describe('grupos aninhados por MCP', () => {
32
+ it('create_group cria na raiz, ou ja dentro de outro', async () => {
33
+ const { servidor, registro } = montar([PAI]);
34
+ const r = await servidor.callTool({
35
+ name: 'create_group',
36
+ arguments: { name: 'Sub', id: 'g-sub', parentId: 'g-pai' },
37
+ });
38
+ expect(r.isError).toBeFalsy();
39
+ expect(JSON.parse(texto(r)).group).toEqual({ id: 'g-sub', name: 'Sub', parentId: 'g-pai' });
40
+ expect(registro.grupos.find((g) => g.id === 'g-sub')?.parentId).toBe('g-pai');
41
+ });
42
+ it('create_group exige um nome', async () => {
43
+ const { servidor } = montar([]);
44
+ const r = await servidor.callTool({ name: 'create_group', arguments: {} });
45
+ expect(r.isError).toBe(true);
46
+ expect(texto(r)).toMatch(/name/);
47
+ });
48
+ it('nest_group e unnest_group mudam o pai, e list_groups o mostra', async () => {
49
+ const { servidor } = montar([PAI, SUB]);
50
+ const aninhado = await servidor.callTool({
51
+ name: 'nest_group',
52
+ arguments: { groupId: 'g-sub', parentId: 'g-pai' },
53
+ });
54
+ expect(aninhado.isError).toBeFalsy();
55
+ const lista = JSON.parse(texto(await servidor.callTool({ name: 'list_groups', arguments: {} })));
56
+ expect(lista.groups).toContainEqual({ id: 'g-sub', name: 'Sub', parentId: 'g-pai' });
57
+ const solto = await servidor.callTool({ name: 'unnest_group', arguments: { groupId: 'g-sub' } });
58
+ expect(JSON.parse(texto(solto)).group).toEqual({ id: 'g-sub', name: 'Sub' });
59
+ });
60
+ it('recusa o ciclo com a frase do dominio', async () => {
61
+ const { servidor } = montar([PAI, { ...SUB, parentId: PAI.id }]);
62
+ const r = await servidor.callTool({ name: 'nest_group', arguments: { groupId: 'g-pai', parentId: 'g-sub' } });
63
+ expect(r.isError).toBe(true);
64
+ expect(texto(r)).toMatch(/cycle/);
65
+ });
66
+ it('sem aninhamento no provider, nest_group e unnest_group nao sao anunciadas', () => {
67
+ const { servidor } = montar([PAI], { aninhamento: false });
68
+ expect(nomes(servidor)).toContain('create_group');
69
+ expect(nomes(servidor)).not.toContain('nest_group');
70
+ expect(nomes(servidor)).not.toContain('unnest_group');
71
+ });
72
+ it('sem aninhamento, create_group com pai recusa em uma frase', async () => {
73
+ const { servidor } = montar([PAI], { aninhamento: false });
74
+ const r = await servidor.callTool({ name: 'create_group', arguments: { name: 'Sub', parentId: 'g-pai' } });
75
+ expect(r.isError).toBe(true);
76
+ expect(texto(r)).toContain(NESTING_NOT_SUPPORTED);
77
+ });
78
+ });
79
+ //# sourceMappingURL=grupos-aninhados.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grupos-aninhados.test.js","sourceRoot":"","sources":["../src/grupos-aninhados.test.ts"],"names":[],"mappings":"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"}
@@ -51,11 +51,37 @@ describe('listar tarefas por MCP', () => {
51
51
  expect(tools.map((t) => t.name)).toContain('list_tasks');
52
52
  });
53
53
  it('devolve as tarefas como JSON, e nao um espaco reservado', async () => {
54
- const resultado = await servidor().callTool({ name: 'list_tasks', arguments: {} });
54
+ const resultado = await servidor().callTool({ name: 'list_tasks', arguments: { all: true } });
55
55
  const tarefas = JSON.parse(texto(resultado));
56
56
  expect(tarefas.map((t) => t.id)).toEqual(['001', '002', '003']);
57
57
  expect(resultado.isError).toBeFalsy();
58
58
  });
59
+ /*
60
+ * O padrao vem de `filterTasks`, no dominio: o servidor nao escreve regra
61
+ * propria, e por isso nao pode discordar do `taskin list`.
62
+ */
63
+ it('sem criterio, devolve so as abertas; `all` devolve todas', async () => {
64
+ const padrao = await servidor().callTool({ name: 'list_tasks', arguments: {} });
65
+ expect(JSON.parse(texto(padrao)).map((t) => t.id)).toEqual(['001', '003']);
66
+ const todas = await servidor().callTool({ name: 'list_tasks', arguments: { all: true } });
67
+ expect(JSON.parse(texto(todas)).map((t) => t.id)).toEqual(['001', '002', '003']);
68
+ });
69
+ it('anuncia `all` no schema da ferramenta, derivado do dominio', () => {
70
+ const listTasks = servidor()
71
+ .listTools()
72
+ .tools.find((t) => t.name === 'list_tasks');
73
+ expect(listTasks?.inputSchema.properties).toHaveProperty('all');
74
+ });
75
+ it('recusa `all` combinado com `status`, pela mesma regra do dominio', async () => {
76
+ const resultado = await servidor().callTool({ name: 'list_tasks', arguments: { all: true, status: 'done' } });
77
+ expect(resultado.isError).toBe(true);
78
+ expect(texto(resultado)).toMatch(/`all` cannot be combined with `status`/);
79
+ });
80
+ it('recusa `all` combinado com `closed`', async () => {
81
+ const resultado = await servidor().callTool({ name: 'list_tasks', arguments: { all: true, closed: true } });
82
+ expect(resultado.isError).toBe(true);
83
+ expect(texto(resultado)).toMatch(/`all` cannot be combined with `closed`/);
84
+ });
59
85
  it('aceita os mesmos criterios da listagem do CLI', async () => {
60
86
  const porStatus = await servidor().callTool({ name: 'list_tasks', arguments: { status: 'done' } });
61
87
  expect(JSON.parse(texto(porStatus)).map((t) => t.id)).toEqual(['002']);
@@ -1 +1 @@
1
- {"version":3,"file":"list-tasks.test.js","sourceRoot":"","sources":["../src/list-tasks.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAa,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,SAAS,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,EAA8C;IAC1E,OAAO;QACL,SAAS,EAAE,0BAA0B;QACrC,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,UAAU,EAAE,EAAE;QACrB,IAAI,EAAE,MAAM;QACZ,GAAG,KAAK;QACR,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC;KACpB,CAAC;AACJ,CAAC;AAED,MAAM,GAAG,GAAG,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC;AAE7E,MAAM,OAAO,GAAoB;IAC/B,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IAC3F,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC3E,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;CAC3F,CAAC;AAEF;;;;;GAKG;AACH,SAAS,KAAK,CAAC,SAA8D;IAC3E,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,KAAK,EAAE,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3F,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC;AACpB,CAAC;AAED,SAAS,QAAQ,CAAC,UAA2B,OAAO;IAClD,MAAM,WAAW,GAAG;QAClB,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;KAClB,CAAC;IAE7B,OAAO,IAAI,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;;GAQG;AACH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC;QAEzC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,SAAS,GAAG,MAAM,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QAEnF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAChF,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,SAAS,GAAG,MAAM,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QACnG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAEvF,MAAM,cAAc,GAAG,MAAM,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACzG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAEnG,MAAM,OAAO,GAAG,MAAM,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAC7F,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,SAAS,GAAG,MAAM,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QAEnF,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,SAAS,GAAG,MAAM,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAE3E,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH;;;;;;;;OAQG;IACH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,MAAM,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;YAE3E,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;gBACtC,MAAM,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,SAAS,GAAG,MAAM,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAEtG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"list-tasks.test.js","sourceRoot":"","sources":["../src/list-tasks.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=superficies.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"superficies.test.d.ts","sourceRoot":"","sources":["../src/superficies.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ import { nomesNaSuperficie, TaskManager } from '@opentask/taskin-task-manager';
2
+ import { registroDeGruposEmMemoria } from '@opentask/taskin-task-manager/testing';
3
+ import { describe, expect, it } from 'vitest';
4
+ import { TaskMCPServer } from './task-server-mcp.js';
5
+ /**
6
+ * O servidor MCP anuncia cada ferramenta que `SUPERFICIES_DAS_OPERACOES` diz
7
+ * que ele atende — com um provider que tem grupos e aninhamento, onde nada
8
+ * fica de fora.
9
+ */
10
+ describe('ferramentas do MCP x SUPERFICIES_DAS_OPERACOES', () => {
11
+ const groupRegistry = registroDeGruposEmMemoria();
12
+ const provider = {
13
+ initialize: async () => { },
14
+ findTask: async () => undefined,
15
+ getAllTasks: async () => [],
16
+ updateTask: async () => { },
17
+ createTask: async () => {
18
+ throw new Error('nao usado');
19
+ },
20
+ lint: async () => ({ valid: true, issues: [], errorCount: 0, warningCount: 0, infoCount: 0 }),
21
+ groupRegistry,
22
+ };
23
+ const anunciadas = new TaskMCPServer({ taskManager: new TaskManager(provider) }).listTools().tools.map((t) => t.name);
24
+ it.each(nomesNaSuperficie('mcp'))('a ferramenta %s e anunciada', (nome) => {
25
+ expect(anunciadas).toContain(nome);
26
+ });
27
+ });
28
+ //# sourceMappingURL=superficies.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"superficies.test.js","sourceRoot":"","sources":["../src/superficies.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2C,iBAAiB,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACxH,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD;;;;GAIG;AACH,QAAQ,CAAC,gDAAgD,EAAE,GAAG,EAAE;IAC9D,MAAM,aAAa,GAAmB,yBAAyB,EAAE,CAAC;IAClE,MAAM,QAAQ,GAAsD;QAClE,UAAU,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;QAC1B,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS;QAC/B,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;QAC3B,UAAU,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;QAC1B,UAAU,EAAE,KAAK,IAAI,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QAC7F,aAAa;KACd,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,aAAa,CAAC,EAAE,WAAW,EAAE,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEtH,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,6BAA6B,EAAE,CAAC,IAAI,EAAE,EAAE;QACxE,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -43,6 +43,12 @@ export declare class TaskMCPServer implements ITaskMCPServer {
43
43
  listTools(): {
44
44
  tools: MCPTool[];
45
45
  };
46
+ private ferramentasDeGrupo;
47
+ /**
48
+ * Grupo dentro de grupo (task-119), so anunciado quando o registro o tem —
49
+ * um provider pode ter grupos e nao ter aninhamento.
50
+ */
51
+ private ferramentasDeAninhamento;
46
52
  /**
47
53
  * Call a tool
48
54
  */
@@ -97,6 +103,24 @@ export declare class TaskMCPServer implements ITaskMCPServer {
97
103
  */
98
104
  private handleListGroups;
99
105
  private handlePrioritizeTasks;
106
+ private handleJoinGroup;
107
+ private handleCreateGroup;
108
+ private handleNestGroup;
109
+ private handleUnnestGroup;
110
+ private handleLeaveGroup;
111
+ /**
112
+ * Uma ferramenta so para as tres formas, como o `taskin priority` da CLI.
113
+ * Mais de uma forma na mesma chamada e ambiguo, e se recusa em vez de
114
+ * escolher uma em silencio.
115
+ */
116
+ private handleSetPriority;
117
+ /**
118
+ * Um grupo inteiro se move (task-117), nas mesmas quatro formas do
119
+ * `set_priority` sem o numero absoluto — um numero so nao diz onde ficam
120
+ * varios membros. O alvo pode ser tarefa ou grupo: quem decide e o manager.
121
+ */
122
+ private handleMoveGroup;
123
+ private handleSetDifficulty;
100
124
  private handleListTasks;
101
125
  /**
102
126
  * List available resources