@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set-project.js","sourceRoot":"","sources":["../../src/tools/set-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"set-project.js","sourceRoot":"","sources":["../../src/tools/set-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,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;CAC9B,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,IAAI,EAAE,GAAG,KAAK,CAAC,UAAU,aAAa;IACtC,WAAW,EACT,iFAAiF;QACjF,uFAAuF;QACvF,kBAAkB,KAAK,CAAC,UAAU,8CAA8C;IAClF,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,MAAM;gBACd,WAAW,EAAE,uBAAuB,KAAK,CAAC,UAAU,iBAAiB;aACtE;SACF;QACD,QAAQ,EAAE,CAAC,YAAY,CAAC;QACxB,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;IACD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAEnC,gFAAgF;IAChF,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,GAAG,CAAC,QAAQ;SACvC,IAAI,CAAC,UAAU,CAAC;SAChB,MAAM,CAAC,UAAU,CAAC;SAClB,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC;SACpB,WAAW,EAAE,CAAC;IAEjB,IAAI,KAAK;QAAE,OAAO,WAAW,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3E,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,WAAW,CAAC,2DAA2D,KAAK,CAAC,UAAU,kBAAkB,CAAC,CAAC;IACpH,CAAC;IAED,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAE/B,OAAO,UAAU,CAAC;QAChB,iBAAiB,EAAE,IAAI,CAAC,EAAE;QAC1B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,EAAE,0BAA0B,IAAI,CAAC,IAAI,IAAI;KACjD,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
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}start_allocation`,
|
|
5
6
|
description: 'Inicia uma alocação (bate o ponto) para o usuário atual. Se já existe uma alocação ' +
|
|
6
7
|
'ativa, retorna ela sem criar duplicada.',
|
|
7
8
|
inputSchema: {
|
|
@@ -10,36 +11,25 @@ export const definition = {
|
|
|
10
11
|
additionalProperties: false,
|
|
11
12
|
},
|
|
12
13
|
};
|
|
14
|
+
/** Monta o payload de status de alocação (nova ou já ativa). Pura. */
|
|
15
|
+
export function formatAllocationStatus(row, alreadyActive) {
|
|
16
|
+
return {
|
|
17
|
+
allocation_id: row.id,
|
|
18
|
+
start_time: row.start_time,
|
|
19
|
+
elapsed_seconds: durationSeconds(row.start_time, null),
|
|
20
|
+
already_active: alreadyActive,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
13
23
|
export async function handler(_args, ctx) {
|
|
14
24
|
const { supabase } = ctx;
|
|
15
|
-
const activeRes = await supabase
|
|
16
|
-
.from('allocations')
|
|
17
|
-
.select('id, start_time')
|
|
18
|
-
.eq('user_id', ctx.user.id)
|
|
19
|
-
.is('end_time', null)
|
|
20
|
-
.maybeSingle();
|
|
25
|
+
const activeRes = await supabase.from('allocations').select('id, start_time').eq('user_id', ctx.user.id).is('end_time', null).maybeSingle();
|
|
21
26
|
if (activeRes.error)
|
|
22
27
|
return errorResult(`Erro ao buscar alocação ativa: ${activeRes.error.message}`);
|
|
23
|
-
if (activeRes.data)
|
|
24
|
-
return jsonResult(
|
|
25
|
-
|
|
26
|
-
start_time: activeRes.data.start_time,
|
|
27
|
-
elapsed_seconds: durationSeconds(activeRes.data.start_time, null),
|
|
28
|
-
already_active: true,
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
const insertRes = await supabase
|
|
32
|
-
.from('allocations')
|
|
33
|
-
.insert({ user_id: ctx.user.id })
|
|
34
|
-
.select('id, start_time')
|
|
35
|
-
.single();
|
|
28
|
+
if (activeRes.data)
|
|
29
|
+
return jsonResult(formatAllocationStatus(activeRes.data, true));
|
|
30
|
+
const insertRes = await supabase.from('allocations').insert({ user_id: ctx.user.id }).select('id, start_time').single();
|
|
36
31
|
if (insertRes.error)
|
|
37
32
|
return errorResult(`Erro ao iniciar alocação: ${insertRes.error.message}`);
|
|
38
|
-
return jsonResult(
|
|
39
|
-
allocation_id: insertRes.data.id,
|
|
40
|
-
start_time: insertRes.data.start_time,
|
|
41
|
-
elapsed_seconds: durationSeconds(insertRes.data.start_time, null),
|
|
42
|
-
already_active: false,
|
|
43
|
-
});
|
|
33
|
+
return jsonResult(formatAllocationStatus(insertRes.data, false));
|
|
44
34
|
}
|
|
45
35
|
//# sourceMappingURL=start-allocation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start-allocation.js","sourceRoot":"","sources":["../../src/tools/start-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":"start-allocation.js","sourceRoot":"","sources":["../../src/tools/start-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,kBAAkB;IAC3C,WAAW,EACT,qFAAqF;QACrF,yCAAyC;IAC3C,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;QACd,oBAAoB,EAAE,KAAK;KAC5B;CACF,CAAC;AAEF,sEAAsE;AACtE,MAAM,UAAU,sBAAsB,CACpC,GAAuC,EACvC,aAAsB;IAEtB,OAAO;QACL,aAAa,EAAE,GAAG,CAAC,EAAE;QACrB,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,eAAe,EAAE,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC;QACtD,cAAc,EAAE,aAAa;KAC9B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAc,EAAE,GAAgB;IAC5D,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC;IAEzB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5I,IAAI,SAAS,CAAC,KAAK;QAAE,OAAO,WAAW,CAAC,kCAAkC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACrG,IAAI,SAAS,CAAC,IAAI;QAAE,OAAO,UAAU,CAAC,sBAAsB,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAEpF,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,MAAM,EAAE,CAAC;IACxH,IAAI,SAAS,CAAC,KAAK;QAAE,OAAO,WAAW,CAAC,6BAA6B,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAEhG,OAAO,UAAU,CAAC,sBAAsB,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -2,6 +2,7 @@ import { z } from 'zod';
|
|
|
2
2
|
import { jsonResult, errorResult } from '../lib/tool-result.js';
|
|
3
3
|
import { resolveProjectConfig, isErrorResult } from '../lib/require-config.js';
|
|
4
4
|
import { durationSeconds } from '../lib/duration.js';
|
|
5
|
+
import { brand } from '../brand.js';
|
|
5
6
|
const ArgsSchema = z
|
|
6
7
|
.object({
|
|
7
8
|
task_id: z.string().uuid(),
|
|
@@ -10,7 +11,7 @@ const ArgsSchema = z
|
|
|
10
11
|
})
|
|
11
12
|
.strict();
|
|
12
13
|
export const definition = {
|
|
13
|
-
name:
|
|
14
|
+
name: `${brand.toolPrefix}start_task_allocation`,
|
|
14
15
|
description: 'Começa a cronometrar tempo numa task específica. Se não há alocação ativa (ponto do dia), ' +
|
|
15
16
|
'abre uma. Se já existe outra task_allocation ativa, fecha ela e abre essa — ' +
|
|
16
17
|
'transição entre tasks é atômica, basta chamar isso na próxima task.',
|
|
@@ -22,120 +23,99 @@ export const definition = {
|
|
|
22
23
|
project_id: {
|
|
23
24
|
type: 'string',
|
|
24
25
|
format: 'uuid',
|
|
25
|
-
description:
|
|
26
|
+
description: `Override do projeto. Se omitido, usa o projeto ativo (${brand.toolPrefix}set_project) ou o default.`,
|
|
26
27
|
},
|
|
27
28
|
},
|
|
28
29
|
required: ['task_id'],
|
|
29
30
|
additionalProperties: false,
|
|
30
31
|
},
|
|
31
32
|
};
|
|
33
|
+
/** Monta o resumo da task_allocation anterior fechada, calculando a duração. Pura. */
|
|
34
|
+
export function buildClosedPreviousSummary(prev, closed, prevTaskKey) {
|
|
35
|
+
return {
|
|
36
|
+
task_allocation_id: prev.id,
|
|
37
|
+
task_id: prev.task_id,
|
|
38
|
+
task_key: prevTaskKey,
|
|
39
|
+
duration_seconds: durationSeconds(closed.start_time, closed.end_time),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/** Monta o payload de resposta do start_task_allocation. Pura. */
|
|
43
|
+
export function formatStartTaskAllocationResult(taskAllocation, task, closedPrevious, allocationWasCreated) {
|
|
44
|
+
return {
|
|
45
|
+
task_allocation_id: taskAllocation.id,
|
|
46
|
+
task: { id: task.id, key: task.key, title: task.title },
|
|
47
|
+
started_at: taskAllocation.start_time,
|
|
48
|
+
is_overtime: taskAllocation.is_overtime,
|
|
49
|
+
closed_previous: closedPrevious,
|
|
50
|
+
allocation_was_created: allocationWasCreated,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/** Garante uma allocation (ponto) ativa pro usuário — reaproveita ou cria. */
|
|
54
|
+
async function ensureActiveAllocation(supabase, userId) {
|
|
55
|
+
const activeAllocRes = await supabase.from('allocations').select('id').eq('user_id', userId).is('end_time', null).maybeSingle();
|
|
56
|
+
if (activeAllocRes.error)
|
|
57
|
+
return errorResult(`Erro ao buscar alocação ativa: ${activeAllocRes.error.message}`);
|
|
58
|
+
if (activeAllocRes.data)
|
|
59
|
+
return { allocationId: activeAllocRes.data.id, wasCreated: false };
|
|
60
|
+
const newAlloc = await supabase.from('allocations').insert({ user_id: userId }).select('id').single();
|
|
61
|
+
if (newAlloc.error)
|
|
62
|
+
return errorResult(`Erro ao iniciar alocação: ${newAlloc.error.message}`);
|
|
63
|
+
return { allocationId: newAlloc.data.id, wasCreated: true };
|
|
64
|
+
}
|
|
65
|
+
/** Fecha a task_allocation ativa anterior do usuário, se existir. */
|
|
66
|
+
async function closePreviousTaskAllocation(supabase, userId, now) {
|
|
67
|
+
const activeRes = await supabase
|
|
68
|
+
.from('task_allocations')
|
|
69
|
+
.select('id, task_id, start_time')
|
|
70
|
+
.eq('user_id', userId)
|
|
71
|
+
.is('end_time', null)
|
|
72
|
+
.maybeSingle();
|
|
73
|
+
if (activeRes.error)
|
|
74
|
+
return errorResult(`Erro ao buscar task_allocation ativa: ${activeRes.error.message}`);
|
|
75
|
+
if (!activeRes.data)
|
|
76
|
+
return null;
|
|
77
|
+
const prev = activeRes.data;
|
|
78
|
+
const closeRes = await supabase
|
|
79
|
+
.from('task_allocations')
|
|
80
|
+
.update({ end_time: now })
|
|
81
|
+
.eq('id', prev.id)
|
|
82
|
+
.select('id, start_time, end_time')
|
|
83
|
+
.single();
|
|
84
|
+
if (closeRes.error)
|
|
85
|
+
return errorResult(`Erro ao fechar task_allocation anterior: ${closeRes.error.message}`);
|
|
86
|
+
// Pega o key da task anterior pra retorno (best-effort)
|
|
87
|
+
const prevTask = await supabase.from('tasks').select('id, key').eq('id', prev.task_id).maybeSingle();
|
|
88
|
+
return buildClosedPreviousSummary(prev, closeRes.data, prevTask.data?.key ?? null);
|
|
89
|
+
}
|
|
32
90
|
export async function handler(args, ctx) {
|
|
33
91
|
const parsed = ArgsSchema.safeParse(args);
|
|
34
|
-
if (!parsed.success)
|
|
92
|
+
if (!parsed.success)
|
|
35
93
|
return errorResult(`Argumento inválido: ${parsed.error.message}`);
|
|
36
|
-
}
|
|
37
94
|
const { task_id, is_overtime } = parsed.data;
|
|
38
95
|
const cfg = resolveProjectConfig(ctx, parsed.data.project_id);
|
|
39
96
|
if (isErrorResult(cfg))
|
|
40
97
|
return cfg;
|
|
41
98
|
const { supabase } = ctx;
|
|
42
99
|
const now = new Date().toISOString();
|
|
43
|
-
|
|
44
|
-
const taskRes = await supabase
|
|
45
|
-
.from('tasks')
|
|
46
|
-
.select('id, key, title, project_id')
|
|
47
|
-
.eq('id', task_id)
|
|
48
|
-
.eq('project_id', cfg.project_id)
|
|
49
|
-
.maybeSingle();
|
|
100
|
+
const taskRes = await supabase.from('tasks').select('id, key, title, project_id').eq('id', task_id).eq('project_id', cfg.project_id).maybeSingle();
|
|
50
101
|
if (taskRes.error)
|
|
51
102
|
return errorResult(`Erro ao buscar tarefa: ${taskRes.error.message}`);
|
|
52
|
-
if (!taskRes.data)
|
|
103
|
+
if (!taskRes.data)
|
|
53
104
|
return errorResult('Tarefa não encontrada ou fora do projeto vinculado a este diretório.');
|
|
54
|
-
}
|
|
55
105
|
const task = taskRes.data;
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
.eq('user_id', ctx.user.id)
|
|
63
|
-
.is('end_time', null)
|
|
64
|
-
.maybeSingle();
|
|
65
|
-
if (activeAllocRes.error) {
|
|
66
|
-
return errorResult(`Erro ao buscar alocação ativa: ${activeAllocRes.error.message}`);
|
|
67
|
-
}
|
|
68
|
-
if (activeAllocRes.data) {
|
|
69
|
-
allocationId = activeAllocRes.data.id;
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
const newAlloc = await supabase
|
|
73
|
-
.from('allocations')
|
|
74
|
-
.insert({ user_id: ctx.user.id })
|
|
75
|
-
.select('id')
|
|
76
|
-
.single();
|
|
77
|
-
if (newAlloc.error)
|
|
78
|
-
return errorResult(`Erro ao iniciar alocação: ${newAlloc.error.message}`);
|
|
79
|
-
allocationId = newAlloc.data.id;
|
|
80
|
-
allocationWasCreated = true;
|
|
81
|
-
}
|
|
82
|
-
// Fecha task_allocation ativa anterior (se existir)
|
|
83
|
-
const activeTaskAllocRes = await supabase
|
|
84
|
-
.from('task_allocations')
|
|
85
|
-
.select('id, task_id, start_time')
|
|
86
|
-
.eq('user_id', ctx.user.id)
|
|
87
|
-
.is('end_time', null)
|
|
88
|
-
.maybeSingle();
|
|
89
|
-
if (activeTaskAllocRes.error) {
|
|
90
|
-
return errorResult(`Erro ao buscar task_allocation ativa: ${activeTaskAllocRes.error.message}`);
|
|
91
|
-
}
|
|
92
|
-
let closedPrevious = null;
|
|
93
|
-
if (activeTaskAllocRes.data) {
|
|
94
|
-
const prev = activeTaskAllocRes.data;
|
|
95
|
-
const closeRes = await supabase
|
|
96
|
-
.from('task_allocations')
|
|
97
|
-
.update({ end_time: now })
|
|
98
|
-
.eq('id', prev.id)
|
|
99
|
-
.select('id, start_time, end_time')
|
|
100
|
-
.single();
|
|
101
|
-
if (closeRes.error) {
|
|
102
|
-
return errorResult(`Erro ao fechar task_allocation anterior: ${closeRes.error.message}`);
|
|
103
|
-
}
|
|
104
|
-
// Pega o key da task anterior pra retorno (best-effort)
|
|
105
|
-
const prevTask = await supabase
|
|
106
|
-
.from('tasks')
|
|
107
|
-
.select('id, key')
|
|
108
|
-
.eq('id', prev.task_id)
|
|
109
|
-
.maybeSingle();
|
|
110
|
-
closedPrevious = {
|
|
111
|
-
task_allocation_id: prev.id,
|
|
112
|
-
task_id: prev.task_id,
|
|
113
|
-
task_key: prevTask.data?.key ?? null,
|
|
114
|
-
duration_seconds: durationSeconds(closeRes.data.start_time, closeRes.data.end_time),
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
// Insert nova task_allocation
|
|
106
|
+
const alloc = await ensureActiveAllocation(supabase, ctx.user.id);
|
|
107
|
+
if (isErrorResult(alloc))
|
|
108
|
+
return alloc;
|
|
109
|
+
const closedPrevious = await closePreviousTaskAllocation(supabase, ctx.user.id, now);
|
|
110
|
+
if (isErrorResult(closedPrevious))
|
|
111
|
+
return closedPrevious;
|
|
118
112
|
const insertRes = await supabase
|
|
119
113
|
.from('task_allocations')
|
|
120
|
-
.insert({
|
|
121
|
-
allocation_id: allocationId,
|
|
122
|
-
task_id,
|
|
123
|
-
user_id: ctx.user.id,
|
|
124
|
-
start_time: now,
|
|
125
|
-
is_overtime,
|
|
126
|
-
})
|
|
114
|
+
.insert({ allocation_id: alloc.allocationId, task_id, user_id: ctx.user.id, start_time: now, is_overtime })
|
|
127
115
|
.select('id, start_time, is_overtime')
|
|
128
116
|
.single();
|
|
129
|
-
if (insertRes.error)
|
|
117
|
+
if (insertRes.error)
|
|
130
118
|
return errorResult(`Erro ao iniciar task_allocation: ${insertRes.error.message}`);
|
|
131
|
-
|
|
132
|
-
return jsonResult({
|
|
133
|
-
task_allocation_id: insertRes.data.id,
|
|
134
|
-
task: { id: task.id, key: task.key, title: task.title },
|
|
135
|
-
started_at: insertRes.data.start_time,
|
|
136
|
-
is_overtime: insertRes.data.is_overtime,
|
|
137
|
-
closed_previous: closedPrevious,
|
|
138
|
-
allocation_was_created: allocationWasCreated,
|
|
139
|
-
});
|
|
119
|
+
return jsonResult(formatStartTaskAllocationResult(insertRes.data, task, closedPrevious, alloc.wasCreated));
|
|
140
120
|
}
|
|
141
121
|
//# sourceMappingURL=start-task-allocation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start-task-allocation.js","sourceRoot":"","sources":["../../src/tools/start-task-allocation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"start-task-allocation.js","sourceRoot":"","sources":["../../src/tools/start-task-allocation.ts"],"names":[],"mappings":"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"}
|