ruflo-graph-intelligence 0.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/.claude-flow/data/pending-insights.jsonl +30 -0
  2. package/dist/adapters/aidefence-suspicion-adapter.d.ts +40 -0
  3. package/dist/adapters/aidefence-suspicion-adapter.d.ts.map +1 -0
  4. package/dist/adapters/aidefence-suspicion-adapter.js +77 -0
  5. package/dist/adapters/aidefence-suspicion-adapter.js.map +1 -0
  6. package/dist/adapters/browser-causal-adapter.d.ts +83 -0
  7. package/dist/adapters/browser-causal-adapter.d.ts.map +1 -0
  8. package/dist/adapters/browser-causal-adapter.js +146 -0
  9. package/dist/adapters/browser-causal-adapter.js.map +1 -0
  10. package/dist/adapters/cost-attribution-adapter.d.ts +48 -0
  11. package/dist/adapters/cost-attribution-adapter.d.ts.map +1 -0
  12. package/dist/adapters/cost-attribution-adapter.js +95 -0
  13. package/dist/adapters/cost-attribution-adapter.js.map +1 -0
  14. package/dist/adapters/federation-trust-adapter.d.ts +49 -0
  15. package/dist/adapters/federation-trust-adapter.d.ts.map +1 -0
  16. package/dist/adapters/federation-trust-adapter.js +82 -0
  17. package/dist/adapters/federation-trust-adapter.js.map +1 -0
  18. package/dist/adapters/index.d.ts +16 -0
  19. package/dist/adapters/index.d.ts.map +1 -0
  20. package/dist/adapters/index.js +16 -0
  21. package/dist/adapters/index.js.map +1 -0
  22. package/dist/adapters/jujutsu-blast-radius-adapter.d.ts +46 -0
  23. package/dist/adapters/jujutsu-blast-radius-adapter.d.ts.map +1 -0
  24. package/dist/adapters/jujutsu-blast-radius-adapter.js +80 -0
  25. package/dist/adapters/jujutsu-blast-radius-adapter.js.map +1 -0
  26. package/dist/adapters/knowledge-graph-adapter.d.ts +41 -0
  27. package/dist/adapters/knowledge-graph-adapter.d.ts.map +1 -0
  28. package/dist/adapters/knowledge-graph-adapter.js +83 -0
  29. package/dist/adapters/knowledge-graph-adapter.js.map +1 -0
  30. package/dist/adapters/observability-span-adapter.d.ts +45 -0
  31. package/dist/adapters/observability-span-adapter.d.ts.map +1 -0
  32. package/dist/adapters/observability-span-adapter.js +97 -0
  33. package/dist/adapters/observability-span-adapter.js.map +1 -0
  34. package/dist/adapters/portfolio-cg-adapter.d.ts +60 -0
  35. package/dist/adapters/portfolio-cg-adapter.d.ts.map +1 -0
  36. package/dist/adapters/portfolio-cg-adapter.js +102 -0
  37. package/dist/adapters/portfolio-cg-adapter.js.map +1 -0
  38. package/dist/adapters/rag-memory-adapter.d.ts +49 -0
  39. package/dist/adapters/rag-memory-adapter.d.ts.map +1 -0
  40. package/dist/adapters/rag-memory-adapter.js +86 -0
  41. package/dist/adapters/rag-memory-adapter.js.map +1 -0
  42. package/dist/application/federation-client.d.ts +54 -0
  43. package/dist/application/federation-client.d.ts.map +1 -0
  44. package/dist/application/federation-client.js +101 -0
  45. package/dist/application/federation-client.js.map +1 -0
  46. package/dist/application/federation-server.d.ts +38 -0
  47. package/dist/application/federation-server.d.ts.map +1 -0
  48. package/dist/application/federation-server.js +127 -0
  49. package/dist/application/federation-server.js.map +1 -0
  50. package/dist/application/streaming-bridge.d.ts +62 -0
  51. package/dist/application/streaming-bridge.d.ts.map +1 -0
  52. package/dist/application/streaming-bridge.js +101 -0
  53. package/dist/application/streaming-bridge.js.map +1 -0
  54. package/dist/domain/adapter.d.ts +58 -0
  55. package/dist/domain/adapter.d.ts.map +1 -0
  56. package/dist/domain/adapter.js +43 -0
  57. package/dist/domain/adapter.js.map +1 -0
  58. package/dist/domain/federation-protocol.d.ts +857 -0
  59. package/dist/domain/federation-protocol.d.ts.map +1 -0
  60. package/dist/domain/federation-protocol.js +72 -0
  61. package/dist/domain/federation-protocol.js.map +1 -0
  62. package/dist/domain/signed-artifact.d.ts +429 -0
  63. package/dist/domain/signed-artifact.d.ts.map +1 -0
  64. package/dist/domain/signed-artifact.js +57 -0
  65. package/dist/domain/signed-artifact.js.map +1 -0
  66. package/dist/domain/types.d.ts +329 -0
  67. package/dist/domain/types.d.ts.map +1 -0
  68. package/dist/domain/types.js +165 -0
  69. package/dist/domain/types.js.map +1 -0
  70. package/dist/index.d.ts +31 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +37 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/infrastructure/jl-embed.d.ts +27 -0
  75. package/dist/infrastructure/jl-embed.d.ts.map +1 -0
  76. package/dist/infrastructure/jl-embed.js +79 -0
  77. package/dist/infrastructure/jl-embed.js.map +1 -0
  78. package/dist/infrastructure/solver-bridge.d.ts +73 -0
  79. package/dist/infrastructure/solver-bridge.d.ts.map +1 -0
  80. package/dist/infrastructure/solver-bridge.js +359 -0
  81. package/dist/infrastructure/solver-bridge.js.map +1 -0
  82. package/dist/infrastructure/witness-signer.d.ts +44 -0
  83. package/dist/infrastructure/witness-signer.d.ts.map +1 -0
  84. package/dist/infrastructure/witness-signer.js +158 -0
  85. package/dist/infrastructure/witness-signer.js.map +1 -0
  86. package/dist/mcp-tools/index.d.ts +27 -0
  87. package/dist/mcp-tools/index.d.ts.map +1 -0
  88. package/dist/mcp-tools/index.js +292 -0
  89. package/dist/mcp-tools/index.js.map +1 -0
  90. package/package.json +55 -0
  91. package/ruvector.db +0 -0
  92. package/src/adapters/aidefence-suspicion-adapter.ts +102 -0
  93. package/src/adapters/browser-causal-adapter.ts +193 -0
  94. package/src/adapters/cost-attribution-adapter.ts +123 -0
  95. package/src/adapters/federation-trust-adapter.ts +116 -0
  96. package/src/adapters/index.ts +87 -0
  97. package/src/adapters/jujutsu-blast-radius-adapter.ts +107 -0
  98. package/src/adapters/knowledge-graph-adapter.ts +110 -0
  99. package/src/adapters/observability-span-adapter.ts +123 -0
  100. package/src/adapters/portfolio-cg-adapter.ts +140 -0
  101. package/src/adapters/rag-memory-adapter.ts +117 -0
  102. package/src/application/federation-client.ts +147 -0
  103. package/src/application/federation-server.ts +158 -0
  104. package/src/application/streaming-bridge.ts +137 -0
  105. package/src/domain/adapter.ts +92 -0
  106. package/src/domain/federation-protocol.ts +95 -0
  107. package/src/domain/signed-artifact.ts +80 -0
  108. package/src/domain/types.ts +215 -0
  109. package/src/index.ts +105 -0
  110. package/src/infrastructure/jl-embed.ts +98 -0
  111. package/src/infrastructure/solver-bridge.ts +389 -0
  112. package/src/infrastructure/witness-signer.ts +209 -0
  113. package/src/mcp-tools/index.ts +316 -0
  114. package/tests/adapter-registry.test.ts +69 -0
  115. package/tests/browser-causal-adapter.test.ts +174 -0
  116. package/tests/mcp-tools.test.ts +169 -0
  117. package/tests/phase3-adapters.test.ts +206 -0
  118. package/tests/phase4-adapters.test.ts +158 -0
  119. package/tests/phase5-portfolio.test.ts +122 -0
  120. package/tests/phase6-adapters.test.ts +224 -0
  121. package/tests/phase6_5-streaming.test.ts +135 -0
  122. package/tests/phase7-signed-artifact.test.ts +238 -0
  123. package/tests/phase8-federation.test.ts +194 -0
  124. package/tests/solver-bridge.test.ts +255 -0
  125. package/tsconfig.json +21 -0
  126. package/vitest.config.ts +9 -0
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Witness Signer for PR Artifacts (Phase 7, ADR-123)
3
+ *
4
+ * Ed25519 sign / verify via node:crypto. Mirrors @claude-flow/browser's
5
+ * ADR-122 Phase 1 witness signer — same canonical-JSON approach so a single
6
+ * upstream-ADR-103 schema change cascades cleanly.
7
+ */
8
+ import { createPrivateKey, createPublicKey, sign, verify, generateKeyPairSync, createHash, } from 'node:crypto';
9
+ import { ARTIFACT_ENVELOPE_KIND, ARTIFACT_ENVELOPE_VERSION, SignedPageRankEnvelopeSchema, SignedPageRankPayloadSchema, } from '../domain/signed-artifact.js';
10
+ /** Canonical-JSON for deterministic signing — omits undefined keys, sorts. */
11
+ export function canonicalJSON(value) {
12
+ if (value === undefined)
13
+ return 'null';
14
+ if (value === null || typeof value !== 'object')
15
+ return JSON.stringify(value);
16
+ if (Array.isArray(value))
17
+ return '[' + value.map(canonicalJSON).join(',') + ']';
18
+ const obj = value;
19
+ const keys = Object.keys(obj).filter((k) => obj[k] !== undefined).sort();
20
+ return '{' + keys.map((k) => JSON.stringify(k) + ':' + canonicalJSON(obj[k])).join(',') + '}';
21
+ }
22
+ export function sha256Hex(input) {
23
+ return createHash('sha256').update(input).digest('hex');
24
+ }
25
+ export function generateWitnessKey() {
26
+ const { privateKey, publicKey } = generateKeyPairSync('ed25519');
27
+ return { privateKey, publicKey, publicKeyHex: extractPubkeyHex(publicKey) };
28
+ }
29
+ export function loadWitnessKey(privateKeyPem) {
30
+ const privateKey = createPrivateKey(privateKeyPem);
31
+ const publicKey = createPublicKey(privateKey);
32
+ return { privateKey, publicKey, publicKeyHex: extractPubkeyHex(publicKey) };
33
+ }
34
+ function extractPubkeyHex(publicKey) {
35
+ const der = publicKey.export({ format: 'der', type: 'spki' });
36
+ return der.subarray(der.length - 32).toString('hex');
37
+ }
38
+ export function resolveWitnessKey() {
39
+ const envKey = process.env.RUFLO_GRAPH_INTELLIGENCE_WITNESS_KEY;
40
+ if (envKey)
41
+ return loadWitnessKey(envKey);
42
+ return generateWitnessKey();
43
+ }
44
+ export function sealArtifact(input) {
45
+ const key = input.witnessKey ?? resolveWitnessKey();
46
+ const payload = SignedPageRankPayloadSchema.parse({
47
+ envelopeVersion: ARTIFACT_ENVELOPE_VERSION,
48
+ kind: ARTIFACT_ENVELOPE_KIND,
49
+ installationId: input.installationId,
50
+ witnessKeyId: input.witnessKeyId,
51
+ publicKey: key.publicKeyHex,
52
+ graphId: input.graphId,
53
+ graphHash: input.graphHash,
54
+ graphTimestamp: input.graphTimestamp,
55
+ algorithm: input.algorithm,
56
+ alpha: input.alpha,
57
+ epsilon: input.epsilon,
58
+ queryNode: input.queryNode,
59
+ seedNodes: [...input.seedNodes],
60
+ result: input.result,
61
+ complexityClass: input.result.complexityClass,
62
+ coherenceScore: input.result.coherence.score,
63
+ resultHash: input.result.resultHash,
64
+ sealedAt: input.sealedAt ?? new Date().toISOString(),
65
+ solverVersion: 'sublinear-time-solver@1.7.0',
66
+ });
67
+ const canonical = canonicalJSON(payload);
68
+ const sigBuf = sign(null, Buffer.from(canonical, 'utf8'), key.privateKey);
69
+ return {
70
+ envelope: { payload, signature: sigBuf.toString('hex'), algorithm: 'ed25519' },
71
+ publicKeyHex: key.publicKeyHex,
72
+ };
73
+ }
74
+ export function verifyArtifact(envelope, options = {}) {
75
+ const parsed = SignedPageRankEnvelopeSchema.safeParse(envelope);
76
+ if (!parsed.success) {
77
+ return {
78
+ valid: false,
79
+ signatureValid: false,
80
+ schemaValid: false,
81
+ integrityValid: false,
82
+ reason: 'schema: ' + parsed.error.issues.map((i) => i.path.join('.') + ' ' + i.message).join('; '),
83
+ };
84
+ }
85
+ const { payload, signature } = parsed.data;
86
+ if (options.trustedPublicKeys && !options.trustedPublicKeys.includes(payload.publicKey)) {
87
+ return {
88
+ valid: false,
89
+ signatureValid: false,
90
+ schemaValid: true,
91
+ integrityValid: false,
92
+ publicKey: payload.publicKey,
93
+ reason: 'signer not in trusted list',
94
+ };
95
+ }
96
+ // Integrity: result.resultHash must match payload.resultHash
97
+ if (payload.result.resultHash !== payload.resultHash) {
98
+ return {
99
+ valid: false,
100
+ signatureValid: false,
101
+ schemaValid: true,
102
+ integrityValid: false,
103
+ publicKey: payload.publicKey,
104
+ reason: 'result.resultHash != payload.resultHash (tampered)',
105
+ };
106
+ }
107
+ // Coherence echo must match
108
+ if (Math.abs(payload.result.coherence.score - payload.coherenceScore) > 1e-9) {
109
+ return {
110
+ valid: false,
111
+ signatureValid: false,
112
+ schemaValid: true,
113
+ integrityValid: false,
114
+ publicKey: payload.publicKey,
115
+ reason: 'coherenceScore echo mismatch (tampered)',
116
+ };
117
+ }
118
+ // Complexity-class echo must match
119
+ if (payload.result.complexityClass !== payload.complexityClass) {
120
+ return {
121
+ valid: false,
122
+ signatureValid: false,
123
+ schemaValid: true,
124
+ integrityValid: false,
125
+ publicKey: payload.publicKey,
126
+ reason: 'complexityClass echo mismatch (tampered)',
127
+ };
128
+ }
129
+ // Signature
130
+ try {
131
+ const spkiPrefix = Buffer.from('302a300506032b6570032100', 'hex');
132
+ const der = Buffer.concat([spkiPrefix, Buffer.from(payload.publicKey, 'hex')]);
133
+ const pk = createPublicKey({ key: der, format: 'der', type: 'spki' });
134
+ const canonical = canonicalJSON(payload);
135
+ const sigValid = verify(null, Buffer.from(canonical, 'utf8'), pk, Buffer.from(signature, 'hex'));
136
+ return {
137
+ valid: sigValid,
138
+ signatureValid: sigValid,
139
+ schemaValid: true,
140
+ integrityValid: true,
141
+ publicKey: payload.publicKey,
142
+ complexityClass: payload.complexityClass,
143
+ coherenceScore: payload.coherenceScore,
144
+ reason: sigValid ? undefined : 'signature verification failed (envelope tampered)',
145
+ };
146
+ }
147
+ catch (err) {
148
+ return {
149
+ valid: false,
150
+ signatureValid: false,
151
+ schemaValid: true,
152
+ integrityValid: false,
153
+ publicKey: payload.publicKey,
154
+ reason: 'verify threw: ' + (err instanceof Error ? err.message : String(err)),
155
+ };
156
+ }
157
+ }
158
+ //# sourceMappingURL=witness-signer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"witness-signer.js","sourceRoot":"","sources":["../../src/infrastructure/witness-signer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * ruflo-graph-intelligence — MCP Tool Surface (ADR-123 § Architecture)
3
+ *
4
+ * Six tools mounted under `sublinear/*`:
5
+ * - sublinear/page-rank-entry — single-entry PPR (workhorse)
6
+ * - sublinear/solve — full A·x = b
7
+ * - sublinear/solve-on-change — incremental delta (Wedge 12, streaming)
8
+ * - sublinear/feasibility — packing/covering LP feasibility
9
+ * - sublinear/jl-embed — Johnson-Lindenstrauss projection
10
+ * - sublinear/analyze — diagnostics (coherence, sparsity, recommended algo)
11
+ *
12
+ * Every tool accepts maxComplexityClass + coherenceThreshold.
13
+ */
14
+ export interface MCPTool {
15
+ name: string;
16
+ description: string;
17
+ category: string;
18
+ inputSchema: {
19
+ type: 'object';
20
+ properties: Record<string, unknown>;
21
+ required?: string[];
22
+ };
23
+ handler: (input: Record<string, unknown>) => Promise<unknown>;
24
+ }
25
+ export declare const graphIntelligenceTools: MCPTool[];
26
+ export default graphIntelligenceTools;
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp-tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAgBH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/D;AAED,eAAO,MAAM,sBAAsB,EAAE,OAAO,EAiR3C,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
@@ -0,0 +1,292 @@
1
+ /**
2
+ * ruflo-graph-intelligence — MCP Tool Surface (ADR-123 § Architecture)
3
+ *
4
+ * Six tools mounted under `sublinear/*`:
5
+ * - sublinear/page-rank-entry — single-entry PPR (workhorse)
6
+ * - sublinear/solve — full A·x = b
7
+ * - sublinear/solve-on-change — incremental delta (Wedge 12, streaming)
8
+ * - sublinear/feasibility — packing/covering LP feasibility
9
+ * - sublinear/jl-embed — Johnson-Lindenstrauss projection
10
+ * - sublinear/analyze — diagnostics (coherence, sparsity, recommended algo)
11
+ *
12
+ * Every tool accepts maxComplexityClass + coherenceThreshold.
13
+ */
14
+ import { getRegistry } from '../domain/adapter.js';
15
+ import { PageRankQuerySchema, SolveQuerySchema, SolveOnChangeQuerySchema, } from '../domain/types.js';
16
+ import { runPageRank, runSolve, runSolveOnChange, checkCoherence, } from '../infrastructure/solver-bridge.js';
17
+ export const graphIntelligenceTools = [
18
+ {
19
+ name: 'sublinear/page-rank-entry',
20
+ description: 'Single-entry personalized PageRank over a registered RuFlo graph. O(log n) on DD inputs. Returns score + observed complexity-class + coherence margin. Accepts maxComplexityClass budget gate (default linear) and coherenceThreshold (default 0 = disabled).',
21
+ category: 'graph-intelligence',
22
+ inputSchema: {
23
+ type: 'object',
24
+ properties: {
25
+ graphId: { type: 'string', description: 'Adapter-registered graph identifier' },
26
+ nodeId: { type: 'string', description: 'Node to compute PR score for (single-entry query)' },
27
+ alpha: { type: 'number', description: 'Damping factor (default 0.85)' },
28
+ epsilon: { type: 'number', description: 'Convergence target (default 1e-3)' },
29
+ seedNodes: {
30
+ type: 'array',
31
+ items: { type: 'string' },
32
+ description: 'For personalized PR — seed nodes carrying restart distribution',
33
+ },
34
+ maxComplexityClass: {
35
+ type: 'string',
36
+ description: '12-tier upstream class budget (constant/logarithmic/polylogarithmic/sublinear/linear/...); default linear',
37
+ },
38
+ coherenceThreshold: {
39
+ type: 'number',
40
+ description: 'DD margin floor in [-∞, 1] (default 0 = disabled)',
41
+ },
42
+ },
43
+ required: ['graphId', 'nodeId'],
44
+ },
45
+ handler: async (input) => {
46
+ const query = PageRankQuerySchema.parse(input);
47
+ const adapter = getRegistry().get(query.graphId);
48
+ if (!adapter) {
49
+ return { success: false, error: { kind: 'graph-not-found', message: `no adapter for graphId=${query.graphId}` } };
50
+ }
51
+ const matrix = await adapter.exportAsSparseMatrix();
52
+ try {
53
+ const result = runPageRank(matrix, query);
54
+ return { success: true, result };
55
+ }
56
+ catch (err) {
57
+ return { success: false, error: err };
58
+ }
59
+ },
60
+ },
61
+ {
62
+ name: 'sublinear/solve',
63
+ description: 'Full linear solve A·x = b over a registered graph. CG (symmetric PD) or Neumann (general DD). Returns x + residual + observed complexity-class + coherence margin.',
64
+ category: 'graph-intelligence',
65
+ inputSchema: {
66
+ type: 'object',
67
+ properties: {
68
+ graphId: { type: 'string' },
69
+ rhs: { type: 'array', items: { type: 'number' } },
70
+ algorithm: { type: 'string', enum: ['cg', 'neumann', 'random-walk'] },
71
+ maxComplexityClass: { type: 'string' },
72
+ coherenceThreshold: { type: 'number' },
73
+ },
74
+ required: ['graphId', 'rhs'],
75
+ },
76
+ handler: async (input) => {
77
+ const query = SolveQuerySchema.parse(input);
78
+ const adapter = getRegistry().get(query.graphId);
79
+ if (!adapter) {
80
+ return { success: false, error: { kind: 'graph-not-found', message: `no adapter for graphId=${query.graphId}` } };
81
+ }
82
+ const matrix = await adapter.exportAsSparseMatrix();
83
+ try {
84
+ const result = runSolve(matrix, query);
85
+ return { success: true, result };
86
+ }
87
+ catch (err) {
88
+ return { success: false, error: err };
89
+ }
90
+ },
91
+ },
92
+ {
93
+ name: 'sublinear/solve-on-change',
94
+ description: 'Incremental solve A·dx = δ then x_new = x_prev + dx (Wedge 12, ADR-123). For event-driven streaming systems (federation trust deltas, span streams, append-only causal breaks). Sparse δ → asymptotically faster than full re-solve.',
95
+ category: 'graph-intelligence',
96
+ inputSchema: {
97
+ type: 'object',
98
+ properties: {
99
+ graphId: { type: 'string' },
100
+ prevSolution: { type: 'array', items: { type: 'number' } },
101
+ delta: {
102
+ type: 'object',
103
+ properties: {
104
+ indices: { type: 'array', items: { type: 'number' } },
105
+ values: { type: 'array', items: { type: 'number' } },
106
+ },
107
+ },
108
+ algorithm: { type: 'string', enum: ['cg', 'neumann'] },
109
+ maxComplexityClass: { type: 'string' },
110
+ },
111
+ required: ['graphId', 'prevSolution', 'delta'],
112
+ },
113
+ handler: async (input) => {
114
+ const query = SolveOnChangeQuerySchema.parse(input);
115
+ const adapter = getRegistry().get(query.graphId);
116
+ if (!adapter) {
117
+ return { success: false, error: { kind: 'graph-not-found', message: `no adapter for graphId=${query.graphId}` } };
118
+ }
119
+ const matrix = await adapter.exportAsSparseMatrix();
120
+ try {
121
+ const result = runSolveOnChange(matrix, query);
122
+ return { success: true, result };
123
+ }
124
+ catch (err) {
125
+ return { success: false, error: err };
126
+ }
127
+ },
128
+ },
129
+ {
130
+ name: 'sublinear/analyze',
131
+ description: 'Diagnostic report on a registered graph: coherence margin (DD), sparsity, square-size, recommended algorithm. Use before sublinear/solve to choose algorithm + budget.',
132
+ category: 'graph-intelligence',
133
+ inputSchema: {
134
+ type: 'object',
135
+ properties: { graphId: { type: 'string' } },
136
+ required: ['graphId'],
137
+ },
138
+ handler: async (input) => {
139
+ const graphId = input.graphId;
140
+ const adapter = getRegistry().get(graphId);
141
+ if (!adapter) {
142
+ return { success: false, error: { kind: 'graph-not-found', message: `no adapter for graphId=${graphId}` } };
143
+ }
144
+ const matrix = await adapter.exportAsSparseMatrix();
145
+ const coherence = checkCoherence(matrix, 0);
146
+ const nonzeros = matrix.entries.length;
147
+ const density = nonzeros / (matrix.size * matrix.size);
148
+ const recommendedAlgorithm = density < 0.01 ? 'forward-push' : coherence.score > 0 ? 'cg' : 'neumann';
149
+ return {
150
+ success: true,
151
+ result: {
152
+ graphId,
153
+ size: matrix.size,
154
+ nonzeros,
155
+ density,
156
+ coherenceScore: coherence.score,
157
+ isDiagonallyDominant: coherence.score > 0,
158
+ recommendedAlgorithm,
159
+ },
160
+ };
161
+ },
162
+ },
163
+ {
164
+ name: 'sublinear/feasibility',
165
+ description: 'Packing/covering LP feasibility check (Kyng-Sachdeva style). Wedge 9 — pre-flight check before invoking A* / heavy planners.',
166
+ category: 'graph-intelligence',
167
+ inputSchema: {
168
+ type: 'object',
169
+ properties: {
170
+ constraints: { type: 'array', description: 'A·x ≤ b constraint set' },
171
+ tolerance: { type: 'number', description: 'Slack for soft constraints (default 0.05)' },
172
+ maxComplexityClass: { type: 'string' },
173
+ },
174
+ required: ['constraints'],
175
+ },
176
+ handler: async (input) => {
177
+ // Phase 6: relaxed packing/covering LP. Each constraint is a row Aᵢ
178
+ // with shape { coeffs: Record<varId, number>, bound: number, kind: 'leq'|'geq'|'eq' }.
179
+ // The relaxed check: does there exist x ≥ 0 satisfying all constraints within `tolerance`?
180
+ // For Phase 6 we ship a tight bounded-variable LP via a simple Lagrangian
181
+ // shrink-on-violation pass. Real Kyng–Sachdeva solver wires in Phase 7+.
182
+ const constraints = input.constraints ?? [];
183
+ const tolerance = input.tolerance ?? 0.05;
184
+ if (constraints.length === 0) {
185
+ return { success: true, result: { feasible: true, witness: {}, method: 'no-constraints' } };
186
+ }
187
+ // Collect variables; initialise x = 0 (the trivial point).
188
+ const varSet = new Set();
189
+ for (const c of constraints)
190
+ for (const k of Object.keys(c.coeffs))
191
+ varSet.add(k);
192
+ const vars = [...varSet];
193
+ const x = {};
194
+ for (const v of vars)
195
+ x[v] = 0;
196
+ // 200-iter Lagrangian shrink: for each violated row, push x toward
197
+ // satisfaction by a small step proportional to violation magnitude.
198
+ const stepSize = 0.05;
199
+ for (let it = 0; it < 200; it++) {
200
+ let maxViolation = 0;
201
+ for (const c of constraints) {
202
+ let lhs = 0;
203
+ for (const [k, w] of Object.entries(c.coeffs))
204
+ lhs += (x[k] ?? 0) * w;
205
+ const kind = c.kind ?? 'leq';
206
+ let violation = 0;
207
+ if (kind === 'leq' && lhs > c.bound)
208
+ violation = lhs - c.bound;
209
+ else if (kind === 'geq' && lhs < c.bound)
210
+ violation = c.bound - lhs;
211
+ else if (kind === 'eq')
212
+ violation = Math.abs(lhs - c.bound);
213
+ if (violation > maxViolation)
214
+ maxViolation = violation;
215
+ if (violation === 0)
216
+ continue;
217
+ for (const [k, w] of Object.entries(c.coeffs)) {
218
+ if (w === 0)
219
+ continue;
220
+ const direction = kind === 'leq' ? -Math.sign(w) : Math.sign(w);
221
+ x[k] = Math.max(0, (x[k] ?? 0) + direction * stepSize * (violation / Math.abs(w)));
222
+ }
223
+ }
224
+ if (maxViolation <= tolerance) {
225
+ return { success: true, result: { feasible: true, witness: x, iterations: it + 1, method: 'lagrangian-shrink' } };
226
+ }
227
+ }
228
+ // Couldn't satisfy within iteration cap — infeasibility certificate
229
+ // is the residual violation vector.
230
+ const residuals = constraints.map((c) => {
231
+ let lhs = 0;
232
+ for (const [k, w] of Object.entries(c.coeffs))
233
+ lhs += (x[k] ?? 0) * w;
234
+ return { lhs, bound: c.bound, kind: c.kind ?? 'leq' };
235
+ });
236
+ return {
237
+ success: true,
238
+ result: {
239
+ feasible: false,
240
+ witness: x,
241
+ certificateOfInfeasibility: residuals,
242
+ method: 'lagrangian-shrink (capped)',
243
+ },
244
+ };
245
+ },
246
+ },
247
+ {
248
+ name: 'sublinear/jl-embed',
249
+ description: 'Johnson-Lindenstrauss projection. Maps vectors to a target dimension with ε-distortion. Replaces @claude-flow/embeddings hand-rolled JL (closes ADR-121 Phase 4 follow-up).',
250
+ category: 'graph-intelligence',
251
+ inputSchema: {
252
+ type: 'object',
253
+ properties: {
254
+ vectors: { type: 'array', description: 'Input vectors' },
255
+ targetDim: { type: 'number' },
256
+ epsilon: { type: 'number' },
257
+ },
258
+ required: ['vectors', 'targetDim'],
259
+ },
260
+ handler: async (input) => {
261
+ // Phase 6: real JL via jlEmbed (replaces ADR-121 hand-rolled).
262
+ const { jlEmbed } = await import('../infrastructure/jl-embed.js');
263
+ const vectors = input.vectors ?? [];
264
+ const targetDim = input.targetDim ?? 64;
265
+ const epsilon = input.epsilon ?? 0.1;
266
+ try {
267
+ const result = jlEmbed(vectors, { targetDim, epsilon });
268
+ return {
269
+ success: true,
270
+ result: {
271
+ projected: result.projected,
272
+ targetDim: result.targetDim,
273
+ distortionBound: result.epsilon,
274
+ withinAchlioptasBound: result.withinAchlioptasBound,
275
+ method: 'real JL — Gaussian projection with k ≤ n−1 cap',
276
+ },
277
+ };
278
+ }
279
+ catch (err) {
280
+ return {
281
+ success: false,
282
+ error: {
283
+ kind: 'invalid-input',
284
+ message: err instanceof Error ? err.message : String(err),
285
+ },
286
+ };
287
+ }
288
+ },
289
+ },
290
+ ];
291
+ export default graphIntelligenceTools;
292
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp-tools/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "ruflo-graph-intelligence",
3
+ "version": "0.1.0-alpha.1",
4
+ "description": "RuFlo Graph Intelligence Engine — real-time relationship intelligence with complexity-aware execution. Single-entry personalized PageRank, streaming delta updates, witness-signed reasoning artifacts over RuFlo's substrate graphs.",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": "./dist/index.js",
10
+ "./mcp-tools": "./dist/mcp-tools/index.js",
11
+ "./adapters": "./dist/adapters/index.js"
12
+ },
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "dev": "tsc --watch",
16
+ "test": "vitest run",
17
+ "test:watch": "vitest",
18
+ "lint": "eslint src/",
19
+ "typecheck": "tsc --noEmit",
20
+ "bench": "node scripts/benchmark-substrate.mjs"
21
+ },
22
+ "dependencies": {
23
+ "sublinear-time-solver": "^1.7.0",
24
+ "zod": "^3.22.4"
25
+ },
26
+ "peerDependencies": {
27
+ "@claude-flow/cli": ">=3.5.0"
28
+ },
29
+ "devDependencies": {
30
+ "@types/node": "^20.10.0",
31
+ "typescript": "^5.3.0",
32
+ "vitest": "^4.0.16"
33
+ },
34
+ "keywords": [
35
+ "ruflo",
36
+ "graph-intelligence",
37
+ "pagerank",
38
+ "sublinear",
39
+ "complexity-aware",
40
+ "personalized-pagerank",
41
+ "agent-substrate",
42
+ "mcp",
43
+ "claude-flow"
44
+ ],
45
+ "author": "ruvnet",
46
+ "license": "MIT",
47
+ "repository": {
48
+ "type": "git",
49
+ "url": "https://github.com/ruvnet/ruflo.git",
50
+ "directory": "plugins/ruflo-graph-intelligence"
51
+ },
52
+ "engines": {
53
+ "node": ">=20.0.0"
54
+ }
55
+ }
package/ruvector.db ADDED
Binary file