@kiwidata/grimoire 0.1.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/plugin.json +8 -0
- package/AGENTS.md +217 -0
- package/README.md +748 -0
- package/bin/grimoire.js +2 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +42 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/commands/archive.d.ts +3 -0
- package/dist/commands/archive.d.ts.map +1 -0
- package/dist/commands/archive.js +22 -0
- package/dist/commands/archive.js.map +1 -0
- package/dist/commands/branch-check.d.ts +3 -0
- package/dist/commands/branch-check.d.ts.map +1 -0
- package/dist/commands/branch-check.js +16 -0
- package/dist/commands/branch-check.js.map +1 -0
- package/dist/commands/check.d.ts +3 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +22 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/ci.d.ts +3 -0
- package/dist/commands/ci.d.ts.map +1 -0
- package/dist/commands/ci.js +18 -0
- package/dist/commands/ci.js.map +1 -0
- package/dist/commands/diff.d.ts +3 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +10 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/docs.d.ts +3 -0
- package/dist/commands/docs.d.ts.map +1 -0
- package/dist/commands/docs.js +11 -0
- package/dist/commands/docs.js.map +1 -0
- package/dist/commands/health.d.ts +3 -0
- package/dist/commands/health.d.ts.map +1 -0
- package/dist/commands/health.js +13 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +21 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +22 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/log.d.ts +3 -0
- package/dist/commands/log.d.ts.map +1 -0
- package/dist/commands/log.js +15 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/map.d.ts +3 -0
- package/dist/commands/map.d.ts.map +1 -0
- package/dist/commands/map.js +17 -0
- package/dist/commands/map.js.map +1 -0
- package/dist/commands/pr.d.ts +3 -0
- package/dist/commands/pr.d.ts.map +1 -0
- package/dist/commands/pr.js +17 -0
- package/dist/commands/pr.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +12 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/test-quality.d.ts +3 -0
- package/dist/commands/test-quality.d.ts.map +1 -0
- package/dist/commands/test-quality.js +37 -0
- package/dist/commands/test-quality.js.map +1 -0
- package/dist/commands/trace.d.ts +3 -0
- package/dist/commands/trace.d.ts.map +1 -0
- package/dist/commands/trace.js +12 -0
- package/dist/commands/trace.js.map +1 -0
- package/dist/commands/update.d.ts +3 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +22 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/validate.d.ts +3 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +17 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/core/archive.d.ts +9 -0
- package/dist/core/archive.d.ts.map +1 -0
- package/dist/core/archive.js +92 -0
- package/dist/core/archive.js.map +1 -0
- package/dist/core/branch-check.d.ts +27 -0
- package/dist/core/branch-check.d.ts.map +1 -0
- package/dist/core/branch-check.js +205 -0
- package/dist/core/branch-check.js.map +1 -0
- package/dist/core/check.d.ts +24 -0
- package/dist/core/check.d.ts.map +1 -0
- package/dist/core/check.js +372 -0
- package/dist/core/check.js.map +1 -0
- package/dist/core/ci.d.ts +24 -0
- package/dist/core/ci.d.ts.map +1 -0
- package/dist/core/ci.js +162 -0
- package/dist/core/ci.js.map +1 -0
- package/dist/core/detect.d.ts +10 -0
- package/dist/core/detect.d.ts.map +1 -0
- package/dist/core/detect.js +368 -0
- package/dist/core/detect.js.map +1 -0
- package/dist/core/diff.d.ts +29 -0
- package/dist/core/diff.d.ts.map +1 -0
- package/dist/core/diff.js +197 -0
- package/dist/core/diff.js.map +1 -0
- package/dist/core/doc-style.d.ts +16 -0
- package/dist/core/doc-style.d.ts.map +1 -0
- package/dist/core/doc-style.js +192 -0
- package/dist/core/doc-style.js.map +1 -0
- package/dist/core/docs.d.ts +6 -0
- package/dist/core/docs.d.ts.map +1 -0
- package/dist/core/docs.js +478 -0
- package/dist/core/docs.js.map +1 -0
- package/dist/core/health.d.ts +7 -0
- package/dist/core/health.d.ts.map +1 -0
- package/dist/core/health.js +489 -0
- package/dist/core/health.js.map +1 -0
- package/dist/core/hooks.d.ts +5 -0
- package/dist/core/hooks.d.ts.map +1 -0
- package/dist/core/hooks.js +168 -0
- package/dist/core/hooks.js.map +1 -0
- package/dist/core/init.d.ts +9 -0
- package/dist/core/init.d.ts.map +1 -0
- package/dist/core/init.js +563 -0
- package/dist/core/init.js.map +1 -0
- package/dist/core/list.d.ts +4 -0
- package/dist/core/list.d.ts.map +1 -0
- package/dist/core/list.js +170 -0
- package/dist/core/list.js.map +1 -0
- package/dist/core/log.d.ts +8 -0
- package/dist/core/log.d.ts.map +1 -0
- package/dist/core/log.js +150 -0
- package/dist/core/log.js.map +1 -0
- package/dist/core/map.d.ts +9 -0
- package/dist/core/map.d.ts.map +1 -0
- package/dist/core/map.js +302 -0
- package/dist/core/map.js.map +1 -0
- package/dist/core/pr.d.ts +9 -0
- package/dist/core/pr.d.ts.map +1 -0
- package/dist/core/pr.js +273 -0
- package/dist/core/pr.js.map +1 -0
- package/dist/core/shared-setup.d.ts +52 -0
- package/dist/core/shared-setup.d.ts.map +1 -0
- package/dist/core/shared-setup.js +221 -0
- package/dist/core/shared-setup.js.map +1 -0
- package/dist/core/status.d.ts +6 -0
- package/dist/core/status.d.ts.map +1 -0
- package/dist/core/status.js +114 -0
- package/dist/core/status.js.map +1 -0
- package/dist/core/test-quality.d.ts +33 -0
- package/dist/core/test-quality.d.ts.map +1 -0
- package/dist/core/test-quality.js +378 -0
- package/dist/core/test-quality.js.map +1 -0
- package/dist/core/trace.d.ts +6 -0
- package/dist/core/trace.d.ts.map +1 -0
- package/dist/core/trace.js +211 -0
- package/dist/core/trace.js.map +1 -0
- package/dist/core/update.d.ts +10 -0
- package/dist/core/update.d.ts.map +1 -0
- package/dist/core/update.js +149 -0
- package/dist/core/update.js.map +1 -0
- package/dist/core/validate.d.ts +20 -0
- package/dist/core/validate.d.ts.map +1 -0
- package/dist/core/validate.js +275 -0
- package/dist/core/validate.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/config.d.ts +61 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +172 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/fs.d.ts +17 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +38 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/paths.d.ts +10 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +35 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/spawn.d.ts +5 -0
- package/dist/utils/spawn.d.ts.map +1 -0
- package/dist/utils/spawn.js +34 -0
- package/dist/utils/spawn.js.map +1 -0
- package/package.json +68 -0
- package/skills/grimoire-apply/SKILL.md +274 -0
- package/skills/grimoire-audit/SKILL.md +129 -0
- package/skills/grimoire-branch-guard/SKILL.md +111 -0
- package/skills/grimoire-bug/SKILL.md +160 -0
- package/skills/grimoire-bug-explore/SKILL.md +242 -0
- package/skills/grimoire-bug-report/SKILL.md +237 -0
- package/skills/grimoire-bug-session/SKILL.md +222 -0
- package/skills/grimoire-bug-triage/SKILL.md +274 -0
- package/skills/grimoire-commit/SKILL.md +150 -0
- package/skills/grimoire-discover/SKILL.md +297 -0
- package/skills/grimoire-draft/SKILL.md +202 -0
- package/skills/grimoire-plan/SKILL.md +329 -0
- package/skills/grimoire-pr/SKILL.md +134 -0
- package/skills/grimoire-pr-review/SKILL.md +240 -0
- package/skills/grimoire-refactor/SKILL.md +251 -0
- package/skills/grimoire-remove/SKILL.md +112 -0
- package/skills/grimoire-review/SKILL.md +247 -0
- package/skills/grimoire-verify/SKILL.md +223 -0
- package/skills/references/bug-classification.md +154 -0
- package/skills/references/build-vs-buy.md +77 -0
- package/skills/references/elicitation-personas.md +118 -0
- package/skills/references/refactor-register-format.md +88 -0
- package/skills/references/refactor-scan-categories.md +102 -0
- package/skills/references/schema-format.md +68 -0
- package/skills/references/security-compliance.md +110 -0
- package/skills/references/testing-contracts.md +93 -0
- package/templates/context.yml +110 -0
- package/templates/debt-exceptions.yml +61 -0
- package/templates/decision.md +50 -0
- package/templates/dupignore +93 -0
- package/templates/example.feature +24 -0
- package/templates/manifest.md +29 -0
- package/templates/mapignore +58 -0
- package/templates/mapkeys +65 -0
|
@@ -0,0 +1,563 @@
|
|
|
1
|
+
import { mkdir, writeFile, copyFile } from "node:fs/promises";
|
|
2
|
+
import { join, dirname } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { stringify as yamlStringify } from "yaml";
|
|
5
|
+
import chalk from "chalk";
|
|
6
|
+
import { detectTools } from "./detect.js";
|
|
7
|
+
import { setupHooks } from "./hooks.js";
|
|
8
|
+
import { fileExists } from "../utils/fs.js";
|
|
9
|
+
import { upsertAgentsFile, installSkillFiles, SKILL_NAMES, GRIMOIRE_DIRS, TEMPLATE_FILES, generateAgentFiles, detectAgentFiles, } from "./shared-setup.js";
|
|
10
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
11
|
+
const PACKAGE_ROOT = join(__dirname, "..", "..");
|
|
12
|
+
const CATEGORY_LABELS = {
|
|
13
|
+
language: "Language",
|
|
14
|
+
package_manager: "Pkg manager",
|
|
15
|
+
lint: "Linter",
|
|
16
|
+
format: "Formatter",
|
|
17
|
+
unit_test: "Unit tests",
|
|
18
|
+
bdd_test: "BDD tests",
|
|
19
|
+
complexity: "Complexity",
|
|
20
|
+
security: "Security",
|
|
21
|
+
dep_audit: "Dep audit",
|
|
22
|
+
secrets: "Secrets",
|
|
23
|
+
dead_code: "Dead code",
|
|
24
|
+
doc_tool: "Doc tool",
|
|
25
|
+
comment_style: "Comment style",
|
|
26
|
+
};
|
|
27
|
+
const CATEGORY_ORDER = [
|
|
28
|
+
"language",
|
|
29
|
+
"package_manager",
|
|
30
|
+
"lint",
|
|
31
|
+
"format",
|
|
32
|
+
"unit_test",
|
|
33
|
+
"bdd_test",
|
|
34
|
+
"complexity",
|
|
35
|
+
"security",
|
|
36
|
+
"dep_audit",
|
|
37
|
+
"secrets",
|
|
38
|
+
"dead_code",
|
|
39
|
+
"doc_tool",
|
|
40
|
+
"comment_style",
|
|
41
|
+
];
|
|
42
|
+
export async function initProject(projectPath, options) {
|
|
43
|
+
const root = join(process.cwd(), projectPath);
|
|
44
|
+
console.log(chalk.bold("Initializing grimoire...\n"));
|
|
45
|
+
// Create directory structure
|
|
46
|
+
for (const dir of GRIMOIRE_DIRS) {
|
|
47
|
+
const fullPath = join(root, dir);
|
|
48
|
+
await mkdir(fullPath, { recursive: true });
|
|
49
|
+
console.log(` ${chalk.green("created")} ${dir}/`);
|
|
50
|
+
}
|
|
51
|
+
// Copy template files
|
|
52
|
+
for (const [src, dest] of TEMPLATE_FILES) {
|
|
53
|
+
const srcPath = join(PACKAGE_ROOT, "templates", src);
|
|
54
|
+
const destPath = join(root, dest);
|
|
55
|
+
if (!(await fileExists(destPath))) {
|
|
56
|
+
await copyFile(srcPath, destPath);
|
|
57
|
+
console.log(` ${chalk.green("created")} ${dest}`);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
console.log(` ${chalk.yellow("exists")} ${dest}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Generate config.yaml with optional tool detection
|
|
64
|
+
const configPath = join(root, ".grimoire", "config.yaml");
|
|
65
|
+
let cavemanLevel = "lite";
|
|
66
|
+
let configAgents = [];
|
|
67
|
+
if (!(await fileExists(configPath))) {
|
|
68
|
+
const config = options.noDetect
|
|
69
|
+
? buildMinimalConfig()
|
|
70
|
+
: await buildDetectedConfig(root);
|
|
71
|
+
cavemanLevel = config.project.caveman ?? "lite";
|
|
72
|
+
configAgents = config.project.agents ?? [];
|
|
73
|
+
await writeFile(configPath, yamlStringify(config));
|
|
74
|
+
console.log(` ${chalk.green("created")} .grimoire/config.yaml`);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
console.log(` ${chalk.yellow("exists")} .grimoire/config.yaml`);
|
|
78
|
+
// Read existing config to get caveman level + agents
|
|
79
|
+
const { loadConfig } = await import("../utils/config.js");
|
|
80
|
+
const existing = await loadConfig(root);
|
|
81
|
+
cavemanLevel = existing.project.caveman ?? "none";
|
|
82
|
+
configAgents = existing.project.agents ?? [];
|
|
83
|
+
}
|
|
84
|
+
// Merge agents from config + CLI flag (--agent). De-dup.
|
|
85
|
+
const allAgents = Array.from(new Set([...configAgents, ...options.agents]));
|
|
86
|
+
const SKILL_SUPPORTED = ["claude", "opencode", "codex"];
|
|
87
|
+
const INSTRUCTION_SUPPORTED = ["cursor", "copilot"];
|
|
88
|
+
const skillAgents = allAgents.filter((a) => SKILL_SUPPORTED.includes(a));
|
|
89
|
+
const instructionAgents = allAgents.filter((a) => INSTRUCTION_SUPPORTED.includes(a));
|
|
90
|
+
for (const a of allAgents) {
|
|
91
|
+
if (!SKILL_SUPPORTED.includes(a) && !INSTRUCTION_SUPPORTED.includes(a)) {
|
|
92
|
+
console.log(` ${chalk.yellow("unknown")} agent type: ${a} (supported: ${[...SKILL_SUPPORTED, ...INSTRUCTION_SUPPORTED].join(", ")})`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Generate AGENTS.md (or append grimoire section)
|
|
96
|
+
if (!options.skipAgents) {
|
|
97
|
+
await setupAgentsFile(root, cavemanLevel);
|
|
98
|
+
}
|
|
99
|
+
// Install skills to each selected agent's skill directory
|
|
100
|
+
if (!options.skipSkills) {
|
|
101
|
+
const targets = skillAgents.length > 0 ? skillAgents : ["claude"];
|
|
102
|
+
await installSkills(root, targets);
|
|
103
|
+
}
|
|
104
|
+
// Generate agent-specific instruction files (cursor, copilot)
|
|
105
|
+
if (instructionAgents.length > 0) {
|
|
106
|
+
await generateAgentFiles(root, PACKAGE_ROOT, instructionAgents, "created");
|
|
107
|
+
}
|
|
108
|
+
// Set up hooks (Claude Code + git)
|
|
109
|
+
if (!options.skipAgents) {
|
|
110
|
+
await setupHooks(root);
|
|
111
|
+
}
|
|
112
|
+
console.log(`\n${chalk.bold.green("Done!")} Grimoire initialized.\n`);
|
|
113
|
+
console.log("Directory structure:");
|
|
114
|
+
console.log(" features/ Gherkin feature files (behavioral specs)");
|
|
115
|
+
console.log(" .grimoire/decisions/ MADR decision records (architectural specs)");
|
|
116
|
+
console.log(" .grimoire/docs/ Project docs, data schema, and context");
|
|
117
|
+
console.log(" .grimoire/changes/ Changes in progress");
|
|
118
|
+
console.log(" .grimoire/archive/ Completed changes\n");
|
|
119
|
+
console.log("Next steps:");
|
|
120
|
+
console.log(" Edit .grimoire/docs/context.yml to describe your deployment,");
|
|
121
|
+
console.log(" related services, and infrastructure.\n");
|
|
122
|
+
}
|
|
123
|
+
function buildMinimalConfig() {
|
|
124
|
+
return {
|
|
125
|
+
version: 1,
|
|
126
|
+
project: {
|
|
127
|
+
commit_style: "conventional",
|
|
128
|
+
},
|
|
129
|
+
features_dir: "features",
|
|
130
|
+
decisions_dir: ".grimoire/decisions",
|
|
131
|
+
tools: {},
|
|
132
|
+
checks: [
|
|
133
|
+
"lint",
|
|
134
|
+
"format",
|
|
135
|
+
"duplicates",
|
|
136
|
+
"complexity",
|
|
137
|
+
"dead_code",
|
|
138
|
+
"unit_test",
|
|
139
|
+
"bdd_test",
|
|
140
|
+
"security",
|
|
141
|
+
"dep_audit",
|
|
142
|
+
"secrets",
|
|
143
|
+
"best_practices",
|
|
144
|
+
],
|
|
145
|
+
llm: {
|
|
146
|
+
thinking: { command: "claude" },
|
|
147
|
+
coding: { command: "claude" },
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
async function buildDetectedConfig(root) {
|
|
152
|
+
console.log(chalk.bold("\nDetecting project tools...\n"));
|
|
153
|
+
const detections = await detectTools(root);
|
|
154
|
+
const config = buildMinimalConfig();
|
|
155
|
+
if (detections.length === 0) {
|
|
156
|
+
console.log(chalk.dim(" No tools detected. Using minimal config.\n"));
|
|
157
|
+
return await askPreferences(config, root);
|
|
158
|
+
}
|
|
159
|
+
// Group detections by category and pick highest confidence per category
|
|
160
|
+
const byCategory = new Map();
|
|
161
|
+
for (const d of detections) {
|
|
162
|
+
const existing = byCategory.get(d.category);
|
|
163
|
+
if (!existing ||
|
|
164
|
+
confidenceRank(d.confidence) > confidenceRank(existing.confidence)) {
|
|
165
|
+
byCategory.set(d.category, d);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Display detections
|
|
169
|
+
console.log(chalk.bold(" Detected tools:\n"));
|
|
170
|
+
for (const cat of CATEGORY_ORDER) {
|
|
171
|
+
const label = (CATEGORY_LABELS[cat] ?? cat).padEnd(14);
|
|
172
|
+
const d = byCategory.get(cat);
|
|
173
|
+
if (d) {
|
|
174
|
+
console.log(` ${label} ${chalk.cyan(d.name.padEnd(16))} ${chalk.dim(`(${d.signal})`)}`);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
console.log(` ${label} ${chalk.dim("(none detected)")}`);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// Ask for confirmation
|
|
181
|
+
const readline = await import("node:readline/promises");
|
|
182
|
+
const rl = readline.createInterface({
|
|
183
|
+
input: process.stdin,
|
|
184
|
+
output: process.stdout,
|
|
185
|
+
});
|
|
186
|
+
console.log();
|
|
187
|
+
const answer = await rl.question(" Accept detected tools? (Y/n/edit) ");
|
|
188
|
+
if (answer.toLowerCase() === "n") {
|
|
189
|
+
rl.close();
|
|
190
|
+
console.log(chalk.dim(" Skipping tool detection.\n"));
|
|
191
|
+
return await askPreferences(config, root);
|
|
192
|
+
}
|
|
193
|
+
if (answer.toLowerCase() === "edit") {
|
|
194
|
+
await editDetections(rl, byCategory);
|
|
195
|
+
}
|
|
196
|
+
rl.close();
|
|
197
|
+
// Set project-level detections
|
|
198
|
+
const langDetection = byCategory.get("language");
|
|
199
|
+
if (langDetection) {
|
|
200
|
+
config.project.language = langDetection.name;
|
|
201
|
+
}
|
|
202
|
+
const pkgMgrDetection = byCategory.get("package_manager");
|
|
203
|
+
if (pkgMgrDetection) {
|
|
204
|
+
config.project.package_manager = pkgMgrDetection.name;
|
|
205
|
+
}
|
|
206
|
+
const docToolDetection = byCategory.get("doc_tool");
|
|
207
|
+
if (docToolDetection) {
|
|
208
|
+
config.project.doc_tool = docToolDetection.name;
|
|
209
|
+
}
|
|
210
|
+
const commentStyleDetection = byCategory.get("comment_style");
|
|
211
|
+
if (commentStyleDetection) {
|
|
212
|
+
config.project.comment_style = commentStyleDetection.name;
|
|
213
|
+
}
|
|
214
|
+
// Build tools from confirmed detections (skip project-level categories)
|
|
215
|
+
const projectCategories = new Set([
|
|
216
|
+
"language",
|
|
217
|
+
"package_manager",
|
|
218
|
+
"doc_tool",
|
|
219
|
+
"comment_style",
|
|
220
|
+
]);
|
|
221
|
+
for (const [category, detection] of byCategory) {
|
|
222
|
+
if (projectCategories.has(category))
|
|
223
|
+
continue;
|
|
224
|
+
const tool = { name: detection.name };
|
|
225
|
+
if (detection.command)
|
|
226
|
+
tool.command = detection.command;
|
|
227
|
+
if (detection.check_command)
|
|
228
|
+
tool.check_command = detection.check_command;
|
|
229
|
+
config.tools[category] = tool;
|
|
230
|
+
}
|
|
231
|
+
// Add LLM-based steps if no dedicated security tool was detected
|
|
232
|
+
if (!byCategory.has("security")) {
|
|
233
|
+
config.tools.security = {
|
|
234
|
+
name: "llm",
|
|
235
|
+
prompt: "Review these changed files for security vulnerabilities. Tag each finding with OWASP Top 10 category and CWE ID. Check for: SQL injection (CWE-89), XSS (CWE-79), broken auth (CWE-287), insecure crypto (CWE-327), SSRF (CWE-918), path traversal (CWE-22), insecure deserialization (CWE-502), missing access control (CWE-862), CSRF (CWE-352), hardcoded secrets (CWE-798).",
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
// Add LLM-based dep audit if no dedicated tool was detected
|
|
239
|
+
if (!byCategory.has("dep_audit")) {
|
|
240
|
+
config.tools.dep_audit = {
|
|
241
|
+
name: "llm",
|
|
242
|
+
prompt: "Review these changed files for newly added dependencies or imports. Flag potential typosquatting (CWE-1357), packages you cannot verify as real, and packages with known security advisories. Check for misspellings (e.g., 'reqeusts' instead of 'requests').",
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
// Add LLM-based secret scanning if no dedicated tool was detected
|
|
246
|
+
if (!byCategory.has("secrets")) {
|
|
247
|
+
config.tools.secrets = {
|
|
248
|
+
name: "llm",
|
|
249
|
+
prompt: "Review these changed files for hardcoded secrets (CWE-798), API keys, passwords, tokens, private keys, or credentials (CWE-312). Flag any string that looks like a secret value rather than a placeholder or environment variable reference.",
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
// Add LLM-based dead code detection if no dedicated tool was detected
|
|
253
|
+
if (!byCategory.has("dead_code")) {
|
|
254
|
+
config.tools.dead_code = {
|
|
255
|
+
name: "llm",
|
|
256
|
+
prompt: "Review these changed files for dead code: unused functions, unreachable branches, unused imports, unused variables, and exports that are never imported elsewhere. Only flag code that is clearly dead, not code that might be used dynamically.",
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
config.tools.best_practices = {
|
|
260
|
+
name: "llm",
|
|
261
|
+
prompt: "Review these changed files for best practices violations",
|
|
262
|
+
};
|
|
263
|
+
// Add jscpd for duplicates if not already set
|
|
264
|
+
if (!config.tools.duplicates) {
|
|
265
|
+
config.tools.duplicates = {
|
|
266
|
+
name: "jscpd",
|
|
267
|
+
command: "npx jscpd --reporters console",
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
return await askPreferences(config, root);
|
|
271
|
+
}
|
|
272
|
+
async function editDetections(rl, byCategory) {
|
|
273
|
+
console.log(chalk.dim("\n For each tool, press Enter to accept, 'n' to skip, or type a custom name.\n"));
|
|
274
|
+
for (const cat of CATEGORY_ORDER) {
|
|
275
|
+
const label = CATEGORY_LABELS[cat] ?? cat;
|
|
276
|
+
const d = byCategory.get(cat);
|
|
277
|
+
const current = d ? d.name : "none";
|
|
278
|
+
const answer = await rl.question(` ${label} [${current}]: `);
|
|
279
|
+
const trimmed = answer.trim();
|
|
280
|
+
if (trimmed.toLowerCase() === "n") {
|
|
281
|
+
byCategory.delete(cat);
|
|
282
|
+
}
|
|
283
|
+
else if (trimmed && trimmed !== current) {
|
|
284
|
+
// User typed a custom name — create a detection with low confidence
|
|
285
|
+
byCategory.set(cat, {
|
|
286
|
+
category: cat,
|
|
287
|
+
name: trimmed,
|
|
288
|
+
confidence: "low",
|
|
289
|
+
signal: "user input",
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
// else: accept current (no change)
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
async function askPreferences(config, root) {
|
|
296
|
+
const readline = await import("node:readline/promises");
|
|
297
|
+
const rl = readline.createInterface({
|
|
298
|
+
input: process.stdin,
|
|
299
|
+
output: process.stdout,
|
|
300
|
+
});
|
|
301
|
+
console.log(chalk.bold("\n AI agents:\n"));
|
|
302
|
+
console.log(chalk.dim(" Which AI coding tools will use these skills?"));
|
|
303
|
+
console.log(chalk.dim(" Skills install per tool: claude→.claude/skills, opencode→.opencode/skills, codex→.agents/skills."));
|
|
304
|
+
console.log(chalk.dim(" cursor/copilot use AGENTS.md-derived files (no skills).\n"));
|
|
305
|
+
const detectedAgents = await detectAgentFiles(root).catch(() => []);
|
|
306
|
+
const defaultAgents = detectedAgents.length > 0 ? detectedAgents.join(",") : "claude";
|
|
307
|
+
const agentsAnswer = await rl.question(` AI agents (comma-separated: claude/opencode/codex/cursor/copilot) [${defaultAgents}]: `);
|
|
308
|
+
const rawAgents = agentsAnswer.trim() || defaultAgents;
|
|
309
|
+
const agents = rawAgents
|
|
310
|
+
.split(",")
|
|
311
|
+
.map((s) => s.trim().toLowerCase())
|
|
312
|
+
.filter(Boolean);
|
|
313
|
+
config.project.agents = agents;
|
|
314
|
+
console.log(chalk.bold("\n Project preferences:\n"));
|
|
315
|
+
const currentCaveman = config.project.caveman ?? "lite";
|
|
316
|
+
const cavemanAnswer = await rl.question(` Token optimization (caveman)? (none/lite/full/ultra) [${currentCaveman}]: `);
|
|
317
|
+
if (cavemanAnswer.trim()) {
|
|
318
|
+
const level = cavemanAnswer.trim().toLowerCase();
|
|
319
|
+
config.project.caveman = (level === "none" ? "none" : level);
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
config.project.caveman = currentCaveman;
|
|
323
|
+
}
|
|
324
|
+
const commitAnswer = await rl.question(` Commit style? (conventional/angular/custom) [${config.project.commit_style}]: `);
|
|
325
|
+
if (commitAnswer.trim()) {
|
|
326
|
+
config.project.commit_style = commitAnswer.trim();
|
|
327
|
+
}
|
|
328
|
+
const currentDocTool = config.project.doc_tool ?? "none";
|
|
329
|
+
const docToolAnswer = await rl.question(` Doc generator? (sphinx/mkdocs/typedoc/jsdoc/none) [${currentDocTool}]: `);
|
|
330
|
+
if (docToolAnswer.trim()) {
|
|
331
|
+
config.project.doc_tool =
|
|
332
|
+
docToolAnswer.trim() === "none" ? undefined : docToolAnswer.trim();
|
|
333
|
+
}
|
|
334
|
+
const currentCommentStyle = config.project.comment_style ?? "none";
|
|
335
|
+
const commentAnswer = await rl.question(` Comment/docstring style? (google/numpy/sphinx/jsdoc/tsdoc/none) [${currentCommentStyle}]: `);
|
|
336
|
+
if (commentAnswer.trim()) {
|
|
337
|
+
config.project.comment_style =
|
|
338
|
+
commentAnswer.trim() === "none" ? undefined : commentAnswer.trim();
|
|
339
|
+
}
|
|
340
|
+
// Design tool preferences
|
|
341
|
+
console.log(chalk.bold("\n Front-end design:\n"));
|
|
342
|
+
console.log(chalk.dim(" Where do UI/UX designs live? This helps grimoire reference"));
|
|
343
|
+
console.log(chalk.dim(" designs during requirements elicitation.\n"));
|
|
344
|
+
const designToolAnswer = await rl.question(` Design tool? (figma/storybook/sketch/zeplin/none) [none]: `);
|
|
345
|
+
const designTool = designToolAnswer.trim().toLowerCase();
|
|
346
|
+
if (designTool && designTool !== "none") {
|
|
347
|
+
const designPathAnswer = await rl.question(` Local design assets path? (e.g., designs/, docs/wireframes/) [none]: `);
|
|
348
|
+
const designUrlAnswer = await rl.question(` Design project URL? (e.g., Figma project link) [none]: `);
|
|
349
|
+
config.project.design_tool = {
|
|
350
|
+
name: designTool,
|
|
351
|
+
path: designPathAnswer.trim() && designPathAnswer.trim() !== "none"
|
|
352
|
+
? designPathAnswer.trim()
|
|
353
|
+
: undefined,
|
|
354
|
+
url: designUrlAnswer.trim() && designUrlAnswer.trim() !== "none"
|
|
355
|
+
? designUrlAnswer.trim()
|
|
356
|
+
: undefined,
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
// LLM agent preferences
|
|
360
|
+
console.log(chalk.bold("\n AI agent preferences:\n"));
|
|
361
|
+
const currentThinkCmd = config.llm.thinking.command;
|
|
362
|
+
const thinkAnswer = await rl.question(` Thinking agent (planning, review)? (claude/codex/cursor/custom) [${currentThinkCmd}]: `);
|
|
363
|
+
if (thinkAnswer.trim()) {
|
|
364
|
+
config.llm.thinking.command = thinkAnswer.trim();
|
|
365
|
+
}
|
|
366
|
+
const currentThinkModel = config.llm.thinking.model ?? "default";
|
|
367
|
+
const thinkModelAnswer = await rl.question(` Thinking model? (opus/sonnet/o3/auto) [${currentThinkModel}]: `);
|
|
368
|
+
if (thinkModelAnswer.trim() && thinkModelAnswer.trim() !== "default") {
|
|
369
|
+
config.llm.thinking.model =
|
|
370
|
+
thinkModelAnswer.trim() === "auto" ? undefined : thinkModelAnswer.trim();
|
|
371
|
+
}
|
|
372
|
+
const currentCodeCmd = config.llm.coding.command;
|
|
373
|
+
const codeAnswer = await rl.question(` Coding agent (apply, implement)? (claude/codex/cursor/custom) [${currentCodeCmd}]: `);
|
|
374
|
+
if (codeAnswer.trim()) {
|
|
375
|
+
config.llm.coding.command = codeAnswer.trim();
|
|
376
|
+
}
|
|
377
|
+
const currentCodeModel = config.llm.coding.model ?? "default";
|
|
378
|
+
const codeModelAnswer = await rl.question(` Coding model? (sonnet/opus/gpt-4.1/auto) [${currentCodeModel}]: `);
|
|
379
|
+
if (codeModelAnswer.trim() && codeModelAnswer.trim() !== "default") {
|
|
380
|
+
config.llm.coding.model =
|
|
381
|
+
codeModelAnswer.trim() === "auto" ? undefined : codeModelAnswer.trim();
|
|
382
|
+
}
|
|
383
|
+
console.log(chalk.bold("\n Security & compliance:\n"));
|
|
384
|
+
// Compliance frameworks
|
|
385
|
+
console.log(chalk.dim(" Which compliance frameworks apply to this project?"));
|
|
386
|
+
console.log(chalk.dim(" Options: owasp, pci-dss, hipaa, soc2, gdpr, iso27001, or Enter to skip.\n"));
|
|
387
|
+
const complianceAnswer = await rl.question(` Compliance frameworks (comma-separated) [none]: `);
|
|
388
|
+
if (complianceAnswer.trim() && complianceAnswer.trim().toLowerCase() !== "none") {
|
|
389
|
+
config.project.compliance = complianceAnswer
|
|
390
|
+
.split(",")
|
|
391
|
+
.map((s) => s.trim().toLowerCase())
|
|
392
|
+
.filter(Boolean);
|
|
393
|
+
}
|
|
394
|
+
// Dependency audit tool preference
|
|
395
|
+
const currentDepAudit = config.tools.dep_audit?.name ?? "auto";
|
|
396
|
+
const depAuditAnswer = await rl.question(` Dep audit tool? (npm-audit/pip-audit/safety/yarn-audit/pnpm-audit/none/auto) [${currentDepAudit}]: `);
|
|
397
|
+
if (depAuditAnswer.trim() && depAuditAnswer.trim() !== "auto") {
|
|
398
|
+
if (depAuditAnswer.trim() === "none") {
|
|
399
|
+
delete config.tools.dep_audit;
|
|
400
|
+
// Remove from checks
|
|
401
|
+
config.checks = config.checks.filter((c) => c !== "dep_audit");
|
|
402
|
+
}
|
|
403
|
+
else {
|
|
404
|
+
const depAuditCommands = {
|
|
405
|
+
"npm-audit": "npm audit --audit-level=high",
|
|
406
|
+
"pip-audit": "pip-audit",
|
|
407
|
+
safety: "safety check",
|
|
408
|
+
"yarn-audit": "yarn audit --level high",
|
|
409
|
+
"pnpm-audit": "pnpm audit --audit-level=high",
|
|
410
|
+
};
|
|
411
|
+
config.tools.dep_audit = {
|
|
412
|
+
name: depAuditAnswer.trim(),
|
|
413
|
+
check_command: depAuditCommands[depAuditAnswer.trim()] ?? depAuditAnswer.trim(),
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
// Secret scanning tool preference
|
|
418
|
+
const currentSecrets = config.tools.secrets?.name ?? "auto";
|
|
419
|
+
const secretsAnswer = await rl.question(` Secret scanner? (detect-secrets/gitleaks/trufflehog/none/auto) [${currentSecrets}]: `);
|
|
420
|
+
if (secretsAnswer.trim() && secretsAnswer.trim() !== "auto") {
|
|
421
|
+
if (secretsAnswer.trim() === "none") {
|
|
422
|
+
delete config.tools.secrets;
|
|
423
|
+
// Remove from checks
|
|
424
|
+
config.checks = config.checks.filter((c) => c !== "secrets");
|
|
425
|
+
}
|
|
426
|
+
else {
|
|
427
|
+
const secretCommands = {
|
|
428
|
+
"detect-secrets": "detect-secrets scan --baseline .secrets.baseline",
|
|
429
|
+
gitleaks: "gitleaks detect --no-git",
|
|
430
|
+
trufflehog: "trufflehog filesystem . --no-update",
|
|
431
|
+
};
|
|
432
|
+
config.tools.secrets = {
|
|
433
|
+
name: secretsAnswer.trim(),
|
|
434
|
+
check_command: secretCommands[secretsAnswer.trim()] ?? secretsAnswer.trim(),
|
|
435
|
+
};
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
console.log(chalk.bold("\n Code quality tools:\n"));
|
|
439
|
+
// Dead code detection tool preference
|
|
440
|
+
const currentDeadCode = config.tools.dead_code?.name ?? "auto";
|
|
441
|
+
const deadCodeAnswer = await rl.question(` Dead code finder? (knip/ts-prune/vulture/deadcode/none/auto) [${currentDeadCode}]: `);
|
|
442
|
+
if (deadCodeAnswer.trim() && deadCodeAnswer.trim() !== "auto") {
|
|
443
|
+
if (deadCodeAnswer.trim() === "none") {
|
|
444
|
+
delete config.tools.dead_code;
|
|
445
|
+
config.checks = config.checks.filter((c) => c !== "dead_code");
|
|
446
|
+
}
|
|
447
|
+
else {
|
|
448
|
+
const deadCodeCommands = {
|
|
449
|
+
knip: "npx knip",
|
|
450
|
+
"ts-prune": "npx ts-prune",
|
|
451
|
+
vulture: "vulture .",
|
|
452
|
+
deadcode: "deadcode ./...",
|
|
453
|
+
};
|
|
454
|
+
config.tools.dead_code = {
|
|
455
|
+
name: deadCodeAnswer.trim(),
|
|
456
|
+
command: deadCodeCommands[deadCodeAnswer.trim()] ?? deadCodeAnswer.trim(),
|
|
457
|
+
};
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
// Bug tracking & testing tools
|
|
461
|
+
console.log(chalk.bold("\n Bug tracking & testing:\n"));
|
|
462
|
+
config.bug_trackers = await askBugTrackers(rl);
|
|
463
|
+
config.testing_tools = await askTestingTools(rl);
|
|
464
|
+
rl.close();
|
|
465
|
+
console.log();
|
|
466
|
+
return config;
|
|
467
|
+
}
|
|
468
|
+
const BUG_TRACKER_MCP = {
|
|
469
|
+
jira: {
|
|
470
|
+
display: "Atlassian (Jira + Confluence)",
|
|
471
|
+
url: "https://mcp.atlassian.com/v1/sse",
|
|
472
|
+
transport: "sse",
|
|
473
|
+
},
|
|
474
|
+
linear: {
|
|
475
|
+
display: "Linear",
|
|
476
|
+
url: "https://mcp.linear.app/mcp",
|
|
477
|
+
transport: "http",
|
|
478
|
+
},
|
|
479
|
+
github: {
|
|
480
|
+
display: "GitHub Issues",
|
|
481
|
+
command: "npx",
|
|
482
|
+
args: ["-y", "@modelcontextprotocol/server-github"],
|
|
483
|
+
},
|
|
484
|
+
};
|
|
485
|
+
const TESTING_TOOL_MCP = {
|
|
486
|
+
playwright: {
|
|
487
|
+
display: "Playwright",
|
|
488
|
+
command: "npx",
|
|
489
|
+
args: ["-y", "@playwright/mcp@latest"],
|
|
490
|
+
},
|
|
491
|
+
};
|
|
492
|
+
async function askBugTrackers(rl) {
|
|
493
|
+
const trackers = [];
|
|
494
|
+
console.log(chalk.dim(" Where do bug reports live? Add one or more trackers."));
|
|
495
|
+
console.log(chalk.dim(" Options: jira, linear, github, other, or press Enter to skip.\n"));
|
|
496
|
+
let adding = true;
|
|
497
|
+
while (adding) {
|
|
498
|
+
const answer = await rl.question(` Bug tracker${trackers.length > 0 ? " (another, or Enter to finish)" : ""}? `);
|
|
499
|
+
const trimmed = answer.trim().toLowerCase();
|
|
500
|
+
if (!trimmed) {
|
|
501
|
+
adding = false;
|
|
502
|
+
continue;
|
|
503
|
+
}
|
|
504
|
+
const known = BUG_TRACKER_MCP[trimmed];
|
|
505
|
+
const tracker = { name: trimmed };
|
|
506
|
+
if (known) {
|
|
507
|
+
const installAnswer = await rl.question(` Install ${known.display} MCP server? (Y/n) `);
|
|
508
|
+
if (installAnswer.trim().toLowerCase() !== "n") {
|
|
509
|
+
tracker.mcp = {
|
|
510
|
+
name: known.display.toLowerCase().replace(/[^a-z0-9]+/g, "-"),
|
|
511
|
+
command: known.command,
|
|
512
|
+
args: known.args,
|
|
513
|
+
url: known.url,
|
|
514
|
+
transport: known.transport,
|
|
515
|
+
};
|
|
516
|
+
console.log(chalk.green(` ✓ ${known.display} MCP configured`));
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
trackers.push(tracker);
|
|
520
|
+
}
|
|
521
|
+
return trackers;
|
|
522
|
+
}
|
|
523
|
+
async function askTestingTools(rl) {
|
|
524
|
+
const tools = [];
|
|
525
|
+
console.log(chalk.dim("\n What testing tools do your testers use? Add one or more."));
|
|
526
|
+
console.log(chalk.dim(" Options: playwright, cypress, selenium, postman, other, or Enter to skip.\n"));
|
|
527
|
+
let adding = true;
|
|
528
|
+
while (adding) {
|
|
529
|
+
const answer = await rl.question(` Testing tool${tools.length > 0 ? " (another, or Enter to finish)" : ""}? `);
|
|
530
|
+
const trimmed = answer.trim().toLowerCase();
|
|
531
|
+
if (!trimmed) {
|
|
532
|
+
adding = false;
|
|
533
|
+
continue;
|
|
534
|
+
}
|
|
535
|
+
const purposeAnswer = await rl.question(` Purpose? (e2e/integration/performance/api/general) [general]: `);
|
|
536
|
+
const purpose = purposeAnswer.trim().toLowerCase() || "general";
|
|
537
|
+
const tool = { name: trimmed, purpose };
|
|
538
|
+
const known = TESTING_TOOL_MCP[trimmed];
|
|
539
|
+
if (known) {
|
|
540
|
+
const installAnswer = await rl.question(` Install ${known.display} MCP server? (Y/n) `);
|
|
541
|
+
if (installAnswer.trim().toLowerCase() !== "n") {
|
|
542
|
+
tool.mcp = {
|
|
543
|
+
name: trimmed,
|
|
544
|
+
command: known.command,
|
|
545
|
+
args: known.args,
|
|
546
|
+
};
|
|
547
|
+
console.log(chalk.green(` ✓ ${known.display} MCP configured`));
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
tools.push(tool);
|
|
551
|
+
}
|
|
552
|
+
return tools;
|
|
553
|
+
}
|
|
554
|
+
function confidenceRank(c) {
|
|
555
|
+
return c === "high" ? 3 : c === "medium" ? 2 : 1;
|
|
556
|
+
}
|
|
557
|
+
async function setupAgentsFile(root, caveman) {
|
|
558
|
+
await upsertAgentsFile(root, PACKAGE_ROOT, "created", caveman);
|
|
559
|
+
}
|
|
560
|
+
async function installSkills(root, agents) {
|
|
561
|
+
await installSkillFiles(root, PACKAGE_ROOT, SKILL_NAMES, "created", agents);
|
|
562
|
+
}
|
|
563
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/core/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/core/list.ts"],"names":[],"mappings":"AAmBA,wBAAsB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA8G9D;AA4BD,wBAAsB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB/D;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBhE"}
|