diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 2c94ffa..9867de1 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -5,7 +5,7 @@ Thanks for your interest in contributing to Open Multi-Agent! This guide covers ## Setup ```bash -git clone https://github.com/JackChen-me/open-multi-agent.git +git clone https://github.com/open-multi-agent/open-multi-agent.git cd open-multi-agent npm install ``` @@ -65,7 +65,7 @@ See the [README](../README.md#architecture) for an architecture diagram. Key ent ## Where to Contribute -Check the [issues](https://github.com/JackChen-me/open-multi-agent/issues) page. Issues labeled `good first issue` are scoped and approachable. Issues labeled `help wanted` are larger but well-defined. +Check the [issues](https://github.com/open-multi-agent/open-multi-agent/issues) page. Issues labeled `good first issue` are scoped and approachable. Issues labeled `help wanted` are larger but well-defined. ## License diff --git a/.github/brand/github-social.png b/.github/brand/github-social.png index 226fb33..20d325b 100644 Binary files a/.github/brand/github-social.png and b/.github/brand/github-social.png differ diff --git a/.github/brand/github-social.svg b/.github/brand/github-social.svg index 3ce02a5..ec44100 100644 --- a/.github/brand/github-social.svg +++ b/.github/brand/github-social.svg @@ -3,4 +3,4 @@ - JackChen-me / open-multi-agentThree runtime deps.Zero config.The lightweight multi-agent orchestration engine for TypeScript. Goal to result in one runTeam() call.npm installTypeScriptMIT★ open source \ No newline at end of file + open-multi-agent / open-multi-agentThree runtime deps.Zero config.The lightweight multi-agent orchestration engine for TypeScript. Goal to result in one runTeam() call.npm installTypeScriptMIT★ open source \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md index 58f9733..da92744 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -54,7 +54,7 @@ This is the framework's key feature. When `runTeam()` is called: | Utils | `utils/semaphore.ts`, `utils/tokens.ts`, `utils/keywords.ts`, `utils/trace.ts` | Concurrency primitive, token accounting, keyword helpers, trace plumbing | | Errors | `errors.ts` | Shared error types | | Types | `types.ts` | All interfaces in one file to avoid circular deps | -| Exports | `index.ts` (root, `'open-multi-agent'`), `mcp.ts` (subpath, `'open-multi-agent/mcp'`) | Public API surface; MCP integration is a separate entry point so non-MCP users don't pay the import cost | +| Exports | `index.ts` (root, `'@open-multi-agent/core'`), `mcp.ts` (subpath, `'@open-multi-agent/core/mcp'`) | Public API surface; MCP integration is a separate entry point so non-MCP users don't pay the import cost | ### Agent Conversation Loop (AgentRunner) @@ -98,7 +98,7 @@ Optional `maxRetries`, `retryDelayMs`, `retryBackoff` on task config (used via ` ### MCP Integration -`connectMCPTools()` (in `tool/mcp.ts`) bridges Model Context Protocol servers into the `ToolRegistry`. Imported lazily and exposed via the dedicated `open-multi-agent/mcp` package subpath (`src/mcp.ts`) so users who don't need MCP don't load `@modelcontextprotocol/sdk`. +`connectMCPTools()` (in `tool/mcp.ts`) bridges Model Context Protocol servers into the `ToolRegistry`. Imported lazily and exposed via the dedicated `@open-multi-agent/core/mcp` package subpath (`src/mcp.ts`) so users who don't need MCP don't load `@modelcontextprotocol/sdk`. ### Loop Detection diff --git a/README.md b/README.md index 1bc944f..d3030b2 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,9 @@

- - - Open Multi-Agent + + + Open Multi-Agent

@@ -18,18 +18,18 @@

- npm version - CI - license + npm version + CI + MIT License TypeScript - codecov - runtime deps - GitHub stars - GitHub forks + codecov + runtime deps + GitHub stars + GitHub forks

- Animated task DAG dashboard: coordinator decomposes a goal into tasks, executes them in parallel, and synthesizes the result — with token breakdown and agent output log + Animated task DAG dashboard: coordinator decomposes a goal into tasks, executes them in parallel, and synthesizes the result — with token breakdown and agent output log


