@noclaf/cli 0.4.14 → 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.
Files changed (103) hide show
  1. package/dist/auth.js +2 -1
  2. package/dist/auth.js.map +1 -1
  3. package/dist/brand.js +82 -0
  4. package/dist/brand.js.map +1 -0
  5. package/dist/cli/commands/auth.js +91 -58
  6. package/dist/cli/commands/auth.js.map +1 -1
  7. package/dist/cli/commands/init/auth-step.js +48 -0
  8. package/dist/cli/commands/init/auth-step.js.map +1 -0
  9. package/dist/cli/commands/init/clients-step.js +76 -0
  10. package/dist/cli/commands/init/clients-step.js.map +1 -0
  11. package/dist/cli/commands/init/context-step.js +66 -0
  12. package/dist/cli/commands/init/context-step.js.map +1 -0
  13. package/dist/cli/commands/init/index.js +67 -0
  14. package/dist/cli/commands/init/index.js.map +1 -0
  15. package/dist/cli/commands/init/project-step.js +105 -0
  16. package/dist/cli/commands/init/project-step.js.map +1 -0
  17. package/dist/cli/commands/init/provision-step.js +76 -0
  18. package/dist/cli/commands/init/provision-step.js.map +1 -0
  19. package/dist/cli/flows/clients.js +27 -17
  20. package/dist/cli/flows/clients.js.map +1 -1
  21. package/dist/cli.js +5 -5
  22. package/dist/cli.js.map +1 -1
  23. package/dist/config.js +19 -11
  24. package/dist/config.js.map +1 -1
  25. package/dist/constants.js +7 -8
  26. package/dist/constants.js.map +1 -1
  27. package/dist/lib/autopull.js +13 -0
  28. package/dist/lib/autopull.js.map +1 -0
  29. package/dist/lib/client-configs.js +37 -25
  30. package/dist/lib/client-configs.js.map +1 -1
  31. package/dist/lib/cowork-extension.js +42 -30
  32. package/dist/lib/cowork-extension.js.map +1 -1
  33. package/dist/lib/dependencies.js +83 -247
  34. package/dist/lib/dependencies.js.map +1 -1
  35. package/dist/lib/dependency-install.js +163 -0
  36. package/dist/lib/dependency-install.js.map +1 -0
  37. package/dist/lib/exec-delegate.js +2 -2
  38. package/dist/lib/exec-delegate.js.map +1 -1
  39. package/dist/lib/exec-engines.js +7 -6
  40. package/dist/lib/exec-engines.js.map +1 -1
  41. package/dist/lib/provision-apply.js +214 -0
  42. package/dist/lib/provision-apply.js.map +1 -0
  43. package/dist/lib/provision-collect.js +47 -0
  44. package/dist/lib/provision-collect.js.map +1 -0
  45. package/dist/lib/provision.js +8 -253
  46. package/dist/lib/provision.js.map +1 -1
  47. package/dist/lib/require-config.js +3 -2
  48. package/dist/lib/require-config.js.map +1 -1
  49. package/dist/lib/skills-cache.js +9 -8
  50. package/dist/lib/skills-cache.js.map +1 -1
  51. package/dist/lib/skills.js +30 -16
  52. package/dist/lib/skills.js.map +1 -1
  53. package/dist/lib/telemetry.js +2 -1
  54. package/dist/lib/telemetry.js.map +1 -1
  55. package/dist/lib/version-check.js +3 -2
  56. package/dist/lib/version-check.js.map +1 -1
  57. package/dist/mcp-server.js +107 -79
  58. package/dist/mcp-server.js.map +1 -1
  59. package/dist/tools/comment-task.js +32 -32
  60. package/dist/tools/comment-task.js.map +1 -1
  61. package/dist/tools/create-task.js +92 -101
  62. package/dist/tools/create-task.js.map +1 -1
  63. package/dist/tools/delegate-exec.js +4 -3
  64. package/dist/tools/delegate-exec.js.map +1 -1
  65. package/dist/tools/end-allocation.js +19 -32
  66. package/dist/tools/end-allocation.js.map +1 -1
  67. package/dist/tools/end-task-allocation.js +17 -26
  68. package/dist/tools/end-task-allocation.js.map +1 -1
  69. package/dist/tools/exec-status.js +4 -3
  70. package/dist/tools/exec-status.js.map +1 -1
  71. package/dist/tools/get-active-allocation.js +53 -60
  72. package/dist/tools/get-active-allocation.js.map +1 -1
  73. package/dist/tools/get-context.js +4 -3
  74. package/dist/tools/get-context.js.map +1 -1
  75. package/dist/tools/get-task.js +144 -142
  76. package/dist/tools/get-task.js.map +1 -1
  77. package/dist/tools/list-my-allocations.js +35 -43
  78. package/dist/tools/list-my-allocations.js.map +1 -1
  79. package/dist/tools/list-projects.js +3 -2
  80. package/dist/tools/list-projects.js.map +1 -1
  81. package/dist/tools/list-tasks.js +117 -124
  82. package/dist/tools/list-tasks.js.map +1 -1
  83. package/dist/tools/move-task.js +37 -39
  84. package/dist/tools/move-task.js.map +1 -1
  85. package/dist/tools/plan.js +3 -2
  86. package/dist/tools/plan.js.map +1 -1
  87. package/dist/tools/record-delivery.js +4 -3
  88. package/dist/tools/record-delivery.js.map +1 -1
  89. package/dist/tools/set-project.js +9 -4
  90. package/dist/tools/set-project.js.map +1 -1
  91. package/dist/tools/start-allocation.js +16 -26
  92. package/dist/tools/start-allocation.js.map +1 -1
  93. package/dist/tools/start-task-allocation.js +72 -92
  94. package/dist/tools/start-task-allocation.js.map +1 -1
  95. package/dist/tools/update-task.js +149 -168
  96. package/dist/tools/update-task.js.map +1 -1
  97. package/dist/tools/validate-plan.js +3 -2
  98. package/dist/tools/validate-plan.js.map +1 -1
  99. package/package.json +1 -1
  100. package/dist/cli/commands/init.js +0 -336
  101. package/dist/cli/commands/init.js.map +0 -1
  102. package/dist/logo.js +0 -17
  103. package/dist/logo.js.map +0 -1
