Commit Graph
473 Commits
Author SHA1 Message Date
Jack Chen 098371cf0c feat: activate maintainer bot via GitHub Actions 2026-08-11 03:21:25 +08:00
Jack Chen 2f1198f4f1 Merge pull request #487 from open-multi-agent/feat/oma-maintainer-bot
feat: add OMA maintainer bot
2026-08-11 01:22:02 +08:00
Jack Chen 587f4bd8de feat: add OMA maintainer bot 2026-08-10 20:28:14 +08:00
Jack Chen 173d4c413b docs: surface examples in README navigation (#486) 2026-08-10 19:45:55 +08:00
Jack Chen 8fa3bb8362 feat(release): add OMA-powered release bot (#483)
* feat(release): add OMA-powered release bot

* fix(release): harden bot execution boundaries

* chore(release): schedule bot for Friday evening
2026-08-10 17:18:29 +08:00
Jack Chen 4f9d7b5803 feat(core): add framework-owned LLM egress policy (#478)
Closes #473
2026-08-10 15:54:43 +08:00
Jack Chen b145fd19e6 feat(core): add pluggable shell executor (#477) 2026-08-10 15:39:08 +08:00
Jack Chen 566a59e7ad docs: sync public guidance with current behavior (#484) 2026-08-10 12:43:00 +08:00
Jack Chen 00f18baac6 chore: release core v1.15.0 and create-oma-app v0.8.0 (#482) v1.15.0 2026-08-10 10:56:00 +08:00
Jack Chen f14708b308 feat(core): support rich tool results (#479)
- separate application-owned data from model-visible text, image, and file content
- map rich results across built-in adapters and preserve them through recovery
- retain backward compatibility for string tools and text-only errors

Closes #466
2026-08-08 11:49:55 +08:00
Jack Chen 1fca8331a5 feat(core): accept structured agent input (#476) 2026-08-08 11:28:39 +08:00
Jack Chen 083916d932 feat(approval): add durable suspend and resume gates (#480)
* feat(approval): add durable suspend and resume gates (#474)

* test(approval): cover durable validation failures (#474)
2026-08-08 03:40:10 +08:00
Jack Chen 8e83b42415 feat(checkpoint): resume interrupted agent turns (#475)
Persist built-in runner messages, turn accounting, and per-call tool results in checkpoint schema v3.

Replay committed results and rerun only missing calls with stable tool-call IDs.

Closes #312
2026-08-08 03:26:37 +08:00
Aryan Singh K. 32d5e8cf51 feat(agent): restore persisted conversation history (#470) 2026-08-07 16:10:48 +08:00
Jack Chen 04ade0fcbb docs: backfill changelog history (#464) 2026-08-03 01:15:13 +08:00
Jack Chen 6a50f8f9ad docs(tool-configuration): correct the runTeam routing default (#463)
`docs/tool-configuration.md` described the automatic `runTeam()` route as
Hybrid by default and told readers to set
`executionRouting: { strategy: 'deterministic' }` to restore no-profiler
behavior. Both halves are inverted, and they contradict the 1.14.0
Compatibility note in the changelog, `docs/execution-routing.md`, and the
core README.

The text is a leftover from before e0e4cf6 ("fix(core): make hybrid routing
opt-in"), which updated `docs/execution-routing.md`,
`packages/core/README.md`, and `docs/evaluation.md` but not this file.

The implementation agrees that Hybrid is opt-in:

- `types.ts` documents `deterministic` as the `strategy` default.
- The orchestrator resolves `strategy ?? 'deterministic'` for both the
  constructor config and the per-run override.
- Semantic profiling is gated on `strategy === 'hybrid'`, so the default
  path makes no profiler call.
- `semantic-routing.test.ts` asserts that an orchestrator configured with no
  `executionRouting` produces no `semanticRoutingAssessment`.

Point the corrected sentence at `docs/execution-routing.md`, which already
owns the strategy details, and rewrap the paragraph that the stale edit left
broken mid-sentence.

A repository-wide scan found no other occurrence of the inverted claim.
2026-08-02 19:59:59 +08:00
Jack Chen 7655299f1a docs: flag the 1.14.0 breaking changes and fix release note wrapping (#462)
1.14.0 raised the engines floor to Node 20 and moved openai from v4 to v6,
but shipped as a minor with no breaking-change notice. The conventional
commits `!` marker on the dependency upgrade never reached the changelog or
the release, so a `^1.x` caller on Node 18 received it with only an
EBADENGINE warning.

- CHANGELOG.md opens 1.14.0 with a Breaking changes section, collecting the
  Node floor, the openai major, and the newly rejected plans that were
  scattered across Changed and Compatibility.
- RELEASING.md gains a breaking-change decision step that runs before the
  release commit, and records that release bodies are rendered with GFM hard
  line breaks, so changelog text pasted at 80 columns renders as truncated
  lines.
2026-08-02 19:21:56 +08:00
Jack Chen 0dc028d2b0 docs(readme): lead with the quickstart and fix the root snippet (#461)
The root README put its first line of code roughly four screens down and the
snippet a reader lands on could not be run as written.

Lower the cost of the first run:

- State that `OPENAI_API_KEY` is required, and link to the provider docs. The
  snippet declared `defaultProvider: 'openai'` but never said which credential
  to set.
- Read the model from `process.env.OMA_MODEL ?? 'gpt-5.4'`, matching the core
  README, the scaffolder templates, and the examples. The root copy was the
  only one pinning a bare model id.
- Print the task graph the coordinator generated at runtime, so the "describe
  the goal, not the graph" claim has evidence in the one place readers look.

Reduce the distance to that snippet:

- Move Get started above Why OMA.
- Flatten Why OMA from three bullet levels to two, 298 to 241 words.
- Tighten the Built with OMA entries, 295 to 259 words, order unchanged.
- Drop the stars, forks, and hardcoded TypeScript badges, 7 down to 4. GitHub
  renders the first two natively just above the README, and the third needed a
  manual bump on every TypeScript upgrade.
- Align the English commercial support section with the Chinese one, and stop
  duplicating the scaffolder flags that the core guide owns.

Measured on the rendered page with main as the control, same viewport and
content width: the first code block moves from 1569px to 730px relative to the
README body, which is screen 4.2 to screen 3.1 at a 720px viewport.

Both snippets type-check against the built core package types.
2026-08-01 11:59:01 +08:00
Jack Chen b72632460a chore(deps): refresh the AWS SDK lockfile pin to clear fast-xml advisories (#460)
The root `npm audit --omit=dev` reported two `fast-xml-builder` advisories,
GHSA-5wm8-gmm8-39j9 (high) and GHSA-45c6-75p6-83cc (moderate), reached through
`@aws-sdk/client-bedrock-runtime@3.1040.0`.

Consumers were never exposed. The Bedrock SDK is an optional peer dependency,
so a plain `@open-multi-agent/core` install resolves four packages, contains no
`@aws-sdk` directory, and audits clean. The advisories only ever sat in this
repository's own development tree.

`packages/core/package.json` already declares `^3.1040.0`, which permits the
fixed version, so only the lockfile pin held the vulnerable chain in place.
Refresh it to 3.1101.0, whose dependency tree no longer contains
`@aws-sdk/xml-builder`'s `fast-xml-parser` chain at all. No manifest changes.
2026-08-01 11:24:07 +08:00
Jack Chen 4b9e96f3da chore: release core v1.14.0 + otel v0.1.1 + create-oma-app v0.7.0 (#459)
Bump the three published packages for the coordinated npm release of the work
merged after v1.13.0, pin every generated starter to core 1.14.0, and finalize
the 1.14.0 changelog.

Core ships adaptive plan recovery, opt-in hybrid semantic execution routing,
DeepSeek V4 Flash reasoning controls, globally enforced task requirements, and
fail-closed validation for task DAGs and coordinator plans. The engines floor
moves from Node 18 to Node 20 across all three packages, so otel is republished
to carry that change; its core dependency range stays ^1.11.0.
v1.14.0
2026-08-01 11:00:11 +08:00
Jack Chen 29a4bcaf3c chore(deps): restore AI SDK 7 development dependencies (#458)
#453 retargeted OpenAI to v6 and retained Node 20, and lowered the AI SDK
development dependencies in the same pass. Core still declares
`ai: ^5.0.0 || ^6.0.0 || ^7.0.0` as an optional peer range, so the AI SDK 7
support added in #348 was left without any test coverage.

Restore `ai` to ^7.0.0 and `@ai-sdk/openai` and `@ai-sdk/provider` to ^4.0.0
so the adapter is exercised against the newest range the package advertises.
These are development dependencies only, so no published bytes change.

`ai@7` declares `engines: node >=22` while core supports Node 20, so the
Node 20 leg now logs EBADENGINE warnings. The repository sets no
`engine-strict`, so installation still exits 0 and the full suite passes.

Refs #348, #453
2026-08-01 10:43:58 +08:00
Jack Chen 676dea125b docs: add a release guide and cover the OTel adapter in post-publish smoke (#457)
* ci(release-smoke): verify the published OTel adapter against the released core

@open-multi-agent/otel rides its own version track and carries no git tag, so
the post-publish smoke test covered core and create-oma-app but never otel.

Add an otel-consumer job that reads the otel version from the release commit,
installs it alongside the released core in a clean consumer, asserts npm
resolved the core we just published rather than quietly falling back to an
older one the dependency range still allows, and exports a span through
createOtelTraceSink.

When otel did not change in a release, its version is already live from an
earlier one and the job still proves the pairing holds against the new core.

* docs(release): document the three-package release process

The repository publishes three packages with independent version tracks, a
fixed publish order, and template pins that must move with the core version.
None of that was written down, so it had to be reconstructed from package
manifests, git tags, and the workflows each time.

Record what ships, the ordered steps and why each depends on the previous one,
what a release commit must contain, and what CI proves before merge versus what
release-smoke proves after publish.

* docs(agents): sharpen the architecture map and link the release guide

Replace the per-area entry point table with the directory layout plus the
published export surface, which stays accurate as subsystems move. Mark the
subsystem documentation table as a curated selection rather than a complete
index of docs/, and add the routing, scheduling, consensus, recovery, and
replay docs to it.

Link the new release guide, and add the Claude Code shim next to the existing
packages/create-oma-app/AGENTS.md so package-level rules load there the same way
they do at the repository root.
2026-08-01 01:16:39 +08:00
Jack Chen b6ecd96125 chore(dev): standardize worktree setup (#456)
* chore(dev): standardize worktree setup

* chore(dev): keep setup tool neutral
2026-07-31 17:05:32 +08:00
Jack Chen 5ce8b9428d feat(core): support DeepSeek V4 Flash thinking controls (#455)
Map OMA thinking controls to DeepSeek's native request shape, keep the provider-specific max effort isolated from other OpenAI-family adapters, and refresh model guidance and canary coverage.
2026-07-31 16:35:43 +08:00
Jack Chen c2b4b6f194 chore(deps)!: upgrade OpenAI SDK to v6 and require Node 20 (#453)
* chore(deps)!: upgrade OpenAI SDK to v7

Require Node.js 22 across packages, starters, and CI. Add real SDK boundary coverage and reject unsupported custom tool calls explicitly.

Refs #391

* fix(core): classify OpenAI user aborts as cancellation

Use the SDK error constructor name because OpenAI v7 APIUserAbortError retains the default Error name. Cover retry and observability classification with the real SDK class.

* chore(deps)!: target OpenAI v6 and retain Node 20

* docs: simplify Node runtime guidance
2026-07-29 11:21:27 +08:00
Jack Chen 7d84443147 Merge pull request #452 from HarperZ9/test/checkpoint-recovery-conformance
test: mid-task recovery conformance fixture for #312
2026-07-29 10:25:59 +08:00
Zain Dana HarperandClaude Opus 4.8 04dcc0d02d test: mid-task recovery conformance fixture for #312
Pins the four recovery cases from the #312 discussion against the
current task-level checkpoint granularity, each with its expected
idempotency outcome stated inline:

- case 1, clean resume: a completed task's committed effect replays as
  data, never re-executes
- case 2, documented gap: a committed effect inside an unfinished task
  re-executes on resume (['B','B'] pinned; per-call commit records
  should flip this expectation to ['B'] deliberately)
- case 3, missing result: an in-flight call that never committed is
  safely re-run (must survive #312 unchanged)
- case 4, duplicate replay: restoring a final checkpoint twice performs
  no new work

Plus a field-loss report: the persisted snapshot carries the completed
task's result but has no field that could carry a per-call commit, so
resume cannot distinguish committed-then-crashed from crashed-before-
commit. That absence, stated as a passing test, is the gap #312 closes.

No production code changes. checkpoint.test.ts: 26/26 passing.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-28 11:55:31 -07:00
Jack Chen 86919ae415 Merge pull request #451 from open-multi-agent/ci/coverage-provider-canary
ci: enforce coverage and add DeepSeek provider canary
2026-07-27 11:50:55 +08:00
Jack Chen 3f1aa11efc ci: enforce coverage and add provider canary 2026-07-27 11:19:41 +08:00
Jack Chen 68a63f15f5 Merge pull request #450 from open-multi-agent/semantic-routing-shadow-gate
fix(core): make hybrid routing opt-in
2026-07-27 01:06:25 +08:00
Jack Chen e0e4cf6479 fix(core): make hybrid routing opt-in 2026-07-27 01:03:22 +08:00
Jack Chen 2880d88a21 Merge pull request #449 from open-multi-agent/core-test-tsx-path-6b2700
test: resolve tsx CLI through Node module resolution
2026-07-26 20:33:19 +08:00
Jack Chen 7c4f7a5350 Merge branch 'main' into core-test-tsx-path-6b2700 2026-07-26 20:31:49 +08:00
Jack Chen 6e61dc7375 Merge pull request #448 from open-multi-agent/feat/hybrid-semantic-routing
feat(core): add hybrid semantic execution routing
2026-07-26 20:29:44 +08:00
Jack Chen 4f6aa35640 fix(core): harden hybrid routing failure handling 2026-07-26 20:23:37 +08:00
Jack Chen 7d6ea6c519 test: resolve tsx CLI through Node module resolution
The eval CLI tests and the two example smoke scripts located tsx with a
fixed number of `..` segments, assuming a hoisted install directly above
the workspace. A git worktree has no local node_modules and resolves
upwards to the main checkout, and a non-hoisted install keeps
node_modules inside the workspace, so the path pointed at nothing:
spawnSync failed to launch and 12 tests reported `status: null` instead
of a CLI exit code.

Resolve `tsx/cli` through Node's own module resolution behind a shared
tests/helpers/tsx-cli.ts, and spawn it with process.execPath rather than
executing the node_modules/.bin shim, which is a .cmd wrapper on Windows
that spawnSync cannot launch without a shell. `.bin/tsx` already links
to the same dist/cli.mjs, so the spawned command is unchanged.

Contributors can now run the full core suite directly from a worktree
without hand-linking tsx.
2026-07-26 20:19:54 +08:00
Jack Chen 4db96dcfd4 Merge origin/main into feat/hybrid-semantic-routing 2026-07-26 19:49:10 +08:00
Jack Chen 179aed6618 Merge pull request #447 from open-multi-agent/feat/adaptive-recovery-runtime
feat(core): add adaptive plan recovery
2026-07-26 15:06:30 +08:00
Jack Chen 25a9ff3686 Merge remote-tracking branch 'origin/main' into feat/adaptive-recovery-runtime 2026-07-26 15:02:54 +08:00
Jack Chen dbcf11a158 Merge pull request #446 from open-multi-agent/agent/task-requirements-hard-constraints
fix(core): enforce TaskRequirements as global hard constraints
2026-07-26 14:18:50 +08:00
Jack Chen edc33db1a4 Merge branch 'main' into agent/task-requirements-hard-constraints 2026-07-26 14:16:22 +08:00
Jack Chen e99fcdf2e5 Merge pull request #445 from open-multi-agent/fix/coordinator-plan-fail-closed
fix(core): fail closed on invalid coordinator plans
2026-07-26 14:12:09 +08:00
Jack Chen bfb8f72334 docs(core): update Chinese routing guide 2026-07-26 14:02:22 +08:00
Jack Chen f373b638cf feat(core): add hybrid semantic execution routing 2026-07-26 13:56:28 +08:00
Jack Chen d5e5eca29e docs: sync Chinese adaptive recovery READMEs 2026-07-26 12:47:12 +08:00
Jack Chen 0fccab41f1 docs(core): sync Chinese scheduling requirements 2026-07-26 12:47:05 +08:00
Jack Chen 692bd7cc97 docs(core): sync Chinese coordinator safety guidance 2026-07-26 12:46:59 +08:00
Jack Chen b242f61d6d feat(core): add adaptive plan recovery 2026-07-26 11:51:57 +08:00
Jack Chen 0803bab9c8 fix(core): enforce task requirements globally 2026-07-26 11:21:17 +08:00
Jack Chen a183267e8d fix(core): fail closed on invalid coordinator plans 2026-07-26 10:55:20 +08:00