@@ -42,6 +42,9 @@ `open-multi-agent` is a multi-agent orchestration framework for TypeScript backends. Give it a goal; a coordinator agent decomposes it into a task DAG, parallelizes independents, and synthesizes the result. Three runtime dependencies, drops into any Node.js backend. +> **Package update:** the official npm package is now `@open-multi-agent/core`. +> The previous package, `@jackchen_me/open-multi-agent`, remains supported during the migration window. + > **Your engineers describe the goal, not the graph.** ## Quick Start @@ -51,11 +54,11 @@ Requires Node.js >= 18. ### Use it in your project ```bash -npm install @jackchen_me/open-multi-agent +npm install @open-multi-agent/core ``` ```typescript -import { OpenMultiAgent, type AgentConfig } from '@jackchen_me/open-multi-agent' +import { OpenMultiAgent, type AgentConfig } from '@open-multi-agent/core' const agents: AgentConfig[] = [ { name: 'architect', model: 'claude-sonnet-4-6', systemPrompt: 'Design clean API contracts.', tools: ['file_write'] }, @@ -77,7 +80,7 @@ console.log(result.success, result.totalTokenUsage.output_tokens) ### Run an example locally ```bash -git clone https://github.com/JackChen-me/open-multi-agent && cd open-multi-agent +git clone https://github.com/open-multi-agent/open-multi-agent && cd open-multi-agent npm install export ANTHROPIC_API_KEY=sk-... npx tsx examples/basics/team-collaboration.ts @@ -188,14 +191,14 @@ A quick router. Mechanism breakdown follows. - **[temodar-agent](https://github.com/xeloxa/temodar-agent)** (~60 stars). WordPress security analysis platform by [Ali Sünbül](https://github.com/xeloxa). Uses our built-in tools (`bash`, `file_*`, `grep`) directly inside a Docker runtime. Confirmed production use. - **Cybersecurity SOC (home lab).** A private setup running Qwen 2.5 + DeepSeek Coder entirely offline via Ollama, building an autonomous SOC pipeline on Wazuh + Proxmox. Early user, not yet public. -Using `open-multi-agent` in production or a side project? [Open a discussion](https://github.com/JackChen-me/open-multi-agent/discussions) and we will list it here. +Using `open-multi-agent` in production or a side project? [Open a discussion](https://github.com/open-multi-agent/open-multi-agent/discussions) and we will list it here. ### Integrations - **[Engram](https://www.engram-memory.com)** — "Git for AI memory." Syncs knowledge across agents instantly and flags conflicts. ([repo](https://github.com/Agentscreator/engram-memory)) - **[@agentsonar/oma](https://github.com/agentsonar/agentsonar-oma)** — Sidecar detecting cross-run delegation cycles, repetition, and rate bursts. -Built an integration? [Open a discussion](https://github.com/JackChen-me/open-multi-agent/discussions) to get listed. +Built an integration? [Open a discussion](https://github.com/open-multi-agent/open-multi-agent/discussions) to get listed. ### Featured partner @@ -296,12 +299,12 @@ Issues, feature requests, and PRs are welcome. Some areas where contributions wo - **Production examples.** Real-world end-to-end workflows. See [`examples/production/README.md`](./examples/production/README.md) for the acceptance criteria and submission format. - **Documentation.** Guides, tutorials, and API docs. -- **Translations.** Help translate this README into other languages. [Open a PR](https://github.com/JackChen-me/open-multi-agent/pulls). +- **Translations.** Help translate this README into other languages. [Open a PR](https://github.com/open-multi-agent/open-multi-agent/pulls). ## Contributors - - + +
@@ -357,11 +360,11 @@ Issues, feature requests, and PRs are welcome. Some areas where contributions wo ## Star History - + - - - Star History Chart + + + Star History Chart diff --git a/README_zh.md b/README_zh.md index 77a5b83..33e0389 100644 --- a/README_zh.md +++ b/README_zh.md @@ -2,9 +2,9 @@

- - - Open Multi-Agent + + + Open Multi-Agent

@@ -18,18 +18,18 @@

