Commit Graph
24 Commits
Author SHA1 Message Date
Jack Chen 4f9d7b5803 feat(core): add framework-owned LLM egress policy (#478)
Closes #473
2026-08-10 15:54:43 +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
Jack Chen f373b638cf feat(core): add hybrid semantic execution routing 2026-07-26 13:56:28 +08:00
Jack Chen aee1026daa feat(core): add task-scoped results and handoffs (#435)
Expose per-task results, structured dependency payloads, and bounded task metadata across checkpoints, traces, receipts, and CLI output.
2026-07-23 23:50:00 +08:00
Jack Chen c12b743905 feat(core): trace execution routing decisions (#430)
* feat(core): trace execution routing decisions

* docs: align routing decision source semantics
2026-07-23 15:25:32 +08:00
Jack Chen 26be338ff7 feat(orchestrator): add declared governance and post-execution floor (#420) 2026-07-23 10:28:48 +08:00
Jack Chen 7dcde7d8fc feat(observability): add execution receipt (#418) 2026-07-23 10:25:29 +08:00
Jack Chen 5400dcc65a feat(core): add per-run metadata channel (#396) 2026-07-18 15:39:32 +08:00
Jack Chen 4db6756eaf feat(core): add offline run viewer for result and trace data (#394)
* feat(core): add unified run viewer

* feat(cli): export run viewer from trace store

* docs(core): add deterministic run viewer demo

* fix(examples): resolve workspace paths in typecheck

* fix(dashboard): center detail status labels

* fix(dashboard): remove DAG status rails

* fix(dashboard): enlarge DAG task cards

* fix(dashboard): clarify run summary header

* docs: align readmes with run viewer
2026-07-18 11:06:27 +08:00
Jack Chen 9338bb4dec chore(observability): complete OBS-5 release readiness (#385)
* chore(observability): complete OBS-5 release readiness

* docs(observability): add v2 architecture to core readme
2026-07-16 18:00:16 +08:00
Jack Chen 6339ee5051 feat(observability): add FileTraceStore reference implementation (#384)
* feat(observability): add FileTraceStore reference

* fix(ci): keep benchmark out of core tarball
2026-07-16 16:50:59 +08:00
Jack Chen 0d299213f0 fix(otel): resolve links and bound span state (#376) 2026-07-16 00:53:42 +08:00
Jack Chen 4d818a0b59 feat(otel): add optional OpenTelemetry adapter 2026-07-16 00:22:36 +08:00
Jack Chen fd1f515b69 feat(core): add trace store contract and memory reference 2026-07-15 23:59:18 +08:00
Jack Chen 5e049b95fc feat(core): add trace sink lifecycle 2026-07-15 23:06:02 +08:00
Jack Chen 3d29274b4f feat(core): add span lifecycle and hierarchy
Implement TraceRecord v2 start/event/end records, idempotent lifecycle closure, runtime hierarchy and links, legacy trace compatibility, contract coverage, and a reproducible no-sink benchmark.
2026-07-15 22:08:49 +08:00
Jack Chen 58096804a0 feat(core): add run identity and outcome semantics (#371)
* feat(core): add run identity and outcome semantics

* docs: sync Chinese observability guidance
2026-07-15 20:41:25 +08:00
Jack Chen 0fab4bce60 feat(memory): redact secrets on the persistence path via RedactingStore (#339) (#359)
Redaction stopped at the observability layer, so secrets an agent emitted into its answer were persisted verbatim to shared memory and on-disk checkpoints. Add RedactingStore, a MemoryStore decorator that scrubs values on write, plus optional custom patterns on the redaction utilities. One wrap of the durable store closes both persistence sinks.

Closes #339.
2026-07-09 22:25:53 +08:00
tlysanhuoandsanhuo11 ec7deb6ae5 feat(core): add trace span parent linkage (#354)
Closes #340.

add spanId and optional parentId to every TraceEventBase
generate stable agent span IDs so LLM/tool spans can point to their owning agent span
link team-run worker agents under task spans, stream events under worker agent spans, and plan_ready under coordinator decomposition
document the trace parentage model and add focused tests for span linkage

Co-authored-by: sanhuo11 <tlysanhuo@gmail.com>
2026-07-06 10:13:45 +08:00
Jack Chen 0488362c0d feat(orchestrator): error-aware task retry (classify, jitter, honor abort) (#346)
Error-aware task retry (opt-in via maxRetries > 0):

- Skip retries on provably-terminal failures (4xx client errors except
  408/409/429, token-budget, invalid-message, aborted calls).
- Equal jitter on backoff to avoid lockstep retries against a rate-limited
  provider.
- Honor abortSignal between attempts (no full-backoff sleep or extra attempt
  after cancel).
- Non-streaming path preserves the structured error on AgentRunResult.error so
  classification works off the default runTeam path; test-covered.

Off by default; behavior changes only when retry is enabled.

Closes #337
2026-07-01 17:22:54 +08:00
Jack Chen 1d37ce6026 refactor(repo): monorepo groundwork for an easier first run (#303)
* refactor(repo): monorepo groundwork for an easier first run

Trying OMA for the first time costs more than it should: a lot to read before anything runs, and no one-command way to watch a team actually work. The plan is to fix that with a `npm create oma` scaffold (a multi-agent demo that runs on the first try) and an npm README that leads with getting started. Neither lands cleanly until core lives in its own package, so this PR does that part first.

This is groundwork, not the payoff: nothing changes for anyone installing `@open-multi-agent/core` today. It turns the repo into an npm-workspaces monorepo with core in `packages/core/`, and splits the README into a GitHub landing page (root) and the npm package page (`packages/core/`). Doing it now, while the repo is small, avoids migrating twice.

The published package is byte-identical: same name, same three runtime dependencies, same entry points, guarded by an isolated-install smoke test. `npm ci` + lint + test (1060) + build pass; the tarball still ships only `dist/`, `README.md`, `LICENSE`, and `package.json`.

* build: restore cross-platform optional deps in package-lock.json

Regenerating the lockfile on macOS pruned the non-host rollup/esbuild optional binaries (npm/cli#4828), so Linux CI could not load @rollup/rollup-linux-x64-gnu and vitest failed to start. Rebuild the lock from the pre-migration base so every platform variant is present again. Verified with npm ci + lint + build + test (1060).

* fix(examples,docs): correct monorepo paths and anchors after the packages/core move

with-vercel-ai-sdk example (pre-existing, surfaced by the move):
- package.json: the @open-multi-agent/core file: link was file:../../, which
  resolves to packages/core/examples (no manifest). Corrected to file:../../..
  (packages/core); predev cd updated to match.
- package-lock.json regenerated: was linking ../.. and pinning a stale core
  1.4.0; now links ../../.. at 1.7.0.
- README: setup paths and the file: note updated.

docs missed by the move:
- docs/cli.md: repo-clone build output is now packages/core/dist/cli/oma.js;
  the quick-start anchor now lives in the package README.
- CONTRIBUTING.md: the architecture anchor and src/ entry-point paths now live
  under packages/core/.
2026-06-18 17:31:52 +08:00
Jack Chen 6b6330208c fix: redact secrets in traces, bash env, and dashboard payloads (#263)
* fix: redact secrets in traces, bash env, and dashboard payloads

Adds src/utils/redaction.ts and applies best-effort redaction at three
sinks where sensitive data could leak:
- tool_call trace events (input, output)
- the bash tool's output buffer
- the post-run dashboard's embedded JSON payload

The bash tool no longer inherits the parent process.env. Child processes
receive a fixed allowlist (HOME, LANG, LC_ALL, LOGNAME, PATH, SHELL,
TEMP, TERM, TMP, TMPDIR, USER), so provider API keys and similar
secrets are no longer visible to spawned shells.

The post-run dashboard no longer loads Tailwind CDN, Google Fonts, or
Material Symbols at view time. The page is self-contained and renders
without network access.

llmMessagesToAiSdkModelMessages no longer concatenates the opaque
redactedData payload into the reasoning text emitted to the AI SDK; it
emits only the [redacted_thinking] marker.

The MCP GitHub example uses --no-install instead of -y and passes an
explicit env allowlist instead of spreading process.env.

* fix(redaction): consume full value for quoted and unquoted assignments

The single ASSIGNMENT_PATTERN stopped at the first whitespace inside a
value, so values with spaces were only partially redacted and the
remainder leaked into trace events, dashboard payloads, and the bash
output buffer. Three reviewer-reported cases on PR #263:

  password=secret value     -> password=[redacted] value
  password="secret value"   -> password="[redacted]" value"
  apiKey: "abc def"         -> apiKey: "[redacted]" def"

Splits the single pattern into two passes. The quoted pass consumes
to the back-referenced closing quote so password="my pass" is fully
matched. The unquoted pass consumes to the next structural delimiter
(comma, semicolon, brace, bracket, newline) so password=my pass is
fully matched.

Adds tests/redaction.test.ts covering the three reviewer cases, the
existing Authorization orphan-bracket regression, common token literal
patterns, and idempotence.
2026-05-28 00:53:34 +08:00
Jack Chen 8bf80f2b9a chore: migrate package to org scope
Prepare the @open-multi-agent/core@1.4.0 release and update GitHub/npm references for the org migration.
2026-05-09 15:40:10 +08:00
Jack Chen b8356aecdb docs: refresh README and hero animation (#214)
* docs: align Chinese README with English version, optimize translations

- Restructure Chinese README to match English section order
- Add demo image, CI badge, Core Concepts section, AgentPool.runParallel
- Optimize 20+ translations for natural Chinese tech writing
- Tone adjustment: reduce colloquial language, unify terminology
- Remove feature-dump tagline and Grok/Groq disclaimer from both versions
- Clean up English README: fix awkward phrasing, missing article, extra blank line
- Add docs/observability.md and docs/providers.md

* Update README hero animation

* docs: use package-safe README hero URL
2026-05-08 03:32:11 +08:00