diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index bf56b36..05127ae 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -187,7 +187,24 @@ jobs:
- name: Run tolerant same-host observability regression gate
run: npm run bench:observability:ci
+ - name: Pack the minimum core version supported by OTel
+ id: minimum-otel-core
+ run: |
+ set -euo pipefail
+ range=$(jq -r '.dependencies["@open-multi-agent/core"]' packages/otel/package.json)
+ if [[ ! "$range" =~ ^\^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
+ echo "::error::expected an exact caret range for the OTel core dependency; got $range"
+ exit 1
+ fi
+ minimum="${range#^}"
+ filename=$(npm pack "@open-multi-agent/core@$minimum" --pack-destination "$RUNNER_TEMP" --json | jq -er '.[0].filename')
+ tarball="$RUNNER_TEMP/$filename"
+ test -f "$tarball"
+ echo "tarball=$tarball" >> "$GITHUB_OUTPUT"
+
- name: Install real core and OTel tarballs in clean consumers
+ env:
+ OMA_OBSERVABILITY_MIN_CORE_TARBALL: ${{ steps.minimum-otel-core.outputs.tarball }}
run: npm run test:observability-pack
scaffold-e2e:
diff --git a/.github/workflows/release-smoke.yml b/.github/workflows/release-smoke.yml
index 898f288..70754d5 100644
--- a/.github/workflows/release-smoke.yml
+++ b/.github/workflows/release-smoke.yml
@@ -3,7 +3,8 @@ name: Release smoke
# After a GitHub Release is published, prove that the packages we just pushed to
# npm actually work from a *user's* point of view: `npx create-oma-app@latest`
# scaffolds the recommended PR-review starter, the @open-multi-agent/core it
-# pins installs from npm, and the demo reaches the missing-key gate.
+# pins installs from npm, and the deterministic no-key demo produces all three
+# disclosed report formats without making a model request.
#
# This is a POST-publish alarm, not a gate. The release is already out, so a red
# run here means "the published bytes are broken, cut a fix" — it does not block
@@ -25,13 +26,14 @@ jobs:
- uses: actions/setup-node@v4
with:
node-version: 20
- - name: Scaffold from the published npm package and reach the run gate
+ - name: Scaffold from the published npm package and run the no-key demo
env:
# The tag is the core version (e.g. v1.11.0); create-oma-app has its
# own version, so we resolve the scaffolder via @latest and verify it
# pins THIS release's core below.
RELEASE_TAG: ${{ github.event.release.tag_name }}
- # Force the missing-key gate even if the runner ever grows these.
+ # Prove that the deterministic demo does not depend on ambient model
+ # configuration, even if the runner ever grows these variables.
OPENAI_API_KEY: ''
OMA_MODEL: ''
OPENAI_BASE_URL: ''
@@ -76,16 +78,33 @@ jobs:
echo "scaffolded the PR-review starter with create-oma-app@$(npm view create-oma-app version) → installed core@$want"
- # No API key on purpose: the demo must exit non-zero at the env gate.
- # Reaching that message proves core resolved from npm, imported, and
- # ran under tsx — a broken import or syntax error would fail elsewhere.
+ # No API key on purpose: scripted model responses must drive the real
+ # scheduler and report generation without making a model request.
set +e
out=$( cd "$project" && npm run demo 2>&1 )
code=$?
set -e
echo "$out"
- if [ "$code" -eq 0 ] || ! printf '%s' "$out" | grep -q "Missing OPENAI_API_KEY"; then
- echo "::error::expected a non-zero exit with 'Missing OPENAI_API_KEY'; got exit $code"
+ if [ "$code" -ne 0 ]; then
+ echo "::error::expected the no-key demo to succeed; got exit $code"
exit 1
fi
- echo "✓ create-oma-app@latest scaffolds the PR-review starter, installs core from npm, and reaches the run gate"
+ grep -q "Simulated model responses" <<<"$out"
+ grep -q "demo-fixture" <<<"$out"
+
+ if [ ! -d "$project/reports" ]; then
+ echo "::error::the no-key demo did not create its reports directory"
+ exit 1
+ fi
+ markdown=$(find "$project/reports" -maxdepth 1 -type f -name '*.md' -print -quit)
+ json=$(find "$project/reports" -maxdepth 1 -type f -name '*.json' -print -quit)
+ dashboard=$(find "$project/reports" -maxdepth 1 -type f -name '*.html' -print -quit)
+ if [ -z "$markdown" ] || [ -z "$json" ] || [ -z "$dashboard" ]; then
+ echo "::error::the no-key demo did not produce Markdown, JSON, and HTML reports"
+ exit 1
+ fi
+ grep -q "Demo mode" "$markdown"
+ grep -q '"mode": "demo"' "$json"
+ grep -q "Simulated model responses" "$dashboard"
+
+ echo "✓ create-oma-app@latest installs core@$want and runs the disclosed no-key demo from npm"
diff --git a/README.md b/README.md
index 984ae5f..4dd1a62 100644
--- a/README.md
+++ b/README.md
@@ -48,7 +48,7 @@
`open-multi-agent` is an AI agent orchestration framework for TypeScript backends that drops into any Node.js app. It turns one goal into an inspectable task DAG, runs it across a team of agents, and synthesizes the result, all inside your own environment. Run it local, offline, or air-gapped, mixing cloud and local models on one team.
-Use OMA when the plan should adapt at runtime, but execution still needs deterministic scheduling, explicit controls, and a trace you can inspect or replay.
+Use OMA for **dynamic workflows**: the coordinator turns a goal into a task DAG at runtime, while deterministic scheduling keeps execution inspectable, controllable, and replayable.
## Why OMA
diff --git a/README_zh.md b/README_zh.md
index 58279ac..79a8600 100644
--- a/README_zh.md
+++ b/README_zh.md
@@ -48,7 +48,7 @@
`open-multi-agent` 是面向 TypeScript 后端的多智能体编排框架,可直接嵌入任意 Node.js 应用。它把一个目标拆成可审查的任务 DAG,交给多个 Agent 执行,再合成最终结果,全程在你自己的环境中运行。可本地、断网或气隙部署,云端与本地模型同队混用。
-当任务计划需要在运行时动态生成,但执行仍需确定性调度、明确管控和可回放轨迹时,选择 OMA。
+OMA 适合**动态工作流(dynamic workflows)**:Coordinator 在运行时把目标拆成任务 DAG,确定性调度让执行保持可审查、可管控、可回放。
## 为什么选择 OMA
diff --git a/package-lock.json b/package-lock.json
index 0f2e139..5cdb3f5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6560,7 +6560,7 @@
},
"packages/core": {
"name": "@open-multi-agent/core",
- "version": "1.11.0",
+ "version": "1.12.0",
"license": "MIT",
"dependencies": {
"@anthropic-ai/sdk": "^0.52.0",
@@ -6613,7 +6613,7 @@
}
},
"packages/create-oma-app": {
- "version": "0.4.0",
+ "version": "0.5.0",
"license": "MIT",
"bin": {
"create-oma-app": "dist/index.js"
diff --git a/packages/core/README.md b/packages/core/README.md
index b33726e..1c4dda1 100644
--- a/packages/core/README.md
+++ b/packages/core/README.md
@@ -46,7 +46,7 @@
-`@open-multi-agent/core` is the OMA orchestration runtime for TypeScript backends. Give it one agent, an explicit task graph, or a goal that the coordinator can decompose at runtime.
+`@open-multi-agent/core` is the OMA orchestration runtime for TypeScript backends. Give it one agent, an explicit task graph, or a **dynamic workflow** that the coordinator generates from a goal at runtime.
The runtime schedules dependencies, runs independent work in parallel, shares context across agents, and returns an inspectable result. For product positioning and known users, see the [project overview](https://github.com/open-multi-agent/open-multi-agent#readme).
diff --git a/packages/core/README_zh.md b/packages/core/README_zh.md
index a91f99d..36ba70c 100644
--- a/packages/core/README_zh.md
+++ b/packages/core/README_zh.md
@@ -46,7 +46,7 @@
-`@open-multi-agent/core` 是面向 TypeScript 后端的 OMA 编排运行时。你可以交给它一个 Agent、一张显式任务图,或一个由 Coordinator 在运行时拆解的目标。
+`@open-multi-agent/core` 是面向 TypeScript 后端的 OMA 编排运行时。你可以交给它一个 Agent、一张显式任务图,或一条由 Coordinator 在运行时从目标生成的**动态工作流(dynamic workflow)**。
运行时负责依赖调度、并行执行、Agent 间上下文共享和可审查结果输出。产品定位与已知用户见[项目首页](https://github.com/open-multi-agent/open-multi-agent/blob/main/README_zh.md)。
diff --git a/packages/core/package.json b/packages/core/package.json
index 8f00c86..7252b97 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -1,6 +1,6 @@
{
"name": "@open-multi-agent/core",
- "version": "1.11.0",
+ "version": "1.12.0",
"description": "TypeScript multi-agent framework: one runTeam() call from goal to result. Auto task decomposition and parallel execution for multi-step LLM jobs. Deploys anywhere Node.js runs.",
"files": [
"dist",
diff --git a/packages/create-oma-app/package.json b/packages/create-oma-app/package.json
index af36ccc..5463bfc 100644
--- a/packages/create-oma-app/package.json
+++ b/packages/create-oma-app/package.json
@@ -1,6 +1,6 @@
{
"name": "create-oma-app",
- "version": "0.4.0",
+ "version": "0.5.0",
"description": "Scaffold PR review, security analysis, and multi-agent DAG starters on @open-multi-agent/core.",
"type": "module",
"bin": {
diff --git a/packages/create-oma-app/template/package.json b/packages/create-oma-app/template/package.json
index 029ca4c..977fbfb 100644
--- a/packages/create-oma-app/template/package.json
+++ b/packages/create-oma-app/template/package.json
@@ -7,7 +7,7 @@
"dev": "tsx src/index.ts"
},
"dependencies": {
- "@open-multi-agent/core": "1.11.0"
+ "@open-multi-agent/core": "1.12.0"
},
"devDependencies": {
"tsx": "^4.21.0"
diff --git a/packages/create-oma-app/templates/demo/package.json b/packages/create-oma-app/templates/demo/package.json
index d0450d2..1e7d953 100644
--- a/packages/create-oma-app/templates/demo/package.json
+++ b/packages/create-oma-app/templates/demo/package.json
@@ -8,7 +8,7 @@
"demo": "tsx src/index.ts --demo"
},
"dependencies": {
- "@open-multi-agent/core": "1.11.0"
+ "@open-multi-agent/core": "1.12.0"
},
"devDependencies": {
"tsx": "^4.21.0"
diff --git a/packages/create-oma-app/templates/pr-review/package.json b/packages/create-oma-app/templates/pr-review/package.json
index b29bdfa..c7fef60 100644
--- a/packages/create-oma-app/templates/pr-review/package.json
+++ b/packages/create-oma-app/templates/pr-review/package.json
@@ -8,7 +8,7 @@
"demo": "tsx src/index.ts --demo"
},
"dependencies": {
- "@open-multi-agent/core": "1.11.0",
+ "@open-multi-agent/core": "1.12.0",
"zod": "^3.23.0"
},
"devDependencies": {
diff --git a/packages/create-oma-app/templates/security/package.json b/packages/create-oma-app/templates/security/package.json
index b29bdfa..c7fef60 100644
--- a/packages/create-oma-app/templates/security/package.json
+++ b/packages/create-oma-app/templates/security/package.json
@@ -8,7 +8,7 @@
"demo": "tsx src/index.ts --demo"
},
"dependencies": {
- "@open-multi-agent/core": "1.11.0",
+ "@open-multi-agent/core": "1.12.0",
"zod": "^3.23.0"
},
"devDependencies": {