diff --git a/CLAUDE.md b/CLAUDE.md index 4a4c0b3..c1fc018 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -78,7 +78,7 @@ docs/ architecture notes, ADRs, API specs ## AI stack -oO generates tips with an LLM and ranks them with a bandit. All LLM calls route through **LiteLLM** at `llm.alogins.net` using model aliases — swapping models is a config change, not a code change. +oO generates tips through a multi-agent pipeline (ADR-0013): pre-compute agents emit prompt snippets, an orchestrator LLM assembles them into one tip. All LLM calls route through **LiteLLM** at `llm.alogins.net` using model aliases — swapping models is a config change, not a code change. | Alias | Model | Used by | |-------|-------|---------| @@ -90,33 +90,37 @@ Env vars: `LITELLM_URL` (prod `https://llm.alogins.net`), `OLLAMA_URL` (Agap hos Ollama and LiteLLM are **shared Agap services**, not oO services — they live in `agap_git/openai/docker-compose.yml` along with langfuse (observability). oO never starts them; ml-serving just calls the alias. -**LLM tip generation pipeline:** -1. `ml/features/context.py` assembles user signals → structured prompt context -2. `POST /generate` in `ml/serving` calls LiteLLM → returns `TipCandidate[]` -3. Bandit policy in `ml/serving` scores + ranks candidates -4. Best candidate returned as tip; reaction closes the online reward loop +**Multi-agent tip generation pipeline (ADR-0013):** +1. Pre-compute agents (`ml/agents//`) run on a schedule, each emitting a snippet into `agent_outputs` with a per-agent TTL +2. On request, `recommender` (TS) loads the eligible agent set (registry-driven, ADR-0014) and pulls the freshest non-expired snippets +3. `POST /recommend` in `ml/serving` assembles the orchestrator prompt (`v4-orchestrator`) and calls LiteLLM via the `tip-generator` alias +4. Returned tip is logged in `tip_scores` with the contributing agent set; reaction is logged for observability (no bandit reward loop) ## Current phase **M1 shipped (core + admin). M2 (AI tips) in progress.** See `README.md` for the phase roadmap and `docs/architecture/` for diagrams. Work is tracked as Gitea milestones + issues on `alvis/oO`. -Recent completions (M1 add-on): -- ADR-0012 — ε-greedy v2 promotion (profile features, D=12) — 2026-04-26 -- Offline sim framework + MLflow integration — shipped in M1 add-on -- Token-based admin auth for Playwright/CI — secured auth boundary +Recent completions: +- ADR-0013 — multi-agent recommendation: pre-computed agent snippets + orchestrator LLM (replaces ε-greedy bandit) — 2026-05-01 +- LLM context assembler + tip generation scaffold (#79, #88) +- Model benchmarking for tip generation (#93, #95) +- Admin UX refinements: feedback consolidation, settings placement (#100–102) +- ADR-0012 — ε-greedy v2 (D=12) — 2026-04-26 (now superseded by ADR-0013) Active work (M2): +- ADR-0014 (proposed) — unified Profile model + agent registry + inference framework +- Unified Profile model: prefs, contexts, consents, registry plumbing, orchestrator cutover (#30) +- Shared context-inference framework for agents (#111) +- Per-agent auto-inference: time-of-day (#112), focus-area (#113), momentum (#114), overdue-task (#115), recent-patterns (#116) - Signal abstraction for multi-source support (#78) - Per-user feature freshness SLAs (#61, ADR-0011 phase B) -- LLM context assembler + tip generation scaffold (#79, #88) -- Model benchmarking for tip generation (#93) -- Admin UX refinements: feedback consolidation, settings placement (#100–102) ## What NOT to do - Don't copy Todoist's data into our DB. Store the OAuth token + computed features/derivatives we need, fetch raw on demand. - Don't implement auth by hand. Auth.js behind an OIDC-shaped boundary (ADR-0004); swap to a dedicated OIDC provider only when mobile ships. -- Don't hardwire a recommender. The contract is `POST /recommend → {tip}`. Swap internals (bandit, LLM, hybrid), keep contract. +- Don't hardwire a recommender. The contract is `POST /recommend → {tip}`. Swap internals (multi-agent orchestrator today, future LLM/hybrid variants), keep contract. +- Don't hardcode the agent list. The orchestrator is registry-driven (ADR-0014); adding/removing an agent is a manifest change in `ml/agents//`, never a recommender edit. - Don't replace a policy in one step. New policies deploy shadow-first; promoted only after offline + online agreement with the incumbent (ADR-0002). - Don't over-split processes. Extract a service when pressure demands it, not in anticipation (ADR-0003). - Don't call LLMs directly from application code. All LLM calls go through `ml/serving` (Python) via `LITELLM_URL`. The TS recommender never holds a model name. diff --git a/README.md b/README.md index ae90cb6..6562b52 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ docs/ architecture, adr, api ## AI stack -oO is AI-native: the recommender's job is to **rank**, not to write. An LLM generates candidate tips from the user's context; the bandit picks the best one. +oO is AI-native. Domain-specialized agents pre-compute snippets describing the user's state from one angle each; an orchestrator LLM reasons over the assembled snippets and produces one tip (ADR-0013). The orchestrator iterates a registry, not a hardcoded list (ADR-0014) — adding an agent is a manifest change, nothing else. ### Three-tier layout @@ -79,25 +79,28 @@ oO is AI-native: the recommender's job is to **rank**, not to write. An LLM gene | Routing | **LiteLLM** | Unified OpenAI-compatible API; model aliases; cloud fallback | `llm.alogins.net` (Agap shared) | | Testing | **OpenWebUI** | Prompt iteration, model comparison, manual evals | `ai.alogins.net` (Agap shared) | -### Tip generation pipeline (Phase 2 target) +### Tip generation pipeline (ADR-0013, M2) ``` -User signals ──▶ Context assembler ──▶ LiteLLM ──▶ Ollama (local) -(tasks, calendar, (ml/features/) (routing) or cloud fallback - patterns, time) +User signals Pre-compute agents (every 15 min) +(tasks, calendar, ──▶ ml/agents/{overdue-task, momentum, ──▶ agent_outputs + patterns, time) time-of-day, recent-patterns, (per-agent TTL) + focus-area, ...} + │ + Eligibility filter: required consents + │ + active context + per-user prefs (ADR-0014) ◀──┘ ▼ - N typed TipCandidates - {content, kind, model, - prompt_version, confidence} + Orchestrator prompt (`v4-orchestrator`) + = global prefs + active context + snippets ▼ - Bandit policy (ml/serving) - scores + ranks candidates + LiteLLM ──▶ Ollama (local) / cloud fallback ▼ - Best tip shown + Tip shown to user ▼ User reaction (done / snooze / dismiss + dwell) ▼ - Online bandit update + prompt_version tracking + Logged to tip_feedback for observability + (no online ML reward loop — see ADR-0013) ``` **Why LiteLLM as gateway:** All LLM calls use a single `LITELLM_URL` env var. Swapping from qwen2.5 to llama3.2, or routing a fraction to Claude for A/B, is a config change in LiteLLM — zero code change in oO. The model name in `tip_scores` tells you exactly which model produced each tip. @@ -194,6 +197,20 @@ oO is ML-heavy. Without a cockpit, every model change ships blind. This console ### Phase 2 — AI tips + multi-source signals *(M2)* in progress Goal: tips are AI-generated from user context, not just raw Todoist tasks. Multiple signal sources feed a generalized pipeline. Research-intensive milestone. +**Architectural shift (mid-M2):** the bandit-ranks-LLM-candidates design from earlier in M2 was replaced with a multi-agent pipeline (ADR-0013): pre-compute agents emit prompt snippets, an orchestrator LLM produces the tip directly. ADR-0014 layers a unified Profile + agent registry + auto-inference framework on top so the system generalizes cleanly to N agents. + +**Multi-agent recommendation (ADR-0013, shipped):** +- [x] `agent_outputs` table + per-agent TTL caching +- [x] Five initial agents: `overdue-task`, `momentum`, `time-of-day`, `recent-patterns`, `focus-area` +- [x] Agent pre-compute scheduler +- [x] Orchestrator cutover — recommender calls `ml/serving` with snippet list, no bandit scoring +- [x] Bandit endpoints + shadow policy machinery removed + +**Unified Profile + agent registry (ADR-0014, in progress):** +- [ ] Unified Profile model: prefs, contexts, consents + manifest plumbing + orchestrator cutover (#30) +- [ ] Shared context-inference framework (#111) +- [ ] Per-agent auto-inference: `time-of-day` (#112), `focus-area` (#113), `momentum` (#114), `overdue-task` (#115), `recent-patterns` (#116) + **AI infrastructure (unblock everything else):** - [ ] `ai` compose profile — Ollama + LiteLLM for local dev; env vars `OLLAMA_URL` / `LITELLM_URL` (#86) - [ ] AI gateway — wire `ml/serving` to LiteLLM; model aliases `tip-generator` + `embedder` (#87) diff --git a/apps/admin/tsconfig.tsbuildinfo b/apps/admin/tsconfig.tsbuildinfo index efb1f2d..b6bb8cb 100644 --- a/apps/admin/tsconfig.tsbuildinfo +++ b/apps/admin/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"fileNames":["../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.collection.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.collection.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.iterator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.float16.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.error.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","./next.config.ts","../../node_modules/.pnpm/source-map-js@1.2.1/node_modules/source-map-js/source-map.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/previous-map.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/input.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/css-syntax-error.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/declaration.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/root.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/warning.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/lazy-result.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/no-work-result.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/processor.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/result.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/document.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/rule.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/node.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/comment.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/container.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/at-rule.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/list.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/postcss.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/postcss.d.mts","../../node_modules/.pnpm/tailwindcss@3.4.19_tsx@4.21.0/node_modules/tailwindcss/types/generated/corePluginList.d.ts","../../node_modules/.pnpm/tailwindcss@3.4.19_tsx@4.21.0/node_modules/tailwindcss/types/generated/colors.d.ts","../../node_modules/.pnpm/tailwindcss@3.4.19_tsx@4.21.0/node_modules/tailwindcss/types/config.d.ts","../../node_modules/.pnpm/tailwindcss@3.4.19_tsx@4.21.0/node_modules/tailwindcss/types/index.d.ts","./tailwind.config.ts","./src/middleware.ts","./src/lib/api.ts","../../node_modules/.pnpm/marked@14.1.4/node_modules/marked/lib/marked.d.ts","./src/lib/docs.ts","./src/app/layout.tsx","../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/global.d.ts","../../node_modules/.pnpm/csstype@3.2.3/node_modules/csstype/index.d.ts","../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/index.d.ts","./src/components/AdminShell.tsx","./src/components/OverviewDashboard.tsx","./src/app/page.tsx","./src/components/AuditLog.tsx","./src/app/audit/page.tsx","./src/app/data-quality/page.tsx","./src/app/docs/page.tsx","./src/app/docs/[category]/[slug]/page.tsx","./src/app/events/page.tsx","./src/app/features/page.tsx","./src/app/forbidden/page.tsx","./src/app/health/page.tsx","./src/app/login/page.tsx","./src/app/ops/page.tsx","./src/app/reward-analytics/page.tsx","./src/app/simulate/page.tsx","./src/app/sql/page.tsx","./src/app/tips/page.tsx","./src/components/UsersTable.tsx","./src/app/users/page.tsx","./src/components/UserDetail.tsx","./src/app/users/[id]/page.tsx","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/compatibility/index.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/events.d.ts","../../node_modules/.pnpm/buffer@5.7.1/node_modules/buffer/index.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/navigator.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/storage.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/inspector.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/inspector.generated.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/readline/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/sea.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/sqlite.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/test.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/index.d.ts","../../node_modules/.pnpm/@types+react-dom@19.2.3_@types+react@19.2.14/node_modules/@types/react-dom/index.d.ts"],"fileIdsList":[[144,193,210,211,215],[117,120,144,193,210,211],[110,116,117,144,193,210,211],[112,117,144,193,210,211],[116,117,144,193,210,211],[144,193,210,211],[116,144,193,210,211],[117,118,144,193,210,211],[117,137,144,193,210,211],[117,135,144,193,210,211],[110,116,144,193,210,211],[111,144,193,206,210,211,215],[107,144,193,210,211],[144,190,191,193,210,211],[144,192,193,210,211],[193,210,211],[144,193,198,210,211,228],[144,193,194,199,204,210,211,213,225,236],[144,193,194,195,204,210,211,213],[139,140,141,144,193,210,211],[144,193,196,210,211,237],[144,193,197,198,205,210,211,214],[144,193,198,210,211,225,233],[144,193,199,201,204,210,211,213],[144,192,193,200,210,211],[144,193,201,202,210,211],[144,193,203,204,210,211],[144,192,193,204,210,211],[144,193,204,205,206,210,211,225,236],[144,193,204,205,206,210,211,220,225,228],[144,186,193,201,204,207,210,211,213,225,236],[144,193,204,205,207,208,210,211,213,225,233,236],[144,193,207,209,210,211,225,233,236],[142,143,144,145,146,147,148,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242],[144,193,204,210,211],[144,193,210,211,212,236],[144,193,201,204,210,211,213,225],[144,193,210,211,214],[144,192,193,210,211,216],[144,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242],[144,193,210,211,218],[144,193,210,211,219],[144,193,204,210,211,220,221],[144,193,210,211,220,222,237,239],[144,193,205,210,211],[144,193,204,210,211,225,226,228],[144,193,210,211,227,228],[144,193,210,211,225,226],[144,193,210,211,228],[144,193,210,211,229],[144,190,193,210,211,225,230,236],[144,193,204,210,211,231,232],[144,193,210,211,231,232],[144,193,198,210,211,213,225,233],[144,193,210,211,234],[144,193,210,211,213,235],[144,193,207,210,211,219,236],[144,193,198,210,211,237],[144,193,210,211,225,238],[144,193,210,211,212,239],[144,193,210,211,240],[144,186,193,210,211],[144,186,193,204,206,210,211,216,225,228,236,238,239,241],[144,193,210,211,225,242],[114,115,144,193,210,211],[99,144,193,210,211],[97,99,144,193,210,211],[88,96,97,98,100,102,144,193,210,211],[86,144,193,210,211],[89,94,99,102,144,193,210,211],[85,102,144,193,210,211],[89,90,93,94,95,102,144,193,210,211],[89,90,91,93,94,102,144,193,210,211],[86,87,88,89,90,94,95,96,98,99,100,102,144,193,210,211],[102,144,193,210,211],[84,86,87,88,89,90,91,93,94,95,96,97,98,99,100,101,144,193,210,211],[84,102,144,193,210,211],[89,91,92,94,95,102,144,193,210,211],[93,102,144,193,210,211],[94,95,99,102,144,193,210,211],[87,97,144,193,210,211],[104,105,144,193,210,211],[103,106,144,193,210,211],[144,158,162,193,210,211,236],[144,158,193,210,211,225,236],[144,153,193,210,211],[144,155,158,193,210,211,233,236],[144,193,210,211,213,233],[144,193,210,211,243],[144,153,193,210,211,243],[144,155,158,193,210,211,213,236],[144,150,151,154,157,193,204,210,211,225,236],[144,158,165,193,210,211],[144,150,156,193,210,211],[144,158,179,180,193,210,211],[144,154,158,193,210,211,228,236,243],[144,179,193,210,211,243],[144,152,153,193,210,211,243],[144,158,193,210,211],[144,152,153,154,155,156,157,158,159,160,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,180,181,182,183,184,185,193,210,211],[144,158,173,193,210,211],[144,158,165,166,193,210,211],[144,156,158,166,167,193,210,211],[144,157,193,210,211],[144,150,153,158,193,210,211],[144,158,162,166,167,193,210,211],[144,162,193,210,211],[144,156,158,161,193,210,211,236],[144,150,155,158,165,193,210,211],[144,193,210,211,225],[144,153,158,179,193,210,211,241,243]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"2ab096661c711e4a81cc464fa1e6feb929a54f5340b46b0a07ac6bbf857471f0","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"73f78680d4c08509933daf80947902f6ff41b6230f94dd002ae372620adb0f60","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5239f5c01bcfa9cd32f37c496cf19c61d69d37e48be9de612b541aac915805b","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"3be60943d84dcf27d44f8918c3ee34f55ba9850c61737bf01f3c6238b3976e16","signature":"fe30465f81a37f23a168022109187dbd1951404e3ec2fbc6516d584c597f1325"},{"version":"402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","impliedFormat":1},{"version":"52dcc257df5119fb66d864625112ce5033ac51a4c2afe376a0b299d2f7f76e4a","impliedFormat":1},{"version":"e5bab5f871ef708d52d47b3e5d0aa72a08ee7a152f33931d9a60809711a2a9a3","impliedFormat":1},{"version":"e16dc2a81595736024a206c7d5c8a39bfe2e6039208ef29981d0d95434ba8fcf","impliedFormat":1},{"version":"cc4a4903fb698ca1d961d4c10dce658aa3a479faf40509d526f122b044eaf6a4","impliedFormat":1},{"version":"19ee8416e6473ed6c7adb868fa796b5653cf0fa2a337658e677eaa0d134388c3","impliedFormat":1},{"version":"1328ab4e442614b28cdb3d4b414cf68325c0da0dca07287a338d0654b7a00261","impliedFormat":1},{"version":"a039dc21f045919f3cbee2ec13812cc6cc3eebc99dae4be00973230f468d19a6","impliedFormat":1},{"version":"3fbe57af01460e49dcd29df55d6931e1672bc6f1be0fb073d11410bc16f9037d","impliedFormat":1},{"version":"f760be449e8562ec5c09bb5187e8e1eabf3c113c0c58cddda53ef8c69f3e2131","impliedFormat":1},{"version":"44325ed13294fce6ab825b82947bbeed2611db7dad9d9135260192f375e5a189","impliedFormat":1},{"version":"e392e8fb5b514eafc585601c1d781485aa6dd6a320e75daf1064a4c6918a1b45","impliedFormat":1},{"version":"46e4a36e8ddbdfb4e7330e11c81c970dc8b218611df9183d39c41c5f8c653b55","impliedFormat":1},{"version":"370bde134aa8c2abc926d0e99d3a4d5d5dba65c6ee65459137e4f02670cbf841","impliedFormat":1},{"version":"6332f565867cf4a740a70e30f31cefba37ef7cebcf74f22eab8d744fde6d193e","impliedFormat":1},{"version":"2977b7884aedc895a1d0c9c210c7cf3272c29d6959a08a6fa3ff71e0aff08175","impliedFormat":1},{"version":"17f2922d41ddd032830a91371c948cd9ce903b35c95adca72271a54584f19b0b","impliedFormat":1},{"version":"3eed76ede2a1a14d7c9bb0a642041282dcc264811139d3dd275c9fe14efc9840","impliedFormat":1},{"version":"00cf4001e0d9c6e5e036bc545b9d73e2b8b84cddb02e61ad05bab3752b1d4522","impliedFormat":1},{"version":"8d369483f0c2b9ee388129cfdb6a43bc8112b377e86a41884bd06e19ce04f4c1","impliedFormat":99},{"version":"b558c9a18ea4e6e4157124465c3ef1063e64640da139e67be5edb22f534f2f08","impliedFormat":1},{"version":"01374379f82be05d25c08d2f30779fa4a4c41895a18b93b33f14aeef51768692","impliedFormat":1},{"version":"b0dee183d4e65cf938242efaf3d833c6b645afb35039d058496965014f158141","impliedFormat":1},{"version":"c0bbbf84d3fbd85dd60d040c81e8964cc00e38124a52e9c5dcdedf45fea3f213","impliedFormat":1},{"version":"79b29d17a3545646ecd76c863c1ded92aab47066a9e7ec62498c6b51bdd25db5","signature":"f2542ed28646ccec19a2b407da97ef71777f4a2722da6990c958c2c9612ae978"},{"version":"0eebc3c5b9b2e1c13c3e2bf5c9e662f7ea738283aa075e5ed9f4f452ccfcd7d7","signature":"3a68fd07491ea9758aa26faf124d1bed1f136dc8faf36548aeac0d9c00ea4adf"},{"version":"58bd379cd35397ec1bda403011e71b574565208c520a452e466f1153b3129bce","signature":"083093157b7023388178c2b081e28c011a49aa6b5a80d466e1743eae8e89ebfa"},{"version":"bef0f735f5cf6fbd3e4dd1ebde84aa5b0f4cf87faee1a49b67006bf88b24555d","impliedFormat":99},{"version":"95ca982c8c63a4941cbb2dbd03a0609f9544a13323ca3163a2ce4d8fc799694c","signature":"14ed43e2f565f096e3d6b429e78885bd92ef1990c163997e776519cef055a7d4"},{"version":"2dd494f0ea9072a7415659b921d34570885def0cfeabd71ec4e4355d03832658","signature":"2dcc50c46dcccaadb05bc414e290fd1a75298fcadb47c77c1af84945ec8b6b01"},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"dc0a7f107690ee5cd8afc8dbf05c4df78085471ce16bdd9881642ec738bc81fe","impliedFormat":1},{"version":"d3849fd69e302c57260fa7240436ab2fbffea3ea5ea8cdb4464a72d4c5cefbbb","signature":"27f137787ead6308f0a2e1cb7283eb7d2185dbc24e9e44b7f26c169637bb5638"},{"version":"5c3d43fd2fef6747f4f2ac013c08b2e9aedb7b7de86e14db4fcd7843fe7fb738","signature":"aae272f989b894fd2476c4ab1fb4eaa4dce8d9d16822f1017bbc5901258f7aed"},{"version":"b6f3565dcb19ae5c8f54ca3e9a3150e33a2c9d5ce489f1819d1d5cbff2599738","signature":"14c1c2be8c5b0b8376937fe4b00939ff4f908a017610152da9e5e98f5ecc6461"},{"version":"bdeb8be7846489a834374ee82d983f77d8327ac034cacc4398fac9b31cf60868","signature":"924daeeb197e4da100474710860f3067f07106ef54fae5ce26e0e6c15100886c"},{"version":"3b550137edd669f806bba097e652faf19cbb0d5e15169cd1a92bdd0257e4e5ae","signature":"35611b63c7abd611da2c083062f8da29534bade276b550886a359db9ea2fe7d3"},{"version":"99131d0cd4984e6499a0561e957b69bcdc94cb6fc1fd986dd5e7c5619c83661b","signature":"c71bdd70beb0aef6a37b3a52f5bc22ddb1624a52a2156c28bb95fb74a671327c"},{"version":"536e692fad1ccefb0493a43da94ba0a94ead5d47f37beaa7254f224169ffbba7","signature":"9d091d5cec7aa810f43a111f2b39b7f368aaf20e075fcf849709abef61503396"},{"version":"90d2be4fa0057dff6cbaabf223826b10673b831637b47164c392ab7f15e01cb0","signature":"148ffa86bab501beefdd75c3388380cfcaf772aca124ef71b2087abcb181b749"},{"version":"75974177e90be1a31c9f7e9d4c771e0ca792a585519a00d7359f33b6b5a77d25","signature":"1f3c5ae709edb5001b948f79be7751a924a117008daaf7447bc7c7d24ee60269"},{"version":"d04149a193cf80b34d04d7b183a5fe8cff32ec435af33110acaa6c6ba5ca5294","signature":"1e557b5c8899c5942ab023e47b22ea1e655074b4f32c84ecbde02343e7d8187d"},{"version":"224a964c4511c03779f0f623c06987cbb4a5722181ea4e4e92c93507fd4854bf","signature":"7ea26840bca67fb07966011a93a9a063a1535cfee2b01bf4d4d712ef9e0aa36a"},{"version":"34e059c849e70caa75f850d541be52dca3d2735858965a75100ccdddb42c40a2","signature":"5a44be1eeaba58c62e582e1d499485f66fdf1e39c20b6c78f2a630312d067ae8"},{"version":"9ae1bc935ff3ca050e6c8c821a68d0c4d7a75f0d5caec67fc798f8b074382a72","signature":"45b373ad2e114de335dd3eaf62f9658266d71c2f34537489f88f3b4815fa72f8"},{"version":"5743311bae16373e10cbcd5789e827fc7a88d74d4b1550ec912db1664800563e","signature":"6aca8f90f3daca28d3e8d2fdf46a3f681a861a30b3640d90a41edd0a497aa49b"},{"version":"b8a2ccc7e6256006e5e89fe59faecdc69092894441de311312fd1ca752d06d4c","signature":"93af596965c77e3eef2c6a9d13966c4350a7c367454a14d93a7b36d28ab21a41"},{"version":"f8b2984d3a2424d44d0ae2abc8384880f7d7401311bd0ce505b565d5ceb1efab","signature":"3f2a2db39761a8b9b6836c604185006105c4eba285da95d68e37f3b63e7a38e1"},{"version":"5610540080439443139157d4f3be5d920d993d891443e5adc064a3f51f06d869","signature":"7dce6d5eeffaa54bea2eaffe9ce9ec93e0b520c322eab0b655f3ace3972d1984"},{"version":"07d8ab138892fc1493f0297533d4d10b4c9c6845df93d0f627030f83a564532a","signature":"7509053f2d9fc67d07f5418ec906c88075a555bd3ac720ff7b7aac2f1649453c"},{"version":"0c920195d5ee4c90df3f8d3c4c1f501f0b7fd47e185283aaa61d1deb79f5efb3","signature":"628981754fd69839cbde449b68fff58e43a9a954303bad83ec6b52c42b931a3d"},{"version":"af4bb300163ee70d5b074eea46379e1bedf3766583f6bb6fccfc2ff88baaf83f","signature":"cb5b243f7a8c03dfd9141cf822c6b56fb3ecfdcdeaf353177f8df364dad90d0c"},{"version":"c38f17d8075cafb6c0075745552975158037138e765043f1be8ee6f8a1f43d1d","signature":"04252a9f49771d2519c48c370423531c2e10d5a6b8282ff44cea13e365027f08"},{"version":"e68c72239034b65820999229f901ee0ad15e515c0c44b539b187364a9dfa5946","signature":"d5aa94d54fe08e2187ff49867b1114cdc97cdc2f01f62ea9fa03dc17f72ed197"},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c906fb15bd2aabc9ed1e3f44eb6a8661199d6c320b3aa196b826121552cb3695","impliedFormat":1},{"version":"22295e8103f1d6d8ea4b5d6211e43421fe4564e34d0dd8e09e520e452d89e659","impliedFormat":1},{"version":"58647d85d0f722a1ce9de50955df60a7489f0593bf1a7015521efe901c06d770","impliedFormat":1},{"version":"6b4e081d55ac24fc8a4631d5dd77fe249fa25900abd7d046abb87d90e3b45645","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6f137d651076822d4fe884287e68fd61785a0d3d1fdb250a5059b691fa897db","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"a3fc63c0d7b031693f665f5494412ba4b551fe644ededccc0ab5922401079c95","impliedFormat":1},{"version":"80523c00b8544a2000ae0143e4a90a00b47f99823eb7926c1e03c494216fc363","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"746911b62b329587939560deb5c036aca48aece03147b021fa680223255d5183","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"c8d3e5a18ba35629954e48c4cc8f11dc88224650067a172685c736b27a34a4dc","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2b55d426ff2b9087485e52ac4bc7cfafe1dc420fc76dad926cd46526567c501a","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"47613031a5a31510831304405af561b0ffaedb734437c595256bb61a90f9311b","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"8a1a0d0a4a06a8d278947fcb66bf684f117bf147f89b06e50662d79a53be3e9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"358765d5ea8afd285d4fd1532e78b88273f18cb3f87403a9b16fef61ac9fdcfe","impliedFormat":1},{"version":"9f55299850d4f0921e79b6bf344b47c420ce0f507b9dcf593e532b09ea7eeea1","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1}],"root":[83,[108,110],112,113,[117,138]],"options":{"allowJs":true,"esModuleInterop":true,"jsx":1,"module":99,"skipLibCheck":true,"strict":true,"target":4},"referencedMap":[[83,1],[121,2],[122,3],[124,4],[123,4],[125,3],[126,5],[127,6],[128,3],[113,6],[129,7],[130,3],[119,8],[131,3],[132,3],[133,3],[134,3],[138,9],[136,10],[117,7],[120,11],[118,11],[137,11],[135,11],[110,6],[112,12],[109,6],[108,13],[190,14],[191,14],[192,15],[144,16],[193,17],[194,18],[195,19],[139,6],[142,20],[140,6],[141,6],[196,21],[197,22],[198,23],[199,24],[200,25],[201,26],[202,26],[203,27],[204,28],[205,29],[206,30],[145,6],[143,6],[207,31],[208,32],[209,33],[243,34],[210,35],[211,6],[212,36],[213,37],[214,38],[215,1],[216,39],[217,40],[218,41],[219,42],[220,43],[221,43],[222,44],[223,6],[224,45],[225,46],[227,47],[226,48],[228,49],[229,50],[230,51],[231,52],[232,53],[233,54],[234,55],[235,56],[236,57],[237,58],[238,59],[239,60],[240,61],[146,6],[147,6],[148,6],[187,62],[188,6],[189,6],[241,63],[242,64],[244,7],[114,6],[116,65],[149,6],[115,6],[111,6],[100,66],[98,67],[99,68],[87,69],[88,67],[95,70],[86,71],[91,72],[101,6],[92,73],[97,74],[103,75],[102,76],[85,77],[93,78],[94,79],[89,80],[96,66],[90,81],[84,6],[106,82],[105,6],[104,6],[107,83],[81,6],[82,6],[13,6],[14,6],[16,6],[15,6],[2,6],[17,6],[18,6],[19,6],[20,6],[21,6],[22,6],[23,6],[24,6],[3,6],[25,6],[26,6],[4,6],[27,6],[31,6],[28,6],[29,6],[30,6],[32,6],[33,6],[34,6],[5,6],[35,6],[36,6],[37,6],[38,6],[6,6],[42,6],[39,6],[40,6],[41,6],[43,6],[7,6],[44,6],[49,6],[50,6],[45,6],[46,6],[47,6],[48,6],[8,6],[54,6],[51,6],[52,6],[53,6],[55,6],[9,6],[56,6],[57,6],[58,6],[60,6],[59,6],[61,6],[62,6],[10,6],[63,6],[64,6],[65,6],[11,6],[66,6],[67,6],[68,6],[69,6],[70,6],[1,6],[71,6],[72,6],[12,6],[76,6],[74,6],[79,6],[78,6],[73,6],[77,6],[75,6],[80,6],[165,84],[175,85],[164,84],[185,86],[156,87],[155,88],[184,89],[178,90],[183,91],[158,92],[172,93],[157,94],[181,95],[153,96],[152,89],[182,97],[154,98],[159,99],[160,6],[163,99],[150,6],[186,100],[176,101],[167,102],[168,103],[170,104],[166,105],[169,106],[179,89],[161,107],[162,108],[171,109],[151,110],[174,101],[173,99],[177,6],[180,111]],"semanticDiagnosticsPerFile":[[83,[{"start":32,"length":6,"messageText":"Cannot find module 'next' or its corresponding type declarations.","category":1,"code":2307}]],[109,[{"start":29,"length":13,"messageText":"Cannot find module 'next/server' or its corresponding type declarations.","category":1,"code":2307},{"start":77,"length":13,"messageText":"Cannot find module 'next/server' or its corresponding type declarations.","category":1,"code":2307},{"start":997,"length":4,"code":2769,"category":1,"messageText":{"messageText":"No overload matches this call.","category":1,"code":2769,"next":[{"messageText":"Overload 1 of 2, '(input: string | URL | Request, init?: RequestInit | undefined): Promise', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Object literal may only specify known properties, and 'next' does not exist in type 'RequestInit'.","category":1,"code":2353}]},{"messageText":"Overload 2 of 2, '(input: URL | RequestInfo, init?: RequestInit | undefined): Promise', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Object literal may only specify known properties, and 'next' does not exist in type 'RequestInit'.","category":1,"code":2353}]}]},"relatedInformation":[]}]],[113,[{"start":30,"length":6,"messageText":"Cannot find module 'next' or its corresponding type declarations.","category":1,"code":2307}]],[117,[{"start":32,"length":11,"messageText":"Cannot find module 'next/link' or its corresponding type declarations.","category":1,"code":2307},{"start":73,"length":17,"messageText":"Cannot find module 'next/navigation' or its corresponding type declarations.","category":1,"code":2307}]],[123,[{"start":17,"length":11,"messageText":"Cannot find module 'next/link' or its corresponding type declarations.","category":1,"code":2307}]],[124,[{"start":25,"length":17,"messageText":"Cannot find module 'next/navigation' or its corresponding type declarations.","category":1,"code":2307},{"start":61,"length":11,"messageText":"Cannot find module 'next/link' or its corresponding type declarations.","category":1,"code":2307},{"start":685,"length":8,"code":2345,"category":1,"messageText":"Argument of type 'string' is not assignable to parameter of type 'DocCategory'."},{"start":751,"length":25,"code":7053,"category":1,"messageText":{"messageText":"Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'Record'.","category":1,"code":7053,"next":[{"messageText":"No index signature with a parameter of type 'string' was found on type 'Record'.","category":1,"code":7054}]}},{"start":1232,"length":3,"messageText":"'doc' is possibly 'null'.","category":1,"code":18047},{"start":1300,"length":3,"messageText":"'doc' is possibly 'null'.","category":1,"code":18047},{"start":1314,"length":3,"messageText":"'doc' is possibly 'null'.","category":1,"code":18047},{"start":1416,"length":3,"messageText":"'doc' is possibly 'null'.","category":1,"code":18047},{"start":1535,"length":3,"messageText":"'doc' is possibly 'null'.","category":1,"code":18047},{"start":1639,"length":3,"messageText":"'doc' is possibly 'null'.","category":1,"code":18047},{"start":1745,"length":3,"messageText":"'doc' is possibly 'null'.","category":1,"code":18047},{"start":1932,"length":3,"messageText":"'doc' is possibly 'null'.","category":1,"code":18047},{"start":1994,"length":3,"messageText":"'doc' is possibly 'null'.","category":1,"code":18047},{"start":2013,"length":3,"messageText":"'doc' is possibly 'null'.","category":1,"code":18047},{"start":2184,"length":3,"messageText":"'doc' is possibly 'null'.","category":1,"code":18047}]],[129,[{"start":75,"length":17,"messageText":"Cannot find module 'next/navigation' or its corresponding type declarations.","category":1,"code":2307}]],[135,[{"start":77,"length":11,"messageText":"Cannot find module 'next/link' or its corresponding type declarations.","category":1,"code":2307}]]],"affectedFilesPendingEmit":[83,121,122,124,123,125,126,127,128,113,129,130,119,131,132,133,134,138,136,117,120,118,137,135,110,112,109,108],"version":"5.9.3"} \ No newline at end of file +{"fileNames":["../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.collection.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.collection.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.iterator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.float16.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.error.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","./next.config.ts","../../node_modules/.pnpm/source-map-js@1.2.1/node_modules/source-map-js/source-map.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/previous-map.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/input.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/css-syntax-error.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/declaration.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/root.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/warning.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/lazy-result.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/no-work-result.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/processor.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/result.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/document.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/rule.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/node.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/comment.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/container.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/at-rule.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/list.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/postcss.d.ts","../../node_modules/.pnpm/postcss@8.5.9/node_modules/postcss/lib/postcss.d.mts","../../node_modules/.pnpm/tailwindcss@3.4.19_tsx@4.21.0/node_modules/tailwindcss/types/generated/corePluginList.d.ts","../../node_modules/.pnpm/tailwindcss@3.4.19_tsx@4.21.0/node_modules/tailwindcss/types/generated/colors.d.ts","../../node_modules/.pnpm/tailwindcss@3.4.19_tsx@4.21.0/node_modules/tailwindcss/types/config.d.ts","../../node_modules/.pnpm/tailwindcss@3.4.19_tsx@4.21.0/node_modules/tailwindcss/types/index.d.ts","./tailwind.config.ts","./src/middleware.ts","./src/lib/api.ts","../../node_modules/.pnpm/marked@14.1.4/node_modules/marked/lib/marked.d.ts","./src/lib/docs.ts","./src/app/layout.tsx","../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/global.d.ts","../../node_modules/.pnpm/csstype@3.2.3/node_modules/csstype/index.d.ts","../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/index.d.ts","./src/components/AdminShell.tsx","./src/components/OverviewDashboard.tsx","./src/app/page.tsx","./src/components/AuditLog.tsx","./src/app/audit/page.tsx","./src/app/data-quality/page.tsx","./src/app/docs/page.tsx","./src/app/docs/[category]/[slug]/page.tsx","./src/app/events/page.tsx","./src/app/features/page.tsx","./src/app/forbidden/page.tsx","./src/app/health/page.tsx","./src/app/login/page.tsx","./src/app/ops/page.tsx","./src/app/reward-analytics/page.tsx","./src/app/simulate/page.tsx","./src/app/sql/page.tsx","./src/app/tips/page.tsx","./src/components/UsersTable.tsx","./src/app/users/page.tsx","./src/components/UserDetail.tsx","./src/app/users/[id]/page.tsx","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/compatibility/index.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/events.d.ts","../../node_modules/.pnpm/buffer@5.7.1/node_modules/buffer/index.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/navigator.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/storage.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/inspector.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/inspector.generated.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/readline/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/sea.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/sqlite.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/test.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/index.d.ts","../../node_modules/.pnpm/@types+react-dom@19.2.3_@types+react@19.2.14/node_modules/@types/react-dom/index.d.ts"],"fileIdsList":[[144,193,210,211,215],[117,120,144,193,210,211],[110,116,117,144,193,210,211],[112,117,144,193,210,211],[116,117,144,193,210,211],[144,193,210,211],[116,144,193,210,211],[117,118,144,193,210,211],[117,137,144,193,210,211],[117,135,144,193,210,211],[110,116,144,193,210,211],[111,144,193,206,210,211,215],[107,144,193,210,211],[144,190,191,193,210,211],[144,192,193,210,211],[193,210,211],[144,193,198,210,211,228],[144,193,194,199,204,210,211,213,225,236],[144,193,194,195,204,210,211,213],[139,140,141,144,193,210,211],[144,193,196,210,211,237],[144,193,197,198,205,210,211,214],[144,193,198,210,211,225,233],[144,193,199,201,204,210,211,213],[144,192,193,200,210,211],[144,193,201,202,210,211],[144,193,203,204,210,211],[144,192,193,204,210,211],[144,193,204,205,206,210,211,225,236],[144,193,204,205,206,210,211,220,225,228],[144,186,193,201,204,207,210,211,213,225,236],[144,193,204,205,207,208,210,211,213,225,233,236],[144,193,207,209,210,211,225,233,236],[142,143,144,145,146,147,148,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242],[144,193,204,210,211],[144,193,210,211,212,236],[144,193,201,204,210,211,213,225],[144,193,210,211,214],[144,192,193,210,211,216],[144,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242],[144,193,210,211,218],[144,193,210,211,219],[144,193,204,210,211,220,221],[144,193,210,211,220,222,237,239],[144,193,205,210,211],[144,193,204,210,211,225,226,228],[144,193,210,211,227,228],[144,193,210,211,225,226],[144,193,210,211,228],[144,193,210,211,229],[144,190,193,210,211,225,230,236],[144,193,204,210,211,231,232],[144,193,210,211,231,232],[144,193,198,210,211,213,225,233],[144,193,210,211,234],[144,193,210,211,213,235],[144,193,207,210,211,219,236],[144,193,198,210,211,237],[144,193,210,211,225,238],[144,193,210,211,212,239],[144,193,210,211,240],[144,186,193,210,211],[144,186,193,204,206,210,211,216,225,228,236,238,239,241],[144,193,210,211,225,242],[114,115,144,193,210,211],[99,144,193,210,211],[97,99,144,193,210,211],[88,96,97,98,100,102,144,193,210,211],[86,144,193,210,211],[89,94,99,102,144,193,210,211],[85,102,144,193,210,211],[89,90,93,94,95,102,144,193,210,211],[89,90,91,93,94,102,144,193,210,211],[86,87,88,89,90,94,95,96,98,99,100,102,144,193,210,211],[102,144,193,210,211],[84,86,87,88,89,90,91,93,94,95,96,97,98,99,100,101,144,193,210,211],[84,102,144,193,210,211],[89,91,92,94,95,102,144,193,210,211],[93,102,144,193,210,211],[94,95,99,102,144,193,210,211],[87,97,144,193,210,211],[104,105,144,193,210,211],[103,106,144,193,210,211],[144,158,162,193,210,211,236],[144,158,193,210,211,225,236],[144,153,193,210,211],[144,155,158,193,210,211,233,236],[144,193,210,211,213,233],[144,193,210,211,243],[144,153,193,210,211,243],[144,155,158,193,210,211,213,236],[144,150,151,154,157,193,204,210,211,225,236],[144,158,165,193,210,211],[144,150,156,193,210,211],[144,158,179,180,193,210,211],[144,154,158,193,210,211,228,236,243],[144,179,193,210,211,243],[144,152,153,193,210,211,243],[144,158,193,210,211],[144,152,153,154,155,156,157,158,159,160,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,180,181,182,183,184,185,193,210,211],[144,158,173,193,210,211],[144,158,165,166,193,210,211],[144,156,158,166,167,193,210,211],[144,157,193,210,211],[144,150,153,158,193,210,211],[144,158,162,166,167,193,210,211],[144,162,193,210,211],[144,156,158,161,193,210,211,236],[144,150,155,158,165,193,210,211],[144,193,210,211,225],[144,153,158,179,193,210,211,241,243]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"2ab096661c711e4a81cc464fa1e6feb929a54f5340b46b0a07ac6bbf857471f0","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"73f78680d4c08509933daf80947902f6ff41b6230f94dd002ae372620adb0f60","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5239f5c01bcfa9cd32f37c496cf19c61d69d37e48be9de612b541aac915805b","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"3be60943d84dcf27d44f8918c3ee34f55ba9850c61737bf01f3c6238b3976e16","signature":"fe30465f81a37f23a168022109187dbd1951404e3ec2fbc6516d584c597f1325"},{"version":"402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","impliedFormat":1},{"version":"52dcc257df5119fb66d864625112ce5033ac51a4c2afe376a0b299d2f7f76e4a","impliedFormat":1},{"version":"e5bab5f871ef708d52d47b3e5d0aa72a08ee7a152f33931d9a60809711a2a9a3","impliedFormat":1},{"version":"e16dc2a81595736024a206c7d5c8a39bfe2e6039208ef29981d0d95434ba8fcf","impliedFormat":1},{"version":"cc4a4903fb698ca1d961d4c10dce658aa3a479faf40509d526f122b044eaf6a4","impliedFormat":1},{"version":"19ee8416e6473ed6c7adb868fa796b5653cf0fa2a337658e677eaa0d134388c3","impliedFormat":1},{"version":"1328ab4e442614b28cdb3d4b414cf68325c0da0dca07287a338d0654b7a00261","impliedFormat":1},{"version":"a039dc21f045919f3cbee2ec13812cc6cc3eebc99dae4be00973230f468d19a6","impliedFormat":1},{"version":"3fbe57af01460e49dcd29df55d6931e1672bc6f1be0fb073d11410bc16f9037d","impliedFormat":1},{"version":"f760be449e8562ec5c09bb5187e8e1eabf3c113c0c58cddda53ef8c69f3e2131","impliedFormat":1},{"version":"44325ed13294fce6ab825b82947bbeed2611db7dad9d9135260192f375e5a189","impliedFormat":1},{"version":"e392e8fb5b514eafc585601c1d781485aa6dd6a320e75daf1064a4c6918a1b45","impliedFormat":1},{"version":"46e4a36e8ddbdfb4e7330e11c81c970dc8b218611df9183d39c41c5f8c653b55","impliedFormat":1},{"version":"370bde134aa8c2abc926d0e99d3a4d5d5dba65c6ee65459137e4f02670cbf841","impliedFormat":1},{"version":"6332f565867cf4a740a70e30f31cefba37ef7cebcf74f22eab8d744fde6d193e","impliedFormat":1},{"version":"2977b7884aedc895a1d0c9c210c7cf3272c29d6959a08a6fa3ff71e0aff08175","impliedFormat":1},{"version":"17f2922d41ddd032830a91371c948cd9ce903b35c95adca72271a54584f19b0b","impliedFormat":1},{"version":"3eed76ede2a1a14d7c9bb0a642041282dcc264811139d3dd275c9fe14efc9840","impliedFormat":1},{"version":"00cf4001e0d9c6e5e036bc545b9d73e2b8b84cddb02e61ad05bab3752b1d4522","impliedFormat":1},{"version":"8d369483f0c2b9ee388129cfdb6a43bc8112b377e86a41884bd06e19ce04f4c1","impliedFormat":99},{"version":"b558c9a18ea4e6e4157124465c3ef1063e64640da139e67be5edb22f534f2f08","impliedFormat":1},{"version":"01374379f82be05d25c08d2f30779fa4a4c41895a18b93b33f14aeef51768692","impliedFormat":1},{"version":"b0dee183d4e65cf938242efaf3d833c6b645afb35039d058496965014f158141","impliedFormat":1},{"version":"c0bbbf84d3fbd85dd60d040c81e8964cc00e38124a52e9c5dcdedf45fea3f213","impliedFormat":1},{"version":"79b29d17a3545646ecd76c863c1ded92aab47066a9e7ec62498c6b51bdd25db5","signature":"f2542ed28646ccec19a2b407da97ef71777f4a2722da6990c958c2c9612ae978"},{"version":"0eebc3c5b9b2e1c13c3e2bf5c9e662f7ea738283aa075e5ed9f4f452ccfcd7d7","signature":"3a68fd07491ea9758aa26faf124d1bed1f136dc8faf36548aeac0d9c00ea4adf"},{"version":"394b3aedc9be903f4f28ab71f8ef3aef486415b4b36f11f990f2b7bc01bedb16","signature":"94453936884c0fa782694d733113113a9be989c079e24b821128b28552f1aff0"},{"version":"bef0f735f5cf6fbd3e4dd1ebde84aa5b0f4cf87faee1a49b67006bf88b24555d","impliedFormat":99},{"version":"718a7c41906cb1619a8e0ab26eda61b090c7340670d3f2e6171b761be4549195","signature":"14ed43e2f565f096e3d6b429e78885bd92ef1990c163997e776519cef055a7d4"},{"version":"2dd494f0ea9072a7415659b921d34570885def0cfeabd71ec4e4355d03832658","signature":"2dcc50c46dcccaadb05bc414e290fd1a75298fcadb47c77c1af84945ec8b6b01"},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"dc0a7f107690ee5cd8afc8dbf05c4df78085471ce16bdd9881642ec738bc81fe","impliedFormat":1},{"version":"0261647be9b4dad3217c2c2b9e6e9b1dbc0ddcdb7666051278a3db340f2e88cb","signature":"27f137787ead6308f0a2e1cb7283eb7d2185dbc24e9e44b7f26c169637bb5638"},"5c3d43fd2fef6747f4f2ac013c08b2e9aedb7b7de86e14db4fcd7843fe7fb738","b6f3565dcb19ae5c8f54ca3e9a3150e33a2c9d5ce489f1819d1d5cbff2599738","bdeb8be7846489a834374ee82d983f77d8327ac034cacc4398fac9b31cf60868","3b550137edd669f806bba097e652faf19cbb0d5e15169cd1a92bdd0257e4e5ae","99131d0cd4984e6499a0561e957b69bcdc94cb6fc1fd986dd5e7c5619c83661b",{"version":"536e692fad1ccefb0493a43da94ba0a94ead5d47f37beaa7254f224169ffbba7","signature":"9d091d5cec7aa810f43a111f2b39b7f368aaf20e075fcf849709abef61503396"},{"version":"90d2be4fa0057dff6cbaabf223826b10673b831637b47164c392ab7f15e01cb0","signature":"148ffa86bab501beefdd75c3388380cfcaf772aca124ef71b2087abcb181b749"},"75974177e90be1a31c9f7e9d4c771e0ca792a585519a00d7359f33b6b5a77d25",{"version":"d04149a193cf80b34d04d7b183a5fe8cff32ec435af33110acaa6c6ba5ca5294","signature":"1e557b5c8899c5942ab023e47b22ea1e655074b4f32c84ecbde02343e7d8187d"},{"version":"224a964c4511c03779f0f623c06987cbb4a5722181ea4e4e92c93507fd4854bf","signature":"7ea26840bca67fb07966011a93a9a063a1535cfee2b01bf4d4d712ef9e0aa36a"},"34e059c849e70caa75f850d541be52dca3d2735858965a75100ccdddb42c40a2",{"version":"9ae1bc935ff3ca050e6c8c821a68d0c4d7a75f0d5caec67fc798f8b074382a72","signature":"45b373ad2e114de335dd3eaf62f9658266d71c2f34537489f88f3b4815fa72f8"},{"version":"8e1cfc5e4a61dbd1b67bc7c301d69b3a97d0272dfe6441d80833c36e4b1fb20e","signature":"6aca8f90f3daca28d3e8d2fdf46a3f681a861a30b3640d90a41edd0a497aa49b"},"b8a2ccc7e6256006e5e89fe59faecdc69092894441de311312fd1ca752d06d4c",{"version":"5e7c41da6b67fceff1b13d50fde6bbbbaa6f1764d590e92421c6b0eddfcfc476","signature":"3f2a2db39761a8b9b6836c604185006105c4eba285da95d68e37f3b63e7a38e1"},"5610540080439443139157d4f3be5d920d993d891443e5adc064a3f51f06d869","07d8ab138892fc1493f0297533d4d10b4c9c6845df93d0f627030f83a564532a",{"version":"635be505edf001e5e521d8d9ae33af78570f817e958335d1d470e4596e898273","signature":"628981754fd69839cbde449b68fff58e43a9a954303bad83ec6b52c42b931a3d"},"af4bb300163ee70d5b074eea46379e1bedf3766583f6bb6fccfc2ff88baaf83f","c38f17d8075cafb6c0075745552975158037138e765043f1be8ee6f8a1f43d1d","e68c72239034b65820999229f901ee0ad15e515c0c44b539b187364a9dfa5946",{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c906fb15bd2aabc9ed1e3f44eb6a8661199d6c320b3aa196b826121552cb3695","impliedFormat":1},{"version":"22295e8103f1d6d8ea4b5d6211e43421fe4564e34d0dd8e09e520e452d89e659","impliedFormat":1},{"version":"58647d85d0f722a1ce9de50955df60a7489f0593bf1a7015521efe901c06d770","impliedFormat":1},{"version":"6b4e081d55ac24fc8a4631d5dd77fe249fa25900abd7d046abb87d90e3b45645","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6f137d651076822d4fe884287e68fd61785a0d3d1fdb250a5059b691fa897db","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"a3fc63c0d7b031693f665f5494412ba4b551fe644ededccc0ab5922401079c95","impliedFormat":1},{"version":"80523c00b8544a2000ae0143e4a90a00b47f99823eb7926c1e03c494216fc363","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"746911b62b329587939560deb5c036aca48aece03147b021fa680223255d5183","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"c8d3e5a18ba35629954e48c4cc8f11dc88224650067a172685c736b27a34a4dc","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2b55d426ff2b9087485e52ac4bc7cfafe1dc420fc76dad926cd46526567c501a","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"47613031a5a31510831304405af561b0ffaedb734437c595256bb61a90f9311b","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"8a1a0d0a4a06a8d278947fcb66bf684f117bf147f89b06e50662d79a53be3e9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"358765d5ea8afd285d4fd1532e78b88273f18cb3f87403a9b16fef61ac9fdcfe","impliedFormat":1},{"version":"9f55299850d4f0921e79b6bf344b47c420ce0f507b9dcf593e532b09ea7eeea1","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1}],"root":[83,[108,110],112,113,[117,138]],"options":{"allowJs":true,"esModuleInterop":true,"jsx":1,"module":99,"skipLibCheck":true,"strict":true,"target":4},"referencedMap":[[83,1],[121,2],[122,3],[124,4],[123,4],[125,3],[126,5],[127,6],[128,3],[113,6],[129,7],[130,3],[119,8],[131,3],[132,3],[133,3],[134,3],[138,9],[136,10],[117,7],[120,11],[118,11],[137,11],[135,11],[110,6],[112,12],[109,6],[108,13],[190,14],[191,14],[192,15],[144,16],[193,17],[194,18],[195,19],[139,6],[142,20],[140,6],[141,6],[196,21],[197,22],[198,23],[199,24],[200,25],[201,26],[202,26],[203,27],[204,28],[205,29],[206,30],[145,6],[143,6],[207,31],[208,32],[209,33],[243,34],[210,35],[211,6],[212,36],[213,37],[214,38],[215,1],[216,39],[217,40],[218,41],[219,42],[220,43],[221,43],[222,44],[223,6],[224,45],[225,46],[227,47],[226,48],[228,49],[229,50],[230,51],[231,52],[232,53],[233,54],[234,55],[235,56],[236,57],[237,58],[238,59],[239,60],[240,61],[146,6],[147,6],[148,6],[187,62],[188,6],[189,6],[241,63],[242,64],[244,7],[114,6],[116,65],[149,6],[115,6],[111,6],[100,66],[98,67],[99,68],[87,69],[88,67],[95,70],[86,71],[91,72],[101,6],[92,73],[97,74],[103,75],[102,76],[85,77],[93,78],[94,79],[89,80],[96,66],[90,81],[84,6],[106,82],[105,6],[104,6],[107,83],[81,6],[82,6],[13,6],[14,6],[16,6],[15,6],[2,6],[17,6],[18,6],[19,6],[20,6],[21,6],[22,6],[23,6],[24,6],[3,6],[25,6],[26,6],[4,6],[27,6],[31,6],[28,6],[29,6],[30,6],[32,6],[33,6],[34,6],[5,6],[35,6],[36,6],[37,6],[38,6],[6,6],[42,6],[39,6],[40,6],[41,6],[43,6],[7,6],[44,6],[49,6],[50,6],[45,6],[46,6],[47,6],[48,6],[8,6],[54,6],[51,6],[52,6],[53,6],[55,6],[9,6],[56,6],[57,6],[58,6],[60,6],[59,6],[61,6],[62,6],[10,6],[63,6],[64,6],[65,6],[11,6],[66,6],[67,6],[68,6],[69,6],[70,6],[1,6],[71,6],[72,6],[12,6],[76,6],[74,6],[79,6],[78,6],[73,6],[77,6],[75,6],[80,6],[165,84],[175,85],[164,84],[185,86],[156,87],[155,88],[184,89],[178,90],[183,91],[158,92],[172,93],[157,94],[181,95],[153,96],[152,89],[182,97],[154,98],[159,99],[160,6],[163,99],[150,6],[186,100],[176,101],[167,102],[168,103],[170,104],[166,105],[169,106],[179,89],[161,107],[162,108],[171,109],[151,110],[174,101],[173,99],[177,6],[180,111]],"semanticDiagnosticsPerFile":[[83,[{"start":32,"length":6,"messageText":"Cannot find module 'next' or its corresponding type declarations.","category":1,"code":2307}]],[109,[{"start":29,"length":13,"messageText":"Cannot find module 'next/server' or its corresponding type declarations.","category":1,"code":2307},{"start":77,"length":13,"messageText":"Cannot find module 'next/server' or its corresponding type declarations.","category":1,"code":2307},{"start":997,"length":4,"code":2769,"category":1,"messageText":{"messageText":"No overload matches this call.","category":1,"code":2769,"next":[{"messageText":"Overload 1 of 2, '(input: string | URL | Request, init?: RequestInit | undefined): Promise', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Object literal may only specify known properties, and 'next' does not exist in type 'RequestInit'.","category":1,"code":2353}]},{"messageText":"Overload 2 of 2, '(input: URL | RequestInfo, init?: RequestInit | undefined): Promise', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Object literal may only specify known properties, and 'next' does not exist in type 'RequestInit'.","category":1,"code":2353}]}]},"relatedInformation":[]}]],[113,[{"start":30,"length":6,"messageText":"Cannot find module 'next' or its corresponding type declarations.","category":1,"code":2307}]],[117,[{"start":32,"length":11,"messageText":"Cannot find module 'next/link' or its corresponding type declarations.","category":1,"code":2307},{"start":73,"length":17,"messageText":"Cannot find module 'next/navigation' or its corresponding type declarations.","category":1,"code":2307}]],[123,[{"start":17,"length":11,"messageText":"Cannot find module 'next/link' or its corresponding type declarations.","category":1,"code":2307}]],[124,[{"start":25,"length":17,"messageText":"Cannot find module 'next/navigation' or its corresponding type declarations.","category":1,"code":2307},{"start":61,"length":11,"messageText":"Cannot find module 'next/link' or its corresponding type declarations.","category":1,"code":2307},{"start":685,"length":8,"code":2345,"category":1,"messageText":"Argument of type 'string' is not assignable to parameter of type 'DocCategory'."},{"start":751,"length":25,"code":7053,"category":1,"messageText":{"messageText":"Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'Record'.","category":1,"code":7053,"next":[{"messageText":"No index signature with a parameter of type 'string' was found on type 'Record'.","category":1,"code":7054}]}},{"start":1232,"length":3,"messageText":"'doc' is possibly 'null'.","category":1,"code":18047},{"start":1300,"length":3,"messageText":"'doc' is possibly 'null'.","category":1,"code":18047},{"start":1314,"length":3,"messageText":"'doc' is possibly 'null'.","category":1,"code":18047},{"start":1416,"length":3,"messageText":"'doc' is possibly 'null'.","category":1,"code":18047},{"start":1535,"length":3,"messageText":"'doc' is possibly 'null'.","category":1,"code":18047},{"start":1639,"length":3,"messageText":"'doc' is possibly 'null'.","category":1,"code":18047},{"start":1745,"length":3,"messageText":"'doc' is possibly 'null'.","category":1,"code":18047},{"start":1932,"length":3,"messageText":"'doc' is possibly 'null'.","category":1,"code":18047},{"start":1994,"length":3,"messageText":"'doc' is possibly 'null'.","category":1,"code":18047},{"start":2013,"length":3,"messageText":"'doc' is possibly 'null'.","category":1,"code":18047},{"start":2184,"length":3,"messageText":"'doc' is possibly 'null'.","category":1,"code":18047}]],[129,[{"start":75,"length":17,"messageText":"Cannot find module 'next/navigation' or its corresponding type declarations.","category":1,"code":2307}]],[135,[{"start":77,"length":11,"messageText":"Cannot find module 'next/link' or its corresponding type declarations.","category":1,"code":2307}]]],"affectedFilesPendingEmit":[83,121,122,124,123,125,126,127,128,113,129,130,119,131,132,133,134,138,136,117,120,118,137,135,110,112,109,108],"version":"5.9.3"} \ No newline at end of file diff --git a/docs/adr/0014-unified-profile-and-agent-registry.md b/docs/adr/0014-unified-profile-and-agent-registry.md new file mode 100644 index 0000000..749907d --- /dev/null +++ b/docs/adr/0014-unified-profile-and-agent-registry.md @@ -0,0 +1,230 @@ +# ADR-0014 — Unified Profile model + agent registry + +**Status:** Proposed +**Date:** 2026-05-05 +**Issues:** #30, #111, #112, #113, #114, #115, #116 +**Supersedes (data model):** ADR-0013 (the agent set stands; this ADR replaces the implicit assumption that prefs/contexts/consents are hardcoded on `users`). + +## Context + +ADR-0013 introduced the multi-agent pipeline: N pre-compute agents emit +prompt snippets, an orchestrator LLM assembles them into a tip. The ADR +specified the `agent_outputs` table and the orchestrator contract, but +left several questions open: + +1. **Where do user preferences live?** `users.consentGiven` is a single + boolean. There is no place for quiet hours, tone, allowed tip kinds, + or per-integration consent. Each new preference would mean another + typed column on `users` — and worse, every new agent needs its own + tunable parameters (focus areas, momentum baseline, lateness tolerance) + that are clearly per-agent state, not global user state. +2. **How are agents discovered?** The orchestrator currently iterates a + hardcoded list. Adding an agent means touching the recommender, the + admin UI, and the prefs schema in three places. +3. **How does context (work / home / vacation) interact with agents?** + Some agents should be silenced in some contexts. There is no model. +4. **How is per-user agent configuration learned?** Issues #112–#116 + each want to auto-infer parameters (quiet hours, focus areas, etc.) + from history. Without a shared substrate they each reinvent storage, + recompute cadence, and cold-start fallback. + +The current ADR-0013 design works for five agents. It will not work for +twenty without becoming a tangle. + +## Decision + +Three changes, designed to compose: + +### 1. Agents are plugins with declared schemas + +Every agent ships a manifest (Python, lives next to its code in +`ml/agents//manifest.py`): + +```python +class AgentManifest: + id: str # 'time-of-day' + version: str # bump invalidates cached outputs + inferences + pref_schema: dict # JSON Schema for user-tunable knobs + context_schema: list[str] # signals it reads, e.g. ['todoist.tasks'] + required_consents: list[str] # ['data:todoist', 'agent:time-of-day'] + output_contract: dict # snippet shape (free text + optional tags) + ttl_sec: int # snippet freshness for agent_outputs + inferred_params: list[InferredParam] # see §3 +``` + +The manifest is the **single point of registration**. The orchestrator, +admin UI, and inference framework all read from it. Adding an agent is +adding one directory in `ml/agents/` — no edits elsewhere. + +A `GET /api/agents/registry` endpoint (TS recommender → Python proxy) +exposes manifests so the admin app can auto-render configuration UI from +each `pref_schema`. + +### 2. Unified Profile data model + +Three new tables replace the implicit "fields-on-users" pattern. +`users.consentGiven` collapses into `user_consents` (one row, +`consent_key='data:core'`); existing data migrates in a single +backfill. + +```sql +-- Hybrid: typed columns where stable, KV where open-ended. +-- Stable globals stay on users (added in this ADR): +ALTER TABLE users ADD COLUMN tone TEXT; -- 'direct'|'gentle'|'motivational' +ALTER TABLE users ADD COLUMN tip_kinds_json TEXT; -- JSON: allowed tip kinds + +-- Open-ended per-agent prefs land here: +CREATE TABLE user_preferences ( + user_id TEXT NOT NULL REFERENCES users(id), + scope TEXT NOT NULL, -- 'orchestrator' | 'agent:' + key TEXT NOT NULL, -- e.g. 'quietStart', 'focusAreas' + value_json TEXT NOT NULL, -- agent validates against its pref_schema on read + updated_at TEXT NOT NULL, + source TEXT NOT NULL DEFAULT 'user', -- 'user' | 'inferred' + PRIMARY KEY (user_id, scope, key) +); + +CREATE TABLE user_consents ( + user_id TEXT NOT NULL REFERENCES users(id), + consent_key TEXT NOT NULL, -- 'data:todoist' | 'data:calendar' | 'agent:focus-area' + granted_at TEXT NOT NULL, + revoked_at TEXT, -- null = currently active + PRIMARY KEY (user_id, consent_key) +); + +CREATE TABLE user_contexts ( + user_id TEXT NOT NULL REFERENCES users(id), + name TEXT NOT NULL, -- 'work' | 'home' | 'vacation' | user-named + active INTEGER NOT NULL DEFAULT 0, -- boolean + schedule_json TEXT, -- optional: when this context is active + created_at TEXT NOT NULL, + PRIMARY KEY (user_id, name) +); +``` + +Why hybrid (typed for stable globals, KV for per-agent): + +- `tone` and allowed tip kinds are referenced by every recommendation — + putting them in JSON imposes a parse on every read. +- Per-agent prefs are open-ended (each agent declares its own keys) and + validated on read against the agent's `pref_schema`, so KV is correct. + +`user_preferences.source = 'user' | 'inferred'` keeps explicit user +overrides distinguishable from inferred values (the inference framework +never overwrites a `source='user'` row). + +`user_contexts` ships in this ADR with **manual toggle only**. +Auto-inference per agent type is tracked in #112–#116; cross-agent +calendar/geo inference is out of scope. + +### 3. Shared context-inference framework + +Each `InferredParam` in a manifest declares: + +```python +@dataclass +class InferredParam: + key: str # 'quietStart' + ttl_sec: int # how often to recompute + cold_start_default: Any # value used until enough history exists + min_history: int # event count threshold + infer: Callable[[UserHistory], Any] # pure function +``` + +The framework (`ml/agents/inference/`) owns: + +- Scheduling (recomputes per-param via the existing pre-compute scheduler). +- Reading history from `tip_views` / `tip_feedback` / `agent_outputs`. +- Writing results to `user_preferences` with `source='inferred'`. +- Cold-start: returns `cold_start_default` until `min_history` is met. +- Versioning: bumping `agent.version` invalidates inferred rows for that agent. +- Observability: structured log per recompute (window size, output diff, latency). + +Each per-agent issue (#112–#116) implements only its `infer()` functions; +everything else is the framework. + +## Read-through API + +Stays small as N grows because every endpoint is registry-driven: + +``` +GET /api/profile → { user, prefs (grouped by scope), contexts, consents, agents[] } +PATCH /api/profile/prefs/:scope → upserts user_preferences rows (source='user') +PATCH /api/profile/consents → grant/revoke +PATCH /api/profile/contexts → activate/deactivate / create +GET /api/agents/registry → manifests; admin UI auto-renders forms from pref_schema +``` + +`GET /api/profile` is the read-through used by `ml/serving` and the web +client; it's the single endpoint each consumer calls instead of reading +the DB directly. + +## Orchestrator flow under this ADR + +``` +1. Load Profile = { user, prefs, active context, consents } via /api/profile. +2. From agent registry, filter eligible agents: + - required consents granted + - not silenced by active context (declared per-agent) + - enabled in user_preferences (default: enabled) +3. Pull latest non-expired agent_outputs for the eligible set. +4. Build orchestrator prompt: + - global prefs (tone, allowed tip kinds) + - active context name as hint + - agent snippets in eligibility order +5. LLM → tip. +``` + +No hardcoded agent list anywhere in the recommender. The orchestrator +prompt template (`v4-orchestrator`) iterates whatever it was handed. + +## Migration plan + +One PR per step; each independently deployable. + +1. **Schema** — add the three tables; add `tone` and `tip_kinds_json` to `users`. +2. **Backfill** — write `users.consentGiven` rows into `user_consents` as `data:core`. Keep the column for one release, then drop. +3. **Manifest plumbing** — `ml/agents//manifest.py` for the existing five; `GET /api/agents/registry` proxy. +4. **Read-through API** — `/api/profile` + sub-endpoints. +5. **Orchestrator cutover** — registry-driven eligibility filter. +6. **Inference framework** (#111) — land it; migrate `time-of-day` (#112) as the proof. +7. **Per-agent inference** — #113–#116 land independently against the framework. +8. **Drop `users.consentGiven`** after one release. + +## Consequences + +### Positive + +- Adding an agent = one directory. Admin UI, prefs storage, consent + storage, and inference all auto-pick-up. +- Per-agent state lives next to the agent code; nothing global to edit. +- User-controlled prefs and inferred prefs use the same storage but stay + distinguishable (`source` column). +- Consent revocation is row-level and time-stamped; aligns with the + privacy stance in CLAUDE.md ("privacy is a feature, not a phase"). +- Sets up cleanly for #27 (Calendar) and #28 (Health) — they register + their own consent keys without schema changes. + +### Negative / risks + +- **JSON validation on read** for per-agent prefs is later than column + typing. Mitigated by validating in the manifest's load function and + failing closed (use cold-start default if invalid). +- **Two-table reads** for the orchestrator (registry + profile + outputs) + add latency. Cached profile read keeps it sub-ms in practice. +- **Migration window** during which `users.consentGiven` and + `user_consents` both exist. Reads must consult both for one release; + writes go to `user_consents` only. +- **Auto-inference can mislead.** A wrong-but-confident inferred quiet + window silences the user when they want pings. Mitigation: every + inferred param is overrideable in admin/settings (`source='user'` + takes precedence), and inferences only kick in past their + `min_history` threshold. + +## What this does NOT change + +- ADR-0013's agent set, snippet contract, or `agent_outputs` table. +- ADR-0011's `userProfileFeatures` (ML-derived features, not user prefs). +- ADR-0008's LiteLLM gateway pattern. +- The orchestrator prompt template name (`v4-orchestrator`); the assembly + rule changes, the contract does not. diff --git a/docs/architecture/data-model.md b/docs/architecture/data-model.md index 4b744b8..7c54fba 100644 --- a/docs/architecture/data-model.md +++ b/docs/architecture/data-model.md @@ -25,12 +25,37 @@ Session auth expires_at revoked_at? -Profile profile - user_id (pk) - timezone - quiet_hours jsonb: [{start,end,days}] - contexts jsonb: [{name,predicate}] introduced in Phase 2 - consents jsonb: {integration: {read,write,retain_days}} +User (extended) profile ADR-0014 + + tone 'direct' | 'gentle' | 'motivational' + + tip_kinds_json jsonb: allowed tip kinds (stable globals) + +UserPreference profile ADR-0014 + user_id, scope, key (pk) + scope 'orchestrator' | 'agent:' + value_json open-ended; agent validates against its pref_schema on read + source 'user' | 'inferred' (inferred never overwrites user) + updated_at + +UserConsent profile ADR-0014 + user_id, consent_key (pk) + consent_key 'data:todoist' | 'data:calendar' | 'agent:focus-area' | ... + granted_at + revoked_at? null = currently active + +UserContext profile ADR-0014 + user_id, name (pk) 'work' | 'home' | 'vacation' | user-named + active manual toggle in M2; auto-inference per agent in #112-#116 + schedule_json? optional: when this context is active + created_at + +AgentOutput recommender ADR-0013 + id (pk) + user_id + agent_id e.g. 'overdue-task' (matches a manifest) + prompt_text snippet for the orchestrator prompt + signals_snapshot jsonb: inputs the agent consumed + computed_at, expires_at computed_at + manifest.ttl_sec + agent_version bump to invalidate cached outputs on logic changes Credential integrations user_id @@ -53,10 +78,10 @@ Event events TipInstance recommender tip_id (ulid) user_id - policy_name "random" | "bandit.linucb" | "remote:v3" + policy_name "v4-orchestrator" (ADR-0013) | legacy bandit names retained for history policy_version - candidate_source "todoist" | "advice.library" | ... - context_snapshot jsonb: features seen at decision time + candidate_source "todoist" | "advice.library" | "agent-orchestrator" | ... + context_snapshot jsonb: features + agent snippets seen at decision time tip jsonb: {kind,title,body,source,deep_link,meta} created_at shown_at? set when the client reports render diff --git a/docs/architecture/overview.md b/docs/architecture/overview.md index d870633..f47d984 100644 --- a/docs/architecture/overview.md +++ b/docs/architecture/overview.md @@ -48,6 +48,8 @@ User reactions (done / snooze / dismiss) are events too. They close the loop as - **Feast** for feature store when we get there; homegrown adapter until then (Phase 1 seam). - **MLflow** for model registry and experiment tracking; deployed at `o.alogins.net/mlflow`. - **Auth.js** embedded behind an OIDC-shaped boundary (ADR-0004). Swap to a standalone OIDC provider when mobile ships. +- **Multi-agent recommendation** (ADR-0013) — pre-compute agents emit prompt snippets, an orchestrator LLM produces the tip. Replaced the ε-greedy bandit (ADR-0007/0012) for explainability, cold-start, and decoupling generation from selection. +- **Registry-driven agents + unified Profile** (ADR-0014) — agents are plugins with declared manifests; per-user prefs, contexts, and per-key consents live in shared tables; auto-inferred parameters share a common framework. Adding an agent is a manifest change. - **k3s** as the first step beyond docker-compose — no "compose → full k8s" cliff. ## AI stack @@ -59,30 +61,43 @@ All LLM inference routes through **LiteLLM** (`llm.alogins.net`) backed by **Oll **OpenWebUI** (`ai.alogins.net`) is the human-facing interface for prompt iteration and model testing during development. -## Decision flow for a new tip (Phase 2 target) +## Decision flow for a new tip (M2, ADR-0013 + ADR-0014) ``` + ┌────────────────────────────────────────────────┐ + │ Pre-compute (every 15 min, per registered agent) │ + │ ml/agents/ → prompt snippet → agent_outputs │ + │ TTL per manifest; agent_version invalidates │ + └────────────────────────────────────────────────┘ + client ─► gateway ─► recommender (TS) + │ + ├─► profile: GET /api/profile + │ (user, prefs, active context, consents) + │ + ├─► registry: GET /api/agents/registry + │ (manifests; eligibility filter inputs) + │ + ├─► outputs: pull freshest non-expired agent_outputs + │ for eligible agents (consents granted, + │ not silenced by active context, enabled) │ ▼ ml/serving (Python) │ - ├─► context: ml/features/context.py - │ (tasks + reactions + time patterns → prompt) + ├─► assemble: v4-orchestrator prompt + │ = global prefs + active context + snippets │ - ├─► generate: LiteLLM → Ollama - │ → N TipCandidates {content, kind, model, prompt_version} + ├─► generate: LiteLLM → Ollama → one tip │ - ├─► score: bandit policy scores each candidate - │ - ├─► shadows: shadow policies log picks without serving - │ - └─► persist: tip_scores {candidate, policy, features, latency} - ◄─ best TipCandidate + └─► persist: tip_scores {tip, contributing agents, + prompt_version, llm_model, latency} + ◄─ tip ``` -**Phase 1 (shipped M1):** candidates come from Todoist task list, no LLM. The bandit scores tasks directly. +**Evolution:** +- **Phase 1 (M1):** candidates from Todoist; ε-greedy bandit scored tasks directly (ADR-0007, ADR-0012). Superseded. +- **Phase 2 early (M2):** LLM-generated candidates ranked by bandit. Superseded mid-milestone. +- **Phase 2 current (M2):** multi-agent pipeline (ADR-0013), registry-driven and registry-extensible (ADR-0014). No bandit; the orchestrator LLM reasons over named agent snippets. -**Phase 2 (shipped M2):** LLM candidates are generated in parallel with Todoist fetch. Both pools are merged, scored by the bandit, and the winner served. `tip_scores` tracks `prompt_version`, `llm_model`, and `tip_kind` for every row. - -Feedback: `POST /feedback → events.emit(reaction)` → online bandit update + `prompt_version` tracked for A/B analysis. +Feedback: `POST /feedback → events.emit(reaction)`. No online ML reward loop (ADR-0013 §Consequences); reactions are logged in `tip_feedback` for observability and potential future supervised learning. diff --git a/docs/architecture/privacy.md b/docs/architecture/privacy.md index 0c04835..103118a 100644 --- a/docs/architecture/privacy.md +++ b/docs/architecture/privacy.md @@ -26,7 +26,7 @@ User taps "Delete account" in settings → hard confirm → `User.deleted_at` se ## Scope boundaries -Each integration declares the scopes it requests and the features it derives. The `Profile.consents` column is the source of truth; a scope removed from consent short-circuits derived-feature computation at the feature store. +Each integration and each agent declares the consent keys it requires (`data:todoist`, `agent:focus-area`, ...) in its manifest. The `user_consents` table is the source of truth (per-key rows, revocation is a `revoked_at` write — never a delete, so audits stay clean). A revoked consent short-circuits derived-feature computation at the feature store and removes the dependent agent from the orchestrator's eligible set on the next tip. See ADR-0014. ## Audit