@dewtech/dare-cli 2.1.0 → 2.3.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 +53 -7
- package/dist/__tests__/dag-runner/adapters.test.d.ts +2 -0
- package/dist/__tests__/dag-runner/adapters.test.d.ts.map +1 -0
- package/dist/__tests__/dag-runner/adapters.test.js +134 -0
- package/dist/__tests__/dag-runner/adapters.test.js.map +1 -0
- package/dist/__tests__/dag-runner/graph-ingest.test.d.ts +2 -0
- package/dist/__tests__/dag-runner/graph-ingest.test.d.ts.map +1 -0
- package/dist/__tests__/dag-runner/graph-ingest.test.js +105 -0
- package/dist/__tests__/dag-runner/graph-ingest.test.js.map +1 -0
- package/dist/__tests__/dag-runner/orchestrator.test.d.ts +2 -0
- package/dist/__tests__/dag-runner/orchestrator.test.d.ts.map +1 -0
- package/dist/__tests__/dag-runner/orchestrator.test.js +107 -0
- package/dist/__tests__/dag-runner/orchestrator.test.js.map +1 -0
- package/dist/__tests__/dag-runner/utils.test.d.ts +2 -0
- package/dist/__tests__/dag-runner/utils.test.d.ts.map +1 -0
- package/dist/__tests__/dag-runner/utils.test.js +47 -0
- package/dist/__tests__/dag-runner/utils.test.js.map +1 -0
- package/dist/__tests__/graphrag/json-graph.test.d.ts +2 -0
- package/dist/__tests__/graphrag/json-graph.test.d.ts.map +1 -0
- package/dist/__tests__/graphrag/json-graph.test.js +57 -0
- package/dist/__tests__/graphrag/json-graph.test.js.map +1 -0
- package/dist/bin/dare.js +2 -0
- package/dist/bin/dare.js.map +1 -1
- package/dist/commands/execute.d.ts.map +1 -1
- package/dist/commands/execute.js +172 -45
- package/dist/commands/execute.js.map +1 -1
- package/dist/commands/graph.d.ts +9 -0
- package/dist/commands/graph.d.ts.map +1 -0
- package/dist/commands/graph.js +155 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/dag-runner/adapters/antigravity.d.ts +6 -0
- package/dist/dag-runner/adapters/antigravity.d.ts.map +1 -0
- package/dist/dag-runner/adapters/antigravity.js +54 -0
- package/dist/dag-runner/adapters/antigravity.js.map +1 -0
- package/dist/dag-runner/adapters/claude.d.ts +6 -0
- package/dist/dag-runner/adapters/claude.d.ts.map +1 -0
- package/dist/dag-runner/adapters/claude.js +48 -0
- package/dist/dag-runner/adapters/claude.js.map +1 -0
- package/dist/dag-runner/adapters/cursor.d.ts +6 -0
- package/dist/dag-runner/adapters/cursor.d.ts.map +1 -0
- package/dist/dag-runner/adapters/cursor.js +58 -0
- package/dist/dag-runner/adapters/cursor.js.map +1 -0
- package/dist/dag-runner/adapters/index.d.ts +46 -0
- package/dist/dag-runner/adapters/index.d.ts.map +1 -0
- package/dist/dag-runner/adapters/index.js +55 -0
- package/dist/dag-runner/adapters/index.js.map +1 -0
- package/dist/dag-runner/graph-ingest.d.ts +17 -0
- package/dist/dag-runner/graph-ingest.d.ts.map +1 -0
- package/dist/dag-runner/graph-ingest.js +149 -0
- package/dist/dag-runner/graph-ingest.js.map +1 -0
- package/dist/dag-runner/run_dag.d.ts +51 -24
- package/dist/dag-runner/run_dag.d.ts.map +1 -1
- package/dist/dag-runner/run_dag.js +163 -109
- package/dist/dag-runner/run_dag.js.map +1 -1
- package/dist/dag-runner/state-store.d.ts +13 -0
- package/dist/dag-runner/state-store.d.ts.map +1 -0
- package/dist/dag-runner/state-store.js +69 -0
- package/dist/dag-runner/state-store.js.map +1 -0
- package/dist/dag-runner/utils/cap-output.d.ts +14 -0
- package/dist/dag-runner/utils/cap-output.d.ts.map +1 -0
- package/dist/dag-runner/utils/cap-output.js +25 -0
- package/dist/dag-runner/utils/cap-output.js.map +1 -0
- package/dist/dag-runner/utils/stitch-context.d.ts +24 -0
- package/dist/dag-runner/utils/stitch-context.d.ts.map +1 -0
- package/dist/dag-runner/utils/stitch-context.js +36 -0
- package/dist/dag-runner/utils/stitch-context.js.map +1 -0
- package/dist/dag-runner/utils/timeout.d.ts +27 -0
- package/dist/dag-runner/utils/timeout.d.ts.map +1 -0
- package/dist/dag-runner/utils/timeout.js +55 -0
- package/dist/dag-runner/utils/timeout.js.map +1 -0
- package/dist/graphrag/factory.d.ts +25 -0
- package/dist/graphrag/factory.d.ts.map +1 -0
- package/dist/graphrag/factory.js +66 -0
- package/dist/graphrag/factory.js.map +1 -0
- package/dist/graphrag/index.d.ts +4 -0
- package/dist/graphrag/index.d.ts.map +1 -1
- package/dist/graphrag/index.js +2 -0
- package/dist/graphrag/index.js.map +1 -1
- package/dist/graphrag/json-graph.d.ts +28 -0
- package/dist/graphrag/json-graph.d.ts.map +1 -0
- package/dist/graphrag/json-graph.js +168 -0
- package/dist/graphrag/json-graph.js.map +1 -0
- package/dist/graphrag/knowledge-graph.d.ts +33 -0
- package/dist/graphrag/knowledge-graph.d.ts.map +1 -0
- package/dist/graphrag/knowledge-graph.js +2 -0
- package/dist/graphrag/knowledge-graph.js.map +1 -0
- package/dist/index.d.ts +13 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -5
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/templates/ide/antigravity/.agents/skills/dare-dag-runner/SKILL.md +99 -96
- package/templates/ide/claude/.claude/commands/dare-dag-run.md +68 -69
- package/templates/ide/cursor/.cursor/commands/run-dag.md +67 -44
- package/templates/ide/cursor/.cursor/rules/skill-dag-runner.mdc +97 -87
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run an async operation with a hard timeout, backed by `AbortController`.
|
|
3
|
+
*
|
|
4
|
+
* The operation receives the controller's `signal` — adapters MUST forward
|
|
5
|
+
* it to their underlying SDK call (Anthropic, Cursor, Google) so an external
|
|
6
|
+
* abort is honored. If the SDK doesn't support cancellation, we still time
|
|
7
|
+
* out at the JS level via the racing promise.
|
|
8
|
+
*
|
|
9
|
+
* Also accepts an optional `externalSignal` so a SIGINT/SIGTERM listener can
|
|
10
|
+
* cancel everything in flight.
|
|
11
|
+
*/
|
|
12
|
+
export class TaskTimeoutError extends Error {
|
|
13
|
+
constructor(timeoutSeconds) {
|
|
14
|
+
super(`Task exceeded ${timeoutSeconds}s timeout`);
|
|
15
|
+
this.timeoutSeconds = timeoutSeconds;
|
|
16
|
+
this.name = 'TaskTimeoutError';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class TaskAbortedError extends Error {
|
|
20
|
+
constructor(reason = 'aborted') {
|
|
21
|
+
super(`Task aborted: ${reason}`);
|
|
22
|
+
this.name = 'TaskAbortedError';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export async function withTimeout(op, { timeoutSeconds, externalSignal }) {
|
|
26
|
+
const controller = new AbortController();
|
|
27
|
+
// Forward external aborts (e.g. SIGINT handler) to our controller.
|
|
28
|
+
const onExternal = () => controller.abort('external');
|
|
29
|
+
if (externalSignal) {
|
|
30
|
+
if (externalSignal.aborted)
|
|
31
|
+
controller.abort('external');
|
|
32
|
+
else
|
|
33
|
+
externalSignal.addEventListener('abort', onExternal, { once: true });
|
|
34
|
+
}
|
|
35
|
+
const timer = setTimeout(() => controller.abort('timeout'), timeoutSeconds * 1000);
|
|
36
|
+
try {
|
|
37
|
+
return await Promise.race([
|
|
38
|
+
op({ signal: controller.signal }),
|
|
39
|
+
new Promise((_, reject) => {
|
|
40
|
+
controller.signal.addEventListener('abort', () => {
|
|
41
|
+
const reason = controller.signal.reason ?? 'aborted';
|
|
42
|
+
reject(reason === 'timeout'
|
|
43
|
+
? new TaskTimeoutError(timeoutSeconds)
|
|
44
|
+
: new TaskAbortedError(String(reason)));
|
|
45
|
+
}, { once: true });
|
|
46
|
+
}),
|
|
47
|
+
]);
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
clearTimeout(timer);
|
|
51
|
+
if (externalSignal)
|
|
52
|
+
externalSignal.removeEventListener('abort', onExternal);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=timeout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeout.js","sourceRoot":"","sources":["../../../src/dag-runner/utils/timeout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,YAA4B,cAAsB;QAChD,KAAK,CAAC,iBAAiB,cAAc,WAAW,CAAC,CAAC;QADxB,mBAAc,GAAd,cAAc,CAAQ;QAEhD,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,YAAY,MAAM,GAAG,SAAS;QAC5B,KAAK,CAAC,iBAAiB,MAAM,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,EAAuC,EACvC,EAAE,cAAc,EAAE,cAAc,EAAsB;IAEtD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IAEzC,mEAAmE;IACnE,MAAM,UAAU,GAAG,GAAS,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC5D,IAAI,cAAc,EAAE,CAAC;QACnB,IAAI,cAAc,CAAC,OAAO;YAAE,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;;YACpD,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC,CAAC;IAEnF,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;YACxB,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;YACjC,IAAI,OAAO,CAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBAC3B,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;oBAC/C,MAAM,MAAM,GAAI,UAAU,CAAC,MAAM,CAAC,MAA6B,IAAI,SAAS,CAAC;oBAC7E,MAAM,CAAC,MAAM,KAAK,SAAS;wBACzB,CAAC,CAAC,IAAI,gBAAgB,CAAC,cAAc,CAAC;wBACtC,CAAC,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC5C,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACrB,CAAC,CAAC;SACH,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,cAAc;YAAE,cAAc,CAAC,mBAAmB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { KnowledgeGraph } from './knowledge-graph.js';
|
|
2
|
+
export type GraphBackend = 'sqlite' | 'json' | 'neo4j';
|
|
3
|
+
export interface GraphConfig {
|
|
4
|
+
backend: GraphBackend;
|
|
5
|
+
/** Path to the persistence target, relative to the project root. */
|
|
6
|
+
path?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Resolve graph config:
|
|
10
|
+
* - if `explicit` is given, use it;
|
|
11
|
+
* - otherwise read `dare-graph.yml` from cwd (or `cwd` if provided);
|
|
12
|
+
* - if no file exists, fall back to sqlite at `.dare/graph.db`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function loadGraphConfig(opts?: {
|
|
15
|
+
cwd?: string;
|
|
16
|
+
explicit?: GraphConfig;
|
|
17
|
+
}): Promise<GraphConfig>;
|
|
18
|
+
/**
|
|
19
|
+
* Build the backend instance and call `init()`. Caller owns the lifecycle and
|
|
20
|
+
* must call `.close()` when done.
|
|
21
|
+
*/
|
|
22
|
+
export declare function createGraph(config: GraphConfig, opts?: {
|
|
23
|
+
cwd?: string;
|
|
24
|
+
}): Promise<KnowledgeGraph>;
|
|
25
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/graphrag/factory.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAEvD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,YAAY,CAAC;IACtB,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAQD;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,IAAI,GAAE;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,WAAW,CAAC;CACnB,GAAG,OAAO,CAAC,WAAW,CAAC,CAoB5B;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,WAAW,EACnB,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1B,OAAO,CAAC,cAAc,CAAC,CAqBzB"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `createGraph()` — read `dare-graph.yml` (or take an explicit config) and
|
|
3
|
+
* return the matching backend instance.
|
|
4
|
+
*
|
|
5
|
+
* Supported backends:
|
|
6
|
+
* - `sqlite` → `GraphRAG` (sql.js)
|
|
7
|
+
* - `json` → `JsonGraph` (single JSON file, no native deps)
|
|
8
|
+
* - `neo4j` → not yet implemented (throws with guidance)
|
|
9
|
+
*/
|
|
10
|
+
import path from 'path';
|
|
11
|
+
import fs from 'fs-extra';
|
|
12
|
+
import { parse as parseYaml } from 'yaml';
|
|
13
|
+
import { GraphRAG } from './graph-rag.js';
|
|
14
|
+
import { JsonGraph } from './json-graph.js';
|
|
15
|
+
const DEFAULTS = {
|
|
16
|
+
sqlite: '.dare/graph.db',
|
|
17
|
+
json: '.dare/graph.json',
|
|
18
|
+
neo4j: undefined,
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Resolve graph config:
|
|
22
|
+
* - if `explicit` is given, use it;
|
|
23
|
+
* - otherwise read `dare-graph.yml` from cwd (or `cwd` if provided);
|
|
24
|
+
* - if no file exists, fall back to sqlite at `.dare/graph.db`.
|
|
25
|
+
*/
|
|
26
|
+
export async function loadGraphConfig(opts = {}) {
|
|
27
|
+
if (opts.explicit) {
|
|
28
|
+
return normalize(opts.explicit);
|
|
29
|
+
}
|
|
30
|
+
const cwd = opts.cwd ?? process.cwd();
|
|
31
|
+
const ymlPath = path.join(cwd, 'dare-graph.yml');
|
|
32
|
+
if (!(await fs.pathExists(ymlPath))) {
|
|
33
|
+
return { backend: 'sqlite', path: DEFAULTS.sqlite };
|
|
34
|
+
}
|
|
35
|
+
const raw = (await fs.readFile(ymlPath, 'utf-8')).toString();
|
|
36
|
+
const parsed = (parseYaml(raw) ?? {});
|
|
37
|
+
const backend = parsed.backend ?? 'sqlite';
|
|
38
|
+
const subBlock = parsed[backend] ?? {};
|
|
39
|
+
const filePath = typeof subBlock.path === 'string' ? subBlock.path : DEFAULTS[backend];
|
|
40
|
+
return normalize({ backend, path: filePath });
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Build the backend instance and call `init()`. Caller owns the lifecycle and
|
|
44
|
+
* must call `.close()` when done.
|
|
45
|
+
*/
|
|
46
|
+
export async function createGraph(config, opts = {}) {
|
|
47
|
+
const cwd = opts.cwd ?? process.cwd();
|
|
48
|
+
const cfg = normalize(config);
|
|
49
|
+
if (cfg.backend === 'neo4j') {
|
|
50
|
+
throw new Error('Neo4j backend is not yet implemented in @dewtech/dare-cli. Use `backend: sqlite` or `backend: json` in dare-graph.yml. (PRs welcome.)');
|
|
51
|
+
}
|
|
52
|
+
if (!cfg.path) {
|
|
53
|
+
throw new Error(`dare-graph.yml is missing the storage path for backend=${cfg.backend}.`);
|
|
54
|
+
}
|
|
55
|
+
const absPath = path.isAbsolute(cfg.path) ? cfg.path : path.resolve(cwd, cfg.path);
|
|
56
|
+
const graph = cfg.backend === 'sqlite' ? new GraphRAG(absPath) : new JsonGraph(absPath);
|
|
57
|
+
await graph.init();
|
|
58
|
+
return graph;
|
|
59
|
+
}
|
|
60
|
+
function normalize(cfg) {
|
|
61
|
+
return {
|
|
62
|
+
backend: cfg.backend,
|
|
63
|
+
path: cfg.path ?? DEFAULTS[cfg.backend],
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/graphrag/factory.ts"],"names":[],"mappings":"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"}
|
package/dist/graphrag/index.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
export { GraphRAG } from './graph-rag.js';
|
|
2
|
+
export { JsonGraph } from './json-graph.js';
|
|
3
|
+
export { createGraph, loadGraphConfig } from './factory.js';
|
|
4
|
+
export type { KnowledgeGraph } from './knowledge-graph.js';
|
|
5
|
+
export type { GraphConfig, GraphBackend } from './factory.js';
|
|
2
6
|
export type { GraphNode, GraphEdge, NodeType, EdgeType, TaskNode, FileNode, SchemaNode, EndpointNode, ComponentNode, SearchResult, GraphStatistics, } from './types.js';
|
|
3
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/graphrag/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,YAAY,EACV,SAAS,EACT,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,eAAe,GAChB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/graphrag/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC5D,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC9D,YAAY,EACV,SAAS,EACT,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,eAAe,GAChB,MAAM,YAAY,CAAC"}
|
package/dist/graphrag/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/graphrag/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/graphrag/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { KnowledgeGraph, GraphNode, GraphEdge, NodeType, SearchResult, GraphStatistics } from './knowledge-graph.js';
|
|
2
|
+
export declare class JsonGraph implements KnowledgeGraph {
|
|
3
|
+
private readonly filePath;
|
|
4
|
+
private nodes;
|
|
5
|
+
private edges;
|
|
6
|
+
constructor(filePath: string);
|
|
7
|
+
init(): Promise<void>;
|
|
8
|
+
addNode(node: GraphNode): void;
|
|
9
|
+
getNode(id: string): GraphNode | null;
|
|
10
|
+
queryNodes(type?: NodeType, limit?: number): GraphNode[];
|
|
11
|
+
searchNodes(query: string, limit?: number): SearchResult[];
|
|
12
|
+
deleteNode(id: string): void;
|
|
13
|
+
addEdge(edge: GraphEdge): void;
|
|
14
|
+
getEdges(nodeId: string, direction?: 'out' | 'in' | 'both'): GraphEdge[];
|
|
15
|
+
getNodeDependencies(nodeId: string, depth?: number): GraphNode[];
|
|
16
|
+
getStatistics(): GraphStatistics;
|
|
17
|
+
exportToJson(): {
|
|
18
|
+
nodes: GraphNode[];
|
|
19
|
+
edges: GraphEdge[];
|
|
20
|
+
};
|
|
21
|
+
importFromJson(data: {
|
|
22
|
+
nodes: GraphNode[];
|
|
23
|
+
edges: GraphEdge[];
|
|
24
|
+
}): void;
|
|
25
|
+
close(): void;
|
|
26
|
+
private flushSync;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=json-graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-graph.d.ts","sourceRoot":"","sources":["../../src/graphrag/json-graph.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,SAAS,EACT,QAAQ,EAER,YAAY,EACZ,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAO9B,qBAAa,SAAU,YAAW,cAAc;IAIlC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAHrC,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,KAAK,CAAgC;gBAEhB,QAAQ,EAAE,MAAM;IAEvC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB3B,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAqB9B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAIrC,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,SAAK,GAAG,SAAS,EAAE;IAOpD,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,YAAY,EAAE;IAiBtD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAU5B,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAS9B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,GAAE,KAAK,GAAG,IAAI,GAAG,MAAe,GAAG,SAAS,EAAE;IAQhF,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,SAAS,EAAE;IAqB3D,aAAa,IAAI,eAAe;IAiBhC,YAAY,IAAI;QAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAAC,KAAK,EAAE,SAAS,EAAE,CAAA;KAAE;IAI1D,cAAc,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAAC,KAAK,EAAE,SAAS,EAAE,CAAA;KAAE,GAAG,IAAI;IAKtE,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,SAAS;CAWlB"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JsonGraph — minimal in-memory knowledge graph persisted to a JSON file.
|
|
3
|
+
*
|
|
4
|
+
* Useful for projects that want zero native dependencies (no sql.js).
|
|
5
|
+
* Trade-offs vs SQLite: no FTS, no SQL queries, full file rewrite on each
|
|
6
|
+
* mutation. Good enough for small DARE projects (<10k nodes).
|
|
7
|
+
*/
|
|
8
|
+
import path from 'path';
|
|
9
|
+
import fs from 'fs-extra';
|
|
10
|
+
export class JsonGraph {
|
|
11
|
+
constructor(filePath) {
|
|
12
|
+
this.filePath = filePath;
|
|
13
|
+
this.nodes = new Map();
|
|
14
|
+
this.edges = new Map();
|
|
15
|
+
}
|
|
16
|
+
async init() {
|
|
17
|
+
await fs.ensureDir(path.dirname(this.filePath));
|
|
18
|
+
if (await fs.pathExists(this.filePath)) {
|
|
19
|
+
try {
|
|
20
|
+
const data = (await fs.readJson(this.filePath));
|
|
21
|
+
for (const n of data.nodes ?? [])
|
|
22
|
+
this.nodes.set(n.id, n);
|
|
23
|
+
for (const e of data.edges ?? [])
|
|
24
|
+
this.edges.set(e.id, e);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// corrupt file — start fresh, but keep a backup
|
|
28
|
+
await fs.copy(this.filePath, `${this.filePath}.corrupt-${Date.now()}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
this.flushSync();
|
|
32
|
+
}
|
|
33
|
+
// ─── Nodes ────────────────────────────────────────────────────────────────
|
|
34
|
+
addNode(node) {
|
|
35
|
+
const now = new Date().toISOString();
|
|
36
|
+
const existing = this.nodes.get(node.id);
|
|
37
|
+
const merged = existing
|
|
38
|
+
? {
|
|
39
|
+
...existing,
|
|
40
|
+
label: node.label,
|
|
41
|
+
description: node.description,
|
|
42
|
+
metadata: node.metadata ?? existing.metadata ?? {},
|
|
43
|
+
updatedAt: now,
|
|
44
|
+
}
|
|
45
|
+
: {
|
|
46
|
+
...node,
|
|
47
|
+
metadata: node.metadata ?? {},
|
|
48
|
+
createdAt: node.createdAt ?? now,
|
|
49
|
+
updatedAt: now,
|
|
50
|
+
};
|
|
51
|
+
this.nodes.set(node.id, merged);
|
|
52
|
+
this.flushSync();
|
|
53
|
+
}
|
|
54
|
+
getNode(id) {
|
|
55
|
+
return this.nodes.get(id) ?? null;
|
|
56
|
+
}
|
|
57
|
+
queryNodes(type, limit = 20) {
|
|
58
|
+
const all = type
|
|
59
|
+
? [...this.nodes.values()].filter((n) => n.type === type)
|
|
60
|
+
: [...this.nodes.values()];
|
|
61
|
+
return all.slice(0, limit);
|
|
62
|
+
}
|
|
63
|
+
searchNodes(query, limit = 10) {
|
|
64
|
+
const q = query.toLowerCase();
|
|
65
|
+
const out = [];
|
|
66
|
+
for (const node of this.nodes.values()) {
|
|
67
|
+
const haystack = `${node.label} ${node.description ?? ''}`.toLowerCase();
|
|
68
|
+
if (haystack.includes(q)) {
|
|
69
|
+
out.push({
|
|
70
|
+
node,
|
|
71
|
+
score: 1,
|
|
72
|
+
snippet: node.description?.slice(0, 150),
|
|
73
|
+
});
|
|
74
|
+
if (out.length >= limit)
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return out;
|
|
79
|
+
}
|
|
80
|
+
deleteNode(id) {
|
|
81
|
+
this.nodes.delete(id);
|
|
82
|
+
for (const [edgeId, e] of this.edges) {
|
|
83
|
+
if (e.sourceId === id || e.targetId === id)
|
|
84
|
+
this.edges.delete(edgeId);
|
|
85
|
+
}
|
|
86
|
+
this.flushSync();
|
|
87
|
+
}
|
|
88
|
+
// ─── Edges ────────────────────────────────────────────────────────────────
|
|
89
|
+
addEdge(edge) {
|
|
90
|
+
const existing = this.edges.get(edge.id);
|
|
91
|
+
const merged = existing
|
|
92
|
+
? { ...existing, type: edge.type, weight: edge.weight ?? existing.weight ?? 1, metadata: edge.metadata ?? existing.metadata ?? {} }
|
|
93
|
+
: { ...edge, weight: edge.weight ?? 1, metadata: edge.metadata ?? {} };
|
|
94
|
+
this.edges.set(edge.id, merged);
|
|
95
|
+
this.flushSync();
|
|
96
|
+
}
|
|
97
|
+
getEdges(nodeId, direction = 'both') {
|
|
98
|
+
return [...this.edges.values()].filter((e) => {
|
|
99
|
+
if (direction === 'out')
|
|
100
|
+
return e.sourceId === nodeId;
|
|
101
|
+
if (direction === 'in')
|
|
102
|
+
return e.targetId === nodeId;
|
|
103
|
+
return e.sourceId === nodeId || e.targetId === nodeId;
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
getNodeDependencies(nodeId, depth = 3) {
|
|
107
|
+
const visited = new Set();
|
|
108
|
+
const out = [];
|
|
109
|
+
const traverse = (id, d) => {
|
|
110
|
+
if (d === 0 || visited.has(id))
|
|
111
|
+
return;
|
|
112
|
+
visited.add(id);
|
|
113
|
+
for (const e of this.edges.values()) {
|
|
114
|
+
if (e.sourceId !== id || e.type !== 'depends_on')
|
|
115
|
+
continue;
|
|
116
|
+
const target = this.nodes.get(e.targetId);
|
|
117
|
+
if (target) {
|
|
118
|
+
out.push(target);
|
|
119
|
+
traverse(e.targetId, d - 1);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
traverse(nodeId, depth);
|
|
124
|
+
return out;
|
|
125
|
+
}
|
|
126
|
+
// ─── Utilities ────────────────────────────────────────────────────────────
|
|
127
|
+
getStatistics() {
|
|
128
|
+
const nodesByType = {};
|
|
129
|
+
const edgesByType = {};
|
|
130
|
+
for (const n of this.nodes.values()) {
|
|
131
|
+
nodesByType[n.type] = (nodesByType[n.type] ?? 0) + 1;
|
|
132
|
+
}
|
|
133
|
+
for (const e of this.edges.values()) {
|
|
134
|
+
edgesByType[e.type] = (edgesByType[e.type] ?? 0) + 1;
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
totalNodes: this.nodes.size,
|
|
138
|
+
totalEdges: this.edges.size,
|
|
139
|
+
nodesByType,
|
|
140
|
+
edgesByType,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
exportToJson() {
|
|
144
|
+
return { nodes: [...this.nodes.values()], edges: [...this.edges.values()] };
|
|
145
|
+
}
|
|
146
|
+
importFromJson(data) {
|
|
147
|
+
for (const n of data.nodes)
|
|
148
|
+
this.addNode(n);
|
|
149
|
+
for (const e of data.edges)
|
|
150
|
+
this.addEdge(e);
|
|
151
|
+
}
|
|
152
|
+
close() {
|
|
153
|
+
// Synchronous flush is performed on every mutation; no shutdown work.
|
|
154
|
+
}
|
|
155
|
+
flushSync() {
|
|
156
|
+
const data = {
|
|
157
|
+
nodes: [...this.nodes.values()],
|
|
158
|
+
edges: [...this.edges.values()],
|
|
159
|
+
};
|
|
160
|
+
try {
|
|
161
|
+
fs.writeJsonSync(this.filePath, data, { spaces: 2 });
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
// best-effort persistence
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=json-graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-graph.js","sourceRoot":"","sources":["../../src/graphrag/json-graph.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,UAAU,CAAC;AAgB1B,MAAM,OAAO,SAAS;IAIpB,YAA6B,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;QAHrC,UAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;QACrC,UAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;IAEG,CAAC;IAEjD,KAAK,CAAC,IAAI;QACR,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChD,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAc,CAAC;gBAC7D,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE;oBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC1D,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE;oBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC5D,CAAC;YAAC,MAAM,CAAC;gBACP,gDAAgD;gBAChD,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,QAAQ,YAAY,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,6EAA6E;IAE7E,OAAO,CAAC,IAAe;QACrB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,MAAM,GAAc,QAAQ;YAChC,CAAC,CAAC;gBACE,GAAG,QAAQ;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,IAAI,EAAE;gBAClD,SAAS,EAAE,GAAG;aACf;YACH,CAAC,CAAC;gBACE,GAAG,IAAI;gBACP,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;gBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,GAAG;gBAChC,SAAS,EAAE,GAAG;aACf,CAAC;QACN,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACpC,CAAC;IAED,UAAU,CAAC,IAAe,EAAE,KAAK,GAAG,EAAE;QACpC,MAAM,GAAG,GAAG,IAAI;YACd,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;YACzD,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7B,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,WAAW,CAAC,KAAa,EAAE,KAAK,GAAG,EAAE;QACnC,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAmB,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC;YACzE,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzB,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI;oBACJ,KAAK,EAAE,CAAC;oBACR,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;iBACzC,CAAC,CAAC;gBACH,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK;oBAAE,MAAM;YACjC,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,UAAU,CAAC,EAAU;QACnB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtB,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACrC,IAAI,CAAC,CAAC,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,KAAK,EAAE;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,6EAA6E;IAE7E,OAAO,CAAC,IAAe;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,MAAM,GAAc,QAAQ;YAChC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,IAAI,EAAE,EAAE;YACnI,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QACzE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,QAAQ,CAAC,MAAc,EAAE,YAAmC,MAAM;QAChE,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YAC3C,IAAI,SAAS,KAAK,KAAK;gBAAE,OAAO,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC;YACtD,IAAI,SAAS,KAAK,IAAI;gBAAE,OAAO,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC;YACrD,OAAO,CAAC,CAAC,QAAQ,KAAK,MAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,mBAAmB,CAAC,MAAc,EAAE,KAAK,GAAG,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,GAAG,GAAgB,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,CAAC,EAAU,EAAE,CAAS,EAAQ,EAAE;YAC/C,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,OAAO;YACvC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBACpC,IAAI,CAAC,CAAC,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY;oBAAE,SAAS;gBAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAC1C,IAAI,MAAM,EAAE,CAAC;oBACX,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACjB,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QACF,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACxB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,6EAA6E;IAE7E,aAAa;QACX,MAAM,WAAW,GAAG,EAA8B,CAAC;QACnD,MAAM,WAAW,GAAG,EAA8B,CAAC;QACnD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACpC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACvD,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACpC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACvD,CAAC;QACD,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;YAC3B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;YAC3B,WAAW;YACX,WAAW;SACZ,CAAC;IACJ,CAAC;IAED,YAAY;QACV,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;IAC9E,CAAC;IAED,cAAc,CAAC,IAAgD;QAC7D,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK;QACH,sEAAsE;IACxE,CAAC;IAEO,SAAS;QACf,MAAM,IAAI,GAAc;YACtB,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/B,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;SAChC,CAAC;QACF,IAAI,CAAC;YACH,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,0BAA0B;QAC5B,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Common interface implemented by every backend (SQLite, JSON, Neo4j…).
|
|
3
|
+
*
|
|
4
|
+
* Methods mirror the SQLite implementation so callers don't care which
|
|
5
|
+
* backend is in use. Backends should:
|
|
6
|
+
* - upsert by `id` on addNode / addEdge
|
|
7
|
+
* - persist incrementally (or on close, when that's safer)
|
|
8
|
+
* - never throw on unknown ids — return `null` / empty arrays
|
|
9
|
+
*/
|
|
10
|
+
import type { GraphNode, GraphEdge, NodeType, EdgeType, SearchResult, GraphStatistics } from './types.js';
|
|
11
|
+
export interface KnowledgeGraph {
|
|
12
|
+
init(): Promise<void>;
|
|
13
|
+
addNode(node: GraphNode): void;
|
|
14
|
+
getNode(id: string): GraphNode | null;
|
|
15
|
+
queryNodes(type?: NodeType, limit?: number): GraphNode[];
|
|
16
|
+
searchNodes(query: string, limit?: number): SearchResult[];
|
|
17
|
+
deleteNode(id: string): void;
|
|
18
|
+
addEdge(edge: GraphEdge): void;
|
|
19
|
+
getEdges(nodeId: string, direction?: 'out' | 'in' | 'both'): GraphEdge[];
|
|
20
|
+
getNodeDependencies(nodeId: string, depth?: number): GraphNode[];
|
|
21
|
+
getStatistics(): GraphStatistics;
|
|
22
|
+
exportToJson(): {
|
|
23
|
+
nodes: GraphNode[];
|
|
24
|
+
edges: GraphEdge[];
|
|
25
|
+
};
|
|
26
|
+
importFromJson(data: {
|
|
27
|
+
nodes: GraphNode[];
|
|
28
|
+
edges: GraphEdge[];
|
|
29
|
+
}): void;
|
|
30
|
+
close(): void;
|
|
31
|
+
}
|
|
32
|
+
export type { NodeType, EdgeType, GraphNode, GraphEdge, SearchResult, GraphStatistics };
|
|
33
|
+
//# sourceMappingURL=knowledge-graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-graph.d.ts","sourceRoot":"","sources":["../../src/graphrag/knowledge-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,cAAc;IAC7B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACtC,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CAAC;IACzD,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;IAC3D,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7B,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,EAAE,CAAC;IACzE,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CAAC;IAEjE,aAAa,IAAI,eAAe,CAAC;IAEjC,YAAY,IAAI;QAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAAC,KAAK,EAAE,SAAS,EAAE,CAAA;KAAE,CAAC;IAC3D,cAAc,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAAC,KAAK,EAAE,SAAS,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAEvE,KAAK,IAAI,IAAI,CAAC;CACf;AAED,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-graph.js","sourceRoot":"","sources":["../../src/graphrag/knowledge-graph.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,20 +2,27 @@
|
|
|
2
2
|
* @dewtech/dare-cli — pacote único do framework DARE.
|
|
3
3
|
*
|
|
4
4
|
* Inclui CLI (`dare`), servidor MCP (`dare-mcp-server`), engine GraphRAG e
|
|
5
|
-
* o DAG Task Runner. Instalar este pacote dá acesso a todas
|
|
6
|
-
* do método — não há subpacotes para gerenciar
|
|
5
|
+
* o DAG Task Runner (orquestrador). Instalar este pacote dá acesso a todas
|
|
6
|
+
* as funcionalidades do método — não há subpacotes para gerenciar.
|
|
7
|
+
*
|
|
8
|
+
* O CLI **não** chama nenhuma API de LLM diretamente: a execução de tasks
|
|
9
|
+
* acontece dentro da IDE em que você já está autenticado (Cursor, Antigravity
|
|
10
|
+
* ou Claude Code). O DAG runner é orquestrador puro — coordena estado,
|
|
11
|
+
* canvas e ingestão no GraphRAG.
|
|
7
12
|
*/
|
|
8
13
|
export { initCommand } from './commands/init.js';
|
|
9
14
|
export { designCommand } from './commands/design.js';
|
|
10
15
|
export { blueprintCommand } from './commands/blueprint.js';
|
|
11
16
|
export { executeCommand } from './commands/execute.js';
|
|
12
|
-
export {
|
|
13
|
-
export
|
|
17
|
+
export { graphCommand } from './commands/graph.js';
|
|
18
|
+
export { computeRanks, nextExecutableTasks, applyCascadingSkip, buildTaskPrompt, markRunning, markDone, markFailed, renderCanvas, DEFAULT_DAG_LIMITS, } from './dag-runner/run_dag.js';
|
|
19
|
+
export type { Dag, DagTask, DagLimits, DagModelMap, DagModels, RunnerName, Complexity, TaskStatus as DagTaskStatus, MarkOptions, } from './dag-runner/run_dag.js';
|
|
20
|
+
export { ingestTask, ingestDag, extractFilePaths } from './dag-runner/graph-ingest.js';
|
|
14
21
|
export { convertYamlToDag, convertDagToYaml } from './utils/dag-converter.js';
|
|
15
22
|
export { generateProjectStructure } from './utils/project-generator.js';
|
|
16
23
|
export type { ProjectConfig } from './utils/project-generator.js';
|
|
17
|
-
export { GraphRAG } from './graphrag/index.js';
|
|
18
|
-
export type { GraphNode, GraphEdge, NodeType, EdgeType, TaskNode, FileNode, SchemaNode, EndpointNode, ComponentNode, SearchResult, GraphStatistics, } from './graphrag/index.js';
|
|
24
|
+
export { GraphRAG, JsonGraph, createGraph, loadGraphConfig } from './graphrag/index.js';
|
|
25
|
+
export type { KnowledgeGraph, GraphConfig, GraphBackend, GraphNode, GraphEdge, NodeType, EdgeType, TaskNode, FileNode, SchemaNode, EndpointNode, ComponentNode, SearchResult, GraphStatistics, } from './graphrag/index.js';
|
|
19
26
|
export { createMcpServer } from './mcp-server/index.js';
|
|
20
27
|
export type { ContextQuery, ContextResult, TaskStatus } from './mcp-server/index.js';
|
|
21
28
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,GAAG,EACH,OAAO,EACP,SAAS,EACT,WAAW,EACX,SAAS,EACT,UAAU,EACV,UAAU,EACV,UAAU,IAAI,aAAa,EAC3B,WAAW,GACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAGlE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACxF,YAAY,EACV,cAAc,EACd,WAAW,EACX,YAAY,EACZ,SAAS,EACT,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,21 +2,28 @@
|
|
|
2
2
|
* @dewtech/dare-cli — pacote único do framework DARE.
|
|
3
3
|
*
|
|
4
4
|
* Inclui CLI (`dare`), servidor MCP (`dare-mcp-server`), engine GraphRAG e
|
|
5
|
-
* o DAG Task Runner. Instalar este pacote dá acesso a todas
|
|
6
|
-
* do método — não há subpacotes para gerenciar
|
|
5
|
+
* o DAG Task Runner (orquestrador). Instalar este pacote dá acesso a todas
|
|
6
|
+
* as funcionalidades do método — não há subpacotes para gerenciar.
|
|
7
|
+
*
|
|
8
|
+
* O CLI **não** chama nenhuma API de LLM diretamente: a execução de tasks
|
|
9
|
+
* acontece dentro da IDE em que você já está autenticado (Cursor, Antigravity
|
|
10
|
+
* ou Claude Code). O DAG runner é orquestrador puro — coordena estado,
|
|
11
|
+
* canvas e ingestão no GraphRAG.
|
|
7
12
|
*/
|
|
8
13
|
// Commands
|
|
9
14
|
export { initCommand } from './commands/init.js';
|
|
10
15
|
export { designCommand } from './commands/design.js';
|
|
11
16
|
export { blueprintCommand } from './commands/blueprint.js';
|
|
12
17
|
export { executeCommand } from './commands/execute.js';
|
|
13
|
-
|
|
14
|
-
|
|
18
|
+
export { graphCommand } from './commands/graph.js';
|
|
19
|
+
// DAG Runner (orchestration)
|
|
20
|
+
export { computeRanks, nextExecutableTasks, applyCascadingSkip, buildTaskPrompt, markRunning, markDone, markFailed, renderCanvas, DEFAULT_DAG_LIMITS, } from './dag-runner/run_dag.js';
|
|
21
|
+
export { ingestTask, ingestDag, extractFilePaths } from './dag-runner/graph-ingest.js';
|
|
15
22
|
export { convertYamlToDag, convertDagToYaml } from './utils/dag-converter.js';
|
|
16
23
|
// Project generation
|
|
17
24
|
export { generateProjectStructure } from './utils/project-generator.js';
|
|
18
25
|
// Knowledge graph engine
|
|
19
|
-
export { GraphRAG } from './graphrag/index.js';
|
|
26
|
+
export { GraphRAG, JsonGraph, createGraph, loadGraphConfig } from './graphrag/index.js';
|
|
20
27
|
// MCP server
|
|
21
28
|
export { createMcpServer } from './mcp-server/index.js';
|
|
22
29
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,WAAW;AACX,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,6BAA6B;AAC7B,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAYjC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE9E,qBAAqB;AACrB,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAGxE,yBAAyB;AACzB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAkBxF,aAAa;AACb,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|