solvdex 1.0.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 (113) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +274 -0
  3. package/dist/hooks/error-lookup.d.ts +4 -0
  4. package/dist/hooks/error-lookup.d.ts.map +1 -0
  5. package/dist/hooks/error-lookup.js +92 -0
  6. package/dist/hooks/error-lookup.js.map +1 -0
  7. package/dist/hooks/post-task.d.ts +15 -0
  8. package/dist/hooks/post-task.d.ts.map +1 -0
  9. package/dist/hooks/post-task.js +246 -0
  10. package/dist/hooks/post-task.js.map +1 -0
  11. package/dist/hooks/prompt-enrich.d.ts +16 -0
  12. package/dist/hooks/prompt-enrich.d.ts.map +1 -0
  13. package/dist/hooks/prompt-enrich.js +141 -0
  14. package/dist/hooks/prompt-enrich.js.map +1 -0
  15. package/dist/hooks/session-start-cli.d.ts +3 -0
  16. package/dist/hooks/session-start-cli.d.ts.map +1 -0
  17. package/dist/hooks/session-start-cli.js +81 -0
  18. package/dist/hooks/session-start-cli.js.map +1 -0
  19. package/dist/hooks/session-start.d.ts +4 -0
  20. package/dist/hooks/session-start.d.ts.map +1 -0
  21. package/dist/hooks/session-start.js +134 -0
  22. package/dist/hooks/session-start.js.map +1 -0
  23. package/dist/src/audit.d.ts +63 -0
  24. package/dist/src/audit.d.ts.map +1 -0
  25. package/dist/src/audit.js +229 -0
  26. package/dist/src/audit.js.map +1 -0
  27. package/dist/src/cache.d.ts +54 -0
  28. package/dist/src/cache.d.ts.map +1 -0
  29. package/dist/src/cache.js +167 -0
  30. package/dist/src/cache.js.map +1 -0
  31. package/dist/src/config.d.ts +52 -0
  32. package/dist/src/config.d.ts.map +1 -0
  33. package/dist/src/config.js +175 -0
  34. package/dist/src/config.js.map +1 -0
  35. package/dist/src/entry.d.ts +154 -0
  36. package/dist/src/entry.d.ts.map +1 -0
  37. package/dist/src/entry.js +469 -0
  38. package/dist/src/entry.js.map +1 -0
  39. package/dist/src/errors.d.ts +65 -0
  40. package/dist/src/errors.d.ts.map +1 -0
  41. package/dist/src/errors.js +121 -0
  42. package/dist/src/errors.js.map +1 -0
  43. package/dist/src/frontmatter.d.ts +28 -0
  44. package/dist/src/frontmatter.d.ts.map +1 -0
  45. package/dist/src/frontmatter.js +111 -0
  46. package/dist/src/frontmatter.js.map +1 -0
  47. package/dist/src/index.d.ts +35 -0
  48. package/dist/src/index.d.ts.map +1 -0
  49. package/dist/src/index.js +188 -0
  50. package/dist/src/index.js.map +1 -0
  51. package/dist/src/maturity.d.ts +31 -0
  52. package/dist/src/maturity.d.ts.map +1 -0
  53. package/dist/src/maturity.js +96 -0
  54. package/dist/src/maturity.js.map +1 -0
  55. package/dist/src/quality.d.ts +23 -0
  56. package/dist/src/quality.d.ts.map +1 -0
  57. package/dist/src/quality.js +236 -0
  58. package/dist/src/quality.js.map +1 -0
  59. package/dist/src/search.d.ts +35 -0
  60. package/dist/src/search.d.ts.map +1 -0
  61. package/dist/src/search.js +263 -0
  62. package/dist/src/search.js.map +1 -0
  63. package/dist/src/similarity.d.ts +42 -0
  64. package/dist/src/similarity.d.ts.map +1 -0
  65. package/dist/src/similarity.js +111 -0
  66. package/dist/src/similarity.js.map +1 -0
  67. package/dist/src/stats.d.ts +56 -0
  68. package/dist/src/stats.d.ts.map +1 -0
  69. package/dist/src/stats.js +198 -0
  70. package/dist/src/stats.js.map +1 -0
  71. package/dist/src/templates.d.ts +63 -0
  72. package/dist/src/templates.d.ts.map +1 -0
  73. package/dist/src/templates.js +347 -0
  74. package/dist/src/templates.js.map +1 -0
  75. package/dist/src/transfer.d.ts +92 -0
  76. package/dist/src/transfer.d.ts.map +1 -0
  77. package/dist/src/transfer.js +215 -0
  78. package/dist/src/transfer.js.map +1 -0
  79. package/dist/src/types.d.ts +270 -0
  80. package/dist/src/types.d.ts.map +1 -0
  81. package/dist/src/types.js +153 -0
  82. package/dist/src/types.js.map +1 -0
  83. package/dist/src/validate.d.ts +90 -0
  84. package/dist/src/validate.d.ts.map +1 -0
  85. package/dist/src/validate.js +295 -0
  86. package/dist/src/validate.js.map +1 -0
  87. package/hooks/error-lookup.ts +110 -0
  88. package/hooks/hooks.json +49 -0
  89. package/hooks/post-task.ts +309 -0
  90. package/hooks/prompt-enrich.ts +162 -0
  91. package/hooks/session-start-cli.ts +96 -0
  92. package/hooks/session-start.ts +159 -0
  93. package/package.json +40 -0
  94. package/scripts/error-lookup.py +64 -0
  95. package/scripts/post-task.py +60 -0
  96. package/scripts/prompt-enrich.py +64 -0
  97. package/scripts/session-start.py +64 -0
  98. package/skills/wiki/SKILL.md +61 -0
  99. package/skills/wiki-add/SKILL.md +90 -0
  100. package/skills/wiki-browse/SKILL.md +108 -0
  101. package/skills/wiki-capture/SKILL.md +265 -0
  102. package/skills/wiki-explorer/SKILL.md +223 -0
  103. package/skills/wiki-export/SKILL.md +101 -0
  104. package/skills/wiki-fix/SKILL.md +86 -0
  105. package/skills/wiki-flag/SKILL.md +47 -0
  106. package/skills/wiki-import/SKILL.md +128 -0
  107. package/skills/wiki-init/SKILL.md +72 -0
  108. package/skills/wiki-scan/SKILL.md +98 -0
  109. package/skills/wiki-search/SKILL.md +86 -0
  110. package/skills/wiki-stats/SKILL.md +129 -0
  111. package/skills/wiki-status/SKILL.md +78 -0
  112. package/skills/wiki-test-trigger/SKILL.md +173 -0
  113. package/skills/wiki-validate/SKILL.md +62 -0
