@nio-cli/cli 0.1.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 (196) hide show
  1. package/README.md +280 -0
  2. package/dist/adapters/supabase/allocation-gateway.js +236 -0
  3. package/dist/adapters/supabase/allocation-gateway.js.map +1 -0
  4. package/dist/adapters/supabase/analytics-gateway.js +18 -0
  5. package/dist/adapters/supabase/analytics-gateway.js.map +1 -0
  6. package/dist/adapters/supabase/client.js +96 -0
  7. package/dist/adapters/supabase/client.js.map +1 -0
  8. package/dist/adapters/supabase/context-gateway.js +23 -0
  9. package/dist/adapters/supabase/context-gateway.js.map +1 -0
  10. package/dist/adapters/supabase/gateway.js +18 -0
  11. package/dist/adapters/supabase/gateway.js.map +1 -0
  12. package/dist/adapters/supabase/task-gateway.js +450 -0
  13. package/dist/adapters/supabase/task-gateway.js.map +1 -0
  14. package/dist/auth.js +118 -0
  15. package/dist/auth.js.map +1 -0
  16. package/dist/brand.js +91 -0
  17. package/dist/brand.js.map +1 -0
  18. package/dist/cli/commands/auth.js +128 -0
  19. package/dist/cli/commands/auth.js.map +1 -0
  20. package/dist/cli/commands/clean.js +120 -0
  21. package/dist/cli/commands/clean.js.map +1 -0
  22. package/dist/cli/commands/completion.js +114 -0
  23. package/dist/cli/commands/completion.js.map +1 -0
  24. package/dist/cli/commands/exec.js +59 -0
  25. package/dist/cli/commands/exec.js.map +1 -0
  26. package/dist/cli/commands/init/auth-step.js +49 -0
  27. package/dist/cli/commands/init/auth-step.js.map +1 -0
  28. package/dist/cli/commands/init/clients-step.js +76 -0
  29. package/dist/cli/commands/init/clients-step.js.map +1 -0
  30. package/dist/cli/commands/init/context-step.js +71 -0
  31. package/dist/cli/commands/init/context-step.js.map +1 -0
  32. package/dist/cli/commands/init/index.js +76 -0
  33. package/dist/cli/commands/init/index.js.map +1 -0
  34. package/dist/cli/commands/init/project-step.js +105 -0
  35. package/dist/cli/commands/init/project-step.js.map +1 -0
  36. package/dist/cli/commands/init/provision-step.js +103 -0
  37. package/dist/cli/commands/init/provision-step.js.map +1 -0
  38. package/dist/cli/commands/plan.js +45 -0
  39. package/dist/cli/commands/plan.js.map +1 -0
  40. package/dist/cli/commands/skills.js +23 -0
  41. package/dist/cli/commands/skills.js.map +1 -0
  42. package/dist/cli/commands/sync.js +296 -0
  43. package/dist/cli/commands/sync.js.map +1 -0
  44. package/dist/cli/commands/validate-plan.js +42 -0
  45. package/dist/cli/commands/validate-plan.js.map +1 -0
  46. package/dist/cli/copy/auth.json +6 -0
  47. package/dist/cli/copy/flows.json +6 -0
  48. package/dist/cli/copy/init.json +19 -0
  49. package/dist/cli/copy/sync.json +3 -0
  50. package/dist/cli/copy.js +23 -0
  51. package/dist/cli/copy.js.map +1 -0
  52. package/dist/cli/flows/clients.js +130 -0
  53. package/dist/cli/flows/clients.js.map +1 -0
  54. package/dist/cli/flows/completion.js +63 -0
  55. package/dist/cli/flows/completion.js.map +1 -0
  56. package/dist/cli/flows/dependencies.js +114 -0
  57. package/dist/cli/flows/dependencies.js.map +1 -0
  58. package/dist/cli/flows/sections.js +85 -0
  59. package/dist/cli/flows/sections.js.map +1 -0
  60. package/dist/cli/flows/user-config.js +37 -0
  61. package/dist/cli/flows/user-config.js.map +1 -0
  62. package/dist/cli/ui/render.js +237 -0
  63. package/dist/cli/ui/render.js.map +1 -0
  64. package/dist/cli/ui/report.js +117 -0
  65. package/dist/cli/ui/report.js.map +1 -0
  66. package/dist/cli.js +36 -0
  67. package/dist/cli.js.map +1 -0
  68. package/dist/config.js +280 -0
  69. package/dist/config.js.map +1 -0
  70. package/dist/constants.js +9 -0
  71. package/dist/constants.js.map +1 -0
  72. package/dist/core/ports.js +2 -0
  73. package/dist/core/ports.js.map +1 -0
  74. package/dist/core/types.js +7 -0
  75. package/dist/core/types.js.map +1 -0
  76. package/dist/database.types.js +11 -0
  77. package/dist/database.types.js.map +1 -0
  78. package/dist/lib/active-project.js +28 -0
  79. package/dist/lib/active-project.js.map +1 -0
  80. package/dist/lib/autopull.js +13 -0
  81. package/dist/lib/autopull.js.map +1 -0
  82. package/dist/lib/client-configs.js +191 -0
  83. package/dist/lib/client-configs.js.map +1 -0
  84. package/dist/lib/client-install.js +40 -0
  85. package/dist/lib/client-install.js.map +1 -0
  86. package/dist/lib/colors.js +93 -0
  87. package/dist/lib/colors.js.map +1 -0
  88. package/dist/lib/cowork-extension.js +143 -0
  89. package/dist/lib/cowork-extension.js.map +1 -0
  90. package/dist/lib/dependencies.js +145 -0
  91. package/dist/lib/dependencies.js.map +1 -0
  92. package/dist/lib/dependency-install.js +163 -0
  93. package/dist/lib/dependency-install.js.map +1 -0
  94. package/dist/lib/duration.js +5 -0
  95. package/dist/lib/duration.js.map +1 -0
  96. package/dist/lib/exec-delegate.js +167 -0
  97. package/dist/lib/exec-delegate.js.map +1 -0
  98. package/dist/lib/exec-engines.js +72 -0
  99. package/dist/lib/exec-engines.js.map +1 -0
  100. package/dist/lib/file-merge.js +33 -0
  101. package/dist/lib/file-merge.js.map +1 -0
  102. package/dist/lib/harness.js +90 -0
  103. package/dist/lib/harness.js.map +1 -0
  104. package/dist/lib/hooks.js +217 -0
  105. package/dist/lib/hooks.js.map +1 -0
  106. package/dist/lib/patterns.js +61 -0
  107. package/dist/lib/patterns.js.map +1 -0
  108. package/dist/lib/plan-delegate.js +106 -0
  109. package/dist/lib/plan-delegate.js.map +1 -0
  110. package/dist/lib/project-context.js +151 -0
  111. package/dist/lib/project-context.js.map +1 -0
  112. package/dist/lib/prompts.js +69 -0
  113. package/dist/lib/prompts.js.map +1 -0
  114. package/dist/lib/provision-apply.js +220 -0
  115. package/dist/lib/provision-apply.js.map +1 -0
  116. package/dist/lib/provision-collect.js +47 -0
  117. package/dist/lib/provision-collect.js.map +1 -0
  118. package/dist/lib/provision.js +45 -0
  119. package/dist/lib/provision.js.map +1 -0
  120. package/dist/lib/require-config.js +32 -0
  121. package/dist/lib/require-config.js.map +1 -0
  122. package/dist/lib/rules.js +99 -0
  123. package/dist/lib/rules.js.map +1 -0
  124. package/dist/lib/sections.js +89 -0
  125. package/dist/lib/sections.js.map +1 -0
  126. package/dist/lib/skill-serve.js +129 -0
  127. package/dist/lib/skill-serve.js.map +1 -0
  128. package/dist/lib/skills-cache.js +99 -0
  129. package/dist/lib/skills-cache.js.map +1 -0
  130. package/dist/lib/skills.js +236 -0
  131. package/dist/lib/skills.js.map +1 -0
  132. package/dist/lib/targets.js +151 -0
  133. package/dist/lib/targets.js.map +1 -0
  134. package/dist/lib/task-history.js +15 -0
  135. package/dist/lib/task-history.js.map +1 -0
  136. package/dist/lib/telemetry.js +51 -0
  137. package/dist/lib/telemetry.js.map +1 -0
  138. package/dist/lib/tool-result.js +12 -0
  139. package/dist/lib/tool-result.js.map +1 -0
  140. package/dist/lib/validate-plan-delegate.js +107 -0
  141. package/dist/lib/validate-plan-delegate.js.map +1 -0
  142. package/dist/lib/version-check.js +89 -0
  143. package/dist/lib/version-check.js.map +1 -0
  144. package/dist/matrix-logo.js +122 -0
  145. package/dist/matrix-logo.js.map +1 -0
  146. package/dist/mcp-server.js +189 -0
  147. package/dist/mcp-server.js.map +1 -0
  148. package/dist/session-factory.js +19 -0
  149. package/dist/session-factory.js.map +1 -0
  150. package/dist/spinner.js +12 -0
  151. package/dist/spinner.js.map +1 -0
  152. package/dist/tools/comment-task.js +72 -0
  153. package/dist/tools/comment-task.js.map +1 -0
  154. package/dist/tools/create-task.js +129 -0
  155. package/dist/tools/create-task.js.map +1 -0
  156. package/dist/tools/delegate-exec.js +63 -0
  157. package/dist/tools/delegate-exec.js.map +1 -0
  158. package/dist/tools/end-allocation.js +38 -0
  159. package/dist/tools/end-allocation.js.map +1 -0
  160. package/dist/tools/end-task-allocation.js +37 -0
  161. package/dist/tools/end-task-allocation.js.map +1 -0
  162. package/dist/tools/exec-status.js +43 -0
  163. package/dist/tools/exec-status.js.map +1 -0
  164. package/dist/tools/get-active-allocation.js +69 -0
  165. package/dist/tools/get-active-allocation.js.map +1 -0
  166. package/dist/tools/get-context.js +48 -0
  167. package/dist/tools/get-context.js.map +1 -0
  168. package/dist/tools/get-task.js +137 -0
  169. package/dist/tools/get-task.js.map +1 -0
  170. package/dist/tools/index.js +44 -0
  171. package/dist/tools/index.js.map +1 -0
  172. package/dist/tools/list-my-allocations.js +71 -0
  173. package/dist/tools/list-my-allocations.js.map +1 -0
  174. package/dist/tools/list-projects.js +38 -0
  175. package/dist/tools/list-projects.js.map +1 -0
  176. package/dist/tools/list-tasks.js +93 -0
  177. package/dist/tools/list-tasks.js.map +1 -0
  178. package/dist/tools/move-task.js +82 -0
  179. package/dist/tools/move-task.js.map +1 -0
  180. package/dist/tools/plan.js +56 -0
  181. package/dist/tools/plan.js.map +1 -0
  182. package/dist/tools/record-delivery.js +71 -0
  183. package/dist/tools/record-delivery.js.map +1 -0
  184. package/dist/tools/set-project.js +52 -0
  185. package/dist/tools/set-project.js.map +1 -0
  186. package/dist/tools/start-allocation.js +32 -0
  187. package/dist/tools/start-allocation.js.map +1 -0
  188. package/dist/tools/start-task-allocation.js +75 -0
  189. package/dist/tools/start-task-allocation.js.map +1 -0
  190. package/dist/tools/update-task.js +139 -0
  191. package/dist/tools/update-task.js.map +1 -0
  192. package/dist/tools/validate-plan.js +58 -0
  193. package/dist/tools/validate-plan.js.map +1 -0
  194. package/dist/version.js +16 -0
  195. package/dist/version.js.map +1 -0
  196. package/package.json +64 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-delivery.js","sourceRoot":"","sources":["../../src/tools/record-delivery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { z } from 'zod';
