sxng-cli 1.0.8 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -2
- package/dist/commands/graph-add.d.ts.map +1 -1
- package/dist/commands/graph-add.js +11 -3
- package/dist/commands/graph-add.js.map +1 -1
- package/dist/commands/graph-drill.d.ts +11 -0
- package/dist/commands/graph-drill.d.ts.map +1 -0
- package/dist/commands/graph-drill.js +26 -0
- package/dist/commands/graph-drill.js.map +1 -0
- package/dist/commands/graph-explore.d.ts +10 -0
- package/dist/commands/graph-explore.d.ts.map +1 -0
- package/dist/commands/graph-explore.js +32 -0
- package/dist/commands/graph-explore.js.map +1 -0
- package/dist/commands/graph-obfuscate.d.ts +17 -0
- package/dist/commands/graph-obfuscate.d.ts.map +1 -0
- package/dist/commands/graph-obfuscate.js +110 -0
- package/dist/commands/graph-obfuscate.js.map +1 -0
- package/dist/commands/graph-search.d.ts +11 -0
- package/dist/commands/graph-search.d.ts.map +1 -0
- package/dist/commands/graph-search.js +19 -0
- package/dist/commands/graph-search.js.map +1 -0
- package/dist/commands/graph-traverse.d.ts +10 -0
- package/dist/commands/graph-traverse.d.ts.map +1 -0
- package/dist/commands/graph-traverse.js +39 -0
- package/dist/commands/graph-traverse.js.map +1 -0
- package/dist/commands/query-graph.d.ts +2 -0
- package/dist/commands/query-graph.d.ts.map +1 -1
- package/dist/commands/query-graph.js +68 -2
- package/dist/commands/query-graph.js.map +1 -1
- package/dist/commands/session.js +1 -1
- package/dist/commands/session.js.map +1 -1
- package/dist/deep/co-occurrence.d.ts +50 -0
- package/dist/deep/co-occurrence.d.ts.map +1 -0
- package/dist/deep/co-occurrence.js +95 -0
- package/dist/deep/co-occurrence.js.map +1 -0
- package/dist/deep/degree-utils.d.ts +39 -0
- package/dist/deep/degree-utils.d.ts.map +1 -0
- package/dist/deep/degree-utils.js +42 -0
- package/dist/deep/degree-utils.js.map +1 -0
- package/dist/deep/extractor.d.ts +7 -2
- package/dist/deep/extractor.d.ts.map +1 -1
- package/dist/deep/extractor.js +143 -78
- package/dist/deep/extractor.js.map +1 -1
- package/dist/deep/graph-explore.d.ts +115 -0
- package/dist/deep/graph-explore.d.ts.map +1 -0
- package/dist/deep/graph-explore.js +586 -0
- package/dist/deep/graph-explore.js.map +1 -0
- package/dist/deep/graph-obfuscate.d.ts +51 -0
- package/dist/deep/graph-obfuscate.d.ts.map +1 -0
- package/dist/deep/graph-obfuscate.js +226 -0
- package/dist/deep/graph-obfuscate.js.map +1 -0
- package/dist/deep/graph-preprocess.d.ts +41 -0
- package/dist/deep/graph-preprocess.d.ts.map +1 -0
- package/dist/deep/graph-preprocess.js +32 -0
- package/dist/deep/graph-preprocess.js.map +1 -0
- package/dist/deep/graph-sampling.d.ts +51 -0
- package/dist/deep/graph-sampling.d.ts.map +1 -0
- package/dist/deep/graph-sampling.js +409 -0
- package/dist/deep/graph-sampling.js.map +1 -0
- package/dist/deep/graph.d.ts +24 -1
- package/dist/deep/graph.d.ts.map +1 -1
- package/dist/deep/graph.js +42 -1
- package/dist/deep/graph.js.map +1 -1
- package/dist/deep/iteration-data.d.ts +38 -0
- package/dist/deep/iteration-data.d.ts.map +1 -0
- package/dist/deep/iteration-data.js +48 -0
- package/dist/deep/iteration-data.js.map +1 -0
- package/dist/deep/path-extraction.d.ts +53 -0
- package/dist/deep/path-extraction.d.ts.map +1 -0
- package/dist/deep/path-extraction.js +229 -0
- package/dist/deep/path-extraction.js.map +1 -0
- package/dist/deep/quality-assess.d.ts +45 -0
- package/dist/deep/quality-assess.d.ts.map +1 -0
- package/dist/deep/quality-assess.js +125 -0
- package/dist/deep/quality-assess.js.map +1 -0
- package/dist/deep/query-redundancy.d.ts +39 -0
- package/dist/deep/query-redundancy.d.ts.map +1 -0
- package/dist/deep/query-redundancy.js +109 -0
- package/dist/deep/query-redundancy.js.map +1 -0
- package/dist/deep/query-suggest.d.ts +35 -0
- package/dist/deep/query-suggest.d.ts.map +1 -0
- package/dist/deep/query-suggest.js +98 -0
- package/dist/deep/query-suggest.js.map +1 -0
- package/dist/deep/recovery-analysis.d.ts +61 -0
- package/dist/deep/recovery-analysis.d.ts.map +1 -0
- package/dist/deep/recovery-analysis.js +188 -0
- package/dist/deep/recovery-analysis.js.map +1 -0
- package/dist/deep/search-strategy.d.ts +37 -0
- package/dist/deep/search-strategy.d.ts.map +1 -0
- package/dist/deep/search-strategy.js +99 -0
- package/dist/deep/search-strategy.js.map +1 -0
- package/dist/deep/session.d.ts +3 -1
- package/dist/deep/session.d.ts.map +1 -1
- package/dist/deep/session.js +4 -4
- package/dist/deep/session.js.map +1 -1
- package/dist/deep/simhash.d.ts +5 -0
- package/dist/deep/simhash.d.ts.map +1 -1
- package/dist/deep/simhash.js +16 -0
- package/dist/deep/simhash.js.map +1 -1
- package/dist/deep/tfidf.d.ts +38 -0
- package/dist/deep/tfidf.d.ts.map +1 -0
- package/dist/deep/tfidf.js +103 -0
- package/dist/deep/tfidf.js.map +1 -0
- package/dist/runCli.d.ts +3 -1
- package/dist/runCli.d.ts.map +1 -1
- package/dist/runCli.js +762 -307
- package/dist/runCli.js.map +1 -1
- package/package.json +17 -4
package/README.md
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# 🔍 SXNG CLI
|
|
2
2
|
|
|
3
|
+
> 📖 **完整文档请访问 GitHub**: https://github.com/hkwuks/sxng-cli#readme
|
|
4
|
+
>
|
|
5
|
+
> 本 README 为快速参考,详细的安装指南(包括 SearXNG 自托管配置、Docker 部署、settings.yml 配置等)请参阅 GitHub 文档。
|
|
6
|
+
|
|
3
7
|
<p align="center">
|
|
4
8
|
<b>A powerful command-line interface for <a href="https://github.com/searxng/searxng">SearXNG</a></b><br>
|
|
5
9
|
Privacy-respecting web search from your terminal
|
|
@@ -34,6 +38,10 @@
|
|
|
34
38
|
|
|
35
39
|
## 📦 Installation
|
|
36
40
|
|
|
41
|
+
> ⚠️ **完整安装指南**: [GitHub - Installation](https://github.com/hkwuks/sxng-cli#installation)
|
|
42
|
+
>
|
|
43
|
+
> 包含 SearXNG 自托管配置、Docker 部署、30+ 搜索引擎 settings.yml 配置等。
|
|
44
|
+
|
|
37
45
|
```bash
|
|
38
46
|
npm install -g sxng-cli
|
|
39
47
|
```
|
|
@@ -204,9 +212,9 @@ sxng --session <session-name> --queries "tokio vs async-std,benchmark 2024"
|
|
|
204
212
|
| `sxng session-delete --older <hours>` | Delete old sessions |
|
|
205
213
|
|
|
206
214
|
**Session Path Resolution:**
|
|
207
|
-
- Pure name (e.g., `my-session`) →
|
|
215
|
+
- Pure name (e.g., `my-session`) → `~/sxng-cli/sessions/my-session`
|
|
208
216
|
- Full path (e.g., `/custom/path/session`) → used as-is
|
|
209
|
-
- `new` → auto-generate unique name under
|
|
217
|
+
- `new` → auto-generate unique name under `~/sxng-cli/sessions/`
|
|
210
218
|
|
|
211
219
|
### Knowledge Graph
|
|
212
220
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-add.d.ts","sourceRoot":"","sources":["../../src/commands/graph-add.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA2BH,MAAM,WAAW,eAAe;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CAChB;
|
|
1
|
+
{"version":3,"file":"graph-add.d.ts","sourceRoot":"","sources":["../../src/commands/graph-add.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA2BH,MAAM,WAAW,eAAe;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CAChB;AA0BD,wBAAsB,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CA4J3E"}
|
|
@@ -12,12 +12,12 @@ import { deserializeGraph, serializeGraph, graphStats, entityId, resultId } from
|
|
|
12
12
|
import { DirectedGraph } from 'graphology';
|
|
13
13
|
import { createSuccessEnvelope, createErrorEnvelope } from '../protocol.js';
|
|
14
14
|
/** Resolve graph file path — if directory (session), use graph.json inside it.
|
|
15
|
-
* Pure name (no separators) is resolved to
|
|
15
|
+
* Pure name (no separators) is resolved to ~/sxng-cli/sessions/<name>
|
|
16
16
|
*/
|
|
17
17
|
function resolveGraphFile(path) {
|
|
18
18
|
// Pure name without path separators: resolve to default sessions dir
|
|
19
19
|
if (!path.includes('/') && !path.includes('\\')) {
|
|
20
|
-
path = join(homedir(), '
|
|
20
|
+
path = join(homedir(), 'sxng-cli', 'sessions', path);
|
|
21
21
|
}
|
|
22
22
|
try {
|
|
23
23
|
if (statSync(path).isDirectory()) {
|
|
@@ -80,17 +80,25 @@ export async function runGraphAdd(options) {
|
|
|
80
80
|
label: entity.label,
|
|
81
81
|
entityType: entity.entityType,
|
|
82
82
|
score: entity.score,
|
|
83
|
+
obfuscatedLabel: entity.obfuscatedLabel,
|
|
84
|
+
sourceRounds: entity.sourceRounds,
|
|
85
|
+
frequency: entity.frequency,
|
|
86
|
+
reasoningPaths: entity.reasoningPaths,
|
|
83
87
|
});
|
|
84
88
|
entitiesAdded++;
|
|
85
89
|
}
|
|
86
90
|
else {
|
|
87
|
-
// Update existing entity
|
|
91
|
+
// Update existing entity — merge new fields
|
|
88
92
|
const existing = graph.getNodeAttributes(id);
|
|
89
93
|
graph.mergeNode(id, {
|
|
90
94
|
...existing,
|
|
91
95
|
label: entity.label,
|
|
92
96
|
entityType: entity.entityType ?? existing.entityType,
|
|
93
97
|
score: entity.score ?? existing.score,
|
|
98
|
+
obfuscatedLabel: entity.obfuscatedLabel ?? existing.obfuscatedLabel,
|
|
99
|
+
sourceRounds: entity.sourceRounds ?? existing.sourceRounds,
|
|
100
|
+
frequency: entity.frequency ?? existing.frequency,
|
|
101
|
+
reasoningPaths: entity.reasoningPaths ?? existing.reasoningPaths,
|
|
94
102
|
});
|
|
95
103
|
}
|
|
96
104
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-add.js","sourceRoot":"","sources":["../../src/commands/graph-add.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,UAAU,EAAkC,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACpI,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE5E;;GAEG;AACH,SAAS,gBAAgB,CAAC,IAAY;IAClC,qEAAqE;IACrE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"graph-add.js","sourceRoot":"","sources":["../../src/commands/graph-add.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* graph-drill subcommand — Follow specific relations from an entity
|
|
3
|
+
*/
|
|
4
|
+
export interface GraphDrillOptions {
|
|
5
|
+
session: string;
|
|
6
|
+
seed: string;
|
|
7
|
+
relations: string[];
|
|
8
|
+
format?: 'json' | 'md';
|
|
9
|
+
}
|
|
10
|
+
export declare function runGraphDrill(options: GraphDrillOptions): Promise<number>;
|
|
11
|
+
//# sourceMappingURL=graph-drill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-drill.d.ts","sourceRoot":"","sources":["../../src/commands/graph-drill.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmB/E"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* graph-drill subcommand — Follow specific relations from an entity
|
|
3
|
+
*/
|
|
4
|
+
import { resolveSessionPath, loadSessionGraph } from '../deep/session.js';
|
|
5
|
+
import { createSuccessEnvelope, createErrorEnvelope } from '../protocol.js';
|
|
6
|
+
import { drillByRelations, formatDrillAsMarkdown } from '../deep/graph-explore.js';
|
|
7
|
+
export async function runGraphDrill(options) {
|
|
8
|
+
const sessionDir = resolveSessionPath(options.session);
|
|
9
|
+
const graph = loadSessionGraph(sessionDir);
|
|
10
|
+
const result = drillByRelations(graph, options.seed, options.relations);
|
|
11
|
+
if ('error' in result) {
|
|
12
|
+
const envelope = createErrorEnvelope('ENTITY_NOT_FOUND', result.error, {
|
|
13
|
+
details: { suggestions: result.suggestions.map(s => `${s.label} (distance: ${s.distance})`) },
|
|
14
|
+
});
|
|
15
|
+
console.log(JSON.stringify(envelope, null, 2));
|
|
16
|
+
return 1;
|
|
17
|
+
}
|
|
18
|
+
if (options.format === 'md') {
|
|
19
|
+
console.log(formatDrillAsMarkdown(result));
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
console.log(JSON.stringify(createSuccessEnvelope(result), null, 2));
|
|
23
|
+
}
|
|
24
|
+
return 0;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=graph-drill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-drill.js","sourceRoot":"","sources":["../../src/commands/graph-drill.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AASnF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAA0B;IAC1D,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAExE,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,kBAAkB,EAAE,MAAM,CAAC,KAAK,EAAE;YACnE,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE;SAChG,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,CAAC;IACb,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,CAAC,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* graph-explore subcommand — List all relations around a seed entity
|
|
3
|
+
*/
|
|
4
|
+
export interface GraphExploreOptions {
|
|
5
|
+
session: string;
|
|
6
|
+
seed: string;
|
|
7
|
+
format?: 'json' | 'md';
|
|
8
|
+
}
|
|
9
|
+
export declare function runGraphExplore(options: GraphExploreOptions): Promise<number>;
|
|
10
|
+
//# sourceMappingURL=graph-explore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-explore.d.ts","sourceRoot":"","sources":["../../src/commands/graph-explore.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CA0BnF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* graph-explore subcommand — List all relations around a seed entity
|
|
3
|
+
*/
|
|
4
|
+
import { resolveSessionPath, loadSessionGraph } from '../deep/session.js';
|
|
5
|
+
import { createSuccessEnvelope, createErrorEnvelope } from '../protocol.js';
|
|
6
|
+
import { exploreSeedEntity, detectDeadEnd, formatExploreAsMarkdown, formatDeadEndAsMarkdown, } from '../deep/graph-explore.js';
|
|
7
|
+
export async function runGraphExplore(options) {
|
|
8
|
+
const sessionDir = resolveSessionPath(options.session);
|
|
9
|
+
const graph = loadSessionGraph(sessionDir);
|
|
10
|
+
const result = exploreSeedEntity(graph, options.seed);
|
|
11
|
+
if ('error' in result) {
|
|
12
|
+
const envelope = createErrorEnvelope('ENTITY_NOT_FOUND', result.error, {
|
|
13
|
+
details: { suggestions: result.suggestions.map(s => `${s.label} (distance: ${s.distance})`) },
|
|
14
|
+
});
|
|
15
|
+
console.log(JSON.stringify(envelope, null, 2));
|
|
16
|
+
return 1;
|
|
17
|
+
}
|
|
18
|
+
// Check for dead end
|
|
19
|
+
const deadEnd = detectDeadEnd(graph, result.entity.id);
|
|
20
|
+
if (options.format === 'md') {
|
|
21
|
+
console.log(formatExploreAsMarkdown(result));
|
|
22
|
+
if (deadEnd) {
|
|
23
|
+
console.log(formatDeadEndAsMarkdown(deadEnd));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
const output = deadEnd ? { ...result, deadEnd } : result;
|
|
28
|
+
console.log(JSON.stringify(createSuccessEnvelope(output), null, 2));
|
|
29
|
+
}
|
|
30
|
+
return 0;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=graph-explore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-explore.js","sourceRoot":"","sources":["../../src/commands/graph-explore.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EACH,iBAAiB,EAAE,aAAa,EAChC,uBAAuB,EAAE,uBAAuB,GACnD,MAAM,0BAA0B,CAAC;AAQlC,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAA4B;IAC9D,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtD,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,kBAAkB,EAAE,MAAM,CAAC,KAAK,EAAE;YACnE,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE;SAChG,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,CAAC;IACb,CAAC;IAED,qBAAqB;IACrB,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAEvD,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7C,IAAI,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC;QAClD,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,CAAC,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* graph-obfuscate subcommand - List obfuscation candidates or apply fallback rules
|
|
3
|
+
*
|
|
4
|
+
* Primary flow: Agent uses --list to get candidates, then LLM generates
|
|
5
|
+
* obfuscated labels, and writes them back via graph-add.
|
|
6
|
+
*
|
|
7
|
+
* Fallback: --fallback-rules applies simple rule-based obfuscation (experimental).
|
|
8
|
+
*/
|
|
9
|
+
export interface GraphObfuscateOptions {
|
|
10
|
+
graphFile: string;
|
|
11
|
+
list: boolean;
|
|
12
|
+
fallbackRules: boolean;
|
|
13
|
+
format: 'json' | 'md';
|
|
14
|
+
skipEntityTypes?: string[];
|
|
15
|
+
}
|
|
16
|
+
export declare function runGraphObfuscateCommand(options: GraphObfuscateOptions): Promise<number>;
|
|
17
|
+
//# sourceMappingURL=graph-obfuscate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-obfuscate.d.ts","sourceRoot":"","sources":["../../src/commands/graph-obfuscate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAwFH,MAAM,WAAW,qBAAqB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkC9F"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* graph-obfuscate subcommand - List obfuscation candidates or apply fallback rules
|
|
3
|
+
*
|
|
4
|
+
* Primary flow: Agent uses --list to get candidates, then LLM generates
|
|
5
|
+
* obfuscated labels, and writes them back via graph-add.
|
|
6
|
+
*
|
|
7
|
+
* Fallback: --fallback-rules applies simple rule-based obfuscation (experimental).
|
|
8
|
+
*/
|
|
9
|
+
import { readFileSync, writeFileSync, existsSync, statSync } from 'fs';
|
|
10
|
+
import { join } from 'path';
|
|
11
|
+
import { homedir } from 'os';
|
|
12
|
+
import { deserializeGraph, serializeGraph, graphStats } from '../deep/graph.js';
|
|
13
|
+
import { runGraphObfuscate } from '../deep/graph-obfuscate.js';
|
|
14
|
+
import { createSuccessEnvelope, createErrorEnvelope } from '../protocol.js';
|
|
15
|
+
function resolveGraphFile(path) {
|
|
16
|
+
if (!path.includes('/') && !path.includes('\\')) {
|
|
17
|
+
path = join(homedir(), 'sxng-cli', 'sessions', path);
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
if (statSync(path).isDirectory()) {
|
|
21
|
+
return join(path, 'graph.json');
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// Not a file/dir, return as-is
|
|
26
|
+
}
|
|
27
|
+
return path;
|
|
28
|
+
}
|
|
29
|
+
function loadGraph(graphFile) {
|
|
30
|
+
if (!existsSync(graphFile)) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const raw = readFileSync(graphFile, 'utf-8');
|
|
35
|
+
const parsed = JSON.parse(raw);
|
|
36
|
+
const graphData = parsed.status === 'ok' && parsed.data?.graph
|
|
37
|
+
? parsed.data.graph
|
|
38
|
+
: (parsed.nodes && parsed.edges ? parsed : null);
|
|
39
|
+
return graphData ? deserializeGraph(graphData) : null;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function saveGraph(graphFile, graph) {
|
|
46
|
+
const serialized = serializeGraph(graph);
|
|
47
|
+
const stats = graphStats(graph);
|
|
48
|
+
writeFileSync(graphFile, JSON.stringify({ status: 'ok', data: { graph: serialized, stats } }, null, 2), 'utf-8');
|
|
49
|
+
}
|
|
50
|
+
function formatAsMarkdown(result) {
|
|
51
|
+
const lines = [];
|
|
52
|
+
lines.push('## Entity Obfuscation');
|
|
53
|
+
lines.push('');
|
|
54
|
+
lines.push(`**Mode:** ${result.mode}`);
|
|
55
|
+
lines.push(`**Total entities:** ${result.stats.totalEntities}`);
|
|
56
|
+
lines.push(`**Already obfuscated:** ${result.stats.alreadyObfuscated}`);
|
|
57
|
+
lines.push(`**Need obfuscation:** ${result.stats.needObfuscation}`);
|
|
58
|
+
lines.push('');
|
|
59
|
+
if (result.mode === 'list') {
|
|
60
|
+
lines.push('### Candidates');
|
|
61
|
+
lines.push('');
|
|
62
|
+
for (const c of result.candidates) {
|
|
63
|
+
const status = c.hasObfuscatedLabel
|
|
64
|
+
? `✓ ${c.obfuscatedLabel}`
|
|
65
|
+
: '✗ needs obfuscation';
|
|
66
|
+
lines.push(`- **${c.label}** (${c.entityType ?? 'unknown'}): ${status}`);
|
|
67
|
+
}
|
|
68
|
+
lines.push('');
|
|
69
|
+
}
|
|
70
|
+
if (result.mode === 'fallback_rules' && result.fallbackResults) {
|
|
71
|
+
lines.push('### Fallback Rules Applied ⚠️ *experimental*');
|
|
72
|
+
lines.push('');
|
|
73
|
+
lines.push('| Original | Obfuscated | Rule |');
|
|
74
|
+
lines.push('|----------|------------|------|');
|
|
75
|
+
for (const r of result.fallbackResults) {
|
|
76
|
+
lines.push(`| ${r.original} | ${r.obfuscated} | ${r.rule} |`);
|
|
77
|
+
}
|
|
78
|
+
lines.push('');
|
|
79
|
+
lines.push('*Fallback rules are experimental — they preserve too many identifying cues for true obfuscation.*');
|
|
80
|
+
lines.push('');
|
|
81
|
+
}
|
|
82
|
+
return lines.join('\n');
|
|
83
|
+
}
|
|
84
|
+
export async function runGraphObfuscateCommand(options) {
|
|
85
|
+
const graphFile = resolveGraphFile(options.graphFile);
|
|
86
|
+
const graph = loadGraph(graphFile);
|
|
87
|
+
if (!graph) {
|
|
88
|
+
const envelope = createErrorEnvelope('GRAPH_LOAD_FAILED', `Failed to load graph from: ${graphFile}`, { hint: 'Ensure the file exists and contains a valid graphology graph' });
|
|
89
|
+
console.log(JSON.stringify(envelope, null, 2));
|
|
90
|
+
return 1;
|
|
91
|
+
}
|
|
92
|
+
const mode = options.fallbackRules ? 'fallback_rules' : 'list';
|
|
93
|
+
const config = {
|
|
94
|
+
mode,
|
|
95
|
+
skipEntityTypes: options.skipEntityTypes,
|
|
96
|
+
};
|
|
97
|
+
const result = runGraphObfuscate(graph, config);
|
|
98
|
+
// Save graph if fallback rules were applied (they mutate the graph)
|
|
99
|
+
if (mode === 'fallback_rules' && result.fallbackResults && result.fallbackResults.length > 0) {
|
|
100
|
+
saveGraph(graphFile, graph);
|
|
101
|
+
}
|
|
102
|
+
if (options.format === 'md') {
|
|
103
|
+
console.log(formatAsMarkdown(result));
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
console.log(JSON.stringify(createSuccessEnvelope(result), null, 2));
|
|
107
|
+
}
|
|
108
|
+
return 0;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=graph-obfuscate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-obfuscate.js","sourceRoot":"","sources":["../../src/commands/graph-obfuscate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,UAAU,EAAkC,MAAM,kBAAkB,CAAC;AAChH,OAAO,EAAE,iBAAiB,EAAwC,MAAM,4BAA4B,CAAC;AAErG,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE5E,SAAS,gBAAgB,CAAC,IAAY;IAClC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,CAAC;QACD,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACpC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,+BAA+B;IACnC,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,SAAS,CAAC,SAAiB;IAChC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK;YAC1D,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK;YACnB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,SAAiB,EAAE,KAAoD;IACtF,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAChC,aAAa,CACT,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAC7E,OAAO,CACV,CAAC;AACN,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAyB;IAC/C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACpC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;IAChE,KAAK,CAAC,IAAI,CAAC,2BAA2B,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxE,KAAK,CAAC,IAAI,CAAC,yBAAyB,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC;IACpE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,CAAC,CAAC,kBAAkB;gBAC/B,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,EAAE;gBAC1B,CAAC,CAAC,qBAAqB,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,UAAU,IAAI,SAAS,MAAM,MAAM,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,gBAAgB,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAC/C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,UAAU,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;QAClE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,mGAAmG,CAAC,CAAC;QAChH,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAUD,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,OAA8B;IACzE,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEtD,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IACnC,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,MAAM,QAAQ,GAAG,mBAAmB,CAChC,mBAAmB,EACnB,8BAA8B,SAAS,EAAE,EACzC,EAAE,IAAI,EAAE,8DAA8D,EAAE,CAC3E,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,CAAC;IACb,CAAC;IAED,MAAM,IAAI,GAA8B,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC;IAC1F,MAAM,MAAM,GAAsB;QAC9B,IAAI;QACJ,eAAe,EAAE,OAAO,CAAC,eAAe;KAC3C,CAAC;IAEF,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAEhD,oEAAoE;IACpE,IAAI,IAAI,KAAK,gBAAgB,IAAI,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3F,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,CAAC,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* graph-search subcommand — Keyword search across entity labels
|
|
3
|
+
*/
|
|
4
|
+
export interface GraphSearchOptions {
|
|
5
|
+
session: string;
|
|
6
|
+
keyword: string;
|
|
7
|
+
limit: number;
|
|
8
|
+
format?: 'json' | 'md';
|
|
9
|
+
}
|
|
10
|
+
export declare function runGraphSearch(options: GraphSearchOptions): Promise<number>;
|
|
11
|
+
//# sourceMappingURL=graph-search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-search.d.ts","sourceRoot":"","sources":["../../src/commands/graph-search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAWjF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* graph-search subcommand — Keyword search across entity labels
|
|
3
|
+
*/
|
|
4
|
+
import { resolveSessionPath, loadSessionGraph } from '../deep/session.js';
|
|
5
|
+
import { createSuccessEnvelope } from '../protocol.js';
|
|
6
|
+
import { searchEntities, formatSearchAsMarkdown } from '../deep/graph-explore.js';
|
|
7
|
+
export async function runGraphSearch(options) {
|
|
8
|
+
const sessionDir = resolveSessionPath(options.session);
|
|
9
|
+
const graph = loadSessionGraph(sessionDir);
|
|
10
|
+
const results = searchEntities(graph, options.keyword, options.limit);
|
|
11
|
+
if (options.format === 'md') {
|
|
12
|
+
console.log(formatSearchAsMarkdown(results, options.keyword));
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
console.log(JSON.stringify(createSuccessEnvelope({ keyword: options.keyword, results }), null, 2));
|
|
16
|
+
}
|
|
17
|
+
return 0;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=graph-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-search.js","sourceRoot":"","sources":["../../src/commands/graph-search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AASlF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA2B;IAC5D,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAEtE,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACvG,CAAC;IACD,OAAO,CAAC,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* graph-traverse subcommand — Traverse reasoning path by path node ID
|
|
3
|
+
*/
|
|
4
|
+
export interface GraphTraverseOptions {
|
|
5
|
+
session: string;
|
|
6
|
+
pathId: string;
|
|
7
|
+
format?: 'json' | 'md';
|
|
8
|
+
}
|
|
9
|
+
export declare function runGraphTraverse(options: GraphTraverseOptions): Promise<number>;
|
|
10
|
+
//# sourceMappingURL=graph-traverse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-traverse.d.ts","sourceRoot":"","sources":["../../src/commands/graph-traverse.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,WAAW,oBAAoB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAiCrF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* graph-traverse subcommand — Traverse reasoning path by path node ID
|
|
3
|
+
*/
|
|
4
|
+
import { resolveSessionPath, loadSessionGraph } from '../deep/session.js';
|
|
5
|
+
import { createSuccessEnvelope, createErrorEnvelope } from '../protocol.js';
|
|
6
|
+
import { traversePath, formatTraverseAsMarkdown } from '../deep/graph-explore.js';
|
|
7
|
+
export async function runGraphTraverse(options) {
|
|
8
|
+
const sessionDir = resolveSessionPath(options.session);
|
|
9
|
+
const graph = loadSessionGraph(sessionDir);
|
|
10
|
+
// Check if graph has any path nodes
|
|
11
|
+
let pathCount = 0;
|
|
12
|
+
graph.forEachNode((_node, attrs) => {
|
|
13
|
+
if (attrs.type === 'path')
|
|
14
|
+
pathCount++;
|
|
15
|
+
});
|
|
16
|
+
if (pathCount === 0) {
|
|
17
|
+
const envelope = createErrorEnvelope('NO_PATHS', '当前图谱尚无推理路径。请先通过 graph-preprocess 和 graph-add 构建语义层。', {
|
|
18
|
+
hint: 'Run: sxng graph-preprocess <session> then sxng graph-add <session> --data \'...\'',
|
|
19
|
+
});
|
|
20
|
+
console.log(JSON.stringify(envelope, null, 2));
|
|
21
|
+
return 1;
|
|
22
|
+
}
|
|
23
|
+
const result = traversePath(graph, options.pathId);
|
|
24
|
+
if ('error' in result) {
|
|
25
|
+
const envelope = createErrorEnvelope('PATH_NOT_FOUND', result.error, {
|
|
26
|
+
details: { availablePaths: result.availablePaths },
|
|
27
|
+
});
|
|
28
|
+
console.log(JSON.stringify(envelope, null, 2));
|
|
29
|
+
return 1;
|
|
30
|
+
}
|
|
31
|
+
if (options.format === 'md') {
|
|
32
|
+
console.log(formatTraverseAsMarkdown(result));
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
console.log(JSON.stringify(createSuccessEnvelope(result), null, 2));
|
|
36
|
+
}
|
|
37
|
+
return 0;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=graph-traverse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-traverse.js","sourceRoot":"","sources":["../../src/commands/graph-traverse.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAQlF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAA6B;IAChE,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAE3C,oCAAoC;IACpC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,CAAC,WAAW,CAAC,CAAC,KAAa,EAAE,KAAqB,EAAE,EAAE;QACvD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,SAAS,EAAE,CAAC;IAC3C,CAAC,CAAC,CAAC;IACH,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QAClB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,UAAU,EAAE,qDAAqD,EAAE;YACpG,IAAI,EAAE,mFAAmF;SAC5F,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,CAAC;IACb,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnD,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,gBAAgB,EAAE,MAAM,CAAC,KAAK,EAAE;YACjE,OAAO,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE;SACrD,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,CAAC;IACb,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,CAAC,CAAC;AACb,CAAC"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Query-graph subcommand - BFS subgraph extraction from knowledge graph
|
|
3
3
|
*/
|
|
4
|
+
import { SamplingStrategy } from '../deep/graph-sampling.js';
|
|
4
5
|
export interface QueryGraphOptions {
|
|
5
6
|
graphFile: string;
|
|
6
7
|
seeds: string[];
|
|
7
8
|
depth: number;
|
|
8
9
|
format?: 'json' | 'md';
|
|
10
|
+
strategy?: SamplingStrategy;
|
|
9
11
|
}
|
|
10
12
|
export declare function runQueryGraph(options: QueryGraphOptions): Promise<number>;
|
|
11
13
|
//# sourceMappingURL=query-graph.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-graph.d.ts","sourceRoot":"","sources":["../../src/commands/query-graph.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"query-graph.d.ts","sourceRoot":"","sources":["../../src/commands/query-graph.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAe,gBAAgB,EAAkB,MAAM,2BAA2B,CAAC;AAqC1F,MAAM,WAAW,iBAAiB;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CA+M/E"}
|
|
@@ -6,13 +6,14 @@ import { join } from 'path';
|
|
|
6
6
|
import { homedir } from 'os';
|
|
7
7
|
import { deserializeGraph, bfsSubgraph, serializeGraph, graphStats } from '../deep/graph.js';
|
|
8
8
|
import { createSuccessEnvelope, createErrorEnvelope } from '../protocol.js';
|
|
9
|
+
import { sampleGraph } from '../deep/graph-sampling.js';
|
|
9
10
|
/** Resolve graph file path — if directory (session), use graph.json inside it.
|
|
10
|
-
* Pure name (no separators) is resolved to
|
|
11
|
+
* Pure name (no separators) is resolved to ~/sxng-cli/sessions/<name>
|
|
11
12
|
*/
|
|
12
13
|
function resolveGraphFile(path) {
|
|
13
14
|
// Pure name without path separators: resolve to default sessions dir
|
|
14
15
|
if (!path.includes('/') && !path.includes('\\')) {
|
|
15
|
-
path = join(homedir(), '
|
|
16
|
+
path = join(homedir(), 'sxng-cli', 'sessions', path);
|
|
16
17
|
}
|
|
17
18
|
try {
|
|
18
19
|
if (statSync(path).isDirectory()) {
|
|
@@ -100,6 +101,71 @@ export async function runQueryGraph(options) {
|
|
|
100
101
|
console.log(JSON.stringify(envelope, null, 2));
|
|
101
102
|
return 1;
|
|
102
103
|
}
|
|
104
|
+
// If --strategy is specified, use sampling instead of BFS
|
|
105
|
+
if (options.strategy) {
|
|
106
|
+
// Filter seeds to entity nodes only for sampling
|
|
107
|
+
const entitySeeds = resolvedSeeds.filter(id => graph.getNodeAttributes(id).type === 'entity');
|
|
108
|
+
if (entitySeeds.length === 0) {
|
|
109
|
+
const envelope = createErrorEnvelope('NO_ENTITY_SEEDS', 'Sampling strategies require entity seed nodes (e:xxx)', { hint: 'Use --seeds with entity names like "tokio" or IDs like "e:tokio"' });
|
|
110
|
+
console.log(JSON.stringify(envelope, null, 2));
|
|
111
|
+
return 1;
|
|
112
|
+
}
|
|
113
|
+
const samplingResult = sampleGraph(graph, {
|
|
114
|
+
strategy: options.strategy,
|
|
115
|
+
seedEntities: entitySeeds,
|
|
116
|
+
maxHops: options.depth,
|
|
117
|
+
});
|
|
118
|
+
if (options.format === 'md') {
|
|
119
|
+
const lines = [];
|
|
120
|
+
lines.push(`Sampling: ${samplingResult.strategy} (seeds: ${entitySeeds.join(', ')}, maxHops: ${options.depth})`);
|
|
121
|
+
lines.push(`Entities: ${samplingResult.entities.length}, Edges: ${samplingResult.edges.length}, Hops: ${samplingResult.hopsCovered}`);
|
|
122
|
+
lines.push('');
|
|
123
|
+
if (samplingResult.entities.length > 0) {
|
|
124
|
+
lines.push('Entities:');
|
|
125
|
+
for (const e of samplingResult.entities) {
|
|
126
|
+
const parts = [e.label];
|
|
127
|
+
if (e.entityType)
|
|
128
|
+
parts.push(`type=${e.entityType}`);
|
|
129
|
+
parts.push(`degree=${e.degree}`);
|
|
130
|
+
if (e.score)
|
|
131
|
+
parts.push(`score=${e.score.toFixed(2)}`);
|
|
132
|
+
lines.push(` ${e.id}: ${parts.join(', ')}`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (samplingResult.edges.length > 0) {
|
|
136
|
+
lines.push('');
|
|
137
|
+
lines.push('Edges:');
|
|
138
|
+
for (const edge of samplingResult.edges) {
|
|
139
|
+
const srcLabel = graph.getNodeAttributes(edge.source)?.label ?? edge.source;
|
|
140
|
+
const tgtLabel = graph.getNodeAttributes(edge.target)?.label ?? edge.target;
|
|
141
|
+
lines.push(` ${srcLabel} → (${edge.relation}, w=${edge.weight.toFixed(2)}) → ${tgtLabel}`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (Object.keys(samplingResult.metadata).length > 0) {
|
|
145
|
+
lines.push('');
|
|
146
|
+
lines.push('Metadata:');
|
|
147
|
+
for (const [key, value] of Object.entries(samplingResult.metadata)) {
|
|
148
|
+
lines.push(` ${key}: ${value}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
console.log(lines.join('\n'));
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
const envelope = createSuccessEnvelope({
|
|
155
|
+
strategy: samplingResult.strategy,
|
|
156
|
+
seeds: entitySeeds,
|
|
157
|
+
maxHops: options.depth,
|
|
158
|
+
entityCount: samplingResult.entities.length,
|
|
159
|
+
edgeCount: samplingResult.edges.length,
|
|
160
|
+
hopsCovered: samplingResult.hopsCovered,
|
|
161
|
+
entities: samplingResult.entities,
|
|
162
|
+
edges: samplingResult.edges,
|
|
163
|
+
metadata: samplingResult.metadata,
|
|
164
|
+
});
|
|
165
|
+
console.log(JSON.stringify(envelope, null, 2));
|
|
166
|
+
}
|
|
167
|
+
return 0;
|
|
168
|
+
}
|
|
103
169
|
const subgraph = bfsSubgraph(graph, resolvedSeeds, options.depth);
|
|
104
170
|
const serialized = serializeGraph(subgraph);
|
|
105
171
|
const stats = graphStats(subgraph);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-graph.js","sourceRoot":"","sources":["../../src/commands/query-graph.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAc,QAAQ,EAAE,MAAM,IAAI,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAkC,MAAM,kBAAkB,CAAC;AAC7H,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"query-graph.js","sourceRoot":"","sources":["../../src/commands/query-graph.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/session.js
CHANGED
|
@@ -7,7 +7,7 @@ import { createSuccessEnvelope } from '../protocol.js';
|
|
|
7
7
|
import { homedir } from 'os';
|
|
8
8
|
/** Default session root directory */
|
|
9
9
|
export function getDefaultSessionRoot() {
|
|
10
|
-
return join(homedir(), '
|
|
10
|
+
return join(homedir(), 'sxng-cli', 'sessions');
|
|
11
11
|
}
|
|
12
12
|
/** Load session meta.json */
|
|
13
13
|
export function loadSessionMeta(sessionDir) {
|