chore: scaffold mosaic monorepo (Phase 0)
- pnpm workspaces + Turborepo - tsconfig.base.json strict ESM - @mosaic/types stub package - Woodpecker CI pipeline with Valkey service - docs/PRD.md, docs/TASKS.md, CONTEXT.md
This commit is contained in:
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
node_modules/
|
||||||
|
dist/
|
||||||
|
.turbo/
|
||||||
|
*.tsbuildinfo
|
||||||
1
.npmrc
Normal file
1
.npmrc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
@mosaic:registry=https://git.mosaicstack.dev/api/packages/mosaic/npm
|
||||||
30
.woodpecker.yml
Normal file
30
.woodpecker.yml
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
steps:
|
||||||
|
- name: install
|
||||||
|
image: node:22-alpine
|
||||||
|
commands:
|
||||||
|
- corepack enable
|
||||||
|
- pnpm install --frozen-lockfile
|
||||||
|
|
||||||
|
- name: lint
|
||||||
|
image: node:22-alpine
|
||||||
|
commands:
|
||||||
|
- pnpm turbo lint
|
||||||
|
|
||||||
|
- name: typecheck
|
||||||
|
image: node:22-alpine
|
||||||
|
commands:
|
||||||
|
- pnpm turbo typecheck
|
||||||
|
|
||||||
|
- name: build
|
||||||
|
image: node:22-alpine
|
||||||
|
commands:
|
||||||
|
- pnpm turbo build
|
||||||
|
|
||||||
|
- name: test
|
||||||
|
image: node:22-alpine
|
||||||
|
commands:
|
||||||
|
- pnpm turbo test
|
||||||
|
services:
|
||||||
|
- name: valkey
|
||||||
|
image: valkey/valkey:8-alpine
|
||||||
|
ports: ["6379:6379"]
|
||||||
17
CONTEXT.md
Normal file
17
CONTEXT.md
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# Mosaic Monorepo Context
|
||||||
|
|
||||||
|
This repository (`mosaic/mosaic`) is the canonical monorepo for all `@mosaic/*` packages.
|
||||||
|
|
||||||
|
## Wave Structure
|
||||||
|
|
||||||
|
- Wave 1 (Foundation): establish shared workspace/tooling and migrate `@mosaic/types` + `@mosaic/queue`
|
||||||
|
- Wave 2 (Entry Point): migrate install wizard (`@mosaic/mosaic`) and plugin (`@mosaic/openclaw-context`)
|
||||||
|
- Wave 3 (Rewrites): rewrite shell-first tools as TypeScript packages (`coord`, `prdy`, `quality-rails`, `cli`)
|
||||||
|
|
||||||
|
## Key Package Layout
|
||||||
|
|
||||||
|
- `packages/types`: shared type contracts
|
||||||
|
- `packages/queue`: queue package (migration target)
|
||||||
|
- `packages/mosaic`: install wizard package (migration target)
|
||||||
|
- `packages/coord`, `packages/prdy`, `packages/quality-rails`, `packages/cli`: future TypeScript rewrites
|
||||||
|
- `plugins/openclaw-context`: OpenClaw plugin package
|
||||||
373
docs/PRD.md
Normal file
373
docs/PRD.md
Normal file
@@ -0,0 +1,373 @@
|
|||||||
|
# PRD: Mosaic Monorepo & @mosaic/* Package Ecosystem
|
||||||
|
|
||||||
|
**Status:** Draft
|
||||||
|
**Created:** 2026-03-06
|
||||||
|
**Updated:** 2026-03-06 (post-bootstrap audit)
|
||||||
|
**Owner:** Jason Woltje
|
||||||
|
**Repo (target):** `git.mosaicstack.dev/mosaic/mosaic`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Problem Statement
|
||||||
|
|
||||||
|
Mosaic tooling is currently spread across five polyrepos. Each repo duplicates TypeScript config, ESLint rules, Vitest setup, and core type definitions. Cross-repo changes require synchronized PRs with a window of inconsistency. Agent workers lose context when they must span multiple repos. There is no standardized installation path — getting the full Mosaic toolkit requires knowing which repos exist and cloning them individually.
|
||||||
|
|
||||||
|
**Symptoms:**
|
||||||
|
- `tsconfig.json`, `eslint.config.js`, `vitest.config.ts` duplicated across every repo
|
||||||
|
- `Task`, `Mission`, `Agent`, and related types redefined in each package
|
||||||
|
- A feature touching `coord` + `queue` requires 2 PRs, 2 CI runs, 2 merges
|
||||||
|
- No `npm install` story — setup is tribal knowledge
|
||||||
|
- Agent workers clone one repo with no visibility into sibling packages
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Goals
|
||||||
|
|
||||||
|
1. **Reduce duplication** — One `tsconfig`, one ESLint config, one set of shared types, inherited by all packages
|
||||||
|
2. **Standardize naming** — All packages published under `@mosaic/` scope to the Gitea npm registry
|
||||||
|
3. **Single install entry point** — `npm i -g @mosaic/mosaic` runs guided onboarding, installs selected packages
|
||||||
|
4. **CI publishes packages** — Push to `main` triggers Turborepo affected-only build + publish to registry
|
||||||
|
5. **Agent-friendly context** — One monorepo means one clone, one `TASKS.md`, one root `CONTEXT.md` for workers
|
||||||
|
6. **Eventual full TypeScript** — `coord` and `prdy` start as shell distribution, graduate to TypeScript packages over time
|
||||||
|
|
||||||
|
## 3. Non-Goals
|
||||||
|
|
||||||
|
- **Not replacing OpenBrain** — Queue is for coordination, OpenBrain is for memory. No overlap.
|
||||||
|
- **Not open-sourcing** — These are personal/internal tools. Public registry not in scope.
|
||||||
|
- **Not containerizing packages** — Packages are CLI tools and libraries, not services.
|
||||||
|
- **Not forced independent versioning** — All packages use fixed/synchronized versioning (simpler for solo developer).
|
||||||
|
- **`agent-skills` not included** — Skills are files consumed by agents, not npm packages. Stays in its own repo.
|
||||||
|
- **Not rewriting coord/prdy immediately** — Shell scripts are distributed first; TypeScript rewrite is a later phase.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Bootstrap Audit (Current State)
|
||||||
|
|
||||||
|
`mosaic-bootstrap` contains four distinct categories of content. Understanding this is critical before migrating:
|
||||||
|
|
||||||
|
### 4a. Installation Wizard (TypeScript) — becomes `@mosaic/mosaic`
|
||||||
|
28 TypeScript source files. Handles fresh Mosaic install: creates `SOUL.md`, `USER.md`, `TOOLS.md`, configures MCP for Claude/Codex/opencode, selects and installs skills. Currently published as `mosaic-wizard@0.2.0`. This is the **`npm i -g @mosaic/mosaic`** entry point. Already substantially complete — needs rename, cleanup, monorepo integration.
|
||||||
|
|
||||||
|
### 4b. Shell Tool Suite — distributed as files, not npm packages
|
||||||
|
~150 shell scripts, ~2,500+ lines of bash across:
|
||||||
|
- `tools/git/` — PR, issue, milestone management (Gitea API)
|
||||||
|
- `tools/orchestrator/` — ~1,800 lines: `mission-init`, `session-run`, `session-resume`, `session-status`
|
||||||
|
- `tools/prdy/` — ~470 lines: `prdy-init`, `prdy-update`, `prdy-validate`, `prdy-status`
|
||||||
|
- `tools/orchestrator-matrix/` — Python Matrix transport for multi-agent coordination
|
||||||
|
- `tools/qa/` — hook handlers, memory write prevention, QA monitors
|
||||||
|
- `tools/woodpecker/`, `portainer/`, `cloudflare/`, `authentik/`, `coolify/`, `codex/`, `glpi/` — infra integrations
|
||||||
|
|
||||||
|
**These are NOT npm packages today.** They are bash/Python scripts distributed by the wizard to `~/.config/mosaic/`. The wizard is the install vehicle.
|
||||||
|
|
||||||
|
### 4c. Agent Guides (Markdown) — distributed as files
|
||||||
|
17 markdown guides: `ORCHESTRATOR.md`, `E2E-DELIVERY.md`, `CODE-REVIEW.md`, etc. Loaded by agents at runtime from `~/.config/mosaic/guides/`. Not code, not packages. Distributed by the wizard.
|
||||||
|
|
||||||
|
### 4d. Runtime Configs — distributed as files
|
||||||
|
Per-agent config overlays for Claude, Codex, opencode. Distributed to `~/.config/mosaic/runtime/` on install.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Package Structure
|
||||||
|
|
||||||
|
### Migration Philosophy: Staged
|
||||||
|
|
||||||
|
The monorepo is built in waves. Existing TypeScript code migrates first. Shell-based tools (`coord`, `prdy`) are distributed as-is initially, then rewritten as TypeScript packages in a later wave when the monorepo foundation is proven.
|
||||||
|
|
||||||
|
```
|
||||||
|
Wave 1 — Foundation
|
||||||
|
@mosaic/types Shared type definitions (new)
|
||||||
|
@mosaic/queue Migrate from mosaic/queue (TypeScript, already mature)
|
||||||
|
Wave 2 — Entry Point
|
||||||
|
@mosaic/mosaic Migrate wizard from mosaic-bootstrap (TypeScript, already built)
|
||||||
|
@mosaic/openclaw-context Migrate from mosaic/openclaw-openbrain-context (TypeScript)
|
||||||
|
|
||||||
|
Wave 3 — TypeScript Rewrites (future)
|
||||||
|
@mosaic/coord Rewrite of tools/orchestrator/ bash suite
|
||||||
|
@mosaic/prdy Rewrite of tools/prdy/ bash suite
|
||||||
|
@mosaic/quality-rails Rewrite of quality-rails template distributor (shell+templates → TS scaffolder)
|
||||||
|
@mosaic/cli Unified CLI binary composing all @mosaic/* packages
|
||||||
|
```
|
||||||
|
|
||||||
|
### Repository Layout
|
||||||
|
|
||||||
|
```
|
||||||
|
mosaic/mosaic (monorepo)
|
||||||
|
├── packages/
|
||||||
|
│ ├── types/ @mosaic/types Shared interfaces — zero deps
|
||||||
|
│ ├── queue/ @mosaic/queue Task queue + MCP server
|
||||||
|
│ ├── quality-rails/ @mosaic/quality-rails Quality gate enforcement
|
||||||
|
│ ├── mosaic/ @mosaic/mosaic Install wizard + meta package
|
||||||
|
│ ├── coord/ @mosaic/coord [Wave 3] Mission coordination
|
||||||
|
│ ├── prdy/ @mosaic/prdy [Wave 3] PRD generation
|
||||||
|
│ └── cli/ @mosaic/cli [Wave 3] Unified CLI binary
|
||||||
|
├── plugins/
|
||||||
|
│ └── openclaw-context/ @mosaic/openclaw-context OpenClaw → OpenBrain plugin
|
||||||
|
└── docs/
|
||||||
|
├── PRD.md (this file, symlinked from jarvis-brain)
|
||||||
|
└── TASKS.md (orchestrator-owned)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Package Responsibilities
|
||||||
|
|
||||||
|
#### `@mosaic/types` _(Wave 1)_
|
||||||
|
- Shared interfaces: `Task`, `TaskStatus`, `TaskPriority`, `Mission`, `Agent`, `QueueConfig`
|
||||||
|
- No runtime code — types only, zero dependencies
|
||||||
|
- **Every other `@mosaic/*` package imports from here**; never defines its own copies
|
||||||
|
- Published first; version bump propagates to all consumers
|
||||||
|
|
||||||
|
#### `@mosaic/queue` _(Wave 1)_
|
||||||
|
- Task queue backed by Valkey/Redis with atomic WATCH/MULTI/EXEC ownership
|
||||||
|
- MCP server with 8 tools: `queue_list/get/claim/heartbeat/release/complete/fail/status`
|
||||||
|
- Migrated from `mosaic/queue` — code mature (Phase 1 + atomicity fixes complete)
|
||||||
|
- Updates imports to use `@mosaic/types`
|
||||||
|
|
||||||
|
#### `@mosaic/quality-rails` _(Wave 3 — TypeScript rewrite)_
|
||||||
|
- **Audit result:** `mosaic/quality-rails` is shell scripts + template files, no TypeScript. No `package.json`.
|
||||||
|
- Current form: `scripts/install.sh`, `verify.sh` + config templates for monorepo/nextjs/node/python project types
|
||||||
|
- Wave 3 rewrite: TypeScript scaffolder that generates/installs config files programmatically rather than distributing static copies
|
||||||
|
- Until Wave 3: templates bundled as wizard distributed assets alongside other shell tools
|
||||||
|
- Migrated from `mosaic/quality-rails` (archive after wizard bundles it)
|
||||||
|
|
||||||
|
#### `@mosaic/mosaic` _(Wave 2)_
|
||||||
|
- **Entry point:** `npm i -g @mosaic/mosaic`
|
||||||
|
- Onboarding wizard (migrated from `mosaic-wizard` in bootstrap)
|
||||||
|
- Stages: detect installs → mode select → soul/user/tools setup → skill selection → runtime config → finalize
|
||||||
|
- Copies shell tool suite (`tools/`, `guides/`, `runtime/`) to `~/.config/mosaic/`
|
||||||
|
- Prompts which additional `@mosaic/*` packages to install
|
||||||
|
- Config validation: checks OpenBrain connectivity, Gitea token, etc.
|
||||||
|
- When Wave 3 completes: wizard shifts from "copy shell scripts" to "just install TypeScript packages"
|
||||||
|
|
||||||
|
#### `@mosaic/openclaw-context` _(Wave 2, plugins/)_
|
||||||
|
- OpenClaw → OpenBrain context engine plugin
|
||||||
|
- Lives in monorepo for shared tooling, published standalone
|
||||||
|
- Installable independently: `openclaw plugin install @mosaic/openclaw-context`
|
||||||
|
- Migrated from `mosaic/openclaw-openbrain-context`
|
||||||
|
|
||||||
|
#### `@mosaic/coord` _(Wave 3 — TypeScript rewrite)_
|
||||||
|
- TypeScript rewrite of `tools/orchestrator/` bash suite
|
||||||
|
- Mission lifecycle: `init`, `run`, `resume`, `status`, `drain`
|
||||||
|
- Reads/writes `docs/TASKS.md` in target project
|
||||||
|
- CLI subcommand: `mosaic coord <init|run|resume|status>`
|
||||||
|
- Will replace shell scripts in the distributed toolkit
|
||||||
|
- **Prerequisite:** Wave 1+2 complete and stable
|
||||||
|
|
||||||
|
#### `@mosaic/prdy` _(Wave 3 — TypeScript rewrite)_
|
||||||
|
- TypeScript rewrite of `tools/prdy/` bash suite
|
||||||
|
- AI-assisted PRD generation, update, validation
|
||||||
|
- CLI subcommand: `mosaic prdy <init|update|validate|status>`
|
||||||
|
- Depends on LLM client (OpenAI / Anthropic / Z.ai — configured via env)
|
||||||
|
- **Prerequisite:** Wave 1+2 complete and stable
|
||||||
|
|
||||||
|
#### `@mosaic/cli` _(Wave 3)_
|
||||||
|
- Unified `mosaic` binary — thin shell over all `@mosaic/*` packages
|
||||||
|
- Plugin discovery: checks installed `@mosaic/*` packages, registers CLI contributions
|
||||||
|
- Subcommand routing: `mosaic coord`, `mosaic prdy`, `mosaic queue`, `mosaic prdy`, etc.
|
||||||
|
- Does NOT bundle everything — loads plugins dynamically
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Tooling
|
||||||
|
|
||||||
|
### Package Manager
|
||||||
|
**pnpm workspaces** — single lockfile, workspace-linked packages during development, content-addressed store.
|
||||||
|
|
||||||
|
### Build Orchestration
|
||||||
|
**Turborepo** — affected-only builds, remote cache (optional), pipeline definitions per task type.
|
||||||
|
|
||||||
|
```json
|
||||||
|
// turbo.json (root)
|
||||||
|
{
|
||||||
|
"pipeline": {
|
||||||
|
"build": { "dependsOn": ["^build"], "outputs": ["dist/**"] },
|
||||||
|
"test": { "dependsOn": ["^build"] },
|
||||||
|
"lint": {},
|
||||||
|
"typecheck": { "dependsOn": ["^build"] },
|
||||||
|
"publish": { "dependsOn": ["build", "test", "lint", "typecheck"] }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Shared Root Config (inherited by all packages)
|
||||||
|
- `tsconfig.base.json` — strict mode, ESM, `NodeNext` module resolution
|
||||||
|
- `eslint.config.js` — shared ruleset (from `tools/quality/templates/` in bootstrap — already exists!)
|
||||||
|
- `vitest.workspace.ts` — workspace-level test runner
|
||||||
|
|
||||||
|
Each package `tsconfig.json` extends `../../tsconfig.base.json`.
|
||||||
|
|
||||||
|
### Versioning
|
||||||
|
**Fixed (synchronized):** All packages share a version number. `@mosaic/queue@0.2.0` implies `@mosaic/types@0.2.0`. Revisit if packages diverge significantly in maturity.
|
||||||
|
|
||||||
|
Tool: **Changesets** (`@changesets/cli`) — human-authored change descriptions → automated version bumps + changelogs on release.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Registry & CI
|
||||||
|
|
||||||
|
### Gitea npm Registry
|
||||||
|
Packages published to `https://git.mosaicstack.dev/api/packages/mosaic/npm`.
|
||||||
|
|
||||||
|
`.npmrc` (root):
|
||||||
|
```
|
||||||
|
@mosaic:registry=https://git.mosaicstack.dev/api/packages/mosaic/npm
|
||||||
|
//git.mosaicstack.dev/api/packages/mosaic/npm/:_authToken=${GITEA_TOKEN}
|
||||||
|
```
|
||||||
|
|
||||||
|
### CI Pipeline (Woodpecker)
|
||||||
|
Trigger: push to `main`
|
||||||
|
|
||||||
|
Steps:
|
||||||
|
1. `pnpm install --frozen-lockfile`
|
||||||
|
2. `pnpm turbo lint typecheck`
|
||||||
|
3. `pnpm turbo test` (with Valkey service container for `@mosaic/queue` tests)
|
||||||
|
4. `pnpm turbo build`
|
||||||
|
5. Detect changed packages (Turborepo affected output)
|
||||||
|
6. `pnpm changeset publish` → publish affected packages to Gitea registry
|
||||||
|
|
||||||
|
PR pipeline (no publish): steps 1–4 only + `pnpm changeset status`.
|
||||||
|
|
||||||
|
**Valkey service for queue tests:**
|
||||||
|
```yaml
|
||||||
|
# .woodpecker.yml
|
||||||
|
services:
|
||||||
|
- name: valkey
|
||||||
|
image: valkey/valkey:8-alpine
|
||||||
|
ports: ["6379:6379"]
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Migration Plan
|
||||||
|
|
||||||
|
### Prerequisites (check before starting)
|
||||||
|
- [ ] `mosaic/queue` atomicity fix (issue #4) merged
|
||||||
|
- [ ] `mosaic/openclaw-openbrain-context` compact/ingest fix (issue #4) merged
|
||||||
|
- [ ] No active agent branches on repos being migrated
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Wave 1 — Foundation
|
||||||
|
|
||||||
|
#### Phase 0: Scaffold Monorepo
|
||||||
|
- [ ] Create `mosaic/mosaic` repo on Gitea
|
||||||
|
- [ ] Initialize pnpm workspace + Turborepo
|
||||||
|
- [ ] Add root `tsconfig.base.json`, `eslint.config.js`, `vitest.workspace.ts`
|
||||||
|
- [ ] Add `.npmrc` pointing to Gitea registry
|
||||||
|
- [ ] Smoke-test publish (empty `@mosaic/types@0.0.1`) to validate CI+registry auth
|
||||||
|
- [ ] Add Woodpecker pipeline with Valkey service
|
||||||
|
- [ ] Add root `CONTEXT.md`, `docs/TASKS.md`, `docs/PRD.md`
|
||||||
|
|
||||||
|
#### Phase 1: `@mosaic/types`
|
||||||
|
- [ ] Extract all shared types from `queue`, `coord`, `prdy`, `quality-rails` (audit each for duplicates)
|
||||||
|
- [ ] Publish `@mosaic/types@0.1.0`
|
||||||
|
- [ ] No other package migrates until types are published
|
||||||
|
|
||||||
|
#### Phase 2: `@mosaic/queue`
|
||||||
|
- [ ] Move `mosaic/queue/packages/queue/src` → `mosaic/mosaic/packages/queue/src`
|
||||||
|
- [ ] Update imports to use `@mosaic/types`
|
||||||
|
- [ ] All tests green including integration (Valkey CI service)
|
||||||
|
- [ ] Publish `@mosaic/queue@0.1.0`
|
||||||
|
- [ ] Archive `mosaic/queue` repo (read-only, redirect notice in README)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Wave 2 — Entry Point
|
||||||
|
|
||||||
|
#### Phase 4: `@mosaic/mosaic` (wizard migration)
|
||||||
|
- [ ] Move `mosaic-bootstrap/src/` → `packages/mosaic/src/`
|
||||||
|
- [ ] Update package name: `mosaic-wizard` → `@mosaic/mosaic`
|
||||||
|
- [ ] Update wizard to reference monorepo packages where applicable
|
||||||
|
- [ ] `postinstall` script: run wizard on first install
|
||||||
|
- [ ] Shell tool suite (`tools/`, `guides/`, `runtime/`) bundled as static assets
|
||||||
|
- [ ] Publish `@mosaic/mosaic@0.1.0`
|
||||||
|
- [ ] Validate: `npm i -g @mosaic/mosaic` on clean machine completes setup
|
||||||
|
- [ ] Archive `mosaic/bootstrap` (read-only, redirect notice)
|
||||||
|
|
||||||
|
#### Phase 5: `@mosaic/openclaw-context`
|
||||||
|
- [ ] Move `mosaic/openclaw-openbrain-context/src` → `plugins/openclaw-context/src`
|
||||||
|
- [ ] Update shared tooling to use root configs
|
||||||
|
- [ ] Publish `@mosaic/openclaw-context@0.1.0`
|
||||||
|
- [ ] Validate standalone install works: `openclaw plugin install @mosaic/openclaw-context`
|
||||||
|
- [ ] Archive `mosaic/openclaw-openbrain-context`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Wave 3 — TypeScript Rewrites (future, no timeline set)
|
||||||
|
|
||||||
|
#### Phase 6: `@mosaic/coord`
|
||||||
|
- [ ] Design TypeScript API mirroring current bash behavior
|
||||||
|
- [ ] Implement: `init`, `run`, `resume`, `status`, `drain`
|
||||||
|
- [ ] CLI subcommand registration for `@mosaic/cli`
|
||||||
|
- [ ] Migrate shell scripts to integration tests (parity verification)
|
||||||
|
- [ ] Wizard updated: stop distributing orchestrator shell scripts once this ships
|
||||||
|
- [ ] Publish `@mosaic/coord@0.1.0`
|
||||||
|
|
||||||
|
#### Phase 7: `@mosaic/prdy`
|
||||||
|
- [ ] Design TypeScript API mirroring current bash behavior
|
||||||
|
- [ ] LLM client abstraction (supports Anthropic / OpenAI / Z.ai via config)
|
||||||
|
- [ ] Implement: `init`, `update`, `validate`, `status`
|
||||||
|
- [ ] CLI subcommand registration for `@mosaic/cli`
|
||||||
|
- [ ] Wizard updated: stop distributing prdy shell scripts once this ships
|
||||||
|
- [ ] Publish `@mosaic/prdy@0.1.0`
|
||||||
|
|
||||||
|
#### Phase 8: `@mosaic/quality-rails`
|
||||||
|
- [ ] TypeScript scaffolder API — generates ESLint, tsconfig, Woodpecker, husky, lint-staged for a project
|
||||||
|
- [ ] Supports project types: monorepo, typescript-node, typescript-nextjs, python
|
||||||
|
- [ ] CLI: `mosaic quality install [--type monorepo|node|nextjs|python]`, `mosaic quality verify`
|
||||||
|
- [ ] Replaces static template distribution from wizard
|
||||||
|
- [ ] Archive `mosaic/quality-rails`
|
||||||
|
- [ ] Publish `@mosaic/quality-rails@0.1.0`
|
||||||
|
|
||||||
|
#### Phase 9: `@mosaic/cli`
|
||||||
|
- [ ] Unified binary with plugin discovery
|
||||||
|
- [ ] Subcommands: `mosaic coord`, `mosaic prdy`, `mosaic queue`, `mosaic prdy`
|
||||||
|
- [ ] Wizard updated to install `@mosaic/cli` as primary binary instead of path-based scripts
|
||||||
|
- [ ] Publish `@mosaic/cli@0.1.0`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Open Questions
|
||||||
|
|
||||||
|
| # | Question | Priority | Status |
|
||||||
|
|---|---|---|---|
|
||||||
|
| 1 | Bootstrap audit: what in `tools/` is safe to archive vs still needed? Shell scripts will coexist during Wave 1+2 | High | ✅ Answered — shell tools distributed by wizard until Wave 3 |
|
||||||
|
| 2 | `quality-rails` audit complete: shell scripts + templates, no TypeScript, no package.json | High | ✅ Wave 3 rewrite |
|
||||||
|
| 3 | `@mosaic/prdy` LLM client: peer dep or bundled? | Medium | Open |
|
||||||
|
| 4 | Valkey CI service in Woodpecker: verify swarm runner can spin Docker services | High | Open |
|
||||||
|
| 5 | Changesets vs manual semver? (Recommendation: Changesets) | Low | Open |
|
||||||
|
| 6 | Matrix orchestrator (`tools/orchestrator-matrix/`, Python) — migrate to TypeScript in Wave 3 or keep Python? | Medium | Open |
|
||||||
|
| 7 | `mosaic/agent-skills` — stays polyrepo, but should the wizard install it? | Low | Open |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. Success Criteria
|
||||||
|
|
||||||
|
### Wave 1+2 (MVP)
|
||||||
|
- [ ] `npm i -g @mosaic/mosaic` on a clean machine completes setup end-to-end
|
||||||
|
- [ ] `mosaic coord init`, `mosaic prdy init`, `mosaic queue list` all work (bash, distributed by wizard)
|
||||||
|
- [ ] Zero duplicated TypeScript config files across Wave 1+2 packages
|
||||||
|
- [ ] One PR for a shared type change, no follow-up PRs in sibling repos
|
||||||
|
- [ ] CI publishes affected packages on every merge to `main`
|
||||||
|
- [ ] All existing functionality preserved — no regressions
|
||||||
|
|
||||||
|
### Wave 3 (Full TypeScript)
|
||||||
|
- [ ] `mosaic coord` and `mosaic prdy` run as native TypeScript packages, no bash distribution needed
|
||||||
|
- [ ] Wizard no longer ships shell scripts for coord/prdy
|
||||||
|
- [ ] `@mosaic/cli` is the single `mosaic` binary entry point
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 11. Risks
|
||||||
|
|
||||||
|
| Risk | Likelihood | Impact | Mitigation |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `mosaic/quality-rails` is also shell (not TypeScript) | Medium | Medium | Audit before Phase 3; if shell, it becomes Wave 3 |
|
||||||
|
| Wizard migration breaks existing installs on Jason's machines | Medium | High | Keep bootstrap installable alongside; wizard detects existing config and upgrades safely |
|
||||||
|
| Turborepo cache invalidation surprises | Low | Low | Start without remote cache; add later |
|
||||||
|
| Gitea npm registry auth in CI | Medium | High | Smoke-test publish in Phase 0 before any real migration |
|
||||||
|
| Breaking installed tools mid-migration | Low | High | Keep old repos live until new packages verified working |
|
||||||
|
| Matrix orchestrator (Python) creates a language gap in Wave 3 | Low | Medium | Decision deferred; can keep as Python microservice or wrap in TypeScript subprocess |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
_Start: Phase 0 scaffold after current fix workers complete (queue + openclaw-context issue #4)._
|
||||||
|
_Wave 3 timeline: TBD — start after Wave 1+2 are stable in production._
|
||||||
19
docs/TASKS.md
Normal file
19
docs/TASKS.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# Mosaic Monorepo Tasks
|
||||||
|
|
||||||
|
## Wave 1 - Foundation
|
||||||
|
|
||||||
|
- [x] Phase 0: Scaffold monorepo (`mosaic/mosaic`)
|
||||||
|
- [ ] Phase 1: Create `@mosaic/types` shared interfaces and publish `0.1.0`
|
||||||
|
- [ ] Phase 2: Migrate `@mosaic/queue` into monorepo, adopt `@mosaic/types`, and publish `0.1.0`
|
||||||
|
|
||||||
|
## Wave 2 - Entry Point
|
||||||
|
|
||||||
|
- [ ] Phase 4: Migrate wizard into `@mosaic/mosaic`
|
||||||
|
- [ ] Phase 5: Migrate plugin into `@mosaic/openclaw-context`
|
||||||
|
|
||||||
|
## Wave 3 - TypeScript Rewrites
|
||||||
|
|
||||||
|
- [ ] Phase 6: Rewrite `@mosaic/coord`
|
||||||
|
- [ ] Phase 7: Rewrite `@mosaic/prdy`
|
||||||
|
- [ ] Phase 8: Rewrite `@mosaic/quality-rails`
|
||||||
|
- [ ] Phase 9: Introduce unified `@mosaic/cli`
|
||||||
1
eslint.config.js
Normal file
1
eslint.config.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export default [];
|
||||||
18
package.json
Normal file
18
package.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"name": "mosaic",
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"build": "turbo build",
|
||||||
|
"test": "turbo test",
|
||||||
|
"lint": "turbo lint",
|
||||||
|
"typecheck": "turbo typecheck",
|
||||||
|
"format": "prettier --write ."
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"turbo": "^2",
|
||||||
|
"@changesets/cli": "^2",
|
||||||
|
"typescript": "^5",
|
||||||
|
"prettier": "^3"
|
||||||
|
},
|
||||||
|
"packageManager": "pnpm@10.28.1"
|
||||||
|
}
|
||||||
3
packages/types/README.md
Normal file
3
packages/types/README.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# @mosaic/types
|
||||||
|
|
||||||
|
Shared type definitions for the Mosaic package ecosystem.
|
||||||
18
packages/types/package.json
Normal file
18
packages/types/package.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"name": "@mosaic/types",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"private": false,
|
||||||
|
"type": "module",
|
||||||
|
"main": "dist/index.js",
|
||||||
|
"types": "dist/index.d.ts",
|
||||||
|
"files": [
|
||||||
|
"dist",
|
||||||
|
"README.md"
|
||||||
|
],
|
||||||
|
"scripts": {
|
||||||
|
"build": "tsc -p tsconfig.json",
|
||||||
|
"test": "echo \"No tests for @mosaic/types\"",
|
||||||
|
"lint": "echo \"No lint configured for @mosaic/types\"",
|
||||||
|
"typecheck": "tsc -p tsconfig.json --noEmit"
|
||||||
|
}
|
||||||
|
}
|
||||||
2
packages/types/src/index.ts
Normal file
2
packages/types/src/index.ts
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
// @mosaic/types - shared type definitions
|
||||||
|
export type Placeholder = Record<string, never>;
|
||||||
8
packages/types/tsconfig.json
Normal file
8
packages/types/tsconfig.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"extends": "../../tsconfig.base.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"rootDir": "src",
|
||||||
|
"outDir": "dist"
|
||||||
|
},
|
||||||
|
"include": ["src/**/*.ts"]
|
||||||
|
}
|
||||||
891
pnpm-lock.yaml
generated
Normal file
891
pnpm-lock.yaml
generated
Normal file
@@ -0,0 +1,891 @@
|
|||||||
|
lockfileVersion: '9.0'
|
||||||
|
|
||||||
|
settings:
|
||||||
|
autoInstallPeers: true
|
||||||
|
excludeLinksFromLockfile: false
|
||||||
|
|
||||||
|
importers:
|
||||||
|
|
||||||
|
.:
|
||||||
|
devDependencies:
|
||||||
|
'@changesets/cli':
|
||||||
|
specifier: ^2
|
||||||
|
version: 2.30.0
|
||||||
|
prettier:
|
||||||
|
specifier: ^3
|
||||||
|
version: 3.8.1
|
||||||
|
turbo:
|
||||||
|
specifier: ^2
|
||||||
|
version: 2.8.14
|
||||||
|
typescript:
|
||||||
|
specifier: ^5
|
||||||
|
version: 5.9.3
|
||||||
|
|
||||||
|
packages/types: {}
|
||||||
|
|
||||||
|
packages:
|
||||||
|
|
||||||
|
'@babel/runtime@7.28.6':
|
||||||
|
resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==}
|
||||||
|
engines: {node: '>=6.9.0'}
|
||||||
|
|
||||||
|
'@changesets/apply-release-plan@7.1.0':
|
||||||
|
resolution: {integrity: sha512-yq8ML3YS7koKQ/9bk1PqO0HMzApIFNwjlwCnwFEXMzNe8NpzeeYYKCmnhWJGkN8g7E51MnWaSbqRcTcdIxUgnQ==}
|
||||||
|
|
||||||
|
'@changesets/assemble-release-plan@6.0.9':
|
||||||
|
resolution: {integrity: sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==}
|
||||||
|
|
||||||
|
'@changesets/changelog-git@0.2.1':
|
||||||
|
resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==}
|
||||||
|
|
||||||
|
'@changesets/cli@2.30.0':
|
||||||
|
resolution: {integrity: sha512-5D3Nk2JPqMI1wK25pEymeWRSlSMdo5QOGlyfrKg0AOufrUcjEE3RQgaCpHoBiM31CSNrtSgdJ0U6zL1rLDDfBA==}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
|
'@changesets/config@3.1.3':
|
||||||
|
resolution: {integrity: sha512-vnXjcey8YgBn2L1OPWd3ORs0bGC4LoYcK/ubpgvzNVr53JXV5GiTVj7fWdMRsoKUH7hhhMAQnsJUqLr21EncNw==}
|
||||||
|
|
||||||
|
'@changesets/errors@0.2.0':
|
||||||
|
resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==}
|
||||||
|
|
||||||
|
'@changesets/get-dependents-graph@2.1.3':
|
||||||
|
resolution: {integrity: sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==}
|
||||||
|
|
||||||
|
'@changesets/get-release-plan@4.0.15':
|
||||||
|
resolution: {integrity: sha512-Q04ZaRPuEVZtA+auOYgFaVQQSA98dXiVe/yFaZfY7hoSmQICHGvP0TF4u3EDNHWmmCS4ekA/XSpKlSM2PyTS2g==}
|
||||||
|
|
||||||
|
'@changesets/get-version-range-type@0.4.0':
|
||||||
|
resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==}
|
||||||
|
|
||||||
|
'@changesets/git@3.0.4':
|
||||||
|
resolution: {integrity: sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==}
|
||||||
|
|
||||||
|
'@changesets/logger@0.1.1':
|
||||||
|
resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==}
|
||||||
|
|
||||||
|
'@changesets/parse@0.4.3':
|
||||||
|
resolution: {integrity: sha512-ZDmNc53+dXdWEv7fqIUSgRQOLYoUom5Z40gmLgmATmYR9NbL6FJJHwakcCpzaeCy+1D0m0n7mT4jj2B/MQPl7A==}
|
||||||
|
|
||||||
|
'@changesets/pre@2.0.2':
|
||||||
|
resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==}
|
||||||
|
|
||||||
|
'@changesets/read@0.6.7':
|
||||||
|
resolution: {integrity: sha512-D1G4AUYGrBEk8vj8MGwf75k9GpN6XL3wg8i42P2jZZwFLXnlr2Pn7r9yuQNbaMCarP7ZQWNJbV6XLeysAIMhTA==}
|
||||||
|
|
||||||
|
'@changesets/should-skip-package@0.1.2':
|
||||||
|
resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==}
|
||||||
|
|
||||||
|
'@changesets/types@4.1.0':
|
||||||
|
resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==}
|
||||||
|
|
||||||
|
'@changesets/types@6.1.0':
|
||||||
|
resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==}
|
||||||
|
|
||||||
|
'@changesets/write@0.4.0':
|
||||||
|
resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==}
|
||||||
|
|
||||||
|
'@inquirer/external-editor@1.0.3':
|
||||||
|
resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
peerDependencies:
|
||||||
|
'@types/node': '>=18'
|
||||||
|
peerDependenciesMeta:
|
||||||
|
'@types/node':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@manypkg/find-root@1.1.0':
|
||||||
|
resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==}
|
||||||
|
|
||||||
|
'@manypkg/get-packages@1.1.3':
|
||||||
|
resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==}
|
||||||
|
|
||||||
|
'@nodelib/fs.scandir@2.1.5':
|
||||||
|
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
|
||||||
|
engines: {node: '>= 8'}
|
||||||
|
|
||||||
|
'@nodelib/fs.stat@2.0.5':
|
||||||
|
resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
|
||||||
|
engines: {node: '>= 8'}
|
||||||
|
|
||||||
|
'@nodelib/fs.walk@1.2.8':
|
||||||
|
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
|
||||||
|
engines: {node: '>= 8'}
|
||||||
|
|
||||||
|
'@types/node@12.20.55':
|
||||||
|
resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
|
||||||
|
|
||||||
|
ansi-colors@4.1.3:
|
||||||
|
resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
|
||||||
|
engines: {node: '>=6'}
|
||||||
|
|
||||||
|
ansi-regex@5.0.1:
|
||||||
|
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
|
argparse@1.0.10:
|
||||||
|
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
|
||||||
|
|
||||||
|
argparse@2.0.1:
|
||||||
|
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
|
||||||
|
|
||||||
|
array-union@2.1.0:
|
||||||
|
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
|
better-path-resolve@1.0.0:
|
||||||
|
resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==}
|
||||||
|
engines: {node: '>=4'}
|
||||||
|
|
||||||
|
braces@3.0.3:
|
||||||
|
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
|
chardet@2.1.1:
|
||||||
|
resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==}
|
||||||
|
|
||||||
|
cross-spawn@7.0.6:
|
||||||
|
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
|
||||||
|
engines: {node: '>= 8'}
|
||||||
|
|
||||||
|
detect-indent@6.1.0:
|
||||||
|
resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
|
dir-glob@3.0.1:
|
||||||
|
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
|
enquirer@2.4.1:
|
||||||
|
resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==}
|
||||||
|
engines: {node: '>=8.6'}
|
||||||
|
|
||||||
|
esprima@4.0.1:
|
||||||
|
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
|
||||||
|
engines: {node: '>=4'}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
|
extendable-error@0.1.7:
|
||||||
|
resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==}
|
||||||
|
|
||||||
|
fast-glob@3.3.3:
|
||||||
|
resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
|
||||||
|
engines: {node: '>=8.6.0'}
|
||||||
|
|
||||||
|
fastq@1.20.1:
|
||||||
|
resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==}
|
||||||
|
|
||||||
|
fill-range@7.1.1:
|
||||||
|
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
|
find-up@4.1.0:
|
||||||
|
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
|
fs-extra@7.0.1:
|
||||||
|
resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==}
|
||||||
|
engines: {node: '>=6 <7 || >=8'}
|
||||||
|
|
||||||
|
fs-extra@8.1.0:
|
||||||
|
resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
|
||||||
|
engines: {node: '>=6 <7 || >=8'}
|
||||||
|
|
||||||
|
glob-parent@5.1.2:
|
||||||
|
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
|
||||||
|
engines: {node: '>= 6'}
|
||||||
|
|
||||||
|
globby@11.1.0:
|
||||||
|
resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
|
||||||
|
engines: {node: '>=10'}
|
||||||
|
|
||||||
|
graceful-fs@4.2.11:
|
||||||
|
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
|
||||||
|
|
||||||
|
human-id@4.1.3:
|
||||||
|
resolution: {integrity: sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q==}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
|
iconv-lite@0.7.2:
|
||||||
|
resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==}
|
||||||
|
engines: {node: '>=0.10.0'}
|
||||||
|
|
||||||
|
ignore@5.3.2:
|
||||||
|
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
|
||||||
|
engines: {node: '>= 4'}
|
||||||
|
|
||||||
|
is-extglob@2.1.1:
|
||||||
|
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
|
||||||
|
engines: {node: '>=0.10.0'}
|
||||||
|
|
||||||
|
is-glob@4.0.3:
|
||||||
|
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
|
||||||
|
engines: {node: '>=0.10.0'}
|
||||||
|
|
||||||
|
is-number@7.0.0:
|
||||||
|
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
|
||||||
|
engines: {node: '>=0.12.0'}
|
||||||
|
|
||||||
|
is-subdir@1.2.0:
|
||||||
|
resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==}
|
||||||
|
engines: {node: '>=4'}
|
||||||
|
|
||||||
|
is-windows@1.0.2:
|
||||||
|
resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
|
||||||
|
engines: {node: '>=0.10.0'}
|
||||||
|
|
||||||
|
isexe@2.0.0:
|
||||||
|
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
|
||||||
|
|
||||||
|
js-yaml@3.14.2:
|
||||||
|
resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
|
js-yaml@4.1.1:
|
||||||
|
resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
|
jsonfile@4.0.0:
|
||||||
|
resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
|
||||||
|
|
||||||
|
locate-path@5.0.0:
|
||||||
|
resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
|
lodash.startcase@4.4.0:
|
||||||
|
resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
|
||||||
|
|
||||||
|
merge2@1.4.1:
|
||||||
|
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
|
||||||
|
engines: {node: '>= 8'}
|
||||||
|
|
||||||
|
micromatch@4.0.8:
|
||||||
|
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
|
||||||
|
engines: {node: '>=8.6'}
|
||||||
|
|
||||||
|
mri@1.2.0:
|
||||||
|
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
|
||||||
|
engines: {node: '>=4'}
|
||||||
|
|
||||||
|
outdent@0.5.0:
|
||||||
|
resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==}
|
||||||
|
|
||||||
|
p-filter@2.1.0:
|
||||||
|
resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
|
p-limit@2.3.0:
|
||||||
|
resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
|
||||||
|
engines: {node: '>=6'}
|
||||||
|
|
||||||
|
p-locate@4.1.0:
|
||||||
|
resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
|
p-map@2.1.0:
|
||||||
|
resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==}
|
||||||
|
engines: {node: '>=6'}
|
||||||
|
|
||||||
|
p-try@2.2.0:
|
||||||
|
resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
|
||||||
|
engines: {node: '>=6'}
|
||||||
|
|
||||||
|
package-manager-detector@0.2.11:
|
||||||
|
resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==}
|
||||||
|
|
||||||
|
path-exists@4.0.0:
|
||||||
|
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
|
path-key@3.1.1:
|
||||||
|
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
|
path-type@4.0.0:
|
||||||
|
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
|
picocolors@1.1.1:
|
||||||
|
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
|
||||||
|
|
||||||
|
picomatch@2.3.1:
|
||||||
|
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
|
||||||
|
engines: {node: '>=8.6'}
|
||||||
|
|
||||||
|
pify@4.0.1:
|
||||||
|
resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
|
||||||
|
engines: {node: '>=6'}
|
||||||
|
|
||||||
|
prettier@2.8.8:
|
||||||
|
resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
|
||||||
|
engines: {node: '>=10.13.0'}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
|
prettier@3.8.1:
|
||||||
|
resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==}
|
||||||
|
engines: {node: '>=14'}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
|
quansync@0.2.11:
|
||||||
|
resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==}
|
||||||
|
|
||||||
|
queue-microtask@1.2.3:
|
||||||
|
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
|
||||||
|
|
||||||
|
read-yaml-file@1.1.0:
|
||||||
|
resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==}
|
||||||
|
engines: {node: '>=6'}
|
||||||
|
|
||||||
|
resolve-from@5.0.0:
|
||||||
|
resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
|
reusify@1.1.0:
|
||||||
|
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
|
||||||
|
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
|
||||||
|
|
||||||
|
run-parallel@1.2.0:
|
||||||
|
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
|
||||||
|
|
||||||
|
safer-buffer@2.1.2:
|
||||||
|
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
|
||||||
|
|
||||||
|
semver@7.7.4:
|
||||||
|
resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==}
|
||||||
|
engines: {node: '>=10'}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
|
shebang-command@2.0.0:
|
||||||
|
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
|
shebang-regex@3.0.0:
|
||||||
|
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
|
signal-exit@4.1.0:
|
||||||
|
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
|
||||||
|
engines: {node: '>=14'}
|
||||||
|
|
||||||
|
slash@3.0.0:
|
||||||
|
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
|
spawndamnit@3.0.1:
|
||||||
|
resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==}
|
||||||
|
|
||||||
|
sprintf-js@1.0.3:
|
||||||
|
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
|
||||||
|
|
||||||
|
strip-ansi@6.0.1:
|
||||||
|
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
|
strip-bom@3.0.0:
|
||||||
|
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
|
||||||
|
engines: {node: '>=4'}
|
||||||
|
|
||||||
|
term-size@2.2.1:
|
||||||
|
resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
|
to-regex-range@5.0.1:
|
||||||
|
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
|
||||||
|
engines: {node: '>=8.0'}
|
||||||
|
|
||||||
|
turbo-darwin-64@2.8.14:
|
||||||
|
resolution: {integrity: sha512-9sFi7n2lLfEsGWi5OEoA/eTtQU2BPKtzSYKqufMtDeRmqMT9vKjbv9gJCRkllSVE9BOXA0qXC3diyX8V8rKIKw==}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [darwin]
|
||||||
|
|
||||||
|
turbo-darwin-arm64@2.8.14:
|
||||||
|
resolution: {integrity: sha512-aS4yJuy6A1PCLws+PJpZP0qCURG8Y5iVx13z/WAbKyeDTY6W6PiGgcEllSaeLGxyn++382ztN/EZH85n2zZ6VQ==}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [darwin]
|
||||||
|
|
||||||
|
turbo-linux-64@2.8.14:
|
||||||
|
resolution: {integrity: sha512-XC6wPUDJkakjhNLaS0NrHDMiujRVjH+naEAwvKLArgqRaFkNxjmyNDRM4eu3soMMFmjym6NTxYaF74rvET+Orw==}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
turbo-linux-arm64@2.8.14:
|
||||||
|
resolution: {integrity: sha512-ChfE7isyVNjZrVSPDwcfqcHLG/FuIBbOFxnt1FM8vSuBGzHAs8AlTdwFNIxlEMJfZ8Ad9mdMxdmsCUPIWiQ6cg==}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
turbo-windows-64@2.8.14:
|
||||||
|
resolution: {integrity: sha512-FTbIeQL1ycLFW2t9uQNMy+bRSzi3Xhwun/e7ZhFBdM+U0VZxxrtfYEBM9CHOejlfqomk6Jh7aRz0sJoqYn39Hg==}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [win32]
|
||||||
|
|
||||||
|
turbo-windows-arm64@2.8.14:
|
||||||
|
resolution: {integrity: sha512-KgZX12cTyhY030qS7ieT8zRkhZZE2VWJasDFVUSVVn17nR7IShpv68/7j5UqJNeRLIGF1XPK0phsP5V5yw3how==}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [win32]
|
||||||
|
|
||||||
|
turbo@2.8.14:
|
||||||
|
resolution: {integrity: sha512-UCTxeMNYT1cKaHiIFdLCQ7ulI+jw5i5uOnJOrRXsgUD7G3+OjlUjwVd7JfeVt2McWSVGjYA3EVW/v1FSsJ5DtA==}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
|
typescript@5.9.3:
|
||||||
|
resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
|
||||||
|
engines: {node: '>=14.17'}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
|
universalify@0.1.2:
|
||||||
|
resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
|
||||||
|
engines: {node: '>= 4.0.0'}
|
||||||
|
|
||||||
|
which@2.0.2:
|
||||||
|
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
|
||||||
|
engines: {node: '>= 8'}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
|
snapshots:
|
||||||
|
|
||||||
|
'@babel/runtime@7.28.6': {}
|
||||||
|
|
||||||
|
'@changesets/apply-release-plan@7.1.0':
|
||||||
|
dependencies:
|
||||||
|
'@changesets/config': 3.1.3
|
||||||
|
'@changesets/get-version-range-type': 0.4.0
|
||||||
|
'@changesets/git': 3.0.4
|
||||||
|
'@changesets/should-skip-package': 0.1.2
|
||||||
|
'@changesets/types': 6.1.0
|
||||||
|
'@manypkg/get-packages': 1.1.3
|
||||||
|
detect-indent: 6.1.0
|
||||||
|
fs-extra: 7.0.1
|
||||||
|
lodash.startcase: 4.4.0
|
||||||
|
outdent: 0.5.0
|
||||||
|
prettier: 2.8.8
|
||||||
|
resolve-from: 5.0.0
|
||||||
|
semver: 7.7.4
|
||||||
|
|
||||||
|
'@changesets/assemble-release-plan@6.0.9':
|
||||||
|
dependencies:
|
||||||
|
'@changesets/errors': 0.2.0
|
||||||
|
'@changesets/get-dependents-graph': 2.1.3
|
||||||
|
'@changesets/should-skip-package': 0.1.2
|
||||||
|
'@changesets/types': 6.1.0
|
||||||
|
'@manypkg/get-packages': 1.1.3
|
||||||
|
semver: 7.7.4
|
||||||
|
|
||||||
|
'@changesets/changelog-git@0.2.1':
|
||||||
|
dependencies:
|
||||||
|
'@changesets/types': 6.1.0
|
||||||
|
|
||||||
|
'@changesets/cli@2.30.0':
|
||||||
|
dependencies:
|
||||||
|
'@changesets/apply-release-plan': 7.1.0
|
||||||
|
'@changesets/assemble-release-plan': 6.0.9
|
||||||
|
'@changesets/changelog-git': 0.2.1
|
||||||
|
'@changesets/config': 3.1.3
|
||||||
|
'@changesets/errors': 0.2.0
|
||||||
|
'@changesets/get-dependents-graph': 2.1.3
|
||||||
|
'@changesets/get-release-plan': 4.0.15
|
||||||
|
'@changesets/git': 3.0.4
|
||||||
|
'@changesets/logger': 0.1.1
|
||||||
|
'@changesets/pre': 2.0.2
|
||||||
|
'@changesets/read': 0.6.7
|
||||||
|
'@changesets/should-skip-package': 0.1.2
|
||||||
|
'@changesets/types': 6.1.0
|
||||||
|
'@changesets/write': 0.4.0
|
||||||
|
'@inquirer/external-editor': 1.0.3
|
||||||
|
'@manypkg/get-packages': 1.1.3
|
||||||
|
ansi-colors: 4.1.3
|
||||||
|
enquirer: 2.4.1
|
||||||
|
fs-extra: 7.0.1
|
||||||
|
mri: 1.2.0
|
||||||
|
package-manager-detector: 0.2.11
|
||||||
|
picocolors: 1.1.1
|
||||||
|
resolve-from: 5.0.0
|
||||||
|
semver: 7.7.4
|
||||||
|
spawndamnit: 3.0.1
|
||||||
|
term-size: 2.2.1
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- '@types/node'
|
||||||
|
|
||||||
|
'@changesets/config@3.1.3':
|
||||||
|
dependencies:
|
||||||
|
'@changesets/errors': 0.2.0
|
||||||
|
'@changesets/get-dependents-graph': 2.1.3
|
||||||
|
'@changesets/logger': 0.1.1
|
||||||
|
'@changesets/should-skip-package': 0.1.2
|
||||||
|
'@changesets/types': 6.1.0
|
||||||
|
'@manypkg/get-packages': 1.1.3
|
||||||
|
fs-extra: 7.0.1
|
||||||
|
micromatch: 4.0.8
|
||||||
|
|
||||||
|
'@changesets/errors@0.2.0':
|
||||||
|
dependencies:
|
||||||
|
extendable-error: 0.1.7
|
||||||
|
|
||||||
|
'@changesets/get-dependents-graph@2.1.3':
|
||||||
|
dependencies:
|
||||||
|
'@changesets/types': 6.1.0
|
||||||
|
'@manypkg/get-packages': 1.1.3
|
||||||
|
picocolors: 1.1.1
|
||||||
|
semver: 7.7.4
|
||||||
|
|
||||||
|
'@changesets/get-release-plan@4.0.15':
|
||||||
|
dependencies:
|
||||||
|
'@changesets/assemble-release-plan': 6.0.9
|
||||||
|
'@changesets/config': 3.1.3
|
||||||
|
'@changesets/pre': 2.0.2
|
||||||
|
'@changesets/read': 0.6.7
|
||||||
|
'@changesets/types': 6.1.0
|
||||||
|
'@manypkg/get-packages': 1.1.3
|
||||||
|
|
||||||
|
'@changesets/get-version-range-type@0.4.0': {}
|
||||||
|
|
||||||
|
'@changesets/git@3.0.4':
|
||||||
|
dependencies:
|
||||||
|
'@changesets/errors': 0.2.0
|
||||||
|
'@manypkg/get-packages': 1.1.3
|
||||||
|
is-subdir: 1.2.0
|
||||||
|
micromatch: 4.0.8
|
||||||
|
spawndamnit: 3.0.1
|
||||||
|
|
||||||
|
'@changesets/logger@0.1.1':
|
||||||
|
dependencies:
|
||||||
|
picocolors: 1.1.1
|
||||||
|
|
||||||
|
'@changesets/parse@0.4.3':
|
||||||
|
dependencies:
|
||||||
|
'@changesets/types': 6.1.0
|
||||||
|
js-yaml: 4.1.1
|
||||||
|
|
||||||
|
'@changesets/pre@2.0.2':
|
||||||
|
dependencies:
|
||||||
|
'@changesets/errors': 0.2.0
|
||||||
|
'@changesets/types': 6.1.0
|
||||||
|
'@manypkg/get-packages': 1.1.3
|
||||||
|
fs-extra: 7.0.1
|
||||||
|
|
||||||
|
'@changesets/read@0.6.7':
|
||||||
|
dependencies:
|
||||||
|
'@changesets/git': 3.0.4
|
||||||
|
'@changesets/logger': 0.1.1
|
||||||
|
'@changesets/parse': 0.4.3
|
||||||
|
'@changesets/types': 6.1.0
|
||||||
|
fs-extra: 7.0.1
|
||||||
|
p-filter: 2.1.0
|
||||||
|
picocolors: 1.1.1
|
||||||
|
|
||||||
|
'@changesets/should-skip-package@0.1.2':
|
||||||
|
dependencies:
|
||||||
|
'@changesets/types': 6.1.0
|
||||||
|
'@manypkg/get-packages': 1.1.3
|
||||||
|
|
||||||
|
'@changesets/types@4.1.0': {}
|
||||||
|
|
||||||
|
'@changesets/types@6.1.0': {}
|
||||||
|
|
||||||
|
'@changesets/write@0.4.0':
|
||||||
|
dependencies:
|
||||||
|
'@changesets/types': 6.1.0
|
||||||
|
fs-extra: 7.0.1
|
||||||
|
human-id: 4.1.3
|
||||||
|
prettier: 2.8.8
|
||||||
|
|
||||||
|
'@inquirer/external-editor@1.0.3':
|
||||||
|
dependencies:
|
||||||
|
chardet: 2.1.1
|
||||||
|
iconv-lite: 0.7.2
|
||||||
|
|
||||||
|
'@manypkg/find-root@1.1.0':
|
||||||
|
dependencies:
|
||||||
|
'@babel/runtime': 7.28.6
|
||||||
|
'@types/node': 12.20.55
|
||||||
|
find-up: 4.1.0
|
||||||
|
fs-extra: 8.1.0
|
||||||
|
|
||||||
|
'@manypkg/get-packages@1.1.3':
|
||||||
|
dependencies:
|
||||||
|
'@babel/runtime': 7.28.6
|
||||||
|
'@changesets/types': 4.1.0
|
||||||
|
'@manypkg/find-root': 1.1.0
|
||||||
|
fs-extra: 8.1.0
|
||||||
|
globby: 11.1.0
|
||||||
|
read-yaml-file: 1.1.0
|
||||||
|
|
||||||
|
'@nodelib/fs.scandir@2.1.5':
|
||||||
|
dependencies:
|
||||||
|
'@nodelib/fs.stat': 2.0.5
|
||||||
|
run-parallel: 1.2.0
|
||||||
|
|
||||||
|
'@nodelib/fs.stat@2.0.5': {}
|
||||||
|
|
||||||
|
'@nodelib/fs.walk@1.2.8':
|
||||||
|
dependencies:
|
||||||
|
'@nodelib/fs.scandir': 2.1.5
|
||||||
|
fastq: 1.20.1
|
||||||
|
|
||||||
|
'@types/node@12.20.55': {}
|
||||||
|
|
||||||
|
ansi-colors@4.1.3: {}
|
||||||
|
|
||||||
|
ansi-regex@5.0.1: {}
|
||||||
|
|
||||||
|
argparse@1.0.10:
|
||||||
|
dependencies:
|
||||||
|
sprintf-js: 1.0.3
|
||||||
|
|
||||||
|
argparse@2.0.1: {}
|
||||||
|
|
||||||
|
array-union@2.1.0: {}
|
||||||
|
|
||||||
|
better-path-resolve@1.0.0:
|
||||||
|
dependencies:
|
||||||
|
is-windows: 1.0.2
|
||||||
|
|
||||||
|
braces@3.0.3:
|
||||||
|
dependencies:
|
||||||
|
fill-range: 7.1.1
|
||||||
|
|
||||||
|
chardet@2.1.1: {}
|
||||||
|
|
||||||
|
cross-spawn@7.0.6:
|
||||||
|
dependencies:
|
||||||
|
path-key: 3.1.1
|
||||||
|
shebang-command: 2.0.0
|
||||||
|
which: 2.0.2
|
||||||
|
|
||||||
|
detect-indent@6.1.0: {}
|
||||||
|
|
||||||
|
dir-glob@3.0.1:
|
||||||
|
dependencies:
|
||||||
|
path-type: 4.0.0
|
||||||
|
|
||||||
|
enquirer@2.4.1:
|
||||||
|
dependencies:
|
||||||
|
ansi-colors: 4.1.3
|
||||||
|
strip-ansi: 6.0.1
|
||||||
|
|
||||||
|
esprima@4.0.1: {}
|
||||||
|
|
||||||
|
extendable-error@0.1.7: {}
|
||||||
|
|
||||||
|
fast-glob@3.3.3:
|
||||||
|
dependencies:
|
||||||
|
'@nodelib/fs.stat': 2.0.5
|
||||||
|
'@nodelib/fs.walk': 1.2.8
|
||||||
|
glob-parent: 5.1.2
|
||||||
|
merge2: 1.4.1
|
||||||
|
micromatch: 4.0.8
|
||||||
|
|
||||||
|
fastq@1.20.1:
|
||||||
|
dependencies:
|
||||||
|
reusify: 1.1.0
|
||||||
|
|
||||||
|
fill-range@7.1.1:
|
||||||
|
dependencies:
|
||||||
|
to-regex-range: 5.0.1
|
||||||
|
|
||||||
|
find-up@4.1.0:
|
||||||
|
dependencies:
|
||||||
|
locate-path: 5.0.0
|
||||||
|
path-exists: 4.0.0
|
||||||
|
|
||||||
|
fs-extra@7.0.1:
|
||||||
|
dependencies:
|
||||||
|
graceful-fs: 4.2.11
|
||||||
|
jsonfile: 4.0.0
|
||||||
|
universalify: 0.1.2
|
||||||
|
|
||||||
|
fs-extra@8.1.0:
|
||||||
|
dependencies:
|
||||||
|
graceful-fs: 4.2.11
|
||||||
|
jsonfile: 4.0.0
|
||||||
|
universalify: 0.1.2
|
||||||
|
|
||||||
|
glob-parent@5.1.2:
|
||||||
|
dependencies:
|
||||||
|
is-glob: 4.0.3
|
||||||
|
|
||||||
|
globby@11.1.0:
|
||||||
|
dependencies:
|
||||||
|
array-union: 2.1.0
|
||||||
|
dir-glob: 3.0.1
|
||||||
|
fast-glob: 3.3.3
|
||||||
|
ignore: 5.3.2
|
||||||
|
merge2: 1.4.1
|
||||||
|
slash: 3.0.0
|
||||||
|
|
||||||
|
graceful-fs@4.2.11: {}
|
||||||
|
|
||||||
|
human-id@4.1.3: {}
|
||||||
|
|
||||||
|
iconv-lite@0.7.2:
|
||||||
|
dependencies:
|
||||||
|
safer-buffer: 2.1.2
|
||||||
|
|
||||||
|
ignore@5.3.2: {}
|
||||||
|
|
||||||
|
is-extglob@2.1.1: {}
|
||||||
|
|
||||||
|
is-glob@4.0.3:
|
||||||
|
dependencies:
|
||||||
|
is-extglob: 2.1.1
|
||||||
|
|
||||||
|
is-number@7.0.0: {}
|
||||||
|
|
||||||
|
is-subdir@1.2.0:
|
||||||
|
dependencies:
|
||||||
|
better-path-resolve: 1.0.0
|
||||||
|
|
||||||
|
is-windows@1.0.2: {}
|
||||||
|
|
||||||
|
isexe@2.0.0: {}
|
||||||
|
|
||||||
|
js-yaml@3.14.2:
|
||||||
|
dependencies:
|
||||||
|
argparse: 1.0.10
|
||||||
|
esprima: 4.0.1
|
||||||
|
|
||||||
|
js-yaml@4.1.1:
|
||||||
|
dependencies:
|
||||||
|
argparse: 2.0.1
|
||||||
|
|
||||||
|
jsonfile@4.0.0:
|
||||||
|
optionalDependencies:
|
||||||
|
graceful-fs: 4.2.11
|
||||||
|
|
||||||
|
locate-path@5.0.0:
|
||||||
|
dependencies:
|
||||||
|
p-locate: 4.1.0
|
||||||
|
|
||||||
|
lodash.startcase@4.4.0: {}
|
||||||
|
|
||||||
|
merge2@1.4.1: {}
|
||||||
|
|
||||||
|
micromatch@4.0.8:
|
||||||
|
dependencies:
|
||||||
|
braces: 3.0.3
|
||||||
|
picomatch: 2.3.1
|
||||||
|
|
||||||
|
mri@1.2.0: {}
|
||||||
|
|
||||||
|
outdent@0.5.0: {}
|
||||||
|
|
||||||
|
p-filter@2.1.0:
|
||||||
|
dependencies:
|
||||||
|
p-map: 2.1.0
|
||||||
|
|
||||||
|
p-limit@2.3.0:
|
||||||
|
dependencies:
|
||||||
|
p-try: 2.2.0
|
||||||
|
|
||||||
|
p-locate@4.1.0:
|
||||||
|
dependencies:
|
||||||
|
p-limit: 2.3.0
|
||||||
|
|
||||||
|
p-map@2.1.0: {}
|
||||||
|
|
||||||
|
p-try@2.2.0: {}
|
||||||
|
|
||||||
|
package-manager-detector@0.2.11:
|
||||||
|
dependencies:
|
||||||
|
quansync: 0.2.11
|
||||||
|
|
||||||
|
path-exists@4.0.0: {}
|
||||||
|
|
||||||
|
path-key@3.1.1: {}
|
||||||
|
|
||||||
|
path-type@4.0.0: {}
|
||||||
|
|
||||||
|
picocolors@1.1.1: {}
|
||||||
|
|
||||||
|
picomatch@2.3.1: {}
|
||||||
|
|
||||||
|
pify@4.0.1: {}
|
||||||
|
|
||||||
|
prettier@2.8.8: {}
|
||||||
|
|
||||||
|
prettier@3.8.1: {}
|
||||||
|
|
||||||
|
quansync@0.2.11: {}
|
||||||
|
|
||||||
|
queue-microtask@1.2.3: {}
|
||||||
|
|
||||||
|
read-yaml-file@1.1.0:
|
||||||
|
dependencies:
|
||||||
|
graceful-fs: 4.2.11
|
||||||
|
js-yaml: 3.14.2
|
||||||
|
pify: 4.0.1
|
||||||
|
strip-bom: 3.0.0
|
||||||
|
|
||||||
|
resolve-from@5.0.0: {}
|
||||||
|
|
||||||
|
reusify@1.1.0: {}
|
||||||
|
|
||||||
|
run-parallel@1.2.0:
|
||||||
|
dependencies:
|
||||||
|
queue-microtask: 1.2.3
|
||||||
|
|
||||||
|
safer-buffer@2.1.2: {}
|
||||||
|
|
||||||
|
semver@7.7.4: {}
|
||||||
|
|
||||||
|
shebang-command@2.0.0:
|
||||||
|
dependencies:
|
||||||
|
shebang-regex: 3.0.0
|
||||||
|
|
||||||
|
shebang-regex@3.0.0: {}
|
||||||
|
|
||||||
|
signal-exit@4.1.0: {}
|
||||||
|
|
||||||
|
slash@3.0.0: {}
|
||||||
|
|
||||||
|
spawndamnit@3.0.1:
|
||||||
|
dependencies:
|
||||||
|
cross-spawn: 7.0.6
|
||||||
|
signal-exit: 4.1.0
|
||||||
|
|
||||||
|
sprintf-js@1.0.3: {}
|
||||||
|
|
||||||
|
strip-ansi@6.0.1:
|
||||||
|
dependencies:
|
||||||
|
ansi-regex: 5.0.1
|
||||||
|
|
||||||
|
strip-bom@3.0.0: {}
|
||||||
|
|
||||||
|
term-size@2.2.1: {}
|
||||||
|
|
||||||
|
to-regex-range@5.0.1:
|
||||||
|
dependencies:
|
||||||
|
is-number: 7.0.0
|
||||||
|
|
||||||
|
turbo-darwin-64@2.8.14:
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
turbo-darwin-arm64@2.8.14:
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
turbo-linux-64@2.8.14:
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
turbo-linux-arm64@2.8.14:
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
turbo-windows-64@2.8.14:
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
turbo-windows-arm64@2.8.14:
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
turbo@2.8.14:
|
||||||
|
optionalDependencies:
|
||||||
|
turbo-darwin-64: 2.8.14
|
||||||
|
turbo-darwin-arm64: 2.8.14
|
||||||
|
turbo-linux-64: 2.8.14
|
||||||
|
turbo-linux-arm64: 2.8.14
|
||||||
|
turbo-windows-64: 2.8.14
|
||||||
|
turbo-windows-arm64: 2.8.14
|
||||||
|
|
||||||
|
typescript@5.9.3: {}
|
||||||
|
|
||||||
|
universalify@0.1.2: {}
|
||||||
|
|
||||||
|
which@2.0.2:
|
||||||
|
dependencies:
|
||||||
|
isexe: 2.0.0
|
||||||
3
pnpm-workspace.yaml
Normal file
3
pnpm-workspace.yaml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
packages:
|
||||||
|
- 'packages/*'
|
||||||
|
- 'plugins/*'
|
||||||
1
prettier.config.js
Normal file
1
prettier.config.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export default { semi: true, singleQuote: true, trailingComma: 'all', printWidth: 100 };
|
||||||
14
tsconfig.base.json
Normal file
14
tsconfig.base.json
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"strict": true,
|
||||||
|
"target": "ES2022",
|
||||||
|
"module": "NodeNext",
|
||||||
|
"moduleResolution": "NodeNext",
|
||||||
|
"declaration": true,
|
||||||
|
"declarationMap": true,
|
||||||
|
"sourceMap": true,
|
||||||
|
"outDir": "dist",
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"skipLibCheck": true
|
||||||
|
}
|
||||||
|
}
|
||||||
9
turbo.json
Normal file
9
turbo.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://turbo.build/schema.json",
|
||||||
|
"tasks": {
|
||||||
|
"build": { "dependsOn": ["^build"], "outputs": ["dist/**"] },
|
||||||
|
"test": { "dependsOn": ["^build"] },
|
||||||
|
"lint": {},
|
||||||
|
"typecheck": { "dependsOn": ["^build"] }
|
||||||
|
}
|
||||||
|
}
|
||||||
3
vitest.workspace.ts
Normal file
3
vitest.workspace.ts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
import { defineWorkspace } from 'vitest/config';
|
||||||
|
|
||||||
|
export default defineWorkspace([]);
|
||||||
Reference in New Issue
Block a user