2
+ import { jsonResult, errorResult } from '../lib/tool-result.js';
3
+ import { setActiveProjectId } from '../lib/active-project.js';
4
+ import { brand } from '../brand.js';
5
+ const ArgsSchema = z
6
+ .object({
7
+ project_id: z.uuid(),
8
+ })
9
+ .strict();
10
+ export const definition = {
11
+ name: `${brand.toolPrefix}set_project`,
12
+ description: 'Define o projeto ativo da sessão (em memória, dura enquanto o servidor estiver ' +
13
+ 'rodando). As tools de tarefa/alocação passam a operar nesse projeto, até você trocar ' +
14
+ `de novo. Use \`${brand.toolPrefix}list_projects\` antes para descobrir os ids.`,
15
+ inputSchema: {
16
+ type: 'object',
17
+ properties: {
18
+ project_id: {
19
+ type: 'string',
20
+ format: 'uuid',
21
+ description: `UUID do projeto (de ${brand.toolPrefix}list_projects).`,
22
+ },
23
+ },
24
+ required: ['project_id'],
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 { project_id } = parsed.data;
34
+ // Valida que o projeto existe e é acessível pelo usuário (RLS aplica o escopo).
35
+ let project;
36
+ try {
37
+ project = await ctx.gateway.findProjectById(project_id);
38
+ }
39
+ catch (err) {
40
+ return errorResult(err.message);
41
+ }
42
+ if (!project) {
43
+ return errorResult(`Projeto não encontrado ou sem acesso. Confira o id em \`${brand.toolPrefix}list_projects\`.`);
44
+ }
45
+ setActiveProjectId(project_id);
46
+ return jsonResult({
47
+ active_project_id: project.id,
48
+ name: project.name,
49
+ message: `Projeto ativo agora é "${project.name}".`,
50
+ });
51
+ }
52
+ //# sourceMappingURL=set-project.js.map
@@ -0,0 +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;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,UAAU,GAAG,CAAC;KACjB,MAAM,CAAC;IACN,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE;CACrB,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,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,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,OAAO,CAAC,EAAE;QAC7B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,0BAA0B,OAAO,CAAC,IAAI,IAAI;KACpD,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { jsonResult, errorResult } from '../lib/tool-result.js';
2
+ import { durationSeconds } from '../lib/duration.js';
3
+ import { brand } from '../brand.js';
4
+ export const definition = {
5
+ name: `${brand.toolPrefix}start_allocation`,
6
+ description: 'Inicia uma alocação (bate o ponto) para o usuário atual. Se já existe uma alocação ' +
7
+ 'ativa, retorna ela sem criar duplicada.',
8
+ inputSchema: {
9
+ type: 'object',
10
+ properties: {},
11
+ additionalProperties: false,
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
+ }
23
+ export async function handler(_args, ctx) {
24
+ try {
25
+ const { allocation, alreadyActive } = await ctx.gateway.startAllocation(ctx.user.id);
26
+ return jsonResult(formatAllocationStatus(allocation, alreadyActive));
27
+ }
28
+ catch (err) {
29
+ return errorResult(err.message);
30
+ }
31
+ }
32
+ //# sourceMappingURL=start-allocation.js.map
@@ -0,0 +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;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,IAAI,CAAC;QACH,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrF,OAAO,UAAU,CAAC,sBAAsB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;IACvE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC"}
@@ -0,0 +1,75 @@
1
+ import { z } from 'zod';
2
+ import { jsonResult, errorResult } from '../lib/tool-result.js';
3
+ import { resolveProjectConfig, isErrorResult } from '../lib/require-config.js';
4
+ import { durationSeconds } from '../lib/duration.js';
5
+ import { brand } from '../brand.js';
6
+ const ArgsSchema = z
7
+ .object({
8
+ task_id: z.uuid(),
9
+ is_overtime: z.boolean().default(false),
10
+ project_id: z.uuid().optional(),
11
+ })
12
+ .strict();
13
+ export const definition = {
14
+ name: `${brand.toolPrefix}start_task_allocation`,
15
+ description: 'Começa a cronometrar tempo numa task específica. Se não há alocação ativa (ponto do dia), ' +
16
+ 'abre uma. Se já existe outra task_allocation ativa, fecha ela e abre essa — ' +
17
+ 'transição entre tasks é atômica, basta chamar isso na próxima task.',
18
+ inputSchema: {
19
+ type: 'object',
20
+ properties: {
21
+ task_id: { type: 'string', format: 'uuid' },
22
+ is_overtime: { type: 'boolean', default: false },
23
+ project_id: {
24
+ type: 'string',
25
+ format: 'uuid',
26
+ description: `Override do projeto. Se omitido, usa o projeto ativo (${brand.toolPrefix}set_project) ou o default.`,
27
+ },
28
+ },
29
+ required: ['task_id'],
30
+ additionalProperties: false,
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
+ export async function handler(args, ctx) {
54
+ const parsed = ArgsSchema.safeParse(args);
55
+ if (!parsed.success)
56
+ return errorResult(`Argumento inválido: ${parsed.error.message}`);
57
+ const { task_id, is_overtime } = parsed.data;
58
+ const cfg = resolveProjectConfig(ctx, parsed.data.project_id);
59
+ if (isErrorResult(cfg))
60
+ return cfg;
61
+ let data;
62
+ try {
63
+ data = await ctx.gateway.startTaskAllocation(task_id, cfg.project_id, ctx.user.id, is_overtime);
64
+ }
65
+ catch (err) {
66
+ return errorResult(err.message);
67
+ }
68
+ if (!data)
69
+ return errorResult('Tarefa não encontrada ou fora do projeto vinculado a este diretório.');
70
+ const closedPrevious = data.previousClosed
71
+ ? buildClosedPreviousSummary(data.previousClosed.prev, data.previousClosed.closed, data.previousClosed.prevTaskKey)
72
+ : null;
73
+ return jsonResult(formatStartTaskAllocationResult(data.taskAllocation, data.task, closedPrevious, data.allocationWasCreated));
74
+ }
75
+ //# sourceMappingURL=start-task-allocation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-task-allocation.js","sourceRoot":"","sources":["../../src/tools/start-task-allocation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,139 @@
1
+ import { z } from 'zod';
2
+ import { jsonResult, errorResult } from '../lib/tool-result.js';
3
+ import { resolveProjectConfig, isErrorResult } from '../lib/require-config.js';
4
+ import { brand } from '../brand.js';
5
+ const TASK_STATUS = [
6
+ 'backlog',
7
+ 'todo',
8
+ 'doing',
9
+ 'code_review',
10
+ 'rejected',
11
+ 'qa',
12
+ 'done',
13
+ 'production',
14
+ ];
15
+ const TASK_PRIORITY = ['none', 'lowest', 'low', 'medium', 'high', 'urgent'];
16
+ const TASK_TYPE = ['story', 'bug', 'task', 'epic', 'subtask', 'meeting'];
17
+ const ArgsSchema = z
18
+ .object({
19
+ task_id: z.uuid(),
20
+ title: z.string().min(1).max(200).optional(),
21
+ description: z.string().optional(),
22
+ priority: z.enum(TASK_PRIORITY).optional(),
23
+ type: z.enum(TASK_TYPE).optional(),
24
+ status: z.enum(TASK_STATUS).optional(),
25
+ end_date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).nullable().optional(),
26
+ sprint: z.string().optional(),
27
+ assignee_user_ids: z.array(z.uuid()).optional(),
28
+ label_ids: z.array(z.uuid()).optional(),
29
+ project_id: z.uuid().optional(),
30
+ })
31
+ .strict();
32
+ export const definition = {
33
+ name: `${brand.toolPrefix}update_task`,
34
+ description: 'Atualiza campos de uma tarefa existente. Só passe os campos que quer mudar. ' +
35
+ 'assignee_user_ids e label_ids são *substituições completas* — passar [] remove todos.',
36
+ inputSchema: {
37
+ type: 'object',
38
+ properties: {
39
+ task_id: { type: 'string', format: 'uuid' },
40
+ title: { type: 'string', minLength: 1, maxLength: 200 },
41
+ description: { type: 'string' },
42
+ priority: { type: 'string', enum: [...TASK_PRIORITY] },
43
+ type: { type: 'string', enum: [...TASK_TYPE] },
44
+ status: { type: 'string', enum: [...TASK_STATUS] },
45
+ end_date: { type: ['string', 'null'], description: 'Data ISO YYYY-MM-DD ou null pra remover.' },
46
+ sprint: { type: 'string', description: '"active", "none" ou UUID.' },
47
+ assignee_user_ids: { type: 'array', items: { type: 'string', format: 'uuid' } },
48
+ label_ids: { type: 'array', items: { type: 'string', format: 'uuid' } },
49
+ project_id: {
50
+ type: 'string',
51
+ format: 'uuid',
52
+ description: `Override do projeto. Se omitido, usa o projeto ativo (${brand.toolPrefix}set_project) ou o default.`,
53
+ },
54
+ },
55
+ required: ['task_id'],
56
+ additionalProperties: false,
57
+ },
58
+ };
59
+ const SCALAR_PATCH_FIELDS = ['title', 'description', 'status', 'priority', 'type', 'end_date'];
60
+ function toHistoryValue(v) {
61
+ return v === null || v === undefined ? null : String(v);
62
+ }
63
+ /** Diff entre a task atual e o input: patch a aplicar + changes pro history. Pura. */
64
+ export function buildTaskPatch(current, input, nextSprintId) {
65
+ const patch = {};
66
+ const changes = [];
67
+ for (const field of SCALAR_PATCH_FIELDS) {
68
+ const nextVal = input[field];
69
+ const curVal = current[field];
70
+ if (nextVal !== undefined && nextVal !== curVal) {
71
+ patch[field] = nextVal;
72
+ changes.push({ field, old_value: toHistoryValue(curVal), new_value: toHistoryValue(nextVal) });
73
+ }
74
+ }
75
+ if (nextSprintId !== undefined && nextSprintId !== current.sprint_id) {
76
+ patch.sprint_id = nextSprintId;
77
+ changes.push({
78
+ field: 'sprint_id',
79
+ old_value: toHistoryValue(current.sprint_id),
80
+ new_value: toHistoryValue(nextSprintId),
81
+ });
82
+ }
83
+ return { patch: patch, changes };
84
+ }
85
+ /** Compara conjunto atual vs novo de ids (assignees ou labels): já ordenados + flag de mudança. Pura. */
86
+ export function diffIdSet(currentIds, nextIds) {
87
+ const before = [...currentIds].sort();
88
+ const after = [...nextIds].sort();
89
+ const changed = !(before.length === after.length && before.every((v, i) => v === after[i]));
90
+ return { before, after, changed };
91
+ }
92
+ /** Monta o payload de resposta a partir da task recarregada + mudanças aplicadas. Pura. */
93
+ export function buildUpdateTaskResult(finalTask, changes, input) {
94
+ return {
95
+ ...finalTask,
96
+ changed_fields: changes.map((c) => c.field),
97
+ assignees_changed: input.assignee_user_ids !== undefined,
98
+ labels_changed: input.label_ids !== undefined,
99
+ };
100
+ }
101
+ export async function handler(args, ctx) {
102
+ const parsed = ArgsSchema.safeParse(args);
103
+ if (!parsed.success)
104
+ return errorResult(`Argumento inválido: ${parsed.error.message}`);
105
+ const input = parsed.data;
106
+ const cfg = resolveProjectConfig(ctx, input.project_id);
107
+ if (isErrorResult(cfg))
108
+ return cfg;
109
+ try {
110
+ const current = await ctx.gateway.getCurrentTask(input.task_id, cfg.project_id);
111
+ if (!current)
112
+ return errorResult('Tarefa não encontrada ou fora do projeto atual.');
113
+ const nextSprintId = await ctx.gateway.resolveNextSprintId(cfg.project_id, input.sprint);
114
+ const { patch, changes } = buildTaskPatch(current, input, nextSprintId);
115
+ await ctx.gateway.applyTaskPatch(input.task_id, cfg.project_id, ctx.user.id, patch, changes);
116
+ // assignees/labels são substituições completas — comparamos no client (diffIdSet)
117
+ // e só reescrevemos se mudou.
118
+ if (input.assignee_user_ids !== undefined) {
119
+ const currentIds = await ctx.gateway.getTaskIdSet('assignees', input.task_id);
120
+ const { before, after, changed } = diffIdSet(currentIds, input.assignee_user_ids);
121
+ if (changed) {
122
+ await ctx.gateway.replaceTaskIdSet('assignees', input.task_id, ctx.user.id, input.assignee_user_ids, before, after);
123
+ }
124
+ }
125
+ if (input.label_ids !== undefined) {
126
+ const currentIds = await ctx.gateway.getTaskIdSet('labels', input.task_id);
127
+ const { before, after, changed } = diffIdSet(currentIds, input.label_ids);
128
+ if (changed) {
129
+ await ctx.gateway.replaceTaskIdSet('labels', input.task_id, ctx.user.id, input.label_ids, before, after);
130
+ }
131
+ }
132
+ const finalTask = await ctx.gateway.reloadTask(input.task_id);
133
+ return jsonResult(buildUpdateTaskResult(finalTask, changes, input));
134
+ }
135
+ catch (err) {
136
+ return errorResult(err.message);
137
+ }
138
+ }
139
+ //# sourceMappingURL=update-task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-task.js","sourceRoot":"","sources":["../../src/tools/update-task.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { z } from 'zod';
2
+ import { existsSync } from 'node:fs';
3
+ import { jsonResult, errorResult } from '../lib/tool-result.js';
4
+ import { runValidatePlan } from '../lib/validate-plan-delegate.js';
5
+ import { ENGINES, PLAN_ENGINE } from '../lib/exec-engines.js';
6
+ import { brand } from '../brand.js';
7
+ const ArgsSchema = z
8
+ .object({
9
+ project: z.string().min(1),
10
+ engine: z.enum(ENGINES).optional(),
11
+ })
12
+ .strict();
13
+ export const definition = {
14
+ name: `${brand.cliToolPrefix}validate_plan`,
15
+ description: 'Lê o `plan.md` da raiz do projeto e roda o engine PENSANTE (claude ou codex local, na ' +
16
+ 'assinatura — sem API) para julgar se o plano é complexo o bastante para virar uma spec SDD ' +
17
+ 'antes de implementar. Devolve { needsSpec, reason, suggestedSlug? } — é triagem, NÃO gera spec ' +
18
+ 'nem código. suggestedSlug (slug git-safe p/ nomear o worktree) só sai quando needsSpec. ' +
19
+ `Requer um \`plan.md\` (rode \`${brand.cliToolPrefix}plan\` antes).`,
20
+ inputSchema: {
21
+ type: 'object',
22
+ properties: {
23
+ project: {
24
+ type: 'string',
25
+ description: 'Caminho absoluto da raiz do projeto onde vive o plan.md.',
26
+ },
27
+ engine: {
28
+ type: 'string',
29
+ enum: [...ENGINES],
30
+ description: `Agente pensante a usar. Default: ${PLAN_ENGINE}.`,
31
+ },
32
+ },
33
+ required: ['project'],
34
+ additionalProperties: false,
35
+ },
36
+ };
37
+ export async function handler(args, _ctx) {
38
+ const parsed = ArgsSchema.safeParse(args);
39
+ if (!parsed.success) {
40
+ return errorResult(`Argumento inválido: ${parsed.error.message}`);
41
+ }
42
+ const { project, engine } = parsed.data;
43
+ if (!existsSync(project)) {
44
+ return errorResult(`Projeto não encontrado: ${project}`);
45
+ }
46
+ const result = await runValidatePlan({ project, engine });
47
+ if (!result.ok) {
48
+ return errorResult(result.error ?? 'falha ao validar o plano');
49
+ }
50
+ return jsonResult({
51
+ ok: true,
52
+ needsSpec: result.needsSpec,
53
+ reason: result.reason,
54
+ suggestedSlug: result.suggestedSlug,
55
+ engine: result.engine,
56
+ });
57
+ }
58
+ //# sourceMappingURL=validate-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-plan.js","sourceRoot":"","sources":["../../src/tools/validate-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,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,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,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,eAAe;IAC3C,WAAW,EACT,wFAAwF;QACxF,6FAA6F;QAC7F,iGAAiG;QACjG,0FAA0F;QAC1F,iCAAiC,KAAK,CAAC,aAAa,gBAAgB;IACtE,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0DAA0D;aACxE;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,CAAC;QACrB,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,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IACxC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,OAAO,WAAW,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1D,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,IAAI,0BAA0B,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,UAAU,CAAC;QAChB,EAAE,EAAE,IAAI;QACR,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { fileURLToPath } from 'node:url';
3
+ import { dirname, join } from 'node:path';
4
+ function loadVersion() {
5
+ try {
6
+ const here = dirname(fileURLToPath(import.meta.url));
7
+ const pkgPath = join(here, '..', 'package.json');
8
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
9
+ return pkg.version;
10
+ }
11
+ catch {
12
+ return '0.0.0';
13
+ }
14
+ }
15
+ export const VERSION = loadVersion();
16
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAwB,CAAC;QAC9E,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "@nio-cli/cli",
3
+ "version": "0.1.0",
4
+ "description": "MCP server e CLI pra controlar o NOS a partir de assistentes de IA como Claude Code, Codex CLI e GitHub Copilot.",
5
+ "type": "module",
6
+ "bin": {
7
+ "nio": "dist/cli.js",
8
+ "nio-cli": "dist/mcp-server.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md"
13
+ ],
14
+ "engines": {
15
+ "node": ">=20"
16
+ },
17
+ "publishConfig": {
18
+ "access": "public"
19
+ },
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "git+https://github.com/hugoreiis12-png/NIO-CLI.git"
23
+ },
24
+ "homepage": "https://github.com/hugoreiis12-png/NIO-CLI#readme",
25
+ "bugs": {
26
+ "url": "https://github.com/hugoreiis12-png/NIO-CLI/issues"
27
+ },
28
+ "keywords": [
29
+ "mcp",
30
+ "model-context-protocol",
31
+ "claude-code",
32
+ "codex",
33
+ "copilot",
34
+ "nio",
35
+ "nos"
36
+ ],
37
+ "scripts": {
38
+ "build": "rm -rf dist && tsc && node --input-type=commonjs -e \"require('fs').cpSync('src/cli/copy','dist/cli/copy',{recursive:true})\" && chmod +x dist/cli.js dist/mcp-server.js",
39
+ "gen:docs": "bun run scripts/gen-reference.ts",
40
+ "dev:cli": "bun run src/cli.ts",
41
+ "dev:mcp": "bun run src/mcp-server.ts",
42
+ "dev:gateway": "bun run src/gateway/server.ts",
43
+ "gen:types": "supabase gen types typescript --project-id wdshvtlsjoegjvmpqobx > src/database.types.ts",
44
+ "prepublishOnly": "bun run build"
45
+ },
46
+ "dependencies": {
47
+ "@clack/prompts": "^1.6.0",
48
+ "@modelcontextprotocol/sdk": "^1.0.4",
49
+ "@supabase/supabase-js": "^2.49.1",
50
+ "adm-zip": "^0.5.17",
51
+ "boxen": "^7.1.1",
52
+ "chalk": "^5.6.2",
53
+ "commander": "^12.1.0",
54
+ "smol-toml": "^1.6.1",
55
+ "update-notifier": "^7.3.1",
56
+ "zod": "^4.4.3"
57
+ },
58
+ "devDependencies": {
59
+ "@types/adm-zip": "^0.5.8",
60
+ "@types/node": "^22.10.5",
61
+ "@types/update-notifier": "^6.0.8",
62
+ "typescript": "^5.4.5"
63
+ }
64
+ }