@noclaf/cli 0.4.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.
Files changed (120) hide show
  1. package/README.md +221 -0
  2. package/dist/auth.js +66 -0
  3. package/dist/auth.js.map +1 -0
  4. package/dist/cli/commands/auth.js +76 -0
  5. package/dist/cli/commands/auth.js.map +1 -0
  6. package/dist/cli/commands/init.js +291 -0
  7. package/dist/cli/commands/init.js.map +1 -0
  8. package/dist/cli/commands/skills.js +22 -0
  9. package/dist/cli/commands/skills.js.map +1 -0
  10. package/dist/cli/commands/sync.js +170 -0
  11. package/dist/cli/commands/sync.js.map +1 -0
  12. package/dist/cli/copy/auth.json +6 -0
  13. package/dist/cli/copy/flows.json +6 -0
  14. package/dist/cli/copy/init.json +19 -0
  15. package/dist/cli/copy/sync.json +3 -0
  16. package/dist/cli/copy.js +23 -0
  17. package/dist/cli/copy.js.map +1 -0
  18. package/dist/cli/flows/clients.js +108 -0
  19. package/dist/cli/flows/clients.js.map +1 -0
  20. package/dist/cli/flows/dependencies.js +68 -0
  21. package/dist/cli/flows/dependencies.js.map +1 -0
  22. package/dist/cli/flows/sections.js +45 -0
  23. package/dist/cli/flows/sections.js.map +1 -0
  24. package/dist/cli/ui/render.js +167 -0
  25. package/dist/cli/ui/render.js.map +1 -0
  26. package/dist/cli.js +25 -0
  27. package/dist/cli.js.map +1 -0
  28. package/dist/config.js +96 -0
  29. package/dist/config.js.map +1 -0
  30. package/dist/constants.js +10 -0
  31. package/dist/constants.js.map +1 -0
  32. package/dist/database.types.js +11 -0
  33. package/dist/database.types.js.map +1 -0
  34. package/dist/lib/active-project.js +28 -0
  35. package/dist/lib/active-project.js.map +1 -0
  36. package/dist/lib/client-configs.js +179 -0
  37. package/dist/lib/client-configs.js.map +1 -0
  38. package/dist/lib/client-install.js +40 -0
  39. package/dist/lib/client-install.js.map +1 -0
  40. package/dist/lib/colors.js +67 -0
  41. package/dist/lib/colors.js.map +1 -0
  42. package/dist/lib/cowork-extension.js +131 -0
  43. package/dist/lib/cowork-extension.js.map +1 -0
  44. package/dist/lib/dependencies.js +159 -0
  45. package/dist/lib/dependencies.js.map +1 -0
  46. package/dist/lib/duration.js +5 -0
  47. package/dist/lib/duration.js.map +1 -0
  48. package/dist/lib/file-merge.js +33 -0
  49. package/dist/lib/file-merge.js.map +1 -0
  50. package/dist/lib/hooks.js +231 -0
  51. package/dist/lib/hooks.js.map +1 -0
  52. package/dist/lib/project-context.js +105 -0
  53. package/dist/lib/project-context.js.map +1 -0
  54. package/dist/lib/prompts.js +62 -0
  55. package/dist/lib/prompts.js.map +1 -0
  56. package/dist/lib/provision.js +222 -0
  57. package/dist/lib/provision.js.map +1 -0
  58. package/dist/lib/require-config.js +31 -0
  59. package/dist/lib/require-config.js.map +1 -0
  60. package/dist/lib/sections.js +85 -0
  61. package/dist/lib/sections.js.map +1 -0
  62. package/dist/lib/skill-serve.js +71 -0
  63. package/dist/lib/skill-serve.js.map +1 -0
  64. package/dist/lib/skills-cache.js +89 -0
  65. package/dist/lib/skills-cache.js.map +1 -0
  66. package/dist/lib/skills.js +219 -0
  67. package/dist/lib/skills.js.map +1 -0
  68. package/dist/lib/targets.js +150 -0
  69. package/dist/lib/targets.js.map +1 -0
  70. package/dist/lib/task-history.js +14 -0
  71. package/dist/lib/task-history.js.map +1 -0
  72. package/dist/lib/telemetry.js +32 -0
  73. package/dist/lib/telemetry.js.map +1 -0
  74. package/dist/lib/tool-result.js +12 -0
  75. package/dist/lib/tool-result.js.map +1 -0
  76. package/dist/lib/version-check.js +88 -0
  77. package/dist/lib/version-check.js.map +1 -0
  78. package/dist/logo.js +17 -0
  79. package/dist/logo.js.map +1 -0
  80. package/dist/mcp-server.js +162 -0
  81. package/dist/mcp-server.js.map +1 -0
  82. package/dist/spinner.js +12 -0
  83. package/dist/spinner.js.map +1 -0
  84. package/dist/supabase.js +95 -0
  85. package/dist/supabase.js.map +1 -0
  86. package/dist/tools/comment-task.js +80 -0
  87. package/dist/tools/comment-task.js.map +1 -0
  88. package/dist/tools/create-task.js +194 -0
  89. package/dist/tools/create-task.js.map +1 -0
  90. package/dist/tools/end-allocation.js +59 -0
  91. package/dist/tools/end-allocation.js.map +1 -0
  92. package/dist/tools/end-task-allocation.js +51 -0
  93. package/dist/tools/end-task-allocation.js.map +1 -0
  94. package/dist/tools/get-active-allocation.js +106 -0
  95. package/dist/tools/get-active-allocation.js.map +1 -0
  96. package/dist/tools/get-context.js +47 -0
  97. package/dist/tools/get-context.js.map +1 -0
  98. package/dist/tools/get-task.js +223 -0
  99. package/dist/tools/get-task.js.map +1 -0
  100. package/dist/tools/index.js +34 -0
  101. package/dist/tools/index.js.map +1 -0
  102. package/dist/tools/list-my-allocations.js +87 -0
  103. package/dist/tools/list-my-allocations.js.map +1 -0
  104. package/dist/tools/list-projects.js +34 -0
  105. package/dist/tools/list-projects.js.map +1 -0
  106. package/dist/tools/list-tasks.js +213 -0
  107. package/dist/tools/list-tasks.js.map +1 -0
  108. package/dist/tools/move-task.js +98 -0
  109. package/dist/tools/move-task.js.map +1 -0
  110. package/dist/tools/set-project.js +47 -0
  111. package/dist/tools/set-project.js.map +1 -0
  112. package/dist/tools/start-allocation.js +45 -0
  113. package/dist/tools/start-allocation.js.map +1 -0
  114. package/dist/tools/start-task-allocation.js +141 -0
  115. package/dist/tools/start-task-allocation.js.map +1 -0
  116. package/dist/tools/update-task.js +256 -0
  117. package/dist/tools/update-task.js.map +1 -0
  118. package/dist/version.js +16 -0
  119. package/dist/version.js.map +1 -0
  120. package/package.json +62 -0
