AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
翻译准备中
Wow - Domain Model as a Service | Modern Reactive CQRS Architecture Microservice development framework based on DDD and EventSourcing.
翻译准备中
开发工具TypeScript · KotlinGitHub @Ahoo-Wang在线运营者未确认
试用过了吗? 点一下就好,无需登录。
Modern Reactive CQRS Architecture Microservice development framework based on DDD and EventSourcing | 基于 DDD & EventSourcing 的现代响应式 CQRS 架构微服务开发框架
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
A reactive CQRS and Event Sourcing framework for explicit, testable, and traceable domain decisions.
Wow turns each write into an observable domain flow:
You define commands, events, aggregate rules, and sourcing handlers. Wow supplies the reactive command pipeline, event persistence, snapshots, wait stages, projections, sagas, generated metadata, WebFlux routes, and a Given → When → Expect test DSL.查看完整 README ↗Wow 10.0 is in pre-release on this branch. The stable 9.x line lives on the
v9branch.
You write an aggregate: it takes a command, looks at its state, and decides the events.
fun onCommand(command: Withdraw): Withdrawn {
if (command.amount > state.balance) {
reject(Rejections.INSUFFICIENT_BALANCE, "The balance is ${state.balance}.")
}
return Withdrawn(command.amount)
}
and you test it in the same terms:
@Test
fun `a withdrawal the balance does not cover is rejected`() = aggregateSpec(model, id = "alice") {
given(AccountOpened("Alice"), Deposited(100))
whenCommand(Withdraw(150)) { expectRejected(Account.Rejections.INSUFFICIENT_BALANCE) }
whenCommand(Withdraw(30)) {
expectEvents(Withdrawn(30))
expectState { balance.assert().isEqualTo(70) }
}
}
From that, Wow gives you an HTTP route for every command, a state read and queries for every aggregate, an OpenAPI document, a typed TypeScript client, retries and parking for every handler, and a contract that the build checks for compatibility.
me.ahoo.wow.service, which brings the BOM me.ahoo.wow:wow-bom of its version../gradlew run, then send a command with curl.The Quickstart walks through it in about thirty minutes.
flowchart LR
C[Clients] -->|commands| N[Service nodes]
N -->|decide| L[(Log)]
L --> S[Snapshots]
L --> P[Projections and reactors]
L --> G[Sagas]
G -->|commands| N
L -->|published streams| K[(Kafka)]
K --> O[Other contexts]
L --> W[(Warehouse)]
A service runs as one or more nodes over PostgreSQL or MongoDB; they split the log's partitions through leases in the same store. Contexts talk over Kafka. Concepts explains the model.
| Artifact | Holds |
|---|---|
me.ahoo.wow:wow-bom | The versions of every module |
me.ahoo.wow:wow-api | The annotations and types domain code uses |
me.ahoo.wow:wow-kernel | The kernel the generated models build on |
me.ahoo.wow:wow-spring-boot | The Spring Boot host |
me.ahoo.wow:wow-test | The test DSL |
me.ahoo.wow:wow-postgres, wow-mongo | The backends |
me.ahoo.wow:wow-kafka, wow-clickhouse, wow-elasticsearch | The transport, the warehouse, search |
| Package | Does |
|---|---|
@ahoo-wang/wow-client | Commands with their waits, state reads and queries |
@ahoo-wang/wow-generator | Typed clients generated from a service's Manifest |
@ahoo-wang/wow-react | React hooks for queries |
@ahoo-wang/wow-view-engine | Configurable data views: records, analyses and dashboards |
@ahoo-wang/wow-view-store | Saved views on a Wow server |
| Component | Version |
|---|---|
| Java | 21 |
| Kotlin | 2.4.21 |
| KSP | 2.3.12 |
| Spring Boot | 4.1.1 |
Migrating from 9.x covers the source, the data and the cut-over. The 9.x line is maintained on the v9 branch.
Six Skills help an agent write, migrate and query Wow applications: install the plugin ahoo-wow-skills from the Ahoo Skills Hub, or copy the skills of an exact Wow tag into the agent's Skills directory.
Wow is released under the Apache 2.0 License.