@gempack/squad-mcp 0.5.0 → 0.6.1
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/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +3 -2
- package/CHANGELOG.md +271 -17
- package/INSTALL.md +156 -24
- package/README.md +278 -27
- package/agents/{PO.md → product-owner.md} +33 -1
- package/agents/{Senior-Architect.md → senior-architect.md} +33 -1
- package/agents/{Senior-DBA.md → senior-dba.md} +33 -1
- package/agents/{Senior-Dev-Reviewer.md → senior-dev-reviewer.md} +33 -1
- package/agents/{Senior-Dev-Security.md → senior-dev-security.md} +33 -1
- package/agents/{Senior-Developer.md → senior-developer.md} +33 -1
- package/agents/{Senior-QA.md → senior-qa.md} +33 -1
- package/agents/{TechLead-Consolidator.md → tech-lead-consolidator.md} +7 -1
- package/agents/{TechLead-Planner.md → tech-lead-planner.md} +7 -1
- package/commands/squad-review.md +10 -58
- package/commands/squad.md +11 -70
- package/dist/config/ownership-matrix.d.ts +24 -2
- package/dist/config/ownership-matrix.js +466 -139
- package/dist/config/ownership-matrix.js.map +1 -1
- package/dist/config/squad-yaml.d.ts +242 -0
- package/dist/config/squad-yaml.js +403 -0
- package/dist/config/squad-yaml.js.map +1 -0
- package/dist/errors.d.ts +1 -1
- package/dist/errors.js +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/format/pr-review.d.ts +61 -0
- package/dist/format/pr-review.js +146 -0
- package/dist/format/pr-review.js.map +1 -0
- package/dist/index.js +19 -13
- package/dist/index.js.map +1 -1
- package/dist/learning/format.d.ts +29 -0
- package/dist/learning/format.js +55 -0
- package/dist/learning/format.js.map +1 -0
- package/dist/learning/store.d.ts +102 -0
- package/dist/learning/store.js +169 -0
- package/dist/learning/store.js.map +1 -0
- package/dist/resources/agent-loader.d.ts +8 -1
- package/dist/resources/agent-loader.js +83 -48
- package/dist/resources/agent-loader.js.map +1 -1
- package/dist/tasks/select.d.ts +64 -0
- package/dist/tasks/select.js +84 -0
- package/dist/tasks/select.js.map +1 -0
- package/dist/tasks/store.d.ts +338 -0
- package/dist/tasks/store.js +321 -0
- package/dist/tasks/store.js.map +1 -0
- package/dist/tools/compose-advisory-bundle.d.ts +5 -5
- package/dist/tools/compose-advisory-bundle.js +24 -12
- package/dist/tools/compose-advisory-bundle.js.map +1 -1
- package/dist/tools/compose-prd-parse.d.ts +53 -0
- package/dist/tools/compose-prd-parse.js +167 -0
- package/dist/tools/compose-prd-parse.js.map +1 -0
- package/dist/tools/compose-squad-workflow.d.ts +28 -10
- package/dist/tools/compose-squad-workflow.js +0 -0
- package/dist/tools/compose-squad-workflow.js.map +1 -1
- package/dist/tools/consolidate.d.ts +55 -4
- package/dist/tools/consolidate.js +87 -15
- package/dist/tools/consolidate.js.map +1 -1
- package/dist/tools/expand-task.d.ts +51 -0
- package/dist/tools/expand-task.js +35 -0
- package/dist/tools/expand-task.js.map +1 -0
- package/dist/tools/list-tasks.d.ts +31 -0
- package/dist/tools/list-tasks.js +50 -0
- package/dist/tools/list-tasks.js.map +1 -0
- package/dist/tools/next-task.d.ts +37 -0
- package/dist/tools/next-task.js +60 -0
- package/dist/tools/next-task.js.map +1 -0
- package/dist/tools/read-learnings.d.ts +53 -0
- package/dist/tools/read-learnings.js +72 -0
- package/dist/tools/read-learnings.js.map +1 -0
- package/dist/tools/read-squad-config.d.ts +23 -0
- package/dist/tools/read-squad-config.js +34 -0
- package/dist/tools/read-squad-config.js.map +1 -0
- package/dist/tools/record-learning.d.ts +62 -0
- package/dist/tools/record-learning.js +80 -0
- package/dist/tools/record-learning.js.map +1 -0
- package/dist/tools/record-tasks.d.ts +71 -0
- package/dist/tools/record-tasks.js +45 -0
- package/dist/tools/record-tasks.js.map +1 -0
- package/dist/tools/registry.d.ts +1 -1
- package/dist/tools/registry.js +71 -39
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/score-rubric.d.ts +74 -0
- package/dist/tools/score-rubric.js +140 -0
- package/dist/tools/score-rubric.js.map +1 -0
- package/dist/tools/slice-files-for-task.d.ts +31 -0
- package/dist/tools/slice-files-for-task.js +52 -0
- package/dist/tools/slice-files-for-task.js.map +1 -0
- package/dist/tools/update-task-status.d.ts +29 -0
- package/dist/tools/update-task-status.js +35 -0
- package/dist/tools/update-task-status.js.map +1 -0
- package/package.json +11 -1
- package/skills/squad/SKILL.md +454 -0
- package/tools/_tasks-io.mjs +69 -0
- package/tools/list-tasks.mjs +110 -0
- package/tools/next-task.mjs +131 -0
- package/tools/post-review.mjs +212 -0
- package/tools/record-learning.mjs +145 -0
- package/tools/record-tasks.mjs +186 -0
- package/tools/update-task-status.mjs +114 -0
- /package/{agents → shared}/Skill-Squad-Dev.md +0 -0
- /package/{agents → shared}/Skill-Squad-Review.md +0 -0
- /package/{agents → shared}/_Severity-and-Ownership.md +0 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Flip a task (or subtask) status.
|
|
3
|
+
//
|
|
4
|
+
// Usage:
|
|
5
|
+
// tools/update-task-status.mjs --task 5 --status in-progress
|
|
6
|
+
// tools/update-task-status.mjs --task 5 --subtask 2 --status done
|
|
7
|
+
//
|
|
8
|
+
// Flags:
|
|
9
|
+
// --task <id> (required)
|
|
10
|
+
// --status pending|in-progress|review|done|blocked|cancelled (required)
|
|
11
|
+
// --subtask <id> (optional)
|
|
12
|
+
// --workspace <path> (default: cwd)
|
|
13
|
+
// --file <relpath> (override path)
|
|
14
|
+
//
|
|
15
|
+
// Exit codes:
|
|
16
|
+
// 0 success
|
|
17
|
+
// 2 invalid input or task/subtask not found
|
|
18
|
+
|
|
19
|
+
import {
|
|
20
|
+
readTasksFile,
|
|
21
|
+
writeTasksFile,
|
|
22
|
+
VALID_STATUSES,
|
|
23
|
+
fail,
|
|
24
|
+
} from "./_tasks-io.mjs";
|
|
25
|
+
|
|
26
|
+
const args = process.argv.slice(2);
|
|
27
|
+
const PROG = "update-task-status";
|
|
28
|
+
|
|
29
|
+
function parseArgs(argv) {
|
|
30
|
+
const out = {
|
|
31
|
+
task: null,
|
|
32
|
+
subtask: null,
|
|
33
|
+
status: null,
|
|
34
|
+
workspace: process.cwd(),
|
|
35
|
+
file: null,
|
|
36
|
+
};
|
|
37
|
+
for (let i = 0; i < argv.length; i++) {
|
|
38
|
+
const a = argv[i];
|
|
39
|
+
switch (a) {
|
|
40
|
+
case "--task":
|
|
41
|
+
out.task = Number(argv[++i]);
|
|
42
|
+
if (!Number.isInteger(out.task) || out.task <= 0) {
|
|
43
|
+
fail(PROG, 2, "--task must be a positive integer");
|
|
44
|
+
}
|
|
45
|
+
break;
|
|
46
|
+
case "--subtask":
|
|
47
|
+
out.subtask = Number(argv[++i]);
|
|
48
|
+
if (!Number.isInteger(out.subtask) || out.subtask <= 0) {
|
|
49
|
+
fail(PROG, 2, "--subtask must be a positive integer");
|
|
50
|
+
}
|
|
51
|
+
break;
|
|
52
|
+
case "--status":
|
|
53
|
+
out.status = argv[++i];
|
|
54
|
+
if (!VALID_STATUSES.includes(out.status)) {
|
|
55
|
+
fail(PROG, 2, `unknown status: ${out.status}`);
|
|
56
|
+
}
|
|
57
|
+
break;
|
|
58
|
+
case "--workspace":
|
|
59
|
+
out.workspace = argv[++i];
|
|
60
|
+
break;
|
|
61
|
+
case "--file":
|
|
62
|
+
out.file = argv[++i];
|
|
63
|
+
break;
|
|
64
|
+
case "--help":
|
|
65
|
+
case "-h":
|
|
66
|
+
process.stdout.write(
|
|
67
|
+
"usage: update-task-status.mjs --task ID --status STATUS [--subtask ID] [--workspace PATH] [--file PATH]\n",
|
|
68
|
+
);
|
|
69
|
+
process.exit(0);
|
|
70
|
+
default:
|
|
71
|
+
fail(PROG, 2, `unknown flag: ${a}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (out.task === null) fail(PROG, 2, "--task is required");
|
|
75
|
+
if (out.status === null) fail(PROG, 2, "--status is required");
|
|
76
|
+
return out;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
async function main() {
|
|
80
|
+
const opts = parseArgs(args);
|
|
81
|
+
const { filePath, data } = await readTasksFile(opts.workspace, opts.file);
|
|
82
|
+
|
|
83
|
+
const idx = data.tasks.findIndex((t) => t.id === opts.task);
|
|
84
|
+
if (idx < 0) fail(PROG, 2, `task ${opts.task} not found`);
|
|
85
|
+
|
|
86
|
+
const ts = new Date().toISOString();
|
|
87
|
+
const original = data.tasks[idx];
|
|
88
|
+
|
|
89
|
+
if (opts.subtask !== null) {
|
|
90
|
+
const sIdx = (original.subtasks ?? []).findIndex(
|
|
91
|
+
(s) => s.id === opts.subtask,
|
|
92
|
+
);
|
|
93
|
+
if (sIdx < 0) {
|
|
94
|
+
fail(PROG, 2, `subtask ${opts.subtask} not found on task ${opts.task}`);
|
|
95
|
+
}
|
|
96
|
+
const newSubtasks = [...original.subtasks];
|
|
97
|
+
newSubtasks[sIdx] = { ...newSubtasks[sIdx], status: opts.status };
|
|
98
|
+
data.tasks[idx] = {
|
|
99
|
+
...original,
|
|
100
|
+
subtasks: newSubtasks,
|
|
101
|
+
updated_at: ts,
|
|
102
|
+
};
|
|
103
|
+
} else {
|
|
104
|
+
data.tasks[idx] = { ...original, status: opts.status, updated_at: ts };
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
await writeTasksFile(filePath, data);
|
|
108
|
+
process.stdout.write(
|
|
109
|
+
`updated: task ${opts.task}${opts.subtask !== null ? `.${opts.subtask}` : ""} -> ${opts.status}\n`,
|
|
110
|
+
);
|
|
111
|
+
process.stdout.write(`file: ${filePath}\n`);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
main().catch((err) => fail(PROG, 2, err.message ?? String(err)));
|
|
File without changes
|
|
File without changes
|
|
File without changes
|