agentic-flow 3.4.4 → 3.5.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.
@@ -15,12 +15,13 @@ agentic-flow 3.2 ships in-process integrations with six optional ruvnet packages
15
15
  |---|---|---|---|
16
16
  | Is a prompt or retrieved text trying to hijack the agent? | `prompt_injection_scan` | `aidefence` | built-in patterns |
17
17
  | Split a task-dependency graph between two agent teams | `swarm_partition_tasks` | `@ruvector/mincut-wasm` (Node >= 22) | Stoer-Wagner (exact, up to 400 tasks; always used on Node 20) |
18
+ | Order a task DAG into parallel waves and find the bottleneck chain | `swarm_schedule_tasks` | `@ruvector/rudag` | Kahn sort + longest path |
18
19
  | Rank agents, files or tasks by influence in a graph | `sublinear_pagerank` | `@ruvnet/sublinear-core` | Gauss-Seidel |
19
20
  | Solve a diagonally dominant linear system | `sublinear_solve` | `@ruvnet/sublinear-core` | Gauss-Seidel |
20
21
  | Apply a code edit without an LLM round-trip | `agent_booster_edit_file`, `agent_booster_batch_edit` | `agent-booster` | `npx agent-booster@0.2.2` |
21
22
  | See which packages are installed | `ecosystem_status` | — | — |
22
23
 
23
- All five computation tools are side-effect free and available under the default `readonly` MCP profile. The `agent_booster_*` tools write files and need the `admin` profile.
24
+ All six computation tools are side-effect free and available under the default `readonly` MCP profile. The `agent_booster_*` tools write files and need the `admin` profile.
24
25
 
25
26
  ## Prompt injection
26
27
 
@@ -33,6 +34,10 @@ All five computation tools are side-effect free and available under the default
33
34
 
34
35
  `swarm_partition_tasks({ tasks, dependencies: [{ from, to, weight }] })` returns `groups` (two task lists), `cutEdges` (the dependencies the teams must coordinate on), `cutWeight` and `isolated` (tasks with no dependencies — schedule them anywhere). Weight is coupling strength (shared files, API contracts), default 1. The cut is the weakest seam, not a balanced split: one loosely attached task against the rest is a valid answer.
35
36
 
37
+ ## Task scheduling
38
+
39
+ `swarm_schedule_tasks({ tasks: [{ id, cost }], dependencies: [{ from, to }] })` (`from` must finish before `to` starts) returns `order`, `waves` (tasks with the same earliest wave can go to separate agents at once), `earliestStart` per task, `criticalPath` (`tasks` and `cost`: the chain that bounds the run; only shortening it shortens the run), `totalCost` and `parallelism` (`totalCost / criticalPath.cost`, the speed-up ceiling from more agents). `cost` is any additive unit (minutes, tokens), default 1. A cycle is rejected with the cycle named. Use it after `swarm_partition_tasks` to order work inside each team.
40
+
36
41
  ## PageRank and linear solves
37
42
 
38
43
  - `sublinear_pagerank({ edges: [{ from, to, weight }], damping: 0.85, top: 10 })`: scores sum to 1. Use it to find the most depended-on files or the agent whose output most others consume. `damping` is the probability of following an edge (a restart probability r maps to `1 - r`).
@@ -7,6 +7,7 @@ author: agentic-flow
7
7
  capabilities:
8
8
  - prompt_injection_screening
9
9
  - task_partitioning
10
+ - task_scheduling
10
11
  - graph_ranking
11
12
  - linear_solves
12
13
  ---
@@ -21,12 +22,13 @@ agentic-flow 3.2 ships in-process integrations with six optional ruvnet packages
21
22
  |---|---|---|---|
22
23
  | Is a prompt or retrieved text trying to hijack the agent? | `prompt_injection_scan` | `aidefence` | built-in patterns |
23
24
  | Split a task-dependency graph between two agent teams | `swarm_partition_tasks` | `@ruvector/mincut-wasm` (Node >= 22) | Stoer-Wagner (exact, up to 400 tasks; always used on Node 20) |
