@noclaf/cli 0.7.0 → 0.9.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.
- package/README.md +26 -84
- package/dist/app.js +13 -0
- package/dist/app.js.map +1 -0
- package/dist/brand.js +9 -49
- package/dist/brand.js.map +1 -1
- package/dist/cli.js +3 -37
- package/dist/cli.js.map +1 -1
- package/dist/mcp-server.js +3 -187
- package/dist/mcp-server.js.map +1 -1
- package/package.json +8 -17
- package/dist/adapters/supabase/allocation-gateway.js +0 -291
- package/dist/adapters/supabase/allocation-gateway.js.map +0 -1
- package/dist/adapters/supabase/analytics-gateway.js +0 -18
- package/dist/adapters/supabase/analytics-gateway.js.map +0 -1
- package/dist/adapters/supabase/calendar-gateway.js +0 -48
- package/dist/adapters/supabase/calendar-gateway.js.map +0 -1
- package/dist/adapters/supabase/calendar-write-gateway.js +0 -35
- package/dist/adapters/supabase/calendar-write-gateway.js.map +0 -1
- package/dist/adapters/supabase/client.js +0 -136
- package/dist/adapters/supabase/client.js.map +0 -1
- package/dist/adapters/supabase/context-gateway.js +0 -23
- package/dist/adapters/supabase/context-gateway.js.map +0 -1
- package/dist/adapters/supabase/gateway.js +0 -26
- package/dist/adapters/supabase/gateway.js.map +0 -1
- package/dist/adapters/supabase/release-gateway.js +0 -61
- package/dist/adapters/supabase/release-gateway.js.map +0 -1
- package/dist/adapters/supabase/sprint-gateway.js +0 -59
- package/dist/adapters/supabase/sprint-gateway.js.map +0 -1
- package/dist/adapters/supabase/task-gateway.js +0 -533
- package/dist/adapters/supabase/task-gateway.js.map +0 -1
- package/dist/auth.js +0 -141
- package/dist/auth.js.map +0 -1
- package/dist/cli/commands/auth.js +0 -127
- package/dist/cli/commands/auth.js.map +0 -1
- package/dist/cli/commands/clean.js +0 -120
- package/dist/cli/commands/clean.js.map +0 -1
- package/dist/cli/commands/completion.js +0 -114
- package/dist/cli/commands/completion.js.map +0 -1
- package/dist/cli/commands/exec.js +0 -69
- package/dist/cli/commands/exec.js.map +0 -1
- package/dist/cli/commands/init/analyze-step.js +0 -21
- package/dist/cli/commands/init/analyze-step.js.map +0 -1
- package/dist/cli/commands/init/apply-answers.js +0 -122
- package/dist/cli/commands/init/apply-answers.js.map +0 -1
- package/dist/cli/commands/init/apply-step.js +0 -165
- package/dist/cli/commands/init/apply-step.js.map +0 -1
- package/dist/cli/commands/init/auth-step.js +0 -48
- package/dist/cli/commands/init/auth-step.js.map +0 -1
- package/dist/cli/commands/init/boilerplate-step.js +0 -20
- package/dist/cli/commands/init/boilerplate-step.js.map +0 -1
- package/dist/cli/commands/init/clients-step.js +0 -78
- package/dist/cli/commands/init/clients-step.js.map +0 -1
- package/dist/cli/commands/init/context-step.js +0 -81
- package/dist/cli/commands/init/context-step.js.map +0 -1
- package/dist/cli/commands/init/describe-step.js +0 -68
- package/dist/cli/commands/init/describe-step.js.map +0 -1
- package/dist/cli/commands/init/index.js +0 -98
- package/dist/cli/commands/init/index.js.map +0 -1
- package/dist/cli/commands/init/mode.js +0 -18
- package/dist/cli/commands/init/mode.js.map +0 -1
- package/dist/cli/commands/init/progress.js +0 -60
- package/dist/cli/commands/init/progress.js.map +0 -1
- package/dist/cli/commands/init/project-step.js +0 -133
- package/dist/cli/commands/init/project-step.js.map +0 -1
- package/dist/cli/commands/init/provision-step.js +0 -103
- package/dist/cli/commands/init/provision-step.js.map +0 -1
- package/dist/cli/commands/map.js +0 -18
- package/dist/cli/commands/map.js.map +0 -1
- package/dist/cli/commands/plan.js +0 -45
- package/dist/cli/commands/plan.js.map +0 -1
- package/dist/cli/commands/skills.js +0 -23
- package/dist/cli/commands/skills.js.map +0 -1
- package/dist/cli/commands/sync.js +0 -319
- package/dist/cli/commands/sync.js.map +0 -1
- package/dist/cli/commands/validate-plan.js +0 -42
- package/dist/cli/commands/validate-plan.js.map +0 -1
- package/dist/cli/commands/wave.js +0 -57
- package/dist/cli/commands/wave.js.map +0 -1
- package/dist/cli/copy/auth.json +0 -6
- package/dist/cli/copy/flows.json +0 -6
- package/dist/cli/copy/init.json +0 -20
- package/dist/cli/copy/sync.json +0 -3
- package/dist/cli/copy.js +0 -23
- package/dist/cli/copy.js.map +0 -1
- package/dist/cli/flows/clients.js +0 -130
- package/dist/cli/flows/clients.js.map +0 -1
- package/dist/cli/flows/completion.js +0 -63
- package/dist/cli/flows/completion.js.map +0 -1
- package/dist/cli/flows/dependencies.js +0 -114
- package/dist/cli/flows/dependencies.js.map +0 -1
- package/dist/cli/flows/sections.js +0 -85
- package/dist/cli/flows/sections.js.map +0 -1
- package/dist/cli/flows/user-config.js +0 -37
- package/dist/cli/flows/user-config.js.map +0 -1
- package/dist/cli/ui/render.js +0 -239
- package/dist/cli/ui/render.js.map +0 -1
- package/dist/cli/ui/report.js +0 -130
- package/dist/cli/ui/report.js.map +0 -1
- package/dist/config.js +0 -289
- package/dist/config.js.map +0 -1
- package/dist/constants.js +0 -9
- package/dist/constants.js.map +0 -1
- package/dist/core/ports.js +0 -2
- package/dist/core/ports.js.map +0 -1
- package/dist/core/types.js +0 -5
- package/dist/core/types.js.map +0 -1
- package/dist/database.types.js +0 -11
- package/dist/database.types.js.map +0 -1
- package/dist/lib/active-project.js +0 -28
- package/dist/lib/active-project.js.map +0 -1
- package/dist/lib/autopull.js +0 -13
- package/dist/lib/autopull.js.map +0 -1
- package/dist/lib/boilerplate-scaffold.js +0 -65
- package/dist/lib/boilerplate-scaffold.js.map +0 -1
- package/dist/lib/boilerplates.js +0 -61
- package/dist/lib/boilerplates.js.map +0 -1
- package/dist/lib/calendar-logic.js +0 -59
- package/dist/lib/calendar-logic.js.map +0 -1
- package/dist/lib/calendar-write-logic.js +0 -6
- package/dist/lib/calendar-write-logic.js.map +0 -1
- package/dist/lib/client-configs.js +0 -191
- package/dist/lib/client-configs.js.map +0 -1
- package/dist/lib/client-install.js +0 -40
- package/dist/lib/client-install.js.map +0 -1
- package/dist/lib/colors.js +0 -92
- package/dist/lib/colors.js.map +0 -1
- package/dist/lib/cowork-extension.js +0 -143
- package/dist/lib/cowork-extension.js.map +0 -1
- package/dist/lib/dates.js +0 -21
- package/dist/lib/dates.js.map +0 -1
- package/dist/lib/dependencies.js +0 -145
- package/dist/lib/dependencies.js.map +0 -1
- package/dist/lib/dependency-install.js +0 -163
- package/dist/lib/dependency-install.js.map +0 -1
- package/dist/lib/duration.js +0 -5
- package/dist/lib/duration.js.map +0 -1
- package/dist/lib/exec-delegate.js +0 -218
- package/dist/lib/exec-delegate.js.map +0 -1
- package/dist/lib/exec-engines.js +0 -90
- package/dist/lib/exec-engines.js.map +0 -1
- package/dist/lib/exec-events.js +0 -87
- package/dist/lib/exec-events.js.map +0 -1
- package/dist/lib/exec-translators.js +0 -198
- package/dist/lib/exec-translators.js.map +0 -1
- package/dist/lib/file-merge.js +0 -33
- package/dist/lib/file-merge.js.map +0 -1
- package/dist/lib/git-exposure.js +0 -35
- package/dist/lib/git-exposure.js.map +0 -1
- package/dist/lib/harness.js +0 -127
- package/dist/lib/harness.js.map +0 -1
- package/dist/lib/hooks.js +0 -216
- package/dist/lib/hooks.js.map +0 -1
- package/dist/lib/patterns.js +0 -25
- package/dist/lib/patterns.js.map +0 -1
- package/dist/lib/pg-error.js +0 -53
- package/dist/lib/pg-error.js.map +0 -1
- package/dist/lib/plan-delegate.js +0 -117
- package/dist/lib/plan-delegate.js.map +0 -1
- package/dist/lib/project-context.js +0 -151
- package/dist/lib/project-context.js.map +0 -1
- package/dist/lib/prompts.js +0 -69
- package/dist/lib/prompts.js.map +0 -1
- package/dist/lib/provision-apply.js +0 -220
- package/dist/lib/provision-apply.js.map +0 -1
- package/dist/lib/provision-collect.js +0 -47
- package/dist/lib/provision-collect.js.map +0 -1
- package/dist/lib/provision.js +0 -45
- package/dist/lib/provision.js.map +0 -1
- package/dist/lib/release-logic.js +0 -10
- package/dist/lib/release-logic.js.map +0 -1
- package/dist/lib/repo-map.js +0 -176
- package/dist/lib/repo-map.js.map +0 -1
- package/dist/lib/require-config.js +0 -32
- package/dist/lib/require-config.js.map +0 -1
- package/dist/lib/rules.js +0 -146
- package/dist/lib/rules.js.map +0 -1
- package/dist/lib/sections.js +0 -89
- package/dist/lib/sections.js.map +0 -1
- package/dist/lib/skill-agent.js +0 -44
- package/dist/lib/skill-agent.js.map +0 -1
- package/dist/lib/skill-serve.js +0 -128
- package/dist/lib/skill-serve.js.map +0 -1
- package/dist/lib/skills-cache.js +0 -99
- package/dist/lib/skills-cache.js.map +0 -1
- package/dist/lib/skills.js +0 -237
- package/dist/lib/skills.js.map +0 -1
- package/dist/lib/sprint-deadline.js +0 -28
- package/dist/lib/sprint-deadline.js.map +0 -1
- package/dist/lib/sprint-logic.js +0 -31
- package/dist/lib/sprint-logic.js.map +0 -1
- package/dist/lib/targets.js +0 -150
- package/dist/lib/targets.js.map +0 -1
- package/dist/lib/task-history.js +0 -15
- package/dist/lib/task-history.js.map +0 -1
- package/dist/lib/telemetry.js +0 -51
- package/dist/lib/telemetry.js.map +0 -1
- package/dist/lib/tool-result.js +0 -15
- package/dist/lib/tool-result.js.map +0 -1
- package/dist/lib/validate-plan-delegate.js +0 -106
- package/dist/lib/validate-plan-delegate.js.map +0 -1
- package/dist/lib/version-check.js +0 -89
- package/dist/lib/version-check.js.map +0 -1
- package/dist/lib/wave-scheduler.js +0 -95
- package/dist/lib/wave-scheduler.js.map +0 -1
- package/dist/session-factory.js +0 -19
- package/dist/session-factory.js.map +0 -1
- package/dist/spinner.js +0 -12
- package/dist/spinner.js.map +0 -1
- package/dist/tools/activate-sprint.js +0 -44
- package/dist/tools/activate-sprint.js.map +0 -1
- package/dist/tools/add-checklist.js +0 -63
- package/dist/tools/add-checklist.js.map +0 -1
- package/dist/tools/add-holiday.js +0 -41
- package/dist/tools/add-holiday.js.map +0 -1
- package/dist/tools/add-home-office.js +0 -31
- package/dist/tools/add-home-office.js.map +0 -1
- package/dist/tools/add-vacation.js +0 -39
- package/dist/tools/add-vacation.js.map +0 -1
- package/dist/tools/attach-pr.js +0 -97
- package/dist/tools/attach-pr.js.map +0 -1
- package/dist/tools/comment-task.js +0 -72
- package/dist/tools/comment-task.js.map +0 -1
- package/dist/tools/create-release.js +0 -46
- package/dist/tools/create-release.js.map +0 -1
- package/dist/tools/create-sprint.js +0 -66
- package/dist/tools/create-sprint.js.map +0 -1
- package/dist/tools/create-task.js +0 -174
- package/dist/tools/create-task.js.map +0 -1
- package/dist/tools/delegate-exec.js +0 -63
- package/dist/tools/delegate-exec.js.map +0 -1
- package/dist/tools/end-allocation.js +0 -38
- package/dist/tools/end-allocation.js.map +0 -1
- package/dist/tools/end-sprint.js +0 -37
- package/dist/tools/end-sprint.js.map +0 -1
- package/dist/tools/end-task-allocation.js +0 -60
- package/dist/tools/end-task-allocation.js.map +0 -1
- package/dist/tools/exec-status.js +0 -45
- package/dist/tools/exec-status.js.map +0 -1
- package/dist/tools/finalize-release.js +0 -45
- package/dist/tools/finalize-release.js.map +0 -1
- package/dist/tools/get-active-allocation.js +0 -69
- package/dist/tools/get-active-allocation.js.map +0 -1
- package/dist/tools/get-calendar.js +0 -40
- package/dist/tools/get-calendar.js.map +0 -1
- package/dist/tools/get-context.js +0 -48
- package/dist/tools/get-context.js.map +0 -1
- package/dist/tools/get-sprint.js +0 -38
- package/dist/tools/get-sprint.js.map +0 -1
- package/dist/tools/get-task.js +0 -146
- package/dist/tools/get-task.js.map +0 -1
- package/dist/tools/index.js +0 -84
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/list-my-allocations.js +0 -71
- package/dist/tools/list-my-allocations.js.map +0 -1
- package/dist/tools/list-projects.js +0 -38
- package/dist/tools/list-projects.js.map +0 -1
- package/dist/tools/list-releases.js +0 -32
- package/dist/tools/list-releases.js.map +0 -1
- package/dist/tools/list-sprints.js +0 -30
- package/dist/tools/list-sprints.js.map +0 -1
- package/dist/tools/list-tasks.js +0 -95
- package/dist/tools/list-tasks.js.map +0 -1
- package/dist/tools/move-task.js +0 -82
- package/dist/tools/move-task.js.map +0 -1
- package/dist/tools/plan.js +0 -56
- package/dist/tools/plan.js.map +0 -1
- package/dist/tools/record-delivery.js +0 -100
- package/dist/tools/record-delivery.js.map +0 -1
- package/dist/tools/remove-holiday.js +0 -31
- package/dist/tools/remove-holiday.js.map +0 -1
- package/dist/tools/remove-home-office.js +0 -32
- package/dist/tools/remove-home-office.js.map +0 -1
- package/dist/tools/remove-vacation.js +0 -31
- package/dist/tools/remove-vacation.js.map +0 -1
- package/dist/tools/set-project.js +0 -52
- package/dist/tools/set-project.js.map +0 -1
- package/dist/tools/set-review.js +0 -132
- package/dist/tools/set-review.js.map +0 -1
- package/dist/tools/sprint-common.js +0 -13
- package/dist/tools/sprint-common.js.map +0 -1
- package/dist/tools/start-allocation.js +0 -32
- package/dist/tools/start-allocation.js.map +0 -1
- package/dist/tools/start-task-allocation.js +0 -83
- package/dist/tools/start-task-allocation.js.map +0 -1
- package/dist/tools/update-release.js +0 -58
- package/dist/tools/update-release.js.map +0 -1
- package/dist/tools/update-sprint.js +0 -56
- package/dist/tools/update-sprint.js.map +0 -1
- package/dist/tools/update-task.js +0 -183
- package/dist/tools/update-task.js.map +0 -1
- package/dist/tools/validate-plan.js +0 -58
- package/dist/tools/validate-plan.js.map +0 -1
- package/dist/version.js +0 -16
- package/dist/version.js.map +0 -1
package/dist/tools/attach-pr.js
DELETED
|
@@ -1,97 +0,0 @@
|
|
|
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
|
-
/** Estado do task ao mover pra review quando um PR é anexado. */
|
|
6
|
-
const REVIEW_STATUS = 'code_review';
|
|
7
|
-
const REVIEW_STATE_ON_ATTACH = 'pending';
|
|
8
|
-
const ArgsSchema = z
|
|
9
|
-
.object({
|
|
10
|
-
task_id: z.uuid(),
|
|
11
|
-
pr_url: z.url(),
|
|
12
|
-
project_id: z.uuid().optional(),
|
|
13
|
-
})
|
|
14
|
-
.strict();
|
|
15
|
-
export const definition = {
|
|
16
|
-
name: `${brand.toolPrefix}attach_pr`,
|
|
17
|
-
description: 'Anexa a URL de um pull request a uma tarefa e a coloca em review: grava `pr_url`, ' +
|
|
18
|
-
`seta \`review_state=pending\` e move o status pra \`${REVIEW_STATUS}\`. ` +
|
|
19
|
-
'Idempotente — chamar de novo com o mesmo PR não duplica histórico. ' +
|
|
20
|
-
'Use logo após abrir o PR de um ticket (é o passo que liga o ticket ao review externo).',
|
|
21
|
-
inputSchema: {
|
|
22
|
-
type: 'object',
|
|
23
|
-
properties: {
|
|
24
|
-
task_id: { type: 'string', format: 'uuid' },
|
|
25
|
-
pr_url: { type: 'string', format: 'uri', description: 'URL do pull request.' },
|
|
26
|
-
project_id: {
|
|
27
|
-
type: 'string',
|
|
28
|
-
format: 'uuid',
|
|
29
|
-
description: `Override do projeto. Se omitido, usa o projeto ativo (${brand.toolPrefix}set_project) ou o default.`,
|
|
30
|
-
},
|
|
31
|
-
},
|
|
32
|
-
required: ['task_id', 'pr_url'],
|
|
33
|
-
additionalProperties: false,
|
|
34
|
-
},
|
|
35
|
-
};
|
|
36
|
-
/**
|
|
37
|
-
* Diff entre o estado atual e o alvo de "anexar PR": patch de colunas (`pr_url`/`review_state`)
|
|
38
|
-
* + changes pro histórico + se o status precisa mover. Só inclui o que mudou → idempotente. Pura.
|
|
39
|
-
*/
|
|
40
|
-
export function buildAttachPrPatch(current, prUrl) {
|
|
41
|
-
const patch = {};
|
|
42
|
-
const changes = [];
|
|
43
|
-
if (current.pr_url !== prUrl) {
|
|
44
|
-
patch.pr_url = prUrl;
|
|
45
|
-
changes.push({ field: 'pr_url', old_value: current.pr_url, new_value: prUrl });
|
|
46
|
-
}
|
|
47
|
-
if (current.review_state !== REVIEW_STATE_ON_ATTACH) {
|
|
48
|
-
patch.review_state = REVIEW_STATE_ON_ATTACH;
|
|
49
|
-
changes.push({
|
|
50
|
-
field: 'review_state',
|
|
51
|
-
old_value: current.review_state,
|
|
52
|
-
new_value: REVIEW_STATE_ON_ATTACH,
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
return { patch: patch, changes, moveStatus: current.status !== REVIEW_STATUS };
|
|
56
|
-
}
|
|
57
|
-
/** Monta o payload de resposta do attach_pr a partir do estado atual + o que foi aplicado. Pura. */
|
|
58
|
-
export function buildAttachPrResult(current, taskId, prUrl, changes, movedStatus) {
|
|
59
|
-
return {
|
|
60
|
-
task_id: taskId,
|
|
61
|
-
key: current.key,
|
|
62
|
-
title: current.title,
|
|
63
|
-
pr_url: prUrl,
|
|
64
|
-
review_state: REVIEW_STATE_ON_ATTACH,
|
|
65
|
-
status: REVIEW_STATUS,
|
|
66
|
-
previous_status: movedStatus ? current.status : REVIEW_STATUS,
|
|
67
|
-
moved_status: movedStatus,
|
|
68
|
-
changed_fields: changes.map((c) => c.field),
|
|
69
|
-
already_attached: changes.length === 0 && !movedStatus,
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
export async function handler(args, ctx) {
|
|
73
|
-
const parsed = ArgsSchema.safeParse(args);
|
|
74
|
-
if (!parsed.success)
|
|
75
|
-
return errorResult(`Argumento inválido: ${parsed.error.message}`);
|
|
76
|
-
const { task_id, pr_url } = parsed.data;
|
|
77
|
-
const cfg = resolveProjectConfig(ctx, parsed.data.project_id);
|
|
78
|
-
if (isErrorResult(cfg))
|
|
79
|
-
return cfg;
|
|
80
|
-
try {
|
|
81
|
-
const current = await ctx.gateway.getTaskForAttachPr(task_id, cfg.project_id);
|
|
82
|
-
if (!current)
|
|
83
|
-
return errorResult('Tarefa não encontrada ou fora do projeto atual.');
|
|
84
|
-
const { patch, changes, moveStatus } = buildAttachPrPatch(current, pr_url);
|
|
85
|
-
if (Object.keys(patch).length > 0) {
|
|
86
|
-
await ctx.gateway.applyTaskPatch(task_id, cfg.project_id, ctx.user.id, patch, changes);
|
|
87
|
-
}
|
|
88
|
-
if (moveStatus) {
|
|
89
|
-
await ctx.gateway.moveTaskStatus(task_id, cfg.project_id, REVIEW_STATUS, ctx.user.id, current.status);
|
|
90
|
-
}
|
|
91
|
-
return jsonResult(buildAttachPrResult(current, task_id, pr_url, changes, moveStatus));
|
|
92
|
-
}
|
|
93
|
-
catch (err) {
|
|
94
|
-
return errorResult(err.message);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
//# sourceMappingURL=attach-pr.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"attach-pr.js","sourceRoot":"","sources":["../../src/tools/attach-pr.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,72 +0,0 @@
|
|
|
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 ArgsSchema = z
|
|
6
|
-
.object({
|
|
7
|
-
task_id: z.uuid(),
|
|
8
|
-
content: z
|
|
9
|
-
.string()
|
|
10
|
-
.trim()
|
|
11
|
-
.min(1, "Comentário não pode estar vazio.")
|
|
12
|
-
.max(5000, "Comentário não pode passar de 5000 caracteres."),
|
|
13
|
-
project_id: z.uuid().optional(),
|
|
14
|
-
})
|
|
15
|
-
.strict();
|
|
16
|
-
export const definition = {
|
|
17
|
-
name: `${brand.toolPrefix}comment_task`,
|
|
18
|
-
description: "Adiciona um comentário em uma tarefa. O comentário fica visível pros humanos na UI " +
|
|
19
|
-
"junto com os outros comentários da task.",
|
|
20
|
-
inputSchema: {
|
|
21
|
-
type: "object",
|
|
22
|
-
properties: {
|
|
23
|
-
task_id: { type: "string", format: "uuid" },
|
|
24
|
-
content: { type: "string", minLength: 1, maxLength: 5000 },
|
|
25
|
-
project_id: {
|
|
26
|
-
type: "string",
|
|
27
|
-
format: "uuid",
|
|
28
|
-
description: `Override do projeto. Se omitido, usa o projeto ativo (${brand.toolPrefix}set_project) ou o default.`,
|
|
29
|
-
},
|
|
30
|
-
},
|
|
31
|
-
required: ["task_id", "content"],
|
|
32
|
-
additionalProperties: false,
|
|
33
|
-
},
|
|
34
|
-
};
|
|
35
|
-
/** Monta o registro de histórico do comentário, truncando o preview. Pura. */
|
|
36
|
-
export function buildCommentHistoryEntry(taskId, userId, content) {
|
|
37
|
-
return {
|
|
38
|
-
task_id: taskId,
|
|
39
|
-
user_id: userId,
|
|
40
|
-
action: "commented",
|
|
41
|
-
field: null,
|
|
42
|
-
new_value: content.slice(0, 200),
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
/** Monta o payload de resposta do comment_task. Pura. */
|
|
46
|
-
export function buildCommentResult(comment) {
|
|
47
|
-
return {
|
|
48
|
-
comment_id: comment.id,
|
|
49
|
-
task_id: comment.task_id,
|
|
50
|
-
created_at: comment.created_at,
|
|
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, content } = parsed.data;
|
|
58
|
-
const cfg = resolveProjectConfig(ctx, parsed.data.project_id);
|
|
59
|
-
if (isErrorResult(cfg))
|
|
60
|
-
return cfg;
|
|
61
|
-
let comment;
|
|
62
|
-
try {
|
|
63
|
-
comment = await ctx.gateway.commentTask(task_id, cfg.project_id, ctx.user.id, content, buildCommentHistoryEntry(task_id, ctx.user.id, content));
|
|
64
|
-
}
|
|
65
|
-
catch (err) {
|
|
66
|
-
return errorResult(err.message);
|
|
67
|
-
}
|
|
68
|
-
if (!comment)
|
|
69
|
-
return errorResult("Tarefa não encontrada ou fora do projeto atual.");
|
|
70
|
-
return jsonResult(buildCommentResult(comment));
|
|
71
|
-
}
|
|
72
|
-
//# sourceMappingURL=comment-task.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"comment-task.js","sourceRoot":"","sources":["../../src/tools/comment-task.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,46 +0,0 @@
|
|
|
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 { isoDate } from '../lib/dates.js';
|
|
5
|
-
import { brand } from '../brand.js';
|
|
6
|
-
import { projectIdProp } from './sprint-common.js';
|
|
7
|
-
const ArgsSchema = z
|
|
8
|
-
.object({
|
|
9
|
-
name: z.string().trim().min(1).max(100),
|
|
10
|
-
target_date: isoDate,
|
|
11
|
-
description: z.string().optional(),
|
|
12
|
-
project_id: z.uuid().optional(),
|
|
13
|
-
})
|
|
14
|
-
.strict();
|
|
15
|
-
export const definition = {
|
|
16
|
-
name: `${brand.toolPrefix}create_release`,
|
|
17
|
-
description: 'Cria uma release (status planning) no projeto. target_date é obrigatória (YYYY-MM-DD).',
|
|
18
|
-
inputSchema: {
|
|
19
|
-
type: 'object',
|
|
20
|
-
properties: {
|
|
21
|
-
name: { type: 'string' },
|
|
22
|
-
target_date: { type: 'string', description: 'YYYY-MM-DD.' },
|
|
23
|
-
description: { type: 'string' },
|
|
24
|
-
project_id: projectIdProp,
|
|
25
|
-
},
|
|
26
|
-
required: ['name', 'target_date'],
|
|
27
|
-
additionalProperties: false,
|
|
28
|
-
},
|
|
29
|
-
};
|
|
30
|
-
export async function handler(args, ctx) {
|
|
31
|
-
const parsed = ArgsSchema.safeParse(args);
|
|
32
|
-
if (!parsed.success)
|
|
33
|
-
return errorResult(`Argumento inválido: ${parsed.error.message}`);
|
|
34
|
-
const cfg = resolveProjectConfig(ctx, parsed.data.project_id);
|
|
35
|
-
if (isErrorResult(cfg))
|
|
36
|
-
return cfg;
|
|
37
|
-
const { project_id: _p, ...rest } = parsed.data;
|
|
38
|
-
try {
|
|
39
|
-
const release = await ctx.gateway.createRelease({ ...rest, project_id: cfg.project_id, created_by: ctx.user.id });
|
|
40
|
-
return jsonResult({ ok: true, release });
|
|
41
|
-
}
|
|
42
|
-
catch (err) {
|
|
43
|
-
return errorResult(err.message);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
//# sourceMappingURL=create-release.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-release.js","sourceRoot":"","sources":["../../src/tools/create-release.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,UAAU,GAAG,CAAC;KACjB,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACvC,WAAW,EAAE,OAAO;IACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,IAAI,EAAE,GAAG,KAAK,CAAC,UAAU,gBAAgB;IACzC,WAAW,EAAE,wFAAwF;IACrG,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACxB,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE;YAC3D,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC/B,UAAU,EAAE,aAAa;SAC1B;QACD,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC;QACjC,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;QAAE,OAAO,WAAW,CAAC,uBAAuB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACvF,MAAM,GAAG,GAAG,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9D,IAAI,aAAa,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IACnC,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAClH,OAAO,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC"}
|
|
@@ -1,66 +0,0 @@
|
|
|
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 { closeSprint } from '../lib/sprint-logic.js';
|
|
5
|
-
import { todayStr, isoDate, dateRangeError } from '../lib/dates.js';
|
|
6
|
-
import { brand } from '../brand.js';
|
|
7
|
-
import { projectIdProp } from './sprint-common.js';
|
|
8
|
-
const ArgsSchema = z
|
|
9
|
-
.object({
|
|
10
|
-
name: z.string().trim().min(1).max(100),
|
|
11
|
-
start_date: isoDate.optional(),
|
|
12
|
-
end_date: isoDate.optional(),
|
|
13
|
-
replace_active: z.boolean().optional(),
|
|
14
|
-
project_id: z.uuid().optional(),
|
|
15
|
-
})
|
|
16
|
-
.strict();
|
|
17
|
-
export const definition = {
|
|
18
|
-
name: `${brand.toolPrefix}create_sprint`,
|
|
19
|
-
description: 'Cria uma sprint já ATIVA. Se o projeto já tem sprint ativa, falha dizendo qual — ' +
|
|
20
|
-
'passe replace_active=true pra encerrá-la (tasks não concluídas voltam pro backlog) e criar a nova.',
|
|
21
|
-
inputSchema: {
|
|
22
|
-
type: 'object',
|
|
23
|
-
properties: {
|
|
24
|
-
name: { type: 'string' },
|
|
25
|
-
start_date: { type: 'string', description: 'YYYY-MM-DD. Default: hoje.' },
|
|
26
|
-
end_date: { type: 'string', description: 'YYYY-MM-DD.' },
|
|
27
|
-
replace_active: { type: 'boolean', description: 'Encerra a sprint ativa atual antes de criar. Default false.' },
|
|
28
|
-
project_id: projectIdProp,
|
|
29
|
-
},
|
|
30
|
-
required: ['name'],
|
|
31
|
-
additionalProperties: false,
|
|
32
|
-
},
|
|
33
|
-
};
|
|
34
|
-
export async function handler(args, ctx) {
|
|
35
|
-
const parsed = ArgsSchema.safeParse(args);
|
|
36
|
-
if (!parsed.success)
|
|
37
|
-
return errorResult(`Argumento inválido: ${parsed.error.message}`);
|
|
38
|
-
const { name, replace_active } = parsed.data;
|
|
39
|
-
const today = todayStr();
|
|
40
|
-
const start = parsed.data.start_date ?? today;
|
|
41
|
-
const end = parsed.data.end_date ?? null;
|
|
42
|
-
const bad = dateRangeError(start, end);
|
|
43
|
-
if (bad)
|
|
44
|
-
return errorResult(bad);
|
|
45
|
-
const cfg = resolveProjectConfig(ctx, parsed.data.project_id);
|
|
46
|
-
if (isErrorResult(cfg))
|
|
47
|
-
return cfg;
|
|
48
|
-
try {
|
|
49
|
-
const gw = ctx.gateway;
|
|
50
|
-
const active = await gw.findSprint(cfg.project_id, 'active');
|
|
51
|
-
let closed;
|
|
52
|
-
if (active) {
|
|
53
|
-
if (!replace_active) {
|
|
54
|
-
return errorResult(`Já existe sprint ativa: "${active.name}" (${active.id}). Use replace_active=true pra encerrá-la ` +
|
|
55
|
-
`e criar a nova, ou ${brand.toolPrefix}end_sprint antes.`);
|
|
56
|
-
}
|
|
57
|
-
closed = await closeSprint(gw, active, today);
|
|
58
|
-
}
|
|
59
|
-
const sprint = await gw.createSprint(cfg.project_id, name, start, end);
|
|
60
|
-
return jsonResult({ ok: true, sprint, ...(closed && { closed_previous: closed }) });
|
|
61
|
-
}
|
|
62
|
-
catch (err) {
|
|
63
|
-
return errorResult(err.message);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
//# sourceMappingURL=create-sprint.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-sprint.js","sourceRoot":"","sources":["../../src/tools/create-sprint.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { isoDate, dateRangeError } from '../lib/dates.js';
|
|
3
|
-
import { jsonResult, errorResult } from '../lib/tool-result.js';
|
|
4
|
-
import { resolveProjectConfig, isErrorResult } from '../lib/require-config.js';
|
|
5
|
-
import { resolveTaskDeadline, SPRINT_DEADLINE_FALLBACK_DAYS } from '../lib/sprint-deadline.js';
|
|
6
|
-
import { assertReleaseInProject } from '../lib/release-logic.js';
|
|
7
|
-
import { brand } from '../brand.js';
|
|
8
|
-
const TASK_STATUS = [
|
|
9
|
-
'backlog',
|
|
10
|
-
'todo',
|
|
11
|
-
'doing',
|
|
12
|
-
'code_review',
|
|
13
|
-
'rejected',
|
|
14
|
-
'qa',
|
|
15
|
-
'done',
|
|
16
|
-
'production',
|
|
17
|
-
];
|
|
18
|
-
const TASK_PRIORITY = ['none', 'lowest', 'low', 'medium', 'high', 'urgent'];
|
|
19
|
-
const TASK_TYPE = ['story', 'bug', 'task', 'epic', 'subtask', 'meeting'];
|
|
20
|
-
const ArgsSchema = z
|
|
21
|
-
.object({
|
|
22
|
-
title: z.string().min(1).max(200),
|
|
23
|
-
description: z.string().default(''),
|
|
24
|
-
priority: z.enum(TASK_PRIORITY).default('none'),
|
|
25
|
-
type: z.enum(TASK_TYPE).default('task'),
|
|
26
|
-
status: z.enum(TASK_STATUS).default('todo'),
|
|
27
|
-
start_date: isoDate.optional(),
|
|
28
|
-
end_date: isoDate.optional(),
|
|
29
|
-
sprint: z.string().default('active'),
|
|
30
|
-
release: z.uuid().optional(),
|
|
31
|
-
assignee_user_ids: z.array(z.uuid()).optional(),
|
|
32
|
-
label_ids: z.array(z.uuid()).optional(),
|
|
33
|
-
link_to_current_repository: z.boolean().default(true),
|
|
34
|
-
additional_repository_ids: z.array(z.uuid()).optional(),
|
|
35
|
-
project_id: z.uuid().optional(),
|
|
36
|
-
})
|
|
37
|
-
.strict();
|
|
38
|
-
export const definition = {
|
|
39
|
-
name: `${brand.toolPrefix}create_task`,
|
|
40
|
-
description: 'Cria uma nova tarefa no projeto atual. Por padrão: status=todo, sprint=active, ' +
|
|
41
|
-
'type=task, assignee=você. Pra colocar no backlog fora de sprint, passe ' +
|
|
42
|
-
'status="backlog" e sprint="none". O reporter é sempre o usuário autenticado. ' +
|
|
43
|
-
'Tarefa em sprint SEMPRE tem prazo: ESTIME o "end_date" pelo tamanho do trabalho ' +
|
|
44
|
-
`(hoje + ${SPRINT_DEADLINE_FALLBACK_DAYS} dias só é aplicado como fallback se você não informar, e vem em "warnings"). ` +
|
|
45
|
-
'"start_date" (opcional) marca o início no cronograma e deve ser <= end_date. ' +
|
|
46
|
-
'Deixe FORA da sprint (sprint="none" + status="backlog") só quando for ideia, "um dia"/algum dia, ' +
|
|
47
|
-
'algo sem dono, ou o usuário pedir explicitamente; fora isso, fica na sprint ativa. ' +
|
|
48
|
-
'Backlog (sprint="none") segue livre de prazo. Se o projeto não tiver sprint ativa, ' +
|
|
49
|
-
'a tarefa nasce no backlog e avisa em "warnings" — criar nunca falha por falta de sprint.',
|
|
50
|
-
inputSchema: {
|
|
51
|
-
type: 'object',
|
|
52
|
-
properties: {
|
|
53
|
-
title: { type: 'string', minLength: 1, maxLength: 200 },
|
|
54
|
-
description: { type: 'string' },
|
|
55
|
-
priority: { type: 'string', enum: [...TASK_PRIORITY] },
|
|
56
|
-
type: { type: 'string', enum: [...TASK_TYPE] },
|
|
57
|
-
status: { type: 'string', enum: [...TASK_STATUS] },
|
|
58
|
-
start_date: { type: 'string', description: 'Data ISO (YYYY-MM-DD), opcional. Deve ser <= end_date.' },
|
|
59
|
-
end_date: {
|
|
60
|
-
type: 'string',
|
|
61
|
-
description: 'Data ISO (YYYY-MM-DD). ESTIME pelo tamanho do trabalho quando a tarefa entra em sprint; ' +
|
|
62
|
-
`só se omitido vira o fallback hoje + ${SPRINT_DEADLINE_FALLBACK_DAYS} dias.`,
|
|
63
|
-
},
|
|
64
|
-
sprint: {
|
|
65
|
-
type: 'string',
|
|
66
|
-
description: '"active", "none" ou UUID. Default "active" — a tarefa entra na sprint corrente; sem sprint ativa, cai no backlog. ' +
|
|
67
|
-
'Use "none" (com status="backlog") só pra ideia, "um dia"/algum dia, algo sem dono ou pedido explícito. ' +
|
|
68
|
-
'Qualquer valor != "none" puxa "end_date" junto (default de prazo se você não informar).',
|
|
69
|
-
},
|
|
70
|
-
release: { type: 'string', format: 'uuid', description: 'UUID de uma release do mesmo projeto (list_releases).' },
|
|
71
|
-
assignee_user_ids: { type: 'array', items: { type: 'string', format: 'uuid' } },
|
|
72
|
-
label_ids: { type: 'array', items: { type: 'string', format: 'uuid' } },
|
|
73
|
-
link_to_current_repository: {
|
|
74
|
-
type: 'boolean',
|
|
75
|
-
description: `Vincula automaticamente ao repositório do ${brand.projectConfigFile}. Default true.`,
|
|
76
|
-
},
|
|
77
|
-
additional_repository_ids: { type: 'array', items: { type: 'string', format: 'uuid' } },
|
|
78
|
-
project_id: {
|
|
79
|
-
type: 'string',
|
|
80
|
-
format: 'uuid',
|
|
81
|
-
description: `Override do projeto. Se omitido, usa o projeto ativo (${brand.toolPrefix}set_project) ou o default.`,
|
|
82
|
-
},
|
|
83
|
-
},
|
|
84
|
-
required: ['title'],
|
|
85
|
-
additionalProperties: false,
|
|
86
|
-
},
|
|
87
|
-
};
|
|
88
|
-
/** Resolve assignees (default: o próprio usuário) e a lista deduplicada de repositórios a vincular. Pura. */
|
|
89
|
-
export function resolveTaskLinks(input, repositoryId, userId) {
|
|
90
|
-
const assigneeIds = input.assignee_user_ids ?? [userId];
|
|
91
|
-
const repoIds = [];
|
|
92
|
-
if (input.link_to_current_repository && repositoryId)
|
|
93
|
-
repoIds.push(repositoryId);
|
|
94
|
-
for (const r of input.additional_repository_ids ?? []) {
|
|
95
|
-
if (!repoIds.includes(r))
|
|
96
|
-
repoIds.push(r);
|
|
97
|
-
}
|
|
98
|
-
return { assigneeIds, repoIds };
|
|
99
|
-
}
|
|
100
|
-
/** Monta o payload de insert da task a partir do input + sprint já resolvida. Pura. */
|
|
101
|
-
export function buildTaskInsertPayload(input, projectId, reporterId, sprintId, today) {
|
|
102
|
-
const endDate = resolveTaskDeadline(sprintId, input.end_date, today);
|
|
103
|
-
const rangeErr = dateRangeError(input.start_date, endDate);
|
|
104
|
-
if (rangeErr)
|
|
105
|
-
throw new Error(rangeErr);
|
|
106
|
-
return {
|
|
107
|
-
title: input.title,
|
|
108
|
-
description: input.description,
|
|
109
|
-
status: input.status,
|
|
110
|
-
priority: input.priority,
|
|
111
|
-
type: input.type,
|
|
112
|
-
project_id: projectId,
|
|
113
|
-
reporter_id: reporterId,
|
|
114
|
-
sprint_id: sprintId,
|
|
115
|
-
...(input.release && { release_id: input.release }),
|
|
116
|
-
start_date: input.start_date,
|
|
117
|
-
end_date: endDate,
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Avisos do que a tool decidiu sozinha: sprint pedida mas inexistente (nasceu no
|
|
122
|
-
* backlog) e prazo derivado do default. Pura.
|
|
123
|
-
*/
|
|
124
|
-
export function buildAutoDecisionWarnings(sprintInput, sprintId, endDateInput, endDate) {
|
|
125
|
-
const warnings = [];
|
|
126
|
-
if (sprintId === null && sprintInput !== 'none') {
|
|
127
|
-
warnings.push('Projeto sem sprint ativa: a tarefa foi criada no backlog (sem sprint e sem prazo). ' +
|
|
128
|
-
'Pra colocar numa sprint depois, use update_task com "sprint" e "end_date".');
|
|
129
|
-
}
|
|
130
|
-
if (endDate && !endDateInput) {
|
|
131
|
-
warnings.push(`Tarefa entrou em sprint sem "end_date": aplicado o prazo default de ${SPRINT_DEADLINE_FALLBACK_DAYS} dias (${endDate}).`);
|
|
132
|
-
}
|
|
133
|
-
return warnings;
|
|
134
|
-
}
|
|
135
|
-
/** Monta o payload de resposta a partir da task criada + vínculos + warnings. Pura. */
|
|
136
|
-
export function buildCreateTaskResult(task, assigneeIds, labelIds, repoIds, warnings) {
|
|
137
|
-
return {
|
|
138
|
-
id: task.id,
|
|
139
|
-
key: task.key,
|
|
140
|
-
title: task.title,
|
|
141
|
-
status: task.status,
|
|
142
|
-
priority: task.priority,
|
|
143
|
-
type: task.type,
|
|
144
|
-
sprint_id: task.sprint_id,
|
|
145
|
-
start_date: task.start_date,
|
|
146
|
-
end_date: task.end_date,
|
|
147
|
-
created_at: task.created_at,
|
|
148
|
-
linked: { assignee_user_ids: assigneeIds, label_ids: labelIds, repository_ids: repoIds },
|
|
149
|
-
warnings: warnings.length > 0 ? warnings : undefined,
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
export async function handler(args, ctx) {
|
|
153
|
-
const parsed = ArgsSchema.safeParse(args);
|
|
154
|
-
if (!parsed.success)
|
|
155
|
-
return errorResult(`Argumento inválido: ${parsed.error.message}`);
|
|
156
|
-
const input = parsed.data;
|
|
157
|
-
const cfg = resolveProjectConfig(ctx, input.project_id);
|
|
158
|
-
if (isErrorResult(cfg))
|
|
159
|
-
return cfg;
|
|
160
|
-
try {
|
|
161
|
-
if (input.release)
|
|
162
|
-
await assertReleaseInProject(ctx.gateway, cfg.project_id, input.release);
|
|
163
|
-
const sprintId = await ctx.gateway.resolveSprintId(cfg.project_id, input.sprint);
|
|
164
|
-
const payload = buildTaskInsertPayload(input, cfg.project_id, ctx.user.id, sprintId);
|
|
165
|
-
const { assigneeIds, repoIds } = resolveTaskLinks(input, cfg.repository_id, ctx.user.id);
|
|
166
|
-
const autoDecisions = buildAutoDecisionWarnings(input.sprint, sprintId, input.end_date, payload.end_date ?? null);
|
|
167
|
-
const { task, warnings } = await ctx.gateway.createTask(payload, { assigneeIds, labelIds: input.label_ids ?? [], repoIds }, ctx.user.id);
|
|
168
|
-
return jsonResult(buildCreateTaskResult(task, assigneeIds, input.label_ids ?? [], repoIds, [...autoDecisions, ...warnings]));
|
|
169
|
-
}
|
|
170
|
-
catch (err) {
|
|
171
|
-
return errorResult(err.message);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
//# sourceMappingURL=create-task.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-task.js","sourceRoot":"","sources":["../../src/tools/create-task.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { existsSync } from 'node:fs';
|
|
3
|
-
import { jsonResult, errorResult } from '../lib/tool-result.js';
|
|
4
|
-
import { startExec } from '../lib/exec-delegate.js';
|
|
5
|
-
import { ENGINES, DEFAULT_ENGINE } from '../lib/exec-engines.js';
|
|
6
|
-
import { brand } from '../brand.js';
|
|
7
|
-
const ArgsSchema = z
|
|
8
|
-
.object({
|
|
9
|
-
worktree: z.string().min(1),
|
|
10
|
-
instruction: z.string().min(1),
|
|
11
|
-
engine: z.enum(ENGINES).optional(),
|
|
12
|
-
})
|
|
13
|
-
.strict();
|
|
14
|
-
export const definition = {
|
|
15
|
-
name: `${brand.cliToolPrefix}delegate_exec`,
|
|
16
|
-
description: 'Delega a IMPLEMENTAÇÃO a um agente de execução novo (codex ou claude local, na assinatura — sem API) ' +
|
|
17
|
-
'num worktree já criado pelo /implement. Roda em background e, ao terminar, mede o resultado ' +
|
|
18
|
-
'(tamanho de arquivo/função, lint, build, testes). NÃO julga qualidade e NÃO commita — o ' +
|
|
19
|
-
`review fica com você (code-reviewer + harness). Consulte o resultado com \`${brand.cliToolPrefix}exec_status\`.`,
|
|
20
|
-
inputSchema: {
|
|
21
|
-
type: 'object',
|
|
22
|
-
properties: {
|
|
23
|
-
worktree: {
|
|
24
|
-
type: 'string',
|
|
25
|
-
description: 'Caminho absoluto do worktree onde implementar (criado pelo /implement).',
|
|
26
|
-
},
|
|
27
|
-
instruction: {
|
|
28
|
-
type: 'string',
|
|
29
|
-
description: 'O que implementar: o ticket + critérios de aceitação. Numa re-tentativa, inclua as ' +
|
|
30
|
-
'violações apontadas pelo review — o agente de execução é novo e não herda a conversa.',
|
|
31
|
-
},
|
|
32
|
-
engine: {
|
|
33
|
-
type: 'string',
|
|
34
|
-
enum: [...ENGINES],
|
|
35
|
-
description: `Agente de execução a usar. Default: ${DEFAULT_ENGINE}.`,
|
|
36
|
-
},
|
|
37
|
-
},
|
|
38
|
-
required: ['worktree', 'instruction'],
|
|
39
|
-
additionalProperties: false,
|
|
40
|
-
},
|
|
41
|
-
};
|
|
42
|
-
export async function handler(args, _ctx) {
|
|
43
|
-
const parsed = ArgsSchema.safeParse(args);
|
|
44
|
-
if (!parsed.success) {
|
|
45
|
-
return errorResult(`Argumento inválido: ${parsed.error.message}`);
|
|
46
|
-
}
|
|
47
|
-
const { worktree, instruction, engine } = parsed.data;
|
|
48
|
-
if (!existsSync(worktree)) {
|
|
49
|
-
return errorResult(`Worktree não encontrado: ${worktree}`);
|
|
50
|
-
}
|
|
51
|
-
const job = startExec({ worktree, instruction, engine });
|
|
52
|
-
if (job.state === 'failed') {
|
|
53
|
-
return errorResult(job.error ?? 'falha ao iniciar a execução');
|
|
54
|
-
}
|
|
55
|
-
return jsonResult({
|
|
56
|
-
job_id: job.id,
|
|
57
|
-
state: job.state,
|
|
58
|
-
engine: job.engine,
|
|
59
|
-
worktree: job.worktree,
|
|
60
|
-
hint: `Consulte com \`${brand.cliToolPrefix}exec_status\` até state=done|failed.`,
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
//# sourceMappingURL=delegate-exec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"delegate-exec.js","sourceRoot":"","sources":["../../src/tools/delegate-exec.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,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,UAAU,GAAG,CAAC;KACjB,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,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,eAAe;IAC3C,WAAW,EACT,uGAAuG;QACvG,8FAA8F;QAC9F,0FAA0F;QAC1F,8EAA8E,KAAK,CAAC,aAAa,gBAAgB;IACnH,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yEAAyE;aACvF;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,qFAAqF;oBACrF,uFAAuF;aAC1F;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC;gBAClB,WAAW,EAAE,uCAAuC,cAAc,GAAG;aACtE;SACF;QACD,QAAQ,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC;QACrC,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,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IACtD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,WAAW,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,GAAG,GAAG,SAAS,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;IACzD,IAAI,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,IAAI,6BAA6B,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,UAAU,CAAC;QAChB,MAAM,EAAE,GAAG,CAAC,EAAE;QACd,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,IAAI,EAAE,kBAAkB,KAAK,CAAC,aAAa,sCAAsC;KAClF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,38 +0,0 @@
|
|
|
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}end_allocation`,
|
|
6
|
-
description: '[ENCERRA O DIA] Bate ponto de SAÍDA do usuário e fecha qualquer task_allocation aberta. ' +
|
|
7
|
-
'⚠️ Use SOMENTE quando o usuário indicar explicitamente fim de expediente ' +
|
|
8
|
-
'("encerrar dia", "bati ponto", "saí"). Para parar APENAS o timer de uma task ' +
|
|
9
|
-
`sem encerrar o dia, use \`${brand.toolPrefix}end_task_allocation\`.`,
|
|
10
|
-
inputSchema: {
|
|
11
|
-
type: 'object',
|
|
12
|
-
properties: {},
|
|
13
|
-
additionalProperties: false,
|
|
14
|
-
},
|
|
15
|
-
};
|
|
16
|
-
/** Monta o payload de resposta do end_allocation. Pura. */
|
|
17
|
-
export function formatEndAllocationResult(closed, closedTaskAllocationsCount) {
|
|
18
|
-
return {
|
|
19
|
-
allocation_id: closed.id,
|
|
20
|
-
start_time: closed.start_time,
|
|
21
|
-
end_time: closed.end_time,
|
|
22
|
-
duration_seconds: durationSeconds(closed.start_time, closed.end_time),
|
|
23
|
-
closed_task_allocations: closedTaskAllocationsCount,
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
export async function handler(_args, ctx) {
|
|
27
|
-
let result;
|
|
28
|
-
try {
|
|
29
|
-
result = await ctx.gateway.endAllocation(ctx.user.id);
|
|
30
|
-
}
|
|
31
|
-
catch (err) {
|
|
32
|
-
return errorResult(err.message);
|
|
33
|
-
}
|
|
34
|
-
if (!result)
|
|
35
|
-
return errorResult('Não há alocação ativa para encerrar.');
|
|
36
|
-
return jsonResult(formatEndAllocationResult(result.closed, result.closedTaskAllocations));
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=end-allocation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"end-allocation.js","sourceRoot":"","sources":["../../src/tools/end-allocation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,IAAI,EAAE,GAAG,KAAK,CAAC,UAAU,gBAAgB;IACzC,WAAW,EACT,0FAA0F;QAC1F,2EAA2E;QAC3E,+EAA+E;QAC/E,6BAA6B,KAAK,CAAC,UAAU,wBAAwB;IACvE,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;QACd,oBAAoB,EAAE,KAAK;KAC5B;CACF,CAAC;AAEF,2DAA2D;AAC3D,MAAM,UAAU,yBAAyB,CACvC,MAAmE,EACnE,0BAAkC;IAElC,OAAO;QACL,aAAa,EAAE,MAAM,CAAC,EAAE;QACxB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,gBAAgB,EAAE,eAAe,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC;QACrE,uBAAuB,EAAE,0BAA0B;KACpD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAc,EAAE,GAAgB;IAC5D,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,CAAC,MAAM;QAAE,OAAO,WAAW,CAAC,sCAAsC,CAAC,CAAC;IACxE,OAAO,UAAU,CAAC,yBAAyB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC;AAC5F,CAAC"}
|