comp-gate 0.1.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.
Files changed (130) hide show
  1. package/README.md +353 -0
  2. package/dist/agents/agents-md.d.ts +2 -0
  3. package/dist/agents/agents-md.d.ts.map +1 -0
  4. package/dist/agents/agents-md.js +25 -0
  5. package/dist/agents/agents-md.js.map +1 -0
  6. package/dist/agents/claude.d.ts +2 -0
  7. package/dist/agents/claude.d.ts.map +1 -0
  8. package/dist/agents/claude.js +45 -0
  9. package/dist/agents/claude.js.map +1 -0
  10. package/dist/agents/cursor.d.ts +2 -0
  11. package/dist/agents/cursor.d.ts.map +1 -0
  12. package/dist/agents/cursor.js +28 -0
  13. package/dist/agents/cursor.js.map +1 -0
  14. package/dist/agents/detect.d.ts +4 -0
  15. package/dist/agents/detect.d.ts.map +1 -0
  16. package/dist/agents/detect.js +96 -0
  17. package/dist/agents/detect.js.map +1 -0
  18. package/dist/agents/shared.d.ts +9 -0
  19. package/dist/agents/shared.d.ts.map +1 -0
  20. package/dist/agents/shared.js +83 -0
  21. package/dist/agents/shared.js.map +1 -0
  22. package/dist/agents/types.d.ts +14 -0
  23. package/dist/agents/types.d.ts.map +1 -0
  24. package/dist/agents/types.js +8 -0
  25. package/dist/agents/types.js.map +1 -0
  26. package/dist/agents/windsurf.d.ts +2 -0
  27. package/dist/agents/windsurf.d.ts.map +1 -0
  28. package/dist/agents/windsurf.js +27 -0
  29. package/dist/agents/windsurf.js.map +1 -0
  30. package/dist/bootstrap-summary.d.ts +2 -0
  31. package/dist/bootstrap-summary.d.ts.map +1 -0
  32. package/dist/bootstrap-summary.js +262 -0
  33. package/dist/bootstrap-summary.js.map +1 -0
  34. package/dist/categories.d.ts +13 -0
  35. package/dist/categories.d.ts.map +1 -0
  36. package/dist/categories.js +382 -0
  37. package/dist/categories.js.map +1 -0
  38. package/dist/cli.d.ts +3 -0
  39. package/dist/cli.d.ts.map +1 -0
  40. package/dist/cli.js +361 -0
  41. package/dist/cli.js.map +1 -0
  42. package/dist/config-init.d.ts +16 -0
  43. package/dist/config-init.d.ts.map +1 -0
  44. package/dist/config-init.js +53 -0
  45. package/dist/config-init.js.map +1 -0
  46. package/dist/config.d.ts +11 -0
  47. package/dist/config.d.ts.map +1 -0
  48. package/dist/config.js +127 -0
  49. package/dist/config.js.map +1 -0
  50. package/dist/constants.d.ts +2 -0
  51. package/dist/constants.d.ts.map +1 -0
  52. package/dist/constants.js +2 -0
  53. package/dist/constants.js.map +1 -0
  54. package/dist/detect.d.ts +4 -0
  55. package/dist/detect.d.ts.map +1 -0
  56. package/dist/detect.js +244 -0
  57. package/dist/detect.js.map +1 -0
  58. package/dist/diff.d.ts +11 -0
  59. package/dist/diff.d.ts.map +1 -0
  60. package/dist/diff.js +198 -0
  61. package/dist/diff.js.map +1 -0
  62. package/dist/generate.d.ts +7 -0
  63. package/dist/generate.d.ts.map +1 -0
  64. package/dist/generate.js +71 -0
  65. package/dist/generate.js.map +1 -0
  66. package/dist/gitignore.d.ts +12 -0
  67. package/dist/gitignore.d.ts.map +1 -0
  68. package/dist/gitignore.js +106 -0
  69. package/dist/gitignore.js.map +1 -0
  70. package/dist/hooks.d.ts +22 -0
  71. package/dist/hooks.d.ts.map +1 -0
  72. package/dist/hooks.js +199 -0
  73. package/dist/hooks.js.map +1 -0
  74. package/dist/init.d.ts +24 -0
  75. package/dist/init.d.ts.map +1 -0
  76. package/dist/init.js +218 -0
  77. package/dist/init.js.map +1 -0
  78. package/dist/paths.d.ts +13 -0
  79. package/dist/paths.d.ts.map +1 -0
  80. package/dist/paths.js +18 -0
  81. package/dist/paths.js.map +1 -0
  82. package/dist/prompts.d.ts +9 -0
  83. package/dist/prompts.d.ts.map +1 -0
  84. package/dist/prompts.js +88 -0
  85. package/dist/prompts.js.map +1 -0
  86. package/dist/repo-stats.d.ts +10 -0
  87. package/dist/repo-stats.d.ts.map +1 -0
  88. package/dist/repo-stats.js +117 -0
  89. package/dist/repo-stats.js.map +1 -0
  90. package/dist/setup-wizard.d.ts +34 -0
  91. package/dist/setup-wizard.d.ts.map +1 -0
  92. package/dist/setup-wizard.js +251 -0
  93. package/dist/setup-wizard.js.map +1 -0
  94. package/dist/testing.d.ts +6 -0
  95. package/dist/testing.d.ts.map +1 -0
  96. package/dist/testing.js +24 -0
  97. package/dist/testing.js.map +1 -0
  98. package/dist/types.d.ts +156 -0
  99. package/dist/types.d.ts.map +1 -0
  100. package/dist/types.js +31 -0
  101. package/dist/types.js.map +1 -0
  102. package/dist/verify.d.ts +38 -0
  103. package/dist/verify.d.ts.map +1 -0
  104. package/dist/verify.js +254 -0
  105. package/dist/verify.js.map +1 -0
  106. package/package.json +52 -0
  107. package/src/templates/PROMPTS.md +6 -0
  108. package/src/templates/SKILL.md +253 -0
  109. package/src/templates/SUMMARY.md +29 -0
  110. package/src/templates/agents/agents-md/section.md +11 -0
  111. package/src/templates/agents/claude/SKILL.md +8 -0
  112. package/src/templates/agents/claude/settings.fragment.json +16 -0
  113. package/src/templates/agents/claude/testing-SKILL.md +9 -0
  114. package/src/templates/agents/cursor/SKILL.md +9 -0
  115. package/src/templates/agents/cursor/hooks.json +23 -0
  116. package/src/templates/agents/cursor/testing-SKILL.md +9 -0
  117. package/src/templates/agents/windsurf/SKILL.md +8 -0
  118. package/src/templates/agents/windsurf/hooks.json +10 -0
  119. package/src/templates/agents/windsurf/testing-SKILL.md +9 -0
  120. package/src/templates/hooks/after-push.sh +17 -0
  121. package/src/templates/hooks/block-commit.sh +29 -0
  122. package/src/templates/hooks/block-push.sh +29 -0
  123. package/src/templates/hooks/claude-pre-tool.sh +59 -0
  124. package/src/templates/hooks/git-pre-commit.sh +35 -0
  125. package/src/templates/hooks/git-pre-push.sh +53 -0
  126. package/src/templates/hooks/statusline.sh +3 -0
  127. package/src/templates/hooks/windsurf-pre-run.sh +39 -0
  128. package/src/templates/hooks.json +23 -0
  129. package/src/templates/testing-SKILL.md +33 -0
  130. package/src/templates/testme.config.json +32 -0