- npm version - CI - license + npm version + CI + MIT License TypeScript - codecov - runtime deps - GitHub stars - GitHub forks + codecov + runtime deps + GitHub stars + GitHub forks

- Animated task DAG dashboard: coordinator decomposes a goal into tasks, executes them in parallel, and synthesizes the result — with token breakdown and agent output log + Animated task DAG dashboard: coordinator decomposes a goal into tasks, executes them in parallel, and synthesizes the result — with token breakdown and agent output log


@@ -42,6 +42,9 @@ `open-multi-agent` 是面向 TypeScript 后端的多智能体编排框架。给定一个目标,协调者 agent 会将其拆解为任务 DAG,并行执行独立任务,合成最终结果。仅 3 个运行时依赖,可直接嵌入任意现有 Node.js 后端。 +> **包名更新:** 官方 npm 包已迁移到 `@open-multi-agent/core`。 +> 旧包 `@jackchen_me/open-multi-agent` 在迁移窗口内继续支持。 + > **工程师只描述目标,不画任务图。** ## 快速开始 @@ -51,11 +54,11 @@ ### 在你的项目里使用 ```bash -npm install @jackchen_me/open-multi-agent +npm install @open-multi-agent/core ``` ```typescript -import { OpenMultiAgent, type AgentConfig } from '@jackchen_me/open-multi-agent' +import { OpenMultiAgent, type AgentConfig } from '@open-multi-agent/core' const agents: AgentConfig[] = [ { name: 'architect', model: 'claude-sonnet-4-6', systemPrompt: 'Design clean API contracts.', tools: ['file_write'] }, @@ -77,7 +80,7 @@ console.log(result.success, result.totalTokenUsage.output_tokens) ### 本地试跑 ```bash -git clone https://github.com/JackChen-me/open-multi-agent && cd open-multi-agent +git clone https://github.com/open-multi-agent/open-multi-agent && cd open-multi-agent npm install export ANTHROPIC_API_KEY=sk-... npx tsx examples/basics/team-collaboration.ts @@ -188,14 +191,14 @@ Shell 和 CI 场景使用 JSON-first 的 `oma` 命令行工具。详见 [docs/cl - **[temodar-agent](https://github.com/xeloxa/temodar-agent)**(约 60 stars)。WordPress 安全分析平台,作者 [Ali Sünbül](https://github.com/xeloxa)。在 Docker runtime 里直接用我们的内置工具(`bash`、`file_*`、`grep`)。已确认生产环境使用。 - **家用服务器 Cybersecurity SOC。** 本地完全离线跑 Qwen 2.5 + DeepSeek Coder(通过 Ollama),在 Wazuh + Proxmox 上搭自主 SOC 流水线。早期用户,未公开。 -如果在生产或 side project 中使用了 `open-multi-agent`,[请开个 Discussion](https://github.com/JackChen-me/open-multi-agent/discussions),我们会将其列在这里。 +如果在生产或 side project 中使用了 `open-multi-agent`,[请开个 Discussion](https://github.com/open-multi-agent/open-multi-agent/discussions),我们会将其列在这里。 ### 集成 - **[Engram](https://www.engram-memory.com)** — "Git for AI memory." Syncs knowledge across agents instantly and flags conflicts. ([repo](https://github.com/Agentscreator/engram-memory)) - **[@agentsonar/oma](https://github.com/agentsonar/agentsonar-oma)** — Sidecar detecting cross-run delegation cycles, repetition, and rate bursts. -做了 `open-multi-agent` 集成?[开个 Discussion](https://github.com/JackChen-me/open-multi-agent/discussions),我们会将其列在这里。 +做了 `open-multi-agent` 集成?[开个 Discussion](https://github.com/open-multi-agent/open-multi-agent/discussions),我们会将其列在这里。 ### Featured partner @@ -297,12 +300,12 @@ Issue、feature request、PR 都欢迎。特别欢迎以下方面的贡献: - **生产级示例。** 端到端跑通的真实场景工作流。收录条件和提交格式见 [`examples/production/README.md`](./examples/production/README.md)。 - **文档。** 指南、教程、API 文档。 -- **翻译。** 把这份 README 翻译成其他语言。[提个 PR](https://github.com/JackChen-me/open-multi-agent/pulls)。 +- **翻译。** 把这份 README 翻译成其他语言。[提个 PR](https://github.com/open-multi-agent/open-multi-agent/pulls)。 ## 贡献者 - - + +
@@ -358,11 +361,11 @@ Issue、feature request、PR 都欢迎。特别欢迎以下方面的贡献: ## Star 趋势 - + - - - Star History Chart + + + Star History Chart diff --git a/docs/cli.md b/docs/cli.md index 9d533b3..7592315 100644 --- a/docs/cli.md +++ b/docs/cli.md @@ -9,7 +9,7 @@ It does **not** provide an interactive REPL, working-directory injection into to After installing the package, the binary is on `PATH` when using `npx` or a local `node_modules/.bin`: ```bash -npm install @jackchen_me/open-multi-agent +npm install @open-multi-agent/core npx oma help ``` diff --git a/docs/featured-partner.md b/docs/featured-partner.md index 106199d..9294ab7 100644 --- a/docs/featured-partner.md +++ b/docs/featured-partner.md @@ -19,7 +19,7 @@ $3,000 USD per partner per 12-month placement. Single partner per slot at a time ## How to apply -[Open an inquiry issue](https://github.com/JackChen-me/open-multi-agent/issues/new?title=Featured+Partner+Inquiry&labels=featured-partner-inquiry) with: +[Open an inquiry issue](https://github.com/open-multi-agent/open-multi-agent/issues/new?title=Featured+Partner+Inquiry&labels=featured-partner-inquiry) with: - A short description of your product and how it integrates with `open-multi-agent`. - A link to the integration code or live deployment. diff --git a/docs/observability.md b/docs/observability.md index 56175e1..cafc4f0 100644 --- a/docs/observability.md +++ b/docs/observability.md @@ -36,7 +36,7 @@ Forward trace spans to OpenTelemetry, Datadog, Honeycomb, Langfuse, or your own ```typescript import { writeFileSync } from 'node:fs' -import { renderTeamRunDashboard } from '@jackchen_me/open-multi-agent' +import { renderTeamRunDashboard } from '@open-multi-agent/core' const result = await orchestrator.runTeam(team, goal) writeFileSync('run.html', renderTeamRunDashboard(result)) diff --git a/docs/shared-memory.md b/docs/shared-memory.md index 93dbc6d..3fb0485 100644 --- a/docs/shared-memory.md +++ b/docs/shared-memory.md @@ -13,7 +13,7 @@ const team = orchestrator.createTeam('research-team', { For durable or cross-process backends (Redis, Postgres, Engram, etc.), implement the `MemoryStore` interface and pass it via `sharedMemoryStore`. Keys are still namespaced as `/` before reaching the store: ```typescript -import type { MemoryStore } from '@jackchen_me/open-multi-agent' +import type { MemoryStore } from '@open-multi-agent/core' class RedisStore implements MemoryStore { /* get/set/list/delete/clear */ } diff --git a/docs/tool-configuration.md b/docs/tool-configuration.md index a84db8e..a624df6 100644 --- a/docs/tool-configuration.md +++ b/docs/tool-configuration.md @@ -49,7 +49,7 @@ Two ways to give an agent a tool that is not in the built-in set. **Inject at config time** via `customTools` on `AgentConfig`. Good when the orchestrator wires up tools centrally. Tools defined here bypass preset/allowlist filtering but still respect `disallowedTools`. ```typescript -import { defineTool } from '@jackchen_me/open-multi-agent' +import { defineTool } from '@open-multi-agent/core' import { z } from 'zod' const weatherTool = defineTool({ @@ -130,7 +130,7 @@ const agent: AgentConfig = { `open-multi-agent` can connect to stdio MCP servers and expose their tools directly to agents. ```typescript -import { connectMCPTools } from '@jackchen_me/open-multi-agent/mcp' +import { connectMCPTools } from '@open-multi-agent/core/mcp' const { tools, disconnect } = await connectMCPTools({ command: 'npx', diff --git a/examples/integrations/mcp-github.ts b/examples/integrations/mcp-github.ts index dba971d..9f37011 100644 --- a/examples/integrations/mcp-github.ts +++ b/examples/integrations/mcp-github.ts @@ -50,7 +50,7 @@ const agent = new Agent( try { const result = await agent.run( - 'List the last 3 open issues in JackChen-me/open-multi-agent with title and number.', + 'List the last 3 open issues in open-multi-agent/open-multi-agent with title and number.', ) console.log(result.output) diff --git a/examples/integrations/with-vercel-ai-sdk/app/api/chat/route.ts b/examples/integrations/with-vercel-ai-sdk/app/api/chat/route.ts index 6eefe79..6c428b1 100644 --- a/examples/integrations/with-vercel-ai-sdk/app/api/chat/route.ts +++ b/examples/integrations/with-vercel-ai-sdk/app/api/chat/route.ts @@ -1,7 +1,7 @@ import { streamText, convertToModelMessages, type UIMessage } from 'ai' import { createOpenAICompatible } from '@ai-sdk/openai-compatible' -import { OpenMultiAgent } from '@jackchen_me/open-multi-agent' -import type { AgentConfig } from '@jackchen_me/open-multi-agent' +import { OpenMultiAgent } from '@open-multi-agent/core' +import type { AgentConfig } from '@open-multi-agent/core' export const maxDuration = 120 diff --git a/examples/integrations/with-vercel-ai-sdk/next.config.ts b/examples/integrations/with-vercel-ai-sdk/next.config.ts index 200ecc8..c0fb265 100644 --- a/examples/integrations/with-vercel-ai-sdk/next.config.ts +++ b/examples/integrations/with-vercel-ai-sdk/next.config.ts @@ -1,7 +1,7 @@ import type { NextConfig } from 'next' const nextConfig: NextConfig = { - serverExternalPackages: ['@jackchen_me/open-multi-agent'], + serverExternalPackages: ['@open-multi-agent/core'], } export default nextConfig diff --git a/examples/integrations/with-vercel-ai-sdk/package-lock.json b/examples/integrations/with-vercel-ai-sdk/package-lock.json index 0468f2b..8584249 100644 --- a/examples/integrations/with-vercel-ai-sdk/package-lock.json +++ b/examples/integrations/with-vercel-ai-sdk/package-lock.json @@ -8,7 +8,7 @@ "dependencies": { "@ai-sdk/openai-compatible": "^2.0.41", "@ai-sdk/react": "^3.0.0", - "@jackchen_me/open-multi-agent": "file:../../", + "@open-multi-agent/core": "file:../../", "ai": "^6.0.0", "next": "^16.0.0", "react": "^19.0.0", @@ -22,8 +22,8 @@ } }, "../..": { - "name": "@jackchen_me/open-multi-agent", - "version": "1.1.0", + "name": "@open-multi-agent/core", + "version": "1.4.0", "license": "MIT", "dependencies": { "@anthropic-ai/sdk": "^0.52.0", @@ -34,6 +34,7 @@ "oma": "dist/cli/oma.js" }, "devDependencies": { + "@aws-sdk/client-bedrock-runtime": "^3.1040.0", "@google/genai": "^1.48.0", "@modelcontextprotocol/sdk": "^1.18.0", "@types/node": "^22.0.0", @@ -46,10 +47,14 @@ "node": ">=18.0.0" }, "peerDependencies": { + "@aws-sdk/client-bedrock-runtime": "^3.700.0", "@google/genai": "^1.48.0", "@modelcontextprotocol/sdk": "^1.18.0" }, "peerDependenciesMeta": { + "@aws-sdk/client-bedrock-runtime": { + "optional": true + }, "@google/genai": { "optional": true }, @@ -614,7 +619,7 @@ "url": "https://opencollective.com/libvips" } }, - "node_modules/@jackchen_me/open-multi-agent": { + "node_modules/@open-multi-agent/core": { "resolved": "../..", "link": true }, diff --git a/examples/integrations/with-vercel-ai-sdk/package.json b/examples/integrations/with-vercel-ai-sdk/package.json index 90180cd..93eeb42 100644 --- a/examples/integrations/with-vercel-ai-sdk/package.json +++ b/examples/integrations/with-vercel-ai-sdk/package.json @@ -10,7 +10,7 @@ "dependencies": { "@ai-sdk/openai-compatible": "^2.0.41", "@ai-sdk/react": "^3.0.0", - "@jackchen_me/open-multi-agent": "file:../../", + "@open-multi-agent/core": "file:../../", "ai": "^6.0.0", "next": "^16.0.0", "react": "^19.0.0", diff --git a/package-lock.json b/package-lock.json index 61d0539..c457979 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { - "name": "@jackchen_me/open-multi-agent", - "version": "1.3.1", + "name": "@open-multi-agent/core", + "version": "1.4.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "@jackchen_me/open-multi-agent", - "version": "1.3.1", + "name": "@open-multi-agent/core", + "version": "1.4.0", "license": "MIT", "dependencies": { "@anthropic-ai/sdk": "^0.52.0", diff --git a/package.json b/package.json index cc2cdb7..8997a52 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "@jackchen_me/open-multi-agent", - "version": "1.3.1", + "name": "@open-multi-agent/core", + "version": "1.4.0", "description": "TypeScript multi-agent framework — one runTeam() call from goal to result. Auto task decomposition, parallel execution. 3 dependencies, deploys anywhere Node.js runs.", "files": [ "dist", @@ -8,6 +8,9 @@ "README.md", "LICENSE" ], + "publishConfig": { + "access": "public" + }, "type": "module", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -50,11 +53,11 @@ "license": "MIT", "repository": { "type": "git", - "url": "git+https://github.com/JackChen-me/open-multi-agent.git" + "url": "git+https://github.com/open-multi-agent/open-multi-agent.git" }, - "homepage": "https://github.com/JackChen-me/open-multi-agent#readme", + "homepage": "https://github.com/open-multi-agent/open-multi-agent#readme", "bugs": { - "url": "https://github.com/JackChen-me/open-multi-agent/issues" + "url": "https://github.com/open-multi-agent/open-multi-agent/issues" }, "engines": { "node": ">=18.0.0" diff --git a/src/agent/agent.ts b/src/agent/agent.ts index 93528f0..4adb148 100644 --- a/src/agent/agent.ts +++ b/src/agent/agent.ts @@ -11,7 +11,7 @@ * * @example * ```ts - * import { Agent, ToolRegistry, ToolExecutor, registerBuiltInTools } from 'open-multi-agent' + * import { Agent, ToolRegistry, ToolExecutor, registerBuiltInTools } from '@open-multi-agent/core' * * const registry = new ToolRegistry() * registerBuiltInTools(registry) diff --git a/src/index.ts b/src/index.ts index 49b8258..e71df5b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,10 +1,10 @@ /** * @fileoverview open-multi-agent — public API surface. * - * Import from `'open-multi-agent'` to access everything you need: + * Import from `'@open-multi-agent/core'` to access everything you need: * * ```ts - * import { OpenMultiAgent, Agent, Team, defineTool } from 'open-multi-agent' + * import { OpenMultiAgent, Agent, Team, defineTool } from '@open-multi-agent/core' * ``` * * ## Quickstart diff --git a/tests/e2e/coordinator-dependency-widening.test.ts b/tests/e2e/coordinator-dependency-widening.test.ts index 3b4d065..253efa5 100644 --- a/tests/e2e/coordinator-dependency-widening.test.ts +++ b/tests/e2e/coordinator-dependency-widening.test.ts @@ -19,7 +19,7 @@ * Requires: ANTHROPIC_API_KEY environment variable * * Reproducer: https://github.com/CodingBangboo/open-multi-agent/blob/planOnly_with_examples/examples/basics/plan-only-dag_stress_test.ts - * Issue: https://github.com/JackChen-me/open-multi-agent/issues/208 + * Issue: https://github.com/open-multi-agent/open-multi-agent/issues/208 */ import { describe, it, expect } from 'vitest' import { OpenMultiAgent } from '../../src/orchestrator/orchestrator.js'