@@ -0,0 +1,59 @@
1
+ import { jsonResult, errorResult } from '../lib/tool-result.js';
2
+ import { durationSeconds } from '../lib/duration.js';
3
+ export const definition = {
4
+ name: 'nos_end_allocation',
5
+ description: '[ENCERRA O DIA] Bate ponto de SAÍDA do usuário e fecha qualquer task_allocation aberta. ' +
6
+ '⚠️ Use SOMENTE quando o usuário indicar explicitamente fim de expediente ' +
7
+ '("encerrar dia", "bati ponto", "saí"). Para parar APENAS o timer de uma task ' +
8
+ 'sem encerrar o dia, use `nos_end_task_allocation`.',
9
+ inputSchema: {
10
+ type: 'object',
11
+ properties: {},
12
+ additionalProperties: false,
13
+ },
14
+ };
15
+ export async function handler(_args, ctx) {
16
+ const { supabase } = ctx;
17
+ const now = new Date().toISOString();
18
+ const activeRes = await supabase
19
+ .from('allocations')
20
+ .select('id, start_time')
21
+ .eq('user_id', ctx.user.id)
22
+ .is('end_time', null)
23
+ .maybeSingle();
24
+ if (activeRes.error)
25
+ return errorResult(`Erro ao buscar alocação ativa: ${activeRes.error.message}`);
26
+ if (!activeRes.data)
27
+ return errorResult('Não há alocação ativa para encerrar.');
28
+ const allocationId = activeRes.data.id;
29
+ // Fecha task_allocations abertas dessa allocation (em paralelo com o close da allocation)
30
+ const [taskCloseRes, allocCloseRes] = await Promise.all([
31
+ supabase
32
+ .from('task_allocations')
33
+ .update({ end_time: now })
34
+ .eq('allocation_id', allocationId)
35
+ .is('end_time', null)
36
+ .select('id'),
37
+ supabase
38
+ .from('allocations')
39
+ .update({ end_time: now })
40
+ .eq('id', allocationId)
41
+ .select('id, start_time, end_time')
42
+ .single(),
43
+ ]);
44
+ if (taskCloseRes.error) {
45
+ return errorResult(`Erro ao fechar task_allocations: ${taskCloseRes.error.message}`);
46
+ }
47
+ if (allocCloseRes.error) {
48
+ return errorResult(`Erro ao encerrar alocação: ${allocCloseRes.error.message}`);
49
+ }
50
+ const closed = allocCloseRes.data;
51
+ return jsonResult({
52
+ allocation_id: closed.id,
53
+ start_time: closed.start_time,
54
+ end_time: closed.end_time,
55
+ duration_seconds: durationSeconds(closed.start_time, closed.end_time),
56
+ closed_task_allocations: (taskCloseRes.data ?? []).length,
57
+ });
58
+ }
59
+ //# sourceMappingURL=end-allocation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"end-allocation.js","sourceRoot":"","sources":["../../src/tools/end-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,oBAAoB;IAC1B,WAAW,EACT,0FAA0F;QAC1F,2EAA2E;QAC3E,+EAA+E;QAC/E,oDAAoD;IACtD,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;IACzB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,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;IACrG,IAAI,CAAC,SAAS,CAAC,IAAI;QAAE,OAAO,WAAW,CAAC,sCAAsC,CAAC,CAAC;IAEhF,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;IAEvC,0FAA0F;IAC1F,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACtD,QAAQ;aACL,IAAI,CAAC,kBAAkB,CAAC;aACxB,MAAM,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;aACzB,EAAE,CAAC,eAAe,EAAE,YAAY,CAAC;aACjC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC;aACpB,MAAM,CAAC,IAAI,CAAC;QACf,QAAQ;aACL,IAAI,CAAC,aAAa,CAAC;aACnB,MAAM,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;aACzB,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC;aACtB,MAAM,CAAC,0BAA0B,CAAC;aAClC,MAAM,EAAE;KACZ,CAAC,CAAC;IAEH,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;QACvB,OAAO,WAAW,CAAC,oCAAoC,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO,WAAW,CAAC,8BAA8B,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC;IAClC,OAAO,UAAU,CAAC;QAChB,aAAa,EAAE,MAAM,CAAC,EAAE;QACxB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,gBAAgB,EAAE,eAAe,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC;QACrE,uBAAuB,EAAE,CAAC,YAAY,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM;KAC1D,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { jsonResult, errorResult } from '../lib/tool-result.js';
2
+ import { durationSeconds } from '../lib/duration.js';
3
+ export const definition = {
4
+ name: 'nos_end_task_allocation',
5
+ description: '[PARA TIMER DE TASK] Para a task_allocation ativa. A alocação principal (ponto do dia) ' +
6
+ 'CONTINUA aberta. Use ao finalizar ou pausar uma task. ' +
7
+ 'Para encerrar o dia inteiro, use `nos_end_allocation`.',
8
+ inputSchema: {
9
+ type: 'object',
10
+ properties: {},
11
+ additionalProperties: false,
12
+ },
13
+ };
14
+ export async function handler(_args, ctx) {
15
+ const { supabase } = ctx;
16
+ 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();
23
+ if (activeRes.error)
24
+ return errorResult(`Erro ao buscar task_allocation ativa: ${activeRes.error.message}`);
25
+ if (!activeRes.data)
26
+ return errorResult('Não há task_allocation ativa.');
27
+ 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
+ if (closeRes.error)
35
+ return errorResult(`Erro ao parar task_allocation: ${closeRes.error.message}`);
36
+ // 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();
42
+ 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
+ });
50
+ }
51
+ //# sourceMappingURL=end-task-allocation.js.map
@@ -0,0 +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;AAErD,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,IAAI,EAAE,yBAAyB;IAC/B,WAAW,EACT,yFAAyF;QACzF,wDAAwD;QACxD,wDAAwD;IAC1D,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;IACzB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,MAAM,SAAS,GAAG,MAAM,QAAQ;SAC7B,IAAI,CAAC,kBAAkB,CAAC;SACxB,MAAM,CAAC,yBAAyB,CAAC;SACjC,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,yCAAyC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5G,IAAI,CAAC,SAAS,CAAC,IAAI;QAAE,OAAO,WAAW,CAAC,+BAA+B,CAAC,CAAC;IAEzE,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC;IAE9B,MAAM,QAAQ,GAAG,MAAM,QAAQ;SAC5B,IAAI,CAAC,kBAAkB,CAAC;SACxB,MAAM,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;SACzB,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;SACnB,MAAM,CAAC,0BAA0B,CAAC;SAClC,MAAM,EAAE,CAAC;IACZ,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;SAC3B,IAAI,CAAC,OAAO,CAAC;SACb,MAAM,CAAC,gBAAgB,CAAC;SACxB,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC;SACxB,WAAW,EAAE,CAAC;IACjB,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;QAChB,kBAAkB,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE;QACpC,IAAI;QACJ,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU;QACpC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ;QAChC,gBAAgB,EAAE,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;KACpF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,106 @@
1
+ import { jsonResult, errorResult } from '../lib/tool-result.js';
2
+ import { durationSeconds } from '../lib/duration.js';
3
+ export const definition = {
4
+ name: 'nos_get_active_allocation',
5
+ description: 'Retorna o estado atual de cronometragem do usuário: alocação ativa, task atual sendo ' +
6
+ 'cronometrada, e segmentos por task na alocação atual.',
7
+ inputSchema: {
8
+ type: 'object',
9
+ properties: {},
10
+ additionalProperties: false,
11
+ },
12
+ };
13
+ export async function handler(_args, ctx) {
14
+ const { supabase } = ctx;
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) => {
68
+ const t = tasksById.get(taskId);
69
+ return {
70
+ id: taskId,
71
+ key: t?.key ?? null,
72
+ title: t?.title ?? null,
73
+ project_name: t ? projectsById.get(t.project_id) ?? null : null,
74
+ };
75
+ };
76
+ const segments = segmentRows.map((s) => ({
77
+ task_allocation_id: s.id,
78
+ task: taskInfo(s.task_id),
79
+ start_time: s.start_time,
80
+ end_time: s.end_time,
81
+ duration_seconds: durationSeconds(s.start_time, s.end_time),
82
+ is_overtime: s.is_overtime,
83
+ }));
84
+ const activeSegment = segmentRows.find((s) => s.end_time === null);
85
+ const activeTask = activeSegment
86
+ ? {
87
+ task_allocation_id: activeSegment.id,
88
+ task: taskInfo(activeSegment.task_id),
89
+ start_time: activeSegment.start_time,
90
+ elapsed_seconds: durationSeconds(activeSegment.start_time, null),
91
+ is_overtime: activeSegment.is_overtime,
92
+ }
93
+ : null;
94
+ const totalSecondsToday = segments.reduce((acc, s) => acc + s.duration_seconds, 0);
95
+ return jsonResult({
96
+ allocation: {
97
+ id: allocation.id,
98
+ start_time: allocation.start_time,
99
+ elapsed_seconds: durationSeconds(allocation.start_time, null),
100
+ },
101
+ active_task: activeTask,
102
+ segments,
103
+ total_seconds_today: totalSecondsToday,
104
+ });
105
+ }
106
+ //# sourceMappingURL=get-active-allocation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-active-allocation.js","sourceRoot":"","sources":["../../src/tools/get-active-allocation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { z } from 'zod';
2
+ import { jsonResult, errorResult } from '../lib/tool-result.js';
3
+ import { fetchProjectContext, ProjectContextError } from '../lib/project-context.js';
4
+ import { resolveProjectConfig, isErrorResult } from '../lib/require-config.js';
5
+ const ArgsSchema = z
6
+ .object({
7
+ project_id: z.string().uuid().optional(),
8
+ })
9
+ .strict();
10
+ export const definition = {
11
+ name: 'nos_get_context',
12
+ description: 'Retorna o contexto completo do projeto NOS ativo: dados do projeto, repositórios, ' +
13
+ 'sprint ativa, membros e usuário autenticado. Use SEMPRE no início de uma conversa ' +
14
+ 'pra entender em que projeto você está operando. Sem projeto selecionado, use ' +
15
+ '`nos_list_projects` + `nos_set_project` antes.',
16
+ inputSchema: {
17
+ type: 'object',
18
+ properties: {
19
+ project_id: {
20
+ type: 'string',
21
+ format: 'uuid',
22
+ description: 'Override do projeto. Se omitido, usa o projeto ativo (nos_set_project) ou o default.',
23
+ },
24
+ },
25
+ additionalProperties: false,
26
+ },
27
+ };
28
+ export async function handler(args, ctx) {
29
+ const parsed = ArgsSchema.safeParse(args);
30
+ if (!parsed.success) {
31
+ return errorResult(`Argumento inválido: ${parsed.error.message}`);
32
+ }
33
+ const cfg = resolveProjectConfig(ctx, parsed.data.project_id);
34
+ if (isErrorResult(cfg))
35
+ return cfg;
36
+ try {
37
+ const data = await fetchProjectContext(ctx.supabase, cfg, ctx.user);
38
+ return jsonResult(data);
39
+ }
40
+ catch (err) {
41
+ if (err instanceof ProjectContextError) {
42
+ return errorResult(err.message);
43
+ }
44
+ return errorResult(`Erro inesperado: ${err.message}`);
45
+ }
46
+ }
47
+ //# sourceMappingURL=get-context.js.map
@@ -0,0 +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;AAE/E,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,iBAAiB;IACvB,WAAW,EACT,oFAAoF;QACpF,oFAAoF;QACpF,+EAA+E;QAC/E,gDAAgD;IAClD,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,MAAM;gBACd,WAAW,EAAE,sFAAsF;aACpG;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"}
@@ -0,0 +1,223 @@
1
+ import { z } from 'zod';
2
+ import { jsonResult, errorResult } from '../lib/tool-result.js';
3
+ import { resolveProjectConfig, isErrorResult } from '../lib/require-config.js';
4
+ const ArgsSchema = z
5
+ .object({
6
+ task_id: z.string().uuid(),
7
+ project_id: z.string().uuid().optional(),
8
+ })
9
+ .strict();
10
+ export const definition = {
11
+ name: 'nos_get_task',
12
+ description: 'Retorna detalhes completos de uma tarefa: descrição, assignees, checklist, comentários, ' +
13
+ 'histórico recente, repositórios vinculados e labels.',
14
+ inputSchema: {
15
+ type: 'object',
16
+ properties: {
17
+ task_id: { type: 'string', format: 'uuid' },
18
+ project_id: {
19
+ type: 'string',
20
+ format: 'uuid',
21
+ description: 'Override do projeto. Se omitido, usa o projeto ativo (nos_set_project) ou o default.',
22
+ },
23
+ },
24
+ required: ['task_id'],
25
+ additionalProperties: false,
26
+ },
27
+ };
28
+ async function fetchProfiles(supabase, userIds) {
29
+ if (userIds.length === 0)
30
+ return new Map();
31
+ const res = await supabase
32
+ .from('profiles')
33
+ .select('id, full_name, username, avatar_url')
34
+ .in('id', userIds);
35
+ if (res.error)
36
+ throw new Error(`Erro ao buscar perfis: ${res.error.message}`);
37
+ return new Map((res.data ?? []).map((p) => [
38
+ p.id,
39
+ { full_name: p.full_name, username: p.username, avatar_url: p.avatar_url },
40
+ ]));
41
+ }
42
+ export async function handler(args, ctx) {
43
+ const parsed = ArgsSchema.safeParse(args);
44
+ if (!parsed.success) {
45
+ return errorResult(`Argumento inválido: ${parsed.error.message}`);
46
+ }
47
+ const { task_id } = parsed.data;
48
+ const cfg = resolveProjectConfig(ctx, parsed.data.project_id);
49
+ if (isErrorResult(cfg))
50
+ return cfg;
51
+ const { supabase } = ctx;
52
+ const taskRes = await supabase
53
+ .from('tasks')
54
+ .select('*')
55
+ .eq('id', task_id)
56
+ .eq('project_id', cfg.project_id)
57
+ .maybeSingle();
58
+ if (taskRes.error)
59
+ return errorResult(`Erro ao buscar tarefa: ${taskRes.error.message}`);
60
+ if (!taskRes.data)
61
+ return errorResult('Tarefa não encontrada ou fora do projeto atual.');
62
+ const task = taskRes.data;
63
+ const [assigneesRes, checklistRes, commentsRes, historyRes, reposRes, labelsRes] = await Promise.all([
64
+ supabase.from('task_assignees').select('user_id').eq('task_id', task_id),
65
+ supabase
66
+ .from('task_checklist_items')
67
+ .select('id, text, checked, order')
68
+ .eq('task_id', task_id)
69
+ .order('order', { ascending: true }),
70
+ supabase
71
+ .from('task_comments')
72
+ .select('id, content, created_at, updated_at, author_id')
73
+ .eq('task_id', task_id)
74
+ .order('created_at', { ascending: true })
75
+ .limit(50),
76
+ supabase
77
+ .from('task_history')
78
+ .select('id, action, field, old_value, new_value, created_at, user_id')
79
+ .eq('task_id', task_id)
80
+ .order('created_at', { ascending: false })
81
+ .limit(50),
82
+ supabase
83
+ .from('task_repositories')
84
+ .select('repository_id')
85
+ .eq('task_id', task_id),
86
+ supabase
87
+ .from('task_label_assignments')
88
+ .select('label_id')
89
+ .eq('task_id', task_id),
90
+ ]);
91
+ if (assigneesRes.error)
92
+ return errorResult(`Erro ao buscar assignees: ${assigneesRes.error.message}`);
93
+ if (checklistRes.error)
94
+ return errorResult(`Erro ao buscar checklist: ${checklistRes.error.message}`);
95
+ if (commentsRes.error)
96
+ return errorResult(`Erro ao buscar comentários: ${commentsRes.error.message}`);
97
+ if (historyRes.error)
98
+ return errorResult(`Erro ao buscar histórico: ${historyRes.error.message}`);
99
+ if (reposRes.error)
100
+ return errorResult(`Erro ao buscar repositórios: ${reposRes.error.message}`);
101
+ if (labelsRes.error)
102
+ return errorResult(`Erro ao buscar labels: ${labelsRes.error.message}`);
103
+ const assigneeRows = assigneesRes.data ?? [];
104
+ const checklistRows = checklistRes.data ?? [];
105
+ const commentRows = commentsRes.data ?? [];
106
+ const historyRows = historyRes.data ?? [];
107
+ const repoRows = reposRes.data ?? [];
108
+ const labelRows = labelsRes.data ?? [];
109
+ // Coleta ids pra resolver em lote
110
+ const userIds = new Set();
111
+ for (const r of assigneeRows)
112
+ userIds.add(r.user_id);
113
+ for (const c of commentRows)
114
+ userIds.add(c.author_id);
115
+ for (const h of historyRows)
116
+ userIds.add(h.user_id);
117
+ userIds.add(task.reporter_id);
118
+ const repoIds = repoRows.map((r) => r.repository_id);
119
+ const labelIds = labelRows.map((l) => l.label_id);
120
+ let profiles;
121
+ try {
122
+ profiles = await fetchProfiles(supabase, Array.from(userIds));
123
+ }
124
+ catch (err) {
125
+ return errorResult(err.message);
126
+ }
127
+ const reposById = new Map();
128
+ if (repoIds.length > 0) {
129
+ const repoFetch = await supabase
130
+ .from('repositories')
131
+ .select('id, name, url, default_branch')
132
+ .in('id', repoIds);
133
+ if (repoFetch.error)
134
+ return errorResult(`Erro ao buscar repositórios: ${repoFetch.error.message}`);
135
+ for (const r of repoFetch.data ?? []) {
136
+ reposById.set(r.id, { name: r.name, url: r.url, default_branch: r.default_branch });
137
+ }
138
+ }
139
+ const labelsById = new Map();
140
+ if (labelIds.length > 0) {
141
+ const labelFetch = await supabase
142
+ .from('task_labels')
143
+ .select('id, name, color')
144
+ .in('id', labelIds);
145
+ if (labelFetch.error)
146
+ return errorResult(`Erro ao buscar labels: ${labelFetch.error.message}`);
147
+ for (const l of labelFetch.data ?? []) {
148
+ labelsById.set(l.id, { name: l.name, color: l.color });
149
+ }
150
+ }
151
+ return jsonResult({
152
+ task: {
153
+ id: task.id,
154
+ key: task.key,
155
+ title: task.title,
156
+ description: task.description,
157
+ status: task.status,
158
+ priority: task.priority,
159
+ type: task.type,
160
+ sprint_id: task.sprint_id,
161
+ team: task.team,
162
+ url: task.url,
163
+ branch: task.branch,
164
+ start_date: task.start_date,
165
+ end_date: task.end_date,
166
+ reporter: {
167
+ user_id: task.reporter_id,
168
+ full_name: profiles.get(task.reporter_id)?.full_name ?? null,
169
+ username: profiles.get(task.reporter_id)?.username ?? null,
170
+ },
171
+ created_at: task.created_at,
172
+ updated_at: task.updated_at,
173
+ },
174
+ assignees: assigneeRows.map((a) => ({
175
+ user_id: a.user_id,
176
+ full_name: profiles.get(a.user_id)?.full_name ?? null,
177
+ username: profiles.get(a.user_id)?.username ?? null,
178
+ avatar_url: profiles.get(a.user_id)?.avatar_url ?? null,
179
+ })),
180
+ checklist: checklistRows.map((c) => ({
181
+ id: c.id,
182
+ text: c.text,
183
+ checked: c.checked,
184
+ order: c.order,
185
+ })),
186
+ comments: commentRows.map((c) => ({
187
+ id: c.id,
188
+ content: c.content,
189
+ created_at: c.created_at,
190
+ updated_at: c.updated_at,
191
+ author: {
192
+ user_id: c.author_id,
193
+ full_name: profiles.get(c.author_id)?.full_name ?? null,
194
+ username: profiles.get(c.author_id)?.username ?? null,
195
+ },
196
+ })),
197
+ history: historyRows.map((h) => ({
198
+ id: h.id,
199
+ action: h.action,
200
+ field: h.field,
201
+ old_value: h.old_value,
202
+ new_value: h.new_value,
203
+ created_at: h.created_at,
204
+ user: {
205
+ user_id: h.user_id,
206
+ full_name: profiles.get(h.user_id)?.full_name ?? null,
207
+ username: profiles.get(h.user_id)?.username ?? null,
208
+ },
209
+ })),
210
+ repositories: repoRows.map((r) => ({
211
+ id: r.repository_id,
212
+ name: reposById.get(r.repository_id)?.name ?? null,
213
+ url: reposById.get(r.repository_id)?.url ?? null,
214
+ default_branch: reposById.get(r.repository_id)?.default_branch ?? null,
215
+ })),
216
+ labels: labelRows.map((l) => ({
217
+ id: l.label_id,
218
+ name: labelsById.get(l.label_id)?.name ?? null,
219
+ color: labelsById.get(l.label_id)?.color ?? null,
220
+ })),
221
+ });
222
+ }
223
+ //# sourceMappingURL=get-task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-task.js","sourceRoot":"","sources":["../../src/tools/get-task.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import * as getContext from './get-context.js';
2
+ import * as listProjects from './list-projects.js';
3
+ import * as setProject from './set-project.js';
4
+ import * as listTasks from './list-tasks.js';
5
+ import * as getTask from './get-task.js';
6
+ import * as createTask from './create-task.js';
7
+ import * as updateTask from './update-task.js';
8
+ import * as moveTask from './move-task.js';
9
+ import * as commentTask from './comment-task.js';
10
+ import * as startAllocation from './start-allocation.js';
11
+ import * as endAllocation from './end-allocation.js';
12
+ import * as startTaskAllocation from './start-task-allocation.js';
13
+ import * as endTaskAllocation from './end-task-allocation.js';
14
+ import * as getActiveAllocation from './get-active-allocation.js';
15
+ import * as listMyAllocations from './list-my-allocations.js';
16
+ export const tools = {
17
+ [getContext.definition.name]: getContext,
18
+ [listProjects.definition.name]: listProjects,
19
+ [setProject.definition.name]: setProject,
20
+ [listTasks.definition.name]: listTasks,
21
+ [getTask.definition.name]: getTask,
22
+ [createTask.definition.name]: createTask,
23
+ [updateTask.definition.name]: updateTask,
24
+ [moveTask.definition.name]: moveTask,
25
+ [commentTask.definition.name]: commentTask,
26
+ [startAllocation.definition.name]: startAllocation,
27
+ [endAllocation.definition.name]: endAllocation,
28
+ [startTaskAllocation.definition.name]: startTaskAllocation,
29
+ [endTaskAllocation.definition.name]: endTaskAllocation,
30
+ [getActiveAllocation.definition.name]: getActiveAllocation,
31
+ [listMyAllocations.definition.name]: listMyAllocations,
32
+ };
33
+ export const toolDefinitions = Object.values(tools).map((t) => t.definition);
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,OAAO,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,eAAe,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,mBAAmB,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,iBAAiB,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,mBAAmB,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,iBAAiB,MAAM,0BAA0B,CAAC;AAa9D,MAAM,CAAC,MAAM,KAAK,GAA+B;IAC/C,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU;IACxC,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,YAAY;IAC5C,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU;IACxC,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS;IACtC,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO;IAClC,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU;IACxC,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU;IACxC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ;IACpC,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,WAAW;IAC1C,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,eAAe;IAClD,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,aAAa;IAC9C,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,mBAAmB;IAC1D,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,iBAAiB;IACtD,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,mBAAmB;IAC1D,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,iBAAiB;CACvD,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAW,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC"}
@@ -0,0 +1,87 @@
1
+ import { z } from 'zod';
2
+ import { jsonResult, errorResult } from '../lib/tool-result.js';
3
+ import { durationSeconds } from '../lib/duration.js';
4
+ const ArgsSchema = z
5
+ .object({
6
+ limit: z.number().int().min(1).max(50).default(10),
7
+ offset: z.number().int().min(0).default(0),
8
+ from: z.string().regex(/^\d{4}-\d{2}-\d{2}/).optional(),
9
+ to: z.string().regex(/^\d{4}-\d{2}-\d{2}/).optional(),
10
+ })
11
+ .strict();
12
+ export const definition = {
13
+ name: 'nos_list_my_allocations',
14
+ description: 'Lista alocações passadas do usuário (encerradas), ordenadas por data decrescente. ' +
15
+ 'Útil pra revisar histórico de ponto.',
16
+ inputSchema: {
17
+ type: 'object',
18
+ properties: {
19
+ limit: { type: 'integer', minimum: 1, maximum: 50, default: 10 },
20
+ offset: { type: 'integer', minimum: 0, default: 0 },
21
+ from: { type: 'string', description: 'ISO date (YYYY-MM-DD), inclusive.' },
22
+ to: { type: 'string', description: 'ISO date (YYYY-MM-DD), inclusive.' },
23
+ },
24
+ additionalProperties: false,
25
+ },
26
+ };
27
+ export async function handler(args, ctx) {
28
+ const { supabase } = ctx;
29
+ const parsed = ArgsSchema.safeParse(args);
30
+ if (!parsed.success) {
31
+ return errorResult(`Argumento inválido: ${parsed.error.message}`);
32
+ }
33
+ const input = parsed.data;
34
+ let query = supabase
35
+ .from('allocations')
36
+ .select('id, start_time, end_time, auto_closed')
37
+ .eq('user_id', ctx.user.id)
38
+ .not('end_time', 'is', null);
39
+ if (input.from)
40
+ query = query.gte('start_time', `${input.from.slice(0, 10)}T00:00:00Z`);
41
+ if (input.to)
42
+ query = query.lte('start_time', `${input.to.slice(0, 10)}T23:59:59Z`);
43
+ query = query
44
+ .order('start_time', { ascending: false })
45
+ .range(input.offset, input.offset + input.limit - 1);
46
+ const { data, error } = await query;
47
+ if (error)
48
+ return errorResult(`Erro ao listar alocações: ${error.message}`);
49
+ const allocations = data ?? [];
50
+ if (allocations.length === 0) {
51
+ return jsonResult({ allocations: [], has_more: false });
52
+ }
53
+ // Agrega task_allocations dessas allocations
54
+ const allocIds = allocations.map((a) => a.id);
55
+ const segRes = await supabase
56
+ .from('task_allocations')
57
+ .select('allocation_id, start_time, end_time')
58
+ .in('allocation_id', allocIds);
59
+ if (segRes.error)
60
+ return errorResult(`Erro ao buscar segmentos: ${segRes.error.message}`);
61
+ const aggByAlloc = new Map();
62
+ for (const s of segRes.data ?? []) {
63
+ const agg = aggByAlloc.get(s.allocation_id) ?? { count: 0, tracked_seconds: 0 };
64
+ agg.count += 1;
65
+ agg.tracked_seconds += durationSeconds(s.start_time, s.end_time);
66
+ aggByAlloc.set(s.allocation_id, agg);
67
+ }
68
+ const result = allocations.map((a) => {
69
+ const agg = aggByAlloc.get(a.id) ?? { count: 0, tracked_seconds: 0 };
70
+ return {
71
+ id: a.id,
72
+ start_time: a.start_time,
73
+ end_time: a.end_time,
74
+ duration_seconds: durationSeconds(a.start_time, a.end_time),
75
+ auto_closed: a.auto_closed,
76
+ task_count: agg.count,
77
+ tracked_seconds: agg.tracked_seconds,
78
+ };
79
+ });
80
+ return jsonResult({
81
+ allocations: result,
82
+ has_more: result.length === input.limit,
83
+ limit: input.limit,
84
+ offset: input.offset,
85
+ });
86
+ }
87
+ //# sourceMappingURL=list-my-allocations.js.map