AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A framework-independent, type-safe URL state engine with packages for the browser, server,
Node.js, Vue, Vue Router, and Nuxt.
Experimental, pre-1.0, and not production ready. The public API is provisional and may change
between minor versions. Every breaking change is recorded in an ADR and a changeset.
The engine is implemented, tested, and validated as published archives — parameters, codecs,
models, decode results, canonical encoding, runtime transitions, and integrations for the browser,
server, Node.js, Standard Schema, Vue, Vue Router, and Nuxt.README 전문 보기 ↗A framework-independent, type-safe URL state engine with packages for the browser, server, Node.js, Vue, Vue Router, and Nuxt.
[!WARNING] Experimental, pre-1.0, and not production ready. The public API is provisional and may change between minor versions. Every breaking change is recorded in an ADR and a changeset.
The engine is implemented, tested, and validated as published archives — parameters, codecs, models, decode results, canonical encoding, runtime transitions, and integrations for the browser, server, Node.js, Standard Schema, Vue, Vue Router, and Nuxt.
A beta is on npm. Until a stable version exists, latest follows the newest prerelease, so
pnpm add @queryweave/core installs it. The support matrix and stability
policy say what is tested and what a version
number promises; upgrading lists every
breaking change with its migration.
import { createQueryRuntime, defineQueryModel, param } from "@queryweave/core";
const productFilters = defineQueryModel({
search: param.text().optional(),
page: param.integer({ min: 1 }).default(1),
archived: param.boolean().default(false),
sort: param.choice(["name", "created_at", "price"]).default("created_at"),
tags: param.list(param.text()).default([]),
});
const runtime = createQueryRuntime({ model: productFilters, adapter });
runtime.read().values.page; // 1
await runtime.update({ search: "vue", page: 1 });
await runtime.update({ page: 2 }, { navigation: "replace" });
await runtime.transaction((draft) => {
draft.search = "vue";
draft.page = 1;
});
In Vue, the same model gains reactivity and nothing else:
const filters = useQueryModel(productFilters);
filters.values.page; // readonly reactive state
await filters.update({ page: 2 }); // explicit operation
const search = filters.field("search", { navigation: "replace" }); // v-model target
There is no hook per key, no tuple setter, and no direct mutation as the primary API.
URL state shows up in the browser, on the server, in tests, and in shared links. Most codebases describe it more than once — a client parser, a server parser, a serializer, defaults repeated in each — and those copies drift.
QueryWeave defines query state once in a model and syncs it through adapters:
Query string
↓
Decode
↓
Validate
↓
Typed state
↓
Update
↓
Canonical encoding
↓
Adapter
Vue and Nuxt are the first frontend integrations, but neither shapes the core.
| Package | Responsibility |
|---|---|
@queryweave/core | Models, codecs, decode/encode, and runtime contracts |
@queryweave/browser | Browser History API adapter |
@queryweave/server | Web-standard server helpers |
@queryweave/node | Node.js request integration |
@queryweave/standard-schema | Standard Schema interoperability |
@queryweave/testing | Memory adapter and test utilities |
@queryweave/vue | Vue bindings for query models |
@queryweave/vue-router | Vue Router adapter |
@queryweave/nuxt | Nuxt module and per-request runtime |
These figures are the total emitted JavaScript owned by each package. They exclude dependencies,
peer dependencies, declarations, and source maps. Each emitted .js file is minified and
compressed separately. Downstream tree-shaking can produce a smaller application cost.
Run pnpm bundle:size to rebuild the packages and update these generated tables.
pnpm bundle:size:check also enforces the minified-gzip budgets in
scripts/bundle-size-budgets.mjs.
| Package | ESM | ESM gzip | minified | min+gzip | min+Brotli |
|---|---|---|---|---|---|
@queryweave/core | 46.77 kB | 11.69 kB | 21.89 kB | 7.39 kB | 6.67 kB |
@queryweave/testing | 1.76 kB | 742 B | 780 B | 491 B | 433 B |
@queryweave/browser | 2.71 kB | 1.11 kB | 1.13 kB | 564 B | 472 B |
@queryweave/server | 3.05 kB | 1.22 kB | 940 B | 469 B | 409 B |
@queryweave/node | 3.77 kB | 1.45 kB | 1.32 kB | 691 B | 608 B |
@queryweave/standard-schema | 1.18 kB | 537 B | 558 B | 341 B | 299 B |
@queryweave/vue | 4.40 kB | 1.64 kB | 1.85 kB | 915 B | 829 B |
@queryweave/vue-router | 3.25 kB | 1.36 kB | 1.32 kB | 699 B | 616 B |
@queryweave/nuxt | 2.87 kB | 1.60 kB | 1.25 kB | 911 B | 781 B |
Representative consumer builds bundle actual public imports with esbuild. Framework dependencies remain external so the figures show QueryWeave's contribution.
| Consumer scenario | minified | gzip | Brotli |
|---|---|---|---|
| Query string parser | 724 B | 466 B | 390 B |
| Single text model (named) | 9.60 kB | 3.24 kB | 2.94 kB |
Single text model (param) | 16.61 kB | 5.37 kB | 4.83 kB |
| Typical core runtime | 16.81 kB | 5.69 kB | 5.15 kB |
| Browser runtime | 16.19 kB | 5.67 kB | 5.11 kB |
| Web server parsing | 10.49 kB | 3.51 kB | 3.17 kB |
| Node request parsing | 11.50 kB | 3.91 kB | 3.54 kB |
| Vue binding | 16.47 kB | 5.73 kB | 5.23 kB |
| Vue + Vue Router | 17.77 kB | 6.19 kB | 5.58 kB |
| Nuxt runtime | 18.27 kB | 6.39 kB | 5.76 kB |
The documentation site lives in apps/docs and is built with Astro and Starlight.
Run it with pnpm docs:dev.
Use Node.js 22.13 or newer — 24 is what CI's full gate runs on — and pnpm 11.17.0. The published packages support Node 22.12 and newer.
pnpm install --frozen-lockfile
pnpm check
Common commands:
pnpm dev
pnpm build
pnpm typecheck
pnpm lint
pnpm format
pnpm test # every Vitest project, including browser and type tests
pnpm test:browser # Vitest Browser Mode with Playwright and Chromium
pnpm test:types # type-level assertions only
pnpm test:coverage # every project, with coverage thresholds
pnpm test:e2e # Playwright against the browser playground
pnpm boundary:check # sources, manifests, and the dependency graph
pnpm artifacts:check # built output, archives, and declaration resolution
pnpm bundle:size # rebuild packages and update the bundle-size table
pnpm consumers:check # install packed archives into clean consumer projects
pnpm check:release # the full gate plus consumer fixtures
pnpm docs:dev
Real-browser tests run in Chromium, Firefox, and WebKit; install them once:
pnpm exec playwright install chromium firefox webkit
See ARCHITECTURE.md for boundaries, ROADMAP.md for planned phases, and CONTRIBUTING.md before opening a change.