@davidbalzan/groundwork 0.3.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/LICENSE +21 -0
- package/README.md +323 -0
- package/docs/DECISIONS.md +170 -0
- package/package.json +38 -0
- package/payload/doc-templates/COMMANDS.md +419 -0
- package/payload/doc-templates/DECISIONS.md +168 -0
- package/payload/doc-templates/FACTS.md +43 -0
- package/payload/doc-templates/GROUNDWORK_METHODOLOGY.md +1300 -0
- package/payload/doc-templates/STACK_MAP.md +90 -0
- package/payload/doc-templates/WORKSTREAMS.md +79 -0
- package/payload/doc-templates/_INDEX.md +54 -0
- package/payload/doc-templates/phases/README.md +36 -0
- package/payload/doc-templates/phases/templates/README.md +63 -0
- package/payload/doc-templates/phases/templates/TASK_TEMPLATE.md +302 -0
- package/payload/doc-templates/phases/templates/task_template_prompt.md +229 -0
- package/payload/doc-templates/templates/ARCHITECTURE_GUIDE_TEMPLATE.md +250 -0
- package/payload/doc-templates/templates/DESIGN_SYSTEM_TEMPLATE.md +336 -0
- package/payload/doc-templates/templates/DONE_TEMPLATE.md +21 -0
- package/payload/doc-templates/templates/PHASES_README_TEMPLATE.md +144 -0
- package/payload/doc-templates/templates/PHASE_README_TEMPLATE.md +142 -0
- package/payload/doc-templates/templates/PRD_TEMPLATE.md +348 -0
- package/payload/doc-templates/templates/PRODUCTION_ROADMAP_TEMPLATE.md +168 -0
- package/payload/doc-templates/templates/QUEUE_TEMPLATE.md +17 -0
- package/payload/doc-templates/templates/TECH_STACK_TEMPLATE.md +199 -0
- package/payload/scripts/check-task.mjs +98 -0
- package/payload/scripts/check-versions.mjs +113 -0
- package/payload/scripts/phase-status.mjs +69 -0
- package/payload/scripts/set-fact.mjs +86 -0
- package/payload/skills/add-data-layer/SKILL.md +129 -0
- package/payload/skills/check-task/SKILL.md +35 -0
- package/payload/skills/check-versions/SKILL.md +47 -0
- package/payload/skills/create-prd/SKILL.md +90 -0
- package/payload/skills/domain-model/SKILL.md +90 -0
- package/payload/skills/kickstart/SKILL.md +157 -0
- package/payload/skills/log-decision/SKILL.md +65 -0
- package/payload/skills/next/SKILL.md +65 -0
- package/payload/skills/plan-phase/SKILL.md +108 -0
- package/payload/skills/remember/SKILL.md +77 -0
- package/payload/skills/start-session/SKILL.md +52 -0
- package/payload/skills/update-workstreams/SKILL.md +60 -0
- package/src/cli.mjs +115 -0
- package/src/commands/add.mjs +39 -0
- package/src/commands/artifacts.mjs +24 -0
- package/src/commands/doctor.mjs +292 -0
- package/src/commands/init.mjs +147 -0
- package/src/commands/knowledge.mjs +148 -0
- package/src/commands/list.mjs +61 -0
- package/src/commands/status.mjs +96 -0
- package/src/commands/update.mjs +128 -0
- package/src/lib/adr-tripwire.mjs +171 -0
- package/src/lib/artifacts.mjs +124 -0
- package/src/lib/config.mjs +43 -0
- package/src/lib/fs.mjs +46 -0
- package/src/lib/log.mjs +22 -0
- package/src/lib/paths.mjs +36 -0
- package/src/lib/progress.mjs +26 -0
- package/src/lib/skills.mjs +42 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/* Deterministic checkbox math + progress bars — shared by `status` and the
|
|
2
|
+
project-side helper scripts so progress is never hand-counted by an LLM. */
|
|
3
|
+
|
|
4
|
+
const DONE = /^\s*-\s*\[[xX]\]/;
|
|
5
|
+
const OPEN = /^\s*-\s*\[ \]/;
|
|
6
|
+
|
|
7
|
+
/** Count GitHub-style task checkboxes in markdown. */
|
|
8
|
+
export function countCheckboxes(text) {
|
|
9
|
+
let done = 0;
|
|
10
|
+
let total = 0;
|
|
11
|
+
for (const line of text.split("\n")) {
|
|
12
|
+
if (DONE.test(line)) {
|
|
13
|
+
done++;
|
|
14
|
+
total++;
|
|
15
|
+
} else if (OPEN.test(line)) {
|
|
16
|
+
total++;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return { done, total };
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** Unicode progress bar, e.g. ████████░░░░░░░░░░░░ */
|
|
23
|
+
export function progressBar(pct, width = 20) {
|
|
24
|
+
const filled = Math.round((pct / 100) * width);
|
|
25
|
+
return "█".repeat(filled) + "░".repeat(Math.max(0, width - filled));
|
|
26
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { PAYLOAD_SKILLS } from "./paths.mjs";
|
|
3
|
+
import { listDirs, readText } from "./fs.mjs";
|
|
4
|
+
export {
|
|
5
|
+
parseFrontmatter,
|
|
6
|
+
deArgument,
|
|
7
|
+
isReadOnly,
|
|
8
|
+
toCursor,
|
|
9
|
+
toVscode,
|
|
10
|
+
} from "@davidbalzan/groundwork-seam/skills-mirror";
|
|
11
|
+
import { parseFrontmatter, toCursor, toVscode } from "@davidbalzan/groundwork-seam/skills-mirror";
|
|
12
|
+
|
|
13
|
+
/** Load every skill from the payload as { name, data, body }. */
|
|
14
|
+
export function loadSkills(only = null) {
|
|
15
|
+
const names = listDirs(PAYLOAD_SKILLS).filter(
|
|
16
|
+
(n) => !only || only.includes(n)
|
|
17
|
+
);
|
|
18
|
+
return names.map((name) => {
|
|
19
|
+
const raw = readText(path.join(PAYLOAD_SKILLS, name, "SKILL.md"));
|
|
20
|
+
const { data, body } = parseFrontmatter(raw);
|
|
21
|
+
return { name, data, body, raw };
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Build the full mirror file map for a set of skills.
|
|
27
|
+
* Returns [{ relPath, content }] for cursor + vscode targets.
|
|
28
|
+
*/
|
|
29
|
+
export function mirrorFiles(skills, { cursorDir, vscodeDir }) {
|
|
30
|
+
const out = [];
|
|
31
|
+
for (const skill of skills) {
|
|
32
|
+
out.push({
|
|
33
|
+
rel: path.join(cursorDir, `${skill.name}.md`),
|
|
34
|
+
content: toCursor(skill),
|
|
35
|
+
});
|
|
36
|
+
out.push({
|
|
37
|
+
rel: path.join(vscodeDir, `${skill.name}.prompt.md`),
|
|
38
|
+
content: toVscode(skill),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return out;
|
|
42
|
+
}
|