@@ -0,0 +1,83 @@
1
+ import { chmodSync, copyFileSync, existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { TEMPLATES_DIR } from "../paths.js";
4
+ export function copyIfMissing(source, target) {
5
+ if (existsSync(target)) {
6
+ return false;
7
+ }
8
+ mkdirSync(path.dirname(target), { recursive: true });
9
+ copyFileSync(source, target);
10
+ return true;
11
+ }
12
+ export function copyAlways(source, target) {
13
+ mkdirSync(path.dirname(target), { recursive: true });
14
+ copyFileSync(source, target);
15
+ }
16
+ export function agentTemplatesDir(agent) {
17
+ return path.join(TEMPLATES_DIR, "agents", agent);
18
+ }
19
+ export function mergeJsonArraysByKey(existing, incoming, key) {
20
+ const merged = [...existing];
21
+ const seen = new Set(existing.map((item) => String(item[key] ?? "")));
22
+ for (const item of incoming) {
23
+ const value = String(item[key] ?? "");
24
+ if (!seen.has(value)) {
25
+ merged.push(item);
26
+ seen.add(value);
27
+ }
28
+ }
29
+ return merged;
30
+ }
31
+ export function writeJson(filePath, value) {
32
+ mkdirSync(path.dirname(filePath), { recursive: true });
33
+ writeFileSync(filePath, `${JSON.stringify(value, null, 2)}\n`, "utf8");
34
+ }
35
+ export function readJson(filePath) {
36
+ if (!existsSync(filePath)) {
37
+ return null;
38
+ }
39
+ return JSON.parse(readFileSync(filePath, "utf8"));
40
+ }
41
+ export function copySkill(agent, cwd, created) {
42
+ const testmeSource = path.join(agentTemplatesDir(agent), "SKILL.md");
43
+ const testmeFallback = path.join(TEMPLATES_DIR, "SKILL.md");
44
+ const testmeSkillSource = existsSync(testmeSource) ? testmeSource : testmeFallback;
45
+ const testingSource = path.join(agentTemplatesDir(agent), "testing-SKILL.md");
46
+ const testingFallback = path.join(TEMPLATES_DIR, "testing-SKILL.md");
47
+ const testingSkillSource = existsSync(testingSource) ? testingSource : testingFallback;
48
+ const skillTargets = {
49
+ cursor: {
50
+ testme: path.join(cwd, ".cursor", "skills", "testme", "SKILL.md"),
51
+ testing: path.join(cwd, ".cursor", "skills", "testing", "SKILL.md"),
52
+ },
53
+ claude: {
54
+ testme: path.join(cwd, ".claude", "skills", "testme", "SKILL.md"),
55
+ testing: path.join(cwd, ".claude", "skills", "testing", "SKILL.md"),
56
+ },
57
+ windsurf: {
58
+ testme: path.join(cwd, ".windsurf", "skills", "testme", "SKILL.md"),
59
+ testing: path.join(cwd, ".windsurf", "skills", "testing", "SKILL.md"),
60
+ },
61
+ };
62
+ const targets = skillTargets[agent];
63
+ if (!targets) {
64
+ return;
65
+ }
66
+ copyAlways(testmeSkillSource, targets.testme);
67
+ created.push(targets.testme.replace(`${cwd}/`, ""));
68
+ if (existsSync(testingSkillSource)) {
69
+ copyAlways(testingSkillSource, targets.testing);
70
+ created.push(targets.testing.replace(`${cwd}/`, ""));
71
+ }
72
+ }
73
+ export function chmodScripts(dir) {
74
+ if (!existsSync(dir)) {
75
+ return;
76
+ }
77
+ for (const file of readdirSync(dir)) {
78
+ if (file.endsWith(".sh")) {
79
+ chmodSync(path.join(dir, file), 0o755);
80
+ }
81
+ }
82
+ }
83
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/agents/shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export type AgentId = "cursor" | "claude" | "windsurf" | "agents-md";
2
+ export declare const ALL_AGENT_IDS: AgentId[];
3
+ export interface AgentSignal {
4
+ id: AgentId;
5
+ confidence: "high" | "medium";
6
+ reason: string;
7
+ }
8
+ export interface AgentDetectionResult {
9
+ signals: AgentSignal[];
10
+ suggested: AgentId[];
11
+ ambiguous: boolean;
12
+ }
13
+ export declare const AGENT_LABELS: Record<AgentId, string>;
14
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAC;AAErE,eAAO,MAAM,aAAa,EAAE,OAAO,EAAkD,CAAC;AAEtF,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAKhD,CAAC"}
@@ -0,0 +1,8 @@
1
+ export const ALL_AGENT_IDS = ["cursor", "claude", "windsurf", "agents-md"];
2
+ export const AGENT_LABELS = {
3
+ cursor: "Cursor",
4
+ claude: "Claude Code",
5
+ windsurf: "Windsurf",
6
+ "agents-md": "AGENTS.md (portable fallback)",
7
+ };
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;AActF,MAAM,CAAC,MAAM,YAAY,GAA4B;IACnD,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,aAAa;IACrB,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,+BAA+B;CAC7C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function installWindsurf(cwd: string, created: string[]): void;
2
+ //# sourceMappingURL=windsurf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windsurf.d.ts","sourceRoot":"","sources":["../../src/agents/windsurf.ts"],"names":[],"mappings":"AAOA,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAgCpE"}
@@ -0,0 +1,27 @@
1
+ import path from "node:path";
2
+ import { agentTemplatesDir, copySkill, mergeJsonArraysByKey, readJson, writeJson } from "./shared.js";
3
+ export function installWindsurf(cwd, created) {
4
+ const templatePath = path.join(agentTemplatesDir("windsurf"), "hooks.json");
5
+ const targetPath = path.join(cwd, ".windsurf", "hooks.json");
6
+ const template = readJson(templatePath);
7
+ if (!template) {
8
+ throw new Error("Missing Windsurf hooks template.");
9
+ }
10
+ const existing = readJson(targetPath);
11
+ if (!existing) {
12
+ writeJson(targetPath, template);
13
+ created.push(".windsurf/hooks.json");
14
+ }
15
+ else {
16
+ const merged = {
17
+ hooks: { ...existing.hooks },
18
+ };
19
+ for (const [event, hooks] of Object.entries(template.hooks)) {
20
+ merged.hooks[event] = mergeJsonArraysByKey(merged.hooks[event] ?? [], hooks, "command");
21
+ }
22
+ writeJson(targetPath, merged);
23
+ created.push(".windsurf/hooks.json (merged)");
24
+ }
25
+ copySkill("windsurf", cwd, created);
26
+ }
27
+ //# sourceMappingURL=windsurf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windsurf.js","sourceRoot":"","sources":["../../src/agents/windsurf.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,oBAAoB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAMtG,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,OAAiB;IAC5D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC,CAAC;IAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAsB,YAAY,CAAC,CAAC;IAE7D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAsB,UAAU,CAAC,CAAC;IAE3D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAwB;YAClC,KAAK,EAAE,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE;SAC7B,CAAC;QAEF,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5D,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,oBAAoB,CACxC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,EACzB,KAAK,EACL,SAAS,CACV,CAAC;QACJ,CAAC;QAED,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAChD,CAAC;IAED,SAAS,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function bootstrapSummary(cwd: string): string;
2
+ //# sourceMappingURL=bootstrap-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-summary.d.ts","sourceRoot":"","sources":["../src/bootstrap-summary.ts"],"names":[],"mappings":"AA6PA,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAoCpD"}
@@ -0,0 +1,262 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { analyzeDiff } from "./diff.js";
4
+ import { detectProject } from "./detect.js";
5
+ import { listTopLevelDirs } from "./repo-stats.js";
6
+ const GENERATED_MARKER = "<!-- Generated by comp-gate init; edit for accuracy -->";
7
+ const DIR_ROLES = {
8
+ src: "application source",
9
+ lib: "library source",
10
+ apps: "applications",
11
+ packages: "shared packages",
12
+ services: "services",
13
+ tests: "test suites",
14
+ test: "tests",
15
+ docs: "documentation",
16
+ scripts: "utility scripts",
17
+ cmd: "command-line entrypoints",
18
+ internal: "internal packages",
19
+ api: "API layer",
20
+ web: "web frontend",
21
+ server: "server code",
22
+ infra: "infrastructure",
23
+ terraform: "infrastructure as code",
24
+ migrations: "database migrations",
25
+ models: "data models",
26
+ components: "UI components",
27
+ };
28
+ function readText(filePath) {
29
+ if (!existsSync(filePath)) {
30
+ return "";
31
+ }
32
+ return readFileSync(filePath, "utf8");
33
+ }
34
+ function firstParagraph(text, maxLen = 200) {
35
+ const lines = text.split("\n");
36
+ const parts = [];
37
+ for (const line of lines) {
38
+ const trimmed = line.trim();
39
+ if (!trimmed || trimmed.startsWith("#")) {
40
+ if (parts.length > 0) {
41
+ break;
42
+ }
43
+ continue;
44
+ }
45
+ parts.push(trimmed);
46
+ if (parts.join(" ").length >= maxLen) {
47
+ break;
48
+ }
49
+ }
50
+ if (parts.length === 0) {
51
+ return null;
52
+ }
53
+ const paragraph = parts.join(" ");
54
+ return paragraph.length > maxLen ? `${paragraph.slice(0, maxLen - 3)}...` : paragraph;
55
+ }
56
+ function inferStack(cwd) {
57
+ const stack = {
58
+ language: "Unknown",
59
+ framework: "Unknown",
60
+ runtime: "Unknown",
61
+ };
62
+ const packageJsonPath = path.join(cwd, "package.json");
63
+ if (existsSync(packageJsonPath)) {
64
+ try {
65
+ const pkg = JSON.parse(readText(packageJsonPath));
66
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
67
+ stack.language = "TypeScript/JavaScript";
68
+ stack.runtime = pkg.engines?.node ? `Node.js ${pkg.engines.node}` : "Node.js";
69
+ if (deps.react) {
70
+ stack.framework = "React";
71
+ }
72
+ else if (deps.vue) {
73
+ stack.framework = "Vue";
74
+ }
75
+ else if (deps.svelte) {
76
+ stack.framework = "Svelte";
77
+ }
78
+ else if (deps.next) {
79
+ stack.framework = "Next.js";
80
+ }
81
+ else if (deps.express) {
82
+ stack.framework = "Express";
83
+ }
84
+ else if (deps.fastify) {
85
+ stack.framework = "Fastify";
86
+ }
87
+ else if (deps.nestjs || deps["@nestjs/core"]) {
88
+ stack.framework = "NestJS";
89
+ }
90
+ else if (pkg.name) {
91
+ stack.framework = pkg.name;
92
+ }
93
+ }
94
+ catch {
95
+ stack.language = "JavaScript";
96
+ }
97
+ return stack;
98
+ }
99
+ if (existsSync(path.join(cwd, "pyproject.toml"))) {
100
+ stack.language = "Python";
101
+ const pyproject = readText(path.join(cwd, "pyproject.toml"));
102
+ if (/fastapi/i.test(pyproject)) {
103
+ stack.framework = "FastAPI";
104
+ }
105
+ else if (/django/i.test(pyproject)) {
106
+ stack.framework = "Django";
107
+ }
108
+ else if (/flask/i.test(pyproject)) {
109
+ stack.framework = "Flask";
110
+ }
111
+ return stack;
112
+ }
113
+ if (existsSync(path.join(cwd, "go.mod"))) {
114
+ stack.language = "Go";
115
+ const goMod = readText(path.join(cwd, "go.mod"));
116
+ if (/gin\b/i.test(goMod)) {
117
+ stack.framework = "Gin";
118
+ }
119
+ else if (/echo\b/i.test(goMod)) {
120
+ stack.framework = "Echo";
121
+ }
122
+ return stack;
123
+ }
124
+ if (existsSync(path.join(cwd, "Cargo.toml"))) {
125
+ stack.language = "Rust";
126
+ return stack;
127
+ }
128
+ return stack;
129
+ }
130
+ function architectureLines(cwd) {
131
+ const dirs = listTopLevelDirs(cwd);
132
+ if (dirs.length === 0) {
133
+ return ["- Add top-level directories and their roles here."];
134
+ }
135
+ return dirs.map((dir) => {
136
+ const role = DIR_ROLES[dir.toLowerCase()] ?? "project directory";
137
+ return `- \`${dir}/\` — ${role}`;
138
+ });
139
+ }
140
+ function conventionsLine(cwd) {
141
+ const contributing = readText(path.join(cwd, "CONTRIBUTING.md"));
142
+ const readme = readText(path.join(cwd, "README.md"));
143
+ const snippet = firstParagraph(contributing) ?? firstParagraph(readme);
144
+ if (snippet) {
145
+ return snippet;
146
+ }
147
+ return "Follow existing naming and import patterns in each directory.";
148
+ }
149
+ function runtimeLines(cwd) {
150
+ const packageJsonPath = path.join(cwd, "package.json");
151
+ if (existsSync(packageJsonPath)) {
152
+ try {
153
+ const pkg = JSON.parse(readText(packageJsonPath));
154
+ const scripts = pkg.scripts ?? {};
155
+ const lines = [];
156
+ const runLocal = scripts.dev ?? scripts.start ?? scripts.serve;
157
+ if (runLocal) {
158
+ lines.push(`- How to run locally: \`npm run ${scripts.dev ? "dev" : scripts.start ? "start" : "serve"}\``);
159
+ }
160
+ else {
161
+ lines.push("- How to run locally:");
162
+ }
163
+ if (scripts.test) {
164
+ lines.push("- How to run tests: `npm test`");
165
+ }
166
+ else {
167
+ lines.push("- How to run tests:");
168
+ }
169
+ if (scripts.build) {
170
+ lines.push(`- Build: \`npm run build\``);
171
+ }
172
+ return lines;
173
+ }
174
+ catch {
175
+ // fall through
176
+ }
177
+ }
178
+ const makefile = readText(path.join(cwd, "Makefile"));
179
+ if (makefile) {
180
+ const lines = [];
181
+ if (/^test:/m.test(makefile)) {
182
+ lines.push("- How to run tests: `make test`");
183
+ }
184
+ else {
185
+ lines.push("- How to run tests:");
186
+ }
187
+ if (/^(run|dev|start):/m.test(makefile)) {
188
+ lines.push("- How to run locally: `make run` (or `make dev`)");
189
+ }
190
+ else {
191
+ lines.push("- How to run locally:");
192
+ }
193
+ return lines;
194
+ }
195
+ return ["- How to run locally:", "- How to run tests:"];
196
+ }
197
+ const CATEGORY_LABELS = {
198
+ frontend: "frontend",
199
+ backend: "backend",
200
+ machineLearning: "machine learning",
201
+ cybersecurity: "cybersecurity",
202
+ devops: "devops",
203
+ mobile: "mobile",
204
+ dataEngineering: "data engineering",
205
+ database: "database",
206
+ testing: "testing",
207
+ };
208
+ function domainLines(cwd) {
209
+ const analysis = analyzeDiff(cwd);
210
+ const detection = detectProject(cwd, analysis);
211
+ const enabled = Object.entries(detection.suggestedCategories)
212
+ .filter(([, suggestion]) => suggestion.enabled && suggestion.confidence >= 0.8)
213
+ .map(([key]) => CATEGORY_LABELS[key] ?? key)
214
+ .filter(Boolean);
215
+ const primary = enabled[0] ?? "general application development";
216
+ const focus = enabled.slice(1, 4);
217
+ const lines = [`- Primary: ${primary}`];
218
+ if (focus.length > 0) {
219
+ lines.push(`- Focus areas: ${focus.join(", ")}`);
220
+ }
221
+ else {
222
+ lines.push("- Focus areas:");
223
+ }
224
+ return lines;
225
+ }
226
+ export function bootstrapSummary(cwd) {
227
+ const stack = inferStack(cwd);
228
+ const arch = architectureLines(cwd);
229
+ const conventions = conventionsLine(cwd);
230
+ const runtime = runtimeLines(cwd);
231
+ const domain = domainLines(cwd);
232
+ return `${GENERATED_MARKER}
233
+
234
+ # Project Summary
235
+
236
+ Keep this file updated when architecture, stack, or major conventions change — not on every commit.
237
+
238
+ ## Stack
239
+
240
+ - Language: ${stack.language}
241
+ - Framework: ${stack.framework}
242
+ - Runtime: ${stack.runtime}
243
+
244
+ ## Architecture
245
+
246
+ ${arch.join("\n")}
247
+
248
+ ## Conventions
249
+
250
+ - ${conventions}
251
+ - Prefer small, focused modules over large catch-all files.
252
+
253
+ ## Runtime Notes
254
+
255
+ ${runtime.join("\n")}
256
+
257
+ ## Domain
258
+
259
+ ${domain.join("\n")}
260
+ `;
261
+ }
262
+ //# sourceMappingURL=bootstrap-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-summary.js","sourceRoot":"","sources":["../src/bootstrap-summary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { loadPromptsSections } from "./prompts.js";
2
+ import type { CategoryKey, DiffAnalysis, FileChange, QuestionCandidate } from "./types.js";
3
+ export interface CategoryContext {
4
+ analysis: DiffAnalysis;
5
+ files: FileChange[];
6
+ summary: string;
7
+ promptsSections: ReturnType<typeof loadPromptsSections>;
8
+ rawDiff: string;
9
+ }
10
+ export declare function relevantFiles(files: FileChange[]): FileChange[];
11
+ export declare function buildCandidates(category: CategoryKey, ctx: CategoryContext): QuestionCandidate[];
12
+ export declare function allocateQuestions(candidates: QuestionCandidate[], maxQuestions: number, minQuestions: number): QuestionCandidate[];
13
+ //# sourceMappingURL=categories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"categories.d.ts","sourceRoot":"","sources":["../src/categories.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EAIpB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,UAAU,EACV,iBAAiB,EAElB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;IACxD,OAAO,EAAE,MAAM,CAAC;CACjB;AAsDD,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAG/D;AAuDD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,WAAW,EACrB,GAAG,EAAE,eAAe,GACnB,iBAAiB,EAAE,CA4PrB;AAED,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,iBAAiB,EAAE,EAC/B,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,iBAAiB,EAAE,CA6DrB"}