@claude-flow/plugin-legal-contracts 3.0.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.
@@ -0,0 +1,348 @@
1
+ /**
2
+ * Flash Attention Bridge for Legal Contract Analysis
3
+ *
4
+ * Provides cross-attention computation for clause alignment and similarity
5
+ * using ruvector-attention-wasm for high-performance attention operations.
6
+ *
7
+ * Features:
8
+ * - Cross-attention for contract comparison
9
+ * - Clause alignment between documents
10
+ * - Semantic similarity scoring
11
+ * - Memory-efficient attention patterns
12
+ *
13
+ * Based on ADR-034: Legal Contract Analysis Plugin
14
+ *
15
+ * @module v3/plugins/legal-contracts/bridges/attention-bridge
16
+ */
17
+ /**
18
+ * Flash Attention Bridge Implementation
19
+ */
20
+ export class AttentionBridge {
21
+ wasmModule = null;
22
+ initialized = false;
23
+ embeddingDim;
24
+ constructor(embeddingDim = 384) {
25
+ this.embeddingDim = embeddingDim;
26
+ }
27
+ /**
28
+ * Initialize the WASM module
29
+ */
30
+ async initialize() {
31
+ if (this.initialized)
32
+ return;
33
+ try {
34
+ // Dynamic import of WASM module
35
+ // In production, this would load from @claude-flow/ruvector-upstream
36
+ const wasmModule = await this.loadWasmModule();
37
+ this.wasmModule = wasmModule;
38
+ this.initialized = true;
39
+ }
40
+ catch (error) {
41
+ // Fallback to pure JS implementation if WASM not available
42
+ console.warn('WASM attention module not available, using JS fallback');
43
+ this.wasmModule = null;
44
+ this.initialized = true;
45
+ }
46
+ }
47
+ /**
48
+ * Check if initialized
49
+ */
50
+ isInitialized() {
51
+ return this.initialized;
52
+ }
53
+ /**
54
+ * Compute cross-attention between clause embeddings
55
+ */
56
+ async computeCrossAttention(queryEmbeddings, keyEmbeddings, mask) {
57
+ if (!this.initialized) {
58
+ await this.initialize();
59
+ }
60
+ const queryLen = queryEmbeddings.length;
61
+ const keyLen = keyEmbeddings.length;
62
+ if (queryLen === 0 || keyLen === 0) {
63
+ return [];
64
+ }
65
+ // Flatten embeddings for WASM
66
+ const dim = queryEmbeddings[0]?.length ?? this.embeddingDim;
67
+ const flatQuery = this.flattenEmbeddings(queryEmbeddings, dim);
68
+ const flatKey = this.flattenEmbeddings(keyEmbeddings, dim);
69
+ // Create mask if provided
70
+ let maskArray = null;
71
+ if (mask) {
72
+ maskArray = new Uint8Array(queryLen * keyLen);
73
+ for (let i = 0; i < queryLen; i++) {
74
+ for (let j = 0; j < keyLen; j++) {
75
+ maskArray[i * keyLen + j] = mask[i]?.[j] ? 1 : 0;
76
+ }
77
+ }
78
+ }
79
+ // Compute attention scores
80
+ let scores;
81
+ if (this.wasmModule) {
82
+ scores = this.wasmModule.attention_scores(flatQuery, flatKey, queryLen, keyLen, dim);
83
+ }
84
+ else {
85
+ scores = this.computeAttentionScoresJS(flatQuery, flatKey, queryLen, keyLen, dim);
86
+ }
87
+ // Apply mask if provided
88
+ if (maskArray) {
89
+ for (let i = 0; i < scores.length; i++) {
90
+ if (maskArray[i] === 0) {
91
+ scores[i] = -Infinity;
92
+ }
93
+ }
94
+ }
95
+ // Apply softmax row-wise
96
+ const result = [];
97
+ for (let i = 0; i < queryLen; i++) {
98
+ const row = [];
99
+ const rowStart = i * keyLen;
100
+ const rowEnd = rowStart + keyLen;
101
+ const rowScores = scores.slice(rowStart, rowEnd);
102
+ const softmaxed = this.softmax(rowScores);
103
+ for (let j = 0; j < keyLen; j++) {
104
+ row.push(new Float32Array([softmaxed[j] ?? 0]));
105
+ }
106
+ result.push(row);
107
+ }
108
+ return result;
109
+ }
110
+ /**
111
+ * Align clauses between two documents using attention
112
+ */
113
+ async alignClauses(baseClauses, compareClauses) {
114
+ if (!this.initialized) {
115
+ await this.initialize();
116
+ }
117
+ if (baseClauses.length === 0 || compareClauses.length === 0) {
118
+ return [];
119
+ }
120
+ // Get or compute embeddings
121
+ const baseEmbeddings = await this.getOrComputeEmbeddings(baseClauses);
122
+ const compareEmbeddings = await this.getOrComputeEmbeddings(compareClauses);
123
+ // Compute similarity matrix using attention
124
+ const similarities = await this.computeCrossAttention(baseEmbeddings, compareEmbeddings);
125
+ // Create alignments based on similarity scores
126
+ const alignments = [];
127
+ const usedCompare = new Set();
128
+ // For each base clause, find best matching compare clause
129
+ for (let i = 0; i < baseClauses.length; i++) {
130
+ const baseClause = baseClauses[i];
131
+ if (!baseClause)
132
+ continue;
133
+ const row = similarities[i];
134
+ if (!row)
135
+ continue;
136
+ // Find best match not already used
137
+ let bestJ = -1;
138
+ let bestScore = 0;
139
+ for (let j = 0; j < compareClauses.length; j++) {
140
+ if (usedCompare.has(j))
141
+ continue;
142
+ const score = row[j]?.[0] ?? 0;
143
+ if (score > bestScore) {
144
+ bestScore = score;
145
+ bestJ = j;
146
+ }
147
+ }
148
+ const compareClause = bestJ >= 0 ? compareClauses[bestJ] : undefined;
149
+ // Determine alignment type based on score
150
+ let alignmentType;
151
+ if (bestScore > 0.95) {
152
+ alignmentType = 'exact';
153
+ }
154
+ else if (bestScore > 0.8) {
155
+ alignmentType = 'similar';
156
+ }
157
+ else if (bestScore > 0.5) {
158
+ alignmentType = 'related';
159
+ }
160
+ else {
161
+ alignmentType = 'no_match';
162
+ }
163
+ const differences = this.computeDifferences(baseClause, compareClause);
164
+ alignments.push({
165
+ baseClauseId: baseClause.id,
166
+ compareClauseId: compareClause?.id ?? '',
167
+ similarity: bestScore,
168
+ alignmentType,
169
+ differences,
170
+ });
171
+ if (bestJ >= 0) {
172
+ usedCompare.add(bestJ);
173
+ }
174
+ }
175
+ return alignments;
176
+ }
177
+ /**
178
+ * Find most relevant clauses for a given query
179
+ */
180
+ async findRelevantClauses(query, clauses, topK) {
181
+ if (!this.initialized) {
182
+ await this.initialize();
183
+ }
184
+ if (clauses.length === 0) {
185
+ return [];
186
+ }
187
+ // Convert query to embedding if string
188
+ const queryEmbedding = typeof query === 'string'
189
+ ? await this.embedText(query)
190
+ : query;
191
+ // Get clause embeddings
192
+ const clauseEmbeddings = await this.getOrComputeEmbeddings(clauses);
193
+ // Compute similarities
194
+ const similarities = await this.computeCrossAttention([queryEmbedding], clauseEmbeddings);
195
+ const scores = similarities[0] ?? [];
196
+ // Create scored results
197
+ const scoredClauses = clauses.map((clause, i) => ({
198
+ clause,
199
+ score: scores[i]?.[0] ?? 0,
200
+ }));
201
+ // Sort by score and take top K
202
+ scoredClauses.sort((a, b) => b.score - a.score);
203
+ return scoredClauses.slice(0, topK);
204
+ }
205
+ // ============================================================================
206
+ // Private Helper Methods
207
+ // ============================================================================
208
+ /**
209
+ * Load WASM module dynamically
210
+ */
211
+ async loadWasmModule() {
212
+ // In production, this would load from @claude-flow/ruvector-upstream
213
+ // For now, throw to trigger JS fallback
214
+ throw new Error('WASM module loading not implemented');
215
+ }
216
+ /**
217
+ * Flatten array of embeddings into single Float32Array
218
+ */
219
+ flattenEmbeddings(embeddings, dim) {
220
+ const flat = new Float32Array(embeddings.length * dim);
221
+ for (let i = 0; i < embeddings.length; i++) {
222
+ const emb = embeddings[i];
223
+ if (emb) {
224
+ flat.set(emb.slice(0, dim), i * dim);
225
+ }
226
+ }
227
+ return flat;
228
+ }
229
+ /**
230
+ * Compute attention scores in pure JavaScript (fallback)
231
+ */
232
+ computeAttentionScoresJS(query, key, queryLen, keyLen, dim) {
233
+ const scores = new Float32Array(queryLen * keyLen);
234
+ const scale = 1 / Math.sqrt(dim);
235
+ for (let i = 0; i < queryLen; i++) {
236
+ for (let j = 0; j < keyLen; j++) {
237
+ let dot = 0;
238
+ for (let k = 0; k < dim; k++) {
239
+ const qVal = query[i * dim + k] ?? 0;
240
+ const kVal = key[j * dim + k] ?? 0;
241
+ dot += qVal * kVal;
242
+ }
243
+ scores[i * keyLen + j] = dot * scale;
244
+ }
245
+ }
246
+ return scores;
247
+ }
248
+ /**
249
+ * Compute softmax over array
250
+ */
251
+ softmax(arr) {
252
+ const max = Math.max(...arr);
253
+ const exps = new Float32Array(arr.length);
254
+ let sum = 0;
255
+ for (let i = 0; i < arr.length; i++) {
256
+ const val = arr[i] ?? 0;
257
+ const exp = Math.exp(val - max);
258
+ exps[i] = exp;
259
+ sum += exp;
260
+ }
261
+ for (let i = 0; i < exps.length; i++) {
262
+ exps[i] = (exps[i] ?? 0) / sum;
263
+ }
264
+ return exps;
265
+ }
266
+ /**
267
+ * Get embeddings from clauses or compute them
268
+ */
269
+ async getOrComputeEmbeddings(clauses) {
270
+ const embeddings = [];
271
+ for (const clause of clauses) {
272
+ if (clause.embedding) {
273
+ embeddings.push(clause.embedding);
274
+ }
275
+ else {
276
+ // Compute embedding from text
277
+ const embedding = await this.embedText(clause.text);
278
+ embeddings.push(embedding);
279
+ }
280
+ }
281
+ return embeddings;
282
+ }
283
+ /**
284
+ * Embed text to vector (placeholder - would use embedding model)
285
+ */
286
+ async embedText(text) {
287
+ // In production, this would use an embedding model
288
+ // For now, create a simple hash-based embedding
289
+ const embedding = new Float32Array(this.embeddingDim);
290
+ // Simple hash-based embedding (placeholder)
291
+ for (let i = 0; i < text.length && i < this.embeddingDim; i++) {
292
+ const charCode = text.charCodeAt(i);
293
+ const idx = i % this.embeddingDim;
294
+ embedding[idx] = (embedding[idx] ?? 0) + charCode / 1000;
295
+ }
296
+ // Normalize
297
+ let norm = 0;
298
+ for (let i = 0; i < embedding.length; i++) {
299
+ norm += (embedding[i] ?? 0) * (embedding[i] ?? 0);
300
+ }
301
+ norm = Math.sqrt(norm);
302
+ if (norm > 0) {
303
+ for (let i = 0; i < embedding.length; i++) {
304
+ embedding[i] = (embedding[i] ?? 0) / norm;
305
+ }
306
+ }
307
+ return embedding;
308
+ }
309
+ /**
310
+ * Compute differences between two clauses
311
+ */
312
+ computeDifferences(baseClause, compareClause) {
313
+ const differences = [];
314
+ if (compareClause === undefined) {
315
+ differences.push('No matching clause found in comparison document');
316
+ return differences;
317
+ }
318
+ // Type difference
319
+ if (baseClause.type !== compareClause.type) {
320
+ differences.push(`Type changed: ${baseClause.type} -> ${compareClause.type}`);
321
+ }
322
+ // Length difference
323
+ const lengthDiff = Math.abs(baseClause.text.length - compareClause.text.length);
324
+ if (lengthDiff > 100) {
325
+ differences.push(`Significant length difference: ${lengthDiff} characters`);
326
+ }
327
+ // Key terms difference
328
+ const baseTerms = new Set(baseClause.keyTerms);
329
+ const compareTerms = new Set(compareClause.keyTerms);
330
+ const addedTerms = [...compareTerms].filter(t => !baseTerms.has(t));
331
+ const removedTerms = [...baseTerms].filter(t => !compareTerms.has(t));
332
+ if (addedTerms.length > 0) {
333
+ differences.push(`Added terms: ${addedTerms.join(', ')}`);
334
+ }
335
+ if (removedTerms.length > 0) {
336
+ differences.push(`Removed terms: ${removedTerms.join(', ')}`);
337
+ }
338
+ return differences;
339
+ }
340
+ }
341
+ /**
342
+ * Create and export default bridge instance
343
+ */
344
+ export function createAttentionBridge(embeddingDim = 384) {
345
+ return new AttentionBridge(embeddingDim);
346
+ }
347
+ export default AttentionBridge;
348
+ //# sourceMappingURL=attention-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attention-bridge.js","sourceRoot":"","sources":["../../src/bridges/attention-bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * DAG Bridge for Obligation Tracking
3
+ *
4
+ * Provides directed acyclic graph operations for obligation dependency
5
+ * tracking using ruvector-dag-wasm for high-performance graph algorithms.
6
+ *
7
+ * Features:
8
+ * - Obligation dependency graph construction
9
+ * - Critical path analysis
10
+ * - Topological sorting
11
+ * - Cycle detection
12
+ * - Float/slack calculation
13
+ *
14
+ * Based on ADR-034: Legal Contract Analysis Plugin
15
+ *
16
+ * @module v3/plugins/legal-contracts/bridges/dag-bridge
17
+ */
18
+ import type { IDAGBridge, Obligation, ObligationTrackingResult } from '../types.js';
19
+ /**
20
+ * DAG Bridge Implementation
21
+ */
22
+ export declare class DAGBridge implements IDAGBridge {
23
+ private wasmModule;
24
+ private initialized;
25
+ /**
26
+ * Initialize the WASM module
27
+ */
28
+ initialize(): Promise<void>;
29
+ /**
30
+ * Check if initialized
31
+ */
32
+ isInitialized(): boolean;
33
+ /**
34
+ * Build obligation dependency graph
35
+ */
36
+ buildDependencyGraph(obligations: Obligation[]): Promise<ObligationTrackingResult['graph']>;
37
+ /**
38
+ * Find critical path through obligations
39
+ */
40
+ findCriticalPath(graph: ObligationTrackingResult['graph']): Promise<string[]>;
41
+ /**
42
+ * Perform topological sort of obligations
43
+ */
44
+ topologicalSort(obligations: Obligation[]): Promise<Obligation[]>;
45
+ /**
46
+ * Detect cycles in dependency graph
47
+ */
48
+ detectCycles(graph: ObligationTrackingResult['graph']): Promise<string[][]>;
49
+ /**
50
+ * Calculate slack/float for each obligation
51
+ */
52
+ calculateFloat(graph: ObligationTrackingResult['graph'], projectEnd: Date): Promise<Map<string, number>>;
53
+ /**
54
+ * Load WASM module dynamically
55
+ */
56
+ private loadWasmModule;
57
+ /**
58
+ * Find critical path internally
59
+ */
60
+ private findCriticalPathInternal;
61
+ /**
62
+ * Calculate schedule (earliest start, latest finish, float)
63
+ */
64
+ private calculateSchedule;
65
+ /**
66
+ * Estimate duration in days for an obligation
67
+ */
68
+ private estimateDuration;
69
+ }
70
+ /**
71
+ * Create and export default bridge instance
72
+ */
73
+ export declare function createDAGBridge(): IDAGBridge;
74
+ export default DAGBridge;
75
+ //# sourceMappingURL=dag-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dag-bridge.d.ts","sourceRoot":"","sources":["../../src/bridges/dag-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,wBAAwB,EAEzB,MAAM,aAAa,CAAC;AAyCrB;;GAEG;AACH,qBAAa,SAAU,YAAW,UAAU;IAE1C,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,WAAW,CAAS;IAE5B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBjC;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACG,oBAAoB,CACxB,WAAW,EAAE,UAAU,EAAE,GACxB,OAAO,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAwE7C;;OAEG;IACG,gBAAgB,CACpB,KAAK,EAAE,wBAAwB,CAAC,OAAO,CAAC,GACvC,OAAO,CAAC,MAAM,EAAE,CAAC;IAyBpB;;OAEG;IACG,eAAe,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAkEvE;;OAEG;IACG,YAAY,CAChB,KAAK,EAAE,wBAAwB,CAAC,OAAO,CAAC,GACvC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IA+DtB;;OAEG;IACG,cAAc,CAClB,KAAK,EAAE,wBAAwB,CAAC,OAAO,CAAC,EACxC,UAAU,EAAE,IAAI,GACf,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAyB/B;;OAEG;YACW,cAAc;IAM5B;;OAEG;YACW,wBAAwB;IAyEtC;;OAEG;YACW,iBAAiB;IAyF/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAoBzB;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,UAAU,CAE5C;AAED,eAAe,SAAS,CAAC"}