@rasensio/aidlc 0.7.0 → 1.1.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/README.md +25 -1
- package/dist/cli.js +13 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/discover.d.ts +6 -2
- package/dist/commands/discover.d.ts.map +1 -1
- package/dist/commands/discover.js +30 -4
- package/dist/commands/discover.js.map +1 -1
- package/dist/commands/gate.d.ts.map +1 -1
- package/dist/commands/gate.js +8 -0
- package/dist/commands/gate.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +3 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/knowledge.d.ts +16 -0
- package/dist/commands/knowledge.d.ts.map +1 -0
- package/dist/commands/knowledge.js +454 -0
- package/dist/commands/knowledge.js.map +1 -0
- package/dist/commands/start.d.ts +2 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +31 -1
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/transition.d.ts.map +1 -1
- package/dist/commands/transition.js +14 -1
- package/dist/commands/transition.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +8 -1
- package/dist/commands/update.js.map +1 -1
- package/dist/compile/adapters/claude-code.d.ts.map +1 -1
- package/dist/compile/adapters/claude-code.js +5 -0
- package/dist/compile/adapters/claude-code.js.map +1 -1
- package/dist/compile/adapters/codex.d.ts.map +1 -1
- package/dist/compile/adapters/codex.js +5 -0
- package/dist/compile/adapters/codex.js.map +1 -1
- package/dist/compile/adapters/cursor.d.ts.map +1 -1
- package/dist/compile/adapters/cursor.js +5 -0
- package/dist/compile/adapters/cursor.js.map +1 -1
- package/dist/compile/adapters/kiro.d.ts.map +1 -1
- package/dist/compile/adapters/kiro.js +5 -0
- package/dist/compile/adapters/kiro.js.map +1 -1
- package/dist/compile/adapters/windsurf.d.ts.map +1 -1
- package/dist/compile/adapters/windsurf.js +5 -0
- package/dist/compile/adapters/windsurf.js.map +1 -1
- package/dist/compile/knowledge-section.d.ts +19 -0
- package/dist/compile/knowledge-section.d.ts.map +1 -0
- package/dist/compile/knowledge-section.js +46 -0
- package/dist/compile/knowledge-section.js.map +1 -0
- package/dist/core/types.d.ts +3 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/discover/scanner.d.ts.map +1 -1
- package/dist/discover/scanner.js +18 -12
- package/dist/discover/scanner.js.map +1 -1
- package/dist/discover/workspaces.d.ts +24 -0
- package/dist/discover/workspaces.d.ts.map +1 -0
- package/dist/discover/workspaces.js +116 -0
- package/dist/discover/workspaces.js.map +1 -0
- package/dist/knowledge/compact.d.ts +24 -0
- package/dist/knowledge/compact.d.ts.map +1 -0
- package/dist/knowledge/compact.js +70 -0
- package/dist/knowledge/compact.js.map +1 -0
- package/dist/knowledge/context-generator.d.ts +36 -0
- package/dist/knowledge/context-generator.d.ts.map +1 -0
- package/dist/knowledge/context-generator.js +150 -0
- package/dist/knowledge/context-generator.js.map +1 -0
- package/dist/knowledge/engine.d.ts +40 -0
- package/dist/knowledge/engine.d.ts.map +1 -0
- package/dist/knowledge/engine.js +79 -0
- package/dist/knowledge/engine.js.map +1 -0
- package/dist/knowledge/gate-criterion.d.ts +36 -0
- package/dist/knowledge/gate-criterion.d.ts.map +1 -0
- package/dist/knowledge/gate-criterion.js +60 -0
- package/dist/knowledge/gate-criterion.js.map +1 -0
- package/dist/knowledge/index/knowledge-index.d.ts +45 -0
- package/dist/knowledge/index/knowledge-index.d.ts.map +1 -0
- package/dist/knowledge/index/knowledge-index.js +20 -0
- package/dist/knowledge/index/knowledge-index.js.map +1 -0
- package/dist/knowledge/index/sqlite-index.d.ts +53 -0
- package/dist/knowledge/index/sqlite-index.d.ts.map +1 -0
- package/dist/knowledge/index/sqlite-index.js +354 -0
- package/dist/knowledge/index/sqlite-index.js.map +1 -0
- package/dist/knowledge/merge-driver.d.ts +36 -0
- package/dist/knowledge/merge-driver.d.ts.map +1 -0
- package/dist/knowledge/merge-driver.js +130 -0
- package/dist/knowledge/merge-driver.js.map +1 -0
- package/dist/knowledge/reader.d.ts +32 -0
- package/dist/knowledge/reader.d.ts.map +1 -0
- package/dist/knowledge/reader.js +74 -0
- package/dist/knowledge/reader.js.map +1 -0
- package/dist/knowledge/seed.d.ts +38 -0
- package/dist/knowledge/seed.d.ts.map +1 -0
- package/dist/knowledge/seed.js +254 -0
- package/dist/knowledge/seed.js.map +1 -0
- package/dist/knowledge/staleness.d.ts +41 -0
- package/dist/knowledge/staleness.d.ts.map +1 -0
- package/dist/knowledge/staleness.js +102 -0
- package/dist/knowledge/staleness.js.map +1 -0
- package/dist/knowledge/sync.d.ts +31 -0
- package/dist/knowledge/sync.d.ts.map +1 -0
- package/dist/knowledge/sync.js +103 -0
- package/dist/knowledge/sync.js.map +1 -0
- package/dist/knowledge/types.d.ts +87 -0
- package/dist/knowledge/types.d.ts.map +1 -0
- package/dist/knowledge/types.js +82 -0
- package/dist/knowledge/types.js.map +1 -0
- package/dist/knowledge/writer.d.ts +67 -0
- package/dist/knowledge/writer.d.ts.map +1 -0
- package/dist/knowledge/writer.js +189 -0
- package/dist/knowledge/writer.js.map +1 -0
- package/dist/knowledge/yaml-source.d.ts +48 -0
- package/dist/knowledge/yaml-source.d.ts.map +1 -0
- package/dist/knowledge/yaml-source.js +195 -0
- package/dist/knowledge/yaml-source.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Knowledge engine facade — opens the YAML store and SQLite index together
|
|
3
|
+
* and wires up the standard recovery paths:
|
|
4
|
+
*
|
|
5
|
+
* - Missing/empty index with YAML present → auto-rebuild from sources.
|
|
6
|
+
* - Outdated index schema → delete and rebuild (the index is a disposable
|
|
7
|
+
* cache; YAML is the source of truth — design DD2).
|
|
8
|
+
*
|
|
9
|
+
* Requirements: KG 3.2, 3.3, 11.4
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
import { YamlSourceStore } from './yaml-source.js';
|
|
14
|
+
import { SqliteIndex } from './index/sqlite-index.js';
|
|
15
|
+
import { KnowledgeWriter } from './writer.js';
|
|
16
|
+
import { KnowledgeReader } from './reader.js';
|
|
17
|
+
import { ContextGenerator } from './context-generator.js';
|
|
18
|
+
import { StalenessDetector } from './staleness.js';
|
|
19
|
+
/** Relative path of the knowledge directory within a project. */
|
|
20
|
+
export declare const KNOWLEDGE_DIR: string;
|
|
21
|
+
export interface KnowledgeEngine {
|
|
22
|
+
source: YamlSourceStore;
|
|
23
|
+
index: SqliteIndex;
|
|
24
|
+
writer: KnowledgeWriter;
|
|
25
|
+
reader: KnowledgeReader;
|
|
26
|
+
context: ContextGenerator;
|
|
27
|
+
staleness: StalenessDetector;
|
|
28
|
+
/** Parse warnings emitted by an auto-rebuild, if one ran. */
|
|
29
|
+
warnings: string[];
|
|
30
|
+
close(): void;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Open the knowledge engine for a project.
|
|
34
|
+
*
|
|
35
|
+
* @param projectRoot - Absolute project root (knowledge lives in `.aidlc/knowledge/`).
|
|
36
|
+
*/
|
|
37
|
+
export declare function openKnowledge(projectRoot: string): KnowledgeEngine;
|
|
38
|
+
/** True when a project has any knowledge graph content. */
|
|
39
|
+
export declare function knowledgeExists(projectRoot: string): boolean;
|
|
40
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/knowledge/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAiB,MAAM,yBAAyB,CAAC;AAErE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,iEAAiE;AACjE,eAAO,MAAM,aAAa,QAA8B,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CAgDlE;AAED,2DAA2D;AAC3D,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE5D"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Knowledge engine facade — opens the YAML store and SQLite index together
|
|
3
|
+
* and wires up the standard recovery paths:
|
|
4
|
+
*
|
|
5
|
+
* - Missing/empty index with YAML present → auto-rebuild from sources.
|
|
6
|
+
* - Outdated index schema → delete and rebuild (the index is a disposable
|
|
7
|
+
* cache; YAML is the source of truth — design DD2).
|
|
8
|
+
*
|
|
9
|
+
* Requirements: KG 3.2, 3.3, 11.4
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
import { join } from 'node:path';
|
|
14
|
+
import { existsSync, rmSync } from 'node:fs';
|
|
15
|
+
import { YamlSourceStore } from './yaml-source.js';
|
|
16
|
+
import { SqliteIndex, INDEX_DB_FILE } from './index/sqlite-index.js';
|
|
17
|
+
import { IndexOutdatedError } from './index/knowledge-index.js';
|
|
18
|
+
import { KnowledgeWriter } from './writer.js';
|
|
19
|
+
import { KnowledgeReader } from './reader.js';
|
|
20
|
+
import { ContextGenerator } from './context-generator.js';
|
|
21
|
+
import { StalenessDetector } from './staleness.js';
|
|
22
|
+
/** Relative path of the knowledge directory within a project. */
|
|
23
|
+
export const KNOWLEDGE_DIR = join('.aidlc', 'knowledge');
|
|
24
|
+
/**
|
|
25
|
+
* Open the knowledge engine for a project.
|
|
26
|
+
*
|
|
27
|
+
* @param projectRoot - Absolute project root (knowledge lives in `.aidlc/knowledge/`).
|
|
28
|
+
*/
|
|
29
|
+
export function openKnowledge(projectRoot) {
|
|
30
|
+
const knowledgeDir = join(projectRoot, KNOWLEDGE_DIR);
|
|
31
|
+
const source = new YamlSourceStore(knowledgeDir);
|
|
32
|
+
const warnings = [];
|
|
33
|
+
const dbPath = join(knowledgeDir, INDEX_DB_FILE);
|
|
34
|
+
const dbExisted = existsSync(dbPath);
|
|
35
|
+
let index;
|
|
36
|
+
try {
|
|
37
|
+
index = new SqliteIndex(knowledgeDir);
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
if (err instanceof IndexOutdatedError) {
|
|
41
|
+
// Outdated cache: discard and rebuild from YAML (KG Req 11.4).
|
|
42
|
+
rmSync(dbPath, { force: true });
|
|
43
|
+
rmSync(dbPath + '-wal', { force: true });
|
|
44
|
+
rmSync(dbPath + '-shm', { force: true });
|
|
45
|
+
index = new SqliteIndex(knowledgeDir);
|
|
46
|
+
warnings.push('Outdated knowledge index was discarded and rebuilt from YAML sources.');
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
throw err;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Fresh index but sources exist → populate from YAML (KG Req 3.2).
|
|
53
|
+
if ((!dbExisted || index.getAllEntities().length === 0) && source.exists()) {
|
|
54
|
+
const loaded = source.loadAll();
|
|
55
|
+
if (loaded.entities.length > 0 || loaded.relationships.length > 0) {
|
|
56
|
+
index.rebuild(loaded.entities, loaded.relationships);
|
|
57
|
+
}
|
|
58
|
+
warnings.push(...loaded.warnings);
|
|
59
|
+
}
|
|
60
|
+
const writer = new KnowledgeWriter(source, index);
|
|
61
|
+
const reader = new KnowledgeReader(index);
|
|
62
|
+
const context = new ContextGenerator(index);
|
|
63
|
+
const staleness = new StalenessDetector(index, source, projectRoot);
|
|
64
|
+
return {
|
|
65
|
+
source,
|
|
66
|
+
index,
|
|
67
|
+
writer,
|
|
68
|
+
reader,
|
|
69
|
+
context,
|
|
70
|
+
staleness,
|
|
71
|
+
warnings,
|
|
72
|
+
close: () => index.close(),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/** True when a project has any knowledge graph content. */
|
|
76
|
+
export function knowledgeExists(projectRoot) {
|
|
77
|
+
return new YamlSourceStore(join(projectRoot, KNOWLEDGE_DIR)).exists();
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/knowledge/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ideation seeding gate criterion (design DD4, KG Req 8.5).
|
|
3
|
+
*
|
|
4
|
+
* Computed live against the knowledge index — never stored in phase state, so
|
|
5
|
+
* it cannot go stale. Applies only to the ideation phase and only once the
|
|
6
|
+
* project has adopted the knowledge graph (`.aidlc/knowledge/` exists);
|
|
7
|
+
* non-adopters see no new gate. No other phase gets a knowledge criterion
|
|
8
|
+
* (KG Req 9.3).
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
/** Minimum seeded facts required to leave ideation (KG Req 8.5). */
|
|
13
|
+
export declare const KNOWLEDGE_SEEDING_MINIMUMS: {
|
|
14
|
+
readonly modules: 3;
|
|
15
|
+
readonly dependsOnRelationships: 2;
|
|
16
|
+
readonly conventions: 1;
|
|
17
|
+
};
|
|
18
|
+
export interface KnowledgeCounts {
|
|
19
|
+
modules: number;
|
|
20
|
+
dependsOnRelationships: number;
|
|
21
|
+
conventions: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Pure check: shortfalls against the seeding minimums, phrased for
|
|
25
|
+
* `unsatisfiedCriteria` output (e.g. "knowledge graph has 1/3 modules").
|
|
26
|
+
*/
|
|
27
|
+
export declare function checkKnowledgeSeeding(counts: KnowledgeCounts): string[];
|
|
28
|
+
/**
|
|
29
|
+
* Evaluate the ideation knowledge criterion for a project.
|
|
30
|
+
*
|
|
31
|
+
* @returns Unsatisfied criteria (empty when the gate passes), or empty when
|
|
32
|
+
* the criterion does not apply (phase is not ideation, or the project has
|
|
33
|
+
* not adopted the knowledge graph).
|
|
34
|
+
*/
|
|
35
|
+
export declare function evaluateKnowledgeCriterion(projectRoot: string, phaseName: string): string[];
|
|
36
|
+
//# sourceMappingURL=gate-criterion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate-criterion.d.ts","sourceRoot":"","sources":["../../src/knowledge/gate-criterion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,oEAAoE;AACpE,eAAO,MAAM,0BAA0B;;;;CAI7B,CAAC;AAEX,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,EAAE,CAkBvE;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAc3F"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ideation seeding gate criterion (design DD4, KG Req 8.5).
|
|
3
|
+
*
|
|
4
|
+
* Computed live against the knowledge index — never stored in phase state, so
|
|
5
|
+
* it cannot go stale. Applies only to the ideation phase and only once the
|
|
6
|
+
* project has adopted the knowledge graph (`.aidlc/knowledge/` exists);
|
|
7
|
+
* non-adopters see no new gate. No other phase gets a knowledge criterion
|
|
8
|
+
* (KG Req 9.3).
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import { openKnowledge, knowledgeExists } from './engine.js';
|
|
13
|
+
/** Minimum seeded facts required to leave ideation (KG Req 8.5). */
|
|
14
|
+
export const KNOWLEDGE_SEEDING_MINIMUMS = {
|
|
15
|
+
modules: 3,
|
|
16
|
+
dependsOnRelationships: 2,
|
|
17
|
+
conventions: 1,
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Pure check: shortfalls against the seeding minimums, phrased for
|
|
21
|
+
* `unsatisfiedCriteria` output (e.g. "knowledge graph has 1/3 modules").
|
|
22
|
+
*/
|
|
23
|
+
export function checkKnowledgeSeeding(counts) {
|
|
24
|
+
const unsatisfied = [];
|
|
25
|
+
if (counts.modules < KNOWLEDGE_SEEDING_MINIMUMS.modules) {
|
|
26
|
+
unsatisfied.push(`knowledge graph has ${counts.modules}/${KNOWLEDGE_SEEDING_MINIMUMS.modules} module entities`);
|
|
27
|
+
}
|
|
28
|
+
if (counts.dependsOnRelationships < KNOWLEDGE_SEEDING_MINIMUMS.dependsOnRelationships) {
|
|
29
|
+
unsatisfied.push(`knowledge graph has ${counts.dependsOnRelationships}/${KNOWLEDGE_SEEDING_MINIMUMS.dependsOnRelationships} depends-on relationships`);
|
|
30
|
+
}
|
|
31
|
+
if (counts.conventions < KNOWLEDGE_SEEDING_MINIMUMS.conventions) {
|
|
32
|
+
unsatisfied.push(`knowledge graph has ${counts.conventions}/${KNOWLEDGE_SEEDING_MINIMUMS.conventions} convention entities`);
|
|
33
|
+
}
|
|
34
|
+
return unsatisfied;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Evaluate the ideation knowledge criterion for a project.
|
|
38
|
+
*
|
|
39
|
+
* @returns Unsatisfied criteria (empty when the gate passes), or empty when
|
|
40
|
+
* the criterion does not apply (phase is not ideation, or the project has
|
|
41
|
+
* not adopted the knowledge graph).
|
|
42
|
+
*/
|
|
43
|
+
export function evaluateKnowledgeCriterion(projectRoot, phaseName) {
|
|
44
|
+
if (phaseName !== 'ideation')
|
|
45
|
+
return [];
|
|
46
|
+
if (!knowledgeExists(projectRoot))
|
|
47
|
+
return [];
|
|
48
|
+
const engine = openKnowledge(projectRoot);
|
|
49
|
+
try {
|
|
50
|
+
return checkKnowledgeSeeding({
|
|
51
|
+
modules: engine.index.countEntitiesByType('module'),
|
|
52
|
+
dependsOnRelationships: engine.index.countRelationshipsByType('depends-on'),
|
|
53
|
+
conventions: engine.index.countEntitiesByType('convention'),
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
engine.close();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=gate-criterion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate-criterion.js","sourceRoot":"","sources":["../../src/knowledge/gate-criterion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE7D,oEAAoE;AACpE,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,OAAO,EAAE,CAAC;IACV,sBAAsB,EAAE,CAAC;IACzB,WAAW,EAAE,CAAC;CACN,CAAC;AAQX;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAuB;IAC3D,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,MAAM,CAAC,OAAO,GAAG,0BAA0B,CAAC,OAAO,EAAE,CAAC;QACxD,WAAW,CAAC,IAAI,CACd,uBAAuB,MAAM,CAAC,OAAO,IAAI,0BAA0B,CAAC,OAAO,kBAAkB,CAC9F,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,sBAAsB,GAAG,0BAA0B,CAAC,sBAAsB,EAAE,CAAC;QACtF,WAAW,CAAC,IAAI,CACd,uBAAuB,MAAM,CAAC,sBAAsB,IAAI,0BAA0B,CAAC,sBAAsB,2BAA2B,CACrI,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,WAAW,GAAG,0BAA0B,CAAC,WAAW,EAAE,CAAC;QAChE,WAAW,CAAC,IAAI,CACd,uBAAuB,MAAM,CAAC,WAAW,IAAI,0BAA0B,CAAC,WAAW,sBAAsB,CAC1G,CAAC;IACJ,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CAAC,WAAmB,EAAE,SAAiB;IAC/E,IAAI,SAAS,KAAK,UAAU;QAAE,OAAO,EAAE,CAAC;IACxC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,CAAC;IAE7C,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC1C,IAAI,CAAC;QACH,OAAO,qBAAqB,CAAC;YAC3B,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC;YACnD,sBAAsB,EAAE,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,YAAY,CAAC;YAC3E,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,YAAY,CAAC;SAC5D,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KnowledgeIndex — the narrow, engine-agnostic query interface (KG Req 3.7).
|
|
3
|
+
*
|
|
4
|
+
* The index is a derived cache of the YAML sources, never the source of
|
|
5
|
+
* truth. Nothing outside `src/knowledge/index/` may import a concrete
|
|
6
|
+
* engine; this seam keeps the storage engine swappable (design DD1).
|
|
7
|
+
*
|
|
8
|
+
* Requirements: KG 3.2, 3.4, 3.5, 3.8
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import type { Entity, Relationship } from '../types.js';
|
|
13
|
+
export interface SearchOptions {
|
|
14
|
+
type?: string;
|
|
15
|
+
minConfidence?: number;
|
|
16
|
+
limit?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface EntityFilter {
|
|
19
|
+
minConfidence?: number;
|
|
20
|
+
}
|
|
21
|
+
/** Thrown when the on-disk index schema is older than the CLI supports (KG Req 3.8, 11.4). */
|
|
22
|
+
export declare class IndexOutdatedError extends Error {
|
|
23
|
+
constructor(found: number, expected: number);
|
|
24
|
+
}
|
|
25
|
+
export interface KnowledgeIndex {
|
|
26
|
+
getEntity(id: string): Entity | undefined;
|
|
27
|
+
upsertEntity(entity: Entity): void;
|
|
28
|
+
deleteEntity(id: string): void;
|
|
29
|
+
/** Ranked full-text search across name, description, and tags (KG Req 3.4, 5.7). */
|
|
30
|
+
fullTextSearch(term: string, options?: SearchOptions): Entity[];
|
|
31
|
+
getAllEntities(filter?: EntityFilter): Entity[];
|
|
32
|
+
getEntitiesByTypes(types: string[], filter?: EntityFilter): Entity[];
|
|
33
|
+
/** Entities mapped to a source file path (staleness detection, KG Req 7.3). */
|
|
34
|
+
getEntitiesByFilePath(path: string): Entity[];
|
|
35
|
+
countEntitiesByType(type: string): number;
|
|
36
|
+
upsertRelationship(rel: Relationship): void;
|
|
37
|
+
relationshipsFrom(id: string): Relationship[];
|
|
38
|
+
relationshipsTo(id: string): Relationship[];
|
|
39
|
+
relationshipsFor(ids: string[]): Relationship[];
|
|
40
|
+
countRelationshipsByType(type: string): number;
|
|
41
|
+
/** Replace all index contents from parsed YAML sources (KG Req 3.3). */
|
|
42
|
+
rebuild(entities: Entity[], relationships: Relationship[]): void;
|
|
43
|
+
close(): void;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=knowledge-index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-index.d.ts","sourceRoot":"","sources":["../../../src/knowledge/index/knowledge-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,8FAA8F;AAC9F,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;CAO5C;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC1C,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAE/B,oFAAoF;IACpF,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,EAAE,CAAC;IAChE,cAAc,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,EAAE,CAAC;IAChD,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,EAAE,CAAC;IACrE,+EAA+E;IAC/E,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9C,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAE1C,kBAAkB,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5C,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9C,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;IAC5C,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC;IAChD,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAE/C,wEAAwE;IACxE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAEjE,KAAK,IAAI,IAAI,CAAC;CACf"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KnowledgeIndex — the narrow, engine-agnostic query interface (KG Req 3.7).
|
|
3
|
+
*
|
|
4
|
+
* The index is a derived cache of the YAML sources, never the source of
|
|
5
|
+
* truth. Nothing outside `src/knowledge/index/` may import a concrete
|
|
6
|
+
* engine; this seam keeps the storage engine swappable (design DD1).
|
|
7
|
+
*
|
|
8
|
+
* Requirements: KG 3.2, 3.4, 3.5, 3.8
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
/** Thrown when the on-disk index schema is older than the CLI supports (KG Req 3.8, 11.4). */
|
|
13
|
+
export class IndexOutdatedError extends Error {
|
|
14
|
+
constructor(found, expected) {
|
|
15
|
+
super(`Knowledge index schema version ${found} is outdated (expected ${expected}). ` +
|
|
16
|
+
`Run 'aidlc knowledge rebuild'.`);
|
|
17
|
+
this.name = 'IndexOutdatedError';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=knowledge-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-index.js","sourceRoot":"","sources":["../../../src/knowledge/index/knowledge-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAcH,8FAA8F;AAC9F,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,KAAa,EAAE,QAAgB;QACzC,KAAK,CACH,kCAAkC,KAAK,0BAA0B,QAAQ,KAAK;YAC5E,gCAAgC,CACnC,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite implementation of KnowledgeIndex using the Node standard library
|
|
3
|
+
* (`node:sqlite`, Node >= 22) — zero npm dependencies (design DD1).
|
|
4
|
+
*
|
|
5
|
+
* FTS5 powers full-text search; if the runtime's SQLite build lacks FTS5 the
|
|
6
|
+
* index falls back to LIKE matching with a one-time stderr warning. The
|
|
7
|
+
* database is a disposable cache at `.aidlc/knowledge/index.db`, gitignored
|
|
8
|
+
* and rebuildable from YAML at any time (KG Req 3.1–3.3).
|
|
9
|
+
*
|
|
10
|
+
* Requirements: KG 3.1–3.8, 10.1–10.3, 11.4
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
import type { Entity, Relationship } from '../types.js';
|
|
15
|
+
import type { KnowledgeIndex, SearchOptions, EntityFilter } from './knowledge-index.js';
|
|
16
|
+
/** Filename of the index database inside the knowledge directory. */
|
|
17
|
+
export declare const INDEX_DB_FILE = "index.db";
|
|
18
|
+
export declare class SqliteIndex implements KnowledgeIndex {
|
|
19
|
+
private readonly db;
|
|
20
|
+
private ftsAvailable;
|
|
21
|
+
private ftsWarned;
|
|
22
|
+
/**
|
|
23
|
+
* @param knowledgeDir - Directory holding YAML sources; index.db is created here.
|
|
24
|
+
* @param dbPathOverride - Test hook: use ':memory:' for an ephemeral index.
|
|
25
|
+
*/
|
|
26
|
+
constructor(knowledgeDir: string, dbPathOverride?: string);
|
|
27
|
+
private ensureSchema;
|
|
28
|
+
private readSchemaVersion;
|
|
29
|
+
private createSchema;
|
|
30
|
+
getEntity(id: string): Entity | undefined;
|
|
31
|
+
upsertEntity(entity: Entity): void;
|
|
32
|
+
deleteEntity(id: string): void;
|
|
33
|
+
fullTextSearch(term: string, options?: SearchOptions): Entity[];
|
|
34
|
+
private ftsSearch;
|
|
35
|
+
private likeSearch;
|
|
36
|
+
getAllEntities(filter?: EntityFilter): Entity[];
|
|
37
|
+
getEntitiesByTypes(types: string[], filter?: EntityFilter): Entity[];
|
|
38
|
+
getEntitiesByFilePath(path: string): Entity[];
|
|
39
|
+
countEntitiesByType(type: string): number;
|
|
40
|
+
upsertRelationship(rel: Relationship): void;
|
|
41
|
+
relationshipsFrom(id: string): Relationship[];
|
|
42
|
+
relationshipsTo(id: string): Relationship[];
|
|
43
|
+
relationshipsFor(ids: string[]): Relationship[];
|
|
44
|
+
countRelationshipsByType(type: string): number;
|
|
45
|
+
rebuild(entities: Entity[], relationships: Relationship[]): void;
|
|
46
|
+
close(): void;
|
|
47
|
+
private syncFts;
|
|
48
|
+
private syncFileMapping;
|
|
49
|
+
private warnNoFts;
|
|
50
|
+
}
|
|
51
|
+
/** Split camelCase and kebab/snake-case identifiers into searchable words. */
|
|
52
|
+
export declare function normalizeSearchText(text: string): string;
|
|
53
|
+
//# sourceMappingURL=sqlite-index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-index.d.ts","sourceRoot":"","sources":["../../../src/knowledge/index/sqlite-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAExF,qEAAqE;AACrE,eAAO,MAAM,aAAa,aAAa,CAAC;AAwBxC,qBAAa,WAAY,YAAW,cAAc;IAChD,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAe;IAClC,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,SAAS,CAAS;IAE1B;;;OAGG;gBACS,YAAY,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM;IAYzD,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,YAAY;IAgEpB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOzC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAwBlC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAQ9B,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,EAAE;IAenE,OAAO,CAAC,SAAS;IA2BjB,OAAO,CAAC,UAAU;IAkBlB,cAAc,CAAC,MAAM,GAAE,YAAiB,GAAG,MAAM,EAAE;IAYnD,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,GAAE,YAAiB,GAAG,MAAM,EAAE;IAcxE,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAW7C,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAWzC,kBAAkB,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAU3C,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,EAAE;IAO7C,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,EAAE;IAO3C,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE;IAY/C,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAW9C,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,IAAI;IAiBhE,KAAK,IAAI,IAAI;IAQb,OAAO,CAAC,OAAO;IAcf,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,SAAS;CAOlB;AAED,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKxD"}
|