25
+ | Order a task DAG into parallel waves and find the bottleneck chain | `swarm_schedule_tasks` | `@ruvector/rudag` | Kahn sort + longest path |
24
26
  | Rank agents, files or tasks by influence in a graph | `sublinear_pagerank` | `@ruvnet/sublinear-core` | Gauss-Seidel |
25
27
  | Solve a diagonally dominant linear system | `sublinear_solve` | `@ruvnet/sublinear-core` | Gauss-Seidel |
26
28
  | Apply a code edit without an LLM round-trip | `agent_booster_edit_file`, `agent_booster_batch_edit` | `agent-booster` | `npx agent-booster@0.2.2` |
27
29
  | See which packages are installed | `ecosystem_status` | — | — |
28
30
 
29
- All five computation tools are side-effect free and available under the default `readonly` MCP profile. The `agent_booster_*` tools write files and need the `admin` profile.
31
+ All six computation tools are side-effect free and available under the default `readonly` MCP profile. The `agent_booster_*` tools write files and need the `admin` profile.
30
32
 
31
33
  ## Prompt injection
32
34
 
@@ -39,6 +41,10 @@ All five computation tools are side-effect free and available under the default
39
41
 
40
42
  `swarm_partition_tasks({ tasks, dependencies: [{ from, to, weight }] })` returns `groups` (two task lists), `cutEdges` (the dependencies the teams must coordinate on), `cutWeight` and `isolated` (tasks with no dependencies — schedule them anywhere). Weight is coupling strength (shared files, API contracts), default 1. The cut is the weakest seam, not a balanced split: one loosely attached task against the rest is a valid answer.
41
43
 
44
+ ## Task scheduling
45
+
46
+ `swarm_schedule_tasks({ tasks: [{ id, cost }], dependencies: [{ from, to }] })` (`from` must finish before `to` starts) returns `order`, `waves` (tasks with the same earliest wave can go to separate agents at once), `earliestStart` per task, `criticalPath` (`tasks` and `cost`: the chain that bounds the run; only shortening it shortens the run), `totalCost` and `parallelism` (`totalCost / criticalPath.cost`, the speed-up ceiling from more agents). `cost` is any additive unit (minutes, tokens), default 1. A cycle is rejected with the cycle named. Use it after `swarm_partition_tasks` to order work inside each team.
47
+
42
48
  ## PageRank and linear solves
43
49
 
44
50
  - `sublinear_pagerank({ edges: [{ from, to, weight }], damping: 0.85, top: 10 })`: scores sum to 1. Use it to find the most depended-on files or the agent whose output most others consume. `damping` is the probability of following an edge (a restart probability r maps to `1 - r`).
