@kiwidata/grimoire 0.1.3 → 0.1.4

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 (127) hide show
  1. package/AGENTS.md +56 -4
  2. package/README.md +28 -1
  3. package/dist/cli/index.js +2 -0
  4. package/dist/cli/index.js.map +1 -1
  5. package/dist/commands/check.js +1 -1
  6. package/dist/commands/check.js.map +1 -1
  7. package/dist/commands/configure.d.ts +3 -0
  8. package/dist/commands/configure.d.ts.map +1 -0
  9. package/dist/commands/configure.js +19 -0
  10. package/dist/commands/configure.js.map +1 -0
  11. package/dist/commands/init.d.ts.map +1 -1
  12. package/dist/commands/init.js +2 -0
  13. package/dist/commands/init.js.map +1 -1
  14. package/dist/commands/map.d.ts.map +1 -1
  15. package/dist/commands/map.js +10 -11
  16. package/dist/commands/map.js.map +1 -1
  17. package/dist/core/archive.d.ts.map +1 -1
  18. package/dist/core/archive.js +32 -43
  19. package/dist/core/archive.js.map +1 -1
  20. package/dist/core/check.d.ts.map +1 -1
  21. package/dist/core/check.js +115 -104
  22. package/dist/core/check.js.map +1 -1
  23. package/dist/core/ci.d.ts.map +1 -1
  24. package/dist/core/ci.js +50 -69
  25. package/dist/core/ci.js.map +1 -1
  26. package/dist/core/configure.d.ts +14 -0
  27. package/dist/core/configure.d.ts.map +1 -0
  28. package/dist/core/configure.js +434 -0
  29. package/dist/core/configure.js.map +1 -0
  30. package/dist/core/detect.d.ts.map +1 -1
  31. package/dist/core/detect.js +153 -26
  32. package/dist/core/detect.js.map +1 -1
  33. package/dist/core/diff.d.ts.map +1 -1
  34. package/dist/core/diff.js +62 -93
  35. package/dist/core/diff.js.map +1 -1
  36. package/dist/core/doc-style.d.ts +0 -4
  37. package/dist/core/doc-style.d.ts.map +1 -1
  38. package/dist/core/doc-style.js +28 -23
  39. package/dist/core/doc-style.js.map +1 -1
  40. package/dist/core/docs.js +106 -100
  41. package/dist/core/docs.js.map +1 -1
  42. package/dist/core/health.js +55 -77
  43. package/dist/core/health.js.map +1 -1
  44. package/dist/core/hooks.d.ts +0 -3
  45. package/dist/core/hooks.d.ts.map +1 -1
  46. package/dist/core/hooks.js +0 -11
  47. package/dist/core/hooks.js.map +1 -1
  48. package/dist/core/init.d.ts +2 -0
  49. package/dist/core/init.d.ts.map +1 -1
  50. package/dist/core/init.js +230 -406
  51. package/dist/core/init.js.map +1 -1
  52. package/dist/core/list.d.ts.map +1 -1
  53. package/dist/core/list.js +55 -65
  54. package/dist/core/list.js.map +1 -1
  55. package/dist/core/log.d.ts.map +1 -1
  56. package/dist/core/log.js +23 -33
  57. package/dist/core/log.js.map +1 -1
  58. package/dist/core/map.d.ts +15 -2
  59. package/dist/core/map.d.ts.map +1 -1
  60. package/dist/core/map.js +257 -194
  61. package/dist/core/map.js.map +1 -1
  62. package/dist/core/shared-setup.d.ts +0 -40
  63. package/dist/core/shared-setup.d.ts.map +1 -1
  64. package/dist/core/shared-setup.js +87 -52
  65. package/dist/core/shared-setup.js.map +1 -1
  66. package/dist/core/status.d.ts.map +1 -1
  67. package/dist/core/status.js +42 -52
  68. package/dist/core/status.js.map +1 -1
  69. package/dist/core/test-quality.d.ts +0 -8
  70. package/dist/core/test-quality.d.ts.map +1 -1
  71. package/dist/core/test-quality.js +24 -30
  72. package/dist/core/test-quality.js.map +1 -1
  73. package/dist/core/trace.d.ts.map +1 -1
  74. package/dist/core/trace.js +31 -41
  75. package/dist/core/trace.js.map +1 -1
  76. package/dist/core/update.d.ts.map +1 -1
  77. package/dist/core/update.js +61 -11
  78. package/dist/core/update.js.map +1 -1
  79. package/dist/core/validate.d.ts +1 -4
  80. package/dist/core/validate.d.ts.map +1 -1
  81. package/dist/core/validate.js +126 -148
  82. package/dist/core/validate.js.map +1 -1
  83. package/dist/utils/config.d.ts +15 -5
  84. package/dist/utils/config.d.ts.map +1 -1
  85. package/dist/utils/config.js +63 -42
  86. package/dist/utils/config.js.map +1 -1
  87. package/dist/utils/fs.d.ts +0 -12
  88. package/dist/utils/fs.d.ts.map +1 -1
  89. package/dist/utils/fs.js +0 -12
  90. package/dist/utils/fs.js.map +1 -1
  91. package/dist/utils/paths.d.ts +0 -6
  92. package/dist/utils/paths.d.ts.map +1 -1
  93. package/dist/utils/paths.js +0 -6
  94. package/dist/utils/paths.js.map +1 -1
  95. package/dist/utils/spawn.d.ts +0 -3
  96. package/dist/utils/spawn.d.ts.map +1 -1
  97. package/dist/utils/spawn.js +0 -3
  98. package/dist/utils/spawn.js.map +1 -1
  99. package/package.json +1 -1
  100. package/skills/grimoire-apply/SKILL.md +84 -16
  101. package/skills/grimoire-audit/SKILL.md +21 -1
  102. package/skills/grimoire-bug/SKILL.md +48 -9
  103. package/skills/grimoire-commit/SKILL.md +2 -1
  104. package/skills/grimoire-design/SKILL.md +259 -0
  105. package/skills/grimoire-design-consult/SKILL.md +200 -0
  106. package/skills/grimoire-discover/SKILL.md +65 -2
  107. package/skills/grimoire-draft/SKILL.md +85 -2
  108. package/skills/grimoire-plan/SKILL.md +61 -18
  109. package/skills/grimoire-pr/SKILL.md +4 -6
  110. package/skills/grimoire-pr-review/SKILL.md +45 -114
  111. package/skills/grimoire-precommit-review/SKILL.md +205 -0
  112. package/skills/grimoire-refactor/SKILL.md +5 -5
  113. package/skills/grimoire-review/SKILL.md +74 -147
  114. package/skills/grimoire-verify/SKILL.md +33 -0
  115. package/skills/references/adversarial-personas.md +225 -0
  116. package/skills/references/brand-tokens-format.md +186 -0
  117. package/skills/references/code-quality.md +140 -0
  118. package/skills/references/design-heuristics.md +138 -0
  119. package/skills/references/design-input-formats.md +190 -0
  120. package/skills/references/pattern-guard.md +180 -0
  121. package/skills/references/refactor-scan-categories.md +152 -0
  122. package/skills/references/review-personas.md +405 -0
  123. package/skills/references/security-compliance.md +22 -1
  124. package/skills/references/visual-fidelity.md +206 -0
  125. package/templates/brand-tokens-example.json +13 -0
  126. package/templates/brand-voice-example.md +22 -0
  127. package/templates/design-tool-setup-stub.md +59 -0
