@organon-methodology/tools 0.3.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 (287) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +152 -0
  3. package/dist/cli/commands/coverage.d.ts +12 -0
  4. package/dist/cli/commands/coverage.d.ts.map +1 -0
  5. package/dist/cli/commands/coverage.js +80 -0
  6. package/dist/cli/commands/coverage.js.map +1 -0
  7. package/dist/cli/commands/find.d.ts +15 -0
  8. package/dist/cli/commands/find.d.ts.map +1 -0
  9. package/dist/cli/commands/find.js +81 -0
  10. package/dist/cli/commands/find.js.map +1 -0
  11. package/dist/cli/commands/generate-tests.d.ts +14 -0
  12. package/dist/cli/commands/generate-tests.d.ts.map +1 -0
  13. package/dist/cli/commands/generate-tests.js +87 -0
  14. package/dist/cli/commands/generate-tests.js.map +1 -0
  15. package/dist/cli/commands/generate.d.ts +15 -0
  16. package/dist/cli/commands/generate.d.ts.map +1 -0
  17. package/dist/cli/commands/generate.js +77 -0
  18. package/dist/cli/commands/generate.js.map +1 -0
  19. package/dist/cli/commands/health.d.ts +13 -0
  20. package/dist/cli/commands/health.d.ts.map +1 -0
  21. package/dist/cli/commands/health.js +79 -0
  22. package/dist/cli/commands/health.js.map +1 -0
  23. package/dist/cli/commands/init.d.ts +14 -0
  24. package/dist/cli/commands/init.d.ts.map +1 -0
  25. package/dist/cli/commands/init.js +132 -0
  26. package/dist/cli/commands/init.js.map +1 -0
  27. package/dist/cli/commands/mcp.d.ts +11 -0
  28. package/dist/cli/commands/mcp.d.ts.map +1 -0
  29. package/dist/cli/commands/mcp.js +26 -0
  30. package/dist/cli/commands/mcp.js.map +1 -0
  31. package/dist/cli/commands/query.d.ts +19 -0
  32. package/dist/cli/commands/query.d.ts.map +1 -0
  33. package/dist/cli/commands/query.js +103 -0
  34. package/dist/cli/commands/query.js.map +1 -0
  35. package/dist/cli/commands/upgrade.d.ts +13 -0
  36. package/dist/cli/commands/upgrade.d.ts.map +1 -0
  37. package/dist/cli/commands/upgrade.js +162 -0
  38. package/dist/cli/commands/upgrade.js.map +1 -0
  39. package/dist/cli/commands/validate.d.ts +13 -0
  40. package/dist/cli/commands/validate.d.ts.map +1 -0
  41. package/dist/cli/commands/validate.js +89 -0
  42. package/dist/cli/commands/validate.js.map +1 -0
  43. package/dist/cli/commands/verify.d.ts +12 -0
  44. package/dist/cli/commands/verify.d.ts.map +1 -0
  45. package/dist/cli/commands/verify.js +67 -0
  46. package/dist/cli/commands/verify.js.map +1 -0
  47. package/dist/cli/index.d.ts +19 -0
  48. package/dist/cli/index.d.ts.map +1 -0
  49. package/dist/cli/index.js +59 -0
  50. package/dist/cli/index.js.map +1 -0
  51. package/dist/core/add-protocols-array.d.ts +17 -0
  52. package/dist/core/add-protocols-array.d.ts.map +1 -0
  53. package/dist/core/add-protocols-array.js +95 -0
  54. package/dist/core/add-protocols-array.js.map +1 -0
  55. package/dist/core/add-protocols-array.test.d.ts +2 -0
  56. package/dist/core/add-protocols-array.test.d.ts.map +1 -0
  57. package/dist/core/add-protocols-array.test.js +86 -0
  58. package/dist/core/add-protocols-array.test.js.map +1 -0
  59. package/dist/core/config.d.ts +44 -0
  60. package/dist/core/config.d.ts.map +1 -0
  61. package/dist/core/config.js +130 -0
  62. package/dist/core/config.js.map +1 -0
  63. package/dist/core/config.test.d.ts +2 -0
  64. package/dist/core/config.test.d.ts.map +1 -0
  65. package/dist/core/config.test.js +88 -0
  66. package/dist/core/config.test.js.map +1 -0
  67. package/dist/core/find.d.ts +29 -0
  68. package/dist/core/find.d.ts.map +1 -0
  69. package/dist/core/find.js +191 -0
  70. package/dist/core/find.js.map +1 -0
  71. package/dist/core/find.test.d.ts +2 -0
  72. package/dist/core/find.test.d.ts.map +1 -0
  73. package/dist/core/find.test.js +91 -0
  74. package/dist/core/find.test.js.map +1 -0
  75. package/dist/core/frontmatter-parser.d.ts +45 -0
  76. package/dist/core/frontmatter-parser.d.ts.map +1 -0
  77. package/dist/core/frontmatter-parser.js +122 -0
  78. package/dist/core/frontmatter-parser.js.map +1 -0
  79. package/dist/core/frontmatter-parser.test.d.ts +2 -0
  80. package/dist/core/frontmatter-parser.test.d.ts.map +1 -0
  81. package/dist/core/frontmatter-parser.test.js +200 -0
  82. package/dist/core/frontmatter-parser.test.js.map +1 -0
  83. package/dist/core/generate-frontmatter.d.ts +27 -0
  84. package/dist/core/generate-frontmatter.d.ts.map +1 -0
  85. package/dist/core/generate-frontmatter.js +219 -0
  86. package/dist/core/generate-frontmatter.js.map +1 -0
  87. package/dist/core/generate-frontmatter.test.d.ts +2 -0
  88. package/dist/core/generate-frontmatter.test.d.ts.map +1 -0
  89. package/dist/core/generate-frontmatter.test.js +161 -0
  90. package/dist/core/generate-frontmatter.test.js.map +1 -0
  91. package/dist/core/generate-tests.d.ts +41 -0
  92. package/dist/core/generate-tests.d.ts.map +1 -0
  93. package/dist/core/generate-tests.js +191 -0
  94. package/dist/core/generate-tests.js.map +1 -0
  95. package/dist/core/generate-tests.test.d.ts +2 -0
  96. package/dist/core/generate-tests.test.d.ts.map +1 -0
  97. package/dist/core/generate-tests.test.js +205 -0
  98. package/dist/core/generate-tests.test.js.map +1 -0
  99. package/dist/core/health.d.ts +16 -0
  100. package/dist/core/health.d.ts.map +1 -0
  101. package/dist/core/health.js +156 -0
  102. package/dist/core/health.js.map +1 -0
  103. package/dist/core/health.test.d.ts +2 -0
  104. package/dist/core/health.test.d.ts.map +1 -0
  105. package/dist/core/health.test.js +97 -0
  106. package/dist/core/health.test.js.map +1 -0
  107. package/dist/core/init.d.ts +25 -0
  108. package/dist/core/init.d.ts.map +1 -0
  109. package/dist/core/init.js +100 -0
  110. package/dist/core/init.js.map +1 -0
  111. package/dist/core/init.test.d.ts +8 -0
  112. package/dist/core/init.test.d.ts.map +1 -0
  113. package/dist/core/init.test.js +203 -0
  114. package/dist/core/init.test.js.map +1 -0
  115. package/dist/core/invariant-coverage.d.ts +41 -0
  116. package/dist/core/invariant-coverage.d.ts.map +1 -0
  117. package/dist/core/invariant-coverage.js +181 -0
  118. package/dist/core/invariant-coverage.js.map +1 -0
  119. package/dist/core/invariant-coverage.test.d.ts +2 -0
  120. package/dist/core/invariant-coverage.test.d.ts.map +1 -0
  121. package/dist/core/invariant-coverage.test.js +188 -0
  122. package/dist/core/invariant-coverage.test.js.map +1 -0
  123. package/dist/core/meta-invariants.test.d.ts +17 -0
  124. package/dist/core/meta-invariants.test.d.ts.map +1 -0
  125. package/dist/core/meta-invariants.test.js +191 -0
  126. package/dist/core/meta-invariants.test.js.map +1 -0
  127. package/dist/core/node-fs.d.ts +22 -0
  128. package/dist/core/node-fs.d.ts.map +1 -0
  129. package/dist/core/node-fs.js +47 -0
  130. package/dist/core/node-fs.js.map +1 -0
  131. package/dist/core/organon-invariants.test.d.ts +15 -0
  132. package/dist/core/organon-invariants.test.d.ts.map +1 -0
  133. package/dist/core/organon-invariants.test.js +149 -0
  134. package/dist/core/organon-invariants.test.js.map +1 -0
  135. package/dist/core/query.d.ts +35 -0
  136. package/dist/core/query.d.ts.map +1 -0
  137. package/dist/core/query.js +139 -0
  138. package/dist/core/query.js.map +1 -0
  139. package/dist/core/query.test.d.ts +2 -0
  140. package/dist/core/query.test.d.ts.map +1 -0
  141. package/dist/core/query.test.js +97 -0
  142. package/dist/core/query.test.js.map +1 -0
  143. package/dist/core/suggest-tools.d.ts +15 -0
  144. package/dist/core/suggest-tools.d.ts.map +1 -0
  145. package/dist/core/suggest-tools.js +139 -0
  146. package/dist/core/suggest-tools.js.map +1 -0
  147. package/dist/core/suggest-tools.test.d.ts +2 -0
  148. package/dist/core/suggest-tools.test.d.ts.map +1 -0
  149. package/dist/core/suggest-tools.test.js +122 -0
  150. package/dist/core/suggest-tools.test.js.map +1 -0
  151. package/dist/core/test-helpers.d.ts +63 -0
  152. package/dist/core/test-helpers.d.ts.map +1 -0
  153. package/dist/core/test-helpers.js +265 -0
  154. package/dist/core/test-helpers.js.map +1 -0
  155. package/dist/core/types.d.ts +277 -0
  156. package/dist/core/types.d.ts.map +1 -0
  157. package/dist/core/types.js +9 -0
  158. package/dist/core/types.js.map +1 -0
  159. package/dist/core/upgrade.d.ts +46 -0
  160. package/dist/core/upgrade.d.ts.map +1 -0
  161. package/dist/core/upgrade.js +227 -0
  162. package/dist/core/upgrade.js.map +1 -0
  163. package/dist/core/upgrade.test.d.ts +8 -0
  164. package/dist/core/upgrade.test.d.ts.map +1 -0
  165. package/dist/core/upgrade.test.js +370 -0
  166. package/dist/core/upgrade.test.js.map +1 -0
  167. package/dist/core/validate-frontmatter.d.ts +20 -0
  168. package/dist/core/validate-frontmatter.d.ts.map +1 -0
  169. package/dist/core/validate-frontmatter.js +529 -0
  170. package/dist/core/validate-frontmatter.js.map +1 -0
  171. package/dist/core/validate-frontmatter.test.d.ts +2 -0
  172. package/dist/core/validate-frontmatter.test.d.ts.map +1 -0
  173. package/dist/core/validate-frontmatter.test.js +366 -0
  174. package/dist/core/validate-frontmatter.test.js.map +1 -0
  175. package/dist/core/validate-workflow.d.ts +17 -0
  176. package/dist/core/validate-workflow.d.ts.map +1 -0
  177. package/dist/core/validate-workflow.js +233 -0
  178. package/dist/core/validate-workflow.js.map +1 -0
  179. package/dist/core/validate-workflow.test.d.ts +2 -0
  180. package/dist/core/validate-workflow.test.d.ts.map +1 -0
  181. package/dist/core/validate-workflow.test.js +205 -0
  182. package/dist/core/validate-workflow.test.js.map +1 -0
  183. package/dist/core/verify-tier4-tests.d.ts +34 -0
  184. package/dist/core/verify-tier4-tests.d.ts.map +1 -0
  185. package/dist/core/verify-tier4-tests.js +106 -0
  186. package/dist/core/verify-tier4-tests.js.map +1 -0
  187. package/dist/core/verify-tier4-tests.test.d.ts +2 -0
  188. package/dist/core/verify-tier4-tests.test.d.ts.map +1 -0
  189. package/dist/core/verify-tier4-tests.test.js +140 -0
  190. package/dist/core/verify-tier4-tests.test.js.map +1 -0
  191. package/dist/core/verify-triplets.d.ts +17 -0
  192. package/dist/core/verify-triplets.d.ts.map +1 -0
  193. package/dist/core/verify-triplets.js +217 -0
  194. package/dist/core/verify-triplets.js.map +1 -0
  195. package/dist/core/verify-triplets.test.d.ts +2 -0
  196. package/dist/core/verify-triplets.test.d.ts.map +1 -0
  197. package/dist/core/verify-triplets.test.js +147 -0
  198. package/dist/core/verify-triplets.test.js.map +1 -0
  199. package/dist/core/verify.d.ts +19 -0
  200. package/dist/core/verify.d.ts.map +1 -0
  201. package/dist/core/verify.js +162 -0
  202. package/dist/core/verify.js.map +1 -0
  203. package/dist/core/verify.test.d.ts +2 -0
  204. package/dist/core/verify.test.d.ts.map +1 -0
  205. package/dist/core/verify.test.js +147 -0
  206. package/dist/core/verify.test.js.map +1 -0
  207. package/dist/index.d.ts +31 -0
  208. package/dist/index.d.ts.map +1 -0
  209. package/dist/index.js +27 -0
  210. package/dist/index.js.map +1 -0
  211. package/dist/mcp/prompts.d.ts +9 -0
  212. package/dist/mcp/prompts.d.ts.map +1 -0
  213. package/dist/mcp/prompts.js +265 -0
  214. package/dist/mcp/prompts.js.map +1 -0
  215. package/dist/mcp/resources.d.ts +7 -0
  216. package/dist/mcp/resources.d.ts.map +1 -0
  217. package/dist/mcp/resources.js +111 -0
  218. package/dist/mcp/resources.js.map +1 -0
  219. package/dist/mcp/server.d.ts +7 -0
  220. package/dist/mcp/server.d.ts.map +1 -0
  221. package/dist/mcp/server.js +31 -0
  222. package/dist/mcp/server.js.map +1 -0
  223. package/dist/mcp/tools.d.ts +7 -0
  224. package/dist/mcp/tools.d.ts.map +1 -0
  225. package/dist/mcp/tools.js +130 -0
  226. package/dist/mcp/tools.js.map +1 -0
  227. package/dist/templates/config.d.ts +6 -0
  228. package/dist/templates/config.d.ts.map +1 -0
  229. package/dist/templates/config.js +30 -0
  230. package/dist/templates/config.js.map +1 -0
  231. package/dist/templates/index.d.ts +7 -0
  232. package/dist/templates/index.d.ts.map +1 -0
  233. package/dist/templates/index.js +7 -0
  234. package/dist/templates/index.js.map +1 -0
  235. package/dist/templates/organon/claude-md.d.ts +7 -0
  236. package/dist/templates/organon/claude-md.d.ts.map +1 -0
  237. package/dist/templates/organon/claude-md.js +32 -0
  238. package/dist/templates/organon/claude-md.js.map +1 -0
  239. package/dist/templates/organon/ethos.d.ts +5 -0
  240. package/dist/templates/organon/ethos.d.ts.map +1 -0
  241. package/dist/templates/organon/ethos.js +69 -0
  242. package/dist/templates/organon/ethos.js.map +1 -0
  243. package/dist/templates/organon/index.d.ts +10 -0
  244. package/dist/templates/organon/index.d.ts.map +1 -0
  245. package/dist/templates/organon/index.js +10 -0
  246. package/dist/templates/organon/index.js.map +1 -0
  247. package/dist/templates/organon/observations-readme.d.ts +5 -0
  248. package/dist/templates/organon/observations-readme.d.ts.map +1 -0
  249. package/dist/templates/organon/observations-readme.js +25 -0
  250. package/dist/templates/organon/observations-readme.js.map +1 -0
  251. package/dist/templates/organon/philosophy.d.ts +5 -0
  252. package/dist/templates/organon/philosophy.d.ts.map +1 -0
  253. package/dist/templates/organon/philosophy.js +75 -0
  254. package/dist/templates/organon/philosophy.js.map +1 -0
  255. package/dist/templates/organon/protocols.d.ts +7 -0
  256. package/dist/templates/organon/protocols.d.ts.map +1 -0
  257. package/dist/templates/organon/protocols.js +197 -0
  258. package/dist/templates/organon/protocols.js.map +1 -0
  259. package/dist/templates/organon/readme.d.ts +5 -0
  260. package/dist/templates/organon/readme.d.ts.map +1 -0
  261. package/dist/templates/organon/readme.js +40 -0
  262. package/dist/templates/organon/readme.js.map +1 -0
  263. package/dist/templates/skills/domain-feature-design.d.ts +9 -0
  264. package/dist/templates/skills/domain-feature-design.d.ts.map +1 -0
  265. package/dist/templates/skills/domain-feature-design.js +123 -0
  266. package/dist/templates/skills/domain-feature-design.js.map +1 -0
  267. package/dist/templates/skills/index.d.ts +15 -0
  268. package/dist/templates/skills/index.d.ts.map +1 -0
  269. package/dist/templates/skills/index.js +35 -0
  270. package/dist/templates/skills/index.js.map +1 -0
  271. package/dist/templates/skills/organon-file-creation.d.ts +9 -0
  272. package/dist/templates/skills/organon-file-creation.d.ts.map +1 -0
  273. package/dist/templates/skills/organon-file-creation.js +138 -0
  274. package/dist/templates/skills/organon-file-creation.js.map +1 -0
  275. package/dist/templates/skills/quality-review.d.ts +9 -0
  276. package/dist/templates/skills/quality-review.d.ts.map +1 -0
  277. package/dist/templates/skills/quality-review.js +127 -0
  278. package/dist/templates/skills/quality-review.js.map +1 -0
  279. package/dist/templates/skills/session-compounding.d.ts +9 -0
  280. package/dist/templates/skills/session-compounding.d.ts.map +1 -0
  281. package/dist/templates/skills/session-compounding.js +118 -0
  282. package/dist/templates/skills/session-compounding.js.map +1 -0
  283. package/dist/templates/skills/verify-and-health.d.ts +9 -0
  284. package/dist/templates/skills/verify-and-health.d.ts.map +1 -0
  285. package/dist/templates/skills/verify-and-health.js +99 -0
  286. package/dist/templates/skills/verify-and-health.js.map +1 -0
  287. package/package.json +72 -0
