@noclaf/cli 0.4.14 → 0.4.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/flows/clients.js +27 -17
- package/dist/cli/flows/clients.js.map +1 -1
- package/dist/cli.js +5 -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/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/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 +3 -2
- package/dist/tools/validate-plan.js.map +1 -1
- 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/mcp-server.js
CHANGED
|
@@ -12,55 +12,88 @@ import { filterSkillsForSurface } from './lib/skills.js';
|
|
|
12
12
|
import { loadSkills, skillResourceDescriptors, readSkillResource, skillPromptDescriptors, buildSkillPrompt, } from './lib/skill-serve.js';
|
|
13
13
|
import { provision } from './lib/provision.js';
|
|
14
14
|
import { provisionHooks } from './lib/hooks.js';
|
|
15
|
-
import { claudeTarget
|
|
15
|
+
import { claudeTarget } from './lib/targets.js';
|
|
16
16
|
import { ensureSkillsCache } from './lib/skills-cache.js';
|
|
17
17
|
import { track } from './lib/telemetry.js';
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
import { shouldRunAutoPull, pickProvisionTarget } from './lib/autopull.js';
|
|
19
|
+
import { brand, env } from './brand.js';
|
|
20
|
+
/** Carrega o config do projeto; erro de parse é degradado (log + null), nunca fatal. */
|
|
21
|
+
function loadConfigStep() {
|
|
20
22
|
try {
|
|
21
|
-
|
|
23
|
+
return loadProjectConfig();
|
|
22
24
|
}
|
|
23
25
|
catch (err) {
|
|
24
|
-
console.error(`[
|
|
26
|
+
console.error(`[${brand.mcpBinName}] ${brand.projectConfigFile} inválido: ${err.message}`);
|
|
27
|
+
return null;
|
|
25
28
|
}
|
|
26
|
-
|
|
27
|
-
|
|
29
|
+
}
|
|
30
|
+
// Skills vêm de um repo aberto → garante o cache local (~/.noclaf/skills) antes
|
|
31
|
+
// de servir/auto-pull. Baixa só se ausente; best-effort (offline → degrada).
|
|
32
|
+
async function initSkillsCache() {
|
|
28
33
|
try {
|
|
29
34
|
const r = await ensureSkillsCache();
|
|
30
35
|
if (r.status === 'fetched') {
|
|
31
|
-
console.error(`[
|
|
36
|
+
console.error(`[${brand.mcpBinName}] skills baixadas (${r.repo}@${r.ref})`);
|
|
32
37
|
}
|
|
33
38
|
else if (r.status === 'failed') {
|
|
34
|
-
console.error(`[
|
|
39
|
+
console.error(`[${brand.mcpBinName}] aviso: skills indisponíveis: ${r.error}`);
|
|
35
40
|
}
|
|
36
41
|
}
|
|
37
42
|
catch (err) {
|
|
38
|
-
console.error(`[
|
|
43
|
+
console.error(`[${brand.mcpBinName}] aviso: cache de skills pulado: ${err.message}`);
|
|
39
44
|
}
|
|
40
|
-
|
|
45
|
+
}
|
|
46
|
+
async function authenticateSession() {
|
|
41
47
|
try {
|
|
42
|
-
session = await createAuthenticatedClient();
|
|
43
|
-
console.error(`[
|
|
48
|
+
const session = await createAuthenticatedClient();
|
|
49
|
+
console.error(`[${brand.mcpBinName}] autenticado como ${session.user.email}`);
|
|
50
|
+
return session;
|
|
44
51
|
}
|
|
45
52
|
catch (err) {
|
|
46
|
-
console.error(`[
|
|
53
|
+
console.error(`[${brand.mcpBinName}] aviso: ${err.message}`);
|
|
54
|
+
return null;
|
|
47
55
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
56
|
+
}
|
|
57
|
+
/** Surface deste worker (pra filtro de visibilidade `clients:`). Cowork seta
|
|
58
|
+
* NOCLAF_CLIENT=cowork; Claude Code costuma deixar vazio → sem filtro (mostra tudo). */
|
|
59
|
+
function resolveSurface() {
|
|
60
|
+
return env('CLIENT') || null;
|
|
61
|
+
}
|
|
62
|
+
function registerToolHandlers(server, session, projectConfig) {
|
|
52
63
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
53
64
|
tools: toolDefinitions,
|
|
54
65
|
}));
|
|
55
|
-
|
|
56
|
-
|
|
66
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
67
|
+
const tool = tools[request.params.name];
|
|
68
|
+
if (!tool) {
|
|
69
|
+
return errorResult(`Tool desconhecida: ${request.params.name}`);
|
|
70
|
+
}
|
|
71
|
+
if (!session) {
|
|
72
|
+
return errorResult(`Não autenticado. Rode \`${brand.name} login\` antes de iniciar o Claude Code.`);
|
|
73
|
+
}
|
|
74
|
+
const ctx = {
|
|
75
|
+
supabase: session.supabase,
|
|
76
|
+
user: session.user,
|
|
77
|
+
config: projectConfig,
|
|
78
|
+
};
|
|
79
|
+
try {
|
|
80
|
+
return await tool.handler(request.params.arguments ?? {}, ctx);
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
return errorResult(`Erro inesperado em ${request.params.name}: ${err.message}`);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
// Resources: o conhecimento (skills/commands/agents) do pacote @noclaf/skills.
|
|
88
|
+
// Deixa o worker de IA ler os artefatos sob demanda, mesmo sem rodar `noclaf sync`.
|
|
89
|
+
function registerResourceHandlers(server, surface) {
|
|
57
90
|
server.setRequestHandler(ListResourcesRequestSchema, async () => {
|
|
58
91
|
try {
|
|
59
92
|
const { docs } = loadSkills();
|
|
60
93
|
return { resources: skillResourceDescriptors(filterSkillsForSurface(docs, surface)) };
|
|
61
94
|
}
|
|
62
95
|
catch (err) {
|
|
63
|
-
console.error(`[
|
|
96
|
+
console.error(`[${brand.mcpBinName}] aviso: skills indisponíveis: ${err.message}`);
|
|
64
97
|
return { resources: [] };
|
|
65
98
|
}
|
|
66
99
|
});
|
|
@@ -69,15 +102,17 @@ async function main() {
|
|
|
69
102
|
const r = readSkillResource(request.params.uri, filterSkillsForSurface(docs, surface), rawByPath);
|
|
70
103
|
return { contents: [{ uri: r.uri, mimeType: r.mimeType, text: r.text }] };
|
|
71
104
|
});
|
|
72
|
-
|
|
73
|
-
|
|
105
|
+
}
|
|
106
|
+
// Prompts: commands/skills como prompts invocáveis. Funciona no Claude Code E no
|
|
107
|
+
// Cowork (que não lê `~/.claude`) — é o caminho de slash-command lá.
|
|
108
|
+
function registerPromptHandlers(server, surface, session) {
|
|
74
109
|
server.setRequestHandler(ListPromptsRequestSchema, async () => {
|
|
75
110
|
try {
|
|
76
111
|
const { docs } = loadSkills();
|
|
77
112
|
return { prompts: skillPromptDescriptors(filterSkillsForSurface(docs, surface)) };
|
|
78
113
|
}
|
|
79
114
|
catch (err) {
|
|
80
|
-
console.error(`[
|
|
115
|
+
console.error(`[${brand.mcpBinName}] aviso: prompts indisponíveis: ${err.message}`);
|
|
81
116
|
return { prompts: [] };
|
|
82
117
|
}
|
|
83
118
|
});
|
|
@@ -96,67 +131,60 @@ async function main() {
|
|
|
96
131
|
messages: [{ role: 'user', content: { type: 'text', text } }],
|
|
97
132
|
};
|
|
98
133
|
});
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
const ctx = {
|
|
108
|
-
supabase: session.supabase,
|
|
109
|
-
user: session.user,
|
|
110
|
-
config: projectConfig,
|
|
111
|
-
};
|
|
112
|
-
try {
|
|
113
|
-
return await tool.handler(request.params.arguments ?? {}, ctx);
|
|
114
|
-
}
|
|
115
|
-
catch (err) {
|
|
116
|
-
return errorResult(`Erro inesperado em ${request.params.name}: ${err.message}`);
|
|
117
|
-
}
|
|
134
|
+
}
|
|
135
|
+
// Hooks (só Claude Code): re-registra os gatilhos no settings.json.
|
|
136
|
+
function reinstallHooksIfClaude(target, projectConfig) {
|
|
137
|
+
if (target !== claudeTarget)
|
|
138
|
+
return;
|
|
139
|
+
const h = provisionHooks({
|
|
140
|
+
surface: claudeTarget.surface,
|
|
141
|
+
selection: projectConfig?.selection,
|
|
118
142
|
});
|
|
143
|
+
if (h.installed.length > 0 || h.prunedScripts.length > 0) {
|
|
144
|
+
console.error(`[${brand.mcpBinName}] auto-pull: ${h.installed.length} hooks, ` +
|
|
145
|
+
`${h.prunedScripts.length} removidos em ${h.settingsPath}.`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// Auto-pull: a cada start, refresca os arquivos nativos (idempotente via manifesto;
|
|
149
|
+
// desliga com NOCLAF_AUTO_PULL=0). No Cowork as skills chegam por resources/prompts,
|
|
150
|
+
// não por arquivo nativo — então pulamos.
|
|
151
|
+
async function runAutoPull(projectConfig) {
|
|
152
|
+
const client = env('CLIENT');
|
|
153
|
+
const autoPull = env('AUTO_PULL');
|
|
154
|
+
if (!shouldRunAutoPull(client, autoPull))
|
|
155
|
+
return;
|
|
156
|
+
const target = pickProvisionTarget(client);
|
|
157
|
+
try {
|
|
158
|
+
const result = provision({ target, selection: projectConfig?.selection });
|
|
159
|
+
const changed = result.files.filter((f) => f.action === 'create' || f.action === 'update');
|
|
160
|
+
const pruned = result.files.filter((f) => f.action === 'prune');
|
|
161
|
+
if (changed.length > 0 || pruned.length > 0) {
|
|
162
|
+
console.error(`[${brand.mcpBinName}] auto-pull: ${changed.length} atualizados, ` +
|
|
163
|
+
`${pruned.length} removidos em ${result.targetDir}. Reinicie o cliente pra carregar.`);
|
|
164
|
+
}
|
|
165
|
+
reinstallHooksIfClaude(target, projectConfig);
|
|
166
|
+
}
|
|
167
|
+
catch (err) {
|
|
168
|
+
console.error(`[${brand.mcpBinName}] auto-pull pulou: ${err.message}`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
async function main() {
|
|
172
|
+
const projectConfig = loadConfigStep();
|
|
173
|
+
await initSkillsCache();
|
|
174
|
+
const session = await authenticateSession();
|
|
175
|
+
const server = new Server({ name: brand.mcpBinName, version: VERSION }, { capabilities: { tools: {}, resources: {}, prompts: {} } });
|
|
176
|
+
const surface = resolveSurface();
|
|
177
|
+
registerToolHandlers(server, session, projectConfig);
|
|
178
|
+
registerResourceHandlers(server, surface);
|
|
179
|
+
registerPromptHandlers(server, surface, session);
|
|
119
180
|
notifyMcpServerIfUpdate();
|
|
120
181
|
const transport = new StdioServerTransport();
|
|
121
182
|
await server.connect(transport);
|
|
122
|
-
console.error(
|
|
123
|
-
|
|
124
|
-
// desliga com NOCLAF_AUTO_PULL=0). No Cowork as skills chegam por resources/prompts,
|
|
125
|
-
// não por arquivo nativo — então pulamos.
|
|
126
|
-
const autoPull = process.env.NOCLAF_AUTO_PULL;
|
|
127
|
-
const client = process.env.NOCLAF_CLIENT;
|
|
128
|
-
const isCowork = client === 'cowork';
|
|
129
|
-
if (!isCowork && autoPull !== '0' && autoPull !== 'false') {
|
|
130
|
-
// Cliente nativo do worker: Codex escreve `~/.codex` (skills traduzidas),
|
|
131
|
-
// qualquer outro cai pro Claude Code (`~/.claude`).
|
|
132
|
-
const target = client === 'codex' ? codexTarget : claudeTarget;
|
|
133
|
-
try {
|
|
134
|
-
const result = provision({ target, selection: projectConfig?.selection });
|
|
135
|
-
const changed = result.files.filter((f) => f.action === 'create' || f.action === 'update');
|
|
136
|
-
const pruned = result.files.filter((f) => f.action === 'prune');
|
|
137
|
-
if (changed.length > 0 || pruned.length > 0) {
|
|
138
|
-
console.error(`[noclaf-cli] auto-pull: ${changed.length} atualizados, ` +
|
|
139
|
-
`${pruned.length} removidos em ${result.targetDir}. Reinicie o cliente pra carregar.`);
|
|
140
|
-
}
|
|
141
|
-
// Hooks (só Claude Code): re-registra os gatilhos no settings.json.
|
|
142
|
-
if (target === claudeTarget) {
|
|
143
|
-
const h = provisionHooks({
|
|
144
|
-
surface: claudeTarget.surface,
|
|
145
|
-
selection: projectConfig?.selection,
|
|
146
|
-
});
|
|
147
|
-
if (h.installed.length > 0 || h.prunedScripts.length > 0) {
|
|
148
|
-
console.error(`[noclaf-cli] auto-pull: ${h.installed.length} hooks, ` +
|
|
149
|
-
`${h.prunedScripts.length} removidos em ${h.settingsPath}.`);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
catch (err) {
|
|
154
|
-
console.error(`[noclaf-cli] auto-pull pulou: ${err.message}`);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
183
|
+
console.error(`[${brand.mcpBinName}] servidor iniciado (stdio)`);
|
|
184
|
+
await runAutoPull(projectConfig);
|
|
157
185
|
}
|
|
158
186
|
main().catch((err) => {
|
|
159
|
-
console.error(`[
|
|
187
|
+
console.error(`[${brand.mcpBinName}] erro fatal: ${err.message}`);
|
|
160
188
|
process.exit(1);
|
|
161
189
|
});
|
|
162
190
|
//# sourceMappingURL=mcp-server.js.map
|
package/dist/mcp-server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAsB,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAA6B,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,KAAK,EAAE,eAAe,EAAoB,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EACL,UAAU,EACV,wBAAwB,EACxB,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 ArgsSchema = z
|
|
6
7
|
.object({
|
|
7
8
|
task_id: z.string().uuid(),
|
|
@@ -14,7 +15,7 @@ const ArgsSchema = z
|
|
|
14
15
|
})
|
|
15
16
|
.strict();
|
|
16
17
|
export const definition = {
|
|
17
|
-
name:
|
|
18
|
+
name: `${brand.toolPrefix}comment_task`,
|
|
18
19
|
description: 'Adiciona um comentário em uma tarefa. O comentário fica visível pros humanos na UI ' +
|
|
19
20
|
'junto com os outros comentários da task.',
|
|
20
21
|
inputSchema: {
|
|
@@ -25,56 +26,55 @@ export const definition = {
|
|
|
25
26
|
project_id: {
|
|
26
27
|
type: 'string',
|
|
27
28
|
format: 'uuid',
|
|
28
|
-
description:
|
|
29
|
+
description: `Override do projeto. Se omitido, usa o projeto ativo (${brand.toolPrefix}set_project) ou o default.`,
|
|
29
30
|
},
|
|
30
31
|
},
|
|
31
32
|
required: ['task_id', 'content'],
|
|
32
33
|
additionalProperties: false,
|
|
33
34
|
},
|
|
34
35
|
};
|
|
36
|
+
/** Monta o registro de histórico do comentário, truncando o preview. Pura. */
|
|
37
|
+
export function buildCommentHistoryEntry(taskId, userId, content) {
|
|
38
|
+
return {
|
|
39
|
+
task_id: taskId,
|
|
40
|
+
user_id: userId,
|
|
41
|
+
action: 'commented',
|
|
42
|
+
field: null,
|
|
43
|
+
new_value: content.slice(0, 200),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/** Monta o payload de resposta do comment_task. Pura. */
|
|
47
|
+
export function buildCommentResult(comment) {
|
|
48
|
+
return { comment_id: comment.id, task_id: comment.task_id, created_at: comment.created_at };
|
|
49
|
+
}
|
|
50
|
+
async function ensureTaskInProject(supabase, taskId, projectId) {
|
|
51
|
+
const taskRes = await supabase.from('tasks').select('id').eq('id', taskId).eq('project_id', projectId).maybeSingle();
|
|
52
|
+
if (taskRes.error)
|
|
53
|
+
return errorResult(`Erro ao validar tarefa: ${taskRes.error.message}`);
|
|
54
|
+
if (!taskRes.data)
|
|
55
|
+
return errorResult('Tarefa não encontrada ou fora do projeto atual.');
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
35
58
|
export async function handler(args, ctx) {
|
|
36
59
|
const parsed = ArgsSchema.safeParse(args);
|
|
37
|
-
if (!parsed.success)
|
|
60
|
+
if (!parsed.success)
|
|
38
61
|
return errorResult(`Argumento inválido: ${parsed.error.message}`);
|
|
39
|
-
}
|
|
40
62
|
const { task_id, content } = parsed.data;
|
|
41
63
|
const cfg = resolveProjectConfig(ctx, parsed.data.project_id);
|
|
42
64
|
if (isErrorResult(cfg))
|
|
43
65
|
return cfg;
|
|
44
66
|
const { supabase } = ctx;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
.select('id')
|
|
49
|
-
.eq('id', task_id)
|
|
50
|
-
.eq('project_id', cfg.project_id)
|
|
51
|
-
.maybeSingle();
|
|
52
|
-
if (taskRes.error)
|
|
53
|
-
return errorResult(`Erro ao validar tarefa: ${taskRes.error.message}`);
|
|
54
|
-
if (!taskRes.data)
|
|
55
|
-
return errorResult('Tarefa não encontrada ou fora do projeto atual.');
|
|
67
|
+
const taskErr = await ensureTaskInProject(supabase, task_id, cfg.project_id);
|
|
68
|
+
if (taskErr)
|
|
69
|
+
return taskErr;
|
|
56
70
|
const insertRes = await supabase
|
|
57
71
|
.from('task_comments')
|
|
58
|
-
.insert({
|
|
59
|
-
task_id,
|
|
60
|
-
author_id: ctx.user.id,
|
|
61
|
-
content,
|
|
62
|
-
})
|
|
72
|
+
.insert({ task_id, author_id: ctx.user.id, content })
|
|
63
73
|
.select('id, task_id, created_at')
|
|
64
74
|
.single();
|
|
65
75
|
if (insertRes.error)
|
|
66
76
|
return errorResult(`Erro ao gravar comentário: ${insertRes.error.message}`);
|
|
67
|
-
await insertTaskHistory(supabase,
|
|
68
|
-
|
|
69
|
-
user_id: ctx.user.id,
|
|
70
|
-
action: 'commented',
|
|
71
|
-
field: null,
|
|
72
|
-
new_value: content.slice(0, 200),
|
|
73
|
-
});
|
|
74
|
-
return jsonResult({
|
|
75
|
-
comment_id: insertRes.data.id,
|
|
76
|
-
task_id: insertRes.data.task_id,
|
|
77
|
-
created_at: insertRes.data.created_at,
|
|
78
|
-
});
|
|
77
|
+
await insertTaskHistory(supabase, buildCommentHistoryEntry(task_id, ctx.user.id, content));
|
|
78
|
+
return jsonResult(buildCommentResult(insertRes.data));
|
|
79
79
|
}
|
|
80
80
|
//# sourceMappingURL=comment-task.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comment-task.js","sourceRoot":"","sources":["../../src/tools/comment-task.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"comment-task.js","sourceRoot":"","sources":["../../src/tools/comment-task.ts"],"names":[],"mappings":"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"}
|