@noclaf/cli 0.4.13 → 0.4.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth.js +2 -1
- package/dist/auth.js.map +1 -1
- package/dist/brand.js +82 -0
- package/dist/brand.js.map +1 -0
- package/dist/cli/commands/auth.js +91 -58
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/init/auth-step.js +48 -0
- package/dist/cli/commands/init/auth-step.js.map +1 -0
- package/dist/cli/commands/init/clients-step.js +76 -0
- package/dist/cli/commands/init/clients-step.js.map +1 -0
- package/dist/cli/commands/init/context-step.js +66 -0
- package/dist/cli/commands/init/context-step.js.map +1 -0
- package/dist/cli/commands/init/index.js +67 -0
- package/dist/cli/commands/init/index.js.map +1 -0
- package/dist/cli/commands/init/project-step.js +105 -0
- package/dist/cli/commands/init/project-step.js.map +1 -0
- package/dist/cli/commands/init/provision-step.js +76 -0
- package/dist/cli/commands/init/provision-step.js.map +1 -0
- package/dist/cli/commands/validate-plan.js +42 -0
- package/dist/cli/commands/validate-plan.js.map +1 -0
- package/dist/cli/flows/clients.js +27 -17
- package/dist/cli/flows/clients.js.map +1 -1
- package/dist/cli.js +7 -5
- package/dist/cli.js.map +1 -1
- package/dist/config.js +19 -11
- package/dist/config.js.map +1 -1
- package/dist/constants.js +7 -8
- package/dist/constants.js.map +1 -1
- package/dist/lib/autopull.js +13 -0
- package/dist/lib/autopull.js.map +1 -0
- package/dist/lib/client-configs.js +37 -25
- package/dist/lib/client-configs.js.map +1 -1
- package/dist/lib/cowork-extension.js +42 -30
- package/dist/lib/cowork-extension.js.map +1 -1
- package/dist/lib/dependencies.js +83 -247
- package/dist/lib/dependencies.js.map +1 -1
- package/dist/lib/dependency-install.js +163 -0
- package/dist/lib/dependency-install.js.map +1 -0
- package/dist/lib/exec-delegate.js +2 -2
- package/dist/lib/exec-delegate.js.map +1 -1
- package/dist/lib/exec-engines.js +7 -6
- package/dist/lib/exec-engines.js.map +1 -1
- package/dist/lib/provision-apply.js +214 -0
- package/dist/lib/provision-apply.js.map +1 -0
- package/dist/lib/provision-collect.js +47 -0
- package/dist/lib/provision-collect.js.map +1 -0
- package/dist/lib/provision.js +8 -253
- package/dist/lib/provision.js.map +1 -1
- package/dist/lib/require-config.js +3 -2
- package/dist/lib/require-config.js.map +1 -1
- package/dist/lib/skills-cache.js +9 -8
- package/dist/lib/skills-cache.js.map +1 -1
- package/dist/lib/skills.js +30 -16
- package/dist/lib/skills.js.map +1 -1
- package/dist/lib/telemetry.js +2 -1
- package/dist/lib/telemetry.js.map +1 -1
- package/dist/lib/validate-plan-delegate.js +105 -0
- package/dist/lib/validate-plan-delegate.js.map +1 -0
- package/dist/lib/version-check.js +3 -2
- package/dist/lib/version-check.js.map +1 -1
- package/dist/mcp-server.js +107 -79
- package/dist/mcp-server.js.map +1 -1
- package/dist/tools/comment-task.js +32 -32
- package/dist/tools/comment-task.js.map +1 -1
- package/dist/tools/create-task.js +92 -101
- package/dist/tools/create-task.js.map +1 -1
- package/dist/tools/delegate-exec.js +4 -3
- package/dist/tools/delegate-exec.js.map +1 -1
- package/dist/tools/end-allocation.js +19 -32
- package/dist/tools/end-allocation.js.map +1 -1
- package/dist/tools/end-task-allocation.js +17 -26
- package/dist/tools/end-task-allocation.js.map +1 -1
- package/dist/tools/exec-status.js +4 -3
- package/dist/tools/exec-status.js.map +1 -1
- package/dist/tools/get-active-allocation.js +53 -60
- package/dist/tools/get-active-allocation.js.map +1 -1
- package/dist/tools/get-context.js +4 -3
- package/dist/tools/get-context.js.map +1 -1
- package/dist/tools/get-task.js +144 -142
- package/dist/tools/get-task.js.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/list-my-allocations.js +35 -43
- package/dist/tools/list-my-allocations.js.map +1 -1
- package/dist/tools/list-projects.js +3 -2
- package/dist/tools/list-projects.js.map +1 -1
- package/dist/tools/list-tasks.js +117 -124
- package/dist/tools/list-tasks.js.map +1 -1
- package/dist/tools/move-task.js +37 -39
- package/dist/tools/move-task.js.map +1 -1
- package/dist/tools/plan.js +3 -2
- package/dist/tools/plan.js.map +1 -1
- package/dist/tools/record-delivery.js +4 -3
- package/dist/tools/record-delivery.js.map +1 -1
- package/dist/tools/set-project.js +9 -4
- package/dist/tools/set-project.js.map +1 -1
- package/dist/tools/start-allocation.js +16 -26
- package/dist/tools/start-allocation.js.map +1 -1
- package/dist/tools/start-task-allocation.js +72 -92
- package/dist/tools/start-task-allocation.js.map +1 -1
- package/dist/tools/update-task.js +149 -168
- package/dist/tools/update-task.js.map +1 -1
- package/dist/tools/validate-plan.js +58 -0
- package/dist/tools/validate-plan.js.map +1 -0
- package/package.json +1 -1
- package/dist/cli/commands/init.js +0 -336
- package/dist/cli/commands/init.js.map +0 -1
- package/dist/logo.js +0 -17
- package/dist/logo.js.map +0 -1
package/dist/tools/list-tasks.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { jsonResult, errorResult } from '../lib/tool-result.js';
|
|
3
3
|
import { resolveProjectConfig, isErrorResult } from '../lib/require-config.js';
|
|
4
|
+
import { brand } from '../brand.js';
|
|
4
5
|
const TASK_STATUS = [
|
|
5
6
|
'backlog',
|
|
6
7
|
'todo',
|
|
@@ -27,7 +28,7 @@ const ArgsSchema = z
|
|
|
27
28
|
})
|
|
28
29
|
.strict();
|
|
29
30
|
export const definition = {
|
|
30
|
-
name:
|
|
31
|
+
name: `${brand.toolPrefix}list_tasks`,
|
|
31
32
|
description: 'Lista tarefas do projeto atual, filtradas pelos parâmetros opcionais. ' +
|
|
32
33
|
'Sem filtros, retorna até 50 tarefas mais recentes.',
|
|
33
34
|
inputSchema: {
|
|
@@ -50,94 +51,98 @@ export const definition = {
|
|
|
50
51
|
project_id: {
|
|
51
52
|
type: 'string',
|
|
52
53
|
format: 'uuid',
|
|
53
|
-
description:
|
|
54
|
+
description: `Override do projeto. Se omitido, usa o projeto ativo (${brand.toolPrefix}set_project) ou o default.`,
|
|
54
55
|
},
|
|
55
56
|
},
|
|
56
57
|
additionalProperties: false,
|
|
57
58
|
},
|
|
58
59
|
};
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
60
|
+
/** Agrupa assignees (já resolvidos p/ perfil) por task_id. Pura. */
|
|
61
|
+
export function groupAssigneesByTask(assigneeRows, profilesById) {
|
|
62
|
+
const assigneesByTask = new Map();
|
|
63
|
+
for (const row of assigneeRows) {
|
|
64
|
+
const profile = profilesById.get(row.user_id);
|
|
65
|
+
const list = assigneesByTask.get(row.task_id) ?? [];
|
|
66
|
+
list.push({
|
|
67
|
+
user_id: row.user_id,
|
|
68
|
+
full_name: profile?.full_name ?? null,
|
|
69
|
+
username: profile?.username ?? null,
|
|
70
|
+
});
|
|
71
|
+
assigneesByTask.set(row.task_id, list);
|
|
63
72
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
if (sub.error)
|
|
93
|
-
return errorResult(`Erro filtrando por assignee: ${sub.error.message}`);
|
|
94
|
-
restrictIds = { mode: 'in', ids: (sub.data ?? []).map((r) => r.task_id) };
|
|
95
|
-
}
|
|
73
|
+
return assigneesByTask;
|
|
74
|
+
}
|
|
75
|
+
/** Monta a lista de tasks com assignees embutidos, a partir das linhas + assignees agrupados. Pura. */
|
|
76
|
+
export function formatTaskList(tasks, assigneesByTask) {
|
|
77
|
+
return tasks.map((t) => ({
|
|
78
|
+
id: t.id,
|
|
79
|
+
key: t.key,
|
|
80
|
+
title: t.title,
|
|
81
|
+
status: t.status,
|
|
82
|
+
priority: t.priority,
|
|
83
|
+
type: t.type,
|
|
84
|
+
sprint_id: t.sprint_id,
|
|
85
|
+
end_date: t.end_date,
|
|
86
|
+
created_at: t.created_at,
|
|
87
|
+
assignees: assigneesByTask.get(t.id) ?? [],
|
|
88
|
+
}));
|
|
89
|
+
}
|
|
90
|
+
function isToolResult(v) {
|
|
91
|
+
return typeof v === 'object' && v !== null && 'content' in v;
|
|
92
|
+
}
|
|
93
|
+
async function resolveAssigneeFilter(supabase, userId, assignee) {
|
|
94
|
+
if (!assignee)
|
|
95
|
+
return null;
|
|
96
|
+
if (assignee === 'me') {
|
|
97
|
+
const sub = await supabase.from('task_assignees').select('task_id').eq('user_id', userId);
|
|
98
|
+
if (sub.error)
|
|
99
|
+
return errorResult(`Erro filtrando por assignee: ${sub.error.message}`);
|
|
100
|
+
return { mode: 'in', ids: (sub.data ?? []).map((r) => r.task_id) };
|
|
96
101
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
.from('sprints')
|
|
103
|
-
.select('id')
|
|
104
|
-
.eq('project_id', cfg.project_id)
|
|
105
|
-
.eq('status', 'ativa')
|
|
106
|
-
.maybeSingle();
|
|
107
|
-
if (sprintRes.error)
|
|
108
|
-
return errorResult(`Erro ao buscar sprint ativa: ${sprintRes.error.message}`);
|
|
109
|
-
if (!sprintRes.data) {
|
|
110
|
-
return jsonResult({ tasks: [], total_count: 0, note: 'Não há sprint ativa neste projeto.' });
|
|
111
|
-
}
|
|
112
|
-
sprintFilter = { mode: 'eq', value: sprintRes.data.id };
|
|
113
|
-
}
|
|
114
|
-
else if (input.sprint === 'none') {
|
|
115
|
-
sprintFilter = { mode: 'is_null' };
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
sprintFilter = { mode: 'eq', value: input.sprint };
|
|
119
|
-
}
|
|
102
|
+
if (assignee === 'unassigned') {
|
|
103
|
+
const sub = await supabase.from('task_assignees').select('task_id');
|
|
104
|
+
if (sub.error)
|
|
105
|
+
return errorResult(`Erro filtrando por assignee: ${sub.error.message}`);
|
|
106
|
+
return { mode: 'not_in', ids: (sub.data ?? []).map((r) => r.task_id) };
|
|
120
107
|
}
|
|
121
|
-
|
|
122
|
-
if (
|
|
123
|
-
return
|
|
108
|
+
const sub = await supabase.from('task_assignees').select('task_id').eq('user_id', assignee);
|
|
109
|
+
if (sub.error)
|
|
110
|
+
return errorResult(`Erro filtrando por assignee: ${sub.error.message}`);
|
|
111
|
+
return { mode: 'in', ids: (sub.data ?? []).map((r) => r.task_id) };
|
|
112
|
+
}
|
|
113
|
+
async function resolveSprintFilter(supabase, projectId, sprint) {
|
|
114
|
+
if (!sprint)
|
|
115
|
+
return null;
|
|
116
|
+
if (sprint === 'active') {
|
|
117
|
+
const sprintRes = await supabase
|
|
118
|
+
.from('sprints')
|
|
119
|
+
.select('id')
|
|
120
|
+
.eq('project_id', projectId)
|
|
121
|
+
.eq('status', 'ativa')
|
|
122
|
+
.maybeSingle();
|
|
123
|
+
if (sprintRes.error)
|
|
124
|
+
return errorResult(`Erro ao buscar sprint ativa: ${sprintRes.error.message}`);
|
|
125
|
+
if (!sprintRes.data)
|
|
126
|
+
return jsonResult({ tasks: [], total_count: 0, note: 'Não há sprint ativa neste projeto.' });
|
|
127
|
+
return { mode: 'eq', value: sprintRes.data.id };
|
|
124
128
|
}
|
|
129
|
+
if (sprint === 'none')
|
|
130
|
+
return { mode: 'is_null' };
|
|
131
|
+
return { mode: 'eq', value: sprint };
|
|
132
|
+
}
|
|
133
|
+
async function queryFilteredTasks(supabase, projectId, input, restrictIds, sprintFilter) {
|
|
125
134
|
let query = supabase
|
|
126
135
|
.from('tasks')
|
|
127
136
|
.select('id, key, title, status, priority, type, sprint_id, end_date, created_at')
|
|
128
|
-
.eq('project_id',
|
|
129
|
-
if (restrictIds?.mode === 'in')
|
|
137
|
+
.eq('project_id', projectId);
|
|
138
|
+
if (restrictIds?.mode === 'in')
|
|
130
139
|
query = query.in('id', restrictIds.ids);
|
|
131
|
-
|
|
132
|
-
else if (restrictIds?.mode === 'not_in' && restrictIds.ids.length > 0) {
|
|
140
|
+
else if (restrictIds?.mode === 'not_in' && restrictIds.ids.length > 0)
|
|
133
141
|
query = query.not('id', 'in', `(${restrictIds.ids.join(',')})`);
|
|
134
|
-
|
|
135
|
-
if (sprintFilter?.mode === 'eq') {
|
|
142
|
+
if (sprintFilter?.mode === 'eq')
|
|
136
143
|
query = query.eq('sprint_id', sprintFilter.value);
|
|
137
|
-
|
|
138
|
-
else if (sprintFilter?.mode === 'is_null') {
|
|
144
|
+
else if (sprintFilter?.mode === 'is_null')
|
|
139
145
|
query = query.is('sprint_id', null);
|
|
140
|
-
}
|
|
141
146
|
if (input.status?.length)
|
|
142
147
|
query = query.in('status', input.status);
|
|
143
148
|
if (input.priority?.length)
|
|
@@ -148,66 +153,54 @@ export async function handler(args, ctx) {
|
|
|
148
153
|
const pattern = `%${input.search.replace(/[%_]/g, (m) => `\\${m}`)}%`;
|
|
149
154
|
query = query.or(`title.ilike.${pattern},description.ilike.${pattern},key.ilike.${pattern}`);
|
|
150
155
|
}
|
|
151
|
-
query = query
|
|
152
|
-
|
|
153
|
-
.range(input.offset, input.offset + input.limit - 1);
|
|
154
|
-
const { data: taskRows, error } = await query;
|
|
156
|
+
query = query.order('created_at', { ascending: false }).range(input.offset, input.offset + input.limit - 1);
|
|
157
|
+
const { data, error } = await query;
|
|
155
158
|
if (error)
|
|
156
159
|
return errorResult(`Erro ao listar tarefas: ${error.message}`);
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
const taskIds = tasks.map((t) => t.id);
|
|
163
|
-
const assigneesRes = await supabase
|
|
164
|
-
.from('task_assignees')
|
|
165
|
-
.select('task_id, user_id')
|
|
166
|
-
.in('task_id', taskIds);
|
|
167
|
-
if (assigneesRes.error) {
|
|
160
|
+
return data ?? [];
|
|
161
|
+
}
|
|
162
|
+
async function loadAssigneeProfiles(supabase, taskIds) {
|
|
163
|
+
const assigneesRes = await supabase.from('task_assignees').select('task_id, user_id').in('task_id', taskIds);
|
|
164
|
+
if (assigneesRes.error)
|
|
168
165
|
return errorResult(`Erro ao buscar assignees: ${assigneesRes.error.message}`);
|
|
169
|
-
}
|
|
170
166
|
const assigneeRows = assigneesRes.data ?? [];
|
|
171
167
|
const userIds = Array.from(new Set(assigneeRows.map((a) => a.user_id)));
|
|
172
168
|
let profilesById = new Map();
|
|
173
169
|
if (userIds.length > 0) {
|
|
174
|
-
const profilesRes = await supabase
|
|
175
|
-
|
|
176
|
-
.select('id, full_name, username')
|
|
177
|
-
.in('id', userIds);
|
|
178
|
-
if (profilesRes.error) {
|
|
170
|
+
const profilesRes = await supabase.from('profiles').select('id, full_name, username').in('id', userIds);
|
|
171
|
+
if (profilesRes.error)
|
|
179
172
|
return errorResult(`Erro ao buscar perfis: ${profilesRes.error.message}`);
|
|
180
|
-
}
|
|
181
173
|
profilesById = new Map((profilesRes.data ?? []).map((p) => [p.id, { full_name: p.full_name, username: p.username }]));
|
|
182
174
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
}
|
|
194
|
-
const
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
tasks:
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
175
|
+
return { assigneeRows, profilesById };
|
|
176
|
+
}
|
|
177
|
+
export async function handler(args, ctx) {
|
|
178
|
+
const parsed = ArgsSchema.safeParse(args);
|
|
179
|
+
if (!parsed.success)
|
|
180
|
+
return errorResult(`Argumento inválido: ${parsed.error.message}`);
|
|
181
|
+
const input = parsed.data;
|
|
182
|
+
const cfg = resolveProjectConfig(ctx, input.project_id);
|
|
183
|
+
if (isErrorResult(cfg))
|
|
184
|
+
return cfg;
|
|
185
|
+
const { supabase } = ctx;
|
|
186
|
+
const restrictIds = await resolveAssigneeFilter(supabase, ctx.user.id, input.assignee);
|
|
187
|
+
if (isToolResult(restrictIds))
|
|
188
|
+
return restrictIds;
|
|
189
|
+
const sprintFilter = await resolveSprintFilter(supabase, cfg.project_id, input.sprint);
|
|
190
|
+
if (isToolResult(sprintFilter))
|
|
191
|
+
return sprintFilter;
|
|
192
|
+
// Short-circuit: filtro IN com array vazio → nada bate
|
|
193
|
+
if (restrictIds?.mode === 'in' && restrictIds.ids.length === 0)
|
|
194
|
+
return jsonResult({ tasks: [], total_count: 0 });
|
|
195
|
+
const tasks = await queryFilteredTasks(supabase, cfg.project_id, input, restrictIds, sprintFilter);
|
|
196
|
+
if (isToolResult(tasks))
|
|
197
|
+
return tasks;
|
|
198
|
+
if (tasks.length === 0)
|
|
199
|
+
return jsonResult({ tasks: [], count: 0, limit: input.limit, offset: input.offset });
|
|
200
|
+
const relations = await loadAssigneeProfiles(supabase, tasks.map((t) => t.id));
|
|
201
|
+
if (isToolResult(relations))
|
|
202
|
+
return relations;
|
|
203
|
+
const result = formatTaskList(tasks, groupAssigneesByTask(relations.assigneeRows, relations.profilesById));
|
|
204
|
+
return jsonResult({ tasks: result, count: result.length, limit: input.limit, offset: input.offset });
|
|
212
205
|
}
|
|
213
206
|
//# sourceMappingURL=list-tasks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-tasks.js","sourceRoot":"","sources":["../../src/tools/list-tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"list-tasks.js","sourceRoot":"","sources":["../../src/tools/list-tasks.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/move-task.js
CHANGED
|
@@ -2,6 +2,7 @@ import { z } from 'zod';
|
|
|
2
2
|
import { jsonResult, errorResult } from '../lib/tool-result.js';
|
|
3
3
|
import { resolveProjectConfig, isErrorResult } from '../lib/require-config.js';
|
|
4
4
|
import { insertTaskHistory } from '../lib/task-history.js';
|
|
5
|
+
import { brand } from '../brand.js';
|
|
5
6
|
const TASK_STATUS = [
|
|
6
7
|
'backlog',
|
|
7
8
|
'todo',
|
|
@@ -20,9 +21,9 @@ const ArgsSchema = z
|
|
|
20
21
|
})
|
|
21
22
|
.strict();
|
|
22
23
|
export const definition = {
|
|
23
|
-
name:
|
|
24
|
+
name: `${brand.toolPrefix}move_task`,
|
|
24
25
|
description: 'Atalho pra mudar o status de uma tarefa (move entre colunas do Kanban). ' +
|
|
25
|
-
|
|
26
|
+
`Equivale a \`${brand.toolPrefix}update_task\` passando só o campo status. ` +
|
|
26
27
|
'⚠️ Mover para status terminal (done/qa/code_review/rejected/production) NÃO para o timer. ' +
|
|
27
28
|
'Se há task_allocation ativa nessa task, pergunte ao usuário se quer encerrar o timer junto.',
|
|
28
29
|
inputSchema: {
|
|
@@ -33,49 +34,53 @@ export const definition = {
|
|
|
33
34
|
project_id: {
|
|
34
35
|
type: 'string',
|
|
35
36
|
format: 'uuid',
|
|
36
|
-
description:
|
|
37
|
+
description: `Override do projeto. Se omitido, usa o projeto ativo (${brand.toolPrefix}set_project) ou o default.`,
|
|
37
38
|
},
|
|
38
39
|
},
|
|
39
40
|
required: ['task_id', 'status'],
|
|
40
41
|
additionalProperties: false,
|
|
41
42
|
},
|
|
42
43
|
};
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
44
|
+
/** Monta o payload de resposta do move_task, decidindo previous_status/already_in_status. Pura. */
|
|
45
|
+
export function buildMoveTaskResult(current, taskId, status) {
|
|
46
|
+
const alreadyInStatus = current.status === status;
|
|
47
|
+
return {
|
|
48
|
+
task_id: taskId,
|
|
49
|
+
key: current.key,
|
|
50
|
+
title: current.title,
|
|
51
|
+
status,
|
|
52
|
+
previous_status: alreadyInStatus ? status : current.status,
|
|
53
|
+
already_in_status: alreadyInStatus,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
async function loadTaskForMove(supabase, taskId, projectId) {
|
|
53
57
|
const currentRes = await supabase
|
|
54
58
|
.from('tasks')
|
|
55
59
|
.select('id, key, title, status')
|
|
56
|
-
.eq('id',
|
|
57
|
-
.eq('project_id',
|
|
60
|
+
.eq('id', taskId)
|
|
61
|
+
.eq('project_id', projectId)
|
|
58
62
|
.maybeSingle();
|
|
59
63
|
if (currentRes.error)
|
|
60
64
|
return errorResult(`Erro ao buscar tarefa: ${currentRes.error.message}`);
|
|
61
65
|
if (!currentRes.data)
|
|
62
66
|
return errorResult('Tarefa não encontrada ou fora do projeto atual.');
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
67
|
+
return currentRes.data;
|
|
68
|
+
}
|
|
69
|
+
export async function handler(args, ctx) {
|
|
70
|
+
const parsed = ArgsSchema.safeParse(args);
|
|
71
|
+
if (!parsed.success)
|
|
72
|
+
return errorResult(`Argumento inválido: ${parsed.error.message}`);
|
|
73
|
+
const { task_id, status } = parsed.data;
|
|
74
|
+
const cfg = resolveProjectConfig(ctx, parsed.data.project_id);
|
|
75
|
+
if (isErrorResult(cfg))
|
|
76
|
+
return cfg;
|
|
77
|
+
const { supabase } = ctx;
|
|
78
|
+
const current = await loadTaskForMove(supabase, task_id, cfg.project_id);
|
|
79
|
+
if (isErrorResult(current))
|
|
80
|
+
return current;
|
|
81
|
+
if (current.status === status)
|
|
82
|
+
return jsonResult(buildMoveTaskResult(current, task_id, status));
|
|
83
|
+
const updateRes = await supabase.from('tasks').update({ status }).eq('id', task_id).eq('project_id', cfg.project_id);
|
|
79
84
|
if (updateRes.error)
|
|
80
85
|
return errorResult(`Erro ao mover tarefa: ${updateRes.error.message}`);
|
|
81
86
|
await insertTaskHistory(supabase, {
|
|
@@ -86,13 +91,6 @@ export async function handler(args, ctx) {
|
|
|
86
91
|
old_value: current.status,
|
|
87
92
|
new_value: status,
|
|
88
93
|
});
|
|
89
|
-
return jsonResult(
|
|
90
|
-
task_id,
|
|
91
|
-
key: current.key,
|
|
92
|
-
title: current.title,
|
|
93
|
-
status,
|
|
94
|
-
previous_status: current.status,
|
|
95
|
-
already_in_status: false,
|
|
96
|
-
});
|
|
94
|
+
return jsonResult(buildMoveTaskResult(current, task_id, status));
|
|
97
95
|
}
|
|
98
96
|
//# sourceMappingURL=move-task.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"move-task.js","sourceRoot":"","sources":["../../src/tools/move-task.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"move-task.js","sourceRoot":"","sources":["../../src/tools/move-task.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/plan.js
CHANGED
|
@@ -3,6 +3,7 @@ import { existsSync } from 'node:fs';
|
|
|
3
3
|
import { jsonResult, errorResult } from '../lib/tool-result.js';
|
|
4
4
|
import { runPlan } from '../lib/plan-delegate.js';
|
|
5
5
|
import { ENGINES, PLAN_ENGINE } from '../lib/exec-engines.js';
|
|
6
|
+
import { brand } from '../brand.js';
|
|
6
7
|
const ArgsSchema = z
|
|
7
8
|
.object({
|
|
8
9
|
project: z.string().min(1),
|
|
@@ -11,10 +12,10 @@ const ArgsSchema = z
|
|
|
11
12
|
})
|
|
12
13
|
.strict();
|
|
13
14
|
export const definition = {
|
|
14
|
-
name:
|
|
15
|
+
name: `${brand.cliToolPrefix}plan`,
|
|
15
16
|
description: 'Roda o engine PENSANTE (claude ou codex local, na assinatura — sem API) sobre a raiz do ' +
|
|
16
17
|
'projeto e escreve/refina o `plan.md` de rascunho pré-SDD. NÃO implementa código, não cria ' +
|
|
17
|
-
|
|
18
|
+
`worktree e não roda checks — pra isso use \`${brand.cliToolPrefix}delegate_exec\`. Se o \`plan.md\` não existe, ` +
|
|
18
19
|
'semeia a partir de um template; se existe, refina o conteúdo atual.',
|
|
19
20
|
inputSchema: {
|
|
20
21
|
type: 'object',
|
package/dist/tools/plan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/tools/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/tools/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,UAAU,GAAG,CAAC;KACjB,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE;CACnC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,IAAI,EAAE,GAAG,KAAK,CAAC,aAAa,MAAM;IAClC,WAAW,EACT,0FAA0F;QAC1F,4FAA4F;QAC5F,+CAA+C,KAAK,CAAC,aAAa,gDAAgD;QAClH,qEAAqE;IACvE,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0DAA0D;aACxE;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2DAA2D;aACzE;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC;gBAClB,WAAW,EAAE,oCAAoC,WAAW,GAAG;aAChE;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC;QACpC,oBAAoB,EAAE,KAAK;KAC5B;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAa,EAAE,IAAiB;IAC5D,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,WAAW,CAAC,uBAAuB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IACrD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,OAAO,WAAW,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/D,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,IAAI,mBAAmB,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5E,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { jsonResult, errorResult } from '../lib/tool-result.js';
|
|
3
3
|
import { resolveProjectConfig, isErrorResult } from '../lib/require-config.js';
|
|
4
|
+
import { brand, env } from '../brand.js';
|
|
4
5
|
const ArgsSchema = z
|
|
5
6
|
.object({
|
|
6
7
|
title: z.string().min(1),
|
|
@@ -11,7 +12,7 @@ const ArgsSchema = z
|
|
|
11
12
|
})
|
|
12
13
|
.strict();
|
|
13
14
|
export const definition = {
|
|
14
|
-
name:
|
|
15
|
+
name: `${brand.toolPrefix}record_delivery`,
|
|
15
16
|
description: 'Registra uma ENTREGA do loop de build (um ticket concluído / PR aberto) na analítica ' +
|
|
16
17
|
'de entrega do NOS. Chamado pelo `/build` no fecho. Guarda título, PR, iterações e ' +
|
|
17
18
|
'vincula à tarefa/projeto. Uma chamada por ticket entregue.',
|
|
@@ -35,7 +36,7 @@ export const definition = {
|
|
|
35
36
|
project_id: {
|
|
36
37
|
type: 'string',
|
|
37
38
|
format: 'uuid',
|
|
38
|
-
description:
|
|
39
|
+
description: `Override do projeto. Se omitido, usa o ativo (${brand.toolPrefix}set_project) ou o default.`,
|
|
39
40
|
},
|
|
40
41
|
},
|
|
41
42
|
required: ['title'],
|
|
@@ -57,7 +58,7 @@ export async function handler(args, ctx) {
|
|
|
57
58
|
title: parsed.data.title,
|
|
58
59
|
pr_url: parsed.data.pr_url ?? null,
|
|
59
60
|
iterations: parsed.data.iterations ?? null,
|
|
60
|
-
client:
|
|
61
|
+
client: env('CLIENT') ?? null,
|
|
61
62
|
};
|
|
62
63
|
// `deliveries` ainda não está nos types gerados (rode `npm run gen:types` após a
|
|
63
64
|
// migration) — usamos o client destipado só pra este insert.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-delivery.js","sourceRoot":"","sources":["../../src/tools/record-delivery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"record-delivery.js","sourceRoot":"","sources":["../../src/tools/record-delivery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { jsonResult, errorResult } from '../lib/tool-result.js';
|
|
3
3
|
import { setActiveProjectId } from '../lib/active-project.js';
|
|
4
|
+
import { brand } from '../brand.js';
|
|
4
5
|
const ArgsSchema = z
|
|
5
6
|
.object({
|
|
6
7
|
project_id: z.string().uuid(),
|
|
7
8
|
})
|
|
8
9
|
.strict();
|
|
9
10
|
export const definition = {
|
|
10
|
-
name:
|
|
11
|
+
name: `${brand.toolPrefix}set_project`,
|
|
11
12
|
description: 'Define o projeto ativo da sessão (em memória, dura enquanto o servidor estiver ' +
|
|
12
13
|
'rodando). As tools de tarefa/alocação passam a operar nesse projeto, até você trocar ' +
|
|
13
|
-
|
|
14
|
+
`de novo. Use \`${brand.toolPrefix}list_projects\` antes para descobrir os ids.`,
|
|
14
15
|
inputSchema: {
|
|
15
16
|
type: 'object',
|
|
16
17
|
properties: {
|
|
17
|
-
project_id: {
|
|
18
|
+
project_id: {
|
|
19
|
+
type: 'string',
|
|
20
|
+
format: 'uuid',
|
|
21
|
+
description: `UUID do projeto (de ${brand.toolPrefix}list_projects).`,
|
|
22
|
+
},
|
|
18
23
|
},
|
|
19
24
|
required: ['project_id'],
|
|
20
25
|
additionalProperties: false,
|
|
@@ -35,7 +40,7 @@ export async function handler(args, ctx) {
|
|
|
35
40
|
if (error)
|
|
36
41
|
return errorResult(`Erro ao validar projeto: ${error.message}`);
|
|
37
42
|
if (!data) {
|
|
38
|
-
return errorResult(
|
|
43
|
+
return errorResult(`Projeto não encontrado ou sem acesso. Confira o id em \`${brand.toolPrefix}list_projects\`.`);
|
|
39
44
|
}
|
|
40
45
|
setActiveProjectId(project_id);
|
|
41
46
|
return jsonResult({
|