@grafema/util 0.3.0-beta
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 +190 -0
- package/dist/api/GraphAPI.d.ts +87 -0
- package/dist/api/GraphAPI.d.ts.map +1 -0
- package/dist/api/GraphAPI.js +212 -0
- package/dist/api/GraphAPI.js.map +1 -0
- package/dist/api/GuaranteeAPI.d.ts +147 -0
- package/dist/api/GuaranteeAPI.d.ts.map +1 -0
- package/dist/api/GuaranteeAPI.js +290 -0
- package/dist/api/GuaranteeAPI.js.map +1 -0
- package/dist/config/ConfigLoader.d.ts +214 -0
- package/dist/config/ConfigLoader.d.ts.map +1 -0
- package/dist/config/ConfigLoader.js +441 -0
- package/dist/config/ConfigLoader.js.map +1 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +5 -0
- package/dist/config/index.js.map +1 -0
- package/dist/core/CoverageAnalyzer.d.ts +65 -0
- package/dist/core/CoverageAnalyzer.d.ts.map +1 -0
- package/dist/core/CoverageAnalyzer.js +199 -0
- package/dist/core/CoverageAnalyzer.js.map +1 -0
- package/dist/core/FileExplainer.d.ts +101 -0
- package/dist/core/FileExplainer.d.ts.map +1 -0
- package/dist/core/FileExplainer.js +140 -0
- package/dist/core/FileExplainer.js.map +1 -0
- package/dist/core/FileOverview.d.ts +124 -0
- package/dist/core/FileOverview.d.ts.map +1 -0
- package/dist/core/FileOverview.js +279 -0
- package/dist/core/FileOverview.js.map +1 -0
- package/dist/core/GrafemaUri.d.ts +66 -0
- package/dist/core/GrafemaUri.d.ts.map +1 -0
- package/dist/core/GrafemaUri.js +191 -0
- package/dist/core/GrafemaUri.js.map +1 -0
- package/dist/core/GraphBackend.d.ts +158 -0
- package/dist/core/GraphBackend.d.ts.map +1 -0
- package/dist/core/GraphBackend.js +85 -0
- package/dist/core/GraphBackend.js.map +1 -0
- package/dist/core/GraphFreshnessChecker.d.ts +33 -0
- package/dist/core/GraphFreshnessChecker.d.ts.map +1 -0
- package/dist/core/GraphFreshnessChecker.js +104 -0
- package/dist/core/GraphFreshnessChecker.js.map +1 -0
- package/dist/core/GuaranteeManager.d.ts +254 -0
- package/dist/core/GuaranteeManager.d.ts.map +1 -0
- package/dist/core/GuaranteeManager.js +447 -0
- package/dist/core/GuaranteeManager.js.map +1 -0
- package/dist/core/HashUtils.d.ts +24 -0
- package/dist/core/HashUtils.d.ts.map +1 -0
- package/dist/core/HashUtils.js +46 -0
- package/dist/core/HashUtils.js.map +1 -0
- package/dist/core/IncrementalReanalyzer.d.ts +33 -0
- package/dist/core/IncrementalReanalyzer.d.ts.map +1 -0
- package/dist/core/IncrementalReanalyzer.js +67 -0
- package/dist/core/IncrementalReanalyzer.js.map +1 -0
- package/dist/core/ResourceRegistry.d.ts +17 -0
- package/dist/core/ResourceRegistry.d.ts.map +1 -0
- package/dist/core/ResourceRegistry.js +32 -0
- package/dist/core/ResourceRegistry.js.map +1 -0
- package/dist/core/SemanticId.d.ts +159 -0
- package/dist/core/SemanticId.d.ts.map +1 -0
- package/dist/core/SemanticId.js +291 -0
- package/dist/core/SemanticId.js.map +1 -0
- package/dist/core/VersionManager.d.ts +166 -0
- package/dist/core/VersionManager.d.ts.map +1 -0
- package/dist/core/VersionManager.js +239 -0
- package/dist/core/VersionManager.js.map +1 -0
- package/dist/core/brandNodeInternal.d.ts +14 -0
- package/dist/core/brandNodeInternal.d.ts.map +1 -0
- package/dist/core/brandNodeInternal.js +4 -0
- package/dist/core/brandNodeInternal.js.map +1 -0
- package/dist/core/nodes/GuaranteeNode.d.ts +76 -0
- package/dist/core/nodes/GuaranteeNode.d.ts.map +1 -0
- package/dist/core/nodes/GuaranteeNode.js +118 -0
- package/dist/core/nodes/GuaranteeNode.js.map +1 -0
- package/dist/core/nodes/IssueNode.d.ts +73 -0
- package/dist/core/nodes/IssueNode.d.ts.map +1 -0
- package/dist/core/nodes/IssueNode.js +130 -0
- package/dist/core/nodes/IssueNode.js.map +1 -0
- package/dist/core/nodes/NodeKind.d.ts +104 -0
- package/dist/core/nodes/NodeKind.d.ts.map +1 -0
- package/dist/core/nodes/NodeKind.js +166 -0
- package/dist/core/nodes/NodeKind.js.map +1 -0
- package/dist/diagnostics/DiagnosticCollector.d.ts +103 -0
- package/dist/diagnostics/DiagnosticCollector.d.ts.map +1 -0
- package/dist/diagnostics/DiagnosticCollector.js +133 -0
- package/dist/diagnostics/DiagnosticCollector.js.map +1 -0
- package/dist/diagnostics/DiagnosticReporter.d.ts +122 -0
- package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -0
- package/dist/diagnostics/DiagnosticReporter.js +300 -0
- package/dist/diagnostics/DiagnosticReporter.js.map +1 -0
- package/dist/diagnostics/DiagnosticWriter.d.ts +31 -0
- package/dist/diagnostics/DiagnosticWriter.d.ts.map +1 -0
- package/dist/diagnostics/DiagnosticWriter.js +44 -0
- package/dist/diagnostics/DiagnosticWriter.js.map +1 -0
- package/dist/diagnostics/categories.d.ts +57 -0
- package/dist/diagnostics/categories.d.ts.map +1 -0
- package/dist/diagnostics/categories.js +71 -0
- package/dist/diagnostics/categories.js.map +1 -0
- package/dist/diagnostics/index.d.ts +17 -0
- package/dist/diagnostics/index.d.ts.map +1 -0
- package/dist/diagnostics/index.js +15 -0
- package/dist/diagnostics/index.js.map +1 -0
- package/dist/errors/GrafemaError.d.ts +200 -0
- package/dist/errors/GrafemaError.d.ts.map +1 -0
- package/dist/errors/GrafemaError.js +209 -0
- package/dist/errors/GrafemaError.js.map +1 -0
- package/dist/index.d.ts +75 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +76 -0
- package/dist/index.js.map +1 -0
- package/dist/instructions/index.d.ts +8 -0
- package/dist/instructions/index.d.ts.map +1 -0
- package/dist/instructions/index.js +20 -0
- package/dist/instructions/index.js.map +1 -0
- package/dist/instructions/onboarding.md +133 -0
- package/dist/knowledge/KnowledgeBase.d.ts +113 -0
- package/dist/knowledge/KnowledgeBase.d.ts.map +1 -0
- package/dist/knowledge/KnowledgeBase.js +420 -0
- package/dist/knowledge/KnowledgeBase.js.map +1 -0
- package/dist/knowledge/SemanticAddressResolver.d.ts +59 -0
- package/dist/knowledge/SemanticAddressResolver.d.ts.map +1 -0
- package/dist/knowledge/SemanticAddressResolver.js +160 -0
- package/dist/knowledge/SemanticAddressResolver.js.map +1 -0
- package/dist/knowledge/git-ingest.d.ts +58 -0
- package/dist/knowledge/git-ingest.d.ts.map +1 -0
- package/dist/knowledge/git-ingest.js +301 -0
- package/dist/knowledge/git-ingest.js.map +1 -0
- package/dist/knowledge/git-queries.d.ts +86 -0
- package/dist/knowledge/git-queries.d.ts.map +1 -0
- package/dist/knowledge/git-queries.js +177 -0
- package/dist/knowledge/git-queries.js.map +1 -0
- package/dist/knowledge/index.d.ts +14 -0
- package/dist/knowledge/index.d.ts.map +1 -0
- package/dist/knowledge/index.js +10 -0
- package/dist/knowledge/index.js.map +1 -0
- package/dist/knowledge/parser.d.ts +39 -0
- package/dist/knowledge/parser.d.ts.map +1 -0
- package/dist/knowledge/parser.js +292 -0
- package/dist/knowledge/parser.js.map +1 -0
- package/dist/knowledge/types.d.ts +133 -0
- package/dist/knowledge/types.d.ts.map +1 -0
- package/dist/knowledge/types.js +8 -0
- package/dist/knowledge/types.js.map +1 -0
- package/dist/logging/Logger.d.ts +98 -0
- package/dist/logging/Logger.d.ts.map +1 -0
- package/dist/logging/Logger.js +274 -0
- package/dist/logging/Logger.js.map +1 -0
- package/dist/notation/archetypes.d.ts +36 -0
- package/dist/notation/archetypes.d.ts.map +1 -0
- package/dist/notation/archetypes.js +173 -0
- package/dist/notation/archetypes.js.map +1 -0
- package/dist/notation/fold.d.ts +25 -0
- package/dist/notation/fold.d.ts.map +1 -0
- package/dist/notation/fold.js +598 -0
- package/dist/notation/fold.js.map +1 -0
- package/dist/notation/index.d.ts +18 -0
- package/dist/notation/index.d.ts.map +1 -0
- package/dist/notation/index.js +16 -0
- package/dist/notation/index.js.map +1 -0
- package/dist/notation/lodExtractor.d.ts +32 -0
- package/dist/notation/lodExtractor.d.ts.map +1 -0
- package/dist/notation/lodExtractor.js +149 -0
- package/dist/notation/lodExtractor.js.map +1 -0
- package/dist/notation/nameShortener.d.ts +22 -0
- package/dist/notation/nameShortener.d.ts.map +1 -0
- package/dist/notation/nameShortener.js +24 -0
- package/dist/notation/nameShortener.js.map +1 -0
- package/dist/notation/perspectives.d.ts +11 -0
- package/dist/notation/perspectives.d.ts.map +1 -0
- package/dist/notation/perspectives.js +16 -0
- package/dist/notation/perspectives.js.map +1 -0
- package/dist/notation/renderer.d.ts +31 -0
- package/dist/notation/renderer.d.ts.map +1 -0
- package/dist/notation/renderer.js +315 -0
- package/dist/notation/renderer.js.map +1 -0
- package/dist/notation/traceRenderer.d.ts +39 -0
- package/dist/notation/traceRenderer.d.ts.map +1 -0
- package/dist/notation/traceRenderer.js +358 -0
- package/dist/notation/traceRenderer.js.map +1 -0
- package/dist/notation/types.d.ts +66 -0
- package/dist/notation/types.d.ts.map +1 -0
- package/dist/notation/types.js +10 -0
- package/dist/notation/types.js.map +1 -0
- package/dist/queries/NodeContext.d.ts +81 -0
- package/dist/queries/NodeContext.d.ts.map +1 -0
- package/dist/queries/NodeContext.js +196 -0
- package/dist/queries/NodeContext.js.map +1 -0
- package/dist/queries/findCallsInFunction.d.ts +62 -0
- package/dist/queries/findCallsInFunction.d.ts.map +1 -0
- package/dist/queries/findCallsInFunction.js +169 -0
- package/dist/queries/findCallsInFunction.js.map +1 -0
- package/dist/queries/findContainingFunction.d.ts +57 -0
- package/dist/queries/findContainingFunction.d.ts.map +1 -0
- package/dist/queries/findContainingFunction.js +91 -0
- package/dist/queries/findContainingFunction.js.map +1 -0
- package/dist/queries/index.d.ts +18 -0
- package/dist/queries/index.d.ts.map +1 -0
- package/dist/queries/index.js +14 -0
- package/dist/queries/index.js.map +1 -0
- package/dist/queries/traceDataflow.d.ts +65 -0
- package/dist/queries/traceDataflow.d.ts.map +1 -0
- package/dist/queries/traceDataflow.js +754 -0
- package/dist/queries/traceDataflow.js.map +1 -0
- package/dist/queries/traceValues.d.ts +70 -0
- package/dist/queries/traceValues.d.ts.map +1 -0
- package/dist/queries/traceValues.js +373 -0
- package/dist/queries/traceValues.js.map +1 -0
- package/dist/queries/types.d.ts +166 -0
- package/dist/queries/types.d.ts.map +1 -0
- package/dist/queries/types.js +10 -0
- package/dist/queries/types.js.map +1 -0
- package/dist/schema/GraphSchemaExtractor.d.ts +53 -0
- package/dist/schema/GraphSchemaExtractor.d.ts.map +1 -0
- package/dist/schema/GraphSchemaExtractor.js +125 -0
- package/dist/schema/GraphSchemaExtractor.js.map +1 -0
- package/dist/schema/InterfaceSchemaExtractor.d.ts +73 -0
- package/dist/schema/InterfaceSchemaExtractor.d.ts.map +1 -0
- package/dist/schema/InterfaceSchemaExtractor.js +113 -0
- package/dist/schema/InterfaceSchemaExtractor.js.map +1 -0
- package/dist/schema/index.d.ts +5 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +3 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/storage/backends/RFDBServerBackend.d.ts +356 -0
- package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -0
- package/dist/storage/backends/RFDBServerBackend.js +748 -0
- package/dist/storage/backends/RFDBServerBackend.js.map +1 -0
- package/dist/storage/backends/typeValidation.d.ts +47 -0
- package/dist/storage/backends/typeValidation.d.ts.map +1 -0
- package/dist/storage/backends/typeValidation.js +141 -0
- package/dist/storage/backends/typeValidation.js.map +1 -0
- package/dist/utils/findRfdbBinary.d.ts +67 -0
- package/dist/utils/findRfdbBinary.d.ts.map +1 -0
- package/dist/utils/findRfdbBinary.js +261 -0
- package/dist/utils/findRfdbBinary.js.map +1 -0
- package/dist/utils/lazyDownload.d.ts +43 -0
- package/dist/utils/lazyDownload.d.ts.map +1 -0
- package/dist/utils/lazyDownload.js +175 -0
- package/dist/utils/lazyDownload.js.map +1 -0
- package/dist/utils/moduleResolution.d.ts +134 -0
- package/dist/utils/moduleResolution.d.ts.map +1 -0
- package/dist/utils/moduleResolution.js +189 -0
- package/dist/utils/moduleResolution.js.map +1 -0
- package/dist/utils/resolveNodeFile.d.ts +13 -0
- package/dist/utils/resolveNodeFile.d.ts.map +1 -0
- package/dist/utils/resolveNodeFile.js +18 -0
- package/dist/utils/resolveNodeFile.js.map +1 -0
- package/dist/utils/startRfdbServer.d.ts +63 -0
- package/dist/utils/startRfdbServer.d.ts.map +1 -0
- package/dist/utils/startRfdbServer.js +142 -0
- package/dist/utils/startRfdbServer.js.map +1 -0
- package/dist/validation/PathValidator.d.ts +80 -0
- package/dist/validation/PathValidator.d.ts.map +1 -0
- package/dist/validation/PathValidator.js +252 -0
- package/dist/validation/PathValidator.js.map +1 -0
- package/dist/version.d.ts +11 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +26 -0
- package/dist/version.js.map +1 -0
- package/package.json +50 -0
- package/src/api/GraphAPI.ts +307 -0
- package/src/api/GuaranteeAPI.ts +402 -0
- package/src/config/ConfigLoader.ts +653 -0
- package/src/config/index.ts +13 -0
- package/src/core/CoverageAnalyzer.ts +243 -0
- package/src/core/FileExplainer.ts +179 -0
- package/src/core/FileOverview.ts +397 -0
- package/src/core/GrafemaUri.ts +216 -0
- package/src/core/GraphBackend.ts +266 -0
- package/src/core/GraphFreshnessChecker.ts +145 -0
- package/src/core/GuaranteeManager.ts +684 -0
- package/src/core/HashUtils.ts +48 -0
- package/src/core/IncrementalReanalyzer.ts +106 -0
- package/src/core/ResourceRegistry.ts +39 -0
- package/src/core/SemanticId.ts +423 -0
- package/src/core/VersionManager.ts +405 -0
- package/src/core/brandNodeInternal.ts +16 -0
- package/src/core/nodes/GuaranteeNode.ts +162 -0
- package/src/core/nodes/IssueNode.ts +177 -0
- package/src/core/nodes/NodeKind.ts +192 -0
- package/src/diagnostics/DiagnosticCollector.ts +170 -0
- package/src/diagnostics/DiagnosticReporter.ts +395 -0
- package/src/diagnostics/DiagnosticWriter.ts +50 -0
- package/src/diagnostics/categories.ts +104 -0
- package/src/diagnostics/index.ts +30 -0
- package/src/errors/GrafemaError.ts +297 -0
- package/src/index.ts +261 -0
- package/src/instructions/index.ts +21 -0
- package/src/instructions/onboarding.md +133 -0
- package/src/knowledge/KnowledgeBase.ts +486 -0
- package/src/knowledge/SemanticAddressResolver.ts +191 -0
- package/src/knowledge/git-ingest.ts +402 -0
- package/src/knowledge/git-queries.ts +269 -0
- package/src/knowledge/index.ts +29 -0
- package/src/knowledge/parser.ts +294 -0
- package/src/knowledge/types.ts +146 -0
- package/src/logging/Logger.ts +303 -0
- package/src/notation/archetypes.ts +189 -0
- package/src/notation/fold.ts +696 -0
- package/src/notation/index.ts +27 -0
- package/src/notation/lodExtractor.ts +177 -0
- package/src/notation/nameShortener.ts +24 -0
- package/src/notation/perspectives.ts +18 -0
- package/src/notation/renderer.ts +394 -0
- package/src/notation/traceRenderer.ts +458 -0
- package/src/notation/types.ts +79 -0
- package/src/queries/NodeContext.ts +280 -0
- package/src/queries/findCallsInFunction.ts +249 -0
- package/src/queries/findContainingFunction.ts +124 -0
- package/src/queries/index.ts +44 -0
- package/src/queries/traceDataflow.ts +838 -0
- package/src/queries/traceValues.ts +531 -0
- package/src/queries/types.ts +191 -0
- package/src/schema/GraphSchemaExtractor.ts +177 -0
- package/src/schema/InterfaceSchemaExtractor.ts +173 -0
- package/src/schema/index.ts +5 -0
- package/src/storage/backends/RFDBServerBackend.ts +895 -0
- package/src/storage/backends/typeValidation.ts +154 -0
- package/src/utils/findRfdbBinary.ts +288 -0
- package/src/utils/lazyDownload.ts +206 -0
- package/src/utils/moduleResolution.ts +271 -0
- package/src/utils/resolveNodeFile.ts +18 -0
- package/src/utils/startRfdbServer.ts +197 -0
- package/src/validation/PathValidator.ts +334 -0
- package/src/version.ts +28 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Knowledge Base — persistent knowledge layer for Grafema
|
|
3
|
+
*/
|
|
4
|
+
export { KnowledgeBase } from './KnowledgeBase.js';
|
|
5
|
+
export { SemanticAddressResolver, parseSemanticAddress } from './SemanticAddressResolver.js';
|
|
6
|
+
export type { ResolverBackend } from './SemanticAddressResolver.js';
|
|
7
|
+
export { parseFrontmatter, parseKBNode, serializeKBNode, parseEdgesFile, appendEdge } from './parser.js';
|
|
8
|
+
export type { KBNodeType, KBLifecycle, KBScope, KBNodeBase, KBDecision, KBFact, KBSession, KBNode, KBEdge, KBStats, KBQueryFilter, ParsedSemanticAddress, ResolvedAddress, DanglingCodeRef, } from './types.js';
|
|
9
|
+
export { parseYamlArrayFile } from './parser.js';
|
|
10
|
+
export { GitIngest, parseGitLog, normalizeAuthors } from './git-ingest.js';
|
|
11
|
+
export type { RawCommit, FileChange, AuthorEntry, CommitEntry, IngestResult, Meta } from './git-ingest.js';
|
|
12
|
+
export { getChurn, getCoChanges, getOwnership, getArchaeology } from './git-queries.js';
|
|
13
|
+
export type { ChurnEntry, CoChangeEntry, OwnershipEntry, ArchaeologyEntry } from './git-queries.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/knowledge/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAC7F,YAAY,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzG,YAAY,EACV,UAAU,EACV,WAAW,EACX,OAAO,EACP,UAAU,EACV,UAAU,EACV,MAAM,EACN,SAAS,EACT,MAAM,EACN,MAAM,EACN,OAAO,EACP,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC3G,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACxF,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Knowledge Base — persistent knowledge layer for Grafema
|
|
3
|
+
*/
|
|
4
|
+
export { KnowledgeBase } from './KnowledgeBase.js';
|
|
5
|
+
export { SemanticAddressResolver, parseSemanticAddress } from './SemanticAddressResolver.js';
|
|
6
|
+
export { parseFrontmatter, parseKBNode, serializeKBNode, parseEdgesFile, appendEdge } from './parser.js';
|
|
7
|
+
export { parseYamlArrayFile } from './parser.js';
|
|
8
|
+
export { GitIngest, parseGitLog, normalizeAuthors } from './git-ingest.js';
|
|
9
|
+
export { getChurn, getCoChanges, getOwnership, getArchaeology } from './git-queries.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/knowledge/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAE7F,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAiBzG,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE3E,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Knowledge Base Parser
|
|
3
|
+
*
|
|
4
|
+
* Parses markdown files with YAML frontmatter into KBNode objects.
|
|
5
|
+
* Serializes KBNode objects back to markdown format.
|
|
6
|
+
*/
|
|
7
|
+
import type { KBNode, KBEdge } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Split markdown content into YAML frontmatter and body.
|
|
10
|
+
*/
|
|
11
|
+
export declare function parseFrontmatter(content: string): {
|
|
12
|
+
frontmatter: Record<string, unknown>;
|
|
13
|
+
body: string;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Validate and construct a typed KBNode from parsed frontmatter and body.
|
|
17
|
+
*/
|
|
18
|
+
export declare function parseKBNode(frontmatter: Record<string, unknown>, body: string, filePath: string): KBNode;
|
|
19
|
+
/**
|
|
20
|
+
* Serialize a KBNode back to markdown with YAML frontmatter.
|
|
21
|
+
*/
|
|
22
|
+
export declare function serializeKBNode(node: KBNode): string;
|
|
23
|
+
/**
|
|
24
|
+
* Parse edges.yaml file into KBEdge array.
|
|
25
|
+
*/
|
|
26
|
+
export declare function parseEdgesFile(filePath: string): KBEdge[];
|
|
27
|
+
/**
|
|
28
|
+
* Parse a YAML file containing an array of node objects (e.g., commits/2026-03.yaml, authors.yaml).
|
|
29
|
+
* Each entry must have at least a `type` field. ID is generated based on type:
|
|
30
|
+
* - COMMIT → kb:commit:<short-hash>
|
|
31
|
+
* - AUTHOR → kb:author:<slug>
|
|
32
|
+
* - Others → kb:<type>:<index>
|
|
33
|
+
*/
|
|
34
|
+
export declare function parseYamlArrayFile(filePath: string): KBNode[];
|
|
35
|
+
/**
|
|
36
|
+
* Append an edge to the edges.yaml file.
|
|
37
|
+
*/
|
|
38
|
+
export declare function appendEdge(filePath: string, edge: KBEdge): void;
|
|
39
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/knowledge/parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,EAAuD,MAAM,YAAY,CAAC;AAKlH;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAwBxG;AAYD;;GAEG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CA8DxG;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA4CpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CA2BzD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAwD7D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAuB/D"}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Knowledge Base Parser
|
|
3
|
+
*
|
|
4
|
+
* Parses markdown files with YAML frontmatter into KBNode objects.
|
|
5
|
+
* Serializes KBNode objects back to markdown format.
|
|
6
|
+
*/
|
|
7
|
+
import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
|
|
8
|
+
import { readFileSync, appendFileSync, mkdirSync, existsSync } from 'fs';
|
|
9
|
+
import { dirname } from 'path';
|
|
10
|
+
const VALID_TYPES = ['DECISION', 'FACT', 'SESSION', 'COMMIT', 'FILE_CHANGE', 'AUTHOR', 'TICKET', 'INCIDENT'];
|
|
11
|
+
const ID_PATTERN = /^kb:[a-z_]+:[a-z0-9_-]+$/;
|
|
12
|
+
/**
|
|
13
|
+
* Split markdown content into YAML frontmatter and body.
|
|
14
|
+
*/
|
|
15
|
+
export function parseFrontmatter(content) {
|
|
16
|
+
const trimmed = content.trimStart();
|
|
17
|
+
if (!trimmed.startsWith('---\n') && !trimmed.startsWith('---\r\n')) {
|
|
18
|
+
throw new Error('Missing frontmatter: file must start with ---');
|
|
19
|
+
}
|
|
20
|
+
// Find closing --- delimiter
|
|
21
|
+
const firstNewline = trimmed.indexOf('\n');
|
|
22
|
+
const rest = trimmed.slice(firstNewline + 1);
|
|
23
|
+
const closingIndex = rest.indexOf('\n---');
|
|
24
|
+
if (closingIndex === -1) {
|
|
25
|
+
throw new Error('Missing frontmatter: no closing --- delimiter found');
|
|
26
|
+
}
|
|
27
|
+
const yamlContent = rest.slice(0, closingIndex);
|
|
28
|
+
const body = rest.slice(closingIndex + 4).replace(/^\r?\n/, ''); // skip \n--- and leading newline
|
|
29
|
+
const frontmatter = parseYaml(yamlContent);
|
|
30
|
+
if (!frontmatter || typeof frontmatter !== 'object') {
|
|
31
|
+
throw new Error('Invalid frontmatter: YAML must be an object');
|
|
32
|
+
}
|
|
33
|
+
return { frontmatter, body };
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Derive lifecycle from file path.
|
|
37
|
+
* declared/ → declared, derived/ → derived, synced/ → synced
|
|
38
|
+
*/
|
|
39
|
+
function deriveLifecycle(filePath) {
|
|
40
|
+
if (filePath.includes('/derived/') || filePath.includes('\\derived\\'))
|
|
41
|
+
return 'derived';
|
|
42
|
+
if (filePath.includes('/synced/') || filePath.includes('\\synced\\'))
|
|
43
|
+
return 'synced';
|
|
44
|
+
return 'declared'; // default
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Validate and construct a typed KBNode from parsed frontmatter and body.
|
|
48
|
+
*/
|
|
49
|
+
export function parseKBNode(frontmatter, body, filePath) {
|
|
50
|
+
// Required: id
|
|
51
|
+
const id = frontmatter.id;
|
|
52
|
+
if (typeof id !== 'string' || !id) {
|
|
53
|
+
throw new Error(`Missing required field "id" in ${filePath}`);
|
|
54
|
+
}
|
|
55
|
+
if (!ID_PATTERN.test(id)) {
|
|
56
|
+
throw new Error(`Invalid ID format "${id}" in ${filePath}. Must match kb:<type>:<slug> (lowercase, hyphens, underscores, digits)`);
|
|
57
|
+
}
|
|
58
|
+
// Required: type
|
|
59
|
+
const type = frontmatter.type;
|
|
60
|
+
if (typeof type !== 'string' || !VALID_TYPES.includes(type)) {
|
|
61
|
+
throw new Error(`Invalid or missing type "${type}" in ${filePath}. Must be one of: ${VALID_TYPES.join(', ')}`);
|
|
62
|
+
}
|
|
63
|
+
const lifecycle = deriveLifecycle(filePath);
|
|
64
|
+
// Base node
|
|
65
|
+
const base = {
|
|
66
|
+
id: id,
|
|
67
|
+
type: type,
|
|
68
|
+
projections: Array.isArray(frontmatter.projections) ? frontmatter.projections : [],
|
|
69
|
+
created: String(frontmatter.created ?? ''),
|
|
70
|
+
content: body.trim(),
|
|
71
|
+
filePath,
|
|
72
|
+
lifecycle,
|
|
73
|
+
};
|
|
74
|
+
// Optional base fields
|
|
75
|
+
if (frontmatter.subtype)
|
|
76
|
+
base.subtype = String(frontmatter.subtype);
|
|
77
|
+
if (frontmatter.scope)
|
|
78
|
+
base.scope = frontmatter.scope;
|
|
79
|
+
if (frontmatter.source)
|
|
80
|
+
base.source = String(frontmatter.source);
|
|
81
|
+
if (Array.isArray(frontmatter.relates_to))
|
|
82
|
+
base.relates_to = frontmatter.relates_to;
|
|
83
|
+
// Type-specific fields
|
|
84
|
+
switch (type) {
|
|
85
|
+
case 'DECISION': {
|
|
86
|
+
const decision = base;
|
|
87
|
+
decision.status = frontmatter.status ?? 'proposed';
|
|
88
|
+
if (frontmatter.effective_from)
|
|
89
|
+
decision.effective_from = String(frontmatter.effective_from);
|
|
90
|
+
if (frontmatter.effective_until)
|
|
91
|
+
decision.effective_until = String(frontmatter.effective_until);
|
|
92
|
+
if (Array.isArray(frontmatter.applies_to))
|
|
93
|
+
decision.applies_to = frontmatter.applies_to;
|
|
94
|
+
if (frontmatter.superseded_by)
|
|
95
|
+
decision.superseded_by = String(frontmatter.superseded_by);
|
|
96
|
+
return decision;
|
|
97
|
+
}
|
|
98
|
+
case 'FACT': {
|
|
99
|
+
const fact = base;
|
|
100
|
+
if (frontmatter.confidence)
|
|
101
|
+
fact.confidence = frontmatter.confidence;
|
|
102
|
+
if (frontmatter.superseded_by)
|
|
103
|
+
fact.superseded_by = String(frontmatter.superseded_by);
|
|
104
|
+
return fact;
|
|
105
|
+
}
|
|
106
|
+
case 'SESSION': {
|
|
107
|
+
const session = base;
|
|
108
|
+
if (frontmatter.task_id)
|
|
109
|
+
session.task_id = String(frontmatter.task_id);
|
|
110
|
+
if (frontmatter.session_path)
|
|
111
|
+
session.session_path = String(frontmatter.session_path);
|
|
112
|
+
if (Array.isArray(frontmatter.produced))
|
|
113
|
+
session.produced = frontmatter.produced;
|
|
114
|
+
return session;
|
|
115
|
+
}
|
|
116
|
+
default:
|
|
117
|
+
return base;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Serialize a KBNode back to markdown with YAML frontmatter.
|
|
122
|
+
*/
|
|
123
|
+
export function serializeKBNode(node) {
|
|
124
|
+
// Build frontmatter object (exclude computed/internal fields)
|
|
125
|
+
const fm = {
|
|
126
|
+
id: node.id,
|
|
127
|
+
type: node.type,
|
|
128
|
+
};
|
|
129
|
+
// Decision-specific
|
|
130
|
+
if (node.type === 'DECISION') {
|
|
131
|
+
const d = node;
|
|
132
|
+
fm.status = d.status;
|
|
133
|
+
if (d.applies_to?.length)
|
|
134
|
+
fm.applies_to = d.applies_to;
|
|
135
|
+
if (d.effective_from)
|
|
136
|
+
fm.effective_from = d.effective_from;
|
|
137
|
+
if (d.effective_until)
|
|
138
|
+
fm.effective_until = d.effective_until;
|
|
139
|
+
if (d.superseded_by)
|
|
140
|
+
fm.superseded_by = d.superseded_by;
|
|
141
|
+
}
|
|
142
|
+
// Fact-specific
|
|
143
|
+
if (node.type === 'FACT') {
|
|
144
|
+
const f = node;
|
|
145
|
+
if (f.confidence)
|
|
146
|
+
fm.confidence = f.confidence;
|
|
147
|
+
if (f.superseded_by)
|
|
148
|
+
fm.superseded_by = f.superseded_by;
|
|
149
|
+
}
|
|
150
|
+
// Session-specific
|
|
151
|
+
if (node.type === 'SESSION') {
|
|
152
|
+
const s = node;
|
|
153
|
+
if (s.task_id)
|
|
154
|
+
fm.task_id = s.task_id;
|
|
155
|
+
if (s.session_path)
|
|
156
|
+
fm.session_path = s.session_path;
|
|
157
|
+
if (s.produced?.length)
|
|
158
|
+
fm.produced = s.produced;
|
|
159
|
+
}
|
|
160
|
+
// Common optional fields
|
|
161
|
+
if (node.subtype)
|
|
162
|
+
fm.subtype = node.subtype;
|
|
163
|
+
if (node.scope)
|
|
164
|
+
fm.scope = node.scope;
|
|
165
|
+
if (node.projections.length > 0)
|
|
166
|
+
fm.projections = node.projections;
|
|
167
|
+
if (node.source)
|
|
168
|
+
fm.source = node.source;
|
|
169
|
+
if (node.relates_to?.length)
|
|
170
|
+
fm.relates_to = node.relates_to;
|
|
171
|
+
fm.created = node.created;
|
|
172
|
+
const yamlStr = stringifyYaml(fm, { lineWidth: 0 }).trimEnd();
|
|
173
|
+
const body = node.content ? `\n${node.content}\n` : '\n';
|
|
174
|
+
return `---\n${yamlStr}\n---\n${body}`;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Parse edges.yaml file into KBEdge array.
|
|
178
|
+
*/
|
|
179
|
+
export function parseEdgesFile(filePath) {
|
|
180
|
+
if (!existsSync(filePath))
|
|
181
|
+
return [];
|
|
182
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
183
|
+
const parsed = parseYaml(content);
|
|
184
|
+
if (!parsed)
|
|
185
|
+
return [];
|
|
186
|
+
if (!Array.isArray(parsed)) {
|
|
187
|
+
throw new Error(`edges.yaml must be a YAML array, got ${typeof parsed}`);
|
|
188
|
+
}
|
|
189
|
+
return parsed.map((entry, i) => {
|
|
190
|
+
if (!entry || typeof entry !== 'object') {
|
|
191
|
+
throw new Error(`Edge at index ${i} is not an object`);
|
|
192
|
+
}
|
|
193
|
+
const e = entry;
|
|
194
|
+
if (!e.type || !e.from || !e.to) {
|
|
195
|
+
throw new Error(`Edge at index ${i} missing required fields (type, from, to)`);
|
|
196
|
+
}
|
|
197
|
+
const edge = {
|
|
198
|
+
type: String(e.type),
|
|
199
|
+
from: String(e.from),
|
|
200
|
+
to: String(e.to),
|
|
201
|
+
};
|
|
202
|
+
if (e.evidence)
|
|
203
|
+
edge.evidence = String(e.evidence);
|
|
204
|
+
return edge;
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Parse a YAML file containing an array of node objects (e.g., commits/2026-03.yaml, authors.yaml).
|
|
209
|
+
* Each entry must have at least a `type` field. ID is generated based on type:
|
|
210
|
+
* - COMMIT → kb:commit:<short-hash>
|
|
211
|
+
* - AUTHOR → kb:author:<slug>
|
|
212
|
+
* - Others → kb:<type>:<index>
|
|
213
|
+
*/
|
|
214
|
+
export function parseYamlArrayFile(filePath) {
|
|
215
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
216
|
+
const parsed = parseYaml(content);
|
|
217
|
+
if (!Array.isArray(parsed)) {
|
|
218
|
+
throw new Error(`YAML array file must contain an array, got ${typeof parsed} in ${filePath}`);
|
|
219
|
+
}
|
|
220
|
+
return parsed.map((entry, index) => {
|
|
221
|
+
if (!entry || typeof entry !== 'object') {
|
|
222
|
+
throw new Error(`Entry at index ${index} is not an object in ${filePath}`);
|
|
223
|
+
}
|
|
224
|
+
const e = entry;
|
|
225
|
+
const type = e.type;
|
|
226
|
+
if (typeof type !== 'string' || !VALID_TYPES.includes(type)) {
|
|
227
|
+
throw new Error(`Invalid or missing type "${type}" at index ${index} in ${filePath}. Must be one of: ${VALID_TYPES.join(', ')}`);
|
|
228
|
+
}
|
|
229
|
+
// Generate ID based on type
|
|
230
|
+
let id;
|
|
231
|
+
switch (type) {
|
|
232
|
+
case 'COMMIT':
|
|
233
|
+
id = `kb:commit:${String(e.hash ?? '').slice(0, 8)}`;
|
|
234
|
+
break;
|
|
235
|
+
case 'AUTHOR': {
|
|
236
|
+
if (typeof e.id === 'string' && e.id.startsWith('kb:author:')) {
|
|
237
|
+
id = e.id;
|
|
238
|
+
}
|
|
239
|
+
else if (typeof e.id === 'string') {
|
|
240
|
+
id = `kb:author:${e.id}`;
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
const name = String(e.name ?? '');
|
|
244
|
+
id = `kb:author:${name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '')}`;
|
|
245
|
+
}
|
|
246
|
+
break;
|
|
247
|
+
}
|
|
248
|
+
default:
|
|
249
|
+
id = `kb:${type.toLowerCase()}:${index}`;
|
|
250
|
+
break;
|
|
251
|
+
}
|
|
252
|
+
const base = {
|
|
253
|
+
id,
|
|
254
|
+
type: type,
|
|
255
|
+
projections: Array.isArray(e.projections) ? e.projections : [],
|
|
256
|
+
created: type === 'COMMIT' ? (String(e.date ?? '').split('T')[0]) : '',
|
|
257
|
+
content: '',
|
|
258
|
+
filePath,
|
|
259
|
+
lifecycle: 'derived',
|
|
260
|
+
};
|
|
261
|
+
// Spread all entry fields onto the node, preserving base fields
|
|
262
|
+
const node = { ...e, ...base };
|
|
263
|
+
return node;
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Append an edge to the edges.yaml file.
|
|
268
|
+
*/
|
|
269
|
+
export function appendEdge(filePath, edge) {
|
|
270
|
+
const dir = dirname(filePath);
|
|
271
|
+
if (!existsSync(dir)) {
|
|
272
|
+
mkdirSync(dir, { recursive: true });
|
|
273
|
+
}
|
|
274
|
+
const entry = {
|
|
275
|
+
type: edge.type,
|
|
276
|
+
from: edge.from,
|
|
277
|
+
to: edge.to,
|
|
278
|
+
};
|
|
279
|
+
if (edge.evidence)
|
|
280
|
+
entry.evidence = edge.evidence;
|
|
281
|
+
const yamlEntry = stringifyYaml([entry], { lineWidth: 0 }).trimEnd();
|
|
282
|
+
if (!existsSync(filePath)) {
|
|
283
|
+
// New file — write with comment header
|
|
284
|
+
const header = '# Knowledge Graph edges\n# Format: {type, from, to, evidence?}\n\n';
|
|
285
|
+
appendFileSync(filePath, header + yamlEntry + '\n', 'utf-8');
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
// Append to existing file
|
|
289
|
+
appendFileSync(filePath, '\n' + yamlEntry + '\n', 'utf-8');
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/knowledge/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Knowledge Base Types
|
|
3
|
+
*
|
|
4
|
+
* Semantic types for the persistent knowledge layer.
|
|
5
|
+
* KB nodes are stored as git-tracked markdown files with YAML frontmatter.
|
|
6
|
+
*/
|
|
7
|
+
/** Node types in the knowledge graph */
|
|
8
|
+
export type KBNodeType = 'DECISION' | 'FACT' | 'SESSION' | 'COMMIT' | 'FILE_CHANGE' | 'AUTHOR' | 'TICKET' | 'INCIDENT';
|
|
9
|
+
/** Lifecycle derived from directory path */
|
|
10
|
+
export type KBLifecycle = 'declared' | 'derived' | 'synced';
|
|
11
|
+
/** Scope of a knowledge node */
|
|
12
|
+
export type KBScope = 'global' | 'project' | 'module';
|
|
13
|
+
/** Base fields shared by all KB nodes */
|
|
14
|
+
export interface KBNodeBase {
|
|
15
|
+
/** Semantic ID in format kb:<type>:<slug> */
|
|
16
|
+
id: string;
|
|
17
|
+
/** Node type */
|
|
18
|
+
type: KBNodeType;
|
|
19
|
+
/** Subtype within the node type (e.g., FACT: domain|error|preference, DECISION: adr|runbook) */
|
|
20
|
+
subtype?: string;
|
|
21
|
+
/** Scope of applicability */
|
|
22
|
+
scope?: KBScope;
|
|
23
|
+
/** Projections this node belongs to (e.g., 'epistemic', 'temporal') */
|
|
24
|
+
projections: string[];
|
|
25
|
+
/** Source node that produced this (e.g., session ID) */
|
|
26
|
+
source?: string;
|
|
27
|
+
/** Creation date (YYYY-MM-DD) */
|
|
28
|
+
created: string;
|
|
29
|
+
/** Markdown body content */
|
|
30
|
+
content: string;
|
|
31
|
+
/** Path to the .md file on disk */
|
|
32
|
+
filePath: string;
|
|
33
|
+
/** Lifecycle derived from directory structure */
|
|
34
|
+
lifecycle: KBLifecycle;
|
|
35
|
+
/** Semantic IDs of related nodes */
|
|
36
|
+
relates_to?: string[];
|
|
37
|
+
}
|
|
38
|
+
/** Decision node — architectural/design decisions */
|
|
39
|
+
export interface KBDecision extends KBNodeBase {
|
|
40
|
+
type: 'DECISION';
|
|
41
|
+
/** Decision status */
|
|
42
|
+
status: 'active' | 'superseded' | 'deprecated' | 'proposed';
|
|
43
|
+
/** Date when decision took effect */
|
|
44
|
+
effective_from?: string;
|
|
45
|
+
/** Date when decision was superseded/deprecated */
|
|
46
|
+
effective_until?: string;
|
|
47
|
+
/** Semantic addresses of code this applies to */
|
|
48
|
+
applies_to?: string[];
|
|
49
|
+
/** ID of the decision that superseded this one */
|
|
50
|
+
superseded_by?: string;
|
|
51
|
+
}
|
|
52
|
+
/** Fact node — observed facts about the codebase */
|
|
53
|
+
export interface KBFact extends KBNodeBase {
|
|
54
|
+
type: 'FACT';
|
|
55
|
+
/** Confidence level */
|
|
56
|
+
confidence?: 'high' | 'medium' | 'low';
|
|
57
|
+
/** ID of the fact that superseded this one */
|
|
58
|
+
superseded_by?: string;
|
|
59
|
+
}
|
|
60
|
+
/** Session node — records of design/work sessions */
|
|
61
|
+
export interface KBSession extends KBNodeBase {
|
|
62
|
+
type: 'SESSION';
|
|
63
|
+
/** Associated Linear task ID */
|
|
64
|
+
task_id?: string;
|
|
65
|
+
/** Path to session transcript */
|
|
66
|
+
session_path?: string;
|
|
67
|
+
/** IDs of nodes produced during this session */
|
|
68
|
+
produced?: string[];
|
|
69
|
+
}
|
|
70
|
+
/** Union of all KB node types */
|
|
71
|
+
export type KBNode = KBDecision | KBFact | KBSession | KBNodeBase;
|
|
72
|
+
/** Edge in the knowledge graph */
|
|
73
|
+
export interface KBEdge {
|
|
74
|
+
/** Edge type (e.g., PRODUCED, IMPLEMENTS, INFORMED_BY) */
|
|
75
|
+
type: string;
|
|
76
|
+
/** Source node semantic ID */
|
|
77
|
+
from: string;
|
|
78
|
+
/** Target node semantic ID */
|
|
79
|
+
to: string;
|
|
80
|
+
/** Optional evidence for the relationship */
|
|
81
|
+
evidence?: string;
|
|
82
|
+
}
|
|
83
|
+
/** Statistics about the knowledge base */
|
|
84
|
+
export interface KBStats {
|
|
85
|
+
/** Total node count */
|
|
86
|
+
totalNodes: number;
|
|
87
|
+
/** Counts by node type */
|
|
88
|
+
byType: Partial<Record<KBNodeType, number>>;
|
|
89
|
+
/** Counts by lifecycle */
|
|
90
|
+
byLifecycle: Partial<Record<KBLifecycle, number>>;
|
|
91
|
+
/** Total edge count */
|
|
92
|
+
totalEdges: number;
|
|
93
|
+
/** Edge counts by type */
|
|
94
|
+
edgesByType: Record<string, number>;
|
|
95
|
+
/** Dangling edge references (from/to IDs that don't exist as nodes) */
|
|
96
|
+
danglingRefs: string[];
|
|
97
|
+
/** KB nodes referencing code addresses that don't resolve to graph nodes */
|
|
98
|
+
danglingCodeRefs: DanglingCodeRef[];
|
|
99
|
+
}
|
|
100
|
+
/** Filter for querying KB nodes */
|
|
101
|
+
export interface KBQueryFilter {
|
|
102
|
+
/** Filter by node type */
|
|
103
|
+
type?: KBNodeType;
|
|
104
|
+
/** Filter by projection */
|
|
105
|
+
projection?: string;
|
|
106
|
+
/** Case-insensitive text search in body content */
|
|
107
|
+
text?: string;
|
|
108
|
+
/** Filter by decision status */
|
|
109
|
+
status?: string;
|
|
110
|
+
/** Filter by relates_to containing this ID */
|
|
111
|
+
relates_to?: string;
|
|
112
|
+
/** When true, return only nodes with dangling code references */
|
|
113
|
+
include_dangling_only?: boolean;
|
|
114
|
+
}
|
|
115
|
+
/** Parsed semantic address: file:name:TYPE or file:scope1:...:scopeN:name:TYPE */
|
|
116
|
+
export interface ParsedSemanticAddress {
|
|
117
|
+
file: string;
|
|
118
|
+
name: string;
|
|
119
|
+
type: string;
|
|
120
|
+
scopePath: string[];
|
|
121
|
+
}
|
|
122
|
+
/** Result of resolving a semantic address to a code graph node */
|
|
123
|
+
export interface ResolvedAddress {
|
|
124
|
+
address: string;
|
|
125
|
+
codeNodeId: string | null;
|
|
126
|
+
status: 'resolved' | 'dangling';
|
|
127
|
+
}
|
|
128
|
+
/** A dangling code reference from a KB node */
|
|
129
|
+
export interface DanglingCodeRef {
|
|
130
|
+
nodeId: string;
|
|
131
|
+
address: string;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/knowledge/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/knowledge/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger - Lightweight logging for Grafema
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - 5 log levels: silent, errors, warnings, info, debug
|
|
6
|
+
* - Context support for structured logging
|
|
7
|
+
* - Console and file output (or both via MultiLogger)
|
|
8
|
+
* - Safe handling of circular references
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* const logger = createLogger('info');
|
|
12
|
+
* logger.info('Processing files', { count: 150 });
|
|
13
|
+
*
|
|
14
|
+
* // Write logs to file (REG-199):
|
|
15
|
+
* const logger = createLogger('info', { logFile: '.grafema/analysis.log' });
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Log level type
|
|
19
|
+
*/
|
|
20
|
+
export type LogLevel = 'silent' | 'errors' | 'warnings' | 'info' | 'debug';
|
|
21
|
+
/**
|
|
22
|
+
* Logger interface
|
|
23
|
+
*/
|
|
24
|
+
export interface Logger {
|
|
25
|
+
error(message: string, context?: Record<string, unknown>): void;
|
|
26
|
+
warn(message: string, context?: Record<string, unknown>): void;
|
|
27
|
+
info(message: string, context?: Record<string, unknown>): void;
|
|
28
|
+
debug(message: string, context?: Record<string, unknown>): void;
|
|
29
|
+
trace(message: string, context?: Record<string, unknown>): void;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Console-based Logger implementation
|
|
33
|
+
*
|
|
34
|
+
* Respects log level threshold - methods below threshold are no-ops.
|
|
35
|
+
*/
|
|
36
|
+
export declare class ConsoleLogger implements Logger {
|
|
37
|
+
private readonly level;
|
|
38
|
+
private readonly priority;
|
|
39
|
+
constructor(logLevel?: LogLevel);
|
|
40
|
+
private shouldLog;
|
|
41
|
+
error(message: string, context?: Record<string, unknown>): void;
|
|
42
|
+
warn(message: string, context?: Record<string, unknown>): void;
|
|
43
|
+
info(message: string, context?: Record<string, unknown>): void;
|
|
44
|
+
debug(message: string, context?: Record<string, unknown>): void;
|
|
45
|
+
trace(message: string, context?: Record<string, unknown>): void;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* File-based Logger implementation (REG-199)
|
|
49
|
+
*
|
|
50
|
+
* Writes log messages to a file with ISO timestamps using a write stream
|
|
51
|
+
* (non-blocking I/O). File is truncated on construction (overwritten each run).
|
|
52
|
+
* Parent directories are created automatically.
|
|
53
|
+
*
|
|
54
|
+
* Validates path on construction — throws if the directory is not writable
|
|
55
|
+
* or the path points to a directory.
|
|
56
|
+
*/
|
|
57
|
+
export declare class FileLogger implements Logger {
|
|
58
|
+
private readonly priority;
|
|
59
|
+
private readonly stream;
|
|
60
|
+
constructor(logLevel: LogLevel, filePath: string);
|
|
61
|
+
private shouldLog;
|
|
62
|
+
private writeLine;
|
|
63
|
+
error(message: string, context?: Record<string, unknown>): void;
|
|
64
|
+
warn(message: string, context?: Record<string, unknown>): void;
|
|
65
|
+
info(message: string, context?: Record<string, unknown>): void;
|
|
66
|
+
debug(message: string, context?: Record<string, unknown>): void;
|
|
67
|
+
trace(message: string, context?: Record<string, unknown>): void;
|
|
68
|
+
/** Flush and close the write stream. Returns when all data is written. */
|
|
69
|
+
close(): Promise<void>;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Multi-output Logger that delegates to multiple Logger instances.
|
|
73
|
+
*
|
|
74
|
+
* Each inner logger applies its own level filtering independently.
|
|
75
|
+
* Used to write to both console and file simultaneously.
|
|
76
|
+
*/
|
|
77
|
+
export declare class MultiLogger implements Logger {
|
|
78
|
+
private readonly loggers;
|
|
79
|
+
constructor(loggers: Logger[]);
|
|
80
|
+
error(message: string, context?: Record<string, unknown>): void;
|
|
81
|
+
warn(message: string, context?: Record<string, unknown>): void;
|
|
82
|
+
info(message: string, context?: Record<string, unknown>): void;
|
|
83
|
+
debug(message: string, context?: Record<string, unknown>): void;
|
|
84
|
+
trace(message: string, context?: Record<string, unknown>): void;
|
|
85
|
+
/** Close all inner loggers that have a close() method (e.g., FileLogger). */
|
|
86
|
+
close(): Promise<void>;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Create a Logger instance with the specified log level.
|
|
90
|
+
*
|
|
91
|
+
* When logFile is specified, returns a MultiLogger that writes to both
|
|
92
|
+
* console and file. The file logger always captures at 'debug' level
|
|
93
|
+
* for complete post-mortem debugging, regardless of the console level.
|
|
94
|
+
*/
|
|
95
|
+
export declare function createLogger(level: LogLevel, options?: {
|
|
96
|
+
logFile?: string;
|
|
97
|
+
}): Logger;
|
|
98
|
+
//# sourceMappingURL=Logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../../src/logging/Logger.ts"],"names":[],"mappings":"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"}
|