@@ -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 { insertTaskHistory } from '../lib/task-history.js';
5
+ import { brand } from '../brand.js';
5
6
  const TASK_STATUS = [
6
7
  'backlog',
7
8
  'todo',
@@ -20,9 +21,9 @@ const ArgsSchema = z
20
21
  })
21
22
  .strict();
22
23
  export const definition = {
23
- name: 'nos_move_task',
24
+ name: `${brand.toolPrefix}move_task`,
24
25
  description: 'Atalho pra mudar o status de uma tarefa (move entre colunas do Kanban). ' +
25
- 'Equivale a `nos_update_task` passando só o campo status. ' +
26
+ `Equivale a \`${brand.toolPrefix}update_task\` passando só o campo status. ` +
26
27
  '⚠️ Mover para status terminal (done/qa/code_review/rejected/production) NÃO para o timer. ' +
27
28
  'Se há task_allocation ativa nessa task, pergunte ao usuário se quer encerrar o timer junto.',
28
29
  inputSchema: {
@@ -33,49 +34,53 @@ export const definition = {
33
34
  project_id: {
34
35
  type: 'string',
35
36
  format: 'uuid',
36
- description: 'Override do projeto. Se omitido, usa o projeto ativo (nos_set_project) ou o default.',
37
+ description: `Override do projeto. Se omitido, usa o projeto ativo (${brand.toolPrefix}set_project) ou o default.`,
37
38
  },
38
39
  },
39
40
  required: ['task_id', 'status'],
40
41
  additionalProperties: false,
41
42
  },
42
43
  };
