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.
- package/LICENSE +21 -0
- package/README.md +274 -0
- package/dist/hooks/error-lookup.d.ts +4 -0
- package/dist/hooks/error-lookup.d.ts.map +1 -0
- package/dist/hooks/error-lookup.js +92 -0
- package/dist/hooks/error-lookup.js.map +1 -0
- package/dist/hooks/post-task.d.ts +15 -0
- package/dist/hooks/post-task.d.ts.map +1 -0
- package/dist/hooks/post-task.js +246 -0
- package/dist/hooks/post-task.js.map +1 -0
- package/dist/hooks/prompt-enrich.d.ts +16 -0
- package/dist/hooks/prompt-enrich.d.ts.map +1 -0
- package/dist/hooks/prompt-enrich.js +141 -0
- package/dist/hooks/prompt-enrich.js.map +1 -0
- package/dist/hooks/session-start-cli.d.ts +3 -0
- package/dist/hooks/session-start-cli.d.ts.map +1 -0
- package/dist/hooks/session-start-cli.js +81 -0
- package/dist/hooks/session-start-cli.js.map +1 -0
- package/dist/hooks/session-start.d.ts +4 -0
- package/dist/hooks/session-start.d.ts.map +1 -0
- package/dist/hooks/session-start.js +134 -0
- package/dist/hooks/session-start.js.map +1 -0
- package/dist/src/audit.d.ts +63 -0
- package/dist/src/audit.d.ts.map +1 -0
- package/dist/src/audit.js +229 -0
- package/dist/src/audit.js.map +1 -0
- package/dist/src/cache.d.ts +54 -0
- package/dist/src/cache.d.ts.map +1 -0
- package/dist/src/cache.js +167 -0
- package/dist/src/cache.js.map +1 -0
- package/dist/src/config.d.ts +52 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/config.js +175 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/entry.d.ts +154 -0
- package/dist/src/entry.d.ts.map +1 -0
- package/dist/src/entry.js +469 -0
- package/dist/src/entry.js.map +1 -0
- package/dist/src/errors.d.ts +65 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/errors.js +121 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/frontmatter.d.ts +28 -0
- package/dist/src/frontmatter.d.ts.map +1 -0
- package/dist/src/frontmatter.js +111 -0
- package/dist/src/frontmatter.js.map +1 -0
- package/dist/src/index.d.ts +35 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +188 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/maturity.d.ts +31 -0
- package/dist/src/maturity.d.ts.map +1 -0
- package/dist/src/maturity.js +96 -0
- package/dist/src/maturity.js.map +1 -0
- package/dist/src/quality.d.ts +23 -0
- package/dist/src/quality.d.ts.map +1 -0
- package/dist/src/quality.js +236 -0
- package/dist/src/quality.js.map +1 -0
- package/dist/src/search.d.ts +35 -0
- package/dist/src/search.d.ts.map +1 -0
- package/dist/src/search.js +263 -0
- package/dist/src/search.js.map +1 -0
- package/dist/src/similarity.d.ts +42 -0
- package/dist/src/similarity.d.ts.map +1 -0
- package/dist/src/similarity.js +111 -0
- package/dist/src/similarity.js.map +1 -0
- package/dist/src/stats.d.ts +56 -0
- package/dist/src/stats.d.ts.map +1 -0
- package/dist/src/stats.js +198 -0
- package/dist/src/stats.js.map +1 -0
- package/dist/src/templates.d.ts +63 -0
- package/dist/src/templates.d.ts.map +1 -0
- package/dist/src/templates.js +347 -0
- package/dist/src/templates.js.map +1 -0
- package/dist/src/transfer.d.ts +92 -0
- package/dist/src/transfer.d.ts.map +1 -0
- package/dist/src/transfer.js +215 -0
- package/dist/src/transfer.js.map +1 -0
- package/dist/src/types.d.ts +270 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +153 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/validate.d.ts +90 -0
- package/dist/src/validate.d.ts.map +1 -0
- package/dist/src/validate.js +295 -0
- package/dist/src/validate.js.map +1 -0
- package/hooks/error-lookup.ts +110 -0
- package/hooks/hooks.json +49 -0
- package/hooks/post-task.ts +309 -0
- package/hooks/prompt-enrich.ts +162 -0
- package/hooks/session-start-cli.ts +96 -0
- package/hooks/session-start.ts +159 -0
- package/package.json +40 -0
- package/scripts/error-lookup.py +64 -0
- package/scripts/post-task.py +60 -0
- package/scripts/prompt-enrich.py +64 -0
- package/scripts/session-start.py +64 -0
- package/skills/wiki/SKILL.md +61 -0
- package/skills/wiki-add/SKILL.md +90 -0
- package/skills/wiki-browse/SKILL.md +108 -0
- package/skills/wiki-capture/SKILL.md +265 -0
- package/skills/wiki-explorer/SKILL.md +223 -0
- package/skills/wiki-export/SKILL.md +101 -0
- package/skills/wiki-fix/SKILL.md +86 -0
- package/skills/wiki-flag/SKILL.md +47 -0
- package/skills/wiki-import/SKILL.md +128 -0
- package/skills/wiki-init/SKILL.md +72 -0
- package/skills/wiki-scan/SKILL.md +98 -0
- package/skills/wiki-search/SKILL.md +86 -0
- package/skills/wiki-stats/SKILL.md +129 -0
- package/skills/wiki-status/SKILL.md +78 -0
- package/skills/wiki-test-trigger/SKILL.md +173 -0
- 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":"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"}
|
|
@@ -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"}
|