@noclaf/cli 0.4.13 → 0.4.15
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/dist/auth.js +2 -1
- package/dist/auth.js.map +1 -1
- package/dist/brand.js +82 -0
- package/dist/brand.js.map +1 -0
- package/dist/cli/commands/auth.js +91 -58
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/init/auth-step.js +48 -0
- package/dist/cli/commands/init/auth-step.js.map +1 -0
- package/dist/cli/commands/init/clients-step.js +76 -0
- package/dist/cli/commands/init/clients-step.js.map +1 -0
- package/dist/cli/commands/init/context-step.js +66 -0
- package/dist/cli/commands/init/context-step.js.map +1 -0
- package/dist/cli/commands/init/index.js +67 -0
- package/dist/cli/commands/init/index.js.map +1 -0
- package/dist/cli/commands/init/project-step.js +105 -0
- package/dist/cli/commands/init/project-step.js.map +1 -0
- package/dist/cli/commands/init/provision-step.js +76 -0
- package/dist/cli/commands/init/provision-step.js.map +1 -0
- package/dist/cli/commands/validate-plan.js +42 -0
- package/dist/cli/commands/validate-plan.js.map +1 -0
- package/dist/cli/flows/clients.js +27 -17
- package/dist/cli/flows/clients.js.map +1 -1
- package/dist/cli.js +7 -5
- package/dist/cli.js.map +1 -1
- package/dist/config.js +19 -11
- package/dist/config.js.map +1 -1
- package/dist/constants.js +7 -8
- package/dist/constants.js.map +1 -1
- package/dist/lib/autopull.js +13 -0
- package/dist/lib/autopull.js.map +1 -0
- package/dist/lib/client-configs.js +37 -25
- package/dist/lib/client-configs.js.map +1 -1
- package/dist/lib/cowork-extension.js +42 -30
- package/dist/lib/cowork-extension.js.map +1 -1
- package/dist/lib/dependencies.js +83 -247
- package/dist/lib/dependencies.js.map +1 -1
- package/dist/lib/dependency-install.js +163 -0
- package/dist/lib/dependency-install.js.map +1 -0
- package/dist/lib/exec-delegate.js +2 -2
- package/dist/lib/exec-delegate.js.map +1 -1
- package/dist/lib/exec-engines.js +7 -6
- package/dist/lib/exec-engines.js.map +1 -1
- package/dist/lib/provision-apply.js +214 -0
- package/dist/lib/provision-apply.js.map +1 -0
- package/dist/lib/provision-collect.js +47 -0
- package/dist/lib/provision-collect.js.map +1 -0
- package/dist/lib/provision.js +8 -253
- package/dist/lib/provision.js.map +1 -1
- package/dist/lib/require-config.js +3 -2
- package/dist/lib/require-config.js.map +1 -1
- package/dist/lib/skills-cache.js +9 -8
- package/dist/lib/skills-cache.js.map +1 -1
- package/dist/lib/skills.js +30 -16
- package/dist/lib/skills.js.map +1 -1
- package/dist/lib/telemetry.js +2 -1
- package/dist/lib/telemetry.js.map +1 -1
- package/dist/lib/validate-plan-delegate.js +105 -0
- package/dist/lib/validate-plan-delegate.js.map +1 -0
- package/dist/lib/version-check.js +3 -2
- package/dist/lib/version-check.js.map +1 -1
- package/dist/mcp-server.js +107 -79
- package/dist/mcp-server.js.map +1 -1
- package/dist/tools/comment-task.js +32 -32
- package/dist/tools/comment-task.js.map +1 -1
- package/dist/tools/create-task.js +92 -101
- package/dist/tools/create-task.js.map +1 -1
- package/dist/tools/delegate-exec.js +4 -3
- package/dist/tools/delegate-exec.js.map +1 -1
- package/dist/tools/end-allocation.js +19 -32
- package/dist/tools/end-allocation.js.map +1 -1
- package/dist/tools/end-task-allocation.js +17 -26
- package/dist/tools/end-task-allocation.js.map +1 -1
- package/dist/tools/exec-status.js +4 -3
- package/dist/tools/exec-status.js.map +1 -1
- package/dist/tools/get-active-allocation.js +53 -60
- package/dist/tools/get-active-allocation.js.map +1 -1
- package/dist/tools/get-context.js +4 -3
- package/dist/tools/get-context.js.map +1 -1
- package/dist/tools/get-task.js +144 -142
- package/dist/tools/get-task.js.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/list-my-allocations.js +35 -43
- package/dist/tools/list-my-allocations.js.map +1 -1
- package/dist/tools/list-projects.js +3 -2
- package/dist/tools/list-projects.js.map +1 -1
- package/dist/tools/list-tasks.js +117 -124
- package/dist/tools/list-tasks.js.map +1 -1
- package/dist/tools/move-task.js +37 -39
- package/dist/tools/move-task.js.map +1 -1
- package/dist/tools/plan.js +3 -2
- package/dist/tools/plan.js.map +1 -1
- package/dist/tools/record-delivery.js +4 -3
- package/dist/tools/record-delivery.js.map +1 -1
- package/dist/tools/set-project.js +9 -4
- package/dist/tools/set-project.js.map +1 -1
- package/dist/tools/start-allocation.js +16 -26
- package/dist/tools/start-allocation.js.map +1 -1
- package/dist/tools/start-task-allocation.js +72 -92
- package/dist/tools/start-task-allocation.js.map +1 -1
- package/dist/tools/update-task.js +149 -168
- package/dist/tools/update-task.js.map +1 -1
- package/dist/tools/validate-plan.js +58 -0
- package/dist/tools/validate-plan.js.map +1 -0
- package/package.json +1 -1
- package/dist/cli/commands/init.js +0 -336
- package/dist/cli/commands/init.js.map +0 -1
- package/dist/logo.js +0 -17
- package/dist/logo.js.map +0 -1
|
@@ -1,51 +1,42 @@
|
|
|
1
1
|
import { jsonResult, errorResult } from '../lib/tool-result.js';
|
|
2
2
|
import { durationSeconds } from '../lib/duration.js';
|
|
3
|
+
import { brand } from '../brand.js';
|
|
3
4
|
export const definition = {
|
|
4
|
-
name:
|
|
5
|
+
name: `${brand.toolPrefix}end_task_allocation`,
|
|
5
6
|
description: '[PARA TIMER DE TASK] Para a task_allocation ativa. A alocação principal (ponto do dia) ' +
|
|
6
7
|
'CONTINUA aberta. Use ao finalizar ou pausar uma task. ' +
|
|
7
|
-
|
|
8
|
+
`Para encerrar o dia inteiro, use \`${brand.toolPrefix}end_allocation\`.`,
|
|
8
9
|
inputSchema: {
|
|
9
10
|
type: 'object',
|
|
10
11
|
properties: {},
|
|
11
12
|
additionalProperties: false,
|
|
12
13
|
},
|
|
13
14
|
};
|
|
15
|
+
/** Monta o payload de resposta do end_task_allocation. Pura. */
|
|
16
|
+
export function formatEndTaskAllocationResult(closed, task) {
|
|
17
|
+
return {
|
|
18
|
+
task_allocation_id: closed.id,
|
|
19
|
+
task,
|
|
20
|
+
start_time: closed.start_time,
|
|
21
|
+
end_time: closed.end_time,
|
|
22
|
+
duration_seconds: durationSeconds(closed.start_time, closed.end_time),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
14
25
|
export async function handler(_args, ctx) {
|
|
15
26
|
const { supabase } = ctx;
|
|
16
27
|
const now = new Date().toISOString();
|
|
17
|
-
const activeRes = await supabase
|
|
18
|
-
.from('task_allocations')
|
|
19
|
-
.select('id, task_id, start_time')
|
|
20
|
-
.eq('user_id', ctx.user.id)
|
|
21
|
-
.is('end_time', null)
|
|
22
|
-
.maybeSingle();
|
|
28
|
+
const activeRes = await supabase.from('task_allocations').select('id, task_id, start_time').eq('user_id', ctx.user.id).is('end_time', null).maybeSingle();
|
|
23
29
|
if (activeRes.error)
|
|
24
30
|
return errorResult(`Erro ao buscar task_allocation ativa: ${activeRes.error.message}`);
|
|
25
31
|
if (!activeRes.data)
|
|
26
32
|
return errorResult('Não há task_allocation ativa.');
|
|
27
33
|
const active = activeRes.data;
|
|
28
|
-
const closeRes = await supabase
|
|
29
|
-
.from('task_allocations')
|
|
30
|
-
.update({ end_time: now })
|
|
31
|
-
.eq('id', active.id)
|
|
32
|
-
.select('id, start_time, end_time')
|
|
33
|
-
.single();
|
|
34
|
+
const closeRes = await supabase.from('task_allocations').update({ end_time: now }).eq('id', active.id).select('id, start_time, end_time').single();
|
|
34
35
|
if (closeRes.error)
|
|
35
36
|
return errorResult(`Erro ao parar task_allocation: ${closeRes.error.message}`);
|
|
36
37
|
// Busca info da task (best-effort)
|
|
37
|
-
const taskRes = await supabase
|
|
38
|
-
.from('tasks')
|
|
39
|
-
.select('id, key, title')
|
|
40
|
-
.eq('id', active.task_id)
|
|
41
|
-
.maybeSingle();
|
|
38
|
+
const taskRes = await supabase.from('tasks').select('id, key, title').eq('id', active.task_id).maybeSingle();
|
|
42
39
|
const task = taskRes.data ?? { id: active.task_id, key: null, title: null };
|
|
43
|
-
return jsonResult(
|
|
44
|
-
task_allocation_id: closeRes.data.id,
|
|
45
|
-
task,
|
|
46
|
-
start_time: closeRes.data.start_time,
|
|
47
|
-
end_time: closeRes.data.end_time,
|
|
48
|
-
duration_seconds: durationSeconds(closeRes.data.start_time, closeRes.data.end_time),
|
|
49
|
-
});
|
|
40
|
+
return jsonResult(formatEndTaskAllocationResult(closeRes.data, task));
|
|
50
41
|
}
|
|
51
42
|
//# sourceMappingURL=end-task-allocation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"end-task-allocation.js","sourceRoot":"","sources":["../../src/tools/end-task-allocation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"end-task-allocation.js","sourceRoot":"","sources":["../../src/tools/end-task-allocation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,IAAI,EAAE,GAAG,KAAK,CAAC,UAAU,qBAAqB;IAC9C,WAAW,EACT,yFAAyF;QACzF,wDAAwD;QACxD,sCAAsC,KAAK,CAAC,UAAU,mBAAmB;IAC3E,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;QACd,oBAAoB,EAAE,KAAK;KAC5B;CACF,CAAC;AAEF,gEAAgE;AAChE,MAAM,UAAU,6BAA6B,CAC3C,MAAmE,EACnE,IAA8D;IAE9D,OAAO;QACL,kBAAkB,EAAE,MAAM,CAAC,EAAE;QAC7B,IAAI;QACJ,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,gBAAgB,EAAE,eAAe,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC;KACtE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAc,EAAE,GAAgB;IAC5D,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC;IACzB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1J,IAAI,SAAS,CAAC,KAAK;QAAE,OAAO,WAAW,CAAC,yCAAyC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5G,IAAI,CAAC,SAAS,CAAC,IAAI;QAAE,OAAO,WAAW,CAAC,+BAA+B,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC;IAE9B,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,MAAM,EAAE,CAAC;IACnJ,IAAI,QAAQ,CAAC,KAAK;QAAE,OAAO,WAAW,CAAC,kCAAkC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAEnG,mCAAmC;IACnC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7G,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAE5E,OAAO,UAAU,CAAC,6BAA6B,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { jsonResult, errorResult } from '../lib/tool-result.js';
|
|
3
3
|
import { getJob } from '../lib/exec-delegate.js';
|
|
4
|
+
import { brand } from '../brand.js';
|
|
4
5
|
const ArgsSchema = z.object({ job_id: z.string().min(1) }).strict();
|
|
5
6
|
export const definition = {
|
|
6
|
-
name:
|
|
7
|
-
description:
|
|
7
|
+
name: `${brand.cliToolPrefix}exec_status`,
|
|
8
|
+
description: `Estado de uma execução delegada (\`${brand.cliToolPrefix}delegate_exec\`): running | done | failed, com o ` +
|
|
8
9
|
'resumo do agente, os arquivos alterados e os checks determinísticos (tamanho, lint, build, ' +
|
|
9
10
|
'testes). Use os checks como FATOS na sua revisão — não gaste ciclo revisando o mecânico.',
|
|
10
11
|
inputSchema: {
|
|
11
12
|
type: 'object',
|
|
12
13
|
properties: {
|
|
13
|
-
job_id: { type: 'string', description:
|
|
14
|
+
job_id: { type: 'string', description: `Id devolvido por \`${brand.cliToolPrefix}delegate_exec\`.` },
|
|
14
15
|
},
|
|
15
16
|
required: ['job_id'],
|
|
16
17
|
additionalProperties: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec-status.js","sourceRoot":"","sources":["../../src/tools/exec-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"exec-status.js","sourceRoot":"","sources":["../../src/tools/exec-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAEpE,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,IAAI,EAAE,GAAG,KAAK,CAAC,aAAa,aAAa;IACzC,WAAW,EACT,sCAAsC,KAAK,CAAC,aAAa,mDAAmD;QAC5G,6FAA6F;QAC7F,0FAA0F;IAC5F,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,KAAK,CAAC,aAAa,kBAAkB,EAAE;SACrG;QACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;QACpB,oBAAoB,EAAE,KAAK;KAC5B;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAa,EAAE,IAAiB;IAC5D,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,WAAW,CAAC,uBAAuB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC,GAAG;QAAE,OAAO,WAAW,CAAC,uBAAuB,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAE1E,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;SACvC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACxB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAEzB,OAAO,UAAU,CAAC;QAChB,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,SAAS,EAAE,GAAG,CAAC,QAAQ;QACvB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,cAAc,EAAE,OAAO;QACvB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,KAAK,EAAE,GAAG,CAAC,KAAK;KACjB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { jsonResult, errorResult } from '../lib/tool-result.js';
|
|
2
|
+
import { isErrorResult } from '../lib/require-config.js';
|
|
2
3
|
import { durationSeconds } from '../lib/duration.js';
|
|
4
|
+
import { brand } from '../brand.js';
|
|
3
5
|
export const definition = {
|
|
4
|
-
name:
|
|
6
|
+
name: `${brand.toolPrefix}get_active_allocation`,
|
|
5
7
|
description: 'Retorna o estado atual de cronometragem do usuário: alocação ativa, task atual sendo ' +
|
|
6
8
|
'cronometrada, e segmentos por task na alocação atual.',
|
|
7
9
|
inputSchema: {
|
|
@@ -10,61 +12,8 @@ export const definition = {
|
|
|
10
12
|
additionalProperties: false,
|
|
11
13
|
},
|
|
12
14
|
};
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const allocRes = await supabase
|
|
16
|
-
.from('allocations')
|
|
17
|
-
.select('id, start_time')
|
|
18
|
-
.eq('user_id', ctx.user.id)
|
|
19
|
-
.is('end_time', null)
|
|
20
|
-
.maybeSingle();
|
|
21
|
-
if (allocRes.error)
|
|
22
|
-
return errorResult(`Erro ao buscar alocação ativa: ${allocRes.error.message}`);
|
|
23
|
-
if (!allocRes.data) {
|
|
24
|
-
return jsonResult({
|
|
25
|
-
allocation: null,
|
|
26
|
-
active_task: null,
|
|
27
|
-
segments: [],
|
|
28
|
-
total_seconds_today: 0,
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
const allocation = allocRes.data;
|
|
32
|
-
const segmentsRes = await supabase
|
|
33
|
-
.from('task_allocations')
|
|
34
|
-
.select('id, task_id, start_time, end_time, is_overtime')
|
|
35
|
-
.eq('allocation_id', allocation.id)
|
|
36
|
-
.order('start_time', { ascending: true });
|
|
37
|
-
if (segmentsRes.error)
|
|
38
|
-
return errorResult(`Erro ao buscar segmentos: ${segmentsRes.error.message}`);
|
|
39
|
-
const segmentRows = segmentsRes.data ?? [];
|
|
40
|
-
// Carrega tasks + projetos referenciados
|
|
41
|
-
const taskIds = Array.from(new Set(segmentRows.map((s) => s.task_id)));
|
|
42
|
-
const tasksById = new Map();
|
|
43
|
-
const projectsById = new Map();
|
|
44
|
-
if (taskIds.length > 0) {
|
|
45
|
-
const tasksRes = await supabase
|
|
46
|
-
.from('tasks')
|
|
47
|
-
.select('id, key, title, project_id')
|
|
48
|
-
.in('id', taskIds);
|
|
49
|
-
if (tasksRes.error)
|
|
50
|
-
return errorResult(`Erro ao buscar tarefas: ${tasksRes.error.message}`);
|
|
51
|
-
for (const t of tasksRes.data ?? []) {
|
|
52
|
-
tasksById.set(t.id, { key: t.key, title: t.title, project_id: t.project_id });
|
|
53
|
-
}
|
|
54
|
-
const projectIds = Array.from(new Set((tasksRes.data ?? []).map((t) => t.project_id)));
|
|
55
|
-
if (projectIds.length > 0) {
|
|
56
|
-
const projectsRes = await supabase
|
|
57
|
-
.from('projects')
|
|
58
|
-
.select('id, name')
|
|
59
|
-
.in('id', projectIds);
|
|
60
|
-
if (projectsRes.error) {
|
|
61
|
-
return errorResult(`Erro ao buscar projetos: ${projectsRes.error.message}`);
|
|
62
|
-
}
|
|
63
|
-
for (const p of projectsRes.data ?? [])
|
|
64
|
-
projectsById.set(p.id, p.name);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
const taskInfo = (taskId) => {
|
|
15
|
+
function taskInfoLookup(tasksById, projectsById) {
|
|
16
|
+
return (taskId) => {
|
|
68
17
|
const t = tasksById.get(taskId);
|
|
69
18
|
return {
|
|
70
19
|
id: taskId,
|
|
@@ -73,6 +22,10 @@ export async function handler(_args, ctx) {
|
|
|
73
22
|
project_name: t ? projectsById.get(t.project_id) ?? null : null,
|
|
74
23
|
};
|
|
75
24
|
};
|
|
25
|
+
}
|
|
26
|
+
/** Monta a resposta de alocação ativa: allocation, task ativa, segmentos e total do dia. Pura. */
|
|
27
|
+
export function formatActiveAllocation(allocation, segmentRows, tasksById, projectsById) {
|
|
28
|
+
const taskInfo = taskInfoLookup(tasksById, projectsById);
|
|
76
29
|
const segments = segmentRows.map((s) => ({
|
|
77
30
|
task_allocation_id: s.id,
|
|
78
31
|
task: taskInfo(s.task_id),
|
|
@@ -91,8 +44,7 @@ export async function handler(_args, ctx) {
|
|
|
91
44
|
is_overtime: activeSegment.is_overtime,
|
|
92
45
|
}
|
|
93
46
|
: null;
|
|
94
|
-
|
|
95
|
-
return jsonResult({
|
|
47
|
+
return {
|
|
96
48
|
allocation: {
|
|
97
49
|
id: allocation.id,
|
|
98
50
|
start_time: allocation.start_time,
|
|
@@ -100,7 +52,48 @@ export async function handler(_args, ctx) {
|
|
|
100
52
|
},
|
|
101
53
|
active_task: activeTask,
|
|
102
54
|
segments,
|
|
103
|
-
total_seconds_today:
|
|
104
|
-
}
|
|
55
|
+
total_seconds_today: segments.reduce((acc, s) => acc + s.duration_seconds, 0),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
async function loadTaskAndProjectRefs(supabase, taskIds) {
|
|
59
|
+
const tasksById = new Map();
|
|
60
|
+
const projectsById = new Map();
|
|
61
|
+
if (taskIds.length === 0)
|
|
62
|
+
return { tasksById, projectsById };
|
|
63
|
+
const tasksRes = await supabase.from('tasks').select('id, key, title, project_id').in('id', taskIds);
|
|
64
|
+
if (tasksRes.error)
|
|
65
|
+
return errorResult(`Erro ao buscar tarefas: ${tasksRes.error.message}`);
|
|
66
|
+
for (const t of tasksRes.data ?? [])
|
|
67
|
+
tasksById.set(t.id, { key: t.key, title: t.title, project_id: t.project_id });
|
|
68
|
+
const projectIds = Array.from(new Set((tasksRes.data ?? []).map((t) => t.project_id)));
|
|
69
|
+
if (projectIds.length > 0) {
|
|
70
|
+
const projectsRes = await supabase.from('projects').select('id, name').in('id', projectIds);
|
|
71
|
+
if (projectsRes.error)
|
|
72
|
+
return errorResult(`Erro ao buscar projetos: ${projectsRes.error.message}`);
|
|
73
|
+
for (const p of projectsRes.data ?? [])
|
|
74
|
+
projectsById.set(p.id, p.name);
|
|
75
|
+
}
|
|
76
|
+
return { tasksById, projectsById };
|
|
77
|
+
}
|
|
78
|
+
export async function handler(_args, ctx) {
|
|
79
|
+
const { supabase } = ctx;
|
|
80
|
+
const allocRes = await supabase.from('allocations').select('id, start_time').eq('user_id', ctx.user.id).is('end_time', null).maybeSingle();
|
|
81
|
+
if (allocRes.error)
|
|
82
|
+
return errorResult(`Erro ao buscar alocação ativa: ${allocRes.error.message}`);
|
|
83
|
+
if (!allocRes.data)
|
|
84
|
+
return jsonResult({ allocation: null, active_task: null, segments: [], total_seconds_today: 0 });
|
|
85
|
+
const allocation = allocRes.data;
|
|
86
|
+
const segmentsRes = await supabase
|
|
87
|
+
.from('task_allocations')
|
|
88
|
+
.select('id, task_id, start_time, end_time, is_overtime')
|
|
89
|
+
.eq('allocation_id', allocation.id)
|
|
90
|
+
.order('start_time', { ascending: true });
|
|
91
|
+
if (segmentsRes.error)
|
|
92
|
+
return errorResult(`Erro ao buscar segmentos: ${segmentsRes.error.message}`);
|
|
93
|
+
const segmentRows = segmentsRes.data ?? [];
|
|
94
|
+
const refs = await loadTaskAndProjectRefs(supabase, Array.from(new Set(segmentRows.map((s) => s.task_id))));
|
|
95
|
+
if (isErrorResult(refs))
|
|
96
|
+
return refs;
|
|
97
|
+
return jsonResult(formatActiveAllocation(allocation, segmentRows, refs.tasksById, refs.projectsById));
|
|
105
98
|
}
|
|
106
99
|
//# sourceMappingURL=get-active-allocation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-active-allocation.js","sourceRoot":"","sources":["../../src/tools/get-active-allocation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get-active-allocation.js","sourceRoot":"","sources":["../../src/tools/get-active-allocation.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,24 +2,25 @@ import { z } from 'zod';
|
|
|
2
2
|
import { jsonResult, errorResult } from '../lib/tool-result.js';
|
|
3
3
|
import { fetchProjectContext, ProjectContextError } from '../lib/project-context.js';
|
|
4
4
|
import { resolveProjectConfig, isErrorResult } from '../lib/require-config.js';
|
|
5
|
+
import { brand } from '../brand.js';
|
|
5
6
|
const ArgsSchema = z
|
|
6
7
|
.object({
|
|
7
8
|
project_id: z.string().uuid().optional(),
|
|
8
9
|
})
|
|
9
10
|
.strict();
|
|
10
11
|
export const definition = {
|
|
11
|
-
name:
|
|
12
|
+
name: `${brand.toolPrefix}get_context`,
|
|
12
13
|
description: 'Retorna o contexto completo do projeto NOS ativo: dados do projeto, repositórios, ' +
|
|
13
14
|
'sprint ativa, membros e usuário autenticado. Use SEMPRE no início de uma conversa ' +
|
|
14
15
|
'pra entender em que projeto você está operando. Sem projeto selecionado, use ' +
|
|
15
|
-
|
|
16
|
+
`\`${brand.toolPrefix}list_projects\` + \`${brand.toolPrefix}set_project\` antes.`,
|
|
16
17
|
inputSchema: {
|
|
17
18
|
type: 'object',
|
|
18
19
|
properties: {
|
|
19
20
|
project_id: {
|
|
20
21
|
type: 'string',
|
|
21
22
|
format: 'uuid',
|
|
22
|
-
description:
|
|
23
|
+
description: `Override do projeto. Se omitido, usa o projeto ativo (${brand.toolPrefix}set_project) ou o default.`,
|
|
23
24
|
},
|
|
24
25
|
},
|
|
25
26
|
additionalProperties: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-context.js","sourceRoot":"","sources":["../../src/tools/get-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"get-context.js","sourceRoot":"","sources":["../../src/tools/get-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,UAAU,GAAG,CAAC;KACjB,MAAM,CAAC;IACN,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;CACzC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,IAAI,EAAE,GAAG,KAAK,CAAC,UAAU,aAAa;IACtC,WAAW,EACT,oFAAoF;QACpF,oFAAoF;QACpF,+EAA+E;QAC/E,KAAK,KAAK,CAAC,UAAU,uBAAuB,KAAK,CAAC,UAAU,sBAAsB;IACpF,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,MAAM;gBACd,WAAW,EAAE,yDAAyD,KAAK,CAAC,UAAU,4BAA4B;aACnH;SACF;QACD,oBAAoB,EAAE,KAAK;KAC5B;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAa,EAAE,GAAgB;IAC3D,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,WAAW,CAAC,uBAAuB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,GAAG,GAAG,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9D,IAAI,aAAa,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAEnC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACpE,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,mBAAmB,EAAE,CAAC;YACvC,OAAO,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,WAAW,CAAC,oBAAqB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACnE,CAAC;AACH,CAAC"}
|