@noclaf/cli 0.4.13 → 0.4.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) 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/commands/validate-plan.js +42 -0
  20. package/dist/cli/commands/validate-plan.js.map +1 -0
  21. package/dist/cli/flows/clients.js +27 -17
  22. package/dist/cli/flows/clients.js.map +1 -1
  23. package/dist/cli.js +7 -5
  24. package/dist/cli.js.map +1 -1
  25. package/dist/config.js +19 -11
  26. package/dist/config.js.map +1 -1
  27. package/dist/constants.js +7 -8
  28. package/dist/constants.js.map +1 -1
  29. package/dist/lib/autopull.js +13 -0
  30. package/dist/lib/autopull.js.map +1 -0
  31. package/dist/lib/client-configs.js +37 -25
  32. package/dist/lib/client-configs.js.map +1 -1
  33. package/dist/lib/cowork-extension.js +42 -30
  34. package/dist/lib/cowork-extension.js.map +1 -1
  35. package/dist/lib/dependencies.js +83 -247
  36. package/dist/lib/dependencies.js.map +1 -1
  37. package/dist/lib/dependency-install.js +163 -0
  38. package/dist/lib/dependency-install.js.map +1 -0
  39. package/dist/lib/exec-delegate.js +2 -2
  40. package/dist/lib/exec-delegate.js.map +1 -1
  41. package/dist/lib/exec-engines.js +7 -6
  42. package/dist/lib/exec-engines.js.map +1 -1
  43. package/dist/lib/provision-apply.js +214 -0
  44. package/dist/lib/provision-apply.js.map +1 -0
  45. package/dist/lib/provision-collect.js +47 -0
  46. package/dist/lib/provision-collect.js.map +1 -0
  47. package/dist/lib/provision.js +8 -253
  48. package/dist/lib/provision.js.map +1 -1
  49. package/dist/lib/require-config.js +3 -2
  50. package/dist/lib/require-config.js.map +1 -1
  51. package/dist/lib/skills-cache.js +9 -8
  52. package/dist/lib/skills-cache.js.map +1 -1
  53. package/dist/lib/skills.js +30 -16
  54. package/dist/lib/skills.js.map +1 -1
  55. package/dist/lib/telemetry.js +2 -1
  56. package/dist/lib/telemetry.js.map +1 -1
  57. package/dist/lib/validate-plan-delegate.js +105 -0
  58. package/dist/lib/validate-plan-delegate.js.map +1 -0
  59. package/dist/lib/version-check.js +3 -2
  60. package/dist/lib/version-check.js.map +1 -1
  61. package/dist/mcp-server.js +107 -79
  62. package/dist/mcp-server.js.map +1 -1
  63. package/dist/tools/comment-task.js +32 -32
  64. package/dist/tools/comment-task.js.map +1 -1
  65. package/dist/tools/create-task.js +92 -101
  66. package/dist/tools/create-task.js.map +1 -1
  67. package/dist/tools/delegate-exec.js +4 -3
  68. package/dist/tools/delegate-exec.js.map +1 -1
  69. package/dist/tools/end-allocation.js +19 -32
  70. package/dist/tools/end-allocation.js.map +1 -1
  71. package/dist/tools/end-task-allocation.js +17 -26
  72. package/dist/tools/end-task-allocation.js.map +1 -1
  73. package/dist/tools/exec-status.js +4 -3
  74. package/dist/tools/exec-status.js.map +1 -1
  75. package/dist/tools/get-active-allocation.js +53 -60
  76. package/dist/tools/get-active-allocation.js.map +1 -1
  77. package/dist/tools/get-context.js +4 -3
  78. package/dist/tools/get-context.js.map +1 -1
  79. package/dist/tools/get-task.js +144 -142
  80. package/dist/tools/get-task.js.map +1 -1
  81. package/dist/tools/index.js +2 -0
  82. package/dist/tools/index.js.map +1 -1
  83. package/dist/tools/list-my-allocations.js +35 -43
  84. package/dist/tools/list-my-allocations.js.map +1 -1
  85. package/dist/tools/list-projects.js +3 -2
  86. package/dist/tools/list-projects.js.map +1 -1
  87. package/dist/tools/list-tasks.js +117 -124
  88. package/dist/tools/list-tasks.js.map +1 -1
  89. package/dist/tools/move-task.js +37 -39
  90. package/dist/tools/move-task.js.map +1 -1
  91. package/dist/tools/plan.js +3 -2
  92. package/dist/tools/plan.js.map +1 -1
  93. package/dist/tools/record-delivery.js +4 -3
  94. package/dist/tools/record-delivery.js.map +1 -1
  95. package/dist/tools/set-project.js +9 -4
  96. package/dist/tools/set-project.js.map +1 -1
  97. package/dist/tools/start-allocation.js +16 -26
  98. package/dist/tools/start-allocation.js.map +1 -1
  99. package/dist/tools/start-task-allocation.js +72 -92
  100. package/dist/tools/start-task-allocation.js.map +1 -1
  101. package/dist/tools/update-task.js +149 -168
  102. package/dist/tools/update-task.js.map +1 -1
  103. package/dist/tools/validate-plan.js +58 -0
  104. package/dist/tools/validate-plan.js.map +1 -0
  105. package/package.json +1 -1
  106. package/dist/cli/commands/init.js +0 -336
  107. package/dist/cli/commands/init.js.map +0 -1
  108. package/dist/logo.js +0 -17
  109. 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',
