@archkit/graph 0.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.
Files changed (71) hide show
  1. package/LICENSE +21 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/index.d.ts +12 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +28 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/models/architecture-graph.d.ts +14 -0
  8. package/dist/models/architecture-graph.d.ts.map +1 -0
  9. package/dist/models/architecture-graph.js +40 -0
  10. package/dist/models/architecture-graph.js.map +1 -0
  11. package/dist/models/deps-types.d.ts +8 -0
  12. package/dist/models/deps-types.d.ts.map +1 -0
  13. package/dist/models/deps-types.js +3 -0
  14. package/dist/models/deps-types.js.map +1 -0
  15. package/dist/models/knowledge-types.d.ts +26 -0
  16. package/dist/models/knowledge-types.d.ts.map +1 -0
  17. package/dist/models/knowledge-types.js +11 -0
  18. package/dist/models/knowledge-types.js.map +1 -0
  19. package/dist/models/persist-types.d.ts +7 -0
  20. package/dist/models/persist-types.d.ts.map +1 -0
  21. package/dist/models/persist-types.js +3 -0
  22. package/dist/models/persist-types.js.map +1 -0
  23. package/dist/models/query-types.d.ts +14 -0
  24. package/dist/models/query-types.d.ts.map +1 -0
  25. package/dist/models/query-types.js +3 -0
  26. package/dist/models/query-types.js.map +1 -0
  27. package/dist/services/deps-query.d.ts +4 -0
  28. package/dist/services/deps-query.d.ts.map +1 -0
  29. package/dist/services/deps-query.js +79 -0
  30. package/dist/services/deps-query.js.map +1 -0
  31. package/dist/services/graph-meta.d.ts +3 -0
  32. package/dist/services/graph-meta.d.ts.map +1 -0
  33. package/dist/services/graph-meta.js +29 -0
  34. package/dist/services/graph-meta.js.map +1 -0
  35. package/dist/services/graph-storage.d.ts +5 -0
  36. package/dist/services/graph-storage.d.ts.map +1 -0
  37. package/dist/services/graph-storage.js +40 -0
  38. package/dist/services/graph-storage.js.map +1 -0
  39. package/dist/services/indexes.d.ts +4 -0
  40. package/dist/services/indexes.d.ts.map +1 -0
  41. package/dist/services/indexes.js +31 -0
  42. package/dist/services/indexes.js.map +1 -0
  43. package/dist/services/knowledge-storage.d.ts +6 -0
  44. package/dist/services/knowledge-storage.d.ts.map +1 -0
  45. package/dist/services/knowledge-storage.js +130 -0
  46. package/dist/services/knowledge-storage.js.map +1 -0
  47. package/dist/services/persisted-read.d.ts +5 -0
  48. package/dist/services/persisted-read.d.ts.map +1 -0
  49. package/dist/services/persisted-read.js +33 -0
  50. package/dist/services/persisted-read.js.map +1 -0
  51. package/dist/services/snippet.d.ts +3 -0
  52. package/dist/services/snippet.d.ts.map +1 -0
  53. package/dist/services/snippet.js +17 -0
  54. package/dist/services/snippet.js.map +1 -0
  55. package/dist/services/symbol-query.d.ts +4 -0
  56. package/dist/services/symbol-query.d.ts.map +1 -0
  57. package/dist/services/symbol-query.js +57 -0
  58. package/dist/services/symbol-query.js.map +1 -0
  59. package/dist/utils/jsonl.d.ts +2 -0
  60. package/dist/utils/jsonl.d.ts.map +1 -0
  61. package/dist/utils/jsonl.js +10 -0
  62. package/dist/utils/jsonl.js.map +1 -0
  63. package/dist/utils/knowledge-utils.d.ts +11 -0
  64. package/dist/utils/knowledge-utils.d.ts.map +1 -0
  65. package/dist/utils/knowledge-utils.js +174 -0
  66. package/dist/utils/knowledge-utils.js.map +1 -0
  67. package/dist/utils/sort-utils.d.ts +4 -0
  68. package/dist/utils/sort-utils.d.ts.map +1 -0
  69. package/dist/utils/sort-utils.js +15 -0
  70. package/dist/utils/sort-utils.js.map +1 -0
  71. package/package.json +38 -0
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSymbolsIndex = createSymbolsIndex;
4
+ exports.createFilesIndex = createFilesIndex;
5
+ function createSymbolsIndex(nodes) {
6
+ const symbolMap = new Map();
7
+ nodes
8
+ .filter((node) => node.type !== 'file')
9
+ .forEach((node) => {
10
+ const existing = symbolMap.get(node.name);
11
+ if (existing) {
12
+ existing.push(node.id);
13
+ }
14
+ else {
15
+ symbolMap.set(node.name, [node.id]);
16
+ }
17
+ });
18
+ const sortedNames = [...symbolMap.keys()].sort((left, right) => left.localeCompare(right));
19
+ return sortedNames.reduce((accumulator, name) => {
20
+ const values = symbolMap.get(name) ?? [];
21
+ accumulator[name] = [...values].sort((left, right) => left.localeCompare(right));
22
+ return accumulator;
23
+ }, {});
24
+ }
25
+ function createFilesIndex(nodes) {
26
+ return nodes
27
+ .filter((node) => node.type === 'file')
28
+ .map((node) => node.filePath)
29
+ .sort((left, right) => left.localeCompare(right));
30
+ }
31
+ //# sourceMappingURL=indexes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexes.js","sourceRoot":"","sources":["../../src/services/indexes.ts"],"names":[],"mappings":";;AAEA,gDAuBC;AAED,4CAKC;AA9BD,SAAgB,kBAAkB,CAAC,KAAiB;IAClD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAA;IAE7C,KAAK;SACF,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;SACtC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAChB,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzC,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACxB,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;QACrC,CAAC;IACH,CAAC,CAAC,CAAA;IAEJ,MAAM,WAAW,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAC7D,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAC1B,CAAA;IAED,OAAO,WAAW,CAAC,MAAM,CAA2B,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE;QACxE,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;QACxC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;QAChF,OAAO,WAAW,CAAA;IACpB,CAAC,EAAE,EAAE,CAAC,CAAA;AACR,CAAC;AAED,SAAgB,gBAAgB,CAAC,KAAiB;IAChD,OAAO,KAAK;SACT,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;SACtC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;SAC5B,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;AACrD,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { AddKnowledgeInput, KnowledgeEntry, KnowledgeEntrySummary } from '../models/knowledge-types';
2
+ export declare function addKnowledgeEntry(rootDir: string, input: AddKnowledgeInput): Promise<KnowledgeEntry>;
3
+ export declare function listKnowledgeEntries(rootDir: string): Promise<KnowledgeEntrySummary[]>;
4
+ export declare function getKnowledgeEntry(rootDir: string, id: string): Promise<KnowledgeEntry | undefined>;
5
+ export declare function searchKnowledgeEntries(rootDir: string, query: string): Promise<KnowledgeEntrySummary[]>;
6
+ //# sourceMappingURL=knowledge-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-storage.d.ts","sourceRoot":"","sources":["../../src/services/knowledge-storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAkB,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AAoEzH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,cAAc,CAAC,CAkCzB;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAG5F;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAYrC;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAqClC"}
@@ -0,0 +1,130 @@
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.addKnowledgeEntry = addKnowledgeEntry;
7
+ exports.listKnowledgeEntries = listKnowledgeEntries;
8
+ exports.getKnowledgeEntry = getKnowledgeEntry;
9
+ exports.searchKnowledgeEntries = searchKnowledgeEntries;
10
+ const promises_1 = require("node:fs/promises");
11
+ const node_path_1 = __importDefault(require("node:path"));
12
+ const knowledge_utils_1 = require("../utils/knowledge-utils");
13
+ function sortSummaries(entries) {
14
+ return [...entries].sort((left, right) => {
15
+ const leftKey = `${left.feature}:${left.id}`;
16
+ const rightKey = `${right.feature}:${right.id}`;
17
+ return leftKey.localeCompare(rightKey);
18
+ });
19
+ }
20
+ function sortEntries(entries) {
21
+ return [...entries].sort((left, right) => {
22
+ const leftKey = `${left.feature}:${left.id}`;
23
+ const rightKey = `${right.feature}:${right.id}`;
24
+ return leftKey.localeCompare(rightKey);
25
+ });
26
+ }
27
+ function toKnowledgePaths(rootDir) {
28
+ const knowledgeDir = node_path_1.default.join(rootDir, '.arch', 'knowledge');
29
+ return {
30
+ knowledgeDir,
31
+ entriesDir: node_path_1.default.join(knowledgeDir, 'entries'),
32
+ indexPath: node_path_1.default.join(knowledgeDir, 'index.json'),
33
+ };
34
+ }
35
+ async function readIndexOrEmpty(rootDir) {
36
+ const { indexPath } = toKnowledgePaths(rootDir);
37
+ try {
38
+ const content = await (0, promises_1.readFile)(indexPath, 'utf-8');
39
+ const parsed = JSON.parse(content);
40
+ if (!Array.isArray(parsed.entries)) {
41
+ return { entries: [] };
42
+ }
43
+ return { entries: sortSummaries(parsed.entries) };
44
+ }
45
+ catch (error) {
46
+ if (!isMissingFileError(error)) {
47
+ throw error;
48
+ }
49
+ return { entries: [] };
50
+ }
51
+ }
52
+ async function writeIndex(rootDir, index) {
53
+ const { knowledgeDir, indexPath } = toKnowledgePaths(rootDir);
54
+ await (0, promises_1.mkdir)(knowledgeDir, { recursive: true });
55
+ const sorted = {
56
+ entries: sortSummaries(index.entries),
57
+ };
58
+ await (0, promises_1.writeFile)(indexPath, `${JSON.stringify(sorted, null, 2)}\n`, 'utf-8');
59
+ }
60
+ async function addKnowledgeEntry(rootDir, input) {
61
+ const normalized = (0, knowledge_utils_1.normalizeAddInput)(input);
62
+ const index = await readIndexOrEmpty(rootDir);
63
+ if (index.entries.some((entry) => entry.id === normalized.id)) {
64
+ throw new Error(`Knowledge entry already exists: ${normalized.id}`);
65
+ }
66
+ const relativeFile = (0, knowledge_utils_1.toEntryRelativeFile)(normalized.feature, normalized.createdAt, normalized.id);
67
+ const entry = {
68
+ ...normalized,
69
+ file: relativeFile,
70
+ };
71
+ const { knowledgeDir, entriesDir } = toKnowledgePaths(rootDir);
72
+ await (0, promises_1.mkdir)(knowledgeDir, { recursive: true });
73
+ await (0, promises_1.mkdir)(node_path_1.default.join(entriesDir, normalized.feature), { recursive: true });
74
+ await (0, promises_1.writeFile)(node_path_1.default.join(knowledgeDir, relativeFile), (0, knowledge_utils_1.serializeKnowledgeEntry)(entry), 'utf-8');
75
+ await writeIndex(rootDir, {
76
+ entries: [...index.entries, (0, knowledge_utils_1.toSummary)(entry)],
77
+ });
78
+ return entry;
79
+ }
80
+ async function listKnowledgeEntries(rootDir) {
81
+ const index = await readIndexOrEmpty(rootDir);
82
+ return sortSummaries(index.entries);
83
+ }
84
+ async function getKnowledgeEntry(rootDir, id) {
85
+ const normalizedId = id.trim().toLocaleLowerCase();
86
+ const index = await readIndexOrEmpty(rootDir);
87
+ const found = index.entries.find((entry) => entry.id === normalizedId);
88
+ if (!found) {
89
+ return undefined;
90
+ }
91
+ const { knowledgeDir } = toKnowledgePaths(rootDir);
92
+ const content = await (0, promises_1.readFile)(node_path_1.default.join(knowledgeDir, found.file), 'utf-8');
93
+ return (0, knowledge_utils_1.parseKnowledgeEntry)(content, found.file);
94
+ }
95
+ async function searchKnowledgeEntries(rootDir, query) {
96
+ const normalizedQuery = query.trim().toLocaleLowerCase();
97
+ if (normalizedQuery.length === 0) {
98
+ return [];
99
+ }
100
+ const index = await readIndexOrEmpty(rootDir);
101
+ const { knowledgeDir } = toKnowledgePaths(rootDir);
102
+ const loadedEntries = await Promise.all(index.entries.map(async (summary) => {
103
+ const content = await (0, promises_1.readFile)(node_path_1.default.join(knowledgeDir, summary.file), 'utf-8');
104
+ return (0, knowledge_utils_1.parseKnowledgeEntry)(content, summary.file);
105
+ }));
106
+ const matches = loadedEntries.filter((entry) => {
107
+ if (entry.id.toLocaleLowerCase().includes(normalizedQuery)) {
108
+ return true;
109
+ }
110
+ if (entry.title.toLocaleLowerCase().includes(normalizedQuery)) {
111
+ return true;
112
+ }
113
+ if (entry.feature.toLocaleLowerCase().includes(normalizedQuery)) {
114
+ return true;
115
+ }
116
+ if (entry.body.toLocaleLowerCase().includes(normalizedQuery)) {
117
+ return true;
118
+ }
119
+ return entry.tags.some((tag) => tag.toLocaleLowerCase().includes(normalizedQuery));
120
+ });
121
+ return sortEntries(matches).map(knowledge_utils_1.toSummary);
122
+ }
123
+ function isMissingFileError(error) {
124
+ if (typeof error !== 'object' || error === null) {
125
+ return false;
126
+ }
127
+ const withCode = error;
128
+ return withCode.code === 'ENOENT';
129
+ }
130
+ //# sourceMappingURL=knowledge-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-storage.js","sourceRoot":"","sources":["../../src/services/knowledge-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ArchEdge, ArchNode } from '@archkit/core';
2
+ export declare function readPersistedNodes(rootDir: string): Promise<ArchNode[]>;
3
+ export declare function readPersistedEdges(rootDir: string): Promise<ArchEdge[]>;
4
+ export declare function readPersistedSymbolsIndex(rootDir: string): Promise<Record<string, string[]>>;
5
+ //# sourceMappingURL=persisted-read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persisted-read.d.ts","sourceRoot":"","sources":["../../src/services/persisted-read.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAUvD,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAI7E;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAI7E;AAED,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAInC"}
@@ -0,0 +1,33 @@
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.readPersistedNodes = readPersistedNodes;
7
+ exports.readPersistedEdges = readPersistedEdges;
8
+ exports.readPersistedSymbolsIndex = readPersistedSymbolsIndex;
9
+ const promises_1 = require("node:fs/promises");
10
+ const node_path_1 = __importDefault(require("node:path"));
11
+ function parseJsonl(content) {
12
+ return content
13
+ .split('\n')
14
+ .map((line) => line.trim())
15
+ .filter((line) => line.length > 0)
16
+ .map((line) => JSON.parse(line));
17
+ }
18
+ async function readPersistedNodes(rootDir) {
19
+ const nodesPath = node_path_1.default.join(rootDir, '.arch', 'graph', 'nodes.jsonl');
20
+ const content = await (0, promises_1.readFile)(nodesPath, 'utf-8');
21
+ return parseJsonl(content);
22
+ }
23
+ async function readPersistedEdges(rootDir) {
24
+ const edgesPath = node_path_1.default.join(rootDir, '.arch', 'graph', 'edges.jsonl');
25
+ const content = await (0, promises_1.readFile)(edgesPath, 'utf-8');
26
+ return parseJsonl(content);
27
+ }
28
+ async function readPersistedSymbolsIndex(rootDir) {
29
+ const symbolsPath = node_path_1.default.join(rootDir, '.arch', 'index', 'symbols.json');
30
+ const content = await (0, promises_1.readFile)(symbolsPath, 'utf-8');
31
+ return JSON.parse(content);
32
+ }
33
+ //# sourceMappingURL=persisted-read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persisted-read.js","sourceRoot":"","sources":["../../src/services/persisted-read.ts"],"names":[],"mappings":";;;;;AAYA,gDAIC;AAED,gDAIC;AAED,8DAMC;AA9BD,+CAA2C;AAC3C,0DAA4B;AAG5B,SAAS,UAAU,CAAI,OAAe;IACpC,OAAO,OAAO;SACX,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;SACjC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC,CAAA;AACzC,CAAC;AAEM,KAAK,UAAU,kBAAkB,CAAC,OAAe;IACtD,MAAM,SAAS,GAAG,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,CAAA;IACrE,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IAClD,OAAO,UAAU,CAAW,OAAO,CAAC,CAAA;AACtC,CAAC;AAEM,KAAK,UAAU,kBAAkB,CAAC,OAAe;IACtD,MAAM,SAAS,GAAG,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,CAAA;IACrE,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IAClD,OAAO,UAAU,CAAW,OAAO,CAAC,CAAA;AACtC,CAAC;AAEM,KAAK,UAAU,yBAAyB,CAC7C,OAAe;IAEf,MAAM,WAAW,GAAG,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,CAAA;IACxE,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IACpD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAA6B,CAAA;AACxD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ArchNode } from '@archkit/core';
2
+ export declare function extractSnippetForNode(rootDir: string, node: ArchNode): Promise<string>;
3
+ //# sourceMappingURL=snippet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snippet.d.ts","sourceRoot":"","sources":["../../src/services/snippet.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,QAAQ,GACb,OAAO,CAAC,MAAM,CAAC,CAQjB"}
@@ -0,0 +1,17 @@
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.extractSnippetForNode = extractSnippetForNode;
7
+ const promises_1 = require("node:fs/promises");
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ async function extractSnippetForNode(rootDir, node) {
10
+ const absolutePath = node_path_1.default.join(rootDir, node.filePath);
11
+ const source = await (0, promises_1.readFile)(absolutePath, 'utf-8');
12
+ const lines = source.split(/\r?\n/);
13
+ const startIndex = Math.max(0, node.loc.startLine - 1);
14
+ const endIndex = Math.min(lines.length, node.loc.endLine);
15
+ return lines.slice(startIndex, endIndex).join('\n');
16
+ }
17
+ //# sourceMappingURL=snippet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snippet.js","sourceRoot":"","sources":["../../src/services/snippet.ts"],"names":[],"mappings":";;;;;AAIA,sDAWC;AAfD,+CAA2C;AAC3C,0DAA4B;AAGrB,KAAK,UAAU,qBAAqB,CACzC,OAAe,EACf,IAAc;IAEd,MAAM,YAAY,GAAG,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;IACtD,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAQ,EAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IACpD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACnC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAEzD,OAAO,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACrD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ResolvedSymbol, SymbolQueryResult } from '../models/query-types';
2
+ export declare function querySymbols(rootDir: string, term: string): Promise<SymbolQueryResult>;
3
+ export declare function resolveSymbolInput(rootDir: string, input: string): Promise<ResolvedSymbol>;
4
+ //# sourceMappingURL=symbol-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol-query.d.ts","sourceRoot":"","sources":["../../src/services/symbol-query.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAG9E,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAkB5F;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,CAAC,CA8BzB"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.querySymbols = querySymbols;
4
+ exports.resolveSymbolInput = resolveSymbolInput;
5
+ const persisted_read_1 = require("./persisted-read");
6
+ async function querySymbols(rootDir, term) {
7
+ const normalizedTerm = term.trim().toLocaleLowerCase();
8
+ const symbolsIndex = await (0, persisted_read_1.readPersistedSymbolsIndex)(rootDir);
9
+ const matches = Object.keys(symbolsIndex)
10
+ .filter((name) => name.toLocaleLowerCase().includes(normalizedTerm))
11
+ .sort((left, right) => left.localeCompare(right))
12
+ .map((name) => ({
13
+ name,
14
+ nodeIds: [...(symbolsIndex[name] ?? [])].sort((left, right) => left.localeCompare(right)),
15
+ }));
16
+ return {
17
+ term,
18
+ matches,
19
+ };
20
+ }
21
+ async function resolveSymbolInput(rootDir, input) {
22
+ const normalizedInput = input.trim();
23
+ const symbolsIndex = await (0, persisted_read_1.readPersistedSymbolsIndex)(rootDir);
24
+ const nodes = await (0, persisted_read_1.readPersistedNodes)(rootDir);
25
+ const nodeMap = createNodeMap(nodes);
26
+ const nodeById = nodeMap.get(normalizedInput);
27
+ if (nodeById) {
28
+ return {
29
+ input,
30
+ nodes: [nodeById],
31
+ };
32
+ }
33
+ const directIds = symbolsIndex[normalizedInput] ?? [];
34
+ if (directIds.length > 0) {
35
+ return {
36
+ input,
37
+ nodes: mapIdsToNodes(directIds, nodeMap),
38
+ };
39
+ }
40
+ const caseInsensitiveIds = Object.entries(symbolsIndex)
41
+ .filter(([name]) => name.toLocaleLowerCase() === normalizedInput.toLocaleLowerCase())
42
+ .flatMap(([, nodeIds]) => nodeIds);
43
+ return {
44
+ input,
45
+ nodes: mapIdsToNodes(caseInsensitiveIds, nodeMap),
46
+ };
47
+ }
48
+ function createNodeMap(nodes) {
49
+ return new Map(nodes.map((node) => [node.id, node]));
50
+ }
51
+ function mapIdsToNodes(nodeIds, nodeMap) {
52
+ return [...new Set(nodeIds)]
53
+ .map((id) => nodeMap.get(id))
54
+ .filter((node) => node !== undefined)
55
+ .sort((left, right) => left.id.localeCompare(right.id));
56
+ }
57
+ //# sourceMappingURL=symbol-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol-query.js","sourceRoot":"","sources":["../../src/services/symbol-query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function toJsonl<T>(items: T[]): string;
2
+ //# sourceMappingURL=jsonl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonl.d.ts","sourceRoot":"","sources":["../../src/utils/jsonl.ts"],"names":[],"mappings":"AAAA,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,MAAM,CAM7C"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toJsonl = toJsonl;
4
+ function toJsonl(items) {
5
+ if (items.length === 0) {
6
+ return '';
7
+ }
8
+ return `${items.map((item) => JSON.stringify(item)).join('\n')}\n`;
9
+ }
10
+ //# sourceMappingURL=jsonl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonl.js","sourceRoot":"","sources":["../../src/utils/jsonl.ts"],"names":[],"mappings":";;AAAA,0BAMC;AAND,SAAgB,OAAO,CAAI,KAAU;IACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;AACpE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { AddKnowledgeInput, KnowledgeEntry, KnowledgeEntrySummary } from '../models/knowledge-types';
2
+ export declare function normalizeFeature(input: string | undefined): string;
3
+ export declare function normalizeTags(tags: string[] | undefined): string[];
4
+ export declare function toKnowledgeId(title: string): string;
5
+ export declare function toCreatedAtDate(value: string | undefined): string;
6
+ export declare function toEntryRelativeFile(feature: string, createdAt: string, id: string): string;
7
+ export declare function serializeKnowledgeEntry(entry: KnowledgeEntry): string;
8
+ export declare function parseKnowledgeEntry(content: string, file: string): KnowledgeEntry;
9
+ export declare function toSummary(entry: KnowledgeEntry): KnowledgeEntrySummary;
10
+ export declare function normalizeAddInput(input: AddKnowledgeInput): Omit<KnowledgeEntry, 'file'>;
11
+ //# sourceMappingURL=knowledge-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-utils.d.ts","sourceRoot":"","sources":["../../src/utils/knowledge-utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,qBAAqB,EAAiB,MAAM,2BAA2B,CAAA;AAIxH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAIlE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,EAAE,CAUlE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAMjE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAE1F;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAkBrE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAsFjF;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,qBAAqB,CAUtE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAUxF"}
@@ -0,0 +1,174 @@
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.normalizeFeature = normalizeFeature;
7
+ exports.normalizeTags = normalizeTags;
8
+ exports.toKnowledgeId = toKnowledgeId;
9
+ exports.toCreatedAtDate = toCreatedAtDate;
10
+ exports.toEntryRelativeFile = toEntryRelativeFile;
11
+ exports.serializeKnowledgeEntry = serializeKnowledgeEntry;
12
+ exports.parseKnowledgeEntry = parseKnowledgeEntry;
13
+ exports.toSummary = toSummary;
14
+ exports.normalizeAddInput = normalizeAddInput;
15
+ const node_path_1 = __importDefault(require("node:path"));
16
+ const FRONTMATTER_SEPARATOR = '---';
17
+ function normalizeFeature(input) {
18
+ const normalized = (input ?? 'general').trim().toLocaleLowerCase();
19
+ const slugged = slugify(normalized);
20
+ return slugged.length > 0 ? slugged : 'general';
21
+ }
22
+ function normalizeTags(tags) {
23
+ if (!tags || tags.length === 0) {
24
+ return [];
25
+ }
26
+ const cleaned = tags
27
+ .map((tag) => slugify(tag))
28
+ .filter((tag) => tag.length > 0);
29
+ return [...new Set(cleaned)].sort((left, right) => left.localeCompare(right));
30
+ }
31
+ function toKnowledgeId(title) {
32
+ const id = slugify(title);
33
+ return id.length > 0 ? id : 'entry';
34
+ }
35
+ function toCreatedAtDate(value) {
36
+ if (value && /^\d{4}-\d{2}-\d{2}$/.test(value)) {
37
+ return value;
38
+ }
39
+ return new Date().toISOString().slice(0, 10);
40
+ }
41
+ function toEntryRelativeFile(feature, createdAt, id) {
42
+ return node_path_1.default.posix.join('entries', feature, `${createdAt}_${id}.md`);
43
+ }
44
+ function serializeKnowledgeEntry(entry) {
45
+ const lines = [
46
+ FRONTMATTER_SEPARATOR,
47
+ `id: ${entry.id}`,
48
+ `title: ${entry.title}`,
49
+ `type: ${entry.type}`,
50
+ `feature: ${entry.feature}`,
51
+ ];
52
+ if (entry.tags.length > 0) {
53
+ lines.push('tags:');
54
+ entry.tags.forEach((tag) => {
55
+ lines.push(` - ${tag}`);
56
+ });
57
+ }
58
+ lines.push(`createdAt: ${entry.createdAt}`, FRONTMATTER_SEPARATOR, '', entry.body);
59
+ return `${lines.join('\n')}\n`;
60
+ }
61
+ function parseKnowledgeEntry(content, file) {
62
+ const lines = content.split(/\r?\n/);
63
+ if (lines.length < 3 || lines[0].trim() !== FRONTMATTER_SEPARATOR) {
64
+ throw new Error(`Invalid knowledge entry frontmatter in ${file}`);
65
+ }
66
+ let separatorIndex = -1;
67
+ for (let index = 1; index < lines.length; index += 1) {
68
+ if (lines[index].trim() === FRONTMATTER_SEPARATOR) {
69
+ separatorIndex = index;
70
+ break;
71
+ }
72
+ }
73
+ if (separatorIndex < 0) {
74
+ throw new Error(`Invalid knowledge entry frontmatter in ${file}`);
75
+ }
76
+ let id = '';
77
+ let title = '';
78
+ let type;
79
+ let feature = 'general';
80
+ const tags = [];
81
+ let createdAt = '';
82
+ for (let index = 1; index < separatorIndex; index += 1) {
83
+ const line = lines[index];
84
+ const trimmedLine = line.trim();
85
+ if (trimmedLine.length === 0) {
86
+ continue;
87
+ }
88
+ if (trimmedLine === 'tags:') {
89
+ for (let tagIndex = index + 1; tagIndex < separatorIndex; tagIndex += 1) {
90
+ const tagLine = lines[tagIndex].trim();
91
+ if (!tagLine.startsWith('- ')) {
92
+ break;
93
+ }
94
+ const tag = slugify(tagLine.slice(2));
95
+ if (tag.length > 0) {
96
+ tags.push(tag);
97
+ }
98
+ index = tagIndex;
99
+ }
100
+ continue;
101
+ }
102
+ const splitIndex = line.indexOf(':');
103
+ if (splitIndex < 0) {
104
+ continue;
105
+ }
106
+ const key = line.slice(0, splitIndex).trim();
107
+ const value = line.slice(splitIndex + 1).trim();
108
+ if (key === 'id') {
109
+ id = value;
110
+ }
111
+ else if (key === 'title') {
112
+ title = value;
113
+ }
114
+ else if (key === 'type' && isKnowledgeType(value)) {
115
+ type = value;
116
+ }
117
+ else if (key === 'feature') {
118
+ feature = normalizeFeature(value);
119
+ }
120
+ else if (key === 'createdAt') {
121
+ createdAt = value;
122
+ }
123
+ }
124
+ if (id.length === 0 || title.length === 0 || !type || createdAt.length === 0) {
125
+ throw new Error(`Missing required metadata in knowledge entry ${file}`);
126
+ }
127
+ const body = lines.slice(separatorIndex + 1).join('\n').trim();
128
+ return {
129
+ id,
130
+ title,
131
+ type,
132
+ feature,
133
+ tags: normalizeTags(tags),
134
+ createdAt,
135
+ file,
136
+ body,
137
+ };
138
+ }
139
+ function toSummary(entry) {
140
+ return {
141
+ id: entry.id,
142
+ title: entry.title,
143
+ type: entry.type,
144
+ feature: entry.feature,
145
+ tags: [...entry.tags],
146
+ createdAt: entry.createdAt,
147
+ file: entry.file,
148
+ };
149
+ }
150
+ function normalizeAddInput(input) {
151
+ return {
152
+ id: toKnowledgeId(input.title),
153
+ title: input.title.trim(),
154
+ type: input.type,
155
+ feature: normalizeFeature(input.feature),
156
+ tags: normalizeTags(input.tags),
157
+ createdAt: toCreatedAtDate(input.createdAt),
158
+ body: input.body.trim(),
159
+ };
160
+ }
161
+ function slugify(value) {
162
+ return value
163
+ .toLocaleLowerCase()
164
+ .replace(/[^a-z0-9]+/g, '-')
165
+ .replace(/(^-|-$)/g, '');
166
+ }
167
+ function isKnowledgeType(value) {
168
+ return (value === 'decision'
169
+ || value === 'workaround'
170
+ || value === 'caveat'
171
+ || value === 'note'
172
+ || value === 'migration');
173
+ }
174
+ //# sourceMappingURL=knowledge-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-utils.js","sourceRoot":"","sources":["../../src/utils/knowledge-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ArchEdge, ArchNode } from '@archkit/core';
2
+ export declare function sortNodes(nodes: ArchNode[]): ArchNode[];
3
+ export declare function sortEdges(edges: ArchEdge[]): ArchEdge[];
4
+ //# sourceMappingURL=sort-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort-utils.d.ts","sourceRoot":"","sources":["../../src/utils/sort-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAEvD,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAEvD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAMvD"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sortNodes = sortNodes;
4
+ exports.sortEdges = sortEdges;
5
+ function sortNodes(nodes) {
6
+ return [...nodes].sort((left, right) => left.id.localeCompare(right.id));
7
+ }
8
+ function sortEdges(edges) {
9
+ return [...edges].sort((left, right) => {
10
+ const leftKey = `${left.type}:${left.from}:${left.to}:${left.filePath ?? ''}:${left.loc?.startLine ?? 0}`;
11
+ const rightKey = `${right.type}:${right.from}:${right.to}:${right.filePath ?? ''}:${right.loc?.startLine ?? 0}`;
12
+ return leftKey.localeCompare(rightKey);
13
+ });
14
+ }
15
+ //# sourceMappingURL=sort-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort-utils.js","sourceRoot":"","sources":["../../src/utils/sort-utils.ts"],"names":[],"mappings":";;AAEA,8BAEC;AAED,8BAMC;AAVD,SAAgB,SAAS,CAAC,KAAiB;IACzC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;AAC1E,CAAC;AAED,SAAgB,SAAS,CAAC,KAAiB;IACzC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,SAAS,IAAI,CAAC,EAAE,CAAA;QACzG,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,EAAE,SAAS,IAAI,CAAC,EAAE,CAAA;QAC/G,OAAO,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;AACJ,CAAC"}