43
- export async function handler(args, ctx) {
44
- const parsed = ArgsSchema.safeParse(args);
45
- if (!parsed.success) {
46
- return errorResult(`Argumento inválido: ${parsed.error.message}`);
47
- }
48
- const { task_id, status } = parsed.data;
49
- const cfg = resolveProjectConfig(ctx, parsed.data.project_id);
50
- if (isErrorResult(cfg))
51
- return cfg;
52
- const { supabase } = ctx;
44
+ /** Monta o payload de resposta do move_task, decidindo previous_status/already_in_status. Pura. */
45
+ export function buildMoveTaskResult(current, taskId, status) {
46
+ const alreadyInStatus = current.status === status;
47
+ return {
48
+ task_id: taskId,
49
+ key: current.key,
50
+ title: current.title,
51
+ status,
52
+ previous_status: alreadyInStatus ? status : current.status,
53
+ already_in_status: alreadyInStatus,
54
+ };
55
+ }
56
+ async function loadTaskForMove(supabase, taskId, projectId) {
53
57
  const currentRes = await supabase
54
58
  .from('tasks')
55
59
  .select('id, key, title, status')
56
- .eq('id', task_id)
57
- .eq('project_id', cfg.project_id)
60
+ .eq('id', taskId)
61
+ .eq('project_id', projectId)
58
62
  .maybeSingle();
59
63
  if (currentRes.error)
60
64
  return errorResult(`Erro ao buscar tarefa: ${currentRes.error.message}`);
61
65
  if (!currentRes.data)
62
66
  return errorResult('Tarefa não encontrada ou fora do projeto atual.');
63
- const current = currentRes.data;
64
- if (current.status === status) {
65
- return jsonResult({
66
- task_id,
67
- key: current.key,
68
- title: current.title,
69
- status,
70
- previous_status: status,
71
- already_in_status: true,
72
- });
73
- }
74
- const updateRes = await supabase
75
- .from('tasks')
76
- .update({ status })
77
- .eq('id', task_id)
78
- .eq('project_id', cfg.project_id);
67
+ return currentRes.data;
68
+ }
69
+ export async function handler(args, ctx) {
70
+ const parsed = ArgsSchema.safeParse(args);
71
+ if (!parsed.success)
72
+ return errorResult(`Argumento inválido: ${parsed.error.message}`);
73
+ const { task_id, status } = parsed.data;
74
+ const cfg = resolveProjectConfig(ctx, parsed.data.project_id);
75
+ if (isErrorResult(cfg))
76
+ return cfg;
77
+ const { supabase } = ctx;
78
+ const current = await loadTaskForMove(supabase, task_id, cfg.project_id);
79
+ if (isErrorResult(current))
80
+ return current;
81
+ if (current.status === status)
82
+ return jsonResult(buildMoveTaskResult(current, task_id, status));
83
+ const updateRes = await supabase.from('tasks').update({ status }).eq('id', task_id).eq('project_id', cfg.project_id);
79
84
  if (updateRes.error)
80
85
  return errorResult(`Erro ao mover tarefa: ${updateRes.error.message}`);
81
86
  await insertTaskHistory(supabase, {
@@ -86,13 +91,6 @@ export async function handler(args, ctx) {
86
91
  old_value: current.status,
87
92
  new_value: status,
88
93
  });
89
- return jsonResult({
90
- task_id,
91
- key: current.key,
92
- title: current.title,
93
- status,
94
- previous_status: current.status,
95
- already_in_status: false,
96
- });
94
+ return jsonResult(buildMoveTaskResult(current, task_id, status));
97
95
  }
98
96
  //# sourceMappingURL=move-task.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"move-task.js","sourceRoot":"","sources":["../../src/tools/move-task.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"move-task.js","sourceRoot":"","sources":["../../src/tools/move-task.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { existsSync } from 'node:fs';
3
3
  import { jsonResult, errorResult } from '../lib/tool-result.js';
4
4
  import { runPlan } from '../lib/plan-delegate.js';
5
5
  import { ENGINES, PLAN_ENGINE } from '../lib/exec-engines.js';
6
+ import { brand } from '../brand.js';
6
7
  const ArgsSchema = z
7
8
  .object({
8
9
  project: z.string().min(1),
@@ -11,10 +12,10 @@ const ArgsSchema = z
11
12
  })
12
13
  .strict();
13
14
  export const definition = {
14
- name: 'noclaf_plan',
15
+ name: `${brand.cliToolPrefix}plan`,
15
16
  description: 'Roda o engine PENSANTE (claude ou codex local, na assinatura — sem API) sobre a raiz do ' +
16
17
  'projeto e escreve/refina o `plan.md` de rascunho pré-SDD. NÃO implementa código, não cria ' +
17
- 'worktree e não roda checks — pra isso use `noclaf_delegate_exec`. Se o `plan.md` não existe, ' +
18
+ `worktree e não roda checks — pra isso use \`${brand.cliToolPrefix}delegate_exec\`. Se o \`plan.md\` não existe, ` +
18
19
  'semeia a partir de um template; se existe, refina o conteúdo atual.',
19
20
  inputSchema: {
20
21
  type: 'object',
@@ -1 +1 @@
1
- {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/tools/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,UAAU,GAAG,CAAC;KACjB,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE;CACnC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,IAAI,EAAE,aAAa;IACnB,WAAW,EACT,0FAA0F;QAC1F,4FAA4F;QAC5F,+FAA+F;QAC/F,qEAAqE;IACvE,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0DAA0D;aACxE;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2DAA2D;aACzE;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC;gBAClB,WAAW,EAAE,oCAAoC,WAAW,GAAG;aAChE;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC;QACpC,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;IACD,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IACrD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,OAAO,WAAW,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/D,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,IAAI,mBAAmB,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5E,CAAC"}
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/tools/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,UAAU,GAAG,CAAC;KACjB,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE;CACnC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,IAAI,EAAE,GAAG,KAAK,CAAC,aAAa,MAAM;IAClC,WAAW,EACT,0FAA0F;QAC1F,4FAA4F;QAC5F,+CAA+C,KAAK,CAAC,aAAa,gDAAgD;QAClH,qEAAqE;IACvE,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0DAA0D;aACxE;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2DAA2D;aACzE;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC;gBAClB,WAAW,EAAE,oCAAoC,WAAW,GAAG;aAChE;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC;QACpC,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;IACD,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IACrD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,OAAO,WAAW,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/D,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,IAAI,mBAAmB,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5E,CAAC"}
@@ -1,6 +1,7 @@
1
1
  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
+ import { brand, env } from '../brand.js';
4
5
  const ArgsSchema = z
5
6
  .object({
6
7
  title: z.string().min(1),
@@ -11,7 +12,7 @@ const ArgsSchema = z
11
12
  })
12
13
  .strict();
13
14
  export const definition = {
14
- name: 'nos_record_delivery',
15
+ name: `${brand.toolPrefix}record_delivery`,
15
16
  description: 'Registra uma ENTREGA do loop de build (um ticket concluído / PR aberto) na analítica ' +
16
17
  'de entrega do NOS. Chamado pelo `/build` no fecho. Guarda título, PR, iterações e ' +
17
18
  'vincula à tarefa/projeto. Uma chamada por ticket entregue.',
@@ -35,7 +36,7 @@ export const definition = {
35
36
  project_id: {
36
37
  type: 'string',
37
38
  format: 'uuid',
38
- description: 'Override do projeto. Se omitido, usa o ativo (nos_set_project) ou o default.',
39
+ description: `Override do projeto. Se omitido, usa o ativo (${brand.toolPrefix}set_project) ou o default.`,
39
40
  },
40
41
  },
41
42
  required: ['title'],
@@ -57,7 +58,7 @@ export async function handler(args, ctx) {
57
58
  title: parsed.data.title,
58
59
  pr_url: parsed.data.pr_url ?? null,
59
60
  iterations: parsed.data.iterations ?? null,
60
- client: process.env.NOCLAF_CLIENT ?? null,
61
+ client: env('CLIENT') ?? null,
61
62
  };
62
63
  // `deliveries` ainda não está nos types gerados (rode `npm run gen:types` após a
63
64
  // migration) — usamos o client destipado só pra este insert.
@@ -1 +1 @@
1
- {"version":3,"file":"record-delivery.js","sourceRoot":"","sources":["../../src/tools/record-delivery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"record-delivery.js","sourceRoot":"","sources":["../../src/tools/record-delivery.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,25 @@
1
1
  import { z } from 'zod';
2
2
  import { jsonResult, errorResult } from '../lib/tool-result.js';
3
3
  import { setActiveProjectId } from '../lib/active-project.js';
4
+ import { brand } from '../brand.js';
4
5
  const ArgsSchema = z
5
6
  .object({
6
7
  project_id: z.string().uuid(),
7
8
  })
8
9
  .strict();
9
10
  export const definition = {
10
- name: 'nos_set_project',
11
+ name: `${brand.toolPrefix}set_project`,
11
12
  description: 'Define o projeto ativo da sessão (em memória, dura enquanto o servidor estiver ' +
12
13
  'rodando). As tools de tarefa/alocação passam a operar nesse projeto, até você trocar ' +
13
- 'de novo. Use `nos_list_projects` antes para descobrir os ids.',
14
+ `de novo. Use \`${brand.toolPrefix}list_projects\` antes para descobrir os ids.`,
14
15
  inputSchema: {
15
16
  type: 'object',
16
17
  properties: {
17
- project_id: { type: 'string', format: 'uuid', description: 'UUID do projeto (de nos_list_projects).' },
18
+ project_id: {
19
+ type: 'string',
20
+ format: 'uuid',
21
+ description: `UUID do projeto (de ${brand.toolPrefix}list_projects).`,
22
+ },
18
23
  },
19
24
  required: ['project_id'],
20
25
  additionalProperties: false,
@@ -35,7 +40,7 @@ export async function handler(args, ctx) {
35
40
  if (error)
36
41
  return errorResult(`Erro ao validar projeto: ${error.message}`);
37
42
  if (!data) {
38
- return errorResult('Projeto não encontrado ou sem acesso. Confira o id em `nos_list_projects`.');
43
+ return errorResult(`Projeto não encontrado ou sem acesso. Confira o id em \`${brand.toolPrefix}list_projects\`.`);
39
44
  }
40
45
  setActiveProjectId(project_id);
41
46
  return jsonResult({
@@ -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;AAE9D,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,iBAAiB;IACvB,WAAW,EACT,iFAAiF;QACjF,uFAAuF;QACvF,+DAA+D;IACjE,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,yCAAyC,EAAE;SACvG;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,4EAA4E,CAAC,CAAC;IACnG,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
+ {"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: 'nos_start_allocation',
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
- allocation_id: activeRes.data.id,
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;AAErD,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EACT,qFAAqF;QACrF,yCAAyC;IAC3C,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;QACd,oBAAoB,EAAE,KAAK;KAC5B;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAc,EAAE,GAAgB;IAC5D,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC;IAEzB,MAAM,SAAS,GAAG,MAAM,QAAQ;SAC7B,IAAI,CAAC,aAAa,CAAC;SACnB,MAAM,CAAC,gBAAgB,CAAC;SACxB,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;SAC1B,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC;SACpB,WAAW,EAAE,CAAC;IACjB,IAAI,SAAS,CAAC,KAAK;QAAE,OAAO,WAAW,CAAC,kCAAkC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAErG,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;QACnB,OAAO,UAAU,CAAC;YAChB,aAAa,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE;YAChC,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;YACrC,eAAe,EAAE,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;YACjE,cAAc,EAAE,IAAI;SACrB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,QAAQ;SAC7B,IAAI,CAAC,aAAa,CAAC;SACnB,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;SAChC,MAAM,CAAC,gBAAgB,CAAC;SACxB,MAAM,EAAE,CAAC;IACZ,IAAI,SAAS,CAAC,KAAK;QAAE,OAAO,WAAW,CAAC,6BAA6B,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAEhG,OAAO,UAAU,CAAC;QAChB,aAAa,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE;QAChC,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;QACrC,eAAe,EAAE,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;QACjE,cAAc,EAAE,KAAK;KACtB,CAAC,CAAC;AACL,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: 'nos_start_task_allocation',
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: 'Override do projeto. Se omitido, usa o projeto ativo (nos_set_project) ou o default.',
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
- // Valida task no projeto
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
- // Garante allocation ativa
57
- let allocationId;
58
- let allocationWasCreated = false;
59
- const activeAllocRes = await supabase
60
- .from('allocations')
61
- .select('id')
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":"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"}
1
+ {"version":3,"file":"start-task-allocation.js","sourceRoot":"","sources":["../../src/tools/start-task-allocation.ts"],"names":[],"mappings":"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"}