@@ -30,7 +31,7 @@ const ArgsSchema = z
30
31
  })
31
32
  .strict();
32
33
  export const definition = {
33
- name: 'nos_update_task',
34
+ name: `${brand.toolPrefix}update_task`,
34
35
  description: 'Atualiza campos de uma tarefa existente. Só passe os campos que quer mudar. ' +
35
36
  'assignee_user_ids e label_ids são *substituições completas* — passar [] remove todos.',
36
37
  inputSchema: {
@@ -49,208 +50,188 @@ export const definition = {
49
50
  project_id: {
50
51
  type: 'string',
51
52
  format: 'uuid',
52
- description: 'Override do projeto. Se omitido, usa o projeto ativo (nos_set_project) ou o default.',
53
+ description: `Override do projeto. Se omitido, usa o projeto ativo (${brand.toolPrefix}set_project) ou o default.`,
53
54
  },
54
55
  },
55
56
  required: ['task_id'],
56
57
  additionalProperties: false,
57
58
  },
58
59
  };
59
- export async function handler(args, ctx) {
60
- const parsed = ArgsSchema.safeParse(args);
61
- if (!parsed.success) {
62
- return errorResult(`Argumento inválido: ${parsed.error.message}`);
60
+ const SCALAR_PATCH_FIELDS = ['title', 'description', 'status', 'priority', 'type', 'end_date'];
61
+ const SPRINT_UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
62
+ function toHistoryValue(v) {
63
+ return v === null || v === undefined ? null : String(v);
64
+ }
65
+ /** Diff entre a task atual e o input: patch a aplicar + changes pro history. Pura. */
66
+ export function buildTaskPatch(current, input, nextSprintId) {
67
+ const patch = {};
68
+ const changes = [];
69
+ for (const field of SCALAR_PATCH_FIELDS) {
70
+ const nextVal = input[field];
71
+ const curVal = current[field];
72
+ if (nextVal !== undefined && nextVal !== curVal) {
73
+ patch[field] = nextVal;
74
+ changes.push({ field, old_value: toHistoryValue(curVal), new_value: toHistoryValue(nextVal) });
75
+ }
63
76
  }
64
- const input = parsed.data;
65
- const cfg = resolveProjectConfig(ctx, input.project_id);
66
- if (isErrorResult(cfg))
67
- return cfg;
68
- const { supabase } = ctx;
69
- // Carrega task atual + valida escopo
77
+ if (nextSprintId !== undefined && nextSprintId !== current.sprint_id) {
78
+ patch.sprint_id = nextSprintId;
79
+ changes.push({
80
+ field: 'sprint_id',
81
+ old_value: toHistoryValue(current.sprint_id),
82
+ new_value: toHistoryValue(nextSprintId),
83
+ });
84
+ }
85
+ return { patch: patch, changes };
86
+ }
87
+ /** Compara conjunto atual vs novo de ids (assignees ou labels): já ordenados + flag de mudança. Pura. */
88
+ export function diffIdSet(currentIds, nextIds) {
89
+ const before = [...currentIds].sort();
90
+ const after = [...nextIds].sort();
91
+ const changed = !(before.length === after.length && before.every((v, i) => v === after[i]));
92
+ return { before, after, changed };
93
+ }
94
+ /** Monta o payload de resposta a partir da task recarregada + mudanças aplicadas. Pura. */
95
+ export function buildUpdateTaskResult(finalTask, changes, input) {
96
+ return {
97
+ ...finalTask,
98
+ changed_fields: changes.map((c) => c.field),
99
+ assignees_changed: input.assignee_user_ids !== undefined,
100
+ labels_changed: input.label_ids !== undefined,
101
+ };
102
+ }
103
+ async function loadCurrentTask(supabase, taskId, projectId) {
70
104
  const currentRes = await supabase
71
105
  .from('tasks')
72
106
  .select('id, title, description, status, priority, type, sprint_id, end_date, project_id')
73
- .eq('id', input.task_id)
74
- .eq('project_id', cfg.project_id)
107
+ .eq('id', taskId)
108
+ .eq('project_id', projectId)
75
109
  .maybeSingle();
76
110
  if (currentRes.error)
77
111
  return errorResult(`Erro ao buscar tarefa: ${currentRes.error.message}`);
78
112
  if (!currentRes.data)
79
113
  return errorResult('Tarefa não encontrada ou fora do projeto atual.');
80
- const current = currentRes.data;
81
- // Resolver sprint_id se passado
82
- let nextSprintId = undefined;
83
- if (input.sprint !== undefined) {
84
- if (input.sprint === 'none') {
85
- nextSprintId = null;
86
- }
87
- else if (input.sprint === 'active') {
88
- const sprintRes = await supabase
89
- .from('sprints')
90
- .select('id')
91
- .eq('project_id', cfg.project_id)
92
- .eq('status', 'ativa')
93
- .maybeSingle();
94
- if (sprintRes.error)
95
- return errorResult(`Erro ao buscar sprint ativa: ${sprintRes.error.message}`);
96
- if (!sprintRes.data)
97
- return errorResult('Não há sprint ativa no projeto.');
98
- nextSprintId = sprintRes.data.id;
99
- }
100
- else {
101
- if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(input.sprint)) {
102
- return errorResult('Argumento "sprint" deve ser "active", "none" ou um UUID válido.');
103
- }
104
- const sprintRes = await supabase
105
- .from('sprints')
106
- .select('id, project_id')
107
- .eq('id', input.sprint)
108
- .maybeSingle();
109
- if (sprintRes.error)
110
- return errorResult(`Erro ao validar sprint: ${sprintRes.error.message}`);
111
- if (!sprintRes.data || sprintRes.data.project_id !== cfg.project_id) {
112
- return errorResult('Sprint informada não pertence ao projeto atual.');
113
- }
114
- nextSprintId = sprintRes.data.id;
115
- }
116
- }
117
- // Monta patch + lista de mudanças pra history
118
- const patch = {};
119
- const changes = [];
120
- const recordChange = (field, oldVal, newVal) => {
121
- changes.push({
122
- field,
123
- old_value: oldVal === null || oldVal === undefined ? null : String(oldVal),
124
- new_value: newVal === null || newVal === undefined ? null : String(newVal),
125
- });
126
- };
127
- if (input.title !== undefined && input.title !== current.title) {
128
- patch.title = input.title;
129
- recordChange('title', current.title, input.title);
130
- }
131
- if (input.description !== undefined && input.description !== current.description) {
132
- patch.description = input.description;
133
- recordChange('description', current.description, input.description);
134
- }
135
- if (input.status !== undefined && input.status !== current.status) {
136
- patch.status = input.status;
137
- recordChange('status', current.status, input.status);
138
- }
139
- if (input.priority !== undefined && input.priority !== current.priority) {
140
- patch.priority = input.priority;
141
- recordChange('priority', current.priority, input.priority);
142
- }
143
- if (input.type !== undefined && input.type !== current.type) {
144
- patch.type = input.type;
145
- recordChange('type', current.type, input.type);
114
+ return currentRes.data;
115
+ }
116
+ async function resolveNextSprintId(supabase, projectId, sprintInput) {
117
+ if (sprintInput === undefined)
118
+ return undefined;
119
+ if (sprintInput === 'none')
120
+ return null;
121
+ if (sprintInput === 'active') {
122
+ const sprintRes = await supabase
123
+ .from('sprints')
124
+ .select('id')
125
+ .eq('project_id', projectId)
126
+ .eq('status', 'ativa')
127
+ .maybeSingle();
128
+ if (sprintRes.error)
129
+ return errorResult(`Erro ao buscar sprint ativa: ${sprintRes.error.message}`);
130
+ if (!sprintRes.data)
131
+ return errorResult('Não há sprint ativa no projeto.');
132
+ return sprintRes.data.id;
146
133
  }
147
- if (input.end_date !== undefined && input.end_date !== current.end_date) {
148
- patch.end_date = input.end_date;
149
- recordChange('end_date', current.end_date, input.end_date);
150
- }
151
- if (nextSprintId !== undefined && nextSprintId !== current.sprint_id) {
152
- patch.sprint_id = nextSprintId;
153
- recordChange('sprint_id', current.sprint_id, nextSprintId);
134
+ if (!SPRINT_UUID_RE.test(sprintInput)) {
135
+ return errorResult('Argumento "sprint" deve ser "active", "none" ou um UUID válido.');
154
136
  }
137
+ const sprintRes = await supabase.from('sprints').select('id, project_id').eq('id', sprintInput).maybeSingle();
138
+ if (sprintRes.error)
139
+ return errorResult(`Erro ao validar sprint: ${sprintRes.error.message}`);
140
+ if (!sprintRes.data || sprintRes.data.project_id !== projectId)
141
+ return errorResult('Sprint informada não pertence ao projeto atual.');
142
+ return sprintRes.data.id;
143
+ }
144
+ async function applyTaskPatch(supabase, userId, taskId, projectId, patch, changes) {
155
145
  if (Object.keys(patch).length > 0) {
156
- const updateRes = await supabase
157
- .from('tasks')
158
- .update(patch)
159
- .eq('id', input.task_id)
160
- .eq('project_id', cfg.project_id);
146
+ const updateRes = await supabase.from('tasks').update(patch).eq('id', taskId).eq('project_id', projectId);
161
147
  if (updateRes.error)
162
148
  return errorResult(`Erro ao atualizar tarefa: ${updateRes.error.message}`);
163
149
  }
164
- // Histórico (best-effort, sequencial pra preservar ordem)
165
150
  for (const ch of changes) {
166
151
  await insertTaskHistory(supabase, {
167
- task_id: input.task_id,
168
- user_id: ctx.user.id,
152
+ task_id: taskId,
153
+ user_id: userId,
169
154
  action: 'updated',
170
155
  field: ch.field,
171
156
  old_value: ch.old_value,
172
157
  new_value: ch.new_value,
173
158
  });
174
159
  }
175
- // Assignees — substituição total
176
- if (input.assignee_user_ids !== undefined) {
177
- const currentAssigneesRes = await supabase
178
- .from('task_assignees')
179
- .select('user_id')
180
- .eq('task_id', input.task_id);
181
- if (currentAssigneesRes.error) {
182
- return errorResult(`Erro ao buscar assignees atuais: ${currentAssigneesRes.error.message}`);
183
- }
184
- const before = (currentAssigneesRes.data ?? []).map((r) => r.user_id).sort();
185
- const after = [...input.assignee_user_ids].sort();
186
- const sameSet = before.length === after.length && before.every((v, i) => v === after[i]);
187
- if (!sameSet) {
188
- const del = await supabase.from('task_assignees').delete().eq('task_id', input.task_id);
189
- if (del.error)
190
- return errorResult(`Erro ao limpar assignees: ${del.error.message}`);
191
- if (input.assignee_user_ids.length > 0) {
192
- const ins = await supabase
193
- .from('task_assignees')
194
- .insert(input.assignee_user_ids.map((user_id) => ({ task_id: input.task_id, user_id })));
195
- if (ins.error)
196
- return errorResult(`Erro ao gravar novos assignees: ${ins.error.message}`);
197
- }
198
- await insertTaskHistory(supabase, {
199
- task_id: input.task_id,
200
- user_id: ctx.user.id,
201
- action: 'updated',
202
- field: 'assignees',
203
- old_value: JSON.stringify(before),
204
- new_value: JSON.stringify(after),
205
- });
206
- }
207
- }
208
- // Labels — substituição total
209
- if (input.label_ids !== undefined) {
210
- const currentLabelsRes = await supabase
211
- .from('task_label_assignments')
212
- .select('label_id')
213
- .eq('task_id', input.task_id);
214
- if (currentLabelsRes.error) {
215
- return errorResult(`Erro ao buscar labels atuais: ${currentLabelsRes.error.message}`);
216
- }
217
- const before = (currentLabelsRes.data ?? []).map((r) => r.label_id).sort();
218
- const after = [...input.label_ids].sort();
219
- const sameSet = before.length === after.length && before.every((v, i) => v === after[i]);
220
- if (!sameSet) {
221
- const del = await supabase.from('task_label_assignments').delete().eq('task_id', input.task_id);
222
- if (del.error)
223
- return errorResult(`Erro ao limpar labels: ${del.error.message}`);
224
- if (input.label_ids.length > 0) {
225
- const ins = await supabase
226
- .from('task_label_assignments')
227
- .insert(input.label_ids.map((label_id) => ({ task_id: input.task_id, label_id })));
228
- if (ins.error)
229
- return errorResult(`Erro ao gravar novas labels: ${ins.error.message}`);
230
- }
231
- await insertTaskHistory(supabase, {
232
- task_id: input.task_id,
233
- user_id: ctx.user.id,
234
- action: 'updated',
235
- field: 'labels',
236
- old_value: JSON.stringify(before),
237
- new_value: JSON.stringify(after),
238
- });
239
- }
160
+ return null;
161
+ }
162
+ const ASSIGNEE_SYNC = { table: 'task_assignees', idColumn: 'user_id', historyField: 'assignees',
163
+ fetchErr: 'Erro ao buscar assignees atuais', clearErr: 'Erro ao limpar assignees', insertErr: 'Erro ao gravar novos assignees' };
164
+ const LABEL_SYNC = { table: 'task_label_assignments', idColumn: 'label_id', historyField: 'labels',
165
+ fetchErr: 'Erro ao buscar labels atuais', clearErr: 'Erro ao limpar labels', insertErr: 'Erro ao gravar novas labels' };
166
+ async function applyIdSetDiff(supabase, spec, taskId, userId, nextIds) {
167
+ const currentRes = await supabase.from(spec.table).select(spec.idColumn).eq('task_id', taskId);
168
+ if (currentRes.error)
169
+ return errorResult(`${spec.fetchErr}: ${currentRes.error.message}`);
170
+ const currentIds = (currentRes.data ?? []).map((r) => r[spec.idColumn]);
171
+ const { before, after, changed } = diffIdSet(currentIds, nextIds);
172
+ if (!changed)
173
+ return null;
174
+ const del = await supabase.from(spec.table).delete().eq('task_id', taskId);
175
+ if (del.error)
176
+ return errorResult(`${spec.clearErr}: ${del.error.message}`);
177
+ if (nextIds.length > 0) {
178
+ const rows = nextIds.map((id) => ({ task_id: taskId, [spec.idColumn]: id }));
179
+ const ins = await supabase.from(spec.table).insert(rows);
180
+ if (ins.error)
181
+ return errorResult(`${spec.insertErr}: ${ins.error.message}`);
240
182
  }
241
- // Retorna task atualizada
183
+ await insertTaskHistory(supabase, {
184
+ task_id: taskId,
185
+ user_id: userId,
186
+ action: 'updated',
187
+ field: spec.historyField,
188
+ old_value: JSON.stringify(before),
189
+ new_value: JSON.stringify(after),
190
+ });
191
+ return null;
192
+ }
193
+ async function reloadTask(supabase, taskId) {
242
194
  const finalRes = await supabase
243
195
  .from('tasks')
244
196
  .select('id, key, title, status, priority, type, sprint_id, end_date, updated_at')
245
- .eq('id', input.task_id)
197
+ .eq('id', taskId)
246
198
  .single();
247
199
  if (finalRes.error)
248
200
  return errorResult(`Tarefa atualizada, mas falhou ao recarregar: ${finalRes.error.message}`);
249
- return jsonResult({
250
- ...finalRes.data,
251
- changed_fields: changes.map((c) => c.field),
252
- assignees_changed: input.assignee_user_ids !== undefined,
253
- labels_changed: input.label_ids !== undefined,
254
- });
201
+ return finalRes.data;
202
+ }
203
+ export async function handler(args, ctx) {
204
+ const parsed = ArgsSchema.safeParse(args);
205
+ if (!parsed.success)
206
+ return errorResult(`Argumento inválido: ${parsed.error.message}`);
207
+ const input = parsed.data;
208
+ const cfg = resolveProjectConfig(ctx, input.project_id);
209
+ if (isErrorResult(cfg))
210
+ return cfg;
211
+ const { supabase } = ctx;
212
+ const current = await loadCurrentTask(supabase, input.task_id, cfg.project_id);
213
+ if (isErrorResult(current))
214
+ return current;
215
+ const nextSprintId = await resolveNextSprintId(supabase, cfg.project_id, input.sprint);
216
+ if (isErrorResult(nextSprintId))
217
+ return nextSprintId;
218
+ const { patch, changes } = buildTaskPatch(current, input, nextSprintId);
219
+ const patchErr = await applyTaskPatch(supabase, ctx.user.id, input.task_id, cfg.project_id, patch, changes);
220
+ if (patchErr)
221
+ return patchErr;
222
+ if (input.assignee_user_ids !== undefined) {
223
+ const err = await applyIdSetDiff(supabase, ASSIGNEE_SYNC, input.task_id, ctx.user.id, input.assignee_user_ids);
224
+ if (err)
225
+ return err;
226
+ }
227
+ if (input.label_ids !== undefined) {
228
+ const err = await applyIdSetDiff(supabase, LABEL_SYNC, input.task_id, ctx.user.id, input.label_ids);
229
+ if (err)
230
+ return err;
231
+ }
232
+ const finalTask = await reloadTask(supabase, input.task_id);
233
+ if (isErrorResult(finalTask))
234
+ return finalTask;
235
+ return jsonResult(buildUpdateTaskResult(finalTask, changes, input));
255
236
  }
256
237
  //# sourceMappingURL=update-task.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-task.js","sourceRoot":"","sources":["../../src/tools/update-task.ts"],"names":[],"mappings":"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"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noclaf/cli",
3
- "version": "0.4.13",
3
+ "version": "0.4.15",
4
4
  "description": "MCP server e CLI pra controlar o NOS (Noclaf Operation System) a partir de assistentes de IA como Claude Code, Codex CLI e GitHub Copilot.",
5
5
  "type": "module",
6
6
  "bin": {