@@ -6,6 +6,25 @@ import { GherkinClassicTokenMatcher, Parser, AstBuilder, } from "@cucumber/gherk
6
6
  import { IdGenerator } from "@cucumber/messages";
7
7
  import { findProjectRoot, resolveChangePath } from "../utils/paths.js";
8
8
  import { findFiles } from "../utils/fs.js";
9
+ function printValidationResults(results, errorCount, warnCount) {
10
+ for (const result of results) {
11
+ if (result.errors.length > 0) {
12
+ console.log(`\n${chalk.red("FAIL")} ${result.file}`);
13
+ for (const err of result.errors) {
14
+ console.log(` ${chalk.red("error:")} ${err}`);
15
+ }
16
+ }
17
+ if (result.warnings.length > 0) {
18
+ console.log(`\n${chalk.yellow("WARN")} ${result.file}`);
19
+ for (const warn of result.warnings) {
20
+ console.log(` ${chalk.yellow("warn:")} ${warn}`);
21
+ }
22
+ }
23
+ }
24
+ if (errorCount === 0)
25
+ console.log(chalk.green("\nValidation passed."));
26
+ console.log(`\n${errorCount} error(s), ${warnCount} warning(s)`);
27
+ }
9
28
  export async function validateChange(changeId, options) {
10
29
  const root = await findProjectRoot();
11
30
  const results = [];
@@ -14,7 +33,6 @@ export async function validateChange(changeId, options) {
14
33
  await validateSingleChange(changePath, changeId, results, options);
15
34
  }
16
35
  else {
17
- // Validate all active changes
18
36
  const changesDir = join(root, ".grimoire", "changes");
19
37
  try {
20
38
  const entries = await readdir(changesDir, { withFileTypes: true });
@@ -24,8 +42,7 @@ export async function validateChange(changeId, options) {
24
42
  return { results, errorCount: 0, warnCount: 0 };
25
43
  }
26
44
  for (const change of changes) {
27
- const changePath = join(changesDir, change.name);
28
- await validateSingleChange(changePath, change.name, results, options);
45
+ await validateSingleChange(join(changesDir, change.name), change.name, results, options);
29
46
  }
30
47
  }
31
48
  catch {
@@ -39,74 +56,52 @@ export async function validateChange(changeId, options) {
39
56
  console.log(JSON.stringify(results, null, 2));
40
57
  return { results, errorCount, warnCount };
41
58
  }
42
- // Print results
43
- for (const result of results) {
44
- if (result.errors.length > 0) {
45
- console.log(`\n${chalk.red("FAIL")} ${result.file}`);
46
- for (const err of result.errors) {
47
- console.log(` ${chalk.red("error:")} ${err}`);
48
- }
49
- }
50
- if (result.warnings.length > 0) {
51
- console.log(`\n${chalk.yellow("WARN")} ${result.file}`);
52
- for (const warn of result.warnings) {
53
- console.log(` ${chalk.yellow("warn:")} ${warn}`);
54
- }
55
- }
56
- }
57
- if (errorCount === 0) {
58
- console.log(chalk.green("\nValidation passed."));
59
- }
60
- console.log(`\n${errorCount} error(s), ${warnCount} warning(s)`);
59
+ printValidationResults(results, errorCount, warnCount);
61
60
  return { results, errorCount, warnCount };
62
61
  }
63
- async function validateSingleChange(changePath, changeId, results, options) {
64
- // Check manifest exists and has valid frontmatter
65
- const manifestPath = join(changePath, "manifest.md");
62
+ async function validateFeatureFiles(changePath, options) {
63
+ const results = [];
66
64
  try {
67
- const manifestContent = await readFile(manifestPath, "utf-8");
68
- const manifestResult = validateManifest(`${changeId}/manifest.md`, manifestContent, options.strict);
69
- if (manifestResult.errors.length > 0 || manifestResult.warnings.length > 0) {
70
- results.push(manifestResult);
65
+ const featureFiles = await findFiles(join(changePath, "features"), ".feature");
66
+ for (const file of featureFiles) {
67
+ const result = validateFeatureFile(file, await readFile(file, "utf-8"), options.strict);
68
+ if (result.errors.length > 0 || result.warnings.length > 0)
69
+ results.push(result);
71
70
  }
72
71
  }
73
72
  catch {
74
- results.push({
75
- file: `${changeId}/manifest.md`,
76
- errors: ["Manifest file missing"],
77
- warnings: [],
78
- });
73
+ // No features dir
79
74
  }
80
- // Validate feature files
81
- const featuresDir = join(changePath, "features");
75
+ return results;
76
+ }
77
+ async function validateDecisionFiles(changePath, options) {
78
+ const results = [];
82
79
  try {
83
- const featureFiles = await findFiles(featuresDir, ".feature");
84
- for (const file of featureFiles) {
85
- const content = await readFile(file, "utf-8");
86
- const result = validateFeatureFile(file, content, options.strict);
87
- if (result.errors.length > 0 || result.warnings.length > 0) {
80
+ const decisionFiles = await findFiles(join(changePath, "decisions"), ".md");
81
+ for (const file of decisionFiles) {
82
+ const result = validateDecisionFile(file, await readFile(file, "utf-8"), options.strict);
83
+ if (result.errors.length > 0 || result.warnings.length > 0)
88
84
  results.push(result);
89
- }
90
85
  }
91
86
  }
92
87
  catch {
93
- // No features dir is ok if there are decisions
88
+ // No decisions dir
94
89
  }
95
- // Validate decision files
96
- const decisionsDir = join(changePath, "decisions");
90
+ return results;
91
+ }
92
+ async function validateSingleChange(changePath, changeId, results, options) {
97
93
  try {
98
- const decisionFiles = await findFiles(decisionsDir, ".md");
99
- for (const file of decisionFiles) {
100
- const content = await readFile(file, "utf-8");
101
- const result = validateDecisionFile(file, content, options.strict);
102
- if (result.errors.length > 0 || result.warnings.length > 0) {
103
- results.push(result);
104
- }
94
+ const manifestContent = await readFile(join(changePath, "manifest.md"), "utf-8");
95
+ const manifestResult = validateManifest(`${changeId}/manifest.md`, manifestContent, options.strict);
96
+ if (manifestResult.errors.length > 0 || manifestResult.warnings.length > 0) {
97
+ results.push(manifestResult);
105
98
  }
106
99
  }
107
100
  catch {
108
- // No decisions dir is ok if there are features
101
+ results.push({ file: `${changeId}/manifest.md`, errors: ["Manifest file missing"], warnings: [] });
109
102
  }
103
+ results.push(...(await validateFeatureFiles(changePath, options)));
104
+ results.push(...(await validateDecisionFiles(changePath, options)));
110
105
  }
111
106
  function parseGherkin(content) {
112
107
  try {
@@ -135,97 +130,85 @@ function getScenarios(doc) {
135
130
  }
136
131
  return scenarios;
137
132
  }
138
- export function validateFeatureFile(filePath, content, strict) {
139
- const errors = [];
140
- const warnings = [];
141
- const doc = parseGherkin(content);
142
- if (!doc || !doc.feature) {
143
- errors.push("Invalid Gherkin syntax — could not parse feature file");
144
- return { file: filePath, errors, warnings };
145
- }
146
- const feature = doc.feature;
147
- if (!feature.name || feature.name.trim() === "") {
148
- errors.push("Missing Feature name");
149
- }
150
- const scenarios = getScenarios(doc);
151
- if (scenarios.length === 0) {
152
- errors.push("No scenarios found");
153
- }
133
+ function validateScenarios(scenarios, errors) {
154
134
  for (const scenario of scenarios) {
155
135
  const name = scenario.name || "unnamed";
156
136
  const keywords = scenario.steps.map((s) => s.keyword.trim());
157
- if (!keywords.includes("When")) {
137
+ if (!keywords.includes("When"))
158
138
  errors.push(`Scenario "${name}" missing When step`);
159
- }
160
- if (!keywords.includes("Then")) {
139
+ if (!keywords.includes("Then"))
161
140
  errors.push(`Scenario "${name}" missing Then step`);
162
- }
163
- // Scenario Outline must have Examples
164
- if (scenario.keyword === "Scenario Outline" &&
165
- scenario.examples.length === 0) {
141
+ if (scenario.keyword === "Scenario Outline" && scenario.examples.length === 0) {
166
142
  errors.push(`Scenario Outline "${name}" missing Examples table`);
167
143
  }
168
144
  }
169
- if (strict) {
170
- // Check for user story in feature description
171
- const description = feature.description || "";
172
- if (!description.match(/As an?\s/i) ||
173
- !description.match(/I want\s/i) ||
174
- !description.match(/So that\s/i)) {
175
- warnings.push("Missing user story (As a / I want / So that)");
176
- }
177
- // Warn about implementation details in step text
178
- const implKeywords = /\b(database|SQL|API|endpoint|HTTP|POST|GET|class|function|method|import|module)\b/i;
179
- for (const scenario of scenarios) {
180
- for (const step of scenario.steps) {
181
- if (implKeywords.test(step.text)) {
182
- warnings.push(`Possible implementation details in step: "${step.keyword.trim()} ${step.text}" (should describe WHAT not HOW)`);
183
- }
145
+ }
146
+ function validateStrictRules(feature, scenarios, warnings) {
147
+ const description = feature.description || "";
148
+ if (!description.match(/As an?\s/i) || !description.match(/I want\s/i) || !description.match(/So that\s/i)) {
149
+ warnings.push("Missing user story (As a / I want / So that)");
150
+ }
151
+ const implKeywords = /\b(database|SQL|API|endpoint|HTTP|POST|GET|class|function|method|import|module)\b/i;
152
+ for (const scenario of scenarios) {
153
+ for (const step of scenario.steps) {
154
+ if (implKeywords.test(step.text)) {
155
+ warnings.push(`Possible implementation details in step: "${step.keyword.trim()} ${step.text}" (should describe WHAT not HOW)`);
184
156
  }
185
157
  }
186
158
  }
187
- return { file: filePath, errors, warnings };
188
159
  }
189
- export function validateDecisionFile(filePath, content, strict) {
160
+ function validateFeatureFile(filePath, content, strict) {
190
161
  const errors = [];
191
162
  const warnings = [];
192
- // Check YAML frontmatter
193
- const { data: fm } = matter(content);
163
+ const doc = parseGherkin(content);
164
+ if (!doc || !doc.feature) {
165
+ errors.push("Invalid Gherkin syntax — could not parse feature file");
166
+ return { file: filePath, errors, warnings };
167
+ }
168
+ const feature = doc.feature;
169
+ if (!feature.name || feature.name.trim() === "")
170
+ errors.push("Missing Feature name");
171
+ const scenarios = getScenarios(doc);
172
+ if (scenarios.length === 0)
173
+ errors.push("No scenarios found");
174
+ validateScenarios(scenarios, errors);
175
+ if (strict)
176
+ validateStrictRules(feature, scenarios, warnings);
177
+ return { file: filePath, errors, warnings };
178
+ }
179
+ function validateDecisionFrontmatter(content, fm, errors) {
194
180
  if (!content.startsWith("---")) {
195
181
  errors.push("Missing YAML frontmatter");
182
+ return;
196
183
  }
197
- else {
198
- if (!fm.status) {
199
- errors.push("Frontmatter missing 'status' field");
200
- }
201
- if (!fm.date) {
202
- errors.push("Frontmatter missing 'date' field");
203
- }
204
- }
205
- // Check required sections
206
- if (!content.match(/^## Context and Problem Statement/m)) {
184
+ if (!fm.status)
185
+ errors.push("Frontmatter missing 'status' field");
186
+ if (!fm.date)
187
+ errors.push("Frontmatter missing 'date' field");
188
+ }
189
+ function validateDecisionStrictSections(content, warnings) {
190
+ if (!content.match(/^## Decision Drivers/m))
191
+ warnings.push("Missing 'Decision Drivers' section");
192
+ if (!content.match(/^### Consequences/m))
193
+ warnings.push("Missing 'Consequences' section");
194
+ if (!content.match(/^### Cost of Ownership/m))
195
+ warnings.push("Missing 'Cost of Ownership' section");
196
+ if (!content.match(/^### Confirmation/m))
197
+ warnings.push("Missing 'Confirmation' section");
198
+ }
199
+ function validateDecisionFile(filePath, content, strict) {
200
+ const errors = [];
201
+ const warnings = [];
202
+ const { data: fm } = matter(content);
203
+ validateDecisionFrontmatter(content, fm, errors);
204
+ if (!content.match(/^## Context and Problem Statement/m))
207
205
  errors.push("Missing 'Context and Problem Statement' section");
208
- }
209
- if (!content.match(/^## Considered Options/m)) {
206
+ if (!content.match(/^## Considered Options/m))
210
207
  errors.push("Missing 'Considered Options' section");
211
- }
212
- if (!content.match(/^## Decision Outcome/m)) {
208
+ if (!content.match(/^## Decision Outcome/m))
213
209
  errors.push("Missing 'Decision Outcome' section");
214
- }
215
- if (strict) {
216
- if (!content.match(/^## Decision Drivers/m)) {
217
- warnings.push("Missing 'Decision Drivers' section");
218
- }
219
- if (!content.match(/^### Consequences/m)) {
220
- warnings.push("Missing 'Consequences' section");
221
- }
222
- if (!content.match(/^### Cost of Ownership/m)) {
223
- warnings.push("Missing 'Cost of Ownership' section");
224
- }
225
- if (!content.match(/^### Confirmation/m)) {
226
- warnings.push("Missing 'Confirmation' section");
227
- }
228
- }
210
+ if (strict)
211
+ validateDecisionStrictSections(content, warnings);
229
212
  return { file: filePath, errors, warnings };
230
213
  }
231
214
  const VALID_MANIFEST_STATUSES = [
@@ -234,41 +217,36 @@ const VALID_MANIFEST_STATUSES = [
234
217
  "implementing",
235
218
  "complete",
236
219
  ];
237
- export function validateManifest(filePath, content, strict) {
238
- const errors = [];
239
- const warnings = [];
240
- const { data: mfm } = matter(content);
220
+ function validateManifestFrontmatter(content, mfm, strict, errors, warnings) {
241
221
  if (!content.startsWith("---")) {
242
- if (strict) {
222
+ if (strict)
243
223
  errors.push("Missing YAML frontmatter (status, branch)");
244
- }
245
- else {
224
+ else
246
225
  warnings.push("Missing YAML frontmatter (status, branch)");
247
- }
226
+ return;
248
227
  }
249
- else {
250
- if (!mfm.status) {
251
- errors.push("Frontmatter missing 'status' field");
252
- }
253
- else if (!VALID_MANIFEST_STATUSES.includes(mfm.status)) {
254
- errors.push(`Invalid status "${mfm.status}" — must be one of: ${VALID_MANIFEST_STATUSES.join(", ")}`);
255
- }
228
+ if (!mfm.status) {
229
+ errors.push("Frontmatter missing 'status' field");
256
230
  }
257
- // Check required sections
258
- if (!content.match(/^## Why/m)) {
259
- errors.push("Missing 'Why' section");
231
+ else if (!VALID_MANIFEST_STATUSES.includes(mfm.status)) {
232
+ errors.push(`Invalid status "${mfm.status}" — must be one of: ${VALID_MANIFEST_STATUSES.join(", ")}`);
260
233
  }
261
- if (!content.match(/^## Feature Changes/m) &&
262
- !content.match(/^## Decisions/m)) {
234
+ }
235
+ function validateManifest(filePath, content, strict) {
236
+ const errors = [];
237
+ const warnings = [];
238
+ const { data: mfm } = matter(content);
239
+ validateManifestFrontmatter(content, mfm, strict, errors, warnings);
240
+ if (!content.match(/^## Why/m))
241
+ errors.push("Missing 'Why' section");
242
+ if (!content.match(/^## Feature Changes/m) && !content.match(/^## Decisions/m)) {
263
243
  errors.push("Must have at least one of 'Feature Changes' or 'Decisions' section");
264
244
  }
265
245
  if (strict) {
266
- if (!content.match(/^## Assumptions/m)) {
246
+ if (!content.match(/^## Assumptions/m))
267
247
  warnings.push("Missing 'Assumptions' section");
268
- }
269
- if (!content.match(/^## Pre-Mortem/m)) {
248
+ if (!content.match(/^## Pre-Mortem/m))
270
249
  warnings.push("Missing 'Pre-Mortem' section");
271
- }
272
250
  }
273
251
  return { file: filePath, errors, warnings };
274
252
  }
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/core/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EACL,0BAA0B,EAC1B,MAAM,EACN,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAmB3C,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAA4B,EAC5B,OAAwB;IAExB,MAAM,IAAI,GAAG,MAAM,eAAe,EAAE,CAAC;IACrC,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACrD,MAAM,oBAAoB,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC;SAAM,CAAC;QACN,8BAA8B;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YACnE,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YAEvD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;gBAC9C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;YAClD,CAAC;YAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;gBACjD,MAAM,oBAAoB,CACxB,UAAU,EACV,MAAM,CAAC,IAAI,EACX,OAAO,EACP,OAAO,CACR,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;YAC/E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QAClD,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxE,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAEzE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IAC5C,CAAC;IAED,gBAAgB;IAChB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACrD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACxD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,CAAC,GAAG,CACT,KAAK,UAAU,cAAc,SAAS,aAAa,CACpD,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,UAAkB,EAClB,QAAgB,EAChB,OAA2B,EAC3B,OAAwB;IAExB,kDAAkD;IAClD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC9D,MAAM,cAAc,GAAG,gBAAgB,CACrC,GAAG,QAAQ,cAAc,EACzB,eAAe,EACf,OAAO,CAAC,MAAM,CACf,CAAC;QACF,IAAI,cAAc,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3E,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,GAAG,QAAQ,cAAc;YAC/B,MAAM,EAAE,CAAC,uBAAuB,CAAC;YACjC,QAAQ,EAAE,EAAE;SACb,CAAC,CAAC;IACL,CAAC;IAED,yBAAyB;IACzB,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAC9D,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC9C,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAClE,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3D,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,+CAA+C;IACjD,CAAC;IAED,0BAA0B;IAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAC3D,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC9C,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACnE,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3D,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,+CAA+C;IACjD,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,OAAe;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,IAAI,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,EAClC,IAAI,0BAA0B,EAAE,CACjC,CAAC;QACF,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,GAAoB;IACxC,IAAI,CAAC,GAAG,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAC5B,MAAM,SAAS,GAAsB,EAAE,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACzC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC5C,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;oBACvB,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,QAAgB,EAChB,OAAe,EACf,MAAe;IAEf,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAElC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;QACrE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC9C,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAE5B,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAEpC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,SAAS,CAAC;QACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAE7D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,qBAAqB,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,qBAAqB,CAAC,CAAC;QACtD,CAAC;QAED,sCAAsC;QACtC,IACE,QAAQ,CAAC,OAAO,KAAK,kBAAkB;YACvC,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAC9B,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,qBAAqB,IAAI,0BAA0B,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,8CAA8C;QAC9C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;QAC9C,IACE,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC;YAC/B,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC;YAC/B,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,EAChC,CAAC;YACD,QAAQ,CAAC,IAAI,CACX,8CAA8C,CAC/C,CAAC;QACJ,CAAC;QAED,iDAAiD;QACjD,MAAM,YAAY,GAChB,oFAAoF,CAAC;QACvF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAClC,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjC,QAAQ,CAAC,IAAI,CACX,6CAA6C,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,kCAAkC,CAChH,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,QAAgB,EAChB,OAAe,EACf,MAAe;IAEf,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,yBAAyB;IACzB,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,EAAE,CAAC;QACzD,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACzC,QAAQ,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,CAAC;YAC9C,QAAQ,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACzC,QAAQ,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,uBAAuB,GAAG;IAC9B,OAAO;IACP,UAAU;IACV,cAAc;IACd,UAAU;CACX,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,OAAe,EACf,MAAe;IAEf,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACpD,CAAC;aAAM,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACzD,MAAM,CAAC,IAAI,CACT,mBAAmB,GAAG,CAAC,MAAM,uBAAuB,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACzF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACvC,CAAC;IACD,IACE,CAAC,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC;QACtC,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAChC,CAAC;QACD,MAAM,CAAC,IAAI,CACT,oEAAoE,CACrE,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACvC,QAAQ,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/core/validate.ts"],"names":[],"mappings":"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"}
@@ -6,12 +6,14 @@ export interface ToolConfig {
6
6
  }
7
7
  export type CavemanLevel = "none" | "lite" | "full" | "ultra";
8
8
  export declare const CURRENT_CONFIG_VERSION = 2;
9
- export interface DesignToolConfig {
9
+ interface DesignToolConfig {
10
10
  name: string;
11
11
  path?: string;
12
12
  url?: string;
13
+ mcp?: McpServer;
13
14
  }
14
- export interface ProjectConfig {
15
+ export type ProjectSurface = "tui" | "web" | "mobile" | "api" | "mixed";
16
+ interface ProjectConfig {
15
17
  language?: string;
16
18
  package_manager?: string;
17
19
  commit_style: string;
@@ -22,16 +24,23 @@ export interface ProjectConfig {
22
24
  design_tool?: DesignToolConfig;
23
25
  agents?: string[];
24
26
  integrations?: IntegrationsConfig;
27
+ precommit_review?: PrecommitReviewConfig;
28
+ surface?: ProjectSurface;
29
+ brand_dir?: string;
30
+ }
31
+ interface PrecommitReviewConfig {
32
+ depth?: "quick" | "full";
33
+ block_on?: "blocker" | "none";
25
34
  }
26
- export interface IntegrationsConfig {
35
+ interface IntegrationsConfig {
27
36
  codebase_memory_mcp?: boolean;
28
37
  caveman_plugin?: boolean;
29
38
  }
30
- export interface LlmAgentConfig {
39
+ interface LlmAgentConfig {
31
40
  command: string;
32
41
  model?: string;
33
42
  }
34
- export interface LlmConfig {
43
+ interface LlmConfig {
35
44
  thinking: LlmAgentConfig;
36
45
  coding: LlmAgentConfig;
37
46
  }
@@ -63,4 +72,5 @@ export interface GrimoireConfig {
63
72
  testing_tools?: TestingToolConfig[];
64
73
  }
65
74
  export declare function loadConfig(root?: string): Promise<GrimoireConfig>;
75
+ export {};
66
76
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE9D,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;AAED,MAAM,WAAW,kBAAkB;IACjC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,aAAa,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,GAAG,EAAE,SAAS,CAAC;IACf,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAClC,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACrC;AAsID,wBAAsB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAkCvE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE9D,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC;AAUxE,UAAU,aAAa;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,qBAAqB;IAC7B,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CAC/B;AAED,UAAU,kBAAkB;IAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,SAAS;IACjB,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,aAAa,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,GAAG,EAAE,SAAS,CAAC;IACf,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAClC,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACrC;AAyJD,wBAAsB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAwBvE"}
@@ -3,6 +3,13 @@ import { join } from "node:path";
3
3
  import { parse as parseYaml } from "yaml";
4
4
  import { findProjectRoot } from "./paths.js";
5
5
  export const CURRENT_CONFIG_VERSION = 2;
6
+ const PROJECT_SURFACES = [
7
+ "tui",
8
+ "web",
9
+ "mobile",
10
+ "api",
11
+ "mixed",
12
+ ];
6
13
  const DEFAULT_CHECKS = [
7
14
  "lint",
8
15
  "format",
@@ -21,7 +28,7 @@ const DEFAULT_LLM = {
21
28
  coding: { command: "claude" },
22
29
  };
23
30
  const DEFAULT_CONFIG = {
24
- version: 1,
31
+ version: CURRENT_CONFIG_VERSION,
25
32
  project: {
26
33
  commit_style: "conventional",
27
34
  },
@@ -48,29 +55,41 @@ function parseTools(raw) {
48
55
  }
49
56
  return tools;
50
57
  }
58
+ function parseDesignTool(projectRaw) {
59
+ if (!projectRaw.design_tool || typeof projectRaw.design_tool !== "object")
60
+ return undefined;
61
+ const dt = projectRaw.design_tool;
62
+ return { name: String(dt.name ?? ""), path: str(dt.path), url: str(dt.url), mcp: parseMcpServer(dt) };
63
+ }
64
+ function parseIntegrations(projectRaw) {
65
+ if (!projectRaw.integrations || typeof projectRaw.integrations !== "object")
66
+ return undefined;
67
+ const it = projectRaw.integrations;
68
+ return {
69
+ codebase_memory_mcp: typeof it.codebase_memory_mcp === "boolean" ? it.codebase_memory_mcp : undefined,
70
+ caveman_plugin: typeof it.caveman_plugin === "boolean" ? it.caveman_plugin : undefined,
71
+ };
72
+ }
73
+ function parsePrecommitReview(projectRaw) {
74
+ if (!projectRaw.precommit_review || typeof projectRaw.precommit_review !== "object")
75
+ return undefined;
76
+ const pr = projectRaw.precommit_review;
77
+ const depth = str(pr.depth);
78
+ const blockOn = str(pr.block_on);
79
+ return {
80
+ depth: depth === "quick" || depth === "full" ? depth : undefined,
81
+ block_on: blockOn === "blocker" || blockOn === "none" ? blockOn : undefined,
82
+ };
83
+ }
84
+ function parseSurface(projectRaw) {
85
+ const surfaceRaw = str(projectRaw.surface);
86
+ return PROJECT_SURFACES.includes(surfaceRaw) ? surfaceRaw : undefined;
87
+ }
88
+ function parseStringArray(val) {
89
+ return Array.isArray(val) ? val.map(String) : undefined;
90
+ }
51
91
  function parseProject(raw) {
52
- const projectRaw = raw.project && typeof raw.project === "object"
53
- ? raw.project
54
- : {};
55
- let design_tool;
56
- if (projectRaw.design_tool && typeof projectRaw.design_tool === "object") {
57
- const dt = projectRaw.design_tool;
58
- design_tool = {
59
- name: String(dt.name ?? ""),
60
- path: str(dt.path),
61
- url: str(dt.url),
62
- };
63
- }
64
- let integrations;
65
- if (projectRaw.integrations && typeof projectRaw.integrations === "object") {
66
- const it = projectRaw.integrations;
67
- integrations = {
68
- codebase_memory_mcp: typeof it.codebase_memory_mcp === "boolean"
69
- ? it.codebase_memory_mcp
70
- : undefined,
71
- caveman_plugin: typeof it.caveman_plugin === "boolean" ? it.caveman_plugin : undefined,
72
- };
73
- }
92
+ const projectRaw = raw.project && typeof raw.project === "object" ? raw.project : {};
74
93
  return {
75
94
  language: str(projectRaw.language ?? raw.language),
76
95
  package_manager: str(projectRaw.package_manager),
@@ -78,14 +97,13 @@ function parseProject(raw) {
78
97
  doc_tool: str(projectRaw.doc_tool ?? raw.doc_tool),
79
98
  comment_style: str(projectRaw.comment_style ?? raw.comment_style),
80
99
  caveman: str(projectRaw.caveman),
81
- compliance: Array.isArray(projectRaw.compliance)
82
- ? projectRaw.compliance.map(String)
83
- : undefined,
84
- design_tool,
85
- agents: Array.isArray(projectRaw.agents)
86
- ? projectRaw.agents.map(String)
87
- : undefined,
88
- integrations,
100
+ compliance: parseStringArray(projectRaw.compliance),
101
+ design_tool: parseDesignTool(projectRaw),
102
+ agents: parseStringArray(projectRaw.agents),
103
+ integrations: parseIntegrations(projectRaw),
104
+ precommit_review: parsePrecommitReview(projectRaw),
105
+ surface: parseSurface(projectRaw),
106
+ brand_dir: str(projectRaw.brand_dir),
89
107
  };
90
108
  }
91
109
  function parseLlm(raw) {
@@ -116,6 +134,19 @@ function parseLlm(raw) {
116
134
  coding: { command: cmd },
117
135
  };
118
136
  }
137
+ function buildConfig(raw) {
138
+ return {
139
+ version: Number(raw.version ?? 1),
140
+ project: parseProject(raw),
141
+ features_dir: String(raw.features_dir ?? DEFAULT_CONFIG.features_dir),
142
+ decisions_dir: String(raw.decisions_dir ?? DEFAULT_CONFIG.decisions_dir),
143
+ tools: parseTools(raw),
144
+ checks: Array.isArray(raw.checks) ? raw.checks : DEFAULT_CHECKS,
145
+ llm: parseLlm(raw),
146
+ bug_trackers: Array.isArray(raw.bug_trackers) ? parseBugTrackers(raw.bug_trackers) : undefined,
147
+ testing_tools: Array.isArray(raw.testing_tools) ? parseTestingTools(raw.testing_tools) : undefined,
148
+ };
149
+ }
119
150
  export async function loadConfig(root) {
120
151
  const projectRoot = root ?? (await findProjectRoot());
121
152
  const configPath = join(projectRoot, ".grimoire", "config.yaml");
@@ -136,17 +167,7 @@ export async function loadConfig(root) {
136
167
  console.warn(`Warning: failed to parse ${configPath}: ${msg}\nFalling back to default config.`);
137
168
  return structuredClone(DEFAULT_CONFIG);
138
169
  }
139
- return {
140
- version: Number(raw.version ?? 1),
141
- project: parseProject(raw),
142
- features_dir: String(raw.features_dir ?? DEFAULT_CONFIG.features_dir),
143
- decisions_dir: String(raw.decisions_dir ?? DEFAULT_CONFIG.decisions_dir),
144
- tools: parseTools(raw),
145
- checks: Array.isArray(raw.checks) ? raw.checks : DEFAULT_CHECKS,
146
- llm: parseLlm(raw),
147
- bug_trackers: Array.isArray(raw.bug_trackers) ? parseBugTrackers(raw.bug_trackers) : undefined,
148
- testing_tools: Array.isArray(raw.testing_tools) ? parseTestingTools(raw.testing_tools) : undefined,
149
- };
170
+ return buildConfig(raw);
150
171
  }
151
172
  function parseMcpServer(raw) {
152
173
  if (!raw.mcp || typeof raw.mcp !== "object")