agentic-flow 3.4.4 → 3.5.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 (48) hide show
  1. package/.agents/skills/agentic-flow-ecosystem/SKILL.md +6 -1
  2. package/.claude/skills/agentic-flow-ecosystem/skill.md +7 -1
  3. package/CHANGELOG.md +19 -0
  4. package/README.md +36 -1
  5. package/dist/.tsbuildinfo +1 -1
  6. package/dist/config/claudeFlow.d.ts +1 -1
  7. package/dist/core/attention-native.d.ts +45 -28
  8. package/dist/core/attention-native.d.ts.map +1 -1
  9. package/dist/core/attention-native.js +131 -84
  10. package/dist/core/attention-native.js.map +1 -1
  11. package/dist/integrations/index.d.ts +2 -0
  12. package/dist/integrations/index.d.ts.map +1 -1
  13. package/dist/integrations/index.js +1 -0
  14. package/dist/integrations/index.js.map +1 -1
  15. package/dist/integrations/task-schedule.d.ts +51 -0
  16. package/dist/integrations/task-schedule.d.ts.map +1 -0
  17. package/dist/integrations/task-schedule.js +222 -0
  18. package/dist/integrations/task-schedule.js.map +1 -0
  19. package/dist/mcp/claudeFlowSdkServer.d.ts.map +1 -1
  20. package/dist/mcp/claudeFlowSdkServer.js +2 -1
  21. package/dist/mcp/claudeFlowSdkServer.js.map +1 -1
  22. package/dist/mcp/fastmcp/servers/claude-flow-sdk.js +2 -1
  23. package/dist/mcp/fastmcp/servers/claude-flow-sdk.js.map +1 -1
  24. package/dist/mcp/fastmcp/servers/http-sse.d.ts.map +1 -1
  25. package/dist/mcp/fastmcp/servers/http-sse.js +2 -1
  26. package/dist/mcp/fastmcp/servers/http-sse.js.map +1 -1
  27. package/dist/mcp/fastmcp/servers/http-streaming-updated.js +2 -1
  28. package/dist/mcp/fastmcp/servers/http-streaming-updated.js.map +1 -1
  29. package/dist/mcp/fastmcp/servers/stdio-full.js +2 -1
  30. package/dist/mcp/fastmcp/servers/stdio-full.js.map +1 -1
  31. package/dist/mcp/mcp-policy.js +1 -1
  32. package/dist/mcp/mcp-policy.js.map +1 -1
  33. package/dist/mcp/standalone-stdio.js +2 -1
  34. package/dist/mcp/standalone-stdio.js.map +1 -1
  35. package/dist/mcp/tools/ecosystem-tools.d.ts +5 -1
  36. package/dist/mcp/tools/ecosystem-tools.d.ts.map +1 -1
  37. package/dist/mcp/tools/ecosystem-tools.js +30 -1
  38. package/dist/mcp/tools/ecosystem-tools.js.map +1 -1
  39. package/dist/optimizations/configuration-tuning.d.ts +1 -1
  40. package/dist/utils/package-version.d.ts +2 -0
  41. package/dist/utils/package-version.d.ts.map +1 -1
  42. package/dist/utils/package-version.js +4 -0
  43. package/dist/utils/package-version.js.map +1 -1
  44. package/package.json +17 -66
  45. package/dist/core/agentdb-wrapper.d.ts +0 -149
  46. package/dist/core/agentdb-wrapper.d.ts.map +0 -1
  47. package/dist/core/agentdb-wrapper.js +0 -394
  48. package/dist/core/agentdb-wrapper.js.map +0 -1
