- Tighten positioning, lift demo, sharpen comparison table.
- Refresh temodar star count, drop dead link.
- Fold tool/memory/context sections into docs/.
- Swap npm downloads badge for GitHub forks.
- Correct custom context strategy signature and Copilot env var (README, README_zh, docs/context-management.md).
- Inline agent definitions so quick-start snippet is self-contained.
- Move CONTRIBUTING/CODE_OF_CONDUCT/SECURITY/codecov to .github/, DECISIONS.md to docs/.
- Fix CONTRIBUTING README link after the .github/ move.
- Ignore local .claude/ config dir.
- Restructure flow, sync README_zh, document quantized sampling.
- Refresh positioning, branding, and section layout (logo, banners, github social card).
- Polish Quick Start and consolidate provider tables.
- Drop forward reference to PR #174 in features bullet.
- Rework structure, factual fixes, add Featured Partner doc.
- Fix brand asset rendering: light banner no longer leaks the dark body background; dark banner and github-social regain previously-clipped content (terminal-log arrows, "★ open source" badge). Root cause: overflow:hidden on stage ancestors clipping the forced 1280px target during extraction.
- Replace fabricated token figures (12,847t / 8,402t / 3,914t) on the banner right column with action labels (design / impl / parallel / review). The numbers conflicted with how totalTokenUsage actually aggregates (input+output, includes coordinator decompose+synthesize, merges same-name agents).
Mirrors the DeepSeek provider coverage for Qiniu, landing after #154:
- README quick-start env list, Multi-model teams bullet, architecture
diagram, providers table (Verified), first-class support note, and
usage snippet with official Qiniu AI inference docs link
- docs/cli.md `oma provider template` list
- examples/providers/qiniu.ts modeled on examples/providers/deepseek.ts
* feat: expose custom MemoryStore via TeamConfig.sharedMemoryStore (#156)
The MemoryStore interface was already public, and SharedMemory / TeamInfo
already used the interface internally. This adds the final user-config wire
so integrators can attach custom backends (Redis, Postgres, Engram, etc.)
without hacking SharedMemory private fields.
Priority: sharedMemoryStore > sharedMemory: true > no memory.
Fully backward-compatible: existing sharedMemory: true users see no change.
SDK-only: the CLI cannot pass runtime objects through JSON config.
Closes#156.
* fix: validate sharedMemoryStore shape and reject from CLI JSON
Addresses Codex P2 review on #157. Plain objects from untrusted JSON could
previously reach `new SharedMemory(plainObject)` and crash later on the first
`.set`/`.list` call with a cryptic TypeError.
Defense-in-depth:
- SharedMemory constructor performs a runtime shape check and throws a clear
TypeError if the provided store does not implement get/set/list/delete/clear.
- CLI `asTeamConfig` explicitly rejects `sharedMemoryStore` in JSON with a
message pointing to the SDK path, since this field is documented SDK-only.
Adds 4 tests covering malformed stores (plain object, partial interface,
null, Team constructor path).
* fix: route falsy-but-present sharedMemoryStore through shape check
Addresses Codex finding 2 on #157. The truthy gate silently skipped falsy
values (null, 0, ''), letting config bugs downgrade to the default in-memory
store or no memory instead of failing fast.
Switched to `!== undefined` so any present value reaches SharedMemory's
runtime shape check and throws a clear TypeError. Adds 2 tests: null as a
bogus store throws; omitting the field still honors `sharedMemory: true`.
Adds `oma run --dashboard` to write a static post-execution DAG HTML to `oma-dashboards/runTeam-<timestamp>.html`.
- Pure `renderTeamRunDashboard(result: TeamRunResult)` in `src/dashboard/`, no FS/network I/O in the library
- `TeamRunResult` gains `goal` + `tasks: TaskExecutionRecord[]` (with `TaskExecutionMetrics`)
- `layoutTasks()` extracted as pure function with cycle detection
- XSS mitigations: `application/json` payload, `</script>` escape, `textContent`-only node rendering
- CLI awaits write before exit (no race with `process.exit`)
Closes#4
Co-authored-by: Ibrahim Kazimov <74775400+ibrahimkzmv@users.noreply.github.com>