package/CHANGELOG.md CHANGED
@@ -2,6 +2,15 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [3.5.0] - 2026-11-09
6
+
7
+ ### Added
8
+ - **Task-graph scheduling: `swarm_schedule_tasks` MCP tool and `scheduleTaskGraph()` in `agentic-flow/integrations`.** Given tasks with costs and `{ from, to }` dependencies, returns a dependency-respecting `order`, parallel `waves` (tasks that can go to separate agents at once), `earliestStart` per task, the cost-weighted `criticalPath` (the chain that bounds the run), `totalCost` and `parallelism` (`totalCost / criticalPath.cost`). Dependency cycles are rejected with the cycle named. Complements `swarm_partition_tasks`: partition picks the seam between two teams, scheduling orders the work inside them. Admitted under the default `readonly` MCP profile (pure computation).
9
+ - `@ruvector/rudag` `^0.1.2` as an optionalDependency (Rust/WASM topological sort and critical path, MIT OR Apache-2.0, adds `idb`; 2 packages, no install scripts). Loaded lazily with `storage: null`, so it never touches IndexedDB or the filesystem. Without it a built-in Kahn sort + longest-path DP answers with the same result (`engine: 'builtin'`); `tests/integrations/task-schedule.test.ts` checks both engines against the real package and that they agree on a 300-task random DAG.
10
+
11
+ ### Changed
12
+ - Package metadata (ADR-356, folded in from #261): `homepage` is https://ruv.io, `repository.directory` is `agentic-flow`, 16 keywords, a shorter description. The README gains an animated flow diagram, a "Works with / Used by" section and a ruv.io footer.
13
+
5
14
  ## [3.4.4] - 2026-11-08
6
15
 
7
16
  ### Fixed
package/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # 🚀 Agentic-Flow v2 — the Agentic Meta-Harness
2
2
 
3
+ <!-- weaver:seo:flow:start -->
4
+ ![agentic-flow: query → LLM routing → agent harness → verified result](https://raw.githubusercontent.com/ruvnet/agentic-flow/main/agentic-flow/assets/agentic-flow-flow.svg)
5
+ <!-- weaver:seo:flow:end -->
6
+
3
7
  > **Freeze the model, evolve the harness.** Agentic-Flow is an open _agentic meta-harness_: a runtime whose product is the **harness around a model**, not the model. It routes each query to the cost-optimal model, evolves its own harness and autonomously repairs code, then orchestrates 66 self-learning agents, 213 MCP tools, and multi-agent swarms on top.
4
8
 
5
9
  [![npm version](https://badge.fury.io/js/agentic-flow.svg)](https://www.npmjs.com/package/agentic-flow)
@@ -370,12 +374,28 @@ Optional ruvnet packages, installed by default and loaded lazily, each with a bu
370
374
  |---|---|---|
371
375
  | [`aidefence`](https://www.npmjs.com/package/aidefence) | prompt-injection screening of every routed task (`AGENTIC_FLOW_PROMPT_INJECTION`) | `prompt_injection_scan` |
372
376
  | [`@ruvector/mincut-wasm`](https://www.npmjs.com/package/@ruvector/mincut-wasm) | split a task-dependency graph between two agent teams (Node >= 22; built-in fallback on 20) | `swarm_partition_tasks` |
377
+ | [`@ruvector/rudag`](https://www.npmjs.com/package/@ruvector/rudag) | order a task DAG into parallel waves and find its critical path (3.5.0; Kahn + longest-path fallback) | `swarm_schedule_tasks` |
373
378
  | [`@ruvnet/sublinear-core`](https://www.npmjs.com/package/@ruvnet/sublinear-core) | verified linear solves, PageRank, personalized PageRank and forward-push top-k (zero dependencies) | `sublinear_solve`, `sublinear_pagerank` |
374
379
  | [`agent-booster`](https://www.npmjs.com/package/agent-booster) | in-process code edits | `agent_booster_edit_file` (admin) |
375
380
  | [`@ruvector/router`](https://www.npmjs.com/package/@ruvector/router) | native HNSW index for `SemanticRouter` | — |
376
381
  | [`ruvector-onnx-embeddings-wasm`](https://www.npmjs.com/package/ruvector-onnx-embeddings-wasm) | all-MiniLM-L6-v2 embeddings for `AgentDBFast` | — |
377
382
 
378
- `ecosystem_status` reports what is installed; `import { partitionTaskGraph, pageRank, scanPromptInjection } from 'agentic-flow/integrations'` gives the same functions in code. Skills: `.claude/skills/agentic-flow-ecosystem` (Claude Code) and `.agents/skills/agentic-flow-ecosystem` (Codex), both installed by `agentic-flow init`.
383
+ `ecosystem_status` reports what is installed; `import { partitionTaskGraph, scheduleTaskGraph, pageRank, scanPromptInjection } from 'agentic-flow/integrations'` gives the same functions in code. Skills: `.claude/skills/agentic-flow-ecosystem` (Claude Code) and `.agents/skills/agentic-flow-ecosystem` (Codex), both installed by `agentic-flow init`.
384
+
385
+ **Schedule a swarm's tasks (3.5.0).** `from` must finish before `to` starts; `cost` is any additive unit (minutes, tokens), default 1. Tasks in the same wave can go to separate agents at once, and only shortening the critical path shortens the run:
386
+
387
+ ```js
388
+ import { scheduleTaskGraph } from 'agentic-flow/integrations';
389
+
390
+ const s = await scheduleTaskGraph(
391
+ [{ id: 'design', cost: 5 }, { id: 'api', cost: 3 }, { id: 'impl', cost: 2 }, { id: 'review', cost: 1 }, { id: 'docs', cost: 1 }],
392
+ [{ from: 'design', to: 'impl' }, { from: 'api', to: 'impl' }, { from: 'impl', to: 'review' }, { from: 'api', to: 'docs' }],
393
+ );
394
+ console.log(s.engine, JSON.stringify(s.waves), JSON.stringify(s.criticalPath), s.parallelism);
395
+ // rudag [["design","api"],["impl","docs"],["review"]] {"tasks":["design","impl","review"],"cost":8} 1.5
396
+ ```
397
+
398
+ The MCP tool `swarm_schedule_tasks` takes the same `{ tasks, dependencies }` and also returns `order`, `earliestStart` and `totalCost`. A dependency cycle is rejected with the cycle named. Without `@ruvector/rudag` the result is identical and `engine` is `builtin`.
379
399
 
380
400
  ### 🧩 Advanced Capabilities
381
401
 
@@ -2251,3 +2271,18 @@ npm install agentic-flow@3.2.0
2251
2271
  **Grade: A+ (Perfect Integration)**
2252
2272
  **Status: Production Ready**
2253
2273
  **Last Updated: 2025-12-03**
2274
+
2275
+ <!-- weaver:seo:links:start -->
2276
+ ## Works with / Used by
2277
+
2278
+ Part of the [ruv.io](https://ruv.io) open-source stack for AI agents, LLM routing, agent orchestration.
2279
+
2280
+ - **Works with** (its runtime dependencies): [`@metaharness/router`](https://www.npmjs.com/package/@metaharness/router), [`@ruvector/edge-full`](https://www.npmjs.com/package/@ruvector/edge-full), [`@ruvector/router`](https://www.npmjs.com/package/@ruvector/router), [`@ruvector/tiny-dancer`](https://www.npmjs.com/package/@ruvector/tiny-dancer), [`agentdb`](https://www.npmjs.com/package/agentdb), [`ruvector`](https://www.npmjs.com/package/ruvector), [`ruvector-onnx-embeddings-wasm`](https://www.npmjs.com/package/ruvector-onnx-embeddings-wasm), [`@ruvector/attention`](https://www.npmjs.com/package/@ruvector/attention), [`@ruvector/mincut-wasm`](https://www.npmjs.com/package/@ruvector/mincut-wasm), [`@ruvector/rudag`](https://www.npmjs.com/package/@ruvector/rudag), [`@ruvector/sona`](https://www.npmjs.com/package/@ruvector/sona), [`@ruvnet/sublinear-core`](https://www.npmjs.com/package/@ruvnet/sublinear-core), [`agent-booster`](https://www.npmjs.com/package/agent-booster), [`aidefence`](https://www.npmjs.com/package/aidefence)
2281
+ - **Used by** (published packages that depend on it): [`@agentic-robotics/cli`](https://www.npmjs.com/package/@agentic-robotics/cli), [`@agentic-robotics/mcp`](https://www.npmjs.com/package/@agentic-robotics/mcp), [`@agentic-robotics/self-learning`](https://www.npmjs.com/package/@agentic-robotics/self-learning), [`@claude-flow/browser`](https://www.npmjs.com/package/@claude-flow/browser), [`@claude-flow/cli`](https://www.npmjs.com/package/@claude-flow/cli), [`@claude-flow/embeddings`](https://www.npmjs.com/package/@claude-flow/embeddings), [`@claude-flow/integration`](https://www.npmjs.com/package/@claude-flow/integration), [`@claude-flow/plugin-agent-federation`](https://www.npmjs.com/package/@claude-flow/plugin-agent-federation), [`@foxruv/e2b-runner`](https://www.npmjs.com/package/@foxruv/e2b-runner), [`@foxruv/iris`](https://www.npmjs.com/package/@foxruv/iris), [`@foxruv/iris-ultrathink`](https://www.npmjs.com/package/@foxruv/iris-ultrathink), [`@foxruv/nova-medicina`](https://www.npmjs.com/package/@foxruv/nova-medicina)
2282
+ <!-- weaver:seo:links:end -->
2283
+
2284
+ <!-- weaver:seo:footer:start -->
2285
+ ---
2286
+
2287
+ Built by [rUv](https://ruv.io) · [ruv.io](https://ruv.io) · [Source](https://github.com/ruvnet/agentic-flow)
2288
+ <!-- weaver:seo:footer:end -->