@@ -0,0 +1,89 @@
1
+ /**
2
+ * organon validate — Validate organon frontmatter (4-stage validation).
3
+ */
4
+ import chalk from 'chalk';
5
+ import { resolveConfig } from '../../core/config.js';
6
+ import { validateFrontmatter } from '../../core/validate-frontmatter.js';
7
+ import { NodeFileSystem } from '../../core/node-fs.js';
8
+ export const validateCommand = {
9
+ command: 'validate [files..]',
10
+ describe: 'Validate organon frontmatter (schema, references, truthfulness, consistency)',
11
+ builder: (yargs) => {
12
+ return yargs
13
+ .positional('files', {
14
+ describe: 'Specific files to validate (validates all if omitted)',
15
+ type: 'string',
16
+ array: true,
17
+ })
18
+ .option('project-root', {
19
+ describe: 'Project root directory',
20
+ type: 'string',
21
+ default: process.cwd(),
22
+ })
23
+ .option('config', {
24
+ describe: 'Path to organon.config.json',
25
+ type: 'string',
26
+ })
27
+ .option('stages', {
28
+ describe: 'Validation stages to run (1=schema, 2=references, 3=truthfulness, 4=consistency)',
29
+ type: 'array',
30
+ coerce: (arr) => arr.map(Number),
31
+ })
32
+ .example('$0 validate', 'Validate all organon files')
33
+ .example('$0 validate book-llms/ETHOS.md', 'Validate a specific file')
34
+ .example('$0 validate --stages 1 3', 'Run only schema and truthfulness checks');
35
+ },
36
+ handler: async (args) => {
37
+ const fs = new NodeFileSystem();
38
+ const config = await resolveConfig(args['project-root'], fs, args.config);
39
+ const result = await validateFrontmatter({
40
+ projectRoot: args['project-root'],
41
+ config,
42
+ fs,
43
+ files: args.files,
44
+ stages: args.stages,
45
+ });
46
+ // Output results
47
+ console.log(chalk.blue('Organon Validate'));
48
+ console.log();
49
+ console.log(`Files checked: ${result.filesChecked}`);
50
+ for (const fileResult of result.results) {
51
+ if (fileResult.valid && fileResult.warnings.length === 0) {
52
+ console.log(chalk.green(` ✓ ${fileResult.file}`));
53
+ }
54
+ else if (fileResult.valid) {
55
+ console.log(chalk.yellow(` ⚠ ${fileResult.file} (${fileResult.warnings.length} warnings)`));
56
+ for (const w of fileResult.warnings) {
57
+ printDiagnostic(w);
58
+ }
59
+ }
60
+ else {
61
+ console.log(chalk.red(` ✗ ${fileResult.file} (${fileResult.errors.length} errors)`));
62
+ for (const e of fileResult.errors) {
63
+ printDiagnostic(e);
64
+ }
65
+ for (const w of fileResult.warnings) {
66
+ printDiagnostic(w);
67
+ }
68
+ }
69
+ }
70
+ console.log();
71
+ if (result.success) {
72
+ console.log(chalk.green(`✓ All ${result.filesChecked} files passed validation`));
73
+ }
74
+ else {
75
+ console.log(chalk.red(`✗ ${result.filesWithErrors} file(s) failed validation`));
76
+ process.exit(1);
77
+ }
78
+ },
79
+ };
80
+ function printDiagnostic(d) {
81
+ const prefix = d.severity === 'error' ? chalk.red(' ✗') :
82
+ d.severity === 'warning' ? chalk.yellow(' ⚠') :
83
+ chalk.dim(' ℹ');
84
+ console.log(`${prefix} [${d.code}] ${d.message}`);
85
+ if (d.suggestion) {
86
+ console.log(chalk.dim(` → ${d.suggestion}`));
87
+ }
88
+ }
89
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * organon verify — Run verification gates.
3
+ */
4
+ import type { CommandModule } from 'yargs';
5
+ interface VerifyArgs {
6
+ 'project-root': string;
7
+ config?: string;
8
+ gate?: string[];
9
+ }
10
+ export declare const verifyCommand: CommandModule<{}, VerifyArgs>;
11
+ export {};
12
+ //# sourceMappingURL=verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/verify.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAM3C,UAAU,UAAU;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,EAAE,EAAE,UAAU,CA+DvD,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * organon verify — Run verification gates.
3
+ */
4
+ import chalk from 'chalk';
5
+ import { resolveConfig } from '../../core/config.js';
6
+ import { verify } from '../../core/verify.js';
7
+ import { NodeFileSystem } from '../../core/node-fs.js';
8
+ export const verifyCommand = {
9
+ command: 'verify',
10
+ describe: 'Run verification gates (frontmatter, triplets, freshness)',
11
+ builder: (yargs) => {
12
+ return yargs
13
+ .option('project-root', {
14
+ describe: 'Project root directory',
15
+ type: 'string',
16
+ default: process.cwd(),
17
+ })
18
+ .option('config', {
19
+ describe: 'Path to organon.config.json',
20
+ type: 'string',
21
+ })
22
+ .option('gate', {
23
+ describe: 'Run specific gate(s)',
24
+ type: 'array',
25
+ string: true,
26
+ })
27
+ .example('$0 verify', 'Run all verification gates')
28
+ .example('$0 verify --gate frontmatter', 'Run only frontmatter gate')
29
+ .example('$0 verify --gate frontmatter triplets', 'Run specific gates');
30
+ },
31
+ handler: async (args) => {
32
+ const fs = new NodeFileSystem();
33
+ const config = await resolveConfig(args['project-root'], fs, args.config);
34
+ const result = await verify({
35
+ projectRoot: args['project-root'],
36
+ config,
37
+ fs,
38
+ gates: args.gate,
39
+ });
40
+ console.log(chalk.blue('Organon Verify'));
41
+ console.log();
42
+ for (const gate of result.gates) {
43
+ const icon = gate.passed ? chalk.green('✓') : chalk.red('✗');
44
+ console.log(` ${icon} ${gate.gate}`);
45
+ for (const e of gate.errors) {
46
+ const filePrefix = e.file ? `${e.file}: ` : '';
47
+ console.log(chalk.red(` ✗ [${e.code}] ${filePrefix}${e.message}`));
48
+ if (e.suggestion)
49
+ console.log(chalk.dim(` → ${e.suggestion}`));
50
+ }
51
+ for (const w of gate.warnings) {
52
+ const filePrefix = w.file ? `${w.file}: ` : '';
53
+ console.log(chalk.yellow(` ⚠ [${w.code}] ${filePrefix}${w.message}`));
54
+ }
55
+ }
56
+ console.log();
57
+ if (result.success) {
58
+ console.log(chalk.green(`✓ All ${result.gates.length} gate(s) passed`));
59
+ }
60
+ else {
61
+ const failed = result.gates.filter((g) => !g.passed).length;
62
+ console.log(chalk.red(`✗ ${failed} gate(s) failed`));
63
+ process.exit(1);
64
+ }
65
+ },
66
+ };
67
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/cli/commands/verify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Organon CLI — Tools for the Organon Methodology.
4
+ *
5
+ * Commands:
6
+ * init — Bootstrap a new project with Organon structure
7
+ * upgrade — Detect version drift and upgrade project
8
+ * validate — Validate organon frontmatter
9
+ * generate — Auto-generate frontmatter from content
10
+ * query — Query organons by metadata
11
+ * health — Health dashboard
12
+ * find — Cross-domain discovery
13
+ * verify — Run verification gates
14
+ * coverage — Invariant coverage analysis
15
+ * generate-tests — Generate test scaffolds for uncovered invariants
16
+ * mcp — Start MCP server
17
+ */
18
+ export {};
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;GAeG"}
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Organon CLI — Tools for the Organon Methodology.
4
+ *
5
+ * Commands:
6
+ * init — Bootstrap a new project with Organon structure
7
+ * upgrade — Detect version drift and upgrade project
8
+ * validate — Validate organon frontmatter
9
+ * generate — Auto-generate frontmatter from content
10
+ * query — Query organons by metadata
11
+ * health — Health dashboard
12
+ * find — Cross-domain discovery
13
+ * verify — Run verification gates
14
+ * coverage — Invariant coverage analysis
15
+ * generate-tests — Generate test scaffolds for uncovered invariants
16
+ * mcp — Start MCP server
17
+ */
18
+ import yargs from 'yargs';
19
+ import { hideBin } from 'yargs/helpers';
20
+ import chalk from 'chalk';
21
+ import { initCommand } from './commands/init.js';
22
+ import { upgradeCommand } from './commands/upgrade.js';
23
+ import { validateCommand } from './commands/validate.js';
24
+ import { generateCommand } from './commands/generate.js';
25
+ import { queryCommand } from './commands/query.js';
26
+ import { healthCommand } from './commands/health.js';
27
+ import { findCommand } from './commands/find.js';
28
+ import { verifyCommand } from './commands/verify.js';
29
+ import { coverageCommand } from './commands/coverage.js';
30
+ import { generateTestsCommand } from './commands/generate-tests.js';
31
+ import { mcpCommand } from './commands/mcp.js';
32
+ async function main() {
33
+ await yargs(hideBin(process.argv))
34
+ .scriptName('organon')
35
+ .usage('$0 <command> [options]')
36
+ .command(initCommand)
37
+ .command(upgradeCommand)
38
+ .command(validateCommand)
39
+ .command(generateCommand)
40
+ .command(queryCommand)
41
+ .command(healthCommand)
42
+ .command(findCommand)
43
+ .command(verifyCommand)
44
+ .command(coverageCommand)
45
+ .command(generateTestsCommand)
46
+ .command(mcpCommand)
47
+ .demandCommand(1, chalk.red('Please specify a command'))
48
+ .help()
49
+ .alias('h', 'help')
50
+ .version()
51
+ .alias('v', 'version')
52
+ .strict()
53
+ .parse();
54
+ }
55
+ main().catch((error) => {
56
+ console.error(chalk.red('Error:'), error.message);
57
+ process.exit(1);
58
+ });
59
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,KAAK,UAAU,IAAI;IACjB,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC/B,UAAU,CAAC,SAAS,CAAC;SACrB,KAAK,CAAC,wBAAwB,CAAC;SAC/B,OAAO,CAAC,WAAW,CAAC;SACpB,OAAO,CAAC,cAAc,CAAC;SACvB,OAAO,CAAC,eAAe,CAAC;SACxB,OAAO,CAAC,eAAe,CAAC;SACxB,OAAO,CAAC,YAAY,CAAC;SACrB,OAAO,CAAC,aAAa,CAAC;SACtB,OAAO,CAAC,WAAW,CAAC;SACpB,OAAO,CAAC,aAAa,CAAC;SACtB,OAAO,CAAC,eAAe,CAAC;SACxB,OAAO,CAAC,oBAAoB,CAAC;SAC7B,OAAO,CAAC,UAAU,CAAC;SACnB,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;SACvD,IAAI,EAAE;SACN,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC;SAClB,OAAO,EAAE;SACT,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC;SACrB,MAAM,EAAE;SACR,KAAK,EAAE,CAAC;AACb,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Protocol parsing utility.
3
+ *
4
+ * Extracts protocol metadata from PROTOCOL.md / PROTOCOLS.md content
5
+ * by analyzing ## headings, numbered steps, automation tier declarations,
6
+ * and workflow bindings.
7
+ */
8
+ import type { ProtocolEntry } from './types.js';
9
+ /**
10
+ * Parse protocol entries from markdown content.
11
+ * Looks for patterns like:
12
+ * ### PROTO-XXX-N: Protocol Name
13
+ * or ## Protocol: Name
14
+ * followed by steps, automation tier, etc.
15
+ */
16
+ export declare function parseProtocols(content: string): ProtocolEntry[];
17
+ //# sourceMappingURL=add-protocols-array.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-protocols-array.d.ts","sourceRoot":"","sources":["../../src/core/add-protocols-array.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAA8B,aAAa,EAAE,MAAM,YAAY,CAAC;AAE5E;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CAyC/D"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Protocol parsing utility.
3
+ *
4
+ * Extracts protocol metadata from PROTOCOL.md / PROTOCOLS.md content
5
+ * by analyzing ## headings, numbered steps, automation tier declarations,
6
+ * and workflow bindings.
7
+ */
8
+ /**
9
+ * Parse protocol entries from markdown content.
10
+ * Looks for patterns like:
11
+ * ### PROTO-XXX-N: Protocol Name
12
+ * or ## Protocol: Name
13
+ * followed by steps, automation tier, etc.
14
+ */
15
+ export function parseProtocols(content) {
16
+ const protocols = [];
17
+ // Split by protocol headers (### PROTO-XXX-N or ## Protocol N:)
18
+ const protocolPattern = /^#{2,3}\s+(?:Protocol\s*:?\s*)?(?<id>PROTO-[\w-]+(?:-\d+)?)\s*[:\-–—]\s*(?<name>.+)$/gm;
19
+ let match;
20
+ const allMatches = [];
21
+ while ((match = protocolPattern.exec(content)) !== null) {
22
+ allMatches.push({
23
+ id: match.groups.id,
24
+ name: match.groups.name.trim(),
25
+ startIndex: match.index + match[0].length,
26
+ });
27
+ }
28
+ for (let i = 0; i < allMatches.length; i++) {
29
+ const current = allMatches[i];
30
+ const endIndex = i + 1 < allMatches.length
31
+ ? allMatches[i + 1].startIndex - allMatches[i + 1].id.length - 10
32
+ : content.length;
33
+ const section = content.slice(current.startIndex, endIndex);
34
+ const steps = countSteps(section);
35
+ const automationTier = detectAutomationTier(section);
36
+ const workflow = extractWorkflow(section);
37
+ const tools = extractTools(section);
38
+ const complexity = inferComplexity(steps, automationTier);
39
+ protocols.push({
40
+ id: current.id,
41
+ name: current.name,
42
+ steps,
43
+ automation_tier: automationTier,
44
+ ...(workflow ? { workflow } : {}),
45
+ ...(tools.length > 0 ? { tools } : {}),
46
+ complexity,
47
+ });
48
+ }
49
+ return protocols;
50
+ }
51
+ function countSteps(section) {
52
+ const lines = section.split('\n');
53
+ let count = 0;
54
+ for (const line of lines) {
55
+ const trimmed = line.trim();
56
+ // Count numbered steps: "1. ", "2. ", etc.
57
+ if (/^\d+\.\s/.test(trimmed)) {
58
+ count++;
59
+ }
60
+ }
61
+ return Math.max(count, 1); // At least 1 step
62
+ }
63
+ function detectAutomationTier(section) {
64
+ const lower = section.toLowerCase();
65
+ if (/automation[_\s]?tier\s*:\s*automated/i.test(section))
66
+ return 'automated';
67
+ if (/automation[_\s]?tier\s*:\s*semi[_-]?automated/i.test(section))
68
+ return 'semi-automated';
69
+ if (/automation[_\s]?tier\s*:\s*manual/i.test(section))
70
+ return 'manual';
71
+ // Infer from content
72
+ if (lower.includes('workflow:') || lower.includes('workflow binding'))
73
+ return 'automated';
74
+ if (lower.includes('run the') || lower.includes('execute'))
75
+ return 'semi-automated';
76
+ return 'manual';
77
+ }
78
+ function extractWorkflow(section) {
79
+ const match = section.match(/workflow\s*:\s*(\S+)/i);
80
+ return match ? match[1] : undefined;
81
+ }
82
+ function extractTools(section) {
83
+ const match = section.match(/tools?\s*:\s*\[([^\]]+)\]/i);
84
+ if (!match)
85
+ return [];
86
+ return match[1].split(',').map((t) => t.trim().replace(/['"]/g, '')).filter(Boolean);
87
+ }
88
+ function inferComplexity(steps, tier) {
89
+ if (steps >= 8 || tier === 'automated')
90
+ return 'high';
91
+ if (steps >= 4 || tier === 'semi-automated')
92
+ return 'medium';
93
+ return 'low';
94
+ }
95
+ //# sourceMappingURL=add-protocols-array.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-protocols-array.js","sourceRoot":"","sources":["../../src/core/add-protocols-array.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=add-protocols-array.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-protocols-array.test.d.ts","sourceRoot":"","sources":["../../src/core/add-protocols-array.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,86 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { parseProtocols } from './add-protocols-array.js';
3
+ describe('parseProtocols', () => {
4
+ it('parses protocol entries from markdown', () => {
5
+ const content = `
6
+ ### PROTO-RFC-1: RFC Implementation
7
+
8
+ 1. Create RFC document
9
+ 2. Write impact section
10
+ 3. Get review
11
+ 4. Implement
12
+ 5. Update organon
13
+ 6. Merge
14
+
15
+ Automation tier: automated
16
+ Workflow: implement-rfc
17
+ Tools: [rfc:context, rfc:verify]
18
+ `;
19
+ const protocols = parseProtocols(content);
20
+ expect(protocols).toHaveLength(1);
21
+ expect(protocols[0].id).toBe('PROTO-RFC-1');
22
+ expect(protocols[0].name).toBe('RFC Implementation');
23
+ expect(protocols[0].steps).toBe(6);
24
+ expect(protocols[0].automation_tier).toBe('automated');
25
+ expect(protocols[0].workflow).toBe('implement-rfc');
26
+ expect(protocols[0].tools).toEqual(['rfc:context', 'rfc:verify']);
27
+ });
28
+ it('parses multiple protocols', () => {
29
+ const content = `
30
+ ### PROTO-REV-1: Code Review
31
+
32
+ 1. Load constraints
33
+ 2. Check violations
34
+ 3. Report
35
+
36
+ ### PROTO-DEP-1: Deploy
37
+
38
+ 1. Build
39
+ 2. Test
40
+ 3. Deploy
41
+ 4. Verify
42
+ 5. Monitor
43
+ `;
44
+ const protocols = parseProtocols(content);
45
+ expect(protocols).toHaveLength(2);
46
+ expect(protocols[0].id).toBe('PROTO-REV-1');
47
+ expect(protocols[1].id).toBe('PROTO-DEP-1');
48
+ });
49
+ it('infers complexity from steps and tier', () => {
50
+ const content = `
51
+ ### PROTO-SIMPLE-1: Simple Task
52
+
53
+ 1. Do thing
54
+
55
+ ### PROTO-COMPLEX-1: Complex Task
56
+
57
+ 1. Step 1
58
+ 2. Step 2
59
+ 3. Step 3
60
+ 4. Step 4
61
+ 5. Step 5
62
+ 6. Step 6
63
+ 7. Step 7
64
+ 8. Step 8
65
+ `;
66
+ const protocols = parseProtocols(content);
67
+ expect(protocols[0].complexity).toBe('low');
68
+ expect(protocols[1].complexity).toBe('high');
69
+ });
70
+ it('returns empty for no protocols', () => {
71
+ const content = '# Just a heading\n\nSome content.';
72
+ const protocols = parseProtocols(content);
73
+ expect(protocols).toHaveLength(0);
74
+ });
75
+ it('defaults to manual automation tier', () => {
76
+ const content = `
77
+ ### PROTO-MAN-1: Manual Process
78
+
79
+ 1. Think about it
80
+ 2. Do it
81
+ `;
82
+ const protocols = parseProtocols(content);
83
+ expect(protocols[0].automation_tier).toBe('manual');
84
+ });
85
+ });
86
+ //# sourceMappingURL=add-protocols-array.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-protocols-array.test.js","sourceRoot":"","sources":["../../src/core/add-protocols-array.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,OAAO,GAAG;;;;;;;;;;;;;CAanB,CAAC;QAEE,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACrD,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACvD,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACpD,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,OAAO,GAAG;;;;;;;;;;;;;;CAcnB,CAAC;QAEE,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;CAenB,CAAC;QAEE,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,OAAO,GAAG,mCAAmC,CAAC;QACpD,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,OAAO,GAAG;;;;;CAKnB,CAAC;QAEE,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * OrganonConfig resolution.
3
+ *
4
+ * Discovery order:
5
+ * 1. Explicit config file path (--config flag)
6
+ * 2. organon.config.json in projectRoot
7
+ * 3. Convention-based defaults (scan for organon/, .claude/skills/, etc.)
8
+ */
9
+ import { z } from 'zod';
10
+ import type { FileSystem, OrganonConfig } from './types.js';
11
+ declare const ConfigFileSchema: z.ZodObject<{
12
+ methodology_version: z.ZodOptional<z.ZodString>;
13
+ organonPaths: z.ZodOptional<z.ZodArray<z.ZodString>>;
14
+ organonGlobs: z.ZodOptional<z.ZodArray<z.ZodString>>;
15
+ ignorePatterns: z.ZodOptional<z.ZodArray<z.ZodString>>;
16
+ workflowPaths: z.ZodOptional<z.ZodObject<{
17
+ claudeCode: z.ZodOptional<z.ZodString>;
18
+ cursor: z.ZodOptional<z.ZodString>;
19
+ generic: z.ZodOptional<z.ZodString>;
20
+ }, z.core.$strict>>;
21
+ freshnessThresholdHours: z.ZodOptional<z.ZodNumber>;
22
+ testGlobs: z.ZodOptional<z.ZodArray<z.ZodString>>;
23
+ testIgnorePatterns: z.ZodOptional<z.ZodArray<z.ZodString>>;
24
+ }, z.core.$strict>;
25
+ export type ConfigFile = z.infer<typeof ConfigFileSchema>;
26
+ /**
27
+ * Resolve config by merging file-based config with convention defaults.
28
+ */
29
+ export declare function resolveConfig(projectRoot: string, fs: FileSystem, configPath?: string): Promise<OrganonConfig>;
30
+ /**
31
+ * Simple path join that handles both / and \ separators.
32
+ * Avoids importing node:path in the core module.
33
+ */
34
+ export declare function joinPath(...segments: string[]): string;
35
+ /**
36
+ * Get the directory portion of a path.
37
+ */
38
+ export declare function dirName(path: string): string;
39
+ /**
40
+ * Get the filename from a path.
41
+ */
42
+ export declare function baseName(path: string): string;
43
+ export {};
44
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAU5D,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;kBASX,CAAC;AAEZ,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AA+B1D;;GAEG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,UAAU,EACd,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,CAAC,CAyBxB;AAqCD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAKtD;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK5C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI7C"}