maestro-flow 0.4.24 → 0.4.26
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/.agents/skills/maestro-impeccable/SKILL.md +5 -1
- package/.agents/skills/maestro-next/SKILL.md +7 -1
- package/.agents/skills/maestro-player/SKILL.md +9 -2
- package/.agents/skills/maestro-tools-execute/SKILL.md +4 -4
- package/.agents/skills/spec-load/SKILL.md +11 -4
- package/.agy/skills/maestro-impeccable/SKILL.md +5 -1
- package/.agy/skills/maestro-next/SKILL.md +7 -1
- package/.agy/skills/maestro-player/SKILL.md +9 -2
- package/.agy/skills/maestro-tools-execute/SKILL.md +4 -4
- package/.agy/skills/spec-load/SKILL.md +11 -4
- package/.claude/commands/maestro-impeccable.md +5 -1
- package/.claude/commands/maestro-next.md +7 -1
- package/.claude/commands/maestro-player.md +9 -2
- package/.claude/commands/maestro-tools-execute.md +4 -4
- package/.claude/commands/spec-load.md +11 -4
- package/.codex/skills/learn-second-opinion/SKILL.md +1 -1
- package/.codex/skills/maestro-milestone-audit/SKILL.md +11 -9
- package/.codex/skills/maestro-ui-codify/SKILL.md +3 -3
- package/.codex/skills/quality-debug/SKILL.md +31 -25
- package/.codex/skills/security-audit/SKILL.md +17 -1
- package/.codex/skills/team-review/SKILL.md +2 -2
- package/dashboard/dist-server/dashboard/src/server/agents/codex-cli-adapter.js +9 -1
- package/dashboard/dist-server/dashboard/src/server/agents/codex-cli-adapter.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/agents/codex-cli-adapter.test.d.ts +1 -0
- package/dashboard/dist-server/dashboard/src/server/agents/codex-cli-adapter.test.js +346 -0
- package/dashboard/dist-server/dashboard/src/server/agents/codex-cli-adapter.test.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/server/routes/specs.js +96 -25
- package/dashboard/dist-server/dashboard/src/server/routes/specs.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/shared/constants.d.ts +1 -0
- package/dashboard/dist-server/dashboard/src/shared/constants.js +1 -0
- package/dashboard/dist-server/dashboard/src/shared/constants.js.map +1 -1
- package/dashboard/dist-server/src/graph/types.d.ts +98 -0
- package/dashboard/dist-server/src/graph/types.js +19 -1
- package/dashboard/dist-server/src/graph/types.js.map +1 -1
- package/dist/src/agents/cli-agent-runner.d.ts +2 -0
- package/dist/src/agents/cli-agent-runner.d.ts.map +1 -1
- package/dist/src/agents/cli-agent-runner.js +3 -0
- package/dist/src/agents/cli-agent-runner.js.map +1 -1
- package/dist/src/commands/delegate.d.ts +2 -0
- package/dist/src/commands/delegate.d.ts.map +1 -1
- package/dist/src/commands/delegate.js +3 -1
- package/dist/src/commands/delegate.js.map +1 -1
- package/dist/src/commands/kg.d.ts.map +1 -1
- package/dist/src/commands/kg.js +345 -2
- package/dist/src/commands/kg.js.map +1 -1
- package/dist/src/commands/spec.d.ts.map +1 -1
- package/dist/src/commands/spec.js +177 -38
- package/dist/src/commands/spec.js.map +1 -1
- package/dist/src/commands/wiki.d.ts.map +1 -1
- package/dist/src/commands/wiki.js +51 -9
- package/dist/src/commands/wiki.js.map +1 -1
- package/dist/src/config/cli-tools-config.d.ts +18 -0
- package/dist/src/config/cli-tools-config.d.ts.map +1 -1
- package/dist/src/config/cli-tools-config.js +31 -0
- package/dist/src/config/cli-tools-config.js.map +1 -1
- package/dist/src/graph/db/connection.d.ts +22 -0
- package/dist/src/graph/db/connection.d.ts.map +1 -0
- package/dist/src/graph/db/connection.js +113 -0
- package/dist/src/graph/db/connection.js.map +1 -0
- package/dist/src/graph/db/index.d.ts +4 -0
- package/dist/src/graph/db/index.d.ts.map +1 -0
- package/dist/src/graph/db/index.js +4 -0
- package/dist/src/graph/db/index.js.map +1 -0
- package/dist/src/graph/db/migrations.d.ts +5 -0
- package/dist/src/graph/db/migrations.d.ts.map +1 -0
- package/dist/src/graph/db/migrations.js +18 -0
- package/dist/src/graph/db/migrations.js.map +1 -0
- package/dist/src/graph/db/queries.d.ts +50 -0
- package/dist/src/graph/db/queries.d.ts.map +1 -0
- package/dist/src/graph/db/queries.js +313 -0
- package/dist/src/graph/db/queries.js.map +1 -0
- package/dist/src/graph/db/schema.sql +131 -0
- package/dist/src/graph/facade.d.ts +53 -0
- package/dist/src/graph/facade.d.ts.map +1 -0
- package/dist/src/graph/facade.js +172 -0
- package/dist/src/graph/facade.js.map +1 -0
- package/dist/src/graph/graph-queries.d.ts +24 -0
- package/dist/src/graph/graph-queries.d.ts.map +1 -0
- package/dist/src/graph/graph-queries.js +173 -0
- package/dist/src/graph/graph-queries.js.map +1 -0
- package/dist/src/graph/index.d.ts +8 -0
- package/dist/src/graph/index.d.ts.map +1 -1
- package/dist/src/graph/index.js +9 -0
- package/dist/src/graph/index.js.map +1 -1
- package/dist/src/graph/loader.d.ts +8 -0
- package/dist/src/graph/loader.d.ts.map +1 -1
- package/dist/src/graph/loader.js +20 -0
- package/dist/src/graph/loader.js.map +1 -1
- package/dist/src/graph/migration.d.ts +8 -0
- package/dist/src/graph/migration.d.ts.map +1 -0
- package/dist/src/graph/migration.js +134 -0
- package/dist/src/graph/migration.js.map +1 -0
- package/dist/src/graph/search/index.d.ts +4 -0
- package/dist/src/graph/search/index.d.ts.map +1 -0
- package/dist/src/graph/search/index.js +3 -0
- package/dist/src/graph/search/index.js.map +1 -0
- package/dist/src/graph/search/query-parser.d.ts +11 -0
- package/dist/src/graph/search/query-parser.d.ts.map +1 -0
- package/dist/src/graph/search/query-parser.js +111 -0
- package/dist/src/graph/search/query-parser.js.map +1 -0
- package/dist/src/graph/search/query-utils.d.ts +12 -0
- package/dist/src/graph/search/query-utils.d.ts.map +1 -0
- package/dist/src/graph/search/query-utils.js +184 -0
- package/dist/src/graph/search/query-utils.js.map +1 -0
- package/dist/src/graph/sync/content-hash.d.ts +7 -0
- package/dist/src/graph/sync/content-hash.d.ts.map +1 -0
- package/dist/src/graph/sync/content-hash.js +33 -0
- package/dist/src/graph/sync/content-hash.js.map +1 -0
- package/dist/src/graph/sync/incremental-sync.d.ts +23 -0
- package/dist/src/graph/sync/incremental-sync.d.ts.map +1 -0
- package/dist/src/graph/sync/incremental-sync.js +338 -0
- package/dist/src/graph/sync/incremental-sync.js.map +1 -0
- package/dist/src/graph/sync/index.d.ts +7 -0
- package/dist/src/graph/sync/index.d.ts.map +1 -0
- package/dist/src/graph/sync/index.js +5 -0
- package/dist/src/graph/sync/index.js.map +1 -0
- package/dist/src/graph/sync/watch-policy.d.ts +2 -0
- package/dist/src/graph/sync/watch-policy.d.ts.map +1 -0
- package/dist/src/graph/sync/watch-policy.js +38 -0
- package/dist/src/graph/sync/watch-policy.js.map +1 -0
- package/dist/src/graph/sync/watcher.d.ts +44 -0
- package/dist/src/graph/sync/watcher.d.ts.map +1 -0
- package/dist/src/graph/sync/watcher.js +153 -0
- package/dist/src/graph/sync/watcher.js.map +1 -0
- package/dist/src/graph/traversal.d.ts +37 -0
- package/dist/src/graph/traversal.d.ts.map +1 -0
- package/dist/src/graph/traversal.js +335 -0
- package/dist/src/graph/traversal.js.map +1 -0
- package/dist/src/graph/types.d.ts +98 -0
- package/dist/src/graph/types.d.ts.map +1 -1
- package/dist/src/graph/types.js +19 -1
- package/dist/src/graph/types.js.map +1 -1
- package/dist/src/utils/update-notices.js +21 -0
- package/dist/src/utils/update-notices.js.map +1 -1
- package/package.json +4 -2
- package/workflows/analyze.md +19 -13
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { DatabaseConnection } from './connection.js';
|
|
2
|
+
import type { EnhancedNode, EnhancedEdge, FileRecord, UnresolvedReference, NodeKind, EdgeKind, Language, GraphStats } from '../types.js';
|
|
3
|
+
export declare class QueryBuilder {
|
|
4
|
+
private conn;
|
|
5
|
+
private stmtCache;
|
|
6
|
+
constructor(conn: DatabaseConnection);
|
|
7
|
+
private stmt;
|
|
8
|
+
getNodeById(id: string): EnhancedNode | null;
|
|
9
|
+
getNodesByIds(ids: string[]): Map<string, EnhancedNode>;
|
|
10
|
+
getNodesByFile(filePath: string): EnhancedNode[];
|
|
11
|
+
getNodesByKind(kind: NodeKind): EnhancedNode[];
|
|
12
|
+
insertNode(node: EnhancedNode): void;
|
|
13
|
+
insertNodes(nodes: EnhancedNode[]): void;
|
|
14
|
+
deleteNode(id: string): void;
|
|
15
|
+
deleteNodesByFile(filePath: string): void;
|
|
16
|
+
getOutgoingEdges(nodeId: string, kinds?: EdgeKind[]): EnhancedEdge[];
|
|
17
|
+
getIncomingEdges(nodeId: string, kinds?: EdgeKind[]): EnhancedEdge[];
|
|
18
|
+
insertEdge(edge: EnhancedEdge): void;
|
|
19
|
+
insertEdges(edges: EnhancedEdge[]): void;
|
|
20
|
+
deleteEdgesFrom(source: string): void;
|
|
21
|
+
deleteEdgesForFile(filePath: string): void;
|
|
22
|
+
getFile(path: string): FileRecord | null;
|
|
23
|
+
getAllFiles(): FileRecord[];
|
|
24
|
+
upsertFile(file: FileRecord): void;
|
|
25
|
+
deleteFile(path: string): void;
|
|
26
|
+
getStaleFiles(currentHashes: Map<string, string>): {
|
|
27
|
+
added: string[];
|
|
28
|
+
modified: string[];
|
|
29
|
+
deleted: string[];
|
|
30
|
+
};
|
|
31
|
+
insertUnresolvedRef(ref: UnresolvedReference): void;
|
|
32
|
+
deleteUnresolvedRefsForFile(filePath: string): void;
|
|
33
|
+
getUnresolvedReferencesCount(): number;
|
|
34
|
+
searchNodes(query: string, options?: {
|
|
35
|
+
kinds?: NodeKind[];
|
|
36
|
+
languages?: Language[];
|
|
37
|
+
pathFilters?: string[];
|
|
38
|
+
nameFilters?: string[];
|
|
39
|
+
limit?: number;
|
|
40
|
+
}): EnhancedNode[];
|
|
41
|
+
getStats(dbSizeBytes?: number): GraphStats;
|
|
42
|
+
getNodeAndEdgeCount(): {
|
|
43
|
+
nodes: number;
|
|
44
|
+
edges: number;
|
|
45
|
+
};
|
|
46
|
+
setMetadata(key: string, value: string): void;
|
|
47
|
+
getMetadata(key: string): string | null;
|
|
48
|
+
clear(): void;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=queries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../../src/graph/db/queries.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EACV,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAC3D,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EACzC,MAAM,aAAa,CAAC;AA0GrB,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,SAAS,CAAyC;gBAE9C,IAAI,EAAE,kBAAkB;IAIpC,OAAO,CAAC,IAAI;IAWZ,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAK5C,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC;IAavD,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE;IAOhD,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,YAAY,EAAE;IAO9C,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAqBpC,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,IAAI;IAQxC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI5B,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMzC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE;IAWpE,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE;IAWpE,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAWpC,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,IAAI;IAQxC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIrC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAS1C,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAKxC,WAAW,IAAI,UAAU,EAAE;IAI3B,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAYlC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9B,aAAa,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE;IAwB7G,mBAAmB,CAAC,GAAG,EAAE,mBAAmB,GAAG,IAAI;IAanD,2BAA2B,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAInD,4BAA4B,IAAI,MAAM;IAOtC,WAAW,CACT,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GACvH,YAAY,EAAE;IAoEjB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,UAAU;IA4B1C,mBAAmB,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAQvD,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAM7C,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOvC,KAAK,IAAI,IAAI;CAMd"}
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
function rowToNode(row) {
|
|
2
|
+
return {
|
|
3
|
+
id: row.id,
|
|
4
|
+
kind: row.kind,
|
|
5
|
+
name: row.name,
|
|
6
|
+
qualifiedName: row.qualified_name ?? '',
|
|
7
|
+
filePath: row.file_path ?? '',
|
|
8
|
+
language: (row.language ?? 'unknown'),
|
|
9
|
+
startLine: row.start_line ?? 0,
|
|
10
|
+
endLine: row.end_line ?? 0,
|
|
11
|
+
startColumn: row.start_column ?? 0,
|
|
12
|
+
endColumn: row.end_column ?? 0,
|
|
13
|
+
docstring: row.docstring ?? '',
|
|
14
|
+
signature: row.signature ?? '',
|
|
15
|
+
visibility: (row.visibility ?? ''),
|
|
16
|
+
isExported: row.is_exported === 1,
|
|
17
|
+
isAsync: row.is_async === 1,
|
|
18
|
+
isStatic: row.is_static === 1,
|
|
19
|
+
isAbstract: row.is_abstract === 1,
|
|
20
|
+
decorators: row.decorators ? JSON.parse(row.decorators) : [],
|
|
21
|
+
typeParameters: row.type_parameters ? JSON.parse(row.type_parameters) : [],
|
|
22
|
+
updatedAt: row.updated_at,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function rowToEdge(row) {
|
|
26
|
+
return {
|
|
27
|
+
id: row.id,
|
|
28
|
+
source: row.source,
|
|
29
|
+
target: row.target,
|
|
30
|
+
kind: row.kind,
|
|
31
|
+
metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
|
|
32
|
+
line: row.line ?? undefined,
|
|
33
|
+
column: row.col ?? undefined,
|
|
34
|
+
provenance: row.provenance ?? undefined,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function rowToFile(row) {
|
|
38
|
+
return {
|
|
39
|
+
path: row.path,
|
|
40
|
+
contentHash: row.content_hash ?? '',
|
|
41
|
+
language: (row.language ?? 'unknown'),
|
|
42
|
+
size: row.size ?? 0,
|
|
43
|
+
modifiedAt: row.modified_at ?? '',
|
|
44
|
+
indexedAt: row.indexed_at,
|
|
45
|
+
nodeCount: row.node_count,
|
|
46
|
+
errors: row.errors ? JSON.parse(row.errors) : [],
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
// QueryBuilder
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
export class QueryBuilder {
|
|
53
|
+
conn;
|
|
54
|
+
stmtCache = new Map();
|
|
55
|
+
constructor(conn) {
|
|
56
|
+
this.conn = conn;
|
|
57
|
+
}
|
|
58
|
+
stmt(sql) {
|
|
59
|
+
let s = this.stmtCache.get(sql);
|
|
60
|
+
if (!s) {
|
|
61
|
+
s = this.conn.raw.prepare(sql);
|
|
62
|
+
this.stmtCache.set(sql, s);
|
|
63
|
+
}
|
|
64
|
+
return s;
|
|
65
|
+
}
|
|
66
|
+
// ── Node CRUD ──────────────────────────────────────────────────────
|
|
67
|
+
getNodeById(id) {
|
|
68
|
+
const row = this.stmt('SELECT * FROM nodes WHERE id = ?').get(id);
|
|
69
|
+
return row ? rowToNode(row) : null;
|
|
70
|
+
}
|
|
71
|
+
getNodesByIds(ids) {
|
|
72
|
+
const result = new Map();
|
|
73
|
+
if (ids.length === 0)
|
|
74
|
+
return result;
|
|
75
|
+
const placeholders = ids.map(() => '?').join(',');
|
|
76
|
+
const rows = this.conn.raw.prepare(`SELECT * FROM nodes WHERE id IN (${placeholders})`).all(...ids);
|
|
77
|
+
for (const row of rows) {
|
|
78
|
+
result.set(row.id, rowToNode(row));
|
|
79
|
+
}
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
getNodesByFile(filePath) {
|
|
83
|
+
const rows = this.stmt('SELECT * FROM nodes WHERE file_path = ?').all(filePath);
|
|
84
|
+
return rows.map(rowToNode);
|
|
85
|
+
}
|
|
86
|
+
getNodesByKind(kind) {
|
|
87
|
+
const rows = this.stmt('SELECT * FROM nodes WHERE kind = ?').all(kind);
|
|
88
|
+
return rows.map(rowToNode);
|
|
89
|
+
}
|
|
90
|
+
insertNode(node) {
|
|
91
|
+
this.stmt(`
|
|
92
|
+
INSERT OR REPLACE INTO nodes
|
|
93
|
+
(id, kind, name, qualified_name, file_path, language,
|
|
94
|
+
start_line, end_line, start_column, end_column,
|
|
95
|
+
docstring, signature, visibility, is_exported, is_async,
|
|
96
|
+
is_static, is_abstract, decorators, type_parameters, updated_at)
|
|
97
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now'))
|
|
98
|
+
`).run(node.id, node.kind, node.name, node.qualifiedName || null, node.filePath || null, node.language || null, node.startLine || null, node.endLine || null, node.startColumn || null, node.endColumn || null, node.docstring || null, node.signature || null, node.visibility || null, node.isExported ? 1 : 0, node.isAsync ? 1 : 0, node.isStatic ? 1 : 0, node.isAbstract ? 1 : 0, node.decorators.length > 0 ? JSON.stringify(node.decorators) : null, node.typeParameters.length > 0 ? JSON.stringify(node.typeParameters) : null);
|
|
99
|
+
}
|
|
100
|
+
insertNodes(nodes) {
|
|
101
|
+
this.conn.transaction(() => {
|
|
102
|
+
for (const node of nodes) {
|
|
103
|
+
this.insertNode(node);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
deleteNode(id) {
|
|
108
|
+
this.stmt('DELETE FROM nodes WHERE id = ?').run(id);
|
|
109
|
+
}
|
|
110
|
+
deleteNodesByFile(filePath) {
|
|
111
|
+
this.stmt('DELETE FROM nodes WHERE file_path = ?').run(filePath);
|
|
112
|
+
}
|
|
113
|
+
// ── Edge CRUD ──────────────────────────────────────────────────────
|
|
114
|
+
getOutgoingEdges(nodeId, kinds) {
|
|
115
|
+
if (kinds && kinds.length > 0) {
|
|
116
|
+
const placeholders = kinds.map(() => '?').join(',');
|
|
117
|
+
return this.conn.raw.prepare(`SELECT * FROM edges WHERE source = ? AND kind IN (${placeholders})`).all(nodeId, ...kinds).map(rowToEdge);
|
|
118
|
+
}
|
|
119
|
+
return this.stmt('SELECT * FROM edges WHERE source = ?')
|
|
120
|
+
.all(nodeId).map(rowToEdge);
|
|
121
|
+
}
|
|
122
|
+
getIncomingEdges(nodeId, kinds) {
|
|
123
|
+
if (kinds && kinds.length > 0) {
|
|
124
|
+
const placeholders = kinds.map(() => '?').join(',');
|
|
125
|
+
return this.conn.raw.prepare(`SELECT * FROM edges WHERE target = ? AND kind IN (${placeholders})`).all(nodeId, ...kinds).map(rowToEdge);
|
|
126
|
+
}
|
|
127
|
+
return this.stmt('SELECT * FROM edges WHERE target = ?')
|
|
128
|
+
.all(nodeId).map(rowToEdge);
|
|
129
|
+
}
|
|
130
|
+
insertEdge(edge) {
|
|
131
|
+
this.stmt(`
|
|
132
|
+
INSERT INTO edges (source, target, kind, metadata, line, col, provenance)
|
|
133
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
134
|
+
`).run(edge.source, edge.target, edge.kind, edge.metadata ? JSON.stringify(edge.metadata) : null, edge.line ?? null, edge.column ?? null, edge.provenance ?? null);
|
|
135
|
+
}
|
|
136
|
+
insertEdges(edges) {
|
|
137
|
+
this.conn.transaction(() => {
|
|
138
|
+
for (const edge of edges) {
|
|
139
|
+
this.insertEdge(edge);
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
deleteEdgesFrom(source) {
|
|
144
|
+
this.stmt('DELETE FROM edges WHERE source = ?').run(source);
|
|
145
|
+
}
|
|
146
|
+
deleteEdgesForFile(filePath) {
|
|
147
|
+
this.conn.raw.exec(`
|
|
148
|
+
DELETE FROM edges WHERE source IN (SELECT id FROM nodes WHERE file_path = '${filePath.replace(/'/g, "''")}')
|
|
149
|
+
OR target IN (SELECT id FROM nodes WHERE file_path = '${filePath.replace(/'/g, "''")}')
|
|
150
|
+
`);
|
|
151
|
+
}
|
|
152
|
+
// ── File CRUD ──────────────────────────────────────────────────────
|
|
153
|
+
getFile(path) {
|
|
154
|
+
const row = this.stmt('SELECT * FROM files WHERE path = ?').get(path);
|
|
155
|
+
return row ? rowToFile(row) : null;
|
|
156
|
+
}
|
|
157
|
+
getAllFiles() {
|
|
158
|
+
return this.stmt('SELECT * FROM files').all().map(rowToFile);
|
|
159
|
+
}
|
|
160
|
+
upsertFile(file) {
|
|
161
|
+
this.stmt(`
|
|
162
|
+
INSERT OR REPLACE INTO files
|
|
163
|
+
(path, content_hash, language, size, modified_at, indexed_at, node_count, errors)
|
|
164
|
+
VALUES (?, ?, ?, ?, ?, datetime('now'), ?, ?)
|
|
165
|
+
`).run(file.path, file.contentHash, file.language, file.size, file.modifiedAt, file.nodeCount, file.errors.length > 0 ? JSON.stringify(file.errors) : null);
|
|
166
|
+
}
|
|
167
|
+
deleteFile(path) {
|
|
168
|
+
this.stmt('DELETE FROM files WHERE path = ?').run(path);
|
|
169
|
+
}
|
|
170
|
+
getStaleFiles(currentHashes) {
|
|
171
|
+
const existing = new Map();
|
|
172
|
+
for (const file of this.getAllFiles()) {
|
|
173
|
+
existing.set(file.path, file.contentHash);
|
|
174
|
+
}
|
|
175
|
+
const added = [];
|
|
176
|
+
const modified = [];
|
|
177
|
+
for (const [path, hash] of currentHashes) {
|
|
178
|
+
const old = existing.get(path);
|
|
179
|
+
if (!old)
|
|
180
|
+
added.push(path);
|
|
181
|
+
else if (old !== hash)
|
|
182
|
+
modified.push(path);
|
|
183
|
+
}
|
|
184
|
+
const deleted = [];
|
|
185
|
+
for (const path of existing.keys()) {
|
|
186
|
+
if (!currentHashes.has(path))
|
|
187
|
+
deleted.push(path);
|
|
188
|
+
}
|
|
189
|
+
return { added, modified, deleted };
|
|
190
|
+
}
|
|
191
|
+
// ── Unresolved Refs ────────────────────────────────────────────────
|
|
192
|
+
insertUnresolvedRef(ref) {
|
|
193
|
+
this.stmt(`
|
|
194
|
+
INSERT INTO unresolved_refs
|
|
195
|
+
(from_node_id, reference_name, reference_kind, line, col, candidates, file_path, language)
|
|
196
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
197
|
+
`).run(ref.fromNodeId, ref.referenceName, ref.referenceKind, ref.line, ref.column, ref.candidates.length > 0 ? JSON.stringify(ref.candidates) : null, ref.filePath, ref.language);
|
|
198
|
+
}
|
|
199
|
+
deleteUnresolvedRefsForFile(filePath) {
|
|
200
|
+
this.stmt('DELETE FROM unresolved_refs WHERE file_path = ?').run(filePath);
|
|
201
|
+
}
|
|
202
|
+
getUnresolvedReferencesCount() {
|
|
203
|
+
const row = this.stmt('SELECT COUNT(*) as c FROM unresolved_refs').get();
|
|
204
|
+
return row.c;
|
|
205
|
+
}
|
|
206
|
+
// ── Search ─────────────────────────────────────────────────────────
|
|
207
|
+
searchNodes(query, options) {
|
|
208
|
+
const limit = options?.limit ?? 20;
|
|
209
|
+
const conditions = [];
|
|
210
|
+
const params = [];
|
|
211
|
+
if (options?.kinds && options.kinds.length > 0) {
|
|
212
|
+
conditions.push(`kind IN (${options.kinds.map(() => '?').join(',')})`);
|
|
213
|
+
params.push(...options.kinds);
|
|
214
|
+
}
|
|
215
|
+
if (options?.languages && options.languages.length > 0) {
|
|
216
|
+
conditions.push(`language IN (${options.languages.map(() => '?').join(',')})`);
|
|
217
|
+
params.push(...options.languages);
|
|
218
|
+
}
|
|
219
|
+
if (options?.pathFilters) {
|
|
220
|
+
for (const pf of options.pathFilters) {
|
|
221
|
+
conditions.push('LOWER(file_path) LIKE ?');
|
|
222
|
+
params.push(`%${pf.toLowerCase()}%`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (options?.nameFilters) {
|
|
226
|
+
for (const nf of options.nameFilters) {
|
|
227
|
+
conditions.push('LOWER(name) LIKE ?');
|
|
228
|
+
params.push(`%${nf.toLowerCase()}%`);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
if (query && query.trim()) {
|
|
232
|
+
const ftsQuery = query.trim().split(/\s+/).map(t => `"${t}"*`).join(' OR ');
|
|
233
|
+
const whereClause = conditions.length > 0 ? `AND ${conditions.join(' AND ')}` : '';
|
|
234
|
+
const sql = `
|
|
235
|
+
SELECT nodes.* FROM nodes_fts
|
|
236
|
+
JOIN nodes ON nodes.id = nodes_fts.id
|
|
237
|
+
WHERE nodes_fts MATCH ? ${whereClause}
|
|
238
|
+
ORDER BY rank
|
|
239
|
+
LIMIT ?
|
|
240
|
+
`;
|
|
241
|
+
try {
|
|
242
|
+
const rows = this.conn.raw.prepare(sql).all(ftsQuery, ...params, limit);
|
|
243
|
+
if (rows.length > 0)
|
|
244
|
+
return rows.map(rowToNode);
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
// FTS5 match failure — fall through to LIKE
|
|
248
|
+
}
|
|
249
|
+
// LIKE fallback
|
|
250
|
+
const likeWhere = conditions.length > 0 ? `AND ${conditions.join(' AND ')}` : '';
|
|
251
|
+
const likeSql = `
|
|
252
|
+
SELECT * FROM nodes
|
|
253
|
+
WHERE (LOWER(name) LIKE ? OR LOWER(qualified_name) LIKE ? OR LOWER(signature) LIKE ?)
|
|
254
|
+
${likeWhere}
|
|
255
|
+
LIMIT ?
|
|
256
|
+
`;
|
|
257
|
+
const pattern = `%${query.toLowerCase()}%`;
|
|
258
|
+
const likeRows = this.conn.raw.prepare(likeSql).all(pattern, pattern, pattern, ...params, limit);
|
|
259
|
+
return likeRows.map(rowToNode);
|
|
260
|
+
}
|
|
261
|
+
// No text query — just filters
|
|
262
|
+
if (conditions.length === 0) {
|
|
263
|
+
return this.stmt('SELECT * FROM nodes LIMIT ?').all(limit).map(rowToNode);
|
|
264
|
+
}
|
|
265
|
+
const sql = `SELECT * FROM nodes WHERE ${conditions.join(' AND ')} LIMIT ?`;
|
|
266
|
+
return this.conn.raw.prepare(sql).all(...params, limit).map(rowToNode);
|
|
267
|
+
}
|
|
268
|
+
// ── Statistics ─────────────────────────────────────────────────────
|
|
269
|
+
getStats(dbSizeBytes) {
|
|
270
|
+
const nodeCount = this.stmt('SELECT COUNT(*) as c FROM nodes').get().c;
|
|
271
|
+
const edgeCount = this.stmt('SELECT COUNT(*) as c FROM edges').get().c;
|
|
272
|
+
const fileCount = this.stmt('SELECT COUNT(*) as c FROM files').get().c;
|
|
273
|
+
const unresolvedRefCount = this.getUnresolvedReferencesCount();
|
|
274
|
+
const nodesByKind = {};
|
|
275
|
+
for (const row of this.stmt('SELECT kind, COUNT(*) as c FROM nodes GROUP BY kind').all()) {
|
|
276
|
+
nodesByKind[row.kind] = row.c;
|
|
277
|
+
}
|
|
278
|
+
const edgesByKind = {};
|
|
279
|
+
for (const row of this.stmt('SELECT kind, COUNT(*) as c FROM edges GROUP BY kind').all()) {
|
|
280
|
+
edgesByKind[row.kind] = row.c;
|
|
281
|
+
}
|
|
282
|
+
const nodesByLanguage = {};
|
|
283
|
+
for (const row of this.stmt('SELECT language, COUNT(*) as c FROM nodes WHERE language IS NOT NULL GROUP BY language').all()) {
|
|
284
|
+
nodesByLanguage[row.language] = row.c;
|
|
285
|
+
}
|
|
286
|
+
return {
|
|
287
|
+
nodeCount, edgeCount, fileCount, unresolvedRefCount,
|
|
288
|
+
nodesByKind, edgesByKind, nodesByLanguage,
|
|
289
|
+
dbSizeBytes: dbSizeBytes ?? 0,
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
getNodeAndEdgeCount() {
|
|
293
|
+
const nodes = this.stmt('SELECT COUNT(*) as c FROM nodes').get().c;
|
|
294
|
+
const edges = this.stmt('SELECT COUNT(*) as c FROM edges').get().c;
|
|
295
|
+
return { nodes, edges };
|
|
296
|
+
}
|
|
297
|
+
// ── Project Metadata ───────────────────────────────────────────────
|
|
298
|
+
setMetadata(key, value) {
|
|
299
|
+
this.stmt('INSERT OR REPLACE INTO project_metadata (key, value, updated_at) VALUES (?, ?, datetime(\'now\'))').run(key, value);
|
|
300
|
+
}
|
|
301
|
+
getMetadata(key) {
|
|
302
|
+
const row = this.stmt('SELECT value FROM project_metadata WHERE key = ?').get(key);
|
|
303
|
+
return row?.value ?? null;
|
|
304
|
+
}
|
|
305
|
+
// ── Bulk Operations ────────────────────────────────────────────────
|
|
306
|
+
clear() {
|
|
307
|
+
this.conn.raw.exec('DELETE FROM edges');
|
|
308
|
+
this.conn.raw.exec('DELETE FROM unresolved_refs');
|
|
309
|
+
this.conn.raw.exec('DELETE FROM nodes');
|
|
310
|
+
this.conn.raw.exec('DELETE FROM files');
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
//# sourceMappingURL=queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../../src/graph/db/queries.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
-- CodeGraph SQLite Schema for Maestro Knowledge Graph
|
|
2
|
+
-- Adapted from codegraph project
|
|
3
|
+
|
|
4
|
+
-- ── Schema Versioning ─────────────────────────────────────────────────
|
|
5
|
+
CREATE TABLE IF NOT EXISTS schema_versions (
|
|
6
|
+
version INTEGER PRIMARY KEY,
|
|
7
|
+
applied_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
8
|
+
description TEXT
|
|
9
|
+
);
|
|
10
|
+
|
|
11
|
+
-- ── Project Metadata ──────────────────────────────────────────────────
|
|
12
|
+
CREATE TABLE IF NOT EXISTS project_metadata (
|
|
13
|
+
key TEXT PRIMARY KEY,
|
|
14
|
+
value TEXT,
|
|
15
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
-- ── Nodes ─────────────────────────────────────────────────────────────
|
|
19
|
+
CREATE TABLE IF NOT EXISTS nodes (
|
|
20
|
+
id TEXT PRIMARY KEY,
|
|
21
|
+
kind TEXT NOT NULL,
|
|
22
|
+
name TEXT NOT NULL,
|
|
23
|
+
qualified_name TEXT,
|
|
24
|
+
file_path TEXT,
|
|
25
|
+
language TEXT,
|
|
26
|
+
start_line INTEGER,
|
|
27
|
+
end_line INTEGER,
|
|
28
|
+
start_column INTEGER,
|
|
29
|
+
end_column INTEGER,
|
|
30
|
+
docstring TEXT,
|
|
31
|
+
signature TEXT,
|
|
32
|
+
visibility TEXT,
|
|
33
|
+
is_exported INTEGER DEFAULT 0,
|
|
34
|
+
is_async INTEGER DEFAULT 0,
|
|
35
|
+
is_static INTEGER DEFAULT 0,
|
|
36
|
+
is_abstract INTEGER DEFAULT 0,
|
|
37
|
+
decorators TEXT, -- JSON array
|
|
38
|
+
type_parameters TEXT, -- JSON array
|
|
39
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
-- ── Edges ─────────────────────────────────────────────────────────────
|
|
43
|
+
CREATE TABLE IF NOT EXISTS edges (
|
|
44
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
45
|
+
source TEXT NOT NULL REFERENCES nodes(id) ON DELETE CASCADE,
|
|
46
|
+
target TEXT NOT NULL REFERENCES nodes(id) ON DELETE CASCADE,
|
|
47
|
+
kind TEXT NOT NULL,
|
|
48
|
+
metadata TEXT, -- JSON object
|
|
49
|
+
line INTEGER,
|
|
50
|
+
col INTEGER,
|
|
51
|
+
provenance TEXT
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
-- ── Files ─────────────────────────────────────────────────────────────
|
|
55
|
+
CREATE TABLE IF NOT EXISTS files (
|
|
56
|
+
path TEXT PRIMARY KEY,
|
|
57
|
+
content_hash TEXT,
|
|
58
|
+
language TEXT,
|
|
59
|
+
size INTEGER,
|
|
60
|
+
modified_at TEXT,
|
|
61
|
+
indexed_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
62
|
+
node_count INTEGER DEFAULT 0,
|
|
63
|
+
errors TEXT -- JSON array
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
-- ── Unresolved References ─────────────────────────────────────────────
|
|
67
|
+
CREATE TABLE IF NOT EXISTS unresolved_refs (
|
|
68
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
69
|
+
from_node_id TEXT NOT NULL REFERENCES nodes(id) ON DELETE CASCADE,
|
|
70
|
+
reference_name TEXT NOT NULL,
|
|
71
|
+
reference_kind TEXT,
|
|
72
|
+
line INTEGER,
|
|
73
|
+
col INTEGER,
|
|
74
|
+
candidates TEXT, -- JSON array
|
|
75
|
+
file_path TEXT,
|
|
76
|
+
language TEXT
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
-- ── Indexes: Nodes ────────────────────────────────────────────────────
|
|
80
|
+
CREATE INDEX IF NOT EXISTS idx_nodes_kind ON nodes(kind);
|
|
81
|
+
CREATE INDEX IF NOT EXISTS idx_nodes_name ON nodes(name);
|
|
82
|
+
CREATE INDEX IF NOT EXISTS idx_nodes_qualified_name ON nodes(qualified_name);
|
|
83
|
+
CREATE INDEX IF NOT EXISTS idx_nodes_file_path ON nodes(file_path);
|
|
84
|
+
CREATE INDEX IF NOT EXISTS idx_nodes_language ON nodes(language);
|
|
85
|
+
CREATE INDEX IF NOT EXISTS idx_nodes_file_line ON nodes(file_path, start_line);
|
|
86
|
+
CREATE INDEX IF NOT EXISTS idx_nodes_lower_name ON nodes(lower(name));
|
|
87
|
+
|
|
88
|
+
-- ── Indexes: Edges ────────────────────────────────────────────────────
|
|
89
|
+
CREATE INDEX IF NOT EXISTS idx_edges_source ON edges(source);
|
|
90
|
+
CREATE INDEX IF NOT EXISTS idx_edges_target ON edges(target);
|
|
91
|
+
CREATE INDEX IF NOT EXISTS idx_edges_kind ON edges(kind);
|
|
92
|
+
CREATE INDEX IF NOT EXISTS idx_edges_source_kind ON edges(source, kind);
|
|
93
|
+
CREATE INDEX IF NOT EXISTS idx_edges_target_kind ON edges(target, kind);
|
|
94
|
+
|
|
95
|
+
-- ── Indexes: Files ────────────────────────────────────────────────────
|
|
96
|
+
CREATE INDEX IF NOT EXISTS idx_files_language ON files(language);
|
|
97
|
+
CREATE INDEX IF NOT EXISTS idx_files_modified_at ON files(modified_at);
|
|
98
|
+
|
|
99
|
+
-- ── Indexes: Unresolved Refs ──────────────────────────────────────────
|
|
100
|
+
CREATE INDEX IF NOT EXISTS idx_unresolved_from ON unresolved_refs(from_node_id);
|
|
101
|
+
CREATE INDEX IF NOT EXISTS idx_unresolved_file ON unresolved_refs(file_path);
|
|
102
|
+
CREATE INDEX IF NOT EXISTS idx_unresolved_name ON unresolved_refs(reference_name);
|
|
103
|
+
|
|
104
|
+
-- ── FTS5 Full-Text Search ─────────────────────────────────────────────
|
|
105
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS nodes_fts USING fts5(
|
|
106
|
+
id,
|
|
107
|
+
name,
|
|
108
|
+
qualified_name,
|
|
109
|
+
docstring,
|
|
110
|
+
signature,
|
|
111
|
+
content='nodes',
|
|
112
|
+
content_rowid='rowid'
|
|
113
|
+
);
|
|
114
|
+
|
|
115
|
+
-- FTS sync triggers
|
|
116
|
+
CREATE TRIGGER IF NOT EXISTS nodes_ai AFTER INSERT ON nodes BEGIN
|
|
117
|
+
INSERT INTO nodes_fts(rowid, id, name, qualified_name, docstring, signature)
|
|
118
|
+
VALUES (new.rowid, new.id, new.name, new.qualified_name, new.docstring, new.signature);
|
|
119
|
+
END;
|
|
120
|
+
|
|
121
|
+
CREATE TRIGGER IF NOT EXISTS nodes_ad AFTER DELETE ON nodes BEGIN
|
|
122
|
+
INSERT INTO nodes_fts(nodes_fts, rowid, id, name, qualified_name, docstring, signature)
|
|
123
|
+
VALUES ('delete', old.rowid, old.id, old.name, old.qualified_name, old.docstring, old.signature);
|
|
124
|
+
END;
|
|
125
|
+
|
|
126
|
+
CREATE TRIGGER IF NOT EXISTS nodes_au AFTER UPDATE ON nodes BEGIN
|
|
127
|
+
INSERT INTO nodes_fts(nodes_fts, rowid, id, name, qualified_name, docstring, signature)
|
|
128
|
+
VALUES ('delete', old.rowid, old.id, old.name, old.qualified_name, old.docstring, old.signature);
|
|
129
|
+
INSERT INTO nodes_fts(rowid, id, name, qualified_name, docstring, signature)
|
|
130
|
+
VALUES (new.rowid, new.id, new.name, new.qualified_name, new.docstring, new.signature);
|
|
131
|
+
END;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { EnhancedNode, EnhancedEdge, Subgraph, GraphStats, NodeKind, NodeContext, PathResult, DiffResult } from './types.js';
|
|
2
|
+
export type GraphBackend = 'sqlite' | 'json' | 'none';
|
|
3
|
+
export declare function detectBackend(projectRoot?: string): GraphBackend;
|
|
4
|
+
export declare class GraphFacade {
|
|
5
|
+
private backend;
|
|
6
|
+
private conn;
|
|
7
|
+
private queries;
|
|
8
|
+
private manager;
|
|
9
|
+
private traverser;
|
|
10
|
+
private jsonGraph;
|
|
11
|
+
constructor(projectRoot?: string);
|
|
12
|
+
getBackend(): GraphBackend;
|
|
13
|
+
close(): void;
|
|
14
|
+
search(query: string, opts?: {
|
|
15
|
+
limit?: number;
|
|
16
|
+
type?: string;
|
|
17
|
+
}): Array<{
|
|
18
|
+
id: string;
|
|
19
|
+
kind: string;
|
|
20
|
+
name: string;
|
|
21
|
+
filePath?: string;
|
|
22
|
+
summary?: string;
|
|
23
|
+
}>;
|
|
24
|
+
findPath(fromId: string, toId: string): PathResult | null;
|
|
25
|
+
diffChanges(changedFiles: string[]): DiffResult;
|
|
26
|
+
stats(): GraphStats | null;
|
|
27
|
+
getCallers(nodeId: string, depth?: number): Array<{
|
|
28
|
+
node: EnhancedNode;
|
|
29
|
+
edge: EnhancedEdge;
|
|
30
|
+
}>;
|
|
31
|
+
getCallees(nodeId: string, depth?: number): Array<{
|
|
32
|
+
node: EnhancedNode;
|
|
33
|
+
edge: EnhancedEdge;
|
|
34
|
+
}>;
|
|
35
|
+
getImpactRadius(nodeId: string, depth?: number): Subgraph;
|
|
36
|
+
findDeadCode(kinds?: NodeKind[]): EnhancedNode[];
|
|
37
|
+
findCircularDependencies(): string[][];
|
|
38
|
+
getContext(nodeId: string): NodeContext;
|
|
39
|
+
getNodeMetrics(nodeId: string): {
|
|
40
|
+
incomingEdgeCount: number;
|
|
41
|
+
outgoingEdgeCount: number;
|
|
42
|
+
callCount: number;
|
|
43
|
+
callerCount: number;
|
|
44
|
+
childCount: number;
|
|
45
|
+
depth: number;
|
|
46
|
+
};
|
|
47
|
+
sync(): {
|
|
48
|
+
filesChanged: number;
|
|
49
|
+
durationMs: number;
|
|
50
|
+
};
|
|
51
|
+
private requireSqlite;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=facade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"facade.d.ts","sourceRoot":"","sources":["../../../src/graph/facade.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACiB,YAAY,EAAE,YAAY,EACrD,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAC3C,UAAU,EAAE,UAAU,EACvB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAEtD,wBAAgB,aAAa,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,YAAY,CAShE;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,IAAI,CAAmC;IAC/C,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,SAAS,CAA+B;gBAEpC,WAAW,CAAC,EAAE,MAAM;IAchC,UAAU,IAAI,YAAY;IAI1B,KAAK,IAAI,IAAI;IAKb,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA0BvJ,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAwBzD,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,UAAU;IA8B/C,KAAK,IAAI,UAAU,GAAG,IAAI;IAS1B,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,YAAY,CAAC;QAAC,IAAI,EAAE,YAAY,CAAA;KAAE,CAAC;IAK7F,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,YAAY,CAAC;QAAC,IAAI,EAAE,YAAY,CAAA;KAAE,CAAC;IAK7F,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ;IAKzD,YAAY,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE;IAKhD,wBAAwB,IAAI,MAAM,EAAE,EAAE;IAKtC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW;IAKvC,cAAc,CAAC,MAAM,EAAE,MAAM;;;;;;;;IAK7B,IAAI,IAAI;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;IAOpD,OAAO,CAAC,aAAa;CAKtB"}
|