squad-kit 0.3.0 → 0.6.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/CHANGELOG.md +95 -1
- package/README.md +27 -4
- package/dist/cli.js +2514 -624
- package/dist/cli.js.map +1 -1
- package/dist/console-ui/assets/index-BDlxrwaG.css +1 -0
- package/dist/console-ui/assets/index-Lxr-TdWe.js +416 -0
- package/dist/console-ui/favicon.ico +0 -0
- package/dist/console-ui/index.html +16 -0
- package/dist/console-ui/logo.svg +18 -0
- package/package.json +16 -4
- package/templates/agents/claude-code/squad-plan.md +1 -0
- package/templates/agents/copilot/squad-plan.prompt.md +2 -0
- package/templates/agents/cursor/squad-plan.md +1 -0
- package/templates/agents/gemini/squad-plan.toml +2 -0
- package/templates/prompts/generate-plan.md +3 -0
- package/templates/prompts/intake.md +11 -8
- package/templates/prompts/story-skeleton.md +2 -0
|
Binary file
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en" class="dark">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<meta name="color-scheme" content="dark" />
|
|
7
|
+
<link rel="icon" href="/favicon.ico" sizes="any" />
|
|
8
|
+
<link rel="icon" href="/logo.svg" type="image/svg+xml" />
|
|
9
|
+
<title>squad console</title>
|
|
10
|
+
<script type="module" crossorigin src="/assets/index-Lxr-TdWe.js"></script>
|
|
11
|
+
<link rel="stylesheet" crossorigin href="/assets/index-BDlxrwaG.css">
|
|
12
|
+
</head>
|
|
13
|
+
<body>
|
|
14
|
+
<div id="root"></div>
|
|
15
|
+
</body>
|
|
16
|
+
</html>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" role="img" aria-label="squad-kit">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="sk-arrow" x1="0" y1="0" x2="1" y2="1">
|
|
4
|
+
<stop offset="0%" stop-color="#7cffa0"/>
|
|
5
|
+
<stop offset="100%" stop-color="#4ade80"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<radialGradient id="sk-glow" cx="50%" cy="50%" r="50%">
|
|
8
|
+
<stop offset="0%" stop-color="#7cffa0" stop-opacity="0.18"/>
|
|
9
|
+
<stop offset="100%" stop-color="#7cffa0" stop-opacity="0"/>
|
|
10
|
+
</radialGradient>
|
|
11
|
+
</defs>
|
|
12
|
+
<rect x="1" y="1" width="62" height="62" rx="12" fill="#0a0a0c" stroke="#32323a" stroke-width="1.5"/>
|
|
13
|
+
<circle cx="32" cy="32" r="24" fill="url(#sk-glow)"/>
|
|
14
|
+
<circle cx="14" cy="32" r="2.75" fill="#7cffa0" fill-opacity="0.35"/>
|
|
15
|
+
<circle cx="22" cy="32" r="2.75" fill="#7cffa0" fill-opacity="0.65"/>
|
|
16
|
+
<circle cx="30" cy="32" r="2.75" fill="#7cffa0"/>
|
|
17
|
+
<path d="M38 21 L51 32 L38 43" fill="none" stroke="url(#sk-arrow)" stroke-width="3.25" stroke-linecap="round" stroke-linejoin="round"/>
|
|
18
|
+
</svg>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "squad-kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"author": "Momen Yasser <momenysr@gmail.com>",
|
|
5
5
|
"description": "Plan once, execute cheap. A token-efficient, 3-step SDD workflow CLI (stories → plans → implementation).",
|
|
6
6
|
"keywords": [
|
|
@@ -27,30 +27,42 @@
|
|
|
27
27
|
"LICENSE"
|
|
28
28
|
],
|
|
29
29
|
"scripts": {
|
|
30
|
-
"build": "
|
|
30
|
+
"build": "pnpm run build:ui && pnpm run build:cli && pnpm run verify:console",
|
|
31
|
+
"build:cli": "tsup",
|
|
32
|
+
"build:ui": "pnpm -C console-ui install --no-frozen-lockfile && pnpm -C console-ui build",
|
|
33
|
+
"clean": "rimraf dist console-ui/dist",
|
|
31
34
|
"dev": "tsup --watch",
|
|
32
35
|
"test": "vitest run",
|
|
33
36
|
"test:watch": "vitest",
|
|
34
37
|
"lint": "tsc --noEmit",
|
|
38
|
+
"verify:console": "tsx scripts/verify-console-build.ts",
|
|
35
39
|
"verify:models": "tsx scripts/verify-models.ts",
|
|
36
|
-
"
|
|
40
|
+
"size:guard": "tsx scripts/size-guard.ts",
|
|
41
|
+
"prepublishOnly": "pnpm run verify:models && pnpm build && pnpm test && pnpm size:guard"
|
|
37
42
|
},
|
|
38
43
|
"dependencies": {
|
|
44
|
+
"@hono/node-server": "^1.13.0",
|
|
39
45
|
"@inquirer/prompts": "^7.2.0",
|
|
40
46
|
"boxen": "^8.0.1",
|
|
41
47
|
"commander": "^12.1.0",
|
|
48
|
+
"diff": "^7.0.0",
|
|
42
49
|
"fs-extra": "^11.2.0",
|
|
43
50
|
"gradient-string": "^3.0.0",
|
|
51
|
+
"hono": "^4.6.0",
|
|
44
52
|
"ignore": "^6.0.2",
|
|
45
53
|
"js-yaml": "^4.1.0",
|
|
46
54
|
"kleur": "^4.1.5",
|
|
47
|
-
"
|
|
55
|
+
"open": "^10.1.0",
|
|
56
|
+
"ora": "^8.1.1",
|
|
57
|
+
"zod": "^3.23.0"
|
|
48
58
|
},
|
|
49
59
|
"devDependencies": {
|
|
60
|
+
"@types/diff": "^7.0.0",
|
|
50
61
|
"@types/fs-extra": "^11.0.4",
|
|
51
62
|
"@types/gradient-string": "^1.1.6",
|
|
52
63
|
"@types/js-yaml": "^4.0.9",
|
|
53
64
|
"@types/node": "^22.10.0",
|
|
65
|
+
"rimraf": "^6.0.1",
|
|
54
66
|
"tsup": "^8.3.5",
|
|
55
67
|
"tsx": "^4.19.3",
|
|
56
68
|
"typescript": "^5.7.2",
|
|
@@ -26,4 +26,5 @@ You are generating an agent-executable implementation plan for this project usin
|
|
|
26
26
|
- **Planning only.** Do not modify application source code in this session.
|
|
27
27
|
- **Concrete over clever.** File paths, line ranges, type names, function signatures, verification commands. No "consider" or "might".
|
|
28
28
|
- **Respect existing conventions.** Read neighbouring plan files before inventing a new pattern.
|
|
29
|
+
- If a plan file already starts with `<!-- squad-kit:`, **never change or remove that first line** when editing. New plans start with `# Story NN — …` per `generate-plan.md`; do not invent the API metadata comment. In later implementation sessions, treat the plan file as read-only unless the user explicitly asks to revise the plan.
|
|
29
30
|
- Report back the path(s) you wrote and a one-line summary per file.
|
|
@@ -12,3 +12,5 @@ Generate an implementation plan using the squad-kit workflow.
|
|
|
12
12
|
- Write the plan file to `.squad/plans/<feature-slug>/NN-story-<slug>[-<id>].md` and update `00-overview.md` / `00-index.md` as needed.
|
|
13
13
|
|
|
14
14
|
Planning only. Do not modify application source code in this session.
|
|
15
|
+
|
|
16
|
+
If a plan file already starts with `<!-- squad-kit:`, never change or remove that first line when editing (tooling / `squad list`). New plans start with `# Story NN — …` per `generate-plan.md`; do not fake the API metadata comment. In later implementation sessions, keep the plan file read-only unless the user explicitly asks to revise the plan.
|
|
@@ -24,3 +24,4 @@ You are generating an agent-executable implementation plan for this project usin
|
|
|
24
24
|
- Planning only. Do **not** modify application source code in this session.
|
|
25
25
|
- Concrete over clever. File paths, line ranges, type names, function signatures, verification commands.
|
|
26
26
|
- Respect existing conventions — read neighbouring plan files first.
|
|
27
|
+
- If a plan file already starts with `<!-- squad-kit:`, **never change or remove that first line** when editing the file. New plans you write start with `# Story NN — …` per `generate-plan.md`; do not fake the API metadata comment (only `squad new-plan --api` emits that header). In later **implementation** chats, treat the plan file as read-only unless the user explicitly asks to revise the plan.
|
|
@@ -11,4 +11,6 @@ Steps:
|
|
|
11
11
|
5. Write the plan file to .squad/plans/<feature-slug>/NN-story-<slug>[-<id>].md and update 00-overview.md / 00-index.md as needed.
|
|
12
12
|
|
|
13
13
|
Planning only. Do not modify application source code in this session.
|
|
14
|
+
|
|
15
|
+
If a plan file already starts with `<!-- squad-kit:`, never change or remove that first line when editing (tooling). New plans start with `# Story NN — …` per generate-plan.md; do not fake the API metadata comment. In later implementation sessions, keep the plan file read-only unless the user explicitly asks to revise the plan.
|
|
14
16
|
"""
|
|
@@ -82,6 +82,9 @@ Every generated plan Markdown must follow this structure and tone.
|
|
|
82
82
|
5. **Cross-feature links:** Use relative paths like `../other-feature/NN-story-….md`.
|
|
83
83
|
6. **Index:** If introducing a **new** feature slug, add a row to `.squad/plans/00-index.md`.
|
|
84
84
|
7. **Scope:** Produce planning Markdown only unless the user explicitly asks for code changes.
|
|
85
|
+
8. **First-line metadata (`<!-- squad-kit: … -->`):** If an existing `NN-story-*.md` already begins (after any leading blank lines) with a single-line HTML comment `<!-- squad-kit: … -->`, **leave that first line unchanged** in every edit unless the user explicitly asks to change plan metadata. Do not replace it with status text, a title, or a different comment—`squad list` and other tooling read it. Status notes (*implementation complete*, etc.) belong in the body or elsewhere, not on that line.
|
|
86
|
+
9. **New plan files you author here (e.g. copy-paste / in-agent planning):** Start the Markdown body with the **`# Story NN — …`** H1 from this document. Do **not** invent a `<!-- squad-kit: generated by … -->` line; only `squad new-plan --api` writes that exact header format.
|
|
87
|
+
10. **Executor sessions (later):** When this plan is used for implementation (attach-only workflow), treat the plan file as **read-only** unless the user explicitly asks to revise the plan; implement in application sources and tests instead of rewriting the plan header.
|
|
85
88
|
|
|
86
89
|
---
|
|
87
90
|
|
|
@@ -18,8 +18,11 @@ This is **not** an implementation prompt. It is the input to the plan-generation
|
|
|
18
18
|
## Tracker (metadata only)
|
|
19
19
|
|
|
20
20
|
- **Tracker type:** `{{trackerType}}`
|
|
21
|
-
- **Work item id:** (used in filenames and plan tables;
|
|
22
|
-
- **Work item type:**
|
|
21
|
+
- **Work item id:** `{{trackerWorkItemId}}` *(used in filenames and plan tables; fill manually if empty)*
|
|
22
|
+
- **Work item type:** `{{trackerWorkItemType}}`
|
|
23
|
+
- **Status:** `{{trackerStatus}}`
|
|
24
|
+
- **Assignee:** `{{trackerAssignee}}`
|
|
25
|
+
- **Labels:** `{{trackerLabels}}`
|
|
23
26
|
|
|
24
27
|
External tracker links are **not** followed by the planner. Keep the id for naming and traceability only.
|
|
25
28
|
|
|
@@ -27,30 +30,30 @@ External tracker links are **not** followed by the planner. Keep the id for nami
|
|
|
27
30
|
|
|
28
31
|
## Title
|
|
29
32
|
|
|
30
|
-
*(Paste the work item title verbatim.)*
|
|
33
|
+
*(Paste the work item title verbatim. Prefilled when `squad new-story` fetched from a tracker.)*
|
|
31
34
|
|
|
32
35
|
```
|
|
33
|
-
|
|
36
|
+
{{trackerTitle}}
|
|
34
37
|
```
|
|
35
38
|
|
|
36
39
|
---
|
|
37
40
|
|
|
38
41
|
## Description
|
|
39
42
|
|
|
40
|
-
*(Paste the full work item description
|
|
43
|
+
*(Paste the full work item description. Prefilled when fetched from a tracker.)*
|
|
41
44
|
|
|
42
45
|
```
|
|
43
|
-
|
|
46
|
+
{{trackerDescription}}
|
|
44
47
|
```
|
|
45
48
|
|
|
46
49
|
---
|
|
47
50
|
|
|
48
51
|
## Acceptance criteria
|
|
49
52
|
|
|
50
|
-
*(
|
|
53
|
+
*(Checklist, bullets, Gherkin, etc. Prefilled for Azure DevOps when the work item has acceptance criteria.)*
|
|
51
54
|
|
|
52
55
|
```
|
|
53
|
-
|
|
56
|
+
{{trackerAcceptanceCriteria}}
|
|
54
57
|
```
|
|
55
58
|
|
|
56
59
|
---
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
This file documents the structure of `NN-story-<slug>.md` plans that the planner produces. The planner reads `generate-plan.md`; this file exists so contributors can scan the target shape at a glance.
|
|
4
4
|
|
|
5
|
+
When **`squad new-plan --api`** creates the file, the first line is often a single-line **`<!-- squad-kit: generated by … -->`** comment (tooling / `squad list`). **Preserve that line** when editing the plan; do not overwrite it with prose or a different comment unless the user explicitly asks to change metadata.
|
|
6
|
+
|
|
5
7
|
```md
|
|
6
8
|
# Story NN — <title> (Story: <tracker-id?>)
|
|
7
9
|
|