@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.
Files changed (102) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +3 -2
  3. package/CHANGELOG.md +271 -17
  4. package/INSTALL.md +156 -24
  5. package/README.md +278 -27
  6. package/agents/{PO.md → product-owner.md} +33 -1
  7. package/agents/{Senior-Architect.md → senior-architect.md} +33 -1
  8. package/agents/{Senior-DBA.md → senior-dba.md} +33 -1
  9. package/agents/{Senior-Dev-Reviewer.md → senior-dev-reviewer.md} +33 -1
  10. package/agents/{Senior-Dev-Security.md → senior-dev-security.md} +33 -1
  11. package/agents/{Senior-Developer.md → senior-developer.md} +33 -1
  12. package/agents/{Senior-QA.md → senior-qa.md} +33 -1
  13. package/agents/{TechLead-Consolidator.md → tech-lead-consolidator.md} +7 -1
  14. package/agents/{TechLead-Planner.md → tech-lead-planner.md} +7 -1
  15. package/commands/squad-review.md +10 -58
  16. package/commands/squad.md +11 -70
  17. package/dist/config/ownership-matrix.d.ts +24 -2
  18. package/dist/config/ownership-matrix.js +466 -139
  19. package/dist/config/ownership-matrix.js.map +1 -1
  20. package/dist/config/squad-yaml.d.ts +242 -0
  21. package/dist/config/squad-yaml.js +403 -0
  22. package/dist/config/squad-yaml.js.map +1 -0
  23. package/dist/errors.d.ts +1 -1
  24. package/dist/errors.js +1 -1
  25. package/dist/errors.js.map +1 -1
  26. package/dist/format/pr-review.d.ts +61 -0
  27. package/dist/format/pr-review.js +146 -0
  28. package/dist/format/pr-review.js.map +1 -0
  29. package/dist/index.js +19 -13
  30. package/dist/index.js.map +1 -1
  31. package/dist/learning/format.d.ts +29 -0
  32. package/dist/learning/format.js +55 -0
  33. package/dist/learning/format.js.map +1 -0
  34. package/dist/learning/store.d.ts +102 -0
  35. package/dist/learning/store.js +169 -0
  36. package/dist/learning/store.js.map +1 -0
  37. package/dist/resources/agent-loader.d.ts +8 -1
  38. package/dist/resources/agent-loader.js +83 -48
  39. package/dist/resources/agent-loader.js.map +1 -1
  40. package/dist/tasks/select.d.ts +64 -0
  41. package/dist/tasks/select.js +84 -0
  42. package/dist/tasks/select.js.map +1 -0
  43. package/dist/tasks/store.d.ts +338 -0
  44. package/dist/tasks/store.js +321 -0
  45. package/dist/tasks/store.js.map +1 -0
  46. package/dist/tools/compose-advisory-bundle.d.ts +5 -5
  47. package/dist/tools/compose-advisory-bundle.js +24 -12
  48. package/dist/tools/compose-advisory-bundle.js.map +1 -1
  49. package/dist/tools/compose-prd-parse.d.ts +53 -0
  50. package/dist/tools/compose-prd-parse.js +167 -0
  51. package/dist/tools/compose-prd-parse.js.map +1 -0
  52. package/dist/tools/compose-squad-workflow.d.ts +28 -10
  53. package/dist/tools/compose-squad-workflow.js +0 -0
  54. package/dist/tools/compose-squad-workflow.js.map +1 -1
  55. package/dist/tools/consolidate.d.ts +55 -4
  56. package/dist/tools/consolidate.js +87 -15
  57. package/dist/tools/consolidate.js.map +1 -1
  58. package/dist/tools/expand-task.d.ts +51 -0
  59. package/dist/tools/expand-task.js +35 -0
  60. package/dist/tools/expand-task.js.map +1 -0
  61. package/dist/tools/list-tasks.d.ts +31 -0
  62. package/dist/tools/list-tasks.js +50 -0
  63. package/dist/tools/list-tasks.js.map +1 -0
  64. package/dist/tools/next-task.d.ts +37 -0
  65. package/dist/tools/next-task.js +60 -0
  66. package/dist/tools/next-task.js.map +1 -0
  67. package/dist/tools/read-learnings.d.ts +53 -0
  68. package/dist/tools/read-learnings.js +72 -0
  69. package/dist/tools/read-learnings.js.map +1 -0
  70. package/dist/tools/read-squad-config.d.ts +23 -0
  71. package/dist/tools/read-squad-config.js +34 -0
  72. package/dist/tools/read-squad-config.js.map +1 -0
  73. package/dist/tools/record-learning.d.ts +62 -0
  74. package/dist/tools/record-learning.js +80 -0
  75. package/dist/tools/record-learning.js.map +1 -0
  76. package/dist/tools/record-tasks.d.ts +71 -0
  77. package/dist/tools/record-tasks.js +45 -0
  78. package/dist/tools/record-tasks.js.map +1 -0
  79. package/dist/tools/registry.d.ts +1 -1
  80. package/dist/tools/registry.js +71 -39
  81. package/dist/tools/registry.js.map +1 -1
  82. package/dist/tools/score-rubric.d.ts +74 -0
  83. package/dist/tools/score-rubric.js +140 -0
  84. package/dist/tools/score-rubric.js.map +1 -0
  85. package/dist/tools/slice-files-for-task.d.ts +31 -0
  86. package/dist/tools/slice-files-for-task.js +52 -0
  87. package/dist/tools/slice-files-for-task.js.map +1 -0
  88. package/dist/tools/update-task-status.d.ts +29 -0
  89. package/dist/tools/update-task-status.js +35 -0
  90. package/dist/tools/update-task-status.js.map +1 -0
  91. package/package.json +11 -1
  92. package/skills/squad/SKILL.md +454 -0
  93. package/tools/_tasks-io.mjs +69 -0
  94. package/tools/list-tasks.mjs +110 -0
  95. package/tools/next-task.mjs +131 -0
  96. package/tools/post-review.mjs +212 -0
  97. package/tools/record-learning.mjs +145 -0
  98. package/tools/record-tasks.mjs +186 -0
  99. package/tools/update-task-status.mjs +114 -0
  100. /package/{agents → shared}/Skill-Squad-Dev.md +0 -0
  101. /package/{agents → shared}/Skill-Squad-Review.md +0 -0
  102. /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