@@ -26,7 +26,7 @@ export declare function getMemoryConfig(agentName?: string): {
26
26
  * Initialize swarm coordination for multi-agent tasks
27
27
  */
28
28
  export declare function getSwarmConfig(topology?: ClaudeFlowConfig['coordinationTopology']): {
29
- topology: "mesh" | "hierarchical" | "ring" | "star";
29
+ topology: "hierarchical" | "mesh" | "ring" | "star";
30
30
  maxAgents: number;
31
31
  strategy: "balanced";
32
32
  };
@@ -1,10 +1,13 @@
1
1
  /**
2
2
  * Native Attention Wrappers
3
3
  *
4
- * Properly wraps @ruvector/attention native Rust implementations
5
- * with TypedArray conversions and proper error handling
4
+ * Wraps the @ruvector/attention 2.x NAPI classes. Every 2.x kernel takes
5
+ * `compute(query: Float32Array, keys: Float32Array[], values: Float32Array[])`
6
+ * and returns one Float32Array; the constructors take positional sizes
7
+ * (MultiHead, Flash, Linear, Hyperbolic) or a config object (MoE).
6
8
  *
7
- * Note: @ruvector/attention is optional - falls back gracefully
9
+ * Note: @ruvector/attention is optional - the classes throw a clear error
10
+ * when it is missing; use attention-fallbacks.ts for the JS versions.
8
11
  */
9
12
  declare let attentionAvailable: boolean;
10
13
  export { attentionAvailable };
@@ -13,12 +16,16 @@ export interface AttentionConfig {
13
16
  numHeads?: number;
14
17
  dropoutRate?: number;
15
18
  useFlash?: boolean;
19
+ /** FlashAttention tile size (default 64) */
20
+ blockSize?: number;
21
+ /** LinearAttention random-feature count (default hiddenDim) */
22
+ numFeatures?: number;
23
+ /** HyperbolicAttention curvature (default 1.0) */
24
+ curvature?: number;
16
25
  }
26
+ type Vec = number[] | Float32Array;
17
27
  /**
18
- * Native Multi-Head Attention (uses Rust implementation)
19
- *
20
- * This wrapper properly converts between JavaScript arrays and TypedArrays
21
- * required by the native Rust implementation.
28
+ * Native Multi-Head Attention: one query attends over key/value rows.
22
29
  */
23
30
  export declare class MultiHeadAttention {
24
31
  private nativeInstance;
@@ -26,73 +33,83 @@ export declare class MultiHeadAttention {
26
33
  private numHeads;
27
34
  constructor(config: AttentionConfig);
28
35
  /**
29
- * Forward pass using native Rust implementation
36
+ * @param query - one vector of hiddenDim
37
+ * @param key - one key vector or a list of key rows
38
+ * @param value - one value vector or a list of value rows (same count as keys)
39
+ * @param mask - optional per-key mask (0 drops the key)
30
40
  */
31
- forward(query: number[] | Float32Array, key: number[] | Float32Array, value: number[] | Float32Array, mask?: number[] | Float32Array): {
41
+ forward(query: Vec, key: Vec | Vec[], value: Vec | Vec[], mask?: Vec): {
32
42
  output: number[];
33
43
  attentionWeights: number[][];
34
44
  };
35
- /**
36
- * Get dimensions
37
- */
38
45
  get dim(): number;
39
46
  get headDim(): number;
40
47
  }
41
48
  /**
42
- * Native Flash Attention (uses Rust implementation)
43
- *
44
- * Memory-efficient attention with tiling/chunking
49
+ * Native Flash Attention (tiled, memory-efficient)
45
50
  */
46
51
  export declare class FlashAttention {
47
52
  private nativeInstance;
48
53
  private hiddenDim;
49
54
  constructor(config: AttentionConfig);
50
55
  /**
51
- * Forward pass with batch support
56
+ * @param query - query rows (or one query vector)
57
+ * @param key - key rows
58
+ * @param value - value rows
59
+ * @param _numHeads - unused (flash attention here is single-head)
52
60
  */
53
- forward(query: number[][] | Float32Array[], key: number[][] | Float32Array[], value: number[][] | Float32Array[], numHeads?: number): {
61
+ forward(query: Vec[] | Vec, key: Vec[] | Vec, value: Vec[] | Vec, _numHeads?: number): {
54
62
  output: number[][];
55
63
  attentionScores: number[][];
56
64
  };
57
65
  }
58
66
  /**
59
- * Native Linear Attention (uses Rust implementation)
60
- *
61
- * O(n) complexity approximation of attention
67
+ * Native Linear Attention: O(n) random-feature approximation
62
68
  */
63
69
  export declare class LinearAttention {
64
70
  private nativeInstance;
65
71
  private hiddenDim;
66
72
  constructor(config: AttentionConfig);
67
- forward(query: number[][] | Float32Array[], key: number[][] | Float32Array[], value: number[][] | Float32Array[]): {
73
+ forward(query: Vec[] | Vec, key: Vec[] | Vec, value: Vec[] | Vec): {
68
74
  output: number[][];
69
75
  };
70
76
  }
71
77
  /**
72
- * Native Hyperbolic Attention (uses Rust implementation)
78
+ * Native Hyperbolic Attention (Poincare ball)
73
79
  */
74
80
  export declare class HyperbolicAttention {
75
81
  private nativeInstance;
76
82
  private hiddenDim;
83
+ private curvature;
77
84
  constructor(config: AttentionConfig);
78
- forward(query: number[] | Float32Array, key: number[] | Float32Array, value: number[] | Float32Array): {
85
+ /**
86
+ * @returns output, and `distance`: the hyperbolic distance from the query
87
+ * to its nearest key
88
+ */
89
+ forward(query: Vec, key: Vec | Vec[], value: Vec | Vec[]): {
79
90
  output: number[];
80
91
  distance: number;
81
92
  };
82
93
  }
83
94
  /**
84
- * Native MoE Attention (uses Rust implementation)
85
- *
86
- * Mixture of Experts with top-k routing
95
+ * Native MoE Attention: mixture of experts with top-k routing
87
96
  */
88
97
  export declare class MoEAttention {
89
- private nativeInstance;
98
+ private instances;
90
99
  private hiddenDim;
91
100
  private numExperts;
101
+ private Ctor;
92
102
  constructor(config: AttentionConfig & {
93
103
  numExperts?: number;
104
+ topK?: number;
94
105
  });
95
- forward(query: number[] | Float32Array, key: number[] | Float32Array, value: number[] | Float32Array, topK?: number): {
106
+ /** The native kernel fixes topK at construction; keep one per topK. */
107
+ private instance;
108
+ /**
109
+ * @returns output; `expertWeights` is empty (the native kernel does not
110
+ * expose its routing weights)
111
+ */
112
+ forward(query: Vec, key: Vec | Vec[], value: Vec | Vec[], topK?: number): {
96
113
  output: number[];
97
114
  expertWeights: number[];
98
115
  };
@@ -1 +1 @@
1
- {"version":3,"file":"attention-native.d.ts","sourceRoot":"","sources":["../../src/core/attention-native.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attention-native.d.ts","sourceRoot":"","sources":["../../src/core/attention-native.ts"],"names":[],"mappings":"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"}
@@ -1,41 +1,55 @@
1
1
  /**
2
2
  * Native Attention Wrappers
3
3
  *
4
- * Properly wraps @ruvector/attention native Rust implementations
5
- * with TypedArray conversions and proper error handling
4
+ * Wraps the @ruvector/attention 2.x NAPI classes. Every 2.x kernel takes
5
+ * `compute(query: Float32Array, keys: Float32Array[], values: Float32Array[])`
6
+ * and returns one Float32Array; the constructors take positional sizes
7
+ * (MultiHead, Flash, Linear, Hyperbolic) or a config object (MoE).
6
8
  *
7
- * Note: @ruvector/attention is optional - falls back gracefully
9
+ * Note: @ruvector/attention is optional - the classes throw a clear error
10
+ * when it is missing; use attention-fallbacks.ts for the JS versions.
8
11
  */
9
12
  let nativeAttention = null;
10
13
  let attentionAvailable = false;
11
14
  try {
12
- nativeAttention = await import('@ruvector/attention');
13
- attentionAvailable = true;
15
+ const mod = await import('@ruvector/attention');
16
+ // The package is CommonJS; take the named exports, or the default object.
17
+ nativeAttention = mod?.MultiHeadAttention ? mod : mod?.default;
18
+ attentionAvailable = !!nativeAttention?.MultiHeadAttention;
14
19
  }
15
20
  catch {
16
21
  console.warn('[attention-native] @ruvector/attention not available');
17
22
  }
18
23
  export { attentionAvailable };
19
- /**
20
- * Convert regular array to Float32Array if needed
21
- */
22
24
  function toFloat32Array(input) {
23
- if (input instanceof Float32Array) {
24
- return input;
25
- }
26
- return new Float32Array(input);
25
+ return input instanceof Float32Array ? input : new Float32Array(input);
27
26
  }
28
- /**
29
- * Convert Float32Array to regular array for JS compatibility
30
- */
31
27
  function toArray(input) {
32
28
  return Array.from(input);
33
29
  }
30
+ /** One vector, or a list of vectors, as a list of Float32Array rows. */
31
+ function toRows(input) {
32
+ const list = input;
33
+ if (list.length > 0 && (Array.isArray(list[0]) || list[0] instanceof Float32Array)) {
34
+ return input.map(toFloat32Array);
35
+ }
36
+ return [toFloat32Array(input)];
37
+ }
38
+ function requireNative(name) {
39
+ const ctor = nativeAttention?.[name];
40
+ if (typeof ctor !== 'function') {
41
+ throw new Error(`Failed to initialize native ${name}: @ruvector/attention is not installed`);
42
+ }
43
+ return ctor;
44
+ }
45
+ function checkDim(dim, rows, what) {
46
+ for (const r of rows) {
47
+ if (r.length !== dim)
48
+ throw new Error(`${what} has dimension ${r.length}, expected ${dim}`);
49
+ }
50
+ }
34
51
  /**
35
- * Native Multi-Head Attention (uses Rust implementation)
36
- *
37
- * This wrapper properly converts between JavaScript arrays and TypedArrays
38
- * required by the native Rust implementation.
52
+ * Native Multi-Head Attention: one query attends over key/value rows.
39
53
  */
40
54
  export class MultiHeadAttention {
41
55
  nativeInstance;
@@ -44,39 +58,45 @@ export class MultiHeadAttention {
44
58
  constructor(config) {
45
59
  this.hiddenDim = config.hiddenDim;
46
60
  this.numHeads = config.numHeads || 8;
61
+ const Ctor = requireNative('MultiHeadAttention');
47
62
  try {
48
- // Create native Rust instance
49
- this.nativeInstance = new nativeAttention.MultiHeadAttention(this.hiddenDim, this.numHeads);
63
+ this.nativeInstance = new Ctor(this.hiddenDim, this.numHeads);
50
64
  }
51
65
  catch (error) {
52
66
  throw new Error(`Failed to initialize native MultiHeadAttention: ${error.message}`);
53
67
  }
54
68
  }
55
69
  /**
56
- * Forward pass using native Rust implementation
70
+ * @param query - one vector of hiddenDim
71
+ * @param key - one key vector or a list of key rows
72
+ * @param value - one value vector or a list of value rows (same count as keys)
73
+ * @param mask - optional per-key mask (0 drops the key)
57
74
  */
58
75
  forward(query, key, value, mask) {
59
76
  try {
60
- // Convert to Float32Array for native code
61
77
  const q = toFloat32Array(query);
62
- const k = toFloat32Array(key);
63
- const v = toFloat32Array(value);
64
- const m = mask ? toFloat32Array(mask) : undefined;
65
- // Call native compute method
66
- const result = this.nativeInstance.compute(q, k, v, m);
67
- // Convert result back to regular arrays
78
+ let k = toRows(key);
79
+ let v = toRows(value);
80
+ if (k.length !== v.length)
81
+ throw new Error(`${k.length} keys but ${v.length} values`);
82
+ if (mask) {
83
+ const keep = k.map((_, i) => mask[i] !== 0);
84
+ k = k.filter((_, i) => keep[i]);
85
+ v = v.filter((_, i) => keep[i]);
86
+ if (k.length === 0)
87
+ return { output: new Array(this.hiddenDim).fill(0), attentionWeights: [[]] };
88
+ }
89
+ checkDim(this.hiddenDim, [q, ...k, ...v], 'input');
90
+ const result = this.nativeInstance.compute(q, k, v);
68
91
  return {
69
92
  output: toArray(result),
70
- attentionWeights: [[]] // Native doesn't return weights separately
93
+ attentionWeights: [[]], // the native kernel does not return weights
71
94
  };
72
95
  }
73
96
  catch (error) {
74
97
  throw new Error(`MultiHeadAttention forward failed: ${error.message}`);
75
98
  }
76
99
  }
77
- /**
78
- * Get dimensions
79
- */
80
100
  get dim() {
81
101
  return this.nativeInstance.dim;
82
102
  }
@@ -84,39 +104,41 @@ export class MultiHeadAttention {
84
104
  return this.nativeInstance.headDim;
85
105
  }
86
106
  }
107
+ /** Shared batch form: every query row attends over the same key/value rows. */
108
+ function computeRows(instance, dim, query, key, value) {
109
+ const q = toRows(query);
110
+ const k = toRows(key);
111
+ const v = toRows(value);
112
+ if (k.length !== v.length)
113
+ throw new Error(`${k.length} keys but ${v.length} values`);
114
+ checkDim(dim, [...q, ...k, ...v], 'input');
115
+ return q.map((row) => toArray(instance.compute(row, k, v)));
116
+ }
87
117
  /**
88
- * Native Flash Attention (uses Rust implementation)
89
- *
90
- * Memory-efficient attention with tiling/chunking
118
+ * Native Flash Attention (tiled, memory-efficient)
91
119
  */
92
120
  export class FlashAttention {
93
121
  nativeInstance;
94
122
  hiddenDim;
95
123
  constructor(config) {
96
124
  this.hiddenDim = config.hiddenDim;
125
+ const Ctor = requireNative('FlashAttention');
97
126
  try {
98
- this.nativeInstance = new nativeAttention.FlashAttention(this.hiddenDim);
127
+ this.nativeInstance = new Ctor(this.hiddenDim, config.blockSize ?? 64);
99
128
  }
100
129
  catch (error) {
101
130
  throw new Error(`Failed to initialize native FlashAttention: ${error.message}`);
102
131
  }
103
132
  }
104
133
  /**
105
- * Forward pass with batch support
134
+ * @param query - query rows (or one query vector)
135
+ * @param key - key rows
136
+ * @param value - value rows
137
+ * @param _numHeads - unused (flash attention here is single-head)
106
138
  */
107
- forward(query, key, value, numHeads = 8) {
139
+ forward(query, key, value, _numHeads = 8) {
108
140
  try {
109
- // Convert batch to Float32Array
110
- const q = query.map(toFloat32Array);
111
- const k = key.map(toFloat32Array);
112
- const v = value.map(toFloat32Array);
113
- // Call native compute
114
- const result = this.nativeInstance.compute(q, k, v, numHeads);
115
- // Convert result back
116
- return {
117
- output: result.map((r) => toArray(r)),
118
- attentionScores: [[]]
119
- };
141
+ return { output: computeRows(this.nativeInstance, this.hiddenDim, query, key, value), attentionScores: [[]] };
120
142
  }
121
143
  catch (error) {
122
144
  throw new Error(`FlashAttention forward failed: ${error.message}`);
@@ -124,19 +146,16 @@ export class FlashAttention {
124
146
  }
125
147
  }
126
148
  /**
127
- * Native Linear Attention (uses Rust implementation)
128
- *
129
- * O(n) complexity approximation of attention
149
+ * Native Linear Attention: O(n) random-feature approximation
130
150
  */
131
151
  export class LinearAttention {
132
152
  nativeInstance;
133
153
  hiddenDim;
134
154
  constructor(config) {
135
155
  this.hiddenDim = config.hiddenDim;
156
+ const Ctor = requireNative('LinearAttention');
136
157
  try {
137
- // LinearAttention constructor: (hiddenDim, seqLen)
138
- // We'll use hiddenDim for both since seqLen varies per forward call
139
- this.nativeInstance = new nativeAttention.LinearAttention(this.hiddenDim, this.hiddenDim);
158
+ this.nativeInstance = new Ctor(this.hiddenDim, config.numFeatures ?? this.hiddenDim);
140
159
  }
141
160
  catch (error) {
142
161
  throw new Error(`Failed to initialize native LinearAttention: ${error.message}`);
@@ -144,44 +163,59 @@ export class LinearAttention {
144
163
  }
145
164
  forward(query, key, value) {
146
165
  try {
147
- const q = query.map(toFloat32Array);
148
- const k = key.map(toFloat32Array);
149
- const v = value.map(toFloat32Array);
150
- const result = this.nativeInstance.compute(q, k, v);
151
- return {
152
- output: result.map((r) => toArray(r))
153
- };
166
+ return { output: computeRows(this.nativeInstance, this.hiddenDim, query, key, value) };
154
167
  }
155
168
  catch (error) {
156
169
  throw new Error(`LinearAttention forward failed: ${error.message}`);
157
170
  }
158
171
  }
159
172
  }
173
+ /** Poincare-ball distance for curvature c > 0. */
174
+ function poincareDistance(a, b, c) {
175
+ let diff = 0, na = 0, nb = 0;
176
+ for (let i = 0; i < a.length; i++) {
177
+ diff += (a[i] - b[i]) ** 2;
178
+ na += a[i] * a[i];
179
+ nb += b[i] * b[i];
180
+ }
181
+ const denom = (1 - c * na) * (1 - c * nb);
182
+ if (denom <= 0)
183
+ return Infinity; // a point on or outside the ball
184
+ return Math.acosh(1 + (2 * c * diff) / denom) / Math.sqrt(c);
185
+ }
160
186
  /**
161
- * Native Hyperbolic Attention (uses Rust implementation)
187
+ * Native Hyperbolic Attention (Poincare ball)
162
188
  */
163
189
  export class HyperbolicAttention {
164
190
  nativeInstance;
165
191
  hiddenDim;
192
+ curvature;
166
193
  constructor(config) {
167
194
  this.hiddenDim = config.hiddenDim;
195
+ this.curvature = config.curvature ?? 1.0;
196
+ const Ctor = requireNative('HyperbolicAttention');
168
197
  try {
169
- this.nativeInstance = new nativeAttention.HyperbolicAttention(this.hiddenDim);
198
+ this.nativeInstance = new Ctor(this.hiddenDim, this.curvature);
170
199
  }
171
200
  catch (error) {
172
201
  throw new Error(`Failed to initialize native HyperbolicAttention: ${error.message}`);
173
202
  }
174
203
  }
204
+ /**
205
+ * @returns output, and `distance`: the hyperbolic distance from the query
206
+ * to its nearest key
207
+ */
175
208
  forward(query, key, value) {
176
209
  try {
177
210
  const q = toFloat32Array(query);
178
- const k = toFloat32Array(key);
179
- const v = toFloat32Array(value);
211
+ const k = toRows(key);
212
+ const v = toRows(value);
213
+ if (k.length !== v.length)
214
+ throw new Error(`${k.length} keys but ${v.length} values`);
215
+ checkDim(this.hiddenDim, [q, ...k, ...v], 'input');
180
216
  const result = this.nativeInstance.compute(q, k, v);
181
- return {
182
- output: toArray(result.output),
183
- distance: result.distance
184
- };
217
+ const distance = Math.min(...k.map((row) => poincareDistance(q, row, this.curvature)));
218
+ return { output: toArray(result), distance };
185
219
  }
186
220
  catch (error) {
187
221
  throw new Error(`HyperbolicAttention forward failed: ${error.message}`);
@@ -189,35 +223,48 @@ export class HyperbolicAttention {
189
223
  }
190
224
  }
191
225
  /**
192
- * Native MoE Attention (uses Rust implementation)
193
- *
194
- * Mixture of Experts with top-k routing
226
+ * Native MoE Attention: mixture of experts with top-k routing
195
227
  */
196
228
  export class MoEAttention {
197
- nativeInstance;
229
+ instances = new Map();
198
230
  hiddenDim;
199
231
  numExperts;
232
+ Ctor;
200
233
  constructor(config) {
201
234
  this.hiddenDim = config.hiddenDim;
202
235
  this.numExperts = config.numExperts || 4;
236
+ this.Ctor = requireNative('MoEAttention');
203
237
  try {
204
- // MoEAttention constructor may have different signature in different versions
205
- this.nativeInstance = new nativeAttention.MoEAttention(this.hiddenDim);
238
+ this.instance(config.topK ?? 2);
206
239
  }
207
240
  catch (error) {
208
241
  throw new Error(`Failed to initialize native MoEAttention: ${error.message}`);
209
242
  }
210
243
  }
244
+ /** The native kernel fixes topK at construction; keep one per topK. */
245
+ instance(topK) {
246
+ const k = Math.max(1, Math.min(Math.floor(topK), this.numExperts));
247
+ let inst = this.instances.get(k);
248
+ if (!inst) {
249
+ inst = new this.Ctor({ dim: this.hiddenDim, numExperts: this.numExperts, topK: k });
250
+ this.instances.set(k, inst);
251
+ }
252
+ return inst;
253
+ }
254
+ /**
255
+ * @returns output; `expertWeights` is empty (the native kernel does not
256
+ * expose its routing weights)
257
+ */
211
258
  forward(query, key, value, topK = 2) {
212
259
  try {
213
260
  const q = toFloat32Array(query);
214
- const k = toFloat32Array(key);
215
- const v = toFloat32Array(value);
216
- const result = this.nativeInstance.compute(q, k, v, topK);
217
- return {
218
- output: toArray(result.output),
219
- expertWeights: toArray(result.expertWeights)
220
- };
261
+ const k = toRows(key);
262
+ const v = toRows(value);
263
+ if (k.length !== v.length)
264
+ throw new Error(`${k.length} keys but ${v.length} values`);
265
+ checkDim(this.hiddenDim, [q, ...k, ...v], 'input');
266
+ const result = this.instance(topK).compute(q, k, v);
267
+ return { output: toArray(result), expertWeights: [] };
221
268
  }
222
269
  catch (error) {
223
270
  throw new Error(`MoEAttention forward failed: ${error.message}`);
@@ -1 +1 @@
1
- {"version":3,"file":"attention-native.js","sourceRoot":"","sources":["../../src/core/attention-native.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Native Attention Wrappers\n *\n * Properly wraps @ruvector/attention native Rust implementations\n * with TypedArray conversions and proper error handling\n *\n * Note: @ruvector/attention is optional - falls back gracefully\n */\n\nlet nativeAttention: any = null;\nlet attentionAvailable = false;\n\ntry {\n nativeAttention = await import('@ruvector/attention');\n attentionAvailable = true;\n} catch {\n console.warn('[attention-native] @ruvector/attention not available');\n}\n\nexport { attentionAvailable };\n\nexport interface AttentionConfig {\n hiddenDim: number;\n numHeads?: number;\n dropoutRate?: number;\n useFlash?: boolean;\n}\n\n/**\n * Convert regular array to Float32Array if needed\n */\nfunction toFloat32Array(input: number[] | Float32Array): Float32Array {\n if (input instanceof Float32Array) {\n return input;\n }\n return new Float32Array(input);\n}\n\n/**\n * Convert Float32Array to regular array for JS compatibility\n */\nfunction toArray(input: Float32Array): number[] {\n return Array.from(input);\n}\n\n/**\n * Native Multi-Head Attention (uses Rust implementation)\n *\n * This wrapper properly converts between JavaScript arrays and TypedArrays\n * required by the native Rust implementation.\n */\nexport class MultiHeadAttention {\n private nativeInstance: any;\n private hiddenDim: number;\n private numHeads: number;\n\n constructor(config: AttentionConfig) {\n this.hiddenDim = config.hiddenDim;\n this.numHeads = config.numHeads || 8;\n\n try {\n // Create native Rust instance\n this.nativeInstance = new nativeAttention.MultiHeadAttention(\n this.hiddenDim,\n this.numHeads\n );\n } catch (error: any) {\n throw new Error(`Failed to initialize native MultiHeadAttention: ${error.message}`);\n }\n }\n\n /**\n * Forward pass using native Rust implementation\n */\n forward(\n query: number[] | Float32Array,\n key: number[] | Float32Array,\n value: number[] | Float32Array,\n mask?: number[] | Float32Array\n ): { output: number[]; attentionWeights: number[][] } {\n try {\n // Convert to Float32Array for native code\n const q = toFloat32Array(query);\n const k = toFloat32Array(key);\n const v = toFloat32Array(value);\n const m = mask ? toFloat32Array(mask) : undefined;\n\n // Call native compute method\n const result = this.nativeInstance.compute(q, k, v, m);\n\n // Convert result back to regular arrays\n return {\n output: toArray(result),\n attentionWeights: [[]] // Native doesn't return weights separately\n };\n } catch (error: any) {\n throw new Error(`MultiHeadAttention forward failed: ${error.message}`);\n }\n }\n\n /**\n * Get dimensions\n */\n get dim(): number {\n return this.nativeInstance.dim;\n }\n\n get headDim(): number {\n return this.nativeInstance.headDim;\n }\n}\n\n/**\n * Native Flash Attention (uses Rust implementation)\n *\n * Memory-efficient attention with tiling/chunking\n */\nexport class FlashAttention {\n private nativeInstance: any;\n private hiddenDim: number;\n\n constructor(config: AttentionConfig) {\n this.hiddenDim = config.hiddenDim;\n\n try {\n this.nativeInstance = new nativeAttention.FlashAttention(this.hiddenDim);\n } catch (error: any) {\n throw new Error(`Failed to initialize native FlashAttention: ${error.message}`);\n }\n }\n\n /**\n * Forward pass with batch support\n */\n forward(\n query: number[][] | Float32Array[],\n key: number[][] | Float32Array[],\n value: number[][] | Float32Array[],\n numHeads: number = 8\n ): { output: number[][]; attentionScores: number[][] } {\n try {\n // Convert batch to Float32Array\n const q = query.map(toFloat32Array);\n const k = key.map(toFloat32Array);\n const v = value.map(toFloat32Array);\n\n // Call native compute\n const result = this.nativeInstance.compute(q, k, v, numHeads);\n\n // Convert result back\n return {\n output: result.map((r: Float32Array) => toArray(r)),\n attentionScores: [[]]\n };\n } catch (error: any) {\n throw new Error(`FlashAttention forward failed: ${error.message}`);\n }\n }\n}\n\n/**\n * Native Linear Attention (uses Rust implementation)\n *\n * O(n) complexity approximation of attention\n */\nexport class LinearAttention {\n private nativeInstance: any;\n private hiddenDim: number;\n\n constructor(config: AttentionConfig) {\n this.hiddenDim = config.hiddenDim;\n\n try {\n // LinearAttention constructor: (hiddenDim, seqLen)\n // We'll use hiddenDim for both since seqLen varies per forward call\n this.nativeInstance = new nativeAttention.LinearAttention(\n this.hiddenDim,\n this.hiddenDim\n );\n } catch (error: any) {\n throw new Error(`Failed to initialize native LinearAttention: ${error.message}`);\n }\n }\n\n forward(\n query: number[][] | Float32Array[],\n key: number[][] | Float32Array[],\n value: number[][] | Float32Array[]\n ): { output: number[][] } {\n try {\n const q = query.map(toFloat32Array);\n const k = key.map(toFloat32Array);\n const v = value.map(toFloat32Array);\n\n const result = this.nativeInstance.compute(q, k, v);\n\n return {\n output: result.map((r: Float32Array) => toArray(r))\n };\n } catch (error: any) {\n throw new Error(`LinearAttention forward failed: ${error.message}`);\n }\n }\n}\n\n/**\n * Native Hyperbolic Attention (uses Rust implementation)\n */\nexport class HyperbolicAttention {\n private nativeInstance: any;\n private hiddenDim: number;\n\n constructor(config: AttentionConfig) {\n this.hiddenDim = config.hiddenDim;\n\n try {\n this.nativeInstance = new nativeAttention.HyperbolicAttention(this.hiddenDim);\n } catch (error: any) {\n throw new Error(`Failed to initialize native HyperbolicAttention: ${error.message}`);\n }\n }\n\n forward(\n query: number[] | Float32Array,\n key: number[] | Float32Array,\n value: number[] | Float32Array\n ): { output: number[]; distance: number } {\n try {\n const q = toFloat32Array(query);\n const k = toFloat32Array(key);\n const v = toFloat32Array(value);\n\n const result = this.nativeInstance.compute(q, k, v);\n\n return {\n output: toArray(result.output),\n distance: result.distance\n };\n } catch (error: any) {\n throw new Error(`HyperbolicAttention forward failed: ${error.message}`);\n }\n }\n}\n\n/**\n * Native MoE Attention (uses Rust implementation)\n *\n * Mixture of Experts with top-k routing\n */\nexport class MoEAttention {\n private nativeInstance: any;\n private hiddenDim: number;\n private numExperts: number;\n\n constructor(config: AttentionConfig & { numExperts?: number }) {\n this.hiddenDim = config.hiddenDim;\n this.numExperts = config.numExperts || 4;\n\n try {\n // MoEAttention constructor may have different signature in different versions\n this.nativeInstance = new (nativeAttention.MoEAttention as any)(\n this.hiddenDim\n );\n } catch (error: any) {\n throw new Error(`Failed to initialize native MoEAttention: ${error.message}`);\n }\n }\n\n forward(\n query: number[] | Float32Array,\n key: number[] | Float32Array,\n value: number[] | Float32Array,\n topK: number = 2\n ): { output: number[]; expertWeights: number[] } {\n try {\n const q = toFloat32Array(query);\n const k = toFloat32Array(key);\n const v = toFloat32Array(value);\n\n const result = this.nativeInstance.compute(q, k, v, topK);\n\n return {\n output: toArray(result.output),\n expertWeights: toArray(result.expertWeights)\n };\n } catch (error: any) {\n throw new Error(`MoEAttention forward failed: ${error.message}`);\n }\n }\n}\n\n/**\n * Scaled Dot-Product Attention (pure JavaScript, always works)\n */\nexport function scaledDotProductAttention(\n query: number[],\n key: number[],\n value: number[],\n mask?: number[]\n): { output: number[]; weights: number[] } {\n const dk = query.length;\n\n // Compute attention scores: Q · K^T / sqrt(dk)\n let score = 0;\n for (let i = 0; i < dk; i++) {\n score += query[i] * key[i];\n }\n score /= Math.sqrt(dk);\n\n // Apply mask if provided\n if (mask && mask[0] === 0) {\n score = -Infinity;\n }\n\n // Softmax (single score version)\n const expScore = Math.exp(score);\n const weight = expScore;\n\n // Weighted value\n const output = value.map(v => v * weight);\n\n return { output, weights: [weight] };\n}\n\n/**\n * Check if native attention is available\n */\nexport function isNativeAttentionAvailable(): boolean {\n try {\n const test = new nativeAttention.MultiHeadAttention(128, 4);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Factory function to create appropriate attention module\n */\nexport function createAttention(\n type: 'multi-head' | 'flash' | 'linear' | 'hyperbolic' | 'moe',\n config: AttentionConfig\n): MultiHeadAttention | FlashAttention | LinearAttention | HyperbolicAttention | MoEAttention {\n switch (type) {\n case 'multi-head':\n return new MultiHeadAttention(config);\n case 'flash':\n return new FlashAttention(config);\n case 'linear':\n return new LinearAttention(config);\n case 'hyperbolic':\n return new HyperbolicAttention(config);\n case 'moe':\n return new MoEAttention(config);\n default:\n return new MultiHeadAttention(config);\n }\n}\n"]}
1
+ {"version":3,"file":"attention-native.js","sourceRoot":"","sources":["../../src/core/attention-native.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Native Attention Wrappers\n *\n * Wraps the @ruvector/attention 2.x NAPI classes. Every 2.x kernel takes\n * `compute(query: Float32Array, keys: Float32Array[], values: Float32Array[])`\n * and returns one Float32Array; the constructors take positional sizes\n * (MultiHead, Flash, Linear, Hyperbolic) or a config object (MoE).\n *\n * Note: @ruvector/attention is optional - the classes throw a clear error\n * when it is missing; use attention-fallbacks.ts for the JS versions.\n */\n\nlet nativeAttention: any = null;\nlet attentionAvailable = false;\n\ntry {\n const mod: any = await import('@ruvector/attention');\n // The package is CommonJS; take the named exports, or the default object.\n nativeAttention = mod?.MultiHeadAttention ? mod : mod?.default;\n attentionAvailable = !!nativeAttention?.MultiHeadAttention;\n} catch {\n console.warn('[attention-native] @ruvector/attention not available');\n}\n\nexport { attentionAvailable };\n\nexport interface AttentionConfig {\n hiddenDim: number;\n numHeads?: number;\n dropoutRate?: number;\n useFlash?: boolean;\n /** FlashAttention tile size (default 64) */\n blockSize?: number;\n /** LinearAttention random-feature count (default hiddenDim) */\n numFeatures?: number;\n /** HyperbolicAttention curvature (default 1.0) */\n curvature?: number;\n}\n\ntype Vec = number[] | Float32Array;\n\nfunction toFloat32Array(input: Vec): Float32Array {\n return input instanceof Float32Array ? input : new Float32Array(input);\n}\n\nfunction toArray(input: Float32Array): number[] {\n return Array.from(input);\n}\n\n/** One vector, or a list of vectors, as a list of Float32Array rows. */\nfunction toRows(input: Vec | Vec[]): Float32Array[] {\n const list = input as unknown[];\n if (list.length > 0 && (Array.isArray(list[0]) || list[0] instanceof Float32Array)) {\n return (input as Vec[]).map(toFloat32Array);\n }\n return [toFloat32Array(input as Vec)];\n}\n\nfunction requireNative(name: string): any {\n const ctor = nativeAttention?.[name];\n if (typeof ctor !== 'function') {\n throw new Error(`Failed to initialize native ${name}: @ruvector/attention is not installed`);\n }\n return ctor;\n}\n\nfunction checkDim(dim: number, rows: Float32Array[], what: string): void {\n for (const r of rows) {\n if (r.length !== dim) throw new Error(`${what} has dimension ${r.length}, expected ${dim}`);\n }\n}\n\n/**\n * Native Multi-Head Attention: one query attends over key/value rows.\n */\nexport class MultiHeadAttention {\n private nativeInstance: any;\n private hiddenDim: number;\n private numHeads: number;\n\n constructor(config: AttentionConfig) {\n this.hiddenDim = config.hiddenDim;\n this.numHeads = config.numHeads || 8;\n const Ctor = requireNative('MultiHeadAttention');\n try {\n this.nativeInstance = new Ctor(this.hiddenDim, this.numHeads);\n } catch (error: any) {\n throw new Error(`Failed to initialize native MultiHeadAttention: ${error.message}`);\n }\n }\n\n /**\n * @param query - one vector of hiddenDim\n * @param key - one key vector or a list of key rows\n * @param value - one value vector or a list of value rows (same count as keys)\n * @param mask - optional per-key mask (0 drops the key)\n */\n forward(query: Vec, key: Vec | Vec[], value: Vec | Vec[], mask?: Vec): { output: number[]; attentionWeights: number[][] } {\n try {\n const q = toFloat32Array(query);\n let k = toRows(key);\n let v = toRows(value);\n if (k.length !== v.length) throw new Error(`${k.length} keys but ${v.length} values`);\n if (mask) {\n const keep = k.map((_, i) => mask[i] !== 0);\n k = k.filter((_, i) => keep[i]);\n v = v.filter((_, i) => keep[i]);\n if (k.length === 0) return { output: new Array(this.hiddenDim).fill(0), attentionWeights: [[]] };\n }\n checkDim(this.hiddenDim, [q, ...k, ...v], 'input');\n const result: Float32Array = this.nativeInstance.compute(q, k, v);\n return {\n output: toArray(result),\n attentionWeights: [[]], // the native kernel does not return weights\n };\n } catch (error: any) {\n throw new Error(`MultiHeadAttention forward failed: ${error.message}`);\n }\n }\n\n get dim(): number {\n return this.nativeInstance.dim;\n }\n\n get headDim(): number {\n return this.nativeInstance.headDim;\n }\n}\n\n/** Shared batch form: every query row attends over the same key/value rows. */\nfunction computeRows(instance: any, dim: number, query: Vec[] | Vec, key: Vec[] | Vec, value: Vec[] | Vec): number[][] {\n const q = toRows(query);\n const k = toRows(key);\n const v = toRows(value);\n if (k.length !== v.length) throw new Error(`${k.length} keys but ${v.length} values`);\n checkDim(dim, [...q, ...k, ...v], 'input');\n return q.map((row) => toArray(instance.compute(row, k, v)));\n}\n\n/**\n * Native Flash Attention (tiled, memory-efficient)\n */\nexport class FlashAttention {\n private nativeInstance: any;\n private hiddenDim: number;\n\n constructor(config: AttentionConfig) {\n this.hiddenDim = config.hiddenDim;\n const Ctor = requireNative('FlashAttention');\n try {\n this.nativeInstance = new Ctor(this.hiddenDim, config.blockSize ?? 64);\n } catch (error: any) {\n throw new Error(`Failed to initialize native FlashAttention: ${error.message}`);\n }\n }\n\n /**\n * @param query - query rows (or one query vector)\n * @param key - key rows\n * @param value - value rows\n * @param _numHeads - unused (flash attention here is single-head)\n */\n forward(query: Vec[] | Vec, key: Vec[] | Vec, value: Vec[] | Vec, _numHeads: number = 8): { output: number[][]; attentionScores: number[][] } {\n try {\n return { output: computeRows(this.nativeInstance, this.hiddenDim, query, key, value), attentionScores: [[]] };\n } catch (error: any) {\n throw new Error(`FlashAttention forward failed: ${error.message}`);\n }\n }\n}\n\n/**\n * Native Linear Attention: O(n) random-feature approximation\n */\nexport class LinearAttention {\n private nativeInstance: any;\n private hiddenDim: number;\n\n constructor(config: AttentionConfig) {\n this.hiddenDim = config.hiddenDim;\n const Ctor = requireNative('LinearAttention');\n try {\n this.nativeInstance = new Ctor(this.hiddenDim, config.numFeatures ?? this.hiddenDim);\n } catch (error: any) {\n throw new Error(`Failed to initialize native LinearAttention: ${error.message}`);\n }\n }\n\n forward(query: Vec[] | Vec, key: Vec[] | Vec, value: Vec[] | Vec): { output: number[][] } {\n try {\n return { output: computeRows(this.nativeInstance, this.hiddenDim, query, key, value) };\n } catch (error: any) {\n throw new Error(`LinearAttention forward failed: ${error.message}`);\n }\n }\n}\n\n/** Poincare-ball distance for curvature c > 0. */\nfunction poincareDistance(a: Float32Array, b: Float32Array, c: number): number {\n let diff = 0, na = 0, nb = 0;\n for (let i = 0; i < a.length; i++) {\n diff += (a[i] - b[i]) ** 2;\n na += a[i] * a[i];\n nb += b[i] * b[i];\n }\n const denom = (1 - c * na) * (1 - c * nb);\n if (denom <= 0) return Infinity; // a point on or outside the ball\n return Math.acosh(1 + (2 * c * diff) / denom) / Math.sqrt(c);\n}\n\n/**\n * Native Hyperbolic Attention (Poincare ball)\n */\nexport class HyperbolicAttention {\n private nativeInstance: any;\n private hiddenDim: number;\n private curvature: number;\n\n constructor(config: AttentionConfig) {\n this.hiddenDim = config.hiddenDim;\n this.curvature = config.curvature ?? 1.0;\n const Ctor = requireNative('HyperbolicAttention');\n try {\n this.nativeInstance = new Ctor(this.hiddenDim, this.curvature);\n } catch (error: any) {\n throw new Error(`Failed to initialize native HyperbolicAttention: ${error.message}`);\n }\n }\n\n /**\n * @returns output, and `distance`: the hyperbolic distance from the query\n * to its nearest key\n */\n forward(query: Vec, key: Vec | Vec[], value: Vec | Vec[]): { output: number[]; distance: number } {\n try {\n const q = toFloat32Array(query);\n const k = toRows(key);\n const v = toRows(value);\n if (k.length !== v.length) throw new Error(`${k.length} keys but ${v.length} values`);\n checkDim(this.hiddenDim, [q, ...k, ...v], 'input');\n const result: Float32Array = this.nativeInstance.compute(q, k, v);\n const distance = Math.min(...k.map((row) => poincareDistance(q, row, this.curvature)));\n return { output: toArray(result), distance };\n } catch (error: any) {\n throw new Error(`HyperbolicAttention forward failed: ${error.message}`);\n }\n }\n}\n\n/**\n * Native MoE Attention: mixture of experts with top-k routing\n */\nexport class MoEAttention {\n private instances = new Map<number, any>();\n private hiddenDim: number;\n private numExperts: number;\n private Ctor: any;\n\n constructor(config: AttentionConfig & { numExperts?: number; topK?: number }) {\n this.hiddenDim = config.hiddenDim;\n this.numExperts = config.numExperts || 4;\n this.Ctor = requireNative('MoEAttention');\n try {\n this.instance(config.topK ?? 2);\n } catch (error: any) {\n throw new Error(`Failed to initialize native MoEAttention: ${error.message}`);\n }\n }\n\n /** The native kernel fixes topK at construction; keep one per topK. */\n private instance(topK: number): any {\n const k = Math.max(1, Math.min(Math.floor(topK), this.numExperts));\n let inst = this.instances.get(k);\n if (!inst) {\n inst = new this.Ctor({ dim: this.hiddenDim, numExperts: this.numExperts, topK: k });\n this.instances.set(k, inst);\n }\n return inst;\n }\n\n /**\n * @returns output; `expertWeights` is empty (the native kernel does not\n * expose its routing weights)\n */\n forward(query: Vec, key: Vec | Vec[], value: Vec | Vec[], topK: number = 2): { output: number[]; expertWeights: number[] } {\n try {\n const q = toFloat32Array(query);\n const k = toRows(key);\n const v = toRows(value);\n if (k.length !== v.length) throw new Error(`${k.length} keys but ${v.length} values`);\n checkDim(this.hiddenDim, [q, ...k, ...v], 'input');\n const result: Float32Array = this.instance(topK).compute(q, k, v);\n return { output: toArray(result), expertWeights: [] };\n } catch (error: any) {\n throw new Error(`MoEAttention forward failed: ${error.message}`);\n }\n }\n}\n\n/**\n * Scaled Dot-Product Attention (pure JavaScript, always works)\n */\nexport function scaledDotProductAttention(\n query: number[],\n key: number[],\n value: number[],\n mask?: number[]\n): { output: number[]; weights: number[] } {\n const dk = query.length;\n\n // Compute attention scores: Q · K^T / sqrt(dk)\n let score = 0;\n for (let i = 0; i < dk; i++) {\n score += query[i] * key[i];\n }\n score /= Math.sqrt(dk);\n\n // Apply mask if provided\n if (mask && mask[0] === 0) {\n score = -Infinity;\n }\n\n // Softmax (single score version)\n const expScore = Math.exp(score);\n const weight = expScore;\n\n // Weighted value\n const output = value.map(v => v * weight);\n\n return { output, weights: [weight] };\n}\n\n/**\n * Check if native attention is available\n */\nexport function isNativeAttentionAvailable(): boolean {\n try {\n const test = new nativeAttention.MultiHeadAttention(128, 4);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Factory function to create appropriate attention module\n */\nexport function createAttention(\n type: 'multi-head' | 'flash' | 'linear' | 'hyperbolic' | 'moe',\n config: AttentionConfig\n): MultiHeadAttention | FlashAttention | LinearAttention | HyperbolicAttention | MoEAttention {\n switch (type) {\n case 'multi-head':\n return new MultiHeadAttention(config);\n case 'flash':\n return new FlashAttention(config);\n case 'linear':\n return new LinearAttention(config);\n case 'hyperbolic':\n return new HyperbolicAttention(config);\n case 'moe':\n return new MoEAttention(config);\n default:\n return new MultiHeadAttention(config);\n }\n}\n"]}
@@ -6,6 +6,8 @@ export { scanPromptInjection, promptInjectionEngine, getInjectionPolicy } from '
6
6
  export type { InjectionScan, InjectionThreat, InjectionPolicy, InjectionSeverity } from './prompt-injection.js';
7
7
  export { partitionTaskGraph } from './task-partition.js';
8
8
  export type { TaskDependency, TaskPartition } from './task-partition.js';
9
+ export { scheduleTaskGraph } from './task-schedule.js';
10
+ export type { ScheduleTask, ScheduleDependency, TaskSchedule } from './task-schedule.js';
9
11
  export { solveLinearSystem, pageRank, loadSublinearCore } from './sublinear.js';
10
12
  export type { LinearSolveResult, PageRankResult, PageRankOptions, PageRankEdge, MatrixInput, SparseEntry, SolveMethod, SublinearEngine } from './sublinear.js';
11
13
  export { applyAgentBoosterEdit, getAgentBoosterLibrary } from './agent-booster.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACvG,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAChH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAChF,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC/J,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACnF,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC7H,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACvG,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAChH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAChF,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC/J,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACnF,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC7H,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
@@ -4,6 +4,7 @@
4
4
  */
5
5
  export { scanPromptInjection, promptInjectionEngine, getInjectionPolicy } from './prompt-injection.js';
6
6
  export { partitionTaskGraph } from './task-partition.js';
7
+ export { scheduleTaskGraph } from './task-schedule.js';
7
8
  export { solveLinearSystem, pageRank, loadSublinearCore } from './sublinear.js';
8
9
  export { applyAgentBoosterEdit, getAgentBoosterLibrary } from './agent-booster.js';
9
10
  export { OnnxWasmTextEmbedder, getOnnxWasmEmbedder, loadOnnxWasmModule, onnxWasmModelCached } from './onnx-wasm-embedder.js';