@@ -0,0 +1,28 @@
1
+ import { EntryFrontmatter } from './types.js';
2
+ export interface ParsedEntry {
3
+ frontmatter: EntryFrontmatter;
4
+ content: string;
5
+ }
6
+ /**
7
+ * Parses a markdown file with YAML frontmatter.
8
+ *
9
+ * @param fileContent - The raw file content including frontmatter
10
+ * @returns Parsed frontmatter data and content body
11
+ */
12
+ export declare function parseFrontmatter(fileContent: string): ParsedEntry;
13
+ /**
14
+ * Converts frontmatter and content back to a markdown file string.
15
+ *
16
+ * @param frontmatter - The frontmatter object to serialize
17
+ * @param content - The markdown content body
18
+ * @returns Complete file content with YAML frontmatter
19
+ */
20
+ export declare function stringifyFrontmatter(frontmatter: EntryFrontmatter, content: string): string;
21
+ /**
22
+ * Validates that an unknown object conforms to EntryFrontmatter structure.
23
+ *
24
+ * @param frontmatter - Unknown value to validate
25
+ * @returns Type predicate indicating if value is valid EntryFrontmatter
26
+ */
27
+ export declare function validateFrontmatter(frontmatter: unknown): frontmatter is EntryFrontmatter;
28
+ //# sourceMappingURL=frontmatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../../src/frontmatter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG9C,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,gBAAgB,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AA0CD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,CAcjE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,gBAAgB,EAC7B,OAAO,EAAE,MAAM,GACd,MAAM,CAER;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,OAAO,GAAG,WAAW,IAAI,gBAAgB,CAqCzF"}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.parseFrontmatter = parseFrontmatter;
7
+ exports.stringifyFrontmatter = stringifyFrontmatter;
8
+ exports.validateFrontmatter = validateFrontmatter;
9
+ // src/frontmatter.ts
10
+ const gray_matter_1 = __importDefault(require("gray-matter"));
11
+ const errors_js_1 = require("./errors.js");
12
+ /**
13
+ * Normalizes a date value to ISO string format (YYYY-MM-DD).
14
+ * Handles both Date objects (from YAML parsing) and strings.
15
+ */
16
+ function normalizeDate(value) {
17
+ if (value instanceof Date) {
18
+ return value.toISOString().split('T')[0];
19
+ }
20
+ if (typeof value === 'string') {
21
+ return value;
22
+ }
23
+ return '';
24
+ }
25
+ /**
26
+ * Normalizes all date fields in frontmatter to strings.
27
+ * YAML parsers often convert dates to Date objects.
28
+ */
29
+ function normalizeFrontmatter(data) {
30
+ const result = { ...data };
31
+ // Normalize top-level date fields
32
+ if (data.created) {
33
+ result.created = normalizeDate(data.created);
34
+ }
35
+ if (data.updated) {
36
+ result.updated = normalizeDate(data.updated);
37
+ }
38
+ // Normalize audit entry dates
39
+ if (Array.isArray(data.audit)) {
40
+ result.audit = data.audit.map((entry) => ({
41
+ ...entry,
42
+ date: normalizeDate(entry.date)
43
+ }));
44
+ }
45
+ return result;
46
+ }
47
+ /**
48
+ * Parses a markdown file with YAML frontmatter.
49
+ *
50
+ * @param fileContent - The raw file content including frontmatter
51
+ * @returns Parsed frontmatter data and content body
52
+ */
53
+ function parseFrontmatter(fileContent) {
54
+ try {
55
+ const { data, content } = (0, gray_matter_1.default)(fileContent);
56
+ return {
57
+ frontmatter: normalizeFrontmatter(data),
58
+ content: content.trim()
59
+ };
60
+ }
61
+ catch (error) {
62
+ throw new errors_js_1.FrontmatterError(`Failed to parse frontmatter: ${error instanceof Error ? error.message : String(error)}`, 'unknown');
63
+ }
64
+ }
65
+ /**
66
+ * Converts frontmatter and content back to a markdown file string.
67
+ *
68
+ * @param frontmatter - The frontmatter object to serialize
69
+ * @param content - The markdown content body
70
+ * @returns Complete file content with YAML frontmatter
71
+ */
72
+ function stringifyFrontmatter(frontmatter, content) {
73
+ return gray_matter_1.default.stringify(content, frontmatter);
74
+ }
75
+ /**
76
+ * Validates that an unknown object conforms to EntryFrontmatter structure.
77
+ *
78
+ * @param frontmatter - Unknown value to validate
79
+ * @returns Type predicate indicating if value is valid EntryFrontmatter
80
+ */
81
+ function validateFrontmatter(frontmatter) {
82
+ if (typeof frontmatter !== 'object' || frontmatter === null) {
83
+ return false;
84
+ }
85
+ const fm = frontmatter;
86
+ // Required fields validation
87
+ if (typeof fm.title !== 'string') {
88
+ return false;
89
+ }
90
+ if (typeof fm.created !== 'string') {
91
+ return false;
92
+ }
93
+ if (typeof fm.updated !== 'string') {
94
+ return false;
95
+ }
96
+ // Status must be one of the valid values
97
+ const validStatuses = ['active', 'flagged', 'deprecated'];
98
+ if (!validStatuses.includes(fm.status)) {
99
+ return false;
100
+ }
101
+ // Confidence must be a number between 0-100
102
+ if (typeof fm.confidence !== 'number' || fm.confidence < 0 || fm.confidence > 100) {
103
+ return false;
104
+ }
105
+ // Tags must be an array
106
+ if (!Array.isArray(fm.tags)) {
107
+ return false;
108
+ }
109
+ return true;
110
+ }
111
+ //# sourceMappingURL=frontmatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/frontmatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ export * from './types.js';
2
+ export type { EntryMaturity } from './types.js';
3
+ export { MATURITY_RULES, CONFIDENCE_BY_MATURITY } from './types.js';
4
+ export { SolvdexError, WikiNotInitializedError, EntryNotFoundError, ValidationError, FileSystemError, ConfigError, FrontmatterError, RegexError, CacheError, wrapFileOperation } from './errors.js';
5
+ export { getCachedEntry, setCachedEntry, invalidateCache, clearCache, getCacheStats } from './cache.js';
6
+ export { getDefaultConfig, getDefaultConfidence, getWikiPath, getConfigPath, wikiExists, readConfig, writeConfig, addCategory } from './config.js';
7
+ export { slugify, createEntry, createEntryWithValidation, readEntry, updateEntry, listEntries, deleteEntry, checkDuplicate, recordEntryUsage, getRelatedEntries, setRelatedEntries, type CreateEntryOptions, type CreateEntryResult, type UpdateEntryOptions, type AuditContext, type ListEntriesOptions } from './entry.js';
8
+ export { stringSimilarity, tagSimilarity, checkForDuplicate, findRelatedEntries, type DuplicateCheckResult } from './similarity.js';
9
+ export { getStats, getExtendedStats, applyConfidenceDecay, type ExtendedWikiStats } from './stats.js';
10
+ export { exportWiki, exportWikiToFile, importWiki, importWikiFromFile, mergeWikis, type WikiExport, type WikiExportEntry, type ExportOptions, type ImportOptions, type ImportResult } from './transfer.js';
11
+ export { parseFrontmatter, stringifyFrontmatter, validateFrontmatter, type ParsedEntry } from './frontmatter.js';
12
+ export { searchWiki, matchTrigger, getBestMatch, type SearchOptions } from './search.js';
13
+ export { validateEntry, validateWiki, flagEntry, deprecateEntry, adjustConfidence, markSolutionWorked, markSolutionFailed, type ValidationIssueType, type ValidationIssue, type ValidationReport, type ConfidenceDirection } from './validate.js';
14
+ export { logAudit, readAuditLog, getEntryAuditHistory, generateAuditReport, type AuditLogEntry, type ReadAuditLogOptions, type AuditReport } from './audit.js';
15
+ export { validateEntryQuality, validateAllEntryQuality, type QualityIssue, type QualityIssueType } from './quality.js';
16
+ export { calculateMaturity, shouldPromoteMaturity, getConfidenceForMaturity } from './maturity.js';
17
+ export { getTemplate, generateStubContent, generateOverviewContent, generateWikiReadme, getAvailableTemplates, hasTemplate, getCategoryDescription, CATEGORY_TEMPLATES, type TemplateSection } from './templates.js';
18
+ /**
19
+ * Initializes a new wiki in the specified project directory.
20
+ *
21
+ * Creates a minimal wiki structure:
22
+ * - .wiki directory
23
+ * - README.md with usage instructions
24
+ * - Category subdirectories (issues, patterns, gotchas)
25
+ *
26
+ * @param projectRoot - The root directory of the project
27
+ * @throws Error if wiki already exists in the project
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * initWiki('/path/to/my-project');
32
+ * ```
33
+ */
34
+ export declare function initWiki(projectRoot: string): void;
35
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAOA,cAAc,YAAY,CAAC;AAG3B,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAGpE,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,cAAc,EACd,cAAc,EACd,eAAe,EACf,UAAU,EACV,aAAa,EACd,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,EACX,aAAa,EACb,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACZ,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,OAAO,EACP,WAAW,EACX,yBAAyB,EACzB,SAAS,EACT,WAAW,EACX,WAAW,EACX,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACxB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,oBAAoB,EAC1B,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,oBAAoB,EACpB,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,UAAU,EACV,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACzB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACtB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACzB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,EACX,sBAAsB,EACtB,kBAAkB,EAClB,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAC;AAOxB;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAoBlD"}
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+ // src/index.ts
3
+ // Main entry point - re-exports all modules and provides convenience functions
4
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
+ if (k2 === undefined) k2 = k;
6
+ var desc = Object.getOwnPropertyDescriptor(m, k);
7
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
8
+ desc = { enumerable: true, get: function() { return m[k]; } };
9
+ }
10
+ Object.defineProperty(o, k2, desc);
11
+ }) : (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ o[k2] = m[k];
14
+ }));
15
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
16
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
17
+ }) : function(o, v) {
18
+ o["default"] = v;
19
+ });
20
+ var __importStar = (this && this.__importStar) || (function () {
21
+ var ownKeys = function(o) {
22
+ ownKeys = Object.getOwnPropertyNames || function (o) {
23
+ var ar = [];
24
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
25
+ return ar;
26
+ };
27
+ return ownKeys(o);
28
+ };
29
+ return function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ })();
37
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
38
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
39
+ };
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.stringifyFrontmatter = exports.parseFrontmatter = exports.mergeWikis = exports.importWikiFromFile = exports.importWiki = exports.exportWikiToFile = exports.exportWiki = exports.applyConfidenceDecay = exports.getExtendedStats = exports.getStats = exports.findRelatedEntries = exports.checkForDuplicate = exports.tagSimilarity = exports.stringSimilarity = exports.setRelatedEntries = exports.getRelatedEntries = exports.recordEntryUsage = exports.checkDuplicate = exports.deleteEntry = exports.listEntries = exports.updateEntry = exports.readEntry = exports.createEntryWithValidation = exports.createEntry = exports.slugify = exports.addCategory = exports.writeConfig = exports.readConfig = exports.wikiExists = exports.getConfigPath = exports.getWikiPath = exports.getDefaultConfidence = exports.getDefaultConfig = exports.getCacheStats = exports.clearCache = exports.invalidateCache = exports.setCachedEntry = exports.getCachedEntry = exports.wrapFileOperation = exports.CacheError = exports.RegexError = exports.FrontmatterError = exports.ConfigError = exports.FileSystemError = exports.ValidationError = exports.EntryNotFoundError = exports.WikiNotInitializedError = exports.SolvdexError = exports.CONFIDENCE_BY_MATURITY = exports.MATURITY_RULES = void 0;
42
+ exports.CATEGORY_TEMPLATES = exports.getCategoryDescription = exports.hasTemplate = exports.getAvailableTemplates = exports.generateWikiReadme = exports.generateOverviewContent = exports.generateStubContent = exports.getTemplate = exports.getConfidenceForMaturity = exports.shouldPromoteMaturity = exports.calculateMaturity = exports.validateAllEntryQuality = exports.validateEntryQuality = exports.generateAuditReport = exports.getEntryAuditHistory = exports.readAuditLog = exports.logAudit = exports.markSolutionFailed = exports.markSolutionWorked = exports.adjustConfidence = exports.deprecateEntry = exports.flagEntry = exports.validateWiki = exports.validateEntry = exports.getBestMatch = exports.matchTrigger = exports.searchWiki = exports.validateFrontmatter = void 0;
43
+ exports.initWiki = initWiki;
44
+ const fs = __importStar(require("fs"));
45
+ const path = __importStar(require("path"));
46
+ // Re-export all types (includes hook output interfaces and validation functions)
47
+ __exportStar(require("./types.js"), exports);
48
+ var types_js_1 = require("./types.js");
49
+ Object.defineProperty(exports, "MATURITY_RULES", { enumerable: true, get: function () { return types_js_1.MATURITY_RULES; } });
50
+ Object.defineProperty(exports, "CONFIDENCE_BY_MATURITY", { enumerable: true, get: function () { return types_js_1.CONFIDENCE_BY_MATURITY; } });
51
+ // Re-export error classes
52
+ var errors_js_1 = require("./errors.js");
53
+ Object.defineProperty(exports, "SolvdexError", { enumerable: true, get: function () { return errors_js_1.SolvdexError; } });
54
+ Object.defineProperty(exports, "WikiNotInitializedError", { enumerable: true, get: function () { return errors_js_1.WikiNotInitializedError; } });
55
+ Object.defineProperty(exports, "EntryNotFoundError", { enumerable: true, get: function () { return errors_js_1.EntryNotFoundError; } });
56
+ Object.defineProperty(exports, "ValidationError", { enumerable: true, get: function () { return errors_js_1.ValidationError; } });
57
+ Object.defineProperty(exports, "FileSystemError", { enumerable: true, get: function () { return errors_js_1.FileSystemError; } });
58
+ Object.defineProperty(exports, "ConfigError", { enumerable: true, get: function () { return errors_js_1.ConfigError; } });
59
+ Object.defineProperty(exports, "FrontmatterError", { enumerable: true, get: function () { return errors_js_1.FrontmatterError; } });
60
+ Object.defineProperty(exports, "RegexError", { enumerable: true, get: function () { return errors_js_1.RegexError; } });
61
+ Object.defineProperty(exports, "CacheError", { enumerable: true, get: function () { return errors_js_1.CacheError; } });
62
+ Object.defineProperty(exports, "wrapFileOperation", { enumerable: true, get: function () { return errors_js_1.wrapFileOperation; } });
63
+ // Re-export cache functions
64
+ var cache_js_1 = require("./cache.js");
65
+ Object.defineProperty(exports, "getCachedEntry", { enumerable: true, get: function () { return cache_js_1.getCachedEntry; } });
66
+ Object.defineProperty(exports, "setCachedEntry", { enumerable: true, get: function () { return cache_js_1.setCachedEntry; } });
67
+ Object.defineProperty(exports, "invalidateCache", { enumerable: true, get: function () { return cache_js_1.invalidateCache; } });
68
+ Object.defineProperty(exports, "clearCache", { enumerable: true, get: function () { return cache_js_1.clearCache; } });
69
+ Object.defineProperty(exports, "getCacheStats", { enumerable: true, get: function () { return cache_js_1.getCacheStats; } });
70
+ // Re-export config functions
71
+ var config_js_1 = require("./config.js");
72
+ Object.defineProperty(exports, "getDefaultConfig", { enumerable: true, get: function () { return config_js_1.getDefaultConfig; } });
73
+ Object.defineProperty(exports, "getDefaultConfidence", { enumerable: true, get: function () { return config_js_1.getDefaultConfidence; } });
74
+ Object.defineProperty(exports, "getWikiPath", { enumerable: true, get: function () { return config_js_1.getWikiPath; } });
75
+ Object.defineProperty(exports, "getConfigPath", { enumerable: true, get: function () { return config_js_1.getConfigPath; } });
76
+ Object.defineProperty(exports, "wikiExists", { enumerable: true, get: function () { return config_js_1.wikiExists; } });
77
+ Object.defineProperty(exports, "readConfig", { enumerable: true, get: function () { return config_js_1.readConfig; } });
78
+ Object.defineProperty(exports, "writeConfig", { enumerable: true, get: function () { return config_js_1.writeConfig; } });
79
+ Object.defineProperty(exports, "addCategory", { enumerable: true, get: function () { return config_js_1.addCategory; } });
80
+ // Re-export entry functions
81
+ var entry_js_1 = require("./entry.js");
82
+ Object.defineProperty(exports, "slugify", { enumerable: true, get: function () { return entry_js_1.slugify; } });
83
+ Object.defineProperty(exports, "createEntry", { enumerable: true, get: function () { return entry_js_1.createEntry; } });
84
+ Object.defineProperty(exports, "createEntryWithValidation", { enumerable: true, get: function () { return entry_js_1.createEntryWithValidation; } });
85
+ Object.defineProperty(exports, "readEntry", { enumerable: true, get: function () { return entry_js_1.readEntry; } });
86
+ Object.defineProperty(exports, "updateEntry", { enumerable: true, get: function () { return entry_js_1.updateEntry; } });
87
+ Object.defineProperty(exports, "listEntries", { enumerable: true, get: function () { return entry_js_1.listEntries; } });
88
+ Object.defineProperty(exports, "deleteEntry", { enumerable: true, get: function () { return entry_js_1.deleteEntry; } });
89
+ Object.defineProperty(exports, "checkDuplicate", { enumerable: true, get: function () { return entry_js_1.checkDuplicate; } });
90
+ Object.defineProperty(exports, "recordEntryUsage", { enumerable: true, get: function () { return entry_js_1.recordEntryUsage; } });
91
+ Object.defineProperty(exports, "getRelatedEntries", { enumerable: true, get: function () { return entry_js_1.getRelatedEntries; } });
92
+ Object.defineProperty(exports, "setRelatedEntries", { enumerable: true, get: function () { return entry_js_1.setRelatedEntries; } });
93
+ // Re-export similarity functions
94
+ var similarity_js_1 = require("./similarity.js");
95
+ Object.defineProperty(exports, "stringSimilarity", { enumerable: true, get: function () { return similarity_js_1.stringSimilarity; } });
96
+ Object.defineProperty(exports, "tagSimilarity", { enumerable: true, get: function () { return similarity_js_1.tagSimilarity; } });
97
+ Object.defineProperty(exports, "checkForDuplicate", { enumerable: true, get: function () { return similarity_js_1.checkForDuplicate; } });
98
+ Object.defineProperty(exports, "findRelatedEntries", { enumerable: true, get: function () { return similarity_js_1.findRelatedEntries; } });
99
+ // Re-export stats functions
100
+ var stats_js_1 = require("./stats.js");
101
+ Object.defineProperty(exports, "getStats", { enumerable: true, get: function () { return stats_js_1.getStats; } });
102
+ Object.defineProperty(exports, "getExtendedStats", { enumerable: true, get: function () { return stats_js_1.getExtendedStats; } });
103
+ Object.defineProperty(exports, "applyConfidenceDecay", { enumerable: true, get: function () { return stats_js_1.applyConfidenceDecay; } });
104
+ // Re-export transfer functions
105
+ var transfer_js_1 = require("./transfer.js");
106
+ Object.defineProperty(exports, "exportWiki", { enumerable: true, get: function () { return transfer_js_1.exportWiki; } });
107
+ Object.defineProperty(exports, "exportWikiToFile", { enumerable: true, get: function () { return transfer_js_1.exportWikiToFile; } });
108
+ Object.defineProperty(exports, "importWiki", { enumerable: true, get: function () { return transfer_js_1.importWiki; } });
109
+ Object.defineProperty(exports, "importWikiFromFile", { enumerable: true, get: function () { return transfer_js_1.importWikiFromFile; } });
110
+ Object.defineProperty(exports, "mergeWikis", { enumerable: true, get: function () { return transfer_js_1.mergeWikis; } });
111
+ // Re-export frontmatter functions
112
+ var frontmatter_js_1 = require("./frontmatter.js");
113
+ Object.defineProperty(exports, "parseFrontmatter", { enumerable: true, get: function () { return frontmatter_js_1.parseFrontmatter; } });
114
+ Object.defineProperty(exports, "stringifyFrontmatter", { enumerable: true, get: function () { return frontmatter_js_1.stringifyFrontmatter; } });
115
+ Object.defineProperty(exports, "validateFrontmatter", { enumerable: true, get: function () { return frontmatter_js_1.validateFrontmatter; } });
116
+ // Re-export search functions
117
+ var search_js_1 = require("./search.js");
118
+ Object.defineProperty(exports, "searchWiki", { enumerable: true, get: function () { return search_js_1.searchWiki; } });
119
+ Object.defineProperty(exports, "matchTrigger", { enumerable: true, get: function () { return search_js_1.matchTrigger; } });
120
+ Object.defineProperty(exports, "getBestMatch", { enumerable: true, get: function () { return search_js_1.getBestMatch; } });
121
+ // Re-export validation functions
122
+ var validate_js_1 = require("./validate.js");
123
+ Object.defineProperty(exports, "validateEntry", { enumerable: true, get: function () { return validate_js_1.validateEntry; } });
124
+ Object.defineProperty(exports, "validateWiki", { enumerable: true, get: function () { return validate_js_1.validateWiki; } });
125
+ Object.defineProperty(exports, "flagEntry", { enumerable: true, get: function () { return validate_js_1.flagEntry; } });
126
+ Object.defineProperty(exports, "deprecateEntry", { enumerable: true, get: function () { return validate_js_1.deprecateEntry; } });
127
+ Object.defineProperty(exports, "adjustConfidence", { enumerable: true, get: function () { return validate_js_1.adjustConfidence; } });
128
+ Object.defineProperty(exports, "markSolutionWorked", { enumerable: true, get: function () { return validate_js_1.markSolutionWorked; } });
129
+ Object.defineProperty(exports, "markSolutionFailed", { enumerable: true, get: function () { return validate_js_1.markSolutionFailed; } });
130
+ // Re-export audit functions
131
+ var audit_js_1 = require("./audit.js");
132
+ Object.defineProperty(exports, "logAudit", { enumerable: true, get: function () { return audit_js_1.logAudit; } });
133
+ Object.defineProperty(exports, "readAuditLog", { enumerable: true, get: function () { return audit_js_1.readAuditLog; } });
134
+ Object.defineProperty(exports, "getEntryAuditHistory", { enumerable: true, get: function () { return audit_js_1.getEntryAuditHistory; } });
135
+ Object.defineProperty(exports, "generateAuditReport", { enumerable: true, get: function () { return audit_js_1.generateAuditReport; } });
136
+ // Re-export quality functions
137
+ var quality_js_1 = require("./quality.js");
138
+ Object.defineProperty(exports, "validateEntryQuality", { enumerable: true, get: function () { return quality_js_1.validateEntryQuality; } });
139
+ Object.defineProperty(exports, "validateAllEntryQuality", { enumerable: true, get: function () { return quality_js_1.validateAllEntryQuality; } });
140
+ // Re-export maturity functions
141
+ var maturity_js_1 = require("./maturity.js");
142
+ Object.defineProperty(exports, "calculateMaturity", { enumerable: true, get: function () { return maturity_js_1.calculateMaturity; } });
143
+ Object.defineProperty(exports, "shouldPromoteMaturity", { enumerable: true, get: function () { return maturity_js_1.shouldPromoteMaturity; } });
144
+ Object.defineProperty(exports, "getConfidenceForMaturity", { enumerable: true, get: function () { return maturity_js_1.getConfidenceForMaturity; } });
145
+ // Re-export template functions
146
+ var templates_js_1 = require("./templates.js");
147
+ Object.defineProperty(exports, "getTemplate", { enumerable: true, get: function () { return templates_js_1.getTemplate; } });
148
+ Object.defineProperty(exports, "generateStubContent", { enumerable: true, get: function () { return templates_js_1.generateStubContent; } });
149
+ Object.defineProperty(exports, "generateOverviewContent", { enumerable: true, get: function () { return templates_js_1.generateOverviewContent; } });
150
+ Object.defineProperty(exports, "generateWikiReadme", { enumerable: true, get: function () { return templates_js_1.generateWikiReadme; } });
151
+ Object.defineProperty(exports, "getAvailableTemplates", { enumerable: true, get: function () { return templates_js_1.getAvailableTemplates; } });
152
+ Object.defineProperty(exports, "hasTemplate", { enumerable: true, get: function () { return templates_js_1.hasTemplate; } });
153
+ Object.defineProperty(exports, "getCategoryDescription", { enumerable: true, get: function () { return templates_js_1.getCategoryDescription; } });
154
+ Object.defineProperty(exports, "CATEGORY_TEMPLATES", { enumerable: true, get: function () { return templates_js_1.CATEGORY_TEMPLATES; } });
155
+ // Import for initWiki convenience function
156
+ const config_js_2 = require("./config.js");
157
+ const types_js_2 = require("./types.js");
158
+ const templates_js_2 = require("./templates.js");
159
+ /**
160
+ * Initializes a new wiki in the specified project directory.
161
+ *
162
+ * Creates a minimal wiki structure:
163
+ * - .wiki directory
164
+ * - README.md with usage instructions
165
+ * - Category subdirectories (issues, patterns, gotchas)
166
+ *
167
+ * @param projectRoot - The root directory of the project
168
+ * @throws Error if wiki already exists in the project
169
+ *
170
+ * @example
171
+ * ```typescript
172
+ * initWiki('/path/to/my-project');
173
+ * ```
174
+ */
175
+ function initWiki(projectRoot) {
176
+ const wikiPath = (0, config_js_2.getWikiPath)(projectRoot);
177
+ if ((0, config_js_2.wikiExists)(projectRoot)) {
178
+ throw new Error('Wiki already exists');
179
+ }
180
+ fs.mkdirSync(wikiPath, { recursive: true });
181
+ // Create README
182
+ fs.writeFileSync(path.join(wikiPath, 'README.md'), (0, templates_js_2.generateWikiReadme)(), 'utf-8');
183
+ // Create category directories
184
+ for (const category of types_js_2.DEFAULT_CATEGORIES) {
185
+ fs.mkdirSync(path.join(wikiPath, category), { recursive: true });
186
+ }
187
+ }
188
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA,eAAe;AACf,+EAA+E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6L/E,4BAoBC;AA/MD,uCAAyB;AACzB,2CAA6B;AAE7B,iFAAiF;AACjF,6CAA2B;AAI3B,uCAAoE;AAA3D,0GAAA,cAAc,OAAA;AAAE,kHAAA,sBAAsB,OAAA;AAE/C,0BAA0B;AAC1B,yCAWqB;AAVnB,yGAAA,YAAY,OAAA;AACZ,oHAAA,uBAAuB,OAAA;AACvB,+GAAA,kBAAkB,OAAA;AAClB,4GAAA,eAAe,OAAA;AACf,4GAAA,eAAe,OAAA;AACf,wGAAA,WAAW,OAAA;AACX,6GAAA,gBAAgB,OAAA;AAChB,uGAAA,UAAU,OAAA;AACV,uGAAA,UAAU,OAAA;AACV,8GAAA,iBAAiB,OAAA;AAGnB,4BAA4B;AAC5B,uCAMoB;AALlB,0GAAA,cAAc,OAAA;AACd,0GAAA,cAAc,OAAA;AACd,2GAAA,eAAe,OAAA;AACf,sGAAA,UAAU,OAAA;AACV,yGAAA,aAAa,OAAA;AAGf,6BAA6B;AAC7B,yCASqB;AARnB,6GAAA,gBAAgB,OAAA;AAChB,iHAAA,oBAAoB,OAAA;AACpB,wGAAA,WAAW,OAAA;AACX,0GAAA,aAAa,OAAA;AACb,uGAAA,UAAU,OAAA;AACV,uGAAA,UAAU,OAAA;AACV,wGAAA,WAAW,OAAA;AACX,wGAAA,WAAW,OAAA;AAGb,4BAA4B;AAC5B,uCAiBoB;AAhBlB,mGAAA,OAAO,OAAA;AACP,uGAAA,WAAW,OAAA;AACX,qHAAA,yBAAyB,OAAA;AACzB,qGAAA,SAAS,OAAA;AACT,uGAAA,WAAW,OAAA;AACX,uGAAA,WAAW,OAAA;AACX,uGAAA,WAAW,OAAA;AACX,0GAAA,cAAc,OAAA;AACd,4GAAA,gBAAgB,OAAA;AAChB,6GAAA,iBAAiB,OAAA;AACjB,6GAAA,iBAAiB,OAAA;AAQnB,iCAAiC;AACjC,iDAMyB;AALvB,iHAAA,gBAAgB,OAAA;AAChB,8GAAA,aAAa,OAAA;AACb,kHAAA,iBAAiB,OAAA;AACjB,mHAAA,kBAAkB,OAAA;AAIpB,4BAA4B;AAC5B,uCAKoB;AAJlB,oGAAA,QAAQ,OAAA;AACR,4GAAA,gBAAgB,OAAA;AAChB,gHAAA,oBAAoB,OAAA;AAItB,+BAA+B;AAC/B,6CAWuB;AAVrB,yGAAA,UAAU,OAAA;AACV,+GAAA,gBAAgB,OAAA;AAChB,yGAAA,UAAU,OAAA;AACV,iHAAA,kBAAkB,OAAA;AAClB,yGAAA,UAAU,OAAA;AAQZ,kCAAkC;AAClC,mDAK0B;AAJxB,kHAAA,gBAAgB,OAAA;AAChB,sHAAA,oBAAoB,OAAA;AACpB,qHAAA,mBAAmB,OAAA;AAIrB,6BAA6B;AAC7B,yCAKqB;AAJnB,uGAAA,UAAU,OAAA;AACV,yGAAA,YAAY,OAAA;AACZ,yGAAA,YAAY,OAAA;AAId,iCAAiC;AACjC,6CAYuB;AAXrB,4GAAA,aAAa,OAAA;AACb,2GAAA,YAAY,OAAA;AACZ,wGAAA,SAAS,OAAA;AACT,6GAAA,cAAc,OAAA;AACd,+GAAA,gBAAgB,OAAA;AAChB,iHAAA,kBAAkB,OAAA;AAClB,iHAAA,kBAAkB,OAAA;AAOpB,4BAA4B;AAC5B,uCAQoB;AAPlB,oGAAA,QAAQ,OAAA;AACR,wGAAA,YAAY,OAAA;AACZ,gHAAA,oBAAoB,OAAA;AACpB,+GAAA,mBAAmB,OAAA;AAMrB,8BAA8B;AAC9B,2CAKsB;AAJpB,kHAAA,oBAAoB,OAAA;AACpB,qHAAA,uBAAuB,OAAA;AAKzB,+BAA+B;AAC/B,6CAIuB;AAHrB,gHAAA,iBAAiB,OAAA;AACjB,oHAAA,qBAAqB,OAAA;AACrB,uHAAA,wBAAwB,OAAA;AAG1B,+BAA+B;AAC/B,+CAUwB;AATtB,2GAAA,WAAW,OAAA;AACX,mHAAA,mBAAmB,OAAA;AACnB,uHAAA,uBAAuB,OAAA;AACvB,kHAAA,kBAAkB,OAAA;AAClB,qHAAA,qBAAqB,OAAA;AACrB,2GAAA,WAAW,OAAA;AACX,sHAAA,sBAAsB,OAAA;AACtB,kHAAA,kBAAkB,OAAA;AAIpB,2CAA2C;AAC3C,2CAAsD;AACtD,yCAAgD;AAChD,iDAAoD;AAEpD;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,QAAQ,CAAC,WAAmB;IAC1C,MAAM,QAAQ,GAAG,IAAA,uBAAW,EAAC,WAAW,CAAC,CAAC;IAE1C,IAAI,IAAA,sBAAU,EAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;IAED,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5C,gBAAgB;IAChB,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,EAChC,IAAA,iCAAkB,GAAE,EACpB,OAAO,CACR,CAAC;IAEF,8BAA8B;IAC9B,KAAK,MAAM,QAAQ,IAAI,6BAAkB,EAAE,CAAC;QAC1C,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;AACH,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { EntryFrontmatter, EntryMaturity } from './types.js';
2
+ /**
3
+ * Calculate the appropriate maturity level for an entry based on usage and age.
4
+ *
5
+ * Maturity levels:
6
+ * - captured: 0-2 uses, newly documented
7
+ * - verified: 3+ uses, proven to work
8
+ * - validated: 10+ uses and 30+ days old, battle-tested
9
+ *
10
+ * @param entry - The entry frontmatter to evaluate
11
+ * @returns The calculated maturity level
12
+ */
13
+ export declare function calculateMaturity(entry: EntryFrontmatter): EntryMaturity;
14
+ /**
15
+ * Determine if an entry's maturity should be promoted.
16
+ *
17
+ * Maturity can only increase (captured → verified → validated), never decrease.
18
+ *
19
+ * @param currentMaturity - The current maturity level
20
+ * @param newMaturity - The proposed new maturity level
21
+ * @returns True if maturity should be promoted, false otherwise
22
+ */
23
+ export declare function shouldPromoteMaturity(currentMaturity: EntryMaturity, newMaturity: EntryMaturity): boolean;
24
+ /**
25
+ * Get the confidence score for a given maturity level.
26
+ *
27
+ * @param maturity - The maturity level
28
+ * @returns The confidence score (40, 70, or 90)
29
+ */
30
+ export declare function getConfidenceForMaturity(maturity: EntryMaturity): number;
31
+ //# sourceMappingURL=maturity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maturity.d.ts","sourceRoot":"","sources":["../../src/maturity.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAwBlE;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,aAAa,CAwBxE;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,eAAe,EAAE,aAAa,EAC9B,WAAW,EAAE,aAAa,GACzB,OAAO,CAiBT;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAOxE"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ // src/maturity.ts
3
+ // Entry maturity progression logic
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.calculateMaturity = calculateMaturity;
6
+ exports.shouldPromoteMaturity = shouldPromoteMaturity;
7
+ exports.getConfidenceForMaturity = getConfidenceForMaturity;
8
+ const types_js_1 = require("./types.js");
9
+ // Maturity progression order (cannot decrease)
10
+ const MATURITY_ORDER = ['captured', 'verified', 'validated'];
11
+ /**
12
+ * Calculate the number of days since a given date.
13
+ * Uses UTC to avoid timezone inconsistencies.
14
+ *
15
+ * @param dateString - The date string to calculate from
16
+ * @returns Number of days since the date, or 0 if invalid
17
+ */
18
+ function getDaysOld(dateString) {
19
+ const created = new Date(dateString);
20
+ if (isNaN(created.getTime())) {
21
+ return 0; // Invalid date defaults to 0 days old
22
+ }
23
+ const now = new Date();
24
+ const diffMs = now.getTime() - created.getTime();
25
+ return Math.floor(diffMs / (1000 * 60 * 60 * 24));
26
+ }
27
+ /**
28
+ * Calculate the appropriate maturity level for an entry based on usage and age.
29
+ *
30
+ * Maturity levels:
31
+ * - captured: 0-2 uses, newly documented
32
+ * - verified: 3+ uses, proven to work
33
+ * - validated: 10+ uses and 30+ days old, battle-tested
34
+ *
35
+ * @param entry - The entry frontmatter to evaluate
36
+ * @returns The calculated maturity level
37
+ */
38
+ function calculateMaturity(entry) {
39
+ // If manual maturity override is set, respect it
40
+ if (entry.maturity) {
41
+ return entry.maturity;
42
+ }
43
+ const useCount = entry.use_count || 0;
44
+ // Calculate days since creation
45
+ const daysSinceCreation = getDaysOld(entry.created);
46
+ // Check for validated (highest level)
47
+ if (useCount >= types_js_1.MATURITY_RULES.validated.min_uses &&
48
+ daysSinceCreation >= types_js_1.MATURITY_RULES.validated.min_days) {
49
+ return 'validated';
50
+ }
51
+ // Check for verified
52
+ if (useCount >= types_js_1.MATURITY_RULES.verified.min_uses) {
53
+ return 'verified';
54
+ }
55
+ // Default to captured
56
+ return 'captured';
57
+ }
58
+ /**
59
+ * Determine if an entry's maturity should be promoted.
60
+ *
61
+ * Maturity can only increase (captured → verified → validated), never decrease.
62
+ *
63
+ * @param currentMaturity - The current maturity level
64
+ * @param newMaturity - The proposed new maturity level
65
+ * @returns True if maturity should be promoted, false otherwise
66
+ */
67
+ function shouldPromoteMaturity(currentMaturity, newMaturity) {
68
+ // No current maturity means this is a new entry - always accept
69
+ if (!currentMaturity) {
70
+ return true;
71
+ }
72
+ // If same level, no promotion needed
73
+ if (currentMaturity === newMaturity) {
74
+ return false;
75
+ }
76
+ // Use shared maturity hierarchy
77
+ const currentIndex = MATURITY_ORDER.indexOf(currentMaturity);
78
+ const newIndex = MATURITY_ORDER.indexOf(newMaturity);
79
+ // Only promote if new level is higher than current
80
+ return newIndex > currentIndex;
81
+ }
82
+ /**
83
+ * Get the confidence score for a given maturity level.
84
+ *
85
+ * @param maturity - The maturity level
86
+ * @returns The confidence score (40, 70, or 90)
87
+ */
88
+ function getConfidenceForMaturity(maturity) {
89
+ const confidenceMap = {
90
+ captured: 40,
91
+ verified: 70,
92
+ validated: 90
93
+ };
94
+ return confidenceMap[maturity];
95
+ }
96
+ //# sourceMappingURL=maturity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maturity.js","sourceRoot":"","sources":["../../src/maturity.ts"],"names":[],"mappings":";AAAA,kBAAkB;AAClB,mCAAmC;;AAqCnC,8CAwBC;AAWD,sDAoBC;AAQD,4DAOC;AAxGD,yCAA4C;AAE5C,+CAA+C;AAC/C,MAAM,cAAc,GAAoB,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;AAE9E;;;;;;GAMG;AACH,SAAS,UAAU,CAAC,UAAkB;IACpC,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,CAAC,CAAC,sCAAsC;IAClD,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IACjD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,iBAAiB,CAAC,KAAuB;IACvD,iDAAiD;IACjD,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC,QAAQ,CAAC;IACxB,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC;IAEtC,gCAAgC;IAChC,MAAM,iBAAiB,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEpD,sCAAsC;IACtC,IAAI,QAAQ,IAAI,yBAAc,CAAC,SAAS,CAAC,QAAQ;QAC7C,iBAAiB,IAAI,yBAAc,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC3D,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,qBAAqB;IACrB,IAAI,QAAQ,IAAI,yBAAc,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACjD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,sBAAsB;IACtB,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,qBAAqB,CACnC,eAA8B,EAC9B,WAA0B;IAE1B,gEAAgE;IAChE,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qCAAqC;IACrC,IAAI,eAAe,KAAK,WAAW,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gCAAgC;IAChC,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAErD,mDAAmD;IACnD,OAAO,QAAQ,GAAG,YAAY,CAAC;AACjC,CAAC;AAED;;;;;GAKG;AACH,SAAgB,wBAAwB,CAAC,QAAuB;IAC9D,MAAM,aAAa,GAAkC;QACnD,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,EAAE;KACd,CAAC;IACF,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,23 @@
1
+ export { getDefaultConfidence } from './config.js';
2
+ /**
3
+ * Types of quality issues that can be detected
4
+ */
5
+ export type QualityIssueType = 'invalid_related_format' | 'broken_wiki_link' | 'missing_trigger' | 'empty_section' | 'has_todo' | 'low_confidence_convention';
6
+ /**
7
+ * A quality issue found in an entry
8
+ */
9
+ export interface QualityIssue {
10
+ type: QualityIssueType;
11
+ message: string;
12
+ entryPath: string;
13
+ line?: number;
14
+ }
15
+ /**
16
+ * Validate the quality of an entry
17
+ */
18
+ export declare function validateEntryQuality(projectRoot: string, entryPath: string): QualityIssue[];
19
+ /**
20
+ * Validate all entries in the wiki
21
+ */
22
+ export declare function validateAllEntryQuality(projectRoot: string): Promise<QualityIssue[]>;
23
+ //# sourceMappingURL=quality.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality.d.ts","sourceRoot":"","sources":["../../src/quality.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB,wBAAwB,GACxB,kBAAkB,GAClB,iBAAiB,GACjB,eAAe,GACf,UAAU,GACV,2BAA2B,CAAC;AAEhC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAOD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,YAAY,EAAE,CA4BhB;AAqLD;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,EAAE,CAAC,CAWzB"}